summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorjbj <devnull@localhost>2003-12-15 21:42:09 +0000
committerjbj <devnull@localhost>2003-12-15 21:42:09 +0000
commit8960e3895f7af91126465368dff8fbb36ab4e853 (patch)
tree3c515e39dde0e88edeb806ea87d08524ba25c761 /db
parent752cac72e220dcad4e6fce39508e714e59e3e0a1 (diff)
downloadlibrpm-tizen-8960e3895f7af91126465368dff8fbb36ab4e853.tar.gz
librpm-tizen-8960e3895f7af91126465368dff8fbb36ab4e853.tar.bz2
librpm-tizen-8960e3895f7af91126465368dff8fbb36ab4e853.zip
- upgrade to db-4.2.52.
CVS patchset: 6972 CVS date: 2003/12/15 21:42:09
Diffstat (limited to 'db')
-rw-r--r--db/LICENSE4
-rw-r--r--db/README4
-rw-r--r--db/btree/bt_compare.c14
-rw-r--r--db/btree/bt_conv.c30
-rw-r--r--db/btree/bt_curadj.c87
-rw-r--r--db/btree/bt_cursor.c1332
-rw-r--r--db/btree/bt_delete.c187
-rw-r--r--db/btree/bt_method.c274
-rw-r--r--db/btree/bt_open.c432
-rw-r--r--db/btree/bt_put.c233
-rw-r--r--db/btree/bt_rec.c510
-rw-r--r--db/btree/bt_reclaim.c40
-rw-r--r--db/btree/bt_recno.c471
-rw-r--r--db/btree/bt_rsearch.c88
-rw-r--r--db/btree/bt_search.c120
-rw-r--r--db/btree/bt_split.c321
-rw-r--r--db/btree/bt_stat.c259
-rw-r--r--db/btree/bt_upgrade.c25
-rw-r--r--db/btree/bt_verify.c733
-rw-r--r--db/btree/btree.src142
-rw-r--r--db/btree/btree_auto.c3528
-rw-r--r--db/build_vxworks/BerkeleyDB.wsp29
-rw-r--r--db/build_vxworks/BerkeleyDB/component.cdf7
-rw-r--r--db/build_vxworks/BerkeleyDB/component.wpj43
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/BerkeleyDB20.wpj (renamed from db/build_vxworks/BerkeleyDB.wpj)33
-rwxr-xr-xdb/build_vxworks/BerkeleyDB20.wsp29
-rwxr-xr-xdb/build_vxworks/BerkeleyDB22.wpj3679
-rwxr-xr-xdb/build_vxworks/BerkeleyDB22.wsp29
-rw-r--r--db/build_vxworks/db.h764
-rw-r--r--db/build_vxworks/db_archive/db_archive.c32
-rw-r--r--db/build_vxworks/db_archive/db_archive/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_archive/db_archive20.wpj (renamed from db/build_vxworks/db_archive/db_archive.wpj)6
-rwxr-xr-xdb/build_vxworks/db_archive/db_archive22.wpj194
-rw-r--r--db/build_vxworks/db_checkpoint/db_checkpoint.c24
-rw-r--r--db/build_vxworks/db_checkpoint/db_checkpoint/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_checkpoint/db_checkpoint20.wpj (renamed from db/build_vxworks/db_checkpoint/db_checkpoint.wpj)6
-rwxr-xr-xdb/build_vxworks/db_checkpoint/db_checkpoint22.wpj194
-rw-r--r--db/build_vxworks/db_config.h56
-rw-r--r--db/build_vxworks/db_deadlock/db_deadlock.c29
-rw-r--r--db/build_vxworks/db_deadlock/db_deadlock/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_deadlock/db_deadlock20.wpj (renamed from db/build_vxworks/db_deadlock/db_deadlock.wpj)6
-rwxr-xr-xdb/build_vxworks/db_deadlock/db_deadlock22.wpj194
-rw-r--r--db/build_vxworks/db_dump/db_dump.c59
-rw-r--r--db/build_vxworks/db_dump/db_dump/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_dump/db_dump20.wpj (renamed from db/build_vxworks/db_dump/db_dump.wpj)6
-rwxr-xr-xdb/build_vxworks/db_dump/db_dump22.wpj194
-rw-r--r--db/build_vxworks/db_int.h148
-rw-r--r--db/build_vxworks/db_load/db_load.c247
-rw-r--r--db/build_vxworks/db_load/db_load/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_load/db_load20.wpj (renamed from db/build_vxworks/db_load/db_load.wpj)6
-rwxr-xr-xdb/build_vxworks/db_load/db_load22.wpj194
-rw-r--r--db/build_vxworks/db_printlog/db_printlog.c27
-rw-r--r--db/build_vxworks/db_printlog/db_printlog/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_printlog/db_printlog20.wpj (renamed from db/build_vxworks/db_printlog/db_printlog.wpj)6
-rwxr-xr-xdb/build_vxworks/db_printlog/db_printlog22.wpj194
-rw-r--r--db/build_vxworks/db_recover/db_recover.c31
-rw-r--r--db/build_vxworks/db_recover/db_recover/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_recover/db_recover20.wpj (renamed from db/build_vxworks/db_recover/db_recover.wpj)6
-rwxr-xr-xdb/build_vxworks/db_recover/db_recover22.wpj194
-rw-r--r--db/build_vxworks/db_stat/db_stat.c154
-rw-r--r--db/build_vxworks/db_stat/db_stat/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_stat/db_stat20.wpj (renamed from db/build_vxworks/db_stat/db_stat.wpj)6
-rwxr-xr-xdb/build_vxworks/db_stat/db_stat22.wpj194
-rw-r--r--db/build_vxworks/db_upgrade/db_upgrade.c23
-rw-r--r--db/build_vxworks/db_upgrade/db_upgrade/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_upgrade/db_upgrade20.wpj (renamed from db/build_vxworks/db_upgrade/db_upgrade.wpj)6
-rwxr-xr-xdb/build_vxworks/db_upgrade/db_upgrade22.wpj194
-rw-r--r--db/build_vxworks/db_verify/db_verify.c50
-rw-r--r--db/build_vxworks/db_verify/db_verify/component.cdf4
-rwxr-xr-x[-rw-r--r--]db/build_vxworks/db_verify/db_verify20.wpj (renamed from db/build_vxworks/db_verify/db_verify.wpj)6
-rwxr-xr-xdb/build_vxworks/db_verify/db_verify22.wpj194
-rw-r--r--db/build_vxworks/dbdemo/dbdemo.c4
-rwxr-xr-xdb/build_vxworks/dbdemo/dbdemo/component.cdf4
-rwxr-xr-xdb/build_vxworks/dbdemo/dbdemo20.wpj (renamed from db/build_vxworks/dbdemo/dbdemo.wpj)6
-rwxr-xr-xdb/build_vxworks/dbdemo/dbdemo22.wpj194
-rw-r--r--db/build_win32/Berkeley_DB.dsw216
-rw-r--r--db/build_win32/app_dsp.src27
-rw-r--r--db/build_win32/db.h2312
-rw-r--r--db/build_win32/db_archive.dsp39
-rw-r--r--db/build_win32/db_checkpoint.dsp39
-rw-r--r--db/build_win32/db_config.h489
-rw-r--r--db/build_win32/db_cxx.h308
-rw-r--r--db/build_win32/db_deadlock.dsp39
-rw-r--r--db/build_win32/db_dll.dsp283
-rw-r--r--db/build_win32/db_dump.dsp39
-rw-r--r--db/build_win32/db_int.h366
-rw-r--r--db/build_win32/db_java.dsp104
-rw-r--r--db/build_win32/db_load.dsp39
-rw-r--r--db/build_win32/db_perf.dsp40
-rw-r--r--db/build_win32/db_printlog.dsp39
-rw-r--r--db/build_win32/db_recover.dsp39
-rw-r--r--db/build_win32/db_small.dsp664
-rw-r--r--db/build_win32/db_stat.dsp39
-rw-r--r--db/build_win32/db_static.dsp286
-rw-r--r--db/build_win32/db_tcl.dsp27
-rw-r--r--db/build_win32/db_test.dsp19
-rw-r--r--db/build_win32/db_test.src15
-rw-r--r--db/build_win32/db_upgrade.dsp39
-rw-r--r--db/build_win32/db_verify.dsp39
-rw-r--r--db/build_win32/dbkill.cpp14
-rw-r--r--db/build_win32/dllmain.c97
-rw-r--r--db/build_win32/dynamic_dsp.src83
-rw-r--r--db/build_win32/ex_access.dsp39
-rw-r--r--db/build_win32/ex_btrec.dsp39
-rw-r--r--db/build_win32/ex_env.dsp39
-rw-r--r--db/build_win32/ex_lock.dsp39
-rw-r--r--db/build_win32/ex_mpool.dsp39
-rw-r--r--db/build_win32/ex_repquote.dsp164
-rw-r--r--db/build_win32/ex_repquote.src145
-rw-r--r--db/build_win32/ex_tpcb.dsp39
-rw-r--r--db/build_win32/excxx_access.dsp39
-rw-r--r--db/build_win32/excxx_btrec.dsp39
-rw-r--r--db/build_win32/excxx_env.dsp39
-rw-r--r--db/build_win32/excxx_lock.dsp39
-rw-r--r--db/build_win32/excxx_mpool.dsp39
-rw-r--r--db/build_win32/excxx_tpcb.dsp39
-rw-r--r--db/build_win32/include.tcl15
-rw-r--r--db/build_win32/java_dsp.src62
-rw-r--r--db/build_win32/libdb.def278
-rw-r--r--db/build_win32/libdb.rc10
-rw-r--r--db/build_win32/libdb_tcl.def3
-rw-r--r--db/build_win32/libdbrc.src2
-rw-r--r--db/build_win32/small_dsp.src85
-rw-r--r--db/build_win32/static_dsp.src84
-rw-r--r--db/build_win32/tcl_dsp.src19
-rw-r--r--db/build_win32/win_db.h59
-rw-r--r--db/clib/getcwd.c20
-rw-r--r--db/clib/getopt.c19
-rw-r--r--db/clib/memcmp.c4
-rw-r--r--db/clib/memmove.c4
-rw-r--r--db/clib/raise.c8
-rw-r--r--db/clib/snprintf.c39
-rw-r--r--db/clib/strcasecmp.c34
-rw-r--r--db/clib/strdup.c2
-rw-r--r--db/clib/strerror.c4
-rw-r--r--db/clib/vsnprintf.c6
-rw-r--r--db/common/crypto_stub.c47
-rw-r--r--db/common/db_byteorder.c50
-rw-r--r--db/common/db_err.c495
-rw-r--r--db/common/db_getlong.c87
-rw-r--r--db/common/db_idspace.c6
-rw-r--r--db/common/db_log2.c5
-rw-r--r--db/common/util_arg.c4
-rw-r--r--db/common/util_cache.c6
-rw-r--r--db/common/util_log.c10
-rw-r--r--db/common/util_sig.c7
-rw-r--r--db/crypto/aes_method.c10
-rw-r--r--db/crypto/crypto.c41
-rw-r--r--db/crypto/mersenne/mt19937db.c4
-rw-r--r--db/crypto/rijndael/rijndael-alg-fst.c1280
-rw-r--r--db/crypto/rijndael/rijndael-alg-fst.h2
-rw-r--r--db/crypto/rijndael/rijndael-api-fst.c44
-rw-r--r--db/crypto/rijndael/rijndael-api-fst.h10
-rw-r--r--db/cxx/cxx_db.cpp102
-rw-r--r--db/cxx/cxx_dbc.cpp28
-rw-r--r--db/cxx/cxx_dbt.cpp4
-rw-r--r--db/cxx/cxx_env.cpp164
-rw-r--r--db/cxx/cxx_except.cpp272
-rw-r--r--db/cxx/cxx_lock.cpp86
-rw-r--r--db/cxx/cxx_logc.cpp13
-rw-r--r--db/cxx/cxx_mpool.cpp229
-rw-r--r--db/cxx/cxx_multi.cpp67
-rw-r--r--db/cxx/cxx_txn.cpp145
-rw-r--r--db/db/crdel.src84
-rw-r--r--db/db/crdel_auto.c982
-rw-r--r--db/db/crdel_rec.c579
-rw-r--r--db/db/db.c2262
-rw-r--r--db/db/db.src162
-rw-r--r--db/db/db_am.c903
-rw-r--r--db/db/db_auto.c3828
-rw-r--r--db/db/db_cam.c1681
-rw-r--r--db/db/db_conv.c303
-rw-r--r--db/db/db_dispatch.c1488
-rw-r--r--db/db/db_dup.c119
-rw-r--r--db/db/db_iface.c2308
-rw-r--r--db/db/db_join.c447
-rw-r--r--db/db/db_meta.c336
-rw-r--r--db/db/db_method.c599
-rw-r--r--db/db/db_open.c394
-rw-r--r--db/db/db_overflow.c427
-rw-r--r--db/db/db_ovfl_vrfy.c376
-rw-r--r--db/db/db_pr.c569
-rw-r--r--db/db/db_rec.c623
-rw-r--r--db/db/db_reclaim.c200
-rw-r--r--db/db/db_remove.c183
-rw-r--r--db/db/db_rename.c174
-rw-r--r--db/db/db_ret.c72
-rw-r--r--db/db/db_truncate.c181
-rw-r--r--db/db/db_upg.c94
-rw-r--r--db/db/db_upg_opd.c79
-rw-r--r--db/db/db_vrfy.c1089
-rw-r--r--db/db/db_vrfy_stub.c102
-rw-r--r--db/db/db_vrfyutil.c246
-rw-r--r--db/db185/db185.c130
-rw-r--r--db/db185/db185_int.in10
-rw-r--r--db/db_archive/db_archive.c96
-rw-r--r--db/db_checkpoint/db_checkpoint.c124
-rw-r--r--db/db_deadlock/db_deadlock.c135
-rw-r--r--db/db_dump/db_dump.c295
-rw-r--r--db/db_dump185/db_dump185.c28
-rw-r--r--db/db_load/db_load.c729
-rw-r--r--db/db_printlog/README11
-rw-r--r--db/db_printlog/db_printlog.c295
-rw-r--r--db/db_printlog/dbname.awk30
-rw-r--r--db/db_printlog/logstat.awk2
-rw-r--r--db/db_printlog/status.awk32
-rw-r--r--db/db_recover/db_recover.c138
-rw-r--r--db/db_stat/db_stat.c800
-rw-r--r--db/db_stat/dd.sh66
-rw-r--r--db/db_upgrade/db_upgrade.c96
-rw-r--r--db/db_verify/db_verify.c202
-rw-r--r--db/dbinc/btree.h12
-rw-r--r--db/dbinc/crypto.h6
-rw-r--r--db/dbinc/cxx_common.h45
-rw-r--r--db/dbinc/cxx_except.h141
-rw-r--r--db/dbinc/cxx_int.h12
-rw-r--r--db/dbinc/db.in789
-rw-r--r--db/dbinc/db_185.in6
-rw-r--r--db/dbinc/db_am.h32
-rw-r--r--db/dbinc/db_cxx.in309
-rw-r--r--db/dbinc/db_dispatch.h36
-rw-r--r--db/dbinc/db_int.in150
-rw-r--r--db/dbinc/db_join.h2
-rw-r--r--db/dbinc/db_page.h37
-rw-r--r--db/dbinc/db_server_int.h4
-rw-r--r--db/dbinc/db_shash.h4
-rw-r--r--db/dbinc/db_swap.h4
-rw-r--r--db/dbinc/db_upgrade.h4
-rw-r--r--db/dbinc/db_verify.h26
-rw-r--r--db/dbinc/debug.h29
-rw-r--r--db/dbinc/fop.h4
-rw-r--r--db/dbinc/globals.h6
-rw-r--r--db/dbinc/hash.h4
-rw-r--r--db/dbinc/hmac.h4
-rw-r--r--db/dbinc/lock.h26
-rw-r--r--db/dbinc/log.h110
-rw-r--r--db/dbinc/mp.h111
-rw-r--r--db/dbinc/mutex.h279
-rw-r--r--db/dbinc/os.h72
-rw-r--r--db/dbinc/qam.h38
-rw-r--r--db/dbinc/queue.h633
-rw-r--r--db/dbinc/region.h34
-rw-r--r--db/dbinc/rep.h147
-rw-r--r--db/dbinc/shqueue.h300
-rw-r--r--db/dbinc/tcl_db.h4
-rw-r--r--db/dbinc/txn.h28
-rw-r--r--db/dbinc/xa.h4
-rw-r--r--db/dbinc_auto/btree_ext.h9
-rw-r--r--db/dbinc_auto/common_ext.h15
-rw-r--r--db/dbinc_auto/crypto_ext.h16
-rw-r--r--db/dbinc_auto/db_auto.h36
-rw-r--r--db/dbinc_auto/db_ext.h120
-rw-r--r--db/dbinc_auto/db_server.h475
-rw-r--r--db/dbinc_auto/dbreg_ext.h5
-rw-r--r--db/dbinc_auto/env_ext.h23
-rw-r--r--db/dbinc_auto/ext_prot.in5
-rw-r--r--db/dbinc_auto/fileops_auto.h2
-rw-r--r--db/dbinc_auto/fileops_ext.h12
-rw-r--r--db/dbinc_auto/hash_ext.h5
-rw-r--r--db/dbinc_auto/int_def.in359
-rw-r--r--db/dbinc_auto/lock_ext.h25
-rw-r--r--db/dbinc_auto/log_ext.h26
-rw-r--r--db/dbinc_auto/mp_ext.h35
-rw-r--r--db/dbinc_auto/os_ext.h23
-rw-r--r--db/dbinc_auto/qam_ext.h14
-rw-r--r--db/dbinc_auto/rep_ext.h24
-rw-r--r--db/dbinc_auto/rpc_client_ext.h70
-rw-r--r--db/dbinc_auto/rpc_defs.in2
-rw-r--r--db/dbinc_auto/rpc_server_ext.h138
-rw-r--r--db/dbinc_auto/tcl_ext.h6
-rw-r--r--db/dbinc_auto/txn_auto.h3
-rw-r--r--db/dbinc_auto/txn_ext.h15
-rw-r--r--db/dbinc_auto/xa_ext.h13
-rw-r--r--db/dbm/dbm.c50
-rw-r--r--db/dbreg/dbreg.c146
-rw-r--r--db/dbreg/dbreg.src5
-rw-r--r--db/dbreg/dbreg_auto.c93
-rw-r--r--db/dbreg/dbreg_rec.c96
-rw-r--r--db/dbreg/dbreg_util.c211
-rw-r--r--db/dist/Makefile.in2012
-rw-r--r--db/dist/RELEASE13
-rw-r--r--db/dist/aclocal/config.ac11
-rw-r--r--db/dist/aclocal/libtool.ac7160
-rw-r--r--db/dist/aclocal/mutex.ac86
-rw-r--r--db/dist/aclocal/options.ac141
-rw-r--r--db/dist/aclocal/programs.ac2
-rw-r--r--db/dist/aclocal/sosuffix.ac43
-rw-r--r--db/dist/aclocal/tcl.ac10
-rw-r--r--db/dist/aclocal/types.ac126
-rw-r--r--db/dist/aclocal_java/ac_check_class.ac2
-rw-r--r--db/dist/aclocal_java/ac_check_classpath.ac2
-rw-r--r--db/dist/aclocal_java/ac_check_junit.ac2
-rw-r--r--db/dist/aclocal_java/ac_check_rqrd_class.ac2
-rw-r--r--db/dist/aclocal_java/ac_java_options.ac2
-rw-r--r--db/dist/aclocal_java/ac_jni_include_dirs.ac14
-rw-r--r--db/dist/aclocal_java/ac_prog_jar.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_java.ac8
-rw-r--r--db/dist/aclocal_java/ac_prog_java_works.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_javac.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_javac_works.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_javadoc.ac2
-rw-r--r--db/dist/aclocal_java/ac_prog_javah.ac2
-rw-r--r--db/dist/aclocal_java/ac_try_compile_java.ac2
-rw-r--r--db/dist/aclocal_java/ac_try_run_javac.ac2
-rw-r--r--db/dist/buildrel71
-rw-r--r--db/dist/camel.pm202
-rw-r--r--db/dist/camelize.pl324
-rwxr-xr-xdb/dist/config.guess995
-rw-r--r--db/dist/config.hin414
-rwxr-xr-xdb/dist/config.sub454
-rwxr-xr-xdb/dist/configure33837
-rw-r--r--db/dist/configure.ac384
-rw-r--r--db/dist/db.ecd.in64
-rw-r--r--db/dist/db.spec.in33
-rw-r--r--db/dist/gen_inc.awk104
-rw-r--r--db/dist/gen_rec.awk775
-rw-r--r--db/dist/gen_rpc.awk1222
-rw-r--r--db/dist/ltmain.sh4613
-rw-r--r--db/dist/pubdef.in49
-rw-r--r--db/dist/s_all11
-rwxr-xr-xdb/dist/s_config46
-rw-r--r--db/dist/s_crypto30
-rwxr-xr-xdb/dist/s_include181
-rwxr-xr-xdb/dist/s_java32
-rwxr-xr-xdb/dist/s_java_camel25
-rwxr-xr-xdb/dist/s_java_const74
-rwxr-xr-xdb/dist/s_java_stat190
-rwxr-xr-xdb/dist/s_java_swig45
-rwxr-xr-xdb/dist/s_javah55
-rwxr-xr-xdb/dist/s_perm66
-rwxr-xr-xdb/dist/s_readme29
-rwxr-xr-xdb/dist/s_recover69
-rw-r--r--db/dist/s_rpc125
-rwxr-xr-xdb/dist/s_symlink53
-rwxr-xr-xdb/dist/s_tags25
-rwxr-xr-xdb/dist/s_test4
-rw-r--r--db/dist/s_vxworks318
-rwxr-xr-xdb/dist/s_win3298
-rw-r--r--db/dist/s_win32_dsp42
-rw-r--r--db/dist/srcfiles.in582
-rw-r--r--db/dist/tags5324
-rw-r--r--db/dist/template/db_server_proc1040
-rw-r--r--db/dist/template/gen_client_ret334
-rw-r--r--db/dist/template/rec_db402
-rw-r--r--db/dist/vx_2.0/BerkeleyDB.wpj14
-rw-r--r--db/dist/vx_2.0/wpj.in6
-rw-r--r--db/dist/vx_2.2/BerkeleyDB.wpj310
-rw-r--r--db/dist/vx_2.2/wpj.in194
-rw-r--r--db/dist/vx_3.1/component.cdf4
-rw-r--r--db/dist/vx_3.1/wpj.46
-rwxr-xr-xdb/dist/vx_buildcd2
-rw-r--r--db/dist/vx_config.in50
-rw-r--r--db/dist/vx_setup/CONFIG.in2
-rw-r--r--db/dist/vx_setup/LICENSE.TXT2
-rw-r--r--db/dist/vx_setup/vx_allfile.in6
-rw-r--r--db/dist/vx_setup/vx_demofile.in3
-rw-r--r--db/dist/win_config.in140
-rw-r--r--db/dist/win_db.in59
-rw-r--r--db/dist/win_exports.in9
-rw-r--r--db/docs/api_c/api_index.html168
-rw-r--r--db/docs/api_c/c_index.html172
-rw-r--r--db/docs/api_c/c_pindex.html1336
-rw-r--r--db/docs/api_c/db_associate.html220
-rw-r--r--db/docs/api_c/db_class.html87
-rw-r--r--db/docs/api_c/db_close.html160
-rw-r--r--db/docs/api_c/db_create.html107
-rw-r--r--db/docs/api_c/db_cursor.html132
-rw-r--r--db/docs/api_c/db_del.html138
-rw-r--r--db/docs/api_c/db_err.html116
-rw-r--r--db/docs/api_c/db_fd.html110
-rw-r--r--db/docs/api_c/db_get.html257
-rw-r--r--db/docs/api_c/db_get_byteswapped.html113
-rw-r--r--db/docs/api_c/db_get_mpf.html43
-rw-r--r--db/docs/api_c/db_get_type.html108
-rw-r--r--db/docs/api_c/db_getenv.html55
-rw-r--r--db/docs/api_c/db_join.html208
-rw-r--r--db/docs/api_c/db_key_range.html152
-rw-r--r--db/docs/api_c/db_list.html18
-rw-r--r--db/docs/api_c/db_open.html363
-rw-r--r--db/docs/api_c/db_put.html173
-rw-r--r--db/docs/api_c/db_remove.html151
-rw-r--r--db/docs/api_c/db_rename.html154
-rw-r--r--db/docs/api_c/db_set_alloc.html149
-rw-r--r--db/docs/api_c/db_set_append_recno.html97
-rw-r--r--db/docs/api_c/db_set_bt_compare.html146
-rw-r--r--db/docs/api_c/db_set_bt_minkey.html138
-rw-r--r--db/docs/api_c/db_set_bt_prefix.html144
-rw-r--r--db/docs/api_c/db_set_cache_priority.html110
-rw-r--r--db/docs/api_c/db_set_cachesize.html172
-rw-r--r--db/docs/api_c/db_set_dup_compare.html141
-rw-r--r--db/docs/api_c/db_set_encrypt.html140
-rw-r--r--db/docs/api_c/db_set_errcall.html100
-rw-r--r--db/docs/api_c/db_set_errfile.html104
-rw-r--r--db/docs/api_c/db_set_errpfx.html97
-rw-r--r--db/docs/api_c/db_set_feedback.html116
-rw-r--r--db/docs/api_c/db_set_flags.html346
-rw-r--r--db/docs/api_c/db_set_h_ffactor.html132
-rw-r--r--db/docs/api_c/db_set_h_hash.html121
-rw-r--r--db/docs/api_c/db_set_h_nelem.html131
-rw-r--r--db/docs/api_c/db_set_lorder.html136
-rw-r--r--db/docs/api_c/db_set_pagesize.html133
-rw-r--r--db/docs/api_c/db_set_paniccall.html99
-rw-r--r--db/docs/api_c/db_set_q_extentsize.html125
-rw-r--r--db/docs/api_c/db_set_re_delim.html131
-rw-r--r--db/docs/api_c/db_set_re_len.html132
-rw-r--r--db/docs/api_c/db_set_re_pad.html127
-rw-r--r--db/docs/api_c/db_set_re_source.html192
-rw-r--r--db/docs/api_c/db_stat.html272
-rw-r--r--db/docs/api_c/db_sync.html125
-rw-r--r--db/docs/api_c/db_truncate.html138
-rw-r--r--db/docs/api_c/db_upgrade.html173
-rw-r--r--db/docs/api_c/db_verify.html195
-rw-r--r--db/docs/api_c/dbc_class.html31
-rw-r--r--db/docs/api_c/dbc_close.html75
-rw-r--r--db/docs/api_c/dbc_count.html80
-rw-r--r--db/docs/api_c/dbc_del.html99
-rw-r--r--db/docs/api_c/dbc_dup.html84
-rw-r--r--db/docs/api_c/dbc_get.html390
-rw-r--r--db/docs/api_c/dbc_list.html14
-rw-r--r--db/docs/api_c/dbc_put.html187
-rw-r--r--db/docs/api_c/dbm.html161
-rw-r--r--db/docs/api_c/dbt_bulk.html105
-rw-r--r--db/docs/api_c/dbt_class.html52
-rw-r--r--db/docs/api_c/env_class.html57
-rw-r--r--db/docs/api_c/env_close.html119
-rw-r--r--db/docs/api_c/env_create.html74
-rw-r--r--db/docs/api_c/env_dbremove.html135
-rw-r--r--db/docs/api_c/env_dbrename.html148
-rw-r--r--db/docs/api_c/env_err.html114
-rw-r--r--db/docs/api_c/env_list.html18
-rw-r--r--db/docs/api_c/env_open.html307
-rw-r--r--db/docs/api_c/env_remove.html186
-rw-r--r--db/docs/api_c/env_set_alloc.html140
-rw-r--r--db/docs/api_c/env_set_app_dispatch.html115
-rw-r--r--db/docs/api_c/env_set_cachesize.html160
-rw-r--r--db/docs/api_c/env_set_data_dir.html123
-rw-r--r--db/docs/api_c/env_set_encrypt.html136
-rw-r--r--db/docs/api_c/env_set_errcall.html97
-rw-r--r--db/docs/api_c/env_set_errfile.html101
-rw-r--r--db/docs/api_c/env_set_errpfx.html95
-rw-r--r--db/docs/api_c/env_set_feedback.html97
-rw-r--r--db/docs/api_c/env_set_flags.html346
-rw-r--r--db/docs/api_c/env_set_lg_bsize.html110
-rw-r--r--db/docs/api_c/env_set_lg_dir.html112
-rw-r--r--db/docs/api_c/env_set_lg_max.html116
-rw-r--r--db/docs/api_c/env_set_lg_regionmax.html111
-rw-r--r--db/docs/api_c/env_set_lk_conflicts.html122
-rw-r--r--db/docs/api_c/env_set_lk_detect.html136
-rw-r--r--db/docs/api_c/env_set_lk_max_lockers.html114
-rw-r--r--db/docs/api_c/env_set_lk_max_locks.html114
-rw-r--r--db/docs/api_c/env_set_lk_max_objects.html114
-rw-r--r--db/docs/api_c/env_set_mp_mmapsize.html120
-rw-r--r--db/docs/api_c/env_set_paniccall.html96
-rw-r--r--db/docs/api_c/env_set_rpc_server.html117
-rw-r--r--db/docs/api_c/env_set_shm_key.html135
-rw-r--r--db/docs/api_c/env_set_tas_spins.html107
-rw-r--r--db/docs/api_c/env_set_timeout.html123
-rw-r--r--db/docs/api_c/env_set_tmp_dir.html124
-rw-r--r--db/docs/api_c/env_set_tx_max.html120
-rw-r--r--db/docs/api_c/env_set_tx_timestamp.html110
-rw-r--r--db/docs/api_c/env_set_verbose.html133
-rw-r--r--db/docs/api_c/env_strerror.html71
-rw-r--r--db/docs/api_c/env_version.html70
-rw-r--r--db/docs/api_c/hsearch.html101
-rw-r--r--db/docs/api_c/lock_class.html25
-rw-r--r--db/docs/api_c/lock_detect.html114
-rw-r--r--db/docs/api_c/lock_get.html128
-rw-r--r--db/docs/api_c/lock_id.html72
-rw-r--r--db/docs/api_c/lock_id_free.html47
-rw-r--r--db/docs/api_c/lock_list.html14
-rw-r--r--db/docs/api_c/lock_put.html74
-rw-r--r--db/docs/api_c/lock_stat.html126
-rw-r--r--db/docs/api_c/lock_vec.html203
-rw-r--r--db/docs/api_c/log_archive.html163
-rw-r--r--db/docs/api_c/log_compare.html60
-rw-r--r--db/docs/api_c/log_cursor.html51
-rw-r--r--db/docs/api_c/log_file.html101
-rw-r--r--db/docs/api_c/log_flush.html79
-rw-r--r--db/docs/api_c/log_list.html14
-rw-r--r--db/docs/api_c/log_put.html99
-rw-r--r--db/docs/api_c/log_stat.html113
-rw-r--r--db/docs/api_c/logc_class.html25
-rw-r--r--db/docs/api_c/logc_close.html49
-rw-r--r--db/docs/api_c/logc_get.html120
-rw-r--r--db/docs/api_c/lsn_class.html28
-rw-r--r--db/docs/api_c/memp_fclose.html80
-rw-r--r--db/docs/api_c/memp_fcreate.html41
-rw-r--r--db/docs/api_c/memp_fget.html139
-rw-r--r--db/docs/api_c/memp_fopen.html190
-rw-r--r--db/docs/api_c/memp_fput.html104
-rw-r--r--db/docs/api_c/memp_fset.html94
-rw-r--r--db/docs/api_c/memp_fsync.html70
-rw-r--r--db/docs/api_c/memp_list.html14
-rw-r--r--db/docs/api_c/memp_register.html129
-rw-r--r--db/docs/api_c/memp_set_clear_len.html68
-rw-r--r--db/docs/api_c/memp_set_fileid.html73
-rw-r--r--db/docs/api_c/memp_set_flags.html86
-rw-r--r--db/docs/api_c/memp_set_ftype.html75
-rw-r--r--db/docs/api_c/memp_set_lsn_offset.html67
-rw-r--r--db/docs/api_c/memp_set_maxsize.html88
-rw-r--r--db/docs/api_c/memp_set_pgcookie.html69
-rw-r--r--db/docs/api_c/memp_set_priority.html89
-rw-r--r--db/docs/api_c/memp_stat.html162
-rw-r--r--db/docs/api_c/memp_sync.html110
-rw-r--r--db/docs/api_c/memp_trickle.html72
-rw-r--r--db/docs/api_c/mempfile_class.html29
-rw-r--r--db/docs/api_c/pindex.src1126
-rw-r--r--db/docs/api_c/rep_elect.html81
-rw-r--r--db/docs/api_c/rep_limit.html85
-rw-r--r--db/docs/api_c/rep_list.html14
-rw-r--r--db/docs/api_c/rep_message.html128
-rw-r--r--db/docs/api_c/rep_start.html58
-rw-r--r--db/docs/api_c/rep_stat.html86
-rw-r--r--db/docs/api_c/rep_transport.html116
-rw-r--r--db/docs/api_c/set_func_close.html76
-rw-r--r--db/docs/api_c/set_func_dirfree.html84
-rw-r--r--db/docs/api_c/set_func_dirlist.html92
-rw-r--r--db/docs/api_c/set_func_exists.html90
-rw-r--r--db/docs/api_c/set_func_free.html75
-rw-r--r--db/docs/api_c/set_func_fsync.html76
-rw-r--r--db/docs/api_c/set_func_ioinfo.html98
-rw-r--r--db/docs/api_c/set_func_malloc.html75
-rw-r--r--db/docs/api_c/set_func_map.html109
-rw-r--r--db/docs/api_c/set_func_open.html76
-rw-r--r--db/docs/api_c/set_func_read.html76
-rw-r--r--db/docs/api_c/set_func_realloc.html75
-rw-r--r--db/docs/api_c/set_func_rename.html78
-rw-r--r--db/docs/api_c/set_func_seek.html94
-rw-r--r--db/docs/api_c/set_func_sleep.html93
-rw-r--r--db/docs/api_c/set_func_unlink.html76
-rw-r--r--db/docs/api_c/set_func_unmap.html87
-rw-r--r--db/docs/api_c/set_func_write.html76
-rw-r--r--db/docs/api_c/set_func_yield.html98
-rw-r--r--db/docs/api_c/txn_abort.html78
-rw-r--r--db/docs/api_c/txn_begin.html136
-rw-r--r--db/docs/api_c/txn_checkpoint.html99
-rw-r--r--db/docs/api_c/txn_class.html27
-rw-r--r--db/docs/api_c/txn_commit.html117
-rw-r--r--db/docs/api_c/txn_discard.html85
-rw-r--r--db/docs/api_c/txn_id.html54
-rw-r--r--db/docs/api_c/txn_list.html14
-rw-r--r--db/docs/api_c/txn_prepare.html80
-rw-r--r--db/docs/api_c/txn_recover.html100
-rw-r--r--db/docs/api_c/txn_set_timeout.html72
-rw-r--r--db/docs/api_c/txn_stat.html122
-rw-r--r--db/docs/api_cxx/api_index.html (renamed from db/docs/api_cxx/c_index.html)30
-rw-r--r--db/docs/api_cxx/cxx_pindex.html1302
-rw-r--r--db/docs/api_cxx/db_associate.html222
-rw-r--r--db/docs/api_cxx/db_class.html148
-rw-r--r--db/docs/api_cxx/db_close.html162
-rw-r--r--db/docs/api_cxx/db_cursor.html135
-rw-r--r--db/docs/api_cxx/db_del.html141
-rw-r--r--db/docs/api_cxx/db_err.html112
-rw-r--r--db/docs/api_cxx/db_fd.html108
-rw-r--r--db/docs/api_cxx/db_get.html261
-rw-r--r--db/docs/api_cxx/db_get_byteswapped.html112
-rw-r--r--db/docs/api_cxx/db_get_mpf.html44
-rw-r--r--db/docs/api_cxx/db_get_type.html109
-rw-r--r--db/docs/api_cxx/db_getenv.html56
-rw-r--r--db/docs/api_cxx/db_join.html209
-rw-r--r--db/docs/api_cxx/db_key_range.html155
-rw-r--r--db/docs/api_cxx/db_list.html17
-rw-r--r--db/docs/api_cxx/db_open.html366
-rw-r--r--db/docs/api_cxx/db_put.html174
-rw-r--r--db/docs/api_cxx/db_remove.html152
-rw-r--r--db/docs/api_cxx/db_rename.html157
-rw-r--r--db/docs/api_cxx/db_set_alloc.html146
-rw-r--r--db/docs/api_cxx/db_set_append_recno.html102
-rw-r--r--db/docs/api_cxx/db_set_bt_compare.html146
-rw-r--r--db/docs/api_cxx/db_set_bt_minkey.html141
-rw-r--r--db/docs/api_cxx/db_set_bt_prefix.html148
-rw-r--r--db/docs/api_cxx/db_set_cache_priority.html113
-rw-r--r--db/docs/api_cxx/db_set_cachesize.html173
-rw-r--r--db/docs/api_cxx/db_set_dup_compare.html145
-rw-r--r--db/docs/api_cxx/db_set_encrypt.html146
-rw-r--r--db/docs/api_cxx/db_set_errcall.html97
-rw-r--r--db/docs/api_cxx/db_set_errfile.html100
-rw-r--r--db/docs/api_cxx/db_set_error_stream.html45
-rw-r--r--db/docs/api_cxx/db_set_errpfx.html94
-rw-r--r--db/docs/api_cxx/db_set_feedback.html115
-rw-r--r--db/docs/api_cxx/db_set_flags.html348
-rw-r--r--db/docs/api_cxx/db_set_h_ffactor.html134
-rw-r--r--db/docs/api_cxx/db_set_h_hash.html127
-rw-r--r--db/docs/api_cxx/db_set_h_nelem.html134
-rw-r--r--db/docs/api_cxx/db_set_lorder.html139
-rw-r--r--db/docs/api_cxx/db_set_pagesize.html136
-rw-r--r--db/docs/api_cxx/db_set_paniccall.html103
-rw-r--r--db/docs/api_cxx/db_set_q_extentsize.html128
-rw-r--r--db/docs/api_cxx/db_set_re_delim.html132
-rw-r--r--db/docs/api_cxx/db_set_re_len.html135
-rw-r--r--db/docs/api_cxx/db_set_re_pad.html130
-rw-r--r--db/docs/api_cxx/db_set_re_source.html190
-rw-r--r--db/docs/api_cxx/db_stat.html276
-rw-r--r--db/docs/api_cxx/db_sync.html126
-rw-r--r--db/docs/api_cxx/db_truncate.html144
-rw-r--r--db/docs/api_cxx/db_upgrade.html166
-rw-r--r--db/docs/api_cxx/db_verify.html188
-rw-r--r--db/docs/api_cxx/dbc_class.html51
-rw-r--r--db/docs/api_cxx/dbc_close.html81
-rw-r--r--db/docs/api_cxx/dbc_count.html82
-rw-r--r--db/docs/api_cxx/dbc_del.html101
-rw-r--r--db/docs/api_cxx/dbc_dup.html84
-rw-r--r--db/docs/api_cxx/dbc_get.html387
-rw-r--r--db/docs/api_cxx/dbc_list.html14
-rw-r--r--db/docs/api_cxx/dbc_put.html191
-rw-r--r--db/docs/api_cxx/dbt_bulk.html81
-rw-r--r--db/docs/api_cxx/dbt_bulk_class.html172
-rw-r--r--db/docs/api_cxx/dbt_class.html339
-rw-r--r--db/docs/api_cxx/deadlock_class.html36
-rw-r--r--db/docs/api_cxx/env_class.html51
-rw-r--r--db/docs/api_cxx/env_close.html110
-rw-r--r--db/docs/api_cxx/env_dbremove.html146
-rw-r--r--db/docs/api_cxx/env_dbrename.html158
-rw-r--r--db/docs/api_cxx/env_err.html98
-rw-r--r--db/docs/api_cxx/env_list.html16
-rw-r--r--db/docs/api_cxx/env_open.html306
-rw-r--r--db/docs/api_cxx/env_remove.html186
-rw-r--r--db/docs/api_cxx/env_set_alloc.html136
-rw-r--r--db/docs/api_cxx/env_set_app_dispatch.html125
-rw-r--r--db/docs/api_cxx/env_set_cachesize.html161
-rw-r--r--db/docs/api_cxx/env_set_data_dir.html125
-rw-r--r--db/docs/api_cxx/env_set_encrypt.html145
-rw-r--r--db/docs/api_cxx/env_set_errcall.html94
-rw-r--r--db/docs/api_cxx/env_set_errfile.html101
-rw-r--r--db/docs/api_cxx/env_set_error_stream.html77
-rw-r--r--db/docs/api_cxx/env_set_errpfx.html95
-rw-r--r--db/docs/api_cxx/env_set_feedback.html95
-rw-r--r--db/docs/api_cxx/env_set_flags.html349
-rw-r--r--db/docs/api_cxx/env_set_lg_bsize.html112
-rw-r--r--db/docs/api_cxx/env_set_lg_dir.html114
-rw-r--r--db/docs/api_cxx/env_set_lg_max.html118
-rw-r--r--db/docs/api_cxx/env_set_lg_regionmax.html116
-rw-r--r--db/docs/api_cxx/env_set_lk_conflicts.html125
-rw-r--r--db/docs/api_cxx/env_set_lk_detect.html140
-rw-r--r--db/docs/api_cxx/env_set_lk_max_lockers.html118
-rw-r--r--db/docs/api_cxx/env_set_lk_max_locks.html116
-rw-r--r--db/docs/api_cxx/env_set_lk_max_objects.html118
-rw-r--r--db/docs/api_cxx/env_set_mp_mmapsize.html124
-rw-r--r--db/docs/api_cxx/env_set_paniccall.html99
-rw-r--r--db/docs/api_cxx/env_set_rpc_server.html123
-rw-r--r--db/docs/api_cxx/env_set_shm_key.html137
-rw-r--r--db/docs/api_cxx/env_set_tas_spins.html111
-rw-r--r--db/docs/api_cxx/env_set_timeout.html130
-rw-r--r--db/docs/api_cxx/env_set_tmp_dir.html126
-rw-r--r--db/docs/api_cxx/env_set_tx_max.html126
-rw-r--r--db/docs/api_cxx/env_set_tx_timestamp.html114
-rw-r--r--db/docs/api_cxx/env_set_verbose.html135
-rw-r--r--db/docs/api_cxx/env_strerror.html69
-rw-r--r--db/docs/api_cxx/env_version.html70
-rw-r--r--db/docs/api_cxx/except_class.html70
-rw-r--r--db/docs/api_cxx/lock_class.html57
-rw-r--r--db/docs/api_cxx/lock_detect.html108
-rw-r--r--db/docs/api_cxx/lock_get.html142
-rw-r--r--db/docs/api_cxx/lock_id.html71
-rw-r--r--db/docs/api_cxx/lock_id_free.html53
-rw-r--r--db/docs/api_cxx/lock_list.html14
-rw-r--r--db/docs/api_cxx/lock_put.html82
-rw-r--r--db/docs/api_cxx/lock_stat.html134
-rw-r--r--db/docs/api_cxx/lock_vec.html219
-rw-r--r--db/docs/api_cxx/lockng_class.html70
-rw-r--r--db/docs/api_cxx/log_archive.html160
-rw-r--r--db/docs/api_cxx/log_compare.html58
-rw-r--r--db/docs/api_cxx/log_cursor.html57
-rw-r--r--db/docs/api_cxx/log_file.html96
-rw-r--r--db/docs/api_cxx/log_flush.html81
-rw-r--r--db/docs/api_cxx/log_list.html14
-rw-r--r--db/docs/api_cxx/log_put.html97
-rw-r--r--db/docs/api_cxx/log_stat.html119
-rw-r--r--db/docs/api_cxx/logc_class.html25
-rw-r--r--db/docs/api_cxx/logc_close.html55
-rw-r--r--db/docs/api_cxx/logc_get.html126
-rw-r--r--db/docs/api_cxx/lsn_class.html43
-rw-r--r--db/docs/api_cxx/memp_class.html32
-rw-r--r--db/docs/api_cxx/memp_fclose.html81
-rw-r--r--db/docs/api_cxx/memp_fcreate.html44
-rw-r--r--db/docs/api_cxx/memp_fget.html144
-rw-r--r--db/docs/api_cxx/memp_fopen.html200
-rw-r--r--db/docs/api_cxx/memp_fput.html108
-rw-r--r--db/docs/api_cxx/memp_fset.html98
-rw-r--r--db/docs/api_cxx/memp_fsync.html69
-rw-r--r--db/docs/api_cxx/memp_list.html14
-rw-r--r--db/docs/api_cxx/memp_register.html132
-rw-r--r--db/docs/api_cxx/memp_set_clear_len.html72
-rw-r--r--db/docs/api_cxx/memp_set_fileid.html76
-rw-r--r--db/docs/api_cxx/memp_set_flags.html88
-rw-r--r--db/docs/api_cxx/memp_set_ftype.html79
-rw-r--r--db/docs/api_cxx/memp_set_lsn_offset.html71
-rw-r--r--db/docs/api_cxx/memp_set_maxsize.html88
-rw-r--r--db/docs/api_cxx/memp_set_pgcookie.html73
-rw-r--r--db/docs/api_cxx/memp_set_priority.html91
-rw-r--r--db/docs/api_cxx/memp_stat.html164
-rw-r--r--db/docs/api_cxx/memp_sync.html112
-rw-r--r--db/docs/api_cxx/memp_trickle.html72
-rw-r--r--db/docs/api_cxx/mempfile_class.html87
-rw-r--r--db/docs/api_cxx/pindex.src783
-rw-r--r--db/docs/api_cxx/rep_elect.html87
-rw-r--r--db/docs/api_cxx/rep_limit.html87
-rw-r--r--db/docs/api_cxx/rep_list.html14
-rw-r--r--db/docs/api_cxx/rep_message.html134
-rw-r--r--db/docs/api_cxx/rep_start.html64
-rw-r--r--db/docs/api_cxx/rep_stat.html90
-rw-r--r--db/docs/api_cxx/rep_transport.html122
-rw-r--r--db/docs/api_cxx/runrec_class.html31
-rw-r--r--db/docs/api_cxx/txn_abort.html79
-rw-r--r--db/docs/api_cxx/txn_begin.html133
-rw-r--r--db/docs/api_cxx/txn_checkpoint.html97
-rw-r--r--db/docs/api_cxx/txn_class.html95
-rw-r--r--db/docs/api_cxx/txn_commit.html118
-rw-r--r--db/docs/api_cxx/txn_discard.html81
-rw-r--r--db/docs/api_cxx/txn_id.html48
-rw-r--r--db/docs/api_cxx/txn_list.html14
-rw-r--r--db/docs/api_cxx/txn_prepare.html81
-rw-r--r--db/docs/api_cxx/txn_recover.html92
-rw-r--r--db/docs/api_cxx/txn_set_timeout.html78
-rw-r--r--db/docs/api_cxx/txn_stat.html130
-rw-r--r--db/docs/api_java/c_index.html153
-rw-r--r--db/docs/api_java/db_associate.html154
-rw-r--r--db/docs/api_java/db_class.html92
-rw-r--r--db/docs/api_java/db_close.html113
-rw-r--r--db/docs/api_java/db_cursor.html94
-rw-r--r--db/docs/api_java/db_del.html94
-rw-r--r--db/docs/api_java/db_err.html113
-rw-r--r--db/docs/api_java/db_fd.html79
-rw-r--r--db/docs/api_java/db_get.html149
-rw-r--r--db/docs/api_java/db_get_byteswapped.html75
-rw-r--r--db/docs/api_java/db_get_type.html72
-rw-r--r--db/docs/api_java/db_join.html142
-rw-r--r--db/docs/api_java/db_key_range.html99
-rw-r--r--db/docs/api_java/db_list.html64
-rw-r--r--db/docs/api_java/db_open.html179
-rw-r--r--db/docs/api_java/db_put.html128
-rw-r--r--db/docs/api_java/db_remove.html104
-rw-r--r--db/docs/api_java/db_rename.html105
-rw-r--r--db/docs/api_java/db_set_append_recno.html75
-rw-r--r--db/docs/api_java/db_set_bt_compare.html105
-rw-r--r--db/docs/api_java/db_set_bt_minkey.html85
-rw-r--r--db/docs/api_java/db_set_bt_prefix.html106
-rw-r--r--db/docs/api_java/db_set_cache_priority.html105
-rw-r--r--db/docs/api_java/db_set_cachesize.html99
-rw-r--r--db/docs/api_java/db_set_dup_compare.html102
-rw-r--r--db/docs/api_java/db_set_encrypt.html108
-rw-r--r--db/docs/api_java/db_set_errcall.html81
-rw-r--r--db/docs/api_java/db_set_error_stream.html62
-rw-r--r--db/docs/api_java/db_set_errpfx.html55
-rw-r--r--db/docs/api_java/db_set_feedback.html95
-rw-r--r--db/docs/api_java/db_set_flags.html170
-rw-r--r--db/docs/api_java/db_set_h_ffactor.html86
-rw-r--r--db/docs/api_java/db_set_h_hash.html97
-rw-r--r--db/docs/api_java/db_set_h_nelem.html81
-rw-r--r--db/docs/api_java/db_set_lorder.html87
-rw-r--r--db/docs/api_java/db_set_pagesize.html83
-rw-r--r--db/docs/api_java/db_set_q_extentsize.html83
-rw-r--r--db/docs/api_java/db_set_re_delim.html83
-rw-r--r--db/docs/api_java/db_set_re_len.html87
-rw-r--r--db/docs/api_java/db_set_re_pad.html81
-rw-r--r--db/docs/api_java/db_set_re_source.html123
-rw-r--r--db/docs/api_java/db_stat.html185
-rw-r--r--db/docs/api_java/db_sync.html91
-rw-r--r--db/docs/api_java/db_truncate.html107
-rw-r--r--db/docs/api_java/db_upgrade.html125
-rw-r--r--db/docs/api_java/db_verify.html140
-rw-r--r--db/docs/api_java/dbc_class.html49
-rw-r--r--db/docs/api_java/dbc_close.html67
-rw-r--r--db/docs/api_java/dbc_count.html58
-rw-r--r--db/docs/api_java/dbc_del.html71
-rw-r--r--db/docs/api_java/dbc_dup.html75
-rw-r--r--db/docs/api_java/dbc_get.html168
-rw-r--r--db/docs/api_java/dbc_list.html27
-rw-r--r--db/docs/api_java/dbc_put.html157
-rw-r--r--db/docs/api_java/dbt_bulk_class.html93
-rw-r--r--db/docs/api_java/dbt_class.html227
-rw-r--r--db/docs/api_java/deadlock_class.html47
-rw-r--r--db/docs/api_java/env_class.html68
-rw-r--r--db/docs/api_java/env_close.html82
-rw-r--r--db/docs/api_java/env_dbremove.html121
-rw-r--r--db/docs/api_java/env_dbrename.html128
-rw-r--r--db/docs/api_java/env_err.html108
-rw-r--r--db/docs/api_java/env_list.html78
-rw-r--r--db/docs/api_java/env_open.html212
-rw-r--r--db/docs/api_java/env_remove.html129
-rw-r--r--db/docs/api_java/env_set_app_dispatch.html117
-rw-r--r--db/docs/api_java/env_set_cachesize.html86
-rw-r--r--db/docs/api_java/env_set_data_dir.html77
-rw-r--r--db/docs/api_java/env_set_encrypt.html106
-rw-r--r--db/docs/api_java/env_set_errcall.html78
-rw-r--r--db/docs/api_java/env_set_error_stream.html69
-rw-r--r--db/docs/api_java/env_set_errpfx.html52
-rw-r--r--db/docs/api_java/env_set_feedback.html76
-rw-r--r--db/docs/api_java/env_set_flags.html84
-rw-r--r--db/docs/api_java/env_set_lg_bsize.html71
-rw-r--r--db/docs/api_java/env_set_lg_dir.html73
-rw-r--r--db/docs/api_java/env_set_lg_max.html71
-rw-r--r--db/docs/api_java/env_set_lg_regionmax.html76
-rw-r--r--db/docs/api_java/env_set_lk_conflicts.html68
-rw-r--r--db/docs/api_java/env_set_lk_detect.html74
-rw-r--r--db/docs/api_java/env_set_lk_max_lockers.html70
-rw-r--r--db/docs/api_java/env_set_lk_max_locks.html69
-rw-r--r--db/docs/api_java/env_set_lk_max_objects.html70
-rw-r--r--db/docs/api_java/env_set_mp_mmapsize.html66
-rw-r--r--db/docs/api_java/env_set_rpc_server.html94
-rw-r--r--db/docs/api_java/env_set_shm_key.html87
-rw-r--r--db/docs/api_java/env_set_tas_spins.html71
-rw-r--r--db/docs/api_java/env_set_timeout.html88
-rw-r--r--db/docs/api_java/env_set_tmp_dir.html89
-rw-r--r--db/docs/api_java/env_set_tx_max.html69
-rw-r--r--db/docs/api_java/env_set_tx_timestamp.html64
-rw-r--r--db/docs/api_java/env_set_verbose.html77
-rw-r--r--db/docs/api_java/env_strerror.html58
-rw-r--r--db/docs/api_java/env_version.html58
-rw-r--r--db/docs/api_java/except_class.html52
-rw-r--r--db/docs/api_java/java_pindex.html478
-rw-r--r--db/docs/api_java/lock_class.html54
-rw-r--r--db/docs/api_java/lock_detect.html69
-rw-r--r--db/docs/api_java/lock_get.html92
-rw-r--r--db/docs/api_java/lock_id.html59
-rw-r--r--db/docs/api_java/lock_id_free.html52
-rw-r--r--db/docs/api_java/lock_list.html32
-rw-r--r--db/docs/api_java/lock_put.html61
-rw-r--r--db/docs/api_java/lock_stat.html94
-rw-r--r--db/docs/api_java/lock_vec.html33
-rw-r--r--db/docs/api_java/lockng_class.html71
-rw-r--r--db/docs/api_java/log_archive.html92
-rw-r--r--db/docs/api_java/log_compare.html52
-rw-r--r--db/docs/api_java/log_cursor.html53
-rw-r--r--db/docs/api_java/log_file.html77
-rw-r--r--db/docs/api_java/log_flush.html65
-rw-r--r--db/docs/api_java/log_list.html32
-rw-r--r--db/docs/api_java/log_put.html83
-rw-r--r--db/docs/api_java/log_stat.html93
-rw-r--r--db/docs/api_java/logc_class.html43
-rw-r--r--db/docs/api_java/logc_close.html55
-rw-r--r--db/docs/api_java/logc_get.html95
-rw-r--r--db/docs/api_java/lsn_class.html37
-rw-r--r--db/docs/api_java/memp_class.html49
-rw-r--r--db/docs/api_java/memp_fclose.html33
-rw-r--r--db/docs/api_java/memp_fopen.html33
-rw-r--r--db/docs/api_java/memp_fsync.html33
-rw-r--r--db/docs/api_java/memp_list.html24
-rw-r--r--db/docs/api_java/memp_register.html33
-rw-r--r--db/docs/api_java/memp_stat.html102
-rw-r--r--db/docs/api_java/memp_sync.html33
-rw-r--r--db/docs/api_java/memp_trickle.html60
-rw-r--r--db/docs/api_java/mempfile_class.html35
-rw-r--r--db/docs/api_java/pindex.src249
-rw-r--r--db/docs/api_java/rep_elect.html81
-rw-r--r--db/docs/api_java/rep_limit.html62
-rw-r--r--db/docs/api_java/rep_list.html25
-rw-r--r--db/docs/api_java/rep_message.html91
-rw-r--r--db/docs/api_java/rep_start.html74
-rw-r--r--db/docs/api_java/rep_stat.html101
-rw-r--r--db/docs/api_java/rep_transport.html103
-rw-r--r--db/docs/api_java/runrec_class.html50
-rw-r--r--db/docs/api_java/txn_abort.html65
-rw-r--r--db/docs/api_java/txn_begin.html93
-rw-r--r--db/docs/api_java/txn_checkpoint.html74
-rw-r--r--db/docs/api_java/txn_class.html58
-rw-r--r--db/docs/api_java/txn_commit.html85
-rw-r--r--db/docs/api_java/txn_discard.html74
-rw-r--r--db/docs/api_java/txn_id.html51
-rw-r--r--db/docs/api_java/txn_list.html31
-rw-r--r--db/docs/api_java/txn_prepare.html65
-rw-r--r--db/docs/api_java/txn_recover.html81
-rw-r--r--db/docs/api_java/txn_set_timeout.html76
-rw-r--r--db/docs/api_java/txn_stat.html95
-rw-r--r--db/docs/api_tcl/db_close.html50
-rw-r--r--db/docs/api_tcl/db_count.html39
-rw-r--r--db/docs/api_tcl/db_cursor.html43
-rw-r--r--db/docs/api_tcl/db_del.html45
-rw-r--r--db/docs/api_tcl/db_get.html94
-rw-r--r--db/docs/api_tcl/db_get_join.html40
-rw-r--r--db/docs/api_tcl/db_get_type.html30
-rw-r--r--db/docs/api_tcl/db_is_byteswapped.html39
-rw-r--r--db/docs/api_tcl/db_join.html46
-rw-r--r--db/docs/api_tcl/db_open.html288
-rw-r--r--db/docs/api_tcl/db_put.html64
-rw-r--r--db/docs/api_tcl/db_remove.html45
-rw-r--r--db/docs/api_tcl/db_rename.html45
-rw-r--r--db/docs/api_tcl/db_stat.html39
-rw-r--r--db/docs/api_tcl/db_sync.html32
-rw-r--r--db/docs/api_tcl/db_truncate.html55
-rw-r--r--db/docs/api_tcl/dbc_close.html34
-rw-r--r--db/docs/api_tcl/dbc_del.html36
-rw-r--r--db/docs/api_tcl/dbc_dup.html38
-rw-r--r--db/docs/api_tcl/dbc_get.html107
-rw-r--r--db/docs/api_tcl/dbc_put.html109
-rw-r--r--db/docs/api_tcl/env_close.html40
-rw-r--r--db/docs/api_tcl/env_dbremove.html25
-rw-r--r--db/docs/api_tcl/env_dbrename.html25
-rw-r--r--db/docs/api_tcl/env_open.html172
-rw-r--r--db/docs/api_tcl/env_remove.html68
-rw-r--r--db/docs/api_tcl/pindex.src58
-rw-r--r--db/docs/api_tcl/tcl_index.html35
-rw-r--r--db/docs/api_tcl/tcl_pindex.html583
-rw-r--r--db/docs/api_tcl/txn.html55
-rw-r--r--db/docs/api_tcl/txn_abort.html42
-rw-r--r--db/docs/api_tcl/txn_checkpoint.html46
-rw-r--r--db/docs/api_tcl/txn_commit.html65
-rw-r--r--db/docs/api_tcl/version.html32
-rw-r--r--db/docs/images/sleepycat.gifbin6211 -> 5422 bytes
-rw-r--r--db/docs/index.html67
-rw-r--r--db/docs/java/allclasses-frame.html265
-rw-r--r--db/docs/java/allclasses-noframe.html265
-rw-r--r--db/docs/java/com/sleepycat/bdb/CurrentTransaction.html472
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataCursor.html690
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataDb.html796
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataIndex.html349
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataStore.html448
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataThang.html783
-rw-r--r--db/docs/java/com/sleepycat/bdb/DataView.html1245
-rw-r--r--db/docs/java/com/sleepycat/bdb/ForeignKeyIndex.html391
-rw-r--r--db/docs/java/com/sleepycat/bdb/IntegrityConstraintException.html241
-rw-r--r--db/docs/java/com/sleepycat/bdb/KeyRangeException.html242
-rw-r--r--db/docs/java/com/sleepycat/bdb/PrimaryKeyAssigner.html214
-rw-r--r--db/docs/java/com/sleepycat/bdb/RecordNumberBinding.html316
-rw-r--r--db/docs/java/com/sleepycat/bdb/RecordNumberFormat.html318
-rw-r--r--db/docs/java/com/sleepycat/bdb/StoredClassCatalog.html373
-rw-r--r--db/docs/java/com/sleepycat/bdb/TransactionRunner.html442
-rw-r--r--db/docs/java/com/sleepycat/bdb/TransactionWorker.html211
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/ByteArrayBinding.html317
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/ByteArrayFormat.html219
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/DataBinding.html260
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/DataBuffer.html355
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/DataFormat.html176
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/DataType.html346
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/EntityBinding.html309
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/KeyExtractor.html333
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/SimpleBuffer.html463
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayFormat.html160
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/DataBinding.html545
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/DataBuffer.html723
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/DataFormat.html551
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/DataType.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/EntityBinding.html371
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/KeyExtractor.html271
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/class-use/SimpleBuffer.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/package-frame.html58
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/package-summary.html198
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/package-tree.html142
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/package-use.html329
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/ClassCatalog.html312
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialBinding.html384
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialFormat.html330
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialInput.html275
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialOutput.html301
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html467
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html470
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html475
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html476
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html348
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html324
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html247
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialFormat.html219
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialInput.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialOutput.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialKeyExtractor.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialBinding.html162
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialKeyExtractor.html161
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledBinding.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledKeyExtractor.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/package-frame.html62
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/package-summary.html206
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/package-tree.html159
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/serial/package-use.html218
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html244
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html297
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleBinding.html418
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleFormat.html344
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInput.html814
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInputBinding.html319
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html310
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleOutput.html771
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html474
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html474
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html349
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html329
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleData.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleKeyEntity.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleBinding.html179
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html314
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html372
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInputBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleMarshalledBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html372
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleBinding.html162
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleKeyExtractor.html161
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledBinding.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledKeyExtractor.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/package-frame.html64
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/package-summary.html211
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/package-tree.html158
-rw-r--r--db/docs/java/com/sleepycat/bdb/bind/tuple/package-use.html219
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/CurrentTransaction.html172
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataCursor.html207
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataDb.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataIndex.html382
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataStore.html441
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataThang.html296
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/DataView.html270
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/ForeignKeyIndex.html167
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/IntegrityConstraintException.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/KeyRangeException.html175
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html210
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/RecordNumberBinding.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/RecordNumberFormat.html160
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/StoredClassCatalog.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/TransactionRunner.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/class-use/TransactionWorker.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/MapEntry.html394
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredCollection.html656
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredCollections.html559
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredContainer.html602
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredEntrySet.html366
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredIterator.html696
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredKeySet.html399
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredList.html836
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredMap.html789
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredSortedEntrySet.html538
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredSortedKeySet.html603
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredSortedMap.html652
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredSortedValueSet.html628
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/StoredValueSet.html478
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/MapEntry.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollection.html230
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollections.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredContainer.html267
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredEntrySet.html162
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredIterator.html184
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredKeySet.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredList.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredMap.html203
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedEntrySet.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedKeySet.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedMap.html175
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedValueSet.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/class-use/StoredValueSet.html163
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/package-frame.html59
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/package-summary.html211
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/package-tree.html159
-rw-r--r--db/docs/java/com/sleepycat/bdb/collection/package-use.html215
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/TupleSerialDbFactory.html483
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/class-use/TupleSerialDbFactory.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/package-frame.html33
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/package-summary.html152
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/package-tree.html134
-rw-r--r--db/docs/java/com/sleepycat/bdb/factory/package-use.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/package-frame.html81
-rw-r--r--db/docs/java/com/sleepycat/bdb/package-summary.html241
-rw-r--r--db/docs/java/com/sleepycat/bdb/package-tree.html157
-rw-r--r--db/docs/java/com/sleepycat/bdb/package-use.html281
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/ExceptionUnwrapper.html279
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/ExceptionWrapper.html211
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/FastInputStream.html516
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/FastOutputStream.html699
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/IOExceptionWrapper.html273
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html273
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/TimeUnits.html327
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/UtfOps.html495
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionUnwrapper.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionWrapper.html170
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/FastInputStream.html161
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/FastOutputStream.html161
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/IOExceptionWrapper.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/RuntimeExceptionWrapper.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/TimeUnits.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/class-use/UtfOps.html125
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/package-frame.html65
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/package-summary.html206
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/package-tree.html154
-rw-r--r--db/docs/java/com/sleepycat/bdb/util/package-use.html179
-rw-r--r--db/docs/java/com/sleepycat/db/Db.html7532
-rw-r--r--db/docs/java/com/sleepycat/db/DbAppDispatch.html214
-rw-r--r--db/docs/java/com/sleepycat/db/DbAppendRecno.html214
-rw-r--r--db/docs/java/com/sleepycat/db/DbBtreeCompare.html212
-rw-r--r--db/docs/java/com/sleepycat/db/DbBtreePrefix.html212
-rw-r--r--db/docs/java/com/sleepycat/db/DbBtreeStat.html681
-rw-r--r--db/docs/java/com/sleepycat/db/DbClient.html173
-rw-r--r--db/docs/java/com/sleepycat/db/DbDeadlockException.html216
-rw-r--r--db/docs/java/com/sleepycat/db/DbDupCompare.html212
-rw-r--r--db/docs/java/com/sleepycat/db/DbEnv.RepProcessMessage.html247
-rw-r--r--db/docs/java/com/sleepycat/db/DbEnv.html4738
-rw-r--r--db/docs/java/com/sleepycat/db/DbEnvFeedback.html209
-rw-r--r--db/docs/java/com/sleepycat/db/DbEnvFeedbackHandler.html211
-rw-r--r--db/docs/java/com/sleepycat/db/DbErrcall.html207
-rw-r--r--db/docs/java/com/sleepycat/db/DbErrorHandler.html209
-rw-r--r--db/docs/java/com/sleepycat/db/DbException.html377
-rw-r--r--db/docs/java/com/sleepycat/db/DbFeedback.html209
-rw-r--r--db/docs/java/com/sleepycat/db/DbFeedbackHandler.html211
-rw-r--r--db/docs/java/com/sleepycat/db/DbHash.html212
-rw-r--r--db/docs/java/com/sleepycat/db/DbHashStat.html600
-rw-r--r--db/docs/java/com/sleepycat/db/DbKeyRange.html289
-rw-r--r--db/docs/java/com/sleepycat/db/DbLock.html187
-rw-r--r--db/docs/java/com/sleepycat/db/DbLockNotGrantedException.html449
-rw-r--r--db/docs/java/com/sleepycat/db/DbLockRequest.html646
-rw-r--r--db/docs/java/com/sleepycat/db/DbLockStat.html771
-rw-r--r--db/docs/java/com/sleepycat/db/DbLogStat.html708
-rw-r--r--db/docs/java/com/sleepycat/db/DbLogc.html255
-rw-r--r--db/docs/java/com/sleepycat/db/DbLsn.html330
-rw-r--r--db/docs/java/com/sleepycat/db/DbMemoryException.html300
-rw-r--r--db/docs/java/com/sleepycat/db/DbMpoolFStat.html435
-rw-r--r--db/docs/java/com/sleepycat/db/DbMpoolFile.html489
-rw-r--r--db/docs/java/com/sleepycat/db/DbMpoolStat.html897
-rw-r--r--db/docs/java/com/sleepycat/db/DbMultipleDataIterator.html253
-rw-r--r--db/docs/java/com/sleepycat/db/DbMultipleKeyDataIterator.html255
-rw-r--r--db/docs/java/com/sleepycat/db/DbMultipleRecnoDataIterator.html255
-rw-r--r--db/docs/java/com/sleepycat/db/DbPanicHandler.html209
-rw-r--r--db/docs/java/com/sleepycat/db/DbPreplist.html242
-rw-r--r--db/docs/java/com/sleepycat/db/DbQueueStat.html537
-rw-r--r--db/docs/java/com/sleepycat/db/DbRepStat.html1023
-rw-r--r--db/docs/java/com/sleepycat/db/DbRepTransport.html221
-rw-r--r--db/docs/java/com/sleepycat/db/DbRunRecoveryException.html216
-rw-r--r--db/docs/java/com/sleepycat/db/DbSecondaryKeyCreate.html217
-rw-r--r--db/docs/java/com/sleepycat/db/DbTxn.html418
-rw-r--r--db/docs/java/com/sleepycat/db/DbTxnStat.Active.html371
-rw-r--r--db/docs/java/com/sleepycat/db/DbTxnStat.html573
-rw-r--r--db/docs/java/com/sleepycat/db/Dbc.html459
-rw-r--r--db/docs/java/com/sleepycat/db/Dbt.html1082
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Db.html375
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbAppDispatch.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbAppendRecno.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbBtreeCompare.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbBtreePrefix.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbBtreeStat.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbClient.html178
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbDeadlockException.html213
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbDupCompare.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbEnv.RepProcessMessage.html176
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbEnv.html356
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbEnvFeedback.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbEnvFeedbackHandler.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbErrcall.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbErrorHandler.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbException.html3269
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbFeedback.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbFeedbackHandler.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbHash.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbHashStat.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbKeyRange.html176
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLock.html275
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLockNotGrantedException.html213
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLockRequest.html178
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLockStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLogStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLogc.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbLsn.html346
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMemoryException.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMpoolFStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMpoolFile.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMpoolStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMultipleDataIterator.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMultipleKeyDataIterator.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbMultipleRecnoDataIterator.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbPanicHandler.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbPreplist.html172
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbQueueStat.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbRepStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbRepTransport.html172
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbRunRecoveryException.html125
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbSecondaryKeyCreate.html165
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbTxn.html460
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbTxnStat.Active.html162
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/DbTxnStat.html170
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Dbc.html285
-rw-r--r--db/docs/java/com/sleepycat/db/class-use/Dbt.html909
-rw-r--r--db/docs/java/com/sleepycat/db/package-frame.html143
-rw-r--r--db/docs/java/com/sleepycat/db/package-summary.html358
-rw-r--r--db/docs/java/com/sleepycat/db/package-tree.html148
-rw-r--r--db/docs/java/com/sleepycat/db/package-use.html449
-rw-r--r--db/docs/java/constant-values.html527
-rw-r--r--db/docs/java/deprecated-list.html1073
-rw-r--r--db/docs/java/help-doc.html182
-rw-r--r--db/docs/java/index-all.html4659
-rw-r--r--db/docs/java/index.html25
-rw-r--r--db/docs/java/overview-frame.html57
-rw-r--r--db/docs/java/overview-summary.html175
-rw-r--r--db/docs/java/overview-tree.html227
-rw-r--r--db/docs/java/package-list8
-rw-r--r--db/docs/java/packages.html32
-rw-r--r--db/docs/java/serialized-form.html392
-rw-r--r--db/docs/java/style.css29
-rw-r--r--db/docs/ref/am/close.html37
-rw-r--r--db/docs/ref/am/count.html23
-rw-r--r--db/docs/ref/am/curclose.html33
-rw-r--r--db/docs/ref/am/curdel.html27
-rw-r--r--db/docs/ref/am/curdup.html33
-rw-r--r--db/docs/ref/am/curget.html101
-rw-r--r--db/docs/ref/am/curput.html90
-rw-r--r--db/docs/ref/am/cursor.html66
-rw-r--r--db/docs/ref/am/delete.html29
-rw-r--r--db/docs/ref/am/get.html33
-rw-r--r--db/docs/ref/am/join.html159
-rw-r--r--db/docs/ref/am/open.html30
-rw-r--r--db/docs/ref/am/opensub.html81
-rw-r--r--db/docs/ref/am/ops.html96
-rw-r--r--db/docs/ref/am/put.html31
-rw-r--r--db/docs/ref/am/second.html195
-rw-r--r--db/docs/ref/am/stat.html37
-rw-r--r--db/docs/ref/am/sync.html33
-rw-r--r--db/docs/ref/am/truncate.html20
-rw-r--r--db/docs/ref/am/upgrade.html29
-rw-r--r--db/docs/ref/am/verify.html35
-rw-r--r--db/docs/ref/am_conf/bt_compare.html49
-rw-r--r--db/docs/ref/am_conf/bt_minkey.html31
-rw-r--r--db/docs/ref/am_conf/bt_prefix.html42
-rw-r--r--db/docs/ref/am_conf/bt_recnum.html110
-rw-r--r--db/docs/ref/am_conf/byteorder.html34
-rw-r--r--db/docs/ref/am_conf/cachesize.html52
-rw-r--r--db/docs/ref/am_conf/dup.html78
-rw-r--r--db/docs/ref/am_conf/extentsize.html30
-rw-r--r--db/docs/ref/am_conf/h_ffactor.html29
-rw-r--r--db/docs/ref/am_conf/h_hash.html27
-rw-r--r--db/docs/ref/am_conf/h_nelem.html25
-rw-r--r--db/docs/ref/am_conf/intro.html29
-rw-r--r--db/docs/ref/am_conf/logrec.html128
-rw-r--r--db/docs/ref/am_conf/malloc.html38
-rw-r--r--db/docs/ref/am_conf/pagesize.html74
-rw-r--r--db/docs/ref/am_conf/re_source.html59
-rw-r--r--db/docs/ref/am_conf/recno.html41
-rw-r--r--db/docs/ref/am_conf/renumber.html51
-rw-r--r--db/docs/ref/am_conf/select.html74
-rw-r--r--db/docs/ref/am_misc/align.html25
-rw-r--r--db/docs/ref/am_misc/dbsizes.html25
-rw-r--r--db/docs/ref/am_misc/diskspace.html101
-rw-r--r--db/docs/ref/am_misc/error.html59
-rw-r--r--db/docs/ref/am_misc/faq.html114
-rw-r--r--db/docs/ref/am_misc/get_bulk.html35
-rw-r--r--db/docs/ref/am_misc/partial.html58
-rw-r--r--db/docs/ref/am_misc/perm.html35
-rw-r--r--db/docs/ref/am_misc/stability.html27
-rw-r--r--db/docs/ref/am_misc/struct.html48
-rw-r--r--db/docs/ref/am_misc/tune.html64
-rw-r--r--db/docs/ref/apprec/auto.html54
-rw-r--r--db/docs/ref/apprec/config.html44
-rw-r--r--db/docs/ref/apprec/def.html56
-rw-r--r--db/docs/ref/apprec/intro.html34
-rw-r--r--db/docs/ref/arch/apis.html79
-rw-r--r--db/docs/ref/arch/bigpic.html147
-rw-r--r--db/docs/ref/arch/progmodel.html59
-rw-r--r--db/docs/ref/arch/script.html27
-rw-r--r--db/docs/ref/arch/utilities.html40
-rw-r--r--db/docs/ref/bdb/bdb_fig_1.gifbin0 -> 23433 bytes
-rw-r--r--db/docs/ref/bdb/bind_fig_1.gifbin0 -> 10102 bytes
-rw-r--r--db/docs/ref/bdb/collection_fig_1.gifbin0 -> 32965 bytes
-rw-r--r--db/docs/ref/bdb/cs_bdb.html247
-rw-r--r--db/docs/ref/bdb/cs_bdb_bind.html246
-rw-r--r--db/docs/ref/bdb/cs_bdb_collection.html436
-rw-r--r--db/docs/ref/bdb/cs_bdb_serial.html40
-rw-r--r--db/docs/ref/bdb/faq.html44
-rw-r--r--db/docs/ref/bdb/overview.html185
-rw-r--r--db/docs/ref/bdb_basic/catalog.html87
-rw-r--r--db/docs/ref/bdb_basic/env.html148
-rw-r--r--db/docs/ref/bdb_basic/except.html108
-rw-r--r--db/docs/ref/bdb_basic/intro.html41
-rw-r--r--db/docs/ref/bdb_basic/keyvalue.html290
-rw-r--r--db/docs/ref/bdb_basic/main.html185
-rw-r--r--db/docs/ref/bdb_basic/read.html174
-rw-r--r--db/docs/ref/bdb_basic/stores.html251
-rw-r--r--db/docs/ref/bdb_basic/transact.html150
-rw-r--r--db/docs/ref/bdb_basic/views.html183
-rw-r--r--db/docs/ref/bdb_basic/write.html168
-rw-r--r--db/docs/ref/bdb_entity/bindings.html211
-rw-r--r--db/docs/ref/bdb_entity/classes.html178
-rw-r--r--db/docs/ref/bdb_entity/intro.html77
-rw-r--r--db/docs/ref/bdb_entity/read.html193
-rw-r--r--db/docs/ref/bdb_entity/views.html104
-rw-r--r--db/docs/ref/bdb_index/foreign.html259
-rw-r--r--db/docs/ref/bdb_index/intro.html35
-rw-r--r--db/docs/ref/bdb_index/read.html220
-rw-r--r--db/docs/ref/bdb_index/second.html266
-rw-r--r--db/docs/ref/bdb_index/views.html144
-rw-r--r--db/docs/ref/bdb_sentity/binding.html134
-rw-r--r--db/docs/ref/bdb_sentity/class.html189
-rw-r--r--db/docs/ref/bdb_sentity/intro.html63
-rw-r--r--db/docs/ref/bdb_sentity/remove.html82
-rw-r--r--db/docs/ref/bdb_tuple/extract.html154
-rw-r--r--db/docs/ref/bdb_tuple/format.html101
-rw-r--r--db/docs/ref/bdb_tuple/intro.html59
-rw-r--r--db/docs/ref/bdb_tuple/sorted.html197
-rw-r--r--db/docs/ref/bdb_tuple/tbinding.html174
-rw-r--r--db/docs/ref/bdb_tuple/tsbinding.html158
-rw-r--r--db/docs/ref/bdb_tut/intro.html108
-rw-r--r--db/docs/ref/bdb_tut/summary.html62
-rw-r--r--db/docs/ref/build_unix/aix.html103
-rw-r--r--db/docs/ref/build_unix/conf.html245
-rw-r--r--db/docs/ref/build_unix/embedix.html36
-rw-r--r--db/docs/ref/build_unix/flags.html74
-rw-r--r--db/docs/ref/build_unix/freebsd.html49
-rw-r--r--db/docs/ref/build_unix/hpux.html117
-rw-r--r--db/docs/ref/build_unix/install.html66
-rw-r--r--db/docs/ref/build_unix/intro.html90
-rw-r--r--db/docs/ref/build_unix/irix.html31
-rw-r--r--db/docs/ref/build_unix/linux.html43
-rw-r--r--db/docs/ref/build_unix/macosx.html31
-rw-r--r--db/docs/ref/build_unix/notes.html185
-rw-r--r--db/docs/ref/build_unix/osf1.html31
-rw-r--r--db/docs/ref/build_unix/qnx.html55
-rw-r--r--db/docs/ref/build_unix/sco.html29
-rw-r--r--db/docs/ref/build_unix/shlib.html146
-rw-r--r--db/docs/ref/build_unix/small.html59
-rw-r--r--db/docs/ref/build_unix/solaris.html120
-rw-r--r--db/docs/ref/build_unix/sunos.html33
-rw-r--r--db/docs/ref/build_unix/test.html79
-rw-r--r--db/docs/ref/build_unix/ultrix.html25
-rw-r--r--db/docs/ref/build_vxworks/faq.html142
-rw-r--r--db/docs/ref/build_vxworks/intro.html145
-rw-r--r--db/docs/ref/build_vxworks/introae.html55
-rw-r--r--db/docs/ref/build_vxworks/notes.html99
-rw-r--r--db/docs/ref/build_win/faq.html83
-rw-r--r--db/docs/ref/build_win/intro.html339
-rw-r--r--db/docs/ref/build_win/notes.html78
-rw-r--r--db/docs/ref/build_win/small.html45
-rw-r--r--db/docs/ref/build_win/test.html110
-rw-r--r--db/docs/ref/cam/intro.html136
-rw-r--r--db/docs/ref/debug/common.html220
-rw-r--r--db/docs/ref/debug/compile.html42
-rw-r--r--db/docs/ref/debug/intro.html55
-rw-r--r--db/docs/ref/debug/printlog.html161
-rw-r--r--db/docs/ref/debug/runtime.html61
-rw-r--r--db/docs/ref/distrib/layout.html116
-rw-r--r--db/docs/ref/distrib/port.html30
-rw-r--r--db/docs/ref/dumpload/format.html73
-rw-r--r--db/docs/ref/dumpload/text.html27
-rw-r--r--db/docs/ref/dumpload/utility.html47
-rw-r--r--db/docs/ref/env/create.html143
-rw-r--r--db/docs/ref/env/db_config.html20
-rw-r--r--db/docs/ref/env/encrypt.html61
-rw-r--r--db/docs/ref/env/error.html65
-rw-r--r--db/docs/ref/env/faq.html41
-rw-r--r--db/docs/ref/env/intro.html136
-rw-r--r--db/docs/ref/env/naming.html208
-rw-r--r--db/docs/ref/env/open.html90
-rw-r--r--db/docs/ref/env/region.html95
-rw-r--r--db/docs/ref/env/remote.html54
-rw-r--r--db/docs/ref/env/security.html62
-rw-r--r--db/docs/ref/install/file.html27
-rw-r--r--db/docs/ref/install/multiple.html23
-rw-r--r--db/docs/ref/install/rpm.html24
-rw-r--r--db/docs/ref/intro/data.html25
-rw-r--r--db/docs/ref/intro/dbis.html97
-rw-r--r--db/docs/ref/intro/dbisnot.html99
-rw-r--r--db/docs/ref/intro/distrib.html25
-rw-r--r--db/docs/ref/intro/need.html27
-rw-r--r--db/docs/ref/intro/products.html83
-rw-r--r--db/docs/ref/intro/terrain.html89
-rw-r--r--db/docs/ref/intro/what.html29
-rw-r--r--db/docs/ref/intro/where.html38
-rw-r--r--db/docs/ref/java/compat.html35
-rw-r--r--db/docs/ref/java/conf.html149
-rw-r--r--db/docs/ref/java/faq.html47
-rw-r--r--db/docs/ref/java/program.html150
-rw-r--r--db/docs/ref/lock/am_conv.html205
-rw-r--r--db/docs/ref/lock/cam_conv.html53
-rw-r--r--db/docs/ref/lock/config.html62
-rw-r--r--db/docs/ref/lock/dead.html151
-rw-r--r--db/docs/ref/lock/deaddbg.html56
-rw-r--r--db/docs/ref/lock/intro.html164
-rw-r--r--db/docs/ref/lock/max.html107
-rw-r--r--db/docs/ref/lock/nondb.html67
-rw-r--r--db/docs/ref/lock/notxn.html59
-rw-r--r--db/docs/ref/lock/page.html98
-rw-r--r--db/docs/ref/lock/stdmode.html74
-rw-r--r--db/docs/ref/lock/timeout.html41
-rw-r--r--db/docs/ref/lock/twopl.html63
-rw-r--r--db/docs/ref/log/config.html61
-rw-r--r--db/docs/ref/log/intro.html83
-rw-r--r--db/docs/ref/log/limits.html54
-rw-r--r--db/docs/ref/mp/config.html78
-rw-r--r--db/docs/ref/mp/intro.html124
-rw-r--r--db/docs/ref/perl/intro.html27
-rw-r--r--db/docs/ref/pindex.src236
-rw-r--r--db/docs/ref/program/appsignals.html40
-rw-r--r--db/docs/ref/program/cache.html18
-rw-r--r--db/docs/ref/program/compatible.html39
-rw-r--r--db/docs/ref/program/copy.html86
-rw-r--r--db/docs/ref/program/environ.html29
-rw-r--r--db/docs/ref/program/errorret.html115
-rw-r--r--db/docs/ref/program/faq.html30
-rw-r--r--db/docs/ref/program/mt.html127
-rw-r--r--db/docs/ref/program/namespace.html44
-rw-r--r--db/docs/ref/program/ram.html53
-rw-r--r--db/docs/ref/program/runtime.html49
-rw-r--r--db/docs/ref/program/scope.html114
-rw-r--r--db/docs/ref/refs/refs.html29
-rw-r--r--db/docs/ref/refs/witold.html24
-rw-r--r--db/docs/ref/rep/app.html87
-rw-r--r--db/docs/ref/rep/comm.html61
-rw-r--r--db/docs/ref/rep/elect.html90
-rw-r--r--db/docs/ref/rep/ex.html36
-rw-r--r--db/docs/ref/rep/ex_comm.html41
-rw-r--r--db/docs/ref/rep/ex_rq.html34
-rw-r--r--db/docs/ref/rep/faq.html39
-rw-r--r--db/docs/ref/rep/id.html20
-rw-r--r--db/docs/ref/rep/init.html22
-rw-r--r--db/docs/ref/rep/intro.html37
-rw-r--r--db/docs/ref/rep/logonly.html32
-rw-r--r--db/docs/ref/rep/newsite.html18
-rw-r--r--db/docs/ref/rep/partition.html32
-rw-r--r--db/docs/ref/rep/pri.html30
-rw-r--r--db/docs/ref/rep/trans.html244
-rw-r--r--db/docs/ref/rpc/client.html103
-rw-r--r--db/docs/ref/rpc/faq.html18
-rw-r--r--db/docs/ref/rpc/intro.html83
-rw-r--r--db/docs/ref/rpc/server.html49
-rw-r--r--db/docs/ref/sendmail/intro.html51
-rw-r--r--db/docs/ref/simple_tut/close.html44
-rw-r--r--db/docs/ref/simple_tut/del.html51
-rw-r--r--db/docs/ref/simple_tut/errors.html39
-rw-r--r--db/docs/ref/simple_tut/get.html48
-rw-r--r--db/docs/ref/simple_tut/handles.html23
-rw-r--r--db/docs/ref/simple_tut/intro.html32
-rw-r--r--db/docs/ref/simple_tut/keydata.html29
-rw-r--r--db/docs/ref/simple_tut/open.html52
-rw-r--r--db/docs/ref/simple_tut/put.html67
-rw-r--r--db/docs/ref/tcl/error.html72
-rw-r--r--db/docs/ref/tcl/faq.html54
-rw-r--r--db/docs/ref/tcl/intro.html85
-rw-r--r--db/docs/ref/tcl/program.html32
-rw-r--r--db/docs/ref/tcl/using.html52
-rw-r--r--db/docs/ref/test/faq.html27
-rw-r--r--db/docs/ref/test/run.html111
-rw-r--r--db/docs/ref/transapp/admin.html45
-rw-r--r--db/docs/ref/transapp/app.html125
-rw-r--r--db/docs/ref/transapp/archival.html175
-rw-r--r--db/docs/ref/transapp/atomicity.html22
-rw-r--r--db/docs/ref/transapp/checkpoint.html52
-rw-r--r--db/docs/ref/transapp/cursor.html78
-rw-r--r--db/docs/ref/transapp/data_open.html87
-rw-r--r--db/docs/ref/transapp/deadlock.html92
-rw-r--r--db/docs/ref/transapp/env_open.html58
-rw-r--r--db/docs/ref/transapp/faq.html26
-rw-r--r--db/docs/ref/transapp/filesys.html98
-rw-r--r--db/docs/ref/transapp/hotfail.html42
-rw-r--r--db/docs/ref/transapp/inc.html137
-rw-r--r--db/docs/ref/transapp/intro.html44
-rw-r--r--db/docs/ref/transapp/logfile.html116
-rw-r--r--db/docs/ref/transapp/nested.html48
-rw-r--r--db/docs/ref/transapp/put.html154
-rw-r--r--db/docs/ref/transapp/read.html74
-rw-r--r--db/docs/ref/transapp/reclimit.html194
-rw-r--r--db/docs/ref/transapp/recovery.html116
-rw-r--r--db/docs/ref/transapp/term.html89
-rw-r--r--db/docs/ref/transapp/throughput.html152
-rw-r--r--db/docs/ref/transapp/transapp.cs72
-rw-r--r--db/docs/ref/transapp/tune.html81
-rw-r--r--db/docs/ref/transapp/why.html57
-rw-r--r--db/docs/ref/transapp/writetest.cs38
-rw-r--r--db/docs/ref/txn/config.html52
-rw-r--r--db/docs/ref/txn/intro.html120
-rw-r--r--db/docs/ref/txn/limits.html80
-rw-r--r--db/docs/ref/upgrade.2.0/convert.html27
-rw-r--r--db/docs/ref/upgrade.2.0/disk.html17
-rw-r--r--db/docs/ref/upgrade.2.0/intro.html21
-rw-r--r--db/docs/ref/upgrade.2.0/system.html33
-rw-r--r--db/docs/ref/upgrade.2.0/toc.html22
-rw-r--r--db/docs/ref/upgrade.3.0/close.html31
-rw-r--r--db/docs/ref/upgrade.3.0/cxx.html23
-rw-r--r--db/docs/ref/upgrade.3.0/db.html33
-rw-r--r--db/docs/ref/upgrade.3.0/db_cxx.html35
-rw-r--r--db/docs/ref/upgrade.3.0/dbenv.html75
-rw-r--r--db/docs/ref/upgrade.3.0/dbenv_cxx.html35
-rw-r--r--db/docs/ref/upgrade.3.0/dbinfo.html41
-rw-r--r--db/docs/ref/upgrade.3.0/disk.html21
-rw-r--r--db/docs/ref/upgrade.3.0/eacces.html29
-rw-r--r--db/docs/ref/upgrade.3.0/eagain.html23
-rw-r--r--db/docs/ref/upgrade.3.0/envopen.html124
-rw-r--r--db/docs/ref/upgrade.3.0/func.html55
-rw-r--r--db/docs/ref/upgrade.3.0/intro.html19
-rw-r--r--db/docs/ref/upgrade.3.0/java.html29
-rw-r--r--db/docs/ref/upgrade.3.0/join.html29
-rw-r--r--db/docs/ref/upgrade.3.0/jump_set.html21
-rw-r--r--db/docs/ref/upgrade.3.0/lock_detect.html23
-rw-r--r--db/docs/ref/upgrade.3.0/lock_notheld.html29
-rw-r--r--db/docs/ref/upgrade.3.0/lock_put.html23
-rw-r--r--db/docs/ref/upgrade.3.0/lock_stat.html21
-rw-r--r--db/docs/ref/upgrade.3.0/log_register.html25
-rw-r--r--db/docs/ref/upgrade.3.0/log_stat.html21
-rw-r--r--db/docs/ref/upgrade.3.0/memp_stat.html27
-rw-r--r--db/docs/ref/upgrade.3.0/open.html43
-rw-r--r--db/docs/ref/upgrade.3.0/rmw.html29
-rw-r--r--db/docs/ref/upgrade.3.0/stat.html23
-rw-r--r--db/docs/ref/upgrade.3.0/toc.html22
-rw-r--r--db/docs/ref/upgrade.3.0/txn_begin.html25
-rw-r--r--db/docs/ref/upgrade.3.0/txn_commit.html25
-rw-r--r--db/docs/ref/upgrade.3.0/txn_stat.html21
-rw-r--r--db/docs/ref/upgrade.3.0/value_set.html39
-rw-r--r--db/docs/ref/upgrade.3.0/xa.html31
-rw-r--r--db/docs/ref/upgrade.3.1/btstat.html33
-rw-r--r--db/docs/ref/upgrade.3.1/config.html35
-rw-r--r--db/docs/ref/upgrade.3.1/disk.html25
-rw-r--r--db/docs/ref/upgrade.3.1/dup.html19
-rw-r--r--db/docs/ref/upgrade.3.1/env.html75
-rw-r--r--db/docs/ref/upgrade.3.1/intro.html19
-rw-r--r--db/docs/ref/upgrade.3.1/log_register.html31
-rw-r--r--db/docs/ref/upgrade.3.1/logalloc.html19
-rw-r--r--db/docs/ref/upgrade.3.1/memp_register.html23
-rw-r--r--db/docs/ref/upgrade.3.1/put.html48
-rw-r--r--db/docs/ref/upgrade.3.1/set_feedback.html27
-rw-r--r--db/docs/ref/upgrade.3.1/set_paniccall.html27
-rw-r--r--db/docs/ref/upgrade.3.1/set_tx_recover.html31
-rw-r--r--db/docs/ref/upgrade.3.1/sysmem.html21
-rw-r--r--db/docs/ref/upgrade.3.1/tcl.html26
-rw-r--r--db/docs/ref/upgrade.3.1/tmp.html21
-rw-r--r--db/docs/ref/upgrade.3.1/toc.html30
-rw-r--r--db/docs/ref/upgrade.3.1/txn_check.html24
-rw-r--r--db/docs/ref/upgrade.3.2/callback.html29
-rw-r--r--db/docs/ref/upgrade.3.2/db_dump.html17
-rw-r--r--db/docs/ref/upgrade.3.2/disk.html21
-rw-r--r--db/docs/ref/upgrade.3.2/handle.html32
-rw-r--r--db/docs/ref/upgrade.3.2/incomplete.html40
-rw-r--r--db/docs/ref/upgrade.3.2/intro.html19
-rw-r--r--db/docs/ref/upgrade.3.2/mutexlock.html29
-rw-r--r--db/docs/ref/upgrade.3.2/notfound.html28
-rw-r--r--db/docs/ref/upgrade.3.2/renumber.html27
-rw-r--r--db/docs/ref/upgrade.3.2/set_flags.html37
-rw-r--r--db/docs/ref/upgrade.3.2/toc.html30
-rw-r--r--db/docs/ref/upgrade.3.2/tx_recover.html31
-rw-r--r--db/docs/ref/upgrade.3.3/alloc.html74
-rw-r--r--db/docs/ref/upgrade.3.3/bigfile.html16
-rw-r--r--db/docs/ref/upgrade.3.3/conflict.html19
-rw-r--r--db/docs/ref/upgrade.3.3/disk.html19
-rw-r--r--db/docs/ref/upgrade.3.3/getswap.html16
-rw-r--r--db/docs/ref/upgrade.3.3/gettype.html16
-rw-r--r--db/docs/ref/upgrade.3.3/intro.html19
-rw-r--r--db/docs/ref/upgrade.3.3/memp_fget.html29
-rw-r--r--db/docs/ref/upgrade.3.3/rpc.html29
-rw-r--r--db/docs/ref/upgrade.3.3/shared.html16
-rw-r--r--db/docs/ref/upgrade.3.3/toc.html28
-rw-r--r--db/docs/ref/upgrade.3.3/txn_prepare.html25
-rw-r--r--db/docs/ref/upgrade.4.0/asr.html24
-rw-r--r--db/docs/ref/upgrade.4.0/cxx.html26
-rw-r--r--db/docs/ref/upgrade.4.0/deadlock.html16
-rw-r--r--db/docs/ref/upgrade.4.0/disk.html18
-rw-r--r--db/docs/ref/upgrade.4.0/env.html88
-rw-r--r--db/docs/ref/upgrade.4.0/intro.html16
-rw-r--r--db/docs/ref/upgrade.4.0/java.html24
-rw-r--r--db/docs/ref/upgrade.4.0/lock.html24
-rw-r--r--db/docs/ref/upgrade.4.0/lock_id_free.html16
-rw-r--r--db/docs/ref/upgrade.4.0/log.html26
-rw-r--r--db/docs/ref/upgrade.4.0/mp.html36
-rw-r--r--db/docs/ref/upgrade.4.0/rpc.html24
-rw-r--r--db/docs/ref/upgrade.4.0/set_lk_max.html20
-rw-r--r--db/docs/ref/upgrade.4.0/toc.html16
-rw-r--r--db/docs/ref/upgrade.4.0/txn.html26
-rw-r--r--db/docs/ref/upgrade.4.1/app_dispatch.html16
-rw-r--r--db/docs/ref/upgrade.4.1/checkpoint.html22
-rw-r--r--db/docs/ref/upgrade.4.1/cxx.html22
-rw-r--r--db/docs/ref/upgrade.4.1/disk.html20
-rw-r--r--db/docs/ref/upgrade.4.1/excl.html16
-rw-r--r--db/docs/ref/upgrade.4.1/fop.html76
-rw-r--r--db/docs/ref/upgrade.4.1/hash_nelem.html16
-rw-r--r--db/docs/ref/upgrade.4.1/incomplete.html23
-rw-r--r--db/docs/ref/upgrade.4.1/intro.html16
-rw-r--r--db/docs/ref/upgrade.4.1/java.html28
-rw-r--r--db/docs/ref/upgrade.4.1/log_register.html16
-rw-r--r--db/docs/ref/upgrade.4.1/log_stat.html16
-rw-r--r--db/docs/ref/upgrade.4.1/memp_sync.html20
-rw-r--r--db/docs/ref/upgrade.4.1/toc.html19
-rw-r--r--db/docs/ref/upgrade.4.2/cksum.html30
-rw-r--r--db/docs/ref/upgrade.4.2/client.html28
-rw-r--r--db/docs/ref/upgrade.4.2/del.html37
-rw-r--r--db/docs/ref/upgrade.4.2/disk.html26
-rw-r--r--db/docs/ref/upgrade.4.2/intro.html27
-rw-r--r--db/docs/ref/upgrade.4.2/java.html100
-rw-r--r--db/docs/ref/upgrade.4.2/lockng.html51
-rw-r--r--db/docs/ref/upgrade.4.2/nosync.html37
-rw-r--r--db/docs/ref/upgrade.4.2/priority.html31
-rw-r--r--db/docs/ref/upgrade.4.2/queue.html36
-rw-r--r--db/docs/ref/upgrade.4.2/repinit.html46
-rw-r--r--db/docs/ref/upgrade.4.2/tcl.html24
-rw-r--r--db/docs/ref/upgrade.4.2/toc.html37
-rw-r--r--db/docs/ref/upgrade.4.2/verify.html34
-rw-r--r--db/docs/ref/upgrade/process.html191
-rw-r--r--db/docs/ref/upgrade/version.html30
-rw-r--r--db/docs/ref/xa/build.html140
-rw-r--r--db/docs/ref/xa/faq.html87
-rw-r--r--db/docs/ref/xa/intro.html90
-rw-r--r--db/docs/ref/xa/xa_config.html72
-rw-r--r--db/docs/ref/xa/xa_intro.html39
-rw-r--r--db/docs/reftoc.html335
-rw-r--r--db/docs/sleepycat/contact.html113
-rw-r--r--db/docs/sleepycat/legal.html55
-rw-r--r--db/docs/sleepycat/license.html24
-rw-r--r--db/docs/utility/berkeley_db_svc.html84
-rw-r--r--db/docs/utility/db_archive.html125
-rw-r--r--db/docs/utility/db_checkpoint.html91
-rw-r--r--db/docs/utility/db_deadlock.html106
-rw-r--r--db/docs/utility/db_dump.html120
-rw-r--r--db/docs/utility/db_load.html138
-rw-r--r--db/docs/utility/db_printlog.html75
-rw-r--r--db/docs/utility/db_recover.html90
-rw-r--r--db/docs/utility/db_stat.html105
-rw-r--r--db/docs/utility/db_upgrade.html110
-rw-r--r--db/docs/utility/db_verify.html91
-rw-r--r--db/docs/utility/index.html13
-rw-r--r--db/env/db_salloc.c6
-rw-r--r--db/env/db_shash.c9
-rw-r--r--db/env/env_file.c24
-rw-r--r--db/env/env_method.c742
-rw-r--r--db/env/env_open.c998
-rw-r--r--db/env/env_recover.c754
-rw-r--r--db/env/env_region.c412
-rw-r--r--db/examples_c/README8
-rw-r--r--db/examples_c/bench_001.c7
-rw-r--r--db/examples_c/ex_access.c95
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.c5
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.h6
-rw-r--r--db/examples_c/ex_apprec/ex_apprec.src4
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_auto.c19
-rw-r--r--db/examples_c/ex_apprec/ex_apprec_rec.c4
-rw-r--r--db/examples_c/ex_btrec.c72
-rw-r--r--db/examples_c/ex_dbclient.c84
-rw-r--r--db/examples_c/ex_env.c77
-rw-r--r--db/examples_c/ex_lock.c60
-rw-r--r--db/examples_c/ex_mpool.c167
-rw-r--r--db/examples_c/ex_repquote/ex_repquote.h87
-rw-r--r--db/examples_c/ex_repquote/ex_rq_client.c90
-rw-r--r--db/examples_c/ex_repquote/ex_rq_main.c63
-rw-r--r--db/examples_c/ex_repquote/ex_rq_master.c28
-rw-r--r--db/examples_c/ex_repquote/ex_rq_net.c161
-rw-r--r--db/examples_c/ex_repquote/ex_rq_util.c109
-rw-r--r--db/examples_c/ex_thread.c143
-rw-r--r--db/examples_c/ex_tpcb.c319
-rw-r--r--db/examples_c/ex_tpcb.h4
-rw-r--r--db/examples_cxx/AccessExample.cpp82
-rw-r--r--db/examples_cxx/BtRecExample.cpp59
-rw-r--r--db/examples_cxx/EnvExample.cpp39
-rw-r--r--db/examples_cxx/LockExample.cpp51
-rw-r--r--db/examples_cxx/MpoolExample.cpp114
-rw-r--r--db/examples_cxx/TpcbExample.cpp201
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/access/AccessExample.java283
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/access/index.html21
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/helloworld/.cvsignore2
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/helloworld/HelloDatabaseWorld.java159
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/helloworld/index.html37
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/index.html54
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartValue.java65
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Sample.java278
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleDatabase.java199
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleViews.java122
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentKey.java49
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentValue.java42
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierValue.java58
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Part.java73
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartValue.java66
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Sample.java261
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleDatabase.java438
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleViews.java320
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Shipment.java56
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentKey.java49
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentValue.java43
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Supplier.java64
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierValue.java59
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Part.java111
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/PartKey.java64
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Sample.java261
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleDatabase.java209
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleViews.java140
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Shipment.java111
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/ShipmentKey.java74
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Supplier.java112
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SupplierKey.java64
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index.html51
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartValue.java65
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Sample.java314
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleDatabase.java432
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleViews.java184
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentKey.java49
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentValue.java42
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierKey.java41
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierValue.java58
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledEntity.java56
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledKey.java40
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Part.java126
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/PartKey.java63
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Sample.java261
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleDatabase.java359
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleViews.java300
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Shipment.java127
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/ShipmentKey.java73
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Supplier.java127
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SupplierKey.java63
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Part.java91
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/PartKey.java39
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Sample.java261
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleDatabase.java444
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleViews.java454
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Shipment.java75
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/ShipmentKey.java47
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Supplier.java82
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SupplierKey.java39
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Part.java73
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartKey.java39
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartValue.java66
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Sample.java260
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleDatabase.java444
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleViews.java431
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Shipment.java56
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentKey.java47
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentValue.java43
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Supplier.java64
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierKey.java39
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierValue.java59
-rw-r--r--db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Weight.java50
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/AccessExample.java (renamed from db/java/src/com/sleepycat/examples/AccessExample.java)74
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/BtRecExample.java (renamed from db/java/src/com/sleepycat/examples/BtRecExample.java)91
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/BulkAccessExample.java (renamed from db/java/src/com/sleepycat/examples/BulkAccessExample.java)74
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/EnvExample.java (renamed from db/java/src/com/sleepycat/examples/EnvExample.java)27
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/LockExample.java (renamed from db/java/src/com/sleepycat/examples/LockExample.java)44
-rw-r--r--db/examples_java/src/com/sleepycat/examples/db/TpcbExample.java855
-rw-r--r--db/fileops/fileops.src11
-rw-r--r--db/fileops/fileops_auto.c482
-rw-r--r--db/fileops/fop_basic.c113
-rw-r--r--db/fileops/fop_rec.c71
-rw-r--r--db/fileops/fop_util.c586
-rw-r--r--db/hash/hash.c1421
-rw-r--r--db/hash/hash.src198
-rw-r--r--db/hash/hash_auto.c3237
-rw-r--r--db/hash/hash_conv.c32
-rw-r--r--db/hash/hash_dup.c47
-rw-r--r--db/hash/hash_func.c13
-rw-r--r--db/hash/hash_meta.c66
-rw-r--r--db/hash/hash_method.c54
-rw-r--r--db/hash/hash_open.c92
-rw-r--r--db/hash/hash_page.c86
-rw-r--r--db/hash/hash_rec.c521
-rw-r--r--db/hash/hash_reclaim.c51
-rw-r--r--db/hash/hash_stat.c167
-rw-r--r--db/hash/hash_stub.c394
-rw-r--r--db/hash/hash_upgrade.c23
-rw-r--r--db/hash/hash_verify.c31
-rw-r--r--db/hmac/hmac.c8
-rw-r--r--db/hmac/sha1.c2
-rw-r--r--db/hsearch/hsearch.c24
-rw-r--r--db/java/src/com/sleepycat/bdb/CurrentTransaction.java238
-rw-r--r--db/java/src/com/sleepycat/bdb/DataCursor.java632
-rw-r--r--db/java/src/com/sleepycat/bdb/DataDb.java548
-rw-r--r--db/java/src/com/sleepycat/bdb/DataEnvironment.java98
-rw-r--r--db/java/src/com/sleepycat/bdb/DataIndex.java215
-rw-r--r--db/java/src/com/sleepycat/bdb/DataStore.java231
-rw-r--r--db/java/src/com/sleepycat/bdb/DataThang.java340
-rw-r--r--db/java/src/com/sleepycat/bdb/DataView.java1057
-rw-r--r--db/java/src/com/sleepycat/bdb/ForeignKeyIndex.java197
-rw-r--r--db/java/src/com/sleepycat/bdb/IntegrityConstraintException.java32
-rw-r--r--db/java/src/com/sleepycat/bdb/KeyRange.java314
-rw-r--r--db/java/src/com/sleepycat/bdb/KeyRangeException.java31
-rw-r--r--db/java/src/com/sleepycat/bdb/PrimaryKeyAssigner.java33
-rw-r--r--db/java/src/com/sleepycat/bdb/RecordNumberBinding.java56
-rw-r--r--db/java/src/com/sleepycat/bdb/RecordNumberFormat.java73
-rw-r--r--db/java/src/com/sleepycat/bdb/StoredClassCatalog.java432
-rw-r--r--db/java/src/com/sleepycat/bdb/TransactionRunner.java185
-rw-r--r--db/java/src/com/sleepycat/bdb/TransactionWorker.java28
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/ByteArrayBinding.java62
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/ByteArrayFormat.java24
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/DataBinding.java47
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/DataBuffer.java80
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/DataFormat.java18
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/DataType.java42
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/EntityBinding.java66
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/KeyExtractor.java91
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/SimpleBuffer.java103
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/package.html7
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/ClassCatalog.java79
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialBinding.java97
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialFormat.java130
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialInput.java67
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialOutput.java105
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialBinding.java118
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.java131
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialBinding.java130
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.java133
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.java80
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.java91
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/serial/package.html6
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.java48
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.java69
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleBinding.java312
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleFormat.java92
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleInput.java451
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleInputBinding.java62
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.java76
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleOutput.java375
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.java128
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.java130
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.java102
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.java90
-rw-r--r--db/java/src/com/sleepycat/bdb/bind/tuple/package.html6
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/MapEntry.java121
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredCollection.java453
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredCollections.java263
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredContainer.java431
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredEntrySet.java167
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredIterator.java590
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredKeySet.java151
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredList.java576
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredMap.java473
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredMapEntry.java41
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredSortedEntrySet.java203
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredSortedKeySet.java246
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredSortedMap.java321
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredSortedValueSet.java286
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/StoredValueSet.java269
-rw-r--r--db/java/src/com/sleepycat/bdb/collection/package.html7
-rw-r--r--db/java/src/com/sleepycat/bdb/factory/TupleSerialDbFactory.java275
-rw-r--r--db/java/src/com/sleepycat/bdb/factory/package.html6
-rw-r--r--db/java/src/com/sleepycat/bdb/package.html7
-rw-r--r--db/java/src/com/sleepycat/bdb/util/ExceptionUnwrapper.java69
-rw-r--r--db/java/src/com/sleepycat/bdb/util/ExceptionWrapper.java25
-rw-r--r--db/java/src/com/sleepycat/bdb/util/FastInputStream.java143
-rw-r--r--db/java/src/com/sleepycat/bdb/util/FastOutputStream.java240
-rw-r--r--db/java/src/com/sleepycat/bdb/util/IOExceptionWrapper.java34
-rw-r--r--db/java/src/com/sleepycat/bdb/util/RuntimeExceptionWrapper.java32
-rw-r--r--db/java/src/com/sleepycat/bdb/util/TimeUnits.java32
-rw-r--r--db/java/src/com/sleepycat/bdb/util/UtfOps.java294
-rw-r--r--db/java/src/com/sleepycat/bdb/util/package.html7
-rw-r--r--db/java/src/com/sleepycat/db/Db.java6727
-rw-r--r--db/java/src/com/sleepycat/db/DbAppDispatch.java52
-rw-r--r--db/java/src/com/sleepycat/db/DbAppendRecno.java39
-rw-r--r--db/java/src/com/sleepycat/db/DbBtreeCompare.java52
-rw-r--r--db/java/src/com/sleepycat/db/DbBtreePrefix.java48
-rw-r--r--db/java/src/com/sleepycat/db/DbBtreeStat.java202
-rw-r--r--db/java/src/com/sleepycat/db/DbClient.java24
-rw-r--r--db/java/src/com/sleepycat/db/DbConstants.java217
-rw-r--r--db/java/src/com/sleepycat/db/DbDeadlockException.java45
-rw-r--r--db/java/src/com/sleepycat/db/DbDupCompare.java50
-rw-r--r--db/java/src/com/sleepycat/db/DbEnv.java5526
-rw-r--r--db/java/src/com/sleepycat/db/DbEnvFeedback.java33
-rw-r--r--db/java/src/com/sleepycat/db/DbEnvFeedbackHandler.java43
-rw-r--r--db/java/src/com/sleepycat/db/DbErrcall.java27
-rw-r--r--db/java/src/com/sleepycat/db/DbErrorHandler.java37
-rw-r--r--db/java/src/com/sleepycat/db/DbException.java128
-rw-r--r--db/java/src/com/sleepycat/db/DbFeedback.java30
-rw-r--r--db/java/src/com/sleepycat/db/DbFeedbackHandler.java48
-rw-r--r--db/java/src/com/sleepycat/db/DbHash.java35
-rw-r--r--db/java/src/com/sleepycat/db/DbHashStat.java169
-rw-r--r--db/java/src/com/sleepycat/db/DbKeyRange.java33
-rw-r--r--db/java/src/com/sleepycat/db/DbLock.java71
-rw-r--r--db/java/src/com/sleepycat/db/DbLockNotGrantedException.java200
-rw-r--r--db/java/src/com/sleepycat/db/DbLockRequest.java262
-rw-r--r--db/java/src/com/sleepycat/db/DbLockStat.java217
-rw-r--r--db/java/src/com/sleepycat/db/DbLogStat.java203
-rw-r--r--db/java/src/com/sleepycat/db/DbLogc.java241
-rw-r--r--db/java/src/com/sleepycat/db/DbLsn.java131
-rw-r--r--db/java/src/com/sleepycat/db/DbMemoryException.java113
-rw-r--r--db/java/src/com/sleepycat/db/DbMpoolFStat.java96
-rw-r--r--db/java/src/com/sleepycat/db/DbMpoolFile.java284
-rw-r--r--db/java/src/com/sleepycat/db/DbMpoolStat.java279
-rw-r--r--db/java/src/com/sleepycat/db/DbMultipleDataIterator.java61
-rw-r--r--db/java/src/com/sleepycat/db/DbMultipleIterator.java60
-rw-r--r--db/java/src/com/sleepycat/db/DbMultipleKeyDataIterator.java81
-rw-r--r--db/java/src/com/sleepycat/db/DbMultipleRecnoDataIterator.java73
-rw-r--r--db/java/src/com/sleepycat/db/DbOutputStreamErrcall.java58
-rw-r--r--db/java/src/com/sleepycat/db/DbPanicHandler.java33
-rw-r--r--db/java/src/com/sleepycat/db/DbPreplist.java57
-rw-r--r--db/java/src/com/sleepycat/db/DbQueueStat.java144
-rw-r--r--db/java/src/com/sleepycat/db/DbRepStat.java261
-rw-r--r--db/java/src/com/sleepycat/db/DbRepTransport.java97
-rw-r--r--db/java/src/com/sleepycat/db/DbRunRecoveryException.java44
-rw-r--r--db/java/src/com/sleepycat/db/DbSecondaryKeyCreate.java70
-rw-r--r--db/java/src/com/sleepycat/db/DbTxn.java384
-rw-r--r--db/java/src/com/sleepycat/db/DbTxnStat.java201
-rw-r--r--db/java/src/com/sleepycat/db/DbUtil.java178
-rw-r--r--db/java/src/com/sleepycat/db/Dbc.java1591
-rw-r--r--db/java/src/com/sleepycat/db/Dbt.java629
-rw-r--r--db/java/src/com/sleepycat/db/db_java.java34
-rw-r--r--db/java/src/com/sleepycat/db/db_javaJNI.java230
-rw-r--r--db/java/src/com/sleepycat/db/debug/DbConstants.java160
-rw-r--r--db/java/src/com/sleepycat/db/package.html7
-rw-r--r--db/java/src/com/sleepycat/db/release/DbConstants.java160
-rw-r--r--db/java/src/com/sleepycat/db/xa/DbXAResource.java190
-rw-r--r--db/java/src/com/sleepycat/db/xa/DbXid.java49
-rw-r--r--db/java/src/com/sleepycat/examples/TpcbExample.java831
-rw-r--r--db/libdb_java/README190
-rw-r--r--db/libdb_java/checkapi.prl132
-rw-r--r--db/libdb_java/com_sleepycat_db_Db.h349
-rw-r--r--db/libdb_java/com_sleepycat_db_DbEnv.h509
-rw-r--r--db/libdb_java/com_sleepycat_db_DbLock.h29
-rw-r--r--db/libdb_java/com_sleepycat_db_DbLogc.h37
-rw-r--r--db/libdb_java/com_sleepycat_db_DbLsn.h29
-rw-r--r--db/libdb_java/com_sleepycat_db_DbTxn.h53
-rw-r--r--db/libdb_java/com_sleepycat_db_DbUtil.h22
-rw-r--r--db/libdb_java/com_sleepycat_db_Dbc.h69
-rw-r--r--db/libdb_java/com_sleepycat_db_Dbt.h157
-rw-r--r--db/libdb_java/com_sleepycat_db_xa_DbXAResource.h101
-rw-r--r--db/libdb_java/db.i1194
-rw-r--r--db/libdb_java/db_java.i568
-rw-r--r--db/libdb_java/db_java_wrap.c7322
-rw-r--r--db/libdb_java/java-post.sed27
-rw-r--r--db/libdb_java/java_Db.c964
-rw-r--r--db/libdb_java/java_DbEnv.c1300
-rw-r--r--db/libdb_java/java_DbLock.c55
-rw-r--r--db/libdb_java/java_DbLogc.c110
-rw-r--r--db/libdb_java/java_DbLsn.c43
-rw-r--r--db/libdb_java/java_DbTxn.c82
-rw-r--r--db/libdb_java/java_DbUtil.c31
-rw-r--r--db/libdb_java/java_DbXAResource.c288
-rw-r--r--db/libdb_java/java_Dbc.c196
-rw-r--r--db/libdb_java/java_Dbt.c176
-rw-r--r--db/libdb_java/java_callbacks.i392
-rw-r--r--db/libdb_java/java_except.i123
-rw-r--r--db/libdb_java/java_info.c1001
-rw-r--r--db/libdb_java/java_info.h200
-rw-r--r--db/libdb_java/java_locked.c294
-rw-r--r--db/libdb_java/java_locked.h98
-rw-r--r--db/libdb_java/java_stat.i165
-rw-r--r--db/libdb_java/java_stat_auto.c41
-rw-r--r--db/libdb_java/java_stat_auto.h9
-rw-r--r--db/libdb_java/java_typemaps.i601
-rw-r--r--db/libdb_java/java_util.c556
-rw-r--r--db/libdb_java/java_util.h359
-rw-r--r--db/libdb_java/java_util.i341
-rw-r--r--db/lock/Design10
-rw-r--r--db/lock/lock.c2105
-rw-r--r--db/lock/lock_deadlock.c663
-rw-r--r--db/lock/lock_method.c264
-rw-r--r--db/lock/lock_region.c233
-rw-r--r--db/lock/lock_stat.c424
-rw-r--r--db/lock/lock_util.c12
-rw-r--r--db/log/log.c327
-rw-r--r--db/log/log_archive.c333
-rw-r--r--db/log/log_compare.c6
-rw-r--r--db/log/log_get.c1291
-rw-r--r--db/log/log_method.c197
-rw-r--r--db/log/log_put.c374
-rw-r--r--db/mp/mp_alloc.c392
-rw-r--r--db/mp/mp_bh.c241
-rw-r--r--db/mp/mp_fget.c744
-rw-r--r--db/mp/mp_fopen.c990
-rw-r--r--db/mp/mp_fput.c288
-rw-r--r--db/mp/mp_fset.c98
-rw-r--r--db/mp/mp_method.c338
-rw-r--r--db/mp/mp_region.c113
-rw-r--r--db/mp/mp_register.c64
-rw-r--r--db/mp/mp_stat.c377
-rw-r--r--db/mp/mp_sync.c196
-rw-r--r--db/mp/mp_trickle.c162
-rw-r--r--db/mutex/mut_fcntl.c49
-rw-r--r--db/mutex/mut_pthread.c149
-rw-r--r--db/mutex/mut_tas.c108
-rw-r--r--db/mutex/mut_win32.c26
-rw-r--r--db/mutex/mutex.c248
-rw-r--r--db/mutex/tm.c783
-rw-r--r--db/mutex/uts4_cc.s6
-rw-r--r--db/os/os_abs.c4
-rw-r--r--db/os/os_alloc.c295
-rw-r--r--db/os/os_clock.c4
-rw-r--r--db/os/os_config.c4
-rw-r--r--db/os/os_dir.c26
-rw-r--r--db/os/os_errno.c47
-rw-r--r--db/os/os_fid.c28
-rw-r--r--db/os/os_fsync.c23
-rw-r--r--db/os/os_handle.c151
-rw-r--r--db/os/os_id.c4
-rw-r--r--db/os/os_map.c42
-rw-r--r--db/os/os_method.c140
-rw-r--r--db/os/os_oflags.c30
-rw-r--r--db/os/os_open.c161
-rw-r--r--db/os/os_region.c18
-rw-r--r--db/os/os_rename.c37
-rw-r--r--db/os/os_root.c4
-rw-r--r--db/os/os_rpath.c4
-rw-r--r--db/os/os_rw.c65
-rw-r--r--db/os/os_seek.c13
-rw-r--r--db/os/os_sleep.c29
-rw-r--r--db/os/os_spin.c52
-rw-r--r--db/os/os_stat.c50
-rw-r--r--db/os/os_tmpdir.c10
-rw-r--r--db/os/os_unlink.c87
-rw-r--r--db/os_vxworks/os_vx_abs.c4
-rw-r--r--db/os_vxworks/os_vx_config.c4
-rw-r--r--db/os_vxworks/os_vx_map.c4
-rw-r--r--db/os_win32/os_abs.c4
-rw-r--r--db/os_win32/os_clock.c4
-rw-r--r--db/os_win32/os_config.c28
-rw-r--r--db/os_win32/os_dir.c33
-rw-r--r--db/os_win32/os_errno.c18
-rw-r--r--db/os_win32/os_fid.c24
-rw-r--r--db/os_win32/os_fsync.c14
-rw-r--r--db/os_win32/os_handle.c108
-rw-r--r--db/os_win32/os_map.c201
-rw-r--r--db/os_win32/os_open.c145
-rw-r--r--db/os_win32/os_rename.c11
-rw-r--r--db/os_win32/os_rw.c78
-rw-r--r--db/os_win32/os_seek.c4
-rw-r--r--db/os_win32/os_sleep.c9
-rw-r--r--db/os_win32/os_spin.c23
-rw-r--r--db/os_win32/os_stat.c29
-rw-r--r--db/os_win32/os_type.c35
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pm95
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pod98
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.pod.P98
-rw-r--r--db/perl/BerkeleyDB/BerkeleyDB.xs345
-rw-r--r--db/perl/BerkeleyDB/Changes54
-rw-r--r--db/perl/BerkeleyDB/MANIFEST2
-rw-r--r--db/perl/BerkeleyDB/META.yml10
-rw-r--r--db/perl/BerkeleyDB/Makefile.PL6
-rw-r--r--db/perl/BerkeleyDB/README135
-rw-r--r--db/perl/BerkeleyDB/config.in22
-rw-r--r--db/perl/BerkeleyDB/constants.h704
-rwxr-xr-xdb/perl/BerkeleyDB/dbinfo81
-rw-r--r--db/perl/BerkeleyDB/mkconsts37
-rw-r--r--db/perl/BerkeleyDB/patches/5.004137
-rw-r--r--db/perl/BerkeleyDB/ppport.h64
-rw-r--r--db/perl/BerkeleyDB/scan2
-rw-r--r--db/perl/BerkeleyDB/t/btree.t3
-rw-r--r--db/perl/BerkeleyDB/t/db-3.0.t13
-rw-r--r--db/perl/BerkeleyDB/t/db-3.1.t2
-rw-r--r--db/perl/BerkeleyDB/t/db-3.2.t2
-rw-r--r--db/perl/BerkeleyDB/t/db-3.3.t70
-rw-r--r--db/perl/BerkeleyDB/t/encrypt.t647
-rw-r--r--db/perl/BerkeleyDB/t/env.t28
-rw-r--r--db/perl/BerkeleyDB/t/filter.t119
-rw-r--r--db/perl/BerkeleyDB/t/hash.t3
-rw-r--r--db/perl/BerkeleyDB/t/join.t89
-rw-r--r--db/perl/BerkeleyDB/t/mldbm.t70
-rw-r--r--db/perl/BerkeleyDB/t/queue.t390
-rw-r--r--db/perl/BerkeleyDB/t/recno.t2
-rw-r--r--db/perl/BerkeleyDB/t/strict.t3
-rw-r--r--db/perl/BerkeleyDB/t/subdb.t2
-rw-r--r--db/perl/BerkeleyDB/t/util.pm102
-rw-r--r--db/perl/BerkeleyDB/typemap78
-rw-r--r--db/perl/DB_File/Changes17
-rw-r--r--db/perl/DB_File/DB_File.pm20
-rw-r--r--db/perl/DB_File/DB_File.xs58
-rw-r--r--db/perl/DB_File/MANIFEST1
-rw-r--r--db/perl/DB_File/META.yml10
-rw-r--r--db/perl/DB_File/Makefile.PL2
-rw-r--r--db/perl/DB_File/README102
-rw-r--r--db/perl/DB_File/dbinfo81
-rw-r--r--db/perl/DB_File/patches/5.004137
-rw-r--r--db/perl/DB_File/t/db-btree.t50
-rw-r--r--db/perl/DB_File/t/db-hash.t51
-rw-r--r--db/perl/DB_File/t/db-recno.t6
-rw-r--r--db/qam/qam.c1259
-rw-r--r--db/qam/qam.src66
-rw-r--r--db/qam/qam_auto.c1928
-rw-r--r--db/qam/qam_conv.c16
-rw-r--r--db/qam/qam_files.c616
-rw-r--r--db/qam/qam_method.c401
-rw-r--r--db/qam/qam_open.c349
-rw-r--r--db/qam/qam_rec.c446
-rw-r--r--db/qam/qam_stat.c115
-rw-r--r--db/qam/qam_stub.c338
-rw-r--r--db/qam/qam_upgrade.c11
-rw-r--r--db/qam/qam_verify.c402
-rw-r--r--db/rep/rep_method.c737
-rw-r--r--db/rep/rep_record.c2078
-rw-r--r--db/rep/rep_region.c58
-rw-r--r--db/rep/rep_stub.c331
-rw-r--r--db/rep/rep_util.c839
-rw-r--r--db/rpc_client/client.c346
-rw-r--r--db/rpc_client/db_server_clnt.c590
-rw-r--r--db/rpc_client/gen_client.c3879
-rw-r--r--db/rpc_client/gen_client_ret.c514
-rw-r--r--db/rpc_server/c/db_server_proc.c364
-rw-r--r--db/rpc_server/c/db_server_proc.sed189
-rw-r--r--db/rpc_server/c/db_server_svc.c330
-rw-r--r--db/rpc_server/c/db_server_util.c33
-rw-r--r--db/rpc_server/c/db_server_xdr.c440
-rw-r--r--db/rpc_server/c/gen_db_server.c524
-rw-r--r--db/rpc_server/cxx/db_server_cxxproc.cpp363
-rw-r--r--db/rpc_server/cxx/db_server_cxxutil.cpp16
-rw-r--r--db/rpc_server/db_server.x614
-rw-r--r--db/rpc_server/java/DbDispatcher.java310
-rw-r--r--db/rpc_server/java/DbServer.java81
-rw-r--r--db/rpc_server/java/FreeList.java8
-rw-r--r--db/rpc_server/java/LocalIterator.java4
-rw-r--r--db/rpc_server/java/README5
-rw-r--r--db/rpc_server/java/RpcDb.java409
-rw-r--r--db/rpc_server/java/RpcDbEnv.java135
-rw-r--r--db/rpc_server/java/RpcDbTxn.java22
-rw-r--r--db/rpc_server/java/RpcDbc.java133
-rw-r--r--db/rpc_server/java/Timer.java4
-rw-r--r--db/rpc_server/java/gen/DbServerStub.java466
-rw-r--r--db/rpc_server/java/gen/__db_get_bt_minkey_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_bt_minkey_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_encrypt_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_encrypt_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_extentsize_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_extentsize_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_h_ffactor_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_h_ffactor_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_h_nelem_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_h_nelem_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_lorder_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_lorder_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_name_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_name_reply.java38
-rw-r--r--db/rpc_server/java/gen/__db_get_open_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_open_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_pagesize_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_pagesize_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_re_delim_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_re_delim_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_re_len_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_re_len_reply.java35
-rw-r--r--db/rpc_server/java/gen/__db_get_re_pad_msg.java32
-rw-r--r--db/rpc_server/java/gen/__db_get_re_pad_reply.java35
-rw-r--r--db/rpc_server/java/gen/__env_get_cachesize_msg.java32
-rw-r--r--db/rpc_server/java/gen/__env_get_cachesize_reply.java41
-rw-r--r--db/rpc_server/java/gen/__env_get_encrypt_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__env_get_encrypt_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/__env_get_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__env_get_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/__env_get_home_msg.java32
-rw-r--r--db/rpc_server/java/gen/__env_get_home_reply.java35
-rw-r--r--db/rpc_server/java/gen/__env_get_open_flags_msg.java32
-rw-r--r--db/rpc_server/java/gen/__env_get_open_flags_reply.java35
-rw-r--r--db/rpc_server/java/gen/db_server.java122
-rw-r--r--db/rpc_server/rpc.src739
-rw-r--r--db/tcl/docs/db.html403
-rw-r--r--db/tcl/docs/env.html607
-rw-r--r--db/tcl/docs/historic.html3
-rw-r--r--db/tcl/docs/index.html6
-rw-r--r--db/tcl/docs/library.html3
-rw-r--r--db/tcl/docs/lock.html308
-rw-r--r--db/tcl/docs/log.html24
-rw-r--r--db/tcl/docs/mpool.html3
-rw-r--r--db/tcl/docs/rep.html2
-rw-r--r--db/tcl/docs/test.html3
-rw-r--r--db/tcl/docs/txn.html96
-rw-r--r--db/tcl/tcl_compat.c482
-rw-r--r--db/tcl/tcl_db.c1547
-rw-r--r--db/tcl/tcl_db_pkg.c1889
-rw-r--r--db/tcl/tcl_dbcursor.c403
-rw-r--r--db/tcl/tcl_env.c1600
-rw-r--r--db/tcl/tcl_internal.c375
-rw-r--r--db/tcl/tcl_lock.c280
-rw-r--r--db/tcl/tcl_log.c452
-rw-r--r--db/tcl/tcl_mp.c280
-rw-r--r--db/tcl/tcl_rep.c94
-rw-r--r--db/tcl/tcl_txn.c366
-rw-r--r--db/tcl/tcl_util.c11
-rw-r--r--db/test/README148
-rw-r--r--db/test/TESTS1763
-rw-r--r--db/test/archive.tcl62
-rw-r--r--db/test/bigfile001.tcl4
-rw-r--r--db/test/bigfile002.tcl4
-rw-r--r--db/test/byteorder.tcl19
-rw-r--r--db/test/conscript.tcl39
-rw-r--r--db/test/dbm.tcl16
-rw-r--r--db/test/dbscript.tcl30
-rw-r--r--db/test/ddoyscript.tcl31
-rw-r--r--db/test/ddscript.tcl7
-rw-r--r--db/test/dead001.tcl68
-rw-r--r--db/test/dead002.tcl56
-rw-r--r--db/test/dead003.tcl55
-rw-r--r--db/test/dead004.tcl55
-rw-r--r--db/test/dead005.tcl51
-rw-r--r--db/test/dead006.tcl4
-rw-r--r--db/test/dead007.tcl22
-rw-r--r--db/test/env001.tcl37
-rw-r--r--db/test/env002.tcl32
-rw-r--r--db/test/env003.tcl100
-rw-r--r--db/test/env004.tcl16
-rw-r--r--db/test/env005.tcl27
-rw-r--r--db/test/env006.tcl12
-rw-r--r--db/test/env007.tcl507
-rw-r--r--db/test/env008.tcl10
-rw-r--r--db/test/env009.tcl4
-rw-r--r--db/test/env010.tcl7
-rw-r--r--db/test/env011.tcl4
-rw-r--r--db/test/fop001.tcl139
-rw-r--r--db/test/fop002.tcl130
-rw-r--r--db/test/fop003.tcl83
-rw-r--r--db/test/fop004.tcl203
-rw-r--r--db/test/fop005.tcl129
-rw-r--r--db/test/fop006.tcl138
-rw-r--r--db/test/fopscript.tcl64
-rw-r--r--db/test/foputils.tcl365
-rw-r--r--db/test/hsearch.tcl4
-rw-r--r--db/test/include.tcl18
-rw-r--r--db/test/join.tcl28
-rw-r--r--db/test/lock001.tcl100
-rw-r--r--db/test/lock002.tcl36
-rw-r--r--db/test/lock003.tcl89
-rw-r--r--db/test/lock004.tcl4
-rw-r--r--db/test/lock005.tcl6
-rw-r--r--db/test/lock006.tcl187
-rw-r--r--db/test/lockscript.tcl51
-rw-r--r--db/test/log001.tcl15
-rw-r--r--db/test/log002.tcl7
-rw-r--r--db/test/log003.tcl7
-rw-r--r--db/test/log004.tcl4
-rw-r--r--db/test/log005.tcl4
-rw-r--r--db/test/log006.tcl226
-rw-r--r--db/test/logtrack.list55
-rw-r--r--db/test/logtrack.tcl30
-rw-r--r--db/test/mdbscript.tcl51
-rw-r--r--db/test/memp001.tcl6
-rw-r--r--db/test/memp002.tcl6
-rw-r--r--db/test/memp003.tcl9
-rw-r--r--db/test/memp004.tcl83
-rw-r--r--db/test/mpoolscript.tcl11
-rw-r--r--db/test/mutex001.tcl4
-rw-r--r--db/test/mutex002.tcl4
-rw-r--r--db/test/mutex003.tcl10
-rw-r--r--db/test/mutexscript.tcl10
-rw-r--r--db/test/ndbm.tcl17
-rw-r--r--db/test/parallel.tcl139
-rw-r--r--db/test/recd001.tcl108
-rw-r--r--db/test/recd002.tcl17
-rw-r--r--db/test/recd003.tcl24
-rw-r--r--db/test/recd004.tcl17
-rw-r--r--db/test/recd005.tcl29
-rw-r--r--db/test/recd006.tcl14
-rw-r--r--db/test/recd007.tcl407
-rw-r--r--db/test/recd008.tcl10
-rw-r--r--db/test/recd009.tcl13
-rw-r--r--db/test/recd010.tcl72
-rw-r--r--db/test/recd011.tcl65
-rw-r--r--db/test/recd012.tcl151
-rw-r--r--db/test/recd013.tcl121
-rw-r--r--db/test/recd014.tcl114
-rw-r--r--db/test/recd015.tcl135
-rw-r--r--db/test/recd016.tcl308
-rw-r--r--db/test/recd017.tcl12
-rw-r--r--db/test/recd018.tcl20
-rw-r--r--db/test/recd019.tcl4
-rw-r--r--db/test/recd020.tcl180
-rw-r--r--db/test/recd15scr.tcl4
-rw-r--r--db/test/recdscript.tcl4
-rw-r--r--db/test/rep001.tcl123
-rw-r--r--db/test/rep002.tcl144
-rw-r--r--db/test/rep003.tcl85
-rw-r--r--db/test/rep004.tcl36
-rw-r--r--db/test/rep005.tcl278
-rw-r--r--db/test/rep006.tcl132
-rw-r--r--db/test/rep007.tcl303
-rw-r--r--db/test/rep008.tcl114
-rw-r--r--db/test/rep009.tcl165
-rw-r--r--db/test/rep010.tcl183
-rw-r--r--db/test/rep011.tcl168
-rw-r--r--db/test/rep012.tcl168
-rw-r--r--db/test/rep013.tcl229
-rw-r--r--db/test/reputils.tcl291
-rw-r--r--db/test/rpc001.tcl424
-rw-r--r--db/test/rpc002.tcl245
-rw-r--r--db/test/rpc003.tcl120
-rw-r--r--db/test/rpc004.tcl105
-rw-r--r--db/test/rpc005.tcl246
-rw-r--r--db/test/rsrc001.tcl22
-rw-r--r--db/test/rsrc002.tcl11
-rw-r--r--db/test/rsrc003.tcl33
-rw-r--r--db/test/rsrc004.tcl4
-rw-r--r--db/test/scr001/chk.code15
-rw-r--r--db/test/scr002/chk.def2
-rw-r--r--db/test/scr003/chk.define18
-rw-r--r--db/test/scr004/chk.javafiles9
-rw-r--r--db/test/scr005/chk.nl6
-rw-r--r--db/test/scr006/chk.offt4
-rw-r--r--db/test/scr007/chk.proto4
-rw-r--r--db/test/scr008/chk.pubdef137
-rw-r--r--db/test/scr009/chk.srcfiles3
-rw-r--r--db/test/scr010/chk.str4
-rw-r--r--db/test/scr010/spell.ok280
-rw-r--r--db/test/scr011/chk.tags4
-rw-r--r--db/test/scr012/chk.vx_code2
-rw-r--r--db/test/scr013/chk.stats29
-rw-r--r--db/test/scr014/chk.err2
-rw-r--r--db/test/scr015/README2
-rw-r--r--db/test/scr015/TestConstruct01.cpp11
-rw-r--r--db/test/scr015/TestConstruct01.testerr4
-rw-r--r--db/test/scr015/TestExceptInclude.cpp27
-rw-r--r--db/test/scr015/TestGetSetMethods.cpp4
-rw-r--r--db/test/scr015/TestKeyRange.cpp15
-rw-r--r--db/test/scr015/TestLogc.cpp4
-rw-r--r--db/test/scr015/TestSimpleAccess.cpp4
-rw-r--r--db/test/scr015/TestTruncate.cpp4
-rw-r--r--db/test/scr015/chk.cxxtests4
-rw-r--r--db/test/scr015/ignore2
-rw-r--r--db/test/scr015/testall2
-rw-r--r--db/test/scr015/testone3
-rw-r--r--db/test/scr016/CallbackTest.java18
-rw-r--r--db/test/scr016/README2
-rw-r--r--db/test/scr016/TestAppendRecno.java4
-rw-r--r--db/test/scr016/TestAssociate.java10
-rw-r--r--db/test/scr016/TestCallback.java147
-rw-r--r--db/test/scr016/TestCallback.testout13
-rw-r--r--db/test/scr016/TestClosedDb.java10
-rw-r--r--db/test/scr016/TestClosedDb.testout2
-rw-r--r--db/test/scr016/TestConstruct01.java15
-rw-r--r--db/test/scr016/TestConstruct01.testout2
-rw-r--r--db/test/scr016/TestConstruct02.java4
-rw-r--r--db/test/scr016/TestDbtFlags.java36
-rw-r--r--db/test/scr016/TestGetSetMethods.java56
-rw-r--r--db/test/scr016/TestKeyRange.java28
-rw-r--r--db/test/scr016/TestLockVec.java54
-rw-r--r--db/test/scr016/TestLogc.java4
-rw-r--r--db/test/scr016/TestOpenEmpty.java30
-rw-r--r--db/test/scr016/TestOpenEmpty.testerr2
-rw-r--r--db/test/scr016/TestReplication.java34
-rw-r--r--db/test/scr016/TestRpcServer.java4
-rw-r--r--db/test/scr016/TestSameDbt.java4
-rw-r--r--db/test/scr016/TestSimpleAccess.java4
-rw-r--r--db/test/scr016/TestStat.java49
-rw-r--r--db/test/scr016/TestStat.testout7
-rw-r--r--db/test/scr016/TestTruncate.java14
-rw-r--r--db/test/scr016/TestTruncate.testout2
-rw-r--r--db/test/scr016/TestUtil.java18
-rw-r--r--db/test/scr016/TestXAServlet.java10
-rw-r--r--db/test/scr016/chk.javatests4
-rw-r--r--db/test/scr016/ignore11
-rw-r--r--db/test/scr016/testall2
-rw-r--r--db/test/scr016/testone14
-rw-r--r--db/test/scr017/chk.db1855
-rw-r--r--db/test/scr018/chk.comma2
-rw-r--r--db/test/scr019/chk.include2
-rw-r--r--db/test/scr020/chk.inc13
-rw-r--r--db/test/scr021/chk.flags32
-rw-r--r--db/test/scr022/chk.rr5
-rw-r--r--db/test/scr023/chk.q26
-rw-r--r--db/test/scr023/q.c834
-rw-r--r--db/test/scr024/Makefile51
-rw-r--r--db/test/scr024/README16
-rw-r--r--db/test/scr024/chk.bdb73
-rw-r--r--db/test/scr024/coverage/README25
-rw-r--r--db/test/scr024/coverage/build.xml111
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/MarshalledObject.java115
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/NullClassCatalog.java49
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/SerialBindingTest.java298
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/Suite.java34
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/TestClassCatalog.java74
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/test/BindingSpeedTest.java302
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/test/Suite.java36
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/MarshalledObject.java127
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/Suite.java36
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleBindingTest.java210
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleFormatTest.java721
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleOrderingTest.java317
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/README27
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/StoredClassCatalogTest.java197
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/Suite.java33
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java67
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java.original69
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/TupleSerialDbFactoryTest.java202
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-catalog.dbbin0 -> 8192 bytes
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-store.dbbin0 -> 8192 bytes
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/CollectionTest.java2695
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/DbTestUtil.java93
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/ForeignKeyTest.java239
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/JoinTest.java192
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/KeyRangeTest.java260
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/NullTransactionRunner.java33
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/Suite.java40
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestDataBinding.java41
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestEntity.java45
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestEntityBinding.java76
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestEnv.java71
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestKeyAssigner.java45
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestKeyExtractor.java69
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TestStore.java209
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/test/TransactionTest.java613
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/util/test/ExceptionWrapperTest.java100
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/util/test/Suite.java35
-rw-r--r--db/test/scr024/src/com/sleepycat/bdb/util/test/UtfTest.java155
-rw-r--r--db/test/scr025/TestMulti.cpp199
-rw-r--r--db/test/scr025/chk.cxxmulti67
-rw-r--r--db/test/scr025/ignore4
-rw-r--r--db/test/scr026/chk.method90
-rw-r--r--db/test/scr027/chk.javas38
-rw-r--r--db/test/sdb001.tcl45
-rw-r--r--db/test/sdb002.tcl87
-rw-r--r--db/test/sdb003.tcl71
-rw-r--r--db/test/sdb004.tcl90
-rw-r--r--db/test/sdb005.tcl61
-rw-r--r--db/test/sdb006.tcl131
-rw-r--r--db/test/sdb007.tcl202
-rw-r--r--db/test/sdb008.tcl203
-rw-r--r--db/test/sdb009.tcl61
-rw-r--r--db/test/sdb010.tcl144
-rw-r--r--db/test/sdb011.tcl83
-rw-r--r--db/test/sdb012.tcl8
-rw-r--r--db/test/sdbscript.tcl4
-rw-r--r--db/test/sdbtest001.tcl43
-rw-r--r--db/test/sdbtest002.tcl41
-rw-r--r--db/test/sdbutils.tcl50
-rw-r--r--db/test/sec001.tcl10
-rw-r--r--db/test/sec002.tcl57
-rw-r--r--db/test/shelltest.tcl16
-rw-r--r--db/test/si001.tcl101
-rw-r--r--db/test/si002.tcl60
-rw-r--r--db/test/si003.tcl62
-rw-r--r--db/test/si004.tcl71
-rw-r--r--db/test/si005.tcl230
-rw-r--r--db/test/si006.tcl129
-rw-r--r--db/test/sijointest.tcl179
-rw-r--r--db/test/sindex.tcl50
-rw-r--r--db/test/siutils.tcl216
-rw-r--r--db/test/sysscript.tcl9
-rw-r--r--db/test/t106script.tcl332
-rw-r--r--db/test/test.tcl1619
-rw-r--r--db/test/test001.tcl149
-rw-r--r--db/test/test002.tcl61
-rw-r--r--db/test/test003.tcl63
-rw-r--r--db/test/test004.tcl85
-rw-r--r--db/test/test005.tcl19
-rw-r--r--db/test/test006.tcl207
-rw-r--r--db/test/test007.tcl20
-rw-r--r--db/test/test008.tcl104
-rw-r--r--db/test/test009.tcl21
-rw-r--r--db/test/test010.tcl100
-rw-r--r--db/test/test011.tcl213
-rw-r--r--db/test/test012.tcl48
-rw-r--r--db/test/test013.tcl76
-rw-r--r--db/test/test014.tcl77
-rw-r--r--db/test/test015.tcl61
-rw-r--r--db/test/test016.tcl71
-rw-r--r--db/test/test017.tcl163
-rw-r--r--db/test/test018.tcl18
-rw-r--r--db/test/test019.tcl62
-rw-r--r--db/test/test020.tcl43
-rw-r--r--db/test/test021.tcl54
-rw-r--r--db/test/test022.tcl13
-rw-r--r--db/test/test023.tcl35
-rw-r--r--db/test/test024.tcl80
-rw-r--r--db/test/test025.tcl83
-rw-r--r--db/test/test026.tcl81
-rw-r--r--db/test/test027.tcl16
-rw-r--r--db/test/test028.tcl34
-rw-r--r--db/test/test029.tcl85
-rw-r--r--db/test/test030.tcl58
-rw-r--r--db/test/test031.tcl88
-rw-r--r--db/test/test032.tcl104
-rw-r--r--db/test/test033.tcl175
-rw-r--r--db/test/test034.tcl19
-rw-r--r--db/test/test035.tcl20
-rw-r--r--db/test/test036.tcl62
-rw-r--r--db/test/test037.tcl27
-rw-r--r--db/test/test038.tcl119
-rw-r--r--db/test/test039.tcl112
-rw-r--r--db/test/test040.tcl19
-rw-r--r--db/test/test041.tcl14
-rw-r--r--db/test/test042.tcl171
-rw-r--r--db/test/test043.tcl42
-rw-r--r--db/test/test044.tcl61
-rw-r--r--db/test/test045.tcl45
-rw-r--r--db/test/test046.tcl208
-rw-r--r--db/test/test047.tcl158
-rw-r--r--db/test/test048.tcl97
-rw-r--r--db/test/test049.tcl64
-rw-r--r--db/test/test050.tcl60
-rw-r--r--db/test/test051.tcl99
-rw-r--r--db/test/test052.tcl48
-rw-r--r--db/test/test053.tcl59
-rw-r--r--db/test/test054.tcl182
-rw-r--r--db/test/test055.tcl55
-rw-r--r--db/test/test056.tcl40
-rw-r--r--db/test/test057.tcl53
-rw-r--r--db/test/test058.tcl14
-rw-r--r--db/test/test059.tcl46
-rw-r--r--db/test/test060.tcl17
-rw-r--r--db/test/test061.tcl39
-rw-r--r--db/test/test062.tcl80
-rw-r--r--db/test/test063.tcl81
-rw-r--r--db/test/test064.tcl35
-rw-r--r--db/test/test065.tcl165
-rw-r--r--db/test/test066.tcl46
-rw-r--r--db/test/test067.tcl101
-rw-r--r--db/test/test068.tcl95
-rw-r--r--db/test/test069.tcl14
-rw-r--r--db/test/test070.tcl56
-rw-r--r--db/test/test071.tcl13
-rw-r--r--db/test/test072.tcl159
-rw-r--r--db/test/test073.tcl101
-rw-r--r--db/test/test074.tcl110
-rw-r--r--db/test/test075.tcl364
-rw-r--r--db/test/test076.tcl59
-rw-r--r--db/test/test077.tcl53
-rw-r--r--db/test/test078.tcl80
-rw-r--r--db/test/test079.tcl27
-rw-r--r--db/test/test080.tcl130
-rw-r--r--db/test/test081.tcl13
-rw-r--r--db/test/test082.tcl13
-rw-r--r--db/test/test083.tcl58
-rw-r--r--db/test/test084.tcl23
-rw-r--r--db/test/test085.tcl134
-rw-r--r--db/test/test086.tcl54
-rw-r--r--db/test/test087.tcl104
-rw-r--r--db/test/test088.tcl74
-rw-r--r--db/test/test089.tcl146
-rw-r--r--db/test/test090.tcl18
-rw-r--r--db/test/test091.tcl11
-rw-r--r--db/test/test092.tcl59
-rw-r--r--db/test/test093.tcl155
-rw-r--r--db/test/test094.tcl175
-rw-r--r--db/test/test095.tcl306
-rw-r--r--db/test/test096.tcl305
-rw-r--r--db/test/test097.tcl41
-rw-r--r--db/test/test098.tcl4
-rw-r--r--db/test/test099.tcl113
-rw-r--r--db/test/test100.tcl8
-rw-r--r--db/test/test101.tcl12
-rw-r--r--db/test/test102.tcl235
-rw-r--r--db/test/test103.tcl223
-rw-r--r--db/test/test106.tcl108
-rw-r--r--db/test/testparams.tcl241
-rw-r--r--db/test/testutils.tcl1202
-rw-r--r--db/test/txn001.tcl16
-rw-r--r--db/test/txn002.tcl12
-rw-r--r--db/test/txn003.tcl26
-rw-r--r--db/test/txn004.tcl8
-rw-r--r--db/test/txn005.tcl4
-rw-r--r--db/test/txn006.tcl4
-rw-r--r--db/test/txn007.tcl4
-rw-r--r--db/test/txn008.tcl8
-rw-r--r--db/test/txn009.tcl8
-rw-r--r--db/test/txn010.tcl144
-rw-r--r--db/test/txn011.tcl209
-rw-r--r--db/test/txnscript.tcl4
-rw-r--r--db/test/update.tcl5
-rw-r--r--db/test/upgrade.tcl613
-rw-r--r--db/test/wrap.tcl27
-rw-r--r--db/txn/txn.c592
-rw-r--r--db/txn/txn.src86
-rw-r--r--db/txn/txn_auto.c1582
-rw-r--r--db/txn/txn_method.c52
-rw-r--r--db/txn/txn_rec.c326
-rw-r--r--db/txn/txn_recover.c222
-rw-r--r--db/txn/txn_region.c408
-rw-r--r--db/txn/txn_stat.c99
-rw-r--r--db/txn/txn_util.c110
-rw-r--r--db/xa/xa.c359
-rw-r--r--db/xa/xa_db.c53
-rw-r--r--db/xa/xa_map.c30
2539 files changed, 363683 insertions, 113842 deletions
diff --git a/db/LICENSE b/db/LICENSE
index 32cc483d6..fc6b67058 100644
--- a/db/LICENSE
+++ b/db/LICENSE
@@ -1,5 +1,5 @@
/*-
- * $Id: LICENSE,v 11.7 2000/11/01 20:35:49 bostic Exp $
+ * $Id: LICENSE,v 11.10 2003/01/08 04:00:54 bostic Exp $
*/
The following is the license that applies to this copy of the Berkeley DB
@@ -10,7 +10,7 @@ Web at http://www.sleepycat.com.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/*
- * Copyright (c) 1990-2000
+ * Copyright (c) 1990-2003
* Sleepycat Software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/db/README b/db/README
index f9892d5cb..1d6432569 100644
--- a/db/README
+++ b/db/README
@@ -1,5 +1,5 @@
-Sleepycat Software: Berkeley DB 3.2.9: (January 24, 2001)
+Sleepycat Software: Berkeley DB 4.2.52: (December 3, 2003)
-This is version 3.2.9 of Berkeley DB from Sleepycat Software. To view
+This is version 4.2.52 of Berkeley DB from Sleepycat Software. To view
the release and installation documentation, load the distribution file
docs/index.html into your web browser.
diff --git a/db/btree/bt_compare.c b/db/btree/bt_compare.c
index 91481c313..a329d8044 100644
--- a/db/btree/bt_compare.c
+++ b/db/btree/bt_compare.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_compare.c,v 11.12 2000/10/26 19:00:28 krinsky Exp $";
+static const char revid[] = "$Id: bt_compare.c,v 11.18 2003/01/08 04:00:56 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -51,8 +51,8 @@ static const char revid[] = "$Id: bt_compare.c,v 11.12 2000/10/26 19:00:28 krins
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
/*
* __bam_cmp --
@@ -92,7 +92,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
case P_LBTREE:
case P_LDUP:
case P_LRECNO:
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW)
bo = (BOVERFLOW *)bk;
else {
@@ -125,7 +125,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
return (0);
}
- bi = GET_BINTERNAL(h, indx);
+ bi = GET_BINTERNAL(dbp, h, indx);
if (B_TYPE(bi->type) == B_OVERFLOW)
bo = (BOVERFLOW *)(bi->data);
else {
@@ -136,7 +136,7 @@ __bam_cmp(dbp, dbt, h, indx, func, cmpp)
}
break;
default:
- return (__db_pgfmt(dbp, PGNO(h)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(h)));
}
/*
diff --git a/db/btree/bt_conv.c b/db/btree/bt_conv.c
index fd30f375f..fd80d8a4c 100644
--- a/db/btree/bt_conv.c
+++ b/db/btree/bt_conv.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_conv.c,v 11.6 2000/03/31 00:30:26 ubell Exp $";
+static const char revid[] = "$Id: bt_conv.c,v 11.14 2003/01/08 04:00:56 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,20 +16,21 @@ static const char revid[] = "$Id: bt_conv.c,v 11.6 2000/03/31 00:30:26 ubell Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/btree.h"
/*
* __bam_pgin --
* Convert host-specific page layout from the host-independent format
* stored on disk.
*
- * PUBLIC: int __bam_pgin __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ * PUBLIC: int __bam_pgin __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
*/
int
-__bam_pgin(dbenv, pg, pp, cookie)
+__bam_pgin(dbenv, dummydbp, pg, pp, cookie)
DB_ENV *dbenv;
+ DB *dummydbp;
db_pgno_t pg;
void *pp;
DBT *cookie;
@@ -38,12 +39,12 @@ __bam_pgin(dbenv, pg, pp, cookie)
PAGE *h;
pginfo = (DB_PGINFO *)cookie->data;
- if (!pginfo->needswap)
+ if (!F_ISSET(pginfo, DB_AM_SWAP))
return (0);
h = pp;
return (TYPE(h) == P_BTREEMETA ? __bam_mswap(pp) :
- __db_byteswap(dbenv, pg, pp, pginfo->db_pagesize, 1));
+ __db_byteswap(dbenv, dummydbp, pg, pp, pginfo->db_pagesize, 1));
}
/*
@@ -51,11 +52,12 @@ __bam_pgin(dbenv, pg, pp, cookie)
* Convert host-specific page layout to the host-independent format
* stored on disk.
*
- * PUBLIC: int __bam_pgout __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ * PUBLIC: int __bam_pgout __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
*/
int
-__bam_pgout(dbenv, pg, pp, cookie)
+__bam_pgout(dbenv, dummydbp, pg, pp, cookie)
DB_ENV *dbenv;
+ DB *dummydbp;
db_pgno_t pg;
void *pp;
DBT *cookie;
@@ -64,12 +66,12 @@ __bam_pgout(dbenv, pg, pp, cookie)
PAGE *h;
pginfo = (DB_PGINFO *)cookie->data;
- if (!pginfo->needswap)
+ if (!F_ISSET(pginfo, DB_AM_SWAP))
return (0);
h = pp;
return (TYPE(h) == P_BTREEMETA ? __bam_mswap(pp) :
- __db_byteswap(dbenv, pg, pp, pginfo->db_pagesize, 0));
+ __db_byteswap(dbenv, dummydbp, pg, pp, pginfo->db_pagesize, 0));
}
/*
@@ -93,6 +95,8 @@ __bam_mswap(pg)
SWAP32(p); /* re_len */
SWAP32(p); /* re_pad */
SWAP32(p); /* root */
+ p += 92 * sizeof(u_int32_t); /* unused */
+ SWAP32(p); /* crypto_magic */
return (0);
}
diff --git a/db/btree/bt_curadj.c b/db/btree/bt_curadj.c
index 011acd2f4..3da200c27 100644
--- a/db/btree/bt_curadj.c
+++ b/db/btree/bt_curadj.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_curadj.c,v 11.20 2001/01/17 16:15:49 bostic Exp $";
+static const char revid[] = "$Id: bt_curadj.c,v 11.34 2003/07/09 02:32:24 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,9 +16,8 @@ static const char revid[] = "$Id: bt_curadj.c,v 11.20 2001/01/17 16:15:49 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "txn.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
static int __bam_opd_cursor __P((DB *, DBC *, db_pgno_t, u_int32_t, u_int32_t));
@@ -99,6 +98,19 @@ __bam_ca_delete(dbp, pgno, indx, delete)
dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
cp = (BTREE_CURSOR *)dbc->internal;
if (cp->pgno == pgno && cp->indx == indx) {
+ /*
+ * [#8032] This assert is checking
+ * for possible race conditions where we
+ * hold a cursor position without a lock.
+ * Unfortunately, there are paths in the
+ * Btree code that do not satisfy these
+ * conditions. None of them are known to
+ * be a problem, but this assert should
+ * be re-activated when the Btree stack
+ * code is re-written.
+ DB_ASSERT(!STD_LOCKING(dbc) ||
+ cp->lock_mode != DB_LOCK_NG);
+ */
if (delete)
F_SET(cp, C_DELETED);
else
@@ -193,7 +205,10 @@ __bam_ca_di(my_dbc, pgno, indx, adjust)
if (cp->pgno == pgno && cp->indx >= indx) {
/* Cursor indices should never be negative. */
DB_ASSERT(cp->indx != 0 || adjust > 0);
-
+ /* [#8032]
+ DB_ASSERT(!STD_LOCKING(dbc) ||
+ cp->lock_mode != DB_LOCK_NG);
+ */
cp->indx += adjust;
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
@@ -203,10 +218,9 @@ __bam_ca_di(my_dbc, pgno, indx, adjust)
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- if (found != 0 && DB_LOGGING(my_dbc)) {
- if ((ret = __bam_curadj_log(dbenv,
- my_dbc->txn, &lsn, 0, dbp->log_fileid,
- DB_CA_DI, pgno, 0, 0, adjust, indx, 0)) != 0)
+ if (found != 0 && DBC_LOGGING(my_dbc)) {
+ if ((ret = __bam_curadj_log(dbp, my_dbc->txn,
+ &lsn, 0, DB_CA_DI, pgno, 0, 0, adjust, indx, 0)) != 0)
return (ret);
}
@@ -234,8 +248,13 @@ __bam_opd_cursor(dbp, dbc, first, tpgno, ti)
* Allocate a new cursor and create the stack. If duplicates
* are sorted, we've just created an off-page duplicate Btree.
* If duplicates aren't sorted, we've just created a Recno tree.
+ *
+ * Note that in order to get here at all, there shouldn't be
+ * an old off-page dup cursor--to augment the checking db_c_newopd
+ * will do, assert this.
*/
- if ((ret = __db_c_newopd(dbc, tpgno, &dbc_nopd)) != 0)
+ DB_ASSERT(orig_cp->opd == NULL);
+ if ((ret = __db_c_newopd(dbc, tpgno, orig_cp->opd, &dbc_nopd)) != 0)
return (ret);
cp = (BTREE_CURSOR *)dbc_nopd->internal;
@@ -316,22 +335,25 @@ loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
continue;
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ /* [#8032]
+ DB_ASSERT(!STD_LOCKING(dbc) ||
+ orig_cp->lock_mode != DB_LOCK_NG);
+ */
if ((ret = __bam_opd_cursor(dbp,
dbc, first, tpgno, ti)) !=0)
return (ret);
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
- /* We released the MUTEX to get a cursor, start over. */
+ /* We released the mutex to get a cursor, start over. */
goto loop;
}
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- if (found != 0 && DB_LOGGING(my_dbc)) {
- if ((ret = __bam_curadj_log(dbenv,
- my_dbc->txn, &lsn, 0, dbp->log_fileid,
- DB_CA_DUP, fpgno, tpgno, 0, first, fi, ti)) != 0)
+ if (found != 0 && DBC_LOGGING(my_dbc)) {
+ if ((ret = __bam_curadj_log(dbp, my_dbc->txn,
+ &lsn, 0, DB_CA_DUP, fpgno, tpgno, 0, first, fi, ti)) != 0)
return (ret);
}
return (0);
@@ -372,18 +394,26 @@ loop: MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
orig_cp = (BTREE_CURSOR *)dbc->internal;
+ /*
+ * A note on the orig_cp->opd != NULL requirement here:
+ * it's possible that there's a cursor that refers to
+ * the same duplicate set, but which has no opd cursor,
+ * because it refers to a different item and we took
+ * care of it while processing a previous record.
+ */
if (orig_cp->pgno != fpgno ||
orig_cp->indx != first ||
+ orig_cp->opd == NULL ||
((BTREE_CURSOR *)orig_cp->opd->internal)->indx
!= ti)
continue;
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
- if ((ret = orig_cp->opd->c_close(orig_cp->opd)) != 0)
+ if ((ret = __db_c_close(orig_cp->opd)) != 0)
return (ret);
orig_cp->opd = NULL;
orig_cp->indx = fi;
/*
- * We released the MUTEX to free a cursor,
+ * We released the mutex to free a cursor,
* start over.
*/
goto loop;
@@ -432,6 +462,10 @@ __bam_ca_rsplit(my_dbc, fpgno, tpgno)
continue;
if (dbc->internal->pgno == fpgno) {
dbc->internal->pgno = tpgno;
+ /* [#8032]
+ DB_ASSERT(!STD_LOCKING(dbc) ||
+ dbc->internal->lock_mode != DB_LOCK_NG);
+ */
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
}
@@ -440,10 +474,9 @@ __bam_ca_rsplit(my_dbc, fpgno, tpgno)
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- if (found != 0 && DB_LOGGING(my_dbc)) {
- if ((ret = __bam_curadj_log(dbenv,
- my_dbc->txn, &lsn, 0, dbp->log_fileid,
- DB_CA_RSPLIT, fpgno, tpgno, 0, 0, 0, 0)) != 0)
+ if (found != 0 && DBC_LOGGING(my_dbc)) {
+ if ((ret = __bam_curadj_log(dbp, my_dbc->txn,
+ &lsn, 0, DB_CA_RSPLIT, fpgno, tpgno, 0, 0, 0, 0)) != 0)
return (ret);
}
return (0);
@@ -497,6 +530,10 @@ __bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
continue;
cp = dbc->internal;
if (cp->pgno == ppgno) {
+ /* [#8032]
+ DB_ASSERT(!STD_LOCKING(dbc) ||
+ cp->lock_mode != DB_LOCK_NG);
+ */
if (my_txn != NULL && dbc->txn != my_txn)
found = 1;
if (cp->indx < split_indx) {
@@ -512,9 +549,9 @@ __bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_indx, cleft)
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- if (found != 0 && DB_LOGGING(my_dbc)) {
- if ((ret = __bam_curadj_log(dbenv, my_dbc->txn,
- &lsn, 0, dbp->log_fileid, DB_CA_SPLIT, ppgno, rpgno,
+ if (found != 0 && DBC_LOGGING(my_dbc)) {
+ if ((ret = __bam_curadj_log(dbp,
+ my_dbc->txn, &lsn, 0, DB_CA_SPLIT, ppgno, rpgno,
cleft ? lpgno : PGNO_INVALID, 0, split_indx, 0)) != 0)
return (ret);
}
diff --git a/db/btree/bt_cursor.c b/db/btree/bt_cursor.c
index 84ab7c807..067da53be 100644
--- a/db/btree/bt_cursor.c
+++ b/db/btree/bt_cursor.c
@@ -1,31 +1,30 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_cursor.c,v 11.88 2001/01/11 18:19:49 bostic Exp $";
+static const char revid[] = "$Id: bt_cursor.c,v 11.169 2003/11/19 18:41:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <stdlib.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "lock.h"
-#include "qam.h"
-#include "common_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+static int __bam_bulk __P((DBC *, DBT *, u_int32_t));
static int __bam_c_close __P((DBC *, db_pgno_t, int *));
static int __bam_c_del __P((DBC *));
static int __bam_c_destroy __P((DBC *));
@@ -33,15 +32,16 @@ static int __bam_c_first __P((DBC *));
static int __bam_c_get __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
static int __bam_c_getstack __P((DBC *));
static int __bam_c_last __P((DBC *));
-static int __bam_c_next __P((DBC *, int));
+static int __bam_c_next __P((DBC *, int, int));
static int __bam_c_physdel __P((DBC *));
static int __bam_c_prev __P((DBC *));
static int __bam_c_put __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
-static void __bam_c_reset __P((BTREE_CURSOR *));
-static int __bam_c_search __P((DBC *, const DBT *, u_int32_t, int *));
+static int __bam_c_search __P((DBC *,
+ db_pgno_t, const DBT *, u_int32_t, int *));
static int __bam_c_writelock __P((DBC *));
-static int __bam_getboth_finddatum __P((DBC *, DBT *));
+static int __bam_getboth_finddatum __P((DBC *, DBT *, u_int32_t));
static int __bam_getbothc __P((DBC *, DBT *));
+static int __bam_get_prev __P((DBC *));
static int __bam_isopd __P((DBC *, db_pgno_t *));
/*
@@ -53,48 +53,64 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
* don't -- we don't duplicate locks when we duplicate cursors if we are
* running in a transaction environment as there's no point if locks are
* never discarded. This means that the cursor may or may not hold a lock.
+ * In the case where we are decending the tree we always want to
+ * unlock the held interior page so we use ACQUIRE_COUPLE.
*/
#undef ACQUIRE
-#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pagep, ret) {\
+#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pagep, ret) { \
+ DB_MPOOLFILE *__mpf = (dbc)->dbp->mpf; \
if ((pagep) != NULL) { \
- ret = memp_fput((dbc)->dbp->mpf, pagep, 0); \
+ ret = __memp_fput(__mpf, pagep, 0); \
+ pagep = NULL; \
+ } else \
+ ret = 0; \
+ if ((ret) == 0 && STD_LOCKING(dbc)) \
+ ret = __db_lget(dbc, LCK_COUPLE, lpgno, mode, 0, &(lock));\
+ if ((ret) == 0) \
+ ret = __memp_fget(__mpf, &(fpgno), 0, &(pagep)); \
+}
+
+#undef ACQUIRE_COUPLE
+#define ACQUIRE_COUPLE(dbc, mode, lpgno, lock, fpgno, pagep, ret) { \
+ DB_MPOOLFILE *__mpf = (dbc)->dbp->mpf; \
+ if ((pagep) != NULL) { \
+ ret = __memp_fput(__mpf, pagep, 0); \
pagep = NULL; \
} else \
ret = 0; \
if ((ret) == 0 && STD_LOCKING(dbc)) \
ret = __db_lget(dbc, \
- (lock).off == LOCK_INVALID ? 0 : LCK_COUPLE, \
- lpgno, mode, 0, &lock); \
- else \
- (lock).off = LOCK_INVALID; \
+ LCK_COUPLE_ALWAYS, lpgno, mode, 0, &(lock)); \
if ((ret) == 0) \
- ret = memp_fget((dbc)->dbp->mpf, &(fpgno), 0, &(pagep));\
+ ret = __memp_fget(__mpf, &(fpgno), 0, &(pagep)); \
}
/* Acquire a new page/lock for a cursor. */
#undef ACQUIRE_CUR
-#define ACQUIRE_CUR(dbc, mode, ret) { \
+#define ACQUIRE_CUR(dbc, mode, p, ret) { \
BTREE_CURSOR *__cp = (BTREE_CURSOR *)(dbc)->internal; \
- ACQUIRE(dbc, mode, \
- __cp->pgno, __cp->lock, __cp->pgno, __cp->page, ret); \
- if ((ret) == 0) \
+ if (p != __cp->pgno) \
+ __cp->pgno = PGNO_INVALID; \
+ ACQUIRE(dbc, mode, p, __cp->lock, p, __cp->page, ret); \
+ if ((ret) == 0) { \
+ __cp->pgno = p; \
__cp->lock_mode = (mode); \
+ } \
}
/*
- * Acquire a new page/lock for a cursor, and move the cursor on success.
- * The reason that this is a separate macro is because we don't want to
- * set the pgno/indx fields in the cursor until we actually have the lock,
- * otherwise the cursor adjust routines will adjust the cursor even though
- * we're not really on the page.
+ * Acquire a new page/lock for a cursor and release the previous.
+ * This is typically used when decending a tree and we do not
+ * want to hold the interior nodes locked.
*/
-#undef ACQUIRE_CUR_SET
-#define ACQUIRE_CUR_SET(dbc, mode, p, ret) { \
+#undef ACQUIRE_CUR_COUPLE
+#define ACQUIRE_CUR_COUPLE(dbc, mode, p, ret) { \
BTREE_CURSOR *__cp = (BTREE_CURSOR *)(dbc)->internal; \
- ACQUIRE(dbc, mode, p, __cp->lock, p, __cp->page, ret); \
+ if (p != __cp->pgno) \
+ __cp->pgno = PGNO_INVALID; \
+ ACQUIRE_COUPLE(dbc, mode, p, __cp->lock, p, __cp->page, ret); \
if ((ret) == 0) { \
- __cp->pgno = p; \
- __cp->indx = 0; \
+ __cp->pgno = p; \
__cp->lock_mode = (mode); \
} \
}
@@ -112,46 +128,37 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
if (STD_LOCKING(dbc) && \
__cp->lock_mode != DB_LOCK_WRITE && \
((ret) = __db_lget(dbc, \
- __cp->lock.off == LOCK_INVALID ? 0 : LCK_COUPLE, \
+ LOCK_ISSET(__cp->lock) ? LCK_COUPLE : 0, \
__cp->pgno, DB_LOCK_WRITE, 0, &__cp->lock)) == 0) \
__cp->lock_mode = DB_LOCK_WRITE; \
}
-/* Discard the current page/lock. */
-#undef DISCARD
-#define DISCARD(dbc, ldiscard, lock, pagep, ret) { \
- int __t_ret; \
- if ((pagep) != NULL) { \
- ret = memp_fput((dbc)->dbp->mpf, pagep, 0); \
- pagep = NULL; \
- } else \
- ret = 0; \
- if ((lock).off != LOCK_INVALID) { \
- __t_ret = ldiscard ? \
- __LPUT((dbc), lock): __TLPUT((dbc), lock); \
- if (__t_ret != 0 && (ret) == 0) \
- ret = __t_ret; \
- (lock).off = LOCK_INVALID; \
- } \
-}
-
/* Discard the current page/lock for a cursor. */
#undef DISCARD_CUR
#define DISCARD_CUR(dbc, ret) { \
BTREE_CURSOR *__cp = (BTREE_CURSOR *)(dbc)->internal; \
- DISCARD(dbc, 0, __cp->lock, __cp->page, ret); \
- if ((ret) == 0) \
+ DB_MPOOLFILE *__mpf = (dbc)->dbp->mpf; \
+ int __t_ret; \
+ if ((__cp->page) != NULL) { \
+ ret = __memp_fput(__mpf, __cp->page, 0); \
+ __cp->page = NULL; \
+ } else \
+ ret = 0; \
+ __t_ret = __TLPUT((dbc), __cp->lock); \
+ if (__t_ret != 0 && (ret) == 0) \
+ ret = __t_ret; \
+ if ((ret) == 0 && !LOCK_ISSET(__cp->lock)) \
__cp->lock_mode = DB_LOCK_NG; \
}
/* If on-page item is a deleted record. */
#undef IS_DELETED
-#define IS_DELETED(page, indx) \
- B_DISSET(GET_BKEYDATA(page, \
+#define IS_DELETED(dbp, page, indx) \
+ B_DISSET(GET_BKEYDATA(dbp, page, \
(indx) + (TYPE(page) == P_LBTREE ? O_INDX : 0))->type)
#undef IS_CUR_DELETED
#define IS_CUR_DELETED(dbc) \
- IS_DELETED((dbc)->internal->page, (dbc)->internal->indx)
+ IS_DELETED((dbc)->dbp, (dbc)->internal->page, (dbc)->internal->indx)
/*
* Test to see if two cursors could point to duplicates of the same key.
@@ -163,8 +170,8 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
*/
#undef IS_DUPLICATE
#define IS_DUPLICATE(dbc, i1, i2) \
- (((PAGE *)(dbc)->internal->page)->inp[i1] == \
- ((PAGE *)(dbc)->internal->page)->inp[i2])
+ (P_INP((dbc)->dbp,((PAGE *)(dbc)->internal->page))[i1] == \
+ P_INP((dbc)->dbp,((PAGE *)(dbc)->internal->page))[i2])
#undef IS_CUR_DUPLICATE
#define IS_CUR_DUPLICATE(dbc, orig_pgno, orig_indx) \
(F_ISSET(dbc, DBC_OPD) || \
@@ -172,22 +179,6 @@ static int __bam_isopd __P((DBC *, db_pgno_t *));
IS_DUPLICATE(dbc, (dbc)->internal->indx, orig_indx)))
/*
- * __bam_c_reset --
- * Initialize internal cursor structure.
- */
-static void
-__bam_c_reset(cp)
- BTREE_CURSOR *cp;
-{
- cp->csp = cp->sp;
- cp->lock.off = LOCK_INVALID;
- cp->lock_mode = DB_LOCK_NG;
- cp->recno = RECNO_OOB;
- cp->order = INVALID_ORDER;
- cp->flags = 0;
-}
-
-/*
* __bam_c_init --
* Initialize the access private portion of a cursor
*
@@ -198,35 +189,26 @@ __bam_c_init(dbc, dbtype)
DBC *dbc;
DBTYPE dbtype;
{
- BTREE *t;
- BTREE_CURSOR *cp;
- DB *dbp;
+ DB_ENV *dbenv;
int ret;
- u_int32_t minkey;
- dbp = dbc->dbp;
+ dbenv = dbc->dbp->dbenv;
/* Allocate/initialize the internal structure. */
- if (dbc->internal == NULL) {
- if ((ret = __os_malloc(dbp->dbenv,
- sizeof(BTREE_CURSOR), NULL, &cp)) != 0)
- return (ret);
- dbc->internal = (DBC_INTERNAL *)cp;
-
- cp->sp = cp->csp = cp->stack;
- cp->esp = cp->stack + sizeof(cp->stack) / sizeof(cp->stack[0]);
- } else
- cp = (BTREE_CURSOR *)dbc->internal;
- __bam_c_reset(cp);
+ if (dbc->internal == NULL && (ret =
+ __os_malloc(dbenv, sizeof(BTREE_CURSOR), &dbc->internal)) != 0)
+ return (ret);
/* Initialize methods. */
dbc->c_close = __db_c_close;
- dbc->c_count = __db_c_count;
- dbc->c_del = __db_c_del;
- dbc->c_dup = __db_c_dup;
- dbc->c_get = __db_c_get;
- dbc->c_put = __db_c_put;
+ dbc->c_count = __db_c_count_pp;
+ dbc->c_del = __db_c_del_pp;
+ dbc->c_dup = __db_c_dup_pp;
+ dbc->c_get = __db_c_get_pp;
+ dbc->c_pget = __db_c_pget_pp;
+ dbc->c_put = __db_c_put_pp;
if (dbtype == DB_BTREE) {
+ dbc->c_am_bulk = __bam_bulk;
dbc->c_am_close = __bam_c_close;
dbc->c_am_del = __bam_c_del;
dbc->c_am_destroy = __bam_c_destroy;
@@ -234,6 +216,7 @@ __bam_c_init(dbc, dbtype)
dbc->c_am_put = __bam_c_put;
dbc->c_am_writelock = __bam_c_writelock;
} else {
+ dbc->c_am_bulk = __bam_bulk;
dbc->c_am_close = __bam_c_close;
dbc->c_am_del = __ram_c_del;
dbc->c_am_destroy = __bam_c_destroy;
@@ -242,18 +225,6 @@ __bam_c_init(dbc, dbtype)
dbc->c_am_writelock = __bam_c_writelock;
}
- /*
- * The btree leaf page data structures require that two key/data pairs
- * (or four items) fit on a page, but other than that there's no fixed
- * requirement. The btree off-page duplicates only require two items,
- * to be exact, but requiring four for them as well seems reasonable.
- *
- * Recno uses the btree bt_ovflsize value -- it's close enough.
- */
- t = dbp->bt_internal;
- minkey = F_ISSET(dbc, DBC_OPD) ? 2 : t->bt_minkey;
- cp->ovflsize = B_MINKEY_TO_OVFLSIZE(minkey, dbp->pgsize);
-
return (0);
}
@@ -267,12 +238,13 @@ int
__bam_c_refresh(dbc)
DBC *dbc;
{
+ BTREE *t;
BTREE_CURSOR *cp;
DB *dbp;
dbp = dbc->dbp;
+ t = dbp->bt_internal;
cp = (BTREE_CURSOR *)dbc->internal;
- __bam_c_reset(cp);
/*
* If our caller set the root page number, it's because the root was
@@ -280,11 +252,32 @@ __bam_c_refresh(dbc)
* pull it out of our internal information.
*/
if (cp->root == PGNO_INVALID)
- cp->root = ((BTREE *)dbp->bt_internal)->bt_root;
+ cp->root = t->bt_root;
+
+ LOCK_INIT(cp->lock);
+ cp->lock_mode = DB_LOCK_NG;
+
+ cp->sp = cp->csp = cp->stack;
+ cp->esp = cp->stack + sizeof(cp->stack) / sizeof(cp->stack[0]);
+
+ /*
+ * The btree leaf page data structures require that two key/data pairs
+ * (or four items) fit on a page, but other than that there's no fixed
+ * requirement. The btree off-page duplicates only require two items,
+ * to be exact, but requiring four for them as well seems reasonable.
+ *
+ * Recno uses the btree bt_ovflsize value -- it's close enough.
+ */
+ cp->ovflsize = B_MINKEY_TO_OVFLSIZE(
+ dbp, F_ISSET(dbc, DBC_OPD) ? 2 : t->bt_minkey, dbp->pgsize);
+
+ cp->recno = RECNO_OOB;
+ cp->order = INVALID_ORDER;
+ cp->flags = 0;
/* Initialize for record numbers. */
if (F_ISSET(dbc, DBC_OPD) ||
- dbc->dbtype == DB_RECNO || F_ISSET(dbp, DB_BT_RECNUM)) {
+ dbc->dbtype == DB_RECNO || F_ISSET(dbp, DB_AM_RECNUM)) {
F_SET(cp, C_RECNUM);
/*
@@ -293,7 +286,7 @@ __bam_c_refresh(dbc)
* mutable record numbers.
*/
if ((F_ISSET(dbc, DBC_OPD) && dbc->dbtype == DB_RECNO) ||
- F_ISSET(dbp, DB_BT_RECNUM | DB_RE_RENUMBER))
+ F_ISSET(dbp, DB_AM_RECNUM | DB_AM_RENUMBER))
F_SET(cp, C_RENUMBER);
}
@@ -313,11 +306,12 @@ __bam_c_close(dbc, root_pgno, rmroot)
BTREE_CURSOR *cp, *cp_opd, *cp_c;
DB *dbp;
DBC *dbc_opd, *dbc_c;
+ DB_MPOOLFILE *mpf;
PAGE *h;
- u_int32_t num;
int cdb_lock, ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
cp_opd = (dbc_opd = cp->opd) == NULL ?
NULL : (BTREE_CURSOR *)dbc_opd->internal;
@@ -394,6 +388,9 @@ __bam_c_close(dbc, root_pgno, rmroot)
if (__ram_ca_delete(dbp, cp->root) == 0)
goto lock;
goto done;
+ case DB_HASH:
+ case DB_QUEUE:
+ case DB_UNKNOWN:
default:
return (__db_unknown_type(dbp->dbenv,
"__bam_c_close", dbc->dbtype));
@@ -408,10 +405,10 @@ __bam_c_close(dbc, root_pgno, rmroot)
* We will not have been provided a root page number. Acquire
* one from the primary database.
*/
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &h)) != 0)
goto err;
- root_pgno = GET_BOVERFLOW(h, cp->indx + O_INDX)->pgno;
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ root_pgno = GET_BOVERFLOW(dbp, h, cp->indx + O_INDX)->pgno;
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
dbc_c = dbc_opd;
@@ -425,6 +422,9 @@ __bam_c_close(dbc, root_pgno, rmroot)
if (__ram_ca_delete(dbp, cp_opd->root) == 0)
goto lock;
goto done;
+ case DB_HASH:
+ case DB_QUEUE:
+ case DB_UNKNOWN:
default:
return (__db_unknown_type(dbp->dbenv,
"__bam_c_close", dbc->dbtype));
@@ -438,35 +438,18 @@ lock: cp_c = (BTREE_CURSOR *)dbc_c->internal;
* If this is CDB, upgrade the lock if necessary. While we acquired
* the write lock to logically delete the record, we released it when
* we returned from that call, and so may not be holding a write lock
- * at the moment. NB: to get here in CDB we must either be holding a
- * write lock or be the only cursor that is permitted to acquire write
- * locks. The reason is that there can never be more than a single CDB
- * write cursor (that cursor cannot be dup'd), and so that cursor must
- * be closed and the item therefore deleted before any other cursor
- * could acquire a reference to this item.
- *
- * Note that dbc may be an off-page dup cursor; this is the sole
- * instance in which an OPD cursor does any locking, but it's necessary
- * because we may be closed by ourselves without a parent cursor
- * handy, and we have to do a lock upgrade on behalf of somebody.
- * If this is the case, the OPD has been given the parent's locking
- * info in __db_c_get--the OPD is also a WRITEDUP.
+ * at the moment.
*/
if (CDB_LOCKING(dbp->dbenv)) {
- DB_ASSERT(!F_ISSET(dbc, DBC_OPD) || F_ISSET(dbc, DBC_WRITEDUP));
- if (!F_ISSET(dbc, DBC_WRITER)) {
- if ((ret =
- lock_get(dbp->dbenv, dbc->locker, DB_LOCK_UPGRADE,
- &dbc->lock_dbt, DB_LOCK_WRITE, &dbc->mylock)) != 0)
+ if (F_ISSET(dbc, DBC_WRITECURSOR)) {
+ if ((ret = __lock_get(dbp->dbenv,
+ dbc->locker, DB_LOCK_UPGRADE, &dbc->lock_dbt,
+ DB_LOCK_WRITE, &dbc->mylock)) != 0)
goto err;
cdb_lock = 1;
}
-
- cp_c->lock.off = LOCK_INVALID;
- if ((ret =
- memp_fget(dbp->mpf, &cp_c->pgno, 0, &cp_c->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp_c->pgno, 0, &cp_c->page)) != 0)
goto err;
-
goto delete;
}
@@ -480,9 +463,7 @@ lock: cp_c = (BTREE_CURSOR *)dbc_c->internal;
* is responsible for acquiring any necessary locks before calling us.
*/
if (F_ISSET(dbc, DBC_OPD)) {
- cp_c->lock.off = LOCK_INVALID;
- if ((ret =
- memp_fget(dbp->mpf, &cp_c->pgno, 0, &cp_c->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp_c->pgno, 0, &cp_c->page)) != 0)
goto err;
goto delete;
}
@@ -542,13 +523,13 @@ delete: /*
* in that case. So, if the off-page duplicate tree is empty at this
* point, we want to remove it.
*/
- if ((ret = memp_fget(dbp->mpf, &root_pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &root_pgno, 0, &h)) != 0)
goto err;
- if ((num = NUM_ENT(h)) == 0) {
+ if (NUM_ENT(h) == 0) {
if ((ret = __db_free(dbc, h)) != 0)
goto err;
} else {
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
goto done;
}
@@ -566,8 +547,7 @@ delete: /*
* the primary page.
*/
if (dbc_opd != NULL) {
- cp->lock.off = LOCK_INVALID;
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
goto err;
if ((ret = __bam_c_physdel(dbc)) != 0)
goto err;
@@ -604,7 +584,7 @@ __bam_c_destroy(dbc)
DBC *dbc;
{
/* Discard the structures. */
- __os_free(dbc->internal, sizeof(BTREE_CURSOR));
+ __os_free(dbc->dbp->dbenv, dbc->internal);
return (0);
}
@@ -622,22 +602,25 @@ __bam_c_count(dbc, recnop)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
db_indx_t indx, top;
db_recno_t recno;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
* Called with the top-level cursor that may reference an off-page
- * duplicates page. If it's a set of on-page duplicates, get the
- * page and count. Otherwise, get the root page of the off-page
- * duplicate tree, and use the count. We don't have to acquire any
- * new locks, we have to have a read lock to even get here.
+ * duplicates tree. We don't have to acquire any new locks, we have
+ * to have a read lock to even get here.
*/
if (cp->opd == NULL) {
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ /*
+ * On-page duplicates, get the page and count.
+ */
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
return (ret);
/*
@@ -648,20 +631,47 @@ __bam_c_count(dbc, recnop)
if (indx == 0 ||
!IS_DUPLICATE(dbc, indx, indx - P_INDX))
break;
- for (recno = 1, top = NUM_ENT(cp->page) - P_INDX;
- indx < top; ++recno, indx += P_INDX)
- if (!IS_DUPLICATE(dbc, indx, indx + P_INDX))
+ for (recno = 0,
+ top = NUM_ENT(cp->page) - P_INDX;; indx += P_INDX) {
+ if (!IS_DELETED(dbp, cp->page, indx))
+ ++recno;
+ if (indx == top ||
+ !IS_DUPLICATE(dbc, indx, indx + P_INDX))
break;
- *recnop = recno;
+ }
} else {
- if ((ret = memp_fget(dbp->mpf,
- &cp->opd->internal->root, 0, &cp->page)) != 0)
+ /*
+ * Off-page duplicates tree, get the root page of the off-page
+ * duplicate tree.
+ */
+ if ((ret = __memp_fget(
+ mpf, &cp->opd->internal->root, 0, &cp->page)) != 0)
return (ret);
- *recnop = RE_NREC(cp->page);
+ /*
+ * If the page is an internal page use the page's count as it's
+ * up-to-date and reflects the status of cursors in the tree.
+ * If the page is a leaf page for unsorted duplicates, use the
+ * page's count as cursors don't mark items deleted on the page
+ * and wait, cursor delete items immediately.
+ * If the page is a leaf page for sorted duplicates, there may
+ * be cursors on the page marking deleted items -- count.
+ */
+ if (TYPE(cp->page) == P_LDUP)
+ for (recno = 0, indx = 0,
+ top = NUM_ENT(cp->page) - O_INDX;; indx += O_INDX) {
+ if (!IS_DELETED(dbp, cp->page, indx))
+ ++recno;
+ if (indx == top)
+ break;
+ }
+ else
+ recno = RE_NREC(cp->page);
}
- ret = memp_fput(dbp->mpf, cp->page, 0);
+ *recnop = recno;
+
+ ret = __memp_fput(mpf, cp->page, 0);
cp->page = NULL;
return (ret);
@@ -677,9 +687,11 @@ __bam_c_del(dbc)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
ret = 0;
@@ -706,25 +718,27 @@ __bam_c_del(dbc)
goto err;
cp->page = cp->csp->page;
} else {
- ACQUIRE_CUR(dbc, DB_LOCK_WRITE, ret);
+ ACQUIRE_CUR(dbc, DB_LOCK_WRITE, cp->pgno, ret);
if (ret != 0)
goto err;
}
/* Log the change. */
- if (DB_LOGGING(dbc) &&
- (ret = __bam_cdel_log(dbp->dbenv, dbc->txn, &LSN(cp->page), 0,
- dbp->log_fileid, PGNO(cp->page), &LSN(cp->page), cp->indx)) != 0)
- goto err;
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_cdel_log(dbp, dbc->txn, &LSN(cp->page), 0,
+ PGNO(cp->page), &LSN(cp->page), cp->indx)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(cp->page));
/* Set the intent-to-delete flag on the page. */
if (TYPE(cp->page) == P_LBTREE)
- B_DSET(GET_BKEYDATA(cp->page, cp->indx + O_INDX)->type);
+ B_DSET(GET_BKEYDATA(dbp, cp->page, cp->indx + O_INDX)->type);
else
- B_DSET(GET_BKEYDATA(cp->page, cp->indx)->type);
+ B_DSET(GET_BKEYDATA(dbp, cp->page, cp->indx)->type);
/* Mark the page dirty. */
- ret = memp_fset(dbp->mpf, cp->page, DB_MPOOL_DIRTY);
+ ret = __memp_fset(mpf, cp->page, DB_MPOOL_DIRTY);
err: /*
* If we've been successful so far and the tree has record numbers,
@@ -736,7 +750,7 @@ err: /*
(void)__bam_stkrel(dbc, 0);
} else
if (cp->page != NULL &&
- (t_ret = memp_fput(dbp->mpf, cp->page, 0)) != 0 && ret == 0)
+ (t_ret = __memp_fput(mpf, cp->page, 0)) != 0 && ret == 0)
ret = t_ret;
cp->page = NULL;
@@ -771,7 +785,7 @@ __bam_c_dup(orig_dbc, new_dbc)
* holding inside a transaction because all the locks are retained
* until the transaction commits or aborts.
*/
- if (orig->lock.off != LOCK_INVALID && orig_dbc->txn == NULL) {
+ if (LOCK_ISSET(orig->lock) && orig_dbc->txn == NULL) {
if ((ret = __db_lget(new_dbc,
0, new->pgno, new->lock_mode, 0, &new->lock)) != 0)
return (ret);
@@ -796,11 +810,13 @@ __bam_c_get(dbc, key, data, flags, pgnop)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
db_pgno_t orig_pgno;
db_indx_t orig_indx;
int exact, newopd, ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
orig_pgno = cp->pgno;
orig_indx = cp->indx;
@@ -820,7 +836,7 @@ __bam_c_get(dbc, key, data, flags, pgnop)
* write lock, but upgrading to a write lock has no better
* chance of succeeding now instead of later, so don't try.
*/
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
goto err;
break;
case DB_FIRST:
@@ -829,9 +845,10 @@ __bam_c_get(dbc, key, data, flags, pgnop)
goto err;
break;
case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
/*
* There are two ways to get here based on DBcursor->c_get
- * with the DB_GET_BOTH flag set:
+ * with the DB_GET_BOTH/DB_GET_BOTH_RANGE flags set:
*
* 1. Searching a sorted off-page duplicate tree: do a tree
* search.
@@ -839,20 +856,34 @@ __bam_c_get(dbc, key, data, flags, pgnop)
* 2. Searching btree: do a tree search. If it returns a
* reference to off-page duplicate tree, return immediately
* and let our caller deal with it. If the search doesn't
- * return a reference to off-page duplicate tree, start an
- * on-page search.
+ * return a reference to off-page duplicate tree, continue
+ * with an on-page search.
*/
if (F_ISSET(dbc, DBC_OPD)) {
if ((ret = __bam_c_search(
- dbc, data, DB_GET_BOTH, &exact)) != 0)
- goto err;
- if (!exact) {
- ret = DB_NOTFOUND;
+ dbc, PGNO_INVALID, data, flags, &exact)) != 0)
goto err;
+ if (flags == DB_GET_BOTH) {
+ if (!exact) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
+ break;
}
+
+ /*
+ * We didn't require an exact match, so the search may
+ * may have returned an entry past the end of the page,
+ * or we may be referencing a deleted record. If so,
+ * move to the next entry.
+ */
+ if ((cp->indx == NUM_ENT(cp->page) ||
+ IS_CUR_DELETED(dbc)) &&
+ (ret = __bam_c_next(dbc, 1, 0)) != 0)
+ goto err;
} else {
if ((ret = __bam_c_search(
- dbc, key, DB_GET_BOTH, &exact)) != 0)
+ dbc, PGNO_INVALID, key, flags, &exact)) != 0)
return (ret);
if (!exact) {
ret = DB_NOTFOUND;
@@ -863,7 +894,8 @@ __bam_c_get(dbc, key, data, flags, pgnop)
newopd = 1;
break;
}
- if ((ret = __bam_getboth_finddatum(dbc, data)) != 0)
+ if ((ret =
+ __bam_getboth_finddatum(dbc, data, flags)) != 0)
goto err;
}
break;
@@ -882,11 +914,11 @@ __bam_c_get(dbc, key, data, flags, pgnop)
if ((ret = __bam_c_first(dbc)) != 0)
goto err;
} else
- if ((ret = __bam_c_next(dbc, 1)) != 0)
+ if ((ret = __bam_c_next(dbc, 1, 0)) != 0)
goto err;
break;
case DB_NEXT_DUP:
- if ((ret = __bam_c_next(dbc, 1)) != 0)
+ if ((ret = __bam_c_next(dbc, 1, 0)) != 0)
goto err;
if (!IS_CUR_DUPLICATE(dbc, orig_pgno, orig_indx)) {
ret = DB_NOTFOUND;
@@ -900,7 +932,7 @@ __bam_c_get(dbc, key, data, flags, pgnop)
goto err;
} else
do {
- if ((ret = __bam_c_next(dbc, 1)) != 0)
+ if ((ret = __bam_c_next(dbc, 1, 0)) != 0)
goto err;
} while (IS_CUR_DUPLICATE(dbc, orig_pgno, orig_indx));
break;
@@ -927,12 +959,14 @@ __bam_c_get(dbc, key, data, flags, pgnop)
case DB_SET:
case DB_SET_RECNO:
newopd = 1;
- if ((ret = __bam_c_search(dbc, key, flags, &exact)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, key, flags, &exact)) != 0)
goto err;
break;
case DB_SET_RANGE:
newopd = 1;
- if ((ret = __bam_c_search(dbc, key, flags, &exact)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ PGNO_INVALID, key, flags, &exact)) != 0)
goto err;
/*
@@ -942,7 +976,7 @@ __bam_c_get(dbc, key, data, flags, pgnop)
* the next entry.
*/
if (cp->indx == NUM_ENT(cp->page) || IS_CUR_DELETED(dbc))
- if ((ret = __bam_c_next(dbc, 0)) != 0)
+ if ((ret = __bam_c_next(dbc, 0, 0)) != 0)
goto err;
break;
default:
@@ -957,8 +991,15 @@ __bam_c_get(dbc, key, data, flags, pgnop)
if (newopd && pgnop != NULL)
(void)__bam_isopd(dbc, pgnop);
- /* Don't return the key, it was passed to us */
- if (flags == DB_SET)
+ /*
+ * Don't return the key, it was passed to us (this is true even if the
+ * application defines a compare function returning equality for more
+ * than one key value, since in that case which actual value we store
+ * in the database is undefined -- and particularly true in the case of
+ * duplicates where we only store one key value).
+ */
+ if (flags == DB_GET_BOTH ||
+ flags == DB_GET_BOTH_RANGE || flags == DB_SET)
F_SET(key, DB_DBT_ISSET);
err: /*
@@ -966,13 +1007,595 @@ err: /*
* moved, clear the delete flag, DBcursor->c_get never references
* a deleted key, if it moved at all.
*/
- if (F_ISSET(cp, C_DELETED)
- && (cp->pgno != orig_pgno || cp->indx != orig_indx))
+ if (F_ISSET(cp, C_DELETED) &&
+ (cp->pgno != orig_pgno || cp->indx != orig_indx))
F_CLR(cp, C_DELETED);
return (ret);
}
+static int
+__bam_get_prev(dbc)
+ DBC *dbc;
+{
+ BTREE_CURSOR *cp;
+ DBT key, data;
+ db_pgno_t pgno;
+ int ret;
+
+ if ((ret = __bam_c_prev(dbc)) != 0)
+ return (ret);
+
+ if (__bam_isopd(dbc, &pgno)) {
+ cp = (BTREE_CURSOR *)dbc->internal;
+ if ((ret = __db_c_newopd(dbc, pgno, cp->opd, &cp->opd)) != 0)
+ return (ret);
+ if ((ret = cp->opd->c_am_get(cp->opd,
+ &key, &data, DB_LAST, NULL)) != 0)
+ return (ret);
+ }
+
+ return (0);
+}
+
+/*
+ * __bam_bulk -- Return bulk data from a btree.
+ */
+static int
+__bam_bulk(dbc, data, flags)
+ DBC *dbc;
+ DBT *data;
+ u_int32_t flags;
+{
+ BKEYDATA *bk;
+ BOVERFLOW *bo;
+ BTREE_CURSOR *cp;
+ PAGE *pg;
+ db_indx_t *inp, indx, pg_keyoff;
+ int32_t *endp, key_off, *offp, *saveoffp;
+ u_int8_t *dbuf, *dp, *np;
+ u_int32_t key_size, pagesize, size, space;
+ int adj, is_key, need_pg, next_key, no_dup, rec_key, ret;
+
+ ret = 0;
+ key_off = 0;
+ size = 0;
+ pagesize = dbc->dbp->pgsize;
+ cp = (BTREE_CURSOR *)dbc->internal;
+
+ /*
+ * dp tracks the beginging of the page in the buffer.
+ * np is the next place to copy things into the buffer.
+ * dbuf always stays at the beging of the buffer.
+ */
+ dbuf = data->data;
+ np = dp = dbuf;
+
+ /* Keep track of space that is left. There is a termination entry */
+ space = data->ulen;
+ space -= sizeof(*offp);
+
+ /* Build the offset/size table from the end up. */
+ endp = (int32_t *)((u_int8_t *)dbuf + data->ulen);
+ endp--;
+ offp = endp;
+
+ key_size = 0;
+
+ /*
+ * Distinguish between BTREE and RECNO.
+ * There are no keys in RECNO. If MULTIPLE_KEY is specified
+ * then we return the record numbers.
+ * is_key indicates that multiple btree keys are returned.
+ * rec_key is set if we are returning record numbers.
+ * next_key is set if we are going after the next key rather than dup.
+ */
+ if (dbc->dbtype == DB_BTREE) {
+ is_key = LF_ISSET(DB_MULTIPLE_KEY) ? 1: 0;
+ rec_key = 0;
+ next_key = is_key && LF_ISSET(DB_OPFLAGS_MASK) != DB_NEXT_DUP;
+ adj = 2;
+ } else {
+ is_key = 0;
+ rec_key = LF_ISSET(DB_MULTIPLE_KEY) ? 1 : 0;
+ next_key = LF_ISSET(DB_OPFLAGS_MASK) != DB_NEXT_DUP;
+ adj = 1;
+ }
+ no_dup = LF_ISSET(DB_OPFLAGS_MASK) == DB_NEXT_NODUP;
+
+next_pg:
+ indx = cp->indx;
+ pg = cp->page;
+
+ inp = P_INP(dbc->dbp, pg);
+ /* The current page is not yet in the buffer. */
+ need_pg = 1;
+
+ /*
+ * Keep track of the offset of the current key on the page.
+ * If we are returning keys, set it to 0 first so we force
+ * the copy of the key to the buffer.
+ */
+ pg_keyoff = 0;
+ if (is_key == 0)
+ pg_keyoff = inp[indx];
+
+ do {
+ if (IS_DELETED(dbc->dbp, pg, indx)) {
+ if (dbc->dbtype != DB_RECNO)
+ continue;
+
+ cp->recno++;
+ /*
+ * If we are not returning recnos then we
+ * need to fill in every slot so the user
+ * can calculate the record numbers.
+ */
+ if (rec_key != 0)
+ continue;
+
+ space -= 2 * sizeof(*offp);
+ /* Check if space as underflowed. */
+ if (space > data->ulen)
+ goto back_up;
+
+ /* Just mark the empty recno slots. */
+ *offp-- = 0;
+ *offp-- = 0;
+ continue;
+ }
+
+ /*
+ * Check to see if we have a new key.
+ * If so, then see if we need to put the
+ * key on the page. If its already there
+ * then we just point to it.
+ */
+ if (is_key && pg_keyoff != inp[indx]) {
+ bk = GET_BKEYDATA(dbc->dbp, pg, indx);
+ if (B_TYPE(bk->type) == B_OVERFLOW) {
+ bo = (BOVERFLOW *)bk;
+ size = key_size = bo->tlen;
+ if (key_size > space)
+ goto get_key_space;
+ if ((ret = __bam_bulk_overflow(dbc,
+ bo->tlen, bo->pgno, np)) != 0)
+ return (ret);
+ space -= key_size;
+ key_off = (int32_t)(np - dbuf);
+ np += key_size;
+ } else {
+ if (need_pg) {
+ dp = np;
+ size = pagesize - HOFFSET(pg);
+ if (space < size) {
+get_key_space:
+ /* Nothing added, then error. */
+ if (offp == endp) {
+ data->size =
+ ALIGN(size +
+ pagesize, 1024);
+ return (ENOMEM);
+ }
+ /*
+ * We need to back up to the
+ * last record put into the
+ * buffer so that it is
+ * CURRENT.
+ */
+ if (indx != 0)
+ indx -= P_INDX;
+ else {
+ if ((ret =
+ __bam_get_prev(
+ dbc)) != 0)
+ return (ret);
+ indx = cp->indx;
+ pg = cp->page;
+ }
+ break;
+ }
+ /*
+ * Move the data part of the page
+ * to the buffer.
+ */
+ memcpy(dp,
+ (u_int8_t *)pg + HOFFSET(pg), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+ key_size = bk->len;
+ key_off = (int32_t)((inp[indx] - HOFFSET(pg))
+ + (dp - dbuf) + SSZA(BKEYDATA, data));
+ pg_keyoff = inp[indx];
+ }
+ }
+
+ /*
+ * Reserve space for the pointers and sizes.
+ * Either key/data pair or just for a data item.
+ */
+ space -= (is_key ? 4 : 2) * sizeof(*offp);
+ if (rec_key)
+ space -= sizeof(*offp);
+
+ /* Check to see if space has underflowed. */
+ if (space > data->ulen)
+ goto back_up;
+
+ /*
+ * Determine if the next record is in the
+ * buffer already or if it needs to be copied in.
+ * If we have an off page dup, then copy as many
+ * as will fit into the buffer.
+ */
+ bk = GET_BKEYDATA(dbc->dbp, pg, indx + adj - 1);
+ if (B_TYPE(bk->type) == B_DUPLICATE) {
+ bo = (BOVERFLOW *)bk;
+ if (is_key) {
+ *offp-- = (int32_t)key_off;
+ *offp-- = (int32_t)key_size;
+ }
+ /*
+ * We pass the offset of the current key.
+ * On return we check to see if offp has
+ * moved to see if any data fit.
+ */
+ saveoffp = offp;
+ if ((ret = __bam_bulk_duplicates(dbc, bo->pgno,
+ dbuf, is_key ? offp + P_INDX : NULL,
+ &offp, &np, &space, no_dup)) != 0) {
+ if (ret == ENOMEM) {
+ size = space;
+ space = 0;
+ /* If nothing was added, then error. */
+ if (offp == saveoffp) {
+ offp += 2;
+ goto back_up;
+ }
+ goto get_space;
+ }
+ return (ret);
+ }
+ } else if (B_TYPE(bk->type) == B_OVERFLOW) {
+ bo = (BOVERFLOW *)bk;
+ size = bo->tlen;
+ if (size > space)
+ goto back_up;
+ if ((ret =
+ __bam_bulk_overflow(dbc,
+ bo->tlen, bo->pgno, np)) != 0)
+ return (ret);
+ space -= size;
+ if (is_key) {
+ *offp-- = (int32_t)key_off;
+ *offp-- = (int32_t)key_size;
+ } else if (rec_key)
+ *offp-- = (int32_t)cp->recno;
+ *offp-- = (int32_t)(np - dbuf);
+ np += size;
+ *offp-- = (int32_t)size;
+ } else {
+ if (need_pg) {
+ dp = np;
+ size = pagesize - HOFFSET(pg);
+ if (space < size) {
+back_up:
+ /*
+ * Back up the index so that the
+ * last record in the buffer is CURRENT
+ */
+ if (indx >= adj)
+ indx -= adj;
+ else {
+ if ((ret =
+ __bam_get_prev(dbc)) != 0 &&
+ ret != DB_NOTFOUND)
+ return (ret);
+ indx = cp->indx;
+ pg = cp->page;
+ }
+ if (dbc->dbtype == DB_RECNO)
+ cp->recno--;
+get_space:
+ /*
+ * See if we put anything in the
+ * buffer or if we are doing a DBP->get
+ * did we get all of the data.
+ */
+ if (offp >=
+ (is_key ? &endp[-1] : endp) ||
+ F_ISSET(dbc, DBC_TRANSIENT)) {
+ data->size = ALIGN(size +
+ data->ulen - space, 1024);
+ return (ENOMEM);
+ }
+ break;
+ }
+ memcpy(dp, (u_int8_t *)pg + HOFFSET(pg), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+ /*
+ * Add the offsets and sizes to the end of the buffer.
+ * First add the key info then the data info.
+ */
+ if (is_key) {
+ *offp-- = (int32_t)key_off;
+ *offp-- = (int32_t)key_size;
+ } else if (rec_key)
+ *offp-- = (int32_t)cp->recno;
+ *offp-- = (int32_t)((inp[indx + adj - 1] - HOFFSET(pg))
+ + (dp - dbuf) + SSZA(BKEYDATA, data));
+ *offp-- = bk->len;
+ }
+ if (dbc->dbtype == DB_RECNO)
+ cp->recno++;
+ else if (no_dup) {
+ while (indx + adj < NUM_ENT(pg) &&
+ pg_keyoff == inp[indx + adj])
+ indx += adj;
+ }
+ /*
+ * Stop when we either run off the page or we
+ * move to the next key and we are not returning mulitple keys.
+ */
+ } while ((indx += adj) < NUM_ENT(pg) &&
+ (next_key || pg_keyoff == inp[indx]));
+
+ /* If we are off the page then try to the next page. */
+ if (ret == 0 && next_key && indx >= NUM_ENT(pg)) {
+ cp->indx = indx;
+ ret = __bam_c_next(dbc, 0, 1);
+ if (ret == 0)
+ goto next_pg;
+ if (ret != DB_NOTFOUND)
+ return (ret);
+ }
+
+ /*
+ * If we did a DBP->get we must error if we did not return
+ * all the data for the current key because there is
+ * no way to know if we did not get it all, nor any
+ * interface to fetch the balance.
+ */
+
+ if (ret == 0 && indx < pg->entries &&
+ F_ISSET(dbc, DBC_TRANSIENT) && pg_keyoff == inp[indx]) {
+ data->size = (data->ulen - space) + size;
+ return (ENOMEM);
+ }
+ /*
+ * Must leave the index pointing at the last record fetched.
+ * If we are not fetching keys, we may have stepped to the
+ * next key.
+ */
+ if (ret == ENOMEM || next_key || pg_keyoff == inp[indx])
+ cp->indx = indx;
+ else
+ cp->indx = indx - P_INDX;
+
+ if (rec_key == 1)
+ *offp = RECNO_OOB;
+ else
+ *offp = -1;
+ return (0);
+}
+
+/*
+ * __bam_bulk_overflow --
+ * Dump overflow record into the buffer.
+ * The space requirements have already been checked.
+ * PUBLIC: int __bam_bulk_overflow
+ * PUBLIC: __P((DBC *, u_int32_t, db_pgno_t, u_int8_t *));
+ */
+int
+__bam_bulk_overflow(dbc, len, pgno, dp)
+ DBC *dbc;
+ u_int32_t len;
+ db_pgno_t pgno;
+ u_int8_t *dp;
+{
+ DBT dbt;
+
+ memset(&dbt, 0, sizeof(dbt));
+ F_SET(&dbt, DB_DBT_USERMEM);
+ dbt.ulen = len;
+ dbt.data = (void *)dp;
+ return (__db_goff(dbc->dbp, &dbt, len, pgno, NULL, NULL));
+}
+
+/*
+ * __bam_bulk_duplicates --
+ * Put as many off page duplicates as will fit into the buffer.
+ * This routine will adjust the cursor to reflect the position in
+ * the overflow tree.
+ * PUBLIC: int __bam_bulk_duplicates __P((DBC *,
+ * PUBLIC: db_pgno_t, u_int8_t *, int32_t *,
+ * PUBLIC: int32_t **, u_int8_t **, u_int32_t *, int));
+ */
+int
+__bam_bulk_duplicates(dbc, pgno, dbuf, keyoff, offpp, dpp, spacep, no_dup)
+ DBC *dbc;
+ db_pgno_t pgno;
+ u_int8_t *dbuf;
+ int32_t *keyoff, **offpp;
+ u_int8_t **dpp;
+ u_int32_t *spacep;
+ int no_dup;
+{
+ DB *dbp;
+ BKEYDATA *bk;
+ BOVERFLOW *bo;
+ BTREE_CURSOR *cp;
+ DBC *opd;
+ DBT key, data;
+ PAGE *pg;
+ db_indx_t indx, *inp;
+ int32_t *offp;
+ u_int32_t pagesize, size, space;
+ u_int8_t *dp, *np;
+ int first, need_pg, ret, t_ret;
+
+ ret = 0;
+
+ dbp = dbc->dbp;
+ cp = (BTREE_CURSOR *)dbc->internal;
+ opd = cp->opd;
+
+ if (opd == NULL) {
+ if ((ret = __db_c_newopd(dbc, pgno, NULL, &opd)) != 0)
+ return (ret);
+ cp->opd = opd;
+ if ((ret = opd->c_am_get(opd,
+ &key, &data, DB_FIRST, NULL)) != 0)
+ goto close_opd;
+ }
+
+ pagesize = opd->dbp->pgsize;
+ cp = (BTREE_CURSOR *)opd->internal;
+ space = *spacep;
+ /* Get current offset slot. */
+ offp = *offpp;
+
+ /*
+ * np is the next place to put data.
+ * dp is the begining of the current page in the buffer.
+ */
+ np = dp = *dpp;
+ first = 1;
+ indx = cp->indx;
+
+ do {
+ /* Fetch the current record. No initial move. */
+ if ((ret = __bam_c_next(opd, 0, 0)) != 0)
+ break;
+ pg = cp->page;
+ indx = cp->indx;
+ inp = P_INP(dbp, pg);
+ /* We need to copy the page to the buffer. */
+ need_pg = 1;
+
+ do {
+ if (IS_DELETED(dbp, pg, indx))
+ goto contin;
+ bk = GET_BKEYDATA(dbp, pg, indx);
+ space -= 2 * sizeof(*offp);
+ /* Allocate space for key if needed. */
+ if (first == 0 && keyoff != NULL)
+ space -= 2 * sizeof(*offp);
+
+ /* Did space underflow? */
+ if (space > *spacep) {
+ ret = ENOMEM;
+ if (first == 1) {
+ /* Get the absolute value. */
+ space = -(int32_t)space;
+ space = *spacep + space;
+ if (need_pg)
+ space += pagesize - HOFFSET(pg);
+ }
+ break;
+ }
+ if (B_TYPE(bk->type) == B_OVERFLOW) {
+ bo = (BOVERFLOW *)bk;
+ size = bo->tlen;
+ if (size > space) {
+ ret = ENOMEM;
+ space = *spacep + size;
+ break;
+ }
+ if (first == 0 && keyoff != NULL) {
+ *offp-- = keyoff[0];
+ *offp-- = keyoff[-1];
+ }
+ if ((ret = __bam_bulk_overflow(dbc,
+ bo->tlen, bo->pgno, np)) != 0)
+ return (ret);
+ space -= size;
+ *offp-- = (int32_t)(np - dbuf);
+ np += size;
+ } else {
+ if (need_pg) {
+ dp = np;
+ size = pagesize - HOFFSET(pg);
+ if (space < size) {
+ ret = ENOMEM;
+ /* Return space required. */
+ space = *spacep + size;
+ break;
+ }
+ memcpy(dp,
+ (u_int8_t *)pg + HOFFSET(pg), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+ if (first == 0 && keyoff != NULL) {
+ *offp-- = keyoff[0];
+ *offp-- = keyoff[-1];
+ }
+ size = bk->len;
+ *offp-- = (int32_t)((inp[indx] - HOFFSET(pg))
+ + (dp - dbuf) + SSZA(BKEYDATA, data));
+ }
+ *offp-- = (int32_t)size;
+ first = 0;
+ if (no_dup)
+ break;
+contin:
+ indx++;
+ if (opd->dbtype == DB_RECNO)
+ cp->recno++;
+ } while (indx < NUM_ENT(pg));
+ if (no_dup)
+ break;
+ cp->indx = indx;
+
+ } while (ret == 0);
+
+ /* Return the updated information. */
+ *spacep = space;
+ *offpp = offp;
+ *dpp = np;
+
+ /*
+ * If we ran out of space back up the pointer.
+ * If we did not return any dups or reached the end, close the opd.
+ */
+ if (ret == ENOMEM) {
+ if (opd->dbtype == DB_RECNO) {
+ if (--cp->recno == 0)
+ goto close_opd;
+ } else if (indx != 0)
+ cp->indx--;
+ else {
+ t_ret = __bam_c_prev(opd);
+ if (t_ret == DB_NOTFOUND)
+ goto close_opd;
+ if (t_ret != 0)
+ ret = t_ret;
+ }
+ } else if (keyoff == NULL && ret == DB_NOTFOUND) {
+ cp->indx--;
+ if (opd->dbtype == DB_RECNO)
+ --cp->recno;
+ } else if (indx == 0 || ret == DB_NOTFOUND) {
+close_opd:
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ if ((t_ret = __db_c_close(opd)) != 0 && ret == 0)
+ ret = t_ret;
+ ((BTREE_CURSOR *)dbc->internal)->opd = NULL;
+ }
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+
+ return (ret);
+}
+
/*
* __bam_getbothc --
* Search for a matching data item on a join.
@@ -984,9 +1607,11 @@ __bam_getbothc(dbc, data)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
int cmp, exact, ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -995,7 +1620,7 @@ __bam_getbothc(dbc, data)
* write lock, but upgrading to a write lock has no better
* chance of succeeding now instead of later, so don't try.
*/
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
return (ret);
/*
@@ -1017,11 +1642,12 @@ __bam_getbothc(dbc, data)
return (DB_NOTFOUND);
/* Discard the current page, we're going to do a full search. */
- if ((ret = memp_fput(dbp->mpf, cp->page, 0)) != 0)
+ if ((ret = __memp_fput(mpf, cp->page, 0)) != 0)
return (ret);
cp->page = NULL;
- return (__bam_c_search(dbc, data, DB_GET_BOTH, &exact));
+ return (__bam_c_search(dbc,
+ PGNO_INVALID, data, DB_GET_BOTH, &exact));
}
/*
@@ -1038,7 +1664,7 @@ __bam_getbothc(dbc, data)
return (DB_NOTFOUND);
cp->indx += P_INDX;
- return (__bam_getboth_finddatum(dbc, data));
+ return (__bam_getboth_finddatum(dbc, data, DB_GET_BOTH));
}
/*
@@ -1046,31 +1672,31 @@ __bam_getbothc(dbc, data)
* Find a matching on-page data item.
*/
static int
-__bam_getboth_finddatum(dbc, data)
+__bam_getboth_finddatum(dbc, data, flags)
DBC *dbc;
DBT *data;
+ u_int32_t flags;
{
BTREE_CURSOR *cp;
DB *dbp;
db_indx_t base, lim, top;
int cmp, ret;
+ COMPQUIET(cmp, 0);
+
dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
/*
* Called (sometimes indirectly) from DBC->get to search on-page data
- * item(s) for a matching value. If the original flag was DB_GET_BOTH,
- * the cursor argument is set to the first data item for the key. If
- * the original flag was DB_GET_BOTHC, the cursor argument is set to
- * the first data item that we can potentially return. In both cases,
- * there may or may not be additional duplicate data items to search.
+ * item(s) for a matching value. If the original flag was DB_GET_BOTH
+ * or DB_GET_BOTH_RANGE, the cursor is set to the first undeleted data
+ * item for the key. If the original flag was DB_GET_BOTHC, the cursor
+ * argument is set to the first data item we can potentially return.
+ * In both cases, there may or may not be additional duplicate data
+ * items to search.
*
* If the duplicates are not sorted, do a linear search.
- *
- * If the duplicates are sorted, do a binary search. The reason for
- * this is that large pages and small key/data pairs result in large
- * numbers of on-page duplicates before they get pushed off-page.
*/
if (dbp->dup_compare == NULL) {
for (;; cp->indx += P_INDX) {
@@ -1085,41 +1711,62 @@ __bam_getboth_finddatum(dbc, data)
!IS_DUPLICATE(dbc, cp->indx, cp->indx + P_INDX))
break;
}
- } else {
- /*
- * Find the top and bottom of the duplicate set. Binary search
- * requires at least two items, don't loop if there's only one.
- */
- for (base = top = cp->indx;
- top < NUM_ENT(cp->page); top += P_INDX)
- if (!IS_DUPLICATE(dbc, cp->indx, top))
- break;
- if (base == (top - P_INDX)) {
- if ((ret = __bam_cmp(dbp, data,
- cp->page, cp->indx + O_INDX,
- dbp->dup_compare, &cmp)) != 0)
- return (ret);
- return (cmp == 0 ? 0 : DB_NOTFOUND);
- }
+ return (DB_NOTFOUND);
+ }
- for (lim =
- (top - base) / (db_indx_t)P_INDX; lim != 0; lim >>= 1) {
- cp->indx = base + ((lim >> 1) * P_INDX);
- if ((ret = __bam_cmp(dbp, data, cp->page,
- cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
- return (ret);
- if (cmp == 0) {
- if (!IS_CUR_DELETED(dbc))
- return (0);
- break;
- }
- if (cmp > 0) {
- base = cp->indx + P_INDX;
- --lim;
- }
+ /*
+ * If the duplicates are sorted, do a binary search. The reason for
+ * this is that large pages and small key/data pairs result in large
+ * numbers of on-page duplicates before they get pushed off-page.
+ *
+ * Find the top and bottom of the duplicate set. Binary search
+ * requires at least two items, don't loop if there's only one.
+ */
+ for (base = top = cp->indx; top < NUM_ENT(cp->page); top += P_INDX)
+ if (!IS_DUPLICATE(dbc, cp->indx, top))
+ break;
+ if (base == (top - P_INDX)) {
+ if ((ret = __bam_cmp(dbp, data,
+ cp->page, cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
+ return (ret);
+ return (cmp == 0 ||
+ (cmp < 0 && flags == DB_GET_BOTH_RANGE) ? 0 : DB_NOTFOUND);
+ }
+
+ for (lim = (top - base) / (db_indx_t)P_INDX; lim != 0; lim >>= 1) {
+ cp->indx = base + ((lim >> 1) * P_INDX);
+ if ((ret = __bam_cmp(dbp, data, cp->page,
+ cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
+ return (ret);
+ if (cmp == 0) {
+ /*
+ * XXX
+ * No duplicate duplicates in sorted duplicate sets,
+ * so there can be only one.
+ */
+ if (!IS_CUR_DELETED(dbc))
+ return (0);
+ break;
+ }
+ if (cmp > 0) {
+ base = cp->indx + P_INDX;
+ --lim;
}
}
- return (DB_NOTFOUND);
+
+ /* No match found; if we're looking for an exact match, we're done. */
+ if (flags == DB_GET_BOTH)
+ return (DB_NOTFOUND);
+
+ /*
+ * Base is the smallest index greater than the data item, may be zero
+ * or a last + O_INDX index, and may be deleted. Find an undeleted
+ * item.
+ */
+ cp->indx = base;
+ while (cp->indx < top && IS_CUR_DELETED(dbc))
+ cp->indx += P_INDX;
+ return (cp->indx < top ? 0 : DB_NOTFOUND);
}
/*
@@ -1136,20 +1783,24 @@ __bam_c_put(dbc, key, data, flags, pgnop)
BTREE_CURSOR *cp;
DB *dbp;
DBT dbt;
+ DB_MPOOLFILE *mpf;
+ db_pgno_t root_pgno;
u_int32_t iiop;
- int cmp, exact, needkey, ret, stack;
+ int cmp, exact, own, ret, stack;
void *arg;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
+ root_pgno = cp->root;
-split: needkey = ret = stack = 0;
+split: ret = stack = 0;
switch (flags) {
case DB_AFTER:
case DB_BEFORE:
case DB_CURRENT:
- needkey = 1;
iiop = flags;
+ own = 1;
/*
* If the Btree has record numbers (and we're not replacing an
@@ -1182,25 +1833,33 @@ split: needkey = ret = stack = 0;
ACQUIRE_WRITE_LOCK(dbc, ret);
if (ret != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
goto err;
break;
case DB_KEYFIRST:
case DB_KEYLAST:
case DB_NODUPDATA:
+ own = 0;
/*
* Searching off-page, sorted duplicate tree: do a tree search
* for the correct item; __bam_c_search returns the smallest
* slot greater than the key, use it.
+ *
+ * See comment below regarding where we can start the search.
*/
if (F_ISSET(dbc, DBC_OPD)) {
- if ((ret =
- __bam_c_search(dbc, data, flags, &exact)) != 0)
+ if ((ret = __bam_c_search(dbc,
+ F_ISSET(cp, C_RECNUM) ? cp->root : root_pgno,
+ data, flags, &exact)) != 0)
goto err;
stack = 1;
/* Disallow "sorted" duplicate duplicates. */
if (exact) {
+ if (IS_DELETED(dbp, cp->page, cp->indx)) {
+ iiop = DB_CURRENT;
+ break;
+ }
ret = __db_duperr(dbp, flags);
goto err;
}
@@ -1208,8 +1867,17 @@ split: needkey = ret = stack = 0;
break;
}
- /* Searching a btree. */
- if ((ret = __bam_c_search(dbc, key,
+ /*
+ * Searching a btree.
+ *
+ * If we've done a split, we can start the search from the
+ * parent of the split page, which __bam_split returned
+ * for us in root_pgno, unless we're in a Btree with record
+ * numbering. In that case, we'll need the true root page
+ * in order to adjust the record count.
+ */
+ if ((ret = __bam_c_search(dbc,
+ F_ISSET(cp, C_RECNUM) ? cp->root : root_pgno, key,
flags == DB_KEYFIRST || dbp->dup_compare != NULL ?
DB_KEYFIRST : DB_KEYLAST, &exact)) != 0)
goto err;
@@ -1264,8 +1932,8 @@ split: needkey = ret = stack = 0;
*/
for (;; cp->indx += P_INDX) {
if ((ret = __bam_cmp(dbp, data, cp->page,
- cp->indx + O_INDX, dbp->dup_compare, &cmp)) !=0)
- return (ret);
+ cp->indx + O_INDX, dbp->dup_compare, &cmp)) != 0)
+ goto err;
if (cmp < 0) {
iiop = DB_BEFORE;
break;
@@ -1273,7 +1941,7 @@ split: needkey = ret = stack = 0;
/* Disallow "sorted" duplicate duplicates. */
if (cmp == 0) {
- if (IS_DELETED(cp->page, cp->indx)) {
+ if (IS_DELETED(dbp, cp->page, cp->indx)) {
iiop = DB_CURRENT;
break;
}
@@ -1282,8 +1950,8 @@ split: needkey = ret = stack = 0;
}
if (cp->indx + P_INDX >= NUM_ENT(cp->page) ||
- ((PAGE *)cp->page)->inp[cp->indx] !=
- ((PAGE *)cp->page)->inp[cp->indx + P_INDX]) {
+ P_INP(dbp, ((PAGE *)cp->page))[cp->indx] !=
+ P_INP(dbp, ((PAGE *)cp->page))[cp->indx + P_INDX]) {
iiop = DB_AFTER;
break;
}
@@ -1306,7 +1974,7 @@ split: needkey = ret = stack = 0;
flags == DB_BEFORE || flags == DB_CURRENT) {
memset(&dbt, 0, sizeof(DBT));
if ((ret = __db_ret(dbp, cp->page, 0, &dbt,
- &dbc->rkey.data, &dbc->rkey.ulen)) != 0)
+ &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
goto err;
arg = &dbt;
} else
@@ -1326,8 +1994,22 @@ split: needkey = ret = stack = 0;
if (ret != 0)
goto err;
+ /*
+ * SR [#6059]
+ * If we do not own a lock on the page anymore then
+ * clear the cursor so we don't point at it.
+ * Even if we call __bam_stkrel above we still
+ * may have entered the routine with the cursor
+ * posistioned to a particular record. This
+ * is in the case where C_RECNUM is set.
+ */
+ if (own == 0) {
+ cp->pgno = PGNO_INVALID;
+ cp->indx = 0;
+ }
+
/* Split the tree. */
- if ((ret = __bam_split(dbc, arg)) != 0)
+ if ((ret = __bam_split(dbc, arg, &root_pgno)) != 0)
return (ret);
goto split;
@@ -1351,8 +2033,15 @@ done: /*
* flag. If we're successful, we either moved the cursor or the item
* is no longer deleted. If we're not successful, then we're just a
* copy, no need to have the flag set.
+ *
+ * We may have instantiated off-page duplicate cursors during the put,
+ * so clear the deleted bit from the off-page duplicate cursor as well.
*/
F_CLR(cp, C_DELETED);
+ if (cp->opd != NULL) {
+ cp = (BTREE_CURSOR *)cp->opd->internal;
+ F_CLR(cp, C_DELETED);
+ }
return (ret);
}
@@ -1361,22 +2050,22 @@ done: /*
* __bam_c_rget --
* Return the record number for a cursor.
*
- * PUBLIC: int __bam_c_rget __P((DBC *, DBT *, u_int32_t));
+ * PUBLIC: int __bam_c_rget __P((DBC *, DBT *));
*/
int
-__bam_c_rget(dbc, data, flags)
+__bam_c_rget(dbc, data)
DBC *dbc;
DBT *data;
- u_int32_t flags;
{
BTREE_CURSOR *cp;
DB *dbp;
DBT dbt;
+ DB_MPOOLFILE *mpf;
db_recno_t recno;
- int exact, ret;
+ int exact, ret, t_ret;
- COMPQUIET(flags, 0);
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -1384,27 +2073,28 @@ __bam_c_rget(dbc, data, flags)
* Get a copy of the key.
* Release the page, making sure we don't release it twice.
*/
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &cp->page)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &cp->page)) != 0)
return (ret);
memset(&dbt, 0, sizeof(DBT));
if ((ret = __db_ret(dbp, cp->page,
- cp->indx, &dbt, &dbc->rkey.data, &dbc->rkey.ulen)) != 0)
+ cp->indx, &dbt, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
goto err;
- ret = memp_fput(dbp->mpf, cp->page, 0);
+ ret = __memp_fput(mpf, cp->page, 0);
cp->page = NULL;
if (ret != 0)
return (ret);
- if ((ret = __bam_search(dbc, &dbt,
+ if ((ret = __bam_search(dbc, PGNO_INVALID, &dbt,
F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND,
1, &recno, &exact)) != 0)
goto err;
- ret = __db_retcopy(dbp, data,
- &recno, sizeof(recno), &dbc->rdata.data, &dbc->rdata.ulen);
+ ret = __db_retcopy(dbp->dbenv, data,
+ &recno, sizeof(recno), &dbc->rdata->data, &dbc->rdata->ulen);
/* Release the stack. */
-err: __bam_stkrel(dbc, 0);
+err: if ((t_ret = __bam_stkrel(dbc, 0)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -1444,17 +2134,15 @@ __bam_c_first(dbc)
DBC *dbc;
{
BTREE_CURSOR *cp;
- DB *dbp;
db_pgno_t pgno;
int ret;
- dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
ret = 0;
/* Walk down the left-hand side of the tree. */
for (pgno = cp->root;;) {
- ACQUIRE_CUR_SET(dbc, DB_LOCK_READ, pgno, ret);
+ ACQUIRE_CUR_COUPLE(dbc, DB_LOCK_READ, pgno, ret);
if (ret != 0)
return (ret);
@@ -1462,7 +2150,7 @@ __bam_c_first(dbc)
if (ISLEAF(cp->page))
break;
- pgno = GET_BINTERNAL(cp->page, 0)->pgno;
+ pgno = GET_BINTERNAL(dbc->dbp, cp->page, 0)->pgno;
}
/* If we want a write lock instead of a read lock, get it now. */
@@ -1472,9 +2160,11 @@ __bam_c_first(dbc)
return (ret);
}
+ cp->indx = 0;
+
/* If on an empty page or a deleted record, move to the next one. */
if (NUM_ENT(cp->page) == 0 || IS_CUR_DELETED(dbc))
- if ((ret = __bam_c_next(dbc, 0)) != 0)
+ if ((ret = __bam_c_next(dbc, 0, 0)) != 0)
return (ret);
return (0);
@@ -1489,17 +2179,15 @@ __bam_c_last(dbc)
DBC *dbc;
{
BTREE_CURSOR *cp;
- DB *dbp;
db_pgno_t pgno;
int ret;
- dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
ret = 0;
/* Walk down the right-hand side of the tree. */
for (pgno = cp->root;;) {
- ACQUIRE_CUR_SET(dbc, DB_LOCK_READ, pgno, ret);
+ ACQUIRE_CUR_COUPLE(dbc, DB_LOCK_READ, pgno, ret);
if (ret != 0)
return (ret);
@@ -1507,8 +2195,8 @@ __bam_c_last(dbc)
if (ISLEAF(cp->page))
break;
- pgno =
- GET_BINTERNAL(cp->page, NUM_ENT(cp->page) - O_INDX)->pgno;
+ pgno = GET_BINTERNAL(dbc->dbp, cp->page,
+ NUM_ENT(cp->page) - O_INDX)->pgno;
}
/* If we want a write lock instead of a read lock, get it now. */
@@ -1535,18 +2223,16 @@ __bam_c_last(dbc)
* Move to the next record.
*/
static int
-__bam_c_next(dbc, initial_move)
+__bam_c_next(dbc, initial_move, deleted_okay)
DBC *dbc;
- int initial_move;
+ int initial_move, deleted_okay;
{
BTREE_CURSOR *cp;
- DB *dbp;
db_indx_t adjust;
db_lockmode_t lock_mode;
db_pgno_t pgno;
int ret;
- dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
ret = 0;
@@ -1566,7 +2252,7 @@ __bam_c_next(dbc, initial_move)
F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE : DB_LOCK_READ;
}
if (cp->page == NULL) {
- ACQUIRE_CUR(dbc, lock_mode, ret);
+ ACQUIRE_CUR(dbc, lock_mode, cp->pgno, ret);
if (ret != 0)
return (ret);
}
@@ -1587,12 +2273,13 @@ __bam_c_next(dbc, initial_move)
= NEXT_PGNO(cp->page)) == PGNO_INVALID)
return (DB_NOTFOUND);
- ACQUIRE_CUR_SET(dbc, lock_mode, pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, pgno, ret);
if (ret != 0)
return (ret);
+ cp->indx = 0;
continue;
}
- if (IS_CUR_DELETED(dbc)) {
+ if (!deleted_okay && IS_CUR_DELETED(dbc)) {
cp->indx += adjust;
continue;
}
@@ -1610,13 +2297,11 @@ __bam_c_prev(dbc)
DBC *dbc;
{
BTREE_CURSOR *cp;
- DB *dbp;
db_indx_t adjust;
db_lockmode_t lock_mode;
db_pgno_t pgno;
int ret;
- dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
ret = 0;
@@ -1636,7 +2321,7 @@ __bam_c_prev(dbc)
F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE : DB_LOCK_READ;
}
if (cp->page == NULL) {
- ACQUIRE_CUR(dbc, lock_mode, ret);
+ ACQUIRE_CUR(dbc, lock_mode, cp->pgno, ret);
if (ret != 0)
return (ret);
}
@@ -1648,7 +2333,7 @@ __bam_c_prev(dbc)
PREV_PGNO(cp->page)) == PGNO_INVALID)
return (DB_NOTFOUND);
- ACQUIRE_CUR_SET(dbc, lock_mode, pgno, ret);
+ ACQUIRE_CUR(dbc, lock_mode, pgno, ret);
if (ret != 0)
return (ret);
@@ -1671,8 +2356,9 @@ __bam_c_prev(dbc)
* Move to a specified record.
*/
static int
-__bam_c_search(dbc, key, flags, exactp)
+__bam_c_search(dbc, root_pgno, key, flags, exactp)
DBC *dbc;
+ db_pgno_t root_pgno;
const DBT *key;
u_int32_t flags;
int *exactp;
@@ -1681,7 +2367,7 @@ __bam_c_search(dbc, key, flags, exactp)
BTREE_CURSOR *cp;
DB *dbp;
PAGE *h;
- db_indx_t indx;
+ db_indx_t indx, *inp;
db_pgno_t bt_lpgno;
db_recno_t recno;
u_int32_t sflags;
@@ -1712,6 +2398,9 @@ __bam_c_search(dbc, key, flags, exactp)
case DB_GET_BOTH:
sflags = (F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND) | S_EXACT;
goto search;
+ case DB_GET_BOTH_RANGE:
+ sflags = (F_ISSET(dbc, DBC_RMW) ? S_FIND_WR : S_FIND);
+ goto search;
case DB_SET_RANGE:
sflags =
(F_ISSET(dbc, DBC_RMW) ? S_WRITE : S_READ) | S_DUPFIRST;
@@ -1753,11 +2442,12 @@ fast_search: /*
/* Lock and retrieve the page on which we last inserted. */
h = NULL;
- ACQUIRE(dbc,
- DB_LOCK_WRITE, bt_lpgno, cp->lock, bt_lpgno, h, ret);
+ ACQUIRE_CUR(dbc, DB_LOCK_WRITE, bt_lpgno, ret);
if (ret != 0)
goto fast_miss;
+ h = cp->page;
+ inp = P_INP(dbp, h);
/*
* It's okay if the page type isn't right or it's empty, it
* just means that the world changed.
@@ -1796,7 +2486,7 @@ fast_search: /*
if (flags == DB_KEYLAST)
goto fast_hit;
for (;
- indx > 0 && h->inp[indx - P_INDX] == h->inp[indx];
+ indx > 0 && inp[indx - P_INDX] == inp[indx];
indx -= P_INDX)
;
goto fast_hit;
@@ -1823,7 +2513,7 @@ try_begin: if (h->prev_pgno == PGNO_INVALID) {
goto fast_hit;
for (;
indx < (db_indx_t)(NUM_ENT(h) - P_INDX) &&
- h->inp[indx] == h->inp[indx + P_INDX];
+ inp[indx] == inp[indx + P_INDX];
indx += P_INDX)
;
goto fast_hit;
@@ -1848,12 +2538,14 @@ fast_miss: /*
* This was not the right page, so we do not need to retain
* the lock even in the presence of transactions.
*/
- DISCARD(dbc, 1, cp->lock, h, ret);
+ DISCARD_CUR(dbc, ret);
+ cp->pgno = PGNO_INVALID;
+ (void)__LPUT(dbc, cp->lock);
if (ret != 0)
return (ret);
-search: if ((ret =
- __bam_search(dbc, key, sflags, 1, NULL, exactp)) != 0)
+search: if ((ret = __bam_search(dbc, root_pgno,
+ key, sflags, 1, NULL, exactp)) != 0)
return (ret);
break;
default:
@@ -1870,12 +2562,15 @@ search: if ((ret =
/*
* If we inserted a key into the first or last slot of the tree,
* remember where it was so we can do it more quickly next time.
+ * If there are duplicates and we are inserting into the last slot,
+ * the cursor will point _to_ the last item, not after it, which
+ * is why we subtract P_INDX below.
*/
if (TYPE(cp->page) == P_LBTREE &&
(flags == DB_KEYFIRST || flags == DB_KEYLAST))
t->bt_lpgno =
(NEXT_PGNO(cp->page) == PGNO_INVALID &&
- cp->indx >= NUM_ENT(cp->page)) ||
+ cp->indx >= NUM_ENT(cp->page) - P_INDX) ||
(PREV_PGNO(cp->page) == PGNO_INVALID &&
cp->indx == 0) ? cp->pgno : PGNO_INVALID;
return (0);
@@ -1893,11 +2588,14 @@ __bam_c_physdel(dbc)
DB *dbp;
DBT key;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t pgno;
int delete_page, empty_page, exact, level, ret;
dbp = dbc->dbp;
+ memset(&key, 0, sizeof(DBT));
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
delete_page = empty_page = ret = 0;
@@ -1911,7 +2609,7 @@ __bam_c_physdel(dbc)
* space will never be reused unless the exact same key is specified.
*/
if (delete_page &&
- !F_ISSET(dbc, DBC_OPD) && F_ISSET(dbp, DB_BT_REVSPLIT))
+ !F_ISSET(dbc, DBC_OPD) && F_ISSET(dbp, DB_AM_REVSPLITOFF))
delete_page = 0;
/*
@@ -1926,13 +2624,17 @@ __bam_c_physdel(dbc)
* To delete a leaf page other than an empty root page, we need a
* copy of a key from the page. Use the 0th page index since it's
* the last key the page held.
+ *
+ * !!!
+ * Note that because __bam_c_physdel is always called from a cursor
+ * close, it should be safe to use the cursor's own "my_rkey" memory
+ * to temporarily hold this key. We shouldn't own any returned-data
+ * memory of interest--if we do, we're in trouble anyway.
*/
- if (delete_page) {
- memset(&key, 0, sizeof(DBT));
+ if (delete_page)
if ((ret = __db_ret(dbp, cp->page,
- 0, &key, &dbc->rkey.data, &dbc->rkey.ulen)) != 0)
+ 0, &key, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
return (ret);
- }
/*
* Delete the items. If page isn't empty, we adjust the cursors.
@@ -1940,7 +2642,7 @@ __bam_c_physdel(dbc)
* !!!
* The following operations to delete a page may deadlock. The easy
* scenario is if we're deleting an item because we're closing cursors
- * because we've already deadlocked and want to call txn_abort(). If
+ * because we've already deadlocked and want to call txn->abort. If
* we fail due to deadlock, we'll leave a locked, possibly empty page
* in the tree, which won't be empty long because we'll undo the delete
* when we undo the transaction's modifications.
@@ -1977,8 +2679,8 @@ __bam_c_physdel(dbc)
*/
for (level = LEAFLEVEL;; ++level) {
/* Acquire a page and its parent, locked. */
- if ((ret = __bam_search(
- dbc, &key, S_WRPAIR, level, NULL, &exact)) != 0)
+ if ((ret = __bam_search(dbc, PGNO_INVALID,
+ &key, S_WRPAIR, level, NULL, &exact)) != 0)
return (ret);
/*
@@ -2031,19 +2733,19 @@ __bam_c_physdel(dbc)
*/
switch (TYPE(h)) {
case P_IBTREE:
- pgno = GET_BINTERNAL(h, 0)->pgno;
+ pgno = GET_BINTERNAL(dbp, h, 0)->pgno;
break;
case P_IRECNO:
- pgno = GET_RINTERNAL(h, 0)->pgno;
+ pgno = GET_RINTERNAL(dbp, h, 0)->pgno;
break;
default:
- return (__db_pgfmt(dbp, PGNO(h)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(h)));
}
if ((ret =
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &lock)) != 0)
break;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
break;
BT_STK_PUSH(dbp->dbenv, cp, h, 0, lock, DB_LOCK_WRITE, ret);
if (ret != 0)
@@ -2076,10 +2778,12 @@ __bam_c_getstack(dbc)
BTREE_CURSOR *cp;
DB *dbp;
DBT dbt;
+ DB_MPOOLFILE *mpf;
PAGE *h;
int exact, ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -2087,21 +2791,22 @@ __bam_c_getstack(dbc)
* routine has to already hold a read lock on the page, so there
* is no additional lock to acquire.
*/
- if ((ret = memp_fget(dbp->mpf, &cp->pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &cp->pgno, 0, &h)) != 0)
return (ret);
/* Get a copy of a key from the page. */
memset(&dbt, 0, sizeof(DBT));
if ((ret = __db_ret(dbp,
- h, 0, &dbt, &dbc->rkey.data, &dbc->rkey.ulen)) != 0)
+ h, 0, &dbt, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
goto err;
/* Get a write-locked stack for the page. */
exact = 0;
- ret = __bam_search(dbc, &dbt, S_KEYFIRST, 1, NULL, &exact);
+ ret = __bam_search(dbc, PGNO_INVALID,
+ &dbt, S_KEYFIRST, 1, NULL, &exact);
err: /* Discard the key and the page. */
- if ((t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -2122,7 +2827,8 @@ __bam_isopd(dbc, pgnop)
if (TYPE(dbc->internal->page) != P_LBTREE)
return (0);
- bo = GET_BOVERFLOW(dbc->internal->page, dbc->internal->indx + O_INDX);
+ bo = GET_BOVERFLOW(dbc->dbp,
+ dbc->internal->page, dbc->internal->indx + O_INDX);
if (B_TYPE(bo->type) == B_DUPLICATE) {
*pgnop = bo->pgno;
return (1);
diff --git a/db/btree/bt_delete.c b/db/btree/bt_delete.c
index 972588788..ef6e34caf 100644
--- a/db/btree/bt_delete.c
+++ b/db/btree/bt_delete.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_delete.c,v 11.31 2001/01/17 18:48:46 bostic Exp $";
+static const char revid[] = "$Id: bt_delete.c,v 11.46 2003/06/30 17:19:29 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,88 +53,11 @@ static const char revid[] = "$Id: bt_delete.c,v 11.31 2001/01/17 18:48:46 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "lock.h"
-
-/*
- * __bam_delete --
- * Delete the items referenced by a key.
- *
- * PUBLIC: int __bam_delete __P((DB *, DB_TXN *, DBT *, u_int32_t));
- */
-int
-__bam_delete(dbp, txn, key, flags)
- DB *dbp;
- DB_TXN *txn;
- DBT *key;
- u_int32_t flags;
-{
- DBC *dbc;
- DBT lkey;
- DBT data;
- u_int32_t f_init, f_next;
- int ret, t_ret;
-
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->del");
- DB_CHECK_TXN(dbp, txn);
-
- /* Check for invalid flags. */
- if ((ret =
- __db_delchk(dbp, key, flags, F_ISSET(dbp, DB_AM_RDONLY))) != 0)
- return (ret);
-
- /* Allocate a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
-
- DEBUG_LWRITE(dbc, txn, "bam_delete", key, NULL, flags);
-
- /*
- * Walk a cursor through the key/data pairs, deleting as we go. Set
- * the DB_DBT_USERMEM flag, as this might be a threaded application
- * and the flags checking will catch us. We don't actually want the
- * keys or data, so request a partial of length 0.
- */
- memset(&lkey, 0, sizeof(lkey));
- F_SET(&lkey, DB_DBT_USERMEM | DB_DBT_PARTIAL);
- memset(&data, 0, sizeof(data));
- F_SET(&data, DB_DBT_USERMEM | DB_DBT_PARTIAL);
-
- /*
- * If locking (and we haven't already acquired CDB locks), set the
- * read-modify-write flag.
- */
- f_init = DB_SET;
- f_next = DB_NEXT_DUP;
- if (STD_LOCKING(dbc)) {
- f_init |= DB_RMW;
- f_next |= DB_RMW;
- }
-
- /* Walk through the set of key/data pairs, deleting as we go. */
- if ((ret = dbc->c_get(dbc, key, &data, f_init)) != 0)
- goto err;
- for (;;) {
- if ((ret = dbc->c_del(dbc, 0)) != 0)
- goto err;
- if ((ret = dbc->c_get(dbc, &lkey, &data, f_next)) != 0) {
- if (ret == DB_NOTFOUND) {
- ret = 0;
- break;
- }
- goto err;
- }
- }
-
-err: /* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
- return (ret);
-}
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
/*
* __bam_ditem --
@@ -151,14 +74,18 @@ __bam_ditem(dbc, h, indx)
BINTERNAL *bi;
BKEYDATA *bk;
DB *dbp;
+ DB_MPOOLFILE *mpf;
u_int32_t nbytes;
int ret;
+ db_indx_t *inp;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ inp = P_INP(dbp, h);
switch (TYPE(h)) {
case P_IBTREE:
- bi = GET_BINTERNAL(h, indx);
+ bi = GET_BINTERNAL(dbp, h, indx);
switch (B_TYPE(bi->type)) {
case B_DUPLICATE:
case B_KEYDATA:
@@ -171,7 +98,7 @@ __bam_ditem(dbc, h, indx)
return (ret);
break;
default:
- return (__db_pgfmt(dbp, PGNO(h)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(h)));
}
break;
case P_IRECNO:
@@ -195,7 +122,7 @@ __bam_ditem(dbc, h, indx)
* won't work!
*/
if (indx + P_INDX < (u_int32_t)NUM_ENT(h) &&
- h->inp[indx] == h->inp[indx + P_INDX])
+ inp[indx] == inp[indx + P_INDX])
return (__bam_adjindx(dbc,
h, indx, indx + O_INDX, 0));
/*
@@ -203,14 +130,14 @@ __bam_ditem(dbc, h, indx)
* doesn't matter if we delete the key item before or
* after the data item for the purposes of this one.
*/
- if (indx > 0 && h->inp[indx] == h->inp[indx - P_INDX])
+ if (indx > 0 && inp[indx] == inp[indx - P_INDX])
return (__bam_adjindx(dbc,
h, indx, indx - P_INDX, 0));
}
/* FALLTHROUGH */
case P_LDUP:
case P_LRECNO:
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
switch (B_TYPE(bk->type)) {
case B_DUPLICATE:
nbytes = BOVERFLOW_SIZE;
@@ -218,24 +145,24 @@ __bam_ditem(dbc, h, indx)
case B_OVERFLOW:
nbytes = BOVERFLOW_SIZE;
if ((ret = __db_doff(
- dbc, (GET_BOVERFLOW(h, indx))->pgno)) != 0)
+ dbc, (GET_BOVERFLOW(dbp, h, indx))->pgno)) != 0)
return (ret);
break;
case B_KEYDATA:
nbytes = BKEYDATA_SIZE(bk->len);
break;
default:
- return (__db_pgfmt(dbp, PGNO(h)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(h)));
}
break;
default:
- return (__db_pgfmt(dbp, PGNO(h)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(h)));
}
/* Delete the item and mark the page dirty. */
if ((ret = __db_ditem(dbc, h, indx, nbytes)) != 0)
return (ret);
- if ((ret = memp_fset(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
return (ret);
return (0);
@@ -255,33 +182,37 @@ __bam_adjindx(dbc, h, indx, indx_copy, is_insert)
int is_insert;
{
DB *dbp;
- db_indx_t copy;
+ DB_MPOOLFILE *mpf;
+ db_indx_t copy, *inp;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ inp = P_INP(dbp, h);
/* Log the change. */
- if (DB_LOGGING(dbc) &&
- (ret = __bam_adj_log(dbp->dbenv, dbc->txn, &LSN(h),
- 0, dbp->log_fileid, PGNO(h), &LSN(h), indx, indx_copy,
- (u_int32_t)is_insert)) != 0)
- return (ret);
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_adj_log(dbp, dbc->txn, &LSN(h), 0,
+ PGNO(h), &LSN(h), indx, indx_copy, (u_int32_t)is_insert)) != 0)
+ return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(h));
/* Shuffle the indices and mark the page dirty. */
if (is_insert) {
- copy = h->inp[indx_copy];
+ copy = inp[indx_copy];
if (indx != NUM_ENT(h))
- memmove(&h->inp[indx + O_INDX], &h->inp[indx],
+ memmove(&inp[indx + O_INDX], &inp[indx],
sizeof(db_indx_t) * (NUM_ENT(h) - indx));
- h->inp[indx] = copy;
+ inp[indx] = copy;
++NUM_ENT(h);
} else {
--NUM_ENT(h);
if (indx != NUM_ENT(h))
- memmove(&h->inp[indx], &h->inp[indx + O_INDX],
+ memmove(&inp[indx], &inp[indx + O_INDX],
sizeof(db_indx_t) * (NUM_ENT(h) - indx));
}
- if ((ret = memp_fset(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
return (ret);
return (0);
@@ -303,6 +234,7 @@ __bam_dpages(dbc, stack_epg)
DB *dbp;
DBT a, b;
DB_LOCK c_lock, p_lock;
+ DB_MPOOLFILE *mpf;
EPG *epg;
PAGE *child, *parent;
db_indx_t nitems;
@@ -311,6 +243,7 @@ __bam_dpages(dbc, stack_epg)
int done, ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -328,8 +261,7 @@ __bam_dpages(dbc, stack_epg)
*/
ret = 0;
for (epg = cp->sp; epg < stack_epg; ++epg) {
- if ((t_ret =
- memp_fput(dbp->mpf, epg->page, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, epg->page, 0)) != 0 && ret == 0)
ret = t_ret;
(void)__TLPUT(dbc, epg->lock);
}
@@ -364,7 +296,7 @@ __bam_dpages(dbc, stack_epg)
pgno = PGNO(epg->page);
nitems = NUM_ENT(epg->page);
- if ((ret = memp_fput(dbp->mpf, epg->page, 0)) != 0)
+ if ((ret = __memp_fput(mpf, epg->page, 0)) != 0)
goto err_inc;
(void)__TLPUT(dbc, epg->lock);
@@ -394,7 +326,7 @@ __bam_dpages(dbc, stack_epg)
err_inc: ++epg;
err: for (; epg <= cp->csp; ++epg) {
if (epg->page != NULL)
- (void)memp_fput(dbp->mpf, epg->page, 0);
+ (void)__memp_fput(mpf, epg->page, 0);
(void)__TLPUT(dbc, epg->lock);
}
BT_STK_CLR(cp);
@@ -415,14 +347,15 @@ err: for (; epg <= cp->csp; ++epg) {
for (done = 0; !done;) {
/* Initialize. */
parent = child = NULL;
- p_lock.off = c_lock.off = LOCK_INVALID;
+ LOCK_INIT(p_lock);
+ LOCK_INIT(c_lock);
/* Lock the root. */
pgno = root_pgno;
if ((ret =
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &p_lock)) != 0)
goto stop;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &parent)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &parent)) != 0)
goto stop;
if (NUM_ENT(parent) != 1)
@@ -434,7 +367,7 @@ err: for (; epg <= cp->csp; ++epg) {
* If this is overflow, then try to delete it.
* The child may or may not still point at it.
*/
- bi = GET_BINTERNAL(parent, 0);
+ bi = GET_BINTERNAL(dbp, parent, 0);
if (B_TYPE(bi->type) == B_OVERFLOW)
if ((ret = __db_doff(dbc,
((BOVERFLOW *)bi->data)->pgno)) != 0)
@@ -442,7 +375,7 @@ err: for (; epg <= cp->csp; ++epg) {
pgno = bi->pgno;
break;
case P_IRECNO:
- pgno = GET_RINTERNAL(parent, 0)->pgno;
+ pgno = GET_RINTERNAL(dbp, parent, 0)->pgno;
break;
default:
goto stop;
@@ -452,24 +385,24 @@ err: for (; epg <= cp->csp; ++epg) {
if ((ret =
__db_lget(dbc, 0, pgno, DB_LOCK_WRITE, 0, &c_lock)) != 0)
goto stop;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &child)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &child)) != 0)
goto stop;
/* Log the change. */
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
memset(&a, 0, sizeof(a));
a.data = child;
a.size = dbp->pgsize;
memset(&b, 0, sizeof(b));
- b.data = P_ENTRY(parent, 0);
+ b.data = P_ENTRY(dbp, parent, 0);
b.size = TYPE(parent) == P_IRECNO ? RINTERNAL_SIZE :
BINTERNAL_SIZE(((BINTERNAL *)b.data)->len);
- if ((ret =
- __bam_rsplit_log(dbp->dbenv, dbc->txn, &child->lsn,
- 0, dbp->log_fileid, PGNO(child), &a, PGNO(parent),
- RE_NREC(parent), &b, &parent->lsn)) != 0)
+ if ((ret = __bam_rsplit_log(dbp, dbc->txn,
+ &child->lsn, 0, PGNO(child), &a, PGNO(parent),
+ RE_NREC(parent), &b, &parent->lsn)) != 0)
goto stop;
- }
+ } else
+ LSN_NOT_LOGGED(child->lsn);
/*
* Make the switch.
@@ -491,9 +424,9 @@ err: for (; epg <= cp->csp; ++epg) {
RE_NREC_SET(parent, rcnt);
/* Mark the pages dirty. */
- if ((ret = memp_fset(dbp->mpf, parent, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, parent, DB_MPOOL_DIRTY)) != 0)
goto stop;
- if ((ret = memp_fset(dbp->mpf, child, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, child, DB_MPOOL_DIRTY)) != 0)
goto stop;
/* Adjust the cursors. */
@@ -514,15 +447,13 @@ err: for (; epg <= cp->csp; ++epg) {
if (0) {
stop: done = 1;
}
- if (p_lock.off != LOCK_INVALID)
- (void)__TLPUT(dbc, p_lock);
+ (void)__TLPUT(dbc, p_lock);
if (parent != NULL &&
- (t_ret = memp_fput(dbp->mpf, parent, 0)) != 0 && ret == 0)
+ (t_ret = __memp_fput(mpf, parent, 0)) != 0 && ret == 0)
ret = t_ret;
- if (c_lock.off != LOCK_INVALID)
- (void)__TLPUT(dbc, c_lock);
+ (void)__TLPUT(dbc, c_lock);
if (child != NULL &&
- (t_ret = memp_fput(dbp->mpf, child, 0)) != 0 && ret == 0)
+ (t_ret = __memp_fput(mpf, child, 0)) != 0 && ret == 0)
ret = t_ret;
}
diff --git a/db/btree/bt_method.c b/db/btree/bt_method.c
index 5e3af27d0..84abe96a2 100644
--- a/db/btree/bt_method.c
+++ b/db/btree/bt_method.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_method.c,v 11.20 2000/11/30 00:58:28 ubell Exp $";
+static const char revid[] = "$Id: bt_method.c,v 11.34 2003/06/30 17:19:32 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,19 +16,22 @@ static const char revid[] = "$Id: bt_method.c,v 11.20 2000/11/30 00:58:28 ubell
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "qam.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
+#include "dbinc/qam.h"
-static int __bam_set_bt_compare
- __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
static int __bam_set_bt_maxkey __P((DB *, u_int32_t));
+static int __bam_get_bt_minkey __P((DB *, u_int32_t *));
static int __bam_set_bt_minkey __P((DB *, u_int32_t));
static int __bam_set_bt_prefix
__P((DB *, size_t(*)(DB *, const DBT *, const DBT *)));
+static int __ram_get_re_delim __P((DB *, int *));
static int __ram_set_re_delim __P((DB *, int));
+static int __ram_get_re_len __P((DB *, u_int32_t *));
static int __ram_set_re_len __P((DB *, u_int32_t));
+static int __ram_get_re_pad __P((DB *, int *));
static int __ram_set_re_pad __P((DB *, int));
+static int __ram_get_re_source __P((DB *, const char **));
static int __ram_set_re_source __P((DB *, const char *));
/*
@@ -55,6 +58,7 @@ __bam_db_create(dbp)
dbp->set_bt_compare = __bam_set_bt_compare;
dbp->set_bt_maxkey = __bam_set_bt_maxkey;
+ dbp->get_bt_minkey = __bam_get_bt_minkey;
dbp->set_bt_minkey = __bam_set_bt_minkey;
dbp->set_bt_prefix = __bam_set_bt_prefix;
@@ -62,9 +66,13 @@ __bam_db_create(dbp)
t->re_delim = '\n';
t->re_eof = 1;
+ dbp->get_re_delim = __ram_get_re_delim;
dbp->set_re_delim = __ram_set_re_delim;
+ dbp->get_re_len = __ram_get_re_len;
dbp->set_re_len = __ram_set_re_len;
+ dbp->get_re_pad = __ram_get_re_pad;
dbp->set_re_pad = __ram_set_re_pad;
+ dbp->get_re_source = __ram_get_re_source;
dbp->set_re_source = __ram_set_re_source;
return (0);
@@ -82,7 +90,8 @@ __bam_db_close(dbp)
{
BTREE *t;
- t = dbp->bt_internal;
+ if ((t = dbp->bt_internal) == NULL)
+ return (0);
/* Recno */
/* Close any backing source file descriptor. */
if (t->re_fp != NULL)
@@ -90,15 +99,46 @@ __bam_db_close(dbp)
/* Free any backing source file name. */
if (t->re_source != NULL)
- __os_freestr(t->re_source);
+ __os_free(dbp->dbenv, t->re_source);
- __os_free(t, sizeof(BTREE));
+ __os_free(dbp->dbenv, t);
dbp->bt_internal = NULL;
return (0);
}
/*
+ * __bam_map_flags --
+ * Map Btree specific flags from public to the internal values.
+ *
+ * PUBLIC: void __bam_map_flags __P((DB *, u_int32_t *, u_int32_t *));
+ */
+void
+__bam_map_flags(dbp, inflagsp, outflagsp)
+ DB *dbp;
+ u_int32_t *inflagsp, *outflagsp;
+{
+ COMPQUIET(dbp, NULL);
+
+ if (FLD_ISSET(*inflagsp, DB_DUP)) {
+ FLD_SET(*outflagsp, DB_AM_DUP);
+ FLD_CLR(*inflagsp, DB_DUP);
+ }
+ if (FLD_ISSET(*inflagsp, DB_DUPSORT)) {
+ FLD_SET(*outflagsp, DB_AM_DUP | DB_AM_DUPSORT);
+ FLD_CLR(*inflagsp, DB_DUPSORT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_RECNUM)) {
+ FLD_SET(*outflagsp, DB_AM_RECNUM);
+ FLD_CLR(*inflagsp, DB_RECNUM);
+ }
+ if (FLD_ISSET(*inflagsp, DB_REVSPLITOFF)) {
+ FLD_SET(*outflagsp, DB_AM_REVSPLITOFF);
+ FLD_CLR(*inflagsp, DB_REVSPLITOFF);
+ }
+}
+
+/*
* __bam_set_flags --
* Set Btree specific flags.
*
@@ -112,50 +152,31 @@ __bam_set_flags(dbp, flagsp)
u_int32_t flags;
flags = *flagsp;
- if (LF_ISSET(DB_DUP | DB_DUPSORT | DB_RECNUM | DB_REVSPLITOFF)) {
+ if (LF_ISSET(DB_DUP | DB_DUPSORT | DB_RECNUM | DB_REVSPLITOFF))
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_flags");
- /*
- * The DB_DUP and DB_DUPSORT flags are shared by the Hash
- * and Btree access methods.
- */
- if (LF_ISSET(DB_DUP | DB_DUPSORT))
- DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE | DB_OK_HASH);
-
- if (LF_ISSET(DB_RECNUM | DB_REVSPLITOFF))
- DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
-
- if (LF_ISSET(DB_DUP | DB_DUPSORT)) {
- /* DB_DUP/DB_DUPSORT is incompatible with DB_RECNUM. */
- if (F_ISSET(dbp, DB_BT_RECNUM))
- goto incompat;
-
- if (LF_ISSET(DB_DUPSORT)) {
- if (dbp->dup_compare == NULL)
- dbp->dup_compare = __bam_defcmp;
- F_SET(dbp, DB_AM_DUPSORT);
- }
-
- F_SET(dbp, DB_AM_DUP);
- LF_CLR(DB_DUP | DB_DUPSORT);
- }
-
- if (LF_ISSET(DB_RECNUM)) {
- /* DB_RECNUM is incompatible with DB_DUP/DB_DUPSORT. */
- if (F_ISSET(dbp, DB_AM_DUP))
- goto incompat;
-
- F_SET(dbp, DB_BT_RECNUM);
- LF_CLR(DB_RECNUM);
- }
-
- if (LF_ISSET(DB_REVSPLITOFF)) {
- F_SET(dbp, DB_BT_REVSPLIT);
- LF_CLR(DB_REVSPLITOFF);
- }
-
- *flagsp = flags;
- }
+ /*
+ * The DB_DUP and DB_DUPSORT flags are shared by the Hash
+ * and Btree access methods.
+ */
+ if (LF_ISSET(DB_DUP | DB_DUPSORT))
+ DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE | DB_OK_HASH);
+
+ if (LF_ISSET(DB_RECNUM | DB_REVSPLITOFF))
+ DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
+
+ /* DB_DUP/DB_DUPSORT is incompatible with DB_RECNUM. */
+ if (LF_ISSET(DB_DUP | DB_DUPSORT) && F_ISSET(dbp, DB_AM_RECNUM))
+ goto incompat;
+
+ /* DB_RECNUM is incompatible with DB_DUP/DB_DUPSORT. */
+ if (LF_ISSET(DB_RECNUM) && F_ISSET(dbp, DB_AM_DUP))
+ goto incompat;
+
+ if (LF_ISSET(DB_DUPSORT) && dbp->dup_compare == NULL)
+ dbp->dup_compare = __bam_defcmp;
+
+ __bam_map_flags(dbp, flagsp, &dbp->flags);
return (0);
incompat:
@@ -165,15 +186,18 @@ incompat:
/*
* __bam_set_bt_compare --
* Set the comparison function.
+ *
+ * PUBLIC: int __bam_set_bt_compare
+ * PUBLIC: __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
*/
-static int
+int
__bam_set_bt_compare(dbp, func)
DB *dbp;
int (*func) __P((DB *, const DBT *, const DBT *));
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_bt_compare");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_compare");
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
t = dbp->bt_internal;
@@ -200,7 +224,7 @@ __bam_set_bt_maxkey(dbp, bt_maxkey)
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_bt_maxkey");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_maxkey");
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
t = dbp->bt_internal;
@@ -215,6 +239,24 @@ __bam_set_bt_maxkey(dbp, bt_maxkey)
}
/*
+ * __db_get_bt_minkey --
+ * Get the minimum keys per page.
+ */
+static int
+__bam_get_bt_minkey(dbp, bt_minkeyp)
+ DB *dbp;
+ u_int32_t *bt_minkeyp;
+{
+ BTREE *t;
+
+ DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
+
+ t = dbp->bt_internal;
+ *bt_minkeyp = t->bt_minkey;
+ return (0);
+}
+
+/*
* __bam_set_bt_minkey --
* Set the minimum keys per page.
*/
@@ -225,7 +267,7 @@ __bam_set_bt_minkey(dbp, bt_minkey)
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_bt_minkey");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_minkey");
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
t = dbp->bt_internal;
@@ -250,7 +292,7 @@ __bam_set_bt_prefix(dbp, func)
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_bt_prefix");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_bt_prefix");
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
t = dbp->bt_internal;
@@ -260,6 +302,29 @@ __bam_set_bt_prefix(dbp, func)
}
/*
+ * __ram_map_flags --
+ * Map Recno specific flags from public to the internal values.
+ *
+ * PUBLIC: void __ram_map_flags __P((DB *, u_int32_t *, u_int32_t *));
+ */
+void
+__ram_map_flags(dbp, inflagsp, outflagsp)
+ DB *dbp;
+ u_int32_t *inflagsp, *outflagsp;
+{
+ COMPQUIET(dbp, NULL);
+
+ if (FLD_ISSET(*inflagsp, DB_RENUMBER)) {
+ FLD_SET(*outflagsp, DB_AM_RENUMBER);
+ FLD_CLR(*inflagsp, DB_RENUMBER);
+ }
+ if (FLD_ISSET(*inflagsp, DB_SNAPSHOT)) {
+ FLD_SET(*outflagsp, DB_AM_SNAPSHOT);
+ FLD_CLR(*inflagsp, DB_SNAPSHOT);
+ }
+}
+
+/*
* __ram_set_flags --
* Set Recno specific flags.
*
@@ -275,21 +340,27 @@ __ram_set_flags(dbp, flagsp)
flags = *flagsp;
if (LF_ISSET(DB_RENUMBER | DB_SNAPSHOT)) {
DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_flags");
-
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
+ }
- if (LF_ISSET(DB_RENUMBER)) {
- F_SET(dbp, DB_RE_RENUMBER);
- LF_CLR(DB_RENUMBER);
- }
+ __ram_map_flags(dbp, flagsp, &dbp->flags);
+ return (0);
+}
- if (LF_ISSET(DB_SNAPSHOT)) {
- F_SET(dbp, DB_RE_SNAPSHOT);
- LF_CLR(DB_SNAPSHOT);
- }
+/*
+ * __db_get_re_delim --
+ * Get the variable-length input record delimiter.
+ */
+static int
+__ram_get_re_delim(dbp, re_delimp)
+ DB *dbp;
+ int *re_delimp;
+{
+ BTREE *t;
- *flagsp = flags;
- }
+ DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
+ t = dbp->bt_internal;
+ *re_delimp = t->re_delim;
return (0);
}
@@ -304,18 +375,35 @@ __ram_set_re_delim(dbp, re_delim)
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_re_delim");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_delim");
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
t = dbp->bt_internal;
t->re_delim = re_delim;
- F_SET(dbp, DB_RE_DELIMITER);
+ F_SET(dbp, DB_AM_DELIMITER);
return (0);
}
/*
+ * __db_get_re_len --
+ * Get the variable-length input record length.
+ */
+static int
+__ram_get_re_len(dbp, re_lenp)
+ DB *dbp;
+ u_int32_t *re_lenp;
+{
+ BTREE *t;
+
+ DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
+ t = dbp->bt_internal;
+ *re_lenp = t->re_len;
+ return (0);
+}
+
+/*
* __ram_set_re_len --
* Set the variable-length input record length.
*/
@@ -327,7 +415,7 @@ __ram_set_re_len(dbp, re_len)
BTREE *t;
QUEUE *q;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_re_len");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_len");
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
t = dbp->bt_internal;
@@ -336,12 +424,30 @@ __ram_set_re_len(dbp, re_len)
q = dbp->q_internal;
q->re_len = re_len;
- F_SET(dbp, DB_RE_FIXEDLEN);
+ F_SET(dbp, DB_AM_FIXEDLEN);
return (0);
}
/*
+ * __db_get_re_pad --
+ * Get the fixed-length record pad character.
+ */
+static int
+__ram_get_re_pad(dbp, re_padp)
+ DB *dbp;
+ int *re_padp;
+{
+ BTREE *t;
+
+ DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
+
+ t = dbp->bt_internal;
+ *re_padp = t->re_pad;
+ return (0);
+}
+
+/*
* __ram_set_re_pad --
* Set the fixed-length record pad character.
*/
@@ -353,7 +459,7 @@ __ram_set_re_pad(dbp, re_pad)
BTREE *t;
QUEUE *q;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_re_pad");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_pad");
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
t = dbp->bt_internal;
@@ -362,8 +468,26 @@ __ram_set_re_pad(dbp, re_pad)
q = dbp->q_internal;
q->re_pad = re_pad;
- F_SET(dbp, DB_RE_PAD);
+ F_SET(dbp, DB_AM_PAD);
+
+ return (0);
+}
+
+/*
+ * __db_get_re_source --
+ * Get the backing source file name.
+ */
+static int
+__ram_get_re_source(dbp, re_sourcep)
+ DB *dbp;
+ const char **re_sourcep;
+{
+ BTREE *t;
+ DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
+
+ t = dbp->bt_internal;
+ *re_sourcep = t->re_source;
return (0);
}
@@ -378,7 +502,7 @@ __ram_set_re_source(dbp, re_source)
{
BTREE *t;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_re_source");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_re_source");
DB_ILLEGAL_METHOD(dbp, DB_OK_RECNO);
t = dbp->bt_internal;
diff --git a/db/btree/bt_open.c b/db/btree/bt_open.c
index 405c1880f..20f594fe5 100644
--- a/db/btree/bt_open.c
+++ b/db/btree/bt_open.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,47 +43,48 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_open.c,v 11.42 2000/11/30 00:58:28 ubell Exp $";
+static const char revid[] = "$Id: bt_open.c,v 11.87 2003/07/17 01:39:09 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <limits.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "btree.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "log.h"
-#include "mp.h"
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/btree.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/fop.h"
+
+static void __bam_init_meta __P((DB *, BTMETA *, db_pgno_t, DB_LSN *));
/*
* __bam_open --
* Open a btree.
*
- * PUBLIC: int __bam_open __P((DB *, const char *, db_pgno_t, u_int32_t));
+ * PUBLIC: int __bam_open __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, db_pgno_t, u_int32_t));
*/
int
-__bam_open(dbp, name, base_pgno, flags)
+__bam_open(dbp, txn, name, base_pgno, flags)
DB *dbp;
+ DB_TXN *txn;
const char *name;
db_pgno_t base_pgno;
u_int32_t flags;
{
BTREE *t;
+ COMPQUIET(name, NULL);
t = dbp->bt_internal;
- /* Initialize the remaining fields/methods of the DB. */
- dbp->del = __bam_delete;
- dbp->key_range = __bam_key_range;
- dbp->stat = __bam_stat;
-
/*
* We don't permit the user to specify a prefix routine if they didn't
* also specify a comparison routine, they can't know enough about our
@@ -99,8 +100,8 @@ __bam_open(dbp, name, base_pgno, flags)
* Verify that the bt_minkey value specified won't cause the
* calculation of ovflsize to underflow [#2406] for this pagesize.
*/
- if (B_MINKEY_TO_OVFLSIZE(t->bt_minkey, dbp->pgsize) >
- B_MINKEY_TO_OVFLSIZE(DEFMINKEYPAGE, dbp->pgsize)) {
+ if (B_MINKEY_TO_OVFLSIZE(dbp, t->bt_minkey, dbp->pgsize) >
+ B_MINKEY_TO_OVFLSIZE(dbp, DEFMINKEYPAGE, dbp->pgsize)) {
__db_err(dbp->dbenv,
"bt_minkey value of %lu too high for page size of %lu",
(u_long)t->bt_minkey, (u_long)dbp->pgsize);
@@ -108,7 +109,7 @@ __bam_open(dbp, name, base_pgno, flags)
}
/* Start up the tree. */
- return (__bam_read_root(dbp, name, base_pgno, flags));
+ return (__bam_read_root(dbp, txn, base_pgno, flags));
}
/*
@@ -143,6 +144,7 @@ __bam_metachk(dbp, name, btm)
name, (u_long)vers);
return (DB_OLD_VERSION);
case 8:
+ case 9:
break;
default:
__db_err(dbenv,
@@ -187,13 +189,13 @@ __bam_metachk(dbp, name, btm)
if (F_ISSET(&btm->dbmeta, BTM_RECNUM)) {
if (dbp->type != DB_BTREE)
goto wrong_type;
- F_SET(dbp, DB_BT_RECNUM);
+ F_SET(dbp, DB_AM_RECNUM);
if ((ret = __db_fcchk(dbenv,
- "DB->open", dbp->flags, DB_AM_DUP, DB_BT_RECNUM)) != 0)
+ "DB->open", dbp->flags, DB_AM_DUP, DB_AM_RECNUM)) != 0)
return (ret);
} else
- if (F_ISSET(dbp, DB_BT_RECNUM)) {
+ if (F_ISSET(dbp, DB_AM_RECNUM)) {
__db_err(dbenv,
"%s: DB_RECNUM specified to open method but not set in database",
name);
@@ -203,9 +205,9 @@ __bam_metachk(dbp, name, btm)
if (F_ISSET(&btm->dbmeta, BTM_FIXEDLEN)) {
if (dbp->type != DB_RECNO)
goto wrong_type;
- F_SET(dbp, DB_RE_FIXEDLEN);
+ F_SET(dbp, DB_AM_FIXEDLEN);
} else
- if (F_ISSET(dbp, DB_RE_FIXEDLEN)) {
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
__db_err(dbenv,
"%s: DB_FIXEDLEN specified to open method but not set in database",
name);
@@ -215,9 +217,9 @@ __bam_metachk(dbp, name, btm)
if (F_ISSET(&btm->dbmeta, BTM_RENUMBER)) {
if (dbp->type != DB_RECNO)
goto wrong_type;
- F_SET(dbp, DB_RE_RENUMBER);
+ F_SET(dbp, DB_AM_RENUMBER);
} else
- if (F_ISSET(dbp, DB_RE_RENUMBER)) {
+ if (F_ISSET(dbp, DB_AM_RENUMBER)) {
__db_err(dbenv,
"%s: DB_RENUMBER specified to open method but not set in database",
name);
@@ -266,116 +268,137 @@ wrong_type:
/*
* __bam_read_root --
- * Check (and optionally create) a tree.
+ * Read the root page and check a tree.
*
- * PUBLIC: int __bam_read_root __P((DB *, const char *, db_pgno_t, u_int32_t));
+ * PUBLIC: int __bam_read_root __P((DB *, DB_TXN *, db_pgno_t, u_int32_t));
*/
int
-__bam_read_root(dbp, name, base_pgno, flags)
+__bam_read_root(dbp, txn, base_pgno, flags)
DB *dbp;
- const char *name;
+ DB_TXN *txn;
db_pgno_t base_pgno;
u_int32_t flags;
{
BTMETA *meta;
BTREE *t;
DBC *dbc;
- DB_LSN orig_lsn;
DB_LOCK metalock;
- PAGE *root;
- int locked, ret, t_ret;
+ DB_MPOOLFILE *mpf;
+ int ret, t_ret;
- ret = 0;
- t = dbp->bt_internal;
meta = NULL;
- root = NULL;
- locked = 0;
+ t = dbp->bt_internal;
+ LOCK_INIT(metalock);
+ mpf = dbp->mpf;
+ ret = 0;
- /*
- * Get a cursor. If DB_CREATE is specified, we may be creating
- * the root page, and to do that safely in CDB we need a write
- * cursor. In STD_LOCKING mode, we'll synchronize using the
- * meta page lock instead.
- */
- if ((ret = dbp->cursor(dbp, dbp->open_txn,
- &dbc, LF_ISSET(DB_CREATE) && CDB_LOCKING(dbp->dbenv) ?
- DB_WRITECURSOR : 0)) != 0)
+ /* Get a cursor. */
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
return (ret);
- /* Get, and optionally create the metadata page. */
+ /* Get the metadata page. */
if ((ret =
__db_lget(dbc, 0, base_pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = memp_fget(
- dbp->mpf, &base_pgno, DB_MPOOL_CREATE, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &base_pgno, 0, &meta)) != 0)
goto err;
/*
- * If the magic number is correct, we're not creating the tree.
- * Correct any fields that may not be right. Note, all of the
- * local flags were set by DB->open.
+ * If the magic number is set, the tree has been created. Correct
+ * any fields that may not be right. Note, all of the local flags
+ * were set by DB->open.
+ *
+ * Otherwise, we'd better be in recovery or abort, in which case the
+ * metadata page will be created/initialized elsewhere.
*/
-again: if (meta->dbmeta.magic != 0) {
+ if (meta->dbmeta.magic == DB_BTREEMAGIC) {
t->bt_maxkey = meta->maxkey;
t->bt_minkey = meta->minkey;
- t->re_pad = meta->re_pad;
+ t->re_pad = (int)meta->re_pad;
t->re_len = meta->re_len;
t->bt_meta = base_pgno;
t->bt_root = meta->root;
-
- (void)memp_fput(dbp->mpf, meta, 0);
- meta = NULL;
- goto done;
+ } else {
+ DB_ASSERT(IS_RECOVERING(dbp->dbenv) ||
+ F_ISSET(dbp, DB_AM_RECOVER));
}
- /* In recovery if it's not there it will be created elsewhere.*/
- if (IS_RECOVERING(dbp->dbenv))
- goto done;
-
- /* If we're doing CDB; we now have to get the write lock. */
- if (CDB_LOCKING(dbp->dbenv)) {
- /*
- * We'd better have DB_CREATE set if we're actually doing
- * the create.
- */
- DB_ASSERT(LF_ISSET(DB_CREATE));
- if ((ret = lock_get(dbp->dbenv, dbc->locker, DB_LOCK_UPGRADE,
- &dbc->lock_dbt, DB_LOCK_WRITE, &dbc->mylock)) != 0)
- goto err;
- }
+ /*
+ * !!!
+ * If creating a subdatabase, we've already done an insert when
+ * we put the subdatabase's entry into the master database, so
+ * our last-page-inserted value is wrongly initialized for the
+ * master database, not the subdatabase we're creating. I'm not
+ * sure where the *right* place to clear this value is, it's not
+ * intuitively obvious that it belongs here.
+ */
+ t->bt_lpgno = PGNO_INVALID;
/*
- * If we are doing locking, relase the read lock and get a write lock.
- * We want to avoid deadlock.
+ * We must initialize last_pgno, it could be stale.
+ * We update this without holding the meta page write
+ * locked. This is ok since two threads in the code
+ * must be setting it to the same value. SR #7159.
*/
- if (locked == 0 && STD_LOCKING(dbc)) {
- if ((ret = __LPUT(dbc, metalock)) != 0)
- goto err;
- if ((ret = __db_lget(dbc,
- 0, base_pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
- goto err;
- locked = 1;
- goto again;
- }
+ if (!LF_ISSET(DB_RDONLY) && dbp->meta_pgno == PGNO_BASE_MD) {
+ __memp_last_pgno(mpf, &meta->dbmeta.last_pgno);
+ ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ } else
+ ret = __memp_fput(mpf, meta, 0);
+ meta = NULL;
+
+err: /* Put the metadata page back. */
+ if (meta != NULL &&
+ (t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __bam_init_meta --
+ *
+ * Initialize a btree meta-data page. The following fields may need
+ * to be updated later: last_pgno, root.
+ */
+static void
+__bam_init_meta(dbp, meta, pgno, lsnp)
+ DB *dbp;
+ BTMETA *meta;
+ db_pgno_t pgno;
+ DB_LSN *lsnp;
+{
+ BTREE *t;
- /* Initialize the tree structure metadata information. */
- orig_lsn = meta->dbmeta.lsn;
memset(meta, 0, sizeof(BTMETA));
- meta->dbmeta.lsn = orig_lsn;
- meta->dbmeta.pgno = base_pgno;
+ meta->dbmeta.lsn = *lsnp;
+ meta->dbmeta.pgno = pgno;
meta->dbmeta.magic = DB_BTREEMAGIC;
meta->dbmeta.version = DB_BTREEVERSION;
meta->dbmeta.pagesize = dbp->pgsize;
+ if (F_ISSET(dbp, DB_AM_CHKSUM))
+ FLD_SET(meta->dbmeta.metaflags, DBMETA_CHKSUM);
+ if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
+ meta->dbmeta.encrypt_alg =
+ ((DB_CIPHER *)dbp->dbenv->crypto_handle)->alg;
+ DB_ASSERT(meta->dbmeta.encrypt_alg != 0);
+ meta->crypto_magic = meta->dbmeta.magic;
+ }
meta->dbmeta.type = P_BTREEMETA;
meta->dbmeta.free = PGNO_INVALID;
+ meta->dbmeta.last_pgno = pgno;
if (F_ISSET(dbp, DB_AM_DUP))
F_SET(&meta->dbmeta, BTM_DUP);
- if (F_ISSET(dbp, DB_RE_FIXEDLEN))
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN))
F_SET(&meta->dbmeta, BTM_FIXEDLEN);
- if (F_ISSET(dbp, DB_BT_RECNUM))
+ if (F_ISSET(dbp, DB_AM_RECNUM))
F_SET(&meta->dbmeta, BTM_RECNUM);
- if (F_ISSET(dbp, DB_RE_RENUMBER))
+ if (F_ISSET(dbp, DB_AM_RENUMBER))
F_SET(&meta->dbmeta, BTM_RENUMBER);
if (F_ISSET(dbp, DB_AM_SUBDB))
F_SET(&meta->dbmeta, BTM_SUBDB);
@@ -385,14 +408,170 @@ again: if (meta->dbmeta.magic != 0) {
F_SET(&meta->dbmeta, BTM_RECNO);
memcpy(meta->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
+ t = dbp->bt_internal;
meta->maxkey = t->bt_maxkey;
meta->minkey = t->bt_minkey;
meta->re_len = t->re_len;
- meta->re_pad = t->re_pad;
+ meta->re_pad = (u_int32_t)t->re_pad;
+}
+
+/*
+ * __bam_new_file --
+ * Create the necessary pages to begin a new database file.
+ *
+ * This code appears more complex than it is because of the two cases (named
+ * and unnamed). The way to read the code is that for each page being created,
+ * there are three parts: 1) a "get page" chunk (which either uses malloc'd
+ * memory or calls __memp_fget), 2) the initialization, and 3) the "put page"
+ * chunk which either does a fop write or an __memp_fput.
+ *
+ * PUBLIC: int __bam_new_file __P((DB *, DB_TXN *, DB_FH *, const char *));
+ */
+int
+__bam_new_file(dbp, txn, fhp, name)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_FH *fhp;
+ const char *name;
+{
+ BTMETA *meta;
+ DB_ENV *dbenv;
+ DB_LSN lsn;
+ DB_MPOOLFILE *mpf;
+ DB_PGINFO pginfo;
+ DBT pdbt;
+ PAGE *root;
+ db_pgno_t pgno;
+ int ret;
+ void *buf;
- /* If necessary, log the meta-data and root page creates. */
- if ((ret = __db_log_page(dbp,
- name, &orig_lsn, base_pgno, (PAGE *)meta)) != 0)
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ root = NULL;
+ meta = NULL;
+ memset(&pdbt, 0, sizeof(pdbt));
+ buf = NULL;
+
+ /* Build meta-data page. */
+
+ if (name == NULL) {
+ pgno = PGNO_BASE_MD;
+ ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &meta);
+ } else {
+ pginfo.db_pagesize = dbp->pgsize;
+ pginfo.flags =
+ F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
+ pginfo.type = dbp->type;
+ pdbt.data = &pginfo;
+ pdbt.size = sizeof(pginfo);
+ ret = __os_calloc(dbp->dbenv, 1, dbp->pgsize, &buf);
+ meta = (BTMETA *)buf;
+ }
+ if (ret != 0)
+ return (ret);
+
+ LSN_NOT_LOGGED(lsn);
+ __bam_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
+ meta->root = 1;
+ meta->dbmeta.last_pgno = 1;
+
+ if (name == NULL)
+ ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ else {
+ if ((ret = __db_pgout(dbenv, PGNO_BASE_MD, meta, &pdbt)) != 0)
+ goto err;
+ ret = __fop_write(dbenv, txn, name,
+ DB_APP_DATA, fhp, dbp->pgsize, 0, 0, buf, dbp->pgsize, 1,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
+ }
+ if (ret != 0)
+ goto err;
+ meta = NULL;
+
+ /* Now build root page. */
+ if (name == NULL) {
+ pgno = 1;
+ if ((ret =
+ __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &root)) != 0)
+ goto err;
+ } else {
+#ifdef DIAGNOSTIC
+ memset(buf, CLEAR_BYTE, dbp->pgsize);
+#endif
+ root = (PAGE *)buf;
+ }
+
+ P_INIT(root, dbp->pgsize, 1, PGNO_INVALID, PGNO_INVALID,
+ LEAFLEVEL, dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE);
+ LSN_NOT_LOGGED(root->lsn);
+
+ if (name == NULL)
+ ret = __memp_fput(mpf, root, DB_MPOOL_DIRTY);
+ else {
+ if ((ret = __db_pgout(dbenv, root->pgno, root, &pdbt)) != 0)
+ goto err;
+ ret = __fop_write(dbenv, txn, name,
+ DB_APP_DATA, fhp, dbp->pgsize, 1, 0, buf, dbp->pgsize, 1,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
+ }
+ if (ret != 0)
+ goto err;
+ root = NULL;
+
+err: if (buf != NULL)
+ __os_free(dbenv, buf);
+ else {
+ if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+ if (root != NULL)
+ (void)__memp_fput(mpf, root, 0);
+ }
+ return (ret);
+}
+
+/*
+ * __bam_new_subdb --
+ * Create a metadata page and a root page for a new btree.
+ *
+ * PUBLIC: int __bam_new_subdb __P((DB *, DB *, DB_TXN *));
+ */
+int
+__bam_new_subdb(mdbp, dbp, txn)
+ DB *mdbp, *dbp;
+ DB_TXN *txn;
+{
+ BTMETA *meta;
+ DBC *dbc;
+ DB_ENV *dbenv;
+ DB_LOCK metalock;
+ DB_LSN lsn;
+ DB_MPOOLFILE *mpf;
+ PAGE *root;
+ int ret, t_ret;
+
+ dbenv = mdbp->dbenv;
+ mpf = mdbp->mpf;
+ dbc = NULL;
+ meta = NULL;
+ root = NULL;
+
+ if ((ret = __db_cursor(mdbp, txn,
+ &dbc, CDB_LOCKING(dbenv) ? DB_WRITECURSOR : 0)) != 0)
+ return (ret);
+
+ /* Get, and optionally create the metadata page. */
+ if ((ret = __db_lget(dbc,
+ 0, dbp->meta_pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ goto err;
+ if ((ret =
+ __memp_fget(mpf, &dbp->meta_pgno, DB_MPOOL_CREATE, &meta)) != 0)
+ goto err;
+
+ /* Build meta-data page. */
+ lsn = meta->dbmeta.lsn;
+ __bam_init_meta(dbp, meta, dbp->meta_pgno, &lsn);
+ if ((ret = __db_log_page(mdbp,
+ txn, &meta->dbmeta.lsn, dbp->meta_pgno, (PAGE *)meta)) != 0)
goto err;
/* Create and initialize a root page. */
@@ -401,68 +580,35 @@ again: if (meta->dbmeta.magic != 0) {
goto err;
root->level = LEAFLEVEL;
- if (dbp->open_txn != NULL && (ret = __bam_root_log(dbp->dbenv,
- dbp->open_txn, &meta->dbmeta.lsn, 0, dbp->log_fileid,
+ if (DBENV_LOGGING(dbenv) &&
+ (ret = __bam_root_log(mdbp, txn, &meta->dbmeta.lsn, 0,
meta->dbmeta.pgno, root->pgno, &meta->dbmeta.lsn)) != 0)
goto err;
meta->root = root->pgno;
-
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTLOGMETA, ret, name);
- if ((ret = __db_log_page(dbp,
- name, &root->lsn, root->pgno, root)) != 0)
+ if ((ret =
+ __db_log_page(mdbp, txn, &root->lsn, root->pgno, root)) != 0)
goto err;
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTLOG, ret, name);
-
- t->bt_meta = base_pgno;
- t->bt_root = root->pgno;
/* Release the metadata and root pages. */
- if ((ret = memp_fput(dbp->mpf, meta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
goto err;
meta = NULL;
- if ((ret = memp_fput(dbp->mpf, root, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, root, DB_MPOOL_DIRTY)) != 0)
goto err;
root = NULL;
-
- /*
- * Flush the metadata and root pages to disk.
- *
- * !!!
- * It's not useful to return not-yet-flushed here -- convert it to
- * an error.
- */
- if ((ret = memp_fsync(dbp->mpf)) == DB_INCOMPLETE) {
- __db_err(dbp->dbenv, "Metapage flush failed");
- ret = EINVAL;
- }
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTSYNC, ret, name);
-
-done: /*
- * !!!
- * We already did an insert and so the last-page-inserted has been
- * set. I'm not sure where the *right* place to clear this value
- * is, it's not intuitively obvious that it belongs here.
- */
- t->bt_lpgno = PGNO_INVALID;
-
err:
-DB_TEST_RECOVERY_LABEL
- /* Put any remaining pages back. */
if (meta != NULL)
- if ((t_ret = memp_fput(dbp->mpf, meta, 0)) != 0 &&
- ret == 0)
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
if (root != NULL)
- if ((t_ret = memp_fput(dbp->mpf, root, 0)) != 0 &&
- ret == 0)
+ if ((t_ret = __memp_fput(mpf, root, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (LOCK_ISSET(metalock))
+ if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
+ ret = t_ret;
+ if (dbc != NULL)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
-
- /* We can release the metapage lock when we are done. */
- if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
- ret = t_ret;
-
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
return (ret);
}
diff --git a/db/btree/bt_put.c b/db/btree/bt_put.c
index 19a04526d..b98c6c579 100644
--- a/db/btree/bt_put.c
+++ b/db/btree/bt_put.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_put.c,v 11.46 2001/01/17 18:48:46 bostic Exp $";
+static const char revid[] = "$Id: bt_put.c,v 11.78 2003/10/31 15:07:40 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,12 +53,18 @@ static const char revid[] = "$Id: bt_put.c,v 11.46 2001/01/17 18:48:46 bostic Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/mp.h"
+static int __bam_build
+ __P((DBC *, u_int32_t, DBT *, PAGE *, u_int32_t, u_int32_t));
static int __bam_dup_convert __P((DBC *, PAGE *, u_int32_t));
static int __bam_ovput
__P((DBC *, u_int32_t, db_pgno_t, PAGE *, u_int32_t, DBT *));
+static u_int32_t
+ __bam_partsize __P((DB *, u_int32_t, DBT *, PAGE *, u_int32_t));
/*
* __bam_iitem --
@@ -72,11 +78,13 @@ __bam_iitem(dbc, key, data, op, flags)
DBT *key, *data;
u_int32_t op, flags;
{
+ DB_ENV *dbenv;
BKEYDATA *bk, bk_tmp;
BTREE *t;
BTREE_CURSOR *cp;
DB *dbp;
DBT bk_hdr, tdbt;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_indx_t indx;
u_int32_t data_size, have_bytes, need_bytes, needed;
@@ -85,6 +93,8 @@ __bam_iitem(dbc, key, data, op, flags)
COMPQUIET(bk, NULL);
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
t = dbp->bt_internal;
h = cp->page;
@@ -95,11 +105,9 @@ __bam_iitem(dbc, key, data, op, flags)
* Fixed-length records with partial puts: it's an error to specify
* anything other simple overwrite.
*/
- if (F_ISSET(dbp, DB_RE_FIXEDLEN) &&
- F_ISSET(data, DB_DBT_PARTIAL) && data->dlen != data->size) {
- data_size = data->size;
- goto len_err;
- }
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN) &&
+ F_ISSET(data, DB_DBT_PARTIAL) && data->size != data->dlen)
+ return (__db_rec_repl(dbenv, data->size, data->dlen));
/*
* Figure out how much space the data will take, including if it's a
@@ -110,16 +118,14 @@ __bam_iitem(dbc, key, data, op, flags)
* the fixed-length record size.
*/
data_size = F_ISSET(data, DB_DBT_PARTIAL) ?
- __bam_partsize(op, data, h, indx) : data->size;
+ __bam_partsize(dbp, op, data, h, indx) : data->size;
padrec = 0;
- if (F_ISSET(dbp, DB_RE_FIXEDLEN)) {
- if (data_size > t->re_len) {
-len_err: __db_err(dbp->dbenv,
- "Length improper for fixed length record %lu",
- (u_long)data_size);
- return (EINVAL);
- }
- if (data_size < t->re_len) {
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
+ if (data_size > t->re_len)
+ return (__db_rec_toobig(dbenv, data_size, t->re_len));
+
+ /* Records that are deleted anyway needn't be padded out. */
+ if (!LF_ISSET(BI_DELETED) && data_size < t->re_len) {
padrec = 1;
data_size = t->re_len;
}
@@ -146,12 +152,12 @@ len_err: __db_err(dbp->dbenv,
*/
if (op == DB_CURRENT && dbp->dup_compare != NULL) {
if ((ret = __bam_cmp(dbp, data, h,
- indx + (TYPE(h) == P_LBTREE ? O_INDX : 0),
- dbp->dup_compare, &cmp)) != 0)
+ indx + (TYPE(h) == P_LBTREE ? O_INDX : 0),
+ dbp->dup_compare, &cmp)) != 0)
return (ret);
if (cmp != 0) {
- __db_err(dbp->dbenv,
- "Current data differs from put data");
+ __db_err(dbenv,
+ "Existing data sorts differently from put data");
return (EINVAL);
}
}
@@ -190,7 +196,7 @@ len_err: __db_err(dbp->dbenv,
*/
bigkey = 0;
if (op == DB_CURRENT) {
- bk = GET_BKEYDATA(h,
+ bk = GET_BKEYDATA(dbp, h,
indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
if (B_TYPE(bk->type) == B_KEYDATA)
have_bytes = BKEYDATA_PSIZE(bk->len);
@@ -210,19 +216,14 @@ len_err: __db_err(dbp->dbenv,
needed += need_bytes - have_bytes;
break;
default:
- return (__db_unknown_flag(dbp->dbenv, "__bam_iitem", op));
+ return (__db_unknown_flag(dbenv, "DB->put", op));
}
/*
* If there's not enough room, or the user has put a ceiling on the
* number of keys permitted in the page, split the page.
- *
- * XXX
- * The t->bt_maxkey test here may be insufficient -- do we have to
- * check in the btree split code, so we don't undo it there!?!?
*/
- if (P_FREESPACE(h) < needed ||
- (t->bt_maxkey != 0 && NUM_ENT(h) > t->bt_maxkey))
+ if (P_FREESPACE(dbp, h) < needed)
return (DB_NEEDSPLIT);
/*
@@ -286,23 +287,24 @@ len_err: __db_err(dbp->dbenv,
* we deadlock or fail while deleting the overflow item or
* replacing the non-overflow item, a subsequent cursor close
* will try and remove the item because the cursor's delete
- * flag is set
+ * flag is set.
*/
(void)__bam_ca_delete(dbp, PGNO(h), indx, 0);
if (TYPE(h) == P_LBTREE) {
++indx;
dupadjust = 1;
+ }
- /*
- * In a Btree deleted records aren't counted (deleted
- * records are counted in a Recno because all accesses
- * are based on record number). If it's a Btree and
- * it's a DB_CURRENT operation overwriting a previously
- * deleted record, increment the record count.
- */
+ /*
+ * In a Btree deleted records aren't counted (deleted records
+ * are counted in a Recno because all accesses are based on
+ * record number). If it's a Btree and it's a DB_CURRENT
+ * operation overwriting a previously deleted record, increment
+ * the record count.
+ */
+ if (TYPE(h) == P_LBTREE || TYPE(h) == P_LDUP)
was_deleted = B_DISSET(bk->type);
- }
/*
* 4. Delete and re-add the data item.
@@ -323,11 +325,16 @@ len_err: __db_err(dbp->dbenv,
replace = 1;
break;
default:
- return (__db_unknown_flag(dbp->dbenv, "__bam_iitem", op));
+ return (__db_unknown_flag(dbenv, "DB->put", op));
}
/* Add the data. */
if (bigdata) {
+ /*
+ * We do not have to handle deleted (BI_DELETED) records
+ * in this case; the actual records should never be created.
+ */
+ DB_ASSERT(!LF_ISSET(BI_DELETED));
if ((ret = __bam_ovput(dbc,
B_OVERFLOW, PGNO_INVALID, h, indx, data)) != 0)
return (ret);
@@ -347,7 +354,7 @@ len_err: __db_err(dbp->dbenv,
if (ret != 0)
return (ret);
}
- if ((ret = memp_fset(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
return (ret);
/*
@@ -375,7 +382,7 @@ len_err: __db_err(dbp->dbenv,
* up at least 25% of the space on the page. If it does, move it onto
* its own page.
*/
- if (dupadjust && P_FREESPACE(h) <= dbp->pgsize / 2) {
+ if (dupadjust && P_FREESPACE(dbp, h) <= dbp->pgsize / 2) {
if ((ret = __bam_dup_convert(dbc, h, indx - O_INDX)) != 0)
return (ret);
}
@@ -390,11 +397,10 @@ len_err: __db_err(dbp->dbenv,
/*
* __bam_partsize --
* Figure out how much space a partial data item is in total.
- *
- * PUBLIC: u_int32_t __bam_partsize __P((u_int32_t, DBT *, PAGE *, u_int32_t));
*/
-u_int32_t
-__bam_partsize(op, data, h, indx)
+static u_int32_t
+__bam_partsize(dbp, op, data, h, indx)
+ DB *dbp;
u_int32_t op, indx;
DBT *data;
PAGE *h;
@@ -413,38 +419,18 @@ __bam_partsize(op, data, h, indx)
* Otherwise, it's the data provided plus any already existing data
* that we're not replacing.
*/
- bk = GET_BKEYDATA(h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
+ bk = GET_BKEYDATA(dbp, h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
nbytes =
B_TYPE(bk->type) == B_OVERFLOW ? ((BOVERFLOW *)bk)->tlen : bk->len;
- /*
- * There are really two cases here:
- *
- * Case 1: We are replacing some bytes that do not exist (i.e., they
- * are past the end of the record). In this case the number of bytes
- * we are replacing is irrelevant and all we care about is how many
- * bytes we are going to add from offset. So, the new record length
- * is going to be the size of the new bytes (size) plus wherever those
- * new bytes begin (doff).
- *
- * Case 2: All the bytes we are replacing exist. Therefore, the new
- * size is the oldsize (nbytes) minus the bytes we are replacing (dlen)
- * plus the bytes we are adding (size).
- */
- if (nbytes < data->doff + data->dlen) /* Case 1 */
- return (data->doff + data->size);
-
- return (nbytes + data->size - data->dlen); /* Case 2 */
+ return (__db_partsize(nbytes, data));
}
/*
* __bam_build --
* Build the real record for a partial put, or short fixed-length record.
- *
- * PUBLIC: int __bam_build __P((DBC *, u_int32_t,
- * PUBLIC: DBT *, PAGE *, u_int32_t, u_int32_t));
*/
-int
+static int
__bam_build(dbc, op, dbt, h, indx, nbytes)
DBC *dbc;
u_int32_t op, indx, nbytes;
@@ -454,9 +440,8 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
BKEYDATA *bk, tbk;
BOVERFLOW *bo;
BTREE *t;
- BTREE_CURSOR *cp;
DB *dbp;
- DBT copy;
+ DBT copy, *rdata;
u_int32_t len, tlen;
u_int8_t *p;
int ret;
@@ -464,26 +449,26 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
COMPQUIET(bo, NULL);
dbp = dbc->dbp;
- cp = (BTREE_CURSOR *) dbc->internal;
t = dbp->bt_internal;
/* We use the record data return memory, it's only a short-term use. */
- if (dbc->rdata.ulen < nbytes) {
+ rdata = &dbc->my_rdata;
+ if (rdata->ulen < nbytes) {
if ((ret = __os_realloc(dbp->dbenv,
- nbytes, NULL, &dbc->rdata.data)) != 0) {
- dbc->rdata.ulen = 0;
- dbc->rdata.data = NULL;
+ nbytes, &rdata->data)) != 0) {
+ rdata->ulen = 0;
+ rdata->data = NULL;
return (ret);
}
- dbc->rdata.ulen = nbytes;
+ rdata->ulen = nbytes;
}
/*
* We use nul or pad bytes for any part of the record that isn't
* specified; get it over with.
*/
- memset(dbc->rdata.data,
- F_ISSET(dbp, DB_RE_FIXEDLEN) ? t->re_pad : 0, nbytes);
+ memset(rdata->data,
+ F_ISSET(dbp, DB_AM_FIXEDLEN) ? t->re_pad : 0, nbytes);
/*
* In the next clauses, we need to do three things: a) set p to point
@@ -495,14 +480,15 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
* the chase.
*/
if (!F_ISSET(dbt, DB_DBT_PARTIAL) || op != DB_CURRENT) {
- p = (u_int8_t *)dbc->rdata.data + dbt->doff;
+ p = (u_int8_t *)rdata->data + dbt->doff;
tlen = dbt->doff;
goto user_copy;
}
/* Find the current record. */
if (indx < NUM_ENT(h)) {
- bk = GET_BKEYDATA(h, indx + (TYPE(h) == P_LBTREE ? O_INDX : 0));
+ bk = GET_BKEYDATA(dbp, h, indx + (TYPE(h) == P_LBTREE ?
+ O_INDX : 0));
bo = (BOVERFLOW *)bk;
} else {
bk = &tbk;
@@ -516,12 +502,12 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
*/
memset(&copy, 0, sizeof(copy));
if ((ret = __db_goff(dbp, &copy, bo->tlen,
- bo->pgno, &dbc->rdata.data, &dbc->rdata.ulen)) != 0)
+ bo->pgno, &rdata->data, &rdata->ulen)) != 0)
return (ret);
/* Skip any leading data from the original record. */
tlen = dbt->doff;
- p = (u_int8_t *)dbc->rdata.data + dbt->doff;
+ p = (u_int8_t *)rdata->data + dbt->doff;
/*
* Copy in any trailing data from the original record.
@@ -542,10 +528,10 @@ __bam_build(dbc, op, dbt, h, indx, nbytes)
}
} else {
/* Copy in any leading data from the original record. */
- memcpy(dbc->rdata.data,
+ memcpy(rdata->data,
bk->data, dbt->doff > bk->len ? bk->len : dbt->doff);
tlen = dbt->doff;
- p = (u_int8_t *)dbc->rdata.data + dbt->doff;
+ p = (u_int8_t *)rdata->data + dbt->doff;
/* Copy in any trailing data from the original record. */
len = dbt->doff + dbt->dlen;
@@ -564,11 +550,11 @@ user_copy:
tlen += dbt->size;
/* Set the DBT to reference our new record. */
- dbc->rdata.size = F_ISSET(dbp, DB_RE_FIXEDLEN) ? t->re_len : tlen;
- dbc->rdata.dlen = 0;
- dbc->rdata.doff = 0;
- dbc->rdata.flags = 0;
- *dbt = dbc->rdata;
+ rdata->size = F_ISSET(dbp, DB_AM_FIXEDLEN) ? t->re_len : tlen;
+ rdata->dlen = 0;
+ rdata->doff = 0;
+ rdata->flags = 0;
+ *dbt = *rdata;
return (0);
}
@@ -591,6 +577,7 @@ __bam_ritem(dbc, h, indx, data)
db_indx_t cnt, lo, ln, min, off, prefix, suffix;
int32_t nbytes;
int ret;
+ db_indx_t *inp;
u_int8_t *p, *t;
dbp = dbc->dbp;
@@ -600,10 +587,10 @@ __bam_ritem(dbc, h, indx, data)
* to insert and whether it fits is handled in the caller. All we do
* here is manage the page shuffling.
*/
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
/* Log the change. */
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
/*
* We might as well check to see if the two data items share
* a common prefix and suffix -- it can save us a lot of log
@@ -627,17 +614,18 @@ __bam_ritem(dbc, h, indx, data)
orig.size = bk->len - (prefix + suffix);
repl.data = (u_int8_t *)data->data + prefix;
repl.size = data->size - (prefix + suffix);
- if ((ret = __bam_repl_log(dbp->dbenv, dbc->txn,
- &LSN(h), 0, dbp->log_fileid, PGNO(h), &LSN(h),
- (u_int32_t)indx, (u_int32_t)B_DISSET(bk->type),
+ if ((ret = __bam_repl_log(dbp, dbc->txn, &LSN(h), 0, PGNO(h),
+ &LSN(h), (u_int32_t)indx, (u_int32_t)B_DISSET(bk->type),
&orig, &repl, (u_int32_t)prefix, (u_int32_t)suffix)) != 0)
return (ret);
- }
+ } else
+ LSN_NOT_LOGGED(LSN(h));
/*
* Set references to the first in-use byte on the page and the
* first byte of the item being replaced.
*/
+ inp = P_INP(dbp, h);
p = (u_int8_t *)h + HOFFSET(h);
t = (u_int8_t *)bk;
@@ -648,19 +636,19 @@ __bam_ritem(dbc, h, indx, data)
* the regions overlap.
*/
lo = BKEYDATA_SIZE(bk->len);
- ln = BKEYDATA_SIZE(data->size);
+ ln = (db_indx_t)BKEYDATA_SIZE(data->size);
if (lo != ln) {
nbytes = lo - ln; /* Signed difference. */
if (p == t) /* First index is fast. */
- h->inp[indx] += nbytes;
+ inp[indx] += nbytes;
else { /* Else, shift the page. */
- memmove(p + nbytes, p, t - p);
+ memmove(p + nbytes, p, (size_t)(t - p));
/* Adjust the indices' offsets. */
- off = h->inp[indx];
+ off = inp[indx];
for (cnt = 0; cnt < NUM_ENT(h); ++cnt)
- if (h->inp[cnt] <= off)
- h->inp[cnt] += nbytes;
+ if (inp[cnt] <= off)
+ inp[cnt] += nbytes;
}
/* Clean up the page and adjust the item's reference. */
@@ -688,30 +676,35 @@ __bam_dup_convert(dbc, h, indx)
PAGE *h;
u_int32_t indx;
{
- BTREE_CURSOR *cp;
BKEYDATA *bk;
DB *dbp;
DBT hdr;
+ DB_MPOOLFILE *mpf;
PAGE *dp;
- db_indx_t cnt, cpindx, dindx, first, sz;
+ db_indx_t cnt, cpindx, dindx, first, *inp, sz;
int ret;
dbp = dbc->dbp;
- cp = (BTREE_CURSOR *)dbc->internal;
+ mpf = dbp->mpf;
+ inp = P_INP(dbp, h);
/*
* Count the duplicate records and calculate how much room they're
* using on the page.
*/
- while (indx > 0 && h->inp[indx] == h->inp[indx - P_INDX])
+ while (indx > 0 && inp[indx] == inp[indx - P_INDX])
indx -= P_INDX;
- for (cnt = 0, sz = 0, first = indx;; ++cnt, indx += P_INDX) {
- if (indx >= NUM_ENT(h) || h->inp[first] != h->inp[indx])
- break;
- bk = GET_BKEYDATA(h, indx);
- sz += B_TYPE(bk->type) == B_KEYDATA ?
- BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
- bk = GET_BKEYDATA(h, indx + O_INDX);
+
+ /* Count the key once. */
+ bk = GET_BKEYDATA(dbp, h, indx);
+ sz = B_TYPE(bk->type) == B_KEYDATA ?
+ BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
+
+ /* Sum up all the data items. */
+ for (cnt = 0, first = indx;
+ inp[first] == inp[indx] && indx < NUM_ENT(h);
+ ++cnt, indx += P_INDX) {
+ bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
sz += B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_PSIZE(bk->len) : BOVERFLOW_PSIZE;
}
@@ -766,7 +759,7 @@ __bam_dup_convert(dbc, h, indx)
* deleted entries are discarded (if the deleted entry is
* overflow, then free up those pages).
*/
- bk = GET_BKEYDATA(h, dindx + 1);
+ bk = GET_BKEYDATA(dbp, h, dindx + 1);
hdr.data = bk;
hdr.size = B_TYPE(bk->type) == B_KEYDATA ?
BKEYDATA_SIZE(bk->len) : BOVERFLOW_SIZE;
@@ -778,7 +771,7 @@ __bam_dup_convert(dbc, h, indx)
*/
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_doff(dbc,
- (GET_BOVERFLOW(h, dindx + 1))->pgno)) != 0)
+ (GET_BOVERFLOW(dbp, h, dindx + 1))->pgno)) != 0)
goto err;
} else {
if ((ret = __db_pitem(
@@ -802,17 +795,17 @@ __bam_dup_convert(dbc, h, indx)
/* Put in a new data item that points to the duplicates page. */
if ((ret = __bam_ovput(dbc,
- B_DUPLICATE, dp->pgno, h, first + 1, NULL)) != 0)
+ B_DUPLICATE, dp->pgno, h, first + 1, NULL)) != 0)
goto err;
- /* Adjust cursors for all the above movments. */
+ /* Adjust cursors for all the above movements. */
if ((ret = __bam_ca_di(dbc,
- PGNO(h), first + P_INDX, first + P_INDX - indx)) != 0)
+ PGNO(h), first + P_INDX, (int)(first + P_INDX - indx))) != 0)
goto err;
- return (memp_fput(dbp->mpf, dp, DB_MPOOL_DIRTY));
+ return (__memp_fput(mpf, dp, DB_MPOOL_DIRTY));
-err: (void)__db_free(dbc, dp);
+err: (void)__memp_fput(mpf, dp, 0);
return (ret);
}
diff --git a/db/btree/bt_rec.c b/db/btree/bt_rec.c
index 24dc9bc6a..1587028b3 100644
--- a/db/btree/bt_rec.c
+++ b/db/btree/bt_rec.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_rec.c,v 11.35 2001/01/10 16:24:47 ubell Exp $";
+static const char revid[] = "$Id: bt_rec.c,v 11.64 2003/09/13 18:48:58 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,287 +18,18 @@ static const char revid[] = "$Id: bt_rec.c,v 11.35 2001/01/10 16:24:47 ubell Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "hash.h"
-#include "btree.h"
-#include "log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
#define IS_BTREE_PAGE(pagep) \
(TYPE(pagep) == P_IBTREE || \
TYPE(pagep) == P_LBTREE || TYPE(pagep) == P_LDUP)
/*
- * __bam_pg_alloc_recover --
- * Recovery function for pg_alloc.
- *
- * PUBLIC: int __bam_pg_alloc_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__bam_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __bam_pg_alloc_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DBMETA *meta;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- db_pgno_t pgno;
- int cmp_n, cmp_p, level, modified, ret;
-
- REC_PRINT(__bam_pg_alloc_print);
- REC_INTRO(__bam_pg_alloc_read, 0);
-
- /*
- * Fix up the allocated page. If we're redoing the operation, we have
- * to get the page (creating it if it doesn't exist), and update its
- * LSN. If we're undoing the operation, we have to reset the page's
- * LSN and put it on the free list.
- *
- * Fix up the metadata page. If we're redoing the operation, we have
- * to get the metadata page and update its LSN and its free pointer.
- * If we're undoing the operation and the page was ever created, we put
- * it on the freelist.
- */
- pgno = PGNO_BASE_MD;
- meta = NULL;
- if ((ret = memp_fget(mpf, &pgno, 0, &meta)) != 0) {
- /* The metadata page must always exist on redo. */
- if (DB_REDO(op)) {
- (void)__db_pgerr(file_dbp, pgno);
- goto out;
- } else
- goto done;
- }
- if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
- /*
- * We specify creation and check for it later, because this
- * operation was supposed to create the page, and even in
- * the undo case it's going to get linked onto the freelist
- * which we're also fixing up.
- */
- (void)__db_pgerr(file_dbp, argp->pgno);
- goto err;
- }
-
- /* Fix up the allocated page. */
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &argp->page_lsn);
-
- /*
- * If an inital allocation is aborted and then reallocated
- * during an archival restore the log record will have
- * an LSN for the page but the page will be empty.
- */
- if (IS_ZERO_LSN(LSN(pagep)))
- cmp_p = 0;
- CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->page_lsn);
- /*
- * If we we rolled back this allocation previously during an
- * archive restore, the page may have the LSN of the meta page
- * at the point of the roll back. This will be no more
- * than the LSN of the metadata page at the time of this allocation.
- */
- if (DB_REDO(op) &&
- (cmp_p == 0 ||
- (IS_ZERO_LSN(argp->page_lsn) &&
- log_compare(&LSN(pagep), &argp->meta_lsn) <= 0))) {
- /* Need to redo update described. */
- switch (argp->ptype) {
- case P_LBTREE:
- case P_LRECNO:
- case P_LDUP:
- level = LEAFLEVEL;
- break;
- default:
- level = 0;
- break;
- }
- P_INIT(pagep, file_dbp->pgsize,
- argp->pgno, PGNO_INVALID, PGNO_INVALID, level, argp->ptype);
-
- pagep->lsn = *lsnp;
- modified = 1;
- } else if (cmp_n == 0 && DB_UNDO(op)) {
- /*
- * Undo the allocation, reinitialize the page and
- * link its next pointer to the free list.
- */
- P_INIT(pagep, file_dbp->pgsize,
- argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
-
- pagep->lsn = argp->page_lsn;
- modified = 1;
- }
-
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0) {
- goto err;
- }
-
- /*
- * If the page was newly created, put it on the limbo list.
- */
- if (IS_ZERO_LSN(LSN(pagep)) &&
- IS_ZERO_LSN(argp->page_lsn) && DB_UNDO(op)) {
- /* Put the page in limbo.*/
- if ((ret = __db_add_limbo(dbenv,
- info, argp->fileid, argp->pgno, 1)) != 0)
- goto err;
- }
-
- /* Fix up the metadata page. */
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(meta));
- cmp_p = log_compare(&LSN(meta), &argp->meta_lsn);
- CHECK_LSN(op, cmp_p, &LSN(meta), &argp->meta_lsn);
- if (cmp_p == 0 && DB_REDO(op)) {
- /* Need to redo update described. */
- LSN(meta) = *lsnp;
- meta->free = argp->next;
- modified = 1;
- } else if (cmp_n == 0 && DB_UNDO(op)) {
- /* Need to undo update described. */
- LSN(meta) = argp->meta_lsn;
-
- /*
- * If the page has a zero LSN then its newly created
- * and will go into limbo rather than directly on the
- * free list.
- */
- if (!IS_ZERO_LSN(argp->page_lsn))
- meta->free = argp->pgno;
- modified = 1;
- }
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
- /*
- * This could be the metapage from a subdb which is read from disk
- * to recover its creation.
- */
- if (F_ISSET(file_dbp, DB_AM_SUBDB))
- switch (argp->type) {
- case P_BTREEMETA:
- case P_HASHMETA:
- case P_QAMMETA:
- file_dbp->sync(file_dbp, 0);
- break;
- }
-
-done: *lsnp = argp->prev_lsn;
- ret = 0;
-
- if (0) {
-err:
- if (meta != NULL)
- (void)memp_fput(mpf, meta, 0);
- }
-out: REC_CLOSE;
-}
-
-/*
- * __bam_pg_free_recover --
- * Recovery function for pg_free.
- *
- * PUBLIC: int __bam_pg_free_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__bam_pg_free_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __bam_pg_free_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DBMETA *meta;
- DB_LSN copy_lsn;
- DB_MPOOLFILE *mpf;
- PAGE *pagep;
- db_pgno_t pgno;
- int cmp_n, cmp_p, modified, ret;
-
- COMPQUIET(info, NULL);
- REC_PRINT(__bam_pg_free_print);
- REC_INTRO(__bam_pg_free_read, 1);
-
- /*
- * Fix up the freed page. If we're redoing the operation we get the
- * page and explicitly discard its contents, then update its LSN. If
- * we're undoing the operation, we get the page and restore its header.
- * Create the page if necessary, we may be freeing an aborted
- * create.
- */
- if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
- modified = 0;
- __ua_memcpy(&copy_lsn, &LSN(argp->header.data), sizeof(DB_LSN));
- cmp_n = log_compare(lsnp, &LSN(pagep));
- cmp_p = log_compare(&LSN(pagep), &copy_lsn);
- CHECK_LSN(op, cmp_p, &LSN(pagep), &copy_lsn);
- if (DB_REDO(op) &&
- (cmp_p == 0 ||
- (IS_ZERO_LSN(copy_lsn) &&
- log_compare(&LSN(pagep), &argp->meta_lsn) <= 0))) {
- /* Need to redo update described. */
- P_INIT(pagep, file_dbp->pgsize,
- argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
- pagep->lsn = *lsnp;
-
- modified = 1;
- } else if (cmp_n == 0 && DB_UNDO(op)) {
- /* Need to undo update described. */
- memcpy(pagep, argp->header.data, argp->header.size);
-
- modified = 1;
- }
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
-
- /*
- * Fix up the metadata page. If we're redoing or undoing the operation
- * we get the page and update its LSN and free pointer.
- */
- pgno = PGNO_BASE_MD;
- if ((ret = memp_fget(mpf, &pgno, 0, &meta)) != 0) {
- /* The metadata page must always exist. */
- (void)__db_pgerr(file_dbp, pgno);
- goto out;
- }
-
- modified = 0;
- cmp_n = log_compare(lsnp, &LSN(meta));
- cmp_p = log_compare(&LSN(meta), &argp->meta_lsn);
- CHECK_LSN(op, cmp_p, &LSN(meta), &argp->meta_lsn);
- if (cmp_p == 0 && DB_REDO(op)) {
- /* Need to redo the deallocation. */
- meta->free = argp->pgno;
- LSN(meta) = *lsnp;
- modified = 1;
- } else if (cmp_n == 0 && DB_UNDO(op)) {
- /* Need to undo the deallocation. */
- meta->free = argp->next;
- LSN(meta) = argp->meta_lsn;
- modified = 1;
- }
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
- goto out;
-
-done: *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
* __bam_split_recover --
* Recovery function for split.
*
@@ -320,7 +51,7 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
PAGE *_lp, *lp, *np, *pp, *_rp, *rp, *sp;
db_pgno_t pgno, root_pgno;
u_int32_t ptype;
- int cmp, l_update, p_update, r_update, rc, ret, rootsplit, t_ret;
+ int cmp, l_update, p_update, r_update, rc, ret, ret_l, rootsplit, t_ret;
COMPQUIET(info, NULL);
REC_PRINT(__bam_split_print);
@@ -345,16 +76,16 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
* so it's got to be aligned. Copying it into allocated memory is
* the only way to guarantee this.
*/
- if ((ret = __os_malloc(dbenv, argp->pg.size, NULL, &sp)) != 0)
+ if ((ret = __os_malloc(dbenv, argp->pg.size, &sp)) != 0)
goto out;
memcpy(sp, argp->pg.data, argp->pg.size);
pgno = PGNO(sp);
root_pgno = argp->root_pgno;
- rootsplit = pgno == root_pgno;
- if (memp_fget(mpf, &argp->left, 0, &lp) != 0)
+ rootsplit = root_pgno != PGNO_INVALID;
+ if ((ret_l = __memp_fget(mpf, &argp->left, 0, &lp)) != 0)
lp = NULL;
- if (memp_fget(mpf, &argp->right, 0, &rp) != 0)
+ if (__memp_fget(mpf, &argp->right, 0, &rp) != 0)
rp = NULL;
if (DB_REDO(op)) {
@@ -368,8 +99,8 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
* same reason.
*/
if (rootsplit) {
- if ((ret = memp_fget(mpf, &pgno, 0, &pp)) != 0) {
- (void)__db_pgerr(file_dbp, pgno);
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pp)) != 0) {
+ ret = __db_pgerr(file_dbp, pgno, ret);
pp = NULL;
goto out;
}
@@ -377,7 +108,7 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
CHECK_LSN(op, cmp, &LSN(pp), &LSN(argp->pg.data));
p_update = cmp == 0;
} else if (lp == NULL) {
- (void)__db_pgerr(file_dbp, argp->left);
+ ret = __db_pgerr(file_dbp, argp->left, ret_l);
goto out;
}
@@ -400,10 +131,8 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
goto check_next;
/* Allocate and initialize new left/right child pages. */
- if ((ret =
- __os_malloc(dbenv, file_dbp->pgsize, NULL, &_lp)) != 0
- || (ret =
- __os_malloc(dbenv, file_dbp->pgsize, NULL, &_rp)) != 0)
+ if ((ret = __os_malloc(dbenv, file_dbp->pgsize, &_lp)) != 0 ||
+ (ret = __os_malloc(dbenv, file_dbp->pgsize, &_rp)) != 0)
goto out;
if (rootsplit) {
P_INIT(_lp, file_dbp->pgsize, argp->left,
@@ -431,31 +160,31 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
goto out;
/* If the left child is wrong, update it. */
- if (lp == NULL && (ret =
- memp_fget(mpf, &argp->left, DB_MPOOL_CREATE, &lp)) != 0) {
- (void)__db_pgerr(file_dbp, argp->left);
+ if (lp == NULL && (ret = __memp_fget(
+ mpf, &argp->left, DB_MPOOL_CREATE, &lp)) != 0) {
+ ret = __db_pgerr(file_dbp, argp->left, ret);
lp = NULL;
goto out;
}
if (l_update) {
memcpy(lp, _lp, file_dbp->pgsize);
lp->lsn = *lsnp;
- if ((ret = memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0)
goto out;
lp = NULL;
}
/* If the right child is wrong, update it. */
- if (rp == NULL && (ret = memp_fget(mpf,
- &argp->right, DB_MPOOL_CREATE, &rp)) != 0) {
- (void)__db_pgerr(file_dbp, argp->right);
+ if (rp == NULL && (ret = __memp_fget(
+ mpf, &argp->right, DB_MPOOL_CREATE, &rp)) != 0) {
+ ret = __db_pgerr(file_dbp, argp->right, ret);
rp = NULL;
goto out;
}
if (r_update) {
memcpy(rp, _rp, file_dbp->pgsize);
rp->lsn = *lsnp;
- if ((ret = memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0)
goto out;
rp = NULL;
}
@@ -477,11 +206,11 @@ __bam_split_recover(dbenv, dbtp, lsnp, op, info)
P_INIT(pp, file_dbp->pgsize, root_pgno,
PGNO_INVALID, PGNO_INVALID, _lp->level + 1, ptype);
- RE_NREC_SET(pp,
- rc ? __bam_total(_lp) + __bam_total(_rp) : 0);
+ RE_NREC_SET(pp, rc ? __bam_total(file_dbp, _lp) +
+ __bam_total(file_dbp, _rp) : 0);
pp->lsn = *lsnp;
- if ((ret = memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
goto out;
pp = NULL;
}
@@ -494,8 +223,9 @@ check_next: /*
* page must exist because we're redoing the operation.
*/
if (!rootsplit && !IS_ZERO_LSN(argp->nlsn)) {
- if ((ret = memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
- (void)__db_pgerr(file_dbp, argp->npgno);
+ if ((ret =
+ __memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
+ ret = __db_pgerr(file_dbp, argp->npgno, ret);
np = NULL;
goto out;
}
@@ -505,7 +235,7 @@ check_next: /*
PREV_PGNO(np) = argp->right;
np->lsn = *lsnp;
if ((ret =
- memp_fput(mpf, np, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, np, DB_MPOOL_DIRTY)) != 0)
goto out;
np = NULL;
}
@@ -518,13 +248,13 @@ check_next: /*
* the adds onto the page that caused the split, and there's
* really no undo-ing to be done.
*/
- if ((ret = memp_fget(mpf, &pgno, 0, &pp)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pp)) != 0) {
pp = NULL;
goto lrundo;
}
if (log_compare(lsnp, &LSN(pp)) == 0) {
memcpy(pp, argp->pg.data, argp->pg.size);
- if ((ret = memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
goto out;
pp = NULL;
}
@@ -542,7 +272,7 @@ lrundo: if ((rootsplit && lp != NULL) || rp != NULL) {
log_compare(lsnp, &LSN(lp)) == 0) {
lp->lsn = argp->llsn;
if ((ret =
- memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, lp, DB_MPOOL_DIRTY)) != 0)
goto out;
lp = NULL;
}
@@ -550,7 +280,7 @@ lrundo: if ((rootsplit && lp != NULL) || rp != NULL) {
log_compare(lsnp, &LSN(rp)) == 0) {
rp->lsn = argp->rlsn;
if ((ret =
- memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mpf, rp, DB_MPOOL_DIRTY)) != 0)
goto out;
rp = NULL;
}
@@ -565,14 +295,15 @@ lrundo: if ((rootsplit && lp != NULL) || rp != NULL) {
* if there's nothing to undo.
*/
if (!rootsplit && !IS_ZERO_LSN(argp->nlsn)) {
- if ((ret = memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &argp->npgno, 0, &np)) != 0) {
np = NULL;
goto done;
}
if (log_compare(lsnp, &LSN(np)) == 0) {
PREV_PGNO(np) = argp->left;
np->lsn = argp->nlsn;
- if (memp_fput(mpf, np, DB_MPOOL_DIRTY))
+ if (__memp_fput(mpf, np, DB_MPOOL_DIRTY))
goto out;
np = NULL;
}
@@ -583,22 +314,22 @@ done: *lsnp = argp->prev_lsn;
ret = 0;
out: /* Free any pages that weren't dirtied. */
- if (pp != NULL && (t_ret = memp_fput(mpf, pp, 0)) != 0 && ret == 0)
+ if (pp != NULL && (t_ret = __memp_fput(mpf, pp, 0)) != 0 && ret == 0)
ret = t_ret;
- if (lp != NULL && (t_ret = memp_fput(mpf, lp, 0)) != 0 && ret == 0)
+ if (lp != NULL && (t_ret = __memp_fput(mpf, lp, 0)) != 0 && ret == 0)
ret = t_ret;
- if (np != NULL && (t_ret = memp_fput(mpf, np, 0)) != 0 && ret == 0)
+ if (np != NULL && (t_ret = __memp_fput(mpf, np, 0)) != 0 && ret == 0)
ret = t_ret;
- if (rp != NULL && (t_ret = memp_fput(mpf, rp, 0)) != 0 && ret == 0)
+ if (rp != NULL && (t_ret = __memp_fput(mpf, rp, 0)) != 0 && ret == 0)
ret = t_ret;
/* Free any allocated space. */
if (_lp != NULL)
- __os_free(_lp, file_dbp->pgsize);
+ __os_free(dbenv, _lp);
if (_rp != NULL)
- __os_free(_rp, file_dbp->pgsize);
+ __os_free(dbenv, _rp);
if (sp != NULL)
- __os_free(sp, argp->pg.size);
+ __os_free(dbenv, sp);
REC_CLOSE;
}
@@ -627,23 +358,24 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
db_pgno_t pgno, root_pgno;
int cmp_n, cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_rsplit_print);
REC_INTRO(__bam_rsplit_read, 1);
/* Fix the root page. */
pgno = root_pgno = argp->root_pgno;
- if ((ret = memp_fget(mpf, &pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) != 0) {
/* The root page must always exist if we are going forward. */
if (DB_REDO(op)) {
- __db_pgerr(file_dbp, pgno);
+ ret = __db_pgerr(file_dbp, pgno, ret);
goto out;
}
/* This must be the root of an OPD tree. */
DB_ASSERT(root_pgno !=
((BTREE *)file_dbp->bt_internal)->bt_root);
ret = 0;
- goto done;
+ goto do_page;
}
modified = 0;
cmp_n = log_compare(lsnp, &LSN(pagep));
@@ -666,22 +398,23 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
pagep->lsn = argp->rootlsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+do_page:
/*
* Fix the page copied over the root page. It's possible that the
* page never made it to disk, so if we're undo-ing and the page
* doesn't exist, it's okay and there's nothing further to do.
*/
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
modified = 0;
- __ua_memcpy(&copy_lsn, &LSN(argp->pgdbt.data), sizeof(DB_LSN));
+ (void)__ua_memcpy(&copy_lsn, &LSN(argp->pgdbt.data), sizeof(DB_LSN));
cmp_n = log_compare(lsnp, &LSN(pagep));
cmp_p = log_compare(&LSN(pagep), &copy_lsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &copy_lsn);
@@ -694,13 +427,16 @@ __bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)
memcpy(pagep, argp->pgdbt.data, argp->pgdbt.size);
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -725,15 +461,16 @@ __bam_adj_recover(dbenv, dbtp, lsnp, op, info)
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_adj_print);
REC_INTRO(__bam_adj_read, 1);
/* Get the page; if it never existed and we're undoing, we're done. */
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
@@ -745,7 +482,7 @@ __bam_adj_recover(dbenv, dbtp, lsnp, op, info)
/* Need to redo update described. */
if ((ret = __bam_adjindx(dbc,
pagep, argp->indx, argp->indx_copy, argp->is_insert)) != 0)
- goto err;
+ goto out;
LSN(pagep) = *lsnp;
modified = 1;
@@ -753,21 +490,21 @@ __bam_adj_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
if ((ret = __bam_adjindx(dbc,
pagep, argp->indx, argp->indx_copy, !argp->is_insert)) != 0)
- goto err;
+ goto out;
LSN(pagep) = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
- if (0) {
-err: (void)memp_fput(mpf, pagep, 0);
- }
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -793,15 +530,16 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_cadjust_print);
REC_INTRO(__bam_cadjust_read, 1);
/* Get the page; if it never existed and we're undoing, we're done. */
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
@@ -812,11 +550,13 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
if (IS_BTREE_PAGE(pagep)) {
- GET_BINTERNAL(pagep, argp->indx)->nrecs += argp->adjust;
+ GET_BINTERNAL(file_dbp, pagep, argp->indx)->nrecs +=
+ argp->adjust;
if (argp->opflags & CAD_UPDATEROOT)
RE_NREC_ADJ(pagep, argp->adjust);
} else {
- GET_RINTERNAL(pagep, argp->indx)->nrecs += argp->adjust;
+ GET_RINTERNAL(file_dbp, pagep, argp->indx)->nrecs +=
+ argp->adjust;
if (argp->opflags & CAD_UPDATEROOT)
RE_NREC_ADJ(pagep, argp->adjust);
}
@@ -826,24 +566,29 @@ __bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
if (IS_BTREE_PAGE(pagep)) {
- GET_BINTERNAL(pagep, argp->indx)->nrecs -= argp->adjust;
+ GET_BINTERNAL(file_dbp, pagep, argp->indx)->nrecs -=
+ argp->adjust;
if (argp->opflags & CAD_UPDATEROOT)
RE_NREC_ADJ(pagep, -(argp->adjust));
} else {
- GET_RINTERNAL(pagep, argp->indx)->nrecs -= argp->adjust;
+ GET_RINTERNAL(file_dbp, pagep, argp->indx)->nrecs -=
+ argp->adjust;
if (argp->opflags & CAD_UPDATEROOT)
RE_NREC_ADJ(pagep, -(argp->adjust));
}
LSN(pagep) = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -869,15 +614,16 @@ __bam_cdel_recover(dbenv, dbtp, lsnp, op, info)
u_int32_t indx;
int cmp_n, cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_cdel_print);
REC_INTRO(__bam_cdel_read, 1);
/* Get the page; if it never existed and we're undoing, we're done. */
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
@@ -888,27 +634,30 @@ __bam_cdel_recover(dbenv, dbtp, lsnp, op, info)
if (cmp_p == 0 && DB_REDO(op)) {
/* Need to redo update described. */
indx = argp->indx + (TYPE(pagep) == P_LBTREE ? O_INDX : 0);
- B_DSET(GET_BKEYDATA(pagep, indx)->type);
+ B_DSET(GET_BKEYDATA(file_dbp, pagep, indx)->type);
LSN(pagep) = *lsnp;
modified = 1;
} else if (cmp_n == 0 && DB_UNDO(op)) {
/* Need to undo update described. */
indx = argp->indx + (TYPE(pagep) == P_LBTREE ? O_INDX : 0);
- B_DCLR(GET_BKEYDATA(pagep, indx)->type);
+ B_DCLR(GET_BKEYDATA(file_dbp, pagep, indx)->type);
(void)__bam_ca_delete(file_dbp, argp->pgno, argp->indx, 0);
LSN(pagep) = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -936,18 +685,19 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
u_int8_t *p;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_repl_print);
REC_INTRO(__bam_repl_read, 1);
/* Get the page; if it never existed and we're undoing, we're done. */
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
- bk = GET_BKEYDATA(pagep, argp->indx);
+ bk = GET_BKEYDATA(file_dbp, pagep, argp->indx);
modified = 0;
cmp_n = log_compare(lsnp, &LSN(pagep));
@@ -961,8 +711,8 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
*/
memset(&dbt, 0, sizeof(dbt));
dbt.size = argp->prefix + argp->suffix + argp->repl.size;
- if ((ret = __os_malloc(dbenv, dbt.size, NULL, &dbt.data)) != 0)
- goto err;
+ if ((ret = __os_malloc(dbenv, dbt.size, &dbt.data)) != 0)
+ goto out;
p = dbt.data;
memcpy(p, bk->data, argp->prefix);
p += argp->prefix;
@@ -971,9 +721,9 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
memcpy(p, bk->data + (bk->len - argp->suffix), argp->suffix);
ret = __bam_ritem(dbc, pagep, argp->indx, &dbt);
- __os_free(dbt.data, dbt.size);
+ __os_free(dbenv, dbt.data);
if (ret != 0)
- goto err;
+ goto out;
LSN(pagep) = *lsnp;
modified = 1;
@@ -985,8 +735,8 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
*/
memset(&dbt, 0, sizeof(dbt));
dbt.size = argp->prefix + argp->suffix + argp->orig.size;
- if ((ret = __os_malloc(dbenv, dbt.size, NULL, &dbt.data)) != 0)
- goto err;
+ if ((ret = __os_malloc(dbenv, dbt.size, &dbt.data)) != 0)
+ goto out;
p = dbt.data;
memcpy(p, bk->data, argp->prefix);
p += argp->prefix;
@@ -995,27 +745,27 @@ __bam_repl_recover(dbenv, dbtp, lsnp, op, info)
memcpy(p, bk->data + (bk->len - argp->suffix), argp->suffix);
ret = __bam_ritem(dbc, pagep, argp->indx, &dbt);
- __os_free(dbt.data, dbt.size);
+ __os_free(dbenv, dbt.data);
if (ret != 0)
- goto err;
+ goto out;
/* Reset the deleted flag, if necessary. */
if (argp->isdeleted)
- B_DSET(GET_BKEYDATA(pagep, argp->indx)->type);
+ B_DSET(GET_BKEYDATA(file_dbp, pagep, argp->indx)->type);
LSN(pagep) = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
- if (0) {
-err: (void)memp_fput(mpf, pagep, 0);
- }
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -1040,14 +790,15 @@ __bam_root_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
int cmp_n, cmp_p, modified, ret;
+ meta = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__bam_root_print);
REC_INTRO(__bam_root_read, 0);
- if ((ret = memp_fget(mpf, &argp->meta_pgno, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->meta_pgno, 0, &meta)) != 0) {
/* The metadata page must always exist on redo. */
if (DB_REDO(op)) {
- (void)__db_pgerr(file_dbp, argp->meta_pgno);
+ ret = __db_pgerr(file_dbp, argp->meta_pgno, ret);
goto out;
} else
goto done;
@@ -1068,13 +819,16 @@ __bam_root_recover(dbenv, dbtp, lsnp, op, info)
meta->dbmeta.lsn = argp->meta_lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ meta = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+ REC_CLOSE;
}
/*
@@ -1100,6 +854,7 @@ __bam_curadj_recover(dbenv, dbtp, lsnp, op, info)
int ret;
COMPQUIET(info, NULL);
+ COMPQUIET(mpf, NULL);
REC_PRINT(__bam_curadj_print);
REC_INTRO(__bam_curadj_read, 0);
@@ -1108,7 +863,7 @@ __bam_curadj_recover(dbenv, dbtp, lsnp, op, info)
if (op != DB_TXN_ABORT)
goto done;
- switch(argp->mode) {
+ switch (argp->mode) {
case DB_CA_DI:
if ((ret = __bam_ca_di(dbc, argp->from_pgno,
argp->from_indx, -(int)argp->first_indx)) != 0)
@@ -1116,7 +871,7 @@ __bam_curadj_recover(dbenv, dbtp, lsnp, op, info)
break;
case DB_CA_DUP:
if ((ret = __bam_ca_undodup(file_dbp, argp->first_indx,
- argp->from_pgno, argp->from_indx, argp->to_indx)) != 0)
+ argp->from_pgno, argp->from_indx, argp->to_indx)) != 0)
goto out;
break;
@@ -1160,6 +915,7 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
int ret, t_ret;
COMPQUIET(info, NULL);
+ COMPQUIET(mpf, NULL);
rdbc = NULL;
REC_PRINT(__bam_rcuradj_print);
@@ -1180,15 +936,15 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
* state into __ram_ca, and this way we don't need to make
* this function know anything about how offpage dups work.
*/
- if ((ret =
- __db_icursor(file_dbp, NULL, DB_RECNO, argp->root, 0, &rdbc)) != 0)
+ if ((ret = __db_cursor_int(file_dbp,
+ NULL, DB_RECNO, argp->root, 0, DB_LOCK_INVALIDID, &rdbc)) != 0)
goto out;
cp = (BTREE_CURSOR *)rdbc->internal;
F_SET(cp, C_RENUMBER);
cp->recno = argp->recno;
- switch(argp->mode) {
+ switch (argp->mode) {
case CA_DELETE:
/*
* The way to undo a delete is with an insert. Since
@@ -1197,7 +953,7 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
F_SET(cp, C_DELETED);
F_SET(cp, C_RENUMBER); /* Just in case. */
cp->order = argp->order;
- __ram_ca(rdbc, CA_ICURRENT);
+ (void)__ram_ca(rdbc, CA_ICURRENT);
break;
case CA_IAFTER:
case CA_IBEFORE:
@@ -1208,12 +964,12 @@ __bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)
*/
F_CLR(cp, C_DELETED);
cp->order = INVALID_ORDER;
- __ram_ca(rdbc, CA_DELETE);
+ (void)__ram_ca(rdbc, CA_DELETE);
break;
}
done: *lsnp = argp->prev_lsn;
-out: if (rdbc != NULL && (t_ret = rdbc->c_close(rdbc)) != 0 && ret == 0)
+out: if (rdbc != NULL && (t_ret = __db_c_close(rdbc)) != 0 && ret == 0)
ret = t_ret;
REC_CLOSE;
}
diff --git a/db/btree/bt_reclaim.c b/db/btree/bt_reclaim.c
index 538d837c2..bc85bd2d3 100644
--- a/db/btree/bt_reclaim.c
+++ b/db/btree/bt_reclaim.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_reclaim.c,v 11.5 2000/03/22 04:21:01 ubell Exp $";
+static const char revid[] = "$Id: bt_reclaim.c,v 11.14 2003/06/30 17:19:33 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,10 +18,8 @@ static const char revid[] = "$Id: bt_reclaim.c,v 11.5 2000/03/22 04:21:01 ubell
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
/*
* __bam_reclaim --
@@ -38,7 +36,7 @@ __bam_reclaim(dbp, txn)
int ret, t_ret;
/* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
return (ret);
/* Walk the tree, freeing pages. */
@@ -46,8 +44,34 @@ __bam_reclaim(dbp, txn)
DB_LOCK_WRITE, dbc->internal->root, __db_reclaim_callback, dbc);
/* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
+
+/*
+ * __bam_truncate --
+ * Truncate a database.
+ *
+ * PUBLIC: int __bam_truncate __P((DBC *, u_int32_t *));
+ */
+int
+__bam_truncate(dbc, countp)
+ DBC *dbc;
+ u_int32_t *countp;
+{
+ db_trunc_param trunc;
+ int ret;
+
+ trunc.count = 0;
+ trunc.dbc = dbc;
+
+ /* Walk the tree, freeing pages. */
+ ret = __bam_traverse(dbc,
+ DB_LOCK_WRITE, dbc->internal->root, __db_truncate_callback, &trunc);
+
+ *countp = trunc.count;
+
+ return (ret);
+}
diff --git a/db/btree/bt_recno.c b/db/btree/bt_recno.c
index 6ac0cac35..2098e4d94 100644
--- a/db/btree/bt_recno.c
+++ b/db/btree/bt_recno.c
@@ -1,36 +1,29 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_recno.c,v 11.65 2001/01/18 14:33:22 bostic Exp $";
+static const char revid[] = "$Id: bt_recno.c,v 11.113 2003/06/30 17:19:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <limits.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "db_ext.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "lock_ext.h"
-#include "qam.h"
-#include "txn.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
static int __ram_add __P((DBC *, db_recno_t *, DBT *, u_int32_t, u_int32_t));
-static int __ram_delete __P((DB *, DB_TXN *, DBT *, u_int32_t));
-static int __ram_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
static int __ram_source __P((DB *));
static int __ram_sread __P((DBC *, db_recno_t));
static int __ram_update __P((DBC *, db_recno_t, int));
@@ -63,7 +56,7 @@ static int __ram_update __P((DBC *, db_recno_t, int));
} \
}
#define CD_ISSET(cp) \
- (F_ISSET(cp, C_RENUMBER) && F_ISSET(cp, C_DELETED))
+ (F_ISSET(cp, C_RENUMBER) && F_ISSET(cp, C_DELETED) ? 1 : 0)
/*
* Macros for comparing the ordering of two cursors.
@@ -90,17 +83,32 @@ static int __ram_update __P((DBC *, db_recno_t, int));
* Do we need to log the current cursor adjustment?
*/
#define CURADJ_LOG(dbc) \
- (DB_LOGGING((dbc)) && (dbc)->txn != NULL && (dbc)->txn->parent != NULL)
+ (DBC_LOGGING((dbc)) && (dbc)->txn != NULL && (dbc)->txn->parent != NULL)
+
+/*
+ * After a search, copy the found page into the cursor, discarding any
+ * currently held lock.
+ */
+#define STACK_TO_CURSOR(cp) { \
+ (cp)->page = (cp)->csp->page; \
+ (cp)->pgno = (cp)->csp->page->pgno; \
+ (cp)->indx = (cp)->csp->indx; \
+ (void)__TLPUT(dbc, (cp)->lock); \
+ (cp)->lock = (cp)->csp->lock; \
+ (cp)->lock_mode = (cp)->csp->lock_mode; \
+}
/*
* __ram_open --
* Recno open function.
*
- * PUBLIC: int __ram_open __P((DB *, const char *, db_pgno_t, u_int32_t));
+ * PUBLIC: int __ram_open __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, db_pgno_t, u_int32_t));
*/
int
-__ram_open(dbp, name, base_pgno, flags)
+__ram_open(dbp, txn, name, base_pgno, flags)
DB *dbp;
+ DB_TXN *txn;
const char *name;
db_pgno_t base_pgno;
u_int32_t flags;
@@ -109,15 +117,11 @@ __ram_open(dbp, name, base_pgno, flags)
DBC *dbc;
int ret, t_ret;
+ COMPQUIET(name, NULL);
t = dbp->bt_internal;
- /* Initialize the remaining fields/methods of the DB. */
- dbp->del = __ram_delete;
- dbp->put = __ram_put;
- dbp->stat = __bam_stat;
-
/* Start up the tree. */
- if ((ret = __bam_read_root(dbp, name, base_pgno, flags)) != 0)
+ if ((ret = __bam_read_root(dbp, txn, base_pgno, flags)) != 0)
return (ret);
/*
@@ -132,9 +136,9 @@ __ram_open(dbp, name, base_pgno, flags)
return (ret);
/* If we're snapshotting an underlying source file, do it now. */
- if (F_ISSET(dbp, DB_RE_SNAPSHOT)) {
+ if (F_ISSET(dbp, DB_AM_SNAPSHOT)) {
/* Allocate a cursor. */
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
return (ret);
/* Do the snapshot. */
@@ -143,108 +147,42 @@ __ram_open(dbp, name, base_pgno, flags)
ret = 0;
/* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
}
- return (0);
-}
-
-/*
- * __ram_delete --
- * Recno db->del function.
- */
-static int
-__ram_delete(dbp, txn, key, flags)
- DB *dbp;
- DB_TXN *txn;
- DBT *key;
- u_int32_t flags;
-{
- BTREE_CURSOR *cp;
- DBC *dbc;
- db_recno_t recno;
- int ret, t_ret;
-
- PANIC_CHECK(dbp->dbenv);
-
- /* Check for invalid flags. */
- if ((ret = __db_delchk(dbp,
- key, flags, F_ISSET(dbp, DB_AM_RDONLY))) != 0)
- return (ret);
-
- /* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
-
- DEBUG_LWRITE(dbc, txn, "ram_delete", key, NULL, flags);
-
- /* Check the user's record number and fill in as necessary. */
- if ((ret = __ram_getno(dbc, key, &recno, 0)) != 0)
- goto err;
-
- /* Do the delete. */
- cp = (BTREE_CURSOR *)dbc->internal;
- cp->recno = recno;
-
- ret = __ram_c_del(dbc);
-
- /* Release the cursor. */
-err: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
return (ret);
}
/*
- * __ram_put --
- * Recno db->put function.
+ * __ram_append --
+ * Recno append function.
+ *
+ * PUBLIC: int __ram_append __P((DBC *, DBT *, DBT *));
*/
-static int
-__ram_put(dbp, txn, key, data, flags)
- DB *dbp;
- DB_TXN *txn;
+int
+__ram_append(dbc, key, data)
+ DBC *dbc;
DBT *key, *data;
- u_int32_t flags;
{
- DBC *dbc;
- db_recno_t recno;
- int ret, t_ret;
-
- PANIC_CHECK(dbp->dbenv);
-
- /* Check for invalid flags. */
- if ((ret = __db_putchk(dbp,
- key, data, flags, F_ISSET(dbp, DB_AM_RDONLY), 0)) != 0)
- return (ret);
-
- /* Allocate a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
+ BTREE_CURSOR *cp;
+ int ret;
- DEBUG_LWRITE(dbc, txn, "ram_put", key, data, flags);
+ cp = (BTREE_CURSOR *)dbc->internal;
/*
- * If we're appending to the tree, make sure we've read in all of
- * the backing source file. Otherwise, check the user's record
- * number and fill in as necessary. If we found the record or it
- * simply didn't exist, add the user's record.
+ * Make sure we've read in all of the backing source file. If
+ * we found the record or it simply didn't exist, add the
+ * user's record.
*/
- if (flags == DB_APPEND)
- ret = __ram_update(dbc, DB_MAX_RECORDS, 0);
- else
- ret = __ram_getno(dbc, key, &recno, 1);
+ ret = __ram_update(dbc, DB_MAX_RECORDS, 0);
if (ret == 0 || ret == DB_NOTFOUND)
- ret = __ram_add(dbc, &recno, data, flags, 0);
-
- /* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
+ ret = __ram_add(dbc, &cp->recno, data, DB_APPEND, 0);
- /* Return the record number if we're appending to the tree. */
- if (ret == 0 && flags == DB_APPEND)
- ret = __db_retcopy(dbp, key, &recno, sizeof(recno),
- &dbc->rkey.data, &dbc->rkey.ulen);
+ /* Return the record number. */
+ if (ret == 0)
+ ret = __db_retcopy(dbc->dbp->dbenv, key, &cp->recno,
+ sizeof(cp->recno), &dbc->rkey->data, &dbc->rkey->ulen);
return (ret);
}
@@ -266,7 +204,7 @@ __ram_c_del(dbc)
DB_LSN lsn;
DBT hdr, data;
EPG *epg;
- int exact, ret, stack;
+ int exact, ret, stack, t_ret;
dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
@@ -295,9 +233,9 @@ __ram_c_del(dbc)
goto err;
}
stack = 1;
- cp->page = cp->csp->page;
- cp->pgno = cp->csp->page->pgno;
- cp->indx = cp->csp->indx;
+
+ /* Copy the page into the cursor. */
+ STACK_TO_CURSOR(cp);
/*
* If re-numbering records, the on-page deleted flag can only mean
@@ -310,7 +248,7 @@ __ram_c_del(dbc)
* delete records they never created, the latter is an error because
* if the record was "deleted", we could never have found it.
*/
- if (B_DISSET(GET_BKEYDATA(cp->page, cp->indx)->type)) {
+ if (B_DISSET(GET_BKEYDATA(dbp, cp->page, cp->indx)->type)) {
ret = DB_KEYEMPTY;
goto err;
}
@@ -319,11 +257,11 @@ __ram_c_del(dbc)
/* Delete the item, adjust the counts, adjust the cursors. */
if ((ret = __bam_ditem(dbc, cp->page, cp->indx)) != 0)
goto err;
- __bam_adjust(dbc, -1);
+ if ((ret = __bam_adjust(dbc, -1)) != 0)
+ goto err;
if (__ram_ca(dbc, CA_DELETE) > 0 &&
- CURADJ_LOG(dbc) && (ret = __bam_rcuradj_log(dbp->dbenv,
- dbc->txn, &lsn, 0, dbp->log_fileid, CA_DELETE,
- cp->root, cp->recno, cp->order)) != 0)
+ CURADJ_LOG(dbc) && (ret = __bam_rcuradj_log(dbp, dbc->txn,
+ &lsn, 0, CA_DELETE, cp->root, cp->recno, cp->order)) != 0)
goto err;
/*
@@ -346,15 +284,15 @@ __ram_c_del(dbc)
* going to be emptied by removing the single reference
* to the emptied page (or one of its parents).
*/
- for (epg = cp->sp; epg <= cp->csp; ++epg)
- if (NUM_ENT(epg->page) <= 1)
+ for (epg = cp->csp; epg >= cp->sp; --epg)
+ if (NUM_ENT(epg->page) > 1)
break;
/*
* We want to delete a single item out of the last page
- * that we're not deleting, back up to that page.
+ * that we're not deleting.
*/
- ret = __bam_dpages(dbc, --epg);
+ ret = __bam_dpages(dbc, epg);
/*
* Regardless of the return from __bam_dpages, it will
@@ -383,8 +321,8 @@ __ram_c_del(dbc)
t->re_modified = 1;
-err: if (stack)
- __bam_stkrel(dbc, STK_CLRDBC);
+err: if (stack && (t_ret = __bam_stkrel(dbc, STK_CLRDBC)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -412,6 +350,7 @@ __ram_c_get(dbc, key, data, flags, pgnop)
dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
+ LF_CLR(DB_MULTIPLE|DB_MULTIPLE_KEY);
retry: switch (flags) {
case DB_CURRENT:
/*
@@ -445,8 +384,13 @@ retry: switch (flags) {
* we have to avoid incrementing the record number so that we
* return the right record by virtue of renumbering the tree.
*/
- if (CD_ISSET(cp))
+ if (CD_ISSET(cp)) {
+ /*
+ * Clear the flag, we've moved off the deleted record.
+ */
+ CD_CLR(cp);
break;
+ }
if (cp->recno != RECNO_OOB) {
++cp->recno;
@@ -504,6 +448,7 @@ retry: switch (flags) {
goto err;
/* NOTREACHED */
case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
/*
* If we're searching a set of off-page dups, we start
* a new linear search from the first record. Otherwise,
@@ -531,6 +476,8 @@ retry: switch (flags) {
* read from the backing source file. Do it now for DB_CURRENT (if
* the current record was deleted we may need more records from the
* backing file for a DB_CURRENT operation), DB_FIRST and DB_NEXT.
+ * (We don't have to test for flags == DB_FIRST, because the switch
+ * statement above re-set flags to DB_NEXT in that case.)
*/
if ((flags == DB_NEXT || flags == DB_CURRENT) && ((ret =
__ram_update(dbc, cp->recno, 0)) != 0) && ret != DB_NOTFOUND)
@@ -547,16 +494,8 @@ retry: switch (flags) {
goto err;
}
- /*
- * Copy the page into the cursor, discarding any lock we
- * are currently holding.
- */
- cp->page = cp->csp->page;
- cp->pgno = cp->csp->page->pgno;
- cp->indx = cp->csp->indx;
- (void)__TLPUT(dbc, cp->lock);
- cp->lock = cp->csp->lock;
- cp->lock_mode = cp->csp->lock_mode;
+ /* Copy the page into the cursor. */
+ STACK_TO_CURSOR(cp);
/*
* If re-numbering records, the on-page deleted flag means this
@@ -567,21 +506,34 @@ retry: switch (flags) {
* walking through off-page duplicates, and fail if they were
* requested explicitly by the application.
*/
- if (B_DISSET(GET_BKEYDATA(cp->page, cp->indx)->type))
+ if (B_DISSET(GET_BKEYDATA(dbp, cp->page, cp->indx)->type))
switch (flags) {
case DB_NEXT:
case DB_PREV:
(void)__bam_stkrel(dbc, STK_CLRDBC);
goto retry;
case DB_GET_BOTH:
- (void)__bam_stkrel(dbc, STK_CLRDBC);
- continue;
+ case DB_GET_BOTH_RANGE:
+ /*
+ * If we're an OPD tree, we don't care about
+ * matching a record number on a DB_GET_BOTH
+ * -- everything belongs to the same tree. A
+ * normal recno should give up and return
+ * DB_NOTFOUND if the matching recno is deleted.
+ */
+ if (F_ISSET(dbc, DBC_OPD)) {
+ (void)__bam_stkrel(dbc, STK_CLRDBC);
+ continue;
+ }
+ ret = DB_NOTFOUND;
+ goto err;
default:
ret = DB_KEYEMPTY;
goto err;
}
- if (flags == DB_GET_BOTH || flags == DB_GET_BOTHC) {
+ if (flags == DB_GET_BOTH ||
+ flags == DB_GET_BOTHC || flags == DB_GET_BOTH_RANGE) {
if ((ret = __bam_cmp(dbp, data,
cp->page, cp->indx, __bam_defcmp, &cmp)) != 0)
return (ret);
@@ -598,10 +550,11 @@ retry: switch (flags) {
/* Return the key if the user didn't give us one. */
if (!F_ISSET(dbc, DBC_OPD)) {
- if (flags != DB_SET && flags != DB_SET_RANGE)
- ret = __db_retcopy(dbp,
- key, &cp->recno, sizeof(cp->recno),
- &dbc->rkey.data, &dbc->rkey.ulen);
+ if (flags != DB_GET_BOTH && flags != DB_GET_BOTH_RANGE &&
+ flags != DB_SET && flags != DB_SET_RANGE)
+ ret = __db_retcopy(dbp->dbenv,
+ key, &cp->recno, sizeof(cp->recno),
+ &dbc->rkey->data, &dbc->rkey->ulen);
F_SET(key, DB_DBT_ISSET);
}
@@ -637,23 +590,45 @@ __ram_c_put(dbc, key, data, flags, pgnop)
cp = (BTREE_CURSOR *)dbc->internal;
/*
- * DB_KEYFIRST and DB_KEYLAST will only be set if we're dealing with
- * an off-page duplicate tree, they can't be specified at user level.
- * Translate them into something else.
+ * DB_KEYFIRST and DB_KEYLAST mean different things if they're
+ * used in an off-page duplicate tree. If we're an off-page
+ * duplicate tree, they really mean "put at the beginning of the
+ * tree" and "put at the end of the tree" respectively, so translate
+ * them to something else.
*/
- switch (flags) {
- case DB_KEYFIRST:
- cp->recno = 1;
- flags = DB_BEFORE;
- break;
- case DB_KEYLAST:
- if ((ret = __ram_add(dbc, &cp->recno, data, DB_APPEND, 0)) != 0)
- return (ret);
- if (CURADJ_LOG(dbc) && (ret = __bam_rcuradj_log(dbp->dbenv,
- dbc->txn, &lsn, 0, dbp->log_fileid, CA_ICURRENT,
- cp->root, cp->recno, cp->order)))
- return (ret);
- return (0);
+ if (F_ISSET(dbc, DBC_OPD))
+ switch (flags) {
+ case DB_KEYFIRST:
+ cp->recno = 1;
+ flags = DB_BEFORE;
+ break;
+ case DB_KEYLAST:
+ if ((ret = __ram_add(dbc,
+ &cp->recno, data, DB_APPEND, 0)) != 0)
+ return (ret);
+ if (CURADJ_LOG(dbc) &&
+ (ret = __bam_rcuradj_log(dbp, dbc->txn, &lsn, 0,
+ CA_ICURRENT, cp->root, cp->recno, cp->order)) != 0)
+ return (ret);
+ return (0);
+ default:
+ break;
+ }
+
+ /*
+ * Handle normal DB_KEYFIRST/DB_KEYLAST; for a recno, which has
+ * no duplicates, these are identical and mean "put the given
+ * datum at the given recno".
+ *
+ * Note that the code here used to be in __ram_put; now, we
+ * go through the access-method-common __db_put function, which
+ * handles DB_NOOVERWRITE, so we and __ram_add don't have to.
+ */
+ if (flags == DB_KEYFIRST || flags == DB_KEYLAST) {
+ ret = __ram_getno(dbc, key, &cp->recno, 1);
+ if (ret == 0 || ret == DB_NOTFOUND)
+ ret = __ram_add(dbc, &cp->recno, data, 0, 0);
+ return (ret);
}
/*
@@ -677,9 +652,8 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
*/
DB_ASSERT(exact || CD_ISSET(cp));
- cp->page = cp->csp->page;
- cp->pgno = cp->csp->page->pgno;
- cp->indx = cp->csp->indx;
+ /* Copy the page into the cursor. */
+ STACK_TO_CURSOR(cp);
ret = __bam_iitem(dbc, key, data, iiflags, 0);
t_ret = __bam_stkrel(dbc, STK_CLRDBC);
@@ -688,7 +662,7 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
ret = t_ret;
else if (ret == DB_NEEDSPLIT) {
arg = &cp->recno;
- if ((ret = __bam_split(dbc, arg)) != 0)
+ if ((ret = __bam_split(dbc, arg, NULL)) != 0)
goto err;
goto split;
}
@@ -709,8 +683,7 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
/* Only log if __ram_ca found any relevant cursors. */
if (nc > 0 && CURADJ_LOG(dbc) &&
- (ret = __bam_rcuradj_log(dbp->dbenv,
- dbc->txn, &lsn, 0, dbp->log_fileid, CA_IAFTER,
+ (ret = __bam_rcuradj_log(dbp, dbc->txn, &lsn, 0, CA_IAFTER,
cp->root, cp->recno, cp->order)) != 0)
goto err;
break;
@@ -720,8 +693,7 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
/* Only log if __ram_ca found any relevant cursors. */
if (nc > 0 && CURADJ_LOG(dbc) &&
- (ret = __bam_rcuradj_log(dbp->dbenv,
- dbc->txn, &lsn, 0, dbp->log_fileid, CA_IBEFORE,
+ (ret = __bam_rcuradj_log(dbp, dbc->txn, &lsn, 0, CA_IBEFORE,
cp->root, cp->recno, cp->order)) != 0)
goto err;
break;
@@ -734,17 +706,19 @@ split: if ((ret = __bam_rsearch(dbc, &cp->recno, S_INSERT, 1, &exact)) != 0)
* Only log if __ram_ca found any relevant cursors.
*/
if (CD_ISSET(cp) && __ram_ca(dbc, CA_ICURRENT) > 0 &&
- CURADJ_LOG(dbc) && (ret = __bam_rcuradj_log(
- dbp->dbenv, dbc->txn, &lsn, 0, dbp->log_fileid,
+ CURADJ_LOG(dbc) &&
+ (ret = __bam_rcuradj_log(dbp, dbc->txn, &lsn, 0,
CA_ICURRENT, cp->root, cp->recno, cp->order)) != 0)
goto err;
break;
+ default:
+ break;
}
/* Return the key if we've created a new record. */
if (!F_ISSET(dbc, DBC_OPD) && (flags == DB_AFTER || flags == DB_BEFORE))
- ret = __db_retcopy(dbp, key, &cp->recno,
- sizeof(cp->recno), &dbc->rkey.data, &dbc->rkey.ulen);
+ ret = __db_retcopy(dbp->dbenv, key, &cp->recno,
+ sizeof(cp->recno), &dbc->rkey->data, &dbc->rkey->ulen);
/* The cursor was reset, no further delete adjustment is necessary. */
err: CD_CLR(cp);
@@ -940,13 +914,12 @@ __ram_update(dbc, recno, can_create)
int can_create;
{
BTREE *t;
- BTREE_CURSOR *cp;
DB *dbp;
+ DBT *rdata;
db_recno_t nrecs;
int ret;
dbp = dbc->dbp;
- cp = (BTREE_CURSOR *)dbc->internal;
t = dbp->bt_internal;
/*
@@ -976,27 +949,13 @@ __ram_update(dbc, recno, can_create)
if (!can_create || recno <= nrecs + 1)
return (0);
- dbc->rdata.dlen = 0;
- dbc->rdata.doff = 0;
- dbc->rdata.flags = 0;
- if (F_ISSET(dbp, DB_RE_FIXEDLEN)) {
- if (dbc->rdata.ulen < t->re_len) {
- if ((ret = __os_realloc(dbp->dbenv,
- t->re_len, NULL, &dbc->rdata.data)) != 0) {
- dbc->rdata.ulen = 0;
- dbc->rdata.data = NULL;
- return (ret);
- }
- dbc->rdata.ulen = t->re_len;
- }
- dbc->rdata.size = t->re_len;
- memset(dbc->rdata.data, t->re_pad, t->re_len);
- } else
- dbc->rdata.size = 0;
+ rdata = &dbc->my_rdata;
+ rdata->flags = 0;
+ rdata->size = 0;
while (recno > ++nrecs)
if ((ret = __ram_add(dbc,
- &nrecs, &dbc->rdata, 0, BI_DELETED)) != 0)
+ &nrecs, rdata, 0, BI_DELETED)) != 0)
return (ret);
return (0);
}
@@ -1017,9 +976,9 @@ __ram_source(dbp)
/* Find the real name, and swap out the one we had before. */
if ((ret = __db_appname(dbp->dbenv,
- DB_APP_DATA, NULL, t->re_source, 0, NULL, &source)) != 0)
+ DB_APP_DATA, t->re_source, 0, NULL, &source)) != 0)
return (ret);
- __os_freestr(t->re_source);
+ __os_free(dbp->dbenv, t->re_source);
t->re_source = source;
/*
@@ -1060,6 +1019,7 @@ __ram_writeback(dbp)
t = dbp->bt_internal;
dbenv = dbp->dbenv;
fp = NULL;
+ pad = NULL;
/* If the file wasn't modified, we're done. */
if (!t->re_modified)
@@ -1072,7 +1032,7 @@ __ram_writeback(dbp)
}
/* Allocate a cursor. */
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
return (ret);
/*
@@ -1119,40 +1079,45 @@ __ram_writeback(dbp)
/*
* We step through the records, writing each one out. Use the record
* number and the dbp->get() function, instead of a cursor, so we find
- * and write out "deleted" or non-existent records.
+ * and write out "deleted" or non-existent records. The DB handle may
+ * be threaded, so allocate memory as we go.
*/
memset(&key, 0, sizeof(key));
- memset(&data, 0, sizeof(data));
key.size = sizeof(db_recno_t);
key.data = &keyno;
+ memset(&data, 0, sizeof(data));
+ F_SET(&data, DB_DBT_REALLOC);
/*
* We'll need the delimiter if we're doing variable-length records,
* and the pad character if we're doing fixed-length records.
*/
delim = t->re_delim;
- if (F_ISSET(dbp, DB_RE_FIXEDLEN)) {
- if ((ret = __os_malloc(dbenv, t->re_len, NULL, &pad)) != 0)
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
+ if ((ret = __os_malloc(dbenv, t->re_len, &pad)) != 0)
goto err;
memset(pad, t->re_pad, t->re_len);
- } else
- COMPQUIET(pad, NULL);
+ }
for (keyno = 1;; ++keyno) {
- switch (ret = dbp->get(dbp, NULL, &key, &data, 0)) {
+ switch (ret = __db_get(dbp, NULL, &key, &data, 0)) {
case 0:
- if (fwrite(data.data, 1, data.size, fp) != data.size)
+ if (data.size != 0 && (u_int32_t)fwrite(
+ data.data, 1, data.size, fp) != data.size)
goto write_err;
break;
case DB_KEYEMPTY:
- if (F_ISSET(dbp, DB_RE_FIXEDLEN) &&
- fwrite(pad, 1, t->re_len, fp) != t->re_len)
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN) &&
+ (u_int32_t)fwrite(pad, 1, t->re_len, fp) !=
+ t->re_len)
goto write_err;
break;
case DB_NOTFOUND:
ret = 0;
goto done;
+ default:
+ goto err;
}
- if (!F_ISSET(dbp, DB_RE_FIXEDLEN) &&
+ if (!F_ISSET(dbp, DB_AM_FIXEDLEN) &&
fwrite(&delim, 1, 1, fp) != 1) {
write_err: ret = errno;
__db_err(dbp->dbenv,
@@ -1171,9 +1136,15 @@ done: /* Close the file descriptor. */
}
/* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
+ /* Discard memory allocated to hold the data items. */
+ if (data.data != NULL)
+ __os_ufree(dbenv, data.data);
+ if (pad != NULL)
+ __os_free(dbenv, pad);
+
if (ret == 0)
t->re_modified = 0;
@@ -1191,7 +1162,7 @@ __ram_sread(dbc, top)
{
BTREE *t;
DB *dbp;
- DBT data;
+ DBT data, *rdata;
db_recno_t recno;
size_t len;
int ch, ret, was_modified;
@@ -1203,45 +1174,56 @@ __ram_sread(dbc, top)
if ((ret = __bam_nrecs(dbc, &recno)) != 0)
return (ret);
- /* Use the record data return memory, it's only a short-term use. */
- len = F_ISSET(dbp, DB_RE_FIXEDLEN) ? t->re_len : 256;
- if (dbc->rdata.ulen < len) {
+ /*
+ * Use the record key return memory, it's only a short-term use.
+ * The record data return memory is used by __bam_iitem, which
+ * we'll indirectly call, so use the key so as not to collide.
+ */
+ len = F_ISSET(dbp, DB_AM_FIXEDLEN) ? t->re_len : 256;
+ rdata = &dbc->my_rkey;
+ if (rdata->ulen < len) {
if ((ret = __os_realloc(
- dbp->dbenv, len, NULL, &dbc->rdata.data)) != 0) {
- dbc->rdata.ulen = 0;
- dbc->rdata.data = NULL;
+ dbp->dbenv, len, &rdata->data)) != 0) {
+ rdata->ulen = 0;
+ rdata->data = NULL;
return (ret);
}
- dbc->rdata.ulen = len;
+ rdata->ulen = (u_int32_t)len;
}
memset(&data, 0, sizeof(data));
while (recno < top) {
- data.data = dbc->rdata.data;
+ data.data = rdata->data;
data.size = 0;
- if (F_ISSET(dbp, DB_RE_FIXEDLEN))
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN))
for (len = t->re_len; len > 0; --len) {
- if ((ch = getc(t->re_fp)) == EOF)
- goto eof;
+ if ((ch = getc(t->re_fp)) == EOF) {
+ if (data.size == 0)
+ goto eof;
+ break;
+ }
((u_int8_t *)data.data)[data.size++] = ch;
}
else
for (;;) {
- if ((ch = getc(t->re_fp)) == EOF)
- goto eof;
+ if ((ch = getc(t->re_fp)) == EOF) {
+ if (data.size == 0)
+ goto eof;
+ break;
+ }
if (ch == t->re_delim)
break;
((u_int8_t *)data.data)[data.size++] = ch;
- if (data.size == dbc->rdata.ulen) {
+ if (data.size == rdata->ulen) {
if ((ret = __os_realloc(dbp->dbenv,
- dbc->rdata.ulen *= 2,
- NULL, &dbc->rdata.data)) != 0) {
- dbc->rdata.ulen = 0;
- dbc->rdata.data = NULL;
+ rdata->ulen *= 2,
+ &rdata->data)) != 0) {
+ rdata->ulen = 0;
+ rdata->data = NULL;
return (ret);
} else
- data.data = dbc->rdata.data;
+ data.data = rdata->data;
}
}
@@ -1281,9 +1263,8 @@ __ram_add(dbc, recnop, data, flags, bi_flags)
DBT *data;
u_int32_t flags, bi_flags;
{
- BKEYDATA *bk;
BTREE_CURSOR *cp;
- int exact, ret, stack;
+ int exact, ret, stack, t_ret;
cp = (BTREE_CURSOR *)dbc->internal;
@@ -1292,9 +1273,9 @@ retry: /* Find the slot for insertion. */
S_INSERT | (flags == DB_APPEND ? S_APPEND : 0), 1, &exact)) != 0)
return (ret);
stack = 1;
- cp->page = cp->csp->page;
- cp->pgno = cp->csp->page->pgno;
- cp->indx = cp->csp->indx;
+
+ /* Copy the page into the cursor. */
+ STACK_TO_CURSOR(cp);
/*
* The application may modify the data based on the selected record
@@ -1305,24 +1286,6 @@ retry: /* Find the slot for insertion. */
goto err;
/*
- * If re-numbering records, the on-page deleted flag means this record
- * was implicitly created. If not re-numbering records, the on-page
- * deleted flag means this record was implicitly created, or, it was
- * deleted at some time.
- *
- * If DB_NOOVERWRITE is set and the item already exists in the tree,
- * return an error unless the item was either marked for deletion or
- * only implicitly created.
- */
- if (exact) {
- bk = GET_BKEYDATA(cp->page, cp->indx);
- if (!B_DISSET(bk->type) && flags == DB_NOOVERWRITE) {
- ret = DB_KEYEXIST;
- goto err;
- }
- }
-
- /*
* Select the arguments for __bam_iitem() and do the insert. If the
* key is an exact match, or we're replacing the data item with a
* new data item, replace the current item. If the key isn't an exact
@@ -1353,7 +1316,7 @@ retry: /* Find the slot for insertion. */
(void)__bam_stkrel(dbc, STK_CLRDBC);
stack = 0;
- if ((ret = __bam_split(dbc, recnop)) != 0)
+ if ((ret = __bam_split(dbc, recnop, NULL)) != 0)
goto err;
goto retry;
@@ -1362,8 +1325,8 @@ retry: /* Find the slot for insertion. */
goto err;
}
-err: if (stack)
- __bam_stkrel(dbc, STK_CLRDBC);
+err: if (stack && (t_ret = __bam_stkrel(dbc, STK_CLRDBC)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
}
diff --git a/db/btree/bt_rsearch.c b/db/btree/bt_rsearch.c
index 7102cd715..92eb82144 100644
--- a/db/btree/bt_rsearch.c
+++ b/db/btree/bt_rsearch.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -40,7 +40,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_rsearch.c,v 11.21 2000/03/28 21:50:04 ubell Exp $";
+static const char revid[] = "$Id: bt_rsearch.c,v 11.37 2003/06/30 17:19:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -48,10 +48,11 @@ static const char revid[] = "$Id: bt_rsearch.c,v 11.21 2000/03/28 21:50:04 ubell
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "db_shash.h"
-#include "lock.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
/*
* __bam_rsearch --
@@ -70,6 +71,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
BTREE_CURSOR *cp;
DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
RINTERNAL *ri;
db_indx_t adjust, deloffset, indx, top;
@@ -79,6 +81,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
int ret, stack;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
BT_STK_CLR(cp);
@@ -99,11 +102,11 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
* Retrieve the root page.
*/
pg = cp->root;
- stack = LF_ISSET(S_STACK);
+ stack = LF_ISSET(S_STACK) ? 1 : 0;
lock_mode = stack ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
/* Did not read it, so we can release the lock */
(void)__LPUT(dbc, lock);
return (ret);
@@ -120,12 +123,12 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
if (!stack &&
((LF_ISSET(S_PARENT) && (u_int8_t)(stop + 1) >= h->level) ||
(LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__LPUT(dbc, lock);
lock_mode = DB_LOCK_WRITE;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
/* Did not read it, so we can release the lock */
(void)__LPUT(dbc, lock);
return (ret);
@@ -164,7 +167,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
* eliminate any concurrency. A possible fix
* would be to lock the last leaf page instead.
*/
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__TLPUT(dbc, lock);
return (DB_NOTFOUND);
}
@@ -198,12 +201,14 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
*exactp = 0;
if (!LF_ISSET(S_PAST_EOF) ||
recno > t_recno + 1) {
+ (void)__memp_fput(mpf, h, 0);
+ (void)__TLPUT(dbc, lock);
ret = DB_NOTFOUND;
goto err;
}
}
- if (!B_DISSET(
- GET_BKEYDATA(h, indx + deloffset)->type) &&
+ if (!B_DISSET(GET_BKEYDATA(dbp, h,
+ indx + deloffset)->type) &&
++t_recno == recno)
break;
}
@@ -216,7 +221,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
return (0);
case P_IBTREE:
for (indx = 0, top = NUM_ENT(h);;) {
- bi = GET_BINTERNAL(h, indx);
+ bi = GET_BINTERNAL(dbp, h, indx);
if (++indx == top || total + bi->nrecs >= recno)
break;
total += bi->nrecs;
@@ -235,7 +240,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
return (0);
case P_IRECNO:
for (indx = 0, top = NUM_ENT(h);;) {
- ri = GET_RINTERNAL(h, indx);
+ ri = GET_RINTERNAL(dbp, h, indx);
if (++indx == top || total + ri->nrecs >= recno)
break;
total += ri->nrecs;
@@ -243,7 +248,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
pg = ri->pgno;
break;
default:
- return (__db_pgfmt(dbp, h->pgno));
+ return (__db_pgfmt(dbp->dbenv, h->pgno));
}
--indx;
@@ -276,12 +281,12 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
(h->level - 1) == LEAFLEVEL)
stack = 1;
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
lock_mode = stack &&
LF_ISSET(S_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __db_lget(dbc,
- LCK_COUPLE, pg, lock_mode, 0, &lock)) != 0) {
+ LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
/*
* If we fail, discard the lock we held. This
* is OK because this only happens when we are
@@ -292,7 +297,7 @@ __bam_rsearch(dbc, recnop, flags, stop, exactp)
}
}
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0)
goto err;
}
/* NOTREACHED */
@@ -315,12 +320,14 @@ __bam_adjust(dbc, adjust)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
EPG *epg;
PAGE *h;
db_pgno_t root_pgno;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
root_pgno = cp->root;
@@ -328,22 +335,27 @@ __bam_adjust(dbc, adjust)
for (epg = cp->sp; epg <= cp->csp; ++epg) {
h = epg->page;
if (TYPE(h) == P_IBTREE || TYPE(h) == P_IRECNO) {
- if (DB_LOGGING(dbc) &&
- (ret = __bam_cadjust_log(dbp->dbenv,
- dbc->txn, &LSN(h), 0, dbp->log_fileid,
- PGNO(h), &LSN(h), (u_int32_t)epg->indx, adjust,
- PGNO(h) == root_pgno ? CAD_UPDATEROOT : 0)) != 0)
- return (ret);
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_cadjust_log(dbp, dbc->txn,
+ &LSN(h), 0, PGNO(h), &LSN(h),
+ (u_int32_t)epg->indx, adjust,
+ PGNO(h) == root_pgno ?
+ CAD_UPDATEROOT : 0)) != 0)
+ return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(h));
if (TYPE(h) == P_IBTREE)
- GET_BINTERNAL(h, epg->indx)->nrecs += adjust;
+ GET_BINTERNAL(dbp, h, epg->indx)->nrecs +=
+ adjust;
else
- GET_RINTERNAL(h, epg->indx)->nrecs += adjust;
+ GET_RINTERNAL(dbp, h, epg->indx)->nrecs +=
+ adjust;
if (PGNO(h) == root_pgno)
RE_NREC_ADJ(h, adjust);
- if ((ret = memp_fset(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, h, DB_MPOOL_DIRTY)) != 0)
return (ret);
}
}
@@ -363,21 +375,23 @@ __bam_nrecs(dbc, rep)
{
DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t pgno;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
pgno = dbc->internal->root;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
*rep = RE_NREC(h);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__TLPUT(dbc, lock);
return (0);
@@ -387,10 +401,11 @@ __bam_nrecs(dbc, rep)
* __bam_total --
* Return the number of records below a page.
*
- * PUBLIC: db_recno_t __bam_total __P((PAGE *));
+ * PUBLIC: db_recno_t __bam_total __P((DB *, PAGE *));
*/
db_recno_t
-__bam_total(h)
+__bam_total(dbp, h)
+ DB *dbp;
PAGE *h;
{
db_recno_t nrecs;
@@ -403,25 +418,26 @@ __bam_total(h)
case P_LBTREE:
/* Check for logically deleted records. */
for (indx = 0; indx < top; indx += P_INDX)
- if (!B_DISSET(GET_BKEYDATA(h, indx + O_INDX)->type))
+ if (!B_DISSET(
+ GET_BKEYDATA(dbp, h, indx + O_INDX)->type))
++nrecs;
break;
case P_LDUP:
/* Check for logically deleted records. */
for (indx = 0; indx < top; indx += O_INDX)
- if (!B_DISSET(GET_BKEYDATA(h, indx)->type))
+ if (!B_DISSET(GET_BKEYDATA(dbp, h, indx)->type))
++nrecs;
break;
case P_IBTREE:
for (indx = 0; indx < top; indx += O_INDX)
- nrecs += GET_BINTERNAL(h, indx)->nrecs;
+ nrecs += GET_BINTERNAL(dbp, h, indx)->nrecs;
break;
case P_LRECNO:
nrecs = NUM_ENT(h);
break;
case P_IRECNO:
for (indx = 0; indx < top; indx += O_INDX)
- nrecs += GET_RINTERNAL(h, indx)->nrecs;
+ nrecs += GET_RINTERNAL(dbp, h, indx)->nrecs;
break;
}
diff --git a/db/btree/bt_search.c b/db/btree/bt_search.c
index d822198f2..dc35c7c68 100644
--- a/db/btree/bt_search.c
+++ b/db/btree/bt_search.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_search.c,v 11.32 2001/01/17 20:19:46 bostic Exp $";
+static const char revid[] = "$Id: bt_search.c,v 11.47 2003/06/30 17:19:35 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,21 +53,23 @@ static const char revid[] = "$Id: bt_search.c,v 11.32 2001/01/17 20:19:46 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "lock.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
/*
* __bam_search --
* Search a btree for a key.
*
- * PUBLIC: int __bam_search __P((DBC *,
+ * PUBLIC: int __bam_search __P((DBC *, db_pgno_t,
* PUBLIC: const DBT *, u_int32_t, int, db_recno_t *, int *));
*/
int
-__bam_search(dbc, key, flags, stop, recnop, exactp)
+__bam_search(dbc, root_pgno, key, flags, stop, recnop, exactp)
DBC *dbc;
+ db_pgno_t root_pgno;
const DBT *key;
u_int32_t flags;
int stop, *exactp;
@@ -77,8 +79,9 @@ __bam_search(dbc, key, flags, stop, recnop, exactp)
BTREE_CURSOR *cp;
DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
- db_indx_t base, i, indx, lim;
+ db_indx_t base, i, indx, *inp, lim;
db_lockmode_t lock_mode;
db_pgno_t pg;
db_recno_t recno;
@@ -86,6 +89,7 @@ __bam_search(dbc, key, flags, stop, recnop, exactp)
int (*func) __P((DB *, const DBT *, const DBT *));
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
t = dbp->bt_internal;
recno = 0;
@@ -109,12 +113,12 @@ __bam_search(dbc, key, flags, stop, recnop, exactp)
* Retrieve the root page.
*/
try_again:
- pg = cp->root;
+ pg = root_pgno == PGNO_INVALID ? cp->root : root_pgno;
stack = LF_ISSET(S_STACK) && F_ISSET(cp, C_RECNUM);
lock_mode = stack ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
/* Did not read it, so we can release the lock */
(void)__LPUT(dbc, lock);
return (ret);
@@ -131,21 +135,21 @@ try_again:
if (!stack &&
((LF_ISSET(S_PARENT) && (u_int8_t)(stop + 1) >= h->level) ||
(LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__LPUT(dbc, lock);
lock_mode = DB_LOCK_WRITE;
if ((ret = __db_lget(dbc, 0, pg, lock_mode, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0) {
/* Did not read it, so we can release the lock */
(void)__LPUT(dbc, lock);
return (ret);
}
- if (!((LF_ISSET(S_PARENT)
- && (u_int8_t)(stop + 1) >= h->level) ||
+ if (!((LF_ISSET(S_PARENT) &&
+ (u_int8_t)(stop + 1) >= h->level) ||
(LF_ISSET(S_WRITE) && h->level == LEAFLEVEL))) {
/* Someone else split the root, start over. */
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__LPUT(dbc, lock);
goto try_again;
}
@@ -158,6 +162,7 @@ try_again:
t->bt_compare;
for (;;) {
+ inp = P_INP(dbp, h);
/*
* Do a binary search on the current page. If we're searching
* a Btree leaf page, we have to walk the indices in groups of
@@ -199,7 +204,7 @@ try_again:
if (LF_ISSET(S_STK_ONLY)) {
BT_STK_NUM(dbp->dbenv, cp, h, base, ret);
__LPUT(dbc, lock);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
return (ret);
}
@@ -232,21 +237,21 @@ try_again:
*/
next: if (recnop != NULL)
for (i = 0; i < indx; ++i)
- recno += GET_BINTERNAL(h, i)->nrecs;
+ recno += GET_BINTERNAL(dbp, h, i)->nrecs;
- pg = GET_BINTERNAL(h, indx)->pgno;
+ pg = GET_BINTERNAL(dbp, h, indx)->pgno;
if (LF_ISSET(S_STK_ONLY)) {
if (stop == h->level) {
BT_STK_NUM(dbp->dbenv, cp, h, indx, ret);
__LPUT(dbc, lock);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
return (ret);
}
BT_STK_NUMPUSH(dbp->dbenv, cp, h, indx, ret);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
if ((ret = __db_lget(dbc,
- LCK_COUPLE, pg, lock_mode, 0, &lock)) != 0) {
+ LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
/*
* Discard our lock and return on failure. This
* is OK because it only happens when descending
@@ -284,12 +289,12 @@ next: if (recnop != NULL)
(h->level - 1) == LEAFLEVEL)
stack = 1;
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
lock_mode = stack &&
LF_ISSET(S_WRITE) ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __db_lget(dbc,
- LCK_COUPLE, pg, lock_mode, 0, &lock)) != 0) {
+ LCK_COUPLE_ALWAYS, pg, lock_mode, 0, &lock)) != 0) {
/*
* If we fail, discard the lock we held. This
* is OK because this only happens when we are
@@ -299,7 +304,7 @@ next: if (recnop != NULL)
goto err;
}
}
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pg, 0, &h)) != 0)
goto err;
}
/* NOTREACHED */
@@ -307,14 +312,6 @@ next: if (recnop != NULL)
found: *exactp = 1;
/*
- * If we're trying to calculate the record number, add in the
- * offset on this page and correct for the fact that records
- * in the tree are 0-based.
- */
- if (recnop != NULL)
- *recnop = recno + (indx / P_INDX) + 1;
-
- /*
* If we got here, we know that we have a Btree leaf or off-page
* duplicates page. If it's a Btree leaf page, we have to handle
* on-page duplicates.
@@ -327,11 +324,11 @@ found: *exactp = 1;
if (TYPE(h) == P_LBTREE) {
if (LF_ISSET(S_DUPLAST))
while (indx < (db_indx_t)(NUM_ENT(h) - P_INDX) &&
- h->inp[indx] == h->inp[indx + P_INDX])
+ inp[indx] == inp[indx + P_INDX])
indx += P_INDX;
else
while (indx > 0 &&
- h->inp[indx] == h->inp[indx - P_INDX])
+ inp[indx] == inp[indx - P_INDX])
indx -= P_INDX;
}
@@ -341,32 +338,51 @@ found: *exactp = 1;
* not move from the original found key on the basis of the S_DELNO
* flag.)
*/
+ DB_ASSERT(recnop == NULL || LF_ISSET(S_DELNO));
if (LF_ISSET(S_DELNO)) {
deloffset = TYPE(h) == P_LBTREE ? O_INDX : 0;
if (LF_ISSET(S_DUPLAST))
- while (B_DISSET(GET_BKEYDATA(
+ while (B_DISSET(GET_BKEYDATA(dbp,
h, indx + deloffset)->type) && indx > 0 &&
- h->inp[indx] == h->inp[indx - adjust])
+ inp[indx] == inp[indx - adjust])
indx -= adjust;
else
- while (B_DISSET(GET_BKEYDATA(
+ while (B_DISSET(GET_BKEYDATA(dbp,
h, indx + deloffset)->type) &&
indx < (db_indx_t)(NUM_ENT(h) - adjust) &&
- h->inp[indx] == h->inp[indx + adjust])
+ inp[indx] == inp[indx + adjust])
indx += adjust;
/*
* If we weren't able to find a non-deleted duplicate, return
* DB_NOTFOUND.
*/
- if (B_DISSET(GET_BKEYDATA(h, indx + deloffset)->type))
+ if (B_DISSET(GET_BKEYDATA(dbp, h, indx + deloffset)->type))
goto notfound;
+
+ /*
+ * Increment the record counter to point to the found element.
+ * Ignore any deleted key/data pairs. There doesn't need to
+ * be any correction for duplicates, as Btree doesn't support
+ * duplicates and record numbers in the same tree.
+ */
+ if (recnop != NULL) {
+ DB_ASSERT(TYPE(h) == P_LBTREE);
+
+ for (i = 0; i < indx; i += P_INDX)
+ if (!B_DISSET(
+ GET_BKEYDATA(dbp, h, i + O_INDX)->type))
+ ++recno;
+
+ /* Correct the number for a 0-base. */
+ *recnop = recno + 1;
+ }
}
if (LF_ISSET(S_STK_ONLY)) {
BT_STK_NUM(dbp->dbenv, cp, h, indx, ret);
__LPUT(dbc, lock);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
} else {
BT_STK_ENTER(dbp->dbenv, cp, h, indx, lock, lock_mode, ret);
if (ret != 0)
@@ -376,7 +392,7 @@ found: *exactp = 1;
notfound:
/* Keep the page locked for serializability. */
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
(void)__TLPUT(dbc, lock);
ret = DB_NOTFOUND;
@@ -398,10 +414,12 @@ __bam_stkrel(dbc, flags)
{
BTREE_CURSOR *cp;
DB *dbp;
+ DB_MPOOLFILE *mpf;
EPG *epg;
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (BTREE_CURSOR *)dbc->internal;
/*
@@ -414,10 +432,10 @@ __bam_stkrel(dbc, flags)
if (epg->page != NULL) {
if (LF_ISSET(STK_CLRDBC) && cp->page == epg->page) {
cp->page = NULL;
- cp->lock.off = LOCK_INVALID;
+ LOCK_INIT(cp->lock);
}
- if ((t_ret = memp_fput(
- dbp->mpf, epg->page, 0)) != 0 && ret == 0)
+ if ((t_ret =
+ __memp_fput(mpf, epg->page, 0)) != 0 && ret == 0)
ret = t_ret;
/*
* XXX
@@ -428,12 +446,10 @@ __bam_stkrel(dbc, flags)
*/
epg->page = NULL;
}
- if (epg->lock.off != LOCK_INVALID) {
- if (LF_ISSET(STK_NOLOCK))
- (void)__LPUT(dbc, epg->lock);
- else
- (void)__TLPUT(dbc, epg->lock);
- }
+ if (LF_ISSET(STK_NOLOCK))
+ (void)__LPUT(dbc, epg->lock);
+ else
+ (void)__TLPUT(dbc, epg->lock);
}
/* Clear the stack, all pages have been released. */
@@ -463,7 +479,7 @@ __bam_stkgrow(dbenv, cp)
return (ret);
memcpy(p, cp->sp, entries * sizeof(EPG));
if (cp->sp != cp->stack)
- __os_free(cp->sp, entries * sizeof(EPG));
+ __os_free(dbenv, cp->sp);
cp->sp = p;
cp->csp = p + entries;
cp->esp = p + entries * 2;
diff --git a/db/btree/bt_split.c b/db/btree/bt_split.c
index f76337b19..8c5066aed 100644
--- a/db/btree/bt_split.c
+++ b/db/btree/bt_split.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -40,7 +40,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_split.c,v 11.31 2000/12/22 19:08:27 bostic Exp $";
+static const char revid[] = "$Id: bt_split.c,v 11.60 2003/06/30 17:19:35 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -51,10 +51,11 @@ static const char revid[] = "$Id: bt_split.c,v 11.31 2000/12/22 19:08:27 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/btree.h"
static int __bam_broot __P((DBC *, PAGE *, PAGE *, PAGE *));
static int __bam_page __P((DBC *, EPG *, EPG *));
@@ -67,21 +68,19 @@ static int __ram_root __P((DBC *, PAGE *, PAGE *, PAGE *));
* __bam_split --
* Split a page.
*
- * PUBLIC: int __bam_split __P((DBC *, void *));
+ * PUBLIC: int __bam_split __P((DBC *, void *, db_pgno_t *));
*/
int
-__bam_split(dbc, arg)
+__bam_split(dbc, arg, root_pgnop)
DBC *dbc;
void *arg;
+ db_pgno_t *root_pgnop;
{
- BTREE *t;
BTREE_CURSOR *cp;
- DB *dbp;
enum { UP, DOWN } dir;
db_pgno_t root_pgno;
int exact, level, ret;
- dbp = dbc->dbp;
cp = (BTREE_CURSOR *)dbc->internal;
root_pgno = cp->root;
@@ -112,17 +111,20 @@ __bam_split(dbc, arg)
* split. This would be an easy change for this code, but I have no
* numbers that indicate it's worthwhile.
*/
- t = dbp->bt_internal;
for (dir = UP, level = LEAFLEVEL;; dir == UP ? ++level : --level) {
/*
* Acquire a page and its parent, locked.
*/
if ((ret = (dbc->dbtype == DB_BTREE ?
- __bam_search(dbc, arg, S_WRPAIR, level, NULL, &exact) :
+ __bam_search(dbc, PGNO_INVALID,
+ arg, S_WRPAIR, level, NULL, &exact) :
__bam_rsearch(dbc,
(db_recno_t *)arg, S_WRPAIR, level, &exact))) != 0)
return (ret);
+ if (root_pgnop != NULL)
+ *root_pgnop = cp->csp[0].page->pgno == root_pgno ?
+ root_pgno : cp->csp[-1].page->pgno;
/*
* Split the page if it still needs it (it's possible another
* thread of control has already split the page). If we are
@@ -130,7 +132,7 @@ __bam_split(dbc, arg)
* is no longer necessary.
*/
if (2 * B_MAXSIZEONPAGE(cp->ovflsize)
- <= (db_indx_t)P_FREESPACE(cp->csp[0].page)) {
+ <= (db_indx_t)P_FREESPACE(dbc->dbp, cp->csp[0].page)) {
__bam_stkrel(dbc, STK_NOLOCK);
return (0);
}
@@ -178,12 +180,14 @@ __bam_root(dbc, cp)
DB *dbp;
DBT log_dbt;
DB_LSN log_lsn;
+ DB_MPOOLFILE *mpf;
PAGE *lp, *rp;
db_indx_t split;
u_int32_t opflags;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
/* Yeah, right. */
if (cp->page->level >= MAXBTREELEVEL) {
@@ -210,21 +214,22 @@ __bam_root(dbc, cp)
goto err;
/* Log the change. */
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
memset(&log_dbt, 0, sizeof(log_dbt));
log_dbt.data = cp->page;
log_dbt.size = dbp->pgsize;
ZERO_LSN(log_lsn);
opflags = F_ISSET(
(BTREE_CURSOR *)dbc->internal, C_RECNUM) ? SPL_NRECS : 0;
- if ((ret = __bam_split_log(dbp->dbenv, dbc->txn,
- &LSN(cp->page), 0, dbp->log_fileid, PGNO(lp), &LSN(lp),
- PGNO(rp), &LSN(rp), (u_int32_t)NUM_ENT(lp), 0, &log_lsn,
+ if ((ret = __bam_split_log(dbp,
+ dbc->txn, &LSN(cp->page), 0, PGNO(lp), &LSN(lp), PGNO(rp),
+ &LSN(rp), (u_int32_t)NUM_ENT(lp), 0, &log_lsn,
dbc->internal->root, &log_dbt, opflags)) != 0)
goto err;
- LSN(lp) = LSN(cp->page);
- LSN(rp) = LSN(cp->page);
- }
+ } else
+ LSN_NOT_LOGGED(LSN(cp->page));
+ LSN(lp) = LSN(cp->page);
+ LSN(rp) = LSN(cp->page);
/* Clean up the new root page. */
if ((ret = (dbc->dbtype == DB_RECNO ?
@@ -238,18 +243,18 @@ __bam_root(dbc, cp)
goto err;
/* Success -- write the real pages back to the store. */
- (void)memp_fput(dbp->mpf, cp->page, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, cp->page, DB_MPOOL_DIRTY);
(void)__TLPUT(dbc, cp->lock);
- (void)memp_fput(dbp->mpf, lp, DB_MPOOL_DIRTY);
- (void)memp_fput(dbp->mpf, rp, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, lp, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, rp, DB_MPOOL_DIRTY);
return (0);
err: if (lp != NULL)
- (void)__db_free(dbc, lp);
+ (void)__memp_fput(mpf, lp, 0);
if (rp != NULL)
- (void)__db_free(dbc, rp);
- (void)memp_fput(dbp->mpf, cp->page, 0);
+ (void)__memp_fput(mpf, rp, 0);
+ (void)__memp_fput(mpf, cp->page, 0);
(void)__TLPUT(dbc, cp->lock);
return (ret);
}
@@ -267,7 +272,8 @@ __bam_page(dbc, pp, cp)
DBT log_dbt;
DB_LSN log_lsn;
DB *dbp;
- DB_LOCK tplock;
+ DB_LOCK rplock, tplock;
+ DB_MPOOLFILE *mpf;
DB_LSN save_lsn;
PAGE *lp, *rp, *alloc_rp, *tp;
db_indx_t split;
@@ -275,8 +281,10 @@ __bam_page(dbc, pp, cp)
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
alloc_rp = lp = rp = tp = NULL;
- tplock.off = LOCK_INVALID;
+ LOCK_INIT(rplock);
+ LOCK_INIT(tplock);
ret = -1;
/*
@@ -296,7 +304,7 @@ __bam_page(dbc, pp, cp)
* up the tree badly, because we've violated the rule of always locking
* down the tree, and never up.
*/
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &rp)) != 0)
+ if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, &rp)) != 0)
goto err;
P_INIT(rp, dbp->pgsize, 0,
ISINTERNAL(cp->page) ? PGNO_INVALID : PGNO(cp->page),
@@ -307,7 +315,7 @@ __bam_page(dbc, pp, cp)
* Create new left page for the split, and fill in everything
* except its LSN and next-page page number.
*/
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &lp)) != 0)
+ if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, &lp)) != 0)
goto err;
P_INIT(lp, dbp->pgsize, PGNO(cp->page),
ISINTERNAL(cp->page) ? PGNO_INVALID : PREV_PGNO(cp->page),
@@ -351,8 +359,7 @@ __bam_page(dbc, pp, cp)
if ((ret = __db_lget(dbc,
0, NEXT_PGNO(cp->page), DB_LOCK_WRITE, 0, &tplock)) != 0)
goto err;
- if ((ret =
- memp_fget(dbp->mpf, &NEXT_PGNO(cp->page), 0, &tp)) != 0)
+ if ((ret = __memp_fget(mpf, &NEXT_PGNO(cp->page), 0, &tp)) != 0)
goto err;
}
@@ -364,6 +371,15 @@ __bam_page(dbc, pp, cp)
goto err;
/*
+ * Lock the new page. We need to do this because someone
+ * could get here through bt_lpgno if this page was recently
+ * dealocated. They can't look at it before we commit.
+ */
+ if ((ret = __db_lget(dbc,
+ 0, PGNO(alloc_rp), DB_LOCK_WRITE, 0, &rplock)) != 0)
+ goto err;
+
+ /*
* Fix up the page numbers we didn't have before. We have to do this
* before calling __bam_pinsert because it may copy a page number onto
* the parent page and it takes the page number from its page argument.
@@ -376,29 +392,30 @@ __bam_page(dbc, pp, cp)
bc = (BTREE_CURSOR *)dbc->internal;
/* Log the change. */
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
memset(&log_dbt, 0, sizeof(log_dbt));
log_dbt.data = cp->page;
log_dbt.size = dbp->pgsize;
if (tp == NULL)
ZERO_LSN(log_lsn);
opflags = F_ISSET(bc, C_RECNUM) ? SPL_NRECS : 0;
- if ((ret = __bam_split_log(dbp->dbenv, dbc->txn,
- &LSN(cp->page), 0, dbp->log_fileid, PGNO(cp->page),
- &LSN(cp->page), PGNO(alloc_rp), &LSN(alloc_rp),
- (u_int32_t)NUM_ENT(lp),
+ if ((ret = __bam_split_log(dbp, dbc->txn, &LSN(cp->page), 0,
+ PGNO(cp->page), &LSN(cp->page), PGNO(alloc_rp),
+ &LSN(alloc_rp), (u_int32_t)NUM_ENT(lp),
tp == NULL ? 0 : PGNO(tp),
tp == NULL ? &log_lsn : &LSN(tp),
- bc->root, &log_dbt, opflags)) != 0)
+ PGNO_INVALID, &log_dbt, opflags)) != 0)
goto err;
- /* Update the LSNs for all involved pages. */
- LSN(alloc_rp) = LSN(cp->page);
- LSN(lp) = LSN(cp->page);
- LSN(rp) = LSN(cp->page);
- if (tp != NULL)
- LSN(tp) = LSN(cp->page);
- }
+ } else
+ LSN_NOT_LOGGED(LSN(cp->page));
+
+ /* Update the LSNs for all involved pages. */
+ LSN(alloc_rp) = LSN(cp->page);
+ LSN(lp) = LSN(cp->page);
+ LSN(rp) = LSN(cp->page);
+ if (tp != NULL)
+ LSN(tp) = LSN(cp->page);
/*
* Copy the left and right pages into place. There are two paths
@@ -411,13 +428,13 @@ __bam_page(dbc, pp, cp)
* do the copy.
*/
save_lsn = alloc_rp->lsn;
- memcpy(alloc_rp, rp, LOFFSET(rp));
+ memcpy(alloc_rp, rp, LOFFSET(dbp, rp));
memcpy((u_int8_t *)alloc_rp + HOFFSET(rp),
(u_int8_t *)rp + HOFFSET(rp), dbp->pgsize - HOFFSET(rp));
alloc_rp->lsn = save_lsn;
save_lsn = cp->page->lsn;
- memcpy(cp->page, lp, LOFFSET(lp));
+ memcpy(cp->page, lp, LOFFSET(dbp, lp));
memcpy((u_int8_t *)cp->page + HOFFSET(lp),
(u_int8_t *)lp + HOFFSET(lp), dbp->pgsize - HOFFSET(lp));
cp->page->lsn = save_lsn;
@@ -431,8 +448,8 @@ __bam_page(dbc, pp, cp)
PGNO(cp->page), PGNO(cp->page), PGNO(rp), split, 0)) != 0)
goto err;
- __os_free(lp, dbp->pgsize);
- __os_free(rp, dbp->pgsize);
+ __os_free(dbp->dbenv, lp);
+ __os_free(dbp->dbenv, rp);
/*
* Success -- write the real pages back to the store. As we never
@@ -441,44 +458,45 @@ __bam_page(dbc, pp, cp)
* modifying the page so it's not really necessary, but it's neater.
*/
if ((t_ret =
- memp_fput(dbp->mpf, alloc_rp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, alloc_rp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
+ (void)__TLPUT(dbc, rplock);
if ((t_ret =
- memp_fput(dbp->mpf, pp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, pp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
(void)__TLPUT(dbc, pp->lock);
if ((t_ret =
- memp_fput(dbp->mpf, cp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, cp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
(void)__TLPUT(dbc, cp->lock);
if (tp != NULL) {
if ((t_ret =
- memp_fput(dbp->mpf, tp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, tp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
(void)__TLPUT(dbc, tplock);
}
return (ret);
err: if (lp != NULL)
- __os_free(lp, dbp->pgsize);
+ __os_free(dbp->dbenv, lp);
if (rp != NULL)
- __os_free(rp, dbp->pgsize);
+ __os_free(dbp->dbenv, rp);
if (alloc_rp != NULL)
- (void)__db_free(dbc, alloc_rp);
-
+ (void)__memp_fput(mpf, alloc_rp, 0);
if (tp != NULL)
- (void)memp_fput(dbp->mpf, tp, 0);
- if (tplock.off != LOCK_INVALID)
- /* We never updated the next page, we can release it. */
- (void)__LPUT(dbc, tplock);
+ (void)__memp_fput(mpf, tp, 0);
+
+ /* We never updated the new or next pages, we can release them. */
+ (void)__LPUT(dbc, rplock);
+ (void)__LPUT(dbc, tplock);
- (void)memp_fput(dbp->mpf, pp->page, 0);
+ (void)__memp_fput(mpf, pp->page, 0);
if (ret == DB_NEEDSPLIT)
(void)__LPUT(dbc, pp->lock);
else
(void)__TLPUT(dbc, pp->lock);
- (void)memp_fput(dbp->mpf, cp->page, 0);
+ (void)__memp_fput(mpf, cp->page, 0);
if (ret == DB_NEEDSPLIT)
(void)__LPUT(dbc, cp->lock);
else
@@ -529,7 +547,7 @@ __bam_broot(dbc, rootp, lp, rp)
B_TSET(bi.type, B_KEYDATA, 0);
bi.pgno = lp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
- bi.nrecs = __bam_total(lp);
+ bi.nrecs = __bam_total(dbp, lp);
RE_NREC_SET(rootp, bi.nrecs);
}
hdr.data = &bi;
@@ -541,13 +559,13 @@ __bam_broot(dbc, rootp, lp, rp)
switch (TYPE(rp)) {
case P_IBTREE:
/* Copy the first key of the child page onto the root page. */
- child_bi = GET_BINTERNAL(rp, 0);
+ child_bi = GET_BINTERNAL(dbp, rp, 0);
bi.len = child_bi->len;
B_TSET(bi.type, child_bi->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
- bi.nrecs = __bam_total(rp);
+ bi.nrecs = __bam_total(dbp, rp);
RE_NREC_ADJ(rootp, bi.nrecs);
}
hdr.data = &bi;
@@ -567,14 +585,14 @@ __bam_broot(dbc, rootp, lp, rp)
case P_LDUP:
case P_LBTREE:
/* Copy the first key of the child page onto the root page. */
- child_bk = GET_BKEYDATA(rp, 0);
+ child_bk = GET_BKEYDATA(dbp, rp, 0);
switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
bi.len = child_bk->len;
B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
- bi.nrecs = __bam_total(rp);
+ bi.nrecs = __bam_total(dbp, rp);
RE_NREC_ADJ(rootp, bi.nrecs);
}
hdr.data = &bi;
@@ -591,7 +609,7 @@ __bam_broot(dbc, rootp, lp, rp)
B_TSET(bi.type, child_bk->type, 0);
bi.pgno = rp->pgno;
if (F_ISSET(cp, C_RECNUM)) {
- bi.nrecs = __bam_total(rp);
+ bi.nrecs = __bam_total(dbp, rp);
RE_NREC_ADJ(rootp, bi.nrecs);
}
hdr.data = &bi;
@@ -609,11 +627,11 @@ __bam_broot(dbc, rootp, lp, rp)
return (ret);
break;
default:
- return (__db_pgfmt(dbp, rp->pgno));
+ return (__db_pgfmt(dbp->dbenv, rp->pgno));
}
break;
default:
- return (__db_pgfmt(dbp, rp->pgno));
+ return (__db_pgfmt(dbp->dbenv, rp->pgno));
}
return (0);
}
@@ -647,12 +665,12 @@ __ram_root(dbc, rootp, lp, rp)
/* Insert the left and right keys, set the header information. */
ri.pgno = lp->pgno;
- ri.nrecs = __bam_total(lp);
+ ri.nrecs = __bam_total(dbp, lp);
if ((ret = __db_pitem(dbc, rootp, 0, RINTERNAL_SIZE, &hdr, NULL)) != 0)
return (ret);
RE_NREC_SET(rootp, ri.nrecs);
ri.pgno = rp->pgno;
- ri.nrecs = __bam_total(rp);
+ ri.nrecs = __bam_total(dbp, rp);
if ((ret = __db_pitem(dbc, rootp, 1, RINTERNAL_SIZE, &hdr, NULL)) != 0)
return (ret);
RE_NREC_ADJ(rootp, ri.nrecs);
@@ -690,7 +708,8 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
ppage = parent->page;
/* If handling record numbers, count records split to the right page. */
- nrecs = F_ISSET(cp, C_RECNUM) && !space_check ? __bam_total(rchild) : 0;
+ nrecs = F_ISSET(cp, C_RECNUM) &&
+ !space_check ? __bam_total(dbp, rchild) : 0;
/*
* Now we insert the new page's first key into the parent page, which
@@ -721,10 +740,10 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
*/
switch (TYPE(rchild)) {
case P_IBTREE:
- child_bi = GET_BINTERNAL(rchild, 0);
+ child_bi = GET_BINTERNAL(dbp, rchild, 0);
nbytes = BINTERNAL_PSIZE(child_bi->len);
- if (P_FREESPACE(ppage) < nbytes)
+ if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
if (space_check)
return (0);
@@ -753,7 +772,7 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
break;
case P_LDUP:
case P_LBTREE:
- child_bk = GET_BKEYDATA(rchild, 0);
+ child_bk = GET_BKEYDATA(dbp, rchild, 0);
switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
/*
@@ -783,7 +802,7 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
goto noprefix;
if (ppage->prev_pgno == PGNO_INVALID && off <= 1)
goto noprefix;
- tmp_bk = GET_BKEYDATA(lchild, NUM_ENT(lchild) -
+ tmp_bk = GET_BKEYDATA(dbp, lchild, NUM_ENT(lchild) -
(TYPE(lchild) == P_LDUP ? O_INDX : P_INDX));
if (B_TYPE(tmp_bk->type) != B_KEYDATA)
goto noprefix;
@@ -793,13 +812,13 @@ __bam_pinsert(dbc, parent, lchild, rchild, space_check)
memset(&b, 0, sizeof(b));
b.size = child_bk->len;
b.data = child_bk->data;
- nksize = func(dbp, &a, &b);
+ nksize = (u_int32_t)func(dbp, &a, &b);
if ((n = BINTERNAL_PSIZE(nksize)) < nbytes)
nbytes = n;
else
noprefix: nksize = child_bk->len;
- if (P_FREESPACE(ppage) < nbytes)
+ if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
if (space_check)
return (0);
@@ -823,7 +842,7 @@ noprefix: nksize = child_bk->len;
case B_OVERFLOW:
nbytes = BINTERNAL_PSIZE(BOVERFLOW_SIZE);
- if (P_FREESPACE(ppage) < nbytes)
+ if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
if (space_check)
return (0);
@@ -850,14 +869,14 @@ noprefix: nksize = child_bk->len;
return (ret);
break;
default:
- return (__db_pgfmt(dbp, rchild->pgno));
+ return (__db_pgfmt(dbp->dbenv, rchild->pgno));
}
break;
case P_IRECNO:
case P_LRECNO:
nbytes = RINTERNAL_PSIZE;
- if (P_FREESPACE(ppage) < nbytes)
+ if (P_FREESPACE(dbp, ppage) < nbytes)
return (DB_NEEDSPLIT);
if (space_check)
return (0);
@@ -873,7 +892,7 @@ noprefix: nksize = child_bk->len;
return (ret);
break;
default:
- return (__db_pgfmt(dbp, rchild->pgno));
+ return (__db_pgfmt(dbp->dbenv, rchild->pgno));
}
/*
@@ -882,17 +901,19 @@ noprefix: nksize = child_bk->len;
*/
if (F_ISSET(cp, C_RECNUM)) {
/* Log the change. */
- if (DB_LOGGING(dbc) &&
- (ret = __bam_cadjust_log(dbp->dbenv, dbc->txn,
- &LSN(ppage), 0, dbp->log_fileid, PGNO(ppage),
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __bam_cadjust_log(dbp, dbc->txn,
+ &LSN(ppage), 0, PGNO(ppage),
&LSN(ppage), parent->indx, -(int32_t)nrecs, 0)) != 0)
return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(ppage));
/* Update the left page count. */
if (dbc->dbtype == DB_RECNO)
- GET_RINTERNAL(ppage, parent->indx)->nrecs -= nrecs;
+ GET_RINTERNAL(dbp, ppage, parent->indx)->nrecs -= nrecs;
else
- GET_BINTERNAL(ppage, parent->indx)->nrecs -= nrecs;
+ GET_BINTERNAL(dbp, ppage, parent->indx)->nrecs -= nrecs;
}
return (0);
@@ -911,28 +932,52 @@ __bam_psplit(dbc, cp, lp, rp, splitret)
{
DB *dbp;
PAGE *pp;
- db_indx_t half, nbytes, off, splitp, top;
+ db_indx_t half, *inp, nbytes, off, splitp, top;
int adjust, cnt, iflag, isbigkey, ret;
dbp = dbc->dbp;
pp = cp->page;
+ inp = P_INP(dbp, pp);
adjust = TYPE(pp) == P_LBTREE ? P_INDX : O_INDX;
/*
* If we're splitting the first (last) page on a level because we're
* inserting (appending) a key to it, it's likely that the data is
* sorted. Moving a single item to the new page is less work and can
- * push the fill factor higher than normal. If we're wrong it's not
- * a big deal, we'll just do the split the right way next time.
+ * push the fill factor higher than normal. This is trivial when we
+ * are splitting a new page before the beginning of the tree, all of
+ * the interesting tests are against values of 0.
+ *
+ * Catching appends to the tree is harder. In a simple append, we're
+ * inserting an item that sorts past the end of the tree; the cursor
+ * will point past the last element on the page. But, in trees with
+ * duplicates, the cursor may point to the last entry on the page --
+ * in this case, the entry will also be the last element of a duplicate
+ * set (the last because the search call specified the S_DUPLAST flag).
+ * The only way to differentiate between an insert immediately before
+ * the last item in a tree or an append after a duplicate set which is
+ * also the last item in the tree is to call the comparison function.
+ * When splitting internal pages during an append, the search code
+ * guarantees the cursor always points to the largest page item less
+ * than the new internal entry. To summarize, we want to catch three
+ * possible index values:
+ *
+ * NUM_ENT(page) Btree/Recno leaf insert past end-of-tree
+ * NUM_ENT(page) - O_INDX Btree or Recno internal insert past EOT
+ * NUM_ENT(page) - P_INDX Btree leaf insert past EOT after a set
+ * of duplicates
+ *
+ * two of which, (NUM_ENT(page) - O_INDX or P_INDX) might be an insert
+ * near the end of the tree, and not after the end of the tree at all.
+ * Do a simple test which might be wrong because calling the comparison
+ * functions is expensive. Regardless, it's not a big deal if we're
+ * wrong, we'll do the split the right way next time.
*/
off = 0;
- if (NEXT_PGNO(pp) == PGNO_INVALID &&
- ((ISINTERNAL(pp) && cp->indx == NUM_ENT(cp->page) - 1) ||
- (!ISINTERNAL(pp) && cp->indx == NUM_ENT(cp->page))))
- off = NUM_ENT(cp->page) - adjust;
+ if (NEXT_PGNO(pp) == PGNO_INVALID && cp->indx >= NUM_ENT(pp) - adjust)
+ off = NUM_ENT(pp) - adjust;
else if (PREV_PGNO(pp) == PGNO_INVALID && cp->indx == 0)
off = adjust;
-
if (off != 0)
goto sort;
@@ -962,16 +1007,18 @@ __bam_psplit(dbc, cp, lp, rp, splitret)
for (nbytes = 0, off = 0; off < top && nbytes < half; ++off)
switch (TYPE(pp)) {
case P_IBTREE:
- if (B_TYPE(GET_BINTERNAL(pp, off)->type) == B_KEYDATA)
- nbytes +=
- BINTERNAL_SIZE(GET_BINTERNAL(pp, off)->len);
+ if (B_TYPE(
+ GET_BINTERNAL(dbp, pp, off)->type) == B_KEYDATA)
+ nbytes += BINTERNAL_SIZE(
+ GET_BINTERNAL(dbp, pp, off)->len);
else
nbytes += BINTERNAL_SIZE(BOVERFLOW_SIZE);
break;
case P_LBTREE:
- if (B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)
- nbytes +=
- BKEYDATA_SIZE(GET_BKEYDATA(pp, off)->len);
+ if (B_TYPE(GET_BKEYDATA(dbp, pp, off)->type) ==
+ B_KEYDATA)
+ nbytes += BKEYDATA_SIZE(GET_BKEYDATA(dbp,
+ pp, off)->len);
else
nbytes += BOVERFLOW_SIZE;
@@ -979,9 +1026,10 @@ __bam_psplit(dbc, cp, lp, rp, splitret)
/* FALLTHROUGH */
case P_LDUP:
case P_LRECNO:
- if (B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)
- nbytes +=
- BKEYDATA_SIZE(GET_BKEYDATA(pp, off)->len);
+ if (B_TYPE(GET_BKEYDATA(dbp, pp, off)->type) ==
+ B_KEYDATA)
+ nbytes += BKEYDATA_SIZE(GET_BKEYDATA(dbp,
+ pp, off)->len);
else
nbytes += BOVERFLOW_SIZE;
break;
@@ -989,7 +1037,7 @@ __bam_psplit(dbc, cp, lp, rp, splitret)
nbytes += RINTERNAL_SIZE;
break;
default:
- return (__db_pgfmt(dbp, pp->pgno));
+ return (__db_pgfmt(dbp->dbenv, pp->pgno));
}
sort: splitp = off;
@@ -1002,12 +1050,14 @@ sort: splitp = off;
switch (TYPE(pp)) {
case P_IBTREE:
iflag = 1;
- isbigkey = B_TYPE(GET_BINTERNAL(pp, off)->type) != B_KEYDATA;
+ isbigkey =
+ B_TYPE(GET_BINTERNAL(dbp, pp, off)->type) != B_KEYDATA;
break;
case P_LBTREE:
case P_LDUP:
iflag = 0;
- isbigkey = B_TYPE(GET_BKEYDATA(pp, off)->type) != B_KEYDATA;
+ isbigkey = B_TYPE(GET_BKEYDATA(dbp, pp, off)->type) !=
+ B_KEYDATA;
break;
default:
iflag = isbigkey = 0;
@@ -1016,18 +1066,20 @@ sort: splitp = off;
for (cnt = 1; cnt <= 3; ++cnt) {
off = splitp + cnt * adjust;
if (off < (db_indx_t)NUM_ENT(pp) &&
- ((iflag &&
- B_TYPE(GET_BINTERNAL(pp,off)->type) == B_KEYDATA) ||
- B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA)) {
+ ((iflag && B_TYPE(
+ GET_BINTERNAL(dbp, pp,off)->type) == B_KEYDATA) ||
+ B_TYPE(GET_BKEYDATA(dbp, pp, off)->type) ==
+ B_KEYDATA)) {
splitp = off;
break;
}
if (splitp <= (db_indx_t)(cnt * adjust))
continue;
off = splitp - cnt * adjust;
- if (iflag ?
- B_TYPE(GET_BINTERNAL(pp, off)->type) == B_KEYDATA :
- B_TYPE(GET_BKEYDATA(pp, off)->type) == B_KEYDATA) {
+ if (iflag ? B_TYPE(
+ GET_BINTERNAL(dbp, pp, off)->type) == B_KEYDATA :
+ B_TYPE(GET_BKEYDATA(dbp, pp, off)->type) ==
+ B_KEYDATA) {
splitp = off;
break;
}
@@ -1040,18 +1092,18 @@ sort: splitp = off;
* page set. So, this loop can't be unbounded.
*/
if (TYPE(pp) == P_LBTREE &&
- pp->inp[splitp] == pp->inp[splitp - adjust])
+ inp[splitp] == inp[splitp - adjust])
for (cnt = 1;; ++cnt) {
off = splitp + cnt * adjust;
if (off < NUM_ENT(pp) &&
- pp->inp[splitp] != pp->inp[off]) {
+ inp[splitp] != inp[off]) {
splitp = off;
break;
}
if (splitp <= (db_indx_t)(cnt * adjust))
continue;
off = splitp - cnt * adjust;
- if (pp->inp[splitp] != pp->inp[off]) {
+ if (inp[splitp] != inp[off]) {
splitp = off + adjust;
break;
}
@@ -1079,18 +1131,20 @@ __bam_copy(dbp, pp, cp, nxt, stop)
PAGE *pp, *cp;
u_int32_t nxt, stop;
{
- db_indx_t nbytes, off;
+ db_indx_t *cinp, nbytes, off, *pinp;
+ cinp = P_INP(dbp, cp);
+ pinp = P_INP(dbp, pp);
/*
- * Copy the rest of the data to the right page. Nxt is the next
- * offset placed on the target page.
+ * Nxt is the offset of the next record to be placed on the target page.
*/
for (off = 0; nxt < stop; ++nxt, ++NUM_ENT(cp), ++off) {
switch (TYPE(pp)) {
case P_IBTREE:
- if (B_TYPE(GET_BINTERNAL(pp, nxt)->type) == B_KEYDATA)
- nbytes =
- BINTERNAL_SIZE(GET_BINTERNAL(pp, nxt)->len);
+ if (B_TYPE(
+ GET_BINTERNAL(dbp, pp, nxt)->type) == B_KEYDATA)
+ nbytes = BINTERNAL_SIZE(
+ GET_BINTERNAL(dbp, pp, nxt)->len);
else
nbytes = BINTERNAL_SIZE(BOVERFLOW_SIZE);
break;
@@ -1100,16 +1154,17 @@ __bam_copy(dbp, pp, cp, nxt, stop)
* the offset.
*/
if (off != 0 && (nxt % P_INDX) == 0 &&
- pp->inp[nxt] == pp->inp[nxt - P_INDX]) {
- cp->inp[off] = cp->inp[off - P_INDX];
+ pinp[nxt] == pinp[nxt - P_INDX]) {
+ cinp[off] = cinp[off - P_INDX];
continue;
}
/* FALLTHROUGH */
case P_LDUP:
case P_LRECNO:
- if (B_TYPE(GET_BKEYDATA(pp, nxt)->type) == B_KEYDATA)
- nbytes =
- BKEYDATA_SIZE(GET_BKEYDATA(pp, nxt)->len);
+ if (B_TYPE(GET_BKEYDATA(dbp, pp, nxt)->type) ==
+ B_KEYDATA)
+ nbytes = BKEYDATA_SIZE(GET_BKEYDATA(dbp,
+ pp, nxt)->len);
else
nbytes = BOVERFLOW_SIZE;
break;
@@ -1117,10 +1172,10 @@ __bam_copy(dbp, pp, cp, nxt, stop)
nbytes = RINTERNAL_SIZE;
break;
default:
- return (__db_pgfmt(dbp, pp->pgno));
+ return (__db_pgfmt(dbp->dbenv, pp->pgno));
}
- cp->inp[off] = HOFFSET(cp) -= nbytes;
- memcpy(P_ENTRY(cp, off), P_ENTRY(pp, nxt), nbytes);
+ cinp[off] = HOFFSET(cp) -= nbytes;
+ memcpy(P_ENTRY(dbp, cp, off), P_ENTRY(dbp, pp, nxt), nbytes);
}
return (0);
}
diff --git a/db/btree/bt_stat.c b/db/btree/bt_stat.c
index 349bb40cf..0e8cff37f 100644
--- a/db/btree/bt_stat.c
+++ b/db/btree/bt_stat.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_stat.c,v 11.29 2000/11/28 21:42:27 bostic Exp $";
+static const char revid[] = "$Id: bt_stat.c,v 11.61 2003/09/13 18:52:21 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,102 +18,76 @@ static const char revid[] = "$Id: bt_stat.c,v 11.29 2000/11/28 21:42:27 bostic E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
/*
* __bam_stat --
* Gather/print the btree statistics
*
- * PUBLIC: int __bam_stat __P((DB *, void *, void *(*)(size_t), u_int32_t));
+ * PUBLIC: int __bam_stat __P((DBC *, void *, u_int32_t));
*/
int
-__bam_stat(dbp, spp, db_malloc, flags)
- DB *dbp;
+__bam_stat(dbc, spp, flags)
+ DBC *dbc;
void *spp;
- void *(*db_malloc) __P((size_t));
u_int32_t flags;
{
BTMETA *meta;
BTREE *t;
BTREE_CURSOR *cp;
- DBC *dbc;
+ DB *dbp;
DB_BTREE_STAT *sp;
+ DB_ENV *dbenv;
DB_LOCK lock, metalock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t pgno;
- int ret, t_ret;
+ int ret, t_ret, write_meta;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->stat");
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
meta = NULL;
t = dbp->bt_internal;
sp = NULL;
- metalock.off = lock.off = LOCK_INVALID;
+ LOCK_INIT(metalock);
+ LOCK_INIT(lock);
+ mpf = dbp->mpf;
h = NULL;
- ret = 0;
-
- /* Check for invalid flags. */
- if ((ret = __db_statchk(dbp, flags)) != 0)
- return (ret);
+ ret = write_meta = 0;
- /* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
- return (ret);
cp = (BTREE_CURSOR *)dbc->internal;
- DEBUG_LWRITE(dbc, NULL, "bam_stat", NULL, NULL, flags);
-
/* Allocate and clear the structure. */
- if ((ret = __os_malloc(dbp->dbenv, sizeof(*sp), db_malloc, &sp)) != 0)
+ if ((ret = __os_umalloc(dbenv, sizeof(*sp), &sp)) != 0)
goto err;
memset(sp, 0, sizeof(*sp));
- /* If the app just wants the record count, make it fast. */
- if (flags == DB_RECORDCOUNT) {
- if ((ret = __db_lget(dbc, 0,
- cp->root, DB_LOCK_READ, 0, &lock)) != 0)
- goto err;
- if ((ret = memp_fget(dbp->mpf,
- &cp->root, 0, (PAGE **)&h)) != 0)
- goto err;
-
- sp->bt_nkeys = RE_NREC(h);
-
- goto done;
- }
- if (flags == DB_CACHED_COUNTS) {
- if ((ret = __db_lget(dbc,
- 0, t->bt_meta, DB_LOCK_READ, 0, &lock)) != 0)
- goto err;
- if ((ret =
- memp_fget(dbp->mpf, &t->bt_meta, 0, (PAGE **)&meta)) != 0)
- goto err;
- sp->bt_nkeys = meta->dbmeta.key_count;
- sp->bt_ndata = meta->dbmeta.record_count;
-
- goto done;
- }
-
/* Get the metadata page for the entire database. */
pgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
goto err;
+ if (flags == DB_RECORDCOUNT || flags == DB_CACHED_COUNTS)
+ flags = DB_FAST_STAT;
+ if (flags == DB_FAST_STAT)
+ goto meta_only;
+
/* Walk the metadata free list, counting pages. */
for (sp->bt_free = 0, pgno = meta->dbmeta.free; pgno != PGNO_INVALID;) {
++sp->bt_free;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
pgno = h->next_pgno;
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
h = NULL;
}
@@ -122,14 +96,14 @@ __bam_stat(dbp, spp, db_malloc, flags)
pgno = cp->root;
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
/* Get the levels from the root page. */
sp->bt_levels = h->level;
/* Discard the root page. */
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
goto err;
h = NULL;
__LPUT(dbc, lock);
@@ -143,20 +117,36 @@ __bam_stat(dbp, spp, db_malloc, flags)
* Get the subdatabase metadata page if it's not the same as the
* one we already have.
*/
- if (t->bt_meta != PGNO_BASE_MD || !F_ISSET(dbp, DB_AM_RDONLY)) {
- if ((ret = memp_fput(dbp->mpf, meta, 0)) != 0)
+ write_meta = !F_ISSET(dbp, DB_AM_RDONLY);
+meta_only:
+ if (t->bt_meta != PGNO_BASE_MD || write_meta != 0) {
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
meta = NULL;
__LPUT(dbc, metalock);
if ((ret = __db_lget(dbc,
- 0, t->bt_meta, F_ISSET(dbp, DB_AM_RDONLY) ?
+ 0, t->bt_meta, write_meta == 0 ?
DB_LOCK_READ : DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret =
- memp_fget(dbp->mpf, &t->bt_meta, 0, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->bt_meta, 0, &meta)) != 0)
goto err;
}
+ if (flags == DB_FAST_STAT) {
+ if (dbp->type == DB_RECNO ||
+ (dbp->type == DB_BTREE && F_ISSET(dbp, DB_AM_RECNUM))) {
+ if ((ret = __db_lget(dbc, 0,
+ cp->root, DB_LOCK_READ, 0, &lock)) != 0)
+ goto err;
+ if ((ret =
+ __memp_fget(mpf, &cp->root, 0, (PAGE **)&h)) != 0)
+ goto err;
+
+ sp->bt_nkeys = RE_NREC(h);
+ } else
+ sp->bt_nkeys = meta->dbmeta.key_count;
+ sp->bt_ndata = meta->dbmeta.record_count;
+ }
/* Get metadata page statistics. */
sp->bt_metaflags = meta->dbmeta.flags;
@@ -167,38 +157,29 @@ __bam_stat(dbp, spp, db_malloc, flags)
sp->bt_pagesize = meta->dbmeta.pagesize;
sp->bt_magic = meta->dbmeta.magic;
sp->bt_version = meta->dbmeta.version;
- if (!F_ISSET(dbp, DB_AM_RDONLY)) {
+
+ if (write_meta != 0) {
meta->dbmeta.key_count = sp->bt_nkeys;
meta->dbmeta.record_count = sp->bt_ndata;
}
- /* Discard the metadata page. */
- if ((ret = memp_fput(dbp->mpf,
- meta, F_ISSET(dbp, DB_AM_RDONLY) ? 0 : DB_MPOOL_DIRTY)) != 0)
- goto err;
- meta = NULL;
- __LPUT(dbc, metalock);
-
-done: *(DB_BTREE_STAT **)spp = sp;
-
- if (0) {
-err: if (sp != NULL)
- __os_free(sp, sizeof(*sp));
- }
+ *(DB_BTREE_STAT **)spp = sp;
- if (h != NULL &&
- (t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret == 0)
+err: /* Discard the second page. */
+ __LPUT(dbc, lock);
+ if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
- if (meta != NULL &&
- (t_ret = memp_fput(dbp->mpf, meta, 0)) != 0 && ret == 0)
+ /* Discard the metadata page. */
+ __LPUT(dbc, metalock);
+ if (meta != NULL && (t_ret = __memp_fput(
+ mpf, meta, write_meta == 0 ? 0 : DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
- if (lock.off != LOCK_INVALID)
- __LPUT(dbc, lock);
-
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
+ if (ret != 0 && sp != NULL) {
+ __os_ufree(dbenv, sp);
+ *(DB_BTREE_STAT **)spp = NULL;
+ }
return (ret);
}
@@ -222,22 +203,27 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
BKEYDATA *bk;
DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
PAGE *h;
RINTERNAL *ri;
db_indx_t indx;
int already_put, ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ already_put = 0;
if ((ret = __db_lget(dbc, 0, root_pgno, mode, 0, &lock)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &root_pgno, 0, &h)) != 0)
- goto err;
+ if ((ret = __memp_fget(mpf, &root_pgno, 0, &h)) != 0) {
+ __LPUT(dbc, lock);
+ return (ret);
+ }
switch (TYPE(h)) {
case P_IBTREE:
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
- bi = GET_BINTERNAL(h, indx);
+ bi = GET_BINTERNAL(dbp, h, indx);
if (B_TYPE(bi->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
((BOVERFLOW *)bi->data)->pgno,
@@ -245,34 +231,34 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
goto err;
if ((ret = __bam_traverse(
dbc, mode, bi->pgno, callback, cookie)) != 0)
- break;
+ goto err;
}
break;
case P_IRECNO:
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
- ri = GET_RINTERNAL(h, indx);
+ ri = GET_RINTERNAL(dbp, h, indx);
if ((ret = __bam_traverse(
dbc, mode, ri->pgno, callback, cookie)) != 0)
- break;
+ goto err;
}
break;
case P_LBTREE:
for (indx = 0; indx < NUM_ENT(h); indx += P_INDX) {
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
- GET_BOVERFLOW(h, indx)->pgno,
+ GET_BOVERFLOW(dbp, h, indx)->pgno,
callback, cookie)) != 0)
goto err;
- bk = GET_BKEYDATA(h, indx + O_INDX);
+ bk = GET_BKEYDATA(dbp, h, indx + O_INDX);
if (B_TYPE(bk->type) == B_DUPLICATE &&
(ret = __bam_traverse(dbc, mode,
- GET_BOVERFLOW(h, indx + O_INDX)->pgno,
+ GET_BOVERFLOW(dbp, h, indx + O_INDX)->pgno,
callback, cookie)) != 0)
goto err;
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
- GET_BOVERFLOW(h, indx + O_INDX)->pgno,
+ GET_BOVERFLOW(dbp, h, indx + O_INDX)->pgno,
callback, cookie)) != 0)
goto err;
}
@@ -280,22 +266,21 @@ __bam_traverse(dbc, mode, root_pgno, callback, cookie)
case P_LDUP:
case P_LRECNO:
for (indx = 0; indx < NUM_ENT(h); indx += O_INDX) {
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW &&
(ret = __db_traverse_big(dbp,
- GET_BOVERFLOW(h, indx)->pgno,
+ GET_BOVERFLOW(dbp, h, indx)->pgno,
callback, cookie)) != 0)
goto err;
}
break;
+ default:
+ return (__db_pgfmt(dbp->dbenv, h->pgno));
}
- already_put = 0;
- if ((ret = callback(dbp, h, cookie, &already_put)) != 0)
- goto err;
+ ret = callback(dbp, h, cookie, &already_put);
-err: if (!already_put &&
- (t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret != 0)
+err: if (!already_put && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret != 0)
ret = t_ret;
__LPUT(dbc, lock);
@@ -316,33 +301,40 @@ __bam_stat_callback(dbp, h, cookie, putp)
int *putp;
{
DB_BTREE_STAT *sp;
- db_indx_t indx, top;
+ db_indx_t indx, *inp, top;
u_int8_t type;
sp = cookie;
*putp = 0;
top = NUM_ENT(h);
+ inp = P_INP(dbp, h);
switch (TYPE(h)) {
case P_IBTREE:
case P_IRECNO:
++sp->bt_int_pg;
- sp->bt_int_pgfree += P_FREESPACE(h);
+ sp->bt_int_pgfree += P_FREESPACE(dbp, h);
break;
case P_LBTREE:
/* Correct for on-page duplicates and deleted items. */
for (indx = 0; indx < top; indx += P_INDX) {
+ type = GET_BKEYDATA(dbp, h, indx + O_INDX)->type;
+ /* Ignore deleted items. */
+ if (B_DISSET(type))
+ continue;
+
+ /* Ignore duplicate keys. */
if (indx + P_INDX >= top ||
- h->inp[indx] != h->inp[indx + P_INDX])
+ inp[indx] != inp[indx + P_INDX])
++sp->bt_nkeys;
- type = GET_BKEYDATA(h, indx + O_INDX)->type;
- if (!B_DISSET(type) && B_TYPE(type) != B_DUPLICATE)
+ /* Ignore off-page duplicates. */
+ if (B_TYPE(type) != B_DUPLICATE)
++sp->bt_ndata;
}
++sp->bt_leaf_pg;
- sp->bt_leaf_pgfree += P_FREESPACE(h);
+ sp->bt_leaf_pgfree += P_FREESPACE(dbp, h);
break;
case P_LRECNO:
/*
@@ -356,39 +348,39 @@ __bam_stat_callback(dbp, h, cookie, putp)
* Correct for deleted items in non-renumbering
* Recno databases.
*/
- if (F_ISSET(dbp, DB_RE_RENUMBER))
+ if (F_ISSET(dbp, DB_AM_RENUMBER))
sp->bt_ndata += top;
else
for (indx = 0; indx < top; indx += O_INDX) {
- type = GET_BKEYDATA(h, indx)->type;
+ type = GET_BKEYDATA(dbp, h, indx)->type;
if (!B_DISSET(type))
++sp->bt_ndata;
}
++sp->bt_leaf_pg;
- sp->bt_leaf_pgfree += P_FREESPACE(h);
+ sp->bt_leaf_pgfree += P_FREESPACE(dbp, h);
} else {
sp->bt_ndata += top;
++sp->bt_dup_pg;
- sp->bt_dup_pgfree += P_FREESPACE(h);
+ sp->bt_dup_pgfree += P_FREESPACE(dbp, h);
}
break;
case P_LDUP:
/* Correct for deleted items. */
for (indx = 0; indx < top; indx += O_INDX)
- if (!B_DISSET(GET_BKEYDATA(h, indx)->type))
+ if (!B_DISSET(GET_BKEYDATA(dbp, h, indx)->type))
++sp->bt_ndata;
++sp->bt_dup_pg;
- sp->bt_dup_pgfree += P_FREESPACE(h);
+ sp->bt_dup_pgfree += P_FREESPACE(dbp, h);
break;
case P_OVERFLOW:
++sp->bt_over_pg;
- sp->bt_over_pgfree += P_OVFLSPACE(dbp->pgsize, h);
+ sp->bt_over_pgfree += P_OVFLSPACE(dbp, dbp->pgsize, h);
break;
default:
- return (__db_pgfmt(dbp, h->pgno));
+ return (__db_pgfmt(dbp->dbenv, h->pgno));
}
return (0);
}
@@ -398,38 +390,26 @@ __bam_stat_callback(dbp, h, cookie, putp)
* Return proportion of keys relative to given key. The numbers are
* slightly skewed due to on page duplicates.
*
- * PUBLIC: int __bam_key_range __P((DB *,
- * PUBLIC: DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+ * PUBLIC: int __bam_key_range __P((DBC *, DBT *, DB_KEY_RANGE *, u_int32_t));
*/
int
-__bam_key_range(dbp, txn, dbt, kp, flags)
- DB *dbp;
- DB_TXN *txn;
+__bam_key_range(dbc, dbt, kp, flags)
+ DBC *dbc;
DBT *dbt;
DB_KEY_RANGE *kp;
u_int32_t flags;
{
BTREE_CURSOR *cp;
- DBC *dbc;
EPG *sp;
double factor;
- int exact, ret, t_ret;
+ int exact, ret;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->key_range");
+ COMPQUIET(flags, 0);
- if (flags != 0)
- return (__db_ferr(dbp->dbenv, "DB->key_range", 0));
-
- /* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0)
+ if ((ret = __bam_search(dbc, PGNO_INVALID,
+ dbt, S_STK_ONLY, 1, NULL, &exact)) != 0)
return (ret);
- DEBUG_LWRITE(dbc, NULL, "bam_key_range", NULL, NULL, 0);
-
- if ((ret = __bam_search(dbc, dbt, S_STK_ONLY, 1, NULL, &exact)) != 0)
- goto err;
-
cp = (BTREE_CURSOR *)dbc->internal;
kp->less = kp->greater = 0.0;
@@ -453,7 +433,7 @@ __bam_key_range(dbp, txn, dbt, kp, flags)
else {
kp->less += factor * sp->indx / sp->entries;
kp->greater += factor *
- (sp->entries - sp->indx - 1) / sp->entries;
+ ((sp->entries - sp->indx) - 1) / sp->entries;
}
factor *= 1.0/sp->entries;
}
@@ -473,8 +453,5 @@ __bam_key_range(dbp, txn, dbt, kp, flags)
BT_STK_CLR(cp);
-err: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
- return (ret);
+ return (0);
}
diff --git a/db/btree/bt_upgrade.c b/db/btree/bt_upgrade.c
index 4032dba3b..71ee84222 100644
--- a/db/btree/bt_upgrade.c
+++ b/db/btree/bt_upgrade.c
@@ -1,28 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_upgrade.c,v 11.19 2000/11/30 00:58:29 ubell Exp $";
+static const char revid[] = "$Id: bt_upgrade.c,v 11.29 2003/05/18 18:10:11 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <limits.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "btree.h"
-#include "db_am.h"
-#include "db_upgrade.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_upgrade.h"
+#include "dbinc/btree.h"
/*
* __bam_30_btreemeta --
@@ -107,7 +104,7 @@ __bam_31_btreemeta(dbp, real_name, flags, fhp, h, dirtyp)
newmeta->minkey = oldmeta->minkey;
newmeta->maxkey = oldmeta->maxkey;
memmove(newmeta->dbmeta.uid,
- oldmeta->dbmeta.uid, sizeof(oldmeta->dbmeta.uid));
+ oldmeta->dbmeta.uid, sizeof(oldmeta->dbmeta.uid));
newmeta->dbmeta.flags = oldmeta->dbmeta.flags;
newmeta->dbmeta.record_count = 0;
newmeta->dbmeta.key_count = 0;
@@ -126,7 +123,7 @@ __bam_31_btreemeta(dbp, real_name, flags, fhp, h, dirtyp)
/*
* __bam_31_lbtree --
- * Upgrade the database btree leaf pages.
+ * Upgrade the database btree leaf pages.
*
* PUBLIC: int __bam_31_lbtree
* PUBLIC: __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
@@ -147,15 +144,15 @@ __bam_31_lbtree(dbp, real_name, flags, fhp, h, dirtyp)
ret = 0;
for (indx = O_INDX; indx < NUM_ENT(h); indx += P_INDX) {
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_DUPLICATE) {
- pgno = GET_BOVERFLOW(h, indx)->pgno;
+ pgno = GET_BOVERFLOW(dbp, h, indx)->pgno;
if ((ret = __db_31_offdup(dbp, real_name, fhp,
LF_ISSET(DB_DUPSORT) ? 1 : 0, &pgno)) != 0)
break;
- if (pgno != GET_BOVERFLOW(h, indx)->pgno) {
+ if (pgno != GET_BOVERFLOW(dbp, h, indx)->pgno) {
*dirtyp = 1;
- GET_BOVERFLOW(h, indx)->pgno = pgno;
+ GET_BOVERFLOW(dbp, h, indx)->pgno = pgno;
}
}
}
diff --git a/db/btree/bt_verify.c b/db/btree/bt_verify.c
index 9f8647e7e..cd8c57a4d 100644
--- a/db/btree/bt_verify.c
+++ b/db/btree/bt_verify.c
@@ -1,16 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: bt_verify.c,v 1.44 2000/12/06 19:55:44 ubell Exp $
+ * $Id: bt_verify.c,v 1.87 2003/10/06 14:09:23 bostic Exp $
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: bt_verify.c,v 1.44 2000/12/06 19:55:44 ubell Exp $";
+static const char revid[] = "$Id: bt_verify.c,v 1.87 2003/10/06 14:09:23 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,9 +20,11 @@ static const char revid[] = "$Id: bt_verify.c,v 1.44 2000/12/06 19:55:44 ubell E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_verify.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_verify.h"
+#include "dbinc/btree.h"
+#include "dbinc/mp.h"
static int __bam_safe_getdata __P((DB *, PAGE *, u_int32_t, int, DBT *, int *));
static int __bam_vrfy_inp __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t,
@@ -49,15 +51,17 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int isbad, t_ret, ret;
db_indx_t ovflsize;
+ dbenv = dbp->dbenv;
+ isbad = 0;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
- isbad = 0;
-
/*
* If VRFY_INCOMPLETE is not set, then we didn't come through
* __db_vrfy_pagezero and didn't incompletely
@@ -79,19 +83,19 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
/* avoid division by zero */
ovflsize = meta->minkey > 0 ?
- B_MINKEY_TO_OVFLSIZE(meta->minkey, dbp->pgsize) : 0;
+ B_MINKEY_TO_OVFLSIZE(dbp, meta->minkey, dbp->pgsize) : 0;
if (meta->minkey < 2 ||
- ovflsize > B_MINKEY_TO_OVFLSIZE(DEFMINKEYPAGE, dbp->pgsize)) {
+ ovflsize > B_MINKEY_TO_OVFLSIZE(dbp, DEFMINKEYPAGE, dbp->pgsize)) {
pip->bt_minkey = 0;
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonsensical bt_minkey value %lu on metadata page %lu",
- (u_long)meta->minkey, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonsensical bt_minkey value %lu on metadata page",
+ (u_long)pgno, (u_long)meta->minkey));
} else
pip->bt_minkey = meta->minkey;
- /* bt_maxkey: no constraints (XXX: right?) */
+ /* bt_maxkey: unsupported so no constraints. */
pip->bt_maxkey = meta->maxkey;
/* re_len: no constraints on this (may be zero or huge--we make rope) */
@@ -103,13 +107,13 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
* of the file, then the root page had better be page 1.
*/
pip->root = 0;
- if (meta->root == PGNO_INVALID
- || meta->root == pgno || !IS_VALID_PGNO(meta->root) ||
+ if (meta->root == PGNO_INVALID ||
+ meta->root == pgno || !IS_VALID_PGNO(meta->root) ||
(pgno == PGNO_BASE_MD && meta->root != 1)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonsensical root page %lu on metadata page %lu",
- (u_long)meta->root, (u_long)vdp->last_pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonsensical root page %lu on metadata page",
+ (u_long)pgno, (u_long)meta->root));
} else
pip->root = meta->root;
@@ -124,8 +128,8 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
*/
if (F_ISSET(&meta->dbmeta, BTM_DUP) && pgno == PGNO_BASE_MD) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Btree metadata page %lu has both duplicates and multiple databases",
+ EPRINT((dbenv,
+"Page %lu: Btree metadata page has both duplicates and multiple databases",
(u_long)pgno));
}
F_SET(pip, VRFY_HAS_SUBDBS);
@@ -138,8 +142,8 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
if (F_ISSET(&meta->dbmeta, BTM_RECNUM))
F_SET(pip, VRFY_HAS_RECNUMS);
if (F_ISSET(pip, VRFY_HAS_RECNUMS) && F_ISSET(pip, VRFY_HAS_DUPS)) {
- EPRINT((dbp->dbenv,
- "Btree metadata page %lu illegally has both recnums and dups",
+ EPRINT((dbenv,
+ "Page %lu: Btree metadata page illegally has both recnums and dups",
(u_long)pgno));
isbad = 1;
}
@@ -149,14 +153,14 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
dbp->type = DB_RECNO;
} else if (F_ISSET(pip, VRFY_IS_RRECNO)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Metadata page %lu has renumber flag set but is not recno",
+ EPRINT((dbenv,
+ "Page %lu: metadata page has renumber flag set but is not recno",
(u_long)pgno));
}
if (F_ISSET(pip, VRFY_IS_RECNO) && F_ISSET(pip, VRFY_HAS_DUPS)) {
- EPRINT((dbp->dbenv,
- "Recno metadata page %lu specifies duplicates",
+ EPRINT((dbenv,
+ "Page %lu: recno metadata page specifies duplicates",
(u_long)pgno));
isbad = 1;
}
@@ -169,9 +173,9 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
* database
*/
isbad = 1;
- EPRINT((dbp->dbenv,
- "re_len of %lu in non-fixed-length database",
- (u_long)pip->re_len));
+ EPRINT((dbenv,
+ "Page %lu: re_len of %lu in non-fixed-length database",
+ (u_long)pgno, (u_long)pip->re_len));
}
/*
@@ -179,7 +183,7 @@ __bam_vrfy_meta(dbp, vdp, meta, pgno, flags)
* not be and may still be correct.
*/
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
@@ -200,22 +204,24 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
u_int32_t flags;
{
BKEYDATA *bk;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
db_indx_t i;
int ret, t_ret, isbad;
u_int32_t re_len_guess, len;
+ dbenv = dbp->dbenv;
isbad = 0;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
- if ((ret = __db_fchk(dbp->dbenv,
- "__ram_vrfy_leaf", flags, OKFLAGS)) != 0)
+ if ((ret = __db_fchk(dbenv, "__ram_vrfy_leaf", flags, OKFLAGS)) != 0)
goto err;
if (TYPE(h) != P_LRECNO) {
/* We should not have been called. */
- TYPE_ERR_PRINT(dbp->dbenv, "__ram_vrfy_leaf", pgno, TYPE(h));
+ TYPE_ERR_PRINT(dbenv, "__ram_vrfy_leaf", pgno, TYPE(h));
DB_ASSERT(0);
ret = EINVAL;
goto err;
@@ -241,8 +247,8 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
goto err;
if (F_ISSET(pip, VRFY_HAS_DUPS)) {
- EPRINT((dbp->dbenv,
- "Recno database has dups on page %lu", (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: Recno database has dups", (u_long)pgno));
ret = DB_VERIFY_BAD;
goto err;
}
@@ -255,7 +261,7 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
*/
re_len_guess = 0;
for (i = 0; i < NUM_ENT(h); i++) {
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
/* KEYEMPTY. Go on. */
if (B_DISSET(bk->type))
continue;
@@ -265,9 +271,9 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
len = bk->len;
else {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonsensical type for item %lu, page %lu",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonsensical type for item %lu",
+ (u_long)pgno, (u_long)i));
continue;
}
if (re_len_guess == 0)
@@ -288,9 +294,9 @@ __ram_vrfy_leaf(dbp, vdp, h, pgno, flags)
/* Save off record count. */
pip->rec_cnt = NUM_ENT(h);
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
- return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : 0);
+ return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
/*
@@ -308,10 +314,13 @@ __bam_vrfy(dbp, vdp, h, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int ret, t_ret, isbad;
+ dbenv = dbp->dbenv;
isbad = 0;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
@@ -322,7 +331,7 @@ __bam_vrfy(dbp, vdp, h, pgno, flags)
case P_LDUP:
break;
default:
- TYPE_ERR_PRINT(dbp->dbenv, "__bam_vrfy", pgno, TYPE(h));
+ TYPE_ERR_PRINT(dbenv, "__bam_vrfy", pgno, TYPE(h));
DB_ASSERT(0);
ret = EINVAL;
goto err;
@@ -361,8 +370,8 @@ __bam_vrfy(dbp, vdp, h, pgno, flags)
isbad = 1;
else
goto err;
- EPRINT((dbp->dbenv,
- "item order check on page %lu unsafe: skipping",
+ EPRINT((dbenv,
+ "Page %lu: item order check unsafe: skipping",
(u_long)pgno));
} else if (!LF_ISSET(DB_NOORDERCHK) && (ret =
__bam_vrfy_itemorder(dbp, vdp, h, pgno, 0, 0, 0, flags)) != 0) {
@@ -377,9 +386,9 @@ __bam_vrfy(dbp, vdp, h, pgno, flags)
goto err;
}
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
- return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : 0);
+ return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
/*
@@ -398,13 +407,16 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
db_indx_t *nentriesp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
RINTERNAL *ri;
VRFY_CHILDINFO child;
VRFY_PAGEINFO *pip;
int ret, t_ret, isbad;
u_int32_t himark, i, offset, nentries;
+ db_indx_t *inp;
u_int8_t *pagelayout, *p;
+ dbenv = dbp->dbenv;
isbad = 0;
memset(&child, 0, sizeof(VRFY_CHILDINFO));
nentries = 0;
@@ -414,38 +426,38 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
return (ret);
if (TYPE(h) != P_IRECNO) {
- TYPE_ERR_PRINT(dbp->dbenv, "__ram_vrfy_inp", pgno, TYPE(h));
+ TYPE_ERR_PRINT(dbenv, "__ram_vrfy_inp", pgno, TYPE(h));
DB_ASSERT(0);
ret = EINVAL;
goto err;
}
himark = dbp->pgsize;
- if ((ret =
- __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &pagelayout)) != 0)
+ if ((ret = __os_malloc(dbenv, dbp->pgsize, &pagelayout)) != 0)
goto err;
memset(pagelayout, 0, dbp->pgsize);
+ inp = P_INP(dbp, h);
for (i = 0; i < NUM_ENT(h); i++) {
- if ((u_int8_t *)h->inp + i >= (u_int8_t *)h + himark) {
- EPRINT((dbp->dbenv,
- "Page %lu entries listing %lu overlaps data",
+ if ((u_int8_t *)inp + i >= (u_int8_t *)h + himark) {
+ EPRINT((dbenv,
+ "Page %lu: entries listing %lu overlaps data",
(u_long)pgno, (u_long)i));
ret = DB_VERIFY_BAD;
goto err;
}
- offset = h->inp[i];
+ offset = inp[i];
/*
* Check that the item offset is reasonable: it points
* somewhere after the inp array and before the end of the
* page.
*/
- if (offset <= (u_int32_t)((u_int8_t *)h->inp + i -
+ if (offset <= (u_int32_t)((u_int8_t *)inp + i -
(u_int8_t *)h) ||
offset > (u_int32_t)(dbp->pgsize - RINTERNAL_SIZE)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Bad offset %lu at page %lu index %lu",
- (u_long)offset, (u_long)pgno, (u_long)i));
+ EPRINT((dbenv,
+ "Page %lu: bad offset %lu at index %lu",
+ (u_long)pgno, (u_long)offset, (u_long)i));
continue;
}
@@ -456,7 +468,7 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
nentries++;
/* Make sure this RINTERNAL is not multiply referenced. */
- ri = GET_RINTERNAL(h, i);
+ ri = GET_RINTERNAL(dbp, h, i);
if (pagelayout[offset] == 0) {
pagelayout[offset] = 1;
child.pgno = ri->pgno;
@@ -465,9 +477,9 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
if ((ret = __db_vrfy_childput(vdp, pgno, &child)) != 0)
goto err;
} else {
- EPRINT((dbp->dbenv,
- "RINTERNAL structure at offset %lu, page %lu referenced twice",
- (u_long)offset, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: RINTERNAL structure at offset %lu referenced twice",
+ (u_long)pgno, (u_long)offset));
isbad = 1;
}
}
@@ -476,24 +488,25 @@ __ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
p < pagelayout + dbp->pgsize;
p += RINTERNAL_SIZE)
if (*p != 1) {
- EPRINT((dbp->dbenv,
- "Gap between items at offset %lu, page %lu",
- (u_long)(p - pagelayout), (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: gap between items at offset %lu",
+ (u_long)pgno, (u_long)(p - pagelayout)));
isbad = 1;
}
if ((db_indx_t)himark != HOFFSET(h)) {
- EPRINT((dbp->dbenv, "Bad HOFFSET %lu, appears to be %lu",
- (u_long)(HOFFSET(h)), (u_long)himark));
+ EPRINT((dbenv,
+ "Page %lu: bad HOFFSET %lu, appears to be %lu",
+ (u_long)pgno, (u_long)(HOFFSET(h)), (u_long)himark));
isbad = 1;
}
*nentriesp = nentries;
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
if (pagelayout != NULL)
- __os_free(pagelayout, dbp->pgsize);
+ __os_free(dbenv, pagelayout);
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
@@ -513,6 +526,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
{
BKEYDATA *bk;
BOVERFLOW *bo;
+ DB_ENV *dbenv;
VRFY_CHILDINFO child;
VRFY_PAGEINFO *pip;
int isbad, initem, isdupitem, ret, t_ret;
@@ -520,6 +534,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
u_int32_t i, endoff, nentries;
u_int8_t *pagelayout;
+ dbenv = dbp->dbenv;
isbad = isdupitem = 0;
nentries = 0;
memset(&child, 0, sizeof(VRFY_CHILDINFO));
@@ -540,7 +555,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
*/
if (LF_ISSET(DB_SALVAGE))
break;
- TYPE_ERR_PRINT(dbp->dbenv, "__bam_vrfy_inp", pgno, TYPE(h));
+ TYPE_ERR_PRINT(dbenv, "__bam_vrfy_inp", pgno, TYPE(h));
DB_ASSERT(0);
ret = EINVAL;
goto err;
@@ -558,22 +573,24 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* it and the region immediately after it.
*/
himark = dbp->pgsize;
- if ((ret = __os_malloc(dbp->dbenv,
- dbp->pgsize, NULL, &pagelayout)) != 0)
+ if ((ret = __os_malloc(dbenv, dbp->pgsize, &pagelayout)) != 0)
goto err;
memset(pagelayout, 0, dbp->pgsize);
for (i = 0; i < NUM_ENT(h); i++) {
-
- ret = __db_vrfy_inpitem(dbp,
- h, pgno, i, 1, flags, &himark, &offset);
- if (ret == DB_VERIFY_BAD) {
+ switch (ret = __db_vrfy_inpitem(dbp,
+ h, pgno, i, 1, flags, &himark, &offset)) {
+ case 0:
+ break;
+ case DB_VERIFY_BAD:
isbad = 1;
continue;
- } else if (ret == DB_VERIFY_FATAL) {
+ case DB_VERIFY_FATAL:
isbad = 1;
goto err;
- } else if (ret != 0)
- DB_ASSERT(0);
+ default:
+ DB_ASSERT(ret != 0);
+ break;
+ }
/*
* We now have a plausible beginning for the item, and we know
@@ -582,7 +599,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* Mark the beginning and end in pagelayout so we can make sure
* items have no overlaps or gaps.
*/
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
#define ITEM_BEGIN 1
#define ITEM_END 2
if (pagelayout[offset] == 0)
@@ -608,9 +625,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
isdupitem = 1;
} else {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Duplicated item %lu on page %lu",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: duplicated item %lu",
+ (u_long)pgno, (u_long)i));
}
}
@@ -621,7 +637,7 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* If the end already has a sign other than 0, do nothing--
* it's an overlap that we'll catch later.
*/
- switch(B_TYPE(bk->type)) {
+ switch (B_TYPE(bk->type)) {
case B_KEYDATA:
if (TYPE(h) == P_IBTREE)
/* It's a BINTERNAL. */
@@ -661,9 +677,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* the end had better coincide too.
*/
if (isdupitem && pagelayout[endoff] != ITEM_END) {
- EPRINT((dbp->dbenv,
- "Duplicated item %lu on page %lu",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: duplicated item %lu",
+ (u_long)pgno, (u_long)i));
isbad = 1;
} else if (pagelayout[endoff] == 0)
pagelayout[endoff] = ITEM_END;
@@ -675,9 +690,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
*/
if (B_DISSET(bk->type) && TYPE(h) != P_LRECNO) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Item %lu on page %lu marked deleted",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: item %lu marked deleted",
+ (u_long)pgno, (u_long)i));
}
/*
@@ -695,14 +709,14 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
case B_DUPLICATE:
if (TYPE(h) == P_IBTREE) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Duplicate page referenced by internal btree page %lu at item %lu",
+ EPRINT((dbenv,
+ "Page %lu: duplicate page referenced by internal btree page at item %lu",
(u_long)pgno, (u_long)i));
break;
} else if (TYPE(h) == P_LRECNO) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Duplicate page referenced by recno page %lu at item %lu",
+ EPRINT((dbenv,
+ "Page %lu: duplicate page referenced by recno page at item %lu",
(u_long)pgno, (u_long)i));
break;
}
@@ -716,10 +730,10 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
/* Make sure tlen is reasonable. */
if (bo->tlen > dbp->pgsize * vdp->last_pgno) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Impossible tlen %lu, item %lu, page %lu",
- (u_long)bo->tlen, (u_long)i,
- (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: impossible tlen %lu, item %lu",
+ (u_long)pgno,
+ (u_long)bo->tlen, (u_long)i));
/* Don't save as a child. */
break;
}
@@ -727,9 +741,9 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
if (!IS_VALID_PGNO(bo->pgno) || bo->pgno == pgno ||
bo->pgno == PGNO_INVALID) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Offpage item %lu, page %lu has bad pgno",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: offpage item %lu has bad pgno %lu",
+ (u_long)pgno, (u_long)i, (u_long)bo->pgno));
/* Don't save as a child. */
break;
}
@@ -743,9 +757,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
break;
default:
isbad = 1;
- EPRINT((dbp->dbenv,
- "Item %lu on page %lu of invalid type %lu",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: item %lu of invalid type %lu",
+ (u_long)pgno, (u_long)i, (u_long)B_TYPE(bk->type)));
break;
}
}
@@ -764,8 +777,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
continue;
isbad = 1;
- EPRINT((dbp->dbenv,
- "Gap between items, page %lu offset %lu",
+ EPRINT((dbenv,
+ "Page %lu: gap between items at offset %lu",
(u_long)pgno, (u_long)i));
/* Find the end of the gap */
for ( ; pagelayout[i + 1] == 0 &&
@@ -776,9 +789,9 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
/* We've found an item. Check its alignment. */
if (i != ALIGN(i, sizeof(u_int32_t))) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Offset %lu page %lu unaligned",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: offset %lu unaligned",
+ (u_long)pgno, (u_long)i));
}
initem = 1;
nentries++;
@@ -790,8 +803,8 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* be an overlap.
*/
isbad = 1;
- EPRINT((dbp->dbenv,
- "Overlapping items, page %lu offset %lu",
+ EPRINT((dbenv,
+ "Page %lu: overlapping items at offset %lu",
(u_long)pgno, (u_long)i));
break;
default:
@@ -815,25 +828,25 @@ __bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags)
* end. Overlap.
*/
isbad = 1;
- EPRINT((dbp->dbenv,
- "Overlapping items, page %lu offset %lu",
+ EPRINT((dbenv,
+ "Page %lu: overlapping items at offset %lu",
(u_long)pgno, (u_long)i));
break;
}
- (void)__os_free(pagelayout, dbp->pgsize);
+ __os_free(dbenv, pagelayout);
/* Verify HOFFSET. */
if ((db_indx_t)himark != HOFFSET(h)) {
- EPRINT((dbp->dbenv, "Bad HOFFSET %lu, appears to be %lu",
- (u_long)HOFFSET(h), (u_long)himark));
+ EPRINT((dbenv, "Page %lu: bad HOFFSET %lu, appears to be %lu",
+ (u_long)pgno, (u_long)HOFFSET(h), (u_long)himark));
isbad = 1;
}
err: if (nentriesp != NULL)
*nentriesp = nentries;
- if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return ((isbad == 1 && ret == 0) ? DB_VERIFY_BAD : ret);
@@ -865,14 +878,15 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
int ovflok, hasdups;
u_int32_t flags;
{
- DBT dbta, dbtb, dup1, dup2, *p1, *p2, *tmp;
- BTREE *bt;
BINTERNAL *bi;
BKEYDATA *bk;
BOVERFLOW *bo;
+ BTREE *bt;
+ DBT dbta, dbtb, dup_1, dup_2, *p1, *p2, *tmp;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
db_indx_t i;
- int cmp, freedup1, freedup2, isbad, ret, t_ret;
+ int cmp, freedup_1, freedup_2, isbad, ret, t_ret;
int (*dupfunc) __P((DB *, const DBT *, const DBT *));
int (*func) __P((DB *, const DBT *, const DBT *));
void *buf1, *buf2, *tmpbuf;
@@ -889,6 +903,7 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
} else
pip = NULL;
+ dbenv = dbp->dbenv;
ret = isbad = 0;
bo = NULL; /* Shut up compiler. */
@@ -949,7 +964,7 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
*/
switch (TYPE(h)) {
case P_IBTREE:
- bi = GET_BINTERNAL(h, i);
+ bi = GET_BINTERNAL(dbp, h, i);
if (B_TYPE(bi->type) == B_OVERFLOW) {
bo = (BOVERFLOW *)(bi->data);
goto overflow;
@@ -971,15 +986,15 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
#if 0
if (i == 0 && bi->len != 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Lowest key on internal page %lu of nonzero length",
+ EPRINT((dbenv,
+ "Page %lu: lowest key on internal page of nonzero length",
(u_long)pgno));
}
#endif
break;
case P_LBTREE:
case P_LDUP:
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
if (B_TYPE(bk->type) == B_OVERFLOW) {
bo = (BOVERFLOW *)bk;
goto overflow;
@@ -993,7 +1008,7 @@ __bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, ovflok, hasdups, flags)
* This means our caller screwed up and sent us
* an inappropriate page.
*/
- TYPE_ERR_PRINT(dbp->dbenv,
+ TYPE_ERR_PRINT(dbenv,
"__bam_vrfy_itemorder", pgno, TYPE(h))
DB_ASSERT(0);
ret = EINVAL;
@@ -1029,9 +1044,9 @@ overflow: if (!ovflok) {
if ((ret = __db_goff(dbp,
p2, bo->tlen, bo->pgno, NULL, NULL)) != 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Error %lu in fetching overflow item %lu, page %lu",
- (u_long)ret, (u_long)i, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: error %lu in fetching overflow item %lu",
+ (u_long)pgno, (u_long)ret, (u_long)i));
}
/* In case it got realloc'ed and thus changed. */
buf2 = p2->data;
@@ -1044,8 +1059,8 @@ overflow: if (!ovflok) {
/* comparison succeeded */
if (cmp > 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Out-of-order key, page %lu item %lu",
+ EPRINT((dbenv,
+ "Page %lu: out-of-order key at entry %lu",
(u_long)pgno, (u_long)i));
/* proceed */
} else if (cmp == 0) {
@@ -1059,8 +1074,8 @@ overflow: if (!ovflok) {
F_SET(pip, VRFY_HAS_DUPS);
else if (hasdups == 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Database with no duplicates has duplicated keys on page %lu",
+ EPRINT((dbenv,
+ "Page %lu: database with no duplicates has duplicated keys",
(u_long)pgno));
}
@@ -1092,11 +1107,11 @@ overflow: if (!ovflok) {
* dups are probably (?) rare.
*/
if (((ret = __bam_safe_getdata(dbp,
- h, i - 1, ovflok, &dup1,
- &freedup1)) != 0) ||
+ h, i - 1, ovflok, &dup_1,
+ &freedup_1)) != 0) ||
((ret = __bam_safe_getdata(dbp,
- h, i + 1, ovflok, &dup2,
- &freedup2)) != 0))
+ h, i + 1, ovflok, &dup_2,
+ &freedup_2)) != 0))
goto err;
/*
@@ -1105,8 +1120,8 @@ overflow: if (!ovflok) {
* it's not safe to chase them now.
* Mark an incomplete and return.
*/
- if (dup1.data == NULL ||
- dup2.data == NULL) {
+ if (dup_1.data == NULL ||
+ dup_2.data == NULL) {
DB_ASSERT(!ovflok);
F_SET(pip, VRFY_INCOMPLETE);
goto err;
@@ -1118,26 +1133,26 @@ overflow: if (!ovflok) {
* until we do the structure check
* and see whether DUPSORT is set.
*/
- if (dupfunc(dbp, &dup1, &dup2) > 0)
+ if (dupfunc(dbp, &dup_1, &dup_2) > 0)
F_SET(pip, VRFY_DUPS_UNSORTED);
- if (freedup1)
- __os_free(dup1.data, 0);
- if (freedup2)
- __os_free(dup2.data, 0);
+ if (freedup_1)
+ __os_ufree(dbenv, dup_1.data);
+ if (freedup_2)
+ __os_ufree(dbenv, dup_2.data);
}
}
}
}
-err: if (pip != NULL &&
- ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0) && ret == 0)
+err: if (pip != NULL && ((t_ret =
+ __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0) && ret == 0)
ret = t_ret;
if (buf1 != NULL)
- __os_free(buf1, 0);
+ __os_ufree(dbenv, buf1);
if (buf2 != NULL)
- __os_free(buf2, 0);
+ __os_ufree(dbenv, buf2);
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
}
@@ -1158,11 +1173,13 @@ __bam_vrfy_structure(dbp, vdp, meta_pgno, flags)
u_int32_t flags;
{
DB *pgset;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *mip, *rip;
db_pgno_t root, p;
int t_ret, ret;
u_int32_t nrecs, level, relen, stflags;
+ dbenv = dbp->dbenv;
mip = rip = 0;
pgset = vdp->pgset;
@@ -1172,8 +1189,8 @@ __bam_vrfy_structure(dbp, vdp, meta_pgno, flags)
if ((ret = __db_vrfy_pgset_get(pgset, meta_pgno, (int *)&p)) != 0)
goto err;
if (p != 0) {
- EPRINT((dbp->dbenv,
- "Btree metadata page number %lu observed twice",
+ EPRINT((dbenv,
+ "Page %lu: btree metadata page observed twice",
(u_long)meta_pgno));
ret = DB_VERIFY_BAD;
goto err;
@@ -1184,8 +1201,9 @@ __bam_vrfy_structure(dbp, vdp, meta_pgno, flags)
root = mip->root;
if (root == 0) {
- EPRINT((dbp->dbenv,
- "Btree metadata page %lu has no root", (u_long)meta_pgno));
+ EPRINT((dbenv,
+ "Page %lu: btree metadata page has no root",
+ (u_long)meta_pgno));
ret = DB_VERIFY_BAD;
goto err;
}
@@ -1221,8 +1239,8 @@ __bam_vrfy_structure(dbp, vdp, meta_pgno, flags)
* that should never happen.
*/
if (mip->re_len > 0 && relen > 0 && mip->re_len != relen) {
- EPRINT((dbp->dbenv,
- "Recno database with meta page %lu has bad re_len %lu",
+ EPRINT((dbenv,
+ "Page %lu: recno database has bad re_len %lu",
(u_long)meta_pgno, (u_long)relen));
ret = DB_VERIFY_BAD;
goto err;
@@ -1230,25 +1248,25 @@ __bam_vrfy_structure(dbp, vdp, meta_pgno, flags)
ret = 0;
break;
case P_LDUP:
- EPRINT((dbp->dbenv,
- "Duplicate tree referenced from metadata page %lu",
+ EPRINT((dbenv,
+ "Page %lu: duplicate tree referenced from metadata page",
(u_long)meta_pgno));
ret = DB_VERIFY_BAD;
break;
default:
- EPRINT((dbp->dbenv,
- "Btree root of incorrect type %lu on meta page %lu",
- (u_long)rip->type, (u_long)meta_pgno));
+ EPRINT((dbenv,
+ "Page %lu: btree root of incorrect type %lu on metadata page",
+ (u_long)meta_pgno, (u_long)rip->type));
ret = DB_VERIFY_BAD;
break;
}
-err: if (mip != NULL &&
- ((t_ret = __db_vrfy_putpageinfo(vdp, mip)) != 0) && ret == 0)
- t_ret = ret;
- if (rip != NULL &&
- ((t_ret = __db_vrfy_putpageinfo(vdp, rip)) != 0) && ret == 0)
- t_ret = ret;
+err: if (mip != NULL && ((t_ret =
+ __db_vrfy_putpageinfo(dbenv, vdp, mip)) != 0) && ret == 0)
+ ret = t_ret;
+ if (rip != NULL && ((t_ret =
+ __db_vrfy_putpageinfo(dbenv, vdp, rip)) != 0) && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -1263,8 +1281,7 @@ err: if (mip != NULL &&
* PUBLIC: void *, u_int32_t, u_int32_t *, u_int32_t *, u_int32_t *));
*/
int
-__bam_vrfy_subtree(dbp,
- vdp, pgno, l, r, flags, levelp, nrecsp, relenp)
+__bam_vrfy_subtree(dbp, vdp, pgno, l, r, flags, levelp, nrecsp, relenp)
DB *dbp;
VRFY_DBINFO *vdp;
db_pgno_t pgno;
@@ -1274,19 +1291,27 @@ __bam_vrfy_subtree(dbp,
BINTERNAL *li, *ri, *lp, *rp;
DB *pgset;
DBC *cc;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
PAGE *h;
VRFY_CHILDINFO *child;
VRFY_PAGEINFO *pip;
- db_recno_t nrecs, child_nrecs;
db_indx_t i;
- int ret, t_ret, isbad, toplevel, p;
+ db_pgno_t next_pgno, prev_pgno;
+ db_recno_t child_nrecs, nrecs;
+ u_int32_t child_level, child_relen, j, level, relen, stflags;
+ u_int8_t leaf_type;
int (*func) __P((DB *, const DBT *, const DBT *));
- u_int32_t level, child_level, stflags, child_relen, relen;
+ int isbad, p, ret, t_ret, toplevel;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
ret = isbad = 0;
nrecs = 0;
h = NULL;
relen = 0;
+ leaf_type = P_INVALID;
+ next_pgno = prev_pgno = PGNO_INVALID;
rp = (BINTERNAL *)r;
lp = (BINTERNAL *)l;
@@ -1300,10 +1325,33 @@ __bam_vrfy_subtree(dbp,
cc = NULL;
level = pip->bt_level;
- toplevel = LF_ISSET(ST_TOPLEVEL);
+ toplevel = LF_ISSET(ST_TOPLEVEL) ? 1 : 0;
LF_CLR(ST_TOPLEVEL);
/*
+ * If this is the root, initialize the vdp's prev- and next-pgno
+ * accounting.
+ *
+ * For each leaf page we hit, we'll want to make sure that
+ * vdp->prev_pgno is the same as pip->prev_pgno and vdp->next_pgno is
+ * our page number. Then, we'll set vdp->next_pgno to pip->next_pgno
+ * and vdp->prev_pgno to our page number, and the next leaf page in
+ * line should be able to do the same verification.
+ */
+ if (toplevel) {
+ /*
+ * Cache the values stored in the vdp so that if we're an
+ * auxiliary tree such as an off-page duplicate set, our
+ * caller's leaf page chain doesn't get lost.
+ */
+ prev_pgno = vdp->prev_pgno;
+ next_pgno = vdp->next_pgno;
+ leaf_type = vdp->leaf_type;
+ vdp->next_pgno = vdp->prev_pgno = PGNO_INVALID;
+ vdp->leaf_type = P_INVALID;
+ }
+
+ /*
* We are recursively descending a btree, starting from the root
* and working our way out to the leaves.
*
@@ -1333,8 +1381,63 @@ __bam_vrfy_subtree(dbp,
case P_LDUP:
case P_LBTREE:
/*
- * Cases 1, 2 and 3 (overflow pages are common to all three);
- * traverse child list, looking for overflows.
+ * Cases 1, 2 and 3.
+ *
+ * We're some sort of leaf page; verify
+ * that our linked list of leaves is consistent.
+ */
+ if (vdp->leaf_type == P_INVALID) {
+ /*
+ * First leaf page. Set the type that all its
+ * successors should be, and verify that our prev_pgno
+ * is PGNO_INVALID.
+ */
+ vdp->leaf_type = pip->type;
+ if (pip->prev_pgno != PGNO_INVALID)
+ goto bad_prev;
+ } else {
+ /*
+ * Successor leaf page. Check our type, the previous
+ * page's next_pgno, and our prev_pgno.
+ */
+ if (pip->type != vdp->leaf_type) {
+ EPRINT((dbenv,
+ "Page %lu: unexpected page type %lu found in leaf chain (expected %lu)",
+ (u_long)pip->pgno, (u_long)pip->type,
+ (u_long)vdp->leaf_type));
+ isbad = 1;
+ }
+
+ /*
+ * Don't do the prev/next_pgno checks if we've lost
+ * leaf pages due to another corruption.
+ */
+ if (!F_ISSET(vdp, VRFY_LEAFCHAIN_BROKEN)) {
+ if (pip->pgno != vdp->next_pgno) {
+ EPRINT((dbenv,
+ "Page %lu: incorrect next_pgno %lu found in leaf chain (should be %lu)",
+ (u_long)vdp->prev_pgno,
+ (u_long)vdp->next_pgno,
+ (u_long)pip->pgno));
+ isbad = 1;
+ }
+ if (pip->prev_pgno != vdp->prev_pgno) {
+bad_prev: EPRINT((dbenv,
+ "Page %lu: incorrect prev_pgno %lu found in leaf chain (should be %lu)",
+ (u_long)pip->pgno,
+ (u_long)pip->prev_pgno,
+ (u_long)vdp->prev_pgno));
+ isbad = 1;
+ }
+ }
+ }
+ vdp->prev_pgno = pip->pgno;
+ vdp->next_pgno = pip->next_pgno;
+ F_CLR(vdp, VRFY_LEAFCHAIN_BROKEN);
+
+ /*
+ * Overflow pages are common to all three leaf types;
+ * traverse the child list, looking for overflows.
*/
if ((ret = __db_vrfy_childcursor(vdp, &cc)) != 0)
goto err;
@@ -1359,8 +1462,8 @@ __bam_vrfy_subtree(dbp,
if (!LF_ISSET(ST_IS_RECNO) &&
!(LF_ISSET(ST_DUPOK) && !LF_ISSET(ST_DUPSORT))) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Recno leaf page %lu in non-recno tree",
+ EPRINT((dbenv,
+ "Page %lu: recno leaf page non-recno tree",
(u_long)pgno));
goto done;
}
@@ -1371,8 +1474,8 @@ __bam_vrfy_subtree(dbp,
* subtree.
*/
isbad = 1;
- EPRINT((dbp->dbenv,
- "Non-recno leaf page %lu in recno tree",
+ EPRINT((dbenv,
+ "Page %lu: non-recno leaf page in recno tree",
(u_long)pgno));
goto done;
}
@@ -1388,8 +1491,8 @@ __bam_vrfy_subtree(dbp,
/* If dups aren't allowed in this btree, trouble. */
if (!LF_ISSET(ST_DUPOK)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Duplicates on page %lu in non-dup btree",
+ EPRINT((dbenv,
+ "Page %lu: duplicates in non-dup btree",
(u_long)pgno));
} else {
/*
@@ -1414,8 +1517,8 @@ __bam_vrfy_subtree(dbp,
}
if ((ret = __bam_vrfy_subtree(
dbp, vdp, child->pgno, NULL,
- NULL, stflags, NULL, NULL,
- NULL)) != 0) {
+ NULL, stflags | ST_TOPLEVEL,
+ NULL, NULL, NULL)) != 0) {
if (ret !=
DB_VERIFY_BAD)
goto err;
@@ -1435,15 +1538,14 @@ __bam_vrfy_subtree(dbp,
*/
if (F_ISSET(pip, VRFY_DUPS_UNSORTED) &&
LF_ISSET(ST_DUPSORT)) {
- EPRINT((dbp->dbenv,
- "Unsorted duplicate set at page %lu in sorted-dup database",
+ EPRINT((dbenv,
+ "Page %lu: unsorted duplicate set in sorted-dup database",
(u_long)pgno));
isbad = 1;
}
}
}
goto leaf;
- break;
case P_IBTREE:
case P_IRECNO:
/* We handle these below. */
@@ -1455,10 +1557,27 @@ __bam_vrfy_subtree(dbp,
* Note that the code at the "done" label assumes that the
* current page is a btree/recno one of some sort; this
* is not the case here, so we goto err.
+ *
+ * If the page is entirely zeroed, its pip->type will be a lie
+ * (we assumed it was a hash page, as they're allowed to be
+ * zeroed); handle this case specially.
*/
- EPRINT((dbp->dbenv,
- "Page %lu is of inappropriate type %lu",
- (u_long)pgno, (u_long)pip->type));
+ if (F_ISSET(pip, VRFY_IS_ALLZEROES))
+ ZEROPG_ERR_PRINT(dbenv, pgno, "btree or recno page");
+ else
+ EPRINT((dbenv,
+ "Page %lu: btree or recno page is of inappropriate type %lu",
+ (u_long)pgno, (u_long)pip->type));
+
+ /*
+ * We probably lost a leaf page (or more if this was an
+ * internal page) from our prev/next_pgno chain. Flag
+ * that this is expected; we don't want or need to
+ * spew error messages about erroneous prev/next_pgnos,
+ * since that's probably not the real problem.
+ */
+ F_SET(vdp, VRFY_LEAFCHAIN_BROKEN);
+
ret = DB_VERIFY_BAD;
goto err;
}
@@ -1474,7 +1593,7 @@ __bam_vrfy_subtree(dbp,
ret = __db_vrfy_ccnext(cc, &child))
if (child->type == V_RECNO) {
if (pip->type != P_IRECNO) {
- TYPE_ERR_PRINT(dbp->dbenv, "__bam_vrfy_subtree",
+ TYPE_ERR_PRINT(dbenv, "__bam_vrfy_subtree",
pgno, pip->type);
DB_ASSERT(0);
ret = EINVAL;
@@ -1499,30 +1618,64 @@ __bam_vrfy_subtree(dbp,
else if (child_relen > 0 &&
relen != child_relen) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Recno page %lu returned bad re_len",
- (u_long)child->pgno));
+ EPRINT((dbenv,
+ "Page %lu: recno page returned bad re_len %lu",
+ (u_long)child->pgno,
+ (u_long)child_relen));
}
if (relenp)
*relenp = relen;
}
if (LF_ISSET(ST_RECNUM))
nrecs += child_nrecs;
- if (level != child_level + 1) {
+ if (isbad == 0 && level != child_level + 1) {
isbad = 1;
- EPRINT((dbp->dbenv, "%s%lu%s%lu%s%lu",
- "Recno level incorrect on page ",
- (u_long)child->pgno, ": got ",
- (u_long)child_level, ", expected ",
+ EPRINT((dbenv,
+ "Page %lu: recno level incorrect: got %lu, expected %lu",
+ (u_long)child->pgno, (u_long)child_level,
(u_long)(level - 1)));
}
- } else if (child->type == V_OVERFLOW &&
- (ret = __db_vrfy_ovfl_structure(dbp, vdp,
- child->pgno, child->tlen, flags)) != 0) {
- if (ret == DB_VERIFY_BAD)
+ } else if (child->type == V_OVERFLOW) {
+ /*
+ * It is possible for one internal page to reference
+ * a single overflow page twice, if all the items
+ * in the subtree referenced by slot 0 are deleted,
+ * then a similar number of items are put back
+ * before the key that formerly had been in slot 1.
+ *
+ * (Btree doesn't look at the key in slot 0, so the
+ * fact that the key formerly at slot 1 is the "wrong"
+ * parent of the stuff in the slot 0 subtree isn't
+ * really incorrect.)
+ *
+ * __db_vrfy_ovfl_structure is designed to be
+ * efficiently called multiple times for multiple
+ * references; call it here as many times as is
+ * appropriate.
+ */
+
+ /* Otherwise, __db_vrfy_childput would be broken. */
+ DB_ASSERT(child->refcnt >= 1);
+
+ /*
+ * An overflow referenced more than twice here
+ * shouldn't happen.
+ */
+ if (child->refcnt > 2) {
+ EPRINT((dbenv,
+ "Page %lu: overflow page %lu referenced more than twice from internal page",
+ (u_long)pgno, (u_long)child->pgno));
isbad = 1;
- else
- goto done;
+ } else
+ for (j = 0; j < child->refcnt; j++)
+ if ((ret = __db_vrfy_ovfl_structure(dbp,
+ vdp, child->pgno, child->tlen,
+ flags)) != 0) {
+ if (ret == DB_VERIFY_BAD)
+ isbad = 1;
+ else
+ goto done;
+ }
}
if ((ret = __db_vrfy_ccclose(cc)) != 0)
@@ -1543,12 +1696,12 @@ __bam_vrfy_subtree(dbp,
* itself, which must sort lower than all entries on its child;
* ri will be the key to its right, which must sort greater.
*/
- if (h == NULL && (ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL && (ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
for (i = 0; i < pip->entries; i += O_INDX) {
- li = GET_BINTERNAL(h, i);
+ li = GET_BINTERNAL(dbp, h, i);
ri = (i + O_INDX < pip->entries) ?
- GET_BINTERNAL(h, i + O_INDX) : NULL;
+ GET_BINTERNAL(dbp, h, i + O_INDX) : NULL;
/*
* The leftmost key is forcibly sorted less than all entries,
@@ -1577,19 +1730,19 @@ __bam_vrfy_subtree(dbp,
*/
if (li->nrecs != child_nrecs) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Item %lu page %lu has incorrect record count of %lu, should be %lu",
- (u_long)i, (u_long)pgno, (u_long)li->nrecs,
+ EPRINT((dbenv,
+ "Page %lu: item %lu has incorrect record count of %lu, should be %lu",
+ (u_long)pgno, (u_long)i, (u_long)li->nrecs,
(u_long)child_nrecs));
}
}
if (level != child_level + 1) {
isbad = 1;
- EPRINT((dbp->dbenv, "%s%lu%s%lu%s%lu",
- "Btree level incorrect on page ", (u_long)li->pgno,
- ": got ", (u_long)child_level, ", expected ",
- (u_long)(level - 1)));
+ EPRINT((dbenv,
+ "Page %lu: Btree level incorrect: got %lu, expected %lu",
+ (u_long)li->pgno,
+ (u_long)child_level, (u_long)(level - 1)));
}
}
@@ -1616,7 +1769,7 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
* isbad == 0, though, it's now safe to do so, as we've
* traversed any child overflow pages. Do it.
*/
- if (h == NULL && (ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL && (ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
if ((ret = __bam_vrfy_itemorder(dbp,
vdp, h, pgno, 0, 1, 0, flags)) != 0)
@@ -1625,12 +1778,35 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
}
/*
+ * It's possible to get to this point with a page that has no
+ * items, but without having detected any sort of failure yet.
+ * Having zero items is legal if it's a leaf--it may be the
+ * root page in an empty tree, or the tree may have been
+ * modified with the DB_REVSPLITOFF flag set (there's no way
+ * to tell from what's on disk). For an internal page,
+ * though, having no items is a problem (all internal pages
+ * must have children).
+ */
+ if (isbad == 0 && ret == 0) {
+ if (h == NULL && (ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ goto err;
+
+ if (NUM_ENT(h) == 0 && ISINTERNAL(h)) {
+ EPRINT((dbenv,
+ "Page %lu: internal page is empty and should not be",
+ (u_long)pgno));
+ isbad = 1;
+ goto err;
+ }
+ }
+
+ /*
* Our parent has sent us BINTERNAL pointers to parent records
* so that we can verify our place with respect to them. If it's
* appropriate--we have a default sort function--verify this.
*/
if (isbad == 0 && ret == 0 && !LF_ISSET(DB_NOORDERCHK) && lp != NULL) {
- if (h == NULL && (ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if (h == NULL && (ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
/*
@@ -1661,8 +1837,8 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
*/
if (LF_ISSET(ST_RECNUM) && nrecs != pip->rec_cnt && toplevel) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Bad record count on page %lu: got %lu, expected %lu",
+ EPRINT((dbenv,
+ "Page %lu: bad record count: has %lu records, claims %lu",
(u_long)pgno, (u_long)nrecs, (u_long)pip->rec_cnt));
}
@@ -1676,13 +1852,31 @@ done: if (F_ISSET(pip, VRFY_INCOMPLETE) && isbad == 0 && ret == 0) {
goto err;
if (p != 0) {
isbad = 1;
- EPRINT((dbp->dbenv, "Page %lu linked twice", (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: linked twice", (u_long)pgno));
} else if ((ret = __db_vrfy_pgset_inc(pgset, pgno)) != 0)
goto err;
-err: if (h != NULL && (t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret == 0)
+ if (toplevel)
+ /*
+ * The last page's next_pgno in the leaf chain should have been
+ * PGNO_INVALID.
+ */
+ if (vdp->next_pgno != PGNO_INVALID) {
+ EPRINT((dbenv, "Page %lu: unterminated leaf chain",
+ (u_long)vdp->prev_pgno));
+ isbad = 1;
+ }
+
+err: if (toplevel) {
+ /* Restore our caller's settings. */
+ vdp->next_pgno = next_pgno;
+ vdp->prev_pgno = prev_pgno;
+ vdp->leaf_type = leaf_type;
+ }
+
+ if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
if (cc != NULL && ((t_ret = __db_vrfy_ccclose(cc)) != 0) && ret == 0)
ret = t_ret;
@@ -1712,14 +1906,24 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
u_int32_t flags;
{
BOVERFLOW *bo;
+ DB_ENV *dbenv;
DBT dbt;
db_indx_t last;
int ret, cmp;
+ dbenv = dbp->dbenv;
memset(&dbt, 0, sizeof(DBT));
F_SET(&dbt, DB_DBT_MALLOC);
ret = 0;
+ /*
+ * Empty pages are sorted correctly by definition. We check
+ * to see whether they ought to be empty elsewhere; leaf
+ * pages legally may be.
+ */
+ if (NUM_ENT(h) == 0)
+ return (0);
+
switch (TYPE(h)) {
case P_IBTREE:
case P_LDUP:
@@ -1729,8 +1933,7 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
last = NUM_ENT(h) - P_INDX;
break;
default:
- TYPE_ERR_PRINT(dbp->dbenv,
- "__bam_vrfy_treeorder", pgno, TYPE(h));
+ TYPE_ERR_PRINT(dbenv, "__bam_vrfy_treeorder", pgno, TYPE(h));
DB_ASSERT(0);
return (EINVAL);
}
@@ -1759,26 +1962,27 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
return (ret);
} else {
DB_ASSERT(0);
- EPRINT((dbp->dbenv,
- "Unknown type for internal record"));
+ EPRINT((dbenv,
+ "Page %lu: unknown type for internal record",
+ (u_long)PGNO(h)));
return (EINVAL);
}
/* On error, fall through, free if neeeded, and return. */
if ((ret = __bam_cmp(dbp, &dbt, h, 0, func, &cmp)) == 0) {
if (cmp > 0) {
- EPRINT((dbp->dbenv,
- "First item on page %lu sorted greater than parent entry",
+ EPRINT((dbenv,
+ "Page %lu: first item on page sorted greater than parent entry",
(u_long)PGNO(h)));
ret = DB_VERIFY_BAD;
}
} else
- EPRINT((dbp->dbenv,
- "First item on page %lu had comparison error",
+ EPRINT((dbenv,
+ "Page %lu: first item on page had comparison error",
(u_long)PGNO(h)));
if (dbt.data != lp->data)
- __os_free(dbt.data, 0);
+ __os_ufree(dbenv, dbt.data);
if (ret != 0)
return (ret);
}
@@ -1794,26 +1998,27 @@ __bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, flags)
return (ret);
} else {
DB_ASSERT(0);
- EPRINT((dbp->dbenv,
- "Unknown type for internal record"));
+ EPRINT((dbenv,
+ "Page %lu: unknown type for internal record",
+ (u_long)PGNO(h)));
return (EINVAL);
}
/* On error, fall through, free if neeeded, and return. */
if ((ret = __bam_cmp(dbp, &dbt, h, last, func, &cmp)) == 0) {
if (cmp < 0) {
- EPRINT((dbp->dbenv,
- "Last item on page %lu sorted greater than parent entry",
+ EPRINT((dbenv,
+ "Page %lu: last item on page sorted greater than parent entry",
(u_long)PGNO(h)));
ret = DB_VERIFY_BAD;
}
} else
- EPRINT((dbp->dbenv,
- "Last item on page %lu had comparison error",
+ EPRINT((dbenv,
+ "Page %lu: last item on page had comparison error",
(u_long)PGNO(h)));
if (dbt.data != rp->data)
- __os_free(dbt.data, 0);
+ __os_ufree(dbenv, dbt.data);
}
return (ret);
@@ -1841,37 +2046,41 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
u_int32_t flags;
{
DBT dbt, unkdbt;
+ DB_ENV *dbenv;
BKEYDATA *bk;
BOVERFLOW *bo;
- db_indx_t i, beg, end;
+ db_indx_t i, beg, end, *inp;
u_int32_t himark;
u_int8_t *pgmap;
void *ovflbuf;
int t_ret, ret, err_ret;
+ dbenv = dbp->dbenv;
+
/* Shut up lint. */
COMPQUIET(end, 0);
ovflbuf = pgmap = NULL;
err_ret = ret = 0;
+ inp = P_INP(dbp, h);
memset(&dbt, 0, sizeof(DBT));
dbt.flags = DB_DBT_REALLOC;
memset(&unkdbt, 0, sizeof(DBT));
- unkdbt.size = strlen("UNKNOWN") + 1;
+ unkdbt.size = (u_int32_t)(strlen("UNKNOWN") + 1);
unkdbt.data = "UNKNOWN";
/*
* Allocate a buffer for overflow items. Start at one page;
* __db_safe_goff will realloc as needed.
*/
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &ovflbuf)) != 0)
+ if ((ret = __os_malloc(dbenv, dbp->pgsize, &ovflbuf)) != 0)
return (ret);
if (LF_ISSET(DB_AGGRESSIVE)) {
if ((ret =
- __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &pgmap)) != 0)
+ __os_malloc(dbenv, dbp->pgsize, &pgmap)) != 0)
goto err;
memset(pgmap, 0, dbp->pgsize);
}
@@ -1914,7 +2123,7 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
* We only want to print deleted items if
* DB_AGGRESSIVE is set.
*/
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
if (!LF_ISSET(DB_AGGRESSIVE) && B_DISSET(bk->type))
continue;
@@ -1927,10 +2136,10 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
if (key != NULL &&
(i != 0 || !LF_ISSET(SA_SKIPFIRSTKEY)))
if ((ret = __db_prdbt(key,
- 0, " ", handle, callback, 0, NULL)) != 0)
+ 0, " ", handle, callback, 0, vdp)) != 0)
err_ret = ret;
- beg = h->inp[i];
+ beg = inp[i];
switch (B_TYPE(bk->type)) {
case B_DUPLICATE:
end = beg + BOVERFLOW_SIZE - 1;
@@ -1958,23 +2167,24 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
(i % P_INDX == 0)) {
/* Not much to do on failure. */
if ((ret = __db_prdbt(&unkdbt, 0, " ",
- handle, callback, 0, NULL)) != 0)
+ handle, callback, 0, vdp)) != 0)
err_ret = ret;
break;
}
if ((ret = __db_salvage_duptree(dbp,
vdp, bo->pgno, &dbt, handle, callback,
- flags | SA_SKIPFIRSTKEY)) != 0)
+ flags | SA_SKIPFIRSTKEY)) != 0)
err_ret = ret;
break;
case B_KEYDATA:
- end = ALIGN(beg + bk->len, sizeof(u_int32_t)) - 1;
+ end =
+ ALIGN(beg + bk->len, sizeof(u_int32_t)) - 1;
dbt.data = bk->data;
dbt.size = bk->len;
if ((ret = __db_prdbt(&dbt,
- 0, " ", handle, callback, 0, NULL)) != 0)
+ 0, " ", handle, callback, 0, vdp)) != 0)
err_ret = ret;
break;
case B_OVERFLOW:
@@ -1985,11 +2195,11 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
err_ret = ret;
/* We care about err_ret more. */
(void)__db_prdbt(&unkdbt, 0, " ",
- handle, callback, 0, NULL);
+ handle, callback, 0, vdp);
break;
}
if ((ret = __db_prdbt(&dbt,
- 0, " ", handle, callback, 0, NULL)) != 0)
+ 0, " ", handle, callback, 0, vdp)) != 0)
err_ret = ret;
break;
default:
@@ -2020,12 +2230,12 @@ __bam_salvage(dbp, vdp, pgno, pgtype, h, handle, callback, key, flags)
* a datum; fix this imbalance by printing an "UNKNOWN".
*/
if (pgtype == P_LBTREE && (i % P_INDX == 1) && ((ret =
- __db_prdbt(&unkdbt, 0, " ", handle, callback, 0, NULL)) != 0))
+ __db_prdbt(&unkdbt, 0, " ", handle, callback, 0, vdp)) != 0))
err_ret = ret;
err: if (pgmap != NULL)
- __os_free(pgmap, 0);
- __os_free(ovflbuf, 0);
+ __os_free(dbenv, pgmap);
+ __os_free(dbenv, ovflbuf);
/* Mark this page as done. */
if ((t_ret = __db_salvage_markdone(vdp, pgno)) != 0)
@@ -2061,12 +2271,13 @@ __bam_salvage_walkdupint(dbp, vdp, h, key, handle, callback, flags)
for (i = 0; i < NUM_ENT(h); i++) {
switch (TYPE(h)) {
case P_IBTREE:
- bi = GET_BINTERNAL(h, i);
+ bi = GET_BINTERNAL(dbp, h, i);
if ((t_ret = __db_salvage_duptree(dbp,
vdp, bi->pgno, key, handle, callback, flags)) != 0)
ret = t_ret;
+ break;
case P_IRECNO:
- ri = GET_RINTERNAL(h, i);
+ ri = GET_RINTERNAL(dbp, h, i);
if ((t_ret = __db_salvage_duptree(dbp,
vdp, ri->pgno, key, handle, callback, flags)) != 0)
ret = t_ret;
@@ -2110,11 +2321,13 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
DB *pgset;
{
BINTERNAL *bi;
+ DB_MPOOLFILE *mpf;
PAGE *h;
RINTERNAL *ri;
db_pgno_t current, p;
int err_ret, ret;
+ mpf = dbp->mpf;
h = NULL;
ret = err_ret = 0;
DB_ASSERT(pgset != NULL);
@@ -2123,7 +2336,7 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
err_ret = DB_VERIFY_BAD;
goto err;
}
- if ((ret = memp_fget(dbp->mpf, &current, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &current, 0, &h)) != 0) {
err_ret = ret;
goto err;
}
@@ -2137,10 +2350,10 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
goto err;
}
if (TYPE(h) == P_IBTREE) {
- bi = GET_BINTERNAL(h, 0);
+ bi = GET_BINTERNAL(dbp, h, 0);
current = bi->pgno;
} else { /* P_IRECNO */
- ri = GET_RINTERNAL(h, 0);
+ ri = GET_RINTERNAL(dbp, h, 0);
current = ri->pgno;
}
break;
@@ -2152,7 +2365,7 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
goto err;
}
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
err_ret = ret;
h = NULL;
}
@@ -2164,7 +2377,7 @@ __bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)
traverse:
while (IS_VALID_PGNO(current) && current != PGNO_INVALID) {
if (h == NULL &&
- (ret = memp_fget(dbp->mpf, &current, 0, &h) != 0)) {
+ (ret = __memp_fget(mpf, &current, 0, &h)) != 0) {
err_ret = ret;
break;
}
@@ -2184,13 +2397,13 @@ traverse:
goto err;
current = NEXT_PGNO(h);
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
err_ret = ret;
h = NULL;
}
err: if (h != NULL)
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
return (ret == 0 ? err_ret : ret);
}
@@ -2218,7 +2431,7 @@ __bam_safe_getdata(dbp, h, i, ovflok, dbt, freedbtp)
memset(dbt, 0, sizeof(DBT));
*freedbtp = 0;
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
if (B_TYPE(bk->type) == B_OVERFLOW) {
if (!ovflok)
return (0);
diff --git a/db/btree/btree.src b/db/btree/btree.src
index a1eba7d7f..85faff67f 100644
--- a/db/btree/btree.src
+++ b/db/btree/btree.src
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: btree.src,v 10.26 2000/12/12 17:40:23 bostic Exp $
+ * $Id: btree.src,v 10.39 2003/11/14 05:32:34 ubell Exp $
*/
-PREFIX bam
+PREFIX __bam
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
@@ -15,93 +16,22 @@ INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "btree.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/btree.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
- * BTREE-pg_alloc: used to record allocating a new page.
- *
- * meta_lsn: the meta-data page's original lsn.
- * page_lsn: the allocated page's original lsn.
- * pgno: the page allocated.
- * next: the next page on the free list.
- */
-BEGIN pg_alloc 51
-ARG fileid int32_t ld
-POINTER meta_lsn DB_LSN * lu
-POINTER page_lsn DB_LSN * lu
-ARG pgno db_pgno_t lu
-ARG ptype u_int32_t lu
-ARG next db_pgno_t lu
-END
-
-DEPRECATED pg_alloc1 60
-ARG fileid int32_t ld
-POINTER meta_lsn DB_LSN * lu
-POINTER alloc_lsn DB_LSN * lu
-POINTER page_lsn DB_LSN * lu
-ARG pgno db_pgno_t lu
-ARG ptype u_int32_t lu
-ARG next db_pgno_t lu
-END
-
-/*
- * BTREE-pg_free: used to record freeing a page.
- *
- * pgno: the page being freed.
- * meta_lsn: the meta-data page's original lsn.
- * header: the header from the free'd page.
- * next: the previous next pointer on the metadata page.
- */
-BEGIN pg_free 52
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-POINTER meta_lsn DB_LSN * lu
-DBT header DBT s
-ARG next db_pgno_t lu
-END
-
-DEPRECATED pg_free1 61
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-POINTER meta_lsn DB_LSN * lu
-POINTER alloc_lsn DB_LSN * lu
-DBT header DBT s
-ARG next db_pgno_t lu
-END
-
-/*
- * BTREE-split: used to log a page split.
- *
- * left: the page number for the low-order contents.
- * llsn: the left page's original LSN.
- * right: the page number for the high-order contents.
- * rlsn: the right page's original LSN.
- * indx: the number of entries that went to the left page.
- * npgno: the next page number
- * nlsn: the next page's original LSN (or 0 if no next page).
- * pg: the split page's contents before the split.
+ * NOTE: pg_alloc and pg_free have been moved to db.src, where they belong.
*/
-DEPRECATED split1 53
-ARG fileid int32_t ld
-ARG left db_pgno_t lu
-POINTER llsn DB_LSN * lu
-ARG right db_pgno_t lu
-POINTER rlsn DB_LSN * lu
-ARG indx u_int32_t lu
-ARG npgno db_pgno_t lu
-POINTER nlsn DB_LSN * lu
-DBT pg DBT s
-END
/*
* BTREE-split: used to log a page split.
@@ -112,14 +42,13 @@ END
* rlsn: the right page's original LSN.
* indx: the number of entries that went to the left page.
* npgno: the next page number
- * npgno: the next page number
* nlsn: the next page's original LSN (or 0 if no next page).
* root_pgno: the root page number
* pg: the split page's contents before the split.
* opflags: SPL_NRECS: if splitting a tree that maintains a record count.
*/
BEGIN split 62
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG left db_pgno_t lu
POINTER llsn DB_LSN * lu
ARG right db_pgno_t lu
@@ -128,7 +57,7 @@ ARG indx u_int32_t lu
ARG npgno db_pgno_t lu
POINTER nlsn DB_LSN * lu
ARG root_pgno db_pgno_t lu
-DBT pg DBT s
+PGDBT pg DBT s
ARG opflags u_int32_t lu
END
@@ -137,33 +66,15 @@ END
*
* pgno: the page number of the page copied over the root.
* pgdbt: the page being copied on the root page.
- * nrec: the tree's record count.
- * rootent: last entry on the root page.
- * rootlsn: the root page's original lsn.
- */
-DEPRECATED rsplit1 54
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-DBT pgdbt DBT s
-ARG nrec db_pgno_t lu
-DBT rootent DBT s
-POINTER rootlsn DB_LSN * lu
-END
-
-/*
- * BTREE-rsplit: used to log a reverse-split
- *
- * pgno: the page number of the page copied over the root.
- * pgdbt: the page being copied on the root page.
* root_pgno: the root page number.
* nrec: the tree's record count.
* rootent: last entry on the root page.
* rootlsn: the root page's original lsn.
*/
BEGIN rsplit 63
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
-DBT pgdbt DBT s
+PGDBT pgdbt DBT s
ARG root_pgno db_pgno_t lu
ARG nrec db_pgno_t lu
DBT rootent DBT s
@@ -180,7 +91,7 @@ END
* is_insert: 0 if a delete, 1 if an insert.
*/
BEGIN adj 55
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG indx u_int32_t lu
@@ -198,7 +109,7 @@ END
* opflags: CAD_UPDATEROOT: if root page count was adjusted.
*/
BEGIN cadjust 56
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG indx u_int32_t lu
@@ -214,7 +125,7 @@ END
* indx: the index to be deleted.
*/
BEGIN cdel 57
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG indx u_int32_t lu
@@ -225,12 +136,15 @@ END
*
* pgno: the page modified.
* lsn: the page's original lsn.
+ * indx: the index to be replaced.
+ * isdeleted: set if the record was previously deleted.
* orig: the original data.
- * new: the replacement data.
- * duplicate: the prefix of the replacement that matches the original.
+ * repl: the replacement data.
+ * prefix: the prefix of the replacement that matches the original.
+ * suffix: the suffix of the replacement that matches the original.
*/
BEGIN repl 58
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG indx u_int32_t lu
@@ -245,7 +159,7 @@ END
* BTREE-root: log the assignment of a root btree page.
*/
BEGIN root 59
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG meta_pgno db_pgno_t lu
ARG root_pgno db_pgno_t lu
POINTER meta_lsn DB_LSN * lu
@@ -260,7 +174,7 @@ END
*/
BEGIN curadj 64
/* Fileid of db affected. */
-ARG fileid int32_t ld
+DB fileid int32_t ld
/* Which adjustment. */
ARG mode db_ca_mode ld
/* Page entry is from. */
@@ -284,7 +198,7 @@ END
*/
BEGIN rcuradj 65
/* Fileid of db affected. */
-ARG fileid int32_t ld
+DB fileid int32_t ld
/* Which adjustment. */
ARG mode ca_recno_arg ld
/* Root page number. */
diff --git a/db/btree/btree_auto.c b/db/btree/btree_auto.c
index fdb27b7d2..16ebbcad9 100644
--- a/db/btree/btree_auto.c
+++ b/db/btree/btree_auto.c
@@ -5,609 +5,30 @@
#include <sys/types.h>
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "btree.h"
-#include "txn.h"
-
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/btree.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+
+/*
+ * PUBLIC: int __bam_split_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, u_int32_t,
+ * PUBLIC: db_pgno_t, DB_LSN *, db_pgno_t, const DBT *, u_int32_t));
+ */
int
-__bam_pg_alloc_log(dbenv, txnid, ret_lsnp, flags,
- fileid, meta_lsn, page_lsn, pgno, ptype, next)
- DB_ENV *dbenv;
+__bam_split_log(dbp, txnid, ret_lsnp, flags, left, llsn, right, rlsn, indx,
+ npgno, nlsn, root_pgno, pg, opflags)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
- DB_LSN * meta_lsn;
- DB_LSN * page_lsn;
- db_pgno_t pgno;
- u_int32_t ptype;
- db_pgno_t next;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_bam_pg_alloc;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(*meta_lsn)
- + sizeof(*page_lsn)
- + sizeof(pgno)
- + sizeof(ptype)
- + sizeof(next);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
-
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (meta_lsn != NULL)
- memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
- memset(bp, 0, sizeof(*meta_lsn));
- bp += sizeof(*meta_lsn);
- if (page_lsn != NULL)
- memcpy(bp, page_lsn, sizeof(*page_lsn));
- else
- memset(bp, 0, sizeof(*page_lsn));
- bp += sizeof(*page_lsn);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &ptype, sizeof(ptype));
- bp += sizeof(ptype);
- memcpy(bp, &next, sizeof(next));
- bp += sizeof(next);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__bam_pg_alloc_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_pg_alloc_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __bam_pg_alloc_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_pg_alloc: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmeta_lsn: [%lu][%lu]\n",
- (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\tpage_lsn: [%lu][%lu]\n",
- (u_long)argp->page_lsn.file, (u_long)argp->page_lsn.offset);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tptype: %lu\n", (u_long)argp->ptype);
- printf("\tnext: %lu\n", (u_long)argp->next);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_pg_alloc_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_pg_alloc_args **argpp;
-{
- __bam_pg_alloc_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_pg_alloc_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
- bp += sizeof(argp->meta_lsn);
- memcpy(&argp->page_lsn, bp, sizeof(argp->page_lsn));
- bp += sizeof(argp->page_lsn);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->ptype, bp, sizeof(argp->ptype));
- bp += sizeof(argp->ptype);
- memcpy(&argp->next, bp, sizeof(argp->next));
- bp += sizeof(argp->next);
- *argpp = argp;
- return (0);
-}
-
-int
-__bam_pg_alloc1_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_pg_alloc1_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __bam_pg_alloc1_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_pg_alloc1: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmeta_lsn: [%lu][%lu]\n",
- (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\talloc_lsn: [%lu][%lu]\n",
- (u_long)argp->alloc_lsn.file, (u_long)argp->alloc_lsn.offset);
- printf("\tpage_lsn: [%lu][%lu]\n",
- (u_long)argp->page_lsn.file, (u_long)argp->page_lsn.offset);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tptype: %lu\n", (u_long)argp->ptype);
- printf("\tnext: %lu\n", (u_long)argp->next);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_pg_alloc1_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_pg_alloc1_args **argpp;
-{
- __bam_pg_alloc1_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_pg_alloc1_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
- bp += sizeof(argp->meta_lsn);
- memcpy(&argp->alloc_lsn, bp, sizeof(argp->alloc_lsn));
- bp += sizeof(argp->alloc_lsn);
- memcpy(&argp->page_lsn, bp, sizeof(argp->page_lsn));
- bp += sizeof(argp->page_lsn);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->ptype, bp, sizeof(argp->ptype));
- bp += sizeof(argp->ptype);
- memcpy(&argp->next, bp, sizeof(argp->next));
- bp += sizeof(argp->next);
- *argpp = argp;
- return (0);
-}
-
-int
-__bam_pg_free_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, meta_lsn, header, next)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- db_pgno_t pgno;
- DB_LSN * meta_lsn;
- const DBT *header;
- db_pgno_t next;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_bam_pg_free;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(*meta_lsn)
- + sizeof(u_int32_t) + (header == NULL ? 0 : header->size)
- + sizeof(next);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
-
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- if (meta_lsn != NULL)
- memcpy(bp, meta_lsn, sizeof(*meta_lsn));
- else
- memset(bp, 0, sizeof(*meta_lsn));
- bp += sizeof(*meta_lsn);
- if (header == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &header->size, sizeof(header->size));
- bp += sizeof(header->size);
- memcpy(bp, header->data, header->size);
- bp += header->size;
- }
- memcpy(bp, &next, sizeof(next));
- bp += sizeof(next);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__bam_pg_free_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_pg_free_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __bam_pg_free_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_pg_free: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tmeta_lsn: [%lu][%lu]\n",
- (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\theader: ");
- for (i = 0; i < argp->header.size; i++) {
- ch = ((u_int8_t *)argp->header.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tnext: %lu\n", (u_long)argp->next);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_pg_free_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_pg_free_args **argpp;
-{
- __bam_pg_free_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_pg_free_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
- bp += sizeof(argp->meta_lsn);
- memset(&argp->header, 0, sizeof(argp->header));
- memcpy(&argp->header.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->header.data = bp;
- bp += argp->header.size;
- memcpy(&argp->next, bp, sizeof(argp->next));
- bp += sizeof(argp->next);
- *argpp = argp;
- return (0);
-}
-
-int
-__bam_pg_free1_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_pg_free1_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __bam_pg_free1_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_pg_free1: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tmeta_lsn: [%lu][%lu]\n",
- (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\talloc_lsn: [%lu][%lu]\n",
- (u_long)argp->alloc_lsn.file, (u_long)argp->alloc_lsn.offset);
- printf("\theader: ");
- for (i = 0; i < argp->header.size; i++) {
- ch = ((u_int8_t *)argp->header.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tnext: %lu\n", (u_long)argp->next);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_pg_free1_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_pg_free1_args **argpp;
-{
- __bam_pg_free1_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_pg_free1_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
- bp += sizeof(argp->meta_lsn);
- memcpy(&argp->alloc_lsn, bp, sizeof(argp->alloc_lsn));
- bp += sizeof(argp->alloc_lsn);
- memset(&argp->header, 0, sizeof(argp->header));
- memcpy(&argp->header.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->header.data = bp;
- bp += argp->header.size;
- memcpy(&argp->next, bp, sizeof(argp->next));
- bp += sizeof(argp->next);
- *argpp = argp;
- return (0);
-}
-
-int
-__bam_split1_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_split1_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __bam_split1_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_split1: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tleft: %lu\n", (u_long)argp->left);
- printf("\tllsn: [%lu][%lu]\n",
- (u_long)argp->llsn.file, (u_long)argp->llsn.offset);
- printf("\tright: %lu\n", (u_long)argp->right);
- printf("\trlsn: [%lu][%lu]\n",
- (u_long)argp->rlsn.file, (u_long)argp->rlsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tnpgno: %lu\n", (u_long)argp->npgno);
- printf("\tnlsn: [%lu][%lu]\n",
- (u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
- printf("\tpg: ");
- for (i = 0; i < argp->pg.size; i++) {
- ch = ((u_int8_t *)argp->pg.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_split1_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_split1_args **argpp;
-{
- __bam_split1_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_split1_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->left, bp, sizeof(argp->left));
- bp += sizeof(argp->left);
- memcpy(&argp->llsn, bp, sizeof(argp->llsn));
- bp += sizeof(argp->llsn);
- memcpy(&argp->right, bp, sizeof(argp->right));
- bp += sizeof(argp->right);
- memcpy(&argp->rlsn, bp, sizeof(argp->rlsn));
- bp += sizeof(argp->rlsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->npgno, bp, sizeof(argp->npgno));
- bp += sizeof(argp->npgno);
- memcpy(&argp->nlsn, bp, sizeof(argp->nlsn));
- bp += sizeof(argp->nlsn);
- memset(&argp->pg, 0, sizeof(argp->pg));
- memcpy(&argp->pg.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->pg.data = bp;
- bp += argp->pg.size;
- *argpp = argp;
- return (0);
-}
-
-int
-__bam_split_log(dbenv, txnid, ret_lsnp, flags,
- fileid, left, llsn, right, rlsn, indx,
- npgno, nlsn, root_pgno, pg, opflags)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
db_pgno_t left;
DB_LSN * llsn;
db_pgno_t right;
@@ -620,72 +41,140 @@ __bam_split_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t opflags;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_split;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_split;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(left)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*llsn)
- + sizeof(right)
+ + sizeof(u_int32_t)
+ sizeof(*rlsn)
- + sizeof(indx)
- + sizeof(npgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*nlsn)
- + sizeof(root_pgno)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (pg == NULL ? 0 : pg->size)
- + sizeof(opflags);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &left, sizeof(left));
- bp += sizeof(left);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)left;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (llsn != NULL)
memcpy(bp, llsn, sizeof(*llsn));
else
memset(bp, 0, sizeof(*llsn));
bp += sizeof(*llsn);
- memcpy(bp, &right, sizeof(right));
- bp += sizeof(right);
+
+ uinttmp = (u_int32_t)right;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (rlsn != NULL)
memcpy(bp, rlsn, sizeof(*rlsn));
else
memset(bp, 0, sizeof(*rlsn));
bp += sizeof(*rlsn);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &npgno, sizeof(npgno));
- bp += sizeof(npgno);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)npgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (nlsn != NULL)
memcpy(bp, nlsn, sizeof(*nlsn));
else
memset(bp, 0, sizeof(*nlsn));
bp += sizeof(*nlsn);
- memcpy(bp, &root_pgno, sizeof(root_pgno));
- bp += sizeof(root_pgno);
+
+ uinttmp = (u_int32_t)root_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pg == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -696,16 +185,96 @@ __bam_split_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, pg->data, pg->size);
bp += pg->size;
}
- memcpy(bp, &opflags, sizeof(opflags));
- bp += sizeof(opflags);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)opflags;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_split_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_split_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_split_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_split_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_split_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -716,50 +285,51 @@ __bam_split_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__bam_split_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_split_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_split: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_split%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tleft: %lu\n", (u_long)argp->left);
- printf("\tllsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tleft: %lu\n", (u_long)argp->left);
+ (void)printf("\tllsn: [%lu][%lu]\n",
(u_long)argp->llsn.file, (u_long)argp->llsn.offset);
- printf("\tright: %lu\n", (u_long)argp->right);
- printf("\trlsn: [%lu][%lu]\n",
+ (void)printf("\tright: %lu\n", (u_long)argp->right);
+ (void)printf("\trlsn: [%lu][%lu]\n",
(u_long)argp->rlsn.file, (u_long)argp->rlsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tnpgno: %lu\n", (u_long)argp->npgno);
- printf("\tnlsn: [%lu][%lu]\n",
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tnpgno: %lu\n", (u_long)argp->npgno);
+ (void)printf("\tnlsn: [%lu][%lu]\n",
(u_long)argp->nlsn.file, (u_long)argp->nlsn.offset);
- printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
- printf("\tpg: ");
+ (void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
+ (void)printf("\tpg: ");
for (i = 0; i < argp->pg.size; i++) {
ch = ((u_int8_t *)argp->pg.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\topflags: %lu\n", (u_long)argp->opflags);
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\topflags: %lu\n", (u_long)argp->opflags);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_split_read __P((DB_ENV *, void *, __bam_split_args **));
+ */
int
__bam_split_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -767,158 +337,84 @@ __bam_split_read(dbenv, recbuf, argpp)
__bam_split_args **argpp;
{
__bam_split_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_split_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_split_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->left, bp, sizeof(argp->left));
- bp += sizeof(argp->left);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->left = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->llsn, bp, sizeof(argp->llsn));
bp += sizeof(argp->llsn);
- memcpy(&argp->right, bp, sizeof(argp->right));
- bp += sizeof(argp->right);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->right = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->rlsn, bp, sizeof(argp->rlsn));
bp += sizeof(argp->rlsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->npgno, bp, sizeof(argp->npgno));
- bp += sizeof(argp->npgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->npgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->nlsn, bp, sizeof(argp->nlsn));
bp += sizeof(argp->nlsn);
- memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
- bp += sizeof(argp->root_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->root_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->pg, 0, sizeof(argp->pg));
memcpy(&argp->pg.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->pg.data = bp;
bp += argp->pg.size;
- memcpy(&argp->opflags, bp, sizeof(argp->opflags));
- bp += sizeof(argp->opflags);
- *argpp = argp;
- return (0);
-}
-int
-__bam_rsplit1_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __bam_rsplit1_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opflags = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- if ((ret = __bam_rsplit1_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]bam_rsplit1: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tpgdbt: ");
- for (i = 0; i < argp->pgdbt.size; i++) {
- ch = ((u_int8_t *)argp->pgdbt.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tnrec: %lu\n", (u_long)argp->nrec);
- printf("\trootent: ");
- for (i = 0; i < argp->rootent.size; i++) {
- ch = ((u_int8_t *)argp->rootent.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\trootlsn: [%lu][%lu]\n",
- (u_long)argp->rootlsn.file, (u_long)argp->rootlsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__bam_rsplit1_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __bam_rsplit1_args **argpp;
-{
- __bam_rsplit1_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__bam_rsplit1_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memset(&argp->pgdbt, 0, sizeof(argp->pgdbt));
- memcpy(&argp->pgdbt.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->pgdbt.data = bp;
- bp += argp->pgdbt.size;
- memcpy(&argp->nrec, bp, sizeof(argp->nrec));
- bp += sizeof(argp->nrec);
- memset(&argp->rootent, 0, sizeof(argp->rootent));
- memcpy(&argp->rootent.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->rootent.data = bp;
- bp += argp->rootent.size;
- memcpy(&argp->rootlsn, bp, sizeof(argp->rootlsn));
- bp += sizeof(argp->rootlsn);
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_rsplit_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, const DBT *, db_pgno_t, db_pgno_t,
+ * PUBLIC: const DBT *, DB_LSN *));
+ */
int
-__bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, pgdbt, root_pgno, nrec, rootent,
- rootlsn)
- DB_ENV *dbenv;
+__bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno, pgdbt, root_pgno, nrec, rootent,
+ rootlsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
const DBT *pgdbt;
db_pgno_t root_pgno;
@@ -927,45 +423,102 @@ __bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,
DB_LSN * rootlsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_rsplit;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_rsplit;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (pgdbt == NULL ? 0 : pgdbt->size)
- + sizeof(root_pgno)
- + sizeof(nrec)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (rootent == NULL ? 0 : rootent->size)
+ sizeof(*rootlsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pgdbt == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -976,10 +529,15 @@ __bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, pgdbt->data, pgdbt->size);
bp += pgdbt->size;
}
- memcpy(bp, &root_pgno, sizeof(root_pgno));
- bp += sizeof(root_pgno);
- memcpy(bp, &nrec, sizeof(nrec));
- bp += sizeof(nrec);
+
+ uinttmp = (u_int32_t)root_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)nrec;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (rootent == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -990,19 +548,98 @@ __bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, rootent->data, rootent->size);
bp += rootent->size;
}
+
if (rootlsn != NULL)
memcpy(bp, rootlsn, sizeof(*rootlsn));
else
memset(bp, 0, sizeof(*rootlsn));
bp += sizeof(*rootlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_rsplit_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_rsplit_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_rsplit_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_rsplit_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_rsplit_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1013,52 +650,50 @@ __bam_rsplit_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__bam_rsplit_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_rsplit_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_rsplit: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_rsplit%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tpgdbt: ");
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tpgdbt: ");
for (i = 0; i < argp->pgdbt.size; i++) {
ch = ((u_int8_t *)argp->pgdbt.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
- printf("\tnrec: %lu\n", (u_long)argp->nrec);
- printf("\trootent: ");
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
+ (void)printf("\tnrec: %lu\n", (u_long)argp->nrec);
+ (void)printf("\trootent: ");
for (i = 0; i < argp->rootent.size; i++) {
ch = ((u_int8_t *)argp->rootent.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\trootlsn: [%lu][%lu]\n",
+ (void)printf("\n");
+ (void)printf("\trootlsn: [%lu][%lu]\n",
(u_long)argp->rootlsn.file, (u_long)argp->rootlsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_rsplit_read __P((DB_ENV *, void *, __bam_rsplit_args **));
+ */
int
__bam_rsplit_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1066,53 +701,71 @@ __bam_rsplit_read(dbenv, recbuf, argpp)
__bam_rsplit_args **argpp;
{
__bam_rsplit_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_rsplit_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_rsplit_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->pgdbt, 0, sizeof(argp->pgdbt));
memcpy(&argp->pgdbt.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->pgdbt.data = bp;
bp += argp->pgdbt.size;
- memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
- bp += sizeof(argp->root_pgno);
- memcpy(&argp->nrec, bp, sizeof(argp->nrec));
- bp += sizeof(argp->nrec);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->root_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->nrec = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->rootent, 0, sizeof(argp->rootent));
memcpy(&argp->rootent.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->rootent.data = bp;
bp += argp->rootent.size;
+
memcpy(&argp->rootlsn, bp, sizeof(argp->rootlsn));
bp += sizeof(argp->rootlsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_adj_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t));
+ */
int
-__bam_adj_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, lsn, indx, indx_copy, is_insert)
- DB_ENV *dbenv;
+__bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, indx_copy, is_insert)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * lsn;
u_int32_t indx;
@@ -1120,62 +773,204 @@ __bam_adj_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t is_insert;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_adj;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_adj;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(indx)
- + sizeof(indx_copy)
- + sizeof(is_insert);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &indx_copy, sizeof(indx_copy));
- bp += sizeof(indx_copy);
- memcpy(bp, &is_insert, sizeof(is_insert));
- bp += sizeof(is_insert);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)indx_copy;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)is_insert;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_adj_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_adj_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_adj_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_adj_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_adj_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1185,36 +980,38 @@ __bam_adj_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_adj_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_adj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_adj: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_adj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tindx_copy: %lu\n", (u_long)argp->indx_copy);
- printf("\tis_insert: %lu\n", (u_long)argp->is_insert);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tindx_copy: %lu\n", (u_long)argp->indx_copy);
+ (void)printf("\tis_insert: %lu\n", (u_long)argp->is_insert);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_adj_read __P((DB_ENV *, void *, __bam_adj_args **));
+ */
int
__bam_adj_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1222,45 +1019,62 @@ __bam_adj_read(dbenv, recbuf, argpp)
__bam_adj_args **argpp;
{
__bam_adj_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_adj_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_adj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->indx_copy, bp, sizeof(argp->indx_copy));
- bp += sizeof(argp->indx_copy);
- memcpy(&argp->is_insert, bp, sizeof(argp->is_insert));
- bp += sizeof(argp->is_insert);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx_copy = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->is_insert = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_cadjust_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, int32_t, u_int32_t));
+ */
int
-__bam_cadjust_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, lsn, indx, adjust, opflags)
- DB_ENV *dbenv;
+__bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, adjust, opflags)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * lsn;
u_int32_t indx;
@@ -1268,62 +1082,204 @@ __bam_cadjust_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t opflags;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_cadjust;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_cadjust;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(indx)
- + sizeof(adjust)
- + sizeof(opflags);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &adjust, sizeof(adjust));
- bp += sizeof(adjust);
- memcpy(bp, &opflags, sizeof(opflags));
- bp += sizeof(opflags);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)adjust;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)opflags;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_cadjust_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_cadjust_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_cadjust_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_cadjust_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_cadjust_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1333,36 +1289,39 @@ __bam_cadjust_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_cadjust_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_cadjust_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_cadjust: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_cadjust%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tadjust: %ld\n", (long)argp->adjust);
- printf("\topflags: %lu\n", (u_long)argp->opflags);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tadjust: %ld\n", (long)argp->adjust);
+ (void)printf("\topflags: %lu\n", (u_long)argp->opflags);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_cadjust_read __P((DB_ENV *, void *,
+ * PUBLIC: __bam_cadjust_args **));
+ */
int
__bam_cadjust_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1370,100 +1329,255 @@ __bam_cadjust_read(dbenv, recbuf, argpp)
__bam_cadjust_args **argpp;
{
__bam_cadjust_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_cadjust_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_cadjust_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->adjust, bp, sizeof(argp->adjust));
- bp += sizeof(argp->adjust);
- memcpy(&argp->opflags, bp, sizeof(argp->opflags));
- bp += sizeof(argp->opflags);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->adjust = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opflags = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_cdel_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t));
+ */
int
-__bam_cdel_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, lsn, indx)
- DB_ENV *dbenv;
+__bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * lsn;
u_int32_t indx;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_cdel;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_cdel;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(indx);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_cdel_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_cdel_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_cdel_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_cdel_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_cdel_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1473,34 +1587,36 @@ __bam_cdel_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_cdel_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_cdel_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_cdel: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_cdel%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_cdel_read __P((DB_ENV *, void *, __bam_cdel_args **));
+ */
int
__bam_cdel_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1508,42 +1624,56 @@ __bam_cdel_read(dbenv, recbuf, argpp)
__bam_cdel_args **argpp;
{
__bam_cdel_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_cdel_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_cdel_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_repl_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, u_int32_t, u_int32_t,
+ * PUBLIC: const DBT *, const DBT *, u_int32_t, u_int32_t));
+ */
int
-__bam_repl_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, lsn, indx, isdeleted, orig,
- repl, prefix, suffix)
- DB_ENV *dbenv;
+__bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, lsn, indx, isdeleted, orig,
+ repl, prefix, suffix)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * lsn;
u_int32_t indx;
@@ -1554,56 +1684,118 @@ __bam_repl_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t suffix;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_repl;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_repl;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(indx)
- + sizeof(isdeleted)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (orig == NULL ? 0 : orig->size)
+ sizeof(u_int32_t) + (repl == NULL ? 0 : repl->size)
- + sizeof(prefix)
- + sizeof(suffix);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &isdeleted, sizeof(isdeleted));
- bp += sizeof(isdeleted);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)isdeleted;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (orig == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -1614,6 +1806,7 @@ __bam_repl_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, orig->data, orig->size);
bp += orig->size;
}
+
if (repl == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -1624,18 +1817,100 @@ __bam_repl_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, repl->data, repl->size);
bp += repl->size;
}
- memcpy(bp, &prefix, sizeof(prefix));
- bp += sizeof(prefix);
- memcpy(bp, &suffix, sizeof(suffix));
- bp += sizeof(suffix);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)prefix;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)suffix;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_repl_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_repl_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_repl_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_repl_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_repl_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1646,54 +1921,52 @@ __bam_repl_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__bam_repl_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_repl_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_repl: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_repl%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tisdeleted: %lu\n", (u_long)argp->isdeleted);
- printf("\torig: ");
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tisdeleted: %lu\n", (u_long)argp->isdeleted);
+ (void)printf("\torig: ");
for (i = 0; i < argp->orig.size; i++) {
ch = ((u_int8_t *)argp->orig.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\trepl: ");
+ (void)printf("\n");
+ (void)printf("\trepl: ");
for (i = 0; i < argp->repl.size; i++) {
ch = ((u_int8_t *)argp->repl.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tprefix: %lu\n", (u_long)argp->prefix);
- printf("\tsuffix: %lu\n", (u_long)argp->suffix);
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tprefix: %lu\n", (u_long)argp->prefix);
+ (void)printf("\tsuffix: %lu\n", (u_long)argp->suffix);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_repl_read __P((DB_ENV *, void *, __bam_repl_args **));
+ */
int
__bam_repl_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1701,112 +1974,271 @@ __bam_repl_read(dbenv, recbuf, argpp)
__bam_repl_args **argpp;
{
__bam_repl_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_repl_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_repl_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->isdeleted, bp, sizeof(argp->isdeleted));
- bp += sizeof(argp->isdeleted);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->isdeleted = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->orig, 0, sizeof(argp->orig));
memcpy(&argp->orig.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->orig.data = bp;
bp += argp->orig.size;
+
memset(&argp->repl, 0, sizeof(argp->repl));
memcpy(&argp->repl.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->repl.data = bp;
bp += argp->repl.size;
- memcpy(&argp->prefix, bp, sizeof(argp->prefix));
- bp += sizeof(argp->prefix);
- memcpy(&argp->suffix, bp, sizeof(argp->suffix));
- bp += sizeof(argp->suffix);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->prefix = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->suffix = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_root_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, db_pgno_t, DB_LSN *));
+ */
int
-__bam_root_log(dbenv, txnid, ret_lsnp, flags,
- fileid, meta_pgno, root_pgno, meta_lsn)
- DB_ENV *dbenv;
+__bam_root_log(dbp, txnid, ret_lsnp, flags, meta_pgno, root_pgno, meta_lsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t meta_pgno;
db_pgno_t root_pgno;
DB_LSN * meta_lsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_root;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_root;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(meta_pgno)
- + sizeof(root_pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*meta_lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &meta_pgno, sizeof(meta_pgno));
- bp += sizeof(meta_pgno);
- memcpy(bp, &root_pgno, sizeof(root_pgno));
- bp += sizeof(root_pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)root_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (meta_lsn != NULL)
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_root_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_root_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_root_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_root_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_root_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1816,34 +2248,36 @@ __bam_root_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_root_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_root_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_root: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_root%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
- printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
- printf("\tmeta_lsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\troot_pgno: %lu\n", (u_long)argp->root_pgno);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
(u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_root_read __P((DB_ENV *, void *, __bam_root_args **));
+ */
int
__bam_root_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1851,42 +2285,56 @@ __bam_root_read(dbenv, recbuf, argpp)
__bam_root_args **argpp;
{
__bam_root_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_root_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_root_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->meta_pgno, bp, sizeof(argp->meta_pgno));
- bp += sizeof(argp->meta_pgno);
- memcpy(&argp->root_pgno, bp, sizeof(argp->root_pgno));
- bp += sizeof(argp->root_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->root_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
bp += sizeof(argp->meta_lsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_curadj_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_ca_mode, db_pgno_t, db_pgno_t, db_pgno_t,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t));
+ */
int
-__bam_curadj_log(dbenv, txnid, ret_lsnp, flags,
- fileid, mode, from_pgno, to_pgno, left_pgno, first_indx,
- from_indx, to_indx)
- DB_ENV *dbenv;
+__bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode, from_pgno, to_pgno, left_pgno, first_indx,
+ from_indx, to_indx)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_ca_mode mode;
db_pgno_t from_pgno;
db_pgno_t to_pgno;
@@ -1896,65 +2344,212 @@ __bam_curadj_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t to_indx;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_curadj;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_curadj;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(mode)
- + sizeof(from_pgno)
- + sizeof(to_pgno)
- + sizeof(left_pgno)
- + sizeof(first_indx)
- + sizeof(from_indx)
- + sizeof(to_indx);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &mode, sizeof(mode));
- bp += sizeof(mode);
- memcpy(bp, &from_pgno, sizeof(from_pgno));
- bp += sizeof(from_pgno);
- memcpy(bp, &to_pgno, sizeof(to_pgno));
- bp += sizeof(to_pgno);
- memcpy(bp, &left_pgno, sizeof(left_pgno));
- bp += sizeof(left_pgno);
- memcpy(bp, &first_indx, sizeof(first_indx));
- bp += sizeof(first_indx);
- memcpy(bp, &from_indx, sizeof(from_indx));
- bp += sizeof(from_indx);
- memcpy(bp, &to_indx, sizeof(to_indx));
- bp += sizeof(to_indx);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)mode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)from_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)to_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)left_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)first_indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)from_indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)to_indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_curadj_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_curadj_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_curadj_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_curadj_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1964,37 +2559,39 @@ __bam_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_curadj_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_curadj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_curadj: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_curadj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmode: %ld\n", (long)argp->mode);
- printf("\tfrom_pgno: %lu\n", (u_long)argp->from_pgno);
- printf("\tto_pgno: %lu\n", (u_long)argp->to_pgno);
- printf("\tleft_pgno: %lu\n", (u_long)argp->left_pgno);
- printf("\tfirst_indx: %lu\n", (u_long)argp->first_indx);
- printf("\tfrom_indx: %lu\n", (u_long)argp->from_indx);
- printf("\tto_indx: %lu\n", (u_long)argp->to_indx);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmode: %ld\n", (long)argp->mode);
+ (void)printf("\tfrom_pgno: %lu\n", (u_long)argp->from_pgno);
+ (void)printf("\tto_pgno: %lu\n", (u_long)argp->to_pgno);
+ (void)printf("\tleft_pgno: %lu\n", (u_long)argp->left_pgno);
+ (void)printf("\tfirst_indx: %lu\n", (u_long)argp->first_indx);
+ (void)printf("\tfrom_indx: %lu\n", (u_long)argp->from_indx);
+ (void)printf("\tto_indx: %lu\n", (u_long)argp->to_indx);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_curadj_read __P((DB_ENV *, void *, __bam_curadj_args **));
+ */
int
__bam_curadj_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -2002,105 +2599,268 @@ __bam_curadj_read(dbenv, recbuf, argpp)
__bam_curadj_args **argpp;
{
__bam_curadj_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_curadj_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_curadj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->mode, bp, sizeof(argp->mode));
- bp += sizeof(argp->mode);
- memcpy(&argp->from_pgno, bp, sizeof(argp->from_pgno));
- bp += sizeof(argp->from_pgno);
- memcpy(&argp->to_pgno, bp, sizeof(argp->to_pgno));
- bp += sizeof(argp->to_pgno);
- memcpy(&argp->left_pgno, bp, sizeof(argp->left_pgno));
- bp += sizeof(argp->left_pgno);
- memcpy(&argp->first_indx, bp, sizeof(argp->first_indx));
- bp += sizeof(argp->first_indx);
- memcpy(&argp->from_indx, bp, sizeof(argp->from_indx));
- bp += sizeof(argp->from_indx);
- memcpy(&argp->to_indx, bp, sizeof(argp->to_indx));
- bp += sizeof(argp->to_indx);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->mode = (db_ca_mode)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->from_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->to_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->left_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->first_indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->from_indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->to_indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_rcuradj_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, ca_recno_arg, db_pgno_t, db_recno_t, u_int32_t));
+ */
int
-__bam_rcuradj_log(dbenv, txnid, ret_lsnp, flags,
- fileid, mode, root, recno, order)
- DB_ENV *dbenv;
+__bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mode, root, recno, order)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
ca_recno_arg mode;
db_pgno_t root;
db_recno_t recno;
u_int32_t order;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_bam_rcuradj;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___bam_rcuradj;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(mode)
- + sizeof(root)
- + sizeof(recno)
- + sizeof(order);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &mode, sizeof(mode));
- bp += sizeof(mode);
- memcpy(bp, &root, sizeof(root));
- bp += sizeof(root);
- memcpy(bp, &recno, sizeof(recno));
- bp += sizeof(recno);
- memcpy(bp, &order, sizeof(order));
- bp += sizeof(order);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)mode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)root;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)recno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)order;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__bam_rcuradj_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_rcuradj_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__bam_rcuradj_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_rcuradj_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -2110,34 +2870,37 @@ __bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__bam_rcuradj_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __bam_rcuradj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]bam_rcuradj: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__bam_rcuradj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmode: %ld\n", (long)argp->mode);
- printf("\troot: %ld\n", (long)argp->root);
- printf("\trecno: %ld\n", (long)argp->recno);
- printf("\torder: %ld\n", (long)argp->order);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmode: %ld\n", (long)argp->mode);
+ (void)printf("\troot: %ld\n", (long)argp->root);
+ (void)printf("\trecno: %ld\n", (long)argp->recno);
+ (void)printf("\torder: %ld\n", (long)argp->order);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __bam_rcuradj_read __P((DB_ENV *, void *,
+ * PUBLIC: __bam_rcuradj_args **));
+ */
int
__bam_rcuradj_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -2145,140 +2908,173 @@ __bam_rcuradj_read(dbenv, recbuf, argpp)
__bam_rcuradj_args **argpp;
{
__bam_rcuradj_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__bam_rcuradj_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__bam_rcuradj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->mode, bp, sizeof(argp->mode));
- bp += sizeof(argp->mode);
- memcpy(&argp->root, bp, sizeof(argp->root));
- bp += sizeof(argp->root);
- memcpy(&argp->recno, bp, sizeof(argp->recno));
- bp += sizeof(argp->recno);
- memcpy(&argp->order, bp, sizeof(argp->order));
- bp += sizeof(argp->order);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->mode = (ca_recno_arg)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->root = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->recno = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->order = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __bam_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__bam_init_print(dbenv)
+__bam_init_print(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_alloc_print, DB_bam_pg_alloc)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_alloc1_print, DB_bam_pg_alloc1)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_free_print, DB_bam_pg_free)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_free1_print, DB_bam_pg_free1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_split_print, DB___bam_split)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_split1_print, DB_bam_split1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rsplit_print, DB___bam_rsplit)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_split_print, DB_bam_split)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_adj_print, DB___bam_adj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_rsplit1_print, DB_bam_rsplit1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cadjust_print, DB___bam_cadjust)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_rsplit_print, DB_bam_rsplit)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cdel_print, DB___bam_cdel)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_adj_print, DB_bam_adj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_repl_print, DB___bam_repl)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_cadjust_print, DB_bam_cadjust)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_root_print, DB___bam_root)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_cdel_print, DB_bam_cdel)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_curadj_print, DB___bam_curadj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_repl_print, DB_bam_repl)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_root_print, DB_bam_root)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_curadj_print, DB_bam_curadj)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_rcuradj_print, DB_bam_rcuradj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rcuradj_print, DB___bam_rcuradj)) != 0)
return (ret);
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __bam_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__bam_init_recover(dbenv)
+__bam_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_alloc_recover, DB_bam_pg_alloc)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_split_getpgnos, DB___bam_split)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_bam_pg_alloc1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rsplit_getpgnos, DB___bam_rsplit)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_pg_free_recover, DB_bam_pg_free)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_adj_getpgnos, DB___bam_adj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_bam_pg_free1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cadjust_getpgnos, DB___bam_cadjust)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_bam_split1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cdel_getpgnos, DB___bam_cdel)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_split_recover, DB_bam_split)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_repl_getpgnos, DB___bam_repl)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_bam_rsplit1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_root_getpgnos, DB___bam_root)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_rsplit_recover, DB_bam_rsplit)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_curadj_getpgnos, DB___bam_curadj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_adj_recover, DB_bam_adj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rcuradj_getpgnos, DB___bam_rcuradj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_cadjust_recover, DB_bam_cadjust)) != 0)
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __bam_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__bam_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_split_recover, DB___bam_split)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rsplit_recover, DB___bam_rsplit)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_cdel_recover, DB_bam_cdel)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_adj_recover, DB___bam_adj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_repl_recover, DB_bam_repl)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cadjust_recover, DB___bam_cadjust)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_root_recover, DB_bam_root)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_cdel_recover, DB___bam_cdel)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_curadj_recover, DB_bam_curadj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_repl_recover, DB___bam_repl)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __bam_rcuradj_recover, DB_bam_rcuradj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_root_recover, DB___bam_root)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_curadj_recover, DB___bam_curadj)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __bam_rcuradj_recover, DB___bam_rcuradj)) != 0)
return (ret);
return (0);
}
-
diff --git a/db/build_vxworks/BerkeleyDB.wsp b/db/build_vxworks/BerkeleyDB.wsp
deleted file mode 100644
index ce2e71b0e..000000000
--- a/db/build_vxworks/BerkeleyDB.wsp
+++ /dev/null
@@ -1,29 +0,0 @@
-Document file - DO NOT EDIT
-
-<BEGIN> CORE_INFO_TYPE
-Workspace
-<END>
-
-<BEGIN> CORE_INFO_VERSION
-2.0
-<END>
-
-<BEGIN> projectList
-$(PRJ_DIR)/BerkeleyDB.wpj \
- $(PRJ_DIR)/db_archive/db_archive.wpj \
- $(PRJ_DIR)/db_checkpoint/db_checkpoint.wpj \
- $(PRJ_DIR)/db_deadlock/db_deadlock.wpj \
- $(PRJ_DIR)/db_dump/db_dump.wpj \
- $(PRJ_DIR)/db_load/db_load.wpj \
- $(PRJ_DIR)/db_printlog/db_printlog.wpj \
- $(PRJ_DIR)/db_recover/db_recover.wpj \
- $(PRJ_DIR)/db_stat/db_stat.wpj \
- $(PRJ_DIR)/db_upgrade/db_upgrade.wpj \
- $(PRJ_DIR)/db_verify/db_verify.wpj \
- $(PRJ_DIR)/dbdemo/dbdemo.wpj
-<END>
-
-<BEGIN> userComments
-
-<END>
-
diff --git a/db/build_vxworks/BerkeleyDB/component.cdf b/db/build_vxworks/BerkeleyDB/component.cdf
index 73c5dd733..dd46c7b81 100644
--- a/db/build_vxworks/BerkeleyDB/component.cdf
+++ b/db/build_vxworks/BerkeleyDB/component.cdf
@@ -51,6 +51,7 @@ Component INCLUDE_BERKELEYDB {
db_method.o \
db_open.o \
db_overflow.o \
+ db_ovfl_vrfy.o \
db_pr.o \
db_rec.o \
db_reclaim.o \
@@ -507,6 +508,12 @@ Module db_overflow.o {
SRC_PATH_NAME $(PRJ_DIR)/../../db/db_overflow.c
}
+Module db_ovfl_vrfy.o {
+
+ NAME db_ovfl_vrfy.o
+ SRC_PATH_NAME $(PRJ_DIR)/../../db/db_ovfl_vrfy.c
+}
+
Module db_pr.o {
NAME db_pr.o
diff --git a/db/build_vxworks/BerkeleyDB/component.wpj b/db/build_vxworks/BerkeleyDB/component.wpj
index 1c263a9b3..4ee6dc39e 100644
--- a/db/build_vxworks/BerkeleyDB/component.wpj
+++ b/db/build_vxworks/BerkeleyDB/component.wpj
@@ -644,6 +644,18 @@ db_overflow.o
CC
<END>
+<BEGIN> BUILD_PENTIUM2gnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_infoTags
+toolMacro objects
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_objects
+db_ovfl_vrfy.o
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_toolMacro
+CC
+<END>
+
<BEGIN> BUILD_PENTIUM2gnu.debug_FILE_$(PRJ_DIR)/../../db/db_pr.c_infoTags
toolMacro objects
<END>
@@ -2886,6 +2898,18 @@ db_overflow.o
CC
<END>
+<BEGIN> BUILD_PENTIUM2gnu.release_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_infoTags
+toolMacro objects
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu.release_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_objects
+db_ovfl_vrfy.o
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu.release_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_toolMacro
+CC
+<END>
+
<BEGIN> BUILD_PENTIUM2gnu.release_FILE_$(PRJ_DIR)/../../db/db_pr.c_infoTags
toolMacro objects
<END>
@@ -5126,6 +5150,18 @@ db_overflow.o
CC
<END>
+<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_infoTags
+toolMacro objects
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_objects
+db_ovfl_vrfy.o
+<END>
+
+<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/../../db/db_ovfl_vrfy.c_toolMacro
+CC
+<END>
+
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/../../db/db_pr.c_infoTags
toolMacro objects
<END>
@@ -6616,14 +6652,14 @@ CC
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_infoTags
toolMacro objects
-<END>
+<END>
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_objects
compConfig.o
-<END>
+<END>
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_toolMacro
-CC
+CC
<END>
<BEGIN> BUILD_PENTIUMgnu.debug_MACRO_AR
@@ -6801,6 +6837,7 @@ $(PRJ_DIR)/../../btree/bt_compare.c \
$(PRJ_DIR)/../../db/db_method.c \
$(PRJ_DIR)/../../db/db_open.c \
$(PRJ_DIR)/../../db/db_overflow.c \
+ $(PRJ_DIR)/../../db/db_ovfl_vrfy.c \
$(PRJ_DIR)/../../db/db_pr.c \
$(PRJ_DIR)/../../db/db_rec.c \
$(PRJ_DIR)/../../db/db_reclaim.c \
diff --git a/db/build_vxworks/BerkeleyDB.wpj b/db/build_vxworks/BerkeleyDB20.wpj
index ea7239f67..795e8db7a 100644..100755
--- a/db/build_vxworks/BerkeleyDB.wpj
+++ b/db/build_vxworks/BerkeleyDB20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUM_debug_BUILDRULE
-BerkeleyDB.out
+BerkeleyDB20.out
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB_sim.a
+$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB20_sim.a
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_AS
@@ -109,7 +109,7 @@ size386
<END>
<BEGIN> BUILD_PENTIUM_release_BUILDRULE
-BerkeleyDB.out
+BerkeleyDB20.out
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_AR
@@ -117,7 +117,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB_sim.a
+$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB20_sim.a
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_AS
@@ -143,7 +143,7 @@ cc386
-DCPU=PENTIUM \
-O2 \
-I$(PRJ_DIR) \
- -I$(PRJ_DIR)/..
+ -I$(PRJ_DIR)/..
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS_AS
@@ -217,11 +217,11 @@ size386
::tc_PENTIUMgnu
<END>
-<BEGIN> BUILD_RULE_BerkeleyDB.out
+<BEGIN> BUILD_RULE_BerkeleyDB20.out
<END>
-<BEGIN> BUILD_RULE_BerkeleyDB_sim.out
+<BEGIN> BUILD_RULE_BerkeleyDB20_sim.out
<END>
@@ -1185,6 +1185,24 @@ db_overflow.o
C/C++ compiler
<END>
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_objects
+db_ovfl_vrfy.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_tool
+C/C++ compiler
+<END>
+
<BEGIN> FILE_$(PRJ_DIR)/../db/db_pr.c_dependDone
TRUE
<END>
@@ -3470,6 +3488,7 @@ $(PRJ_DIR)/../btree/bt_compare.c \
$(PRJ_DIR)/../db/db_method.c \
$(PRJ_DIR)/../db/db_open.c \
$(PRJ_DIR)/../db/db_overflow.c \
+ $(PRJ_DIR)/../db/db_ovfl_vrfy.c \
$(PRJ_DIR)/../db/db_pr.c \
$(PRJ_DIR)/../db/db_rec.c \
$(PRJ_DIR)/../db/db_reclaim.c \
diff --git a/db/build_vxworks/BerkeleyDB20.wsp b/db/build_vxworks/BerkeleyDB20.wsp
new file mode 100755
index 000000000..caebadbe7
--- /dev/null
+++ b/db/build_vxworks/BerkeleyDB20.wsp
@@ -0,0 +1,29 @@
+Document file - DO NOT EDIT
+
+<BEGIN> CORE_INFO_TYPE
+Workspace
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.0
+<END>
+
+<BEGIN> projectList
+$(PRJ_DIR)/BerkeleyDB20.wpj \
+ $(PRJ_DIR)/db_archive/db_archive20.wpj \
+ $(PRJ_DIR)/db_checkpoint/db_checkpoint20.wpj \
+ $(PRJ_DIR)/db_deadlock/db_deadlock20.wpj \
+ $(PRJ_DIR)/db_dump/db_dump20.wpj \
+ $(PRJ_DIR)/db_load/db_load20.wpj \
+ $(PRJ_DIR)/db_printlog/db_printlog20.wpj \
+ $(PRJ_DIR)/db_recover/db_recover20.wpj \
+ $(PRJ_DIR)/db_stat/db_stat20.wpj \
+ $(PRJ_DIR)/db_upgrade/db_upgrade20.wpj \
+ $(PRJ_DIR)/db_verify/db_verify20.wpj \
+ $(PRJ_DIR)/dbdemo/dbdemo20.wpj
+<END>
+
+<BEGIN> userComments
+
+<END>
+
diff --git a/db/build_vxworks/BerkeleyDB22.wpj b/db/build_vxworks/BerkeleyDB22.wpj
new file mode 100755
index 000000000..5aa71a330
--- /dev/null
+++ b/db/build_vxworks/BerkeleyDB22.wpj
@@ -0,0 +1,3679 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM_debug_BUILDRULE
+BerkeleyDB22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM_debug/BerkeleyDB22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu \
+ -O0 \
+ -I$(PRJ_DIR) \
+ -I$(PRJ_DIR)/.. \
+ -DDIAGNOSTIC \
+ -DDEBUG
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_BUILDRULE
+BerkeleyDB22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM_release/BerkeleyDB22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu \
+ -O2 \
+ -I$(PRJ_DIR) \
+ -I$(PRJ_DIR)/..
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_BerkeleyDB22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_BerkeleyDB22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM_debug
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM_release PENTIUM_debug
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_objects
+bt_compare.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_compare.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_conv.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_conv.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_conv.c_objects
+bt_conv.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_conv.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_curadj.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_curadj.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_curadj.c_objects
+bt_curadj.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_curadj.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_cursor.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_cursor.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_cursor.c_objects
+bt_cursor.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_cursor.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_delete.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_delete.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_delete.c_objects
+bt_delete.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_delete.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_method.c_objects
+bt_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_open.c_objects
+bt_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_put.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_put.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_put.c_objects
+bt_put.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_put.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rec.c_objects
+bt_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_reclaim.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_reclaim.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_reclaim.c_objects
+bt_reclaim.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_reclaim.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_recno.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_recno.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_recno.c_objects
+bt_recno.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_recno.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rsearch.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rsearch.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rsearch.c_objects
+bt_rsearch.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_rsearch.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_search.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_search.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_search.c_objects
+bt_search.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_search.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_split.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_split.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_split.c_objects
+bt_split.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_split.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_stat.c_objects
+bt_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_upgrade.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_upgrade.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_upgrade.c_objects
+bt_upgrade.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_upgrade.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_verify.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_verify.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_verify.c_objects
+bt_verify.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/bt_verify.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/btree_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/btree_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/btree_auto.c_objects
+btree_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../btree/btree_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_objects
+getopt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/getopt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/snprintf.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/snprintf.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/snprintf.c_objects
+snprintf.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/snprintf.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strcasecmp.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strcasecmp.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strcasecmp.c_objects
+strcasecmp.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strcasecmp.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strdup.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strdup.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strdup.c_objects
+strdup.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/strdup.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/vsnprintf.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/vsnprintf.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/vsnprintf.c_objects
+vsnprintf.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../clib/vsnprintf.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_objects
+db_byteorder.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_byteorder.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_objects
+db_err.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_err.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_getlong.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_getlong.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_getlong.c_objects
+db_getlong.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_getlong.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_idspace.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_idspace.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_idspace.c_objects
+db_idspace.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_idspace.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_log2.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_log2.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_log2.c_objects
+db_log2.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/db_log2.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_objects
+util_arg.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_arg.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_cache.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_cache.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_cache.c_objects
+util_cache.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_cache.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_log.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_log.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_log.c_objects
+util_log.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_log.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_sig.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_sig.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_sig.c_objects
+util_sig.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../common/util_sig.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/aes_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/aes_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/aes_method.c_objects
+aes_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/aes_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/crypto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/crypto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/crypto.c_objects
+crypto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/crypto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/mersenne/mt19937db.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/mersenne/mt19937db.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/mersenne/mt19937db.c_objects
+mt19937db.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/mersenne/mt19937db.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-alg-fst.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-alg-fst.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-alg-fst.c_objects
+rijndael-alg-fst.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-alg-fst.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-api-fst.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-api-fst.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-api-fst.c_objects
+rijndael-api-fst.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../crypto/rijndael/rijndael-api-fst.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_auto.c_objects
+crdel_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_rec.c_objects
+crdel_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/crdel_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db.c_objects
+db.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_am.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_am.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_am.c_objects
+db_am.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_am.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_auto.c_objects
+db_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cam.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cam.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cam.c_objects
+db_cam.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_cam.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_objects
+db_conv.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_conv.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dispatch.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dispatch.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dispatch.c_objects
+db_dispatch.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dispatch.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dup.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dup.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dup.c_objects
+db_dup.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_dup.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_iface.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_iface.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_iface.c_objects
+db_iface.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_iface.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_join.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_join.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_join.c_objects
+db_join.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_join.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_meta.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_meta.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_meta.c_objects
+db_meta.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_meta.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_method.c_objects
+db_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_open.c_objects
+db_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_overflow.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_overflow.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_overflow.c_objects
+db_overflow.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_overflow.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_objects
+db_ovfl_vrfy.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ovfl_vrfy.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_pr.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_pr.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_pr.c_objects
+db_pr.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_pr.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rec.c_objects
+db_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_reclaim.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_reclaim.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_reclaim.c_objects
+db_reclaim.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_reclaim.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_remove.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_remove.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_remove.c_objects
+db_remove.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_remove.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rename.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rename.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rename.c_objects
+db_rename.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_rename.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ret.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ret.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ret.c_objects
+db_ret.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_ret.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_truncate.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_truncate.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_truncate.c_objects
+db_truncate.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_truncate.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg.c_objects
+db_upg.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg_opd.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg_opd.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg_opd.c_objects
+db_upg_opd.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_upg_opd.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfy.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfy.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfy.c_objects
+db_vrfy.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfy.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfyutil.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfyutil.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfyutil.c_objects
+db_vrfyutil.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../db/db_vrfyutil.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg.c_objects
+dbreg.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_auto.c_objects
+dbreg_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_rec.c_objects
+dbreg_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_util.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_util.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_util.c_objects
+dbreg_util.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../dbreg/dbreg_util.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_salloc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_salloc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_salloc.c_objects
+db_salloc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_salloc.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_shash.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_shash.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_shash.c_objects
+db_shash.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/db_shash.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_objects
+env_file.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_file.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_method.c_objects
+env_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_open.c_objects
+env_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_recover.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_recover.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_recover.c_objects
+env_recover.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_recover.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_region.c_objects
+env_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../env/env_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fileops_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fileops_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fileops_auto.c_objects
+fileops_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fileops_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_basic.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_basic.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_basic.c_objects
+fop_basic.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_basic.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_rec.c_objects
+fop_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_util.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_util.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_util.c_objects
+fop_util.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../fileops/fop_util.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash.c_objects
+hash.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_auto.c_objects
+hash_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_conv.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_conv.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_conv.c_objects
+hash_conv.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_conv.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_dup.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_dup.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_dup.c_objects
+hash_dup.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_dup.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_func.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_func.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_func.c_objects
+hash_func.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_func.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_meta.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_meta.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_meta.c_objects
+hash_meta.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_meta.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_method.c_objects
+hash_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_open.c_objects
+hash_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_page.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_page.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_page.c_objects
+hash_page.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_page.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_rec.c_objects
+hash_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_reclaim.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_reclaim.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_reclaim.c_objects
+hash_reclaim.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_reclaim.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_stat.c_objects
+hash_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_upgrade.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_upgrade.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_upgrade.c_objects
+hash_upgrade.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_upgrade.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_verify.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_verify.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_verify.c_objects
+hash_verify.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hash/hash_verify.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/hmac.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/hmac.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/hmac.c_objects
+hmac.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/hmac.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/sha1.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/sha1.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/sha1.c_objects
+sha1.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hmac/sha1.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hsearch/hsearch.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hsearch/hsearch.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hsearch/hsearch.c_objects
+hsearch.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../hsearch/hsearch.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock.c_objects
+lock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_deadlock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_deadlock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_deadlock.c_objects
+lock_deadlock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_deadlock.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_method.c_objects
+lock_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_region.c_objects
+lock_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_stat.c_objects
+lock_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_util.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_util.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_util.c_objects
+lock_util.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../lock/lock_util.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log.c_objects
+log.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_archive.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_archive.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_archive.c_objects
+log_archive.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_archive.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_compare.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_compare.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_compare.c_objects
+log_compare.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_compare.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_objects
+log_get.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_get.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_method.c_objects
+log_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_put.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_put.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_put.c_objects
+log_put.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../log/log_put.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_alloc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_alloc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_alloc.c_objects
+mp_alloc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_alloc.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_bh.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_bh.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_bh.c_objects
+mp_bh.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_bh.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fget.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fget.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fget.c_objects
+mp_fget.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fget.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fopen.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fopen.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fopen.c_objects
+mp_fopen.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fopen.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fput.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fput.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fput.c_objects
+mp_fput.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fput.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fset.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fset.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fset.c_objects
+mp_fset.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_fset.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_method.c_objects
+mp_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_objects
+mp_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_register.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_register.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_register.c_objects
+mp_register.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_register.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_stat.c_objects
+mp_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_sync.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_sync.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_sync.c_objects
+mp_sync.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_sync.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_trickle.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_trickle.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_trickle.c_objects
+mp_trickle.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mp/mp_trickle.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_objects
+mut_tas.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mut_tas.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_objects
+mutex.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../mutex/mutex.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_alloc.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_alloc.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_alloc.c_objects
+os_alloc.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_alloc.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_clock.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_clock.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_clock.c_objects
+os_clock.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_clock.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_dir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_dir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_dir.c_objects
+os_dir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_dir.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_errno.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_errno.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_errno.c_objects
+os_errno.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_errno.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fid.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fid.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fid.c_objects
+os_fid.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fid.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_objects
+os_fsync.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_fsync.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_objects
+os_handle.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_handle.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_objects
+os_id.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_id.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_method.c_objects
+os_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_objects
+os_oflags.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_oflags.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_open.c_objects
+os_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_objects
+os_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rename.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rename.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rename.c_objects
+os_rename.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rename.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_root.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_root.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_root.c_objects
+os_root.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_root.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rpath.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rpath.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rpath.c_objects
+os_rpath.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rpath.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rw.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rw.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rw.c_objects
+os_rw.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_rw.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_seek.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_seek.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_seek.c_objects
+os_seek.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_seek.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_sleep.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_sleep.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_sleep.c_objects
+os_sleep.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_sleep.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_spin.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_spin.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_spin.c_objects
+os_spin.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_spin.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_stat.c_objects
+os_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_tmpdir.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_tmpdir.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_tmpdir.c_objects
+os_tmpdir.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_tmpdir.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_objects
+os_unlink.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os/os_unlink.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_objects
+os_vx_abs.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_abs.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_config.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_config.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_config.c_objects
+os_vx_config.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_config.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_map.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_map.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_map.c_objects
+os_vx_map.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../os_vxworks/os_vx_map.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_objects
+qam.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_auto.c_objects
+qam_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_conv.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_conv.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_conv.c_objects
+qam_conv.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_conv.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_files.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_files.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_files.c_objects
+qam_files.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_files.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_method.c_objects
+qam_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_open.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_open.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_open.c_objects
+qam_open.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_open.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_rec.c_objects
+qam_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stat.c_objects
+qam_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_upgrade.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_upgrade.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_upgrade.c_objects
+qam_upgrade.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_upgrade.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_verify.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_verify.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_verify.c_objects
+qam_verify.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../qam/qam_verify.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_objects
+rep_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_record.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_record.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_record.c_objects
+rep_record.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_record.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_region.c_objects
+rep_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_util.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_util.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_util.c_objects
+rep_util.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rep/rep_util.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/client.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/client.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/client.c_objects
+client.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/client.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/db_server_clnt.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/db_server_clnt.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/db_server_clnt.c_objects
+db_server_clnt.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/db_server_clnt.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client.c_objects
+gen_client.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client_ret.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client_ret.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client_ret.c_objects
+gen_client_ret.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_client/gen_client_ret.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_server/c/db_server_xdr.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_server/c/db_server_xdr.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_server/c/db_server_xdr.c_objects
+db_server_xdr.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../rpc_server/c/db_server_xdr.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_objects
+txn.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_auto.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_auto.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_auto.c_objects
+txn_auto.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_auto.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_objects
+txn_method.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_method.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_rec.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_rec.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_rec.c_objects
+txn_rec.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_rec.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_recover.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_recover.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_recover.c_objects
+txn_recover.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_recover.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_region.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_region.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_region.c_objects
+txn_region.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_region.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_stat.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_stat.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_stat.c_objects
+txn_stat.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_util.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_util.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_util.c_objects
+txn_util.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../txn/txn_util.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa.c_objects
+xa.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_db.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_db.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_db.c_objects
+xa_db.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_db.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_map.c_dependDone
+TRUE
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_map.c_dependencies
+$(PRJ_DIR)/db_config.h \
+ $(PRJ_DIR)/db_int.h \
+ $(PRJ_DIR)/db.h
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_map.c_objects
+xa_map.o
+<END>
+
+<BEGIN> FILE_$(PRJ_DIR)/../xa/xa_map.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/../btree/bt_compare.c \
+ $(PRJ_DIR)/../btree/bt_conv.c \
+ $(PRJ_DIR)/../btree/bt_curadj.c \
+ $(PRJ_DIR)/../btree/bt_cursor.c \
+ $(PRJ_DIR)/../btree/bt_delete.c \
+ $(PRJ_DIR)/../btree/bt_method.c \
+ $(PRJ_DIR)/../btree/bt_open.c \
+ $(PRJ_DIR)/../btree/bt_put.c \
+ $(PRJ_DIR)/../btree/bt_rec.c \
+ $(PRJ_DIR)/../btree/bt_reclaim.c \
+ $(PRJ_DIR)/../btree/bt_recno.c \
+ $(PRJ_DIR)/../btree/bt_rsearch.c \
+ $(PRJ_DIR)/../btree/bt_search.c \
+ $(PRJ_DIR)/../btree/bt_split.c \
+ $(PRJ_DIR)/../btree/bt_stat.c \
+ $(PRJ_DIR)/../btree/bt_upgrade.c \
+ $(PRJ_DIR)/../btree/bt_verify.c \
+ $(PRJ_DIR)/../btree/btree_auto.c \
+ $(PRJ_DIR)/../clib/getopt.c \
+ $(PRJ_DIR)/../clib/snprintf.c \
+ $(PRJ_DIR)/../clib/strcasecmp.c \
+ $(PRJ_DIR)/../clib/strdup.c \
+ $(PRJ_DIR)/../clib/vsnprintf.c \
+ $(PRJ_DIR)/../common/db_byteorder.c \
+ $(PRJ_DIR)/../common/db_err.c \
+ $(PRJ_DIR)/../common/db_getlong.c \
+ $(PRJ_DIR)/../common/db_idspace.c \
+ $(PRJ_DIR)/../common/db_log2.c \
+ $(PRJ_DIR)/../common/util_arg.c \
+ $(PRJ_DIR)/../common/util_cache.c \
+ $(PRJ_DIR)/../common/util_log.c \
+ $(PRJ_DIR)/../common/util_sig.c \
+ $(PRJ_DIR)/../crypto/aes_method.c \
+ $(PRJ_DIR)/../crypto/crypto.c \
+ $(PRJ_DIR)/../crypto/mersenne/mt19937db.c \
+ $(PRJ_DIR)/../crypto/rijndael/rijndael-alg-fst.c \
+ $(PRJ_DIR)/../crypto/rijndael/rijndael-api-fst.c \
+ $(PRJ_DIR)/../db/crdel_auto.c \
+ $(PRJ_DIR)/../db/crdel_rec.c \
+ $(PRJ_DIR)/../db/db.c \
+ $(PRJ_DIR)/../db/db_am.c \
+ $(PRJ_DIR)/../db/db_auto.c \
+ $(PRJ_DIR)/../db/db_cam.c \
+ $(PRJ_DIR)/../db/db_conv.c \
+ $(PRJ_DIR)/../db/db_dispatch.c \
+ $(PRJ_DIR)/../db/db_dup.c \
+ $(PRJ_DIR)/../db/db_iface.c \
+ $(PRJ_DIR)/../db/db_join.c \
+ $(PRJ_DIR)/../db/db_meta.c \
+ $(PRJ_DIR)/../db/db_method.c \
+ $(PRJ_DIR)/../db/db_open.c \
+ $(PRJ_DIR)/../db/db_overflow.c \
+ $(PRJ_DIR)/../db/db_ovfl_vrfy.c \
+ $(PRJ_DIR)/../db/db_pr.c \
+ $(PRJ_DIR)/../db/db_rec.c \
+ $(PRJ_DIR)/../db/db_reclaim.c \
+ $(PRJ_DIR)/../db/db_remove.c \
+ $(PRJ_DIR)/../db/db_rename.c \
+ $(PRJ_DIR)/../db/db_ret.c \
+ $(PRJ_DIR)/../db/db_truncate.c \
+ $(PRJ_DIR)/../db/db_upg.c \
+ $(PRJ_DIR)/../db/db_upg_opd.c \
+ $(PRJ_DIR)/../db/db_vrfy.c \
+ $(PRJ_DIR)/../db/db_vrfyutil.c \
+ $(PRJ_DIR)/../dbreg/dbreg.c \
+ $(PRJ_DIR)/../dbreg/dbreg_auto.c \
+ $(PRJ_DIR)/../dbreg/dbreg_rec.c \
+ $(PRJ_DIR)/../dbreg/dbreg_util.c \
+ $(PRJ_DIR)/../env/db_salloc.c \
+ $(PRJ_DIR)/../env/db_shash.c \
+ $(PRJ_DIR)/../env/env_file.c \
+ $(PRJ_DIR)/../env/env_method.c \
+ $(PRJ_DIR)/../env/env_open.c \
+ $(PRJ_DIR)/../env/env_recover.c \
+ $(PRJ_DIR)/../env/env_region.c \
+ $(PRJ_DIR)/../fileops/fileops_auto.c \
+ $(PRJ_DIR)/../fileops/fop_basic.c \
+ $(PRJ_DIR)/../fileops/fop_rec.c \
+ $(PRJ_DIR)/../fileops/fop_util.c \
+ $(PRJ_DIR)/../hash/hash.c \
+ $(PRJ_DIR)/../hash/hash_auto.c \
+ $(PRJ_DIR)/../hash/hash_conv.c \
+ $(PRJ_DIR)/../hash/hash_dup.c \
+ $(PRJ_DIR)/../hash/hash_func.c \
+ $(PRJ_DIR)/../hash/hash_meta.c \
+ $(PRJ_DIR)/../hash/hash_method.c \
+ $(PRJ_DIR)/../hash/hash_open.c \
+ $(PRJ_DIR)/../hash/hash_page.c \
+ $(PRJ_DIR)/../hash/hash_rec.c \
+ $(PRJ_DIR)/../hash/hash_reclaim.c \
+ $(PRJ_DIR)/../hash/hash_stat.c \
+ $(PRJ_DIR)/../hash/hash_upgrade.c \
+ $(PRJ_DIR)/../hash/hash_verify.c \
+ $(PRJ_DIR)/../hmac/hmac.c \
+ $(PRJ_DIR)/../hmac/sha1.c \
+ $(PRJ_DIR)/../hsearch/hsearch.c \
+ $(PRJ_DIR)/../lock/lock.c \
+ $(PRJ_DIR)/../lock/lock_deadlock.c \
+ $(PRJ_DIR)/../lock/lock_method.c \
+ $(PRJ_DIR)/../lock/lock_region.c \
+ $(PRJ_DIR)/../lock/lock_stat.c \
+ $(PRJ_DIR)/../lock/lock_util.c \
+ $(PRJ_DIR)/../log/log.c \
+ $(PRJ_DIR)/../log/log_archive.c \
+ $(PRJ_DIR)/../log/log_compare.c \
+ $(PRJ_DIR)/../log/log_get.c \
+ $(PRJ_DIR)/../log/log_method.c \
+ $(PRJ_DIR)/../log/log_put.c \
+ $(PRJ_DIR)/../mp/mp_alloc.c \
+ $(PRJ_DIR)/../mp/mp_bh.c \
+ $(PRJ_DIR)/../mp/mp_fget.c \
+ $(PRJ_DIR)/../mp/mp_fopen.c \
+ $(PRJ_DIR)/../mp/mp_fput.c \
+ $(PRJ_DIR)/../mp/mp_fset.c \
+ $(PRJ_DIR)/../mp/mp_method.c \
+ $(PRJ_DIR)/../mp/mp_region.c \
+ $(PRJ_DIR)/../mp/mp_register.c \
+ $(PRJ_DIR)/../mp/mp_stat.c \
+ $(PRJ_DIR)/../mp/mp_sync.c \
+ $(PRJ_DIR)/../mp/mp_trickle.c \
+ $(PRJ_DIR)/../mutex/mut_tas.c \
+ $(PRJ_DIR)/../mutex/mutex.c \
+ $(PRJ_DIR)/../os/os_alloc.c \
+ $(PRJ_DIR)/../os/os_clock.c \
+ $(PRJ_DIR)/../os/os_dir.c \
+ $(PRJ_DIR)/../os/os_errno.c \
+ $(PRJ_DIR)/../os/os_fid.c \
+ $(PRJ_DIR)/../os/os_fsync.c \
+ $(PRJ_DIR)/../os/os_handle.c \
+ $(PRJ_DIR)/../os/os_id.c \
+ $(PRJ_DIR)/../os/os_method.c \
+ $(PRJ_DIR)/../os/os_oflags.c \
+ $(PRJ_DIR)/../os/os_open.c \
+ $(PRJ_DIR)/../os/os_region.c \
+ $(PRJ_DIR)/../os/os_rename.c \
+ $(PRJ_DIR)/../os/os_root.c \
+ $(PRJ_DIR)/../os/os_rpath.c \
+ $(PRJ_DIR)/../os/os_rw.c \
+ $(PRJ_DIR)/../os/os_seek.c \
+ $(PRJ_DIR)/../os/os_sleep.c \
+ $(PRJ_DIR)/../os/os_spin.c \
+ $(PRJ_DIR)/../os/os_stat.c \
+ $(PRJ_DIR)/../os/os_tmpdir.c \
+ $(PRJ_DIR)/../os/os_unlink.c \
+ $(PRJ_DIR)/../os_vxworks/os_vx_abs.c \
+ $(PRJ_DIR)/../os_vxworks/os_vx_config.c \
+ $(PRJ_DIR)/../os_vxworks/os_vx_map.c \
+ $(PRJ_DIR)/../qam/qam.c \
+ $(PRJ_DIR)/../qam/qam_auto.c \
+ $(PRJ_DIR)/../qam/qam_conv.c \
+ $(PRJ_DIR)/../qam/qam_files.c \
+ $(PRJ_DIR)/../qam/qam_method.c \
+ $(PRJ_DIR)/../qam/qam_open.c \
+ $(PRJ_DIR)/../qam/qam_rec.c \
+ $(PRJ_DIR)/../qam/qam_stat.c \
+ $(PRJ_DIR)/../qam/qam_upgrade.c \
+ $(PRJ_DIR)/../qam/qam_verify.c \
+ $(PRJ_DIR)/../rep/rep_method.c \
+ $(PRJ_DIR)/../rep/rep_record.c \
+ $(PRJ_DIR)/../rep/rep_region.c \
+ $(PRJ_DIR)/../rep/rep_util.c \
+ $(PRJ_DIR)/../rpc_client/client.c \
+ $(PRJ_DIR)/../rpc_client/db_server_clnt.c \
+ $(PRJ_DIR)/../rpc_client/gen_client.c \
+ $(PRJ_DIR)/../rpc_client/gen_client_ret.c \
+ $(PRJ_DIR)/../rpc_server/c/db_server_xdr.c \
+ $(PRJ_DIR)/../txn/txn.c \
+ $(PRJ_DIR)/../txn/txn_auto.c \
+ $(PRJ_DIR)/../txn/txn_method.c \
+ $(PRJ_DIR)/../txn/txn_rec.c \
+ $(PRJ_DIR)/../txn/txn_recover.c \
+ $(PRJ_DIR)/../txn/txn_region.c \
+ $(PRJ_DIR)/../txn/txn_stat.c \
+ $(PRJ_DIR)/../txn/txn_util.c \
+ $(PRJ_DIR)/../xa/xa.c \
+ $(PRJ_DIR)/../xa/xa_db.c \
+ $(PRJ_DIR)/../xa/xa_map.c
+<END>
+
+<BEGIN> userComments
+BerkeleyDB
+<END>
diff --git a/db/build_vxworks/BerkeleyDB22.wsp b/db/build_vxworks/BerkeleyDB22.wsp
new file mode 100755
index 000000000..4727a9012
--- /dev/null
+++ b/db/build_vxworks/BerkeleyDB22.wsp
@@ -0,0 +1,29 @@
+Document file - DO NOT EDIT
+
+<BEGIN> CORE_INFO_TYPE
+Workspace
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> projectList
+$(PRJ_DIR)/BerkeleyDB22.wpj \
+ $(PRJ_DIR)/db_archive/db_archive22.wpj \
+ $(PRJ_DIR)/db_checkpoint/db_checkpoint22.wpj \
+ $(PRJ_DIR)/db_deadlock/db_deadlock22.wpj \
+ $(PRJ_DIR)/db_dump/db_dump22.wpj \
+ $(PRJ_DIR)/db_load/db_load22.wpj \
+ $(PRJ_DIR)/db_printlog/db_printlog22.wpj \
+ $(PRJ_DIR)/db_recover/db_recover22.wpj \
+ $(PRJ_DIR)/db_stat/db_stat22.wpj \
+ $(PRJ_DIR)/db_upgrade/db_upgrade22.wpj \
+ $(PRJ_DIR)/db_verify/db_verify22.wpj \
+ $(PRJ_DIR)/dbdemo/dbdemo22.wpj
+<END>
+
+<BEGIN> userComments
+
+<END>
+
diff --git a/db/build_vxworks/db.h b/db/build_vxworks/db.h
index 5a71d034e..b9aaad78e 100644
--- a/db/build_vxworks/db.h
+++ b/db/build_vxworks/db.h
@@ -2,10 +2,10 @@
/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db.in,v 11.323 2002/09/03 17:27:16 bostic Exp
+ * $Id: db.in,v 11.389 2003/10/01 21:33:58 sue Exp $
*
* db.h include file layout:
* General.
@@ -25,6 +25,7 @@
#ifndef __NO_SYSTEM_INCLUDES
#include <sys/types.h>
+/* <sys/types.h> does not include <inttypes.h> on some systems. */
#include <stdio.h>
#endif
@@ -37,32 +38,17 @@ extern "C" {
#define __vxworks
#endif
-/*
- * XXX
- * Handle function prototypes and the keyword "const". This steps on name
- * space that DB doesn't control, but all of the other solutions are worse.
- *
- * XXX
- * While Microsoft's compiler is ANSI C compliant, it doesn't have _STDC_
- * defined by default, you specify a command line flag or #pragma to turn
- * it on. Don't do that, however, because some of Microsoft's own header
- * files won't compile.
- */
-#undef __P
-#if defined(__STDC__) || defined(__cplusplus) || defined(_MSC_VER)
-#define __P(protos) protos /* ANSI C prototypes */
-#else
-#define const
-#define __P(protos) () /* K&R C preprocessor */
-#endif
+
+#undef __P
+#define __P(protos) protos
/*
* Berkeley DB version information.
*/
#define DB_VERSION_MAJOR 4
-#define DB_VERSION_MINOR 1
-#define DB_VERSION_PATCH 24
-#define DB_VERSION_STRING "Sleepycat Software: Berkeley DB 4.1.24: (September 13, 2002)"
+#define DB_VERSION_MINOR 2
+#define DB_VERSION_PATCH 52
+#define DB_VERSION_STRING "Sleepycat Software: Berkeley DB 4.2.52: (December 3, 2003)"
/*
* !!!
@@ -166,17 +152,18 @@ struct __db_dbt {
* Interfaces which use any of these common flags should never have
* interface specific flags in this range.
*/
-#define DB_CREATE 0x000001 /* Create file as necessary. */
-#define DB_CXX_NO_EXCEPTIONS 0x000002 /* C++: return error values. */
-#define DB_FORCE 0x000004 /* Force (anything). */
-#define DB_NOMMAP 0x000008 /* Don't mmap underlying file. */
-#define DB_RDONLY 0x000010 /* Read-only (O_RDONLY). */
-#define DB_RECOVER 0x000020 /* Run normal recovery. */
-#define DB_THREAD 0x000040 /* Applications are threaded. */
-#define DB_TRUNCATE 0x000080 /* Discard existing DB (O_TRUNC). */
-#define DB_TXN_NOSYNC 0x000100 /* Do not sync log on commit. */
-#define DB_USE_ENVIRON 0x000200 /* Use the environment. */
-#define DB_USE_ENVIRON_ROOT 0x000400 /* Use the environment if root. */
+#define DB_CREATE 0x0000001 /* Create file as necessary. */
+#define DB_CXX_NO_EXCEPTIONS 0x0000002 /* C++: return error values. */
+#define DB_FORCE 0x0000004 /* Force (anything). */
+#define DB_NOMMAP 0x0000008 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000010 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000020 /* Run normal recovery. */
+#define DB_THREAD 0x0000040 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000080 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000100 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000200 /* Do not log changes. */
+#define DB_USE_ENVIRON 0x0000400 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0000800 /* Use the environment if root. */
/*
* Common flags --
@@ -189,113 +176,125 @@ struct __db_dbt {
* DB_DIRTY_READ:
* DB->cursor, DB->get, DB->join, DB->open, DBcursor->c_get,
* DB_ENV->txn_begin
+ * DB_NOAUTO_COMMIT
+ * DB->associate, DB->del, DB->put, DB->open,
+ * DB->remove, DB->rename, DB->truncate
*
- * Shared flags up to 0x000400 */
-#define DB_AUTO_COMMIT 0x00800000 /* Implied transaction. */
-#define DB_DIRTY_READ 0x01000000 /* Dirty Read. */
+ * !!!
+ * The DB_DIRTY_READ bit mask can't be changed without also changing the
+ * masks for the flags that can be OR'd into DB access method and cursor
+ * operation values.
+ */
+#define DB_AUTO_COMMIT 0x1000000 /* Implied transaction. */
+#define DB_DIRTY_READ 0x2000000 /* Dirty Read. */
+#define DB_NO_AUTO_COMMIT 0x4000000 /* Override env-wide AUTO-COMMIT. */
/*
* Flags private to db_env_create.
*/
-#define DB_CLIENT 0x000001 /* Open for a client environment. */
+#define DB_RPCCLIENT 0x0000001 /* An RPC client environment. */
/*
* Flags private to db_create.
*/
-#define DB_XA_CREATE 0x000001 /* Open in an XA environment. */
+#define DB_REP_CREATE 0x0000001 /* Open of an internal rep database. */
+#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
/*
* Flags private to DB_ENV->open.
- * Shared flags up to 0x000400 */
-#define DB_INIT_CDB 0x000800 /* Concurrent Access Methods. */
-#define DB_INIT_LOCK 0x001000 /* Initialize locking. */
-#define DB_INIT_LOG 0x002000 /* Initialize logging. */
-#define DB_INIT_MPOOL 0x004000 /* Initialize mpool. */
-#define DB_INIT_TXN 0x008000 /* Initialize transactions. */
-#define DB_JOINENV 0x010000 /* Initialize all subsystems present. */
-#define DB_LOCKDOWN 0x020000 /* Lock memory into physical core. */
-#define DB_PRIVATE 0x040000 /* DB_ENV is process local. */
-#define DB_RECOVER_FATAL 0x080000 /* Run catastrophic recovery. */
-#define DB_SYSTEM_MEM 0x100000 /* Use system-backed memory. */
+ * Shared flags up to 0x0000800 */
+#define DB_INIT_CDB 0x0001000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0002000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0004000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0008000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0010000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0020000 /* Initialize transactions. */
+#define DB_JOINENV 0x0040000 /* Initialize all subsystems present. */
+#define DB_LOCKDOWN 0x0080000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0100000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0200000 /* Run catastrophic recovery. */
+#define DB_SYSTEM_MEM 0x0400000 /* Use system-backed memory. */
/*
* Flags private to DB->open.
- * Shared flags up to 0x000400 */
-#define DB_EXCL 0x000800 /* Exclusive open (O_EXCL). */
-#define DB_FCNTL_LOCKING 0x001000 /* UNDOC: fcntl(2) locking. */
-#define DB_RDWRMASTER 0x002000 /* UNDOC: allow subdb master open R/W */
-#define DB_WRITEOPEN 0x004000 /* UNDOC: open with write lock. */
+ * Shared flags up to 0x0000800 */
+#define DB_EXCL 0x0001000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */
+#define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */
/*
* Flags private to DB_ENV->txn_begin.
- * Shared flags up to 0x000400 */
-#define DB_TXN_NOWAIT 0x000800 /* Do not wait for locks in this TXN. */
-#define DB_TXN_SYNC 0x001000 /* Always sync log on commit. */
+ * Shared flags up to 0x0000800 */
+#define DB_TXN_NOWAIT 0x0001000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0002000 /* Always sync log on commit. */
/*
* Flags private to DB_ENV->set_encrypt.
*/
-#define DB_ENCRYPT_AES 0x000001 /* AES, assumes SHA1 checksum */
+#define DB_ENCRYPT_AES 0x0000001 /* AES, assumes SHA1 checksum */
/*
* Flags private to DB_ENV->set_flags.
- * Shared flags up to 0x000400 */
-#define DB_CDB_ALLDB 0x000800 /* Set CDB locking per environment. */
-#define DB_DIRECT_DB 0x001000 /* Don't buffer databases in the OS. */
-#define DB_DIRECT_LOG 0x002000 /* Don't buffer log files in the OS. */
-#define DB_NOLOCKING 0x004000 /* Set locking/mutex behavior. */
-#define DB_NOPANIC 0x008000 /* Set panic state per DB_ENV. */
-#define DB_OVERWRITE 0x010000 /* Overwrite unlinked region files. */
-#define DB_PANIC_ENVIRONMENT 0x020000 /* Set panic state per environment. */
-#define DB_REGION_INIT 0x040000 /* Page-fault regions on open. */
-#define DB_TXN_WRITE_NOSYNC 0x080000 /* Write, don't sync, on txn commit. */
-#define DB_YIELDCPU 0x100000 /* Yield the CPU (a lot). */
+ * Shared flags up to 0x0000800 */
+#define DB_CDB_ALLDB 0x0001000 /* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x0002000 /* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x0004000 /* Don't buffer log files in the OS. */
+#define DB_LOG_AUTOREMOVE 0x0008000 /* Automatically remove log files. */
+#define DB_NOLOCKING 0x0010000 /* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x0020000 /* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x0040000 /* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x0080000 /* Set panic state per environment. */
+#define DB_REGION_INIT 0x0100000 /* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x0200000 /* Return NOTGRANTED on timeout. */
+#define DB_TXN_WRITE_NOSYNC 0x0400000 /* Write, don't sync, on txn commit. */
+#define DB_YIELDCPU 0x0800000 /* Yield the CPU (a lot). */
/*
* Flags private to DB->set_feedback's callback.
*/
-#define DB_UPGRADE 0x000001 /* Upgrading. */
-#define DB_VERIFY 0x000002 /* Verifying. */
+#define DB_UPGRADE 0x0000001 /* Upgrading. */
+#define DB_VERIFY 0x0000002 /* Verifying. */
/*
* Flags private to DB_MPOOLFILE->open.
- * Shared flags up to 0x000400 */
-#define DB_DIRECT 0x000800 /* Don't buffer the file in the OS. */
-#define DB_EXTENT 0x001000 /* UNDOC: dealing with an extent. */
-#define DB_ODDFILESIZE 0x002000 /* Truncate file to N * pgsize. */
+ * Shared flags up to 0x0000800 */
+#define DB_DIRECT 0x0001000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0002000 /* UNDOC: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0004000 /* Truncate file to N * pgsize. */
/*
* Flags private to DB->set_flags.
*/
-#define DB_CHKSUM_SHA1 0x000001 /* Use SHA1 checksumming */
-#define DB_DUP 0x000002 /* Btree, Hash: duplicate keys. */
-#define DB_DUPSORT 0x000004 /* Btree, Hash: duplicate keys. */
-#define DB_ENCRYPT 0x000008 /* Btree, Hash: duplicate keys. */
-#define DB_RECNUM 0x000010 /* Btree: record numbers. */
-#define DB_RENUMBER 0x000020 /* Recno: renumber on insert/delete. */
-#define DB_REVSPLITOFF 0x000040 /* Btree: turn off reverse splits. */
-#define DB_SNAPSHOT 0x000080 /* Recno: snapshot the input. */
+#define DB_CHKSUM 0x0000001 /* Do checksumming */
+#define DB_DUP 0x0000002 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x0000004 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x0000008 /* Btree, Hash: duplicate keys. */
+#define DB_RECNUM 0x0000010 /* Btree: record numbers. */
+#define DB_RENUMBER 0x0000020 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x0000040 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x0000080 /* Recno: snapshot the input. */
/*
* Flags private to the DB->stat methods.
*/
-#define DB_STAT_CLEAR 0x000001 /* Clear stat after returning values. */
+#define DB_STAT_CLEAR 0x0000001 /* Clear stat after returning values. */
/*
* Flags private to DB->join.
*/
-#define DB_JOIN_NOSORT 0x000001 /* Don't try to optimize join. */
+#define DB_JOIN_NOSORT 0x0000001 /* Don't try to optimize join. */
/*
* Flags private to DB->verify.
*/
-#define DB_AGGRESSIVE 0x000001 /* Salvage whatever could be data.*/
-#define DB_NOORDERCHK 0x000002 /* Skip sort order/hashing check. */
-#define DB_ORDERCHKONLY 0x000004 /* Only perform the order check. */
-#define DB_PR_PAGE 0x000008 /* Show page contents (-da). */
-#define DB_PR_RECOVERYTEST 0x000010 /* Recovery test (-dr). */
-#define DB_PRINTABLE 0x000020 /* Use printable format for salvage. */
-#define DB_SALVAGE 0x000040 /* Salvage what looks like data. */
+#define DB_AGGRESSIVE 0x0000001 /* Salvage whatever could be data.*/
+#define DB_NOORDERCHK 0x0000002 /* Skip sort order/hashing check. */
+#define DB_ORDERCHKONLY 0x0000004 /* Only perform the order check. */
+#define DB_PR_PAGE 0x0000008 /* Show page contents (-da). */
+#define DB_PR_RECOVERYTEST 0x0000010 /* Recovery test (-dr). */
+#define DB_PRINTABLE 0x0000020 /* Use printable format for salvage. */
+#define DB_SALVAGE 0x0000040 /* Salvage what looks like data. */
/*
* !!!
* These must not go over 0x8000, or they will collide with the flags
@@ -305,7 +304,8 @@ struct __db_dbt {
/*
* Flags private to DB->set_rep_transport's send callback.
*/
-#define DB_REP_PERMANENT 0x0001 /* Important--app. may want to flush. */
+#define DB_REP_NOBUFFER 0x0000001 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000002 /* Important--app. may want to flush. */
/*******************************************************
* Locking.
@@ -329,13 +329,12 @@ struct __db_dbt {
#define DB_LOCK_YOUNGEST 8 /* Abort youngest transaction. */
/* Flag values for lock_vec(), lock_get(). */
-#define DB_LOCK_FREE_LOCKER 0x001 /* Internal: Free locker as well. */
-#define DB_LOCK_NOWAIT 0x002 /* Don't wait on unavailable lock. */
-#define DB_LOCK_RECORD 0x004 /* Internal: record lock. */
-#define DB_LOCK_REMOVE 0x008 /* Internal: flag object removed. */
-#define DB_LOCK_SET_TIMEOUT 0x010 /* Internal: set lock timeout. */
-#define DB_LOCK_SWITCH 0x020 /* Internal: switch existing lock. */
-#define DB_LOCK_UPGRADE 0x040 /* Internal: upgrade existing lock. */
+#define DB_LOCK_NOWAIT 0x001 /* Don't wait on unavailable lock. */
+#define DB_LOCK_RECORD 0x002 /* Internal: record lock. */
+#define DB_LOCK_REMOVE 0x004 /* Internal: flag object removed. */
+#define DB_LOCK_SET_TIMEOUT 0x008 /* Internal: set lock timeout. */
+#define DB_LOCK_SWITCH 0x010 /* Internal: switch existing lock. */
+#define DB_LOCK_UPGRADE 0x020 /* Internal: upgrade existing lock. */
/*
* Simple R/W lock modes and for multi-granularity intention locking.
@@ -430,7 +429,6 @@ struct __db_ilock {
#define DB_HANDLE_LOCK 1
#define DB_RECORD_LOCK 2
#define DB_PAGE_LOCK 3
-#define DB_TXN_LOCK 4
u_int32_t type; /* Type of lock. */
};
@@ -459,14 +457,24 @@ struct __db_lockreq {
/*******************************************************
* Logging.
*******************************************************/
-#define DB_LOGVERSION 7 /* Current log version. */
-#define DB_LOGOLDVER 7 /* Oldest log version supported. */
+#define DB_LOGVERSION 8 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
#define DB_LOGMAGIC 0x040988
-/* Flag values for log_archive(). */
-#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
-#define DB_ARCH_DATA 0x002 /* Data files. */
-#define DB_ARCH_LOG 0x004 /* Log files. */
+/* Flag values for DB_ENV->log_archive(). */
+#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
+#define DB_ARCH_DATA 0x002 /* Data files. */
+#define DB_ARCH_LOG 0x004 /* Log files. */
+#define DB_ARCH_REMOVE 0x008 /* Remove log files. */
+
+/* Flag values for DB_ENV->log_put(). */
+#define DB_FLUSH 0x001 /* Flush data to disk (public). */
+#define DB_LOG_CHKPNT 0x002 /* Flush supports a checkpoint */
+#define DB_LOG_COMMIT 0x004 /* Flush supports a commit */
+#define DB_LOG_NOCOPY 0x008 /* Don't copy data */
+#define DB_LOG_NOT_DURABLE 0x010 /* Do not log; keep in memory */
+#define DB_LOG_PERM 0x020 /* Flag record with REP_PERMANENT */
+#define DB_LOG_WRNOSYNC 0x040 /* Write, don't sync log_put */
/*
* A DB_LSN has two parts, a fileid which identifies a specific file, and an
@@ -483,13 +491,25 @@ struct __db_lsn {
};
/*
+ * Application-specified log record types start at DB_user_BEGIN, and must not
+ * equal or exceed DB_debug_FLAG.
+ *
+ * DB_debug_FLAG is the high-bit of the u_int32_t that specifies a log record
+ * type. If the flag is set, it's a log record that was logged for debugging
+ * purposes only, even if it reflects a database change -- the change was part
+ * of a non-durable transaction.
+ */
+#define DB_user_BEGIN 10000
+#define DB_debug_FLAG 0x80000000
+
+/*
* DB_LOGC --
* Log cursor.
*/
struct __db_log_cursor {
DB_ENV *dbenv; /* Enclosing dbenv. */
- DB_FH *c_fh; /* File handle. */
+ DB_FH *c_fhp; /* File handle. */
DB_LSN c_lsn; /* Cursor: LSN */
u_int32_t c_len; /* Cursor: record length */
u_int32_t c_prev; /* Cursor: previous record's offset */
@@ -552,6 +572,10 @@ struct __db_log_stat {
#define DB_MPOOL_DIRTY 0x002 /* Page is modified. */
#define DB_MPOOL_DISCARD 0x004 /* Don't cache the page. */
+/* Flags values for DB_MPOOLFILE->set_flags. */
+#define DB_MPOOL_NOFILE 0x001 /* Never open a backing file. */
+#define DB_MPOOL_UNLINK 0x002 /* Unlink the file on last close. */
+
/* Priority values for DB_MPOOLFILE->set_priority. */
typedef enum {
DB_PRIORITY_VERY_LOW=1,
@@ -563,21 +587,14 @@ typedef enum {
/* Per-process DB_MPOOLFILE information. */
struct __db_mpoolfile {
- /* These fields need to be protected for multi-threaded support. */
- DB_MUTEX *mutexp; /* Structure thread lock. */
-
DB_FH *fhp; /* Underlying file handle. */
- u_int32_t ref; /* Reference count. */
-
/*
* !!!
- * The pinref and q fields are protected by the region lock, not the
- * DB_MPOOLFILE structure mutex. We don't use the structure mutex
- * because then I/O (which holds the structure lock held because of
- * the race between the seek and write of the file descriptor) would
- * block any other put/get calls using this DB_MPOOLFILE structure.
+ * The ref, pinref and q fields are protected by the region lock.
*/
+ u_int32_t ref; /* Reference count. */
+
u_int32_t pinref; /* Pinned block reference count. */
/*
@@ -591,52 +608,69 @@ struct __db_mpoolfile {
} q; /* Linked list of DB_MPOOLFILE's. */
/*
- * These fields are not thread-protected because they are initialized
- * when the file is opened and never modified.
+ * !!!
+ * The rest of the fields (with the exception of the MP_FLUSH flag)
+ * are not thread-protected, even when they may be modified at any
+ * time by the application. The reason is the DB_MPOOLFILE handle
+ * is single-threaded from the viewpoint of the application, and so
+ * the only fields needing to be thread-protected are those accessed
+ * by checkpoint or sync threads when using DB_MPOOLFILE structures
+ * to flush buffers from the cache.
*/
- int ftype; /* File type. */
- DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
- u_int8_t *fileid; /* Unique file ID. */
- int32_t lsn_offset; /* LSN offset in page. */
- u_int32_t clear_len; /* Cleared length on created pages. */
+ DB_ENV *dbenv; /* Overlying DB_ENV. */
+ MPOOLFILE *mfp; /* Underlying MPOOLFILE. */
- DB_MPOOL *dbmp; /* Overlying DB_MPOOL. */
- MPOOLFILE *mfp; /* Underlying MPOOLFILE. */
+ u_int32_t clear_len; /* Cleared length on created pages. */
+ u_int8_t /* Unique file ID. */
+ fileid[DB_FILE_ID_LEN];
+ int ftype; /* File type. */
+ int32_t lsn_offset; /* LSN offset in page. */
+ u_int32_t gbytes, bytes; /* Maximum file size. */
+ DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
+ DB_CACHE_PRIORITY /* Cache priority. */
+ priority;
- void *addr; /* Address of mmap'd region. */
- size_t len; /* Length of mmap'd region. */
+ void *addr; /* Address of mmap'd region. */
+ size_t len; /* Length of mmap'd region. */
+
+ u_int32_t config_flags; /* Flags to DB_MPOOLFILE->set_flags. */
/* Methods. */
- int (*close) __P((DB_MPOOLFILE *, u_int32_t));
- int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
- void (*get_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
- void (*last_pgno) __P((DB_MPOOLFILE *, db_pgno_t *));
- int (*open)__P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
- int (*put) __P((DB_MPOOLFILE *, void *, u_int32_t));
- void (*refcnt) __P((DB_MPOOLFILE *, db_pgno_t *));
- int (*set) __P((DB_MPOOLFILE *, void *, u_int32_t));
- int (*set_clear_len) __P((DB_MPOOLFILE *, u_int32_t));
- int (*set_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
- int (*set_ftype) __P((DB_MPOOLFILE *, int));
- int (*set_lsn_offset) __P((DB_MPOOLFILE *, int32_t));
- int (*set_pgcookie) __P((DB_MPOOLFILE *, DBT *));
- int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
- void (*set_unlink) __P((DB_MPOOLFILE *, int));
- int (*sync) __P((DB_MPOOLFILE *));
+ int (*close) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ int (*open)__P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
+ int (*put) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*set) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*get_clear_len) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_clear_len) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*set_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*get_flags) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_flags) __P((DB_MPOOLFILE *, u_int32_t, int));
+ int (*get_ftype) __P((DB_MPOOLFILE *, int *));
+ int (*set_ftype) __P((DB_MPOOLFILE *, int));
+ int (*get_lsn_offset) __P((DB_MPOOLFILE *, int32_t *));
+ int (*set_lsn_offset) __P((DB_MPOOLFILE *, int32_t));
+ int (*get_maxsize) __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t *));
+ int (*set_maxsize) __P((DB_MPOOLFILE *, u_int32_t, u_int32_t));
+ int (*get_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*set_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*get_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
+ int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
+ int (*sync) __P((DB_MPOOLFILE *));
/*
- * MP_OPEN_CALLED and MP_READONLY do not need to be thread protected
- * because they are initialized when the file is opened, and never
- * modified.
+ * MP_FILEID_SET, MP_OPEN_CALLED and MP_READONLY do not need to be
+ * thread protected because they are initialized before the file is
+ * linked onto the per-process lists, and never modified.
*
- * MP_FLUSH, MP_UPGRADE and MP_UPGRADE_FAIL are thread protected
- * becase they are potentially read by multiple threads of control.
+ * MP_FLUSH is thread protected becase it is potentially read/set by
+ * multiple threads of control.
*/
-#define MP_FLUSH 0x001 /* Was opened to flush a buffer. */
-#define MP_OPEN_CALLED 0x002 /* File opened. */
-#define MP_READONLY 0x004 /* File is readonly. */
-#define MP_UPGRADE 0x008 /* File descriptor is readwrite. */
-#define MP_UPGRADE_FAIL 0x010 /* Upgrade wasn't possible. */
+#define MP_FILEID_SET 0x001 /* Application supplied a file ID. */
+#define MP_FLUSH 0x002 /* Was opened to flush a buffer. */
+#define MP_OPEN_CALLED 0x004 /* File opened. */
+#define MP_READONLY 0x008 /* File is readonly. */
u_int32_t flags;
};
@@ -720,6 +754,7 @@ struct __db_txn {
DB_TXN *parent; /* Pointer to transaction's parent. */
DB_LSN last_lsn; /* Lsn of last log write. */
u_int32_t txnid; /* Unique transaction id. */
+ u_int32_t tid; /* Thread id for use in MT XA. */
roff_t off; /* Detail structure within region. */
db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
db_timeout_t expire; /* Time this txn expires. */
@@ -729,11 +764,16 @@ struct __db_txn {
* !!!
* Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_txn) links;
+ * TAILQ_ENTRY(__db_txn) xalinks;
*/
struct {
struct __db_txn *tqe_next;
struct __db_txn **tqe_prev;
} links; /* Links transactions off manager. */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } xalinks; /* Links active XA transactions. */
/*
* !!!
@@ -748,6 +788,16 @@ struct __db_txn {
/*
* !!!
* Explicit representations of structures from queue.h.
+ * STAILQ_HEAD(__logrec, __txn_logrec) logs;
+ */
+ struct {
+ struct __txn_logrec *stqh_first;
+ struct __txn_logrec **stqh_last;
+ } logs; /* Links deferred events. */
+
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
* TAILQ_HEAD(__kids, __db_txn) kids;
*/
struct __kids {
@@ -778,22 +828,39 @@ struct __db_txn {
int (*prepare) __P((DB_TXN *, u_int8_t *));
int (*set_timeout) __P((DB_TXN *, db_timeout_t, u_int32_t));
-#define TXN_CHILDCOMMIT 0x01 /* Transaction that has committed. */
-#define TXN_COMPENSATE 0x02 /* Compensating transaction. */
-#define TXN_DIRTY_READ 0x04 /* Transaction does dirty reads. */
-#define TXN_LOCKTIMEOUT 0x08 /* Transaction has a lock timeout. */
-#define TXN_MALLOC 0x10 /* Structure allocated by TXN system. */
-#define TXN_NOSYNC 0x20 /* Do not sync on prepare and commit. */
-#define TXN_NOWAIT 0x40 /* Do not wait on locks. */
-#define TXN_SYNC 0x80 /* Sync on prepare and commit. */
+#define TXN_CHILDCOMMIT 0x001 /* Transaction that has committed. */
+#define TXN_COMPENSATE 0x002 /* Compensating transaction. */
+#define TXN_DIRTY_READ 0x004 /* Transaction does dirty reads. */
+#define TXN_LOCKTIMEOUT 0x008 /* Transaction has a lock timeout. */
+#define TXN_MALLOC 0x010 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x020 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x040 /* Do not wait on locks. */
+#define TXN_RESTORED 0x080 /* Transaction has been restored. */
+#define TXN_SYNC 0x100 /* Sync on prepare and commit. */
u_int32_t flags;
};
+/*
+ * Structure used for two phase commit interface. Berkeley DB support for two
+ * phase commit is compatible with the X/open XA interface.
+ *
+ * The XA #define XIDDATASIZE defines the size of a global transaction ID. We
+ * have our own version here (for name space reasons) which must have the same
+ * value.
+ */
+#define DB_XIDDATASIZE 128
+struct __db_preplist {
+ DB_TXN *txn;
+ u_int8_t gid[DB_XIDDATASIZE];
+};
+
/* Transaction statistics structure. */
struct __db_txn_active {
- u_int32_t txnid; /* Transaction ID */
- u_int32_t parentid; /* Transaction ID of parent */
- DB_LSN lsn; /* LSN when transaction began */
+ u_int32_t txnid; /* Transaction ID */
+ u_int32_t parentid; /* Transaction ID of parent */
+ DB_LSN lsn; /* LSN when transaction began */
+ u_int32_t xa_status; /* XA status */
+ u_int8_t xid[DB_XIDDATASIZE]; /* XA global transaction ID */
};
struct __db_txn_stat {
@@ -814,18 +881,6 @@ struct __db_txn_stat {
u_int32_t st_regsize; /* Region size. */
};
-/*
- * Structure used for two phase commit interface. Berkeley DB support for two
- * phase commit is compatible with the X/open XA interface. The xa #define
- * XIDDATASIZE defines the size of a global transaction ID. We have our own
- * version here which must have the same value.
- */
-#define DB_XIDDATASIZE 128
-struct __db_preplist {
- DB_TXN *txn;
- u_int8_t gid[DB_XIDDATASIZE];
-};
-
/*******************************************************
* Replication.
*******************************************************/
@@ -858,6 +913,7 @@ struct __db_rep_stat {
int st_env_id; /* Current environment ID. */
int st_env_priority; /* Current environment priority. */
u_int32_t st_gen; /* Current generation number. */
+ u_int32_t st_in_recovery; /* This site is in client sync-up. */
u_int32_t st_log_duplicated; /* Log records received multiply.+ */
u_int32_t st_log_queued; /* Log records currently queued.+ */
u_int32_t st_log_queued_max; /* Max. log records queued at once.+ */
@@ -928,51 +984,50 @@ typedef enum {
#define DB_APPEND 2 /* put() */
#define DB_BEFORE 3 /* c_put() */
#define DB_CACHED_COUNTS 4 /* stat() */
-#define DB_COMMIT 5 /* log_put() (internal) */
-#define DB_CONSUME 6 /* get() */
-#define DB_CONSUME_WAIT 7 /* get() */
-#define DB_CURRENT 8 /* c_get(), c_put(), DB_LOGC->get() */
-#define DB_FAST_STAT 9 /* stat() */
-#define DB_FIRST 10 /* c_get(), DB_LOGC->get() */
-#define DB_GET_BOTH 11 /* get(), c_get() */
-#define DB_GET_BOTHC 12 /* c_get() (internal) */
-#define DB_GET_BOTH_RANGE 13 /* get(), c_get() */
-#define DB_GET_RECNO 14 /* c_get() */
-#define DB_JOIN_ITEM 15 /* c_get(); do not do primary lookup */
-#define DB_KEYFIRST 16 /* c_put() */
-#define DB_KEYLAST 17 /* c_put() */
-#define DB_LAST 18 /* c_get(), DB_LOGC->get() */
-#define DB_NEXT 19 /* c_get(), DB_LOGC->get() */
-#define DB_NEXT_DUP 20 /* c_get() */
-#define DB_NEXT_NODUP 21 /* c_get() */
-#define DB_NODUPDATA 22 /* put(), c_put() */
-#define DB_NOOVERWRITE 23 /* put() */
-#define DB_NOSYNC 24 /* close() */
-#define DB_POSITION 25 /* c_dup() */
-#define DB_POSITIONI 26 /* c_dup() (internal) */
-#define DB_PREV 27 /* c_get(), DB_LOGC->get() */
-#define DB_PREV_NODUP 28 /* c_get(), DB_LOGC->get() */
-#define DB_RECORDCOUNT 29 /* stat() */
-#define DB_SET 30 /* c_get(), DB_LOGC->get() */
-#define DB_SET_LOCK_TIMEOUT 31 /* set_timout() */
-#define DB_SET_RANGE 32 /* c_get() */
-#define DB_SET_RECNO 33 /* get(), c_get() */
-#define DB_SET_TXN_NOW 34 /* set_timout() (internal) */
-#define DB_SET_TXN_TIMEOUT 35 /* set_timout() */
-#define DB_UPDATE_SECONDARY 36 /* c_get(), c_del() (internal) */
-#define DB_WRITECURSOR 37 /* cursor() */
-#define DB_WRITELOCK 38 /* cursor() (internal) */
+#define DB_CONSUME 5 /* get() */
+#define DB_CONSUME_WAIT 6 /* get() */
+#define DB_CURRENT 7 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FAST_STAT 8 /* stat() */
+#define DB_FIRST 9 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 10 /* get(), c_get() */
+#define DB_GET_BOTHC 11 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 12 /* get(), c_get() */
+#define DB_GET_RECNO 13 /* c_get() */
+#define DB_JOIN_ITEM 14 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 15 /* c_put() */
+#define DB_KEYLAST 16 /* c_put() */
+#define DB_LAST 17 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 18 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 19 /* c_get() */
+#define DB_NEXT_NODUP 20 /* c_get() */
+#define DB_NODUPDATA 21 /* put(), c_put() */
+#define DB_NOOVERWRITE 22 /* put() */
+#define DB_NOSYNC 23 /* close() */
+#define DB_POSITION 24 /* c_dup() */
+#define DB_PREV 25 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 26 /* c_get(), DB_LOGC->get() */
+#define DB_RECORDCOUNT 27 /* stat() */
+#define DB_SET 28 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 29 /* set_timout() */
+#define DB_SET_RANGE 30 /* c_get() */
+#define DB_SET_RECNO 31 /* get(), c_get() */
+#define DB_SET_TXN_NOW 32 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 33 /* set_timout() */
+#define DB_UPDATE_SECONDARY 34 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 35 /* cursor() */
+#define DB_WRITELOCK 36 /* cursor() (internal) */
/* This has to change when the max opcode hits 255. */
#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
-/* DB_DIRTY_READ 0x01000000 Dirty Read. */
-#define DB_FLUSH 0x02000000 /* Flush data to disk. */
+
+/*
+ * Masks for flags that can be OR'd into DB access method and cursor
+ * operation values.
+ *
+ * DB_DIRTY_READ 0x02000000 Dirty Read. */
#define DB_MULTIPLE 0x04000000 /* Return multiple data values. */
#define DB_MULTIPLE_KEY 0x08000000 /* Return multiple data/key pairs. */
-#define DB_NOCOPY 0x10000000 /* Don't copy data */
-#define DB_PERMANENT 0x20000000 /* Flag record with REP_PERMANENT. */
-#define DB_RMW 0x40000000 /* Acquire write flag immediately. */
-#define DB_WRNOSYNC 0x80000000 /* Private: write, don't sync log_put */
+#define DB_RMW 0x10000000 /* Acquire write flag immediately. */
/*
* DB (user visible) error return codes.
@@ -990,38 +1045,41 @@ typedef enum {
*/
/* DB (public) error return codes. */
#define DB_DONOTINDEX (-30999)/* "Null" return from 2ndary callbk. */
-#define DB_KEYEMPTY (-30998)/* Key/data deleted or never created. */
-#define DB_KEYEXIST (-30997)/* The key/data pair already exists. */
-#define DB_LOCK_DEADLOCK (-30996)/* Deadlock. */
-#define DB_LOCK_NOTGRANTED (-30995)/* Lock unavailable. */
-#define DB_NOSERVER (-30994)/* Server panic return. */
-#define DB_NOSERVER_HOME (-30993)/* Bad home sent to server. */
-#define DB_NOSERVER_ID (-30992)/* Bad ID sent to server. */
-#define DB_NOTFOUND (-30991)/* Key/data pair not found (EOF). */
-#define DB_OLD_VERSION (-30990)/* Out-of-date version. */
-#define DB_PAGE_NOTFOUND (-30989)/* Requested page not found. */
-#define DB_REP_DUPMASTER (-30988)/* There are two masters. */
-#define DB_REP_HOLDELECTION (-30987)/* Time to hold an election. */
-#define DB_REP_NEWMASTER (-30986)/* We have learned of a new master. */
-#define DB_REP_NEWSITE (-30985)/* New site entered system. */
-#define DB_REP_OUTDATED (-30984)/* Site is too far behind master. */
-#define DB_REP_UNAVAIL (-30983)/* Site cannot currently be reached. */
-#define DB_RUNRECOVERY (-30982)/* Panic return. */
-#define DB_SECONDARY_BAD (-30981)/* Secondary index corrupt. */
-#define DB_VERIFY_BAD (-30980)/* Verify failed; bad format. */
+#define DB_FILEOPEN (-30998)/* Rename/remove while file is open. */
+#define DB_KEYEMPTY (-30997)/* Key/data deleted or never created. */
+#define DB_KEYEXIST (-30996)/* The key/data pair already exists. */
+#define DB_LOCK_DEADLOCK (-30995)/* Deadlock. */
+#define DB_LOCK_NOTGRANTED (-30994)/* Lock unavailable. */
+#define DB_NOSERVER (-30993)/* Server panic return. */
+#define DB_NOSERVER_HOME (-30992)/* Bad home sent to server. */
+#define DB_NOSERVER_ID (-30991)/* Bad ID sent to server. */
+#define DB_NOTFOUND (-30990)/* Key/data pair not found (EOF). */
+#define DB_OLD_VERSION (-30989)/* Out-of-date version. */
+#define DB_PAGE_NOTFOUND (-30988)/* Requested page not found. */
+#define DB_REP_DUPMASTER (-30987)/* There are two masters. */
+#define DB_REP_HANDLE_DEAD (-30986)/* Rolled back a commit. */
+#define DB_REP_HOLDELECTION (-30985)/* Time to hold an election. */
+#define DB_REP_ISPERM (-30984)/* Cached not written perm written.*/
+#define DB_REP_NEWMASTER (-30983)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30982)/* New site entered system. */
+#define DB_REP_NOTPERM (-30981)/* Permanent log record not written. */
+#define DB_REP_OUTDATED (-30980)/* Site is too far behind master. */
+#define DB_REP_UNAVAIL (-30979)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30978)/* Panic return. */
+#define DB_SECONDARY_BAD (-30977)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30976)/* Verify failed; bad format. */
/* DB (private) error return codes. */
#define DB_ALREADY_ABORTED (-30899)
#define DB_DELETED (-30898)/* Recovery file marked deleted. */
-#define DB_JAVA_CALLBACK (-30897)/* Exception during a java callback. */
-#define DB_LOCK_NOTEXIST (-30896)/* Object to lock is gone. */
-#define DB_NEEDSPLIT (-30895)/* Page needs to be split. */
-#define DB_SURPRISE_KID (-30894)/* Child commit where parent
+#define DB_LOCK_NOTEXIST (-30897)/* Object to lock is gone. */
+#define DB_NEEDSPLIT (-30896)/* Page needs to be split. */
+#define DB_SURPRISE_KID (-30895)/* Child commit where parent
didn't know it was a parent. */
-#define DB_SWAPBYTES (-30893)/* Database needs byte swapping. */
-#define DB_TIMEOUT (-30892)/* Timed out waiting for election. */
-#define DB_TXN_CKP (-30891)/* Encountered ckp record in log. */
-#define DB_VERIFY_FATAL (-30890)/* DB->verify cannot proceed. */
+#define DB_SWAPBYTES (-30894)/* Database needs byte swapping. */
+#define DB_TIMEOUT (-30893)/* Timed out waiting for election. */
+#define DB_TXN_CKP (-30892)/* Encountered ckp record in log. */
+#define DB_VERIFY_FATAL (-30891)/* DB->verify cannot proceed. */
/* Database handle. */
struct __db {
@@ -1045,10 +1103,12 @@ struct __db {
DBTYPE type; /* DB access method type. */
DB_MPOOLFILE *mpf; /* Backing buffer pool. */
- DB_CACHE_PRIORITY priority; /* Priority in the buffer pool. */
DB_MUTEX *mutexp; /* Synchronization for free threading */
+ char *fname, *dname; /* File/database passed to DB->open. */
+ u_int32_t open_flags; /* Flags passed to DB->open. */
+
u_int8_t fileid[DB_FILE_ID_LEN];/* File's unique ID for locking. */
u_int32_t adj_fileid; /* File's unique ID for curs. adj. */
@@ -1064,6 +1124,8 @@ struct __db {
long cl_id; /* RPC: remote client id. */
+ time_t timestamp; /* Handle timestamp for replication. */
+
/*
* Returned data memory for DB->get() and friends.
*/
@@ -1179,6 +1241,17 @@ struct __db {
int (*get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
int (*get_byteswapped) __P((DB *, int *));
+ int (*get_cachesize) __P((DB *, u_int32_t *, u_int32_t *, int *));
+ int (*get_dbname) __P((DB *, const char **, const char **));
+ int (*get_encrypt_flags) __P((DB *, u_int32_t *));
+ int (*get_env) __P((DB *, DB_ENV **));
+ void (*get_errfile) __P((DB *, FILE **));
+ void (*get_errpfx) __P((DB *, const char **));
+ int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_lorder) __P((DB *, int *));
+ int (*get_open_flags) __P((DB *, u_int32_t *));
+ int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_transactional) __P((DB *, int *));
int (*get_type) __P((DB *, DBTYPE *));
int (*join) __P((DB *, DBC **, DBC **, u_int32_t));
int (*key_range) __P((DB *,
@@ -1194,7 +1267,6 @@ struct __db {
int (*set_alloc) __P((DB *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
int (*set_cachesize) __P((DB *, u_int32_t, u_int32_t, int));
- int (*set_cache_priority) __P((DB *, DB_CACHE_PRIORITY));
int (*set_dup_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
int (*set_encrypt) __P((DB *, const char *, u_int32_t));
@@ -1212,6 +1284,7 @@ struct __db {
int (*verify) __P((DB *,
const char *, const char *, FILE *, u_int32_t));
+ int (*get_bt_minkey) __P((DB *, u_int32_t *));
int (*set_bt_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
int (*set_bt_maxkey) __P((DB *, u_int32_t));
@@ -1219,15 +1292,23 @@ struct __db {
int (*set_bt_prefix) __P((DB *,
size_t (*)(DB *, const DBT *, const DBT *)));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
int (*set_h_ffactor) __P((DB *, u_int32_t));
int (*set_h_hash) __P((DB *,
u_int32_t (*)(DB *, const void *, u_int32_t)));
int (*set_h_nelem) __P((DB *, u_int32_t));
+ int (*get_re_delim) __P((DB *, int *));
+ int (*get_re_len) __P((DB *, u_int32_t *));
+ int (*get_re_pad) __P((DB *, int *));
+ int (*get_re_source) __P((DB *, const char **));
int (*set_re_delim) __P((DB *, int));
int (*set_re_len) __P((DB *, u_int32_t));
int (*set_re_pad) __P((DB *, int));
int (*set_re_source) __P((DB *, const char *));
+
+ int (*get_q_extentsize) __P((DB *, u_int32_t *));
int (*set_q_extentsize) __P((DB *, u_int32_t));
int (*db_am_remove) __P((DB *,
@@ -1263,31 +1344,33 @@ struct __db {
#define DB_AM_FIXEDLEN 0x00001000 /* Fixed-length records. */
#define DB_AM_INMEM 0x00002000 /* In-memory; no sync on close. */
#define DB_AM_IN_RENAME 0x00004000 /* File is being renamed. */
-#define DB_AM_OPEN_CALLED 0x00008000 /* DB->open called. */
-#define DB_AM_PAD 0x00010000 /* Fixed-length record pad. */
-#define DB_AM_PGDEF 0x00020000 /* Page size was defaulted. */
-#define DB_AM_RDONLY 0x00040000 /* Database is readonly. */
-#define DB_AM_RECNUM 0x00080000 /* DB_RECNUM. */
-#define DB_AM_RECOVER 0x00100000 /* DB opened by recovery routine. */
-#define DB_AM_RENUMBER 0x00200000 /* DB_RENUMBER. */
-#define DB_AM_REVSPLITOFF 0x00400000 /* DB_REVSPLITOFF. */
-#define DB_AM_SECONDARY 0x00800000 /* Database is a secondary index. */
-#define DB_AM_SNAPSHOT 0x01000000 /* DB_SNAPSHOT. */
-#define DB_AM_SUBDB 0x02000000 /* Subdatabases supported. */
-#define DB_AM_SWAP 0x04000000 /* Pages need to be byte-swapped. */
-#define DB_AM_TXN 0x08000000 /* Opened in a transaction. */
-#define DB_AM_VERIFYING 0x10000000 /* DB handle is in the verifier. */
+#define DB_AM_NOT_DURABLE 0x00008000 /* Do not log changes. */
+#define DB_AM_OPEN_CALLED 0x00010000 /* DB->open called. */
+#define DB_AM_PAD 0x00020000 /* Fixed-length record pad. */
+#define DB_AM_PGDEF 0x00040000 /* Page size was defaulted. */
+#define DB_AM_RDONLY 0x00080000 /* Database is readonly. */
+#define DB_AM_RECNUM 0x00100000 /* DB_RECNUM. */
+#define DB_AM_RECOVER 0x00200000 /* DB opened by recovery routine. */
+#define DB_AM_RENUMBER 0x00400000 /* DB_RENUMBER. */
+#define DB_AM_REPLICATION 0x00800000 /* An internal replication file. */
+#define DB_AM_REVSPLITOFF 0x01000000 /* DB_REVSPLITOFF. */
+#define DB_AM_SECONDARY 0x02000000 /* Database is a secondary index. */
+#define DB_AM_SNAPSHOT 0x04000000 /* DB_SNAPSHOT. */
+#define DB_AM_SUBDB 0x08000000 /* Subdatabases supported. */
+#define DB_AM_SWAP 0x10000000 /* Pages need to be byte-swapped. */
+#define DB_AM_TXN 0x20000000 /* Opened in a transaction. */
+#define DB_AM_VERIFYING 0x40000000 /* DB handle is in the verifier. */
+ u_int32_t orig_flags; /* Flags at open, for refresh. */
u_int32_t flags;
};
/*
- * Macros for bulk get. Note that wherever we use a DBT *, we explicitly
- * cast it; this allows the same macros to work with C++ Dbt *'s, as Dbt
- * is a subclass of struct DBT in C++.
+ * Macros for bulk get. These are only intended for the C API.
+ * For C++, use DbMultiple*Iterator.
*/
#define DB_MULTIPLE_INIT(pointer, dbt) \
- (pointer = (u_int8_t *)((DBT *)(dbt))->data + \
- ((DBT *)(dbt))->ulen - sizeof(u_int32_t))
+ (pointer = (u_int8_t *)(dbt)->data + \
+ (dbt)->ulen - sizeof(u_int32_t))
#define DB_MULTIPLE_NEXT(pointer, dbt, retdata, retdlen) \
do { \
if (*((u_int32_t *)(pointer)) == (u_int32_t)-1) { \
@@ -1296,12 +1379,12 @@ struct __db {
break; \
} \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
if (retdlen == 0 && \
- retdata == (u_int8_t *)((DBT *)(dbt))->data) \
+ retdata == (u_int8_t *)(dbt)->data) \
retdata = NULL; \
} while (0)
#define DB_MULTIPLE_KEY_NEXT(pointer, dbt, retkey, retklen, retdata, retdlen) \
@@ -1313,12 +1396,12 @@ struct __db {
break; \
} \
retkey = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retklen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
@@ -1335,7 +1418,7 @@ struct __db {
recno = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
@@ -1383,7 +1466,7 @@ struct __dbc {
u_int32_t locker; /* Locker for this operation. */
DBT lock_dbt; /* DBT referencing lock. */
DB_LOCK_ILOCK lock; /* Object to be locked. */
- DB_LOCK mylock; /* Lock held on this cursor. */
+ DB_LOCK mylock; /* CDB lock held on this cursor. */
long cl_id; /* Remote client id. */
@@ -1408,9 +1491,6 @@ struct __dbc {
int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_writelock) __P((DBC *));
- /* Private: for secondary indices. */
- int (*c_real_get) __P((DBC *, DBT *, DBT *, u_int32_t));
-
#define DBC_ACTIVE 0x0001 /* Cursor in use. */
#define DBC_COMPENSATE 0x0002 /* Cursor compensating, don't lock. */
#define DBC_DIRTY_READ 0x0004 /* Cursor supports dirty reads. */
@@ -1419,11 +1499,10 @@ struct __dbc {
#define DBC_RMW 0x0020 /* Acquire write flag in read op. */
#define DBC_TRANSIENT 0x0040 /* Cursor is transient. */
#define DBC_WRITECURSOR 0x0080 /* Cursor may be used to write (CDB). */
-#define DBC_WRITEDUP 0x0100 /* idup'ed DBC_WRITECURSOR (CDB). */
-#define DBC_WRITER 0x0200 /* Cursor immediately writing (CDB). */
-#define DBC_MULTIPLE 0x0400 /* Return Multiple data. */
-#define DBC_MULTIPLE_KEY 0x0800 /* Return Multiple keys and data. */
-#define DBC_OWN_LID 0x1000 /* Free lock id on destroy. */
+#define DBC_WRITER 0x0100 /* Cursor immediately writing (CDB). */
+#define DBC_MULTIPLE 0x0200 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0400 /* Return Multiple keys and data. */
+#define DBC_OWN_LID 0x0800 /* Free lock id on destroy. */
u_int32_t flags;
};
@@ -1554,8 +1633,15 @@ struct __db_env {
size_t mp_size; /* DEPRECATED: Cachesize: bytes. */
int mp_ncache; /* Number of cache regions. */
size_t mp_mmapsize; /* Maximum file size for mmap. */
+ int mp_maxwrite; /* Maximum buffers to write. */
+ int /* Sleep after writing max buffers. */
+ mp_maxwrite_sleep;
+ /* Replication */
int rep_eid; /* environment id. */
+ int (*rep_send) /* Send function. */
+ __P((DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t));
/* Transactions. */
u_int32_t tx_max; /* Maximum number of transactions. */
@@ -1565,8 +1651,6 @@ struct __db_env {
/*******************************************************
* Private: owned by DB.
*******************************************************/
- int panic_errval; /* Panic causing errno. */
-
/* User files, paths. */
char *db_home; /* Database home. */
char *db_log_dir; /* Database log file directory. */
@@ -1577,6 +1661,7 @@ struct __db_env {
int data_next; /* Next Database data file slot. */
int db_mode; /* Default open permissions. */
+ u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
void *reginfo; /* REGINFO structure reference. */
DB_FH *lockfhp; /* fcntl(2) locking file handle. */
@@ -1618,13 +1703,17 @@ struct __db_env {
* !!!
* Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_env) links;
+ * TAILQ_HEAD(xa_txn, __db_txn);
*/
struct {
struct __db_env *tqe_next;
struct __db_env **tqe_prev;
} links;
+ struct __xa_txn { /* XA Active Transactions. */
+ struct __db_txn *tqh_first;
+ struct __db_txn **tqh_last;
+ } xa_txn;
int xa_rmid; /* XA Resource Manager ID. */
- DB_TXN *xa_txn; /* XA Current transaction. */
/* API-private structure. */
void *api1_internal; /* C++, Perl API private */
@@ -1640,36 +1729,51 @@ struct __db_env {
/* DB_ENV Methods. */
int (*close) __P((DB_ENV *, u_int32_t));
int (*dbremove) __P((DB_ENV *,
- DB_TXN *, const char *, const char *, u_int32_t));
+ DB_TXN *, const char *, const char *, u_int32_t));
int (*dbrename) __P((DB_ENV *, DB_TXN *,
- const char *, const char *, const char *, u_int32_t));
+ const char *, const char *, const char *, u_int32_t));
void (*err) __P((const DB_ENV *, int, const char *, ...));
void (*errx) __P((const DB_ENV *, const char *, ...));
+ int (*get_home) __P((DB_ENV *, const char **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
int (*remove) __P((DB_ENV *, const char *, u_int32_t));
- int (*set_data_dir) __P((DB_ENV *, const char *));
int (*set_alloc) __P((DB_ENV *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
int (*set_app_dispatch) __P((DB_ENV *,
int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
+ int (*get_data_dirs) __P((DB_ENV *, const char ***));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*get_encrypt_flags) __P((DB_ENV *, u_int32_t *));
int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
void (*set_errcall) __P((DB_ENV *, void (*)(const char *, char *)));
+ void (*get_errfile) __P((DB_ENV *, FILE **));
void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*get_errpfx) __P((DB_ENV *, const char **));
void (*set_errpfx) __P((DB_ENV *, const char *));
int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*get_flags) __P((DB_ENV *, u_int32_t *));
int (*set_flags) __P((DB_ENV *, u_int32_t, int));
int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
int (*set_rpc_server) __P((DB_ENV *,
void *, const char *, long, long, u_int32_t));
+ int (*get_shm_key) __P((DB_ENV *, long *));
int (*set_shm_key) __P((DB_ENV *, long));
+ int (*get_tas_spins) __P((DB_ENV *, u_int32_t *));
int (*set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
int (*set_tmp_dir) __P((DB_ENV *, const char *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
int (*set_verbose) __P((DB_ENV *, u_int32_t, int));
void *lg_handle; /* Log handle and methods. */
+ int (*get_lg_bsize) __P((DB_ENV *, u_int32_t *));
int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_dir) __P((DB_ENV *, const char **));
int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*get_lg_max) __P((DB_ENV *, u_int32_t *));
int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_regionmax) __P((DB_ENV *, u_int32_t *));
int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
int (*log_archive) __P((DB_ENV *, char **[], u_int32_t));
int (*log_cursor) __P((DB_ENV *, DB_LOGC **, u_int32_t));
@@ -1679,33 +1783,37 @@ struct __db_env {
int (*log_stat) __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
void *lk_handle; /* Lock handle and methods. */
+ int (*get_lk_conflicts) __P((DB_ENV *, const u_int8_t **, int *));
int (*set_lk_conflicts) __P((DB_ENV *, u_int8_t *, int));
+ int (*get_lk_detect) __P((DB_ENV *, u_int32_t *));
int (*set_lk_detect) __P((DB_ENV *, u_int32_t));
int (*set_lk_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_locks) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_lockers) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_lockers) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_objects) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
int (*lock_detect) __P((DB_ENV *, u_int32_t, u_int32_t, int *));
- int (*lock_dump_region) __P((DB_ENV *, char *, FILE *));
+ int (*lock_dump_region) __P((DB_ENV *, const char *, FILE *));
int (*lock_get) __P((DB_ENV *,
u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
int (*lock_put) __P((DB_ENV *, DB_LOCK *));
int (*lock_id) __P((DB_ENV *, u_int32_t *));
int (*lock_id_free) __P((DB_ENV *, u_int32_t));
- int (*lock_id_set) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
int (*lock_vec) __P((DB_ENV *,
u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
- int (*lock_downgrade) __P((DB_ENV *,
- DB_LOCK *, db_lockmode_t, u_int32_t));
void *mp_handle; /* Mpool handle and methods. */
- int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
int (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
- int (*memp_dump_region) __P((DB_ENV *, char *, FILE *));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ int (*get_mp_maxwrite) __P((DB_ENV *, int *, int *));
+ int (*set_mp_maxwrite) __P((DB_ENV *, int, int));
+ int (*memp_dump_region) __P((DB_ENV *, const char *, FILE *));
int (*memp_fcreate) __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
- int (*memp_nameop) __P((DB_ENV *,
- u_int8_t *, const char *, const char *, const char *));
int (*memp_register) __P((DB_ENV *, int,
int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
@@ -1717,42 +1825,39 @@ struct __db_env {
void *rep_handle; /* Replication handle and methods. */
int (*rep_elect) __P((DB_ENV *, int, int, u_int32_t, int *));
int (*rep_flush) __P((DB_ENV *));
- int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *, int *));
+ int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *,
+ int *, DB_LSN *));
int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
- int (*set_rep_election) __P((DB_ENV *,
- u_int32_t, u_int32_t, u_int32_t, u_int32_t));
+ int (*get_rep_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
int (*set_rep_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*set_rep_request) __P((DB_ENV *, u_int32_t, u_int32_t));
- int (*set_rep_timeout) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*set_rep_transport) __P((DB_ENV *, int,
- int (*) (DB_ENV *, const DBT *, const DBT *, int, u_int32_t)));
+ int (*) (DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t)));
void *tx_handle; /* Txn handle and methods. */
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
int (*set_tx_max) __P((DB_ENV *, u_int32_t));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
int (*set_tx_timestamp) __P((DB_ENV *, time_t *));
int (*txn_begin) __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
int (*txn_checkpoint) __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
- int (*txn_id_set) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*txn_recover) __P((DB_ENV *,
DB_PREPLIST *, long, long *, u_int32_t));
int (*txn_stat) __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
-#define DB_TEST_ELECTSEND 2 /* after REP_ELECT msgnit */
-#define DB_TEST_ELECTVOTE1 3 /* after __rep_send_vote 1 */
-#define DB_TEST_ELECTVOTE2 4 /* after __rep_wait */
-#define DB_TEST_ELECTWAIT1 5 /* after REP_VOTE2 */
-#define DB_TEST_ELECTWAIT2 6 /* after __rep_wait 2 */
+#define DB_TEST_POSTDESTROY 2 /* after destroy op */
+#define DB_TEST_POSTLOG 3 /* after logging all pages */
+#define DB_TEST_POSTLOGMETA 4 /* after logging meta in btree */
+#define DB_TEST_POSTOPEN 5 /* after __os_open */
+#define DB_TEST_POSTSYNC 6 /* after syncing the log */
#define DB_TEST_PREDESTROY 7 /* before destroy op */
#define DB_TEST_PREOPEN 8 /* before __os_open */
-#define DB_TEST_POSTDESTROY 9 /* after destroy op */
-#define DB_TEST_POSTLOG 10 /* after logging all pages */
-#define DB_TEST_POSTLOGMETA 11 /* after logging meta in btree */
-#define DB_TEST_POSTOPEN 12 /* after __os_open */
-#define DB_TEST_POSTSYNC 13 /* after syncing the log */
-#define DB_TEST_SUBDB_LOCKS 14 /* subdb locking tests */
+#define DB_TEST_SUBDB_LOCKS 9 /* subdb locking tests */
int test_abort; /* Abort value for testing. */
int test_copy; /* Copy value for testing. */
@@ -1765,21 +1870,21 @@ struct __db_env {
#define DB_ENV_DIRECT_LOG 0x0000040 /* DB_DIRECT_LOG set. */
#define DB_ENV_FATAL 0x0000080 /* Doing fatal recovery in env. */
#define DB_ENV_LOCKDOWN 0x0000100 /* DB_LOCKDOWN set. */
-#define DB_ENV_NOLOCKING 0x0000200 /* DB_NOLOCKING set. */
-#define DB_ENV_NOMMAP 0x0000400 /* DB_NOMMAP set. */
-#define DB_ENV_NOPANIC 0x0000800 /* Okay if panic set. */
-#define DB_ENV_OPEN_CALLED 0x0001000 /* DB_ENV->open called. */
-#define DB_ENV_OVERWRITE 0x0002000 /* DB_OVERWRITE set. */
-#define DB_ENV_PRIVATE 0x0004000 /* DB_PRIVATE set. */
-#define DB_ENV_REGION_INIT 0x0008000 /* DB_REGION_INIT set. */
-#define DB_ENV_REP_CLIENT 0x0010000 /* Replication client. */
-#define DB_ENV_REP_LOGSONLY 0x0020000 /* Log files only replication site. */
-#define DB_ENV_REP_MASTER 0x0040000 /* Replication master. */
-#define DB_ENV_RPCCLIENT 0x0080000 /* DB_CLIENT set. */
-#define DB_ENV_RPCCLIENT_GIVEN 0x0100000 /* User-supplied RPC client struct */
-#define DB_ENV_SYSTEM_MEM 0x0200000 /* DB_SYSTEM_MEM set. */
-#define DB_ENV_THREAD 0x0400000 /* DB_THREAD set. */
-#define DB_ENV_TXN_NOSYNC 0x0800000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x0000200 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_NOLOCKING 0x0000400 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x0000800 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x0001000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x0002000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x0004000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x0008000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x0010000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x0020000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x0040000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x0080000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x0100000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x0200000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x0400000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_NOT_DURABLE 0x0800000 /* DB_TXN_NOT_DURABLE set. */
#define DB_ENV_TXN_WRITE_NOSYNC 0x1000000 /* DB_TXN_WRITE_NOSYNC set. */
#define DB_ENV_YIELDCPU 0x2000000 /* DB_YIELDCPU set. */
u_int32_t flags;
@@ -1875,7 +1980,7 @@ typedef struct entry {
/* DO NOT EDIT: automatically built by dist/s_rpc. */
#define DB_RPC_SERVERPROG ((unsigned long)(351457))
-#define DB_RPC_SERVERVERS ((unsigned long)(4001))
+#define DB_RPC_SERVERVERS ((unsigned long)(4002))
/* DO NOT EDIT: automatically built by dist/s_include. */
#ifndef _DB_EXT_PROT_IN_
@@ -1909,9 +2014,6 @@ int db_env_set_func_unlink __P((int (*)(const char *)));
int db_env_set_func_unmap __P((int (*)(void *, size_t)));
int db_env_set_func_write __P((ssize_t (*)(int, const void *, size_t)));
int db_env_set_func_yield __P((int (*)(void)));
-int txn_abort __P((DB_TXN *));
-int txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
-int txn_commit __P((DB_TXN *, u_int32_t));
#if DB_DBM_HSEARCH != 0
int __db_ndbm_clearerr __P((DBM *));
void __db_ndbm_close __P((DBM *));
diff --git a/db/build_vxworks/db_archive/db_archive.c b/db/build_vxworks/db_archive/db_archive.c
index 2891c12dc..0b2535584 100644
--- a/db/build_vxworks/db_archive/db_archive.c
+++ b/db/build_vxworks/db_archive/db_archive.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_archive.c,v 11.36 2002/03/28 20:13:34 bostic Exp ";
+ "$Id: db_archive.c,v 11.42 2003/08/13 19:57:04 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -53,21 +53,26 @@ db_archive_main(argc, argv)
const char *progname = "db_archive";
DB_ENV *dbenv;
u_int32_t flags;
- int ch, e_close, exitval, ret, verbose;
+ int ch, exitval, ret, verbose;
char **file, *home, **list, *passwd;
if ((ret = db_archive_version_check(progname)) != 0)
return (ret);
+ dbenv = NULL;
flags = 0;
- e_close = exitval = verbose = 0;
+ exitval = verbose = 0;
home = passwd = NULL;
+ file = list = NULL;
__db_getopt_reset = 1;
- while ((ch = getopt(argc, argv, "ah:lP:sVv")) != EOF)
+ while ((ch = getopt(argc, argv, "adh:lP:sVv")) != EOF)
switch (ch) {
case 'a':
LF_SET(DB_ARCH_ABS);
break;
+ case 'd':
+ LF_SET(DB_ARCH_REMOVE);
+ break;
case 'h':
home = optarg;
break;
@@ -114,7 +119,6 @@ db_archive_main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -155,12 +159,15 @@ db_archive_main(argc, argv)
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -171,7 +178,7 @@ int
db_archive_usage()
{
(void)fprintf(stderr,
- "usage: db_archive [-alsVv] [-h home] [-P password]\n");
+ "usage: db_archive [-adlsVv] [-h home] [-P password]\n");
return (EXIT_FAILURE);
}
@@ -183,12 +190,11 @@ db_archive_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_archive/db_archive/component.cdf b/db/build_vxworks/db_archive/db_archive/component.cdf
index cf88762cb..411ad63f3 100644
--- a/db/build_vxworks/db_archive/db_archive/component.cdf
+++ b/db/build_vxworks/db_archive/db_archive/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_ARCHIVE {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_archive.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_archive.o
NAME db_archive
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_archive/db_archive.wpj b/db/build_vxworks/db_archive/db_archive20.wpj
index 06091bb6b..9e3568eb5 100644..100755
--- a/db/build_vxworks/db_archive/db_archive.wpj
+++ b/db/build_vxworks/db_archive/db_archive20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_archive.out
+db_archive20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_archive.a
+$(PRJ_DIR)/PENTIUMgnu/db_archive20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_archive.out
+<BEGIN> BUILD_RULE_db_archive20.out
<END>
diff --git a/db/build_vxworks/db_archive/db_archive22.wpj b/db/build_vxworks/db_archive/db_archive22.wpj
new file mode 100755
index 000000000..a9c9da3fd
--- /dev/null
+++ b/db/build_vxworks/db_archive/db_archive22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_archive22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_archive22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_archive22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_archive22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_archive.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_archive.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_archive.c_objects
+db_archive.o
+<END>
+
+<BEGIN> FILE_db_archive.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_archive.c
+<END>
+
+<BEGIN> userComments
+db_archive
+<END>
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint.c b/db/build_vxworks/db_checkpoint/db_checkpoint.c
index df0334d9b..c5770614c 100644
--- a/db/build_vxworks/db_checkpoint/db_checkpoint.c
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_checkpoint.c,v 11.46 2002/08/08 03:50:31 bostic Exp ";
+ "$Id: db_checkpoint.c,v 11.51 2003/09/04 18:57:00 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -69,7 +69,7 @@ db_checkpoint_main(argc, argv)
time_t now;
long argval;
u_int32_t flags, kbytes, minutes, seconds;
- int ch, e_close, exitval, once, ret, verbose;
+ int ch, exitval, once, ret, verbose;
char *home, *logfile, *passwd;
if ((ret = db_checkpoint_version_check(progname)) != 0)
@@ -82,8 +82,9 @@ db_checkpoint_main(argc, argv)
*/
#define MAX_UINT32_T 2147483647
+ dbenv = NULL;
kbytes = minutes = 0;
- e_close = exitval = once = verbose = 0;
+ exitval = once = verbose = 0;
flags = 0;
home = logfile = passwd = NULL;
__db_getopt_reset = 1;
@@ -159,7 +160,6 @@ db_checkpoint_main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -217,12 +217,15 @@ shutdown: exitval = 1;
remove(logfile);
/* Clean up the environment. */
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -246,12 +249,11 @@ db_checkpoint_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint/component.cdf b/db/build_vxworks/db_checkpoint/db_checkpoint/component.cdf
index ea05c3a61..cd9e08a75 100644
--- a/db/build_vxworks/db_checkpoint/db_checkpoint/component.cdf
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_CHECKPOINT {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_checkpoint.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_checkpoint.o
NAME db_checkpoint
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint.wpj b/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj
index cae431782..bdac5e7f3 100644..100755
--- a/db/build_vxworks/db_checkpoint/db_checkpoint.wpj
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_checkpoint.out
+db_checkpoint20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_checkpoint.a
+$(PRJ_DIR)/PENTIUMgnu/db_checkpoint20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_checkpoint.out
+<BEGIN> BUILD_RULE_db_checkpoint20.out
<END>
diff --git a/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj b/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj
new file mode 100755
index 000000000..21d19cd15
--- /dev/null
+++ b/db/build_vxworks/db_checkpoint/db_checkpoint22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_checkpoint22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_checkpoint22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_checkpoint22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_checkpoint22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_checkpoint.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_checkpoint.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_checkpoint.c_objects
+db_checkpoint.o
+<END>
+
+<BEGIN> FILE_db_checkpoint.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_checkpoint.c
+<END>
+
+<BEGIN> userComments
+db_checkpoint
+<END>
diff --git a/db/build_vxworks/db_config.h b/db/build_vxworks/db_config.h
index 5524bd1a8..654d0120b 100644
--- a/db/build_vxworks/db_config.h
+++ b/db/build_vxworks/db_config.h
@@ -6,6 +6,12 @@
/* Define to 1 if you want to build a version for running the test suite. */
/* #undef CONFIG_TEST */
+/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
+ an operating system environment that supports Win32 calls and semantics. We
+ don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
+ Cygwin/GCC closely emulates the Unix environment. */
+/* #undef DB_WIN32 */
+
/* !!!
* The DEBUG option may be added using the Tornado project build.
* DO NOT modify it here.
@@ -57,12 +63,18 @@
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
+/* Define to 1 if you have the `getrusage' function. */
+/* #undef HAVE_GETRUSAGE */
+
/* Define to 1 if you have the `gettimeofday' function. */
/* #undef HAVE_GETTIMEOFDAY */
/* Define to 1 if you have the `getuid' function. */
/* #undef HAVE_GETUID */
+/* Define to 1 if building Hash access method. */
+#define HAVE_HASH 1
+
/* Define to 1 if you have the <inttypes.h> header file. */
/* #undef HAVE_INTTYPES_H */
@@ -105,6 +117,9 @@
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
+/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
+/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
+
/* Define to 1 to use the UNIX fcntl system call mutexes. */
/* #undef HAVE_MUTEX_FCNTL */
@@ -121,12 +136,9 @@
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
-/* Define to 1 to use the GCC compiler and Apple PowerPC assembly language. */
-/* #undef HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY */
-
-/* Define to 1 to use the GCC compiler and generic PowerPC assembly language.
+/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
*/
-/* #undef HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY */
+/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
/* #undef HAVE_MUTEX_PTHREADS */
@@ -134,6 +146,10 @@
/* Define to 1 to use Reliant UNIX initspin mutexes. */
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
+/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
+ */
+/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
@@ -164,6 +180,9 @@
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
+/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
+
/* Define to 1 to use the UNIX International mutexes. */
/* #undef HAVE_MUTEX_UI_THREADS */
@@ -176,9 +195,12 @@
/* Define to 1 to use VxWorks mutexes. */
#define HAVE_MUTEX_VXWORKS 1
-/* Define to 1 to use Windows mutexes. */
+/* Define to 1 to use the MSVC compiler and Windows mutexes. */
/* #undef HAVE_MUTEX_WIN32 */
+/* Define to 1 to use the GCC compiler and Windows mutexes. */
+/* #undef HAVE_MUTEX_WIN32_GCC */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -200,12 +222,15 @@
/* Define to 1 if building on QNX. */
/* #undef HAVE_QNX */
-/* Define to 1 if you have the `qsort' function. */
-#define HAVE_QSORT 1
+/* Define to 1 if building Queue access method. */
+#define HAVE_QUEUE 1
/* Define to 1 if you have the `raise' function. */
#define HAVE_RAISE 1
+/* Define to 1 if building replication support. */
+#define HAVE_REPLICATION 1
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -255,6 +280,9 @@
*/
/* #undef HAVE_SYS_DIR_H */
+/* Define to 1 if you have the <sys/fcntl.h> header file. */
+/* #undef HAVE_SYS_FCNTL_H */
+
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/
/* #undef HAVE_SYS_NDIR_H */
@@ -277,6 +305,9 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
+/* Define to 1 if building access method verification support. */
+#define HAVE_VERIFY 1
+
/* Define to 1 if you have the `vsnprintf' function. */
/* #undef HAVE_VSNPRINTF */
@@ -289,6 +320,9 @@
/* Define to 1 if you have the `_fstati64' function. */
/* #undef HAVE__FSTATI64 */
+/* Define to a value if using non-standard mutex alignment. */
+/* #undef MUTEX_ALIGN */
+
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "support@sleepycat.com"
@@ -296,13 +330,13 @@
#define PACKAGE_NAME "Berkeley DB"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "Berkeley DB 4.1.24"
+#define PACKAGE_STRING "Berkeley DB 4.2.52"
/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "db-4.1.24"
+#define PACKAGE_TARNAME "db-4.2.52"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "4.1.24"
+#define PACKAGE_VERSION "4.2.52"
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
/* #undef STAT_MACROS_BROKEN */
diff --git a/db/build_vxworks/db_deadlock/db_deadlock.c b/db/build_vxworks/db_deadlock/db_deadlock.c
index 4a6d427a7..bb5dff9f0 100644
--- a/db/build_vxworks/db_deadlock/db_deadlock.c
+++ b/db/build_vxworks/db_deadlock/db_deadlock.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_deadlock.c,v 11.38 2002/08/08 03:50:32 bostic Exp ";
+ "$Id: db_deadlock.c,v 11.41 2003/06/17 14:36:44 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -66,17 +66,18 @@ db_deadlock_main(argc, argv)
DB_ENV *dbenv;
u_int32_t atype;
time_t now;
- long secs, usecs;
- int ch, e_close, exitval, ret, verbose;
+ u_long secs, usecs;
+ int ch, exitval, ret, verbose;
char *home, *logfile, *str;
if ((ret = db_deadlock_version_check(progname)) != 0)
return (ret);
+ dbenv = NULL;
atype = DB_LOCK_DEFAULT;
home = logfile = NULL;
secs = usecs = 0;
- e_close = exitval = verbose = 0;
+ exitval = verbose = 0;
__db_getopt_reset = 1;
while ((ch = getopt(argc, argv, "a:h:L:t:Vvw")) != EOF)
switch (ch) {
@@ -116,11 +117,11 @@ db_deadlock_main(argc, argv)
case 't':
if ((str = strchr(optarg, '.')) != NULL) {
*str++ = '\0';
- if (*str != '\0' && __db_getlong(
+ if (*str != '\0' && __db_getulong(
NULL, progname, str, 0, LONG_MAX, &usecs))
return (EXIT_FAILURE);
}
- if (*optarg != '\0' && __db_getlong(
+ if (*optarg != '\0' && __db_getulong(
NULL, progname, optarg, 0, LONG_MAX, &secs))
return (EXIT_FAILURE);
if (secs == 0 && usecs == 0)
@@ -165,7 +166,6 @@ db_deadlock_main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -205,10 +205,10 @@ shutdown: exitval = 1;
/* Clean up the logfile. */
if (logfile != NULL)
- remove(logfile);
+ (void)remove(logfile);
/* Clean up the environment. */
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
@@ -237,12 +237,11 @@ db_deadlock_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_deadlock/db_deadlock/component.cdf b/db/build_vxworks/db_deadlock/db_deadlock/component.cdf
index efc498475..75f390af2 100644
--- a/db/build_vxworks/db_deadlock/db_deadlock/component.cdf
+++ b/db/build_vxworks/db_deadlock/db_deadlock/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_DEADLOCK {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_deadlock.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_deadlock.o
NAME db_deadlock
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_deadlock/db_deadlock.wpj b/db/build_vxworks/db_deadlock/db_deadlock20.wpj
index 10cc2dc6c..30dce43c5 100644..100755
--- a/db/build_vxworks/db_deadlock/db_deadlock.wpj
+++ b/db/build_vxworks/db_deadlock/db_deadlock20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_deadlock.out
+db_deadlock20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_deadlock.a
+$(PRJ_DIR)/PENTIUMgnu/db_deadlock20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_deadlock.out
+<BEGIN> BUILD_RULE_db_deadlock20.out
<END>
diff --git a/db/build_vxworks/db_deadlock/db_deadlock22.wpj b/db/build_vxworks/db_deadlock/db_deadlock22.wpj
new file mode 100755
index 000000000..55c33f9fa
--- /dev/null
+++ b/db/build_vxworks/db_deadlock/db_deadlock22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_deadlock22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_deadlock22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_deadlock22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_deadlock22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_deadlock.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_deadlock.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_deadlock.c_objects
+db_deadlock.o
+<END>
+
+<BEGIN> FILE_db_deadlock.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_deadlock.c
+<END>
+
+<BEGIN> userComments
+db_deadlock
+<END>
diff --git a/db/build_vxworks/db_dump/db_dump.c b/db/build_vxworks/db_dump/db_dump.c
index 13a4349ad..a14427a78 100644
--- a/db/build_vxworks/db_dump/db_dump.c
+++ b/db/build_vxworks/db_dump/db_dump.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_dump.c,v 11.80 2002/08/08 03:50:34 bostic Exp ";
+ "$Id: db_dump.c,v 11.88 2003/08/13 19:57:06 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -61,16 +61,17 @@ db_dump_main(argc, argv)
DB_ENV *dbenv;
DB *dbp;
u_int32_t cache;
- int ch, d_close;
- int e_close, exitval, keyflag, lflag, nflag, pflag, private;
+ int ch;
+ int exitval, keyflag, lflag, nflag, pflag, private;
int ret, Rflag, rflag, resize, subs;
char *dopt, *home, *passwd, *subname;
if ((ret = db_dump_version_check(progname)) != 0)
return (ret);
+ dbenv = NULL;
dbp = NULL;
- d_close = e_close = exitval = lflag = nflag = pflag = rflag = Rflag = 0;
+ exitval = lflag = nflag = pflag = rflag = Rflag = 0;
keyflag = 0;
cache = MEGABYTE;
private = 0;
@@ -174,7 +175,6 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto err;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -203,19 +203,20 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto err;
}
- d_close = 1;
/*
* If we're salvaging, don't do an open; it might not be safe.
* Dispatch now into the salvager.
*/
if (rflag) {
- if ((ret = dbp->verify(dbp, argv[0], NULL, stdout,
+ /* The verify method is a destructor. */
+ ret = dbp->verify(dbp, argv[0], NULL, stdout,
DB_SALVAGE |
(Rflag ? DB_AGGRESSIVE : 0) |
- (pflag ? DB_PRINTABLE : 0))) != 0)
+ (pflag ? DB_PRINTABLE : 0));
+ dbp = NULL;
+ if (ret != 0)
goto err;
- exitval = 0;
goto done;
}
@@ -229,10 +230,10 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
goto err;
if (resize) {
(void)dbp->close(dbp, 0);
- d_close = 0;
+ dbp = NULL;
(void)dbenv->close(dbenv, 0);
- e_close = 0;
+ dbenv = NULL;
goto retry;
}
}
@@ -261,7 +262,7 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
goto err;
} else
if (__db_prheader(dbp, NULL, pflag, keyflag, stdout,
- __db_verify_callback, NULL, 0) ||
+ __db_pr_callback, NULL, 0) ||
db_dump_dump(dbp, pflag, keyflag))
goto err;
}
@@ -269,16 +270,19 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
if (0) {
err: exitval = 1;
}
-done: if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
+done: if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
exitval = 1;
dbenv->err(dbenv, ret, "close");
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -376,6 +380,7 @@ db_dump_is_sub(dbp, yesno)
break;
case DB_QUEUE:
break;
+ case DB_UNKNOWN:
default:
dbp->errx(dbp, "unknown database type");
return (1);
@@ -432,7 +437,7 @@ db_dump_dump_sub(dbenv, parent_dbp, parent_name, pflag, keyflag)
"DB->open: %s:%s", parent_name, subdb);
if (ret == 0 &&
(__db_prheader(dbp, subdb, pflag, keyflag, stdout,
- __db_verify_callback, NULL, 0) ||
+ __db_pr_callback, NULL, 0) ||
db_dump_dump(dbp, pflag, keyflag)))
ret = 1;
(void)dbp->close(dbp, 0);
@@ -441,12 +446,12 @@ db_dump_dump_sub(dbenv, parent_dbp, parent_name, pflag, keyflag)
return (1);
}
if (ret != DB_NOTFOUND) {
- dbp->err(dbp, ret, "DBcursor->get");
+ parent_dbp->err(parent_dbp, ret, "DBcursor->get");
return (1);
}
if ((ret = dbcp->c_close(dbcp)) != 0) {
- dbp->err(dbp, ret, "DBcursor->close");
+ parent_dbp->err(parent_dbp, ret, "DBcursor->close");
return (1);
}
@@ -478,7 +483,7 @@ db_dump_show_subs(dbp)
memset(&data, 0, sizeof(data));
while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
if ((ret = __db_prdbt(&key, 1, NULL, stdout,
- __db_verify_callback, 0, NULL)) != 0) {
+ __db_pr_callback, 0, NULL)) != 0) {
dbp->errx(dbp, NULL);
return (1);
}
@@ -555,10 +560,10 @@ retry:
break;
if ((keyflag && (ret = __db_prdbt(&keyret,
- pflag, " ", stdout, __db_verify_callback,
+ pflag, " ", stdout, __db_pr_callback,
is_recno, NULL)) != 0) || (ret =
__db_prdbt(&dataret, pflag, " ", stdout,
- __db_verify_callback, 0, NULL)) != 0) {
+ __db_pr_callback, 0, NULL)) != 0) {
dbp->errx(dbp, NULL);
failed = 1;
goto err;
@@ -566,6 +571,7 @@ retry:
}
}
if (ret == ENOMEM) {
+ data.size = ALIGN(data.size, 1024);
data.data = realloc(data.data, data.size);
if (data.data == NULL) {
dbp->err(dbp, ENOMEM, "bulk get buffer");
@@ -589,7 +595,7 @@ err: if (data.data != NULL)
failed = 1;
}
- (void)__db_prfooter(stdout, __db_verify_callback);
+ (void)__db_prfooter(stdout, __db_pr_callback);
return (failed);
}
@@ -614,12 +620,11 @@ db_dump_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_dump/db_dump/component.cdf b/db/build_vxworks/db_dump/db_dump/component.cdf
index 5c1d4ccf3..7f39cc7d6 100644
--- a/db/build_vxworks/db_dump/db_dump/component.cdf
+++ b/db/build_vxworks/db_dump/db_dump/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_DUMP {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_dump.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_dump.o
NAME db_dump
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_dump/db_dump.wpj b/db/build_vxworks/db_dump/db_dump20.wpj
index 6813766e5..4916c9275 100644..100755
--- a/db/build_vxworks/db_dump/db_dump.wpj
+++ b/db/build_vxworks/db_dump/db_dump20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_dump.out
+db_dump20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_dump.a
+$(PRJ_DIR)/PENTIUMgnu/db_dump20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_dump.out
+<BEGIN> BUILD_RULE_db_dump20.out
<END>
diff --git a/db/build_vxworks/db_dump/db_dump22.wpj b/db/build_vxworks/db_dump/db_dump22.wpj
new file mode 100755
index 000000000..7ab82b18c
--- /dev/null
+++ b/db/build_vxworks/db_dump/db_dump22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_dump22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_dump22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_dump22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_dump22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_dump.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_dump.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_dump.c_objects
+db_dump.o
+<END>
+
+<BEGIN> FILE_db_dump.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_dump.c
+<END>
+
+<BEGIN> userComments
+db_dump
+<END>
diff --git a/db/build_vxworks/db_int.h b/db/build_vxworks/db_int.h
index 56a36ca8f..0f7d51303 100644
--- a/db/build_vxworks/db_int.h
+++ b/db/build_vxworks/db_int.h
@@ -2,10 +2,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_int.in,v 11.106 2002/09/10 02:48:08 bostic Exp
+ * $Id: db_int.in,v 11.126 2003/09/10 17:27:14 sue Exp $
*/
#ifndef _DB_INTERNAL_H_
@@ -16,7 +16,7 @@
* here because it's OK if db_int.h includes queue structure declarations.
*******************************************************/
#ifndef NO_SYSTEM_INCLUDES
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(STDC_HEADERS) || defined(__cplusplus)
#include <stdarg.h>
#else
#include <varargs.h>
@@ -65,6 +65,9 @@ extern "C" {
*/
#define DB_DEF_IOSIZE (8 * 1024)
+/* Number of times to reties I/O operations that return EINTR or EBUSY. */
+#define DB_RETRY 100
+
/*
* Aligning items to particular sizes or in pages or memory.
*
@@ -150,67 +153,57 @@ typedef struct __fn {
#undef DB_LINE
#define DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
-/* Unused, or not-used-yet variable. "Shut that bloody compiler up!" */
-#define COMPQUIET(n, v) (n) = (v)
-
/*******************************************************
* API return values
*******************************************************/
- /*
- * Return values that are OK for each different call. Most calls have
- * a standard 'return of 0 is only OK value', but some, like db->get
- * have DB_NOTFOUND as a return value, but it really isn't an error.
- */
+/*
+ * Return values that are OK for each different call. Most calls have a
+ * standard 'return of 0 is only OK value', but some, like db->get have
+ * DB_NOTFOUND as a return value, but it really isn't an error.
+ */
#define DB_RETOK_STD(ret) ((ret) == 0)
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
(ret) == DB_NOTFOUND)
-#define DB_RETOK_DBCGET(ret) DB_RETOK_DBGET(ret)
-#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
+#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
(ret) == DB_NOTFOUND)
-#define DB_RETOK_DBDEL(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
-#define DB_RETOK_DBGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
+#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
(ret) == DB_NOTFOUND)
+#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
+#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
-#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || (ret) == DB_REP_NEWMASTER || \
- (ret) == DB_REP_NEWSITE)
+#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
+ (ret) == DB_REP_ISPERM || \
+ (ret) == DB_REP_NEWMASTER || \
+ (ret) == DB_REP_NEWSITE || \
+ (ret) == DB_REP_NOTPERM)
+
+/* Find a reasonable operation-not-supported error. */
+#ifdef EOPNOTSUPP
+#define DB_OPNOTSUP EOPNOTSUPP
+#else
+#ifdef ENOTSUP
+#define DB_OPNOTSUP ENOTSUP
+#else
+#define DB_OPNOTSUP EINVAL
+#endif
+#endif
/*******************************************************
* Files.
*******************************************************/
- /*
- * We use 1024 as the maximum path length. It's too hard to figure out what
- * the real path length is, as it was traditionally stored in <sys/param.h>,
- * and that file isn't always available.
- */
+/*
+ * We use 1024 as the maximum path length. It's too hard to figure out what
+ * the real path length is, as it was traditionally stored in <sys/param.h>,
+ * and that file isn't always available.
+ */
#undef MAXPATHLEN
#define MAXPATHLEN 1024
#define PATH_DOT "." /* Current working directory. */
-#define PATH_SEPARATOR "/\\" /* Path separator character(s). */
-
-/*
- * Flags understood by __os_open.
- */
-#define DB_OSO_CREATE 0x0001 /* POSIX: O_CREAT */
-#define DB_OSO_DIRECT 0x0002 /* Don't buffer the file in the OS. */
-#define DB_OSO_EXCL 0x0004 /* POSIX: O_EXCL */
-#define DB_OSO_LOG 0x0008 /* Opening a log file. */
-#define DB_OSO_RDONLY 0x0010 /* POSIX: O_RDONLY */
-#define DB_OSO_REGION 0x0020 /* Opening a region file. */
-#define DB_OSO_SEQ 0x0040 /* Expected sequential access. */
-#define DB_OSO_TEMP 0x0080 /* Remove after last close. */
-#define DB_OSO_TRUNC 0x0100 /* POSIX: O_TRUNC */
-
-/*
- * Seek options understood by __os_seek.
- */
-typedef enum {
- DB_OS_SEEK_CUR, /* POSIX: SEEK_CUR */
- DB_OS_SEEK_END, /* POSIX: SEEK_END */
- DB_OS_SEEK_SET /* POSIX: SEEK_SET */
-} DB_OS_SEEK;
+ /* Path separator character(s). */
+#define PATH_SEPARATOR "/\\"
/*******************************************************
* Environment.
@@ -229,6 +222,7 @@ typedef enum {
* LOCKING_ON Locking has been configured.
* LOGGING_ON Logging has been configured.
* MPOOL_ON Memory pool has been configured.
+ * REP_ON Replication has been configured.
* RPC_ON RPC has been configured.
* TXN_ON Transactions have been configured.
*/
@@ -237,6 +231,7 @@ typedef enum {
#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != NULL)
#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != NULL)
#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NULL)
+#define REP_ON(dbenv) ((dbenv)->rep_handle != NULL)
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
@@ -405,30 +400,6 @@ typedef struct __dbpginfo {
#define IS_NOT_LOGGED_LSN(LSN) \
((LSN).file == 0 && (LSN).offset == 1)
-/*
- * Test if the environment is currently logging changes. If we're in
- * recovery or we're a replication client, we don't need to log changes
- * because they're already in the log, even though we have a fully functional
- * log system.
- */
-#define DBENV_LOGGING(dbenv) \
- (LOGGING_ON(dbenv) && !F_ISSET((dbenv), DB_ENV_REP_CLIENT) && \
- (!IS_RECOVERING(dbenv)))
-
-/*
- * Test if we need to log a change. Note that the DBC_RECOVER flag is set
- * when we're in abort, as well as during recovery; thus DBC_LOGGING may be
- * false for a particular dbc even when DBENV_LOGGING is true.
- *
- * We explicitly use LOGGING_ON/DB_ENV_REP_CLIENT here because we don't
- * want to have to pull in the log headers, which IS_RECOVERING (and thus
- * DBENV_LOGGING) rely on, and because DBC_RECOVER should be set anytime
- * IS_RECOVERING would be true.
- */
-#define DBC_LOGGING(dbc) \
- (LOGGING_ON((dbc)->dbp->dbenv) && !F_ISSET((dbc), DBC_RECOVER) && \
- !F_ISSET((dbc)->dbp->dbenv, DB_ENV_REP_CLIENT))
-
/*******************************************************
* Txn.
*******************************************************/
@@ -468,7 +439,46 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
#include "dbinc_auto/mutex_ext.h" /* XXX: Include after region.h. */
#include "dbinc_auto/env_ext.h"
#include "dbinc/os.h"
+#include "dbinc/rep.h"
#include "dbinc_auto/clib_ext.h"
#include "dbinc_auto/common_ext.h"
+/*******************************************************
+ * Remaining Log.
+ * These need to be defined after the general includes
+ * because they need rep.h from above.
+ *******************************************************/
+/*
+ * Test if the environment is currently logging changes. If we're in recovery
+ * or we're a replication client, we don't need to log changes because they're
+ * already in the log, even though we have a fully functional log system.
+ */
+#define DBENV_LOGGING(dbenv) \
+ (LOGGING_ON(dbenv) && !IS_REP_CLIENT(dbenv) && \
+ (!IS_RECOVERING(dbenv)))
+
+/*
+ * Test if we need to log a change. By default, we don't log operations without
+ * associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
+ * This is because we want to get log records for read/write operations, and, if
+ * we trying to debug something, more information is always better.
+ *
+ * The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
+ * thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
+ * is true.
+ *
+ * We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
+ * in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
+ * because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
+ */
+#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
+#define DBC_LOGGING(dbc) \
+ (LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#else
+#define DBC_LOGGING(dbc) \
+ ((dbc)->txn != NULL && LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#endif
+
#endif /* !_DB_INTERNAL_H_ */
diff --git a/db/build_vxworks/db_load/db_load.c b/db/build_vxworks/db_load/db_load.c
index e61ca91a3..a96642583 100644
--- a/db/build_vxworks/db_load/db_load.c
+++ b/db/build_vxworks/db_load/db_load.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_load.c,v 11.71 2002/08/08 03:50:36 bostic Exp ";
+ "$Id: db_load.c,v 11.88 2003/10/16 17:51:08 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -50,6 +50,7 @@ int db_load_db_init __P((DB_ENV *, char *, u_int32_t, int *));
int db_load_dbt_rdump __P((DB_ENV *, DBT *));
int db_load_dbt_rprint __P((DB_ENV *, DBT *));
int db_load_dbt_rrecno __P((DB_ENV *, DBT *, int));
+int db_load_dbt_to_recno __P((DB_ENV *, DBT *, db_recno_t *));
int db_load_digitize __P((DB_ENV *, int, int *));
int db_load_env_create __P((DB_ENV **, LDG *));
int db_load_load __P((DB_ENV *, char *, DBTYPE, char **, u_int, LDG *, int *));
@@ -106,11 +107,11 @@ db_load_main(argc, argv)
return (ret);
ldf = 0;
- exitval = 0;
+ exitval = existed = 0;
dbtype = DB_UNKNOWN;
/* Allocate enough room for configuration arguments. */
- if ((clp = clist = (char **)calloc(argc + 1, sizeof(char *))) == NULL) {
+ if ((clp = clist = calloc((size_t)argc + 1, sizeof(char *))) == NULL) {
fprintf(stderr, "%s: %s\n", ldg.progname, strerror(ENOMEM));
return (EXIT_FAILURE);
}
@@ -205,6 +206,8 @@ shutdown: exitval = 1;
/* Resend any caught signal. */
__db_util_sigresend();
free(clist);
+ if (ldg.passwd != NULL)
+ free(ldg.passwd);
/*
* Return 0 on success, 1 if keys existed already, and 2 on failure.
@@ -238,8 +241,6 @@ db_load_load(dbenv, name, argtype, clist, flags, ldg, existedp)
int ascii_recno, checkprint, hexkeys, keyflag, keys, resize, ret, rval;
char *subdb;
- *existedp = 0;
-
put_flags = LF_ISSET(LDF_NOOVERWRITE) ? DB_NOOVERWRITE : 0;
G(endodata) = 0;
@@ -250,16 +251,17 @@ db_load_load(dbenv, name, argtype, clist, flags, ldg, existedp)
memset(&rkey, 0, sizeof(DBT));
retry_db:
+ dbtype = DB_UNKNOWN;
+ keys = -1;
+ hexkeys = -1;
+ keyflag = -1;
+
/* Create the DB object. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto err;
}
- dbtype = DB_UNKNOWN;
- keys = -1;
- hexkeys = -1;
- keyflag = -1;
/* Read the header -- if there's no header, we expect flat text. */
if (LF_ISSET(LDF_NOHEADER)) {
checkprint = 1;
@@ -343,6 +345,20 @@ retry_db:
goto err;
}
+#if 0
+ Set application-specific btree comparison or hash functions here.
+ For example:
+
+ if ((ret = dbp->set_bt_compare(dbp, local_comparison_func)) != 0) {
+ dbp->err(dbp, ret, "DB->set_bt_compare");
+ goto err;
+ }
+ if ((ret = dbp->set_h_hash(dbp, local_hash_func)) != 0) {
+ dbp->err(dbp, ret, "DB->set_h_hash");
+ goto err;
+ }
+#endif
+
/* Open the DB file. */
if ((ret = dbp->open(dbp, NULL, name, subdb, dbtype,
DB_CREATE | (TXN_ON(dbenv) ? DB_AUTO_COMMIT : 0),
@@ -355,9 +371,11 @@ retry_db:
__db_util_cache(dbenv, dbp, &ldg->cache, &resize)) != 0)
goto err;
if (resize) {
- dbp->close(dbp, 0);
+ if ((ret = dbp->close(dbp, 0)) != 0)
+ goto err;
dbp = NULL;
- dbenv->close(dbenv, 0);
+ if ((ret = dbenv->close(dbenv, 0)) != 0)
+ goto err;
if ((ret = db_load_env_create(&dbenv, ldg)) != 0)
goto err;
goto retry_db;
@@ -365,8 +383,7 @@ retry_db:
}
/* Initialize the key/data pair. */
- readp = &key;
- writep = &key;
+ readp = writep = &key;
if (dbtype == DB_RECNO || dbtype == DB_QUEUE) {
key.size = sizeof(recno);
if (keyflag) {
@@ -375,16 +392,14 @@ retry_db:
readp = &rkey;
goto key_data;
}
- }
- else
+ } else
key.data = &recno;
} else
-key_data: if ((readp->data =
- (void *)malloc(readp->ulen = 1024)) == NULL) {
+key_data: if ((readp->data = malloc(readp->ulen = 1024)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
goto err;
}
- if ((data.data = (void *)malloc(data.ulen = 1024)) == NULL) {
+ if ((data.data = malloc(data.ulen = 1024)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
goto err;
}
@@ -395,7 +410,7 @@ key_data: if ((readp->data =
/* Get each key/data pair and add them to the database. */
for (recno = 1; !__db_util_interrupted(); ++recno) {
- if (!keyflag)
+ if (!keyflag) {
if (checkprint) {
if (db_load_dbt_rprint(dbenv, &data))
goto err;
@@ -403,12 +418,16 @@ key_data: if ((readp->data =
if (db_load_dbt_rdump(dbenv, &data))
goto err;
}
- else
+ } else {
if (checkprint) {
if (db_load_dbt_rprint(dbenv, readp))
goto err;
+ if (ascii_recno &&
+ db_load_dbt_to_recno(dbenv, readp, &datarecno) != 0)
+ goto err;
+
if (!G(endodata) && db_load_dbt_rprint(dbenv, &data))
- goto fmt;
+ goto odd_count;
} else {
if (ascii_recno) {
if (db_load_dbt_rrecno(dbenv, readp, hexkeys))
@@ -416,24 +435,16 @@ key_data: if ((readp->data =
} else
if (db_load_dbt_rdump(dbenv, readp))
goto err;
+
if (!G(endodata) && db_load_dbt_rdump(dbenv, &data)) {
-fmt: dbenv->errx(dbenv,
+odd_count: dbenv->errx(dbenv,
"odd number of key/data pairs");
goto err;
}
}
+ }
if (G(endodata))
break;
- if (readp != writep) {
- if (sscanf(readp->data, "%ud", &datarecno) != 1)
- dbenv->errx(dbenv,
- "%s: non-integer key at line: %d",
- name, !keyflag ? recno : recno * 2 - 1);
- if (datarecno == 0)
- dbenv->errx(dbenv, "%s: zero key at line: %d",
- name,
- !keyflag ? recno : recno * 2 - 1);
- }
retry: if (txn != NULL)
if ((ret = dbenv->txn_begin(dbenv, txn, &ctxn, 0)) != 0)
goto err;
@@ -454,7 +465,7 @@ retry: if (txn != NULL)
!keyflag ? recno : recno * 2 - 1);
(void)__db_prdbt(&key, checkprint, 0, stderr,
- __db_verify_callback, 0, NULL);
+ __db_pr_callback, 0, NULL);
break;
case DB_LOCK_DEADLOCK:
/* If we have a child txn, retry--else it's fatal. */
@@ -505,7 +516,7 @@ err: rval = 1;
/* Free allocated memory. */
if (subdb != NULL)
free(subdb);
- if (dbtype != DB_RECNO && dbtype != DB_QUEUE)
+ if (dbtype != DB_RECNO && dbtype != DB_QUEUE && key.data != NULL)
free(key.data);
if (rkey.data != NULL)
free(rkey.data);
@@ -515,6 +526,38 @@ err: rval = 1;
}
/*
+ * env_create --
+ * Create the environment and initialize it for error reporting.
+ */
+int
+db_load_env_create(dbenvp, ldg)
+ DB_ENV **dbenvp;
+ LDG *ldg;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ if ((ret = db_env_create(dbenvp, 0)) != 0) {
+ fprintf(stderr,
+ "%s: db_env_create: %s\n", ldg->progname, db_strerror(ret));
+ return (ret);
+ }
+ dbenv = *dbenvp;
+ dbenv->set_errfile(dbenv, stderr);
+ dbenv->set_errpfx(dbenv, ldg->progname);
+ if (ldg->passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ ldg->passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ return (ret);
+ }
+ if ((ret = db_load_db_init(dbenv, ldg->home, ldg->cache, &ldg->private)) != 0)
+ return (ret);
+ dbenv->app_private = ldg;
+
+ return (0);
+}
+
+/*
* db_init --
* Initialize the environment.
*/
@@ -580,12 +623,12 @@ db_load_db_init(dbenv, home, cache, is_private)
} \
continue; \
}
-#define NUMBER(name, value, keyword, func) \
+#define NUMBER(name, value, keyword, func, t) \
if (strcmp(name, keyword) == 0) { \
- if (__db_getlong(dbp, \
+ if (__db_getlong(dbenv, \
NULL, value, 1, LONG_MAX, &val) != 0) \
return (1); \
- if ((ret = dbp->func(dbp, val)) != 0) \
+ if ((ret = dbp->func(dbp, (t)val)) != 0) \
goto nameerr; \
continue; \
}
@@ -643,17 +686,17 @@ db_load_configure(dbenv, dbp, clp, subdbp, keysp)
}
#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey);
+ NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
#endif
- NUMBER(name, value, "bt_minkey", set_bt_minkey);
- NUMBER(name, value, "db_lorder", set_lorder);
- NUMBER(name, value, "db_pagesize", set_pagesize);
- FLAG(name, value, "chksum", DB_CHKSUM_SHA1);
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t);
+ NUMBER(name, value, "db_lorder", set_lorder, int);
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t);
+ FLAG(name, value, "chksum", DB_CHKSUM);
FLAG(name, value, "duplicates", DB_DUP);
FLAG(name, value, "dupsort", DB_DUPSORT);
- NUMBER(name, value, "h_ffactor", set_h_ffactor);
- NUMBER(name, value, "h_nelem", set_h_nelem);
- NUMBER(name, value, "re_len", set_re_len);
+ NUMBER(name, value, "h_ffactor", set_h_ffactor, u_int32_t);
+ NUMBER(name, value, "h_nelem", set_h_nelem, u_int32_t);
+ NUMBER(name, value, "re_len", set_re_len, u_int32_t);
STRING(name, value, "re_pad", set_re_pad);
FLAG(name, value, "recnum", DB_RECNUM);
FLAG(name, value, "renumber", DB_RENUMBER);
@@ -681,8 +724,9 @@ db_load_rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
char **subdbp;
int *checkprintp, *keysp;
{
+ size_t buflen, linelen, start;
long val;
- int ch, first, hdr, linelen, buflen, ret, start;
+ int ch, first, hdr, ret;
char *buf, *name, *p, *value;
*dbtypep = DB_UNKNOWN;
@@ -696,7 +740,7 @@ db_load_rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
buflen = 4096;
if (G(hdrbuf) == NULL) {
hdr = 0;
- if ((buf = (char *)malloc(buflen)) == NULL) {
+ if ((buf = malloc(buflen)) == NULL) {
memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
return (1);
}
@@ -727,16 +771,19 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
if (ch == '\n')
break;
- buf[linelen++] = ch;
-
- /* If the buffer is too small, double it. */
- if (linelen + start == buflen) {
- G(hdrbuf) = (char *)realloc(G(hdrbuf),
- buflen *= 2);
+ /*
+ * If the buffer is too small, double it. The
+ * +1 is for the nul byte inserted below.
+ */
+ if (linelen + start + 1 == buflen) {
+ G(hdrbuf) =
+ realloc(G(hdrbuf), buflen *= 2);
if (G(hdrbuf) == NULL)
goto memerr;
buf = &G(hdrbuf)[start];
}
+
+ buf[linelen++] = ch;
}
if (G(endofile) == 1)
break;
@@ -831,18 +878,18 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
}
#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey);
+ NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
#endif
- NUMBER(name, value, "bt_minkey", set_bt_minkey);
- NUMBER(name, value, "db_lorder", set_lorder);
- NUMBER(name, value, "db_pagesize", set_pagesize);
- NUMBER(name, value, "extentsize", set_q_extentsize);
- FLAG(name, value, "chksum", DB_CHKSUM_SHA1);
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t);
+ NUMBER(name, value, "db_lorder", set_lorder, int);
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t);
+ NUMBER(name, value, "extentsize", set_q_extentsize, u_int32_t);
+ FLAG(name, value, "chksum", DB_CHKSUM);
FLAG(name, value, "duplicates", DB_DUP);
FLAG(name, value, "dupsort", DB_DUPSORT);
- NUMBER(name, value, "h_ffactor", set_h_ffactor);
- NUMBER(name, value, "h_nelem", set_h_nelem);
- NUMBER(name, value, "re_len", set_re_len);
+ NUMBER(name, value, "h_ffactor", set_h_ffactor, u_int32_t);
+ NUMBER(name, value, "h_nelem", set_h_nelem, u_int32_t);
+ NUMBER(name, value, "re_len", set_re_len, u_int32_t);
STRING(name, value, "re_pad", set_re_pad);
FLAG(name, value, "recnum", DB_RECNUM);
FLAG(name, value, "renumber", DB_RENUMBER);
@@ -854,19 +901,16 @@ memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
}
ret = 0;
if (0) {
-nameerr:
- dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
- ret = 1;
- }
- if (0)
+nameerr: dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
err: ret = 1;
+ }
if (0) {
-badfmt:
- dbp->errx(dbp, "line %lu: unexpected format", G(lineno));
+badfmt: dbp->errx(dbp, "line %lu: unexpected format", G(lineno));
ret = 1;
}
if (name != NULL) {
- *p = '=';
+ if (p != NULL)
+ *p = '=';
free(name);
}
return (ret);
@@ -897,7 +941,7 @@ db_load_convprintable(dbenv, instr, outstrp)
* Just malloc a string big enough for the whole input string;
* the output string will be smaller (or of equal length).
*/
- if ((outstr = (char *)malloc(strlen(instr))) == NULL)
+ if ((outstr = malloc(strlen(instr) + 1)) == NULL)
return (ENOMEM);
*outstrp = outstr;
@@ -989,7 +1033,7 @@ db_load_dbt_rprint(dbenv, dbtp)
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
- (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) {
+ realloc(dbtp->data, dbtp->ulen)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
return (1);
}
@@ -1054,7 +1098,7 @@ db_load_dbt_rdump(dbenv, dbtp)
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
- (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) {
+ realloc(dbtp->data, dbtp->ulen)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
return (1);
}
@@ -1119,7 +1163,7 @@ db_load_dbt_rrecno(dbenv, dbtp, ishex)
*p = '\0';
}
- if (__db_getulong(NULL,
+ if (__db_getulong(dbenv,
G(progname), buf + 1, 0, 0, (u_long *)dbtp->data)) {
bad: db_load_badend(dbenv);
return (1);
@@ -1129,6 +1173,20 @@ bad: db_load_badend(dbenv);
return (0);
}
+int
+db_load_dbt_to_recno(dbenv, dbt, recnop)
+ DB_ENV *dbenv;
+ DBT *dbt;
+ db_recno_t *recnop;
+{
+ char buf[32]; /* Large enough for 2^64. */
+
+ memcpy(buf, dbt->data, dbt->size);
+ buf[dbt->size] = '\0';
+
+ return (__db_getulong(dbenv, G(progname), buf, 0, 0, (u_long *)recnop));
+}
+
/*
* digitize --
* Convert a character to an integer.
@@ -1155,6 +1213,8 @@ db_load_digitize(dbenv, c, errorp)
case 'd': return (13);
case 'e': return (14);
case 'f': return (15);
+ default: /* Not possible. */
+ break;
}
dbenv->errx(dbenv, "unexpected hexadecimal value");
@@ -1207,41 +1267,12 @@ db_load_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
}
-
-int
-db_load_env_create(dbenvp, ldg)
- DB_ENV **dbenvp;
- LDG *ldg;
-{
- DB_ENV *dbenv;
- int ret;
-
- if ((ret = db_env_create(dbenvp, 0)) != 0) {
- fprintf(stderr,
- "%s: db_env_create: %s\n", ldg->progname, db_strerror(ret));
- return (ret);
- }
- dbenv = *dbenvp;
- dbenv->set_errfile(dbenv, stderr);
- dbenv->set_errpfx(dbenv, ldg->progname);
- if (ldg->passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
- ldg->passwd, DB_ENCRYPT_AES)) != 0) {
- dbenv->err(dbenv, ret, "set_passwd");
- return (ret);
- }
- if ((ret = db_load_db_init(dbenv, ldg->home, ldg->cache, &ldg->private)) != 0)
- return (ret);
- dbenv->app_private = ldg;
-
- return (0);
-}
diff --git a/db/build_vxworks/db_load/db_load/component.cdf b/db/build_vxworks/db_load/db_load/component.cdf
index 7d1d2bc95..0707cf083 100644
--- a/db/build_vxworks/db_load/db_load/component.cdf
+++ b/db/build_vxworks/db_load/db_load/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_LOAD {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_load.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_load.o
NAME db_load
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_load/db_load.wpj b/db/build_vxworks/db_load/db_load20.wpj
index 59e194ae3..f3d4cdf95 100644..100755
--- a/db/build_vxworks/db_load/db_load.wpj
+++ b/db/build_vxworks/db_load/db_load20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_load.out
+db_load20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_load.a
+$(PRJ_DIR)/PENTIUMgnu/db_load20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_load.out
+<BEGIN> BUILD_RULE_db_load20.out
<END>
diff --git a/db/build_vxworks/db_load/db_load22.wpj b/db/build_vxworks/db_load/db_load22.wpj
new file mode 100755
index 000000000..c04559c80
--- /dev/null
+++ b/db/build_vxworks/db_load/db_load22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_load22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_load22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_load22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_load22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_load.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_load.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_load.c_objects
+db_load.o
+<END>
+
+<BEGIN> FILE_db_load.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_load.c
+<END>
+
+<BEGIN> userComments
+db_load
+<END>
diff --git a/db/build_vxworks/db_printlog/db_printlog.c b/db/build_vxworks/db_printlog/db_printlog.c
index b68c77e8a..6a251f785 100644
--- a/db/build_vxworks/db_printlog/db_printlog.c
+++ b/db/build_vxworks/db_printlog/db_printlog.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_printlog.c,v 11.52 2002/08/08 03:50:38 bostic Exp ";
+ "$Id: db_printlog.c,v 11.59 2003/08/18 18:00:31 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -31,7 +31,6 @@ static const char revid[] =
#include "dbinc/hash.h"
#include "dbinc/log.h"
#include "dbinc/qam.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
int db_printlog_main __P((int, char *[]));
@@ -70,16 +69,17 @@ db_printlog_main(argc, argv)
size_t dtabsize;
DBT data, keydbt;
DB_LSN key;
- int ch, e_close, exitval, nflag, rflag, ret, repflag;
+ int ch, exitval, nflag, rflag, ret, repflag;
char *home, *passwd;
if ((ret = db_printlog_version_check(progname)) != 0)
return (ret);
+ dbenv = NULL;
dbp = NULL;
dbc = NULL;
logc = NULL;
- e_close = exitval = nflag = rflag = repflag = 0;
+ exitval = nflag = rflag = repflag = 0;
home = passwd = NULL;
dtabsize = 0;
dtab = NULL;
@@ -132,7 +132,6 @@ db_printlog_main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -262,12 +261,15 @@ shutdown: exitval = 1;
*/
if (dtab != NULL)
__os_free(dbenv, dtab);
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -290,12 +292,11 @@ db_printlog_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
@@ -313,7 +314,9 @@ db_printlog_print_app_record(dbenv, dbt, lsnp, op)
u_int32_t i, rectype;
DB_ASSERT(op == DB_TXN_PRINT);
+
COMPQUIET(dbenv, NULL);
+ COMPQUIET(op, DB_TXN_PRINT);
/*
* Fetch the rectype, which always must be at the beginning of the
diff --git a/db/build_vxworks/db_printlog/db_printlog/component.cdf b/db/build_vxworks/db_printlog/db_printlog/component.cdf
index 57c645259..2cc4c1b6d 100644
--- a/db/build_vxworks/db_printlog/db_printlog/component.cdf
+++ b/db/build_vxworks/db_printlog/db_printlog/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_PRINTLOG {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_printlog.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_printlog.o
NAME db_printlog
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_printlog/db_printlog.wpj b/db/build_vxworks/db_printlog/db_printlog20.wpj
index 514122e61..ba418399f 100644..100755
--- a/db/build_vxworks/db_printlog/db_printlog.wpj
+++ b/db/build_vxworks/db_printlog/db_printlog20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_printlog.out
+db_printlog20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_printlog.a
+$(PRJ_DIR)/PENTIUMgnu/db_printlog20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_printlog.out
+<BEGIN> BUILD_RULE_db_printlog20.out
<END>
diff --git a/db/build_vxworks/db_printlog/db_printlog22.wpj b/db/build_vxworks/db_printlog/db_printlog22.wpj
new file mode 100755
index 000000000..b3b31d757
--- /dev/null
+++ b/db/build_vxworks/db_printlog/db_printlog22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_printlog22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_printlog22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_printlog22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_printlog22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_printlog.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_printlog.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_printlog.c_objects
+db_printlog.o
+<END>
+
+<BEGIN> FILE_db_printlog.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_printlog.c
+<END>
+
+<BEGIN> userComments
+db_printlog
+<END>
diff --git a/db/build_vxworks/db_recover/db_recover.c b/db/build_vxworks/db_recover/db_recover.c
index cd593c825..1c7210dc9 100644
--- a/db/build_vxworks/db_recover/db_recover.c
+++ b/db/build_vxworks/db_recover/db_recover.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_recover.c,v 11.33 2002/03/28 20:13:42 bostic Exp ";
+ "$Id: db_recover.c,v 11.39 2003/09/04 18:06:46 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -34,7 +34,6 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "dbinc/txn.h"
int db_recover_main __P((int, char *[]));
int db_recover_read_timestamp __P((const char *, char *, time_t *));
@@ -64,8 +63,7 @@ db_recover_main(argc, argv)
extern int optind, __db_getopt_reset;
const char *progname = "db_recover";
DB_ENV *dbenv;
- DB_TXNREGION *region;
- time_t now, timestamp;
+ time_t timestamp;
u_int32_t flags;
int ch, exitval, fatal_recover, ret, retain_env, verbose;
char *home, *passwd;
@@ -170,16 +168,6 @@ db_recover_main(argc, argv)
goto shutdown;
}
- if (verbose) {
- (void)time(&now);
- region = ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary;
- dbenv->errx(dbenv, "Recovery complete at %.24s", ctime(&now));
- dbenv->errx(dbenv, "%s %lx %s [%lu][%lu]",
- "Maximum transaction id", (u_long)region->last_txnid,
- "Recovery checkpoint", (u_long)region->last_ckp.file,
- (u_long)region->last_ckp.offset);
- }
-
if (0) {
shutdown: exitval = 1;
}
@@ -190,6 +178,8 @@ shutdown: exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
/* Resend any caught signal. */
__db_util_sigresend();
@@ -258,7 +248,7 @@ db_recover_read_timestamp(progname, arg, timep)
}
yearset = 0;
- switch(strlen(arg)) {
+ switch (strlen(arg)) {
case 12: /* CCYYMMDDhhmm */
t->tm_year = ATOI2(arg);
t->tm_year *= 100;
@@ -316,12 +306,11 @@ db_recover_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_recover/db_recover/component.cdf b/db/build_vxworks/db_recover/db_recover/component.cdf
index d322bf4a8..0f16344ca 100644
--- a/db/build_vxworks/db_recover/db_recover/component.cdf
+++ b/db/build_vxworks/db_recover/db_recover/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_RECOVER {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_recover.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_recover.o
NAME db_recover
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_recover/db_recover.wpj b/db/build_vxworks/db_recover/db_recover20.wpj
index 2df723423..d201c8fbe 100644..100755
--- a/db/build_vxworks/db_recover/db_recover.wpj
+++ b/db/build_vxworks/db_recover/db_recover20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_recover.out
+db_recover20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_recover.a
+$(PRJ_DIR)/PENTIUMgnu/db_recover20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_recover.out
+<BEGIN> BUILD_RULE_db_recover20.out
<END>
diff --git a/db/build_vxworks/db_recover/db_recover22.wpj b/db/build_vxworks/db_recover/db_recover22.wpj
new file mode 100755
index 000000000..88e2401ff
--- /dev/null
+++ b/db/build_vxworks/db_recover/db_recover22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_recover22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_recover22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_recover22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_recover22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_recover.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_recover.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_recover.c_objects
+db_recover.o
+<END>
+
+<BEGIN> FILE_db_recover.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_recover.c
+<END>
+
+<BEGIN> userComments
+db_recover
+<END>
diff --git a/db/build_vxworks/db_stat/db_stat.c b/db/build_vxworks/db_stat/db_stat.c
index abc5236d3..bd628ca09 100644
--- a/db/build_vxworks/db_stat/db_stat.c
+++ b/db/build_vxworks/db_stat/db_stat.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_stat.c,v 11.125 2002/08/08 15:26:15 bostic Exp ";
+ "$Id: db_stat.c,v 11.142 2003/10/27 19:47:25 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -36,30 +36,32 @@ static const char revid[] =
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/txn.h"
#define PCT(f, t, pgsize) \
((t) == 0 ? 0 : \
- (((double)(((t) * (pgsize)) - (f)) / ((t) * (pgsize))) * 100))
+ ((((((double)t) * (pgsize)) - (f)) / (((double)t) * (pgsize))) * 100))
typedef enum { T_NOTSET,
T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_REP, T_TXN } test_t;
int db_stat_argcheck __P((char *, const char *));
-int db_stat_btree_stats __P((DB_ENV *, DB *, DB_BTREE_STAT *, int));
+int db_stat_btree_stats __P((DB_ENV *, DB *, DB_BTREE_STAT *, u_int32_t));
int db_stat_db_init __P((DB_ENV *, char *, test_t, u_int32_t, int *));
void db_stat_dl __P((const char *, u_long));
void db_stat_dl_bytes __P((const char *, u_long, u_long, u_long));
int db_stat_env_stats __P((DB_ENV *, u_int32_t));
-int db_stat_hash_stats __P((DB_ENV *, DB *, int));
+int db_stat_hash_stats __P((DB_ENV *, DB *, u_int32_t));
int db_stat_lock_stats __P((DB_ENV *, char *, u_int32_t));
int db_stat_log_stats __P((DB_ENV *, u_int32_t));
int db_stat_main __P((int, char *[]));
int db_stat_mpool_stats __P((DB_ENV *, char *, u_int32_t));
-void db_stat_prflags __P((u_int32_t, const FN *));
-int db_stat_queue_stats __P((DB_ENV *, DB *, int));
+void db_stat_prflags __P((DB *, u_int32_t, const FN *));
+int db_stat_queue_stats __P((DB_ENV *, DB *, u_int32_t));
int db_stat_rep_stats __P((DB_ENV *, u_int32_t));
int db_stat_txn_compare __P((const void *, const void *));
int db_stat_txn_stats __P((DB_ENV *, u_int32_t));
+void db_stat_txn_xid_stats __P((DB_TXN_ACTIVE *));
int db_stat_usage __P((void));
int db_stat_version_check __P((const char *));
@@ -89,19 +91,21 @@ db_stat_main(argc, argv)
DB_BTREE_STAT *sp;
DB *alt_dbp, *dbp;
test_t ttype;
- u_int32_t cache;
- int ch, checked, d_close, e_close, exitval, fast, flags;
+ u_int32_t cache, env_flags, fast, flags;
+ int ch, checked, exitval;
int nflag, private, resize, ret;
char *db, *home, *internal, *passwd, *subdb;
if ((ret = db_stat_version_check(progname)) != 0)
return (ret);
+ dbenv = NULL;
dbp = NULL;
ttype = T_NOTSET;
cache = MEGABYTE;
- d_close = e_close = exitval = fast = flags = nflag = private = 0;
+ exitval = fast = flags = nflag = private = 0;
db = home = internal = passwd = subdb = NULL;
+ env_flags = 0;
__db_getopt_reset = 1;
while ((ch = getopt(argc, argv, "C:cd:efh:lM:mNP:rs:tVZ")) != EOF)
@@ -205,7 +209,12 @@ argcombo: fprintf(stderr,
case T_NOTSET:
return (db_stat_usage());
/* NOTREACHED */
- default:
+ case T_ENV:
+ case T_LOCK:
+ case T_LOG:
+ case T_MPOOL:
+ case T_REP:
+ case T_TXN:
if (fast != 0)
return (db_stat_usage());
break;
@@ -218,12 +227,11 @@ argcombo: fprintf(stderr,
* Create an environment object and initialize it for error
* reporting.
*/
-retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
+retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -258,7 +266,6 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto shutdown;
}
- d_close = 1;
if ((ret = dbp->open(dbp,
NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
@@ -272,11 +279,11 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
__db_util_cache(dbenv, dbp, &cache, &resize)) != 0)
goto shutdown;
if (resize) {
- (void)dbp->close(dbp, 0);
- d_close = 0;
+ (void)dbp->close(dbp, DB_NOSYNC);
+ dbp = NULL;
(void)dbenv->close(dbenv, 0);
- e_close = 0;
+ dbenv = NULL;
goto retry;
}
}
@@ -303,14 +310,14 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
goto shutdown;
}
if ((ret = dbp->open(alt_dbp, NULL,
- db, subdb, DB_UNKNOWN, 0, 0)) != 0) {
+ db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
dbenv->err(dbenv,
ret, "DB->open: %s:%s", db, subdb);
- (void)alt_dbp->close(alt_dbp, 0);
+ (void)alt_dbp->close(alt_dbp, DB_NOSYNC);
goto shutdown;
}
- (void)dbp->close(dbp, 0);
+ (void)dbp->close(dbp, DB_NOSYNC);
dbp = alt_dbp;
/* Need to run again to update counts */
@@ -369,16 +376,19 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
if (0) {
shutdown: exitval = 1;
}
- if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
+ if (dbp != NULL && (ret = dbp->close(dbp, DB_NOSYNC)) != 0) {
exitval = 1;
dbenv->err(dbenv, ret, "close");
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -466,7 +476,7 @@ db_stat_btree_stats(dbenv, dbp, msp, fast)
DB_ENV *dbenv;
DB *dbp;
DB_BTREE_STAT *msp;
- int fast;
+ u_int32_t fast;
{
static const FN fn[] = {
{ BTM_DUP, "duplicates" },
@@ -491,7 +501,7 @@ db_stat_btree_stats(dbenv, dbp, msp, fast)
printf("%lx\tBtree magic number.\n", (u_long)sp->bt_magic);
printf("%lu\tBtree version number.\n", (u_long)sp->bt_version);
- db_stat_prflags(sp->bt_metaflags, fn);
+ db_stat_prflags(dbp, sp->bt_metaflags, fn);
if (dbp->type == DB_BTREE) {
#ifdef NOT_IMPLEMENTED
db_stat_dl("Maximum keys per-page.\n", (u_long)sp->bt_maxkey);
@@ -500,7 +510,7 @@ db_stat_btree_stats(dbenv, dbp, msp, fast)
}
if (dbp->type == DB_RECNO) {
db_stat_dl("Fixed-length record size.\n", (u_long)sp->bt_re_len);
- if (isprint(sp->bt_re_pad) && !isspace(sp->bt_re_pad))
+ if (isprint((int)sp->bt_re_pad) && !isspace((int)sp->bt_re_pad))
printf("%c\tFixed-length record pad.\n",
(int)sp->bt_re_pad);
else
@@ -553,7 +563,7 @@ int
db_stat_hash_stats(dbenv, dbp, fast)
DB_ENV *dbenv;
DB *dbp;
- int fast;
+ u_int32_t fast;
{
static const FN fn[] = {
{ DB_HASH_DUP, "duplicates" },
@@ -572,7 +582,7 @@ db_stat_hash_stats(dbenv, dbp, fast)
printf("%lx\tHash magic number.\n", (u_long)sp->hash_magic);
printf("%lu\tHash version number.\n", (u_long)sp->hash_version);
- db_stat_prflags(sp->hash_metaflags, fn);
+ db_stat_prflags(dbp, sp->hash_metaflags, fn);
db_stat_dl("Underlying database page size.\n", (u_long)sp->hash_pagesize);
db_stat_dl("Specified fill factor.\n", (u_long)sp->hash_ffactor);
db_stat_dl("Number of keys in the database.\n", (u_long)sp->hash_nkeys);
@@ -616,7 +626,7 @@ int
db_stat_queue_stats(dbenv, dbp, fast)
DB_ENV *dbenv;
DB *dbp;
- int fast;
+ u_int32_t fast;
{
DB_QUEUE_STAT *sp;
int ret;
@@ -631,7 +641,7 @@ db_stat_queue_stats(dbenv, dbp, fast)
printf("%lx\tQueue magic number.\n", (u_long)sp->qs_magic);
printf("%lu\tQueue version number.\n", (u_long)sp->qs_version);
db_stat_dl("Fixed-length record size.\n", (u_long)sp->qs_re_len);
- if (isprint(sp->qs_re_pad) && !isspace(sp->qs_re_pad))
+ if (isprint((int)sp->qs_re_pad) && !isspace((int)sp->qs_re_pad))
printf("%c\tFixed-length record pad.\n", (int)sp->qs_re_pad);
else
printf("0x%x\tFixed-length record pad.\n", (int)sp->qs_re_pad);
@@ -939,7 +949,7 @@ db_stat_rep_stats(dbenv, flags)
is_client ? "Next LSN expected." : "Next LSN to be used.");
p = sp->st_waiting_lsn.file == 0 ?
"Not waiting for any missed log records." :
- "LSN of first missed log record being waited for.";
+ "LSN of first log record we have after missed log records.";
printf("%lu/%lu\t%s\n",
(u_long)sp->st_waiting_lsn.file, (u_long)sp->st_waiting_lsn.offset,
p);
@@ -980,6 +990,8 @@ db_stat_rep_stats(dbenv, flags)
(u_long)sp->st_msgs_send_failures);
db_stat_dl("Number of messages sent.\n", (u_long)sp->st_msgs_sent);
db_stat_dl("Number of new site messages received.\n", (u_long)sp->st_newsites);
+ db_stat_dl("Number of environments believed to be in the replication group.\n",
+ (u_long)sp->st_nsites);
db_stat_dl("Transmission limited.\n", (u_long)sp->st_nthrottles);
db_stat_dl("Number of outdated conditions detected.\n",
(u_long)sp->st_outdated);
@@ -1043,7 +1055,7 @@ db_stat_txn_stats(dbenv, flags)
ctime(&sp->st_time_ckp));
printf("%lx\tLast transaction ID allocated.\n",
(u_long)sp->st_last_txnid);
- db_stat_dl("Maximum number of active transactions possible.\n",
+ db_stat_dl("Maximum number of active transactions configured.\n",
(u_long)sp->st_maxtxns);
db_stat_dl("Active transactions.\n", (u_long)sp->st_nactive);
db_stat_dl("Maximum active transactions.\n", (u_long)sp->st_maxnactive);
@@ -1066,11 +1078,12 @@ db_stat_txn_stats(dbenv, flags)
(u_long)sp->st_txnarray[i].txnid,
(u_long)sp->st_txnarray[i].lsn.file,
(u_long)sp->st_txnarray[i].lsn.offset);
- if (sp->st_txnarray[i].parentid == 0)
- printf("\n");
- else
- printf(" parent: %lx\n",
+ if (sp->st_txnarray[i].parentid != 0)
+ printf("; parent: %lx",
(u_long)sp->st_txnarray[i].parentid);
+ if (sp->st_txnarray[i].xa_status != 0)
+ db_stat_txn_xid_stats(&sp->st_txnarray[i]);
+ printf("\n");
}
free(sp);
@@ -1078,6 +1091,49 @@ db_stat_txn_stats(dbenv, flags)
return (0);
}
+void
+db_stat_txn_xid_stats(txnp)
+ DB_TXN_ACTIVE *txnp;
+{
+ u_int32_t v;
+ u_int i;
+ int cnt;
+
+ printf("\n\tXA: ");
+ switch (txnp->xa_status) {
+ case TXN_XA_ABORTED:
+ printf("ABORTED");
+ break;
+ case TXN_XA_DEADLOCKED:
+ printf("DEADLOCKED");
+ break;
+ case TXN_XA_ENDED:
+ printf("ENDED");
+ break;
+ case TXN_XA_PREPARED:
+ printf("PREPARED");
+ break;
+ case TXN_XA_STARTED:
+ printf("STARTED");
+ break;
+ case TXN_XA_SUSPENDED:
+ printf("SUSPENDED");
+ break;
+ default:
+ printf("unknown state: %lu", (u_long)txnp->xa_status);
+ break;
+ }
+ printf("; XID:\n\t\t");
+ for (i = 0, cnt = 0; i < DB_XIDDATASIZE; i += sizeof(u_int32_t)) {
+ memcpy(&v, &txnp->xid[i], sizeof(u_int32_t));
+ printf("0x%x ", v);
+ if (++cnt == 4) {
+ printf("\n\t\t");
+ cnt = 0;
+ }
+ }
+}
+
int
db_stat_txn_compare(a1, b1)
const void *a1, *b1;
@@ -1159,11 +1215,13 @@ db_stat_dl_bytes(msg, gbytes, mbytes, bytes)
* Print out flag values.
*/
void
-db_stat_prflags(flags, fnp)
+db_stat_prflags(dbp, flags, fnp)
+ DB *dbp;
u_int32_t flags;
const FN *fnp;
{
const char *sep;
+ int lorder;
sep = "\t";
printf("Flags:");
@@ -1172,6 +1230,19 @@ db_stat_prflags(flags, fnp)
printf("%s%s", sep, fnp->name);
sep = ", ";
}
+
+ (void)dbp->get_lorder(dbp, &lorder);
+ switch (lorder) {
+ case 1234:
+ printf("%s%s", sep, "little-endian");
+ break;
+ case 4321:
+ printf("%s%s", sep, "big-endian");
+ break;
+ default:
+ printf("%s%s", sep, "UNKNOWN-LORDER");
+ break;
+ }
printf("\n");
}
@@ -1230,6 +1301,8 @@ db_stat_db_init(dbenv, home, ttype, cache, is_private)
oflags |= DB_INIT_MPOOL;
if (ttype == T_LOG)
oflags |= DB_INIT_LOG;
+ if (ttype == T_REP)
+ oflags |= DB_INIT_REP;
if ((ret = dbenv->open(dbenv, home, oflags, 0)) == 0)
return (0);
@@ -1270,12 +1343,11 @@ db_stat_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_stat/db_stat/component.cdf b/db/build_vxworks/db_stat/db_stat/component.cdf
index 728544eab..976b7807b 100644
--- a/db/build_vxworks/db_stat/db_stat/component.cdf
+++ b/db/build_vxworks/db_stat/db_stat/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_STAT {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_stat.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_stat.o
NAME db_stat
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_stat/db_stat.wpj b/db/build_vxworks/db_stat/db_stat20.wpj
index ba78c4cc3..323cb1767 100644..100755
--- a/db/build_vxworks/db_stat/db_stat.wpj
+++ b/db/build_vxworks/db_stat/db_stat20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_stat.out
+db_stat20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_stat.a
+$(PRJ_DIR)/PENTIUMgnu/db_stat20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_stat.out
+<BEGIN> BUILD_RULE_db_stat20.out
<END>
diff --git a/db/build_vxworks/db_stat/db_stat22.wpj b/db/build_vxworks/db_stat/db_stat22.wpj
new file mode 100755
index 000000000..0b941a4b0
--- /dev/null
+++ b/db/build_vxworks/db_stat/db_stat22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_stat22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_stat22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_stat22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_stat22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_stat.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_stat.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_stat.c_objects
+db_stat.o
+<END>
+
+<BEGIN> FILE_db_stat.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_stat.c
+<END>
+
+<BEGIN> userComments
+db_stat
+<END>
diff --git a/db/build_vxworks/db_upgrade/db_upgrade.c b/db/build_vxworks/db_upgrade/db_upgrade.c
index 7176a8a54..983f8b789 100644
--- a/db/build_vxworks/db_upgrade/db_upgrade.c
+++ b/db/build_vxworks/db_upgrade/db_upgrade.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_upgrade.c,v 1.31 2002/03/28 20:13:47 bostic Exp ";
+ "$Id: db_upgrade.c,v 1.35 2003/08/13 19:57:09 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -54,7 +54,7 @@ db_upgrade_main(argc, argv)
DB *dbp;
DB_ENV *dbenv;
u_int32_t flags;
- int ch, e_close, exitval, nflag, ret, t_ret;
+ int ch, exitval, nflag, ret, t_ret;
char *home, *passwd;
if ((ret = db_upgrade_version_check(progname)) != 0)
@@ -62,7 +62,7 @@ db_upgrade_main(argc, argv)
dbenv = NULL;
flags = nflag = 0;
- e_close = exitval = 0;
+ exitval = 0;
home = passwd = NULL;
__db_getopt_reset = 1;
while ((ch = getopt(argc, argv, "h:NP:sV")) != EOF)
@@ -110,7 +110,6 @@ db_upgrade_main(argc, argv)
progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -165,12 +164,15 @@ db_upgrade_main(argc, argv)
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -193,12 +195,11 @@ db_upgrade_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_upgrade/db_upgrade/component.cdf b/db/build_vxworks/db_upgrade/db_upgrade/component.cdf
index 7bbdebd49..ac30723c6 100644
--- a/db/build_vxworks/db_upgrade/db_upgrade/component.cdf
+++ b/db/build_vxworks/db_upgrade/db_upgrade/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_UPGRADE {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_upgrade.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_upgrade.o
NAME db_upgrade
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_upgrade/db_upgrade.wpj b/db/build_vxworks/db_upgrade/db_upgrade20.wpj
index 65f834d62..325910f34 100644..100755
--- a/db/build_vxworks/db_upgrade/db_upgrade.wpj
+++ b/db/build_vxworks/db_upgrade/db_upgrade20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_upgrade.out
+db_upgrade20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_upgrade.a
+$(PRJ_DIR)/PENTIUMgnu/db_upgrade20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_upgrade.out
+<BEGIN> BUILD_RULE_db_upgrade20.out
<END>
diff --git a/db/build_vxworks/db_upgrade/db_upgrade22.wpj b/db/build_vxworks/db_upgrade/db_upgrade22.wpj
new file mode 100755
index 000000000..d042b2e0e
--- /dev/null
+++ b/db/build_vxworks/db_upgrade/db_upgrade22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_upgrade22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_upgrade22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_upgrade22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_upgrade22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_upgrade.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_upgrade.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_upgrade.c_objects
+db_upgrade.o
+<END>
+
+<BEGIN> FILE_db_upgrade.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_upgrade.c
+<END>
+
+<BEGIN> userComments
+db_upgrade
+<END>
diff --git a/db/build_vxworks/db_verify/db_verify.c b/db/build_vxworks/db_verify/db_verify.c
index 95c5b8f0c..f685cce1d 100644
--- a/db/build_vxworks/db_verify/db_verify.c
+++ b/db/build_vxworks/db_verify/db_verify.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2002\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "Id: db_verify.c,v 1.38 2002/08/08 03:51:38 bostic Exp ";
+ "$Id: db_verify.c,v 1.45 2003/08/13 19:57:09 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -54,16 +54,17 @@ db_verify_main(argc, argv)
DB *dbp, *dbp1;
DB_ENV *dbenv;
u_int32_t cache;
- int ch, d_close, e_close, exitval, nflag, oflag, private;
- int quiet, resize, ret, t_ret;
+ int ch, exitval, nflag, oflag, private;
+ int quiet, resize, ret;
char *home, *passwd;
if ((ret = db_verify_version_check(progname)) != 0)
return (ret);
dbenv = NULL;
+ dbp = NULL;
cache = MEGABYTE;
- d_close = e_close = exitval = nflag = oflag = quiet = 0;
+ exitval = nflag = oflag = quiet = 0;
home = passwd = NULL;
__db_getopt_reset = 1;
while ((ch = getopt(argc, argv, "h:NoP:qV")) != EOF)
@@ -114,7 +115,6 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
if (!quiet) {
dbenv->set_errfile(dbenv, stderr);
@@ -162,7 +162,6 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "%s: db_create", progname);
goto shutdown;
}
- d_close = 1;
/*
* We create a 2nd dbp to this database to get its pagesize
@@ -196,39 +195,41 @@ retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
if (resize) {
(void)dbp->close(dbp, 0);
- d_close = 0;
+ dbp = NULL;
(void)dbenv->close(dbenv, 0);
- e_close = 0;
+ dbenv = NULL;
goto retry;
}
}
- if ((ret = dbp->verify(dbp,
- argv[0], NULL, NULL, oflag ? DB_NOORDERCHK : 0)) != 0)
- dbp->err(dbp, ret, "DB->verify: %s", argv[0]);
- if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0) {
- dbenv->err(dbenv, ret, "DB->close: %s", argv[0]);
- ret = t_ret;
- }
- d_close = 0;
- if (ret != 0)
+
+ /* The verify method is a destructor. */
+ ret = dbp->verify(dbp,
+ argv[0], NULL, NULL, oflag ? DB_NOORDERCHK : 0);
+ dbp = NULL;
+ if (ret != 0) {
+ dbenv->err(dbenv, ret, "DB->verify: %s", argv[0]);
goto shutdown;
+ }
}
if (0) {
shutdown: exitval = 1;
}
- if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
+ if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
exitval = 1;
dbenv->err(dbenv, ret, "close");
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
@@ -251,12 +252,11 @@ db_verify_version_check(progname)
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
+ v_major, v_minor);
return (EXIT_FAILURE);
}
return (0);
diff --git a/db/build_vxworks/db_verify/db_verify/component.cdf b/db/build_vxworks/db_verify/db_verify/component.cdf
index f29f8246b..e3336e51c 100644
--- a/db/build_vxworks/db_verify/db_verify/component.cdf
+++ b/db/build_vxworks/db_verify/db_verify/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DB_VERIFY {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES db_verify.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES db_verify.o
NAME db_verify
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/db_verify/db_verify.wpj b/db/build_vxworks/db_verify/db_verify20.wpj
index d807c9853..14b35c900 100644..100755
--- a/db/build_vxworks/db_verify/db_verify.wpj
+++ b/db/build_vxworks/db_verify/db_verify20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-db_verify.out
+db_verify20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/db_verify.a
+$(PRJ_DIR)/PENTIUMgnu/db_verify20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_db_verify.out
+<BEGIN> BUILD_RULE_db_verify20.out
<END>
diff --git a/db/build_vxworks/db_verify/db_verify22.wpj b/db/build_vxworks/db_verify/db_verify22.wpj
new file mode 100755
index 000000000..1a440dbee
--- /dev/null
+++ b/db/build_vxworks/db_verify/db_verify22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+db_verify22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/db_verify22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_db_verify22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_db_verify22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_db_verify.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_db_verify.c_dependencies
+
+<END>
+
+<BEGIN> FILE_db_verify.c_objects
+db_verify.o
+<END>
+
+<BEGIN> FILE_db_verify.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/db_verify.c
+<END>
+
+<BEGIN> userComments
+db_verify
+<END>
diff --git a/db/build_vxworks/dbdemo/dbdemo.c b/db/build_vxworks/dbdemo/dbdemo.c
index 30e1e092b..0bfd4d7e4 100644
--- a/db/build_vxworks/dbdemo/dbdemo.c
+++ b/db/build_vxworks/dbdemo/dbdemo.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_access.c,v 11.22 2002/09/03 12:54:26 bostic Exp
+ * $Id: ex_access.c,v 11.23 2003/01/08 04:43:53 bostic Exp $
*/
#include <sys/types.h>
diff --git a/db/build_vxworks/dbdemo/dbdemo/component.cdf b/db/build_vxworks/dbdemo/dbdemo/component.cdf
index 188b63bfa..3bc4d7f1e 100755
--- a/db/build_vxworks/dbdemo/dbdemo/component.cdf
+++ b/db/build_vxworks/dbdemo/dbdemo/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE_DBDEMO {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES dbdemo.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES dbdemo.o
NAME dbdemo
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/build_vxworks/dbdemo/dbdemo.wpj b/db/build_vxworks/dbdemo/dbdemo20.wpj
index 52eec5ed9..1c996e893 100755
--- a/db/build_vxworks/dbdemo/dbdemo.wpj
+++ b/db/build_vxworks/dbdemo/dbdemo20.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-dbdemo.out
+dbdemo20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/dbdemo.a
+$(PRJ_DIR)/PENTIUMgnu/dbdemo20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE_dbdemo.out
+<BEGIN> BUILD_RULE_dbdemo20.out
<END>
diff --git a/db/build_vxworks/dbdemo/dbdemo22.wpj b/db/build_vxworks/dbdemo/dbdemo22.wpj
new file mode 100755
index 000000000..e482480df
--- /dev/null
+++ b/db/build_vxworks/dbdemo/dbdemo22.wpj
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+dbdemo22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/dbdemo22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_dbdemo22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_dbdemo22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE_dbdemo.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE_dbdemo.c_dependencies
+
+<END>
+
+<BEGIN> FILE_dbdemo.c_objects
+dbdemo.o
+<END>
+
+<BEGIN> FILE_dbdemo.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/dbdemo.c
+<END>
+
+<BEGIN> userComments
+dbdemo
+<END>
diff --git a/db/build_win32/Berkeley_DB.dsw b/db/build_win32/Berkeley_DB.dsw
index 50ee205bd..bcce71e8a 100644
--- a/db/build_win32/Berkeley_DB.dsw
+++ b/db/build_win32/Berkeley_DB.dsw
@@ -1,51 +1,9 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00
+Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
-Project: "DB_DLL"=.\db_dll.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "DB_Static"=.\db_static.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "db_archive"=.\db_archive.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "db_buildall"=.\db_buildall.dsp - Package Owner=<4>
+Project: "build_all"=.\build_all.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -125,11 +83,14 @@ Package=<4>
Begin Project Dependency
Project_Dep_Name excxx_tpcb
End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name db_lib
+ End Project Dependency
}}}
###############################################################################
-Project: "db_checkpoint"=.\db_checkpoint.dsp - Package Owner=<4>
+Project: "db_archive"=.\db_archive.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -138,10 +99,22 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
+ Project_Dep_Name db_lib
End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_checkpoint"=.\db_checkpoint.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -158,9 +131,18 @@ Package=<4>
Begin Project Dependency
Project_Dep_Name DB_DLL
End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
- End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_dll"=.\db_dll.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
}}}
###############################################################################
@@ -174,10 +156,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -198,7 +177,7 @@ Package=<4>
###############################################################################
-Project: "db_load"=.\db_load.dsp - Package Owner=<4>
+Project: "db_lib"=.\db_lib.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -207,16 +186,16 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
+ Project_Dep_Name db_dll
End Project Dependency
Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_static
End Project Dependency
}}}
###############################################################################
-Project: "db_printlog"=.\db_printlog.dsp - Package Owner=<4>
+Project: "db_load"=.\db_load.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -225,10 +204,22 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
+ Project_Dep_Name db_lib
End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "db_printlog"=.\db_printlog.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -243,10 +234,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -261,15 +249,24 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
###############################################################################
+Project: "db_static"=.\db_static.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Project: "db_tcl"=.\db_tcl.dsp - Package Owner=<4>
Package=<5>
@@ -294,7 +291,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name db_buildall
+ Project_Dep_Name build_all
End Project Dependency
Begin Project Dependency
Project_Dep_Name db_tcl
@@ -312,10 +309,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -330,10 +324,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -348,10 +339,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -366,10 +354,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_Static
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_DLL
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -384,10 +369,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -402,10 +384,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -420,10 +399,22 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
+ Project_Dep_Name db_lib
End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ex_repquote"=.\ex_repquote.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -438,10 +429,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -456,10 +444,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -474,10 +459,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -492,10 +474,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -510,10 +489,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -528,10 +504,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
@@ -546,10 +519,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name DB_DLL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DB_Static
+ Project_Dep_Name db_lib
End Project Dependency
}}}
diff --git a/db/build_win32/app_dsp.src b/db/build_win32/app_dsp.src
index 79c4ce785..e0d84eabe 100644
--- a/db/build_win32/app_dsp.src
+++ b/db/build_win32/app_dsp.src
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=@project_name@ - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "@project_name@ - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "@project_name@ - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "@project_name@ - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "@project_name@ - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -95,8 +92,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -120,8 +117,8 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
diff --git a/db/build_win32/db.h b/db/build_win32/db.h
index 4a7393d4f..380f158ba 100644
--- a/db/build_win32/db.h
+++ b/db/build_win32/db.h
@@ -1,11 +1,22 @@
/* DO NOT EDIT: automatically built by dist/s_win32. */
-/*-
+/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: db.src,v 11.121 2001/01/10 15:43:08 sue Exp $
+ * $Id: db.in,v 11.389 2003/10/01 21:33:58 sue Exp $
+ *
+ * db.h include file layout:
+ * General.
+ * Database Environment.
+ * Locking subsystem.
+ * Logging subsystem.
+ * Shared buffer cache (mpool) subsystem.
+ * Transaction subsystem.
+ * Access methods.
+ * Access method cursors.
+ * Dbm/Ndbm, Hsearch historic interfaces.
*/
#ifndef _DB_H_
@@ -14,6 +25,7 @@
#ifndef __NO_SYSTEM_INCLUDES
#include <sys/types.h>
+/* <sys/types.h> does not include <inttypes.h> on some systems. */
#include <stdio.h>
#endif
@@ -21,29 +33,22 @@
extern "C" {
#endif
+
+#undef __P
+#define __P(protos) protos
+
/*
- * XXX
- * Handle function prototypes and the keyword "const". This steps on name
- * space that DB doesn't control, but all of the other solutions are worse.
- *
- * XXX
- * While Microsoft's compiler is ANSI C compliant, it doesn't have _STDC_
- * defined by default, you specify a command line flag or #pragma to turn
- * it on. Don't do that, however, because some of Microsoft's own header
- * files won't compile.
+ * Berkeley DB version information.
*/
-#undef __P
-#if defined(__STDC__) || defined(__cplusplus) || defined(_MSC_VER)
-#define __P(protos) protos /* ANSI C prototypes */
-#else
-#define const
-#define __P(protos) () /* K&R C preprocessor */
-#endif
+#define DB_VERSION_MAJOR 4
+#define DB_VERSION_MINOR 2
+#define DB_VERSION_PATCH 52
+#define DB_VERSION_STRING "Sleepycat Software: Berkeley DB 4.2.52: (December 3, 2003)"
/*
* !!!
- * DB needs basic information about specifically sized types. If they're
- * not provided by the system, typedef them here.
+ * Berkeley DB uses specifically sized types. If they're not provided by
+ * the system, typedef them here.
*
* We protect them against multiple inclusion using __BIT_TYPES_DEFINED__,
* as does BIND and Kerberos, since we don't know for sure what #include
@@ -68,13 +73,13 @@ typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
#endif
+#if defined(_WIN64)
+typedef __int64 ssize_t;
+#else
typedef int ssize_t;
+#endif
-#define DB_VERSION_MAJOR 3
-#define DB_VERSION_MINOR 2
-#define DB_VERSION_PATCH 9
-#define DB_VERSION_STRING "Sleepycat Software: Berkeley DB 3.2.9: (January 24, 2001)"
-
+/* Basic types that are exported or quasi-exported. */
typedef u_int32_t db_pgno_t; /* Page number type. */
typedef u_int16_t db_indx_t; /* Page offset type. */
#define DB_MAX_PAGES 0xffffffff /* >= # of pages in a file */
@@ -82,12 +87,22 @@ typedef u_int16_t db_indx_t; /* Page offset type. */
typedef u_int32_t db_recno_t; /* Record number type. */
#define DB_MAX_RECORDS 0xffffffff /* >= # of records in a tree */
-/* Forward structure declarations, so applications get type checking. */
+typedef u_int32_t db_timeout_t; /* Type of a timeout. */
+
+/*
+ * Region offsets are currently limited to 32-bits. I expect that's going
+ * to have to be fixed in the not-too-distant future, since we won't want to
+ * split 100Gb memory pools into that many different regions.
+ */
+typedef u_int32_t roff_t;
+
+/*
+ * Forward structure declarations, so we can declare pointers and
+ * applications can get type checking.
+ */
struct __db; typedef struct __db DB;
-#ifdef DB_DBM_HSEARCH
- typedef struct __db DBM;
-#endif
struct __db_bt_stat; typedef struct __db_bt_stat DB_BTREE_STAT;
+struct __db_cipher; typedef struct __db_cipher DB_CIPHER;
struct __db_dbt; typedef struct __db_dbt DBT;
struct __db_env; typedef struct __db_env DB_ENV;
struct __db_h_stat; typedef struct __db_h_stat DB_HASH_STAT;
@@ -95,20 +110,28 @@ struct __db_ilock; typedef struct __db_ilock DB_LOCK_ILOCK;
struct __db_lock_stat; typedef struct __db_lock_stat DB_LOCK_STAT;
struct __db_lock_u; typedef struct __db_lock_u DB_LOCK;
struct __db_lockreq; typedef struct __db_lockreq DB_LOCKREQ;
+struct __db_log_cursor; typedef struct __db_log_cursor DB_LOGC;
struct __db_log_stat; typedef struct __db_log_stat DB_LOG_STAT;
struct __db_lsn; typedef struct __db_lsn DB_LSN;
-struct __db_mpool_finfo;typedef struct __db_mpool_finfo DB_MPOOL_FINFO;
+struct __db_mpool; typedef struct __db_mpool DB_MPOOL;
struct __db_mpool_fstat;typedef struct __db_mpool_fstat DB_MPOOL_FSTAT;
struct __db_mpool_stat; typedef struct __db_mpool_stat DB_MPOOL_STAT;
struct __db_mpoolfile; typedef struct __db_mpoolfile DB_MPOOLFILE;
+struct __db_preplist; typedef struct __db_preplist DB_PREPLIST;
struct __db_qam_stat; typedef struct __db_qam_stat DB_QUEUE_STAT;
+struct __db_rep; typedef struct __db_rep DB_REP;
+struct __db_rep_stat; typedef struct __db_rep_stat DB_REP_STAT;
struct __db_txn; typedef struct __db_txn DB_TXN;
struct __db_txn_active; typedef struct __db_txn_active DB_TXN_ACTIVE;
struct __db_txn_stat; typedef struct __db_txn_stat DB_TXN_STAT;
+struct __db_txnmgr; typedef struct __db_txnmgr DB_TXNMGR;
struct __dbc; typedef struct __dbc DBC;
struct __dbc_internal; typedef struct __dbc_internal DBC_INTERNAL;
struct __fh_t; typedef struct __fh_t DB_FH;
+struct __fname; typedef struct __fname FNAME;
struct __key_range; typedef struct __key_range DB_KEY_RANGE;
+struct __mpoolfile; typedef struct __mpoolfile MPOOLFILE;
+struct __mutex_t; typedef struct __mutex_t DB_MUTEX;
/* Key/data structure -- a Data-Base Thang. */
struct __db_dbt {
@@ -122,12 +145,13 @@ struct __db_dbt {
u_int32_t dlen; /* RO: get/put record length. */
u_int32_t doff; /* RO: get/put record offset. */
-#define DB_DBT_ISSET 0x001 /* Lower level calls set value. */
-#define DB_DBT_MALLOC 0x002 /* Return in malloc'd memory. */
-#define DB_DBT_PARTIAL 0x004 /* Partial put/get. */
-#define DB_DBT_REALLOC 0x008 /* Return in realloc'd memory. */
-#define DB_DBT_USERMEM 0x010 /* Return in user's memory. */
-#define DB_DBT_DUPOK 0x020 /* Insert if duplicate. */
+#define DB_DBT_APPMALLOC 0x001 /* Callback allocated memory. */
+#define DB_DBT_ISSET 0x002 /* Lower level calls set value. */
+#define DB_DBT_MALLOC 0x004 /* Return in malloc'd memory. */
+#define DB_DBT_PARTIAL 0x008 /* Partial put/get. */
+#define DB_DBT_REALLOC 0x010 /* Return in realloc'd memory. */
+#define DB_DBT_USERMEM 0x020 /* Return in user's memory. */
+#define DB_DBT_DUPOK 0x040 /* Insert if duplicate. */
u_int32_t flags;
};
@@ -136,403 +160,885 @@ struct __db_dbt {
* Interfaces which use any of these common flags should never have
* interface specific flags in this range.
*/
-#define DB_CREATE 0x000001 /* Create file as necessary. */
-#define DB_CXX_NO_EXCEPTIONS 0x000002 /* C++: return error values. */
-#define DB_FORCE 0x000004 /* Force (anything). */
-#define DB_NOMMAP 0x000008 /* Don't mmap underlying file. */
-#define DB_RDONLY 0x000010 /* Read-only (O_RDONLY). */
-#define DB_RECOVER 0x000020 /* Run normal recovery. */
-#define DB_THREAD 0x000040 /* Applications are threaded. */
-#define DB_TXN_NOSYNC 0x000080 /* Do not sync log on commit. */
-#define DB_USE_ENVIRON 0x000100 /* Use the environment. */
-#define DB_USE_ENVIRON_ROOT 0x000200 /* Use the environment if root. */
+#define DB_CREATE 0x0000001 /* Create file as necessary. */
+#define DB_CXX_NO_EXCEPTIONS 0x0000002 /* C++: return error values. */
+#define DB_FORCE 0x0000004 /* Force (anything). */
+#define DB_NOMMAP 0x0000008 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000010 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000020 /* Run normal recovery. */
+#define DB_THREAD 0x0000040 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000080 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000100 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000200 /* Do not log changes. */
+#define DB_USE_ENVIRON 0x0000400 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0000800 /* Use the environment if root. */
+
+/*
+ * Common flags --
+ * Interfaces which use any of these common flags should never have
+ * interface specific flags in this range.
+ *
+ * DB_AUTO_COMMIT:
+ * DB_ENV->set_flags, DB->associate, DB->del, DB->put, DB->open,
+ * DB->remove, DB->rename, DB->truncate
+ * DB_DIRTY_READ:
+ * DB->cursor, DB->get, DB->join, DB->open, DBcursor->c_get,
+ * DB_ENV->txn_begin
+ * DB_NOAUTO_COMMIT
+ * DB->associate, DB->del, DB->put, DB->open,
+ * DB->remove, DB->rename, DB->truncate
+ *
+ * !!!
+ * The DB_DIRTY_READ bit mask can't be changed without also changing the
+ * masks for the flags that can be OR'd into DB access method and cursor
+ * operation values.
+ */
+#define DB_AUTO_COMMIT 0x1000000 /* Implied transaction. */
+#define DB_DIRTY_READ 0x2000000 /* Dirty Read. */
+#define DB_NO_AUTO_COMMIT 0x4000000 /* Override env-wide AUTO-COMMIT. */
/*
* Flags private to db_env_create.
*/
-#define DB_CLIENT 0x000400 /* Open for a client environment. */
+#define DB_RPCCLIENT 0x0000001 /* An RPC client environment. */
/*
* Flags private to db_create.
*/
-#define DB_XA_CREATE 0x000400 /* Open in an XA environment. */
+#define DB_REP_CREATE 0x0000001 /* Open of an internal rep database. */
+#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
/*
- * Flags private to DBENV->open.
- */
-#define DB_INIT_CDB 0x000400 /* Concurrent Access Methods. */
-#define DB_INIT_LOCK 0x000800 /* Initialize locking. */
-#define DB_INIT_LOG 0x001000 /* Initialize logging. */
-#define DB_INIT_MPOOL 0x002000 /* Initialize mpool. */
-#define DB_INIT_TXN 0x004000 /* Initialize transactions. */
-#define DB_JOINENV 0x008000 /* Initialize all subsystems present. */
-#define DB_LOCKDOWN 0x010000 /* Lock memory into physical core. */
-#define DB_PRIVATE 0x020000 /* DB_ENV is process local. */
-#define DB_RECOVER_FATAL 0x040000 /* Run catastrophic recovery. */
-#define DB_SYSTEM_MEM 0x080000 /* Use system-backed memory. */
+ * Flags private to DB_ENV->open.
+ * Shared flags up to 0x0000800 */
+#define DB_INIT_CDB 0x0001000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0002000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0004000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0008000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0010000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0020000 /* Initialize transactions. */
+#define DB_JOINENV 0x0040000 /* Initialize all subsystems present. */
+#define DB_LOCKDOWN 0x0080000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0100000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0200000 /* Run catastrophic recovery. */
+#define DB_SYSTEM_MEM 0x0400000 /* Use system-backed memory. */
/*
* Flags private to DB->open.
- */
-#define DB_EXCL 0x000400 /* Exclusive open (O_EXCL). */
-#define DB_FCNTL_LOCKING 0x000800 /* UNDOC: fcntl(2) locking. */
-#define DB_ODDFILESIZE 0x001000 /* UNDOC: truncate to N * pgsize. */
-#define DB_RDWRMASTER 0x002000 /* UNDOC: allow subdb master open R/W */
-#define DB_TRUNCATE 0x004000 /* Discard existing DB (O_TRUNC). */
-#define DB_EXTENT 0x008000 /* UNDOC: dealing with an extent. */
+ * Shared flags up to 0x0000800 */
+#define DB_EXCL 0x0001000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */
+#define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */
/*
- * Flags private to DBENV->txn_begin.
- */
-#define DB_TXN_NOWAIT 0x000400 /* Do not wait for locks in this TXN. */
-#define DB_TXN_SYNC 0x000800 /* Always sync log on commit. */
+ * Flags private to DB_ENV->txn_begin.
+ * Shared flags up to 0x0000800 */
+#define DB_TXN_NOWAIT 0x0001000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0002000 /* Always sync log on commit. */
/*
- * Flags private to DBENV->set_flags.
+ * Flags private to DB_ENV->set_encrypt.
*/
-#define DB_CDB_ALLDB 0x000400 /* In CDB, lock across environment. */
+#define DB_ENCRYPT_AES 0x0000001 /* AES, assumes SHA1 checksum */
+
+/*
+ * Flags private to DB_ENV->set_flags.
+ * Shared flags up to 0x0000800 */
+#define DB_CDB_ALLDB 0x0001000 /* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x0002000 /* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x0004000 /* Don't buffer log files in the OS. */
+#define DB_LOG_AUTOREMOVE 0x0008000 /* Automatically remove log files. */
+#define DB_NOLOCKING 0x0010000 /* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x0020000 /* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x0040000 /* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x0080000 /* Set panic state per environment. */
+#define DB_REGION_INIT 0x0100000 /* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x0200000 /* Return NOTGRANTED on timeout. */
+#define DB_TXN_WRITE_NOSYNC 0x0400000 /* Write, don't sync, on txn commit. */
+#define DB_YIELDCPU 0x0800000 /* Yield the CPU (a lot). */
/*
* Flags private to DB->set_feedback's callback.
*/
-#define DB_UPGRADE 0x000400 /* Upgrading. */
-#define DB_VERIFY 0x000800 /* Verifying. */
+#define DB_UPGRADE 0x0000001 /* Upgrading. */
+#define DB_VERIFY 0x0000002 /* Verifying. */
+
+/*
+ * Flags private to DB_MPOOLFILE->open.
+ * Shared flags up to 0x0000800 */
+#define DB_DIRECT 0x0001000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0002000 /* UNDOC: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0004000 /* Truncate file to N * pgsize. */
/*
* Flags private to DB->set_flags.
- *
- * DB->set_flags does not share common flags and so values start at 0x01.
*/
-#define DB_DUP 0x0001 /* Btree, Hash: duplicate keys. */
-#define DB_DUPSORT 0x0002 /* Btree, Hash: duplicate keys. */
-#define DB_RECNUM 0x0004 /* Btree: record numbers. */
-#define DB_RENUMBER 0x0008 /* Recno: renumber on insert/delete. */
-#define DB_REVSPLITOFF 0x0010 /* Btree: turn off reverse splits. */
-#define DB_SNAPSHOT 0x0020 /* Recno: snapshot the input. */
+#define DB_CHKSUM 0x0000001 /* Do checksumming */
+#define DB_DUP 0x0000002 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x0000004 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x0000008 /* Btree, Hash: duplicate keys. */
+#define DB_RECNUM 0x0000010 /* Btree: record numbers. */
+#define DB_RENUMBER 0x0000020 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x0000040 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x0000080 /* Recno: snapshot the input. */
+
+/*
+ * Flags private to the DB->stat methods.
+ */
+#define DB_STAT_CLEAR 0x0000001 /* Clear stat after returning values. */
/*
* Flags private to DB->join.
- *
- * DB->join does not share common flags and so values start at 0x01.
*/
-#define DB_JOIN_NOSORT 0x0001 /* Don't try to optimize join. */
+#define DB_JOIN_NOSORT 0x0000001 /* Don't try to optimize join. */
/*
* Flags private to DB->verify.
- *
- * DB->verify does not share common flags and so values start at 0x01.
*/
-#define DB_AGGRESSIVE 0x0001 /* Salvage anything which might be data.*/
-#define DB_NOORDERCHK 0x0002 /* Skip order check; subdb w/ user func */
-#define DB_ORDERCHKONLY 0x0004 /* Only perform an order check on subdb */
-#define DB_PR_PAGE 0x0008 /* Show page contents (-da). */
-#define DB_PR_HEADERS 0x0010 /* Show only page headers (-dh). */
-#define DB_PR_RECOVERYTEST 0x0020 /* Recovery test (-dr). */
-#define DB_SALVAGE 0x0040 /* Salvage what looks like data. */
+#define DB_AGGRESSIVE 0x0000001 /* Salvage whatever could be data.*/
+#define DB_NOORDERCHK 0x0000002 /* Skip sort order/hashing check. */
+#define DB_ORDERCHKONLY 0x0000004 /* Only perform the order check. */
+#define DB_PR_PAGE 0x0000008 /* Show page contents (-da). */
+#define DB_PR_RECOVERYTEST 0x0000010 /* Recovery test (-dr). */
+#define DB_PRINTABLE 0x0000020 /* Use printable format for salvage. */
+#define DB_SALVAGE 0x0000040 /* Salvage what looks like data. */
/*
* !!!
* These must not go over 0x8000, or they will collide with the flags
* used by __bam_vrfy_subtree.
*/
-#define DB_VRFY_FLAGMASK 0xffff /* For masking above flags. */
/*
- * Deadlock detector modes; used in the DBENV structure to configure the
+ * Flags private to DB->set_rep_transport's send callback.
+ */
+#define DB_REP_NOBUFFER 0x0000001 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000002 /* Important--app. may want to flush. */
+
+/*******************************************************
+ * Locking.
+ *******************************************************/
+#define DB_LOCKVERSION 1
+
+#define DB_FILE_ID_LEN 20 /* Unique file ID length. */
+
+/*
+ * Deadlock detector modes; used in the DB_ENV structure to configure the
* locking subsystem.
*/
#define DB_LOCK_NORUN 0
#define DB_LOCK_DEFAULT 1 /* Default policy. */
-#define DB_LOCK_OLDEST 2 /* Abort oldest transaction. */
-#define DB_LOCK_RANDOM 3 /* Abort random transaction. */
-#define DB_LOCK_YOUNGEST 4 /* Abort youngest transaction. */
+#define DB_LOCK_EXPIRE 2 /* Only expire locks, no detection. */
+#define DB_LOCK_MAXLOCKS 3 /* Abort txn with maximum # of locks. */
+#define DB_LOCK_MINLOCKS 4 /* Abort txn with minimum # of locks. */
+#define DB_LOCK_MINWRITE 5 /* Abort txn with minimum writelocks. */
+#define DB_LOCK_OLDEST 6 /* Abort oldest transaction. */
+#define DB_LOCK_RANDOM 7 /* Abort random transaction. */
+#define DB_LOCK_YOUNGEST 8 /* Abort youngest transaction. */
+
+/* Flag values for lock_vec(), lock_get(). */
+#define DB_LOCK_NOWAIT 0x001 /* Don't wait on unavailable lock. */
+#define DB_LOCK_RECORD 0x002 /* Internal: record lock. */
+#define DB_LOCK_REMOVE 0x004 /* Internal: flag object removed. */
+#define DB_LOCK_SET_TIMEOUT 0x008 /* Internal: set lock timeout. */
+#define DB_LOCK_SWITCH 0x010 /* Internal: switch existing lock. */
+#define DB_LOCK_UPGRADE 0x020 /* Internal: upgrade existing lock. */
+
+/*
+ * Simple R/W lock modes and for multi-granularity intention locking.
+ *
+ * !!!
+ * These values are NOT random, as they are used as an index into the lock
+ * conflicts arrays, i.e., DB_LOCK_IWRITE must be == 3, and DB_LOCK_IREAD
+ * must be == 4.
+ */
+typedef enum {
+ DB_LOCK_NG=0, /* Not granted. */
+ DB_LOCK_READ=1, /* Shared/read. */
+ DB_LOCK_WRITE=2, /* Exclusive/write. */
+ DB_LOCK_WAIT=3, /* Wait for event */
+ DB_LOCK_IWRITE=4, /* Intent exclusive/write. */
+ DB_LOCK_IREAD=5, /* Intent to share/read. */
+ DB_LOCK_IWR=6, /* Intent to read and write. */
+ DB_LOCK_DIRTY=7, /* Dirty Read. */
+ DB_LOCK_WWRITE=8 /* Was Written. */
+} db_lockmode_t;
+
+/*
+ * Request types.
+ */
+typedef enum {
+ DB_LOCK_DUMP=0, /* Display held locks. */
+ DB_LOCK_GET=1, /* Get the lock. */
+ DB_LOCK_GET_TIMEOUT=2, /* Get lock with a timeout. */
+ DB_LOCK_INHERIT=3, /* Pass locks to parent. */
+ DB_LOCK_PUT=4, /* Release the lock. */
+ DB_LOCK_PUT_ALL=5, /* Release locker's locks. */
+ DB_LOCK_PUT_OBJ=6, /* Release locker's locks on obj. */
+ DB_LOCK_PUT_READ=7, /* Release locker's read locks. */
+ DB_LOCK_TIMEOUT=8, /* Force a txn to timeout. */
+ DB_LOCK_TRADE=9, /* Trade locker ids on a lock. */
+ DB_LOCK_UPGRADE_WRITE=10 /* Upgrade writes for dirty reads. */
+} db_lockop_t;
+
+/*
+ * Status of a lock.
+ */
+typedef enum {
+ DB_LSTAT_ABORTED=1, /* Lock belongs to an aborted txn. */
+ DB_LSTAT_ERR=2, /* Lock is bad. */
+ DB_LSTAT_EXPIRED=3, /* Lock has expired. */
+ DB_LSTAT_FREE=4, /* Lock is unallocated. */
+ DB_LSTAT_HELD=5, /* Lock is currently held. */
+ DB_LSTAT_NOTEXIST=6, /* Object on which lock was waiting
+ * was removed */
+ DB_LSTAT_PENDING=7, /* Lock was waiting and has been
+ * promoted; waiting for the owner
+ * to run and upgrade it to held. */
+ DB_LSTAT_WAITING=8 /* Lock is on the wait queue. */
+}db_status_t;
+
+/* Lock statistics structure. */
+struct __db_lock_stat {
+ u_int32_t st_id; /* Last allocated locker ID. */
+ u_int32_t st_cur_maxid; /* Current maximum unused ID. */
+ u_int32_t st_maxlocks; /* Maximum number of locks in table. */
+ u_int32_t st_maxlockers; /* Maximum num of lockers in table. */
+ u_int32_t st_maxobjects; /* Maximum num of objects in table. */
+ u_int32_t st_nmodes; /* Number of lock modes. */
+ u_int32_t st_nlocks; /* Current number of locks. */
+ u_int32_t st_maxnlocks; /* Maximum number of locks so far. */
+ u_int32_t st_nlockers; /* Current number of lockers. */
+ u_int32_t st_maxnlockers; /* Maximum number of lockers so far. */
+ u_int32_t st_nobjects; /* Current number of objects. */
+ u_int32_t st_maxnobjects; /* Maximum number of objects so far. */
+ u_int32_t st_nconflicts; /* Number of lock conflicts. */
+ u_int32_t st_nrequests; /* Number of lock gets. */
+ u_int32_t st_nreleases; /* Number of lock puts. */
+ u_int32_t st_nnowaits; /* Number of requests that would have
+ waited, but NOWAIT was set. */
+ u_int32_t st_ndeadlocks; /* Number of lock deadlocks. */
+ db_timeout_t st_locktimeout; /* Lock timeout. */
+ u_int32_t st_nlocktimeouts; /* Number of lock timeouts. */
+ db_timeout_t st_txntimeout; /* Transaction timeout. */
+ u_int32_t st_ntxntimeouts; /* Number of transaction timeouts. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ u_int32_t st_regsize; /* Region size. */
+};
+
+/*
+ * DB_LOCK_ILOCK --
+ * Internal DB access method lock.
+ */
+struct __db_ilock {
+ db_pgno_t pgno; /* Page being locked. */
+ u_int8_t fileid[DB_FILE_ID_LEN];/* File id. */
+#define DB_HANDLE_LOCK 1
+#define DB_RECORD_LOCK 2
+#define DB_PAGE_LOCK 3
+ u_int32_t type; /* Type of lock. */
+};
+
+/*
+ * DB_LOCK --
+ * The structure is allocated by the caller and filled in during a
+ * lock_get request (or a lock_vec/DB_LOCK_GET).
+ */
+struct __db_lock_u {
+ size_t off; /* Offset of the lock in the region */
+ u_int32_t ndx; /* Index of the object referenced by
+ * this lock; used for locking. */
+ u_int32_t gen; /* Generation number of this lock. */
+ db_lockmode_t mode; /* mode of this lock. */
+};
+
+/* Lock request structure. */
+struct __db_lockreq {
+ db_lockop_t op; /* Operation. */
+ db_lockmode_t mode; /* Requested mode. */
+ db_timeout_t timeout; /* Time to expire lock. */
+ DBT *obj; /* Object being locked. */
+ DB_LOCK lock; /* Lock returned. */
+};
/*******************************************************
- * Environment.
+ * Logging.
*******************************************************/
-#define DB_REGION_MAGIC 0x120897 /* Environment magic number. */
+#define DB_LOGVERSION 8 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
+#define DB_LOGMAGIC 0x040988
-typedef enum {
- DB_TXN_ABORT,
- DB_TXN_BACKWARD_ROLL,
- DB_TXN_FORWARD_ROLL,
- DB_TXN_OPENFILES
-} db_recops;
+/* Flag values for DB_ENV->log_archive(). */
+#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
+#define DB_ARCH_DATA 0x002 /* Data files. */
+#define DB_ARCH_LOG 0x004 /* Log files. */
+#define DB_ARCH_REMOVE 0x008 /* Remove log files. */
+
+/* Flag values for DB_ENV->log_put(). */
+#define DB_FLUSH 0x001 /* Flush data to disk (public). */
+#define DB_LOG_CHKPNT 0x002 /* Flush supports a checkpoint */
+#define DB_LOG_COMMIT 0x004 /* Flush supports a commit */
+#define DB_LOG_NOCOPY 0x008 /* Don't copy data */
+#define DB_LOG_NOT_DURABLE 0x010 /* Do not log; keep in memory */
+#define DB_LOG_PERM 0x020 /* Flag record with REP_PERMANENT */
+#define DB_LOG_WRNOSYNC 0x040 /* Write, don't sync log_put */
-#define DB_UNDO(op) ((op) == DB_TXN_ABORT || (op) == DB_TXN_BACKWARD_ROLL)
-#define DB_REDO(op) ((op) == DB_TXN_FORWARD_ROLL)
+/*
+ * A DB_LSN has two parts, a fileid which identifies a specific file, and an
+ * offset within that file. The fileid is an unsigned 4-byte quantity that
+ * uniquely identifies a file within the log directory -- currently a simple
+ * counter inside the log. The offset is also an unsigned 4-byte value. The
+ * log manager guarantees the offset is never more than 4 bytes by switching
+ * to a new log file before the maximum length imposed by an unsigned 4-byte
+ * offset is reached.
+ */
+struct __db_lsn {
+ u_int32_t file; /* File ID. */
+ u_int32_t offset; /* File offset. */
+};
-struct __db_env {
- /*******************************************************
- * Public: owned by the application.
- *******************************************************/
- FILE *db_errfile; /* Error message file stream. */
- const char *db_errpfx; /* Error message prefix. */
- /* Callbacks. */
- void (*db_errcall) __P((const char *, char *));
- void (*db_feedback) __P((DB_ENV *, int, int));
- void (*db_paniccall) __P((DB_ENV *, int));
- int (*db_recovery_init) __P((DB_ENV *));
+/*
+ * Application-specified log record types start at DB_user_BEGIN, and must not
+ * equal or exceed DB_debug_FLAG.
+ *
+ * DB_debug_FLAG is the high-bit of the u_int32_t that specifies a log record
+ * type. If the flag is set, it's a log record that was logged for debugging
+ * purposes only, even if it reflects a database change -- the change was part
+ * of a non-durable transaction.
+ */
+#define DB_user_BEGIN 10000
+#define DB_debug_FLAG 0x80000000
- /*
- * Currently, the verbose list is a bit field with room for 32
- * entries. There's no reason that it needs to be limited, if
- * there are ever more than 32 entries, convert to a bit array.
- */
-#define DB_VERB_CHKPOINT 0x0001 /* List checkpoints. */
-#define DB_VERB_DEADLOCK 0x0002 /* Deadlock detection information. */
-#define DB_VERB_RECOVERY 0x0004 /* Recovery information. */
-#define DB_VERB_WAITSFOR 0x0008 /* Dump waits-for table. */
- u_int32_t verbose; /* Verbose output. */
+/*
+ * DB_LOGC --
+ * Log cursor.
+ */
+struct __db_log_cursor {
+ DB_ENV *dbenv; /* Enclosing dbenv. */
- void *app_private; /* Application-private handle. */
+ DB_FH *c_fhp; /* File handle. */
+ DB_LSN c_lsn; /* Cursor: LSN */
+ u_int32_t c_len; /* Cursor: record length */
+ u_int32_t c_prev; /* Cursor: previous record's offset */
- /* Locking. */
- u_int8_t *lk_conflicts; /* Two dimensional conflict matrix. */
- u_int32_t lk_modes; /* Number of lock modes in table. */
- u_int32_t lk_max; /* Maximum number of locks. */
- u_int32_t lk_max_lockers;/* Maximum number of lockers. */
- u_int32_t lk_max_objects;/* Maximum number of locked objects. */
- u_int32_t lk_detect; /* Deadlock detect on all conflicts. */
+ DBT c_dbt; /* Return DBT. */
- /* Logging. */
- u_int32_t lg_bsize; /* Buffer size. */
- u_int32_t lg_max; /* Maximum file size. */
+#define DB_LOGC_BUF_SIZE (32 * 1024)
+ u_int8_t *bp; /* Allocated read buffer. */
+ u_int32_t bp_size; /* Read buffer length in bytes. */
+ u_int32_t bp_rlen; /* Read buffer valid data length. */
+ DB_LSN bp_lsn; /* Read buffer first byte LSN. */
- /* Memory pool. */
- u_int32_t mp_gbytes; /* Cachesize: GB. */
- u_int32_t mp_bytes; /* Cachesize: Bytes. */
- size_t mp_size; /* DEPRECATED: Cachesize: bytes. */
- int mp_ncache; /* Number of cache regions. */
- size_t mp_mmapsize; /* Maximum file size for mmap. */
+ u_int32_t bp_maxrec; /* Max record length in the log file. */
- /* Transactions. */
- u_int32_t tx_max; /* Maximum number of transactions. */
- time_t tx_timestamp; /* Recover to specific timestamp. */
- int (*tx_recover) /* Dispatch function for recovery. */
- __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+ /* Methods. */
+ int (*close) __P((DB_LOGC *, u_int32_t));
+ int (*get) __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
- /*******************************************************
- * Private: owned by DB.
- *******************************************************/
- int db_panic; /* Panic causing errno. */
+#define DB_LOG_DISK 0x01 /* Log record came from disk. */
+#define DB_LOG_LOCKED 0x02 /* Log region already locked */
+#define DB_LOG_SILENT_ERR 0x04 /* Turn-off error messages. */
+ u_int32_t flags;
+};
- /* User files, paths. */
- char *db_home; /* Database home. */
- char *db_log_dir; /* Database log file directory. */
- char *db_tmp_dir; /* Database tmp file directory. */
+/* Log statistics structure. */
+struct __db_log_stat {
+ u_int32_t st_magic; /* Log file magic number. */
+ u_int32_t st_version; /* Log file version number. */
+ int st_mode; /* Log file mode. */
+ u_int32_t st_lg_bsize; /* Log buffer size. */
+ u_int32_t st_lg_size; /* Log file size. */
+ u_int32_t st_w_bytes; /* Bytes to log. */
+ u_int32_t st_w_mbytes; /* Megabytes to log. */
+ u_int32_t st_wc_bytes; /* Bytes to log since checkpoint. */
+ u_int32_t st_wc_mbytes; /* Megabytes to log since checkpoint. */
+ u_int32_t st_wcount; /* Total writes to the log. */
+ u_int32_t st_wcount_fill; /* Overflow writes to the log. */
+ u_int32_t st_scount; /* Total syncs to the log. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ u_int32_t st_cur_file; /* Current log file number. */
+ u_int32_t st_cur_offset; /* Current log file offset. */
+ u_int32_t st_disk_file; /* Known on disk log file number. */
+ u_int32_t st_disk_offset; /* Known on disk log file offset. */
+ u_int32_t st_regsize; /* Region size. */
+ u_int32_t st_maxcommitperflush; /* Max number of commits in a flush. */
+ u_int32_t st_mincommitperflush; /* Min number of commits in a flush. */
+};
- char **db_data_dir; /* Database data file directories. */
- int data_cnt; /* Database data file slots. */
- int data_next; /* Next Database data file slot. */
+/*******************************************************
+ * Shared buffer cache (mpool).
+ *******************************************************/
+/* Flag values for DB_MPOOLFILE->get. */
+#define DB_MPOOL_CREATE 0x001 /* Create a page. */
+#define DB_MPOOL_LAST 0x002 /* Return the last page. */
+#define DB_MPOOL_NEW 0x004 /* Create a new page. */
- int db_mode; /* Default open permissions. */
+/* Flag values for DB_MPOOLFILE->put, DB_MPOOLFILE->set. */
+#define DB_MPOOL_CLEAN 0x001 /* Page is not modified. */
+#define DB_MPOOL_DIRTY 0x002 /* Page is modified. */
+#define DB_MPOOL_DISCARD 0x004 /* Don't cache the page. */
- void *reginfo; /* REGINFO structure reference. */
- DB_FH *lockfhp; /* fcntl(2) locking file handle. */
- long shm_key; /* shmget(2) key. */
+/* Flags values for DB_MPOOLFILE->set_flags. */
+#define DB_MPOOL_NOFILE 0x001 /* Never open a backing file. */
+#define DB_MPOOL_UNLINK 0x002 /* Unlink the file on last close. */
- void *lg_handle; /* Log handle. */
+/* Priority values for DB_MPOOLFILE->set_priority. */
+typedef enum {
+ DB_PRIORITY_VERY_LOW=1,
+ DB_PRIORITY_LOW=2,
+ DB_PRIORITY_DEFAULT=3,
+ DB_PRIORITY_HIGH=4,
+ DB_PRIORITY_VERY_HIGH=5
+} DB_CACHE_PRIORITY;
- void *lk_handle; /* Lock handle. */
+/* Per-process DB_MPOOLFILE information. */
+struct __db_mpoolfile {
+ DB_FH *fhp; /* Underlying file handle. */
- void *mp_handle; /* Mpool handle. */
+ /*
+ * !!!
+ * The ref, pinref and q fields are protected by the region lock.
+ */
+ u_int32_t ref; /* Reference count. */
- void *tx_handle; /* Txn handle. */
+ u_int32_t pinref; /* Pinned block reference count. */
- int (**dtab) /* Dispatch table */
- __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- size_t dtab_size; /* Slots in the dispatch table. */
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__db_mpoolfile) q;
+ */
+ struct {
+ struct __db_mpoolfile *tqe_next;
+ struct __db_mpoolfile **tqe_prev;
+ } q; /* Linked list of DB_MPOOLFILE's. */
- void *cl_handle; /* RPC: remote client handle. */
- long cl_id; /* RPC: Remote client env id. */
+ /*
+ * !!!
+ * The rest of the fields (with the exception of the MP_FLUSH flag)
+ * are not thread-protected, even when they may be modified at any
+ * time by the application. The reason is the DB_MPOOLFILE handle
+ * is single-threaded from the viewpoint of the application, and so
+ * the only fields needing to be thread-protected are those accessed
+ * by checkpoint or sync threads when using DB_MPOOLFILE structures
+ * to flush buffers from the cache.
+ */
+ DB_ENV *dbenv; /* Overlying DB_ENV. */
+ MPOOLFILE *mfp; /* Underlying MPOOLFILE. */
+
+ u_int32_t clear_len; /* Cleared length on created pages. */
+ u_int8_t /* Unique file ID. */
+ fileid[DB_FILE_ID_LEN];
+ int ftype; /* File type. */
+ int32_t lsn_offset; /* LSN offset in page. */
+ u_int32_t gbytes, bytes; /* Maximum file size. */
+ DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
+ DB_CACHE_PRIORITY /* Cache priority. */
+ priority;
- int dblocal_ref; /* DB_ENV_DBLOCAL: reference count. */
- u_int32_t db_mutexlocks; /* db_set_mutexlocks */
+ void *addr; /* Address of mmap'd region. */
+ size_t len; /* Length of mmap'd region. */
+
+ u_int32_t config_flags; /* Flags to DB_MPOOLFILE->set_flags. */
+
+ /* Methods. */
+ int (*close) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ int (*open)__P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
+ int (*put) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*set) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*get_clear_len) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_clear_len) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*set_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*get_flags) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_flags) __P((DB_MPOOLFILE *, u_int32_t, int));
+ int (*get_ftype) __P((DB_MPOOLFILE *, int *));
+ int (*set_ftype) __P((DB_MPOOLFILE *, int));
+ int (*get_lsn_offset) __P((DB_MPOOLFILE *, int32_t *));
+ int (*set_lsn_offset) __P((DB_MPOOLFILE *, int32_t));
+ int (*get_maxsize) __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t *));
+ int (*set_maxsize) __P((DB_MPOOLFILE *, u_int32_t, u_int32_t));
+ int (*get_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*set_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*get_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
+ int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
+ int (*sync) __P((DB_MPOOLFILE *));
/*
- * List of open DB handles for this DB_ENV, used for cursor
- * adjustment. Must be protected for multi-threaded support.
+ * MP_FILEID_SET, MP_OPEN_CALLED and MP_READONLY do not need to be
+ * thread protected because they are initialized before the file is
+ * linked onto the per-process lists, and never modified.
*
+ * MP_FLUSH is thread protected becase it is potentially read/set by
+ * multiple threads of control.
+ */
+#define MP_FILEID_SET 0x001 /* Application supplied a file ID. */
+#define MP_FLUSH 0x002 /* Was opened to flush a buffer. */
+#define MP_OPEN_CALLED 0x004 /* File opened. */
+#define MP_READONLY 0x008 /* File is readonly. */
+ u_int32_t flags;
+};
+
+/*
+ * Mpool statistics structure.
+ */
+struct __db_mpool_stat {
+ u_int32_t st_gbytes; /* Total cache size: GB. */
+ u_int32_t st_bytes; /* Total cache size: B. */
+ u_int32_t st_ncache; /* Number of caches. */
+ u_int32_t st_regsize; /* Cache size. */
+ u_int32_t st_map; /* Pages from mapped files. */
+ u_int32_t st_cache_hit; /* Pages found in the cache. */
+ u_int32_t st_cache_miss; /* Pages not found in the cache. */
+ u_int32_t st_page_create; /* Pages created in the cache. */
+ u_int32_t st_page_in; /* Pages read in. */
+ u_int32_t st_page_out; /* Pages written out. */
+ u_int32_t st_ro_evict; /* Clean pages forced from the cache. */
+ u_int32_t st_rw_evict; /* Dirty pages forced from the cache. */
+ u_int32_t st_page_trickle; /* Pages written by memp_trickle. */
+ u_int32_t st_pages; /* Total number of pages. */
+ u_int32_t st_page_clean; /* Clean pages. */
+ u_int32_t st_page_dirty; /* Dirty pages. */
+ u_int32_t st_hash_buckets; /* Number of hash buckets. */
+ u_int32_t st_hash_searches; /* Total hash chain searches. */
+ u_int32_t st_hash_longest; /* Longest hash chain searched. */
+ u_int32_t st_hash_examined; /* Total hash entries searched. */
+ u_int32_t st_hash_nowait; /* Hash lock granted with nowait. */
+ u_int32_t st_hash_wait; /* Hash lock granted after wait. */
+ u_int32_t st_hash_max_wait; /* Max hash lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted with nowait. */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_alloc; /* Number of page allocations. */
+ u_int32_t st_alloc_buckets; /* Buckets checked during allocation. */
+ u_int32_t st_alloc_max_buckets; /* Max checked during allocation. */
+ u_int32_t st_alloc_pages; /* Pages checked during allocation. */
+ u_int32_t st_alloc_max_pages; /* Max checked during allocation. */
+};
+
+/* Mpool file statistics structure. */
+struct __db_mpool_fstat {
+ char *file_name; /* File name. */
+ size_t st_pagesize; /* Page size. */
+ u_int32_t st_map; /* Pages from mapped files. */
+ u_int32_t st_cache_hit; /* Pages found in the cache. */
+ u_int32_t st_cache_miss; /* Pages not found in the cache. */
+ u_int32_t st_page_create; /* Pages created in the cache. */
+ u_int32_t st_page_in; /* Pages read in. */
+ u_int32_t st_page_out; /* Pages written out. */
+};
+
+/*******************************************************
+ * Transactions and recovery.
+ *******************************************************/
+#define DB_TXNVERSION 1
+
+typedef enum {
+ DB_TXN_ABORT=0, /* Public. */
+ DB_TXN_APPLY=1, /* Public. */
+ DB_TXN_BACKWARD_ALLOC=2, /* Internal. */
+ DB_TXN_BACKWARD_ROLL=3, /* Public. */
+ DB_TXN_FORWARD_ROLL=4, /* Public. */
+ DB_TXN_GETPGNOS=5, /* Internal. */
+ DB_TXN_OPENFILES=6, /* Internal. */
+ DB_TXN_POPENFILES=7, /* Internal. */
+ DB_TXN_PRINT=8 /* Public. */
+} db_recops;
+
+/*
+ * BACKWARD_ALLOC is used during the forward pass to pick up any aborted
+ * allocations for files that were created during the forward pass.
+ * The main difference between _ALLOC and _ROLL is that the entry for
+ * the file not exist during the rollforward pass.
+ */
+#define DB_UNDO(op) ((op) == DB_TXN_ABORT || \
+ (op) == DB_TXN_BACKWARD_ROLL || (op) == DB_TXN_BACKWARD_ALLOC)
+#define DB_REDO(op) ((op) == DB_TXN_FORWARD_ROLL || (op) == DB_TXN_APPLY)
+
+struct __db_txn {
+ DB_TXNMGR *mgrp; /* Pointer to transaction manager. */
+ DB_TXN *parent; /* Pointer to transaction's parent. */
+ DB_LSN last_lsn; /* Lsn of last log write. */
+ u_int32_t txnid; /* Unique transaction id. */
+ u_int32_t tid; /* Thread id for use in MT XA. */
+ roff_t off; /* Detail structure within region. */
+ db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
+ db_timeout_t expire; /* Time this txn expires. */
+ void *txn_list; /* Undo information for parent. */
+
+ /*
* !!!
- * As this structure is allocated in per-process memory, the
- * mutex may need to be stored elsewhere on architectures unable
- * to support mutexes in heap memory, e.g. HP/UX 9.
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__db_txn) links;
+ * TAILQ_ENTRY(__db_txn) xalinks;
*/
- void *dblist_mutexp; /* Mutex. */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } links; /* Links transactions off manager. */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } xalinks; /* Links active XA transactions. */
+
/*
* !!!
- * Explicit representation of structure in queue.h.
- * LIST_HEAD(dblist, __db);
+ * Explicit representations of structures from queue.h.
+ * TAILQ_HEAD(__events, __txn_event) events;
*/
struct {
- struct __db *lh_first;
- } dblist;
+ struct __txn_event *tqh_first;
+ struct __txn_event **tqh_last;
+ } events;
/*
- * XA support.
- *
* !!!
- * Explicit representations of structures in queue.h.
- *
- * TAILQ_ENTRY(__db_env);
+ * Explicit representations of structures from queue.h.
+ * STAILQ_HEAD(__logrec, __txn_logrec) logs;
*/
struct {
- struct __db_env *tqe_next;
- struct __db_env **tqe_prev;
- } links;
- int xa_rmid; /* XA Resource Manager ID. */
- DB_TXN *xa_txn; /* XA Current transaction. */
+ struct __txn_logrec *stqh_first;
+ struct __txn_logrec **stqh_last;
+ } logs; /* Links deferred events. */
- void *cj_internal; /* C++/Java private. */
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_HEAD(__kids, __db_txn) kids;
+ */
+ struct __kids {
+ struct __db_txn *tqh_first;
+ struct __db_txn **tqh_last;
+ } kids;
- /* Methods. */
- int (*close) __P((DB_ENV *, u_int32_t));
- void (*err) __P((const DB_ENV *, int, const char *, ...));
- void (*errx) __P((const DB_ENV *, const char *, ...));
- int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
- int (*remove) __P((DB_ENV *, const char *, u_int32_t));
- int (*set_data_dir) __P((DB_ENV *, const char *));
- void (*set_errcall) __P((DB_ENV *, void (*)(const char *, char *)));
- void (*set_errfile) __P((DB_ENV *, FILE *));
- void (*set_errpfx) __P((DB_ENV *, const char *));
- int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
- int (*set_flags) __P((DB_ENV *, u_int32_t, int));
- int (*set_mutexlocks) __P((DB_ENV *, int));
- int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
- int (*set_recovery_init) __P((DB_ENV *, int (*)(DB_ENV *)));
- int (*set_server) __P((DB_ENV *, char *, long, long, u_int32_t));
- int (*set_shm_key) __P((DB_ENV *, long));
- int (*set_tmp_dir) __P((DB_ENV *, const char *));
- int (*set_verbose) __P((DB_ENV *, u_int32_t, int));
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__db_txn) klinks;
+ */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } klinks;
- int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
- int (*set_lg_dir) __P((DB_ENV *, const char *));
- int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ /* API-private structure: used by C++ */
+ void *api_internal;
- int (*set_lk_conflicts) __P((DB_ENV *, u_int8_t *, int));
- int (*set_lk_detect) __P((DB_ENV *, u_int32_t));
- int (*set_lk_max) __P((DB_ENV *, u_int32_t));
- int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
- int (*set_lk_max_lockers) __P((DB_ENV *, u_int32_t));
- int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
+ u_int32_t cursors; /* Number of cursors open for txn */
- int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
- int (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ /* Methods. */
+ int (*abort) __P((DB_TXN *));
+ int (*commit) __P((DB_TXN *, u_int32_t));
+ int (*discard) __P((DB_TXN *, u_int32_t));
+ u_int32_t (*id) __P((DB_TXN *));
+ int (*prepare) __P((DB_TXN *, u_int8_t *));
+ int (*set_timeout) __P((DB_TXN *, db_timeout_t, u_int32_t));
+
+#define TXN_CHILDCOMMIT 0x001 /* Transaction that has committed. */
+#define TXN_COMPENSATE 0x002 /* Compensating transaction. */
+#define TXN_DIRTY_READ 0x004 /* Transaction does dirty reads. */
+#define TXN_LOCKTIMEOUT 0x008 /* Transaction has a lock timeout. */
+#define TXN_MALLOC 0x010 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x020 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x040 /* Do not wait on locks. */
+#define TXN_RESTORED 0x080 /* Transaction has been restored. */
+#define TXN_SYNC 0x100 /* Sync on prepare and commit. */
+ u_int32_t flags;
+};
- int (*set_tx_max) __P((DB_ENV *, u_int32_t));
- int (*set_tx_recover) __P((DB_ENV *,
- int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
- int (*set_tx_timestamp) __P((DB_ENV *, time_t *));
+/*
+ * Structure used for two phase commit interface. Berkeley DB support for two
+ * phase commit is compatible with the X/open XA interface.
+ *
+ * The XA #define XIDDATASIZE defines the size of a global transaction ID. We
+ * have our own version here (for name space reasons) which must have the same
+ * value.
+ */
+#define DB_XIDDATASIZE 128
+struct __db_preplist {
+ DB_TXN *txn;
+ u_int8_t gid[DB_XIDDATASIZE];
+};
-#ifdef CONFIG_TEST
-#define DB_TEST_PREOPEN 1 /* before __os_open */
-#define DB_TEST_POSTOPEN 2 /* after __os_open */
-#define DB_TEST_POSTLOGMETA 3 /* after logging meta in btree */
-#define DB_TEST_POSTLOG 4 /* after logging all pages */
-#define DB_TEST_POSTSYNC 5 /* after syncing the log */
-#define DB_TEST_PRERENAME 6 /* before __os_rename */
-#define DB_TEST_POSTRENAME 7 /* after __os_rename */
- int test_abort; /* Abort value for testing. */
- int test_copy; /* Copy value for testing. */
-#endif
+/* Transaction statistics structure. */
+struct __db_txn_active {
+ u_int32_t txnid; /* Transaction ID */
+ u_int32_t parentid; /* Transaction ID of parent */
+ DB_LSN lsn; /* LSN when transaction began */
+ u_int32_t xa_status; /* XA status */
+ u_int8_t xid[DB_XIDDATASIZE]; /* XA global transaction ID */
+};
-#define DB_ENV_CDB 0x00001 /* DB_INIT_CDB. */
-#define DB_ENV_CDB_ALLDB 0x00002 /* CDB environment wide locking. */
-#define DB_ENV_CREATE 0x00004 /* DB_CREATE set. */
-#define DB_ENV_DBLOCAL 0x00008 /* DB_ENV allocated for private DB. */
-#define DB_ENV_LOCKDOWN 0x00010 /* DB_LOCKDOWN set. */
-#define DB_ENV_NOMMAP 0x00020 /* DB_NOMMAP set. */
-#define DB_ENV_OPEN_CALLED 0x00040 /* DBENV->open called (paths valid). */
-#define DB_ENV_PRIVATE 0x00080 /* DB_PRIVATE set. */
-#define DB_ENV_RPCCLIENT 0x00100 /* DB_CLIENT set. */
-#define DB_ENV_STANDALONE 0x00200 /* Test: freestanding environment. */
-#define DB_ENV_SYSTEM_MEM 0x00400 /* DB_SYSTEM_MEM set. */
-#define DB_ENV_THREAD 0x00800 /* DB_THREAD set. */
-#define DB_ENV_TXN_NOSYNC 0x01000 /* DB_TXN_NOSYNC set. */
-#define DB_ENV_USER_ALLOC 0x02000 /* User allocated the structure. */
- u_int32_t flags; /* Flags. */
+struct __db_txn_stat {
+ DB_LSN st_last_ckp; /* lsn of the last checkpoint */
+ time_t st_time_ckp; /* time of last checkpoint */
+ u_int32_t st_last_txnid; /* last transaction id given out */
+ u_int32_t st_maxtxns; /* maximum txns possible */
+ u_int32_t st_naborts; /* number of aborted transactions */
+ u_int32_t st_nbegins; /* number of begun transactions */
+ u_int32_t st_ncommits; /* number of committed transactions */
+ u_int32_t st_nactive; /* number of active transactions */
+ u_int32_t st_nrestores; /* number of restored transactions
+ after recovery. */
+ u_int32_t st_maxnactive; /* maximum active transactions */
+ DB_TXN_ACTIVE *st_txnarray; /* array of active transactions */
+ u_int32_t st_region_wait; /* Region lock granted after wait. */
+ u_int32_t st_region_nowait; /* Region lock granted without wait. */
+ u_int32_t st_regsize; /* Region size. */
+};
+
+/*******************************************************
+ * Replication.
+ *******************************************************/
+/* Special, out-of-band environment IDs. */
+#define DB_EID_BROADCAST -1
+#define DB_EID_INVALID -2
+
+/* rep_start flags values */
+#define DB_REP_CLIENT 0x001
+#define DB_REP_LOGSONLY 0x002
+#define DB_REP_MASTER 0x004
+
+/* Replication statistics. */
+struct __db_rep_stat {
+ /* !!!
+ * Many replication statistics fields cannot be protected by a mutex
+ * without an unacceptable performance penalty, since most message
+ * processing is done without the need to hold a region-wide lock.
+ * Fields whose comments end with a '+' may be updated without holding
+ * the replication or log mutexes (as appropriate), and thus may be
+ * off somewhat (or, on unreasonable architectures under unlucky
+ * circumstances, garbaged).
+ */
+ u_int32_t st_status; /* Current replication status. */
+ DB_LSN st_next_lsn; /* Next LSN to use or expect. */
+ DB_LSN st_waiting_lsn; /* LSN we're awaiting, if any. */
+
+ u_int32_t st_dupmasters; /* # of times a duplicate master
+ condition was detected.+ */
+ int st_env_id; /* Current environment ID. */
+ int st_env_priority; /* Current environment priority. */
+ u_int32_t st_gen; /* Current generation number. */
+ u_int32_t st_in_recovery; /* This site is in client sync-up. */
+ u_int32_t st_log_duplicated; /* Log records received multiply.+ */
+ u_int32_t st_log_queued; /* Log records currently queued.+ */
+ u_int32_t st_log_queued_max; /* Max. log records queued at once.+ */
+ u_int32_t st_log_queued_total; /* Total # of log recs. ever queued.+ */
+ u_int32_t st_log_records; /* Log records received and put.+ */
+ u_int32_t st_log_requested; /* Log recs. missed and requested.+ */
+ int st_master; /* Env. ID of the current master. */
+ u_int32_t st_master_changes; /* # of times we've switched masters. */
+ u_int32_t st_msgs_badgen; /* Messages with a bad generation #.+ */
+ u_int32_t st_msgs_processed; /* Messages received and processed.+ */
+ u_int32_t st_msgs_recover; /* Messages ignored because this site
+ was a client in recovery.+ */
+ u_int32_t st_msgs_send_failures;/* # of failed message sends.+ */
+ u_int32_t st_msgs_sent; /* # of successful message sends.+ */
+ u_int32_t st_newsites; /* # of NEWSITE msgs. received.+ */
+ int st_nsites; /* Current number of sites we will
+ assume during elections. */
+ u_int32_t st_nthrottles; /* # of times we were throttled. */
+ u_int32_t st_outdated; /* # of times we detected and returned
+ an OUTDATED condition.+ */
+ u_int32_t st_txns_applied; /* # of transactions applied.+ */
+
+ /* Elections generally. */
+ u_int32_t st_elections; /* # of elections held.+ */
+ u_int32_t st_elections_won; /* # of elections won by this site.+ */
+
+ /* Statistics about an in-progress election. */
+ int st_election_cur_winner; /* Current front-runner. */
+ u_int32_t st_election_gen; /* Election generation number. */
+ DB_LSN st_election_lsn; /* Max. LSN of current winner. */
+ int st_election_nsites; /* # of "registered voters". */
+ int st_election_priority; /* Current election priority. */
+ int st_election_status; /* Current election status. */
+ int st_election_tiebreaker; /* Election tiebreaker value. */
+ int st_election_votes; /* Votes received in this round. */
};
/*******************************************************
* Access methods.
*******************************************************/
-/*
- * !!!
- * Changes here must be reflected in java/src/com/sleepycat/db/Db.java.
- */
typedef enum {
DB_BTREE=1,
- DB_HASH,
- DB_RECNO,
- DB_QUEUE,
- DB_UNKNOWN /* Figure it out on open. */
+ DB_HASH=2,
+ DB_RECNO=3,
+ DB_QUEUE=4,
+ DB_UNKNOWN=5 /* Figure it out on open. */
} DBTYPE;
-#define DB_BTREEVERSION 8 /* Current btree version. */
-#define DB_BTREEOLDVER 6 /* Oldest btree version supported. */
+#define DB_RENAMEMAGIC 0x030800 /* File has been renamed. */
+
+#define DB_BTREEVERSION 9 /* Current btree version. */
+#define DB_BTREEOLDVER 8 /* Oldest btree version supported. */
#define DB_BTREEMAGIC 0x053162
-#define DB_HASHVERSION 7 /* Current hash version. */
-#define DB_HASHOLDVER 4 /* Oldest hash version supported. */
+#define DB_HASHVERSION 8 /* Current hash version. */
+#define DB_HASHOLDVER 7 /* Oldest hash version supported. */
#define DB_HASHMAGIC 0x061561
-#define DB_QAMVERSION 3 /* Current queue version. */
-#define DB_QAMOLDVER 1 /* Oldest queue version supported. */
+#define DB_QAMVERSION 4 /* Current queue version. */
+#define DB_QAMOLDVER 3 /* Oldest queue version supported. */
#define DB_QAMMAGIC 0x042253
-#define DB_LOGVERSION 3 /* Current log version. */
-#define DB_LOGOLDVER 3 /* Oldest log version supported. */
-#define DB_LOGMAGIC 0x040988
-
/*
* DB access method and cursor operation values. Each value is an operation
* code to which additional bit flags are added.
*/
-#define DB_AFTER 1 /* c_put() */
-#define DB_APPEND 2 /* put() */
-#define DB_BEFORE 3 /* c_put() */
-#define DB_CACHED_COUNTS 4 /* stat() */
-#define DB_CHECKPOINT 5 /* log_put(), log_get() */
-#define DB_CONSUME 6 /* get() */
-#define DB_CONSUME_WAIT 7 /* get() */
-#define DB_CURLSN 8 /* log_put() */
-#define DB_CURRENT 9 /* c_get(), c_put(), log_get() */
-#define DB_FIRST 10 /* c_get(), log_get() */
-#define DB_FLUSH 11 /* log_put() */
-#define DB_GET_BOTH 12 /* get(), c_get() */
-#define DB_GET_BOTHC 13 /* c_get() (internal) */
-#define DB_GET_RECNO 14 /* c_get() */
-#define DB_JOIN_ITEM 15 /* c_get(); do not do primary lookup */
-#define DB_KEYFIRST 16 /* c_put() */
-#define DB_KEYLAST 17 /* c_put() */
-#define DB_LAST 18 /* c_get(), log_get() */
-#define DB_NEXT 19 /* c_get(), log_get() */
-#define DB_NEXT_DUP 20 /* c_get() */
-#define DB_NEXT_NODUP 21 /* c_get() */
-#define DB_NODUPDATA 22 /* put(), c_put() */
-#define DB_NOOVERWRITE 23 /* put() */
-#define DB_NOSYNC 24 /* close() */
-#define DB_POSITION 25 /* c_dup() */
-#define DB_POSITIONI 26 /* c_dup() (internal) */
-#define DB_PREV 27 /* c_get(), log_get() */
-#define DB_PREV_NODUP 28 /* c_get(), log_get() */
-#define DB_RECORDCOUNT 29 /* stat() */
-#define DB_SET 30 /* c_get(), log_get() */
-#define DB_SET_RANGE 31 /* c_get() */
-#define DB_SET_RECNO 32 /* get(), c_get() */
-#define DB_WRITECURSOR 33 /* cursor() */
-#define DB_WRITELOCK 34 /* cursor() (internal) */
+#define DB_AFTER 1 /* c_put() */
+#define DB_APPEND 2 /* put() */
+#define DB_BEFORE 3 /* c_put() */
+#define DB_CACHED_COUNTS 4 /* stat() */
+#define DB_CONSUME 5 /* get() */
+#define DB_CONSUME_WAIT 6 /* get() */
+#define DB_CURRENT 7 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FAST_STAT 8 /* stat() */
+#define DB_FIRST 9 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 10 /* get(), c_get() */
+#define DB_GET_BOTHC 11 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 12 /* get(), c_get() */
+#define DB_GET_RECNO 13 /* c_get() */
+#define DB_JOIN_ITEM 14 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 15 /* c_put() */
+#define DB_KEYLAST 16 /* c_put() */
+#define DB_LAST 17 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 18 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 19 /* c_get() */
+#define DB_NEXT_NODUP 20 /* c_get() */
+#define DB_NODUPDATA 21 /* put(), c_put() */
+#define DB_NOOVERWRITE 22 /* put() */
+#define DB_NOSYNC 23 /* close() */
+#define DB_POSITION 24 /* c_dup() */
+#define DB_PREV 25 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 26 /* c_get(), DB_LOGC->get() */
+#define DB_RECORDCOUNT 27 /* stat() */
+#define DB_SET 28 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 29 /* set_timout() */
+#define DB_SET_RANGE 30 /* c_get() */
+#define DB_SET_RECNO 31 /* get(), c_get() */
+#define DB_SET_TXN_NOW 32 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 33 /* set_timout() */
+#define DB_UPDATE_SECONDARY 34 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 35 /* cursor() */
+#define DB_WRITELOCK 36 /* cursor() (internal) */
/* This has to change when the max opcode hits 255. */
#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
-#define DB_RMW 0x80000000 /* Acquire write flag immediately. */
/*
- * DB (user visible) error return codes.
+ * Masks for flags that can be OR'd into DB access method and cursor
+ * operation values.
*
- * !!!
- * Changes to any of the user visible error return codes must be reflected
- * in java/src/com/sleepycat/db/Db.java.
+ * DB_DIRTY_READ 0x02000000 Dirty Read. */
+#define DB_MULTIPLE 0x04000000 /* Return multiple data values. */
+#define DB_MULTIPLE_KEY 0x08000000 /* Return multiple data/key pairs. */
+#define DB_RMW 0x10000000 /* Acquire write flag immediately. */
+
+/*
+ * DB (user visible) error return codes.
*
* !!!
* For source compatibility with DB 2.X deadlock return (EAGAIN), use the
@@ -545,32 +1051,45 @@ typedef enum {
* possible, so pick a base error value that's hopefully not common. We
* document that we own the error name space from -30,800 to -30,999.
*/
-/* Public error return codes. */
-#define DB_INCOMPLETE (-30999)/* Sync didn't finish. */
-#define DB_KEYEMPTY (-30998)/* Key/data deleted or never created. */
-#define DB_KEYEXIST (-30997)/* The key/data pair already exists. */
-#define DB_LOCK_DEADLOCK (-30996)/* Deadlock. */
-#define DB_LOCK_NOTGRANTED (-30995)/* Lock unavailable. */
-#define DB_NOSERVER (-30994)/* Server panic return. */
-#define DB_NOSERVER_HOME (-30993)/* Bad home sent to server. */
-#define DB_NOSERVER_ID (-30992)/* Bad ID sent to server. */
-#define DB_NOTFOUND (-30991)/* Key/data pair not found (EOF). */
-#define DB_OLD_VERSION (-30990)/* Out-of-date version. */
-#define DB_RUNRECOVERY (-30989)/* Panic return. */
-#define DB_VERIFY_BAD (-30988)/* Verify failed; bad format. */
+/* DB (public) error return codes. */
+#define DB_DONOTINDEX (-30999)/* "Null" return from 2ndary callbk. */
+#define DB_FILEOPEN (-30998)/* Rename/remove while file is open. */
+#define DB_KEYEMPTY (-30997)/* Key/data deleted or never created. */
+#define DB_KEYEXIST (-30996)/* The key/data pair already exists. */
+#define DB_LOCK_DEADLOCK (-30995)/* Deadlock. */
+#define DB_LOCK_NOTGRANTED (-30994)/* Lock unavailable. */
+#define DB_NOSERVER (-30993)/* Server panic return. */
+#define DB_NOSERVER_HOME (-30992)/* Bad home sent to server. */
+#define DB_NOSERVER_ID (-30991)/* Bad ID sent to server. */
+#define DB_NOTFOUND (-30990)/* Key/data pair not found (EOF). */
+#define DB_OLD_VERSION (-30989)/* Out-of-date version. */
+#define DB_PAGE_NOTFOUND (-30988)/* Requested page not found. */
+#define DB_REP_DUPMASTER (-30987)/* There are two masters. */
+#define DB_REP_HANDLE_DEAD (-30986)/* Rolled back a commit. */
+#define DB_REP_HOLDELECTION (-30985)/* Time to hold an election. */
+#define DB_REP_ISPERM (-30984)/* Cached not written perm written.*/
+#define DB_REP_NEWMASTER (-30983)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30982)/* New site entered system. */
+#define DB_REP_NOTPERM (-30981)/* Permanent log record not written. */
+#define DB_REP_OUTDATED (-30980)/* Site is too far behind master. */
+#define DB_REP_UNAVAIL (-30979)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30978)/* Panic return. */
+#define DB_SECONDARY_BAD (-30977)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30976)/* Verify failed; bad format. */
/* DB (private) error return codes. */
#define DB_ALREADY_ABORTED (-30899)
#define DB_DELETED (-30898)/* Recovery file marked deleted. */
-#define DB_JAVA_CALLBACK (-30897)/* Exception during a java callback. */
+#define DB_LOCK_NOTEXIST (-30897)/* Object to lock is gone. */
#define DB_NEEDSPLIT (-30896)/* Page needs to be split. */
-#define DB_SWAPBYTES (-30895)/* Database needs byte swapping. */
-#define DB_TXN_CKP (-30894)/* Encountered ckp record in log. */
-#define DB_VERIFY_FATAL (-30893)/* Fatal: DB->verify cannot proceed. */
-
-#define DB_FILE_ID_LEN 20 /* DB file ID length. */
-
-/* DB access method description structure. */
+#define DB_SURPRISE_KID (-30895)/* Child commit where parent
+ didn't know it was a parent. */
+#define DB_SWAPBYTES (-30894)/* Database needs byte swapping. */
+#define DB_TIMEOUT (-30893)/* Timed out waiting for election. */
+#define DB_TXN_CKP (-30892)/* Encountered ckp record in log. */
+#define DB_VERIFY_FATAL (-30891)/* DB->verify cannot proceed. */
+
+/* Database handle. */
struct __db {
/*******************************************************
* Public: owned by the application.
@@ -580,8 +1099,6 @@ struct __db {
/* Callbacks. */
int (*db_append_recno) __P((DB *, DBT *, db_recno_t));
void (*db_feedback) __P((DB *, int, int));
- void *(*db_malloc) __P((size_t));
- void *(*db_realloc) __P((void *, size_t));
int (*dup_compare) __P((DB *, const DBT *, const DBT *));
void *app_private; /* Application-private handle. */
@@ -589,25 +1106,41 @@ struct __db {
/*******************************************************
* Private: owned by DB.
*******************************************************/
- DB_ENV *dbenv; /* Backing environment. */
+ DB_ENV *dbenv; /* Backing environment. */
DBTYPE type; /* DB access method type. */
DB_MPOOLFILE *mpf; /* Backing buffer pool. */
- void *mutexp; /* Synchronization for free threading */
+ DB_MUTEX *mutexp; /* Synchronization for free threading */
+
+ char *fname, *dname; /* File/database passed to DB->open. */
+ u_int32_t open_flags; /* Flags passed to DB->open. */
u_int8_t fileid[DB_FILE_ID_LEN];/* File's unique ID for locking. */
u_int32_t adj_fileid; /* File's unique ID for curs. adj. */
#define DB_LOGFILEID_INVALID -1
- int32_t log_fileid; /* File's unique ID for logging. */
+ FNAME *log_filename; /* File's naming info for logging. */
+
db_pgno_t meta_pgno; /* Meta page number */
- DB_TXN *open_txn; /* Transaction to protect creates. */
+ u_int32_t lid; /* Locker id for handle locking. */
+ u_int32_t cur_lid; /* Current handle lock holder. */
+ u_int32_t associate_lid; /* Locker id for DB->associate call. */
+ DB_LOCK handle_lock; /* Lock held on this handle. */
long cl_id; /* RPC: remote client id. */
+ time_t timestamp; /* Handle timestamp for replication. */
+
+ /*
+ * Returned data memory for DB->get() and friends.
+ */
+ DBT my_rskey; /* Secondary key. */
+ DBT my_rkey; /* [Primary] key. */
+ DBT my_rdata; /* Data. */
+
/*
* !!!
* Some applications use DB but implement their own locking outside of
@@ -624,28 +1157,11 @@ struct __db {
DB_FH *saved_open_fhp; /* Saved file handle. */
/*
- * Linked list of DBP's, used in the log's dbentry table
- * to keep track of all open db handles for a given log id.
- * !!!
- * Explicit representations of structures in queue.h.
- *
- * TAILQ_ENTRY(__db) links;
- */
- struct {
- struct __db *tqe_next;
- struct __db **tqe_prev;
- } links;
-
- /*
- * Linked list of DBP's, linked from the DB_ENV, used to
- * keep track of all open db handles for cursor adjustment.
- *
- * XXX
- * Eventually, this should be merged with "links" above.
+ * Linked list of DBP's, linked from the DB_ENV, used to keep track
+ * of all open db handles for cursor adjustment.
*
* !!!
- * Explicit representations of structures in queue.h.
- *
+ * Explicit representations of structures from queue.h.
* LIST_ENTRY(__db) dblistlinks;
*/
struct {
@@ -657,32 +1173,73 @@ struct __db {
* Cursor queues.
*
* !!!
- * Explicit representations of structures in queue.h.
- *
- * TAILQ_HEAD(free_queue, __dbc);
- * TAILQ_HEAD(active_queue, __dbc);
- * TAILQ_HEAD(join_queue, __dbc);
+ * Explicit representations of structures from queue.h.
+ * TAILQ_HEAD(__cq_fq, __dbc) free_queue;
+ * TAILQ_HEAD(__cq_aq, __dbc) active_queue;
+ * TAILQ_HEAD(__cq_jq, __dbc) join_queue;
*/
- struct {
+ struct __cq_fq {
struct __dbc *tqh_first;
struct __dbc **tqh_last;
} free_queue;
- struct {
+ struct __cq_aq {
struct __dbc *tqh_first;
struct __dbc **tqh_last;
} active_queue;
- struct {
+ struct __cq_jq {
struct __dbc *tqh_first;
struct __dbc **tqh_last;
} join_queue;
- void *bt_internal; /* Btree/Recno access method private. */
- void *cj_internal; /* C++/Java private. */
- void *h_internal; /* Hash access method private. */
- void *q_internal; /* Queue access method private. */
- void *xa_internal; /* XA private. */
+ /*
+ * Secondary index support.
+ *
+ * Linked list of secondary indices -- set in the primary.
+ *
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * LIST_HEAD(s_secondaries, __db);
+ */
+ struct {
+ struct __db *lh_first;
+ } s_secondaries;
+
+ /*
+ * List entries for secondaries, and reference count of how
+ * many threads are updating this secondary (see __db_c_put).
+ *
+ * !!!
+ * Note that these are synchronized by the primary's mutex, but
+ * filled in in the secondaries.
+ *
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * LIST_ENTRY(__db) s_links;
+ */
+ struct {
+ struct __db *le_next;
+ struct __db **le_prev;
+ } s_links;
+ u_int32_t s_refcnt;
+
+ /* Secondary callback and free functions -- set in the secondary. */
+ int (*s_callback) __P((DB *, const DBT *, const DBT *, DBT *));
+
+ /* Reference to primary -- set in the secondary. */
+ DB *s_primary;
+
+ /* API-private structure: used by DB 1.85, C++, Java, Perl and Tcl */
+ void *api_internal;
+
+ /* Subsystem-private structure. */
+ void *bt_internal; /* Btree/Recno access method. */
+ void *h_internal; /* Hash access method. */
+ void *q_internal; /* Queue access method. */
+ void *xa_internal; /* XA. */
/* Methods. */
+ int (*associate) __P((DB *, DB_TXN *, DB *, int (*)(DB *, const DBT *,
+ const DBT *, DBT *), u_int32_t));
int (*close) __P((DB *, u_int32_t));
int (*cursor) __P((DB *, DB_TXN *, DBC **, u_int32_t));
int (*del) __P((DB *, DB_TXN *, DBT *, u_int32_t));
@@ -690,38 +1247,52 @@ struct __db {
void (*errx) __P((DB *, const char *, ...));
int (*fd) __P((DB *, int *));
int (*get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
- int (*get_byteswapped) __P((DB *));
- DBTYPE
- (*get_type) __P((DB *));
+ int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+ int (*get_byteswapped) __P((DB *, int *));
+ int (*get_cachesize) __P((DB *, u_int32_t *, u_int32_t *, int *));
+ int (*get_dbname) __P((DB *, const char **, const char **));
+ int (*get_encrypt_flags) __P((DB *, u_int32_t *));
+ int (*get_env) __P((DB *, DB_ENV **));
+ void (*get_errfile) __P((DB *, FILE **));
+ void (*get_errpfx) __P((DB *, const char **));
+ int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_lorder) __P((DB *, int *));
+ int (*get_open_flags) __P((DB *, u_int32_t *));
+ int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_transactional) __P((DB *, int *));
+ int (*get_type) __P((DB *, DBTYPE *));
int (*join) __P((DB *, DBC **, DBC **, u_int32_t));
int (*key_range) __P((DB *,
DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
- int (*open) __P((DB *,
+ int (*open) __P((DB *, DB_TXN *,
const char *, const char *, DBTYPE, u_int32_t, int));
int (*put) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
int (*remove) __P((DB *, const char *, const char *, u_int32_t));
int (*rename) __P((DB *,
const char *, const char *, const char *, u_int32_t));
+ int (*truncate) __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
int (*set_append_recno) __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
+ int (*set_alloc) __P((DB *, void *(*)(size_t),
+ void *(*)(void *, size_t), void (*)(void *)));
int (*set_cachesize) __P((DB *, u_int32_t, u_int32_t, int));
int (*set_dup_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
+ int (*set_encrypt) __P((DB *, const char *, u_int32_t));
void (*set_errcall) __P((DB *, void (*)(const char *, char *)));
void (*set_errfile) __P((DB *, FILE *));
void (*set_errpfx) __P((DB *, const char *));
int (*set_feedback) __P((DB *, void (*)(DB *, int, int)));
int (*set_flags) __P((DB *, u_int32_t));
int (*set_lorder) __P((DB *, int));
- int (*set_malloc) __P((DB *, void *(*)(size_t)));
int (*set_pagesize) __P((DB *, u_int32_t));
int (*set_paniccall) __P((DB *, void (*)(DB_ENV *, int)));
- int (*set_realloc) __P((DB *, void *(*)(void *, size_t)));
- int (*stat) __P((DB *, void *, void *(*)(size_t), u_int32_t));
+ int (*stat) __P((DB *, void *, u_int32_t));
int (*sync) __P((DB *, u_int32_t));
int (*upgrade) __P((DB *, const char *, u_int32_t));
int (*verify) __P((DB *,
const char *, const char *, FILE *, u_int32_t));
+ int (*get_bt_minkey) __P((DB *, u_int32_t *));
int (*set_bt_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
int (*set_bt_maxkey) __P((DB *, u_int32_t));
@@ -729,99 +1300,181 @@ struct __db {
int (*set_bt_prefix) __P((DB *,
size_t (*)(DB *, const DBT *, const DBT *)));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
int (*set_h_ffactor) __P((DB *, u_int32_t));
int (*set_h_hash) __P((DB *,
u_int32_t (*)(DB *, const void *, u_int32_t)));
int (*set_h_nelem) __P((DB *, u_int32_t));
+ int (*get_re_delim) __P((DB *, int *));
+ int (*get_re_len) __P((DB *, u_int32_t *));
+ int (*get_re_pad) __P((DB *, int *));
+ int (*get_re_source) __P((DB *, const char **));
int (*set_re_delim) __P((DB *, int));
int (*set_re_len) __P((DB *, u_int32_t));
int (*set_re_pad) __P((DB *, int));
int (*set_re_source) __P((DB *, const char *));
+
+ int (*get_q_extentsize) __P((DB *, u_int32_t *));
int (*set_q_extentsize) __P((DB *, u_int32_t));
- int (*db_am_remove) __P((DB *, const char *,
- const char *, DB_LSN *, int (**)(DB *, void*), void **));
- int (*db_am_rename) __P((DB *,
+ int (*db_am_remove) __P((DB *,
+ DB_TXN *, const char *, const char *, DB_LSN *));
+ int (*db_am_rename) __P((DB *, DB_TXN *,
const char *, const char *, const char *));
+ /*
+ * Never called; these are a place to save function pointers
+ * so that we can undo an associate.
+ */
+ int (*stored_get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ int (*stored_close) __P((DB *, u_int32_t));
+
#define DB_OK_BTREE 0x01
#define DB_OK_HASH 0x02
#define DB_OK_QUEUE 0x04
#define DB_OK_RECNO 0x08
u_int32_t am_ok; /* Legal AM choices. */
-#define DB_AM_DISCARD 0x00001 /* Discard any cached pages. */
-#define DB_AM_DUP 0x00002 /* DB_DUP. */
-#define DB_AM_DUPSORT 0x00004 /* DB_DUPSORT. */
-#define DB_AM_INMEM 0x00008 /* In-memory; no sync on close. */
-#define DB_AM_PGDEF 0x00010 /* Page size was defaulted. */
-#define DB_AM_RDONLY 0x00020 /* Database is readonly. */
-#define DB_AM_RECOVER 0x00040 /* DBP opened by recovery routine. */
-#define DB_AM_SUBDB 0x00080 /* Subdatabases supported. */
-#define DB_AM_SWAP 0x00100 /* Pages need to be byte-swapped. */
-#define DB_AM_TXN 0x00200 /* DBP was in a transaction. */
-#define DB_AM_VERIFYING 0x00400 /* DB handle is in the verifier. */
-#define DB_BT_RECNUM 0x00800 /* DB_RECNUM. */
-#define DB_BT_REVSPLIT 0x01000 /* DB_REVSPLITOFF. */
-#define DB_DBM_ERROR 0x02000 /* Error in DBM/NDBM database. */
-#define DB_OPEN_CALLED 0x04000 /* DB->open called. */
-#define DB_RE_DELIMITER 0x08000 /* Variablen length delimiter set. */
-#define DB_RE_FIXEDLEN 0x10000 /* Fixed-length records. */
-#define DB_RE_PAD 0x20000 /* Fixed-length record pad. */
-#define DB_RE_RENUMBER 0x40000 /* DB_RENUMBER. */
-#define DB_RE_SNAPSHOT 0x80000 /* DB_SNAPSHOT. */
+#define DB_AM_CHKSUM 0x00000001 /* Checksumming. */
+#define DB_AM_CL_WRITER 0x00000002 /* Allow writes in client replica. */
+#define DB_AM_COMPENSATE 0x00000004 /* Created by compensating txn. */
+#define DB_AM_CREATED 0x00000008 /* Database was created upon open. */
+#define DB_AM_CREATED_MSTR 0x00000010 /* Encompassing file was created. */
+#define DB_AM_DBM_ERROR 0x00000020 /* Error in DBM/NDBM database. */
+#define DB_AM_DELIMITER 0x00000040 /* Variable length delimiter set. */
+#define DB_AM_DIRTY 0x00000080 /* Support Dirty Reads. */
+#define DB_AM_DISCARD 0x00000100 /* Discard any cached pages. */
+#define DB_AM_DUP 0x00000200 /* DB_DUP. */
+#define DB_AM_DUPSORT 0x00000400 /* DB_DUPSORT. */
+#define DB_AM_ENCRYPT 0x00000800 /* Encryption. */
+#define DB_AM_FIXEDLEN 0x00001000 /* Fixed-length records. */
+#define DB_AM_INMEM 0x00002000 /* In-memory; no sync on close. */
+#define DB_AM_IN_RENAME 0x00004000 /* File is being renamed. */
+#define DB_AM_NOT_DURABLE 0x00008000 /* Do not log changes. */
+#define DB_AM_OPEN_CALLED 0x00010000 /* DB->open called. */
+#define DB_AM_PAD 0x00020000 /* Fixed-length record pad. */
+#define DB_AM_PGDEF 0x00040000 /* Page size was defaulted. */
+#define DB_AM_RDONLY 0x00080000 /* Database is readonly. */
+#define DB_AM_RECNUM 0x00100000 /* DB_RECNUM. */
+#define DB_AM_RECOVER 0x00200000 /* DB opened by recovery routine. */
+#define DB_AM_RENUMBER 0x00400000 /* DB_RENUMBER. */
+#define DB_AM_REPLICATION 0x00800000 /* An internal replication file. */
+#define DB_AM_REVSPLITOFF 0x01000000 /* DB_REVSPLITOFF. */
+#define DB_AM_SECONDARY 0x02000000 /* Database is a secondary index. */
+#define DB_AM_SNAPSHOT 0x04000000 /* DB_SNAPSHOT. */
+#define DB_AM_SUBDB 0x08000000 /* Subdatabases supported. */
+#define DB_AM_SWAP 0x10000000 /* Pages need to be byte-swapped. */
+#define DB_AM_TXN 0x20000000 /* Opened in a transaction. */
+#define DB_AM_VERIFYING 0x40000000 /* DB handle is in the verifier. */
+ u_int32_t orig_flags; /* Flags at open, for refresh. */
u_int32_t flags;
};
/*
- * DB_LOCK_ILOCK --
- * Internal DB access method lock.
+ * Macros for bulk get. These are only intended for the C API.
+ * For C++, use DbMultiple*Iterator.
*/
-struct __db_ilock {
- db_pgno_t pgno; /* Page being locked. */
- u_int8_t fileid[DB_FILE_ID_LEN];/* File id. */
-#define DB_RECORD_LOCK 1
-#define DB_PAGE_LOCK 2
- u_int8_t type; /* Record or Page lock */
-};
-
-/*
- * DB_LOCK --
- * The structure is allocated by the caller and filled in during a
- * lock_get request (or a lock_vec/DB_LOCK_GET).
- */
-struct __db_lock_u {
- size_t off; /* Offset of the lock in the region */
- u_int32_t ndx; /* Index of the object referenced by
- * this lock; used for locking. */
- u_int32_t gen; /* Generation number of this lock. */
-};
+#define DB_MULTIPLE_INIT(pointer, dbt) \
+ (pointer = (u_int8_t *)(dbt)->data + \
+ (dbt)->ulen - sizeof(u_int32_t))
+#define DB_MULTIPLE_NEXT(pointer, dbt, retdata, retdlen) \
+ do { \
+ if (*((u_int32_t *)(pointer)) == (u_int32_t)-1) { \
+ retdata = NULL; \
+ pointer = NULL; \
+ break; \
+ } \
+ retdata = (u_int8_t *) \
+ (dbt)->data + *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retdlen = *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ if (retdlen == 0 && \
+ retdata == (u_int8_t *)(dbt)->data) \
+ retdata = NULL; \
+ } while (0)
+#define DB_MULTIPLE_KEY_NEXT(pointer, dbt, retkey, retklen, retdata, retdlen) \
+ do { \
+ if (*((u_int32_t *)(pointer)) == (u_int32_t)-1) { \
+ retdata = NULL; \
+ retkey = NULL; \
+ pointer = NULL; \
+ break; \
+ } \
+ retkey = (u_int8_t *) \
+ (dbt)->data + *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retklen = *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retdata = (u_int8_t *) \
+ (dbt)->data + *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retdlen = *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ } while (0)
+
+#define DB_MULTIPLE_RECNO_NEXT(pointer, dbt, recno, retdata, retdlen) \
+ do { \
+ if (*((u_int32_t *)(pointer)) == (u_int32_t)0) { \
+ recno = 0; \
+ retdata = NULL; \
+ pointer = NULL; \
+ break; \
+ } \
+ recno = *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retdata = (u_int8_t *) \
+ (dbt)->data + *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ retdlen = *(u_int32_t *)(pointer); \
+ (pointer) = (u_int32_t *)(pointer) - 1; \
+ } while (0)
-/* Cursor description structure. */
+/*******************************************************
+ * Access method cursors.
+ *******************************************************/
struct __dbc {
DB *dbp; /* Related DB access method. */
DB_TXN *txn; /* Associated transaction. */
/*
- * !!!
- * Explicit representations of structures in queue.h.
+ * Active/free cursor queues.
*
- * TAILQ_ENTRY(__dbc) links; Active/free cursor queues.
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__dbc) links;
*/
struct {
DBC *tqe_next;
DBC **tqe_prev;
} links;
- DBT rkey; /* Returned key. */
- DBT rdata; /* Returned data. */
+ /*
+ * The DBT *'s below are used by the cursor routines to return
+ * data to the user when DBT flags indicate that DB should manage
+ * the returned memory. They point at a DBT containing the buffer
+ * and length that will be used, and "belonging" to the handle that
+ * should "own" this memory. This may be a "my_*" field of this
+ * cursor--the default--or it may be the corresponding field of
+ * another cursor, a DB handle, a join cursor, etc. In general, it
+ * will be whatever handle the user originally used for the current
+ * DB interface call.
+ */
+ DBT *rskey; /* Returned secondary key. */
+ DBT *rkey; /* Returned [primary] key. */
+ DBT *rdata; /* Returned data. */
+
+ DBT my_rskey; /* Space for returned secondary key. */
+ DBT my_rkey; /* Space for returned [primary] key. */
+ DBT my_rdata; /* Space for returned data. */
u_int32_t lid; /* Default process' locker id. */
u_int32_t locker; /* Locker for this operation. */
DBT lock_dbt; /* DBT referencing lock. */
DB_LOCK_ILOCK lock; /* Object to be locked. */
- DB_LOCK mylock; /* Lock held on this cursor. */
+ DB_LOCK mylock; /* CDB lock held on this cursor. */
long cl_id; /* Remote client id. */
@@ -834,9 +1487,11 @@ struct __dbc {
int (*c_del) __P((DBC *, u_int32_t));
int (*c_dup) __P((DBC *, DBC **, u_int32_t));
int (*c_get) __P((DBC *, DBT *, DBT *, u_int32_t));
+ int (*c_pget) __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
int (*c_put) __P((DBC *, DBT *, DBT *, u_int32_t));
/* Methods: private. */
+ int (*c_am_bulk) __P((DBC *, DBT *, u_int32_t));
int (*c_am_close) __P((DBC *, db_pgno_t, int *));
int (*c_am_del) __P((DBC *));
int (*c_am_destroy) __P((DBC *));
@@ -844,19 +1499,18 @@ struct __dbc {
int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_writelock) __P((DBC *));
-#define DBC_ACTIVE 0x001 /* Cursor is being used. */
-#define DBC_OPD 0x002 /* Cursor references off-page dups. */
-#define DBC_RECOVER 0x004 /* Cursor created by recovery routine
- * (do not log or lock).
- */
-#define DBC_RMW 0x008 /* Acquire write flag in read op. */
-#define DBC_WRITECURSOR 0x010 /* Cursor may be used to write (CDB). */
-#define DBC_WRITEDUP 0x020 /* idup'ed DBC_WRITECURSOR (CDB). */
-#define DBC_WRITER 0x040 /* Cursor immediately writing (CDB). */
-#define DBC_TRANSIENT 0x080 /* Cursor is transient. */
-#define DBC_COMPENSATE 0x100 /* Cursor is doing compensation
- * do not lock.
- */
+#define DBC_ACTIVE 0x0001 /* Cursor in use. */
+#define DBC_COMPENSATE 0x0002 /* Cursor compensating, don't lock. */
+#define DBC_DIRTY_READ 0x0004 /* Cursor supports dirty reads. */
+#define DBC_OPD 0x0008 /* Cursor references off-page dups. */
+#define DBC_RECOVER 0x0010 /* Recovery cursor; don't log/lock. */
+#define DBC_RMW 0x0020 /* Acquire write flag in read op. */
+#define DBC_TRANSIENT 0x0040 /* Cursor is transient. */
+#define DBC_WRITECURSOR 0x0080 /* Cursor may be used to write (CDB). */
+#define DBC_WRITER 0x0100 /* Cursor immediately writing (CDB). */
+#define DBC_MULTIPLE 0x0200 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0400 /* Return Multiple keys and data. */
+#define DBC_OWN_LID 0x0800 /* Free lock id on destroy. */
u_int32_t flags;
};
@@ -891,22 +1545,6 @@ struct __db_bt_stat {
u_int32_t bt_over_pgfree; /* Bytes free in overflow pages. */
};
-/* Queue statistics structure. */
-struct __db_qam_stat {
- u_int32_t qs_magic; /* Magic number. */
- u_int32_t qs_version; /* Version number. */
- u_int32_t qs_metaflags; /* Metadata flags. */
- u_int32_t qs_nkeys; /* Number of unique keys. */
- u_int32_t qs_ndata; /* Number of data items. */
- u_int32_t qs_pagesize; /* Page size. */
- u_int32_t qs_pages; /* Data pages. */
- u_int32_t qs_re_len; /* Fixed-length record length. */
- u_int32_t qs_re_pad; /* Fixed-length record pad. */
- u_int32_t qs_pgfree; /* Bytes free in data pages. */
- u_int32_t qs_first_recno; /* First not deleted record. */
- u_int32_t qs_cur_recno; /* Last allocated record number. */
-};
-
/* Hash statistics structure. */
struct __db_h_stat {
u_int32_t hash_magic; /* Magic number. */
@@ -915,7 +1553,6 @@ struct __db_h_stat {
u_int32_t hash_nkeys; /* Number of unique keys. */
u_int32_t hash_ndata; /* Number of data items. */
u_int32_t hash_pagesize; /* Page size. */
- u_int32_t hash_nelem; /* Original nelem specified. */
u_int32_t hash_ffactor; /* Fill factor specified at create. */
u_int32_t hash_buckets; /* Number of hash buckets. */
u_int32_t hash_free; /* Pages on the free list. */
@@ -928,327 +1565,339 @@ struct __db_h_stat {
u_int32_t hash_dup_free; /* Bytes free on duplicate pages. */
};
-int db_create __P((DB **, DB_ENV *, u_int32_t));
-int db_env_create __P((DB_ENV **, u_int32_t));
-int db_env_set_func_close __P((int (*)(int)));
-int db_env_set_func_dirfree __P((void (*)(char **, int)));
-int db_env_set_func_dirlist __P((int (*)(const char *, char ***, int *)));
-int db_env_set_func_exists __P((int (*)(const char *, int *)));
-int db_env_set_func_free __P((void (*)(void *)));
-int db_env_set_func_fsync __P((int (*)(int)));
-int db_env_set_func_ioinfo __P((int (*)(const char *,
- int, u_int32_t *, u_int32_t *, u_int32_t *)));
-int db_env_set_func_malloc __P((void *(*)(size_t)));
-int db_env_set_func_map __P((int (*)(char *, size_t, int, int, void **)));
-int db_env_set_func_open __P((int (*)(const char *, int, ...)));
-int db_env_set_func_read __P((ssize_t (*)(int, void *, size_t)));
-int db_env_set_func_realloc __P((void *(*)(void *, size_t)));
-int db_env_set_func_rename __P((int (*)(const char *, const char *)));
-int db_env_set_func_seek
- __P((int (*)(int, size_t, db_pgno_t, u_int32_t, int, int)));
-int db_env_set_func_sleep __P((int (*)(u_long, u_long)));
-int db_env_set_func_unlink __P((int (*)(const char *)));
-int db_env_set_func_unmap __P((int (*)(void *, size_t)));
-int db_env_set_func_write __P((ssize_t (*)(int, const void *, size_t)));
-int db_env_set_func_yield __P((int (*)(void)));
-int db_env_set_pageyield __P((int));
-int db_env_set_panicstate __P((int));
-int db_env_set_region_init __P((int));
-int db_env_set_tas_spins __P((u_int32_t));
-char *db_strerror __P((int));
-char *db_version __P((int *, int *, int *));
+/* Queue statistics structure. */
+struct __db_qam_stat {
+ u_int32_t qs_magic; /* Magic number. */
+ u_int32_t qs_version; /* Version number. */
+ u_int32_t qs_metaflags; /* Metadata flags. */
+ u_int32_t qs_nkeys; /* Number of unique keys. */
+ u_int32_t qs_ndata; /* Number of data items. */
+ u_int32_t qs_pagesize; /* Page size. */
+ u_int32_t qs_extentsize; /* Pages per extent. */
+ u_int32_t qs_pages; /* Data pages. */
+ u_int32_t qs_re_len; /* Fixed-length record length. */
+ u_int32_t qs_re_pad; /* Fixed-length record pad. */
+ u_int32_t qs_pgfree; /* Bytes free in data pages. */
+ u_int32_t qs_first_recno; /* First not deleted record. */
+ u_int32_t qs_cur_recno; /* Next available record number. */
+};
/*******************************************************
- * Locking
+ * Environment.
*******************************************************/
-#define DB_LOCKVERSION 1
+#define DB_REGION_MAGIC 0x120897 /* Environment magic number. */
-/* Flag values for lock_vec(), lock_get(). */
-#define DB_LOCK_NOWAIT 0x01 /* Don't wait on unavailable lock. */
-#define DB_LOCK_RECORD 0x02 /* Internal: record lock. */
-#define DB_LOCK_UPGRADE 0x04 /* Internal: upgrade existing lock. */
-#define DB_LOCK_SWITCH 0x08 /* Internal: switch existing lock. */
+/* Database Environment handle. */
+struct __db_env {
+ /*******************************************************
+ * Public: owned by the application.
+ *******************************************************/
+ FILE *db_errfile; /* Error message file stream. */
+ const char *db_errpfx; /* Error message prefix. */
+ /* Callbacks. */
+ void (*db_errcall) __P((const char *, char *));
+ void (*db_feedback) __P((DB_ENV *, int, int));
+ void (*db_paniccall) __P((DB_ENV *, int));
-/* Flag values for lock_detect(). */
-#define DB_LOCK_CONFLICT 0x01 /* Run on any conflict. */
+ /* App-specified alloc functions. */
+ void *(*db_malloc) __P((size_t));
+ void *(*db_realloc) __P((void *, size_t));
+ void (*db_free) __P((void *));
-/*
- * Request types.
- *
- * !!!
- * Changes here must be reflected in java/src/com/sleepycat/db/Db.java.
- */
-typedef enum {
- DB_LOCK_DUMP=0, /* Display held locks. */
- DB_LOCK_GET, /* Get the lock. */
- DB_LOCK_INHERIT, /* Pass locks to parent. */
- DB_LOCK_PUT, /* Release the lock. */
- DB_LOCK_PUT_ALL, /* Release locker's locks. */
- DB_LOCK_PUT_OBJ /* Release locker's locks on obj. */
-} db_lockop_t;
+ /*
+ * Currently, the verbose list is a bit field with room for 32
+ * entries. There's no reason that it needs to be limited, if
+ * there are ever more than 32 entries, convert to a bit array.
+ */
+#define DB_VERB_CHKPOINT 0x0001 /* List checkpoints. */
+#define DB_VERB_DEADLOCK 0x0002 /* Deadlock detection information. */
+#define DB_VERB_RECOVERY 0x0004 /* Recovery information. */
+#define DB_VERB_REPLICATION 0x0008 /* Replication information. */
+#define DB_VERB_WAITSFOR 0x0010 /* Dump waits-for table. */
+ u_int32_t verbose; /* Verbose output. */
-/*
- * Simple R/W lock modes and for multi-granularity intention locking.
- *
- * !!!
- * These values are NOT random, as they are used as an index into the lock
- * conflicts arrays, i.e., DB_LOCK_IWRITE must be == 3, and DB_LOCK_IREAD
- * must be == 4.
- *
- * !!!
- * Changes here must be reflected in java/src/com/sleepycat/db/Db.java.
- */
-typedef enum {
- DB_LOCK_NG=0, /* Not granted. */
- DB_LOCK_READ, /* Shared/read. */
- DB_LOCK_WRITE, /* Exclusive/write. */
- DB_LOCK_WAIT, /* Wait for event */
- DB_LOCK_IWRITE, /* Intent exclusive/write. */
- DB_LOCK_IREAD, /* Intent to share/read. */
- DB_LOCK_IWR /* Intent to read and write. */
-} db_lockmode_t;
+ void *app_private; /* Application-private handle. */
-/*
- * Status of a lock.
- */
-typedef enum {
- DB_LSTAT_ABORTED, /* Lock belongs to an aborted txn. */
- DB_LSTAT_ERR, /* Lock is bad. */
- DB_LSTAT_FREE, /* Lock is unallocated. */
- DB_LSTAT_HELD, /* Lock is currently held. */
- DB_LSTAT_NOGRANT, /* Lock was not granted. */
- DB_LSTAT_PENDING, /* Lock was waiting and has been
- * promoted; waiting for the owner
- * to run and upgrade it to held. */
- DB_LSTAT_WAITING /* Lock is on the wait queue. */
-} db_status_t;
+ int (*app_dispatch) /* User-specified recovery dispatch. */
+ __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
-/* Lock request structure. */
-struct __db_lockreq {
- db_lockop_t op; /* Operation. */
- db_lockmode_t mode; /* Requested mode. */
- u_int32_t locker; /* Locker identity. */
- DBT *obj; /* Object being locked. */
- DB_LOCK lock; /* Lock returned. */
-};
+ /* Locking. */
+ u_int8_t *lk_conflicts; /* Two dimensional conflict matrix. */
+ u_int32_t lk_modes; /* Number of lock modes in table. */
+ u_int32_t lk_max; /* Maximum number of locks. */
+ u_int32_t lk_max_lockers;/* Maximum number of lockers. */
+ u_int32_t lk_max_objects;/* Maximum number of locked objects. */
+ u_int32_t lk_detect; /* Deadlock detect on all conflicts. */
+ db_timeout_t lk_timeout; /* Lock timeout period. */
-/*
- * Commonly used conflict matrices.
- *
- */
+ /* Logging. */
+ u_int32_t lg_bsize; /* Buffer size. */
+ u_int32_t lg_size; /* Log file size. */
+ u_int32_t lg_regionmax; /* Region size. */
-/* Multi-granularity locking. */
-#define DB_LOCK_RIW_N 7
-extern const u_int8_t db_riw_conflicts[];
+ /* Memory pool. */
+ u_int32_t mp_gbytes; /* Cachesize: GB. */
+ u_int32_t mp_bytes; /* Cachesize: Bytes. */
+ size_t mp_size; /* DEPRECATED: Cachesize: bytes. */
+ int mp_ncache; /* Number of cache regions. */
+ size_t mp_mmapsize; /* Maximum file size for mmap. */
+ int mp_maxwrite; /* Maximum buffers to write. */
+ int /* Sleep after writing max buffers. */
+ mp_maxwrite_sleep;
-struct __db_lock_stat {
- u_int32_t st_lastid; /* Last allocated locker ID. */
- u_int32_t st_maxlocks; /* Maximum number of locks in table. */
- u_int32_t st_maxlockers; /* Maximum number of lockers in table. */
- u_int32_t st_maxobjects; /* Maximum number of objects in table. */
- u_int32_t st_nmodes; /* Number of lock modes. */
- u_int32_t st_nlocks; /* Current number of locks. */
- u_int32_t st_maxnlocks; /* Maximum number of locks so far. */
- u_int32_t st_nlockers; /* Current number of lockers. */
- u_int32_t st_maxnlockers; /* Maximum number of lockers so far. */
- u_int32_t st_nobjects; /* Current number of objects. */
- u_int32_t st_maxnobjects; /* Maximum number of objects so far. */
- u_int32_t st_nconflicts; /* Number of lock conflicts. */
- u_int32_t st_nrequests; /* Number of lock gets. */
- u_int32_t st_nreleases; /* Number of lock puts. */
- u_int32_t st_nnowaits; /* Number of requests that would have
- waited, but NOWAIT was set. */
- u_int32_t st_ndeadlocks; /* Number of lock deadlocks. */
- u_int32_t st_region_wait; /* Region lock granted after wait. */
- u_int32_t st_region_nowait; /* Region lock granted without wait. */
- u_int32_t st_regsize; /* Region size. */
-};
+ /* Replication */
+ int rep_eid; /* environment id. */
+ int (*rep_send) /* Send function. */
+ __P((DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t));
-int lock_detect __P((DB_ENV *, u_int32_t, u_int32_t, int *));
-int lock_get __P((DB_ENV *,
- u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
-int lock_id __P((DB_ENV *, u_int32_t *));
-int lock_put __P((DB_ENV *, DB_LOCK *));
-int lock_stat __P((DB_ENV *, DB_LOCK_STAT **, void *(*)(size_t)));
-int lock_vec __P((DB_ENV *,
- u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
+ /* Transactions. */
+ u_int32_t tx_max; /* Maximum number of transactions. */
+ time_t tx_timestamp; /* Recover to specific timestamp. */
+ db_timeout_t tx_timeout; /* Timeout for transactions. */
-/*******************************************************
- * Logging.
- *******************************************************/
-/* Flag values for log_archive(). */
-#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
-#define DB_ARCH_DATA 0x002 /* Data files. */
-#define DB_ARCH_LOG 0x004 /* Log files. */
+ /*******************************************************
+ * Private: owned by DB.
+ *******************************************************/
+ /* User files, paths. */
+ char *db_home; /* Database home. */
+ char *db_log_dir; /* Database log file directory. */
+ char *db_tmp_dir; /* Database tmp file directory. */
-/*
- * A DB_LSN has two parts, a fileid which identifies a specific file, and an
- * offset within that file. The fileid is an unsigned 4-byte quantity that
- * uniquely identifies a file within the log directory -- currently a simple
- * counter inside the log. The offset is also an unsigned 4-byte value. The
- * log manager guarantees the offset is never more than 4 bytes by switching
- * to a new log file before the maximum length imposed by an unsigned 4-byte
- * offset is reached.
- */
-struct __db_lsn {
- u_int32_t file; /* File ID. */
- u_int32_t offset; /* File offset. */
-};
+ char **db_data_dir; /* Database data file directories. */
+ int data_cnt; /* Database data file slots. */
+ int data_next; /* Next Database data file slot. */
-/* Log statistics structure. */
-struct __db_log_stat {
- u_int32_t st_magic; /* Log file magic number. */
- u_int32_t st_version; /* Log file version number. */
- int st_mode; /* Log file mode. */
- u_int32_t st_lg_bsize; /* Log buffer size. */
- u_int32_t st_lg_max; /* Maximum log file size. */
- u_int32_t st_w_bytes; /* Bytes to log. */
- u_int32_t st_w_mbytes; /* Megabytes to log. */
- u_int32_t st_wc_bytes; /* Bytes to log since checkpoint. */
- u_int32_t st_wc_mbytes; /* Megabytes to log since checkpoint. */
- u_int32_t st_wcount; /* Total writes to the log. */
- u_int32_t st_wcount_fill; /* Overflow writes to the log. */
- u_int32_t st_scount; /* Total syncs to the log. */
- u_int32_t st_region_wait; /* Region lock granted after wait. */
- u_int32_t st_region_nowait; /* Region lock granted without wait. */
- u_int32_t st_cur_file; /* Current log file number. */
- u_int32_t st_cur_offset; /* Current log file offset. */
- u_int32_t st_regsize; /* Region size. */
-};
+ int db_mode; /* Default open permissions. */
+ u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
-int log_archive __P((DB_ENV *, char **[], u_int32_t, void *(*)(size_t)));
-int log_compare __P((const DB_LSN *, const DB_LSN *));
-int log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
-int log_flush __P((DB_ENV *, const DB_LSN *));
-int log_get __P((DB_ENV *, DB_LSN *, DBT *, u_int32_t));
-int log_put __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
-int log_register __P((DB_ENV *, DB *, const char *));
-int log_stat __P((DB_ENV *, DB_LOG_STAT **, void *(*)(size_t)));
-int log_unregister __P((DB_ENV *, DB *));
+ void *reginfo; /* REGINFO structure reference. */
+ DB_FH *lockfhp; /* fcntl(2) locking file handle. */
-/*******************************************************
- * Mpool
- *******************************************************/
-/* Flag values for memp_fget(). */
-#define DB_MPOOL_CREATE 0x001 /* Create a page. */
-#define DB_MPOOL_LAST 0x002 /* Return the last page. */
-#define DB_MPOOL_NEW 0x004 /* Create a new page. */
-#define DB_MPOOL_NEW_GROUP 0x008 /* Create a group of pages. */
-#define DB_MPOOL_EXTENT 0x010 /* Get for an extent. */
+ int (**recover_dtab) /* Dispatch table for recover funcs. */
+ __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t recover_dtab_size;
+ /* Slots in the dispatch table. */
-/* Flag values for memp_fput(), memp_fset(). */
-#define DB_MPOOL_CLEAN 0x001 /* Page is not modified. */
-#define DB_MPOOL_DIRTY 0x002 /* Page is modified. */
-#define DB_MPOOL_DISCARD 0x004 /* Don't cache the page. */
+ void *cl_handle; /* RPC: remote client handle. */
+ long cl_id; /* RPC: remote client env id. */
-/* Mpool statistics structure. */
-struct __db_mpool_stat {
- u_int32_t st_cache_hit; /* Pages found in the cache. */
- u_int32_t st_cache_miss; /* Pages not found in the cache. */
- u_int32_t st_map; /* Pages from mapped files. */
- u_int32_t st_page_create; /* Pages created in the cache. */
- u_int32_t st_page_in; /* Pages read in. */
- u_int32_t st_page_out; /* Pages written out. */
- u_int32_t st_ro_evict; /* Clean pages forced from the cache. */
- u_int32_t st_rw_evict; /* Dirty pages forced from the cache. */
- u_int32_t st_hash_buckets; /* Number of hash buckets. */
- u_int32_t st_hash_searches; /* Total hash chain searches. */
- u_int32_t st_hash_longest; /* Longest hash chain searched. */
- u_int32_t st_hash_examined; /* Total hash entries searched. */
- u_int32_t st_page_clean; /* Clean pages. */
- u_int32_t st_page_dirty; /* Dirty pages. */
- u_int32_t st_page_trickle; /* Pages written by memp_trickle. */
- u_int32_t st_region_wait; /* Region lock granted after wait. */
- u_int32_t st_region_nowait; /* Region lock granted without wait. */
- u_int32_t st_gbytes; /* Total cache size: GB. */
- u_int32_t st_bytes; /* Total cache size: B. */
- u_int32_t st_ncache; /* Number of caches. */
- u_int32_t st_regsize; /* Cache size. */
-};
+ int db_ref; /* DB reference count. */
-/* Mpool file open information structure. */
-struct __db_mpool_finfo {
- int ftype; /* File type. */
- DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
- u_int8_t *fileid; /* Unique file ID. */
- int32_t lsn_offset; /* LSN offset in page. */
- u_int32_t clear_len; /* Cleared length on created pages. */
-};
+ long shm_key; /* shmget(2) key. */
+ u_int32_t tas_spins; /* test-and-set spins. */
-/* Mpool file statistics structure. */
-struct __db_mpool_fstat {
- char *file_name; /* File name. */
- size_t st_pagesize; /* Page size. */
- u_int32_t st_cache_hit; /* Pages found in the cache. */
- u_int32_t st_cache_miss; /* Pages not found in the cache. */
- u_int32_t st_map; /* Pages from mapped files. */
- u_int32_t st_page_create; /* Pages created in the cache. */
- u_int32_t st_page_in; /* Pages read in. */
- u_int32_t st_page_out; /* Pages written out. */
-};
+ /*
+ * List of open DB handles for this DB_ENV, used for cursor
+ * adjustment. Must be protected for multi-threaded support.
+ *
+ * !!!
+ * As this structure is allocated in per-process memory, the
+ * mutex may need to be stored elsewhere on architectures unable
+ * to support mutexes in heap memory, e.g. HP/UX 9.
+ *
+ * !!!
+ * Explicit representation of structure in queue.h.
+ * LIST_HEAD(dblist, __db);
+ */
+ DB_MUTEX *dblist_mutexp; /* Mutex. */
+ struct {
+ struct __db *lh_first;
+ } dblist;
-int memp_fclose __P((DB_MPOOLFILE *));
-int memp_fget __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
-int memp_fopen __P((DB_ENV *, const char *,
- u_int32_t, int, size_t, DB_MPOOL_FINFO *, DB_MPOOLFILE **));
-int memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
-int memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
-int memp_fsync __P((DB_MPOOLFILE *));
-int memp_register __P((DB_ENV *, int,
- int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
- int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
-int memp_stat __P((DB_ENV *,
- DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, void *(*)(size_t)));
-int memp_sync __P((DB_ENV *, DB_LSN *));
-int memp_trickle __P((DB_ENV *, int, int *));
+ /*
+ * XA support.
+ *
+ * !!!
+ * Explicit representations of structures from queue.h.
+ * TAILQ_ENTRY(__db_env) links;
+ * TAILQ_HEAD(xa_txn, __db_txn);
+ */
+ struct {
+ struct __db_env *tqe_next;
+ struct __db_env **tqe_prev;
+ } links;
+ struct __xa_txn { /* XA Active Transactions. */
+ struct __db_txn *tqh_first;
+ struct __db_txn **tqh_last;
+ } xa_txn;
+ int xa_rmid; /* XA Resource Manager ID. */
-/*******************************************************
- * Transactions.
- *******************************************************/
-#define DB_TXNVERSION 1
+ /* API-private structure. */
+ void *api1_internal; /* C++, Perl API private */
+ void *api2_internal; /* Java API private */
-/* Operations values to the tx_recover() function. */
-#define DB_TXN_BACKWARD_ROLL 1 /* Read the log backwards. */
-#define DB_TXN_FORWARD_ROLL 2 /* Read the log forwards. */
-#define DB_TXN_OPENFILES 3 /* Read for open files. */
-#define DB_TXN_REDO 4 /* Redo the operation. */
-#define DB_TXN_UNDO 5 /* Undo the operation. */
+ char *passwd; /* Cryptography support. */
+ size_t passwd_len;
+ void *crypto_handle; /* Primary handle. */
+ DB_MUTEX *mt_mutexp; /* Mersenne Twister mutex. */
+ int mti; /* Mersenne Twister index. */
+ u_long *mt; /* Mersenne Twister state vector. */
-/* Internal transaction status values. */
+ /* DB_ENV Methods. */
+ int (*close) __P((DB_ENV *, u_int32_t));
+ int (*dbremove) __P((DB_ENV *,
+ DB_TXN *, const char *, const char *, u_int32_t));
+ int (*dbrename) __P((DB_ENV *, DB_TXN *,
+ const char *, const char *, const char *, u_int32_t));
+ void (*err) __P((const DB_ENV *, int, const char *, ...));
+ void (*errx) __P((const DB_ENV *, const char *, ...));
+ int (*get_home) __P((DB_ENV *, const char **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
+ int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
+ int (*remove) __P((DB_ENV *, const char *, u_int32_t));
+ int (*set_alloc) __P((DB_ENV *, void *(*)(size_t),
+ void *(*)(void *, size_t), void (*)(void *)));
+ int (*set_app_dispatch) __P((DB_ENV *,
+ int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
+ int (*get_data_dirs) __P((DB_ENV *, const char ***));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*get_encrypt_flags) __P((DB_ENV *, u_int32_t *));
+ int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
+ void (*set_errcall) __P((DB_ENV *, void (*)(const char *, char *)));
+ void (*get_errfile) __P((DB_ENV *, FILE **));
+ void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*get_errpfx) __P((DB_ENV *, const char **));
+ void (*set_errpfx) __P((DB_ENV *, const char *));
+ int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*get_flags) __P((DB_ENV *, u_int32_t *));
+ int (*set_flags) __P((DB_ENV *, u_int32_t, int));
+ int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
+ int (*set_rpc_server) __P((DB_ENV *,
+ void *, const char *, long, long, u_int32_t));
+ int (*get_shm_key) __P((DB_ENV *, long *));
+ int (*set_shm_key) __P((DB_ENV *, long));
+ int (*get_tas_spins) __P((DB_ENV *, u_int32_t *));
+ int (*set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
+ int (*set_tmp_dir) __P((DB_ENV *, const char *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
+ int (*set_verbose) __P((DB_ENV *, u_int32_t, int));
-/* Transaction statistics structure. */
-struct __db_txn_active {
- u_int32_t txnid; /* Transaction ID */
- u_int32_t parentid; /* Transaction ID of parent */
- DB_LSN lsn; /* Lsn of the begin record */
-};
+ void *lg_handle; /* Log handle and methods. */
+ int (*get_lg_bsize) __P((DB_ENV *, u_int32_t *));
+ int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_dir) __P((DB_ENV *, const char **));
+ int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*get_lg_max) __P((DB_ENV *, u_int32_t *));
+ int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_regionmax) __P((DB_ENV *, u_int32_t *));
+ int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
+ int (*log_archive) __P((DB_ENV *, char **[], u_int32_t));
+ int (*log_cursor) __P((DB_ENV *, DB_LOGC **, u_int32_t));
+ int (*log_file) __P((DB_ENV *, const DB_LSN *, char *, size_t));
+ int (*log_flush) __P((DB_ENV *, const DB_LSN *));
+ int (*log_put) __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
+ int (*log_stat) __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
+
+ void *lk_handle; /* Lock handle and methods. */
+ int (*get_lk_conflicts) __P((DB_ENV *, const u_int8_t **, int *));
+ int (*set_lk_conflicts) __P((DB_ENV *, u_int8_t *, int));
+ int (*get_lk_detect) __P((DB_ENV *, u_int32_t *));
+ int (*set_lk_detect) __P((DB_ENV *, u_int32_t));
+ int (*set_lk_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_locks) __P((DB_ENV *, u_int32_t *));
+ int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_lockers) __P((DB_ENV *, u_int32_t *));
+ int (*set_lk_max_lockers) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_objects) __P((DB_ENV *, u_int32_t *));
+ int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
+ int (*lock_detect) __P((DB_ENV *, u_int32_t, u_int32_t, int *));
+ int (*lock_dump_region) __P((DB_ENV *, const char *, FILE *));
+ int (*lock_get) __P((DB_ENV *,
+ u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
+ int (*lock_put) __P((DB_ENV *, DB_LOCK *));
+ int (*lock_id) __P((DB_ENV *, u_int32_t *));
+ int (*lock_id_free) __P((DB_ENV *, u_int32_t));
+ int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
+ int (*lock_vec) __P((DB_ENV *,
+ u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
+
+ void *mp_handle; /* Mpool handle and methods. */
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
+ int (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ int (*get_mp_maxwrite) __P((DB_ENV *, int *, int *));
+ int (*set_mp_maxwrite) __P((DB_ENV *, int, int));
+ int (*memp_dump_region) __P((DB_ENV *, const char *, FILE *));
+ int (*memp_fcreate) __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
+ int (*memp_register) __P((DB_ENV *, int,
+ int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
+ int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
+ int (*memp_stat) __P((DB_ENV *,
+ DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
+ int (*memp_sync) __P((DB_ENV *, DB_LSN *));
+ int (*memp_trickle) __P((DB_ENV *, int, int *));
+
+ void *rep_handle; /* Replication handle and methods. */
+ int (*rep_elect) __P((DB_ENV *, int, int, u_int32_t, int *));
+ int (*rep_flush) __P((DB_ENV *));
+ int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *,
+ int *, DB_LSN *));
+ int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
+ int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
+ int (*get_rep_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ int (*set_rep_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*set_rep_request) __P((DB_ENV *, u_int32_t, u_int32_t));
+ int (*set_rep_transport) __P((DB_ENV *, int,
+ int (*) (DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t)));
+
+ void *tx_handle; /* Txn handle and methods. */
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
+ int (*set_tx_max) __P((DB_ENV *, u_int32_t));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*set_tx_timestamp) __P((DB_ENV *, time_t *));
+ int (*txn_begin) __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
+ int (*txn_checkpoint) __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
+ int (*txn_recover) __P((DB_ENV *,
+ DB_PREPLIST *, long, long *, u_int32_t));
+ int (*txn_stat) __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
+ int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
+
+#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
+#define DB_TEST_POSTDESTROY 2 /* after destroy op */
+#define DB_TEST_POSTLOG 3 /* after logging all pages */
+#define DB_TEST_POSTLOGMETA 4 /* after logging meta in btree */
+#define DB_TEST_POSTOPEN 5 /* after __os_open */
+#define DB_TEST_POSTSYNC 6 /* after syncing the log */
+#define DB_TEST_PREDESTROY 7 /* before destroy op */
+#define DB_TEST_PREOPEN 8 /* before __os_open */
+#define DB_TEST_SUBDB_LOCKS 9 /* subdb locking tests */
+ int test_abort; /* Abort value for testing. */
+ int test_copy; /* Copy value for testing. */
-struct __db_txn_stat {
- DB_LSN st_last_ckp; /* lsn of the last checkpoint */
- DB_LSN st_pending_ckp; /* last checkpoint did not finish */
- time_t st_time_ckp; /* time of last checkpoint */
- u_int32_t st_last_txnid; /* last transaction id given out */
- u_int32_t st_maxtxns; /* maximum txns possible */
- u_int32_t st_naborts; /* number of aborted transactions */
- u_int32_t st_nbegins; /* number of begun transactions */
- u_int32_t st_ncommits; /* number of committed transactions */
- u_int32_t st_nactive; /* number of active transactions */
- u_int32_t st_maxnactive; /* maximum active transactions */
- DB_TXN_ACTIVE
- *st_txnarray; /* array of active transactions */
- u_int32_t st_region_wait; /* Region lock granted after wait. */
- u_int32_t st_region_nowait; /* Region lock granted without wait. */
- u_int32_t st_regsize; /* Region size. */
+#define DB_ENV_AUTO_COMMIT 0x0000001 /* DB_AUTO_COMMIT. */
+#define DB_ENV_CDB 0x0000002 /* DB_INIT_CDB. */
+#define DB_ENV_CDB_ALLDB 0x0000004 /* CDB environment wide locking. */
+#define DB_ENV_CREATE 0x0000008 /* DB_CREATE set. */
+#define DB_ENV_DBLOCAL 0x0000010 /* DB_ENV allocated for private DB. */
+#define DB_ENV_DIRECT_DB 0x0000020 /* DB_DIRECT_DB set. */
+#define DB_ENV_DIRECT_LOG 0x0000040 /* DB_DIRECT_LOG set. */
+#define DB_ENV_FATAL 0x0000080 /* Doing fatal recovery in env. */
+#define DB_ENV_LOCKDOWN 0x0000100 /* DB_LOCKDOWN set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x0000200 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_NOLOCKING 0x0000400 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x0000800 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x0001000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x0002000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x0004000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x0008000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x0010000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x0020000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x0040000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x0080000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x0100000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x0200000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x0400000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_NOT_DURABLE 0x0800000 /* DB_TXN_NOT_DURABLE set. */
+#define DB_ENV_TXN_WRITE_NOSYNC 0x1000000 /* DB_TXN_WRITE_NOSYNC set. */
+#define DB_ENV_YIELDCPU 0x2000000 /* DB_YIELDCPU set. */
+ u_int32_t flags;
};
-int txn_abort __P((DB_TXN *));
-int txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
-int txn_checkpoint __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
-int txn_commit __P((DB_TXN *, u_int32_t));
-u_int32_t txn_id __P((DB_TXN *));
-int txn_prepare __P((DB_TXN *));
-int txn_stat __P((DB_ENV *, DB_TXN_STAT **, void *(*)(size_t)));
-
#ifndef DB_DBM_HSEARCH
#define DB_DBM_HSEARCH 0 /* No historic interfaces by default. */
#endif
@@ -1256,6 +1905,8 @@ int txn_stat __P((DB_ENV *, DB_TXN_STAT **, void *(*)(size_t)));
/*******************************************************
* Dbm/Ndbm historic interfaces.
*******************************************************/
+typedef struct __db DBM;
+
#define DBM_INSERT 0 /* Flags to dbm_store(). */
#define DBM_REPLACE 1
@@ -1278,35 +1929,6 @@ typedef struct {
#endif
/*
- * Translate DBM calls into DB calls so that DB doesn't step on the
- * application's name space.
- *
- * The global variables dbrdonly, dirf and pagf were not retained when 4BSD
- * replaced the dbm interface with ndbm, and are not supported here.
- */
-#define dbminit(a) __db_dbm_init(a)
-#define dbmclose __db_dbm_close
-#if !defined(__cplusplus)
-#define delete(a) __db_dbm_delete(a)
-#endif
-#define fetch(a) __db_dbm_fetch(a)
-#define firstkey __db_dbm_firstkey
-#define nextkey(a) __db_dbm_nextkey(a)
-#define store(a, b) __db_dbm_store(a, b)
-
-/* Prototype the DB calls. */
-int __db_dbm_close __P((void));
-int __db_dbm_dbrdonly __P((void));
-int __db_dbm_delete __P((datum));
-int __db_dbm_dirf __P((void));
-datum __db_dbm_fetch __P((datum));
-datum __db_dbm_firstkey __P((void));
-int __db_dbm_init __P((char *));
-datum __db_dbm_nextkey __P((datum));
-int __db_dbm_pagf __P((void));
-int __db_dbm_store __P((datum, datum));
-
-/*
* Translate NDBM calls into DB calls so that DB doesn't step on the
* application's name space.
*/
@@ -1321,21 +1943,25 @@ int __db_dbm_store __P((datum, datum));
#define dbm_open(a, b, c) __db_ndbm_open(a, b, c)
#define dbm_pagfno(a) __db_ndbm_pagfno(a)
#define dbm_rdonly(a) __db_ndbm_rdonly(a)
-#define dbm_store(a, b, c, d) __db_ndbm_store(a, b, c, d)
+#define dbm_store(a, b, c, d) \
+ __db_ndbm_store(a, b, c, d)
-/* Prototype the DB calls. */
-int __db_ndbm_clearerr __P((DBM *));
-void __db_ndbm_close __P((DBM *));
-int __db_ndbm_delete __P((DBM *, datum));
-int __db_ndbm_dirfno __P((DBM *));
-int __db_ndbm_error __P((DBM *));
-datum __db_ndbm_fetch __P((DBM *, datum));
-datum __db_ndbm_firstkey __P((DBM *));
-datum __db_ndbm_nextkey __P((DBM *));
-DBM *__db_ndbm_open __P((const char *, int, int));
-int __db_ndbm_pagfno __P((DBM *));
-int __db_ndbm_rdonly __P((DBM *));
-int __db_ndbm_store __P((DBM *, datum, datum, int));
+/*
+ * Translate DBM calls into DB calls so that DB doesn't step on the
+ * application's name space.
+ *
+ * The global variables dbrdonly, dirf and pagf were not retained when 4BSD
+ * replaced the dbm interface with ndbm, and are not supported here.
+ */
+#define dbminit(a) __db_dbm_init(a)
+#define dbmclose __db_dbm_close
+#if !defined(__cplusplus)
+#define delete(a) __db_dbm_delete(a)
+#endif
+#define fetch(a) __db_dbm_fetch(a)
+#define firstkey __db_dbm_firstkey
+#define nextkey(a) __db_dbm_nextkey(a)
+#define store(a, b) __db_dbm_store(a, b)
/*******************************************************
* Hsearch historic interface.
@@ -1349,30 +1975,84 @@ typedef struct entry {
char *data;
} ENTRY;
-/*
- * Translate HSEARCH calls into DB calls so that DB doesn't step on the
- * application's name space.
- */
#define hcreate(a) __db_hcreate(a)
#define hdestroy __db_hdestroy
#define hsearch(a, b) __db_hsearch(a, b)
-/* Prototype the DB calls. */
-int __db_hcreate __P((size_t));
-void __db_hdestroy __P((void));
-ENTRY *__db_hsearch __P((ENTRY, ACTION));
#endif /* DB_DBM_HSEARCH */
-/*
- * XXX
- * MacOS: Reset Metrowerks C enum sizes.
- */
-#ifdef __MWERKS__
-#pragma enumsalwaysint reset
+#if defined(__cplusplus)
+}
#endif
+#endif /* !_DB_H_ */
+
+/* DO NOT EDIT: automatically built by dist/s_rpc. */
+#define DB_RPC_SERVERPROG ((unsigned long)(351457))
+#define DB_RPC_SERVERVERS ((unsigned long)(4002))
+
+/* DO NOT EDIT: automatically built by dist/s_include. */
+#ifndef _DB_EXT_PROT_IN_
+#define _DB_EXT_PROT_IN_
#if defined(__cplusplus)
-}
+extern "C" {
#endif
-#endif /* !_DB_H_ */
+int db_create __P((DB **, DB_ENV *, u_int32_t));
+char *db_strerror __P((int));
+int db_env_create __P((DB_ENV **, u_int32_t));
+char *db_version __P((int *, int *, int *));
+int log_compare __P((const DB_LSN *, const DB_LSN *));
+int db_env_set_func_close __P((int (*)(int)));
+int db_env_set_func_dirfree __P((void (*)(char **, int)));
+int db_env_set_func_dirlist __P((int (*)(const char *, char ***, int *)));
+int db_env_set_func_exists __P((int (*)(const char *, int *)));
+int db_env_set_func_free __P((void (*)(void *)));
+int db_env_set_func_fsync __P((int (*)(int)));
+int db_env_set_func_ioinfo __P((int (*)(const char *, int, u_int32_t *, u_int32_t *, u_int32_t *)));
+int db_env_set_func_malloc __P((void *(*)(size_t)));
+int db_env_set_func_map __P((int (*)(char *, size_t, int, int, void **)));
+int db_env_set_func_open __P((int (*)(const char *, int, ...)));
+int db_env_set_func_read __P((ssize_t (*)(int, void *, size_t)));
+int db_env_set_func_realloc __P((void *(*)(void *, size_t)));
+int db_env_set_func_rename __P((int (*)(const char *, const char *)));
+int db_env_set_func_seek __P((int (*)(int, size_t, db_pgno_t, u_int32_t, int, int)));
+int db_env_set_func_sleep __P((int (*)(u_long, u_long)));
+int db_env_set_func_unlink __P((int (*)(const char *)));
+int db_env_set_func_unmap __P((int (*)(void *, size_t)));
+int db_env_set_func_write __P((ssize_t (*)(int, const void *, size_t)));
+int db_env_set_func_yield __P((int (*)(void)));
+#if DB_DBM_HSEARCH != 0
+int __db_ndbm_clearerr __P((DBM *));
+void __db_ndbm_close __P((DBM *));
+int __db_ndbm_delete __P((DBM *, datum));
+int __db_ndbm_dirfno __P((DBM *));
+int __db_ndbm_error __P((DBM *));
+datum __db_ndbm_fetch __P((DBM *, datum));
+datum __db_ndbm_firstkey __P((DBM *));
+datum __db_ndbm_nextkey __P((DBM *));
+DBM *__db_ndbm_open __P((const char *, int, int));
+int __db_ndbm_pagfno __P((DBM *));
+int __db_ndbm_rdonly __P((DBM *));
+int __db_ndbm_store __P((DBM *, datum, datum, int));
+int __db_dbm_close __P((void));
+int __db_dbm_dbrdonly __P((void));
+int __db_dbm_delete __P((datum));
+int __db_dbm_dirf __P((void));
+datum __db_dbm_fetch __P((datum));
+datum __db_dbm_firstkey __P((void));
+int __db_dbm_init __P((char *));
+datum __db_dbm_nextkey __P((datum));
+int __db_dbm_pagf __P((void));
+int __db_dbm_store __P((datum, datum));
+#endif
+#if DB_DBM_HSEARCH != 0
+int __db_hcreate __P((size_t));
+ENTRY *__db_hsearch __P((ENTRY, ACTION));
+void __db_hdestroy __P((void));
+#endif
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* !_DB_EXT_PROT_IN_ */
diff --git a/db/build_win32/db_archive.dsp b/db/build_win32/db_archive.dsp
index e100ec01d..0815d77be 100644
--- a/db/build_win32/db_archive.dsp
+++ b/db/build_win32/db_archive.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_archive" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_archive - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_archive - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_archive - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_archive - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_archive - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_archive - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_archive - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_archive - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_archive - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_archive - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_checkpoint.dsp b/db/build_win32/db_checkpoint.dsp
index 8708a5503..524a1dbeb 100644
--- a/db/build_win32/db_checkpoint.dsp
+++ b/db/build_win32/db_checkpoint.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_checkpoint" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_checkpoint - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_checkpoint - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_checkpoint - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_checkpoint - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_checkpoint - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_checkpoint - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_checkpoint - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_checkpoint - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_checkpoint - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_config.h b/db/build_win32/db_config.h
index 8b12d64c3..0acc25f6a 100644
--- a/db/build_win32/db_config.h
+++ b/db/build_win32/db_config.h
@@ -1,275 +1,416 @@
-/*
- * $Id: db_config.h,v 11.24 2000/12/12 18:39:26 bostic Exp $
- */
+/* DO NOT EDIT: automatically built by dist/s_win32. */
+/* Define to 1 if you want to build a version for running the test suite. */
+/* #undef CONFIG_TEST */
-/* Define to empty if the keyword does not work. */
-/* #undef const */
+/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
+ an operating system environment that supports Win32 calls and semantics. We
+ don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
+ Cygwin/GCC closely emulates the Unix environment. */
+#define DB_WIN32 1
-/* Define if your struct stat has st_blksize. */
-/* #undef HAVE_ST_BLKSIZE */
+/* Define to 1 if you want a debugging version. */
+/* #undef DEBUG */
+#if defined(_DEBUG)
+#if !defined(DEBUG)
+#define DEBUG 1
+#endif
+#endif
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef mode_t */
+/* Define to 1 if you want a version that logs read operations. */
+/* #undef DEBUG_ROP */
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #undef off_t */
+/* Define to 1 if you want a version that logs write operations. */
+/* #undef DEBUG_WOP */
-/* Define to `int' if <sys/types.h> doesn't define. */
-/* #undef pid_t */
+/* Define to 1 if you want a version with run-time diagnostic checking. */
+/* #undef DIAGNOSTIC */
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
+/* Define to 1 if you have the `clock_gettime' function. */
+/* #undef HAVE_CLOCK_GETTIME */
-/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-/* #undef STAT_MACROS_BROKEN */
+/* Define to 1 if Berkeley DB release includes strong cryptography. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_CRYPTO 1
+#endif
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
+/* Define to 1 if you have the `directio' function. */
+/* #undef HAVE_DIRECTIO */
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-/* #undef TIME_WITH_SYS_TIME */
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+/* #undef HAVE_DIRENT_H */
-/* Define if your processor stores words with the most significant
- byte first (like Motorola and SPARC, unlike Intel and VAX). */
-/* #undef WORDS_BIGENDIAN */
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
-/* Define if you are building a version for running the test suite. */
-/* #undef CONFIG_TEST */
+/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
+#define HAVE_EXIT_SUCCESS 1
-/* Define if you want a debugging version. */
-/* #undef DEBUG */
-#if defined(_DEBUG)
-#if !defined(DEBUG)
-#define DEBUG 1
-#endif
+/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
+/* #undef HAVE_FCNTL_F_SETFD */
+
+/* Define to 1 if allocated filesystem blocks are not zeroed. */
+#define HAVE_FILESYSTEM_NOTZERO 1
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `getopt' function. */
+/* #undef HAVE_GETOPT */
+
+/* Define to 1 if you have the `getrusage' function. */
+/* #undef HAVE_GETRUSAGE */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+/* #undef HAVE_GETTIMEOFDAY */
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if building Hash access method. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_HASH 1
#endif
-/* Define if you want a version that logs read operations. */
-/* #undef DEBUG_ROP */
+/* Define to 1 if you have the <inttypes.h> header file. */
+/* #undef HAVE_INTTYPES_H */
-/* Define if you want a version that logs write operations. */
-/* #undef DEBUG_WOP */
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+/* #undef HAVE_LIBNSL */
-/* Define if you want a version with run-time diagnostic checking. */
-/* #undef DIAGNOSTIC */
+/* Define to 1 if you have the `memcmp' function. */
+#define HAVE_MEMCMP 1
-/* Define if you want to mask harmless unitialized memory read/writes. */
-/* #undef UMRW */
+/* Define to 1 if you have the `memcpy' function. */
+#define HAVE_MEMCPY 1
-/* Define if fcntl/F_SETFD denies child access to file descriptors. */
-/* #undef HAVE_FCNTL_F_SETFD */
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
-/* Define if building big-file environment (e.g., AIX, HP/UX, Solaris). */
-/* #undef HAVE_FILE_OFFSET_BITS */
+/* Define to 1 if you have the `mlock' function. */
+/* #undef HAVE_MLOCK */
-/* Mutex possibilities. */
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the `munlock' function. */
+/* #undef HAVE_MUNLOCK */
+
+/* Define to 1 if you have the `munmap' function. */
+/* #undef HAVE_MUNMAP */
+
+/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
/* #undef HAVE_MUTEX_68K_GCC_ASSEMBLY */
+
+/* Define to 1 to use the AIX _check_lock mutexes. */
/* #undef HAVE_MUTEX_AIX_CHECK_LOCK */
+
+/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
/* #undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY */
+
+/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
+/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
+
+/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
+/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
+
+/* Define to 1 to use the UNIX fcntl system call mutexes. */
+/* #undef HAVE_MUTEX_FCNTL */
+
+/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
+ */
/* #undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY */
+
+/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
/* #undef HAVE_MUTEX_HPPA_MSEM_INIT */
+
+/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
/* #undef HAVE_MUTEX_IA64_GCC_ASSEMBLY */
-/* #undef HAVE_MUTEX_MACOS */
+
+/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
+
+/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
+ */
/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
+
+/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
/* #undef HAVE_MUTEX_PTHREADS */
+
+/* Define to 1 to use Reliant UNIX initspin mutexes. */
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
+
+/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
+ */
+/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
+
+/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
+/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
+
+/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY */
+
+/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
/* #undef HAVE_MUTEX_SEMA_INIT */
+
+/* Define to 1 to use the SGI XXX_lock mutexes. */
/* #undef HAVE_MUTEX_SGI_INIT_LOCK */
+
+/* Define to 1 to use the Solaris _lock_XXX mutexes. */
/* #undef HAVE_MUTEX_SOLARIS_LOCK_TRY */
+
+/* Define to 1 to use the Solaris lwp threads mutexes. */
/* #undef HAVE_MUTEX_SOLARIS_LWP */
+
+/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
/* #undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY */
-#define HAVE_MUTEX_THREADS 1
-/* #undef HAVE_MUTEX_UI_THREADS */
-/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
-/* #undef HAVE_MUTEX_VMS */
-/* #undef HAVE_MUTEX_VXWORKS */
-/* #undef HAVE_MUTEX_WIN16 */
-#define HAVE_MUTEX_WIN32 1
-/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
-/* Define if building on QNX. */
-/* #undef HAVE_QNX */
+/* Define to 1 if mutexes hold system resources. */
+/* #undef HAVE_MUTEX_SYSTEM_RESOURCES */
-/* Define if building RPC client/server. */
-/* #undef HAVE_RPC */
+/* Define to 1 if fast mutexes are available. */
+#define HAVE_MUTEX_THREADS 1
-/* Define if your sprintf returns a pointer, not a length. */
-/* #undef SPRINTF_RET_CHARPNT */
+/* Define to 1 to configure mutexes intra-process only. */
+/* #undef HAVE_MUTEX_THREAD_ONLY */
-/* Define if you have the getcwd function. */
-#define HAVE_GETCWD 1
+/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
-/* Define if you have the getopt function. */
-/* #undef HAVE_GETOPT */
+/* Define to 1 to use the UNIX International mutexes. */
+/* #undef HAVE_MUTEX_UI_THREADS */
-/* Define if you have the getuid function. */
-/* #undef HAVE_GETUID */
+/* Define to 1 to use the UTS compiler and assembly language mutexes. */
+/* #undef HAVE_MUTEX_UTS_CC_ASSEMBLY */
-/* Define if you have the memcmp function. */
-#define HAVE_MEMCMP 1
+/* Define to 1 to use VMS mutexes. */
+/* #undef HAVE_MUTEX_VMS */
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
+/* Define to 1 to use VxWorks mutexes. */
+/* #undef HAVE_MUTEX_VXWORKS */
-/* Define if you have the memmove function. */
-#define HAVE_MEMMOVE 1
+/* Define to 1 to use the MSVC compiler and Windows mutexes. */
+#define HAVE_MUTEX_WIN32 1
-/* Define if you have the mlock function. */
-/* #undef HAVE_MLOCK */
+/* Define to 1 to use the GCC compiler and Windows mutexes. */
+/* #undef HAVE_MUTEX_WIN32_GCC */
-/* Define if you have the mmap function. */
-/* #undef HAVE_MMAP */
+/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
+/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
-/* Define if you have the munlock function. */
-/* #undef HAVE_MUNLOCK */
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+/* #undef HAVE_NDIR_H */
-/* Define if you have the munmap function. */
-/* #undef HAVE_MUNMAP */
+/* Define to 1 if you have the O_DIRECT flag. */
+/* #undef HAVE_O_DIRECT */
-/* Define if you have the pread function. */
+/* Define to 1 if you have the `pread' function. */
/* #undef HAVE_PREAD */
-/* Define if you have the pstat_getdynamic function. */
+/* Define to 1 if you have the `pstat_getdynamic' function. */
/* #undef HAVE_PSTAT_GETDYNAMIC */
-/* Define if you have the pwrite function. */
+/* Define to 1 if you have the `pwrite' function. */
/* #undef HAVE_PWRITE */
-/* Define if you have the qsort function. */
-#define HAVE_QSORT 1
+/* Define to 1 if building on QNX. */
+/* #undef HAVE_QNX */
+
+/* Define to 1 if building Queue access method. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_QUEUE 1
+#endif
-/* Define if you have the raise function. */
+/* Define to 1 if you have the `raise' function. */
#define HAVE_RAISE 1
-/* Define if you have the sched_yield function. */
+/* Define to 1 if building replication support. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_REPLICATION 1
+#endif
+
+/* Define to 1 if building RPC client/server. */
+/* #undef HAVE_RPC */
+
+/* Define to 1 if you have the `sched_yield' function. */
/* #undef HAVE_SCHED_YIELD */
-/* Define if you have the select function. */
+/* Define to 1 if you have the `select' function. */
/* #undef HAVE_SELECT */
-/* Define if you have the shmget function. */
+/* Define to 1 if you have the `shmget' function. */
/* #undef HAVE_SHMGET */
-/* Define if you have the snprintf function. */
+/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
-/* Define if you have the strcasecmp function. */
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
/* #undef HAVE_STRCASECMP */
-/* Define if you have the strerror function. */
-#define HAVE_STRERROR 1
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
-/* Define if you have the strtoul function. */
-#define HAVE_STRTOUL 1
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
-/* Define if you have the sysconf function. */
-/* #undef HAVE_SYSCONF */
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
-/* Define if you have the vsnprintf function. */
-#define HAVE_VSNPRINTF 1
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
-/* Define if you have the yield function. */
-/* #undef HAVE_YIELD */
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
-/* Define if you have the <dirent.h> header file. */
-/* #undef HAVE_DIRENT_H */
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+/* #undef HAVE_STRUCT_STAT_ST_BLKSIZE */
-/* Define if you have the <ndir.h> header file. */
-/* #undef HAVE_NDIR_H */
+/* Define to 1 if you have the `sysconf' function. */
+/* #undef HAVE_SYSCONF */
-/* Define if you have the <sys/dir.h> header file. */
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
/* #undef HAVE_SYS_DIR_H */
-/* Define if you have the <sys/ndir.h> header file. */
+/* Define to 1 if you have the <sys/fcntl.h> header file. */
+#define HAVE_SYS_FCNTL_H 1
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
/* #undef HAVE_SYS_NDIR_H */
-/* Define if you have the <sys/select.h> header file. */
+/* Define to 1 if you have the <sys/select.h> header file. */
/* #undef HAVE_SYS_SELECT_H */
-/* Define if you have the <sys/time.h> header file. */
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
/* #undef HAVE_SYS_TIME_H */
-/* Define if you have the nsl library (-lnsl). */
-/* #undef HAVE_LIBNSL */
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
-/*
- * XXX
- * The following is not part of the automatic configuration setup,
- * but provides the information necessary to build DB on Windows.
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <direct.h>
-#include <fcntl.h>
-#include <io.h>
-#include <limits.h>
-#include <memory.h>
-#include <process.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-
-#if defined(__cplusplus)
-#include <iostream.h>
-#endif
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
-/*
- * To build Tcl interface libraries, the include path must be configured to
- * use the directory containing <tcl.h>, usually the include directory in
- * the Tcl distribution.
- */
-#ifdef DB_TCL_SUPPORT
-#include <tcl.h>
+/* Define to 1 if unlink of file with open file descriptors will fail. */
+/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
+
+/* Define to 1 if building access method verification support. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_VERIFY 1
#endif
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if building VxWorks. */
+/* #undef HAVE_VXWORKS */
+
+/* Define to 1 if you have the `yield' function. */
+/* #undef HAVE_YIELD */
+
+/* Define to 1 if you have the `_fstati64' function. */
+#define HAVE__FSTATI64 1
+
+/* Define to a value if using non-standard mutex alignment. */
+/* #undef MUTEX_ALIGN */
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "support@sleepycat.com"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Berkeley DB"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Berkeley DB 4.2.52"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "db-4.2.52"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "4.2.52"
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+/* #undef TIME_WITH_SYS_TIME */
+
+/* Define to 1 to mask harmless unitialized memory read/writes. */
+/* #undef UMRW */
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
/*
- * Win32 has fsync, getcwd, snprintf and vsnprintf, but under different names.
+ * Exit success/failure macros.
*/
-#define fsync(fd) _commit(fd)
-#define getcwd(buf, size) _getcwd(buf, size)
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
+#ifndef HAVE_EXIT_SUCCESS
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
+#endif
/*
- * Win32 does not define getopt and friends in any header file, so we must.
+ * Don't step on the namespace. Other libraries may have their own
+ * implementations of these functions, we don't want to use their
+ * implementations or force them to use ours based on the load order.
*/
-#if defined(__cplusplus)
-extern "C" {
+#ifndef HAVE_GETCWD
+#define getcwd __db_Cgetcwd
#endif
-extern int optind;
-extern char *optarg;
-extern int getopt(int, char * const *, const char *);
-#if defined(__cplusplus)
-}
+#ifndef HAVE_MEMCMP
+#define memcmp __db_Cmemcmp
+#endif
+#ifndef HAVE_MEMCPY
+#define memcpy __db_Cmemcpy
+#endif
+#ifndef HAVE_MEMMOVE
+#define memmove __db_Cmemmove
+#endif
+#ifndef HAVE_RAISE
+#define raise __db_Craise
+#endif
+#ifndef HAVE_SNPRINTF
+#define snprintf __db_Csnprintf
+#endif
+#ifndef HAVE_STRCASECMP
+#define strcasecmp __db_Cstrcasecmp
+#define strncasecmp __db_Cstrncasecmp
+#endif
+#ifndef HAVE_STRERROR
+#define strerror __db_Cstrerror
+#endif
+#ifndef HAVE_VSNPRINTF
+#define vsnprintf __db_Cvsnprintf
#endif
-#define NO_SYSTEM_INCLUDES
-
-/*
- * We use DB_WIN32 much as one would use _WIN32, to determine that we're
- * using an operating system environment that supports Win32 calls
- * and semantics. We don't use _WIN32 because cygwin/gcc also defines
- * that, even though it closely emulates the Unix environment.
- */
-#define DB_WIN32 1
+#include "win_db.h"
/*
- * This is a grievous hack -- once we've included windows.h, we have no choice
- * but to use ANSI-style varargs (because it pulls in stdarg.h for us). DB's
- * code decides which type of varargs to use based on the state of __STDC__.
- * Sensible. Unfortunately, Microsoft's compiler _doesn't_ define __STDC__
- * unless you invoke it with arguments turning OFF all vendor extensions. Even
- * more unfortunately, if we do that, it fails to parse windows.h!!!!! So, we
- * define __STDC__ here, after windows.h comes in. Note: the compiler knows
- * we've defined it, and starts enforcing strict ANSI compilance from this point
- * on.
+ * Microsoft's compiler _doesn't_ define __STDC__ unless you invoke it with
+ * arguments turning OFF all vendor extensions. Even more unfortunately, if
+ * we do that, it fails to parse windows.h!!!!! So, we define __STDC__ here,
+ * after windows.h comes in. Note: the compiler knows we've defined it, and
+ * starts enforcing strict ANSI compilance from this point on.
*/
#define __STDC__ 1
diff --git a/db/build_win32/db_cxx.h b/db/build_win32/db_cxx.h
index b816706b5..670f760e3 100644
--- a/db/build_win32/db_cxx.h
+++ b/db/build_win32/db_cxx.h
@@ -2,10 +2,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_cxx.in,v 11.113 2002/08/23 13:02:27 mjc Exp
+ * $Id: db_cxx.in,v 11.134 2003/09/04 19:02:27 bostic Exp $
*/
#ifndef _DB_CXX_H_
@@ -62,8 +62,6 @@
#endif
#include "db.h"
-#include "cxx_common.h"
-#include "cxx_except.h"
class Db; // forward
class Dbc; // forward
@@ -76,6 +74,17 @@ class DbMpoolFile; // forward
class DbPreplist; // forward
class Dbt; // forward
class DbTxn; // forward
+class DbDeadlockException; // forward
+class DbException; // forward
+class DbLockNotGrantedException; // forward
+class DbLock; // forward
+class DbMemoryException; // forward
+class DbRunRecoveryException; // forward
+class Dbt; // forward
+class DbMultipleIterator; // forward
+class DbMultipleKeyDataIterator; // forward
+class DbMultipleRecnoDataIterator; // forward
+class DbMultipleDataIterator; // forward
// These classes are not defined here and should be invisible
// to the user, but some compilers require forward references.
@@ -123,6 +132,35 @@ class DbTxnImp;
#endif
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Mechanisms for declaring classes
+//
+
+//
+// Every class defined in this file has an _exported next to the class name.
+// This is needed for WinTel machines so that the class methods can
+// be exported or imported in a DLL as appropriate. Users of the DLL
+// use the define DB_USE_DLL. When the DLL is built, DB_CREATE_DLL
+// must be defined.
+//
+#if defined(_MSC_VER)
+
+# if defined(DB_CREATE_DLL)
+# define _exported __declspec(dllexport) // creator of dll
+# elif defined(DB_USE_DLL)
+# define _exported __declspec(dllimport) // user of dll
+# else
+# define _exported // static lib creator or user
+# endif
+
+#else /* _MSC_VER */
+
+# define _exported
+
+#endif /* _MSC_VER */
+
// Some interfaces can be customized by allowing users to define
// callback functions. For performance and logistical reasons, some
// callback functions must be declared in extern "C" blocks. For others,
@@ -154,6 +192,122 @@ extern "C" {
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
//
+// Exception classes
+//
+
+// Almost any error in the DB library throws a DbException.
+// Every exception should be considered an abnormality
+// (e.g. bug, misuse of DB, file system error).
+//
+// NOTE: We would like to inherit from class exception and
+// let it handle what(), but there are
+// MSVC++ problems when <exception> is included.
+//
+class _exported DbException
+{
+public:
+ virtual ~DbException();
+ DbException(int err);
+ DbException(const char *description);
+ DbException(const char *prefix, int err);
+ DbException(const char *prefix1, const char *prefix2, int err);
+ int get_errno() const;
+ virtual const char *what() const;
+ DbEnv *get_env() const;
+ void set_env(DbEnv *env);
+
+ DbException(const DbException &);
+ DbException &operator = (const DbException &);
+
+private:
+ char *what_;
+ int err_; // errno
+ DbEnv *env_;
+};
+
+//
+// A specific sort of exception that occurs when
+// an operation is aborted to resolve a deadlock.
+//
+class _exported DbDeadlockException : public DbException
+{
+public:
+ virtual ~DbDeadlockException();
+ DbDeadlockException(const char *description);
+
+ DbDeadlockException(const DbDeadlockException &);
+ DbDeadlockException &operator = (const DbDeadlockException &);
+};
+
+//
+// A specific sort of exception that occurs when
+// a lock is not granted, e.g. by lock_get or lock_vec.
+// Note that the Dbt is only live as long as the Dbt used
+// in the offending call.
+//
+class _exported DbLockNotGrantedException : public DbException
+{
+public:
+ virtual ~DbLockNotGrantedException();
+ DbLockNotGrantedException(const char *prefix, db_lockop_t op,
+ db_lockmode_t mode, const Dbt *obj, const DbLock lock, int index);
+ DbLockNotGrantedException(const char *description);
+ DbLockNotGrantedException(const DbLockNotGrantedException &);
+ DbLockNotGrantedException &operator =
+ (const DbLockNotGrantedException &);
+
+ db_lockop_t get_op() const;
+ db_lockmode_t get_mode() const;
+ const Dbt* get_obj() const;
+ DbLock *get_lock() const;
+ int get_index() const;
+
+private:
+ db_lockop_t op_;
+ db_lockmode_t mode_;
+ const Dbt *obj_;
+ DbLock *lock_;
+ int index_;
+};
+
+//
+// A specific sort of exception that occurs when
+// user declared memory is insufficient in a Dbt.
+//
+class _exported DbMemoryException : public DbException
+{
+public:
+ virtual ~DbMemoryException();
+ DbMemoryException(Dbt *dbt);
+ DbMemoryException(const char *description);
+ DbMemoryException(const char *prefix, Dbt *dbt);
+ DbMemoryException(const char *prefix1, const char *prefix2, Dbt *dbt);
+ Dbt *get_dbt() const;
+
+ DbMemoryException(const DbMemoryException &);
+ DbMemoryException &operator = (const DbMemoryException &);
+
+private:
+ Dbt *dbt_;
+};
+
+//
+// A specific sort of exception that occurs when
+// recovery is required before continuing DB activity.
+//
+class _exported DbRunRecoveryException : public DbException
+{
+public:
+ virtual ~DbRunRecoveryException();
+ DbRunRecoveryException(const char *description);
+
+ DbRunRecoveryException(const DbRunRecoveryException &);
+ DbRunRecoveryException &operator = (const DbRunRecoveryException &);
+};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
// Lock classes
//
@@ -181,7 +335,7 @@ protected:
// Log classes
//
-class _exported DbLsn : protected DB_LSN
+class _exported DbLsn : public DB_LSN
{
friend class DbEnv; // friendship needed to cast to base class
friend class DbLogc; // friendship needed to cast to base class
@@ -196,6 +350,7 @@ class _exported DbLsn : protected DB_LSN
class _exported DbMpoolFile
{
friend class DbEnv;
+ friend class Db;
private:
// Put this first to allow inlining with some C++ compilers (g++-2.95)
@@ -204,17 +359,25 @@ private:
public:
int close(u_int32_t flags);
int get(db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep);
- void last_pgno(db_pgno_t *pgnoaddr);
int open(const char *file, u_int32_t flags, int mode, size_t pagesize);
int put(void *pgaddr, u_int32_t flags);
- void refcnt(db_pgno_t *pgnoaddr);
int set(void *pgaddr, u_int32_t flags);
+ int get_clear_len(u_int32_t *len);
int set_clear_len(u_int32_t len);
+ int get_fileid(u_int8_t *fileid);
int set_fileid(u_int8_t *fileid);
+ int get_flags(u_int32_t *flagsp);
+ int set_flags(u_int32_t flags, int onoff);
+ int get_ftype(int *ftype);
int set_ftype(int ftype);
+ int get_lsn_offset(int32_t *offsetp);
int set_lsn_offset(int32_t offset);
+ int get_maxsize(u_int32_t *gbytes, u_int32_t *bytes);
+ int set_maxsize(u_int32_t gbytes, u_int32_t bytes);
+ int get_pgcookie(DBT *dbt);
int set_pgcookie(DBT *dbt);
- void set_unlink(int);
+ int get_priority(DB_CACHE_PRIORITY *priorityp);
+ int set_priority(DB_CACHE_PRIORITY priority);
int sync();
virtual DB_MPOOLFILE *get_DB_MPOOLFILE()
@@ -363,41 +526,66 @@ public:
virtual void err(int, const char *, ...);
virtual void errx(const char *, ...);
virtual void *get_app_private() const;
+ virtual int get_home(const char **);
+ virtual int get_open_flags(u_int32_t *);
virtual int open(const char *, u_int32_t, int);
virtual int remove(const char *, u_int32_t);
virtual int set_alloc(db_malloc_fcn_type, db_realloc_fcn_type,
db_free_fcn_type);
virtual void set_app_private(void *);
+ virtual int get_cachesize(u_int32_t *, u_int32_t *, int *);
virtual int set_cachesize(u_int32_t, u_int32_t, int);
+ virtual int get_data_dirs(const char ***);
virtual int set_data_dir(const char *);
- virtual int set_encrypt(const char *, int);
+ virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(void (*)(const char *, char *));
+ virtual void get_errfile(FILE **);
virtual void set_errfile(FILE *);
+ virtual void get_errpfx(const char **);
virtual void set_errpfx(const char *);
+ virtual int get_flags(u_int32_t *);
virtual int set_flags(u_int32_t, int);
virtual int set_feedback(void (*)(DbEnv *, int, int));
+ virtual int get_lg_bsize(u_int32_t *);
virtual int set_lg_bsize(u_int32_t);
+ virtual int get_lg_dir(const char **);
virtual int set_lg_dir(const char *);
+ virtual int get_lg_max(u_int32_t *);
virtual int set_lg_max(u_int32_t);
+ virtual int get_lg_regionmax(u_int32_t *);
virtual int set_lg_regionmax(u_int32_t);
+ virtual int get_lk_conflicts(const u_int8_t **, int *);
virtual int set_lk_conflicts(u_int8_t *, int);
+ virtual int get_lk_detect(u_int32_t *);
virtual int set_lk_detect(u_int32_t);
virtual int set_lk_max(u_int32_t);
+ virtual int get_lk_max_lockers(u_int32_t *);
virtual int set_lk_max_lockers(u_int32_t);
+ virtual int get_lk_max_locks(u_int32_t *);
virtual int set_lk_max_locks(u_int32_t);
+ virtual int get_lk_max_objects(u_int32_t *);
virtual int set_lk_max_objects(u_int32_t);
+ virtual int get_mp_mmapsize(size_t *);
virtual int set_mp_mmapsize(size_t);
virtual int set_paniccall(void (*)(DbEnv *, int));
virtual int set_rpc_server(void *, char *, long, long, u_int32_t);
+ virtual int get_shm_key(long *);
virtual int set_shm_key(long);
- virtual int set_timeout(db_timeout_t timeout, u_int32_t flags);
+ virtual int get_timeout(db_timeout_t *, u_int32_t);
+ virtual int set_timeout(db_timeout_t, u_int32_t);
+ virtual int get_tmp_dir(const char **);
virtual int set_tmp_dir(const char *);
+ virtual int get_tas_spins(u_int32_t *);
virtual int set_tas_spins(u_int32_t);
+ virtual int get_tx_max(u_int32_t *);
virtual int set_tx_max(u_int32_t);
virtual int set_app_dispatch(int (*)(DbEnv *,
Dbt *, DbLsn *, db_recops));
+ virtual int get_tx_timestamp(time_t *);
virtual int set_tx_timestamp(time_t *);
- virtual int set_verbose(u_int32_t which, int onoff);
+ virtual int get_verbose(u_int32_t which, int *);
+ virtual int set_verbose(u_int32_t which, int);
// Version information. A static method so it can be obtained anytime.
//
@@ -418,12 +606,12 @@ public:
virtual void set_error_stream(__DB_OSTREAMCLASS *);
// used internally
- static void runtime_error(const char *caller, int err,
+ static void runtime_error(DbEnv *env, const char *caller, int err,
int error_policy);
- static void runtime_error_dbt(const char *caller, Dbt *dbt,
+ static void runtime_error_dbt(DbEnv *env, const char *caller, Dbt *dbt,
int error_policy);
- static void runtime_error_lock_get(const char *caller, int err,
- db_lockop_t op, db_lockmode_t mode,
+ static void runtime_error_lock_get(DbEnv *env, const char *caller,
+ int err, db_lockop_t op, db_lockmode_t mode,
const Dbt *obj, DbLock lock, int index,
int error_policy);
@@ -436,8 +624,8 @@ public:
virtual int lock_id_free(u_int32_t id);
virtual int lock_put(DbLock *lock);
virtual int lock_stat(DB_LOCK_STAT **statp, u_int32_t flags);
- virtual int lock_vec(u_int32_t locker, u_int32_t flags, DB_LOCKREQ list[],
- int nlist, DB_LOCKREQ **elistp);
+ virtual int lock_vec(u_int32_t locker, u_int32_t flags,
+ DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp);
// Log functions
//
@@ -464,7 +652,8 @@ public:
// Transaction functions
//
virtual int txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags);
- virtual int txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags);
+ virtual int txn_checkpoint(u_int32_t kbyte, u_int32_t min,
+ u_int32_t flags);
virtual int txn_recover(DbPreplist *preplist, long count,
long *retp, u_int32_t flags);
virtual int txn_stat(DB_TXN_STAT **statp, u_int32_t flags);
@@ -472,12 +661,13 @@ public:
// Replication functions
//
virtual int rep_elect(int, int, u_int32_t, int *);
- virtual int rep_process_message(Dbt *, Dbt *, int *);
+ virtual int rep_process_message(Dbt *, Dbt *, int *, DbLsn *);
virtual int rep_start(Dbt *, u_int32_t);
virtual int rep_stat(DB_REP_STAT **statp, u_int32_t flags);
+ virtual int get_rep_limit(u_int32_t *, u_int32_t *);
virtual int set_rep_limit(u_int32_t, u_int32_t);
- virtual int set_rep_transport(u_int32_t,
- int (*)(DbEnv *, const Dbt *, const Dbt *, int, u_int32_t));
+ virtual int set_rep_transport(int, int (*)(DbEnv *,
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t));
// Conversion functions
//
@@ -515,7 +705,8 @@ public:
static void _feedback_intercept(DB_ENV *env, int opcode, int pct);
static int _rep_send_intercept(DB_ENV *env,
const DBT *cntrl, const DBT *data,
- int id, u_int32_t flags);
+ const DB_LSN *lsn, int id,
+ u_int32_t flags);
private:
void cleanup();
@@ -540,7 +731,7 @@ private:
int (*pgout_callback_)(DbEnv *dbenv, db_pgno_t pgno,
void *pgaddr, Dbt *pgcookie);
int (*rep_send_callback_)(DbEnv *,
- const Dbt *, const Dbt *, int, u_int32_t);
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t);
// class data
static __DB_OSTREAMCLASS *error_stream_;
@@ -573,7 +764,7 @@ public:
int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
u_int32_t flags);
virtual int close(u_int32_t flags);
- virtual int cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
+ virtual int cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
virtual int del(DbTxn *txnid, Dbt *key, u_int32_t flags);
virtual void err(int, const char *, ...);
virtual void errx(const char *, ...);
@@ -581,6 +772,8 @@ public:
virtual int get(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags);
virtual void *get_app_private() const;
virtual int get_byteswapped(int *);
+ virtual int get_dbname(const char **, const char **);
+ virtual int get_open_flags(u_int32_t *);
virtual int get_type(DBTYPE *);
virtual int join(Dbc **curslist, Dbc **dbcp, u_int32_t flags);
virtual int key_range(DbTxn *, Dbt *, DB_KEY_RANGE *, u_int32_t);
@@ -598,42 +791,60 @@ public:
virtual int set_bt_compare(bt_compare_fcn_type); /*deprecated*/
virtual int set_bt_compare(int (*)(Db *, const Dbt *, const Dbt *));
virtual int set_bt_maxkey(u_int32_t);
+ virtual int get_bt_minkey(u_int32_t *);
virtual int set_bt_minkey(u_int32_t);
virtual int set_bt_prefix(bt_prefix_fcn_type); /*deprecated*/
virtual int set_bt_prefix(size_t (*)(Db *, const Dbt *, const Dbt *));
+ virtual int get_cachesize(u_int32_t *, u_int32_t *, int *);
virtual int set_cachesize(u_int32_t, u_int32_t, int);
- virtual int set_cache_priority(DB_CACHE_PRIORITY);
virtual int set_dup_compare(dup_compare_fcn_type); /*deprecated*/
virtual int set_dup_compare(int (*)(Db *, const Dbt *, const Dbt *));
- virtual int set_encrypt(const char *, int);
+ virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(void (*)(const char *, char *));
+ virtual void get_errfile(FILE **);
virtual void set_errfile(FILE *);
+ virtual void get_errpfx(const char **);
virtual void set_errpfx(const char *);
virtual int set_feedback(void (*)(Db *, int, int));
+ virtual int get_flags(u_int32_t *);
virtual int set_flags(u_int32_t);
+ virtual int get_h_ffactor(u_int32_t *);
virtual int set_h_ffactor(u_int32_t);
virtual int set_h_hash(h_hash_fcn_type); /*deprecated*/
virtual int set_h_hash(u_int32_t (*)(Db *, const void *, u_int32_t));
+ virtual int get_h_nelem(u_int32_t *);
virtual int set_h_nelem(u_int32_t);
+ virtual int get_lorder(int *);
virtual int set_lorder(int);
+ virtual int get_pagesize(u_int32_t *);
virtual int set_pagesize(u_int32_t);
virtual int set_paniccall(void (*)(DbEnv *, int));
+ virtual int get_re_delim(int *);
virtual int set_re_delim(int);
+ virtual int get_re_len(u_int32_t *);
virtual int set_re_len(u_int32_t);
+ virtual int get_re_pad(int *);
virtual int set_re_pad(int);
- virtual int set_re_source(char *);
+ virtual int get_re_source(const char **);
+ virtual int set_re_source(const char *);
+ virtual int get_q_extentsize(u_int32_t *);
virtual int set_q_extentsize(u_int32_t);
virtual int stat(void *sp, u_int32_t flags);
virtual int sync(u_int32_t flags);
virtual int truncate(DbTxn *, u_int32_t *, u_int32_t);
virtual int upgrade(const char *name, u_int32_t flags);
- virtual int verify(const char *, const char *, __DB_OSTREAMCLASS *, u_int32_t);
+ virtual int verify(const char *, const char *, __DB_OSTREAMCLASS *,
+ u_int32_t);
// These additional methods are not in the C interface, and
// are only available for C++.
//
virtual void set_error_stream(__DB_OSTREAMCLASS *);
+ virtual DbEnv *get_env();
+ virtual DbMpoolFile *get_mpf();
+
virtual DB *get_DB()
{
return (DB *)imp();
@@ -665,6 +876,7 @@ private:
// instance data
DbEnv *env_;
+ DbMpoolFile *mpf_;
int construct_error_;
u_int32_t flags_;
u_int32_t construct_flags_;
@@ -793,4 +1005,44 @@ private:
DbLogc(const Dbc &);
DbLogc &operator = (const Dbc &);
};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// multiple key/data/reco iterator classes
+//
+
+// DbMultipleIterator is a shared private base class for the three types
+// of bulk-return Iterator; it should never be instantiated directly,
+// but it handles the functionality shared by its subclasses.
+class _exported DbMultipleIterator
+{
+public:
+ DbMultipleIterator(const Dbt &dbt);
+protected:
+ u_int8_t *data_;
+ u_int32_t *p_;
+};
+
+class _exported DbMultipleKeyDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleKeyDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(Dbt &key, Dbt &data);
+};
+
+class _exported DbMultipleRecnoDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleRecnoDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(db_recno_t &recno, Dbt &data);
+};
+
+class _exported DbMultipleDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(Dbt &data);
+};
+
#endif /* !_DB_CXX_H_ */
diff --git a/db/build_win32/db_deadlock.dsp b/db/build_win32/db_deadlock.dsp
index c6b42360d..eb5688a2d 100644
--- a/db/build_win32/db_deadlock.dsp
+++ b/db/build_win32/db_deadlock.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_deadlock" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_deadlock - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_deadlock - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_deadlock - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_deadlock - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_deadlock - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_deadlock - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_deadlock - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_deadlock - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_deadlock - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_dll.dsp b/db/build_win32/db_dll.dsp
index 8e3f53ce5..52a1d4838 100644
--- a/db/build_win32/db_dll.dsp
+++ b/db/build_win32/db_dll.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -13,19 +13,16 @@ CFG=db_dll - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "db_dll.mak" CFG="db_dll - Win32 Debug Static"
+!MESSAGE NMAKE /f "db_dll.mak" CFG="db_dll - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "db_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "db_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "db_dll - Win32 Release Static" (based on\
- "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "db_dll - Win32 Debug Static" (based on\
- "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -46,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -56,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb32.dll"
+# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb42.dll"
!ELSEIF "$(CFG)" == "db_dll - Win32 Debug"
@@ -72,74 +69,18 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb32d.dll" /fixed:no
-
-!ELSEIF "$(CFG)" == "db_dll - Win32 Release Static"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_DLL__"
-# PROP BASE Intermediate_Dir "DB_DLL__"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb32.dll"
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb32.dll"
-
-!ELSEIF "$(CFG)" == "db_dll - Win32 Debug Static"
-
-# PROP BASE Use_MFC 2
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_DLL_0"
-# PROP BASE Intermediate_Dir "DB_DLL_0"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
-# SUBTRACT BASE CPP /Fr
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /YX"config.h" /FD /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb32d.dll" /fixed:no
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb32d.dll" /fixed:no
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb42d.dll" /fixed:no
!ENDIF
@@ -147,8 +88,6 @@ LINK32=link.exe
# Name "db_dll - Win32 Release"
# Name "db_dll - Win32 Debug"
-# Name "db_dll - Win32 Release Static"
-# Name "db_dll - Win32 Debug Static"
# Begin Source File
SOURCE=..\btree\bt_compare.c
@@ -223,10 +162,6 @@ SOURCE=..\btree\btree_auto.c
# End Source File
# Begin Source File
-SOURCE=.\dllmain.c
-# End Source File
-# Begin Source File
-
SOURCE=.\libdb.def
# End Source File
# Begin Source File
@@ -251,10 +186,18 @@ SOURCE=..\common\db_getlong.c
# End Source File
# Begin Source File
+SOURCE=..\common\db_idspace.c
+# End Source File
+# Begin Source File
+
SOURCE=..\common\db_log2.c
# End Source File
# Begin Source File
+SOURCE=..\common\util_cache.c
+# End Source File
+# Begin Source File
+
SOURCE=..\common\util_log.c
# End Source File
# Begin Source File
@@ -263,7 +206,39 @@ SOURCE=..\common\util_sig.c
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_app.cpp
+SOURCE=..\crypto\aes_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\crypto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\mersenne\mt19937db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\rijndael\rijndael-alg-fst.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\rijndael\rijndael-api-fst.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_db.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbt.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_env.cpp
# End Source File
# Begin Source File
@@ -275,7 +250,7 @@ SOURCE=..\cxx\cxx_lock.cpp
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_log.cpp
+SOURCE=..\cxx\cxx_logc.cpp
# End Source File
# Begin Source File
@@ -283,7 +258,7 @@ SOURCE=..\cxx\cxx_mpool.cpp
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_table.cpp
+SOURCE=..\cxx\cxx_multi.cpp
# End Source File
# Begin Source File
@@ -343,10 +318,18 @@ SOURCE=..\db\db_method.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_open.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_overflow.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_ovfl_vrfy.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_pr.c
# End Source File
# Begin Source File
@@ -359,10 +342,22 @@ SOURCE=..\db\db_reclaim.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_remove.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_rename.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_ret.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_truncate.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_upg.c
# End Source File
# Begin Source File
@@ -383,6 +378,22 @@ SOURCE=..\dbm\dbm.c
# End Source File
# Begin Source File
+SOURCE=..\dbreg\dbreg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\env\db_salloc.c
# End Source File
# Begin Source File
@@ -391,6 +402,10 @@ SOURCE=..\env\db_shash.c
# End Source File
# Begin Source File
+SOURCE=..\env\env_file.c
+# End Source File
+# Begin Source File
+
SOURCE=..\env\env_method.c
# End Source File
# Begin Source File
@@ -407,6 +422,22 @@ SOURCE=..\env\env_region.c
# End Source File
# Begin Source File
+SOURCE=..\fileops\fileops_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_basic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\hash\hash.c
# End Source File
# Begin Source File
@@ -435,6 +466,10 @@ SOURCE=..\hash\hash_method.c
# End Source File
# Begin Source File
+SOURCE=..\hash\hash_open.c
+# End Source File
+# Begin Source File
+
SOURCE=..\hash\hash_page.c
# End Source File
# Begin Source File
@@ -459,15 +494,19 @@ SOURCE=..\hash\hash_verify.c
# End Source File
# Begin Source File
-SOURCE=..\hsearch\hsearch.c
+SOURCE=..\hmac\hmac.c
# End Source File
# Begin Source File
-SOURCE=..\lock\lock.c
+SOURCE=..\hmac\sha1.c
# End Source File
# Begin Source File
-SOURCE=..\lock\lock_conflict.c
+SOURCE=..\hsearch\hsearch.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock.c
# End Source File
# Begin Source File
@@ -499,18 +538,10 @@ SOURCE=..\log\log_archive.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_auto.c
-# End Source File
-# Begin Source File
-
SOURCE=..\log\log_compare.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_findckp.c
-# End Source File
-# Begin Source File
-
SOURCE=..\log\log_get.c
# End Source File
# Begin Source File
@@ -523,14 +554,6 @@ SOURCE=..\log\log_put.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_rec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\log\log_register.c
-# End Source File
-# Begin Source File
-
SOURCE=..\mp\mp_alloc.c
# End Source File
# Begin Source File
@@ -579,7 +602,7 @@ SOURCE=..\mp\mp_trickle.c
# End Source File
# Begin Source File
-SOURCE=..\mutex\mut_tas.c
+SOURCE=..\mutex\mut_win32.c
# End Source File
# Begin Source File
@@ -591,11 +614,7 @@ SOURCE=..\os\os_alloc.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_fsync.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\os\os_handle.c
+SOURCE=..\os\os_id.c
# End Source File
# Begin Source File
@@ -619,23 +638,23 @@ SOURCE=..\os\os_rpath.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_rw.c
+SOURCE=..\os\os_tmpdir.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_stat.c
+SOURCE=..\os\os_unlink.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_tmpdir.c
+SOURCE=..\os_win32\os_abs.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_unlink.c
+SOURCE=..\os_win32\os_clock.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_abs.c
+SOURCE=..\os_win32\os_config.c
# End Source File
# Begin Source File
@@ -651,7 +670,11 @@ SOURCE=..\os_win32\os_fid.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_finit.c
+SOURCE=..\os_win32\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_handle.c
# End Source File
# Begin Source File
@@ -667,6 +690,10 @@ SOURCE=..\os_win32\os_rename.c
# End Source File
# Begin Source File
+SOURCE=..\os_win32\os_rw.c
+# End Source File
+# Begin Source File
+
SOURCE=..\os_win32\os_seek.c
# End Source File
# Begin Source File
@@ -679,7 +706,7 @@ SOURCE=..\os_win32\os_spin.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_type.c
+SOURCE=..\os_win32\os_stat.c
# End Source File
# Begin Source File
@@ -723,6 +750,22 @@ SOURCE=..\qam\qam_verify.c
# End Source File
# Begin Source File
+SOURCE=..\rep\rep_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_record.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn.c
# End Source File
# Begin Source File
@@ -731,14 +774,30 @@ SOURCE=..\txn\txn_auto.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_method.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn_rec.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_recover.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn_region.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\xa\xa.c
# End Source File
# Begin Source File
diff --git a/db/build_win32/db_dump.dsp b/db/build_win32/db_dump.dsp
index 977c30f70..6da230922 100644
--- a/db/build_win32/db_dump.dsp
+++ b/db/build_win32/db_dump.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_dump" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_dump - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_dump - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_dump - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_dump - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_dump - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_dump - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_dump - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_dump - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_dump - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_dump - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_int.h b/db/build_win32/db_int.h
index 0eb4309fc..c6daf139b 100644
--- a/db/build_win32/db_int.h
+++ b/db/build_win32/db_int.h
@@ -2,22 +2,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: db_int.src,v 11.42 2001/01/11 17:49:17 krinsky Exp $
+ * $Id: db_int.in,v 11.126 2003/09/10 17:27:14 sue Exp $
*/
#ifndef _DB_INTERNAL_H_
#define _DB_INTERNAL_H_
/*******************************************************
- * General includes.
+ * System includes, db.h, a few general DB includes. The DB includes are
+ * here because it's OK if db_int.h includes queue structure declarations.
*******************************************************/
-#include "db.h"
-
#ifndef NO_SYSTEM_INCLUDES
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(STDC_HEADERS) || defined(__cplusplus)
#include <stdarg.h>
#else
#include <varargs.h>
@@ -25,8 +24,10 @@
#include <errno.h>
#endif
-#include "queue.h"
-#include "shqueue.h"
+#include "db.h"
+
+#include "dbinc/queue.h"
+#include "dbinc/shqueue.h"
#if defined(__cplusplus)
extern "C" {
@@ -44,10 +45,19 @@ extern "C" {
#define MS_PER_SEC 1000 /* Milliseconds in a second. */
#define USEC_PER_MS 1000 /* Microseconds in a millisecond. */
+#define RECNO_OOB 0 /* Illegal record number. */
+
+/* Test for a power-of-two (tests true for zero, which doesn't matter here). */
+#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)
+
+/* Test for valid page sizes. */
#define DB_MIN_PGSIZE 0x000200 /* Minimum page size (512). */
#define DB_MAX_PGSIZE 0x010000 /* Maximum page size (65536). */
+#define IS_VALID_PAGESIZE(x) \
+ (POWER_OF_TWO(x) && (x) >= DB_MIN_PGSIZE && ((x) <= DB_MAX_PGSIZE))
-#define RECNO_OOB 0 /* Illegal record number. */
+/* Minimum number of pages cached, by default. */
+#define DB_MINPAGECACHE 16
/*
* If we are unable to determine the underlying filesystem block size, use
@@ -55,6 +65,9 @@ extern "C" {
*/
#define DB_DEF_IOSIZE (8 * 1024)
+/* Number of times to reties I/O operations that return EINTR or EBUSY. */
+#define DB_RETRY 100
+
/*
* Aligning items to particular sizes or in pages or memory.
*
@@ -80,12 +93,25 @@ typedef unsigned long db_alignp_t;
/* Align an integer to a specific boundary. */
#undef ALIGN
-#define ALIGN(value, bound) \
- (((value) + (bound) - 1) & ~(((u_int)bound) - 1))
+#define ALIGN(v, bound) (((v) + (bound) - 1) & ~(((db_align_t)bound) - 1))
-/* Align a pointer to a specific boundary. */
-#undef ALIGNP
-#define ALIGNP(value, bound) ALIGN((db_alignp_t)value, bound)
+/*
+ * Print an address as a u_long (a u_long is the largest type we can print
+ * portably). Most 64-bit systems have made longs 64-bits, so this should
+ * work.
+ */
+#define P_TO_ULONG(p) ((u_long)(db_alignp_t)(p))
+
+/*
+ * Convert a pointer to a small integral value.
+ *
+ * The (u_int16_t)(db_alignp_t) cast avoids warnings: the (db_alignp_t) cast
+ * converts the value to an integral type, and the (u_int16_t) cast converts
+ * it to a small integral type so we don't get complaints when we assign the
+ * final result to an integral type smaller than db_alignp_t.
+ */
+#define P_TO_UINT32(p) ((u_int32_t)(db_alignp_t)(p))
+#define P_TO_UINT16(p) ((u_int16_t)(db_alignp_t)(p))
/*
* There are several on-page structures that are declared to have a number of
@@ -101,17 +127,10 @@ typedef unsigned long db_alignp_t;
* an array.
*/
#undef SSZ
-#define SSZ(name, field) ((int)&(((name *)0)->field))
+#define SSZ(name, field) P_TO_UINT16(&(((name *)0)->field))
#undef SSZA
-#define SSZA(name, field) ((int)&(((name *)0)->field[0]))
-
-/*
- * Print an address as a u_long (a u_long is the largest type we can print
- * portably). Most 64-bit systems have made longs 64-bits, so this should
- * work.
- */
-#define P_TO_ULONG(p) ((u_long)(db_alignp_t)(p))
+#define SSZA(name, field) P_TO_UINT16(&(((name *)0)->field[0]))
/* Structure used to print flag values. */
typedef struct __fn {
@@ -126,51 +145,65 @@ typedef struct __fn {
#define F_CLR(p, f) (p)->flags &= ~(f)
#define F_ISSET(p, f) ((p)->flags & (f))
#define F_SET(p, f) (p)->flags |= (f)
-#define LF_CLR(f) (flags &= ~(f))
-#define LF_ISSET(f) (flags & (f))
-#define LF_SET(f) (flags |= (f))
+#define LF_CLR(f) ((flags) &= ~(f))
+#define LF_ISSET(f) ((flags) & (f))
+#define LF_SET(f) ((flags) |= (f))
/* Display separator string. */
#undef DB_LINE
#define DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
-/* Unused, or not-used-yet variable. "Shut that bloody compiler up!" */
-#define COMPQUIET(n, v) (n) = (v)
+/*******************************************************
+ * API return values
+ *******************************************************/
+/*
+ * Return values that are OK for each different call. Most calls have a
+ * standard 'return of 0 is only OK value', but some, like db->get have
+ * DB_NOTFOUND as a return value, but it really isn't an error.
+ */
+#define DB_RETOK_STD(ret) ((ret) == 0)
+#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
+ (ret) == DB_NOTFOUND)
+#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
+ (ret) == DB_NOTFOUND)
+#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
+ (ret) == DB_NOTFOUND)
+#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
+#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
+#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
+#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
+#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
+#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
+ (ret) == DB_REP_ISPERM || \
+ (ret) == DB_REP_NEWMASTER || \
+ (ret) == DB_REP_NEWSITE || \
+ (ret) == DB_REP_NOTPERM)
+
+/* Find a reasonable operation-not-supported error. */
+#ifdef EOPNOTSUPP
+#define DB_OPNOTSUP EOPNOTSUPP
+#else
+#ifdef ENOTSUP
+#define DB_OPNOTSUP ENOTSUP
+#else
+#define DB_OPNOTSUP EINVAL
+#endif
+#endif
/*******************************************************
* Files.
*******************************************************/
- /*
- * We use 1024 as the maximum path length. It's too hard to figure out what
- * the real path length is, as it was traditionally stored in <sys/param.h>,
- * and that file isn't always available.
- */
+/*
+ * We use 1024 as the maximum path length. It's too hard to figure out what
+ * the real path length is, as it was traditionally stored in <sys/param.h>,
+ * and that file isn't always available.
+ */
#undef MAXPATHLEN
#define MAXPATHLEN 1024
#define PATH_DOT "." /* Current working directory. */
-#define PATH_SEPARATOR "\\/:" /* Path separator character. */
-
-/*
- * Flags understood by __os_open.
- */
-#define DB_OSO_CREATE 0x001 /* POSIX: O_CREAT */
-#define DB_OSO_EXCL 0x002 /* POSIX: O_EXCL */
-#define DB_OSO_LOG 0x004 /* Opening a log file. */
-#define DB_OSO_RDONLY 0x008 /* POSIX: O_RDONLY */
-#define DB_OSO_REGION 0x010 /* Opening a region file. */
-#define DB_OSO_SEQ 0x020 /* Expected sequential access. */
-#define DB_OSO_TEMP 0x040 /* Remove after last close. */
-#define DB_OSO_TRUNC 0x080 /* POSIX: O_TRUNC */
-
-/*
- * Seek options understood by __os_seek.
- */
-typedef enum {
- DB_OS_SEEK_CUR, /* POSIX: SEEK_CUR */
- DB_OS_SEEK_END, /* POSIX: SEEK_END */
- DB_OS_SEEK_SET /* POSIX: SEEK_SET */
-} DB_OS_SEEK;
+ /* Path separator character(s). */
+#define PATH_SEPARATOR "\\/:"
/*******************************************************
* Environment.
@@ -185,15 +218,21 @@ typedef enum {
/*
* CDB_LOCKING CDB product locking.
+ * CRYPTO_ON Security has been configured.
* LOCKING_ON Locking has been configured.
* LOGGING_ON Logging has been configured.
* MPOOL_ON Memory pool has been configured.
+ * REP_ON Replication has been configured.
+ * RPC_ON RPC has been configured.
* TXN_ON Transactions have been configured.
*/
#define CDB_LOCKING(dbenv) F_ISSET(dbenv, DB_ENV_CDB)
+#define CRYPTO_ON(dbenv) ((dbenv)->crypto_handle != NULL)
#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != NULL)
#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != NULL)
#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NULL)
+#define REP_ON(dbenv) ((dbenv)->rep_handle != NULL)
+#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
/*
@@ -206,21 +245,24 @@ typedef enum {
!CDB_LOCKING((dbc)->dbp->dbenv) && LOCKING_ON((dbc)->dbp->dbenv))
/*
- * IS_RECOVERING The system is running recovery.
+ * IS_RECOVERING: The system is running recovery.
*/
#define IS_RECOVERING(dbenv) \
(LOGGING_ON(dbenv) && \
F_ISSET((DB_LOG *)(dbenv)->lg_handle, DBLOG_RECOVER))
-/* Most initialization methods cannot be called after open is called. */
+/* Initialization methods are often illegal before/after open is called. */
#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \
if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \
return (__db_mi_open(dbenv, name, 1));
+#define ENV_ILLEGAL_BEFORE_OPEN(dbenv, name) \
+ if (!F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \
+ return (__db_mi_open(dbenv, name, 0));
/* We're not actually user hostile, honest. */
-#define ENV_REQUIRES_CONFIG(dbenv, handle, subsystem) \
+#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flags) \
if (handle == NULL) \
- return (__db_env_config(dbenv, subsystem));
+ return (__db_env_config(dbenv, i, flags));
/*******************************************************
* Database Access Methods.
@@ -234,15 +276,15 @@ typedef enum {
/* Initialization methods are often illegal before/after open is called. */
#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \
- if (F_ISSET((dbp), DB_OPEN_CALLED)) \
- return (__db_mi_open(dbp->dbenv, name, 1));
+ if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
+ return (__db_mi_open((dbp)->dbenv, name, 1));
#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \
- if (!F_ISSET((dbp), DB_OPEN_CALLED)) \
- return (__db_mi_open(dbp->dbenv, name, 0));
+ if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \
+ return (__db_mi_open((dbp)->dbenv, name, 0));
/* Some initialization methods are illegal if environment isn't local. */
#define DB_ILLEGAL_IN_ENV(dbp, name) \
- if (!F_ISSET(dbp->dbenv, DB_ENV_DBLOCAL)) \
- return (__db_mi_env(dbp->dbenv, name));
+ if (!F_ISSET((dbp)->dbenv, DB_ENV_DBLOCAL)) \
+ return (__db_mi_env((dbp)->dbenv, name));
#define DB_ILLEGAL_METHOD(dbp, flags) { \
int __ret; \
if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \
@@ -268,12 +310,49 @@ struct __dbc_internal {
__DBC_INTERNAL
};
+/* Actions that __db_master_update can take. */
+typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
+
/*
* Access-method-common macro for determining whether a cursor
* has been initialized.
*/
#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)
+/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */
+#define FREE_IF_NEEDED(sdbp, dbt) \
+ if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \
+ __os_ufree((sdbp)->dbenv, (dbt)->data); \
+ F_CLR((dbt), DB_DBT_APPMALLOC); \
+ }
+
+/*
+ * Use memory belonging to object "owner" to return the results of
+ * any no-DBT-flag get ops on cursor "dbc".
+ */
+#define SET_RET_MEM(dbc, owner) \
+ do { \
+ (dbc)->rskey = &(owner)->my_rskey; \
+ (dbc)->rkey = &(owner)->my_rkey; \
+ (dbc)->rdata = &(owner)->my_rdata; \
+ } while (0)
+
+/* Use the return-data memory src is currently set to use in dest as well. */
+#define COPY_RET_MEM(src, dest) \
+ do { \
+ (dest)->rskey = (src)->rskey; \
+ (dest)->rkey = (src)->rkey; \
+ (dest)->rdata = (src)->rdata; \
+ } while (0)
+
+/* Reset the returned-memory pointers to their defaults. */
+#define RESET_RET_MEM(dbc) \
+ do { \
+ (dbc)->rskey = &(dbc)->my_rskey; \
+ (dbc)->rkey = &(dbc)->my_rkey; \
+ (dbc)->rdata = &(dbc)->my_rdata; \
+ } while (0)
+
/*******************************************************
* Mpool.
*******************************************************/
@@ -286,7 +365,8 @@ struct __dbc_internal {
/* Structure used as the DB pgin/pgout pgcookie. */
typedef struct __dbpginfo {
size_t db_pagesize; /* Underlying page size. */
- int needswap; /* If swapping required. */
+ u_int32_t flags; /* Some DB_AM flags needed. */
+ DBTYPE type; /* DB type */
} DB_PGINFO;
/*******************************************************
@@ -297,102 +377,108 @@ typedef struct __dbpginfo {
(LSN).file = 0; \
(LSN).offset = 0; \
} while (0)
-
-/* Return 1 if LSN is a 'zero' lsn, otherwise return 0. */
#define IS_ZERO_LSN(LSN) ((LSN).file == 0)
-/* Test if we need to log a change. */
-#define DB_LOGGING(dbc) \
- (LOGGING_ON((dbc)->dbp->dbenv) && !F_ISSET(dbc, DBC_RECOVER))
+#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)
+#define INIT_LSN(LSN) do { \
+ (LSN).file = 1; \
+ (LSN).offset = 0; \
+} while (0)
+
+#define MAX_LSN(LSN) do { \
+ (LSN).file = UINT32_T_MAX; \
+ (LSN).offset = UINT32_T_MAX; \
+} while (0)
+#define IS_MAX_LSN(LSN) \
+ ((LSN).file == UINT32_T_MAX && (LSN).offset == UINT32_T_MAX)
+
+/* If logging is turned off, smash the lsn. */
+#define LSN_NOT_LOGGED(LSN) do { \
+ (LSN).file = 0; \
+ (LSN).offset = 1; \
+} while (0)
+#define IS_NOT_LOGGED_LSN(LSN) \
+ ((LSN).file == 0 && (LSN).offset == 1)
-/* Internal flag for use with internal __log_unregister. */
-#define DB_LOGONLY 0x01
/*******************************************************
* Txn.
*******************************************************/
#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))
-#define IS_SUBTRANSACTION(txn) \
+#define IS_SUBTRANSACTION(txn) \
((txn) != NULL && (txn)->parent != NULL)
/*******************************************************
- * Global variables.
+ * Crypto.
*******************************************************/
-#ifdef HAVE_VXWORKS
-#include "semLib.h"
-#endif
+#define DB_IV_BYTES 16 /* Bytes per IV */
+#define DB_MAC_KEY 20 /* Bytes per MAC checksum */
-/*
- * DB global variables. Done in a single structure to minimize the name-space
- * pollution.
- */
-typedef struct __db_globals {
- u_int32_t db_pageyield; /* db_set_pageyield */
- u_int32_t db_panic; /* db_set_panic */
- u_int32_t db_region_init; /* db_set_region_init */
- u_int32_t db_tas_spins; /* db_set_tas_spins */
-#ifdef HAVE_VXWORKS
- u_int32_t db_global_init; /* VxWorks: inited */
- SEM_ID db_global_lock; /* VxWorks: global semaphore */
-#endif
- /* XA: list of opened environments. */
- TAILQ_HEAD(__db_envq, __db_env) db_envq;
-} DB_GLOBALS;
-
-#ifdef DB_INITIALIZE_DB_GLOBALS
-DB_GLOBALS __db_global_values = {
- 0, /* db_set_pageyield */
- 1, /* db_set_panic */
- 0, /* db_set_region_init */
- 0, /* db_set_tas_spins */
-#ifdef HAVE_VXWORKS
- 0, /* db_global_init */
- NULL, /* db_global_lock */
-#endif
- /* XA environment queue */
- {NULL, &__db_global_values.db_envq.tqh_first}
-};
-#else
-extern DB_GLOBALS __db_global_values;
-#endif
-#define DB_GLOBAL(v) __db_global_values.v
-
-/* Forward structure declarations. */
+/*******************************************************
+ * Forward structure declarations.
+ *******************************************************/
struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;
-struct __mutex_t; typedef struct __mutex_t MUTEX;
+struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
+struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
struct __vrfy_childinfo; typedef struct __vrfy_childinfo VRFY_CHILDINFO;
struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;
struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
-struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;
-struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;
-typedef enum {
- TXNLIST_DELETE,
- TXNLIST_LSN,
- TXNLIST_TXNID,
- TXNLIST_PGNO
-} db_txnlist_type;
-
-/*
- * Currently, region offsets are limited to 32-bits. I expect that's going
- * to have to be fixed in the not-too-distant future, since we won't want to
- * split 100Gb memory pools into that many different regions. It's typedef'd
- * so it won't be too painful to upgrade.
- */
-typedef u_int32_t roff_t;
#if defined(__cplusplus)
}
#endif
/*******************************************************
- * More general includes.
+ * Remaining general DB includes.
+ *******************************************************/
+
+
+#include "dbinc/globals.h"
+#include "dbinc/debug.h"
+#include "dbinc/mutex.h"
+#include "dbinc/region.h"
+#include "dbinc_auto/mutex_ext.h" /* XXX: Include after region.h. */
+#include "dbinc_auto/env_ext.h"
+#include "dbinc/os.h"
+#include "dbinc/rep.h"
+#include "dbinc_auto/clib_ext.h"
+#include "dbinc_auto/common_ext.h"
+
+/*******************************************************
+ * Remaining Log.
+ * These need to be defined after the general includes
+ * because they need rep.h from above.
*******************************************************/
-#include "debug.h"
-#include "mutex.h"
-#include "region.h"
-#include "mutex_ext.h"
-#include "env_ext.h"
-#include "os.h"
-#include "os_ext.h"
-#include "common_ext.h"
+/*
+ * Test if the environment is currently logging changes. If we're in recovery
+ * or we're a replication client, we don't need to log changes because they're
+ * already in the log, even though we have a fully functional log system.
+ */
+#define DBENV_LOGGING(dbenv) \
+ (LOGGING_ON(dbenv) && !IS_REP_CLIENT(dbenv) && \
+ (!IS_RECOVERING(dbenv)))
+
+/*
+ * Test if we need to log a change. By default, we don't log operations without
+ * associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
+ * This is because we want to get log records for read/write operations, and, if
+ * we trying to debug something, more information is always better.
+ *
+ * The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
+ * thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
+ * is true.
+ *
+ * We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
+ * in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
+ * because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
+ */
+#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
+#define DBC_LOGGING(dbc) \
+ (LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#else
+#define DBC_LOGGING(dbc) \
+ ((dbc)->txn != NULL && LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#endif
#endif /* !_DB_INTERNAL_H_ */
diff --git a/db/build_win32/db_java.dsp b/db/build_win32/db_java.dsp
index d1b7e6a91..3fe85f523 100644
--- a/db/build_win32/db_java.dsp
+++ b/db/build_win32/db_java.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_java" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -17,12 +17,12 @@ CFG=db_java - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_java - Win32 Release" (based on\
- "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "db_java - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "db_java - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -43,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -53,25 +53,22 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_java32.dll"
+# ADD LINK32 Release/libdb42.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_java42.dll"
# Begin Custom Build - Compiling java files using javac
ProjDir=.
-InputPath=.\Release\libdb_java32.dll
-SOURCE=$(InputPath)
+InputPath=.\Release\libdb_java42.dll
+SOURCE="$(InputPath)"
"force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd $(ProjDir)\..\java\src\com\sleepycat\db
- mkdir ..\..\..\..\classes
echo compiling Berkeley DB classes
- javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
+ mkdir "$(OUTDIR)\classes"
+ javac -g -d "$(OUTDIR)\classes" -classpath "$(OUTDIR)/classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\$(OUTDIR)\*.java ..\java\src\com\sleepycat\bdb\bind\*.java ..\java\src\com\sleepycat\bdb\bind\serial\*.java ..\java\src\com\sleepycat\bdb\bind\tuple\*.java ..\java\src\com\sleepycat\bdb\*.java ..\java\src\com\sleepycat\bdb\collection\*.java ..\java\src\com\sleepycat\bdb\factory\*.java ..\java\src\com\sleepycat\bdb\util\*.java
echo compiling examples
- cd ..\examples
- javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
- echo creating jar file
- cd ..\..\..\..\classes
- jar cf db.jar com\sleepycat\db\*.class
+ mkdir "$(OUTDIR)\classes.ex"
+ javac -g -d "$(OUTDIR)\classes.ex" -classpath "$(OUTDIR)\classes;$(OUTDIR)\classes.ex" ..\examples_java\src\com\sleepycat\examples\db\*.java ..\examples_java\src\com\sleepycat\examples\bdb\access\*.java ..\examples_java\src\com\sleepycat\examples\bdb\helloworld\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\basic\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\entity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\tuple\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\sentity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\marshal\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)\db.jar" -C "$(OUTDIR)\classes" .
+ jar cf "$(OUTDIR)\dbexamples.jar" -C "$(OUTDIR)\classes.ex" .
echo Java build finished
# End Custom Build
@@ -90,10 +87,10 @@ SOURCE=$(InputPath)
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
@@ -101,27 +98,24 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_java32d.dll" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_java42d.dll" /fixed:no
# Begin Custom Build - Compiling java files using javac
ProjDir=.
-InputPath=.\Debug\libdb_java32d.dll
-SOURCE=$(InputPath)
+InputPath=.\Debug\libdb_java42d.dll
+SOURCE="$(InputPath)"
"force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd $(ProjDir)\..\java\src\com\sleepycat\db
- mkdir ..\..\..\..\classes
echo compiling Berkeley DB classes
- javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
+ mkdir "$(OUTDIR)\classes"
+ javac -g -d "$(OUTDIR)\classes" -classpath "$(OUTDIR)/classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\$(OUTDIR)\*.java ..\java\src\com\sleepycat\bdb\bind\*.java ..\java\src\com\sleepycat\bdb\bind\serial\*.java ..\java\src\com\sleepycat\bdb\bind\tuple\*.java ..\java\src\com\sleepycat\bdb\*.java ..\java\src\com\sleepycat\bdb\collection\*.java ..\java\src\com\sleepycat\bdb\factory\*.java ..\java\src\com\sleepycat\bdb\util\*.java
echo compiling examples
- javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
- cd ..\examples
- echo creating jar file
- cd ..\..\..\..\classes
- jar cf db.jar com\sleepycat\db\*.class
+ mkdir "$(OUTDIR)\classes.ex"
+ javac -g -d "$(OUTDIR)\classes.ex" -classpath "$(OUTDIR)\classes;$(OUTDIR)\classes.ex" ..\examples_java\src\com\sleepycat\examples\db\*.java ..\examples_java\src\com\sleepycat\examples\bdb\access\*.java ..\examples_java\src\com\sleepycat\examples\bdb\helloworld\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\basic\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\entity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\tuple\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\sentity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\marshal\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)\db.jar" -C "$(OUTDIR)\classes" .
+ jar cf "$(OUTDIR)\dbexamples.jar" -C "$(OUTDIR)\classes.ex" .
echo Java build finished
-
+
# End Custom Build
!ENDIF
@@ -132,43 +126,7 @@ SOURCE=$(InputPath)
# Name "db_java - Win32 Debug"
# Begin Source File
-SOURCE=..\libdb_java\java_Db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_DbEnv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_DbLock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_DbLsn.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_DbTxn.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_Dbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_Dbt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_info.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_locked.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\libdb_java\java_util.c
+SOURCE=..\libdb_java\db_java_wrap.c
# End Source File
# End Target
# End Project
diff --git a/db/build_win32/db_load.dsp b/db/build_win32/db_load.dsp
index 5dc199dca..50adc11be 100644
--- a/db/build_win32/db_load.dsp
+++ b/db/build_win32/db_load.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_load" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_load - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_load - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_load - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_load - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_load - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_load - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_load - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_load - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_load - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_load - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_perf.dsp b/db/build_win32/db_perf.dsp
index 21b79ed9e..82587c8ca 100644
--- a/db/build_win32/db_perf.dsp
+++ b/db/build_win32/db_perf.dsp
@@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /I "../dbinc" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -52,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb41.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_perf - Win32 Debug"
@@ -68,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /I "../dbinc" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -76,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb41d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_perf - Win32 Release Static"
@@ -92,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /I "../dbinc" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /I "../dbinc" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb41.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb41s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_perf - Win32 Debug Static"
@@ -117,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /I "../dbinc" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /I "../dbinc" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb41d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb41sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
@@ -142,10 +142,6 @@ SOURCE=..\test_perf\db_perf.c
# End Source File
# Begin Source File
-SOURCE=..\test_perf\perf_cache_check.c
-# End Source File
-# Begin Source File
-
SOURCE=..\test_perf\perf_checkpoint.c
# End Source File
# Begin Source File
@@ -158,6 +154,10 @@ SOURCE=..\test_perf\perf_dbs.c
# End Source File
# Begin Source File
+SOURCE=..\test_perf\perf_dead.c
+# End Source File
+# Begin Source File
+
SOURCE=..\test_perf\perf_debug.c
# End Source File
# Begin Source File
@@ -194,6 +194,14 @@ SOURCE=..\test_perf\perf_spawn.c
# End Source File
# Begin Source File
+SOURCE=..\test_perf\perf_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\test_perf\perf_sync.c
+# End Source File
+# Begin Source File
+
SOURCE=..\test_perf\perf_thread.c
# End Source File
# Begin Source File
diff --git a/db/build_win32/db_printlog.dsp b/db/build_win32/db_printlog.dsp
index b3e69c975..dd51dbfef 100644
--- a/db/build_win32/db_printlog.dsp
+++ b/db/build_win32/db_printlog.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_printlog" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_printlog - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_printlog - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_printlog - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_printlog - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_printlog - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_printlog - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_printlog - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_printlog - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_printlog - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_recover.dsp b/db/build_win32/db_recover.dsp
index 4260e8cef..3be0c3b3e 100644
--- a/db/build_win32/db_recover.dsp
+++ b/db/build_win32/db_recover.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_recover" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_recover - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_recover - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_recover - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_recover - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_recover - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_recover - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_recover - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_recover - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_recover - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_recover - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_small.dsp b/db/build_win32/db_small.dsp
new file mode 100644
index 000000000..25560431d
--- /dev/null
+++ b/db/build_win32/db_small.dsp
@@ -0,0 +1,664 @@
+# Microsoft Developer Studio Project File - Name="db_small" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=db_small - Win32 Debug Static
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "db_small.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "db_small.mak" CFG="db_small - Win32 Debug Static"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "db_small - Win32 Release Static" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_small - Win32 Debug Static" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "db_small - Win32 Release Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_small"
+# PROP BASE Intermediate_Dir "Release_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_small"
+# PROP Intermediate_Dir "Release_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"Release_small/libdb42s.lib"
+# ADD LIB32 /nologo /out:"Release_small/libdb42s.lib"
+
+!ELSEIF "$(CFG)" == "db_small - Win32 Debug Static"
+
+# PROP BASE Use_MFC 1
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_small"
+# PROP BASE Intermediate_Dir "Debug_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 1
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_small"
+# PROP Intermediate_Dir "Debug_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"Debug_small/libdb42sd.lib"
+# ADD LIB32 /nologo /out:"Debug_small/libdb42sd.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "db_small - Win32 Release Static"
+# Name "db_small - Win32 Debug Static"
+# Begin Source File
+
+SOURCE=..\btree\bt_compare.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_curadj.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_cursor.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_delete.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_put.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_reclaim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_recno.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_rsearch.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_search.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_split.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\bt_upgrade.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\btree\btree_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\strcasecmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\crypto_stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_byteorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_err.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_getlong.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_idspace.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\db_log2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\util_cache.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\util_log.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\common\util_sig.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_db.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbt.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_env.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_except.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_lock.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_logc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_mpool.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_multi.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_txn.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\crdel_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\crdel_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_am.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_cam.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_conv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_dispatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_dup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_iface.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_join.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_meta.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_overflow.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_pr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_reclaim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_remove.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_rename.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_ret.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_truncate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_upg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_upg_opd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_vrfy_stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\db_salloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\db_shash.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_file.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_recover.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\env\env_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fileops_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_basic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_func.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hash\hash_stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hmac\hmac.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hmac\sha1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_deadlock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\lock\lock_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log_archive.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log_compare.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log_get.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\log\log_put.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_bh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_fget.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_fopen.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_fput.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_fset.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_register.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_sync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mp\mp_trickle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mut_win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\mutex\mutex.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_alloc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_id.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_oflags.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_root.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_rpath.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_tmpdir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os\os_unlink.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_abs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_clock.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_config.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_dir.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_errno.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_fid.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_handle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_map.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_open.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_rename.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_rw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_seek.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_sleep.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_spin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\qam\qam_stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_stub.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_recover.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\xa\xa.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\xa\xa_db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\xa\xa_map.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_win32/db_stat.dsp b/db/build_win32/db_stat.dsp
index 630c4a6cf..beda97384 100644
--- a/db/build_win32/db_stat.dsp
+++ b/db/build_win32/db_stat.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_stat" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_stat - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_stat - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_stat - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_stat - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_stat - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_stat - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_stat - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_stat - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_stat - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_stat - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_static.dsp b/db/build_win32/db_static.dsp
index 69c3349c8..ae6b5c8ce 100644
--- a/db/build_win32/db_static.dsp
+++ b/db/build_win32/db_static.dsp
@@ -1,10 +1,10 @@
# Microsoft Developer Studio Project File - Name="db_static" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=db_static - Win32 Debug
+CFG=db_static - Win32 Debug Static
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -17,109 +17,67 @@ CFG=db_static - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_static - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "db_static - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "db_static - Win32 Release Static" (based on\
- "Win32 (x86) Static Library")
-!MESSAGE "db_static - Win32 Debug Static" (based on\
- "Win32 (x86) Static Library")
+!MESSAGE "db_static - Win32 Release Static" (based on "Win32 (x86) Static Library")
+!MESSAGE "db_static - Win32 Debug Static" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
+RSC=rc.exe
-!IF "$(CFG)" == "db_static - Win32 Release"
+!IF "$(CFG)" == "db_static - Win32 Release Static"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_Stati"
-# PROP BASE Intermediate_Dir "DB_Stati"
+# PROP BASE Output_Dir "Release_static"
+# PROP BASE Intermediate_Dir "Release_static"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_static"
# PROP Intermediate_Dir "Release_static"
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Release_static/libdb32s.lib"
-
-!ELSEIF "$(CFG)" == "db_static - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_Stat0"
-# PROP BASE Intermediate_Dir "DB_Stat0"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_static"
-# PROP Intermediate_Dir "Debug_static"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Debug_static/libdb32sd.lib"
-
-!ELSEIF "$(CFG)" == "db_static - Win32 Release Static"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_Stati"
-# PROP BASE Intermediate_Dir "DB_Stati"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_static"
-# PROP Intermediate_Dir "Release_static"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"Release/libdb32s.lib"
-# ADD LIB32 /nologo /out:"Release_static/libdb32s.lib"
+# ADD BASE LIB32 /nologo /out:"Release/libdb42s.lib"
+# ADD LIB32 /nologo /out:"Release_static/libdb42s.lib"
!ELSEIF "$(CFG)" == "db_static - Win32 Debug Static"
-# PROP BASE Use_MFC 0
+# PROP BASE Use_MFC 1
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_Stat0"
-# PROP BASE Intermediate_Dir "DB_Stat0"
+# PROP BASE Output_Dir "Debug_static"
+# PROP BASE Intermediate_Dir "Debug_static"
# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
+# PROP Use_MFC 1
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_static"
# PROP Intermediate_Dir "Debug_static"
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"Debug/libdb32sd.lib"
-# ADD LIB32 /nologo /out:"Debug_static/libdb32sd.lib"
+# ADD BASE LIB32 /nologo /out:"Debug/libdb42sd.lib"
+# ADD LIB32 /nologo /out:"Debug_static/libdb42sd.lib"
!ENDIF
# Begin Target
-# Name "db_static - Win32 Release"
-# Name "db_static - Win32 Debug"
# Name "db_static - Win32 Release Static"
# Name "db_static - Win32 Debug Static"
# Begin Source File
@@ -212,10 +170,18 @@ SOURCE=..\common\db_getlong.c
# End Source File
# Begin Source File
+SOURCE=..\common\db_idspace.c
+# End Source File
+# Begin Source File
+
SOURCE=..\common\db_log2.c
# End Source File
# Begin Source File
+SOURCE=..\common\util_cache.c
+# End Source File
+# Begin Source File
+
SOURCE=..\common\util_log.c
# End Source File
# Begin Source File
@@ -224,7 +190,39 @@ SOURCE=..\common\util_sig.c
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_app.cpp
+SOURCE=..\crypto\aes_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\crypto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\mersenne\mt19937db.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\rijndael\rijndael-alg-fst.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\crypto\rijndael\rijndael-api-fst.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_db.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_dbt.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\cxx\cxx_env.cpp
# End Source File
# Begin Source File
@@ -236,7 +234,7 @@ SOURCE=..\cxx\cxx_lock.cpp
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_log.cpp
+SOURCE=..\cxx\cxx_logc.cpp
# End Source File
# Begin Source File
@@ -244,7 +242,7 @@ SOURCE=..\cxx\cxx_mpool.cpp
# End Source File
# Begin Source File
-SOURCE=..\cxx\cxx_table.cpp
+SOURCE=..\cxx\cxx_multi.cpp
# End Source File
# Begin Source File
@@ -304,10 +302,18 @@ SOURCE=..\db\db_method.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_open.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_overflow.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_ovfl_vrfy.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_pr.c
# End Source File
# Begin Source File
@@ -320,10 +326,22 @@ SOURCE=..\db\db_reclaim.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_remove.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\db\db_rename.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_ret.c
# End Source File
# Begin Source File
+SOURCE=..\db\db_truncate.c
+# End Source File
+# Begin Source File
+
SOURCE=..\db\db_upg.c
# End Source File
# Begin Source File
@@ -344,6 +362,22 @@ SOURCE=..\dbm\dbm.c
# End Source File
# Begin Source File
+SOURCE=..\dbreg\dbreg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\dbreg\dbreg_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\env\db_salloc.c
# End Source File
# Begin Source File
@@ -352,6 +386,10 @@ SOURCE=..\env\db_shash.c
# End Source File
# Begin Source File
+SOURCE=..\env\env_file.c
+# End Source File
+# Begin Source File
+
SOURCE=..\env\env_method.c
# End Source File
# Begin Source File
@@ -368,6 +406,22 @@ SOURCE=..\env\env_region.c
# End Source File
# Begin Source File
+SOURCE=..\fileops\fileops_auto.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_basic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_rec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\fileops\fop_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\hash\hash.c
# End Source File
# Begin Source File
@@ -396,6 +450,10 @@ SOURCE=..\hash\hash_method.c
# End Source File
# Begin Source File
+SOURCE=..\hash\hash_open.c
+# End Source File
+# Begin Source File
+
SOURCE=..\hash\hash_page.c
# End Source File
# Begin Source File
@@ -420,15 +478,19 @@ SOURCE=..\hash\hash_verify.c
# End Source File
# Begin Source File
-SOURCE=..\hsearch\hsearch.c
+SOURCE=..\hmac\hmac.c
# End Source File
# Begin Source File
-SOURCE=..\lock\lock.c
+SOURCE=..\hmac\sha1.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\hsearch\hsearch.c
# End Source File
# Begin Source File
-SOURCE=..\lock\lock_conflict.c
+SOURCE=..\lock\lock.c
# End Source File
# Begin Source File
@@ -460,18 +522,10 @@ SOURCE=..\log\log_archive.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_auto.c
-# End Source File
-# Begin Source File
-
SOURCE=..\log\log_compare.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_findckp.c
-# End Source File
-# Begin Source File
-
SOURCE=..\log\log_get.c
# End Source File
# Begin Source File
@@ -484,14 +538,6 @@ SOURCE=..\log\log_put.c
# End Source File
# Begin Source File
-SOURCE=..\log\log_rec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\log\log_register.c
-# End Source File
-# Begin Source File
-
SOURCE=..\mp\mp_alloc.c
# End Source File
# Begin Source File
@@ -540,7 +586,7 @@ SOURCE=..\mp\mp_trickle.c
# End Source File
# Begin Source File
-SOURCE=..\mutex\mut_tas.c
+SOURCE=..\mutex\mut_win32.c
# End Source File
# Begin Source File
@@ -552,11 +598,7 @@ SOURCE=..\os\os_alloc.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_fsync.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\os\os_handle.c
+SOURCE=..\os\os_id.c
# End Source File
# Begin Source File
@@ -580,23 +622,23 @@ SOURCE=..\os\os_rpath.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_rw.c
+SOURCE=..\os\os_tmpdir.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_stat.c
+SOURCE=..\os\os_unlink.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_tmpdir.c
+SOURCE=..\os_win32\os_abs.c
# End Source File
# Begin Source File
-SOURCE=..\os\os_unlink.c
+SOURCE=..\os_win32\os_clock.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_abs.c
+SOURCE=..\os_win32\os_config.c
# End Source File
# Begin Source File
@@ -612,7 +654,11 @@ SOURCE=..\os_win32\os_fid.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_finit.c
+SOURCE=..\os_win32\os_fsync.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\os_win32\os_handle.c
# End Source File
# Begin Source File
@@ -628,6 +674,10 @@ SOURCE=..\os_win32\os_rename.c
# End Source File
# Begin Source File
+SOURCE=..\os_win32\os_rw.c
+# End Source File
+# Begin Source File
+
SOURCE=..\os_win32\os_seek.c
# End Source File
# Begin Source File
@@ -640,7 +690,7 @@ SOURCE=..\os_win32\os_spin.c
# End Source File
# Begin Source File
-SOURCE=..\os_win32\os_type.c
+SOURCE=..\os_win32\os_stat.c
# End Source File
# Begin Source File
@@ -684,6 +734,22 @@ SOURCE=..\qam\qam_verify.c
# End Source File
# Begin Source File
+SOURCE=..\rep\rep_method.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_record.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_region.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\rep\rep_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn.c
# End Source File
# Begin Source File
@@ -692,14 +758,30 @@ SOURCE=..\txn\txn_auto.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_method.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn_rec.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_recover.c
+# End Source File
+# Begin Source File
+
SOURCE=..\txn\txn_region.c
# End Source File
# Begin Source File
+SOURCE=..\txn\txn_stat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\txn\txn_util.c
+# End Source File
+# Begin Source File
+
SOURCE=..\xa\xa.c
# End Source File
# Begin Source File
diff --git a/db/build_win32/db_tcl.dsp b/db/build_win32/db_tcl.dsp
index b6df307d8..30cccd3e6 100644
--- a/db/build_win32/db_tcl.dsp
+++ b/db/build_win32/db_tcl.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_tcl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -22,6 +22,7 @@ CFG=db_tcl - Win32 Debug
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -42,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_TCL_SUPPORT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_TCL_SUPPORT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -52,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 Release/libdb32.lib tcl83.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_tcl32.dll"
+# ADD LINK32 Release/libdb42.lib tcl84.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_tcl42.dll"
!ELSEIF "$(CFG)" == "db_tcl - Win32 Debug"
@@ -68,10 +69,10 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_TCL_SUPPORT" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_TCL_SUPPORT" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
@@ -79,7 +80,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib tcl83d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl32d.dll" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib tcl84g.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl42d.dll" /fixed:no
!ENDIF
@@ -129,7 +130,15 @@ SOURCE=..\tcl\tcl_mp.c
# End Source File
# Begin Source File
+SOURCE=..\tcl\tcl_rep.c
+# End Source File
+# Begin Source File
+
SOURCE=..\tcl\tcl_txn.c
# End Source File
+# Begin Source File
+
+SOURCE=..\tcl\tcl_util.c
+# End Source File
# End Target
# End Project
diff --git a/db/build_win32/db_test.dsp b/db/build_win32/db_test.dsp
index 25c01c8e3..4bb5cb919 100644
--- a/db/build_win32/db_test.dsp
+++ b/db/build_win32/db_test.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_test" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -22,6 +22,7 @@ CFG=db_test - Win32 Debug
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -41,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -49,9 +50,9 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386
# Begin Special Build Tool
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
PostBuild_Desc=Copy built executable files.
PostBuild_Cmds=copy Release\*.exe .
# End Special Build Tool
@@ -60,8 +61,8 @@ PostBuild_Cmds=copy Release\*.exe .
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "db_recov"
-# PROP BASE Intermediate_Dir "db_recov"
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
@@ -70,7 +71,7 @@ PostBuild_Cmds=copy Release\*.exe .
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -78,9 +79,9 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"Debug/dbkill.exe" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"Debug/dbkill.exe" /fixed:no
# Begin Special Build Tool
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
PostBuild_Desc=Copy built executable files.
PostBuild_Cmds=copy Debug\*.exe .
# End Special Build Tool
diff --git a/db/build_win32/db_test.src b/db/build_win32/db_test.src
index 23760dbf2..360c19dc2 100644
--- a/db/build_win32/db_test.src
+++ b/db/build_win32/db_test.src
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -22,6 +22,7 @@ CFG=@project_name@ - Win32 Debug
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -41,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -51,7 +52,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib /nologo /subsystem:console /machine:I386
# Begin Special Build Tool
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
PostBuild_Desc=Copy built executable files.
PostBuild_Cmds=copy Release\*.exe .
# End Special Build Tool
@@ -60,8 +61,8 @@ PostBuild_Cmds=copy Release\*.exe .
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "db_recov"
-# PROP BASE Intermediate_Dir "db_recov"
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
@@ -70,7 +71,7 @@ PostBuild_Cmds=copy Release\*.exe .
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -80,7 +81,7 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"Debug/dbkill.exe" /fixed:no
# Begin Special Build Tool
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
PostBuild_Desc=Copy built executable files.
PostBuild_Cmds=copy Debug\*.exe .
# End Special Build Tool
diff --git a/db/build_win32/db_upgrade.dsp b/db/build_win32/db_upgrade.dsp
index 87937e9c0..2cc9b8862 100644
--- a/db/build_win32/db_upgrade.dsp
+++ b/db/build_win32/db_upgrade.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_upgrade" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_upgrade - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_upgrade - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_upgrade - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_upgrade - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_upgrade - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_upgrade - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_upgrade - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_upgrade - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_upgrade - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/db_verify.dsp b/db/build_win32/db_verify.dsp
index 70620bfe9..ad2669c8f 100644
--- a/db/build_win32/db_verify.dsp
+++ b/db/build_win32/db_verify.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="db_verify" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=db_verify - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "db_verify - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_verify - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_verify - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "db_verify - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "db_verify - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "db_verify - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "db_verify - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "db_verify - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "db_verify - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/dbkill.cpp b/db/build_win32/dbkill.cpp
index 24709f372..91dab52db 100644
--- a/db/build_win32/dbkill.cpp
+++ b/db/build_win32/dbkill.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: dbkill.cpp,v 11.4 2000/05/02 17:08:31 dda Exp $
+ * $Id: dbkill.cpp,v 11.8 2003/01/08 04:05:42 bostic Exp $
*/
/*
* Kill -
@@ -74,7 +74,7 @@ usage_exit()
{
fprintf(stderr, "Usage: kill [ -sig ] pid\n");
fprintf(stderr, " for win32, sig must be or 0, 15 (TERM)\n");
- exit(1);
+ exit(EXIT_FAILURE);
}
int
@@ -117,15 +117,15 @@ main(int argc, char **argv)
hProcess = OpenProcess(accessflag, FALSE, pid);
if (hProcess == NULL) {
fprintf(stderr, "dbkill: %s: no such process\n", argv[1]);
- exit(1);
+ exit(EXIT_FAILURE);
}
if (sig == 0)
- exit(0);
+ exit(EXIT_SUCCESS);
if (!TerminateProcess(hProcess, 99)) {
DWORD err = GetLastError();
fprintf(stderr,
"dbkill: cannot kill process: error %d (0x%lx)\n", err, err);
- exit(1);
+ exit(EXIT_FAILURE);
}
- return 0;
+ return EXIT_SUCCESS;
}
diff --git a/db/build_win32/dllmain.c b/db/build_win32/dllmain.c
deleted file mode 100644
index 70c2e849d..000000000
--- a/db/build_win32/dllmain.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * --------------------------------------------------------------------------
- * Copyright (C) 1997 Netscape Communications Corporation
- * --------------------------------------------------------------------------
- *
- * dllmain.c
- *
- * $Id: dllmain.c,v 1.3 2000/10/26 21:58:48 bostic Exp $
- */
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-static int ProcessesAttached = 0;
-static HINSTANCE Instance; /* Global library instance handle. */
-
-/*
- * The following declaration is for the VC++ DLL entry point.
- */
-
-BOOL APIENTRY DllMain (HINSTANCE hInst,
- DWORD reason, LPVOID reserved);
-
-/*
- *----------------------------------------------------------------------
- *
- * DllEntryPoint --
- *
- * This wrapper function is used by Borland to invoke the
- * initialization code for Tcl. It simply calls the DllMain
- * routine.
- *
- * Results:
- * See DllMain.
- *
- * Side effects:
- * See DllMain.
- *
- *----------------------------------------------------------------------
- */
-
-BOOL APIENTRY
-DllEntryPoint(hInst, reason, reserved)
- HINSTANCE hInst; /* Library instance handle. */
- DWORD reason; /* Reason this function is being called. */
- LPVOID reserved; /* Not used. */
-{
- return DllMain(hInst, reason, reserved);
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * DllMain --
- *
- * This routine is called by the VC++ C run time library init
- * code, or the DllEntryPoint routine. It is responsible for
- * initializing various dynamically loaded libraries.
- *
- * Results:
- * TRUE on sucess, FALSE on failure.
- *
- * Side effects:
- * Establishes 32-to-16 bit thunk and initializes sockets library.
- *
- *----------------------------------------------------------------------
- */
-BOOL APIENTRY
-DllMain(hInst, reason, reserved)
- HINSTANCE hInst; /* Library instance handle. */
- DWORD reason; /* Reason this function is being called. */
- LPVOID reserved; /* Not used. */
-{
- switch (reason) {
- case DLL_PROCESS_ATTACH:
-
- /*
- * Registration of UT need to be done only once for first
- * attaching process. At that time set the tclWin32s flag
- * to indicate if the DLL is executing under Win32s or not.
- */
-
- if (ProcessesAttached++) {
- return FALSE; /* Not the first initialization. */
- }
-
- Instance = hInst;
- return TRUE;
-
- case DLL_PROCESS_DETACH:
-
- ProcessesAttached--;
- break;
- }
-
- return TRUE;
-}
diff --git a/db/build_win32/dynamic_dsp.src b/db/build_win32/dynamic_dsp.src
index 3f39047cd..ff4b431d5 100644
--- a/db/build_win32/dynamic_dsp.src
+++ b/db/build_win32/dynamic_dsp.src
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -13,19 +13,16 @@ CFG=@project_name@ - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "@project_name@.mak" CFG="@project_name@ - Win32 Debug Static"
+!MESSAGE NMAKE /f "@project_name@.mak" CFG="@project_name@ - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "@project_name@ - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "@project_name@ - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "@project_name@ - Win32 Release Static" (based on\
- "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "@project_name@ - Win32 Debug Static" (based on\
- "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -46,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -72,74 +69,18 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
-
-!ELSEIF "$(CFG)" == "@project_name@ - Win32 Release Static"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_DLL__"
-# PROP BASE Intermediate_Dir "DB_DLL__"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_CREATE_DLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
-
-!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug Static"
-
-# PROP BASE Use_MFC 2
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_DLL_0"
-# PROP BASE Intermediate_Dir "DB_DLL_0"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
-# SUBTRACT BASE CPP /Fr
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_CREATE_DLL" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /YX"config.h" /FD /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
-# ADD LINK32 /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
!ENDIF
@@ -147,8 +88,6 @@ LINK32=link.exe
# Name "@project_name@ - Win32 Release"
# Name "@project_name@ - Win32 Debug"
-# Name "@project_name@ - Win32 Release Static"
-# Name "@project_name@ - Win32 Debug Static"
@SOURCE_FILES@
# End Target
# End Project
diff --git a/db/build_win32/ex_access.dsp b/db/build_win32/ex_access.dsp
index d15253908..e845c704b 100644
--- a/db/build_win32/ex_access.dsp
+++ b/db/build_win32/ex_access.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_access" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_access - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_access - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_access - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_access - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_access - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_access - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_access - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_access - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_access - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_access - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/ex_btrec.dsp b/db/build_win32/ex_btrec.dsp
index 6ba99a59b..227df9a28 100644
--- a/db/build_win32/ex_btrec.dsp
+++ b/db/build_win32/ex_btrec.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_btrec" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_btrec - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_btrec - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_btrec - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_btrec - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_btrec - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_btrec - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_btrec - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_btrec - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_btrec - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/ex_env.dsp b/db/build_win32/ex_env.dsp
index a2df7aa4a..d6ba8071e 100644
--- a/db/build_win32/ex_env.dsp
+++ b/db/build_win32/ex_env.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_env" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_env - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_env - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_env - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_env - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_env - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_env - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_env - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_env - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_env - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_env - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/ex_lock.dsp b/db/build_win32/ex_lock.dsp
index 26485add5..25ddb8732 100644
--- a/db/build_win32/ex_lock.dsp
+++ b/db/build_win32/ex_lock.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_lock" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_lock - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_lock - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_lock - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_lock - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_lock - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_lock - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_lock - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_lock - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_lock - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/ex_mpool.dsp b/db/build_win32/ex_mpool.dsp
index 6f8345711..b1e3b0e05 100644
--- a/db/build_win32/ex_mpool.dsp
+++ b/db/build_win32/ex_mpool.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_mpool" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_mpool - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_mpool - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_mpool - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_mpool - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_mpool - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_mpool - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_mpool - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_mpool - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_mpool - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/ex_repquote.dsp b/db/build_win32/ex_repquote.dsp
new file mode 100644
index 000000000..966aff955
--- /dev/null
+++ b/db/build_win32/ex_repquote.dsp
@@ -0,0 +1,164 @@
+# Microsoft Developer Studio Project File - Name="ex_repquote" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ex_repquote - Win32 Debug Static
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ex_repquote.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ex_repquote.mak" CFG="ex_repquote - Win32 Debug Static"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ex_repquote - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_repquote - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_repquote - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_repquote - Win32 Debug Static" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "ex_repquote - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release/libdb42.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+
+!ELSEIF "$(CFG)" == "ex_repquote - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 Debug/libdb42d.lib ws2_32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+
+!ELSEIF "$(CFG)" == "ex_repquote - Win32 Release Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_static"
+# PROP Intermediate_Dir "Release_static"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 Release_static/libdb42.lib ws2_32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib ws2_32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "ex_repquote - Win32 Debug Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_static"
+# PROP Intermediate_Dir "Debug_static"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 Debug_static/libdb42d.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+
+!ENDIF
+
+# Begin Target
+
+# Name "ex_repquote - Win32 Release"
+# Name "ex_repquote - Win32 Debug"
+# Name "ex_repquote - Win32 Release Static"
+# Name "ex_repquote - Win32 Debug Static"
+# Begin Source File
+
+SOURCE=..\examples_c\ex_repquote\ex_rq_client.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_repquote\ex_rq_main.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_repquote\ex_rq_master.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_repquote\ex_rq_net.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\examples_c\ex_repquote\ex_rq_util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_win32/ex_repquote.src b/db/build_win32/ex_repquote.src
new file mode 100644
index 000000000..dfcdd4d04
--- /dev/null
+++ b/db/build_win32/ex_repquote.src
@@ -0,0 +1,145 @@
+# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=@project_name@ - Win32 Debug Static
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "@project_name@.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "@project_name@.mak" CFG="@project_name@ - Win32 Debug Static"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "@project_name@ - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "@project_name@ - Win32 Debug Static" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "@project_name@ - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib ws2_32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib ws2_32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Release Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_static"
+# PROP Intermediate_Dir "Release_static"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 Release_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib ws2_32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib ws2_32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_static"
+# PROP Intermediate_Dir "Debug_static"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 Debug_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+
+!ENDIF
+
+# Begin Target
+
+# Name "@project_name@ - Win32 Release"
+# Name "@project_name@ - Win32 Debug"
+# Name "@project_name@ - Win32 Release Static"
+# Name "@project_name@ - Win32 Debug Static"
+@SOURCE_FILES@
+# Begin Source File
+
+SOURCE=..\clib\getopt.c
+# End Source File
+# End Target
+# End Project
diff --git a/db/build_win32/ex_tpcb.dsp b/db/build_win32/ex_tpcb.dsp
index e39c13304..cab6a401f 100644
--- a/db/build_win32/ex_tpcb.dsp
+++ b/db/build_win32/ex_tpcb.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="ex_tpcb" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=ex_tpcb - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "ex_tpcb - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_tpcb - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_tpcb - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "ex_tpcb - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "ex_tpcb - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "ex_tpcb - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "ex_tpcb - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ex_tpcb - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_access.dsp b/db/build_win32/excxx_access.dsp
index 4c09c41c5..798e0636e 100644
--- a/db/build_win32/excxx_access.dsp
+++ b/db/build_win32/excxx_access.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_access" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_access - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_access - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_access - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_access - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_access - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_access - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_access - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_access - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_access - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_btrec.dsp b/db/build_win32/excxx_btrec.dsp
index 75809bd3d..f17546350 100644
--- a/db/build_win32/excxx_btrec.dsp
+++ b/db/build_win32/excxx_btrec.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_btrec" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_btrec - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_btrec - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_btrec - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_btrec - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_btrec - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_btrec - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_btrec - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_btrec - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_btrec - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_env.dsp b/db/build_win32/excxx_env.dsp
index 57e3da4d4..68d091b5f 100644
--- a/db/build_win32/excxx_env.dsp
+++ b/db/build_win32/excxx_env.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_env" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_env - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_env - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_env - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_env - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_env - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_env - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_env - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_env - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_env - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_lock.dsp b/db/build_win32/excxx_lock.dsp
index 95ad8d182..582750233 100644
--- a/db/build_win32/excxx_lock.dsp
+++ b/db/build_win32/excxx_lock.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_lock" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_lock - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_lock - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_lock - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_lock - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_lock - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_lock - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_lock - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_lock - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_lock - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_mpool.dsp b/db/build_win32/excxx_mpool.dsp
index 31b4cba4c..fdf59b924 100644
--- a/db/build_win32/excxx_mpool.dsp
+++ b/db/build_win32/excxx_mpool.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_mpool" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_mpool - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_mpool - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_mpool - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_mpool - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_mpool - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_mpool - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_mpool - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_mpool - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_mpool - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/excxx_tpcb.dsp b/db/build_win32/excxx_tpcb.dsp
index f9cddf414..c18336efc 100644
--- a/db/build_win32/excxx_tpcb.dsp
+++ b/db/build_win32/excxx_tpcb.dsp
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="excxx_tpcb" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@@ -17,17 +17,14 @@ CFG=excxx_tpcb - Win32 Debug Static
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "excxx_tpcb - Win32 Release" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_tpcb - Win32 Debug" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_tpcb - Win32 Release Static" (based on\
- "Win32 (x86) Console Application")
-!MESSAGE "excxx_tpcb - Win32 Debug Static" (based on\
- "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - Win32 Release Static" (based on "Win32 (x86) Console Application")
+!MESSAGE "excxx_tpcb - Win32 Debug Static" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -47,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -55,7 +52,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
+# ADD LINK32 Release/libdb42.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcmt"
!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 Debug"
@@ -71,7 +68,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -79,7 +76,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
+# ADD LINK32 Debug/libdb42d.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /nodefaultlib:"libcmtd" /fixed:no
!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 Release Static"
@@ -95,16 +92,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Release_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Release_static/libdb32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 Release_static/libdb32s.lib /nologo /subsystem:console /machine:I386
+# ADD BASE LINK32 Release_static/libdb42.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Release_static/libdb42s.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "excxx_tpcb - Win32 Debug Static"
@@ -120,16 +117,16 @@ LINK32=link.exe
# PROP Intermediate_Dir "Debug_static"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 Debug_static/libdb32d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
-# ADD LINK32 Debug_static/libdb32sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD BASE LINK32 Debug_static/libdb42d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
+# ADD LINK32 Debug_static/libdb42sd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /fixed:no
!ENDIF
diff --git a/db/build_win32/include.tcl b/db/build_win32/include.tcl
index 4f1234130..ce9067706 100644
--- a/db/build_win32/include.tcl
+++ b/db/build_win32/include.tcl
@@ -1,16 +1,19 @@
+# Automatically built by dist/s_test; may require local editing.
+
set tclsh_path SET_YOUR_TCLSH_PATH
-set test_path ../test
-set tcllib ./Debug/libdb_tcl32d.dll
+set tcllib ./Debug/libdb_tcl42d.dll
-set KILL ./dbkill.exe
+set src_root ..
+set test_path ../test
-# DO NOT EDIT BELOW THIS LINE: automatically built by dist/s_tcl.
+global testdir
+set testdir ./TESTDIR
global dict
-global testdir
global util_path
-set testdir ./TESTDIR
global is_hp_test
global is_qnx_test
global is_windows_test
+
+set KILL ./dbkill.exe
diff --git a/db/build_win32/java_dsp.src b/db/build_win32/java_dsp.src
index 8c4de7602..e444d30ef 100644
--- a/db/build_win32/java_dsp.src
+++ b/db/build_win32/java_dsp.src
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -17,12 +17,12 @@ CFG=@project_name@ - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "@project_name@ - Win32 Release" (based on\
- "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "@project_name@ - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "@project_name@ - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -43,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -53,25 +53,22 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 Release/libdb32.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
+# ADD LINK32 Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
# Begin Custom Build - Compiling java files using javac
ProjDir=.
InputPath=.\Release\libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
"force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd $(ProjDir)\..\java\src\com\sleepycat\db
- mkdir ..\..\..\..\classes
echo compiling Berkeley DB classes
- javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
+ mkdir "$(OUTDIR)\classes"
+ javac -g -d "$(OUTDIR)\classes" -classpath "$(OUTDIR)/classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\$(OUTDIR)\*.java ..\java\src\com\sleepycat\bdb\bind\*.java ..\java\src\com\sleepycat\bdb\bind\serial\*.java ..\java\src\com\sleepycat\bdb\bind\tuple\*.java ..\java\src\com\sleepycat\bdb\*.java ..\java\src\com\sleepycat\bdb\collection\*.java ..\java\src\com\sleepycat\bdb\factory\*.java ..\java\src\com\sleepycat\bdb\util\*.java
echo compiling examples
- cd ..\examples
- javac -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
- echo creating jar file
- cd ..\..\..\..\classes
- jar cf db.jar com\sleepycat\db\*.class
+ mkdir "$(OUTDIR)\classes.ex"
+ javac -g -d "$(OUTDIR)\classes.ex" -classpath "$(OUTDIR)\classes;$(OUTDIR)\classes.ex" ..\examples_java\src\com\sleepycat\examples\db\*.java ..\examples_java\src\com\sleepycat\examples\bdb\access\*.java ..\examples_java\src\com\sleepycat\examples\bdb\helloworld\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\basic\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\entity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\tuple\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\sentity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\marshal\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)\db.jar" -C "$(OUTDIR)\classes" .
+ jar cf "$(OUTDIR)\dbexamples.jar" -C "$(OUTDIR)\classes.ex" .
echo Java build finished
# End Custom Build
@@ -90,10 +87,10 @@ SOURCE=$(InputPath)
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
@@ -101,27 +98,24 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
# Begin Custom Build - Compiling java files using javac
ProjDir=.
InputPath=.\Debug\libdb_java@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll
-SOURCE=$(InputPath)
+SOURCE="$(InputPath)"
"force_compilation.txt" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
- cd $(ProjDir)\..\java\src\com\sleepycat\db
- mkdir ..\..\..\..\classes
echo compiling Berkeley DB classes
- javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
+ mkdir "$(OUTDIR)\classes"
+ javac -g -d "$(OUTDIR)\classes" -classpath "$(OUTDIR)/classes" ..\java\src\com\sleepycat\db\*.java ..\java\src\com\sleepycat\db\$(OUTDIR)\*.java ..\java\src\com\sleepycat\bdb\bind\*.java ..\java\src\com\sleepycat\bdb\bind\serial\*.java ..\java\src\com\sleepycat\bdb\bind\tuple\*.java ..\java\src\com\sleepycat\bdb\*.java ..\java\src\com\sleepycat\bdb\collection\*.java ..\java\src\com\sleepycat\bdb\factory\*.java ..\java\src\com\sleepycat\bdb\util\*.java
echo compiling examples
- javac -g -d ../../../../classes -classpath "$(CLASSPATH);../../../../classes"\
- *.java
- cd ..\examples
- echo creating jar file
- cd ..\..\..\..\classes
- jar cf db.jar com\sleepycat\db\*.class
+ mkdir "$(OUTDIR)\classes.ex"
+ javac -g -d "$(OUTDIR)\classes.ex" -classpath "$(OUTDIR)\classes;$(OUTDIR)\classes.ex" ..\examples_java\src\com\sleepycat\examples\db\*.java ..\examples_java\src\com\sleepycat\examples\bdb\access\*.java ..\examples_java\src\com\sleepycat\examples\bdb\helloworld\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\basic\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\entity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\tuple\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\sentity\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\marshal\*.java ..\examples_java\src\com\sleepycat\examples\bdb\shipment\factory\*.java
+ echo creating jar files
+ jar cf "$(OUTDIR)\db.jar" -C "$(OUTDIR)\classes" .
+ jar cf "$(OUTDIR)\dbexamples.jar" -C "$(OUTDIR)\classes.ex" .
echo Java build finished
-
+
# End Custom Build
!ENDIF
diff --git a/db/build_win32/libdb.def b/db/build_win32/libdb.def
index bb23f59fc..31b049306 100644
--- a/db/build_win32/libdb.def
+++ b/db/build_win32/libdb.def
@@ -1,151 +1,127 @@
-; $Id: libdb.def,v 11.21 2001/01/04 15:07:33 dda Exp $
-
-DESCRIPTION 'Berkeley DB 3.2 Library'
-EXPORTS
- lock_get @1
- lock_id @2
- lock_put @3
- lock_vec @4
- log_compare @5
- log_file @6
- log_flush @7
- log_get @8
- log_put @9
- log_register @10
- log_unregister @11
- memp_fclose @12
- memp_fget @13
- memp_fopen @14
- memp_fput @15
- memp_fset @16
- memp_fsync @17
- memp_register @18
- memp_sync @19
- txn_abort @20
- txn_begin @21
- txn_checkpoint @22
- txn_commit @23
- txn_prepare @24
- db_version @25
- memp_stat @26
- log_archive @27
- lock_detect @28
- txn_id @29
- txn_stat @30
- memp_trickle @31
- log_stat @32
- lock_stat @33
- db_create @34
- db_env_create @35
- db_strerror @36
- db_xa_switch @37
- db_env_set_func_close @38
- db_env_set_func_dirfree @39
- db_env_set_func_dirlist @40
- db_env_set_func_exists @41
- db_env_set_func_free @42
- db_env_set_func_fsync @43
- db_env_set_func_ioinfo @44
- db_env_set_func_malloc @45
- db_env_set_func_map @46
- db_env_set_func_open @47
- db_env_set_func_read @48
- db_env_set_func_realloc @49
- db_env_set_func_rename @50
- db_env_set_func_sleep @51
- db_env_set_func_unlink @52
- db_env_set_func_unmap @53
- db_env_set_func_write @54
- db_env_set_func_yield @55
-; FREE @56
- db_env_set_pageyield @57
- db_env_set_panicstate @58
- db_env_set_region_init @59
- db_env_set_tas_spins @60
-; these are only for testing
- __db_loadme @201
- __ham_func2 @202
- __ham_func3 @203
- __ham_func4 @204
- __ham_func5 @205
- __db_hcreate @206
- __db_hsearch @207
- __db_hdestroy @208
- __db_dbm_init @209
- __db_dbm_delete @210
- __db_dbm_fetch @211
- __db_dbm_store @212
- __db_dbm_firstkey @213
- __db_dbm_nextkey @214
- __db_dbm_close @215
- __db_ndbm_open @216
- __db_ndbm_store @217
- __db_ndbm_rdonly @218
- __db_ndbm_pagfno @219
- __db_ndbm_nextkey @220
- __db_ndbm_firstkey @221
- __db_ndbm_fetch @222
- __db_ndbm_error @223
- __db_ndbm_dirfno @224
- __db_ndbm_delete @225
- __db_ndbm_close @226
- __db_ndbm_clearerr @227
- __lock_dump_region @228
- __memp_dump_region @229
- __os_closehandle @230
- __os_openhandle @231
- __os_strdup @232
- __db_r_attach @233
- __db_r_detach @234
- __db_tas_mutex_init @235
- __db_tas_mutex_lock @236
- __db_tas_mutex_unlock @237
- __os_read @238
- __os_write @239
- __os_open @240
- __os_ioinfo @241
- __os_free @242
- __os_malloc @243
- __os_freestr @244
- __os_calloc @245
- __ham_test @246
-; these are needed for linking tools
- __db_dump @401
- __db_rpath @402
- __db_dispatch @403
- __db_err @404
- __db_init_print @405
- __txn_init_print @406
- __log_init_print @407
- __ham_init_print @408
- __bam_init_print @409
- __db_jump @410
- __ham_pgin @411
- __ham_pgout @412
- __bam_pgin @413
- __bam_pgout @414
- __db_omode @415
- __db_prdbt @416
- __os_sleep @417
- __db_e_stat @420
- __db_getlong @421
- __os_get_errno @422
- __os_set_errno @423
- __ham_get_meta @424
- __ham_release_meta @425
- __qam_init_print @426
- __crdel_init_print @427
- __qam_pgin_out @428
- __db_pgin @429
- __db_pgout @430
- __db_getulong @431
- __db_util_sigresend @432
- __db_util_siginit @433
- __db_util_interrupted @434
- __db_util_logset @435
- __db_prheader @436
- __db_prfooter @437
- __db_verify_callback @438
- __db_verify_internal @439
- __os_yield @440
- __db_global_values @441
+; DO NOT EDIT: automatically built by dist/s_win32.
+
+DESCRIPTION 'Berkeley DB 4.2 Library'
+
+EXPORTS
+ db_create @1
+ db_env_create @2
+ db_strerror @3
+ db_version @4
+ db_xa_switch @5
+ log_compare @6
+ db_env_set_func_close @7
+ db_env_set_func_dirfree @8
+ db_env_set_func_dirlist @9
+ db_env_set_func_exists @10
+ db_env_set_func_free @11
+ db_env_set_func_fsync @12
+ db_env_set_func_ioinfo @13
+ db_env_set_func_malloc @14
+ db_env_set_func_map @15
+ db_env_set_func_open @16
+ db_env_set_func_read @17
+ db_env_set_func_realloc @18
+ db_env_set_func_rename @19
+ db_env_set_func_seek @20
+ db_env_set_func_sleep @21
+ db_env_set_func_unlink @22
+ db_env_set_func_unmap @23
+ db_env_set_func_write @24
+ db_env_set_func_yield @25
+ __db_add_recovery @26
+ __db_dbm_close @27
+ __db_dbm_delete @28
+ __db_dbm_fetch @29
+ __db_dbm_firstkey @30
+ __db_dbm_init @31
+ __db_dbm_nextkey @32
+ __db_dbm_store @33
+ __db_hcreate @34
+ __db_hdestroy @35
+ __db_hsearch @36
+ __db_loadme @37
+ __db_ndbm_clearerr @38
+ __db_ndbm_close @39
+ __db_ndbm_delete @40
+ __db_ndbm_dirfno @41
+ __db_ndbm_error @42
+ __db_ndbm_fetch @43
+ __db_ndbm_firstkey @44
+ __db_ndbm_nextkey @45
+ __db_ndbm_open @46
+ __db_ndbm_pagfno @47
+ __db_ndbm_rdonly @48
+ __db_ndbm_store @49
+ __db_panic @50
+ __db_r_attach @51
+ __db_r_detach @52
+ __db_win32_mutex_init @53
+ __db_win32_mutex_lock @54
+ __db_win32_mutex_unlock @55
+ __ham_func2 @56
+ __ham_func3 @57
+ __ham_func4 @58
+ __ham_func5 @59
+ __ham_test @60
+ __lock_dump_region @61
+ __lock_id_set @62
+ __memp_dump_region @63
+ __os_calloc @64
+ __os_closehandle @65
+ __os_free @66
+ __os_ioinfo @67
+ __os_malloc @68
+ __os_open @69
+ __os_openhandle @70
+ __os_read @71
+ __os_realloc @72
+ __os_strdup @73
+ __os_umalloc @74
+ __os_write @75
+ __txn_id_set @76
+ __bam_init_print @77
+ __bam_pgin @78
+ __bam_pgout @79
+ __crdel_init_print @80
+ __db_dispatch @81
+ __db_dump @82
+ __db_e_stat @83
+ __db_err @84
+ __db_getlong @85
+ __db_getulong @86
+ __db_global_values @87
+ __db_init_print @88
+ __db_inmemdbflags @89
+ __db_isbigendian @90
+ __db_omode @91
+ __db_overwrite @92
+ __db_pgin @93
+ __db_pgout @94
+ __db_pr_callback @95
+ __db_prdbt @96
+ __db_prfooter @97
+ __db_prheader @98
+ __db_rpath @99
+ __db_util_cache @100
+ __db_util_interrupted @101
+ __db_util_logset @102
+ __db_util_siginit @103
+ __db_util_sigresend @104
+ __db_verify_internal @105
+ __dbreg_init_print @106
+ __fop_init_print @107
+ __ham_get_meta @108
+ __ham_init_print @109
+ __ham_pgin @110
+ __ham_pgout @111
+ __ham_release_meta @112
+ __os_clock @113
+ __os_get_errno @114
+ __os_id @115
+ __os_set_errno @116
+ __os_sleep @117
+ __os_ufree @118
+ __os_yield @119
+ __qam_init_print @120
+ __qam_pgin_out @121
+ __txn_init_print @122
diff --git a/db/build_win32/libdb.rc b/db/build_win32/libdb.rc
index 2261d69ce..b17dd7a4f 100644
--- a/db/build_win32/libdb.rc
+++ b/db/build_win32/libdb.rc
@@ -1,6 +1,6 @@
1 VERSIONINFO
- FILEVERSION 3,0,2,9
- PRODUCTVERSION 3,0,2,9
+ FILEVERSION 4,0,2,52
+ PRODUCTVERSION 4,0,2,52
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -18,12 +18,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Sleepycat Software\0"
VALUE "FileDescription", "Berkeley DB 3.0 DLL\0"
- VALUE "FileVersion", "3.2.9\0"
+ VALUE "FileVersion", "4.2.52\0"
VALUE "InternalName", "libdb.dll\0"
- VALUE "LegalCopyright", "Copyright © Sleepycat Software Inc. 1997, 1998, 1999, 2000\0"
+ VALUE "LegalCopyright", "Copyright © Sleepycat Software Inc. 1997-2003\0"
VALUE "OriginalFilename", "libdb.dll\0"
VALUE "ProductName", "Sleepycat Software libdb\0"
- VALUE "ProductVersion", "3.2.9\0"
+ VALUE "ProductVersion", "4.2.52\0"
END
END
BLOCK "VarFileInfo"
diff --git a/db/build_win32/libdb_tcl.def b/db/build_win32/libdb_tcl.def
index 1496ddbff..5e8386a35 100644
--- a/db/build_win32/libdb_tcl.def
+++ b/db/build_win32/libdb_tcl.def
@@ -1,6 +1,7 @@
-; Id: libdb_tcl.def,v 11.5 2002/04/03 12:01:27 mjc Exp
+; $Id: libdb_tcl.def,v 11.7 2002/10/14 23:44:20 mjc Exp $
DESCRIPTION 'Berkeley DB TCL interface Library'
EXPORTS
Db_tcl_Init
_NameToPtr
+
diff --git a/db/build_win32/libdbrc.src b/db/build_win32/libdbrc.src
index 82a93068c..3d5df36ef 100644
--- a/db/build_win32/libdbrc.src
+++ b/db/build_win32/libdbrc.src
@@ -20,7 +20,7 @@ BEGIN
VALUE "FileDescription", "Berkeley DB 3.0 DLL\0"
VALUE "FileVersion", "%MAJOR%.%MINOR%.%PATCH%\0"
VALUE "InternalName", "libdb.dll\0"
- VALUE "LegalCopyright", "Copyright © Sleepycat Software Inc. 1997, 1998, 1999, 2000\0"
+ VALUE "LegalCopyright", "Copyright © Sleepycat Software Inc. 1997-2003\0"
VALUE "OriginalFilename", "libdb.dll\0"
VALUE "ProductName", "Sleepycat Software libdb\0"
VALUE "ProductVersion", "%MAJOR%.%MINOR%.%PATCH%\0"
diff --git a/db/build_win32/small_dsp.src b/db/build_win32/small_dsp.src
new file mode 100644
index 000000000..1b42e8c71
--- /dev/null
+++ b/db/build_win32/small_dsp.src
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=@project_name@ - Win32 Debug Static
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "@project_name@.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "@project_name@.mak" CFG="@project_name@ - Win32 Debug Static"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "@project_name@ - Win32 Release Static" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - Win32 Debug Static" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "@project_name@ - Win32 Release Static"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_small"
+# PROP BASE Intermediate_Dir "Release_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_small"
+# PROP Intermediate_Dir "Release_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"Release_small/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+# ADD LIB32 /nologo /out:"Release_small/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
+
+!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug Static"
+
+# PROP BASE Use_MFC 1
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_small"
+# PROP BASE Intermediate_Dir "Debug_small"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 1
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_small"
+# PROP Intermediate_Dir "Debug_small"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "HAVE_SMALLBUILD" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"Debug_small/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+# ADD LIB32 /nologo /out:"Debug_small/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "@project_name@ - Win32 Release Static"
+# Name "@project_name@ - Win32 Debug Static"
+@SOURCE_FILES@
+# End Target
+# End Project
diff --git a/db/build_win32/static_dsp.src b/db/build_win32/static_dsp.src
index fe0c3a012..a2746856c 100644
--- a/db/build_win32/static_dsp.src
+++ b/db/build_win32/static_dsp.src
@@ -1,10 +1,10 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=@project_name@ - Win32 Debug
+CFG=@project_name@ - Win32 Debug Static
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -17,75 +17,33 @@ CFG=@project_name@ - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "@project_name@ - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "@project_name@ - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "@project_name@ - Win32 Release Static" (based on\
- "Win32 (x86) Static Library")
-!MESSAGE "@project_name@ - Win32 Debug Static" (based on\
- "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - Win32 Release Static" (based on "Win32 (x86) Static Library")
+!MESSAGE "@project_name@ - Win32 Debug Static" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
+RSC=rc.exe
-!IF "$(CFG)" == "@project_name@ - Win32 Release"
+!IF "$(CFG)" == "@project_name@ - Win32 Release Static"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_Stati"
-# PROP BASE Intermediate_Dir "DB_Stati"
+# PROP BASE Output_Dir "Release_static"
+# PROP BASE Intermediate_Dir "Release_static"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_static"
# PROP Intermediate_Dir "Release_static"
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Release_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@s.lib"
-
-!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_Stat0"
-# PROP BASE Intermediate_Dir "DB_Stat0"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_static"
-# PROP Intermediate_Dir "Debug_static"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Debug_static/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@sd.lib"
-
-!ELSEIF "$(CFG)" == "@project_name@ - Win32 Release Static"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DB_Stati"
-# PROP BASE Intermediate_Dir "DB_Stati"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_static"
-# PROP Intermediate_Dir "Release_static"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I ".." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -95,18 +53,20 @@ LIB32=link.exe -lib
!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug Static"
-# PROP BASE Use_MFC 0
+# PROP BASE Use_MFC 1
# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DB_Stat0"
-# PROP BASE Intermediate_Dir "DB_Stat0"
+# PROP BASE Output_Dir "Debug_static"
+# PROP BASE Intermediate_Dir "Debug_static"
# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
+# PROP Use_MFC 1
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_static"
# PROP Intermediate_Dir "Debug_static"
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
-# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I "../include" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX"config.h" /FD /c
+# ADD CPP /nologo /MTd /W3 /GX /Z7 /Od /I "." /I ".." /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX"config.h" /FD /c
+# ADD BASE RSC /l 0xc09
+# ADD RSC /l 0xc09
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -118,8 +78,6 @@ LIB32=link.exe -lib
# Begin Target
-# Name "@project_name@ - Win32 Release"
-# Name "@project_name@ - Win32 Debug"
# Name "@project_name@ - Win32 Release Static"
# Name "@project_name@ - Win32 Debug Static"
@SOURCE_FILES@
diff --git a/db/build_win32/tcl_dsp.src b/db/build_win32/tcl_dsp.src
index 3b23b8c15..87ea99cbb 100644
--- a/db/build_win32/tcl_dsp.src
+++ b/db/build_win32/tcl_dsp.src
@@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="@project_name@" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@@ -22,6 +22,7 @@ CFG=@project_name@ - Win32 Debug
!MESSAGE
# Begin Project
+# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@@ -42,9 +43,9 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I "../include" /D "DB_TCL_SUPPORT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD CPP /nologo /MD /W3 /GX /O2 /Ob2 /I "." /I ".." /D "DB_TCL_SUPPORT" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -52,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 Release/libdb32.lib tcl83.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_tcl@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
+# ADD LINK32 Release/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.lib tcl84.lib /nologo /base:"0x13000000" /subsystem:windows /dll /machine:I386 /out:"Release/libdb_tcl@DB_VERSION_MAJOR@@DB_VERSION_MINOR@.dll"
!ELSEIF "$(CFG)" == "@project_name@ - Win32 Debug"
@@ -68,10 +69,10 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I "../include" /D "DB_TCL_SUPPORT" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
+# ADD CPP /nologo /MDd /W3 /GX /Z7 /Od /I "." /I ".." /D "DB_TCL_SUPPORT" /D "CONFIG_TEST" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "DB_CREATE_DLL" /D "_WINDLL" /D "_AFXDLL" /YX"config.h" /FD /c
# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
BSC32=bscmake.exe
@@ -79,7 +80,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Debug/libdb32d.lib tcl83d.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
+# ADD LINK32 Debug/libdb@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.lib tcl84g.lib /nologo /base:"0x13000000" /subsystem:windows /dll /pdb:none /debug /machine:I386 /out:"Debug/libdb_tcl@DB_VERSION_MAJOR@@DB_VERSION_MINOR@d.dll" /fixed:no
!ENDIF
diff --git a/db/build_win32/win_db.h b/db/build_win32/win_db.h
new file mode 100644
index 000000000..cdec9a6bb
--- /dev/null
+++ b/db/build_win32/win_db.h
@@ -0,0 +1,59 @@
+/*-
+ * $Id: win_db.h,v 1.51 2003/12/03 21:15:37 bostic Exp $
+ *
+ * The following provides the information necessary to build Berkeley
+ * DB on native Windows, and other Windows environments such as MinGW.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <direct.h>
+#include <fcntl.h>
+#include <io.h>
+#include <limits.h>
+#include <memory.h>
+#include <process.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <errno.h>
+
+/*
+ * To build Tcl interface libraries, the include path must be configured to
+ * use the directory containing <tcl.h>, usually the include directory in
+ * the Tcl distribution.
+ */
+#ifdef DB_TCL_SUPPORT
+#include <tcl.h>
+#endif
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/*
+ * All of the necessary includes have been included, ignore the #includes
+ * in the Berkeley DB source files.
+ */
+#define NO_SYSTEM_INCLUDES
+
+/*
+ * Win32 has getcwd, snprintf and vsnprintf, but under different names.
+ */
+#define getcwd(buf, size) _getcwd(buf, size)
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+
+/*
+ * Win32 does not define getopt and friends in any header file, so we must.
+ */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+extern int optind;
+extern char *optarg;
+extern int getopt(int, char * const *, const char *);
+#if defined(__cplusplus)
+}
+#endif
diff --git a/db/clib/getcwd.c b/db/clib/getcwd.c
index 630facb4f..10485f176 100644
--- a/db/clib/getcwd.c
+++ b/db/clib/getcwd.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: getcwd.c,v 11.7 2000/11/30 00:58:30 ubell Exp $";
+static const char revid[] = "$Id: getcwd.c,v 11.14 2003/01/08 04:06:37 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -120,7 +120,7 @@ getcwd(pt, size)
ept = pt + size;
} else {
if ((ret =
- __os_malloc(NULL, ptsize = 1024 - 4, NULL, &pt)) != 0) {
+ __os_malloc(NULL, ptsize = 1024 - 4, &pt)) != 0) {
__os_set_errno(ret);
return (NULL);
}
@@ -134,7 +134,7 @@ getcwd(pt, size)
* Should always be enough (it's 340 levels). If it's not, allocate
* as necessary. Special case the first stat, it's ".", not "..".
*/
- if ((ret = __os_malloc(NULL, upsize = 1024 - 4, NULL, &up)) != 0)
+ if ((ret = __os_malloc(NULL, upsize = 1024 - 4, &up)) != 0)
goto err;
eup = up + 1024;
bup = up;
@@ -167,7 +167,7 @@ getcwd(pt, size)
* been that way and stuff would probably break.
*/
bcopy(bpt, pt, ept - bpt);
- __os_free(up, upsize);
+ __os_free(NULL, up);
return (pt);
}
@@ -177,7 +177,7 @@ getcwd(pt, size)
* possible component name, plus a trailing NULL.
*/
if (bup + 3 + MAXNAMLEN + 1 >= eup) {
- if (__os_realloc(NULL, upsize *= 2, NULL, &up) != 0)
+ if (__os_realloc(NULL, upsize *= 2, &up) != 0)
goto err;
bup = up;
eup = up + upsize;
@@ -238,7 +238,7 @@ getcwd(pt, size)
}
off = bpt - pt;
len = ept - bpt;
- if (__os_realloc(NULL, ptsize *= 2, NULL, &pt) != 0)
+ if (__os_realloc(NULL, ptsize *= 2, &pt) != 0)
goto err;
bpt = pt + off;
ept = pt + ptsize;
@@ -261,12 +261,12 @@ notfound:
* didn't find the current directory in its parent directory, set
* errno to ENOENT.
*/
- if (__os_get_errno() == 0)
+ if (__os_get_errno_ret_zero() == 0)
__os_set_errno(save_errno == 0 ? ENOENT : save_errno);
/* FALLTHROUGH */
err:
if (ptsize)
- __os_free(pt, ptsize);
- __os_free(up, upsize);
+ __os_free(NULL, pt);
+ __os_free(NULL, up);
return (NULL);
}
diff --git a/db/clib/getopt.c b/db/clib/getopt.c
index 667fca1d7..56f43afb3 100644
--- a/db/clib/getopt.c
+++ b/db/clib/getopt.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: getopt.c,v 11.4 2000/02/14 02:59:40 bostic Exp $";
+static const char revid[] = "$Id: getopt.c,v 11.8 2003/01/08 04:06:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -47,6 +47,8 @@ static const char revid[] = "$Id: getopt.c,v 11.4 2000/02/14 02:59:40 bostic Exp
#include "db_int.h"
+int __db_getopt_reset; /* global reset for VxWorks. */
+
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
@@ -78,6 +80,19 @@ getopt(nargc, nargv, ostr)
static char *place = EMSG; /* option letter processing */
char *oli; /* option letter list index */
+ /*
+ * VxWorks needs to be able to repeatedly call getopt from multiple
+ * programs within its global name space.
+ */
+ if (__db_getopt_reset) {
+ __db_getopt_reset = 0;
+
+ opterr = optind = 1;
+ optopt = optreset = 0;
+ optarg = NULL;
+ progname = NULL;
+ place = EMSG;
+ }
if (!progname) {
if ((progname = __db_rpath(*nargv)) == NULL)
progname = *nargv;
diff --git a/db/clib/memcmp.c b/db/clib/memcmp.c
index 2aedc3fa6..4143a5482 100644
--- a/db/clib/memcmp.c
+++ b/db/clib/memcmp.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: memcmp.c,v 11.5 2000/02/24 21:58:12 bostic Exp $";
+static const char revid[] = "$Id: memcmp.c,v 11.8 2003/01/08 04:06:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/clib/memmove.c b/db/clib/memmove.c
index da6bcfe8b..e92cbf494 100644
--- a/db/clib/memmove.c
+++ b/db/clib/memmove.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: memmove.c,v 11.4 2000/02/14 02:59:40 bostic Exp $";
+static const char revid[] = "$Id: memmove.c,v 11.7 2003/01/08 04:06:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/clib/raise.c b/db/clib/raise.c
index acec86cd6..27305549f 100644
--- a/db/clib/raise.c
+++ b/db/clib/raise.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: raise.c,v 11.3 2000/02/14 02:59:41 bostic Exp $";
+static const char revid[] = "$Id: raise.c,v 11.7 2003/01/08 04:06:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -28,5 +28,9 @@ int
raise(s)
int s;
{
+ /*
+ * Do not use __os_id(), as it may not return the process ID -- any
+ * system with kill(3) probably has getpid(3).
+ */
return (kill(getpid(), s));
}
diff --git a/db/clib/snprintf.c b/db/clib/snprintf.c
index 6aa9e3ae6..e41272dde 100644
--- a/db/clib/snprintf.c
+++ b/db/clib/snprintf.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: snprintf.c,v 11.5 2000/12/22 19:38:37 bostic Exp $";
+static const char revid[] = "$Id: snprintf.c,v 11.12 2003/05/02 16:10:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -29,7 +29,7 @@ static const char revid[] = "$Id: snprintf.c,v 11.5 2000/12/22 19:38:37 bostic E
*/
#ifndef HAVE_SNPRINTF
int
-#ifdef __STDC__
+#ifdef STDC_HEADERS
snprintf(char *str, size_t n, const char *fmt, ...)
#else
snprintf(str, n, fmt, va_alist)
@@ -39,23 +39,36 @@ snprintf(str, n, fmt, va_alist)
va_dcl
#endif
{
+ static int ret_charpnt = -1;
va_list ap;
- int rval;
+ int len;
COMPQUIET(n, 0);
-#ifdef __STDC__
+
+ /*
+ * Some old versions of sprintf return a pointer to the first argument
+ * instead of a character count. Assume the return value of snprintf,
+ * vsprintf, etc. will be the same as sprintf, and check the easy one.
+ *
+ * We do this test at run-time because it's not a test we can do in a
+ * cross-compilation environment.
+ */
+ if (ret_charpnt == -1) {
+ char buf[10];
+
+ ret_charpnt =
+ sprintf(buf, "123") != 3 ||
+ sprintf(buf, "123456789") != 9 ||
+ sprintf(buf, "1234") != 4;
+ }
+
+#ifdef STDC_HEADERS
va_start(ap, fmt);
#else
va_start(ap);
#endif
-#ifdef SPRINTF_RET_CHARPNT
- (void)vsprintf(str, fmt, ap);
+ len = vsprintf(str, fmt, ap);
va_end(ap);
- return (strlen(str));
-#else
- rval = vsprintf(str, fmt, ap);
- va_end(ap);
- return (rval);
-#endif
+ return (ret_charpnt ? (int)strlen(str) : len);
}
#endif
diff --git a/db/clib/strcasecmp.c b/db/clib/strcasecmp.c
index 6633197bc..d5ce6d76d 100644
--- a/db/clib/strcasecmp.c
+++ b/db/clib/strcasecmp.c
@@ -34,7 +34,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: strcasecmp.c,v 1.4 2000/03/24 22:31:31 bostic Exp $";
+static const char revid[] = "$Id: strcasecmp.c,v 1.7 2001/11/15 17:51:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -78,14 +78,16 @@ static const unsigned char charmap[] = {
'\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
'\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
'\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
+ '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377'
};
/*
* strcasecmp --
* Do strcmp(3) in a case-insensitive manner.
*
+ * PUBLIC: #ifndef HAVE_STRCASECMP
* PUBLIC: int strcasecmp __P((const char *, const char *));
+ * PUBLIC: #endif
*/
int
strcasecmp(s1, s2)
@@ -100,3 +102,31 @@ strcasecmp(s1, s2)
return (0);
return (cm[*us1] - cm[*--us2]);
}
+
+/*
+ * strncasecmp --
+ * Do strncmp(3) in a case-insensitive manner.
+ *
+ * PUBLIC: #ifndef HAVE_STRCASECMP
+ * PUBLIC: int strncasecmp __P((const char *, const char *, size_t));
+ * PUBLIC: #endif
+ */
+int
+strncasecmp(s1, s2, n)
+ const char *s1, *s2;
+ register size_t n;
+{
+ if (n != 0) {
+ register const unsigned char *cm = charmap,
+ *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ do {
+ if (cm[*us1] != cm[*us2++])
+ return (cm[*us1] - cm[*--us2]);
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+ return (0);
+}
diff --git a/db/clib/strdup.c b/db/clib/strdup.c
index e82d2afcb..e68623f14 100644
--- a/db/clib/strdup.c
+++ b/db/clib/strdup.c
@@ -34,7 +34,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: strdup.c,v 1.5 2002/05/01 18:40:05 bostic Exp ";
+static const char revid[] = "$Id: strdup.c,v 1.5 2002/05/01 18:40:05 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/clib/strerror.c b/db/clib/strerror.c
index 0f7447b04..a98cab450 100644
--- a/db/clib/strerror.c
+++ b/db/clib/strerror.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: strerror.c,v 11.4 2000/02/14 02:59:41 bostic Exp $";
+static const char revid[] = "$Id: strerror.c,v 11.7 2003/01/08 04:06:43 bostic Exp $";
#endif /* not lint */
/*
diff --git a/db/clib/vsnprintf.c b/db/clib/vsnprintf.c
index 3d27bc0d2..2bce3b762 100644
--- a/db/clib/vsnprintf.c
+++ b/db/clib/vsnprintf.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: vsnprintf.c,v 11.4 2000/05/18 19:24:59 bostic Exp $";
+static const char revid[] = "$Id: vsnprintf.c,v 11.8 2003/01/08 04:06:46 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -24,7 +24,7 @@ static const char revid[] = "$Id: vsnprintf.c,v 11.4 2000/05/18 19:24:59 bostic
* Bounded version of vsprintf.
*
* PUBLIC: #ifndef HAVE_VSNPRINTF
- * PUBLIC: int vsnprintf();
+ * PUBLIC: int vsnprintf __P((char *, size_t, const char *, va_list));
* PUBLIC: #endif
*/
#ifndef HAVE_VSNPRINTF
diff --git a/db/common/crypto_stub.c b/db/common/crypto_stub.c
new file mode 100644
index 000000000..234126bca
--- /dev/null
+++ b/db/common/crypto_stub.c
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: crypto_stub.c,v 1.3 2003/07/01 19:47:10 bostic Exp $";
+#endif /* not lint */
+
+#include "db_int.h"
+
+/*
+ * __crypto_region_init --
+ * Initialize crypto.
+ *
+ *
+ * !!!
+ * We don't put this stub file in the crypto/ directory of the distribution
+ * because that entire directory is removed for non-crypto distributions.
+ *
+ * PUBLIC: int __crypto_region_init __P((DB_ENV *));
+ */
+int
+__crypto_region_init(dbenv)
+ DB_ENV *dbenv;
+{
+ REGENV *renv;
+ REGINFO *infop;
+ int ret;
+
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ MUTEX_LOCK(dbenv, &renv->mutex);
+ ret = !(renv->cipher_off == INVALID_ROFF);
+ MUTEX_UNLOCK(dbenv, &renv->mutex);
+
+ if (ret == 0)
+ return (0);
+
+ __db_err(dbenv,
+"Encrypted environment: library build did not include cryptography support");
+ return (DB_OPNOTSUP);
+}
diff --git a/db/common/db_byteorder.c b/db/common/db_byteorder.c
index d089cfe4c..2a708c86f 100644
--- a/db/common/db_byteorder.c
+++ b/db/common/db_byteorder.c
@@ -1,30 +1,42 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_byteorder.c,v 11.4 2000/11/30 00:58:31 ubell Exp $";
+static const char revid[] = "$Id: db_byteorder.c,v 11.9 2003/01/08 04:07:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-
-#ifdef HAVE_ENDIAN_H
-#include <endian.h>
-#if BYTE_ORDER == BIG_ENDIAN
-#define WORDS_BIGENDIAN 1
-#endif
-#endif
-
#endif
#include "db_int.h"
-#include "common_ext.h"
+
+/*
+ * __db_isbigendian --
+ * Return 1 if big-endian (Motorola and Sparc), not little-endian
+ * (Intel and Vax). We do this work at run-time, rather than at
+ * configuration time so cross-compilation and general embedded
+ * system support is simpler.
+ *
+ * PUBLIC: int __db_isbigendian __P((void));
+ */
+int
+__db_isbigendian()
+{
+ union { /* From Harbison & Steele. */
+ long l;
+ char c[sizeof(long)];
+ } u;
+
+ u.l = 1;
+ return (u.c[sizeof(long) - 1] == 1);
+}
/*
* __db_byteorder --
@@ -38,21 +50,21 @@ __db_byteorder(dbenv, lorder)
DB_ENV *dbenv;
int lorder;
{
+ int is_bigendian;
+
+ is_bigendian = __db_isbigendian();
+
switch (lorder) {
case 0:
break;
case 1234:
-#if defined(WORDS_BIGENDIAN)
- return (DB_SWAPBYTES);
-#else
+ if (is_bigendian)
+ return (DB_SWAPBYTES);
break;
-#endif
case 4321:
-#if defined(WORDS_BIGENDIAN)
+ if (!is_bigendian)
+ return (DB_SWAPBYTES);
break;
-#else
- return (DB_SWAPBYTES);
-#endif
default:
__db_err(dbenv,
"unsupported byte order, only big and little-endian supported");
diff --git a/db/common/db_err.c b/db/common/db_err.c
index d69bd023d..8c3c7b376 100644
--- a/db/common/db_err.c
+++ b/db/common/db_err.c
@@ -1,40 +1,31 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_err.c,v 11.38 2001/01/22 21:50:25 sue Exp $";
+static const char revid[] = "$Id: db_err.c,v 11.100 2003/10/07 18:55:38 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h> /* Declare STDERR_FILENO. */
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "lock_ext.h"
-#include "log.h"
-#include "log_ext.h"
-#include "mp.h"
-#include "mp_ext.h"
-#include "txn.h"
-#include "txn_ext.h"
-#include "clib_ext.h"
-#include "common_ext.h"
-#include "db_auto.h"
-
-static void __db_errcall __P((const DB_ENV *, int, int, const char *, va_list));
-static void __db_errfile __P((const DB_ENV *, int, int, const char *, va_list));
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
/*
* __db_fchk --
@@ -86,15 +77,32 @@ __db_ferr(dbenv, name, iscombo)
}
/*
+ * __db_fnl --
+ * Common flag-needs-locking message.
+ *
+ * PUBLIC: int __db_fnl __P((const DB_ENV *, const char *));
+ */
+int
+__db_fnl(dbenv, name)
+ const DB_ENV *dbenv;
+ const char *name;
+{
+ __db_err(dbenv,
+ "%s: the DB_DIRTY_READ and DB_RMW flags require locking", name);
+ return (EINVAL);
+}
+
+/*
* __db_pgerr --
* Error when unable to retrieve a specified page.
*
- * PUBLIC: int __db_pgerr __P((DB *, db_pgno_t));
+ * PUBLIC: int __db_pgerr __P((DB *, db_pgno_t, int));
*/
int
-__db_pgerr(dbp, pgno)
+__db_pgerr(dbp, pgno, errval)
DB *dbp;
db_pgno_t pgno;
+ int errval;
{
/*
* Three things are certain:
@@ -103,41 +111,22 @@ __db_pgerr(dbp, pgno)
*/
__db_err(dbp->dbenv,
"unable to create/retrieve page %lu", (u_long)pgno);
- return (__db_panic(dbp->dbenv, EIO));
+ return (__db_panic(dbp->dbenv, errval));
}
/*
* __db_pgfmt --
* Error when a page has the wrong format.
*
- * PUBLIC: int __db_pgfmt __P((DB *, db_pgno_t));
+ * PUBLIC: int __db_pgfmt __P((DB_ENV *, db_pgno_t));
*/
int
-__db_pgfmt(dbp, pgno)
- DB *dbp;
+__db_pgfmt(dbenv, pgno)
+ DB_ENV *dbenv;
db_pgno_t pgno;
{
- __db_err(dbp->dbenv,
- "page %lu: illegal page type or format", (u_long)pgno);
- return (__db_panic(dbp->dbenv, EINVAL));
-}
-
-/*
- * __db_eopnotsup --
- * Common operation not supported message.
- *
- * PUBLIC: int __db_eopnotsup __P((const DB_ENV *));
- */
-int
-__db_eopnotsup(dbenv)
- const DB_ENV *dbenv;
-{
- __db_err(dbenv, "operation not supported");
-#ifdef EOPNOTSUPP
- return (EOPNOTSUPP);
-#else
- return (EINVAL);
-#endif
+ __db_err(dbenv, "page %lu: illegal page type or format", (u_long)pgno);
+ return (__db_panic(dbenv, EINVAL));
}
#ifdef DIAGNOSTIC
@@ -157,7 +146,7 @@ __db_assert(failedexpr, file, line)
(void)fprintf(stderr,
"__db_assert: \"%s\" failed: file \"%s\", line %d\n",
failedexpr, file, line);
- fflush(stderr);
+ (void)fflush(stderr);
/* We want a stack trace of how this could possibly happen. */
abort();
@@ -176,7 +165,11 @@ int
__db_panic_msg(dbenv)
DB_ENV *dbenv;
{
- __db_err(dbenv, "region error detected; run recovery.");
+ __db_err(dbenv, "PANIC: fatal region error detected; run recovery");
+
+ if (dbenv->db_paniccall != NULL)
+ dbenv->db_paniccall(dbenv, DB_RUNRECOVERY);
+
return (DB_RUNRECOVERY);
}
@@ -191,11 +184,8 @@ __db_panic(dbenv, errval)
DB_ENV *dbenv;
int errval;
{
-
if (dbenv != NULL) {
- ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->panic = 1;
-
- dbenv->db_panic = errval;
+ PANIC_SET(dbenv, 1);
__db_err(dbenv, "PANIC: %s", db_strerror(errval));
@@ -203,6 +193,17 @@ __db_panic(dbenv, errval)
dbenv->db_paniccall(dbenv, errval);
}
+#if defined(DIAGNOSTIC) && !defined(CONFIG_TEST)
+ /*
+ * We want a stack trace of how this could possibly happen.
+ *
+ * Don't drop core if it's the test suite -- it's reasonable for the
+ * test suite to check to make sure that DB_RUNRECOVERY is returned
+ * under certain conditions.
+ */
+ abort();
+#endif
+
/*
* Chaos reigns within.
* Reflect, repent, and reboot.
@@ -214,15 +215,22 @@ __db_panic(dbenv, errval)
/*
* db_strerror --
* ANSI C strerror(3) for DB.
+ *
+ * EXTERN: char *db_strerror __P((int));
*/
char *
db_strerror(error)
int error;
{
+ char *p;
+
if (error == 0)
return ("Successful return: 0");
- if (error > 0)
- return (strerror(error));
+ if (error > 0) {
+ if ((p = strerror(error)) != NULL)
+ return (p);
+ goto unknown_err;
+ }
/*
* !!!
@@ -232,8 +240,10 @@ db_strerror(error)
* altered.
*/
switch (error) {
- case DB_INCOMPLETE:
- return ("DB_INCOMPLETE: Cache flush was unable to complete");
+ case DB_DONOTINDEX:
+ return ("DB_DONOTINDEX: Secondary index callback returns null");
+ case DB_FILEOPEN:
+ return ("DB_FILEOPEN: Rename or remove while file is open.");
case DB_KEYEMPTY:
return ("DB_KEYEMPTY: Non-existent key/data pair");
case DB_KEYEXIST:
@@ -244,7 +254,7 @@ db_strerror(error)
case DB_LOCK_NOTGRANTED:
return ("DB_LOCK_NOTGRANTED: Lock not granted");
case DB_NOSERVER:
- return ("DB_NOSERVER: Fatal error, no server");
+ return ("DB_NOSERVER: Fatal error, no RPC server");
case DB_NOSERVER_HOME:
return ("DB_NOSERVER_HOME: Home unrecognized at server");
case DB_NOSERVER_ID:
@@ -253,11 +263,39 @@ db_strerror(error)
return ("DB_NOTFOUND: No matching key/data pair found");
case DB_OLD_VERSION:
return ("DB_OLDVERSION: Database requires a version upgrade");
+ case DB_PAGE_NOTFOUND:
+ return ("DB_PAGE_NOTFOUND: Requested page not found");
+ case DB_REP_DUPMASTER:
+ return ("DB_REP_DUPMASTER: A second master site appeared");
+ case DB_REP_HANDLE_DEAD:
+ return ("DB_REP_HANDLE_DEAD: Handle is no longer valid.");
+ case DB_REP_HOLDELECTION:
+ return ("DB_REP_HOLDELECTION: Need to hold an election");
+ case DB_REP_ISPERM:
+ return ("DB_REP_ISPERM: Permanent record written");
+ case DB_REP_NEWMASTER:
+ return ("DB_REP_NEWMASTER: A new master has declared itself");
+ case DB_REP_NEWSITE:
+ return ("DB_REP_NEWSITE: A new site has entered the system");
+ case DB_REP_NOTPERM:
+ return ("DB_REP_NOTPERM: Permanent log record not written.");
+ case DB_REP_OUTDATED:
+ return
+ ("DB_REP_OUTDATED: Insufficient logs on master to recover");
+ case DB_REP_UNAVAIL:
+ return ("DB_REP_UNAVAIL: Unable to elect a master");
case DB_RUNRECOVERY:
return ("DB_RUNRECOVERY: Fatal error, run database recovery");
+ case DB_SECONDARY_BAD:
+ return
+ ("DB_SECONDARY_BAD: Secondary index inconsistent with primary");
case DB_VERIFY_BAD:
return ("DB_VERIFY_BAD: Database verification failed");
- default: {
+ default:
+ break;
+ }
+
+unknown_err: {
/*
* !!!
* Room for a 64-bit number + slop. This buffer is only used
@@ -269,18 +307,18 @@ db_strerror(error)
(void)snprintf(ebuf, sizeof(ebuf), "Unknown error: %d", error);
return (ebuf);
}
- }
}
/*
* __db_err --
- * Standard DB error routine. The same as db_errx, except that we
- * don't write to stderr if no output mechanism was specified.
+ * Standard DB error routine. The same as errx, except we don't write
+ * to stderr if no output mechanism was specified.
*
- * PUBLIC: void __db_err __P((const DB_ENV *, const char *, ...));
+ * PUBLIC: void __db_err __P((const DB_ENV *, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 2, 3)));
*/
void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__db_err(const DB_ENV *dbenv, const char *fmt, ...)
#else
__db_err(dbenv, fmt, va_alist)
@@ -289,81 +327,22 @@ __db_err(dbenv, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
-
-/*
- XXX
- Log the message.
-
- It would be nice to automatically log the error into the log files
- if the application is configured for logging. The problem is that
- if we currently hold the log region mutex, we will self-deadlock.
- Leave all the structure in place, but turned off. I'd like to fix
- this in the future by detecting if we have the log region already
- locked (e.g., a flag in the environment handle), or perhaps even
- have a finer granularity so that the only calls to __db_err we
- can't log are those made while we have the current log buffer
- locked, or perhaps have a separate buffer into which we log error
- messages.
-
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_log(dbenv, NULL, "db_err", 0, fmt, ap);
-
- va_end(ap);
-#endif
-*/
-
- /* Tell the application. */
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_err(dbenv, 0, 0, 0, fmt, ap);
-
- va_end(ap);
+ DB_REAL_ERR(dbenv, 0, 0, 0, fmt);
}
-/*
- * __db_real_err --
- * All the DB error routines end up here.
- *
- * PUBLIC: void __db_real_err
- * PUBLIC: __P((const DB_ENV *, int, int, int, const char *, va_list));
- */
-void
-__db_real_err(dbenv, error, error_set, stderr_default, fmt, ap)
- const DB_ENV *dbenv;
- int error, error_set, stderr_default;
- const char *fmt;
- va_list ap;
-{
- /* Call the user's callback function, if specified. */
- if (dbenv != NULL && dbenv->db_errcall != NULL)
- __db_errcall(dbenv, error, error_set, fmt, ap);
-
- /* Write to the user's file descriptor, if specified. */
- if (dbenv != NULL && dbenv->db_errfile != NULL)
- __db_errfile(dbenv, error, error_set, fmt, ap);
-
- /*
- * If we have a default and we didn't do either of the above, write
- * to the default.
- */
- if (stderr_default && (dbenv == NULL ||
- (dbenv->db_errcall == NULL && dbenv->db_errfile == NULL)))
- __db_errfile(dbenv, error, error_set, fmt, ap);
-}
+#define OVERFLOW_ERROR "internal buffer overflow, process aborted\n"
+#ifndef STDERR_FILENO
+#define STDERR_FILENO 2
+#endif
/*
* __db_errcall --
* Do the error message work for callback functions.
+ *
+ * PUBLIC: void __db_errcall
+ * PUBLIC: __P((const DB_ENV *, int, int, const char *, va_list));
*/
-static void
+void
__db_errcall(dbenv, error, error_set, fmt, ap)
const DB_ENV *dbenv;
int error, error_set;
@@ -371,27 +350,45 @@ __db_errcall(dbenv, error, error_set, fmt, ap)
va_list ap;
{
char *p;
- char __errbuf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
+ char errbuf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
- p = __errbuf;
- if (fmt != NULL) {
- p += vsnprintf(__errbuf, sizeof(__errbuf), fmt, ap);
- if (error_set) {
- *p++ = ':';
- *p++ = ' ';
- }
- }
+ p = errbuf;
+ if (fmt != NULL)
+ p += vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
if (error_set)
- (void)strcpy(p, db_strerror(error));
+ p += snprintf(p,
+ sizeof(errbuf) - (size_t)(p - errbuf), ": %s",
+ db_strerror(error));
+#ifndef HAVE_VSNPRINTF
+ /*
+ * !!!
+ * We're potentially manipulating strings handed us by the application,
+ * and on systems without a real snprintf() the sprintf() calls could
+ * have overflowed the buffer. We can't do anything about it now, but
+ * we don't want to return control to the application, we might have
+ * overwritten the stack with a Trojan horse. We're not trying to do
+ * anything recoverable here because systems without snprintf support
+ * are pretty rare anymore.
+ */
+ if ((size_t)(p - errbuf) > sizeof(errbuf)) {
+ write(
+ STDERR_FILENO, OVERFLOW_ERROR, sizeof(OVERFLOW_ERROR) - 1);
+ abort();
+ /* NOTREACHED */
+ }
+#endif
- dbenv->db_errcall(dbenv->db_errpfx, __errbuf);
+ dbenv->db_errcall(dbenv->db_errpfx, errbuf);
}
/*
* __db_errfile --
* Do the error message work for FILE *s.
+ *
+ * PUBLIC: void __db_errfile
+ * PUBLIC: __P((const DB_ENV *, int, int, const char *, va_list));
*/
-static void
+void
__db_errfile(dbenv, error, error_set, fmt, ap)
const DB_ENV *dbenv;
int error, error_set;
@@ -421,10 +418,11 @@ __db_errfile(dbenv, error, error_set, fmt, ap)
* Write information into the DB log.
*
* PUBLIC: void __db_logmsg __P((const DB_ENV *,
- * PUBLIC: DB_TXN *, const char *, u_int32_t, const char *, ...));
+ * PUBLIC: DB_TXN *, const char *, u_int32_t, const char *, ...))
+ * PUBLIC: __attribute__ ((__format__ (__printf__, 5, 6)));
*/
void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__db_logmsg(const DB_ENV *dbenv,
DB_TXN *txnid, const char *opname, u_int32_t flags, const char *fmt, ...)
#else
@@ -436,60 +434,55 @@ __db_logmsg(dbenv, txnid, opname, flags, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
-
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_log(dbenv, txnid, opname, flags, fmt, ap);
-
- va_end(ap);
-}
-
-/*
- * __db_real_log --
- * Write information into the DB log.
- *
- * PUBLIC: void __db_real_log __P((const DB_ENV *,
- * PUBLIC: DB_TXN *, const char *, u_int32_t, const char *, va_list ap));
- */
-void
-#ifdef __STDC__
-__db_real_log(const DB_ENV *dbenv, DB_TXN *txnid,
- const char *opname, u_int32_t flags, const char *fmt, va_list ap)
-#else
-__db_real_log(dbenv, txnid, opname, flags, fmt, ap)
- const DB_ENV *dbenv;
- DB_TXN *txnid;
- const char *opname, *fmt;
- u_int32_t flags;
- va_list ap;
-#endif
-{
DBT opdbt, msgdbt;
DB_LSN lsn;
+ va_list ap;
char __logbuf[2048]; /* !!!: END OF THE STACK DON'T TRUST SPRINTF. */
if (!LOGGING_ON(dbenv))
return;
+#ifdef STDC_HEADERS
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+#endif
memset(&opdbt, 0, sizeof(opdbt));
opdbt.data = (void *)opname;
- opdbt.size = strlen(opname) + 1;
+ opdbt.size = (u_int32_t)(strlen(opname) + 1);
memset(&msgdbt, 0, sizeof(msgdbt));
msgdbt.data = __logbuf;
- msgdbt.size = vsnprintf(__logbuf, sizeof(__logbuf), fmt, ap);
+ msgdbt.size = (u_int32_t)vsnprintf(__logbuf, sizeof(__logbuf), fmt, ap);
+
+#ifndef HAVE_VSNPRINTF
+ /*
+ * !!!
+ * We're potentially manipulating strings handed us by the application,
+ * and on systems without a real snprintf() the sprintf() calls could
+ * have overflowed the buffer. We can't do anything about it now, but
+ * we don't want to return control to the application, we might have
+ * overwritten the stack with a Trojan horse. We're not trying to do
+ * anything recoverable here because systems without snprintf support
+ * are pretty rare anymore.
+ */
+ if (msgdbt.size > sizeof(__logbuf)) {
+ write(
+ STDERR_FILENO, OVERFLOW_ERROR, sizeof(OVERFLOW_ERROR) - 1);
+ abort();
+ /* NOTREACHED */
+ }
+#endif
/*
* XXX
* Explicitly discard the const. Otherwise, we have to const DB_ENV
* references throughout the logging subsystem.
*/
- __db_debug_log(
+ (void)__db_debug_log(
(DB_ENV *)dbenv, txnid, &lsn, flags, &opdbt, -1, &msgdbt, NULL, 0);
+
+ va_end(ap);
}
/*
@@ -503,7 +496,7 @@ __db_unknown_flag(dbenv, routine, flag)
char *routine;
u_int32_t flag;
{
- __db_err(dbenv, "%s: Unknown flag: 0x%x", routine, flag);
+ __db_err(dbenv, "%s: Unknown flag: 0x%x", routine, (u_int)flag);
DB_ASSERT(0);
return (EINVAL);
}
@@ -511,34 +504,152 @@ __db_unknown_flag(dbenv, routine, flag)
/*
* __db_unknown_type -- report internal error
*
- * PUBLIC: int __db_unknown_type __P((DB_ENV *, char *, u_int32_t));
+ * PUBLIC: int __db_unknown_type __P((DB_ENV *, char *, DBTYPE));
*/
int
__db_unknown_type(dbenv, routine, type)
DB_ENV *dbenv;
char *routine;
- u_int32_t type;
+ DBTYPE type;
{
- __db_err(dbenv, "%s: Unknown db type: 0x%x", routine, type);
+ __db_err(dbenv, "%s: Unknown db type: 0x%x", routine, (u_int)type);
DB_ASSERT(0);
return (EINVAL);
}
-#ifdef DIAGNOSTIC
/*
- * __db_missing_txn_err --
- * Cannot combine operations with and without transactions.
+ * __db_check_txn --
+ * Check for common transaction errors.
*
- * PUBLIC: #ifdef DIAGNOSTIC
- * PUBLIC: int __db_missing_txn_err __P((DB_ENV *));
- * PUBLIC: #endif
+ * PUBLIC: int __db_check_txn __P((DB *, DB_TXN *, u_int32_t, int));
*/
int
-__db_missing_txn_err(dbenv)
+__db_check_txn(dbp, txn, assoc_lid, read_op)
+ DB *dbp;
+ DB_TXN *txn;
+ u_int32_t assoc_lid;
+ int read_op;
+{
DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+
+ /*
+ * If we are in recovery or aborting a transaction, then we
+ * don't need to enforce the rules about dbp's not allowing
+ * transactional operations in non-transactional dbps and
+ * vica-versa. This happens all the time as the dbp during
+ * an abort may be transactional, but we undo operations
+ * outside a transaction since we're aborting.
+ */
+ if (IS_RECOVERING(dbenv) || F_ISSET(dbp, DB_AM_RECOVER))
+ return (0);
+
+ /*
+ * Check for common transaction errors:
+ * Failure to pass a transaction handle to a DB operation
+ * Failure to configure the DB handle in a proper environment
+ * Operation on a handle whose open commit hasn't completed.
+ *
+ * Read operations don't require a txn even if we've used one before
+ * with this handle, although if they do have a txn, we'd better be
+ * prepared for it.
+ */
+ if (txn == NULL) {
+ if (!read_op && F_ISSET(dbp, DB_AM_TXN)) {
+ __db_err(dbenv,
+ "DB handle previously used in transaction, missing transaction handle");
+ return (EINVAL);
+ }
+
+ if (dbp->cur_lid >= TXN_MINIMUM)
+ goto open_err;
+ } else {
+ if (dbp->cur_lid >= TXN_MINIMUM && dbp->cur_lid != txn->txnid)
+ goto open_err;
+
+ if (!TXN_ON(dbenv))
+ return (__db_not_txn_env(dbenv));
+
+ if (!F_ISSET(dbp, DB_AM_TXN)) {
+ __db_err(dbenv,
+ "Transaction specified for a DB handle opened outside a transaction");
+ return (EINVAL);
+ }
+ }
+
+ /*
+ * If dbp->associate_lid is not DB_LOCK_INVALIDID, that means we're in
+ * the middle of a DB->associate with DB_CREATE (i.e., a secondary index
+ * creation).
+ *
+ * In addition to the usual transaction rules, we need to lock out
+ * non-transactional updates that aren't part of the associate (and
+ * thus are using some other locker ID).
+ *
+ * Transactional updates should simply block; from the time we
+ * decide to build the secondary until commit, we'll hold a write
+ * lock on all of its pages, so it should be safe to attempt to update
+ * the secondary in another transaction (presumably by updating the
+ * primary).
+ */
+ if (!read_op && dbp->associate_lid != DB_LOCK_INVALIDID &&
+ txn != NULL && dbp->associate_lid != assoc_lid) {
+ __db_err(dbenv,
+ "Operation forbidden while secondary index is being created");
+ return (EINVAL);
+ }
+
+ return (0);
+open_err:
+ __db_err(dbenv,
+ "Transaction that opened the DB handle is still active");
+ return (EINVAL);
+}
+
+/*
+ * __db_not_txn_env --
+ * DB handle must be in an environment that supports transactions.
+ *
+ * PUBLIC: int __db_not_txn_env __P((DB_ENV *));
+ */
+int
+__db_not_txn_env(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv, "DB environment not configured for transactions");
+ return (EINVAL);
+}
+
+/*
+ * __db_rec_toobig --
+ * Fixed record length exceeded error message.
+ *
+ * PUBLIC: int __db_rec_toobig __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__db_rec_toobig(dbenv, data_len, fixed_rec_len)
+ DB_ENV *dbenv;
+ u_int32_t data_len, fixed_rec_len;
+{
+ __db_err(dbenv, "%s: length of %lu larger than database's value of %lu",
+ "Record length error", (u_long)data_len, (u_long)fixed_rec_len);
+ return (EINVAL);
+}
+
+/*
+ * __db_rec_repl --
+ * Fixed record replacement length error message.
+ *
+ * PUBLIC: int __db_rec_repl __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__db_rec_repl(dbenv, data_size, data_dlen)
+ DB_ENV *dbenv;
+ u_int32_t data_size, data_dlen;
{
__db_err(dbenv,
- "DB handle previously used in transaction, missing transaction handle.");
+ "%s: replacement length %lu differs from replaced length %lu",
+ "Record length error", (u_long)data_size, (u_long)data_dlen);
return (EINVAL);
}
-#endif
diff --git a/db/common/db_getlong.c b/db/common/db_getlong.c
index bead530cd..8c3126ebd 100644
--- a/db/common/db_getlong.c
+++ b/db/common/db_getlong.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_getlong.c,v 11.11 2000/12/22 19:16:04 bostic Exp $";
+static const char revid[] = "$Id: db_getlong.c,v 11.20 2003/01/08 04:07:46 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,18 +20,17 @@ static const char revid[] = "$Id: db_getlong.c,v 11.11 2000/12/22 19:16:04 bosti
#endif
#include "db_int.h"
-#include "clib_ext.h"
/*
* __db_getlong --
* Return a long value inside of basic parameters.
*
* PUBLIC: int __db_getlong
- * PUBLIC: __P((DB *, const char *, char *, long, long, long *));
+ * PUBLIC: __P((DB_ENV *, const char *, char *, long, long, long *));
*/
int
-__db_getlong(dbp, progname, p, min, max, storep)
- DB *dbp;
+__db_getlong(dbenv, progname, p, min, max, storep)
+ DB_ENV *dbenv;
const char *progname;
char *p;
long min, max, *storep;
@@ -43,42 +42,40 @@ __db_getlong(dbp, progname, p, min, max, storep)
val = strtol(p, &end, 10);
if ((val == LONG_MIN || val == LONG_MAX) &&
__os_get_errno() == ERANGE) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: %s\n", progname, p, strerror(ERANGE));
- exit(1);
- }
- dbp->err(dbp, ERANGE, "%s", p);
+ else
+ dbenv->err(dbenv, ERANGE, "%s", p);
return (1);
}
if (p[0] == '\0' || (end[0] != '\0' && end[0] != '\n')) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: Invalid numeric argument\n", progname, p);
- exit(1);
- }
- dbp->errx(dbp, "%s: Invalid numeric argument", p);
+ else
+ dbenv->errx(dbenv, "%s: Invalid numeric argument", p);
return (1);
}
if (val < min) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: Less than minimum value (%ld)\n",
progname, p, min);
- exit(1);
- }
- dbp->errx(dbp, "%s: Less than minimum value (%ld)", p, min);
+ else
+ dbenv->errx(dbenv,
+ "%s: Less than minimum value (%ld)", p, min);
return (1);
}
if (val > max) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: Greater than maximum value (%ld)\n",
progname, p, max);
- exit(1);
- }
- dbp->errx(dbp, "%s: Greater than maximum value (%ld)", p, max);
- exit(1);
+ else
+ dbenv->errx(dbenv,
+ "%s: Greater than maximum value (%ld)", p, max);
+ return (1);
}
*storep = val;
return (0);
@@ -89,11 +86,11 @@ __db_getlong(dbp, progname, p, min, max, storep)
* Return an unsigned long value inside of basic parameters.
*
* PUBLIC: int __db_getulong
- * PUBLIC: __P((DB *, const char *, char *, u_long, u_long, u_long *));
+ * PUBLIC: __P((DB_ENV *, const char *, char *, u_long, u_long, u_long *));
*/
int
-__db_getulong(dbp, progname, p, min, max, storep)
- DB *dbp;
+__db_getulong(dbenv, progname, p, min, max, storep)
+ DB_ENV *dbenv;
const char *progname;
char *p;
u_long min, max, *storep;
@@ -101,7 +98,7 @@ __db_getulong(dbp, progname, p, min, max, storep)
#if !defined(HAVE_STRTOUL)
COMPQUIET(min, 0);
- return (__db_getlong(dbp, progname, p, 0, max, (long *)storep));
+ return (__db_getlong(dbenv, progname, p, 0, max, (long *)storep));
#else
u_long val;
char *end;
@@ -109,31 +106,29 @@ __db_getulong(dbp, progname, p, min, max, storep)
__os_set_errno(0);
val = strtoul(p, &end, 10);
if (val == ULONG_MAX && __os_get_errno() == ERANGE) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: %s\n", progname, p, strerror(ERANGE));
- exit(1);
- }
- dbp->err(dbp, ERANGE, "%s", p);
+ else
+ dbenv->err(dbenv, ERANGE, "%s", p);
return (1);
}
if (p[0] == '\0' || (end[0] != '\0' && end[0] != '\n')) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
"%s: %s: Invalid numeric argument\n", progname, p);
- exit(1);
- }
- dbp->errx(dbp, "%s: Invalid numeric argument", p);
+ else
+ dbenv->errx(dbenv, "%s: Invalid numeric argument", p);
return (1);
}
if (val < min) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
- "%s: %s: Less than minimum value (%ld)\n",
+ "%s: %s: Less than minimum value (%lu)\n",
progname, p, min);
- exit(1);
- }
- dbp->errx(dbp, "%s: Less than minimum value (%ld)", p, min);
+ else
+ dbenv->errx(dbenv,
+ "%s: Less than minimum value (%lu)", p, min);
return (1);
}
@@ -144,14 +139,14 @@ __db_getulong(dbp, progname, p, min, max, storep)
* may not exist on all platforms.
*/
if (max != 0 && val > max) {
- if (dbp == NULL) {
+ if (dbenv == NULL)
fprintf(stderr,
- "%s: %s: Greater than maximum value (%ld)\n",
+ "%s: %s: Greater than maximum value (%lu)\n",
progname, p, max);
- exit(1);
- }
- dbp->errx(dbp, "%s: Greater than maximum value (%ld)", p, max);
- exit(1);
+ else
+ dbenv->errx(dbenv,
+ "%s: Greater than maximum value (%lu)", p, max);
+ return (1);
}
*storep = val;
return (0);
diff --git a/db/common/db_idspace.c b/db/common/db_idspace.c
index 7defde82b..e67d88479 100644
--- a/db/common/db_idspace.c
+++ b/db/common/db_idspace.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_idspace.c,v 1.5 2002/02/01 18:15:29 bostic Exp ";
+static const char revid[] = "$Id: db_idspace.c,v 1.7 2003/05/18 18:29:35 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -73,7 +73,7 @@ __db_idspace(inuse, n, minp, maxp)
gap = 0;
low = 0;
- qsort(inuse, n, sizeof(u_int32_t), __db_idcmp);
+ qsort(inuse, (size_t)n, sizeof(u_int32_t), __db_idcmp);
for (i = 0; i < n - 1; i++)
if ((t = (inuse[i + 1] - inuse[i])) > gap) {
gap = t;
diff --git a/db/common/db_log2.c b/db/common/db_log2.c
index 95bc69499..273216980 100644
--- a/db/common/db_log2.c
+++ b/db/common/db_log2.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -39,7 +39,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_log2.c,v 11.4 2000/02/14 02:59:41 bostic Exp $";
+static const char revid[] = "$Id: db_log2.c,v 11.8 2003/01/08 04:07:52 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -47,7 +47,6 @@ static const char revid[] = "$Id: db_log2.c,v 11.4 2000/02/14 02:59:41 bostic Ex
#endif
#include "db_int.h"
-#include "common_ext.h"
/*
* PUBLIC: u_int32_t __db_log2 __P((u_int32_t));
diff --git a/db/common/util_arg.c b/db/common/util_arg.c
index 6499529bf..759bd766c 100644
--- a/db/common/util_arg.c
+++ b/db/common/util_arg.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: util_arg.c,v 1.4 2002/02/01 18:15:30 bostic Exp ";
+static const char revid[] = "$Id: util_arg.c,v 1.5 2003/01/08 04:07:53 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/common/util_cache.c b/db/common/util_cache.c
index c8af63062..7720ed16c 100644
--- a/db/common/util_cache.c
+++ b/db/common/util_cache.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: util_cache.c,v 1.3 2002/04/04 18:50:10 bostic Exp ";
+static const char revid[] = "$Id: util_cache.c,v 1.6 2003/05/18 18:29:36 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,7 +17,6 @@ static const char revid[] = "Id: util_cache.c,v 1.3 2002/04/04 18:50:10 bostic E
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -72,6 +71,7 @@ __db_util_cache(dbenv, dbp, cachep, resizep)
bsp = (DB_BTREE_STAT *)sp;
pgsize = bsp->bt_pagesize;
break;
+ case DB_UNKNOWN:
default:
dbenv->err(dbenv, ret, "unknown database type: %d", type);
return (EINVAL);
diff --git a/db/common/util_log.c b/db/common/util_log.c
index a4743cc2c..5971c6a10 100644
--- a/db/common/util_log.c
+++ b/db/common/util_log.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: util_log.c,v 1.7 2000/11/30 00:58:31 ubell Exp $";
+static const char revid[] = "$Id: util_log.c,v 1.13 2003/05/05 19:54:57 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -27,11 +27,9 @@ static const char revid[] = "$Id: util_log.c,v 1.7 2000/11/30 00:58:31 ubell Exp
#endif
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
-#include "common_ext.h"
/*
* __db_util_logset --
@@ -46,12 +44,14 @@ __db_util_logset(progname, fname)
{
FILE *fp;
time_t now;
+ u_int32_t id;
if ((fp = fopen(fname, "w")) == NULL)
goto err;
(void)time(&now);
- fprintf(fp, "%s: %lu %s", progname, (u_long)getpid(), ctime(&now));
+ __os_id(&id);
+ fprintf(fp, "%s: %lu %s", progname, (u_long)id, ctime(&now));
if (fclose(fp) == EOF)
goto err;
diff --git a/db/common/util_sig.c b/db/common/util_sig.c
index 6fe0166fe..4c2a02ab6 100644
--- a/db/common/util_sig.c
+++ b/db/common/util_sig.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: util_sig.c,v 1.3 2000/04/28 19:32:00 bostic Exp $";
+static const char revid[] = "$Id: util_sig.c,v 1.8 2003/01/08 04:07:58 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,7 +18,6 @@ static const char revid[] = "$Id: util_sig.c,v 1.3 2000/04/28 19:32:00 bostic Ex
#endif
#include "db_int.h"
-#include "common_ext.h"
static int interrupt;
static void onint __P((int));
@@ -79,7 +78,7 @@ void
__db_util_sigresend()
{
/* Resend any caught signal. */
- if (__db_util_interrupted != 0) {
+ if (interrupt != 0) {
(void)signal(interrupt, SIG_DFL);
(void)raise(interrupt);
/* NOTREACHED */
diff --git a/db/crypto/aes_method.c b/db/crypto/aes_method.c
index 5cfc54b8c..a88731ecf 100644
--- a/db/crypto/aes_method.c
+++ b/db/crypto/aes_method.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
*
@@ -12,7 +12,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: aes_method.c,v 1.16 2002/08/06 06:11:14 bostic Exp ";
+static const char revid[] = "$Id: aes_method.c,v 1.18 2003/04/28 19:59:19 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -56,15 +56,15 @@ __aes_setup(dbenv, db_cipher)
* Given a size, return an addition amount needed to meet the
* "chunk" needs of the algorithm.
*
- * PUBLIC: int __aes_adj_size __P((size_t));
+ * PUBLIC: u_int __aes_adj_size __P((size_t));
*/
-int
+u_int
__aes_adj_size(len)
size_t len;
{
if (len % DB_AES_CHUNK == 0)
return (0);
- return ((int)(DB_AES_CHUNK - (len % DB_AES_CHUNK)));
+ return (DB_AES_CHUNK - (len % DB_AES_CHUNK));
}
/*
diff --git a/db/crypto/crypto.c b/db/crypto/crypto.c
index a47ca89bb..f23c1f75f 100644
--- a/db/crypto/crypto.c
+++ b/db/crypto/crypto.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2001
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
* Some parts of this code originally written by Adam Stubblefield
@@ -11,7 +11,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: crypto.c,v 1.18 2002/08/06 06:11:14 bostic Exp ";
+static const char revid[] = "$Id: crypto.c,v 1.23 2003/06/30 17:19:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -25,8 +25,6 @@ static const char revid[] = "Id: crypto.c,v 1.18 2002/08/06 06:11:14 bostic Exp
/*
* __crypto_region_init --
* Initialize crypto.
- *
- * PUBLIC: int __crypto_region_init __P((DB_ENV *));
*/
int
__crypto_region_init(dbenv)
@@ -199,15 +197,13 @@ __crypto_algsetup(dbenv, db_cipher, alg, do_init)
* __crypto_decrypt_meta --
* Perform decryption on a metapage if needed.
*
- * PUBLIC: int __crypto_decrypt_meta __P((DB_ENV *, DB *,
- * PUBLIC: u_int8_t *, size_t, int));
+ * PUBLIC: int __crypto_decrypt_meta __P((DB_ENV *, DB *, u_int8_t *, int));
*/
int
-__crypto_decrypt_meta(dbenv, dbp, mbuf, len, do_metachk)
+__crypto_decrypt_meta(dbenv, dbp, mbuf, do_metachk)
DB_ENV *dbenv;
DB *dbp;
u_int8_t *mbuf;
- size_t len;
int do_metachk;
{
DB_CIPHER *db_cipher;
@@ -217,7 +213,6 @@ __crypto_decrypt_meta(dbenv, dbp, mbuf, len, do_metachk)
int ret;
u_int8_t *iv;
- DB_ASSERT(len >= DBMETASIZE);
/*
* If we weren't given a dbp, we just want to decrypt the page
* on behalf of some internal subsystem, not on behalf of a user
@@ -338,3 +333,31 @@ alg_retry:
}
return (ret);
}
+
+/*
+ * __crypto_set_passwd --
+ * Get the password from the shared region; and set it in a new
+ * environment handle. Use this to duplicate environment handles.
+ *
+ * PUBLIC: int __crypto_set_passwd __P((DB_ENV *, DB_ENV *));
+ */
+int
+__crypto_set_passwd(dbenv_src, dbenv_dest)
+ DB_ENV *dbenv_src, *dbenv_dest;
+{
+ CIPHER *cipher;
+ REGENV *renv;
+ REGINFO *infop;
+ char *sh_passwd;
+ int ret;
+
+ ret = 0;
+ infop = dbenv_src->reginfo;
+ renv = infop->primary;
+
+ DB_ASSERT(CRYPTO_ON(dbenv_src));
+
+ cipher = R_ADDR(infop, renv->cipher_off);
+ sh_passwd = R_ADDR(infop, cipher->passwd);
+ return (__dbenv_set_encrypt(dbenv_dest, sh_passwd, DB_ENCRYPT_AES));
+}
diff --git a/db/crypto/mersenne/mt19937db.c b/db/crypto/mersenne/mt19937db.c
index 9a54ea67a..bfdd56a04 100644
--- a/db/crypto/mersenne/mt19937db.c
+++ b/db/crypto/mersenne/mt19937db.c
@@ -1,14 +1,12 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: mt19937db.c,v 1.8 2002/03/27 04:31:10 bostic Exp ";
+static const char revid[] = "$Id: mt19937db.c,v 1.10 2003/04/24 14:30:42 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
-#include "dbinc/mutex.h"
-#include "dbinc_auto/os_ext.h"
/* A C-program for MT19937: Integer version (1999/10/28) */
/* genrand() generates one pseudorandom unsigned integer (32bit) */
diff --git a/db/crypto/rijndael/rijndael-alg-fst.c b/db/crypto/rijndael/rijndael-alg-fst.c
index 89bf4621f..4a251606d 100644
--- a/db/crypto/rijndael/rijndael-alg-fst.c
+++ b/db/crypto/rijndael/rijndael-alg-fst.c
@@ -45,666 +45,666 @@ Td4[x] = Si[x].[01, 01, 01, 01];
*/
static const u32 Te0[256] = {
- 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
- 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
- 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
- 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
- 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
- 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
- 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
- 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
- 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
- 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
- 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
- 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
- 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
- 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
- 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
- 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
- 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
- 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
- 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
- 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
- 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
- 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
- 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
- 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
- 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
- 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
- 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
- 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
- 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
- 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
- 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
- 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
- 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
- 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
- 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
- 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
- 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
- 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
- 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
- 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
- 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
- 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
- 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
- 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
- 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
- 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
- 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
- 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
- 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
- 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
- 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
- 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
- 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
- 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
- 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
- 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
- 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
- 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
- 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
- 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
- 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
- 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
- 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
- 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
+ (u_int)0xc66363a5, (u_int)0xf87c7c84, (u_int)0xee777799, (u_int)0xf67b7b8d,
+ (u_int)0xfff2f20d, (u_int)0xd66b6bbd, (u_int)0xde6f6fb1, (u_int)0x91c5c554,
+ (u_int)0x60303050, (u_int)0x02010103, (u_int)0xce6767a9, (u_int)0x562b2b7d,
+ (u_int)0xe7fefe19, (u_int)0xb5d7d762, (u_int)0x4dababe6, (u_int)0xec76769a,
+ (u_int)0x8fcaca45, (u_int)0x1f82829d, (u_int)0x89c9c940, (u_int)0xfa7d7d87,
+ (u_int)0xeffafa15, (u_int)0xb25959eb, (u_int)0x8e4747c9, (u_int)0xfbf0f00b,
+ (u_int)0x41adadec, (u_int)0xb3d4d467, (u_int)0x5fa2a2fd, (u_int)0x45afafea,
+ (u_int)0x239c9cbf, (u_int)0x53a4a4f7, (u_int)0xe4727296, (u_int)0x9bc0c05b,
+ (u_int)0x75b7b7c2, (u_int)0xe1fdfd1c, (u_int)0x3d9393ae, (u_int)0x4c26266a,
+ (u_int)0x6c36365a, (u_int)0x7e3f3f41, (u_int)0xf5f7f702, (u_int)0x83cccc4f,
+ (u_int)0x6834345c, (u_int)0x51a5a5f4, (u_int)0xd1e5e534, (u_int)0xf9f1f108,
+ (u_int)0xe2717193, (u_int)0xabd8d873, (u_int)0x62313153, (u_int)0x2a15153f,
+ (u_int)0x0804040c, (u_int)0x95c7c752, (u_int)0x46232365, (u_int)0x9dc3c35e,
+ (u_int)0x30181828, (u_int)0x379696a1, (u_int)0x0a05050f, (u_int)0x2f9a9ab5,
+ (u_int)0x0e070709, (u_int)0x24121236, (u_int)0x1b80809b, (u_int)0xdfe2e23d,
+ (u_int)0xcdebeb26, (u_int)0x4e272769, (u_int)0x7fb2b2cd, (u_int)0xea75759f,
+ (u_int)0x1209091b, (u_int)0x1d83839e, (u_int)0x582c2c74, (u_int)0x341a1a2e,
+ (u_int)0x361b1b2d, (u_int)0xdc6e6eb2, (u_int)0xb45a5aee, (u_int)0x5ba0a0fb,
+ (u_int)0xa45252f6, (u_int)0x763b3b4d, (u_int)0xb7d6d661, (u_int)0x7db3b3ce,
+ (u_int)0x5229297b, (u_int)0xdde3e33e, (u_int)0x5e2f2f71, (u_int)0x13848497,
+ (u_int)0xa65353f5, (u_int)0xb9d1d168, (u_int)0x00000000, (u_int)0xc1eded2c,
+ (u_int)0x40202060, (u_int)0xe3fcfc1f, (u_int)0x79b1b1c8, (u_int)0xb65b5bed,
+ (u_int)0xd46a6abe, (u_int)0x8dcbcb46, (u_int)0x67bebed9, (u_int)0x7239394b,
+ (u_int)0x944a4ade, (u_int)0x984c4cd4, (u_int)0xb05858e8, (u_int)0x85cfcf4a,
+ (u_int)0xbbd0d06b, (u_int)0xc5efef2a, (u_int)0x4faaaae5, (u_int)0xedfbfb16,
+ (u_int)0x864343c5, (u_int)0x9a4d4dd7, (u_int)0x66333355, (u_int)0x11858594,
+ (u_int)0x8a4545cf, (u_int)0xe9f9f910, (u_int)0x04020206, (u_int)0xfe7f7f81,
+ (u_int)0xa05050f0, (u_int)0x783c3c44, (u_int)0x259f9fba, (u_int)0x4ba8a8e3,
+ (u_int)0xa25151f3, (u_int)0x5da3a3fe, (u_int)0x804040c0, (u_int)0x058f8f8a,
+ (u_int)0x3f9292ad, (u_int)0x219d9dbc, (u_int)0x70383848, (u_int)0xf1f5f504,
+ (u_int)0x63bcbcdf, (u_int)0x77b6b6c1, (u_int)0xafdada75, (u_int)0x42212163,
+ (u_int)0x20101030, (u_int)0xe5ffff1a, (u_int)0xfdf3f30e, (u_int)0xbfd2d26d,
+ (u_int)0x81cdcd4c, (u_int)0x180c0c14, (u_int)0x26131335, (u_int)0xc3ecec2f,
+ (u_int)0xbe5f5fe1, (u_int)0x359797a2, (u_int)0x884444cc, (u_int)0x2e171739,
+ (u_int)0x93c4c457, (u_int)0x55a7a7f2, (u_int)0xfc7e7e82, (u_int)0x7a3d3d47,
+ (u_int)0xc86464ac, (u_int)0xba5d5de7, (u_int)0x3219192b, (u_int)0xe6737395,
+ (u_int)0xc06060a0, (u_int)0x19818198, (u_int)0x9e4f4fd1, (u_int)0xa3dcdc7f,
+ (u_int)0x44222266, (u_int)0x542a2a7e, (u_int)0x3b9090ab, (u_int)0x0b888883,
+ (u_int)0x8c4646ca, (u_int)0xc7eeee29, (u_int)0x6bb8b8d3, (u_int)0x2814143c,
+ (u_int)0xa7dede79, (u_int)0xbc5e5ee2, (u_int)0x160b0b1d, (u_int)0xaddbdb76,
+ (u_int)0xdbe0e03b, (u_int)0x64323256, (u_int)0x743a3a4e, (u_int)0x140a0a1e,
+ (u_int)0x924949db, (u_int)0x0c06060a, (u_int)0x4824246c, (u_int)0xb85c5ce4,
+ (u_int)0x9fc2c25d, (u_int)0xbdd3d36e, (u_int)0x43acacef, (u_int)0xc46262a6,
+ (u_int)0x399191a8, (u_int)0x319595a4, (u_int)0xd3e4e437, (u_int)0xf279798b,
+ (u_int)0xd5e7e732, (u_int)0x8bc8c843, (u_int)0x6e373759, (u_int)0xda6d6db7,
+ (u_int)0x018d8d8c, (u_int)0xb1d5d564, (u_int)0x9c4e4ed2, (u_int)0x49a9a9e0,
+ (u_int)0xd86c6cb4, (u_int)0xac5656fa, (u_int)0xf3f4f407, (u_int)0xcfeaea25,
+ (u_int)0xca6565af, (u_int)0xf47a7a8e, (u_int)0x47aeaee9, (u_int)0x10080818,
+ (u_int)0x6fbabad5, (u_int)0xf0787888, (u_int)0x4a25256f, (u_int)0x5c2e2e72,
+ (u_int)0x381c1c24, (u_int)0x57a6a6f1, (u_int)0x73b4b4c7, (u_int)0x97c6c651,
+ (u_int)0xcbe8e823, (u_int)0xa1dddd7c, (u_int)0xe874749c, (u_int)0x3e1f1f21,
+ (u_int)0x964b4bdd, (u_int)0x61bdbddc, (u_int)0x0d8b8b86, (u_int)0x0f8a8a85,
+ (u_int)0xe0707090, (u_int)0x7c3e3e42, (u_int)0x71b5b5c4, (u_int)0xcc6666aa,
+ (u_int)0x904848d8, (u_int)0x06030305, (u_int)0xf7f6f601, (u_int)0x1c0e0e12,
+ (u_int)0xc26161a3, (u_int)0x6a35355f, (u_int)0xae5757f9, (u_int)0x69b9b9d0,
+ (u_int)0x17868691, (u_int)0x99c1c158, (u_int)0x3a1d1d27, (u_int)0x279e9eb9,
+ (u_int)0xd9e1e138, (u_int)0xebf8f813, (u_int)0x2b9898b3, (u_int)0x22111133,
+ (u_int)0xd26969bb, (u_int)0xa9d9d970, (u_int)0x078e8e89, (u_int)0x339494a7,
+ (u_int)0x2d9b9bb6, (u_int)0x3c1e1e22, (u_int)0x15878792, (u_int)0xc9e9e920,
+ (u_int)0x87cece49, (u_int)0xaa5555ff, (u_int)0x50282878, (u_int)0xa5dfdf7a,
+ (u_int)0x038c8c8f, (u_int)0x59a1a1f8, (u_int)0x09898980, (u_int)0x1a0d0d17,
+ (u_int)0x65bfbfda, (u_int)0xd7e6e631, (u_int)0x844242c6, (u_int)0xd06868b8,
+ (u_int)0x824141c3, (u_int)0x299999b0, (u_int)0x5a2d2d77, (u_int)0x1e0f0f11,
+ (u_int)0x7bb0b0cb, (u_int)0xa85454fc, (u_int)0x6dbbbbd6, (u_int)0x2c16163a,
};
static const u32 Te1[256] = {
- 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
- 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
- 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
- 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
- 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
- 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
- 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
- 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
- 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
- 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
- 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
- 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
- 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
- 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
- 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
- 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
- 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
- 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
- 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
- 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
- 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
- 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
- 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
- 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
- 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
- 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
- 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
- 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
- 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
- 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
- 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
- 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
- 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
- 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
- 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
- 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
- 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
- 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
- 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
- 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
- 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
- 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
- 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
- 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
- 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
- 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
- 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
- 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
- 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
- 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
- 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
- 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
- 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
- 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
- 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
- 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
- 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
- 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
- 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
- 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
- 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
- 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
- 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
- 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
+ (u_int)0xa5c66363, (u_int)0x84f87c7c, (u_int)0x99ee7777, (u_int)0x8df67b7b,
+ (u_int)0x0dfff2f2, (u_int)0xbdd66b6b, (u_int)0xb1de6f6f, (u_int)0x5491c5c5,
+ (u_int)0x50603030, (u_int)0x03020101, (u_int)0xa9ce6767, (u_int)0x7d562b2b,
+ (u_int)0x19e7fefe, (u_int)0x62b5d7d7, (u_int)0xe64dabab, (u_int)0x9aec7676,
+ (u_int)0x458fcaca, (u_int)0x9d1f8282, (u_int)0x4089c9c9, (u_int)0x87fa7d7d,
+ (u_int)0x15effafa, (u_int)0xebb25959, (u_int)0xc98e4747, (u_int)0x0bfbf0f0,
+ (u_int)0xec41adad, (u_int)0x67b3d4d4, (u_int)0xfd5fa2a2, (u_int)0xea45afaf,
+ (u_int)0xbf239c9c, (u_int)0xf753a4a4, (u_int)0x96e47272, (u_int)0x5b9bc0c0,
+ (u_int)0xc275b7b7, (u_int)0x1ce1fdfd, (u_int)0xae3d9393, (u_int)0x6a4c2626,
+ (u_int)0x5a6c3636, (u_int)0x417e3f3f, (u_int)0x02f5f7f7, (u_int)0x4f83cccc,
+ (u_int)0x5c683434, (u_int)0xf451a5a5, (u_int)0x34d1e5e5, (u_int)0x08f9f1f1,
+ (u_int)0x93e27171, (u_int)0x73abd8d8, (u_int)0x53623131, (u_int)0x3f2a1515,
+ (u_int)0x0c080404, (u_int)0x5295c7c7, (u_int)0x65462323, (u_int)0x5e9dc3c3,
+ (u_int)0x28301818, (u_int)0xa1379696, (u_int)0x0f0a0505, (u_int)0xb52f9a9a,
+ (u_int)0x090e0707, (u_int)0x36241212, (u_int)0x9b1b8080, (u_int)0x3ddfe2e2,
+ (u_int)0x26cdebeb, (u_int)0x694e2727, (u_int)0xcd7fb2b2, (u_int)0x9fea7575,
+ (u_int)0x1b120909, (u_int)0x9e1d8383, (u_int)0x74582c2c, (u_int)0x2e341a1a,
+ (u_int)0x2d361b1b, (u_int)0xb2dc6e6e, (u_int)0xeeb45a5a, (u_int)0xfb5ba0a0,
+ (u_int)0xf6a45252, (u_int)0x4d763b3b, (u_int)0x61b7d6d6, (u_int)0xce7db3b3,
+ (u_int)0x7b522929, (u_int)0x3edde3e3, (u_int)0x715e2f2f, (u_int)0x97138484,
+ (u_int)0xf5a65353, (u_int)0x68b9d1d1, (u_int)0x00000000, (u_int)0x2cc1eded,
+ (u_int)0x60402020, (u_int)0x1fe3fcfc, (u_int)0xc879b1b1, (u_int)0xedb65b5b,
+ (u_int)0xbed46a6a, (u_int)0x468dcbcb, (u_int)0xd967bebe, (u_int)0x4b723939,
+ (u_int)0xde944a4a, (u_int)0xd4984c4c, (u_int)0xe8b05858, (u_int)0x4a85cfcf,
+ (u_int)0x6bbbd0d0, (u_int)0x2ac5efef, (u_int)0xe54faaaa, (u_int)0x16edfbfb,
+ (u_int)0xc5864343, (u_int)0xd79a4d4d, (u_int)0x55663333, (u_int)0x94118585,
+ (u_int)0xcf8a4545, (u_int)0x10e9f9f9, (u_int)0x06040202, (u_int)0x81fe7f7f,
+ (u_int)0xf0a05050, (u_int)0x44783c3c, (u_int)0xba259f9f, (u_int)0xe34ba8a8,
+ (u_int)0xf3a25151, (u_int)0xfe5da3a3, (u_int)0xc0804040, (u_int)0x8a058f8f,
+ (u_int)0xad3f9292, (u_int)0xbc219d9d, (u_int)0x48703838, (u_int)0x04f1f5f5,
+ (u_int)0xdf63bcbc, (u_int)0xc177b6b6, (u_int)0x75afdada, (u_int)0x63422121,
+ (u_int)0x30201010, (u_int)0x1ae5ffff, (u_int)0x0efdf3f3, (u_int)0x6dbfd2d2,
+ (u_int)0x4c81cdcd, (u_int)0x14180c0c, (u_int)0x35261313, (u_int)0x2fc3ecec,
+ (u_int)0xe1be5f5f, (u_int)0xa2359797, (u_int)0xcc884444, (u_int)0x392e1717,
+ (u_int)0x5793c4c4, (u_int)0xf255a7a7, (u_int)0x82fc7e7e, (u_int)0x477a3d3d,
+ (u_int)0xacc86464, (u_int)0xe7ba5d5d, (u_int)0x2b321919, (u_int)0x95e67373,
+ (u_int)0xa0c06060, (u_int)0x98198181, (u_int)0xd19e4f4f, (u_int)0x7fa3dcdc,
+ (u_int)0x66442222, (u_int)0x7e542a2a, (u_int)0xab3b9090, (u_int)0x830b8888,
+ (u_int)0xca8c4646, (u_int)0x29c7eeee, (u_int)0xd36bb8b8, (u_int)0x3c281414,
+ (u_int)0x79a7dede, (u_int)0xe2bc5e5e, (u_int)0x1d160b0b, (u_int)0x76addbdb,
+ (u_int)0x3bdbe0e0, (u_int)0x56643232, (u_int)0x4e743a3a, (u_int)0x1e140a0a,
+ (u_int)0xdb924949, (u_int)0x0a0c0606, (u_int)0x6c482424, (u_int)0xe4b85c5c,
+ (u_int)0x5d9fc2c2, (u_int)0x6ebdd3d3, (u_int)0xef43acac, (u_int)0xa6c46262,
+ (u_int)0xa8399191, (u_int)0xa4319595, (u_int)0x37d3e4e4, (u_int)0x8bf27979,
+ (u_int)0x32d5e7e7, (u_int)0x438bc8c8, (u_int)0x596e3737, (u_int)0xb7da6d6d,
+ (u_int)0x8c018d8d, (u_int)0x64b1d5d5, (u_int)0xd29c4e4e, (u_int)0xe049a9a9,
+ (u_int)0xb4d86c6c, (u_int)0xfaac5656, (u_int)0x07f3f4f4, (u_int)0x25cfeaea,
+ (u_int)0xafca6565, (u_int)0x8ef47a7a, (u_int)0xe947aeae, (u_int)0x18100808,
+ (u_int)0xd56fbaba, (u_int)0x88f07878, (u_int)0x6f4a2525, (u_int)0x725c2e2e,
+ (u_int)0x24381c1c, (u_int)0xf157a6a6, (u_int)0xc773b4b4, (u_int)0x5197c6c6,
+ (u_int)0x23cbe8e8, (u_int)0x7ca1dddd, (u_int)0x9ce87474, (u_int)0x213e1f1f,
+ (u_int)0xdd964b4b, (u_int)0xdc61bdbd, (u_int)0x860d8b8b, (u_int)0x850f8a8a,
+ (u_int)0x90e07070, (u_int)0x427c3e3e, (u_int)0xc471b5b5, (u_int)0xaacc6666,
+ (u_int)0xd8904848, (u_int)0x05060303, (u_int)0x01f7f6f6, (u_int)0x121c0e0e,
+ (u_int)0xa3c26161, (u_int)0x5f6a3535, (u_int)0xf9ae5757, (u_int)0xd069b9b9,
+ (u_int)0x91178686, (u_int)0x5899c1c1, (u_int)0x273a1d1d, (u_int)0xb9279e9e,
+ (u_int)0x38d9e1e1, (u_int)0x13ebf8f8, (u_int)0xb32b9898, (u_int)0x33221111,
+ (u_int)0xbbd26969, (u_int)0x70a9d9d9, (u_int)0x89078e8e, (u_int)0xa7339494,
+ (u_int)0xb62d9b9b, (u_int)0x223c1e1e, (u_int)0x92158787, (u_int)0x20c9e9e9,
+ (u_int)0x4987cece, (u_int)0xffaa5555, (u_int)0x78502828, (u_int)0x7aa5dfdf,
+ (u_int)0x8f038c8c, (u_int)0xf859a1a1, (u_int)0x80098989, (u_int)0x171a0d0d,
+ (u_int)0xda65bfbf, (u_int)0x31d7e6e6, (u_int)0xc6844242, (u_int)0xb8d06868,
+ (u_int)0xc3824141, (u_int)0xb0299999, (u_int)0x775a2d2d, (u_int)0x111e0f0f,
+ (u_int)0xcb7bb0b0, (u_int)0xfca85454, (u_int)0xd66dbbbb, (u_int)0x3a2c1616,
};
static const u32 Te2[256] = {
- 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
- 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
- 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
- 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
- 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
- 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
- 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
- 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
- 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
- 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
- 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
- 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
- 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
- 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
- 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
- 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
- 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
- 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
- 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
- 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
- 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
- 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
- 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
- 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
- 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
- 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
- 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
- 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
- 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
- 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
- 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
- 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
- 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
- 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
- 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
- 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
- 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
- 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
- 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
- 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
- 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
- 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
- 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
- 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
- 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
- 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
- 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
- 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
- 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
- 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
- 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
- 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
- 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
- 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
- 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
- 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
- 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
- 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
- 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
- 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
- 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
- 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
- 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
- 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
+ (u_int)0x63a5c663, (u_int)0x7c84f87c, (u_int)0x7799ee77, (u_int)0x7b8df67b,
+ (u_int)0xf20dfff2, (u_int)0x6bbdd66b, (u_int)0x6fb1de6f, (u_int)0xc55491c5,
+ (u_int)0x30506030, (u_int)0x01030201, (u_int)0x67a9ce67, (u_int)0x2b7d562b,
+ (u_int)0xfe19e7fe, (u_int)0xd762b5d7, (u_int)0xabe64dab, (u_int)0x769aec76,
+ (u_int)0xca458fca, (u_int)0x829d1f82, (u_int)0xc94089c9, (u_int)0x7d87fa7d,
+ (u_int)0xfa15effa, (u_int)0x59ebb259, (u_int)0x47c98e47, (u_int)0xf00bfbf0,
+ (u_int)0xadec41ad, (u_int)0xd467b3d4, (u_int)0xa2fd5fa2, (u_int)0xafea45af,
+ (u_int)0x9cbf239c, (u_int)0xa4f753a4, (u_int)0x7296e472, (u_int)0xc05b9bc0,
+ (u_int)0xb7c275b7, (u_int)0xfd1ce1fd, (u_int)0x93ae3d93, (u_int)0x266a4c26,
+ (u_int)0x365a6c36, (u_int)0x3f417e3f, (u_int)0xf702f5f7, (u_int)0xcc4f83cc,
+ (u_int)0x345c6834, (u_int)0xa5f451a5, (u_int)0xe534d1e5, (u_int)0xf108f9f1,
+ (u_int)0x7193e271, (u_int)0xd873abd8, (u_int)0x31536231, (u_int)0x153f2a15,
+ (u_int)0x040c0804, (u_int)0xc75295c7, (u_int)0x23654623, (u_int)0xc35e9dc3,
+ (u_int)0x18283018, (u_int)0x96a13796, (u_int)0x050f0a05, (u_int)0x9ab52f9a,
+ (u_int)0x07090e07, (u_int)0x12362412, (u_int)0x809b1b80, (u_int)0xe23ddfe2,
+ (u_int)0xeb26cdeb, (u_int)0x27694e27, (u_int)0xb2cd7fb2, (u_int)0x759fea75,
+ (u_int)0x091b1209, (u_int)0x839e1d83, (u_int)0x2c74582c, (u_int)0x1a2e341a,
+ (u_int)0x1b2d361b, (u_int)0x6eb2dc6e, (u_int)0x5aeeb45a, (u_int)0xa0fb5ba0,
+ (u_int)0x52f6a452, (u_int)0x3b4d763b, (u_int)0xd661b7d6, (u_int)0xb3ce7db3,
+ (u_int)0x297b5229, (u_int)0xe33edde3, (u_int)0x2f715e2f, (u_int)0x84971384,
+ (u_int)0x53f5a653, (u_int)0xd168b9d1, (u_int)0x00000000, (u_int)0xed2cc1ed,
+ (u_int)0x20604020, (u_int)0xfc1fe3fc, (u_int)0xb1c879b1, (u_int)0x5bedb65b,
+ (u_int)0x6abed46a, (u_int)0xcb468dcb, (u_int)0xbed967be, (u_int)0x394b7239,
+ (u_int)0x4ade944a, (u_int)0x4cd4984c, (u_int)0x58e8b058, (u_int)0xcf4a85cf,
+ (u_int)0xd06bbbd0, (u_int)0xef2ac5ef, (u_int)0xaae54faa, (u_int)0xfb16edfb,
+ (u_int)0x43c58643, (u_int)0x4dd79a4d, (u_int)0x33556633, (u_int)0x85941185,
+ (u_int)0x45cf8a45, (u_int)0xf910e9f9, (u_int)0x02060402, (u_int)0x7f81fe7f,
+ (u_int)0x50f0a050, (u_int)0x3c44783c, (u_int)0x9fba259f, (u_int)0xa8e34ba8,
+ (u_int)0x51f3a251, (u_int)0xa3fe5da3, (u_int)0x40c08040, (u_int)0x8f8a058f,
+ (u_int)0x92ad3f92, (u_int)0x9dbc219d, (u_int)0x38487038, (u_int)0xf504f1f5,
+ (u_int)0xbcdf63bc, (u_int)0xb6c177b6, (u_int)0xda75afda, (u_int)0x21634221,
+ (u_int)0x10302010, (u_int)0xff1ae5ff, (u_int)0xf30efdf3, (u_int)0xd26dbfd2,
+ (u_int)0xcd4c81cd, (u_int)0x0c14180c, (u_int)0x13352613, (u_int)0xec2fc3ec,
+ (u_int)0x5fe1be5f, (u_int)0x97a23597, (u_int)0x44cc8844, (u_int)0x17392e17,
+ (u_int)0xc45793c4, (u_int)0xa7f255a7, (u_int)0x7e82fc7e, (u_int)0x3d477a3d,
+ (u_int)0x64acc864, (u_int)0x5de7ba5d, (u_int)0x192b3219, (u_int)0x7395e673,
+ (u_int)0x60a0c060, (u_int)0x81981981, (u_int)0x4fd19e4f, (u_int)0xdc7fa3dc,
+ (u_int)0x22664422, (u_int)0x2a7e542a, (u_int)0x90ab3b90, (u_int)0x88830b88,
+ (u_int)0x46ca8c46, (u_int)0xee29c7ee, (u_int)0xb8d36bb8, (u_int)0x143c2814,
+ (u_int)0xde79a7de, (u_int)0x5ee2bc5e, (u_int)0x0b1d160b, (u_int)0xdb76addb,
+ (u_int)0xe03bdbe0, (u_int)0x32566432, (u_int)0x3a4e743a, (u_int)0x0a1e140a,
+ (u_int)0x49db9249, (u_int)0x060a0c06, (u_int)0x246c4824, (u_int)0x5ce4b85c,
+ (u_int)0xc25d9fc2, (u_int)0xd36ebdd3, (u_int)0xacef43ac, (u_int)0x62a6c462,
+ (u_int)0x91a83991, (u_int)0x95a43195, (u_int)0xe437d3e4, (u_int)0x798bf279,
+ (u_int)0xe732d5e7, (u_int)0xc8438bc8, (u_int)0x37596e37, (u_int)0x6db7da6d,
+ (u_int)0x8d8c018d, (u_int)0xd564b1d5, (u_int)0x4ed29c4e, (u_int)0xa9e049a9,
+ (u_int)0x6cb4d86c, (u_int)0x56faac56, (u_int)0xf407f3f4, (u_int)0xea25cfea,
+ (u_int)0x65afca65, (u_int)0x7a8ef47a, (u_int)0xaee947ae, (u_int)0x08181008,
+ (u_int)0xbad56fba, (u_int)0x7888f078, (u_int)0x256f4a25, (u_int)0x2e725c2e,
+ (u_int)0x1c24381c, (u_int)0xa6f157a6, (u_int)0xb4c773b4, (u_int)0xc65197c6,
+ (u_int)0xe823cbe8, (u_int)0xdd7ca1dd, (u_int)0x749ce874, (u_int)0x1f213e1f,
+ (u_int)0x4bdd964b, (u_int)0xbddc61bd, (u_int)0x8b860d8b, (u_int)0x8a850f8a,
+ (u_int)0x7090e070, (u_int)0x3e427c3e, (u_int)0xb5c471b5, (u_int)0x66aacc66,
+ (u_int)0x48d89048, (u_int)0x03050603, (u_int)0xf601f7f6, (u_int)0x0e121c0e,
+ (u_int)0x61a3c261, (u_int)0x355f6a35, (u_int)0x57f9ae57, (u_int)0xb9d069b9,
+ (u_int)0x86911786, (u_int)0xc15899c1, (u_int)0x1d273a1d, (u_int)0x9eb9279e,
+ (u_int)0xe138d9e1, (u_int)0xf813ebf8, (u_int)0x98b32b98, (u_int)0x11332211,
+ (u_int)0x69bbd269, (u_int)0xd970a9d9, (u_int)0x8e89078e, (u_int)0x94a73394,
+ (u_int)0x9bb62d9b, (u_int)0x1e223c1e, (u_int)0x87921587, (u_int)0xe920c9e9,
+ (u_int)0xce4987ce, (u_int)0x55ffaa55, (u_int)0x28785028, (u_int)0xdf7aa5df,
+ (u_int)0x8c8f038c, (u_int)0xa1f859a1, (u_int)0x89800989, (u_int)0x0d171a0d,
+ (u_int)0xbfda65bf, (u_int)0xe631d7e6, (u_int)0x42c68442, (u_int)0x68b8d068,
+ (u_int)0x41c38241, (u_int)0x99b02999, (u_int)0x2d775a2d, (u_int)0x0f111e0f,
+ (u_int)0xb0cb7bb0, (u_int)0x54fca854, (u_int)0xbbd66dbb, (u_int)0x163a2c16,
};
static const u32 Te3[256] = {
- 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
- 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
- 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
- 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
- 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
- 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
- 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
- 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
- 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
- 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
- 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
- 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
- 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
- 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
- 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
- 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
- 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
- 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
- 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
- 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
- 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
- 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
- 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
- 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
- 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
- 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
- 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
- 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
- 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
- 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
- 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
- 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
- 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
- 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
- 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
- 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
- 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
- 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
- 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
- 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
- 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
- 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
- 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
- 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
- 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
- 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
- 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
- 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
- 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
- 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
- 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
- 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
- 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
- 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
- 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
- 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
- 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
- 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
- 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
- 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
- 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
- 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
- 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
- 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
+ (u_int)0x6363a5c6, (u_int)0x7c7c84f8, (u_int)0x777799ee, (u_int)0x7b7b8df6,
+ (u_int)0xf2f20dff, (u_int)0x6b6bbdd6, (u_int)0x6f6fb1de, (u_int)0xc5c55491,
+ (u_int)0x30305060, (u_int)0x01010302, (u_int)0x6767a9ce, (u_int)0x2b2b7d56,
+ (u_int)0xfefe19e7, (u_int)0xd7d762b5, (u_int)0xababe64d, (u_int)0x76769aec,
+ (u_int)0xcaca458f, (u_int)0x82829d1f, (u_int)0xc9c94089, (u_int)0x7d7d87fa,
+ (u_int)0xfafa15ef, (u_int)0x5959ebb2, (u_int)0x4747c98e, (u_int)0xf0f00bfb,
+ (u_int)0xadadec41, (u_int)0xd4d467b3, (u_int)0xa2a2fd5f, (u_int)0xafafea45,
+ (u_int)0x9c9cbf23, (u_int)0xa4a4f753, (u_int)0x727296e4, (u_int)0xc0c05b9b,
+ (u_int)0xb7b7c275, (u_int)0xfdfd1ce1, (u_int)0x9393ae3d, (u_int)0x26266a4c,
+ (u_int)0x36365a6c, (u_int)0x3f3f417e, (u_int)0xf7f702f5, (u_int)0xcccc4f83,
+ (u_int)0x34345c68, (u_int)0xa5a5f451, (u_int)0xe5e534d1, (u_int)0xf1f108f9,
+ (u_int)0x717193e2, (u_int)0xd8d873ab, (u_int)0x31315362, (u_int)0x15153f2a,
+ (u_int)0x04040c08, (u_int)0xc7c75295, (u_int)0x23236546, (u_int)0xc3c35e9d,
+ (u_int)0x18182830, (u_int)0x9696a137, (u_int)0x05050f0a, (u_int)0x9a9ab52f,
+ (u_int)0x0707090e, (u_int)0x12123624, (u_int)0x80809b1b, (u_int)0xe2e23ddf,
+ (u_int)0xebeb26cd, (u_int)0x2727694e, (u_int)0xb2b2cd7f, (u_int)0x75759fea,
+ (u_int)0x09091b12, (u_int)0x83839e1d, (u_int)0x2c2c7458, (u_int)0x1a1a2e34,
+ (u_int)0x1b1b2d36, (u_int)0x6e6eb2dc, (u_int)0x5a5aeeb4, (u_int)0xa0a0fb5b,
+ (u_int)0x5252f6a4, (u_int)0x3b3b4d76, (u_int)0xd6d661b7, (u_int)0xb3b3ce7d,
+ (u_int)0x29297b52, (u_int)0xe3e33edd, (u_int)0x2f2f715e, (u_int)0x84849713,
+ (u_int)0x5353f5a6, (u_int)0xd1d168b9, (u_int)0x00000000, (u_int)0xeded2cc1,
+ (u_int)0x20206040, (u_int)0xfcfc1fe3, (u_int)0xb1b1c879, (u_int)0x5b5bedb6,
+ (u_int)0x6a6abed4, (u_int)0xcbcb468d, (u_int)0xbebed967, (u_int)0x39394b72,
+ (u_int)0x4a4ade94, (u_int)0x4c4cd498, (u_int)0x5858e8b0, (u_int)0xcfcf4a85,
+ (u_int)0xd0d06bbb, (u_int)0xefef2ac5, (u_int)0xaaaae54f, (u_int)0xfbfb16ed,
+ (u_int)0x4343c586, (u_int)0x4d4dd79a, (u_int)0x33335566, (u_int)0x85859411,
+ (u_int)0x4545cf8a, (u_int)0xf9f910e9, (u_int)0x02020604, (u_int)0x7f7f81fe,
+ (u_int)0x5050f0a0, (u_int)0x3c3c4478, (u_int)0x9f9fba25, (u_int)0xa8a8e34b,
+ (u_int)0x5151f3a2, (u_int)0xa3a3fe5d, (u_int)0x4040c080, (u_int)0x8f8f8a05,
+ (u_int)0x9292ad3f, (u_int)0x9d9dbc21, (u_int)0x38384870, (u_int)0xf5f504f1,
+ (u_int)0xbcbcdf63, (u_int)0xb6b6c177, (u_int)0xdada75af, (u_int)0x21216342,
+ (u_int)0x10103020, (u_int)0xffff1ae5, (u_int)0xf3f30efd, (u_int)0xd2d26dbf,
+ (u_int)0xcdcd4c81, (u_int)0x0c0c1418, (u_int)0x13133526, (u_int)0xecec2fc3,
+ (u_int)0x5f5fe1be, (u_int)0x9797a235, (u_int)0x4444cc88, (u_int)0x1717392e,
+ (u_int)0xc4c45793, (u_int)0xa7a7f255, (u_int)0x7e7e82fc, (u_int)0x3d3d477a,
+ (u_int)0x6464acc8, (u_int)0x5d5de7ba, (u_int)0x19192b32, (u_int)0x737395e6,
+ (u_int)0x6060a0c0, (u_int)0x81819819, (u_int)0x4f4fd19e, (u_int)0xdcdc7fa3,
+ (u_int)0x22226644, (u_int)0x2a2a7e54, (u_int)0x9090ab3b, (u_int)0x8888830b,
+ (u_int)0x4646ca8c, (u_int)0xeeee29c7, (u_int)0xb8b8d36b, (u_int)0x14143c28,
+ (u_int)0xdede79a7, (u_int)0x5e5ee2bc, (u_int)0x0b0b1d16, (u_int)0xdbdb76ad,
+ (u_int)0xe0e03bdb, (u_int)0x32325664, (u_int)0x3a3a4e74, (u_int)0x0a0a1e14,
+ (u_int)0x4949db92, (u_int)0x06060a0c, (u_int)0x24246c48, (u_int)0x5c5ce4b8,
+ (u_int)0xc2c25d9f, (u_int)0xd3d36ebd, (u_int)0xacacef43, (u_int)0x6262a6c4,
+ (u_int)0x9191a839, (u_int)0x9595a431, (u_int)0xe4e437d3, (u_int)0x79798bf2,
+ (u_int)0xe7e732d5, (u_int)0xc8c8438b, (u_int)0x3737596e, (u_int)0x6d6db7da,
+ (u_int)0x8d8d8c01, (u_int)0xd5d564b1, (u_int)0x4e4ed29c, (u_int)0xa9a9e049,
+ (u_int)0x6c6cb4d8, (u_int)0x5656faac, (u_int)0xf4f407f3, (u_int)0xeaea25cf,
+ (u_int)0x6565afca, (u_int)0x7a7a8ef4, (u_int)0xaeaee947, (u_int)0x08081810,
+ (u_int)0xbabad56f, (u_int)0x787888f0, (u_int)0x25256f4a, (u_int)0x2e2e725c,
+ (u_int)0x1c1c2438, (u_int)0xa6a6f157, (u_int)0xb4b4c773, (u_int)0xc6c65197,
+ (u_int)0xe8e823cb, (u_int)0xdddd7ca1, (u_int)0x74749ce8, (u_int)0x1f1f213e,
+ (u_int)0x4b4bdd96, (u_int)0xbdbddc61, (u_int)0x8b8b860d, (u_int)0x8a8a850f,
+ (u_int)0x707090e0, (u_int)0x3e3e427c, (u_int)0xb5b5c471, (u_int)0x6666aacc,
+ (u_int)0x4848d890, (u_int)0x03030506, (u_int)0xf6f601f7, (u_int)0x0e0e121c,
+ (u_int)0x6161a3c2, (u_int)0x35355f6a, (u_int)0x5757f9ae, (u_int)0xb9b9d069,
+ (u_int)0x86869117, (u_int)0xc1c15899, (u_int)0x1d1d273a, (u_int)0x9e9eb927,
+ (u_int)0xe1e138d9, (u_int)0xf8f813eb, (u_int)0x9898b32b, (u_int)0x11113322,
+ (u_int)0x6969bbd2, (u_int)0xd9d970a9, (u_int)0x8e8e8907, (u_int)0x9494a733,
+ (u_int)0x9b9bb62d, (u_int)0x1e1e223c, (u_int)0x87879215, (u_int)0xe9e920c9,
+ (u_int)0xcece4987, (u_int)0x5555ffaa, (u_int)0x28287850, (u_int)0xdfdf7aa5,
+ (u_int)0x8c8c8f03, (u_int)0xa1a1f859, (u_int)0x89898009, (u_int)0x0d0d171a,
+ (u_int)0xbfbfda65, (u_int)0xe6e631d7, (u_int)0x4242c684, (u_int)0x6868b8d0,
+ (u_int)0x4141c382, (u_int)0x9999b029, (u_int)0x2d2d775a, (u_int)0x0f0f111e,
+ (u_int)0xb0b0cb7b, (u_int)0x5454fca8, (u_int)0xbbbbd66d, (u_int)0x16163a2c,
};
static const u32 Te4[256] = {
- 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,
- 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,
- 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,
- 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,
- 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,
- 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,
- 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,
- 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,
- 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,
- 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,
- 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,
- 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,
- 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,
- 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,
- 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,
- 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,
- 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,
- 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,
- 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,
- 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,
- 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,
- 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,
- 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,
- 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,
- 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,
- 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,
- 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,
- 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,
- 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,
- 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,
- 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,
- 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,
- 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,
- 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,
- 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,
- 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,
- 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,
- 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,
- 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,
- 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,
- 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,
- 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,
- 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,
- 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,
- 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,
- 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,
- 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,
- 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,
- 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,
- 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,
- 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,
- 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,
- 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,
- 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,
- 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,
- 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,
- 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,
- 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,
- 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,
- 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,
- 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,
- 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,
- 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,
- 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,
+ (u_int)0x63636363, (u_int)0x7c7c7c7c, (u_int)0x77777777, (u_int)0x7b7b7b7b,
+ (u_int)0xf2f2f2f2, (u_int)0x6b6b6b6b, (u_int)0x6f6f6f6f, (u_int)0xc5c5c5c5,
+ (u_int)0x30303030, (u_int)0x01010101, (u_int)0x67676767, (u_int)0x2b2b2b2b,
+ (u_int)0xfefefefe, (u_int)0xd7d7d7d7, (u_int)0xabababab, (u_int)0x76767676,
+ (u_int)0xcacacaca, (u_int)0x82828282, (u_int)0xc9c9c9c9, (u_int)0x7d7d7d7d,
+ (u_int)0xfafafafa, (u_int)0x59595959, (u_int)0x47474747, (u_int)0xf0f0f0f0,
+ (u_int)0xadadadad, (u_int)0xd4d4d4d4, (u_int)0xa2a2a2a2, (u_int)0xafafafaf,
+ (u_int)0x9c9c9c9c, (u_int)0xa4a4a4a4, (u_int)0x72727272, (u_int)0xc0c0c0c0,
+ (u_int)0xb7b7b7b7, (u_int)0xfdfdfdfd, (u_int)0x93939393, (u_int)0x26262626,
+ (u_int)0x36363636, (u_int)0x3f3f3f3f, (u_int)0xf7f7f7f7, (u_int)0xcccccccc,
+ (u_int)0x34343434, (u_int)0xa5a5a5a5, (u_int)0xe5e5e5e5, (u_int)0xf1f1f1f1,
+ (u_int)0x71717171, (u_int)0xd8d8d8d8, (u_int)0x31313131, (u_int)0x15151515,
+ (u_int)0x04040404, (u_int)0xc7c7c7c7, (u_int)0x23232323, (u_int)0xc3c3c3c3,
+ (u_int)0x18181818, (u_int)0x96969696, (u_int)0x05050505, (u_int)0x9a9a9a9a,
+ (u_int)0x07070707, (u_int)0x12121212, (u_int)0x80808080, (u_int)0xe2e2e2e2,
+ (u_int)0xebebebeb, (u_int)0x27272727, (u_int)0xb2b2b2b2, (u_int)0x75757575,
+ (u_int)0x09090909, (u_int)0x83838383, (u_int)0x2c2c2c2c, (u_int)0x1a1a1a1a,
+ (u_int)0x1b1b1b1b, (u_int)0x6e6e6e6e, (u_int)0x5a5a5a5a, (u_int)0xa0a0a0a0,
+ (u_int)0x52525252, (u_int)0x3b3b3b3b, (u_int)0xd6d6d6d6, (u_int)0xb3b3b3b3,
+ (u_int)0x29292929, (u_int)0xe3e3e3e3, (u_int)0x2f2f2f2f, (u_int)0x84848484,
+ (u_int)0x53535353, (u_int)0xd1d1d1d1, (u_int)0x00000000, (u_int)0xedededed,
+ (u_int)0x20202020, (u_int)0xfcfcfcfc, (u_int)0xb1b1b1b1, (u_int)0x5b5b5b5b,
+ (u_int)0x6a6a6a6a, (u_int)0xcbcbcbcb, (u_int)0xbebebebe, (u_int)0x39393939,
+ (u_int)0x4a4a4a4a, (u_int)0x4c4c4c4c, (u_int)0x58585858, (u_int)0xcfcfcfcf,
+ (u_int)0xd0d0d0d0, (u_int)0xefefefef, (u_int)0xaaaaaaaa, (u_int)0xfbfbfbfb,
+ (u_int)0x43434343, (u_int)0x4d4d4d4d, (u_int)0x33333333, (u_int)0x85858585,
+ (u_int)0x45454545, (u_int)0xf9f9f9f9, (u_int)0x02020202, (u_int)0x7f7f7f7f,
+ (u_int)0x50505050, (u_int)0x3c3c3c3c, (u_int)0x9f9f9f9f, (u_int)0xa8a8a8a8,
+ (u_int)0x51515151, (u_int)0xa3a3a3a3, (u_int)0x40404040, (u_int)0x8f8f8f8f,
+ (u_int)0x92929292, (u_int)0x9d9d9d9d, (u_int)0x38383838, (u_int)0xf5f5f5f5,
+ (u_int)0xbcbcbcbc, (u_int)0xb6b6b6b6, (u_int)0xdadadada, (u_int)0x21212121,
+ (u_int)0x10101010, (u_int)0xffffffff, (u_int)0xf3f3f3f3, (u_int)0xd2d2d2d2,
+ (u_int)0xcdcdcdcd, (u_int)0x0c0c0c0c, (u_int)0x13131313, (u_int)0xecececec,
+ (u_int)0x5f5f5f5f, (u_int)0x97979797, (u_int)0x44444444, (u_int)0x17171717,
+ (u_int)0xc4c4c4c4, (u_int)0xa7a7a7a7, (u_int)0x7e7e7e7e, (u_int)0x3d3d3d3d,
+ (u_int)0x64646464, (u_int)0x5d5d5d5d, (u_int)0x19191919, (u_int)0x73737373,
+ (u_int)0x60606060, (u_int)0x81818181, (u_int)0x4f4f4f4f, (u_int)0xdcdcdcdc,
+ (u_int)0x22222222, (u_int)0x2a2a2a2a, (u_int)0x90909090, (u_int)0x88888888,
+ (u_int)0x46464646, (u_int)0xeeeeeeee, (u_int)0xb8b8b8b8, (u_int)0x14141414,
+ (u_int)0xdededede, (u_int)0x5e5e5e5e, (u_int)0x0b0b0b0b, (u_int)0xdbdbdbdb,
+ (u_int)0xe0e0e0e0, (u_int)0x32323232, (u_int)0x3a3a3a3a, (u_int)0x0a0a0a0a,
+ (u_int)0x49494949, (u_int)0x06060606, (u_int)0x24242424, (u_int)0x5c5c5c5c,
+ (u_int)0xc2c2c2c2, (u_int)0xd3d3d3d3, (u_int)0xacacacac, (u_int)0x62626262,
+ (u_int)0x91919191, (u_int)0x95959595, (u_int)0xe4e4e4e4, (u_int)0x79797979,
+ (u_int)0xe7e7e7e7, (u_int)0xc8c8c8c8, (u_int)0x37373737, (u_int)0x6d6d6d6d,
+ (u_int)0x8d8d8d8d, (u_int)0xd5d5d5d5, (u_int)0x4e4e4e4e, (u_int)0xa9a9a9a9,
+ (u_int)0x6c6c6c6c, (u_int)0x56565656, (u_int)0xf4f4f4f4, (u_int)0xeaeaeaea,
+ (u_int)0x65656565, (u_int)0x7a7a7a7a, (u_int)0xaeaeaeae, (u_int)0x08080808,
+ (u_int)0xbabababa, (u_int)0x78787878, (u_int)0x25252525, (u_int)0x2e2e2e2e,
+ (u_int)0x1c1c1c1c, (u_int)0xa6a6a6a6, (u_int)0xb4b4b4b4, (u_int)0xc6c6c6c6,
+ (u_int)0xe8e8e8e8, (u_int)0xdddddddd, (u_int)0x74747474, (u_int)0x1f1f1f1f,
+ (u_int)0x4b4b4b4b, (u_int)0xbdbdbdbd, (u_int)0x8b8b8b8b, (u_int)0x8a8a8a8a,
+ (u_int)0x70707070, (u_int)0x3e3e3e3e, (u_int)0xb5b5b5b5, (u_int)0x66666666,
+ (u_int)0x48484848, (u_int)0x03030303, (u_int)0xf6f6f6f6, (u_int)0x0e0e0e0e,
+ (u_int)0x61616161, (u_int)0x35353535, (u_int)0x57575757, (u_int)0xb9b9b9b9,
+ (u_int)0x86868686, (u_int)0xc1c1c1c1, (u_int)0x1d1d1d1d, (u_int)0x9e9e9e9e,
+ (u_int)0xe1e1e1e1, (u_int)0xf8f8f8f8, (u_int)0x98989898, (u_int)0x11111111,
+ (u_int)0x69696969, (u_int)0xd9d9d9d9, (u_int)0x8e8e8e8e, (u_int)0x94949494,
+ (u_int)0x9b9b9b9b, (u_int)0x1e1e1e1e, (u_int)0x87878787, (u_int)0xe9e9e9e9,
+ (u_int)0xcececece, (u_int)0x55555555, (u_int)0x28282828, (u_int)0xdfdfdfdf,
+ (u_int)0x8c8c8c8c, (u_int)0xa1a1a1a1, (u_int)0x89898989, (u_int)0x0d0d0d0d,
+ (u_int)0xbfbfbfbf, (u_int)0xe6e6e6e6, (u_int)0x42424242, (u_int)0x68686868,
+ (u_int)0x41414141, (u_int)0x99999999, (u_int)0x2d2d2d2d, (u_int)0x0f0f0f0f,
+ (u_int)0xb0b0b0b0, (u_int)0x54545454, (u_int)0xbbbbbbbb, (u_int)0x16161616,
};
static const u32 Td0[256] = {
- 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U,
- 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U,
- 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U,
- 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU,
- 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U,
- 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U,
- 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU,
- 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U,
- 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU,
- 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U,
- 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U,
- 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U,
- 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U,
- 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU,
- 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U,
- 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU,
- 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U,
- 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU,
- 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U,
- 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U,
- 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U,
- 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU,
- 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U,
- 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU,
- 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U,
- 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU,
- 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U,
- 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU,
- 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU,
- 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U,
- 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU,
- 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U,
- 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU,
- 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U,
- 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U,
- 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U,
- 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU,
- 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U,
- 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U,
- 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU,
- 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U,
- 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U,
- 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U,
- 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U,
- 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U,
- 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU,
- 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U,
- 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U,
- 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U,
- 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U,
- 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U,
- 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU,
- 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU,
- 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU,
- 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU,
- 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U,
- 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U,
- 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU,
- 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU,
- 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U,
- 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU,
- 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U,
- 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U,
- 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U,
+ (u_int)0x51f4a750, (u_int)0x7e416553, (u_int)0x1a17a4c3, (u_int)0x3a275e96,
+ (u_int)0x3bab6bcb, (u_int)0x1f9d45f1, (u_int)0xacfa58ab, (u_int)0x4be30393,
+ (u_int)0x2030fa55, (u_int)0xad766df6, (u_int)0x88cc7691, (u_int)0xf5024c25,
+ (u_int)0x4fe5d7fc, (u_int)0xc52acbd7, (u_int)0x26354480, (u_int)0xb562a38f,
+ (u_int)0xdeb15a49, (u_int)0x25ba1b67, (u_int)0x45ea0e98, (u_int)0x5dfec0e1,
+ (u_int)0xc32f7502, (u_int)0x814cf012, (u_int)0x8d4697a3, (u_int)0x6bd3f9c6,
+ (u_int)0x038f5fe7, (u_int)0x15929c95, (u_int)0xbf6d7aeb, (u_int)0x955259da,
+ (u_int)0xd4be832d, (u_int)0x587421d3, (u_int)0x49e06929, (u_int)0x8ec9c844,
+ (u_int)0x75c2896a, (u_int)0xf48e7978, (u_int)0x99583e6b, (u_int)0x27b971dd,
+ (u_int)0xbee14fb6, (u_int)0xf088ad17, (u_int)0xc920ac66, (u_int)0x7dce3ab4,
+ (u_int)0x63df4a18, (u_int)0xe51a3182, (u_int)0x97513360, (u_int)0x62537f45,
+ (u_int)0xb16477e0, (u_int)0xbb6bae84, (u_int)0xfe81a01c, (u_int)0xf9082b94,
+ (u_int)0x70486858, (u_int)0x8f45fd19, (u_int)0x94de6c87, (u_int)0x527bf8b7,
+ (u_int)0xab73d323, (u_int)0x724b02e2, (u_int)0xe31f8f57, (u_int)0x6655ab2a,
+ (u_int)0xb2eb2807, (u_int)0x2fb5c203, (u_int)0x86c57b9a, (u_int)0xd33708a5,
+ (u_int)0x302887f2, (u_int)0x23bfa5b2, (u_int)0x02036aba, (u_int)0xed16825c,
+ (u_int)0x8acf1c2b, (u_int)0xa779b492, (u_int)0xf307f2f0, (u_int)0x4e69e2a1,
+ (u_int)0x65daf4cd, (u_int)0x0605bed5, (u_int)0xd134621f, (u_int)0xc4a6fe8a,
+ (u_int)0x342e539d, (u_int)0xa2f355a0, (u_int)0x058ae132, (u_int)0xa4f6eb75,
+ (u_int)0x0b83ec39, (u_int)0x4060efaa, (u_int)0x5e719f06, (u_int)0xbd6e1051,
+ (u_int)0x3e218af9, (u_int)0x96dd063d, (u_int)0xdd3e05ae, (u_int)0x4de6bd46,
+ (u_int)0x91548db5, (u_int)0x71c45d05, (u_int)0x0406d46f, (u_int)0x605015ff,
+ (u_int)0x1998fb24, (u_int)0xd6bde997, (u_int)0x894043cc, (u_int)0x67d99e77,
+ (u_int)0xb0e842bd, (u_int)0x07898b88, (u_int)0xe7195b38, (u_int)0x79c8eedb,
+ (u_int)0xa17c0a47, (u_int)0x7c420fe9, (u_int)0xf8841ec9, (u_int)0x00000000,
+ (u_int)0x09808683, (u_int)0x322bed48, (u_int)0x1e1170ac, (u_int)0x6c5a724e,
+ (u_int)0xfd0efffb, (u_int)0x0f853856, (u_int)0x3daed51e, (u_int)0x362d3927,
+ (u_int)0x0a0fd964, (u_int)0x685ca621, (u_int)0x9b5b54d1, (u_int)0x24362e3a,
+ (u_int)0x0c0a67b1, (u_int)0x9357e70f, (u_int)0xb4ee96d2, (u_int)0x1b9b919e,
+ (u_int)0x80c0c54f, (u_int)0x61dc20a2, (u_int)0x5a774b69, (u_int)0x1c121a16,
+ (u_int)0xe293ba0a, (u_int)0xc0a02ae5, (u_int)0x3c22e043, (u_int)0x121b171d,
+ (u_int)0x0e090d0b, (u_int)0xf28bc7ad, (u_int)0x2db6a8b9, (u_int)0x141ea9c8,
+ (u_int)0x57f11985, (u_int)0xaf75074c, (u_int)0xee99ddbb, (u_int)0xa37f60fd,
+ (u_int)0xf701269f, (u_int)0x5c72f5bc, (u_int)0x44663bc5, (u_int)0x5bfb7e34,
+ (u_int)0x8b432976, (u_int)0xcb23c6dc, (u_int)0xb6edfc68, (u_int)0xb8e4f163,
+ (u_int)0xd731dcca, (u_int)0x42638510, (u_int)0x13972240, (u_int)0x84c61120,
+ (u_int)0x854a247d, (u_int)0xd2bb3df8, (u_int)0xaef93211, (u_int)0xc729a16d,
+ (u_int)0x1d9e2f4b, (u_int)0xdcb230f3, (u_int)0x0d8652ec, (u_int)0x77c1e3d0,
+ (u_int)0x2bb3166c, (u_int)0xa970b999, (u_int)0x119448fa, (u_int)0x47e96422,
+ (u_int)0xa8fc8cc4, (u_int)0xa0f03f1a, (u_int)0x567d2cd8, (u_int)0x223390ef,
+ (u_int)0x87494ec7, (u_int)0xd938d1c1, (u_int)0x8ccaa2fe, (u_int)0x98d40b36,
+ (u_int)0xa6f581cf, (u_int)0xa57ade28, (u_int)0xdab78e26, (u_int)0x3fadbfa4,
+ (u_int)0x2c3a9de4, (u_int)0x5078920d, (u_int)0x6a5fcc9b, (u_int)0x547e4662,
+ (u_int)0xf68d13c2, (u_int)0x90d8b8e8, (u_int)0x2e39f75e, (u_int)0x82c3aff5,
+ (u_int)0x9f5d80be, (u_int)0x69d0937c, (u_int)0x6fd52da9, (u_int)0xcf2512b3,
+ (u_int)0xc8ac993b, (u_int)0x10187da7, (u_int)0xe89c636e, (u_int)0xdb3bbb7b,
+ (u_int)0xcd267809, (u_int)0x6e5918f4, (u_int)0xec9ab701, (u_int)0x834f9aa8,
+ (u_int)0xe6956e65, (u_int)0xaaffe67e, (u_int)0x21bccf08, (u_int)0xef15e8e6,
+ (u_int)0xbae79bd9, (u_int)0x4a6f36ce, (u_int)0xea9f09d4, (u_int)0x29b07cd6,
+ (u_int)0x31a4b2af, (u_int)0x2a3f2331, (u_int)0xc6a59430, (u_int)0x35a266c0,
+ (u_int)0x744ebc37, (u_int)0xfc82caa6, (u_int)0xe090d0b0, (u_int)0x33a7d815,
+ (u_int)0xf104984a, (u_int)0x41ecdaf7, (u_int)0x7fcd500e, (u_int)0x1791f62f,
+ (u_int)0x764dd68d, (u_int)0x43efb04d, (u_int)0xccaa4d54, (u_int)0xe49604df,
+ (u_int)0x9ed1b5e3, (u_int)0x4c6a881b, (u_int)0xc12c1fb8, (u_int)0x4665517f,
+ (u_int)0x9d5eea04, (u_int)0x018c355d, (u_int)0xfa877473, (u_int)0xfb0b412e,
+ (u_int)0xb3671d5a, (u_int)0x92dbd252, (u_int)0xe9105633, (u_int)0x6dd64713,
+ (u_int)0x9ad7618c, (u_int)0x37a10c7a, (u_int)0x59f8148e, (u_int)0xeb133c89,
+ (u_int)0xcea927ee, (u_int)0xb761c935, (u_int)0xe11ce5ed, (u_int)0x7a47b13c,
+ (u_int)0x9cd2df59, (u_int)0x55f2733f, (u_int)0x1814ce79, (u_int)0x73c737bf,
+ (u_int)0x53f7cdea, (u_int)0x5ffdaa5b, (u_int)0xdf3d6f14, (u_int)0x7844db86,
+ (u_int)0xcaaff381, (u_int)0xb968c43e, (u_int)0x3824342c, (u_int)0xc2a3405f,
+ (u_int)0x161dc372, (u_int)0xbce2250c, (u_int)0x283c498b, (u_int)0xff0d9541,
+ (u_int)0x39a80171, (u_int)0x080cb3de, (u_int)0xd8b4e49c, (u_int)0x6456c190,
+ (u_int)0x7bcb8461, (u_int)0xd532b670, (u_int)0x486c5c74, (u_int)0xd0b85742,
};
static const u32 Td1[256] = {
- 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU,
- 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U,
- 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU,
- 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U,
- 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U,
- 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U,
- 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U,
- 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U,
- 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U,
- 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU,
- 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU,
- 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU,
- 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U,
- 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU,
- 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U,
- 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U,
- 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U,
- 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU,
- 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU,
- 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U,
- 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU,
- 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U,
- 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU,
- 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU,
- 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U,
- 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U,
- 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U,
- 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU,
- 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U,
- 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU,
- 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U,
- 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U,
- 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U,
- 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU,
- 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U,
- 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U,
- 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U,
- 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U,
- 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U,
- 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U,
- 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU,
- 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU,
- 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U,
- 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU,
- 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U,
- 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU,
- 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU,
- 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U,
- 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU,
- 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U,
- 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U,
- 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U,
- 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U,
- 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U,
- 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U,
- 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U,
- 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU,
- 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U,
- 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U,
- 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU,
- 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U,
- 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U,
- 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U,
- 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U,
+ (u_int)0x5051f4a7, (u_int)0x537e4165, (u_int)0xc31a17a4, (u_int)0x963a275e,
+ (u_int)0xcb3bab6b, (u_int)0xf11f9d45, (u_int)0xabacfa58, (u_int)0x934be303,
+ (u_int)0x552030fa, (u_int)0xf6ad766d, (u_int)0x9188cc76, (u_int)0x25f5024c,
+ (u_int)0xfc4fe5d7, (u_int)0xd7c52acb, (u_int)0x80263544, (u_int)0x8fb562a3,
+ (u_int)0x49deb15a, (u_int)0x6725ba1b, (u_int)0x9845ea0e, (u_int)0xe15dfec0,
+ (u_int)0x02c32f75, (u_int)0x12814cf0, (u_int)0xa38d4697, (u_int)0xc66bd3f9,
+ (u_int)0xe7038f5f, (u_int)0x9515929c, (u_int)0xebbf6d7a, (u_int)0xda955259,
+ (u_int)0x2dd4be83, (u_int)0xd3587421, (u_int)0x2949e069, (u_int)0x448ec9c8,
+ (u_int)0x6a75c289, (u_int)0x78f48e79, (u_int)0x6b99583e, (u_int)0xdd27b971,
+ (u_int)0xb6bee14f, (u_int)0x17f088ad, (u_int)0x66c920ac, (u_int)0xb47dce3a,
+ (u_int)0x1863df4a, (u_int)0x82e51a31, (u_int)0x60975133, (u_int)0x4562537f,
+ (u_int)0xe0b16477, (u_int)0x84bb6bae, (u_int)0x1cfe81a0, (u_int)0x94f9082b,
+ (u_int)0x58704868, (u_int)0x198f45fd, (u_int)0x8794de6c, (u_int)0xb7527bf8,
+ (u_int)0x23ab73d3, (u_int)0xe2724b02, (u_int)0x57e31f8f, (u_int)0x2a6655ab,
+ (u_int)0x07b2eb28, (u_int)0x032fb5c2, (u_int)0x9a86c57b, (u_int)0xa5d33708,
+ (u_int)0xf2302887, (u_int)0xb223bfa5, (u_int)0xba02036a, (u_int)0x5ced1682,
+ (u_int)0x2b8acf1c, (u_int)0x92a779b4, (u_int)0xf0f307f2, (u_int)0xa14e69e2,
+ (u_int)0xcd65daf4, (u_int)0xd50605be, (u_int)0x1fd13462, (u_int)0x8ac4a6fe,
+ (u_int)0x9d342e53, (u_int)0xa0a2f355, (u_int)0x32058ae1, (u_int)0x75a4f6eb,
+ (u_int)0x390b83ec, (u_int)0xaa4060ef, (u_int)0x065e719f, (u_int)0x51bd6e10,
+ (u_int)0xf93e218a, (u_int)0x3d96dd06, (u_int)0xaedd3e05, (u_int)0x464de6bd,
+ (u_int)0xb591548d, (u_int)0x0571c45d, (u_int)0x6f0406d4, (u_int)0xff605015,
+ (u_int)0x241998fb, (u_int)0x97d6bde9, (u_int)0xcc894043, (u_int)0x7767d99e,
+ (u_int)0xbdb0e842, (u_int)0x8807898b, (u_int)0x38e7195b, (u_int)0xdb79c8ee,
+ (u_int)0x47a17c0a, (u_int)0xe97c420f, (u_int)0xc9f8841e, (u_int)0x00000000,
+ (u_int)0x83098086, (u_int)0x48322bed, (u_int)0xac1e1170, (u_int)0x4e6c5a72,
+ (u_int)0xfbfd0eff, (u_int)0x560f8538, (u_int)0x1e3daed5, (u_int)0x27362d39,
+ (u_int)0x640a0fd9, (u_int)0x21685ca6, (u_int)0xd19b5b54, (u_int)0x3a24362e,
+ (u_int)0xb10c0a67, (u_int)0x0f9357e7, (u_int)0xd2b4ee96, (u_int)0x9e1b9b91,
+ (u_int)0x4f80c0c5, (u_int)0xa261dc20, (u_int)0x695a774b, (u_int)0x161c121a,
+ (u_int)0x0ae293ba, (u_int)0xe5c0a02a, (u_int)0x433c22e0, (u_int)0x1d121b17,
+ (u_int)0x0b0e090d, (u_int)0xadf28bc7, (u_int)0xb92db6a8, (u_int)0xc8141ea9,
+ (u_int)0x8557f119, (u_int)0x4caf7507, (u_int)0xbbee99dd, (u_int)0xfda37f60,
+ (u_int)0x9ff70126, (u_int)0xbc5c72f5, (u_int)0xc544663b, (u_int)0x345bfb7e,
+ (u_int)0x768b4329, (u_int)0xdccb23c6, (u_int)0x68b6edfc, (u_int)0x63b8e4f1,
+ (u_int)0xcad731dc, (u_int)0x10426385, (u_int)0x40139722, (u_int)0x2084c611,
+ (u_int)0x7d854a24, (u_int)0xf8d2bb3d, (u_int)0x11aef932, (u_int)0x6dc729a1,
+ (u_int)0x4b1d9e2f, (u_int)0xf3dcb230, (u_int)0xec0d8652, (u_int)0xd077c1e3,
+ (u_int)0x6c2bb316, (u_int)0x99a970b9, (u_int)0xfa119448, (u_int)0x2247e964,
+ (u_int)0xc4a8fc8c, (u_int)0x1aa0f03f, (u_int)0xd8567d2c, (u_int)0xef223390,
+ (u_int)0xc787494e, (u_int)0xc1d938d1, (u_int)0xfe8ccaa2, (u_int)0x3698d40b,
+ (u_int)0xcfa6f581, (u_int)0x28a57ade, (u_int)0x26dab78e, (u_int)0xa43fadbf,
+ (u_int)0xe42c3a9d, (u_int)0x0d507892, (u_int)0x9b6a5fcc, (u_int)0x62547e46,
+ (u_int)0xc2f68d13, (u_int)0xe890d8b8, (u_int)0x5e2e39f7, (u_int)0xf582c3af,
+ (u_int)0xbe9f5d80, (u_int)0x7c69d093, (u_int)0xa96fd52d, (u_int)0xb3cf2512,
+ (u_int)0x3bc8ac99, (u_int)0xa710187d, (u_int)0x6ee89c63, (u_int)0x7bdb3bbb,
+ (u_int)0x09cd2678, (u_int)0xf46e5918, (u_int)0x01ec9ab7, (u_int)0xa8834f9a,
+ (u_int)0x65e6956e, (u_int)0x7eaaffe6, (u_int)0x0821bccf, (u_int)0xe6ef15e8,
+ (u_int)0xd9bae79b, (u_int)0xce4a6f36, (u_int)0xd4ea9f09, (u_int)0xd629b07c,
+ (u_int)0xaf31a4b2, (u_int)0x312a3f23, (u_int)0x30c6a594, (u_int)0xc035a266,
+ (u_int)0x37744ebc, (u_int)0xa6fc82ca, (u_int)0xb0e090d0, (u_int)0x1533a7d8,
+ (u_int)0x4af10498, (u_int)0xf741ecda, (u_int)0x0e7fcd50, (u_int)0x2f1791f6,
+ (u_int)0x8d764dd6, (u_int)0x4d43efb0, (u_int)0x54ccaa4d, (u_int)0xdfe49604,
+ (u_int)0xe39ed1b5, (u_int)0x1b4c6a88, (u_int)0xb8c12c1f, (u_int)0x7f466551,
+ (u_int)0x049d5eea, (u_int)0x5d018c35, (u_int)0x73fa8774, (u_int)0x2efb0b41,
+ (u_int)0x5ab3671d, (u_int)0x5292dbd2, (u_int)0x33e91056, (u_int)0x136dd647,
+ (u_int)0x8c9ad761, (u_int)0x7a37a10c, (u_int)0x8e59f814, (u_int)0x89eb133c,
+ (u_int)0xeecea927, (u_int)0x35b761c9, (u_int)0xede11ce5, (u_int)0x3c7a47b1,
+ (u_int)0x599cd2df, (u_int)0x3f55f273, (u_int)0x791814ce, (u_int)0xbf73c737,
+ (u_int)0xea53f7cd, (u_int)0x5b5ffdaa, (u_int)0x14df3d6f, (u_int)0x867844db,
+ (u_int)0x81caaff3, (u_int)0x3eb968c4, (u_int)0x2c382434, (u_int)0x5fc2a340,
+ (u_int)0x72161dc3, (u_int)0x0cbce225, (u_int)0x8b283c49, (u_int)0x41ff0d95,
+ (u_int)0x7139a801, (u_int)0xde080cb3, (u_int)0x9cd8b4e4, (u_int)0x906456c1,
+ (u_int)0x617bcb84, (u_int)0x70d532b6, (u_int)0x74486c5c, (u_int)0x42d0b857,
};
static const u32 Td2[256] = {
- 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U,
- 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U,
- 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U,
- 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U,
- 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU,
- 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U,
- 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U,
- 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U,
- 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U,
- 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU,
- 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U,
- 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U,
- 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU,
- 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U,
- 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U,
- 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U,
- 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U,
- 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U,
- 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U,
- 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU,
+ (u_int)0xa75051f4, (u_int)0x65537e41, (u_int)0xa4c31a17, (u_int)0x5e963a27,
+ (u_int)0x6bcb3bab, (u_int)0x45f11f9d, (u_int)0x58abacfa, (u_int)0x03934be3,
+ (u_int)0xfa552030, (u_int)0x6df6ad76, (u_int)0x769188cc, (u_int)0x4c25f502,
+ (u_int)0xd7fc4fe5, (u_int)0xcbd7c52a, (u_int)0x44802635, (u_int)0xa38fb562,
+ (u_int)0x5a49deb1, (u_int)0x1b6725ba, (u_int)0x0e9845ea, (u_int)0xc0e15dfe,
+ (u_int)0x7502c32f, (u_int)0xf012814c, (u_int)0x97a38d46, (u_int)0xf9c66bd3,
+ (u_int)0x5fe7038f, (u_int)0x9c951592, (u_int)0x7aebbf6d, (u_int)0x59da9552,
+ (u_int)0x832dd4be, (u_int)0x21d35874, (u_int)0x692949e0, (u_int)0xc8448ec9,
+ (u_int)0x896a75c2, (u_int)0x7978f48e, (u_int)0x3e6b9958, (u_int)0x71dd27b9,
+ (u_int)0x4fb6bee1, (u_int)0xad17f088, (u_int)0xac66c920, (u_int)0x3ab47dce,
+ (u_int)0x4a1863df, (u_int)0x3182e51a, (u_int)0x33609751, (u_int)0x7f456253,
+ (u_int)0x77e0b164, (u_int)0xae84bb6b, (u_int)0xa01cfe81, (u_int)0x2b94f908,
+ (u_int)0x68587048, (u_int)0xfd198f45, (u_int)0x6c8794de, (u_int)0xf8b7527b,
+ (u_int)0xd323ab73, (u_int)0x02e2724b, (u_int)0x8f57e31f, (u_int)0xab2a6655,
+ (u_int)0x2807b2eb, (u_int)0xc2032fb5, (u_int)0x7b9a86c5, (u_int)0x08a5d337,
+ (u_int)0x87f23028, (u_int)0xa5b223bf, (u_int)0x6aba0203, (u_int)0x825ced16,
+ (u_int)0x1c2b8acf, (u_int)0xb492a779, (u_int)0xf2f0f307, (u_int)0xe2a14e69,
+ (u_int)0xf4cd65da, (u_int)0xbed50605, (u_int)0x621fd134, (u_int)0xfe8ac4a6,
+ (u_int)0x539d342e, (u_int)0x55a0a2f3, (u_int)0xe132058a, (u_int)0xeb75a4f6,
+ (u_int)0xec390b83, (u_int)0xefaa4060, (u_int)0x9f065e71, (u_int)0x1051bd6e,
- 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U,
- 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U,
- 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U,
- 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U,
- 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U,
- 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU,
- 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU,
- 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U,
- 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU,
- 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U,
- 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU,
- 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU,
- 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU,
- 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU,
- 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U,
- 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U,
- 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U,
- 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U,
- 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U,
- 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U,
- 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U,
- 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU,
- 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU,
- 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U,
- 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U,
- 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU,
- 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU,
- 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U,
- 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U,
- 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U,
- 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U,
- 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U,
- 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U,
- 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U,
- 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU,
- 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U,
- 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U,
- 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U,
- 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U,
- 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U,
- 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U,
- 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU,
- 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U,
- 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U,
+ (u_int)0x8af93e21, (u_int)0x063d96dd, (u_int)0x05aedd3e, (u_int)0xbd464de6,
+ (u_int)0x8db59154, (u_int)0x5d0571c4, (u_int)0xd46f0406, (u_int)0x15ff6050,
+ (u_int)0xfb241998, (u_int)0xe997d6bd, (u_int)0x43cc8940, (u_int)0x9e7767d9,
+ (u_int)0x42bdb0e8, (u_int)0x8b880789, (u_int)0x5b38e719, (u_int)0xeedb79c8,
+ (u_int)0x0a47a17c, (u_int)0x0fe97c42, (u_int)0x1ec9f884, (u_int)0x00000000,
+ (u_int)0x86830980, (u_int)0xed48322b, (u_int)0x70ac1e11, (u_int)0x724e6c5a,
+ (u_int)0xfffbfd0e, (u_int)0x38560f85, (u_int)0xd51e3dae, (u_int)0x3927362d,
+ (u_int)0xd9640a0f, (u_int)0xa621685c, (u_int)0x54d19b5b, (u_int)0x2e3a2436,
+ (u_int)0x67b10c0a, (u_int)0xe70f9357, (u_int)0x96d2b4ee, (u_int)0x919e1b9b,
+ (u_int)0xc54f80c0, (u_int)0x20a261dc, (u_int)0x4b695a77, (u_int)0x1a161c12,
+ (u_int)0xba0ae293, (u_int)0x2ae5c0a0, (u_int)0xe0433c22, (u_int)0x171d121b,
+ (u_int)0x0d0b0e09, (u_int)0xc7adf28b, (u_int)0xa8b92db6, (u_int)0xa9c8141e,
+ (u_int)0x198557f1, (u_int)0x074caf75, (u_int)0xddbbee99, (u_int)0x60fda37f,
+ (u_int)0x269ff701, (u_int)0xf5bc5c72, (u_int)0x3bc54466, (u_int)0x7e345bfb,
+ (u_int)0x29768b43, (u_int)0xc6dccb23, (u_int)0xfc68b6ed, (u_int)0xf163b8e4,
+ (u_int)0xdccad731, (u_int)0x85104263, (u_int)0x22401397, (u_int)0x112084c6,
+ (u_int)0x247d854a, (u_int)0x3df8d2bb, (u_int)0x3211aef9, (u_int)0xa16dc729,
+ (u_int)0x2f4b1d9e, (u_int)0x30f3dcb2, (u_int)0x52ec0d86, (u_int)0xe3d077c1,
+ (u_int)0x166c2bb3, (u_int)0xb999a970, (u_int)0x48fa1194, (u_int)0x642247e9,
+ (u_int)0x8cc4a8fc, (u_int)0x3f1aa0f0, (u_int)0x2cd8567d, (u_int)0x90ef2233,
+ (u_int)0x4ec78749, (u_int)0xd1c1d938, (u_int)0xa2fe8cca, (u_int)0x0b3698d4,
+ (u_int)0x81cfa6f5, (u_int)0xde28a57a, (u_int)0x8e26dab7, (u_int)0xbfa43fad,
+ (u_int)0x9de42c3a, (u_int)0x920d5078, (u_int)0xcc9b6a5f, (u_int)0x4662547e,
+ (u_int)0x13c2f68d, (u_int)0xb8e890d8, (u_int)0xf75e2e39, (u_int)0xaff582c3,
+ (u_int)0x80be9f5d, (u_int)0x937c69d0, (u_int)0x2da96fd5, (u_int)0x12b3cf25,
+ (u_int)0x993bc8ac, (u_int)0x7da71018, (u_int)0x636ee89c, (u_int)0xbb7bdb3b,
+ (u_int)0x7809cd26, (u_int)0x18f46e59, (u_int)0xb701ec9a, (u_int)0x9aa8834f,
+ (u_int)0x6e65e695, (u_int)0xe67eaaff, (u_int)0xcf0821bc, (u_int)0xe8e6ef15,
+ (u_int)0x9bd9bae7, (u_int)0x36ce4a6f, (u_int)0x09d4ea9f, (u_int)0x7cd629b0,
+ (u_int)0xb2af31a4, (u_int)0x23312a3f, (u_int)0x9430c6a5, (u_int)0x66c035a2,
+ (u_int)0xbc37744e, (u_int)0xcaa6fc82, (u_int)0xd0b0e090, (u_int)0xd81533a7,
+ (u_int)0x984af104, (u_int)0xdaf741ec, (u_int)0x500e7fcd, (u_int)0xf62f1791,
+ (u_int)0xd68d764d, (u_int)0xb04d43ef, (u_int)0x4d54ccaa, (u_int)0x04dfe496,
+ (u_int)0xb5e39ed1, (u_int)0x881b4c6a, (u_int)0x1fb8c12c, (u_int)0x517f4665,
+ (u_int)0xea049d5e, (u_int)0x355d018c, (u_int)0x7473fa87, (u_int)0x412efb0b,
+ (u_int)0x1d5ab367, (u_int)0xd25292db, (u_int)0x5633e910, (u_int)0x47136dd6,
+ (u_int)0x618c9ad7, (u_int)0x0c7a37a1, (u_int)0x148e59f8, (u_int)0x3c89eb13,
+ (u_int)0x27eecea9, (u_int)0xc935b761, (u_int)0xe5ede11c, (u_int)0xb13c7a47,
+ (u_int)0xdf599cd2, (u_int)0x733f55f2, (u_int)0xce791814, (u_int)0x37bf73c7,
+ (u_int)0xcdea53f7, (u_int)0xaa5b5ffd, (u_int)0x6f14df3d, (u_int)0xdb867844,
+ (u_int)0xf381caaf, (u_int)0xc43eb968, (u_int)0x342c3824, (u_int)0x405fc2a3,
+ (u_int)0xc372161d, (u_int)0x250cbce2, (u_int)0x498b283c, (u_int)0x9541ff0d,
+ (u_int)0x017139a8, (u_int)0xb3de080c, (u_int)0xe49cd8b4, (u_int)0xc1906456,
+ (u_int)0x84617bcb, (u_int)0xb670d532, (u_int)0x5c74486c, (u_int)0x5742d0b8,
};
static const u32 Td3[256] = {
- 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU,
- 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU,
- 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U,
- 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U,
- 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU,
- 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU,
- 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U,
- 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU,
- 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U,
- 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU,
- 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U,
- 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U,
- 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U,
- 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U,
- 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U,
- 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU,
- 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU,
- 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U,
- 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U,
- 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU,
- 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU,
- 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U,
- 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U,
- 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U,
- 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U,
- 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU,
- 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U,
- 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U,
- 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU,
- 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU,
- 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U,
- 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U,
- 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U,
- 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU,
- 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U,
- 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U,
- 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U,
- 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U,
- 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U,
- 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U,
- 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U,
- 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU,
- 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U,
- 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U,
- 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU,
- 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU,
- 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U,
- 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU,
- 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U,
- 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U,
- 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U,
- 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U,
- 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U,
- 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U,
- 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU,
- 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU,
- 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU,
- 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU,
- 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U,
- 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U,
- 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U,
- 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU,
- 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U,
- 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U,
+ (u_int)0xf4a75051, (u_int)0x4165537e, (u_int)0x17a4c31a, (u_int)0x275e963a,
+ (u_int)0xab6bcb3b, (u_int)0x9d45f11f, (u_int)0xfa58abac, (u_int)0xe303934b,
+ (u_int)0x30fa5520, (u_int)0x766df6ad, (u_int)0xcc769188, (u_int)0x024c25f5,
+ (u_int)0xe5d7fc4f, (u_int)0x2acbd7c5, (u_int)0x35448026, (u_int)0x62a38fb5,
+ (u_int)0xb15a49de, (u_int)0xba1b6725, (u_int)0xea0e9845, (u_int)0xfec0e15d,
+ (u_int)0x2f7502c3, (u_int)0x4cf01281, (u_int)0x4697a38d, (u_int)0xd3f9c66b,
+ (u_int)0x8f5fe703, (u_int)0x929c9515, (u_int)0x6d7aebbf, (u_int)0x5259da95,
+ (u_int)0xbe832dd4, (u_int)0x7421d358, (u_int)0xe0692949, (u_int)0xc9c8448e,
+ (u_int)0xc2896a75, (u_int)0x8e7978f4, (u_int)0x583e6b99, (u_int)0xb971dd27,
+ (u_int)0xe14fb6be, (u_int)0x88ad17f0, (u_int)0x20ac66c9, (u_int)0xce3ab47d,
+ (u_int)0xdf4a1863, (u_int)0x1a3182e5, (u_int)0x51336097, (u_int)0x537f4562,
+ (u_int)0x6477e0b1, (u_int)0x6bae84bb, (u_int)0x81a01cfe, (u_int)0x082b94f9,
+ (u_int)0x48685870, (u_int)0x45fd198f, (u_int)0xde6c8794, (u_int)0x7bf8b752,
+ (u_int)0x73d323ab, (u_int)0x4b02e272, (u_int)0x1f8f57e3, (u_int)0x55ab2a66,
+ (u_int)0xeb2807b2, (u_int)0xb5c2032f, (u_int)0xc57b9a86, (u_int)0x3708a5d3,
+ (u_int)0x2887f230, (u_int)0xbfa5b223, (u_int)0x036aba02, (u_int)0x16825ced,
+ (u_int)0xcf1c2b8a, (u_int)0x79b492a7, (u_int)0x07f2f0f3, (u_int)0x69e2a14e,
+ (u_int)0xdaf4cd65, (u_int)0x05bed506, (u_int)0x34621fd1, (u_int)0xa6fe8ac4,
+ (u_int)0x2e539d34, (u_int)0xf355a0a2, (u_int)0x8ae13205, (u_int)0xf6eb75a4,
+ (u_int)0x83ec390b, (u_int)0x60efaa40, (u_int)0x719f065e, (u_int)0x6e1051bd,
+ (u_int)0x218af93e, (u_int)0xdd063d96, (u_int)0x3e05aedd, (u_int)0xe6bd464d,
+ (u_int)0x548db591, (u_int)0xc45d0571, (u_int)0x06d46f04, (u_int)0x5015ff60,
+ (u_int)0x98fb2419, (u_int)0xbde997d6, (u_int)0x4043cc89, (u_int)0xd99e7767,
+ (u_int)0xe842bdb0, (u_int)0x898b8807, (u_int)0x195b38e7, (u_int)0xc8eedb79,
+ (u_int)0x7c0a47a1, (u_int)0x420fe97c, (u_int)0x841ec9f8, (u_int)0x00000000,
+ (u_int)0x80868309, (u_int)0x2bed4832, (u_int)0x1170ac1e, (u_int)0x5a724e6c,
+ (u_int)0x0efffbfd, (u_int)0x8538560f, (u_int)0xaed51e3d, (u_int)0x2d392736,
+ (u_int)0x0fd9640a, (u_int)0x5ca62168, (u_int)0x5b54d19b, (u_int)0x362e3a24,
+ (u_int)0x0a67b10c, (u_int)0x57e70f93, (u_int)0xee96d2b4, (u_int)0x9b919e1b,
+ (u_int)0xc0c54f80, (u_int)0xdc20a261, (u_int)0x774b695a, (u_int)0x121a161c,
+ (u_int)0x93ba0ae2, (u_int)0xa02ae5c0, (u_int)0x22e0433c, (u_int)0x1b171d12,
+ (u_int)0x090d0b0e, (u_int)0x8bc7adf2, (u_int)0xb6a8b92d, (u_int)0x1ea9c814,
+ (u_int)0xf1198557, (u_int)0x75074caf, (u_int)0x99ddbbee, (u_int)0x7f60fda3,
+ (u_int)0x01269ff7, (u_int)0x72f5bc5c, (u_int)0x663bc544, (u_int)0xfb7e345b,
+ (u_int)0x4329768b, (u_int)0x23c6dccb, (u_int)0xedfc68b6, (u_int)0xe4f163b8,
+ (u_int)0x31dccad7, (u_int)0x63851042, (u_int)0x97224013, (u_int)0xc6112084,
+ (u_int)0x4a247d85, (u_int)0xbb3df8d2, (u_int)0xf93211ae, (u_int)0x29a16dc7,
+ (u_int)0x9e2f4b1d, (u_int)0xb230f3dc, (u_int)0x8652ec0d, (u_int)0xc1e3d077,
+ (u_int)0xb3166c2b, (u_int)0x70b999a9, (u_int)0x9448fa11, (u_int)0xe9642247,
+ (u_int)0xfc8cc4a8, (u_int)0xf03f1aa0, (u_int)0x7d2cd856, (u_int)0x3390ef22,
+ (u_int)0x494ec787, (u_int)0x38d1c1d9, (u_int)0xcaa2fe8c, (u_int)0xd40b3698,
+ (u_int)0xf581cfa6, (u_int)0x7ade28a5, (u_int)0xb78e26da, (u_int)0xadbfa43f,
+ (u_int)0x3a9de42c, (u_int)0x78920d50, (u_int)0x5fcc9b6a, (u_int)0x7e466254,
+ (u_int)0x8d13c2f6, (u_int)0xd8b8e890, (u_int)0x39f75e2e, (u_int)0xc3aff582,
+ (u_int)0x5d80be9f, (u_int)0xd0937c69, (u_int)0xd52da96f, (u_int)0x2512b3cf,
+ (u_int)0xac993bc8, (u_int)0x187da710, (u_int)0x9c636ee8, (u_int)0x3bbb7bdb,
+ (u_int)0x267809cd, (u_int)0x5918f46e, (u_int)0x9ab701ec, (u_int)0x4f9aa883,
+ (u_int)0x956e65e6, (u_int)0xffe67eaa, (u_int)0xbccf0821, (u_int)0x15e8e6ef,
+ (u_int)0xe79bd9ba, (u_int)0x6f36ce4a, (u_int)0x9f09d4ea, (u_int)0xb07cd629,
+ (u_int)0xa4b2af31, (u_int)0x3f23312a, (u_int)0xa59430c6, (u_int)0xa266c035,
+ (u_int)0x4ebc3774, (u_int)0x82caa6fc, (u_int)0x90d0b0e0, (u_int)0xa7d81533,
+ (u_int)0x04984af1, (u_int)0xecdaf741, (u_int)0xcd500e7f, (u_int)0x91f62f17,
+ (u_int)0x4dd68d76, (u_int)0xefb04d43, (u_int)0xaa4d54cc, (u_int)0x9604dfe4,
+ (u_int)0xd1b5e39e, (u_int)0x6a881b4c, (u_int)0x2c1fb8c1, (u_int)0x65517f46,
+ (u_int)0x5eea049d, (u_int)0x8c355d01, (u_int)0x877473fa, (u_int)0x0b412efb,
+ (u_int)0x671d5ab3, (u_int)0xdbd25292, (u_int)0x105633e9, (u_int)0xd647136d,
+ (u_int)0xd7618c9a, (u_int)0xa10c7a37, (u_int)0xf8148e59, (u_int)0x133c89eb,
+ (u_int)0xa927eece, (u_int)0x61c935b7, (u_int)0x1ce5ede1, (u_int)0x47b13c7a,
+ (u_int)0xd2df599c, (u_int)0xf2733f55, (u_int)0x14ce7918, (u_int)0xc737bf73,
+ (u_int)0xf7cdea53, (u_int)0xfdaa5b5f, (u_int)0x3d6f14df, (u_int)0x44db8678,
+ (u_int)0xaff381ca, (u_int)0x68c43eb9, (u_int)0x24342c38, (u_int)0xa3405fc2,
+ (u_int)0x1dc37216, (u_int)0xe2250cbc, (u_int)0x3c498b28, (u_int)0x0d9541ff,
+ (u_int)0xa8017139, (u_int)0x0cb3de08, (u_int)0xb4e49cd8, (u_int)0x56c19064,
+ (u_int)0xcb84617b, (u_int)0x32b670d5, (u_int)0x6c5c7448, (u_int)0xb85742d0,
};
static const u32 Td4[256] = {
- 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U,
- 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U,
- 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU,
- 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU,
- 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U,
- 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U,
- 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U,
- 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU,
- 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U,
- 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU,
- 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU,
- 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU,
- 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U,
- 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U,
- 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U,
- 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U,
- 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U,
- 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U,
- 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU,
- 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U,
- 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U,
- 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU,
- 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U,
- 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U,
- 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U,
- 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU,
- 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U,
- 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U,
- 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU,
- 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U,
- 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U,
- 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU,
- 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U,
- 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU,
- 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU,
- 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U,
- 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U,
- 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U,
- 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U,
- 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU,
- 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U,
- 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U,
- 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU,
- 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU,
- 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU,
- 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U,
- 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU,
- 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U,
- 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U,
- 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U,
- 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U,
- 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU,
- 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U,
- 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU,
- 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU,
- 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU,
- 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU,
- 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U,
- 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU,
- 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U,
- 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU,
- 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U,
- 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U,
- 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU,
+ (u_int)0x52525252, (u_int)0x09090909, (u_int)0x6a6a6a6a, (u_int)0xd5d5d5d5,
+ (u_int)0x30303030, (u_int)0x36363636, (u_int)0xa5a5a5a5, (u_int)0x38383838,
+ (u_int)0xbfbfbfbf, (u_int)0x40404040, (u_int)0xa3a3a3a3, (u_int)0x9e9e9e9e,
+ (u_int)0x81818181, (u_int)0xf3f3f3f3, (u_int)0xd7d7d7d7, (u_int)0xfbfbfbfb,
+ (u_int)0x7c7c7c7c, (u_int)0xe3e3e3e3, (u_int)0x39393939, (u_int)0x82828282,
+ (u_int)0x9b9b9b9b, (u_int)0x2f2f2f2f, (u_int)0xffffffff, (u_int)0x87878787,
+ (u_int)0x34343434, (u_int)0x8e8e8e8e, (u_int)0x43434343, (u_int)0x44444444,
+ (u_int)0xc4c4c4c4, (u_int)0xdededede, (u_int)0xe9e9e9e9, (u_int)0xcbcbcbcb,
+ (u_int)0x54545454, (u_int)0x7b7b7b7b, (u_int)0x94949494, (u_int)0x32323232,
+ (u_int)0xa6a6a6a6, (u_int)0xc2c2c2c2, (u_int)0x23232323, (u_int)0x3d3d3d3d,
+ (u_int)0xeeeeeeee, (u_int)0x4c4c4c4c, (u_int)0x95959595, (u_int)0x0b0b0b0b,
+ (u_int)0x42424242, (u_int)0xfafafafa, (u_int)0xc3c3c3c3, (u_int)0x4e4e4e4e,
+ (u_int)0x08080808, (u_int)0x2e2e2e2e, (u_int)0xa1a1a1a1, (u_int)0x66666666,
+ (u_int)0x28282828, (u_int)0xd9d9d9d9, (u_int)0x24242424, (u_int)0xb2b2b2b2,
+ (u_int)0x76767676, (u_int)0x5b5b5b5b, (u_int)0xa2a2a2a2, (u_int)0x49494949,
+ (u_int)0x6d6d6d6d, (u_int)0x8b8b8b8b, (u_int)0xd1d1d1d1, (u_int)0x25252525,
+ (u_int)0x72727272, (u_int)0xf8f8f8f8, (u_int)0xf6f6f6f6, (u_int)0x64646464,
+ (u_int)0x86868686, (u_int)0x68686868, (u_int)0x98989898, (u_int)0x16161616,
+ (u_int)0xd4d4d4d4, (u_int)0xa4a4a4a4, (u_int)0x5c5c5c5c, (u_int)0xcccccccc,
+ (u_int)0x5d5d5d5d, (u_int)0x65656565, (u_int)0xb6b6b6b6, (u_int)0x92929292,
+ (u_int)0x6c6c6c6c, (u_int)0x70707070, (u_int)0x48484848, (u_int)0x50505050,
+ (u_int)0xfdfdfdfd, (u_int)0xedededed, (u_int)0xb9b9b9b9, (u_int)0xdadadada,
+ (u_int)0x5e5e5e5e, (u_int)0x15151515, (u_int)0x46464646, (u_int)0x57575757,
+ (u_int)0xa7a7a7a7, (u_int)0x8d8d8d8d, (u_int)0x9d9d9d9d, (u_int)0x84848484,
+ (u_int)0x90909090, (u_int)0xd8d8d8d8, (u_int)0xabababab, (u_int)0x00000000,
+ (u_int)0x8c8c8c8c, (u_int)0xbcbcbcbc, (u_int)0xd3d3d3d3, (u_int)0x0a0a0a0a,
+ (u_int)0xf7f7f7f7, (u_int)0xe4e4e4e4, (u_int)0x58585858, (u_int)0x05050505,
+ (u_int)0xb8b8b8b8, (u_int)0xb3b3b3b3, (u_int)0x45454545, (u_int)0x06060606,
+ (u_int)0xd0d0d0d0, (u_int)0x2c2c2c2c, (u_int)0x1e1e1e1e, (u_int)0x8f8f8f8f,
+ (u_int)0xcacacaca, (u_int)0x3f3f3f3f, (u_int)0x0f0f0f0f, (u_int)0x02020202,
+ (u_int)0xc1c1c1c1, (u_int)0xafafafaf, (u_int)0xbdbdbdbd, (u_int)0x03030303,
+ (u_int)0x01010101, (u_int)0x13131313, (u_int)0x8a8a8a8a, (u_int)0x6b6b6b6b,
+ (u_int)0x3a3a3a3a, (u_int)0x91919191, (u_int)0x11111111, (u_int)0x41414141,
+ (u_int)0x4f4f4f4f, (u_int)0x67676767, (u_int)0xdcdcdcdc, (u_int)0xeaeaeaea,
+ (u_int)0x97979797, (u_int)0xf2f2f2f2, (u_int)0xcfcfcfcf, (u_int)0xcececece,
+ (u_int)0xf0f0f0f0, (u_int)0xb4b4b4b4, (u_int)0xe6e6e6e6, (u_int)0x73737373,
+ (u_int)0x96969696, (u_int)0xacacacac, (u_int)0x74747474, (u_int)0x22222222,
+ (u_int)0xe7e7e7e7, (u_int)0xadadadad, (u_int)0x35353535, (u_int)0x85858585,
+ (u_int)0xe2e2e2e2, (u_int)0xf9f9f9f9, (u_int)0x37373737, (u_int)0xe8e8e8e8,
+ (u_int)0x1c1c1c1c, (u_int)0x75757575, (u_int)0xdfdfdfdf, (u_int)0x6e6e6e6e,
+ (u_int)0x47474747, (u_int)0xf1f1f1f1, (u_int)0x1a1a1a1a, (u_int)0x71717171,
+ (u_int)0x1d1d1d1d, (u_int)0x29292929, (u_int)0xc5c5c5c5, (u_int)0x89898989,
+ (u_int)0x6f6f6f6f, (u_int)0xb7b7b7b7, (u_int)0x62626262, (u_int)0x0e0e0e0e,
+ (u_int)0xaaaaaaaa, (u_int)0x18181818, (u_int)0xbebebebe, (u_int)0x1b1b1b1b,
+ (u_int)0xfcfcfcfc, (u_int)0x56565656, (u_int)0x3e3e3e3e, (u_int)0x4b4b4b4b,
+ (u_int)0xc6c6c6c6, (u_int)0xd2d2d2d2, (u_int)0x79797979, (u_int)0x20202020,
+ (u_int)0x9a9a9a9a, (u_int)0xdbdbdbdb, (u_int)0xc0c0c0c0, (u_int)0xfefefefe,
+ (u_int)0x78787878, (u_int)0xcdcdcdcd, (u_int)0x5a5a5a5a, (u_int)0xf4f4f4f4,
+ (u_int)0x1f1f1f1f, (u_int)0xdddddddd, (u_int)0xa8a8a8a8, (u_int)0x33333333,
+ (u_int)0x88888888, (u_int)0x07070707, (u_int)0xc7c7c7c7, (u_int)0x31313131,
+ (u_int)0xb1b1b1b1, (u_int)0x12121212, (u_int)0x10101010, (u_int)0x59595959,
+ (u_int)0x27272727, (u_int)0x80808080, (u_int)0xecececec, (u_int)0x5f5f5f5f,
+ (u_int)0x60606060, (u_int)0x51515151, (u_int)0x7f7f7f7f, (u_int)0xa9a9a9a9,
+ (u_int)0x19191919, (u_int)0xb5b5b5b5, (u_int)0x4a4a4a4a, (u_int)0x0d0d0d0d,
+ (u_int)0x2d2d2d2d, (u_int)0xe5e5e5e5, (u_int)0x7a7a7a7a, (u_int)0x9f9f9f9f,
+ (u_int)0x93939393, (u_int)0xc9c9c9c9, (u_int)0x9c9c9c9c, (u_int)0xefefefef,
+ (u_int)0xa0a0a0a0, (u_int)0xe0e0e0e0, (u_int)0x3b3b3b3b, (u_int)0x4d4d4d4d,
+ (u_int)0xaeaeaeae, (u_int)0x2a2a2a2a, (u_int)0xf5f5f5f5, (u_int)0xb0b0b0b0,
+ (u_int)0xc8c8c8c8, (u_int)0xebebebeb, (u_int)0xbbbbbbbb, (u_int)0x3c3c3c3c,
+ (u_int)0x83838383, (u_int)0x53535353, (u_int)0x99999999, (u_int)0x61616161,
+ (u_int)0x17171717, (u_int)0x2b2b2b2b, (u_int)0x04040404, (u_int)0x7e7e7e7e,
+ (u_int)0xbabababa, (u_int)0x77777777, (u_int)0xd6d6d6d6, (u_int)0x26262626,
+ (u_int)0xe1e1e1e1, (u_int)0x69696969, (u_int)0x14141414, (u_int)0x63636363,
+ (u_int)0x55555555, (u_int)0x21212121, (u_int)0x0c0c0c0c, (u_int)0x7d7d7d7d,
};
static const u32 rcon[] = {
0x01000000, 0x02000000, 0x04000000, 0x08000000,
diff --git a/db/crypto/rijndael/rijndael-alg-fst.h b/db/crypto/rijndael/rijndael-alg-fst.h
index 81751ed5c..fe9ce3814 100644
--- a/db/crypto/rijndael/rijndael-alg-fst.h
+++ b/db/crypto/rijndael/rijndael-alg-fst.h
@@ -1,5 +1,5 @@
/*
- * Id: rijndael-alg-fst.h,v 1.2 2002/01/08 18:53:37 sue Exp
+ * $Id: rijndael-alg-fst.h,v 1.2 2002/01/08 18:53:37 sue Exp $
*/
/**
* rijndael-alg-fst.h
diff --git a/db/crypto/rijndael/rijndael-api-fst.c b/db/crypto/rijndael/rijndael-api-fst.c
index 2f75e197c..facd1020e 100644
--- a/db/crypto/rijndael/rijndael-api-fst.c
+++ b/db/crypto/rijndael/rijndael-api-fst.c
@@ -115,16 +115,16 @@ __db_cipherInit(cipher, mode, IV)
/*
* __db_blockEncrypt --
*
- * PUBLIC: int __db_blockEncrypt __P((cipherInstance *, keyInstance *, BYTE *,
- * PUBLIC: size_t, BYTE *));
+ * PUBLIC: int __db_blockEncrypt __P((cipherInstance *, keyInstance *, u_int8_t *,
+ * PUBLIC: size_t, u_int8_t *));
*/
int
__db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
cipherInstance *cipher;
keyInstance *key;
- BYTE *input;
+ u_int8_t *input;
size_t inputLen;
- BYTE *outBuffer;
+ u_int8_t *outBuffer;
{
int i, k, t, numBlocks;
u8 block[16], *iv;
@@ -171,7 +171,7 @@ __db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
memcpy(outBuffer, input, 16);
for (k = 0; k < 128; k++) {
__db_rijndaelEncrypt(key->ek, key->Nr, iv, block);
- outBuffer[k >> 3] ^= (block[0] & 0x80U) >> (k & 7);
+ outBuffer[k >> 3] ^= (block[0] & (u_int)0x80) >> (k & 7);
for (t = 0; t < 15; t++) {
iv[t] = (iv[t] << 1) | (iv[t + 1] >> 7);
}
@@ -201,16 +201,16 @@ __db_blockEncrypt(cipher, key, input, inputLen, outBuffer)
/*
* __db_padEncrypt --
*
- * PUBLIC: int __db_padEncrypt __P((cipherInstance *, keyInstance *, BYTE *,
- * PUBLIC: int, BYTE *));
+ * PUBLIC: int __db_padEncrypt __P((cipherInstance *, keyInstance *, u_int8_t *,
+ * PUBLIC: int, u_int8_t *));
*/
int
__db_padEncrypt(cipher, key, input, inputOctets, outBuffer)
cipherInstance *cipher;
keyInstance *key;
- BYTE *input;
+ u_int8_t *input;
int inputOctets;
- BYTE *outBuffer;
+ u_int8_t *outBuffer;
{
int i, numBlocks, padLen;
u8 block[16], *iv;
@@ -260,7 +260,7 @@ __db_padEncrypt(cipher, key, input, inputOctets, outBuffer)
block[i] = input[i] ^ iv[i];
}
for (i = 16 - padLen; i < 16; i++) {
- block[i] = (BYTE)padLen ^ iv[i];
+ block[i] = (u_int8_t)padLen ^ iv[i];
}
__db_rijndaelEncrypt(key->rk, key->Nr, block, outBuffer);
break;
@@ -275,16 +275,16 @@ __db_padEncrypt(cipher, key, input, inputOctets, outBuffer)
/*
* __db_blockDecrypt --
*
- * PUBLIC: int __db_blockDecrypt __P((cipherInstance *, keyInstance *, BYTE *,
- * PUBLIC: size_t, BYTE *));
+ * PUBLIC: int __db_blockDecrypt __P((cipherInstance *, keyInstance *, u_int8_t *,
+ * PUBLIC: size_t, u_int8_t *));
*/
int
__db_blockDecrypt(cipher, key, input, inputLen, outBuffer)
cipherInstance *cipher;
keyInstance *key;
- BYTE *input;
+ u_int8_t *input;
size_t inputLen;
- BYTE *outBuffer;
+ u_int8_t *outBuffer;
{
int i, k, t, numBlocks;
u8 block[16], *iv;
@@ -335,7 +335,7 @@ __db_blockDecrypt(cipher, key, input, inputLen, outBuffer)
iv[t] = (iv[t] << 1) | (iv[t + 1] >> 7);
}
iv[15] = (iv[15] << 1) | ((input[k >> 3] >> (7 - (k & 7))) & 1);
- outBuffer[k >> 3] ^= (block[0] & 0x80U) >> (k & 7);
+ outBuffer[k >> 3] ^= (block[0] & (u_int)0x80) >> (k & 7);
}
outBuffer += 16;
input += 16;
@@ -352,16 +352,16 @@ __db_blockDecrypt(cipher, key, input, inputLen, outBuffer)
/*
* __db_padDecrypt --
*
- * PUBLIC: int __db_padDecrypt __P((cipherInstance *, keyInstance *, BYTE *,
- * PUBLIC: int, BYTE *));
+ * PUBLIC: int __db_padDecrypt __P((cipherInstance *, keyInstance *, u_int8_t *,
+ * PUBLIC: int, u_int8_t *));
*/
int
__db_padDecrypt(cipher, key, input, inputOctets, outBuffer)
cipherInstance *cipher;
keyInstance *key;
- BYTE *input;
+ u_int8_t *input;
int inputOctets;
- BYTE *outBuffer;
+ u_int8_t *outBuffer;
{
int i, numBlocks, padLen;
u8 block[16];
@@ -457,15 +457,15 @@ __db_padDecrypt(cipher, key, input, inputOctets, outBuffer)
* __db_cipherUpdateRounds --
*
* PUBLIC: int __db_cipherUpdateRounds __P((cipherInstance *, keyInstance *,
- * PUBLIC: BYTE *, int, BYTE *, int));
+ * PUBLIC: u_int8_t *, int, u_int8_t *, int));
*/
int
__db_cipherUpdateRounds(cipher, key, input, inputLen, outBuffer, rounds)
cipherInstance *cipher;
keyInstance *key;
- BYTE *input;
+ u_int8_t *input;
size_t inputLen;
- BYTE *outBuffer;
+ u_int8_t *outBuffer;
int rounds;
{
u8 block[16];
diff --git a/db/crypto/rijndael/rijndael-api-fst.h b/db/crypto/rijndael/rijndael-api-fst.h
index 5f948ef62..4137aa25e 100644
--- a/db/crypto/rijndael/rijndael-api-fst.h
+++ b/db/crypto/rijndael/rijndael-api-fst.h
@@ -1,5 +1,5 @@
/*
- * Id: rijndael-api-fst.h,v 1.4 2002/03/27 04:31:12 bostic Exp
+ * $Id: rijndael-api-fst.h,v 1.5 2003/03/17 19:42:18 bostic Exp $
*/
/**
* rijndael-api-fst.h
@@ -72,11 +72,9 @@
/* Typedefs */
-typedef unsigned char BYTE;
-
/* The structure for key information */
typedef struct {
- BYTE direction; /* Key used for encrypting or decrypting? */
+ u_int8_t direction; /* Key used for encrypting or decrypting? */
int keyLen; /* Length of the key */
char keyMaterial[MAX_KEY_SIZE+1]; /* Raw key data in ASCII, e.g., user input or KAT values */
int Nr; /* key-length-dependent number of rounds */
@@ -86,8 +84,8 @@ typedef struct {
/* The structure for cipher information */
typedef struct { /* changed order of the components */
- BYTE mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */
- BYTE IV[MAX_IV_SIZE]; /* A possible Initialization Vector for ciphering */
+ u_int8_t mode; /* MODE_ECB, MODE_CBC, or MODE_CFB1 */
+ u_int8_t IV[MAX_IV_SIZE]; /* A possible Initialization Vector for ciphering */
} cipherInstance;
#endif /* __RIJNDAEL_API_FST_H */
diff --git a/db/cxx/cxx_db.cpp b/db/cxx/cxx_db.cpp
index d6d15a0bf..de6c983f2 100644
--- a/db/cxx/cxx_db.cpp
+++ b/db/cxx/cxx_db.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: cxx_db.cpp,v 11.71 2002/08/26 22:13:36 mjc Exp ";
+static const char revid[] = "$Id: cxx_db.cpp,v 11.77 2003/04/18 08:36:29 mjc Exp $";
#endif /* not lint */
#include <errno.h>
@@ -39,7 +39,7 @@ int Db::_name _argspec \
\
ret = db->_name _arglist; \
if (!_retok(ret)) \
- DB_ERROR("Db::" # _name, ret, error_policy()); \
+ DB_ERROR(env_, "Db::" # _name, ret, error_policy()); \
return (ret); \
}
@@ -50,14 +50,14 @@ int Db::_name _argspec \
DB *db = unwrap(this); \
\
if (!db) { \
- DB_ERROR("Db::" # _name, EINVAL, error_policy()); \
+ DB_ERROR(env_, "Db::" # _name, EINVAL, error_policy()); \
return (EINVAL); \
} \
if (_cleanup) \
cleanup(); \
ret = db->_name _arglist; \
if (!_retok(ret)) \
- DB_ERROR("Db::" # _name, ret, error_policy()); \
+ DB_ERROR(env_, "Db::" # _name, ret, error_policy()); \
return (ret); \
}
@@ -92,6 +92,7 @@ void Db::_name _argspec \
Db::Db(DbEnv *env, u_int32_t flags)
: imp_(0)
, env_(env)
+, mpf_(0)
, construct_error_(0)
, flags_(0)
, construct_flags_(flags)
@@ -107,7 +108,7 @@ Db::Db(DbEnv *env, u_int32_t flags)
flags_ |= DB_CXX_PRIVATE_ENV;
if ((construct_error_ = initialize()) != 0)
- DB_ERROR("Db::Db", construct_error_, error_policy());
+ DB_ERROR(env_, "Db::Db", construct_error_, error_policy());
}
// If the DB handle is still open, we close it. This is to make stack
@@ -159,6 +160,10 @@ int Db::initialize()
if ((flags_ & DB_CXX_PRIVATE_ENV) != 0)
env_ = new DbEnv(db->dbenv, cxx_flags);
+ // Create a DbMpoolFile from the DB_MPOOLFILE* in the DB handle.
+ mpf_ = new DbMpoolFile();
+ mpf_->imp_ = wrap(db->mpf);
+
return (0);
}
@@ -173,7 +178,6 @@ void Db::cleanup()
if (db != NULL) {
// extra safety
- db->api_internal = 0;
imp_ = 0;
// we must dispose of the DbEnv object if
@@ -187,6 +191,8 @@ void Db::cleanup()
delete env_;
env_ = 0;
}
+
+ delete mpf_;
}
}
@@ -231,7 +237,7 @@ int Db::close(u_int32_t flags)
// the DB* structures.
//
if ((ret = db->close(db, flags)) != 0)
- DB_ERROR("Db::close", ret, error_policy());
+ DB_ERROR(env_, "Db::close", ret, error_policy());
return (ret);
}
@@ -259,9 +265,7 @@ void Db::errx(const char *format, ...)
DB_REAL_ERR(db->dbenv, 0, 0, 1, format);
}
-DB_METHOD(fd, (int *fdp),
- (db, fdp),
- DB_RETOK_STD)
+DB_METHOD(fd, (int *fdp), (db, fdp), DB_RETOK_STD)
int Db::get(DbTxn *txnid, Dbt *key, Dbt *value, u_int32_t flags)
{
@@ -272,9 +276,9 @@ int Db::get(DbTxn *txnid, Dbt *key, Dbt *value, u_int32_t flags)
if (!DB_RETOK_DBGET(ret)) {
if (ret == ENOMEM && DB_OVERFLOWED_DBT(value))
- DB_ERROR_DBT("Db::get", value, error_policy());
+ DB_ERROR_DBT(env_, "Db::get", value, error_policy());
else
- DB_ERROR("Db::get", ret, error_policy());
+ DB_ERROR(env_, "Db::get", ret, error_policy());
}
return (ret);
@@ -286,6 +290,25 @@ int Db::get_byteswapped(int *isswapped)
return (db->get_byteswapped(db, isswapped));
}
+DbEnv *Db::get_env()
+{
+ DB *db = (DB *)unwrapConst(this);
+ DB_ENV *dbenv;
+ (void)db->get_env(db, &dbenv);
+ return (dbenv != NULL ? DbEnv::get_DbEnv(dbenv) : NULL);
+}
+
+DbMpoolFile *Db::get_mpf()
+{
+ return (mpf_);
+}
+
+DB_METHOD(get_dbname, (const char **filenamep, const char **dbnamep),
+ (db, filenamep, dbnamep), DB_RETOK_STD)
+
+DB_METHOD(get_open_flags, (u_int32_t *flagsp),
+ (db, flagsp), DB_RETOK_STD)
+
int Db::get_type(DBTYPE *dbtype)
{
DB *db = (DB *)unwrapConst(this);
@@ -320,7 +343,7 @@ int Db::open(DbTxn *txnid, const char *file, const char *database,
mode);
if (!DB_RETOK_STD(ret))
- DB_ERROR("Db::open", ret, error_policy());
+ DB_ERROR(env_, "Db::open", ret, error_policy());
return (ret);
}
@@ -335,9 +358,9 @@ int Db::pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Dbt *value, u_int32_t flags)
/* The logic here is identical to Db::get - reuse the macro. */
if (!DB_RETOK_DBGET(ret)) {
if (ret == ENOMEM && DB_OVERFLOWED_DBT(value))
- DB_ERROR_DBT("Db::pget", value, error_policy());
+ DB_ERROR_DBT(env_, "Db::pget", value, error_policy());
else
- DB_ERROR("Db::pget", ret, error_policy());
+ DB_ERROR(env_, "Db::pget", ret, error_policy());
}
return (ret);
@@ -412,7 +435,7 @@ extern "C" _rettype _db_##_name##_intercept_c _cargspec \
Db *cxxthis; \
\
DB_ASSERT(cthis != NULL); \
- cxxthis = (Db *)cthis->api_internal; \
+ cxxthis = Db::get_Db(cthis); \
DB_ASSERT(cxxthis != NULL); \
DB_ASSERT(cxxthis->_name##_callback_ != 0); \
\
@@ -523,12 +546,19 @@ int Db::verify(const char *name, const char *subdb,
if (!db)
ret = EINVAL;
- else
+ else {
+ // after a DB->verify (no matter if success or failure),
+ // the underlying DB object must not be accessed,
+ // so we clean up in advance.
+ //
+ cleanup();
+
ret = __db_verify_internal(db, name, subdb, ostr,
_verify_callback_c, flags);
+ }
if (!DB_RETOK_STD(ret))
- DB_ERROR("Db::verify", ret, error_policy());
+ DB_ERROR(env_, "Db::verify", ret, error_policy());
return (ret);
}
@@ -537,36 +567,62 @@ DB_METHOD(set_bt_compare, (bt_compare_fcn_type func),
(db, func), DB_RETOK_STD)
DB_METHOD(set_bt_maxkey, (u_int32_t bt_maxkey),
(db, bt_maxkey), DB_RETOK_STD)
+DB_METHOD(get_bt_minkey, (u_int32_t *bt_minkeyp),
+ (db, bt_minkeyp), DB_RETOK_STD)
DB_METHOD(set_bt_minkey, (u_int32_t bt_minkey),
(db, bt_minkey), DB_RETOK_STD)
DB_METHOD(set_bt_prefix, (bt_prefix_fcn_type func),
(db, func), DB_RETOK_STD)
DB_METHOD(set_dup_compare, (dup_compare_fcn_type func),
(db, func), DB_RETOK_STD)
-DB_METHOD(set_encrypt, (const char *passwd, int flags),
+DB_METHOD(get_encrypt_flags, (u_int32_t *flagsp),
+ (db, flagsp), DB_RETOK_STD)
+DB_METHOD(set_encrypt, (const char *passwd, u_int32_t flags),
(db, passwd, flags), DB_RETOK_STD)
+DB_METHOD_VOID(get_errfile, (FILE **errfilep), (db, errfilep))
DB_METHOD_VOID(set_errfile, (FILE *errfile), (db, errfile))
+DB_METHOD_VOID(get_errpfx, (const char **errpfx), (db, errpfx))
DB_METHOD_VOID(set_errpfx, (const char *errpfx), (db, errpfx))
+DB_METHOD(get_flags, (u_int32_t *flagsp), (db, flagsp),
+ DB_RETOK_STD)
DB_METHOD(set_flags, (u_int32_t flags), (db, flags),
DB_RETOK_STD)
+DB_METHOD(get_h_ffactor, (u_int32_t *h_ffactorp),
+ (db, h_ffactorp), DB_RETOK_STD)
DB_METHOD(set_h_ffactor, (u_int32_t h_ffactor),
(db, h_ffactor), DB_RETOK_STD)
DB_METHOD(set_h_hash, (h_hash_fcn_type func),
(db, func), DB_RETOK_STD)
+DB_METHOD(get_h_nelem, (u_int32_t *h_nelemp),
+ (db, h_nelemp), DB_RETOK_STD)
DB_METHOD(set_h_nelem, (u_int32_t h_nelem),
(db, h_nelem), DB_RETOK_STD)
+DB_METHOD(get_lorder, (int *db_lorderp), (db, db_lorderp),
+ DB_RETOK_STD)
DB_METHOD(set_lorder, (int db_lorder), (db, db_lorder),
DB_RETOK_STD)
+DB_METHOD(get_pagesize, (u_int32_t *db_pagesizep),
+ (db, db_pagesizep), DB_RETOK_STD)
DB_METHOD(set_pagesize, (u_int32_t db_pagesize),
(db, db_pagesize), DB_RETOK_STD)
+DB_METHOD(get_re_delim, (int *re_delimp),
+ (db, re_delimp), DB_RETOK_STD)
DB_METHOD(set_re_delim, (int re_delim),
(db, re_delim), DB_RETOK_STD)
+DB_METHOD(get_re_len, (u_int32_t *re_lenp),
+ (db, re_lenp), DB_RETOK_STD)
DB_METHOD(set_re_len, (u_int32_t re_len),
(db, re_len), DB_RETOK_STD)
+DB_METHOD(get_re_pad, (int *re_padp),
+ (db, re_padp), DB_RETOK_STD)
DB_METHOD(set_re_pad, (int re_pad),
(db, re_pad), DB_RETOK_STD)
-DB_METHOD(set_re_source, (char *re_source),
+DB_METHOD(get_re_source, (const char **re_source),
+ (db, re_source), DB_RETOK_STD)
+DB_METHOD(set_re_source, (const char *re_source),
(db, re_source), DB_RETOK_STD)
+DB_METHOD(get_q_extentsize, (u_int32_t *extentsizep),
+ (db, extentsizep), DB_RETOK_STD)
DB_METHOD(set_q_extentsize, (u_int32_t extentsize),
(db, extentsize), DB_RETOK_STD)
@@ -589,10 +645,10 @@ void Db::set_app_private(void *value)
unwrap(this)->app_private = value;
}
+DB_METHOD(get_cachesize, (u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep),
+ (db, gbytesp, bytesp, ncachep), DB_RETOK_STD)
DB_METHOD(set_cachesize, (u_int32_t gbytes, u_int32_t bytes, int ncache),
(db, gbytes, bytes, ncache), DB_RETOK_STD)
-DB_METHOD(set_cache_priority, (DB_CACHE_PRIORITY priority),
- (db, priority), DB_RETOK_STD)
int Db::set_paniccall(void (*callback)(DbEnv *, int))
{
diff --git a/db/cxx/cxx_dbc.cpp b/db/cxx/cxx_dbc.cpp
index 67ba544b3..9350c97e6 100644
--- a/db/cxx/cxx_dbc.cpp
+++ b/db/cxx/cxx_dbc.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: cxx_dbc.cpp,v 11.55 2002/07/03 21:03:52 bostic Exp ";
+static const char revid[] = "$Id: cxx_dbc.cpp,v 11.58 2003/04/24 15:36:27 bostic Exp $";
#endif /* not lint */
#include <errno.h>
@@ -39,7 +39,8 @@ int Dbc::_name _argspec \
\
ret = dbc->c_##_name _arglist; \
if (!_retok(ret)) \
- DB_ERROR("Dbc::" # _name, ret, ON_ERROR_UNKNOWN); \
+ DB_ERROR(DbEnv::get_DbEnv(dbc->dbp->dbenv), \
+ "Dbc::" # _name, ret, ON_ERROR_UNKNOWN); \
return (ret); \
}
@@ -67,7 +68,8 @@ int Dbc::dup(Dbc** cursorp, u_int32_t _flags)
// The following cast implies that Dbc can be no larger than DBC
*cursorp = (Dbc*)new_cursor;
else
- DB_ERROR("Dbc::dup", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::dup", ret, ON_ERROR_UNKNOWN);
return (ret);
}
@@ -81,11 +83,14 @@ int Dbc::get(Dbt* key, Dbt *data, u_int32_t _flags)
if (!DB_RETOK_DBCGET(ret)) {
if (ret == ENOMEM && DB_OVERFLOWED_DBT(key))
- DB_ERROR_DBT("Dbc::get", key, ON_ERROR_UNKNOWN);
+ DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::get", key, ON_ERROR_UNKNOWN);
else if (ret == ENOMEM && DB_OVERFLOWED_DBT(data))
- DB_ERROR_DBT("Dbc::get", data, ON_ERROR_UNKNOWN);
+ DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::get", data, ON_ERROR_UNKNOWN);
else
- DB_ERROR("Dbc::get", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::get", ret, ON_ERROR_UNKNOWN);
}
return (ret);
@@ -101,11 +106,14 @@ int Dbc::pget(Dbt* key, Dbt *pkey, Dbt *data, u_int32_t _flags)
/* Logic is the same as for Dbc::get - reusing macro. */
if (!DB_RETOK_DBCGET(ret)) {
if (ret == ENOMEM && DB_OVERFLOWED_DBT(key))
- DB_ERROR_DBT("Dbc::pget", key, ON_ERROR_UNKNOWN);
+ DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::pget", key, ON_ERROR_UNKNOWN);
else if (ret == ENOMEM && DB_OVERFLOWED_DBT(data))
- DB_ERROR_DBT("Dbc::pget", data, ON_ERROR_UNKNOWN);
+ DB_ERROR_DBT(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::pget", data, ON_ERROR_UNKNOWN);
else
- DB_ERROR("Dbc::pget", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(dbc->dbp->dbenv),
+ "Dbc::pget", ret, ON_ERROR_UNKNOWN);
}
return (ret);
diff --git a/db/cxx/cxx_dbt.cpp b/db/cxx/cxx_dbt.cpp
index e50e7e572..ab35f2f81 100644
--- a/db/cxx/cxx_dbt.cpp
+++ b/db/cxx/cxx_dbt.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: cxx_dbt.cpp,v 11.53 2002/03/27 04:31:14 bostic Exp ";
+static const char revid[] = "$Id: cxx_dbt.cpp,v 11.54 2003/01/08 04:10:27 bostic Exp $";
#endif /* not lint */
#include <errno.h>
diff --git a/db/cxx/cxx_env.cpp b/db/cxx/cxx_env.cpp
index 63f665a2a..7917c06c1 100644
--- a/db/cxx/cxx_env.cpp
+++ b/db/cxx/cxx_env.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: cxx_env.cpp,v 11.88 2002/08/26 22:13:36 mjc Exp ";
+static const char revid[] = "$Id: cxx_env.cpp,v 11.96 2003/06/30 19:17:48 mjc Exp $";
#endif /* not lint */
#include <errno.h>
@@ -45,7 +45,7 @@ int DbEnv::_name _argspec \
#define DBENV_METHOD(_name, _argspec, _arglist) \
DBENV_METHOD_ERR(_name, _argspec, _arglist, \
- DB_ERROR("DbEnv::" # _name, ret, error_policy()))
+ DB_ERROR(this, "DbEnv::" # _name, ret, error_policy()))
#define DBENV_METHOD_QUIET(_name, _argspec, _arglist) \
int DbEnv::_name _argspec \
@@ -115,26 +115,29 @@ int _app_dispatch_intercept_c(DB_ENV *env, DBT *dbt,
extern "C"
int _rep_send_intercept_c(DB_ENV *env, const DBT *cntrl,
- const DBT *data, int id, u_int32_t flags)
+ const DBT *data, const DB_LSN *lsn, int id,
+ u_int32_t flags)
{
return (DbEnv::_rep_send_intercept(env,
- cntrl, data, id, flags));
+ cntrl, data, lsn, id, flags));
}
void DbEnv::_feedback_intercept(DB_ENV *env, int opcode, int pct)
{
if (env == 0) {
- DB_ERROR("DbEnv::feedback_callback", EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::feedback_callback", EINVAL, ON_ERROR_UNKNOWN);
return;
}
DbEnv *cxxenv = (DbEnv *)env->api1_internal;
if (cxxenv == 0) {
- DB_ERROR("DbEnv::feedback_callback", EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::feedback_callback", EINVAL, ON_ERROR_UNKNOWN);
return;
}
if (cxxenv->feedback_callback_ == 0) {
- DB_ERROR("DbEnv::feedback_callback", EINVAL,
- cxxenv->error_policy());
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::feedback_callback", EINVAL, cxxenv->error_policy());
return;
}
(*cxxenv->feedback_callback_)(cxxenv, opcode, pct);
@@ -143,16 +146,17 @@ void DbEnv::_feedback_intercept(DB_ENV *env, int opcode, int pct)
void DbEnv::_paniccall_intercept(DB_ENV *env, int errval)
{
if (env == 0) {
- DB_ERROR("DbEnv::paniccall_callback", EINVAL,
- ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::paniccall_callback", EINVAL, ON_ERROR_UNKNOWN);
}
DbEnv *cxxenv = (DbEnv *)env->api1_internal;
if (cxxenv == 0) {
- DB_ERROR("DbEnv::paniccall_callback", EINVAL,
- ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::paniccall_callback", EINVAL, ON_ERROR_UNKNOWN);
}
if (cxxenv->paniccall_callback_ == 0) {
- DB_ERROR("DbEnv::paniccall_callback", EINVAL,
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::paniccall_callback", EINVAL,
cxxenv->error_policy());
}
(*cxxenv->paniccall_callback_)(cxxenv, errval);
@@ -162,19 +166,20 @@ int DbEnv::_app_dispatch_intercept(DB_ENV *env, DBT *dbt,
DB_LSN *lsn, db_recops op)
{
if (env == 0) {
- DB_ERROR("DbEnv::app_dispatch_callback",
- EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::app_dispatch_callback", EINVAL, ON_ERROR_UNKNOWN);
return (EINVAL);
}
DbEnv *cxxenv = (DbEnv *)env->api1_internal;
if (cxxenv == 0) {
- DB_ERROR("DbEnv::app_dispatch_callback",
- EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::app_dispatch_callback", EINVAL, ON_ERROR_UNKNOWN);
return (EINVAL);
}
if (cxxenv->app_dispatch_callback_ == 0) {
- DB_ERROR("DbEnv::app_dispatch_callback",
- EINVAL, cxxenv->error_policy());
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::app_dispatch_callback", EINVAL,
+ cxxenv->error_policy());
return (EINVAL);
}
Dbt *cxxdbt = (Dbt *)dbt;
@@ -183,22 +188,24 @@ int DbEnv::_app_dispatch_intercept(DB_ENV *env, DBT *dbt,
}
int DbEnv::_rep_send_intercept(DB_ENV *env, const DBT *cntrl,
- const DBT *data, int id, u_int32_t flags)
+ const DBT *data, const DB_LSN *lsn, int id, u_int32_t flags)
{
-
if (env == 0) {
- DB_ERROR("DbEnv::rep_send_callback", EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::rep_send_callback", EINVAL, ON_ERROR_UNKNOWN);
return (EINVAL);
}
DbEnv *cxxenv = (DbEnv *)env->api1_internal;
if (cxxenv == 0) {
- DB_ERROR("DbEnv::rep_send_callback", EINVAL, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(env),
+ "DbEnv::rep_send_callback", EINVAL, ON_ERROR_UNKNOWN);
return (EINVAL);
}
const Dbt *cxxcntrl = (const Dbt *)cntrl;
+ const DbLsn *cxxlsn = (const DbLsn *)lsn;
Dbt *cxxdata = (Dbt *)data;
return ((*cxxenv->rep_send_callback_)(cxxenv,
- cxxcntrl, cxxdata, id, flags));
+ cxxcntrl, cxxdata, cxxlsn, id, flags));
}
// A truism for the DbEnv object is that there is a valid
@@ -225,7 +232,8 @@ DbEnv::DbEnv(u_int32_t flags)
, rep_send_callback_(0)
{
if ((construct_error_ = initialize(0)) != 0)
- DB_ERROR("DbEnv::DbEnv", construct_error_, error_policy());
+ DB_ERROR(this, "DbEnv::DbEnv", construct_error_,
+ error_policy());
}
DbEnv::DbEnv(DB_ENV *env, u_int32_t flags)
@@ -240,7 +248,8 @@ DbEnv::DbEnv(DB_ENV *env, u_int32_t flags)
, rep_send_callback_(0)
{
if ((construct_error_ = initialize(env)) != 0)
- DB_ERROR("DbEnv::DbEnv", construct_error_, error_policy());
+ DB_ERROR(this, "DbEnv::DbEnv", construct_error_,
+ error_policy());
}
// If the DB_ENV handle is still open, we close it. This is to make stack
@@ -287,7 +296,7 @@ int DbEnv::close(u_int32_t flags)
// the DB* structures.
//
if ((ret = env->close(env, flags)) != 0)
- DB_ERROR("DbEnv::close", ret, error_policy());
+ DB_ERROR(this, "DbEnv::close", ret, error_policy());
return (ret);
}
@@ -334,6 +343,10 @@ void *DbEnv::get_app_private() const
return unwrapConst(this)->app_private;
}
+DBENV_METHOD(get_home, (const char **homep), (dbenv, homep))
+DBENV_METHOD(get_open_flags, (u_int32_t *flagsp), (dbenv, flagsp))
+DBENV_METHOD(get_data_dirs, (const char ***dirspp), (dbenv, dirspp))
+
// used internally during constructor
// to associate an existing DB_ENV with this DbEnv,
// or create a new one.
@@ -362,7 +375,7 @@ DBENV_METHOD_ERR(lock_get,
(u_int32_t locker, u_int32_t flags, const Dbt *obj,
db_lockmode_t lock_mode, DbLock *lock),
(dbenv, locker, flags, obj, lock_mode, &lock->lock_),
- DbEnv::runtime_error_lock_get("DbEnv::lock_get", ret,
+ DbEnv::runtime_error_lock_get(this, "DbEnv::lock_get", ret,
DB_LOCK_GET, lock_mode, obj, *lock,
-1, error_policy()))
DBENV_METHOD(lock_id, (u_int32_t *idp), (dbenv, idp))
@@ -374,7 +387,7 @@ DBENV_METHOD_ERR(lock_vec,
(u_int32_t locker, u_int32_t flags, DB_LOCKREQ list[],
int nlist, DB_LOCKREQ **elist_returned),
(dbenv, locker, flags, list, nlist, elist_returned),
- DbEnv::runtime_error_lock_get("DbEnv::lock_vec", ret,
+ DbEnv::runtime_error_lock_get(this, "DbEnv::lock_vec", ret,
(*elist_returned)->op, (*elist_returned)->mode,
Dbt::get_Dbt((*elist_returned)->obj), DbLock((*elist_returned)->lock),
(*elist_returned) - list, error_policy()))
@@ -413,7 +426,7 @@ int DbEnv::memp_fcreate(DbMpoolFile **dbmfp, u_int32_t flags)
*dbmfp = new DbMpoolFile();
(*dbmfp)->imp_ = wrap(mpf);
} else
- DB_ERROR("DbMpoolFile::f_create", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(this, "DbMpoolFile::f_create", ret, ON_ERROR_UNKNOWN);
return (ret);
}
@@ -445,7 +458,7 @@ int DbEnv::open(const char *db_home, u_int32_t flags, int mode)
ret = env->open(env, db_home, flags, mode);
if (!DB_RETOK_STD(ret))
- DB_ERROR("DbEnv::open", ret, error_policy());
+ DB_ERROR(this, "DbEnv::open", ret, error_policy());
return (ret);
}
@@ -462,7 +475,7 @@ int DbEnv::remove(const char *db_home, u_int32_t flags)
cleanup();
if ((ret = env->remove(env, db_home, flags)) != 0)
- DB_ERROR("DbEnv::remove", ret, error_policy());
+ DB_ERROR(this, "DbEnv::remove", ret, error_policy());
return (ret);
}
@@ -473,7 +486,8 @@ int DbEnv::remove(const char *db_home, u_int32_t flags)
// ON_ERROR_RETURN do nothing here, the caller will return an error
// ON_ERROR_UNKNOWN defer the policy to policy saved in DbEnv::DbEnv
//
-void DbEnv::runtime_error(const char *caller, int error, int error_policy)
+void DbEnv::runtime_error(DbEnv *env,
+ const char *caller, int error, int error_policy)
{
if (error_policy == ON_ERROR_UNKNOWN)
error_policy = last_known_error_policy;
@@ -484,18 +498,28 @@ void DbEnv::runtime_error(const char *caller, int error, int error_policy)
case DB_LOCK_DEADLOCK:
{
DbDeadlockException dl_except(caller);
+ dl_except.set_env(env);
throw dl_except;
}
break;
case DB_RUNRECOVERY:
{
DbRunRecoveryException rr_except(caller);
+ rr_except.set_env(env);
throw rr_except;
}
break;
+ case DB_LOCK_NOTGRANTED:
+ {
+ DbLockNotGrantedException lng_except(caller);
+ lng_except.set_env(env);
+ throw lng_except;
+ }
+ break;
default:
{
DbException except(caller, error);
+ except.set_env(env);
throw except;
}
break;
@@ -505,7 +529,8 @@ void DbEnv::runtime_error(const char *caller, int error, int error_policy)
// Like DbEnv::runtime_error, but issue a DbMemoryException
// based on the fact that this Dbt is not large enough.
-void DbEnv::runtime_error_dbt(const char *caller, Dbt *dbt, int error_policy)
+void DbEnv::runtime_error_dbt(DbEnv *env,
+ const char *caller, Dbt *dbt, int error_policy)
{
if (error_policy == ON_ERROR_UNKNOWN)
error_policy = last_known_error_policy;
@@ -513,6 +538,7 @@ void DbEnv::runtime_error_dbt(const char *caller, Dbt *dbt, int error_policy)
// Creating and throwing the object in two separate
// statements seems to be necessary for HP compilers.
DbMemoryException except(caller, dbt);
+ except.set_env(env);
throw except;
}
}
@@ -520,12 +546,13 @@ void DbEnv::runtime_error_dbt(const char *caller, Dbt *dbt, int error_policy)
// Like DbEnv::runtime_error, but issue a DbLockNotGrantedException,
// or a regular runtime error.
// call regular runtime_error if it
-void DbEnv::runtime_error_lock_get(const char *caller, int error,
+void DbEnv::runtime_error_lock_get(DbEnv *env,
+ const char *caller, int error,
db_lockop_t op, db_lockmode_t mode, const Dbt *obj,
DbLock lock, int index, int error_policy)
{
if (error != DB_LOCK_NOTGRANTED) {
- runtime_error(caller, error, error_policy);
+ runtime_error(env, caller, error, error_policy);
return;
}
@@ -536,6 +563,7 @@ void DbEnv::runtime_error_lock_get(const char *caller, int error,
// statements seems to be necessary for HP compilers.
DbLockNotGrantedException except(caller, op, mode,
obj, lock, index);
+ except.set_env(env);
throw except;
}
}
@@ -562,26 +590,47 @@ void DbEnv::_stream_error_function(const char *prefix, char *message)
// set methods
+DBENV_METHOD_VOID(get_errfile, (FILE **errfilep), (dbenv, errfilep))
DBENV_METHOD_VOID(set_errfile, (FILE *errfile), (dbenv, errfile))
+DBENV_METHOD_VOID(get_errpfx, (const char **errpfxp), (dbenv, errpfxp))
DBENV_METHOD_VOID(set_errpfx, (const char *errpfx), (dbenv, errpfx))
// We keep these alphabetical by field name,
// for comparison with Java's list.
//
DBENV_METHOD(set_data_dir, (const char *dir), (dbenv, dir))
-DBENV_METHOD(set_encrypt, (const char *passwd, int flags),
+DBENV_METHOD(get_encrypt_flags, (u_int32_t *flagsp),
+ (dbenv, flagsp))
+DBENV_METHOD(set_encrypt, (const char *passwd, u_int32_t flags),
(dbenv, passwd, flags))
+DBENV_METHOD(get_lg_bsize, (u_int32_t *bsizep), (dbenv, bsizep))
DBENV_METHOD(set_lg_bsize, (u_int32_t bsize), (dbenv, bsize))
+DBENV_METHOD(get_lg_dir, (const char **dirp), (dbenv, dirp))
DBENV_METHOD(set_lg_dir, (const char *dir), (dbenv, dir))
+DBENV_METHOD(get_lg_max, (u_int32_t *maxp), (dbenv, maxp))
DBENV_METHOD(set_lg_max, (u_int32_t max), (dbenv, max))
+DBENV_METHOD(get_lg_regionmax, (u_int32_t *regionmaxp), (dbenv, regionmaxp))
DBENV_METHOD(set_lg_regionmax, (u_int32_t regionmax), (dbenv, regionmax))
+DBENV_METHOD(get_lk_conflicts, (const u_int8_t **lk_conflictsp, int *lk_maxp),
+ (dbenv, lk_conflictsp, lk_maxp))
+DBENV_METHOD(set_lk_conflicts, (u_int8_t *lk_conflicts, int lk_max),
+ (dbenv, lk_conflicts, lk_max))
+DBENV_METHOD(get_lk_detect, (u_int32_t *detectp), (dbenv, detectp))
DBENV_METHOD(set_lk_detect, (u_int32_t detect), (dbenv, detect))
DBENV_METHOD(set_lk_max, (u_int32_t max), (dbenv, max))
+DBENV_METHOD(get_lk_max_lockers, (u_int32_t *max_lockersp),
+ (dbenv, max_lockersp))
DBENV_METHOD(set_lk_max_lockers, (u_int32_t max_lockers), (dbenv, max_lockers))
+DBENV_METHOD(get_lk_max_locks, (u_int32_t *max_locksp), (dbenv, max_locksp))
DBENV_METHOD(set_lk_max_locks, (u_int32_t max_locks), (dbenv, max_locks))
+DBENV_METHOD(get_lk_max_objects, (u_int32_t *max_objectsp),
+ (dbenv, max_objectsp))
DBENV_METHOD(set_lk_max_objects, (u_int32_t max_objects), (dbenv, max_objects))
+DBENV_METHOD(get_mp_mmapsize, (size_t *mmapsizep), (dbenv, mmapsizep))
DBENV_METHOD(set_mp_mmapsize, (size_t mmapsize), (dbenv, mmapsize))
+DBENV_METHOD(get_tmp_dir, (const char **tmp_dirp), (dbenv, tmp_dirp))
DBENV_METHOD(set_tmp_dir, (const char *tmp_dir), (dbenv, tmp_dir))
+DBENV_METHOD(get_tx_max, (u_int32_t *tx_maxp), (dbenv, tx_maxp))
DBENV_METHOD(set_tx_max, (u_int32_t tx_max), (dbenv, tx_max))
DBENV_METHOD_QUIET(set_alloc,
@@ -594,6 +643,9 @@ void DbEnv::set_app_private(void *value)
unwrap(this)->app_private = value;
}
+DBENV_METHOD(get_cachesize,
+ (u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep),
+ (dbenv, gbytesp, bytesp, ncachep))
DBENV_METHOD(set_cachesize,
(u_int32_t gbytes, u_int32_t bytes, int ncache),
(dbenv, gbytes, bytes, ncache))
@@ -641,9 +693,8 @@ int DbEnv::set_feedback(void (*arg)(DbEnv *, int, int))
return ((*(dbenv->set_feedback))(dbenv, _feedback_intercept_c));
}
+DBENV_METHOD(get_flags, (u_int32_t *flagsp), (dbenv, flagsp))
DBENV_METHOD(set_flags, (u_int32_t flags, int onoff), (dbenv, flags, onoff))
-DBENV_METHOD(set_lk_conflicts, (u_int8_t *lk_conflicts, int lk_max),
- (dbenv, lk_conflicts, lk_max))
int DbEnv::set_paniccall(void (*arg)(DbEnv *, int))
{
@@ -657,8 +708,10 @@ int DbEnv::set_paniccall(void (*arg)(DbEnv *, int))
DBENV_METHOD(set_rpc_server,
(void *cl, char *host, long tsec, long ssec, u_int32_t flags),
(dbenv, cl, host, tsec, ssec, flags))
+DBENV_METHOD(get_shm_key, (long *shm_keyp), (dbenv, shm_keyp))
DBENV_METHOD(set_shm_key, (long shm_key), (dbenv, shm_key))
// Note: this changes from last_known_error_policy to error_policy()
+DBENV_METHOD(get_tas_spins, (u_int32_t *argp), (dbenv, argp))
DBENV_METHOD(set_tas_spins, (u_int32_t arg), (dbenv, arg))
int DbEnv::set_app_dispatch
@@ -670,12 +723,15 @@ int DbEnv::set_app_dispatch
app_dispatch_callback_ = arg;
if ((ret = (*(dbenv->set_app_dispatch))(dbenv,
_app_dispatch_intercept_c)) != 0)
- DB_ERROR("DbEnv::set_app_dispatch", ret, error_policy());
+ DB_ERROR(this, "DbEnv::set_app_dispatch", ret, error_policy());
return (ret);
}
+DBENV_METHOD(get_tx_timestamp, (time_t *timestamp), (dbenv, timestamp))
DBENV_METHOD(set_tx_timestamp, (time_t *timestamp), (dbenv, timestamp))
+DBENV_METHOD(get_verbose, (u_int32_t which, int *onoffp),
+ (dbenv, which, onoffp))
DBENV_METHOD(set_verbose, (u_int32_t which, int onoff), (dbenv, which, onoff))
int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags)
@@ -688,7 +744,7 @@ int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags)
if (DB_RETOK_STD(ret))
*tid = new DbTxn(txn);
else
- DB_ERROR("DbEnv::txn_begin", ret, error_policy());
+ DB_ERROR(this, "DbEnv::txn_begin", ret, error_policy());
return (ret);
}
@@ -716,14 +772,14 @@ int DbEnv::txn_recover(DbPreplist *preplist, long count,
&c_preplist);
if (ret != 0) {
- DB_ERROR("DbEnv::txn_recover", ret, error_policy());
+ DB_ERROR(this, "DbEnv::txn_recover", ret, error_policy());
return (ret);
}
if ((ret =
dbenv->txn_recover(dbenv, c_preplist, count, retp, flags)) != 0) {
__os_free(dbenv, c_preplist);
- DB_ERROR("DbEnv::txn_recover", ret, error_policy());
+ DB_ERROR(this, "DbEnv::txn_recover", ret, error_policy());
return (ret);
}
@@ -742,8 +798,9 @@ int DbEnv::txn_recover(DbPreplist *preplist, long count,
DBENV_METHOD(txn_stat, (DB_TXN_STAT **statp, u_int32_t flags),
(dbenv, statp, flags))
-int DbEnv::set_rep_transport(u_int32_t myid,
- int (*f_send)(DbEnv *, const Dbt *, const Dbt *, int, u_int32_t))
+int DbEnv::set_rep_transport(int myid,
+ int (*f_send)(DbEnv *, const Dbt *, const Dbt *, const DbLsn *, int,
+ u_int32_t))
{
DB_ENV *dbenv = unwrap(this);
int ret;
@@ -751,7 +808,7 @@ int DbEnv::set_rep_transport(u_int32_t myid,
rep_send_callback_ = f_send;
if ((ret = dbenv->set_rep_transport(dbenv,
myid, _rep_send_intercept_c)) != 0)
- DB_ERROR("DbEnv::set_rep_transport", ret, error_policy());
+ DB_ERROR(this, "DbEnv::set_rep_transport", ret, error_policy());
return (ret);
}
@@ -760,14 +817,16 @@ DBENV_METHOD(rep_elect,
(int nsites, int pri, u_int32_t timeout, int *idp),
(dbenv, nsites, pri, timeout, idp))
-int DbEnv::rep_process_message(Dbt *control, Dbt *rec, int *idp)
+int DbEnv::rep_process_message(Dbt *control,
+ Dbt *rec, int *idp, DbLsn *ret_lsnp)
{
DB_ENV *dbenv = unwrap(this);
int ret;
- ret = dbenv->rep_process_message(dbenv, control, rec, idp);
+ ret = dbenv->rep_process_message(dbenv, control, rec, idp, ret_lsnp);
if (!DB_RETOK_REPPMSG(ret))
- DB_ERROR("DbEnv::rep_process_message", ret, error_policy());
+ DB_ERROR(this, "DbEnv::rep_process_message", ret,
+ error_policy());
return (ret);
}
@@ -779,9 +838,14 @@ DBENV_METHOD(rep_start,
DBENV_METHOD(rep_stat, (DB_REP_STAT **statp, u_int32_t flags),
(dbenv, statp, flags))
+DBENV_METHOD(get_rep_limit, (u_int32_t *gbytesp, u_int32_t *bytesp),
+ (dbenv, gbytesp, bytesp))
DBENV_METHOD(set_rep_limit, (u_int32_t gbytes, u_int32_t bytes),
(dbenv, gbytes, bytes))
+DBENV_METHOD(get_timeout,
+ (db_timeout_t *timeoutp, u_int32_t flags),
+ (dbenv, timeoutp, flags))
DBENV_METHOD(set_timeout,
(db_timeout_t timeout, u_int32_t flags),
(dbenv, timeout, flags))
diff --git a/db/cxx/cxx_except.cpp b/db/cxx/cxx_except.cpp
index a62e21a76..2710af30b 100644
--- a/db/cxx/cxx_except.cpp
+++ b/db/cxx/cxx_except.cpp
@@ -1,20 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: cxx_except.cpp,v 11.7 2000/09/21 15:05:45 dda Exp $";
+static const char revid[] = "$Id: cxx_except.cpp,v 11.21 2003/05/19 15:38:51 mjc Exp $";
#endif /* not lint */
#include <string.h>
+#include <errno.h>
#include "db_cxx.h"
-#include "cxx_int.h"
+#include "dbinc/cxx_int.h"
// tmpString is used to create strings on the stack
//
@@ -25,30 +26,7 @@ public:
const char *str2 = 0,
const char *str3 = 0,
const char *str4 = 0,
- const char *str5 = 0)
- {
- int len = strlen(str1);
- if (str2)
- len += strlen(str2);
- if (str3)
- len += strlen(str3);
- if (str4)
- len += strlen(str4);
- if (str5)
- len += strlen(str5);
-
- s_ = new char[len+1];
-
- strcpy(s_, str1);
- if (str2)
- strcat(s_, str2);
- if (str3)
- strcat(s_, str3);
- if (str4)
- strcat(s_, str4);
- if (str5)
- strcat(s_, str5);
- }
+ const char *str5 = 0);
~tmpString() { delete [] s_; }
operator const char *() { return (s_); }
@@ -56,6 +34,35 @@ private:
char *s_;
};
+tmpString::tmpString(const char *str1,
+ const char *str2,
+ const char *str3,
+ const char *str4,
+ const char *str5)
+{
+ size_t len = strlen(str1);
+ if (str2)
+ len += strlen(str2);
+ if (str3)
+ len += strlen(str3);
+ if (str4)
+ len += strlen(str4);
+ if (str5)
+ len += strlen(str5);
+
+ s_ = new char[len+1];
+
+ strcpy(s_, str1);
+ if (str2)
+ strcat(s_, str2);
+ if (str3)
+ strcat(s_, str3);
+ if (str4)
+ strcat(s_, str4);
+ if (str5)
+ strcat(s_, str5);
+}
+
// Note: would not be needed if we can inherit from exception
// It does not appear to be possible to inherit from exception
// with the current Microsoft library (VC5.0).
@@ -81,30 +88,36 @@ DbException::~DbException()
DbException::DbException(int err)
: err_(err)
+, env_(0)
{
what_ = dupString(db_strerror(err));
}
DbException::DbException(const char *description)
: err_(0)
+, env_(0)
{
what_ = dupString(tmpString(description));
}
DbException::DbException(const char *prefix, int err)
: err_(err)
+, env_(0)
{
what_ = dupString(tmpString(prefix, ": ", db_strerror(err)));
}
DbException::DbException(const char *prefix1, const char *prefix2, int err)
: err_(err)
+, env_(0)
{
- what_ = dupString(tmpString(prefix1, ": ", prefix2, ": ", db_strerror(err)));
+ what_ = dupString(tmpString(prefix1, ": ", prefix2, ": ",
+ db_strerror(err)));
}
DbException::DbException(const DbException &that)
: err_(that.err_)
+, env_(0)
{
what_ = dupString(that.what_);
}
@@ -130,3 +143,206 @@ const char *DbException::what() const
{
return (what_);
}
+
+DbEnv *DbException::get_env() const
+{
+ return env_;
+}
+
+void DbException::set_env(DbEnv *env)
+{
+ env_= env;
+}
+
+////////////////////////////////////////////////////////////////////////
+// //
+// DbMemoryException //
+// //
+////////////////////////////////////////////////////////////////////////
+
+static const char *memory_err_desc = "Dbt not large enough for available data";
+DbMemoryException::~DbMemoryException()
+{
+}
+
+DbMemoryException::DbMemoryException(Dbt *dbt)
+: DbException(memory_err_desc, ENOMEM)
+, dbt_(dbt)
+{
+}
+
+DbMemoryException::DbMemoryException(const char *description)
+: DbException(description, ENOMEM)
+, dbt_(0)
+{
+}
+
+DbMemoryException::DbMemoryException(const char *prefix, Dbt *dbt)
+: DbException(prefix, memory_err_desc, ENOMEM)
+, dbt_(dbt)
+{
+}
+
+DbMemoryException::DbMemoryException(const char *prefix1, const char *prefix2,
+ Dbt *dbt)
+: DbException(prefix1, prefix2, ENOMEM)
+, dbt_(dbt)
+{
+}
+
+DbMemoryException::DbMemoryException(const DbMemoryException &that)
+: DbException(that)
+, dbt_(that.dbt_)
+{
+}
+
+DbMemoryException
+&DbMemoryException::operator =(const DbMemoryException &that)
+{
+ if (this != &that) {
+ DbException::operator=(that);
+ dbt_ = that.dbt_;
+ }
+ return (*this);
+}
+
+Dbt *DbMemoryException::get_dbt() const
+{
+ return (dbt_);
+}
+
+////////////////////////////////////////////////////////////////////////
+// //
+// DbDeadlockException //
+// //
+////////////////////////////////////////////////////////////////////////
+
+DbDeadlockException::~DbDeadlockException()
+{
+}
+
+DbDeadlockException::DbDeadlockException(const char *description)
+: DbException(description, DB_LOCK_DEADLOCK)
+{
+}
+
+DbDeadlockException::DbDeadlockException(const DbDeadlockException &that)
+: DbException(that)
+{
+}
+
+DbDeadlockException
+&DbDeadlockException::operator =(const DbDeadlockException &that)
+{
+ if (this != &that)
+ DbException::operator=(that);
+ return (*this);
+}
+
+////////////////////////////////////////////////////////////////////////
+// //
+// DbLockNotGrantedException //
+// //
+////////////////////////////////////////////////////////////////////////
+
+DbLockNotGrantedException::~DbLockNotGrantedException()
+{
+ delete lock_;
+}
+
+DbLockNotGrantedException::DbLockNotGrantedException(const char *prefix,
+ db_lockop_t op, db_lockmode_t mode, const Dbt *obj, const DbLock lock,
+ int index)
+: DbException(prefix, DbEnv::strerror(DB_LOCK_NOTGRANTED),
+ DB_LOCK_NOTGRANTED)
+, op_(op)
+, mode_(mode)
+, obj_(obj)
+, index_(index)
+{
+ lock_ = new DbLock(lock);
+}
+
+DbLockNotGrantedException::DbLockNotGrantedException(const char *description)
+: DbException(description, DB_LOCK_NOTGRANTED)
+{
+}
+
+DbLockNotGrantedException::DbLockNotGrantedException
+ (const DbLockNotGrantedException &that)
+: DbException(that)
+{
+ op_ = that.op_;
+ mode_ = that.mode_;
+ obj_ = that.obj_;
+ lock_ = new DbLock(*that.lock_);
+ index_ = that.index_;
+}
+
+DbLockNotGrantedException
+&DbLockNotGrantedException::operator =(const DbLockNotGrantedException &that)
+{
+ if (this != &that) {
+ DbException::operator=(that);
+ op_ = that.op_;
+ mode_ = that.mode_;
+ obj_ = that.obj_;
+ lock_ = new DbLock(*that.lock_);
+ index_ = that.index_;
+ }
+ return (*this);
+}
+
+db_lockop_t DbLockNotGrantedException::get_op() const
+{
+ return op_;
+}
+
+db_lockmode_t DbLockNotGrantedException::get_mode() const
+{
+ return mode_;
+}
+
+const Dbt* DbLockNotGrantedException::get_obj() const
+{
+ return obj_;
+}
+
+DbLock* DbLockNotGrantedException::get_lock() const
+{
+ return lock_;
+}
+
+int DbLockNotGrantedException::get_index() const
+{
+ return index_;
+}
+
+////////////////////////////////////////////////////////////////////////
+// //
+// DbRunRecoveryException //
+// //
+////////////////////////////////////////////////////////////////////////
+
+DbRunRecoveryException::~DbRunRecoveryException()
+{
+}
+
+DbRunRecoveryException::DbRunRecoveryException(const char *description)
+: DbException(description, DB_RUNRECOVERY)
+{
+}
+
+DbRunRecoveryException::DbRunRecoveryException
+ (const DbRunRecoveryException &that)
+: DbException(that)
+{
+}
+
+DbRunRecoveryException
+&DbRunRecoveryException::operator =(const DbRunRecoveryException &that)
+{
+ if (this != &that)
+ DbException::operator=(that);
+ return (*this);
+}
diff --git a/db/cxx/cxx_lock.cpp b/db/cxx/cxx_lock.cpp
index e8ce2aa9d..602c7409b 100644
--- a/db/cxx/cxx_lock.cpp
+++ b/db/cxx/cxx_lock.cpp
@@ -1,86 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: cxx_lock.cpp,v 11.9 2000/09/21 15:05:45 dda Exp $";
+static const char revid[] = "$Id: cxx_lock.cpp,v 11.18 2003/01/08 04:10:36 bostic Exp $";
#endif /* not lint */
#include <errno.h>
#include <string.h>
#include "db_cxx.h"
-#include "cxx_int.h"
-
-int DbEnv::lock_detect(u_int32_t flags, u_int32_t atype, int *aborted)
-{
- DB_ENV *env = unwrap(this);
- int err;
-
- if ((err = ::lock_detect(env, flags, atype, aborted)) != 0) {
- DB_ERROR("DbEnv::lock_detect", err, error_policy());
- return (err);
- }
- return (err);
-}
-
-int DbEnv::lock_get(u_int32_t locker, u_int32_t flags, const Dbt *obj,
- db_lockmode_t lock_mode, DbLock *lock)
-{
- DB_ENV *env = unwrap(this);
- int err;
-
- if ((err = ::lock_get(env, locker, flags, obj,
- lock_mode, &lock->lock_)) != 0) {
- DB_ERROR("DbEnv::lock_get", err, error_policy());
- return (err);
- }
- return (err);
-}
-
-int DbEnv::lock_id(u_int32_t *idp)
-{
- DB_ENV *env = unwrap(this);
- int err;
-
- if ((err = ::lock_id(env, idp)) != 0) {
- DB_ERROR("DbEnv::lock_id", err, error_policy());
- }
- return (err);
-}
-
-int DbEnv::lock_stat(DB_LOCK_STAT **statp,
- db_malloc_fcn_type db_malloc_fcn)
-{
- DB_ENV *env = unwrap(this);
- int err;
-
- if ((err = ::lock_stat(env, statp, db_malloc_fcn)) != 0) {
- DB_ERROR("DbEnv::lock_stat", err, error_policy());
- return (err);
- }
- return (0);
-}
-
-int DbEnv::lock_vec(u_int32_t locker, u_int32_t flags,
- DB_LOCKREQ list[],
- int nlist, DB_LOCKREQ **elist_returned)
-{
- DB_ENV *env = unwrap(this);
- int err;
-
- if ((err = ::lock_vec(env, locker, flags, list,
- nlist, elist_returned)) != 0) {
- DB_ERROR("DbEnv::lock_vec", err, error_policy());
- return (err);
- }
- return (err);
-}
+#include "dbinc/cxx_int.h"
////////////////////////////////////////////////////////////////////////
// //
@@ -108,18 +43,3 @@ DbLock &DbLock::operator = (const DbLock &that)
lock_ = that.lock_;
return (*this);
}
-
-int DbLock::put(DbEnv *env)
-{
- DB_ENV *envp = unwrap(env);
-
- if (!env) {
- return (EINVAL); // handle never assigned
- }
-
- int err;
- if ((err = lock_put(envp, &lock_)) != 0) {
- DB_ERROR("DbLock::put", err, env->error_policy());
- }
- return (err);
-}
diff --git a/db/cxx/cxx_logc.cpp b/db/cxx/cxx_logc.cpp
index 8bb70c1dc..0a7fdaca1 100644
--- a/db/cxx/cxx_logc.cpp
+++ b/db/cxx/cxx_logc.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: cxx_logc.cpp,v 11.8 2002/07/03 21:03:53 bostic Exp ";
+static const char revid[] = "$Id: cxx_logc.cpp,v 11.11 2003/03/27 20:05:04 merrells Exp $";
#endif /* not lint */
#include <errno.h>
@@ -37,11 +37,12 @@ int DbLogc::close(u_int32_t _flags)
{
DB_LOGC *logc = this;
int ret;
+ DbEnv *dbenv2 = DbEnv::get_DbEnv(logc->dbenv);
ret = logc->close(logc, _flags);
if (!DB_RETOK_STD(ret))
- DB_ERROR("DbLogc::close", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(dbenv2, "DbLogc::close", ret, ON_ERROR_UNKNOWN);
return (ret);
}
@@ -56,9 +57,11 @@ int DbLogc::get(DbLsn *lsn, Dbt *data, u_int32_t _flags)
if (!DB_RETOK_LGGET(ret)) {
if (ret == ENOMEM && DB_OVERFLOWED_DBT(data))
- DB_ERROR_DBT("DbLogc::get", data, ON_ERROR_UNKNOWN);
+ DB_ERROR_DBT(DbEnv::get_DbEnv(logc->dbenv),
+ "DbLogc::get", data, ON_ERROR_UNKNOWN);
else
- DB_ERROR("DbLogc::get", ret, ON_ERROR_UNKNOWN);
+ DB_ERROR(DbEnv::get_DbEnv(logc->dbenv),
+ "DbLogc::get", ret, ON_ERROR_UNKNOWN);
}
return (ret);
diff --git a/db/cxx/cxx_mpool.cpp b/db/cxx/cxx_mpool.cpp
index 22f4735e3..6ef491e0f 100644
--- a/db/cxx/cxx_mpool.cpp
+++ b/db/cxx/cxx_mpool.cpp
@@ -1,20 +1,52 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: cxx_mpool.cpp,v 11.11 2000/09/21 15:05:45 dda Exp $";
+static const char revid[] = "$Id: cxx_mpool.cpp,v 11.27 2003/06/30 17:19:41 bostic Exp $";
#endif /* not lint */
#include <errno.h>
#include "db_cxx.h"
-#include "cxx_int.h"
+#include "dbinc/cxx_int.h"
+
+#include "db_int.h"
+
+// Helper macros for simple methods that pass through to the
+// underlying C method. It may return an error or raise an exception.
+// Note this macro expects that input _argspec is an argument
+// list element (e.g., "char *arg") and that _arglist is the arguments
+// that should be passed through to the C method (e.g., "(mpf, arg)")
+//
+#define DB_MPOOLFILE_METHOD(_name, _argspec, _arglist, _retok) \
+int DbMpoolFile::_name _argspec \
+{ \
+ int ret; \
+ DB_MPOOLFILE *mpf = unwrap(this); \
+ \
+ if (mpf == NULL) \
+ ret = EINVAL; \
+ else \
+ ret = mpf->_name _arglist; \
+ if (!_retok(ret)) \
+ DB_ERROR(DbEnv::get_DbEnv(mpf->dbenv), \
+ "DbMpoolFile::"#_name, ret, ON_ERROR_UNKNOWN); \
+ return (ret); \
+}
+
+#define DB_MPOOLFILE_METHOD_VOID(_name, _argspec, _arglist) \
+void DbMpoolFile::_name _argspec \
+{ \
+ DB_MPOOLFILE *mpf = unwrap(this); \
+ \
+ mpf->_name _arglist; \
+}
////////////////////////////////////////////////////////////////////////
// //
@@ -31,150 +63,69 @@ DbMpoolFile::~DbMpoolFile()
{
}
-int DbMpoolFile::open(DbEnv *envp, const char *file,
- u_int32_t flags, int mode, size_t pagesize,
- DB_MPOOL_FINFO *finfop, DbMpoolFile **result)
-{
- int err;
-
- DB_MPOOLFILE *mpf;
- DB_ENV *env = unwrap(envp);
-
- if ((err = ::memp_fopen(env, file, flags, mode, pagesize,
- finfop, &mpf)) != 0) {
- DB_ERROR("DbMpoolFile::open", err, envp->error_policy());
- return (err);
- }
- *result = new DbMpoolFile();
- (*result)->imp_ = wrap(mpf);
- return (0);
-}
-
-int DbMpoolFile::close()
+int DbMpoolFile::close(u_int32_t flags)
{
DB_MPOOLFILE *mpf = unwrap(this);
- int err = 0;
- if (!mpf) {
- err = EINVAL;
- }
- else if ((err = ::memp_fclose(mpf)) != 0) {
- DB_ERROR("DbMpoolFile::close", err, ON_ERROR_UNKNOWN);
- return (err);
- }
+ int ret;
+ DbEnv *dbenv = DbEnv::get_DbEnv(mpf->dbenv);
+
+ if (mpf == NULL)
+ ret = EINVAL;
+ else
+ ret = mpf->close(mpf, flags);
+
imp_ = 0; // extra safety
// This may seem weird, but is legal as long as we don't access
// any data before returning.
- //
delete this;
- return (0);
-}
-
-int DbMpoolFile::get(db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep)
-{
- DB_MPOOLFILE *mpf = unwrap(this);
- int err = 0;
- if (!mpf) {
- err = EINVAL;
- }
- else if ((err = ::memp_fget(mpf, pgnoaddr, flags, pagep)) != 0) {
- DB_ERROR("DbMpoolFile::get", err, ON_ERROR_UNKNOWN);
- }
- return (err);
-}
-
-int DbMpoolFile::put(void *pgaddr, u_int32_t flags)
-{
- DB_MPOOLFILE *mpf = unwrap(this);
- int err = 0;
- if (!mpf) {
- err = EINVAL;
- }
- else if ((err = ::memp_fput(mpf, pgaddr, flags)) != 0) {
- DB_ERROR("DbMpoolFile::put", err, ON_ERROR_UNKNOWN);
- }
- return (err);
-}
-
-int DbMpoolFile::set(void *pgaddr, u_int32_t flags)
-{
- DB_MPOOLFILE *mpf = unwrap(this);
- int err = 0;
- if (!mpf) {
- err = EINVAL;
- }
- else if ((err = ::memp_fset(mpf, pgaddr, flags)) != 0) {
- DB_ERROR("DbMpoolFile::set", err, ON_ERROR_UNKNOWN);
- }
- return (err);
-}
-
-int DbMpoolFile::sync()
-{
- DB_MPOOLFILE *mpf = unwrap(this);
- int err = 0;
- if (!mpf) {
- err = EINVAL;
- }
- else if ((err = ::memp_fsync(mpf)) != 0 && err != DB_INCOMPLETE) {
- DB_ERROR("DbMpoolFile::sync", err, ON_ERROR_UNKNOWN);
- }
- return (err);
-}
-////////////////////////////////////////////////////////////////////////
-// //
-// DbMpool //
-// //
-////////////////////////////////////////////////////////////////////////
+ if (!DB_RETOK_STD(ret))
+ DB_ERROR(dbenv, "DbMpoolFile::close", ret, ON_ERROR_UNKNOWN);
-int DbEnv::memp_register(int ftype,
- pgin_fcn_type pgin_fcn,
- pgout_fcn_type pgout_fcn)
-{
- DB_ENV *env = unwrap(this);
- int err = 0;
-
- if ((err = ::memp_register(env, ftype, pgin_fcn, pgout_fcn)) != 0) {
- DB_ERROR("DbEnv::memp_register", err, error_policy());
- return (err);
- }
- return (err);
+ return (ret);
}
-int DbEnv::memp_stat(DB_MPOOL_STAT **gsp, DB_MPOOL_FSTAT ***fsp,
- db_malloc_fcn_type db_malloc_fcn)
-{
- DB_ENV *env = unwrap(this);
- int err = 0;
-
- if ((err = ::memp_stat(env, gsp, fsp, db_malloc_fcn)) != 0) {
- DB_ERROR("DbEnv::memp_stat", err, error_policy());
- return (err);
- }
- return (err);
-}
-
-int DbEnv::memp_sync(DbLsn *sn)
-{
- DB_ENV *env = unwrap(this);
- int err = 0;
-
- if ((err = ::memp_sync(env, sn)) != 0 && err != DB_INCOMPLETE) {
- DB_ERROR("DbEnv::memp_sync", err, error_policy());
- return (err);
- }
- return (err);
-}
-
-int DbEnv::memp_trickle(int pct, int *nwrotep)
-{
- DB_ENV *env = unwrap(this);
- int err = 0;
-
- if ((err = ::memp_trickle(env, pct, nwrotep)) != 0) {
- DB_ERROR("DbEnv::memp_trickle", err, error_policy());
- return (err);
- }
- return (err);
-}
+DB_MPOOLFILE_METHOD(get, (db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep),
+ (mpf, pgnoaddr, flags, pagep), DB_RETOK_MPGET)
+DB_MPOOLFILE_METHOD(open,
+ (const char *file, u_int32_t flags, int mode, size_t pagesize),
+ (mpf, file, flags, mode, pagesize), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(put, (void *pgaddr, u_int32_t flags),
+ (mpf, pgaddr, flags), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set, (void *pgaddr, u_int32_t flags),
+ (mpf, pgaddr, flags), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_clear_len, (u_int32_t *lenp),
+ (mpf, lenp), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_clear_len, (u_int32_t len),
+ (mpf, len), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_fileid, (u_int8_t *fileid),
+ (mpf, fileid), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_fileid, (u_int8_t *fileid),
+ (mpf, fileid), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_flags, (u_int32_t *flagsp),
+ (mpf, flagsp), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_flags, (u_int32_t flags, int onoff),
+ (mpf, flags, onoff), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_ftype, (int *ftypep),
+ (mpf, ftypep), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_ftype, (int ftype),
+ (mpf, ftype), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_lsn_offset, (int32_t *offsetp),
+ (mpf, offsetp), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_lsn_offset, (int32_t offset),
+ (mpf, offset), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_maxsize, (u_int32_t *gbytesp, u_int32_t *bytesp),
+ (mpf, gbytesp, bytesp), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_maxsize, (u_int32_t gbytes, u_int32_t bytes),
+ (mpf, gbytes, bytes), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_pgcookie, (DBT *dbt),
+ (mpf, dbt), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_pgcookie, (DBT *dbt),
+ (mpf, dbt), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(get_priority, (DB_CACHE_PRIORITY *priorityp),
+ (mpf, priorityp), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(set_priority, (DB_CACHE_PRIORITY priority),
+ (mpf, priority), DB_RETOK_STD)
+DB_MPOOLFILE_METHOD(sync, (),
+ (mpf), DB_RETOK_STD)
diff --git a/db/cxx/cxx_multi.cpp b/db/cxx/cxx_multi.cpp
new file mode 100644
index 000000000..be6287a3c
--- /dev/null
+++ b/db/cxx/cxx_multi.cpp
@@ -0,0 +1,67 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ */
+
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: cxx_multi.cpp,v 1.3 2003/02/22 01:25:43 merrells Exp $";
+#endif /* not lint */
+
+#include "db_cxx.h"
+
+DbMultipleIterator::DbMultipleIterator(const Dbt &dbt)
+ : data_((u_int8_t*)dbt.get_data()),
+ p_((u_int32_t*)(data_ + dbt.get_size() - sizeof(u_int32_t)))
+{
+}
+
+bool DbMultipleDataIterator::next(Dbt &data)
+{
+ if (*p_ == (u_int32_t)-1) {
+ data.set_data(0);
+ data.set_size(0);
+ p_ = 0;
+ } else {
+ data.set_data(data_ + *p_--);
+ data.set_size(*p_--);
+ if (data.get_size() == 0 && data.get_data() == data_)
+ data.set_data(0);
+ }
+ return (data.get_data() != 0);
+}
+
+bool DbMultipleKeyDataIterator::next(Dbt &key, Dbt &data)
+{
+ if (*p_ == (u_int32_t)-1) {
+ key.set_data(0);
+ key.set_size(0);
+ data.set_data(0);
+ data.set_size(0);
+ p_ = 0;
+ } else {
+ key.set_data(data_ + *p_--);
+ key.set_size(*p_--);
+ data.set_data(data_ + *p_--);
+ data.set_size(*p_--);
+ }
+ return (data.get_data() != 0);
+}
+
+bool DbMultipleRecnoDataIterator::next(db_recno_t &recno, Dbt &data)
+{
+ if (*p_ == (u_int32_t)0) {
+ recno = 0;
+ data.set_data(0);
+ data.set_size(0);
+ p_ = 0;
+ } else {
+ recno = *p_--;
+ data.set_data(data_ + *p_--);
+ data.set_size(*p_--);
+ }
+ return (recno != 0);
+}
diff --git a/db/cxx/cxx_txn.cpp b/db/cxx/cxx_txn.cpp
index 0abae9826..9db1c9fb9 100644
--- a/db/cxx/cxx_txn.cpp
+++ b/db/cxx/cxx_txn.cpp
@@ -1,136 +1,83 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: cxx_txn.cpp,v 11.13 2000/12/21 16:24:33 dda Exp $";
+static const char revid[] = "$Id: cxx_txn.cpp,v 11.29 2003/03/11 15:39:40 merrells Exp $";
#endif /* not lint */
#include <errno.h>
#include "db_cxx.h"
-#include "cxx_int.h"
-
-////////////////////////////////////////////////////////////////////////
-// //
-// DbTxnMgr //
-// //
-////////////////////////////////////////////////////////////////////////
-
-int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags)
-{
- int err;
- DB_ENV *env = unwrap(this);
- DB_TXN *txn;
-
- if ((err = ::txn_begin(env, unwrap(pid), &txn, flags)) != 0) {
- DB_ERROR("DbEnv::txn_begin", err, error_policy());
- return (err);
- }
- DbTxn *result = new DbTxn();
- result->imp_ = wrap(txn);
- *tid = result;
- return (err);
-}
-
-int DbEnv::txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags)
-{
- int err;
- DB_ENV *env = unwrap(this);
- if ((err = ::txn_checkpoint(env, kbyte, min, flags)) != 0 &&
- err != DB_INCOMPLETE) {
- DB_ERROR("DbEnv::txn_checkpoint", err, error_policy());
- return (err);
- }
- return (err);
+#include "dbinc/cxx_int.h"
+
+#include "db_int.h"
+#include "dbinc/txn.h"
+
+// Helper macro for simple methods that pass through to the
+// underlying C method. It may return an error or raise an exception.
+// Note this macro expects that input _argspec is an argument
+// list element (e.g., "char *arg") and that _arglist is the arguments
+// that should be passed through to the C method (e.g., "(db, arg)")
+//
+#define DBTXN_METHOD(_name, _delete, _argspec, _arglist) \
+int DbTxn::_name _argspec \
+{ \
+ int ret; \
+ DB_TXN *txn = unwrap(this); \
+ \
+ ret = txn->_name _arglist; \
+ /* Weird, but safe if we don't access this again. */ \
+ if (_delete) \
+ delete this; \
+ if (!DB_RETOK_STD(ret)) \
+ DB_ERROR(DbEnv::get_DbEnv(txn->mgrp->dbenv), \
+ "DbTxn::" # _name, ret, ON_ERROR_UNKNOWN); \
+ return (ret); \
}
-int DbEnv::txn_stat(DB_TXN_STAT **statp, db_malloc_fcn_type db_malloc_fcn)
-{
- int err;
- DB_ENV *env = unwrap(this);
- if ((err = ::txn_stat(env, statp, db_malloc_fcn)) != 0) {
- DB_ERROR("DbEnv::txn_stat", err, error_policy());
- return (err);
- }
- return (err);
-}
-
-////////////////////////////////////////////////////////////////////////
-// //
-// DbTxn //
-// //
-////////////////////////////////////////////////////////////////////////
-
+// private constructor, never called but needed by some C++ linkers
DbTxn::DbTxn()
: imp_(0)
{
}
-DbTxn::~DbTxn()
+DbTxn::DbTxn(DB_TXN *txn)
+: imp_(wrap(txn))
{
+ txn->api_internal = this;
}
-int DbTxn::abort()
+DbTxn::~DbTxn()
{
- int err;
- DB_TXN *txn;
-
- txn = unwrap(this);
- err = txn_abort(txn);
-
- // It may seem weird to delete this, but is legal as long
- // as we don't access any of its data before returning.
- //
- delete this;
-
- if (err != 0)
- DB_ERROR("DbTxn::abort", err, ON_ERROR_UNKNOWN);
-
- return (err);
}
-int DbTxn::commit(u_int32_t flags)
-{
- int err;
- DB_TXN *txn;
-
- txn = unwrap(this);
- err = txn_commit(txn, flags);
-
- // It may seem weird to delete this, but is legal as long
- // as we don't access any of its data before returning.
- //
- delete this;
-
- if (err != 0)
- DB_ERROR("DbTxn::commit", err, ON_ERROR_UNKNOWN);
-
- return (err);
-}
+DBTXN_METHOD(abort, 1, (), (txn))
+DBTXN_METHOD(commit, 1, (u_int32_t flags), (txn, flags))
+DBTXN_METHOD(discard, 1, (u_int32_t flags), (txn, flags))
u_int32_t DbTxn::id()
{
DB_TXN *txn;
txn = unwrap(this);
- return (txn_id(txn)); // no error
+ return (txn->id(txn)); // no error
}
-int DbTxn::prepare()
-{
- int err;
- DB_TXN *txn;
+DBTXN_METHOD(prepare, 0, (u_int8_t *gid), (txn, gid))
+DBTXN_METHOD(set_timeout, 0, (db_timeout_t timeout, u_int32_t flags),
+ (txn, timeout, flags))
- txn = unwrap(this);
- if ((err = txn_prepare(txn)) != 0) {
- DB_ERROR("DbTxn::prepare", err, ON_ERROR_UNKNOWN);
- return (err);
- }
- return (0);
+// static method
+DbTxn *DbTxn::wrap_DB_TXN(DB_TXN *txn)
+{
+ DbTxn *wrapped_txn = get_DbTxn(txn);
+ if (wrapped_txn == NULL)
+ wrapped_txn = new DbTxn(txn);
+ return wrapped_txn;
}
diff --git a/db/db/crdel.src b/db/db/crdel.src
index 17c061d68..6e64a7eee 100644
--- a/db/db/crdel.src
+++ b/db/db/crdel.src
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: crdel.src,v 11.12 2000/12/12 17:41:48 bostic Exp $
+ * $Id: crdel.src,v 11.27 2003/11/14 05:32:29 ubell Exp $
*/
-PREFIX crdel
+PREFIX __crdel
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
@@ -15,30 +16,19 @@ INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
- * Fileopen -- log a potential file create operation
- *
- * name: filename
- * subname: sub database name
- * mode: file system mode
- */
-BEGIN fileopen 141
-DBT name DBT s
-ARG mode u_int32_t o
-END
-
-/*
* Metasub: log the creation of a subdatabase meta data page.
*
* fileid: identifies the file being acted upon.
@@ -47,57 +37,9 @@ END
* lsn: lsn of the page.
*/
BEGIN metasub 142
-ARG fileid int32_t ld
-ARG pgno db_pgno_t d
-DBT page DBT s
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+PGDBT page DBT s
POINTER lsn DB_LSN * lu
END
-/*
- * Metapage: log the creation of a meta data page for a new file.
- *
- * fileid: identifies the file being acted upon.
- * name: file containing the page.
- * pgno: page number on which to write this meta-data page
- * page: the actual meta-data page
- */
-BEGIN metapage 143
-ARG fileid int32_t ld
-DBT name DBT s
-ARG pgno db_pgno_t d
-DBT page DBT s
-END
-
-/*
- * Delete: remove a file.
- * Note that we don't need a special log record for subdatabase
- * removes, because we use normal btree operations to remove them.
- *
- * name: name of the file being removed (relative to DBHOME).
- */
-DEPRECATED old_delete 144
-DBT name DBT s
-END
-
-/*
- * Rename: rename a file
- * We do not need this for subdatabases
- *
- * name: name of the file being removed (relative to DBHOME).
- */
-BEGIN rename 145
-ARG fileid int32_t ld
-DBT name DBT s
-DBT newname DBT s
-END
-/*
- * Delete: remove a file.
- * Note that we don't need a special log record for subdatabase
- * removes, because we use normal btree operations to remove them.
- *
- * name: name of the file being removed (relative to DBHOME).
- */
-BEGIN delete 146
-ARG fileid int32_t ld
-DBT name DBT s
-END
diff --git a/db/db/crdel_auto.c b/db/db/crdel_auto.c
index f2204410e..a30f5d792 100644
--- a/db/db/crdel_auto.c
+++ b/db/db/crdel_auto.c
@@ -5,201 +5,125 @@
#include <sys/types.h>
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "txn.h"
-
-int
-__crdel_fileopen_log(dbenv, txnid, ret_lsnp, flags,
- name, mode)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- const DBT *name;
- u_int32_t mode;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_crdel_fileopen;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
- + sizeof(mode);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
-
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- if (name == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
- }
- memcpy(bp, &mode, sizeof(mode));
- bp += sizeof(mode);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__crdel_fileopen_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __crdel_fileopen_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __crdel_fileopen_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]crdel_fileopen: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tmode: %o\n", argp->mode);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__crdel_fileopen_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __crdel_fileopen_args **argpp;
-{
- __crdel_fileopen_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__crdel_fileopen_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- memcpy(&argp->mode, bp, sizeof(argp->mode));
- bp += sizeof(argp->mode);
- *argpp = argp;
- return (0);
-}
-
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+
+/*
+ * PUBLIC: int __crdel_metasub_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, const DBT *, DB_LSN *));
+ */
int
-__crdel_metasub_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, page, lsn)
- DB_ENV *dbenv;
+__crdel_metasub_log(dbp, txnid, ret_lsnp, flags, pgno, page, lsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
const DBT *page;
DB_LSN * lsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_crdel_metasub;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___crdel_metasub;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (page == NULL ? 0 : page->size)
+ sizeof(*lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (page == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -210,691 +134,245 @@ __crdel_metasub_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, page->data, page->size);
bp += page->size;
}
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-int
-__crdel_metasub_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __crdel_metasub_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __crdel_metasub_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]crdel_metasub: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %d\n", argp->pgno);
- printf("\tpage: ");
- for (i = 0; i < argp->page.size; i++) {
- ch = ((u_int8_t *)argp->page.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
}
- printf("\n");
- printf("\tlsn: [%lu][%lu]\n",
- (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
+#endif
-int
-__crdel_metasub_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __crdel_metasub_args **argpp;
-{
- __crdel_metasub_args *argp;
- u_int8_t *bp;
- int ret;
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
- ret = __os_malloc(dbenv, sizeof(__crdel_metasub_args) +
- sizeof(DB_TXN), NULL, &argp);
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memset(&argp->page, 0, sizeof(argp->page));
- memcpy(&argp->page.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->page.data = bp;
- bp += argp->page.size;
- memcpy(&argp->lsn, bp, sizeof(argp->lsn));
- bp += sizeof(argp->lsn);
- *argpp = argp;
- return (0);
-}
-
-int
-__crdel_metapage_log(dbenv, txnid, ret_lsnp, flags,
- fileid, name, pgno, page)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- const DBT *name;
- db_pgno_t pgno;
- const DBT *page;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_crdel_metapage;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
- + sizeof(pgno)
- + sizeof(u_int32_t) + (page == NULL ? 0 : page->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ (void)__crdel_metasub_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (name == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
- }
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- if (page == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &page->size, sizeof(page->size));
- bp += sizeof(page->size);
- memcpy(bp, page->data, page->size);
- bp += page->size;
- }
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __crdel_metasub_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
int
-__crdel_metapage_print(dbenv, dbtp, lsnp, notused2, notused3)
+__crdel_metasub_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DBT *dbtp;
+ DBT *rec;
DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
+ db_recops notused1;
+ void *summary;
{
- __crdel_metapage_args *argp;
- u_int32_t i;
- u_int ch;
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __crdel_metapage_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]crdel_metapage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tpgno: %d\n", argp->pgno);
- printf("\tpage: ");
- for (i = 0; i < argp->page.size; i++) {
- ch = ((u_int8_t *)argp->page.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__crdel_metapage_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __crdel_metapage_args **argpp;
-{
- __crdel_metapage_args *argp;
- u_int8_t *bp;
- int ret;
+ t = (TXN_RECS *)summary;
- ret = __os_malloc(dbenv, sizeof(__crdel_metapage_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memset(&argp->page, 0, sizeof(argp->page));
- memcpy(&argp->page.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->page.data = bp;
- bp += argp->page.size;
- *argpp = argp;
- return (0);
-}
-int
-__crdel_old_delete_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __crdel_old_delete_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __crdel_old_delete_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]crdel_old_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
-int
-__crdel_old_delete_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __crdel_old_delete_args **argpp;
-{
- __crdel_old_delete_args *argp;
- u_int8_t *bp;
- int ret;
+ t->npages++;
- ret = __os_malloc(dbenv, sizeof(__crdel_old_delete_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- *argpp = argp;
return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __crdel_metasub_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__crdel_rename_log(dbenv, txnid, ret_lsnp, flags,
- fileid, name, newname)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- const DBT *name;
- const DBT *newname;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_crdel_rename;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
- + sizeof(u_int32_t) + (newname == NULL ? 0 : newname->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
-
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (name == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
- }
- if (newname == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &newname->size, sizeof(newname->size));
- bp += sizeof(newname->size);
- memcpy(bp, newname->data, newname->size);
- bp += newname->size;
- }
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__crdel_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
+__crdel_metasub_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __crdel_rename_args *argp;
+ __crdel_metasub_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __crdel_rename_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __crdel_metasub_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]crdel_rename: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__crdel_metasub%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tnewname: ");
- for (i = 0; i < argp->newname.size; i++) {
- ch = ((u_int8_t *)argp->newname.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tpage: ");
+ for (i = 0; i < argp->page.size; i++) {
+ ch = ((u_int8_t *)argp->page.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ (void)printf("\tlsn: [%lu][%lu]\n",
+ (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __crdel_metasub_read __P((DB_ENV *, void *,
+ * PUBLIC: __crdel_metasub_args **));
+ */
int
-__crdel_rename_read(dbenv, recbuf, argpp)
+__crdel_metasub_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __crdel_rename_args **argpp;
+ __crdel_metasub_args **argpp;
{
- __crdel_rename_args *argp;
+ __crdel_metasub_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__crdel_rename_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__crdel_metasub_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- memset(&argp->newname, 0, sizeof(argp->newname));
- memcpy(&argp->newname.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->newname.data = bp;
- bp += argp->newname.size;
- *argpp = argp;
- return (0);
-}
-int
-__crdel_delete_log(dbenv, txnid, ret_lsnp, flags,
- fileid, name)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- const DBT *name;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- rectype = DB_crdel_delete;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (name == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
- }
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__crdel_delete_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __crdel_delete_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
+ memset(&argp->page, 0, sizeof(argp->page));
+ memcpy(&argp->page.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->page.data = bp;
+ bp += argp->page.size;
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&argp->lsn, bp, sizeof(argp->lsn));
+ bp += sizeof(argp->lsn);
- if ((ret = __crdel_delete_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]crdel_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ *argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __crdel_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__crdel_delete_read(dbenv, recbuf, argpp)
+__crdel_init_print(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
- void *recbuf;
- __crdel_delete_args **argpp;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
- __crdel_delete_args *argp;
- u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__crdel_delete_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_metasub_print, DB___crdel_metasub)) != 0)
return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- *argpp = argp;
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __crdel_init_getpgnos __P((DB_ENV *,
+ * PUBLIC: int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *),
+ * PUBLIC: size_t *));
+ */
int
-__crdel_init_print(dbenv)
+__crdel_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __crdel_fileopen_print, DB_crdel_fileopen)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_metasub_print, DB_crdel_metasub)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_metapage_print, DB_crdel_metapage)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_old_delete_print, DB_crdel_old_delete)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_rename_print, DB_crdel_rename)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_delete_print, DB_crdel_delete)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_metasub_getpgnos, DB___crdel_metasub)) != 0)
return (ret);
return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __crdel_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__crdel_init_recover(dbenv)
+__crdel_init_recover(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __crdel_fileopen_recover, DB_crdel_fileopen)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_metasub_recover, DB_crdel_metasub)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_metapage_recover, DB_crdel_metapage)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_crdel_old_delete)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_rename_recover, DB_crdel_rename)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __crdel_delete_recover, DB_crdel_delete)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __crdel_metasub_recover, DB___crdel_metasub)) != 0)
return (ret);
return (0);
}
-
diff --git a/db/db/crdel_rec.c b/db/db/crdel_rec.c
index 495b92a0a..46529c12c 100644
--- a/db/db/crdel_rec.c
+++ b/db/db/crdel_rec.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: crdel_rec.c,v 11.43 2000/12/13 08:06:34 krinsky Exp $";
+static const char revid[] = "$Id: crdel_rec.c,v 11.66 2003/06/30 17:19:42 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,112 +18,11 @@ static const char revid[] = "$Id: crdel_rec.c,v 11.43 2000/12/13 08:06:34 krinsk
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "log.h"
-#include "hash.h"
-#include "mp.h"
-#include "db_dispatch.h"
-
-/*
- * __crdel_fileopen_recover --
- * Recovery function for fileopen.
- *
- * PUBLIC: int __crdel_fileopen_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__crdel_fileopen_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __crdel_fileopen_args *argp;
- DBMETA ondisk;
- DB_FH fh;
- size_t nr;
- int do_unlink, ret;
- u_int32_t b, mb, io;
- char *real_name;
-
- COMPQUIET(info, NULL);
-
- real_name = NULL;
- REC_PRINT(__crdel_fileopen_print);
-
- if ((ret = __crdel_fileopen_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
- /*
- * If this is an in-memory database, then the name is going to
- * be NULL, which looks like a 0-length name in recovery.
- */
- if (argp->name.size == 0)
- goto done;
-
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (DB_REDO(op)) {
- /*
- * The create commited, so we need to make sure that the file
- * exists. A simple open should suffice.
- */
- if ((ret = __os_open(dbenv, real_name,
- DB_OSO_CREATE, argp->mode, &fh)) != 0)
- goto out;
- if ((ret = __os_closehandle(&fh)) != 0)
- goto out;
- } else if (DB_UNDO(op)) {
- /*
- * If the file is 0-length then it was in the process of being
- * created, so we should unlink it. If it is non-0 length, then
- * either someone else created it and we need to leave it
- * untouched or we were in the process of creating it, allocated
- * the first page on a system that requires you to actually
- * write pages as you allocate them, but never got any data
- * on it.
- * If the file doesn't exist, we never got around to creating
- * it, so that's fine.
- */
- if (__os_exists(real_name, NULL) != 0)
- goto done;
-
- if ((ret = __os_open(dbenv, real_name, 0, 0, &fh)) != 0)
- goto out;
- if ((ret = __os_ioinfo(dbenv,
- real_name, &fh, &mb, &b, &io)) != 0)
- goto out;
- do_unlink = 0;
- if (mb != 0 || b != 0) {
- /*
- * We need to read the first page
- * to see if its got valid data on it.
- */
- if ((ret = __os_read(dbenv, &fh,
- &ondisk, sizeof(ondisk), &nr)) != 0 ||
- nr != sizeof(ondisk))
- goto out;
- if (ondisk.magic == 0)
- do_unlink = 1;
- }
- if ((ret = __os_closehandle(&fh)) != 0)
- goto out;
- /* Check for 0-length and if it is, delete it. */
- if (do_unlink || (mb == 0 && b == 0))
- if ((ret = __os_unlink(dbenv, real_name)) != 0)
- goto out;
- }
-
-done: *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: if (argp != NULL)
- __os_free(argp, 0);
- if (real_name != NULL)
- __os_freestr(real_name);
- return (ret);
-}
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/hash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
/*
* __crdel_metasub_recover --
@@ -145,16 +44,16 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int8_t *file_uid, ptype;
- int cmp_p, modified, reopen, ret;
+ int cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__crdel_metasub_print);
REC_INTRO(__crdel_metasub_read, 0);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = __memp_fget(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -165,7 +64,6 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
}
modified = 0;
- reopen = 0;
cmp_p = log_compare(&LSN(pagep), &argp->lsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->lsn);
@@ -173,14 +71,6 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
memcpy(pagep, argp->page.data, argp->page.size);
LSN(pagep) = *lsnp;
modified = 1;
- /*
- * If this is a meta-data page, then we must reopen;
- * if it was a root page, then we do not.
- */
- ptype = ((DBMETA *)argp->page.data)->type;
- if (ptype == P_HASHMETA || ptype == P_BTREEMETA ||
- ptype == P_QAMMETA)
- reopen = 1;
} else if (DB_UNDO(op)) {
/*
* We want to undo this page creation. The page creation
@@ -196,451 +86,14 @@ __crdel_metasub_recover(dbenv, dbtp, lsnp, op, info)
LSN(pagep) = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
-
- /*
- * If we are redoing a subdatabase create, we must close and reopen the
- * file to be sure that we have the proper meta information in the
- * in-memory structures
- */
- if (reopen) {
- /* Close cursor if it's open. */
- if (dbc != NULL) {
- dbc->c_close(dbc);
- dbc = NULL;
- }
-
- if ((ret = __os_malloc(dbenv,
- DB_FILE_ID_LEN, NULL, &file_uid)) != 0)
- goto out;
- memcpy(file_uid, &file_dbp->fileid[0], DB_FILE_ID_LEN);
- ret = __log_reopen_file(dbenv,
- NULL, argp->fileid, file_uid, argp->pgno);
- (void)__os_free(file_uid, DB_FILE_ID_LEN);
- if (ret != 0)
- goto out;
- }
-
-done: *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
-
-/*
- * __crdel_metapage_recover --
- * Recovery function for metapage.
- *
- * PUBLIC: int __crdel_metapage_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__crdel_metapage_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __crdel_metapage_args *argp;
- DB *dbp;
- DBMETA *meta, ondisk;
- DB_FH fh;
- size_t nr;
- u_int32_t b, io, mb, pagesize;
- int is_done, ret;
- char *real_name;
-
- COMPQUIET(info, NULL);
-
- real_name = NULL;
- memset(&fh, 0, sizeof(fh));
- REC_PRINT(__crdel_metapage_print);
-
- if ((ret = __crdel_metapage_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
-
- /*
- * If this is an in-memory database, then the name is going to
- * be NULL, which looks like a 0-length name in recovery.
- */
- if (argp->name.size == 0)
- goto done;
-
- meta = (DBMETA *)argp->page.data;
- __ua_memcpy(&pagesize, &meta->pagesize, sizeof(pagesize));
-
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (DB_REDO(op)) {
- if ((ret = __db_fileid_to_db(dbenv,
- &dbp, argp->fileid, 0)) != 0) {
- if (ret == DB_DELETED)
- goto done;
- else
- goto out;
- }
-
- /*
- * We simply read the first page and if the LSN is 0, we
- * write the meta-data page.
- */
- if ((ret = __os_open(dbenv, real_name, 0, 0, &fh)) != 0)
- goto out;
- if ((ret = __os_seek(dbenv, &fh,
- pagesize, argp->pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto out;
- /*
- * If the read succeeds then the page exists, then we need
- * to vrify that the page has actually been written, because
- * on some systems (e.g., Windows) we preallocate pages because
- * files aren't allowed to have holes in them. If the page
- * looks good then we're done.
- */
- if ((ret = __os_read(dbenv, &fh, &ondisk,
- sizeof(ondisk), &nr)) == 0 && nr == sizeof(ondisk)) {
- if (ondisk.magic != 0)
- goto done;
- if ((ret = __os_seek(dbenv, &fh,
- pagesize, argp->pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto out;
- }
-
- /*
- * Page didn't exist, update the LSN and write a new one.
- * (seek pointer shouldn't have moved)
- */
- __ua_memcpy(&meta->lsn, lsnp, sizeof(DB_LSN));
- if ((ret = __os_write(dbp->dbenv, &fh,
- argp->page.data, argp->page.size, &nr)) != 0)
- goto out;
- if (nr != (size_t)argp->page.size) {
- __db_err(dbenv, "Write failed during recovery");
- ret = EIO;
- goto out;
- }
-
- /*
- * We must close and reopen the file to be sure
- * that we have the proper meta information
- * in the in memory structures
- */
-
- if ((ret = __log_reopen_file(dbenv,
- argp->name.data, argp->fileid,
- meta->uid, argp->pgno)) != 0)
- goto out;
-
- /* Handle will be closed on exit. */
- } else if (DB_UNDO(op)) {
- is_done = 0;
-
- /* If file does not exist, there is nothing to undo. */
- if (__os_exists(real_name, NULL) != 0)
- goto done;
-
- /*
- * Before we can look at anything on disk, we have to check
- * if there is a valid dbp for this, and if there is, we'd
- * better flush it.
- */
- dbp = NULL;
- if ((ret =
- __db_fileid_to_db(dbenv, &dbp, argp->fileid, 0)) == 0)
- (void)dbp->sync(dbp, 0);
-
- /*
- * We need to make sure that we do not remove a file that
- * someone else created. If the file is 0-length, then we
- * can assume that we created it and remove it. If it is
- * not 0-length, then we need to check the LSN and make
- * sure that it's the file we created.
- */
- if ((ret = __os_open(dbenv, real_name, 0, 0, &fh)) != 0)
- goto out;
- if ((ret = __os_ioinfo(dbenv,
- real_name, &fh, &mb, &b, &io)) != 0)
- goto out;
- if (mb != 0 || b != 0) {
- /* The file has something in it. */
- if ((ret = __os_seek(dbenv, &fh,
- pagesize, argp->pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto out;
- if ((ret = __os_read(dbenv, &fh,
- &ondisk, sizeof(ondisk), &nr)) != 0)
- goto out;
- if (log_compare(&ondisk.lsn, lsnp) != 0)
- is_done = 1;
- }
-
- /*
- * Must close here, because unlink with the file open fails
- * on some systems.
- */
- if ((ret = __os_closehandle(&fh)) != 0)
- goto out;
-
- if (!is_done) {
- /*
- * On some systems, you cannot unlink an open file so
- * we close the fd in the dbp here and make sure we
- * don't try to close it again. First, check for a
- * saved_open_fhp, then close down the mpool.
- */
- if (dbp != NULL && dbp->saved_open_fhp != NULL &&
- F_ISSET(dbp->saved_open_fhp, DB_FH_VALID) &&
- (ret = __os_closehandle(dbp->saved_open_fhp)) != 0)
- goto out;
- if (dbp != NULL && dbp->mpf != NULL) {
- (void)__memp_fremove(dbp->mpf);
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto out;
- F_SET(dbp, DB_AM_DISCARD);
- dbp->mpf = NULL;
- }
- if ((ret = __os_unlink(dbenv, real_name)) != 0)
- goto out;
- }
- }
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (argp != NULL)
- __os_free(argp, 0);
- if (real_name != NULL)
- __os_freestr(real_name);
- if (F_ISSET(&fh, DB_FH_VALID))
- (void)__os_closehandle(&fh);
- return (ret);
-}
-
-/*
- * __crdel_delete_recover --
- * Recovery function for delete.
- *
- * PUBLIC: int __crdel_delete_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__crdel_delete_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- DB *dbp;
- __crdel_delete_args *argp;
- int ret;
- char *backup, *real_back, *real_name;
-
- REC_PRINT(__crdel_delete_print);
-
- backup = real_back = real_name = NULL;
- if ((ret = __crdel_delete_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
-
- if (DB_REDO(op)) {
- /*
- * On a recovery, as we recreate what was going on, we
- * recreate the creation of the file. And so, even though
- * it committed, we need to delete it. Try to delete it,
- * but it is not an error if that delete fails.
- */
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_name, NULL) == 0) {
- /*
- * If a file is deleted and then recreated, it's
- * possible for the __os_exists call above to
- * return success and for us to get here, but for
- * the fileid we're looking for to be marked
- * deleted. In that case, we needn't redo the
- * unlink even though the file exists, and it's
- * not an error.
- */
- ret = __db_fileid_to_db(dbenv, &dbp, argp->fileid, 0);
- if (ret == 0) {
- /*
- * On Windows, the underlying file must be
- * closed to perform a remove.
- */
- (void)__memp_fremove(dbp->mpf);
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto out;
- dbp->mpf = NULL;
- if ((ret = __os_unlink(dbenv, real_name)) != 0)
- goto out;
- } else if (ret != DB_DELETED)
- goto out;
- }
- /*
- * The transaction committed, so the only thing that might
- * be true is that the backup file is still around. Try
- * to delete it, but it's not an error if that delete fails.
- */
- if ((ret = __db_backup_name(dbenv, argp->name.data,
- &backup, lsnp)) != 0)
- goto out;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto out;
- if (__os_exists(real_back, NULL) == 0)
- if ((ret = __os_unlink(dbenv, real_back)) != 0)
- goto out;
- if ((ret = __db_txnlist_delete(dbenv, info,
- argp->name.data, TXNLIST_INVALID_ID, 1)) != 0)
- goto out;
- } else if (DB_UNDO(op)) {
- /*
- * Trying to undo. File may or may not have been deleted.
- * Try to move the backup to the original. If the backup
- * exists, then this is right. If it doesn't exist, then
- * nothing will happen and that's OK.
- */
- if ((ret = __db_backup_name(dbenv, argp->name.data,
- &backup, lsnp)) != 0)
- goto out;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto out;
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_back, NULL) == 0)
- if ((ret =
- __os_rename(dbenv, real_back, real_name)) != 0)
- goto out;
- }
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: if (argp != NULL)
- __os_free(argp, 0);
- if (backup != NULL)
- __os_freestr(backup);
- if (real_back != NULL)
- __os_freestr(real_back);
- if (real_name != NULL)
- __os_freestr(real_name);
- return (ret);
-}
-/*
- * __crdel_rename_recover --
- * Recovery function for rename.
- *
- * PUBLIC: int __crdel_rename_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__crdel_rename_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- DB *dbp;
- __crdel_rename_args *argp;
- char *new_name, *real_name;
- int ret, set;
-
- COMPQUIET(info, NULL);
-
- REC_PRINT(__crdel_rename_print);
-
- new_name = real_name = NULL;
-
- if ((ret = __crdel_rename_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
-
- if ((ret = __db_fileid_to_db(dbenv, &dbp, argp->fileid, 0)) != 0)
- goto out;
- if (DB_REDO(op)) {
- /*
- * We don't use the dbp parameter to __log_filelist_update
- * in the rename case, so passing NULL for it is OK.
- */
- if ((ret = __log_filelist_update(dbenv, NULL,
- argp->fileid, argp->newname.data, &set)) != 0)
- goto out;
- if (set != 0) {
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_name, NULL) == 0) {
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, argp->newname.data,
- 0, NULL, &new_name)) != 0)
- goto out;
- /*
- * On Windows, the underlying file
- * must be closed to perform a remove.
- * The db will be closed by a
- * log_register record. Rename
- * has exclusive access to the db.
- */
- (void)__memp_fremove(dbp->mpf);
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto out;
- dbp->mpf = NULL;
- if ((ret = __os_rename(dbenv,
- real_name, new_name)) != 0)
- goto out;
- }
- }
- } else {
- /*
- * We don't use the dbp parameter to __log_filelist_update
- * in the rename case, so passing NULL for it is OK.
- */
- if ((ret = __log_filelist_update(dbenv, NULL,
- argp->fileid, argp->name.data, &set)) != 0)
- goto out;
- if (set != 0) {
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->newname.data, 0, NULL, &new_name)) != 0)
- goto out;
- if (__os_exists(new_name, NULL) == 0) {
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, argp->name.data,
- 0, NULL, &real_name)) != 0)
- goto out;
- /*
- * On Windows, the underlying file
- * must be closed to perform a remove.
- * The file may have already been closed
- * if we are aborting the transaction.
- */
- if (dbp->mpf != NULL) {
- (void)__memp_fremove(dbp->mpf);
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto out;
- dbp->mpf = NULL;
- }
- if ((ret = __os_rename(dbenv,
- new_name, real_name)) != 0)
- goto out;
- }
- }
- }
-
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: if (argp != NULL)
- __os_free(argp, 0);
-
- if (new_name != NULL)
- __os_free(new_name, 0);
-
- if (real_name != NULL)
- __os_free(real_name, 0);
-
- return (ret);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
diff --git a/db/db/db.c b/db/db/db.c
index 6e74b4b21..7499a2d3e 100644
--- a/db/db/db.c
+++ b/db/db/db.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -40,364 +40,52 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db.c,v 11.117 2001/01/11 18:19:50 bostic Exp $";
+static const char revid[] = "$Id: db.c,v 11.283 2003/11/14 05:32:29 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <stddef.h>
-#include <stdlib.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_swap.h"
-#include "btree.h"
-#include "db_am.h"
-#include "hash.h"
-#include "lock.h"
-#include "log.h"
-#include "mp.h"
-#include "qam.h"
-#include "common_ext.h"
-
-/* Actions that __db_master_update can take. */
-typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;
-
-/* Flag values that __db_file_setup can return. */
-#define DB_FILE_SETUP_CREATE 0x01
-#define DB_FILE_SETUP_ZERO 0x02
-
-static int __db_file_setup __P((DB *,
- const char *, u_int32_t, int, db_pgno_t, int *));
-static int __db_master_update __P((DB *,
- const char *, u_int32_t,
- db_pgno_t *, mu_action, const char *, u_int32_t));
-static int __db_refresh __P((DB *));
-static int __db_remove_callback __P((DB *, void *));
-static int __db_set_pgsize __P((DB *, DB_FH *, char *));
-static int __db_subdb_remove __P((DB *, const char *, const char *));
-static int __db_subdb_rename __P(( DB *,
- const char *, const char *, const char *));
-#if CONFIG_TEST
-static void __db_makecopy __P((const char *, const char *));
-static int __db_testdocopy __P((DB *, const char *));
-static int __qam_testdocopy __P((DB *, const char *));
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+static int __db_dbenv_mpool __P((DB *, const char *, u_int32_t));
+static int __db_disassociate __P((DB *));
+
+#if CONFIG_TEST
+static void __db_makecopy __P((DB_ENV *, const char *, const char *));
+static int __db_testdocopy __P((DB_ENV *, const char *));
+static int __qam_testdocopy __P((DB *, const char *));
#endif
/*
- * __db_open --
- * Main library interface to the DB access methods.
- *
- * PUBLIC: int __db_open __P((DB *,
- * PUBLIC: const char *, const char *, DBTYPE, u_int32_t, int));
- */
-int
-__db_open(dbp, name, subdb, type, flags, mode)
- DB *dbp;
- const char *name, *subdb;
- DBTYPE type;
- u_int32_t flags;
- int mode;
-{
- DB_ENV *dbenv;
- DB_LOCK open_lock;
- DB *mdbp;
- db_pgno_t meta_pgno;
- u_int32_t ok_flags;
- int ret, t_ret;
-
- dbenv = dbp->dbenv;
- mdbp = NULL;
-
- /* Validate arguments. */
-#define OKFLAGS \
- (DB_CREATE | DB_EXCL | DB_FCNTL_LOCKING | \
- DB_NOMMAP | DB_RDONLY | DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE)
- if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0)
- return (ret);
- if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE))
- return (__db_ferr(dbenv, "DB->open", 1));
- if (LF_ISSET(DB_RDONLY) && LF_ISSET(DB_CREATE))
- return (__db_ferr(dbenv, "DB->open", 1));
-#ifdef HAVE_VXWORKS
- if (LF_ISSET(DB_TRUNCATE)) {
- __db_err(dbenv, "DB_TRUNCATE unsupported in VxWorks");
- return (__db_eopnotsup(dbenv));
- }
-#endif
- switch (type) {
- case DB_UNKNOWN:
- if (LF_ISSET(DB_CREATE|DB_TRUNCATE)) {
- __db_err(dbenv,
- "%s: DB_UNKNOWN type specified with DB_CREATE or DB_TRUNCATE",
- name);
- return (EINVAL);
- }
- ok_flags = 0;
- break;
- case DB_BTREE:
- ok_flags = DB_OK_BTREE;
- break;
- case DB_HASH:
- ok_flags = DB_OK_HASH;
- break;
- case DB_QUEUE:
- ok_flags = DB_OK_QUEUE;
- break;
- case DB_RECNO:
- ok_flags = DB_OK_RECNO;
- break;
- default:
- __db_err(dbenv, "unknown type: %lu", (u_long)type);
- return (EINVAL);
- }
- if (ok_flags)
- DB_ILLEGAL_METHOD(dbp, ok_flags);
-
- /* The environment may have been created, but never opened. */
- if (!F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_OPEN_CALLED)) {
- __db_err(dbenv, "environment not yet opened");
- return (EINVAL);
- }
-
- /*
- * Historically, you could pass in an environment that didn't have a
- * mpool, and DB would create a private one behind the scenes. This
- * no longer works.
- */
- if (!F_ISSET(dbenv, DB_ENV_DBLOCAL) && !MPOOL_ON(dbenv)) {
- __db_err(dbenv, "environment did not include a memory pool.");
- return (EINVAL);
- }
-
- /*
- * You can't specify threads during DB->open if subsystems in the
- * environment weren't configured with them.
- */
- if (LF_ISSET(DB_THREAD) &&
- !F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_THREAD)) {
- __db_err(dbenv, "environment not created using DB_THREAD");
- return (EINVAL);
- }
-
- /*
- * If the environment was configured with threads, the DB handle
- * must also be free-threaded, so we force the DB_THREAD flag on.
- * (See SR #2033 for why this is a requirement--recovery needs
- * to be able to grab a dbp using __db_fileid_to_dbp, and it has
- * no way of knowing which dbp goes with which thread, so whichever
- * one it finds has to be usable in any of them.)
- */
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- LF_SET(DB_THREAD);
-
- /* DB_TRUNCATE is not transaction recoverable. */
- if (LF_ISSET(DB_TRUNCATE) && TXN_ON(dbenv)) {
- __db_err(dbenv,
- "DB_TRUNCATE illegal in a transaction protected environment");
- return (EINVAL);
- }
-
- /* Subdatabase checks. */
- if (subdb != NULL) {
- /* Subdatabases must be created in named files. */
- if (name == NULL) {
- __db_err(dbenv,
- "multiple databases cannot be created in temporary files");
- return (EINVAL);
- }
-
- /* QAM can't be done as a subdatabase. */
- if (type == DB_QUEUE) {
- __db_err(dbenv, "Queue databases must be one-per-file");
- return (EINVAL);
- }
- }
-
- /* Convert any DB->open flags. */
- if (LF_ISSET(DB_RDONLY))
- F_SET(dbp, DB_AM_RDONLY);
-
- /* Fill in the type. */
- dbp->type = type;
-
- /*
- * If we're potentially creating a database, wrap the open inside of
- * a transaction.
- */
- if (TXN_ON(dbenv) && LF_ISSET(DB_CREATE))
- if ((ret = __db_metabegin(dbp, &open_lock)) != 0)
- return (ret);
-
- /*
- * If we're opening a subdatabase, we have to open (and potentially
- * create) the main database, and then get (and potentially store)
- * our base page number in that database. Then, we can finally open
- * the subdatabase.
- */
- if (subdb == NULL)
- meta_pgno = PGNO_BASE_MD;
- else {
- /*
- * Open the master database, optionally creating or updating
- * it, and retrieve the metadata page number.
- */
- if ((ret =
- __db_master_open(dbp, name, flags, mode, &mdbp)) != 0)
- goto err;
-
- /* Copy the page size and file id from the master. */
- dbp->pgsize = mdbp->pgsize;
- F_SET(dbp, DB_AM_SUBDB);
- memcpy(dbp->fileid, mdbp->fileid, DB_FILE_ID_LEN);
-
- if ((ret = __db_master_update(mdbp,
- subdb, type, &meta_pgno, MU_OPEN, NULL, flags)) != 0)
- goto err;
-
- /*
- * Clear the exclusive open and truncation flags, they only
- * apply to the open of the master database.
- */
- LF_CLR(DB_EXCL | DB_TRUNCATE);
- }
-
- ret = __db_dbopen(dbp, name, flags, mode, meta_pgno);
-
- /*
- * You can open the database that describes the subdatabases in the
- * rest of the file read-only. The content of each key's data is
- * unspecified and applications should never be adding new records
- * or updating existing records. However, during recovery, we need
- * to open these databases R/W so we can redo/undo changes in them.
- * Likewise, we need to open master databases read/write during
- * rename and remove so we can be sure they're fully sync'ed, so
- * we provide an override flag for the purpose.
- */
- if (subdb == NULL && !IS_RECOVERING(dbenv) && !LF_ISSET(DB_RDONLY) &&
- !LF_ISSET(DB_RDWRMASTER) && F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
- "files containing multiple databases may only be opened read-only");
- ret = EINVAL;
- goto err;
- }
-
-err: /*
- * End any transaction, committing if we were successful, aborting
- * otherwise.
- */
- if (TXN_ON(dbenv) && LF_ISSET(DB_CREATE))
- if ((t_ret = __db_metaend(dbp,
- &open_lock, ret == 0, NULL, NULL)) != 0 && ret == 0)
- ret = t_ret;
-
- /* If we were successful, don't discard the file on close. */
- if (ret == 0)
- F_CLR(dbp, DB_AM_DISCARD);
-
- /* If we were unsuccessful, destroy the DB handle. */
- if (ret != 0) {
- /* In recovery we set log_fileid early. */
- if (IS_RECOVERING(dbenv))
- dbp->log_fileid = DB_LOGFILEID_INVALID;
- __db_refresh(dbp);
- }
-
- if (mdbp != NULL) {
- /* If we were successful, don't discard the file on close. */
- if (ret == 0)
- F_CLR(mdbp, DB_AM_DISCARD);
- if ((t_ret = mdbp->close(mdbp, 0)) != 0 && ret == 0)
- ret = t_ret;
- }
-
- return (ret);
-}
-
-/*
- * __db_dbopen --
- * Open a database.
- * PUBLIC: int __db_dbopen __P((DB *, const char *, u_int32_t, int, db_pgno_t));
+ * DB.C --
+ * This file contains the utility functions for the DBP layer.
*/
-int
-__db_dbopen(dbp, name, flags, mode, meta_pgno)
- DB *dbp;
- const char *name;
- u_int32_t flags;
- int mode;
- db_pgno_t meta_pgno;
-{
- DB_ENV *dbenv;
- int ret, retinfo;
-
- dbenv = dbp->dbenv;
-
- /* Set up the underlying file. */
- if ((ret = __db_file_setup(dbp,
- name, flags, mode, meta_pgno, &retinfo)) != 0)
- return (ret);
-
- /*
- * If we created the file, set the truncate flag for the mpool. This
- * isn't for anything we've done, it's protection against stupid user
- * tricks: if the user deleted a file behind Berkeley DB's back, we
- * may still have pages in the mpool that match the file's "unique" ID.
- */
- if (retinfo & DB_FILE_SETUP_CREATE)
- flags |= DB_TRUNCATE;
-
- /* Set up the underlying environment. */
- if ((ret = __db_dbenv_setup(dbp, name, flags)) != 0)
- return (ret);
-
- /*
- * Do access method specific initialization.
- *
- * !!!
- * Set the open flag. (The underlying access method open functions
- * may want to do things like acquire cursors, so the open flag has
- * to be set before calling them.)
- */
- F_SET(dbp, DB_OPEN_CALLED);
-
- if (retinfo & DB_FILE_SETUP_ZERO)
- return (0);
-
- switch (dbp->type) {
- case DB_BTREE:
- ret = __bam_open(dbp, name, meta_pgno, flags);
- break;
- case DB_HASH:
- ret = __ham_open(dbp, name, meta_pgno, flags);
- break;
- case DB_RECNO:
- ret = __ram_open(dbp, name, meta_pgno, flags);
- break;
- case DB_QUEUE:
- ret = __qam_open(dbp, name, meta_pgno, mode, flags);
- break;
- case DB_UNKNOWN:
- return (__db_unknown_type(dbp->dbenv,
- "__db_dbopen", dbp->type));
- break;
- }
- return (ret);
-}
/*
* __db_master_open --
* Open up a handle on a master database.
*
* PUBLIC: int __db_master_open __P((DB *,
- * PUBLIC: const char *, u_int32_t, int, DB **));
+ * PUBLIC: DB_TXN *, const char *, u_int32_t, int, DB **));
*/
int
-__db_master_open(subdbp, name, flags, mode, dbpp)
+__db_master_open(subdbp, txn, name, flags, mode, dbpp)
DB *subdbp;
+ DB_TXN *txn;
const char *name;
u_int32_t flags;
int mode;
@@ -406,6 +94,8 @@ __db_master_open(subdbp, name, flags, mode, dbpp)
DB *dbp;
int ret;
+ *dbpp = NULL;
+
/* Open up a handle on the main database. */
if ((ret = db_create(&dbp, subdbp->dbenv, 0)) != 0)
return (ret);
@@ -416,31 +106,63 @@ __db_master_open(subdbp, name, flags, mode, dbpp)
* Set the pagesize in case we're creating a new database.
* Flag that we're creating a database with subdatabases.
*/
- dbp->type = DB_BTREE;
- dbp->open_txn = subdbp->open_txn;
dbp->pgsize = subdbp->pgsize;
F_SET(dbp, DB_AM_SUBDB);
+ F_SET(dbp, F_ISSET(subdbp,
+ DB_AM_RECOVER | DB_AM_SWAP |
+ DB_AM_ENCRYPT | DB_AM_CHKSUM | DB_AM_NOT_DURABLE));
- if ((ret = __db_dbopen(dbp, name, flags, mode, PGNO_BASE_MD)) != 0) {
- if (!F_ISSET(dbp, DB_AM_DISCARD))
- dbp->close(dbp, 0);
- return (ret);
- }
+ /*
+ * If there was a subdb specified, then we only want to apply
+ * DB_EXCL to the subdb, not the actual file. We only got here
+ * because there was a subdb specified.
+ */
+ LF_CLR(DB_EXCL);
+ LF_SET(DB_RDWRMASTER);
+ if ((ret = __db_open(dbp,
+ txn, name, NULL, DB_BTREE, flags, mode, PGNO_BASE_MD)) != 0)
+ goto err;
- *dbpp = dbp;
- return (0);
+ /*
+ * Verify that pagesize is the same on both.
+ * The items in dbp were now initialized from the meta
+ * page. The items in dbp were set in __db_dbopen
+ * when we either read or created the master file.
+ * Other items such as checksum and encryption are
+ * checked when we read the meta-page. So we do not
+ * check those here. However, if the meta-page caused
+ * chksumming to be turned on and it wasn't already, set
+ * it here.
+ */
+ if (F_ISSET(dbp, DB_AM_CHKSUM))
+ F_SET(subdbp, DB_AM_CHKSUM);
+ if (subdbp->pgsize != 0 && dbp->pgsize != subdbp->pgsize) {
+ ret = EINVAL;
+ __db_err(dbp->dbenv,
+ "Different pagesize specified on existent file");
+ goto err;
+ }
+err:
+ if (ret != 0 && !F_ISSET(dbp, DB_AM_DISCARD))
+ (void)__db_close(dbp, txn, 0);
+ else
+ *dbpp = dbp;
+ return (ret);
}
/*
* __db_master_update --
- * Add/Remove a subdatabase from a master database.
+ * Add/Open/Remove a subdatabase from a master database.
+ *
+ * PUBLIC: int __db_master_update __P((DB *, DB *, DB_TXN *, const char *,
+ * PUBLIC: DBTYPE, mu_action, const char *, u_int32_t));
*/
-static int
-__db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
- DB *mdbp;
+int
+__db_master_update(mdbp, sdbp, txn, subdb, type, action, newname, flags)
+ DB *mdbp, *sdbp;
+ DB_TXN *txn;
const char *subdb;
- u_int32_t type;
- db_pgno_t *meta_pgnop; /* may be NULL on MU_RENAME */
+ DBTYPE type;
mu_action action;
const char *newname;
u_int32_t flags;
@@ -456,34 +178,38 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
dbc = ndbc = NULL;
p = NULL;
- /* Might we modify the master database? If so, we'll need to lock. */
- modify = (action != MU_OPEN || LF_ISSET(DB_CREATE)) ? 1 : 0;
-
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
+ /* Might we modify the master database? If so, we'll need to lock. */
+ modify = (action != MU_OPEN || LF_ISSET(DB_CREATE)) ? 1 : 0;
+
/*
* Open up a cursor. If this is CDB and we're creating the database,
* make it an update cursor.
*/
- if ((ret = mdbp->cursor(mdbp, mdbp->open_txn, &dbc,
+ if ((ret = __db_cursor(mdbp, txn, &dbc,
(CDB_LOCKING(dbenv) && modify) ? DB_WRITECURSOR : 0)) != 0)
goto err;
/*
- * Try to point the cursor at the record.
+ * Point the cursor at the record.
*
* If we're removing or potentially creating an entry, lock the page
* with DB_RMW.
*
+ * We do multiple cursor operations with the cursor in some cases and
+ * subsequently access the data DBT information. Set DB_DBT_MALLOC so
+ * we don't risk modification of the data between our uses of it.
+ *
* !!!
* We don't include the name's nul termination in the database.
*/
- key.data = (char *)subdb;
- key.size = strlen(subdb);
- /* In the rename case, we do multiple cursor ops, so MALLOC is safer. */
+ key.data = (void *)subdb;
+ key.size = (u_int32_t)strlen(subdb);
F_SET(&data, DB_DBT_MALLOC);
- ret = dbc->c_get(dbc, &key, &data,
+
+ ret = __db_c_get(dbc, &key, &data,
DB_SET | ((STD_LOCKING(dbc) && modify) ? DB_RMW : 0));
/*
@@ -506,7 +232,7 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
* Delete the subdatabase entry first; if this fails,
* we don't want to touch the actual subdb pages.
*/
- if ((ret = dbc->c_del(dbc, 0)) != 0)
+ if ((ret = __db_c_del(dbc, 0)) != 0)
goto err;
/*
@@ -514,9 +240,10 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
* so it hasn't been converted to/from opposite
* endian architectures. Do it explicitly, now.
*/
- memcpy(meta_pgnop, data.data, sizeof(db_pgno_t));
- DB_NTOHL(meta_pgnop);
- if ((ret = memp_fget(mdbp->mpf, meta_pgnop, 0, &p)) != 0)
+ memcpy(&sdbp->meta_pgno, data.data, sizeof(db_pgno_t));
+ DB_NTOHL(&sdbp->meta_pgno);
+ if ((ret =
+ __memp_fget(mdbp->mpf, &sdbp->meta_pgno, 0, &p)) != 0)
goto err;
/* Free and put the page. */
@@ -538,11 +265,10 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
* for the existence of newname; it shouldn't appear under
* us since we hold the metadata lock.
*/
- if ((ret = mdbp->cursor(mdbp, mdbp->open_txn, &ndbc, 0)) != 0)
+ if ((ret = __db_cursor(mdbp, txn, &ndbc, 0)) != 0)
goto err;
- DB_ASSERT(newname != NULL);
- key.data = (void *) newname;
- key.size = strlen(newname);
+ key.data = (void *)newname;
+ key.size = (u_int32_t)strlen(newname);
/*
* We don't actually care what the meta page of the potentially-
@@ -551,7 +277,7 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
memset(&ndata, 0, sizeof(ndata));
F_SET(&ndata, DB_DBT_USERMEM | DB_DBT_PARTIAL);
- if ((ret = ndbc->c_get(ndbc, &key, &ndata, DB_SET)) == 0) {
+ if ((ret = __db_c_get(ndbc, &key, &ndata, DB_SET)) == 0) {
/* A subdb called newname exists. Bail. */
ret = EEXIST;
__db_err(dbenv, "rename: database %s exists", newname);
@@ -564,14 +290,14 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
* sole reference to the subdb. Use the second cursor
* so that the first one continues to point to the old record.
*/
- if ((ret = ndbc->c_put(ndbc, &key, &data, DB_KEYFIRST)) != 0)
+ if ((ret = __db_c_put(ndbc, &key, &data, DB_KEYFIRST)) != 0)
goto err;
- if ((ret = dbc->c_del(dbc, 0)) != 0) {
+ if ((ret = __db_c_del(dbc, 0)) != 0) {
/*
* If the delete fails, try to delete the record
* we just put, in case we're not txn-protected.
*/
- (void)ndbc->c_del(ndbc, 0);
+ (void)__db_c_del(ndbc, 0);
goto err;
}
@@ -583,8 +309,12 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
*/
switch (ret) {
case 0:
- memcpy(meta_pgnop, data.data, sizeof(db_pgno_t));
- DB_NTOHL(meta_pgnop);
+ if (LF_ISSET(DB_CREATE) && LF_ISSET(DB_EXCL)) {
+ ret = EEXIST;
+ goto err;
+ }
+ memcpy(&sdbp->meta_pgno, data.data, sizeof(db_pgno_t));
+ DB_NTOHL(&sdbp->meta_pgno);
goto done;
case DB_NOTFOUND:
if (LF_ISSET(DB_CREATE))
@@ -599,10 +329,11 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
goto err;
}
+ /* Create a subdatabase. */
if ((ret = __db_new(dbc,
type == DB_HASH ? P_HASHMETA : P_BTREEMETA, &p)) != 0)
goto err;
- *meta_pgnop = PGNO(p);
+ sdbp->meta_pgno = PGNO(p);
/*
* XXX
@@ -615,8 +346,9 @@ __db_master_update(mdbp, subdb, type, meta_pgnop, action, newname, flags)
memset(&ndata, 0, sizeof(ndata));
ndata.data = &t_pgno;
ndata.size = sizeof(db_pgno_t);
- if ((ret = dbc->c_put(dbc, &key, &ndata, DB_KEYLAST)) != 0)
+ if ((ret = __db_c_put(dbc, &key, &ndata, DB_KEYLAST)) != 0)
goto err;
+ F_SET(sdbp, DB_AM_CREATED);
break;
}
@@ -628,7 +360,7 @@ done: /*
if (p != NULL) {
if (ret == 0) {
if ((t_ret =
- memp_fput(mdbp->mpf, p, DB_MPOOL_DIRTY)) != 0)
+ __memp_fput(mdbp->mpf, p, DB_MPOOL_DIRTY)) != 0)
ret = t_ret;
/*
* Since we cannot close this file until after
@@ -636,18 +368,18 @@ done: /*
* pages, because we'll read these directly from
* disk to open.
*/
- if ((t_ret = mdbp->sync(mdbp, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_sync(mdbp)) != 0 && ret == 0)
ret = t_ret;
} else
- (void)__db_free(dbc, p);
+ (void)__memp_fput(mdbp->mpf, p, 0);
}
/* Discard the cursor(s) and data. */
if (data.data != NULL)
- __os_free(data.data, data.size);
- if (dbc != NULL && (t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ __os_ufree(dbenv, data.data);
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
- if (ndbc != NULL && (t_ret = ndbc->c_close(ndbc)) != 0 && ret == 0)
+ if (ndbc != NULL && (t_ret = __db_c_close(ndbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -657,21 +389,21 @@ done: /*
* __db_dbenv_setup --
* Set up the underlying environment during a db_open.
*
- * PUBLIC: int __db_dbenv_setup __P((DB *, const char *, u_int32_t));
+ * PUBLIC: int __db_dbenv_setup __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, u_int32_t, u_int32_t));
*/
int
-__db_dbenv_setup(dbp, name, flags)
+__db_dbenv_setup(dbp, txn, fname, id, flags)
DB *dbp;
- const char *name;
- u_int32_t flags;
+ DB_TXN *txn;
+ const char *fname;
+ u_int32_t id, flags;
{
DB *ldbp;
DB_ENV *dbenv;
- DBT pgcookie;
- DB_MPOOL_FINFO finfo;
- DB_PGINFO pginfo;
- int ret;
+ DB_MPOOL *dbmp;
u_int32_t maxid;
+ int ret;
dbenv = dbp->dbenv;
@@ -680,103 +412,49 @@ __db_dbenv_setup(dbp, name, flags)
/* Make sure we have at least DB_MINCACHE pages in our cache. */
if (dbenv->mp_gbytes == 0 &&
dbenv->mp_bytes < dbp->pgsize * DB_MINPAGECACHE &&
- (ret = dbenv->set_cachesize(
+ (ret = __memp_set_cachesize(
dbenv, 0, dbp->pgsize * DB_MINPAGECACHE, 0)) != 0)
return (ret);
- if ((ret = dbenv->open(dbenv, NULL, DB_CREATE |
+ if ((ret = __dbenv_open(dbenv, NULL, DB_CREATE |
DB_INIT_MPOOL | DB_PRIVATE | LF_ISSET(DB_THREAD), 0)) != 0)
return (ret);
}
- /* Register DB's pgin/pgout functions. */
- if ((ret =
- memp_register(dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0)
+ /* Join the underlying cache. */
+ if ((ret = __db_dbenv_mpool(dbp, fname, flags)) != 0)
return (ret);
/*
- * Open a backing file in the memory pool.
- *
- * If we need to pre- or post-process a file's pages on I/O, set the
- * file type. If it's a hash file, always call the pgin and pgout
- * routines. This means that hash files can never be mapped into
- * process memory. If it's a btree file and requires swapping, we
- * need to page the file in and out. This has to be right -- we can't
- * mmap files that are being paged in and out.
+ * We may need a per-thread mutex. Allocate it from the mpool
+ * region, there's supposed to be extra space there for that purpose.
*/
- memset(&finfo, 0, sizeof(finfo));
- switch (dbp->type) {
- case DB_BTREE:
- case DB_RECNO:
- finfo.ftype =
- F_ISSET(dbp, DB_AM_SWAP) ? DB_FTYPE_SET : DB_FTYPE_NOTSET;
- finfo.clear_len = DB_PAGE_DB_LEN;
- break;
- case DB_HASH:
- finfo.ftype = DB_FTYPE_SET;
- finfo.clear_len = DB_PAGE_DB_LEN;
- break;
- case DB_QUEUE:
- finfo.ftype =
- F_ISSET(dbp, DB_AM_SWAP) ? DB_FTYPE_SET : DB_FTYPE_NOTSET;
- finfo.clear_len = DB_PAGE_QUEUE_LEN;
- break;
- case DB_UNKNOWN:
- /*
- * If we're running in the verifier, our database might
- * be corrupt and we might not know its type--but we may
- * still want to be able to verify and salvage.
- *
- * If we can't identify the type, it's not going to be safe
- * to call __db_pgin--we pretty much have to give up all
- * hope of salvaging cross-endianness. Proceed anyway;
- * at worst, the database will just appear more corrupt
- * than it actually is, but at best, we may be able
- * to salvage some data even with no metadata page.
- */
- if (F_ISSET(dbp, DB_AM_VERIFYING)) {
- finfo.ftype = DB_FTYPE_NOTSET;
- finfo.clear_len = DB_PAGE_DB_LEN;
- break;
- }
- return (__db_unknown_type(dbp->dbenv,
- "__db_dbenv_setup", dbp->type));
+ if (LF_ISSET(DB_THREAD)) {
+ dbmp = dbenv->mp_handle;
+ if ((ret = __db_mutex_setup(dbenv, dbmp->reginfo, &dbp->mutexp,
+ MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ return (ret);
}
- finfo.pgcookie = &pgcookie;
- finfo.fileid = dbp->fileid;
- finfo.lsn_offset = 0;
-
- pginfo.db_pagesize = dbp->pgsize;
- pginfo.needswap = F_ISSET(dbp, DB_AM_SWAP);
- pgcookie.data = &pginfo;
- pgcookie.size = sizeof(DB_PGINFO);
- if ((ret = memp_fopen(dbenv, name,
- LF_ISSET(DB_RDONLY | DB_NOMMAP | DB_ODDFILESIZE | DB_TRUNCATE),
- 0, dbp->pgsize, &finfo, &dbp->mpf)) != 0)
+ /*
+ * Set up a bookkeeping entry for this database in the log region,
+ * if such a region exists. Note that even if we're in recovery
+ * or a replication client, where we won't log registries, we'll
+ * still need an FNAME struct, so LOGGING_ON is the correct macro.
+ */
+ if (LOGGING_ON(dbenv) &&
+ (ret = __dbreg_setup(dbp, fname, id)) != 0)
return (ret);
/*
- * We may need a per-thread mutex. Allocate it from the environment
- * region, there's supposed to be extra space there for that purpose.
+ * If we're actively logging and our caller isn't a recovery function
+ * that already did so, assign this dbp a log fileid.
*/
- if (LF_ISSET(DB_THREAD)) {
- if ((ret = __db_mutex_alloc(
- dbenv, dbenv->reginfo, (MUTEX **)&dbp->mutexp)) != 0)
- return (ret);
- if ((ret = __db_mutex_init(
- dbenv, dbp->mutexp, 0, MUTEX_THREAD)) != 0) {
- __db_mutex_free(dbenv, dbenv->reginfo, dbp->mutexp);
- return (ret);
- }
- }
-
- /* Get a log file id. */
- if (LOGGING_ON(dbenv) && !IS_RECOVERING(dbenv) &&
+ if (DBENV_LOGGING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER) &&
#if !defined(DEBUG_ROP)
!F_ISSET(dbp, DB_AM_RDONLY) &&
#endif
- (ret = log_register(dbenv, dbp, name)) != 0)
+ (ret = __dbreg_new_id(dbp, txn)) != 0)
return (ret);
/*
@@ -790,8 +468,8 @@ __db_dbenv_setup(dbp, name, flags)
*/
MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
for (maxid = 0, ldbp = LIST_FIRST(&dbenv->dblist);
- ldbp != NULL; ldbp = LIST_NEXT(dbp, dblistlinks)) {
- if (name != NULL &&
+ ldbp != NULL; ldbp = LIST_NEXT(ldbp, dblistlinks)) {
+ if (fname != NULL &&
memcmp(ldbp->fileid, dbp->fileid, DB_FILE_ID_LEN) == 0 &&
ldbp->meta_pgno == dbp->meta_pgno)
break;
@@ -801,7 +479,7 @@ __db_dbenv_setup(dbp, name, flags)
/*
* If ldbp is NULL, we didn't find a match, or we weren't
- * really looking because name is NULL. Assign the dbp an
+ * really looking because fname is NULL. Assign the dbp an
* adj_fileid one higher than the largest we found, and
* insert it at the head of the master dbp list.
*
@@ -822,560 +500,183 @@ __db_dbenv_setup(dbp, name, flags)
}
/*
- * __db_file_setup --
- * Setup the file or in-memory data.
- * Read the database metadata and resolve it with our arguments.
+ * __db_dbenv_mpool --
+ * Set up the underlying environment cache during a db_open.
*/
static int
-__db_file_setup(dbp, name, flags, mode, meta_pgno, retflags)
+__db_dbenv_mpool(dbp, fname, flags)
DB *dbp;
- const char *name;
+ const char *fname;
u_int32_t flags;
- int mode;
- db_pgno_t meta_pgno;
- int *retflags;
{
- DB *mdb;
- DBT namedbt;
DB_ENV *dbenv;
- DB_FH *fhp, fh;
- DB_LSN lsn;
- DB_TXN *txn;
- size_t nr;
- u_int32_t magic, oflags;
- int ret, retry_cnt, t_ret;
- char *real_name, mbuf[DBMETASIZE];
+ DBT pgcookie;
+ DB_MPOOLFILE *mpf;
+ DB_PGINFO pginfo;
+ u_int32_t clear_len;
+ int ftype, ret;
-#define IS_SUBDB_SETUP (meta_pgno != PGNO_BASE_MD)
+ COMPQUIET(mpf, NULL);
dbenv = dbp->dbenv;
- dbp->meta_pgno = meta_pgno;
- txn = NULL;
- *retflags = 0;
-
- /*
- * If we open a file handle and our caller is doing fcntl(2) locking,
- * we can't close it because that would discard the caller's lock.
- * Save it until we close the DB handle.
- */
- if (LF_ISSET(DB_FCNTL_LOCKING)) {
- if ((ret = __os_malloc(dbenv, sizeof(*fhp), NULL, &fhp)) != 0)
- return (ret);
- } else
- fhp = &fh;
- memset(fhp, 0, sizeof(*fhp));
-
- /*
- * If the file is in-memory, set up is simple. Otherwise, do the
- * hard work of opening and reading the file.
- *
- * If we have a file name, try and read the first page, figure out
- * what type of file it is, and initialize everything we can based
- * on that file's meta-data page.
- *
- * !!!
- * There's a reason we don't push this code down into the buffer cache.
- * The problem is that there's no information external to the file that
- * we can use as a unique ID. UNIX has dev/inode pairs, but they are
- * not necessarily unique after reboot, if the file was mounted via NFS.
- * Windows has similar problems, as the FAT filesystem doesn't maintain
- * dev/inode numbers across reboot. So, we must get something from the
- * file we can use to ensure that, even after a reboot, the file we're
- * joining in the cache is the right file for us to join. The solution
- * we use is to maintain a file ID that's stored in the database, and
- * that's why we have to open and read the file before calling into the
- * buffer cache.
- *
- * The secondary reason is that there's additional information that
- * we want to have before instantiating a file in the buffer cache:
- * the page size, file type (btree/hash), if swapping is required,
- * and flags (DB_RDONLY, DB_CREATE, DB_TRUNCATE). We could handle
- * needing this information by allowing it to be set for a file in
- * the buffer cache even after the file has been opened, and, of
- * course, supporting the ability to flush a file from the cache as
- * necessary, e.g., if we guessed wrongly about the page size. Given
- * that we have to read the file anyway to get the file ID, we might
- * as well get the rest, too.
- *
- * Get the real file name.
- */
- if (name == NULL) {
- F_SET(dbp, DB_AM_INMEM);
-
- if (dbp->type == DB_UNKNOWN) {
- __db_err(dbenv,
- "DBTYPE of unknown without existing file");
- return (EINVAL);
- }
- real_name = NULL;
-
- /* Set the page size if we don't have one yet. */
- if (dbp->pgsize == 0)
- dbp->pgsize = DB_DEF_IOSIZE;
-
- /*
- * If the file is a temporary file and we're doing locking,
- * then we have to create a unique file ID. We can't use our
- * normal dev/inode pair (or whatever this OS uses in place of
- * dev/inode pairs) because no backing file will be created
- * until the mpool cache is filled forcing the buffers to disk.
- * Grab a random locker ID to use as a file ID. The created
- * ID must never match a potential real file ID -- we know it
- * won't because real file IDs contain a time stamp after the
- * dev/inode pair, and we're simply storing a 4-byte value.
- *
- * !!!
- * Store the locker in the file id structure -- we can get it
- * from there as necessary, and it saves having two copies.
- */
- if (LOCKING_ON(dbenv) &&
- (ret = lock_id(dbenv, (u_int32_t *)dbp->fileid)) != 0)
- return (ret);
-
- return (0);
- }
- /* Get the real backing file name. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, name, 0, NULL, &real_name)) != 0)
+ /* Register DB's pgin/pgout functions. */
+ if ((ret = __memp_register(
+ dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0)
return (ret);
/*
- * Open the backing file. We need to make sure that multiple processes
- * attempting to create the file at the same time are properly ordered
- * so that only one of them creates the "unique" file ID, so we open it
- * O_EXCL and O_CREAT so two simultaneous attempts to create the region
- * will return failure in one of the attempts. If we're the one that
- * fails, simply retry without the O_CREAT flag, which will require the
- * meta-data page exist.
- */
-
- /* Fill in the default file mode. */
- if (mode == 0)
- mode = __db_omode("rwrw--");
-
- oflags = 0;
- if (LF_ISSET(DB_RDONLY))
- oflags |= DB_OSO_RDONLY;
- if (LF_ISSET(DB_TRUNCATE))
- oflags |= DB_OSO_TRUNC;
-
- retry_cnt = 0;
-open_retry:
- *retflags = 0;
- ret = 0;
- if (!IS_SUBDB_SETUP && LF_ISSET(DB_CREATE)) {
- if (dbp->open_txn != NULL) {
- /*
- * Start a child transaction to wrap this individual
- * create.
- */
- if ((ret =
- txn_begin(dbenv, dbp->open_txn, &txn, 0)) != 0)
- goto err_msg;
-
- memset(&namedbt, 0, sizeof(namedbt));
- namedbt.data = (char *)name;
- namedbt.size = strlen(name) + 1;
- if ((ret = __crdel_fileopen_log(dbenv, txn,
- &lsn, DB_FLUSH, &namedbt, mode)) != 0)
- goto err_msg;
- }
- DB_TEST_RECOVERY(dbp, DB_TEST_PREOPEN, ret, name);
- if ((ret = __os_open(dbenv, real_name,
- oflags | DB_OSO_CREATE | DB_OSO_EXCL, mode, fhp)) == 0) {
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTOPEN, ret, name);
-
- /* Commit the file create. */
- if (dbp->open_txn != NULL) {
- if ((ret = txn_commit(txn, DB_TXN_SYNC)) != 0)
- goto err_msg;
- txn = NULL;
- }
-
- /*
- * We created the file. This means that if we later
- * fail, we need to delete the file and if we're going
- * to do that, we need to trash any pages in the
- * memory pool. Since we only know here that we
- * created the file, we're going to set the flag here
- * and clear it later if we commit successfully.
- */
- F_SET(dbp, DB_AM_DISCARD);
- *retflags |= DB_FILE_SETUP_CREATE;
- } else {
- /*
- * Abort the file create. If the abort fails, report
- * the error returned by txn_abort(), rather than the
- * open error, for no particular reason.
- */
- if (dbp->open_txn != NULL) {
- if ((t_ret = txn_abort(txn)) != 0) {
- ret = t_ret;
- goto err_msg;
- }
- txn = NULL;
- }
-
- /*
- * If we were not doing an exclusive open, try again
- * without the create flag.
- */
- if (ret == EEXIST && !LF_ISSET(DB_EXCL)) {
- LF_CLR(DB_CREATE);
- DB_TEST_RECOVERY(dbp,
- DB_TEST_POSTOPEN, ret, name);
- goto open_retry;
- }
- }
- } else
- ret = __os_open(dbenv, real_name, oflags, mode, fhp);
-
- /*
- * Be quiet if we couldn't open the file because it didn't exist
- * or we did not have permission,
- * the customers don't like those messages appearing in the logs.
- * Otherwise, complain loudly.
- */
- if (ret != 0) {
- if (ret == EACCES || ret == ENOENT)
- goto err;
- goto err_msg;
- }
-
- /* Set the page size if we don't have one yet. */
- if (dbp->pgsize == 0) {
- if (IS_SUBDB_SETUP) {
- if ((ret = __db_master_open(dbp,
- name, flags, mode, &mdb)) != 0)
- goto err;
- dbp->pgsize = mdb->pgsize;
- (void)mdb->close(mdb, 0);
- } else if ((ret = __db_set_pgsize(dbp, fhp, real_name)) != 0)
- goto err;
- }
-
- /*
- * Seek to the metadata offset; if it's a master database open or a
- * database without subdatabases, we're seeking to 0, but that's OK.
- */
- if ((ret = __os_seek(dbenv, fhp,
- dbp->pgsize, meta_pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto err_msg;
-
- /*
- * Read the metadata page. We read DBMETASIZE bytes, which is larger
- * than any access method's metadata page and smaller than any disk
- * sector.
+ * If we need to pre- or post-process a file's pages on I/O, set the
+ * file type. If it's a hash file, always call the pgin and pgout
+ * routines. This means that hash files can never be mapped into
+ * process memory. If it's a btree file and requires swapping, we
+ * need to page the file in and out. This has to be right -- we can't
+ * mmap files that are being paged in and out.
*/
- if ((ret = __os_read(dbenv, fhp, mbuf, sizeof(mbuf), &nr)) != 0)
- goto err_msg;
-
- if (nr == sizeof(mbuf)) {
- /*
- * Figure out what access method we're dealing with, and then
- * call access method specific code to check error conditions
- * based on conflicts between the found file and application
- * arguments. A found file overrides some user information --
- * we don't consider it an error, for example, if the user set
- * an expected byte order and the found file doesn't match it.
- */
- F_CLR(dbp, DB_AM_SWAP);
- magic = ((DBMETA *)mbuf)->magic;
-
-swap_retry: switch (magic) {
- case DB_BTREEMAGIC:
- if ((ret =
- __bam_metachk(dbp, name, (BTMETA *)mbuf)) != 0)
- goto err;
- break;
- case DB_HASHMAGIC:
- if ((ret =
- __ham_metachk(dbp, name, (HMETA *)mbuf)) != 0)
- goto err;
- break;
- case DB_QAMMAGIC:
- if ((ret =
- __qam_metachk(dbp, name, (QMETA *)mbuf)) != 0)
- goto err;
- break;
- case 0:
- /*
- * There are two ways we can get a 0 magic number.
- * If we're creating a subdatabase, then the magic
- * number will be 0. We allocate a page as part of
- * finding out what the base page number will be for
- * the new subdatabase, but it's not initialized in
- * any way.
- *
- * The second case happens if we are in recovery
- * and we are going to recreate a database, it's
- * possible that it's page was created (on systems
- * where pages must be created explicitly to avoid
- * holes in files) but is still 0.
- */
- if (IS_SUBDB_SETUP) { /* Case 1 */
- if ((IS_RECOVERING(dbenv)
- && F_ISSET((DB_LOG *)
- dbenv->lg_handle, DBLOG_FORCE_OPEN))
- || ((DBMETA *)mbuf)->pgno != PGNO_INVALID)
- goto empty;
-
- ret = EINVAL;
- goto err;
- }
- /* Case 2 */
- if (IS_RECOVERING(dbenv)) {
- *retflags |= DB_FILE_SETUP_ZERO;
- goto empty;
- }
- goto bad_format;
- default:
- if (F_ISSET(dbp, DB_AM_SWAP))
- goto bad_format;
-
- M_32_SWAP(magic);
- F_SET(dbp, DB_AM_SWAP);
- goto swap_retry;
- }
- } else {
- /*
- * Only newly created files are permitted to fail magic
- * number tests.
- */
- if (nr != 0 || (!IS_RECOVERING(dbenv) && IS_SUBDB_SETUP))
- goto bad_format;
-
- /* Let the caller know that we had a 0-length file. */
- if (!LF_ISSET(DB_CREATE | DB_TRUNCATE))
- *retflags |= DB_FILE_SETUP_ZERO;
-
+ switch (dbp->type) {
+ case DB_BTREE:
+ case DB_RECNO:
+ ftype = F_ISSET(dbp, DB_AM_SWAP | DB_AM_ENCRYPT | DB_AM_CHKSUM)
+ ? DB_FTYPE_SET : DB_FTYPE_NOTSET;
+ clear_len = CRYPTO_ON(dbenv) ? dbp->pgsize : DB_PAGE_DB_LEN;
+ break;
+ case DB_HASH:
+ ftype = DB_FTYPE_SET;
+ clear_len = CRYPTO_ON(dbenv) ? dbp->pgsize : DB_PAGE_DB_LEN;
+ break;
+ case DB_QUEUE:
+ ftype = F_ISSET(dbp,
+ DB_AM_SWAP | DB_AM_ENCRYPT | DB_AM_CHKSUM) ?
+ DB_FTYPE_SET : DB_FTYPE_NOTSET;
+ clear_len = CRYPTO_ON(dbenv) ? dbp->pgsize : DB_PAGE_QUEUE_LEN;
+ break;
+ case DB_UNKNOWN:
/*
- * The only way we can reach here with the DB_CREATE flag set
- * is if we created the file. If that's not the case, then
- * either (a) someone else created the file but has not yet
- * written out the metadata page, or (b) we truncated the file
- * (DB_TRUNCATE) leaving it zero-length. In the case of (a),
- * we want to sleep and give the file creator time to write
- * the metadata page. In the case of (b), we want to continue.
+ * If we're running in the verifier, our database might
+ * be corrupt and we might not know its type--but we may
+ * still want to be able to verify and salvage.
*
- * !!!
- * There's a race in the case of two processes opening the file
- * with the DB_TRUNCATE flag set at roughly the same time, and
- * they could theoretically hurt each other. Sure hope that's
- * unlikely.
- */
- if (!LF_ISSET(DB_CREATE | DB_TRUNCATE) &&
- !IS_RECOVERING(dbenv)) {
- if (retry_cnt++ < 3) {
- __os_sleep(dbenv, 1, 0);
- goto open_retry;
- }
-bad_format: if (!IS_RECOVERING(dbenv))
- __db_err(dbenv,
- "%s: unexpected file type or format", name);
- ret = EINVAL;
- goto err;
- }
-
- DB_ASSERT (dbp->type != DB_UNKNOWN);
-
-empty: /*
- * The file is empty, and that's OK. If it's not a subdatabase,
- * though, we do need to generate a unique file ID for it. The
- * unique file ID includes a timestamp so that we can't collide
- * with any other files, even when the file IDs (dev/inode pair)
- * are reused.
+ * If we can't identify the type, it's not going to be safe
+ * to call __db_pgin--we pretty much have to give up all
+ * hope of salvaging cross-endianness. Proceed anyway;
+ * at worst, the database will just appear more corrupt
+ * than it actually is, but at best, we may be able
+ * to salvage some data even with no metadata page.
*/
- if (!IS_SUBDB_SETUP) {
- if (*retflags & DB_FILE_SETUP_ZERO)
- memset(dbp->fileid, 0, DB_FILE_ID_LEN);
- else if ((ret = __os_fileid(dbenv,
- real_name, 1, dbp->fileid)) != 0)
- goto err_msg;
+ if (F_ISSET(dbp, DB_AM_VERIFYING)) {
+ ftype = DB_FTYPE_NOTSET;
+ clear_len = DB_PAGE_DB_LEN;
+ break;
}
+ /* FALLTHROUGH */
+ default:
+ return (
+ __db_unknown_type(dbenv, "__db_dbenv_setup", dbp->type));
}
- if (0) {
-err_msg: __db_err(dbenv, "%s: %s", name, db_strerror(ret));
- }
-
- /*
- * Abort any running transaction -- it can only exist if something
- * went wrong.
- */
-err:
-DB_TEST_RECOVERY_LABEL
-
- /*
- * If we opened a file handle and our caller is doing fcntl(2) locking,
- * then we can't close it because that would discard the caller's lock.
- * Otherwise, close the handle.
- */
- if (F_ISSET(fhp, DB_FH_VALID)) {
- if (ret == 0 && LF_ISSET(DB_FCNTL_LOCKING))
- dbp->saved_open_fhp = fhp;
- else
- if ((t_ret = __os_closehandle(fhp)) != 0 && ret == 0)
- ret = t_ret;
- }
-
- /*
- * This must be done after the file is closed, since
- * txn_abort() may remove the file, and an open file
- * cannot be removed on a Windows platforms.
- */
- if (txn != NULL)
- (void)txn_abort(txn);
-
- if (real_name != NULL)
- __os_freestr(real_name);
+ mpf = dbp->mpf;
- return (ret);
-}
+ (void)__memp_set_clear_len(mpf, clear_len);
+ (void)__memp_set_fileid(mpf, dbp->fileid);
+ (void)__memp_set_ftype(mpf, ftype);
+ (void)__memp_set_lsn_offset(mpf, 0);
-/*
- * __db_set_pgsize --
- * Set the page size based on file information.
- */
-static int
-__db_set_pgsize(dbp, fhp, name)
- DB *dbp;
- DB_FH *fhp;
- char *name;
-{
- DB_ENV *dbenv;
- u_int32_t iopsize;
- int ret;
-
- dbenv = dbp->dbenv;
-
- /*
- * Use the filesystem's optimum I/O size as the pagesize if a pagesize
- * not specified. Some filesystems have 64K as their optimum I/O size,
- * but as that results in fairly large default caches, we limit the
- * default pagesize to 16K.
- */
- if ((ret = __os_ioinfo(dbenv, name, fhp, NULL, NULL, &iopsize)) != 0) {
- __db_err(dbenv, "%s: %s", name, db_strerror(ret));
+ pginfo.db_pagesize = dbp->pgsize;
+ pginfo.flags =
+ F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
+ pginfo.type = dbp->type;
+ pgcookie.data = &pginfo;
+ pgcookie.size = sizeof(DB_PGINFO);
+ (void)__memp_set_pgcookie(mpf, &pgcookie);
+
+ if ((ret = __memp_fopen(mpf, NULL, fname,
+ LF_ISSET(DB_RDONLY | DB_NOMMAP |
+ DB_ODDFILESIZE | DB_TRUNCATE) |
+ (F_ISSET(dbenv, DB_ENV_DIRECT_DB) ? DB_DIRECT : 0) |
+ (F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_TXN_NOT_DURABLE : 0),
+ 0, dbp->pgsize)) != 0)
return (ret);
- }
- if (iopsize < 512)
- iopsize = 512;
- if (iopsize > 16 * 1024)
- iopsize = 16 * 1024;
-
- /*
- * Sheer paranoia, but we don't want anything that's not a power-of-2
- * (we rely on that for alignment of various types on the pages), and
- * we want a multiple of the sector size as well.
- */
- OS_ROUNDOFF(iopsize, 512);
-
- dbp->pgsize = iopsize;
- F_SET(dbp, DB_AM_PGDEF);
return (0);
}
/*
* __db_close --
- * DB destructor.
+ * DB->close method.
*
- * PUBLIC: int __db_close __P((DB *, u_int32_t));
+ * PUBLIC: int __db_close __P((DB *, DB_TXN *, u_int32_t));
*/
int
-__db_close(dbp, flags)
+__db_close(dbp, txn, flags)
DB *dbp;
+ DB_TXN *txn;
u_int32_t flags;
{
DB_ENV *dbenv;
- DBC *dbc;
- int ret, t_ret;
-
- ret = 0;
+ u_int32_t dbpflags;
+ int db_ref, deferred_close, ret, t_ret;
dbenv = dbp->dbenv;
- PANIC_CHECK(dbenv);
-
- /* Validate arguments. */
- if ((ret = __db_closechk(dbp, flags)) != 0)
- goto err;
-
- /* If never opened, or not currently open, it's easy. */
- if (!F_ISSET(dbp, DB_OPEN_CALLED))
- goto never_opened;
-
- /* Sync the underlying access method. */
- if (!LF_ISSET(DB_NOSYNC) && !F_ISSET(dbp, DB_AM_DISCARD) &&
- (t_ret = dbp->sync(dbp, 0)) != 0 && ret == 0)
- ret = t_ret;
+ deferred_close = ret = 0;
/*
- * Go through the active cursors and call the cursor recycle routine,
- * which resolves pending operations and moves the cursors onto the
- * free list. Then, walk the free list and call the cursor destroy
- * routine.
+ * Validate arguments, but as a DB handle destructor, we can't fail.
+ *
+ * Check for consistent transaction usage -- ignore errors. Only
+ * internal callers specify transactions, so it's a serious problem
+ * if we get error messages.
*/
- while ((dbc = TAILQ_FIRST(&dbp->active_queue)) != NULL)
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
- while ((dbc = TAILQ_FIRST(&dbp->free_queue)) != NULL)
- if ((t_ret = __db_c_destroy(dbc)) != 0 && ret == 0)
- ret = t_ret;
+ if (txn != NULL)
+ (void)__db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0);
+
+ dbpflags = dbp->flags;
+ /* Refresh the structure and close any underlying resources. */
+ ret = __db_refresh(dbp, txn, flags, &deferred_close);
/*
- * Close any outstanding join cursors. Join cursors destroy
- * themselves on close and have no separate destroy routine.
+ * If we've deferred the close because the logging of the close failed,
+ * return our failure right away without destroying the handle.
*/
- while ((dbc = TAILQ_FIRST(&dbp->join_queue)) != NULL)
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
- /* Remove this DB handle from the DB_ENV's dblist. */
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- LIST_REMOVE(dbp, dblistlinks);
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
-
- /* Sync the memory pool. */
- if (!LF_ISSET(DB_NOSYNC) && !F_ISSET(dbp, DB_AM_DISCARD) &&
- (t_ret = memp_fsync(dbp->mpf)) != 0 &&
- t_ret != DB_INCOMPLETE && ret == 0)
- ret = t_ret;
-
- /* Close any handle we've been holding since the open. */
- if (dbp->saved_open_fhp != NULL &&
- F_ISSET(dbp->saved_open_fhp, DB_FH_VALID) &&
- (t_ret = __os_closehandle(dbp->saved_open_fhp)) != 0 && ret == 0)
- ret = t_ret;
+ if (deferred_close)
+ return (ret);
-never_opened:
/*
* Call the access specific close function.
*
* !!!
- * Because of where the function is called in the close process,
- * these routines can't do anything that would dirty pages or
- * otherwise affect closing down the database.
+ * Because of where these functions are called in the DB handle close
+ * process, these routines can't do anything that would dirty pages or
+ * otherwise affect closing down the database. Specifically, we can't
+ * abort and recover any of the information they control.
*/
- if ((t_ret = __ham_db_close(dbp)) != 0 && ret == 0)
- ret = t_ret;
if ((t_ret = __bam_db_close(dbp)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret = __qam_db_close(dbp)) != 0 && ret == 0)
+ if ((t_ret = __ham_db_close(dbp)) != 0 && ret == 0)
ret = t_ret;
-
-err:
- /* Refresh the structure and close any local environment. */
- if ((t_ret = __db_refresh(dbp)) != 0 && ret == 0)
+ if ((t_ret = __qam_db_close(dbp, dbpflags)) != 0 && ret == 0)
ret = t_ret;
- if (F_ISSET(dbenv, DB_ENV_DBLOCAL) &&
- --dbenv->dblocal_ref == 0 &&
- (t_ret = dbenv->close(dbenv, 0)) != 0 && ret == 0)
+
+ /* !!!
+ * This code has an apparent race between the moment we read and
+ * decrement dbenv->db_ref and the moment we check whether it's 0.
+ * However, if the environment is DBLOCAL, the user shouldn't have a
+ * reference to the dbenv handle anyway; the only way we can get
+ * multiple dbps sharing a local dbenv is if we open them internally
+ * during something like a subdatabase open. If any such thing is
+ * going on while the user is closing the original dbp with a local
+ * dbenv, someone's already badly screwed up, so there's no reason
+ * to bother engineering around this possibility.
+ */
+ MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ db_ref = --dbenv->db_ref;
+ MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+ if (F_ISSET(dbenv, DB_ENV_DBLOCAL) && db_ref == 0 &&
+ (t_ret = __dbenv_close(dbenv, 0)) != 0 && ret == 0)
ret = t_ret;
+ /* Free the database handle. */
memset(dbp, CLEAR_BYTE, sizeof(*dbp));
- __os_free(dbp, sizeof(*dbp));
+ __os_free(dbenv, dbp);
return (ret);
}
@@ -1383,653 +684,299 @@ err:
/*
* __db_refresh --
* Refresh the DB structure, releasing any allocated resources.
+ * This does most of the work of closing files now because refresh
+ * is what is used during abort processing (since we can't destroy
+ * the actual handle) and during abort processing, we may have a
+ * fully opened handle.
+ *
+ * PUBLIC: int __db_refresh __P((DB *, DB_TXN *, u_int32_t, int *));
*/
-static int
-__db_refresh(dbp)
+int
+__db_refresh(dbp, txn, flags, deferred_closep)
DB *dbp;
+ DB_TXN *txn;
+ u_int32_t flags;
+ int *deferred_closep;
{
- DB_ENV *dbenv;
+ DB *sdbp;
DBC *dbc;
+ DB_ENV *dbenv;
+ DB_LOCKREQ lreq;
+ DB_MPOOL *dbmp;
int ret, t_ret;
ret = 0;
dbenv = dbp->dbenv;
+ /* If never opened, or not currently open, it's easy. */
+ if (!F_ISSET(dbp, DB_AM_OPEN_CALLED))
+ goto never_opened;
+
/*
- * Go through the active cursors and call the cursor recycle routine,
- * which resolves pending operations and moves the cursors onto the
- * free list. Then, walk the free list and call the cursor destroy
- * routine.
+ * If we have any secondary indices, disassociate them from us.
+ * We don't bother with the mutex here; it only protects some
+ * of the ops that will make us core-dump mid-close anyway, and
+ * if you're trying to do something with a secondary *while* you're
+ * closing the primary, you deserve what you get. The disassociation
+ * is mostly done just so we can close primaries and secondaries in
+ * any order--but within one thread of control.
*/
- while ((dbc = TAILQ_FIRST(&dbp->active_queue)) != NULL)
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
- while ((dbc = TAILQ_FIRST(&dbp->free_queue)) != NULL)
- if ((t_ret = __db_c_destroy(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
- dbp->type = 0;
-
- /* Close the memory pool file handle. */
- if (dbp->mpf != NULL) {
- if (F_ISSET(dbp, DB_AM_DISCARD))
- (void)__memp_fremove(dbp->mpf);
- if ((t_ret = memp_fclose(dbp->mpf)) != 0 && ret == 0)
+ for (sdbp = LIST_FIRST(&dbp->s_secondaries);
+ sdbp != NULL; sdbp = LIST_NEXT(sdbp, s_links)) {
+ LIST_REMOVE(sdbp, s_links);
+ if ((t_ret = __db_disassociate(sdbp)) != 0 && ret == 0)
ret = t_ret;
- dbp->mpf = NULL;
- }
-
- /* Discard the thread mutex. */
- if (dbp->mutexp != NULL) {
- __db_mutex_free(dbenv, dbenv->reginfo, dbp->mutexp);
- dbp->mutexp = NULL;
}
- /* Discard the log file id. */
- if (!IS_RECOVERING(dbenv)
- && dbp->log_fileid != DB_LOGFILEID_INVALID)
- (void)log_unregister(dbenv, dbp);
-
- F_CLR(dbp, DB_AM_DISCARD);
- F_CLR(dbp, DB_AM_INMEM);
- F_CLR(dbp, DB_AM_RDONLY);
- F_CLR(dbp, DB_AM_SWAP);
- F_CLR(dbp, DB_DBM_ERROR);
- F_CLR(dbp, DB_OPEN_CALLED);
-
- return (ret);
-}
-
-/*
- * __db_remove
- * Remove method for DB.
- *
- * PUBLIC: int __db_remove __P((DB *, const char *, const char *, u_int32_t));
- */
-int
-__db_remove(dbp, name, subdb, flags)
- DB *dbp;
- const char *name, *subdb;
- u_int32_t flags;
-{
- DBT namedbt;
- DB_ENV *dbenv;
- DB_LOCK remove_lock;
- DB_LSN newlsn;
- int ret, t_ret, (*callback_func) __P((DB *, void *));
- char *backup, *real_back, *real_name;
- void *cookie;
-
- dbenv = dbp->dbenv;
- ret = 0;
- backup = real_back = real_name = NULL;
-
- PANIC_CHECK(dbenv);
/*
- * Cannot use DB_ILLEGAL_AFTER_OPEN here because that returns
- * and we cannot return, but must deal with the error and destroy
- * the handle anyway.
+ * Sync the underlying access method. Do before closing the cursors
+ * because DB->sync allocates cursors in order to write Recno backing
+ * source text files.
+ *
+ * Sync is slow on some systems, notably Solaris filesystems where the
+ * entire buffer cache is searched. If we're in recovery, don't flush
+ * the file, it's not necessary.
*/
- if (F_ISSET(dbp, DB_OPEN_CALLED)) {
- ret = __db_mi_open(dbp->dbenv, "remove", 1);
- goto err_close;
- }
-
- /* Validate arguments. */
- if ((ret = __db_removechk(dbp, flags)) != 0)
- goto err_close;
+ if (!LF_ISSET(DB_NOSYNC) &&
+ !F_ISSET(dbp, DB_AM_DISCARD | DB_AM_RECOVER) &&
+ (t_ret = __db_sync(dbp)) != 0 && ret == 0)
+ ret = t_ret;
/*
- * Subdatabases.
+ * Go through the active cursors and call the cursor recycle routine,
+ * which resolves pending operations and moves the cursors onto the
+ * free list. Then, walk the free list and call the cursor destroy
+ * routine. Note that any failure on a close is considered "really
+ * bad" and we just break out of the loop and force forward.
*/
- if (subdb != NULL) {
- /* Subdatabases must be created in named files. */
- if (name == NULL) {
- __db_err(dbenv,
- "multiple databases cannot be created in temporary files");
- goto err_close;
+ while ((dbc = TAILQ_FIRST(&dbp->active_queue)) != NULL)
+ if ((t_ret = __db_c_close(dbc)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ break;
}
- return (__db_subdb_remove(dbp, name, subdb));
- }
-
- if ((ret = dbp->open(dbp,
- name, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0)) != 0)
- goto err_close;
-
- if (LOGGING_ON(dbenv) && (ret = __log_file_lock(dbp)) != 0)
- goto err_close;
-
- if ((ret = dbp->sync(dbp, 0)) != 0)
- goto err_close;
-
- /* Start the transaction and log the delete. */
- if (TXN_ON(dbenv) && (ret = __db_metabegin(dbp, &remove_lock)) != 0)
- goto err_close;
-
- if (LOGGING_ON(dbenv)) {
- memset(&namedbt, 0, sizeof(namedbt));
- namedbt.data = (char *)name;
- namedbt.size = strlen(name) + 1;
- if ((ret = __crdel_delete_log(dbenv,
- dbp->open_txn, &newlsn, DB_FLUSH,
- dbp->log_fileid, &namedbt)) != 0) {
- __db_err(dbenv,
- "%s: %s", name, db_strerror(ret));
- goto err;
+ while ((dbc = TAILQ_FIRST(&dbp->free_queue)) != NULL)
+ if ((t_ret = __db_c_destroy(dbc)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ break;
}
- }
-
- /* Find the real name of the file. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, name, 0, NULL, &real_name)) != 0)
- goto err;
/*
- * XXX
- * We don't bother to open the file and call __memp_fremove on the mpf.
- * There is a potential race here. It is at least possible that, if
- * the unique filesystem ID (dev/inode pair on UNIX) is reallocated
- * within a second (the granularity of the fileID timestamp), a new
- * file open will get the same fileID as the file being "removed".
- * We may actually want to open the file and call __memp_fremove on
- * the mpf to get around this.
+ * Close any outstanding join cursors. Join cursors destroy
+ * themselves on close and have no separate destroy routine.
*/
+ while ((dbc = TAILQ_FIRST(&dbp->join_queue)) != NULL)
+ if ((t_ret = __db_join_close(dbc)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ break;
+ }
- /* Create name for backup file. */
- if (TXN_ON(dbenv)) {
- if ((ret =
- __db_backup_name(dbenv, name, &backup, &newlsn)) != 0)
- goto err;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto err;
- }
-
- callback_func = __db_remove_callback;
- cookie = real_back;
- DB_TEST_RECOVERY(dbp, DB_TEST_PRERENAME, ret, name);
- if (dbp->db_am_remove != NULL &&
- (ret = dbp->db_am_remove(dbp,
- name, subdb, &newlsn, &callback_func, &cookie)) != 0)
- goto err;
/*
- * On Windows, the underlying file must be closed to perform a remove.
- * Nothing later in __db_remove requires that it be open, and the
- * dbp->close closes it anyway, so we just close it early.
+ * Sync the memory pool, even though we've already called DB->sync,
+ * because closing cursors can dirty pages by deleting items they
+ * referenced.
+ *
+ * Sync is slow on some systems, notably Solaris filesystems where the
+ * entire buffer cache is searched. If we're in recovery, don't flush
+ * the file, it's not necessary.
*/
- (void)__memp_fremove(dbp->mpf);
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto err;
- dbp->mpf = NULL;
-
- if (TXN_ON(dbenv))
- ret = __os_rename(dbenv, real_name, real_back);
- else
- ret = __os_unlink(dbenv, real_name);
-
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTRENAME, ret, name);
+ if (!LF_ISSET(DB_NOSYNC) &&
+ !F_ISSET(dbp, DB_AM_DISCARD | DB_AM_RECOVER) &&
+ (t_ret = __memp_fsync(dbp->mpf)) != 0 && ret == 0)
+ ret = t_ret;
-err:
-DB_TEST_RECOVERY_LABEL
/*
- * End the transaction, committing the transaction if we were
- * successful, aborting otherwise.
+ * At this point, we haven't done anything to render the DB
+ * handle unusable, at least by a transaction abort. Take the
+ * opportunity now to log the file close. If this log fails
+ * and we're in a transaction, we have to bail out of the attempted
+ * close; we'll need a dbp in order to successfully abort the
+ * transaction, and we can't conjure a new one up because we haven't
+ * gotten out the dbreg_register record that represents the close.
+ * In this case, we put off actually closing the dbp until we've
+ * performed the abort.
*/
- if (dbp->open_txn != NULL && (t_ret = __db_metaend(dbp, &remove_lock,
- ret == 0, callback_func, cookie)) != 0 && ret == 0)
- ret = t_ret;
+ if (LOGGING_ON(dbp->dbenv)) {
+ /*
+ * Discard the log file id, if any. We want to log the close
+ * if and only if this is not a recovery dbp.
+ */
+ if (F_ISSET(dbp, DB_AM_RECOVER))
+ t_ret = __dbreg_revoke_id(dbp, 0, DB_LOGFILEID_INVALID);
+ else {
+ if ((t_ret = __dbreg_close_id(dbp, txn)) != 0 &&
+ txn != NULL) {
+ /*
+ * We're in a txn and the attempt to log the
+ * close failed; let the txn subsystem know
+ * that we need to destroy this dbp once we're
+ * done with the abort, then bail from the
+ * close.
+ *
+ * Note that if the attempt to put off the
+ * close -also- fails--which it won't unless
+ * we're out of heap memory--we're really
+ * screwed. Panic.
+ */
+ if ((ret =
+ __txn_closeevent(dbenv, txn, dbp)) != 0)
+ return (__db_panic(dbenv, ret));
+ if (deferred_closep != NULL)
+ *deferred_closep = 1;
+ return (t_ret);
+ }
+ }
- /* FALLTHROUGH */
+ if (ret == 0)
+ ret = t_ret;
-err_close:
- if (real_back != NULL)
- __os_freestr(real_back);
- if (real_name != NULL)
- __os_freestr(real_name);
- if (backup != NULL)
- __os_freestr(backup);
+ /* Discard the log FNAME. */
+ if ((t_ret = __dbreg_teardown(dbp)) != 0 && ret == 0)
+ ret = t_ret;
+ }
- /* We no longer have an mpool, so syncing would be disastrous. */
- if ((t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+ /* Close any handle we've been holding since the open. */
+ if (dbp->saved_open_fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, dbp->saved_open_fhp)) != 0 &&
+ ret == 0)
ret = t_ret;
- return (ret);
-}
-
-/*
- * __db_subdb_remove --
- * Remove a subdatabase.
- */
-static int
-__db_subdb_remove(dbp, name, subdb)
- DB *dbp;
- const char *name, *subdb;
-{
- DB *mdbp;
- DBC *dbc;
- DB_ENV *dbenv;
- DB_LOCK remove_lock;
- db_pgno_t meta_pgno;
- int ret, t_ret;
-
- mdbp = NULL;
- dbc = NULL;
- dbenv = dbp->dbenv;
-
- /* Start the transaction. */
- if (TXN_ON(dbenv) && (ret = __db_metabegin(dbp, &remove_lock)) != 0)
- goto err_close;
-
- /*
- * Open the subdatabase. We can use the user's DB handle for this
- * purpose, I think.
- */
- if ((ret = __db_open(dbp, name, subdb, DB_UNKNOWN, 0, 0)) != 0)
- goto err;
+never_opened:
+ if (dbp->lid != DB_LOCK_INVALIDID) {
+ /* We may have pending trade operations on this dbp. */
+ if (txn != NULL)
+ __txn_remlock(dbenv, txn, &dbp->handle_lock, dbp->lid);
+
+ /* We may be holding the handle lock; release it. */
+ lreq.op = DB_LOCK_PUT_ALL;
+ lreq.obj = NULL;
+ if ((t_ret = __lock_vec(dbenv,
+ dbp->lid, 0, &lreq, 1, NULL)) != 0 && ret == 0)
+ ret = t_ret;
- /* Free up the pages in the subdatabase. */
- switch (dbp->type) {
- case DB_BTREE:
- case DB_RECNO:
- if ((ret = __bam_reclaim(dbp, dbp->open_txn)) != 0)
- goto err;
- break;
- case DB_HASH:
- if ((ret = __ham_reclaim(dbp, dbp->open_txn)) != 0)
- goto err;
- break;
- default:
- ret = __db_unknown_type(dbp->dbenv,
- "__db_subdb_remove", dbp->type);
- goto err;
+ if ((t_ret = __lock_id_free(dbenv, dbp->lid)) != 0 && ret == 0)
+ ret = t_ret;
+ dbp->lid = DB_LOCK_INVALIDID;
+ LOCK_INIT(dbp->handle_lock);
}
- /*
- * Remove the entry from the main database and free the subdatabase
- * metadata page.
- */
- if ((ret = __db_master_open(dbp, name, 0, 0, &mdbp)) != 0)
- goto err;
-
- if ((ret = __db_master_update(mdbp,
- subdb, dbp->type, &meta_pgno, MU_REMOVE, NULL, 0)) != 0)
- goto err;
-
-err: /*
- * End the transaction, committing the transaction if we were
- * successful, aborting otherwise.
- */
- if (dbp->open_txn != NULL && (t_ret = __db_metaend(dbp,
- &remove_lock, ret == 0, NULL, NULL)) != 0 && ret == 0)
- ret = t_ret;
-
-err_close:
- /*
- * Close the user's DB handle -- do this LAST to avoid smashing the
- * the transaction information.
- */
- if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
- ret = t_ret;
-
- if (mdbp != NULL && (t_ret = mdbp->close(mdbp, 0)) != 0 && ret == 0)
+ /* Discard the locker ID allocated as the fileid. */
+ if (F_ISSET(dbp, DB_AM_INMEM) && LOCKING_ON(dbenv) &&
+ (t_ret = __lock_id_free(dbenv, *(u_int32_t *)dbp->fileid)) != 0 &&
+ ret == 0)
ret = t_ret;
- return (ret);
-}
+ dbp->type = DB_UNKNOWN;
-/*
- * __db_rename
- * Rename method for DB.
- *
- * PUBLIC: int __db_rename __P((DB *,
- * PUBLIC: const char *, const char *, const char *, u_int32_t));
- */
-int
-__db_rename(dbp, filename, subdb, newname, flags)
- DB *dbp;
- const char *filename, *subdb, *newname;
- u_int32_t flags;
-{
- DBT namedbt, newnamedbt;
- DB_ENV *dbenv;
- DB_LOCK remove_lock;
- DB_LSN newlsn;
- char *real_name, *real_newname;
- int ret, t_ret;
-
- dbenv = dbp->dbenv;
- ret = 0;
- real_name = real_newname = NULL;
-
- PANIC_CHECK(dbenv);
- /*
- * Cannot use DB_ILLEGAL_AFTER_OPEN here because that returns
- * and we cannot return, but must deal with the error and destroy
- * the handle anyway.
- */
- if (F_ISSET(dbp, DB_OPEN_CALLED)) {
- ret = __db_mi_open(dbp->dbenv, "rename", 1);
- goto err_close;
+ /* Discard the thread mutex. */
+ if (dbp->mutexp != NULL) {
+ dbmp = dbenv->mp_handle;
+ __db_mutex_free(dbenv, dbmp->reginfo, dbp->mutexp);
+ dbp->mutexp = NULL;
}
- /* Validate arguments -- has same rules as remove. */
- if ((ret = __db_removechk(dbp, flags)) != 0)
- goto err_close;
-
- /*
- * Subdatabases.
- */
- if (subdb != NULL) {
- if (filename == NULL) {
- __db_err(dbenv,
- "multiple databases cannot be created in temporary files");
- goto err_close;
- }
- return (__db_subdb_rename(dbp, filename, subdb, newname));
+ /* Discard any memory allocated for the file and database names. */
+ if (dbp->fname != NULL) {
+ __os_free(dbp->dbenv, dbp->fname);
+ dbp->fname = NULL;
}
-
- if ((ret = dbp->open(dbp,
- filename, NULL, DB_UNKNOWN, DB_RDWRMASTER, 0)) != 0)
- goto err_close;
-
- if (LOGGING_ON(dbenv) && (ret = __log_file_lock(dbp)) != 0)
- goto err_close;
-
- if ((ret = dbp->sync(dbp, 0)) != 0)
- goto err_close;
-
- /* Start the transaction and log the rename. */
- if (TXN_ON(dbenv) && (ret = __db_metabegin(dbp, &remove_lock)) != 0)
- goto err_close;
-
- if (LOGGING_ON(dbenv)) {
- memset(&namedbt, 0, sizeof(namedbt));
- namedbt.data = (char *)filename;
- namedbt.size = strlen(filename) + 1;
-
- memset(&newnamedbt, 0, sizeof(namedbt));
- newnamedbt.data = (char *)newname;
- newnamedbt.size = strlen(newname) + 1;
-
- if ((ret = __crdel_rename_log(dbenv, dbp->open_txn,
- &newlsn, 0, dbp->log_fileid, &namedbt, &newnamedbt)) != 0) {
- __db_err(dbenv, "%s: %s", filename, db_strerror(ret));
- goto err;
- }
-
- if ((ret = __log_filelist_update(dbenv, dbp,
- dbp->log_fileid, newname, NULL)) != 0)
- goto err;
+ if (dbp->dname != NULL) {
+ __os_free(dbp->dbenv, dbp->dname);
+ dbp->dname = NULL;
}
- /* Find the real name of the file. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, filename, 0, NULL, &real_name)) != 0)
- goto err;
+ /* Discard any memory used to store returned data. */
+ if (dbp->my_rskey.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rskey.data);
+ if (dbp->my_rkey.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rkey.data);
+ if (dbp->my_rdata.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rdata.data);
- /* Find the real newname of the file. */
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, newname, 0, NULL, &real_newname)) != 0)
- goto err;
+ /* For safety's sake; we may refresh twice. */
+ memset(&dbp->my_rskey, 0, sizeof(DBT));
+ memset(&dbp->my_rkey, 0, sizeof(DBT));
+ memset(&dbp->my_rdata, 0, sizeof(DBT));
/*
- * It is an error to rename a file over one that already exists,
- * as that wouldn't be transaction-safe.
+ * Remove this DB handle from the DB_ENV's dblist, if it's been added.
+ *
+ * Close our reference to the underlying cache while locked, we don't
+ * want to race with a thread searching for our underlying cache link
+ * while opening a DB handle.
*/
- if (__os_exists(real_newname, NULL) == 0) {
- ret = EEXIST;
- __db_err(dbenv, "rename: file %s exists", real_newname);
- goto err;
+ MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ if (dbp->dblistlinks.le_prev != NULL) {
+ LIST_REMOVE(dbp, dblistlinks);
+ dbp->dblistlinks.le_prev = NULL;
}
- DB_TEST_RECOVERY(dbp, DB_TEST_PRERENAME, ret, filename);
- if (dbp->db_am_rename != NULL &&
- (ret = dbp->db_am_rename(dbp, filename, subdb, newname)) != 0)
- goto err;
- /*
- * We have to flush the cache for a couple of reasons. First, the
- * underlying MPOOLFILE maintains a "name" that unrelated processes
- * can use to open the file in order to flush pages, and that name
- * is about to be wrong. Second, on Windows the unique file ID is
- * generated from the file's name, not other file information as is
- * the case on UNIX, and so a subsequent open of the old file name
- * could conceivably result in a matching "unique" file ID.
- */
- if ((ret = __memp_fremove(dbp->mpf)) != 0)
- goto err;
-
- /*
- * On Windows, the underlying file must be closed to perform a rename.
- * Nothing later in __db_rename requires that it be open, and the call
- * to dbp->close closes it anyway, so we just close it early.
- */
- if ((ret = memp_fclose(dbp->mpf)) != 0)
- goto err;
- dbp->mpf = NULL;
-
- ret = __os_rename(dbenv, real_name, real_newname);
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTRENAME, ret, newname);
-
-DB_TEST_RECOVERY_LABEL
-err: if (dbp->open_txn != NULL && (t_ret = __db_metaend(dbp,
- &remove_lock, ret == 0, NULL, NULL)) != 0 && ret == 0)
- ret = t_ret;
-
-err_close:
- /* We no longer have an mpool, so syncing would be disastrous. */
- dbp->close(dbp, DB_NOSYNC);
- if (real_name != NULL)
- __os_freestr(real_name);
- if (real_newname != NULL)
- __os_freestr(real_newname);
-
- return (ret);
-}
-
-/*
- * __db_subdb_rename --
- * Rename a subdatabase.
- */
-static int
-__db_subdb_rename(dbp, name, subdb, newname)
- DB *dbp;
- const char *name, *subdb, *newname;
-{
- DB *mdbp;
- DBC *dbc;
- DB_ENV *dbenv;
- DB_LOCK remove_lock;
- int ret, t_ret;
-
- mdbp = NULL;
- dbc = NULL;
- dbenv = dbp->dbenv;
-
- /* Start the transaction. */
- if (TXN_ON(dbenv) && (ret = __db_metabegin(dbp, &remove_lock)) != 0)
- goto err_close;
-
- /*
- * Open the subdatabase. We can use the user's DB handle for this
- * purpose, I think.
- */
- if ((ret = __db_open(dbp, name, subdb, DB_UNKNOWN, 0, 0)) != 0)
- goto err;
-
- /*
- * Rename the entry in the main database.
- */
- if ((ret = __db_master_open(dbp, name, 0, 0, &mdbp)) != 0)
- goto err;
-
- if ((ret = __db_master_update(mdbp,
- subdb, dbp->type, NULL, MU_RENAME, newname, 0)) != 0)
- goto err;
-
-err: /*
- * End the transaction, committing the transaction if we were
- * successful, aborting otherwise.
- */
- if (dbp->open_txn != NULL && (t_ret = __db_metaend(dbp,
- &remove_lock, ret == 0, NULL, NULL)) != 0 && ret == 0)
- ret = t_ret;
-
-err_close:
- /*
- * Close the user's DB handle -- do this LAST to avoid smashing the
- * the transaction information.
- */
- if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
- ret = t_ret;
-
- if (mdbp != NULL && (t_ret = mdbp->close(mdbp, 0)) != 0 && ret == 0)
- ret = t_ret;
-
- return (ret);
-}
-
-/*
- * __db_metabegin --
- *
- * Begin a meta-data operation. This involves doing any required locking,
- * potentially beginning a transaction and then telling the caller if you
- * did or did not begin the transaction.
- *
- * The writing flag indicates if the caller is actually allowing creates
- * or doing deletes (i.e., if the caller is opening and not creating, then
- * we don't need to do any of this).
- * PUBLIC: int __db_metabegin __P((DB *, DB_LOCK *));
- */
-int
-__db_metabegin(dbp, lockp)
- DB *dbp;
- DB_LOCK *lockp;
-{
- DB_ENV *dbenv;
- DBT dbplock;
- u_int32_t locker, lockval;
- int ret;
+ /* Close the memory pool file handle. */
+ if (dbp->mpf != NULL) {
+ if ((t_ret = __memp_fclose(dbp->mpf,
+ F_ISSET(dbp, DB_AM_DISCARD) ? DB_MPOOL_DISCARD : 0)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+ dbp->mpf = NULL;
+ }
- dbenv = dbp->dbenv;
+ MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- lockp->off = LOCK_INVALID;
+ /* Clear out fields that normally get set during open. */
+ memset(dbp->fileid, 0, sizeof(dbp->fileid));
+ dbp->adj_fileid = 0;
+ dbp->meta_pgno = 0;
+ dbp->cur_lid = DB_LOCK_INVALIDID;
+ dbp->associate_lid = DB_LOCK_INVALIDID;
+ dbp->cl_id = 0;
+ dbp->open_flags = 0;
/*
- * There is no single place where we can know that we are or are not
- * going to be creating any files and/or subdatabases, so we will
- * always begin a tranasaction when we start creating one. If we later
- * discover that this was unnecessary, we will abort the transaction.
- * Recovery is written so that if we log a file create, but then
- * discover that we didn't have to do it, we recover correctly. The
- * file recovery design document has details.
- *
- * We need to single thread all create and delete operations, so if we
- * are running with locking, we must obtain a lock. We use lock_id to
- * generate a unique locker id and use a handcrafted DBT as the object
- * on which we are locking.
+ * If we are being refreshed with a txn specified, then we need
+ * to make sure that we clear out the lock handle field, because
+ * releasing all the locks for this transaction will release this
+ * lock and we don't want close to stumble upon this handle and
+ * try to close it.
*/
- if (LOCKING_ON(dbenv)) {
- if ((ret = lock_id(dbenv, &locker)) != 0)
- return (ret);
- lockval = 0;
- dbplock.data = &lockval;
- dbplock.size = sizeof(lockval);
- if ((ret = lock_get(dbenv,
- locker, 0, &dbplock, DB_LOCK_WRITE, lockp)) != 0)
- return (ret);
- }
-
- return (txn_begin(dbenv, NULL, &dbp->open_txn, 0));
-}
-
-/*
- * __db_metaend --
- * End a meta-data operation.
- * PUBLIC: int __db_metaend __P((DB *,
- * PUBLIC: DB_LOCK *, int, int (*)(DB *, void *), void *));
- */
-int
-__db_metaend(dbp, lockp, commit, callback, cookie)
- DB *dbp;
- DB_LOCK *lockp;
- int commit, (*callback) __P((DB *, void *));
- void *cookie;
-{
- DB_ENV *dbenv;
- int ret, t_ret;
-
- ret = 0;
- dbenv = dbp->dbenv;
-
- /* End the transaction. */
- if (commit) {
- if ((ret = txn_commit(dbp->open_txn, DB_TXN_SYNC)) == 0) {
- /*
- * Unlink any underlying file, we've committed the
- * transaction.
- */
- if (callback != NULL)
- ret = callback(dbp, cookie);
- }
- } else if ((t_ret = txn_abort(dbp->open_txn)) && ret == 0)
- ret = t_ret;
+ if (txn != NULL)
+ LOCK_INIT(dbp->handle_lock);
- /* Release our lock. */
- if (lockp->off != LOCK_INVALID &&
- (t_ret = lock_put(dbenv, lockp)) != 0 && ret == 0)
- ret = t_ret;
+ /* Reset flags to whatever the user configured. */
+ dbp->flags = dbp->orig_flags;
return (ret);
}
/*
* __db_log_page
- * Log a meta-data or root page during a create operation.
+ * Log a meta-data or root page during a subdatabase create operation.
*
- * PUBLIC: int __db_log_page __P((DB *,
- * PUBLIC: const char *, DB_LSN *, db_pgno_t, PAGE *));
+ * PUBLIC: int __db_log_page __P((DB *, DB_TXN *, DB_LSN *, db_pgno_t, PAGE *));
*/
int
-__db_log_page(dbp, name, lsn, pgno, page)
+__db_log_page(dbp, txn, lsn, pgno, page)
DB *dbp;
- const char *name;
+ DB_TXN *txn;
DB_LSN *lsn;
db_pgno_t pgno;
PAGE *page;
{
- DBT name_dbt, page_dbt;
+ DBT page_dbt;
DB_LSN new_lsn;
int ret;
- if (dbp->open_txn == NULL)
+ if (!LOGGING_ON(dbp->dbenv) || txn == NULL)
return (0);
memset(&page_dbt, 0, sizeof(page_dbt));
page_dbt.size = dbp->pgsize;
page_dbt.data = page;
- if (pgno == PGNO_BASE_MD) {
- /*
- * !!!
- * Make sure that we properly handle a null name. The old
- * Tcl sent us pathnames of the form ""; it may be the case
- * that the new Tcl doesn't do that, so we can get rid of
- * the second check here.
- */
- memset(&name_dbt, 0, sizeof(name_dbt));
- name_dbt.data = (char *)name;
- if (name == NULL || *name == '\0')
- name_dbt.size = 0;
- else
- name_dbt.size = strlen(name) + 1;
-
- ret = __crdel_metapage_log(dbp->dbenv,
- dbp->open_txn, &new_lsn, DB_FLUSH,
- dbp->log_fileid, &name_dbt, pgno, &page_dbt);
- } else
- ret = __crdel_metasub_log(dbp->dbenv, dbp->open_txn,
- &new_lsn, 0, dbp->log_fileid, pgno, &page_dbt, lsn);
+
+ ret = __crdel_metasub_log(dbp, txn, &new_lsn, 0, pgno, &page_dbt, lsn);
if (ret == 0)
page->lsn = new_lsn;
@@ -2041,50 +988,91 @@ __db_log_page(dbp, name, lsn, pgno, page)
* Create the backup file name for a given file.
*
* PUBLIC: int __db_backup_name __P((DB_ENV *,
- * PUBLIC: const char *, char **, DB_LSN *));
+ * PUBLIC: const char *, DB_TXN *, char **));
*/
#undef BACKUP_PREFIX
#define BACKUP_PREFIX "__db."
#undef MAX_LSN_TO_TEXT
-#define MAX_LSN_TO_TEXT 21
+#define MAX_LSN_TO_TEXT 17
+
int
-__db_backup_name(dbenv, name, backup, lsn)
+__db_backup_name(dbenv, name, txn, backup)
DB_ENV *dbenv;
const char *name;
+ DB_TXN *txn;
char **backup;
- DB_LSN *lsn;
{
+ DB_LSN lsn;
size_t len;
- int plen, ret;
+ int plen, ret, use_lsn;
char *p, *retp;
- len = strlen(name) + strlen(BACKUP_PREFIX) + MAX_LSN_TO_TEXT + 1;
-
- if ((ret = __os_malloc(dbenv, len, NULL, &retp)) != 0)
- return (ret);
-
/*
- * Create the name. Backup file names are of the form:
+ * Create the name. Backup file names are in one of two forms:
*
- * __db.name.0x[lsn-file].0x[lsn-offset]
+ * In a transactional env: __db.LSN(8).LSN(8)
+ * and
+ * in a non-transactional env: __db.FILENAME
*
- * which guarantees uniqueness.
+ * If the transaction doesn't have a current LSN, we write
+ * a dummy log record to force it, so that we ensure that
+ * all tmp names are unique.
*
- * However, name may contain an env-relative path in it.
- * In that case, put the __db. after the last portion of
- * the pathname.
+ * In addition, the name passed may contain an env-relative path.
+ * In that case, put the __db. in the right place (in the last
+ * component of the pathname).
*/
- if ((p = __db_rpath(name)) == NULL)
- snprintf(retp, len,
- "%s%s.0x%x0x%x", BACKUP_PREFIX, name,
- lsn->file, lsn->offset);
- else {
- plen = p - name + 1;
+ if (!F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txn != NULL) {
+ if (IS_ZERO_LSN(txn->last_lsn)) {
+ /*
+ * Write dummy log record. The two choices for
+ * dummy log records are __db_noop_log and
+ * __db_debug_log; unfortunately __db_noop_log requires
+ * a valid dbp, and we aren't guaranteed to be able
+ * to pass one in here.
+ */
+ if ((ret = __db_debug_log(dbenv, txn, &lsn, 0,
+ NULL, 0, NULL, NULL, 0)) != 0)
+ return (ret);
+ } else
+ lsn = txn->last_lsn;
+ use_lsn = 1;
+ } else
+ use_lsn = 0;
+
+ /*
+ * Part of the name may be a full path, so we need to make sure that
+ * we allocate enough space for it, even in the case where we don't
+ * use the entire filename for the backup name.
+ */
+ len = strlen(name) + strlen(BACKUP_PREFIX) + MAX_LSN_TO_TEXT;
+
+ if ((ret = __os_malloc(dbenv, len, &retp)) != 0)
+ return (ret);
+
+ /*
+ * There are four cases here:
+ * 1. simple path w/out transaction
+ * 2. simple path + transaction
+ * 3. multi-component path w/out transaction
+ * 4. multi-component path + transaction
+ */
+ if ((p = __db_rpath(name)) == NULL) {
+ if (use_lsn) /* case 2 */
+ snprintf(retp, len,
+ "%s%x.%x", BACKUP_PREFIX, lsn.file, lsn.offset);
+ else /* case 1 */
+ snprintf(retp, len, "%s%s", BACKUP_PREFIX, name);
+ } else {
+ plen = (int)(p - name) + 1;
p++;
- snprintf(retp, len,
- "%.*s%s%s.0x%x0x%x", plen, name, BACKUP_PREFIX, p,
- lsn->file, lsn->offset);
+ if (use_lsn) /* case 4 */
+ snprintf(retp, len,
+ "%.*s%x.%x", plen, name, lsn.file, lsn.offset);
+ else /* case 3 */
+ snprintf(retp, len,
+ "%.*s%s%s", plen, name, BACKUP_PREFIX, p);
}
*backup = retp;
@@ -2092,19 +1080,6 @@ __db_backup_name(dbenv, name, backup, lsn)
}
/*
- * __db_remove_callback --
- * Callback function -- on file remove commit, it unlinks the backing
- * file.
- */
-static int
-__db_remove_callback(dbp, cookie)
- DB *dbp;
- void *cookie;
-{
- return (__os_unlink(dbp->dbenv, cookie));
-}
-
-/*
* __dblist_get --
* Get the first element of dbenv->dblist with
* dbp->adj_fileid matching adjid.
@@ -2126,22 +1101,75 @@ __dblist_get(dbenv, adjid)
return (dbp);
}
-#if CONFIG_TEST
+/*
+ * __db_disassociate --
+ * Destroy the association between a given secondary and its primary.
+ */
+static int
+__db_disassociate(sdbp)
+ DB *sdbp;
+{
+ DBC *dbc;
+ int ret, t_ret;
+
+ ret = 0;
+
+ sdbp->s_callback = NULL;
+ sdbp->s_primary = NULL;
+ sdbp->get = sdbp->stored_get;
+ sdbp->close = sdbp->stored_close;
+
+ /*
+ * Complain, but proceed, if we have any active cursors. (We're in
+ * the middle of a close, so there's really no turning back.)
+ */
+ if (sdbp->s_refcnt != 1 ||
+ TAILQ_FIRST(&sdbp->active_queue) != NULL ||
+ TAILQ_FIRST(&sdbp->join_queue) != NULL) {
+ __db_err(sdbp->dbenv,
+ "Closing a primary DB while a secondary DB has active cursors is unsafe");
+ ret = EINVAL;
+ }
+ sdbp->s_refcnt = 0;
+
+ while ((dbc = TAILQ_FIRST(&sdbp->free_queue)) != NULL)
+ if ((t_ret = __db_c_destroy(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ F_CLR(sdbp, DB_AM_SECONDARY);
+ return (ret);
+}
+
+#if CONFIG_TEST
/*
* __db_testcopy
* Create a copy of all backup files and our "main" DB.
*
- * PUBLIC: int __db_testcopy __P((DB *, const char *));
+ * PUBLIC: #if CONFIG_TEST
+ * PUBLIC: int __db_testcopy __P((DB_ENV *, DB *, const char *));
+ * PUBLIC: #endif
*/
int
-__db_testcopy(dbp, name)
+__db_testcopy(dbenv, dbp, name)
+ DB_ENV *dbenv;
DB *dbp;
const char *name;
{
- if (dbp->type == DB_QUEUE)
+ DB_MPOOL *dbmp;
+ DB_MPOOLFILE *mpf;
+
+ DB_ASSERT(dbp != NULL || name != NULL);
+
+ if (name == NULL) {
+ dbmp = dbenv->mp_handle;
+ mpf = dbp->mpf;
+ name = R_ADDR(dbmp->reginfo, mpf->mfp->path_off);
+ }
+
+ if (dbp != NULL && dbp->type == DB_QUEUE)
return (__qam_testdocopy(dbp, name));
else
- return (__db_testdocopy(dbp, name));
+ return (__db_testdocopy(dbenv, name));
}
static int
@@ -2154,7 +1182,7 @@ __qam_testdocopy(dbp, name)
int ret;
filelist = NULL;
- if ((ret = __db_testdocopy(dbp, name)) != 0)
+ if ((ret = __db_testdocopy(dbp->dbenv, name)) != 0)
return (ret);
if (dbp->mpf != NULL &&
(ret = __qam_gen_filelist(dbp, &filelist)) != 0)
@@ -2164,12 +1192,13 @@ __qam_testdocopy(dbp, name)
return (0);
dir = ((QUEUE *)dbp->q_internal)->dir;
for (fp = filelist; fp->mpf != NULL; fp++) {
- snprintf(buf, sizeof(buf), QUEUE_EXTENT, dir, name, fp->id);
- if ((ret = __db_testdocopy(dbp, buf)) != 0)
+ snprintf(buf, sizeof(buf),
+ QUEUE_EXTENT, dir, PATH_SEPARATOR[0], name, fp->id);
+ if ((ret = __db_testdocopy(dbp->dbenv, buf)) != 0)
return (ret);
}
- __os_free(filelist, 0);
+ __os_free(dbp->dbenv, filelist);
return (0);
}
@@ -2179,8 +1208,8 @@ __qam_testdocopy(dbp, name)
*
*/
static int
-__db_testdocopy(dbp, name)
- DB *dbp;
+__db_testdocopy(dbenv, name)
+ DB_ENV *dbenv;
const char *name;
{
size_t len;
@@ -2188,8 +1217,8 @@ __db_testdocopy(dbp, name)
char **namesp, *backup, *copy, *dir, *p, *real_name;
real_name = NULL;
/* Get the real backing file name. */
- if ((ret = __db_appname(dbp->dbenv,
- DB_APP_DATA, NULL, name, 0, NULL, &real_name)) != 0)
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
return (ret);
copy = backup = NULL;
@@ -2200,21 +1229,21 @@ __db_testdocopy(dbp, name)
*/
len = strlen(real_name) + strlen(BACKUP_PREFIX) + MAX_LSN_TO_TEXT + 9;
- if ((ret = __os_malloc(dbp->dbenv, len, NULL, &copy)) != 0)
+ if ((ret = __os_malloc(dbenv, len, &copy)) != 0)
goto out;
- if ((ret = __os_malloc(dbp->dbenv, len, NULL, &backup)) != 0)
+ if ((ret = __os_malloc(dbenv, len, &backup)) != 0)
goto out;
/*
* First copy the file itself.
*/
snprintf(copy, len, "%s.afterop", real_name);
- __db_makecopy(real_name, copy);
+ __db_makecopy(dbenv, real_name, copy);
- if ((ret = __os_strdup(dbp->dbenv, real_name, &dir)) != 0)
+ if ((ret = __os_strdup(dbenv, real_name, &dir)) != 0)
goto out;
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
real_name = NULL;
/*
* Create the name. Backup file names are of the form:
@@ -2234,7 +1263,7 @@ __db_testdocopy(dbp, name)
p = __db_rpath(dir);
if (p != NULL)
*p = '\0';
- ret = __os_dirlist(dbp->dbenv, dir, &namesp, &dircnt);
+ ret = __os_dirlist(dbenv, dir, &namesp, &dircnt);
#if DIAGNOSTIC
/*
* XXX
@@ -2245,7 +1274,7 @@ __db_testdocopy(dbp, name)
*/
*p = '/';
#endif
- __os_freestr(dir);
+ __os_free(dbenv, dir);
if (ret != 0)
goto out;
for (i = 0; i < dircnt; i++) {
@@ -2258,8 +1287,8 @@ __db_testdocopy(dbp, name)
* know its LSN's.
*/
if (strncmp(namesp[i], backup, strlen(backup)) == 0) {
- if ((ret = __db_appname(dbp->dbenv, DB_APP_DATA,
- NULL, namesp[i], 0, NULL, &real_name)) != 0)
+ if ((ret = __db_appname(dbenv, DB_APP_DATA,
+ namesp[i], 0, NULL, &real_name)) != 0)
goto out;
/*
@@ -2268,58 +1297,59 @@ __db_testdocopy(dbp, name)
* If so, just move on.
*/
if (strstr(real_name, ".afterop") != NULL) {
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
real_name = NULL;
continue;
}
snprintf(copy, len, "%s.afterop", real_name);
- __db_makecopy(real_name, copy);
- __os_freestr(real_name);
+ __db_makecopy(dbenv, real_name, copy);
+ __os_free(dbenv, real_name);
real_name = NULL;
}
}
out:
if (backup != NULL)
- __os_freestr(backup);
+ __os_free(dbenv, backup);
if (copy != NULL)
- __os_freestr(copy);
+ __os_free(dbenv, copy);
if (namesp != NULL)
- __os_dirfree(namesp, dircnt);
+ __os_dirfree(dbenv, namesp, dircnt);
if (real_name != NULL)
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
return (ret);
}
static void
-__db_makecopy(src, dest)
+__db_makecopy(dbenv, src, dest)
+ DB_ENV *dbenv;
const char *src, *dest;
{
- DB_FH rfh, wfh;
+ DB_FH *rfhp, *wfhp;
size_t rcnt, wcnt;
char *buf;
- memset(&rfh, 0, sizeof(rfh));
- memset(&wfh, 0, sizeof(wfh));
+ rfhp = wfhp = NULL;
- if (__os_malloc(NULL, 1024, NULL, &buf) != 0)
+ if (__os_malloc(dbenv, 1024, &buf) != 0)
return;
- if (__os_open(NULL,
- src, DB_OSO_RDONLY, __db_omode("rw----"), &rfh) != 0)
+ if (__os_open(dbenv,
+ src, DB_OSO_RDONLY, __db_omode("rw----"), &rfhp) != 0)
goto err;
- if (__os_open(NULL, dest,
- DB_OSO_CREATE | DB_OSO_TRUNC, __db_omode("rw----"), &wfh) != 0)
+ if (__os_open(dbenv, dest,
+ DB_OSO_CREATE | DB_OSO_TRUNC, __db_omode("rw----"), &wfhp) != 0)
goto err;
for (;;)
- if (__os_read(NULL, &rfh, buf, 1024, &rcnt) < 0 || rcnt == 0 ||
- __os_write(NULL, &wfh, buf, rcnt, &wcnt) < 0 || wcnt != rcnt)
+ if (__os_read(dbenv, rfhp, buf, 1024, &rcnt) < 0 || rcnt == 0 ||
+ __os_write(dbenv, wfhp, buf, rcnt, &wcnt) < 0)
break;
-err: __os_free(buf, 1024);
- if (F_ISSET(&rfh, DB_FH_VALID))
- __os_closehandle(&rfh);
- if (F_ISSET(&wfh, DB_FH_VALID))
- __os_closehandle(&wfh);
+err: if (buf != NULL)
+ __os_free(dbenv, buf);
+ if (rfhp != NULL)
+ (void)__os_closehandle(dbenv, rfhp);
+ if (wfhp != NULL)
+ (void)__os_closehandle(dbenv, wfhp);
}
#endif
diff --git a/db/db/db.src b/db/db/db.src
index b695e1360..d83441875 100644
--- a/db/db/db.src
+++ b/db/db/db.src
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: db.src,v 11.8 2000/02/17 20:24:07 bostic Exp $
+ * $Id: db.src,v 11.24 2003/11/14 05:32:30 ubell Exp $
*/
-PREFIX db
+PREFIX __db
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
@@ -15,15 +16,16 @@ INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
@@ -44,33 +46,16 @@ INCLUDE
*/
BEGIN addrem 41
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
-ARG nbytes size_t lu
-DBT hdr DBT s
+ARG nbytes u_int32_t lu
+PGDBT hdr DBT s
DBT dbt DBT s
POINTER pagelsn DB_LSN * lu
END
/*
- * split -- Handles the split of a duplicate page.
- *
- * opcode: defines whether we are splitting from or splitting onto
- * fileid: file identifier of the file being modified.
- * pgno: page number being split.
- * pageimage: entire page contents.
- * pagelsn: former lsn of the page.
- */
-DEPRECATED split 42
-ARG opcode u_int32_t lu
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-DBT pageimage DBT s
-POINTER pagelsn DB_LSN * lu
-END
-
-/*
* big -- Handles addition and deletion of big key/data items.
*
* opcode: identifies get/put.
@@ -87,7 +72,7 @@ END
*/
BEGIN big 43
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG prev_pgno db_pgno_t lu
ARG next_pgno db_pgno_t lu
@@ -106,7 +91,7 @@ END
* lsn: the page's original lsn.
*/
BEGIN ovref 44
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG adjust int32_t ld
POINTER lsn DB_LSN * lu
@@ -125,7 +110,7 @@ END
*/
BEGIN relink 45
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER lsn DB_LSN * lu
ARG prev db_pgno_t lu
@@ -135,23 +120,6 @@ POINTER lsn_next DB_LSN * lu
END
/*
- * Addpage -- Handles adding a new duplicate page onto the end of
- * an existing duplicate page.
- * fileid: identifies the file being changed.
- * pgno: page number to which a new page is being added.
- * lsn: lsn of pgno
- * nextpgno: new page number being added.
- * nextlsn: lsn of nextpgno;
- */
-DEPRECATED addpage 46
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-POINTER lsn DB_LSN * lu
-ARG nextpgno db_pgno_t lu
-POINTER nextlsn DB_LSN * lu
-END
-
-/*
* Debug -- log an operation upon entering an access method.
* op: Operation (cursor, c_close, c_get, c_put, c_del,
* get, put, delete).
@@ -172,7 +140,103 @@ END
* noop -- do nothing, but get an LSN.
*/
BEGIN noop 48
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER prevlsn DB_LSN * lu
END
+
+/*
+ * pg_alloc: used to record allocating a new page.
+ *
+ * meta_lsn: the meta-data page's original lsn.
+ * meta_pgno the meta-data page number.
+ * page_lsn: the allocated page's original lsn.
+ * pgno: the page allocated.
+ * ptype: the type of the page allocated.
+ * next: the next page on the free list.
+ */
+BEGIN pg_alloc 49
+DB fileid int32_t ld
+POINTER meta_lsn DB_LSN * lu
+ARG meta_pgno db_pgno_t lu
+POINTER page_lsn DB_LSN * lu
+ARG pgno db_pgno_t lu
+ARG ptype u_int32_t lu
+ARG next db_pgno_t lu
+END
+
+/*
+ * pg_free: used to record freeing a page.
+ *
+ * pgno: the page being freed.
+ * meta_lsn: the meta-data page's original lsn.
+ * meta_pgno: the meta-data page number.
+ * header: the header from the free'd page.
+ * next: the previous next pointer on the metadata page.
+ */
+BEGIN pg_free 50
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER meta_lsn DB_LSN * lu
+ARG meta_pgno db_pgno_t lu
+PGDBT header DBT s
+ARG next db_pgno_t lu
+END
+
+/*
+ * cksum --
+ * This log record is written when we're unable to checksum a page,
+ * before returning DB_RUNRECOVERY. This log record causes normal
+ * recovery to itself return DB_RUNRECOVERY, as only catastrophic
+ * recovery can fix things.
+ */
+BEGIN cksum 51
+END
+
+/*
+ * pg_freedata: used to record freeing a page with data on it.
+ *
+ * pgno: the page being freed.
+ * meta_lsn: the meta-data page's original lsn.
+ * meta_pgno: the meta-data page number.
+ * header: the header and index entries from the free'd page.
+ * data: the data from the free'd page.
+ * next: the previous next pointer on the metadata page.
+ */
+BEGIN pg_freedata 52
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER meta_lsn DB_LSN * lu
+ARG meta_pgno db_pgno_t lu
+PGDBT header DBT s
+ARG next db_pgno_t lu
+PGDBT data DBT s
+END
+
+/*
+ * pg_prepare: used to record an aborted page in a prepared transaction.
+ *
+ * pgno: the page being freed.
+ */
+BEGIN pg_prepare 53
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+END
+
+/*
+ * pg_new: used to record a new page put on the free list.
+ *
+ * pgno: the page being freed.
+ * meta_lsn: the meta-data page's original lsn.
+ * meta_pgno: the meta-data page number.
+ * header: the header from the free'd page.
+ * next: the previous next pointer on the metadata page.
+ */
+BEGIN pg_new 54
+DB fileid int32_t ld
+ARG pgno db_pgno_t lu
+POINTER meta_lsn DB_LSN * lu
+ARG meta_pgno db_pgno_t lu
+PGDBT header DBT s
+ARG next db_pgno_t lu
+END
diff --git a/db/db/db_am.c b/db/db/db_am.c
index 2d2245669..5fbc7837d 100644
--- a/db/db/db_am.c
+++ b/db/db/db_am.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_am.c,v 11.42 2001/01/11 18:19:50 bostic Exp $";
+static const char revid[] = "$Id: db_am.c,v 11.112 2003/09/13 19:23:42 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,88 +18,38 @@ static const char revid[] = "$Id: db_am.c,v 11.42 2001/01/11 18:19:50 bostic Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "lock.h"
-#include "mp.h"
-#include "txn.h"
-#include "db_am.h"
-#include "db_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+
+static int __db_append_primary __P((DBC *, DBT *, DBT *));
+static int __db_secondary_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+static int __db_secondary_close __P((DB *, u_int32_t));
-/*
- * __db_cursor --
- * Allocate and return a cursor.
- *
- * PUBLIC: int __db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
- */
-int
-__db_cursor(dbp, txn, dbcp, flags)
- DB *dbp;
- DB_TXN *txn;
- DBC **dbcp;
- u_int32_t flags;
-{
- DB_ENV *dbenv;
- DBC *dbc;
- db_lockmode_t mode;
- u_int32_t op;
- int ret;
-
- dbenv = dbp->dbenv;
-
- PANIC_CHECK(dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->cursor");
-
- /* Check for invalid flags. */
- if ((ret = __db_cursorchk(dbp, flags, F_ISSET(dbp, DB_AM_RDONLY))) != 0)
- return (ret);
-
- if ((ret =
- __db_icursor(dbp, txn, dbp->type, PGNO_INVALID, 0, dbcp)) != 0)
- return (ret);
- dbc = *dbcp;
-
- /*
- * If this is CDB, do all the locking in the interface, which is
- * right here.
- */
- if (CDB_LOCKING(dbenv)) {
- op = LF_ISSET(DB_OPFLAGS_MASK);
- mode = (op == DB_WRITELOCK) ? DB_LOCK_WRITE :
- ((op == DB_WRITECURSOR) ? DB_LOCK_IWRITE : DB_LOCK_READ);
- if ((ret = lock_get(dbenv, dbc->locker, 0,
- &dbc->lock_dbt, mode, &dbc->mylock)) != 0) {
- (void)__db_c_close(dbc);
- return (ret);
- }
- if (op == DB_WRITECURSOR)
- F_SET(dbc, DBC_WRITECURSOR);
- if (op == DB_WRITELOCK)
- F_SET(dbc, DBC_WRITER);
- }
-
- return (0);
-}
+#ifdef DEBUG
+static int __db_cprint_item __P((DBC *));
+#endif
/*
- * __db_icursor --
- * Internal version of __db_cursor. If dbcp is
- * non-NULL it is assumed to point to an area to
- * initialize as a cursor.
+ * __db_cursor_int --
+ * Internal routine to create a cursor.
*
- * PUBLIC: int __db_icursor
- * PUBLIC: __P((DB *, DB_TXN *, DBTYPE, db_pgno_t, int, DBC **));
+ * PUBLIC: int __db_cursor_int
+ * PUBLIC: __P((DB *, DB_TXN *, DBTYPE, db_pgno_t, int, u_int32_t, DBC **));
*/
int
-__db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
+__db_cursor_int(dbp, txn, dbtype, root, is_opd, lockerid, dbcp)
DB *dbp;
DB_TXN *txn;
DBTYPE dbtype;
db_pgno_t root;
int is_opd;
+ u_int32_t lockerid;
DBC **dbcp;
{
DBC *dbc, *adbc;
@@ -111,6 +61,9 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
allocated = 0;
/*
+ * If dbcp is non-NULL it is assumed to point to an area to initialize
+ * as a cursor.
+ *
* Take one from the free list if it's available. Take only the
* right type. With off page dups we may have different kinds
* of cursors on the queue for a single database.
@@ -120,13 +73,13 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
if (dbtype == dbc->dbtype) {
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
- dbc->flags = 0;
+ F_CLR(dbc, ~DBC_OWN_LID);
break;
}
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
if (dbc == NULL) {
- if ((ret = __os_calloc(dbp->dbenv, 1, sizeof(DBC), &dbc)) != 0)
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DBC), &dbc)) != 0)
return (ret);
allocated = 1;
dbc->flags = 0;
@@ -144,11 +97,33 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
if (!DB_IS_THREADED(dbp) &&
(adbc = TAILQ_FIRST(&dbp->active_queue)) != NULL)
dbc->lid = adbc->lid;
- else
- if ((ret = lock_id(dbenv, &dbc->lid)) != 0)
+ else {
+ if ((ret = __lock_id(dbenv, &dbc->lid)) != 0)
goto err;
+ F_SET(dbc, DBC_OWN_LID);
+ }
+
+ /*
+ * In CDB, secondary indices should share a lock file
+ * ID with the primary; otherwise we're susceptible
+ * to deadlocks. We also use __db_cursor_int rather
+ * than __db_cursor to create secondary update cursors
+ * in c_put and c_del; these won't acquire a new lock.
+ *
+ * !!!
+ * Since this is in the one-time cursor allocation
+ * code, we need to be sure to destroy, not just
+ * close, all cursors in the secondary when we
+ * associate.
+ */
+ if (CDB_LOCKING(dbenv) &&
+ F_ISSET(dbp, DB_AM_SECONDARY))
+ memcpy(dbc->lock.fileid,
+ dbp->s_primary->fileid, DB_FILE_ID_LEN);
+ else
+ memcpy(dbc->lock.fileid,
+ dbp->fileid, DB_FILE_ID_LEN);
- memcpy(dbc->lock.fileid, dbp->fileid, DB_FILE_ID_LEN);
if (CDB_LOCKING(dbenv)) {
if (F_ISSET(dbenv, DB_ENV_CDB_ALLDB)) {
/*
@@ -187,9 +162,9 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
if ((ret = __qam_c_init(dbc)) != 0)
goto err;
break;
+ case DB_UNKNOWN:
default:
- ret = __db_unknown_type(dbp->dbenv,
- "__db_icursor", dbtype);
+ ret = __db_unknown_type(dbenv, "DB->cursor", dbtype);
goto err;
}
@@ -198,18 +173,55 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
/* Refresh the DBC structure. */
dbc->dbtype = dbtype;
+ RESET_RET_MEM(dbc);
- if ((dbc->txn = txn) == NULL)
- dbc->locker = dbc->lid;
- else {
+ if ((dbc->txn = txn) == NULL) {
+ /*
+ * There are certain cases in which we want to create a
+ * new cursor with a particular locker ID that is known
+ * to be the same as (and thus not conflict with) an
+ * open cursor.
+ *
+ * The most obvious case is cursor duplication; when we
+ * call DBC->c_dup or __db_c_idup, we want to use the original
+ * cursor's locker ID.
+ *
+ * Another case is when updating secondary indices. Standard
+ * CDB locking would mean that we might block ourself: we need
+ * to open an update cursor in the secondary while an update
+ * cursor in the primary is open, and when the secondary and
+ * primary are subdatabases or we're using env-wide locking,
+ * this is disastrous.
+ *
+ * In these cases, our caller will pass a nonzero locker ID
+ * into this function. Use this locker ID instead of dbc->lid
+ * as the locker ID for our new cursor.
+ */
+ if (lockerid != DB_LOCK_INVALIDID)
+ dbc->locker = lockerid;
+ else
+ dbc->locker = dbc->lid;
+ } else {
dbc->locker = txn->txnid;
txn->cursors++;
}
+ /*
+ * These fields change when we are used as a secondary index, so
+ * if the DB is a secondary, make sure they're set properly just
+ * in case we opened some cursors before we were associated.
+ *
+ * __db_c_get is used by all access methods, so this should be safe.
+ */
+ if (F_ISSET(dbp, DB_AM_SECONDARY))
+ dbc->c_get = __db_c_secondary_get_pp;
+
if (is_opd)
F_SET(dbc, DBC_OPD);
if (F_ISSET(dbp, DB_AM_RECOVER))
F_SET(dbc, DBC_RECOVER);
+ if (F_ISSET(dbp, DB_AM_COMPENSATE))
+ F_SET(dbc, DBC_COMPENSATE);
/* Refresh the DBC internal structure. */
cp = dbc->internal;
@@ -229,8 +241,9 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
case DB_HASH:
case DB_QUEUE:
break;
+ case DB_UNKNOWN:
default:
- ret = __db_unknown_type(dbp->dbenv, "__db_icursor", dbp->type);
+ ret = __db_unknown_type(dbenv, "DB->cursor", dbp->type);
goto err;
}
@@ -243,14 +256,14 @@ __db_icursor(dbp, txn, dbtype, root, is_opd, dbcp)
return (0);
err: if (allocated)
- __os_free(dbc, sizeof(*dbc));
+ __os_free(dbenv, dbc);
return (ret);
}
#ifdef DEBUG
/*
* __db_cprint --
- * Display the current cursor list.
+ * Display the cursor active and free queues.
*
* PUBLIC: int __db_cprint __P((DB *));
*/
@@ -258,146 +271,84 @@ int
__db_cprint(dbp)
DB *dbp;
{
- static const FN fn[] = {
- { DBC_ACTIVE, "active" },
- { DBC_OPD, "off-page-dup" },
- { DBC_RECOVER, "recover" },
- { DBC_RMW, "read-modify-write" },
- { DBC_WRITECURSOR, "write cursor" },
- { DBC_WRITEDUP, "internally dup'ed write cursor" },
- { DBC_WRITER, "short-term write cursor" },
- { 0, NULL }
- };
DBC *dbc;
- DBC_INTERNAL *cp;
- char *s;
+ int ret, t_ret;
+ ret = 0;
MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ fprintf(stderr, "Active queue:\n");
for (dbc = TAILQ_FIRST(&dbp->active_queue);
- dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
- switch (dbc->dbtype) {
- case DB_BTREE:
- s = "btree";
- break;
- case DB_HASH:
- s = "hash";
- break;
- case DB_RECNO:
- s = "recno";
- break;
- case DB_QUEUE:
- s = "queue";
- break;
- default:
- DB_ASSERT(0);
- return (1);
- }
- cp = dbc->internal;
- fprintf(stderr, "%s/%#0lx: opd: %#0lx\n",
- s, P_TO_ULONG(dbc), P_TO_ULONG(cp->opd));
- fprintf(stderr, "\ttxn: %#0lx lid: %lu locker: %lu\n",
- P_TO_ULONG(dbc->txn),
- (u_long)dbc->lid, (u_long)dbc->locker);
- fprintf(stderr, "\troot: %lu page/index: %lu/%lu",
- (u_long)cp->root, (u_long)cp->pgno, (u_long)cp->indx);
- __db_prflags(dbc->flags, fn, stderr);
- fprintf(stderr, "\n");
-
- if (dbp->type == DB_BTREE)
- __bam_cprint(dbc);
- }
+ dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ if ((t_ret = __db_cprint_item(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ fprintf(stderr, "Join queue:\n");
+ for (dbc = TAILQ_FIRST(&dbp->join_queue);
+ dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
+ if ((t_ret = __db_cprint_item(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ fprintf(stderr, "Free queue:\n");
for (dbc = TAILQ_FIRST(&dbp->free_queue);
dbc != NULL; dbc = TAILQ_NEXT(dbc, links))
- fprintf(stderr, "free: %#0lx ", P_TO_ULONG(dbc));
- fprintf(stderr, "\n");
+ if ((t_ret = __db_cprint_item(dbc)) != 0 && ret == 0)
+ ret = t_ret;
MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
- return (0);
+ return (ret);
}
-#endif /* DEBUG */
-/*
- * db_fd --
- * Return a file descriptor for flock'ing.
- *
- * PUBLIC: int __db_fd __P((DB *, int *));
- */
-int
-__db_fd(dbp, fdp)
- DB *dbp;
- int *fdp;
+static
+int __db_cprint_item(dbc)
+ DBC *dbc;
{
- DB_FH *fhp;
- int ret;
-
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->fd");
-
- /*
- * XXX
- * Truly spectacular layering violation.
- */
- if ((ret = __mp_xxx_fh(dbp->mpf, &fhp)) != 0)
- return (ret);
-
- if (F_ISSET(fhp, DB_FH_VALID)) {
- *fdp = fhp->fd;
- return (0);
- } else {
- *fdp = -1;
- __db_err(dbp->dbenv, "DB does not have a valid file handle.");
- return (ENOENT);
- }
-}
-
-/*
- * __db_get --
- * Return a key/data pair.
- *
- * PUBLIC: int __db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
- */
-int
-__db_get(dbp, txn, key, data, flags)
+ static const FN fn[] = {
+ { DBC_ACTIVE, "active" },
+ { DBC_COMPENSATE, "compensate" },
+ { DBC_OPD, "off-page-dup" },
+ { DBC_RECOVER, "recover" },
+ { DBC_RMW, "read-modify-write" },
+ { DBC_TRANSIENT, "transient" },
+ { DBC_WRITECURSOR, "write cursor" },
+ { DBC_WRITER, "short-term write cursor" },
+ { 0, NULL }
+ };
DB *dbp;
- DB_TXN *txn;
- DBT *key, *data;
- u_int32_t flags;
-{
- DBC *dbc;
- int mode, ret, t_ret;
-
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get");
-
- if ((ret = __db_getchk(dbp, key, data, flags)) != 0)
- return (ret);
+ DBC_INTERNAL *cp;
+ const char *s;
- mode = 0;
- if (flags == DB_CONSUME || flags == DB_CONSUME_WAIT)
- mode = DB_WRITELOCK;
- if ((ret = dbp->cursor(dbp, txn, &dbc, mode)) != 0)
- return (ret);
+ dbp = dbc->dbp;
+ cp = dbc->internal;
- DEBUG_LREAD(dbc, txn, "__db_get", key, NULL, flags);
+ s = __db_dbtype_to_string(dbc->dbtype);
+ fprintf(stderr, "%s/%#lx: opd: %#lx\n",
+ s, P_TO_ULONG(dbc), P_TO_ULONG(cp->opd));
- /*
- * The DBC_TRANSIENT flag indicates that we're just doing a
- * single operation with this cursor, and that in case of
- * error we don't need to restore it to its old position--we're
- * going to close it right away. Thus, we can perform the get
- * without duplicating the cursor, saving some cycles in this
- * common case.
- */
- F_SET(dbc, DBC_TRANSIENT);
+ fprintf(stderr, "\ttxn: %#lx lid: %lu locker: %lu\n",
+ P_TO_ULONG(dbc->txn), (u_long)dbc->lid, (u_long)dbc->locker);
- ret = dbc->c_get(dbc, key, data,
- flags == 0 || flags == DB_RMW ? flags | DB_SET : flags);
+ fprintf(stderr, "\troot: %lu page/index: %lu/%lu",
+ (u_long)cp->root, (u_long)cp->pgno, (u_long)cp->indx);
- if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
+ __db_prflags(dbc->flags, fn, stderr);
+ fprintf(stderr, "\n");
- return (ret);
+ switch (dbp->type) {
+ case DB_BTREE:
+ case DB_RECNO:
+ __bam_cprint(dbc);
+ break;
+ case DB_HASH:
+ __ham_cprint(dbc);
+ break;
+ case DB_UNKNOWN:
+ DB_ASSERT(dbp->type != DB_UNKNOWN);
+ /* FALLTHROUGH */
+ case DB_QUEUE:
+ default:
+ break;
+ }
+ return (0);
}
+#endif /* DEBUG */
/*
* __db_put --
@@ -414,20 +365,17 @@ __db_put(dbp, txn, key, data, flags)
{
DBC *dbc;
DBT tdata;
+ DB_ENV *dbenv;
int ret, t_ret;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->put");
+ dbenv = dbp->dbenv;
- if ((ret = __db_putchk(dbp, key, data,
- flags, F_ISSET(dbp, DB_AM_RDONLY),
- F_ISSET(dbp, DB_AM_DUP) || F_ISSET(key, DB_DBT_DUPOK))) != 0)
+ if ((ret = __db_cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
return (ret);
- DB_CHECK_TXN(dbp, txn);
+ DEBUG_LWRITE(dbc, txn, "DB->put", key, data, flags);
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
+ SET_RET_MEM(dbc, dbp);
/*
* See the comment in __db_get().
@@ -441,9 +389,63 @@ __db_put(dbp, txn, key, data, flags)
*/
F_SET(dbc, DBC_TRANSIENT);
- DEBUG_LWRITE(dbc, txn, "__db_put", key, data, flags);
+ switch (flags) {
+ case DB_APPEND:
+ /*
+ * If there is an append callback, the value stored in
+ * data->data may be replaced and then freed. To avoid
+ * passing a freed pointer back to the user, just operate
+ * on a copy of the data DBT.
+ */
+ tdata = *data;
- if (flags == DB_NOOVERWRITE) {
+ /*
+ * Append isn't a normal put operation; call the appropriate
+ * access method's append function.
+ */
+ switch (dbp->type) {
+ case DB_QUEUE:
+ if ((ret = __qam_append(dbc, key, &tdata)) != 0)
+ goto err;
+ break;
+ case DB_RECNO:
+ if ((ret = __ram_append(dbc, key, &tdata)) != 0)
+ goto err;
+ break;
+ case DB_BTREE:
+ case DB_HASH:
+ case DB_UNKNOWN:
+ default:
+ /* The interface should prevent this. */
+ DB_ASSERT(
+ dbp->type == DB_QUEUE || dbp->type == DB_RECNO);
+
+ ret = __db_ferr(dbenv, "DB->put", 0);
+ goto err;
+ }
+
+ /*
+ * Secondary indices: since we've returned zero from
+ * an append function, we've just put a record, and done
+ * so outside __db_c_put. We know we're not a secondary--
+ * the interface prevents puts on them--but we may be a
+ * primary. If so, update our secondary indices
+ * appropriately.
+ */
+ DB_ASSERT(!F_ISSET(dbp, DB_AM_SECONDARY));
+
+ if (LIST_FIRST(&dbp->s_secondaries) != NULL)
+ ret = __db_append_primary(dbc, key, &tdata);
+
+ /*
+ * The append callback, if one exists, may have allocated
+ * a new tdata.data buffer. If so, free it.
+ */
+ FREE_IF_NEEDED(dbp, &tdata);
+
+ /* No need for a cursor put; we're done. */
+ goto done;
+ case DB_NOOVERWRITE:
flags = 0;
/*
* Set DB_DBT_USERMEM, this might be a threaded application and
@@ -457,16 +459,23 @@ __db_put(dbp, txn, key, data, flags)
* If we're doing page-level locking, set the read-modify-write
* flag, we're going to overwrite immediately.
*/
- if ((ret = dbc->c_get(dbc, key, &tdata,
+ if ((ret = __db_c_get(dbc, key, &tdata,
DB_SET | (STD_LOCKING(dbc) ? DB_RMW : 0))) == 0)
ret = DB_KEYEXIST;
- else if (ret == DB_NOTFOUND)
+ else if (ret == DB_NOTFOUND || ret == DB_KEYEMPTY)
ret = 0;
+ break;
+ default:
+ /* Fall through to normal cursor put. */
+ break;
}
+
if (ret == 0)
- ret = dbc->c_put(dbc,
- key, data, flags == 0 ? DB_KEYLAST : flags);
+ ret = __db_c_put(dbc,
+ key, data, flags == 0 ? DB_KEYLAST : flags);
+err:
+done: /* Close the cursor. */
if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -474,25 +483,117 @@ __db_put(dbp, txn, key, data, flags)
}
/*
- * __db_sync --
- * Flush the database cache.
+ * __db_del --
+ * Delete the items referenced by a key.
*
- * PUBLIC: int __db_sync __P((DB *, u_int32_t));
+ * PUBLIC: int __db_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
*/
int
-__db_sync(dbp, flags)
+__db_del(dbp, txn, key, flags)
DB *dbp;
+ DB_TXN *txn;
+ DBT *key;
u_int32_t flags;
{
+ DBC *dbc;
+ DBT data, lkey;
+ u_int32_t f_init, f_next;
int ret, t_ret;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->sync");
+ /* Allocate a cursor. */
+ if ((ret = __db_cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
+ goto err;
- if ((ret = __db_syncchk(dbp, flags)) != 0)
- return (ret);
+ DEBUG_LWRITE(dbc, txn, "DB->del", key, NULL, flags);
+ COMPQUIET(flags, 0);
+
+ /*
+ * Walk a cursor through the key/data pairs, deleting as we go. Set
+ * the DB_DBT_USERMEM flag, as this might be a threaded application
+ * and the flags checking will catch us. We don't actually want the
+ * keys or data, so request a partial of length 0.
+ */
+ memset(&lkey, 0, sizeof(lkey));
+ F_SET(&lkey, DB_DBT_USERMEM | DB_DBT_PARTIAL);
+ memset(&data, 0, sizeof(data));
+ F_SET(&data, DB_DBT_USERMEM | DB_DBT_PARTIAL);
+
+ /*
+ * If locking (and we haven't already acquired CDB locks), set the
+ * read-modify-write flag.
+ */
+ f_init = DB_SET;
+ f_next = DB_NEXT_DUP;
+ if (STD_LOCKING(dbc)) {
+ f_init |= DB_RMW;
+ f_next |= DB_RMW;
+ }
+
+ /* Walk through the set of key/data pairs, deleting as we go. */
+ if ((ret = __db_c_get(dbc, key, &data, f_init)) != 0)
+ goto err;
+
+ /*
+ * Hash permits an optimization in DB->del: since on-page
+ * duplicates are stored in a single HKEYDATA structure, it's
+ * possible to delete an entire set of them at once, and as
+ * the HKEYDATA has to be rebuilt and re-put each time it
+ * changes, this is much faster than deleting the duplicates
+ * one by one. Thus, if we're not pointing at an off-page
+ * duplicate set, and we're not using secondary indices (in
+ * which case we'd have to examine the items one by one anyway),
+ * let hash do this "quick delete".
+ *
+ * !!!
+ * Note that this is the only application-executed delete call in
+ * Berkeley DB that does not go through the __db_c_del function.
+ * If anything other than the delete itself (like a secondary index
+ * update) has to happen there in a particular situation, the
+ * conditions here should be modified not to call __ham_quick_delete.
+ * The ordinary AM-independent alternative will work just fine with
+ * a hash; it'll just be slower.
+ */
+ if (dbp->type == DB_HASH)
+ if (LIST_FIRST(&dbp->s_secondaries) == NULL &&
+ !F_ISSET(dbp, DB_AM_SECONDARY) &&
+ dbc->internal->opd == NULL) {
+ ret = __ham_quick_delete(dbc);
+ goto done;
+ }
+
+ for (;;) {
+ if ((ret = __db_c_del(dbc, 0)) != 0)
+ break;
+ if ((ret = __db_c_get(dbc, &lkey, &data, f_next)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ break;
+ }
+ }
+
+done:
+err: /* Discard the cursor. */
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
- /* Read-only trees never need to be sync'd. */
+/*
+ * __db_sync --
+ * Flush the database cache.
+ *
+ * PUBLIC: int __db_sync __P((DB *));
+ */
+int
+__db_sync(dbp)
+ DB *dbp;
+{
+ int ret, t_ret;
+
+ ret = 0;
+
+ /* If the database was read-only, we're done. */
if (F_ISSET(dbp, DB_AM_RDONLY))
return (0);
@@ -500,12 +601,346 @@ __db_sync(dbp, flags)
if (dbp->type == DB_RECNO)
ret = __ram_writeback(dbp);
- /* If the tree was never backed by a database file, we're done. */
+ /* If the database was never backed by a databse file, we're done. */
if (F_ISSET(dbp, DB_AM_INMEM))
- return (0);
+ return (ret);
+
+ if (dbp->type == DB_QUEUE)
+ ret = __qam_sync(dbp);
+ else
+ /* Flush any dirty pages from the cache to the backing file. */
+ if ((t_ret = __memp_fsync(dbp->mpf)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __db_associate --
+ * Associate another database as a secondary index to this one.
+ *
+ * PUBLIC: int __db_associate __P((DB *, DB_TXN *, DB *,
+ * PUBLIC: int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
+ */
+int
+__db_associate(dbp, txn, sdbp, callback, flags)
+ DB *dbp, *sdbp;
+ DB_TXN *txn;
+ int (*callback) __P((DB *, const DBT *, const DBT *, DBT *));
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DBC *pdbc, *sdbc;
+ DBT skey, key, data;
+ int build, ret, t_ret;
+
+ dbenv = dbp->dbenv;
+ pdbc = sdbc = NULL;
+ ret = 0;
+
+ sdbp->s_callback = callback;
+ sdbp->s_primary = dbp;
+
+ sdbp->stored_get = sdbp->get;
+ sdbp->get = __db_secondary_get;
+
+ sdbp->stored_close = sdbp->close;
+ sdbp->close = __db_secondary_close;
+
+ F_SET(sdbp, DB_AM_SECONDARY);
+
+ /*
+ * Check to see if the secondary is empty--and thus if we should
+ * build it--before we link it in and risk making it show up in
+ * other threads.
+ */
+ build = 0;
+ if (LF_ISSET(DB_CREATE)) {
+ if ((ret = __db_cursor(sdbp, txn, &sdbc, 0)) != 0)
+ goto err;
+
+ /*
+ * We don't care about key or data; we're just doing
+ * an existence check.
+ */
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+ F_SET(&key, DB_DBT_PARTIAL | DB_DBT_USERMEM);
+ F_SET(&data, DB_DBT_PARTIAL | DB_DBT_USERMEM);
+ if ((ret = __db_c_get(sdbc, &key, &data,
+ (STD_LOCKING(sdbc) ? DB_RMW : 0) |
+ DB_FIRST)) == DB_NOTFOUND) {
+ build = 1;
+ ret = 0;
+ }
+
+ /*
+ * Secondary cursors have special refcounting close
+ * methods. Be careful.
+ */
+ if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Reset for later error check. */
+ sdbc = NULL;
+
+ if (ret != 0)
+ goto err;
+ }
+
+ /*
+ * Add the secondary to the list on the primary. Do it here
+ * so that we see any updates that occur while we're walking
+ * the primary.
+ */
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+
+ /* See __db_s_next for an explanation of secondary refcounting. */
+ DB_ASSERT(sdbp->s_refcnt == 0);
+ sdbp->s_refcnt = 1;
+ LIST_INSERT_HEAD(&dbp->s_secondaries, sdbp, s_links);
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+
+ if (build) {
+ /*
+ * We loop through the primary, putting each item we
+ * find into the new secondary.
+ *
+ * If we're using CDB, opening these two cursors puts us
+ * in a bit of a locking tangle: CDB locks are done on the
+ * primary, so that we stay deadlock-free, but that means
+ * that updating the secondary while we have a read cursor
+ * open on the primary will self-block. To get around this,
+ * we force the primary cursor to use the same locker ID
+ * as the secondary, so they won't conflict. This should
+ * be harmless even if we're not using CDB.
+ */
+ if ((ret = __db_cursor(sdbp, txn, &sdbc,
+ CDB_LOCKING(sdbp->dbenv) ? DB_WRITECURSOR : 0)) != 0)
+ goto err;
+ if ((ret = __db_cursor_int(dbp,
+ txn, dbp->type, PGNO_INVALID, 0, sdbc->locker, &pdbc)) != 0)
+ goto err;
+
+ /* Lock out other threads, now that we have a locker ID. */
+ dbp->associate_lid = sdbc->locker;
+
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+ while ((ret = __db_c_get(pdbc, &key, &data, DB_NEXT)) == 0) {
+ memset(&skey, 0, sizeof(DBT));
+ if ((ret = callback(sdbp, &key, &data, &skey)) != 0) {
+ if (ret == DB_DONOTINDEX)
+ continue;
+ goto err;
+ }
+ if ((ret = __db_c_put(sdbc,
+ &skey, &key, DB_UPDATE_SECONDARY)) != 0) {
+ FREE_IF_NEEDED(sdbp, &skey);
+ goto err;
+ }
+
+ FREE_IF_NEEDED(sdbp, &skey);
+ }
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ }
+
+err: if (sdbc != NULL && (t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (pdbc != NULL && (t_ret = __db_c_close(pdbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ dbp->associate_lid = DB_LOCK_INVALIDID;
+
+ return (ret);
+}
+
+/*
+ * __db_secondary_get --
+ * This wrapper function for DB->pget() is the DB->get() function
+ * on a database which has been made into a secondary index.
+ */
+static int
+__db_secondary_get(sdbp, txn, skey, data, flags)
+ DB *sdbp;
+ DB_TXN *txn;
+ DBT *skey, *data;
+ u_int32_t flags;
+{
- /* Flush any dirty pages from the cache to the backing file. */
- if ((t_ret = memp_fsync(dbp->mpf)) != 0 && ret == 0)
+ DB_ASSERT(F_ISSET(sdbp, DB_AM_SECONDARY));
+ return (__db_pget(sdbp, txn, skey, NULL, data, flags));
+}
+
+/*
+ * __db_secondary_close --
+ * Wrapper function for DB->close() which we use on secondaries to
+ * manage refcounting and make sure we don't close them underneath
+ * a primary that is updating.
+ */
+static int
+__db_secondary_close(sdbp, flags)
+ DB *sdbp;
+ u_int32_t flags;
+{
+ DB *primary;
+ int doclose;
+
+ doclose = 0;
+ primary = sdbp->s_primary;
+
+ MUTEX_THREAD_LOCK(primary->dbenv, primary->mutexp);
+ /*
+ * Check the refcount--if it was at 1 when we were called, no
+ * thread is currently updating this secondary through the primary,
+ * so it's safe to close it for real.
+ *
+ * If it's not safe to do the close now, we do nothing; the
+ * database will actually be closed when the refcount is decremented,
+ * which can happen in either __db_s_next or __db_s_done.
+ */
+ DB_ASSERT(sdbp->s_refcnt != 0);
+ if (--sdbp->s_refcnt == 0) {
+ LIST_REMOVE(sdbp, s_links);
+ /* We don't want to call close while the mutex is held. */
+ doclose = 1;
+ }
+ MUTEX_THREAD_UNLOCK(primary->dbenv, primary->mutexp);
+
+ /*
+ * sdbp->close is this function; call the real one explicitly if
+ * need be.
+ */
+ return (doclose ? __db_close(sdbp, NULL, flags) : 0);
+}
+
+/*
+ * __db_append_primary --
+ * Perform the secondary index updates necessary to put(DB_APPEND)
+ * a record to a primary database.
+ */
+static int
+__db_append_primary(dbc, key, data)
+ DBC *dbc;
+ DBT *key, *data;
+{
+ DB *dbp, *sdbp;
+ DBC *sdbc, *pdbc;
+ DBT oldpkey, pkey, pdata, skey;
+ int cmp, ret, t_ret;
+
+ dbp = dbc->dbp;
+ sdbp = NULL;
+ ret = 0;
+
+ /*
+ * Worrying about partial appends seems a little like worrying
+ * about Linear A character encodings. But we support those
+ * too if your application understands them.
+ */
+ pdbc = NULL;
+ if (F_ISSET(data, DB_DBT_PARTIAL) || F_ISSET(key, DB_DBT_PARTIAL)) {
+ /*
+ * The dbc we were passed is all set to pass things
+ * back to the user; we can't safely do a call on it.
+ * Dup the cursor, grab the real data item (we don't
+ * care what the key is--we've been passed it directly),
+ * and use that instead of the data DBT we were passed.
+ *
+ * Note that we can get away with this simple get because
+ * an appended item is by definition new, and the
+ * correctly-constructed full data item from this partial
+ * put is on the page waiting for us.
+ */
+ if ((ret = __db_c_idup(dbc, &pdbc, DB_POSITION)) != 0)
+ return (ret);
+ memset(&pkey, 0, sizeof(DBT));
+ memset(&pdata, 0, sizeof(DBT));
+
+ if ((ret = __db_c_get(pdbc, &pkey, &pdata, DB_CURRENT)) != 0)
+ goto err;
+
+ key = &pkey;
+ data = &pdata;
+ }
+
+ /*
+ * Loop through the secondary indices, putting a new item in
+ * each that points to the appended item.
+ *
+ * This is much like the loop in "step 3" in __db_c_put, so
+ * I'm not commenting heavily here; it was unclean to excerpt
+ * just that section into a common function, but the basic
+ * overview is the same here.
+ */
+ for (sdbp = __db_s_first(dbp);
+ sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp)) {
+ memset(&skey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp, key, data, &skey)) != 0) {
+ if (ret == DB_DONOTINDEX)
+ continue;
+ else
+ goto err;
+ }
+
+ if ((ret = __db_cursor_int(sdbp, dbc->txn, sdbp->type,
+ PGNO_INVALID, 0, dbc->locker, &sdbc)) != 0) {
+ FREE_IF_NEEDED(sdbp, &skey);
+ goto err;
+ }
+ if (CDB_LOCKING(sdbp->dbenv)) {
+ DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ F_SET(sdbc, DBC_WRITER);
+ }
+
+ /*
+ * Since we know we have a new primary key, it can't be a
+ * duplicate duplicate in the secondary. It can be a
+ * duplicate in a secondary that doesn't support duplicates,
+ * however, so we need to be careful to avoid an overwrite
+ * (which would corrupt our index).
+ */
+ if (!F_ISSET(sdbp, DB_AM_DUP)) {
+ memset(&oldpkey, 0, sizeof(DBT));
+ F_SET(&oldpkey, DB_DBT_MALLOC);
+ ret = __db_c_get(sdbc, &skey, &oldpkey,
+ DB_SET | (STD_LOCKING(dbc) ? DB_RMW : 0));
+ if (ret == 0) {
+ cmp = __bam_defcmp(sdbp, &oldpkey, key);
+ /*
+ * XXX
+ * This needs to use the right free function
+ * as soon as this is possible.
+ */
+ __os_ufree(sdbp->dbenv,
+ oldpkey.data);
+ if (cmp != 0) {
+ __db_err(sdbp->dbenv, "%s%s",
+ "Append results in a non-unique secondary key in",
+ " an index not configured to support duplicates");
+ ret = EINVAL;
+ goto err1;
+ }
+ } else if (ret != DB_NOTFOUND && ret != DB_KEYEMPTY)
+ goto err1;
+ }
+
+ ret = __db_c_put(sdbc, &skey, key, DB_UPDATE_SECONDARY);
+
+err1: FREE_IF_NEEDED(sdbp, &skey);
+
+ if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (ret != 0)
+ goto err;
+ }
+
+err: if (pdbc != NULL && (t_ret = __db_c_close(pdbc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
diff --git a/db/db/db_auto.c b/db/db/db_auto.c
index 23540adc2..d1113d576 100644
--- a/db/db/db_auto.c
+++ b/db/db/db_auto.c
@@ -5,80 +5,148 @@
#include <sys/types.h>
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "txn.h"
-
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+
+/*
+ * PUBLIC: int __db_addrem_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, u_int32_t, u_int32_t,
+ * PUBLIC: const DBT *, const DBT *, DB_LSN *));
+ */
int
-__db_addrem_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, pgno, indx, nbytes, hdr,
- dbt, pagelsn)
- DB_ENV *dbenv;
+__db_addrem_log(dbp, txnid, ret_lsnp, flags,
+ opcode, pgno, indx, nbytes, hdr,
+ dbt, pagelsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_pgno_t pgno;
u_int32_t indx;
- size_t nbytes;
+ u_int32_t nbytes;
const DBT *hdr;
const DBT *dbt;
DB_LSN * pagelsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_db_addrem;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_addrem;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(indx)
- + sizeof(nbytes)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (hdr == NULL ? 0 : hdr->size)
+ sizeof(u_int32_t) + (dbt == NULL ? 0 : dbt->size)
+ sizeof(*pagelsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &nbytes, sizeof(nbytes));
- bp += sizeof(nbytes);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)nbytes;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (hdr == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -89,6 +157,7 @@ __db_addrem_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, hdr->data, hdr->size);
bp += hdr->size;
}
+
if (dbt == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -99,19 +168,98 @@ __db_addrem_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, dbt->data, dbt->size);
bp += dbt->size;
}
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_addrem_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_addrem_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_addrem_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_addrem_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__db_addrem_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -122,53 +270,51 @@ __db_addrem_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__db_addrem_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __db_addrem_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_addrem: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_addrem%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tnbytes: %lu\n", (u_long)argp->nbytes);
- printf("\thdr: ");
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tnbytes: %lu\n", (u_long)argp->nbytes);
+ (void)printf("\thdr: ");
for (i = 0; i < argp->hdr.size; i++) {
ch = ((u_int8_t *)argp->hdr.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tdbt: ");
+ (void)printf("\n");
+ (void)printf("\tdbt: ");
for (i = 0; i < argp->dbt.size; i++) {
ch = ((u_int8_t *)argp->dbt.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\n");
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_addrem_read __P((DB_ENV *, void *, __db_addrem_args **));
+ */
int
__db_addrem_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -176,142 +322,78 @@ __db_addrem_read(dbenv, recbuf, argpp)
__db_addrem_args **argpp;
{
__db_addrem_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_addrem_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_addrem_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->nbytes, bp, sizeof(argp->nbytes));
- bp += sizeof(argp->nbytes);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->nbytes = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->hdr, 0, sizeof(argp->hdr));
memcpy(&argp->hdr.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->hdr.data = bp;
bp += argp->hdr.size;
+
memset(&argp->dbt, 0, sizeof(argp->dbt));
memcpy(&argp->dbt.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->dbt.data = bp;
bp += argp->dbt.size;
- memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
- bp += sizeof(argp->pagelsn);
- *argpp = argp;
- return (0);
-}
-int
-__db_split_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __db_split_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __db_split_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]db_split: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tpageimage: ");
- for (i = 0; i < argp->pageimage.size; i++) {
- ch = ((u_int8_t *)argp->pageimage.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tpagelsn: [%lu][%lu]\n",
- (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__db_split_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __db_split_args **argpp;
-{
- __db_split_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__db_split_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memset(&argp->pageimage, 0, sizeof(argp->pageimage));
- memcpy(&argp->pageimage.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->pageimage.data = bp;
- bp += argp->pageimage.size;
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_big_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, db_pgno_t, db_pgno_t,
+ * PUBLIC: const DBT *, DB_LSN *, DB_LSN *, DB_LSN *));
+ */
int
-__db_big_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, pgno, prev_pgno, next_pgno, dbt,
- pagelsn, prevlsn, nextlsn)
- DB_ENV *dbenv;
+__db_big_log(dbp, txnid, ret_lsnp, flags,
+ opcode, pgno, prev_pgno, next_pgno, dbt,
+ pagelsn, prevlsn, nextlsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_pgno_t pgno;
db_pgno_t prev_pgno;
db_pgno_t next_pgno;
@@ -321,53 +403,116 @@ __db_big_log(dbenv, txnid, ret_lsnp, flags,
DB_LSN * nextlsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_db_big;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_big;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(prev_pgno)
- + sizeof(next_pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (dbt == NULL ? 0 : dbt->size)
+ sizeof(*pagelsn)
+ sizeof(*prevlsn)
+ sizeof(*nextlsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &prev_pgno, sizeof(prev_pgno));
- bp += sizeof(prev_pgno);
- memcpy(bp, &next_pgno, sizeof(next_pgno));
- bp += sizeof(next_pgno);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)prev_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)next_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (dbt == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -378,29 +523,110 @@ __db_big_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, dbt->data, dbt->size);
bp += dbt->size;
}
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
+
if (prevlsn != NULL)
memcpy(bp, prevlsn, sizeof(*prevlsn));
else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
+
if (nextlsn != NULL)
memcpy(bp, nextlsn, sizeof(*nextlsn));
else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_big_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_big_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_big_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_big_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__db_big_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -411,48 +637,49 @@ __db_big_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__db_big_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __db_big_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_big: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_big%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tprev_pgno: %lu\n", (u_long)argp->prev_pgno);
- printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
- printf("\tdbt: ");
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tprev_pgno: %lu\n", (u_long)argp->prev_pgno);
+ (void)printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
+ (void)printf("\tdbt: ");
for (i = 0; i < argp->dbt.size; i++) {
ch = ((u_int8_t *)argp->dbt.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\n");
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\tprevlsn: [%lu][%lu]\n",
+ (void)printf("\tprevlsn: [%lu][%lu]\n",
(u_long)argp->prevlsn.file, (u_long)argp->prevlsn.offset);
- printf("\tnextlsn: [%lu][%lu]\n",
+ (void)printf("\tnextlsn: [%lu][%lu]\n",
(u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_big_read __P((DB_ENV *, void *, __db_big_args **));
+ */
int
__db_big_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -460,109 +687,267 @@ __db_big_read(dbenv, recbuf, argpp)
__db_big_args **argpp;
{
__db_big_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_big_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_big_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->prev_pgno, bp, sizeof(argp->prev_pgno));
- bp += sizeof(argp->prev_pgno);
- memcpy(&argp->next_pgno, bp, sizeof(argp->next_pgno));
- bp += sizeof(argp->next_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->prev_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->dbt, 0, sizeof(argp->dbt));
memcpy(&argp->dbt.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->dbt.data = bp;
bp += argp->dbt.size;
+
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
+
memcpy(&argp->prevlsn, bp, sizeof(argp->prevlsn));
bp += sizeof(argp->prevlsn);
+
memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
bp += sizeof(argp->nextlsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_ovref_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, int32_t, DB_LSN *));
+ */
int
-__db_ovref_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, adjust, lsn)
- DB_ENV *dbenv;
+__db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, adjust, lsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
int32_t adjust;
DB_LSN * lsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_db_ovref;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_ovref;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(adjust)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &adjust, sizeof(adjust));
- bp += sizeof(adjust);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)adjust;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_ovref_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_ovref_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_ovref_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_ovref_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__db_ovref_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -572,34 +957,36 @@ __db_ovref_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__db_ovref_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __db_ovref_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_ovref: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_ovref%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tadjust: %ld\n", (long)argp->adjust);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tadjust: %ld\n", (long)argp->adjust);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_ovref_read __P((DB_ENV *, void *, __db_ovref_args **));
+ */
int
__db_ovref_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -607,43 +994,58 @@ __db_ovref_read(dbenv, recbuf, argpp)
__db_ovref_args **argpp;
{
__db_ovref_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_ovref_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_ovref_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->adjust, bp, sizeof(argp->adjust));
- bp += sizeof(argp->adjust);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->adjust = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_relink_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *,
+ * PUBLIC: db_pgno_t, DB_LSN *));
+ */
int
-__db_relink_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, pgno, lsn, prev, lsn_prev,
- next, lsn_next)
- DB_ENV *dbenv;
+__db_relink_log(dbp, txnid, ret_lsnp, flags,
+ opcode, pgno, lsn, prev, lsn_prev,
+ next, lsn_next)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * lsn;
db_pgno_t prev;
@@ -652,237 +1054,330 @@ __db_relink_log(dbenv, txnid, ret_lsnp, flags,
DB_LSN * lsn_next;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_db_relink;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_relink;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(prev)
+ + sizeof(u_int32_t)
+ sizeof(*lsn_prev)
- + sizeof(next)
+ + sizeof(u_int32_t)
+ sizeof(*lsn_next);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &prev, sizeof(prev));
- bp += sizeof(prev);
+
+ uinttmp = (u_int32_t)prev;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn_prev != NULL)
memcpy(bp, lsn_prev, sizeof(*lsn_prev));
else
memset(bp, 0, sizeof(*lsn_prev));
bp += sizeof(*lsn_prev);
- memcpy(bp, &next, sizeof(next));
- bp += sizeof(next);
+
+ uinttmp = (u_int32_t)next;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn_next != NULL)
memcpy(bp, lsn_next, sizeof(*lsn_next));
else
memset(bp, 0, sizeof(*lsn_next));
bp += sizeof(*lsn_next);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_relink_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_relink_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__db_relink_print(dbenv, dbtp, lsnp, notused2, notused3)
+__db_relink_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DBT *dbtp;
+ DBT *rec;
DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
+ db_recops notused1;
+ void *summary;
{
- __db_relink_args *argp;
- u_int32_t i;
- u_int ch;
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ t = (TXN_RECS *)summary;
- if ((ret = __db_relink_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- printf("[%lu][%lu]db_relink: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
- (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tprev: %lu\n", (u_long)argp->prev);
- printf("\tlsn_prev: [%lu][%lu]\n",
- (u_long)argp->lsn_prev.file, (u_long)argp->lsn_prev.offset);
- printf("\tnext: %lu\n", (u_long)argp->next);
- printf("\tlsn_next: [%lu][%lu]\n",
- (u_long)argp->lsn_next.file, (u_long)argp->lsn_next.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-int
-__db_relink_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __db_relink_args **argpp;
-{
- __db_relink_args *argp;
- u_int8_t *bp;
- int ret;
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
- ret = __os_malloc(dbenv, sizeof(__db_relink_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->lsn, bp, sizeof(argp->lsn));
- bp += sizeof(argp->lsn);
- memcpy(&argp->prev, bp, sizeof(argp->prev));
- bp += sizeof(argp->prev);
- memcpy(&argp->lsn_prev, bp, sizeof(argp->lsn_prev));
- bp += sizeof(argp->lsn_prev);
- memcpy(&argp->next, bp, sizeof(argp->next));
- bp += sizeof(argp->next);
- memcpy(&argp->lsn_next, bp, sizeof(argp->lsn_next));
- bp += sizeof(argp->lsn_next);
- *argpp = argp;
return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __db_relink_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__db_addpage_print(dbenv, dbtp, lsnp, notused2, notused3)
+__db_relink_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __db_addpage_args *argp;
- u_int32_t i;
- u_int ch;
+ __db_relink_args *argp;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __db_addpage_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __db_relink_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_addpage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_relink%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tnextpgno: %lu\n", (u_long)argp->nextpgno);
- printf("\tnextlsn: [%lu][%lu]\n",
- (u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tprev: %lu\n", (u_long)argp->prev);
+ (void)printf("\tlsn_prev: [%lu][%lu]\n",
+ (u_long)argp->lsn_prev.file, (u_long)argp->lsn_prev.offset);
+ (void)printf("\tnext: %lu\n", (u_long)argp->next);
+ (void)printf("\tlsn_next: [%lu][%lu]\n",
+ (u_long)argp->lsn_next.file, (u_long)argp->lsn_next.offset);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_relink_read __P((DB_ENV *, void *, __db_relink_args **));
+ */
int
-__db_addpage_read(dbenv, recbuf, argpp)
+__db_relink_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __db_addpage_args **argpp;
+ __db_relink_args **argpp;
{
- __db_addpage_args *argp;
+ __db_relink_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_addpage_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_relink_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->nextpgno, bp, sizeof(argp->nextpgno));
- bp += sizeof(argp->nextpgno);
- memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
- bp += sizeof(argp->nextlsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->prev = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->lsn_prev, bp, sizeof(argp->lsn_prev));
+ bp += sizeof(argp->lsn_prev);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->lsn_next, bp, sizeof(argp->lsn_next));
+ bp += sizeof(argp->lsn_next);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_debug_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, const DBT *, int32_t, const DBT *, const DBT *,
+ * PUBLIC: u_int32_t));
+ */
int
__db_debug_log(dbenv, txnid, ret_lsnp, flags,
- op, fileid, key, data, arg_flags)
+ op, fileid, key, data, arg_flags)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
@@ -894,39 +1389,81 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t arg_flags;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
- rectype = DB_db_debug;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ rectype = DB___db_debug;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ sizeof(u_int32_t) + (op == NULL ? 0 : op->size)
- + sizeof(fileid)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (key == NULL ? 0 : key->size)
+ sizeof(u_int32_t) + (data == NULL ? 0 : data->size)
- + sizeof(arg_flags);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
+
if (op == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -937,8 +1474,11 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, op->data, op->size);
bp += op->size;
}
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
+
+ uinttmp = (u_int32_t)fileid;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (key == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -949,6 +1489,7 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, key->data, key->size);
bp += key->size;
}
+
if (data == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -959,16 +1500,96 @@ __db_debug_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, data->data, data->size);
bp += data->size;
}
- memcpy(bp, &arg_flags, sizeof(arg_flags));
- bp += sizeof(arg_flags);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)arg_flags;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_debug_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_debug_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_debug_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_debug_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__db_debug_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -979,57 +1600,52 @@ __db_debug_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__db_debug_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __db_debug_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_debug: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_debug%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\top: ");
+ (void)printf("\top: ");
for (i = 0; i < argp->op.size; i++) {
ch = ((u_int8_t *)argp->op.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tkey: ");
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tkey: ");
for (i = 0; i < argp->key.size; i++) {
ch = ((u_int8_t *)argp->key.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tdata: ");
+ (void)printf("\n");
+ (void)printf("\tdata: ");
for (i = 0; i < argp->data.size; i++) {
ch = ((u_int8_t *)argp->data.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\targ_flags: %lu\n", (u_long)argp->arg_flags);
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\targ_flags: %lu\n", (u_long)argp->arg_flags);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_debug_read __P((DB_ENV *, void *, __db_debug_args **));
+ */
int
__db_debug_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1037,103 +1653,252 @@ __db_debug_read(dbenv, recbuf, argpp)
__db_debug_args **argpp;
{
__db_debug_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_debug_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_debug_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
+
memset(&argp->op, 0, sizeof(argp->op));
memcpy(&argp->op.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->op.data = bp;
bp += argp->op.size;
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->key, 0, sizeof(argp->key));
memcpy(&argp->key.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->key.data = bp;
bp += argp->key.size;
+
memset(&argp->data, 0, sizeof(argp->data));
memcpy(&argp->data.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->data.data = bp;
bp += argp->data.size;
- memcpy(&argp->arg_flags, bp, sizeof(argp->arg_flags));
- bp += sizeof(argp->arg_flags);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->arg_flags = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_noop_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *));
+ */
int
-__db_noop_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, prevlsn)
- DB_ENV *dbenv;
+__db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, prevlsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * prevlsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_db_noop;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_noop;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*prevlsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (prevlsn != NULL)
memcpy(bp, prevlsn, sizeof(*prevlsn));
else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_noop_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_noop_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_noop_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_noop_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__db_noop_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1143,33 +1908,35 @@ __db_noop_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__db_noop_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __db_noop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]db_noop: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__db_noop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tprevlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tprevlsn: [%lu][%lu]\n",
(u_long)argp->prevlsn.file, (u_long)argp->prevlsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __db_noop_read __P((DB_ENV *, void *, __db_noop_args **));
+ */
int
__db_noop_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1177,94 +1944,2017 @@ __db_noop_read(dbenv, recbuf, argpp)
__db_noop_args **argpp;
{
__db_noop_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__db_noop_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_noop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->prevlsn, bp, sizeof(argp->prevlsn));
bp += sizeof(argp->prevlsn);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_alloc_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t, u_int32_t,
+ * PUBLIC: db_pgno_t));
+ */
+int
+__db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, meta_pgno, page_lsn, pgno, ptype,
+ next)
+ DB *dbp;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ DB_LSN * meta_lsn;
+ db_pgno_t meta_pgno;
+ DB_LSN * page_lsn;
+ db_pgno_t pgno;
+ u_int32_t ptype;
+ db_pgno_t next;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_pg_alloc;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(*meta_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(*page_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (meta_lsn != NULL)
+ memcpy(bp, meta_lsn, sizeof(*meta_lsn));
+ else
+ memset(bp, 0, sizeof(*meta_lsn));
+ bp += sizeof(*meta_lsn);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (page_lsn != NULL)
+ memcpy(bp, page_lsn, sizeof(*page_lsn));
+ else
+ memset(bp, 0, sizeof(*page_lsn));
+ bp += sizeof(*page_lsn);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)ptype;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)next;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_alloc_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_pg_alloc_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_alloc_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_pg_alloc_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_alloc_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_alloc_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_alloc_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_alloc%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
+ (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\tpage_lsn: [%lu][%lu]\n",
+ (u_long)argp->page_lsn.file, (u_long)argp->page_lsn.offset);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tptype: %lu\n", (u_long)argp->ptype);
+ (void)printf("\tnext: %lu\n", (u_long)argp->next);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_alloc_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_alloc_args **));
+ */
+int
+__db_pg_alloc_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_alloc_args **argpp;
+{
+ __db_pg_alloc_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_alloc_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
+ bp += sizeof(argp->meta_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->page_lsn, bp, sizeof(argp->page_lsn));
+ bp += sizeof(argp->page_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->ptype = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_free_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *,
+ * PUBLIC: db_pgno_t));
+ */
+int
+__db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next)
+ DB *dbp;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+ DB_LSN * meta_lsn;
+ db_pgno_t meta_pgno;
+ const DBT *header;
+ db_pgno_t next;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_pg_free;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*meta_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (header == NULL ? 0 : header->size)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (meta_lsn != NULL)
+ memcpy(bp, meta_lsn, sizeof(*meta_lsn));
+ else
+ memset(bp, 0, sizeof(*meta_lsn));
+ bp += sizeof(*meta_lsn);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (header == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &header->size, sizeof(header->size));
+ bp += sizeof(header->size);
+ memcpy(bp, header->data, header->size);
+ bp += header->size;
+ }
+
+ uinttmp = (u_int32_t)next;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_free_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_pg_free_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_free_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_pg_free_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_free_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_free_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_free_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_free%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
+ (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\theader: ");
+ for (i = 0; i < argp->header.size; i++) {
+ ch = ((u_int8_t *)argp->header.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tnext: %lu\n", (u_long)argp->next);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_free_read __P((DB_ENV *, void *, __db_pg_free_args **));
+ */
+int
+__db_pg_free_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_free_args **argpp;
+{
+ __db_pg_free_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_free_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
+ bp += sizeof(argp->meta_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->header, 0, sizeof(argp->header));
+ memcpy(&argp->header.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->header.data = bp;
+ bp += argp->header.size;
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __db_cksum_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t));
+ */
+int
+__db_cksum_log(dbenv, txnid, ret_lsnp, flags)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+{
+ DBT logrec;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ rectype = DB___db_cksum;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_cksum_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_cksum_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__db_init_print(dbenv)
+__db_cksum_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
{
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
- if ((ret = __db_add_recovery(dbenv,
- __db_addrem_print, DB_db_addrem)) != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_split_print, DB_db_split)) != 0)
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_cksum_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_cksum_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_cksum_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_cksum_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_big_print, DB_db_big)) != 0)
+ (void)printf(
+ "[%lu][%lu]__db_cksum%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_cksum_read __P((DB_ENV *, void *, __db_cksum_args **));
+ */
+int
+__db_cksum_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_cksum_args **argpp;
+{
+ __db_cksum_args *argp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_cksum_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_ovref_print, DB_db_ovref)) != 0)
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_freedata_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *,
+ * PUBLIC: db_pgno_t, const DBT *));
+ */
+int
+__db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next,
+ data)
+ DB *dbp;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+ DB_LSN * meta_lsn;
+ db_pgno_t meta_pgno;
+ const DBT *header;
+ db_pgno_t next;
+ const DBT *data;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_pg_freedata;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*meta_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (header == NULL ? 0 : header->size)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (data == NULL ? 0 : data->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_relink_print, DB_db_relink)) != 0)
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (meta_lsn != NULL)
+ memcpy(bp, meta_lsn, sizeof(*meta_lsn));
+ else
+ memset(bp, 0, sizeof(*meta_lsn));
+ bp += sizeof(*meta_lsn);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (header == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &header->size, sizeof(header->size));
+ bp += sizeof(header->size);
+ memcpy(bp, header->data, header->size);
+ bp += header->size;
+ }
+
+ uinttmp = (u_int32_t)next;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (data == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &data->size, sizeof(data->size));
+ bp += sizeof(data->size);
+ memcpy(bp, data->data, data->size);
+ bp += data->size;
+ }
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_freedata_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_pg_freedata_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_freedata_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_addpage_print, DB_db_addpage)) != 0)
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_pg_freedata_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_freedata_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_freedata_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_freedata_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_debug_print, DB_db_debug)) != 0)
+ (void)printf(
+ "[%lu][%lu]__db_pg_freedata%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
+ (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\theader: ");
+ for (i = 0; i < argp->header.size; i++) {
+ ch = ((u_int8_t *)argp->header.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tnext: %lu\n", (u_long)argp->next);
+ (void)printf("\tdata: ");
+ for (i = 0; i < argp->data.size; i++) {
+ ch = ((u_int8_t *)argp->data.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_freedata_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_freedata_args **));
+ */
+int
+__db_pg_freedata_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_freedata_args **argpp;
+{
+ __db_pg_freedata_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_freedata_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
+ bp += sizeof(argp->meta_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->header, 0, sizeof(argp->header));
+ memcpy(&argp->header.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->header.data = bp;
+ bp += argp->header.size;
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->data, 0, sizeof(argp->data));
+ memcpy(&argp->data.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->data.data = bp;
+ bp += argp->data.size;
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_prepare_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t));
+ */
+int
+__db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, pgno)
+ DB *dbp;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_pg_prepare;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_prepare_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_pg_prepare_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_prepare_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_pg_prepare_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_prepare_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_prepare_args *argp;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_prepare_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_prepare%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_prepare_read __P((DB_ENV *, void *,
+ * PUBLIC: __db_pg_prepare_args **));
+ */
+int
+__db_pg_prepare_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_prepare_args **argpp;
+{
+ __db_pg_prepare_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_prepare_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_new_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *,
+ * PUBLIC: db_pgno_t));
+ */
+int
+__db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno, meta_lsn, meta_pgno, header, next)
+ DB *dbp;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ db_pgno_t pgno;
+ DB_LSN * meta_lsn;
+ db_pgno_t meta_pgno;
+ const DBT *header;
+ db_pgno_t next;
+{
+ DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___db_pg_new;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*meta_lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (header == NULL ? 0 : header->size)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (meta_lsn != NULL)
+ memcpy(bp, meta_lsn, sizeof(*meta_lsn));
+ else
+ memset(bp, 0, sizeof(*meta_lsn));
+ bp += sizeof(*meta_lsn);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (header == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &header->size, sizeof(header->size));
+ bp += sizeof(header->size);
+ memcpy(bp, header->data, header->size);
+ bp += header->size;
+ }
+
+ uinttmp = (u_int32_t)next;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__db_pg_new_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_pg_new_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_new_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_pg_new_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__db_pg_new_print(dbenv, dbtp, lsnp, notused2, notused3)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops notused2;
+ void *notused3;
+{
+ __db_pg_new_args *argp;
+ u_int32_t i;
+ int ch;
+ int ret;
+
+ notused2 = DB_TXN_ABORT;
+ notused3 = NULL;
+
+ if ((ret = __db_pg_new_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+ (void)printf(
+ "[%lu][%lu]__db_pg_new%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (u_long)lsnp->file,
+ (u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
+ (u_long)argp->type,
+ (u_long)argp->txnid->txnid,
+ (u_long)argp->prev_lsn.file,
+ (u_long)argp->prev_lsn.offset);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
+ (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\theader: ");
+ for (i = 0; i < argp->header.size; i++) {
+ ch = ((u_int8_t *)argp->header.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tnext: %lu\n", (u_long)argp->next);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_pg_new_read __P((DB_ENV *, void *, __db_pg_new_args **));
+ */
+int
+__db_pg_new_read(dbenv, recbuf, argpp)
+ DB_ENV *dbenv;
+ void *recbuf;
+ __db_pg_new_args **argpp;
+{
+ __db_pg_new_args *argp;
+ u_int32_t uinttmp;
+ u_int8_t *bp;
+ int ret;
+
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__db_pg_new_args) + sizeof(DB_TXN), &argp)) != 0)
+ return (ret);
+ argp->txnid = (DB_TXN *)&argp[1];
+
+ bp = recbuf;
+ memcpy(&argp->type, bp, sizeof(argp->type));
+ bp += sizeof(argp->type);
+
+ memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
+ bp += sizeof(argp->txnid->txnid);
+
+ memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
+ bp += sizeof(argp->meta_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->header, 0, sizeof(argp->header));
+ memcpy(&argp->header.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->header.data = bp;
+ bp += argp->header.size;
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ *argpp = argp;
+ return (0);
+}
+
+/*
+ * PUBLIC: int __db_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__db_init_print(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_addrem_print, DB___db_addrem)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_big_print, DB___db_big)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_ovref_print, DB___db_ovref)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_relink_print, DB___db_relink)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_noop_print, DB_db_noop)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_debug_print, DB___db_debug)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_noop_print, DB___db_noop)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_alloc_print, DB___db_pg_alloc)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_free_print, DB___db_pg_free)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_cksum_print, DB___db_cksum)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_freedata_print, DB___db_pg_freedata)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_prepare_print, DB___db_pg_prepare)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_new_print, DB___db_pg_new)) != 0)
return (ret);
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __db_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__db_init_recover(dbenv)
+__db_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __db_addrem_recover, DB_db_addrem)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_addrem_getpgnos, DB___db_addrem)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_big_getpgnos, DB___db_big)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_ovref_getpgnos, DB___db_ovref)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_relink_getpgnos, DB___db_relink)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_db_split)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_debug_getpgnos, DB___db_debug)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_big_recover, DB_db_big)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_noop_getpgnos, DB___db_noop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_ovref_recover, DB_db_ovref)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_alloc_getpgnos, DB___db_pg_alloc)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_relink_recover, DB_db_relink)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_free_getpgnos, DB___db_pg_free)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_db_addpage)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_cksum_getpgnos, DB___db_cksum)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_debug_recover, DB_db_debug)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_freedata_getpgnos, DB___db_pg_freedata)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __db_noop_recover, DB_db_noop)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_prepare_getpgnos, DB___db_pg_prepare)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_new_getpgnos, DB___db_pg_new)) != 0)
return (ret);
return (0);
}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __db_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__db_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_addrem_recover, DB___db_addrem)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_big_recover, DB___db_big)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_ovref_recover, DB___db_ovref)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_relink_recover, DB___db_relink)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_debug_recover, DB___db_debug)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_noop_recover, DB___db_noop)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_alloc_recover, DB___db_pg_alloc)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_free_recover, DB___db_pg_free)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_cksum_recover, DB___db_cksum)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_freedata_recover, DB___db_pg_freedata)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_prepare_recover, DB___db_pg_prepare)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __db_pg_new_recover, DB___db_pg_new)) != 0)
+ return (ret);
+ return (0);
+}
diff --git a/db/db/db_cam.c b/db/db/db_cam.c
index 708d4cbda..a555b5ebd 100644
--- a/db/db/db_cam.c
+++ b/db/db/db_cam.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_cam.c,v 11.52 2001/01/18 15:11:16 bostic Exp $";
+static const char revid[] = "$Id: db_cam.c,v 11.140 2003/11/18 18:20:48 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,17 +18,18 @@ static const char revid[] = "$Id: db_cam.c,v 11.52 2001/01/18 15:11:16 bostic Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "txn.h"
-#include "db_ext.h"
-
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+
+static int __db_buildpartial __P((DB *, DBT *, DBT *, DBT *));
static int __db_c_cleanup __P((DBC *, DBC *, int));
-static int __db_c_idup __P((DBC *, DBC **, u_int32_t));
+static int __db_c_del_secondary __P((DBC *));
+static int __db_c_pget_recno __P((DBC *, DBT *, DBT *, u_int32_t));
static int __db_wrlock_err __P((DB_ENV *));
#define CDB_LOCKING_INIT(dbp, dbc) \
@@ -43,9 +44,9 @@ static int __db_wrlock_err __P((DB_ENV *));
return (__db_wrlock_err(dbp->dbenv)); \
\
if (F_ISSET(dbc, DBC_WRITECURSOR) && \
- (ret = lock_get((dbp)->dbenv, (dbc)->locker, \
- DB_LOCK_UPGRADE, &(dbc)->lock_dbt, DB_LOCK_WRITE, \
- &(dbc)->mylock)) != 0) \
+ (ret = __lock_get((dbp)->dbenv, \
+ (dbc)->locker, DB_LOCK_UPGRADE, &(dbc)->lock_dbt, \
+ DB_LOCK_WRITE, &(dbc)->mylock)) != 0) \
return (ret); \
}
#define CDB_LOCKING_DONE(dbp, dbc) \
@@ -54,23 +55,8 @@ static int __db_wrlock_err __P((DB_ENV *));
(void)__lock_downgrade( \
(dbp)->dbenv, &(dbc)->mylock, DB_LOCK_IWRITE, 0);
/*
- * Copy the lock info from one cursor to another, so that locking
- * in CDB can be done in the context of an internally-duplicated
- * or off-page-duplicate cursor.
- */
-#define CDB_LOCKING_COPY(dbp, dbc_o, dbc_n) \
- if (CDB_LOCKING((dbp)->dbenv) && \
- F_ISSET((dbc_o), DBC_WRITECURSOR | DBC_WRITEDUP)) { \
- memcpy(&(dbc_n)->mylock, &(dbc_o)->mylock, \
- sizeof((dbc_o)->mylock)); \
- (dbc_n)->locker = (dbc_o)->locker; \
- /* This lock isn't ours to put--just discard it on close. */ \
- F_SET((dbc_n), DBC_WRITEDUP); \
- }
-
-/*
* __db_c_close --
- * Close the cursor.
+ * DBC->c_close.
*
* PUBLIC: int __db_c_close __P((DBC *));
*/
@@ -81,28 +67,14 @@ __db_c_close(dbc)
DB *dbp;
DBC *opd;
DBC_INTERNAL *cp;
+ DB_ENV *dbenv;
int ret, t_ret;
dbp = dbc->dbp;
- ret = 0;
-
- PANIC_CHECK(dbp->dbenv);
-
- /*
- * If the cursor is already closed we have a serious problem, and we
- * assume that the cursor isn't on the active queue. Don't do any of
- * the remaining cursor close processing.
- */
- if (!F_ISSET(dbc, DBC_ACTIVE)) {
- if (dbp != NULL)
- __db_err(dbp->dbenv, "Closing closed cursor");
-
- DB_ASSERT(0);
- return (EINVAL);
- }
-
+ dbenv = dbp->dbenv;
cp = dbc->internal;
opd = cp->opd;
+ ret = 0;
/*
* Remove the cursor(s) from the active queue. We may be closing two
@@ -113,11 +85,9 @@ __db_c_close(dbc)
* !!!
* Cursors must be removed from the active queue before calling the
* access specific cursor close routine, btree depends on having that
- * order of operations. It must also happen before any action that
- * can fail and cause __db_c_close to return an error, or else calls
- * here from __db_close may loop indefinitely.
+ * order of operations.
*/
- MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
if (opd != NULL) {
F_CLR(opd, DBC_ACTIVE);
@@ -126,7 +96,7 @@ __db_c_close(dbc)
F_CLR(dbc, DBC_ACTIVE);
TAILQ_REMOVE(&dbp->active_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
/* Call the access specific cursor close routine. */
if ((t_ret =
@@ -137,29 +107,30 @@ __db_c_close(dbc)
* Release the lock after calling the access method specific close
* routine, a Btree cursor may have had pending deletes.
*/
- if (CDB_LOCKING(dbc->dbp->dbenv)) {
+ if (CDB_LOCKING(dbenv)) {
/*
- * If DBC_WRITEDUP is set, the cursor is an internally
- * duplicated write cursor and the lock isn't ours to put.
+ * Also, be sure not to free anything if mylock.off is
+ * INVALID; in some cases, such as idup'ed read cursors
+ * and secondary update cursors, a cursor in a CDB
+ * environment may not have a lock at all.
*/
- if (!F_ISSET(dbc, DBC_WRITEDUP) &&
- dbc->mylock.off != LOCK_INVALID) {
- if ((t_ret = lock_put(dbc->dbp->dbenv,
- &dbc->mylock)) != 0 && ret == 0)
+ if (LOCK_ISSET(dbc->mylock)) {
+ if ((t_ret = __lock_put(
+ dbenv, &dbc->mylock)) != 0 && ret == 0)
ret = t_ret;
- dbc->mylock.off = LOCK_INVALID;
}
/* For safety's sake, since this is going on the free queue. */
memset(&dbc->mylock, 0, sizeof(dbc->mylock));
- F_CLR(dbc, DBC_WRITEDUP);
+ if (opd != NULL)
+ memset(&opd->mylock, 0, sizeof(opd->mylock));
}
if (dbc->txn != NULL)
dbc->txn->cursors--;
/* Move the cursor(s) to the free queue. */
- MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
if (opd != NULL) {
if (dbc->txn != NULL)
dbc->txn->cursors--;
@@ -167,7 +138,7 @@ __db_c_close(dbc)
opd = NULL;
}
TAILQ_INSERT_TAIL(&dbp->free_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
return (ret);
}
@@ -183,27 +154,37 @@ __db_c_destroy(dbc)
DBC *dbc;
{
DB *dbp;
- DBC_INTERNAL *cp;
- int ret;
+ DB_ENV *dbenv;
+ int ret, t_ret;
dbp = dbc->dbp;
- cp = dbc->internal;
+ dbenv = dbp->dbenv;
/* Remove the cursor from the free queue. */
- MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
/* Free up allocated memory. */
- if (dbc->rkey.data != NULL)
- __os_free(dbc->rkey.data, dbc->rkey.ulen);
- if (dbc->rdata.data != NULL)
- __os_free(dbc->rdata.data, dbc->rdata.ulen);
+ if (dbc->my_rskey.data != NULL)
+ __os_free(dbenv, dbc->my_rskey.data);
+ if (dbc->my_rkey.data != NULL)
+ __os_free(dbenv, dbc->my_rkey.data);
+ if (dbc->my_rdata.data != NULL)
+ __os_free(dbenv, dbc->my_rdata.data);
/* Call the access specific cursor destroy routine. */
ret = dbc->c_am_destroy == NULL ? 0 : dbc->c_am_destroy(dbc);
- __os_free(dbc, sizeof(*dbc));
+ /*
+ * Release the lock id for this cursor.
+ */
+ if (LOCKING_ON(dbenv) &&
+ F_ISSET(dbc, DBC_OWN_LID) &&
+ (t_ret = __lock_id_free(dbenv, dbc->lid)) != 0 && ret == 0)
+ ret = t_ret;
+
+ __os_free(dbenv, dbc);
return (ret);
}
@@ -212,17 +193,18 @@ __db_c_destroy(dbc)
* __db_c_count --
* Return a count of duplicate data items.
*
- * PUBLIC: int __db_c_count __P((DBC *, db_recno_t *, u_int32_t));
+ * PUBLIC: int __db_c_count __P((DBC *, db_recno_t *));
*/
int
-__db_c_count(dbc, recnop, flags)
+__db_c_count(dbc, recnop)
DBC *dbc;
db_recno_t *recnop;
- u_int32_t flags;
{
- DB *dbp;
+ DB_ENV *dbenv;
int ret;
+ dbenv = dbc->dbp->dbenv;
+
/*
* Cursor Cleanup Note:
* All of the cursors passed to the underlying access methods by this
@@ -230,14 +212,6 @@ __db_c_count(dbc, recnop, flags)
* So, pages/locks that the cursor references must be resolved by the
* underlying functions.
*/
- dbp = dbc->dbp;
-
- PANIC_CHECK(dbp->dbenv);
-
- /* Check for invalid flags. */
- if ((ret = __db_ccountchk(dbp, flags, IS_INITIALIZED(dbc))) != 0)
- return (ret);
-
switch (dbc->dbtype) {
case DB_QUEUE:
case DB_RECNO:
@@ -254,16 +228,16 @@ __db_c_count(dbc, recnop, flags)
if ((ret = __bam_c_count(dbc, recnop)) != 0)
return (ret);
break;
+ case DB_UNKNOWN:
default:
- return (__db_unknown_type(dbp->dbenv,
- "__db_c_count", dbp->type));
+ return (__db_unknown_type(dbenv, "__db_c_count", dbc->dbtype));
}
return (0);
}
/*
* __db_c_del --
- * Delete using a cursor.
+ * DBC->c_del.
*
* PUBLIC: int __db_c_del __P((DBC *, u_int32_t));
*/
@@ -276,6 +250,8 @@ __db_c_del(dbc, flags)
DBC *opd;
int ret;
+ dbp = dbc->dbp;
+
/*
* Cursor Cleanup Note:
* All of the cursors passed to the underlying access methods by this
@@ -283,19 +259,29 @@ __db_c_del(dbc, flags)
* So, pages/locks that the cursor references must be resolved by the
* underlying functions.
*/
- dbp = dbc->dbp;
- PANIC_CHECK(dbp->dbenv);
- DB_CHECK_TXN(dbp, dbc->txn);
-
- /* Check for invalid flags. */
- if ((ret = __db_cdelchk(dbp, flags,
- F_ISSET(dbp, DB_AM_RDONLY), IS_INITIALIZED(dbc))) != 0)
- return (ret);
+ CDB_LOCKING_INIT(dbp, dbc);
- DEBUG_LWRITE(dbc, dbc->txn, "db_c_del", NULL, NULL, flags);
+ /*
+ * If we're a secondary index, and DB_UPDATE_SECONDARY isn't set
+ * (which it only is if we're being called from a primary update),
+ * then we need to call through to the primary and delete the item.
+ *
+ * Note that this will delete the current item; we don't need to
+ * delete it ourselves as well, so we can just goto done.
+ */
+ if (flags != DB_UPDATE_SECONDARY && F_ISSET(dbp, DB_AM_SECONDARY)) {
+ ret = __db_c_del_secondary(dbc);
+ goto done;
+ }
- CDB_LOCKING_INIT(dbp, dbc);
+ /*
+ * If we are a primary and have secondary indices, go through
+ * and delete any secondary keys that point at the current record.
+ */
+ if (LIST_FIRST(&dbp->s_secondaries) != NULL &&
+ (ret = __db_c_del_primary(dbc)) != 0)
+ goto done;
/*
* Off-page duplicate trees are locked in the primary tree, that is,
@@ -310,7 +296,7 @@ __db_c_del(dbc, flags)
if ((ret = dbc->c_am_writelock(dbc)) == 0)
ret = opd->c_am_del(opd);
- CDB_LOCKING_DONE(dbp, dbc);
+done: CDB_LOCKING_DONE(dbp, dbc);
return (ret);
}
@@ -327,49 +313,17 @@ __db_c_dup(dbc_orig, dbcp, flags)
DBC **dbcp;
u_int32_t flags;
{
- DB_ENV *dbenv;
- DB *dbp;
DBC *dbc_n, *dbc_nopd;
int ret;
- dbp = dbc_orig->dbp;
- dbenv = dbp->dbenv;
dbc_n = dbc_nopd = NULL;
- PANIC_CHECK(dbp->dbenv);
-
- /*
- * We can never have two write cursors open in CDB, so do not
- * allow duplication of a write cursor.
- */
- if (flags != DB_POSITIONI &&
- F_ISSET(dbc_orig, DBC_WRITER | DBC_WRITECURSOR)) {
- __db_err(dbenv, "Cannot duplicate writeable cursor");
- return (EINVAL);
- }
-
/* Allocate a new cursor and initialize it. */
if ((ret = __db_c_idup(dbc_orig, &dbc_n, flags)) != 0)
goto err;
*dbcp = dbc_n;
/*
- * If we're in CDB, and this isn't an internal duplication (in which
- * case we're explicitly overriding CDB locking), the duplicated
- * cursor needs its own read lock. (We know it's not a write cursor
- * because we wouldn't have made it this far; you can't dup them.)
- */
- if (CDB_LOCKING(dbenv) && flags != DB_POSITIONI) {
- DB_ASSERT(!F_ISSET(dbc_orig, DBC_WRITER | DBC_WRITECURSOR));
-
- if ((ret = lock_get(dbenv, dbc_n->locker, 0,
- &dbc_n->lock_dbt, DB_LOCK_READ, &dbc_n->mylock)) != 0) {
- (void)__db_c_close(dbc_n);
- return (ret);
- }
- }
-
- /*
* If the cursor references an off-page duplicate tree, allocate a
* new cursor for that tree and initialize it.
*/
@@ -379,13 +333,12 @@ __db_c_dup(dbc_orig, dbcp, flags)
goto err;
dbc_n->internal->opd = dbc_nopd;
}
-
return (0);
err: if (dbc_n != NULL)
- (void)dbc_n->c_close(dbc_n);
+ (void)__db_c_close(dbc_n);
if (dbc_nopd != NULL)
- (void)dbc_nopd->c_close(dbc_nopd);
+ (void)__db_c_close(dbc_nopd);
return (ret);
}
@@ -393,8 +346,10 @@ err: if (dbc_n != NULL)
/*
* __db_c_idup --
* Internal version of __db_c_dup.
+ *
+ * PUBLIC: int __db_c_idup __P((DBC *, DBC **, u_int32_t));
*/
-static int
+int
__db_c_idup(dbc_orig, dbcp, flags)
DBC *dbc_orig, **dbcp;
u_int32_t flags;
@@ -407,18 +362,17 @@ __db_c_idup(dbc_orig, dbcp, flags)
dbp = dbc_orig->dbp;
dbc_n = *dbcp;
- if ((ret = __db_icursor(dbp, dbc_orig->txn, dbc_orig->dbtype,
- dbc_orig->internal->root, F_ISSET(dbc_orig, DBC_OPD), &dbc_n)) != 0)
+ if ((ret = __db_cursor_int(dbp, dbc_orig->txn, dbc_orig->dbtype,
+ dbc_orig->internal->root, F_ISSET(dbc_orig, DBC_OPD),
+ dbc_orig->locker, &dbc_n)) != 0)
return (ret);
- dbc_n->locker = dbc_orig->locker;
-
/* If the user wants the cursor positioned, do it here. */
- if (flags == DB_POSITION || flags == DB_POSITIONI) {
+ if (flags == DB_POSITION) {
int_n = dbc_n->internal;
int_orig = dbc_orig->internal;
- dbc_n->flags = dbc_orig->flags;
+ dbc_n->flags |= dbc_orig->flags & ~DBC_OWN_LID;
int_n->indx = int_orig->indx;
int_n->pgno = int_orig->pgno;
@@ -439,6 +393,7 @@ __db_c_idup(dbc_orig, dbcp, flags)
if ((ret = __ham_c_dup(dbc_orig, dbc_n)) != 0)
goto err;
break;
+ case DB_UNKNOWN:
default:
ret = __db_unknown_type(dbp->dbenv,
"__db_c_idup", dbc_orig->dbtype);
@@ -446,13 +401,24 @@ __db_c_idup(dbc_orig, dbcp, flags)
}
}
- /* Now take care of duping the CDB information. */
- CDB_LOCKING_COPY(dbp, dbc_orig, dbc_n);
+ /* Copy the dirty read flag to the new cursor. */
+ F_SET(dbc_n, F_ISSET(dbc_orig, DBC_DIRTY_READ));
+ F_SET(dbc_n, F_ISSET(dbc_orig, DBC_WRITECURSOR));
+
+ /*
+ * If we're in CDB and this isn't an offpage dup cursor, then
+ * we need to get a lock for the duplicated cursor.
+ */
+ if (CDB_LOCKING(dbp->dbenv) && !F_ISSET(dbc_n, DBC_OPD) &&
+ (ret = __lock_get(dbp->dbenv, dbc_n->locker, 0,
+ &dbc_n->lock_dbt, F_ISSET(dbc_orig, DBC_WRITECURSOR) ?
+ DB_LOCK_IWRITE : DB_LOCK_READ, &dbc_n->mylock)) != 0)
+ goto err;
*dbcp = dbc_n;
return (0);
-err: (void)dbc_n->c_close(dbc_n);
+err: (void)__db_c_close(dbc_n);
return (ret);
}
@@ -460,12 +426,13 @@ err: (void)dbc_n->c_close(dbc_n);
* __db_c_newopd --
* Create a new off-page duplicate cursor.
*
- * PUBLIC: int __db_c_newopd __P((DBC *, db_pgno_t, DBC **));
+ * PUBLIC: int __db_c_newopd __P((DBC *, db_pgno_t, DBC *, DBC **));
*/
int
-__db_c_newopd(dbc_parent, root, dbcp)
+__db_c_newopd(dbc_parent, root, oldopd, dbcp)
DBC *dbc_parent;
db_pgno_t root;
+ DBC *oldopd;
DBC **dbcp;
{
DB *dbp;
@@ -476,14 +443,36 @@ __db_c_newopd(dbc_parent, root, dbcp)
dbp = dbc_parent->dbp;
dbtype = (dbp->dup_compare == NULL) ? DB_RECNO : DB_BTREE;
- if ((ret = __db_icursor(dbp,
- dbc_parent->txn, dbtype, root, 1, &opd)) != 0)
- return (ret);
+ /*
+ * On failure, we want to default to returning the old off-page dup
+ * cursor, if any; our caller can't be left with a dangling pointer
+ * to a freed cursor. On error the only allowable behavior is to
+ * close the cursor (and the old OPD cursor it in turn points to), so
+ * this should be safe.
+ */
+ *dbcp = oldopd;
- CDB_LOCKING_COPY(dbp, dbc_parent, opd);
+ if ((ret = __db_cursor_int(dbp,
+ dbc_parent->txn, dbtype, root, 1, dbc_parent->locker, &opd)) != 0)
+ return (ret);
*dbcp = opd;
+ /*
+ * Check to see if we already have an off-page dup cursor that we've
+ * passed in. If we do, close it. It'd be nice to use it again
+ * if it's a cursor belonging to the right tree, but if we're doing
+ * a cursor-relative operation this might not be safe, so for now
+ * we'll take the easy way out and always close and reopen.
+ *
+ * Note that under no circumstances do we want to close the old
+ * cursor without returning a valid new one; we don't want to
+ * leave the main cursor in our caller with a non-NULL pointer
+ * to a freed off-page dup cursor.
+ */
+ if (oldopd != NULL && (ret = __db_c_close(oldopd)) != 0)
+ return (ret);
+
return (0);
}
@@ -502,8 +491,9 @@ __db_c_get(dbc_arg, key, data, flags)
DB *dbp;
DBC *dbc, *dbc_n, *opd;
DBC_INTERNAL *cp, *cp_n;
+ DB_MPOOLFILE *mpf;
db_pgno_t pgno;
- u_int32_t tmp_flags, tmp_rmw;
+ u_int32_t multi, tmp_dirty, tmp_flags, tmp_rmw;
u_int8_t type;
int ret, t_ret;
@@ -517,29 +507,36 @@ __db_c_get(dbc_arg, key, data, flags)
* functions.
*/
dbp = dbc_arg->dbp;
+ mpf = dbp->mpf;
dbc_n = NULL;
opd = NULL;
- PANIC_CHECK(dbp->dbenv);
-
- /* Check for invalid flags. */
- if ((ret =
- __db_cgetchk(dbp, key, data, flags, IS_INITIALIZED(dbc_arg))) != 0)
- return (ret);
-
/* Clear OR'd in additional bits so we can check for flag equality. */
tmp_rmw = LF_ISSET(DB_RMW);
LF_CLR(DB_RMW);
- DEBUG_LREAD(dbc_arg, dbc_arg->txn, "db_c_get",
- flags == DB_SET || flags == DB_SET_RANGE ? key : NULL, NULL, flags);
+ tmp_dirty = LF_ISSET(DB_DIRTY_READ);
+ LF_CLR(DB_DIRTY_READ);
+
+ multi = LF_ISSET(DB_MULTIPLE|DB_MULTIPLE_KEY);
+ LF_CLR(DB_MULTIPLE|DB_MULTIPLE_KEY);
/*
* Return a cursor's record number. It has nothing to do with the
* cursor get code except that it was put into the interface.
*/
- if (flags == DB_GET_RECNO)
- return (__bam_c_rget(dbc_arg, data, flags | tmp_rmw));
+ if (flags == DB_GET_RECNO) {
+ if (tmp_rmw)
+ F_SET(dbc_arg, DBC_RMW);
+ if (tmp_dirty)
+ F_SET(dbc_arg, DBC_DIRTY_READ);
+ ret = __bam_c_rget(dbc_arg, data);
+ if (tmp_rmw)
+ F_CLR(dbc_arg, DBC_RMW);
+ if (tmp_dirty)
+ F_CLR(dbc_arg, DBC_DIRTY_READ);
+ return (ret);
+ }
if (flags == DB_CONSUME || flags == DB_CONSUME_WAIT)
CDB_LOCKING_INIT(dbp, dbc_arg);
@@ -561,11 +558,11 @@ __db_c_get(dbc_arg, key, data, flags)
flags == DB_NEXT || flags == DB_NEXT_DUP || flags == DB_PREV)) {
if (tmp_rmw && (ret = dbc_arg->c_am_writelock(dbc_arg)) != 0)
return (ret);
- if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITIONI)) != 0)
+ if ((ret = __db_c_idup(cp->opd, &opd, DB_POSITION)) != 0)
return (ret);
- switch (ret = opd->c_am_get(
- opd, key, data, flags, NULL)) {
+ switch (ret =
+ opd->c_am_get(opd, key, data, flags, NULL)) {
case 0:
goto done;
case DB_NOTFOUND:
@@ -575,7 +572,7 @@ __db_c_get(dbc_arg, key, data, flags)
* the parent cursor.
*/
if (flags == DB_NEXT || flags == DB_PREV) {
- if ((ret = opd->c_close(opd)) != 0)
+ if ((ret = __db_c_close(opd)) != 0)
goto err;
opd = NULL;
break;
@@ -598,28 +595,57 @@ __db_c_get(dbc_arg, key, data, flags)
case DB_NEXT_NODUP:
case DB_PREV:
case DB_PREV_NODUP:
- tmp_flags = DB_POSITIONI;
+ tmp_flags = DB_POSITION;
break;
default:
tmp_flags = 0;
break;
}
+ if (tmp_dirty)
+ F_SET(dbc_arg, DBC_DIRTY_READ);
+
/*
* If this cursor is going to be closed immediately, we don't
* need to take precautions to clean it up on error.
*/
if (F_ISSET(dbc_arg, DBC_TRANSIENT))
dbc_n = dbc_arg;
- else if ((ret = __db_c_idup(dbc_arg, &dbc_n, tmp_flags)) != 0)
- goto err;
+ else {
+ ret = __db_c_idup(dbc_arg, &dbc_n, tmp_flags);
+ if (tmp_dirty)
+ F_CLR(dbc_arg, DBC_DIRTY_READ);
+
+ if (ret != 0)
+ goto err;
+ COPY_RET_MEM(dbc_arg, dbc_n);
+ }
if (tmp_rmw)
F_SET(dbc_n, DBC_RMW);
+
+ switch (multi) {
+ case DB_MULTIPLE:
+ F_SET(dbc_n, DBC_MULTIPLE);
+ break;
+ case DB_MULTIPLE_KEY:
+ F_SET(dbc_n, DBC_MULTIPLE_KEY);
+ break;
+ case DB_MULTIPLE | DB_MULTIPLE_KEY:
+ F_SET(dbc_n, DBC_MULTIPLE|DBC_MULTIPLE_KEY);
+ break;
+ case 0:
+ default:
+ break;
+ }
+
pgno = PGNO_INVALID;
ret = dbc_n->c_am_get(dbc_n, key, data, flags, &pgno);
if (tmp_rmw)
F_CLR(dbc_n, DBC_RMW);
+ if (tmp_dirty)
+ F_CLR(dbc_arg, DBC_DIRTY_READ);
+ F_CLR(dbc_n, DBC_MULTIPLE|DBC_MULTIPLE_KEY);
if (ret != 0)
goto err;
@@ -630,7 +656,8 @@ __db_c_get(dbc_arg, key, data, flags)
* a new cursor and call the underlying function.
*/
if (pgno != PGNO_INVALID) {
- if ((ret = __db_c_newopd(dbc_arg, pgno, &cp_n->opd)) != 0)
+ if ((ret = __db_c_newopd(dbc_arg,
+ pgno, cp_n->opd, &cp_n->opd)) != 0)
goto err;
switch (flags) {
@@ -648,10 +675,9 @@ __db_c_get(dbc_arg, key, data, flags)
tmp_flags = DB_LAST;
break;
case DB_GET_BOTH:
- tmp_flags = DB_GET_BOTH;
- break;
case DB_GET_BOTHC:
- tmp_flags = DB_GET_BOTHC;
+ case DB_GET_BOTH_RANGE:
+ tmp_flags = flags;
break;
default:
ret =
@@ -680,19 +706,66 @@ done: /*
cp_n = dbc_n == NULL ? dbc_arg->internal : dbc_n->internal;
if (!F_ISSET(key, DB_DBT_ISSET)) {
if (cp_n->page == NULL && (ret =
- memp_fget(dbp->mpf, &cp_n->pgno, 0, &cp_n->page)) != 0)
+ __memp_fget(mpf, &cp_n->pgno, 0, &cp_n->page)) != 0)
goto err;
if ((ret = __db_ret(dbp, cp_n->page, cp_n->indx,
- key, &dbc_arg->rkey.data, &dbc_arg->rkey.ulen)) != 0)
+ key, &dbc_arg->rkey->data, &dbc_arg->rkey->ulen)) != 0)
goto err;
}
- dbc = opd != NULL ? opd : cp_n->opd != NULL ? cp_n->opd : dbc_n;
- if (!F_ISSET(data, DB_DBT_ISSET)) {
+ if (multi != 0) {
+ /*
+ * Even if fetching from the OPD cursor we need a duplicate
+ * primary cursor if we are going after multiple keys.
+ */
+ if (dbc_n == NULL) {
+ /*
+ * Non-"_KEY" DB_MULTIPLE doesn't move the main cursor,
+ * so it's safe to just use dbc_arg, unless dbc_arg
+ * has an open OPD cursor whose state might need to
+ * be preserved.
+ */
+ if ((!(multi & DB_MULTIPLE_KEY) &&
+ dbc_arg->internal->opd == NULL) ||
+ F_ISSET(dbc_arg, DBC_TRANSIENT))
+ dbc_n = dbc_arg;
+ else {
+ if ((ret = __db_c_idup(dbc_arg,
+ &dbc_n, DB_POSITION)) != 0)
+ goto err;
+ if ((ret = dbc_n->c_am_get(dbc_n,
+ key, data, DB_CURRENT, &pgno)) != 0)
+ goto err;
+ }
+ cp_n = dbc_n->internal;
+ }
+
+ /*
+ * If opd is set then we dupped the opd that we came in with.
+ * When we return we may have a new opd if we went to another
+ * key.
+ */
+ if (opd != NULL) {
+ DB_ASSERT(cp_n->opd == NULL);
+ cp_n->opd = opd;
+ opd = NULL;
+ }
+
+ /*
+ * Bulk get doesn't use __db_retcopy, so data.size won't
+ * get set up unless there is an error. Assume success
+ * here. This is the only call to c_am_bulk, and it avoids
+ * setting it exactly the same everywhere. If we have an
+ * ENOMEM error, it'll get overwritten with the needed value.
+ */
+ data->size = data->ulen;
+ ret = dbc_n->c_am_bulk(dbc_n, data, flags | multi);
+ } else if (!F_ISSET(data, DB_DBT_ISSET)) {
+ dbc = opd != NULL ? opd : cp_n->opd != NULL ? cp_n->opd : dbc_n;
type = TYPE(dbc->internal->page);
ret = __db_ret(dbp, dbc->internal->page, dbc->internal->indx +
(type == P_LBTREE || type == P_HASH ? O_INDX : 0),
- data, &dbc_arg->rdata.data, &dbc_arg->rdata.ulen);
+ data, &dbc_arg->rdata->data, &dbc_arg->rdata->ulen);
}
err: /* Don't pass DB_DBT_ISSET back to application level, error or no. */
@@ -701,9 +774,8 @@ err: /* Don't pass DB_DBT_ISSET back to application level, error or no. */
/* Cleanup and cursor resolution. */
if (opd != NULL) {
- if ((t_ret =
- __db_c_cleanup(dbc_arg->internal->opd,
- opd, ret)) != 0 && ret == 0)
+ if ((t_ret = __db_c_cleanup(
+ dbc_arg->internal->opd, opd, ret)) != 0 && ret == 0)
ret = t_ret;
}
@@ -728,11 +800,13 @@ __db_c_put(dbc_arg, key, data, flags)
DBT *key, *data;
u_int32_t flags;
{
- DB *dbp;
- DBC *dbc_n, *opd;
+ DB_ENV *dbenv;
+ DB *dbp, *sdbp;
+ DBC *dbc_n, *oldopd, *opd, *sdbc, *pdbc;
+ DBT olddata, oldpkey, oldskey, newdata, pkey, skey, temppkey, tempskey;
db_pgno_t pgno;
- u_int32_t tmp_flags;
- int ret, t_ret;
+ int cmp, have_oldrec, ispartial, nodel, re_pad, ret, rmw, t_ret;
+ u_int32_t re_len, size, tmp_flags;
/*
* Cursor Cleanup Note:
@@ -744,23 +818,468 @@ __db_c_put(dbc_arg, key, data, flags)
* functions.
*/
dbp = dbc_arg->dbp;
- dbc_n = NULL;
-
- PANIC_CHECK(dbp->dbenv);
- DB_CHECK_TXN(dbp, dbc_arg->txn);
+ dbenv = dbp->dbenv;
+ sdbp = NULL;
+ pdbc = dbc_n = NULL;
+ memset(&newdata, 0, sizeof(DBT));
+ ret = 0;
- /* Check for invalid flags. */
- if ((ret = __db_cputchk(dbp, key, data, flags,
- F_ISSET(dbp, DB_AM_RDONLY), IS_INITIALIZED(dbc_arg))) != 0)
- return (ret);
+ /*
+ * We do multiple cursor operations in some cases and subsequently
+ * access the data DBT information. Set DB_DBT_MALLOC so we don't risk
+ * modification of the data between our uses of it.
+ */
+ memset(&olddata, 0, sizeof(DBT));
+ F_SET(&olddata, DB_DBT_MALLOC);
- DEBUG_LWRITE(dbc_arg, dbc_arg->txn, "db_c_put",
- flags == DB_KEYFIRST || flags == DB_KEYLAST ||
- flags == DB_NODUPDATA ? key : NULL, data, flags);
+ /*
+ * Putting to secondary indices is forbidden; when we need
+ * to internally update one, we'll call this with a private
+ * synonym for DB_KEYLAST, DB_UPDATE_SECONDARY, which does
+ * the right thing but won't return an error from cputchk().
+ */
+ if (flags == DB_UPDATE_SECONDARY)
+ flags = DB_KEYLAST;
CDB_LOCKING_INIT(dbp, dbc_arg);
/*
+ * Check to see if we are a primary and have secondary indices.
+ * If we are not, we save ourselves a good bit of trouble and
+ * just skip to the "normal" put.
+ */
+ if (LIST_FIRST(&dbp->s_secondaries) == NULL)
+ goto skip_s_update;
+
+ /*
+ * We have at least one secondary which we may need to update.
+ *
+ * There is a rather vile locking issue here. Secondary gets
+ * will always involve acquiring a read lock in the secondary,
+ * then acquiring a read lock in the primary. Ideally, we
+ * would likewise perform puts by updating all the secondaries
+ * first, then doing the actual put in the primary, to avoid
+ * deadlock (since having multiple threads doing secondary
+ * gets and puts simultaneously is probably a common case).
+ *
+ * However, if this put is a put-overwrite--and we have no way to
+ * tell in advance whether it will be--we may need to delete
+ * an outdated secondary key. In order to find that old
+ * secondary key, we need to get the record we're overwriting,
+ * before we overwrite it.
+ *
+ * (XXX: It would be nice to avoid this extra get, and have the
+ * underlying put routines somehow pass us the old record
+ * since they need to traverse the tree anyway. I'm saving
+ * this optimization for later, as it's a lot of work, and it
+ * would be hard to fit into this locking paradigm anyway.)
+ *
+ * The simple thing to do would be to go get the old record before
+ * we do anything else. Unfortunately, though, doing so would
+ * violate our "secondary, then primary" lock acquisition
+ * ordering--even in the common case where no old primary record
+ * exists, we'll still acquire and keep a lock on the page where
+ * we're about to do the primary insert.
+ *
+ * To get around this, we do the following gyrations, which
+ * hopefully solve this problem in the common case:
+ *
+ * 1) If this is a c_put(DB_CURRENT), go ahead and get the
+ * old record. We already hold the lock on this page in
+ * the primary, so no harm done, and we'll need the primary
+ * key (which we weren't passed in this case) to do any
+ * secondary puts anyway.
+ *
+ * 2) If we're doing a partial put, we need to perform the
+ * get on the primary key right away, since we don't have
+ * the whole datum that the secondary key is based on.
+ * We may also need to pad out the record if the primary
+ * has a fixed record length.
+ *
+ * 3) Loop through the secondary indices, putting into each a
+ * new secondary key that corresponds to the new record.
+ *
+ * 4) If we haven't done so in (1) or (2), get the old primary
+ * key/data pair. If one does not exist--the common case--we're
+ * done with secondary indices, and can go straight on to the
+ * primary put.
+ *
+ * 5) If we do have an old primary key/data pair, however, we need
+ * to loop through all the secondaries a second time and delete
+ * the old secondary in each.
+ */
+ memset(&pkey, 0, sizeof(DBT));
+ have_oldrec = nodel = 0;
+
+ /*
+ * Primary indices can't have duplicates, so only DB_CURRENT,
+ * DB_KEYFIRST, and DB_KEYLAST make any sense. Other flags
+ * should have been caught by the checking routine, but
+ * add a sprinkling of paranoia.
+ */
+ DB_ASSERT(flags == DB_CURRENT ||
+ flags == DB_KEYFIRST || flags == DB_KEYLAST);
+
+ /*
+ * We'll want to use DB_RMW in a few places, but it's only legal
+ * when locking is on.
+ */
+ rmw = STD_LOCKING(dbc_arg) ? DB_RMW : 0;
+
+ /*
+ * Set pkey so we can use &pkey everywhere instead of key.
+ * If DB_CURRENT is set and there is a key at the current
+ * location, pkey will be overwritten before it's used.
+ */
+ pkey.data = key->data;
+ pkey.size = key->size;
+
+ if (flags == DB_CURRENT) { /* Step 1. */
+ /*
+ * This is safe to do on the cursor we already have;
+ * error or no, it won't move.
+ *
+ * We use DB_RMW for all of these gets because we'll be
+ * writing soon enough in the "normal" put code. In
+ * transactional databases we'll hold those write locks
+ * even if we close the cursor we're reading with.
+ */
+ ret = __db_c_get(dbc_arg, &pkey, &olddata, rmw | DB_CURRENT);
+ if (ret == DB_KEYEMPTY) {
+ nodel = 1; /*
+ * We know we don't need a delete
+ * in the secondary.
+ */
+ have_oldrec = 1; /* We've looked for the old record. */
+ ret = 0;
+ } else if (ret != 0)
+ goto err;
+ else
+ have_oldrec = 1;
+ }
+
+ /*
+ * Check for partial puts (step 2).
+ */
+ if (F_ISSET(data, DB_DBT_PARTIAL)) {
+ if (!have_oldrec && !nodel) {
+ /*
+ * We're going to have to search the tree for the
+ * specified key. Dup a cursor (so we have the same
+ * locking info) and do a c_get.
+ */
+ if ((ret = __db_c_idup(dbc_arg, &pdbc, 0)) != 0)
+ goto err;
+
+ /* We should have gotten DB_CURRENT in step 1. */
+ DB_ASSERT(flags != DB_CURRENT);
+
+ ret = __db_c_get(pdbc, &pkey, &olddata, rmw | DB_SET);
+ if (ret == DB_KEYEMPTY || ret == DB_NOTFOUND) {
+ nodel = 1;
+ ret = 0;
+ }
+ if ((t_ret = __db_c_close(pdbc)) != 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto err;
+
+ have_oldrec = 1;
+ }
+
+ /*
+ * Now build the new datum from olddata and the partial
+ * data we were given.
+ */
+ if ((ret =
+ __db_buildpartial(dbp, &olddata, data, &newdata)) != 0)
+ goto err;
+ ispartial = 1;
+ } else
+ ispartial = 0;
+
+ /*
+ * Handle fixed-length records. If the primary database has
+ * fixed-length records, we need to pad out the datum before
+ * we pass it into the callback function; we always index the
+ * "real" record.
+ */
+ if ((dbp->type == DB_RECNO && F_ISSET(dbp, DB_AM_FIXEDLEN)) ||
+ (dbp->type == DB_QUEUE)) {
+ if (dbp->type == DB_QUEUE) {
+ re_len = ((QUEUE *)dbp->q_internal)->re_len;
+ re_pad = ((QUEUE *)dbp->q_internal)->re_pad;
+ } else {
+ re_len = ((BTREE *)dbp->bt_internal)->re_len;
+ re_pad = ((BTREE *)dbp->bt_internal)->re_pad;
+ }
+
+ size = ispartial ? newdata.size : data->size;
+ if (size > re_len) {
+ ret = __db_rec_toobig(dbenv, size, re_len);
+ goto err;
+ } else if (size < re_len) {
+ /*
+ * If we're not doing a partial put, copy
+ * data->data into newdata.data, then pad out
+ * newdata.data.
+ *
+ * If we're doing a partial put, the data
+ * we want are already in newdata.data; we
+ * just need to pad.
+ *
+ * Either way, realloc is safe.
+ */
+ if ((ret =
+ __os_realloc(dbenv, re_len, &newdata.data)) != 0)
+ goto err;
+ if (!ispartial)
+ memcpy(newdata.data, data->data, size);
+ memset((u_int8_t *)newdata.data + size, re_pad,
+ re_len - size);
+ newdata.size = re_len;
+ ispartial = 1;
+ }
+ }
+
+ /*
+ * Loop through the secondaries. (Step 3.)
+ *
+ * Note that __db_s_first and __db_s_next will take care of
+ * thread-locking and refcounting issues.
+ */
+ for (sdbp = __db_s_first(dbp);
+ sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp)) {
+ /*
+ * Call the callback for this secondary, to get the
+ * appropriate secondary key.
+ */
+ memset(&skey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp,
+ &pkey, ispartial ? &newdata : data, &skey)) != 0) {
+ if (ret == DB_DONOTINDEX)
+ /*
+ * The callback returned a null value--don't
+ * put this key in the secondary. Just
+ * move on to the next one--we'll handle
+ * any necessary deletes in step 5.
+ */
+ continue;
+ else
+ goto err;
+ }
+
+ /*
+ * Open a cursor in this secondary.
+ *
+ * Use the same locker ID as our primary cursor, so that
+ * we're guaranteed that the locks don't conflict (e.g. in CDB
+ * or if we're subdatabases that share and want to lock a
+ * metadata page).
+ */
+ if ((ret = __db_cursor_int(sdbp, dbc_arg->txn, sdbp->type,
+ PGNO_INVALID, 0, dbc_arg->locker, &sdbc)) != 0)
+ goto err;
+
+ /*
+ * If we're in CDB, updates will fail since the new cursor
+ * isn't a writer. However, we hold the WRITE lock in the
+ * primary and will for as long as our new cursor lasts,
+ * and the primary and secondary share a lock file ID,
+ * so it's safe to consider this a WRITER. The close
+ * routine won't try to put anything because we don't
+ * really have a lock.
+ */
+ if (CDB_LOCKING(dbenv)) {
+ DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ F_SET(sdbc, DBC_WRITER);
+ }
+
+ /*
+ * There are three cases here--
+ * 1) The secondary supports sorted duplicates.
+ * If we attempt to put a secondary/primary pair
+ * that already exists, that's a duplicate duplicate,
+ * and c_put will return DB_KEYEXIST (see __db_duperr).
+ * This will leave us with exactly one copy of the
+ * secondary/primary pair, and this is just right--we'll
+ * avoid deleting it later, as the old and new secondaries
+ * will match (since the old secondary is the dup dup
+ * that's already there).
+ * 2) The secondary supports duplicates, but they're not
+ * sorted. We need to avoid putting a duplicate
+ * duplicate, because the matching old and new secondaries
+ * will prevent us from deleting anything and we'll
+ * wind up with two secondary records that point to the
+ * same primary key. Do a c_get(DB_GET_BOTH); only
+ * do the put if the secondary doesn't exist.
+ * 3) The secondary doesn't support duplicates at all.
+ * In this case, secondary keys must be unique; if
+ * another primary key already exists for this
+ * secondary key, we have to either overwrite it or
+ * not put this one, and in either case we've
+ * corrupted the secondary index. Do a c_get(DB_SET).
+ * If the secondary/primary pair already exists, do
+ * nothing; if the secondary exists with a different
+ * primary, return an error; and if the secondary
+ * does not exist, put it.
+ */
+ if (!F_ISSET(sdbp, DB_AM_DUP)) {
+ /* Case 3. */
+ memset(&oldpkey, 0, sizeof(DBT));
+ F_SET(&oldpkey, DB_DBT_MALLOC);
+ ret = __db_c_get(sdbc,
+ &skey, &oldpkey, rmw | DB_SET);
+ if (ret == 0) {
+ cmp = __bam_defcmp(sdbp, &oldpkey, &pkey);
+ __os_ufree(dbenv, oldpkey.data);
+ if (cmp != 0) {
+ __db_err(dbenv, "%s%s",
+ "Put results in a non-unique secondary key in an ",
+ "index not configured to support duplicates");
+ ret = EINVAL;
+ goto skipput;
+ }
+ } else if (ret != DB_NOTFOUND && ret != DB_KEYEMPTY)
+ goto skipput;
+ } else if (!F_ISSET(sdbp, DB_AM_DUPSORT)) {
+ /* Case 2. */
+ memset(&tempskey, 0, sizeof (DBT));
+ tempskey.data = skey.data;
+ tempskey.size = skey.size;
+ memset(&temppkey, 0, sizeof (DBT));
+ temppkey.data = pkey.data;
+ temppkey.size = pkey.size;
+ ret = __db_c_get(sdbc, &tempskey, &temppkey,
+ rmw | DB_GET_BOTH);
+ if (ret != DB_NOTFOUND && ret != DB_KEYEMPTY)
+ goto skipput;
+ }
+
+ ret = __db_c_put(sdbc, &skey, &pkey, DB_UPDATE_SECONDARY);
+
+ /*
+ * We don't know yet whether this was a put-overwrite that
+ * in fact changed nothing. If it was, we may get DB_KEYEXIST.
+ * This is not an error.
+ */
+ if (ret == DB_KEYEXIST)
+ ret = 0;
+
+skipput: FREE_IF_NEEDED(sdbp, &skey)
+
+ if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (ret != 0)
+ goto err;
+ }
+ if (ret != 0)
+ goto err;
+
+ /* If still necessary, go get the old primary key/data. (Step 4.) */
+ if (!have_oldrec) {
+ /* See the comments in step 2. This is real familiar. */
+ if ((ret = __db_c_idup(dbc_arg, &pdbc, 0)) != 0)
+ goto err;
+ DB_ASSERT(flags != DB_CURRENT);
+ pkey.data = key->data;
+ pkey.size = key->size;
+ ret = __db_c_get(pdbc, &pkey, &olddata, rmw | DB_SET);
+ if (ret == DB_KEYEMPTY || ret == DB_NOTFOUND) {
+ nodel = 1;
+ ret = 0;
+ }
+ if ((t_ret = __db_c_close(pdbc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto err;
+ have_oldrec = 1;
+ }
+
+ /*
+ * If we don't follow this goto, we do in fact have an old record
+ * we may need to go delete. (Step 5).
+ */
+ if (nodel)
+ goto skip_s_update;
+
+ for (sdbp = __db_s_first(dbp);
+ sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp)) {
+ /*
+ * Call the callback for this secondary to get the
+ * old secondary key.
+ */
+ memset(&oldskey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp,
+ &pkey, &olddata, &oldskey)) != 0) {
+ if (ret == DB_DONOTINDEX)
+ /*
+ * The callback returned a null value--there's
+ * nothing to delete. Go on to the next
+ * secondary.
+ */
+ continue;
+ else
+ goto err;
+ }
+ memset(&skey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp,
+ &pkey, ispartial ? &newdata : data, &skey)) != 0 &&
+ ret != DB_DONOTINDEX)
+ goto err;
+
+ /*
+ * If there is no new secondary key, or if the old secondary
+ * key is different from the new secondary key, then
+ * we need to delete the old one.
+ *
+ * Note that bt_compare is (and must be) set no matter
+ * what access method we're in.
+ */
+ sdbc = NULL;
+ if (ret == DB_DONOTINDEX ||
+ ((BTREE *)sdbp->bt_internal)->bt_compare(sdbp,
+ &oldskey, &skey) != 0) {
+ if ((ret = __db_cursor_int(
+ sdbp, dbc_arg->txn, sdbp->type,
+ PGNO_INVALID, 0, dbc_arg->locker, &sdbc)) != 0)
+ goto err;
+ if (CDB_LOCKING(dbenv)) {
+ DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ F_SET(sdbc, DBC_WRITER);
+ }
+
+ /*
+ * Don't let c_get(DB_GET_BOTH) stomp on
+ * our data. Use a temp DBT instead.
+ */
+ memset(&tempskey, 0, sizeof(DBT));
+ tempskey.data = oldskey.data;
+ tempskey.size = oldskey.size;
+ memset(&temppkey, 0, sizeof(DBT));
+ temppkey.data = pkey.data;
+ temppkey.size = pkey.size;
+ if ((ret = __db_c_get(sdbc,
+ &tempskey, &temppkey, rmw | DB_GET_BOTH)) == 0)
+ ret = __db_c_del(sdbc, DB_UPDATE_SECONDARY);
+ else if (ret == DB_NOTFOUND)
+ ret = __db_secondary_corrupt(dbp);
+ }
+
+ FREE_IF_NEEDED(sdbp, &skey);
+ FREE_IF_NEEDED(sdbp, &oldskey);
+ if (sdbc != NULL && (t_ret = __db_c_close(sdbc)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto err;
+ }
+
+ /* Secondary index updates are now done. On to the "real" stuff. */
+
+skip_s_update:
+ /*
* If we have an off-page duplicates cursor, and the operation applies
* to it, perform the operation. Duplicate the cursor and call the
* underlying function.
@@ -788,7 +1307,7 @@ __db_c_put(dbc_arg, key, data, flags)
if ((ret = dbc_arg->c_am_writelock(dbc_arg)) != 0)
return (ret);
- if ((ret = __db_c_dup(dbc_arg, &dbc_n, DB_POSITIONI)) != 0)
+ if ((ret = __db_c_dup(dbc_arg, &dbc_n, DB_POSITION)) != 0)
goto err;
opd = dbc_n->internal->opd;
if ((ret = opd->c_am_put(
@@ -804,9 +1323,9 @@ __db_c_put(dbc_arg, key, data, flags)
* XXX: MARGO
*
tmp_flags = flags == DB_AFTER ||
- flags == DB_BEFORE || flags == DB_CURRENT ? DB_POSITIONI : 0;
+ flags == DB_BEFORE || flags == DB_CURRENT ? DB_POSITION : 0;
*/
- tmp_flags = DB_POSITIONI;
+ tmp_flags = DB_POSITION;
/*
* If this cursor is going to be closed immediately, we don't
@@ -826,8 +1345,12 @@ __db_c_put(dbc_arg, key, data, flags)
* a new cursor and call the underlying function.
*/
if (pgno != PGNO_INVALID) {
- if ((ret = __db_c_newopd(dbc_arg, pgno, &opd)) != 0)
+ oldopd = dbc_n->internal->opd;
+ if ((ret = __db_c_newopd(dbc_arg, pgno, oldopd, &opd)) != 0) {
+ dbc_n->internal->opd = opd;
goto err;
+ }
+
dbc_n->internal->opd = opd;
if ((ret = opd->c_am_put(
@@ -840,8 +1363,17 @@ err: /* Cleanup and cursor resolution. */
if ((t_ret = __db_c_cleanup(dbc_arg, dbc_n, ret)) != 0 && ret == 0)
ret = t_ret;
+ /* If newdata or olddata were used, free their buffers. */
+ if (newdata.data != NULL)
+ __os_free(dbenv, newdata.data);
+ if (olddata.data != NULL)
+ __os_ufree(dbenv, olddata.data);
+
CDB_LOCKING_DONE(dbp, dbc_arg);
+ if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
+ ret = t_ret;
+
return (ret);
}
@@ -855,7 +1387,20 @@ __db_duperr(dbp, flags)
DB *dbp;
u_int32_t flags;
{
- if (flags != DB_NODUPDATA)
+
+ /*
+ * If we run into this error while updating a secondary index,
+ * don't yell--there's no clean way to pass DB_NODUPDATA in along
+ * with DB_UPDATE_SECONDARY, but we may run into this problem
+ * in a normal, non-error course of events.
+ *
+ * !!!
+ * If and when we ever permit duplicate duplicates in sorted-dup
+ * databases, we need to either change the secondary index code
+ * to check for dup dups, or we need to maintain the implicit
+ * "DB_NODUPDATA" behavior for databases with DB_AM_SECONDARY set.
+ */
+ if (flags != DB_NODUPDATA && !F_ISSET(dbp, DB_AM_SECONDARY))
__db_err(dbp->dbenv,
"Duplicate data items are not supported with sorted data");
return (DB_KEYEXIST);
@@ -873,60 +1418,56 @@ __db_c_cleanup(dbc, dbc_n, failed)
DB *dbp;
DBC *opd;
DBC_INTERNAL *internal;
+ DB_MPOOLFILE *mpf;
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
internal = dbc->internal;
ret = 0;
/* Discard any pages we're holding. */
if (internal->page != NULL) {
if ((t_ret =
- memp_fput(dbp->mpf, internal->page, 0)) != 0 && ret == 0)
+ __memp_fput(mpf, internal->page, 0)) != 0 && ret == 0)
ret = t_ret;
internal->page = NULL;
}
opd = internal->opd;
if (opd != NULL && opd->internal->page != NULL) {
- if ((t_ret = memp_fput(dbp->mpf,
- opd->internal->page, 0)) != 0 && ret == 0)
+ if ((t_ret =
+ __memp_fput(mpf, opd->internal->page, 0)) != 0 && ret == 0)
ret = t_ret;
- opd->internal->page = NULL;
+ opd->internal->page = NULL;
}
/*
- * If dbc_n is NULL, there's no internal cursor swapping to be
- * done and no dbc_n to close--we probably did the entire
- * operation on an offpage duplicate cursor. Just return.
- */
- if (dbc_n == NULL)
- return (ret);
-
- /*
- * If dbc is marked DBC_TRANSIENT, we're inside a DB->{put/get}
+ * If dbc_n is NULL, there's no internal cursor swapping to be done
+ * and no dbc_n to close--we probably did the entire operation on an
+ * offpage duplicate cursor. Just return.
+ *
+ * If dbc and dbc_n are the same, we're either inside a DB->{put/get}
* operation, and as an optimization we performed the operation on
- * the main cursor rather than on a duplicated one. Assert
- * that dbc_n == dbc (i.e., that we really did skip the
- * duplication). Then just do nothing--even if there was
- * an error, we're about to close the cursor, and the fact that we
- * moved it isn't a user-visible violation of our "cursor
- * stays put on error" rule.
- */
- if (F_ISSET(dbc, DBC_TRANSIENT)) {
- DB_ASSERT(dbc == dbc_n);
+ * the main cursor rather than on a duplicated one, or we're in a
+ * bulk get that can't have moved the cursor (DB_MULTIPLE with the
+ * initial c_get operation on an off-page dup cursor). Just
+ * return--either we know we didn't move the cursor, or we're going
+ * to close it before we return to application code, so we're sure
+ * not to visibly violate the "cursor stays put on error" rule.
+ */
+ if (dbc_n == NULL || dbc == dbc_n)
return (ret);
- }
if (dbc_n->internal->page != NULL) {
- if ((t_ret = memp_fput(dbp->mpf,
- dbc_n->internal->page, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(
+ mpf, dbc_n->internal->page, 0)) != 0 && ret == 0)
ret = t_ret;
dbc_n->internal->page = NULL;
}
opd = dbc_n->internal->opd;
if (opd != NULL && opd->internal->page != NULL) {
- if ((t_ret = memp_fput(dbp->mpf,
- opd->internal->page, 0)) != 0 && ret == 0)
+ if ((t_ret =
+ __memp_fput(mpf, opd->internal->page, 0)) != 0 && ret == 0)
ret = t_ret;
opd->internal->page = NULL;
}
@@ -956,13 +1497,319 @@ __db_c_cleanup(dbc, dbc_n, failed)
* We might want to consider adding a flag to the cursor, so that any
* subsequent operations other than close just return an error?
*/
- if ((t_ret = dbc_n->c_close(dbc_n)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc_n)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
+ * __db_c_secondary_get_pp --
+ * This wrapper function for DBC->c_pget() is the DBC->c_get() function
+ * for a secondary index cursor.
+ *
+ * PUBLIC: int __db_c_secondary_get_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_c_secondary_get_pp(dbc, skey, data, flags)
+ DBC *dbc;
+ DBT *skey, *data;
+ u_int32_t flags;
+{
+
+ DB_ASSERT(F_ISSET(dbc->dbp, DB_AM_SECONDARY));
+ return (__db_c_pget_pp(dbc, skey, NULL, data, flags));
+}
+
+/*
+ * __db_c_pget --
+ * Get a primary key/data pair through a secondary index.
+ *
+ * PUBLIC: int __db_c_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_c_pget(dbc, skey, pkey, data, flags)
+ DBC *dbc;
+ DBT *skey, *pkey, *data;
+ u_int32_t flags;
+{
+ DB *pdbp, *sdbp;
+ DBC *pdbc;
+ DBT *save_rdata, nullpkey;
+ u_int32_t save_pkey_flags;
+ int pkeymalloc, ret, t_ret;
+
+ sdbp = dbc->dbp;
+ pdbp = sdbp->s_primary;
+ pkeymalloc = t_ret = 0;
+
+ /*
+ * The challenging part of this function is getting the behavior
+ * right for all the various permutations of DBT flags. The
+ * next several blocks handle the various cases we need to
+ * deal with specially.
+ */
+
+ /*
+ * We may be called with a NULL pkey argument, if we've been
+ * wrapped by a 2-DBT get call. If so, we need to use our
+ * own DBT.
+ */
+ if (pkey == NULL) {
+ memset(&nullpkey, 0, sizeof(DBT));
+ pkey = &nullpkey;
+ }
+
+ /*
+ * DB_GET_RECNO is a special case, because we're interested not in
+ * the primary key/data pair, but rather in the primary's record
+ * number.
+ */
+ if ((flags & DB_OPFLAGS_MASK) == DB_GET_RECNO)
+ return (__db_c_pget_recno(dbc, pkey, data, flags));
+
+ /*
+ * If the DBTs we've been passed don't have any of the
+ * user-specified memory management flags set, we want to make sure
+ * we return values using the DBTs dbc->rskey, dbc->rkey, and
+ * dbc->rdata, respectively.
+ *
+ * There are two tricky aspects to this: first, we need to pass
+ * skey and pkey *in* to the initial c_get on the secondary key,
+ * since either or both may be looked at by it (depending on the
+ * get flag). Second, we must not use a normal DB->get call
+ * on the secondary, even though that's what we want to accomplish,
+ * because the DB handle may be free-threaded. Instead,
+ * we open a cursor, then take steps to ensure that we actually use
+ * the rkey/rdata from the *secondary* cursor.
+ *
+ * We accomplish all this by passing in the DBTs we started out
+ * with to the c_get, but having swapped the contents of rskey and
+ * rkey, respectively, into rkey and rdata; __db_ret will treat
+ * them like the normal key/data pair in a c_get call, and will
+ * realloc them as need be (this is "step 1"). Then, for "step 2",
+ * we swap back rskey/rkey/rdata to normal, and do a get on the primary
+ * with the secondary dbc appointed as the owner of the returned-data
+ * memory.
+ *
+ * Note that in step 2, we copy the flags field in case we need to
+ * pass down a DB_DBT_PARTIAL or other flag that is compatible with
+ * letting DB do the memory management.
+ */
+ /* Step 1. */
+ save_rdata = dbc->rdata;
+ dbc->rdata = dbc->rkey;
+ dbc->rkey = dbc->rskey;
+
+ /*
+ * It is correct, though slightly sick, to attempt a partial get
+ * of a primary key. However, if we do so here, we'll never find the
+ * primary record; clear the DB_DBT_PARTIAL field of pkey just
+ * for the duration of the next call.
+ */
+ save_pkey_flags = pkey->flags;
+ F_CLR(pkey, DB_DBT_PARTIAL);
+
+ /*
+ * Now we can go ahead with the meat of this call. First, get the
+ * primary key from the secondary index. (What exactly we get depends
+ * on the flags, but the underlying cursor get will take care of the
+ * dirty work.)
+ */
+ if ((ret = __db_c_get(dbc, skey, pkey, flags)) != 0) {
+ /* Restore rskey/rkey/rdata and return. */
+ pkey->flags = save_pkey_flags;
+ dbc->rskey = dbc->rkey;
+ dbc->rkey = dbc->rdata;
+ dbc->rdata = save_rdata;
+ goto err;
+ }
+
+ /* Restore pkey's flags in case we stomped the PARTIAL flag. */
+ pkey->flags = save_pkey_flags;
+
+ /*
+ * Restore the cursor's rskey, rkey, and rdata DBTs. If DB
+ * is handling the memory management, we now have newly
+ * reallocated buffers and ulens in rkey and rdata which we want
+ * to put in rskey and rkey. save_rdata contains the old value
+ * of dbc->rdata.
+ */
+ dbc->rskey = dbc->rkey;
+ dbc->rkey = dbc->rdata;
+ dbc->rdata = save_rdata;
+
+ /*
+ * Now we're ready for "step 2". If either or both of pkey and
+ * data do not have memory management flags set--that is, if DB is
+ * managing their memory--we need to swap around the rkey/rdata
+ * structures so that we don't wind up trying to use memory managed
+ * by the primary database cursor, which we'll close before we return.
+ *
+ * !!!
+ * If you're carefully following the bouncing ball, you'll note
+ * that in the DB-managed case, the buffer hanging off of pkey is
+ * the same as dbc->rkey->data. This is just fine; we may well
+ * realloc and stomp on it when we return, if we're going a
+ * DB_GET_BOTH and need to return a different partial or key
+ * (depending on the comparison function), but this is safe.
+ *
+ * !!!
+ * We need to use __db_cursor_int here rather than simply calling
+ * pdbp->cursor, because otherwise, if we're in CDB, we'll
+ * allocate a new locker ID and leave ourselves open to deadlocks.
+ * (Even though we're only acquiring read locks, we'll still block
+ * if there are any waiters.)
+ */
+ if ((ret = __db_cursor_int(pdbp,
+ dbc->txn, pdbp->type, PGNO_INVALID, 0, dbc->locker, &pdbc)) != 0)
+ goto err;
+
+ /*
+ * We're about to use pkey a second time. If DB_DBT_MALLOC
+ * is set on it, we'll leak the memory we allocated the first time.
+ * Thus, set DB_DBT_REALLOC instead so that we reuse that memory
+ * instead of leaking it.
+ *
+ * !!!
+ * This assumes that the user must always specify a compatible
+ * realloc function if a malloc function is specified. I think
+ * this is a reasonable requirement.
+ */
+ if (F_ISSET(pkey, DB_DBT_MALLOC)) {
+ F_CLR(pkey, DB_DBT_MALLOC);
+ F_SET(pkey, DB_DBT_REALLOC);
+ pkeymalloc = 1;
+ }
+
+ /*
+ * Do the actual get. Set DBC_TRANSIENT since we don't care
+ * about preserving the position on error, and it's faster.
+ * SET_RET_MEM so that the secondary DBC owns any returned-data
+ * memory.
+ */
+ F_SET(pdbc, DBC_TRANSIENT);
+ SET_RET_MEM(pdbc, dbc);
+ ret = __db_c_get(pdbc, pkey, data, DB_SET);
+
+ /*
+ * If the item wasn't found in the primary, this is a bug;
+ * our secondary has somehow gotten corrupted, and contains
+ * elements that don't correspond to anything in the primary.
+ * Complain.
+ */
+ if (ret == DB_NOTFOUND)
+ ret = __db_secondary_corrupt(pdbp);
+
+ /* Now close the primary cursor. */
+ t_ret = __db_c_close(pdbc);
+
+err: if (pkeymalloc) {
+ /*
+ * If pkey had a MALLOC flag, we need to restore it;
+ * otherwise, if the user frees the buffer but reuses
+ * the DBT without NULL'ing its data field or changing
+ * the flags, we may drop core.
+ */
+ F_CLR(pkey, DB_DBT_REALLOC);
+ F_SET(pkey, DB_DBT_MALLOC);
+ }
+ return (t_ret == 0 ? ret : t_ret);
+}
+
+/*
+ * __db_c_pget_recno --
+ * Perform a DB_GET_RECNO c_pget on a secondary index. Returns
+ * the secondary's record number in the pkey field and the primary's
+ * in the data field.
+ */
+static int
+__db_c_pget_recno(sdbc, pkey, data, flags)
+ DBC *sdbc;
+ DBT *pkey, *data;
+ u_int32_t flags;
+{
+ DB *pdbp, *sdbp;
+ DB_ENV *dbenv;
+ DBC *pdbc;
+ DBT discardme, primary_key;
+ db_recno_t oob;
+ u_int32_t rmw;
+ int ret, t_ret;
+
+ sdbp = sdbc->dbp;
+ pdbp = sdbp->s_primary;
+ dbenv = sdbp->dbenv;
+ pdbc = NULL;
+ ret = t_ret = 0;
+
+ rmw = LF_ISSET(DB_RMW);
+
+ memset(&discardme, 0, sizeof(DBT));
+ F_SET(&discardme, DB_DBT_USERMEM | DB_DBT_PARTIAL);
+
+ oob = RECNO_OOB;
+
+ /*
+ * If the primary is an rbtree, we want its record number, whether
+ * or not the secondary is one too. Fetch the recno into "data".
+ *
+ * If it's not an rbtree, return RECNO_OOB in "data".
+ */
+ if (F_ISSET(pdbp, DB_AM_RECNUM)) {
+ /*
+ * Get the primary key, so we can find the record number
+ * in the primary. (We're uninterested in the secondary key.)
+ */
+ memset(&primary_key, 0, sizeof(DBT));
+ F_SET(&primary_key, DB_DBT_MALLOC);
+ if ((ret = __db_c_get(sdbc,
+ &discardme, &primary_key, rmw | DB_CURRENT)) != 0)
+ return (ret);
+
+ /*
+ * Open a cursor on the primary, set it to the right record,
+ * and fetch its recno into "data".
+ *
+ * (See __db_c_pget for comments on the use of __db_cursor_int.)
+ *
+ * SET_RET_MEM so that the secondary DBC owns any returned-data
+ * memory.
+ */
+ if ((ret = __db_cursor_int(pdbp, sdbc->txn,
+ pdbp->type, PGNO_INVALID, 0, sdbc->locker, &pdbc)) != 0)
+ goto perr;
+ SET_RET_MEM(pdbc, sdbc);
+ if ((ret = __db_c_get(pdbc,
+ &primary_key, &discardme, rmw | DB_SET)) != 0)
+ goto perr;
+
+ ret = __db_c_get(pdbc, &discardme, data, rmw | DB_GET_RECNO);
+
+perr: __os_ufree(sdbp->dbenv, primary_key.data);
+ if (pdbc != NULL &&
+ (t_ret = __db_c_close(pdbc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ return (ret);
+ } else if ((ret = __db_retcopy(dbenv, data, &oob,
+ sizeof(oob), &sdbc->rkey->data, &sdbc->rkey->ulen)) != 0)
+ return (ret);
+
+ /*
+ * If the secondary is an rbtree, we want its record number, whether
+ * or not the primary is one too. Fetch the recno into "pkey".
+ *
+ * If it's not an rbtree, return RECNO_OOB in "pkey".
+ */
+ if (F_ISSET(sdbp, DB_AM_RECNUM))
+ return (__db_c_get(sdbc, &discardme, pkey, flags));
+ else
+ return (__db_retcopy(dbenv, pkey, &oob,
+ sizeof(oob), &sdbc->rdata->data, &sdbc->rdata->ulen));
+}
+
+/*
* __db_wrlock_err -- do not have a write lock.
*/
static int
@@ -972,3 +1819,377 @@ __db_wrlock_err(dbenv)
__db_err(dbenv, "Write attempted on read-only cursor");
return (EPERM);
}
+
+/*
+ * __db_c_del_secondary --
+ * Perform a delete operation on a secondary index: call through
+ * to the primary and delete the primary record that this record
+ * points to.
+ *
+ * Note that deleting the primary record will call c_del on all
+ * the secondaries, including this one; thus, it is not necessary
+ * to execute both this function and an actual delete.
+ */
+static int
+__db_c_del_secondary(dbc)
+ DBC *dbc;
+{
+ DB *pdbp;
+ DBC *pdbc;
+ DBT skey, pkey;
+ int ret, t_ret;
+
+ memset(&skey, 0, sizeof(DBT));
+ memset(&pkey, 0, sizeof(DBT));
+
+ /*
+ * Get the current item that we're pointing at.
+ * We don't actually care about the secondary key, just
+ * the primary.
+ */
+ F_SET(&skey, DB_DBT_PARTIAL | DB_DBT_USERMEM);
+ if ((ret = __db_c_get(dbc, &skey, &pkey, DB_CURRENT)) != 0)
+ return (ret);
+
+ /*
+ * Create a cursor on the primary with our locker ID,
+ * so that when it calls back, we don't conflict.
+ *
+ * We create a cursor explicitly because there's no
+ * way to specify the same locker ID if we're using
+ * locking but not transactions if we use the DB->del
+ * interface. This shouldn't be any less efficient
+ * anyway.
+ */
+ pdbp = dbc->dbp->s_primary;
+ if ((ret = __db_cursor_int(pdbp, dbc->txn,
+ pdbp->type, PGNO_INVALID, 0, dbc->locker, &pdbc)) != 0)
+ return (ret);
+
+ /*
+ * See comment in __db_c_put--if we're in CDB,
+ * we already hold the locks we need, and we need to flag
+ * the cursor as a WRITER so we don't run into errors
+ * when we try to delete.
+ */
+ if (CDB_LOCKING(pdbp->dbenv)) {
+ DB_ASSERT(pdbc->mylock.off == LOCK_INVALID);
+ F_SET(pdbc, DBC_WRITER);
+ }
+
+ /*
+ * Set the new cursor to the correct primary key. Then
+ * delete it. We don't really care about the datum;
+ * just reuse our skey DBT.
+ *
+ * If the primary get returns DB_NOTFOUND, something is amiss--
+ * every record in the secondary should correspond to some record
+ * in the primary.
+ */
+ if ((ret = __db_c_get(pdbc, &pkey, &skey,
+ (STD_LOCKING(dbc) ? DB_RMW : 0) | DB_SET)) == 0)
+ ret = __db_c_del(pdbc, 0);
+ else if (ret == DB_NOTFOUND)
+ ret = __db_secondary_corrupt(pdbp);
+
+ if ((t_ret = __db_c_close(pdbc)) != 0 && ret != 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __db_c_del_primary --
+ * Perform a delete operation on a primary index. Loop through
+ * all the secondary indices which correspond to this primary
+ * database, and delete any secondary keys that point at the current
+ * record.
+ *
+ * PUBLIC: int __db_c_del_primary __P((DBC *));
+ */
+int
+__db_c_del_primary(dbc)
+ DBC *dbc;
+{
+ DB *dbp, *sdbp;
+ DBC *sdbc;
+ DBT data, pkey, skey, temppkey, tempskey;
+ int ret, t_ret;
+
+ dbp = dbc->dbp;
+
+ /*
+ * If we're called at all, we have at least one secondary.
+ * (Unfortunately, we can't assert this without grabbing the mutex.)
+ * Get the current record so that we can construct appropriate
+ * secondary keys as needed.
+ */
+ memset(&pkey, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+ if ((ret = __db_c_get(dbc, &pkey, &data, DB_CURRENT)) != 0)
+ return (ret);
+
+ for (sdbp = __db_s_first(dbp);
+ sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp)) {
+ /*
+ * Get the secondary key for this secondary and the current
+ * item.
+ */
+ memset(&skey, 0, sizeof(DBT));
+ if ((ret = sdbp->s_callback(sdbp, &pkey, &data, &skey)) != 0) {
+ /*
+ * If the current item isn't in this index, we
+ * have no work to do. Proceed.
+ */
+ if (ret == DB_DONOTINDEX)
+ continue;
+
+ /* We had a substantive error. Bail. */
+ FREE_IF_NEEDED(sdbp, &skey);
+ goto done;
+ }
+
+ /* Open a secondary cursor. */
+ if ((ret = __db_cursor_int(sdbp, dbc->txn, sdbp->type,
+ PGNO_INVALID, 0, dbc->locker, &sdbc)) != 0)
+ goto done;
+ /* See comment above and in __db_c_put. */
+ if (CDB_LOCKING(sdbp->dbenv)) {
+ DB_ASSERT(sdbc->mylock.off == LOCK_INVALID);
+ F_SET(sdbc, DBC_WRITER);
+ }
+
+ /*
+ * Set the secondary cursor to the appropriate item.
+ * Delete it.
+ *
+ * We want to use DB_RMW if locking is on; it's only
+ * legal then, though.
+ *
+ * !!!
+ * Don't stomp on any callback-allocated buffer in skey
+ * when we do a c_get(DB_GET_BOTH); use a temp DBT instead.
+ * Similarly, don't allow pkey to be invalidated when the
+ * cursor is closed.
+ */
+ memset(&tempskey, 0, sizeof(DBT));
+ tempskey.data = skey.data;
+ tempskey.size = skey.size;
+ memset(&temppkey, 0, sizeof(DBT));
+ temppkey.data = pkey.data;
+ temppkey.size = pkey.size;
+ if ((ret = __db_c_get(sdbc, &tempskey, &temppkey,
+ (STD_LOCKING(dbc) ? DB_RMW : 0) | DB_GET_BOTH)) == 0)
+ ret = __db_c_del(sdbc, DB_UPDATE_SECONDARY);
+ else if (ret == DB_NOTFOUND)
+ ret = __db_secondary_corrupt(dbp);
+
+ FREE_IF_NEEDED(sdbp, &skey);
+
+ if ((t_ret = __db_c_close(sdbc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto done;
+ }
+
+done: if (sdbp != NULL && (t_ret = __db_s_done(sdbp)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __db_s_first --
+ * Get the first secondary, if any are present, from the primary.
+ *
+ * PUBLIC: DB *__db_s_first __P((DB *));
+ */
+DB *
+__db_s_first(pdbp)
+ DB *pdbp;
+{
+ DB *sdbp;
+
+ MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
+ sdbp = LIST_FIRST(&pdbp->s_secondaries);
+
+ /* See __db_s_next. */
+ if (sdbp != NULL)
+ sdbp->s_refcnt++;
+ MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+
+ return (sdbp);
+}
+
+/*
+ * __db_s_next --
+ * Get the next secondary in the list.
+ *
+ * PUBLIC: int __db_s_next __P((DB **));
+ */
+int
+__db_s_next(sdbpp)
+ DB **sdbpp;
+{
+ DB *sdbp, *pdbp, *closeme;
+ int ret;
+
+ /*
+ * Secondary indices are kept in a linked list, s_secondaries,
+ * off each primary DB handle. If a primary is free-threaded,
+ * this list may only be traversed or modified while the primary's
+ * thread mutex is held.
+ *
+ * The tricky part is that we don't want to hold the thread mutex
+ * across the full set of secondary puts necessary for each primary
+ * put, or we'll wind up essentially single-threading all the puts
+ * to the handle; the secondary puts will each take about as
+ * long as the primary does, and may require I/O. So we instead
+ * hold the thread mutex only long enough to follow one link to the
+ * next secondary, and then we release it before performing the
+ * actual secondary put.
+ *
+ * The only danger here is that we might legitimately close a
+ * secondary index in one thread while another thread is performing
+ * a put and trying to update that same secondary index. To
+ * prevent this from happening, we refcount the secondary handles.
+ * If close is called on a secondary index handle while we're putting
+ * to it, it won't really be closed--the refcount will simply drop,
+ * and we'll be responsible for closing it here.
+ */
+ sdbp = *sdbpp;
+ pdbp = sdbp->s_primary;
+ closeme = NULL;
+
+ MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
+ DB_ASSERT(sdbp->s_refcnt != 0);
+ if (--sdbp->s_refcnt == 0) {
+ LIST_REMOVE(sdbp, s_links);
+ closeme = sdbp;
+ }
+ sdbp = LIST_NEXT(sdbp, s_links);
+ if (sdbp != NULL)
+ sdbp->s_refcnt++;
+ MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+
+ *sdbpp = sdbp;
+
+ /*
+ * closeme->close() is a wrapper; call __db_close explicitly.
+ */
+ ret = closeme != NULL ? __db_close(closeme, NULL, 0) : 0;
+ return (ret);
+}
+
+/*
+ * __db_s_done --
+ * Properly decrement the refcount on a secondary database handle we're
+ * using, without calling __db_s_next.
+ *
+ * PUBLIC: int __db_s_done __P((DB *));
+ */
+int
+__db_s_done(sdbp)
+ DB *sdbp;
+{
+ DB *pdbp;
+ int doclose;
+
+ pdbp = sdbp->s_primary;
+ doclose = 0;
+
+ MUTEX_THREAD_LOCK(pdbp->dbenv, pdbp->mutexp);
+ DB_ASSERT(sdbp->s_refcnt != 0);
+ if (--sdbp->s_refcnt == 0) {
+ LIST_REMOVE(sdbp, s_links);
+ doclose = 1;
+ }
+ MUTEX_THREAD_UNLOCK(pdbp->dbenv, pdbp->mutexp);
+
+ return (doclose ? __db_close(sdbp, NULL, 0) : 0);
+}
+
+/*
+ * __db_buildpartial --
+ * Build the record that will result after a partial put is applied to
+ * an existing record.
+ *
+ * This should probably be merged with __bam_build, but that requires
+ * a little trickery if we plan to keep the overflow-record optimization
+ * in that function.
+ */
+static int
+__db_buildpartial(dbp, oldrec, partial, newrec)
+ DB *dbp;
+ DBT *oldrec, *partial, *newrec;
+{
+ int ret;
+ u_int8_t *buf;
+ u_int32_t len, nbytes;
+
+ DB_ASSERT(F_ISSET(partial, DB_DBT_PARTIAL));
+
+ memset(newrec, 0, sizeof(DBT));
+
+ nbytes = __db_partsize(oldrec->size, partial);
+ newrec->size = nbytes;
+
+ if ((ret = __os_malloc(dbp->dbenv, nbytes, &buf)) != 0)
+ return (ret);
+ newrec->data = buf;
+
+ /* Nul or pad out the buffer, for any part that isn't specified. */
+ memset(buf,
+ F_ISSET(dbp, DB_AM_FIXEDLEN) ? ((BTREE *)dbp->bt_internal)->re_pad :
+ 0, nbytes);
+
+ /* Copy in any leading data from the original record. */
+ memcpy(buf, oldrec->data,
+ partial->doff > oldrec->size ? oldrec->size : partial->doff);
+
+ /* Copy the data from partial. */
+ memcpy(buf + partial->doff, partial->data, partial->size);
+
+ /* Copy any trailing data from the original record. */
+ len = partial->doff + partial->dlen;
+ if (oldrec->size > len)
+ memcpy(buf + partial->doff + partial->size,
+ (u_int8_t *)oldrec->data + len, oldrec->size - len);
+
+ return (0);
+}
+
+/*
+ * __db_partsize --
+ * Given the number of bytes in an existing record and a DBT that
+ * is about to be partial-put, calculate the size of the record
+ * after the put.
+ *
+ * This code is called from __bam_partsize.
+ *
+ * PUBLIC: u_int32_t __db_partsize __P((u_int32_t, DBT *));
+ */
+u_int32_t
+__db_partsize(nbytes, data)
+ u_int32_t nbytes;
+ DBT *data;
+{
+
+ /*
+ * There are really two cases here:
+ *
+ * Case 1: We are replacing some bytes that do not exist (i.e., they
+ * are past the end of the record). In this case the number of bytes
+ * we are replacing is irrelevant and all we care about is how many
+ * bytes we are going to add from offset. So, the new record length
+ * is going to be the size of the new bytes (size) plus wherever those
+ * new bytes begin (doff).
+ *
+ * Case 2: All the bytes we are replacing exist. Therefore, the new
+ * size is the oldsize (nbytes) minus the bytes we are replacing (dlen)
+ * plus the bytes we are adding (size).
+ */
+ if (nbytes < data->doff + data->dlen) /* Case 1 */
+ return (data->doff + data->size);
+
+ return (nbytes + data->size - data->dlen); /* Case 2 */
+}
diff --git a/db/db/db_conv.c b/db/db/db_conv.c
index df60be067..55d07e12a 100644
--- a/db/db/db_conv.c
+++ b/db/db/db_conv.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -40,7 +40,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_conv.c,v 11.11 2000/11/30 00:58:31 ubell Exp $";
+static const char revid[] = "$Id: db_conv.c,v 11.43 2003/09/23 16:15:00 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -50,12 +50,14 @@ static const char revid[] = "$Id: db_conv.c,v 11.11 2000/11/30 00:58:31 ubell Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "db_am.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
+#include "dbinc/crypto.h"
+#include "dbinc/hmac.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/log.h"
+#include "dbinc/qam.h"
/*
* __db_pgin --
@@ -70,15 +72,140 @@ __db_pgin(dbenv, pg, pp, cookie)
void *pp;
DBT *cookie;
{
+ DB dummydb, *dbp;
DB_PGINFO *pginfo;
+ DB_CIPHER *db_cipher;
+ DB_LSN not_used;
+ PAGE *pagep;
+ size_t pg_off, pg_len, sum_len;
+ int is_hmac, ret;
+ u_int8_t *chksum, *iv;
pginfo = (DB_PGINFO *)cookie->data;
+ pagep = (PAGE *)pp;
- switch (((PAGE *)pp)->type) {
- case P_HASH:
+ ret = is_hmac = 0;
+ chksum = iv = NULL;
+ memset(&dummydb, 0, sizeof(DB));
+ dbp = &dummydb;
+ dummydb.flags = pginfo->flags;
+ db_cipher = (DB_CIPHER *)dbenv->crypto_handle;
+ switch (pagep->type) {
case P_HASHMETA:
+ case P_BTREEMETA:
+ case P_QAMMETA:
+ /*
+ * If checksumming is set on the meta-page, we must set
+ * it in the dbp.
+ */
+ if (FLD_ISSET(((DBMETA *)pp)->metaflags, DBMETA_CHKSUM))
+ F_SET(dbp, DB_AM_CHKSUM);
+ else
+ F_CLR(dbp, DB_AM_CHKSUM);
+ if (((DBMETA *)pp)->encrypt_alg != 0 ||
+ F_ISSET(dbp, DB_AM_ENCRYPT))
+ is_hmac = 1;
+ /*
+ * !!!
+ * For all meta pages it is required that the chksum
+ * be at the same location. Use BTMETA to get to it
+ * for any meta type.
+ */
+ chksum = ((BTMETA *)pp)->chksum;
+ sum_len = DBMETASIZE;
+ break;
+ case P_INVALID:
+ /*
+ * We assume that we've read a file hole if we have
+ * a zero LSN, zero page number and P_INVALID. Otherwise
+ * we have an invalid page that might contain real data.
+ */
+ if (IS_ZERO_LSN(LSN(pagep)) && pagep->pgno == PGNO_INVALID) {
+ sum_len = 0;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ chksum = P_CHKSUM(dbp, pagep);
+ sum_len = pginfo->db_pagesize;
+ /*
+ * If we are reading in a non-meta page, then if we have
+ * a db_cipher then we are using hmac.
+ */
+ is_hmac = CRYPTO_ON(dbenv) ? 1 : 0;
+ break;
+ }
+
+ /*
+ * We expect a checksum error if there was a configuration problem.
+ * If there is no configuration problem and we don't get a match,
+ * it's fatal: panic the system.
+ */
+ if (F_ISSET(dbp, DB_AM_CHKSUM) && sum_len != 0) {
+ if (F_ISSET(dbp, DB_AM_SWAP) && is_hmac == 0)
+ P_32_SWAP(chksum);
+ switch (ret = __db_check_chksum(
+ dbenv, db_cipher, chksum, pp, sum_len, is_hmac)) {
+ case 0:
+ break;
+ case -1:
+ if (DBENV_LOGGING(dbenv))
+ (void)__db_cksum_log(
+ dbenv, NULL, &not_used, DB_FLUSH);
+ __db_err(dbenv,
+ "checksum error: page %lu: catastrophic recovery required",
+ (u_long)pg);
+ return (__db_panic(dbenv, DB_RUNRECOVERY));
+ default:
+ return (ret);
+ }
+ }
+ if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
+ DB_ASSERT(db_cipher != NULL);
+ DB_ASSERT(F_ISSET(dbp, DB_AM_CHKSUM));
+
+ pg_off = P_OVERHEAD(dbp);
+ DB_ASSERT(db_cipher->adj_size(pg_off) == 0);
+
+ switch (pagep->type) {
+ case P_HASHMETA:
+ case P_BTREEMETA:
+ case P_QAMMETA:
+ /*
+ * !!!
+ * For all meta pages it is required that the iv
+ * be at the same location. Use BTMETA to get to it
+ * for any meta type.
+ */
+ iv = ((BTMETA *)pp)->iv;
+ pg_len = DBMETASIZE;
+ break;
+ case P_INVALID:
+ if (IS_ZERO_LSN(LSN(pagep)) &&
+ pagep->pgno == PGNO_INVALID) {
+ pg_len = 0;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ iv = P_IV(dbp, pagep);
+ pg_len = pginfo->db_pagesize;
+ break;
+ }
+ if (pg_len != 0 && (ret = db_cipher->decrypt(dbenv,
+ db_cipher->data, iv, ((u_int8_t *)pagep) + pg_off,
+ pg_len - pg_off)) != 0)
+ return (ret);
+ }
+ switch (pagep->type) {
case P_INVALID:
- return (__ham_pgin(dbenv, pg, pp, cookie));
+ if (pginfo->type == DB_QUEUE)
+ return (__qam_pgin_out(dbenv, pg, pp, cookie));
+ else
+ return (__ham_pgin(dbenv, dbp, pg, pp, cookie));
+ case P_HASH:
+ case P_HASHMETA:
+ return (__ham_pgin(dbenv, dbp, pg, pp, cookie));
case P_BTREEMETA:
case P_IBTREE:
case P_IRECNO:
@@ -86,14 +213,14 @@ __db_pgin(dbenv, pg, pp, cookie)
case P_LDUP:
case P_LRECNO:
case P_OVERFLOW:
- return (__bam_pgin(dbenv, pg, pp, cookie));
+ return (__bam_pgin(dbenv, dbp, pg, pp, cookie));
case P_QAMMETA:
case P_QAMDATA:
return (__qam_pgin_out(dbenv, pg, pp, cookie));
default:
break;
}
- return (__db_unknown_type(dbenv, "__db_pgin", ((PAGE *)pp)->type));
+ return (__db_pgfmt(dbenv, pg));
}
/*
@@ -109,15 +236,33 @@ __db_pgout(dbenv, pg, pp, cookie)
void *pp;
DBT *cookie;
{
+ DB dummydb, *dbp;
+ DB_CIPHER *db_cipher;
DB_PGINFO *pginfo;
+ PAGE *pagep;
+ size_t pg_off, pg_len, sum_len;
+ int ret;
+ u_int8_t *chksum, *iv, *key;
pginfo = (DB_PGINFO *)cookie->data;
+ pagep = (PAGE *)pp;
- switch (((PAGE *)pp)->type) {
+ chksum = iv = key = NULL;
+ memset(&dummydb, 0, sizeof(DB));
+ dbp = &dummydb;
+ dummydb.flags = pginfo->flags;
+ ret = 0;
+ switch (pagep->type) {
+ case P_INVALID:
+ if (pginfo->type == DB_QUEUE)
+ ret = __qam_pgin_out(dbenv, pg, pp, cookie);
+ else
+ ret = __ham_pgout(dbenv, dbp, pg, pp, cookie);
+ break;
case P_HASH:
case P_HASHMETA:
- case P_INVALID:
- return (__ham_pgout(dbenv, pg, pp, cookie));
+ ret = __ham_pgout(dbenv, dbp, pg, pp, cookie);
+ break;
case P_BTREEMETA:
case P_IBTREE:
case P_IRECNO:
@@ -125,14 +270,75 @@ __db_pgout(dbenv, pg, pp, cookie)
case P_LDUP:
case P_LRECNO:
case P_OVERFLOW:
- return (__bam_pgout(dbenv, pg, pp, cookie));
+ ret = __bam_pgout(dbenv, dbp, pg, pp, cookie);
+ break;
case P_QAMMETA:
case P_QAMDATA:
- return (__qam_pgin_out(dbenv, pg, pp, cookie));
- default:
+ ret = __qam_pgin_out(dbenv, pg, pp, cookie);
break;
+ default:
+ return (__db_pgfmt(dbenv, pg));
+ }
+ if (ret)
+ return (ret);
+
+ db_cipher = (DB_CIPHER *)dbenv->crypto_handle;
+ if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
+
+ DB_ASSERT(db_cipher != NULL);
+ DB_ASSERT(F_ISSET(dbp, DB_AM_CHKSUM));
+
+ pg_off = P_OVERHEAD(dbp);
+ DB_ASSERT(db_cipher->adj_size(pg_off) == 0);
+
+ key = db_cipher->mac_key;
+
+ switch (pagep->type) {
+ case P_HASHMETA:
+ case P_BTREEMETA:
+ case P_QAMMETA:
+ /*
+ * !!!
+ * For all meta pages it is required that the iv
+ * be at the same location. Use BTMETA to get to it
+ * for any meta type.
+ */
+ iv = ((BTMETA *)pp)->iv;
+ pg_len = DBMETASIZE;
+ break;
+ default:
+ iv = P_IV(dbp, pagep);
+ pg_len = pginfo->db_pagesize;
+ break;
+ }
+ if ((ret = db_cipher->encrypt(dbenv, db_cipher->data,
+ iv, ((u_int8_t *)pagep) + pg_off, pg_len - pg_off)) != 0)
+ return (ret);
+ }
+ if (F_ISSET(dbp, DB_AM_CHKSUM)) {
+ switch (pagep->type) {
+ case P_HASHMETA:
+ case P_BTREEMETA:
+ case P_QAMMETA:
+ /*
+ * !!!
+ * For all meta pages it is required that the chksum
+ * be at the same location. Use BTMETA to get to it
+ * for any meta type.
+ */
+ chksum = ((BTMETA *)pp)->chksum;
+ sum_len = DBMETASIZE;
+ break;
+ default:
+ chksum = P_CHKSUM(dbp, pagep);
+ sum_len = pginfo->db_pagesize;
+ break;
+ }
+ __db_chksum(pp, sum_len, key, chksum);
+ if (F_ISSET(dbp, DB_AM_SWAP) && !F_ISSET(dbp, DB_AM_ENCRYPT))
+ P_32_SWAP(chksum);
}
- return (__db_unknown_type(dbenv, "__db_pgout", ((PAGE *)pp)->type));
+ return (0);
}
/*
@@ -169,11 +375,13 @@ __db_metaswap(pg)
* __db_byteswap --
* Byteswap a page.
*
- * PUBLIC: int __db_byteswap __P((DB_ENV *, db_pgno_t, PAGE *, size_t, int));
+ * PUBLIC: int __db_byteswap
+ * PUBLIC: __P((DB_ENV *, DB *, db_pgno_t, PAGE *, size_t, int));
*/
int
-__db_byteswap(dbenv, pg, h, pagesize, pgin)
+__db_byteswap(dbenv, dbp, pg, h, pagesize, pgin)
DB_ENV *dbenv;
+ DB *dbp;
db_pgno_t pg;
PAGE *h;
size_t pagesize;
@@ -183,11 +391,12 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
BKEYDATA *bk;
BOVERFLOW *bo;
RINTERNAL *ri;
- db_indx_t i, len, tmp;
+ db_indx_t i, *inp, len, tmp;
u_int8_t *p, *end;
COMPQUIET(pg, 0);
+ inp = P_INP(dbp, h);
if (pgin) {
M_32_SWAP(h->lsn.file);
M_32_SWAP(h->lsn.offset);
@@ -202,14 +411,14 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
case P_HASH:
for (i = 0; i < NUM_ENT(h); i++) {
if (pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
- switch (HPAGE_TYPE(h, i)) {
+ switch (HPAGE_TYPE(dbp, h, i)) {
case H_KEYDATA:
break;
case H_DUPLICATE:
- len = LEN_HKEYDATA(h, pagesize, i);
- p = HKEYDATA_DATA(P_ENTRY(h, i));
+ len = LEN_HKEYDATA(dbp, h, pagesize, i);
+ p = HKEYDATA_DATA(P_ENTRY(dbp, h, i));
for (end = p + len; p < end;) {
if (pgin) {
P_16_SWAP(p);
@@ -226,14 +435,16 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
}
break;
case H_OFFDUP:
- p = HOFFPAGE_PGNO(P_ENTRY(h, i));
+ p = HOFFPAGE_PGNO(P_ENTRY(dbp, h, i));
SWAP32(p); /* pgno */
break;
case H_OFFPAGE:
- p = HOFFPAGE_PGNO(P_ENTRY(h, i));
+ p = HOFFPAGE_PGNO(P_ENTRY(dbp, h, i));
SWAP32(p); /* pgno */
SWAP32(p); /* tlen */
break;
+ default:
+ return (__db_pgfmt(dbenv, pg));
}
}
@@ -246,14 +457,14 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
*/
if (!pgin)
for (i = 0; i < NUM_ENT(h); i++)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
break;
case P_LBTREE:
case P_LDUP:
case P_LRECNO:
for (i = 0; i < NUM_ENT(h); i++) {
if (pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
/*
* In the case of on-page duplicates, key information
@@ -261,17 +472,17 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
*/
if (h->type == P_LBTREE && i > 1) {
if (pgin) {
- if (h->inp[i] == h->inp[i - 2])
+ if (inp[i] == inp[i - 2])
continue;
} else {
- M_16_SWAP(h->inp[i]);
- if (h->inp[i] == h->inp[i - 2])
+ M_16_SWAP(inp[i]);
+ if (inp[i] == inp[i - 2])
continue;
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
}
}
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
switch (B_TYPE(bk->type)) {
case B_KEYDATA:
M_16_SWAP(bk->len);
@@ -282,18 +493,20 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
M_32_SWAP(bo->pgno);
M_32_SWAP(bo->tlen);
break;
+ default:
+ return (__db_pgfmt(dbenv, pg));
}
if (!pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
}
break;
case P_IBTREE:
for (i = 0; i < NUM_ENT(h); i++) {
if (pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
- bi = GET_BINTERNAL(h, i);
+ bi = GET_BINTERNAL(dbp, h, i);
M_16_SWAP(bi->len);
M_32_SWAP(bi->pgno);
M_32_SWAP(bi->nrecs);
@@ -307,23 +520,25 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
M_32_SWAP(bo->pgno);
M_32_SWAP(bo->tlen);
break;
+ default:
+ return (__db_pgfmt(dbenv, pg));
}
if (!pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
}
break;
case P_IRECNO:
for (i = 0; i < NUM_ENT(h); i++) {
if (pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
- ri = GET_RINTERNAL(h, i);
+ ri = GET_RINTERNAL(dbp, h, i);
M_32_SWAP(ri->pgno);
M_32_SWAP(ri->nrecs);
if (!pgin)
- M_16_SWAP(h->inp[i]);
+ M_16_SWAP(inp[i]);
}
break;
case P_OVERFLOW:
@@ -331,7 +546,7 @@ __db_byteswap(dbenv, pg, h, pagesize, pgin)
/* Nothing to do. */
break;
default:
- return (__db_unknown_type(dbenv, "__db_byteswap", h->type));
+ return (__db_pgfmt(dbenv, pg));
}
if (!pgin) {
diff --git a/db/db/db_dispatch.c b/db/db/db_dispatch.c
index c9beac401..a952eb43a 100644
--- a/db/db/db_dispatch.c
+++ b/db/db/db_dispatch.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -39,7 +39,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_dispatch.c,v 11.41 2001/01/11 18:19:50 bostic Exp $";
+static const char revid[] = "$Id: db_dispatch.c,v 11.145 2003/09/10 20:31:18 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -51,16 +51,27 @@ static const char revid[] = "$Id: db_dispatch.c,v 11.41 2001/01/11 18:19:50 bost
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "log_auto.h"
-#include "txn.h"
-#include "txn_auto.h"
-#include "log.h"
-
-static int __db_txnlist_find_internal __P((void *, db_txnlist_type,
- u_int32_t, u_int8_t [DB_FILE_ID_LEN], DB_TXNLIST **, int));
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/fop.h"
+#include "dbinc/txn.h"
+
+static int __db_limbo_fix __P((DB *,
+ DB_TXN *, DB_TXNLIST *, db_pgno_t *, DBMETA *, db_limbo_state));
+static int __db_limbo_bucket __P((DB_ENV *,
+ DB_TXN *, DB_TXNLIST *, db_limbo_state));
+static int __db_limbo_move __P((DB_ENV *, DB_TXN *, DB_TXN *, DB_TXNLIST *));
+static int __db_limbo_prepare __P(( DB *, DB_TXN *, DB_TXNLIST *));
+static int __db_lock_move __P((DB_ENV *,
+ u_int8_t *, db_pgno_t, db_lockmode_t, DB_TXN *, DB_TXN *));
+static int __db_txnlist_find_internal __P((DB_ENV *, void *, db_txnlist_type,
+ u_int32_t, u_int8_t [DB_FILE_ID_LEN], DB_TXNLIST **, int));
+static int __db_txnlist_pgnoadd __P((DB_ENV *, DB_TXNHEAD *,
+ int32_t, u_int8_t [DB_FILE_ID_LEN], char *, db_pgno_t));
/*
* __db_dispatch --
@@ -71,16 +82,21 @@ static int __db_txnlist_find_internal __P((void *, db_txnlist_type,
* scripts in the tools directory). An application using a different
* recovery paradigm will supply a different dispatch function to txn_open.
*
- * PUBLIC: int __db_dispatch __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ * PUBLIC: int __db_dispatch __P((DB_ENV *,
+ * PUBLIC: int (**)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)),
+ * PUBLIC: size_t, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_dispatch(dbenv, db, lsnp, redo, info)
+__db_dispatch(dbenv, dtab, dtabsize, db, lsnp, redo, info)
DB_ENV *dbenv; /* The environment. */
+ int (**dtab)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t dtabsize; /* Size of the dtab. */
DBT *db; /* The log record upon which to dispatch. */
DB_LSN *lsnp; /* The lsn of the record being dispatched. */
db_recops redo; /* Redo this op (or undo it). */
void *info;
{
+ DB_LSN prev_lsn;
u_int32_t rectype, txnid;
int make_call, ret;
@@ -88,6 +104,9 @@ __db_dispatch(dbenv, db, lsnp, redo, info)
memcpy(&txnid, (u_int8_t *)db->data + sizeof(rectype), sizeof(txnid));
make_call = ret = 0;
+ /* If we don't have a dispatch table, it's hard to dispatch. */
+ DB_ASSERT(dtab != NULL);
+
/*
* If we find a record that is in the user's number space and they
* have specified a recovery routine, let them handle it. If they
@@ -96,17 +115,30 @@ __db_dispatch(dbenv, db, lsnp, redo, info)
*/
switch (redo) {
case DB_TXN_ABORT:
- /*
- * XXX
- * db_printlog depends on DB_TXN_ABORT not examining the TXN
- * list. If that ever changes, fix db_printlog too.
- */
+ case DB_TXN_APPLY:
+ case DB_TXN_PRINT:
make_call = 1;
break;
case DB_TXN_OPENFILES:
- if (rectype == DB_log_register)
- return (dbenv->dtab[rectype](dbenv,
- db, lsnp, redo, info));
+ /*
+ * We collect all the transactions that have
+ * "begin" records, those with no previous LSN,
+ * so that we do not abort partial transactions.
+ * These are known to be undone, otherwise the
+ * log would not have been freeable.
+ */
+ memcpy(&prev_lsn, (u_int8_t *)db->data +
+ sizeof(rectype) + sizeof(txnid), sizeof(prev_lsn));
+ if (txnid != 0 && prev_lsn.file == 0 && (ret =
+ __db_txnlist_add(dbenv, info, txnid, TXN_OK, NULL)) != 0)
+ return (ret);
+
+ /* FALLTHROUGH */
+ case DB_TXN_POPENFILES:
+ if (rectype == DB___dbreg_register ||
+ rectype == DB___txn_child ||
+ rectype == DB___txn_ckp || rectype == DB___txn_recycle)
+ return (dtab[rectype](dbenv, db, lsnp, redo, info));
break;
case DB_TXN_BACKWARD_ROLL:
/*
@@ -117,43 +149,168 @@ __db_dispatch(dbenv, db, lsnp, redo, info)
* we've never seen it, then we call the appropriate recovery
* routine.
*
- * We need to always undo DB_db_noop records, so that we
+ * We need to always undo DB___db_noop records, so that we
* properly handle any aborts before the file was closed.
*/
- if (rectype == DB_log_register ||
- rectype == DB_txn_ckp || rectype == DB_db_noop
- || rectype == DB_txn_child || (txnid != 0 &&
- (ret = __db_txnlist_find(info, txnid)) != 0)) {
+ switch (rectype) {
+ case DB___txn_regop:
+ case DB___txn_recycle:
+ case DB___txn_ckp:
+ case DB___db_noop:
+ case DB___fop_file_remove:
+ case DB___txn_child:
make_call = 1;
- if (ret == DB_NOTFOUND && rectype != DB_txn_regop &&
- rectype != DB_txn_xa_regop && (ret =
- __db_txnlist_add(dbenv, info, txnid, 1)) != 0)
- return (ret);
+ break;
+
+ case DB___dbreg_register:
+ if (txnid == 0) {
+ make_call = 1;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ if (txnid != 0 && (ret =
+ __db_txnlist_find(dbenv,
+ info, txnid)) != TXN_COMMIT && ret != TXN_IGNORE) {
+ /*
+ * If not found then, this is an incomplete
+ * abort.
+ */
+ if (ret == TXN_NOTFOUND)
+ return (__db_txnlist_add(dbenv,
+ info, txnid, TXN_IGNORE, lsnp));
+ make_call = 1;
+ if (ret == TXN_OK &&
+ (ret = __db_txnlist_update(dbenv,
+ info, txnid,
+ rectype == DB___txn_xa_regop ?
+ TXN_PREPARE : TXN_ABORT, NULL)) != 0)
+ return (ret);
+ }
}
break;
case DB_TXN_FORWARD_ROLL:
/*
* In the forward pass, if we haven't seen the transaction,
- * do nothing, else recovery it.
+ * do nothing, else recover it.
*
- * We need to always redo DB_db_noop records, so that we
+ * We need to always redo DB___db_noop records, so that we
* properly handle any commits after the file was closed.
*/
- if (rectype == DB_log_register ||
- rectype == DB_txn_ckp ||
- rectype == DB_db_noop ||
- __db_txnlist_find(info, txnid) == 0)
+ switch (rectype) {
+ case DB___txn_recycle:
+ case DB___txn_ckp:
+ case DB___db_noop:
make_call = 1;
+ break;
+
+ default:
+ if (txnid != 0 && (ret = __db_txnlist_find(dbenv,
+ info, txnid)) == TXN_COMMIT)
+ make_call = 1;
+ else if (ret != TXN_IGNORE &&
+ (rectype == DB___ham_metagroup ||
+ rectype == DB___ham_groupalloc ||
+ rectype == DB___db_pg_alloc)) {
+ /*
+ * Because we cannot undo file extensions
+ * all allocation records must be reprocessed
+ * during rollforward in case the file was
+ * just created. It may not have been
+ * present during the backward pass.
+ */
+ make_call = 1;
+ redo = DB_TXN_BACKWARD_ALLOC;
+ } else if (rectype == DB___dbreg_register) {
+ /*
+ * This may be a transaction dbreg_register.
+ * If it is, we only make the call on a COMMIT,
+ * which we checked above. If it's not, then we
+ * should always make the call, because we need
+ * the file open information.
+ */
+ if (txnid == 0)
+ make_call = 1;
+ }
+ }
break;
+ case DB_TXN_GETPGNOS:
+ /*
+ * If this is one of DB's own log records, we simply
+ * dispatch.
+ */
+ if (rectype < DB_user_BEGIN) {
+ make_call = 1;
+ break;
+ }
+
+ /*
+ * If we're still here, this is a custom record in an
+ * application that's doing app-specific logging. Such a
+ * record doesn't have a getpgno function for the user
+ * dispatch function to call--the getpgnos functions return
+ * which pages replication needs to lock using the TXN_RECS
+ * structure, which is private and not something we want to
+ * document.
+ *
+ * Thus, we leave any necessary locking for the app's
+ * recovery function to do during the upcoming
+ * DB_TXN_APPLY. Fill in default getpgnos info (we need
+ * a stub entry for every log record that will get
+ * DB_TXN_APPLY'd) and return success.
+ */
+ return (__db_default_getpgnos(dbenv, lsnp, info));
+ case DB_TXN_BACKWARD_ALLOC:
default:
- return (__db_unknown_flag(dbenv, "__db_dispatch", redo));
+ return (__db_unknown_flag(
+ dbenv, "__db_dispatch", (u_int32_t)redo));
}
+ /*
+ * The switch statement uses ret to receive the return value of
+ * __db_txnlist_find, which returns a large number of different
+ * statuses, none of which we will be returning. For safety,
+ * let's reset this here in case we ever do a "return(ret)"
+ * below in the future.
+ */
+ ret = 0;
+
if (make_call) {
- if (rectype >= DB_user_BEGIN && dbenv->tx_recover != NULL)
- return (dbenv->tx_recover(dbenv, db, lsnp, redo));
- else
- return (dbenv->dtab[rectype](dbenv, db, lsnp, redo, info));
+ /*
+ * If the debug flag is set then we are logging
+ * records for a non-durable update so that they
+ * may be examined for diagnostic purposes.
+ * So only make the call if we are printing,
+ * otherwise we need to extract the previous
+ * lsn so undo will work properly.
+ */
+ if (rectype & DB_debug_FLAG) {
+ if (redo == DB_TXN_PRINT)
+ rectype &= ~DB_debug_FLAG;
+ else {
+ memcpy(lsnp,
+ (u_int8_t *)db->data +
+ sizeof(rectype) +
+ sizeof(txnid), sizeof(*lsnp));
+ return (0);
+ }
+ }
+ if (rectype >= DB_user_BEGIN && dbenv->app_dispatch != NULL)
+ return (dbenv->app_dispatch(dbenv, db, lsnp, redo));
+ else {
+ /*
+ * The size of the dtab table argument is the same as
+ * the standard table, use the standard table's size
+ * as our sanity check.
+ */
+ if (rectype > dtabsize || dtab[rectype] == NULL) {
+ __db_err(dbenv,
+ "Illegal record type %lu in log",
+ (u_long)rectype);
+ return (EINVAL);
+ }
+ return (dtab[rectype](dbenv, db, lsnp, redo, info));
+ }
}
return (0);
@@ -163,75 +320,102 @@ __db_dispatch(dbenv, db, lsnp, redo, info)
* __db_add_recovery --
*
* PUBLIC: int __db_add_recovery __P((DB_ENV *,
- * PUBLIC: int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), u_int32_t));
+ * PUBLIC: int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *,
+ * PUBLIC: int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), u_int32_t));
*/
int
-__db_add_recovery(dbenv, func, ndx)
+__db_add_recovery(dbenv, dtab, dtabsize, func, ndx)
DB_ENV *dbenv;
+ int (***dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsize;
int (*func) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
u_int32_t ndx;
{
- u_int32_t i, nsize;
+ size_t i, nsize;
int ret;
/* Check if we have to grow the table. */
- if (ndx >= dbenv->dtab_size) {
+ if (ndx >= *dtabsize) {
nsize = ndx + 40;
- if ((ret = __os_realloc(dbenv,
- nsize * sizeof(dbenv->dtab[0]), NULL, &dbenv->dtab)) != 0)
+ if ((ret =
+ __os_realloc(dbenv, nsize * sizeof((*dtab)[0]), dtab)) != 0)
return (ret);
- for (i = dbenv->dtab_size; i < nsize; ++i)
- dbenv->dtab[i] = NULL;
- dbenv->dtab_size = nsize;
+ for (i = *dtabsize; i < nsize; ++i)
+ (*dtab)[i] = NULL;
+ *dtabsize = nsize;
}
- dbenv->dtab[ndx] = func;
+ (*dtab)[ndx] = func;
return (0);
}
/*
- * __deprecated_recover --
- * Stub routine for deprecated recovery functions.
- *
- * PUBLIC: int __deprecated_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__deprecated_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- COMPQUIET(dbenv, NULL);
- COMPQUIET(dbtp, NULL);
- COMPQUIET(lsnp, NULL);
- COMPQUIET(op, 0);
- COMPQUIET(info, NULL);
- return (EINVAL);
-}
-
-/*
* __db_txnlist_init --
* Initialize transaction linked list.
*
- * PUBLIC: int __db_txnlist_init __P((DB_ENV *, void *));
+ * PUBLIC: int __db_txnlist_init __P((DB_ENV *,
+ * PUBLIC: u_int32_t, u_int32_t, DB_LSN *, void *));
*/
int
-__db_txnlist_init(dbenv, retp)
+__db_txnlist_init(dbenv, low_txn, hi_txn, trunc_lsn, retp)
DB_ENV *dbenv;
+ u_int32_t low_txn, hi_txn;
+ DB_LSN *trunc_lsn;
void *retp;
{
DB_TXNHEAD *headp;
+ u_int32_t size, tmp;
int ret;
- if ((ret = __os_malloc(dbenv, sizeof(DB_TXNHEAD), NULL, &headp)) != 0)
+ /*
+ * Size a hash table.
+ * If low is zero then we are being called during rollback
+ * and we need only one slot.
+ * Hi maybe lower than low if we have recycled txnid's.
+ * The numbers here are guesses about txn density, we can afford
+ * to look at a few entries in each slot.
+ */
+ if (low_txn == 0)
+ size = 1;
+ else {
+ if (hi_txn < low_txn) {
+ tmp = hi_txn;
+ hi_txn = low_txn;
+ low_txn = tmp;
+ }
+ tmp = hi_txn - low_txn;
+ /* See if we wrapped around. */
+ if (tmp > (TXN_MAXIMUM - TXN_MINIMUM) / 2)
+ tmp = (low_txn - TXN_MINIMUM) + (TXN_MAXIMUM - hi_txn);
+ size = tmp / 5;
+ if (size < 100)
+ size = 100;
+ }
+ if ((ret = __os_malloc(dbenv,
+ sizeof(DB_TXNHEAD) + size * sizeof(headp->head), &headp)) != 0)
return (ret);
- LIST_INIT(&headp->head);
- headp->maxid = 0;
- headp->generation = 1;
+ memset(headp, 0, sizeof(DB_TXNHEAD) + size * sizeof(headp->head));
+ headp->maxid = hi_txn;
+ headp->generation = 0;
+ headp->nslots = size;
+ headp->gen_alloc = 8;
+ if ((ret = __os_malloc(dbenv, headp->gen_alloc *
+ sizeof(headp->gen_array[0]), &headp->gen_array)) != 0) {
+ __os_free(dbenv, headp);
+ return (ret);
+ }
+ headp->gen_array[0].generation = 0;
+ headp->gen_array[0].txn_min = TXN_MINIMUM;
+ headp->gen_array[0].txn_max = TXN_MAXIMUM;
+ if (trunc_lsn != NULL) {
+ headp->trunc_lsn = *trunc_lsn;
+ headp->maxlsn = *trunc_lsn;
+ } else {
+ ZERO_LSN(headp->trunc_lsn);
+ ZERO_LSN(headp->maxlsn);
+ }
+ ZERO_LSN(headp->ckplsn);
*(void **)retp = headp;
return (0);
@@ -241,241 +425,255 @@ __db_txnlist_init(dbenv, retp)
* __db_txnlist_add --
* Add an element to our transaction linked list.
*
- * PUBLIC: int __db_txnlist_add __P((DB_ENV *, void *, u_int32_t, int32_t));
+ * PUBLIC: int __db_txnlist_add __P((DB_ENV *,
+ * PUBLIC: void *, u_int32_t, int32_t, DB_LSN *));
*/
int
-__db_txnlist_add(dbenv, listp, txnid, aborted)
+__db_txnlist_add(dbenv, listp, txnid, status, lsn)
DB_ENV *dbenv;
void *listp;
u_int32_t txnid;
- int32_t aborted;
+ int32_t status;
+ DB_LSN *lsn;
{
DB_TXNHEAD *hp;
DB_TXNLIST *elp;
int ret;
- if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), NULL, &elp)) != 0)
+ if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), &elp)) != 0)
return (ret);
hp = (DB_TXNHEAD *)listp;
- LIST_INSERT_HEAD(&hp->head, elp, links);
+ LIST_INSERT_HEAD(&hp->head[DB_TXNLIST_MASK(hp, txnid)], elp, links);
elp->type = TXNLIST_TXNID;
elp->u.t.txnid = txnid;
- elp->u.t.aborted = aborted;
+ elp->u.t.status = status;
+ elp->u.t.generation = hp->generation;
if (txnid > hp->maxid)
hp->maxid = txnid;
- elp->u.t.generation = hp->generation;
+ if (lsn != NULL && IS_ZERO_LSN(hp->maxlsn) && status == TXN_COMMIT)
+ hp->maxlsn = *lsn;
+
+ DB_ASSERT(lsn == NULL ||
+ status != TXN_COMMIT || log_compare(&hp->maxlsn, lsn) >= 0);
return (0);
}
+
/*
* __db_txnlist_remove --
* Remove an element from our transaction linked list.
*
- * PUBLIC: int __db_txnlist_remove __P((void *, u_int32_t));
+ * PUBLIC: int __db_txnlist_remove __P((DB_ENV *, void *, u_int32_t));
*/
int
-__db_txnlist_remove(listp, txnid)
+__db_txnlist_remove(dbenv, listp, txnid)
+ DB_ENV *dbenv;
void *listp;
u_int32_t txnid;
{
DB_TXNLIST *entry;
- return (__db_txnlist_find_internal(listp,
- TXNLIST_TXNID, txnid, NULL, &entry, 1));
+ return (__db_txnlist_find_internal(dbenv,
+ listp, TXNLIST_TXNID, txnid,
+ NULL, &entry, 1) == TXN_NOTFOUND ? TXN_NOTFOUND : TXN_OK);
}
-/* __db_txnlist_close --
- *
- * Call this when we close a file. It allows us to reconcile whether
- * we have done any operations on this file with whether the file appears
- * to have been deleted. If you never do any operations on a file, then
- * we assume it's OK to appear deleted.
+/*
+ * __db_txnlist_ckp --
+ * Used to record the maximum checkpoint that will be retained
+ * after recovery. Typically this is simply the max checkpoint, but
+ * if we are doing client replication recovery or timestamp-based
+ * recovery, we are going to virtually truncate the log and we need
+ * to retain the last checkpoint before the truncation point.
*
- * PUBLIC: int __db_txnlist_close __P((void *, int32_t, u_int32_t));
+ * PUBLIC: void __db_txnlist_ckp __P((DB_ENV *, void *, DB_LSN *));
*/
-
-int
-__db_txnlist_close(listp, lid, count)
+void
+__db_txnlist_ckp(dbenv, listp, ckp_lsn)
+ DB_ENV *dbenv;
void *listp;
- int32_t lid;
- u_int32_t count;
+ DB_LSN *ckp_lsn;
{
DB_TXNHEAD *hp;
- DB_TXNLIST *p;
+
+ COMPQUIET(dbenv, NULL);
hp = (DB_TXNHEAD *)listp;
- for (p = LIST_FIRST(&hp->head); p != NULL; p = LIST_NEXT(p, links)) {
- if (p->type == TXNLIST_DELETE)
- if (lid == p->u.d.fileid &&
- !F_ISSET(&p->u.d, TXNLIST_FLAG_CLOSED)) {
- p->u.d.count += count;
- return (0);
- }
- }
- return (0);
+ if (IS_ZERO_LSN(hp->ckplsn) && !IS_ZERO_LSN(hp->maxlsn) &&
+ log_compare(&hp->maxlsn, ckp_lsn) >= 0)
+ hp->ckplsn = *ckp_lsn;
}
/*
- * __db_txnlist_delete --
- *
- * Record that a file was missing or deleted. If the deleted
- * flag is set, then we've encountered a delete of a file, else we've
- * just encountered a file that is missing. The lid is the log fileid
- * and is only meaningful if deleted is not equal to 0.
+ * __db_txnlist_end --
+ * Discard transaction linked list.
*
- * PUBLIC: int __db_txnlist_delete __P((DB_ENV *,
- * PUBLIC: void *, char *, u_int32_t, int));
+ * PUBLIC: void __db_txnlist_end __P((DB_ENV *, void *));
*/
-int
-__db_txnlist_delete(dbenv, listp, name, lid, deleted)
+void
+__db_txnlist_end(dbenv, listp)
DB_ENV *dbenv;
void *listp;
- char *name;
- u_int32_t lid;
- int deleted;
{
DB_TXNHEAD *hp;
DB_TXNLIST *p;
- int ret;
-
- hp = (DB_TXNHEAD *)listp;
- for (p = LIST_FIRST(&hp->head); p != NULL; p = LIST_NEXT(p, links)) {
- if (p->type == TXNLIST_DELETE)
- if (strcmp(name, p->u.d.fname) == 0) {
- if (deleted)
- F_SET(&p->u.d, TXNLIST_FLAG_DELETED);
- else
- F_CLR(&p->u.d, TXNLIST_FLAG_CLOSED);
- return (0);
- }
- }
+ u_int32_t i;
- /* Need to add it. */
- if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), NULL, &p)) != 0)
- return (ret);
- LIST_INSERT_HEAD(&hp->head, p, links);
+ if ((hp = (DB_TXNHEAD *)listp) == NULL)
+ return;
- p->type = TXNLIST_DELETE;
- p->u.d.flags = 0;
- if (deleted)
- F_SET(&p->u.d, TXNLIST_FLAG_DELETED);
- p->u.d.fileid = lid;
- p->u.d.count = 0;
- ret = __os_strdup(dbenv, name, &p->u.d.fname);
+ for (i = 0; i < hp->nslots; i++)
+ while (hp != NULL && (p = LIST_FIRST(&hp->head[i])) != NULL) {
+ LIST_REMOVE(p, links);
+ switch (p->type) {
+ case TXNLIST_LSN:
+ __os_free(dbenv, p->u.l.lsn_array);
+ break;
+ case TXNLIST_DELETE:
+ case TXNLIST_PGNO:
+ case TXNLIST_TXNID:
+ default:
+ /*
+ * Possibly an incomplete DB_TXNLIST; just
+ * free it.
+ */
+ break;
+ }
+ __os_free(dbenv, p);
+ }
- return (ret);
+ if (hp->gen_array != NULL)
+ __os_free(dbenv, hp->gen_array);
+ __os_free(dbenv, listp);
}
/*
- * __db_txnlist_end --
- * Discard transaction linked list. Print out any error messages
- * for deleted files.
+ * __db_txnlist_find --
+ * Checks to see if a txnid with the current generation is in the
+ * txnid list. This returns TXN_NOTFOUND if the item isn't in the
+ * list otherwise it returns (like __db_txnlist_find_internal)
+ * the status of the transaction. A txnid of 0 means the record
+ * was generated while not in a transaction.
*
- * PUBLIC: void __db_txnlist_end __P((DB_ENV *, void *));
+ * PUBLIC: int __db_txnlist_find __P((DB_ENV *, void *, u_int32_t));
*/
-void
-__db_txnlist_end(dbenv, listp)
+int
+__db_txnlist_find(dbenv, listp, txnid)
DB_ENV *dbenv;
void *listp;
+ u_int32_t txnid;
{
- DB_TXNHEAD *hp;
- DB_TXNLIST *p;
- DB_LOG *lp;
+ DB_TXNLIST *entry;
- hp = (DB_TXNHEAD *)listp;
- lp = (DB_LOG *)dbenv->lg_handle;
- while (hp != NULL && (p = LIST_FIRST(&hp->head)) != NULL) {
- LIST_REMOVE(p, links);
- switch (p->type) {
- case TXNLIST_DELETE:
- /*
- * If we have a file that is not deleted and has
- * some operations, we flag the warning. Since
- * the file could still be open, we need to check
- * the actual log table as well.
- */
- if ((!F_ISSET(&p->u.d, TXNLIST_FLAG_DELETED) &&
- p->u.d.count != 0) ||
- (!F_ISSET(&p->u.d, TXNLIST_FLAG_CLOSED) &&
- p->u.d.fileid != (int32_t) TXNLIST_INVALID_ID &&
- p->u.d.fileid < lp->dbentry_cnt &&
- lp->dbentry[p->u.d.fileid].count != 0))
- __db_err(dbenv, "warning: %s: %s",
- p->u.d.fname, db_strerror(ENOENT));
- __os_freestr(p->u.d.fname);
- break;
- case TXNLIST_LSN:
- __os_free(p->u.l.lsn_array,
- p->u.l.maxn * sizeof(DB_LSN));
- break;
- default:
- /* Possibly an incomplete DB_TXNLIST; just free it. */
- break;
- }
- __os_free(p, sizeof(DB_TXNLIST));
- }
- __os_free(listp, sizeof(DB_TXNHEAD));
+ if (txnid == 0)
+ return (TXN_NOTFOUND);
+ return (__db_txnlist_find_internal(dbenv, listp,
+ TXNLIST_TXNID, txnid, NULL, &entry, 0));
}
/*
- * __db_txnlist_find --
- * Checks to see if a txnid with the current generation is in the
- * txnid list. This returns DB_NOTFOUND if the item isn't in the
- * list otherwise it returns (like __db_txnlist_find_internal) a
- * 1 or 0 indicating if the transaction is aborted or not. A txnid
- * of 0 means the record was generated while not in a transaction.
+ * __db_txnlist_update --
+ * Change the status of an existing transaction entry.
+ * Returns TXN_NOTFOUND if no such entry exists.
*
- * PUBLIC: int __db_txnlist_find __P((void *, u_int32_t));
+ * PUBLIC: int __db_txnlist_update __P((DB_ENV *,
+ * PUBLIC: void *, u_int32_t, int32_t, DB_LSN *));
*/
int
-__db_txnlist_find(listp, txnid)
+__db_txnlist_update(dbenv, listp, txnid, status, lsn)
+ DB_ENV *dbenv;
void *listp;
u_int32_t txnid;
+ int32_t status;
+ DB_LSN *lsn;
{
- DB_TXNLIST *entry;
+ DB_TXNHEAD *hp;
+ DB_TXNLIST *elp;
+ int ret;
if (txnid == 0)
- return (DB_NOTFOUND);
- return (__db_txnlist_find_internal(listp,
- TXNLIST_TXNID, txnid, NULL, &entry, 0));
+ return (TXN_NOTFOUND);
+ hp = (DB_TXNHEAD *)listp;
+ ret = __db_txnlist_find_internal(dbenv,
+ listp, TXNLIST_TXNID, txnid, NULL, &elp, 0);
+
+ if (ret == TXN_NOTFOUND || ret == TXN_IGNORE)
+ return (ret);
+ elp->u.t.status = status;
+
+ if (lsn != NULL && IS_ZERO_LSN(hp->maxlsn) && status == TXN_COMMIT)
+ hp->maxlsn = *lsn;
+
+ return (ret);
}
/*
* __db_txnlist_find_internal --
- * Find an entry on the transaction list.
- * If the entry is not there or the list pointeris not initialized
- * we return DB_NOTFOUND. If the item is found, we return the aborted
- * status (1 for aborted, 0 for not aborted). Currently we always call
- * this with an initialized list pointer but checking for NULL keeps it general.
+ * Find an entry on the transaction list. If the entry is not there or
+ * the list pointer is not initialized we return TXN_NOTFOUND. If the
+ * item is found, we return the status. Currently we always call this
+ * with an initialized list pointer but checking for NULL keeps it general.
*/
static int
-__db_txnlist_find_internal(listp, type, txnid, uid, txnlistp, delete)
+__db_txnlist_find_internal(dbenv, listp, type, txnid, uid, txnlistp, delete)
+ DB_ENV *dbenv;
void *listp;
db_txnlist_type type;
- u_int32_t txnid;
+ u_int32_t txnid;
u_int8_t uid[DB_FILE_ID_LEN];
DB_TXNLIST **txnlistp;
int delete;
{
+ struct __db_headlink *head;
DB_TXNHEAD *hp;
DB_TXNLIST *p;
+ u_int32_t generation, hash, i;
int ret;
if ((hp = (DB_TXNHEAD *)listp) == NULL)
- return (DB_NOTFOUND);
+ return (TXN_NOTFOUND);
+
+ switch (type) {
+ case TXNLIST_TXNID:
+ hash = txnid;
+ /* Find the most recent generation containing this ID */
+ for (i = 0; i <= hp->generation; i++)
+ /* The range may wrap around the end. */
+ if (hp->gen_array[i].txn_min <
+ hp->gen_array[i].txn_max ?
+ (txnid >= hp->gen_array[i].txn_min &&
+ txnid <= hp->gen_array[i].txn_max) :
+ (txnid >= hp->gen_array[i].txn_min ||
+ txnid <= hp->gen_array[i].txn_max))
+ break;
+ DB_ASSERT(i <= hp->generation);
+ generation = hp->gen_array[i].generation;
+ break;
+ case TXNLIST_PGNO:
+ memcpy(&hash, uid, sizeof(hash));
+ generation = 0;
+ break;
+ case TXNLIST_DELETE:
+ case TXNLIST_LSN:
+ default:
+ DB_ASSERT(0);
+ return (EINVAL);
+ }
+
+ head = &hp->head[DB_TXNLIST_MASK(hp, hash)];
- for (p = LIST_FIRST(&hp->head); p != NULL; p = LIST_NEXT(p, links)) {
+ for (p = LIST_FIRST(head); p != NULL; p = LIST_NEXT(p, links)) {
if (p->type != type)
continue;
switch (type) {
case TXNLIST_TXNID:
if (p->u.t.txnid != txnid ||
- hp->generation != p->u.t.generation)
+ generation != p->u.t.generation)
continue;
- ret = p->u.t.aborted;
+ ret = p->u.t.status;
break;
case TXNLIST_PGNO:
@@ -484,53 +682,81 @@ __db_txnlist_find_internal(listp, type, txnid, uid, txnlistp, delete)
ret = 0;
break;
+ case TXNLIST_DELETE:
+ case TXNLIST_LSN:
default:
DB_ASSERT(0);
ret = EINVAL;
}
if (delete == 1) {
LIST_REMOVE(p, links);
- __os_free(p, sizeof(DB_TXNLIST));
- } else if (p != LIST_FIRST(&hp->head)) {
+ __os_free(dbenv, p);
+ } else if (p != LIST_FIRST(head)) {
/* Move it to head of list. */
LIST_REMOVE(p, links);
- LIST_INSERT_HEAD(&hp->head, p, links);
+ LIST_INSERT_HEAD(head, p, links);
}
*txnlistp = p;
return (ret);
}
- return (DB_NOTFOUND);
+ return (TXN_NOTFOUND);
}
/*
* __db_txnlist_gen --
* Change the current generation number.
*
- * PUBLIC: void __db_txnlist_gen __P((void *, int));
+ * PUBLIC: int __db_txnlist_gen __P((DB_ENV *,
+ * PUBLIC: void *, int, u_int32_t, u_int32_t));
*/
-void
-__db_txnlist_gen(listp, incr)
+int
+__db_txnlist_gen(dbenv, listp, incr, min, max)
+ DB_ENV *dbenv;
void *listp;
int incr;
+ u_int32_t min, max;
{
DB_TXNHEAD *hp;
+ int ret;
/*
- * During recovery generation numbers keep track of how many "restart"
- * checkpoints we've seen. Restart checkpoints occur whenever we take
- * a checkpoint and there are no outstanding transactions. When that
- * happens, we can reset transaction IDs back to 1. It always happens
- * at recovery and it prevents us from exhausting the transaction IDs
- * name space.
+ * During recovery generation numbers keep track of "restart"
+ * checkpoints and recycle records. Restart checkpoints occur
+ * whenever we take a checkpoint and there are no outstanding
+ * transactions. When that happens, we can reset transaction IDs
+ * back to TXNID_MINIMUM. Currently we only do the reset
+ * at then end of recovery. Recycle records occrur when txnids
+ * are exhausted during runtime. A free range of ids is identified
+ * and logged. This code maintains a stack of ranges. A txnid
+ * is given the generation number of the first range it falls into
+ * in the stack.
*/
hp = (DB_TXNHEAD *)listp;
- hp->generation += incr;
+ if (incr < 0) {
+ --hp->generation;
+ memmove(hp->gen_array, &hp->gen_array[1],
+ (hp->generation + 1) * sizeof(hp->gen_array[0]));
+ } else {
+ ++hp->generation;
+ if (hp->generation >= hp->gen_alloc) {
+ hp->gen_alloc *= 2;
+ if ((ret = __os_realloc(dbenv, hp->gen_alloc *
+ sizeof(hp->gen_array[0]), &hp->gen_array)) != 0)
+ return (ret);
+ }
+ memmove(&hp->gen_array[1], &hp->gen_array[0],
+ hp->generation * sizeof(hp->gen_array[0]));
+ hp->gen_array[0].generation = hp->generation;
+ hp->gen_array[0].txn_min = min;
+ hp->gen_array[0].txn_max = max;
+ }
+ return (0);
}
#define TXN_BUBBLE(AP, MAX) { \
- int __j; \
DB_LSN __tmp; \
+ u_int32_t __j; \
\
for (__j = 0; __j < MAX - 1; __j++) \
if (log_compare(&AP[__j], &AP[__j + 1]) < 0) { \
@@ -542,10 +768,10 @@ __db_txnlist_gen(listp, incr)
/*
* __db_txnlist_lsnadd --
- * Add to or re-sort the transaction list lsn entry.
- * Note that since this is used during an abort, the __txn_undo
- * code calls into the "recovery" subsystem explicitly, and there
- * is only a single TXNLIST_LSN entry on the list.
+ * Add to or re-sort the transaction list lsn entry. Note that since this
+ * is used during an abort, the __txn_undo code calls into the "recovery"
+ * subsystem explicitly, and there is only a single TXNLIST_LSN entry on
+ * the list.
*
* PUBLIC: int __db_txnlist_lsnadd __P((DB_ENV *, void *, DB_LSN *, u_int32_t));
*/
@@ -558,23 +784,24 @@ __db_txnlist_lsnadd(dbenv, listp, lsnp, flags)
{
DB_TXNHEAD *hp;
DB_TXNLIST *elp;
- int i, ret;
+ u_int32_t i;
+ int ret;
hp = (DB_TXNHEAD *)listp;
- for (elp = LIST_FIRST(&hp->head);
+ for (elp = LIST_FIRST(&hp->head[0]);
elp != NULL; elp = LIST_NEXT(elp, links))
if (elp->type == TXNLIST_LSN)
break;
if (elp == NULL)
- return (EINVAL);
+ return (DB_SURPRISE_KID);
if (LF_ISSET(TXNLIST_NEW)) {
if (elp->u.l.ntxns >= elp->u.l.maxn) {
if ((ret = __os_realloc(dbenv,
2 * elp->u.l.maxn * sizeof(DB_LSN),
- NULL, &elp->u.l.lsn_array)) != 0)
+ &elp->u.l.lsn_array)) != 0)
return (ret);
elp->u.l.maxn *= 2;
}
@@ -584,9 +811,9 @@ __db_txnlist_lsnadd(dbenv, listp, lsnp, flags)
elp->u.l.lsn_array[0] = *lsnp;
/*
- * If we just added a new entry and there may be NULL
- * entries, so we have to do a complete bubble sort,
- * not just trickle a changed entry around.
+ * If we just added a new entry and there may be NULL entries, so we
+ * have to do a complete bubble sort, not just trickle a changed entry
+ * around.
*/
for (i = 0; i < (!LF_ISSET(TXNLIST_NEW) ? 1 : elp->u.l.ntxns); i++)
TXN_BUBBLE(elp->u.l.lsn_array, elp->u.l.ntxns);
@@ -597,35 +824,6 @@ __db_txnlist_lsnadd(dbenv, listp, lsnp, flags)
}
/*
- * __db_txnlist_lsnhead --
- * Return a pointer to the beginning of the lsn_array.
- *
- * PUBLIC: int __db_txnlist_lsnhead __P((void *, DB_LSN **));
- */
-int
-__db_txnlist_lsnhead(listp, lsnpp)
- void *listp;
- DB_LSN **lsnpp;
-{
- DB_TXNHEAD *hp;
- DB_TXNLIST *elp;
-
- hp = (DB_TXNHEAD *)listp;
-
- for (elp = LIST_FIRST(&hp->head);
- elp != NULL; elp = LIST_NEXT(elp, links))
- if (elp->type == TXNLIST_LSN)
- break;
-
- if (elp == NULL)
- return (EINVAL);
-
- *lsnpp = &elp->u.l.lsn_array[0];
-
- return (0);
-}
-
-/*
* __db_txnlist_lsninit --
* Initialize a transaction list with an lsn array entry.
*
@@ -642,12 +840,12 @@ __db_txnlist_lsninit(dbenv, hp, lsnp)
elp = NULL;
- if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), NULL, &elp)) != 0)
+ if ((ret = __os_malloc(dbenv, sizeof(DB_TXNLIST), &elp)) != 0)
goto err;
- LIST_INSERT_HEAD(&hp->head, elp, links);
+ LIST_INSERT_HEAD(&hp->head[0], elp, links);
if ((ret = __os_malloc(dbenv,
- 12 * sizeof(DB_LSN), NULL, &elp->u.l.lsn_array)) != 0)
+ 12 * sizeof(DB_LSN), &elp->u.l.lsn_array)) != 0)
goto err;
elp->type = TXNLIST_LSN;
elp->u.l.maxn = 12;
@@ -662,8 +860,7 @@ err: __db_txnlist_end(dbenv, hp);
/*
* __db_add_limbo -- add pages to the limbo list.
- * Get the file information and call pgnoadd
- * for each page.
+ * Get the file information and call pgnoadd for each page.
*
* PUBLIC: int __db_add_limbo __P((DB_ENV *,
* PUBLIC: void *, int32_t, db_pgno_t, int32_t));
@@ -681,7 +878,7 @@ __db_add_limbo(dbenv, info, fileid, pgno, count)
int ret;
dblp = dbenv->lg_handle;
- if ((ret = __log_lid_to_fname(dblp, fileid, &fnp)) != 0)
+ if ((ret = __dbreg_id_to_fname(dblp, fileid, 0, &fnp)) != 0)
return (ret);
do {
@@ -698,201 +895,524 @@ __db_add_limbo(dbenv, info, fileid, pgno, count)
/*
* __db_do_the_limbo -- move pages from limbo to free.
*
- * If we are in recovery we add things to the free list without
- * logging becasue we want to incrementaly apply logs that
- * may be generated on another copy of this environment.
- * Otherwise we just call __db_free to put the pages on
- * the free list and log the activity.
+ * Limbo processing is what ensures that we correctly handle and
+ * recover from page allocations. During recovery, for each database,
+ * we process each in-question allocation, link them into the free list
+ * and then write out the new meta-data page that contains the pointer
+ * to the new beginning of the free list. On an abort, we use our
+ * standard __db_free mechanism in a compensating transaction which logs
+ * the specific modifications to the free list.
+ *
+ * If we run out of log space during an abort, then we can't write the
+ * compensating transaction, so we abandon the idea of a compenating
+ * transaction, and go back to processing how we do during recovery.
+ * The reason that this is not the norm is that it's expensive: it requires
+ * that we flush any database with an in-question allocation. Thus if
+ * a compensating transaction fails, we never try to restart it.
+ *
+ * Since files may be open and closed within transactions (in particular,
+ * the master database for subdatabases), we must be prepared to open
+ * files during this process. If there is a compensating transaction, we
+ * can open the files in that transaction. If this was an abort and there
+ * is no compensating transaction, then we've got to perform these opens
+ * in the context of the aborting transaction so that we do not deadlock.
+ * During recovery, there's no locking, so this isn't an issue.
*
- * PUBLIC: int __db_do_the_limbo __P((DB_ENV *, DB_TXNHEAD *));
+ * What you want to keep in mind when reading this is that there are two
+ * algorithms going on here: ctxn == NULL, then we're either in recovery
+ * or our compensating transaction has failed and we're doing the
+ * "create list and write meta-data page" algorithm. Otherwise, we're in
+ * an abort and doing the "use compensating transaction" algorithm.
+ *
+ * PUBLIC: int __db_do_the_limbo __P((DB_ENV *,
+ * PUBLIC: DB_TXN *, DB_TXN *, DB_TXNHEAD *, db_limbo_state));
*/
int
-__db_do_the_limbo(dbenv, hp)
+__db_do_the_limbo(dbenv, ptxn, txn, hp, state)
DB_ENV *dbenv;
+ DB_TXN *ptxn, *txn;
DB_TXNHEAD *hp;
+ db_limbo_state state;
{
- DB *dbp;
- DBC *dbc;
- DBMETA *meta;
- DB_TXN *txn;
DB_TXNLIST *elp;
- PAGE *pagep;
- db_pgno_t last_pgno, pgno;
- int i, in_recover, put_page, ret, t_ret;
+ u_int32_t h;
+ int ret;
- dbp = NULL;
- dbc = NULL;
- txn = NULL;
ret = 0;
+ /*
+ * The slots correspond to hash buckets. We've hashed the
+ * fileids into hash buckets and need to pick up all affected
+ * files. (There will only be a single slot for an abort.)
+ */
+ for (h = 0; h < hp->nslots; h++) {
+ if ((elp = LIST_FIRST(&hp->head[h])) == NULL)
+ continue;
+ if (ptxn != NULL) {
+ if ((ret =
+ __db_limbo_move(dbenv, ptxn, txn, elp)) != 0)
+ goto err;
+ } else if ((ret =
+ __db_limbo_bucket(dbenv, txn, elp, state)) != 0)
+ goto err;
+ }
+
+err: if (ret != 0) {
+ __db_err(dbenv, "Fatal error in abort of an allocation");
+ ret = __db_panic(dbenv, ret);
+ }
+
+ return (ret);
+}
- /* Are we in recovery? */
- in_recover = F_ISSET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+/* Limbo support routines. */
- for (elp = LIST_FIRST(&hp->head);
- elp != NULL; elp = LIST_NEXT(elp, links)) {
+/*
+ * __db_lock_move --
+ * Move a lock from child to parent.
+ */
+static int
+__db_lock_move(dbenv, fileid, pgno, mode, ptxn, txn)
+ DB_ENV *dbenv;
+ u_int8_t *fileid;
+ db_pgno_t pgno;
+ db_lockmode_t mode;
+ DB_TXN *ptxn, *txn;
+{
+ DBT lock_dbt;
+ DB_LOCK lock;
+ DB_LOCK_ILOCK lock_obj;
+ DB_LOCKREQ req;
+ int ret;
+
+ lock_obj.pgno = pgno;
+ memcpy(lock_obj.fileid, fileid, DB_FILE_ID_LEN);
+ lock_obj.type = DB_PAGE_LOCK;
+
+ memset(&lock_dbt, 0, sizeof(lock_dbt));
+ lock_dbt.data = &lock_obj;
+ lock_dbt.size = sizeof(lock_obj);
+
+ if ((ret = __lock_get(dbenv,
+ txn->txnid, 0, &lock_dbt, mode, &lock)) == 0) {
+ memset(&req, 0, sizeof(req));
+ req.lock = lock;
+ req.op = DB_LOCK_TRADE;
+ ret = __lock_vec(dbenv, ptxn->txnid, 0, &req, 1, NULL);
+ }
+ return (ret);
+}
+
+/*
+ * __db_limbo_move
+ * Move just the metapage lock to the parent.
+ */
+static int
+__db_limbo_move(dbenv, ptxn, txn, elp)
+ DB_ENV *dbenv;
+ DB_TXN *ptxn, *txn;
+ DB_TXNLIST *elp;
+{
+ int ret;
+
+ for (; elp != NULL; elp = LIST_NEXT(elp, links)) {
+ if (elp->type != TXNLIST_PGNO || elp->u.p.locked == 1)
+ continue;
+ if ((ret = __db_lock_move(dbenv, elp->u.p.uid,
+ PGNO_BASE_MD, DB_LOCK_WRITE, ptxn, txn)) != 0)
+ return (ret);
+ elp->u.p.locked = 1;
+ }
+
+ return (0);
+}
+/*
+ * __db_limbo_bucket
+ * Perform limbo processing for a single hash bucket in the txnlist.
+ * txn is the transaction aborting in the case of an abort and ctxn is the
+ * compensating transaction.
+ */
+
+#define T_RESTORED(txn) ((txn) != NULL && F_ISSET(txn, TXN_RESTORED))
+static int
+__db_limbo_bucket(dbenv, txn, elp, state)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ DB_TXNLIST *elp;
+ db_limbo_state state;
+{
+ DB *dbp;
+ DB_MPOOLFILE *mpf;
+ DBMETA *meta;
+ DB_TXN *ctxn, *t;
+ db_pgno_t last_pgno, pgno;
+ int dbp_created, in_retry, ret, t_ret;
+
+ ctxn = NULL;
+ in_retry = 0;
+ meta = NULL;
+ mpf = NULL;
+ ret = 0;
+ for (; elp != NULL; elp = LIST_NEXT(elp, links)) {
if (elp->type != TXNLIST_PGNO)
continue;
+retry: dbp_created = 0;
+
+ /*
+ * Pick the transaction in which to potentially
+ * log compensations.
+ */
+ if (state == LIMBO_PREPARE)
+ ctxn = txn;
+ else if (!in_retry && state != LIMBO_RECOVER &&
+ state != LIMBO_TIMESTAMP && !T_RESTORED(txn) &&
+ (ret = __txn_compensate_begin(dbenv, &ctxn)) != 0)
+ return (ret);
+
+ /*
+ * Either use the compensating transaction or
+ * the one passed in, which will be null if recovering.
+ */
+ t = ctxn == NULL ? txn : ctxn;
+
+ /* First try to get a dbp by fileid. */
+ ret = __dbreg_id_to_db(dbenv, t, &dbp, elp->u.p.fileid, 0);
+
+ /*
+ * File is being destroyed. No need to worry about
+ * dealing with recovery of allocations.
+ */
+ if (ret == DB_DELETED ||
+ (ret == 0 && F_ISSET(dbp, DB_AM_DISCARD)))
+ goto next;
- if (in_recover) {
+ if (ret != 0) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
goto err;
/*
- * It is ok if the file is nolonger there.
+ * This tells the system not to lock, which is always
+ * OK, whether this is an abort or recovery.
*/
- dbp->type = DB_UNKNOWN;
- ret = __db_dbopen(dbp,
- elp->u.p.fname, 0, __db_omode("rw----"), 0);
- } else {
- /*
- * If we are in transaction undo, then we know
- * the fileid is still correct.
- */
- if ((ret =
- __db_fileid_to_db(dbenv, &dbp,
- elp->u.p.fileid, 0)) != 0 && ret != DB_DELETED)
- goto err;
- /* File is being destroyed. */
- if (F_ISSET(dbp, DB_AM_DISCARD))
- ret = DB_DELETED;
+ F_SET(dbp, DB_AM_COMPENSATE);
+ dbp_created = 1;
+
+ /* It is ok if the file is nolonger there. */
+ ret = __db_open(dbp,
+ t, elp->u.p.fname, NULL, DB_UNKNOWN,
+ DB_ODDFILESIZE, __db_omode("rw----"), PGNO_BASE_MD);
+ if (ret == ENOENT)
+ goto next;
}
+
/*
* Verify that we are opening the same file that we were
* referring to when we wrote this log record.
*/
- if (ret == 0 &&
- memcmp(elp->u.p.uid, dbp->fileid, DB_FILE_ID_LEN) == 0) {
- last_pgno = PGNO_INVALID;
- if (in_recover) {
- pgno = PGNO_BASE_MD;
- if ((ret = memp_fget(dbp->mpf,
- &pgno, 0, (PAGE **)&meta)) != 0)
- goto err;
- last_pgno = meta->free;
- /*
- * Check to see if the head of the free
- * list is any of the pages we are about
- * to link in. We could have crashed
- * after linking them in and before writing
- * a checkpoint.
- * It may not be the last one since
- * any page may get reallocated before here.
- */
- if (last_pgno != PGNO_INVALID)
- for (i = 0; i < elp->u.p.nentries; i++)
- if (last_pgno
- == elp->u.p.pgno_array[i])
- goto done_it;
- }
+ if (memcmp(elp->u.p.uid, dbp->fileid, DB_FILE_ID_LEN) != 0)
+ goto next;
- for (i = 0; i < elp->u.p.nentries; i++) {
- pgno = elp->u.p.pgno_array[i];
- if ((ret = memp_fget(dbp->mpf,
- &pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto err;
+ mpf = dbp->mpf;
+ last_pgno = PGNO_INVALID;
- put_page = 1;
- if (IS_ZERO_LSN(LSN(pagep))) {
- P_INIT(pagep, dbp->pgsize,
- pgno, PGNO_INVALID,
- last_pgno, 0, P_INVALID);
-
- if (in_recover) {
- LSN(pagep) = LSN(meta);
- last_pgno = pgno;
- } else {
- /*
- * Starting the transaction
- * is postponed until we know
- * we have something to do.
- */
- if (txn == NULL &&
- (ret = txn_begin(dbenv,
- NULL, &txn, 0)) != 0)
- goto err;
-
- if (dbc == NULL &&
- (ret = dbp->cursor(dbp,
- txn, &dbc, 0)) != 0)
- goto err;
- /* Turn off locking. */
- F_SET(dbc, DBC_COMPENSATE);
-
- /* __db_free puts the page. */
- if ((ret =
- __db_free(dbc, pagep)) != 0)
- goto err;
- put_page = 0;
- }
- }
+ if (ctxn == NULL || state == LIMBO_COMPENSATE) {
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ goto err;
+ last_pgno = meta->free;
+ }
- if (put_page == 1 &&
- (ret = memp_fput(dbp->mpf,
- pagep, DB_MPOOL_DIRTY)) != 0)
- goto err;
- }
- if (in_recover) {
- if (last_pgno == meta->free) {
-done_it:
- if ((ret =
- memp_fput(dbp->mpf, meta, 0)) != 0)
- goto err;
- } else {
- /*
- * Flush the new free list then
- * update the metapage. This is
- * unlogged so we cannot have the
- * metapage pointing at pages that
- * are not on disk.
- */
- dbp->sync(dbp, 0);
- meta->free = last_pgno;
- if ((ret = memp_fput(dbp->mpf,
- meta, DB_MPOOL_DIRTY)) != 0)
- goto err;
- }
- }
- if (dbc != NULL && (ret = dbc->c_close(dbc)) != 0)
+ if (state == LIMBO_PREPARE) {
+ if ((ret = __db_limbo_prepare(dbp, ctxn, elp)) != 0)
+ goto err;
+ } else
+ ret = __db_limbo_fix(dbp,
+ ctxn, elp, &last_pgno, meta, state);
+ /*
+ * If we were doing compensating transactions, then we are
+ * going to hope this error was due to running out of space.
+ * We'll change modes (into the sync the file mode) and keep
+ * trying. If we weren't doing compensating transactions,
+ * then this is a real error and we're sunk.
+ */
+ if (ret != 0) {
+ if (ret == DB_RUNRECOVERY || ctxn == NULL)
+ goto err;
+ in_retry = 1;
+ goto retry;
+ }
+
+ if (state == LIMBO_PREPARE)
+ ctxn = NULL;
+
+ else if (ctxn != NULL) {
+ /*
+ * We only force compensation at the end of recovery.
+ * We want the txn_commit to be logged so turn
+ * off the recovery flag briefly.
+ */
+ if (state == LIMBO_COMPENSATE)
+ F_CLR(
+ (DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ ret = __txn_commit(ctxn, DB_TXN_NOSYNC);
+ ctxn = NULL;
+ if (state == LIMBO_COMPENSATE)
+ F_SET(
+ (DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ if (ret != 0)
+ goto retry;
+ }
+
+ /*
+ * This is where we handle the case where we're explicitly
+ * putting together a free list. We need to decide whether
+ * we have to write the meta-data page, and if we do, then
+ * we need to sync it as well.
+ */
+ else if (last_pgno == meta->free) {
+ /* No change to page; just put the page back. */
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto err;
+ meta = NULL;
+ } else {
+ /*
+ * These changes are unlogged so we cannot have the
+ * metapage pointing at pages that are not on disk.
+ * Therefore, we flush the new free list, then update
+ * the metapage. We have to put the meta-data page
+ * first so that it isn't pinned when we try to sync.
+ */
+ if (!IS_RECOVERING(dbenv) && !T_RESTORED(txn))
+ __db_err(dbenv, "Flushing free list to disk");
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto err;
+ meta = NULL;
+ if ((ret = __db_sync(dbp)) != 0)
goto err;
- dbc = NULL;
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
+ goto err;
+ meta->free = last_pgno;
+ if ((ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
+ goto err;
+ meta = NULL;
}
- if (in_recover && (t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
+
+next:
+ /*
+ * If we get here, either we have processed the list
+ * or the db file has been deleted or could not be opened.
+ */
+ if (ctxn != NULL &&
+ (t_ret = __txn_abort(ctxn)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (dbp_created &&
+ (t_ret = __db_close(dbp, txn, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
dbp = NULL;
- __os_free(elp->u.p.fname, 0);
- __os_free(elp->u.p.pgno_array, 0);
+ if (state != LIMBO_PREPARE && state != LIMBO_TIMESTAMP) {
+ __os_free(dbenv, elp->u.p.fname);
+ __os_free(dbenv, elp->u.p.pgno_array);
+ }
if (ret == ENOENT)
ret = 0;
else if (ret != 0)
goto err;
}
- if (txn != NULL) {
- ret = txn_commit(txn, 0);
- txn = NULL;
+err: if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+ return (ret);
+}
+
+/*
+ * __db_limbo_fix --
+ * Process a single limbo entry which describes all the page allocations
+ * for a single file.
+ */
+static int
+__db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)
+ DB *dbp;
+ DB_TXN *ctxn;
+ DB_TXNLIST *elp;
+ db_pgno_t *lastp;
+ DBMETA *meta;
+ db_limbo_state state;
+{
+ DBC *dbc;
+ DBT ldbt;
+ DB_MPOOLFILE *mpf;
+ PAGE *freep, *pagep;
+ db_pgno_t next, pgno;
+ u_int32_t i;
+ int put_page, ret, t_ret;
+
+ /*
+ * Loop through the entries for this txnlist element and
+ * either link them into the free list or write a compensating
+ * record for each.
+ */
+ dbc = NULL;
+ mpf = dbp->mpf;
+ pagep = NULL;
+ put_page = ret = 0;
+
+ for (i = 0; i < elp->u.p.nentries; i++) {
+ pgno = elp->u.p.pgno_array[i];
+
+ if (pgno == PGNO_INVALID)
+ continue;
+
+ if ((ret =
+ __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if (ret != ENOSPC)
+ goto err;
+ continue;
+ }
+ put_page = 1;
+
+ if (state == LIMBO_COMPENSATE || IS_ZERO_LSN(LSN(pagep))) {
+ if (ctxn == NULL) {
+ /*
+ * If this is a fatal recovery which
+ * spans a previous crash this page may
+ * be on the free list already.
+ */
+ for (next = *lastp; next != 0; ) {
+ if (next == pgno)
+ break;
+ if ((ret = __memp_fget(mpf,
+ &next, 0, &freep)) != 0)
+ goto err;
+ next = NEXT_PGNO(freep);
+ if ((ret =
+ __memp_fput(mpf, freep, 0)) != 0)
+ goto err;
+ }
+
+ if (next != pgno) {
+ P_INIT(pagep, dbp->pgsize, pgno,
+ PGNO_INVALID, *lastp, 0, P_INVALID);
+ /* Make the lsn non-zero but generic. */
+ INIT_LSN(LSN(pagep));
+ *lastp = pgno;
+ }
+ } else if (state == LIMBO_COMPENSATE) {
+ /*
+ * Generate a log record for what we did
+ * on the LIMBO_TIMESTAMP pass. All pages
+ * here are free so P_OVERHEAD is sufficent.
+ */
+ ZERO_LSN(pagep->lsn);
+ memset(&ldbt, 0, sizeof(ldbt));
+ ldbt.data = pagep;
+ ldbt.size = P_OVERHEAD(dbp);
+ if ((ret = __db_pg_new_log(dbp, ctxn,
+ &LSN(meta), 0, pagep->pgno,
+ &LSN(meta), PGNO_BASE_MD,
+ &ldbt, pagep->next_pgno)) != 0)
+ goto err;
+ } else {
+ if (dbc == NULL && (ret =
+ __db_cursor(dbp, ctxn, &dbc, 0)) != 0)
+ goto err;
+ /*
+ * If the dbp is compensating (because we
+ * opened it), the dbc will automatically be
+ * marked compensating, but in case we didn't
+ * do the open, we have to mark it explicitly.
+ */
+ F_SET(dbc, DBC_COMPENSATE);
+ ret = __db_free(dbc, pagep);
+ put_page = 0;
+ /*
+ * On any error, we hope that the error was
+ * caused due to running out of space, and we
+ * switch modes, doing the processing where we
+ * sync out files instead of doing compensating
+ * transactions. If this was a real error and
+ * not out of space, we assume that some other
+ * call will fail real soon.
+ */
+ if (ret != 0) {
+ /* Assume that this is out of space. */
+ (void)__db_c_close(dbc);
+ dbc = NULL;
+ goto err;
+ }
+ }
+ }
+ else
+ elp->u.p.pgno_array[i] = PGNO_INVALID;
+
+ if (put_page == 1) {
+ ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
+ put_page = 0;
+ }
+ if (ret != 0)
+ goto err;
}
-err:
- if (dbc != NULL)
- (void)dbc->c_close(dbc);
- if (in_recover && dbp != NULL)
- (void)dbp->close(dbp, 0);
- if (txn != NULL)
- (void)txn_abort(txn);
+
+err: if (put_page &&
+ (t_ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ ret = t_ret;
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
return (ret);
+}
+static int
+__db_limbo_prepare(dbp, txn, elp)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_TXNLIST *elp;
+{
+ DB_LSN lsn;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ u_int32_t i;
+ int ret, t_ret;
+
+ /*
+ * Loop through the entries for this txnlist element and
+ * output a prepare record for them.
+ */
+ pagep = NULL;
+ ret = 0;
+ mpf = dbp->mpf;
+
+ for (i = 0; i < elp->u.p.nentries; i++) {
+ pgno = elp->u.p.pgno_array[i];
+
+ if ((ret =
+ __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if (ret != ENOSPC)
+ return (ret);
+ continue;
+ }
+
+ if (IS_ZERO_LSN(LSN(pagep)))
+ ret = __db_pg_prepare_log(dbp, txn, &lsn, 0, pgno);
+
+ if ((t_ret = __memp_fput(mpf, pagep, 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (ret != 0)
+ return (ret);
+ }
+
+ return (0);
}
-#define DB_TXNLIST_MAX_PGNO 8 /* A nice even number. */
+#define DB_TXNLIST_MAX_PGNO 8 /* A nice even number. */
/*
* __db_txnlist_pgnoadd --
- * Find the txnlist entry for a file and add this pgno,
- * or add the list entry for the file and then add the pgno.
- *
- * PUBLIC: int __db_txnlist_pgnoadd __P((DB_ENV *, DB_TXNHEAD *,
- * PUBLIC: int32_t, u_int8_t [DB_FILE_ID_LEN], char *, db_pgno_t));
+ * Find the txnlist entry for a file and add this pgno, or add the list
+ * entry for the file and then add the pgno.
*/
-int
+static int
__db_txnlist_pgnoadd(dbenv, hp, fileid, uid, fname, pgno)
DB_ENV *dbenv;
DB_TXNHEAD *hp;
@@ -902,34 +1422,40 @@ __db_txnlist_pgnoadd(dbenv, hp, fileid, uid, fname, pgno)
db_pgno_t pgno;
{
DB_TXNLIST *elp;
- int len, ret;
+ size_t len;
+ u_int32_t hash;
+ int ret;
elp = NULL;
- if (__db_txnlist_find_internal(hp, TXNLIST_PGNO, 0, uid, &elp, 0) != 0) {
+ if (__db_txnlist_find_internal(dbenv, hp,
+ TXNLIST_PGNO, 0, uid, &elp, 0) != 0) {
if ((ret =
- __os_malloc(dbenv, sizeof(DB_TXNLIST), NULL, &elp)) != 0)
+ __os_malloc(dbenv, sizeof(DB_TXNLIST), &elp)) != 0)
goto err;
- LIST_INSERT_HEAD(&hp->head, elp, links);
+ memcpy(&hash, uid, sizeof(hash));
+ LIST_INSERT_HEAD(
+ &hp->head[DB_TXNLIST_MASK(hp, hash)], elp, links);
elp->u.p.fileid = fileid;
memcpy(elp->u.p.uid, uid, DB_FILE_ID_LEN);
len = strlen(fname) + 1;
- if ((ret = __os_malloc(dbenv, len, NULL, &elp->u.p.fname)) != 0)
+ if ((ret = __os_malloc(dbenv, len, &elp->u.p.fname)) != 0)
goto err;
memcpy(elp->u.p.fname, fname, len);
elp->u.p.maxentry = 0;
+ elp->u.p.locked = 0;
elp->type = TXNLIST_PGNO;
if ((ret = __os_malloc(dbenv,
- 8 * sizeof(db_pgno_t), NULL, &elp->u.p.pgno_array)) != 0)
+ 8 * sizeof(db_pgno_t), &elp->u.p.pgno_array)) != 0)
goto err;
elp->u.p.maxentry = DB_TXNLIST_MAX_PGNO;
elp->u.p.nentries = 0;
} else if (elp->u.p.nentries == elp->u.p.maxentry) {
elp->u.p.maxentry <<= 1;
if ((ret = __os_realloc(dbenv, elp->u.p.maxentry *
- sizeof(db_pgno_t), NULL, &elp->u.p.pgno_array)) != 0)
+ sizeof(db_pgno_t), &elp->u.p.pgno_array)) != 0)
goto err;
}
@@ -941,6 +1467,40 @@ err: __db_txnlist_end(dbenv, hp);
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * __db_default_getpgnos --
+ * Fill in default getpgnos information for an application-specific
+ * log record.
+ *
+ * PUBLIC: int __db_default_getpgnos __P((DB_ENV *, DB_LSN *lsnp, void *));
+ */
+int
+__db_default_getpgnos(dbenv, lsnp, summary)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif
+
#ifdef DEBUG
/*
* __db_txnlist_print --
@@ -954,30 +1514,52 @@ __db_txnlist_print(listp)
{
DB_TXNHEAD *hp;
DB_TXNLIST *p;
+ u_int32_t i;
+ char *txntype;
hp = (DB_TXNHEAD *)listp;
printf("Maxid: %lu Generation: %lu\n",
(u_long)hp->maxid, (u_long)hp->generation);
- for (p = LIST_FIRST(&hp->head); p != NULL; p = LIST_NEXT(p, links)) {
- switch (p->type) {
- case TXNLIST_TXNID:
- printf("TXNID: %lu(%lu)\n",
- (u_long)p->u.t.txnid, (u_long)p->u.t.generation);
- break;
- case TXNLIST_DELETE:
- printf("FILE: %s id=%d ops=%d %s %s\n",
- p->u.d.fname, p->u.d.fileid, p->u.d.count,
- F_ISSET(&p->u.d, TXNLIST_FLAG_DELETED) ?
- "(deleted)" : "(missing)",
- F_ISSET(&p->u.d, TXNLIST_FLAG_CLOSED) ?
- "(closed)" : "(open)");
-
- break;
- default:
- printf("Unrecognized type: %d\n", p->type);
- break;
+ for (i = 0; i < hp->nslots; i++)
+ for (p = LIST_FIRST(&hp->head[i]);
+ p != NULL; p = LIST_NEXT(p, links)) {
+ if (p->type != TXNLIST_TXNID) {
+ printf("Unrecognized type: %d\n", p->type);
+ continue;
+ }
+ switch (p->u.t.status) {
+ case TXN_OK:
+ txntype = "OK";
+ break;
+ case TXN_COMMIT:
+ txntype = "commit";
+ break;
+ case TXN_PREPARE:
+ txntype = "prepare";
+ break;
+ case TXN_ABORT:
+ txntype = "abort";
+ break;
+ case TXN_NOTFOUND:
+ txntype = "notfound";
+ break;
+ case TXN_IGNORE:
+ txntype = "ignore";
+ break;
+ case TXN_EXPECTED:
+ txntype = "expected";
+ break;
+ case TXN_UNEXPECTED:
+ txntype = "unexpected";
+ break;
+ default:
+ txntype = "UNKNOWN";
+ break;
+ }
+ printf("TXNID: %lx(%lu): %s\n",
+ (u_long)p->u.t.txnid,
+ (u_long)p->u.t.generation, txntype);
}
- }
}
#endif
diff --git a/db/db/db_dup.c b/db/db/db_dup.c
index 6d8b2df95..9ea8a7e23 100644
--- a/db/db/db_dup.c
+++ b/db/db/db_dup.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_dup.c,v 11.18 2000/11/30 00:58:32 ubell Exp $";
+static const char revid[] = "$Id: db_dup.c,v 11.36 2003/06/30 17:19:44 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,12 +18,11 @@ static const char revid[] = "$Id: db_dup.c,v 11.18 2000/11/30 00:58:32 ubell Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "lock.h"
-#include "db_am.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/db_am.h"
/*
* __db_ditem --
@@ -39,19 +38,20 @@ __db_ditem(dbc, pagep, indx, nbytes)
{
DB *dbp;
DBT ldbt;
- db_indx_t cnt, offset;
+ db_indx_t cnt, *inp, offset;
int ret;
u_int8_t *from;
dbp = dbc->dbp;
- if (DB_LOGGING(dbc)) {
- ldbt.data = P_ENTRY(pagep, indx);
+ if (DBC_LOGGING(dbc)) {
+ ldbt.data = P_ENTRY(dbp, pagep, indx);
ldbt.size = nbytes;
- if ((ret = __db_addrem_log(dbp->dbenv, dbc->txn,
- &LSN(pagep), 0, DB_REM_DUP, dbp->log_fileid, PGNO(pagep),
+ if ((ret = __db_addrem_log(dbp, dbc->txn,
+ &LSN(pagep), 0, DB_REM_DUP, PGNO(pagep),
(u_int32_t)indx, nbytes, &ldbt, NULL, &LSN(pagep))) != 0)
return (ret);
- }
+ } else
+ LSN_NOT_LOGGED(LSN(pagep));
/*
* If there's only a single item on the page, we don't have to
@@ -63,24 +63,26 @@ __db_ditem(dbc, pagep, indx, nbytes)
return (0);
}
+ inp = P_INP(dbp, pagep);
/*
* Pack the remaining key/data items at the end of the page. Use
* memmove(3), the regions may overlap.
*/
from = (u_int8_t *)pagep + HOFFSET(pagep);
- memmove(from + nbytes, from, pagep->inp[indx] - HOFFSET(pagep));
+ DB_ASSERT((int)inp[indx] - HOFFSET(pagep) >= 0);
+ memmove(from + nbytes, from, inp[indx] - HOFFSET(pagep));
HOFFSET(pagep) += nbytes;
/* Adjust the indices' offsets. */
- offset = pagep->inp[indx];
+ offset = inp[indx];
for (cnt = 0; cnt < NUM_ENT(pagep); ++cnt)
- if (pagep->inp[cnt] < offset)
- pagep->inp[cnt] += nbytes;
+ if (inp[cnt] < offset)
+ inp[cnt] += nbytes;
/* Shift the indices down. */
--NUM_ENT(pagep);
if (indx != NUM_ENT(pagep))
- memmove(&pagep->inp[indx], &pagep->inp[indx + 1],
+ memmove(&inp[indx], &inp[indx + 1],
sizeof(db_indx_t) * (NUM_ENT(pagep) - indx));
return (0);
@@ -104,11 +106,13 @@ __db_pitem(dbc, pagep, indx, nbytes, hdr, data)
DB *dbp;
BKEYDATA bk;
DBT thdr;
+ db_indx_t *inp;
int ret;
u_int8_t *p;
- if (nbytes > P_FREESPACE(pagep)) {
- DB_ASSERT(nbytes <= P_FREESPACE(pagep));
+ dbp = dbc->dbp;
+ if (nbytes > P_FREESPACE(dbp, pagep)) {
+ DB_ASSERT(nbytes <= P_FREESPACE(dbp, pagep));
return (EINVAL);
}
/*
@@ -128,12 +132,13 @@ __db_pitem(dbc, pagep, indx, nbytes, hdr, data)
* the passed in header sizes must be adjusted for the structure's
* placeholder for the trailing variable-length data field.
*/
- dbp = dbc->dbp;
- if (DB_LOGGING(dbc))
- if ((ret = __db_addrem_log(dbp->dbenv, dbc->txn,
- &LSN(pagep), 0, DB_ADD_DUP, dbp->log_fileid, PGNO(pagep),
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __db_addrem_log(dbp, dbc->txn,
+ &LSN(pagep), 0, DB_ADD_DUP, PGNO(pagep),
(u_int32_t)indx, nbytes, hdr, data, &LSN(pagep))) != 0)
return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(pagep));
if (hdr == NULL) {
B_TSET(bk.type, B_KEYDATA, 0);
@@ -143,16 +148,17 @@ __db_pitem(dbc, pagep, indx, nbytes, hdr, data)
thdr.size = SSZA(BKEYDATA, data);
hdr = &thdr;
}
+ inp = P_INP(dbp, pagep);
/* Adjust the index table, then put the item on the page. */
if (indx != NUM_ENT(pagep))
- memmove(&pagep->inp[indx + 1], &pagep->inp[indx],
+ memmove(&inp[indx + 1], &inp[indx],
sizeof(db_indx_t) * (NUM_ENT(pagep) - indx));
HOFFSET(pagep) -= nbytes;
- pagep->inp[indx] = HOFFSET(pagep);
+ inp[indx] = HOFFSET(pagep);
++NUM_ENT(pagep);
- p = P_ENTRY(pagep, indx);
+ p = P_ENTRY(dbp, pagep, indx);
memcpy(p, hdr->data, hdr->size);
if (data != NULL)
memcpy(p + hdr->size, data->data, data->size);
@@ -177,13 +183,16 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
PAGE *np, *pp;
DB_LOCK npl, ppl;
DB_LSN *nlsnp, *plsnp, ret_lsn;
+ DB_MPOOLFILE *mpf;
int ret;
- ret = 0;
+ dbp = dbc->dbp;
np = pp = NULL;
- npl.off = ppl.off = LOCK_INVALID;
+ LOCK_INIT(npl);
+ LOCK_INIT(ppl);
nlsnp = plsnp = NULL;
- dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ ret = 0;
/*
* Retrieve and lock the one/two pages. For a remove, we may need
@@ -194,9 +203,8 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
if (needlock && (ret = __db_lget(dbc,
0, pagep->next_pgno, DB_LOCK_WRITE, 0, &npl)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf,
- &pagep->next_pgno, 0, &np)) != 0) {
- (void)__db_pgerr(dbp, pagep->next_pgno);
+ if ((ret = __memp_fget(mpf, &pagep->next_pgno, 0, &np)) != 0) {
+ ret = __db_pgerr(dbp, pagep->next_pgno, ret);
goto err;
}
nlsnp = &np->lsn;
@@ -205,28 +213,27 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
if (needlock && (ret = __db_lget(dbc,
0, pagep->prev_pgno, DB_LOCK_WRITE, 0, &ppl)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf,
- &pagep->prev_pgno, 0, &pp)) != 0) {
- (void)__db_pgerr(dbp, pagep->next_pgno);
+ if ((ret = __memp_fget(mpf, &pagep->prev_pgno, 0, &pp)) != 0) {
+ ret = __db_pgerr(dbp, pagep->prev_pgno, ret);
goto err;
}
plsnp = &pp->lsn;
}
/* Log the change. */
- if (DB_LOGGING(dbc)) {
- if ((ret = __db_relink_log(dbp->dbenv, dbc->txn,
- &ret_lsn, 0, add_rem, dbp->log_fileid,
- pagep->pgno, &pagep->lsn,
- pagep->prev_pgno, plsnp, pagep->next_pgno, nlsnp)) != 0)
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __db_relink_log(dbp, dbc->txn, &ret_lsn, 0, add_rem,
+ pagep->pgno, &pagep->lsn, pagep->prev_pgno, plsnp,
+ pagep->next_pgno, nlsnp)) != 0)
goto err;
- if (np != NULL)
- np->lsn = ret_lsn;
- if (pp != NULL)
- pp->lsn = ret_lsn;
- if (add_rem == DB_REM_PAGE)
- pagep->lsn = ret_lsn;
- }
+ } else
+ LSN_NOT_LOGGED(ret_lsn);
+ if (np != NULL)
+ np->lsn = ret_lsn;
+ if (pp != NULL)
+ pp->lsn = ret_lsn;
+ if (add_rem == DB_REM_PAGE)
+ pagep->lsn = ret_lsn;
/*
* Modify and release the two pages.
@@ -242,10 +249,10 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
else
np->prev_pgno = pagep->prev_pgno;
if (new_next == NULL)
- ret = memp_fput(dbp->mpf, np, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, np, DB_MPOOL_DIRTY);
else {
*new_next = np;
- ret = memp_fset(dbp->mpf, np, DB_MPOOL_DIRTY);
+ ret = __memp_fset(mpf, np, DB_MPOOL_DIRTY);
}
if (ret != 0)
goto err;
@@ -256,7 +263,7 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
if (pp != NULL) {
pp->next_pgno = pagep->next_pgno;
- if ((ret = memp_fput(dbp->mpf, pp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pp, DB_MPOOL_DIRTY)) != 0)
goto err;
if (needlock)
(void)__TLPUT(dbc, ppl);
@@ -264,12 +271,12 @@ __db_relink(dbc, add_rem, pagep, new_next, needlock)
return (0);
err: if (np != NULL)
- (void)memp_fput(dbp->mpf, np, 0);
- if (needlock && npl.off != LOCK_INVALID)
+ (void)__memp_fput(mpf, np, 0);
+ if (needlock)
(void)__TLPUT(dbc, npl);
if (pp != NULL)
- (void)memp_fput(dbp->mpf, pp, 0);
- if (needlock && ppl.off != LOCK_INVALID)
+ (void)__memp_fput(mpf, pp, 0);
+ if (needlock)
(void)__TLPUT(dbc, ppl);
return (ret);
}
diff --git a/db/db/db_iface.c b/db/db/db_iface.c
index 3548a2527..3a4e6792e 100644
--- a/db/db/db_iface.c
+++ b/db/db/db_iface.c
@@ -1,356 +1,669 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_iface.c,v 11.34 2001/01/11 18:19:51 bostic Exp $";
+static const char revid[] = "$Id: db_iface.c,v 11.106 2003/10/02 02:57:46 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <errno.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "btree.h"
-
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/qam.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+
+static int __db_associate_arg __P((DB *, DB *,
+ int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
+static int __db_c_get_arg __P((DBC *, DBT *, DBT *, u_int32_t));
+static int __db_c_pget_arg __P((DBC *, DBT *, u_int32_t));
+static int __db_c_put_arg __P((DBC *, DBT *, DBT *, u_int32_t));
static int __db_curinval __P((const DB_ENV *));
+static int __db_cursor_arg __P((DB *, u_int32_t));
+static int __db_del_arg __P((DB *, u_int32_t));
+static int __db_get_arg __P((const DB *, const DBT *, DBT *, u_int32_t));
+static int __db_join_arg __P((DB *, DBC **, u_int32_t));
+static int __db_open_arg __P((DB *,
+ DB_TXN *, const char *, const char *, DBTYPE, u_int32_t));
+static int __db_pget_arg __P((DB *, DBT *, u_int32_t));
+static int __db_put_arg __P((DB *, DBT *, DBT *, u_int32_t));
static int __db_rdonly __P((const DB_ENV *, const char *));
+static int __db_stat_arg __P((DB *, u_int32_t));
static int __dbt_ferr __P((const DB *, const char *, const DBT *, int));
/*
- * __db_cursorchk --
- * Common cursor argument checking routine.
+ * A database should be required to be readonly if it's been explicitly
+ * specified as such or if we're a client in a replicated environment and
+ * we don't have the special "client-writer" designation.
+ */
+#define IS_READONLY(dbp) \
+ (F_ISSET(dbp, DB_AM_RDONLY) || \
+ (IS_REP_CLIENT((dbp)->dbenv) && \
+ !IS_REP_LOGSONLY((dbp)->dbenv) && \
+ !F_ISSET((dbp), DB_AM_CL_WRITER)))
+
+/*
+ * These functions implement the Berkeley DB API. They are organized in a
+ * layered fashion. The interface functions (XXX_pp) perform all generic
+ * error checks (for example, PANIC'd region, replication state change
+ * in progress, inconsistent transaction usage), call function-specific
+ * check routines (_arg) to check for proper flag usage, etc., do pre-amble
+ * processing (incrementing handle counts, handling auto-commit), call the
+ * function and then do post-amble processing (DB_AUTO_COMMIT, dec handle
+ * counts).
*
- * PUBLIC: int __db_cursorchk __P((const DB *, u_int32_t, int));
+ * So, the basic structure is:
+ * Check for generic errors
+ * Call function-specific check routine
+ * Increment handle count
+ * Create internal transaction if necessary
+ * Call underlying worker function
+ * Commit/abort internal transaction if necessary
+ * Decrement handle count
+ */
+
+/*
+ * __db_associate_pp --
+ * DB->associate pre/post processing.
+ *
+ * PUBLIC: int __db_associate_pp __P((DB *, DB_TXN *, DB *,
+ * PUBLIC: int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
*/
int
-__db_cursorchk(dbp, flags, isrdonly)
- const DB *dbp;
+__db_associate_pp(dbp, txn, sdbp, callback, flags)
+ DB *dbp, *sdbp;
+ DB_TXN *txn;
+ int (*callback) __P((DB *, const DBT *, const DBT *, DBT *));
u_int32_t flags;
- int isrdonly;
{
- /* Check for invalid function flags. */
- switch (flags) {
- case 0:
- break;
- case DB_WRITECURSOR:
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "DB->cursor"));
- if (!CDB_LOCKING(dbp->dbenv))
- return (__db_ferr(dbp->dbenv, "DB->cursor", 0));
- break;
- case DB_WRITELOCK:
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "DB->cursor"));
- break;
- default:
- return (__db_ferr(dbp->dbenv, "DB->cursor", 0));
+ DBC *sdbc;
+ DB_ENV *dbenv;
+ int handle_check, ret, txn_local;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_associate_arg(dbp, sdbp, callback, flags)) != 0)
+ return (ret);
+
+ /*
+ * Secondary cursors may have the primary's lock file ID, so we need
+ * to make sure that no older cursors are lying around when we make
+ * the transition.
+ */
+ if (TAILQ_FIRST(&sdbp->active_queue) != NULL ||
+ TAILQ_FIRST(&sdbp->join_queue) != NULL) {
+ __db_err(dbenv,
+ "Databases may not become secondary indices while cursors are open");
+ return (EINVAL);
}
+ /*
+ * Create a local transaction as necessary, check for consistent
+ * transaction usage, and, if we have no transaction but do have
+ * locking on, acquire a locker id for the handle lock acquisition.
+ */
+ txn_local = 0;
+ if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ return (ret);
+ txn_local = 1;
+ LF_CLR(DB_AUTO_COMMIT);
+ } else if (txn != NULL && !TXN_ON(dbenv))
+ return (__db_not_txn_env(dbenv));
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0)) != 0)
+ goto err;
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ while ((sdbc = TAILQ_FIRST(&sdbp->free_queue)) != NULL)
+ if ((ret = __db_c_destroy(sdbc)) != 0)
+ break;
+
+ if (ret == 0)
+ ret = __db_associate(dbp, txn, sdbp, callback, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+}
+
+/*
+ * __db_associate_arg --
+ * Check DB->associate arguments.
+ */
+static int
+__db_associate_arg(dbp, sdbp, callback, flags)
+ DB *dbp, *sdbp;
+ int (*callback) __P((DB *, const DBT *, const DBT *, DBT *));
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = dbp->dbenv;
+
+ if (F_ISSET(sdbp, DB_AM_SECONDARY)) {
+ __db_err(dbenv,
+ "Secondary index handles may not be re-associated");
+ return (EINVAL);
+ }
+ if (F_ISSET(dbp, DB_AM_SECONDARY)) {
+ __db_err(dbenv,
+ "Secondary indices may not be used as primary databases");
+ return (EINVAL);
+ }
+ if (F_ISSET(dbp, DB_AM_DUP)) {
+ __db_err(dbenv,
+ "Primary databases may not be configured with duplicates");
+ return (EINVAL);
+ }
+ if (F_ISSET(dbp, DB_AM_RENUMBER)) {
+ __db_err(dbenv,
+ "Renumbering recno databases may not be used as primary databases");
+ return (EINVAL);
+ }
+ if (dbp->dbenv != sdbp->dbenv &&
+ (!F_ISSET(dbp->dbenv, DB_ENV_DBLOCAL) ||
+ !F_ISSET(sdbp->dbenv, DB_ENV_DBLOCAL))) {
+ __db_err(dbenv,
+ "The primary and secondary must be opened in the same environment");
+ return (EINVAL);
+ }
+ if (DB_IS_THREADED(dbp) != DB_IS_THREADED(sdbp)) {
+ __db_err(dbenv,
+ "The DB_THREAD setting must be the same for primary and secondary");
+ return (EINVAL);
+ }
+ if (callback == NULL &&
+ (!F_ISSET(dbp, DB_AM_RDONLY) || !F_ISSET(sdbp, DB_AM_RDONLY))) {
+ __db_err(dbenv,
+ "Callback function may be NULL only when database handles are read-only");
+ return (EINVAL);
+ }
+
+ if ((ret = __db_fchk(dbenv,
+ "DB->associate", flags, DB_CREATE | DB_AUTO_COMMIT)) != 0)
+ return (ret);
+
return (0);
}
/*
- * __db_ccountchk --
- * Common cursor count argument checking routine.
+ * __db_close_pp --
+ * DB->close pre/post processing.
*
- * PUBLIC: int __db_ccountchk __P((const DB *, u_int32_t, int));
+ * PUBLIC: int __db_close_pp __P((DB *, u_int32_t));
*/
int
-__db_ccountchk(dbp, flags, isvalid)
- const DB *dbp;
+__db_close_pp(dbp, flags)
+ DB *dbp;
u_int32_t flags;
- int isvalid;
{
- /* Check for invalid function flags. */
- switch (flags) {
- case 0:
- break;
- default:
- return (__db_ferr(dbp->dbenv, "DBcursor->c_count", 0));
- }
+ DB_ENV *dbenv;
+ int handle_check, ret, t_ret;
+
+ dbenv = dbp->dbenv;
+ ret = 0;
+
+ PANIC_CHECK(dbenv);
/*
- * The cursor must be initialized, return EINVAL for an invalid cursor,
- * otherwise 0.
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ *
+ * Validate arguments and complain if they're wrong, but as a DB
+ * handle destructor, we can't fail.
*/
- return (isvalid ? 0 : __db_curinval(dbp->dbenv));
+ if (flags != 0 && flags != DB_NOSYNC &&
+ (t_ret = __db_ferr(dbenv, "DB->close", 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (t_ret = __db_rep_enter(dbp, 0, 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = __db_close(dbp, NULL, flags)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
}
/*
- * __db_cdelchk --
- * Common cursor delete argument checking routine.
+ * __db_cursor_pp --
+ * DB->cursor pre/post processing.
*
- * PUBLIC: int __db_cdelchk __P((const DB *, u_int32_t, int, int));
+ * PUBLIC: int __db_cursor_pp __P((DB *, DB_TXN *, DBC **, u_int32_t));
*/
int
-__db_cdelchk(dbp, flags, isrdonly, isvalid)
- const DB *dbp;
+__db_cursor_pp(dbp, txn, dbcp, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBC **dbcp;
u_int32_t flags;
- int isrdonly, isvalid;
{
- /* Check for changes to a read-only tree. */
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "c_del"));
+ DB_ENV *dbenv;
+ int handle_check, ret;
- /* Check for invalid function flags. */
- switch (flags) {
- case 0:
- break;
- default:
- return (__db_ferr(dbp->dbenv, "DBcursor->c_del", 0));
- }
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->cursor");
+
+ if ((ret = __db_cursor_arg(dbp, flags)) != 0)
+ return (ret);
/*
- * The cursor must be initialized, return EINVAL for an invalid cursor,
- * otherwise 0.
+ * Check for consistent transaction usage. For now, assume that
+ * this cursor might be used for read operations only (in which
+ * case it may not require a txn). We'll check more stringently
+ * in c_del and c_put. (Note that this all means that the
+ * read-op txn tests have to be a subset of the write-op ones.)
*/
- return (isvalid ? 0 : __db_curinval(dbp->dbenv));
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 1)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_cursor(dbp, txn, dbcp, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
}
/*
- * __db_cgetchk --
- * Common cursor get argument checking routine.
+ * __db_cursor --
+ * DB->cursor.
*
- * PUBLIC: int __db_cgetchk __P((const DB *, DBT *, DBT *, u_int32_t, int));
+ * PUBLIC: int __db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
*/
int
-__db_cgetchk(dbp, key, data, flags, isvalid)
- const DB *dbp;
- DBT *key, *data;
+__db_cursor(dbp, txn, dbcp, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBC **dbcp;
u_int32_t flags;
- int isvalid;
{
+ DB_ENV *dbenv;
+ DBC *dbc;
+ db_lockmode_t mode;
+ u_int32_t op;
int ret;
+ dbenv = dbp->dbenv;
+
+ if ((ret = __db_cursor_int(dbp,
+ txn, dbp->type, PGNO_INVALID, 0, DB_LOCK_INVALIDID, &dbc)) != 0)
+ return (ret);
+
/*
- * Check for read-modify-write validity. DB_RMW doesn't make sense
- * with CDB cursors since if you're going to write the cursor, you
- * had to create it with DB_WRITECURSOR. Regardless, we check for
- * LOCKING_ON and not STD_LOCKING, as we don't want to disallow it.
- * If this changes, confirm that DB does not itself set the DB_RMW
- * flag in a path where CDB may have been configured.
+ * If this is CDB, do all the locking in the interface, which is
+ * right here.
*/
- if (LF_ISSET(DB_RMW)) {
- if (!LOCKING_ON(dbp->dbenv)) {
- __db_err(dbp->dbenv,
- "the DB_RMW flag requires locking");
- return (EINVAL);
- }
- LF_CLR(DB_RMW);
+ if (CDB_LOCKING(dbenv)) {
+ op = LF_ISSET(DB_OPFLAGS_MASK);
+ mode = (op == DB_WRITELOCK) ? DB_LOCK_WRITE :
+ ((op == DB_WRITECURSOR) ? DB_LOCK_IWRITE : DB_LOCK_READ);
+ if ((ret = __lock_get(dbenv, dbc->locker, 0,
+ &dbc->lock_dbt, mode, &dbc->mylock)) != 0)
+ goto err;
+ if (op == DB_WRITECURSOR)
+ F_SET(dbc, DBC_WRITECURSOR);
+ if (op == DB_WRITELOCK)
+ F_SET(dbc, DBC_WRITER);
+ }
+
+ if (LF_ISSET(DB_DIRTY_READ) ||
+ (txn != NULL && F_ISSET(txn, TXN_DIRTY_READ)))
+ F_SET(dbc, DBC_DIRTY_READ);
+
+ *dbcp = dbc;
+ return (0);
+
+err: (void)__db_c_close(dbc);
+ return (ret);
+}
+
+/*
+ * __db_cursor_arg --
+ * Check DB->cursor arguments.
+ */
+static int
+__db_cursor_arg(dbp, flags)
+ DB *dbp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+
+ /* DB_DIRTY_READ is the only valid bit-flag and requires locking. */
+ if (LF_ISSET(DB_DIRTY_READ)) {
+ if (!LOCKING_ON(dbenv))
+ return (__db_fnl(dbenv, "DB->cursor"));
+ LF_CLR(DB_DIRTY_READ);
}
/* Check for invalid function flags. */
switch (flags) {
- case DB_CONSUME:
- case DB_CONSUME_WAIT:
- if (dbp->type != DB_QUEUE)
- goto err;
- break;
- case DB_CURRENT:
- case DB_FIRST:
- case DB_GET_BOTH:
- case DB_LAST:
- case DB_NEXT:
- case DB_NEXT_DUP:
- case DB_NEXT_NODUP:
- case DB_PREV:
- case DB_PREV_NODUP:
- case DB_SET:
- case DB_SET_RANGE:
- break;
- case DB_GET_BOTHC:
- if (dbp->type == DB_QUEUE)
- goto err;
+ case 0:
break;
- case DB_GET_RECNO:
- if (!F_ISSET(dbp, DB_BT_RECNUM))
- goto err;
+ case DB_WRITECURSOR:
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DB->cursor"));
+ if (!CDB_LOCKING(dbenv))
+ return (__db_ferr(dbenv, "DB->cursor", 0));
break;
- case DB_SET_RECNO:
- if (!F_ISSET(dbp, DB_BT_RECNUM))
- goto err;
+ case DB_WRITELOCK:
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DB->cursor"));
break;
default:
-err: return (__db_ferr(dbp->dbenv, "DBcursor->c_get", 0));
+ return (__db_ferr(dbenv, "DB->cursor", 0));
}
- /* Check for invalid key/data flags. */
- if ((ret = __dbt_ferr(dbp, "key", key, 0)) != 0)
- return (ret);
- if ((ret = __dbt_ferr(dbp, "data", data, 0)) != 0)
+ return (0);
+}
+
+/*
+ * __db_del_pp --
+ * DB->del pre/post processing.
+ *
+ * PUBLIC: int __db_del_pp __P((DB *, DB_TXN *, DBT *, u_int32_t));
+ */
+int
+__db_del_pp(dbp, txn, key, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *key;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int handle_check, ret, txn_local;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->del");
+
+ if ((ret = __db_del_arg(dbp, flags)) != 0)
return (ret);
- /*
- * The cursor must be initialized for DB_CURRENT or DB_NEXT_DUP,
- * return EINVAL for an invalid cursor, otherwise 0.
- */
- if (isvalid || (flags != DB_CURRENT && flags != DB_NEXT_DUP))
- return (0);
+ /* Create local transaction as necessary. */
+ if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ return (ret);
+ txn_local = 1;
+ LF_CLR(DB_AUTO_COMMIT);
+ } else
+ txn_local = 0;
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0)) != 0)
+ goto err;
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
- return (__db_curinval(dbp->dbenv));
+ ret = __db_del(dbp, txn, key, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
}
/*
- * __db_cputchk --
- * Common cursor put argument checking routine.
- *
- * PUBLIC: int __db_cputchk __P((const DB *,
- * PUBLIC: const DBT *, DBT *, u_int32_t, int, int));
+ * __db_del_arg --
+ * Check DB->delete arguments.
*/
-int
-__db_cputchk(dbp, key, data, flags, isrdonly, isvalid)
- const DB *dbp;
- const DBT *key;
- DBT *data;
+static int
+__db_del_arg(dbp, flags)
+ DB *dbp;
u_int32_t flags;
- int isrdonly, isvalid;
{
- int key_flags, ret;
+ DB_ENV *dbenv;
- key_flags = 0;
+ dbenv = dbp->dbenv;
/* Check for changes to a read-only tree. */
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "c_put"));
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DB->del"));
/* Check for invalid function flags. */
+ LF_CLR(DB_AUTO_COMMIT);
switch (flags) {
- case DB_AFTER:
- case DB_BEFORE:
- switch (dbp->type) {
- case DB_BTREE:
- case DB_HASH: /* Only with unsorted duplicates. */
- if (!F_ISSET(dbp, DB_AM_DUP))
- goto err;
- if (dbp->dup_compare != NULL)
- goto err;
- break;
- case DB_QUEUE: /* Not permitted. */
- goto err;
- case DB_RECNO: /* Only with mutable record numbers. */
- if (!F_ISSET(dbp, DB_RE_RENUMBER))
- goto err;
- key_flags = 1;
- break;
- default:
- goto err;
- }
- break;
- case DB_CURRENT:
- /*
- * If there is a comparison function, doing a DB_CURRENT
- * must not change the part of the data item that is used
- * for the comparison.
- */
- break;
- case DB_NODUPDATA:
- if (!F_ISSET(dbp, DB_AM_DUPSORT))
- goto err;
- /* FALLTHROUGH */
- case DB_KEYFIRST:
- case DB_KEYLAST:
- if (dbp->type == DB_QUEUE || dbp->type == DB_RECNO)
- goto err;
- key_flags = 1;
+ case 0:
break;
default:
-err: return (__db_ferr(dbp->dbenv, "DBcursor->c_put", 0));
+ return (__db_ferr(dbenv, "DB->del", 0));
}
- /* Check for invalid key/data flags. */
- if (key_flags && (ret = __dbt_ferr(dbp, "key", key, 0)) != 0)
- return (ret);
- if ((ret = __dbt_ferr(dbp, "data", data, 0)) != 0)
+ return (0);
+}
+
+/*
+ * db_fd_pp --
+ * DB->fd pre/post processing.
+ *
+ * PUBLIC: int __db_fd_pp __P((DB *, int *));
+ */
+int
+__db_fd_pp(dbp, fdp)
+ DB *dbp;
+ int *fdp;
+{
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ int handle_check, ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->fd");
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0)) != 0)
return (ret);
/*
- * The cursor must be initialized for anything other than DB_KEYFIRST
- * and DB_KEYLAST, return EINVAL for an invalid cursor, otherwise 0.
+ * !!!
+ * There's no argument checking to be done.
+ *
+ * !!!
+ * The actual method call is simple, do it inline.
+ *
+ * XXX
+ * Truly spectacular layering violation.
*/
- if (isvalid || flags == DB_KEYFIRST ||
- flags == DB_KEYLAST || flags == DB_NODUPDATA)
- return (0);
+ if ((ret = __mp_xxx_fh(dbp->mpf, &fhp)) != 0)
+ goto err;
+
+ if (fhp == NULL) {
+ *fdp = -1;
+ __db_err(dbenv,
+ "Database does not have a valid file handle");
+ ret = ENOENT;
+ } else
+ *fdp = fhp->fd;
+
+err: /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
- return (__db_curinval(dbp->dbenv));
+ return (ret);
}
/*
- * __db_closechk --
- * DB->close flag check.
+ * __db_get_pp --
+ * DB->get pre/post processing.
*
- * PUBLIC: int __db_closechk __P((const DB *, u_int32_t));
+ * PUBLIC: int __db_get_pp __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
*/
int
-__db_closechk(dbp, flags)
- const DB *dbp;
+__db_get_pp(dbp, txn, key, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *key, *data;
u_int32_t flags;
{
- /* Check for invalid function flags. */
- switch (flags) {
- case 0:
- case DB_NOSYNC:
- break;
- default:
- return (__db_ferr(dbp->dbenv, "DB->close", 0));
+ DB_ENV *dbenv;
+ u_int32_t mode;
+ int handle_check, ret, txn_local;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get");
+
+ if ((ret = __db_get_arg(dbp, key, data, flags)) != 0)
+ return (ret);
+
+ mode = 0;
+ txn_local = 0;
+ if (LF_ISSET(DB_DIRTY_READ))
+ mode = DB_DIRTY_READ;
+ else if ((flags & DB_OPFLAGS_MASK) == DB_CONSUME ||
+ (flags & DB_OPFLAGS_MASK) == DB_CONSUME_WAIT) {
+ mode = DB_WRITELOCK;
+ if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ return (ret);
+ txn_local = 1;
+ LF_CLR(DB_AUTO_COMMIT);
+ }
}
- return (0);
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID,
+ mode == DB_WRITELOCK || LF_ISSET(DB_RMW) ? 0 : 1)) != 0)
+ goto err;
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ ret = __db_get(dbp, txn, key, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
}
/*
- * __db_delchk --
- * Common delete argument checking routine.
+ * __db_get --
+ * DB->get.
*
- * PUBLIC: int __db_delchk __P((const DB *, DBT *, u_int32_t, int));
+ * PUBLIC: int __db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
*/
int
-__db_delchk(dbp, key, flags, isrdonly)
- const DB *dbp;
- DBT *key;
+__db_get(dbp, txn, key, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *key, *data;
u_int32_t flags;
- int isrdonly;
{
- COMPQUIET(key, NULL);
+ DBC *dbc;
+ u_int32_t mode;
+ int ret, t_ret;
+
+ mode = 0;
+ if (LF_ISSET(DB_DIRTY_READ)) {
+ mode = DB_DIRTY_READ;
+ LF_CLR(DB_DIRTY_READ);
+ } else if ((flags & DB_OPFLAGS_MASK) == DB_CONSUME ||
+ (flags & DB_OPFLAGS_MASK) == DB_CONSUME_WAIT)
+ mode = DB_WRITELOCK;
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, mode)) != 0)
+ return (ret);
- /* Check for changes to a read-only tree. */
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "delete"));
+ DEBUG_LREAD(dbc, txn, "DB->get", key, NULL, flags);
- /* Check for invalid function flags. */
- switch (flags) {
- case 0:
- break;
- default:
- return (__db_ferr(dbp->dbenv, "DB->del", 0));
- }
+ /*
+ * The DBC_TRANSIENT flag indicates that we're just doing a
+ * single operation with this cursor, and that in case of
+ * error we don't need to restore it to its old position--we're
+ * going to close it right away. Thus, we can perform the get
+ * without duplicating the cursor, saving some cycles in this
+ * common case.
+ */
+ F_SET(dbc, DBC_TRANSIENT);
- return (0);
+ /*
+ * SET_RET_MEM indicates that if key and/or data have no DBT
+ * flags set and DB manages the returned-data memory, that memory
+ * will belong to this handle, not to the underlying cursor.
+ */
+ SET_RET_MEM(dbc, dbp);
+
+ if (LF_ISSET(~(DB_RMW | DB_MULTIPLE)) == 0)
+ LF_SET(DB_SET);
+
+ ret = __db_c_get(dbc, key, data, flags);
+
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
}
/*
- * __db_getchk --
- * Common get argument checking routine.
- *
- * PUBLIC: int __db_getchk __P((const DB *, const DBT *, DBT *, u_int32_t));
+ * __db_get_arg --
+ * DB->get argument checking, used by both DB->get and DB->pget.
*/
-int
-__db_getchk(dbp, key, data, flags)
+static int
+__db_get_arg(dbp, key, data, flags)
const DB *dbp;
const DBT *key;
DBT *data;
u_int32_t flags;
{
- int ret;
+ DB_ENV *dbenv;
+ int check_thread, dirty, multi, ret;
+
+ dbenv = dbp->dbenv;
/*
* Check for read-modify-write validity. DB_RMW doesn't make sense
@@ -360,13 +673,27 @@ __db_getchk(dbp, key, data, flags)
* If this changes, confirm that DB does not itself set the DB_RMW
* flag in a path where CDB may have been configured.
*/
- if (LF_ISSET(DB_RMW)) {
- if (!LOCKING_ON(dbp->dbenv)) {
- __db_err(dbp->dbenv,
- "the DB_RMW flag requires locking");
- return (EINVAL);
- }
- LF_CLR(DB_RMW);
+ check_thread = dirty = 0;
+ if (LF_ISSET(DB_DIRTY_READ | DB_RMW)) {
+ if (!LOCKING_ON(dbenv))
+ return (__db_fnl(dbenv, "DB->get"));
+ if (LF_ISSET(DB_DIRTY_READ))
+ dirty = 1;
+ LF_CLR(DB_DIRTY_READ | DB_RMW);
+ }
+
+ multi = 0;
+ if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
+ if (LF_ISSET(DB_MULTIPLE_KEY))
+ goto multi_err;
+ multi = LF_ISSET(DB_MULTIPLE) ? 1 : 0;
+ LF_CLR(DB_MULTIPLE);
+ }
+
+ if (LF_ISSET(DB_AUTO_COMMIT)) {
+ LF_CLR(DB_AUTO_COMMIT);
+ if (flags != DB_CONSUME && flags != DB_CONSUME_WAIT)
+ goto err;
}
/* Check for invalid function flags. */
@@ -375,52 +702,125 @@ __db_getchk(dbp, key, data, flags)
case DB_GET_BOTH:
break;
case DB_SET_RECNO:
- if (!F_ISSET(dbp, DB_BT_RECNUM))
+ check_thread = 1;
+ if (!F_ISSET(dbp, DB_AM_RECNUM))
goto err;
break;
case DB_CONSUME:
case DB_CONSUME_WAIT:
+ check_thread = 1;
+ if (dirty) {
+ __db_err(dbenv,
+ "DB_DIRTY_READ is not supported with DB_CONSUME or DB_CONSUME_WAIT");
+ return (EINVAL);
+ }
+ if (multi)
+multi_err: return (__db_ferr(dbenv, "DB->get", 1));
if (dbp->type == DB_QUEUE)
break;
- /* Fall through */
+ /* FALLTHROUGH */
default:
-err: return (__db_ferr(dbp->dbenv, "DB->get", 0));
+err: return (__db_ferr(dbenv, "DB->get", 0));
}
- /* Check for invalid key/data flags. */
- if ((ret = __dbt_ferr(dbp, "key", key, flags == DB_SET_RECNO)) != 0)
+ /*
+ * Check for invalid key/data flags.
+ *
+ * XXX: Dave Krinsky
+ * Remember to modify this when we fix the flag-returning problem.
+ */
+ if ((ret = __dbt_ferr(dbp, "key", key, check_thread)) != 0)
return (ret);
if ((ret = __dbt_ferr(dbp, "data", data, 1)) != 0)
return (ret);
+ if (multi) {
+ if (!F_ISSET(data, DB_DBT_USERMEM)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE requires DB_DBT_USERMEM be set");
+ return (EINVAL);
+ }
+ if (F_ISSET(key, DB_DBT_PARTIAL) ||
+ F_ISSET(data, DB_DBT_PARTIAL)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE does not support DB_DBT_PARTIAL");
+ return (EINVAL);
+ }
+ if (data->ulen < 1024 ||
+ data->ulen < dbp->pgsize || data->ulen % 1024 != 0) {
+ __db_err(dbenv, "%s%s",
+ "DB_MULTIPLE buffers must be ",
+ "aligned, at least page size and multiples of 1KB");
+ return (EINVAL);
+ }
+ }
+
return (0);
}
/*
- * __db_joinchk --
- * Common join argument checking routine.
+ * __db_join_pp --
+ * DB->join pre/post processing.
*
- * PUBLIC: int __db_joinchk __P((const DB *, DBC * const *, u_int32_t));
+ * PUBLIC: int __db_join_pp __P((DB *, DBC **, DBC **, u_int32_t));
*/
int
-__db_joinchk(dbp, curslist, flags)
- const DB *dbp;
- DBC * const *curslist;
+__db_join_pp(primary, curslist, dbcp, flags)
+ DB *primary;
+ DBC **curslist, **dbcp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbenv = primary->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_join_arg(primary, curslist, flags)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, primary);
+ if (handle_check &&
+ (ret = __db_rep_enter(primary, 1, curslist[0]->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_join(primary, curslist, dbcp, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_join_arg --
+ * Check DB->join arguments.
+ */
+int
+__db_join_arg(primary, curslist, flags)
+ DB *primary;
+ DBC **curslist;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
DB_TXN *txn;
int i;
+ dbenv = primary->dbenv;
+
switch (flags) {
case 0:
case DB_JOIN_NOSORT:
break;
default:
- return (__db_ferr(dbp->dbenv, "DB->join", 0));
+ return (__db_ferr(dbenv, "DB->join", 0));
}
if (curslist == NULL || curslist[0] == NULL) {
- __db_err(dbp->dbenv,
+ __db_err(dbenv,
"At least one secondary cursor must be specified to DB->join");
return (EINVAL);
}
@@ -428,7 +828,7 @@ __db_joinchk(dbp, curslist, flags)
txn = curslist[0]->txn;
for (i = 1; curslist[i] != NULL; i++)
if (curslist[i]->txn != txn) {
- __db_err(dbp->dbenv,
+ __db_err(dbenv,
"All secondary cursors must share the same transaction");
return (EINVAL);
}
@@ -437,49 +837,470 @@ __db_joinchk(dbp, curslist, flags)
}
/*
- * __db_joingetchk --
- * Common join_get argument checking routine.
+ * __db_key_range_pp --
+ * DB->key_range pre/post processing.
*
- * PUBLIC: int __db_joingetchk __P((const DB *, DBT *, u_int32_t));
+ * PUBLIC: int __db_key_range_pp
+ * PUBLIC: __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
*/
int
-__db_joingetchk(dbp, key, flags)
- const DB *dbp;
+__db_key_range_pp(dbp, txn, key, kr, flags)
+ DB *dbp;
+ DB_TXN *txn;
DBT *key;
+ DB_KEY_RANGE *kr;
u_int32_t flags;
{
+ DBC *dbc;
+ DB_ENV *dbenv;
+ int handle_check, ret, t_ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbp->dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->key_range");
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ */
+ if (flags != 0)
+ return (__db_ferr(dbenv, "DB->key_range", 0));
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 1)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ return (ret);
+
+ /*
+ * !!!
+ * The actual method call is simple, do it inline.
+ */
+ switch (dbp->type) {
+ case DB_BTREE:
+ /* Acquire a cursor. */
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ break;
+
+ DEBUG_LWRITE(dbc, NULL, "bam_key_range", NULL, NULL, 0);
- if (LF_ISSET(DB_RMW)) {
- if (!LOCKING_ON(dbp->dbenv)) {
- __db_err(dbp->dbenv,
- "the DB_RMW flag requires locking");
+ ret = __bam_key_range(dbc, key, kr, flags);
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+ break;
+ case DB_HASH:
+ case DB_QUEUE:
+ case DB_RECNO:
+ ret = __dbh_am_chk(dbp, DB_OK_BTREE);
+ break;
+ case DB_UNKNOWN:
+ default:
+ ret = __db_unknown_type(dbenv, "DB->key_range", dbp->type);
+ break;
+ }
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_open_pp --
+ * DB->open pre/post processing.
+ *
+ * PUBLIC: int __db_open_pp __P((DB *, DB_TXN *,
+ * PUBLIC: const char *, const char *, DBTYPE, u_int32_t, int));
+ */
+int
+__db_open_pp(dbp, txn, fname, dname, type, flags, mode)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *fname, *dname;
+ DBTYPE type;
+ u_int32_t flags;
+ int mode;
+{
+ DB_ENV *dbenv;
+ int handle_check, nosync, remove_me, ret, txn_local;
+
+ dbenv = dbp->dbenv;
+ nosync = 1;
+ remove_me = 0;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_open_arg(dbp, txn, fname, dname, type, flags)) != 0)
+ return (ret);
+
+ /*
+ * Save the file and database names and flags. We do this here
+ * because we don't pass all of the flags down into the actual
+ * DB->open method call, we strip DB_AUTO_COMMIT at this layer.
+ */
+ if ((fname != NULL &&
+ (ret = __os_strdup(dbenv, fname, &dbp->fname)) != 0) ||
+ (dname != NULL &&
+ (ret = __os_strdup(dbenv, dname, &dbp->dname)) != 0))
+ return (ret);
+ dbp->open_flags = flags;
+
+ /* Save the current DB handle flags for refresh. */
+ dbp->orig_flags = dbp->flags;
+
+ /*
+ * Create local transaction as necessary, check for consistent
+ * transaction usage.
+ */
+ txn_local = 0;
+ if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ return (ret);
+ txn_local = 1;
+ LF_CLR(DB_AUTO_COMMIT);
+ } else
+ if (txn != NULL && !TXN_ON(dbenv))
+ return (__db_not_txn_env(dbenv));
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ if ((ret = __db_open(dbp,
+ txn, fname, dname, type, flags, mode, PGNO_BASE_MD)) != 0)
+ goto err;
+
+ /*
+ * You can open the database that describes the subdatabases in the
+ * rest of the file read-only. The content of each key's data is
+ * unspecified and applications should never be adding new records
+ * or updating existing records. However, during recovery, we need
+ * to open these databases R/W so we can redo/undo changes in them.
+ * Likewise, we need to open master databases read/write during
+ * rename and remove so we can be sure they're fully sync'ed, so
+ * we provide an override flag for the purpose.
+ */
+ if (dname == NULL && !IS_RECOVERING(dbenv) && !LF_ISSET(DB_RDONLY) &&
+ !LF_ISSET(DB_RDWRMASTER) && F_ISSET(dbp, DB_AM_SUBDB)) {
+ __db_err(dbenv,
+ "files containing multiple databases may only be opened read-only");
+ ret = EINVAL;
+ goto err;
+ }
+
+ /*
+ * Success: file creations have to be synchronous, otherwise we don't
+ * care.
+ */
+ if (F_ISSET(dbp, DB_AM_CREATED | DB_AM_CREATED_MSTR))
+ nosync = 0;
+
+ /* Success: don't discard the file on close. */
+ F_CLR(dbp, DB_AM_DISCARD | DB_AM_CREATED | DB_AM_CREATED_MSTR);
+
+ /*
+ * If not transactional, remove the databases/subdatabases. If we're
+ * transactional, the child transaction abort cleans up.
+ */
+err: if (ret != 0 && txn == NULL) {
+ remove_me = F_ISSET(dbp, DB_AM_CREATED);
+ if (F_ISSET(dbp, DB_AM_CREATED_MSTR) ||
+ (dname == NULL && remove_me))
+ /* Remove file. */
+ (void)__db_remove_int(dbp, txn, fname, NULL, DB_FORCE);
+ else if (remove_me)
+ /* Remove subdatabase. */
+ (void)__db_remove_int(dbp, txn, fname, dname, DB_FORCE);
+ }
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (txn_local ?
+ __db_txn_auto_resolve(dbenv, txn, nosync, ret) : ret);
+}
+
+/*
+ * __db_open_arg --
+ * Check DB->open arguments.
+ */
+static int
+__db_open_arg(dbp, txn, fname, dname, type, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *fname, *dname;
+ DBTYPE type;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ u_int32_t ok_flags;
+ int ret;
+
+ dbenv = dbp->dbenv;
+
+ /* Validate arguments. */
+#undef OKFLAGS
+#define OKFLAGS \
+ (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL | \
+ DB_FCNTL_LOCKING | DB_NO_AUTO_COMMIT | DB_NOMMAP | DB_RDONLY | \
+ DB_RDWRMASTER | DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN)
+ if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0)
+ return (ret);
+ if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE))
+ return (__db_ferr(dbenv, "DB->open", 1));
+ if (LF_ISSET(DB_RDONLY) && LF_ISSET(DB_CREATE))
+ return (__db_ferr(dbenv, "DB->open", 1));
+
+#ifdef HAVE_VXWORKS
+ if (LF_ISSET(DB_TRUNCATE)) {
+ __db_err(dbenv, "DB_TRUNCATE not supported on VxWorks");
+ return (DB_OPNOTSUP);
+ }
+#endif
+ switch (type) {
+ case DB_UNKNOWN:
+ if (LF_ISSET(DB_CREATE|DB_TRUNCATE)) {
+ __db_err(dbenv,
+ "%s: DB_UNKNOWN type specified with DB_CREATE or DB_TRUNCATE",
+ fname);
+ return (EINVAL);
+ }
+ ok_flags = 0;
+ break;
+ case DB_BTREE:
+ ok_flags = DB_OK_BTREE;
+ break;
+ case DB_HASH:
+#ifndef HAVE_HASH
+ return (__db_no_hash_am(dbenv));
+#endif
+ ok_flags = DB_OK_HASH;
+ break;
+ case DB_QUEUE:
+#ifndef HAVE_QUEUE
+ return (__db_no_queue_am(dbenv));
+#endif
+ ok_flags = DB_OK_QUEUE;
+ break;
+ case DB_RECNO:
+ ok_flags = DB_OK_RECNO;
+ break;
+ default:
+ __db_err(dbenv, "unknown type: %lu", (u_long)type);
+ return (EINVAL);
+ }
+ if (ok_flags)
+ DB_ILLEGAL_METHOD(dbp, ok_flags);
+
+ /* The environment may have been created, but never opened. */
+ if (!F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_OPEN_CALLED)) {
+ __db_err(dbenv, "environment not yet opened");
+ return (EINVAL);
+ }
+
+ /*
+ * Historically, you could pass in an environment that didn't have a
+ * mpool, and DB would create a private one behind the scenes. This
+ * no longer works.
+ */
+ if (!F_ISSET(dbenv, DB_ENV_DBLOCAL) && !MPOOL_ON(dbenv)) {
+ __db_err(dbenv, "environment did not include a memory pool");
+ return (EINVAL);
+ }
+
+ /*
+ * You can't specify threads during DB->open if subsystems in the
+ * environment weren't configured with them.
+ */
+ if (LF_ISSET(DB_THREAD) &&
+ !F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_THREAD)) {
+ __db_err(dbenv, "environment not created using DB_THREAD");
+ return (EINVAL);
+ }
+
+ /* DB_TRUNCATE is neither transaction recoverable nor lockable. */
+ if (LF_ISSET(DB_TRUNCATE) && (LOCKING_ON(dbenv) || txn != NULL)) {
+ __db_err(dbenv,
+ "DB_TRUNCATE illegal with %s specified",
+ LOCKING_ON(dbenv) ? "locking" : "transactions");
+ return (EINVAL);
+ }
+
+ /* Subdatabase checks. */
+ if (dname != NULL) {
+ /* Subdatabases must be created in named files. */
+ if (fname == NULL) {
+ __db_err(dbenv,
+ "multiple databases cannot be created in temporary files");
return (EINVAL);
}
- LF_CLR(DB_RMW);
+
+ /* QAM can't be done as a subdatabase. */
+ if (type == DB_QUEUE) {
+ __db_err(dbenv, "Queue databases must be one-per-file");
+ return (EINVAL);
+ }
+ }
+
+ return (0);
+}
+
+/*
+ * __db_pget_pp --
+ * DB->pget pre/post processing.
+ *
+ * PUBLIC: int __db_pget_pp
+ * PUBLIC: __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_pget_pp(dbp, txn, skey, pkey, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *skey, *pkey, *data;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->pget");
+
+ if ((ret = __db_pget_arg(dbp, pkey, flags)) != 0)
+ return (ret);
+
+ if ((ret = __db_get_arg(dbp, skey, data, flags)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_pget(dbp, txn, skey, pkey, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_pget --
+ * DB->pget.
+ *
+ * PUBLIC: int __db_pget
+ * PUBLIC: __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_pget(dbp, txn, skey, pkey, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *skey, *pkey, *data;
+ u_int32_t flags;
+{
+ DBC *dbc;
+ int ret, t_ret;
+
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ return (ret);
+
+ SET_RET_MEM(dbc, dbp);
+
+ DEBUG_LREAD(dbc, txn, "__db_pget", skey, NULL, flags);
+
+ /*
+ * !!!
+ * The actual method call is simple, do it inline.
+ *
+ * The underlying cursor pget will fill in a default DBT for null
+ * pkeys, and use the cursor's returned-key memory internally to
+ * store any intermediate primary keys. However, we've just set
+ * the returned-key memory to the DB handle's key memory, which
+ * is unsafe to use if the DB handle is threaded. If the pkey
+ * argument is NULL, use the DBC-owned returned-key memory
+ * instead; it'll go away when we close the cursor before we
+ * return, but in this case that's just fine, as we're not
+ * returning the primary key.
+ */
+ if (pkey == NULL)
+ dbc->rkey = &dbc->my_rkey;
+
+ /*
+ * The cursor is just a perfectly ordinary secondary database cursor.
+ * Call its c_pget() method to do the dirty work.
+ */
+ if (flags == 0 || flags == DB_RMW)
+ flags |= DB_SET;
+
+ ret = __db_c_pget(dbc, skey, pkey, data, flags);
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __db_pget_arg --
+ * Check DB->pget arguments.
+ */
+static int
+__db_pget_arg(dbp, pkey, flags)
+ DB *dbp;
+ DBT *pkey;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = dbp->dbenv;
+
+ if (!F_ISSET(dbp, DB_AM_SECONDARY)) {
+ __db_err(dbenv,
+ "DB->pget may only be used on secondary indices");
+ return (EINVAL);
}
+ if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE and DB_MULTIPLE_KEY may not be used on secondary indices");
+ return (EINVAL);
+ }
+
+ /* DB_CONSUME makes no sense on a secondary index. */
+ LF_CLR(DB_RMW);
switch (flags) {
- case 0:
- case DB_JOIN_ITEM:
- break;
+ case DB_CONSUME:
+ case DB_CONSUME_WAIT:
+ return (__db_ferr(dbenv, "DB->pget", 0));
default:
- return (__db_ferr(dbp->dbenv, "DBcursor->c_get", 0));
+ /* __db_get_arg will catch the rest. */
+ break;
}
/*
- * A partial get of the key of a join cursor don't make much sense;
- * the entire key is necessary to query the primary database
- * and find the datum, and so regardless of the size of the key
- * it would not be a performance improvement. Since it would require
- * special handling, we simply disallow it.
- *
- * A partial get of the data, however, potentially makes sense (if
- * all possible data are a predictable large structure, for instance)
- * and causes us no headaches, so we permit it.
+ * We allow the pkey field to be NULL, so that we can make the
+ * two-DBT get calls into wrappers for the three-DBT ones.
*/
- if (F_ISSET(key, DB_DBT_PARTIAL)) {
- __db_err(dbp->dbenv,
- "DB_DBT_PARTIAL may not be set on key during join_get");
+ if (pkey != NULL &&
+ (ret = __dbt_ferr(dbp, "primary key", pkey, 1)) != 0)
+ return (ret);
+
+ /* But the pkey field can't be NULL if we're doing a DB_GET_BOTH. */
+ if (pkey == NULL && flags == DB_GET_BOTH) {
+ __db_err(dbenv,
+ "DB_GET_BOTH on a secondary index requires a primary key");
return (EINVAL);
}
@@ -487,27 +1308,84 @@ __db_joingetchk(dbp, key, flags)
}
/*
- * __db_putchk --
- * Common put argument checking routine.
+ * __db_put_pp --
+ * DB->put pre/post processing.
*
- * PUBLIC: int __db_putchk
- * PUBLIC: __P((const DB *, DBT *, const DBT *, u_int32_t, int, int));
+ * PUBLIC: int __db_put_pp __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
*/
int
-__db_putchk(dbp, key, data, flags, isrdonly, isdup)
- const DB *dbp;
- DBT *key;
- const DBT *data;
+__db_put_pp(dbp, txn, key, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ DBT *key, *data;
u_int32_t flags;
- int isrdonly, isdup;
{
- int ret;
+ DB_ENV *dbenv;
+ int handle_check, ret, txn_local;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->put");
+
+ if ((ret = __db_put_arg(dbp, key, data, flags)) != 0)
+ return (ret);
+
+ /* Create local transaction as necessary. */
+ if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ return (ret);
+ txn_local = 1;
+ LF_CLR(DB_AUTO_COMMIT);
+ } else
+ txn_local = 0;
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, txn, DB_LOCK_INVALIDID, 0)) != 0)
+ goto err;
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ ret = __db_put(dbp, txn, key, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+}
+
+/*
+ * __db_put_arg --
+ * Check DB->put arguments.
+ */
+static int
+__db_put_arg(dbp, key, data, flags)
+ DB *dbp;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int ret, returnkey;
+
+ dbenv = dbp->dbenv;
+ returnkey = 0;
/* Check for changes to a read-only tree. */
- if (isrdonly)
- return (__db_rdonly(dbp->dbenv, "put"));
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "put"));
+
+ /* Check for puts on a secondary. */
+ if (F_ISSET(dbp, DB_AM_SECONDARY)) {
+ __db_err(dbenv, "DB->put forbidden on secondary indices");
+ return (EINVAL);
+ }
/* Check for invalid function flags. */
+ LF_CLR(DB_AUTO_COMMIT);
switch (flags) {
case 0:
case DB_NOOVERWRITE:
@@ -515,24 +1393,26 @@ __db_putchk(dbp, key, data, flags, isrdonly, isdup)
case DB_APPEND:
if (dbp->type != DB_RECNO && dbp->type != DB_QUEUE)
goto err;
+ returnkey = 1;
break;
case DB_NODUPDATA:
if (F_ISSET(dbp, DB_AM_DUPSORT))
break;
/* FALLTHROUGH */
default:
-err: return (__db_ferr(dbp->dbenv, "DB->put", 0));
+err: return (__db_ferr(dbenv, "DB->put", 0));
}
/* Check for invalid key/data flags. */
- if ((ret = __dbt_ferr(dbp, "key", key, 0)) != 0)
+ if ((ret = __dbt_ferr(dbp, "key", key, returnkey)) != 0)
return (ret);
if ((ret = __dbt_ferr(dbp, "data", data, 0)) != 0)
return (ret);
/* Check for partial puts in the presence of duplicates. */
- if (isdup && F_ISSET(data, DB_DBT_PARTIAL)) {
- __db_err(dbp->dbenv,
+ if (F_ISSET(data, DB_DBT_PARTIAL) &&
+ (F_ISSET(dbp, DB_AM_DUP) || F_ISSET(key, DB_DBT_DUPOK))) {
+ __db_err(dbenv,
"a partial put in the presence of duplicates requires a cursor operation");
return (EINVAL);
}
@@ -541,75 +1421,814 @@ err: return (__db_ferr(dbp->dbenv, "DB->put", 0));
}
/*
- * __db_removechk --
- * DB->remove flag check.
+ * __db_stat_pp --
+ * DB->stat pre/post processing.
*
- * PUBLIC: int __db_removechk __P((const DB *, u_int32_t));
+ * PUBLIC: int __db_stat_pp __P((DB *, void *, u_int32_t));
*/
int
-__db_removechk(dbp, flags)
- const DB *dbp;
+__db_stat_pp(dbp, spp, flags)
+ DB *dbp;
+ void *spp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbp->dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->stat");
+
+ if ((ret = __db_stat_arg(dbp, flags)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0)) != 0)
+ return (ret);
+
+ ret = __db_stat(dbp, spp, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_stat --
+ * DB->stat.
+ *
+ * PUBLIC: int __db_stat __P((DB *, void *, u_int32_t));
+ */
+int
+__db_stat(dbp, spp, flags)
+ DB *dbp;
+ void *spp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DBC *dbc;
+ int ret, t_ret;
+
+ dbenv = dbp->dbenv;
+
+ /* Acquire a cursor. */
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
+ return (ret);
+
+ DEBUG_LWRITE(dbc, NULL, "DB->stat", NULL, NULL, flags);
+
+ switch (dbp->type) {
+ case DB_BTREE:
+ case DB_RECNO:
+ ret = __bam_stat(dbc, spp, flags);
+ break;
+ case DB_HASH:
+ ret = __ham_stat(dbc, spp, flags);
+ break;
+ case DB_QUEUE:
+ ret = __qam_stat(dbc, spp, flags);
+ break;
+ case DB_UNKNOWN:
+ default:
+ ret = (__db_unknown_type(dbenv, "DB->stat", dbp->type));
+ break;
+ }
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __db_stat_arg --
+ * Check DB->stat arguments.
+ */
+static int
+__db_stat_arg(dbp, flags)
+ DB *dbp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+
/* Check for invalid function flags. */
switch (flags) {
case 0:
+ case DB_FAST_STAT:
+ case DB_CACHED_COUNTS: /* Deprecated and undocumented. */
break;
+ case DB_RECORDCOUNT: /* Deprecated and undocumented. */
+ if (dbp->type == DB_RECNO)
+ break;
+ if (dbp->type == DB_BTREE && F_ISSET(dbp, DB_AM_RECNUM))
+ break;
+ goto err;
default:
- return (__db_ferr(dbp->dbenv, "DB->remove", 0));
+err: return (__db_ferr(dbenv, "DB->stat", 0));
}
return (0);
}
/*
- * __db_statchk --
- * Common stat argument checking routine.
+ * __db_sync_pp --
+ * DB->sync pre/post processing.
*
- * PUBLIC: int __db_statchk __P((const DB *, u_int32_t));
+ * PUBLIC: int __db_sync_pp __P((DB *, u_int32_t));
*/
int
-__db_statchk(dbp, flags)
- const DB *dbp;
+__db_sync_pp(dbp, flags)
+ DB *dbp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbp->dbenv);
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->sync");
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ */
+ if (flags != 0)
+ return (__db_ferr(dbenv, "DB->sync", 0));
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0)) != 0)
+ return (ret);
+
+ ret = __db_sync(dbp);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_close_pp --
+ * DBC->c_close pre/post processing.
+ *
+ * PUBLIC: int __db_c_close_pp __P((DBC *));
+ */
+int
+__db_c_close_pp(dbc)
+ DBC *dbc;
+{
+ DB_ENV *dbenv;
+ DB *dbp;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ /*
+ * If the cursor is already closed we have a serious problem, and we
+ * assume that the cursor isn't on the active queue. Don't do any of
+ * the remaining cursor close processing.
+ */
+ if (!F_ISSET(dbc, DBC_ACTIVE)) {
+ if (dbp != NULL)
+ __db_err(dbenv, "Closing already-closed cursor");
+ DB_ASSERT(0);
+ return (EINVAL);
+ }
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 0, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_c_close(dbc);
+
+ /* Release replication block. */
+ if (handle_check)
+ __env_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_count_pp --
+ * DBC->c_count pre/post processing.
+ *
+ * PUBLIC: int __db_c_count_pp __P((DBC *, db_recno_t *, u_int32_t));
+ */
+int
+__db_c_count_pp(dbc, recnop, flags)
+ DBC *dbc;
+ db_recno_t *recnop;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB *dbp;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ */
+ if (flags != 0)
+ return (__db_ferr(dbenv, "DBcursor->count", 0));
+
+ /*
+ * The cursor must be initialized, return EINVAL for an invalid cursor,
+ * otherwise 0.
+ */
+ if (!IS_INITIALIZED(dbc))
+ return (__db_curinval(dbenv));
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_c_count(dbc, recnop);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_del_pp --
+ * DBC->c_del pre/post processing.
+ *
+ * PUBLIC: int __db_c_del_pp __P((DBC *, u_int32_t));
+ */
+int
+__db_c_del_pp(dbc, flags)
+ DBC *dbc;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_c_del_arg(dbc, flags)) != 0)
+ return (ret);
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, dbc->txn, dbc->locker, 0)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ DEBUG_LWRITE(dbc, dbc->txn, "DBcursor->del", NULL, NULL, flags);
+
+ ret = __db_c_del(dbc, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_del_arg --
+ * Check DBC->c_del arguments.
+ *
+ * PUBLIC: int __db_c_del_arg __P((DBC *, u_int32_t));
+ */
+int
+__db_c_del_arg(dbc, flags)
+ DBC *dbc;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ /* Check for changes to a read-only tree. */
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "DBcursor->del"));
+
/* Check for invalid function flags. */
switch (flags) {
case 0:
- case DB_CACHED_COUNTS:
break;
- case DB_RECORDCOUNT:
- if (dbp->type == DB_RECNO)
- break;
- if (dbp->type == DB_BTREE && F_ISSET(dbp, DB_BT_RECNUM))
- break;
- goto err;
+ case DB_UPDATE_SECONDARY:
+ DB_ASSERT(F_ISSET(dbp, DB_AM_SECONDARY));
+ break;
default:
-err: return (__db_ferr(dbp->dbenv, "DB->stat", 0));
+ return (__db_ferr(dbenv, "DBcursor->del", 0));
}
+ /*
+ * The cursor must be initialized, return EINVAL for an invalid cursor,
+ * otherwise 0.
+ */
+ if (!IS_INITIALIZED(dbc))
+ return (__db_curinval(dbenv));
+
return (0);
}
/*
- * __db_syncchk --
- * Common sync argument checking routine.
+ * __db_c_dup_pp --
+ * DBC->c_dup pre/post processing.
*
- * PUBLIC: int __db_syncchk __P((const DB *, u_int32_t));
+ * PUBLIC: int __db_c_dup_pp __P((DBC *, DBC **, u_int32_t));
*/
int
-__db_syncchk(dbp, flags)
- const DB *dbp;
+__db_c_dup_pp(dbc, dbcp, flags)
+ DBC *dbc, **dbcp;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ */
+ if (flags != 0 && flags != DB_POSITION)
+ return (__db_ferr(dbenv, "DBcursor->dup", 0));
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_c_dup(dbc, dbcp, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_get_pp --
+ * DBC->c_get pre/post processing.
+ *
+ * PUBLIC: int __db_c_get_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_c_get_pp(dbc, key, data, flags)
+ DBC *dbc;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_c_get_arg(dbc, key, data, flags)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ DEBUG_LREAD(dbc, dbc->txn, "DBcursor->get",
+ flags == DB_SET || flags == DB_SET_RANGE ? key : NULL, NULL, flags);
+
+ ret = __db_c_get(dbc, key, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_get_arg --
+ * Common DBC->get argument checking, used by both DBC->get and DBC->pget.
+ */
+static int
+__db_c_get_arg(dbc, key, data, flags)
+ DBC *dbc;
+ DBT *key, *data;
u_int32_t flags;
{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int dirty, multi, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ /*
+ * Typically in checking routines that modify the flags, we have
+ * to save them and restore them, because the checking routine
+ * calls the work routine. However, this is a pure-checking
+ * routine which returns to a function that calls the work routine,
+ * so it's OK that we do not save and restore the flags, even though
+ * we modify them.
+ *
+ * Check for read-modify-write validity. DB_RMW doesn't make sense
+ * with CDB cursors since if you're going to write the cursor, you
+ * had to create it with DB_WRITECURSOR. Regardless, we check for
+ * LOCKING_ON and not STD_LOCKING, as we don't want to disallow it.
+ * If this changes, confirm that DB does not itself set the DB_RMW
+ * flag in a path where CDB may have been configured.
+ */
+ dirty = 0;
+ if (LF_ISSET(DB_DIRTY_READ | DB_RMW)) {
+ if (!LOCKING_ON(dbenv))
+ return (__db_fnl(dbenv, "DBcursor->get"));
+ if (LF_ISSET(DB_DIRTY_READ))
+ dirty = 1;
+ LF_CLR(DB_DIRTY_READ | DB_RMW);
+ }
+
+ multi = 0;
+ if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
+ multi = 1;
+ if (LF_ISSET(DB_MULTIPLE) && LF_ISSET(DB_MULTIPLE_KEY))
+ goto multi_err;
+ LF_CLR(DB_MULTIPLE | DB_MULTIPLE_KEY);
+ }
+
/* Check for invalid function flags. */
switch (flags) {
- case 0:
+ case DB_CONSUME:
+ case DB_CONSUME_WAIT:
+ if (dirty) {
+ __db_err(dbenv,
+ "DB_DIRTY_READ is not supported with DB_CONSUME or DB_CONSUME_WAIT");
+ return (EINVAL);
+ }
+ if (dbp->type != DB_QUEUE)
+ goto err;
+ break;
+ case DB_CURRENT:
+ case DB_FIRST:
+ case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
+ case DB_NEXT:
+ case DB_NEXT_DUP:
+ case DB_NEXT_NODUP:
+ case DB_SET:
+ case DB_SET_RANGE:
+ break;
+ case DB_LAST:
+ case DB_PREV:
+ case DB_PREV_NODUP:
+ if (multi)
+multi_err: return (__db_ferr(dbenv, "DBcursor->get", 1));
+ break;
+ case DB_GET_BOTHC:
+ if (dbp->type == DB_QUEUE)
+ goto err;
+ break;
+ case DB_GET_RECNO:
+ /*
+ * The one situation in which this might be legal with a
+ * non-RECNUM dbp is if dbp is a secondary and its primary is
+ * DB_AM_RECNUM.
+ */
+ if (!F_ISSET(dbp, DB_AM_RECNUM) &&
+ (!F_ISSET(dbp, DB_AM_SECONDARY) ||
+ !F_ISSET(dbp->s_primary, DB_AM_RECNUM)))
+ goto err;
+ break;
+ case DB_SET_RECNO:
+ if (!F_ISSET(dbp, DB_AM_RECNUM))
+ goto err;
break;
default:
- return (__db_ferr(dbp->dbenv, "DB->sync", 0));
+err: return (__db_ferr(dbenv, "DBcursor->get", 0));
}
+ /* Check for invalid key/data flags. */
+ if ((ret = __dbt_ferr(dbp, "key", key, 0)) != 0)
+ return (ret);
+ if ((ret = __dbt_ferr(dbp, "data", data, 0)) != 0)
+ return (ret);
+
+ if (multi) {
+ if (!F_ISSET(data, DB_DBT_USERMEM)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE/DB_MULTIPLE_KEY require DB_DBT_USERMEM be set");
+ return (EINVAL);
+ }
+ if (F_ISSET(key, DB_DBT_PARTIAL) ||
+ F_ISSET(data, DB_DBT_PARTIAL)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE/DB_MULTIPLE_KEY do not support DB_DBT_PARTIAL");
+ return (EINVAL);
+ }
+ if (data->ulen < 1024 ||
+ data->ulen < dbp->pgsize || data->ulen % 1024 != 0) {
+ __db_err(dbenv, "%s%s",
+ "DB_MULTIPLE/DB_MULTIPLE_KEY buffers must be ",
+ "aligned, at least page size and multiples of 1KB");
+ return (EINVAL);
+ }
+ }
+
+ /*
+ * The cursor must be initialized for DB_CURRENT, DB_GET_RECNO and
+ * DB_NEXT_DUP. Return EINVAL for an invalid cursor, otherwise 0.
+ */
+ if (!IS_INITIALIZED(dbc) && (flags == DB_CURRENT ||
+ flags == DB_GET_RECNO || flags == DB_NEXT_DUP))
+ return (__db_curinval(dbenv));
+
+ /* Check for consistent transaction usage. */
+ if (LF_ISSET(DB_RMW) &&
+ (ret = __db_check_txn(dbp, dbc->txn, dbc->locker, 0)) != 0)
+ return (ret);
+
+ return (0);
+}
+
+/*
+ * __db_c_pget_pp --
+ * DBC->c_pget pre/post processing.
+ *
+ * PUBLIC: int __db_c_pget_pp __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_c_pget_pp(dbc, skey, pkey, data, flags)
+ DBC *dbc;
+ DBT *skey, *pkey, *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_c_pget_arg(dbc, pkey, flags)) != 0)
+ return (ret);
+
+ if ((ret = __db_c_get_arg(dbc, skey, data, flags)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_c_pget(dbc, skey, pkey, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_pget_arg --
+ * Check DBC->pget arguments.
+ */
+static int
+__db_c_pget_arg(dbc, pkey, flags)
+ DBC *dbc;
+ DBT *pkey;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ if (!F_ISSET(dbp, DB_AM_SECONDARY)) {
+ __db_err(dbenv,
+ "DBcursor->pget may only be used on secondary indices");
+ return (EINVAL);
+ }
+
+ if (LF_ISSET(DB_MULTIPLE | DB_MULTIPLE_KEY)) {
+ __db_err(dbenv,
+ "DB_MULTIPLE and DB_MULTIPLE_KEY may not be used on secondary indices");
+ return (EINVAL);
+ }
+
+ switch (LF_ISSET(~DB_RMW)) {
+ case DB_CONSUME:
+ case DB_CONSUME_WAIT:
+ /* These flags make no sense on a secondary index. */
+ return (__db_ferr(dbenv, "DBcursor->pget", 0));
+ case DB_GET_BOTH:
+ /* DB_GET_BOTH is "get both the primary and the secondary". */
+ if (pkey == NULL) {
+ __db_err(dbenv,
+ "DB_GET_BOTH requires both a secondary and a primary key");
+ return (EINVAL);
+ }
+ break;
+ default:
+ /* __db_c_get_arg will catch the rest. */
+ break;
+ }
+
+ /*
+ * We allow the pkey field to be NULL, so that we can make the
+ * two-DBT get calls into wrappers for the three-DBT ones.
+ */
+ if (pkey != NULL &&
+ (ret = __dbt_ferr(dbp, "primary key", pkey, 0)) != 0)
+ return (ret);
+
+ /* But the pkey field can't be NULL if we're doing a DB_GET_BOTH. */
+ if (pkey == NULL && (flags & DB_OPFLAGS_MASK) == DB_GET_BOTH) {
+ __db_err(dbenv,
+ "DB_GET_BOTH on a secondary index requires a primary key");
+ return (EINVAL);
+ }
+ return (0);
+}
+
+/*
+ * __db_c_put_pp --
+ * DBC->put pre/post processing.
+ *
+ * PUBLIC: int __db_c_put_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+ */
+int
+__db_c_put_pp(dbc, key, data, flags)
+ DBC *dbc;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ if ((ret = __db_c_put_arg(dbc, key, data, flags)) != 0)
+ return (ret);
+
+ /* Check for consistent transaction usage. */
+ if ((ret = __db_check_txn(dbp, dbc->txn, dbc->locker, 0)) != 0)
+ return (ret);
+
+ /* Check for replication block. */
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ DEBUG_LWRITE(dbc, dbc->txn, "DBcursor->put",
+ flags == DB_KEYFIRST || flags == DB_KEYLAST ||
+ flags == DB_NODUPDATA || flags == DB_UPDATE_SECONDARY ?
+ key : NULL, data, flags);
+
+ ret =__db_c_put(dbc, key, data, flags);
+
+ /* Release replication block. */
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_c_put_arg --
+ * Check DBC->put arguments.
+ */
+static int
+__db_c_put_arg(dbc, key, data, flags)
+ DBC *dbc;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ int key_flags, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ key_flags = 0;
+
+ /* Check for changes to a read-only tree. */
+ if (IS_READONLY(dbp))
+ return (__db_rdonly(dbenv, "c_put"));
+
+ /* Check for puts on a secondary. */
+ if (F_ISSET(dbp, DB_AM_SECONDARY)) {
+ if (flags == DB_UPDATE_SECONDARY)
+ flags = DB_KEYLAST;
+ else {
+ __db_err(dbenv,
+ "DBcursor->put forbidden on secondary indices");
+ return (EINVAL);
+ }
+ }
+
+ /* Check for invalid function flags. */
+ switch (flags) {
+ case DB_AFTER:
+ case DB_BEFORE:
+ switch (dbp->type) {
+ case DB_BTREE:
+ case DB_HASH: /* Only with unsorted duplicates. */
+ if (!F_ISSET(dbp, DB_AM_DUP))
+ goto err;
+ if (dbp->dup_compare != NULL)
+ goto err;
+ break;
+ case DB_QUEUE: /* Not permitted. */
+ goto err;
+ case DB_RECNO: /* Only with mutable record numbers. */
+ if (!F_ISSET(dbp, DB_AM_RENUMBER))
+ goto err;
+ key_flags = 1;
+ break;
+ case DB_UNKNOWN:
+ default:
+ goto err;
+ }
+ break;
+ case DB_CURRENT:
+ /*
+ * If there is a comparison function, doing a DB_CURRENT
+ * must not change the part of the data item that is used
+ * for the comparison.
+ */
+ break;
+ case DB_NODUPDATA:
+ if (!F_ISSET(dbp, DB_AM_DUPSORT))
+ goto err;
+ /* FALLTHROUGH */
+ case DB_KEYFIRST:
+ case DB_KEYLAST:
+ key_flags = 1;
+ break;
+ default:
+err: return (__db_ferr(dbenv, "DBcursor->put", 0));
+ }
+
+ /* Check for invalid key/data flags. */
+ if (key_flags && (ret = __dbt_ferr(dbp, "key", key, 0)) != 0)
+ return (ret);
+ if ((ret = __dbt_ferr(dbp, "data", data, 0)) != 0)
+ return (ret);
+
+ /*
+ * The cursor must be initialized for anything other than DB_KEYFIRST
+ * and DB_KEYLAST, return EINVAL for an invalid cursor, otherwise 0.
+ */
+ if (!IS_INITIALIZED(dbc) && flags != DB_KEYFIRST &&
+ flags != DB_KEYLAST && flags != DB_NODUPDATA)
+ return (__db_curinval(dbenv));
+
return (0);
}
@@ -636,9 +2255,9 @@ __dbt_ferr(dbp, name, dbt, check_thread)
* database and then specify that same DBT as a key to a primary
* database, without having to clear flags.
*/
- if ((ret = __db_fchk(dbenv, name, dbt->flags,
- DB_DBT_MALLOC | DB_DBT_DUPOK |
- DB_DBT_REALLOC | DB_DBT_USERMEM | DB_DBT_PARTIAL)) != 0)
+ if ((ret = __db_fchk(dbenv, name, dbt->flags, DB_DBT_APPMALLOC |
+ DB_DBT_MALLOC | DB_DBT_DUPOK | DB_DBT_REALLOC | DB_DBT_USERMEM |
+ DB_DBT_PARTIAL)) != 0)
return (ret);
switch (F_ISSET(dbt, DB_DBT_MALLOC | DB_DBT_REALLOC | DB_DBT_USERMEM)) {
case 0:
@@ -685,3 +2304,60 @@ __db_curinval(dbenv)
"Cursor position must be set before performing this operation");
return (EINVAL);
}
+
+/*
+ * __db_txn_auto_init --
+ * Handle DB_AUTO_COMMIT initialization.
+ *
+ * PUBLIC: int __db_txn_auto_init __P((DB_ENV *, DB_TXN **));
+ */
+int
+__db_txn_auto_init(dbenv, txnidp)
+ DB_ENV *dbenv;
+ DB_TXN **txnidp;
+{
+ if (*txnidp != NULL) {
+ __db_err(dbenv,
+ "DB_AUTO_COMMIT may not be specified along with a transaction handle");
+ return (EINVAL);
+ }
+
+ if (!TXN_ON(dbenv)) {
+ __db_err(dbenv,
+ "DB_AUTO_COMMIT may not be specified in non-transactional environment");
+ return (EINVAL);
+ }
+
+ /*
+ * We're creating a transaction for the user, and we want it to block
+ * if replication recovery is running. Call the user-level API.
+ */
+ return (dbenv->txn_begin(dbenv, NULL, txnidp, 0));
+}
+
+/*
+ * __db_txn_auto_resolve --
+ * Handle DB_AUTO_COMMIT resolution.
+ *
+ * PUBLIC: int __db_txn_auto_resolve __P((DB_ENV *, DB_TXN *, int, int));
+ */
+int
+__db_txn_auto_resolve(dbenv, txn, nosync, ret)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ int nosync, ret;
+{
+ int t_ret;
+
+ /*
+ * We're resolving a transaction for the user, and must decrement the
+ * replication handle count. Call the user-level API.
+ */
+ if (ret == 0)
+ return (txn->commit(txn, nosync ? DB_TXN_NOSYNC : 0));
+
+ if ((t_ret = txn->abort(txn)) != 0)
+ return (__db_panic(dbenv, t_ret));
+
+ return (ret);
+}
diff --git a/db/db/db_join.c b/db/db/db_join.c
index 881dedde0..556ededb3 100644
--- a/db/db/db_join.c
+++ b/db/db/db_join.c
@@ -1,14 +1,14 @@
-/*-
+/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_join.c,v 11.31 2000/12/20 22:41:54 krinsky Exp $";
+static const char revid[] = "$Id: db_join.c,v 11.65 2003/10/07 18:55:39 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,16 +19,18 @@ static const char revid[] = "$Id: db_join.c,v 11.31 2000/12/20 22:41:54 krinsky
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_join.h"
-#include "db_am.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_join.h"
+#include "dbinc/btree.h"
-static int __db_join_close __P((DBC *));
+static int __db_join_close_pp __P((DBC *));
static int __db_join_cmp __P((const void *, const void *));
static int __db_join_del __P((DBC *, u_int32_t));
static int __db_join_get __P((DBC *, DBT *, DBT *, u_int32_t));
-static int __db_join_getnext __P((DBC *, DBT *, DBT *, u_int32_t));
+static int __db_join_get_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+static int __db_join_getnext __P((DBC *, DBT *, DBT *, u_int32_t, u_int32_t));
+static int __db_join_primget __P((DB *,
+ DB_TXN *, u_int32_t, DBT *, DBT *, u_int32_t));
static int __db_join_put __P((DBC *, DBT *, DBT *, u_int32_t));
/*
@@ -83,32 +85,27 @@ __db_join(primary, curslist, dbcp, flags)
DB_ENV *dbenv;
DBC *dbc;
JOIN_CURSOR *jc;
+ size_t ncurs, nslots;
+ u_int32_t i;
int ret;
- u_int32_t i, ncurs, nslots;
-
- COMPQUIET(nslots, 0);
-
- PANIC_CHECK(primary->dbenv);
-
- if ((ret = __db_joinchk(primary, curslist, flags)) != 0)
- return (ret);
+ dbenv = primary->dbenv;
dbc = NULL;
jc = NULL;
- dbenv = primary->dbenv;
if ((ret = __os_calloc(dbenv, 1, sizeof(DBC), &dbc)) != 0)
goto err;
- if ((ret = __os_calloc(dbenv,
- 1, sizeof(JOIN_CURSOR), &jc)) != 0)
+ if ((ret = __os_calloc(dbenv, 1, sizeof(JOIN_CURSOR), &jc)) != 0)
goto err;
- if ((ret = __os_malloc(dbenv, 256, NULL, &jc->j_key.data)) != 0)
+ if ((ret = __os_malloc(dbenv, 256, &jc->j_key.data)) != 0)
goto err;
jc->j_key.ulen = 256;
F_SET(&jc->j_key, DB_DBT_USERMEM);
+ F_SET(&jc->j_rdata, DB_DBT_REALLOC);
+
for (jc->j_curslist = curslist;
*jc->j_curslist != NULL; jc->j_curslist++)
;
@@ -118,7 +115,7 @@ __db_join(primary, curslist, dbcp, flags)
* the number of cursors involved in the join, because the
* list is NULL-terminated.
*/
- ncurs = jc->j_curslist - curslist;
+ ncurs = (size_t)(jc->j_curslist - curslist);
nslots = ncurs + 1;
/*
@@ -184,7 +181,7 @@ __db_join(primary, curslist, dbcp, flags)
jc->j_fdupcurs[i] = NULL;
jc->j_exhausted[i] = 0;
}
- jc->j_ncurs = ncurs;
+ jc->j_ncurs = (u_int32_t)ncurs;
/*
* If DB_JOIN_NOSORT is not set, optimize secondary cursors by
@@ -204,18 +201,21 @@ __db_join(primary, curslist, dbcp, flags)
* because this is the last thing that can fail. Modifier of this
* function beware!
*/
- if ((ret = jc->j_curslist[0]->c_dup(jc->j_curslist[0], jc->j_workcurs,
- DB_POSITIONI)) != 0)
+ if ((ret =
+ __db_c_dup(jc->j_curslist[0], jc->j_workcurs, DB_POSITION)) != 0)
goto err;
- dbc->c_close = __db_join_close;
+ dbc->c_close = __db_join_close_pp;
dbc->c_del = __db_join_del;
- dbc->c_get = __db_join_get;
+ dbc->c_get = __db_join_get_pp;
dbc->c_put = __db_join_put;
- dbc->internal = (DBC_INTERNAL *) jc;
+ dbc->internal = (DBC_INTERNAL *)jc;
dbc->dbp = primary;
jc->j_primary = primary;
+ /* Stash the first cursor's transaction here for easy access. */
+ dbc->txn = curslist[0]->txn;
+
*dbcp = dbc;
MUTEX_THREAD_LOCK(dbenv, primary->mutexp);
@@ -226,20 +226,50 @@ __db_join(primary, curslist, dbcp, flags)
err: if (jc != NULL) {
if (jc->j_curslist != NULL)
- __os_free(jc->j_curslist, nslots * sizeof(DBC *));
+ __os_free(dbenv, jc->j_curslist);
if (jc->j_workcurs != NULL) {
if (jc->j_workcurs[0] != NULL)
- __os_free(jc->j_workcurs[0], sizeof(DBC));
- __os_free(jc->j_workcurs, nslots * sizeof(DBC *));
+ __os_free(dbenv, jc->j_workcurs[0]);
+ __os_free(dbenv, jc->j_workcurs);
}
if (jc->j_fdupcurs != NULL)
- __os_free(jc->j_fdupcurs, nslots * sizeof(DBC *));
+ __os_free(dbenv, jc->j_fdupcurs);
if (jc->j_exhausted != NULL)
- __os_free(jc->j_exhausted, nslots * sizeof(u_int8_t));
- __os_free(jc, sizeof(JOIN_CURSOR));
+ __os_free(dbenv, jc->j_exhausted);
+ __os_free(dbenv, jc);
}
if (dbc != NULL)
- __os_free(dbc, sizeof(DBC));
+ __os_free(dbenv, dbc);
+ return (ret);
+}
+
+/*
+ * __db_join_close_pp --
+ * DBC->c_close pre/post processing for join cursors.
+ */
+static int
+__db_join_close_pp(dbc)
+ DBC *dbc;
+{
+ DB_ENV *dbenv;
+ DB *dbp;
+ int handle_check, ret;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbenv);
+
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 0, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_join_close(dbc);
+
+ if (handle_check)
+ __env_rep_exit(dbenv);
+
return (ret);
}
@@ -269,6 +299,76 @@ __db_join_del(dbc, flags)
return (EINVAL);
}
+/*
+ * __db_join_get_pp --
+ * DBjoin->get pre/post processing.
+ */
+static int
+__db_join_get_pp(dbc, key, data, flags)
+ DBC *dbc;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_ENV *dbenv;
+ u_int32_t handle_check, ret, save_flags;
+
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+
+ /* Save the original flags value. */
+ save_flags = flags;
+
+ PANIC_CHECK(dbenv);
+
+ if (LF_ISSET(DB_DIRTY_READ | DB_RMW)) {
+ if (!LOCKING_ON(dbp->dbenv))
+ return (__db_fnl(dbp->dbenv, "DBcursor->c_get"));
+
+ LF_CLR(DB_DIRTY_READ | DB_RMW);
+ }
+
+ switch (flags) {
+ case 0:
+ case DB_JOIN_ITEM:
+ break;
+ default:
+ return (__db_ferr(dbp->dbenv, "DBcursor->c_get", 0));
+ }
+
+ /*
+ * A partial get of the key of a join cursor don't make much sense;
+ * the entire key is necessary to query the primary database
+ * and find the datum, and so regardless of the size of the key
+ * it would not be a performance improvement. Since it would require
+ * special handling, we simply disallow it.
+ *
+ * A partial get of the data, however, potentially makes sense (if
+ * all possible data are a predictable large structure, for instance)
+ * and causes us no headaches, so we permit it.
+ */
+ if (F_ISSET(key, DB_DBT_PARTIAL)) {
+ __db_err(dbp->dbenv,
+ "DB_DBT_PARTIAL may not be set on key during join_get");
+ return (EINVAL);
+ }
+
+ handle_check = IS_REPLICATED(dbp->dbenv, dbp);
+ if (handle_check &&
+ (ret = __db_rep_enter(dbp, 1, dbc->txn != NULL)) != 0)
+ return (ret);
+
+ /* Restore the original flags value. */
+ flags = save_flags;
+
+ ret = __db_join_get(dbc, key, data, flags);
+
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
static int
__db_join_get(dbc, key_arg, data_arg, flags)
DBC *dbc;
@@ -279,18 +379,19 @@ __db_join_get(dbc, key_arg, data_arg, flags)
DB *dbp;
DBC *cp;
JOIN_CURSOR *jc;
- int ret;
- u_int32_t i, j, operation;
+ int db_manage_data, ret;
+ u_int32_t i, j, operation, opmods;
dbp = dbc->dbp;
jc = (JOIN_CURSOR *)dbc->internal;
- PANIC_CHECK(dbp->dbenv);
-
operation = LF_ISSET(DB_OPFLAGS_MASK);
- if ((ret = __db_joingetchk(dbp, key_arg, flags)) != 0)
- return (ret);
+ /* !!!
+ * If the set of flags here changes, check that __db_join_primget
+ * is updated to handle them properly.
+ */
+ opmods = LF_ISSET(DB_RMW | DB_DIRTY_READ);
/*
* Since we are fetching the key as a datum in the secondary indices,
@@ -319,13 +420,13 @@ __db_join_get(dbc, key_arg, data_arg, flags)
goto samekey;
F_CLR(jc, JOIN_RETRY);
-retry: ret = jc->j_workcurs[0]->c_get(jc->j_workcurs[0],
- &jc->j_key, key_n, jc->j_exhausted[0] ? DB_NEXT_DUP : DB_CURRENT);
+retry: ret = __db_c_get(jc->j_workcurs[0], &jc->j_key, key_n,
+ opmods | (jc->j_exhausted[0] ? DB_NEXT_DUP : DB_CURRENT));
if (ret == ENOMEM) {
jc->j_key.ulen <<= 1;
if ((ret = __os_realloc(dbp->dbenv,
- jc->j_key.ulen, NULL, &jc->j_key.data)) != 0)
+ jc->j_key.ulen, &jc->j_key.data)) != 0)
goto mem_err;
goto retry;
}
@@ -347,7 +448,7 @@ retry: ret = jc->j_workcurs[0]->c_get(jc->j_workcurs[0],
*/
for (i = 1; i < jc->j_ncurs; i++) {
if (jc->j_fdupcurs[i] != NULL &&
- (ret = jc->j_fdupcurs[i]->c_close(jc->j_fdupcurs[i])) != 0)
+ (ret = __db_c_close(jc->j_fdupcurs[i])) != 0)
goto err;
jc->j_fdupcurs[i] = NULL;
}
@@ -371,15 +472,14 @@ retry: ret = jc->j_workcurs[0]->c_get(jc->j_workcurs[0],
DB_ASSERT(jc->j_curslist[i] != NULL);
if (jc->j_workcurs[i] == NULL)
/* If this is NULL, we need to dup curslist into it. */
- if ((ret = jc->j_curslist[i]->c_dup(
- jc->j_curslist[i], jc->j_workcurs + i,
- DB_POSITIONI)) != 0)
+ if ((ret = __db_c_dup(jc->j_curslist[i],
+ jc->j_workcurs + i, DB_POSITION)) != 0)
goto err;
retry2: cp = jc->j_workcurs[i];
if ((ret = __db_join_getnext(cp, &jc->j_key, key_n,
- jc->j_exhausted[i])) == DB_NOTFOUND) {
+ jc->j_exhausted[i], opmods)) == DB_NOTFOUND) {
/*
* jc->j_workcurs[i] has no more of the datum we're
* interested in. Go back one cursor and get
@@ -424,7 +524,7 @@ retry2: cp = jc->j_workcurs[i];
* and let strange things happen--we
* can't make rope childproof.
*/
- if ((ret = jc->j_workcurs[j]->c_close(
+ if ((ret = __db_c_close(
jc->j_workcurs[j])) != 0)
goto err;
if (!SORTED_SET(jc, 0) ||
@@ -437,10 +537,10 @@ retry2: cp = jc->j_workcurs[i];
jc->j_workcurs[j] = NULL;
else
/* Partial reset suffices. */
- if ((jc->j_fdupcurs[j]->c_dup(
+ if ((__db_c_dup(
jc->j_fdupcurs[j],
&jc->j_workcurs[j],
- DB_POSITIONI)) != 0)
+ DB_POSITION)) != 0)
goto err;
jc->j_exhausted[j] = 0;
}
@@ -456,14 +556,13 @@ retry2: cp = jc->j_workcurs[i];
for (j = i + 1;
jc->j_workcurs[j] != NULL;
j++) {
- if ((ret = jc->j_workcurs[j]->c_close(
- jc->j_workcurs[j])) != 0)
+ if ((ret =
+ __db_c_close(jc->j_workcurs[j])) != 0)
goto err;
jc->j_exhausted[j] = 0;
if (jc->j_fdupcurs[j] != NULL &&
- (ret = jc->j_fdupcurs[j]->c_dup(
- jc->j_fdupcurs[j], &jc->j_workcurs[j],
- DB_POSITIONI)) != 0)
+ (ret = __db_c_dup(jc->j_fdupcurs[j],
+ &jc->j_workcurs[j], DB_POSITION)) != 0)
goto err;
else
jc->j_workcurs[j] = NULL;
@@ -475,7 +574,7 @@ retry2: cp = jc->j_workcurs[i];
if (ret == ENOMEM) {
jc->j_key.ulen <<= 1;
if ((ret = __os_realloc(dbp->dbenv, jc->j_key.ulen,
- NULL, &jc->j_key.data)) != 0) {
+ &jc->j_key.data)) != 0) {
mem_err: __db_err(dbp->dbenv,
"Allocation failed for join key, len = %lu",
(u_long)jc->j_key.ulen);
@@ -510,7 +609,7 @@ mem_err: __db_err(dbp->dbenv,
* duplicate duplicates; store this into jc->j_fdupcurs[i].
*/
if (SORTED_SET(jc, i) && jc->j_fdupcurs[i] == NULL && (ret =
- cp->c_dup(cp, &jc->j_fdupcurs[i], DB_POSITIONI)) != 0)
+ __db_c_dup(cp, &jc->j_fdupcurs[i], DB_POSITION)) != 0)
goto err;
}
@@ -523,8 +622,8 @@ samekey: /*
* Get the key we tried and failed to return last time;
* it should be the current datum of all the secondary cursors.
*/
- if ((ret = jc->j_workcurs[0]->c_get(jc->j_workcurs[0],
- &jc->j_key, key_n, DB_CURRENT)) != 0)
+ if ((ret = __db_c_get(jc->j_workcurs[0],
+ &jc->j_key, key_n, DB_CURRENT | opmods)) != 0)
return (ret);
F_CLR(jc, JOIN_RETRY);
}
@@ -532,36 +631,28 @@ samekey: /*
/*
* ret == 0; we have a key to return.
*
- * If DB_DBT_USERMEM or DB_DBT_MALLOC is set, we need to
- * copy it back into the dbt we were given for the key;
- * call __db_retcopy.
- *
- * Otherwise, assert that we do not in fact need to copy anything
- * and simply proceed.
+ * If DB_DBT_USERMEM or DB_DBT_MALLOC is set, we need to copy the key
+ * back into the dbt we were given for the key; call __db_retcopy.
+ * Otherwise, assert that we do not need to copy anything and proceed.
*/
- if (F_ISSET(key_arg, DB_DBT_USERMEM) ||
- F_ISSET(key_arg, DB_DBT_MALLOC)) {
+ DB_ASSERT(F_ISSET(
+ key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC) || key_n == key_arg);
+
+ if (F_ISSET(key_arg, DB_DBT_USERMEM | DB_DBT_MALLOC) &&
+ (ret = __db_retcopy(dbp->dbenv,
+ key_arg, key_n->data, key_n->size, NULL, NULL)) != 0) {
/*
- * We need to copy the key back into our original
- * datum. Do so.
+ * The retcopy failed, most commonly because we have a user
+ * buffer for the key which is too small. Set things up to
+ * retry next time, and return.
*/
- if ((ret = __db_retcopy(dbp,
- key_arg, key_n->data, key_n->size, NULL, NULL)) != 0) {
- /*
- * The retcopy failed, most commonly because we
- * have a user buffer for the key which is too small.
- * Set things up to retry next time, and return.
- */
- F_SET(jc, JOIN_RETRY);
- return (ret);
- }
- } else
- DB_ASSERT(key_n == key_arg);
+ F_SET(jc, JOIN_RETRY);
+ return (ret);
+ }
/*
- * If DB_JOIN_ITEM is
- * set, we return it; otherwise we do the lookup in the
- * primary and then return.
+ * If DB_JOIN_ITEM is set, we return it; otherwise we do the lookup
+ * in the primary and then return.
*
* Note that we use key_arg here; it is safe (and appropriate)
* to do so.
@@ -569,29 +660,68 @@ samekey: /*
if (operation == DB_JOIN_ITEM)
return (0);
- if ((ret = jc->j_primary->get(jc->j_primary,
- jc->j_curslist[0]->txn, key_arg, data_arg, 0)) != 0)
- /*
- * The get on the primary failed, most commonly because we're
- * using a user buffer that's not big enough. Flag our
- * failure so we can return the same key next time.
- */
- F_SET(jc, JOIN_RETRY);
+ /*
+ * If data_arg->flags == 0--that is, if DB is managing the
+ * data DBT's memory--it's not safe to just pass the DBT
+ * through to the primary get call, since we don't want that
+ * memory to belong to the primary DB handle (and if the primary
+ * is free-threaded, it can't anyway).
+ *
+ * Instead, use memory that is managed by the join cursor, in
+ * jc->j_rdata.
+ */
+ if (!F_ISSET(data_arg, DB_DBT_MALLOC | DB_DBT_REALLOC | DB_DBT_USERMEM))
+ db_manage_data = 1;
+ else
+ db_manage_data = 0;
+ if ((ret = __db_join_primget(jc->j_primary,
+ jc->j_curslist[0]->txn, jc->j_curslist[0]->locker, key_arg,
+ db_manage_data ? &jc->j_rdata : data_arg, opmods)) != 0) {
+ if (ret == DB_NOTFOUND)
+ /*
+ * If ret == DB_NOTFOUND, the primary and secondary
+ * are out of sync; every item in each secondary
+ * should correspond to something in the primary,
+ * or we shouldn't have done the join this way.
+ * Wail.
+ */
+ ret = __db_secondary_corrupt(jc->j_primary);
+ else
+ /*
+ * The get on the primary failed for some other
+ * reason, most commonly because we're using a user
+ * buffer that's not big enough. Flag our failure
+ * so we can return the same key next time.
+ */
+ F_SET(jc, JOIN_RETRY);
+ }
+ if (db_manage_data && ret == 0) {
+ data_arg->data = jc->j_rdata.data;
+ data_arg->size = jc->j_rdata.size;
+ }
return (ret);
}
-static int
+/*
+ * __db_join_close --
+ * DBC->c_close for join cursors.
+ *
+ * PUBLIC: int __db_join_close __P((DBC *));
+ */
+int
__db_join_close(dbc)
DBC *dbc;
{
DB *dbp;
+ DB_ENV *dbenv;
JOIN_CURSOR *jc;
int ret, t_ret;
u_int32_t i;
jc = (JOIN_CURSOR *)dbc->internal;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
ret = t_ret = 0;
/*
@@ -599,11 +729,11 @@ __db_join_close(dbc)
* must happen before any action that can fail and return, or else
* __db_close may loop indefinitely.
*/
- MUTEX_THREAD_LOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
TAILQ_REMOVE(&dbp->join_queue, dbc, links);
- MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
- PANIC_CHECK(dbc->dbp->dbenv);
+ PANIC_CHECK(dbenv);
/*
* Close any open scratch cursors. In each case, there may
@@ -617,21 +747,23 @@ __db_join_close(dbc)
* mucking with.
*/
for (i = 0; i < jc->j_ncurs; i++) {
- if (jc->j_workcurs[i] != NULL && (t_ret =
- jc->j_workcurs[i]->c_close(jc->j_workcurs[i])) != 0)
+ if (jc->j_workcurs[i] != NULL &&
+ (t_ret = __db_c_close(jc->j_workcurs[i])) != 0)
ret = t_ret;
- if (jc->j_fdupcurs[i] != NULL && (t_ret =
- jc->j_fdupcurs[i]->c_close(jc->j_fdupcurs[i])) != 0)
+ if (jc->j_fdupcurs[i] != NULL &&
+ (t_ret = __db_c_close(jc->j_fdupcurs[i])) != 0)
ret = t_ret;
}
- __os_free(jc->j_exhausted, 0);
- __os_free(jc->j_curslist, 0);
- __os_free(jc->j_workcurs, 0);
- __os_free(jc->j_fdupcurs, 0);
- __os_free(jc->j_key.data, jc->j_key.ulen);
- __os_free(jc, sizeof(JOIN_CURSOR));
- __os_free(dbc, sizeof(DBC));
+ __os_free(dbenv, jc->j_exhausted);
+ __os_free(dbenv, jc->j_curslist);
+ __os_free(dbenv, jc->j_workcurs);
+ __os_free(dbenv, jc->j_fdupcurs);
+ __os_free(dbenv, jc->j_key.data);
+ if (jc->j_rdata.data != NULL)
+ __os_ufree(dbenv, jc->j_rdata.data);
+ __os_free(dbenv, jc);
+ __os_free(dbenv, dbc);
return (ret);
}
@@ -652,10 +784,10 @@ __db_join_close(dbc)
* If no matching datum exists, returns DB_NOTFOUND, else 0.
*/
static int
-__db_join_getnext(dbc, key, data, exhausted)
+__db_join_getnext(dbc, key, data, exhausted, opmods)
DBC *dbc;
DBT *key, *data;
- u_int32_t exhausted;
+ u_int32_t exhausted, opmods;
{
int ret, cmp;
DB *dbp;
@@ -667,10 +799,14 @@ __db_join_getnext(dbc, key, data, exhausted)
switch (exhausted) {
case 0:
+ /*
+ * We don't want to step on data->data; use a new
+ * DBT and malloc so we don't step on dbc's rdata memory.
+ */
memset(&ldata, 0, sizeof(DBT));
- /* We don't want to step on data->data; malloc. */
F_SET(&ldata, DB_DBT_MALLOC);
- if ((ret = dbc->c_get(dbc, key, &ldata, DB_CURRENT)) != 0)
+ if ((ret = __db_c_get(dbc,
+ key, &ldata, opmods | DB_CURRENT)) != 0)
break;
cmp = func(dbp, data, &ldata);
if (cmp == 0) {
@@ -679,10 +815,10 @@ __db_join_getnext(dbc, key, data, exhausted)
* it into data, then free the buffer we malloc'ed
* above.
*/
- if ((ret = __db_retcopy(dbp, data, ldata.data,
+ if ((ret = __db_retcopy(dbp->dbenv, data, ldata.data,
ldata.size, &data->data, &data->size)) != 0)
return (ret);
- __os_free(ldata.data, 0);
+ __os_ufree(dbp->dbenv, ldata.data);
return (0);
}
@@ -691,10 +827,10 @@ __db_join_getnext(dbc, key, data, exhausted)
* dups. We just forget about ldata and free
* its buffer--data contains the value we're searching for.
*/
- __os_free(ldata.data, 0);
+ __os_ufree(dbp->dbenv, ldata.data);
/* FALLTHROUGH */
case 1:
- ret = dbc->c_get(dbc, key, data, DB_GET_BOTHC);
+ ret = __db_c_get(dbc, key, data, opmods | DB_GET_BOTHC);
break;
default:
ret = EINVAL;
@@ -708,7 +844,6 @@ __db_join_getnext(dbc, key, data, exhausted)
* __db_join_cmp --
* Comparison function for sorting DBCs in cardinality order.
*/
-
static int
__db_join_cmp(a, b)
const void *a, *b;
@@ -716,15 +851,79 @@ __db_join_cmp(a, b)
DBC *dbca, *dbcb;
db_recno_t counta, countb;
- /* In case c_count fails, pretend cursors are equal. */
- counta = countb = 0;
-
dbca = *((DBC * const *)a);
dbcb = *((DBC * const *)b);
- if (dbca->c_count(dbca, &counta, 0) != 0 ||
- dbcb->c_count(dbcb, &countb, 0) != 0)
+ if (__db_c_count(dbca, &counta) != 0 ||
+ __db_c_count(dbcb, &countb) != 0)
return (0);
- return (counta - countb);
+ return ((long)counta - (long)countb);
+}
+
+/*
+ * __db_join_primget --
+ * Perform a DB->get in the primary, being careful not to use a new
+ * locker ID if we're doing CDB locking.
+ */
+static int
+__db_join_primget(dbp, txn, lockerid, key, data, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ u_int32_t lockerid;
+ DBT *key, *data;
+ u_int32_t flags;
+{
+ DBC *dbc;
+ int dirty, ret, rmw, t_ret;
+
+ /*
+ * The only allowable flags here are the two flags copied into
+ * "opmods" in __db_join_get, DB_RMW and DB_DIRTY_READ. The former
+ * is an op on the c_get call, the latter on the cursor call.
+ * It's a DB bug if we allow any other flags down in here.
+ */
+ rmw = LF_ISSET(DB_RMW);
+ dirty = LF_ISSET(DB_DIRTY_READ);
+ LF_CLR(DB_RMW | DB_DIRTY_READ);
+ DB_ASSERT(flags == 0);
+
+ if ((ret = __db_cursor_int(dbp,
+ txn, dbp->type, PGNO_INVALID, 0, lockerid, &dbc)) != 0)
+ return (ret);
+
+ if (dirty ||
+ (txn != NULL && F_ISSET(txn, TXN_DIRTY_READ)))
+ F_SET(dbc, DBC_DIRTY_READ);
+ F_SET(dbc, DBC_TRANSIENT);
+
+ /*
+ * This shouldn't be necessary, thanks to the fact that join cursors
+ * swap in their own DB_DBT_REALLOC'ed buffers, but just for form's
+ * sake, we mirror what __db_get does.
+ */
+ SET_RET_MEM(dbc, dbp);
+
+ ret = __db_c_get(dbc, key, data, DB_SET | rmw);
+
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __db_secondary_corrupt --
+ * Report that a secondary index appears corrupt, as it has a record
+ * that does not correspond to a record in the primary or vice versa.
+ *
+ * PUBLIC: int __db_secondary_corrupt __P((DB *));
+ */
+int
+__db_secondary_corrupt(dbp)
+ DB *dbp;
+{
+ __db_err(dbp->dbenv,
+ "Secondary index corrupt: not consistent with primary");
+ return (DB_SECONDARY_BAD);
}
diff --git a/db/db/db_meta.c b/db/db/db_meta.c
index 5b57c3694..6ecc1e781 100644
--- a/db/db/db_meta.c
+++ b/db/db/db_meta.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_meta.c,v 11.26 2001/01/16 21:57:19 ubell Exp $";
+static const char revid[] = "$Id: db_meta.c,v 11.77 2003/09/09 16:42:06 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,12 +53,40 @@ static const char revid[] = "$Id: db_meta.c,v 11.26 2001/01/16 21:57:19 ubell Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "txn.h"
-#include "db_am.h"
-#include "btree.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/db_am.h"
+
+static void __db_init_meta __P((DB *, void *, db_pgno_t, u_int32_t));
+
+/*
+ * __db_init_meta --
+ * Helper function for __db_new that initializes the important fields in
+ * a meta-data page (used instead of P_INIT). We need to make sure that we
+ * retain the page number and LSN of the existing page.
+ */
+static void
+__db_init_meta(dbp, p, pgno, pgtype)
+ DB *dbp;
+ void *p;
+ db_pgno_t pgno;
+ u_int32_t pgtype;
+{
+ DB_LSN save_lsn;
+ DBMETA *meta;
+
+ meta = (DBMETA *)p;
+ save_lsn = meta->lsn;
+ memset(meta, 0, sizeof(DBMETA));
+ meta->lsn = save_lsn;
+ meta->pagesize = dbp->pgsize;
+ if (F_ISSET(dbp, DB_AM_CHKSUM))
+ FLD_SET(meta->metaflags, DBMETA_CHKSUM);
+ meta->pgno = pgno;
+ meta->type = (u_int8_t)pgtype;
+}
/*
* __db_new --
@@ -75,60 +103,112 @@ __db_new(dbc, type, pagepp)
DBMETA *meta;
DB *dbp;
DB_LOCK metalock;
+ DB_LSN lsn;
+ DB_MPOOLFILE *mpf;
PAGE *h;
- db_pgno_t pgno;
- int ret;
+ db_pgno_t last, pgno, newnext;
+ u_int32_t meta_flags;
+ int extend, ret;
- dbp = dbc->dbp;
meta = NULL;
+ meta_flags = 0;
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
h = NULL;
+ newnext = PGNO_INVALID;
pgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc,
LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0)
goto err;
-
+ last = meta->last_pgno;
if (meta->free == PGNO_INVALID) {
- if ((ret = memp_fget(dbp->mpf, &pgno, DB_MPOOL_NEW, &h)) != 0)
- goto err;
- ZERO_LSN(h->lsn);
- h->pgno = pgno;
+ last = pgno = meta->last_pgno + 1;
+ ZERO_LSN(lsn);
+ extend = 1;
} else {
pgno = meta->free;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
- meta->free = h->next_pgno;
- (void)memp_fset(dbp->mpf, (PAGE *)meta, DB_MPOOL_DIRTY);
+
+ /*
+ * We want to take the first page off the free list and
+ * then set meta->free to the that page's next_pgno, but
+ * we need to log the change first.
+ */
+ newnext = h->next_pgno;
+ lsn = h->lsn;
+ extend = 0;
}
- DB_ASSERT(TYPE(h) == P_INVALID);
+ /*
+ * Log the allocation before fetching the new page. If we
+ * don't have room in the log then we don't want to tell
+ * mpool to extend the file.
+ */
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __db_pg_alloc_log(dbp, dbc->txn, &LSN(meta), 0,
+ &LSN(meta), PGNO_BASE_MD, &lsn, pgno,
+ (u_int32_t)type, newnext)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(LSN(meta));
- if (TYPE(h) != P_INVALID)
- return (__db_panic(dbp->dbenv, EINVAL));
+ meta_flags = DB_MPOOL_DIRTY;
+ meta->free = newnext;
- /* Log the change. */
- if (DB_LOGGING(dbc)) {
- if ((ret = __db_pg_alloc_log(dbp->dbenv,
- dbc->txn, &LSN(meta), 0, dbp->log_fileid,
- &LSN(meta), &h->lsn, h->pgno,
- (u_int32_t)type, meta->free)) != 0)
+ if (extend == 1) {
+ if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_NEW, &h)) != 0)
goto err;
- LSN(h) = LSN(meta);
+ DB_ASSERT(last == pgno);
+ meta->last_pgno = pgno;
+ ZERO_LSN(h->lsn);
+ h->pgno = pgno;
}
+ LSN(h) = LSN(meta);
+
+ DB_ASSERT(TYPE(h) == P_INVALID);
- (void)memp_fput(dbp->mpf, (PAGE *)meta, DB_MPOOL_DIRTY);
+ if (TYPE(h) != P_INVALID)
+ return (__db_panic(dbp->dbenv, EINVAL));
+
+ (void)__memp_fput(mpf, (PAGE *)meta, DB_MPOOL_DIRTY);
(void)__TLPUT(dbc, metalock);
- P_INIT(h, dbp->pgsize, h->pgno, PGNO_INVALID, PGNO_INVALID, 0, type);
+ switch (type) {
+ case P_BTREEMETA:
+ case P_HASHMETA:
+ case P_QAMMETA:
+ __db_init_meta(dbp, h, h->pgno, type);
+ break;
+ default:
+ P_INIT(h, dbp->pgsize,
+ h->pgno, PGNO_INVALID, PGNO_INVALID, 0, type);
+ break;
+ }
+
+ /*
+ * If dirty reads are enabled and we are in a transaction, we could
+ * abort this allocation after the page(s) pointing to this
+ * one have their locks downgraded. This would permit dirty readers
+ * to access this page which is ok, but they must be off the
+ * page when we abort. This will also prevent updates happening
+ * to this page until we commit.
+ */
+ if (F_ISSET(dbc->dbp, DB_AM_DIRTY) && dbc->txn != NULL) {
+ if ((ret = __db_lget(dbc, 0,
+ h->pgno, DB_LOCK_WWRITE, 0, &metalock)) != 0)
+ goto err;
+ }
*pagepp = h;
return (0);
err: if (h != NULL)
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
if (meta != NULL)
- (void)memp_fput(dbp->mpf, meta, 0);
+ (void)__memp_fput(mpf, meta, meta_flags);
(void)__TLPUT(dbc, metalock);
return (ret);
}
@@ -146,13 +226,15 @@ __db_free(dbc, h)
{
DBMETA *meta;
DB *dbp;
- DBT ldbt;
+ DBT ddbt, ldbt;
DB_LOCK metalock;
+ DB_MPOOLFILE *mpf;
db_pgno_t pgno;
u_int32_t dirty_flag;
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
/*
* Retrieve the metadata page and insert the page at the head of
@@ -163,43 +245,79 @@ __db_free(dbc, h)
dirty_flag = 0;
pgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc,
- LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ LCK_ALWAYS, pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, (PAGE **)&meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0) {
(void)__TLPUT(dbc, metalock);
goto err;
}
DB_ASSERT(h->pgno != meta->free);
/* Log the change. */
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
memset(&ldbt, 0, sizeof(ldbt));
ldbt.data = h;
- ldbt.size = P_OVERHEAD;
- if ((ret = __db_pg_free_log(dbp->dbenv,
- dbc->txn, &LSN(meta), 0, dbp->log_fileid, h->pgno,
- &LSN(meta), &ldbt, meta->free)) != 0) {
- (void)memp_fput(dbp->mpf, (PAGE *)meta, 0);
+ ldbt.size = P_OVERHEAD(dbp);
+ switch (h->type) {
+ case P_HASH:
+ case P_IBTREE:
+ case P_IRECNO:
+ case P_LBTREE:
+ case P_LRECNO:
+ case P_LDUP:
+ if (h->entries > 0) {
+ ldbt.size += h->entries * sizeof(db_indx_t);
+ ddbt.data = (u_int8_t *)h + h->hf_offset;
+ ddbt.size = dbp->pgsize - h->hf_offset;
+ ret = __db_pg_freedata_log(dbp, dbc->txn,
+ &LSN(meta), 0, h->pgno, &LSN(meta),
+ PGNO_BASE_MD, &ldbt, meta->free, &ddbt);
+ break;
+ }
+ goto log;
+ case P_HASHMETA:
+ ldbt.size = sizeof(HMETA);
+ goto log;
+ case P_BTREEMETA:
+ ldbt.size = sizeof(BTMETA);
+ goto log;
+ case P_OVERFLOW:
+ ldbt.size += OV_LEN(h);
+ goto log;
+ default:
+ DB_ASSERT(h->type != P_QAMDATA);
+
+log: ret = __db_pg_free_log(dbp,
+ dbc->txn, &LSN(meta), 0, h->pgno,
+ &LSN(meta), PGNO_BASE_MD, &ldbt, meta->free);
+ }
+ if (ret != 0) {
+ (void)__memp_fput(mpf, (PAGE *)meta, 0);
(void)__TLPUT(dbc, metalock);
- return (ret);
+ goto err;
}
- LSN(h) = LSN(meta);
- }
+ } else
+ LSN_NOT_LOGGED(LSN(meta));
+ LSN(h) = LSN(meta);
P_INIT(h, dbp->pgsize, h->pgno, PGNO_INVALID, meta->free, 0, P_INVALID);
+#ifdef DIAGNOSTIC
+ memset((u_int8_t *)
+ h + P_OVERHEAD(dbp), CLEAR_BYTE, dbp->pgsize - P_OVERHEAD(dbp));
+#endif
meta->free = h->pgno;
/* Discard the metadata page. */
- if ((t_ret = memp_fput(dbp->mpf,
- (PAGE *)meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ if ((t_ret =
+ __memp_fput(mpf, (PAGE *)meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
if ((t_ret = __TLPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
/* Discard the caller's page reference. */
dirty_flag = DB_MPOOL_DIRTY;
-err: if ((t_ret = memp_fput(dbp->mpf, h, dirty_flag)) != 0 && ret == 0)
+err: if ((t_ret = __memp_fput(mpf, h, dirty_flag)) != 0 && ret == 0)
ret = t_ret;
/*
@@ -220,51 +338,72 @@ int
__db_lprint(dbc)
DBC *dbc;
{
+ DB_ENV *dbenv;
DB *dbp;
DB_LOCKREQ req;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
- if (LOCKING_ON(dbp->dbenv)) {
+ if (LOCKING_ON(dbenv)) {
req.op = DB_LOCK_DUMP;
- lock_vec(dbp->dbenv, dbc->locker, 0, &req, 1, NULL);
+ (void)__lock_vec(dbenv, dbc->locker, 0, &req, 1, NULL);
}
return (0);
}
#endif
/*
+ * Implement the rules for transactional locking. We can release the previous
+ * lock if we are not in a transaction or COUPLE_ALWAYS is specifed (used in
+ * record locking). If we are doing dirty reads then we can release read locks
+ * and down grade write locks.
+ */
+#define DB_PUT_ACTION(dbc, action, lockp) \
+ (((action == LCK_COUPLE || action == LCK_COUPLE_ALWAYS) && \
+ LOCK_ISSET(*lockp)) ? \
+ (dbc->txn == NULL || action == LCK_COUPLE_ALWAYS || \
+ (F_ISSET(dbc, DBC_DIRTY_READ) && \
+ (lockp)->mode == DB_LOCK_DIRTY)) ? LCK_COUPLE : \
+ (F_ISSET((dbc)->dbp, DB_AM_DIRTY) && \
+ (lockp)->mode == DB_LOCK_WRITE) ? LCK_DOWNGRADE : 0 : 0)
+
+/*
* __db_lget --
* The standard lock get call.
*
* PUBLIC: int __db_lget __P((DBC *,
- * PUBLIC: int, db_pgno_t, db_lockmode_t, int, DB_LOCK *));
+ * PUBLIC: int, db_pgno_t, db_lockmode_t, u_int32_t, DB_LOCK *));
*/
int
-__db_lget(dbc, flags, pgno, mode, lkflags, lockp)
+__db_lget(dbc, action, pgno, mode, lkflags, lockp)
DBC *dbc;
- int flags, lkflags;
+ int action;
db_pgno_t pgno;
db_lockmode_t mode;
+ u_int32_t lkflags;
DB_LOCK *lockp;
{
DB *dbp;
DB_ENV *dbenv;
DB_LOCKREQ couple[2], *reqp;
- int ret;
+ DB_TXN *txn;
+ int has_timeout, ret;
dbp = dbc->dbp;
dbenv = dbp->dbenv;
+ txn = dbc->txn;
/*
* We do not always check if we're configured for locking before
* calling __db_lget to acquire the lock.
*/
- if (CDB_LOCKING(dbenv)
- || !LOCKING_ON(dbenv) || F_ISSET(dbc, DBC_COMPENSATE)
- || (!LF_ISSET(LCK_ROLLBACK) && F_ISSET(dbc, DBC_RECOVER))
- || (!LF_ISSET(LCK_ALWAYS) && F_ISSET(dbc, DBC_OPD))) {
- lockp->off = LOCK_INVALID;
+ if (CDB_LOCKING(dbenv) ||
+ !LOCKING_ON(dbenv) || F_ISSET(dbc, DBC_COMPENSATE) ||
+ (F_ISSET(dbc, DBC_RECOVER) &&
+ (action != LCK_ROLLBACK || IS_REP_CLIENT(dbenv))) ||
+ (action != LCK_ALWAYS && F_ISSET(dbc, DBC_OPD))) {
+ LOCK_INIT(*lockp);
return (0);
}
@@ -282,27 +421,76 @@ __db_lget(dbc, flags, pgno, mode, lkflags, lockp)
if (DB_NONBLOCK(dbc))
lkflags |= DB_LOCK_NOWAIT;
- /*
- * If the object not currently locked, acquire the lock and return,
- * otherwise, lock couple.
- */
- if (LF_ISSET(LCK_COUPLE)) {
- couple[0].op = DB_LOCK_GET;
+ if (F_ISSET(dbc, DBC_DIRTY_READ) && mode == DB_LOCK_READ)
+ mode = DB_LOCK_DIRTY;
+
+ has_timeout = F_ISSET(dbc, DBC_RECOVER) ||
+ (txn != NULL && F_ISSET(txn, TXN_LOCKTIMEOUT));
+
+ switch (DB_PUT_ACTION(dbc, action, lockp)) {
+ case LCK_COUPLE:
+lck_couple: couple[0].op = has_timeout? DB_LOCK_GET_TIMEOUT : DB_LOCK_GET;
couple[0].obj = &dbc->lock_dbt;
couple[0].mode = mode;
- couple[1].op = DB_LOCK_PUT;
- couple[1].lock = *lockp;
+ if (action == LCK_COUPLE_ALWAYS)
+ action = LCK_COUPLE;
+ UMRW_SET(couple[0].timeout);
+ if (has_timeout)
+ couple[0].timeout =
+ F_ISSET(dbc, DBC_RECOVER) ? 0 : txn->lock_timeout;
+ if (action == LCK_COUPLE) {
+ couple[1].op = DB_LOCK_PUT;
+ couple[1].lock = *lockp;
+ }
- ret = lock_vec(dbenv,
- dbc->locker, lkflags, couple, 2, &reqp);
+ ret = __lock_vec(dbenv, dbc->locker,
+ lkflags, couple, action == LCK_COUPLE ? 2 : 1, &reqp);
if (ret == 0 || reqp == &couple[1])
*lockp = couple[0].lock;
- } else {
- ret = lock_get(dbenv,
+ break;
+ case LCK_DOWNGRADE:
+ if ((ret = __lock_downgrade(
+ dbenv, lockp, DB_LOCK_WWRITE, 0)) != 0)
+ return (ret);
+ /* FALL THROUGH */
+ default:
+ if (has_timeout)
+ goto lck_couple;
+ ret = __lock_get(dbenv,
dbc->locker, lkflags, &dbc->lock_dbt, mode, lockp);
+ break;
+ }
+
+ return ((ret == DB_LOCK_NOTGRANTED &&
+ !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ? DB_LOCK_DEADLOCK : ret);
+}
+
+/*
+ * __db_lput --
+ * The standard lock put call.
+ *
+ * PUBLIC: int __db_lput __P((DBC *, DB_LOCK *));
+ */
+int
+__db_lput(dbc, lockp)
+ DBC *dbc;
+ DB_LOCK *lockp;
+{
+ DB_ENV *dbenv;
+ int ret;
- if (ret != 0)
- lockp->off = LOCK_INVALID;
+ dbenv = dbc->dbp->dbenv;
+
+ switch (DB_PUT_ACTION(dbc, LCK_COUPLE, lockp)) {
+ case LCK_COUPLE:
+ ret = __lock_put(dbenv, lockp);
+ break;
+ case LCK_DOWNGRADE:
+ ret = __lock_downgrade(dbenv, lockp, DB_LOCK_WWRITE, 0);
+ break;
+ default:
+ ret = 0;
+ break;
}
return (ret);
diff --git a/db/db/db_method.c b/db/db/db_method.c
index 01568a6e1..ddd6abdd1 100644
--- a/db/db/db_method.c
+++ b/db/db/db_method.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_method.c,v 11.36 2000/12/21 09:17:04 krinsky Exp $";
+static const char revid[] = "$Id: db_method.c,v 11.99 2003/07/08 20:14:17 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -21,50 +21,61 @@ static const char revid[] = "$Id: db_method.c,v 11.36 2000/12/21 09:17:04 krinsk
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "xa.h"
-#include "xa_ext.h"
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/xa.h"
+#include "dbinc_auto/xa_ext.h"
#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
#endif
-static int __db_get_byteswapped __P((DB *));
-static DBTYPE
- __db_get_type __P((DB *));
+static int __db_get_byteswapped __P((DB *, int *));
+static int __db_get_dbname __P((DB *, const char **, const char **));
+static int __db_get_env __P((DB *, DB_ENV **));
+static int __db_get_lorder __P((DB *, int *));
+static int __db_get_transactional __P((DB *, int *));
+static int __db_get_type __P((DB *, DBTYPE *dbtype));
static int __db_init __P((DB *, u_int32_t));
-static int __db_key_range
- __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+static int __db_set_alloc __P((DB *, void *(*)(size_t),
+ void *(*)(void *, size_t), void (*)(void *)));
static int __db_set_append_recno __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
+static int __db_get_cachesize __P((DB *, u_int32_t *, u_int32_t *, int *));
static int __db_set_cachesize __P((DB *, u_int32_t, u_int32_t, int));
static int __db_set_dup_compare
__P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+static int __db_get_encrypt_flags __P((DB *, u_int32_t *));
+static int __db_set_encrypt __P((DB *, const char *, u_int32_t));
+static int __db_set_feedback __P((DB *, void (*)(DB *, int, int)));
+static void __db_map_flags __P((DB *, u_int32_t *, u_int32_t *));
+static int __db_get_flags __P((DB *, u_int32_t *));
+static int __db_get_pagesize __P((DB *, u_int32_t *));
+static int __db_set_paniccall __P((DB *, void (*)(DB_ENV *, int)));
static void __db_set_errcall __P((DB *, void (*)(const char *, char *)));
+static void __db_get_errfile __P((DB *, FILE **));
static void __db_set_errfile __P((DB *, FILE *));
-static int __db_set_feedback __P((DB *, void (*)(DB *, int, int)));
-static int __db_set_flags __P((DB *, u_int32_t));
-static int __db_set_lorder __P((DB *, int));
-static int __db_set_malloc __P((DB *, void *(*)(size_t)));
-static int __db_set_pagesize __P((DB *, u_int32_t));
-static int __db_set_realloc __P((DB *, void *(*)(void *, size_t)));
+static void __db_get_errpfx __P((DB *, const char **));
static void __db_set_errpfx __P((DB *, const char *));
-static int __db_set_paniccall __P((DB *, void (*)(DB_ENV *, int)));
static void __dbh_err __P((DB *, int, const char *, ...));
static void __dbh_errx __P((DB *, const char *, ...));
+#ifdef HAVE_RPC
+static int __dbcl_init __P((DB *, DB_ENV *, u_int32_t));
+#endif
+
/*
* db_create --
* DB constructor.
+ *
+ * EXTERN: int db_create __P((DB **, DB_ENV *, u_int32_t));
*/
int
db_create(dbpp, dbenv, flags)
@@ -79,6 +90,8 @@ db_create(dbpp, dbenv, flags)
switch (flags) {
case 0:
break;
+ case DB_REP_CREATE:
+ break;
case DB_XA_CREATE:
if (dbenv != NULL) {
__db_err(dbenv,
@@ -102,32 +115,49 @@ db_create(dbpp, dbenv, flags)
if ((ret = __os_calloc(dbenv, 1, sizeof(*dbp), &dbp)) != 0)
return (ret);
#ifdef HAVE_RPC
- if (dbenv != NULL && dbenv->cl_handle != NULL)
+ if (dbenv != NULL && RPC_ON(dbenv))
ret = __dbcl_init(dbp, dbenv, flags);
else
#endif
ret = __db_init(dbp, flags);
- if (ret != 0) {
- __os_free(dbp, sizeof(*dbp));
- return (ret);
- }
+ if (ret != 0)
+ goto err;
/* If we don't have an environment yet, allocate a local one. */
if (dbenv == NULL) {
- if ((ret = db_env_create(&dbenv, 0)) != 0) {
- __os_free(dbp, sizeof(*dbp));
- return (ret);
- }
- dbenv->dblocal_ref = 0;
+ if ((ret = db_env_create(&dbenv, 0)) != 0)
+ goto err;
F_SET(dbenv, DB_ENV_DBLOCAL);
}
- if (F_ISSET(dbenv, DB_ENV_DBLOCAL))
- ++dbenv->dblocal_ref;
-
dbp->dbenv = dbenv;
+ MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ ++dbenv->db_ref;
+ MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+
+ /*
+ * Set the replication timestamp; it's 0 if we're not in a replicated
+ * environment.
+ */
+ dbp->timestamp =
+ (F_ISSET(dbenv, DB_ENV_DBLOCAL) || !REP_ON(dbenv)) ? 0 :
+ ((DB_REP *)dbenv->rep_handle)->region->timestamp;
+
+ /* Open a backing DB_MPOOLFILE handle in the memory pool. */
+ if ((ret = __memp_fcreate(dbenv, &dbp->mpf)) != 0)
+ goto err;
+
+ dbp->type = DB_UNKNOWN;
*dbpp = dbp;
return (0);
+
+err: if (dbp->mpf != NULL)
+ (void)__memp_fclose(dbp->mpf, 0);
+ if (dbenv != NULL && F_ISSET(dbenv, DB_ENV_DBLOCAL))
+ (void)__dbenv_close(dbenv, 0);
+ __os_free(dbenv, dbp);
+ *dbpp = NULL;
+ return (ret);
}
/*
@@ -141,47 +171,64 @@ __db_init(dbp, flags)
{
int ret;
- dbp->log_fileid = DB_LOGFILEID_INVALID;
+ dbp->lid = DB_LOCK_INVALIDID;
+ LOCK_INIT(dbp->handle_lock);
TAILQ_INIT(&dbp->free_queue);
TAILQ_INIT(&dbp->active_queue);
TAILQ_INIT(&dbp->join_queue);
+ LIST_INIT(&dbp->s_secondaries);
FLD_SET(dbp->am_ok,
DB_OK_BTREE | DB_OK_HASH | DB_OK_QUEUE | DB_OK_RECNO);
- dbp->close = __db_close;
- dbp->cursor = __db_cursor;
- dbp->del = NULL; /* !!! Must be set by access method. */
+ dbp->associate = __db_associate_pp;
+ dbp->close = __db_close_pp;
+ dbp->cursor = __db_cursor_pp;
+ dbp->del = __db_del_pp;
dbp->err = __dbh_err;
dbp->errx = __dbh_errx;
- dbp->fd = __db_fd;
- dbp->get = __db_get;
+ dbp->fd = __db_fd_pp;
+ dbp->get = __db_get_pp;
dbp->get_byteswapped = __db_get_byteswapped;
+ dbp->get_dbname = __db_get_dbname;
+ dbp->get_env = __db_get_env;
+ dbp->get_open_flags = __db_get_open_flags;
+ dbp->get_transactional = __db_get_transactional;
dbp->get_type = __db_get_type;
- dbp->join = __db_join;
- dbp->key_range = __db_key_range;
- dbp->open = __db_open;
- dbp->put = __db_put;
- dbp->remove = __db_remove;
- dbp->rename = __db_rename;
+ dbp->join = __db_join_pp;
+ dbp->key_range = __db_key_range_pp;
+ dbp->open = __db_open_pp;
+ dbp->pget = __db_pget_pp;
+ dbp->put = __db_put_pp;
+ dbp->remove = __db_remove_pp;
+ dbp->rename = __db_rename_pp;
+ dbp->truncate = __db_truncate_pp;
+ dbp->set_alloc = __db_set_alloc;
dbp->set_append_recno = __db_set_append_recno;
+ dbp->get_cachesize = __db_get_cachesize;
dbp->set_cachesize = __db_set_cachesize;
dbp->set_dup_compare = __db_set_dup_compare;
+ dbp->get_encrypt_flags = __db_get_encrypt_flags;
+ dbp->set_encrypt = __db_set_encrypt;
dbp->set_errcall = __db_set_errcall;
+ dbp->get_errfile = __db_get_errfile;
dbp->set_errfile = __db_set_errfile;
+ dbp->get_errpfx = __db_get_errpfx;
dbp->set_errpfx = __db_set_errpfx;
dbp->set_feedback = __db_set_feedback;
+ dbp->get_flags = __db_get_flags;
dbp->set_flags = __db_set_flags;
+ dbp->get_lorder = __db_get_lorder;
dbp->set_lorder = __db_set_lorder;
- dbp->set_malloc = __db_set_malloc;
+ dbp->get_pagesize = __db_get_pagesize;
dbp->set_pagesize = __db_set_pagesize;
dbp->set_paniccall = __db_set_paniccall;
- dbp->set_realloc = __db_set_realloc;
- dbp->stat = NULL; /* !!! Must be set by access method. */
- dbp->sync = __db_sync;
- dbp->upgrade = __db_upgrade;
- dbp->verify = __db_verify;
+ dbp->stat = __db_stat_pp;
+ dbp->sync = __db_sync_pp;
+ dbp->upgrade = __db_upgrade_pp;
+ dbp->verify = __db_verify_pp;
+
/* Access method specific. */
if ((ret = __bam_db_create(dbp)) != 0)
return (ret);
@@ -197,6 +244,9 @@ __db_init(dbp, flags)
if (LF_ISSET(DB_XA_CREATE) && (ret = __db_xa_create(dbp)) != 0)
return (ret);
+ if (LF_ISSET(DB_REP_CREATE))
+ F_SET(dbp, DB_AM_REPLICATION);
+
return (0);
}
@@ -234,7 +284,7 @@ __dbh_am_chk(dbp, flags)
* Error message, including the standard error string.
*/
static void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__dbh_err(DB *dbp, int error, const char *fmt, ...)
#else
__dbh_err(dbp, error, fmt, va_alist)
@@ -244,16 +294,7 @@ __dbh_err(dbp, error, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
-
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_err(dbp->dbenv, error, 1, 1, fmt, ap);
-
- va_end(ap);
+ DB_REAL_ERR(dbp->dbenv, error, 1, 1, fmt);
}
/*
@@ -261,7 +302,7 @@ __dbh_err(dbp, error, fmt, va_alist)
* Error message.
*/
static void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__dbh_errx(DB *dbp, const char *fmt, ...)
#else
__dbh_errx(dbp, fmt, va_alist)
@@ -270,16 +311,7 @@ __dbh_errx(dbp, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
-
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_err(dbp->dbenv, 0, 0, 1, fmt, ap);
-
- va_end(ap);
+ DB_REAL_ERR(dbp->dbenv, 0, 0, 1, fmt);
}
/*
@@ -287,48 +319,75 @@ __dbh_errx(dbp, fmt, va_alist)
* Return if database requires byte swapping.
*/
static int
-__db_get_byteswapped(dbp)
+__db_get_byteswapped(dbp, isswapped)
DB *dbp;
+ int *isswapped;
{
- DB_ILLEGAL_BEFORE_OPEN(dbp, "get_byteswapped");
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get_byteswapped");
- return (F_ISSET(dbp, DB_AM_SWAP) ? 1 : 0);
+ *isswapped = F_ISSET(dbp, DB_AM_SWAP) ? 1 : 0;
+ return (0);
}
/*
- * __db_get_type --
- * Return type of underlying database.
+ * __db_get_dbname --
+ * Get the name of the database as passed to DB->open.
*/
-static DBTYPE
-__db_get_type(dbp)
+static int
+__db_get_dbname(dbp, fnamep, dnamep)
DB *dbp;
+ const char **fnamep, **dnamep;
{
- DB_ILLEGAL_BEFORE_OPEN(dbp, "get_type");
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get_dbname");
- return (dbp->type);
+ if (fnamep != NULL)
+ *fnamep = dbp->fname;
+ if (dnamep != NULL)
+ *dnamep = dbp->dname;
+ return (0);
}
/*
- * __db_key_range --
- * Return proportion of keys above and below given key.
+ * __db_get_env --
+ * Get the DB_ENV handle that was passed to db_create.
*/
static int
-__db_key_range(dbp, txn, key, kr, flags)
+__db_get_env(dbp, dbenvp)
DB *dbp;
- DB_TXN *txn;
- DBT *key;
- DB_KEY_RANGE *kr;
- u_int32_t flags;
+ DB_ENV **dbenvp;
{
- COMPQUIET(txn, NULL);
- COMPQUIET(key, NULL);
- COMPQUIET(kr, NULL);
- COMPQUIET(flags, 0);
+ *dbenvp = dbp->dbenv;
+ return (0);
+}
- DB_ILLEGAL_BEFORE_OPEN(dbp, "key_range");
- DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE);
+/*
+ * get_transactional --
+ * Get whether this database was created in a transaction.
+ */
+static int
+__db_get_transactional(dbp, istxnp)
+ DB *dbp;
+ int *istxnp;
+{
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get_transactional");
- return (EINVAL);
+ *istxnp = F_ISSET(dbp, DB_AM_TXN) ? 1 : 0;
+ return (0);
+}
+
+/*
+ * __db_get_type --
+ * Return type of underlying database.
+ */
+static int
+__db_get_type(dbp, dbtype)
+ DB *dbp;
+ DBTYPE *dbtype;
+{
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get_type");
+
+ *dbtype = dbp->type;
+ return (0);
}
/*
@@ -340,7 +399,7 @@ __db_set_append_recno(dbp, func)
DB *dbp;
int (*func) __P((DB *, DBT *, db_recno_t));
{
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_append_recno");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_append_recno");
DB_ILLEGAL_METHOD(dbp, DB_OK_QUEUE | DB_OK_RECNO);
dbp->db_append_recno = func;
@@ -349,6 +408,22 @@ __db_set_append_recno(dbp, func)
}
/*
+ * __db_get_cachesize --
+ * Get underlying cache size.
+ */
+static int
+__db_get_cachesize(dbp, cache_gbytesp, cache_bytesp, ncachep)
+ DB *dbp;
+ u_int32_t *cache_gbytesp, *cache_bytesp;
+ int *ncachep;
+{
+ DB_ILLEGAL_IN_ENV(dbp, "DB->get_cachesize");
+
+ return (__memp_get_cachesize(dbp->dbenv,
+ cache_gbytesp, cache_bytesp, ncachep));
+}
+
+/*
* __db_set_cachesize --
* Set underlying cache size.
*/
@@ -358,10 +433,10 @@ __db_set_cachesize(dbp, cache_gbytes, cache_bytes, ncache)
u_int32_t cache_gbytes, cache_bytes;
int ncache;
{
- DB_ILLEGAL_IN_ENV(dbp, "set_cachesize");
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_cachesize");
+ DB_ILLEGAL_IN_ENV(dbp, "DB->set_cachesize");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_cachesize");
- return (dbp->dbenv->set_cachesize(
+ return (__memp_set_cachesize(
dbp->dbenv, cache_gbytes, cache_bytes, ncache));
}
@@ -374,20 +449,77 @@ __db_set_dup_compare(dbp, func)
DB *dbp;
int (*func) __P((DB *, const DBT *, const DBT *));
{
- DB_ILLEGAL_AFTER_OPEN(dbp, "dup_compare");
+ int ret;
+
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->dup_compare");
DB_ILLEGAL_METHOD(dbp, DB_OK_BTREE | DB_OK_HASH);
+ if ((ret = __db_set_flags(dbp, DB_DUPSORT)) != 0)
+ return (ret);
+
dbp->dup_compare = func;
return (0);
}
+/*
+ * __db_get_encrypt_flags --
+ */
+static int
+__db_get_encrypt_flags(dbp, flagsp)
+ DB *dbp;
+ u_int32_t *flagsp;
+{
+ DB_ILLEGAL_IN_ENV(dbp, "DB->get_encrypt_flags");
+
+ return (__dbenv_get_encrypt_flags(dbp->dbenv, flagsp));
+}
+
+/*
+ * __db_set_encrypt --
+ * Set database passwd.
+ */
+static int
+__db_set_encrypt(dbp, passwd, flags)
+ DB *dbp;
+ const char *passwd;
+ u_int32_t flags;
+{
+ DB_CIPHER *db_cipher;
+ int ret;
+
+ DB_ILLEGAL_IN_ENV(dbp, "DB->set_encrypt");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_encrypt");
+
+ if ((ret = __dbenv_set_encrypt(dbp->dbenv, passwd, flags)) != 0)
+ return (ret);
+
+ /*
+ * In a real env, this gets initialized with the region. In a local
+ * env, we must do it here.
+ */
+ db_cipher = (DB_CIPHER *)dbp->dbenv->crypto_handle;
+ if (!F_ISSET(db_cipher, CIPHER_ANY) &&
+ (ret = db_cipher->init(dbp->dbenv, db_cipher)) != 0)
+ return (ret);
+
+ return (__db_set_flags(dbp, DB_ENCRYPT));
+}
+
static void
__db_set_errcall(dbp, errcall)
DB *dbp;
void (*errcall) __P((const char *, char *));
{
- dbp->dbenv->set_errcall(dbp->dbenv, errcall);
+ __dbenv_set_errcall(dbp->dbenv, errcall);
+}
+
+static void
+__db_get_errfile(dbp, errfilep)
+ DB *dbp;
+ FILE **errfilep;
+{
+ __dbenv_get_errfile(dbp->dbenv, errfilep);
}
static void
@@ -395,7 +527,15 @@ __db_set_errfile(dbp, errfile)
DB *dbp;
FILE *errfile;
{
- dbp->dbenv->set_errfile(dbp->dbenv, errfile);
+ __dbenv_set_errfile(dbp->dbenv, errfile);
+}
+
+static void
+__db_get_errpfx(dbp, errpfxp)
+ DB *dbp;
+ const char **errpfxp;
+{
+ __dbenv_get_errpfx(dbp->dbenv, errpfxp);
}
static void
@@ -403,7 +543,7 @@ __db_set_errpfx(dbp, errpfx)
DB *dbp;
const char *errpfx;
{
- dbp->dbenv->set_errpfx(dbp->dbenv, errpfx);
+ __dbenv_set_errpfx(dbp->dbenv, errpfx);
}
static int
@@ -415,37 +555,143 @@ __db_set_feedback(dbp, feedback)
return (0);
}
+/*
+ * __db_map_flags --
+ * Maps between public and internal flag values.
+ * This function doesn't check for validity, so it can't fail.
+ */
+static void
+__db_map_flags(dbp, inflagsp, outflagsp)
+ DB *dbp;
+ u_int32_t *inflagsp, *outflagsp;
+{
+ COMPQUIET(dbp, NULL);
+
+ if (FLD_ISSET(*inflagsp, DB_CHKSUM)) {
+ FLD_SET(*outflagsp, DB_AM_CHKSUM);
+ FLD_CLR(*inflagsp, DB_CHKSUM);
+ }
+ if (FLD_ISSET(*inflagsp, DB_ENCRYPT)) {
+ FLD_SET(*outflagsp, DB_AM_ENCRYPT | DB_AM_CHKSUM);
+ FLD_CLR(*inflagsp, DB_ENCRYPT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_TXN_NOT_DURABLE)) {
+ FLD_SET(*outflagsp, DB_AM_NOT_DURABLE);
+ FLD_CLR(*inflagsp, DB_TXN_NOT_DURABLE);
+ }
+}
+
static int
+__db_get_flags(dbp, flagsp)
+ DB *dbp;
+ u_int32_t *flagsp;
+{
+ static const u_int32_t db_flags[] = {
+ DB_CHKSUM,
+ DB_DUP,
+ DB_DUPSORT,
+ DB_ENCRYPT,
+ DB_RECNUM,
+ DB_RENUMBER,
+ DB_REVSPLITOFF,
+ DB_SNAPSHOT,
+ DB_TXN_NOT_DURABLE,
+ 0
+ };
+ u_int32_t f, flags, mapped_flag;
+ int i;
+
+ flags = 0;
+ for (i = 0; (f = db_flags[i]) != 0; i++) {
+ mapped_flag = 0;
+ __db_map_flags(dbp, &f, &mapped_flag);
+ __bam_map_flags(dbp, &f, &mapped_flag);
+ __ram_map_flags(dbp, &f, &mapped_flag);
+ DB_ASSERT(f == 0);
+ if (F_ISSET(dbp, mapped_flag) == mapped_flag)
+ LF_SET(db_flags[i]);
+ }
+
+ *flagsp = flags;
+ return (0);
+}
+
+/*
+ * __db_set_flags --
+ * DB->set_flags.
+ *
+ * PUBLIC: int __db_set_flags __P((DB *, u_int32_t));
+ */
+int
__db_set_flags(dbp, flags)
DB *dbp;
u_int32_t flags;
{
+ DB_ENV *dbenv;
int ret;
- /*
- * !!!
- * The hash access method only takes two flags: DB_DUP and DB_DUPSORT.
- * The Btree access method uses them for the same purposes, and so we
- * resolve them there.
- *
- * The queue access method takes no flags.
- */
+ dbenv = dbp->dbenv;
+
+ if (LF_ISSET(DB_ENCRYPT) && !CRYPTO_ON(dbenv)) {
+ __db_err(dbenv,
+ "Database environment not configured for encryption");
+ return (EINVAL);
+ }
+ if (LF_ISSET(DB_TXN_NOT_DURABLE))
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->tx_handle, "DB_NOT_DURABLE", DB_INIT_TXN);
+
+ __db_map_flags(dbp, &flags, &dbp->flags);
+
if ((ret = __bam_set_flags(dbp, &flags)) != 0)
return (ret);
if ((ret = __ram_set_flags(dbp, &flags)) != 0)
return (ret);
- return (flags == 0 ? 0 : __db_ferr(dbp->dbenv, "DB->set_flags", 0));
+ return (flags == 0 ? 0 : __db_ferr(dbenv, "DB->set_flags", 0));
}
+/*
+ * __db_get_lorder --
+ * Get whether lorder is swapped or not.
+ */
static int
+__db_get_lorder(dbp, db_lorderp)
+ DB *dbp;
+ int *db_lorderp;
+{
+ int ret;
+
+ /* Flag if the specified byte order requires swapping. */
+ switch (ret = __db_byteorder(dbp->dbenv, 1234)) {
+ case 0:
+ *db_lorderp = F_ISSET(dbp, DB_AM_SWAP) ? 4321 : 1234;
+ break;
+ case DB_SWAPBYTES:
+ *db_lorderp = F_ISSET(dbp, DB_AM_SWAP) ? 1234 : 4321;
+ break;
+ default:
+ return (ret);
+ /* NOTREACHED */
+ }
+
+ return (0);
+}
+
+/*
+ * __db_set_lorder --
+ * Set whether lorder is swapped or not.
+ *
+ * PUBLIC: int __db_set_lorder __P((DB *, int));
+ */
+int
__db_set_lorder(dbp, db_lorder)
DB *dbp;
int db_lorder;
{
int ret;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_lorder");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_lorder");
/* Flag if the specified byte order requires swapping. */
switch (ret = __db_byteorder(dbp->dbenv, db_lorder)) {
@@ -463,22 +709,39 @@ __db_set_lorder(dbp, db_lorder)
}
static int
-__db_set_malloc(dbp, func)
+__db_set_alloc(dbp, mal_func, real_func, free_func)
DB *dbp;
- void *(*func) __P((size_t));
+ void *(*mal_func) __P((size_t));
+ void *(*real_func) __P((void *, size_t));
+ void (*free_func) __P((void *));
{
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_malloc");
+ DB_ILLEGAL_IN_ENV(dbp, "DB->set_alloc");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_alloc");
- dbp->db_malloc = func;
- return (0);
+ return (__dbenv_set_alloc(dbp->dbenv, mal_func, real_func, free_func));
}
static int
+__db_get_pagesize(dbp, db_pagesizep)
+ DB *dbp;
+ u_int32_t *db_pagesizep;
+{
+ *db_pagesizep = dbp->pgsize;
+ return (0);
+}
+
+/*
+ * __db_set_pagesize --
+ * DB->set_pagesize
+ *
+ * PUBLIC: int __db_set_pagesize __P((DB *, u_int32_t));
+ */
+int
__db_set_pagesize(dbp, db_pagesize)
DB *dbp;
u_int32_t db_pagesize;
{
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_pagesize");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_pagesize");
if (db_pagesize < DB_MIN_PGSIZE) {
__db_err(dbp->dbenv, "page sizes may not be smaller than %lu",
@@ -495,7 +758,7 @@ __db_set_pagesize(dbp, db_pagesize)
* We don't want anything that's not a power-of-2, as we rely on that
* for alignment of various types on the pages.
*/
- if ((u_int32_t)1 << __db_log2(db_pagesize) != db_pagesize) {
+ if (!POWER_OF_TWO(db_pagesize)) {
__db_err(dbp->dbenv, "page sizes must be a power-of-2");
return (EINVAL);
}
@@ -511,44 +774,24 @@ __db_set_pagesize(dbp, db_pagesize)
}
static int
-__db_set_realloc(dbp, func)
- DB *dbp;
- void *(*func) __P((void *, size_t));
-{
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_realloc");
-
- dbp->db_realloc = func;
- return (0);
-}
-
-static int
__db_set_paniccall(dbp, paniccall)
DB *dbp;
void (*paniccall) __P((DB_ENV *, int));
{
- return (dbp->dbenv->set_paniccall(dbp->dbenv, paniccall));
+ return (__dbenv_set_paniccall(dbp->dbenv, paniccall));
}
#ifdef HAVE_RPC
/*
* __dbcl_init --
* Initialize a DB structure on the server.
- *
- * PUBLIC: #ifdef HAVE_RPC
- * PUBLIC: int __dbcl_init __P((DB *, DB_ENV *, u_int32_t));
- * PUBLIC: #endif
*/
-int
+static int
__dbcl_init(dbp, dbenv, flags)
DB *dbp;
DB_ENV *dbenv;
u_int32_t flags;
{
- CLIENT *cl;
- __db_create_reply *replyp;
- __db_create_msg req;
- int ret;
-
TAILQ_INIT(&dbp->free_queue);
TAILQ_INIT(&dbp->active_queue);
/* !!!
@@ -556,6 +799,7 @@ __dbcl_init(dbp, dbenv, flags)
* not used in RPC clients. See the comment in __dbcl_db_join_ret().
*/
+ dbp->associate = __dbcl_db_associate;
dbp->close = __dbcl_db_close;
dbp->cursor = __dbcl_db_cursor;
dbp->del = __dbcl_db_del;
@@ -563,67 +807,68 @@ __dbcl_init(dbp, dbenv, flags)
dbp->errx = __dbh_errx;
dbp->fd = __dbcl_db_fd;
dbp->get = __dbcl_db_get;
- dbp->get_byteswapped = __dbcl_db_swapped;
+ dbp->get_byteswapped = __db_get_byteswapped;
+ dbp->get_transactional = __db_get_transactional;
dbp->get_type = __db_get_type;
dbp->join = __dbcl_db_join;
dbp->key_range = __dbcl_db_key_range;
- dbp->open = __dbcl_db_open;
+ dbp->get_dbname = __dbcl_db_get_name;
+ dbp->get_open_flags = __dbcl_db_get_open_flags;
+ dbp->open = __dbcl_db_open_wrap;
+ dbp->pget = __dbcl_db_pget;
dbp->put = __dbcl_db_put;
dbp->remove = __dbcl_db_remove;
dbp->rename = __dbcl_db_rename;
+ dbp->set_alloc = __dbcl_db_alloc;
dbp->set_append_recno = __dbcl_db_set_append_recno;
+ dbp->get_cachesize = __dbcl_db_get_cachesize;
dbp->set_cachesize = __dbcl_db_cachesize;
- dbp->set_dup_compare = NULL;
+ dbp->set_dup_compare = __dbcl_db_dup_compare;
+ dbp->get_encrypt_flags = __dbcl_db_get_encrypt_flags;
+ dbp->set_encrypt = __dbcl_db_encrypt;
dbp->set_errcall = __db_set_errcall;
+ dbp->get_errfile = __db_get_errfile;
dbp->set_errfile = __db_set_errfile;
+ dbp->get_errpfx = __db_get_errpfx;
dbp->set_errpfx = __db_set_errpfx;
dbp->set_feedback = __dbcl_db_feedback;
+ dbp->get_flags = __dbcl_db_get_flags;
dbp->set_flags = __dbcl_db_flags;
+ dbp->get_lorder = __dbcl_db_get_lorder;
dbp->set_lorder = __dbcl_db_lorder;
- dbp->set_malloc = __dbcl_db_malloc;
+ dbp->get_pagesize = __dbcl_db_get_pagesize;
dbp->set_pagesize = __dbcl_db_pagesize;
dbp->set_paniccall = __dbcl_db_panic;
- dbp->set_q_extentsize = __dbcl_db_extentsize;
- dbp->set_realloc = __dbcl_db_realloc;
dbp->stat = __dbcl_db_stat;
dbp->sync = __dbcl_db_sync;
+ dbp->truncate = __dbcl_db_truncate;
dbp->upgrade = __dbcl_db_upgrade;
+ dbp->verify = __dbcl_db_verify;
/*
* Set all the method specific functions to client funcs as well.
*/
dbp->set_bt_compare = __dbcl_db_bt_compare;
dbp->set_bt_maxkey = __dbcl_db_bt_maxkey;
+ dbp->get_bt_minkey = __dbcl_db_get_bt_minkey;
dbp->set_bt_minkey = __dbcl_db_bt_minkey;
dbp->set_bt_prefix = __dbcl_db_bt_prefix;
+ dbp->get_h_ffactor = __dbcl_db_get_h_ffactor;
dbp->set_h_ffactor = __dbcl_db_h_ffactor;
dbp->set_h_hash = __dbcl_db_h_hash;
+ dbp->get_h_nelem = __dbcl_db_get_h_nelem;
dbp->set_h_nelem = __dbcl_db_h_nelem;
+ dbp->get_q_extentsize = __dbcl_db_get_extentsize;
+ dbp->set_q_extentsize = __dbcl_db_extentsize;
+ dbp->get_re_delim = __dbcl_db_get_re_delim;
dbp->set_re_delim = __dbcl_db_re_delim;
+ dbp->get_re_len = __dbcl_db_get_re_len;
dbp->set_re_len = __dbcl_db_re_len;
+ dbp->get_re_pad = __dbcl_db_get_re_pad;
dbp->set_re_pad = __dbcl_db_re_pad;
+ dbp->get_re_source = __dbcl_db_get_re_source;
dbp->set_re_source = __dbcl_db_re_source;
-/*
- dbp->set_q_extentsize = __dbcl_db_q_extentsize;
-*/
-
- cl = (CLIENT *)dbenv->cl_handle;
- req.flags = flags;
- req.envpcl_id = dbenv->cl_id;
-
- /*
- * CALL THE SERVER
- */
- replyp = __db_db_create_1(&req, cl);
- if (replyp == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
- return (DB_NOSERVER);
- }
- if ((ret = replyp->status) != 0)
- return (ret);
-
- dbp->cl_id = replyp->dbpcl_id;
- return (0);
+ return (__dbcl_db_create(dbp, dbenv, flags));
}
#endif
diff --git a/db/db/db_open.c b/db/db/db_open.c
index 19413a5cf..232a435f4 100644
--- a/db/db/db_open.c
+++ b/db/db/db_open.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_open.c,v 11.215 2002/08/15 15:27:52 bostic Exp ";
+static const char revid[] = "$Id: db_open.c,v 11.236 2003/09/27 00:29:03 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -30,50 +30,49 @@ static const char revid[] = "Id: db_open.c,v 11.215 2002/08/15 15:27:52 bostic E
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
+#include "dbinc/mp.h"
#include "dbinc/qam.h"
#include "dbinc/txn.h"
-static int __db_openchk __P((DB *,
- DB_TXN *, const char *, const char *, DBTYPE, u_int32_t));
-
/*
* __db_open --
- * Main library interface to the DB access methods.
+ * DB->open method.
+ *
+ * This routine gets called in three different ways:
+ *
+ * 1. It can be called to open a file/database. In this case, subdb will
+ * be NULL and meta_pgno will be PGNO_BASE_MD.
+ * 2. It can be called to open a subdatabase during normal operation. In
+ * this case, name and subname will both be non-NULL and meta_pgno will
+ * be PGNO_BASE_MD (also PGNO_INVALID).
+ * 3. It can be called during recovery to open a file/database, in which case
+ * name will be non-NULL, subname will be NULL, and meta-pgno will be
+ * PGNO_BASE_MD.
+ * 4. It can be called during recovery to open a subdatabase, in which case
+ * name will be non-NULL, subname may be NULL and meta-pgno will be
+ * a valid pgno (i.e., not PGNO_BASE_MD).
*
* PUBLIC: int __db_open __P((DB *, DB_TXN *,
- * PUBLIC: const char *, const char *, DBTYPE, u_int32_t, int));
+ * PUBLIC: const char *, const char *, DBTYPE, u_int32_t, int, db_pgno_t));
*/
int
-__db_open(dbp, txn, name, subdb, type, flags, mode)
+__db_open(dbp, txn, fname, dname, type, flags, mode, meta_pgno)
DB *dbp;
DB_TXN *txn;
- const char *name, *subdb;
+ const char *fname, *dname;
DBTYPE type;
u_int32_t flags;
int mode;
+ db_pgno_t meta_pgno;
{
DB_ENV *dbenv;
- int remove_master, remove_me, ret, t_ret, txn_local;
+ int ret;
+ u_int32_t id;
dbenv = dbp->dbenv;
- remove_me = remove_master = txn_local = 0;
-
- PANIC_CHECK(dbenv);
-
- if ((ret = __db_openchk(dbp, txn, name, subdb, type, flags)) != 0)
- return (ret);
+ id = TXN_INVALID;
- /*
- * Create local transaction as necessary, check for consistent
- * transaction usage.
- */
- if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto(dbp, &txn)) != 0)
- return (ret);
- txn_local = 1;
- } else
- if (txn != NULL && !TXN_ON(dbenv))
- return (__db_not_txn_env(dbenv));
+ DB_TEST_RECOVERY(dbp, DB_TEST_PREOPEN, ret, fname);
/*
* If the environment was configured with threads, the DB handle
@@ -92,123 +91,21 @@ __db_open(dbp, txn, name, subdb, type, flags, mode)
if (LF_ISSET(DB_DIRTY_READ))
F_SET(dbp, DB_AM_DIRTY);
- /* Fill in the type. */
- dbp->type = type;
-
- /*
- * If we're opening a subdatabase, we have to open (and potentially
- * create) the main database, and then get (and potentially store)
- * our base page number in that database. Then, we can finally open
- * the subdatabase.
- */
- if ((ret = __db_dbopen(
- dbp, txn, name, subdb, flags, mode, PGNO_BASE_MD)) != 0)
- goto err;
-
- /*
- * You can open the database that describes the subdatabases in the
- * rest of the file read-only. The content of each key's data is
- * unspecified and applications should never be adding new records
- * or updating existing records. However, during recovery, we need
- * to open these databases R/W so we can redo/undo changes in them.
- * Likewise, we need to open master databases read/write during
- * rename and remove so we can be sure they're fully sync'ed, so
- * we provide an override flag for the purpose.
- */
- if (subdb == NULL && !IS_RECOVERING(dbenv) && !LF_ISSET(DB_RDONLY) &&
- !LF_ISSET(DB_RDWRMASTER) && F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
- "files containing multiple databases may only be opened read-only");
- ret = EINVAL;
- goto err;
- }
-
-err: /* If we were successful, don't discard the file on close. */
- if (ret == 0)
- /* If we were successful, don't discard the file on close. */
- F_CLR(dbp, DB_AM_DISCARD | DB_AM_CREATED | DB_AM_CREATED_MSTR);
- else {
- /*
- * If we are not transactional, we need to remove the
- * databases/subdatabases. If we are transactional, then
- * the abort of the child transaction should take care of
- * cleaning them up.
- */
- remove_me = txn == NULL && F_ISSET(dbp, DB_AM_CREATED);
- remove_master = txn == NULL && F_ISSET(dbp, DB_AM_CREATED_MSTR);
-
- /*
- * If we had an error, it may have happened before or after
- * we actually logged the open. If it happened before, then
- * abort won't know anything about it and won't close or
- * refresh the dbp, so we need to do it explicitly.
- */
- (void)__db_refresh(dbp, txn, DB_NOSYNC);
- }
-
- /* Remove anyone we created. */
- if (remove_master || (subdb == NULL && remove_me))
- /* Remove file. */
- (void)dbenv->dbremove(dbenv, txn, name, NULL, 0);
- else if (remove_me)
- /* Remove subdatabase. */
- (void)dbenv->dbremove(dbenv, txn, name, subdb, 0);
-
- /* Commit for DB_AUTO_COMMIT. */
- if (txn_local) {
- if (ret == 0)
- ret = txn->commit(txn, 0);
- else
- if ((t_ret = txn->abort(txn)) != 0)
- ret = __db_panic(dbenv, t_ret);
- }
-
- return (ret);
-}
-
-/*
- * __db_dbopen --
- * Open a database. This routine gets called in three different ways.
- * 1. It can be called to open a file/database. In this case, subdb will
- * be NULL and meta_pgno will be PGNO_BASE_MD.
- * 2. It can be called to open a subdatabase during normal operation. In
- * this case, name and subname will both be non-NULL and meta_pgno will
- * be PGNO_BAS_MD (also PGNO_INVALID).
- * 3. It can be called during recovery to open a subdatabase in which case
- * name will be non-NULL, subname mqy be NULL and meta-pgno will be
- * a valid pgno (i.e., not PGNO_BASE_MD).
- *
- * PUBLIC: int __db_dbopen __P((DB *, DB_TXN *,
- * PUBLIC: const char *, const char *, u_int32_t, int, db_pgno_t));
- */
-int
-__db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
- DB *dbp;
- DB_TXN *txn;
- const char *name, *subdb;
- u_int32_t flags;
- int mode;
- db_pgno_t meta_pgno;
-{
- DB_ENV *dbenv;
- int ret;
- u_int32_t id;
-
- dbenv = dbp->dbenv;
- id = TXN_INVALID;
if (txn != NULL)
F_SET(dbp, DB_AM_TXN);
- DB_TEST_RECOVERY(dbp, DB_TEST_PREOPEN, ret, name);
+ /* Fill in the type. */
+ dbp->type = type;
+
/*
- * If name is NULL, it's always a create, so make sure that we
+ * If fname is NULL, it's always a create, so make sure that we
* have a type specified. It would be nice if this checking
* were done in __db_open where most of the interface checking
* is done, but this interface (__db_dbopen) is used by the
* recovery and limbo system, so we need to safeguard this
* interface as well.
*/
- if (name == NULL) {
+ if (fname == NULL) {
F_SET(dbp, DB_AM_INMEM);
if (dbp->type == DB_UNKNOWN) {
@@ -235,17 +132,17 @@ __db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
* Store the locker in the file id structure -- we can get it
* from there as necessary, and it saves having two copies.
*/
- if (LOCKING_ON(dbenv) && (ret = dbenv->lock_id(dbenv,
- (u_int32_t *)dbp->fileid)) != 0)
+ if (LOCKING_ON(dbenv) &&
+ (ret = __lock_id(dbenv, (u_int32_t *)dbp->fileid)) != 0)
return (ret);
- } else if (subdb == NULL && meta_pgno == PGNO_BASE_MD) {
+ } else if (dname == NULL && meta_pgno == PGNO_BASE_MD) {
/* Open/create the underlying file. Acquire locks. */
if ((ret =
- __fop_file_setup(dbp, txn, name, mode, flags, &id)) != 0)
+ __fop_file_setup(dbp, txn, fname, mode, flags, &id)) != 0)
return (ret);
} else {
if ((ret = __fop_subdb_setup(dbp,
- txn, name, subdb, mode, flags)) != 0)
+ txn, fname, dname, mode, flags)) != 0)
return (ret);
meta_pgno = dbp->meta_pgno;
}
@@ -261,13 +158,13 @@ __db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
* opened and updated the master using access method interfaces,
* so we don't want to get rid of any pages that are in the mpool.
* If we created the file when we opened the master, we already hit
- * this check in a non-subdb context then.
+ * this check in a non-subdatabase context then.
*/
- if (subdb == NULL && F_ISSET(dbp, DB_AM_CREATED))
+ if (dname == NULL && F_ISSET(dbp, DB_AM_CREATED))
LF_SET(DB_TRUNCATE);
/* Set up the underlying environment. */
- if ((ret = __db_dbenv_setup(dbp, txn, name, id, flags)) != 0)
+ if ((ret = __db_dbenv_setup(dbp, txn, fname, id, flags)) != 0)
return (ret);
/*
@@ -283,21 +180,21 @@ __db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
* For unnamed files, we need to actually create the file now
* that the mpool is open.
*/
- if (name == NULL && (ret = __db_new_file(dbp, txn, NULL, NULL)) != 0)
+ if (fname == NULL && (ret = __db_new_file(dbp, txn, NULL, NULL)) != 0)
return (ret);
switch (dbp->type) {
case DB_BTREE:
- ret = __bam_open(dbp, txn, name, meta_pgno, flags);
+ ret = __bam_open(dbp, txn, fname, meta_pgno, flags);
break;
case DB_HASH:
- ret = __ham_open(dbp, txn, name, meta_pgno, flags);
+ ret = __ham_open(dbp, txn, fname, meta_pgno, flags);
break;
case DB_RECNO:
- ret = __ram_open(dbp, txn, name, meta_pgno, flags);
+ ret = __ram_open(dbp, txn, fname, meta_pgno, flags);
break;
case DB_QUEUE:
- ret = __qam_open(dbp, txn, name, meta_pgno, mode, flags);
+ ret = __qam_open(dbp, txn, fname, meta_pgno, mode, flags);
break;
case DB_UNKNOWN:
return (__db_unknown_type(dbenv, "__db_dbopen", dbp->type));
@@ -305,7 +202,7 @@ __db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
if (ret != 0)
goto err;
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTOPEN, ret, name);
+ DB_TEST_RECOVERY(dbp, DB_TEST_POSTOPEN, ret, fname);
/*
* Unnamed files don't need handle locks, so we only have to check
@@ -313,7 +210,7 @@ __db_dbopen(dbp, txn, name, subdb, flags, mode, meta_pgno)
* files.
*/
if (!F_ISSET(dbp, DB_AM_RECOVER) &&
- name != NULL && LOCK_ISSET(dbp->handle_lock)) {
+ fname != NULL && LOCK_ISSET(dbp->handle_lock)) {
if (txn != NULL) {
ret = __txn_lockevent(dbenv,
txn, dbp, &dbp->handle_lock, dbp->lid);
@@ -328,6 +225,23 @@ err:
}
/*
+ * __db_get_open_flags --
+ * Accessor for flags passed into DB->open call
+ *
+ * PUBLIC: int __db_get_open_flags __P((DB *, u_int32_t *));
+ */
+int
+__db_get_open_flags(dbp, flagsp)
+ DB *dbp;
+ u_int32_t *flagsp;
+{
+ DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->get_open_flags");
+
+ *flagsp = dbp->open_flags;
+ return (0);
+}
+
+/*
* __db_new_file --
* Create a new database file.
*
@@ -353,6 +267,7 @@ __db_new_file(dbp, txn, fhp, name)
case DB_QUEUE:
ret = __qam_new_file(dbp, txn, fhp, name);
break;
+ case DB_UNKNOWN:
default:
__db_err(dbp->dbenv,
"%s: Invalid type %d specified", name, dbp->type);
@@ -391,10 +306,10 @@ __db_init_subdb(mdbp, dbp, name, txn)
if (!F_ISSET(dbp, DB_AM_CREATED)) {
/* Subdb exists; read meta-data page and initialize. */
mpf = mdbp->mpf;
- if ((ret = mpf->get(mpf, &dbp->meta_pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &dbp->meta_pgno, 0, &meta)) != 0)
goto err;
ret = __db_meta_setup(mdbp->dbenv, dbp, name, meta, 0, 0);
- if ((t_ret = mpf->put(mpf, meta, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
/*
* If __db_meta_setup found that the meta-page hadn't
@@ -417,6 +332,7 @@ __db_init_subdb(mdbp, dbp, name, txn)
case DB_QUEUE:
ret = EINVAL;
break;
+ case DB_UNKNOWN:
default:
__db_err(dbp->dbenv,
"Invalid subdatabase type %d specified", dbp->type);
@@ -442,8 +358,9 @@ __db_chk_meta(dbenv, dbp, meta, do_metachk)
DBMETA *meta;
int do_metachk;
{
- int is_hmac, ret;
+ int is_hmac, ret, swapped;
u_int8_t *chksum;
+ u_int32_t orig_chk;
ret = 0;
@@ -453,11 +370,35 @@ __db_chk_meta(dbenv, dbp, meta, do_metachk)
is_hmac = meta->encrypt_alg == 0 ? 0 : 1;
chksum = ((BTMETA *)meta)->chksum;
- if (do_metachk && ((ret = __db_check_chksum(dbenv,
- (DB_CIPHER *)dbenv->crypto_handle, chksum, meta,
- DBMETASIZE, is_hmac)) != 0))
- return (ret);
- }
+ /*
+ * We cannot add this to __db_metaswap because that gets
+ * done later after we've verified the checksum or
+ * decrypted.
+ */
+ if (do_metachk) {
+ /*
+ * If we need to swap, the checksum function
+ * overwrites the original checksum with 0, so
+ * we need to save a copy of the original for
+ * swapping later.
+ */
+ if (is_hmac == 0)
+ orig_chk = *(u_int32_t *)chksum;
+ swapped = 0;
+chk_retry:
+ if ((ret = __db_check_chksum(dbenv,
+ (DB_CIPHER *)dbenv->crypto_handle, chksum, meta,
+ DBMETASIZE, is_hmac)) != 0) {
+ if (is_hmac || swapped)
+ return (ret);
+ M_32_SWAP(orig_chk);
+ swapped = 1;
+ *(u_int32_t *)chksum = orig_chk;
+ goto chk_retry;
+ }
+ }
+ } else if (dbp != NULL)
+ F_CLR(dbp, DB_AM_CHKSUM);
#ifdef HAVE_CRYPTO
ret = __crypto_decrypt_meta(dbenv, dbp, (u_int8_t *)meta, do_metachk);
@@ -544,6 +485,10 @@ swap_retry:
switch (magic) {
case DB_BTREEMAGIC:
+ if (dbp->type != DB_UNKNOWN &&
+ dbp->type != DB_RECNO && dbp->type != DB_BTREE)
+ goto bad_format;
+
flags = meta->flags;
if (F_ISSET(dbp, DB_AM_SWAP))
M_32_SWAP(flags);
@@ -556,12 +501,17 @@ swap_retry:
return (ret);
break;
case DB_HASHMAGIC:
+ if (dbp->type != DB_UNKNOWN && dbp->type != DB_HASH)
+ goto bad_format;
+
dbp->type = DB_HASH;
if ((oflags & DB_TRUNCATE) == 0 && (ret =
__ham_metachk(dbp, name, (HMETA *)meta)) != 0)
return (ret);
break;
case DB_QAMMAGIC:
+ if (dbp->type != DB_UNKNOWN && dbp->type != DB_QUEUE)
+ goto bad_format;
dbp->type = DB_QUEUE;
if ((oflags & DB_TRUNCATE) == 0 && (ret =
__qam_metachk(dbp, name, (QMETA *)meta)) != 0)
@@ -569,7 +519,13 @@ swap_retry:
break;
case DB_RENAMEMAGIC:
F_SET(dbp, DB_AM_IN_RENAME);
+
+ /* Copy the file's ID. */
+ memcpy(dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
+
break;
+ default:
+ goto bad_format;
}
return (0);
@@ -577,127 +533,3 @@ bad_format:
__db_err(dbenv, "%s: unexpected file type or format", name);
return (ret == 0 ? EINVAL : ret);
}
-
-/*
- * __db_openchk --
- * Interface error checking for open calls.
- */
-static int
-__db_openchk(dbp, txn, name, subdb, type, flags)
- DB *dbp;
- DB_TXN *txn;
- const char *name, *subdb;
- DBTYPE type;
- u_int32_t flags;
-{
- DB_ENV *dbenv;
- int ret;
- u_int32_t ok_flags;
-
- dbenv = dbp->dbenv;
-
- /* Validate arguments. */
-#define OKFLAGS \
- (DB_AUTO_COMMIT | DB_CREATE | DB_DIRTY_READ | DB_EXCL | \
- DB_FCNTL_LOCKING | DB_NOMMAP | DB_RDONLY | DB_RDWRMASTER | \
- DB_THREAD | DB_TRUNCATE | DB_WRITEOPEN)
- if ((ret = __db_fchk(dbenv, "DB->open", flags, OKFLAGS)) != 0)
- return (ret);
- if (LF_ISSET(DB_EXCL) && !LF_ISSET(DB_CREATE))
- return (__db_ferr(dbenv, "DB->open", 1));
- if (LF_ISSET(DB_RDONLY) && LF_ISSET(DB_CREATE))
- return (__db_ferr(dbenv, "DB->open", 1));
-
-#ifdef HAVE_VXWORKS
- if (LF_ISSET(DB_TRUNCATE)) {
- __db_err(dbenv, "DB_TRUNCATE unsupported in VxWorks");
- return (__db_eopnotsup(dbenv));
- }
-#endif
- switch (type) {
- case DB_UNKNOWN:
- if (LF_ISSET(DB_CREATE|DB_TRUNCATE)) {
- __db_err(dbenv,
- "%s: DB_UNKNOWN type specified with DB_CREATE or DB_TRUNCATE",
- name);
- return (EINVAL);
- }
- ok_flags = 0;
- break;
- case DB_BTREE:
- ok_flags = DB_OK_BTREE;
- break;
- case DB_HASH:
- ok_flags = DB_OK_HASH;
- break;
- case DB_QUEUE:
- ok_flags = DB_OK_QUEUE;
- break;
- case DB_RECNO:
- ok_flags = DB_OK_RECNO;
- break;
- default:
- __db_err(dbenv, "unknown type: %lu", (u_long)type);
- return (EINVAL);
- }
- if (ok_flags)
- DB_ILLEGAL_METHOD(dbp, ok_flags);
-
- /* The environment may have been created, but never opened. */
- if (!F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_OPEN_CALLED)) {
- __db_err(dbenv, "environment not yet opened");
- return (EINVAL);
- }
-
- /*
- * Historically, you could pass in an environment that didn't have a
- * mpool, and DB would create a private one behind the scenes. This
- * no longer works.
- */
- if (!F_ISSET(dbenv, DB_ENV_DBLOCAL) && !MPOOL_ON(dbenv)) {
- __db_err(dbenv, "environment did not include a memory pool");
- return (EINVAL);
- }
-
- /*
- * You can't specify threads during DB->open if subsystems in the
- * environment weren't configured with them.
- */
- if (LF_ISSET(DB_THREAD) &&
- !F_ISSET(dbenv, DB_ENV_DBLOCAL | DB_ENV_THREAD)) {
- __db_err(dbenv, "environment not created using DB_THREAD");
- return (EINVAL);
- }
-
- /* DB_TRUNCATE is not transaction recoverable. */
- if (LF_ISSET(DB_TRUNCATE) && txn != NULL) {
- __db_err(dbenv,
- "DB_TRUNCATE illegal with transaction specified");
- return (EINVAL);
- }
-
- /* Subdatabase checks. */
- if (subdb != NULL) {
- /* Subdatabases must be created in named files. */
- if (name == NULL) {
- __db_err(dbenv,
- "multiple databases cannot be created in temporary files");
- return (EINVAL);
- }
-
- /* Truncate is a physical file operation */
- if (LF_ISSET(DB_TRUNCATE)) {
- __db_err(dbenv,
- "DB_TRUNCATE illegal with multiple databases");
- return (EINVAL);
- }
-
- /* QAM can't be done as a subdatabase. */
- if (type == DB_QUEUE) {
- __db_err(dbenv, "Queue databases must be one-per-file");
- return (EINVAL);
- }
- }
-
- return (0);
-}
diff --git a/db/db/db_overflow.c b/db/db/db_overflow.c
index 54f0a03aa..c510a0c9e 100644
--- a/db/db/db_overflow.c
+++ b/db/db/db_overflow.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_overflow.c,v 11.21 2000/11/30 00:58:32 ubell Exp $";
+static const char revid[] = "$Id: db_overflow.c,v 11.51 2003/06/30 17:19:46 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,9 +53,10 @@ static const char revid[] = "$Id: db_overflow.c,v 11.21 2000/11/30 00:58:32 ubel
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "db_verify.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/mp.h"
/*
* Big key/data code.
@@ -83,6 +84,7 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
u_int32_t *bpsz;
{
DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_indx_t bytes;
u_int32_t curoff, needed, start;
@@ -90,6 +92,7 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
int ret;
dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
/*
* Check if the buffer is big enough; if it is not and we are
@@ -99,7 +102,12 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
*/
if (F_ISSET(dbt, DB_DBT_PARTIAL)) {
start = dbt->doff;
- needed = dbt->dlen;
+ if (start > tlen)
+ needed = 0;
+ else if (dbt->dlen > tlen - start)
+ needed = tlen - start;
+ else
+ needed = dbt->dlen;
} else {
start = 0;
needed = tlen;
@@ -112,15 +120,13 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
return (ENOMEM);
}
} else if (F_ISSET(dbt, DB_DBT_MALLOC)) {
- if ((ret = __os_malloc(dbenv,
- needed, dbp->db_malloc, &dbt->data)) != 0)
+ if ((ret = __os_umalloc(dbenv, needed, &dbt->data)) != 0)
return (ret);
} else if (F_ISSET(dbt, DB_DBT_REALLOC)) {
- if ((ret = __os_realloc(dbenv,
- needed, dbp->db_realloc, &dbt->data)) != 0)
+ if ((ret = __os_urealloc(dbenv, needed, &dbt->data)) != 0)
return (ret);
} else if (*bpsz == 0 || *bpsz < needed) {
- if ((ret = __os_realloc(dbenv, needed, NULL, bpp)) != 0)
+ if ((ret = __os_realloc(dbenv, needed, bpp)) != 0)
return (ret);
*bpsz = needed;
dbt->data = *bpp;
@@ -133,13 +139,12 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
*/
dbt->size = needed;
for (curoff = 0, p = dbt->data; pgno != PGNO_INVALID && needed > 0;) {
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0) {
- (void)__db_pgerr(dbp, pgno);
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
- }
+
/* Check if we need any bytes from this page. */
if (curoff + OV_LEN(h) >= start) {
- src = (u_int8_t *)h + P_OVERHEAD;
+ src = (u_int8_t *)h + P_OVERHEAD(dbp);
bytes = OV_LEN(h);
if (start > curoff) {
src += start - curoff;
@@ -153,7 +158,7 @@ __db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)
}
curoff += OV_LEN(h);
pgno = h->next_pgno;
- memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
}
return (0);
}
@@ -171,13 +176,14 @@ __db_poff(dbc, dbt, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
- PAGE *pagep, *lastp;
- DB_LSN new_lsn, null_lsn;
DBT tmp_dbt;
+ DB_LSN new_lsn, null_lsn;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep, *lastp;
db_indx_t pagespace;
u_int32_t sz;
u_int8_t *p;
- int ret;
+ int ret, t_ret;
/*
* Allocate pages and copy the key/data item into them. Calculate the
@@ -185,8 +191,10 @@ __db_poff(dbc, dbt, pgnop)
* item.
*/
dbp = dbc->dbp;
- pagespace = P_MAXSPACE(dbp->pgsize);
+ mpf = dbp->mpf;
+ pagespace = P_MAXSPACE(dbp, dbp->pgsize);
+ ret = 0;
lastp = NULL;
for (p = dbt->data,
sz = dbt->size; sz > 0; p += pagespace, sz -= pagespace) {
@@ -203,30 +211,36 @@ __db_poff(dbc, dbt, pgnop)
* have a partial record.
*/
if ((ret = __db_new(dbc, P_OVERFLOW, &pagep)) != 0)
- return (ret);
- if (DB_LOGGING(dbc)) {
+ break;
+ if (DBC_LOGGING(dbc)) {
tmp_dbt.data = p;
tmp_dbt.size = pagespace;
ZERO_LSN(null_lsn);
- if ((ret = __db_big_log(dbp->dbenv, dbc->txn,
- &new_lsn, 0, DB_ADD_BIG, dbp->log_fileid,
- PGNO(pagep), lastp ? PGNO(lastp) : PGNO_INVALID,
+ if ((ret = __db_big_log(dbp, dbc->txn,
+ &new_lsn, 0, DB_ADD_BIG, PGNO(pagep),
+ lastp ? PGNO(lastp) : PGNO_INVALID,
PGNO_INVALID, &tmp_dbt, &LSN(pagep),
lastp == NULL ? &null_lsn : &LSN(lastp),
- &null_lsn)) != 0)
- return (ret);
+ &null_lsn)) != 0) {
+ if (lastp != NULL)
+ (void)__memp_fput(mpf,
+ lastp, DB_MPOOL_DIRTY);
+ lastp = pagep;
+ break;
+ }
+ } else
+ LSN_NOT_LOGGED(new_lsn);
- /* Move lsn onto page. */
- if (lastp)
- LSN(lastp) = new_lsn;
- LSN(pagep) = new_lsn;
- }
+ /* Move LSN onto page. */
+ if (lastp != NULL)
+ LSN(lastp) = new_lsn;
+ LSN(pagep) = new_lsn;
P_INIT(pagep, dbp->pgsize,
PGNO(pagep), PGNO_INVALID, PGNO_INVALID, 0, P_OVERFLOW);
OV_LEN(pagep) = pagespace;
OV_REF(pagep) = 1;
- memcpy((u_int8_t *)pagep + P_OVERHEAD, p, pagespace);
+ memcpy((u_int8_t *)pagep + P_OVERHEAD(dbp), p, pagespace);
/*
* If this is the first entry, update the user's info.
@@ -238,12 +252,14 @@ __db_poff(dbc, dbt, pgnop)
else {
lastp->next_pgno = PGNO(pagep);
pagep->prev_pgno = PGNO(lastp);
- (void)memp_fput(dbp->mpf, lastp, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, lastp, DB_MPOOL_DIRTY);
}
lastp = pagep;
}
- (void)memp_fput(dbp->mpf, lastp, DB_MPOOL_DIRTY);
- return (0);
+ if (lastp != NULL &&
+ (t_ret = __memp_fput(mpf, lastp, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
}
/*
@@ -259,23 +275,27 @@ __db_ovref(dbc, pgno, adjust)
int32_t adjust;
{
DB *dbp;
+ DB_MPOOLFILE *mpf;
PAGE *h;
int ret;
dbp = dbc->dbp;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0) {
- (void)__db_pgerr(dbp, pgno);
- return (ret);
- }
+ mpf = dbp->mpf;
+
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ return (__db_pgerr(dbp, pgno, ret));
- if (DB_LOGGING(dbc))
- if ((ret = __db_ovref_log(dbp->dbenv, dbc->txn,
- &LSN(h), 0, dbp->log_fileid, h->pgno, adjust,
- &LSN(h))) != 0)
+ if (DBC_LOGGING(dbc)) {
+ if ((ret = __db_ovref_log(dbp,
+ dbc->txn, &LSN(h), 0, h->pgno, adjust, &LSN(h))) != 0) {
+ (void)__memp_fput(mpf, h, 0);
return (ret);
+ }
+ } else
+ LSN_NOT_LOGGED(LSN(h));
OV_REF(h) += adjust;
- (void)memp_fput(dbp->mpf, h, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, h, DB_MPOOL_DIRTY);
return (0);
}
@@ -293,15 +313,16 @@ __db_doff(dbc, pgno)
DB *dbp;
PAGE *pagep;
DB_LSN null_lsn;
+ DB_MPOOLFILE *mpf;
DBT tmp_dbt;
int ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
+
do {
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &pagep)) != 0) {
- (void)__db_pgerr(dbp, pgno);
- return (ret);
- }
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) != 0)
+ return (__db_pgerr(dbp, pgno, ret));
DB_ASSERT(TYPE(pagep) == P_OVERFLOW);
/*
@@ -309,21 +330,26 @@ __db_doff(dbc, pgno)
* decrement the reference count and return.
*/
if (OV_REF(pagep) > 1) {
- (void)memp_fput(dbp->mpf, pagep, 0);
+ (void)__memp_fput(mpf, pagep, 0);
return (__db_ovref(dbc, pgno, -1));
}
- if (DB_LOGGING(dbc)) {
- tmp_dbt.data = (u_int8_t *)pagep + P_OVERHEAD;
+ if (DBC_LOGGING(dbc)) {
+ tmp_dbt.data = (u_int8_t *)pagep + P_OVERHEAD(dbp);
tmp_dbt.size = OV_LEN(pagep);
ZERO_LSN(null_lsn);
- if ((ret = __db_big_log(dbp->dbenv, dbc->txn,
- &LSN(pagep), 0, DB_REM_BIG, dbp->log_fileid,
- PGNO(pagep), PREV_PGNO(pagep), NEXT_PGNO(pagep),
- &tmp_dbt, &LSN(pagep), &null_lsn, &null_lsn)) != 0)
+ if ((ret = __db_big_log(dbp, dbc->txn,
+ &LSN(pagep), 0, DB_REM_BIG,
+ PGNO(pagep), PREV_PGNO(pagep),
+ NEXT_PGNO(pagep), &tmp_dbt,
+ &LSN(pagep), &null_lsn, &null_lsn)) != 0) {
+ (void)__memp_fput(mpf, pagep, 0);
return (ret);
- }
+ }
+ } else
+ LSN_NOT_LOGGED(LSN(pagep));
pgno = pagep->next_pgno;
+ OV_LEN(pagep) = 0;
if ((ret = __db_free(dbc, pagep)) != 0)
return (ret);
} while (pgno != PGNO_INVALID);
@@ -352,13 +378,16 @@ __db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
u_int32_t tlen;
int (*cmpfunc) __P((DB *, const DBT *, const DBT *)), *cmpp;
{
- PAGE *pagep;
DBT local_dbt;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
void *buf;
u_int32_t bufsize, cmp_bytes, key_left;
u_int8_t *p1, *p2;
int ret;
+ mpf = dbp->mpf;
+
/*
* If there is a user-specified comparison function, build a
* contiguous copy of the key, and call it.
@@ -373,27 +402,27 @@ __db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
return (ret);
/* Pass the key as the first argument */
*cmpp = cmpfunc(dbp, dbt, &local_dbt);
- __os_free(buf, bufsize);
+ __os_free(dbp->dbenv, buf);
return (0);
}
/* While there are both keys to compare. */
for (*cmpp = 0, p1 = dbt->data,
key_left = dbt->size; key_left > 0 && pgno != PGNO_INVALID;) {
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) != 0)
return (ret);
cmp_bytes = OV_LEN(pagep) < key_left ? OV_LEN(pagep) : key_left;
tlen -= cmp_bytes;
key_left -= cmp_bytes;
- for (p2 =
- (u_int8_t *)pagep + P_OVERHEAD; cmp_bytes-- > 0; ++p1, ++p2)
+ for (p2 = (u_int8_t *)pagep + P_OVERHEAD(dbp);
+ cmp_bytes-- > 0; ++p1, ++p2)
if (*p1 != *p2) {
*cmpp = (long)*p1 - (long)*p2;
break;
}
pgno = NEXT_PGNO(pagep);
- if ((ret = memp_fput(dbp->mpf, pagep, 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
return (ret);
if (*cmpp != 0)
return (0);
@@ -407,275 +436,3 @@ __db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)
return (0);
}
-
-/*
- * __db_vrfy_overflow --
- * Verify overflow page.
- *
- * PUBLIC: int __db_vrfy_overflow __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t,
- * PUBLIC: u_int32_t));
- */
-int
-__db_vrfy_overflow(dbp, vdp, h, pgno, flags)
- DB *dbp;
- VRFY_DBINFO *vdp;
- PAGE *h;
- db_pgno_t pgno;
- u_int32_t flags;
-{
- VRFY_PAGEINFO *pip;
- int isbad, ret, t_ret;
-
- isbad = 0;
- if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
- return (ret);
-
- if ((ret = __db_vrfy_datapage(dbp, vdp, h, pgno, flags)) != 0) {
- if (ret == DB_VERIFY_BAD)
- isbad = 1;
- else
- goto err;
- }
-
- pip->refcount = OV_REF(h);
- if (pip->refcount < 1) {
- EPRINT((dbp->dbenv,
- "Overflow page %lu has zero reference count",
- (u_long)pgno));
- isbad = 1;
- }
-
- /* Just store for now. */
- pip->olen = HOFFSET(h);
-
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
- ret = t_ret;
- return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
-}
-
-/*
- * __db_vrfy_ovfl_structure --
- * Walk a list of overflow pages, avoiding cycles and marking
- * pages seen.
- *
- * PUBLIC: int __db_vrfy_ovfl_structure
- * PUBLIC: __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t, u_int32_t));
- */
-int
-__db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
- DB *dbp;
- VRFY_DBINFO *vdp;
- db_pgno_t pgno;
- u_int32_t tlen;
- u_int32_t flags;
-{
- DB *pgset;
- VRFY_PAGEINFO *pip;
- db_pgno_t next, prev;
- int isbad, p, ret, t_ret;
- u_int32_t refcount;
-
- pgset = vdp->pgset;
- DB_ASSERT(pgset != NULL);
- isbad = 0;
-
- /* This shouldn't happen, but just to be sure. */
- if (!IS_VALID_PGNO(pgno))
- return (DB_VERIFY_BAD);
-
- /*
- * Check the first prev_pgno; it ought to be PGNO_INVALID,
- * since there's no prev page.
- */
- if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
- return (ret);
-
- /* The refcount is stored on the first overflow page. */
- refcount = pip->refcount;
-
- if (pip->type != P_OVERFLOW) {
- EPRINT((dbp->dbenv,
- "Overflow page %lu of invalid type",
- (u_long)pgno, (u_long)pip->type));
- ret = DB_VERIFY_BAD;
- goto err; /* Unsafe to continue. */
- }
-
- prev = pip->prev_pgno;
- if (prev != PGNO_INVALID) {
- EPRINT((dbp->dbenv,
- "First overflow page %lu has a prev_pgno", (u_long)pgno));
- isbad = 1;
- }
-
- for (;;) {
- /*
- * This is slightly gross. Btree leaf pages reference
- * individual overflow trees multiple times if the overflow page
- * is the key to a duplicate set. The reference count does not
- * reflect this multiple referencing. Thus, if this is called
- * during the structure verification of a btree leaf page, we
- * check to see whether we've seen it from a leaf page before
- * and, if we have, adjust our count of how often we've seen it
- * accordingly.
- *
- * (This will screw up if it's actually referenced--and
- * correctly refcounted--from two different leaf pages, but
- * that's a very unlikely brokenness that we're not checking for
- * anyway.)
- */
-
- if (LF_ISSET(ST_OVFL_LEAF)) {
- if (F_ISSET(pip, VRFY_OVFL_LEAFSEEN)) {
- if ((ret =
- __db_vrfy_pgset_dec(pgset, pgno)) != 0)
- goto err;
- } else
- F_SET(pip, VRFY_OVFL_LEAFSEEN);
- }
-
- if ((ret = __db_vrfy_pgset_get(pgset, pgno, &p)) != 0)
- goto err;
-
- /*
- * We may have seen this elsewhere, if the overflow entry
- * has been promoted to an internal page.
- */
- if ((u_int32_t)p > refcount) {
- EPRINT((dbp->dbenv,
- "Page %lu encountered twice in overflow traversal",
- (u_long)pgno));
- ret = DB_VERIFY_BAD;
- goto err;
- }
- if ((ret = __db_vrfy_pgset_inc(pgset, pgno)) != 0)
- goto err;
-
- /* Keep a running tab on how much of the item we've seen. */
- tlen -= pip->olen;
-
- /* Send feedback to the application about our progress. */
- if (!LF_ISSET(DB_SALVAGE))
- __db_vrfy_struct_feedback(dbp, vdp);
-
- next = pip->next_pgno;
-
- /* Are we there yet? */
- if (next == PGNO_INVALID)
- break;
-
- /*
- * We've already checked this when we saved it, but just
- * to be sure...
- */
- if (!IS_VALID_PGNO(next)) {
- DB_ASSERT(0);
- EPRINT((dbp->dbenv,
- "Overflow page %lu has bad next_pgno",
- (u_long)pgno));
- ret = DB_VERIFY_BAD;
- goto err;
- }
-
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 ||
- (ret = __db_vrfy_getpageinfo(vdp, next, &pip)) != 0)
- return (ret);
- if (pip->prev_pgno != pgno) {
- EPRINT((dbp->dbenv,
- "Overflow page %lu has bogus prev_pgno value",
- (u_long)next));
- isbad = 1;
- /*
- * It's safe to continue because we have separate
- * cycle detection.
- */
- }
-
- pgno = next;
- }
-
- if (tlen > 0) {
- isbad = 1;
- EPRINT((dbp->dbenv,
- "Overflow item incomplete on page %lu", (u_long)pgno));
- }
-
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
- ret = t_ret;
- return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
-}
-
-/*
- * __db_safe_goff --
- * Get an overflow item, very carefully, from an untrusted database,
- * in the context of the salvager.
- *
- * PUBLIC: int __db_safe_goff __P((DB *, VRFY_DBINFO *, db_pgno_t,
- * PUBLIC: DBT *, void **, u_int32_t));
- */
-int
-__db_safe_goff(dbp, vdp, pgno, dbt, buf, flags)
- DB *dbp;
- VRFY_DBINFO *vdp;
- db_pgno_t pgno;
- DBT *dbt;
- void **buf;
- u_int32_t flags;
-{
- PAGE *h;
- int ret, err_ret;
- u_int32_t bytesgot, bytes;
- u_int8_t *src, *dest;
-
- ret = DB_VERIFY_BAD;
- err_ret = 0;
- bytesgot = bytes = 0;
-
- while ((pgno != PGNO_INVALID) && (IS_VALID_PGNO(pgno))) {
- /*
- * Mark that we're looking at this page; if we've seen it
- * already, quit.
- */
- if ((ret = __db_salvage_markdone(vdp, pgno)) != 0)
- break;
-
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
- break;
-
- /*
- * Make sure it's really an overflow page, unless we're
- * being aggressive, in which case we pretend it is.
- */
- if (!LF_ISSET(DB_AGGRESSIVE) && TYPE(h) != P_OVERFLOW) {
- ret = DB_VERIFY_BAD;
- break;
- }
-
- src = (u_int8_t *)h + P_OVERHEAD;
- bytes = OV_LEN(h);
-
- if (bytes + P_OVERHEAD > dbp->pgsize)
- bytes = dbp->pgsize - P_OVERHEAD;
-
- if ((ret = __os_realloc(dbp->dbenv,
- bytesgot + bytes, 0, buf)) != 0)
- break;
-
- dest = (u_int8_t *)*buf + bytesgot;
- bytesgot += bytes;
-
- memcpy(dest, src, bytes);
-
- pgno = NEXT_PGNO(h);
- /* Not much we can do here--we don't want to quit. */
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
- err_ret = ret;
- }
-
- if (ret == 0) {
- dbt->size = bytesgot;
- dbt->data = *buf;
- }
-
- return ((err_ret != 0 && ret == 0) ? err_ret : ret);
-}
diff --git a/db/db/db_ovfl_vrfy.c b/db/db/db_ovfl_vrfy.c
new file mode 100644
index 000000000..07c728f78
--- /dev/null
+++ b/db/db/db_ovfl_vrfy.c
@@ -0,0 +1,376 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+/*
+ * Copyright (c) 1990, 1993, 1994, 1995, 1996
+ * Keith Bostic. All rights reserved.
+ */
+/*
+ * Copyright (c) 1990, 1993, 1994, 1995
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Mike Olson.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: db_ovfl_vrfy.c,v 11.55 2003/06/30 17:19:46 bostic Exp $";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#include <string.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/db_verify.h"
+#include "dbinc/mp.h"
+
+/*
+ * __db_vrfy_overflow --
+ * Verify overflow page.
+ *
+ * PUBLIC: int __db_vrfy_overflow __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t,
+ * PUBLIC: u_int32_t));
+ */
+int
+__db_vrfy_overflow(dbp, vdp, h, pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ PAGE *h;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ VRFY_PAGEINFO *pip;
+ int isbad, ret, t_ret;
+
+ isbad = 0;
+ if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
+ return (ret);
+
+ if ((ret = __db_vrfy_datapage(dbp, vdp, h, pgno, flags)) != 0) {
+ if (ret == DB_VERIFY_BAD)
+ isbad = 1;
+ else
+ goto err;
+ }
+
+ pip->refcount = OV_REF(h);
+ if (pip->refcount < 1) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: overflow page has zero reference count",
+ (u_long)pgno));
+ isbad = 1;
+ }
+
+ /* Just store for now. */
+ pip->olen = HOFFSET(h);
+
+err: if ((t_ret = __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0)
+ ret = t_ret;
+ return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
+}
+
+/*
+ * __db_vrfy_ovfl_structure --
+ * Walk a list of overflow pages, avoiding cycles and marking
+ * pages seen.
+ *
+ * PUBLIC: int __db_vrfy_ovfl_structure
+ * PUBLIC: __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t, u_int32_t));
+ */
+int
+__db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ u_int32_t tlen;
+ u_int32_t flags;
+{
+ DB *pgset;
+ VRFY_PAGEINFO *pip;
+ db_pgno_t next, prev;
+ int isbad, ret, seen_cnt, t_ret;
+ u_int32_t refcount;
+
+ pgset = vdp->pgset;
+ DB_ASSERT(pgset != NULL);
+ isbad = 0;
+
+ /* This shouldn't happen, but just to be sure. */
+ if (!IS_VALID_PGNO(pgno))
+ return (DB_VERIFY_BAD);
+
+ /*
+ * Check the first prev_pgno; it ought to be PGNO_INVALID,
+ * since there's no prev page.
+ */
+ if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
+ return (ret);
+
+ /* The refcount is stored on the first overflow page. */
+ refcount = pip->refcount;
+
+ if (pip->type != P_OVERFLOW) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: overflow page of invalid type %lu",
+ (u_long)pgno, (u_long)pip->type));
+ ret = DB_VERIFY_BAD;
+ goto err; /* Unsafe to continue. */
+ }
+
+ prev = pip->prev_pgno;
+ if (prev != PGNO_INVALID) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: first page in overflow chain has a prev_pgno %lu",
+ (u_long)pgno, (u_long)prev));
+ isbad = 1;
+ }
+
+ for (;;) {
+ /*
+ * We may have seen this page elsewhere, if the overflow entry
+ * has been promoted to an internal page; we just want to
+ * make sure that each overflow page is seen exactly as many
+ * times as its refcount dictates.
+ *
+ * Note that this code also serves to keep us from looping
+ * infinitely if there's a cycle in an overflow chain.
+ */
+ if ((ret = __db_vrfy_pgset_get(pgset, pgno, &seen_cnt)) != 0)
+ goto err;
+ if ((u_int32_t)seen_cnt > refcount) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: encountered too many times in overflow traversal",
+ (u_long)pgno));
+ ret = DB_VERIFY_BAD;
+ goto err;
+ }
+ if ((ret = __db_vrfy_pgset_inc(pgset, pgno)) != 0)
+ goto err;
+
+ /*
+ * Each overflow page can be referenced multiple times,
+ * because it's possible for overflow Btree keys to get
+ * promoted to internal pages. We want to make sure that
+ * each page is referenced from a Btree leaf (or Hash data
+ * page, which we consider a "leaf" here) exactly once; if
+ * the parent was a leaf, set a flag to indicate that we've
+ * seen this page in a leaf context.
+ *
+ * If the parent is not a leaf--in which case it's a Btree
+ * internal page--we don't need to bother doing any further
+ * verification, as we'll do it when we hit the leaf (or
+ * complain that we never saw the leaf). Only the first
+ * page in an overflow chain should ever have a refcount
+ * greater than 1, and the combination of the LEAFSEEN check
+ * and the fact that we bail after the first page for
+ * non-leaves should ensure this.
+ *
+ * Note that each "child" of a page, such as an overflow page,
+ * is stored and verified in a structure check exactly once,
+ * so this code does not need to contend with the fact that
+ * overflow chains used as Btree duplicate keys may be
+ * referenced multiply from a single Btree leaf page.
+ */
+ if (LF_ISSET(ST_OVFL_LEAF)) {
+ if (F_ISSET(pip, VRFY_OVFL_LEAFSEEN)) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: overflow page linked twice from leaf or data page",
+ (u_long)pgno));
+ ret = DB_VERIFY_BAD;
+ goto err;
+ }
+ F_SET(pip, VRFY_OVFL_LEAFSEEN);
+ }
+
+ /*
+ * We want to verify each overflow chain only once, and
+ * although no chain should be linked more than once from a
+ * leaf page, we can't guarantee that it'll be linked that
+ * once if it's linked from an internal page and the key
+ * is gone.
+ *
+ * seen_cnt is the number of times we'd encountered this page
+ * before calling this function.
+ */
+ if (seen_cnt == 0) {
+ /*
+ * Keep a running tab on how much of the item we've
+ * seen.
+ */
+ tlen -= pip->olen;
+
+ /* Send the application feedback about our progress. */
+ if (!LF_ISSET(DB_SALVAGE))
+ __db_vrfy_struct_feedback(dbp, vdp);
+ } else
+ goto done;
+
+ next = pip->next_pgno;
+
+ /* Are we there yet? */
+ if (next == PGNO_INVALID)
+ break;
+
+ /*
+ * We've already checked this when we saved it, but just
+ * to be sure...
+ */
+ if (!IS_VALID_PGNO(next)) {
+ DB_ASSERT(0);
+ EPRINT((dbp->dbenv,
+ "Page %lu: bad next_pgno %lu on overflow page",
+ (u_long)pgno, (u_long)next));
+ ret = DB_VERIFY_BAD;
+ goto err;
+ }
+
+ if ((ret = __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0 ||
+ (ret = __db_vrfy_getpageinfo(vdp, next, &pip)) != 0)
+ return (ret);
+ if (pip->prev_pgno != pgno) {
+ EPRINT((dbp->dbenv,
+ "Page %lu: bad prev_pgno %lu on overflow page (should be %lu)",
+ (u_long)next, (u_long)pip->prev_pgno,
+ (u_long)pgno));
+ isbad = 1;
+ /*
+ * It's safe to continue because we have separate
+ * cycle detection.
+ */
+ }
+
+ pgno = next;
+ }
+
+ if (tlen > 0) {
+ isbad = 1;
+ EPRINT((dbp->dbenv,
+ "Page %lu: overflow item incomplete", (u_long)pgno));
+ }
+
+done:
+err: if ((t_ret =
+ __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0 && ret == 0)
+ ret = t_ret;
+ return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
+}
+
+/*
+ * __db_safe_goff --
+ * Get an overflow item, very carefully, from an untrusted database,
+ * in the context of the salvager.
+ *
+ * PUBLIC: int __db_safe_goff __P((DB *, VRFY_DBINFO *, db_pgno_t,
+ * PUBLIC: DBT *, void *, u_int32_t));
+ */
+int
+__db_safe_goff(dbp, vdp, pgno, dbt, buf, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ DBT *dbt;
+ void *buf;
+ u_int32_t flags;
+{
+ DB_MPOOLFILE *mpf;
+ PAGE *h;
+ int ret, t_ret;
+ u_int32_t bytesgot, bytes;
+ u_int8_t *src, *dest;
+
+ mpf = dbp->mpf;
+ h = NULL;
+ ret = t_ret = 0;
+ bytesgot = bytes = 0;
+
+ while ((pgno != PGNO_INVALID) && (IS_VALID_PGNO(pgno))) {
+ /*
+ * Mark that we're looking at this page; if we've seen it
+ * already, quit.
+ */
+ if ((ret = __db_salvage_markdone(vdp, pgno)) != 0)
+ break;
+
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
+ break;
+
+ /*
+ * Make sure it's really an overflow page, unless we're
+ * being aggressive, in which case we pretend it is.
+ */
+ if (!LF_ISSET(DB_AGGRESSIVE) && TYPE(h) != P_OVERFLOW) {
+ ret = DB_VERIFY_BAD;
+ break;
+ }
+
+ src = (u_int8_t *)h + P_OVERHEAD(dbp);
+ bytes = OV_LEN(h);
+
+ if (bytes + P_OVERHEAD(dbp) > dbp->pgsize)
+ bytes = dbp->pgsize - P_OVERHEAD(dbp);
+
+ if ((ret = __os_realloc(dbp->dbenv,
+ bytesgot + bytes, buf)) != 0)
+ break;
+
+ dest = *(u_int8_t **)buf + bytesgot;
+ bytesgot += bytes;
+
+ memcpy(dest, src, bytes);
+
+ pgno = NEXT_PGNO(h);
+
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
+ break;
+ h = NULL;
+ }
+
+ /*
+ * If we're being aggressive, salvage a partial datum if there
+ * was an error somewhere along the way.
+ */
+ if (ret == 0 || LF_ISSET(DB_AGGRESSIVE)) {
+ dbt->size = bytesgot;
+ dbt->data = *(void **)buf;
+ }
+
+ /* If we broke out on error, don't leave pages pinned. */
+ if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
diff --git a/db/db/db_pr.c b/db/db/db_pr.c
index cb977cadf..4fbe8f4fd 100644
--- a/db/db/db_pr.c
+++ b/db/db/db_pr.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_pr.c,v 11.46 2001/01/22 17:25:06 krinsky Exp $";
+static const char revid[] = "$Id: db_pr.c,v 11.94 2003/06/30 17:19:46 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,38 +17,27 @@ static const char revid[] = "$Id: db_pr.c,v 11.46 2001/01/22 17:25:06 krinsky Ex
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "db_am.h"
-#include "db_verify.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/db_verify.h"
static int __db_bmeta __P((DB *, FILE *, BTMETA *, u_int32_t));
static int __db_hmeta __P((DB *, FILE *, HMETA *, u_int32_t));
static void __db_meta __P((DB *, DBMETA *, FILE *, FN const *, u_int32_t));
-static const char *__db_dbtype_to_string __P((DB *));
-static void __db_prdb __P((DB *, FILE *, u_int32_t));
-static FILE *__db_prinit __P((FILE *));
-static void __db_proff __P((void *));
-static int __db_prtree __P((DB *, u_int32_t));
-static void __db_psize __P((DB *));
+static const char *__db_pagetype_to_string __P((u_int32_t));
+static void __db_prdb __P((DB *, FILE *));
+static void __db_proff __P((void *, FILE *));
+static int __db_prtree __P((DB *, FILE *, u_int32_t));
static int __db_qmeta __P((DB *, FILE *, QMETA *, u_int32_t));
/*
- * 64K is the maximum page size, so by default we check for offsets larger
- * than that, and, where possible, we refine the test.
- */
-#define PSIZE_BOUNDARY (64 * 1024 + 1)
-static size_t set_psize = PSIZE_BOUNDARY;
-
-static FILE *set_fp; /* Output file descriptor. */
-
-/*
* __db_loadme --
* A nice place to put a breakpoint.
*
@@ -57,7 +46,9 @@ static FILE *set_fp; /* Output file descriptor. */
void
__db_loadme()
{
- getpid();
+ u_int32_t id;
+
+ __os_id(&id);
}
/*
@@ -71,21 +62,9 @@ __db_dump(dbp, op, name)
DB *dbp;
char *op, *name;
{
- FILE *fp, *save_fp;
+ FILE *fp;
u_int32_t flags;
-
- COMPQUIET(save_fp, NULL);
-
- if (set_psize == PSIZE_BOUNDARY)
- __db_psize(dbp);
-
- if (name != NULL) {
- if ((fp = fopen(name, "w")) == NULL)
- return (__os_get_errno());
- save_fp = set_fp;
- set_fp = fp;
- } else
- fp = __db_prinit(NULL);
+ int ret;
for (flags = 0; *op != '\0'; ++op)
switch (*op) {
@@ -101,60 +80,93 @@ __db_dump(dbp, op, name)
return (EINVAL);
}
- __db_prdb(dbp, fp, flags);
+ if (name == NULL)
+ fp = stdout;
+ else {
+ if ((fp = fopen(name, "w")) == NULL)
+ return (__os_get_errno());
+ }
+
+ __db_prdb(dbp, fp);
fprintf(fp, "%s\n", DB_LINE);
- (void)__db_prtree(dbp, flags);
+ ret = __db_prtree(dbp, fp, flags);
- fflush(fp);
+ (void)fflush(fp);
+ if (name != NULL)
+ (void)fclose(fp);
- if (name != NULL) {
- fclose(fp);
- set_fp = save_fp;
- }
- return (0);
+ return (ret);
}
/*
- * __db_prdb --
- * Print out the DB structure information.
+ * __db_inmemdbflags --
+ * Call a callback for printing or other handling of strings associated
+ * with whatever in-memory DB structure flags are set.
+ *
+ * PUBLIC: void __db_inmemdbflags __P((u_int32_t, void *,
+ * PUBLIC: void (*)(u_int32_t, const FN *, void *)));
*/
-static void
-__db_prdb(dbp, fp, flags)
- DB *dbp;
- FILE *fp;
+void
+__db_inmemdbflags(flags, cookie, callback)
u_int32_t flags;
+ void *cookie;
+ void (*callback) __P((u_int32_t, const FN *, void *));
{
static const FN fn[] = {
+ { DB_AM_CHKSUM, "checksumming" },
+ { DB_AM_CL_WRITER, "client replica writer" },
+ { DB_AM_COMPENSATE, "created by compensating transaction" },
+ { DB_AM_CREATED, "database created" },
+ { DB_AM_CREATED_MSTR, "encompassing file created" },
+ { DB_AM_DBM_ERROR, "dbm/ndbm error" },
+ { DB_AM_DELIMITER, "variable length" },
+ { DB_AM_DIRTY, "dirty reads" },
{ DB_AM_DISCARD, "discard cached pages" },
{ DB_AM_DUP, "duplicates" },
+ { DB_AM_DUPSORT, "sorted duplicates" },
+ { DB_AM_ENCRYPT, "encrypted" },
+ { DB_AM_FIXEDLEN, "fixed-length records" },
{ DB_AM_INMEM, "in-memory" },
+ { DB_AM_IN_RENAME, "file is being renamed" },
+ { DB_AM_OPEN_CALLED, "DB->open called" },
+ { DB_AM_PAD, "pad value" },
{ DB_AM_PGDEF, "default page size" },
{ DB_AM_RDONLY, "read-only" },
- { DB_AM_SUBDB, "multiple-databases" },
+ { DB_AM_RECNUM, "Btree record numbers" },
+ { DB_AM_RECOVER, "opened for recovery" },
+ { DB_AM_RENUMBER, "renumber" },
+ { DB_AM_REVSPLITOFF, "no reverse splits" },
+ { DB_AM_SECONDARY, "secondary" },
+ { DB_AM_SNAPSHOT, "load on open" },
+ { DB_AM_SUBDB, "subdatabases" },
{ DB_AM_SWAP, "needswap" },
- { DB_BT_RECNUM, "btree:recnum" },
- { DB_BT_REVSPLIT, "btree:no reverse split" },
- { DB_DBM_ERROR, "dbm/ndbm error" },
- { DB_OPEN_CALLED, "DB->open called" },
- { DB_RE_DELIMITER, "recno:delimiter" },
- { DB_RE_FIXEDLEN, "recno:fixed-length" },
- { DB_RE_PAD, "recno:pad" },
- { DB_RE_RENUMBER, "recno:renumber" },
- { DB_RE_SNAPSHOT, "recno:snapshot" },
+ { DB_AM_TXN, "transactional" },
+ { DB_AM_VERIFYING, "verifier" },
{ 0, NULL }
};
+
+ callback(flags, fn, cookie);
+}
+
+/*
+ * __db_prdb --
+ * Print out the DB structure information.
+ */
+static void
+__db_prdb(dbp, fp)
+ DB *dbp;
+ FILE *fp;
+{
BTREE *bt;
HASH *h;
QUEUE *q;
- COMPQUIET(flags, 0);
-
fprintf(fp,
"In-memory DB structure:\n%s: %#lx",
- __db_dbtype_to_string(dbp), (u_long)dbp->flags);
- __db_prflags(dbp->flags, fn, fp);
+ __db_dbtype_to_string(dbp->type), (u_long)dbp->flags);
+ __db_inmemdbflags(dbp->flags, fp, __db_prflags);
fprintf(fp, "\n");
switch (dbp->type) {
@@ -166,7 +178,7 @@ __db_prdb(dbp, fp, flags)
fprintf(fp, "bt_maxkey: %lu bt_minkey: %lu\n",
(u_long)bt->bt_maxkey, (u_long)bt->bt_minkey);
fprintf(fp, "bt_compare: %#lx bt_prefix: %#lx\n",
- (u_long)bt->bt_compare, (u_long)bt->bt_prefix);
+ P_TO_ULONG(bt->bt_compare), P_TO_ULONG(bt->bt_prefix));
fprintf(fp, "bt_lpgno: %lu\n", (u_long)bt->bt_lpgno);
if (dbp->type == DB_RECNO) {
fprintf(fp,
@@ -183,7 +195,7 @@ __db_prdb(dbp, fp, flags)
fprintf(fp, "meta_pgno: %lu\n", (u_long)h->meta_pgno);
fprintf(fp, "h_ffactor: %lu\n", (u_long)h->h_ffactor);
fprintf(fp, "h_nelem: %lu\n", (u_long)h->h_nelem);
- fprintf(fp, "h_hash: %#lx\n", (u_long)h->h_hash);
+ fprintf(fp, "h_hash: %#lx\n", P_TO_ULONG(h->h_hash));
break;
case DB_QUEUE:
q = dbp->q_internal;
@@ -194,6 +206,7 @@ __db_prdb(dbp, fp, flags)
fprintf(fp, "rec_page: %lu\n", (u_long)q->rec_page);
fprintf(fp, "page_ext: %lu\n", (u_long)q->page_ext);
break;
+ case DB_UNKNOWN:
default:
break;
}
@@ -204,39 +217,34 @@ __db_prdb(dbp, fp, flags)
* Print out the entire tree.
*/
static int
-__db_prtree(dbp, flags)
+__db_prtree(dbp, fp, flags)
DB *dbp;
+ FILE *fp;
u_int32_t flags;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t i, last;
int ret;
- if (set_psize == PSIZE_BOUNDARY)
- __db_psize(dbp);
-
- if (dbp->type == DB_QUEUE) {
- ret = __db_prqueue(dbp, flags);
- goto done;
- }
+ mpf = dbp->mpf;
- /* Find out the page number of the last page in the database. */
- if ((ret = memp_fget(dbp->mpf, &last, DB_MPOOL_LAST, &h)) != 0)
- return (ret);
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
- return (ret);
+ if (dbp->type == DB_QUEUE)
+ return (__db_prqueue(dbp, fp, flags));
- /* Dump each page. */
+ /*
+ * Find out the page number of the last page in the database, then
+ * dump each page.
+ */
+ __memp_last_pgno(mpf, &last);
for (i = 0; i <= last; ++i) {
- if ((ret = memp_fget(dbp->mpf, &i, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &i, 0, &h)) != 0)
return (ret);
- (void)__db_prpage(dbp, h, flags);
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ (void)__db_prpage(dbp, h, fp, flags);
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
return (ret);
}
-done:
- (void)fflush(__db_prinit(NULL));
return (0);
}
@@ -252,13 +260,15 @@ __db_meta(dbp, dbmeta, fp, fn, flags)
FN const *fn;
u_int32_t flags;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
- int cnt;
db_pgno_t pgno;
u_int8_t *p;
- int ret;
+ int cnt, ret;
const char *sep;
+ mpf = dbp->mpf;
+
fprintf(fp, "\tmagic: %#lx\n", (u_long)dbmeta->magic);
fprintf(fp, "\tversion: %lu\n", (u_long)dbmeta->version);
fprintf(fp, "\tpagesize: %lu\n", (u_long)dbmeta->pagesize);
@@ -275,14 +285,14 @@ __db_meta(dbp, dbmeta, fp, fn, flags)
fprintf(fp, "\tfree list: %lu", (u_long)dbmeta->free);
for (pgno = dbmeta->free,
cnt = 0, sep = ", "; pgno != PGNO_INVALID;) {
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0) {
fprintf(fp,
"Unable to retrieve free-list page: %lu: %s\n",
(u_long)pgno, db_strerror(ret));
break;
}
pgno = h->next_pgno;
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
fprintf(fp, "%s%lu", sep, (u_long)pgno);
if (++cnt % 10 == 0) {
fprintf(fp, "\n");
@@ -292,6 +302,7 @@ __db_meta(dbp, dbmeta, fp, fn, flags)
sep = ", ";
}
fprintf(fp, "\n");
+ fprintf(fp, "\tlast_pgno: %lu\n", (u_long)dbmeta->last_pgno);
}
if (fn != NULL) {
@@ -404,26 +415,28 @@ __db_qmeta(dbp, fp, h, flags)
* __db_prnpage
* -- Print out a specific page.
*
- * PUBLIC: int __db_prnpage __P((DB *, db_pgno_t));
+ * PUBLIC: int __db_prnpage __P((DB *, db_pgno_t, FILE *));
*/
int
-__db_prnpage(dbp, pgno)
+__db_prnpage(dbp, pgno, fp)
DB *dbp;
db_pgno_t pgno;
+ FILE *fp;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
- int ret;
+ int ret, t_ret;
- if (set_psize == PSIZE_BOUNDARY)
- __db_psize(dbp);
+ mpf = dbp->mpf;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
- ret = __db_prpage(dbp, h, DB_PR_PAGE);
- (void)fflush(__db_prinit(NULL));
+ ret = __db_prpage(dbp, h, fp, DB_PR_PAGE);
+
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
+ ret = t_ret;
- (void)memp_fput(dbp->mpf, h, 0);
return (ret);
}
@@ -431,32 +444,29 @@ __db_prnpage(dbp, pgno)
* __db_prpage
* -- Print out a page.
*
- * PUBLIC: int __db_prpage __P((DB *, PAGE *, u_int32_t));
+ * PUBLIC: int __db_prpage __P((DB *, PAGE *, FILE *, u_int32_t));
*/
int
-__db_prpage(dbp, h, flags)
+__db_prpage(dbp, h, fp, flags)
DB *dbp;
PAGE *h;
+ FILE *fp;
u_int32_t flags;
{
BINTERNAL *bi;
BKEYDATA *bk;
- BTREE *t;
- FILE *fp;
HOFFPAGE a_hkd;
QAMDATA *qp, *qep;
RINTERNAL *ri;
- db_indx_t dlen, len, i;
+ db_indx_t dlen, len, i, *inp;
db_pgno_t pgno;
db_recno_t recno;
+ u_int32_t pagesize, qlen;
+ u_int8_t *ep, *hk, *p;
int deleted, ret;
const char *s;
- u_int32_t qlen;
- u_int8_t *ep, *hk, *p;
void *sp;
- fp = __db_prinit(NULL);
-
/*
* If we're doing recovery testing and this page is P_INVALID,
* assume it's a page that's on the free list, and don't display it.
@@ -471,6 +481,14 @@ __db_prpage(dbp, h, flags)
return (1);
}
+ /*
+ * !!!
+ * Find out the page size. We don't want to do it the "right" way,
+ * by reading the value from the meta-data page, that's going to be
+ * slow. Reach down into the mpool region.
+ */
+ pagesize = (u_int32_t)dbp->mpf->mfp->stat.st_pagesize;
+
/* Page number, page type. */
fprintf(fp, "page %lu: %s level: %lu",
(u_long)h->pgno, s, (u_long)h->level);
@@ -500,7 +518,7 @@ __db_prpage(dbp, h, flags)
qlen = ((QUEUE *)dbp->q_internal)->re_len;
recno = (h->pgno - 1) * QAM_RECNO_PER_PAGE(dbp) + 1;
i = 0;
- qep = (QAMDATA *)((u_int8_t *)h + set_psize - qlen);
+ qep = (QAMDATA *)((u_int8_t *)h + pagesize - qlen);
for (qp = QAM_GET_RECORD(dbp, h, i); qp < qep;
recno++, i++, qp = QAM_GET_RECORD(dbp, h, i)) {
if (!F_ISSET(qp, QAM_SET))
@@ -508,11 +526,13 @@ __db_prpage(dbp, h, flags)
fprintf(fp, "%s",
F_ISSET(qp, QAM_VALID) ? "\t" : " D");
- fprintf(fp, "[%03lu] %4lu ",
- (u_long)recno, (u_long)qp - (u_long)h);
- __db_pr(qp->data, qlen);
+ fprintf(fp, "[%03lu] %4lu ", (u_long)recno,
+ (u_long)((u_int8_t *)qp - (u_int8_t *)h));
+ __db_pr(qp->data, qlen, fp);
}
return (0);
+ default:
+ break;
}
/* LSN. */
@@ -520,8 +540,6 @@ __db_prpage(dbp, h, flags)
fprintf(fp, " (lsn.file: %lu lsn.offset: %lu)\n",
(u_long)LSN(h).file, (u_long)LSN(h).offset);
- t = dbp->bt_internal;
-
s = "\t";
if (TYPE(h) != P_IBTREE && TYPE(h) != P_IRECNO) {
fprintf(fp, "%sprev: %4lu next: %4lu",
@@ -530,7 +548,7 @@ __db_prpage(dbp, h, flags)
}
if (TYPE(h) == P_OVERFLOW) {
fprintf(fp, "%sref cnt: %4lu ", s, (u_long)OV_REF(h));
- __db_pr((u_int8_t *)h + P_OVERHEAD, OV_LEN(h));
+ __db_pr((u_int8_t *)h + P_OVERHEAD(dbp), OV_LEN(h), fp);
return (0);
}
fprintf(fp, "%sentries: %4lu", s, (u_long)NUM_ENT(h));
@@ -540,12 +558,14 @@ __db_prpage(dbp, h, flags)
return (0);
ret = 0;
+ inp = P_INP(dbp, h);
for (i = 0; i < NUM_ENT(h); i++) {
- if (P_ENTRY(h, i) - (u_int8_t *)h < P_OVERHEAD ||
- (size_t)(P_ENTRY(h, i) - (u_int8_t *)h) >= set_psize) {
+ if ((db_alignp_t)(P_ENTRY(dbp, h, i) - (u_int8_t *)h) <
+ (db_alignp_t)(P_OVERHEAD(dbp)) ||
+ (size_t)(P_ENTRY(dbp, h, i) - (u_int8_t *)h) >= pagesize) {
fprintf(fp,
"ILLEGAL PAGE OFFSET: indx: %lu of %lu\n",
- (u_long)i, (u_long)h->inp[i]);
+ (u_long)i, (u_long)inp[i]);
ret = EINVAL;
continue;
}
@@ -554,26 +574,23 @@ __db_prpage(dbp, h, flags)
case P_HASH:
case P_IBTREE:
case P_IRECNO:
- sp = P_ENTRY(h, i);
+ sp = P_ENTRY(dbp, h, i);
break;
case P_LBTREE:
- sp = P_ENTRY(h, i);
+ sp = P_ENTRY(dbp, h, i);
deleted = i % 2 == 0 &&
- B_DISSET(GET_BKEYDATA(h, i + O_INDX)->type);
+ B_DISSET(GET_BKEYDATA(dbp, h, i + O_INDX)->type);
break;
case P_LDUP:
case P_LRECNO:
- sp = P_ENTRY(h, i);
- deleted = B_DISSET(GET_BKEYDATA(h, i)->type);
+ sp = P_ENTRY(dbp, h, i);
+ deleted = B_DISSET(GET_BKEYDATA(dbp, h, i)->type);
break;
default:
- fprintf(fp,
- "ILLEGAL PAGE ITEM: %lu\n", (u_long)TYPE(h));
- ret = EINVAL;
- continue;
+ goto type_err;
}
fprintf(fp, "%s", deleted ? " D" : "\t");
- fprintf(fp, "[%03lu] %4lu ", (u_long)i, (u_long)h->inp[i]);
+ fprintf(fp, "[%03lu] %4lu ", (u_long)i, (u_long)inp[i]);
switch (TYPE(h)) {
case P_HASH:
hk = sp;
@@ -592,7 +609,7 @@ __db_prpage(dbp, h, flags)
* set.
*/
if (i != 0)
- len = LEN_HKEYDATA(h, 0, i);
+ len = LEN_HKEYDATA(dbp, h, 0, i);
else
len = 1;
@@ -602,13 +619,14 @@ __db_prpage(dbp, h, flags)
memcpy(&dlen, p, sizeof(db_indx_t));
p += sizeof(db_indx_t);
fprintf(fp, "\t\t");
- __db_pr(p, dlen);
+ __db_pr(p, dlen, fp);
p += sizeof(db_indx_t) + dlen;
}
break;
case H_KEYDATA:
__db_pr(HKEYDATA_DATA(hk),
- LEN_HKEYDATA(h, i == 0 ? set_psize : 0, i));
+ LEN_HKEYDATA(dbp, h, i == 0 ?
+ pagesize : 0, i), fp);
break;
case H_OFFPAGE:
memcpy(&a_hkd, hk, HOFFPAGE_SIZE);
@@ -616,6 +634,11 @@ __db_prpage(dbp, h, flags)
"overflow: total len: %4lu page: %4lu\n",
(u_long)a_hkd.tlen, (u_long)a_hkd.pgno);
break;
+ default:
+ fprintf(fp, "ILLEGAL HASH PAGE TYPE: %lu\n",
+ (u_long)HPAGE_PTYPE(hk));
+ ret = EINVAL;
+ break;
}
break;
case P_IBTREE:
@@ -625,11 +648,11 @@ __db_prpage(dbp, h, flags)
(u_long)bi->type);
switch (B_TYPE(bi->type)) {
case B_KEYDATA:
- __db_pr(bi->data, bi->len);
+ __db_pr(bi->data, bi->len, fp);
break;
case B_DUPLICATE:
case B_OVERFLOW:
- __db_proff(bi->data);
+ __db_proff(bi->data, fp);
break;
default:
fprintf(fp, "ILLEGAL BINTERNAL TYPE: %lu\n",
@@ -649,11 +672,11 @@ __db_prpage(dbp, h, flags)
bk = sp;
switch (B_TYPE(bk->type)) {
case B_KEYDATA:
- __db_pr(bk->data, bk->len);
+ __db_pr(bk->data, bk->len, fp);
break;
case B_DUPLICATE:
case B_OVERFLOW:
- __db_proff(bk);
+ __db_proff(bk, fp);
break;
default:
fprintf(fp,
@@ -663,6 +686,11 @@ __db_prpage(dbp, h, flags)
break;
}
break;
+ default:
+type_err: fprintf(fp,
+ "ILLEGAL PAGE TYPE: %lu\n", (u_long)TYPE(h));
+ ret = EINVAL;
+ continue;
}
}
(void)fflush(fp);
@@ -673,18 +701,16 @@ __db_prpage(dbp, h, flags)
* __db_pr --
* Print out a data element.
*
- * PUBLIC: void __db_pr __P((u_int8_t *, u_int32_t));
+ * PUBLIC: void __db_pr __P((u_int8_t *, u_int32_t, FILE *));
*/
void
-__db_pr(p, len)
+__db_pr(p, len, fp)
u_int8_t *p;
u_int32_t len;
-{
FILE *fp;
- u_int lastch;
- int i;
-
- fp = __db_prinit(NULL);
+{
+ u_int32_t i;
+ int lastch;
fprintf(fp, "len: %3lu", (u_long)len);
lastch = '.';
@@ -723,12 +749,13 @@ __db_prdbt(dbtp, checkprint, prefix, handle, callback, is_recno, vdp)
int is_recno;
VRFY_DBINFO *vdp;
{
- static const char hex[] = "0123456789abcdef";
+ static const u_char hex[] = "0123456789abcdef";
db_recno_t recno;
- u_int32_t len;
+ size_t len;
int ret;
#define DBTBUFLEN 100
- char *p, *hp, buf[DBTBUFLEN], hbuf[DBTBUFLEN];
+ u_int8_t *p, *hp;
+ char buf[DBTBUFLEN], hbuf[DBTBUFLEN];
if (vdp != NULL) {
/*
@@ -744,6 +771,13 @@ __db_prdbt(dbtp, checkprint, prefix, handle, callback, is_recno, vdp)
handle, callback, vdp, 0);
F_CLR(vdp, SALVAGE_PRINTHEADER);
F_SET(vdp, SALVAGE_PRINTFOOTER);
+
+ /*
+ * Even if the printable flag wasn't set by our immediate
+ * caller, it may be set on a salvage-wide basis.
+ */
+ if (F_ISSET(vdp, SALVAGE_PRINTABLE))
+ checkprint = 1;
}
/*
@@ -760,13 +794,13 @@ __db_prdbt(dbtp, checkprint, prefix, handle, callback, is_recno, vdp)
* in a platform-independent way. So we use the numeral in
* straight ASCII.
*/
- __ua_memcpy(&recno, dbtp->data, sizeof(recno));
+ (void)__ua_memcpy(&recno, dbtp->data, sizeof(recno));
snprintf(buf, DBTBUFLEN, "%lu", (u_long)recno);
/* If we're printing data as hex, print keys as hex too. */
if (!checkprint) {
- for (len = strlen(buf), p = buf, hp = hbuf;
- len-- > 0; ++p) {
+ for (len = strlen(buf), p = (u_int8_t *)buf,
+ hp = (u_int8_t *)hbuf; len-- > 0; ++p) {
*hp++ = hex[(u_int8_t)(*p & 0xf0) >> 4];
*hp++ = hex[*p & 0x0f];
}
@@ -810,14 +844,12 @@ __db_prdbt(dbtp, checkprint, prefix, handle, callback, is_recno, vdp)
* Print out an off-page element.
*/
static void
-__db_proff(vp)
+__db_proff(vp, fp)
void *vp;
-{
FILE *fp;
+{
BOVERFLOW *bo;
- fp = __db_prinit(NULL);
-
bo = vp;
switch (B_TYPE(bo->type)) {
case B_OVERFLOW:
@@ -827,6 +859,9 @@ __db_proff(vp)
case B_DUPLICATE:
fprintf(fp, "duplicate: page: %4lu\n", (u_long)bo->pgno);
break;
+ default:
+ /* NOTREACHED */
+ break;
}
}
@@ -834,18 +869,25 @@ __db_proff(vp)
* __db_prflags --
* Print out flags values.
*
- * PUBLIC: void __db_prflags __P((u_int32_t, const FN *, FILE *));
+ * PUBLIC: void __db_prflags __P((u_int32_t, const FN *, void *));
*/
void
-__db_prflags(flags, fn, fp)
+__db_prflags(flags, fn, vfp)
u_int32_t flags;
FN const *fn;
- FILE *fp;
+ void *vfp;
{
+ FILE *fp;
const FN *fnp;
int found;
const char *sep;
+ /*
+ * We pass the FILE * through a void * so that we can use
+ * this function as as a callback.
+ */
+ fp = (FILE *)vfp;
+
sep = " (";
for (found = 0, fnp = fn; fnp->mask != 0; ++fnp)
if (LF_ISSET(fnp->mask)) {
@@ -858,64 +900,24 @@ __db_prflags(flags, fn, fp)
}
/*
- * __db_prinit --
- * Initialize tree printing routines.
- */
-static FILE *
-__db_prinit(fp)
- FILE *fp;
-{
- if (set_fp == NULL)
- set_fp = fp == NULL ? stdout : fp;
- return (set_fp);
-}
-
-/*
- * __db_psize --
- * Get the page size.
- */
-static void
-__db_psize(dbp)
- DB *dbp;
-{
- DBMETA *mp;
- db_pgno_t pgno;
-
- set_psize = PSIZE_BOUNDARY - 1;
-
- pgno = PGNO_BASE_MD;
- if (memp_fget(dbp->mpf, &pgno, 0, &mp) != 0)
- return;
-
- switch (mp->magic) {
- case DB_BTREEMAGIC:
- case DB_HASHMAGIC:
- case DB_QAMMAGIC:
- set_psize = mp->pagesize;
- break;
- }
- (void)memp_fput(dbp->mpf, mp, 0);
-}
-
-/*
* __db_dbtype_to_string --
* Return the name of the database type.
+ * PUBLIC: const char * __db_dbtype_to_string __P((DBTYPE));
*/
-static const char *
-__db_dbtype_to_string(dbp)
- DB *dbp;
+const char *
+__db_dbtype_to_string(type)
+ DBTYPE type;
{
- switch (dbp->type) {
+ switch (type) {
case DB_BTREE:
return ("btree");
case DB_HASH:
return ("hash");
- break;
case DB_RECNO:
return ("recno");
- break;
case DB_QUEUE:
return ("queue");
+ case DB_UNKNOWN:
default:
return ("UNKNOWN TYPE");
}
@@ -925,10 +927,8 @@ __db_dbtype_to_string(dbp)
/*
* __db_pagetype_to_string --
* Return the name of the specified page type.
- *
- * PUBLIC: const char *__db_pagetype_to_string __P((u_int32_t));
*/
-const char *
+static const char *
__db_pagetype_to_string(type)
u_int32_t type;
{
@@ -996,14 +996,16 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
VRFY_DBINFO *vdp;
db_pgno_t meta_pgno;
{
+ DBT dbt;
DB_BTREE_STAT *btsp;
DB_ENV *dbenv;
DB_HASH_STAT *hsp;
DB_QUEUE_STAT *qsp;
+ DBTYPE dbtype;
VRFY_PAGEINFO *pip;
+ size_t buflen;
char *buf;
- int buflen, ret, t_ret;
- u_int32_t dbtype;
+ int using_vdp, ret, t_ret;
btsp = NULL;
hsp = NULL;
@@ -1012,31 +1014,47 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
buf = NULL;
COMPQUIET(buflen, 0);
+ /*
+ * If dbp is NULL, then pip is guaranteed to be non-NULL; we only ever
+ * call __db_prheader with a NULL dbp from one case inside __db_prdbt,
+ * and this is a special subdatabase for "lost" items. In this case
+ * we have a vdp (from which we'll get a pip). In all other cases, we
+ * will have a non-NULL dbp (and vdp may or may not be NULL depending
+ * on whether we're salvaging).
+ */
+ DB_ASSERT(dbp != NULL || vdp != NULL);
+
if (dbp == NULL)
dbenv = NULL;
else
dbenv = dbp->dbenv;
/*
- * If we've been passed a verifier statistics object, use
- * that; we're being called in a context where dbp->stat
- * is unsafe.
+ * If we've been passed a verifier statistics object, use that; we're
+ * being called in a context where dbp->stat is unsafe.
+ *
+ * Also, the verifier may set the pflag on a per-salvage basis. If so,
+ * respect that.
*/
if (vdp != NULL) {
if ((ret = __db_vrfy_getpageinfo(vdp, meta_pgno, &pip)) != 0)
return (ret);
- } else
+
+ if (F_ISSET(vdp, SALVAGE_PRINTABLE))
+ pflag = 1;
+ using_vdp = 1;
+ } else {
pip = NULL;
+ using_vdp = 0;
+ }
/*
- * If dbp is NULL, we're being called from inside __db_prdbt,
- * and this is a special subdatabase for "lost" items. Make it a btree.
- * Otherwise, set dbtype to the appropriate type for the specified
- * meta page, or the type of the dbp.
+ * If dbp is NULL, make it a btree. Otherwise, set dbtype to whatever
+ * appropriate type for the specified meta page, or the type of the dbp.
*/
if (dbp == NULL)
dbtype = DB_BTREE;
- else if (pip != NULL)
+ else if (using_vdp)
switch (pip->type) {
case P_BTREEMETA:
if (F_ISSET(pip, VRFY_IS_RECNO))
@@ -1047,12 +1065,15 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
case P_HASHMETA:
dbtype = DB_HASH;
break;
+ case P_QAMMETA:
+ dbtype = DB_QUEUE;
+ break;
default:
/*
- * If the meta page is of a bogus type, it's
- * because we have a badly corrupt database.
- * (We must be in the verifier for pip to be non-NULL.)
- * Pretend we're a Btree and salvage what we can.
+ * If the meta page is of a bogus type, it's because
+ * we have a badly corrupt database. (We must be in
+ * the verifier for pip to be non-NULL.) Pretend we're
+ * a Btree and salvage what we can.
*/
DB_ASSERT(F_ISSET(dbp, DB_AM_VERIFYING));
dbtype = DB_BTREE;
@@ -1071,22 +1092,28 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
/*
* 64 bytes is long enough, as a minimum bound, for any of the
- * fields besides subname. Subname can be anything, and so
- * 64 + subname is big enough for all the things we need to print here.
+ * fields besides subname. Subname uses __db_prdbt and therefore
+ * does not need buffer space here.
*/
- buflen = 64 + ((subname != NULL) ? strlen(subname) : 0);
- if ((ret = __os_malloc(dbenv, buflen, NULL, &buf)) != 0)
+ buflen = 64;
+ if ((ret = __os_malloc(dbenv, buflen, &buf)) != 0)
goto err;
if (subname != NULL) {
- snprintf(buf, buflen, "database=%s\n", subname);
+ snprintf(buf, buflen, "database=");
if ((ret = callback(handle, buf)) != 0)
goto err;
+ memset(&dbt, 0, sizeof(dbt));
+ dbt.data = subname;
+ dbt.size = (u_int32_t)strlen(subname);
+ if ((ret = __db_prdbt(&dbt,
+ 1, NULL, handle, callback, 0, NULL)) != 0)
+ goto err;
}
switch (dbtype) {
case DB_BTREE:
if ((ret = callback(handle, "type=btree\n")) != 0)
goto err;
- if (pip != NULL) {
+ if (using_vdp) {
if (F_ISSET(pip, VRFY_HAS_RECNUMS))
if ((ret =
callback(handle, "recnum=1\n")) != 0)
@@ -1106,11 +1133,11 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
}
break;
}
- if ((ret = dbp->stat(dbp, &btsp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "DB->stat");
+ if ((ret = __db_stat(dbp, &btsp, 0)) != 0) {
+ __db_err(dbp->dbenv, "DB->stat: %s", db_strerror(ret));
goto err;
}
- if (F_ISSET(dbp, DB_BT_RECNUM))
+ if (F_ISSET(dbp, DB_AM_RECNUM))
if ((ret = callback(handle, "recnum=1\n")) != 0)
goto err;
if (btsp->bt_maxkey != 0) {
@@ -1129,7 +1156,7 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
case DB_HASH:
if ((ret = callback(handle, "type=hash\n")) != 0)
goto err;
- if (pip != NULL) {
+ if (using_vdp) {
if (pip->h_ffactor != 0) {
snprintf(buf, buflen,
"h_ffactor=%lu\n", (u_long)pip->h_ffactor);
@@ -1144,8 +1171,8 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
}
break;
}
- if ((ret = dbp->stat(dbp, &hsp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "DB->stat");
+ if ((ret = __db_stat(dbp, &hsp, 0)) != 0) {
+ __db_err(dbp->dbenv, "DB->stat: %s", db_strerror(ret));
goto err;
}
if (hsp->hash_ffactor != 0) {
@@ -1154,10 +1181,9 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
if ((ret = callback(handle, buf)) != 0)
goto err;
}
- if (hsp->hash_nelem != 0 || hsp->hash_nkeys != 0) {
- snprintf(buf, buflen, "h_nelem=%lu\n",
- hsp->hash_nelem > hsp->hash_nkeys ?
- (u_long)hsp->hash_nelem : (u_long)hsp->hash_nkeys);
+ if (hsp->hash_nkeys != 0) {
+ snprintf(buf, buflen,
+ "h_nelem=%lu\n", (u_long)hsp->hash_nkeys);
if ((ret = callback(handle, buf)) != 0)
goto err;
}
@@ -1172,20 +1198,29 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
goto err;
break;
}
- if ((ret = dbp->stat(dbp, &qsp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "DB->stat");
+ if ((ret = __db_stat(dbp, &qsp, 0)) != 0) {
+ __db_err(dbp->dbenv, "DB->stat: %s", db_strerror(ret));
goto err;
}
snprintf(buf, buflen, "re_len=%lu\n", (u_long)qsp->qs_re_len);
- if (qsp->qs_re_pad != 0 && qsp->qs_re_pad != ' ')
- snprintf(buf, buflen, "re_pad=%#x\n", qsp->qs_re_pad);
if ((ret = callback(handle, buf)) != 0)
goto err;
+ if (qsp->qs_re_pad != 0 && qsp->qs_re_pad != ' ') {
+ snprintf(buf, buflen, "re_pad=%#x\n", qsp->qs_re_pad);
+ if ((ret = callback(handle, buf)) != 0)
+ goto err;
+ }
+ if (qsp->qs_extentsize != 0) {
+ snprintf(buf, buflen,
+ "extentsize=%lu\n", (u_long)qsp->qs_extentsize);
+ if ((ret = callback(handle, buf)) != 0)
+ goto err;
+ }
break;
case DB_RECNO:
if ((ret = callback(handle, "type=recno\n")) != 0)
goto err;
- if (pip != NULL) {
+ if (using_vdp) {
if (F_ISSET(pip, VRFY_IS_RRECNO))
if ((ret =
callback(handle, "renumber=1\n")) != 0)
@@ -1198,14 +1233,14 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
}
break;
}
- if ((ret = dbp->stat(dbp, &btsp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "DB->stat");
+ if ((ret = __db_stat(dbp, &btsp, 0)) != 0) {
+ __db_err(dbp->dbenv, "DB->stat: %s", db_strerror(ret));
goto err;
}
- if (F_ISSET(dbp, DB_RE_RENUMBER))
+ if (F_ISSET(dbp, DB_AM_RENUMBER))
if ((ret = callback(handle, "renumber=1\n")) != 0)
goto err;
- if (F_ISSET(dbp, DB_RE_FIXEDLEN)) {
+ if (F_ISSET(dbp, DB_AM_FIXEDLEN)) {
snprintf(buf, buflen,
"re_len=%lu\n", (u_long)btsp->bt_re_len);
if ((ret = callback(handle, buf)) != 0)
@@ -1219,12 +1254,12 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
break;
case DB_UNKNOWN:
DB_ASSERT(0); /* Impossible. */
- __db_err(dbp->dbenv, "Impossible DB type in __db_prheader");
+ __db_err(dbenv, "Impossible DB type in __db_prheader");
ret = EINVAL;
goto err;
}
- if (pip != NULL) {
+ if (using_vdp) {
if (F_ISSET(pip, VRFY_HAS_DUPS))
if ((ret = callback(handle, "duplicates=1\n")) != 0)
goto err;
@@ -1233,6 +1268,9 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
goto err;
/* We should handle page size. XXX */
} else {
+ if (F_ISSET(dbp, DB_AM_CHKSUM))
+ if ((ret = callback(handle, "chksum=1\n")) != 0)
+ goto err;
if (F_ISSET(dbp, DB_AM_DUP))
if ((ret = callback(handle, "duplicates=1\n")) != 0)
goto err;
@@ -1252,17 +1290,17 @@ __db_prheader(dbp, subname, pflag, keyflag, handle, callback, vdp, meta_pgno)
ret = callback(handle, "HEADER=END\n");
-err: if (pip != NULL &&
- (t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if (using_vdp &&
+ (t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
if (btsp != NULL)
- __os_free(btsp, 0);
+ __os_ufree(dbenv, btsp);
if (hsp != NULL)
- __os_free(hsp, 0);
+ __os_ufree(dbenv, hsp);
if (qsp != NULL)
- __os_free(qsp, 0);
+ __os_ufree(dbenv, qsp);
if (buf != NULL)
- __os_free(buf, buflen);
+ __os_free(dbenv, buf);
return (ret);
}
@@ -1282,3 +1320,26 @@ __db_prfooter(handle, callback)
{
return (callback(handle, "DATA=END\n"));
}
+
+/*
+ * __db_pr_callback --
+ * Callback function for using pr_* functions from C.
+ *
+ * PUBLIC: int __db_pr_callback __P((void *, const void *));
+ */
+int
+__db_pr_callback(handle, str_arg)
+ void *handle;
+ const void *str_arg;
+{
+ char *str;
+ FILE *f;
+
+ str = (char *)str_arg;
+ f = (FILE *)handle;
+
+ if (fprintf(f, "%s", str) != (int)strlen(str))
+ return (EIO);
+
+ return (0);
+}
diff --git a/db/db/db_rec.c b/db/db/db_rec.c
index 998d07429..a692d9749 100644
--- a/db/db/db_rec.c
+++ b/db/db/db_rec.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_rec.c,v 11.10 2000/08/03 15:32:19 ubell Exp $";
+static const char revid[] = "$Id: db_rec.c,v 11.48 2003/08/27 03:54:18 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,9 +18,14 @@ static const char revid[] = "$Id: db_rec.c,v 11.10 2000/08/03 15:32:19 ubell Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "log.h"
-#include "hash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/hash.h"
+
+static int __db_pg_free_recover_int __P((DB_ENV *,
+ __db_pg_freedata_args *, DB *, DB_LSN *, DB_MPOOLFILE *, db_recops, int));
/*
* PUBLIC: int __db_addrem_recover
@@ -45,11 +50,12 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
u_int32_t change;
int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_addrem_print);
REC_INTRO(__db_addrem_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -59,7 +65,7 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
*/
goto done;
} else
- if ((ret = memp_fget(mpf,
+ if ((ret = __memp_fget(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -95,13 +101,16 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
LSN(pagep) = argp->pagelsn;
}
- if ((ret = memp_fput(mpf, pagep, change)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, change)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -124,11 +133,12 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
u_int32_t change;
int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_big_print);
REC_INTRO(__db_big_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -139,7 +149,7 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
ret = 0;
goto ppage;
} else
- if ((ret = memp_fget(mpf,
+ if ((ret = __memp_fget(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -161,7 +171,7 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
argp->next_pgno, 0, P_OVERFLOW);
OV_LEN(pagep) = argp->dbt.size;
OV_REF(pagep) = 1;
- memcpy((u_int8_t *)pagep + P_OVERHEAD, argp->dbt.data,
+ memcpy((u_int8_t *)pagep + P_OVERHEAD(file_dbp), argp->dbt.data,
argp->dbt.size);
PREV_PGNO(pagep) = argp->prev_pgno;
change = DB_MPOOL_DIRTY;
@@ -177,13 +187,22 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
- if ((ret = memp_fput(mpf, pagep, change)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, change)) != 0)
goto out;
+ pagep = NULL;
+
+ /*
+ * We only delete a whole chain of overflow.
+ * Each page is handled individually
+ */
+ if (argp->opcode == DB_REM_BIG)
+ goto done;
/* Now check the previous page. */
ppage: if (argp->prev_pgno != PGNO_INVALID) {
change = 0;
- if ((ret = memp_fget(mpf, &argp->prev_pgno, 0, &pagep)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &argp->prev_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist.
@@ -195,7 +214,7 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
ret = 0;
goto npage;
} else
- if ((ret = memp_fget(mpf, &argp->prev_pgno,
+ if ((ret = __memp_fget(mpf, &argp->prev_pgno,
DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -204,28 +223,28 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
cmp_p = log_compare(&LSN(pagep), &argp->prevlsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->prevlsn);
- if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_ADD_BIG) ||
- (cmp_n == 0 && DB_UNDO(op) && argp->opcode == DB_REM_BIG)) {
+ if (cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_ADD_BIG) {
/* Redo add, undo delete. */
NEXT_PGNO(pagep) = argp->pgno;
change = DB_MPOOL_DIRTY;
- } else if ((cmp_n == 0 &&
- DB_UNDO(op) && argp->opcode == DB_ADD_BIG) ||
- (cmp_p == 0 && DB_REDO(op) && argp->opcode == DB_REM_BIG)) {
+ } else if (cmp_n == 0 &&
+ DB_UNDO(op) && argp->opcode == DB_ADD_BIG) {
/* Redo delete, undo add. */
NEXT_PGNO(pagep) = argp->next_pgno;
change = DB_MPOOL_DIRTY;
}
if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->prevlsn;
- if ((ret = memp_fput(mpf, pagep, change)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, change)) != 0)
goto out;
}
+ pagep = NULL;
/* Now check the next page. Can only be set on a delete. */
npage: if (argp->next_pgno != PGNO_INVALID) {
change = 0;
- if ((ret = memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist.
@@ -235,7 +254,7 @@ npage: if (argp->next_pgno != PGNO_INVALID) {
*/
goto done;
} else
- if ((ret = memp_fget(mpf, &argp->next_pgno,
+ if ((ret = __memp_fget(mpf, &argp->next_pgno,
DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -252,21 +271,25 @@ npage: if (argp->next_pgno != PGNO_INVALID) {
}
if (change)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->nextlsn;
- if ((ret = memp_fput(mpf, pagep, change)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, change)) != 0)
goto out;
}
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
* __db_ovref_recover --
* Recovery function for __db_ovref().
*
- * PUBLIC: int __db_ovref_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ * PUBLIC: int __db_ovref_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
__db_ovref_recover(dbenv, dbtp, lsnp, op, info)
@@ -283,14 +306,15 @@ __db_ovref_recover(dbenv, dbtp, lsnp, op, info)
PAGE *pagep;
int cmp, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_ovref_print);
REC_INTRO(__db_ovref_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op))
goto done;
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
@@ -310,13 +334,16 @@ __db_ovref_recover(dbenv, dbtp, lsnp, op, info)
pagep->lsn = argp->lsn;
modified = 1;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -341,6 +368,7 @@ __db_relink_recover(dbenv, dbtp, lsnp, op, info)
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_relink_print);
REC_INTRO(__db_relink_read, 1);
@@ -351,9 +379,9 @@ __db_relink_recover(dbenv, dbtp, lsnp, op, info)
* the current page is the result of a split and is being recovered
* elsewhere, so all we need do is recover the next page.
*/
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_REDO(op)) {
- (void)__db_pgerr(file_dbp, argp->pgno);
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
goto out;
}
goto next2;
@@ -376,12 +404,13 @@ __db_relink_recover(dbenv, dbtp, lsnp, op, info)
pagep->lsn = argp->lsn;
modified = 1;
}
-next1: if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+next1: if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
-next2: if ((ret = memp_fget(mpf, &argp->next, 0, &pagep)) != 0) {
+next2: if ((ret = __memp_fget(mpf, &argp->next, 0, &pagep)) != 0) {
if (DB_REDO(op)) {
- (void)__db_pgerr(file_dbp, argp->next);
+ ret = __db_pgerr(file_dbp, argp->next, ret);
goto out;
}
goto prev;
@@ -409,14 +438,15 @@ next2: if ((ret = memp_fget(mpf, &argp->next, 0, &pagep)) != 0) {
else
pagep->lsn = *lsnp;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
if (argp->opcode == DB_ADD_PAGE)
goto done;
-prev: if ((ret = memp_fget(mpf, &argp->prev, 0, &pagep)) != 0) {
+prev: if ((ret = __memp_fget(mpf, &argp->prev, 0, &pagep)) != 0) {
if (DB_REDO(op)) {
- (void)__db_pgerr(file_dbp, argp->prev);
+ ret = __db_pgerr(file_dbp, argp->prev, ret);
goto out;
}
goto done;
@@ -441,13 +471,16 @@ prev: if ((ret = memp_fget(mpf, &argp->prev, 0, &pagep)) != 0) {
else
pagep->lsn = *lsnp;
}
- if ((ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
}
/*
@@ -468,8 +501,8 @@ __db_debug_recover(dbenv, dbtp, lsnp, op, info)
__db_debug_args *argp;
int ret;
- COMPQUIET(op, 0);
COMPQUIET(dbenv, NULL);
+ COMPQUIET(op, DB_TXN_ABORT);
COMPQUIET(info, NULL);
REC_PRINT(__db_debug_print);
@@ -504,11 +537,12 @@ __db_noop_recover(dbenv, dbtp, lsnp, op, info)
u_int32_t change;
int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
REC_PRINT(__db_noop_print);
REC_INTRO(__db_noop_read, 0);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
goto out;
cmp_n = log_compare(lsnp, &LSN(pagep));
@@ -522,8 +556,511 @@ __db_noop_recover(dbenv, dbtp, lsnp, op, info)
LSN(pagep) = argp->prevlsn;
change = DB_MPOOL_DIRTY;
}
- ret = memp_fput(mpf, pagep, change);
+ ret = __memp_fput(mpf, pagep, change);
+ pagep = NULL;
+
+done: *lsnp = argp->prev_lsn;
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ REC_CLOSE;
+}
+
+/*
+ * __db_pg_alloc_recover --
+ * Recovery function for pg_alloc.
+ *
+ * PUBLIC: int __db_pg_alloc_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_alloc_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DBMETA *meta;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ int cmp_n, cmp_p, created, level, modified, ret;
+
+ meta = NULL;
+ pagep = NULL;
+ REC_PRINT(__db_pg_alloc_print);
+ REC_INTRO(__db_pg_alloc_read, 0);
+
+ /*
+ * Fix up the allocated page. If we're redoing the operation, we have
+ * to get the page (creating it if it doesn't exist), and update its
+ * LSN. If we're undoing the operation, we have to reset the page's
+ * LSN and put it on the free list.
+ *
+ * Fix up the metadata page. If we're redoing the operation, we have
+ * to get the metadata page and update its LSN and its free pointer.
+ * If we're undoing the operation and the page was ever created, we put
+ * it on the freelist.
+ */
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0) {
+ /* The metadata page must always exist on redo. */
+ if (DB_REDO(op)) {
+ ret = __db_pgerr(file_dbp, pgno, ret);
+ goto out;
+ } else
+ goto done;
+ }
+ created = modified = 0;
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ /*
+ * We have to be able to identify if a page was newly
+ * created so we can recover it properly. We cannot simply
+ * look for an empty header, because hash uses a pgin
+ * function that will set the header. Instead, we explicitly
+ * try for the page without CREATE and if that fails, then
+ * create it.
+ */
+ if ((ret = __memp_fget(
+ mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if (ret == ENOSPC)
+ goto do_meta;
+ ret = __db_pgerr(file_dbp, argp->pgno, ret);
+ goto out;
+ }
+ created = modified = 1;
+ }
+
+ /* Fix up the allocated page. */
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_p = log_compare(&LSN(pagep), &argp->page_lsn);
+
+ /*
+ * If an inital allocation is aborted and then reallocated
+ * during an archival restore the log record will have
+ * an LSN for the page but the page will be empty.
+ */
+ if (IS_ZERO_LSN(LSN(pagep)))
+ cmp_p = 0;
+ CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->page_lsn);
+ /*
+ * If we we rolled back this allocation previously during an
+ * archive restore, the page may have INIT_LSN from the limbo list.
+ * Another special case we have to handle is if we ended up with a
+ * page of all 0's which can happen if we abort between allocating a
+ * page in mpool and initializing it. In that case, even if we're
+ * undoing, we need to re-initialize the page.
+ */
+ if (DB_REDO(op) &&
+ (cmp_p == 0 ||
+ (IS_ZERO_LSN(argp->page_lsn) && IS_INIT_LSN(LSN(pagep))))) {
+ /* Need to redo update described. */
+ switch (argp->ptype) {
+ case P_LBTREE:
+ case P_LRECNO:
+ case P_LDUP:
+ level = LEAFLEVEL;
+ break;
+ default:
+ level = 0;
+ break;
+ }
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, PGNO_INVALID, level, argp->ptype);
+
+ pagep->lsn = *lsnp;
+ modified = 1;
+ } else if (DB_UNDO(op) && (cmp_n == 0 || created)) {
+ /*
+ * This is where we handle the case of a 0'd page (pagep->pgno
+ * is equal to PGNO_INVALID).
+ * Undo the allocation, reinitialize the page and
+ * link its next pointer to the free list.
+ */
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
+
+ pagep->lsn = argp->page_lsn;
+ modified = 1;
+ }
+
+ /*
+ * If the page was newly created, put it on the limbo list.
+ */
+ if (IS_ZERO_LSN(LSN(pagep)) &&
+ IS_ZERO_LSN(argp->page_lsn) && DB_UNDO(op)) {
+ /* Put the page in limbo.*/
+ if ((ret = __db_add_limbo(dbenv,
+ info, argp->fileid, argp->pgno, 1)) != 0)
+ goto out;
+ }
+
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+do_meta:
+ /* Fix up the metadata page. */
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(meta));
+ cmp_p = log_compare(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(op, cmp_p, &LSN(meta), &argp->meta_lsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ LSN(meta) = *lsnp;
+ meta->free = argp->next;
+ modified = 1;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to undo update described. */
+ LSN(meta) = argp->meta_lsn;
+
+ /*
+ * If the page has a zero LSN then its newly created
+ * and will go into limbo rather than directly on the
+ * free list.
+ */
+ if (!IS_ZERO_LSN(argp->page_lsn))
+ meta->free = argp->pgno;
+ modified = 1;
+ }
+
+ /*
+ * Make sure that meta->last_pgno always reflects the largest page
+ * that we've ever allocated.
+ */
+ if (argp->pgno > meta->last_pgno) {
+ meta->last_pgno = argp->pgno;
+ modified = 1;
+ }
+
+ if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ goto out;
+ meta = NULL;
done: *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+ if (ret == ENOENT && op == DB_TXN_BACKWARD_ALLOC)
+ ret = 0;
+ REC_CLOSE;
+}
+
+/*
+ * __db_pg_free_recover_int --
+ */
+static int
+__db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, data)
+ DB_ENV *dbenv;
+ __db_pg_freedata_args *argp;
+ DB *file_dbp;
+ DB_LSN *lsnp;
+ DB_MPOOLFILE *mpf;
+ db_recops op;
+ int data;
+{
+ DBMETA *meta;
+ DB_LSN copy_lsn;
+ PAGE *pagep;
+ db_pgno_t pgno;
+ int cmp_n, cmp_p, modified, ret;
+
+ meta = NULL;
+ pagep = NULL;
+ /*
+ * Fix up the freed page. If we're redoing the operation we get the
+ * page and explicitly discard its contents, then update its LSN. If
+ * we're undoing the operation, we get the page and restore its header.
+ * Create the page if necessary, we may be freeing an aborted
+ * create.
+ */
+ if ((ret = __memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ modified = 0;
+ (void)__ua_memcpy(&copy_lsn, &LSN(argp->header.data), sizeof(DB_LSN));
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+ cmp_p = log_compare(&LSN(pagep), &copy_lsn);
+ CHECK_LSN(op, cmp_p, &LSN(pagep), &copy_lsn);
+ if (DB_REDO(op) &&
+ (cmp_p == 0 ||
+ (IS_ZERO_LSN(copy_lsn) &&
+ log_compare(&LSN(pagep), &argp->meta_lsn) <= 0))) {
+ /* Need to redo update described. */
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, argp->next, 0, P_INVALID);
+ pagep->lsn = *lsnp;
+
+ modified = 1;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to undo update described. */
+ memcpy(pagep, argp->header.data, argp->header.size);
+ if (data)
+ memcpy((u_int8_t*)pagep + pagep->hf_offset,
+ argp->data.data, argp->data.size);
+
+ modified = 1;
+ }
+ if ((ret = __memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ goto out;
+ pagep = NULL;
+
+ /*
+ * Fix up the metadata page. If we're redoing or undoing the operation
+ * we get the page and update its LSN and free pointer.
+ */
+ pgno = PGNO_BASE_MD;
+ if ((ret = __memp_fget(mpf, &pgno, 0, &meta)) != 0) {
+ /* The metadata page must always exist. */
+ ret = __db_pgerr(file_dbp, pgno, ret);
+ goto out;
+ }
+
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(meta));
+ cmp_p = log_compare(&LSN(meta), &argp->meta_lsn);
+ CHECK_LSN(op, cmp_p, &LSN(meta), &argp->meta_lsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo the deallocation. */
+ meta->free = argp->pgno;
+ /*
+ * If this was a compensating transaction and
+ * we are a replica, then we never executed the
+ * original allocation which incremented meta->free.
+ */
+ if (meta->last_pgno < meta->free)
+ meta->last_pgno = meta->free;
+ LSN(meta) = *lsnp;
+ modified = 1;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Need to undo the deallocation. */
+ meta->free = argp->next;
+ LSN(meta) = argp->meta_lsn;
+ modified = 1;
+ }
+ if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ goto out;
+ meta = NULL;
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
+ if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+
+ return (ret);
+}
+
+/*
+ * __db_pg_free_recover --
+ * Recovery function for pg_free.
+ *
+ * PUBLIC: int __db_pg_free_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_free_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ __db_pg_free_args *argp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_pg_free_print);
+ REC_INTRO(__db_pg_free_read, 1);
+
+ ret = __db_pg_free_recover_int(dbenv,
+ (__db_pg_freedata_args *)argp, file_dbp, lsnp, mpf, op, 0);
+
+done:
+out:
+ REC_CLOSE;
+
+}
+
+/*
+ * __db_pg_new_recover --
+ * A new page from the file was put on the free list.
+ * This record is only generated during a LIMBO_COMPENSATE.
+ *
+ * PUBLIC: int __db_pg_new_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_new_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ __db_pg_free_args *argp;
+ int ret;
+
+ REC_PRINT(__db_pg_free_print);
+ REC_INTRO(__db_pg_free_read, 1);
+ COMPQUIET(op, 0);
+
+ if ((ret =
+ __db_add_limbo(dbenv, info, argp->fileid, argp->pgno, 1)) == 0)
+ *lsnp = argp->prev_lsn;
+
+done:
+out:
+ REC_CLOSE;
+
+}
+
+/*
+ * __db_pg_freedata_recover --
+ * Recovery function for pg_freedata.
+ *
+ * PUBLIC: int __db_pg_freedata_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_freedata_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ __db_pg_freedata_args *argp;
+ int ret;
+
+ COMPQUIET(info, NULL);
+ REC_PRINT(__db_pg_freedata_print);
+ REC_INTRO(__db_pg_freedata_read, 1);
+
+ ret = __db_pg_free_recover_int(dbenv, argp, file_dbp, lsnp, mpf, op, 1);
+
+done:
+out:
+ REC_CLOSE;
+
+}
+
+/*
+ * __db_cksum_recover --
+ * Recovery function for checksum failure log record.
+ *
+ * PUBLIC: int __db_cksum_recover __P((DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_cksum_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_cksum_args *argp;
+
+ int ret;
+
+ COMPQUIET(info, NULL);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(op, DB_TXN_ABORT);
+
+ REC_PRINT(__db_cksum_print);
+
+ if ((ret = __db_cksum_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+
+ /*
+ * We had a checksum failure -- the only option is to run catastrophic
+ * recovery.
+ */
+ if (F_ISSET(dbenv, DB_ENV_FATAL))
+ ret = 0;
+ else {
+ __db_err(dbenv,
+ "Checksum failure requires catastrophic recovery");
+ ret = __db_panic(dbenv, DB_RUNRECOVERY);
+ }
+
+ __os_free(dbenv, argp);
+ return (ret);
+}
+/*
+ * __db_pg_prepare_recover --
+ * Recovery function for pg_prepare.
+ *
+ * PUBLIC: int __db_pg_prepare_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_prepare_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_prepare_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int ret, t_ret;
+
+ REC_PRINT(__db_pg_prepare_print);
+ REC_INTRO(__db_pg_prepare_read, 1);
+
+ mpf = file_dbp->mpf;
+
+ /*
+ * If this made it into the limbo list a prepare time then
+ * it was a new free page allocated by an aborted subtransaction.
+ * Only that subtransaction could have toched the page.
+ * All other pages in the free list at this point are
+ * either of the same nature or were put there by this subtransactions
+ * other subtransactions that followed this one. If
+ * they were put there by this subtransaction the log records
+ * of the following allocations will reflect that.
+ * Note that only one transaction could have had the
+ * metapage locked at the point of the crash.
+ * All this is to say that we can P_INIT this page without
+ * loosing other pages on the free list because they
+ * will be linked in by records earlier in the log for
+ * this transaction which we will roll back.
+ */
+ if (op == DB_TXN_ABORT) {
+ if ((ret = __memp_fget(
+ mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ P_INIT(pagep, file_dbp->pgsize,
+ argp->pgno, PGNO_INVALID, PGNO_INVALID, 0, P_INVALID);
+ ZERO_LSN(pagep->lsn);
+ ret = __db_add_limbo(dbenv, info, argp->fileid, argp->pgno, 1);
+ if ((t_ret =
+ __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+done: if (ret == 0)
+ *lsnp = argp->prev_lsn;
out: REC_CLOSE;
}
diff --git a/db/db/db_reclaim.c b/db/db/db_reclaim.c
index 739f34840..1a70bf608 100644
--- a/db/db/db_reclaim.c
+++ b/db/db/db_reclaim.c
@@ -1,74 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_reclaim.c,v 11.5 2000/04/07 14:26:58 bostic Exp $";
+static const char revid[] = "$Id: db_reclaim.c,v 11.37 2003/06/30 17:19:47 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-
-/*
- * Assume that we enter with a valid pgno. We traverse a set of
- * duplicate pages. The format of the callback routine is:
- * callback(dbp, page, cookie, did_put). did_put is an output
- * value that will be set to 1 by the callback routine if it
- * already put the page back. Otherwise, this routine must
- * put the page.
- *
- * PUBLIC: int __db_traverse_dup __P((DB *,
- * PUBLIC: db_pgno_t, int (*)(DB *, PAGE *, void *, int *), void *));
- */
-int
-__db_traverse_dup(dbp, pgno, callback, cookie)
- DB *dbp;
- db_pgno_t pgno;
- int (*callback) __P((DB *, PAGE *, void *, int *));
- void *cookie;
-{
- PAGE *p;
- int did_put, i, opgno, ret;
-
- do {
- did_put = 0;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &p)) != 0)
- return (ret);
- pgno = NEXT_PGNO(p);
-
- for (i = 0; i < NUM_ENT(p); i++) {
- if (B_TYPE(GET_BKEYDATA(p, i)->type) == B_OVERFLOW) {
- opgno = GET_BOVERFLOW(p, i)->pgno;
- if ((ret = __db_traverse_big(dbp,
- opgno, callback, cookie)) != 0)
- goto err;
- }
- }
-
- if ((ret = callback(dbp, p, cookie, &did_put)) != 0)
- goto err;
-
- if (!did_put)
- if ((ret = memp_fput(dbp->mpf, p, 0)) != 0)
- return (ret);
- } while (pgno != PGNO_INVALID);
-
- if (0) {
-err: if (did_put == 0)
- (void)memp_fput(dbp->mpf, p, 0);
- }
- return (ret);
-}
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/mp.h"
/*
* __db_traverse_big
@@ -88,17 +40,20 @@ __db_traverse_big(dbp, pgno, callback, cookie)
int (*callback) __P((DB *, PAGE *, void *, int *));
void *cookie;
{
+ DB_MPOOLFILE *mpf;
PAGE *p;
int did_put, ret;
+ mpf = dbp->mpf;
+
do {
did_put = 0;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &p)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &p)) != 0)
return (ret);
pgno = NEXT_PGNO(p);
if ((ret = callback(dbp, p, cookie, &did_put)) == 0 &&
!did_put)
- ret = memp_fput(dbp->mpf, p, 0);
+ ret = __memp_fput(mpf, p, 0);
} while (ret == 0 && pgno != PGNO_INVALID);
return (ret);
@@ -132,3 +87,134 @@ __db_reclaim_callback(dbp, p, cookie, putp)
return (0);
}
+
+/*
+ * __db_truncate_callback
+ * This is the callback routine used during a truncate.
+ * we are traversing a btree or hash table and trying to free all the
+ * pages.
+ *
+ * PUBLIC: int __db_truncate_callback __P((DB *, PAGE *, void *, int *));
+ */
+int
+__db_truncate_callback(dbp, p, cookie, putp)
+ DB *dbp;
+ PAGE *p;
+ void *cookie;
+ int *putp;
+{
+ DB_MPOOLFILE *mpf;
+ db_indx_t indx, len, off, tlen, top;
+ db_trunc_param *param;
+ u_int8_t *hk, type;
+ int ret;
+
+ top = NUM_ENT(p);
+ mpf = dbp->mpf;
+ param = cookie;
+ *putp = 1;
+
+ switch (TYPE(p)) {
+ case P_LBTREE:
+ /* Skip for off-page duplicates and deleted items. */
+ for (indx = 0; indx < top; indx += P_INDX) {
+ type = GET_BKEYDATA(dbp, p, indx + O_INDX)->type;
+ if (!B_DISSET(type) && B_TYPE(type) != B_DUPLICATE)
+ ++param->count;
+ }
+ /* FALLTHROUGH */
+ case P_IBTREE:
+ case P_IRECNO:
+ case P_INVALID:
+ if (dbp->type != DB_HASH &&
+ ((BTREE *)dbp->bt_internal)->bt_root == PGNO(p)) {
+ type = dbp->type == DB_RECNO ? P_LRECNO : P_LBTREE;
+ goto reinit;
+ }
+ break;
+ case P_OVERFLOW:
+ if (DBC_LOGGING(param->dbc)) {
+ if ((ret = __db_ovref_log(dbp, param->dbc->txn,
+ &LSN(p), 0, p->pgno, -1, &LSN(p))) != 0)
+ return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(p));
+ if (--OV_REF(p) != 0)
+ *putp = 0;
+ break;
+ case P_LRECNO:
+ for (indx = 0; indx < top; indx += O_INDX) {
+ type = GET_BKEYDATA(dbp, p, indx)->type;
+ if (!B_DISSET(type))
+ ++param->count;
+ }
+
+ if (((BTREE *)dbp->bt_internal)->bt_root == PGNO(p)) {
+ type = P_LRECNO;
+ goto reinit;
+ }
+ break;
+ case P_LDUP:
+ /* Correct for deleted items. */
+ for (indx = 0; indx < top; indx += O_INDX)
+ if (!B_DISSET(GET_BKEYDATA(dbp, p, indx)->type))
+ ++param->count;
+
+ break;
+ case P_HASH:
+ /* Correct for on-page duplicates and deleted items. */
+ for (indx = 0; indx < top; indx += P_INDX) {
+ switch (*H_PAIRDATA(dbp, p, indx)) {
+ case H_OFFDUP:
+ case H_OFFPAGE:
+ break;
+ case H_KEYDATA:
+ ++param->count;
+ break;
+ case H_DUPLICATE:
+ tlen = LEN_HDATA(dbp, p, 0, indx);
+ hk = H_PAIRDATA(dbp, p, indx);
+ for (off = 0; off < tlen;
+ off += len + 2 * sizeof (db_indx_t)) {
+ ++param->count;
+ memcpy(&len,
+ HKEYDATA_DATA(hk)
+ + off, sizeof(db_indx_t));
+ }
+ break;
+ default:
+ return (__db_pgfmt(dbp->dbenv, p->pgno));
+ }
+ }
+ /* Don't free the head of the bucket. */
+ if (PREV_PGNO(p) == PGNO_INVALID) {
+ type = P_HASH;
+
+reinit: *putp = 0;
+ if (DBC_LOGGING(param->dbc)) {
+ if ((ret = __db_free(param->dbc, p)) != 0)
+ return (ret);
+ if ((ret = __db_new(param->dbc, type, &p)) != 0)
+ return (ret);
+ } else
+ LSN_NOT_LOGGED(LSN(p));
+
+ P_INIT(p, dbp->pgsize, PGNO(p), PGNO_INVALID,
+ PGNO_INVALID, type == P_HASH ? 0 : 1, type);
+ }
+ break;
+ default:
+ return (__db_pgfmt(dbp->dbenv, p->pgno));
+ }
+
+ if (*putp == 1) {
+ if ((ret = __db_free(param->dbc, p)) != 0)
+ return (ret);
+ } else {
+ if ((ret = __memp_fput(mpf, p, DB_MPOOL_DIRTY)) != 0)
+ return (ret);
+ *putp = 1;
+ }
+
+ return (0);
+}
diff --git a/db/db/db_remove.c b/db/db/db_remove.c
index ef8aeb4ae..3357ba233 100644
--- a/db/db/db_remove.c
+++ b/db/db/db_remove.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_remove.c,v 11.201 2002/08/11 02:11:22 margo Exp ";
+static const char revid[] = "$Id: db_remove.c,v 11.214 2003/09/04 18:56:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -23,27 +23,25 @@ static const char revid[] = "Id: db_remove.c,v 11.201 2002/08/11 02:11:22 margo
#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
-static int __db_subdb_remove __P((DB *, DB_TXN *, const char *, const char *));
static int __db_dbtxn_remove __P((DB *, DB_TXN *, const char *));
+static int __db_subdb_remove __P((DB *, DB_TXN *, const char *, const char *));
/*
- * __dbenv_dbremove
- * Remove method for DB_ENV.
+ * __dbenv_dbremove_pp
+ * DB_ENV->dbremove pre/post processing.
*
- * PUBLIC: int __dbenv_dbremove __P((DB_ENV *,
+ * PUBLIC: int __dbenv_dbremove_pp __P((DB_ENV *,
* PUBLIC: DB_TXN *, const char *, const char *, u_int32_t));
*/
int
-__dbenv_dbremove(dbenv, txn, name, subdb, flags)
+__dbenv_dbremove_pp(dbenv, txn, name, subdb, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name, *subdb;
u_int32_t flags;
{
DB *dbp;
- int ret, t_ret, txn_local;
-
- txn_local = 0;
+ int handle_check, ret, t_ret, txn_local;
PANIC_CHECK(dbenv);
ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->dbremove");
@@ -52,63 +50,79 @@ __dbenv_dbremove(dbenv, txn, name, subdb, flags)
if ((ret = __db_fchk(dbenv, "DB->remove", flags, DB_AUTO_COMMIT)) != 0)
return (ret);
- if ((ret = db_create(&dbp, dbenv, 0)) != 0)
- return (ret);
-
/*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto(dbp, &txn)) != 0)
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
return (ret);
txn_local = 1;
- } else
+ } else {
if (txn != NULL && !TXN_ON(dbenv))
return (__db_not_txn_env(dbenv));
+ txn_local = 0;
+ }
- ret = __db_remove_i(dbp, txn, name, subdb);
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ goto err;
+
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ ret = __db_remove_int(dbp, txn, name, subdb, flags);
- /* Commit for DB_AUTO_COMMIT. */
if (txn_local) {
- if (ret == 0)
- ret = txn->commit(txn, 0);
- else
- if ((t_ret = txn->abort(txn)) != 0)
- ret = __db_panic(dbenv, t_ret);
/*
- * We created the DBP here and when we committed/aborted,
- * we release all the tranasctional locks, which includes
- * the handle lock; mark the handle cleared explicitly.
+ * We created the DBP here and when we commit/abort, we'll
+ * release all the transactional locks, including the handle
+ * lock; mark the handle cleared explicitly.
*/
LOCK_INIT(dbp->handle_lock);
dbp->lid = DB_LOCK_INVALIDID;
+ } else if (txn != NULL) {
+ /*
+ * We created this handle locally so we need to close it
+ * and clean it up. Unfortunately, it's holding transactional
+ * locks that need to persist until the end of transaction.
+ * If we invalidate the locker id (dbp->lid), then the close
+ * won't free these locks prematurely.
+ */
+ dbp->lid = DB_LOCK_INVALIDID;
}
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: if (txn_local)
+ ret = __db_txn_auto_resolve(dbenv, txn, 0, ret);
+
/*
- * We never opened this dbp for real, so don't call the transactional
- * version of DB->close, and use NOSYNC to avoid calling into mpool.
+ * We never opened this dbp for real, so don't include a transaction
+ * handle, and use NOSYNC to avoid calling into mpool.
*/
- if ((t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+ if ((t_ret = __db_close(dbp, NULL, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
- * __db_remove
- * Remove method for DB.
+ * __db_remove_pp
+ * DB->remove pre/post processing.
*
- * PUBLIC: int __db_remove __P((DB *, const char *, const char *, u_int32_t));
+ * PUBLIC: int __db_remove_pp
+ * PUBLIC: __P((DB *, const char *, const char *, u_int32_t));
*/
int
-__db_remove(dbp, name, subdb, flags)
+__db_remove_pp(dbp, name, subdb, flags)
DB *dbp;
const char *name, *subdb;
u_int32_t flags;
{
DB_ENV *dbenv;
- int ret, t_ret;
+ int handle_check, ret;
dbenv = dbp->dbenv;
@@ -126,57 +140,86 @@ __db_remove(dbp, name, subdb, flags)
*/
if (F_ISSET(dbp, DB_AM_OPEN_CALLED)) {
ret = __db_mi_open(dbenv, "DB->remove", 1);
- goto err;
+ return (ret);
}
/* Validate arguments. */
if ((ret = __db_fchk(dbenv, "DB->remove", flags, 0)) != 0)
- goto err;
+ return (ret);
/* Check for consistent transaction usage. */
if ((ret = __db_check_txn(dbp, NULL, DB_LOCK_INVALIDID, 0)) != 0)
- goto err;
+ return (ret);
+
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0)) != 0)
+ return (ret);
/* Remove the file. */
- ret = __db_remove_i(dbp, NULL, name, subdb);
+ ret = __db_remove(dbp, NULL, name, subdb, flags);
- /*
- * We never opened this dbp for real, use NOSYNC to avoid calling into
- * mpool.
- */
-err: if ((t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+ if (handle_check)
+ __db_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __db_remove
+ * DB->remove method.
+ *
+ * PUBLIC: int __db_remove
+ * PUBLIC: __P((DB *, DB_TXN *, const char *, const char *, u_int32_t));
+ */
+int
+__db_remove(dbp, txn, name, subdb, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name, *subdb;
+ u_int32_t flags;
+{
+ int ret, t_ret;
+
+ ret = __db_remove_int(dbp, txn, name, subdb, flags);
+
+ if ((t_ret = __db_close(dbp, txn, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
- * __db_remove_i
- * Internal remove method for DB.
+ * __db_remove_int
+ * Worker function for the DB->remove method.
*
- * PUBLIC: int __db_remove_i __P((DB *, DB_TXN *, const char *, const char *));
+ * PUBLIC: int __db_remove_int __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, const char *, u_int32_t));
*/
int
-__db_remove_i(dbp, txn, name, subdb)
+__db_remove_int(dbp, txn, name, subdb, flags)
DB *dbp;
DB_TXN *txn;
const char *name, *subdb;
+ u_int32_t flags;
{
DB_ENV *dbenv;
DB_LSN newlsn;
int ret;
- char *real_name;
+ char *real_name, *tmpname;
dbenv = dbp->dbenv;
- real_name = NULL;
+ real_name = tmpname = NULL;
/* Handle subdatabase removes separately. */
- if (subdb != NULL)
- return (__db_subdb_remove(dbp, txn, name, subdb));
+ if (subdb != NULL) {
+ ret = __db_subdb_remove(dbp, txn, name, subdb);
+ goto err;
+ }
/* Handle transactional file removes separately. */
- if (txn != NULL)
- return (__db_dbtxn_remove(dbp, txn, name));
+ if (txn != NULL) {
+ ret = __db_dbtxn_remove(dbp, txn, name);
+ goto err;
+ }
/*
* The remaining case is a non-transactional file remove.
@@ -185,7 +228,15 @@ __db_remove_i(dbp, txn, name, subdb)
*/
if ((ret = __db_appname(dbenv,
DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
- return (ret);
+ goto err;
+
+ /*
+ * If force is set, remove the temporary file. Ignore errors because
+ * the backup file might not exist.
+ */
+ if (LF_ISSET(DB_FORCE) &&
+ (ret = __db_backup_name(dbenv, real_name, NULL, &tmpname)) == 0)
+ (void)__os_unlink(dbenv, tmpname);
if ((ret = __fop_remove_setup(dbp, NULL, real_name, 0)) != 0)
goto err;
@@ -194,11 +245,13 @@ __db_remove_i(dbp, txn, name, subdb)
(ret = dbp->db_am_remove(dbp, NULL, name, subdb, &newlsn)) != 0)
goto err;
- ret = __fop_remove(dbenv, NULL, dbp->fileid, name, DB_APP_DATA);
+ ret = __fop_remove(dbenv, NULL, dbp->fileid, name, DB_APP_DATA,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
-err:
- if (real_name != NULL)
+err: if (real_name != NULL)
__os_free(dbenv, real_name);
+ if (tmpname != NULL)
+ __os_free(dbenv, tmpname);
return (ret);
}
@@ -214,17 +267,15 @@ __db_subdb_remove(dbp, txn, name, subdb)
const char *name, *subdb;
{
DB *mdbp, *sdbp;
- DB_ENV *dbenv;
int ret, t_ret;
mdbp = sdbp = NULL;
- dbenv = dbp->dbenv;
/* Open the subdatabase. */
if ((ret = db_create(&sdbp, dbp->dbenv, 0)) != 0)
goto err;
if ((ret = __db_open(sdbp,
- txn, name, subdb, DB_UNKNOWN, DB_WRITEOPEN, 0)) != 0)
+ txn, name, subdb, DB_UNKNOWN, DB_WRITEOPEN, 0, PGNO_BASE_MD)) != 0)
goto err;
DB_TEST_RECOVERY(sdbp, DB_TEST_PREDESTROY, ret, name);
@@ -240,6 +291,8 @@ __db_subdb_remove(dbp, txn, name, subdb)
if ((ret = __ham_reclaim(sdbp, txn)) != 0)
goto err;
break;
+ case DB_QUEUE:
+ case DB_UNKNOWN:
default:
ret = __db_unknown_type(
sdbp->dbenv, "__db_subdb_remove", sdbp->type);
@@ -262,11 +315,11 @@ __db_subdb_remove(dbp, txn, name, subdb)
DB_TEST_RECOVERY_LABEL
err:
/* Close the main and subdatabases. */
- if ((t_ret = __db_close_i(sdbp, txn, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_close(sdbp, txn, 0)) != 0 && ret == 0)
ret = t_ret;
if (mdbp != NULL &&
- (t_ret = __db_close_i(mdbp, txn, 0)) != 0 && ret == 0)
+ (t_ret = __db_close(mdbp, txn, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -294,13 +347,12 @@ __db_dbtxn_remove(dbp, txn, name)
* file being rename/dremoved) and then deleting that file as
* a delayed remove at commit.
*/
- if ((ret =
- __db_backup_name(dbenv, name, txn, &tmpname, &txn->last_lsn)) != 0)
+ if ((ret = __db_backup_name(dbenv, name, txn, &tmpname)) != 0)
return (ret);
DB_TEST_RECOVERY(dbp, DB_TEST_PREDESTROY, ret, name);
- if ((ret = __db_rename_i(dbp, txn, name, NULL, tmpname)) != 0)
+ if ((ret = __db_rename_int(dbp, txn, name, NULL, tmpname)) != 0)
goto err;
/* The internal removes will also translate into delayed removes. */
@@ -308,7 +360,8 @@ __db_dbtxn_remove(dbp, txn, name)
(ret = dbp->db_am_remove(dbp, txn, tmpname, NULL, &newlsn)) != 0)
goto err;
- ret = __fop_remove(dbenv, txn, dbp->fileid, tmpname, DB_APP_DATA);
+ ret = __fop_remove(dbenv, txn, dbp->fileid, tmpname, DB_APP_DATA,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
DB_TEST_RECOVERY(dbp, DB_TEST_POSTDESTROY, ret, name);
diff --git a/db/db/db_rename.c b/db/db/db_rename.c
index bb81e2cd1..c02948391 100644
--- a/db/db/db_rename.c
+++ b/db/db/db_rename.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_rename.c,v 11.203 2002/08/07 16:16:47 bostic Exp ";
+static const char revid[] = "$Id: db_rename.c,v 11.211 2003/09/04 18:06:45 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -23,28 +23,28 @@ static const char revid[] = "Id: db_rename.c,v 11.203 2002/08/07 16:16:47 bostic
#include "dbinc/fop.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
+#include "dbinc/mp.h"
-static int __db_subdb_rename __P(( DB *, DB_TXN *,
- const char *, const char *, const char *));
+static int __dbenv_dbrename __P((DB_ENV *,
+ DB_TXN *, const char *, const char *, const char *, int));
+static int __db_subdb_rename __P((DB *,
+ DB_TXN *, const char *, const char *, const char *));
/*
- * __dbenv_dbrename
- * Rename method for DB_ENV.
+ * __dbenv_dbrename_pp
+ * DB_ENV->dbrename pre/post processing.
*
- * PUBLIC: int __dbenv_dbrename __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: int __dbenv_dbrename_pp __P((DB_ENV *, DB_TXN *,
* PUBLIC: const char *, const char *, const char *, u_int32_t));
*/
int
-__dbenv_dbrename(dbenv, txn, name, subdb, newname, flags)
+__dbenv_dbrename_pp(dbenv, txn, name, subdb, newname, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name, *subdb, *newname;
u_int32_t flags;
{
- DB *dbp;
- int ret, t_ret, txn_local;
-
- txn_local = 0;
+ int ret, txn_local;
PANIC_CHECK(dbenv);
ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->dbrename");
@@ -53,67 +53,96 @@ __dbenv_dbrename(dbenv, txn, name, subdb, newname, flags)
if ((ret = __db_fchk(dbenv, "DB->rename", flags, DB_AUTO_COMMIT)) != 0)
return (ret);
- if ((ret = db_create(&dbp, dbenv, 0)) != 0)
- return (ret);
-
/*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto(dbp, &txn)) != 0)
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
return (ret);
txn_local = 1;
- } else
+ } else {
if (txn != NULL && !TXN_ON(dbenv))
return (__db_not_txn_env(dbenv));
+ txn_local = 0;
+ }
- ret = __db_rename_i(dbp, txn, name, subdb, newname);
+ ret = __dbenv_dbrename(dbenv, txn, name, subdb, newname, txn_local);
- /* Commit for DB_AUTO_COMMIT. */
- if (txn_local) {
- if (ret == 0)
- ret = txn->commit(txn, 0);
- else
- if ((t_ret = txn->abort(txn)) != 0)
- ret = __db_panic(dbenv, t_ret);
+ return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+}
+
+/*
+ * __dbenv_dbrename
+ * DB_ENV->dbrename.
+ */
+static int
+__dbenv_dbrename(dbenv, txn, name, subdb, newname, txn_local)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ const char *name, *subdb, *newname;
+ int txn_local;
+{
+ DB *dbp;
+ int handle_check, ret, t_ret;
+
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ return (ret);
+ if (txn != NULL)
+ F_SET(dbp, DB_AM_TXN);
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ return (ret);
+
+ ret = __db_rename_int(dbp, txn, name, subdb, newname);
+
+ if (txn_local) {
/*
- * We created the DBP here and when we committed/aborted,
- * we release all the tranasctional locks, which includes
- * the handle lock; mark the handle cleared explicitly.
+ * We created the DBP here and when we commit/abort, we'll
+ * release all the transactional locks, including the handle
+ * lock; mark the handle cleared explicitly.
*/
LOCK_INIT(dbp->handle_lock);
dbp->lid = DB_LOCK_INVALIDID;
+ } else if (txn != NULL) {
+ /*
+ * We created this handle locally so we need to close it
+ * and clean it up. Unfortunately, it's holding transactional
+ * locks that need to persist until the end of transaction.
+ * If we invalidate the locker id (dbp->lid), then the close
+ * won't free these locks prematurely.
+ */
+ dbp->lid = DB_LOCK_INVALIDID;
}
- /*
- * We never opened this dbp for real, so don't call the transactional
- * version of DB->close, and use NOSYNC to avoid calling into mpool.
- */
- if ((t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+ if ((t_ret = __db_close(dbp, txn, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
- * __db_rename
- * Rename method for DB.
+ * __db_rename_pp
+ * DB->rename pre/post processing.
*
- * PUBLIC: int __db_rename __P((DB *,
+ * PUBLIC: int __db_rename_pp __P((DB *,
* PUBLIC: const char *, const char *, const char *, u_int32_t));
*/
int
-__db_rename(dbp, name, subdb, newname, flags)
+__db_rename_pp(dbp, name, subdb, newname, flags)
DB *dbp;
const char *name, *subdb, *newname;
u_int32_t flags;
{
DB_ENV *dbenv;
- int ret, t_ret;
+ int handle_check, ret;
dbenv = dbp->dbenv;
+ handle_check = 0;
PANIC_CHECK(dbenv);
@@ -140,28 +169,54 @@ __db_rename(dbp, name, subdb, newname, flags)
if ((ret = __db_check_txn(dbp, NULL, DB_LOCK_INVALIDID, 0)) != 0)
goto err;
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, 0)) != 0) {
+ handle_check = 0;
+ goto err;
+ }
+
/* Rename the file. */
- ret = __db_rename_i(dbp, NULL, name, subdb, newname);
+ ret = __db_rename(dbp, NULL, name, subdb, newname);
- /*
- * We never opened this dbp for real, use NOSYNC to avoid calling into
- * mpool.
- */
-err: if ((t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+err: if (handle_check)
+ __db_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
+ * __db_rename
+ * DB->rename method.
+ *
+ * PUBLIC: int __db_rename
+ * PUBLIC: __P((DB *, DB_TXN *, const char *, const char *, const char *));
+ */
+int
+__db_rename(dbp, txn, name, subdb, newname)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name, *subdb, *newname;
+{
+ int ret, t_ret;
+
+ ret = __db_rename_int(dbp, txn, name, subdb, newname);
+
+ if ((t_ret = __db_close(dbp, txn, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
- * __db_rename_i
- * Internal rename method for DB.
+ * __db_rename_int
+ * Worker function for DB->rename method; the close of the dbp is
+ * left in the wrapper routine.
*
- * PUBLIC: int __db_rename_i __P((DB *,
- * PUBLIC: DB_TXN *, const char *, const char *, const char *));
+ * PUBLIC: int __db_rename_int
+ * PUBLIC: __P((DB *, DB_TXN *, const char *, const char *, const char *));
*/
int
-__db_rename_i(dbp, txn, name, subdb, newname)
+__db_rename_int(dbp, txn, name, subdb, newname)
DB *dbp;
DB_TXN *txn;
const char *name, *subdb, *newname;
@@ -180,9 +235,11 @@ __db_rename_i(dbp, txn, name, subdb, newname)
goto err;
}
- /* From here on down, this pertains to files. */
-
- /* Find the real name of the file. */
+ /*
+ * From here on down, this pertains to files.
+ *
+ * Find the real name of the file.
+ */
if ((ret = __db_appname(dbenv,
DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
goto err;
@@ -220,8 +277,7 @@ __db_rename_i(dbp, txn, name, subdb, newname)
DB_TEST_RECOVERY(dbp, DB_TEST_POSTDESTROY, ret, newname);
DB_TEST_RECOVERY_LABEL
-err:
- if (real_name != NULL)
+err: if (real_name != NULL)
__os_free(dbenv, real_name);
return (ret);
@@ -265,14 +321,14 @@ __db_subdb_rename(dbp, txn, name, subdb, newname)
MU_OPEN, NULL, 0)) != 0)
goto err;
- if ((ret = mdbp->mpf->get(mdbp->mpf, &dbp->meta_pgno, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mdbp->mpf, &dbp->meta_pgno, 0, &meta)) != 0)
goto err;
- memcpy(&dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
+ memcpy(dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
if ((ret = __fop_lock_handle(dbenv,
dbp, mdbp->lid, DB_LOCK_WRITE, NULL, 0)) != 0)
goto err;
- ret = mdbp->mpf->put(mdbp->mpf, meta, 0);
+ ret = __memp_fput(mdbp->mpf, meta, 0);
meta = NULL;
if (ret != 0)
goto err;
@@ -286,11 +342,11 @@ __db_subdb_rename(dbp, txn, name, subdb, newname)
DB_TEST_RECOVERY_LABEL
err:
if (meta != NULL &&
- (t_ret = mdbp->mpf->put(mdbp->mpf, meta, 0)) != 0 && ret == 0)
+ (t_ret = __memp_fput(mdbp->mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
if (mdbp != NULL &&
- (t_ret = __db_close_i(mdbp, txn, 0)) != 0 && ret == 0)
+ (t_ret = __db_close(mdbp, txn, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
diff --git a/db/db/db_ret.c b/db/db/db_ret.c
index 0782de3e4..83521a1f1 100644
--- a/db/db/db_ret.c
+++ b/db/db/db_ret.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_ret.c,v 11.12 2000/11/30 00:58:33 ubell Exp $";
+static const char revid[] = "$Id: db_ret.c,v 11.24 2003/04/02 14:12:34 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,9 +18,8 @@ static const char revid[] = "$Id: db_ret.c,v 11.12 2000/11/30 00:58:33 ubell Exp
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "db_am.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
/*
* __db_ret --
@@ -47,19 +46,19 @@ __db_ret(dbp, h, indx, dbt, memp, memsize)
switch (TYPE(h)) {
case P_HASH:
- hk = P_ENTRY(h, indx);
+ hk = P_ENTRY(dbp, h, indx);
if (HPAGE_PTYPE(hk) == H_OFFPAGE) {
memcpy(&ho, hk, sizeof(HOFFPAGE));
return (__db_goff(dbp, dbt,
ho.tlen, ho.pgno, memp, memsize));
}
- len = LEN_HKEYDATA(h, dbp->pgsize, indx);
+ len = LEN_HKEYDATA(dbp, h, dbp->pgsize, indx);
data = HKEYDATA_DATA(hk);
break;
case P_LBTREE:
case P_LDUP:
case P_LRECNO:
- bk = GET_BKEYDATA(h, indx);
+ bk = GET_BKEYDATA(dbp, h, indx);
if (B_TYPE(bk->type) == B_OVERFLOW) {
bo = (BOVERFLOW *)bk;
return (__db_goff(dbp, dbt,
@@ -69,32 +68,31 @@ __db_ret(dbp, h, indx, dbt, memp, memsize)
data = bk->data;
break;
default:
- return (__db_pgfmt(dbp, h->pgno));
+ return (__db_pgfmt(dbp->dbenv, h->pgno));
}
- return (__db_retcopy(dbp, dbt, data, len, memp, memsize));
+ return (__db_retcopy(dbp->dbenv, dbt, data, len, memp, memsize));
}
/*
* __db_retcopy --
* Copy the returned data into the user's DBT, handling special flags.
*
- * PUBLIC: int __db_retcopy __P((DB *, DBT *,
+ * PUBLIC: int __db_retcopy __P((DB_ENV *, DBT *,
* PUBLIC: void *, u_int32_t, void **, u_int32_t *));
*/
int
-__db_retcopy(dbp, dbt, data, len, memp, memsize)
- DB *dbp;
+__db_retcopy(dbenv, dbt, data, len, memp, memsize)
+ DB_ENV *dbenv;
DBT *dbt;
void *data;
u_int32_t len;
void **memp;
u_int32_t *memsize;
{
- DB_ENV *dbenv;
int ret;
- dbenv = dbp == NULL ? NULL : dbp->dbenv;
+ ret = 0;
/* If returning a partial record, reset the length. */
if (F_ISSET(dbt, DB_DBT_PARTIAL)) {
@@ -108,14 +106,6 @@ __db_retcopy(dbp, dbt, data, len, memp, memsize)
}
/*
- * Return the length of the returned record in the DBT size field.
- * This satisfies the requirement that if we're using user memory
- * and insufficient memory was provided, return the amount necessary
- * in the size field.
- */
- dbt->size = len;
-
- /*
* Allocate memory to be owned by the application: DB_DBT_MALLOC,
* DB_DBT_REALLOC.
*
@@ -131,30 +121,36 @@ __db_retcopy(dbp, dbt, data, len, memp, memsize)
* memory pointer is allowed to be NULL.
*/
if (F_ISSET(dbt, DB_DBT_MALLOC)) {
- if ((ret = __os_malloc(dbenv, len,
- dbp == NULL ? NULL : dbp->db_malloc, &dbt->data)) != 0)
- return (ret);
+ ret = __os_umalloc(dbenv, len, &dbt->data);
} else if (F_ISSET(dbt, DB_DBT_REALLOC)) {
- if ((ret = __os_realloc(dbenv, len,
- dbp == NULL ? NULL : dbp->db_realloc, &dbt->data)) != 0)
- return (ret);
+ if (dbt->data == NULL || dbt->size == 0 || dbt->size < len)
+ ret = __os_urealloc(dbenv, len, &dbt->data);
} else if (F_ISSET(dbt, DB_DBT_USERMEM)) {
if (len != 0 && (dbt->data == NULL || dbt->ulen < len))
- return (ENOMEM);
+ ret = ENOMEM;
} else if (memp == NULL || memsize == NULL) {
- return (EINVAL);
+ ret = EINVAL;
} else {
if (len != 0 && (*memsize == 0 || *memsize < len)) {
- if ((ret = __os_realloc(dbenv, len, NULL, memp)) != 0) {
+ if ((ret = __os_realloc(dbenv, len, memp)) == 0)
+ *memsize = len;
+ else
*memsize = 0;
- return (ret);
- }
- *memsize = len;
}
- dbt->data = *memp;
+ if (ret == 0)
+ dbt->data = *memp;
}
- if (len != 0)
+ if (ret == 0 && len != 0)
memcpy(dbt->data, data, len);
- return (0);
+
+ /*
+ * Return the length of the returned record in the DBT size field.
+ * This satisfies the requirement that if we're using user memory
+ * and insufficient memory was provided, return the amount necessary
+ * in the size field.
+ */
+ dbt->size = len;
+
+ return (ret);
}
diff --git a/db/db/db_truncate.c b/db/db/db_truncate.c
index bd0998882..8eb177d56 100644
--- a/db/db/db_truncate.c
+++ b/db/db/db_truncate.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_truncate.c,v 11.185 2002/08/07 16:16:48 bostic Exp ";
+static const char revid[] = "$Id: db_truncate.c,v 11.195 2003/07/02 15:39:51 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,76 +20,179 @@ static const char revid[] = "Id: db_truncate.c,v 11.185 2002/08/07 16:16:48 bost
#include "dbinc/btree.h"
#include "dbinc/hash.h"
#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+static int __db_cursor_check __P((DB *));
/*
- * __db_truncate
- * truncate method for DB.
+ * __db_truncate_pp
+ * DB->truncate pre/post processing.
*
- * PUBLIC: int __db_truncate __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+ * PUBLIC: int __db_truncate_pp __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
*/
int
-__db_truncate(dbp, txn, countp, flags)
+__db_truncate_pp(dbp, txn, countp, flags)
DB *dbp;
DB_TXN *txn;
u_int32_t *countp, flags;
{
DB_ENV *dbenv;
- int ret, t_ret, txn_local;
+ int handle_check, ret, txn_local;
dbenv = dbp->dbenv;
- ret = txn_local = 0;
PANIC_CHECK(dbenv);
/* Check for invalid flags. */
+ if (F_ISSET(dbp, DB_AM_SECONDARY) && !LF_ISSET(DB_UPDATE_SECONDARY)) {
+ __db_err(dbenv,
+ "DBP->truncate forbidden on secondary indices");
+ return (EINVAL);
+ }
+ LF_CLR(DB_UPDATE_SECONDARY);
if ((ret =
__db_fchk(dbenv, "DB->truncate", flags, DB_AUTO_COMMIT)) != 0)
return (ret);
/*
+ * Make sure there are no active cursors on this db. Since we drop
+ * pages we cannot really adjust cursors.
+ */
+ if (__db_cursor_check(dbp) != 0) {
+ __db_err(dbenv,
+ "DB->truncate not permitted with active cursors");
+ return (EINVAL);
+ }
+
+ /*
* Create local transaction as necessary, check for consistent
* transaction usage.
*/
+ txn_local = 0;
if (IS_AUTO_COMMIT(dbenv, txn, flags)) {
- if ((ret = __db_txn_auto(dbp, &txn)) != 0)
- return (ret);
+ if ((ret = __db_txn_auto_init(dbenv, &txn)) != 0)
+ goto err;
txn_local = 1;
- } else
- if (txn != NULL && !TXN_ON(dbenv))
- return (__db_not_txn_env(dbenv));
+ LF_CLR(DB_AUTO_COMMIT);
+ } else if (txn != NULL && !TXN_ON(dbenv)) {
+ ret = __db_not_txn_env(dbenv);
+ return (ret);
+ }
+
+ handle_check = IS_REPLICATED(dbenv, dbp);
+ if (handle_check && (ret = __db_rep_enter(dbp, 1, txn != NULL)) != 0)
+ goto err;
+
+ ret = __db_truncate(dbp, txn, countp, flags);
+
+ if (handle_check)
+ __db_rep_exit(dbenv);
+
+err: return (txn_local ? __db_txn_auto_resolve(dbenv, txn, 0, ret) : ret);
+}
+
+/*
+ * __db_truncate
+ * DB->truncate.
+ *
+ * PUBLIC: int __db_truncate __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+ */
+int
+__db_truncate(dbp, txn, countp, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ u_int32_t *countp, flags;
+{
+ DB *sdbp;
+ DBC *dbc;
+ DB_ENV *dbenv;
+ u_int32_t scount;
+ int ret, t_ret;
+
+ COMPQUIET(flags, 0);
+
+ dbenv = dbp->dbenv;
+ dbc = NULL;
+ ret = 0;
DB_TEST_RECOVERY(dbp, DB_TEST_PREDESTROY, ret, NULL);
+
+ /*
+ * Run through all secondaries and truncate them first. The count
+ * returned is the count of the primary only. QUEUE uses normal
+ * processing to truncate so it will update the secondaries normally.
+ */
+ if (dbp->type != DB_QUEUE && LIST_FIRST(&dbp->s_secondaries) != NULL)
+ for (sdbp = __db_s_first(dbp);
+ sdbp != NULL && ret == 0; ret = __db_s_next(&sdbp))
+ if ((ret = __db_truncate(sdbp,
+ txn, &scount, DB_UPDATE_SECONDARY)) != 0)
+ return (ret);
+
+ /* Acquire a cursor. */
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
+ return (ret);
+
switch (dbp->type) {
- case DB_BTREE:
- case DB_RECNO:
- if ((ret = __bam_truncate(dbp, txn, countp)) != 0)
- goto err;
- break;
- case DB_HASH:
- if ((ret = __ham_truncate(dbp, txn, countp)) != 0)
- goto err;
- break;
- case DB_QUEUE:
- if ((ret = __qam_truncate(dbp, txn, countp)) != 0)
- goto err;
- break;
- default:
- ret = __db_unknown_type(
- dbenv, "__db_truncate", dbp->type);
- goto err;
+ case DB_BTREE:
+ case DB_RECNO:
+ ret = __bam_truncate(dbc, countp);
+ break;
+ case DB_HASH:
+ ret = __ham_truncate(dbc, countp);
+ break;
+ case DB_QUEUE:
+ ret = __qam_truncate(dbc, countp);
+ break;
+ case DB_UNKNOWN:
+ default:
+ ret = __db_unknown_type(dbenv, "DB->truncate", dbp->type);
+ break;
}
+
+ /* Discard the cursor. */
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
DB_TEST_RECOVERY(dbp, DB_TEST_POSTDESTROY, ret, NULL);
DB_TEST_RECOVERY_LABEL
-err:
- /* Commit for DB_AUTO_COMMIT. */
- if (txn_local) {
- if (ret == 0)
- ret = txn->commit(txn, 0);
- else
- if ((t_ret = txn->abort(txn)) != 0)
- ret = __db_panic(dbenv, t_ret);
- }
return (ret);
}
+
+/*
+ * __db_cursor_check --
+ * See if there are any active cursors on this db.
+ */
+static int
+__db_cursor_check(dbp)
+ DB *dbp;
+{
+ DB *ldbp;
+ DBC *dbc;
+ DB_ENV *dbenv;
+ int found;
+
+ dbenv = dbp->dbenv;
+
+ MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
+ for (found = 0, ldbp = __dblist_get(dbenv, dbp->adj_fileid);
+ ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
+ ldbp = LIST_NEXT(ldbp, dblistlinks)) {
+ MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ for (dbc = TAILQ_FIRST(&ldbp->active_queue);
+ dbc != NULL; dbc = TAILQ_NEXT(dbc, links)) {
+ if (IS_INITIALIZED(dbc)) {
+ found = 1;
+ break;
+ }
+ }
+ MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
+ if (found == 1)
+ break;
+ }
+ MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
+
+ return (found);
+}
diff --git a/db/db/db_upg.c b/db/db/db_upg.c
index d8573146a..f194c8005 100644
--- a/db/db/db_upg.c
+++ b/db/db/db_upg.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_upg.c,v 11.20 2000/12/12 17:35:30 bostic Exp $";
+static const char revid[] = "$Id: db_upg.c,v 11.33 2003/06/06 14:55:40 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,11 +18,11 @@ static const char revid[] = "$Id: db_upg.c,v 11.20 2000/12/12 17:35:30 bostic Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/qam.h"
static int (* const func_31_list[P_PAGETYPE_MAX])
__P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *)) = {
@@ -36,12 +36,44 @@ static int (* const func_31_list[P_PAGETYPE_MAX])
NULL, /* P_OVERFLOW */
__ham_31_hashmeta, /* P_HASHMETA */
__bam_31_btreemeta, /* P_BTREEMETA */
+ NULL, /* P_QAMMETA */
+ NULL, /* P_QAMDATA */
+ NULL, /* P_LDUP */
};
static int __db_page_pass __P((DB *, char *, u_int32_t, int (* const [])
(DB *, char *, u_int32_t, DB_FH *, PAGE *, int *), DB_FH *));
/*
+ * __db_upgrade_pp --
+ * DB->upgrade pre/post processing.
+ *
+ * PUBLIC: int __db_upgrade_pp __P((DB *, const char *, u_int32_t));
+ */
+int
+__db_upgrade_pp(dbp, fname, flags)
+ DB *dbp;
+ const char *fname;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = dbp->dbenv;
+
+ PANIC_CHECK(dbp->dbenv);
+
+ /*
+ * !!!
+ * The actual argument checking is simple, do it inline.
+ */
+ if ((ret = __db_fchk(dbenv, "DB->upgrade", flags, DB_DUPSORT)) != 0)
+ return (ret);
+
+ return (__db_upgrade(dbp, fname, flags));
+}
+
+/*
* __db_upgrade --
* Upgrade an existing database.
*
@@ -54,25 +86,22 @@ __db_upgrade(dbp, fname, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
- DB_FH fh;
+ DB_FH *fhp;
size_t n;
int ret, t_ret;
u_int8_t mbuf[256];
char *real_name;
dbenv = dbp->dbenv;
-
- /* Validate arguments. */
- if ((ret = __db_fchk(dbenv, "DB->upgrade", flags, DB_DUPSORT)) != 0)
- return (ret);
+ fhp = NULL;
/* Get the real backing file name. */
if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, fname, 0, NULL, &real_name)) != 0)
+ DB_APP_DATA, fname, 0, NULL, &real_name)) != 0)
return (ret);
/* Open the file. */
- if ((ret = __os_open(dbenv, real_name, 0, 0, &fh)) != 0) {
+ if ((ret = __os_open(dbenv, real_name, 0, 0, &fhp)) != 0) {
__db_err(dbenv, "%s: %s", real_name, db_strerror(ret));
return (ret);
}
@@ -85,7 +114,7 @@ __db_upgrade(dbp, fname, flags)
* Read the metadata page. We read 256 bytes, which is larger than
* any access method's metadata page and smaller than any disk sector.
*/
- if ((ret = __os_read(dbenv, &fh, mbuf, sizeof(mbuf), &n)) != 0)
+ if ((ret = __os_read(dbenv, fhp, mbuf, sizeof(mbuf), &n)) != 0)
goto err;
switch (((DBMETA *)mbuf)->magic) {
@@ -100,9 +129,9 @@ __db_upgrade(dbp, fname, flags)
__bam_30_btreemeta(dbp, real_name, mbuf)) != 0)
goto err;
if ((ret = __os_seek(dbenv,
- &fh, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
goto err;
- if ((ret = __os_write(dbenv, &fh, mbuf, 256, &n)) != 0)
+ if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
/* FALLTHROUGH */
case 7:
@@ -113,10 +142,11 @@ __db_upgrade(dbp, fname, flags)
memcpy(&dbp->pgsize, mbuf + 20, sizeof(u_int32_t));
if ((ret = __db_page_pass(
- dbp, real_name, flags, func_31_list, &fh)) != 0)
+ dbp, real_name, flags, func_31_list, fhp)) != 0)
goto err;
/* FALLTHROUGH */
case 8:
+ case 9:
break;
default:
__db_err(dbenv, "%s: unsupported btree version: %lu",
@@ -137,9 +167,9 @@ __db_upgrade(dbp, fname, flags)
__ham_30_hashmeta(dbp, real_name, mbuf)) != 0)
goto err;
if ((ret = __os_seek(dbenv,
- &fh, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
goto err;
- if ((ret = __os_write(dbenv, &fh, mbuf, 256, &n)) != 0)
+ if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
/*
@@ -158,7 +188,7 @@ __db_upgrade(dbp, fname, flags)
* the database to the end of the current doubling.
*/
if ((ret =
- __ham_30_sizefix(dbp, &fh, real_name, mbuf)) != 0)
+ __ham_30_sizefix(dbp, fhp, real_name, mbuf)) != 0)
goto err;
/* FALLTHROUGH */
case 6:
@@ -169,10 +199,11 @@ __db_upgrade(dbp, fname, flags)
memcpy(&dbp->pgsize, mbuf + 20, sizeof(u_int32_t));
if ((ret = __db_page_pass(
- dbp, real_name, flags, func_31_list, &fh)) != 0)
+ dbp, real_name, flags, func_31_list, fhp)) != 0)
goto err;
/* FALLTHROUGH */
case 7:
+ case 8:
break;
default:
__db_err(dbenv, "%s: unsupported hash version: %lu",
@@ -196,12 +227,13 @@ __db_upgrade(dbp, fname, flags)
if ((ret = __qam_32_qammeta(dbp, real_name, mbuf)) != 0)
return (ret);
if ((ret = __os_seek(dbenv,
- &fh, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
+ fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
goto err;
- if ((ret = __os_write(dbenv, &fh, mbuf, 256, &n)) != 0)
+ if ((ret = __os_write(dbenv, fhp, mbuf, 256, &n)) != 0)
goto err;
/* FALLTHROUGH */
case 3:
+ case 4:
break;
default:
__db_err(dbenv, "%s: unsupported queue version: %lu",
@@ -229,11 +261,12 @@ __db_upgrade(dbp, fname, flags)
goto err;
}
- ret = __os_fsync(dbenv, &fh);
+ ret = __os_fsync(dbenv, fhp);
-err: if ((t_ret = __os_closehandle(&fh)) != 0 && ret == 0)
+err: if (fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
ret = t_ret;
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
/* We're done. */
if (dbp->db_feedback != NULL)
@@ -268,13 +301,14 @@ __db_page_pass(dbp, real_name, flags, fl, fhp)
return (ret);
/* Allocate memory for a single page. */
- if ((ret = __os_malloc(dbenv, dbp->pgsize, NULL, &page)) != 0)
+ if ((ret = __os_malloc(dbenv, dbp->pgsize, &page)) != 0)
return (ret);
/* Walk the file, calling the underlying conversion functions. */
for (i = 0; i < pgno_last; ++i) {
if (dbp->db_feedback != NULL)
- dbp->db_feedback(dbp, DB_UPGRADE, (i * 100)/pgno_last);
+ dbp->db_feedback(
+ dbp, DB_UPGRADE, (int)((i * 100)/pgno_last));
if ((ret = __os_seek(dbenv,
fhp, dbp->pgsize, i, 0, 0, DB_OS_SEEK_SET)) != 0)
break;
@@ -294,7 +328,7 @@ __db_page_pass(dbp, real_name, flags, fl, fhp)
}
}
- __os_free(page, dbp->pgsize);
+ __os_free(dbp->dbenv, page);
return (ret);
}
diff --git a/db/db/db_upg_opd.c b/db/db/db_upg_opd.c
index a7be784af..099bfd0d2 100644
--- a/db/db/db_upg_opd.c
+++ b/db/db/db_upg_opd.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_upg_opd.c,v 11.9 2000/11/30 00:58:33 ubell Exp $";
+static const char revid[] = "$Id: db_upg_opd.c,v 11.19 2003/01/08 04:13:45 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,11 +18,8 @@ static const char revid[] = "$Id: db_upg_opd.c,v 11.9 2000/11/30 00:58:33 ubell
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
static int __db_build_bi __P((DB *, DB_FH *, PAGE *, PAGE *, u_int32_t, int *));
static int __db_build_ri __P((DB *, DB_FH *, PAGE *, PAGE *, u_int32_t, int *));
@@ -71,7 +68,7 @@ __db_31_offdup(dbp, real_name, fhp, sorted, pgnop)
pgno_cur = pgno_next = NULL;
/* Allocate room to hold a page. */
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &page)) != 0)
+ if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, &page)) != 0)
goto err;
/*
@@ -85,7 +82,7 @@ __db_31_offdup(dbp, real_name, fhp, sorted, pgnop)
if (pgno_max == cur_cnt) {
pgno_max += 20;
if ((ret = __os_realloc(dbp->dbenv, pgno_max *
- sizeof(db_pgno_t), NULL, &pgno_cur)) != 0)
+ sizeof(db_pgno_t), &pgno_cur)) != 0)
goto err;
}
pgno_cur[cur_cnt++] = pgno;
@@ -112,7 +109,7 @@ __db_31_offdup(dbp, real_name, fhp, sorted, pgnop)
* list while we do so.
*/
if ((ret = __os_malloc(dbp->dbenv,
- cur_cnt * sizeof(db_pgno_t), NULL, &pgno_next)) != 0)
+ cur_cnt * sizeof(db_pgno_t), &pgno_next)) != 0)
goto err;
/* Figure out where we can start allocating new pages. */
@@ -121,7 +118,7 @@ __db_31_offdup(dbp, real_name, fhp, sorted, pgnop)
/* Allocate room for an internal page. */
if ((ret = __os_malloc(dbp->dbenv,
- dbp->pgsize, NULL, &ipage)) != 0)
+ dbp->pgsize, &ipage)) != 0)
goto err;
PGNO(ipage) = PGNO_INVALID;
}
@@ -187,13 +184,13 @@ __db_31_offdup(dbp, real_name, fhp, sorted, pgnop)
*pgnop = pgno_cur[0];
err: if (pgno_cur != NULL)
- __os_free(pgno_cur, 0);
+ __os_free(dbp->dbenv, pgno_cur);
if (pgno_next != NULL)
- __os_free(pgno_next, 0);
+ __os_free(dbp->dbenv, pgno_next);
if (ipage != NULL)
- __os_free(ipage, dbp->pgsize);
+ __os_free(dbp->dbenv, ipage);
if (page != NULL)
- __os_free(page, dbp->pgsize);
+ __os_free(dbp->dbenv, page);
return (ret);
}
@@ -214,22 +211,24 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
BKEYDATA *child_bk;
u_int8_t *p;
int ret;
+ db_indx_t *inp;
+ inp = P_INP(dbp, ipage);
switch (TYPE(page)) {
case P_IBTREE:
- child_bi = GET_BINTERNAL(page, 0);
- if (P_FREESPACE(ipage) < BINTERNAL_PSIZE(child_bi->len)) {
+ child_bi = GET_BINTERNAL(dbp, page, 0);
+ if (P_FREESPACE(dbp, ipage) < BINTERNAL_PSIZE(child_bi->len)) {
*nomemp = 1;
return (0);
}
- ipage->inp[indx] =
- HOFFSET(ipage) -= BINTERNAL_SIZE(child_bi->len);
- p = P_ENTRY(ipage, indx);
+ inp[indx] =
+ HOFFSET(ipage) -= BINTERNAL_SIZE(child_bi->len);
+ p = P_ENTRY(dbp, ipage, indx);
bi.len = child_bi->len;
B_TSET(bi.type, child_bi->type, 0);
bi.pgno = PGNO(page);
- bi.nrecs = __bam_total(page);
+ bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
p += SSZA(BINTERNAL, data);
memcpy(p, child_bi->data, child_bi->len);
@@ -241,40 +240,40 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
return (ret);
break;
case P_LDUP:
- child_bk = GET_BKEYDATA(page, 0);
+ child_bk = GET_BKEYDATA(dbp, page, 0);
switch (B_TYPE(child_bk->type)) {
case B_KEYDATA:
- if (P_FREESPACE(ipage) <
+ if (P_FREESPACE(dbp, ipage) <
BINTERNAL_PSIZE(child_bk->len)) {
*nomemp = 1;
return (0);
}
- ipage->inp[indx] =
+ inp[indx] =
HOFFSET(ipage) -= BINTERNAL_SIZE(child_bk->len);
- p = P_ENTRY(ipage, indx);
+ p = P_ENTRY(dbp, ipage, indx);
bi.len = child_bk->len;
B_TSET(bi.type, child_bk->type, 0);
bi.pgno = PGNO(page);
- bi.nrecs = __bam_total(page);
+ bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
p += SSZA(BINTERNAL, data);
memcpy(p, child_bk->data, child_bk->len);
break;
case B_OVERFLOW:
- if (P_FREESPACE(ipage) <
+ if (P_FREESPACE(dbp, ipage) <
BINTERNAL_PSIZE(BOVERFLOW_SIZE)) {
*nomemp = 1;
return (0);
}
- ipage->inp[indx] =
+ inp[indx] =
HOFFSET(ipage) -= BINTERNAL_SIZE(BOVERFLOW_SIZE);
- p = P_ENTRY(ipage, indx);
+ p = P_ENTRY(dbp, ipage, indx);
bi.len = BOVERFLOW_SIZE;
B_TSET(bi.type, child_bk->type, 0);
bi.pgno = PGNO(page);
- bi.nrecs = __bam_total(page);
+ bi.nrecs = __bam_total(dbp, page);
memcpy(p, &bi, SSZA(BINTERNAL, data));
p += SSZA(BINTERNAL, data);
memcpy(p, child_bk, BOVERFLOW_SIZE);
@@ -285,11 +284,11 @@ __db_build_bi(dbp, fhp, ipage, page, indx, nomemp)
return (ret);
break;
default:
- return (__db_pgfmt(dbp, PGNO(page)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(page)));
}
break;
default:
- return (__db_pgfmt(dbp, PGNO(page)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(page)));
}
return (0);
@@ -308,19 +307,19 @@ __db_build_ri(dbp, fhp, ipage, page, indx, nomemp)
int *nomemp;
{
RINTERNAL ri;
+ db_indx_t *inp;
- COMPQUIET(dbp, NULL);
COMPQUIET(fhp, NULL);
-
- if (P_FREESPACE(ipage) < RINTERNAL_PSIZE) {
+ inp = P_INP(dbp, ipage);
+ if (P_FREESPACE(dbp, ipage) < RINTERNAL_PSIZE) {
*nomemp = 1;
return (0);
}
ri.pgno = PGNO(page);
- ri.nrecs = __bam_total(page);
- ipage->inp[indx] = HOFFSET(ipage) -= RINTERNAL_SIZE;
- memcpy(P_ENTRY(ipage, indx), &ri, RINTERNAL_SIZE);
+ ri.nrecs = __bam_total(dbp, page);
+ inp[indx] = HOFFSET(ipage) -= RINTERNAL_SIZE;
+ memcpy(P_ENTRY(dbp, ipage, indx), &ri, RINTERNAL_SIZE);
return (0);
}
@@ -340,14 +339,14 @@ __db_up_ovref(dbp, fhp, pgno)
int ret;
/* Allocate room to hold a page. */
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, NULL, &page)) != 0)
+ if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, &page)) != 0)
return (ret);
GET_PAGE(dbp, fhp, pgno, page);
++OV_REF(page);
PUT_PAGE(dbp, fhp, pgno, page);
-err: __os_free(page, dbp->pgsize);
+err: __os_free(dbp->dbenv, page);
return (ret);
}
diff --git a/db/db/db_vrfy.c b/db/db/db_vrfy.c
index 3509e05e9..eab383cb0 100644
--- a/db/db/db_vrfy.c
+++ b/db/db/db_vrfy.c
@@ -1,16 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: db_vrfy.c,v 1.53 2001/01/11 18:19:51 bostic Exp $
+ * $Id: db_vrfy.c,v 1.127 2003/07/16 22:25:34 ubell Exp $
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_vrfy.c,v 1.53 2001/01/11 18:19:51 bostic Exp $";
+static const char revid[] = "$Id: db_vrfy.c,v 1.127 2003/07/16 22:25:34 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,40 +20,16 @@ static const char revid[] = "$Id: db_vrfy.c,v 1.53 2001/01/11 18:19:51 bostic Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "db_verify.h"
-#include "db_ext.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-
-static int __db_guesspgsize __P((DB_ENV *, DB_FH *));
-static int __db_is_valid_magicno __P((u_int32_t, DBTYPE *));
-static int __db_is_valid_pagetype __P((u_int32_t));
-static int __db_meta2pgset
- __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t, DB *));
-static int __db_salvage_subdbs
- __P((DB *, VRFY_DBINFO *, void *,
- int(*)(void *, const void *), u_int32_t, int *));
-static int __db_salvage_unknowns
- __P((DB *, VRFY_DBINFO *, void *,
- int (*)(void *, const void *), u_int32_t));
-static int __db_vrfy_common
- __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
-static int __db_vrfy_freelist __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t));
-static int __db_vrfy_invalid
- __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
-static int __db_vrfy_orderchkonly __P((DB *,
- VRFY_DBINFO *, const char *, const char *, u_int32_t));
-static int __db_vrfy_pagezero __P((DB *, VRFY_DBINFO *, DB_FH *, u_int32_t));
-static int __db_vrfy_subdbs
- __P((DB *, VRFY_DBINFO *, const char *, u_int32_t));
-static int __db_vrfy_structure
- __P((DB *, VRFY_DBINFO *, const char *, db_pgno_t, u_int32_t));
-static int __db_vrfy_walkpages
- __P((DB *, VRFY_DBINFO *, void *, int (*)(void *, const void *),
- u_int32_t));
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/db_verify.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
/*
* This is the code for DB->verify, the DB database consistency checker.
@@ -62,163 +38,180 @@ static int __db_vrfy_walkpages
* check only for a subset of possible problems).
*/
+static u_int __db_guesspgsize __P((DB_ENV *, DB_FH *));
+static int __db_is_valid_magicno __P((u_int32_t, DBTYPE *));
+static int __db_is_valid_pagetype __P((u_int32_t));
+static int __db_meta2pgset
+ __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t, DB *));
+static int __db_salvage_subdbpg __P((DB *, VRFY_DBINFO *,
+ PAGE *, void *, int (*)(void *, const void *), u_int32_t));
+static int __db_salvage_subdbs __P((DB *, VRFY_DBINFO *, void *,
+ int(*)(void *, const void *), u_int32_t, int *));
+static int __db_salvage_unknowns __P((DB *, VRFY_DBINFO *, void *,
+ int (*)(void *, const void *), u_int32_t));
+static int __db_verify_arg __P((DB *, const char *, u_int32_t));
+static int __db_vrfy_freelist
+ __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t));
+static int __db_vrfy_invalid
+ __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
+static int __db_vrfy_orderchkonly __P((DB *,
+ VRFY_DBINFO *, const char *, const char *, u_int32_t));
+static int __db_vrfy_pagezero __P((DB *, VRFY_DBINFO *, DB_FH *, u_int32_t));
+static int __db_vrfy_subdbs
+ __P((DB *, VRFY_DBINFO *, const char *, u_int32_t));
+static int __db_vrfy_structure
+ __P((DB *, VRFY_DBINFO *, const char *, db_pgno_t, u_int32_t));
+static int __db_vrfy_walkpages __P((DB *, VRFY_DBINFO *,
+ void *, int (*)(void *, const void *), u_int32_t));
+
/*
- * __db_verify --
- * Walk the entire file page-by-page, either verifying with or without
- * dumping in db_dump -d format, or DB_SALVAGE-ing whatever key/data
- * pairs can be found and dumping them in standard (db_load-ready)
- * dump format.
- *
- * (Salvaging isn't really a verification operation, but we put it
- * here anyway because it requires essentially identical top-level
- * code.)
+ * __db_verify_pp --
+ * DB->verify public interface.
*
- * flags may be 0, DB_NOORDERCHK, DB_ORDERCHKONLY, or DB_SALVAGE
- * (and optionally DB_AGGRESSIVE).
- *
- * __db_verify itself is simply a wrapper to __db_verify_internal,
- * which lets us pass appropriate equivalents to FILE * in from the
- * non-C APIs.
- *
- * PUBLIC: int __db_verify
+ * PUBLIC: int __db_verify_pp
* PUBLIC: __P((DB *, const char *, const char *, FILE *, u_int32_t));
*/
int
-__db_verify(dbp, file, database, outfile, flags)
+__db_verify_pp(dbp, file, database, outfile, flags)
DB *dbp;
const char *file, *database;
FILE *outfile;
u_int32_t flags;
{
-
+ /*
+ * __db_verify_pp is a wrapper to __db_verify_internal, which lets
+ * us pass appropriate equivalents to FILE * in from the non-C APIs.
+ */
return (__db_verify_internal(dbp,
- file, database, outfile, __db_verify_callback, flags));
+ file, database, outfile, __db_pr_callback, flags));
}
/*
- * __db_verify_callback --
- * Callback function for using pr_* functions from C.
+ * __db_verify_internal --
*
- * PUBLIC: int __db_verify_callback __P((void *, const void *));
+ * PUBLIC: int __db_verify_internal __P((DB *, const char *,
+ * PUBLIC: const char *, void *, int (*)(void *, const void *), u_int32_t));
*/
int
-__db_verify_callback(handle, str_arg)
+__db_verify_internal(dbp, fname, dname, handle, callback, flags)
+ DB *dbp;
+ const char *fname, *dname;
void *handle;
- const void *str_arg;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
{
- char *str;
- FILE *f;
+ DB_ENV *dbenv;
+ int ret;
- str = (char *)str_arg;
- f = (FILE *)handle;
+ dbenv = dbp->dbenv;
- if (fprintf(f, "%s", str) != (int)strlen(str))
- return (EIO);
+ PANIC_CHECK(dbenv);
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->verify");
- return (0);
+ if ((ret = __db_verify_arg(dbp, dname, flags)) != 0)
+ return (ret);
+
+ /*
+ * Forbid working in an environment that uses transactions or
+ * locking; we're going to be looking at the file freely,
+ * and while we're not going to modify it, we aren't obeying
+ * locking conventions either.
+ */
+ if (TXN_ON(dbenv) || LOCKING_ON(dbenv) || LOGGING_ON(dbenv)) {
+ __db_err(dbenv,
+ "DB->verify may not be used with transactions, logging, or locking");
+ return (EINVAL);
+ }
+
+ return (__db_verify(dbp, fname, dname, handle, callback, flags));
}
/*
- * __db_verify_internal --
- * Inner meat of __db_verify.
- *
- * PUBLIC: int __db_verify_internal __P((DB *, const char *,
- * PUBLIC: const char *, void *, int (*)(void *, const void *), u_int32_t));
+ * __db_verify_arg --
+ * Check DB->verify arguments.
*/
-int
-__db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
- DB *dbp_orig;
- const char *name, *subdb;
- void *handle;
- int (*callback) __P((void *, const void *));
+static int
+__db_verify_arg(dbp, dname, flags)
+ DB *dbp;
+ const char *dname;
u_int32_t flags;
{
- DB *dbp;
DB_ENV *dbenv;
- DB_FH fh, *fhp;
- PAGE *h;
- VRFY_DBINFO *vdp;
- db_pgno_t last;
- int has, ret, isbad;
- char *real_name;
-
- dbenv = dbp_orig->dbenv;
- vdp = NULL;
- real_name = NULL;
- ret = isbad = 0;
-
- memset(&fh, 0, sizeof(fh));
- fhp = &fh;
+ int ret;
- PANIC_CHECK(dbenv);
- DB_ILLEGAL_AFTER_OPEN(dbp_orig, "verify");
+ dbenv = dbp->dbenv;
-#define OKFLAGS (DB_AGGRESSIVE | DB_NOORDERCHK | DB_ORDERCHKONLY | DB_SALVAGE)
+#undef OKFLAGS
+#define OKFLAGS (DB_AGGRESSIVE | DB_NOORDERCHK | DB_ORDERCHKONLY | \
+ DB_PRINTABLE | DB_SALVAGE)
if ((ret = __db_fchk(dbenv, "DB->verify", flags, OKFLAGS)) != 0)
return (ret);
/*
* DB_SALVAGE is mutually exclusive with the other flags except
- * DB_AGGRESSIVE.
+ * DB_AGGRESSIVE and DB_PRINTABLE.
*/
if (LF_ISSET(DB_SALVAGE) &&
- (flags & ~DB_AGGRESSIVE) != DB_SALVAGE)
+ (flags & ~DB_AGGRESSIVE & ~DB_PRINTABLE) != DB_SALVAGE)
+ return (__db_ferr(dbenv, "__db_verify", 1));
+
+ /* DB_AGGRESSIVE and DB_PRINTABLE are only meaningful when salvaging. */
+ if ((LF_ISSET(DB_AGGRESSIVE) || LF_ISSET(DB_PRINTABLE)) &&
+ !LF_ISSET(DB_SALVAGE))
return (__db_ferr(dbenv, "__db_verify", 1));
if (LF_ISSET(DB_ORDERCHKONLY) && flags != DB_ORDERCHKONLY)
return (__db_ferr(dbenv, "__db_verify", 1));
- if (LF_ISSET(DB_ORDERCHKONLY) && subdb == NULL) {
+ if (LF_ISSET(DB_ORDERCHKONLY) && dname == NULL) {
__db_err(dbenv, "DB_ORDERCHKONLY requires a database name");
return (EINVAL);
}
+ return (0);
+}
- /*
- * Forbid working in an environment that uses transactions or
- * locking; we're going to be looking at the file freely,
- * and while we're not going to modify it, we aren't obeying
- * locking conventions either.
- */
- if (TXN_ON(dbenv) || LOCKING_ON(dbenv) || LOGGING_ON(dbenv)) {
- dbp_orig->errx(dbp_orig,
- "verify may not be used with transactions, logging, or locking");
- return (EINVAL);
- /* NOTREACHED */
- }
+/*
+ * __db_verify --
+ * Walk the entire file page-by-page, either verifying with or without
+ * dumping in db_dump -d format, or DB_SALVAGE-ing whatever key/data
+ * pairs can be found and dumping them in standard (db_load-ready)
+ * dump format.
+ *
+ * (Salvaging isn't really a verification operation, but we put it
+ * here anyway because it requires essentially identical top-level
+ * code.)
+ *
+ * flags may be 0, DB_NOORDERCHK, DB_ORDERCHKONLY, or DB_SALVAGE
+ * (and optionally DB_AGGRESSIVE).
+ *
+ * PUBLIC: int __db_verify __P((DB *, const char *,
+ * PUBLIC: const char *, void *, int (*)(void *, const void *), u_int32_t));
+ */
+int
+__db_verify(dbp, name, subdb, handle, callback, flags)
+ DB *dbp;
+ const char *name, *subdb;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ VRFY_DBINFO *vdp;
+ int has, isbad, ret, t_ret;
+ char *real_name;
- /* Create a dbp to use internally, which we can close at our leisure. */
- if ((ret = db_create(&dbp, dbenv, 0)) != 0)
- goto err;
+ dbenv = dbp->dbenv;
+ fhp = NULL;
+ vdp = NULL;
+ real_name = NULL;
+ has = ret = isbad = 0;
F_SET(dbp, DB_AM_VERIFYING);
- /* Copy the supplied pagesize, which we use if the file one is bogus. */
- if (dbp_orig->pgsize >= DB_MIN_PGSIZE &&
- dbp_orig->pgsize <= DB_MAX_PGSIZE)
- dbp->set_pagesize(dbp, dbp_orig->pgsize);
-
- /* Copy the feedback function, if present, and initialize it. */
- if (!LF_ISSET(DB_SALVAGE) && dbp_orig->db_feedback != NULL) {
- dbp->set_feedback(dbp, dbp_orig->db_feedback);
+ /* Initialize any feedback function. */
+ if (!LF_ISSET(DB_SALVAGE) && dbp->db_feedback != NULL)
dbp->db_feedback(dbp, DB_VERIFY, 0);
- }
-
- /*
- * Copy the comparison and hashing functions. Note that
- * even if the database is not a hash or btree, the respective
- * internal structures will have been initialized.
- */
- if (dbp_orig->dup_compare != NULL &&
- (ret = dbp->set_dup_compare(dbp, dbp_orig->dup_compare)) != 0)
- goto err;
- if (((BTREE *)dbp_orig->bt_internal)->bt_compare != NULL &&
- (ret = dbp->set_bt_compare(dbp,
- ((BTREE *)dbp_orig->bt_internal)->bt_compare)) != 0)
- goto err;
- if (((HASH *)dbp_orig->h_internal)->h_hash != NULL &&
- (ret = dbp->set_h_hash(dbp,
- ((HASH *)dbp_orig->h_internal)->h_hash)) != 0)
- goto err;
/*
* We don't know how large the cache is, and if the database
@@ -232,9 +225,17 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
if ((ret = __db_vrfy_dbinfo_create(dbenv, 1024, &vdp)) != 0)
goto err;
+ /*
+ * Note whether the user has requested that we use printable
+ * chars where possible. We won't get here with this flag if
+ * we're not salvaging.
+ */
+ if (LF_ISSET(DB_PRINTABLE))
+ F_SET(vdp, SALVAGE_PRINTABLE);
+
/* Find the real name of the file. */
if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, name, 0, NULL, &real_name)) != 0)
+ DB_APP_DATA, name, 0, NULL, &real_name)) != 0)
goto err;
/*
@@ -248,7 +249,7 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
* safe to open the database normally and then use the page swapping
* code, which makes life easier.
*/
- if ((ret = __os_open(dbenv, real_name, DB_OSO_RDONLY, 0444, fhp)) != 0)
+ if ((ret = __os_open(dbenv, real_name, DB_OSO_RDONLY, 0444, &fhp)) != 0)
goto err;
/* Verify the metadata page 0; set pagesize and type. */
@@ -271,25 +272,23 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
* the [safe] part of __db_open that initializes the environment--
* and the mpool--manually.
*/
- if ((ret = __db_dbenv_setup(dbp,
- name, DB_ODDFILESIZE | DB_RDONLY)) != 0)
+ if ((ret = __db_dbenv_setup(dbp, NULL,
+ name, TXN_INVALID, DB_ODDFILESIZE | DB_RDONLY)) != 0)
return (ret);
- /* Mark the dbp as opened, so that we correctly handle its close. */
- F_SET(dbp, DB_OPEN_CALLED);
-
/*
- * Find out the page number of the last page in the database.
- *
- * XXX: This currently fails if the last page is of bad type,
- * because it calls __db_pgin and that pukes. This is bad.
+ * Set our name in the Queue subsystem; we may need it later
+ * to deal with extents.
*/
- if ((ret = memp_fget(dbp->mpf, &last, DB_MPOOL_LAST, &h)) != 0)
- goto err;
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
- goto err;
+ if (dbp->type == DB_QUEUE &&
+ (ret = __qam_set_ext_data(dbp, name)) != 0)
+ return (ret);
- vdp->last_pgno = last;
+ /* Mark the dbp as opened, so that we correctly handle its close. */
+ F_SET(dbp, DB_AM_OPEN_CALLED);
+
+ /* Find out the page number of the last page in the database. */
+ __memp_last_pgno(dbp->mpf, &vdp->last_pgno);
/*
* DB_ORDERCHKONLY is a special case; our file consists of
@@ -322,7 +321,6 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
* subdbs; on the walkpages pass, we print out
* whichever data pages we have not seen.
*/
- has = 0;
if (!LF_ISSET(DB_AGGRESSIVE) && (__db_salvage_subdbs(dbp,
vdp, handle, callback, flags, &has)) != 0)
isbad = 1;
@@ -336,9 +334,6 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
*/
if (has == 1)
F_SET(vdp, SALVAGE_PRINTHEADER);
- else if ((ret = __db_prheader(dbp,
- NULL, 0, 0, handle, callback, vdp, PGNO_BASE_MD)) != 0)
- goto err;
}
if ((ret =
@@ -373,7 +368,10 @@ __db_verify_internal(dbp_orig, name, subdb, handle, callback, flags)
}
if (0) {
-err: (void)__db_err(dbenv, "%s: %s", name, db_strerror(ret));
+ /* Don't try to strerror() DB_VERIFY_FATAL; it's private. */
+err: if (ret == DB_VERIFY_FATAL)
+ ret = DB_VERIFY_BAD;
+ __db_err(dbenv, "%s: %s", name, db_strerror(ret));
}
if (LF_ISSET(DB_SALVAGE) &&
@@ -384,14 +382,16 @@ err: (void)__db_err(dbenv, "%s: %s", name, db_strerror(ret));
done: if (!LF_ISSET(DB_SALVAGE) && dbp->db_feedback != NULL)
dbp->db_feedback(dbp, DB_VERIFY, 100);
- if (F_ISSET(fhp, DB_FH_VALID))
- (void)__os_closehandle(fhp);
- if (dbp)
- (void)dbp->close(dbp, 0);
- if (vdp)
- (void)__db_vrfy_dbinfo_destroy(vdp);
- if (real_name)
- __os_freestr(real_name);
+ if (fhp != NULL &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
+ if (dbp != NULL && (t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (vdp != NULL &&
+ (t_ret = __db_vrfy_dbinfo_destroy(dbenv, vdp)) != 0 && ret == 0)
+ ret = t_ret;
+ if (real_name != NULL)
+ __os_free(dbenv, real_name);
if ((ret == 0 && isbad == 1) || ret == DB_VERIFY_FATAL)
ret = DB_VERIFY_BAD;
@@ -417,10 +417,11 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
db_pgno_t freelist;
- int t_ret, ret, nr, swapped;
+ size_t nr;
+ int isbad, ret, swapped;
u_int8_t mbuf[DBMETASIZE];
- swapped = ret = t_ret = 0;
+ isbad = ret = swapped = 0;
freelist = 0;
dbenv = dbp->dbenv;
meta = (DBMETA *)mbuf;
@@ -432,29 +433,43 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
* may be zero; this is okay, as we want page zero anyway and
* 0*0 == 0.
*/
- if ((ret = __os_seek(dbenv, fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0)
- goto err;
-
- if ((ret = __os_read(dbenv, fhp, mbuf, DBMETASIZE, (size_t *)&nr)) != 0)
- goto err;
+ if ((ret = __os_seek(dbenv, fhp, 0, 0, 0, 0, DB_OS_SEEK_SET)) != 0 ||
+ (ret = __os_read(dbenv, fhp, mbuf, DBMETASIZE, &nr)) != 0) {
+ __db_err(dbenv,
+ "Metadata page %lu cannot be read: %s",
+ (u_long)PGNO_BASE_MD, db_strerror(ret));
+ return (ret);
+ }
if (nr != DBMETASIZE) {
- EPRINT((dbp->dbenv,
- "Incomplete metadata page %lu", (u_long)PGNO_BASE_MD));
- t_ret = DB_VERIFY_FATAL;
- goto err;
+ EPRINT((dbenv,
+ "Page %lu: Incomplete metadata page",
+ (u_long)PGNO_BASE_MD));
+ return (DB_VERIFY_FATAL);
+ }
+
+ if ((ret = __db_chk_meta(dbenv, dbp, meta, 1)) != 0) {
+ EPRINT((dbenv,
+ "Page %lu: metadata page corrupted", (u_long)PGNO_BASE_MD));
+ isbad = 1;
+ if (ret != -1) {
+ EPRINT((dbenv,
+ "Page %lu: could not check metadata page",
+ (u_long)PGNO_BASE_MD));
+ return (DB_VERIFY_FATAL);
+ }
}
/*
* Check all of the fields that we can.
+ *
+ * 08-11: Current page number. Must == pgno.
+ * Note that endianness doesn't matter--it's zero.
*/
-
- /* 08-11: Current page number. Must == pgno. */
- /* Note that endianness doesn't matter--it's zero. */
if (meta->pgno != PGNO_BASE_MD) {
- EPRINT((dbp->dbenv, "Bad pgno: was %lu, should be %lu",
- (u_long)meta->pgno, (u_long)PGNO_BASE_MD));
- ret = DB_VERIFY_BAD;
+ isbad = 1;
+ EPRINT((dbenv, "Page %lu: pgno incorrectly set to %lu",
+ (u_long)PGNO_BASE_MD, (u_long)meta->pgno));
}
/* 12-15: Magic number. Must be one of valid set. */
@@ -466,9 +481,10 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
&dbp->type))
swapped = 1;
else {
- EPRINT((dbp->dbenv,
- "Bad magic number: %lu", (u_long)meta->magic));
- ret = DB_VERIFY_BAD;
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: bad magic number %lu",
+ (u_long)PGNO_BASE_MD, (u_long)meta->magic));
}
}
@@ -478,12 +494,19 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
*/
if (swapped)
M_32_SWAP(meta->version);
- if ((dbp->type == DB_BTREE && meta->version != DB_BTREEVERSION) ||
- (dbp->type == DB_HASH && meta->version != DB_HASHVERSION) ||
- (dbp->type == DB_QUEUE && meta->version != DB_QAMVERSION)) {
- ret = DB_VERIFY_BAD;
- EPRINT((dbp->dbenv, "%s%s", "Old or incorrect DB ",
- "version; extraneous errors may result"));
+ if ((dbp->type == DB_BTREE &&
+ (meta->version > DB_BTREEVERSION ||
+ meta->version < DB_BTREEOLDVER)) ||
+ (dbp->type == DB_HASH &&
+ (meta->version > DB_HASHVERSION ||
+ meta->version < DB_HASHOLDVER)) ||
+ (dbp->type == DB_QUEUE &&
+ (meta->version > DB_QAMVERSION ||
+ meta->version < DB_QAMOLDVER))) {
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: unsupported DB version %lu; extraneous errors may result",
+ (u_long)PGNO_BASE_MD, (u_long)meta->version));
}
/*
@@ -495,9 +518,9 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
if (IS_VALID_PAGESIZE(meta->pagesize))
dbp->pgsize = meta->pagesize;
else {
- EPRINT((dbp->dbenv,
- "Bad page size: %lu", (u_long)meta->pagesize));
- ret = DB_VERIFY_BAD;
+ isbad = 1;
+ EPRINT((dbenv, "Page %lu: bad page size %lu",
+ (u_long)PGNO_BASE_MD, (u_long)meta->pagesize));
/*
* Now try to settle on a pagesize to use.
@@ -516,8 +539,9 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
if ((dbp->type == DB_BTREE && meta->type != P_BTREEMETA) ||
(dbp->type == DB_HASH && meta->type != P_HASHMETA) ||
(dbp->type == DB_QUEUE && meta->type != P_QAMMETA)) {
- ret = DB_VERIFY_BAD;
- EPRINT((dbp->dbenv, "Bad page type: %lu", (u_long)meta->type));
+ isbad = 1;
+ EPRINT((dbenv, "Page %lu: bad page type %lu",
+ (u_long)PGNO_BASE_MD, (u_long)meta->type));
}
/*
@@ -547,21 +571,16 @@ __db_vrfy_pagezero(dbp, vdp, fhp, flags)
pip->free = freelist;
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
return (ret);
/* Set up the dbp's fileid. We don't use the regular open path. */
memcpy(dbp->fileid, meta->uid, DB_FILE_ID_LEN);
- if (0) {
-err: __db_err(dbenv, "%s", db_strerror(ret));
- }
-
if (swapped == 1)
F_SET(dbp, DB_AM_SWAP);
- if (t_ret != 0)
- ret = t_ret;
- return (ret);
+
+ return (isbad ? DB_VERIFY_BAD : 0);
}
/*
@@ -578,13 +597,17 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
u_int32_t flags;
{
DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t i;
int ret, t_ret, isbad;
- ret = isbad = t_ret = 0;
dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ ret = isbad = t_ret = 0;
+#define OKFLAGS (DB_AGGRESSIVE | DB_NOORDERCHK | DB_ORDERCHKONLY | \
+ DB_PRINTABLE | DB_SALVAGE)
if ((ret = __db_fchk(dbenv,
"__db_vrfy_walkpages", flags, OKFLAGS)) != 0)
return (ret);
@@ -598,11 +621,17 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
if (LF_ISSET(DB_SALVAGE) && (__db_salvage_isdone(vdp, i) != 0))
continue;
- /* If an individual page get fails, keep going. */
- if ((t_ret = memp_fget(dbp->mpf, &i, 0, &h)) != 0) {
+ /*
+ * If an individual page get fails, keep going if and only
+ * if we're salvaging.
+ */
+ if ((t_ret = __memp_fget(mpf, &i, 0, &h)) != 0) {
if (ret == 0)
ret = t_ret;
- continue;
+ if (LF_ISSET(DB_SALVAGE))
+ continue;
+ else
+ return (ret);
}
if (LF_ISSET(DB_SALVAGE)) {
@@ -619,63 +648,71 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
}
} else {
/*
+ * If we are not salvaging, and we get any error
+ * other than DB_VERIFY_BAD, return immediately;
+ * it may not be safe to proceed. If we get
+ * DB_VERIFY_BAD, keep going; listing more errors
+ * may make it easier to diagnose problems and
+ * determine the magnitude of the corruption.
+ */
+
+ /*
* Verify info common to all page
* types.
*/
- if (i != PGNO_BASE_MD)
- if ((t_ret = __db_vrfy_common(dbp,
- vdp, h, i, flags)) == DB_VERIFY_BAD)
+ if (i != PGNO_BASE_MD) {
+ ret = __db_vrfy_common(dbp, vdp, h, i, flags);
+ if (ret == DB_VERIFY_BAD)
isbad = 1;
+ else if (ret != 0)
+ goto err;
+ }
switch (TYPE(h)) {
case P_INVALID:
- t_ret = __db_vrfy_invalid(dbp,
- vdp, h, i, flags);
+ ret = __db_vrfy_invalid(dbp, vdp, h, i, flags);
break;
case __P_DUPLICATE:
isbad = 1;
- EPRINT((dbp->dbenv,
- "Old-style duplicate page: %lu",
+ EPRINT((dbenv,
+ "Page %lu: old-style duplicate page",
(u_long)i));
break;
case P_HASH:
- t_ret = __ham_vrfy(dbp,
- vdp, h, i, flags);
+ ret = __ham_vrfy(dbp, vdp, h, i, flags);
break;
case P_IBTREE:
case P_IRECNO:
case P_LBTREE:
case P_LDUP:
- t_ret = __bam_vrfy(dbp,
- vdp, h, i, flags);
+ ret = __bam_vrfy(dbp, vdp, h, i, flags);
break;
case P_LRECNO:
- t_ret = __ram_vrfy_leaf(dbp,
- vdp, h, i, flags);
+ ret = __ram_vrfy_leaf(dbp, vdp, h, i, flags);
break;
case P_OVERFLOW:
- t_ret = __db_vrfy_overflow(dbp,
- vdp, h, i, flags);
+ ret = __db_vrfy_overflow(dbp, vdp, h, i, flags);
break;
case P_HASHMETA:
- t_ret = __ham_vrfy_meta(dbp,
+ ret = __ham_vrfy_meta(dbp,
vdp, (HMETA *)h, i, flags);
break;
case P_BTREEMETA:
- t_ret = __bam_vrfy_meta(dbp,
+ ret = __bam_vrfy_meta(dbp,
vdp, (BTMETA *)h, i, flags);
break;
case P_QAMMETA:
- t_ret = __qam_vrfy_meta(dbp,
+ ret = __qam_vrfy_meta(dbp,
vdp, (QMETA *)h, i, flags);
break;
case P_QAMDATA:
- t_ret = __qam_vrfy_data(dbp,
+ ret = __qam_vrfy_data(dbp,
vdp, (QPAGE *)h, i, flags);
break;
default:
- EPRINT((dbp->dbenv,
- "Unknown page type: %lu", (u_long)TYPE(h)));
+ EPRINT((dbenv,
+ "Page %lu: unknown page type %lu",
+ (u_long)i, (u_long)TYPE(h)));
isbad = 1;
break;
}
@@ -683,12 +720,10 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
/*
* Set up error return.
*/
- if (t_ret == DB_VERIFY_BAD)
+ if (ret == DB_VERIFY_BAD)
isbad = 1;
- else if (t_ret == DB_VERIFY_FATAL)
+ else if (ret != 0)
goto err;
- else
- ret = t_ret;
/*
* Provide feedback to the application about our
@@ -698,17 +733,38 @@ __db_vrfy_walkpages(dbp, vdp, handle, callback, flags)
*/
if (dbp->db_feedback != NULL)
dbp->db_feedback(dbp, DB_VERIFY,
- (i + 1) * 50 / (vdp->last_pgno + 1));
+ (int)((i + 1) * 50 / (vdp->last_pgno + 1)));
+ }
+
+ /*
+ * Just as with the page get, bail if and only if we're
+ * not salvaging.
+ */
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ if (!LF_ISSET(DB_SALVAGE))
+ return (ret);
}
+ }
- if ((t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret == 0)
+ /*
+ * If we've seen a Queue metadata page, we may need to walk Queue
+ * extent pages that won't show up between 0 and vdp->last_pgno.
+ */
+ if (F_ISSET(vdp, VRFY_QMETA_SET) && (t_ret =
+ __qam_vrfy_walkqueue(dbp, vdp, handle, callback, flags)) != 0) {
+ if (ret == 0)
ret = t_ret;
+ if (t_ret == DB_VERIFY_BAD)
+ isbad = 1;
+ else if (!LF_ISSET(DB_SALVAGE))
+ return (ret);
}
if (0) {
-err: if ((t_ret = memp_fput(dbp->mpf, h, 0)) != 0)
+err: if ((t_ret = __memp_fput(mpf, h, 0)) != 0)
return (ret == 0 ? t_ret : ret);
- return (DB_VERIFY_BAD);
}
return ((isbad == 1 && ret == 0) ? DB_VERIFY_BAD : ret);
@@ -769,7 +825,7 @@ __db_vrfy_structure(dbp, vdp, dbname, meta_pgno, flags)
/*
* Call the appropriate function to downwards-traverse the db type.
*/
- switch(dbp->type) {
+ switch (dbp->type) {
case DB_BTREE:
case DB_RECNO:
if ((ret = __bam_vrfy_structure(dbp, vdp, 0, flags)) != 0) {
@@ -786,9 +842,10 @@ __db_vrfy_structure(dbp, vdp, dbname, meta_pgno, flags)
*/
if ((ret = __db_vrfy_getpageinfo(vdp, 0, &pip)) != 0)
goto err;
- hassubs = F_ISSET(pip, VRFY_HAS_SUBDBS);
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ hassubs = F_ISSET(pip, VRFY_HAS_SUBDBS) ? 1 : 0;
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
goto err;
+ pip = NULL;
if (isbad == 0 && hassubs)
if ((ret =
@@ -820,13 +877,12 @@ __db_vrfy_structure(dbp, vdp, dbname, meta_pgno, flags)
* Skip to "err".
*/
goto err;
- /* NOTREACHED */
+ case DB_UNKNOWN:
default:
/* This should only happen if the verifier is somehow broken. */
DB_ASSERT(0);
ret = EINVAL;
goto err;
- /* NOTREACHED */
}
/* Walk free list. */
@@ -854,24 +910,32 @@ __db_vrfy_structure(dbp, vdp, dbname, meta_pgno, flags)
goto err;
if ((ret = __db_vrfy_pgset_get(pgset, i, &p)) != 0)
goto err;
- if (p == 0) {
- EPRINT((dbp->dbenv,
- "Unreferenced page %lu", (u_long)i));
+ if (pip->type == P_OVERFLOW) {
+ if ((u_int32_t)p != pip->refcount) {
+ EPRINT((dbenv,
+ "Page %lu: overflow refcount %lu, referenced %lu times",
+ (u_long)i,
+ (u_long)pip->refcount, (u_long)p));
+ isbad = 1;
+ }
+ } else if (p == 0) {
+ EPRINT((dbenv,
+ "Page %lu: unreferenced page", (u_long)i));
isbad = 1;
}
if (F_ISSET(pip, VRFY_IS_ALLZEROES)) {
- EPRINT((dbp->dbenv,
- "Totally zeroed page %lu", (u_long)i));
+ EPRINT((dbenv,
+ "Page %lu: totally zeroed page", (u_long)i));
isbad = 1;
}
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
goto err;
pip = NULL;
}
err: if (pip != NULL)
- (void)__db_vrfy_putpageinfo(vdp, pip);
+ (void)__db_vrfy_putpageinfo(dbenv, vdp, pip);
return ((isbad == 1 && ret == 0) ? DB_VERIFY_BAD : ret);
}
@@ -897,6 +961,8 @@ __db_is_valid_pagetype(type)
case P_QAMDATA:
case P_LDUP:
return (1);
+ default:
+ break;
}
return (0);
}
@@ -919,6 +985,8 @@ __db_is_valid_magicno(magic, typep)
case DB_QAMMAGIC:
*typep = DB_QUEUE;
return (1);
+ default:
+ break;
}
*typep = DB_UNKNOWN;
return (0);
@@ -927,8 +995,11 @@ __db_is_valid_magicno(magic, typep)
/*
* __db_vrfy_common --
* Verify info common to all page types.
+ *
+ * PUBLIC: int __db_vrfy_common
+ * PUBLIC: __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
*/
-static int
+int
__db_vrfy_common(dbp, vdp, h, pgno, flags)
DB *dbp;
VRFY_DBINFO *vdp;
@@ -936,10 +1007,13 @@ __db_vrfy_common(dbp, vdp, h, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int ret, t_ret;
u_int8_t *p;
+ dbenv = dbp->dbenv;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
@@ -957,8 +1031,8 @@ __db_vrfy_common(dbp, vdp, h, pgno, flags)
if (pgno != 0 && PGNO(h) == 0) {
for (p = (u_int8_t *)h; p < (u_int8_t *)h + dbp->pgsize; p++)
if (*p != 0) {
- EPRINT((dbp->dbenv,
- "Page %lu should be zeroed and is not",
+ EPRINT((dbenv,
+ "Page %lu: partially zeroed page",
(u_long)pgno));
ret = DB_VERIFY_BAD;
goto err;
@@ -976,19 +1050,19 @@ __db_vrfy_common(dbp, vdp, h, pgno, flags)
}
if (PGNO(h) != pgno) {
- EPRINT((dbp->dbenv,
- "Bad page number: %lu should be %lu",
- (u_long)h->pgno, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: bad page number %lu",
+ (u_long)pgno, (u_long)h->pgno));
ret = DB_VERIFY_BAD;
}
if (!__db_is_valid_pagetype(h->type)) {
- EPRINT((dbp->dbenv, "Bad page type: %lu", (u_long)h->type));
+ EPRINT((dbenv, "Page %lu: bad page type %lu",
+ (u_long)pgno, (u_long)h->type));
ret = DB_VERIFY_BAD;
}
pip->type = h->type;
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -1007,22 +1081,24 @@ __db_vrfy_invalid(dbp, vdp, h, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int ret, t_ret;
+ dbenv = dbp->dbenv;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
pip->next_pgno = pip->prev_pgno = 0;
if (!IS_VALID_PGNO(NEXT_PGNO(h))) {
- EPRINT((dbp->dbenv,
- "Invalid next_pgno %lu on page %lu",
- (u_long)NEXT_PGNO(h), (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: invalid next_pgno %lu",
+ (u_long)pgno, (u_long)NEXT_PGNO(h)));
ret = DB_VERIFY_BAD;
} else
pip->next_pgno = NEXT_PGNO(h);
- if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
@@ -1048,9 +1124,12 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int isbad, ret, t_ret;
+ dbenv = dbp->dbenv;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
isbad = 0;
@@ -1066,12 +1145,12 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
if (TYPE(h) != P_IBTREE && TYPE(h) != P_IRECNO) {
if (!IS_VALID_PGNO(PREV_PGNO(h)) || PREV_PGNO(h) == pip->pgno) {
isbad = 1;
- EPRINT((dbp->dbenv, "Page %lu: Invalid prev_pgno %lu",
+ EPRINT((dbenv, "Page %lu: invalid prev_pgno %lu",
(u_long)pip->pgno, (u_long)PREV_PGNO(h)));
}
if (!IS_VALID_PGNO(NEXT_PGNO(h)) || NEXT_PGNO(h) == pip->pgno) {
isbad = 1;
- EPRINT((dbp->dbenv, "Page %lu: Invalid next_pgno %lu",
+ EPRINT((dbenv, "Page %lu: invalid next_pgno %lu",
(u_long)pip->pgno, (u_long)NEXT_PGNO(h)));
}
pip->prev_pgno = PREV_PGNO(h);
@@ -1089,8 +1168,7 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
if (TYPE(h) != P_OVERFLOW) {
if (BKEYDATA_PSIZE(0) * NUM_ENT(h) > dbp->pgsize) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Page %lu: Too many entries: %lu",
+ EPRINT((dbenv, "Page %lu: too many entries: %lu",
(u_long)pgno, (u_long)NUM_ENT(h)));
}
pip->entries = NUM_ENT(h);
@@ -1104,10 +1182,10 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
switch (TYPE(h)) {
case P_IBTREE:
case P_IRECNO:
- if (LEVEL(h) < LEAFLEVEL + 1 || LEVEL(h) > MAXBTREELEVEL) {
+ if (LEVEL(h) < LEAFLEVEL + 1) {
isbad = 1;
- EPRINT((dbp->dbenv, "Bad btree level %lu on page %lu",
- (u_long)LEVEL(h), (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: bad btree level %lu",
+ (u_long)pgno, (u_long)LEVEL(h)));
}
pip->bt_level = LEVEL(h);
break;
@@ -1116,17 +1194,17 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
case P_LRECNO:
if (LEVEL(h) != LEAFLEVEL) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Btree leaf page %lu has incorrect level %lu",
+ EPRINT((dbenv,
+ "Page %lu: btree leaf page has incorrect level %lu",
(u_long)pgno, (u_long)LEVEL(h)));
}
break;
default:
if (LEVEL(h) != 0) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonzero level %lu in non-btree database page %lu",
- (u_long)LEVEL(h), (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonzero level %lu in non-btree database",
+ (u_long)pgno, (u_long)LEVEL(h)));
}
break;
}
@@ -1139,7 +1217,7 @@ __db_vrfy_datapage(dbp, vdp, h, pgno, flags)
* by offset and length--cover the right part of the page
* without overlaps, gaps, or violations of the page boundary.
*/
- if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
@@ -1161,11 +1239,14 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
DBTYPE dbtype, magtype;
VRFY_PAGEINFO *pip;
int isbad, ret, t_ret;
isbad = 0;
+ dbenv = dbp->dbenv;
+
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
@@ -1190,31 +1271,37 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
/* magic number valid */
if (!__db_is_valid_magicno(meta->magic, &magtype)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Magic number invalid on page %lu", (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: invalid magic number", (u_long)pgno));
}
if (magtype != dbtype) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Magic number does not match type of page %lu",
+ EPRINT((dbenv,
+ "Page %lu: magic number does not match database type",
(u_long)pgno));
}
/* version */
- if ((dbtype == DB_BTREE && meta->version != DB_BTREEVERSION) ||
- (dbtype == DB_HASH && meta->version != DB_HASHVERSION) ||
- (dbtype == DB_QUEUE && meta->version != DB_QAMVERSION)) {
+ if ((dbtype == DB_BTREE &&
+ (meta->version > DB_BTREEVERSION ||
+ meta->version < DB_BTREEOLDVER)) ||
+ (dbtype == DB_HASH &&
+ (meta->version > DB_HASHVERSION ||
+ meta->version < DB_HASHOLDVER)) ||
+ (dbtype == DB_QUEUE &&
+ (meta->version > DB_QAMVERSION ||
+ meta->version < DB_QAMOLDVER))) {
isbad = 1;
- EPRINT((dbp->dbenv, "%s%s", "Old of incorrect DB ",
- "version; extraneous errors may result"));
+ EPRINT((dbenv,
+ "Page %lu: unsupported database version %lu; extraneous errors may result",
+ (u_long)pgno, (u_long)meta->version));
}
/* pagesize */
if (meta->pagesize != dbp->pgsize) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Invalid pagesize %lu on page %lu",
- (u_long)meta->pagesize, (u_long)pgno));
+ EPRINT((dbenv, "Page %lu: invalid pagesize %lu",
+ (u_long)pgno, (u_long)meta->pagesize));
}
/* free list */
@@ -1224,9 +1311,9 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
*/
if (pgno != PGNO_BASE_MD && meta->free != PGNO_INVALID) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonempty free list on subdatabase metadata page %lu",
- pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonempty free list on subdatabase metadata page",
+ (u_long)pgno));
}
/* Can correctly be PGNO_INVALID--that's just the end of the list. */
@@ -1234,9 +1321,9 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
pip->free = meta->free;
else if (!IS_VALID_PGNO(meta->free)) {
isbad = 1;
- EPRINT((dbp->dbenv,
- "Nonsensical free list pgno %lu on page %lu",
- (u_long)meta->free, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: nonsensical free list pgno %lu",
+ (u_long)pgno, (u_long)meta->free));
}
/*
@@ -1245,7 +1332,7 @@ __db_vrfy_meta(dbp, vdp, meta, pgno, flags)
*/
F_CLR(pip, VRFY_INCOMPLETE);
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
@@ -1264,51 +1351,56 @@ __db_vrfy_freelist(dbp, vdp, meta, flags)
u_int32_t flags;
{
DB *pgset;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
- db_pgno_t pgno;
+ db_pgno_t cur_pgno, next_pgno;
int p, ret, t_ret;
pgset = vdp->pgset;
DB_ASSERT(pgset != NULL);
+ dbenv = dbp->dbenv;
if ((ret = __db_vrfy_getpageinfo(vdp, meta, &pip)) != 0)
return (ret);
- for (pgno = pip->free; pgno != PGNO_INVALID; pgno = pip->next_pgno) {
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ for (next_pgno = pip->free;
+ next_pgno != PGNO_INVALID; next_pgno = pip->next_pgno) {
+ cur_pgno = pip->pgno;
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
return (ret);
/* This shouldn't happen, but just in case. */
- if (!IS_VALID_PGNO(pgno)) {
- EPRINT((dbp->dbenv,
- "Invalid next_pgno on free list page %lu",
- (u_long)pgno));
+ if (!IS_VALID_PGNO(next_pgno)) {
+ EPRINT((dbenv,
+ "Page %lu: invalid next_pgno %lu on free list page",
+ (u_long)cur_pgno, (u_long)next_pgno));
return (DB_VERIFY_BAD);
}
/* Detect cycles. */
- if ((ret = __db_vrfy_pgset_get(pgset, pgno, &p)) != 0)
+ if ((ret = __db_vrfy_pgset_get(pgset, next_pgno, &p)) != 0)
return (ret);
if (p != 0) {
- EPRINT((dbp->dbenv,
- "Page %lu encountered a second time on free list",
- (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: page %lu encountered a second time on free list",
+ (u_long)cur_pgno, (u_long)next_pgno));
return (DB_VERIFY_BAD);
}
- if ((ret = __db_vrfy_pgset_inc(pgset, pgno)) != 0)
+ if ((ret = __db_vrfy_pgset_inc(pgset, next_pgno)) != 0)
return (ret);
- if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
+ if ((ret = __db_vrfy_getpageinfo(vdp, next_pgno, &pip)) != 0)
return (ret);
if (pip->type != P_INVALID) {
- EPRINT((dbp->dbenv,
- "Non-invalid page %lu on free list", (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: non-invalid page %lu on free list",
+ (u_long)cur_pgno, (u_long)next_pgno));
ret = DB_VERIFY_BAD; /* unsafe to continue */
break;
}
}
- if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
ret = t_ret;
return (ret);
}
@@ -1328,6 +1420,7 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
DB *mdbp;
DBC *dbc;
DBT key, data;
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
db_pgno_t meta_pgno;
int ret, t_ret, isbad;
@@ -1335,19 +1428,22 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
isbad = 0;
dbc = NULL;
+ dbenv = dbp->dbenv;
- if ((ret = __db_master_open(dbp, dbname, DB_RDONLY, 0, &mdbp)) != 0)
+ if ((ret =
+ __db_master_open(dbp, NULL, dbname, DB_RDONLY, 0, &mdbp)) != 0)
return (ret);
- if ((ret =
- __db_icursor(mdbp, NULL, DB_BTREE, PGNO_INVALID, 0, &dbc)) != 0)
+ if ((ret = __db_cursor_int(mdbp,
+ NULL, DB_BTREE, PGNO_INVALID, 0, DB_LOCK_INVALIDID, &dbc)) != 0)
goto err;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- while ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) == 0) {
+ while ((ret = __db_c_get(dbc, &key, &data, DB_NEXT)) == 0) {
if (data.size != sizeof(db_pgno_t)) {
- EPRINT((dbp->dbenv, "Database entry of invalid size"));
+ EPRINT((dbenv,
+ "Subdatabase entry not page-number size"));
isbad = 1;
goto err;
}
@@ -1358,8 +1454,8 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
*/
DB_NTOHL(&meta_pgno);
if (meta_pgno == PGNO_INVALID || meta_pgno > vdp->last_pgno) {
- EPRINT((dbp->dbenv,
- "Database entry references invalid page %lu",
+ EPRINT((dbenv,
+ "Subdatabase entry references invalid page %lu",
(u_long)meta_pgno));
isbad = 1;
goto err;
@@ -1367,7 +1463,7 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
if ((ret = __db_vrfy_getpageinfo(vdp, meta_pgno, &pip)) != 0)
goto err;
type = pip->type;
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
goto err;
switch (type) {
case P_BTREEMETA:
@@ -1390,12 +1486,11 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
break;
case P_QAMMETA:
default:
- EPRINT((dbp->dbenv,
- "Database entry references page %lu of invalid type %lu",
+ EPRINT((dbenv,
+ "Subdatabase entry references page %lu of invalid type %lu",
(u_long)meta_pgno, (u_long)type));
ret = DB_VERIFY_BAD;
goto err;
- /* NOTREACHED */
}
}
@@ -1405,7 +1500,7 @@ __db_vrfy_subdbs(dbp, vdp, dbname, flags)
err: if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret = mdbp->close(mdbp, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_close(mdbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
@@ -1416,9 +1511,9 @@ err: if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
* Provide feedback during top-down database structure traversal.
* (See comment at the beginning of __db_vrfy_structure.)
*
- * PUBLIC: int __db_vrfy_struct_feedback __P((DB *, VRFY_DBINFO *));
+ * PUBLIC: void __db_vrfy_struct_feedback __P((DB *, VRFY_DBINFO *));
*/
-int
+void
__db_vrfy_struct_feedback(dbp, vdp)
DB *dbp;
VRFY_DBINFO *vdp;
@@ -1426,16 +1521,14 @@ __db_vrfy_struct_feedback(dbp, vdp)
int progress;
if (dbp->db_feedback == NULL)
- return (0);
+ return;
if (vdp->pgs_remaining > 0)
vdp->pgs_remaining--;
/* Don't allow a feedback call of 100 until we're really done. */
- progress = 100 - (vdp->pgs_remaining * 50 / (vdp->last_pgno + 1));
+ progress = 100 - (int)(vdp->pgs_remaining * 50 / (vdp->last_pgno + 1));
dbp->db_feedback(dbp, DB_VERIFY, progress == 100 ? 99 : progress);
-
- return (0);
}
/*
@@ -1453,6 +1546,8 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
DB *mdbp, *pgset;
DBC *pgsc;
DBT key, data;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
HASH *h_internal;
HMETA *hmeta;
PAGE *h, *currpg;
@@ -1460,36 +1555,43 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
u_int32_t bucket;
int t_ret, ret;
- currpg = h = NULL;
- pgsc = NULL;
pgset = NULL;
+ pgsc = NULL;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ currpg = h = NULL;
LF_CLR(DB_NOORDERCHK);
/* Open the master database and get the meta_pgno for the subdb. */
- if ((ret = db_create(&mdbp, NULL, 0)) != 0)
- return (ret);
- if ((ret = __db_master_open(dbp, name, DB_RDONLY, 0, &mdbp)) != 0)
+ if ((ret = __db_master_open(dbp, NULL, name, DB_RDONLY, 0, &mdbp)) != 0)
goto err;
memset(&key, 0, sizeof(key));
key.data = (void *)subdb;
+ key.size = (u_int32_t)strlen(subdb);
memset(&data, 0, sizeof(data));
- if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) != 0)
+ if ((ret = __db_get(mdbp, NULL, &key, &data, 0)) != 0)
goto err;
if (data.size != sizeof(db_pgno_t)) {
- EPRINT((dbp->dbenv, "Database entry of invalid size"));
+ EPRINT((dbenv, "Subdatabase entry of invalid size"));
ret = DB_VERIFY_BAD;
goto err;
}
memcpy(&meta_pgno, data.data, data.size);
- if ((ret = memp_fget(dbp->mpf, &meta_pgno, 0, &h)) != 0)
+ /*
+ * Subdatabase meta pgnos are stored in network byte
+ * order for cross-endian compatibility. Swap if appropriate.
+ */
+ DB_NTOHL(&meta_pgno);
+
+ if ((ret = __memp_fget(mpf, &meta_pgno, 0, &h)) != 0)
goto err;
- if ((ret = __db_vrfy_pgset(dbp->dbenv, dbp->pgsize, &pgset)) != 0)
+ if ((ret = __db_vrfy_pgset(dbenv, dbp->pgsize, &pgset)) != 0)
goto err;
switch (TYPE(h)) {
@@ -1503,21 +1605,28 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
if ((ret =
__db_meta2pgset(dbp, vdp, meta_pgno, flags, pgset)) != 0)
goto err;
- if ((ret = pgset->cursor(pgset, NULL, &pgsc, 0)) != 0)
+ if ((ret = __db_cursor_int(pgset, NULL, dbp->type,
+ PGNO_INVALID, 0, DB_LOCK_INVALIDID, &pgsc)) != 0)
goto err;
while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = memp_fget(dbp->mpf, &p, 0, &currpg)) != 0)
+ if ((ret = __memp_fget(mpf, &p, 0, &currpg)) != 0)
goto err;
if ((ret = __bam_vrfy_itemorder(dbp,
NULL, currpg, p, NUM_ENT(currpg), 1,
F_ISSET(&btmeta->dbmeta, BTM_DUP), flags)) != 0)
goto err;
- if ((ret = memp_fput(dbp->mpf, currpg, 0)) != 0)
+ if ((ret = __memp_fput(mpf, currpg, 0)) != 0)
goto err;
currpg = NULL;
}
- if ((ret = pgsc->c_close(pgsc)) != 0)
- goto err;
+
+ /*
+ * The normal exit condition for the loop above is DB_NOTFOUND.
+ * If we see that, zero it and continue on to cleanup.
+ * Otherwise, it's a real error and will be returned.
+ */
+ if (ret == DB_NOTFOUND)
+ ret = 0;
break;
case P_HASHMETA:
hmeta = (HMETA *)h;
@@ -1525,16 +1634,21 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
/*
* Make sure h_charkey is right.
*/
- if (h_internal == NULL || h_internal->h_hash == NULL) {
- EPRINT((dbp->dbenv,
- "DB_ORDERCHKONLY requires that a hash function be set"));
+ if (h_internal == NULL) {
+ EPRINT((dbenv,
+ "Page %lu: DB->h_internal field is NULL",
+ (u_long)meta_pgno));
ret = DB_VERIFY_BAD;
goto err;
}
+ if (h_internal->h_hash == NULL)
+ h_internal->h_hash = hmeta->dbmeta.version < 5
+ ? __ham_func4 : __ham_func5;
if (hmeta->h_charkey !=
h_internal->h_hash(dbp, CHARKEY, sizeof(CHARKEY))) {
- EPRINT((dbp->dbenv,
- "Incorrect hash function for database"));
+ EPRINT((dbenv,
+ "Page %lu: incorrect hash function for database",
+ (u_long)meta_pgno));
ret = DB_VERIFY_BAD;
goto err;
}
@@ -1546,36 +1660,37 @@ __db_vrfy_orderchkonly(dbp, vdp, name, subdb, flags)
for (bucket = 0; bucket <= hmeta->max_bucket; bucket++) {
pgno = BS_TO_PAGE(bucket, hmeta->spares);
while (pgno != PGNO_INVALID) {
- if ((ret = memp_fget(dbp->mpf,
+ if ((ret = __memp_fget(mpf,
&pgno, 0, &currpg)) != 0)
goto err;
if ((ret = __ham_vrfy_hashing(dbp,
- NUM_ENT(currpg),hmeta, bucket, pgno,
+ NUM_ENT(currpg), hmeta, bucket, pgno,
flags, h_internal->h_hash)) != 0)
goto err;
pgno = NEXT_PGNO(currpg);
- if ((ret = memp_fput(dbp->mpf, currpg, 0)) != 0)
+ if ((ret = __memp_fput(mpf, currpg, 0)) != 0)
goto err;
currpg = NULL;
}
}
break;
default:
- EPRINT((dbp->dbenv, "Database meta page %lu of bad type %lu",
+ EPRINT((dbenv, "Page %lu: database metapage of bad type %lu",
(u_long)meta_pgno, (u_long)TYPE(h)));
ret = DB_VERIFY_BAD;
break;
}
-err: if (pgsc != NULL)
- (void)pgsc->c_close(pgsc);
- if (pgset != NULL)
- (void)pgset->close(pgset, 0);
- if (h != NULL && (t_ret = memp_fput(dbp->mpf, h, 0)) != 0)
+err: if (pgsc != NULL && (t_ret = __db_c_close(pgsc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (pgset != NULL &&
+ (t_ret = __db_close(pgset, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
- if (currpg != NULL && (t_ret = memp_fput(dbp->mpf, currpg, 0)) != 0)
+ if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0)
ret = t_ret;
- if ((t_ret = mdbp->close(mdbp, 0)) != 0)
+ if (currpg != NULL && (t_ret = __memp_fput(mpf, currpg, 0)) != 0)
+ ret = t_ret;
+ if ((t_ret = __db_close(mdbp, NULL, 0)) != 0)
ret = t_ret;
return (ret);
}
@@ -1585,8 +1700,8 @@ err: if (pgsc != NULL)
* Walk through a page, salvaging all likely or plausible (w/
* DB_AGGRESSIVE) key/data pairs.
*
- * PUBLIC: int __db_salvage __P((DB *, VRFY_DBINFO *, db_pgno_t, PAGE *,
- * PUBLIC: void *, int (*)(void *, const void *), u_int32_t));
+ * PUBLIC: int __db_salvage __P((DB *, VRFY_DBINFO *, db_pgno_t,
+ * PUBLIC: PAGE *, void *, int (*)(void *, const void *), u_int32_t));
*/
int
__db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
@@ -1598,6 +1713,7 @@ __db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
int (*callback) __P((void *, const void *));
u_int32_t flags;
{
+ int ret;
DB_ASSERT(LF_ISSET(DB_SALVAGE));
/* If we got this page in the subdb pass, we can safely skip it. */
@@ -1605,20 +1721,25 @@ __db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
return (0);
switch (TYPE(h)) {
+ case P_HASHMETA:
+ ret = __ham_vrfy_meta(dbp, vdp, (HMETA *)h, pgno, flags);
+ break;
+ case P_BTREEMETA:
+ ret = __bam_vrfy_meta(dbp, vdp, (BTMETA *)h, pgno, flags);
+ break;
+ case P_QAMMETA:
+ ret = __qam_vrfy_meta(dbp, vdp, (QMETA *)h, pgno, flags);
+ break;
case P_HASH:
return (__ham_salvage(dbp,
vdp, pgno, h, handle, callback, flags));
- /* NOTREACHED */
case P_LBTREE:
return (__bam_salvage(dbp,
vdp, pgno, P_LBTREE, h, handle, callback, NULL, flags));
- /* NOTREACHED */
case P_LDUP:
return (__db_salvage_markneeded(vdp, pgno, SALVAGE_LDUP));
- /* NOTREACHED */
case P_OVERFLOW:
return (__db_salvage_markneeded(vdp, pgno, SALVAGE_OVERFLOW));
- /* NOTREACHED */
case P_LRECNO:
/*
* Recnos are tricky -- they may represent dup pages, or
@@ -1633,16 +1754,21 @@ __db_salvage(dbp, vdp, pgno, h, handle, callback, flags)
* database page, the "unknowns" pass will pick us up.
*/
return (__db_salvage_markneeded(vdp, pgno, SALVAGE_LRECNO));
- /* NOTREACHED */
+ case P_QAMDATA:
+ return (__qam_salvage(dbp,
+ vdp, pgno, h, handle, callback, flags));
case P_IBTREE:
case P_INVALID:
case P_IRECNO:
case __P_DUPLICATE:
default:
/* XXX: Should we be more aggressive here? */
- break;
+ return (0);
}
- return (0);
+
+ return (ret != 0 ? ret :
+ __db_prheader(dbp, NULL, 0, 1,
+ handle, callback, vdp, PGNO_BASE_MD));
}
/*
@@ -1659,24 +1785,29 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
u_int32_t flags;
{
DBT unkdbt, key, *dbt;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t pgno;
u_int32_t pgtype;
int ret, err_ret;
void *ovflbuf;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+
memset(&unkdbt, 0, sizeof(DBT));
- unkdbt.size = strlen("UNKNOWN") + 1;
+ unkdbt.size = (u_int32_t)strlen("UNKNOWN") + 1;
unkdbt.data = "UNKNOWN";
- if ((ret = __os_malloc(dbp->dbenv, dbp->pgsize, 0, &ovflbuf)) != 0)
+ if ((ret = __os_malloc(dbenv, dbp->pgsize, &ovflbuf)) != 0)
return (ret);
err_ret = 0;
while ((ret = __db_salvage_getnext(vdp, &pgno, &pgtype)) == 0) {
dbt = NULL;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0) {
err_ret = ret;
continue;
}
@@ -1699,17 +1830,11 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
* a database with no dups. What to do?
*/
if ((ret = __db_safe_goff(dbp,
- vdp, pgno, &key, &ovflbuf, flags)) != 0) {
- err_ret = ret;
- continue;
- }
- if ((ret = __db_prdbt(&key,
- 0, " ", handle, callback, 0, NULL)) != 0) {
- err_ret = ret;
- continue;
- }
- if ((ret = __db_prdbt(&unkdbt,
- 0, " ", handle, callback, 0, NULL)) != 0)
+ vdp, pgno, &key, &ovflbuf, flags)) != 0 ||
+ (ret = __db_prdbt(&key,
+ 0, " ", handle, callback, 0, vdp)) != 0 ||
+ (ret = __db_prdbt(&unkdbt,
+ 0, " ", handle, callback, 0, vdp)) != 0)
err_ret = ret;
break;
case SALVAGE_HASH:
@@ -1727,11 +1852,11 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
DB_ASSERT(0);
break;
}
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
err_ret = ret;
}
- __os_free(ovflbuf, 0);
+ __os_free(dbenv, ovflbuf);
if (err_ret != 0 && ret == 0)
ret = err_ret;
@@ -1743,8 +1868,8 @@ __db_salvage_unknowns(dbp, vdp, handle, callback, flags)
* Offset of the ith inp array entry, which we can compare to the offset
* the entry stores.
*/
-#define INP_OFFSET(h, i) \
- ((db_indx_t)((u_int8_t *)(h)->inp + (i) - (u_int8_t *)(h)))
+#define INP_OFFSET(dbp, h, i) \
+ ((db_indx_t)((u_int8_t *)((P_INP(dbp,(h))) + (i)) - (u_int8_t *)(h)))
/*
* __db_vrfy_inpitem --
@@ -1770,33 +1895,35 @@ __db_vrfy_inpitem(dbp, h, pgno, i, is_btree, flags, himarkp, offsetp)
u_int32_t flags, *himarkp, *offsetp;
{
BKEYDATA *bk;
- db_indx_t offset, len;
+ DB_ENV *dbenv;
+ db_indx_t *inp, offset, len;
+
+ dbenv = dbp->dbenv;
DB_ASSERT(himarkp != NULL);
+ inp = P_INP(dbp, h);
/*
* Check that the inp array, which grows from the beginning of the
* page forward, has not collided with the data, which grow from the
* end of the page backward.
*/
- if (h->inp + i >= (db_indx_t *)((u_int8_t *)h + *himarkp)) {
+ if (inp + i >= (db_indx_t *)((u_int8_t *)h + *himarkp)) {
/* We've collided with the data. We need to bail. */
- EPRINT((dbp->dbenv,
- "Page %lu entries listing %lu overlaps data",
+ EPRINT((dbenv, "Page %lu: entries listing %lu overlaps data",
(u_long)pgno, (u_long)i));
return (DB_VERIFY_FATAL);
}
- offset = h->inp[i];
+ offset = inp[i];
/*
* Check that the item offset is reasonable: it points somewhere
* after the inp array and before the end of the page.
*/
- if (offset <= INP_OFFSET(h, i) || offset > dbp->pgsize) {
- EPRINT((dbp->dbenv,
- "Bad offset %lu at page %lu index %lu",
- (u_long)offset, (u_long)pgno, (u_long)i));
+ if (offset <= INP_OFFSET(dbp, h, i) || offset > dbp->pgsize) {
+ EPRINT((dbenv, "Page %lu: bad offset %lu at page index %lu",
+ (u_long)pgno, (u_long)offset, (u_long)i));
return (DB_VERIFY_BAD);
}
@@ -1806,9 +1933,20 @@ __db_vrfy_inpitem(dbp, h, pgno, i, is_btree, flags, himarkp, offsetp)
if (is_btree) {
/*
+ * Check alignment; if it's unaligned, it's unsafe to
+ * manipulate this item.
+ */
+ if (offset != ALIGN(offset, sizeof(u_int32_t))) {
+ EPRINT((dbenv,
+ "Page %lu: unaligned offset %lu at page index %lu",
+ (u_long)pgno, (u_long)offset, (u_long)i));
+ return (DB_VERIFY_BAD);
+ }
+
+ /*
* Check that the item length remains on-page.
*/
- bk = GET_BKEYDATA(h, i);
+ bk = GET_BKEYDATA(dbp, h, i);
/*
* We need to verify the type of the item here;
@@ -1826,16 +1964,16 @@ __db_vrfy_inpitem(dbp, h, pgno, i, is_btree, flags, himarkp, offsetp)
len = BOVERFLOW_SIZE;
break;
default:
- EPRINT((dbp->dbenv,
- "Item %lu on page %lu of unrecognizable type",
- i, pgno));
+ EPRINT((dbenv,
+ "Page %lu: item %lu of unrecognizable type",
+ (u_long)pgno, (u_long)i));
return (DB_VERIFY_BAD);
}
if ((size_t)(offset + len) > dbp->pgsize) {
- EPRINT((dbp->dbenv,
- "Item %lu on page %lu extends past page boundary",
- (u_long)i, (u_long)pgno));
+ EPRINT((dbenv,
+ "Page %lu: item %lu extends past page boundary",
+ (u_long)pgno, (u_long)i));
return (DB_VERIFY_BAD);
}
}
@@ -1861,9 +1999,11 @@ __db_vrfy_duptype(dbp, vdp, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
VRFY_PAGEINFO *pip;
int ret, isbad;
+ dbenv = dbp->dbenv;
isbad = 0;
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
@@ -1873,8 +2013,8 @@ __db_vrfy_duptype(dbp, vdp, pgno, flags)
case P_IBTREE:
case P_LDUP:
if (!LF_ISSET(ST_DUPSORT)) {
- EPRINT((dbp->dbenv,
- "Sorted duplicate set at page %lu in unsorted-dup database",
+ EPRINT((dbenv,
+ "Page %lu: sorted duplicate set in unsorted-dup database",
(u_long)pgno));
isbad = 1;
}
@@ -1882,21 +2022,29 @@ __db_vrfy_duptype(dbp, vdp, pgno, flags)
case P_IRECNO:
case P_LRECNO:
if (LF_ISSET(ST_DUPSORT)) {
- EPRINT((dbp->dbenv,
- "Unsorted duplicate set at page %lu in sorted-dup database",
+ EPRINT((dbenv,
+ "Page %lu: unsorted duplicate set in sorted-dup database",
(u_long)pgno));
isbad = 1;
}
break;
default:
- EPRINT((dbp->dbenv,
- "Duplicate page %lu of inappropriate type %lu",
- (u_long)pgno, (u_long)pip->type));
+ /*
+ * If the page is entirely zeroed, its pip->type will be a lie
+ * (we assumed it was a hash page, as they're allowed to be
+ * zeroed); handle this case specially.
+ */
+ if (F_ISSET(pip, VRFY_IS_ALLZEROES))
+ ZEROPG_ERR_PRINT(dbenv, pgno, "duplicate page");
+ else
+ EPRINT((dbenv,
+ "Page %lu: duplicate page of inappropriate type %lu",
+ (u_long)pgno, (u_long)pip->type));
isbad = 1;
break;
}
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+ if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
return (ret);
return (isbad == 1 ? DB_VERIFY_BAD : 0);
}
@@ -1934,14 +2082,17 @@ __db_salvage_duptree(dbp, vdp, pgno, key, handle, callback, flags)
int (*callback) __P((void *, const void *));
u_int32_t flags;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
int ret, t_ret;
+ mpf = dbp->mpf;
+
if (pgno == PGNO_INVALID || !IS_VALID_PGNO(pgno))
return (DB_VERIFY_BAD);
/* We have a plausible page. Try it. */
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
switch (TYPE(h)) {
@@ -1969,10 +2120,9 @@ __db_salvage_duptree(dbp, vdp, pgno, key, handle, callback, flags)
default:
ret = DB_VERIFY_BAD;
goto err;
- /* NOTREACHED */
}
-err: if ((t_ret = memp_fput(dbp->mpf, h, 0)) != 0 && ret == 0)
+err: if ((t_ret = __memp_fput(mpf, h, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
@@ -1994,16 +2144,18 @@ __db_salvage_subdbs(dbp, vdp, handle, callback, flags, hassubsp)
BTMETA *btmeta;
DB *pgset;
DBC *pgsc;
+ DB_MPOOLFILE *mpf;
PAGE *h;
db_pgno_t p, meta_pgno;
int ret, err_ret;
- err_ret = 0;
- pgsc = NULL;
pgset = NULL;
+ pgsc = NULL;
+ mpf = dbp->mpf;
+ err_ret = 0;
meta_pgno = PGNO_BASE_MD;
- if ((ret = memp_fget(dbp->mpf, &meta_pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &meta_pgno, 0, &h)) != 0)
return (ret);
if (TYPE(h) == P_BTREEMETA)
@@ -2028,7 +2180,7 @@ __db_salvage_subdbs(dbp, vdp, handle, callback, flags, hassubsp)
/* We think we've got subdbs. Mark it so. */
*hassubsp = 1;
- if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
return (ret);
/*
@@ -2045,10 +2197,10 @@ __db_salvage_subdbs(dbp, vdp, handle, callback, flags, hassubsp)
__db_meta2pgset(dbp, vdp, PGNO_BASE_MD, flags, pgset)) != 0)
goto err;
- if ((ret = pgset->cursor(pgset, NULL, &pgsc, 0)) != 0)
+ if ((ret = __db_cursor(pgset, NULL, &pgsc, 0)) != 0)
goto err;
while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = memp_fget(dbp->mpf, &p, 0, &h)) != 0) {
+ if ((ret = __memp_fget(mpf, &p, 0, &h)) != 0) {
err_ret = ret;
continue;
}
@@ -2061,25 +2213,23 @@ __db_salvage_subdbs(dbp, vdp, handle, callback, flags, hassubsp)
else if ((ret = __db_salvage_subdbpg(
dbp, vdp, h, handle, callback, flags)) != 0)
err_ret = ret;
-nextpg: if ((ret = memp_fput(dbp->mpf, h, 0)) != 0)
+nextpg: if ((ret = __memp_fput(mpf, h, 0)) != 0)
err_ret = ret;
}
if (ret != DB_NOTFOUND)
goto err;
- if ((ret = pgsc->c_close(pgsc)) != 0)
+ if ((ret = __db_c_close(pgsc)) != 0)
goto err;
- ret = pgset->close(pgset, 0);
+ ret = __db_close(pgset, NULL, 0);
return ((ret == 0 && err_ret != 0) ? err_ret : ret);
- /* NOTREACHED */
-
err: if (pgsc != NULL)
- (void)pgsc->c_close(pgsc);
+ (void)__db_c_close(pgsc);
if (pgset != NULL)
- (void)pgset->close(pgset, 0);
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__db_close(pgset, NULL, 0);
+ (void)__memp_fput(mpf, h, 0);
return (ret);
}
@@ -2087,12 +2237,8 @@ err: if (pgsc != NULL)
* __db_salvage_subdbpg --
* Given a known-good leaf page in the master database, salvage all
* leaf pages corresponding to each subdb.
- *
- * PUBLIC: int __db_salvage_subdbpg
- * PUBLIC: __P((DB *, VRFY_DBINFO *, PAGE *, void *,
- * PUBLIC: int (*)(void *, const void *), u_int32_t));
*/
-int
+static int
__db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
DB *dbp;
VRFY_DBINFO *vdp;
@@ -2106,16 +2252,20 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
DB *pgset;
DBC *pgsc;
DBT key;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
PAGE *subpg;
db_indx_t i;
db_pgno_t meta_pgno, p;
int ret, err_ret, t_ret;
char *subdbname;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
ret = err_ret = 0;
subdbname = NULL;
- if ((ret = __db_vrfy_pgset(dbp->dbenv, dbp->pgsize, &pgset)) != 0)
+ if ((ret = __db_vrfy_pgset(dbenv, dbp->pgsize, &pgset)) != 0)
return (ret);
/*
@@ -2123,8 +2273,8 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
* corresponding to that entry.
*/
for (i = 0; i < NUM_ENT(master); i += P_INDX) {
- bkkey = GET_BKEYDATA(master, i);
- bkdata = GET_BKEYDATA(master, i + O_INDX);
+ bkkey = GET_BKEYDATA(dbp, master, i);
+ bkdata = GET_BKEYDATA(dbp, master, i + O_INDX);
/* Get the subdatabase name. */
if (B_TYPE(bkkey->type) == B_OVERFLOW) {
@@ -2133,20 +2283,20 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
* name so long it overflows. Ick.
*/
bo = (BOVERFLOW *)bkkey;
- if ((ret = __db_safe_goff(dbp, vdp, bo->pgno, &key,
- (void **)&subdbname, flags)) != 0) {
+ if ((ret = __db_safe_goff(dbp, vdp,
+ bo->pgno, &key, &subdbname, flags)) != 0) {
err_ret = DB_VERIFY_BAD;
continue;
}
/* Nul-terminate it. */
- if ((ret = __os_realloc(dbp->dbenv,
- key.size + 1, NULL, &subdbname)) != 0)
+ if ((ret = __os_realloc(dbenv,
+ key.size + 1, &subdbname)) != 0)
goto err;
subdbname[key.size] = '\0';
- } else if (B_TYPE(bkkey->type == B_KEYDATA)) {
- if ((ret = __os_realloc(dbp->dbenv,
- bkkey->len + 1, NULL, &subdbname)) != 0)
+ } else if (B_TYPE(bkkey->type) == B_KEYDATA) {
+ if ((ret = __os_realloc(dbenv,
+ bkkey->len + 1, &subdbname)) != 0)
goto err;
memcpy(subdbname, bkkey->data, bkkey->len);
subdbname[bkkey->len] = '\0';
@@ -2159,9 +2309,15 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
}
memcpy(&meta_pgno, bkdata->data, sizeof(db_pgno_t));
+ /*
+ * Subdatabase meta pgnos are stored in network byte
+ * order for cross-endian compatibility. Swap if appropriate.
+ */
+ DB_NTOHL(&meta_pgno);
+
/* If we can't get the subdb meta page, just skip the subdb. */
if (!IS_VALID_PGNO(meta_pgno) ||
- (ret = memp_fget(dbp->mpf, &meta_pgno, 0, &subpg)) != 0) {
+ (ret = __memp_fget(mpf, &meta_pgno, 0, &subpg)) != 0) {
err_ret = ret;
continue;
}
@@ -2177,7 +2333,7 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
if ((ret =
__db_vrfy_common(dbp, vdp, subpg, meta_pgno, flags)) != 0) {
err_ret = ret;
- (void)memp_fput(dbp->mpf, subpg, 0);
+ (void)__memp_fput(mpf, subpg, 0);
continue;
}
switch (TYPE(subpg)) {
@@ -2185,7 +2341,7 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
if ((ret = __bam_vrfy_meta(dbp,
vdp, (BTMETA *)subpg, meta_pgno, flags)) != 0) {
err_ret = ret;
- (void)memp_fput(dbp->mpf, subpg, 0);
+ (void)__memp_fput(mpf, subpg, 0);
continue;
}
break;
@@ -2193,7 +2349,7 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
if ((ret = __ham_vrfy_meta(dbp,
vdp, (HMETA *)subpg, meta_pgno, flags)) != 0) {
err_ret = ret;
- (void)memp_fput(dbp->mpf, subpg, 0);
+ (void)__memp_fput(mpf, subpg, 0);
continue;
}
break;
@@ -2201,10 +2357,9 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
/* This isn't an appropriate page; skip this subdb. */
err_ret = DB_VERIFY_BAD;
continue;
- /* NOTREACHED */
}
- if ((ret = memp_fput(dbp->mpf, subpg, 0)) != 0) {
+ if ((ret = __memp_fput(mpf, subpg, 0)) != 0) {
err_ret = ret;
continue;
}
@@ -2220,32 +2375,32 @@ __db_salvage_subdbpg(dbp, vdp, master, handle, callback, flags)
continue;
}
- if ((ret = pgset->cursor(pgset, NULL, &pgsc, 0)) != 0)
+ if ((ret = __db_cursor(pgset, NULL, &pgsc, 0)) != 0)
goto err;
while ((ret = __db_vrfy_pgset_next(pgsc, &p)) == 0) {
- if ((ret = memp_fget(dbp->mpf, &p, 0, &subpg)) != 0) {
+ if ((ret = __memp_fget(mpf, &p, 0, &subpg)) != 0) {
err_ret = ret;
continue;
}
if ((ret = __db_salvage(dbp, vdp, p, subpg,
handle, callback, flags)) != 0)
err_ret = ret;
- if ((ret = memp_fput(dbp->mpf, subpg, 0)) != 0)
+ if ((ret = __memp_fput(mpf, subpg, 0)) != 0)
err_ret = ret;
}
if (ret != DB_NOTFOUND)
goto err;
- if ((ret = pgsc->c_close(pgsc)) != 0)
+ if ((ret = __db_c_close(pgsc)) != 0)
goto err;
if ((ret = __db_prfooter(handle, callback)) != 0)
goto err;
}
err: if (subdbname)
- __os_free(subdbname, 0);
+ __os_free(dbenv, subdbname);
- if ((t_ret = pgset->close(pgset, 0)) != 0)
+ if ((t_ret = __db_close(pgset, NULL, 0)) != 0)
ret = t_ret;
if ((t_ret = __db_salvage_markdone(vdp, PGNO(master))) != 0)
@@ -2268,10 +2423,13 @@ __db_meta2pgset(dbp, vdp, pgno, flags, pgset)
u_int32_t flags;
DB *pgset;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
int ret, t_ret;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ mpf = dbp->mpf;
+
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
switch (TYPE(h)) {
@@ -2286,7 +2444,7 @@ __db_meta2pgset(dbp, vdp, pgno, flags, pgset)
break;
}
- if ((t_ret = memp_fput(dbp->mpf, h, 0)) != 0)
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0)
return (t_ret);
return (ret);
}
@@ -2296,7 +2454,7 @@ __db_meta2pgset(dbp, vdp, pgno, flags, pgset)
* Try to guess what the pagesize is if the one on the meta page
* and the one in the db are invalid.
*/
-static int
+static u_int
__db_guesspgsize(dbenv, fhp)
DB_ENV *dbenv;
DB_FH *fhp;
@@ -2305,7 +2463,6 @@ __db_guesspgsize(dbenv, fhp)
size_t nr;
u_int32_t guess;
u_int8_t type;
- int ret;
for (guess = DB_MAX_PGSIZE; guess >= DB_MIN_PGSIZE; guess >>= 1) {
/*
@@ -2321,11 +2478,11 @@ __db_guesspgsize(dbenv, fhp)
* our previous guess; that last one was probably the page size.
*/
for (i = 1; i <= 3; i++) {
- if ((ret = __os_seek(dbenv, fhp, guess,
- i, SSZ(DBMETA, type), 0, DB_OS_SEEK_SET)) != 0)
+ if (__os_seek(dbenv, fhp, guess,
+ i, SSZ(DBMETA, type), 0, DB_OS_SEEK_SET) != 0)
break;
- if ((ret = __os_read(dbenv,
- fhp, &type, 1, &nr)) != 0 || nr == 0)
+ if (__os_read(dbenv,
+ fhp, &type, 1, &nr) != 0 || nr == 0)
break;
if (type == P_INVALID || type >= P_PAGETYPE_MAX)
return (guess << 1);
diff --git a/db/db/db_vrfy_stub.c b/db/db/db_vrfy_stub.c
new file mode 100644
index 000000000..d3206a9d2
--- /dev/null
+++ b/db/db/db_vrfy_stub.c
@@ -0,0 +1,102 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: db_vrfy_stub.c,v 11.4 2003/07/01 19:47:12 bostic Exp $";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/db_verify.h"
+
+/*
+ * If the library wasn't compiled with the verification support, various
+ * routines aren't available. Stub them here, returning an appropriate
+ * error.
+ */
+
+static int __db_novrfy __P((DB_ENV *));
+
+/*
+ * __db_novrfy --
+ * Error when a Berkeley DB build doesn't include the access method.
+ */
+static int
+__db_novrfy(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv,
+ "library build did not include support for database verification");
+ return (DB_OPNOTSUP);
+}
+
+int
+__db_verify_pp(dbp, file, database, outfile, flags)
+ DB *dbp;
+ const char *file, *database;
+ FILE *outfile;
+ u_int32_t flags;
+{
+ int ret;
+
+ COMPQUIET(file, NULL);
+ COMPQUIET(database, NULL);
+ COMPQUIET(outfile, NULL);
+ COMPQUIET(flags, 0);
+
+ ret = __db_novrfy(dbp->dbenv);
+
+ /* The verify method is a destructor. */
+ (void)__db_close(dbp, NULL, 0);
+
+ return (ret);
+}
+
+int
+__db_verify_internal(dbp, name, subdb, handle, callback, flags)
+ DB *dbp;
+ const char *name, *subdb;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ COMPQUIET(dbp, NULL);
+ COMPQUIET(name, NULL);
+ COMPQUIET(subdb, NULL);
+ COMPQUIET(handle, NULL);
+ COMPQUIET(callback, NULL);
+ COMPQUIET(flags, 0);
+ return (0);
+}
+
+int
+__db_vrfy_getpageinfo(vdp, pgno, pipp)
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ VRFY_PAGEINFO **pipp;
+{
+ COMPQUIET(pgno, 0);
+ COMPQUIET(pipp, NULL);
+ return (__db_novrfy(vdp->pgdbp->dbenv));
+}
+
+int
+__db_vrfy_putpageinfo(dbenv, vdp, pip)
+ DB_ENV *dbenv;
+ VRFY_DBINFO *vdp;
+ VRFY_PAGEINFO *pip;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(pip, NULL);
+ return (__db_novrfy(dbenv));
+}
diff --git a/db/db/db_vrfyutil.c b/db/db/db_vrfyutil.c
index 89dccdcc7..5e5485f06 100644
--- a/db/db/db_vrfyutil.c
+++ b/db/db/db_vrfyutil.c
@@ -1,16 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: db_vrfyutil.c,v 11.11 2000/11/28 21:36:04 bostic Exp $
+ * $Id: db_vrfyutil.c,v 11.37 2003/06/30 17:19:49 bostic Exp $
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_vrfyutil.c,v 11.11 2000/11/28 21:36:04 bostic Exp $";
+static const char revid[] = "$Id: db_vrfyutil.c,v 11.37 2003/06/30 17:19:49 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,11 +20,12 @@ static const char revid[] = "$Id: db_vrfyutil.c,v 11.11 2000/11/28 21:36:04 bost
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_verify.h"
-#include "db_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_verify.h"
+#include "dbinc/db_am.h"
-static int __db_vrfy_pgset_iinc __P((DB *, db_pgno_t, int));
+static int __db_vrfy_childinc __P((DBC *, VRFY_CHILDINFO *));
+static int __db_vrfy_pageinfo_create __P((DB_ENV *, VRFY_PAGEINFO **));
/*
* __db_vrfy_dbinfo_create --
@@ -34,7 +35,7 @@ static int __db_vrfy_pgset_iinc __P((DB *, db_pgno_t, int));
* PUBLIC: __P((DB_ENV *, u_int32_t, VRFY_DBINFO **));
*/
int
-__db_vrfy_dbinfo_create (dbenv, pgsize, vdpp)
+__db_vrfy_dbinfo_create(dbenv, pgsize, vdpp)
DB_ENV *dbenv;
u_int32_t pgsize;
VRFY_DBINFO **vdpp;
@@ -46,31 +47,30 @@ __db_vrfy_dbinfo_create (dbenv, pgsize, vdpp)
vdp = NULL;
cdbp = pgdbp = pgset = NULL;
- if ((ret = __os_calloc(NULL,
- 1, sizeof(VRFY_DBINFO), (void **)&vdp)) != 0)
+ if ((ret = __os_calloc(NULL, 1, sizeof(VRFY_DBINFO), &vdp)) != 0)
goto err;
if ((ret = db_create(&cdbp, dbenv, 0)) != 0)
goto err;
- if ((ret = cdbp->set_flags(cdbp, DB_DUP | DB_DUPSORT)) != 0)
+ if ((ret = __db_set_flags(cdbp, DB_DUP)) != 0)
goto err;
- if ((ret = cdbp->set_pagesize(cdbp, pgsize)) != 0)
+ if ((ret = __db_set_pagesize(cdbp, pgsize)) != 0)
goto err;
- if ((ret =
- cdbp->open(cdbp, NULL, NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
+ if ((ret = __db_open(cdbp,
+ NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) != 0)
goto err;
if ((ret = db_create(&pgdbp, dbenv, 0)) != 0)
goto err;
- if ((ret = pgdbp->set_pagesize(pgdbp, pgsize)) != 0)
+ if ((ret = __db_set_pagesize(pgdbp, pgsize)) != 0)
goto err;
- if ((ret =
- pgdbp->open(pgdbp, NULL, NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
+ if ((ret = __db_open(pgdbp,
+ NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) != 0)
goto err;
if ((ret = __db_vrfy_pgset(dbenv, pgsize, &pgset)) != 0)
@@ -86,11 +86,11 @@ __db_vrfy_dbinfo_create (dbenv, pgsize, vdpp)
return (0);
err: if (cdbp != NULL)
- (void)cdbp->close(cdbp, 0);
+ (void)__db_close(cdbp, NULL, 0);
if (pgdbp != NULL)
- (void)pgdbp->close(pgdbp, 0);
+ (void)__db_close(pgdbp, NULL, 0);
if (vdp != NULL)
- __os_free(vdp, sizeof(VRFY_DBINFO));
+ __os_free(dbenv, vdp);
return (ret);
}
@@ -99,10 +99,11 @@ err: if (cdbp != NULL)
* Destructor for VRFY_DBINFO. Destroys VRFY_PAGEINFOs and deallocates
* structure.
*
- * PUBLIC: int __db_vrfy_dbinfo_destroy __P((VRFY_DBINFO *));
+ * PUBLIC: int __db_vrfy_dbinfo_destroy __P((DB_ENV *, VRFY_DBINFO *));
*/
int
-__db_vrfy_dbinfo_destroy(vdp)
+__db_vrfy_dbinfo_destroy(dbenv, vdp)
+ DB_ENV *dbenv;
VRFY_DBINFO *vdp;
{
VRFY_CHILDINFO *c, *d;
@@ -112,21 +113,23 @@ __db_vrfy_dbinfo_destroy(vdp)
for (c = LIST_FIRST(&vdp->subdbs); c != NULL; c = d) {
d = LIST_NEXT(c, links);
- __os_free(c, 0);
+ __os_free(NULL, c);
}
- if ((t_ret = vdp->pgdbp->close(vdp->pgdbp, 0)) != 0)
+ if ((t_ret = __db_close(vdp->pgdbp, NULL, 0)) != 0)
ret = t_ret;
- if ((t_ret = vdp->cdbp->close(vdp->cdbp, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_close(vdp->cdbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret = vdp->pgset->close(vdp->pgset, 0)) != 0 && ret == 0)
+ if ((t_ret = __db_close(vdp->pgset, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
DB_ASSERT(LIST_FIRST(&vdp->activepips) == NULL);
- __os_free(vdp, sizeof(VRFY_DBINFO));
+ if (vdp->extents != NULL)
+ __os_free(dbenv, vdp->extents);
+ __os_free(dbenv, vdp);
return (ret);
}
@@ -181,9 +184,9 @@ __db_vrfy_getpageinfo(vdp, pgno, pipp)
key.data = &pgno;
key.size = sizeof(db_pgno_t);
- if ((ret = pgdbp->get(pgdbp, NULL, &key, &data, 0)) == 0) {
+ if ((ret = __db_get(pgdbp, NULL, &key, &data, 0)) == 0) {
/* Found it. */
- DB_ASSERT(data.size = sizeof(VRFY_PAGEINFO));
+ DB_ASSERT(data.size == sizeof(VRFY_PAGEINFO));
pip = data.data;
DB_ASSERT(pip->pi_refcount == 0);
LIST_INSERT_HEAD(&vdp->activepips, pip, links);
@@ -192,7 +195,7 @@ __db_vrfy_getpageinfo(vdp, pgno, pipp)
return (ret);
/* Case 3 */
- if ((ret = __db_vrfy_pageinfo_create(&pip)) != 0)
+ if ((ret = __db_vrfy_pageinfo_create(pgdbp->dbenv, &pip)) != 0)
return (ret);
LIST_INSERT_HEAD(&vdp->activepips, pip, links);
@@ -208,10 +211,12 @@ found: pip->pi_refcount++;
* __db_vrfy_putpageinfo --
* Put back a VRFY_PAGEINFO that we're done with.
*
- * PUBLIC: int __db_vrfy_putpageinfo __P((VRFY_DBINFO *, VRFY_PAGEINFO *));
+ * PUBLIC: int __db_vrfy_putpageinfo __P((DB_ENV *,
+ * PUBLIC: VRFY_DBINFO *, VRFY_PAGEINFO *));
*/
int
-__db_vrfy_putpageinfo(vdp, pip)
+__db_vrfy_putpageinfo(dbenv, vdp, pip)
+ DB_ENV *dbenv;
VRFY_DBINFO *vdp;
VRFY_PAGEINFO *pip;
{
@@ -237,7 +242,7 @@ __db_vrfy_putpageinfo(vdp, pip)
data.data = pip;
data.size = sizeof(VRFY_PAGEINFO);
- if ((ret = pgdbp->put(pgdbp, NULL, &key, &data, 0)) != 0)
+ if ((ret = __db_put(pgdbp, NULL, &key, &data, 0)) != 0)
return (ret);
for (p = LIST_FIRST(&vdp->activepips); p != NULL;
@@ -255,7 +260,7 @@ __db_vrfy_putpageinfo(vdp, pip)
#endif
DB_ASSERT(pip->pi_refcount == 0);
- __os_free(pip, 0);
+ __os_ufree(dbenv, pip);
return (0);
}
@@ -278,12 +283,13 @@ __db_vrfy_pgset(dbenv, pgsize, dbpp)
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return (ret);
- if ((ret = dbp->set_pagesize(dbp, pgsize)) != 0)
+ if ((ret = __db_set_pagesize(dbp, pgsize)) != 0)
goto err;
- if ((ret = dbp->open(dbp, NULL, NULL, DB_BTREE, DB_CREATE, 0600)) == 0)
+ if ((ret = __db_open(dbp,
+ NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0600, PGNO_BASE_MD)) == 0)
*dbpp = dbp;
else
-err: (void)dbp->close(dbp, 0);
+err: (void)__db_close(dbp, NULL, 0);
return (ret);
}
@@ -313,8 +319,8 @@ __db_vrfy_pgset_get(dbp, pgno, valp)
data.ulen = sizeof(int);
F_SET(&data, DB_DBT_USERMEM);
- if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0) {
- DB_ASSERT(data.size = sizeof(int));
+ if ((ret = __db_get(dbp, NULL, &key, &data, 0)) == 0) {
+ DB_ASSERT(data.size == sizeof(int));
memcpy(&val, data.data, sizeof(int));
} else if (ret == DB_NOTFOUND)
val = 0;
@@ -336,36 +342,6 @@ __db_vrfy_pgset_inc(dbp, pgno)
DB *dbp;
db_pgno_t pgno;
{
-
- return (__db_vrfy_pgset_iinc(dbp, pgno, 1));
-}
-
-/*
- * __db_vrfy_pgset_dec --
- * Increment the value associated with a pgno by 1.
- *
- * PUBLIC: int __db_vrfy_pgset_dec __P((DB *, db_pgno_t));
- */
-int
-__db_vrfy_pgset_dec(dbp, pgno)
- DB *dbp;
- db_pgno_t pgno;
-{
-
- return (__db_vrfy_pgset_iinc(dbp, pgno, -1));
-}
-
-/*
- * __db_vrfy_pgset_iinc --
- * Increment the value associated with a pgno by i.
- *
- */
-static int
-__db_vrfy_pgset_iinc(dbp, pgno, i)
- DB *dbp;
- db_pgno_t pgno;
- int i;
-{
DBT key, data;
int ret;
int val;
@@ -381,16 +357,16 @@ __db_vrfy_pgset_iinc(dbp, pgno, i)
data.ulen = sizeof(int);
F_SET(&data, DB_DBT_USERMEM);
- if ((ret = dbp->get(dbp, NULL, &key, &data, 0)) == 0) {
- DB_ASSERT(data.size = sizeof(int));
+ if ((ret = __db_get(dbp, NULL, &key, &data, 0)) == 0) {
+ DB_ASSERT(data.size == sizeof(int));
memcpy(&val, data.data, sizeof(int));
} else if (ret != DB_NOTFOUND)
return (ret);
data.size = sizeof(int);
- val += i;
+ ++val;
- return (dbp->put(dbp, NULL, &key, &data, 0));
+ return (__db_put(dbp, NULL, &key, &data, 0));
}
/*
@@ -417,7 +393,7 @@ __db_vrfy_pgset_next(dbc, pgnop)
key.data = &pgno;
key.ulen = sizeof(db_pgno_t);
- if ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) != 0)
+ if ((ret = __db_c_get(dbc, &key, &data, DB_NEXT)) != 0)
return (ret);
DB_ASSERT(key.size == sizeof(db_pgno_t));
@@ -444,7 +420,7 @@ __db_vrfy_childcursor(vdp, dbcp)
cdbp = vdp->cdbp;
- if ((ret = cdbp->cursor(cdbp, NULL, &dbc, 0)) == 0)
+ if ((ret = __db_cursor(cdbp, NULL, &dbc, 0)) == 0)
*dbcp = dbc;
return (ret);
@@ -463,8 +439,10 @@ __db_vrfy_childput(vdp, pgno, cip)
db_pgno_t pgno;
VRFY_CHILDINFO *cip;
{
- DBT key, data;
DB *cdbp;
+ DBC *cc;
+ DBT key, data;
+ VRFY_CHILDINFO *oldcip;
int ret;
cdbp = vdp->cdbp;
@@ -474,17 +452,70 @@ __db_vrfy_childput(vdp, pgno, cip)
key.data = &pgno;
key.size = sizeof(db_pgno_t);
+ /*
+ * We want to avoid adding multiple entries for a single child page;
+ * we only need to verify each child once, even if a child (such
+ * as an overflow key) is multiply referenced.
+ *
+ * However, we also need to make sure that when walking the list
+ * of children, we encounter them in the order they're referenced
+ * on a page. (This permits us, for example, to verify the
+ * prev_pgno/next_pgno chain of Btree leaf pages.)
+ *
+ * Check the child database to make sure that this page isn't
+ * already a child of the specified page number. If it's not,
+ * put it at the end of the duplicate set.
+ */
+ if ((ret = __db_vrfy_childcursor(vdp, &cc)) != 0)
+ return (ret);
+ for (ret = __db_vrfy_ccset(cc, pgno, &oldcip); ret == 0;
+ ret = __db_vrfy_ccnext(cc, &oldcip))
+ if (oldcip->pgno == cip->pgno) {
+ /*
+ * Found a matching child. Increment its reference
+ * count--we've run into it again--but don't put it
+ * again.
+ */
+ if ((ret = __db_vrfy_childinc(cc, oldcip)) != 0 ||
+ (ret = __db_vrfy_ccclose(cc)) != 0)
+ return (ret);
+ return (0);
+ }
+ if (ret != DB_NOTFOUND) {
+ (void)__db_vrfy_ccclose(cc);
+ return (ret);
+ }
+ if ((ret = __db_vrfy_ccclose(cc)) != 0)
+ return (ret);
+
+ cip->refcnt = 1;
data.data = cip;
data.size = sizeof(VRFY_CHILDINFO);
- /*
- * Don't add duplicate (data) entries for a given child, and accept
- * DB_KEYEXIST as a successful return; we only need to verify
- * each child once, even if a child (such as an overflow key) is
- * multiply referenced.
- */
- ret = cdbp->put(cdbp, NULL, &key, &data, DB_NODUPDATA);
- return (ret == DB_KEYEXIST ? 0 : ret);
+ return (__db_put(cdbp, NULL, &key, &data, 0));
+}
+
+/*
+ * __db_vrfy_childinc --
+ * Increment the refcount of the VRFY_CHILDINFO struct that the child
+ * cursor is pointing to. (The caller has just retrieved this struct, and
+ * passes it in as cip to save us a get.)
+ */
+static int
+__db_vrfy_childinc(dbc, cip)
+ DBC *dbc;
+ VRFY_CHILDINFO *cip;
+{
+ DBT key, data;
+
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+
+ cip->refcnt++;
+ data.data = cip;
+ data.size = sizeof(VRFY_CHILDINFO);
+
+ return (__db_c_put(dbc, &key, &data, DB_CURRENT));
}
/*
@@ -509,7 +540,7 @@ __db_vrfy_ccset(dbc, pgno, cipp)
key.data = &pgno;
key.size = sizeof(db_pgno_t);
- if ((ret = dbc->c_get(dbc, &key, &data, DB_SET)) != 0)
+ if ((ret = __db_c_get(dbc, &key, &data, DB_SET)) != 0)
return (ret);
DB_ASSERT(data.size == sizeof(VRFY_CHILDINFO));
@@ -537,7 +568,7 @@ __db_vrfy_ccnext(dbc, cipp)
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
- if ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT_DUP)) != 0)
+ if ((ret = __db_c_get(dbc, &key, &data, DB_NEXT_DUP)) != 0)
return (ret);
DB_ASSERT(data.size == sizeof(VRFY_CHILDINFO));
@@ -562,25 +593,31 @@ __db_vrfy_ccclose(dbc)
DBC *dbc;
{
- return (dbc->c_close(dbc));
+ return (__db_c_close(dbc));
}
/*
* __db_vrfy_pageinfo_create --
* Constructor for VRFY_PAGEINFO; allocates and initializes.
- *
- * PUBLIC: int __db_vrfy_pageinfo_create __P((VRFY_PAGEINFO **));
*/
-int
-__db_vrfy_pageinfo_create(pgipp)
+static int
+__db_vrfy_pageinfo_create(dbenv, pgipp)
+ DB_ENV *dbenv;
VRFY_PAGEINFO **pgipp;
{
VRFY_PAGEINFO *pgip;
int ret;
- if ((ret = __os_calloc(NULL,
- 1, sizeof(VRFY_PAGEINFO), (void **)&pgip)) != 0)
+ /*
+ * pageinfo structs are sometimes allocated here and sometimes
+ * allocated by fetching them from a database with DB_DBT_MALLOC.
+ * There's no easy way for the destructor to tell which was
+ * used, and so we always allocate with __os_umalloc so we can free
+ * with __os_ufree.
+ */
+ if ((ret = __os_umalloc(dbenv, sizeof(VRFY_PAGEINFO), &pgip)) != 0)
return (ret);
+ memset(pgip, 0, sizeof(VRFY_PAGEINFO));
DB_ASSERT(pgip->pi_refcount == 0);
@@ -604,16 +641,17 @@ __db_salvage_init(vdp)
if ((ret = db_create(&dbp, NULL, 0)) != 0)
return (ret);
- if ((ret = dbp->set_pagesize(dbp, 1024)) != 0)
+ if ((ret = __db_set_pagesize(dbp, 1024)) != 0)
goto err;
- if ((ret = dbp->open(dbp, NULL, NULL, DB_BTREE, DB_CREATE, 0)) != 0)
+ if ((ret = __db_open(dbp,
+ NULL, NULL, NULL, DB_BTREE, DB_CREATE, 0, PGNO_BASE_MD)) != 0)
goto err;
vdp->salvage_pages = dbp;
return (0);
-err: (void)dbp->close(dbp, 0);
+err: (void)__db_close(dbp, NULL, 0);
return (ret);
}
@@ -626,7 +664,7 @@ void
__db_salvage_destroy(vdp)
VRFY_DBINFO *vdp;
{
- (void)vdp->salvage_pages->close(vdp->salvage_pages, 0);
+ (void)__db_close(vdp->salvage_pages, NULL, 0);
}
/*
@@ -655,14 +693,14 @@ __db_salvage_getnext(vdp, pgnop, pgtypep)
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
return (ret);
- while ((ret = dbc->c_get(dbc, &key, &data, DB_NEXT)) == 0) {
+ while ((ret = __db_c_get(dbc, &key, &data, DB_NEXT)) == 0) {
DB_ASSERT(data.size == sizeof(u_int32_t));
memcpy(&pgtype, data.data, sizeof(pgtype));
- if ((ret = dbc->c_del(dbc, 0)) != 0)
+ if ((ret = __db_c_del(dbc, 0)) != 0)
goto err;
if (pgtype != SALVAGE_IGNORE)
goto found;
@@ -678,7 +716,7 @@ found: DB_ASSERT(key.size == sizeof(db_pgno_t));
*pgtypep = *(u_int32_t *)data.data;
}
-err: (void)dbc->c_close(dbc);
+err: (void)__db_c_close(dbc);
return (ret);
}
@@ -721,7 +759,7 @@ __db_salvage_isdone(vdp, pgno)
* If it's there and is marked anything else, that's fine--we
* want to mark it done.
*/
- ret = dbp->get(dbp, NULL, &key, &data, 0);
+ ret = __db_get(dbp, NULL, &key, &data, 0);
if (ret == 0) {
/*
* The key's already here. Check and see if it's already
@@ -788,7 +826,7 @@ __db_salvage_markdone(vdp, pgno)
data.size = sizeof(u_int32_t);
data.data = &pgtype;
- return (dbp->put(dbp, NULL, &key, &data, 0));
+ return (__db_put(dbp, NULL, &key, &data, 0));
}
/*
@@ -825,6 +863,6 @@ __db_salvage_markneeded(vdp, pgno, pgtype)
* unless it's already there, in which case it's presumably
* already been marked done.
*/
- ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
+ ret = __db_put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
return (ret == DB_KEYEXIST ? 0 : ret);
}
diff --git a/db/db185/db185.c b/db/db185/db185.c
index 843275424..d1c35501f 100644
--- a/db/db185/db185.c
+++ b/db/db185/db185.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db185.c,v 11.15 2001/01/23 21:27:03 bostic Exp $";
+ "$Id: db185.c,v 11.33 2003/05/05 19:54:58 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -19,7 +19,6 @@ static const char revid[] =
#include <fcntl.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -32,12 +31,20 @@ static int db185_fd __P((const DB185 *));
static int db185_get __P((const DB185 *, const DBT185 *, DBT185 *, u_int));
static u_int32_t
db185_hash __P((DB *, const void *, u_int32_t));
-static void db185_openstderr __P((DB_FH *));
static size_t db185_prefix __P((DB *, const DBT *, const DBT *));
static int db185_put __P((const DB185 *, DBT185 *, const DBT185 *, u_int));
static int db185_seq __P((const DB185 *, DBT185 *, DBT185 *, u_int));
static int db185_sync __P((const DB185 *, u_int));
+/*
+ * EXTERN: #ifdef _DB185_INT_H_
+ * EXTERN: DB185 *__db185_open
+ * EXTERN: __P((const char *, int, int, DBTYPE, const void *));
+ * EXTERN: #else
+ * EXTERN: DB *__db185_open
+ * EXTERN: __P((const char *, int, int, DBTYPE, const void *));
+ * EXTERN: #endif
+ */
DB185 *
__db185_open(file, oflags, mode, type, openinfo)
const char *file;
@@ -50,8 +57,7 @@ __db185_open(file, oflags, mode, type, openinfo)
const RECNOINFO *ri;
DB *dbp;
DB185 *db185p;
- DB_FH fh;
- size_t nw;
+ DB_FH *fhp;
int ret;
dbp = NULL;
@@ -152,8 +158,8 @@ __db185_open(file, oflags, mode, type, openinfo)
if (file != NULL) {
if (oflags & O_CREAT && __os_exists(file, NULL) != 0)
if (__os_openhandle(NULL, file,
- oflags, mode, &fh) == 0)
- (void)__os_closehandle(&fh);
+ oflags, mode, &fhp) == 0)
+ (void)__os_closehandle(NULL, fhp);
(void)dbp->set_re_source(dbp, file);
if (O_RDONLY)
@@ -167,11 +173,10 @@ __db185_open(file, oflags, mode, type, openinfo)
* !!!
* We can't support the bfname field.
*/
-#define BFMSG "DB: DB 1.85's recno bfname field is not supported.\n"
+#define BFMSG \
+ "Berkeley DB: DB 1.85's recno bfname field is not supported.\n"
if (ri->bfname != NULL) {
- db185_openstderr(&fh);
- (void)__os_write(NULL, &fh,
- BFMSG, sizeof(BFMSG) - 1, &nw);
+ dbp->errx(dbp, "%s", BFMSG);
goto einval;
}
@@ -220,15 +225,12 @@ __db185_open(file, oflags, mode, type, openinfo)
* to the underlying DB structure, and vice-versa. This has to be
* done BEFORE the DB::open method call because the hash callback
* is exercised as part of hash database initialiation.
- *
- * XXX
- * Overload the cj_internal field for this purpose.
*/
db185p->dbp = dbp;
- dbp->cj_internal = db185p;
+ dbp->api_internal = db185p;
/* Open the database. */
- if ((ret = dbp->open(dbp,
+ if ((ret = dbp->open(dbp, NULL,
file, NULL, type, __db_oflags(oflags), mode)) != 0)
goto err;
@@ -241,7 +243,7 @@ __db185_open(file, oflags, mode, type, openinfo)
einval: ret = EINVAL;
err: if (db185p != NULL)
- __os_free(db185p, sizeof(DB185));
+ __os_free(NULL, db185p);
if (dbp != NULL)
(void)dbp->close(dbp, 0);
@@ -260,7 +262,7 @@ db185_close(db185p)
ret = dbp->close(dbp, 0);
- __os_free(db185p, sizeof(DB185));
+ __os_free(NULL, db185p);
if (ret == 0)
return (0);
@@ -299,11 +301,11 @@ db185_del(db185p, key185, flags)
return (1);
}
+ if (0) {
+einval: ret = EINVAL;
+ }
__os_set_errno(ret);
return (-1);
-
-einval: __os_set_errno(EINVAL);
- return (-1);
}
static int
@@ -354,11 +356,11 @@ db185_get(db185p, key185, data185, flags)
return (1);
}
+ if (0) {
+einval: ret = EINVAL;
+ }
__os_set_errno(ret);
return (-1);
-
-einval: __os_set_errno(EINVAL);
- return (-1);
}
static int
@@ -371,7 +373,7 @@ db185_put(db185p, key185, data185, flags)
DB *dbp;
DBC *dbcp_put;
DBT key, data;
- int ret;
+ int ret, t_ret;
dbp = db185p->dbp;
@@ -394,23 +396,18 @@ db185_put(db185p, key185, data185, flags)
if (dbp->type != DB_RECNO)
goto einval;
- if ((ret = dbp->cursor(dbp, NULL, &dbcp_put, 0)) != 0) {
- __os_set_errno(ret);
- return (-1);
- }
+ if ((ret = dbp->cursor(dbp, NULL, &dbcp_put, 0)) != 0)
+ break;
if ((ret =
- dbcp_put->c_get(dbcp_put, &key, &data, DB_SET)) != 0) {
- (void)dbcp_put->c_close(dbcp_put);
- __os_set_errno(ret);
- return (-1);
+ dbcp_put->c_get(dbcp_put, &key, &data, DB_SET)) == 0) {
+ memset(&data, 0, sizeof(data));
+ data.data = data185->data;
+ data.size = data185->size;
+ ret = dbcp_put->c_put(dbcp_put, &key, &data,
+ flags == R_IAFTER ? DB_AFTER : DB_BEFORE);
}
- memset(&data, 0, sizeof(data));
- data.data = data185->data;
- data.size = data185->size;
- ret = dbcp_put->c_put(dbcp_put,
- &key, &data, flags == R_IAFTER ? DB_AFTER : DB_BEFORE);
- (void)dbcp_put->c_close(dbcp_put);
- __os_set_errno(ret);
+ if ((t_ret = dbcp_put->c_close(dbcp_put)) != 0 && ret == 0)
+ ret = t_ret;
break;
case R_NOOVERWRITE:
ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
@@ -436,10 +433,11 @@ db185_put(db185p, key185, data185, flags)
case DB_KEYEXIST:
return (1);
}
- __os_set_errno(ret);
- return (-1);
-einval: __os_set_errno(EINVAL);
+ if (0) {
+einval: ret = EINVAL;
+ }
+ __os_set_errno(ret);
return (-1);
}
@@ -496,11 +494,11 @@ db185_seq(db185p, key185, data185, flags)
return (1);
}
+ if (0) {
+einval: ret = EINVAL;
+ }
__os_set_errno(ret);
return (-1);
-
-einval: __os_set_errno(EINVAL);
- return (-1);
}
static int
@@ -509,8 +507,6 @@ db185_sync(db185p, flags)
u_int flags;
{
DB *dbp;
- DB_FH fh;
- size_t nw;
int ret;
dbp = db185p->dbp;
@@ -523,10 +519,10 @@ db185_sync(db185p, flags)
* !!!
* We can't support the R_RECNOSYNC flag.
*/
-#define RSMSG "DB: DB 1.85's R_RECNOSYNC sync flag is not supported.\n"
- db185_openstderr(&fh);
- (void)__os_write(NULL, &fh, RSMSG, sizeof(RSMSG) - 1, &nw);
- goto einval;
+#define RSMSG \
+ "Berkeley DB: DB 1.85's R_RECNOSYNC sync flag is not supported.\n"
+ dbp->errx(dbp, "%s", RSMSG);
+ /* FALLTHROUGH */
default:
goto einval;
}
@@ -534,25 +530,11 @@ db185_sync(db185p, flags)
if ((ret = dbp->sync(dbp, 0)) == 0)
return (0);
+ if (0) {
+einval: ret = EINVAL;
+ }
__os_set_errno(ret);
return (-1);
-
-einval: __os_set_errno(EINVAL);
- return (-1);
-}
-
-static void
-db185_openstderr(fhp)
- DB_FH *fhp;
-{
- /* Dummy up the results of an __os_openhandle() on stderr. */
- memset(fhp, 0, sizeof(*fhp));
- F_SET(fhp, DB_FH_VALID);
-
-#ifndef STDERR_FILENO
-#define STDERR_FILENO 2
-#endif
- fhp->fd = STDERR_FILENO;
}
/*
@@ -564,7 +546,7 @@ db185_compare(dbp, a, b)
DB *dbp;
const DBT *a, *b;
{
- return (((DB185 *)dbp->cj_internal)->compare(a, b));
+ return (((DB185 *)dbp->api_internal)->compare(a, b));
}
/*
@@ -576,7 +558,7 @@ db185_prefix(dbp, a, b)
DB *dbp;
const DBT *a, *b;
{
- return (((DB185 *)dbp->cj_internal)->prefix(a, b));
+ return (((DB185 *)dbp->api_internal)->prefix(a, b));
}
/*
@@ -589,5 +571,5 @@ db185_hash(dbp, key, len)
const void *key;
u_int32_t len;
{
- return (((DB185 *)dbp->cj_internal)->hash(key, (size_t)len));
+ return (((DB185 *)dbp->api_internal)->hash(key, (size_t)len));
}
diff --git a/db/db185/db185_int.in b/db/db185/db185_int.in
index 5c7c5fd7a..04faeaeca 100644
--- a/db/db185/db185_int.in
+++ b/db/db185/db185_int.in
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2001
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,11 +36,11 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: db185_int.in,v 11.9 2001/04/10 20:43:54 bostic Exp
+ * $Id: db185_int.in,v 11.13 2003/01/08 04:15:06 bostic Exp $
*/
-#ifndef _DB_185_H_
-#define _DB_185_H_
+#ifndef _DB185_INT_H_
+#define _DB185_INT_H_
/* Routine flags. */
#define R_CURSOR 1 /* del, put, seq */
@@ -126,4 +126,4 @@ typedef struct {
u_char bval; /* delimiting byte (variable-length records */
char *bfname; /* btree file name */
} RECNOINFO;
-
+#endif /* !_DB185_INT_H_ */
diff --git a/db/db_archive/db_archive.c b/db/db_archive/db_archive.c
index 7c91e42f3..cfed47b91 100644
--- a/db/db_archive/db_archive.c
+++ b/db/db_archive/db_archive.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,29 +9,25 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_archive.c,v 11.18 2001/01/18 18:36:56 bostic Exp $";
+ "$Id: db_archive.c,v 11.42 2003/08/13 19:57:04 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#endif
#include "db_int.h"
-#include "common_ext.h"
-
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
-DB_ENV *dbenv;
-const char
- *progname = "db_archive"; /* Program name. */
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -40,44 +36,61 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ const char *progname = "db_archive";
+ DB_ENV *dbenv;
u_int32_t flags;
- int ch, e_close, exitval, ret, verbose;
- char **file, *home, **list;
+ int ch, exitval, ret, verbose;
+ char **file, *home, **list, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
+ dbenv = NULL;
flags = 0;
- e_close = exitval = verbose = 0;
- home = NULL;
- while ((ch = getopt(argc, argv, "ah:lsVv")) != EOF)
+ exitval = verbose = 0;
+ home = passwd = NULL;
+ file = list = NULL;
+ while ((ch = getopt(argc, argv, "adh:lP:sVv")) != EOF)
switch (ch) {
case 'a':
LF_SET(DB_ARCH_ABS);
break;
+ case 'd':
+ LF_SET(DB_ARCH_REMOVE);
+ break;
case 'h':
home = optarg;
break;
case 'l':
LF_SET(DB_ARCH_LOG);
break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ break;
case 's':
LF_SET(DB_ARCH_DATA);
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -91,7 +104,6 @@ main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -99,6 +111,11 @@ main(argc, argv)
if (verbose)
(void)dbenv->set_verbose(dbenv, DB_VERB_CHKPOINT, 1);
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ goto shutdown;
+ }
/*
* If attaching to a pre-existing environment fails, create a
* private one and try again.
@@ -112,8 +129,8 @@ main(argc, argv)
}
/* Get the list of names. */
- if ((ret = log_archive(dbenv, &list, flags, NULL)) != 0) {
- dbenv->err(dbenv, ret, "log_archive");
+ if ((ret = dbenv->log_archive(dbenv, &list, flags)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
goto shutdown;
}
@@ -121,44 +138,49 @@ main(argc, argv)
if (list != NULL) {
for (file = list; *file != NULL; ++file)
printf("%s\n", *file);
- __os_free(list, 0);
+ free(list);
}
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- (void)fprintf(stderr, "usage: db_archive [-alsVv] [-h home]\n");
- exit (1);
+ (void)fprintf(stderr,
+ "usage: db_archive [-adlsVv] [-h home] [-P password]\n");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_checkpoint/db_checkpoint.c b/db/db_checkpoint/db_checkpoint.c
index c7d16e023..c100605ee 100644
--- a/db/db_checkpoint/db_checkpoint.c
+++ b/db/db_checkpoint/db_checkpoint.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_checkpoint.c,v 11.25 2001/01/18 18:36:57 bostic Exp $";
+ "$Id: db_checkpoint.c,v 11.51 2003/09/04 18:57:00 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -31,25 +31,17 @@ static const char revid[] =
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "common_ext.h"
-#include "clib_ext.h"
-
-char *check __P((DB_ENV *, long, long));
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
-DB_ENV *dbenv;
-const char
- *progname = "db_checkpoint"; /* Program name. */
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -58,13 +50,16 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ DB_ENV *dbenv;
+ const char *progname = "db_checkpoint";
time_t now;
long argval;
u_int32_t flags, kbytes, minutes, seconds;
- int ch, e_close, exitval, once, ret, verbose;
- char *home, *logfile;
+ int ch, exitval, once, ret, verbose;
+ char *home, *logfile, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
/*
* !!!
@@ -73,11 +68,12 @@ main(argc, argv)
*/
#define MAX_UINT32_T 2147483647
+ dbenv = NULL;
kbytes = minutes = 0;
- e_close = exitval = once = verbose = 0;
+ exitval = once = verbose = 0;
flags = 0;
- home = logfile = NULL;
- while ((ch = getopt(argc, argv, "1h:k:L:p:Vv")) != EOF)
+ home = logfile = passwd = NULL;
+ while ((ch = getopt(argc, argv, "1h:k:L:P:p:Vv")) != EOF)
switch (ch) {
case '1':
once = 1;
@@ -87,40 +83,50 @@ main(argc, argv)
home = optarg;
break;
case 'k':
- (void)__db_getlong(NULL, progname,
- optarg, 1, (long)MAX_UINT32_T, &argval);
+ if (__db_getlong(NULL, progname,
+ optarg, 1, (long)MAX_UINT32_T, &argval))
+ return (EXIT_FAILURE);
kbytes = argval;
break;
case 'L':
logfile = optarg;
break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ break;
case 'p':
- (void)__db_getlong(NULL, progname,
- optarg, 1, (long)MAX_UINT32_T, &argval);
+ if (__db_getlong(NULL, progname,
+ optarg, 1, (long)MAX_UINT32_T, &argval))
+ return (EXIT_FAILURE);
minutes = argval;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
case '?':
default:
- usage();
- goto shutdown;
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
- usage();
+ return (usage());
if (once == 0 && kbytes == 0 && minutes == 0) {
(void)fprintf(stderr,
"%s: at least one of -1, -k and -p must be specified\n",
progname);
- exit (1);
+ return (EXIT_FAILURE);
}
/* Handle possible interruptions. */
@@ -139,11 +145,15 @@ main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ goto shutdown;
+ }
/* Initialize the environment. */
if ((ret = dbenv->open(dbenv,
home, DB_JOINENV | DB_USE_ENVIRON, 0)) != 0) {
@@ -152,10 +162,10 @@ main(argc, argv)
}
/* Register the standard pgin/pgout functions, in case we do I/O. */
- if ((ret =
- memp_register(dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) {
+ if ((ret = dbenv->memp_register(
+ dbenv, DB_FTYPE_SET, __db_pgin, __db_pgout)) != 0) {
dbenv->err(dbenv, ret,
- "failed to register access method functions");
+ "DB_ENV->memp_register: failed to register access method functions");
goto shutdown;
}
@@ -171,15 +181,8 @@ main(argc, argv)
dbenv->errx(dbenv, "checkpoint: %s", ctime(&now));
}
- ret = txn_checkpoint(dbenv, kbytes, minutes, flags);
- while (ret == DB_INCOMPLETE) {
- if (verbose)
- dbenv->errx(dbenv,
- "checkpoint did not finish, retrying\n");
- (void)__os_sleep(dbenv, 2, 0);
- ret = txn_checkpoint(dbenv, 0, 0, flags);
- }
- if (ret != 0) {
+ if ((ret = dbenv->txn_checkpoint(dbenv,
+ kbytes, minutes, flags)) != 0) {
dbenv->err(dbenv, ret, "txn_checkpoint");
goto shutdown;
}
@@ -199,39 +202,44 @@ shutdown: exitval = 1;
remove(logfile);
/* Clean up the environment. */
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- (void)fprintf(stderr,
- "usage: db_checkpoint [-1Vv] [-h home] [-k kbytes] [-L file] [-p min]\n");
- exit(1);
+ (void)fprintf(stderr, "%s\n\t%s\n",
+ "usage: db_checkpoint [-1Vv]",
+ "[-h home] [-k kbytes] [-L file] [-P password] [-p min]");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_deadlock/db_deadlock.c b/db/db_deadlock/db_deadlock.c
index ac151db12..8a6f7b7c2 100644
--- a/db/db_deadlock/db_deadlock.c
+++ b/db/db_deadlock/db_deadlock.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_deadlock.c,v 11.19 2001/01/18 18:36:57 bostic Exp $";
+ "$Id: db_deadlock.c,v 11.41 2003/06/17 14:36:44 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -31,19 +31,15 @@ static const char revid[] =
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#endif
#include "db_int.h"
-#include "clib_ext.h"
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
-
-DB_ENV *dbenv;
-const char
- *progname = "db_deadlock"; /* Program name. */
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -52,36 +48,50 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ const char *progname = "db_deadlock";
+ DB_ENV *dbenv;
u_int32_t atype;
time_t now;
- long usecs;
- u_int32_t flags;
- int ch, e_close, exitval, ret, verbose;
- char *home, *logfile;
+ u_long secs, usecs;
+ int ch, exitval, ret, verbose;
+ char *home, *logfile, *str;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
+ dbenv = NULL;
atype = DB_LOCK_DEFAULT;
home = logfile = NULL;
- usecs = 0;
- flags = 0;
- e_close = exitval = verbose = 0;
+ secs = usecs = 0;
+ exitval = verbose = 0;
while ((ch = getopt(argc, argv, "a:h:L:t:Vvw")) != EOF)
switch (ch) {
case 'a':
switch (optarg[0]) {
+ case 'e':
+ atype = DB_LOCK_EXPIRE;
+ break;
+ case 'm':
+ atype = DB_LOCK_MAXLOCKS;
+ break;
+ case 'n':
+ atype = DB_LOCK_MINLOCKS;
+ break;
case 'o':
atype = DB_LOCK_OLDEST;
break;
+ case 'w':
+ atype = DB_LOCK_MINWRITE;
+ break;
case 'y':
atype = DB_LOCK_YOUNGEST;
break;
default:
- usage();
+ return (usage());
/* NOTREACHED */
}
if (optarg[1] != '\0')
- usage();
+ return (usage());
break;
case 'h':
home = optarg;
@@ -90,42 +100,40 @@ main(argc, argv)
logfile = optarg;
break;
case 't':
- (void)__db_getlong(NULL,
- progname, optarg, 1, LONG_MAX, &usecs);
- usecs *= 1000000;
+ if ((str = strchr(optarg, '.')) != NULL) {
+ *str++ = '\0';
+ if (*str != '\0' && __db_getulong(
+ NULL, progname, str, 0, LONG_MAX, &usecs))
+ return (EXIT_FAILURE);
+ }
+ if (*optarg != '\0' && __db_getulong(
+ NULL, progname, optarg, 0, LONG_MAX, &secs))
+ return (EXIT_FAILURE);
+ if (secs == 0 && usecs == 0)
+ return (usage());
+
break;
+
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
- case 'w':
- LF_SET(DB_LOCK_CONFLICT);
+ case 'w': /* Undocumented. */
+ /* Detect every 100ms (100000 us) when polling. */
+ secs = 0;
+ usecs = 100000;
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
- usage();
-
- if (usecs == 0 && !LF_ISSET(DB_LOCK_CONFLICT)) {
- fprintf(stderr,
- "%s: at least one of -t and -w must be specified\n",
- progname);
- exit(1);
- }
-
- /*
- * We detect every 100ms (100000 us) when we're running in
- * DB_LOCK_CONFLICT mode.
- */
- if (usecs == 0)
- usecs = 100000;
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -143,7 +151,6 @@ main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -166,13 +173,15 @@ main(argc, argv)
dbenv->errx(dbenv, "running at %.24s", ctime(&now));
}
- if ((ret = lock_detect(dbenv, flags, atype, NULL)) != 0) {
- dbenv->err(dbenv, ret, "lock_detect");
+ if ((ret = dbenv->lock_detect(dbenv, 0, atype, NULL)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->lock_detect");
goto shutdown;
}
- /* Make a pass every "usecs" usecs. */
- (void)__os_sleep(dbenv, 0, usecs);
+ /* Make a pass every "secs" secs and "usecs" usecs. */
+ if (secs == 0 && usecs == 0)
+ break;
+ (void)__os_sleep(dbenv, secs, usecs);
}
if (0) {
@@ -181,10 +190,10 @@ shutdown: exitval = 1;
/* Clean up the logfile. */
if (logfile != NULL)
- remove(logfile);
+ (void)remove(logfile);
/* Clean up the environment. */
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
@@ -193,30 +202,32 @@ shutdown: exitval = 1;
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- (void)fprintf(stderr,
- "usage: db_deadlock [-Vvw] [-a o | y] [-h home] [-L file] [-t sec]\n");
- exit(1);
+ (void)fprintf(stderr, "%s\n\t%s\n",
+ "usage: db_deadlock [-Vv]",
+ "[-a e | m | n | o | w | y] [-h home] [-L file] [-t sec.usec]");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_dump/db_dump.c b/db/db_dump/db_dump.c
index ba24dd6cc..858eb0239 100644
--- a/db/db_dump/db_dump.c
+++ b/db/db_dump/db_dump.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_dump.c,v 11.41 2001/01/18 18:36:57 bostic Exp $";
+ "$Id: db_dump.c,v 11.88 2003/08/13 19:57:06 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -24,25 +24,17 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "lock.h"
-
-void configure __P((char *));
-int db_init __P((char *));
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+
+int db_init __P((DB_ENV *, char *, int, u_int32_t, int *));
int dump __P((DB *, int, int));
-int dump_sub __P((DB *, char *, int, int));
+int dump_sub __P((DB_ENV *, DB *, char *, int, int));
int is_sub __P((DB *, int *));
int main __P((int, char *[]));
int show_subs __P((DB *));
-void usage __P((void));
-void version_check __P((void));
-
-DB_ENV *dbenv;
-const char
- *progname = "db_dump"; /* Program name. */
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -51,19 +43,26 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ const char *progname = "db_dump";
+ DB_ENV *dbenv;
DB *dbp;
- int ch, d_close;
- int e_close, exitval;
- int lflag, nflag, pflag, ret, rflag, Rflag, subs, keyflag;
- char *dopt, *home, *subname;
+ u_int32_t cache;
+ int ch;
+ int exitval, keyflag, lflag, nflag, pflag, private;
+ int ret, Rflag, rflag, resize, subs;
+ char *dopt, *home, *passwd, *subname;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
+ dbenv = NULL;
dbp = NULL;
- d_close = e_close = exitval = lflag = nflag = pflag = rflag = Rflag = 0;
+ exitval = lflag = nflag = pflag = rflag = Rflag = 0;
keyflag = 0;
- dopt = home = subname = NULL;
- while ((ch = getopt(argc, argv, "d:f:h:klNprRs:V")) != EOF)
+ cache = MEGABYTE;
+ private = 0;
+ dopt = home = passwd = subname = NULL;
+ while ((ch = getopt(argc, argv, "d:f:h:klNpP:rRs:V")) != EOF)
switch (ch) {
case 'd':
dopt = optarg;
@@ -72,7 +71,7 @@ main(argc, argv)
if (freopen(optarg, "w", stdout) == NULL) {
fprintf(stderr, "%s: %s: reopen: %s\n",
progname, optarg, strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
break;
case 'h':
@@ -86,11 +85,14 @@ main(argc, argv)
break;
case 'N':
nflag = 1;
- if ((ret = db_env_set_panicstate(0)) != 0) {
- fprintf(stderr,
- "%s: db_env_set_panicstate: %s\n",
- progname, db_strerror(ret));
- return (1);
+ break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
case 'p':
@@ -108,42 +110,42 @@ main(argc, argv)
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 1)
- usage();
+ return (usage());
if (dopt != NULL && pflag) {
fprintf(stderr,
"%s: the -d and -p options may not both be specified\n",
progname);
- exit (1);
+ return (EXIT_FAILURE);
}
if (lflag && subname != NULL) {
fprintf(stderr,
"%s: the -l and -s options may not both be specified\n",
progname);
- exit (1);
+ return (EXIT_FAILURE);
}
if (keyflag && rflag) {
fprintf(stderr, "%s: %s",
"the -k and -r or -R options may not both be specified\n",
progname);
- exit(1);
+ return (EXIT_FAILURE);
}
if (subname != NULL && rflag) {
fprintf(stderr, "%s: %s",
"the -s and -r or R options may not both be specified\n",
progname);
- exit(1);
+ return (EXIT_FAILURE);
}
/* Handle possible interruptions. */
@@ -153,23 +155,32 @@ main(argc, argv)
* Create an environment object and initialize it for error
* reporting.
*/
- if ((ret = db_env_create(&dbenv, 0)) != 0) {
+retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto err;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
-
- if (nflag && (ret = dbenv->set_mutexlocks(dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "set_mutexlocks");
+ if (nflag) {
+ if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
+ goto err;
+ }
+ if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
+ goto err;
+ }
+ }
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
goto err;
}
/* Initialize the environment. */
- if (db_init(home) != 0)
+ if (db_init(dbenv, home, rflag, cache, &private) != 0)
goto err;
/* Create the DB object and open the file. */
@@ -177,25 +188,40 @@ main(argc, argv)
dbenv->err(dbenv, ret, "db_create");
goto err;
}
- d_close = 1;
/*
* If we're salvaging, don't do an open; it might not be safe.
* Dispatch now into the salvager.
*/
if (rflag) {
- if ((ret = dbp->verify(dbp, argv[0], NULL, stdout,
- DB_SALVAGE | (Rflag ? DB_AGGRESSIVE : 0))) != 0)
+ /* The verify method is a destructor. */
+ ret = dbp->verify(dbp, argv[0], NULL, stdout,
+ DB_SALVAGE |
+ (Rflag ? DB_AGGRESSIVE : 0) |
+ (pflag ? DB_PRINTABLE : 0));
+ dbp = NULL;
+ if (ret != 0)
goto err;
- exitval = 0;
goto done;
}
- if ((ret = dbp->open(dbp,
+ if ((ret = dbp->open(dbp, NULL,
argv[0], subname, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
dbp->err(dbp, ret, "open: %s", argv[0]);
goto err;
}
+ if (private != 0) {
+ if ((ret = __db_util_cache(dbenv, dbp, &cache, &resize)) != 0)
+ goto err;
+ if (resize) {
+ (void)dbp->close(dbp, 0);
+ dbp = NULL;
+
+ (void)dbenv->close(dbenv, 0);
+ dbenv = NULL;
+ goto retry;
+ }
+ }
if (dopt != NULL) {
if (__db_dump(dbp, dopt, NULL)) {
@@ -217,11 +243,11 @@ main(argc, argv)
if (subname == NULL && is_sub(dbp, &subs))
goto err;
if (subs) {
- if (dump_sub(dbp, argv[0], pflag, keyflag))
+ if (dump_sub(dbenv, dbp, argv[0], pflag, keyflag))
goto err;
} else
if (__db_prheader(dbp, NULL, pflag, keyflag, stdout,
- __db_verify_callback, NULL, 0) ||
+ __db_pr_callback, NULL, 0) ||
dump(dbp, pflag, keyflag))
goto err;
}
@@ -229,20 +255,23 @@ main(argc, argv)
if (0) {
err: exitval = 1;
}
-done: if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
+done: if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
exitval = 1;
- dbp->err(dbp, ret, "close");
+ dbenv->err(dbenv, ret, "close");
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
/*
@@ -250,24 +279,36 @@ done: if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
* Initialize the environment.
*/
int
-db_init(home)
+db_init(dbenv, home, is_salvage, cache, is_privatep)
+ DB_ENV *dbenv;
char *home;
+ int is_salvage;
+ u_int32_t cache;
+ int *is_privatep;
{
int ret;
/*
- * Try and use the underlying environment when opening a database. We
- * wish to use the buffer pool so our information is as up-to-date as
- * possible, even if the mpool cache hasn't been flushed; we wish to
- * use the locking system, if present, so that we are safe to use with
- * transactions. (We don't need to use transactions explicitly, as
- * we're read-only.)
+ * Try and use the underlying environment when opening a database.
+ * We wish to use the buffer pool so our information is as up-to-date
+ * as possible, even if the mpool cache hasn't been flushed.
*
- * Note that in CDB, too, this will configure our environment
+ * If we are not doing a salvage, we wish to use the DB_JOINENV flag;
+ * if a locking system is present, this will let us use it and be
+ * safe to run concurrently with other threads of control. (We never
+ * need to use transactions explicitly, as we're read-only.) Note
+ * that in CDB, too, this will configure our environment
* appropriately, and our cursors will (correctly) do locking as CDB
* read cursors.
+ *
+ * If we are doing a salvage, the verification code will protest
+ * if we initialize transactions, logging, or locking; do an
+ * explicit DB_INIT_MPOOL to try to join any existing environment
+ * before we create our own.
*/
- if (dbenv->open(dbenv, home, DB_JOINENV | DB_USE_ENVIRON, 0) == 0)
+ *is_privatep = 0;
+ if (dbenv->open(dbenv, home,
+ DB_USE_ENVIRON | (is_salvage ? DB_INIT_MPOOL : DB_JOINENV), 0) == 0)
return (0);
/*
@@ -280,7 +321,9 @@ db_init(home)
* an mpool region exists). Create one, but make it private so that
* no files are actually created.
*/
- if ((ret = dbenv->open(dbenv, home,
+ *is_privatep = 1;
+ if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) == 0 &&
+ (ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0)) == 0)
return (0);
@@ -305,21 +348,24 @@ is_sub(dbp, yesno)
switch (dbp->type) {
case DB_BTREE:
case DB_RECNO:
- if ((ret = dbp->stat(dbp, &btsp, NULL, 0)) != 0) {
+ if ((ret = dbp->stat(dbp, &btsp, DB_FAST_STAT)) != 0) {
dbp->err(dbp, ret, "DB->stat");
return (ret);
}
*yesno = btsp->bt_metaflags & BTM_SUBDB ? 1 : 0;
+ free(btsp);
break;
case DB_HASH:
- if ((ret = dbp->stat(dbp, &hsp, NULL, 0)) != 0) {
+ if ((ret = dbp->stat(dbp, &hsp, DB_FAST_STAT)) != 0) {
dbp->err(dbp, ret, "DB->stat");
return (ret);
}
*yesno = hsp->hash_metaflags & DB_HASH_SUBDB ? 1 : 0;
+ free(hsp);
break;
case DB_QUEUE:
break;
+ case DB_UNKNOWN:
default:
dbp->errx(dbp, "unknown database type");
return (1);
@@ -332,7 +378,8 @@ is_sub(dbp, yesno)
* Dump out the records for a DB containing subdatabases.
*/
int
-dump_sub(parent_dbp, parent_name, pflag, keyflag)
+dump_sub(dbenv, parent_dbp, parent_name, pflag, keyflag)
+ DB_ENV *dbenv;
DB *parent_dbp;
char *parent_name;
int pflag, keyflag;
@@ -369,13 +416,13 @@ dump_sub(parent_dbp, parent_name, pflag, keyflag)
free(subdb);
return (1);
}
- if ((ret = dbp->open(dbp,
+ if ((ret = dbp->open(dbp, NULL,
parent_name, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0)
dbp->err(dbp, ret,
"DB->open: %s:%s", parent_name, subdb);
if (ret == 0 &&
(__db_prheader(dbp, subdb, pflag, keyflag, stdout,
- __db_verify_callback, NULL, 0) ||
+ __db_pr_callback, NULL, 0) ||
dump(dbp, pflag, keyflag)))
ret = 1;
(void)dbp->close(dbp, 0);
@@ -384,12 +431,12 @@ dump_sub(parent_dbp, parent_name, pflag, keyflag)
return (1);
}
if (ret != DB_NOTFOUND) {
- dbp->err(dbp, ret, "DBcursor->get");
+ parent_dbp->err(parent_dbp, ret, "DBcursor->get");
return (1);
}
if ((ret = dbcp->c_close(dbcp)) != 0) {
- dbp->err(dbp, ret, "DBcursor->close");
+ parent_dbp->err(parent_dbp, ret, "DBcursor->close");
return (1);
}
@@ -421,7 +468,7 @@ show_subs(dbp)
memset(&data, 0, sizeof(data));
while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) {
if ((ret = __db_prdbt(&key, 1, NULL, stdout,
- __db_verify_callback, 0, NULL)) != 0) {
+ __db_pr_callback, 0, NULL)) != 0) {
dbp->errx(dbp, NULL);
return (1);
}
@@ -449,7 +496,10 @@ dump(dbp, pflag, keyflag)
{
DBC *dbcp;
DBT key, data;
- int ret, is_recno;
+ DBT keyret, dataret;
+ db_recno_t recno;
+ int is_recno, failed, ret;
+ void *pointer;
/*
* Get a cursor and step through the database, printing out each
@@ -460,58 +510,107 @@ dump(dbp, pflag, keyflag)
return (1);
}
+ failed = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
+ data.data = malloc(1024 * 1024);
+ if (data.data == NULL) {
+ dbp->err(dbp, ENOMEM, "bulk get buffer");
+ failed = 1;
+ goto err;
+ }
+ data.ulen = 1024 * 1024;
+ data.flags = DB_DBT_USERMEM;
is_recno = (dbp->type == DB_RECNO || dbp->type == DB_QUEUE);
keyflag = is_recno ? keyflag : 1;
- while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)
- if ((keyflag && (ret = __db_prdbt(&key,
- pflag, " ", stdout, __db_verify_callback,
- is_recno, NULL)) != 0) || (ret =
- __db_prdbt(&data, pflag, " ", stdout,
- __db_verify_callback, 0, NULL)) != 0) {
- dbp->errx(dbp, NULL);
- return (1);
+ if (is_recno) {
+ keyret.data = &recno;
+ keyret.size = sizeof(recno);
+ }
+
+retry:
+ while ((ret =
+ dbcp->c_get(dbcp, &key, &data, DB_NEXT | DB_MULTIPLE_KEY)) == 0) {
+ DB_MULTIPLE_INIT(pointer, &data);
+ for (;;) {
+ if (is_recno)
+ DB_MULTIPLE_RECNO_NEXT(pointer, &data,
+ recno, dataret.data, dataret.size);
+ else
+ DB_MULTIPLE_KEY_NEXT(pointer,
+ &data, keyret.data,
+ keyret.size, dataret.data, dataret.size);
+
+ if (dataret.data == NULL)
+ break;
+
+ if ((keyflag && (ret = __db_prdbt(&keyret,
+ pflag, " ", stdout, __db_pr_callback,
+ is_recno, NULL)) != 0) || (ret =
+ __db_prdbt(&dataret, pflag, " ", stdout,
+ __db_pr_callback, 0, NULL)) != 0) {
+ dbp->errx(dbp, NULL);
+ failed = 1;
+ goto err;
+ }
+ }
+ }
+ if (ret == ENOMEM) {
+ data.size = ALIGN(data.size, 1024);
+ data.data = realloc(data.data, data.size);
+ if (data.data == NULL) {
+ dbp->err(dbp, ENOMEM, "bulk get buffer");
+ failed = 1;
+ goto err;
}
+ data.ulen = data.size;
+ goto retry;
+ }
+
if (ret != DB_NOTFOUND) {
dbp->err(dbp, ret, "DBcursor->get");
- return (1);
+ failed = 1;
}
+err: if (data.data != NULL)
+ free(data.data);
+
if ((ret = dbcp->c_close(dbcp)) != 0) {
dbp->err(dbp, ret, "DBcursor->close");
- return (1);
+ failed = 1;
}
- (void)__db_prfooter(stdout, __db_verify_callback);
- return (0);
+ (void)__db_prfooter(stdout, __db_pr_callback);
+ return (failed);
}
/*
* usage --
* Display the usage message.
*/
-void
+int
usage()
{
- (void)fprintf(stderr, "usage: %s\n",
-"db_dump [-klNprRV] [-d ahr] [-f output] [-h home] [-s database] db_file");
- exit(1);
+ (void)fprintf(stderr, "%s\n\t%s\n",
+ "usage: db_dump [-klNprRV]",
+ "[-d ahr] [-f output] [-h home] [-P password] [-s database] db_file");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_dump185/db_dump185.c b/db/db_dump185/db_dump185.c
index 4b57fffd2..3a0b46e05 100644
--- a/db/db_dump185/db_dump185.c
+++ b/db/db_dump185/db_dump185.c
@@ -1,15 +1,15 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#ifndef lint
static char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static char revid[] =
- "$Id: db_dump185.c,v 11.8 2001/01/10 17:26:21 bostic Exp $";
+ "$Id: db_dump185.c,v 11.18 2003/01/08 04:19:32 bostic Exp $";
#endif
#include <sys/types.h>
@@ -65,9 +65,11 @@ typedef struct hashhdr186 { /* Disk resident portion */
int32_t h_charkey; /* value of hash(CHARKEY) */
#define NCACHED 32 /* number of bit maps and spare points */
int32_t spares[NCACHED];/* spare pages for overflow */
- u_int16_t bitmaps[NCACHED]; /* address of overflow page bitmaps */
+ /* address of overflow page bitmaps */
+ u_int16_t bitmaps[NCACHED];
} HASHHDR186;
typedef struct htab186 { /* Memory resident data structure */
+ void *unused[2];
HASHHDR186 hdr; /* Header */
} HTAB186;
@@ -171,7 +173,7 @@ void db_hash __P((DB *, int));
void dbt_dump __P((DBT *));
void dbt_print __P((DBT *));
int main __P((int, char *[]));
-void usage __P((void));
+int usage __P((void));
int
main(argc, argv)
@@ -191,7 +193,7 @@ main(argc, argv)
if (freopen(optarg, "w", stdout) == NULL) {
fprintf(stderr, "db_dump185: %s: %s\n",
optarg, strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
break;
case 'p':
@@ -199,20 +201,20 @@ main(argc, argv)
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 1)
- usage();
+ return (usage());
if ((dbp = dbopen(argv[0], O_RDONLY, 0, DB_BTREE, NULL)) == NULL) {
if ((dbp =
dbopen(argv[0], O_RDONLY, 0, DB_HASH, NULL)) == NULL) {
fprintf(stderr,
"db_dump185: %s: %s\n", argv[0], strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
db_hash(dbp, pflag);
} else
@@ -236,9 +238,9 @@ main(argc, argv)
if (rval == -1) {
fprintf(stderr, "db_dump185: seq: %s\n", strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
- return (0);
+ return (EXIT_SUCCESS);
}
/*
@@ -345,9 +347,9 @@ dbt_print(dbtp)
* usage --
* Display the usage message.
*/
-void
+int
usage()
{
(void)fprintf(stderr, "usage: db_dump185 [-p] [-f file] db_file\n");
- exit(1);
+ return (EXIT_FAILURE);
}
diff --git a/db/db_load/db_load.c b/db/db_load/db_load.c
index 33e2eb5e0..0635bca46 100644
--- a/db/db_load/db_load.c
+++ b/db/db_load/db_load.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_load.c,v 11.33 2001/01/22 17:25:07 krinsky Exp $";
+ "$Id: db_load.c,v 11.88 2003/10/16 17:51:08 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -25,33 +25,46 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "clib_ext.h"
-
-void badend __P((void));
-void badnum __P((void));
-int configure __P((DB *, char **, char **, int *));
-int db_init __P((char *));
-int dbt_rdump __P((DBT *));
-int dbt_rprint __P((DBT *));
-int dbt_rrecno __P((DBT *, int));
-int digitize __P((int, int *));
-int load __P((char *, DBTYPE, char **, int, u_int32_t));
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+
+typedef struct { /* XXX: Globals. */
+ const char *progname; /* Program name. */
+ char *hdrbuf; /* Input file header. */
+ u_long lineno; /* Input file line number. */
+ u_long origline; /* Original file line number. */
+ int endodata; /* Reached the end of a database. */
+ int endofile; /* Reached the end of the input. */
+ int version; /* Input version. */
+ char *home; /* Env home. */
+ char *passwd; /* Env passwd. */
+ int private; /* Private env. */
+ u_int32_t cache; /* Env cache size. */
+} LDG;
+
+void badend __P((DB_ENV *));
+void badnum __P((DB_ENV *));
+int configure __P((DB_ENV *, DB *, char **, char **, int *));
+int convprintable __P((DB_ENV *, char *, char **));
+int db_init __P((DB_ENV *, char *, u_int32_t, int *));
+int dbt_rdump __P((DB_ENV *, DBT *));
+int dbt_rprint __P((DB_ENV *, DBT *));
+int dbt_rrecno __P((DB_ENV *, DBT *, int));
+int dbt_to_recno __P((DB_ENV *, DBT *, db_recno_t *));
+int digitize __P((DB_ENV *, int, int *));
+int env_create __P((DB_ENV **, LDG *));
+int load __P((DB_ENV *, char *, DBTYPE, char **, u_int, LDG *, int *));
int main __P((int, char *[]));
-int rheader __P((DB *, DBTYPE *, char **, int *, int *));
-void usage __P((void));
-void version_check __P((void));
+int rheader __P((DB_ENV *, DB *, DBTYPE *, char **, int *, int *));
+int usage __P((void));
+int version_check __P((const char *));
-int endodata; /* Reached the end of a database. */
-int endofile; /* Reached the end of the input. */
-int existed; /* Tried to load existing key. */
-u_long lineno; /* Input file line number. */
-int version = 1; /* Input version. */
+#define G(f) ((LDG *)dbenv->app_private)->f
-DB_ENV *dbenv;
-const char
- *progname = "db_load"; /* Program name. */
+ /* Flags to the load function. */
+#define LDF_NOHEADER 0x01 /* No dump header. */
+#define LDF_NOOVERWRITE 0x02 /* Don't overwrite existing rows. */
+#define LDF_PASSWORD 0x04 /* Encrypt created databases. */
int
main(argc, argv)
@@ -61,24 +74,35 @@ main(argc, argv)
extern char *optarg;
extern int optind;
DBTYPE dbtype;
- u_int32_t db_nooverwrite;
- int ch, exitval, no_header, ret;
- char **clist, **clp, *home;
-
- version_check();
-
- home = NULL;
- db_nooverwrite = 0;
- exitval = no_header = 0;
+ DB_ENV *dbenv;
+ LDG ldg;
+ u_int32_t ldf;
+ int ch, existed, exitval, ret;
+ char **clist, **clp;
+
+ ldg.progname = "db_load";
+ ldg.lineno = 0;
+ ldg.endodata = ldg.endofile = 0;
+ ldg.version = 1;
+ ldg.cache = MEGABYTE;
+ ldg.hdrbuf = NULL;
+ ldg.home = NULL;
+ ldg.passwd = NULL;
+
+ if ((ret = version_check(ldg.progname)) != 0)
+ return (ret);
+
+ ldf = 0;
+ exitval = existed = 0;
dbtype = DB_UNKNOWN;
/* Allocate enough room for configuration arguments. */
- if ((clp = clist = (char **)calloc(argc + 1, sizeof(char *))) == NULL) {
- fprintf(stderr, "%s: %s\n", progname, strerror(ENOMEM));
- exit(1);
+ if ((clp = clist = calloc((size_t)argc + 1, sizeof(char *))) == NULL) {
+ fprintf(stderr, "%s: %s\n", ldg.progname, strerror(ENOMEM));
+ return (EXIT_FAILURE);
}
- while ((ch = getopt(argc, argv, "c:f:h:nTt:V")) != EOF)
+ while ((ch = getopt(argc, argv, "c:f:h:nP:Tt:V")) != EOF)
switch (ch) {
case 'c':
*clp++ = optarg;
@@ -86,18 +110,28 @@ main(argc, argv)
case 'f':
if (freopen(optarg, "r", stdin) == NULL) {
fprintf(stderr, "%s: %s: reopen: %s\n",
- progname, optarg, strerror(errno));
- exit(1);
+ ldg.progname, optarg, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
case 'h':
- home = optarg;
+ ldg.home = optarg;
break;
case 'n':
- db_nooverwrite = DB_NOOVERWRITE;
+ ldf |= LDF_NOOVERWRITE;
+ break;
+ case 'P':
+ ldg.passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (ldg.passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ ldg.progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ ldf |= LDF_PASSWORD;
break;
case 'T':
- no_header = 1;
+ ldf |= LDF_NOHEADER;
break;
case 't':
if (strcmp(optarg, "btree") == 0) {
@@ -116,21 +150,19 @@ main(argc, argv)
dbtype = DB_QUEUE;
break;
}
- usage();
- /* NOTREACHED */
+ return (usage());
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case '?':
default:
- usage();
- /* NOTREACHED */
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 1)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -139,19 +171,12 @@ main(argc, argv)
* Create an environment object initialized for error reporting, and
* then open it.
*/
- if ((ret = db_env_create(&dbenv, 0)) != 0) {
- fprintf(stderr,
- "%s: db_env_create: %s\n", progname, db_strerror(ret));
- goto shutdown;
- }
- dbenv->set_errfile(dbenv, stderr);
- dbenv->set_errpfx(dbenv, progname);
- if (db_init(home) != 0)
+ if (env_create(&dbenv, &ldg) != 0)
goto shutdown;
- while (!endofile)
- if (load(argv[0],
- dbtype, clist, no_header, db_nooverwrite) != 0)
+ while (!ldg.endofile)
+ if (load(dbenv, argv[0], dbtype, clist, ldf,
+ &ldg, &existed) != 0)
goto shutdown;
if (0) {
@@ -160,13 +185,22 @@ shutdown: exitval = 1;
if ((ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
- "%s: dbenv->close: %s\n", progname, db_strerror(ret));
+ "%s: dbenv->close: %s\n", ldg.progname, db_strerror(ret));
}
/* Resend any caught signal. */
__db_util_sigresend();
+ free(clist);
+ if (ldg.passwd != NULL)
+ free(ldg.passwd);
- /* Return 0 on success, 1 if keys existed already, and 2 on failure. */
+ /*
+ * Return 0 on success, 1 if keys existed already, and 2 on failure.
+ *
+ * Technically, this is wrong, because exit of anything other than
+ * 0 is implementation-defined by the ANSI C standard. I don't see
+ * any good solutions that don't involve API changes.
+ */
return (exitval == 0 ? (existed == 0 ? 0 : 1) : 2);
}
@@ -175,46 +209,53 @@ shutdown: exitval = 1;
* Load a database.
*/
int
-load(name, argtype, clist, no_header, db_nooverwrite)
+load(dbenv, name, argtype, clist, flags, ldg, existedp)
+ DB_ENV *dbenv;
char *name, **clist;
DBTYPE argtype;
- int no_header;
- u_int32_t db_nooverwrite;
+ u_int flags;
+ LDG *ldg;
+ int *existedp;
{
DB *dbp;
DBT key, rkey, data, *readp, *writep;
DBTYPE dbtype;
DB_TXN *ctxn, *txn;
db_recno_t recno, datarecno;
- int checkprint, hexkeys, keys, ret, rval;
- int keyflag, ascii_recno;
+ u_int32_t put_flags;
+ int ascii_recno, checkprint, hexkeys, keyflag, keys, resize, ret, rval;
char *subdb;
- endodata = 0;
+ put_flags = LF_ISSET(LDF_NOOVERWRITE) ? DB_NOOVERWRITE : 0;
+ G(endodata) = 0;
+
subdb = NULL;
ctxn = txn = NULL;
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
memset(&rkey, 0, sizeof(DBT));
+retry_db:
+ dbtype = DB_UNKNOWN;
+ keys = -1;
+ hexkeys = -1;
+ keyflag = -1;
+
/* Create the DB object. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
- return (1);
+ goto err;
}
- dbtype = DB_UNKNOWN;
- keys = -1;
- hexkeys = -1;
- keyflag = -1;
/* Read the header -- if there's no header, we expect flat text. */
- if (no_header) {
+ if (LF_ISSET(LDF_NOHEADER)) {
checkprint = 1;
dbtype = argtype;
} else {
- if (rheader(dbp, &dbtype, &subdb, &checkprint, &keys) != 0)
+ if (rheader(dbenv,
+ dbp, &dbtype, &subdb, &checkprint, &keys) != 0)
goto err;
- if (endofile)
+ if (G(endofile))
goto done;
}
@@ -223,7 +264,7 @@ load(name, argtype, clist, no_header, db_nooverwrite)
* configuration changes to all databases that are loaded, e.g., all
* subdatabases.)
*/
- if (configure(dbp, clist, &subdb, &keyflag))
+ if (configure(dbenv, dbp, clist, &subdb, &keyflag))
goto err;
if (keys != 1) {
@@ -250,8 +291,8 @@ load(name, argtype, clist, no_header, db_nooverwrite)
if (argtype != DB_UNKNOWN) {
if (dbtype == DB_RECNO || dbtype == DB_QUEUE)
- if (keyflag != 1 && argtype != DB_RECNO
- && argtype != DB_QUEUE) {
+ if (keyflag != 1 && argtype != DB_RECNO &&
+ argtype != DB_QUEUE) {
dbenv->errx(dbenv,
"improper database type conversion specified");
goto err;
@@ -267,31 +308,67 @@ load(name, argtype, clist, no_header, db_nooverwrite)
if (keyflag == -1)
keyflag = 0;
- /*
+ /*
* Recno keys have only been printed in hexadecimal starting
- * with db_dump format version 3 (DB 3.2).
+ * with db_dump format version 3 (DB 3.2).
*
- * !!!
- * Note that version is set in rheader(), which must be called before
+ * !!!
+ * Note that version is set in rheader(), which must be called before
* this assignment.
*/
- hexkeys = (version >= 3 && keyflag == 1 && checkprint == 0);
+ hexkeys = (G(version) >= 3 && keyflag == 1 && checkprint == 0);
if (keyflag == 1 && (dbtype == DB_RECNO || dbtype == DB_QUEUE))
ascii_recno = 1;
else
ascii_recno = 0;
+ /* If configured with a password, encrypt databases we create. */
+ if (LF_ISSET(LDF_PASSWORD) &&
+ (ret = dbp->set_flags(dbp, DB_ENCRYPT)) != 0) {
+ dbp->err(dbp, ret, "DB->set_flags: DB_ENCRYPT");
+ goto err;
+ }
+
+#if 0
+ Set application-specific btree comparison or hash functions here.
+ For example:
+
+ if ((ret = dbp->set_bt_compare(dbp, local_comparison_func)) != 0) {
+ dbp->err(dbp, ret, "DB->set_bt_compare");
+ goto err;
+ }
+ if ((ret = dbp->set_h_hash(dbp, local_hash_func)) != 0) {
+ dbp->err(dbp, ret, "DB->set_h_hash");
+ goto err;
+ }
+#endif
+
/* Open the DB file. */
- if ((ret = dbp->open(dbp,
- name, subdb, dbtype, DB_CREATE, __db_omode("rwrwrw"))) != 0) {
+ if ((ret = dbp->open(dbp, NULL, name, subdb, dbtype,
+ DB_CREATE | (TXN_ON(dbenv) ? DB_AUTO_COMMIT : 0),
+ __db_omode("rwrwrw"))) != 0) {
dbp->err(dbp, ret, "DB->open: %s", name);
goto err;
}
+ if (ldg->private != 0) {
+ if ((ret =
+ __db_util_cache(dbenv, dbp, &ldg->cache, &resize)) != 0)
+ goto err;
+ if (resize) {
+ if ((ret = dbp->close(dbp, 0)) != 0)
+ goto err;
+ dbp = NULL;
+ if ((ret = dbenv->close(dbenv, 0)) != 0)
+ goto err;
+ if ((ret = env_create(&dbenv, ldg)) != 0)
+ goto err;
+ goto retry_db;
+ }
+ }
/* Initialize the key/data pair. */
- readp = &key;
- writep = &key;
+ readp = writep = &key;
if (dbtype == DB_RECNO || dbtype == DB_QUEUE) {
key.size = sizeof(recno);
if (keyflag) {
@@ -300,91 +377,85 @@ load(name, argtype, clist, no_header, db_nooverwrite)
readp = &rkey;
goto key_data;
}
- }
- else
+ } else
key.data = &recno;
} else
-key_data: if ((readp->data =
- (void *)malloc(readp->ulen = 1024)) == NULL) {
+key_data: if ((readp->data = malloc(readp->ulen = 1024)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
goto err;
}
- if ((data.data = (void *)malloc(data.ulen = 1024)) == NULL) {
+ if ((data.data = malloc(data.ulen = 1024)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
goto err;
}
- if (TXN_ON(dbenv) && (ret = txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ if (TXN_ON(dbenv) &&
+ (ret = dbenv->txn_begin(dbenv, NULL, &txn, 0)) != 0)
goto err;
/* Get each key/data pair and add them to the database. */
for (recno = 1; !__db_util_interrupted(); ++recno) {
- if (!keyflag)
+ if (!keyflag) {
if (checkprint) {
- if (dbt_rprint(&data))
+ if (dbt_rprint(dbenv, &data))
goto err;
} else {
- if (dbt_rdump(&data))
+ if (dbt_rdump(dbenv, &data))
goto err;
}
- else
+ } else {
if (checkprint) {
- if (dbt_rprint(readp))
+ if (dbt_rprint(dbenv, readp))
goto err;
- if (!endodata && dbt_rprint(&data))
- goto fmt;
+ if (ascii_recno &&
+ dbt_to_recno(dbenv, readp, &datarecno) != 0)
+ goto err;
+
+ if (!G(endodata) && dbt_rprint(dbenv, &data))
+ goto odd_count;
} else {
if (ascii_recno) {
- if (dbt_rrecno(readp, hexkeys))
+ if (dbt_rrecno(dbenv, readp, hexkeys))
goto err;
} else
- if (dbt_rdump(readp))
+ if (dbt_rdump(dbenv, readp))
goto err;
- if (!endodata && dbt_rdump(&data)) {
-fmt: dbenv->errx(dbenv,
+
+ if (!G(endodata) && dbt_rdump(dbenv, &data)) {
+odd_count: dbenv->errx(dbenv,
"odd number of key/data pairs");
goto err;
}
}
- if (endodata)
- break;
- if (readp != writep) {
- if (sscanf(readp->data, "%ud", &datarecno) != 1)
- dbenv->errx(dbenv,
- "%s: non-integer key at line: %d",
- name, !keyflag ? recno : recno * 2 - 1);
- if (datarecno == 0)
- dbenv->errx(dbenv, "%s: zero key at line: %d",
- name,
- !keyflag ? recno : recno * 2 - 1);
}
+ if (G(endodata))
+ break;
retry: if (txn != NULL)
- if ((ret = txn_begin(dbenv, txn, &ctxn, 0)) != 0)
+ if ((ret = dbenv->txn_begin(dbenv, txn, &ctxn, 0)) != 0)
goto err;
- switch (ret =
- dbp->put(dbp, txn, writep, &data, db_nooverwrite)) {
+ switch (ret = dbp->put(dbp, ctxn, writep, &data, put_flags)) {
case 0:
if (ctxn != NULL) {
if ((ret =
- txn_commit(ctxn, DB_TXN_NOSYNC)) != 0)
+ ctxn->commit(ctxn, DB_TXN_NOSYNC)) != 0)
goto err;
ctxn = NULL;
}
break;
case DB_KEYEXIST:
- existed = 1;
+ *existedp = 1;
dbenv->errx(dbenv,
"%s: line %d: key already exists, not loaded:",
name,
!keyflag ? recno : recno * 2 - 1);
(void)__db_prdbt(&key, checkprint, 0, stderr,
- __db_verify_callback, 0, NULL);
+ __db_pr_callback, 0, NULL);
break;
case DB_LOCK_DEADLOCK:
/* If we have a child txn, retry--else it's fatal. */
if (ctxn != NULL) {
- if ((ret = txn_abort(ctxn)) != 0)
+ if ((ret = ctxn->abort(ctxn)) != 0)
goto err;
ctxn = NULL;
goto retry;
@@ -393,20 +464,20 @@ retry: if (txn != NULL)
default:
dbenv->err(dbenv, ret, NULL);
if (ctxn != NULL) {
- (void)txn_abort(ctxn);
+ (void)ctxn->abort(ctxn);
ctxn = NULL;
}
goto err;
}
if (ctxn != NULL) {
- if ((ret = txn_abort(ctxn)) != 0)
+ if ((ret = ctxn->abort(ctxn)) != 0)
goto err;
ctxn = NULL;
}
}
done: rval = 0;
DB_ASSERT(ctxn == NULL);
- if (txn != NULL && (ret = txn_commit(txn, 0)) != 0) {
+ if (txn != NULL && (ret = txn->commit(txn, 0)) != 0) {
txn = NULL;
goto err;
}
@@ -415,19 +486,22 @@ done: rval = 0;
err: rval = 1;
DB_ASSERT(ctxn == NULL);
if (txn != NULL)
- (void)txn_abort(txn);
+ (void)txn->abort(txn);
}
/* Close the database. */
- if ((ret = dbp->close(dbp, 0)) != 0) {
- dbp->err(dbp, ret, "DB->close");
+ if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->close");
rval = 1;
}
+ if (G(hdrbuf) != NULL)
+ free(G(hdrbuf));
+ G(hdrbuf) = NULL;
/* Free allocated memory. */
if (subdb != NULL)
free(subdb);
- if (dbtype != DB_RECNO && dbtype != DB_QUEUE)
+ if (dbtype != DB_RECNO && dbtype != DB_QUEUE && key.data != NULL)
free(key.data);
if (rkey.data != NULL)
free(rkey.data);
@@ -437,16 +511,52 @@ err: rval = 1;
}
/*
+ * env_create --
+ * Create the environment and initialize it for error reporting.
+ */
+int
+env_create(dbenvp, ldg)
+ DB_ENV **dbenvp;
+ LDG *ldg;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ if ((ret = db_env_create(dbenvp, 0)) != 0) {
+ fprintf(stderr,
+ "%s: db_env_create: %s\n", ldg->progname, db_strerror(ret));
+ return (ret);
+ }
+ dbenv = *dbenvp;
+ dbenv->set_errfile(dbenv, stderr);
+ dbenv->set_errpfx(dbenv, ldg->progname);
+ if (ldg->passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ ldg->passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ return (ret);
+ }
+ if ((ret = db_init(dbenv, ldg->home, ldg->cache, &ldg->private)) != 0)
+ return (ret);
+ dbenv->app_private = ldg;
+
+ return (0);
+}
+
+/*
* db_init --
* Initialize the environment.
*/
int
-db_init(home)
+db_init(dbenv, home, cache, is_private)
+ DB_ENV *dbenv;
char *home;
+ u_int32_t cache;
+ int *is_private;
{
u_int32_t flags;
int ret;
+ *is_private = 0;
/* We may be loading into a live environment. Try and join. */
flags = DB_USE_ENVIRON |
DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN;
@@ -467,11 +577,16 @@ db_init(home)
*/
LF_CLR(DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_TXN);
LF_SET(DB_CREATE | DB_PRIVATE);
+ *is_private = 1;
+ if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_cachesize");
+ return (1);
+ }
if ((ret = dbenv->open(dbenv, home, flags, 0)) == 0)
return (0);
/* An environment is required. */
- dbenv->err(dbenv, ret, "DBENV->open");
+ dbenv->err(dbenv, ret, "DB_ENV->open");
return (1);
}
@@ -481,24 +596,24 @@ db_init(home)
case '1': \
if ((ret = dbp->set_flags(dbp, flag)) != 0) { \
dbp->err(dbp, ret, "%s: set_flags: %s", \
- progname, name); \
+ G(progname), name); \
return (1); \
} \
break; \
case '0': \
break; \
default: \
- badnum(); \
+ badnum(dbenv); \
return (1); \
} \
continue; \
}
-#define NUMBER(name, value, keyword, func) \
+#define NUMBER(name, value, keyword, func, t) \
if (strcmp(name, keyword) == 0) { \
- if (__db_getlong(dbp, \
+ if (__db_getlong(dbenv, \
NULL, value, 1, LONG_MAX, &val) != 0) \
return (1); \
- if ((ret = dbp->func(dbp, val)) != 0) \
+ if ((ret = dbp->func(dbp, (t)val)) != 0) \
goto nameerr; \
continue; \
}
@@ -514,7 +629,8 @@ db_init(home)
* Handle command-line configuration options.
*/
int
-configure(dbp, clp, subdbp, keysp)
+configure(dbenv, dbp, clp, subdbp, keysp)
+ DB_ENV *dbenv;
DB *dbp;
char **clp, **subdbp;
int *keysp;
@@ -534,6 +650,8 @@ configure(dbp, clp, subdbp, keysp)
if (strcmp(name, "database") == 0 ||
strcmp(name, "subdatabase") == 0) {
+ if (*subdbp != NULL)
+ free(*subdbp);
if ((*subdbp = strdup(value)) == NULL) {
dbp->err(dbp, ENOMEM, NULL);
return (1);
@@ -546,35 +664,36 @@ configure(dbp, clp, subdbp, keysp)
else if (strcmp(value, "0") == 0)
*keysp = 0;
else {
- badnum();
+ badnum(dbenv);
return (1);
}
continue;
}
#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey);
+ NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
#endif
- NUMBER(name, value, "bt_minkey", set_bt_minkey);
- NUMBER(name, value, "db_lorder", set_lorder);
- NUMBER(name, value, "db_pagesize", set_pagesize);
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t);
+ NUMBER(name, value, "db_lorder", set_lorder, int);
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t);
+ FLAG(name, value, "chksum", DB_CHKSUM);
FLAG(name, value, "duplicates", DB_DUP);
FLAG(name, value, "dupsort", DB_DUPSORT);
- NUMBER(name, value, "h_ffactor", set_h_ffactor);
- NUMBER(name, value, "h_nelem", set_h_nelem);
- NUMBER(name, value, "re_len", set_re_len);
+ NUMBER(name, value, "h_ffactor", set_h_ffactor, u_int32_t);
+ NUMBER(name, value, "h_nelem", set_h_nelem, u_int32_t);
+ NUMBER(name, value, "re_len", set_re_len, u_int32_t);
STRING(name, value, "re_pad", set_re_pad);
FLAG(name, value, "recnum", DB_RECNUM);
FLAG(name, value, "renumber", DB_RENUMBER);
dbp->errx(dbp,
- "unknown command-line configuration keyword");
+ "unknown command-line configuration keyword \"%s\"", name);
return (1);
}
return (0);
nameerr:
- dbp->err(dbp, ret, "%s: %s=%s", progname, name, value);
+ dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
return (1);
}
@@ -583,35 +702,95 @@ nameerr:
* Read the header message.
*/
int
-rheader(dbp, dbtypep, subdbp, checkprintp, keysp)
+rheader(dbenv, dbp, dbtypep, subdbp, checkprintp, keysp)
+ DB_ENV *dbenv;
DB *dbp;
DBTYPE *dbtypep;
char **subdbp;
int *checkprintp, *keysp;
{
+ size_t buflen, linelen, start;
long val;
- int first, ret;
- char *name, *value, *p, buf[128];
+ int ch, first, hdr, ret;
+ char *buf, *name, *p, *value;
*dbtypep = DB_UNKNOWN;
*checkprintp = 0;
+ name = p = NULL;
+
+ /*
+ * We start with a smallish buffer; most headers are small.
+ * We may need to realloc it for a large subdatabase name.
+ */
+ buflen = 4096;
+ if (G(hdrbuf) == NULL) {
+ hdr = 0;
+ if ((buf = malloc(buflen)) == NULL) {
+memerr: dbp->errx(dbp, "could not allocate buffer %d", buflen);
+ return (1);
+ }
+ G(hdrbuf) = buf;
+ G(origline) = G(lineno);
+ } else {
+ hdr = 1;
+ buf = G(hdrbuf);
+ G(lineno) = G(origline);
+ }
+ start = 0;
for (first = 1;; first = 0) {
- ++lineno;
+ ++G(lineno);
+
+ /* Read a line, which may be of arbitrary length, into buf. */
+ linelen = 0;
+ buf = &G(hdrbuf)[start];
+ if (hdr == 0) {
+ for (;;) {
+ if ((ch = getchar()) == EOF) {
+ if (!first || ferror(stdin))
+ goto badfmt;
+ G(endofile) = 1;
+ break;
+ }
- /* If we don't see the expected information, it's an error. */
- if (fgets(buf, sizeof(buf), stdin) == NULL) {
- if (!first || ferror(stdin))
- goto badfmt;
- endofile = 1;
- break;
+ if (ch == '\n')
+ break;
+
+ /*
+ * If the buffer is too small, double it. The
+ * +1 is for the nul byte inserted below.
+ */
+ if (linelen + start + 1 == buflen) {
+ G(hdrbuf) =
+ realloc(G(hdrbuf), buflen *= 2);
+ if (G(hdrbuf) == NULL)
+ goto memerr;
+ buf = &G(hdrbuf)[start];
+ }
+
+ buf[linelen++] = ch;
+ }
+ if (G(endofile) == 1)
+ break;
+ buf[linelen++] = '\0';
+ } else
+ linelen = strlen(buf) + 1;
+ start += linelen;
+
+ if (name != NULL) {
+ *p = '=';
+ free(name);
+ name = NULL;
}
- if ((p = strchr(name = buf, '=')) == NULL)
+ /* If we don't see the expected information, it's an error. */
+ if ((name = strdup(buf)) == NULL)
+ goto memerr;
+ if ((p = strchr(name, '=')) == NULL)
goto badfmt;
*p++ = '\0';
- if ((p = strchr(value = p, '\n')) == NULL)
- goto badfmt;
- *p = '\0';
+
+ value = p--;
+
if (name[0] == '\0' || value[0] == '\0')
goto badfmt;
@@ -622,13 +801,13 @@ rheader(dbp, dbtypep, subdbp, checkprintp, keysp)
* Version 1 didn't have a "VERSION" header line. We
* only support versions 1, 2, and 3 of the dump format.
*/
- version = atoi(value);
+ G(version) = atoi(value);
- if (version > 3) {
+ if (G(version) > 3) {
dbp->errx(dbp,
"line %lu: VERSION %d is unsupported",
- lineno, version);
- return (1);
+ G(lineno), G(version));
+ goto err;
}
continue;
}
@@ -660,14 +839,14 @@ rheader(dbp, dbtypep, subdbp, checkprintp, keysp)
*dbtypep = DB_QUEUE;
continue;
}
- dbp->errx(dbp, "line %lu: unknown type", lineno);
- return (1);
+ dbp->errx(dbp, "line %lu: unknown type", G(lineno));
+ goto err;
}
if (strcmp(name, "database") == 0 ||
strcmp(name, "subdatabase") == 0) {
- if ((*subdbp = strdup(value)) == NULL) {
- dbp->err(dbp, ENOMEM, NULL);
- return (1);
+ if ((ret = convprintable(dbenv, value, subdbp)) != 0) {
+ dbp->err(dbp, ret, "error reading db name");
+ goto err;
}
continue;
}
@@ -677,40 +856,102 @@ rheader(dbp, dbtypep, subdbp, checkprintp, keysp)
else if (strcmp(value, "0") == 0)
*keysp = 0;
else {
- badnum();
- return (1);
+ badnum(dbenv);
+ goto err;
}
continue;
}
#ifdef notyet
- NUMBER(name, value, "bt_maxkey", set_bt_maxkey);
+ NUMBER(name, value, "bt_maxkey", set_bt_maxkey, u_int32_t);
#endif
- NUMBER(name, value, "bt_minkey", set_bt_minkey);
- NUMBER(name, value, "db_lorder", set_lorder);
- NUMBER(name, value, "db_pagesize", set_pagesize);
+ NUMBER(name, value, "bt_minkey", set_bt_minkey, u_int32_t);
+ NUMBER(name, value, "db_lorder", set_lorder, int);
+ NUMBER(name, value, "db_pagesize", set_pagesize, u_int32_t);
+ NUMBER(name, value, "extentsize", set_q_extentsize, u_int32_t);
+ FLAG(name, value, "chksum", DB_CHKSUM);
FLAG(name, value, "duplicates", DB_DUP);
FLAG(name, value, "dupsort", DB_DUPSORT);
- NUMBER(name, value, "h_ffactor", set_h_ffactor);
- NUMBER(name, value, "h_nelem", set_h_nelem);
- NUMBER(name, value, "re_len", set_re_len);
+ NUMBER(name, value, "h_ffactor", set_h_ffactor, u_int32_t);
+ NUMBER(name, value, "h_nelem", set_h_nelem, u_int32_t);
+ NUMBER(name, value, "re_len", set_re_len, u_int32_t);
STRING(name, value, "re_pad", set_re_pad);
FLAG(name, value, "recnum", DB_RECNUM);
FLAG(name, value, "renumber", DB_RENUMBER);
dbp->errx(dbp,
- "unknown input-file header configuration keyword");
- return (1);
+ "unknown input-file header configuration keyword \"%s\"",
+ name);
+ goto err;
}
- return (0);
+ ret = 0;
+ if (0) {
+nameerr: dbp->err(dbp, ret, "%s: %s=%s", G(progname), name, value);
+err: ret = 1;
+ }
+ if (0) {
+badfmt: dbp->errx(dbp, "line %lu: unexpected format", G(lineno));
+ ret = 1;
+ }
+ if (name != NULL) {
+ if (p != NULL)
+ *p = '=';
+ free(name);
+ }
+ return (ret);
+}
-nameerr:
- dbp->err(dbp, ret, "%s: %s=%s", progname, name, value);
- return (1);
+/*
+ * convprintable --
+ * Convert a printable-encoded string into a newly allocated string.
+ *
+ * In an ideal world, this would probably share code with dbt_rprint, but
+ * that's set up to read character-by-character (to avoid large memory
+ * allocations that aren't likely to be a problem here), and this has fewer
+ * special cases to deal with.
+ *
+ * Note that despite the printable encoding, the char * interface to this
+ * function (which is, not coincidentally, also used for database naming)
+ * means that outstr cannot contain any nuls.
+ */
+int
+convprintable(dbenv, instr, outstrp)
+ DB_ENV *dbenv;
+ char *instr, **outstrp;
+{
+ char c, *outstr;
+ int e1, e2;
-badfmt:
- dbp->errx(dbp, "line %lu: unexpected format", lineno);
- return (1);
+ /*
+ * Just malloc a string big enough for the whole input string;
+ * the output string will be smaller (or of equal length).
+ */
+ if ((outstr = malloc(strlen(instr) + 1)) == NULL)
+ return (ENOMEM);
+
+ *outstrp = outstr;
+
+ e1 = e2 = 0;
+ for ( ; *instr != '\0'; instr++)
+ if (*instr == '\\') {
+ if (*++instr == '\\') {
+ *outstr++ = '\\';
+ continue;
+ }
+ c = digitize(dbenv, *instr, &e1) << 4;
+ c |= digitize(dbenv, *++instr, &e2);
+ if (e1 || e2) {
+ badend(dbenv);
+ return (EINVAL);
+ }
+
+ *outstr++ = c;
+ } else
+ *outstr++ = *instr;
+
+ *outstr = '\0';
+
+ return (0);
}
/*
@@ -718,7 +959,8 @@ badfmt:
* Read a printable line into a DBT structure.
*/
int
-dbt_rprint(dbtp)
+dbt_rprint(dbenv, dbtp)
+ DB_ENV *dbenv;
DBT *dbtp;
{
u_int32_t len;
@@ -726,31 +968,31 @@ dbt_rprint(dbtp)
int c1, c2, e, escape, first;
char buf[32];
- ++lineno;
+ ++G(lineno);
first = 1;
e = escape = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
- endofile = endodata = 1;
+ G(endofile) = G(endodata) = 1;
return (0);
}
- badend();
+ badend(dbenv);
return (1);
}
if (first) {
first = 0;
- if (version > 1) {
+ if (G(version) > 1) {
if (c1 != ' ') {
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
strcmp(buf, "DATA=END\n") != 0) {
- badend();
+ badend(dbenv);
return (1);
}
- endodata = 1;
+ G(endodata) = 1;
return (0);
}
continue;
@@ -759,10 +1001,11 @@ dbt_rprint(dbtp)
if (escape) {
if (c1 != '\\') {
if ((c2 = getchar()) == EOF) {
- badend();
+ badend(dbenv);
return (1);
}
- c1 = digitize(c1, &e) << 4 | digitize(c2, &e);
+ c1 = digitize(dbenv,
+ c1, &e) << 4 | digitize(dbenv, c2, &e);
if (e)
return (1);
}
@@ -775,7 +1018,7 @@ dbt_rprint(dbtp)
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
- (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) {
+ realloc(dbtp->data, dbtp->ulen)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
return (1);
}
@@ -794,7 +1037,8 @@ dbt_rprint(dbtp)
* Read a byte dump line into a DBT structure.
*/
int
-dbt_rdump(dbtp)
+dbt_rdump(dbenv, dbtp)
+ DB_ENV *dbenv;
DBT *dbtp;
{
u_int32_t len;
@@ -802,51 +1046,51 @@ dbt_rdump(dbtp)
int c1, c2, e, first;
char buf[32];
- ++lineno;
+ ++G(lineno);
first = 1;
e = 0;
for (p = dbtp->data, len = 0; (c1 = getchar()) != '\n';) {
if (c1 == EOF) {
if (len == 0) {
- endofile = endodata = 1;
+ G(endofile) = G(endodata) = 1;
return (0);
}
- badend();
+ badend(dbenv);
return (1);
}
if (first) {
first = 0;
- if (version > 1) {
+ if (G(version) > 1) {
if (c1 != ' ') {
buf[0] = c1;
if (fgets(buf + 1,
sizeof(buf) - 1, stdin) == NULL ||
strcmp(buf, "DATA=END\n") != 0) {
- badend();
+ badend(dbenv);
return (1);
}
- endodata = 1;
+ G(endodata) = 1;
return (0);
}
continue;
}
}
if ((c2 = getchar()) == EOF) {
- badend();
+ badend(dbenv);
return (1);
}
if (len >= dbtp->ulen - 10) {
dbtp->ulen *= 2;
if ((dbtp->data =
- (void *)realloc(dbtp->data, dbtp->ulen)) == NULL) {
+ realloc(dbtp->data, dbtp->ulen)) == NULL) {
dbenv->err(dbenv, ENOMEM, NULL);
return (1);
}
p = (u_int8_t *)dbtp->data + len;
}
++len;
- *p++ = digitize(c1, &e) << 4 | digitize(c2, &e);
+ *p++ = digitize(dbenv, c1, &e) << 4 | digitize(dbenv, c2, &e);
if (e)
return (1);
}
@@ -860,21 +1104,22 @@ dbt_rdump(dbtp)
* Read a record number dump line into a DBT structure.
*/
int
-dbt_rrecno(dbtp, ishex)
+dbt_rrecno(dbenv, dbtp, ishex)
+ DB_ENV *dbenv;
DBT *dbtp;
int ishex;
{
char buf[32], *p, *q;
- ++lineno;
+ ++G(lineno);
if (fgets(buf, sizeof(buf), stdin) == NULL) {
- endofile = endodata = 1;
+ G(endofile) = G(endodata) = 1;
return (0);
}
if (strcmp(buf, "DATA=END\n") == 0) {
- endodata = 1;
+ G(endodata) = 1;
return (0);
}
@@ -903,9 +1148,9 @@ dbt_rrecno(dbtp, ishex)
*p = '\0';
}
- if (__db_getulong(NULL,
- progname, buf + 1, 0, 0, (u_long *)dbtp->data)) {
-bad: badend();
+ if (__db_getulong(dbenv,
+ G(progname), buf + 1, 0, 0, (u_long *)dbtp->data)) {
+bad: badend(dbenv);
return (1);
}
@@ -913,12 +1158,27 @@ bad: badend();
return (0);
}
+int
+dbt_to_recno(dbenv, dbt, recnop)
+ DB_ENV *dbenv;
+ DBT *dbt;
+ db_recno_t *recnop;
+{
+ char buf[32]; /* Large enough for 2^64. */
+
+ memcpy(buf, dbt->data, dbt->size);
+ buf[dbt->size] = '\0';
+
+ return (__db_getulong(dbenv, G(progname), buf, 0, 0, (u_long *)recnop));
+}
+
/*
* digitize --
* Convert a character to an integer.
*/
int
-digitize(c, errorp)
+digitize(dbenv, c, errorp)
+ DB_ENV *dbenv;
int c, *errorp;
{
switch (c) { /* Don't depend on ASCII ordering. */
@@ -938,6 +1198,8 @@ digitize(c, errorp)
case 'd': return (13);
case 'e': return (14);
case 'f': return (15);
+ default: /* Not possible. */
+ break;
}
dbenv->errx(dbenv, "unexpected hexadecimal value");
@@ -951,7 +1213,8 @@ digitize(c, errorp)
* Display the bad number message.
*/
void
-badnum()
+badnum(dbenv)
+ DB_ENV *dbenv;
{
dbenv->errx(dbenv,
"boolean name=value pairs require a value of 0 or 1");
@@ -962,7 +1225,8 @@ badnum()
* Display the bad end to input message.
*/
void
-badend()
+badend(dbenv)
+ DB_ENV *dbenv;
{
dbenv->errx(dbenv, "unexpected end of input data or key/data pair");
}
@@ -971,28 +1235,29 @@ badend()
* usage --
* Display the usage message.
*/
-void
+int
usage()
{
(void)fprintf(stderr, "%s\n\t%s\n",
- "usage: db_load [-nTV]",
- "[-c name=value] [-f file] [-h home] [-t btree | hash | recno] db_file");
- exit(1);
+ "usage: db_load [-nTV] [-c name=value] [-f file]",
+ "[-h home] [-P password] [-t btree | hash | recno | queue] db_file");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_printlog/README b/db/db_printlog/README
index 7d8da505e..d59f4c77f 100644
--- a/db/db_printlog/README
+++ b/db/db_printlog/README
@@ -1,4 +1,4 @@
-# $Id: README,v 10.5 1999/11/21 23:08:01 bostic Exp $
+# $Id: README,v 10.6 2002/06/20 14:52:54 bostic Exp $
Berkeley DB log dump utility. This utility dumps out a DB log in human
readable form, a record at a time, to assist in recovery and transaction
@@ -10,14 +10,23 @@ commit.awk Output transaction ID of committed transactions.
count.awk Print out the number of log records for transactions
that we encountered.
+dbname.awk Take a comma-separated list of database names and spit
+ out all the log records that affect those databases.
+
fileid.awk Take a comma-separated list of file numbers and spit out
all the log records that affect those file numbers.
+logstat.awk Display log record count/size statistics.
+
pgno.awk Take a comma-separated list of page numbers and spit
out all the log records that affect those page numbers.
range.awk Print out a range of the log.
+rectype.awk Print out a range of the log -- command line should
+ set RECTYPE to the a comma separated list of the
+ rectypes (or partial strings of rectypes) sought.
+
status.awk Read through db_printlog output and list the transactions
encountered, and whether they commited or aborted.
diff --git a/db/db_printlog/db_printlog.c b/db/db_printlog/db_printlog.c
index 8b9fb74a6..94ea496ff 100644
--- a/db/db_printlog/db_printlog.c
+++ b/db/db_printlog/db_printlog.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,14 +9,15 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_printlog.c,v 11.23 2001/01/18 18:36:58 bostic Exp $";
+ "$Id: db_printlog.c,v 11.59 2003/08/18 18:00:31 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -24,21 +25,19 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "btree.h"
-#include "db_am.h"
-#include "hash.h"
-#include "log.h"
-#include "qam.h"
-#include "txn.h"
-
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
-
-DB_ENV *dbenv;
-const char
- *progname = "db_printlog"; /* Program name. */
+#include "dbinc/db_page.h"
+#include "dbinc/btree.h"
+#include "dbinc/fop.h"
+#include "dbinc/hash.h"
+#include "dbinc/log.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
+int print_app_record __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+int open_rep_db __P((DB_ENV *, DB **, DBC **));
int
main(argc, argv)
@@ -47,42 +46,64 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- DBT data;
+ const char *progname = "db_printlog";
+ DB *dbp;
+ DBC *dbc;
+ DB_ENV *dbenv;
+ DB_LOGC *logc;
+ int (**dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t dtabsize;
+ DBT data, keydbt;
DB_LSN key;
- int ch, e_close, exitval, nflag, ret;
- char *home;
+ int ch, exitval, nflag, rflag, ret, repflag;
+ char *home, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
- e_close = exitval = 0;
- nflag = 0;
- home = NULL;
- while ((ch = getopt(argc, argv, "h:NV")) != EOF)
+ dbenv = NULL;
+ dbp = NULL;
+ dbc = NULL;
+ logc = NULL;
+ exitval = nflag = rflag = repflag = 0;
+ home = passwd = NULL;
+ dtabsize = 0;
+ dtab = NULL;
+ while ((ch = getopt(argc, argv, "h:NP:rRV")) != EOF)
switch (ch) {
case 'h':
home = optarg;
break;
case 'N':
nflag = 1;
- if ((ret = db_env_set_panicstate(0)) != 0) {
- fprintf(stderr,
- "%s: db_env_set_panicstate: %s\n",
- progname, db_strerror(ret));
- return (1);
+ break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
+ case 'r':
+ rflag = 1;
+ break;
+ case 'R':
+ repflag = 1;
+ break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc > 0)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -96,13 +117,33 @@ main(argc, argv)
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
- if (nflag && (ret = dbenv->set_mutexlocks(dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "set_mutexlocks");
+ if (nflag) {
+ if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
+ goto shutdown;
+ }
+ if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
+ goto shutdown;
+ }
+ }
+
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ goto shutdown;
+ }
+
+ /*
+ * Set up an app-specific dispatch function so that we can gracefully
+ * handle app-specific log records.
+ */
+ if ((ret = dbenv->set_app_dispatch(dbenv, print_app_record)) != 0) {
+ dbenv->err(dbenv, ret, "app_dispatch");
goto shutdown;
}
@@ -110,8 +151,19 @@ main(argc, argv)
* An environment is required, but as all we're doing is reading log
* files, we create one if it doesn't already exist. If we create
* it, create it private so it automatically goes away when we're done.
+ * If we are reading the replication database, do not open the env
+ * with logging, because we don't want to log the opens.
*/
- if ((ret = dbenv->open(dbenv, home,
+ if (repflag) {
+ if ((ret = dbenv->open(dbenv, home,
+ DB_INIT_MPOOL | DB_USE_ENVIRON, 0)) != 0 &&
+ (ret = dbenv->open(dbenv, home,
+ DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0))
+ != 0) {
+ dbenv->err(dbenv, ret, "open");
+ goto shutdown;
+ }
+ } else if ((ret = dbenv->open(dbenv, home,
DB_JOINENV | DB_USE_ENVIRON, 0)) != 0 &&
(ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_LOG | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0) {
@@ -120,33 +172,48 @@ main(argc, argv)
}
/* Initialize print callbacks. */
- if ((ret = __bam_init_print(dbenv)) != 0 ||
- (ret = __crdel_init_print(dbenv)) != 0 ||
- (ret = __db_init_print(dbenv)) != 0 ||
- (ret = __qam_init_print(dbenv)) != 0 ||
- (ret = __ham_init_print(dbenv)) != 0 ||
- (ret = __log_init_print(dbenv)) != 0 ||
- (ret = __txn_init_print(dbenv)) != 0) {
+ if ((ret = __bam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __dbreg_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __crdel_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __db_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __fop_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __qam_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __ham_init_print(dbenv, &dtab, &dtabsize)) != 0 ||
+ (ret = __txn_init_print(dbenv, &dtab, &dtabsize)) != 0) {
dbenv->err(dbenv, ret, "callback: initialization");
goto shutdown;
}
+ /* Allocate a log cursor. */
+ if (repflag) {
+ if ((ret = open_rep_db(dbenv, &dbp, &dbc)) != 0)
+ goto shutdown;
+ } else if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_cursor");
+ goto shutdown;
+ }
+
memset(&data, 0, sizeof(data));
+ memset(&keydbt, 0, sizeof(keydbt));
while (!__db_util_interrupted()) {
- if ((ret = log_get(dbenv, &key, &data, DB_NEXT)) != 0) {
+ if (repflag) {
+ ret = dbc->c_get(dbc,
+ &keydbt, &data, rflag ? DB_PREV : DB_NEXT);
+ if (ret == 0)
+ key = ((REP_CONTROL *)keydbt.data)->lsn;
+ } else
+ ret = logc->get(logc,
+ &key, &data, rflag ? DB_PREV : DB_NEXT);
+ if (ret != 0) {
if (ret == DB_NOTFOUND)
break;
- dbenv->err(dbenv, ret, "log_get");
+ dbenv->err(dbenv,
+ ret, repflag ? "DB_LOGC->get" : "DBC->get");
goto shutdown;
}
- /*
- * XXX
- * We use DB_TXN_ABORT as our op because that's the only op
- * that calls the underlying recovery function without any
- * consideration as to the contents of the transaction list.
- */
- ret = __db_dispatch(dbenv, &data, &key, DB_TXN_ABORT, NULL);
+ ret = __db_dispatch(dbenv,
+ dtab, dtabsize, &data, &key, DB_TXN_PRINT, NULL);
/*
* XXX
@@ -163,38 +230,134 @@ main(argc, argv)
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (logc != NULL && (ret = logc->close(logc, 0)) != 0)
+ exitval = 1;
+
+ if (dbc != NULL && (ret = dbc->c_close(dbc)) != 0)
+ exitval = 1;
+
+ if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0)
+ exitval = 1;
+
+ /*
+ * The dtab is allocated by __db_add_recovery (called by *_init_print)
+ * using the library malloc function (__os_malloc). It thus needs to be
+ * freed using the corresponding free (__os_free).
+ */
+ if (dtab != NULL)
+ __os_free(dbenv, dtab);
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- fprintf(stderr, "usage: db_printlog [-NV] [-h home]\n");
- exit (1);
+ fprintf(stderr, "%s\n",
+ "usage: db_printlog [-NrV] [-h home] [-P password]");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
+}
+
+/* Print an unknown, application-specific log record as best we can. */
+int
+print_app_record(dbenv, dbt, lsnp, op)
+ DB_ENV *dbenv;
+ DBT *dbt;
+ DB_LSN *lsnp;
+ db_recops op;
+{
+ int ch;
+ u_int32_t i, rectype;
+
+ DB_ASSERT(op == DB_TXN_PRINT);
+
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(op, DB_TXN_PRINT);
+
+ /*
+ * Fetch the rectype, which always must be at the beginning of the
+ * record (if dispatching is to work at all).
+ */
+ memcpy(&rectype, dbt->data, sizeof(rectype));
+
+ /*
+ * Applications may wish to customize the output here based on the
+ * rectype. We just print the entire log record in the generic
+ * mixed-hex-and-printable format we use for binary data.
+ */
+ printf("[%lu][%lu]application specific record: rec: %lu\n",
+ (u_long)lsnp->file, (u_long)lsnp->offset, (u_long)rectype);
+ printf("\tdata: ");
+ for (i = 0; i < dbt->size; i++) {
+ ch = ((u_int8_t *)dbt->data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ printf("\n\n");
+
+ return (0);
+}
+
+int
+open_rep_db(dbenv, dbpp, dbcp)
+ DB_ENV *dbenv;
+ DB **dbpp;
+ DBC **dbcp;
+{
+ int ret;
+
+ DB *dbp;
+ *dbpp = NULL;
+ *dbcp = NULL;
+
+ if ((ret = db_create(dbpp, dbenv, 0)) != 0) {
+ dbenv->err(dbenv, ret, "db_create");
+ return (ret);
+ }
+
+ dbp = *dbpp;
+ if ((ret =
+ dbp->open(dbp, NULL, "__db.rep.db", NULL, DB_BTREE, 0, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open");
+ goto err;
+ }
+
+ if ((ret = dbp->cursor(dbp, NULL, dbcp, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->cursor");
+ goto err;
+ }
+
+ return (0);
+
+err: if (*dbpp != NULL)
+ (void)(*dbpp)->close(*dbpp, 0);
+ return (ret);
}
diff --git a/db/db_printlog/dbname.awk b/db/db_printlog/dbname.awk
index d07033512..41ef97a16 100644
--- a/db/db_printlog/dbname.awk
+++ b/db/db_printlog/dbname.awk
@@ -1,4 +1,4 @@
-# $Id: dbname.awk,v 1.2 2000/08/03 15:06:39 ubell Exp $
+# $Id: dbname.awk,v 1.7 2003/11/21 20:00:03 ubell Exp $
#
# Take a comma-separated list of database names and spit out all the
# log records that affect those databases.
@@ -14,9 +14,10 @@ NR == 1 {
filenames[nfiles] = DBNAME 0;
files[nfiles] = -1
myfile = -1;
+ nreg = 0;
}
-/^\[.*log_register/ {
+/^\[.*dbreg_register/ {
register = 1;
}
/opcode:/ {
@@ -29,12 +30,12 @@ NR == 1 {
}
/name:/ {
if (register >= 2) {
+ myfile = -2;
for (i = 0; i <= nfiles; i++) {
if ($2 == filenames[i]) {
if (register == 2) {
printme = 0;
- myfile = -1;
- files[i] = -1;
+ myfile = -2;
} else {
myfile = i;
}
@@ -45,21 +46,20 @@ NR == 1 {
register = 0;
}
/fileid:/{
- if (myfile != -1) {
- files[myfile] = $2;
+ if (myfile == -2)
+ files[$2] = 0;
+ else if (myfile != -1) {
+ files[$2] = 1;
+ if ($2 > nreg)
+ nreg = $2;
printme = 1;
register = 0;
myfile = -1;
- } else
- for (i = 0; i <= nfiles; i++)
- if ($2 == files[i]) {
- printme = 1
- break;
- }
+ } else if ($2 <= nreg && files[$2] == 1) {
+ printme = 1
+ }
}
-
-
/^\[/{
if (printme == 1) {
printf("%s\n", rec);
@@ -69,6 +69,8 @@ NR == 1 {
rec = $0
}
+
+TXN == 1 && /txn_regop/ {printme = 1}
/^ /{
rec = sprintf("%s\n%s", rec, $0);
}
diff --git a/db/db_printlog/logstat.awk b/db/db_printlog/logstat.awk
index dc9231c9c..1009343eb 100644
--- a/db/db_printlog/logstat.awk
+++ b/db/db_printlog/logstat.awk
@@ -1,4 +1,4 @@
-# Id: logstat.awk,v 1.1 2002/05/10 15:19:13 bostic Exp
+# $Id: logstat.awk,v 1.1 2002/05/10 15:19:13 bostic Exp $
#
# Output accumulated log record count/size statistics.
BEGIN {
diff --git a/db/db_printlog/status.awk b/db/db_printlog/status.awk
index 42e24b078..faf9e0c1f 100644
--- a/db/db_printlog/status.awk
+++ b/db/db_printlog/status.awk
@@ -1,26 +1,50 @@
-# $Id: status.awk,v 10.2 1999/11/21 18:01:43 bostic Exp $
+# $Id: status.awk,v 10.4 2003/07/03 16:05:30 margo Exp $
#
# Read through db_printlog output and list all the transactions encountered
# and whether they commited or aborted.
#
# 1 = started
# 2 = commited
+# 3 = explicitly aborted
+# 4 = other
BEGIN {
cur_txn = 0
}
/^\[/{
+ in_regop = 0
if (status[$5] == 0) {
status[$5] = 1;
txns[cur_txn] = $5;
cur_txn++;
}
}
+/ child:/ {
+ txnid = substr($2, 3);
+ status[txnid] = 2;
+}
/txn_regop/ {
- status[$5] = 2
+ txnid = $5
+ in_regop = 1
+}
+/opcode:/ {
+ if (in_regop == 1) {
+ if ($2 == 1)
+ status[txnid] = 2
+ else if ($2 == 3)
+ status[txnid] = 3
+ else
+ status[txnid] = 4
+ }
}
END {
for (i = 0; i < cur_txn; i++) {
- printf("%s\t%s\n",
- txns[i], status[txns[i]] == 1 ? "ABORT" : "COMMIT");
+ if (status[txns[i]] == 1)
+ printf("%s\tABORT\n", txns[i]);
+ else if (status[txns[i]] == 2)
+ printf("%s\tCOMMIT\n", txns[i]);
+ else if (status[txns[i]] == 3)
+ printf("%s\tABORT\n", txns[i]);
+ else if (status[txns[i]] == 4)
+ printf("%s\tOTHER\n", txns[i]);
}
}
diff --git a/db/db_recover/db_recover.c b/db/db_recover/db_recover.c
index 59ab8bcef..0a2f6b049 100644
--- a/db/db_recover/db_recover.c
+++ b/db/db_recover/db_recover.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_recover.c,v 11.17 2001/01/18 18:36:58 bostic Exp $";
+ "$Id: db_recover.c,v 11.39 2003/09/04 18:06:46 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -34,17 +34,11 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "common_ext.h"
-#include "txn.h"
-int main __P((int, char *[]));
-void read_timestamp __P((char *, time_t *));
-void usage __P((void));
-void version_check __P((void));
-
-DB_ENV *dbenv;
-const char
- *progname = "db_recover"; /* Program name. */
+int main __P((int, char *[]));
+int read_timestamp __P((const char *, char *, time_t *));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -53,43 +47,59 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- DB_TXNREGION *region;
- time_t now, timestamp;
+ const char *progname = "db_recover";
+ DB_ENV *dbenv;
+ time_t timestamp;
u_int32_t flags;
- int ch, exitval, fatal_recover, ret, verbose;
- char *home;
+ int ch, exitval, fatal_recover, ret, retain_env, verbose;
+ char *home, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
- home = NULL;
+ home = passwd = NULL;
timestamp = 0;
- exitval = fatal_recover = verbose = 0;
- while ((ch = getopt(argc, argv, "ch:t:Vv")) != EOF)
+ exitval = fatal_recover = retain_env = verbose = 0;
+ while ((ch = getopt(argc, argv, "ceh:P:t:Vv")) != EOF)
switch (ch) {
case 'c':
fatal_recover = 1;
break;
+ case 'e':
+ retain_env = 1;
+ break;
case 'h':
home = optarg;
break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
+ }
+ break;
case 't':
- read_timestamp(optarg, &timestamp);
+ if ((ret =
+ read_timestamp(progname, optarg, &timestamp)) != 0)
+ return (ret);
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case 'v':
verbose = 1;
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -101,7 +111,7 @@ main(argc, argv)
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
- exit (1);
+ return (EXIT_FAILURE);
}
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
@@ -111,7 +121,13 @@ main(argc, argv)
}
if (timestamp &&
(ret = dbenv->set_tx_timestamp(dbenv, &timestamp)) != 0) {
- dbenv->err(dbenv, ret, "DBENV->set_timestamp");
+ dbenv->err(dbenv, ret, "DB_ENV->set_timestamp");
+ goto shutdown;
+ }
+
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
goto shutdown;
}
@@ -119,31 +135,24 @@ main(argc, argv)
* Initialize the environment -- we don't actually do anything
* else, that all that's needed to run recovery.
*
- * Note that we specify a private environment, as we're about to
- * create a region, and we don't want to to leave it around. If
- * we leave the region around, the application that should create
- * it will simply join it instead, and will then be running with
- * incorrectly sized (and probably terribly small) caches.
+ * Note that unless the caller specified the -e option, we use a
+ * private environment, as we're about to create a region, and we
+ * don't want to to leave it around. If we leave the region around,
+ * the application that should create it will simply join it instead,
+ * and will then be running with incorrectly sized (and probably
+ * terribly small) caches. Applications that use -e should almost
+ * certainly use DB_CONFIG files in the directory.
*/
flags = 0;
LF_SET(DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
- DB_INIT_MPOOL | DB_INIT_TXN | DB_PRIVATE | DB_USE_ENVIRON);
+ DB_INIT_MPOOL | DB_INIT_TXN | DB_USE_ENVIRON);
LF_SET(fatal_recover ? DB_RECOVER_FATAL : DB_RECOVER);
+ LF_SET(retain_env ? 0 : DB_PRIVATE);
if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
- dbenv->err(dbenv, ret, "DBENV->open");
+ dbenv->err(dbenv, ret, "DB_ENV->open");
goto shutdown;
}
- if (verbose) {
- (void)time(&now);
- region = ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary;
- dbenv->errx(dbenv, "Recovery complete at %.24s", ctime(&now));
- dbenv->errx(dbenv, "%s %lx %s [%lu][%lu]",
- "Maximum transaction id", (u_long)region->last_txnid,
- "Recovery checkpoint", (u_long)region->last_ckp.file,
- (u_long)region->last_ckp.offset);
- }
-
if (0) {
shutdown: exitval = 1;
}
@@ -154,11 +163,13 @@ shutdown: exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
@@ -194,8 +205,9 @@ shutdown: exitval = 1;
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
-void
-read_timestamp(arg, timep)
+int
+read_timestamp(progname, arg, timep)
+ const char *progname;
char *arg;
time_t *timep;
{
@@ -208,7 +220,7 @@ read_timestamp(arg, timep)
if ((t = localtime(&now)) == NULL) {
fprintf(stderr,
"%s: localtime: %s\n", progname, strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
/* [[CC]YY]MMDDhhmm[.SS] */
if ((p = strchr(arg, '.')) == NULL)
@@ -221,12 +233,12 @@ read_timestamp(arg, timep)
}
yearset = 0;
- switch(strlen(arg)) {
+ switch (strlen(arg)) {
case 12: /* CCYYMMDDhhmm */
t->tm_year = ATOI2(arg);
t->tm_year *= 100;
yearset = 1;
- /* FALLTHOUGH */
+ /* FALLTHROUGH */
case 10: /* YYMMDDhhmm */
if (yearset) {
yearset = ATOI2(arg);
@@ -258,31 +270,33 @@ read_timestamp(arg, timep)
terr: fprintf(stderr,
"%s: out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]",
progname);
- exit (1);
+ return (EXIT_FAILURE);
}
+ return (0);
}
-void
+int
usage()
{
- (void)fprintf(stderr,
- "usage: db_recover [-cVv] [-h home] [-t [[CC]YY]MMDDhhmm[.SS]]\n");
- exit(1);
+ (void)fprintf(stderr, "%s\n",
+"usage: db_recover [-ceVv] [-h home] [-P password] [-t [[CC]YY]MMDDhhmm[.SS]]");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_stat/db_stat.c b/db/db_stat/db_stat.c
index 9d80caa48..54b55efbe 100644
--- a/db/db_stat/db_stat.c
+++ b/db/db_stat/db_stat.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_stat.c,v 11.42 2001/01/18 18:36:59 bostic Exp $";
+ "$Id: db_stat.c,v 11.142 2003/10/27 19:47:25 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -35,41 +35,35 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "mp.h"
+#include "dbinc/db_page.h"
+#include "dbinc/txn.h"
#define PCT(f, t, pgsize) \
((t) == 0 ? 0 : \
- (((double)(((t) * (pgsize)) - (f)) / ((t) * (pgsize))) * 100))
+ ((((((double)t) * (pgsize)) - (f)) / (((double)t) * (pgsize))) * 100))
-typedef enum { T_NOTSET, T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_TXN } test_t;
+typedef enum { T_NOTSET,
+ T_DB, T_ENV, T_LOCK, T_LOG, T_MPOOL, T_REP, T_TXN } test_t;
int argcheck __P((char *, const char *));
-int btree_stats __P((DB_ENV *, DB *, DB_BTREE_STAT *));
-int db_init __P((char *, test_t));
+int btree_stats __P((DB_ENV *, DB *, DB_BTREE_STAT *, u_int32_t));
+int db_init __P((DB_ENV *, char *, test_t, u_int32_t, int *));
void dl __P((const char *, u_long));
void dl_bytes __P((const char *, u_long, u_long, u_long));
-int env_stats __P((DB_ENV *));
-int hash_stats __P((DB_ENV *, DB *));
-int lock_ok __P((char *));
-int lock_stats __P((DB_ENV *));
-int log_stats __P((DB_ENV *));
+int env_stats __P((DB_ENV *, u_int32_t));
+int hash_stats __P((DB_ENV *, DB *, u_int32_t));
+int lock_stats __P((DB_ENV *, char *, u_int32_t));
+int log_stats __P((DB_ENV *, u_int32_t));
int main __P((int, char *[]));
-int mpool_ok __P((char *));
-int mpool_stats __P((DB_ENV *));
-void prflags __P((u_int32_t, const FN *));
-int queue_stats __P((DB_ENV *, DB *));
+int mpool_stats __P((DB_ENV *, char *, u_int32_t));
+void prflags __P((DB *, u_int32_t, const FN *));
+int queue_stats __P((DB_ENV *, DB *, u_int32_t));
+int rep_stats __P((DB_ENV *, u_int32_t));
int txn_compare __P((const void *, const void *));
-int txn_stats __P((DB_ENV *));
-void usage __P((void));
-void version_check __P((void));
-
-DB_ENV *dbenv;
-char *internal;
-const char
- *progname = "db_stat"; /* Program name. */
+int txn_stats __P((DB_ENV *, u_int32_t));
+void txn_xid_stats __P((DB_TXN_ACTIVE *));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -78,72 +72,116 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ const char *progname = "db_stat";
+ DB_ENV *dbenv;
DB_BTREE_STAT *sp;
DB *alt_dbp, *dbp;
test_t ttype;
- int ch, checked, d_close, e_close, exitval, nflag, ret;
- char *db, *home, *subdb;
+ u_int32_t cache, env_flags, fast, flags;
+ int ch, checked, exitval;
+ int nflag, private, resize, ret;
+ char *db, *home, *internal, *passwd, *subdb;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
+ dbenv = NULL;
dbp = NULL;
ttype = T_NOTSET;
- nflag = 0;
- d_close = e_close = exitval = 0;
- db = home = subdb = NULL;
- while ((ch = getopt(argc, argv, "C:cd:eh:lM:mNs:tV")) != EOF)
+ cache = MEGABYTE;
+ exitval = fast = flags = nflag = private = 0;
+ db = home = internal = passwd = subdb = NULL;
+ env_flags = 0;
+
+ while ((ch = getopt(argc, argv, "C:cd:efh:lM:mNP:rs:tVZ")) != EOF)
switch (ch) {
case 'C':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_LOCK;
- if (!argcheck(internal = optarg, "Acflmo"))
- usage();
+ if (!argcheck(internal = optarg, "Aclmop"))
+ return (usage());
break;
case 'c':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_LOCK;
break;
case 'd':
- db = optarg;
+ if (ttype != T_DB && ttype != T_NOTSET)
+ goto argcombo;
ttype = T_DB;
+ db = optarg;
break;
case 'e':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_ENV;
break;
+ case 'f':
+ fast = DB_FAST_STAT;
+ break;
case 'h':
home = optarg;
break;
case 'l':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_LOG;
break;
case 'M':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_MPOOL;
- if (!argcheck(internal = optarg, "Ahlm"))
- usage();
+ if (!argcheck(internal = optarg, "Ahm"))
+ return (usage());
break;
case 'm':
+ if (ttype != T_NOTSET)
+ goto argcombo;
ttype = T_MPOOL;
break;
case 'N':
nflag = 1;
- if ((ret = db_env_set_panicstate(0)) != 0) {
- fprintf(stderr,
- "%s: db_env_set_panicstate: %s\n",
- progname, db_strerror(ret));
- return (1);
+ break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
+ case 'r':
+ if (ttype != T_NOTSET)
+ goto argcombo;
+ ttype = T_REP;
+ break;
case 's':
- subdb = optarg;
+ if (ttype != T_DB && ttype != T_NOTSET)
+ goto argcombo;
ttype = T_DB;
+ subdb = optarg;
break;
case 't':
+ if (ttype != T_NOTSET) {
+argcombo: fprintf(stderr,
+ "%s: illegal option combination\n",
+ progname);
+ return (EXIT_FAILURE);
+ }
ttype = T_TXN;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
+ case 'Z':
+ flags |= DB_STAT_CLEAR;
+ break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
@@ -151,12 +189,19 @@ main(argc, argv)
switch (ttype) {
case T_DB:
if (db == NULL)
- usage();
+ return (usage());
break;
case T_NOTSET:
- usage();
+ return (usage());
/* NOTREACHED */
- default:
+ case T_ENV:
+ case T_LOCK:
+ case T_LOG:
+ case T_MPOOL:
+ case T_REP:
+ case T_TXN:
+ if (fast != 0)
+ return (usage());
break;
}
@@ -167,39 +212,67 @@ main(argc, argv)
* Create an environment object and initialize it for error
* reporting.
*/
- if ((ret = db_env_create(&dbenv, 0)) != 0) {
+retry: if ((ret = db_env_create(&dbenv, env_flags)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
- if (nflag && (ret = dbenv->set_mutexlocks(dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "set_mutexlocks");
+ if (nflag) {
+ if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
+ goto shutdown;
+ }
+ if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
+ goto shutdown;
+ }
+ }
+
+ if (passwd != NULL &&
+ (ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
goto shutdown;
}
/* Initialize the environment. */
- if (db_init(home, ttype) != 0)
+ if (db_init(dbenv, home, ttype, cache, &private) != 0)
goto shutdown;
switch (ttype) {
case T_DB:
/* Create the DB object and open the file. */
+ if (flags != 0)
+ return (usage());
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
goto shutdown;
}
- if ((ret =
- dbp->open(dbp, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
- dbp->err(dbp, ret, "open: %s", db);
+ if ((ret = dbp->open(dbp,
+ NULL, db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ dbp->err(dbp, ret, "DB->open: %s", db);
goto shutdown;
}
+ /* Check if cache is too small for this DB's pagesize. */
+ if (private) {
+ if ((ret =
+ __db_util_cache(dbenv, dbp, &cache, &resize)) != 0)
+ goto shutdown;
+ if (resize) {
+ (void)dbp->close(dbp, DB_NOSYNC);
+ dbp = NULL;
+
+ (void)dbenv->close(dbenv, 0);
+ dbenv = NULL;
+ goto retry;
+ }
+ }
+
/*
* See if we can open this db read/write to update counts.
* If its a master-db then we cannot. So check to see,
@@ -207,9 +280,9 @@ main(argc, argv)
*/
checked = 0;
if (subdb == NULL && dbp->type == DB_BTREE) {
- if ((ret = dbp->stat(dbp, &sp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "dbp->stat");
- return (1);
+ if ((ret = dbp->stat(dbp, &sp, DB_FAST_STAT)) != 0) {
+ dbp->err(dbp, ret, "DB->stat");
+ goto shutdown;
}
checked = 1;
}
@@ -221,77 +294,90 @@ main(argc, argv)
dbenv->err(dbenv, ret, "db_create");
goto shutdown;
}
- if ((ret = dbp->open(alt_dbp,
- db, subdb, DB_UNKNOWN, 0, 0)) == 0) {
- (void)dbp->close(dbp, 0);
- dbp = alt_dbp;
+ if ((ret = dbp->open(alt_dbp, NULL,
+ db, subdb, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ dbenv->err(dbenv,
+ ret, "DB->open: %s:%s", db, subdb);
+ (void)alt_dbp->close(alt_dbp, DB_NOSYNC);
+ goto shutdown;
}
+
+ (void)dbp->close(dbp, DB_NOSYNC);
+ dbp = alt_dbp;
+
/* Need to run again to update counts */
checked = 0;
}
- d_close = 1;
switch (dbp->type) {
case DB_BTREE:
case DB_RECNO:
- if (btree_stats(dbenv, dbp, checked == 1 ? sp : NULL))
+ if (btree_stats(
+ dbenv, dbp, checked == 1 ? sp : NULL, fast))
goto shutdown;
break;
case DB_HASH:
- if (hash_stats(dbenv, dbp))
+ if (hash_stats(dbenv, dbp, fast))
goto shutdown;
break;
case DB_QUEUE:
- if (queue_stats(dbenv, dbp))
+ if (queue_stats(dbenv, dbp, fast))
goto shutdown;
break;
case DB_UNKNOWN:
- abort(); /* Impossible. */
- /* NOTREACHED */
+ dbenv->errx(dbenv, "Unknown database type.");
+ goto shutdown;
}
break;
case T_ENV:
- if (env_stats(dbenv))
- exitval = 1;
+ if (env_stats(dbenv, flags))
+ goto shutdown;
break;
case T_LOCK:
- if (lock_stats(dbenv))
- exitval = 1;
+ if (lock_stats(dbenv, internal, flags))
+ goto shutdown;
break;
case T_LOG:
- if (log_stats(dbenv))
- exitval = 1;
+ if (log_stats(dbenv, flags))
+ goto shutdown;
break;
case T_MPOOL:
- if (mpool_stats(dbenv))
- exitval = 1;
+ if (mpool_stats(dbenv, internal, flags))
+ goto shutdown;
+ break;
+ case T_REP:
+ if (rep_stats(dbenv, flags))
+ goto shutdown;
break;
case T_TXN:
- if (txn_stats(dbenv))
- exitval = 1;
+ if (txn_stats(dbenv, flags))
+ goto shutdown;
break;
case T_NOTSET:
- abort(); /* Impossible. */
- /* NOTREACHED */
+ dbenv->errx(dbenv, "Unknown statistics flag.");
+ goto shutdown;
}
if (0) {
shutdown: exitval = 1;
}
- if (d_close && (ret = dbp->close(dbp, 0)) != 0) {
+ if (dbp != NULL && (ret = dbp->close(dbp, DB_NOSYNC)) != 0) {
exitval = 1;
- dbp->err(dbp, ret, "close");
+ dbenv->err(dbenv, ret, "close");
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
/*
@@ -299,8 +385,9 @@ shutdown: exitval = 1;
* Display environment statistics.
*/
int
-env_stats(dbenvp)
- DB_ENV *dbenvp;
+env_stats(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
{
REGENV renv;
REGION *rp, regs[1024];
@@ -308,15 +395,15 @@ env_stats(dbenvp)
const char *lable;
n = sizeof(regs) / sizeof(regs[0]);
- if ((ret = __db_e_stat(dbenvp, &renv, regs, &n)) != 0) {
- dbenvp->err(dbenvp, ret, "__db_e_stat");
+ if ((ret = __db_e_stat(dbenv, &renv, regs, &n, flags)) != 0) {
+ dbenv->err(dbenv, ret, "__db_e_stat");
return (1);
}
printf("%d.%d.%d\tEnvironment version.\n",
renv.majver, renv.minver, renv.patch);
printf("%lx\tMagic number.\n", (u_long)renv.magic);
- printf("%d\tPanic value.\n", renv.panic);
+ printf("%d\tPanic value.\n", renv.envpanic);
/* Adjust the reference count for us... */
printf("%d\tReferences.\n", renv.refcnt - 1);
@@ -370,10 +457,11 @@ env_stats(dbenvp)
* Display btree/recno statistics.
*/
int
-btree_stats(dbenvp, dbp, msp)
- DB_ENV *dbenvp;
+btree_stats(dbenv, dbp, msp, fast)
+ DB_ENV *dbenv;
DB *dbp;
DB_BTREE_STAT *msp;
+ u_int32_t fast;
{
static const FN fn[] = {
{ BTM_DUP, "duplicates" },
@@ -387,18 +475,18 @@ btree_stats(dbenvp, dbp, msp)
DB_BTREE_STAT *sp;
int ret;
- COMPQUIET(dbenvp, NULL);
+ COMPQUIET(dbenv, NULL);
if (msp != NULL)
sp = msp;
- else if ((ret = dbp->stat(dbp, &sp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "dbp->stat");
+ else if ((ret = dbp->stat(dbp, &sp, fast)) != 0) {
+ dbp->err(dbp, ret, "DB->stat");
return (1);
}
printf("%lx\tBtree magic number.\n", (u_long)sp->bt_magic);
printf("%lu\tBtree version number.\n", (u_long)sp->bt_version);
- prflags(sp->bt_metaflags, fn);
+ prflags(dbp, sp->bt_metaflags, fn);
if (dbp->type == DB_BTREE) {
#ifdef NOT_IMPLEMENTED
dl("Maximum keys per-page.\n", (u_long)sp->bt_maxkey);
@@ -407,7 +495,7 @@ btree_stats(dbenvp, dbp, msp)
}
if (dbp->type == DB_RECNO) {
dl("Fixed-length record size.\n", (u_long)sp->bt_re_len);
- if (isprint(sp->bt_re_pad) && !isspace(sp->bt_re_pad))
+ if (isprint((int)sp->bt_re_pad) && !isspace((int)sp->bt_re_pad))
printf("%c\tFixed-length record pad.\n",
(int)sp->bt_re_pad);
else
@@ -447,6 +535,8 @@ btree_stats(dbenvp, dbp, msp)
dl("Number of pages on the free list.\n", (u_long)sp->bt_free);
+ free(sp);
+
return (0);
}
@@ -455,9 +545,10 @@ btree_stats(dbenvp, dbp, msp)
* Display hash statistics.
*/
int
-hash_stats(dbenvp, dbp)
- DB_ENV *dbenvp;
+hash_stats(dbenv, dbp, fast)
+ DB_ENV *dbenv;
DB *dbp;
+ u_int32_t fast;
{
static const FN fn[] = {
{ DB_HASH_DUP, "duplicates" },
@@ -467,17 +558,18 @@ hash_stats(dbenvp, dbp)
DB_HASH_STAT *sp;
int ret;
- COMPQUIET(dbenvp, NULL);
+ COMPQUIET(dbenv, NULL);
- if ((ret = dbp->stat(dbp, &sp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "dbp->stat");
+ if ((ret = dbp->stat(dbp, &sp, fast)) != 0) {
+ dbp->err(dbp, ret, "DB->stat");
return (1);
}
printf("%lx\tHash magic number.\n", (u_long)sp->hash_magic);
printf("%lu\tHash version number.\n", (u_long)sp->hash_version);
- prflags(sp->hash_metaflags, fn);
+ prflags(dbp, sp->hash_metaflags, fn);
dl("Underlying database page size.\n", (u_long)sp->hash_pagesize);
+ dl("Specified fill factor.\n", (u_long)sp->hash_ffactor);
dl("Number of keys in the database.\n", (u_long)sp->hash_nkeys);
dl("Number of data items in the database.\n", (u_long)sp->hash_ndata);
@@ -506,6 +598,8 @@ hash_stats(dbenvp, dbp)
dl("Number of pages on the free list.\n", (u_long)sp->hash_free);
+ free(sp);
+
return (0);
}
@@ -514,28 +608,32 @@ hash_stats(dbenvp, dbp)
* Display queue statistics.
*/
int
-queue_stats(dbenvp, dbp)
- DB_ENV *dbenvp;
+queue_stats(dbenv, dbp, fast)
+ DB_ENV *dbenv;
DB *dbp;
+ u_int32_t fast;
{
DB_QUEUE_STAT *sp;
int ret;
- COMPQUIET(dbenvp, NULL);
+ COMPQUIET(dbenv, NULL);
- if ((ret = dbp->stat(dbp, &sp, NULL, 0)) != 0) {
- dbp->err(dbp, ret, "dbp->stat");
+ if ((ret = dbp->stat(dbp, &sp, fast)) != 0) {
+ dbp->err(dbp, ret, "DB->stat");
return (1);
}
printf("%lx\tQueue magic number.\n", (u_long)sp->qs_magic);
printf("%lu\tQueue version number.\n", (u_long)sp->qs_version);
dl("Fixed-length record size.\n", (u_long)sp->qs_re_len);
- if (isprint(sp->qs_re_pad) && !isspace(sp->qs_re_pad))
+ if (isprint((int)sp->qs_re_pad) && !isspace((int)sp->qs_re_pad))
printf("%c\tFixed-length record pad.\n", (int)sp->qs_re_pad);
else
printf("0x%x\tFixed-length record pad.\n", (int)sp->qs_re_pad);
dl("Underlying database page size.\n", (u_long)sp->qs_pagesize);
+ if (sp->qs_extentsize != 0)
+ dl("Underlying database extent size.\n",
+ (u_long)sp->qs_extentsize);
dl("Number of records in the database.\n", (u_long)sp->qs_nkeys);
dl("Number of database pages.\n", (u_long)sp->qs_pages);
dl("Number of bytes free in database pages", (u_long)sp->qs_pgfree);
@@ -543,7 +641,9 @@ queue_stats(dbenvp, dbp)
PCT(sp->qs_pgfree, sp->qs_pages, sp->qs_pagesize));
printf("%lu\tFirst undeleted record.\n", (u_long)sp->qs_first_recno);
printf(
- "%lu\tLast allocated record number.\n", (u_long)sp->qs_cur_recno);
+ "%lu\tNext available record number.\n", (u_long)sp->qs_cur_recno);
+
+ free(sp);
return (0);
}
@@ -553,46 +653,68 @@ queue_stats(dbenvp, dbp)
* Display lock statistics.
*/
int
-lock_stats(dbenvp)
- DB_ENV *dbenvp;
+lock_stats(dbenv, internal, flags)
+ DB_ENV *dbenv;
+ char *internal;
+ u_int32_t flags;
{
DB_LOCK_STAT *sp;
int ret;
if (internal != NULL) {
- __lock_dump_region(dbenvp, internal, stdout);
+ if ((ret =
+ dbenv->lock_dump_region(dbenv, internal, stdout)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
+ return (1);
+ }
return (0);
}
- if ((ret = lock_stat(dbenvp, &sp, NULL)) != 0) {
- dbenvp->err(dbenvp, ret, NULL);
+ if ((ret = dbenv->lock_stat(dbenv, &sp, flags)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
return (1);
}
- dl("Last allocated locker ID.\n", (u_long)sp->st_lastid);
+ dl("Last allocated locker ID.\n", (u_long)sp->st_id);
+ dl("Current maximum unused locker ID.\n", (u_long)sp->st_cur_maxid);
dl("Number of lock modes.\n", (u_long)sp->st_nmodes);
dl("Maximum number of locks possible.\n", (u_long)sp->st_maxlocks);
dl("Maximum number of lockers possible.\n", (u_long)sp->st_maxlockers);
- dl("Maximum number of objects possible.\n", (u_long)sp->st_maxobjects);
- dl("Current locks.\n", (u_long)sp->st_nlocks);
- dl("Maximum number of locks so far.\n", (u_long)sp->st_maxnlocks);
- dl("Current number of lockers.\n", (u_long)sp->st_nlockers);
- dl("Maximum number lockers so far.\n", (u_long)sp->st_maxnlockers);
- dl("Current number lock objects.\n", (u_long)sp->st_nobjects);
- dl("Maximum number of lock objects so far.\n",
+ dl("Maximum number of lock objects possible.\n",
+ (u_long)sp->st_maxobjects);
+ dl("Number of current locks.\n", (u_long)sp->st_nlocks);
+ dl("Maximum number of locks at any one time.\n",
+ (u_long)sp->st_maxnlocks);
+ dl("Number of current lockers.\n", (u_long)sp->st_nlockers);
+ dl("Maximum number of lockers at any one time.\n",
+ (u_long)sp->st_maxnlockers);
+ dl("Number of current lock objects.\n", (u_long)sp->st_nobjects);
+ dl("Maximum number of lock objects at any one time.\n",
(u_long)sp->st_maxnobjects);
- dl("Number of lock requests.\n", (u_long)sp->st_nrequests);
- dl("Number of lock releases.\n", (u_long)sp->st_nreleases);
- dl("Number of lock requests that would have waited.\n",
+ dl("Total number of locks requested.\n", (u_long)sp->st_nrequests);
+ dl("Total number of locks released.\n", (u_long)sp->st_nreleases);
+ dl(
+ "Total number of lock requests failing because DB_LOCK_NOWAIT was set.\n",
(u_long)sp->st_nnowaits);
- dl("Number of lock conflicts.\n", (u_long)sp->st_nconflicts);
+ dl(
+ "Total number of locks not immediately available due to conflicts.\n",
+ (u_long)sp->st_nconflicts);
dl("Number of deadlocks.\n", (u_long)sp->st_ndeadlocks);
- dl_bytes("Lock region size",
+ dl("Lock timeout value.\n", (u_long)sp->st_locktimeout);
+ dl("Number of locks that have timed out.\n",
+ (u_long)sp->st_nlocktimeouts);
+ dl("Transaction timeout value.\n", (u_long)sp->st_txntimeout);
+ dl("Number of transactions that have timed out.\n",
+ (u_long)sp->st_ntxntimeouts);
+
+ dl_bytes("The size of the lock region.",
(u_long)0, (u_long)0, (u_long)sp->st_regsize);
- dl("The number of region locks granted without waiting.\n",
- (u_long)sp->st_region_nowait);
dl("The number of region locks granted after waiting.\n",
(u_long)sp->st_region_wait);
+ dl("The number of region locks granted without waiting.\n",
+ (u_long)sp->st_region_nowait);
+
+ free(sp);
return (0);
}
@@ -602,31 +724,32 @@ lock_stats(dbenvp)
* Display log statistics.
*/
int
-log_stats(dbenvp)
- DB_ENV *dbenvp;
+log_stats(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
{
DB_LOG_STAT *sp;
int ret;
- if ((ret = log_stat(dbenvp, &sp, NULL)) != 0) {
- dbenvp->err(dbenvp, ret, NULL);
+ if ((ret = dbenv->log_stat(dbenv, &sp, flags)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
return (1);
}
printf("%lx\tLog magic number.\n", (u_long)sp->st_magic);
printf("%lu\tLog version number.\n", (u_long)sp->st_version);
- dl_bytes("Log region size",
- (u_long)0, (u_long)0, (u_long)sp->st_regsize);
dl_bytes("Log record cache size",
(u_long)0, (u_long)0, (u_long)sp->st_lg_bsize);
printf("%#o\tLog file mode.\n", sp->st_mode);
- if (sp->st_lg_max % MEGABYTE == 0)
- printf("%luMb\tLog file size.\n",
- (u_long)sp->st_lg_max / MEGABYTE);
- else if (sp->st_lg_max % 1024 == 0)
- printf("%luKb\tLog file size.\n", (u_long)sp->st_lg_max / 1024);
+ if (sp->st_lg_size % MEGABYTE == 0)
+ printf("%luMb\tCurrent log file size.\n",
+ (u_long)sp->st_lg_size / MEGABYTE);
+ else if (sp->st_lg_size % 1024 == 0)
+ printf("%luKb\tCurrent log file size.\n",
+ (u_long)sp->st_lg_size / 1024);
else
- printf("%lu\tLog file size.\n", (u_long)sp->st_lg_max);
+ printf("%lu\tCurrent log file size.\n",
+ (u_long)sp->st_lg_size);
dl_bytes("Log bytes written",
(u_long)0, (u_long)sp->st_w_mbytes, (u_long)sp->st_w_bytes);
dl_bytes("Log bytes written since last checkpoint",
@@ -637,10 +760,20 @@ log_stats(dbenvp)
dl("Total log file flushes.\n", (u_long)sp->st_scount);
printf("%lu\tCurrent log file number.\n", (u_long)sp->st_cur_file);
printf("%lu\tCurrent log file offset.\n", (u_long)sp->st_cur_offset);
- dl("The number of region locks granted without waiting.\n",
- (u_long)sp->st_region_nowait);
+ printf("%lu\tOn-disk log file number.\n", (u_long)sp->st_disk_file);
+ printf("%lu\tOn-disk log file offset.\n", (u_long)sp->st_disk_offset);
+
+ dl("Max commits in a log flush.\n", (u_long)sp->st_maxcommitperflush);
+ dl("Min commits in a log flush.\n", (u_long)sp->st_mincommitperflush);
+
+ dl_bytes("Log region size",
+ (u_long)0, (u_long)0, (u_long)sp->st_regsize);
dl("The number of region locks granted after waiting.\n",
(u_long)sp->st_region_wait);
+ dl("The number of region locks granted without waiting.\n",
+ (u_long)sp->st_region_nowait);
+
+ free(sp);
return (0);
}
@@ -650,34 +783,41 @@ log_stats(dbenvp)
* Display mpool statistics.
*/
int
-mpool_stats(dbenvp)
- DB_ENV *dbenvp;
+mpool_stats(dbenv, internal, flags)
+ DB_ENV *dbenv;
+ char *internal;
+ u_int32_t flags;
{
DB_MPOOL_FSTAT **fsp;
DB_MPOOL_STAT *gsp;
int ret;
if (internal != NULL) {
- __memp_dump_region(dbenvp, internal, stdout);
- return (1);
+ if ((ret =
+ dbenv->memp_dump_region(dbenv, internal, stdout)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
+ return (1);
+ }
+ return (0);
}
- if ((ret = memp_stat(dbenvp, &gsp, &fsp, NULL)) != 0) {
- dbenvp->err(dbenvp, ret, NULL);
+ if ((ret = dbenv->memp_stat(dbenv, &gsp, &fsp, flags)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
return (1);
}
dl_bytes("Total cache size",
(u_long)gsp->st_gbytes, (u_long)0, (u_long)gsp->st_bytes);
dl("Number of caches.\n", (u_long)gsp->st_ncache);
- dl("Pool individual cache size.\n", (u_long)gsp->st_regsize);
+ dl_bytes("Pool individual cache size",
+ (u_long)0, (u_long)0, (u_long)gsp->st_regsize);
+ dl("Requested pages mapped into the process' address space.\n",
+ (u_long)gsp->st_map);
dl("Requested pages found in the cache", (u_long)gsp->st_cache_hit);
if (gsp->st_cache_hit + gsp->st_cache_miss != 0)
printf(" (%.0f%%)", ((double)gsp->st_cache_hit /
(gsp->st_cache_hit + gsp->st_cache_miss)) * 100);
printf(".\n");
- dl("Requested pages mapped into the process' address space.\n",
- (u_long)gsp->st_map);
dl("Requested pages not found in the cache.\n",
(u_long)gsp->st_cache_miss);
dl("Pages created in the cache.\n", (u_long)gsp->st_page_create);
@@ -688,11 +828,13 @@ mpool_stats(dbenvp)
(u_long)gsp->st_ro_evict);
dl("Dirty pages forced from the cache.\n",
(u_long)gsp->st_rw_evict);
- dl("Dirty buffers written by trickle-sync thread.\n",
+ dl("Dirty pages written by trickle-sync thread.\n",
(u_long)gsp->st_page_trickle);
- dl("Current clean buffer count.\n",
+ dl("Current total page count.\n",
+ (u_long)gsp->st_pages);
+ dl("Current clean page count.\n",
(u_long)gsp->st_page_clean);
- dl("Current dirty buffer count.\n",
+ dl("Current dirty page count.\n",
(u_long)gsp->st_page_dirty);
dl("Number of hash buckets used for page location.\n",
(u_long)gsp->st_hash_buckets);
@@ -702,15 +844,33 @@ mpool_stats(dbenvp)
(u_long)gsp->st_hash_longest);
dl("Total number of hash buckets examined for page location.\n",
(u_long)gsp->st_hash_examined);
+ dl("The number of hash bucket locks granted without waiting.\n",
+ (u_long)gsp->st_hash_nowait);
+ dl("The number of hash bucket locks granted after waiting.\n",
+ (u_long)gsp->st_hash_wait);
+ dl("The maximum number of times any hash bucket lock was waited for.\n",
+ (u_long)gsp->st_hash_max_wait);
dl("The number of region locks granted without waiting.\n",
(u_long)gsp->st_region_nowait);
dl("The number of region locks granted after waiting.\n",
(u_long)gsp->st_region_wait);
+ dl("The number of page allocations.\n",
+ (u_long)gsp->st_alloc);
+ dl("The number of hash buckets examined during allocations\n",
+ (u_long)gsp->st_alloc_buckets);
+ dl("The max number of hash buckets examined for an allocation\n",
+ (u_long)gsp->st_alloc_max_buckets);
+ dl("The number of pages examined during allocations\n",
+ (u_long)gsp->st_alloc_pages);
+ dl("The max number of pages examined for an allocation\n",
+ (u_long)gsp->st_alloc_max_pages);
for (; fsp != NULL && *fsp != NULL; ++fsp) {
printf("%s\n", DB_LINE);
printf("Pool File: %s\n", (*fsp)->file_name);
dl("Page size.\n", (u_long)(*fsp)->st_pagesize);
+ dl("Requested pages mapped into the process' address space.\n",
+ (u_long)(*fsp)->st_map);
dl("Requested pages found in the cache",
(u_long)(*fsp)->st_cache_hit);
if ((*fsp)->st_cache_hit + (*fsp)->st_cache_miss != 0)
@@ -718,8 +878,6 @@ mpool_stats(dbenvp)
((*fsp)->st_cache_hit + (*fsp)->st_cache_miss)) *
100);
printf(".\n");
- dl("Requested pages mapped into the process' address space.\n",
- (u_long)(*fsp)->st_map);
dl("Requested pages not found in the cache.\n",
(u_long)(*fsp)->st_cache_miss);
dl("Pages created in the cache.\n",
@@ -730,6 +888,125 @@ mpool_stats(dbenvp)
(u_long)(*fsp)->st_page_out);
}
+ free(gsp);
+
+ return (0);
+}
+
+/*
+ * rep_stats --
+ * Display replication statistics.
+ */
+int
+rep_stats(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
+{
+ DB_REP_STAT *sp;
+ int is_client, ret;
+ const char *p;
+
+ if ((ret = dbenv->rep_stat(dbenv, &sp, flags)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
+ return (1);
+ }
+
+ is_client = 0;
+ switch (sp->st_status) {
+ case DB_REP_MASTER:
+ printf("Environment configured as a replication master.\n");
+ break;
+ case DB_REP_CLIENT:
+ printf("Environment configured as a replication client.\n");
+ is_client = 1;
+ break;
+ case DB_REP_LOGSONLY:
+ printf("Environment configured as a logs-only replica.\n");
+ is_client = 1;
+ break;
+ default:
+ printf("Environment not configured for replication.\n");
+ break;
+ }
+
+ printf("%lu/%lu\t%s\n",
+ (u_long)sp->st_next_lsn.file, (u_long)sp->st_next_lsn.offset,
+ is_client ? "Next LSN expected." : "Next LSN to be used.");
+ p = sp->st_waiting_lsn.file == 0 ?
+ "Not waiting for any missed log records." :
+ "LSN of first log record we have after missed log records.";
+ printf("%lu/%lu\t%s\n",
+ (u_long)sp->st_waiting_lsn.file, (u_long)sp->st_waiting_lsn.offset,
+ p);
+
+ dl("Number of duplicate master conditions detected.\n",
+ (u_long)sp->st_dupmasters);
+ if (sp->st_env_id != DB_EID_INVALID)
+ dl("Current environment ID.\n", (u_long)sp->st_env_id);
+ else
+ printf("No current environment ID.\n");
+ dl("Current environment priority.\n", (u_long)sp->st_env_priority);
+ dl("Current generation number.\n", (u_long)sp->st_gen);
+ dl("Number of duplicate log records received.\n",
+ (u_long)sp->st_log_duplicated);
+ dl("Number of log records currently queued.\n",
+ (u_long)sp->st_log_queued);
+ dl("Maximum number of log records ever queued at once.\n",
+ (u_long)sp->st_log_queued_max);
+ dl("Total number of log records queued.\n",
+ (u_long)sp->st_log_queued_total);
+ dl("Number of log records received and appended to the log.\n",
+ (u_long)sp->st_log_records);
+ dl("Number of log records missed and requested.\n",
+ (u_long)sp->st_log_requested);
+ if (sp->st_master != DB_EID_INVALID)
+ dl("Current master ID.\n", (u_long)sp->st_master);
+ else
+ printf("No current master ID.\n");
+ dl("Number of times the master has changed.\n",
+ (u_long)sp->st_master_changes);
+ dl("Number of messages received with a bad generation number.\n",
+ (u_long)sp->st_msgs_badgen);
+ dl("Number of messages received and processed.\n",
+ (u_long)sp->st_msgs_processed);
+ dl("Number of messages ignored due to pending recovery.\n",
+ (u_long)sp->st_msgs_recover);
+ dl("Number of failed message sends.\n",
+ (u_long)sp->st_msgs_send_failures);
+ dl("Number of messages sent.\n", (u_long)sp->st_msgs_sent);
+ dl("Number of new site messages received.\n", (u_long)sp->st_newsites);
+ dl("Number of environments believed to be in the replication group.\n",
+ (u_long)sp->st_nsites);
+ dl("Transmission limited.\n", (u_long)sp->st_nthrottles);
+ dl("Number of outdated conditions detected.\n",
+ (u_long)sp->st_outdated);
+ dl("Number of transactions applied.\n", (u_long)sp->st_txns_applied);
+
+ dl("Number of elections held.\n", (u_long)sp->st_elections);
+ dl("Number of elections won.\n", (u_long)sp->st_elections_won);
+
+ if (sp->st_election_status == 0)
+ printf("No election in progress.\n");
+ else {
+ dl("Current election phase.\n", (u_long)sp->st_election_status);
+ dl("Election winner.\n",
+ (u_long)sp->st_election_cur_winner);
+ dl("Election generation number.\n",
+ (u_long)sp->st_election_gen);
+ printf("%lu/%lu\tMaximum LSN of election winner.\n",
+ (u_long)sp->st_election_lsn.file,
+ (u_long)sp->st_election_lsn.offset);
+ dl("Number of sites expected to participate in elections.\n",
+ (u_long)sp->st_election_nsites);
+ dl("Election priority.\n", (u_long)sp->st_election_priority);
+ dl("Election tiebreaker value.\n",
+ (u_long)sp->st_election_tiebreaker);
+ dl("Votes received this election round.\n",
+ (u_long)sp->st_election_votes);
+ }
+
+ free(sp);
+
return (0);
}
@@ -738,16 +1015,17 @@ mpool_stats(dbenvp)
* Display transaction statistics.
*/
int
-txn_stats(dbenvp)
- DB_ENV *dbenvp;
+txn_stats(dbenv, flags)
+ DB_ENV *dbenv;
+ u_int32_t flags;
{
DB_TXN_STAT *sp;
u_int32_t i;
int ret;
const char *p;
- if ((ret = txn_stat(dbenvp, &sp, NULL)) != 0) {
- dbenvp->err(dbenvp, ret, NULL);
+ if ((ret = dbenv->txn_stat(dbenv, &sp, flags)) != 0) {
+ dbenv->err(dbenv, ret, NULL);
return (1);
}
@@ -755,12 +1033,6 @@ txn_stats(dbenvp)
"No checkpoint LSN." : "File/offset for last checkpoint LSN.";
printf("%lu/%lu\t%s\n",
(u_long)sp->st_last_ckp.file, (u_long)sp->st_last_ckp.offset, p);
- p = sp->st_pending_ckp.file == 0 ?
- "No pending checkpoint LSN." :
- "File/offset for last pending checkpoint LSN.";
- printf("%lu/%lu\t%s\n",
- (u_long)sp->st_pending_ckp.file,
- (u_long)sp->st_pending_ckp.offset, p);
if (sp->st_time_ckp == 0)
printf("0\tNo checkpoint timestamp.\n");
else
@@ -768,30 +1040,85 @@ txn_stats(dbenvp)
ctime(&sp->st_time_ckp));
printf("%lx\tLast transaction ID allocated.\n",
(u_long)sp->st_last_txnid);
- dl("Maximum number of active transactions possible.\n",
+ dl("Maximum number of active transactions configured.\n",
(u_long)sp->st_maxtxns);
dl("Active transactions.\n", (u_long)sp->st_nactive);
dl("Maximum active transactions.\n", (u_long)sp->st_maxnactive);
dl("Number of transactions begun.\n", (u_long)sp->st_nbegins);
dl("Number of transactions aborted.\n", (u_long)sp->st_naborts);
dl("Number of transactions committed.\n", (u_long)sp->st_ncommits);
+ dl("Number of transactions restored.\n", (u_long)sp->st_nrestores);
+
dl_bytes("Transaction region size",
(u_long)0, (u_long)0, (u_long)sp->st_regsize);
- dl("The number of region locks granted without waiting.\n",
- (u_long)sp->st_region_nowait);
dl("The number of region locks granted after waiting.\n",
(u_long)sp->st_region_wait);
+ dl("The number of region locks granted without waiting.\n",
+ (u_long)sp->st_region_nowait);
+
qsort(sp->st_txnarray,
sp->st_nactive, sizeof(sp->st_txnarray[0]), txn_compare);
- for (i = 0; i < sp->st_nactive; ++i)
- printf("\tid: %lx; initial LSN file/offest %lu/%lu\n",
+ for (i = 0; i < sp->st_nactive; ++i) {
+ printf("\tid: %lx; begin LSN: file/offset %lu/%lu",
(u_long)sp->st_txnarray[i].txnid,
(u_long)sp->st_txnarray[i].lsn.file,
(u_long)sp->st_txnarray[i].lsn.offset);
+ if (sp->st_txnarray[i].parentid != 0)
+ printf("; parent: %lx",
+ (u_long)sp->st_txnarray[i].parentid);
+ if (sp->st_txnarray[i].xa_status != 0)
+ txn_xid_stats(&sp->st_txnarray[i]);
+ printf("\n");
+ }
+
+ free(sp);
return (0);
}
+void
+txn_xid_stats(txnp)
+ DB_TXN_ACTIVE *txnp;
+{
+ u_int32_t v;
+ u_int i;
+ int cnt;
+
+ printf("\n\tXA: ");
+ switch (txnp->xa_status) {
+ case TXN_XA_ABORTED:
+ printf("ABORTED");
+ break;
+ case TXN_XA_DEADLOCKED:
+ printf("DEADLOCKED");
+ break;
+ case TXN_XA_ENDED:
+ printf("ENDED");
+ break;
+ case TXN_XA_PREPARED:
+ printf("PREPARED");
+ break;
+ case TXN_XA_STARTED:
+ printf("STARTED");
+ break;
+ case TXN_XA_SUSPENDED:
+ printf("SUSPENDED");
+ break;
+ default:
+ printf("unknown state: %lu", (u_long)txnp->xa_status);
+ break;
+ }
+ printf("; XID:\n\t\t");
+ for (i = 0, cnt = 0; i < DB_XIDDATASIZE; i += sizeof(u_int32_t)) {
+ memcpy(&v, &txnp->xid[i], sizeof(u_int32_t));
+ printf("0x%x ", v);
+ if (++cnt == 4) {
+ printf("\n\t\t");
+ cnt = 0;
+ }
+ }
+}
+
int
txn_compare(a1, b1)
const void *a1, *b1;
@@ -837,43 +1164,35 @@ dl_bytes(msg, gbytes, mbytes, bytes)
u_long gbytes, mbytes, bytes;
{
const char *sep;
- u_long sbytes;
- int showbytes;
- sbytes = bytes;
- while (bytes > MEGABYTE) {
+ /* Normalize the values. */
+ while (bytes >= MEGABYTE) {
++mbytes;
bytes -= MEGABYTE;
}
- while (mbytes > GIGABYTE / MEGABYTE) {
+ while (mbytes >= GIGABYTE / MEGABYTE) {
++gbytes;
- --mbytes;
+ mbytes -= GIGABYTE / MEGABYTE;
}
sep = "";
- showbytes = 0;
if (gbytes > 0) {
printf("%luGB", gbytes);
sep = " ";
- showbytes = 1;
}
if (mbytes > 0) {
printf("%s%luMB", sep, mbytes);
sep = " ";
- showbytes = 1;
}
- if (bytes > 1024) {
+ if (bytes >= 1024) {
printf("%s%luKB", sep, bytes / 1024);
bytes %= 1024;
sep = " ";
- showbytes = 1;
}
if (bytes > 0)
printf("%s%luB", sep, bytes);
- printf("\t%s", msg);
- if (showbytes)
- printf(" (%lu bytes)", sbytes);
- printf(".\n");
+
+ printf("\t%s.\n", msg);
}
/*
@@ -881,11 +1200,13 @@ dl_bytes(msg, gbytes, mbytes, bytes)
* Print out flag values.
*/
void
-prflags(flags, fnp)
+prflags(dbp, flags, fnp)
+ DB *dbp;
u_int32_t flags;
const FN *fnp;
{
const char *sep;
+ int lorder;
sep = "\t";
printf("Flags:");
@@ -894,6 +1215,19 @@ prflags(flags, fnp)
printf("%s%s", sep, fnp->name);
sep = ", ";
}
+
+ (void)dbp->get_lorder(dbp, &lorder);
+ switch (lorder) {
+ case 1234:
+ printf("%s%s", sep, "little-endian");
+ break;
+ case 4321:
+ printf("%s%s", sep, "big-endian");
+ break;
+ default:
+ printf("%s%s", sep, "UNKNOWN-LORDER");
+ break;
+ }
printf("\n");
}
@@ -902,45 +1236,59 @@ prflags(flags, fnp)
* Initialize the environment.
*/
int
-db_init(home, ttype)
+db_init(dbenv, home, ttype, cache, is_private)
+ DB_ENV *dbenv;
char *home;
test_t ttype;
+ u_int32_t cache;
+ int *is_private;
{
+ u_int32_t oflags;
int ret;
/*
* If our environment open fails, and we're trying to look at a
* shared region, it's a hard failure.
+ *
+ * We will probably just drop core if the environment we join does
+ * not include a memory pool. This is probably acceptable; trying
+ * to use an existing environment that does not contain a memory
+ * pool to look at a database can be safely construed as operator
+ * error, I think.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_JOINENV | DB_USE_ENVIRON, 0)) == 0)
+ *is_private = 0;
+ if ((ret =
+ dbenv->open(dbenv, home, DB_JOINENV | DB_USE_ENVIRON, 0)) == 0)
return (0);
- if (ttype != T_DB) {
- dbenv->err(dbenv, ret, "DBENV->open%s%s",
+ if (ttype != T_DB && ttype != T_LOG) {
+ dbenv->err(dbenv, ret, "DB_ENV->open%s%s",
home == NULL ? "" : ": ", home == NULL ? "" : home);
return (1);
}
/*
- * We're trying to look at a database.
- *
- * An environment is required because we may be trying to look at
- * databases in directories other than the current one. We could
- * avoid using an environment iff the -h option wasn't specified,
- * but that seems like more work than it's worth.
+ * We're looking at a database or set of log files and no environment
+ * exists. Create one, but make it private so no files are actually
+ * created. Declare a reasonably large cache so that we don't fail
+ * when reporting statistics on large databases.
*
- *
- * No environment exists. Create one, but make it private so that
- * no files are actually created.
- *
- * Note that we will probably just drop core if the environment
- * we joined above does not include a memory pool. This is probably
- * acceptable; trying to use an existing shared environment that
- * does not contain a memory pool to look at a database can
- * be safely construed as operator error, I think.
+ * An environment is required to look at databases because we may be
+ * trying to look at databases in directories other than the current
+ * one.
*/
- if ((ret = dbenv->open(dbenv, home,
- DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0)) == 0)
+ if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_cachesize");
+ return (1);
+ }
+ *is_private = 1;
+ oflags = DB_CREATE | DB_PRIVATE | DB_USE_ENVIRON;
+ if (ttype == T_DB)
+ oflags |= DB_INIT_MPOOL;
+ if (ttype == T_LOG)
+ oflags |= DB_INIT_LOG;
+ if (ttype == T_REP)
+ oflags |= DB_INIT_REP;
+ if ((ret = dbenv->open(dbenv, home, oflags, 0)) == 0)
return (0);
/* An environment is required. */
@@ -963,27 +1311,29 @@ argcheck(arg, ok_args)
return (1);
}
-void
+int
usage()
{
- fprintf(stderr, "usage: db_stat %s\n",
- "[-celmNtV] [-C Acflmo] [-d file [-s file]] [-h home] [-M Ahlm]");
- exit (1);
+ fprintf(stderr, "%s\n\t%s\n",
+ "usage: db_stat [-celmNrtVZ] [-C Aclmop]",
+ "[-d file [-f] [-s database]] [-h home] [-M Ahlm] [-P password]");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_stat/dd.sh b/db/db_stat/dd.sh
new file mode 100644
index 000000000..952750481
--- /dev/null
+++ b/db/db_stat/dd.sh
@@ -0,0 +1,66 @@
+#! /bin/sh
+# $Id: dd.sh,v 1.2 2003/09/05 00:05:59 bostic Exp $
+#
+# Display environment's deadlocks based on "db_stat -Co" output.
+
+t1=__a
+t2=__b
+
+trap 'rm -f $t1 $t2; exit 0' 0 1 2 3 13 15
+
+# Print out list of node wait states, and output cycles in the graph.
+egrep 'WAIT.*page' $1 | awk '{print $1 " " $7}' |
+while read l p; do
+ p=`egrep "HELD.*page[ ][ ]*$p$" $1 | awk '{print $1}'`
+ echo "$l $p"
+done | tsort > /dev/null 2>$t1
+
+# Display the locks in a single cycle.
+display_one() {
+ if [ -s $1 ]; then
+ echo "Deadlock #$c ============"
+ c=`expr $c + 1`
+ cat $1 | sort -n +6
+ :> $1
+ fi
+}
+
+# Display the locks in all of the cycles.
+#
+# Requires tsort output some text before each list of nodes in the cycle,
+# and the actual node displayed on the line be the second (white-space)
+# separated item on the line. For example:
+#
+# tsort: cycle in data
+# tsort: 8000177f
+# tsort: 80001792
+# tsort: 80001774
+# tsort: cycle in data
+# tsort: 80001776
+# tsort: 80001793
+# tsort: cycle in data
+# tsort: 8000176a
+# tsort: 8000178a
+#
+# XXX
+# Currently, db_stat doesn't display the implicit wait relationship between
+# parent and child transactions, where the parent won't release a lock until
+# the child commits/aborts. This means the deadlock where parent holds a
+# lock, thread A waits on parent, child waits on thread A won't be shown.
+if [ -s $t1 ]; then
+ c=1
+ :>$t2
+ while read a b; do
+ case $b in
+ [0-9]*)
+ egrep $b $1 >> $t2;;
+ *)
+ display_one $t2;;
+ esac
+ done < $t1
+ display_one $t2
+else
+ echo 'No deadlocks found.'
+fi
+
+exit 0
diff --git a/db/db_upgrade/db_upgrade.c b/db/db_upgrade/db_upgrade.c
index dc29b6c7e..f62ebb473 100644
--- a/db/db_upgrade/db_upgrade.c
+++ b/db/db_upgrade/db_upgrade.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_upgrade.c,v 1.13 2001/01/18 18:36:59 bostic Exp $";
+ "$Id: db_upgrade.c,v 1.35 2003/08/13 19:57:09 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -25,12 +25,9 @@ static const char revid[] =
#include "db_int.h"
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
-
-const char
- *progname = "db_upgrade"; /* Program name. */
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -39,30 +36,35 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
+ const char *progname = "db_upgrade";
DB *dbp;
DB_ENV *dbenv;
u_int32_t flags;
- int ch, e_close, exitval, nflag, ret, t_ret;
- char *home;
+ int ch, exitval, nflag, ret, t_ret;
+ char *home, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
dbenv = NULL;
flags = nflag = 0;
- e_close = exitval = 0;
- home = NULL;
- while ((ch = getopt(argc, argv, "h:NsV")) != EOF)
+ exitval = 0;
+ home = passwd = NULL;
+ while ((ch = getopt(argc, argv, "h:NP:sV")) != EOF)
switch (ch) {
case 'h':
home = optarg;
break;
case 'N':
nflag = 1;
- if ((ret = db_env_set_panicstate(0)) != 0) {
- fprintf(stderr,
- "%s: db_env_set_panicstate: %s\n",
- progname, db_strerror(ret));
- exit (1);
+ break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
case 's':
@@ -70,16 +72,16 @@ main(argc, argv)
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc <= 0)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -93,13 +95,24 @@ main(argc, argv)
progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
- if (nflag && (ret = dbenv->set_mutexlocks(dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "set_mutexlocks");
+ if (nflag) {
+ if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
+ goto shutdown;
+ }
+ if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
+ goto shutdown;
+ }
+ }
+
+ if (passwd != NULL && (ret = dbenv->set_encrypt(dbenv,
+ passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
goto shutdown;
}
@@ -126,7 +139,7 @@ main(argc, argv)
if ((ret = dbp->upgrade(dbp, argv[0], flags)) != 0)
dbp->err(dbp, ret, "DB->upgrade: %s", argv[0]);
if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0) {
- dbp->err(dbp, ret, "DB->close: %s", argv[0]);
+ dbenv->err(dbenv, ret, "DB->close: %s", argv[0]);
ret = t_ret;
}
if (ret != 0)
@@ -136,38 +149,43 @@ main(argc, argv)
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- fprintf(stderr, "usage: db_upgrade [-NsV] [-h home] db_file ...\n");
- exit (1);
+ fprintf(stderr, "%s\n",
+ "usage: db_upgrade [-NsV] [-h home] [-P password] db_file ...");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/db_verify/db_verify.c b/db/db_verify/db_verify.c
index 3bbf14caa..cae81f312 100644
--- a/db/db_verify/db_verify.c
+++ b/db/db_verify/db_verify.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: db_verify.c,v 1.15 2001/01/18 18:36:59 bostic Exp $";
+ "$Id: db_verify.c,v 1.45 2003/08/13 19:57:09 ubell Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -25,12 +25,9 @@ static const char revid[] =
#include "db_int.h"
-int main __P((int, char *[]));
-void usage __P((void));
-void version_check __P((void));
-
-const char
- *progname = "db_verify"; /* Program name. */
+int main __P((int, char *[]));
+int usage __P((void));
+int version_check __P((const char *));
int
main(argc, argv)
@@ -39,46 +36,57 @@ main(argc, argv)
{
extern char *optarg;
extern int optind;
- DB *dbp;
+ const char *progname = "db_verify";
+ DB *dbp, *dbp1;
DB_ENV *dbenv;
- int ch, e_close, exitval, nflag, quiet, ret, t_ret;
- char *home;
+ u_int32_t cache;
+ int ch, exitval, nflag, oflag, private;
+ int quiet, resize, ret;
+ char *home, *passwd;
- version_check();
+ if ((ret = version_check(progname)) != 0)
+ return (ret);
dbenv = NULL;
- e_close = exitval = nflag = quiet = 0;
- home = NULL;
- while ((ch = getopt(argc, argv, "h:NqV")) != EOF)
+ dbp = NULL;
+ cache = MEGABYTE;
+ exitval = nflag = oflag = quiet = 0;
+ home = passwd = NULL;
+ while ((ch = getopt(argc, argv, "h:NoP:qV")) != EOF)
switch (ch) {
case 'h':
home = optarg;
break;
case 'N':
nflag = 1;
- if ((ret = db_env_set_panicstate(0)) != 0) {
- fprintf(stderr,
- "%s: db_env_set_panicstate: %s\n",
- progname, db_strerror(ret));
- exit (1);
+ break;
+ case 'P':
+ passwd = strdup(optarg);
+ memset(optarg, 0, strlen(optarg));
+ if (passwd == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ progname, strerror(errno));
+ return (EXIT_FAILURE);
}
break;
+ case 'o':
+ oflag = 1;
break;
case 'q':
quiet = 1;
break;
case 'V':
printf("%s\n", db_version(NULL, NULL, NULL));
- exit(0);
+ return (EXIT_SUCCESS);
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc <= 0)
- usage();
+ return (usage());
/* Handle possible interruptions. */
__db_util_siginit();
@@ -87,96 +95,154 @@ main(argc, argv)
* Create an environment object and initialize it for error
* reporting.
*/
- if ((ret = db_env_create(&dbenv, 0)) != 0) {
- fprintf(stderr, "%s: db_env_create: %s\n",
- progname, db_strerror(ret));
+retry: if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(stderr,
+ "%s: db_env_create: %s\n", progname, db_strerror(ret));
goto shutdown;
}
- e_close = 1;
- /*
- * XXX
- * We'd prefer to have error output configured while calling
- * db_env_create, but there's no way to turn it off once it's
- * turned on.
- */
if (!quiet) {
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
}
- if (nflag && (ret = dbenv->set_mutexlocks(dbenv, 0)) != 0) {
- dbenv->err(dbenv, ret, "set_mutexlocks");
- goto shutdown;
+ if (nflag) {
+ if ((ret = dbenv->set_flags(dbenv, DB_NOLOCKING, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOLOCKING");
+ goto shutdown;
+ }
+ if ((ret = dbenv->set_flags(dbenv, DB_NOPANIC, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_flags: DB_NOPANIC");
+ goto shutdown;
+ }
}
+ if (passwd != NULL &&
+ (ret = dbenv->set_encrypt(dbenv, passwd, DB_ENCRYPT_AES)) != 0) {
+ dbenv->err(dbenv, ret, "set_passwd");
+ goto shutdown;
+ }
/*
- * Attach to an mpool if it exists, but if that fails, attach
- * to a private region.
+ * Attach to an mpool if it exists, but if that fails, attach to a
+ * private region. In the latter case, declare a reasonably large
+ * cache so that we don't fail when verifying large databases.
*/
- if ((ret = dbenv->open(dbenv,
- home, DB_INIT_MPOOL | DB_USE_ENVIRON, 0)) != 0 &&
- (ret = dbenv->open(dbenv, home,
+ private = 0;
+ if ((ret =
+ dbenv->open(dbenv, home, DB_INIT_MPOOL | DB_USE_ENVIRON, 0)) != 0) {
+ if ((ret = dbenv->set_cachesize(dbenv, 0, cache, 1)) != 0) {
+ dbenv->err(dbenv, ret, "set_cachesize");
+ goto shutdown;
+ }
+ private = 1;
+ if ((ret = dbenv->open(dbenv, home,
DB_CREATE | DB_INIT_MPOOL | DB_PRIVATE | DB_USE_ENVIRON, 0)) != 0) {
- dbenv->err(dbenv, ret, "open");
- goto shutdown;
+ dbenv->err(dbenv, ret, "open");
+ goto shutdown;
+ }
}
for (; !__db_util_interrupted() && argv[0] != NULL; ++argv) {
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
- fprintf(stderr,
- "%s: db_create: %s\n", progname, db_strerror(ret));
+ dbenv->err(dbenv, ret, "%s: db_create", progname);
goto shutdown;
}
- if (!quiet) {
- dbp->set_errfile(dbp, stderr);
- dbp->set_errpfx(dbp, progname);
- }
- if ((ret = dbp->verify(dbp, argv[0], NULL, NULL, 0)) != 0)
- dbp->err(dbp, ret, "DB->verify: %s", argv[0]);
- if ((t_ret = dbp->close(dbp, 0)) != 0 && ret == 0) {
- dbp->err(dbp, ret, "DB->close: %s", argv[0]);
- ret = t_ret;
+
+ /*
+ * We create a 2nd dbp to this database to get its pagesize
+ * because the dbp we're using for verify cannot be opened.
+ */
+ if (private) {
+ if ((ret = db_create(&dbp1, dbenv, 0)) != 0) {
+ dbenv->err(
+ dbenv, ret, "%s: db_create", progname);
+ goto shutdown;
+ }
+
+ if ((ret = dbp1->open(dbp1, NULL,
+ argv[0], NULL, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open: %s", argv[0]);
+ (void)dbp1->close(dbp1, 0);
+ goto shutdown;
+ }
+ /*
+ * If we get here, we can check the cache/page.
+ * !!!
+ * If we have to retry with an env with a larger
+ * cache, we jump out of this loop. However, we
+ * will still be working on the same argv when we
+ * get back into the for-loop.
+ */
+ ret = __db_util_cache(dbenv, dbp1, &cache, &resize);
+ (void)dbp1->close(dbp1, 0);
+ if (ret != 0)
+ goto shutdown;
+
+ if (resize) {
+ (void)dbp->close(dbp, 0);
+ dbp = NULL;
+
+ (void)dbenv->close(dbenv, 0);
+ dbenv = NULL;
+ goto retry;
+ }
}
- if (ret != 0)
+
+ /* The verify method is a destructor. */
+ ret = dbp->verify(dbp,
+ argv[0], NULL, NULL, oflag ? DB_NOORDERCHK : 0);
+ dbp = NULL;
+ if (ret != 0) {
+ dbenv->err(dbenv, ret, "DB->verify: %s", argv[0]);
goto shutdown;
+ }
}
if (0) {
shutdown: exitval = 1;
}
- if (e_close && (ret = dbenv->close(dbenv, 0)) != 0) {
+
+ if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
+ exitval = 1;
+ dbenv->err(dbenv, ret, "close");
+ }
+ if (dbenv != NULL && (ret = dbenv->close(dbenv, 0)) != 0) {
exitval = 1;
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
}
+ if (passwd != NULL)
+ free(passwd);
+
/* Resend any caught signal. */
__db_util_sigresend();
- return (exitval);
+ return (exitval == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage()
{
- fprintf(stderr, "usage: db_verify [-NqV] [-h home] db_file ...\n");
- exit (1);
+ fprintf(stderr, "%s\n",
+ "usage: db_verify [-NoqV] [-h home] [-P password] db_file ...");
+ return (EXIT_FAILURE);
}
-void
-version_check()
+int
+version_check(progname)
+ const char *progname;
{
int v_major, v_minor, v_patch;
/* Make sure we're loaded with the right version of the DB library. */
(void)db_version(&v_major, &v_minor, &v_patch);
- if (v_major != DB_VERSION_MAJOR ||
- v_minor != DB_VERSION_MINOR || v_patch != DB_VERSION_PATCH) {
+ if (v_major != DB_VERSION_MAJOR || v_minor != DB_VERSION_MINOR) {
fprintf(stderr,
- "%s: version %d.%d.%d doesn't match library version %d.%d.%d\n",
+ "%s: version %d.%d doesn't match library version %d.%d\n",
progname, DB_VERSION_MAJOR, DB_VERSION_MINOR,
- DB_VERSION_PATCH, v_major, v_minor, v_patch);
- exit (1);
+ v_major, v_minor);
+ return (EXIT_FAILURE);
}
+ return (0);
}
diff --git a/db/dbinc/btree.h b/db/dbinc/btree.h
index 0e0a198ff..4bd2f5695 100644
--- a/db/dbinc/btree.h
+++ b/db/dbinc/btree.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -39,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: btree.h,v 11.45 2002/08/06 06:11:21 bostic Exp
+ * $Id: btree.h,v 11.47 2003/05/18 16:54:52 bostic Exp $
*/
#ifndef _DB_BTREE_H_
#define _DB_BTREE_H_
@@ -146,12 +146,12 @@ struct __epg {
#define BT_STK_CLR(c) do { \
(c)->csp = (c)->sp; \
(c)->csp->page = NULL; \
- LOCK_INIT((c)->csp->lock); \
+ LOCK_INIT((c)->csp->lock); \
} while (0)
#define BT_STK_ENTER(dbenv, c, pagep, page_indx, l, mode, ret) do { \
- if ((ret = \
- (c)->csp == (c)->esp ? __bam_stkgrow(dbenv, c) : 0) == 0) { \
+ if ((ret = ((c)->csp == (c)->esp ? \
+ __bam_stkgrow(dbenv, c) : 0)) == 0) { \
(c)->csp->page = pagep; \
(c)->csp->indx = page_indx; \
(c)->csp->entries = NUM_ENT(pagep); \
@@ -171,7 +171,7 @@ struct __epg {
(c)->csp->page = NULL; \
(c)->csp->indx = page_indx; \
(c)->csp->entries = NUM_ENT(pagep); \
- LOCK_INIT((c)->csp->lock); \
+ LOCK_INIT((c)->csp->lock); \
(c)->csp->lock_mode = DB_LOCK_NG; \
} \
} while (0)
diff --git a/db/dbinc/crypto.h b/db/dbinc/crypto.h
index 75718a670..05fcf6c8e 100644
--- a/db/dbinc/crypto.h
+++ b/db/dbinc/crypto.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: crypto.h,v 1.9 2002/08/06 06:37:07 bostic Exp
+ * $Id: crypto.h,v 1.11 2003/04/28 14:27:26 bostic Exp $
*/
#ifndef _DB_CRYPTO_H_
@@ -33,7 +33,7 @@
* This structure is per-process, not in shared memory.
*/
struct __db_cipher {
- int (*adj_size) __P((size_t));
+ u_int (*adj_size) __P((size_t));
int (*close) __P((DB_ENV *, void *));
int (*decrypt) __P((DB_ENV *, void *, void *, u_int8_t *, size_t));
int (*encrypt) __P((DB_ENV *, void *, void *, u_int8_t *, size_t));
diff --git a/db/dbinc/cxx_common.h b/db/dbinc/cxx_common.h
deleted file mode 100644
index 6607d543d..000000000
--- a/db/dbinc/cxx_common.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: cxx_common.h,v 11.2 2002/01/11 15:52:23 bostic Exp
- */
-
-#ifndef _CXX_COMMON_H_
-#define _CXX_COMMON_H_
-
-//
-// Common definitions used by all of Berkeley DB's C++ include files.
-//
-
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-//
-// Mechanisms for declaring classes
-//
-
-//
-// Every class defined in this file has an _exported next to the class name.
-// This is needed for WinTel machines so that the class methods can
-// be exported or imported in a DLL as appropriate. Users of the DLL
-// use the define DB_USE_DLL. When the DLL is built, DB_CREATE_DLL
-// must be defined.
-//
-#if defined(_MSC_VER)
-
-# if defined(DB_CREATE_DLL)
-# define _exported __declspec(dllexport) // creator of dll
-# elif defined(DB_USE_DLL)
-# define _exported __declspec(dllimport) // user of dll
-# else
-# define _exported // static lib creator or user
-# endif
-
-#else /* _MSC_VER */
-
-# define _exported
-
-#endif /* _MSC_VER */
-#endif /* !_CXX_COMMON_H_ */
diff --git a/db/dbinc/cxx_except.h b/db/dbinc/cxx_except.h
deleted file mode 100644
index fe8d5d962..000000000
--- a/db/dbinc/cxx_except.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: cxx_except.h,v 11.5 2002/08/01 23:32:34 mjc Exp
- */
-
-#ifndef _CXX_EXCEPT_H_
-#define _CXX_EXCEPT_H_
-
-#include "cxx_common.h"
-
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-//
-// Forward declarations
-//
-
-class DbDeadlockException; // forward
-class DbException; // forward
-class DbLockNotGrantedException; // forward
-class DbLock; // forward
-class DbMemoryException; // forward
-class DbRunRecoveryException; // forward
-class Dbt; // forward
-
-////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-//
-// Exception classes
-//
-
-// Almost any error in the DB library throws a DbException.
-// Every exception should be considered an abnormality
-// (e.g. bug, misuse of DB, file system error).
-//
-// NOTE: We would like to inherit from class exception and
-// let it handle what(), but there are
-// MSVC++ problems when <exception> is included.
-//
-class _exported DbException
-{
-public:
- virtual ~DbException();
- DbException(int err);
- DbException(const char *description);
- DbException(const char *prefix, int err);
- DbException(const char *prefix1, const char *prefix2, int err);
- int get_errno() const;
- virtual const char *what() const;
-
- DbException(const DbException &);
- DbException &operator = (const DbException &);
-
-private:
- char *what_;
- int err_; // errno
-};
-
-//
-// A specific sort of exception that occurs when
-// an operation is aborted to resolve a deadlock.
-//
-class _exported DbDeadlockException : public DbException
-{
-public:
- virtual ~DbDeadlockException();
- DbDeadlockException(const char *description);
-
- DbDeadlockException(const DbDeadlockException &);
- DbDeadlockException &operator = (const DbDeadlockException &);
-};
-
-//
-// A specific sort of exception that occurs when
-// a lock is not granted, e.g. by lock_get or lock_vec.
-// Note that the Dbt is only live as long as the Dbt used
-// in the offending call.
-//
-class _exported DbLockNotGrantedException : public DbException
-{
-public:
- virtual ~DbLockNotGrantedException();
- DbLockNotGrantedException(const char *prefix, db_lockop_t op,
- db_lockmode_t mode, const Dbt *obj, const DbLock lock, int index);
- DbLockNotGrantedException(const DbLockNotGrantedException &);
- DbLockNotGrantedException &operator =
- (const DbLockNotGrantedException &);
-
- db_lockop_t get_op() const;
- db_lockmode_t get_mode() const;
- const Dbt* get_obj() const;
- DbLock *get_lock() const;
- int get_index() const;
-
-private:
- db_lockop_t op_;
- db_lockmode_t mode_;
- const Dbt *obj_;
- DbLock *lock_;
- int index_;
-};
-
-//
-// A specific sort of exception that occurs when
-// user declared memory is insufficient in a Dbt.
-//
-class _exported DbMemoryException : public DbException
-{
-public:
- virtual ~DbMemoryException();
- DbMemoryException(Dbt *dbt);
- DbMemoryException(const char *description);
- DbMemoryException(const char *prefix, Dbt *dbt);
- DbMemoryException(const char *prefix1, const char *prefix2, Dbt *dbt);
- Dbt *get_dbt() const;
-
- DbMemoryException(const DbMemoryException &);
- DbMemoryException &operator = (const DbMemoryException &);
-
-private:
- Dbt *dbt_;
-};
-
-//
-// A specific sort of exception that occurs when
-// recovery is required before continuing DB activity.
-//
-class _exported DbRunRecoveryException : public DbException
-{
-public:
- virtual ~DbRunRecoveryException();
- DbRunRecoveryException(const char *description);
-
- DbRunRecoveryException(const DbRunRecoveryException &);
- DbRunRecoveryException &operator = (const DbRunRecoveryException &);
-};
-
-#endif /* !_CXX_EXCEPT_H_ */
diff --git a/db/dbinc/cxx_int.h b/db/dbinc/cxx_int.h
index ee341dc12..09d6c3349 100644
--- a/db/dbinc/cxx_int.h
+++ b/db/dbinc/cxx_int.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: cxx_int.h,v 11.20 2002/01/11 15:52:23 bostic Exp
+ * $Id: cxx_int.h,v 11.22 2003/03/11 15:39:41 merrells Exp $
*/
#ifndef _CXX_INT_H_
@@ -66,11 +66,11 @@ WRAPPED_CLASS(DbTxn, DbTxnImp, DB_TXN*)
// the tristate values given above. If UNKNOWN is specified,
// the behavior is taken from the last initialized DbEnv.
//
-#define DB_ERROR(caller, ecode, policy) \
- DbEnv::runtime_error(caller, ecode, policy)
+#define DB_ERROR(env, caller, ecode, policy) \
+ DbEnv::runtime_error(env, caller, ecode, policy)
-#define DB_ERROR_DBT(caller, dbt, policy) \
- DbEnv::runtime_error_dbt(caller, dbt, policy)
+#define DB_ERROR_DBT(env, caller, dbt, policy) \
+ DbEnv::runtime_error_dbt(env, caller, dbt, policy)
#define DB_OVERFLOWED_DBT(dbt) \
(F_ISSET(dbt, DB_DBT_USERMEM) && dbt->size > dbt->ulen)
diff --git a/db/dbinc/db.in b/db/dbinc/db.in
index b045b795b..295992c36 100644
--- a/db/dbinc/db.in
+++ b/db/dbinc/db.in
@@ -1,10 +1,10 @@
/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db.in,v 11.321 2002/08/13 20:46:08 ubell Exp
+ * $Id: db.in,v 11.389 2003/10/01 21:33:58 sue Exp $
*
* db.h include file layout:
* General.
@@ -24,6 +24,8 @@
#ifndef __NO_SYSTEM_INCLUDES
#include <sys/types.h>
+/* <sys/types.h> does not include <inttypes.h> on some systems. */
+@inttypes_decl@
#include <stdio.h>
#endif
@@ -31,24 +33,9 @@
extern "C" {
#endif
-/*
- * XXX
- * Handle function prototypes and the keyword "const". This steps on name
- * space that DB doesn't control, but all of the other solutions are worse.
- *
- * XXX
- * While Microsoft's compiler is ANSI C compliant, it doesn't have _STDC_
- * defined by default, you specify a command line flag or #pragma to turn
- * it on. Don't do that, however, because some of Microsoft's own header
- * files won't compile.
- */
-#undef __P
-#if defined(__STDC__) || defined(__cplusplus) || defined(_MSC_VER)
-#define __P(protos) protos /* ANSI C prototypes */
-#else
-#define const
-#define __P(protos) () /* K&R C preprocessor */
-#endif
+@DB_CONST@
+@DB_PROTO1@
+@DB_PROTO2@
/*
* Berkeley DB version information.
@@ -167,17 +154,18 @@ struct __db_dbt {
* Interfaces which use any of these common flags should never have
* interface specific flags in this range.
*/
-#define DB_CREATE 0x000001 /* Create file as necessary. */
-#define DB_CXX_NO_EXCEPTIONS 0x000002 /* C++: return error values. */
-#define DB_FORCE 0x000004 /* Force (anything). */
-#define DB_NOMMAP 0x000008 /* Don't mmap underlying file. */
-#define DB_RDONLY 0x000010 /* Read-only (O_RDONLY). */
-#define DB_RECOVER 0x000020 /* Run normal recovery. */
-#define DB_THREAD 0x000040 /* Applications are threaded. */
-#define DB_TRUNCATE 0x000080 /* Discard existing DB (O_TRUNC). */
-#define DB_TXN_NOSYNC 0x000100 /* Do not sync log on commit. */
-#define DB_USE_ENVIRON 0x000200 /* Use the environment. */
-#define DB_USE_ENVIRON_ROOT 0x000400 /* Use the environment if root. */
+#define DB_CREATE 0x0000001 /* Create file as necessary. */
+#define DB_CXX_NO_EXCEPTIONS 0x0000002 /* C++: return error values. */
+#define DB_FORCE 0x0000004 /* Force (anything). */
+#define DB_NOMMAP 0x0000008 /* Don't mmap underlying file. */
+#define DB_RDONLY 0x0000010 /* Read-only (O_RDONLY). */
+#define DB_RECOVER 0x0000020 /* Run normal recovery. */
+#define DB_THREAD 0x0000040 /* Applications are threaded. */
+#define DB_TRUNCATE 0x0000080 /* Discard existing DB (O_TRUNC). */
+#define DB_TXN_NOSYNC 0x0000100 /* Do not sync log on commit. */
+#define DB_TXN_NOT_DURABLE 0x0000200 /* Do not log changes. */
+#define DB_USE_ENVIRON 0x0000400 /* Use the environment. */
+#define DB_USE_ENVIRON_ROOT 0x0000800 /* Use the environment if root. */
/*
* Common flags --
@@ -190,113 +178,125 @@ struct __db_dbt {
* DB_DIRTY_READ:
* DB->cursor, DB->get, DB->join, DB->open, DBcursor->c_get,
* DB_ENV->txn_begin
+ * DB_NOAUTO_COMMIT
+ * DB->associate, DB->del, DB->put, DB->open,
+ * DB->remove, DB->rename, DB->truncate
*
- * Shared flags up to 0x000400 */
-#define DB_AUTO_COMMIT 0x00800000 /* Implied transaction. */
-#define DB_DIRTY_READ 0x01000000 /* Dirty Read. */
+ * !!!
+ * The DB_DIRTY_READ bit mask can't be changed without also changing the
+ * masks for the flags that can be OR'd into DB access method and cursor
+ * operation values.
+ */
+#define DB_AUTO_COMMIT 0x1000000 /* Implied transaction. */
+#define DB_DIRTY_READ 0x2000000 /* Dirty Read. */
+#define DB_NO_AUTO_COMMIT 0x4000000 /* Override env-wide AUTO-COMMIT. */
/*
* Flags private to db_env_create.
*/
-#define DB_CLIENT 0x000001 /* Open for a client environment. */
+#define DB_RPCCLIENT 0x0000001 /* An RPC client environment. */
/*
* Flags private to db_create.
*/
-#define DB_XA_CREATE 0x000001 /* Open in an XA environment. */
+#define DB_REP_CREATE 0x0000001 /* Open of an internal rep database. */
+#define DB_XA_CREATE 0x0000002 /* Open in an XA environment. */
/*
* Flags private to DB_ENV->open.
- * Shared flags up to 0x000400 */
-#define DB_INIT_CDB 0x000800 /* Concurrent Access Methods. */
-#define DB_INIT_LOCK 0x001000 /* Initialize locking. */
-#define DB_INIT_LOG 0x002000 /* Initialize logging. */
-#define DB_INIT_MPOOL 0x004000 /* Initialize mpool. */
-#define DB_INIT_TXN 0x008000 /* Initialize transactions. */
-#define DB_JOINENV 0x010000 /* Initialize all subsystems present. */
-#define DB_LOCKDOWN 0x020000 /* Lock memory into physical core. */
-#define DB_PRIVATE 0x040000 /* DB_ENV is process local. */
-#define DB_RECOVER_FATAL 0x080000 /* Run catastrophic recovery. */
-#define DB_SYSTEM_MEM 0x100000 /* Use system-backed memory. */
+ * Shared flags up to 0x0000800 */
+#define DB_INIT_CDB 0x0001000 /* Concurrent Access Methods. */
+#define DB_INIT_LOCK 0x0002000 /* Initialize locking. */
+#define DB_INIT_LOG 0x0004000 /* Initialize logging. */
+#define DB_INIT_MPOOL 0x0008000 /* Initialize mpool. */
+#define DB_INIT_REP 0x0010000 /* Initialize replication. */
+#define DB_INIT_TXN 0x0020000 /* Initialize transactions. */
+#define DB_JOINENV 0x0040000 /* Initialize all subsystems present. */
+#define DB_LOCKDOWN 0x0080000 /* Lock memory into physical core. */
+#define DB_PRIVATE 0x0100000 /* DB_ENV is process local. */
+#define DB_RECOVER_FATAL 0x0200000 /* Run catastrophic recovery. */
+#define DB_SYSTEM_MEM 0x0400000 /* Use system-backed memory. */
/*
* Flags private to DB->open.
- * Shared flags up to 0x000400 */
-#define DB_EXCL 0x000800 /* Exclusive open (O_EXCL). */
-#define DB_FCNTL_LOCKING 0x001000 /* UNDOC: fcntl(2) locking. */
-#define DB_RDWRMASTER 0x002000 /* UNDOC: allow subdb master open R/W */
-#define DB_WRITEOPEN 0x004000 /* UNDOC: open with write lock. */
+ * Shared flags up to 0x0000800 */
+#define DB_EXCL 0x0001000 /* Exclusive open (O_EXCL). */
+#define DB_FCNTL_LOCKING 0x0002000 /* UNDOC: fcntl(2) locking. */
+#define DB_RDWRMASTER 0x0004000 /* UNDOC: allow subdb master open R/W */
+#define DB_WRITEOPEN 0x0008000 /* UNDOC: open with write lock. */
/*
* Flags private to DB_ENV->txn_begin.
- * Shared flags up to 0x000400 */
-#define DB_TXN_NOWAIT 0x000800 /* Do not wait for locks in this TXN. */
-#define DB_TXN_SYNC 0x001000 /* Always sync log on commit. */
+ * Shared flags up to 0x0000800 */
+#define DB_TXN_NOWAIT 0x0001000 /* Do not wait for locks in this TXN. */
+#define DB_TXN_SYNC 0x0002000 /* Always sync log on commit. */
/*
* Flags private to DB_ENV->set_encrypt.
*/
-#define DB_ENCRYPT_AES 0x000001 /* AES, assumes SHA1 checksum */
+#define DB_ENCRYPT_AES 0x0000001 /* AES, assumes SHA1 checksum */
/*
* Flags private to DB_ENV->set_flags.
- * Shared flags up to 0x000400 */
-#define DB_CDB_ALLDB 0x000800 /* Set CDB locking per environment. */
-#define DB_DIRECT_DB 0x001000 /* Don't buffer databases in the OS. */
-#define DB_DIRECT_LOG 0x002000 /* Don't buffer log files in the OS. */
-#define DB_NOLOCKING 0x004000 /* Set locking/mutex behavior. */
-#define DB_NOPANIC 0x008000 /* Set panic state per DB_ENV. */
-#define DB_OVERWRITE 0x010000 /* Overwrite unlinked region files. */
-#define DB_PANIC_ENVIRONMENT 0x020000 /* Set panic state per environment. */
-#define DB_REGION_INIT 0x040000 /* Page-fault regions on open. */
-#define DB_TXN_WRITE_NOSYNC 0x080000 /* Write, don't sync, on txn commit. */
-#define DB_YIELDCPU 0x100000 /* Yield the CPU (a lot). */
+ * Shared flags up to 0x0000800 */
+#define DB_CDB_ALLDB 0x0001000 /* Set CDB locking per environment. */
+#define DB_DIRECT_DB 0x0002000 /* Don't buffer databases in the OS. */
+#define DB_DIRECT_LOG 0x0004000 /* Don't buffer log files in the OS. */
+#define DB_LOG_AUTOREMOVE 0x0008000 /* Automatically remove log files. */
+#define DB_NOLOCKING 0x0010000 /* Set locking/mutex behavior. */
+#define DB_NOPANIC 0x0020000 /* Set panic state per DB_ENV. */
+#define DB_OVERWRITE 0x0040000 /* Overwrite unlinked region files. */
+#define DB_PANIC_ENVIRONMENT 0x0080000 /* Set panic state per environment. */
+#define DB_REGION_INIT 0x0100000 /* Page-fault regions on open. */
+#define DB_TIME_NOTGRANTED 0x0200000 /* Return NOTGRANTED on timeout. */
+#define DB_TXN_WRITE_NOSYNC 0x0400000 /* Write, don't sync, on txn commit. */
+#define DB_YIELDCPU 0x0800000 /* Yield the CPU (a lot). */
/*
* Flags private to DB->set_feedback's callback.
*/
-#define DB_UPGRADE 0x000001 /* Upgrading. */
-#define DB_VERIFY 0x000002 /* Verifying. */
+#define DB_UPGRADE 0x0000001 /* Upgrading. */
+#define DB_VERIFY 0x0000002 /* Verifying. */
/*
* Flags private to DB_MPOOLFILE->open.
- * Shared flags up to 0x000400 */
-#define DB_DIRECT 0x000800 /* Don't buffer the file in the OS. */
-#define DB_EXTENT 0x001000 /* UNDOC: dealing with an extent. */
-#define DB_ODDFILESIZE 0x002000 /* Truncate file to N * pgsize. */
+ * Shared flags up to 0x0000800 */
+#define DB_DIRECT 0x0001000 /* Don't buffer the file in the OS. */
+#define DB_EXTENT 0x0002000 /* UNDOC: dealing with an extent. */
+#define DB_ODDFILESIZE 0x0004000 /* Truncate file to N * pgsize. */
/*
* Flags private to DB->set_flags.
*/
-#define DB_CHKSUM_SHA1 0x000001 /* Use SHA1 checksumming */
-#define DB_DUP 0x000002 /* Btree, Hash: duplicate keys. */
-#define DB_DUPSORT 0x000004 /* Btree, Hash: duplicate keys. */
-#define DB_ENCRYPT 0x000008 /* Btree, Hash: duplicate keys. */
-#define DB_RECNUM 0x000010 /* Btree: record numbers. */
-#define DB_RENUMBER 0x000020 /* Recno: renumber on insert/delete. */
-#define DB_REVSPLITOFF 0x000040 /* Btree: turn off reverse splits. */
-#define DB_SNAPSHOT 0x000080 /* Recno: snapshot the input. */
+#define DB_CHKSUM 0x0000001 /* Do checksumming */
+#define DB_DUP 0x0000002 /* Btree, Hash: duplicate keys. */
+#define DB_DUPSORT 0x0000004 /* Btree, Hash: duplicate keys. */
+#define DB_ENCRYPT 0x0000008 /* Btree, Hash: duplicate keys. */
+#define DB_RECNUM 0x0000010 /* Btree: record numbers. */
+#define DB_RENUMBER 0x0000020 /* Recno: renumber on insert/delete. */
+#define DB_REVSPLITOFF 0x0000040 /* Btree: turn off reverse splits. */
+#define DB_SNAPSHOT 0x0000080 /* Recno: snapshot the input. */
/*
* Flags private to the DB->stat methods.
*/
-#define DB_STAT_CLEAR 0x000001 /* Clear stat after returning values. */
+#define DB_STAT_CLEAR 0x0000001 /* Clear stat after returning values. */
/*
* Flags private to DB->join.
*/
-#define DB_JOIN_NOSORT 0x000001 /* Don't try to optimize join. */
+#define DB_JOIN_NOSORT 0x0000001 /* Don't try to optimize join. */
/*
* Flags private to DB->verify.
*/
-#define DB_AGGRESSIVE 0x000001 /* Salvage whatever could be data.*/
-#define DB_NOORDERCHK 0x000002 /* Skip sort order/hashing check. */
-#define DB_ORDERCHKONLY 0x000004 /* Only perform the order check. */
-#define DB_PR_PAGE 0x000008 /* Show page contents (-da). */
-#define DB_PR_RECOVERYTEST 0x000010 /* Recovery test (-dr). */
-#define DB_PRINTABLE 0x000020 /* Use printable format for salvage. */
-#define DB_SALVAGE 0x000040 /* Salvage what looks like data. */
+#define DB_AGGRESSIVE 0x0000001 /* Salvage whatever could be data.*/
+#define DB_NOORDERCHK 0x0000002 /* Skip sort order/hashing check. */
+#define DB_ORDERCHKONLY 0x0000004 /* Only perform the order check. */
+#define DB_PR_PAGE 0x0000008 /* Show page contents (-da). */
+#define DB_PR_RECOVERYTEST 0x0000010 /* Recovery test (-dr). */
+#define DB_PRINTABLE 0x0000020 /* Use printable format for salvage. */
+#define DB_SALVAGE 0x0000040 /* Salvage what looks like data. */
/*
* !!!
* These must not go over 0x8000, or they will collide with the flags
@@ -306,7 +306,8 @@ struct __db_dbt {
/*
* Flags private to DB->set_rep_transport's send callback.
*/
-#define DB_REP_PERMANENT 0x0001 /* Important--app. may want to flush. */
+#define DB_REP_NOBUFFER 0x0000001 /* Do not buffer this message. */
+#define DB_REP_PERMANENT 0x0000002 /* Important--app. may want to flush. */
/*******************************************************
* Locking.
@@ -330,13 +331,12 @@ struct __db_dbt {
#define DB_LOCK_YOUNGEST 8 /* Abort youngest transaction. */
/* Flag values for lock_vec(), lock_get(). */
-#define DB_LOCK_FREE_LOCKER 0x001 /* Internal: Free locker as well. */
-#define DB_LOCK_NOWAIT 0x002 /* Don't wait on unavailable lock. */
-#define DB_LOCK_RECORD 0x004 /* Internal: record lock. */
-#define DB_LOCK_REMOVE 0x008 /* Internal: flag object removed. */
-#define DB_LOCK_SET_TIMEOUT 0x010 /* Internal: set lock timeout. */
-#define DB_LOCK_SWITCH 0x020 /* Internal: switch existing lock. */
-#define DB_LOCK_UPGRADE 0x040 /* Internal: upgrade existing lock. */
+#define DB_LOCK_NOWAIT 0x001 /* Don't wait on unavailable lock. */
+#define DB_LOCK_RECORD 0x002 /* Internal: record lock. */
+#define DB_LOCK_REMOVE 0x004 /* Internal: flag object removed. */
+#define DB_LOCK_SET_TIMEOUT 0x008 /* Internal: set lock timeout. */
+#define DB_LOCK_SWITCH 0x010 /* Internal: switch existing lock. */
+#define DB_LOCK_UPGRADE 0x020 /* Internal: upgrade existing lock. */
/*
* Simple R/W lock modes and for multi-granularity intention locking.
@@ -431,7 +431,6 @@ struct __db_ilock {
#define DB_HANDLE_LOCK 1
#define DB_RECORD_LOCK 2
#define DB_PAGE_LOCK 3
-#define DB_TXN_LOCK 4
u_int32_t type; /* Type of lock. */
};
@@ -460,14 +459,24 @@ struct __db_lockreq {
/*******************************************************
* Logging.
*******************************************************/
-#define DB_LOGVERSION 7 /* Current log version. */
-#define DB_LOGOLDVER 7 /* Oldest log version supported. */
+#define DB_LOGVERSION 8 /* Current log version. */
+#define DB_LOGOLDVER 8 /* Oldest log version supported. */
#define DB_LOGMAGIC 0x040988
-/* Flag values for log_archive(). */
-#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
-#define DB_ARCH_DATA 0x002 /* Data files. */
-#define DB_ARCH_LOG 0x004 /* Log files. */
+/* Flag values for DB_ENV->log_archive(). */
+#define DB_ARCH_ABS 0x001 /* Absolute pathnames. */
+#define DB_ARCH_DATA 0x002 /* Data files. */
+#define DB_ARCH_LOG 0x004 /* Log files. */
+#define DB_ARCH_REMOVE 0x008 /* Remove log files. */
+
+/* Flag values for DB_ENV->log_put(). */
+#define DB_FLUSH 0x001 /* Flush data to disk (public). */
+#define DB_LOG_CHKPNT 0x002 /* Flush supports a checkpoint */
+#define DB_LOG_COMMIT 0x004 /* Flush supports a commit */
+#define DB_LOG_NOCOPY 0x008 /* Don't copy data */
+#define DB_LOG_NOT_DURABLE 0x010 /* Do not log; keep in memory */
+#define DB_LOG_PERM 0x020 /* Flag record with REP_PERMANENT */
+#define DB_LOG_WRNOSYNC 0x040 /* Write, don't sync log_put */
/*
* A DB_LSN has two parts, a fileid which identifies a specific file, and an
@@ -484,13 +493,25 @@ struct __db_lsn {
};
/*
+ * Application-specified log record types start at DB_user_BEGIN, and must not
+ * equal or exceed DB_debug_FLAG.
+ *
+ * DB_debug_FLAG is the high-bit of the u_int32_t that specifies a log record
+ * type. If the flag is set, it's a log record that was logged for debugging
+ * purposes only, even if it reflects a database change -- the change was part
+ * of a non-durable transaction.
+ */
+#define DB_user_BEGIN 10000
+#define DB_debug_FLAG 0x80000000
+
+/*
* DB_LOGC --
* Log cursor.
*/
struct __db_log_cursor {
DB_ENV *dbenv; /* Enclosing dbenv. */
- DB_FH *c_fh; /* File handle. */
+ DB_FH *c_fhp; /* File handle. */
DB_LSN c_lsn; /* Cursor: LSN */
u_int32_t c_len; /* Cursor: record length */
u_int32_t c_prev; /* Cursor: previous record's offset */
@@ -553,6 +574,10 @@ struct __db_log_stat {
#define DB_MPOOL_DIRTY 0x002 /* Page is modified. */
#define DB_MPOOL_DISCARD 0x004 /* Don't cache the page. */
+/* Flags values for DB_MPOOLFILE->set_flags. */
+#define DB_MPOOL_NOFILE 0x001 /* Never open a backing file. */
+#define DB_MPOOL_UNLINK 0x002 /* Unlink the file on last close. */
+
/* Priority values for DB_MPOOLFILE->set_priority. */
typedef enum {
DB_PRIORITY_VERY_LOW=1,
@@ -564,21 +589,14 @@ typedef enum {
/* Per-process DB_MPOOLFILE information. */
struct __db_mpoolfile {
- /* These fields need to be protected for multi-threaded support. */
- DB_MUTEX *mutexp; /* Structure thread lock. */
-
DB_FH *fhp; /* Underlying file handle. */
- u_int32_t ref; /* Reference count. */
-
/*
* !!!
- * The pinref and q fields are protected by the region lock, not the
- * DB_MPOOLFILE structure mutex. We don't use the structure mutex
- * because then I/O (which holds the structure lock held because of
- * the race between the seek and write of the file descriptor) would
- * block any other put/get calls using this DB_MPOOLFILE structure.
+ * The ref, pinref and q fields are protected by the region lock.
*/
+ u_int32_t ref; /* Reference count. */
+
u_int32_t pinref; /* Pinned block reference count. */
/*
@@ -592,52 +610,69 @@ struct __db_mpoolfile {
} q; /* Linked list of DB_MPOOLFILE's. */
/*
- * These fields are not thread-protected because they are initialized
- * when the file is opened and never modified.
+ * !!!
+ * The rest of the fields (with the exception of the MP_FLUSH flag)
+ * are not thread-protected, even when they may be modified at any
+ * time by the application. The reason is the DB_MPOOLFILE handle
+ * is single-threaded from the viewpoint of the application, and so
+ * the only fields needing to be thread-protected are those accessed
+ * by checkpoint or sync threads when using DB_MPOOLFILE structures
+ * to flush buffers from the cache.
*/
- int ftype; /* File type. */
- DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
- u_int8_t *fileid; /* Unique file ID. */
- int32_t lsn_offset; /* LSN offset in page. */
- u_int32_t clear_len; /* Cleared length on created pages. */
+ DB_ENV *dbenv; /* Overlying DB_ENV. */
+ MPOOLFILE *mfp; /* Underlying MPOOLFILE. */
- DB_MPOOL *dbmp; /* Overlying DB_MPOOL. */
- MPOOLFILE *mfp; /* Underlying MPOOLFILE. */
+ u_int32_t clear_len; /* Cleared length on created pages. */
+ u_int8_t /* Unique file ID. */
+ fileid[DB_FILE_ID_LEN];
+ int ftype; /* File type. */
+ int32_t lsn_offset; /* LSN offset in page. */
+ u_int32_t gbytes, bytes; /* Maximum file size. */
+ DBT *pgcookie; /* Byte-string passed to pgin/pgout. */
+ DB_CACHE_PRIORITY /* Cache priority. */
+ priority;
- void *addr; /* Address of mmap'd region. */
- size_t len; /* Length of mmap'd region. */
+ void *addr; /* Address of mmap'd region. */
+ size_t len; /* Length of mmap'd region. */
+
+ u_int32_t config_flags; /* Flags to DB_MPOOLFILE->set_flags. */
/* Methods. */
- int (*close) __P((DB_MPOOLFILE *, u_int32_t));
- int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
- void (*get_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
- void (*last_pgno) __P((DB_MPOOLFILE *, db_pgno_t *));
- int (*open)__P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
- int (*put) __P((DB_MPOOLFILE *, void *, u_int32_t));
- void (*refcnt) __P((DB_MPOOLFILE *, db_pgno_t *));
- int (*set) __P((DB_MPOOLFILE *, void *, u_int32_t));
- int (*set_clear_len) __P((DB_MPOOLFILE *, u_int32_t));
- int (*set_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
- int (*set_ftype) __P((DB_MPOOLFILE *, int));
- int (*set_lsn_offset) __P((DB_MPOOLFILE *, int32_t));
- int (*set_pgcookie) __P((DB_MPOOLFILE *, DBT *));
- int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
- void (*set_unlink) __P((DB_MPOOLFILE *, int));
- int (*sync) __P((DB_MPOOLFILE *));
+ int (*close) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get) __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ int (*open)__P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
+ int (*put) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*set) __P((DB_MPOOLFILE *, void *, u_int32_t));
+ int (*get_clear_len) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_clear_len) __P((DB_MPOOLFILE *, u_int32_t));
+ int (*get_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*set_fileid) __P((DB_MPOOLFILE *, u_int8_t *));
+ int (*get_flags) __P((DB_MPOOLFILE *, u_int32_t *));
+ int (*set_flags) __P((DB_MPOOLFILE *, u_int32_t, int));
+ int (*get_ftype) __P((DB_MPOOLFILE *, int *));
+ int (*set_ftype) __P((DB_MPOOLFILE *, int));
+ int (*get_lsn_offset) __P((DB_MPOOLFILE *, int32_t *));
+ int (*set_lsn_offset) __P((DB_MPOOLFILE *, int32_t));
+ int (*get_maxsize) __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t *));
+ int (*set_maxsize) __P((DB_MPOOLFILE *, u_int32_t, u_int32_t));
+ int (*get_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*set_pgcookie) __P((DB_MPOOLFILE *, DBT *));
+ int (*get_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
+ int (*set_priority) __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
+ int (*sync) __P((DB_MPOOLFILE *));
/*
- * MP_OPEN_CALLED and MP_READONLY do not need to be thread protected
- * because they are initialized when the file is opened, and never
- * modified.
+ * MP_FILEID_SET, MP_OPEN_CALLED and MP_READONLY do not need to be
+ * thread protected because they are initialized before the file is
+ * linked onto the per-process lists, and never modified.
*
- * MP_FLUSH, MP_UPGRADE and MP_UPGRADE_FAIL are thread protected
- * becase they are potentially read by multiple threads of control.
+ * MP_FLUSH is thread protected becase it is potentially read/set by
+ * multiple threads of control.
*/
-#define MP_FLUSH 0x001 /* Was opened to flush a buffer. */
-#define MP_OPEN_CALLED 0x002 /* File opened. */
-#define MP_READONLY 0x004 /* File is readonly. */
-#define MP_UPGRADE 0x008 /* File descriptor is readwrite. */
-#define MP_UPGRADE_FAIL 0x010 /* Upgrade wasn't possible. */
+#define MP_FILEID_SET 0x001 /* Application supplied a file ID. */
+#define MP_FLUSH 0x002 /* Was opened to flush a buffer. */
+#define MP_OPEN_CALLED 0x004 /* File opened. */
+#define MP_READONLY 0x008 /* File is readonly. */
u_int32_t flags;
};
@@ -721,6 +756,7 @@ struct __db_txn {
DB_TXN *parent; /* Pointer to transaction's parent. */
DB_LSN last_lsn; /* Lsn of last log write. */
u_int32_t txnid; /* Unique transaction id. */
+ u_int32_t tid; /* Thread id for use in MT XA. */
roff_t off; /* Detail structure within region. */
db_timeout_t lock_timeout; /* Timeout for locks for this txn. */
db_timeout_t expire; /* Time this txn expires. */
@@ -730,11 +766,16 @@ struct __db_txn {
* !!!
* Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_txn) links;
+ * TAILQ_ENTRY(__db_txn) xalinks;
*/
struct {
struct __db_txn *tqe_next;
struct __db_txn **tqe_prev;
} links; /* Links transactions off manager. */
+ struct {
+ struct __db_txn *tqe_next;
+ struct __db_txn **tqe_prev;
+ } xalinks; /* Links active XA transactions. */
/*
* !!!
@@ -749,6 +790,16 @@ struct __db_txn {
/*
* !!!
* Explicit representations of structures from queue.h.
+ * STAILQ_HEAD(__logrec, __txn_logrec) logs;
+ */
+ struct {
+ struct __txn_logrec *stqh_first;
+ struct __txn_logrec **stqh_last;
+ } logs; /* Links deferred events. */
+
+ /*
+ * !!!
+ * Explicit representations of structures from queue.h.
* TAILQ_HEAD(__kids, __db_txn) kids;
*/
struct __kids {
@@ -766,17 +817,6 @@ struct __db_txn {
struct __db_txn **tqe_prev;
} klinks;
- /*
- * !!!
- * Explicit representations of structures from queue.h.
- * TAILQ_ENTRY(__db_txn) xalinks;
- */
- struct {
- struct __db_txn *tqe_next;
- struct __db_txn **tqe_prev;
- } xalinks;
- void *xa_thread_id;
-
/* API-private structure: used by C++ */
void *api_internal;
@@ -790,22 +830,39 @@ struct __db_txn {
int (*prepare) __P((DB_TXN *, u_int8_t *));
int (*set_timeout) __P((DB_TXN *, db_timeout_t, u_int32_t));
-#define TXN_CHILDCOMMIT 0x01 /* Transaction that has committed. */
-#define TXN_COMPENSATE 0x02 /* Compensating transaction. */
-#define TXN_DIRTY_READ 0x04 /* Transaction does dirty reads. */
-#define TXN_LOCKTIMEOUT 0x08 /* Transaction has a lock timeout. */
-#define TXN_MALLOC 0x10 /* Structure allocated by TXN system. */
-#define TXN_NOSYNC 0x20 /* Do not sync on prepare and commit. */
-#define TXN_NOWAIT 0x40 /* Do not wait on locks. */
-#define TXN_SYNC 0x80 /* Sync on prepare and commit. */
+#define TXN_CHILDCOMMIT 0x001 /* Transaction that has committed. */
+#define TXN_COMPENSATE 0x002 /* Compensating transaction. */
+#define TXN_DIRTY_READ 0x004 /* Transaction does dirty reads. */
+#define TXN_LOCKTIMEOUT 0x008 /* Transaction has a lock timeout. */
+#define TXN_MALLOC 0x010 /* Structure allocated by TXN system. */
+#define TXN_NOSYNC 0x020 /* Do not sync on prepare and commit. */
+#define TXN_NOWAIT 0x040 /* Do not wait on locks. */
+#define TXN_RESTORED 0x080 /* Transaction has been restored. */
+#define TXN_SYNC 0x100 /* Sync on prepare and commit. */
u_int32_t flags;
};
+/*
+ * Structure used for two phase commit interface. Berkeley DB support for two
+ * phase commit is compatible with the X/open XA interface.
+ *
+ * The XA #define XIDDATASIZE defines the size of a global transaction ID. We
+ * have our own version here (for name space reasons) which must have the same
+ * value.
+ */
+#define DB_XIDDATASIZE 128
+struct __db_preplist {
+ DB_TXN *txn;
+ u_int8_t gid[DB_XIDDATASIZE];
+};
+
/* Transaction statistics structure. */
struct __db_txn_active {
- u_int32_t txnid; /* Transaction ID */
- u_int32_t parentid; /* Transaction ID of parent */
- DB_LSN lsn; /* LSN when transaction began */
+ u_int32_t txnid; /* Transaction ID */
+ u_int32_t parentid; /* Transaction ID of parent */
+ DB_LSN lsn; /* LSN when transaction began */
+ u_int32_t xa_status; /* XA status */
+ u_int8_t xid[DB_XIDDATASIZE]; /* XA global transaction ID */
};
struct __db_txn_stat {
@@ -826,18 +883,6 @@ struct __db_txn_stat {
u_int32_t st_regsize; /* Region size. */
};
-/*
- * Structure used for two phase commit interface. Berkeley DB support for two
- * phase commit is compatible with the X/open XA interface. The xa #define
- * XIDDATASIZE defines the size of a global transaction ID. We have our own
- * version here which must have the same value.
- */
-#define DB_XIDDATASIZE 128
-struct __db_preplist {
- DB_TXN *txn;
- u_int8_t gid[DB_XIDDATASIZE];
-};
-
/*******************************************************
* Replication.
*******************************************************/
@@ -870,6 +915,7 @@ struct __db_rep_stat {
int st_env_id; /* Current environment ID. */
int st_env_priority; /* Current environment priority. */
u_int32_t st_gen; /* Current generation number. */
+ u_int32_t st_in_recovery; /* This site is in client sync-up. */
u_int32_t st_log_duplicated; /* Log records received multiply.+ */
u_int32_t st_log_queued; /* Log records currently queued.+ */
u_int32_t st_log_queued_max; /* Max. log records queued at once.+ */
@@ -921,15 +967,15 @@ typedef enum {
#define DB_RENAMEMAGIC 0x030800 /* File has been renamed. */
#define DB_BTREEVERSION 9 /* Current btree version. */
-#define DB_BTREEOLDVER 6 /* Oldest btree version supported. */
+#define DB_BTREEOLDVER 8 /* Oldest btree version supported. */
#define DB_BTREEMAGIC 0x053162
#define DB_HASHVERSION 8 /* Current hash version. */
-#define DB_HASHOLDVER 4 /* Oldest hash version supported. */
+#define DB_HASHOLDVER 7 /* Oldest hash version supported. */
#define DB_HASHMAGIC 0x061561
#define DB_QAMVERSION 4 /* Current queue version. */
-#define DB_QAMOLDVER 1 /* Oldest queue version supported. */
+#define DB_QAMOLDVER 3 /* Oldest queue version supported. */
#define DB_QAMMAGIC 0x042253
/*
@@ -940,51 +986,50 @@ typedef enum {
#define DB_APPEND 2 /* put() */
#define DB_BEFORE 3 /* c_put() */
#define DB_CACHED_COUNTS 4 /* stat() */
-#define DB_COMMIT 5 /* log_put() (internal) */
-#define DB_CONSUME 6 /* get() */
-#define DB_CONSUME_WAIT 7 /* get() */
-#define DB_CURRENT 8 /* c_get(), c_put(), DB_LOGC->get() */
-#define DB_FAST_STAT 9 /* stat() */
-#define DB_FIRST 10 /* c_get(), DB_LOGC->get() */
-#define DB_GET_BOTH 11 /* get(), c_get() */
-#define DB_GET_BOTHC 12 /* c_get() (internal) */
-#define DB_GET_BOTH_RANGE 13 /* get(), c_get() */
-#define DB_GET_RECNO 14 /* c_get() */
-#define DB_JOIN_ITEM 15 /* c_get(); do not do primary lookup */
-#define DB_KEYFIRST 16 /* c_put() */
-#define DB_KEYLAST 17 /* c_put() */
-#define DB_LAST 18 /* c_get(), DB_LOGC->get() */
-#define DB_NEXT 19 /* c_get(), DB_LOGC->get() */
-#define DB_NEXT_DUP 20 /* c_get() */
-#define DB_NEXT_NODUP 21 /* c_get() */
-#define DB_NODUPDATA 22 /* put(), c_put() */
-#define DB_NOOVERWRITE 23 /* put() */
-#define DB_NOSYNC 24 /* close() */
-#define DB_POSITION 25 /* c_dup() */
-#define DB_POSITIONI 26 /* c_dup() (internal) */
-#define DB_PREV 27 /* c_get(), DB_LOGC->get() */
-#define DB_PREV_NODUP 28 /* c_get(), DB_LOGC->get() */
-#define DB_RECORDCOUNT 29 /* stat() */
-#define DB_SET 30 /* c_get(), DB_LOGC->get() */
-#define DB_SET_LOCK_TIMEOUT 31 /* set_timout() */
-#define DB_SET_RANGE 32 /* c_get() */
-#define DB_SET_RECNO 33 /* get(), c_get() */
-#define DB_SET_TXN_NOW 34 /* set_timout() (internal) */
-#define DB_SET_TXN_TIMEOUT 35 /* set_timout() */
-#define DB_UPDATE_SECONDARY 36 /* c_get(), c_del() (internal) */
-#define DB_WRITECURSOR 37 /* cursor() */
-#define DB_WRITELOCK 38 /* cursor() (internal) */
+#define DB_CONSUME 5 /* get() */
+#define DB_CONSUME_WAIT 6 /* get() */
+#define DB_CURRENT 7 /* c_get(), c_put(), DB_LOGC->get() */
+#define DB_FAST_STAT 8 /* stat() */
+#define DB_FIRST 9 /* c_get(), DB_LOGC->get() */
+#define DB_GET_BOTH 10 /* get(), c_get() */
+#define DB_GET_BOTHC 11 /* c_get() (internal) */
+#define DB_GET_BOTH_RANGE 12 /* get(), c_get() */
+#define DB_GET_RECNO 13 /* c_get() */
+#define DB_JOIN_ITEM 14 /* c_get(); do not do primary lookup */
+#define DB_KEYFIRST 15 /* c_put() */
+#define DB_KEYLAST 16 /* c_put() */
+#define DB_LAST 17 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT 18 /* c_get(), DB_LOGC->get() */
+#define DB_NEXT_DUP 19 /* c_get() */
+#define DB_NEXT_NODUP 20 /* c_get() */
+#define DB_NODUPDATA 21 /* put(), c_put() */
+#define DB_NOOVERWRITE 22 /* put() */
+#define DB_NOSYNC 23 /* close() */
+#define DB_POSITION 24 /* c_dup() */
+#define DB_PREV 25 /* c_get(), DB_LOGC->get() */
+#define DB_PREV_NODUP 26 /* c_get(), DB_LOGC->get() */
+#define DB_RECORDCOUNT 27 /* stat() */
+#define DB_SET 28 /* c_get(), DB_LOGC->get() */
+#define DB_SET_LOCK_TIMEOUT 29 /* set_timout() */
+#define DB_SET_RANGE 30 /* c_get() */
+#define DB_SET_RECNO 31 /* get(), c_get() */
+#define DB_SET_TXN_NOW 32 /* set_timout() (internal) */
+#define DB_SET_TXN_TIMEOUT 33 /* set_timout() */
+#define DB_UPDATE_SECONDARY 34 /* c_get(), c_del() (internal) */
+#define DB_WRITECURSOR 35 /* cursor() */
+#define DB_WRITELOCK 36 /* cursor() (internal) */
/* This has to change when the max opcode hits 255. */
#define DB_OPFLAGS_MASK 0x000000ff /* Mask for operations flags. */
-/* DB_DIRTY_READ 0x01000000 Dirty Read. */
-#define DB_FLUSH 0x02000000 /* Flush data to disk. */
+
+/*
+ * Masks for flags that can be OR'd into DB access method and cursor
+ * operation values.
+ *
+ * DB_DIRTY_READ 0x02000000 Dirty Read. */
#define DB_MULTIPLE 0x04000000 /* Return multiple data values. */
#define DB_MULTIPLE_KEY 0x08000000 /* Return multiple data/key pairs. */
-#define DB_NOCOPY 0x10000000 /* Don't copy data */
-#define DB_PERMANENT 0x20000000 /* Flag record with REP_PERMANENT. */
-#define DB_RMW 0x40000000 /* Acquire write flag immediately. */
-#define DB_WRNOSYNC 0x80000000 /* Private: write, don't sync log_put */
+#define DB_RMW 0x10000000 /* Acquire write flag immediately. */
/*
* DB (user visible) error return codes.
@@ -1002,38 +1047,41 @@ typedef enum {
*/
/* DB (public) error return codes. */
#define DB_DONOTINDEX (-30999)/* "Null" return from 2ndary callbk. */
-#define DB_KEYEMPTY (-30998)/* Key/data deleted or never created. */
-#define DB_KEYEXIST (-30997)/* The key/data pair already exists. */
-#define DB_LOCK_DEADLOCK (-30996)/* Deadlock. */
-#define DB_LOCK_NOTGRANTED (-30995)/* Lock unavailable. */
-#define DB_NOSERVER (-30994)/* Server panic return. */
-#define DB_NOSERVER_HOME (-30993)/* Bad home sent to server. */
-#define DB_NOSERVER_ID (-30992)/* Bad ID sent to server. */
-#define DB_NOTFOUND (-30991)/* Key/data pair not found (EOF). */
-#define DB_OLD_VERSION (-30990)/* Out-of-date version. */
-#define DB_PAGE_NOTFOUND (-30989)/* Requested page not found. */
-#define DB_REP_DUPMASTER (-30988)/* There are two masters. */
-#define DB_REP_HOLDELECTION (-30987)/* Time to hold an election. */
-#define DB_REP_NEWMASTER (-30986)/* We have learned of a new master. */
-#define DB_REP_NEWSITE (-30985)/* New site entered system. */
-#define DB_REP_OUTDATED (-30984)/* Site is too far behind master. */
-#define DB_REP_UNAVAIL (-30983)/* Site cannot currently be reached. */
-#define DB_RUNRECOVERY (-30982)/* Panic return. */
-#define DB_SECONDARY_BAD (-30981)/* Secondary index corrupt. */
-#define DB_VERIFY_BAD (-30980)/* Verify failed; bad format. */
+#define DB_FILEOPEN (-30998)/* Rename/remove while file is open. */
+#define DB_KEYEMPTY (-30997)/* Key/data deleted or never created. */
+#define DB_KEYEXIST (-30996)/* The key/data pair already exists. */
+#define DB_LOCK_DEADLOCK (-30995)/* Deadlock. */
+#define DB_LOCK_NOTGRANTED (-30994)/* Lock unavailable. */
+#define DB_NOSERVER (-30993)/* Server panic return. */
+#define DB_NOSERVER_HOME (-30992)/* Bad home sent to server. */
+#define DB_NOSERVER_ID (-30991)/* Bad ID sent to server. */
+#define DB_NOTFOUND (-30990)/* Key/data pair not found (EOF). */
+#define DB_OLD_VERSION (-30989)/* Out-of-date version. */
+#define DB_PAGE_NOTFOUND (-30988)/* Requested page not found. */
+#define DB_REP_DUPMASTER (-30987)/* There are two masters. */
+#define DB_REP_HANDLE_DEAD (-30986)/* Rolled back a commit. */
+#define DB_REP_HOLDELECTION (-30985)/* Time to hold an election. */
+#define DB_REP_ISPERM (-30984)/* Cached not written perm written.*/
+#define DB_REP_NEWMASTER (-30983)/* We have learned of a new master. */
+#define DB_REP_NEWSITE (-30982)/* New site entered system. */
+#define DB_REP_NOTPERM (-30981)/* Permanent log record not written. */
+#define DB_REP_OUTDATED (-30980)/* Site is too far behind master. */
+#define DB_REP_UNAVAIL (-30979)/* Site cannot currently be reached. */
+#define DB_RUNRECOVERY (-30978)/* Panic return. */
+#define DB_SECONDARY_BAD (-30977)/* Secondary index corrupt. */
+#define DB_VERIFY_BAD (-30976)/* Verify failed; bad format. */
/* DB (private) error return codes. */
#define DB_ALREADY_ABORTED (-30899)
#define DB_DELETED (-30898)/* Recovery file marked deleted. */
-#define DB_JAVA_CALLBACK (-30897)/* Exception during a java callback. */
-#define DB_LOCK_NOTEXIST (-30896)/* Object to lock is gone. */
-#define DB_NEEDSPLIT (-30895)/* Page needs to be split. */
-#define DB_SURPRISE_KID (-30894)/* Child commit where parent
+#define DB_LOCK_NOTEXIST (-30897)/* Object to lock is gone. */
+#define DB_NEEDSPLIT (-30896)/* Page needs to be split. */
+#define DB_SURPRISE_KID (-30895)/* Child commit where parent
didn't know it was a parent. */
-#define DB_SWAPBYTES (-30893)/* Database needs byte swapping. */
-#define DB_TIMEOUT (-30892)/* Timed out waiting for election. */
-#define DB_TXN_CKP (-30891)/* Encountered ckp record in log. */
-#define DB_VERIFY_FATAL (-30890)/* DB->verify cannot proceed. */
+#define DB_SWAPBYTES (-30894)/* Database needs byte swapping. */
+#define DB_TIMEOUT (-30893)/* Timed out waiting for election. */
+#define DB_TXN_CKP (-30892)/* Encountered ckp record in log. */
+#define DB_VERIFY_FATAL (-30891)/* DB->verify cannot proceed. */
/* Database handle. */
struct __db {
@@ -1057,10 +1105,12 @@ struct __db {
DBTYPE type; /* DB access method type. */
DB_MPOOLFILE *mpf; /* Backing buffer pool. */
- DB_CACHE_PRIORITY priority; /* Priority in the buffer pool. */
DB_MUTEX *mutexp; /* Synchronization for free threading */
+ char *fname, *dname; /* File/database passed to DB->open. */
+ u_int32_t open_flags; /* Flags passed to DB->open. */
+
u_int8_t fileid[DB_FILE_ID_LEN];/* File's unique ID for locking. */
u_int32_t adj_fileid; /* File's unique ID for curs. adj. */
@@ -1076,6 +1126,8 @@ struct __db {
long cl_id; /* RPC: remote client id. */
+ time_t timestamp; /* Handle timestamp for replication. */
+
/*
* Returned data memory for DB->get() and friends.
*/
@@ -1191,6 +1243,17 @@ struct __db {
int (*get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
int (*pget) __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
int (*get_byteswapped) __P((DB *, int *));
+ int (*get_cachesize) __P((DB *, u_int32_t *, u_int32_t *, int *));
+ int (*get_dbname) __P((DB *, const char **, const char **));
+ int (*get_encrypt_flags) __P((DB *, u_int32_t *));
+ int (*get_env) __P((DB *, DB_ENV **));
+ void (*get_errfile) __P((DB *, FILE **));
+ void (*get_errpfx) __P((DB *, const char **));
+ int (*get_flags) __P((DB *, u_int32_t *));
+ int (*get_lorder) __P((DB *, int *));
+ int (*get_open_flags) __P((DB *, u_int32_t *));
+ int (*get_pagesize) __P((DB *, u_int32_t *));
+ int (*get_transactional) __P((DB *, int *));
int (*get_type) __P((DB *, DBTYPE *));
int (*join) __P((DB *, DBC **, DBC **, u_int32_t));
int (*key_range) __P((DB *,
@@ -1206,7 +1269,6 @@ struct __db {
int (*set_alloc) __P((DB *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
int (*set_cachesize) __P((DB *, u_int32_t, u_int32_t, int));
- int (*set_cache_priority) __P((DB *, DB_CACHE_PRIORITY));
int (*set_dup_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
int (*set_encrypt) __P((DB *, const char *, u_int32_t));
@@ -1224,6 +1286,7 @@ struct __db {
int (*verify) __P((DB *,
const char *, const char *, FILE *, u_int32_t));
+ int (*get_bt_minkey) __P((DB *, u_int32_t *));
int (*set_bt_compare) __P((DB *,
int (*)(DB *, const DBT *, const DBT *)));
int (*set_bt_maxkey) __P((DB *, u_int32_t));
@@ -1231,15 +1294,23 @@ struct __db {
int (*set_bt_prefix) __P((DB *,
size_t (*)(DB *, const DBT *, const DBT *)));
+ int (*get_h_ffactor) __P((DB *, u_int32_t *));
+ int (*get_h_nelem) __P((DB *, u_int32_t *));
int (*set_h_ffactor) __P((DB *, u_int32_t));
int (*set_h_hash) __P((DB *,
u_int32_t (*)(DB *, const void *, u_int32_t)));
int (*set_h_nelem) __P((DB *, u_int32_t));
+ int (*get_re_delim) __P((DB *, int *));
+ int (*get_re_len) __P((DB *, u_int32_t *));
+ int (*get_re_pad) __P((DB *, int *));
+ int (*get_re_source) __P((DB *, const char **));
int (*set_re_delim) __P((DB *, int));
int (*set_re_len) __P((DB *, u_int32_t));
int (*set_re_pad) __P((DB *, int));
int (*set_re_source) __P((DB *, const char *));
+
+ int (*get_q_extentsize) __P((DB *, u_int32_t *));
int (*set_q_extentsize) __P((DB *, u_int32_t));
int (*db_am_remove) __P((DB *,
@@ -1275,31 +1346,33 @@ struct __db {
#define DB_AM_FIXEDLEN 0x00001000 /* Fixed-length records. */
#define DB_AM_INMEM 0x00002000 /* In-memory; no sync on close. */
#define DB_AM_IN_RENAME 0x00004000 /* File is being renamed. */
-#define DB_AM_OPEN_CALLED 0x00008000 /* DB->open called. */
-#define DB_AM_PAD 0x00010000 /* Fixed-length record pad. */
-#define DB_AM_PGDEF 0x00020000 /* Page size was defaulted. */
-#define DB_AM_RDONLY 0x00040000 /* Database is readonly. */
-#define DB_AM_RECNUM 0x00080000 /* DB_RECNUM. */
-#define DB_AM_RECOVER 0x00100000 /* DB opened by recovery routine. */
-#define DB_AM_RENUMBER 0x00200000 /* DB_RENUMBER. */
-#define DB_AM_REVSPLITOFF 0x00400000 /* DB_REVSPLITOFF. */
-#define DB_AM_SECONDARY 0x00800000 /* Database is a secondary index. */
-#define DB_AM_SNAPSHOT 0x01000000 /* DB_SNAPSHOT. */
-#define DB_AM_SUBDB 0x02000000 /* Subdatabases supported. */
-#define DB_AM_SWAP 0x04000000 /* Pages need to be byte-swapped. */
-#define DB_AM_TXN 0x08000000 /* Opened in a transaction. */
-#define DB_AM_VERIFYING 0x10000000 /* DB handle is in the verifier. */
+#define DB_AM_NOT_DURABLE 0x00008000 /* Do not log changes. */
+#define DB_AM_OPEN_CALLED 0x00010000 /* DB->open called. */
+#define DB_AM_PAD 0x00020000 /* Fixed-length record pad. */
+#define DB_AM_PGDEF 0x00040000 /* Page size was defaulted. */
+#define DB_AM_RDONLY 0x00080000 /* Database is readonly. */
+#define DB_AM_RECNUM 0x00100000 /* DB_RECNUM. */
+#define DB_AM_RECOVER 0x00200000 /* DB opened by recovery routine. */
+#define DB_AM_RENUMBER 0x00400000 /* DB_RENUMBER. */
+#define DB_AM_REPLICATION 0x00800000 /* An internal replication file. */
+#define DB_AM_REVSPLITOFF 0x01000000 /* DB_REVSPLITOFF. */
+#define DB_AM_SECONDARY 0x02000000 /* Database is a secondary index. */
+#define DB_AM_SNAPSHOT 0x04000000 /* DB_SNAPSHOT. */
+#define DB_AM_SUBDB 0x08000000 /* Subdatabases supported. */
+#define DB_AM_SWAP 0x10000000 /* Pages need to be byte-swapped. */
+#define DB_AM_TXN 0x20000000 /* Opened in a transaction. */
+#define DB_AM_VERIFYING 0x40000000 /* DB handle is in the verifier. */
+ u_int32_t orig_flags; /* Flags at open, for refresh. */
u_int32_t flags;
};
/*
- * Macros for bulk get. Note that wherever we use a DBT *, we explicitly
- * cast it; this allows the same macros to work with C++ Dbt *'s, as Dbt
- * is a subclass of struct DBT in C++.
+ * Macros for bulk get. These are only intended for the C API.
+ * For C++, use DbMultiple*Iterator.
*/
#define DB_MULTIPLE_INIT(pointer, dbt) \
- (pointer = (u_int8_t *)((DBT *)(dbt))->data + \
- ((DBT *)(dbt))->ulen - sizeof(u_int32_t))
+ (pointer = (u_int8_t *)(dbt)->data + \
+ (dbt)->ulen - sizeof(u_int32_t))
#define DB_MULTIPLE_NEXT(pointer, dbt, retdata, retdlen) \
do { \
if (*((u_int32_t *)(pointer)) == (u_int32_t)-1) { \
@@ -1308,12 +1381,12 @@ struct __db {
break; \
} \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
if (retdlen == 0 && \
- retdata == (u_int8_t *)((DBT *)(dbt))->data) \
+ retdata == (u_int8_t *)(dbt)->data) \
retdata = NULL; \
} while (0)
#define DB_MULTIPLE_KEY_NEXT(pointer, dbt, retkey, retklen, retdata, retdlen) \
@@ -1325,12 +1398,12 @@ struct __db {
break; \
} \
retkey = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retklen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
@@ -1347,7 +1420,7 @@ struct __db {
recno = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdata = (u_int8_t *) \
- ((DBT *)(dbt))->data + *(u_int32_t *)(pointer); \
+ (dbt)->data + *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
retdlen = *(u_int32_t *)(pointer); \
(pointer) = (u_int32_t *)(pointer) - 1; \
@@ -1395,7 +1468,7 @@ struct __dbc {
u_int32_t locker; /* Locker for this operation. */
DBT lock_dbt; /* DBT referencing lock. */
DB_LOCK_ILOCK lock; /* Object to be locked. */
- DB_LOCK mylock; /* Lock held on this cursor. */
+ DB_LOCK mylock; /* CDB lock held on this cursor. */
long cl_id; /* Remote client id. */
@@ -1420,9 +1493,6 @@ struct __dbc {
int (*c_am_put) __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
int (*c_am_writelock) __P((DBC *));
- /* Private: for secondary indices. */
- int (*c_real_get) __P((DBC *, DBT *, DBT *, u_int32_t));
-
#define DBC_ACTIVE 0x0001 /* Cursor in use. */
#define DBC_COMPENSATE 0x0002 /* Cursor compensating, don't lock. */
#define DBC_DIRTY_READ 0x0004 /* Cursor supports dirty reads. */
@@ -1431,11 +1501,10 @@ struct __dbc {
#define DBC_RMW 0x0020 /* Acquire write flag in read op. */
#define DBC_TRANSIENT 0x0040 /* Cursor is transient. */
#define DBC_WRITECURSOR 0x0080 /* Cursor may be used to write (CDB). */
-#define DBC_WRITEDUP 0x0100 /* idup'ed DBC_WRITECURSOR (CDB). */
-#define DBC_WRITER 0x0200 /* Cursor immediately writing (CDB). */
-#define DBC_MULTIPLE 0x0400 /* Return Multiple data. */
-#define DBC_MULTIPLE_KEY 0x0800 /* Return Multiple keys and data. */
-#define DBC_OWN_LID 0x1000 /* Free lock id on destroy. */
+#define DBC_WRITER 0x0100 /* Cursor immediately writing (CDB). */
+#define DBC_MULTIPLE 0x0200 /* Return Multiple data. */
+#define DBC_MULTIPLE_KEY 0x0400 /* Return Multiple keys and data. */
+#define DBC_OWN_LID 0x0800 /* Free lock id on destroy. */
u_int32_t flags;
};
@@ -1566,8 +1635,15 @@ struct __db_env {
size_t mp_size; /* DEPRECATED: Cachesize: bytes. */
int mp_ncache; /* Number of cache regions. */
size_t mp_mmapsize; /* Maximum file size for mmap. */
+ int mp_maxwrite; /* Maximum buffers to write. */
+ int /* Sleep after writing max buffers. */
+ mp_maxwrite_sleep;
+ /* Replication */
int rep_eid; /* environment id. */
+ int (*rep_send) /* Send function. */
+ __P((DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t));
/* Transactions. */
u_int32_t tx_max; /* Maximum number of transactions. */
@@ -1577,8 +1653,6 @@ struct __db_env {
/*******************************************************
* Private: owned by DB.
*******************************************************/
- int panic_errval; /* Panic causing errno. */
-
/* User files, paths. */
char *db_home; /* Database home. */
char *db_log_dir; /* Database log file directory. */
@@ -1589,6 +1663,7 @@ struct __db_env {
int data_next; /* Next Database data file slot. */
int db_mode; /* Default open permissions. */
+ u_int32_t open_flags; /* Flags passed to DB_ENV->open. */
void *reginfo; /* REGINFO structure reference. */
DB_FH *lockfhp; /* fcntl(2) locking file handle. */
@@ -1630,33 +1705,17 @@ struct __db_env {
* !!!
* Explicit representations of structures from queue.h.
* TAILQ_ENTRY(__db_env) links;
+ * TAILQ_HEAD(xa_txn, __db_txn);
*/
struct {
struct __db_env *tqe_next;
struct __db_env **tqe_prev;
} links;
- int xa_rmid; /* XA Resource Manager ID. */
- DB_LOCK xa_handle_lock;
- u_int32_t xa_locker;
-
- /*
- * List of active XA transactions for this DB_ENV.
- * Must be protected for multi-threaded support.
- *
- * !!!
- * As this structure is allocated in per-process memory, the
- * mutex may need to be stored elsewhere on architectures unable
- * to support mutexes in heap memory, e.g. HP/UX 9.
- *
- * !!!
- * Explicit representations of structures from queue.h.
- * TAILQ_HEAD(__xa_txns, __db_txn) xa_txns;
- */
- DB_MUTEX *xa_txns_mutexp; /* Mutex. */
- struct __xa_txns {
+ struct __xa_txn { /* XA Active Transactions. */
struct __db_txn *tqh_first;
struct __db_txn **tqh_last;
- } xa_txns;
+ } xa_txn;
+ int xa_rmid; /* XA Resource Manager ID. */
/* API-private structure. */
void *api1_internal; /* C++, Perl API private */
@@ -1672,36 +1731,51 @@ struct __db_env {
/* DB_ENV Methods. */
int (*close) __P((DB_ENV *, u_int32_t));
int (*dbremove) __P((DB_ENV *,
- DB_TXN *, const char *, const char *, u_int32_t));
+ DB_TXN *, const char *, const char *, u_int32_t));
int (*dbrename) __P((DB_ENV *, DB_TXN *,
- const char *, const char *, const char *, u_int32_t));
+ const char *, const char *, const char *, u_int32_t));
void (*err) __P((const DB_ENV *, int, const char *, ...));
void (*errx) __P((const DB_ENV *, const char *, ...));
+ int (*get_home) __P((DB_ENV *, const char **));
+ int (*get_open_flags) __P((DB_ENV *, u_int32_t *));
int (*open) __P((DB_ENV *, const char *, u_int32_t, int));
int (*remove) __P((DB_ENV *, const char *, u_int32_t));
- int (*set_data_dir) __P((DB_ENV *, const char *));
int (*set_alloc) __P((DB_ENV *, void *(*)(size_t),
void *(*)(void *, size_t), void (*)(void *)));
int (*set_app_dispatch) __P((DB_ENV *,
int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
+ int (*get_data_dirs) __P((DB_ENV *, const char ***));
+ int (*set_data_dir) __P((DB_ENV *, const char *));
+ int (*get_encrypt_flags) __P((DB_ENV *, u_int32_t *));
int (*set_encrypt) __P((DB_ENV *, const char *, u_int32_t));
void (*set_errcall) __P((DB_ENV *, void (*)(const char *, char *)));
+ void (*get_errfile) __P((DB_ENV *, FILE **));
void (*set_errfile) __P((DB_ENV *, FILE *));
+ void (*get_errpfx) __P((DB_ENV *, const char **));
void (*set_errpfx) __P((DB_ENV *, const char *));
int (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+ int (*get_flags) __P((DB_ENV *, u_int32_t *));
int (*set_flags) __P((DB_ENV *, u_int32_t, int));
int (*set_paniccall) __P((DB_ENV *, void (*)(DB_ENV *, int)));
int (*set_rpc_server) __P((DB_ENV *,
void *, const char *, long, long, u_int32_t));
+ int (*get_shm_key) __P((DB_ENV *, long *));
int (*set_shm_key) __P((DB_ENV *, long));
+ int (*get_tas_spins) __P((DB_ENV *, u_int32_t *));
int (*set_tas_spins) __P((DB_ENV *, u_int32_t));
+ int (*get_tmp_dir) __P((DB_ENV *, const char **));
int (*set_tmp_dir) __P((DB_ENV *, const char *));
+ int (*get_verbose) __P((DB_ENV *, u_int32_t, int *));
int (*set_verbose) __P((DB_ENV *, u_int32_t, int));
void *lg_handle; /* Log handle and methods. */
+ int (*get_lg_bsize) __P((DB_ENV *, u_int32_t *));
int (*set_lg_bsize) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_dir) __P((DB_ENV *, const char **));
int (*set_lg_dir) __P((DB_ENV *, const char *));
+ int (*get_lg_max) __P((DB_ENV *, u_int32_t *));
int (*set_lg_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lg_regionmax) __P((DB_ENV *, u_int32_t *));
int (*set_lg_regionmax) __P((DB_ENV *, u_int32_t));
int (*log_archive) __P((DB_ENV *, char **[], u_int32_t));
int (*log_cursor) __P((DB_ENV *, DB_LOGC **, u_int32_t));
@@ -1711,33 +1785,37 @@ struct __db_env {
int (*log_stat) __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
void *lk_handle; /* Lock handle and methods. */
+ int (*get_lk_conflicts) __P((DB_ENV *, const u_int8_t **, int *));
int (*set_lk_conflicts) __P((DB_ENV *, u_int8_t *, int));
+ int (*get_lk_detect) __P((DB_ENV *, u_int32_t *));
int (*set_lk_detect) __P((DB_ENV *, u_int32_t));
int (*set_lk_max) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_locks) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_locks) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_lockers) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_lockers) __P((DB_ENV *, u_int32_t));
+ int (*get_lk_max_objects) __P((DB_ENV *, u_int32_t *));
int (*set_lk_max_objects) __P((DB_ENV *, u_int32_t));
int (*lock_detect) __P((DB_ENV *, u_int32_t, u_int32_t, int *));
- int (*lock_dump_region) __P((DB_ENV *, char *, FILE *));
+ int (*lock_dump_region) __P((DB_ENV *, const char *, FILE *));
int (*lock_get) __P((DB_ENV *,
u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
int (*lock_put) __P((DB_ENV *, DB_LOCK *));
int (*lock_id) __P((DB_ENV *, u_int32_t *));
int (*lock_id_free) __P((DB_ENV *, u_int32_t));
- int (*lock_id_set) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*lock_stat) __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
int (*lock_vec) __P((DB_ENV *,
u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
- int (*lock_downgrade) __P((DB_ENV *,
- DB_LOCK *, db_lockmode_t, u_int32_t));
void *mp_handle; /* Mpool handle and methods. */
- int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ int (*get_cachesize) __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
int (*set_cachesize) __P((DB_ENV *, u_int32_t, u_int32_t, int));
- int (*memp_dump_region) __P((DB_ENV *, char *, FILE *));
+ int (*get_mp_mmapsize) __P((DB_ENV *, size_t *));
+ int (*set_mp_mmapsize) __P((DB_ENV *, size_t));
+ int (*get_mp_maxwrite) __P((DB_ENV *, int *, int *));
+ int (*set_mp_maxwrite) __P((DB_ENV *, int, int));
+ int (*memp_dump_region) __P((DB_ENV *, const char *, FILE *));
int (*memp_fcreate) __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
- int (*memp_nameop) __P((DB_ENV *,
- u_int8_t *, const char *, const char *, const char *));
int (*memp_register) __P((DB_ENV *, int,
int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
@@ -1749,42 +1827,39 @@ struct __db_env {
void *rep_handle; /* Replication handle and methods. */
int (*rep_elect) __P((DB_ENV *, int, int, u_int32_t, int *));
int (*rep_flush) __P((DB_ENV *));
- int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *, int *));
+ int (*rep_process_message) __P((DB_ENV *, DBT *, DBT *,
+ int *, DB_LSN *));
int (*rep_start) __P((DB_ENV *, DBT *, u_int32_t));
int (*rep_stat) __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
- int (*set_rep_election) __P((DB_ENV *,
- u_int32_t, u_int32_t, u_int32_t, u_int32_t));
+ int (*get_rep_limit) __P((DB_ENV *, u_int32_t *, u_int32_t *));
int (*set_rep_limit) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*set_rep_request) __P((DB_ENV *, u_int32_t, u_int32_t));
- int (*set_rep_timeout) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*set_rep_transport) __P((DB_ENV *, int,
- int (*) (DB_ENV *, const DBT *, const DBT *, int, u_int32_t)));
+ int (*) (DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t)));
void *tx_handle; /* Txn handle and methods. */
+ int (*get_tx_max) __P((DB_ENV *, u_int32_t *));
int (*set_tx_max) __P((DB_ENV *, u_int32_t));
+ int (*get_tx_timestamp) __P((DB_ENV *, time_t *));
int (*set_tx_timestamp) __P((DB_ENV *, time_t *));
int (*txn_begin) __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
int (*txn_checkpoint) __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
- int (*txn_id_set) __P((DB_ENV *, u_int32_t, u_int32_t));
int (*txn_recover) __P((DB_ENV *,
DB_PREPLIST *, long, long *, u_int32_t));
int (*txn_stat) __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+ int (*get_timeout) __P((DB_ENV *, db_timeout_t *, u_int32_t));
int (*set_timeout) __P((DB_ENV *, db_timeout_t, u_int32_t));
#define DB_TEST_ELECTINIT 1 /* after __rep_elect_init */
-#define DB_TEST_ELECTSEND 2 /* after REP_ELECT msgnit */
-#define DB_TEST_ELECTVOTE1 3 /* after __rep_send_vote 1 */
-#define DB_TEST_ELECTVOTE2 4 /* after __rep_wait */
-#define DB_TEST_ELECTWAIT1 5 /* after REP_VOTE2 */
-#define DB_TEST_ELECTWAIT2 6 /* after __rep_wait 2 */
+#define DB_TEST_POSTDESTROY 2 /* after destroy op */
+#define DB_TEST_POSTLOG 3 /* after logging all pages */
+#define DB_TEST_POSTLOGMETA 4 /* after logging meta in btree */
+#define DB_TEST_POSTOPEN 5 /* after __os_open */
+#define DB_TEST_POSTSYNC 6 /* after syncing the log */
#define DB_TEST_PREDESTROY 7 /* before destroy op */
#define DB_TEST_PREOPEN 8 /* before __os_open */
-#define DB_TEST_POSTDESTROY 9 /* after destroy op */
-#define DB_TEST_POSTLOG 10 /* after logging all pages */
-#define DB_TEST_POSTLOGMETA 11 /* after logging meta in btree */
-#define DB_TEST_POSTOPEN 12 /* after __os_open */
-#define DB_TEST_POSTSYNC 13 /* after syncing the log */
-#define DB_TEST_SUBDB_LOCKS 14 /* subdb locking tests */
+#define DB_TEST_SUBDB_LOCKS 9 /* subdb locking tests */
int test_abort; /* Abort value for testing. */
int test_copy; /* Copy value for testing. */
@@ -1797,21 +1872,21 @@ struct __db_env {
#define DB_ENV_DIRECT_LOG 0x0000040 /* DB_DIRECT_LOG set. */
#define DB_ENV_FATAL 0x0000080 /* Doing fatal recovery in env. */
#define DB_ENV_LOCKDOWN 0x0000100 /* DB_LOCKDOWN set. */
-#define DB_ENV_NOLOCKING 0x0000200 /* DB_NOLOCKING set. */
-#define DB_ENV_NOMMAP 0x0000400 /* DB_NOMMAP set. */
-#define DB_ENV_NOPANIC 0x0000800 /* Okay if panic set. */
-#define DB_ENV_OPEN_CALLED 0x0001000 /* DB_ENV->open called. */
-#define DB_ENV_OVERWRITE 0x0002000 /* DB_OVERWRITE set. */
-#define DB_ENV_PRIVATE 0x0004000 /* DB_PRIVATE set. */
-#define DB_ENV_REGION_INIT 0x0008000 /* DB_REGION_INIT set. */
-#define DB_ENV_REP_CLIENT 0x0010000 /* Replication client. */
-#define DB_ENV_REP_LOGSONLY 0x0020000 /* Log files only replication site. */
-#define DB_ENV_REP_MASTER 0x0040000 /* Replication master. */
-#define DB_ENV_RPCCLIENT 0x0080000 /* DB_CLIENT set. */
-#define DB_ENV_RPCCLIENT_GIVEN 0x0100000 /* User-supplied RPC client struct */
-#define DB_ENV_SYSTEM_MEM 0x0200000 /* DB_SYSTEM_MEM set. */
-#define DB_ENV_THREAD 0x0400000 /* DB_THREAD set. */
-#define DB_ENV_TXN_NOSYNC 0x0800000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_LOG_AUTOREMOVE 0x0000200 /* DB_LOG_AUTOREMOVE set. */
+#define DB_ENV_NOLOCKING 0x0000400 /* DB_NOLOCKING set. */
+#define DB_ENV_NOMMAP 0x0000800 /* DB_NOMMAP set. */
+#define DB_ENV_NOPANIC 0x0001000 /* Okay if panic set. */
+#define DB_ENV_OPEN_CALLED 0x0002000 /* DB_ENV->open called. */
+#define DB_ENV_OVERWRITE 0x0004000 /* DB_OVERWRITE set. */
+#define DB_ENV_PRIVATE 0x0008000 /* DB_PRIVATE set. */
+#define DB_ENV_REGION_INIT 0x0010000 /* DB_REGION_INIT set. */
+#define DB_ENV_RPCCLIENT 0x0020000 /* DB_RPCCLIENT set. */
+#define DB_ENV_RPCCLIENT_GIVEN 0x0040000 /* User-supplied RPC client struct */
+#define DB_ENV_SYSTEM_MEM 0x0080000 /* DB_SYSTEM_MEM set. */
+#define DB_ENV_THREAD 0x0100000 /* DB_THREAD set. */
+#define DB_ENV_TIME_NOTGRANTED 0x0200000 /* DB_TIME_NOTGRANTED set. */
+#define DB_ENV_TXN_NOSYNC 0x0400000 /* DB_TXN_NOSYNC set. */
+#define DB_ENV_TXN_NOT_DURABLE 0x0800000 /* DB_TXN_NOT_DURABLE set. */
#define DB_ENV_TXN_WRITE_NOSYNC 0x1000000 /* DB_TXN_WRITE_NOSYNC set. */
#define DB_ENV_YIELDCPU 0x2000000 /* DB_YIELDCPU set. */
u_int32_t flags;
diff --git a/db/dbinc/db_185.in b/db/dbinc/db_185.in
index 6fc254fe6..88e2cb850 100644
--- a/db/dbinc/db_185.in
+++ b/db/dbinc/db_185.in
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: db_185.in,v 11.8 2002/01/11 15:52:24 bostic Exp
+ * $Id: db_185.in,v 11.10 2003/04/24 15:41:00 bostic Exp $
*/
#ifndef _DB_185_H_
@@ -164,6 +164,6 @@ typedef struct {
} RECNOINFO;
/* Re-define the user's dbopen calls. */
-#define dbopen __db185_open@DB_VERSION_UNIQUE_NAME@
+#define dbopen __db185_open@DB_VERSION_UNIQUE_NAME@
#endif /* !_DB_185_H_ */
diff --git a/db/dbinc/db_am.h b/db/dbinc/db_am.h
index aab20fefb..ed1f9f3c8 100644
--- a/db/dbinc/db_am.h
+++ b/db/dbinc/db_am.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_am.h,v 11.61 2002/08/08 03:20:46 bostic Exp
+ * $Id: db_am.h,v 11.70 2003/06/30 17:19:50 bostic Exp $
*/
#ifndef _DB_AM_H_
#define _DB_AM_H_
@@ -16,7 +16,8 @@
*/
#define IS_AUTO_COMMIT(dbenv, txn, flags) \
(LF_ISSET(DB_AUTO_COMMIT) || \
- ((txn) == NULL && F_ISSET((dbenv), DB_ENV_AUTO_COMMIT)))
+ ((txn) == NULL && F_ISSET((dbenv), DB_ENV_AUTO_COMMIT) && \
+ !LF_ISSET(DB_NO_AUTO_COMMIT)))
/* DB recovery operation codes. */
#define DB_ADD_DUP 1
@@ -29,14 +30,14 @@
/*
* Standard initialization and shutdown macros for all recovery functions.
*/
-#define REC_INTRO(func, inc_count) { \
+#define REC_INTRO(func, inc_count) do { \
argp = NULL; \
dbc = NULL; \
file_dbp = NULL; \
mpf = NULL; \
if ((ret = func(dbenv, dbtp->data, &argp)) != 0) \
goto out; \
- if ((ret = __dbreg_id_to_db(dbenv, argp->txnid, \
+ if ((ret = __dbreg_id_to_db(dbenv, argp->txnid, \
&file_dbp, argp->fileid, inc_count)) != 0) { \
if (ret == DB_DELETED) { \
ret = 0; \
@@ -44,34 +45,34 @@
} \
goto out; \
} \
- if ((ret = file_dbp->cursor(file_dbp, NULL, &dbc, 0)) != 0) \
+ if ((ret = __db_cursor(file_dbp, NULL, &dbc, 0)) != 0) \
goto out; \
F_SET(dbc, DBC_RECOVER); \
mpf = file_dbp->mpf; \
-}
+} while (0)
#define REC_CLOSE { \
int __t_ret; \
if (argp != NULL) \
__os_free(dbenv, argp); \
if (dbc != NULL && \
- (__t_ret = dbc->c_close(dbc)) != 0 && ret == 0) \
+ (__t_ret = __db_c_close(dbc)) != 0 && ret == 0) \
ret = __t_ret; \
- return (ret); \
-}
+ } \
+ return (ret)
/*
* No-op versions of the same macros.
*/
-#define REC_NOOP_INTRO(func) { \
+#define REC_NOOP_INTRO(func) do { \
argp = NULL; \
if ((ret = func(dbenv, dbtp->data, &argp)) != 0) \
return (ret); \
-}
+} while (0)
#define REC_NOOP_CLOSE \
if (argp != NULL) \
__os_free(dbenv, argp); \
- return (ret); \
+ return (ret)
/*
* Standard debugging macro for all recovery functions.
@@ -99,8 +100,7 @@
* we don't tie up the internal pages of the tree longer than necessary.
*/
#define __LPUT(dbc, lock) \
- (LOCK_ISSET(lock) ? \
- (dbc)->dbp->dbenv->lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
+ (LOCK_ISSET(lock) ? __lock_put((dbc)->dbp->dbenv, &(lock)) : 0)
/*
* __TLPUT -- transactional lock put
@@ -117,7 +117,7 @@
typedef struct {
DBC *dbc;
- int count;
+ u_int32_t count;
} db_trunc_param;
#include "dbinc/db_dispatch.h"
diff --git a/db/dbinc/db_cxx.in b/db/dbinc/db_cxx.in
index 1f96f58b8..08fa1ea74 100644
--- a/db/dbinc/db_cxx.in
+++ b/db/dbinc/db_cxx.in
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_cxx.in,v 11.112 2002/08/08 23:44:43 mjc Exp
+ * $Id: db_cxx.in,v 11.134 2003/09/04 19:02:27 bostic Exp $
*/
#ifndef _DB_CXX_H_
@@ -61,8 +61,6 @@
#endif
#include "db.h"
-#include "cxx_common.h"
-#include "cxx_except.h"
class Db; // forward
class Dbc; // forward
@@ -75,6 +73,17 @@ class DbMpoolFile; // forward
class DbPreplist; // forward
class Dbt; // forward
class DbTxn; // forward
+class DbDeadlockException; // forward
+class DbException; // forward
+class DbLockNotGrantedException; // forward
+class DbLock; // forward
+class DbMemoryException; // forward
+class DbRunRecoveryException; // forward
+class Dbt; // forward
+class DbMultipleIterator; // forward
+class DbMultipleKeyDataIterator; // forward
+class DbMultipleRecnoDataIterator; // forward
+class DbMultipleDataIterator; // forward
// These classes are not defined here and should be invisible
// to the user, but some compilers require forward references.
@@ -122,6 +131,35 @@ class DbTxnImp;
#endif
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// Mechanisms for declaring classes
+//
+
+//
+// Every class defined in this file has an _exported next to the class name.
+// This is needed for WinTel machines so that the class methods can
+// be exported or imported in a DLL as appropriate. Users of the DLL
+// use the define DB_USE_DLL. When the DLL is built, DB_CREATE_DLL
+// must be defined.
+//
+#if defined(_MSC_VER)
+
+# if defined(DB_CREATE_DLL)
+# define _exported __declspec(dllexport) // creator of dll
+# elif defined(DB_USE_DLL)
+# define _exported __declspec(dllimport) // user of dll
+# else
+# define _exported // static lib creator or user
+# endif
+
+#else /* _MSC_VER */
+
+# define _exported
+
+#endif /* _MSC_VER */
+
// Some interfaces can be customized by allowing users to define
// callback functions. For performance and logistical reasons, some
// callback functions must be declared in extern "C" blocks. For others,
@@ -153,6 +191,122 @@ extern "C" {
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
//
+// Exception classes
+//
+
+// Almost any error in the DB library throws a DbException.
+// Every exception should be considered an abnormality
+// (e.g. bug, misuse of DB, file system error).
+//
+// NOTE: We would like to inherit from class exception and
+// let it handle what(), but there are
+// MSVC++ problems when <exception> is included.
+//
+class _exported DbException
+{
+public:
+ virtual ~DbException();
+ DbException(int err);
+ DbException(const char *description);
+ DbException(const char *prefix, int err);
+ DbException(const char *prefix1, const char *prefix2, int err);
+ int get_errno() const;
+ virtual const char *what() const;
+ DbEnv *get_env() const;
+ void set_env(DbEnv *env);
+
+ DbException(const DbException &);
+ DbException &operator = (const DbException &);
+
+private:
+ char *what_;
+ int err_; // errno
+ DbEnv *env_;
+};
+
+//
+// A specific sort of exception that occurs when
+// an operation is aborted to resolve a deadlock.
+//
+class _exported DbDeadlockException : public DbException
+{
+public:
+ virtual ~DbDeadlockException();
+ DbDeadlockException(const char *description);
+
+ DbDeadlockException(const DbDeadlockException &);
+ DbDeadlockException &operator = (const DbDeadlockException &);
+};
+
+//
+// A specific sort of exception that occurs when
+// a lock is not granted, e.g. by lock_get or lock_vec.
+// Note that the Dbt is only live as long as the Dbt used
+// in the offending call.
+//
+class _exported DbLockNotGrantedException : public DbException
+{
+public:
+ virtual ~DbLockNotGrantedException();
+ DbLockNotGrantedException(const char *prefix, db_lockop_t op,
+ db_lockmode_t mode, const Dbt *obj, const DbLock lock, int index);
+ DbLockNotGrantedException(const char *description);
+ DbLockNotGrantedException(const DbLockNotGrantedException &);
+ DbLockNotGrantedException &operator =
+ (const DbLockNotGrantedException &);
+
+ db_lockop_t get_op() const;
+ db_lockmode_t get_mode() const;
+ const Dbt* get_obj() const;
+ DbLock *get_lock() const;
+ int get_index() const;
+
+private:
+ db_lockop_t op_;
+ db_lockmode_t mode_;
+ const Dbt *obj_;
+ DbLock *lock_;
+ int index_;
+};
+
+//
+// A specific sort of exception that occurs when
+// user declared memory is insufficient in a Dbt.
+//
+class _exported DbMemoryException : public DbException
+{
+public:
+ virtual ~DbMemoryException();
+ DbMemoryException(Dbt *dbt);
+ DbMemoryException(const char *description);
+ DbMemoryException(const char *prefix, Dbt *dbt);
+ DbMemoryException(const char *prefix1, const char *prefix2, Dbt *dbt);
+ Dbt *get_dbt() const;
+
+ DbMemoryException(const DbMemoryException &);
+ DbMemoryException &operator = (const DbMemoryException &);
+
+private:
+ Dbt *dbt_;
+};
+
+//
+// A specific sort of exception that occurs when
+// recovery is required before continuing DB activity.
+//
+class _exported DbRunRecoveryException : public DbException
+{
+public:
+ virtual ~DbRunRecoveryException();
+ DbRunRecoveryException(const char *description);
+
+ DbRunRecoveryException(const DbRunRecoveryException &);
+ DbRunRecoveryException &operator = (const DbRunRecoveryException &);
+};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
// Lock classes
//
@@ -180,7 +334,7 @@ protected:
// Log classes
//
-class _exported DbLsn : protected DB_LSN
+class _exported DbLsn : public DB_LSN
{
friend class DbEnv; // friendship needed to cast to base class
friend class DbLogc; // friendship needed to cast to base class
@@ -195,6 +349,7 @@ class _exported DbLsn : protected DB_LSN
class _exported DbMpoolFile
{
friend class DbEnv;
+ friend class Db;
private:
// Put this first to allow inlining with some C++ compilers (g++-2.95)
@@ -203,17 +358,25 @@ private:
public:
int close(u_int32_t flags);
int get(db_pgno_t *pgnoaddr, u_int32_t flags, void *pagep);
- void last_pgno(db_pgno_t *pgnoaddr);
int open(const char *file, u_int32_t flags, int mode, size_t pagesize);
int put(void *pgaddr, u_int32_t flags);
- void refcnt(db_pgno_t *pgnoaddr);
int set(void *pgaddr, u_int32_t flags);
+ int get_clear_len(u_int32_t *len);
int set_clear_len(u_int32_t len);
+ int get_fileid(u_int8_t *fileid);
int set_fileid(u_int8_t *fileid);
+ int get_flags(u_int32_t *flagsp);
+ int set_flags(u_int32_t flags, int onoff);
+ int get_ftype(int *ftype);
int set_ftype(int ftype);
+ int get_lsn_offset(int32_t *offsetp);
int set_lsn_offset(int32_t offset);
+ int get_maxsize(u_int32_t *gbytes, u_int32_t *bytes);
+ int set_maxsize(u_int32_t gbytes, u_int32_t bytes);
+ int get_pgcookie(DBT *dbt);
int set_pgcookie(DBT *dbt);
- void set_unlink(int);
+ int get_priority(DB_CACHE_PRIORITY *priorityp);
+ int set_priority(DB_CACHE_PRIORITY priority);
int sync();
virtual DB_MPOOLFILE *get_DB_MPOOLFILE()
@@ -362,41 +525,66 @@ public:
virtual void err(int, const char *, ...);
virtual void errx(const char *, ...);
virtual void *get_app_private() const;
+ virtual int get_home(const char **);
+ virtual int get_open_flags(u_int32_t *);
virtual int open(const char *, u_int32_t, int);
virtual int remove(const char *, u_int32_t);
virtual int set_alloc(db_malloc_fcn_type, db_realloc_fcn_type,
db_free_fcn_type);
virtual void set_app_private(void *);
+ virtual int get_cachesize(u_int32_t *, u_int32_t *, int *);
virtual int set_cachesize(u_int32_t, u_int32_t, int);
+ virtual int get_data_dirs(const char ***);
virtual int set_data_dir(const char *);
- virtual int set_encrypt(const char *, int);
+ virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(void (*)(const char *, char *));
+ virtual void get_errfile(FILE **);
virtual void set_errfile(FILE *);
+ virtual void get_errpfx(const char **);
virtual void set_errpfx(const char *);
+ virtual int get_flags(u_int32_t *);
virtual int set_flags(u_int32_t, int);
virtual int set_feedback(void (*)(DbEnv *, int, int));
+ virtual int get_lg_bsize(u_int32_t *);
virtual int set_lg_bsize(u_int32_t);
+ virtual int get_lg_dir(const char **);
virtual int set_lg_dir(const char *);
+ virtual int get_lg_max(u_int32_t *);
virtual int set_lg_max(u_int32_t);
+ virtual int get_lg_regionmax(u_int32_t *);
virtual int set_lg_regionmax(u_int32_t);
+ virtual int get_lk_conflicts(const u_int8_t **, int *);
virtual int set_lk_conflicts(u_int8_t *, int);
+ virtual int get_lk_detect(u_int32_t *);
virtual int set_lk_detect(u_int32_t);
virtual int set_lk_max(u_int32_t);
+ virtual int get_lk_max_lockers(u_int32_t *);
virtual int set_lk_max_lockers(u_int32_t);
+ virtual int get_lk_max_locks(u_int32_t *);
virtual int set_lk_max_locks(u_int32_t);
+ virtual int get_lk_max_objects(u_int32_t *);
virtual int set_lk_max_objects(u_int32_t);
+ virtual int get_mp_mmapsize(size_t *);
virtual int set_mp_mmapsize(size_t);
virtual int set_paniccall(void (*)(DbEnv *, int));
virtual int set_rpc_server(void *, char *, long, long, u_int32_t);
+ virtual int get_shm_key(long *);
virtual int set_shm_key(long);
- virtual int set_timeout(db_timeout_t timeout, u_int32_t flags);
+ virtual int get_timeout(db_timeout_t *, u_int32_t);
+ virtual int set_timeout(db_timeout_t, u_int32_t);
+ virtual int get_tmp_dir(const char **);
virtual int set_tmp_dir(const char *);
+ virtual int get_tas_spins(u_int32_t *);
virtual int set_tas_spins(u_int32_t);
+ virtual int get_tx_max(u_int32_t *);
virtual int set_tx_max(u_int32_t);
virtual int set_app_dispatch(int (*)(DbEnv *,
Dbt *, DbLsn *, db_recops));
+ virtual int get_tx_timestamp(time_t *);
virtual int set_tx_timestamp(time_t *);
- virtual int set_verbose(u_int32_t which, int onoff);
+ virtual int get_verbose(u_int32_t which, int *);
+ virtual int set_verbose(u_int32_t which, int);
// Version information. A static method so it can be obtained anytime.
//
@@ -417,12 +605,12 @@ public:
virtual void set_error_stream(__DB_OSTREAMCLASS *);
// used internally
- static void runtime_error(const char *caller, int err,
+ static void runtime_error(DbEnv *env, const char *caller, int err,
int error_policy);
- static void runtime_error_dbt(const char *caller, Dbt *dbt,
+ static void runtime_error_dbt(DbEnv *env, const char *caller, Dbt *dbt,
int error_policy);
- static void runtime_error_lock_get(const char *caller, int err,
- db_lockop_t op, db_lockmode_t mode,
+ static void runtime_error_lock_get(DbEnv *env, const char *caller,
+ int err, db_lockop_t op, db_lockmode_t mode,
const Dbt *obj, DbLock lock, int index,
int error_policy);
@@ -435,8 +623,8 @@ public:
virtual int lock_id_free(u_int32_t id);
virtual int lock_put(DbLock *lock);
virtual int lock_stat(DB_LOCK_STAT **statp, u_int32_t flags);
- virtual int lock_vec(u_int32_t locker, u_int32_t flags, DB_LOCKREQ list[],
- int nlist, DB_LOCKREQ **elistp);
+ virtual int lock_vec(u_int32_t locker, u_int32_t flags,
+ DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp);
// Log functions
//
@@ -463,7 +651,8 @@ public:
// Transaction functions
//
virtual int txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags);
- virtual int txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags);
+ virtual int txn_checkpoint(u_int32_t kbyte, u_int32_t min,
+ u_int32_t flags);
virtual int txn_recover(DbPreplist *preplist, long count,
long *retp, u_int32_t flags);
virtual int txn_stat(DB_TXN_STAT **statp, u_int32_t flags);
@@ -471,12 +660,13 @@ public:
// Replication functions
//
virtual int rep_elect(int, int, u_int32_t, int *);
- virtual int rep_process_message(Dbt *, Dbt *, int *);
+ virtual int rep_process_message(Dbt *, Dbt *, int *, DbLsn *);
virtual int rep_start(Dbt *, u_int32_t);
virtual int rep_stat(DB_REP_STAT **statp, u_int32_t flags);
+ virtual int get_rep_limit(u_int32_t *, u_int32_t *);
virtual int set_rep_limit(u_int32_t, u_int32_t);
- virtual int set_rep_transport(u_int32_t,
- int (*)(DbEnv *, const Dbt *, const Dbt *, int, u_int32_t));
+ virtual int set_rep_transport(int, int (*)(DbEnv *,
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t));
// Conversion functions
//
@@ -514,8 +704,8 @@ public:
static void _feedback_intercept(DB_ENV *env, int opcode, int pct);
static int _rep_send_intercept(DB_ENV *env,
const DBT *cntrl, const DBT *data,
- int id, u_int32_t flags);
- static void _destroy_check(const char *str, int isDbEnv);
+ const DB_LSN *lsn, int id,
+ u_int32_t flags);
private:
void cleanup();
@@ -540,7 +730,7 @@ private:
int (*pgout_callback_)(DbEnv *dbenv, db_pgno_t pgno,
void *pgaddr, Dbt *pgcookie);
int (*rep_send_callback_)(DbEnv *,
- const Dbt *, const Dbt *, int, u_int32_t);
+ const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t);
// class data
static __DB_OSTREAMCLASS *error_stream_;
@@ -573,7 +763,7 @@ public:
int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
u_int32_t flags);
virtual int close(u_int32_t flags);
- virtual int cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
+ virtual int cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
virtual int del(DbTxn *txnid, Dbt *key, u_int32_t flags);
virtual void err(int, const char *, ...);
virtual void errx(const char *, ...);
@@ -581,6 +771,8 @@ public:
virtual int get(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags);
virtual void *get_app_private() const;
virtual int get_byteswapped(int *);
+ virtual int get_dbname(const char **, const char **);
+ virtual int get_open_flags(u_int32_t *);
virtual int get_type(DBTYPE *);
virtual int join(Dbc **curslist, Dbc **dbcp, u_int32_t flags);
virtual int key_range(DbTxn *, Dbt *, DB_KEY_RANGE *, u_int32_t);
@@ -598,42 +790,60 @@ public:
virtual int set_bt_compare(bt_compare_fcn_type); /*deprecated*/
virtual int set_bt_compare(int (*)(Db *, const Dbt *, const Dbt *));
virtual int set_bt_maxkey(u_int32_t);
+ virtual int get_bt_minkey(u_int32_t *);
virtual int set_bt_minkey(u_int32_t);
virtual int set_bt_prefix(bt_prefix_fcn_type); /*deprecated*/
virtual int set_bt_prefix(size_t (*)(Db *, const Dbt *, const Dbt *));
+ virtual int get_cachesize(u_int32_t *, u_int32_t *, int *);
virtual int set_cachesize(u_int32_t, u_int32_t, int);
- virtual int set_cache_priority(DB_CACHE_PRIORITY);
virtual int set_dup_compare(dup_compare_fcn_type); /*deprecated*/
virtual int set_dup_compare(int (*)(Db *, const Dbt *, const Dbt *));
- virtual int set_encrypt(const char *, int);
+ virtual int get_encrypt_flags(u_int32_t *);
+ virtual int set_encrypt(const char *, u_int32_t);
virtual void set_errcall(void (*)(const char *, char *));
+ virtual void get_errfile(FILE **);
virtual void set_errfile(FILE *);
+ virtual void get_errpfx(const char **);
virtual void set_errpfx(const char *);
virtual int set_feedback(void (*)(Db *, int, int));
+ virtual int get_flags(u_int32_t *);
virtual int set_flags(u_int32_t);
+ virtual int get_h_ffactor(u_int32_t *);
virtual int set_h_ffactor(u_int32_t);
virtual int set_h_hash(h_hash_fcn_type); /*deprecated*/
virtual int set_h_hash(u_int32_t (*)(Db *, const void *, u_int32_t));
+ virtual int get_h_nelem(u_int32_t *);
virtual int set_h_nelem(u_int32_t);
+ virtual int get_lorder(int *);
virtual int set_lorder(int);
+ virtual int get_pagesize(u_int32_t *);
virtual int set_pagesize(u_int32_t);
virtual int set_paniccall(void (*)(DbEnv *, int));
+ virtual int get_re_delim(int *);
virtual int set_re_delim(int);
+ virtual int get_re_len(u_int32_t *);
virtual int set_re_len(u_int32_t);
+ virtual int get_re_pad(int *);
virtual int set_re_pad(int);
- virtual int set_re_source(char *);
+ virtual int get_re_source(const char **);
+ virtual int set_re_source(const char *);
+ virtual int get_q_extentsize(u_int32_t *);
virtual int set_q_extentsize(u_int32_t);
virtual int stat(void *sp, u_int32_t flags);
virtual int sync(u_int32_t flags);
virtual int truncate(DbTxn *, u_int32_t *, u_int32_t);
virtual int upgrade(const char *name, u_int32_t flags);
- virtual int verify(const char *, const char *, __DB_OSTREAMCLASS *, u_int32_t);
+ virtual int verify(const char *, const char *, __DB_OSTREAMCLASS *,
+ u_int32_t);
// These additional methods are not in the C interface, and
// are only available for C++.
//
virtual void set_error_stream(__DB_OSTREAMCLASS *);
+ virtual DbEnv *get_env();
+ virtual DbMpoolFile *get_mpf();
+
virtual DB *get_DB()
{
return (DB *)imp();
@@ -665,6 +875,7 @@ private:
// instance data
DbEnv *env_;
+ DbMpoolFile *mpf_;
int construct_error_;
u_int32_t flags_;
u_int32_t construct_flags_;
@@ -793,4 +1004,44 @@ private:
DbLogc(const Dbc &);
DbLogc &operator = (const Dbc &);
};
+
+////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////
+//
+// multiple key/data/reco iterator classes
+//
+
+// DbMultipleIterator is a shared private base class for the three types
+// of bulk-return Iterator; it should never be instantiated directly,
+// but it handles the functionality shared by its subclasses.
+class _exported DbMultipleIterator
+{
+public:
+ DbMultipleIterator(const Dbt &dbt);
+protected:
+ u_int8_t *data_;
+ u_int32_t *p_;
+};
+
+class _exported DbMultipleKeyDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleKeyDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(Dbt &key, Dbt &data);
+};
+
+class _exported DbMultipleRecnoDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleRecnoDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(db_recno_t &recno, Dbt &data);
+};
+
+class _exported DbMultipleDataIterator : private DbMultipleIterator
+{
+public:
+ DbMultipleDataIterator(const Dbt &dbt) : DbMultipleIterator(dbt) {}
+ bool next(Dbt &data);
+};
+
#endif /* !_DB_CXX_H_ */
diff --git a/db/dbinc/db_dispatch.h b/db/dbinc/db_dispatch.h
index 71502603c..03d59fbcf 100644
--- a/db/dbinc/db_dispatch.h
+++ b/db/dbinc/db_dispatch.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: db_dispatch.h,v 11.30 2002/06/20 19:34:03 margo Exp
+ * $Id: db_dispatch.h,v 11.36 2003/09/04 19:01:13 bostic Exp $
*/
#ifndef _DB_DISPATCH_H_
@@ -57,14 +57,14 @@ struct __db_txnhead {
DB_LSN ckplsn; /* LSN of last retained checkpoint. */
DB_LSN trunc_lsn; /* Lsn to which we are going to truncate;
* make sure we abort anyone after this. */
- int32_t generation; /* Current generation number. */
- int32_t gen_alloc; /* Number of generations allocated. */
+ u_int32_t generation; /* Current generation number. */
+ u_int32_t gen_alloc; /* Number of generations allocated. */
struct {
- int32_t generation;
+ u_int32_t generation;
u_int32_t txn_min;
u_int32_t txn_max;
- } *gen_array; /* Array of txnids associted with a gen. */
- int nslots;
+ } *gen_array; /* Array of txnids associated with a gen. */
+ u_int nslots;
LIST_HEAD(__db_headlink, __db_txnlist) head[1];
};
@@ -74,17 +74,17 @@ struct __db_txnlist {
union {
struct {
u_int32_t txnid;
- int32_t generation;
+ u_int32_t generation;
int32_t status;
} t;
struct {
- int32_t ntxns;
- int32_t maxn;
+ u_int32_t ntxns;
+ u_int32_t maxn;
DB_LSN *lsn_array;
} l;
struct {
- int32_t nentries;
- int32_t maxentry;
+ u_int32_t nentries;
+ u_int32_t maxentry;
int32_t locked;
char *fname;
int32_t fileid;
@@ -100,6 +100,16 @@ struct __db_txnlist {
*/
#define TXNLIST_NEW 0x1
-#define DB_user_BEGIN 10000
+/*
+ * States for limbo list processing.
+ */
+
+typedef enum {
+ LIMBO_NORMAL, /* Normal processing. */
+ LIMBO_PREPARE, /* We are preparing a transaction. */
+ LIMBO_RECOVER, /* We are in recovery. */
+ LIMBO_TIMESTAMP, /* We are recovering to a timestamp. */
+ LIMBO_COMPENSATE /* After recover to ts, generate log records. */
+} db_limbo_state;
#endif /* !_DB_DISPATCH_H_ */
diff --git a/db/dbinc/db_int.in b/db/dbinc/db_int.in
index 3f8a146bf..0efe1179f 100644
--- a/db/dbinc/db_int.in
+++ b/db/dbinc/db_int.in
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_int.in,v 11.105 2002/08/07 15:37:06 bostic Exp
+ * $Id: db_int.in,v 11.126 2003/09/10 17:27:14 sue Exp $
*/
#ifndef _DB_INTERNAL_H_
@@ -15,7 +15,7 @@
* here because it's OK if db_int.h includes queue structure declarations.
*******************************************************/
#ifndef NO_SYSTEM_INCLUDES
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(STDC_HEADERS) || defined(__cplusplus)
#include <stdarg.h>
#else
#include <varargs.h>
@@ -64,6 +64,9 @@ extern "C" {
*/
#define DB_DEF_IOSIZE (8 * 1024)
+/* Number of times to reties I/O operations that return EINTR or EBUSY. */
+#define DB_RETRY 100
+
/*
* Aligning items to particular sizes or in pages or memory.
*
@@ -89,7 +92,7 @@ extern "C" {
/* Align an integer to a specific boundary. */
#undef ALIGN
-#define ALIGN(v, bound) (((v) + (bound) - 1) & ~(((u_int)bound) - 1))
+#define ALIGN(v, bound) (((v) + (bound) - 1) & ~(((db_align_t)bound) - 1))
/*
* Print an address as a u_long (a u_long is the largest type we can print
@@ -149,67 +152,57 @@ typedef struct __fn {
#undef DB_LINE
#define DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="
-/* Unused, or not-used-yet variable. "Shut that bloody compiler up!" */
-#define COMPQUIET(n, v) (n) = (v)
-
/*******************************************************
* API return values
*******************************************************/
- /*
- * Return values that are OK for each different call. Most calls have
- * a standard 'return of 0 is only OK value', but some, like db->get
- * have DB_NOTFOUND as a return value, but it really isn't an error.
- */
+/*
+ * Return values that are OK for each different call. Most calls have a
+ * standard 'return of 0 is only OK value', but some, like db->get have
+ * DB_NOTFOUND as a return value, but it really isn't an error.
+ */
#define DB_RETOK_STD(ret) ((ret) == 0)
#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
(ret) == DB_NOTFOUND)
-#define DB_RETOK_DBCGET(ret) DB_RETOK_DBGET(ret)
-#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
+#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
(ret) == DB_NOTFOUND)
-#define DB_RETOK_DBDEL(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
-#define DB_RETOK_DBGET(ret) ((ret) == 0 || (ret) == DB_KEYEMPTY || \
+#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST || \
(ret) == DB_NOTFOUND)
+#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)
+#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)
#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) == DB_KEYEXIST)
#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) == DB_NOTFOUND)
#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) == DB_PAGE_NOTFOUND)
-#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || (ret) == DB_REP_NEWMASTER || \
- (ret) == DB_REP_NEWSITE)
+#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \
+ (ret) == DB_REP_ISPERM || \
+ (ret) == DB_REP_NEWMASTER || \
+ (ret) == DB_REP_NEWSITE || \
+ (ret) == DB_REP_NOTPERM)
+
+/* Find a reasonable operation-not-supported error. */
+#ifdef EOPNOTSUPP
+#define DB_OPNOTSUP EOPNOTSUPP
+#else
+#ifdef ENOTSUP
+#define DB_OPNOTSUP ENOTSUP
+#else
+#define DB_OPNOTSUP EINVAL
+#endif
+#endif
/*******************************************************
* Files.
*******************************************************/
- /*
- * We use 1024 as the maximum path length. It's too hard to figure out what
- * the real path length is, as it was traditionally stored in <sys/param.h>,
- * and that file isn't always available.
- */
+/*
+ * We use 1024 as the maximum path length. It's too hard to figure out what
+ * the real path length is, as it was traditionally stored in <sys/param.h>,
+ * and that file isn't always available.
+ */
#undef MAXPATHLEN
#define MAXPATHLEN 1024
#define PATH_DOT "." /* Current working directory. */
-#define PATH_SEPARATOR "/" /* Path separator character(s). */
-
-/*
- * Flags understood by __os_open.
- */
-#define DB_OSO_CREATE 0x0001 /* POSIX: O_CREAT */
-#define DB_OSO_DIRECT 0x0002 /* Don't buffer the file in the OS. */
-#define DB_OSO_EXCL 0x0004 /* POSIX: O_EXCL */
-#define DB_OSO_LOG 0x0008 /* Opening a log file. */
-#define DB_OSO_RDONLY 0x0010 /* POSIX: O_RDONLY */
-#define DB_OSO_REGION 0x0020 /* Opening a region file. */
-#define DB_OSO_SEQ 0x0040 /* Expected sequential access. */
-#define DB_OSO_TEMP 0x0080 /* Remove after last close. */
-#define DB_OSO_TRUNC 0x0100 /* POSIX: O_TRUNC */
-
-/*
- * Seek options understood by __os_seek.
- */
-typedef enum {
- DB_OS_SEEK_CUR, /* POSIX: SEEK_CUR */
- DB_OS_SEEK_END, /* POSIX: SEEK_END */
- DB_OS_SEEK_SET /* POSIX: SEEK_SET */
-} DB_OS_SEEK;
+ /* Path separator character(s). */
+#define PATH_SEPARATOR "@PATH_SEPARATOR@"
/*******************************************************
* Environment.
@@ -228,6 +221,7 @@ typedef enum {
* LOCKING_ON Locking has been configured.
* LOGGING_ON Logging has been configured.
* MPOOL_ON Memory pool has been configured.
+ * REP_ON Replication has been configured.
* RPC_ON RPC has been configured.
* TXN_ON Transactions have been configured.
*/
@@ -236,6 +230,7 @@ typedef enum {
#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != NULL)
#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != NULL)
#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NULL)
+#define REP_ON(dbenv) ((dbenv)->rep_handle != NULL)
#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)
#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)
@@ -404,30 +399,6 @@ typedef struct __dbpginfo {
#define IS_NOT_LOGGED_LSN(LSN) \
((LSN).file == 0 && (LSN).offset == 1)
-/*
- * Test if the environment is currently logging changes. If we're in
- * recovery or we're a replication client, we don't need to log changes
- * because they're already in the log, even though we have a fully functional
- * log system.
- */
-#define DBENV_LOGGING(dbenv) \
- (LOGGING_ON(dbenv) && !F_ISSET((dbenv), DB_ENV_REP_CLIENT) && \
- (!IS_RECOVERING(dbenv)))
-
-/*
- * Test if we need to log a change. Note that the DBC_RECOVER flag is set
- * when we're in abort, as well as during recovery; thus DBC_LOGGING may be
- * false for a particular dbc even when DBENV_LOGGING is true.
- *
- * We explicitly use LOGGING_ON/DB_ENV_REP_CLIENT here because we don't
- * want to have to pull in the log headers, which IS_RECOVERING (and thus
- * DBENV_LOGGING) rely on, and because DBC_RECOVER should be set anytime
- * IS_RECOVERING would be true.
- */
-#define DBC_LOGGING(dbc) \
- (LOGGING_ON((dbc)->dbp->dbenv) && !F_ISSET((dbc), DBC_RECOVER) && \
- !F_ISSET((dbc)->dbp->dbenv, DB_ENV_REP_CLIENT))
-
/*******************************************************
* Txn.
*******************************************************/
@@ -467,7 +438,46 @@ struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;
#include "dbinc_auto/mutex_ext.h" /* XXX: Include after region.h. */
#include "dbinc_auto/env_ext.h"
#include "dbinc/os.h"
+#include "dbinc/rep.h"
#include "dbinc_auto/clib_ext.h"
#include "dbinc_auto/common_ext.h"
+/*******************************************************
+ * Remaining Log.
+ * These need to be defined after the general includes
+ * because they need rep.h from above.
+ *******************************************************/
+/*
+ * Test if the environment is currently logging changes. If we're in recovery
+ * or we're a replication client, we don't need to log changes because they're
+ * already in the log, even though we have a fully functional log system.
+ */
+#define DBENV_LOGGING(dbenv) \
+ (LOGGING_ON(dbenv) && !IS_REP_CLIENT(dbenv) && \
+ (!IS_RECOVERING(dbenv)))
+
+/*
+ * Test if we need to log a change. By default, we don't log operations without
+ * associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on.
+ * This is because we want to get log records for read/write operations, and, if
+ * we trying to debug something, more information is always better.
+ *
+ * The DBC_RECOVER flag is set when we're in abort, as well as during recovery;
+ * thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING
+ * is true.
+ *
+ * We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull
+ * in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and
+ * because DBC_RECOVER should be set anytime IS_RECOVERING would be true.
+ */
+#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)
+#define DBC_LOGGING(dbc) \
+ (LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#else
+#define DBC_LOGGING(dbc) \
+ ((dbc)->txn != NULL && LOGGING_ON((dbc)->dbp->dbenv) && \
+ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))
+#endif
+
#endif /* !_DB_INTERNAL_H_ */
diff --git a/db/dbinc/db_join.h b/db/dbinc/db_join.h
index 487ce3eeb..f04c9934e 100644
--- a/db/dbinc/db_join.h
+++ b/db/dbinc/db_join.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*
* @(#)db_join.h 11.1 (Sleepycat) 7/25/99
diff --git a/db/dbinc/db_page.h b/db/dbinc/db_page.h
index 847a7a010..28641e06b 100644
--- a/db/dbinc/db_page.h
+++ b/db/dbinc/db_page.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_page.h,v 11.51 2002/08/06 06:37:07 bostic Exp
+ * $Id: db_page.h,v 11.59 2003/09/13 18:49:29 bostic Exp $
*/
#ifndef _DB_PAGE_H_
@@ -243,6 +243,12 @@ typedef struct _db_page {
u_int8_t type; /* 25: Page type. */
} PAGE;
+/*
+ * With many compilers sizeof(PAGE) == 28, while SIZEOF_PAGE == 26.
+ * We add in other things directly after the page header and need
+ * the SIZEOF_PAGE. When giving the sizeof(), many compilers will
+ * pad it out to the next 4-byte boundary.
+ */
#define SIZEOF_PAGE 26
/*
* !!!
@@ -322,7 +328,7 @@ typedef struct _qpage {
#define RE_NREC_ADJ(p, adj) \
PREV_PGNO(p) += adj;
#define RE_NREC_SET(p, num) \
- PREV_PGNO(p) = num;
+ PREV_PGNO(p) = (num);
/*
* Initialize a page.
@@ -332,13 +338,13 @@ typedef struct _qpage {
* P_INIT call.
*/
#define P_INIT(pg, pg_size, n, pg_prev, pg_next, btl, pg_type) do { \
- PGNO(pg) = n; \
- PREV_PGNO(pg) = pg_prev; \
- NEXT_PGNO(pg) = pg_next; \
- NUM_ENT(pg) = 0; \
- HOFFSET(pg) = pg_size; \
- LEVEL(pg) = btl; \
- TYPE(pg) = pg_type; \
+ PGNO(pg) = (n); \
+ PREV_PGNO(pg) = (pg_prev); \
+ NEXT_PGNO(pg) = (pg_next); \
+ NUM_ENT(pg) = (0); \
+ HOFFSET(pg) = (db_indx_t)(pg_size); \
+ LEVEL(pg) = (btl); \
+ TYPE(pg) = (pg_type); \
} while (0)
/* Page header length (offset to first index). */
@@ -432,8 +438,8 @@ typedef struct _hkeydata {
* not a PAIR index.
*/
#define LEN_HITEM(dbp, pg, pgsize, indx) \
- (((indx) == 0 ? pgsize : \
- (P_INP(dbp, pg)[indx - 1])) - (P_INP(dbp, pg)[indx]))
+ (((indx) == 0 ? (pgsize) : \
+ (P_INP(dbp, pg)[(indx) - 1])) - (P_INP(dbp, pg)[indx]))
#define LEN_HKEYDATA(dbp, pg, psize, indx) \
(db_indx_t)(LEN_HITEM(dbp, pg, psize, indx) - HKEYDATA_SIZE(0))
@@ -572,10 +578,13 @@ typedef struct _boverflow {
/*
* Page space required to add a new BOVERFLOW item to the page, with and
- * without the index value.
+ * without the index value. The (u_int16_t) cast avoids warnings: ALIGN
+ * casts to db_align_t, the cast converts it to a small integral type so
+ * we don't get complaints when we assign the final result to an integral
+ * type smaller than db_align_t.
*/
#define BOVERFLOW_SIZE \
- ALIGN(sizeof(BOVERFLOW), sizeof(u_int32_t))
+ ((u_int16_t)ALIGN(sizeof(BOVERFLOW), sizeof(u_int32_t)))
#define BOVERFLOW_PSIZE \
(BOVERFLOW_SIZE + sizeof(db_indx_t))
diff --git a/db/dbinc/db_server_int.h b/db/dbinc/db_server_int.h
index 78494c9b9..93193bc16 100644
--- a/db/dbinc/db_server_int.h
+++ b/db/dbinc/db_server_int.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_server_int.h,v 1.23 2002/02/12 15:01:24 sue Exp
+ * $Id: db_server_int.h,v 1.24 2003/01/08 04:31:23 bostic Exp $
*/
#ifndef _DB_SERVER_INT_H_
diff --git a/db/dbinc/db_shash.h b/db/dbinc/db_shash.h
index 2aef56641..0f335aadf 100644
--- a/db/dbinc/db_shash.h
+++ b/db/dbinc/db_shash.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_shash.h,v 11.11 2002/01/11 15:52:26 bostic Exp
+ * $Id: db_shash.h,v 11.12 2003/01/08 04:31:28 bostic Exp $
*/
#ifndef _DB_SHASH_H_
diff --git a/db/dbinc/db_swap.h b/db/dbinc/db_swap.h
index 46499deef..d0c7e6683 100644
--- a/db/dbinc/db_swap.h
+++ b/db/dbinc/db_swap.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -32,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: db_swap.h,v 11.8 2002/01/11 15:52:26 bostic Exp
+ * $Id: db_swap.h,v 11.9 2003/01/08 04:31:32 bostic Exp $
*/
#ifndef _DB_SWAP_H_
diff --git a/db/dbinc/db_upgrade.h b/db/dbinc/db_upgrade.h
index 9f4f51122..48e8cc114 100644
--- a/db/dbinc/db_upgrade.h
+++ b/db/dbinc/db_upgrade.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_upgrade.h,v 1.10 2002/01/11 15:52:26 bostic Exp
+ * $Id: db_upgrade.h,v 1.11 2003/01/08 04:31:35 bostic Exp $
*/
#ifndef _DB_UPGRADE_H_
diff --git a/db/dbinc/db_verify.h b/db/dbinc/db_verify.h
index 21665cbe9..b877eb855 100644
--- a/db/dbinc/db_verify.h
+++ b/db/dbinc/db_verify.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * Id: db_verify.h,v 1.26 2002/08/06 06:37:08 bostic Exp
+ * $Id: db_verify.h,v 1.32 2003/09/04 19:01:13 bostic Exp $
*/
#ifndef _DB_VERIFY_H_
@@ -19,11 +19,10 @@
* EPRINT is the macro for error printing. Takes as an arg the arg set
* for DB->err.
*/
-#define EPRINT(x) \
- do { \
+#define EPRINT(x) do { \
if (!LF_ISSET(DB_SALVAGE)) \
__db_err x; \
- } while (0)
+} while (0)
/* For fatal type errors--i.e., verifier bugs. */
#define TYPE_ERR_PRINT(dbenv, func, pgno, ptype) \
@@ -31,13 +30,12 @@
(u_long)(pgno), (func), (u_long)(ptype)));
/* Complain about a totally zeroed page where we don't expect one. */
-#define ZEROPG_ERR_PRINT(dbenv, pgno, str) \
- do { \
+#define ZEROPG_ERR_PRINT(dbenv, pgno, str) do { \
EPRINT(((dbenv), "Page %lu: %s is of inappropriate type %lu", \
(u_long)(pgno), str, (u_long)P_INVALID)); \
EPRINT(((dbenv), "Page %lu: totally zeroed page", \
(u_long)(pgno))); \
- } while (0)
+} while (0)
/*
* Note that 0 is, in general, a valid pgno, despite equalling PGNO_INVALID;
@@ -127,10 +125,18 @@ struct __vrfy_dbinfo {
/* Queue needs these to verify data pages in the first pass. */
u_int32_t re_len;
u_int32_t rec_page;
+ u_int32_t page_ext;
+ u_int32_t first_recno;
+ u_int32_t last_recno;
+ int nextents;
+ db_pgno_t *extents;
#define SALVAGE_PRINTABLE 0x01 /* Output printable chars literally. */
#define SALVAGE_PRINTHEADER 0x02 /* Print the unknown-key header. */
#define SALVAGE_PRINTFOOTER 0x04 /* Print the unknown-key footer. */
+#define VRFY_LEAFCHAIN_BROKEN 0x08 /* Lost one or more Btree leaf pgs. */
+#define VRFY_QMETA_SET 0x10 /* We've seen a QUEUE meta page and
+ set things up for it. */
u_int32_t flags;
}; /* VRFY_DBINFO */
@@ -190,6 +196,7 @@ struct __vrfy_pageinfo {
}; /* VRFY_PAGEINFO */
struct __vrfy_childinfo {
+ /* The following fields are set by the caller of __db_vrfy_childput. */
db_pgno_t pgno;
#define V_DUPLICATE 1 /* off-page dup metadata */
@@ -199,6 +206,9 @@ struct __vrfy_childinfo {
db_recno_t nrecs; /* record count on a btree subtree */
u_int32_t tlen; /* ovfl. item total size */
+ /* The following field is maintained by __db_vrfy_childput. */
+ u_int32_t refcnt; /* # of times parent points to child. */
+
LIST_ENTRY(__vrfy_childinfo) links;
}; /* VRFY_CHILDINFO */
diff --git a/db/dbinc/debug.h b/db/dbinc/debug.h
index f9b55d31b..9211ec7db 100644
--- a/db/dbinc/debug.h
+++ b/db/dbinc/debug.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*
- * Id: debug.h,v 11.31 2002/08/06 06:37:08 bostic Exp
+ * $Id: debug.h,v 11.38 2003/09/04 19:01:14 bostic Exp $
*/
#ifndef _DB_DEBUG_H_
@@ -15,6 +15,13 @@ extern "C" {
#endif
/*
+ * Turn on additional error checking in gcc 3.X.
+ */
+#if !defined(__GNUC__) || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#define __attribute__(s)
+#endif
+
+/*
* When running with #DIAGNOSTIC defined, we smash memory and do memory
* guarding with a special byte value.
*/
@@ -23,14 +30,26 @@ extern "C" {
/*
* DB assertions.
+ *
+ * Use __STDC__ rather than STDC_HEADERS, the #e construct is ANSI C specific.
*/
-#if defined(DIAGNOSTIC) && defined(__STDC__)
+#if defined(__STDC__) && defined(DIAGNOSTIC)
#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(#e, __FILE__, __LINE__))
#else
#define DB_ASSERT(e)
#endif
/*
+ * "Shut that bloody compiler up!"
+ *
+ * Unused, or not-used-yet variable. We need to write and then read the
+ * variable, some compilers are too bloody clever by half.
+ */
+#define COMPQUIET(n, v) \
+ (n) = (v); \
+ (n) = (n)
+
+/*
* Purify and other run-time tools complain about uninitialized reads/writes
* of structure fields whose only purpose is padding, as well as when heap
* memory that was never initialized is written to disk.
@@ -47,7 +66,7 @@ extern "C" {
* variadic argument list (and then rescanned), by functions other than the
* original routine that took the variadic list of arguments.
*/
-#if defined(__STDC__) || defined(__cplusplus)
+#if defined(STDC_HEADERS) || defined(__cplusplus)
#define DB_REAL_ERR(env, error, error_set, stderr_default, fmt) { \
va_list ap; \
\
@@ -171,7 +190,7 @@ do { \
/* Copy the file. */ \
if (F_ISSET((dbp), \
DB_AM_OPEN_CALLED) && (dbp)->mpf != NULL) \
- (void)(dbp)->sync((dbp), 0); \
+ (void)__db_sync(dbp); \
if ((__ret = \
__db_testcopy((dbp)->dbenv, (dbp), (name))) != 0) \
(ret) = __db_panic((dbp)->dbenv, __ret); \
diff --git a/db/dbinc/fop.h b/db/dbinc/fop.h
index d431dcb95..58616243b 100644
--- a/db/dbinc/fop.h
+++ b/db/dbinc/fop.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: fop.h,v 11.3 2002/03/27 04:34:54 bostic Exp
+ * $Id: fop.h,v 11.4 2003/01/08 04:31:47 bostic Exp $
*/
#ifndef _FOP_H_
diff --git a/db/dbinc/globals.h b/db/dbinc/globals.h
index 415e5dd17..b2dcc629a 100644
--- a/db/dbinc/globals.h
+++ b/db/dbinc/globals.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: globals.h,v 11.1 2002/07/12 18:56:41 bostic Exp
+ * $Id: globals.h,v 11.3 2003/01/08 04:31:51 bostic Exp $
*/
/*******************************************************
@@ -17,7 +17,6 @@
#endif
typedef struct __db_globals {
- u_int32_t no_write_errors; /* write error testing disallowed */
#ifdef HAVE_VXWORKS
u_int32_t db_global_init; /* VxWorks: inited */
SEM_ID db_global_lock; /* VxWorks: global semaphore */
@@ -49,7 +48,6 @@ typedef struct __db_globals {
#ifdef DB_INITIALIZE_DB_GLOBALS
DB_GLOBALS __db_global_values = {
- 0, /* write error testing disallowed */
#ifdef HAVE_VXWORKS
0, /* VxWorks: initialized */
NULL, /* VxWorks: global semaphore */
diff --git a/db/dbinc/hash.h b/db/dbinc/hash.h
index 3c1848195..5bfcae899 100644
--- a/db/dbinc/hash.h
+++ b/db/dbinc/hash.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -39,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * Id: hash.h,v 11.26 2002/03/27 04:34:54 bostic Exp
+ * $Id: hash.h,v 11.27 2003/01/08 04:31:58 bostic Exp $
*/
#ifndef _DB_HASH_H_
diff --git a/db/dbinc/hmac.h b/db/dbinc/hmac.h
index efc0cd93d..43501f204 100644
--- a/db/dbinc/hmac.h
+++ b/db/dbinc/hmac.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: hmac.h,v 1.3 2002/08/06 06:37:08 bostic Exp
+ * $Id: hmac.h,v 1.4 2003/01/08 04:32:02 bostic Exp $
*/
#ifndef _DB_HMAC_H_
diff --git a/db/dbinc/lock.h b/db/dbinc/lock.h
index 08da9a0ef..e0d65f592 100644
--- a/db/dbinc/lock.h
+++ b/db/dbinc/lock.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: lock.h,v 11.42 2002/05/18 01:34:13 bostic Exp
+ * $Id: lock.h,v 11.47 2003/04/16 18:23:27 ubell Exp $
*/
#ifndef _DB_LOCK_H_
@@ -33,7 +33,8 @@
* for the NUMWRITES option to deadlock detection.
*/
#define IS_WRITELOCK(m) \
- ((m) == DB_LOCK_WRITE || (m) == DB_LOCK_IWRITE || (m) == DB_LOCK_IWR)
+ ((m) == DB_LOCK_WRITE || (m) == DB_LOCK_WWRITE || \
+ (m) == DB_LOCK_IWRITE || (m) == DB_LOCK_IWR)
/*
* Lock timers.
@@ -45,8 +46,13 @@ typedef struct {
#define LOCK_TIME_ISVALID(time) ((time)->tv_sec != 0)
#define LOCK_SET_TIME_INVALID(time) ((time)->tv_sec = 0)
+#define LOCK_TIME_ISMAX(time) ((time)->tv_sec == UINT32_T_MAX)
+#define LOCK_SET_TIME_MAX(time) ((time)->tv_sec = UINT32_T_MAX)
#define LOCK_TIME_EQUAL(t1, t2) \
((t1)->tv_sec == (t2)->tv_sec && (t1)->tv_usec == (t2)->tv_usec)
+#define LOCK_TIME_GREATER(t1, t2) \
+ ((t1)->tv_sec > (t2)->tv_sec || \
+ ((t1)->tv_sec == (t2)->tv_sec && (t1)->tv_usec > (t2)->tv_usec))
/*
* DB_LOCKREGION --
@@ -55,6 +61,7 @@ typedef struct {
typedef struct __db_lockregion {
u_int32_t need_dd; /* flag for deadlock detector */
u_int32_t detect; /* run dd on every conflict */
+ db_timeval_t next_timeout; /* next time to expire a lock */
/* free lock header */
SH_TAILQ_HEAD(__flock) free_locks;
/* free obj header */
@@ -101,8 +108,8 @@ typedef struct __db_lockobj {
SH_DBT lockobj; /* Identifies object locked. */
SH_TAILQ_ENTRY links; /* Links for free list or hash list. */
SH_TAILQ_ENTRY dd_links; /* Links for dd list. */
- SH_TAILQ_HEAD(__wait) waiters; /* List of waiting locks. */
- SH_TAILQ_HEAD(__hold) holders; /* List of held locks. */
+ SH_TAILQ_HEAD(__waitl) waiters; /* List of waiting locks. */
+ SH_TAILQ_HEAD(__holdl) holders; /* List of held locks. */
/* Declare room in the object to hold
* typical DB lock structures so that
* we do not have to allocate them from
@@ -180,8 +187,6 @@ struct __db_lock {
* Flag values for __lock_put_internal:
* DB_LOCK_DOALL: Unlock all references in this lock (instead of only 1).
* DB_LOCK_FREE: Free the lock (used in checklocker).
- * DB_LOCK_IGNOREDEL: Remove from the locker hash table even if already
- deleted (used in checklocker).
* DB_LOCK_NOPROMOTE: Don't bother running promotion when releasing locks
* (used by __lock_put_internal).
* DB_LOCK_UNLINK: Remove from the locker links (used in checklocker).
@@ -190,10 +195,9 @@ struct __db_lock {
*/
#define DB_LOCK_DOALL 0x010000
#define DB_LOCK_FREE 0x020000
-#define DB_LOCK_IGNOREDEL 0x040000
-#define DB_LOCK_NOPROMOTE 0x080000
-#define DB_LOCK_UNLINK 0x100000
-#define DB_LOCK_NOWAITERS 0x200000
+#define DB_LOCK_NOPROMOTE 0x040000
+#define DB_LOCK_UNLINK 0x080000
+#define DB_LOCK_NOWAITERS 0x100000
/*
* Macros to get/release different types of mutexes.
diff --git a/db/dbinc/log.h b/db/dbinc/log.h
index acc05ae43..06a2b0f71 100644
--- a/db/dbinc/log.h
+++ b/db/dbinc/log.h
@@ -1,15 +1,60 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: log.h,v 11.60 2002/08/06 06:37:08 bostic Exp
+ * $Id: log.h,v 11.68 2003/11/20 18:32:19 bostic Exp $
*/
#ifndef _LOG_H_
#define _LOG_H_
+/*******************************************************
+ * DBREG:
+ * The DB file register code keeps track of open files. It's stored
+ * in the log subsystem's shared region, and so appears in the log.h
+ * header file, but is logically separate.
+ *******************************************************/
+/*
+ * The per-process table that maps log file-id's to DB structures.
+ */
+typedef struct __db_entry {
+ DB *dbp; /* Open dbp for this file id. */
+ int deleted; /* File was not found during open. */
+} DB_ENTRY;
+
+/*
+ * FNAME --
+ * File name and id.
+ */
+struct __fname {
+ SH_TAILQ_ENTRY q; /* File name queue. */
+
+ int32_t id; /* Logging file id. */
+ DBTYPE s_type; /* Saved DB type. */
+
+ roff_t name_off; /* Name offset. */
+ db_pgno_t meta_pgno; /* Page number of the meta page. */
+ u_int8_t ufid[DB_FILE_ID_LEN]; /* Unique file id. */
+
+ u_int32_t create_txnid; /*
+ * Txn ID of the DB create, stored so
+ * we can log it at register time.
+ */
+ int is_durable; /* Is this file durable or not. */
+};
+
+/* File open/close register log record opcodes. */
+#define DBREG_CHKPNT 1 /* Checkpoint: file name/id dump. */
+#define DBREG_CLOSE 2 /* File close. */
+#define DBREG_OPEN 3 /* File open. */
+#define DBREG_RCLOSE 4 /* File close after recovery. */
+
+/*******************************************************
+ * LOG:
+ * The log subsystem information.
+ *******************************************************/
struct __db_log; typedef struct __db_log DB_LOG;
struct __hdr; typedef struct __hdr HDR;
struct __log; typedef struct __log LOG;
@@ -24,14 +69,6 @@ struct __log_persist; typedef struct __log_persist LOGP;
#define LG_BASE_REGION_SIZE (60 * 1024) /* 60 KB. */
/*
- * The per-process table that maps log file-id's to DB structures.
- */
-typedef struct __db_entry {
- DB *dbp; /* Open dbp for this file id. */
- int deleted; /* File was not found during open. */
-} DB_ENTRY;
-
-/*
* DB_LOG
* Per-process log structure.
*/
@@ -52,12 +89,10 @@ struct __db_log {
/*
* These fields are always accessed while the region lock is held, so they do
- * not have to be protected by the thread lock as well, OR, they are only used
- * when threads are not being used, i.e. most cursor operations are disallowed
- * on threaded logs.
+ * not have to be protected by the thread lock as well.
*/
u_int32_t lfname; /* Log file "name". */
- DB_FH lfh; /* Log file handle. */
+ DB_FH *lfhp; /* Log file handle. */
u_int8_t *bufp; /* Region buffer. */
@@ -67,8 +102,7 @@ struct __db_log {
#define DBLOG_RECOVER 0x01 /* We are in recovery. */
#define DBLOG_FORCE_OPEN 0x02 /* Force the DB open even if it appears
- * to be deleted.
- */
+ * to be deleted. */
u_int32_t flags;
};
@@ -156,17 +190,30 @@ struct __log {
DB_LOG_STAT stat; /* Log statistics. */
/*
+ * !!! - NOTE that the next 6 fields, waiting_lsn, verify_lsn,
+ * max_wait_lsn, wait_recs, rcvd_recs, and ready_lsn are NOT
+ * protected by the log region lock. They are protected by
+ * db_rep->db_mutexp. If you need access to both, you must
+ * acquire the db_mutexp before acquiring the log region lock.
+ *
* The waiting_lsn is used by the replication system. It is the
* first LSN that we are holding without putting in the log, because
* we received one or more log records out of order. Associated with
* the waiting_lsn is the number of log records that we still have to
* receive before we decide that we should request it again.
+ *
+ * The max_wait_lsn is used to control retransmission in the face
+ * of dropped messages. If we are requesting all records from the
+ * current gap (i.e., chunk of the log that we are missing), then
+ * the max_wait_lsn contains the first LSN that we are known to have
+ * in the __db.rep.db. If we requested only a single record, then
+ * the max_wait_lsn has the LSN of that record we requested.
*/
DB_LSN waiting_lsn; /* First log record after a gap. */
DB_LSN verify_lsn; /* LSN we are waiting to verify. */
+ DB_LSN max_wait_lsn; /* Maximum LSN requested. */
u_int32_t wait_recs; /* Records to wait before requesting. */
u_int32_t rcvd_recs; /* Records received while waiting. */
-
/*
* The ready_lsn is also used by the replication system. It is the
* next LSN we expect to receive. It's normally equal to "lsn",
@@ -218,40 +265,13 @@ struct __db_commit {
u_int32_t flags;
};
-/*
- * FNAME --
- * File name and id.
- */
-struct __fname {
- SH_TAILQ_ENTRY q; /* File name queue. */
-
- int32_t id; /* Logging file id. */
- DBTYPE s_type; /* Saved DB type. */
-
- roff_t name_off; /* Name offset. */
- db_pgno_t meta_pgno; /* Page number of the meta page. */
- u_int8_t ufid[DB_FILE_ID_LEN]; /* Unique file id. */
-
- u_int32_t create_txnid; /*
- * Txn ID of the DB create, stored so
- * we can log it at register time.
- */
-};
-
-/* File open/close register log record opcodes. */
-#define LOG_CHECKPOINT 1 /* Checkpoint: file name/id dump. */
-#define LOG_CLOSE 2 /* File close. */
-#define LOG_OPEN 3 /* File open. */
-#define LOG_RCLOSE 4 /* File close after recovery. */
-
#define CHECK_LSN(redo, cmp, lsn, prev) \
- DB_ASSERT(!DB_REDO(redo) || \
- (cmp) >= 0 || IS_NOT_LOGGED_LSN(*lsn)); \
if (DB_REDO(redo) && (cmp) < 0 && !IS_NOT_LOGGED_LSN(*(lsn))) { \
__db_err(dbenv, \
"Log sequence error: page LSN %lu %lu; previous LSN %lu %lu", \
(u_long)(lsn)->file, (u_long)(lsn)->offset, \
(u_long)(prev)->file, (u_long)(prev)->offset); \
+ ret = EINVAL; \
goto out; \
}
diff --git a/db/dbinc/mp.h b/db/dbinc/mp.h
index e94e320b6..0952b1c29 100644
--- a/db/dbinc/mp.h
+++ b/db/dbinc/mp.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: mp.h,v 11.44 2002/08/06 06:11:21 bostic Exp
+ * $Id: mp.h,v 11.52 2003/07/08 20:14:19 ubell Exp $
*/
#ifndef _DB_MP_H_
@@ -18,6 +18,17 @@ struct __mpool; typedef struct __mpool MPOOL;
/* We require at least 20KB of cache. */
#define DB_CACHESIZE_MIN (20 * 1024)
+/*
+ * DB_MPOOLFILE initialization methods cannot be called after open is called,
+ * other methods cannot be called before open is called
+ */
+#define MPF_ILLEGAL_AFTER_OPEN(dbmfp, name) \
+ if (F_ISSET(dbmfp, MP_OPEN_CALLED)) \
+ return (__db_mi_open((dbmfp)->dbenv, name, 1));
+#define MPF_ILLEGAL_BEFORE_OPEN(dbmfp, name) \
+ if (!F_ISSET(dbmfp, MP_OPEN_CALLED)) \
+ return (__db_mi_open((dbmfp)->dbenv, name, 0));
+
typedef enum {
DB_SYNC_ALLOC, /* Flush for allocation. */
DB_SYNC_CACHE, /* Checkpoint or flush entire cache. */
@@ -124,7 +135,7 @@ struct __mpool {
roff_t regids; /* Array of underlying REGION Ids. */
#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
- roff_t maint_off; /* Maintenance information offset */
+ roff_t maint_off; /* Maintenance information offset */
#endif
/*
@@ -137,10 +148,10 @@ struct __mpool {
* The last_checked and lru_count fields are thread protected by
* the region lock.
*/
- int htab_buckets; /* Number of hash table entries. */
- roff_t htab; /* Hash table offset. */
- u_int32_t last_checked; /* Last bucket checked for free. */
- u_int32_t lru_count; /* Counter for buffer LRU */
+ int htab_buckets; /* Number of hash table entries. */
+ roff_t htab; /* Hash table offset. */
+ u_int32_t last_checked; /* Last bucket checked for free. */
+ u_int32_t lru_count; /* Counter for buffer LRU */
/*
* The stat fields are generally not thread protected, and cannot be
@@ -149,6 +160,13 @@ struct __mpool {
* region lock).
*/
DB_MPOOL_STAT stat; /* Per-cache mpool statistics. */
+
+ /*
+ * We track page puts so that we can decide when allocation is never
+ * going to succeed. We don't lock the field, all we care about is
+ * if it changes.
+ */
+ u_int32_t put_counter; /* Count of page put calls. */
};
struct __db_mpool_hash {
@@ -179,21 +197,6 @@ struct __db_mpool_hash {
#define MPOOL_PRI_VERY_HIGH 1 /* Add number of buffers in pool. */
/*
- * MPOOLFILE_IGNORE --
- * Discard an MPOOLFILE and any buffers it references: update the flags
- * so we never try to write buffers associated with the file, nor can we
- * find it when looking for files to join. In addition, clear the ftype
- * field, there's no reason to post-process pages, they can be discarded
- * by any thread.
- *
- * Expects the MPOOLFILE mutex to be held.
- */
-#define MPOOLFILE_IGNORE(mfp) { \
- (mfp)->ftype = 0; \
- F_SET(mfp, MP_DEADFILE); \
-}
-
-/*
* MPOOLFILE --
* Shared DB_MPOOLFILE information.
*/
@@ -206,10 +209,18 @@ struct __mpoolfile {
roff_t path_off; /* File name location. */
+ /*
+ * We normally don't lock the deadfile field when we read it since we
+ * only care if the field is zero or non-zero. We do lock on read when
+ * searching for a matching MPOOLFILE -- see that code for more detail.
+ */
+ int32_t deadfile; /* Dirty pages can be discarded. */
+
/* Protected by mpool cache 0 region lock. */
SH_TAILQ_ENTRY q; /* List of MPOOLFILEs */
db_pgno_t last_pgno; /* Last page in the file. */
db_pgno_t orig_last_pgno; /* Original last page in the file. */
+ db_pgno_t maxpgno; /* Maximum page number. */
/*
* None of the following fields are thread protected.
@@ -218,26 +229,44 @@ struct __mpoolfile {
* without holding a lock. However, it has to be set before adding
* any buffers to the cache that depend on it being set, so there
* would need to be incorrect operation ordering to have a problem.
- *
+ */
+ int32_t ftype; /* File type. */
+
+ /*
* There are potential races with the priority field because it's read
* without holding a lock. However, a collision is unlikely and if it
* happens is of little consequence.
+ */
+ int32_t priority; /* Priority when unpinning buffer. */
+
+ /*
+ * There are potential races with the file_written field (many threads
+ * may be writing blocks at the same time), and with no_backing_file
+ * and unlink_on_close fields, as they may be set while other threads
+ * are reading them. However, we only care if the value of these fields
+ * are zero or non-zero, so don't lock the memory.
*
+ * !!!
+ * Theoretically, a 64-bit architecture could put two of these fields
+ * in a single memory operation and we could race. I have never seen
+ * an architecture where that's a problem, and I believe Java requires
+ * that to never be the case.
+ */
+ int32_t file_written; /* File was written. */
+ int32_t no_backing_file; /* Never open a backing file. */
+ int32_t unlink_on_close; /* Unlink file on last close. */
+
+ /*
* We do not protect the statistics in "stat" because of the cost of
* the mutex in the get/put routines. There is a chance that a count
* will get lost.
- *
- * The remaining fields are initialized at open and never subsequently
- * modified, except for the MP_DEADFILE, which is only set and never
- * unset. (If there was more than one flag that was subsequently set,
- * there might be a race, but with a single flag there can't be.)
*/
- int32_t ftype; /* File type. */
-
- int32_t priority; /* Priority when unpinning buffer. */
-
DB_MPOOL_FSTAT stat; /* Per-file mpool statistics. */
+ /*
+ * The remaining fields are initialized at open and never subsequently
+ * modified.
+ */
int32_t lsn_off; /* Page's LSN offset. */
u_int32_t clear_len; /* Bytes to clear on page create. */
@@ -246,12 +275,18 @@ struct __mpoolfile {
roff_t pgcookie_len; /* Pgin/pgout cookie length. */
roff_t pgcookie_off; /* Pgin/pgout cookie location. */
-#define MP_CAN_MMAP 0x01 /* If the file can be mmap'd. */
-#define MP_DEADFILE 0x02 /* Dirty pages can simply be trashed. */
-#define MP_DIRECT 0x04 /* No OS buffering. */
-#define MP_EXTENT 0x08 /* Extent file. */
-#define MP_TEMP 0x10 /* Backing file is a temporary. */
-#define MP_UNLINK 0x20 /* Unlink file on last close. */
+ /*
+ * The flags are initialized at open and never subsequently modified.
+ */
+#define MP_CAN_MMAP 0x001 /* If the file can be mmap'd. */
+#define MP_DIRECT 0x002 /* No OS buffering. */
+#define MP_EXTENT 0x004 /* Extent file. */
+#define MP_FAKE_DEADFILE 0x008 /* Deadfile field: fake flag. */
+#define MP_FAKE_FILEWRITTEN 0x010 /* File_written field: fake flag. */
+#define MP_FAKE_NB 0x020 /* No_backing_file field: fake flag. */
+#define MP_FAKE_UOC 0x040 /* Unlink_on_close field: fake flag. */
+#define MP_NOT_DURABLE 0x080 /* File is not durable. */
+#define MP_TEMP 0x100 /* Backing file is a temporary. */
u_int32_t flags;
};
diff --git a/db/dbinc/mutex.h b/db/dbinc/mutex.h
index e95036c63..042a4e54a 100644
--- a/db/dbinc/mutex.h
+++ b/db/dbinc/mutex.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: mutex.h,v 11.71 2002/09/10 01:36:48 bostic Exp
+ * $Id: mutex.h,v 11.90 2003/09/20 21:40:49 bostic Exp $
*/
#ifndef _DB_MUTEX_H_
@@ -77,7 +77,10 @@
#ifdef HAVE_MUTEX_AIX_CHECK_LOCK
#include <sys/atomic_op.h>
typedef int tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_INIT(x) 0
@@ -87,6 +90,25 @@ typedef int tsl_t;
#endif
/*********************************************************************
+ * Apple/Darwin library functions.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY
+typedef u_int32_t tsl_t;
+
+#ifndef MUTEX_ALIGN
+#define MUTEX_ALIGN sizeof(int)
+#endif
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+extern int _spin_lock_try(tsl_t *);
+extern void _spin_unlock(tsl_t *);
+#define MUTEX_SET(tsl) _spin_lock_try(tsl)
+#define MUTEX_UNSET(tsl) _spin_unlock(tsl)
+#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
+#endif
+#endif
+
+/*********************************************************************
* General C library functions (msemaphore).
*
* !!!
@@ -104,14 +126,16 @@ typedef int tsl_t;
#define MUTEX_NO_MALLOC_LOCKS
#define MUTEX_NO_SHMGET_LOCKS
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN 16
#endif
+#endif
#if defined(HAVE_MUTEX_MSEM_INIT) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
#include <sys/mman.h>
typedef msemaphore tsl_t;
-#ifndef MUTEX_ALIGN
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
#endif
@@ -128,7 +152,9 @@ typedef msemaphore tsl_t;
#ifdef HAVE_MUTEX_PLAN9
typedef Lock tsl_t;
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
#define MUTEX_INIT(x) (memset(x, 0, sizeof(Lock)), 0)
#define MUTEX_SET(x) canlock(x)
@@ -159,7 +185,10 @@ typedef spinlock_t tsl_t;
#ifdef HAVE_MUTEX_SEMA_INIT
#include <synch.h>
typedef sema_t tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_DESTROY(x) sema_destroy(x)
@@ -175,7 +204,10 @@ typedef sema_t tsl_t;
#ifdef HAVE_MUTEX_SGI_INIT_LOCK
#include <abi_mutex.h>
typedef abilock_t tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_INIT(x) (init_lock(x) != 0)
@@ -194,7 +226,10 @@ typedef abilock_t tsl_t;
#ifdef HAVE_MUTEX_SOLARIS_LOCK_TRY
#include <sys/machlock.h>
typedef lock_t tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_INIT(x) 0
@@ -209,8 +244,11 @@ typedef lock_t tsl_t;
#ifdef HAVE_MUTEX_VMS
#include <sys/mman.h>;
#include <builtins.h>
-typedef unsigned char tsl_t;
+typedef volatile unsigned char tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(unsigned int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#ifdef __ALPHA
@@ -234,7 +272,10 @@ typedef unsigned char tsl_t;
#ifdef HAVE_MUTEX_VXWORKS
#include "taskLib.h"
typedef SEM_ID tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(unsigned int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_SET(tsl) (semTake((*tsl), WAIT_FOREVER) == OK)
@@ -283,7 +324,10 @@ do { \
*********************************************************************/
#ifdef HAVE_MUTEX_WIN16
typedef unsigned int tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(unsigned int)
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_INIT(x) 0
@@ -295,7 +339,7 @@ typedef unsigned int tsl_t;
/*********************************************************************
* Win32
*********************************************************************/
-#ifdef HAVE_MUTEX_WIN32
+#if defined(HAVE_MUTEX_WIN32) || defined(HAVE_MUTEX_WIN32_GCC)
#define MUTEX_FIELDS \
LONG tas; \
LONG nwaiters; \
@@ -305,6 +349,22 @@ typedef unsigned int tsl_t;
#define MUTEX_SET(tsl) (!InterlockedExchange((PLONG)tsl, 1))
#define MUTEX_UNSET(tsl) (*(tsl) = 0)
#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+
+/*
+ * From Intel's performance tuning documentation (and see SR #6975):
+ * ftp://download.intel.com/design/perftool/cbts/appnotes/sse2/w_spinlock.pdf
+ *
+ * "For this reason, it is highly recommended that you insert the PAUSE
+ * instruction into all spin-wait code immediately. Using the PAUSE
+ * instruction does not affect the correctness of programs on existing
+ * platforms, and it improves performance on Pentium 4 processor platforms."
+ */
+#ifdef HAVE_MUTEX_WIN32
+#define MUTEX_PAUSE {__asm{_emit 0xf3}; __asm{_emit 0x90}}
+#endif
+#ifdef HAVE_MUTEX_WIN32_GCC
+#define MUTEX_PAUSE asm volatile ("rep; nop" : : );
+#endif
#endif
#endif
@@ -339,14 +399,16 @@ typedef unsigned char tsl_t;
*********************************************************************/
#ifdef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY
typedef u_int32_t tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN 4
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
/*
* For gcc/alpha. Should return 0 if could not acquire the lock, 1 if
* lock was acquired properly.
*/
-#ifdef __GNUC__
static inline int
MUTEX_SET(tsl_t *tsl) {
register tsl_t *__l = tsl;
@@ -374,15 +436,27 @@ MUTEX_UNSET(tsl_t *tsl) {
asm volatile(" mb\n");
return *tsl = 0;
}
+
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
#endif
-#ifdef __DECC
+/*********************************************************************
+ * Tru64/cc assembly.
+ *********************************************************************/
+#ifdef HAVE_MUTEX_TRU64_CC_ASSEMBLY
+typedef volatile u_int32_t tsl_t;
+
+#ifndef MUTEX_ALIGN
+#define MUTEX_ALIGN 4
+#endif
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
#include <alpha/builtins.h>
#define MUTEX_SET(tsl) (__LOCK_LONG_RETRY((tsl), 1) != 0)
-#define MUTEX_UNSET(tsl) (*(tsl) = 0)
-#endif
+#define MUTEX_UNSET(tsl) (__UNLOCK_LONG(tsl))
-#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#define MUTEX_INIT(tsl) (MUTEX_UNSET(tsl), 0)
#endif
#endif
@@ -398,10 +472,11 @@ typedef unsigned char tsl_t;
*/
#define MUTEX_SET(tsl) ({ \
int __r; \
- asm volatile("swpb %0, %1, [%2]" \
- : "=r" (__r) \
- : "0" (1), "r" (tsl) \
- : "memory" \
+ asm volatile( \
+ "swpb %0, %1, [%2]\n\t" \
+ "eor %0, %0, #1\n\t" \
+ : "=&r" (__r) \
+ : "r" (1), "r" (tsl) \
); \
__r & 1; \
})
@@ -416,7 +491,10 @@ typedef unsigned char tsl_t;
*********************************************************************/
#ifdef HAVE_MUTEX_HPPA_GCC_ASSEMBLY
typedef u_int32_t tsl_t;
+
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN 16
+#endif
#ifdef LOAD_ACTUAL_MUTEX_CODE
/*
@@ -465,8 +543,7 @@ typedef unsigned char tsl_t;
/*********************************************************************
* PowerPC/gcc assembly.
*********************************************************************/
-#if defined(HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY) || \
- (HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY)
+#if defined(HAVE_MUTEX_PPC_GCC_ASSEMBLY)
typedef u_int32_t tsl_t;
#ifdef LOAD_ACTUAL_MUTEX_CODE
@@ -500,54 +577,54 @@ typedef u_int32_t tsl_t;
*
* 'set' mutexes have the value 1, like on Intel; the returned value from
* MUTEX_SET() is 1 if the mutex previously had its low bit clear, 0 otherwise.
- *
- * Mutexes on Mac OS X work the same way as the standard PowerPC version, but
- * the assembler syntax is subtly different -- the standard PowerPC version
- * assembles but doesn't work correctly. This version makes (unnecessary?)
- * use of a stupid linker trick: __db_mutex_tas_dummy is never called, but the
- * ___db_mutex_set label is used as a function name.
*/
-#ifdef HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY
-extern int __db_mutex_set __P((volatile tsl_t *));
-void
-__db_mutex_tas_dummy()
-{
- __asm__ __volatile__(" \n\
- .globl ___db_mutex_set \n\
-___db_mutex_set: \n\
- lwarx r5,0,r3 \n\
- cmpwi r5,0 \n\
- bne fail \n\
- addi r5,r5,1 \n\
- stwcx. r5,0,r3 \n\
- beq success \n\
-fail: \n\
- li r3,0 \n\
- blr \n\
-success: \n\
- li r3,1 \n\
- blr");
+#ifdef HAVE_MUTEX_PPC_GCC_ASSEMBLY
+static inline int
+MUTEX_SET(int *tsl) {
+ int __r;
+ asm volatile (
+"0: \n\t"
+" lwarx %0,0,%1 \n\t"
+" cmpwi %0,0 \n\t"
+" bne- 1f \n\t"
+" stwcx. %1,0,%1 \n\t"
+" isync \n\t"
+" beq+ 2f \n\t"
+" b 0b \n\t"
+"1: \n\t"
+" li %1, 0 \n\t"
+"2: \n\t"
+ : "=&r" (__r), "+r" (tsl)
+ :
+ : "cr0", "memory");
+ return (int)tsl;
}
-#define MUTEX_SET(tsl) __db_mutex_set(tsl)
-#endif
-#ifdef HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY
-#define MUTEX_SET(tsl) ({ \
- int __one = 1; \
- int __r; \
- tsl_t *__l = (tsl); \
- asm volatile (" \
-0: \
- lwarx %0,0,%1; \
- cmpwi %0,0; \
- bne 1f; \
- stwcx. %2,0,%1; \
- bne- 0b; \
-1:" \
- : "=&r" (__r) \
- : "r" (__l), "r" (__one)); \
- !(__r & 1); \
-})
#endif
+static inline int
+MUTEX_UNSET(tsl_t *tsl) {
+ asm volatile("sync" : : : "memory");
+ return *tsl = 0;
+}
+#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+#endif
+#endif
+
+/*********************************************************************
+ * OS/390 C
+ *********************************************************************/
+#ifdef HAVE_MUTEX_S390_CC_ASSEMBLY
+typedef int tsl_t;
+
+#ifndef MUTEX_ALIGN
+#define MUTEX_ALIGN sizeof(int)
+#endif
+
+#ifdef LOAD_ACTUAL_MUTEX_CODE
+/*
+ * cs() is declared in <stdlib.h> but is built in to the compiler.
+ * Must use LANGLVL(EXTENDED) to get its declaration.
+ */
+#define MUTEX_SET(tsl) (!cs(&zero, (tsl), 1))
#define MUTEX_UNSET(tsl) (*(tsl) = 0)
#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
#endif
@@ -657,7 +734,10 @@ typedef unsigned char tsl_t;
#ifdef HAVE_MUTEX_UTS_CC_ASSEMBLY
typedef int tsl_t;
+#ifndef MUTEX_ALIGN
#define MUTEX_ALIGN sizeof(int)
+#endif
+
#ifdef LOAD_ACTUAL_MUTEX_CODE
#define MUTEX_INIT(x) 0
#define MUTEX_SET(x) (!uts_lock(x, 1))
@@ -687,6 +767,17 @@ typedef unsigned char tsl_t;
#define MUTEX_UNSET(tsl) (*(tsl) = 0)
#define MUTEX_INIT(tsl) MUTEX_UNSET(tsl)
+
+/*
+ * From Intel's performance tuning documentation (and see SR #6975):
+ * ftp://download.intel.com/design/perftool/cbts/appnotes/sse2/w_spinlock.pdf
+ *
+ * "For this reason, it is highly recommended that you insert the PAUSE
+ * instruction into all spin-wait code immediately. Using the PAUSE
+ * instruction does not affect the correctness of programs on existing
+ * platforms, and it improves performance on Pentium 4 processor platforms."
+ */
+#define MUTEX_PAUSE asm volatile ("rep; nop" : : );
#endif
#endif
@@ -714,33 +805,38 @@ typedef unsigned char tsl_t;
/*
* !!!
- * These defines are separated into the u_int8_t flags stored in the
- * mutex below, and the 32 bit flags passed to __db_mutex_setup.
- * But they must co-exist and not overlap. Flags to __db_mutex_setup are:
+ * The flag arguments for __db_mutex_setup (and the underyling intialization
+ * function for the mutex type, for example, __db_tas_mutex_init), and flags
+ * stored in the DB_MUTEX structure are combined, and may not overlap. Flags
+ * to __db_mutex_setup:
*
- * MUTEX_ALLOC - Use when the mutex to initialize needs to be allocated.
- * The 'ptr' arg to __db_mutex_setup should be a DB_MUTEX ** whenever
- * you use this flag. If this flag is not set, the 'ptr' arg is
- * a DB_MUTEX *.
- * MUTEX_NO_RECORD - Explicitly do not record the mutex in the region.
- * Otherwise the mutex will be recorded by default. If you set
- * this you need to understand why you don't need it recorded. The
- * *only* ones not recorded are those that are part of region structures
- * that only get destroyed when the regions are destroyed.
- * MUTEX_NO_RLOCK - Explicitly do not lock the given region otherwise
- * the region will be locked by default.
- * MUTEX_SELF_BLOCK - Set if self blocking mutex.
- * MUTEX_THREAD - Set if mutex is a thread-only mutex.
+ * MUTEX_ALLOC:
+ * Use when the mutex to initialize needs to be allocated. The 'ptr'
+ * arg to __db_mutex_setup should be a DB_MUTEX ** whenever you use
+ * this flag. If this flag is not set, the 'ptr' arg is a DB_MUTEX *.
+ * MUTEX_NO_RECORD:
+ * Explicitly do not record the mutex in the region. Otherwise the
+ * mutex will be recorded by default. If you set this you need to
+ * understand why you don't need it recorded. The *only* ones not
+ * recorded are those that are part of region structures that only
+ * get destroyed when the regions are destroyed.
+ * MUTEX_NO_RLOCK:
+ * Explicitly do not lock the given region otherwise the region will
+ * be locked by default.
+ * MUTEX_SELF_BLOCK:
+ * Set if self blocking mutex.
+ * MUTEX_THREAD:
+ * Set if mutex is a thread-only mutex.
*/
-#define MUTEX_IGNORE 0x001 /* Ignore, no lock required. */
-#define MUTEX_INITED 0x002 /* Mutex is successfully initialized */
-#define MUTEX_MPOOL 0x004 /* Allocated from mpool. */
-#define MUTEX_SELF_BLOCK 0x008 /* Must block self. */
-/* Flags only, may be larger than 0xff. */
-#define MUTEX_ALLOC 0x00000100 /* Allocate and init a mutex */
-#define MUTEX_NO_RECORD 0x00000200 /* Do not record lock */
-#define MUTEX_NO_RLOCK 0x00000400 /* Do not acquire region lock */
-#define MUTEX_THREAD 0x00000800 /* Thread-only mutex. */
+#define MUTEX_ALLOC 0x0001 /* Allocate and init a mutex */
+#define MUTEX_IGNORE 0x0002 /* Ignore, no lock required. */
+#define MUTEX_INITED 0x0004 /* Mutex is successfully initialized */
+#define MUTEX_LOGICAL_LOCK 0x0008 /* Mutex backs database lock. */
+#define MUTEX_MPOOL 0x0010 /* Allocated from mpool. */
+#define MUTEX_NO_RECORD 0x0020 /* Do not record lock */
+#define MUTEX_NO_RLOCK 0x0040 /* Do not acquire region lock */
+#define MUTEX_SELF_BLOCK 0x0080 /* Must block self. */
+#define MUTEX_THREAD 0x0100 /* Thread-only mutex. */
/* Mutex. */
struct __mutex_t {
@@ -750,7 +846,6 @@ struct __mutex_t {
#else
tsl_t tas; /* Test and set. */
#endif
- u_int32_t spins; /* Spins before block. */
u_int32_t locked; /* !0 if locked. */
#else
u_int32_t off; /* Byte offset to lock. */
@@ -763,8 +858,12 @@ struct __mutex_t {
#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
roff_t reg_off; /* Shared lock info offset. */
#endif
-
- u_int8_t flags; /* MUTEX_XXX */
+ /*
+ * Flags should be an unsigned integer even if it's not required by
+ * the possible flags values, getting a single byte on some machines
+ * is expensive, and the mutex structure is a MP hot spot.
+ */
+ u_int32_t flags; /* MUTEX_XXX */
};
/* Redirect calls to the correct functions. */
@@ -776,7 +875,7 @@ struct __mutex_t {
#define __db_mutex_lock(a, b) __db_pthread_mutex_lock(a, b)
#define __db_mutex_unlock(a, b) __db_pthread_mutex_unlock(a, b)
#define __db_mutex_destroy(a) __db_pthread_mutex_destroy(a)
-#elif defined(HAVE_MUTEX_WIN32)
+#elif defined(HAVE_MUTEX_WIN32) || defined(HAVE_MUTEX_WIN32_GCC)
#define __db_mutex_init_int(a, b, c, d) __db_win32_mutex_init(a, b, d)
#define __db_mutex_lock(a, b) __db_win32_mutex_lock(a, b)
#define __db_mutex_unlock(a, b) __db_win32_mutex_unlock(a, b)
diff --git a/db/dbinc/os.h b/db/dbinc/os.h
index 7d316a72a..548170646 100644
--- a/db/dbinc/os.h
+++ b/db/dbinc/os.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: os.h,v 11.14 2002/03/27 04:34:55 bostic Exp
+ * $Id: os.h,v 11.18 2003/03/11 14:59:29 bostic Exp $
*/
#ifndef _DB_OS_H_
@@ -14,43 +14,67 @@
extern "C" {
#endif
+/*
+ * Flags understood by __os_open.
+ */
+#define DB_OSO_CREATE 0x0001 /* POSIX: O_CREAT */
+#define DB_OSO_DIRECT 0x0002 /* Don't buffer the file in the OS. */
+#define DB_OSO_EXCL 0x0004 /* POSIX: O_EXCL */
+#define DB_OSO_LOG 0x0008 /* Opening a log file. */
+#define DB_OSO_RDONLY 0x0010 /* POSIX: O_RDONLY */
+#define DB_OSO_REGION 0x0020 /* Opening a region file. */
+#define DB_OSO_SEQ 0x0040 /* Expected sequential access. */
+#define DB_OSO_TEMP 0x0080 /* Remove after last close. */
+#define DB_OSO_TRUNC 0x0100 /* POSIX: O_TRUNC */
+
+/*
+ * Seek options understood by __os_seek.
+ */
+typedef enum {
+ DB_OS_SEEK_CUR, /* POSIX: SEEK_CUR */
+ DB_OS_SEEK_END, /* POSIX: SEEK_END */
+ DB_OS_SEEK_SET /* POSIX: SEEK_SET */
+} DB_OS_SEEK;
+
+/*
+ * We group certain seek/write calls into a single function so that we
+ * can use pread(2)/pwrite(2) where they're available.
+ */
+#define DB_IO_READ 1
+#define DB_IO_WRITE 2
+
/* DB filehandle. */
struct __fh_t {
+ /*
+ * The file-handle mutex is only used to protect the handle/fd
+ * across seek and read/write pairs, it does not protect the
+ * the reference count, or any other fields in the structure.
+ */
+ DB_MUTEX *mutexp; /* Mutex to lock. */
+
+ int ref; /* Reference count. */
+
#if defined(DB_WIN32)
HANDLE handle; /* Windows/32 file handle. */
#endif
int fd; /* POSIX file descriptor. */
- char *name; /* File name. */
- u_int32_t pagesize; /* Underlying page size. */
+ char *name; /* File name (ref DB_FH_UNLINK) */
- u_int32_t log_size; /* XXX: Log file size. */
-
- u_int32_t pgno; /* Last seek. */
+ /*
+ * Last seek statistics, used for zero-filling on filesystems
+ * that don't support it directly.
+ */
+ u_int32_t pgno;
u_int32_t pgsize;
u_int32_t offset;
#define DB_FH_NOSYNC 0x01 /* Handle doesn't need to be sync'd. */
-#define DB_FH_UNLINK 0x02 /* Unlink on close */
-#define DB_FH_VALID 0x04 /* Handle is valid. */
+#define DB_FH_OPENED 0x02 /* Handle is valid. */
+#define DB_FH_UNLINK 0x04 /* Unlink on close */
u_int8_t flags;
};
-/*
- * We group certain seek/write calls into a single function so that we
- * can use pread(2)/pwrite(2) where they're available.
- */
-#define DB_IO_READ 1
-#define DB_IO_WRITE 2
-typedef struct __io_t {
- DB_FH *fhp; /* I/O file handle. */
- DB_MUTEX *mutexp; /* Mutex to lock. */
- size_t pagesize; /* Page size. */
- db_pgno_t pgno; /* Page number. */
- u_int8_t *buf; /* Buffer. */
- size_t bytes; /* Bytes read/written. */
-} DB_IO;
-
#if defined(__cplusplus)
}
#endif
diff --git a/db/dbinc/qam.h b/db/dbinc/qam.h
index bbd1cf971..98a64cc24 100644
--- a/db/dbinc/qam.h
+++ b/db/dbinc/qam.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * Id: qam.h,v 11.38 2002/08/06 06:11:21 bostic Exp
+ * $Id: qam.h,v 11.44 2003/10/01 20:03:41 ubell Exp $
*/
#ifndef _DB_QAM_H_
@@ -70,6 +70,7 @@ struct __queue {
/* Format for queue extent names. */
#define QUEUE_EXTENT "%s%c__dbq.%s.%d"
+#define QUEUE_EXTENT_HEAD "__dbq.%s."
typedef struct __qam_filelist {
DB_MPOOLFILE *mpf;
@@ -93,8 +94,8 @@ typedef struct __qam_filelist {
*/
#define CALC_QAM_RECNO_PER_PAGE(dbp) \
(((dbp)->pgsize - QPAGE_SZ(dbp)) / \
- ALIGN(((QUEUE *)(dbp)->q_internal)->re_len + \
- sizeof(QAMDATA) - SSZA(QAMDATA, data), sizeof(u_int32_t)))
+ ALIGN((db_align_t)SSZA(QAMDATA, data) + \
+ ((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)))
#define QAM_RECNO_PER_PAGE(dbp) (((QUEUE*)(dbp)->q_internal)->rec_page)
@@ -102,22 +103,32 @@ typedef struct __qam_filelist {
(((QUEUE *)(dbp)->q_internal)->q_root \
+ (((recno) - 1) / QAM_RECNO_PER_PAGE(dbp)))
+#define QAM_PAGE_EXTENT(dbp, pgno) \
+ (((pgno) - 1) / ((QUEUE *)(dbp)->q_internal)->page_ext)
+
+#define QAM_RECNO_EXTENT(dbp, recno) \
+ QAM_PAGE_EXTENT(dbp, QAM_RECNO_PAGE(dbp, recno))
+
#define QAM_RECNO_INDEX(dbp, pgno, recno) \
(((recno) - 1) - (QAM_RECNO_PER_PAGE(dbp) \
* (pgno - ((QUEUE *)(dbp)->q_internal)->q_root)))
#define QAM_GET_RECORD(dbp, page, index) \
- ((QAMDATA *)((u_int8_t *)(page) + \
- QPAGE_SZ(dbp) + (ALIGN(sizeof(QAMDATA) - SSZA(QAMDATA, data) + \
- ((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)) * index)))
+ ((QAMDATA *)((u_int8_t *)(page) + (QPAGE_SZ(dbp) + \
+ (ALIGN((db_align_t)SSZA(QAMDATA, data) + \
+ ((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)) * index))))
#define QAM_AFTER_CURRENT(meta, recno) \
((recno) > (meta)->cur_recno && \
- ((meta)->first_recno <= (meta)->cur_recno || (recno) < (meta)->first_recno))
+ ((meta)->first_recno <= (meta)->cur_recno || \
+ ((recno) < (meta)->first_recno && \
+ (recno) - (meta)->cur_recno < (meta)->first_recno - (recno))))
#define QAM_BEFORE_FIRST(meta, recno) \
((recno) < (meta)->first_recno && \
- ((meta->first_recno <= (meta)->cur_recno || (recno) > (meta)->cur_recno)))
+ ((meta->first_recno <= (meta)->cur_recno || \
+ ((recno) > (meta)->cur_recno && \
+ (recno) - (meta)->cur_recno > (meta)->first_recno - (recno)))))
#define QAM_NOT_VALID(meta, recno) \
(recno == RECNO_OOB || \
@@ -145,6 +156,15 @@ typedef enum {
QAM_PROBE_MPF
} qam_probe_mode;
+/*
+ * Ops for __qam_nameop.
+ */
+typedef enum {
+ QAM_NAME_DISCARD,
+ QAM_NAME_RENAME,
+ QAM_NAME_REMOVE
+} qam_name_op;
+
#define __qam_fget(dbp, pgnoaddr, flags, addrp) \
__qam_fprobe(dbp, *pgnoaddr, addrp, QAM_PROBE_GET, flags)
diff --git a/db/dbinc/queue.h b/db/dbinc/queue.h
index 8d4a771ad..bf09b12d7 100644
--- a/db/dbinc/queue.h
+++ b/db/dbinc/queue.h
@@ -1,3 +1,4 @@
+
/*
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -10,7 +11,11 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -27,52 +32,40 @@
* SUCH DAMAGE.
*
* @(#)queue.h 8.5 (Berkeley) 8/20/94
+ * $FreeBSD: src/sys/sys/queue.h,v 1.54 2002/08/05 05:18:43 alfred Exp $
*/
-/*
- * XXX
- * We #undef the queue macros because there are incompatible versions of this
- * file and these macros on various systems. What makes the problem worse is
- * they are included and/or defined by system include files which we may have
- * already loaded into Berkeley DB before getting here. For example, FreeBSD's
- * <rpc/rpc.h> includes its system <sys/queue.h>, and VxWorks UnixLib.h defines
- * several of the LIST_XXX macros. Make sure we use ours.
- */
-#undef LIST_HEAD
-#undef LIST_ENTRY
-#undef LIST_FIRST
-#undef LIST_NEXT
-#undef LIST_INIT
-#undef LIST_INSERT_AFTER
-#undef LIST_INSERT_BEFORE
-#undef LIST_INSERT_HEAD
-#undef LIST_REMOVE
-#undef TAILQ_HEAD
-#undef TAILQ_ENTRY
-#undef TAILQ_FIRST
-#undef TAILQ_NEXT
-#undef TAILQ_INIT
-#undef TAILQ_INSERT_HEAD
-#undef TAILQ_INSERT_TAIL
-#undef TAILQ_INSERT_AFTER
-#undef TAILQ_INSERT_BEFORE
-#undef TAILQ_REMOVE
-#undef CIRCLEQ_HEAD
-#undef CIRCLEQ_ENTRY
-#undef CIRCLEQ_FIRST
-#undef CIRCLEQ_LAST
-#undef CIRCLEQ_NEXT
-#undef CIRCLEQ_PREV
-#undef CIRCLEQ_INIT
-#undef CIRCLEQ_INSERT_AFTER
-#undef CIRCLEQ_INSERT_BEFORE
-#undef CIRCLEQ_INSERT_HEAD
-#undef CIRCLEQ_INSERT_TAIL
-#undef CIRCLEQ_REMOVE
+#ifndef _DB_QUEUE_H_
+#define _DB_QUEUE_H_
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
/*
- * This file defines three types of data structures: lists, tail queues,
- * and circular queues.
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction. Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
*
* A list is headed by a single forward pointer (or an array of forward
* pointers for a hash table header). The elements are doubly linked
@@ -86,234 +79,486 @@
* linked so that an arbitrary element can be removed without a need to
* traverse the list. New elements can be added to the list before or
* after an existing element, at the head of the list, or at the end of
- * the list. A tail queue may only be traversed in the forward direction.
- *
- * A circle queue is headed by a pair of pointers, one to the head of the
- * list and the other to the tail of the list. The elements are doubly
- * linked so that an arbitrary element can be removed without a need to
- * traverse the list. New elements can be added to the list before or after
- * an existing element, at the head of the list, or at the end of the list.
- * A circle queue may be traversed in either direction, but has a more
- * complex end of list detection.
+ * the list. A tail queue may be traversed in either direction.
*
* For details on the use of these macros, see the queue(3) manual page.
+ *
+ *
+ * SLIST LIST STAILQ TAILQ
+ * _HEAD + + + +
+ * _HEAD_INITIALIZER + + + +
+ * _ENTRY + + + +
+ * _INIT + + + +
+ * _EMPTY + + + +
+ * _FIRST + + + +
+ * _NEXT + + + +
+ * _PREV - - - +
+ * _LAST - - + +
+ * _FOREACH + + + +
+ * _FOREACH_REVERSE - - - +
+ * _INSERT_HEAD + + + +
+ * _INSERT_BEFORE - + - +
+ * _INSERT_AFTER + + + +
+ * _INSERT_TAIL - - + +
+ * _CONCAT - - + +
+ * _REMOVE_HEAD + - + -
+ * _REMOVE + + + +
+ *
*/
-#if defined(__cplusplus)
-extern "C" {
-#endif
+/*
+ * XXX
+ * We #undef all of the macros because there are incompatible versions of this
+ * file and these macros on various systems. What makes the problem worse is
+ * they are included and/or defined by system include files which we may have
+ * already loaded into Berkeley DB before getting here. For example, FreeBSD's
+ * <rpc/rpc.h> includes its system <sys/queue.h>, and VxWorks UnixLib.h defines
+ * several of the LIST_XXX macros. Visual C.NET 7.0 also defines some of these
+ * same macros in Vc7\PlatformSDK\Include\WinNT.h. Make sure we use ours.
+ */
+#undef LIST_EMPTY
+#undef LIST_ENTRY
+#undef LIST_FIRST
+#undef LIST_FOREACH
+#undef LIST_HEAD
+#undef LIST_HEAD_INITIALIZER
+#undef LIST_INIT
+#undef LIST_INSERT_AFTER
+#undef LIST_INSERT_BEFORE
+#undef LIST_INSERT_HEAD
+#undef LIST_NEXT
+#undef LIST_REMOVE
+#undef QMD_TRACE_ELEM
+#undef QMD_TRACE_HEAD
+#undef QUEUE_MACRO_DEBUG
+#undef SLIST_EMPTY
+#undef SLIST_ENTRY
+#undef SLIST_FIRST
+#undef SLIST_FOREACH
+#undef SLIST_FOREACH_PREVPTR
+#undef SLIST_HEAD
+#undef SLIST_HEAD_INITIALIZER
+#undef SLIST_INIT
+#undef SLIST_INSERT_AFTER
+#undef SLIST_INSERT_HEAD
+#undef SLIST_NEXT
+#undef SLIST_REMOVE
+#undef SLIST_REMOVE_HEAD
+#undef STAILQ_CONCAT
+#undef STAILQ_EMPTY
+#undef STAILQ_ENTRY
+#undef STAILQ_FIRST
+#undef STAILQ_FOREACH
+#undef STAILQ_HEAD
+#undef STAILQ_HEAD_INITIALIZER
+#undef STAILQ_INIT
+#undef STAILQ_INSERT_AFTER
+#undef STAILQ_INSERT_HEAD
+#undef STAILQ_INSERT_TAIL
+#undef STAILQ_LAST
+#undef STAILQ_NEXT
+#undef STAILQ_REMOVE
+#undef STAILQ_REMOVE_HEAD
+#undef STAILQ_REMOVE_HEAD_UNTIL
+#undef TAILQ_CONCAT
+#undef TAILQ_EMPTY
+#undef TAILQ_ENTRY
+#undef TAILQ_FIRST
+#undef TAILQ_FOREACH
+#undef TAILQ_FOREACH_REVERSE
+#undef TAILQ_HEAD
+#undef TAILQ_HEAD_INITIALIZER
+#undef TAILQ_INIT
+#undef TAILQ_INSERT_AFTER
+#undef TAILQ_INSERT_BEFORE
+#undef TAILQ_INSERT_HEAD
+#undef TAILQ_INSERT_TAIL
+#undef TAILQ_LAST
+#undef TAILQ_NEXT
+#undef TAILQ_PREV
+#undef TAILQ_REMOVE
+#undef TRACEBUF
+#undef TRASHIT
+
+#define QUEUE_MACRO_DEBUG 0
+#if QUEUE_MACRO_DEBUG
+/* Store the last 2 places the queue element or head was altered */
+struct qm_trace {
+ char * lastfile;
+ int lastline;
+ char * prevfile;
+ int prevline;
+};
+
+#define TRACEBUF struct qm_trace trace;
+#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
+
+#define QMD_TRACE_HEAD(head) do { \
+ (head)->trace.prevline = (head)->trace.lastline; \
+ (head)->trace.prevfile = (head)->trace.lastfile; \
+ (head)->trace.lastline = __LINE__; \
+ (head)->trace.lastfile = __FILE__; \
+} while (0)
+
+#define QMD_TRACE_ELEM(elem) do { \
+ (elem)->trace.prevline = (elem)->trace.lastline; \
+ (elem)->trace.prevfile = (elem)->trace.lastfile; \
+ (elem)->trace.lastline = __LINE__; \
+ (elem)->trace.lastfile = __FILE__; \
+} while (0)
+
+#else
+#define QMD_TRACE_ELEM(elem)
+#define QMD_TRACE_HEAD(head)
+#define TRACEBUF
+#define TRASHIT(x)
+#endif /* QUEUE_MACRO_DEBUG */
+
+/*
+ * Singly-linked List declarations.
+ */
+#define SLIST_HEAD(name, type) \
+struct name { \
+ struct type *slh_first; /* first element */ \
+}
+
+#define SLIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define SLIST_ENTRY(type) \
+struct { \
+ struct type *sle_next; /* next element */ \
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
+
+#define SLIST_FIRST(head) ((head)->slh_first)
+
+#define SLIST_FOREACH(var, head, field) \
+ for ((var) = SLIST_FIRST((head)); \
+ (var); \
+ (var) = SLIST_NEXT((var), field))
+
+#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
+ for ((varp) = &SLIST_FIRST((head)); \
+ ((var) = *(varp)) != NULL; \
+ (varp) = &SLIST_NEXT((var), field))
+
+#define SLIST_INIT(head) do { \
+ SLIST_FIRST((head)) = NULL; \
+} while (0)
+
+#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
+ SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
+ SLIST_NEXT((slistelm), field) = (elm); \
+} while (0)
+
+#define SLIST_INSERT_HEAD(head, elm, field) do { \
+ SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
+ SLIST_FIRST((head)) = (elm); \
+} while (0)
+
+#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
+
+#define SLIST_REMOVE(head, elm, type, field) do { \
+ if (SLIST_FIRST((head)) == (elm)) { \
+ SLIST_REMOVE_HEAD((head), field); \
+ } \
+ else { \
+ struct type *curelm = SLIST_FIRST((head)); \
+ while (SLIST_NEXT(curelm, field) != (elm)) \
+ curelm = SLIST_NEXT(curelm, field); \
+ SLIST_NEXT(curelm, field) = \
+ SLIST_NEXT(SLIST_NEXT(curelm, field), field); \
+ } \
+} while (0)
+
+#define SLIST_REMOVE_HEAD(head, field) do { \
+ SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define STAILQ_HEAD(name, type) \
+struct name { \
+ struct type *stqh_first;/* first element */ \
+ struct type **stqh_last;/* addr of last next element */ \
+}
+
+#define STAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).stqh_first }
+
+#define STAILQ_ENTRY(type) \
+struct { \
+ struct type *stqe_next; /* next element */ \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+ (head1)->stqh_last = (head2)->stqh_last; \
+ STAILQ_INIT((head2)); \
+ } \
+} while (0)
+
+#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
+
+#define STAILQ_FIRST(head) ((head)->stqh_first)
+
+#define STAILQ_FOREACH(var, head, field) \
+ for ((var) = STAILQ_FIRST((head)); \
+ (var); \
+ (var) = STAILQ_NEXT((var), field))
+
+#define STAILQ_INIT(head) do { \
+ STAILQ_FIRST((head)) = NULL; \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_NEXT((tqelm), field) = (elm); \
+} while (0)
+
+#define STAILQ_INSERT_HEAD(head, elm, field) do { \
+ if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+ STAILQ_FIRST((head)) = (elm); \
+} while (0)
+
+#define STAILQ_INSERT_TAIL(head, elm, field) do { \
+ STAILQ_NEXT((elm), field) = NULL; \
+ *(head)->stqh_last = (elm); \
+ (head)->stqh_last = &STAILQ_NEXT((elm), field); \
+} while (0)
+
+#define STAILQ_LAST(head, type, field) \
+ (STAILQ_EMPTY((head)) ? \
+ NULL : \
+ ((struct type *) \
+ ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
+
+#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define STAILQ_REMOVE(head, elm, type, field) do { \
+ if (STAILQ_FIRST((head)) == (elm)) { \
+ STAILQ_REMOVE_HEAD((head), field); \
+ } \
+ else { \
+ struct type *curelm = STAILQ_FIRST((head)); \
+ while (STAILQ_NEXT(curelm, field) != (elm)) \
+ curelm = STAILQ_NEXT(curelm, field); \
+ if ((STAILQ_NEXT(curelm, field) = \
+ STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\
+ (head)->stqh_last = &STAILQ_NEXT((curelm), field);\
+ } \
+} while (0)
+
+#define STAILQ_REMOVE_HEAD(head, field) do { \
+ if ((STAILQ_FIRST((head)) = \
+ STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
+
+#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field) do { \
+ if ((STAILQ_FIRST((head)) = STAILQ_NEXT((elm), field)) == NULL) \
+ (head)->stqh_last = &STAILQ_FIRST((head)); \
+} while (0)
/*
- * List definitions.
+ * List declarations.
*/
#define LIST_HEAD(name, type) \
struct name { \
struct type *lh_first; /* first element */ \
}
+#define LIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
#define LIST_ENTRY(type) \
struct { \
struct type *le_next; /* next element */ \
struct type **le_prev; /* address of previous next element */ \
}
-#define LIST_FIRST(head) ((head)->lh_first)
-#define LIST_NEXT(elm, field) ((elm)->field.le_next)
-
/*
* List functions.
*/
-#define LIST_INIT(head) { \
- (head)->lh_first = NULL; \
-}
+
+#define LIST_EMPTY(head) ((head)->lh_first == NULL)
+
+#define LIST_FIRST(head) ((head)->lh_first)
+
+#define LIST_FOREACH(var, head, field) \
+ for ((var) = LIST_FIRST((head)); \
+ (var); \
+ (var) = LIST_NEXT((var), field))
+
+#define LIST_INIT(head) do { \
+ LIST_FIRST((head)) = NULL; \
+} while (0)
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
- if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
- (listelm)->field.le_next->field.le_prev = \
- &(elm)->field.le_next; \
- (listelm)->field.le_next = (elm); \
- (elm)->field.le_prev = &(listelm)->field.le_next; \
+ if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
+ LIST_NEXT((listelm), field)->field.le_prev = \
+ &LIST_NEXT((elm), field); \
+ LIST_NEXT((listelm), field) = (elm); \
+ (elm)->field.le_prev = &LIST_NEXT((listelm), field); \
} while (0)
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
(elm)->field.le_prev = (listelm)->field.le_prev; \
- (elm)->field.le_next = (listelm); \
+ LIST_NEXT((elm), field) = (listelm); \
*(listelm)->field.le_prev = (elm); \
- (listelm)->field.le_prev = &(elm)->field.le_next; \
+ (listelm)->field.le_prev = &LIST_NEXT((elm), field); \
} while (0)
#define LIST_INSERT_HEAD(head, elm, field) do { \
- if (((elm)->field.le_next = (head)->lh_first) != NULL) \
- (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
- (head)->lh_first = (elm); \
- (elm)->field.le_prev = &(head)->lh_first; \
+ if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
+ LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
+ LIST_FIRST((head)) = (elm); \
+ (elm)->field.le_prev = &LIST_FIRST((head)); \
} while (0)
+#define LIST_NEXT(elm, field) ((elm)->field.le_next)
+
#define LIST_REMOVE(elm, field) do { \
- if ((elm)->field.le_next != NULL) \
- (elm)->field.le_next->field.le_prev = \
+ if (LIST_NEXT((elm), field) != NULL) \
+ LIST_NEXT((elm), field)->field.le_prev = \
(elm)->field.le_prev; \
- *(elm)->field.le_prev = (elm)->field.le_next; \
+ *(elm)->field.le_prev = LIST_NEXT((elm), field); \
} while (0)
/*
- * Tail queue definitions.
+ * Tail queue declarations.
*/
#define TAILQ_HEAD(name, type) \
struct name { \
struct type *tqh_first; /* first element */ \
struct type **tqh_last; /* addr of last next element */ \
+ TRACEBUF \
}
+#define TAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).tqh_first }
+
#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
+ TRACEBUF \
}
-#define TAILQ_FIRST(head) ((head)->tqh_first)
-#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
-
/*
* Tail queue functions.
*/
-#define TAILQ_INIT(head) do { \
- (head)->tqh_first = NULL; \
- (head)->tqh_last = &(head)->tqh_first; \
+#define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
+ (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+ (head1)->tqh_last = (head2)->tqh_last; \
+ TAILQ_INIT((head2)); \
+ QMD_TRACE_HEAD(head); \
+ QMD_TRACE_HEAD(head2); \
+ } \
} while (0)
-#define TAILQ_INSERT_HEAD(head, elm, field) do { \
- if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
- (head)->tqh_first->field.tqe_prev = \
- &(elm)->field.tqe_next; \
- else \
- (head)->tqh_last = &(elm)->field.tqe_next; \
- (head)->tqh_first = (elm); \
- (elm)->field.tqe_prev = &(head)->tqh_first; \
-} while (0)
+#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL)
-#define TAILQ_INSERT_TAIL(head, elm, field) do { \
- (elm)->field.tqe_next = NULL; \
- (elm)->field.tqe_prev = (head)->tqh_last; \
- *(head)->tqh_last = (elm); \
- (head)->tqh_last = &(elm)->field.tqe_next; \
+#define TAILQ_FIRST(head) ((head)->tqh_first)
+
+#define TAILQ_FOREACH(var, head, field) \
+ for ((var) = TAILQ_FIRST((head)); \
+ (var); \
+ (var) = TAILQ_NEXT((var), field))
+
+#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for ((var) = TAILQ_LAST((head), headname); \
+ (var); \
+ (var) = TAILQ_PREV((var), headname, field))
+
+#define TAILQ_INIT(head) do { \
+ TAILQ_FIRST((head)) = NULL; \
+ (head)->tqh_last = &TAILQ_FIRST((head)); \
+ QMD_TRACE_HEAD(head); \
} while (0)
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
- if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
- (elm)->field.tqe_next->field.tqe_prev = \
- &(elm)->field.tqe_next; \
- else \
- (head)->tqh_last = &(elm)->field.tqe_next; \
- (listelm)->field.tqe_next = (elm); \
- (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
+ if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+ TAILQ_NEXT((elm), field)->field.tqe_prev = \
+ &TAILQ_NEXT((elm), field); \
+ else { \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_HEAD(head); \
+ } \
+ TAILQ_NEXT((listelm), field) = (elm); \
+ (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+ QMD_TRACE_ELEM(&listelm->field); \
} while (0)
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
- (elm)->field.tqe_next = (listelm); \
+ TAILQ_NEXT((elm), field) = (listelm); \
*(listelm)->field.tqe_prev = (elm); \
- (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
+ (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_ELEM(&(elm)->field); \
+ QMD_TRACE_ELEM(&listelm->field); \
} while (0)
-#define TAILQ_REMOVE(head, elm, field) do { \
- if (((elm)->field.tqe_next) != NULL) \
- (elm)->field.tqe_next->field.tqe_prev = \
- (elm)->field.tqe_prev; \
+#define TAILQ_INSERT_HEAD(head, elm, field) do { \
+ if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
+ TAILQ_FIRST((head))->field.tqe_prev = \
+ &TAILQ_NEXT((elm), field); \
else \
- (head)->tqh_last = (elm)->field.tqe_prev; \
- *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
-} while (0)
-
-/*
- * This macro is used to fixup the queue after moving the head.
- */
-#define TAILQ_REINSERT_HEAD(head, elm, field) do { \
- DB_ASSERT((head)->tqh_first == (elm)); \
- (elm)->field.tqe_prev = &(head)->tqh_first; \
-} while (0)
-
-/*
- * Circular queue definitions.
- */
-#define CIRCLEQ_HEAD(name, type) \
-struct name { \
- struct type *cqh_first; /* first element */ \
- struct type *cqh_last; /* last element */ \
-}
-
-#define CIRCLEQ_ENTRY(type) \
-struct { \
- struct type *cqe_next; /* next element */ \
- struct type *cqe_prev; /* previous element */ \
-}
-
-#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
-#define CIRCLEQ_LAST(head) ((head)->cqh_last)
-#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
-#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
-
-/*
- * Circular queue functions.
- */
-#define CIRCLEQ_INIT(head) do { \
- (head)->cqh_first = (void *)(head); \
- (head)->cqh_last = (void *)(head); \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ TAILQ_FIRST((head)) = (elm); \
+ (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
+ QMD_TRACE_HEAD(head); \
+ QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
-#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
- (elm)->field.cqe_next = (listelm)->field.cqe_next; \
- (elm)->field.cqe_prev = (listelm); \
- if ((listelm)->field.cqe_next == (void *)(head)) \
- (head)->cqh_last = (elm); \
- else \
- (listelm)->field.cqe_next->field.cqe_prev = (elm); \
- (listelm)->field.cqe_next = (elm); \
+#define TAILQ_INSERT_TAIL(head, elm, field) do { \
+ TAILQ_NEXT((elm), field) = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &TAILQ_NEXT((elm), field); \
+ QMD_TRACE_HEAD(head); \
+ QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
-#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
- (elm)->field.cqe_next = (listelm); \
- (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \
- if ((listelm)->field.cqe_prev == (void *)(head)) \
- (head)->cqh_first = (elm); \
- else \
- (listelm)->field.cqe_prev->field.cqe_next = (elm); \
- (listelm)->field.cqe_prev = (elm); \
-} while (0)
+#define TAILQ_LAST(head, headname) \
+ (*(((struct headname *)((head)->tqh_last))->tqh_last))
-#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
- (elm)->field.cqe_next = (head)->cqh_first; \
- (elm)->field.cqe_prev = (void *)(head); \
- if ((head)->cqh_last == (void *)(head)) \
- (head)->cqh_last = (elm); \
- else \
- (head)->cqh_first->field.cqe_prev = (elm); \
- (head)->cqh_first = (elm); \
-} while (0)
+#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
-#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
- (elm)->field.cqe_next = (void *)(head); \
- (elm)->field.cqe_prev = (head)->cqh_last; \
- if ((head)->cqh_first == (void *)(head)) \
- (head)->cqh_first = (elm); \
- else \
- (head)->cqh_last->field.cqe_next = (elm); \
- (head)->cqh_last = (elm); \
-} while (0)
+#define TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-#define CIRCLEQ_REMOVE(head, elm, field) do { \
- if ((elm)->field.cqe_next == (void *)(head)) \
- (head)->cqh_last = (elm)->field.cqe_prev; \
- else \
- (elm)->field.cqe_next->field.cqe_prev = \
- (elm)->field.cqe_prev; \
- if ((elm)->field.cqe_prev == (void *)(head)) \
- (head)->cqh_first = (elm)->field.cqe_next; \
- else \
- (elm)->field.cqe_prev->field.cqe_next = \
- (elm)->field.cqe_next; \
+#define TAILQ_REMOVE(head, elm, field) do { \
+ if ((TAILQ_NEXT((elm), field)) != NULL) \
+ TAILQ_NEXT((elm), field)->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else { \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ QMD_TRACE_HEAD(head); \
+ } \
+ *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
+ TRASHIT((elm)->field.tqe_next); \
+ TRASHIT((elm)->field.tqe_prev); \
+ QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
#if defined(__cplusplus)
}
#endif
+#endif /* !_DB_QUEUE_H_ */
diff --git a/db/dbinc/region.h b/db/dbinc/region.h
index f588cc315..f69f40ba2 100644
--- a/db/dbinc/region.h
+++ b/db/dbinc/region.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*
- * Id: region.h,v 11.33 2002/08/06 06:11:22 bostic Exp
+ * $Id: region.h,v 11.38 2003/07/14 13:44:59 bostic Exp $
*/
#ifndef _DB_REGION_H_
@@ -99,11 +99,10 @@
extern "C" {
#endif
-#define DB_REGION_FMT "__db.%03d" /* Region file name format. */
-#define DB_REGION_NAME_NUM 5 /* First digit offset in file names. */
-#define DB_REGION_NAME_LENGTH 8 /* Length of file names. */
-
-#define DB_REGION_ENV "__db.001" /* Primary environment name. */
+#define DB_REGION_PREFIX "__db" /* DB file name prefix. */
+#define DB_REGION_FMT "__db.%03d" /* Region file name format. */
+#define DB_REGION_ENV "__db.001" /* Primary environment name. */
+#define DB_REGION_NAME_LENGTH 8 /* Length of file names. */
#define INVALID_REGION_ID 0 /* Out-of-band region ID. */
#define REGION_ID_ENV 1 /* Primary environment ID. */
@@ -149,11 +148,6 @@ typedef struct __db_reg_env {
* Note, the magic and panic fields are NOT protected by any mutex,
* and for this reason cannot be anything more complicated than a
* zero/non-zero value.
- *
- * !!!
- * The valid region magic number must appear at the same byte offset
- * in both the environment and each shared region, as Windows/95 uses
- * it to determine if the memory has been zeroed since it was last used.
*/
u_int32_t magic; /* Valid region magic number. */
@@ -189,14 +183,6 @@ typedef struct __db_region {
*/
DB_MUTEX mutex; /* Region mutex. */
- /*
- * !!!
- * The valid region magic number must appear at the same byte offset
- * in both the environment and each shared region, as Windows/95 uses
- * it to determine if the memory has been zeroed since it was last used.
- */
- u_int32_t magic;
-
SH_LIST_ENTRY q; /* Linked list of REGIONs. */
reg_type type; /* Region type. */
@@ -225,7 +211,9 @@ struct __db_reginfo_t { /* __db_r_attach IN parameters. */
void *addr; /* Region allocation address. */
void *primary; /* Primary data structure address. */
- void *wnt_handle; /* Win/NT HANDLE. */
+#ifdef DB_WIN32
+ HANDLE wnt_handle; /* Win/NT HANDLE. */
+#endif
#define REGION_CREATE 0x01 /* Caller created region. */
#define REGION_CREATE_OK 0x02 /* Caller willing to create region. */
@@ -283,7 +271,9 @@ typedef struct __db_regmaint_t {
return (__db_panic_msg(dbenv));
#define PANIC_SET(dbenv, onoff) \
- ((REGENV *)((REGINFO *)(dbenv)->reginfo)->primary)->envpanic = (onoff);
+ if ((dbenv)->reginfo != NULL) \
+ ((REGENV *)((REGINFO *) \
+ (dbenv)->reginfo)->primary)->envpanic = (onoff);
/*
* All regions are created on 8K boundaries out of sheer paranoia, so we
diff --git a/db/dbinc/rep.h b/db/dbinc/rep.h
index 1e315494c..1a016ca74 100644
--- a/db/dbinc/rep.h
+++ b/db/dbinc/rep.h
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
@@ -11,41 +11,31 @@
#define REP_ALIVE 1 /* I am alive message. */
#define REP_ALIVE_REQ 2 /* Request for alive messages. */
#define REP_ALL_REQ 3 /* Request all log records greater than LSN. */
-#define REP_ELECT 4 /* Indicates that all listeners should */
- /* begin master election */
-#define REP_FILE 6 /* Page of a database file. */
-#define REP_FILE_REQ 7 /* Request for a database file. */
-#define REP_LOG 8 /* Log record. */
-#define REP_LOG_MORE 9 /* There are more log records to request. */
-#define REP_LOG_REQ 10 /* Request for a log record. */
-#define REP_MASTER_REQ 11 /* Who is the master */
-#define REP_NEWCLIENT 12 /* Announces the presence of a new client. */
-#define REP_NEWFILE 13 /* Announce a log file change. */
-#define REP_NEWMASTER 14 /* Announces who the master is. */
-#define REP_NEWSITE 15 /* Announces that a site has heard from a new
+#define REP_DUPMASTER 4 /* Duplicate master detected; propagate. */
+#define REP_FILE 5 /* Page of a database file. */
+#define REP_FILE_REQ 6 /* Request for a database file. */
+#define REP_LOG 7 /* Log record. */
+#define REP_LOG_MORE 8 /* There are more log records to request. */
+#define REP_LOG_REQ 9 /* Request for a log record. */
+#define REP_MASTER_REQ 10 /* Who is the master */
+#define REP_NEWCLIENT 11 /* Announces the presence of a new client. */
+#define REP_NEWFILE 12 /* Announce a log file change. */
+#define REP_NEWMASTER 13 /* Announces who the master is. */
+#define REP_NEWSITE 14 /* Announces that a site has heard from a new
* site; like NEWCLIENT, but indirect. A
* NEWCLIENT message comes directly from the new
* client while a NEWSITE comes indirectly from
* someone who heard about a NEWSITE.
*/
-#define REP_PAGE 16 /* Database page. */
-#define REP_PAGE_REQ 17 /* Request for a database page. */
-#define REP_PLIST 18 /* Database page list. */
-#define REP_PLIST_REQ 19 /* Request for a page list. */
-#define REP_VERIFY 20 /* A log record for verification. */
-#define REP_VERIFY_FAIL 21 /* The client is outdated. */
-#define REP_VERIFY_REQ 22 /* Request for a log record to verify. */
-#define REP_VOTE1 23 /* Send out your information for an election. */
-#define REP_VOTE2 24 /* Send a "you are master" vote. */
-
-/* Used to consistently designate which messages ought to be received where. */
-#define MASTER_ONLY(dbenv) \
- if (!F_ISSET(dbenv, DB_ENV_REP_MASTER)) return (EINVAL)
-
-#define CLIENT_ONLY(dbenv) \
- if (!F_ISSET(dbenv, DB_ENV_REP_CLIENT)) return (EINVAL)
-
-#define ANYSITE(dbenv)
+#define REP_PAGE 15 /* Database page. */
+#define REP_PAGE_REQ 16 /* Request for a database page. */
+#define REP_PLIST 17 /* Database page list. */
+#define REP_PLIST_REQ 18 /* Request for a page list. */
+#define REP_VERIFY 19 /* A log record for verification. */
+#define REP_VERIFY_FAIL 20 /* The client is outdated. */
+#define REP_VERIFY_REQ 21 /* Request for a log record to verify. */
+#define REP_VOTE1 22 /* Send out your information for an election. */
+#define REP_VOTE2 23 /* Send a "you are master" vote. */
/* Shared replication structure. */
@@ -59,9 +49,12 @@ typedef struct __rep {
DB_MUTEX mutex; /* Region lock. */
roff_t db_mutex_off; /* Client database mutex. */
u_int32_t tally_off; /* Offset of the tally region. */
+ u_int32_t v2tally_off; /* Offset of the vote2 tally region. */
int eid; /* Environment id. */
int master_id; /* ID of the master site. */
- u_int32_t gen; /* Replication generation number */
+ u_int32_t egen; /* Replication election generation. */
+ u_int32_t gen; /* Replication generation number. */
+ u_int32_t recover_gen; /* Last generation number in log. */
int asites; /* Space allocated for sites. */
int nsites; /* Number of sites in group. */
int priority; /* My priority in an election. */
@@ -73,6 +66,13 @@ typedef struct __rep {
* request a missing log record. */
u_int32_t max_gap; /* Maximum number of records before
* requesting a missing log record. */
+ /* Status change information */
+ u_int32_t msg_th; /* Number of callers in rep_proc_msg. */
+ int start_th; /* A thread is in rep_start. */
+ u_int32_t handle_cnt; /* Count of handles in library. */
+ u_int32_t op_cnt; /* Multi-step operation count.*/
+ int in_recovery; /* Running recovery now. */
+ time_t timestamp; /* Recovery timestamp. */
/* Vote tallying information. */
int sites; /* Sites heard from. */
@@ -86,32 +86,79 @@ typedef struct __rep {
/* Statistics. */
DB_REP_STAT stat;
-#define REP_F_EPHASE1 0x01 /* In phase 1 of election. */
-#define REP_F_EPHASE2 0x02 /* In phase 2 of election. */
-#define REP_F_LOGSONLY 0x04 /* Log-site only; cannot be upgraded. */
-#define REP_F_MASTER 0x08 /* Master replica. */
-#define REP_F_RECOVER 0x10
-#define REP_F_UPGRADE 0x20 /* Upgradeable replica. */
+#define REP_F_EPHASE1 0x001 /* In phase 1 of election. */
+#define REP_F_EPHASE2 0x002 /* In phase 2 of election. */
+#define REP_F_LOGSONLY 0x004 /* Log only; can't upgrade. */
+#define REP_F_MASTER 0x008 /* Master replica. */
+#define REP_F_MASTERELECT 0x010 /* Master elect */
+#define REP_F_NOARCHIVE 0x020 /* Rep blocks log_archive */
+#define REP_F_READY 0x040 /* Wait for txn_cnt to be 0. */
+#define REP_F_RECOVER 0x080 /* In recovery. */
+#define REP_F_TALLY 0x100 /* Tallied vote before elect. */
+#define REP_F_UPGRADE 0x200 /* Upgradeable replica. */
#define REP_ISCLIENT (REP_F_UPGRADE | REP_F_LOGSONLY)
u_int32_t flags;
} REP;
#define IN_ELECTION(R) F_ISSET((R), REP_F_EPHASE1 | REP_F_EPHASE2)
-#define ELECTION_DONE(R) F_CLR((R), REP_F_EPHASE1 | REP_F_EPHASE2)
+#define IN_ELECTION_TALLY(R) \
+ F_ISSET((R), REP_F_EPHASE1 | REP_F_EPHASE2 | REP_F_TALLY)
+#define IS_REP_MASTER(dbenv) \
+ (REP_ON(dbenv) && ((DB_REP *)(dbenv)->rep_handle)->region && \
+ F_ISSET(((REP *)((DB_REP *)(dbenv)->rep_handle)->region), \
+ REP_F_MASTER))
+
+#define IS_REP_CLIENT(dbenv) \
+ (REP_ON(dbenv) && ((DB_REP *)(dbenv)->rep_handle)->region && \
+ F_ISSET(((REP *)((DB_REP *)(dbenv)->rep_handle)->region), \
+ REP_ISCLIENT))
+
+#define IS_REP_LOGSONLY(dbenv) \
+ (REP_ON(dbenv) && ((DB_REP *)(dbenv)->rep_handle)->region && \
+ F_ISSET(((REP *)((DB_REP *)(dbenv)->rep_handle)->region), \
+ REP_F_LOGSONLY))
+
+/*
+ * Macros to figure out if we need to do replication pre/post-amble
+ * processing.
+ */
+#define IS_REPLICATED(E, D) \
+ (!F_ISSET((D), DB_AM_RECOVER | DB_AM_REPLICATION) && \
+ REP_ON(E) && ((DB_REP *)((E)->rep_handle))->region != NULL && \
+ ((DB_REP *)((E)->rep_handle))->region->flags != 0)
+
+#define IS_ENV_REPLICATED(E) (!IS_RECOVERING(E) && REP_ON(E) && \
+ ((DB_REP *)((E)->rep_handle))->region != NULL && \
+ ((DB_REP *)((E)->rep_handle))->region->flags != 0)
/*
* Per-process replication structure.
+ *
+ * There are 2 mutexes used in replication.
+ * 1. rep_mutexp - This protects the fields of the rep region above.
+ * 2. db_mutexp - This protects the bookkeeping database and all
+ * of the components that maintain it. Those components include
+ * the following fields in the log region (see log.h):
+ * a. ready_lsn
+ * b. waiting_lsn
+ * c. verify_lsn
+ * d. wait_recs
+ * e. rcvd_recs
+ * f. max_wait_lsn
+ * These fields in the log region are NOT protected by the log
+ * region lock at all.
+ *
+ * The lock ordering protocol is that db_mutexp must be acquired
+ * first and then either rep_mutexp, or the log region mutex may
+ * be acquired if necessary.
*/
struct __db_rep {
- DB_MUTEX *mutexp;
+ DB_MUTEX *rep_mutexp; /* Mutex for rep region */
DB_MUTEX *db_mutexp; /* Mutex for bookkeeping database. */
DB *rep_db; /* Bookkeeping database. */
REP *region; /* In memory structure. */
- int (*rep_send) /* Send function. */
- __P((DB_ENV *,
- const DBT *, const DBT *, int, u_int32_t));
};
/*
@@ -135,12 +182,18 @@ typedef struct __rep_control {
/* Election vote information. */
typedef struct __rep_vote {
- int priority; /* My site's priority. */
- int nsites; /* Number of sites I've been in
+ u_int32_t egen; /* Election generation. */
+ int nsites; /* Number of sites I've been in
* communication with. */
- int tiebreaker; /* Tie-breaking quasi-random int. */
+ int priority; /* My site's priority. */
+ int tiebreaker; /* Tie-breaking quasi-random int. */
} REP_VOTE_INFO;
+typedef struct __rep_vtally {
+ u_int32_t egen; /* Voter's election generation. */
+ int eid; /* Voter's ID. */
+} REP_VTALLY;
+
/*
* This structure takes care of representing a transaction.
* It holds all the records, sorted by page number so that
@@ -149,7 +202,7 @@ typedef struct __rep_vote {
*/
typedef struct __lsn_page {
DB_LSN lsn;
- u_int32_t fid;
+ int32_t fid;
DB_LOCK_ILOCK pgdesc;
#define LSN_PAGE_NOLOCK 0x0001 /* No lock necessary for log rec. */
u_int32_t flags;
diff --git a/db/dbinc/shqueue.h b/db/dbinc/shqueue.h
index e0b81d537..20a5234c7 100644
--- a/db/dbinc/shqueue.h
+++ b/db/dbinc/shqueue.h
@@ -1,18 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: shqueue.h,v 11.9 2002/01/11 15:52:30 bostic Exp
+ * $Id: shqueue.h,v 11.13 2003/04/24 15:41:02 bostic Exp $
*/
#ifndef _SYS_SHQUEUE_H_
#define _SYS_SHQUEUE_H_
/*
- * This file defines three types of data structures: lists, tail queues, and
- * circular queues, similarly to the include file <sys/queue.h>.
+ * This file defines two types of data structures: lists and tail queues
+ * similarly to the include file <sys/queue.h>.
*
* The difference is that this set of macros can be used for structures that
* reside in shared memory that may be mapped at different addresses in each
@@ -20,6 +20,14 @@
* the normal macros, although the macro calls require an additional type
* parameter, only used by the HEAD and ENTRY macros of the standard macros.
*
+ * Since we use relative offsets of type ssize_t rather than pointers, 0
+ * (aka NULL) is a valid offset and cannot be used to indicate the end
+ * of a list. Therefore, we use -1 to indicate end of list.
+ *
+ * The macros ending in "P" return pointers without checking for end or
+ * beginning of lists, the others check for end of list and evaluate to
+ * either a pointer or NULL.
+ *
* For details on the use of these macros, see the queue(3) manual page.
*/
@@ -28,32 +36,34 @@ extern "C" {
#endif
/*
- * Shared list definitions.
+ * Shared memory list definitions.
*/
#define SH_LIST_HEAD(name) \
struct name { \
ssize_t slh_first; /* first element */ \
}
+#define SH_LIST_HEAD_INITIALIZER(head) \
+ { -1 }
+
#define SH_LIST_ENTRY \
struct { \
- ssize_t sle_next; /* relative offset next element */ \
+ ssize_t sle_next; /* relative offset to next element */ \
ssize_t sle_prev; /* relative offset of prev element */ \
}
/*
- * Shared list functions. Since we use relative offsets for pointers,
- * 0 is a valid offset. Therefore, we use -1 to indicate end of list.
- * The macros ending in "P" return pointers without checking for end
- * of list, the others check for end of list and evaluate to either a
- * pointer or NULL.
+ * Shared memory list functions.
*/
+#define SH_LIST_EMPTY(head) \
+ ((head)->slh_first == -1)
+
#define SH_LIST_FIRSTP(head, type) \
((struct type *)(((u_int8_t *)(head)) + (head)->slh_first))
#define SH_LIST_FIRST(head, type) \
- ((head)->slh_first == -1 ? NULL : \
+ (SH_LIST_EMPTY(head) ? NULL : \
((struct type *)(((u_int8_t *)(head)) + (head)->slh_first)))
#define SH_LIST_NEXTP(elm, field, type) \
@@ -63,22 +73,58 @@ struct { \
((elm)->field.sle_next == -1 ? NULL : \
((struct type *)(((u_int8_t *)(elm)) + (elm)->field.sle_next)))
-#define SH_LIST_PREV(elm, field) \
+ /*
+ *__SH_LIST_PREV_OFF is private API. It calculates the address of
+ * the elm->field.sle_next member of a SH_LIST structure. All offsets
+ * between elements are relative to that point in SH_LIST structures.
+ */
+#define __SH_LIST_PREV_OFF(elm, field) \
((ssize_t *)(((u_int8_t *)(elm)) + (elm)->field.sle_prev))
+#define SH_LIST_PREV(elm, field, type) \
+ (struct type *)((ssize_t)elm - (*__SH_LIST_PREV_OFF(elm, field)))
+
+#define SH_LIST_FOREACH(var, head, field, type) \
+ for ((var) = SH_LIST_FIRST((head), type); \
+ (var); \
+ (var) = SH_LIST_NEXT((var), field, type))
+
#define SH_PTR_TO_OFF(src, dest) \
((ssize_t)(((u_int8_t *)(dest)) - ((u_int8_t *)(src))))
/*
+ * Given correct A.next: B.prev = SH_LIST_NEXT_TO_PREV(A)
+ * in a list [A, B]
+ * The prev value is always the offset from an element to its preceeding
+ * element's next location, not the beginning of the structure. To get
+ * to the beginning of an element structure in memory given an element
+ * do the following:
+ * A = B - (B.prev + (&B.next - B))
* Take the element's next pointer and calculate what the corresponding
* Prev pointer should be -- basically it is the negation plus the offset
* of the next field in the structure.
*/
#define SH_LIST_NEXT_TO_PREV(elm, field) \
- (-(elm)->field.sle_next + SH_PTR_TO_OFF(elm, &(elm)->field.sle_next))
+ (((elm)->field.sle_next == -1 ? 0 : -(elm)->field.sle_next) + \
+ SH_PTR_TO_OFF(elm, &(elm)->field.sle_next))
#define SH_LIST_INIT(head) (head)->slh_first = -1
+#define SH_LIST_INSERT_BEFORE(head, listelm, elm, field, type) do { \
+ if (listelm == SH_LIST_FIRST(head, type)) { \
+ SH_LIST_INSERT_HEAD(head, elm, field, type); \
+ } else { \
+ (elm)->field.sle_next = SH_PTR_TO_OFF(elm, listelm); \
+ (elm)->field.sle_prev = SH_LIST_NEXT_TO_PREV( \
+ SH_LIST_PREV((listelm), field, type), field) + \
+ (elm)->field.sle_next; \
+ (SH_LIST_PREV(listelm, field, type))->field.sle_next = \
+ (SH_PTR_TO_OFF((SH_LIST_PREV(listelm, field, \
+ type)), elm)); \
+ (listelm)->field.sle_prev = SH_LIST_NEXT_TO_PREV(elm, field); \
+ } \
+} while (0)
+
#define SH_LIST_INSERT_AFTER(listelm, elm, field, type) do { \
if ((listelm)->field.sle_next != -1) { \
(elm)->field.sle_next = SH_PTR_TO_OFF(elm, \
@@ -93,7 +139,7 @@ struct { \
#define SH_LIST_INSERT_HEAD(head, elm, field, type) do { \
if ((head)->slh_first != -1) { \
- (elm)->field.sle_next = \
+ (elm)->field.sle_next = \
(head)->slh_first - SH_PTR_TO_OFF(head, elm); \
SH_LIST_FIRSTP(head, type)->field.sle_prev = \
SH_LIST_NEXT_TO_PREV(elm, field); \
@@ -107,13 +153,19 @@ struct { \
if ((elm)->field.sle_next != -1) { \
SH_LIST_NEXTP(elm, field, type)->field.sle_prev = \
(elm)->field.sle_prev - (elm)->field.sle_next; \
- *SH_LIST_PREV(elm, field) += (elm)->field.sle_next; \
+ *__SH_LIST_PREV_OFF(elm, field) += (elm)->field.sle_next;\
} else \
- *SH_LIST_PREV(elm, field) = -1; \
+ *__SH_LIST_PREV_OFF(elm, field) = -1; \
+} while (0)
+
+#define SH_LIST_REMOVE_HEAD(head, field, type) do { \
+ if (!SH_LIST_EMPTY(head)) { \
+ SH_LIST_REMOVE(SH_LIST_FIRSTP(head, type), field, type);\
+ } \
} while (0)
/*
- * Shared tail queue definitions.
+ * Shared memory tail queue definitions.
*/
#define SH_TAILQ_HEAD(name) \
struct name { \
@@ -121,6 +173,9 @@ struct name { \
ssize_t stqh_last; /* relative offset of last's next */ \
}
+#define SH_TAILQ_HEAD_INITIALIZER(head) \
+ { -1, 0 }
+
#define SH_TAILQ_ENTRY \
struct { \
ssize_t stqe_next; /* relative offset of next element */ \
@@ -128,28 +183,80 @@ struct { \
}
/*
- * Shared tail queue functions.
+ * Shared memory tail queue functions.
*/
+
+#define SH_TAILQ_EMPTY(head) \
+ ((head)->stqh_first == -1)
+
#define SH_TAILQ_FIRSTP(head, type) \
((struct type *)((u_int8_t *)(head) + (head)->stqh_first))
#define SH_TAILQ_FIRST(head, type) \
- ((head)->stqh_first == -1 ? NULL : SH_TAILQ_FIRSTP(head, type))
+ (SH_TAILQ_EMPTY(head) ? NULL : SH_TAILQ_FIRSTP(head, type))
#define SH_TAILQ_NEXTP(elm, field, type) \
((struct type *)((u_int8_t *)(elm) + (elm)->field.stqe_next))
#define SH_TAILQ_NEXT(elm, field, type) \
- ((elm)->field.stqe_next == -1 ? NULL : SH_TAILQ_NEXTP(elm, field, type))
-
-#define SH_TAILQ_PREVP(elm, field) \
- ((ssize_t *)((u_int8_t *)(elm) + (elm)->field.stqe_prev))
-
-#define SH_TAILQ_LAST(head) \
+ ((elm)->field.stqe_next == -1 ? NULL : \
+ ((struct type *)((u_int8_t *)(elm) + (elm)->field.stqe_next)))
+
+ /*
+ * __SH_TAILQ_PREV_OFF is private API. It calculates the address of
+ * the elm->field.stqe_next member of a SH_TAILQ structure. All
+ * offsets between elements are relative to that point in SH_TAILQ
+ * structures.
+ */
+#define __SH_TAILQ_PREV_OFF(elm, field) \
+ ((ssize_t *)(((u_int8_t *)(elm)) + (elm)->field.stqe_prev))
+
+#define SH_TAILQ_PREVP(elm, field, type) \
+ (struct type *)((ssize_t)elm - (*__SH_TAILQ_PREV_OFF(elm, field)))
+
+#define SH_TAILQ_PREV(head, elm, field, type) \
+ (((elm) == SH_TAILQ_FIRST(head, type)) ? NULL : \
+ (struct type *)((ssize_t)elm - (*__SH_TAILQ_PREV_OFF(elm, field))))
+
+ /*
+ * __SH_TAILQ_LAST_OFF is private API. It calculates the address of
+ * the stqe_next member of a SH_TAILQ structure in the last element
+ * of this list. All offsets between elements are relative to that
+ * point in SH_TAILQ structures.
+ */
+#define __SH_TAILQ_LAST_OFF(head) \
((ssize_t *)(((u_int8_t *)(head)) + (head)->stqh_last))
+#define SH_TAILQ_LAST(head, field, type) \
+ (SH_TAILQ_EMPTY(head) ? NULL : \
+ (struct type *)((ssize_t)(head) + \
+ ((ssize_t)((head)->stqh_last) - \
+ ((ssize_t)SH_PTR_TO_OFF(SH_TAILQ_FIRST(head, type), \
+ &(SH_TAILQ_FIRST(head, type)->field.stqe_next))))))
+
+/*
+ * Given correct A.next: B.prev = SH_TAILQ_NEXT_TO_PREV(A)
+ * in a list [A, B]
+ * The prev value is always the offset from an element to its preceeding
+ * element's next location, not the beginning of the structure. To get
+ * to the beginning of an element structure in memory given an element
+ * do the following:
+ * A = B - (B.prev + (&B.next - B))
+ */
#define SH_TAILQ_NEXT_TO_PREV(elm, field) \
- (-(elm)->field.stqe_next + SH_PTR_TO_OFF(elm, &(elm)->field.stqe_next))
+ (((elm)->field.stqe_next == -1 ? 0 : \
+ (-(elm)->field.stqe_next) + \
+ SH_PTR_TO_OFF(elm, &(elm)->field.stqe_next)))
+
+#define SH_TAILQ_FOREACH(var, head, field, type) \
+ for ((var) = SH_TAILQ_FIRST((head), type); \
+ (var); \
+ (var) = SH_TAILQ_NEXT((var), field, type))
+
+#define SH_TAILQ_FOREACH_REVERSE(var, head, field, type) \
+ for ((var) = SH_TAILQ_LAST((head), field, type); \
+ (var); \
+ (var) = SH_TAILQ_PREV((head), (var), field, type))
#define SH_TAILQ_INIT(head) { \
(head)->stqh_first = -1; \
@@ -163,9 +270,9 @@ struct { \
SH_TAILQ_FIRSTP(head, type)->field.stqe_prev = \
SH_TAILQ_NEXT_TO_PREV(elm, field); \
} else { \
- (elm)->field.stqe_next = -1; \
(head)->stqh_last = \
SH_PTR_TO_OFF(head, &(elm)->field.stqe_next); \
+ (elm)->field.stqe_next = -1; \
} \
(head)->stqh_first = SH_PTR_TO_OFF(head, elm); \
(elm)->field.stqe_prev = \
@@ -180,13 +287,29 @@ struct { \
SH_PTR_TO_OFF((head), &(head)->stqh_first)) \
(head)->stqh_first = SH_PTR_TO_OFF(head, elm); \
else \
- *SH_TAILQ_LAST(head) = -(head)->stqh_last + \
+ *__SH_TAILQ_LAST_OFF(head) = -(head)->stqh_last + \
SH_PTR_TO_OFF((elm), &(elm)->field.stqe_next) + \
SH_PTR_TO_OFF(head, elm); \
(head)->stqh_last = \
SH_PTR_TO_OFF(head, &((elm)->field.stqe_next)); \
} while (0)
+#define SH_TAILQ_INSERT_BEFORE(head, listelm, elm, field, type) do { \
+ if (listelm == SH_TAILQ_FIRST(head, type)) { \
+ SH_TAILQ_INSERT_HEAD(head, elm, field, type); \
+ } else { \
+ (elm)->field.stqe_next = SH_PTR_TO_OFF(elm, listelm); \
+ (elm)->field.stqe_prev = SH_TAILQ_NEXT_TO_PREV( \
+ SH_TAILQ_PREVP((listelm), field, type), field) + \
+ (elm)->field.stqe_next; \
+ (SH_TAILQ_PREVP(listelm, field, type))->field.stqe_next =\
+ (SH_PTR_TO_OFF((SH_TAILQ_PREVP(listelm, field, type)), \
+ elm)); \
+ (listelm)->field.stqe_prev = \
+ SH_TAILQ_NEXT_TO_PREV(elm, field); \
+ } \
+} while (0)
+
#define SH_TAILQ_INSERT_AFTER(head, listelm, elm, field, type) do { \
if ((listelm)->field.stqe_next != -1) { \
(elm)->field.stqe_next = (listelm)->field.stqe_next - \
@@ -208,129 +331,14 @@ struct { \
(elm)->field.stqe_prev + \
SH_PTR_TO_OFF(SH_TAILQ_NEXTP(elm, \
field, type), elm); \
- *SH_TAILQ_PREVP(elm, field) += elm->field.stqe_next; \
+ *__SH_TAILQ_PREV_OFF(elm, field) += elm->field.stqe_next;\
} else { \
(head)->stqh_last = (elm)->field.stqe_prev + \
SH_PTR_TO_OFF(head, elm); \
- *SH_TAILQ_PREVP(elm, field) = -1; \
+ *__SH_TAILQ_PREV_OFF(elm, field) = -1; \
} \
} while (0)
-/*
- * Shared circular queue definitions.
- */
-#define SH_CIRCLEQ_HEAD(name) \
-struct name { \
- ssize_t scqh_first; /* first element */ \
- ssize_t scqh_last; /* last element */ \
-}
-
-#define SH_CIRCLEQ_ENTRY \
-struct { \
- ssize_t scqe_next; /* next element */ \
- ssize_t scqe_prev; /* previous element */ \
-}
-
-/*
- * Shared circular queue functions.
- */
-#define SH_CIRCLEQ_FIRSTP(head, type) \
- ((struct type *)(((u_int8_t *)(head)) + (head)->scqh_first))
-
-#define SH_CIRCLEQ_FIRST(head, type) \
- ((head)->scqh_first == -1 ? \
- (void *)head : SH_CIRCLEQ_FIRSTP(head, type))
-
-#define SH_CIRCLEQ_LASTP(head, type) \
- ((struct type *)(((u_int8_t *)(head)) + (head)->scqh_last))
-
-#define SH_CIRCLEQ_LAST(head, type) \
- ((head)->scqh_last == -1 ? (void *)head : SH_CIRCLEQ_LASTP(head, type))
-
-#define SH_CIRCLEQ_NEXTP(elm, field, type) \
- ((struct type *)(((u_int8_t *)(elm)) + (elm)->field.scqe_next))
-
-#define SH_CIRCLEQ_NEXT(head, elm, field, type) \
- ((elm)->field.scqe_next == SH_PTR_TO_OFF(elm, head) ? \
- (void *)head : SH_CIRCLEQ_NEXTP(elm, field, type))
-
-#define SH_CIRCLEQ_PREVP(elm, field, type) \
- ((struct type *)(((u_int8_t *)(elm)) + (elm)->field.scqe_prev))
-
-#define SH_CIRCLEQ_PREV(head, elm, field, type) \
- ((elm)->field.scqe_prev == SH_PTR_TO_OFF(elm, head) ? \
- (void *)head : SH_CIRCLEQ_PREVP(elm, field, type))
-
-#define SH_CIRCLEQ_INIT(head) { \
- (head)->scqh_first = 0; \
- (head)->scqh_last = 0; \
-}
-
-#define SH_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field, type) do { \
- (elm)->field.scqe_prev = SH_PTR_TO_OFF(elm, listelm); \
- (elm)->field.scqe_next = (listelm)->field.scqe_next + \
- (elm)->field.scqe_prev; \
- if (SH_CIRCLEQ_NEXTP(listelm, field, type) == (void *)head) \
- (head)->scqh_last = SH_PTR_TO_OFF(head, elm); \
- else \
- SH_CIRCLEQ_NEXTP(listelm, \
- field, type)->field.scqe_prev = \
- SH_PTR_TO_OFF(SH_CIRCLEQ_NEXTP(listelm, \
- field, type), elm); \
- (listelm)->field.scqe_next = -(elm)->field.scqe_prev; \
-} while (0)
-
-#define SH_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field, type) do { \
- (elm)->field.scqe_next = SH_PTR_TO_OFF(elm, listelm); \
- (elm)->field.scqe_prev = (elm)->field.scqe_next - \
- SH_CIRCLEQ_PREVP(listelm, field, type)->field.scqe_next;\
- if (SH_CIRCLEQ_PREVP(listelm, field, type) == (void *)(head)) \
- (head)->scqh_first = SH_PTR_TO_OFF(head, elm); \
- else \
- SH_CIRCLEQ_PREVP(listelm, \
- field, type)->field.scqe_next = \
- SH_PTR_TO_OFF(SH_CIRCLEQ_PREVP(listelm, \
- field, type), elm); \
- (listelm)->field.scqe_prev = -(elm)->field.scqe_next; \
-} while (0)
-
-#define SH_CIRCLEQ_INSERT_HEAD(head, elm, field, type) do { \
- (elm)->field.scqe_prev = SH_PTR_TO_OFF(elm, head); \
- (elm)->field.scqe_next = (head)->scqh_first + \
- (elm)->field.scqe_prev; \
- if ((head)->scqh_last == 0) \
- (head)->scqh_last = -(elm)->field.scqe_prev; \
- else \
- SH_CIRCLEQ_FIRSTP(head, type)->field.scqe_prev = \
- SH_PTR_TO_OFF(SH_CIRCLEQ_FIRSTP(head, type), elm); \
- (head)->scqh_first = -(elm)->field.scqe_prev; \
-} while (0)
-
-#define SH_CIRCLEQ_INSERT_TAIL(head, elm, field, type) do { \
- (elm)->field.scqe_next = SH_PTR_TO_OFF(elm, head); \
- (elm)->field.scqe_prev = (head)->scqh_last + \
- (elm)->field.scqe_next; \
- if ((head)->scqh_first == 0) \
- (head)->scqh_first = -(elm)->field.scqe_next; \
- else \
- SH_CIRCLEQ_LASTP(head, type)->field.scqe_next = \
- SH_PTR_TO_OFF(SH_CIRCLEQ_LASTP(head, type), elm); \
- (head)->scqh_last = -(elm)->field.scqe_next; \
-} while (0)
-
-#define SH_CIRCLEQ_REMOVE(head, elm, field, type) do { \
- if (SH_CIRCLEQ_NEXTP(elm, field, type) == (void *)(head)) \
- (head)->scqh_last += (elm)->field.scqe_prev; \
- else \
- SH_CIRCLEQ_NEXTP(elm, field, type)->field.scqe_prev += \
- (elm)->field.scqe_prev; \
- if (SH_CIRCLEQ_PREVP(elm, field, type) == (void *)(head)) \
- (head)->scqh_first += (elm)->field.scqe_next; \
- else \
- SH_CIRCLEQ_PREVP(elm, field, type)->field.scqe_next += \
- (elm)->field.scqe_next; \
-} while (0)
-
#if defined(__cplusplus)
}
#endif
diff --git a/db/dbinc/tcl_db.h b/db/dbinc/tcl_db.h
index adfa94db9..b25a7cc6b 100644
--- a/db/dbinc/tcl_db.h
+++ b/db/dbinc/tcl_db.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * Id: tcl_db.h,v 11.30 2002/08/06 06:11:22 bostic Exp
+ * $Id: tcl_db.h,v 11.31 2003/01/08 04:32:44 bostic Exp $
*/
#ifndef _DB_TCL_DB_H_
diff --git a/db/dbinc/txn.h b/db/dbinc/txn.h
index 580c3a05c..d7067407c 100644
--- a/db/dbinc/txn.h
+++ b/db/dbinc/txn.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: txn.h,v 11.42 2002/08/06 06:11:22 bostic Exp
+ * $Id: txn.h,v 11.48 2003/07/08 20:14:20 ubell Exp $
*/
#ifndef _TXN_H_
@@ -14,12 +14,14 @@
/* Operation parameters to the delayed commit processing code. */
typedef enum {
+ TXN_CLOSE, /* Close a DB handle whose close had failed. */
TXN_REMOVE, /* Remove a file. */
TXN_TRADE, /* Trade lockers. */
TXN_TRADED /* Already traded; downgrade lock. */
} TXN_EVENT_T;
struct __db_txnregion; typedef struct __db_txnregion DB_TXNREGION;
+struct __txn_logrec; typedef struct __txn_logrec DB_TXNLOGREC;
/*
* !!!
@@ -46,9 +48,8 @@ typedef struct __txn_detail {
#define TXN_PREPARED 3
#define TXN_COMMITTED 4
u_int32_t status; /* status of the transaction */
-#define TXN_COLLECTED 0x1
-#define TXN_RESTORED 0x2
-#define TXN_DEFER_DEALLOC 0x4
+#define TXN_DTL_COLLECTED 0x1
+#define TXN_DTL_RESTORED 0x2
u_int32_t flags; /* collected during txn_recover */
SH_TAILQ_ENTRY links; /* free/active list */
@@ -105,10 +106,10 @@ struct __db_txnregion {
u_int32_t maxtxns; /* maximum number of active TXNs */
u_int32_t last_txnid; /* last transaction id given out */
u_int32_t cur_maxid; /* current max unused id. */
+
DB_LSN last_ckp; /* lsn of the last checkpoint */
time_t time_ckp; /* time of last checkpoint */
- u_int32_t logtype; /* type of logging */
- u_int32_t locktype; /* lock type */
+
DB_TXN_STAT stat; /* Statistics for txns. */
#define TXN_IN_RECOVERY 0x01 /* environment is being recovered */
@@ -123,11 +124,20 @@ struct __db_txnregion {
};
/*
+ * DB_TXNLOGREC --
+ * An in-memory, linked-list copy of a log record.
+ */
+struct __txn_logrec {
+ STAILQ_ENTRY(__txn_logrec) links;/* Linked list. */
+
+ u_int8_t data[1]; /* Log record. */
+};
+
+/*
* Log record types. Note that these are *not* alphabetical. This is
* intentional so that we don't change the meaning of values between
* software upgrades. EXPECTED, UNEXPECTED, IGNORE, NOTFOUND and OK
- * are used in the
- * txnlist functions.
+ * are used in the txnlist functions.
*/
#define TXN_OK 0
#define TXN_COMMIT 1
diff --git a/db/dbinc/xa.h b/db/dbinc/xa.h
index 578e7f984..7edf49282 100644
--- a/db/dbinc/xa.h
+++ b/db/dbinc/xa.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*
- * Id: xa.h,v 11.5 2002/01/11 15:52:30 bostic Exp
+ * $Id: xa.h,v 11.6 2003/01/08 04:32:51 bostic Exp $
*/
/*
* Start of xa.h header
diff --git a/db/dbinc_auto/btree_ext.h b/db/dbinc_auto/btree_ext.h
index ec5468acf..a662b027b 100644
--- a/db/dbinc_auto/btree_ext.h
+++ b/db/dbinc_auto/btree_ext.h
@@ -33,7 +33,10 @@ int __bam_adjindx __P((DBC *, PAGE *, u_int32_t, u_int32_t, int));
int __bam_dpages __P((DBC *, EPG *));
int __bam_db_create __P((DB *));
int __bam_db_close __P((DB *));
+void __bam_map_flags __P((DB *, u_int32_t *, u_int32_t *));
int __bam_set_flags __P((DB *, u_int32_t *flagsp));
+int __bam_set_bt_compare __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+void __ram_map_flags __P((DB *, u_int32_t *, u_int32_t *));
int __ram_set_flags __P((DB *, u_int32_t *flagsp));
int __bam_open __P((DB *, DB_TXN *, const char *, db_pgno_t, u_int32_t));
int __bam_metachk __P((DB *, const char *, BTMETA *));
@@ -52,7 +55,7 @@ int __bam_root_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_curadj_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_rcuradj_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __bam_reclaim __P((DB *, DB_TXN *));
-int __bam_truncate __P((DB *, DB_TXN *, u_int32_t *));
+int __bam_truncate __P((DBC *, u_int32_t *));
int __ram_open __P((DB *, DB_TXN *, const char *, db_pgno_t, u_int32_t));
int __ram_append __P((DBC *, DBT *, DBT *));
int __ram_c_del __P((DBC *));
@@ -70,10 +73,10 @@ int __bam_stkrel __P((DBC *, u_int32_t));
int __bam_stkgrow __P((DB_ENV *, BTREE_CURSOR *));
int __bam_split __P((DBC *, void *, db_pgno_t *));
int __bam_copy __P((DB *, PAGE *, PAGE *, u_int32_t, u_int32_t));
-int __bam_stat __P((DB *, void *, u_int32_t));
+int __bam_stat __P((DBC *, void *, u_int32_t));
int __bam_traverse __P((DBC *, db_lockmode_t, db_pgno_t, int (*)(DB *, PAGE *, void *, int *), void *));
int __bam_stat_callback __P((DB *, PAGE *, void *, int *));
-int __bam_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+int __bam_key_range __P((DBC *, DBT *, DB_KEY_RANGE *, u_int32_t));
int __bam_30_btreemeta __P((DB *, char *, u_int8_t *));
int __bam_31_btreemeta __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
int __bam_31_lbtree __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
diff --git a/db/dbinc_auto/common_ext.h b/db/dbinc_auto/common_ext.h
index 7744982fe..5cf03df70 100644
--- a/db/dbinc_auto/common_ext.h
+++ b/db/dbinc_auto/common_ext.h
@@ -6,29 +6,32 @@
extern "C" {
#endif
+int __crypto_region_init __P((DB_ENV *));
int __db_isbigendian __P((void));
int __db_byteorder __P((DB_ENV *, int));
int __db_fchk __P((DB_ENV *, const char *, u_int32_t, u_int32_t));
int __db_fcchk __P((DB_ENV *, const char *, u_int32_t, u_int32_t, u_int32_t));
int __db_ferr __P((const DB_ENV *, const char *, int));
-void __db_pgerr __P((DB *, db_pgno_t, int));
+int __db_fnl __P((const DB_ENV *, const char *));
+int __db_pgerr __P((DB *, db_pgno_t, int));
int __db_pgfmt __P((DB_ENV *, db_pgno_t));
-int __db_eopnotsup __P((const DB_ENV *));
#ifdef DIAGNOSTIC
void __db_assert __P((const char *, const char *, int));
#endif
int __db_panic_msg __P((DB_ENV *));
int __db_panic __P((DB_ENV *, int));
-void __db_err __P((const DB_ENV *, const char *, ...));
+void __db_err __P((const DB_ENV *, const char *, ...)) __attribute__ ((__format__ (__printf__, 2, 3)));
void __db_errcall __P((const DB_ENV *, int, int, const char *, va_list));
void __db_errfile __P((const DB_ENV *, int, int, const char *, va_list));
-void __db_logmsg __P((const DB_ENV *, DB_TXN *, const char *, u_int32_t, const char *, ...));
+void __db_logmsg __P((const DB_ENV *, DB_TXN *, const char *, u_int32_t, const char *, ...)) __attribute__ ((__format__ (__printf__, 5, 6)));
int __db_unknown_flag __P((DB_ENV *, char *, u_int32_t));
int __db_unknown_type __P((DB_ENV *, char *, DBTYPE));
int __db_check_txn __P((DB *, DB_TXN *, u_int32_t, int));
int __db_not_txn_env __P((DB_ENV *));
-int __db_getlong __P((DB *, const char *, char *, long, long, long *));
-int __db_getulong __P((DB *, const char *, char *, u_long, u_long, u_long *));
+int __db_rec_toobig __P((DB_ENV *, u_int32_t, u_int32_t));
+int __db_rec_repl __P((DB_ENV *, u_int32_t, u_int32_t));
+int __db_getlong __P((DB_ENV *, const char *, char *, long, long, long *));
+int __db_getulong __P((DB_ENV *, const char *, char *, u_long, u_long, u_long *));
void __db_idspace __P((u_int32_t *, int, u_int32_t *, u_int32_t *));
u_int32_t __db_log2 __P((u_int32_t));
int __db_util_arg __P((char *, char *, int *, char ***));
diff --git a/db/dbinc_auto/crypto_ext.h b/db/dbinc_auto/crypto_ext.h
index da1ae8a94..dc8b5efd1 100644
--- a/db/dbinc_auto/crypto_ext.h
+++ b/db/dbinc_auto/crypto_ext.h
@@ -7,15 +7,15 @@ extern "C" {
#endif
int __aes_setup __P((DB_ENV *, DB_CIPHER *));
-int __aes_adj_size __P((size_t));
+u_int __aes_adj_size __P((size_t));
int __aes_close __P((DB_ENV *, void *));
int __aes_decrypt __P((DB_ENV *, void *, void *, u_int8_t *, size_t));
int __aes_encrypt __P((DB_ENV *, void *, void *, u_int8_t *, size_t));
int __aes_init __P((DB_ENV *, DB_CIPHER *));
-int __crypto_region_init __P((DB_ENV *));
int __crypto_dbenv_close __P((DB_ENV *));
int __crypto_algsetup __P((DB_ENV *, DB_CIPHER *, u_int32_t, int));
-int __crypto_decrypt_meta __P((DB_ENV *, DB *, u_int8_t *, size_t, int));
+int __crypto_decrypt_meta __P((DB_ENV *, DB *, u_int8_t *, int));
+int __crypto_set_passwd __P((DB_ENV *, DB_ENV *));
int __db_generate_iv __P((DB_ENV *, u_int32_t *));
int __db_rijndaelKeySetupEnc __P((u32 *, const u8 *, int));
int __db_rijndaelKeySetupDec __P((u32 *, const u8 *, int));
@@ -25,11 +25,11 @@ void __db_rijndaelEncryptRound __P((const u32 *, int, u8 *, int));
void __db_rijndaelDecryptRound __P((const u32 *, int, u8 *, int));
int __db_makeKey __P((keyInstance *, int, int, char *));
int __db_cipherInit __P((cipherInstance *, int, char *));
-int __db_blockEncrypt __P((cipherInstance *, keyInstance *, BYTE *, size_t, BYTE *));
-int __db_padEncrypt __P((cipherInstance *, keyInstance *, BYTE *, int, BYTE *));
-int __db_blockDecrypt __P((cipherInstance *, keyInstance *, BYTE *, size_t, BYTE *));
-int __db_padDecrypt __P((cipherInstance *, keyInstance *, BYTE *, int, BYTE *));
-int __db_cipherUpdateRounds __P((cipherInstance *, keyInstance *, BYTE *, int, BYTE *, int));
+int __db_blockEncrypt __P((cipherInstance *, keyInstance *, u_int8_t *, size_t, u_int8_t *));
+int __db_padEncrypt __P((cipherInstance *, keyInstance *, u_int8_t *, int, u_int8_t *));
+int __db_blockDecrypt __P((cipherInstance *, keyInstance *, u_int8_t *, size_t, u_int8_t *));
+int __db_padDecrypt __P((cipherInstance *, keyInstance *, u_int8_t *, int, u_int8_t *));
+int __db_cipherUpdateRounds __P((cipherInstance *, keyInstance *, u_int8_t *, int, u_int8_t *, int));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/db_auto.h b/db/dbinc_auto/db_auto.h
index e56f38b38..8803328d3 100644
--- a/db/dbinc_auto/db_auto.h
+++ b/db/dbinc_auto/db_auto.h
@@ -115,4 +115,40 @@ typedef struct ___db_cksum_args {
DB_LSN prev_lsn;
} __db_cksum_args;
+#define DB___db_pg_freedata 52
+typedef struct ___db_pg_freedata_args {
+ u_int32_t type;
+ DB_TXN *txnid;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN meta_lsn;
+ db_pgno_t meta_pgno;
+ DBT header;
+ db_pgno_t next;
+ DBT data;
+} __db_pg_freedata_args;
+
+#define DB___db_pg_prepare 53
+typedef struct ___db_pg_prepare_args {
+ u_int32_t type;
+ DB_TXN *txnid;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+} __db_pg_prepare_args;
+
+#define DB___db_pg_new 54
+typedef struct ___db_pg_new_args {
+ u_int32_t type;
+ DB_TXN *txnid;
+ DB_LSN prev_lsn;
+ int32_t fileid;
+ db_pgno_t pgno;
+ DB_LSN meta_lsn;
+ db_pgno_t meta_pgno;
+ DBT header;
+ db_pgno_t next;
+} __db_pg_new_args;
+
#endif
diff --git a/db/dbinc_auto/db_ext.h b/db/dbinc_auto/db_ext.h
index 39594e1d2..94781310d 100644
--- a/db/dbinc_auto/db_ext.h
+++ b/db/dbinc_auto/db_ext.h
@@ -17,25 +17,20 @@ int __crdel_metasub_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_master_open __P((DB *, DB_TXN *, const char *, u_int32_t, int, DB **));
int __db_master_update __P((DB *, DB *, DB_TXN *, const char *, DBTYPE, mu_action, const char *, u_int32_t));
int __db_dbenv_setup __P((DB *, DB_TXN *, const char *, u_int32_t, u_int32_t));
-int __db_close __P((DB *, u_int32_t));
-int __db_close_i __P((DB *, DB_TXN *, u_int32_t));
-int __db_refresh __P((DB *, DB_TXN *, u_int32_t));
+int __db_close __P((DB *, DB_TXN *, u_int32_t));
+int __db_refresh __P((DB *, DB_TXN *, u_int32_t, int *));
int __db_log_page __P((DB *, DB_TXN *, DB_LSN *, db_pgno_t, PAGE *));
-int __db_backup_name __P((DB_ENV *, const char *, DB_TXN *, char **, DB_LSN *));
+int __db_backup_name __P((DB_ENV *, const char *, DB_TXN *, char **));
DB *__dblist_get __P((DB_ENV *, u_int32_t));
#if CONFIG_TEST
int __db_testcopy __P((DB_ENV *, DB *, const char *));
#endif
-int __db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
-int __db_icursor __P((DB *, DB_TXN *, DBTYPE, db_pgno_t, int, u_int32_t, DBC **));
+int __db_cursor_int __P((DB *, DB_TXN *, DBTYPE, db_pgno_t, int, u_int32_t, DBC **));
int __db_cprint __P((DB *));
-int __db_fd __P((DB *, int *));
-int __db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
int __db_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
-int __db_delete __P((DB *, DB_TXN *, DBT *, u_int32_t));
-int __db_sync __P((DB *, u_int32_t));
+int __db_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
+int __db_sync __P((DB *));
int __db_associate __P((DB *, DB_TXN *, DB *, int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
-int __db_pget __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
int __db_addrem_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, db_pgno_t, u_int32_t, u_int32_t, const DBT *, const DBT *, DB_LSN *));
int __db_addrem_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_addrem_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -72,12 +67,24 @@ int __db_cksum_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t));
int __db_cksum_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_cksum_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_cksum_read __P((DB_ENV *, void *, __db_cksum_args **));
+int __db_pg_freedata_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *, db_pgno_t, const DBT *));
+int __db_pg_freedata_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_freedata_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_freedata_read __P((DB_ENV *, void *, __db_pg_freedata_args **));
+int __db_pg_prepare_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t));
+int __db_pg_prepare_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_prepare_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_prepare_read __P((DB_ENV *, void *, __db_pg_prepare_args **));
+int __db_pg_new_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, const DBT *, db_pgno_t));
+int __db_pg_new_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_new_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_new_read __P((DB_ENV *, void *, __db_pg_new_args **));
int __db_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __db_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __db_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __db_c_close __P((DBC *));
int __db_c_destroy __P((DBC *));
-int __db_c_count __P((DBC *, db_recno_t *, u_int32_t));
+int __db_c_count __P((DBC *, db_recno_t *));
int __db_c_del __P((DBC *, u_int32_t));
int __db_c_dup __P((DBC *, DBC **, u_int32_t));
int __db_c_idup __P((DBC *, DBC **, u_int32_t));
@@ -85,7 +92,7 @@ int __db_c_newopd __P((DBC *, db_pgno_t, DBC *, DBC **));
int __db_c_get __P((DBC *, DBT *, DBT *, u_int32_t));
int __db_c_put __P((DBC *, DBT *, DBT *, u_int32_t));
int __db_duperr __P((DB *, u_int32_t));
-int __db_c_secondary_get __P((DBC *, DBT *, DBT *, u_int32_t));
+int __db_c_secondary_get_pp __P((DBC *, DBT *, DBT *, u_int32_t));
int __db_c_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
int __db_c_del_primary __P((DBC *));
DB *__db_s_first __P((DB *));
@@ -104,43 +111,58 @@ int __db_txnlist_remove __P((DB_ENV *, void *, u_int32_t));
void __db_txnlist_ckp __P((DB_ENV *, void *, DB_LSN *));
void __db_txnlist_end __P((DB_ENV *, void *));
int __db_txnlist_find __P((DB_ENV *, void *, u_int32_t));
-int __db_txnlist_update __P((DB_ENV *, void *, u_int32_t, u_int32_t, DB_LSN *));
+int __db_txnlist_update __P((DB_ENV *, void *, u_int32_t, int32_t, DB_LSN *));
int __db_txnlist_gen __P((DB_ENV *, void *, int, u_int32_t, u_int32_t));
int __db_txnlist_lsnadd __P((DB_ENV *, void *, DB_LSN *, u_int32_t));
int __db_txnlist_lsninit __P((DB_ENV *, DB_TXNHEAD *, DB_LSN *));
int __db_add_limbo __P((DB_ENV *, void *, int32_t, db_pgno_t, int32_t));
-int __db_do_the_limbo __P((DB_ENV *, DB_TXN *, DB_TXN *, DB_TXNHEAD *));
+int __db_do_the_limbo __P((DB_ENV *, DB_TXN *, DB_TXN *, DB_TXNHEAD *, db_limbo_state));
+int __db_default_getpgnos __P((DB_ENV *, DB_LSN *lsnp, void *));
void __db_txnlist_print __P((void *));
int __db_ditem __P((DBC *, PAGE *, u_int32_t, u_int32_t));
int __db_pitem __P((DBC *, PAGE *, u_int32_t, u_int32_t, DBT *, DBT *));
int __db_relink __P((DBC *, u_int32_t, PAGE *, PAGE **, int));
-int __db_cursorchk __P((const DB *, u_int32_t));
-int __db_ccountchk __P((const DB *, u_int32_t, int));
-int __db_cdelchk __P((const DB *, u_int32_t, int));
-int __db_cgetchk __P((const DB *, DBT *, DBT *, u_int32_t, int));
-int __db_cputchk __P((const DB *, const DBT *, DBT *, u_int32_t, int));
-int __db_pgetchk __P((const DB *, const DBT *, DBT *, DBT *, u_int32_t));
-int __db_cpgetchk __P((const DB *, DBT *, DBT *, DBT *, u_int32_t, int));
-int __db_delchk __P((const DB *, DBT *, u_int32_t));
-int __db_getchk __P((const DB *, const DBT *, DBT *, u_int32_t));
-int __db_joinchk __P((const DB *, DBC * const *, u_int32_t));
-int __db_joingetchk __P((const DB *, DBT *, u_int32_t));
-int __db_putchk __P((const DB *, DBT *, const DBT *, u_int32_t, int));
-int __db_statchk __P((const DB *, u_int32_t));
-int __db_syncchk __P((const DB *, u_int32_t));
-int __db_secondary_corrupt __P((DB *));
-int __db_associatechk __P((DB *, DB *, int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
-int __db_txn_auto __P((DB *, DB_TXN **));
+int __db_associate_pp __P((DB *, DB_TXN *, DB *, int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
+int __db_close_pp __P((DB *, u_int32_t));
+int __db_cursor_pp __P((DB *, DB_TXN *, DBC **, u_int32_t));
+int __db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
+int __db_del_pp __P((DB *, DB_TXN *, DBT *, u_int32_t));
+int __db_fd_pp __P((DB *, int *));
+int __db_get_pp __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __db_join_pp __P((DB *, DBC **, DBC **, u_int32_t));
+int __db_key_range_pp __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+int __db_open_pp __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
+int __db_pget_pp __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+int __db_pget __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
+int __db_put_pp __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __db_stat_pp __P((DB *, void *, u_int32_t));
+int __db_stat __P((DB *, void *, u_int32_t));
+int __db_sync_pp __P((DB *, u_int32_t));
+int __db_c_close_pp __P((DBC *));
+int __db_c_count_pp __P((DBC *, db_recno_t *, u_int32_t));
+int __db_c_del_pp __P((DBC *, u_int32_t));
+int __db_c_del_arg __P((DBC *, u_int32_t));
+int __db_c_dup_pp __P((DBC *, DBC **, u_int32_t));
+int __db_c_get_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+int __db_c_pget_pp __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+int __db_c_put_pp __P((DBC *, DBT *, DBT *, u_int32_t));
+int __db_txn_auto_init __P((DB_ENV *, DB_TXN **));
+int __db_txn_auto_resolve __P((DB_ENV *, DB_TXN *, int, int));
int __db_join __P((DB *, DBC **, DBC **, u_int32_t));
+int __db_join_close __P((DBC *));
+int __db_secondary_corrupt __P((DB *));
int __db_new __P((DBC *, u_int32_t, PAGE **));
int __db_free __P((DBC *, PAGE *));
int __db_lprint __P((DBC *));
int __db_lget __P((DBC *, int, db_pgno_t, db_lockmode_t, u_int32_t, DB_LOCK *));
int __db_lput __P((DBC *, DB_LOCK *));
int __dbh_am_chk __P((DB *, u_int32_t));
+int __db_set_flags __P((DB *, u_int32_t));
int __db_set_lorder __P((DB *, int));
-int __db_open __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
-int __db_dbopen __P((DB *, DB_TXN *, const char *, const char *, u_int32_t, int, db_pgno_t));
+int __db_set_pagesize __P((DB *, u_int32_t));
+int __db_open __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int, db_pgno_t));
+int __db_get_open_flags __P((DB *, u_int32_t *));
int __db_new_file __P((DB *, DB_TXN *, DB_FH *, const char *));
int __db_init_subdb __P((DB *, DB *, const char *, DB_TXN *));
int __db_chk_meta __P((DB_ENV *, DB *, DBMETA *, int));
@@ -152,7 +174,7 @@ int __db_doff __P((DBC *, db_pgno_t));
int __db_moff __P((DB *, const DBT *, db_pgno_t, u_int32_t, int (*)(DB *, const DBT *, const DBT *), int *));
int __db_vrfy_overflow __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
int __db_vrfy_ovfl_structure __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t, u_int32_t));
-int __db_safe_goff __P((DB *, VRFY_DBINFO *, db_pgno_t, DBT *, void **, u_int32_t));
+int __db_safe_goff __P((DB *, VRFY_DBINFO *, db_pgno_t, DBT *, void *, u_int32_t));
void __db_loadme __P((void));
int __db_dump __P((DB *, char *, char *));
void __db_inmemdbflags __P((u_int32_t, void *, void (*)(u_int32_t, const FN *, void *)));
@@ -161,8 +183,10 @@ int __db_prpage __P((DB *, PAGE *, FILE *, u_int32_t));
void __db_pr __P((u_int8_t *, u_int32_t, FILE *));
int __db_prdbt __P((DBT *, int, const char *, void *, int (*)(void *, const void *), int, VRFY_DBINFO *));
void __db_prflags __P((u_int32_t, const FN *, void *));
+const char * __db_dbtype_to_string __P((DBTYPE));
int __db_prheader __P((DB *, char *, int, int, void *, int (*)(void *, const void *), VRFY_DBINFO *, db_pgno_t));
int __db_prfooter __P((void *, int (*)(void *, const void *)));
+int __db_pr_callback __P((void *, const void *));
int __db_addrem_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_big_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_ovref_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -171,28 +195,37 @@ int __db_debug_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_noop_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_pg_alloc_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_pg_free_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_new_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_freedata_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_cksum_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int __db_pg_prepare_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __db_traverse_big __P((DB *, db_pgno_t, int (*)(DB *, PAGE *, void *, int *), void *));
int __db_reclaim_callback __P((DB *, PAGE *, void *, int *));
int __db_truncate_callback __P((DB *, PAGE *, void *, int *));
-int __dbenv_dbremove __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int32_t));
-int __db_remove __P((DB *, const char *, const char *, u_int32_t));
-int __db_remove_i __P((DB *, DB_TXN *, const char *, const char *));
-int __dbenv_dbrename __P((DB_ENV *, DB_TXN *, const char *, const char *, const char *, u_int32_t));
-int __db_rename __P((DB *, const char *, const char *, const char *, u_int32_t));
-int __db_rename_i __P((DB *, DB_TXN *, const char *, const char *, const char *));
+int __dbenv_dbremove_pp __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int32_t));
+int __db_remove_pp __P((DB *, const char *, const char *, u_int32_t));
+int __db_remove __P((DB *, DB_TXN *, const char *, const char *, u_int32_t));
+int __db_remove_int __P((DB *, DB_TXN *, const char *, const char *, u_int32_t));
+int __dbenv_dbrename_pp __P((DB_ENV *, DB_TXN *, const char *, const char *, const char *, u_int32_t));
+int __db_rename_pp __P((DB *, const char *, const char *, const char *, u_int32_t));
+int __db_rename __P((DB *, DB_TXN *, const char *, const char *, const char *));
+int __db_rename_int __P((DB *, DB_TXN *, const char *, const char *, const char *));
int __db_ret __P((DB *, PAGE *, u_int32_t, DBT *, void **, u_int32_t *));
int __db_retcopy __P((DB_ENV *, DBT *, void *, u_int32_t, void **, u_int32_t *));
+int __db_truncate_pp __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
int __db_truncate __P((DB *, DB_TXN *, u_int32_t *, u_int32_t));
+int __db_upgrade_pp __P((DB *, const char *, u_int32_t));
int __db_upgrade __P((DB *, const char *, u_int32_t));
int __db_lastpgno __P((DB *, char *, DB_FH *, db_pgno_t *));
int __db_31_offdup __P((DB *, char *, DB_FH *, int, db_pgno_t *));
-int __db_verify __P((DB *, const char *, const char *, FILE *, u_int32_t));
-int __db_verify_callback __P((void *, const void *));
+int __db_verify_pp __P((DB *, const char *, const char *, FILE *, u_int32_t));
int __db_verify_internal __P((DB *, const char *, const char *, void *, int (*)(void *, const void *), u_int32_t));
+int __db_verify __P((DB *, const char *, const char *, void *, int (*)(void *, const void *), u_int32_t));
+int __db_vrfy_common __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
int __db_vrfy_datapage __P((DB *, VRFY_DBINFO *, PAGE *, db_pgno_t, u_int32_t));
int __db_vrfy_meta __P((DB *, VRFY_DBINFO *, DBMETA *, db_pgno_t, u_int32_t));
void __db_vrfy_struct_feedback __P((DB *, VRFY_DBINFO *));
+int __db_salvage __P((DB *, VRFY_DBINFO *, db_pgno_t, PAGE *, void *, int (*)(void *, const void *), u_int32_t));
int __db_vrfy_inpitem __P((DB *, PAGE *, db_pgno_t, u_int32_t, int, u_int32_t, u_int32_t *, u_int32_t *));
int __db_vrfy_duptype __P((DB *, VRFY_DBINFO *, db_pgno_t, u_int32_t));
int __db_salvage_duptree __P((DB *, VRFY_DBINFO *, db_pgno_t, DBT *, void *, int (*)(void *, const void *), u_int32_t));
@@ -203,7 +236,6 @@ int __db_vrfy_putpageinfo __P((DB_ENV *, VRFY_DBINFO *, VRFY_PAGEINFO *));
int __db_vrfy_pgset __P((DB_ENV *, u_int32_t, DB **));
int __db_vrfy_pgset_get __P((DB *, db_pgno_t, int *));
int __db_vrfy_pgset_inc __P((DB *, db_pgno_t));
-int __db_vrfy_pgset_dec __P((DB *, db_pgno_t));
int __db_vrfy_pgset_next __P((DBC *, db_pgno_t *));
int __db_vrfy_childcursor __P((VRFY_DBINFO *, DBC **));
int __db_vrfy_childput __P((VRFY_DBINFO *, db_pgno_t, VRFY_CHILDINFO *));
diff --git a/db/dbinc_auto/db_server.h b/db/dbinc_auto/db_server.h
index 3409eed1a..f38ffa95d 100644
--- a/db/dbinc_auto/db_server.h
+++ b/db/dbinc_auto/db_server.h
@@ -7,6 +7,19 @@
#define _DB_SERVER_H_RPCGEN
+struct __env_get_cachesize_msg {
+ u_int dbenvcl_id;
+};
+typedef struct __env_get_cachesize_msg __env_get_cachesize_msg;
+
+struct __env_get_cachesize_reply {
+ int status;
+ u_int gbytes;
+ u_int bytes;
+ u_int ncache;
+};
+typedef struct __env_get_cachesize_reply __env_get_cachesize_reply;
+
struct __env_cachesize_msg {
u_int dbenvcl_id;
u_int gbytes;
@@ -71,6 +84,17 @@ struct __env_dbrename_reply {
};
typedef struct __env_dbrename_reply __env_dbrename_reply;
+struct __env_get_encrypt_flags_msg {
+ u_int dbenvcl_id;
+};
+typedef struct __env_get_encrypt_flags_msg __env_get_encrypt_flags_msg;
+
+struct __env_get_encrypt_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __env_get_encrypt_flags_reply __env_get_encrypt_flags_reply;
+
struct __env_encrypt_msg {
u_int dbenvcl_id;
char *passwd;
@@ -83,6 +107,17 @@ struct __env_encrypt_reply {
};
typedef struct __env_encrypt_reply __env_encrypt_reply;
+struct __env_get_flags_msg {
+ u_int dbenvcl_id;
+};
+typedef struct __env_get_flags_msg __env_get_flags_msg;
+
+struct __env_get_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __env_get_flags_reply __env_get_flags_reply;
+
struct __env_flags_msg {
u_int dbenvcl_id;
u_int flags;
@@ -95,6 +130,28 @@ struct __env_flags_reply {
};
typedef struct __env_flags_reply __env_flags_reply;
+struct __env_get_home_msg {
+ u_int dbenvcl_id;
+};
+typedef struct __env_get_home_msg __env_get_home_msg;
+
+struct __env_get_home_reply {
+ int status;
+ char *home;
+};
+typedef struct __env_get_home_reply __env_get_home_reply;
+
+struct __env_get_open_flags_msg {
+ u_int dbenvcl_id;
+};
+typedef struct __env_get_open_flags_msg __env_get_open_flags_msg;
+
+struct __env_get_open_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __env_get_open_flags_reply __env_get_open_flags_reply;
+
struct __env_open_msg {
u_int dbenvcl_id;
char *home;
@@ -222,6 +279,17 @@ struct __db_bt_maxkey_reply {
};
typedef struct __db_bt_maxkey_reply __db_bt_maxkey_reply;
+struct __db_get_bt_minkey_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_bt_minkey_msg __db_get_bt_minkey_msg;
+
+struct __db_get_bt_minkey_reply {
+ int status;
+ u_int minkey;
+};
+typedef struct __db_get_bt_minkey_reply __db_get_bt_minkey_reply;
+
struct __db_bt_minkey_msg {
u_int dbpcl_id;
u_int minkey;
@@ -276,6 +344,17 @@ struct __db_del_reply {
};
typedef struct __db_del_reply __db_del_reply;
+struct __db_get_encrypt_flags_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_encrypt_flags_msg __db_get_encrypt_flags_msg;
+
+struct __db_get_encrypt_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __db_get_encrypt_flags_reply __db_get_encrypt_flags_reply;
+
struct __db_encrypt_msg {
u_int dbpcl_id;
char *passwd;
@@ -288,6 +367,17 @@ struct __db_encrypt_reply {
};
typedef struct __db_encrypt_reply __db_encrypt_reply;
+struct __db_get_extentsize_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_extentsize_msg __db_get_extentsize_msg;
+
+struct __db_get_extentsize_reply {
+ int status;
+ u_int extentsize;
+};
+typedef struct __db_get_extentsize_reply __db_get_extentsize_reply;
+
struct __db_extentsize_msg {
u_int dbpcl_id;
u_int extentsize;
@@ -299,6 +389,17 @@ struct __db_extentsize_reply {
};
typedef struct __db_extentsize_reply __db_extentsize_reply;
+struct __db_get_flags_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_flags_msg __db_get_flags_msg;
+
+struct __db_get_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __db_get_flags_reply __db_get_flags_reply;
+
struct __db_flags_msg {
u_int dbpcl_id;
u_int flags;
@@ -346,6 +447,40 @@ struct __db_get_reply {
};
typedef struct __db_get_reply __db_get_reply;
+struct __db_get_name_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_name_msg __db_get_name_msg;
+
+struct __db_get_name_reply {
+ int status;
+ char *filename;
+ char *dbname;
+};
+typedef struct __db_get_name_reply __db_get_name_reply;
+
+struct __db_get_open_flags_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_open_flags_msg __db_get_open_flags_msg;
+
+struct __db_get_open_flags_reply {
+ int status;
+ u_int flags;
+};
+typedef struct __db_get_open_flags_reply __db_get_open_flags_reply;
+
+struct __db_get_h_ffactor_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_h_ffactor_msg __db_get_h_ffactor_msg;
+
+struct __db_get_h_ffactor_reply {
+ int status;
+ u_int ffactor;
+};
+typedef struct __db_get_h_ffactor_reply __db_get_h_ffactor_reply;
+
struct __db_h_ffactor_msg {
u_int dbpcl_id;
u_int ffactor;
@@ -357,6 +492,17 @@ struct __db_h_ffactor_reply {
};
typedef struct __db_h_ffactor_reply __db_h_ffactor_reply;
+struct __db_get_h_nelem_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_h_nelem_msg __db_get_h_nelem_msg;
+
+struct __db_get_h_nelem_reply {
+ int status;
+ u_int nelem;
+};
+typedef struct __db_get_h_nelem_reply __db_get_h_nelem_reply;
+
struct __db_h_nelem_msg {
u_int dbpcl_id;
u_int nelem;
@@ -391,6 +537,17 @@ struct __db_key_range_reply {
};
typedef struct __db_key_range_reply __db_key_range_reply;
+struct __db_get_lorder_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_lorder_msg __db_get_lorder_msg;
+
+struct __db_get_lorder_reply {
+ int status;
+ u_int lorder;
+};
+typedef struct __db_get_lorder_reply __db_get_lorder_reply;
+
struct __db_lorder_msg {
u_int dbpcl_id;
u_int lorder;
@@ -422,6 +579,17 @@ struct __db_open_reply {
};
typedef struct __db_open_reply __db_open_reply;
+struct __db_get_pagesize_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_pagesize_msg __db_get_pagesize_msg;
+
+struct __db_get_pagesize_reply {
+ int status;
+ u_int pagesize;
+};
+typedef struct __db_get_pagesize_reply __db_get_pagesize_reply;
+
struct __db_pagesize_msg {
u_int dbpcl_id;
u_int pagesize;
@@ -513,6 +681,17 @@ struct __db_put_reply {
};
typedef struct __db_put_reply __db_put_reply;
+struct __db_get_re_delim_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_re_delim_msg __db_get_re_delim_msg;
+
+struct __db_get_re_delim_reply {
+ int status;
+ u_int delim;
+};
+typedef struct __db_get_re_delim_reply __db_get_re_delim_reply;
+
struct __db_re_delim_msg {
u_int dbpcl_id;
u_int delim;
@@ -524,6 +703,17 @@ struct __db_re_delim_reply {
};
typedef struct __db_re_delim_reply __db_re_delim_reply;
+struct __db_get_re_len_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_re_len_msg __db_get_re_len_msg;
+
+struct __db_get_re_len_reply {
+ int status;
+ u_int len;
+};
+typedef struct __db_get_re_len_reply __db_get_re_len_reply;
+
struct __db_re_len_msg {
u_int dbpcl_id;
u_int len;
@@ -546,6 +736,17 @@ struct __db_re_pad_reply {
};
typedef struct __db_re_pad_reply __db_re_pad_reply;
+struct __db_get_re_pad_msg {
+ u_int dbpcl_id;
+};
+typedef struct __db_get_re_pad_msg __db_get_re_pad_msg;
+
+struct __db_get_re_pad_reply {
+ int status;
+ u_int pad;
+};
+typedef struct __db_get_re_pad_reply __db_get_re_pad_reply;
+
struct __db_remove_msg {
u_int dbpcl_id;
char *name;
@@ -799,109 +1000,147 @@ struct __dbc_put_reply {
};
typedef struct __dbc_put_reply __dbc_put_reply;
-#define __DB_env_cachesize ((unsigned long)(1))
-extern __env_cachesize_reply * __db_env_cachesize_4001();
-#define __DB_env_close ((unsigned long)(2))
-extern __env_close_reply * __db_env_close_4001();
-#define __DB_env_create ((unsigned long)(3))
-extern __env_create_reply * __db_env_create_4001();
-#define __DB_env_dbremove ((unsigned long)(4))
-extern __env_dbremove_reply * __db_env_dbremove_4001();
-#define __DB_env_dbrename ((unsigned long)(5))
-extern __env_dbrename_reply * __db_env_dbrename_4001();
-#define __DB_env_encrypt ((unsigned long)(6))
-extern __env_encrypt_reply * __db_env_encrypt_4001();
-#define __DB_env_flags ((unsigned long)(7))
-extern __env_flags_reply * __db_env_flags_4001();
-#define __DB_env_open ((unsigned long)(8))
-extern __env_open_reply * __db_env_open_4001();
-#define __DB_env_remove ((unsigned long)(9))
-extern __env_remove_reply * __db_env_remove_4001();
-#define __DB_txn_abort ((unsigned long)(10))
-extern __txn_abort_reply * __db_txn_abort_4001();
-#define __DB_txn_begin ((unsigned long)(11))
-extern __txn_begin_reply * __db_txn_begin_4001();
-#define __DB_txn_commit ((unsigned long)(12))
-extern __txn_commit_reply * __db_txn_commit_4001();
-#define __DB_txn_discard ((unsigned long)(13))
-extern __txn_discard_reply * __db_txn_discard_4001();
-#define __DB_txn_prepare ((unsigned long)(14))
-extern __txn_prepare_reply * __db_txn_prepare_4001();
-#define __DB_txn_recover ((unsigned long)(15))
-extern __txn_recover_reply * __db_txn_recover_4001();
-#define __DB_db_associate ((unsigned long)(16))
-extern __db_associate_reply * __db_db_associate_4001();
-#define __DB_db_bt_maxkey ((unsigned long)(17))
-extern __db_bt_maxkey_reply * __db_db_bt_maxkey_4001();
-#define __DB_db_bt_minkey ((unsigned long)(18))
-extern __db_bt_minkey_reply * __db_db_bt_minkey_4001();
-#define __DB_db_close ((unsigned long)(19))
-extern __db_close_reply * __db_db_close_4001();
-#define __DB_db_create ((unsigned long)(20))
-extern __db_create_reply * __db_db_create_4001();
-#define __DB_db_del ((unsigned long)(21))
-extern __db_del_reply * __db_db_del_4001();
-#define __DB_db_encrypt ((unsigned long)(22))
-extern __db_encrypt_reply * __db_db_encrypt_4001();
-#define __DB_db_extentsize ((unsigned long)(23))
-extern __db_extentsize_reply * __db_db_extentsize_4001();
-#define __DB_db_flags ((unsigned long)(24))
-extern __db_flags_reply * __db_db_flags_4001();
-#define __DB_db_get ((unsigned long)(25))
-extern __db_get_reply * __db_db_get_4001();
-#define __DB_db_h_ffactor ((unsigned long)(26))
-extern __db_h_ffactor_reply * __db_db_h_ffactor_4001();
-#define __DB_db_h_nelem ((unsigned long)(27))
-extern __db_h_nelem_reply * __db_db_h_nelem_4001();
-#define __DB_db_key_range ((unsigned long)(28))
-extern __db_key_range_reply * __db_db_key_range_4001();
-#define __DB_db_lorder ((unsigned long)(29))
-extern __db_lorder_reply * __db_db_lorder_4001();
-#define __DB_db_open ((unsigned long)(30))
-extern __db_open_reply * __db_db_open_4001();
-#define __DB_db_pagesize ((unsigned long)(31))
-extern __db_pagesize_reply * __db_db_pagesize_4001();
-#define __DB_db_pget ((unsigned long)(32))
-extern __db_pget_reply * __db_db_pget_4001();
-#define __DB_db_put ((unsigned long)(33))
-extern __db_put_reply * __db_db_put_4001();
-#define __DB_db_re_delim ((unsigned long)(34))
-extern __db_re_delim_reply * __db_db_re_delim_4001();
-#define __DB_db_re_len ((unsigned long)(35))
-extern __db_re_len_reply * __db_db_re_len_4001();
-#define __DB_db_re_pad ((unsigned long)(36))
-extern __db_re_pad_reply * __db_db_re_pad_4001();
-#define __DB_db_remove ((unsigned long)(37))
-extern __db_remove_reply * __db_db_remove_4001();
-#define __DB_db_rename ((unsigned long)(38))
-extern __db_rename_reply * __db_db_rename_4001();
-#define __DB_db_stat ((unsigned long)(39))
-extern __db_stat_reply * __db_db_stat_4001();
-#define __DB_db_sync ((unsigned long)(40))
-extern __db_sync_reply * __db_db_sync_4001();
-#define __DB_db_truncate ((unsigned long)(41))
-extern __db_truncate_reply * __db_db_truncate_4001();
-#define __DB_db_cursor ((unsigned long)(42))
-extern __db_cursor_reply * __db_db_cursor_4001();
-#define __DB_db_join ((unsigned long)(43))
-extern __db_join_reply * __db_db_join_4001();
-#define __DB_dbc_close ((unsigned long)(44))
-extern __dbc_close_reply * __db_dbc_close_4001();
-#define __DB_dbc_count ((unsigned long)(45))
-extern __dbc_count_reply * __db_dbc_count_4001();
-#define __DB_dbc_del ((unsigned long)(46))
-extern __dbc_del_reply * __db_dbc_del_4001();
-#define __DB_dbc_dup ((unsigned long)(47))
-extern __dbc_dup_reply * __db_dbc_dup_4001();
-#define __DB_dbc_get ((unsigned long)(48))
-extern __dbc_get_reply * __db_dbc_get_4001();
-#define __DB_dbc_pget ((unsigned long)(49))
-extern __dbc_pget_reply * __db_dbc_pget_4001();
-#define __DB_dbc_put ((unsigned long)(50))
-extern __dbc_put_reply * __db_dbc_put_4001();
-extern int db_rpc_serverprog_4001_freeresult();
+#define __DB_env_get_cachesize ((unsigned long)(1))
+extern __env_get_cachesize_reply * __db_env_get_cachesize_4002();
+#define __DB_env_cachesize ((unsigned long)(2))
+extern __env_cachesize_reply * __db_env_cachesize_4002();
+#define __DB_env_close ((unsigned long)(3))
+extern __env_close_reply * __db_env_close_4002();
+#define __DB_env_create ((unsigned long)(4))
+extern __env_create_reply * __db_env_create_4002();
+#define __DB_env_dbremove ((unsigned long)(5))
+extern __env_dbremove_reply * __db_env_dbremove_4002();
+#define __DB_env_dbrename ((unsigned long)(6))
+extern __env_dbrename_reply * __db_env_dbrename_4002();
+#define __DB_env_get_encrypt_flags ((unsigned long)(7))
+extern __env_get_encrypt_flags_reply * __db_env_get_encrypt_flags_4002();
+#define __DB_env_encrypt ((unsigned long)(8))
+extern __env_encrypt_reply * __db_env_encrypt_4002();
+#define __DB_env_get_flags ((unsigned long)(9))
+extern __env_get_flags_reply * __db_env_get_flags_4002();
+#define __DB_env_flags ((unsigned long)(10))
+extern __env_flags_reply * __db_env_flags_4002();
+#define __DB_env_get_home ((unsigned long)(11))
+extern __env_get_home_reply * __db_env_get_home_4002();
+#define __DB_env_get_open_flags ((unsigned long)(12))
+extern __env_get_open_flags_reply * __db_env_get_open_flags_4002();
+#define __DB_env_open ((unsigned long)(13))
+extern __env_open_reply * __db_env_open_4002();
+#define __DB_env_remove ((unsigned long)(14))
+extern __env_remove_reply * __db_env_remove_4002();
+#define __DB_txn_abort ((unsigned long)(15))
+extern __txn_abort_reply * __db_txn_abort_4002();
+#define __DB_txn_begin ((unsigned long)(16))
+extern __txn_begin_reply * __db_txn_begin_4002();
+#define __DB_txn_commit ((unsigned long)(17))
+extern __txn_commit_reply * __db_txn_commit_4002();
+#define __DB_txn_discard ((unsigned long)(18))
+extern __txn_discard_reply * __db_txn_discard_4002();
+#define __DB_txn_prepare ((unsigned long)(19))
+extern __txn_prepare_reply * __db_txn_prepare_4002();
+#define __DB_txn_recover ((unsigned long)(20))
+extern __txn_recover_reply * __db_txn_recover_4002();
+#define __DB_db_associate ((unsigned long)(21))
+extern __db_associate_reply * __db_db_associate_4002();
+#define __DB_db_bt_maxkey ((unsigned long)(22))
+extern __db_bt_maxkey_reply * __db_db_bt_maxkey_4002();
+#define __DB_db_get_bt_minkey ((unsigned long)(23))
+extern __db_get_bt_minkey_reply * __db_db_get_bt_minkey_4002();
+#define __DB_db_bt_minkey ((unsigned long)(24))
+extern __db_bt_minkey_reply * __db_db_bt_minkey_4002();
+#define __DB_db_close ((unsigned long)(25))
+extern __db_close_reply * __db_db_close_4002();
+#define __DB_db_create ((unsigned long)(26))
+extern __db_create_reply * __db_db_create_4002();
+#define __DB_db_del ((unsigned long)(27))
+extern __db_del_reply * __db_db_del_4002();
+#define __DB_db_get_encrypt_flags ((unsigned long)(28))
+extern __db_get_encrypt_flags_reply * __db_db_get_encrypt_flags_4002();
+#define __DB_db_encrypt ((unsigned long)(29))
+extern __db_encrypt_reply * __db_db_encrypt_4002();
+#define __DB_db_get_extentsize ((unsigned long)(30))
+extern __db_get_extentsize_reply * __db_db_get_extentsize_4002();
+#define __DB_db_extentsize ((unsigned long)(31))
+extern __db_extentsize_reply * __db_db_extentsize_4002();
+#define __DB_db_get_flags ((unsigned long)(32))
+extern __db_get_flags_reply * __db_db_get_flags_4002();
+#define __DB_db_flags ((unsigned long)(33))
+extern __db_flags_reply * __db_db_flags_4002();
+#define __DB_db_get ((unsigned long)(34))
+extern __db_get_reply * __db_db_get_4002();
+#define __DB_db_get_name ((unsigned long)(35))
+extern __db_get_name_reply * __db_db_get_name_4002();
+#define __DB_db_get_open_flags ((unsigned long)(36))
+extern __db_get_open_flags_reply * __db_db_get_open_flags_4002();
+#define __DB_db_get_h_ffactor ((unsigned long)(37))
+extern __db_get_h_ffactor_reply * __db_db_get_h_ffactor_4002();
+#define __DB_db_h_ffactor ((unsigned long)(38))
+extern __db_h_ffactor_reply * __db_db_h_ffactor_4002();
+#define __DB_db_get_h_nelem ((unsigned long)(39))
+extern __db_get_h_nelem_reply * __db_db_get_h_nelem_4002();
+#define __DB_db_h_nelem ((unsigned long)(40))
+extern __db_h_nelem_reply * __db_db_h_nelem_4002();
+#define __DB_db_key_range ((unsigned long)(41))
+extern __db_key_range_reply * __db_db_key_range_4002();
+#define __DB_db_get_lorder ((unsigned long)(42))
+extern __db_get_lorder_reply * __db_db_get_lorder_4002();
+#define __DB_db_lorder ((unsigned long)(43))
+extern __db_lorder_reply * __db_db_lorder_4002();
+#define __DB_db_open ((unsigned long)(44))
+extern __db_open_reply * __db_db_open_4002();
+#define __DB_db_get_pagesize ((unsigned long)(45))
+extern __db_get_pagesize_reply * __db_db_get_pagesize_4002();
+#define __DB_db_pagesize ((unsigned long)(46))
+extern __db_pagesize_reply * __db_db_pagesize_4002();
+#define __DB_db_pget ((unsigned long)(47))
+extern __db_pget_reply * __db_db_pget_4002();
+#define __DB_db_put ((unsigned long)(48))
+extern __db_put_reply * __db_db_put_4002();
+#define __DB_db_get_re_delim ((unsigned long)(49))
+extern __db_get_re_delim_reply * __db_db_get_re_delim_4002();
+#define __DB_db_re_delim ((unsigned long)(50))
+extern __db_re_delim_reply * __db_db_re_delim_4002();
+#define __DB_db_get_re_len ((unsigned long)(51))
+extern __db_get_re_len_reply * __db_db_get_re_len_4002();
+#define __DB_db_re_len ((unsigned long)(52))
+extern __db_re_len_reply * __db_db_re_len_4002();
+#define __DB_db_re_pad ((unsigned long)(53))
+extern __db_re_pad_reply * __db_db_re_pad_4002();
+#define __DB_db_get_re_pad ((unsigned long)(54))
+extern __db_get_re_pad_reply * __db_db_get_re_pad_4002();
+#define __DB_db_remove ((unsigned long)(55))
+extern __db_remove_reply * __db_db_remove_4002();
+#define __DB_db_rename ((unsigned long)(56))
+extern __db_rename_reply * __db_db_rename_4002();
+#define __DB_db_stat ((unsigned long)(57))
+extern __db_stat_reply * __db_db_stat_4002();
+#define __DB_db_sync ((unsigned long)(58))
+extern __db_sync_reply * __db_db_sync_4002();
+#define __DB_db_truncate ((unsigned long)(59))
+extern __db_truncate_reply * __db_db_truncate_4002();
+#define __DB_db_cursor ((unsigned long)(60))
+extern __db_cursor_reply * __db_db_cursor_4002();
+#define __DB_db_join ((unsigned long)(61))
+extern __db_join_reply * __db_db_join_4002();
+#define __DB_dbc_close ((unsigned long)(62))
+extern __dbc_close_reply * __db_dbc_close_4002();
+#define __DB_dbc_count ((unsigned long)(63))
+extern __dbc_count_reply * __db_dbc_count_4002();
+#define __DB_dbc_del ((unsigned long)(64))
+extern __dbc_del_reply * __db_dbc_del_4002();
+#define __DB_dbc_dup ((unsigned long)(65))
+extern __dbc_dup_reply * __db_dbc_dup_4002();
+#define __DB_dbc_get ((unsigned long)(66))
+extern __dbc_get_reply * __db_dbc_get_4002();
+#define __DB_dbc_pget ((unsigned long)(67))
+extern __dbc_pget_reply * __db_dbc_pget_4002();
+#define __DB_dbc_put ((unsigned long)(68))
+extern __dbc_put_reply * __db_dbc_put_4002();
+extern int db_rpc_serverprog_4002_freeresult();
/* the xdr functions */
+extern bool_t xdr___env_get_cachesize_msg();
+extern bool_t xdr___env_get_cachesize_reply();
extern bool_t xdr___env_cachesize_msg();
extern bool_t xdr___env_cachesize_reply();
extern bool_t xdr___env_close_msg();
@@ -912,10 +1151,18 @@ extern bool_t xdr___env_dbremove_msg();
extern bool_t xdr___env_dbremove_reply();
extern bool_t xdr___env_dbrename_msg();
extern bool_t xdr___env_dbrename_reply();
+extern bool_t xdr___env_get_encrypt_flags_msg();
+extern bool_t xdr___env_get_encrypt_flags_reply();
extern bool_t xdr___env_encrypt_msg();
extern bool_t xdr___env_encrypt_reply();
+extern bool_t xdr___env_get_flags_msg();
+extern bool_t xdr___env_get_flags_reply();
extern bool_t xdr___env_flags_msg();
extern bool_t xdr___env_flags_reply();
+extern bool_t xdr___env_get_home_msg();
+extern bool_t xdr___env_get_home_reply();
+extern bool_t xdr___env_get_open_flags_msg();
+extern bool_t xdr___env_get_open_flags_reply();
extern bool_t xdr___env_open_msg();
extern bool_t xdr___env_open_reply();
extern bool_t xdr___env_remove_msg();
@@ -936,6 +1183,8 @@ extern bool_t xdr___db_associate_msg();
extern bool_t xdr___db_associate_reply();
extern bool_t xdr___db_bt_maxkey_msg();
extern bool_t xdr___db_bt_maxkey_reply();
+extern bool_t xdr___db_get_bt_minkey_msg();
+extern bool_t xdr___db_get_bt_minkey_reply();
extern bool_t xdr___db_bt_minkey_msg();
extern bool_t xdr___db_bt_minkey_reply();
extern bool_t xdr___db_close_msg();
@@ -944,36 +1193,60 @@ extern bool_t xdr___db_create_msg();
extern bool_t xdr___db_create_reply();
extern bool_t xdr___db_del_msg();
extern bool_t xdr___db_del_reply();
+extern bool_t xdr___db_get_encrypt_flags_msg();
+extern bool_t xdr___db_get_encrypt_flags_reply();
extern bool_t xdr___db_encrypt_msg();
extern bool_t xdr___db_encrypt_reply();
+extern bool_t xdr___db_get_extentsize_msg();
+extern bool_t xdr___db_get_extentsize_reply();
extern bool_t xdr___db_extentsize_msg();
extern bool_t xdr___db_extentsize_reply();
+extern bool_t xdr___db_get_flags_msg();
+extern bool_t xdr___db_get_flags_reply();
extern bool_t xdr___db_flags_msg();
extern bool_t xdr___db_flags_reply();
extern bool_t xdr___db_get_msg();
extern bool_t xdr___db_get_reply();
+extern bool_t xdr___db_get_name_msg();
+extern bool_t xdr___db_get_name_reply();
+extern bool_t xdr___db_get_open_flags_msg();
+extern bool_t xdr___db_get_open_flags_reply();
+extern bool_t xdr___db_get_h_ffactor_msg();
+extern bool_t xdr___db_get_h_ffactor_reply();
extern bool_t xdr___db_h_ffactor_msg();
extern bool_t xdr___db_h_ffactor_reply();
+extern bool_t xdr___db_get_h_nelem_msg();
+extern bool_t xdr___db_get_h_nelem_reply();
extern bool_t xdr___db_h_nelem_msg();
extern bool_t xdr___db_h_nelem_reply();
extern bool_t xdr___db_key_range_msg();
extern bool_t xdr___db_key_range_reply();
+extern bool_t xdr___db_get_lorder_msg();
+extern bool_t xdr___db_get_lorder_reply();
extern bool_t xdr___db_lorder_msg();
extern bool_t xdr___db_lorder_reply();
extern bool_t xdr___db_open_msg();
extern bool_t xdr___db_open_reply();
+extern bool_t xdr___db_get_pagesize_msg();
+extern bool_t xdr___db_get_pagesize_reply();
extern bool_t xdr___db_pagesize_msg();
extern bool_t xdr___db_pagesize_reply();
extern bool_t xdr___db_pget_msg();
extern bool_t xdr___db_pget_reply();
extern bool_t xdr___db_put_msg();
extern bool_t xdr___db_put_reply();
+extern bool_t xdr___db_get_re_delim_msg();
+extern bool_t xdr___db_get_re_delim_reply();
extern bool_t xdr___db_re_delim_msg();
extern bool_t xdr___db_re_delim_reply();
+extern bool_t xdr___db_get_re_len_msg();
+extern bool_t xdr___db_get_re_len_reply();
extern bool_t xdr___db_re_len_msg();
extern bool_t xdr___db_re_len_reply();
extern bool_t xdr___db_re_pad_msg();
extern bool_t xdr___db_re_pad_reply();
+extern bool_t xdr___db_get_re_pad_msg();
+extern bool_t xdr___db_get_re_pad_reply();
extern bool_t xdr___db_remove_msg();
extern bool_t xdr___db_remove_reply();
extern bool_t xdr___db_rename_msg();
diff --git a/db/dbinc_auto/dbreg_ext.h b/db/dbinc_auto/dbreg_ext.h
index 41020a386..cb0df15ab 100644
--- a/db/dbinc_auto/dbreg_ext.h
+++ b/db/dbinc_auto/dbreg_ext.h
@@ -9,8 +9,9 @@ extern "C" {
int __dbreg_setup __P((DB *, const char *, u_int32_t));
int __dbreg_teardown __P((DB *));
int __dbreg_new_id __P((DB *, DB_TXN *));
+int __dbreg_get_id __P((DB *, DB_TXN *, int32_t *));
int __dbreg_assign_id __P((DB *, int32_t));
-int __dbreg_revoke_id __P((DB *, int));
+int __dbreg_revoke_id __P((DB *, int, int32_t));
int __dbreg_close_id __P((DB *, DB_TXN *));
int __dbreg_register_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, const DBT *, const DBT *, int32_t, DBTYPE, db_pgno_t, u_int32_t));
int __dbreg_register_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -25,6 +26,7 @@ void __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
int __dbreg_open_files __P((DB_ENV *));
int __dbreg_close_files __P((DB_ENV *));
int __dbreg_id_to_db __P((DB_ENV *, DB_TXN *, DB **, int32_t, int));
+int __dbreg_id_to_db_int __P((DB_ENV *, DB_TXN *, DB **, int32_t, int, int));
int __dbreg_id_to_fname __P((DB_LOG *, int32_t, int, FNAME **));
int __dbreg_fid_to_fname __P((DB_LOG *, u_int8_t *, int, FNAME **));
int __dbreg_get_name __P((DB_ENV *, u_int8_t *, char **));
@@ -33,6 +35,7 @@ int __dbreg_lazy_id __P((DB *));
int __dbreg_push_id __P((DB_ENV *, int32_t));
int __dbreg_pop_id __P((DB_ENV *, int32_t *));
int __dbreg_pluck_id __P((DB_ENV *, int32_t));
+void __dbreg_print_dblist __P((DB_ENV *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/env_ext.h b/db/dbinc_auto/env_ext.h
index 4bd0eee4a..22d66fa30 100644
--- a/db/dbinc_auto/env_ext.h
+++ b/db/dbinc_auto/env_ext.h
@@ -16,15 +16,32 @@ int __db_tablesize __P((u_int32_t));
void __db_hashinit __P((void *, u_int32_t));
int __db_fileinit __P((DB_ENV *, DB_FH *, size_t, int));
int __db_overwrite __P((DB_ENV *, const char *));
+int __dbenv_set_alloc __P((DB_ENV *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)));
+int __dbenv_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+int __dbenv_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
+int __dbenv_set_flags __P((DB_ENV *, u_int32_t, int));
+int __dbenv_set_data_dir __P((DB_ENV *, const char *));
+void __dbenv_set_errcall __P((DB_ENV *, void (*)(const char *, char *)));
+void __dbenv_get_errfile __P((DB_ENV *, FILE **));
+void __dbenv_set_errfile __P((DB_ENV *, FILE *));
+void __dbenv_get_errpfx __P((DB_ENV *, const char **));
+void __dbenv_set_errpfx __P((DB_ENV *, const char *));
+int __dbenv_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
+int __dbenv_set_shm_key __P((DB_ENV *, long));
+int __dbenv_set_tas_spins __P((DB_ENV *, u_int32_t));
+int __dbenv_set_tmp_dir __P((DB_ENV *, const char *));
+int __dbenv_set_verbose __P((DB_ENV *, u_int32_t, int));
int __db_mi_env __P((DB_ENV *, const char *));
int __db_mi_open __P((DB_ENV *, const char *, int));
int __db_env_config __P((DB_ENV *, char *, u_int32_t));
int __dbenv_open __P((DB_ENV *, const char *, u_int32_t, int));
int __dbenv_remove __P((DB_ENV *, const char *, u_int32_t));
-int __dbenv_close __P((DB_ENV *, u_int32_t));
-int __db_appname __P((DB_ENV *, APPNAME, const char *, u_int32_t, DB_FH *, char **));
+int __dbenv_close_pp __P((DB_ENV *, u_int32_t));
+int __dbenv_close __P((DB_ENV *, int));
+int __dbenv_get_open_flags __P((DB_ENV *, u_int32_t *));
+int __db_appname __P((DB_ENV *, APPNAME, const char *, u_int32_t, DB_FH **, char **));
int __db_home __P((DB_ENV *, const char *, u_int32_t));
-int __db_apprec __P((DB_ENV *, DB_LSN *, u_int32_t));
+int __db_apprec __P((DB_ENV *, DB_LSN *, DB_LSN *, u_int32_t, u_int32_t));
int __env_openfiles __P((DB_ENV *, DB_LOGC *, void *, DBT *, DB_LSN *, DB_LSN *, double, int));
int __db_e_attach __P((DB_ENV *, u_int32_t *));
int __db_e_detach __P((DB_ENV *, int));
diff --git a/db/dbinc_auto/ext_prot.in b/db/dbinc_auto/ext_prot.in
index b7ede6d22..58f4943df 100644
--- a/db/dbinc_auto/ext_prot.in
+++ b/db/dbinc_auto/ext_prot.in
@@ -31,11 +31,6 @@ int db_env_set_func_unlink __P((int (*)(const char *)));
int db_env_set_func_unmap __P((int (*)(void *, size_t)));
int db_env_set_func_write __P((ssize_t (*)(int, const void *, size_t)));
int db_env_set_func_yield __P((int (*)(void)));
-int txn_abort __P((DB_TXN *));
-int txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
-int txn_commit __P((DB_TXN *, u_int32_t));
-int db_env_xa_attach __P((int *, void *, DB_ENV **, DB_TXN **));
-int db_env_set_thread_func __P((int (*)(void **), int (*)(void *, void *), int (*)(void *), size_t));
#if DB_DBM_HSEARCH != 0
int __db_ndbm_clearerr __P((DBM *));
void __db_ndbm_close __P((DBM *));
diff --git a/db/dbinc_auto/fileops_auto.h b/db/dbinc_auto/fileops_auto.h
index ee1f58616..12440264d 100644
--- a/db/dbinc_auto/fileops_auto.h
+++ b/db/dbinc_auto/fileops_auto.h
@@ -29,6 +29,8 @@ typedef struct ___fop_write_args {
DB_LSN prev_lsn;
DBT name;
u_int32_t appname;
+ u_int32_t pgsize;
+ db_pgno_t pageno;
u_int32_t offset;
DBT page;
u_int32_t flag;
diff --git a/db/dbinc_auto/fileops_ext.h b/db/dbinc_auto/fileops_ext.h
index 5edf7bd30..328e471d2 100644
--- a/db/dbinc_auto/fileops_ext.h
+++ b/db/dbinc_auto/fileops_ext.h
@@ -14,7 +14,7 @@ int __fop_remove_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *,
int __fop_remove_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_remove_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_remove_read __P((DB_ENV *, void *, __fop_remove_args **));
-int __fop_write_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *, u_int32_t, u_int32_t, const DBT *, u_int32_t));
+int __fop_write_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, const DBT *, u_int32_t, u_int32_t, db_pgno_t, u_int32_t, const DBT *, u_int32_t));
int __fop_write_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_write_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_write_read __P((DB_ENV *, void *, __fop_write_args **));
@@ -29,10 +29,10 @@ int __fop_file_remove_read __P((DB_ENV *, void *, __fop_file_remove_args **));
int __fop_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __fop_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __fop_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
-int __fop_create __P((DB_ENV *, DB_TXN *, DB_FH *, const char *, APPNAME, int));
-int __fop_remove __P((DB_ENV *, DB_TXN *, u_int8_t *, const char *, APPNAME));
-int __fop_write __P((DB_ENV *, DB_TXN *, const char *, APPNAME, DB_FH *, u_int32_t, u_int8_t *, u_int32_t, u_int32_t));
-int __fop_rename __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int8_t *, APPNAME));
+int __fop_create __P((DB_ENV *, DB_TXN *, DB_FH **, const char *, APPNAME, int, u_int32_t));
+int __fop_remove __P((DB_ENV *, DB_TXN *, u_int8_t *, const char *, APPNAME, u_int32_t));
+int __fop_write __P((DB_ENV *, DB_TXN *, const char *, APPNAME, DB_FH *, u_int32_t, db_pgno_t, u_int32_t, u_int8_t *, u_int32_t, u_int32_t, u_int32_t));
+int __fop_rename __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int8_t *, APPNAME, u_int32_t));
int __fop_create_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_remove_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __fop_write_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -42,7 +42,7 @@ int __fop_lock_handle __P((DB_ENV *, DB *, u_int32_t, db_lockmode_t, DB_LOCK *,
int __fop_file_setup __P((DB *, DB_TXN *, const char *, int, u_int32_t, u_int32_t *));
int __fop_subdb_setup __P((DB *, DB_TXN *, const char *, const char *, int, u_int32_t));
int __fop_remove_setup __P((DB *, DB_TXN *, const char *, u_int32_t));
-int __fop_read_meta __P((DB_ENV *, const char *, u_int8_t *, size_t, DB_FH *, int, size_t *, u_int32_t));
+int __fop_read_meta __P((DB_ENV *, const char *, u_int8_t *, size_t, DB_FH *, int, size_t *));
int __fop_dummy __P((DB *, DB_TXN *, const char *, const char *, u_int32_t));
int __fop_dbrename __P((DB *, const char *, const char *));
diff --git a/db/dbinc_auto/hash_ext.h b/db/dbinc_auto/hash_ext.h
index 1ee239870..ecd088083 100644
--- a/db/dbinc_auto/hash_ext.h
+++ b/db/dbinc_auto/hash_ext.h
@@ -105,9 +105,10 @@ int __ham_groupalloc_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *))
int __ham_curadj_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_chgpg_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __ham_reclaim __P((DB *, DB_TXN *txn));
-int __ham_truncate __P((DB *, DB_TXN *txn, u_int32_t *));
-int __ham_stat __P((DB *, void *, u_int32_t));
+int __ham_truncate __P((DBC *, u_int32_t *));
+int __ham_stat __P((DBC *, void *, u_int32_t));
int __ham_traverse __P((DBC *, db_lockmode_t, int (*)(DB *, PAGE *, void *, int *), void *, int));
+int __db_no_hash_am __P((DB_ENV *));
int __ham_30_hashmeta __P((DB *, char *, u_int8_t *));
int __ham_30_sizefix __P((DB *, DB_FH *, char *, u_int8_t *));
int __ham_31_hashmeta __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
diff --git a/db/dbinc_auto/int_def.in b/db/dbinc_auto/int_def.in
index e75e1914b..2de7fb620 100644
--- a/db/dbinc_auto/int_def.in
+++ b/db/dbinc_auto/int_def.in
@@ -14,7 +14,6 @@
#define __db_master_update __db_master_update@DB_VERSION_UNIQUE_NAME@
#define __db_dbenv_setup __db_dbenv_setup@DB_VERSION_UNIQUE_NAME@
#define __db_close __db_close@DB_VERSION_UNIQUE_NAME@
-#define __db_close_i __db_close_i@DB_VERSION_UNIQUE_NAME@
#define __db_refresh __db_refresh@DB_VERSION_UNIQUE_NAME@
#define __db_log_page __db_log_page@DB_VERSION_UNIQUE_NAME@
#define __db_backup_name __db_backup_name@DB_VERSION_UNIQUE_NAME@
@@ -22,16 +21,12 @@
#if CONFIG_TEST
#define __db_testcopy __db_testcopy@DB_VERSION_UNIQUE_NAME@
#endif
-#define __db_cursor __db_cursor@DB_VERSION_UNIQUE_NAME@
-#define __db_icursor __db_icursor@DB_VERSION_UNIQUE_NAME@
+#define __db_cursor_int __db_cursor_int@DB_VERSION_UNIQUE_NAME@
#define __db_cprint __db_cprint@DB_VERSION_UNIQUE_NAME@
-#define __db_fd __db_fd@DB_VERSION_UNIQUE_NAME@
-#define __db_get __db_get@DB_VERSION_UNIQUE_NAME@
#define __db_put __db_put@DB_VERSION_UNIQUE_NAME@
-#define __db_delete __db_delete@DB_VERSION_UNIQUE_NAME@
+#define __db_del __db_del@DB_VERSION_UNIQUE_NAME@
#define __db_sync __db_sync@DB_VERSION_UNIQUE_NAME@
#define __db_associate __db_associate@DB_VERSION_UNIQUE_NAME@
-#define __db_pget __db_pget@DB_VERSION_UNIQUE_NAME@
#define __db_addrem_log __db_addrem_log@DB_VERSION_UNIQUE_NAME@
#define __db_addrem_getpgnos __db_addrem_getpgnos@DB_VERSION_UNIQUE_NAME@
#define __db_addrem_print __db_addrem_print@DB_VERSION_UNIQUE_NAME@
@@ -68,6 +63,18 @@
#define __db_cksum_getpgnos __db_cksum_getpgnos@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_print __db_cksum_print@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_read __db_cksum_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_log __db_pg_freedata_log@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_getpgnos __db_pg_freedata_getpgnos@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_print __db_pg_freedata_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_read __db_pg_freedata_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_prepare_log __db_pg_prepare_log@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_prepare_getpgnos __db_pg_prepare_getpgnos@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_prepare_print __db_pg_prepare_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_prepare_read __db_pg_prepare_read@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_new_log __db_pg_new_log@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_new_getpgnos __db_pg_new_getpgnos@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_new_print __db_pg_new_print@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_new_read __db_pg_new_read@DB_VERSION_UNIQUE_NAME@
#define __db_init_print __db_init_print@DB_VERSION_UNIQUE_NAME@
#define __db_init_getpgnos __db_init_getpgnos@DB_VERSION_UNIQUE_NAME@
#define __db_init_recover __db_init_recover@DB_VERSION_UNIQUE_NAME@
@@ -81,7 +88,7 @@
#define __db_c_get __db_c_get@DB_VERSION_UNIQUE_NAME@
#define __db_c_put __db_c_put@DB_VERSION_UNIQUE_NAME@
#define __db_duperr __db_duperr@DB_VERSION_UNIQUE_NAME@
-#define __db_c_secondary_get __db_c_secondary_get@DB_VERSION_UNIQUE_NAME@
+#define __db_c_secondary_get_pp __db_c_secondary_get_pp@DB_VERSION_UNIQUE_NAME@
#define __db_c_pget __db_c_pget@DB_VERSION_UNIQUE_NAME@
#define __db_c_del_primary __db_c_del_primary@DB_VERSION_UNIQUE_NAME@
#define __db_s_first __db_s_first@DB_VERSION_UNIQUE_NAME@
@@ -106,37 +113,52 @@
#define __db_txnlist_lsninit __db_txnlist_lsninit@DB_VERSION_UNIQUE_NAME@
#define __db_add_limbo __db_add_limbo@DB_VERSION_UNIQUE_NAME@
#define __db_do_the_limbo __db_do_the_limbo@DB_VERSION_UNIQUE_NAME@
+#define __db_default_getpgnos __db_default_getpgnos@DB_VERSION_UNIQUE_NAME@
#define __db_txnlist_print __db_txnlist_print@DB_VERSION_UNIQUE_NAME@
#define __db_ditem __db_ditem@DB_VERSION_UNIQUE_NAME@
#define __db_pitem __db_pitem@DB_VERSION_UNIQUE_NAME@
#define __db_relink __db_relink@DB_VERSION_UNIQUE_NAME@
-#define __db_cursorchk __db_cursorchk@DB_VERSION_UNIQUE_NAME@
-#define __db_ccountchk __db_ccountchk@DB_VERSION_UNIQUE_NAME@
-#define __db_cdelchk __db_cdelchk@DB_VERSION_UNIQUE_NAME@
-#define __db_cgetchk __db_cgetchk@DB_VERSION_UNIQUE_NAME@
-#define __db_cputchk __db_cputchk@DB_VERSION_UNIQUE_NAME@
-#define __db_pgetchk __db_pgetchk@DB_VERSION_UNIQUE_NAME@
-#define __db_cpgetchk __db_cpgetchk@DB_VERSION_UNIQUE_NAME@
-#define __db_delchk __db_delchk@DB_VERSION_UNIQUE_NAME@
-#define __db_getchk __db_getchk@DB_VERSION_UNIQUE_NAME@
-#define __db_joinchk __db_joinchk@DB_VERSION_UNIQUE_NAME@
-#define __db_joingetchk __db_joingetchk@DB_VERSION_UNIQUE_NAME@
-#define __db_putchk __db_putchk@DB_VERSION_UNIQUE_NAME@
-#define __db_statchk __db_statchk@DB_VERSION_UNIQUE_NAME@
-#define __db_syncchk __db_syncchk@DB_VERSION_UNIQUE_NAME@
-#define __db_secondary_corrupt __db_secondary_corrupt@DB_VERSION_UNIQUE_NAME@
-#define __db_associatechk __db_associatechk@DB_VERSION_UNIQUE_NAME@
-#define __db_txn_auto __db_txn_auto@DB_VERSION_UNIQUE_NAME@
+#define __db_associate_pp __db_associate_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_close_pp __db_close_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_cursor_pp __db_cursor_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_cursor __db_cursor@DB_VERSION_UNIQUE_NAME@
+#define __db_del_pp __db_del_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_fd_pp __db_fd_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_get_pp __db_get_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_get __db_get@DB_VERSION_UNIQUE_NAME@
+#define __db_join_pp __db_join_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_key_range_pp __db_key_range_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_open_pp __db_open_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_pget_pp __db_pget_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_pget __db_pget@DB_VERSION_UNIQUE_NAME@
+#define __db_put_pp __db_put_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_stat_pp __db_stat_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_stat __db_stat@DB_VERSION_UNIQUE_NAME@
+#define __db_sync_pp __db_sync_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_close_pp __db_c_close_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_count_pp __db_c_count_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_del_pp __db_c_del_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_del_arg __db_c_del_arg@DB_VERSION_UNIQUE_NAME@
+#define __db_c_dup_pp __db_c_dup_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_get_pp __db_c_get_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_pget_pp __db_c_pget_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_c_put_pp __db_c_put_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_txn_auto_init __db_txn_auto_init@DB_VERSION_UNIQUE_NAME@
+#define __db_txn_auto_resolve __db_txn_auto_resolve@DB_VERSION_UNIQUE_NAME@
#define __db_join __db_join@DB_VERSION_UNIQUE_NAME@
+#define __db_join_close __db_join_close@DB_VERSION_UNIQUE_NAME@
+#define __db_secondary_corrupt __db_secondary_corrupt@DB_VERSION_UNIQUE_NAME@
#define __db_new __db_new@DB_VERSION_UNIQUE_NAME@
#define __db_free __db_free@DB_VERSION_UNIQUE_NAME@
#define __db_lprint __db_lprint@DB_VERSION_UNIQUE_NAME@
#define __db_lget __db_lget@DB_VERSION_UNIQUE_NAME@
#define __db_lput __db_lput@DB_VERSION_UNIQUE_NAME@
#define __dbh_am_chk __dbh_am_chk@DB_VERSION_UNIQUE_NAME@
+#define __db_set_flags __db_set_flags@DB_VERSION_UNIQUE_NAME@
#define __db_set_lorder __db_set_lorder@DB_VERSION_UNIQUE_NAME@
+#define __db_set_pagesize __db_set_pagesize@DB_VERSION_UNIQUE_NAME@
#define __db_open __db_open@DB_VERSION_UNIQUE_NAME@
-#define __db_dbopen __db_dbopen@DB_VERSION_UNIQUE_NAME@
+#define __db_get_open_flags __db_get_open_flags@DB_VERSION_UNIQUE_NAME@
#define __db_new_file __db_new_file@DB_VERSION_UNIQUE_NAME@
#define __db_init_subdb __db_init_subdb@DB_VERSION_UNIQUE_NAME@
#define __db_chk_meta __db_chk_meta@DB_VERSION_UNIQUE_NAME@
@@ -160,6 +182,7 @@
#define __db_dbtype_to_string __db_dbtype_to_string@DB_VERSION_UNIQUE_NAME@
#define __db_prheader __db_prheader@DB_VERSION_UNIQUE_NAME@
#define __db_prfooter __db_prfooter@DB_VERSION_UNIQUE_NAME@
+#define __db_pr_callback __db_pr_callback@DB_VERSION_UNIQUE_NAME@
#define __db_addrem_recover __db_addrem_recover@DB_VERSION_UNIQUE_NAME@
#define __db_big_recover __db_big_recover@DB_VERSION_UNIQUE_NAME@
#define __db_ovref_recover __db_ovref_recover@DB_VERSION_UNIQUE_NAME@
@@ -168,28 +191,37 @@
#define __db_noop_recover __db_noop_recover@DB_VERSION_UNIQUE_NAME@
#define __db_pg_alloc_recover __db_pg_alloc_recover@DB_VERSION_UNIQUE_NAME@
#define __db_pg_free_recover __db_pg_free_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_new_recover __db_pg_new_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_freedata_recover __db_pg_freedata_recover@DB_VERSION_UNIQUE_NAME@
#define __db_cksum_recover __db_cksum_recover@DB_VERSION_UNIQUE_NAME@
+#define __db_pg_prepare_recover __db_pg_prepare_recover@DB_VERSION_UNIQUE_NAME@
#define __db_traverse_big __db_traverse_big@DB_VERSION_UNIQUE_NAME@
#define __db_reclaim_callback __db_reclaim_callback@DB_VERSION_UNIQUE_NAME@
#define __db_truncate_callback __db_truncate_callback@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_dbremove __dbenv_dbremove@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_dbremove_pp __dbenv_dbremove_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_remove_pp __db_remove_pp@DB_VERSION_UNIQUE_NAME@
#define __db_remove __db_remove@DB_VERSION_UNIQUE_NAME@
-#define __db_remove_i __db_remove_i@DB_VERSION_UNIQUE_NAME@
-#define __dbenv_dbrename __dbenv_dbrename@DB_VERSION_UNIQUE_NAME@
+#define __db_remove_int __db_remove_int@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_dbrename_pp __dbenv_dbrename_pp@DB_VERSION_UNIQUE_NAME@
+#define __db_rename_pp __db_rename_pp@DB_VERSION_UNIQUE_NAME@
#define __db_rename __db_rename@DB_VERSION_UNIQUE_NAME@
-#define __db_rename_i __db_rename_i@DB_VERSION_UNIQUE_NAME@
+#define __db_rename_int __db_rename_int@DB_VERSION_UNIQUE_NAME@
#define __db_ret __db_ret@DB_VERSION_UNIQUE_NAME@
#define __db_retcopy __db_retcopy@DB_VERSION_UNIQUE_NAME@
+#define __db_truncate_pp __db_truncate_pp@DB_VERSION_UNIQUE_NAME@
#define __db_truncate __db_truncate@DB_VERSION_UNIQUE_NAME@
+#define __db_upgrade_pp __db_upgrade_pp@DB_VERSION_UNIQUE_NAME@
#define __db_upgrade __db_upgrade@DB_VERSION_UNIQUE_NAME@
#define __db_lastpgno __db_lastpgno@DB_VERSION_UNIQUE_NAME@
#define __db_31_offdup __db_31_offdup@DB_VERSION_UNIQUE_NAME@
-#define __db_verify __db_verify@DB_VERSION_UNIQUE_NAME@
-#define __db_verify_callback __db_verify_callback@DB_VERSION_UNIQUE_NAME@
+#define __db_verify_pp __db_verify_pp@DB_VERSION_UNIQUE_NAME@
#define __db_verify_internal __db_verify_internal@DB_VERSION_UNIQUE_NAME@
+#define __db_verify __db_verify@DB_VERSION_UNIQUE_NAME@
+#define __db_vrfy_common __db_vrfy_common@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_datapage __db_vrfy_datapage@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_meta __db_vrfy_meta@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_struct_feedback __db_vrfy_struct_feedback@DB_VERSION_UNIQUE_NAME@
+#define __db_salvage __db_salvage@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_inpitem __db_vrfy_inpitem@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_duptype __db_vrfy_duptype@DB_VERSION_UNIQUE_NAME@
#define __db_salvage_duptree __db_salvage_duptree@DB_VERSION_UNIQUE_NAME@
@@ -200,7 +232,6 @@
#define __db_vrfy_pgset __db_vrfy_pgset@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_pgset_get __db_vrfy_pgset_get@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_pgset_inc __db_vrfy_pgset_inc@DB_VERSION_UNIQUE_NAME@
-#define __db_vrfy_pgset_dec __db_vrfy_pgset_dec@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_pgset_next __db_vrfy_pgset_next@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_childcursor __db_vrfy_childcursor@DB_VERSION_UNIQUE_NAME@
#define __db_vrfy_childput __db_vrfy_childput@DB_VERSION_UNIQUE_NAME@
@@ -240,7 +271,10 @@
#define __bam_dpages __bam_dpages@DB_VERSION_UNIQUE_NAME@
#define __bam_db_create __bam_db_create@DB_VERSION_UNIQUE_NAME@
#define __bam_db_close __bam_db_close@DB_VERSION_UNIQUE_NAME@
+#define __bam_map_flags __bam_map_flags@DB_VERSION_UNIQUE_NAME@
#define __bam_set_flags __bam_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __bam_set_bt_compare __bam_set_bt_compare@DB_VERSION_UNIQUE_NAME@
+#define __ram_map_flags __ram_map_flags@DB_VERSION_UNIQUE_NAME@
#define __ram_set_flags __ram_set_flags@DB_VERSION_UNIQUE_NAME@
#define __bam_open __bam_open@DB_VERSION_UNIQUE_NAME@
#define __bam_metachk __bam_metachk@DB_VERSION_UNIQUE_NAME@
@@ -368,14 +402,15 @@
#ifndef HAVE_VSNPRINTF
#define vsnprintf vsnprintf@DB_VERSION_UNIQUE_NAME@
#endif
+#define __crypto_region_init __crypto_region_init@DB_VERSION_UNIQUE_NAME@
#define __db_isbigendian __db_isbigendian@DB_VERSION_UNIQUE_NAME@
#define __db_byteorder __db_byteorder@DB_VERSION_UNIQUE_NAME@
#define __db_fchk __db_fchk@DB_VERSION_UNIQUE_NAME@
#define __db_fcchk __db_fcchk@DB_VERSION_UNIQUE_NAME@
#define __db_ferr __db_ferr@DB_VERSION_UNIQUE_NAME@
+#define __db_fnl __db_fnl@DB_VERSION_UNIQUE_NAME@
#define __db_pgerr __db_pgerr@DB_VERSION_UNIQUE_NAME@
#define __db_pgfmt __db_pgfmt@DB_VERSION_UNIQUE_NAME@
-#define __db_eopnotsup __db_eopnotsup@DB_VERSION_UNIQUE_NAME@
#ifdef DIAGNOSTIC
#define __db_assert __db_assert@DB_VERSION_UNIQUE_NAME@
#endif
@@ -389,6 +424,8 @@
#define __db_unknown_type __db_unknown_type@DB_VERSION_UNIQUE_NAME@
#define __db_check_txn __db_check_txn@DB_VERSION_UNIQUE_NAME@
#define __db_not_txn_env __db_not_txn_env@DB_VERSION_UNIQUE_NAME@
+#define __db_rec_toobig __db_rec_toobig@DB_VERSION_UNIQUE_NAME@
+#define __db_rec_repl __db_rec_repl@DB_VERSION_UNIQUE_NAME@
#define __db_getlong __db_getlong@DB_VERSION_UNIQUE_NAME@
#define __db_getulong __db_getulong@DB_VERSION_UNIQUE_NAME@
#define __db_idspace __db_idspace@DB_VERSION_UNIQUE_NAME@
@@ -405,10 +442,10 @@
#define __aes_decrypt __aes_decrypt@DB_VERSION_UNIQUE_NAME@
#define __aes_encrypt __aes_encrypt@DB_VERSION_UNIQUE_NAME@
#define __aes_init __aes_init@DB_VERSION_UNIQUE_NAME@
-#define __crypto_region_init __crypto_region_init@DB_VERSION_UNIQUE_NAME@
#define __crypto_dbenv_close __crypto_dbenv_close@DB_VERSION_UNIQUE_NAME@
#define __crypto_algsetup __crypto_algsetup@DB_VERSION_UNIQUE_NAME@
#define __crypto_decrypt_meta __crypto_decrypt_meta@DB_VERSION_UNIQUE_NAME@
+#define __crypto_set_passwd __crypto_set_passwd@DB_VERSION_UNIQUE_NAME@
#define __db_generate_iv __db_generate_iv@DB_VERSION_UNIQUE_NAME@
#define __db_rijndaelKeySetupEnc __db_rijndaelKeySetupEnc@DB_VERSION_UNIQUE_NAME@
#define __db_rijndaelKeySetupDec __db_rijndaelKeySetupDec@DB_VERSION_UNIQUE_NAME@
@@ -426,6 +463,7 @@
#define __dbreg_setup __dbreg_setup@DB_VERSION_UNIQUE_NAME@
#define __dbreg_teardown __dbreg_teardown@DB_VERSION_UNIQUE_NAME@
#define __dbreg_new_id __dbreg_new_id@DB_VERSION_UNIQUE_NAME@
+#define __dbreg_get_id __dbreg_get_id@DB_VERSION_UNIQUE_NAME@
#define __dbreg_assign_id __dbreg_assign_id@DB_VERSION_UNIQUE_NAME@
#define __dbreg_revoke_id __dbreg_revoke_id@DB_VERSION_UNIQUE_NAME@
#define __dbreg_close_id __dbreg_close_id@DB_VERSION_UNIQUE_NAME@
@@ -441,7 +479,6 @@
#define __dbreg_rem_dbentry __dbreg_rem_dbentry@DB_VERSION_UNIQUE_NAME@
#define __dbreg_open_files __dbreg_open_files@DB_VERSION_UNIQUE_NAME@
#define __dbreg_close_files __dbreg_close_files@DB_VERSION_UNIQUE_NAME@
-#define __dbreg_nofiles __dbreg_nofiles@DB_VERSION_UNIQUE_NAME@
#define __dbreg_id_to_db __dbreg_id_to_db@DB_VERSION_UNIQUE_NAME@
#define __dbreg_id_to_db_int __dbreg_id_to_db_int@DB_VERSION_UNIQUE_NAME@
#define __dbreg_id_to_fname __dbreg_id_to_fname@DB_VERSION_UNIQUE_NAME@
@@ -463,12 +500,29 @@
#define __db_hashinit __db_hashinit@DB_VERSION_UNIQUE_NAME@
#define __db_fileinit __db_fileinit@DB_VERSION_UNIQUE_NAME@
#define __db_overwrite __db_overwrite@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_alloc __dbenv_set_alloc@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_get_encrypt_flags __dbenv_get_encrypt_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_encrypt __dbenv_set_encrypt@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_flags __dbenv_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_data_dir __dbenv_set_data_dir@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_errcall __dbenv_set_errcall@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_get_errfile __dbenv_get_errfile@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_errfile __dbenv_set_errfile@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_get_errpfx __dbenv_get_errpfx@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_errpfx __dbenv_set_errpfx@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_paniccall __dbenv_set_paniccall@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_shm_key __dbenv_set_shm_key@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_tas_spins __dbenv_set_tas_spins@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_tmp_dir __dbenv_set_tmp_dir@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_set_verbose __dbenv_set_verbose@DB_VERSION_UNIQUE_NAME@
#define __db_mi_env __db_mi_env@DB_VERSION_UNIQUE_NAME@
#define __db_mi_open __db_mi_open@DB_VERSION_UNIQUE_NAME@
#define __db_env_config __db_env_config@DB_VERSION_UNIQUE_NAME@
#define __dbenv_open __dbenv_open@DB_VERSION_UNIQUE_NAME@
#define __dbenv_remove __dbenv_remove@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_close_pp __dbenv_close_pp@DB_VERSION_UNIQUE_NAME@
#define __dbenv_close __dbenv_close@DB_VERSION_UNIQUE_NAME@
+#define __dbenv_get_open_flags __dbenv_get_open_flags@DB_VERSION_UNIQUE_NAME@
#define __db_appname __db_appname@DB_VERSION_UNIQUE_NAME@
#define __db_home __db_home@DB_VERSION_UNIQUE_NAME@
#define __db_apprec __db_apprec@DB_VERSION_UNIQUE_NAME@
@@ -620,6 +674,7 @@
#define __ham_truncate __ham_truncate@DB_VERSION_UNIQUE_NAME@
#define __ham_stat __ham_stat@DB_VERSION_UNIQUE_NAME@
#define __ham_traverse __ham_traverse@DB_VERSION_UNIQUE_NAME@
+#define __db_no_hash_am __db_no_hash_am@DB_VERSION_UNIQUE_NAME@
#define __ham_30_hashmeta __ham_30_hashmeta@DB_VERSION_UNIQUE_NAME@
#define __ham_30_sizefix __ham_30_sizefix@DB_VERSION_UNIQUE_NAME@
#define __ham_31_hashmeta __ham_31_hashmeta@DB_VERSION_UNIQUE_NAME@
@@ -637,10 +692,15 @@
#define __db_SHA1Init __db_SHA1Init@DB_VERSION_UNIQUE_NAME@
#define __db_SHA1Update __db_SHA1Update@DB_VERSION_UNIQUE_NAME@
#define __db_SHA1Final __db_SHA1Final@DB_VERSION_UNIQUE_NAME@
+#define __lock_id_pp __lock_id_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_id __lock_id@DB_VERSION_UNIQUE_NAME@
+#define __lock_id_free_pp __lock_id_free_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_id_free __lock_id_free@DB_VERSION_UNIQUE_NAME@
+#define __lock_vec_pp __lock_vec_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_vec __lock_vec@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_pp __lock_get_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_get __lock_get@DB_VERSION_UNIQUE_NAME@
+#define __lock_put_pp __lock_put_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_put __lock_put@DB_VERSION_UNIQUE_NAME@
#define __lock_downgrade __lock_downgrade@DB_VERSION_UNIQUE_NAME@
#define __lock_addfamilylocker __lock_addfamilylocker@DB_VERSION_UNIQUE_NAME@
@@ -650,14 +710,22 @@
#define __lock_getlocker __lock_getlocker@DB_VERSION_UNIQUE_NAME@
#define __lock_promote __lock_promote@DB_VERSION_UNIQUE_NAME@
#define __lock_expired __lock_expired@DB_VERSION_UNIQUE_NAME@
+#define __lock_get_list __lock_get_list@DB_VERSION_UNIQUE_NAME@
+#define __lock_detect_pp __lock_detect_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_detect __lock_detect@DB_VERSION_UNIQUE_NAME@
#define __lock_dbenv_create __lock_dbenv_create@DB_VERSION_UNIQUE_NAME@
#define __lock_dbenv_close __lock_dbenv_close@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_detect __lock_set_lk_detect@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_max __lock_set_lk_max@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_max_locks __lock_set_lk_max_locks@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_max_lockers __lock_set_lk_max_lockers@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_lk_max_objects __lock_set_lk_max_objects@DB_VERSION_UNIQUE_NAME@
+#define __lock_set_env_timeout __lock_set_env_timeout@DB_VERSION_UNIQUE_NAME@
#define __lock_open __lock_open@DB_VERSION_UNIQUE_NAME@
#define __lock_dbenv_refresh __lock_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
#define __lock_region_destroy __lock_region_destroy@DB_VERSION_UNIQUE_NAME@
#define __lock_id_set __lock_id_set@DB_VERSION_UNIQUE_NAME@
-#define __lock_stat __lock_stat@DB_VERSION_UNIQUE_NAME@
+#define __lock_stat_pp __lock_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __lock_dump_region __lock_dump_region@DB_VERSION_UNIQUE_NAME@
#define __lock_printlock __lock_printlock@DB_VERSION_UNIQUE_NAME@
#define __lock_cmp __lock_cmp@DB_VERSION_UNIQUE_NAME@
@@ -669,19 +737,31 @@
#define __log_find __log_find@DB_VERSION_UNIQUE_NAME@
#define __log_valid __log_valid@DB_VERSION_UNIQUE_NAME@
#define __log_dbenv_refresh __log_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
-#define __log_stat __log_stat@DB_VERSION_UNIQUE_NAME@
+#define __log_stat_pp __log_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __log_get_cached_ckp_lsn __log_get_cached_ckp_lsn@DB_VERSION_UNIQUE_NAME@
#define __log_region_destroy __log_region_destroy@DB_VERSION_UNIQUE_NAME@
#define __log_vtruncate __log_vtruncate@DB_VERSION_UNIQUE_NAME@
#define __log_is_outdated __log_is_outdated@DB_VERSION_UNIQUE_NAME@
+#define __log_autoremove __log_autoremove@DB_VERSION_UNIQUE_NAME@
+#define __log_archive_pp __log_archive_pp@DB_VERSION_UNIQUE_NAME@
#define __log_archive __log_archive@DB_VERSION_UNIQUE_NAME@
+#define __log_cursor_pp __log_cursor_pp@DB_VERSION_UNIQUE_NAME@
#define __log_cursor __log_cursor@DB_VERSION_UNIQUE_NAME@
+#define __log_c_close __log_c_close@DB_VERSION_UNIQUE_NAME@
+#define __log_c_get __log_c_get@DB_VERSION_UNIQUE_NAME@
#define __log_dbenv_create __log_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __log_set_lg_bsize __log_set_lg_bsize@DB_VERSION_UNIQUE_NAME@
+#define __log_set_lg_max __log_set_lg_max@DB_VERSION_UNIQUE_NAME@
+#define __log_set_lg_regionmax __log_set_lg_regionmax@DB_VERSION_UNIQUE_NAME@
+#define __log_set_lg_dir __log_set_lg_dir@DB_VERSION_UNIQUE_NAME@
+#define __log_put_pp __log_put_pp@DB_VERSION_UNIQUE_NAME@
#define __log_put __log_put@DB_VERSION_UNIQUE_NAME@
#define __log_txn_lsn __log_txn_lsn@DB_VERSION_UNIQUE_NAME@
#define __log_newfile __log_newfile@DB_VERSION_UNIQUE_NAME@
+#define __log_flush_pp __log_flush_pp@DB_VERSION_UNIQUE_NAME@
#define __log_flush __log_flush@DB_VERSION_UNIQUE_NAME@
-#define __log_file __log_file@DB_VERSION_UNIQUE_NAME@
+#define __log_flush_int __log_flush_int@DB_VERSION_UNIQUE_NAME@
+#define __log_file_pp __log_file_pp@DB_VERSION_UNIQUE_NAME@
#define __log_name __log_name@DB_VERSION_UNIQUE_NAME@
#define __log_rep_put __log_rep_put@DB_VERSION_UNIQUE_NAME@
#define __memp_alloc __memp_alloc@DB_VERSION_UNIQUE_NAME@
@@ -692,29 +772,50 @@
#define __memp_pgread __memp_pgread@DB_VERSION_UNIQUE_NAME@
#define __memp_pg __memp_pg@DB_VERSION_UNIQUE_NAME@
#define __memp_bhfree __memp_bhfree@DB_VERSION_UNIQUE_NAME@
+#define __memp_fget_pp __memp_fget_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fget __memp_fget@DB_VERSION_UNIQUE_NAME@
+#define __memp_fcreate_pp __memp_fcreate_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fcreate __memp_fcreate@DB_VERSION_UNIQUE_NAME@
-#define __memp_fopen_int __memp_fopen_int@DB_VERSION_UNIQUE_NAME@
-#define __memp_fclose_int __memp_fclose_int@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_clear_len __memp_set_clear_len@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_fileid __memp_get_fileid@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_fileid __memp_set_fileid@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_flags __memp_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_ftype __memp_get_ftype@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_ftype __memp_set_ftype@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_lsn_offset __memp_set_lsn_offset@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_pgcookie __memp_set_pgcookie@DB_VERSION_UNIQUE_NAME@
+#define __memp_fopen __memp_fopen@DB_VERSION_UNIQUE_NAME@
+#define __memp_last_pgno __memp_last_pgno@DB_VERSION_UNIQUE_NAME@
+#define __memp_fclose __memp_fclose@DB_VERSION_UNIQUE_NAME@
+#define __memp_mf_sync __memp_mf_sync@DB_VERSION_UNIQUE_NAME@
#define __memp_mf_discard __memp_mf_discard@DB_VERSION_UNIQUE_NAME@
#define __memp_fn __memp_fn@DB_VERSION_UNIQUE_NAME@
#define __memp_fns __memp_fns@DB_VERSION_UNIQUE_NAME@
+#define __memp_fput_pp __memp_fput_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fput __memp_fput@DB_VERSION_UNIQUE_NAME@
+#define __memp_fset_pp __memp_fset_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fset __memp_fset@DB_VERSION_UNIQUE_NAME@
#define __memp_dbenv_create __memp_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_cachesize __memp_get_cachesize@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_cachesize __memp_set_cachesize@DB_VERSION_UNIQUE_NAME@
+#define __memp_set_mp_mmapsize __memp_set_mp_mmapsize@DB_VERSION_UNIQUE_NAME@
+#define __memp_nameop __memp_nameop@DB_VERSION_UNIQUE_NAME@
+#define __memp_get_refcnt __memp_get_refcnt@DB_VERSION_UNIQUE_NAME@
#define __memp_open __memp_open@DB_VERSION_UNIQUE_NAME@
#define __memp_dbenv_refresh __memp_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
#define __mpool_region_destroy __mpool_region_destroy@DB_VERSION_UNIQUE_NAME@
-#define __memp_nameop __memp_nameop@DB_VERSION_UNIQUE_NAME@
+#define __memp_register_pp __memp_register_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_register __memp_register@DB_VERSION_UNIQUE_NAME@
-#define __memp_stat __memp_stat@DB_VERSION_UNIQUE_NAME@
+#define __memp_stat_pp __memp_stat_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_dump_region __memp_dump_region@DB_VERSION_UNIQUE_NAME@
#define __memp_stat_hash __memp_stat_hash@DB_VERSION_UNIQUE_NAME@
+#define __memp_sync_pp __memp_sync_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_sync __memp_sync@DB_VERSION_UNIQUE_NAME@
+#define __memp_fsync_pp __memp_fsync_pp@DB_VERSION_UNIQUE_NAME@
#define __memp_fsync __memp_fsync@DB_VERSION_UNIQUE_NAME@
#define __mp_xxx_fh __mp_xxx_fh@DB_VERSION_UNIQUE_NAME@
#define __memp_sync_int __memp_sync_int@DB_VERSION_UNIQUE_NAME@
-#define __memp_trickle __memp_trickle@DB_VERSION_UNIQUE_NAME@
+#define __memp_trickle_pp __memp_trickle_pp@DB_VERSION_UNIQUE_NAME@
#define __db_fcntl_mutex_init __db_fcntl_mutex_init@DB_VERSION_UNIQUE_NAME@
#define __db_fcntl_mutex_lock __db_fcntl_mutex_lock@DB_VERSION_UNIQUE_NAME@
#define __db_fcntl_mutex_unlock __db_fcntl_mutex_unlock@DB_VERSION_UNIQUE_NAME@
@@ -765,7 +866,9 @@
#define __os_unmapfile __os_unmapfile@DB_VERSION_UNIQUE_NAME@
#define __db_oflags __db_oflags@DB_VERSION_UNIQUE_NAME@
#define __db_omode __db_omode@DB_VERSION_UNIQUE_NAME@
+#define __os_have_direct __os_have_direct@DB_VERSION_UNIQUE_NAME@
#define __os_open __os_open@DB_VERSION_UNIQUE_NAME@
+#define __os_open_extend __os_open_extend@DB_VERSION_UNIQUE_NAME@
#ifdef HAVE_QNX
#define __os_shmname __os_shmname@DB_VERSION_UNIQUE_NAME@
#endif
@@ -786,18 +889,11 @@
#define __os_tmpdir __os_tmpdir@DB_VERSION_UNIQUE_NAME@
#define __os_region_unlink __os_region_unlink@DB_VERSION_UNIQUE_NAME@
#define __os_unlink __os_unlink@DB_VERSION_UNIQUE_NAME@
+#define __os_is_winnt __os_is_winnt@DB_VERSION_UNIQUE_NAME@
#if defined(DB_WIN32)
#define __os_win32_errno __os_win32_errno@DB_VERSION_UNIQUE_NAME@
#endif
-#define __os_fsync __os_fsync@DB_VERSION_UNIQUE_NAME@
-#define __os_openhandle __os_openhandle@DB_VERSION_UNIQUE_NAME@
-#define __os_closehandle __os_closehandle@DB_VERSION_UNIQUE_NAME@
-#define __os_io __os_io@DB_VERSION_UNIQUE_NAME@
-#define __os_read __os_read@DB_VERSION_UNIQUE_NAME@
-#define __os_write __os_write@DB_VERSION_UNIQUE_NAME@
-#define __os_exists __os_exists@DB_VERSION_UNIQUE_NAME@
-#define __os_ioinfo __os_ioinfo@DB_VERSION_UNIQUE_NAME@
-#define __os_is_winnt __os_is_winnt@DB_VERSION_UNIQUE_NAME@
+#define __os_have_direct __os_have_direct@DB_VERSION_UNIQUE_NAME@
#define __qam_position __qam_position@DB_VERSION_UNIQUE_NAME@
#define __qam_pitem __qam_pitem@DB_VERSION_UNIQUE_NAME@
#define __qam_append __qam_append@DB_VERSION_UNIQUE_NAME@
@@ -836,12 +932,14 @@
#define __qam_gen_filelist __qam_gen_filelist@DB_VERSION_UNIQUE_NAME@
#define __qam_extent_names __qam_extent_names@DB_VERSION_UNIQUE_NAME@
#define __qam_exid __qam_exid@DB_VERSION_UNIQUE_NAME@
+#define __qam_nameop __qam_nameop@DB_VERSION_UNIQUE_NAME@
#define __qam_db_create __qam_db_create@DB_VERSION_UNIQUE_NAME@
#define __qam_db_close __qam_db_close@DB_VERSION_UNIQUE_NAME@
#define __db_prqueue __db_prqueue@DB_VERSION_UNIQUE_NAME@
#define __qam_remove __qam_remove@DB_VERSION_UNIQUE_NAME@
#define __qam_rename __qam_rename@DB_VERSION_UNIQUE_NAME@
#define __qam_open __qam_open@DB_VERSION_UNIQUE_NAME@
+#define __qam_set_ext_data __qam_set_ext_data@DB_VERSION_UNIQUE_NAME@
#define __qam_metachk __qam_metachk@DB_VERSION_UNIQUE_NAME@
#define __qam_new_file __qam_new_file@DB_VERSION_UNIQUE_NAME@
#define __qam_incfirst_recover __qam_incfirst_recover@DB_VERSION_UNIQUE_NAME@
@@ -850,29 +948,45 @@
#define __qam_delext_recover __qam_delext_recover@DB_VERSION_UNIQUE_NAME@
#define __qam_add_recover __qam_add_recover@DB_VERSION_UNIQUE_NAME@
#define __qam_stat __qam_stat@DB_VERSION_UNIQUE_NAME@
+#define __db_no_queue_am __db_no_queue_am@DB_VERSION_UNIQUE_NAME@
#define __qam_31_qammeta __qam_31_qammeta@DB_VERSION_UNIQUE_NAME@
#define __qam_32_qammeta __qam_32_qammeta@DB_VERSION_UNIQUE_NAME@
#define __qam_vrfy_meta __qam_vrfy_meta@DB_VERSION_UNIQUE_NAME@
#define __qam_vrfy_data __qam_vrfy_data@DB_VERSION_UNIQUE_NAME@
#define __qam_vrfy_structure __qam_vrfy_structure@DB_VERSION_UNIQUE_NAME@
+#define __qam_vrfy_walkqueue __qam_vrfy_walkqueue@DB_VERSION_UNIQUE_NAME@
+#define __qam_salvage __qam_salvage@DB_VERSION_UNIQUE_NAME@
#define __rep_dbenv_create __rep_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __rep_open __rep_open@DB_VERSION_UNIQUE_NAME@
+#define __rep_elect_master __rep_elect_master@DB_VERSION_UNIQUE_NAME@
#define __rep_process_message __rep_process_message@DB_VERSION_UNIQUE_NAME@
#define __rep_process_txn __rep_process_txn@DB_VERSION_UNIQUE_NAME@
+#define __rep_tally __rep_tally@DB_VERSION_UNIQUE_NAME@
+#define __rep_cmp_vote __rep_cmp_vote@DB_VERSION_UNIQUE_NAME@
+#define __rep_cmp_vote2 __rep_cmp_vote2@DB_VERSION_UNIQUE_NAME@
#define __rep_region_init __rep_region_init@DB_VERSION_UNIQUE_NAME@
#define __rep_region_destroy __rep_region_destroy@DB_VERSION_UNIQUE_NAME@
+#define __rep_dbenv_refresh __rep_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
#define __rep_dbenv_close __rep_dbenv_close@DB_VERSION_UNIQUE_NAME@
#define __rep_preclose __rep_preclose@DB_VERSION_UNIQUE_NAME@
#define __rep_check_alloc __rep_check_alloc@DB_VERSION_UNIQUE_NAME@
#define __rep_send_message __rep_send_message@DB_VERSION_UNIQUE_NAME@
#define __rep_new_master __rep_new_master@DB_VERSION_UNIQUE_NAME@
-#define __rep_lockpgno_init __rep_lockpgno_init@DB_VERSION_UNIQUE_NAME@
-#define __rep_unlockpages __rep_unlockpages@DB_VERSION_UNIQUE_NAME@
-#define __rep_lockpages __rep_lockpages@DB_VERSION_UNIQUE_NAME@
#define __rep_is_client __rep_is_client@DB_VERSION_UNIQUE_NAME@
+#define __rep_noarchive __rep_noarchive@DB_VERSION_UNIQUE_NAME@
#define __rep_send_vote __rep_send_vote@DB_VERSION_UNIQUE_NAME@
+#define __rep_elect_done __rep_elect_done@DB_VERSION_UNIQUE_NAME@
#define __rep_grow_sites __rep_grow_sites@DB_VERSION_UNIQUE_NAME@
+#define __env_rep_enter __env_rep_enter@DB_VERSION_UNIQUE_NAME@
+#define __env_rep_exit __env_rep_exit@DB_VERSION_UNIQUE_NAME@
+#define __db_rep_enter __db_rep_enter@DB_VERSION_UNIQUE_NAME@
+#define __db_rep_exit __db_rep_exit@DB_VERSION_UNIQUE_NAME@
+#define __op_rep_enter __op_rep_enter@DB_VERSION_UNIQUE_NAME@
+#define __op_rep_exit __op_rep_exit@DB_VERSION_UNIQUE_NAME@
+#define __rep_get_gen __rep_get_gen@DB_VERSION_UNIQUE_NAME@
#define __rep_print_message __rep_print_message@DB_VERSION_UNIQUE_NAME@
#define __dbcl_envrpcserver __dbcl_envrpcserver@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_close_wrap __dbcl_env_close_wrap@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_open_wrap __dbcl_env_open_wrap@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_open_wrap __dbcl_db_open_wrap@DB_VERSION_UNIQUE_NAME@
#define __dbcl_refresh __dbcl_refresh@DB_VERSION_UNIQUE_NAME@
@@ -884,35 +998,60 @@
#define __dbcl_dbclose_common __dbcl_dbclose_common@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_alloc __dbcl_env_alloc@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_app_dispatch __dbcl_set_app_dispatch@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_get_cachesize __dbcl_env_get_cachesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_cachesize __dbcl_env_cachesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_close __dbcl_env_close@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_create __dbcl_env_create@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_data_dirs __dbcl_get_data_dirs@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_data_dir __dbcl_set_data_dir@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_dbremove __dbcl_env_dbremove@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_dbrename __dbcl_env_dbrename@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_get_encrypt_flags __dbcl_env_get_encrypt_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_encrypt __dbcl_env_encrypt@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_set_feedback __dbcl_env_set_feedback@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_get_flags __dbcl_env_get_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_flags __dbcl_env_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lg_bsize __dbcl_get_lg_bsize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lg_bsize __dbcl_set_lg_bsize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lg_dir __dbcl_get_lg_dir@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lg_dir __dbcl_set_lg_dir@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lg_max __dbcl_get_lg_max@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lg_max __dbcl_set_lg_max@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lg_regionmax __dbcl_get_lg_regionmax@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lg_regionmax __dbcl_set_lg_regionmax@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lk_conflicts __dbcl_get_lk_conflicts@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_conflict __dbcl_set_lk_conflict@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lk_detect __dbcl_get_lk_detect@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_detect __dbcl_set_lk_detect@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_max __dbcl_set_lk_max@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lk_max_locks __dbcl_get_lk_max_locks@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_max_locks __dbcl_set_lk_max_locks@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lk_max_lockers __dbcl_get_lk_max_lockers@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_max_lockers __dbcl_set_lk_max_lockers@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_lk_max_objects __dbcl_get_lk_max_objects@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_lk_max_objects __dbcl_set_lk_max_objects@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_mp_maxwrite __dbcl_get_mp_maxwrite@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_set_mp_maxwrite __dbcl_set_mp_maxwrite@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_mp_mmapsize __dbcl_get_mp_mmapsize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_mp_mmapsize __dbcl_set_mp_mmapsize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_get_home __dbcl_env_get_home@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_env_get_open_flags __dbcl_env_get_open_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_open __dbcl_env_open@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_paniccall __dbcl_env_paniccall@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_remove __dbcl_env_remove@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_shm_key __dbcl_get_shm_key@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_shm_key __dbcl_set_shm_key@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_tas_spins __dbcl_get_tas_spins@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_tas_spins __dbcl_set_tas_spins@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_timeout __dbcl_get_timeout@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_timeout __dbcl_set_timeout@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_tmp_dir __dbcl_get_tmp_dir@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_tmp_dir __dbcl_set_tmp_dir@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_tx_max __dbcl_get_tx_max@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_tx_max __dbcl_set_tx_max@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_tx_timestamp __dbcl_get_tx_timestamp@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_tx_timestamp __dbcl_set_tx_timestamp@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_get_verbose __dbcl_get_verbose@DB_VERSION_UNIQUE_NAME@
#define __dbcl_set_verbose __dbcl_set_verbose@DB_VERSION_UNIQUE_NAME@
#define __dbcl_txn_abort __dbcl_txn_abort@DB_VERSION_UNIQUE_NAME@
#define __dbcl_txn_begin __dbcl_txn_begin@DB_VERSION_UNIQUE_NAME@
@@ -926,6 +1065,7 @@
#define __dbcl_rep_elect __dbcl_rep_elect@DB_VERSION_UNIQUE_NAME@
#define __dbcl_rep_flush __dbcl_rep_flush@DB_VERSION_UNIQUE_NAME@
#define __dbcl_rep_process_message __dbcl_rep_process_message@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_rep_get_limit __dbcl_rep_get_limit@DB_VERSION_UNIQUE_NAME@
#define __dbcl_rep_set_limit __dbcl_rep_set_limit@DB_VERSION_UNIQUE_NAME@
#define __dbcl_rep_set_request __dbcl_rep_set_request@DB_VERSION_UNIQUE_NAME@
#define __dbcl_rep_set_rep_transport __dbcl_rep_set_rep_transport@DB_VERSION_UNIQUE_NAME@
@@ -935,34 +1075,48 @@
#define __dbcl_db_associate __dbcl_db_associate@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_bt_compare __dbcl_db_bt_compare@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_bt_maxkey __dbcl_db_bt_maxkey@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_bt_minkey __dbcl_db_get_bt_minkey@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_bt_minkey __dbcl_db_bt_minkey@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_bt_prefix __dbcl_db_bt_prefix@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_set_append_recno __dbcl_db_set_append_recno@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_db_cache_priority __dbcl_db_cache_priority@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_cachesize __dbcl_db_get_cachesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_cachesize __dbcl_db_cachesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_close __dbcl_db_close@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_create __dbcl_db_create@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_del __dbcl_db_del@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_dup_compare __dbcl_db_dup_compare@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_encrypt_flags __dbcl_db_get_encrypt_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_encrypt __dbcl_db_encrypt@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_extentsize __dbcl_db_get_extentsize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_extentsize __dbcl_db_extentsize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_fd __dbcl_db_fd@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_feedback __dbcl_db_feedback@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_flags __dbcl_db_get_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_flags __dbcl_db_flags@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_get __dbcl_db_get@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_name __dbcl_db_get_name@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_open_flags __dbcl_db_get_open_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_h_ffactor __dbcl_db_get_h_ffactor@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_h_ffactor __dbcl_db_h_ffactor@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_h_hash __dbcl_db_h_hash@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_h_nelem __dbcl_db_get_h_nelem@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_h_nelem __dbcl_db_h_nelem@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_key_range __dbcl_db_key_range@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_lorder __dbcl_db_get_lorder@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_lorder __dbcl_db_lorder@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_open __dbcl_db_open@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_pagesize __dbcl_db_get_pagesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_pagesize __dbcl_db_pagesize@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_panic __dbcl_db_panic@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_pget __dbcl_db_pget@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_put __dbcl_db_put@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_re_delim __dbcl_db_get_re_delim@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_re_delim __dbcl_db_re_delim@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_re_len __dbcl_db_get_re_len@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_re_len __dbcl_db_re_len@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_re_pad __dbcl_db_re_pad@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_re_pad __dbcl_db_get_re_pad@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_db_get_re_source __dbcl_db_get_re_source@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_re_source __dbcl_db_re_source@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_remove __dbcl_db_remove@DB_VERSION_UNIQUE_NAME@
#define __dbcl_db_rename __dbcl_db_rename@DB_VERSION_UNIQUE_NAME@
@@ -993,12 +1147,31 @@
#define __dbcl_log_flush __dbcl_log_flush@DB_VERSION_UNIQUE_NAME@
#define __dbcl_log_put __dbcl_log_put@DB_VERSION_UNIQUE_NAME@
#define __dbcl_log_stat __dbcl_log_stat@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_memp_fcreate __dbcl_memp_fcreate@DB_VERSION_UNIQUE_NAME@
#define __dbcl_memp_register __dbcl_memp_register@DB_VERSION_UNIQUE_NAME@
#define __dbcl_memp_stat __dbcl_memp_stat@DB_VERSION_UNIQUE_NAME@
#define __dbcl_memp_sync __dbcl_memp_sync@DB_VERSION_UNIQUE_NAME@
#define __dbcl_memp_trickle __dbcl_memp_trickle@DB_VERSION_UNIQUE_NAME@
-#define __dbcl_env_close_ret __dbcl_env_close_ret@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_fget __dbcl_memp_fget@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_fopen __dbcl_memp_fopen@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_fput __dbcl_memp_fput@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_fset __dbcl_memp_fset@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_clear_len __dbcl_memp_get_clear_len@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_clear_len __dbcl_memp_set_clear_len@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_fileid __dbcl_memp_get_fileid@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_fileid __dbcl_memp_set_fileid@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_flags __dbcl_memp_get_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_flags __dbcl_memp_set_flags@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_ftype __dbcl_memp_get_ftype@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_ftype __dbcl_memp_set_ftype@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_lsn_offset __dbcl_memp_get_lsn_offset@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_lsn_offset __dbcl_memp_set_lsn_offset@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_maxsize __dbcl_memp_get_maxsize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_maxsize __dbcl_memp_set_maxsize@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_pgcookie __dbcl_memp_get_pgcookie@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_pgcookie __dbcl_memp_set_pgcookie@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_get_priority __dbcl_memp_get_priority@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_set_priority __dbcl_memp_set_priority@DB_VERSION_UNIQUE_NAME@
+#define __dbcl_memp_fsync __dbcl_memp_fsync@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_create_ret __dbcl_env_create_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_open_ret __dbcl_env_open_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_env_remove_ret __dbcl_env_remove_ret@DB_VERSION_UNIQUE_NAME@
@@ -1026,13 +1199,18 @@
#define __dbcl_dbc_get_ret __dbcl_dbc_get_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_dbc_pget_ret __dbcl_dbc_pget_ret@DB_VERSION_UNIQUE_NAME@
#define __dbcl_dbc_put_ret __dbcl_dbc_put_ret@DB_VERSION_UNIQUE_NAME@
+#define __env_get_cachesize_proc __env_get_cachesize_proc@DB_VERSION_UNIQUE_NAME@
#define __env_cachesize_proc __env_cachesize_proc@DB_VERSION_UNIQUE_NAME@
#define __env_close_proc __env_close_proc@DB_VERSION_UNIQUE_NAME@
#define __env_create_proc __env_create_proc@DB_VERSION_UNIQUE_NAME@
#define __env_dbremove_proc __env_dbremove_proc@DB_VERSION_UNIQUE_NAME@
#define __env_dbrename_proc __env_dbrename_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_get_encrypt_flags_proc __env_get_encrypt_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __env_encrypt_proc __env_encrypt_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_get_flags_proc __env_get_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __env_flags_proc __env_flags_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_get_home_proc __env_get_home_proc@DB_VERSION_UNIQUE_NAME@
+#define __env_get_open_flags_proc __env_get_open_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __env_open_proc __env_open_proc@DB_VERSION_UNIQUE_NAME@
#define __env_remove_proc __env_remove_proc@DB_VERSION_UNIQUE_NAME@
#define __txn_abort_proc __txn_abort_proc@DB_VERSION_UNIQUE_NAME@
@@ -1043,24 +1221,37 @@
#define __txn_recover_proc __txn_recover_proc@DB_VERSION_UNIQUE_NAME@
#define __db_bt_maxkey_proc __db_bt_maxkey_proc@DB_VERSION_UNIQUE_NAME@
#define __db_associate_proc __db_associate_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_bt_minkey_proc __db_get_bt_minkey_proc@DB_VERSION_UNIQUE_NAME@
#define __db_bt_minkey_proc __db_bt_minkey_proc@DB_VERSION_UNIQUE_NAME@
#define __db_close_proc __db_close_proc@DB_VERSION_UNIQUE_NAME@
#define __db_create_proc __db_create_proc@DB_VERSION_UNIQUE_NAME@
#define __db_del_proc __db_del_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_encrypt_flags_proc __db_get_encrypt_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __db_encrypt_proc __db_encrypt_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_extentsize_proc __db_get_extentsize_proc@DB_VERSION_UNIQUE_NAME@
#define __db_extentsize_proc __db_extentsize_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_flags_proc __db_get_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __db_flags_proc __db_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __db_get_proc __db_get_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_h_ffactor_proc __db_get_h_ffactor_proc@DB_VERSION_UNIQUE_NAME@
#define __db_h_ffactor_proc __db_h_ffactor_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_h_nelem_proc __db_get_h_nelem_proc@DB_VERSION_UNIQUE_NAME@
#define __db_h_nelem_proc __db_h_nelem_proc@DB_VERSION_UNIQUE_NAME@
#define __db_key_range_proc __db_key_range_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_lorder_proc __db_get_lorder_proc@DB_VERSION_UNIQUE_NAME@
#define __db_lorder_proc __db_lorder_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_name_proc __db_get_name_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_open_flags_proc __db_get_open_flags_proc@DB_VERSION_UNIQUE_NAME@
#define __db_open_proc __db_open_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_pagesize_proc __db_get_pagesize_proc@DB_VERSION_UNIQUE_NAME@
#define __db_pagesize_proc __db_pagesize_proc@DB_VERSION_UNIQUE_NAME@
#define __db_pget_proc __db_pget_proc@DB_VERSION_UNIQUE_NAME@
#define __db_put_proc __db_put_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_re_delim_proc __db_get_re_delim_proc@DB_VERSION_UNIQUE_NAME@
#define __db_re_delim_proc __db_re_delim_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_re_len_proc __db_get_re_len_proc@DB_VERSION_UNIQUE_NAME@
#define __db_re_len_proc __db_re_len_proc@DB_VERSION_UNIQUE_NAME@
+#define __db_get_re_pad_proc __db_get_re_pad_proc@DB_VERSION_UNIQUE_NAME@
#define __db_re_pad_proc __db_re_pad_proc@DB_VERSION_UNIQUE_NAME@
#define __db_remove_proc __db_remove_proc@DB_VERSION_UNIQUE_NAME@
#define __db_rename_proc __db_rename_proc@DB_VERSION_UNIQUE_NAME@
@@ -1088,7 +1279,7 @@
#define __db_close_int __db_close_int@DB_VERSION_UNIQUE_NAME@
#define __dbc_close_int __dbc_close_int@DB_VERSION_UNIQUE_NAME@
#define __dbenv_close_int __dbenv_close_int@DB_VERSION_UNIQUE_NAME@
-#define get_home get_home@DB_VERSION_UNIQUE_NAME@
+#define get_fullhome get_fullhome@DB_VERSION_UNIQUE_NAME@
#define bdb_HCommand bdb_HCommand@DB_VERSION_UNIQUE_NAME@
#if DB_DBM_HSEARCH != 0
#define bdb_NdbmOpen bdb_NdbmOpen@DB_VERSION_UNIQUE_NAME@
@@ -1104,7 +1295,9 @@
#define tcl_EnvRemove tcl_EnvRemove@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvVerbose tcl_EnvVerbose@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvAttr tcl_EnvAttr@DB_VERSION_UNIQUE_NAME@
+#define tcl_EnvSetFlags tcl_EnvSetFlags@DB_VERSION_UNIQUE_NAME@
#define tcl_EnvTest tcl_EnvTest@DB_VERSION_UNIQUE_NAME@
+#define tcl_EnvGetEncryptFlags tcl_EnvGetEncryptFlags@DB_VERSION_UNIQUE_NAME@
#define _NewInfo _NewInfo@DB_VERSION_UNIQUE_NAME@
#define _NameToPtr _NameToPtr@DB_VERSION_UNIQUE_NAME@
#define _PtrToInfo _PtrToInfo@DB_VERSION_UNIQUE_NAME@
@@ -1158,6 +1351,7 @@
#define tcl_TxnRecover tcl_TxnRecover@DB_VERSION_UNIQUE_NAME@
#define bdb_RandCommand bdb_RandCommand@DB_VERSION_UNIQUE_NAME@
#define tcl_Mutex tcl_Mutex@DB_VERSION_UNIQUE_NAME@
+#define __txn_begin_pp __txn_begin_pp@DB_VERSION_UNIQUE_NAME@
#define __txn_begin __txn_begin@DB_VERSION_UNIQUE_NAME@
#define __txn_xa_begin __txn_xa_begin@DB_VERSION_UNIQUE_NAME@
#define __txn_compensate_begin __txn_compensate_begin@DB_VERSION_UNIQUE_NAME@
@@ -1166,6 +1360,8 @@
#define __txn_discard __txn_discard@DB_VERSION_UNIQUE_NAME@
#define __txn_prepare __txn_prepare@DB_VERSION_UNIQUE_NAME@
#define __txn_id __txn_id@DB_VERSION_UNIQUE_NAME@
+#define __txn_set_timeout __txn_set_timeout@DB_VERSION_UNIQUE_NAME@
+#define __txn_checkpoint_pp __txn_checkpoint_pp@DB_VERSION_UNIQUE_NAME@
#define __txn_checkpoint __txn_checkpoint@DB_VERSION_UNIQUE_NAME@
#define __txn_getckp __txn_getckp@DB_VERSION_UNIQUE_NAME@
#define __txn_activekids __txn_activekids@DB_VERSION_UNIQUE_NAME@
@@ -1197,6 +1393,7 @@
#define __txn_init_getpgnos __txn_init_getpgnos@DB_VERSION_UNIQUE_NAME@
#define __txn_init_recover __txn_init_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_dbenv_create __txn_dbenv_create@DB_VERSION_UNIQUE_NAME@
+#define __txn_set_tx_max __txn_set_tx_max@DB_VERSION_UNIQUE_NAME@
#define __txn_regop_recover __txn_regop_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_xa_regop_recover __txn_xa_regop_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_ckp_recover __txn_ckp_recover@DB_VERSION_UNIQUE_NAME@
@@ -1205,17 +1402,21 @@
#define __txn_recycle_recover __txn_recycle_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_continue __txn_continue@DB_VERSION_UNIQUE_NAME@
#define __txn_map_gid __txn_map_gid@DB_VERSION_UNIQUE_NAME@
+#define __txn_recover_pp __txn_recover_pp@DB_VERSION_UNIQUE_NAME@
#define __txn_recover __txn_recover@DB_VERSION_UNIQUE_NAME@
#define __txn_get_prepared __txn_get_prepared@DB_VERSION_UNIQUE_NAME@
#define __txn_open __txn_open@DB_VERSION_UNIQUE_NAME@
#define __txn_dbenv_refresh __txn_dbenv_refresh@DB_VERSION_UNIQUE_NAME@
#define __txn_region_destroy __txn_region_destroy@DB_VERSION_UNIQUE_NAME@
#define __txn_id_set __txn_id_set@DB_VERSION_UNIQUE_NAME@
-#define __txn_stat __txn_stat@DB_VERSION_UNIQUE_NAME@
+#define __txn_stat_pp __txn_stat_pp@DB_VERSION_UNIQUE_NAME@
+#define __txn_closeevent __txn_closeevent@DB_VERSION_UNIQUE_NAME@
#define __txn_remevent __txn_remevent@DB_VERSION_UNIQUE_NAME@
+#define __txn_remrem __txn_remrem@DB_VERSION_UNIQUE_NAME@
#define __txn_lockevent __txn_lockevent@DB_VERSION_UNIQUE_NAME@
#define __txn_remlock __txn_remlock@DB_VERSION_UNIQUE_NAME@
#define __txn_doevents __txn_doevents@DB_VERSION_UNIQUE_NAME@
+#define __xa_get_txn __xa_get_txn@DB_VERSION_UNIQUE_NAME@
#define __db_xa_create __db_xa_create@DB_VERSION_UNIQUE_NAME@
#define __db_rmid_to_env __db_rmid_to_env@DB_VERSION_UNIQUE_NAME@
#define __db_xid_to_txn __db_xid_to_txn@DB_VERSION_UNIQUE_NAME@
@@ -1223,6 +1424,8 @@
#define __db_unmap_rmid __db_unmap_rmid@DB_VERSION_UNIQUE_NAME@
#define __db_map_xid __db_map_xid@DB_VERSION_UNIQUE_NAME@
#define __db_unmap_xid __db_unmap_xid@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_cachesize_msg xdr___env_get_cachesize_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_cachesize_reply xdr___env_get_cachesize_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_cachesize_msg xdr___env_cachesize_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___env_cachesize_reply xdr___env_cachesize_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_close_msg xdr___env_close_msg@DB_VERSION_UNIQUE_NAME@
@@ -1233,10 +1436,18 @@
#define xdr___env_dbremove_reply xdr___env_dbremove_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_dbrename_msg xdr___env_dbrename_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___env_dbrename_reply xdr___env_dbrename_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_encrypt_flags_msg xdr___env_get_encrypt_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_encrypt_flags_reply xdr___env_get_encrypt_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_encrypt_msg xdr___env_encrypt_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___env_encrypt_reply xdr___env_encrypt_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_flags_msg xdr___env_get_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_flags_reply xdr___env_get_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_flags_msg xdr___env_flags_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___env_flags_reply xdr___env_flags_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_home_msg xdr___env_get_home_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_home_reply xdr___env_get_home_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_open_flags_msg xdr___env_get_open_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___env_get_open_flags_reply xdr___env_get_open_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_open_msg xdr___env_open_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___env_open_reply xdr___env_open_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___env_remove_msg xdr___env_remove_msg@DB_VERSION_UNIQUE_NAME@
@@ -1257,6 +1468,8 @@
#define xdr___db_associate_reply xdr___db_associate_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_bt_maxkey_msg xdr___db_bt_maxkey_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_bt_maxkey_reply xdr___db_bt_maxkey_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_bt_minkey_msg xdr___db_get_bt_minkey_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_bt_minkey_reply xdr___db_get_bt_minkey_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_bt_minkey_msg xdr___db_bt_minkey_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_bt_minkey_reply xdr___db_bt_minkey_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_close_msg xdr___db_close_msg@DB_VERSION_UNIQUE_NAME@
@@ -1265,36 +1478,60 @@
#define xdr___db_create_reply xdr___db_create_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_del_msg xdr___db_del_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_del_reply xdr___db_del_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_encrypt_flags_msg xdr___db_get_encrypt_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_encrypt_flags_reply xdr___db_get_encrypt_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_encrypt_msg xdr___db_encrypt_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_encrypt_reply xdr___db_encrypt_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_extentsize_msg xdr___db_get_extentsize_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_extentsize_reply xdr___db_get_extentsize_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_extentsize_msg xdr___db_extentsize_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_extentsize_reply xdr___db_extentsize_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_flags_msg xdr___db_get_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_flags_reply xdr___db_get_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_flags_msg xdr___db_flags_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_flags_reply xdr___db_flags_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_get_msg xdr___db_get_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_get_reply xdr___db_get_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_name_msg xdr___db_get_name_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_name_reply xdr___db_get_name_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_open_flags_msg xdr___db_get_open_flags_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_open_flags_reply xdr___db_get_open_flags_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_h_ffactor_msg xdr___db_get_h_ffactor_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_h_ffactor_reply xdr___db_get_h_ffactor_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_h_ffactor_msg xdr___db_h_ffactor_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_h_ffactor_reply xdr___db_h_ffactor_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_h_nelem_msg xdr___db_get_h_nelem_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_h_nelem_reply xdr___db_get_h_nelem_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_h_nelem_msg xdr___db_h_nelem_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_h_nelem_reply xdr___db_h_nelem_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_key_range_msg xdr___db_key_range_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_key_range_reply xdr___db_key_range_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_lorder_msg xdr___db_get_lorder_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_lorder_reply xdr___db_get_lorder_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_lorder_msg xdr___db_lorder_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_lorder_reply xdr___db_lorder_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_open_msg xdr___db_open_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_open_reply xdr___db_open_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_pagesize_msg xdr___db_get_pagesize_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_pagesize_reply xdr___db_get_pagesize_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_pagesize_msg xdr___db_pagesize_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_pagesize_reply xdr___db_pagesize_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_pget_msg xdr___db_pget_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_pget_reply xdr___db_pget_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_put_msg xdr___db_put_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_put_reply xdr___db_put_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_delim_msg xdr___db_get_re_delim_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_delim_reply xdr___db_get_re_delim_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_delim_msg xdr___db_re_delim_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_delim_reply xdr___db_re_delim_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_len_msg xdr___db_get_re_len_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_len_reply xdr___db_get_re_len_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_len_msg xdr___db_re_len_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_len_reply xdr___db_re_len_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_pad_msg xdr___db_re_pad_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_re_pad_reply xdr___db_re_pad_reply@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_pad_msg xdr___db_get_re_pad_msg@DB_VERSION_UNIQUE_NAME@
+#define xdr___db_get_re_pad_reply xdr___db_get_re_pad_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_remove_msg xdr___db_remove_msg@DB_VERSION_UNIQUE_NAME@
#define xdr___db_remove_reply xdr___db_remove_reply@DB_VERSION_UNIQUE_NAME@
#define xdr___db_rename_msg xdr___db_rename_msg@DB_VERSION_UNIQUE_NAME@
diff --git a/db/dbinc_auto/lock_ext.h b/db/dbinc_auto/lock_ext.h
index be6b1d06d..535dc5315 100644
--- a/db/dbinc_auto/lock_ext.h
+++ b/db/dbinc_auto/lock_ext.h
@@ -6,10 +6,15 @@
extern "C" {
#endif
-int __lock_id __P((DB_ENV *, u_int32_t *));
-int __lock_id_free __P((DB_ENV *, u_int32_t));
+int __lock_id_pp __P((DB_ENV *, u_int32_t *));
+int __lock_id __P((DB_ENV *, u_int32_t *));
+int __lock_id_free_pp __P((DB_ENV *, u_int32_t));
+int __lock_id_free __P((DB_ENV *, u_int32_t));
+int __lock_vec_pp __P((DB_ENV *, u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
int __lock_vec __P((DB_ENV *, u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
+int __lock_get_pp __P((DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
int __lock_get __P((DB_ENV *, u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
+int __lock_put_pp __P((DB_ENV *, DB_LOCK *));
int __lock_put __P((DB_ENV *, DB_LOCK *));
int __lock_downgrade __P((DB_ENV *, DB_LOCK *, db_lockmode_t, u_int32_t));
int __lock_addfamilylocker __P((DB_ENV *, u_int32_t, u_int32_t));
@@ -19,16 +24,24 @@ int __lock_inherit_timeout __P(( DB_ENV *, u_int32_t, u_int32_t));
int __lock_getlocker __P((DB_LOCKTAB *, u_int32_t, u_int32_t, int, DB_LOCKER **));
int __lock_promote __P((DB_LOCKTAB *, DB_LOCKOBJ *, u_int32_t));
int __lock_expired __P((DB_ENV *, db_timeval_t *, db_timeval_t *));
-int __lock_detect __P((DB_ENV *, u_int32_t, u_int32_t, int *));
+int __lock_get_list __P((DB_ENV *, u_int32_t, u_int32_t, db_lockmode_t, DBT *));
+int __lock_detect_pp __P((DB_ENV *, u_int32_t, u_int32_t, int *));
+int __lock_detect __P((DB_ENV *, u_int32_t, int *));
void __lock_dbenv_create __P((DB_ENV *));
void __lock_dbenv_close __P((DB_ENV *));
+int __lock_set_lk_detect __P((DB_ENV *, u_int32_t));
+int __lock_set_lk_max __P((DB_ENV *, u_int32_t));
+int __lock_set_lk_max_locks __P((DB_ENV *, u_int32_t));
+int __lock_set_lk_max_lockers __P((DB_ENV *, u_int32_t));
+int __lock_set_lk_max_objects __P((DB_ENV *, u_int32_t));
+int __lock_set_env_timeout __P((DB_ENV *, db_timeout_t, u_int32_t));
int __lock_open __P((DB_ENV *));
int __lock_dbenv_refresh __P((DB_ENV *));
void __lock_region_destroy __P((DB_ENV *, REGINFO *));
int __lock_id_set __P((DB_ENV *, u_int32_t, u_int32_t));
-int __lock_stat __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
-int __lock_dump_region __P((DB_ENV *, char *, FILE *));
-void __lock_printlock __P((DB_LOCKTAB *, struct __db_lock *, int));
+int __lock_stat_pp __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
+int __lock_dump_region __P((DB_ENV *, const char *, FILE *));
+void __lock_printlock __P((DB_LOCKTAB *, struct __db_lock *, int, FILE *));
int __lock_cmp __P((const DBT *, DB_LOCKOBJ *));
int __lock_locker_cmp __P((u_int32_t, DB_LOCKER *));
u_int32_t __lock_ohash __P((const DBT *));
diff --git a/db/dbinc_auto/log_ext.h b/db/dbinc_auto/log_ext.h
index 6fc69afd2..f979d1fad 100644
--- a/db/dbinc_auto/log_ext.h
+++ b/db/dbinc_auto/log_ext.h
@@ -8,22 +8,34 @@ extern "C" {
int __log_open __P((DB_ENV *));
int __log_find __P((DB_LOG *, int, u_int32_t *, logfile_validity *));
-int __log_valid __P((DB_LOG *, u_int32_t, int, logfile_validity *));
+int __log_valid __P((DB_LOG *, u_int32_t, int, DB_FH **, int, logfile_validity *));
int __log_dbenv_refresh __P((DB_ENV *));
-int __log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
+int __log_stat_pp __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
void __log_get_cached_ckp_lsn __P((DB_ENV *, DB_LSN *));
void __log_region_destroy __P((DB_ENV *, REGINFO *));
-int __log_vtruncate __P((DB_ENV *, DB_LSN *, DB_LSN *));
-int __log_is_outdated __P((DB_ENV *dbenv, u_int32_t fnum, int *outdatedp));
+int __log_vtruncate __P((DB_ENV *, DB_LSN *, DB_LSN *, DB_LSN *));
+int __log_is_outdated __P((DB_ENV *, u_int32_t, int *));
+void __log_autoremove __P((DB_ENV *));
+int __log_archive_pp __P((DB_ENV *, char **[], u_int32_t));
int __log_archive __P((DB_ENV *, char **[], u_int32_t));
-int __log_cursor __P((DB_ENV *, DB_LOGC **, u_int32_t));
+int __log_cursor_pp __P((DB_ENV *, DB_LOGC **, u_int32_t));
+int __log_cursor __P((DB_ENV *, DB_LOGC **));
+int __log_c_close __P((DB_LOGC *));
+int __log_c_get __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
void __log_dbenv_create __P((DB_ENV *));
+int __log_set_lg_bsize __P((DB_ENV *, u_int32_t));
+int __log_set_lg_max __P((DB_ENV *, u_int32_t));
+int __log_set_lg_regionmax __P((DB_ENV *, u_int32_t));
+int __log_set_lg_dir __P((DB_ENV *, const char *));
+int __log_put_pp __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
int __log_put __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
void __log_txn_lsn __P((DB_ENV *, DB_LSN *, u_int32_t *, u_int32_t *));
int __log_newfile __P((DB_LOG *, DB_LSN *));
+int __log_flush_pp __P((DB_ENV *, const DB_LSN *));
int __log_flush __P((DB_ENV *, const DB_LSN *));
-int __log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
-int __log_name __P((DB_LOG *, u_int32_t, char **, DB_FH *, u_int32_t));
+int __log_flush_int __P((DB_LOG *, const DB_LSN *, int));
+int __log_file_pp __P((DB_ENV *, const DB_LSN *, char *, size_t));
+int __log_name __P((DB_LOG *, u_int32_t, char **, DB_FH **, u_int32_t));
int __log_rep_put __P((DB_ENV *, DB_LSN *, const DBT *));
#if defined(__cplusplus)
diff --git a/db/dbinc_auto/mp_ext.h b/db/dbinc_auto/mp_ext.h
index ceadb3d9a..0ea6b9fec 100644
--- a/db/dbinc_auto/mp_ext.h
+++ b/db/dbinc_auto/mp_ext.h
@@ -14,29 +14,50 @@ int __memp_bhwrite __P((DB_MPOOL *, DB_MPOOL_HASH *, MPOOLFILE *, BH *, int));
int __memp_pgread __P((DB_MPOOLFILE *, DB_MUTEX *, BH *, int));
int __memp_pg __P((DB_MPOOLFILE *, BH *, int));
void __memp_bhfree __P((DB_MPOOL *, DB_MPOOL_HASH *, BH *, int));
+int __memp_fget_pp __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
int __memp_fget __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
-int __memp_fcreate __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
-int __memp_fopen_int __P((DB_MPOOLFILE *, MPOOLFILE *, const char *, u_int32_t, int, size_t));
-int __memp_fclose_int __P((DB_MPOOLFILE *, u_int32_t));
+int __memp_fcreate_pp __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
+int __memp_fcreate __P((DB_ENV *, DB_MPOOLFILE **));
+int __memp_set_clear_len __P((DB_MPOOLFILE *, u_int32_t));
+int __memp_get_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+int __memp_set_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+int __memp_set_flags __P((DB_MPOOLFILE *, u_int32_t, int));
+int __memp_get_ftype __P((DB_MPOOLFILE *, int *));
+int __memp_set_ftype __P((DB_MPOOLFILE *, int));
+int __memp_set_lsn_offset __P((DB_MPOOLFILE *, int32_t));
+int __memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
+int __memp_fopen __P((DB_MPOOLFILE *, MPOOLFILE *, const char *, u_int32_t, int, size_t));
+void __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
+int __memp_fclose __P((DB_MPOOLFILE *, u_int32_t));
+int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *));
int __memp_mf_discard __P((DB_MPOOL *, MPOOLFILE *));
char * __memp_fn __P((DB_MPOOLFILE *));
char * __memp_fns __P((DB_MPOOL *, MPOOLFILE *));
+int __memp_fput_pp __P((DB_MPOOLFILE *, void *, u_int32_t));
int __memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
+int __memp_fset_pp __P((DB_MPOOLFILE *, void *, u_int32_t));
int __memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
void __memp_dbenv_create __P((DB_ENV *));
+int __memp_get_cachesize __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
+int __memp_set_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
+int __memp_set_mp_mmapsize __P((DB_ENV *, size_t));
+int __memp_nameop __P((DB_ENV *, u_int8_t *, const char *, const char *, const char *));
+int __memp_get_refcnt __P((DB_ENV *, u_int8_t *, int *));
int __memp_open __P((DB_ENV *));
int __memp_dbenv_refresh __P((DB_ENV *));
void __mpool_region_destroy __P((DB_ENV *, REGINFO *));
-int __memp_nameop __P((DB_ENV *, u_int8_t *, const char *, const char *, const char *));
+int __memp_register_pp __P((DB_ENV *, int, int (*)(DB_ENV *, db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
int __memp_register __P((DB_ENV *, int, int (*)(DB_ENV *, db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
-int __memp_stat __P((DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
-int __memp_dump_region __P((DB_ENV *, char *, FILE *));
+int __memp_stat_pp __P((DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
+int __memp_dump_region __P((DB_ENV *, const char *, FILE *));
void __memp_stat_hash __P((REGINFO *, MPOOL *, u_int32_t *));
+int __memp_sync_pp __P((DB_ENV *, DB_LSN *));
int __memp_sync __P((DB_ENV *, DB_LSN *));
+int __memp_fsync_pp __P((DB_MPOOLFILE *));
int __memp_fsync __P((DB_MPOOLFILE *));
int __mp_xxx_fh __P((DB_MPOOLFILE *, DB_FH **));
int __memp_sync_int __P((DB_ENV *, DB_MPOOLFILE *, int, db_sync_op, int *));
-int __memp_trickle __P((DB_ENV *, int, int *));
+int __memp_trickle_pp __P((DB_ENV *, int, int *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/os_ext.h b/db/dbinc_auto/os_ext.h
index 0a2e5ab20..ea2748055 100644
--- a/db/dbinc_auto/os_ext.h
+++ b/db/dbinc_auto/os_ext.h
@@ -9,7 +9,7 @@ extern "C" {
int __os_abspath __P((const char *));
int __os_umalloc __P((DB_ENV *, size_t, void *));
int __os_urealloc __P((DB_ENV *, size_t, void *));
-int __os_ufree __P((DB_ENV *, void *));
+void __os_ufree __P((DB_ENV *, void *));
int __os_strdup __P((DB_ENV *, const char *, void *));
int __os_calloc __P((DB_ENV *, size_t, size_t, void *));
int __os_malloc __P((DB_ENV *, size_t, void *));
@@ -25,7 +25,7 @@ int __os_get_errno __P((void));
void __os_set_errno __P((int));
int __os_fileid __P((DB_ENV *, const char *, int, u_int8_t *));
int __os_fsync __P((DB_ENV *, DB_FH *));
-int __os_openhandle __P((DB_ENV *, const char *, int, int, DB_FH *));
+int __os_openhandle __P((DB_ENV *, const char *, int, int, DB_FH **));
int __os_closehandle __P((DB_ENV *, DB_FH *));
void __os_id __P((u_int32_t *));
int __os_r_sysattach __P((DB_ENV *, REGINFO *, REGION *));
@@ -34,7 +34,9 @@ int __os_mapfile __P((DB_ENV *, char *, DB_FH *, size_t, int, void **));
int __os_unmapfile __P((DB_ENV *, void *, size_t));
u_int32_t __db_oflags __P((int));
int __db_omode __P((const char *));
-int __os_open __P((DB_ENV *, const char *, u_int32_t, int, DB_FH *));
+int __os_have_direct __P((void));
+int __os_open __P((DB_ENV *, const char *, u_int32_t, int, DB_FH **));
+int __os_open_extend __P((DB_ENV *, const char *, u_int32_t, u_int32_t, u_int32_t, int, DB_FH **));
#ifdef HAVE_QNX
int __os_shmname __P((DB_ENV *, const char *, char **));
#endif
@@ -43,30 +45,23 @@ int __os_r_detach __P((DB_ENV *, REGINFO *, int));
int __os_rename __P((DB_ENV *, const char *, const char *, u_int32_t));
int __os_isroot __P((void));
char *__db_rpath __P((const char *));
-int __os_io __P((DB_ENV *, DB_IO *, int, size_t *));
+int __os_io __P((DB_ENV *, int, DB_FH *, db_pgno_t, size_t, u_int8_t *, size_t *));
int __os_read __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
int __os_write __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
int __os_seek __P((DB_ENV *, DB_FH *, size_t, db_pgno_t, u_int32_t, int, DB_OS_SEEK));
int __os_sleep __P((DB_ENV *, u_long, u_long));
-int __os_spin __P((DB_ENV *));
+void __os_spin __P((DB_ENV *));
void __os_yield __P((DB_ENV*, u_long));
int __os_exists __P((const char *, int *));
int __os_ioinfo __P((DB_ENV *, const char *, DB_FH *, u_int32_t *, u_int32_t *, u_int32_t *));
int __os_tmpdir __P((DB_ENV *, u_int32_t));
int __os_region_unlink __P((DB_ENV *, const char *));
int __os_unlink __P((DB_ENV *, const char *));
+int __os_is_winnt __P((void));
#if defined(DB_WIN32)
int __os_win32_errno __P((void));
#endif
-int __os_fsync __P((DB_ENV *, DB_FH *));
-int __os_openhandle __P((DB_ENV *, const char *, int, int, DB_FH *));
-int __os_closehandle __P((DB_ENV *, DB_FH *));
-int __os_io __P((DB_ENV *, DB_IO *, int, size_t *));
-int __os_read __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
-int __os_write __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
-int __os_exists __P((const char *, int *));
-int __os_ioinfo __P((DB_ENV *, const char *, DB_FH *, u_int32_t *, u_int32_t *, u_int32_t *));
-int __os_is_winnt __P((void));
+int __os_have_direct __P((void));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/qam_ext.h b/db/dbinc_auto/qam_ext.h
index 74efd5d0e..4ea10a3a7 100644
--- a/db/dbinc_auto/qam_ext.h
+++ b/db/dbinc_auto/qam_ext.h
@@ -11,7 +11,7 @@ int __qam_pitem __P((DBC *, QPAGE *, u_int32_t, db_recno_t, DBT *));
int __qam_append __P((DBC *, DBT *, DBT *));
int __qam_c_dup __P((DBC *, DBC *));
int __qam_c_init __P((DBC *));
-int __qam_truncate __P((DB *, DB_TXN *, u_int32_t *));
+int __qam_truncate __P((DBC *, u_int32_t *));
int __qam_incfirst_log __P((DB *, DB_TXN *, DB_LSN *, u_int32_t, db_recno_t, db_pgno_t));
int __qam_incfirst_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __qam_incfirst_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -40,15 +40,18 @@ int __qam_pgin_out __P((DB_ENV *, db_pgno_t, void *, DBT *));
int __qam_fprobe __P((DB *, db_pgno_t, void *, qam_probe_mode, u_int32_t));
int __qam_fclose __P((DB *, db_pgno_t));
int __qam_fremove __P((DB *, db_pgno_t));
-int __qam_sync __P((DB *, u_int32_t));
+int __qam_sync __P((DB *));
int __qam_gen_filelist __P(( DB *, QUEUE_FILELIST **));
int __qam_extent_names __P((DB_ENV *, char *, char ***));
+void __qam_exid __P((DB *, u_int8_t *, u_int32_t));
+int __qam_nameop __P((DB *, DB_TXN *, const char *, qam_name_op));
int __qam_db_create __P((DB *));
-int __qam_db_close __P((DB *));
+int __qam_db_close __P((DB *, u_int32_t));
int __db_prqueue __P((DB *, FILE *, u_int32_t));
int __qam_remove __P((DB *, DB_TXN *, const char *, const char *, DB_LSN *));
int __qam_rename __P((DB *, DB_TXN *, const char *, const char *, const char *));
int __qam_open __P((DB *, DB_TXN *, const char *, db_pgno_t, int, u_int32_t));
+int __qam_set_ext_data __P((DB*, const char *));
int __qam_metachk __P((DB *, const char *, QMETA *));
int __qam_new_file __P((DB *, DB_TXN *, DB_FH *, const char *));
int __qam_incfirst_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -56,12 +59,15 @@ int __qam_mvptr_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __qam_del_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __qam_delext_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __qam_add_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
-int __qam_stat __P((DB *, void *, u_int32_t));
+int __qam_stat __P((DBC *, void *, u_int32_t));
+int __db_no_queue_am __P((DB_ENV *));
int __qam_31_qammeta __P((DB *, char *, u_int8_t *));
int __qam_32_qammeta __P((DB *, char *, u_int8_t *));
int __qam_vrfy_meta __P((DB *, VRFY_DBINFO *, QMETA *, db_pgno_t, u_int32_t));
int __qam_vrfy_data __P((DB *, VRFY_DBINFO *, QPAGE *, db_pgno_t, u_int32_t));
int __qam_vrfy_structure __P((DB *, VRFY_DBINFO *, u_int32_t));
+int __qam_vrfy_walkqueue __P((DB *, VRFY_DBINFO *, void *, int (*)(void *, const void *), u_int32_t));
+int __qam_salvage __P((DB *, VRFY_DBINFO *, db_pgno_t, PAGE *, void *, int (*)(void *, const void *), u_int32_t));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/rep_ext.h b/db/dbinc_auto/rep_ext.h
index aba997734..ab304ece0 100644
--- a/db/dbinc_auto/rep_ext.h
+++ b/db/dbinc_auto/rep_ext.h
@@ -7,22 +7,34 @@ extern "C" {
#endif
int __rep_dbenv_create __P((DB_ENV *));
-int __rep_process_message __P((DB_ENV *, DBT *, DBT *, int *));
+int __rep_open __P((DB_ENV *));
+void __rep_elect_master __P((DB_ENV *, REP *, int *));
+int __rep_process_message __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
int __rep_process_txn __P((DB_ENV *, DBT *));
+int __rep_tally __P((DB_ENV *, REP *, int, int *, u_int32_t, u_int32_t));
+void __rep_cmp_vote __P((DB_ENV *, REP *, int *, DB_LSN *, int, int, int));
+int __rep_cmp_vote2 __P((DB_ENV *, REP *, int, u_int32_t));
int __rep_region_init __P((DB_ENV *));
int __rep_region_destroy __P((DB_ENV *));
+void __rep_dbenv_refresh __P((DB_ENV *));
int __rep_dbenv_close __P((DB_ENV *));
int __rep_preclose __P((DB_ENV *, int));
int __rep_check_alloc __P((DB_ENV *, TXN_RECS *, int));
int __rep_send_message __P((DB_ENV *, int, u_int32_t, DB_LSN *, const DBT *, u_int32_t));
int __rep_new_master __P((DB_ENV *, REP_CONTROL *, int));
-int __rep_lockpgno_init __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
-int __rep_unlockpages __P((DB_ENV *, u_int32_t));
-int __rep_lockpages __P((DB_ENV *, int (**)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t, DB_LSN *, DB_LSN *, TXN_RECS *, u_int32_t));
int __rep_is_client __P((DB_ENV *));
-int __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int));
+int __rep_noarchive __P((DB_ENV *));
+void __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int, u_int32_t, int, u_int32_t));
+void __rep_elect_done __P((DB_ENV *, REP *));
int __rep_grow_sites __P((DB_ENV *dbenv, int nsites));
-void __rep_print_message __P((int, REP_CONTROL *, char *));
+void __env_rep_enter __P((DB_ENV *));
+void __env_rep_exit __P((DB_ENV *));
+int __db_rep_enter __P((DB *, int, int));
+void __db_rep_exit __P((DB_ENV *));
+void __op_rep_enter __P((DB_ENV *));
+void __op_rep_exit __P((DB_ENV *));
+void __rep_get_gen __P((DB_ENV *, u_int32_t *));
+void __rep_print_message __P((DB_ENV *, int, REP_CONTROL *, char *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/rpc_client_ext.h b/db/dbinc_auto/rpc_client_ext.h
index 9634b34ab..d0ac2b4f6 100644
--- a/db/dbinc_auto/rpc_client_ext.h
+++ b/db/dbinc_auto/rpc_client_ext.h
@@ -7,6 +7,7 @@ extern "C" {
#endif
int __dbcl_envrpcserver __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+int __dbcl_env_close_wrap __P((DB_ENV *, u_int32_t));
int __dbcl_env_open_wrap __P((DB_ENV *, const char *, u_int32_t, int));
int __dbcl_db_open_wrap __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
int __dbcl_refresh __P((DB_ENV *));
@@ -18,35 +19,60 @@ int __dbcl_c_setup __P((long, DB *, DBC **));
int __dbcl_dbclose_common __P((DB *));
int __dbcl_env_alloc __P((DB_ENV *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)));
int __dbcl_set_app_dispatch __P((DB_ENV *, int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
+int __dbcl_env_get_cachesize __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
int __dbcl_env_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
int __dbcl_env_close __P((DB_ENV *, u_int32_t));
int __dbcl_env_create __P((DB_ENV *, long));
+int __dbcl_get_data_dirs __P((DB_ENV *, const char ***));
int __dbcl_set_data_dir __P((DB_ENV *, const char *));
int __dbcl_env_dbremove __P((DB_ENV *, DB_TXN *, const char *, const char *, u_int32_t));
int __dbcl_env_dbrename __P((DB_ENV *, DB_TXN *, const char *, const char *, const char *, u_int32_t));
+int __dbcl_env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
int __dbcl_env_encrypt __P((DB_ENV *, const char *, u_int32_t));
int __dbcl_env_set_feedback __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
+int __dbcl_env_get_flags __P((DB_ENV *, u_int32_t *));
int __dbcl_env_flags __P((DB_ENV *, u_int32_t, int));
+int __dbcl_get_lg_bsize __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lg_bsize __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lg_dir __P((DB_ENV *, const char * *));
int __dbcl_set_lg_dir __P((DB_ENV *, const char *));
+int __dbcl_get_lg_max __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lg_max __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lg_regionmax __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lg_regionmax __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lk_conflicts __P((DB_ENV *, const u_int8_t **, int *));
int __dbcl_set_lk_conflict __P((DB_ENV *, u_int8_t *, int));
+int __dbcl_get_lk_detect __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lk_detect __P((DB_ENV *, u_int32_t));
int __dbcl_set_lk_max __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lk_max_locks __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lk_max_locks __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lk_max_lockers __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lk_max_lockers __P((DB_ENV *, u_int32_t));
+int __dbcl_get_lk_max_objects __P((DB_ENV *, u_int32_t *));
int __dbcl_set_lk_max_objects __P((DB_ENV *, u_int32_t));
+int __dbcl_get_mp_maxwrite __P((DB_ENV *, int *, int *));
+int __dbcl_set_mp_maxwrite __P((DB_ENV *, int, int));
+int __dbcl_get_mp_mmapsize __P((DB_ENV *, size_t *));
int __dbcl_set_mp_mmapsize __P((DB_ENV *, size_t));
+int __dbcl_env_get_home __P((DB_ENV *, const char * *));
+int __dbcl_env_get_open_flags __P((DB_ENV *, u_int32_t *));
int __dbcl_env_open __P((DB_ENV *, const char *, u_int32_t, int));
int __dbcl_env_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
int __dbcl_env_remove __P((DB_ENV *, const char *, u_int32_t));
+int __dbcl_get_shm_key __P((DB_ENV *, long *));
int __dbcl_set_shm_key __P((DB_ENV *, long));
+int __dbcl_get_tas_spins __P((DB_ENV *, u_int32_t *));
int __dbcl_set_tas_spins __P((DB_ENV *, u_int32_t));
+int __dbcl_get_timeout __P((DB_ENV *, u_int32_t *, u_int32_t));
int __dbcl_set_timeout __P((DB_ENV *, u_int32_t, u_int32_t));
+int __dbcl_get_tmp_dir __P((DB_ENV *, const char * *));
int __dbcl_set_tmp_dir __P((DB_ENV *, const char *));
+int __dbcl_get_tx_max __P((DB_ENV *, u_int32_t *));
int __dbcl_set_tx_max __P((DB_ENV *, u_int32_t));
+int __dbcl_get_tx_timestamp __P((DB_ENV *, time_t *));
int __dbcl_set_tx_timestamp __P((DB_ENV *, time_t *));
+int __dbcl_get_verbose __P((DB_ENV *, u_int32_t, int *));
int __dbcl_set_verbose __P((DB_ENV *, u_int32_t, int));
int __dbcl_txn_abort __P((DB_TXN *));
int __dbcl_txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
@@ -59,44 +85,59 @@ int __dbcl_txn_stat __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
int __dbcl_txn_timeout __P((DB_TXN *, u_int32_t, u_int32_t));
int __dbcl_rep_elect __P((DB_ENV *, int, int, u_int32_t, int *));
int __dbcl_rep_flush __P((DB_ENV *));
-int __dbcl_rep_process_message __P((DB_ENV *, DBT *, DBT *, int *));
+int __dbcl_rep_process_message __P((DB_ENV *, DBT *, DBT *, int *, DB_LSN *));
+int __dbcl_rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
int __dbcl_rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
int __dbcl_rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
-int __dbcl_rep_set_rep_transport __P((DB_ENV *, int, int (*)(DB_ENV *, const DBT *, const DBT *, int, u_int32_t)));
+int __dbcl_rep_set_rep_transport __P((DB_ENV *, int, int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
int __dbcl_rep_start __P((DB_ENV *, DBT *, u_int32_t));
int __dbcl_rep_stat __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
int __dbcl_db_alloc __P((DB *, void *(*)(size_t), void *(*)(void *, size_t), void (*)(void *)));
int __dbcl_db_associate __P((DB *, DB_TXN *, DB *, int (*)(DB *, const DBT *, const DBT *, DBT *), u_int32_t));
int __dbcl_db_bt_compare __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
int __dbcl_db_bt_maxkey __P((DB *, u_int32_t));
+int __dbcl_db_get_bt_minkey __P((DB *, u_int32_t *));
int __dbcl_db_bt_minkey __P((DB *, u_int32_t));
int __dbcl_db_bt_prefix __P((DB *, size_t(*)(DB *, const DBT *, const DBT *)));
int __dbcl_db_set_append_recno __P((DB *, int (*)(DB *, DBT *, db_recno_t)));
-int __dbcl_db_cache_priority __P((DB *, DB_CACHE_PRIORITY));
+int __dbcl_db_get_cachesize __P((DB *, u_int32_t *, u_int32_t *, int *));
int __dbcl_db_cachesize __P((DB *, u_int32_t, u_int32_t, int));
int __dbcl_db_close __P((DB *, u_int32_t));
int __dbcl_db_create __P((DB *, DB_ENV *, u_int32_t));
int __dbcl_db_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
int __dbcl_db_dup_compare __P((DB *, int (*)(DB *, const DBT *, const DBT *)));
+int __dbcl_db_get_encrypt_flags __P((DB *, u_int32_t *));
int __dbcl_db_encrypt __P((DB *, const char *, u_int32_t));
+int __dbcl_db_get_extentsize __P((DB *, u_int32_t *));
int __dbcl_db_extentsize __P((DB *, u_int32_t));
int __dbcl_db_fd __P((DB *, int *));
int __dbcl_db_feedback __P((DB *, void (*)(DB *, int, int)));
+int __dbcl_db_get_flags __P((DB *, u_int32_t *));
int __dbcl_db_flags __P((DB *, u_int32_t));
int __dbcl_db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __dbcl_db_get_name __P((DB *, const char * *, const char * *));
+int __dbcl_db_get_open_flags __P((DB *, u_int32_t *));
+int __dbcl_db_get_h_ffactor __P((DB *, u_int32_t *));
int __dbcl_db_h_ffactor __P((DB *, u_int32_t));
int __dbcl_db_h_hash __P((DB *, u_int32_t(*)(DB *, const void *, u_int32_t)));
+int __dbcl_db_get_h_nelem __P((DB *, u_int32_t *));
int __dbcl_db_h_nelem __P((DB *, u_int32_t));
int __dbcl_db_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *, u_int32_t));
+int __dbcl_db_get_lorder __P((DB *, int *));
int __dbcl_db_lorder __P((DB *, int));
int __dbcl_db_open __P((DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int));
+int __dbcl_db_get_pagesize __P((DB *, u_int32_t *));
int __dbcl_db_pagesize __P((DB *, u_int32_t));
int __dbcl_db_panic __P((DB *, void (*)(DB_ENV *, int)));
int __dbcl_db_pget __P((DB *, DB_TXN *, DBT *, DBT *, DBT *, u_int32_t));
int __dbcl_db_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+int __dbcl_db_get_re_delim __P((DB *, int *));
int __dbcl_db_re_delim __P((DB *, int));
+int __dbcl_db_get_re_len __P((DB *, u_int32_t *));
int __dbcl_db_re_len __P((DB *, u_int32_t));
int __dbcl_db_re_pad __P((DB *, int));
+int __dbcl_db_get_re_pad __P((DB *, int *));
+int __dbcl_db_get_re_source __P((DB *, const char * *));
int __dbcl_db_re_source __P((DB *, const char *));
int __dbcl_db_remove __P((DB *, const char *, const char *, u_int32_t));
int __dbcl_db_rename __P((DB *, const char *, const char *, const char *, u_int32_t));
@@ -127,12 +168,31 @@ int __dbcl_log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
int __dbcl_log_flush __P((DB_ENV *, const DB_LSN *));
int __dbcl_log_put __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
int __dbcl_log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
-int __dbcl_memp_fcreate __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
int __dbcl_memp_register __P((DB_ENV *, int, int (*)(DB_ENV *, db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
int __dbcl_memp_stat __P((DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
int __dbcl_memp_sync __P((DB_ENV *, DB_LSN *));
int __dbcl_memp_trickle __P((DB_ENV *, int, int *));
-int __dbcl_env_close_ret __P((DB_ENV *, u_int32_t, __env_close_reply *));
+int __dbcl_memp_fget __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t, void *));
+int __dbcl_memp_fopen __P((DB_MPOOLFILE *, const char *, u_int32_t, int, size_t));
+int __dbcl_memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
+int __dbcl_memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
+int __dbcl_memp_get_clear_len __P((DB_MPOOLFILE *, u_int32_t *));
+int __dbcl_memp_set_clear_len __P((DB_MPOOLFILE *, u_int32_t));
+int __dbcl_memp_get_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+int __dbcl_memp_set_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+int __dbcl_memp_get_flags __P((DB_MPOOLFILE *, u_int32_t *));
+int __dbcl_memp_set_flags __P((DB_MPOOLFILE *, u_int32_t, int));
+int __dbcl_memp_get_ftype __P((DB_MPOOLFILE *, int *));
+int __dbcl_memp_set_ftype __P((DB_MPOOLFILE *, int));
+int __dbcl_memp_get_lsn_offset __P((DB_MPOOLFILE *, int32_t *));
+int __dbcl_memp_set_lsn_offset __P((DB_MPOOLFILE *, int32_t));
+int __dbcl_memp_get_maxsize __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t *));
+int __dbcl_memp_set_maxsize __P((DB_MPOOLFILE *, u_int32_t, u_int32_t));
+int __dbcl_memp_get_pgcookie __P((DB_MPOOLFILE *, DBT *));
+int __dbcl_memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
+int __dbcl_memp_get_priority __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
+int __dbcl_memp_set_priority __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
+int __dbcl_memp_fsync __P((DB_MPOOLFILE *));
int __dbcl_env_create_ret __P((DB_ENV *, long, __env_create_reply *));
int __dbcl_env_open_ret __P((DB_ENV *, const char *, u_int32_t, int, __env_open_reply *));
int __dbcl_env_remove_ret __P((DB_ENV *, const char *, u_int32_t, __env_remove_reply *));
diff --git a/db/dbinc_auto/rpc_defs.in b/db/dbinc_auto/rpc_defs.in
index cae76f560..1b0ad056b 100644
--- a/db/dbinc_auto/rpc_defs.in
+++ b/db/dbinc_auto/rpc_defs.in
@@ -1,4 +1,4 @@
/* DO NOT EDIT: automatically built by dist/s_rpc. */
#define DB_RPC_SERVERPROG ((unsigned long)(351457))
-#define DB_RPC_SERVERVERS ((unsigned long)(4001))
+#define DB_RPC_SERVERVERS ((unsigned long)(4002))
diff --git a/db/dbinc_auto/rpc_server_ext.h b/db/dbinc_auto/rpc_server_ext.h
index c0c706881..ef47563f9 100644
--- a/db/dbinc_auto/rpc_server_ext.h
+++ b/db/dbinc_auto/rpc_server_ext.h
@@ -6,13 +6,18 @@
extern "C" {
#endif
+void __env_get_cachesize_proc __P((long, __env_get_cachesize_reply *));
void __env_cachesize_proc __P((long, u_int32_t, u_int32_t, u_int32_t, __env_cachesize_reply *));
void __env_close_proc __P((long, u_int32_t, __env_close_reply *));
void __env_create_proc __P((u_int32_t, __env_create_reply *));
void __env_dbremove_proc __P((long, long, char *, char *, u_int32_t, __env_dbremove_reply *));
void __env_dbrename_proc __P((long, long, char *, char *, char *, u_int32_t, __env_dbrename_reply *));
+void __env_get_encrypt_flags_proc __P((long, __env_get_encrypt_flags_reply *));
void __env_encrypt_proc __P((long, char *, u_int32_t, __env_encrypt_reply *));
+void __env_get_flags_proc __P((long, __env_get_flags_reply *));
void __env_flags_proc __P((long, u_int32_t, u_int32_t, __env_flags_reply *));
+void __env_get_home_proc __P((long, __env_get_home_reply *));
+void __env_get_open_flags_proc __P((long, __env_get_open_flags_reply *));
void __env_open_proc __P((long, char *, u_int32_t, u_int32_t, __env_open_reply *));
void __env_remove_proc __P((long, char *, u_int32_t, __env_remove_reply *));
void __txn_abort_proc __P((long, __txn_abort_reply *));
@@ -23,24 +28,37 @@ void __txn_prepare_proc __P((long, u_int8_t *, __txn_prepare_reply *));
void __txn_recover_proc __P((long, u_int32_t, u_int32_t, __txn_recover_reply *, int *));
void __db_bt_maxkey_proc __P((long, u_int32_t, __db_bt_maxkey_reply *));
void __db_associate_proc __P((long, long, long, u_int32_t, __db_associate_reply *));
+void __db_get_bt_minkey_proc __P((long, __db_get_bt_minkey_reply *));
void __db_bt_minkey_proc __P((long, u_int32_t, __db_bt_minkey_reply *));
void __db_close_proc __P((long, u_int32_t, __db_close_reply *));
void __db_create_proc __P((long, u_int32_t, __db_create_reply *));
void __db_del_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, __db_del_reply *));
+void __db_get_encrypt_flags_proc __P((long, __db_get_encrypt_flags_reply *));
void __db_encrypt_proc __P((long, char *, u_int32_t, __db_encrypt_reply *));
+void __db_get_extentsize_proc __P((long, __db_get_extentsize_reply *));
void __db_extentsize_proc __P((long, u_int32_t, __db_extentsize_reply *));
+void __db_get_flags_proc __P((long, __db_get_flags_reply *));
void __db_flags_proc __P((long, u_int32_t, __db_flags_reply *));
void __db_get_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, __db_get_reply *, int *));
+void __db_get_h_ffactor_proc __P((long, __db_get_h_ffactor_reply *));
void __db_h_ffactor_proc __P((long, u_int32_t, __db_h_ffactor_reply *));
+void __db_get_h_nelem_proc __P((long, __db_get_h_nelem_reply *));
void __db_h_nelem_proc __P((long, u_int32_t, __db_h_nelem_reply *));
void __db_key_range_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, __db_key_range_reply *));
+void __db_get_lorder_proc __P((long, __db_get_lorder_reply *));
void __db_lorder_proc __P((long, u_int32_t, __db_lorder_reply *));
+void __db_get_name_proc __P((long, __db_get_name_reply *));
+void __db_get_open_flags_proc __P((long, __db_get_open_flags_reply *));
void __db_open_proc __P((long, long, char *, char *, u_int32_t, u_int32_t, u_int32_t, __db_open_reply *));
+void __db_get_pagesize_proc __P((long, __db_get_pagesize_reply *));
void __db_pagesize_proc __P((long, u_int32_t, __db_pagesize_reply *));
void __db_pget_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, __db_pget_reply *, int *));
void __db_put_proc __P((long, long, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, u_int32_t, u_int32_t, u_int32_t, void *, u_int32_t, u_int32_t, __db_put_reply *, int *));
+void __db_get_re_delim_proc __P((long, __db_get_re_delim_reply *));
void __db_re_delim_proc __P((long, u_int32_t, __db_re_delim_reply *));
+void __db_get_re_len_proc __P((long, __db_get_re_len_reply *));
void __db_re_len_proc __P((long, u_int32_t, __db_re_len_reply *));
+void __db_get_re_pad_proc __P((long, __db_get_re_pad_reply *));
void __db_re_pad_proc __P((long, u_int32_t, __db_re_pad_reply *));
void __db_remove_proc __P((long, char *, char *, u_int32_t, __db_remove_reply *));
void __db_rename_proc __P((long, char *, char *, char *, u_int32_t, __db_rename_reply *));
@@ -68,57 +86,75 @@ void __dbsrv_active __P((ct_entry *));
int __db_close_int __P((long, u_int32_t));
int __dbc_close_int __P((ct_entry *));
int __dbenv_close_int __P((long, u_int32_t, int));
-home_entry *get_home __P((char *));
-__env_cachesize_reply *__db_env_cachesize_4001 __P((__env_cachesize_msg *, struct svc_req *));
-__env_close_reply *__db_env_close_4001 __P((__env_close_msg *, struct svc_req *));
-__env_create_reply *__db_env_create_4001 __P((__env_create_msg *, struct svc_req *));
-__env_dbremove_reply *__db_env_dbremove_4001 __P((__env_dbremove_msg *, struct svc_req *));
-__env_dbrename_reply *__db_env_dbrename_4001 __P((__env_dbrename_msg *, struct svc_req *));
-__env_encrypt_reply *__db_env_encrypt_4001 __P((__env_encrypt_msg *, struct svc_req *));
-__env_flags_reply *__db_env_flags_4001 __P((__env_flags_msg *, struct svc_req *));
-__env_open_reply *__db_env_open_4001 __P((__env_open_msg *, struct svc_req *));
-__env_remove_reply *__db_env_remove_4001 __P((__env_remove_msg *, struct svc_req *));
-__txn_abort_reply *__db_txn_abort_4001 __P((__txn_abort_msg *, struct svc_req *));
-__txn_begin_reply *__db_txn_begin_4001 __P((__txn_begin_msg *, struct svc_req *));
-__txn_commit_reply *__db_txn_commit_4001 __P((__txn_commit_msg *, struct svc_req *));
-__txn_discard_reply *__db_txn_discard_4001 __P((__txn_discard_msg *, struct svc_req *));
-__txn_prepare_reply *__db_txn_prepare_4001 __P((__txn_prepare_msg *, struct svc_req *));
-__txn_recover_reply *__db_txn_recover_4001 __P((__txn_recover_msg *, struct svc_req *));
-__db_associate_reply *__db_db_associate_4001 __P((__db_associate_msg *, struct svc_req *));
-__db_bt_maxkey_reply *__db_db_bt_maxkey_4001 __P((__db_bt_maxkey_msg *, struct svc_req *));
-__db_bt_minkey_reply *__db_db_bt_minkey_4001 __P((__db_bt_minkey_msg *, struct svc_req *));
-__db_close_reply *__db_db_close_4001 __P((__db_close_msg *, struct svc_req *));
-__db_create_reply *__db_db_create_4001 __P((__db_create_msg *, struct svc_req *));
-__db_del_reply *__db_db_del_4001 __P((__db_del_msg *, struct svc_req *));
-__db_encrypt_reply *__db_db_encrypt_4001 __P((__db_encrypt_msg *, struct svc_req *));
-__db_extentsize_reply *__db_db_extentsize_4001 __P((__db_extentsize_msg *, struct svc_req *));
-__db_flags_reply *__db_db_flags_4001 __P((__db_flags_msg *, struct svc_req *));
-__db_get_reply *__db_db_get_4001 __P((__db_get_msg *, struct svc_req *));
-__db_h_ffactor_reply *__db_db_h_ffactor_4001 __P((__db_h_ffactor_msg *, struct svc_req *));
-__db_h_nelem_reply *__db_db_h_nelem_4001 __P((__db_h_nelem_msg *, struct svc_req *));
-__db_key_range_reply *__db_db_key_range_4001 __P((__db_key_range_msg *, struct svc_req *));
-__db_lorder_reply *__db_db_lorder_4001 __P((__db_lorder_msg *, struct svc_req *));
-__db_open_reply *__db_db_open_4001 __P((__db_open_msg *, struct svc_req *));
-__db_pagesize_reply *__db_db_pagesize_4001 __P((__db_pagesize_msg *, struct svc_req *));
-__db_pget_reply *__db_db_pget_4001 __P((__db_pget_msg *, struct svc_req *));
-__db_put_reply *__db_db_put_4001 __P((__db_put_msg *, struct svc_req *));
-__db_re_delim_reply *__db_db_re_delim_4001 __P((__db_re_delim_msg *, struct svc_req *));
-__db_re_len_reply *__db_db_re_len_4001 __P((__db_re_len_msg *, struct svc_req *));
-__db_re_pad_reply *__db_db_re_pad_4001 __P((__db_re_pad_msg *, struct svc_req *));
-__db_remove_reply *__db_db_remove_4001 __P((__db_remove_msg *, struct svc_req *));
-__db_rename_reply *__db_db_rename_4001 __P((__db_rename_msg *, struct svc_req *));
-__db_stat_reply *__db_db_stat_4001 __P((__db_stat_msg *, struct svc_req *));
-__db_sync_reply *__db_db_sync_4001 __P((__db_sync_msg *, struct svc_req *));
-__db_truncate_reply *__db_db_truncate_4001 __P((__db_truncate_msg *, struct svc_req *));
-__db_cursor_reply *__db_db_cursor_4001 __P((__db_cursor_msg *, struct svc_req *));
-__db_join_reply *__db_db_join_4001 __P((__db_join_msg *, struct svc_req *));
-__dbc_close_reply *__db_dbc_close_4001 __P((__dbc_close_msg *, struct svc_req *));
-__dbc_count_reply *__db_dbc_count_4001 __P((__dbc_count_msg *, struct svc_req *));
-__dbc_del_reply *__db_dbc_del_4001 __P((__dbc_del_msg *, struct svc_req *));
-__dbc_dup_reply *__db_dbc_dup_4001 __P((__dbc_dup_msg *, struct svc_req *));
-__dbc_get_reply *__db_dbc_get_4001 __P((__dbc_get_msg *, struct svc_req *));
-__dbc_pget_reply *__db_dbc_pget_4001 __P((__dbc_pget_msg *, struct svc_req *));
-__dbc_put_reply *__db_dbc_put_4001 __P((__dbc_put_msg *, struct svc_req *));
+home_entry *get_fullhome __P((char *));
+__env_get_cachesize_reply *__db_env_get_cachesize_4002 __P((__env_get_cachesize_msg *, struct svc_req *));
+__env_cachesize_reply *__db_env_cachesize_4002 __P((__env_cachesize_msg *, struct svc_req *));
+__env_close_reply *__db_env_close_4002 __P((__env_close_msg *, struct svc_req *));
+__env_create_reply *__db_env_create_4002 __P((__env_create_msg *, struct svc_req *));
+__env_dbremove_reply *__db_env_dbremove_4002 __P((__env_dbremove_msg *, struct svc_req *));
+__env_dbrename_reply *__db_env_dbrename_4002 __P((__env_dbrename_msg *, struct svc_req *));
+__env_get_encrypt_flags_reply *__db_env_get_encrypt_flags_4002 __P((__env_get_encrypt_flags_msg *, struct svc_req *));
+__env_encrypt_reply *__db_env_encrypt_4002 __P((__env_encrypt_msg *, struct svc_req *));
+__env_get_flags_reply *__db_env_get_flags_4002 __P((__env_get_flags_msg *, struct svc_req *));
+__env_flags_reply *__db_env_flags_4002 __P((__env_flags_msg *, struct svc_req *));
+__env_get_home_reply *__db_env_get_home_4002 __P((__env_get_home_msg *, struct svc_req *));
+__env_get_open_flags_reply *__db_env_get_open_flags_4002 __P((__env_get_open_flags_msg *, struct svc_req *));
+__env_open_reply *__db_env_open_4002 __P((__env_open_msg *, struct svc_req *));
+__env_remove_reply *__db_env_remove_4002 __P((__env_remove_msg *, struct svc_req *));
+__txn_abort_reply *__db_txn_abort_4002 __P((__txn_abort_msg *, struct svc_req *));
+__txn_begin_reply *__db_txn_begin_4002 __P((__txn_begin_msg *, struct svc_req *));
+__txn_commit_reply *__db_txn_commit_4002 __P((__txn_commit_msg *, struct svc_req *));
+__txn_discard_reply *__db_txn_discard_4002 __P((__txn_discard_msg *, struct svc_req *));
+__txn_prepare_reply *__db_txn_prepare_4002 __P((__txn_prepare_msg *, struct svc_req *));
+__txn_recover_reply *__db_txn_recover_4002 __P((__txn_recover_msg *, struct svc_req *));
+__db_associate_reply *__db_db_associate_4002 __P((__db_associate_msg *, struct svc_req *));
+__db_bt_maxkey_reply *__db_db_bt_maxkey_4002 __P((__db_bt_maxkey_msg *, struct svc_req *));
+__db_get_bt_minkey_reply *__db_db_get_bt_minkey_4002 __P((__db_get_bt_minkey_msg *, struct svc_req *));
+__db_bt_minkey_reply *__db_db_bt_minkey_4002 __P((__db_bt_minkey_msg *, struct svc_req *));
+__db_close_reply *__db_db_close_4002 __P((__db_close_msg *, struct svc_req *));
+__db_create_reply *__db_db_create_4002 __P((__db_create_msg *, struct svc_req *));
+__db_del_reply *__db_db_del_4002 __P((__db_del_msg *, struct svc_req *));
+__db_get_encrypt_flags_reply *__db_db_get_encrypt_flags_4002 __P((__db_get_encrypt_flags_msg *, struct svc_req *));
+__db_encrypt_reply *__db_db_encrypt_4002 __P((__db_encrypt_msg *, struct svc_req *));
+__db_get_extentsize_reply *__db_db_get_extentsize_4002 __P((__db_get_extentsize_msg *, struct svc_req *));
+__db_extentsize_reply *__db_db_extentsize_4002 __P((__db_extentsize_msg *, struct svc_req *));
+__db_get_flags_reply *__db_db_get_flags_4002 __P((__db_get_flags_msg *, struct svc_req *));
+__db_flags_reply *__db_db_flags_4002 __P((__db_flags_msg *, struct svc_req *));
+__db_get_reply *__db_db_get_4002 __P((__db_get_msg *, struct svc_req *));
+__db_get_name_reply *__db_db_get_name_4002 __P((__db_get_name_msg *, struct svc_req *));
+__db_get_open_flags_reply *__db_db_get_open_flags_4002 __P((__db_get_open_flags_msg *, struct svc_req *));
+__db_get_h_ffactor_reply *__db_db_get_h_ffactor_4002 __P((__db_get_h_ffactor_msg *, struct svc_req *));
+__db_h_ffactor_reply *__db_db_h_ffactor_4002 __P((__db_h_ffactor_msg *, struct svc_req *));
+__db_get_h_nelem_reply *__db_db_get_h_nelem_4002 __P((__db_get_h_nelem_msg *, struct svc_req *));
+__db_h_nelem_reply *__db_db_h_nelem_4002 __P((__db_h_nelem_msg *, struct svc_req *));
+__db_key_range_reply *__db_db_key_range_4002 __P((__db_key_range_msg *, struct svc_req *));
+__db_get_lorder_reply *__db_db_get_lorder_4002 __P((__db_get_lorder_msg *, struct svc_req *));
+__db_lorder_reply *__db_db_lorder_4002 __P((__db_lorder_msg *, struct svc_req *));
+__db_open_reply *__db_db_open_4002 __P((__db_open_msg *, struct svc_req *));
+__db_get_pagesize_reply *__db_db_get_pagesize_4002 __P((__db_get_pagesize_msg *, struct svc_req *));
+__db_pagesize_reply *__db_db_pagesize_4002 __P((__db_pagesize_msg *, struct svc_req *));
+__db_pget_reply *__db_db_pget_4002 __P((__db_pget_msg *, struct svc_req *));
+__db_put_reply *__db_db_put_4002 __P((__db_put_msg *, struct svc_req *));
+__db_get_re_delim_reply *__db_db_get_re_delim_4002 __P((__db_get_re_delim_msg *, struct svc_req *));
+__db_re_delim_reply *__db_db_re_delim_4002 __P((__db_re_delim_msg *, struct svc_req *));
+__db_get_re_len_reply *__db_db_get_re_len_4002 __P((__db_get_re_len_msg *, struct svc_req *));
+__db_re_len_reply *__db_db_re_len_4002 __P((__db_re_len_msg *, struct svc_req *));
+__db_re_pad_reply *__db_db_re_pad_4002 __P((__db_re_pad_msg *, struct svc_req *));
+__db_get_re_pad_reply *__db_db_get_re_pad_4002 __P((__db_get_re_pad_msg *, struct svc_req *));
+__db_remove_reply *__db_db_remove_4002 __P((__db_remove_msg *, struct svc_req *));
+__db_rename_reply *__db_db_rename_4002 __P((__db_rename_msg *, struct svc_req *));
+__db_stat_reply *__db_db_stat_4002 __P((__db_stat_msg *, struct svc_req *));
+__db_sync_reply *__db_db_sync_4002 __P((__db_sync_msg *, struct svc_req *));
+__db_truncate_reply *__db_db_truncate_4002 __P((__db_truncate_msg *, struct svc_req *));
+__db_cursor_reply *__db_db_cursor_4002 __P((__db_cursor_msg *, struct svc_req *));
+__db_join_reply *__db_db_join_4002 __P((__db_join_msg *, struct svc_req *));
+__dbc_close_reply *__db_dbc_close_4002 __P((__dbc_close_msg *, struct svc_req *));
+__dbc_count_reply *__db_dbc_count_4002 __P((__dbc_count_msg *, struct svc_req *));
+__dbc_del_reply *__db_dbc_del_4002 __P((__dbc_del_msg *, struct svc_req *));
+__dbc_dup_reply *__db_dbc_dup_4002 __P((__dbc_dup_msg *, struct svc_req *));
+__dbc_get_reply *__db_dbc_get_4002 __P((__dbc_get_msg *, struct svc_req *));
+__dbc_pget_reply *__db_dbc_pget_4002 __P((__dbc_pget_msg *, struct svc_req *));
+__dbc_put_reply *__db_dbc_put_4002 __P((__dbc_put_msg *, struct svc_req *));
#if defined(__cplusplus)
}
diff --git a/db/dbinc_auto/tcl_ext.h b/db/dbinc_auto/tcl_ext.h
index 9622d9eb7..5860e6b7b 100644
--- a/db/dbinc_auto/tcl_ext.h
+++ b/db/dbinc_auto/tcl_ext.h
@@ -21,7 +21,9 @@ int env_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
int tcl_EnvRemove __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
int tcl_EnvVerbose __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *, Tcl_Obj *));
int tcl_EnvAttr __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+int tcl_EnvSetFlags __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *, Tcl_Obj *));
int tcl_EnvTest __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+int tcl_EnvGetEncryptFlags __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
DBTCL_INFO *_NewInfo __P((Tcl_Interp *, void *, char *, enum INFOTYPE));
void *_NameToPtr __P((CONST char *));
DBTCL_INFO *_PtrToInfo __P((CONST void *));
@@ -32,7 +34,7 @@ int _SetListElem __P((Tcl_Interp *, Tcl_Obj *, void *, int, void *, int));
int _SetListElemInt __P((Tcl_Interp *, Tcl_Obj *, void *, int));
int _SetListRecnoElem __P((Tcl_Interp *, Tcl_Obj *, db_recno_t, u_char *, int));
int _Set3DBTList __P((Tcl_Interp *, Tcl_Obj *, DBT *, int, DBT *, int, DBT *));
-int _SetMultiList __P((Tcl_Interp *, Tcl_Obj *, DBT *, DBT*, int, int));
+int _SetMultiList __P((Tcl_Interp *, Tcl_Obj *, DBT *, DBT*, DBTYPE, u_int32_t));
int _GetGlobPrefix __P((char *, char **));
int _ReturnSetup __P((Tcl_Interp *, int, int, char *));
int _ErrorSetup __P((Tcl_Interp *, int, char *));
@@ -41,7 +43,7 @@ int _GetLsn __P((Tcl_Interp *, Tcl_Obj *, DB_LSN *));
int _GetUInt32 __P((Tcl_Interp *, Tcl_Obj *, u_int32_t *));
Tcl_Obj *_GetFlagsList __P((Tcl_Interp *, u_int32_t, void (*)(u_int32_t, void *, void (*)(u_int32_t, const FN *, void *))));
void _debug_check __P((void));
-int _CopyObjBytes __P((Tcl_Interp *, Tcl_Obj *obj, void **, int *, int *));
+int _CopyObjBytes __P((Tcl_Interp *, Tcl_Obj *obj, void **, u_int32_t *, int *));
int tcl_LockDetect __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_LockGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
int tcl_LockStat __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
diff --git a/db/dbinc_auto/txn_auto.h b/db/dbinc_auto/txn_auto.h
index ac841ba5b..06fbe7d07 100644
--- a/db/dbinc_auto/txn_auto.h
+++ b/db/dbinc_auto/txn_auto.h
@@ -9,6 +9,7 @@ typedef struct ___txn_regop_args {
DB_LSN prev_lsn;
u_int32_t opcode;
int32_t timestamp;
+ DBT locks;
} __txn_regop_args;
#define DB___txn_ckp 11
@@ -19,6 +20,7 @@ typedef struct ___txn_ckp_args {
DB_LSN ckp_lsn;
DB_LSN last_ckp;
int32_t timestamp;
+ u_int32_t rep_gen;
} __txn_ckp_args;
#define DB___txn_child 12
@@ -41,6 +43,7 @@ typedef struct ___txn_xa_regop_args {
u_int32_t gtrid;
u_int32_t bqual;
DB_LSN begin_lsn;
+ DBT locks;
} __txn_xa_regop_args;
#define DB___txn_recycle 14
diff --git a/db/dbinc_auto/txn_ext.h b/db/dbinc_auto/txn_ext.h
index a53338d37..5dc3a4556 100644
--- a/db/dbinc_auto/txn_ext.h
+++ b/db/dbinc_auto/txn_ext.h
@@ -6,6 +6,7 @@
extern "C" {
#endif
+int __txn_begin_pp __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
int __txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
int __txn_xa_begin __P((DB_ENV *, DB_TXN *));
int __txn_compensate_begin __P((DB_ENV *, DB_TXN **txnp));
@@ -14,6 +15,8 @@ int __txn_abort __P((DB_TXN *));
int __txn_discard __P((DB_TXN *, u_int32_t flags));
int __txn_prepare __P((DB_TXN *, u_int8_t *));
u_int32_t __txn_id __P((DB_TXN *));
+int __txn_set_timeout __P((DB_TXN *, db_timeout_t, u_int32_t));
+int __txn_checkpoint_pp __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
int __txn_checkpoint __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
int __txn_getckp __P((DB_ENV *, DB_LSN *));
int __txn_activekids __P((DB_ENV *, u_int32_t, DB_TXN *));
@@ -21,11 +24,11 @@ int __txn_force_abort __P((DB_ENV *, u_int8_t *));
int __txn_preclose __P((DB_ENV *));
int __txn_reset __P((DB_ENV *));
void __txn_updateckp __P((DB_ENV *, DB_LSN *));
-int __txn_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, int32_t));
+int __txn_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, int32_t, const DBT *));
int __txn_regop_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_regop_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_regop_read __P((DB_ENV *, void *, __txn_regop_args **));
-int __txn_ckp_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, DB_LSN *, DB_LSN *, int32_t));
+int __txn_ckp_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, DB_LSN *, DB_LSN *, int32_t, u_int32_t));
int __txn_ckp_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_ckp_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_ckp_read __P((DB_ENV *, void *, __txn_ckp_args **));
@@ -33,7 +36,7 @@ int __txn_child_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, DB_
int __txn_child_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_child_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_child_read __P((DB_ENV *, void *, __txn_child_args **));
-int __txn_xa_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, const DBT *, int32_t, u_int32_t, u_int32_t, DB_LSN *));
+int __txn_xa_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t, u_int32_t, const DBT *, int32_t, u_int32_t, u_int32_t, DB_LSN *, const DBT *));
int __txn_xa_regop_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_xa_regop_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_xa_regop_read __P((DB_ENV *, void *, __txn_xa_regop_args **));
@@ -45,6 +48,7 @@ int __txn_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_reco
int __txn_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
int __txn_init_recover __P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
void __txn_dbenv_create __P((DB_ENV *));
+int __txn_set_tx_max __P((DB_ENV *, u_int32_t));
int __txn_regop_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_xa_regop_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
int __txn_ckp_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
@@ -53,14 +57,17 @@ int __txn_restore_txn __P((DB_ENV *, DB_LSN *, __txn_xa_regop_args *));
int __txn_recycle_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
void __txn_continue __P((DB_ENV *, DB_TXN *, TXN_DETAIL *, size_t));
int __txn_map_gid __P((DB_ENV *, u_int8_t *, TXN_DETAIL **, size_t *));
+int __txn_recover_pp __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
int __txn_recover __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
int __txn_get_prepared __P((DB_ENV *, XID *, DB_PREPLIST *, long, long *, u_int32_t));
int __txn_open __P((DB_ENV *));
int __txn_dbenv_refresh __P((DB_ENV *));
void __txn_region_destroy __P((DB_ENV *, REGINFO *));
int __txn_id_set __P((DB_ENV *, u_int32_t, u_int32_t));
-int __txn_stat __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+int __txn_stat_pp __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+int __txn_closeevent __P((DB_ENV *, DB_TXN *, DB *));
int __txn_remevent __P((DB_ENV *, DB_TXN *, const char *, u_int8_t*));
+void __txn_remrem __P((DB_ENV *, DB_TXN *, const char *));
int __txn_lockevent __P((DB_ENV *, DB_TXN *, DB *, DB_LOCK *, u_int32_t));
void __txn_remlock __P((DB_ENV *, DB_TXN *, DB_LOCK *, u_int32_t));
int __txn_doevents __P((DB_ENV *, DB_TXN *, int, int));
diff --git a/db/dbinc_auto/xa_ext.h b/db/dbinc_auto/xa_ext.h
index fe7f84f15..8b93c4f71 100644
--- a/db/dbinc_auto/xa_ext.h
+++ b/db/dbinc_auto/xa_ext.h
@@ -6,16 +6,7 @@
extern "C" {
#endif
-int __db_xa_open __P((char *, int, long));
-int __db_xa_close __P((char *, int, long));
-int __db_xa_start __P((XID *, int, long));
-int __db_xa_end __P((XID *, int, long));
-int __db_xa_prepare __P((XID *, int, long));
-int __db_xa_commit __P((XID *, int, long));
-int __db_xa_recover __P((XID *, long, int, long));
-int __db_xa_rollback __P((XID *, int, long));
-int __db_xa_forget __P((XID *, int, long));
-int __db_xa_complete __P((int *, int *, int, long));
+int __xa_get_txn __P((DB_ENV *, DB_TXN **, int));
int __db_xa_create __P((DB *));
int __db_rmid_to_env __P((int rmid, DB_ENV **envp));
int __db_xid_to_txn __P((DB_ENV *, XID *, size_t *));
@@ -23,8 +14,6 @@ int __db_map_rmid __P((int, DB_ENV *));
int __db_unmap_rmid __P((int));
int __db_map_xid __P((DB_ENV *, XID *, size_t));
void __db_unmap_xid __P((DB_ENV *, XID *, size_t));
-int __db_get_xa_txn __P((DB_ENV *env, DB_TXN **txnp));
-int __db_get_current_thread __P((void **));
#if defined(__cplusplus)
}
diff --git a/db/dbm/dbm.c b/db/dbm/dbm.c
index e5f423572..7acd498c6 100644
--- a/db/dbm/dbm.c
+++ b/db/dbm/dbm.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: dbm.c,v 11.7 2000/11/30 00:58:35 ubell Exp $";
+static const char revid[] = "$Id: dbm.c,v 11.15 2003/01/08 04:34:46 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -60,6 +60,36 @@ static const char revid[] = "$Id: dbm.c,v 11.7 2000/11/30 00:58:35 ubell Exp $";
*
* This package provides dbm and ndbm compatible interfaces to DB.
*
+ * EXTERN: #if DB_DBM_HSEARCH != 0
+ *
+ * EXTERN: int __db_ndbm_clearerr __P((DBM *));
+ * EXTERN: void __db_ndbm_close __P((DBM *));
+ * EXTERN: int __db_ndbm_delete __P((DBM *, datum));
+ * EXTERN: int __db_ndbm_dirfno __P((DBM *));
+ * EXTERN: int __db_ndbm_error __P((DBM *));
+ * EXTERN: datum __db_ndbm_fetch __P((DBM *, datum));
+ * EXTERN: datum __db_ndbm_firstkey __P((DBM *));
+ * EXTERN: datum __db_ndbm_nextkey __P((DBM *));
+ * EXTERN: DBM *__db_ndbm_open __P((const char *, int, int));
+ * EXTERN: int __db_ndbm_pagfno __P((DBM *));
+ * EXTERN: int __db_ndbm_rdonly __P((DBM *));
+ * EXTERN: int __db_ndbm_store __P((DBM *, datum, datum, int));
+ *
+ * EXTERN: int __db_dbm_close __P((void));
+ * EXTERN: int __db_dbm_dbrdonly __P((void));
+ * EXTERN: int __db_dbm_delete __P((datum));
+ * EXTERN: int __db_dbm_dirf __P((void));
+ * EXTERN: datum __db_dbm_fetch __P((datum));
+ * EXTERN: datum __db_dbm_firstkey __P((void));
+ * EXTERN: int __db_dbm_init __P((char *));
+ * EXTERN: datum __db_dbm_nextkey __P((datum));
+ * EXTERN: int __db_dbm_pagf __P((void));
+ * EXTERN: int __db_dbm_store __P((datum, datum));
+ *
+ * EXTERN: #endif
+ */
+
+/*
* The DBM routines, which call the NDBM routines.
*/
static DBM *__cur_db;
@@ -210,7 +240,7 @@ __db_ndbm_open(file, oflags, mode)
if ((ret = dbp->set_pagesize(dbp, 4096)) != 0 ||
(ret = dbp->set_h_ffactor(dbp, 40)) != 0 ||
(ret = dbp->set_h_nelem(dbp, 1)) != 0 ||
- (ret = dbp->open(dbp,
+ (ret = dbp->open(dbp, NULL,
path, NULL, DB_HASH, __db_oflags(oflags), mode)) != 0) {
__os_set_errno(ret);
return (NULL);
@@ -277,7 +307,7 @@ __db_ndbm_fetch(dbm, key)
__os_set_errno(ENOENT);
else {
__os_set_errno(ret);
- F_SET(dbc->dbp, DB_DBM_ERROR);
+ F_SET(dbc->dbp, DB_AM_DBM_ERROR);
}
}
return (data);
@@ -312,7 +342,7 @@ __db_ndbm_firstkey(dbm)
__os_set_errno(ENOENT);
else {
__os_set_errno(ret);
- F_SET(dbc->dbp, DB_DBM_ERROR);
+ F_SET(dbc->dbp, DB_AM_DBM_ERROR);
}
}
return (key);
@@ -347,7 +377,7 @@ __db_ndbm_nextkey(dbm)
__os_set_errno(ENOENT);
else {
__os_set_errno(ret);
- F_SET(dbc->dbp, DB_DBM_ERROR);
+ F_SET(dbc->dbp, DB_AM_DBM_ERROR);
}
}
return (key);
@@ -380,7 +410,7 @@ __db_ndbm_delete(dbm, key)
__os_set_errno(ENOENT);
else {
__os_set_errno(ret);
- F_SET(dbc->dbp, DB_DBM_ERROR);
+ F_SET(dbc->dbp, DB_AM_DBM_ERROR);
}
return (-1);
}
@@ -419,7 +449,7 @@ __db_ndbm_store(dbm, key, data, flags)
return (1);
__os_set_errno(ret);
- F_SET(dbc->dbp, DB_DBM_ERROR);
+ F_SET(dbc->dbp, DB_AM_DBM_ERROR);
return (-1);
}
@@ -431,7 +461,7 @@ __db_ndbm_error(dbm)
dbc = (DBC *)dbm;
- return (F_ISSET(dbc->dbp, DB_DBM_ERROR));
+ return (F_ISSET(dbc->dbp, DB_AM_DBM_ERROR));
}
int
@@ -442,7 +472,7 @@ __db_ndbm_clearerr(dbm)
dbc = (DBC *)dbm;
- F_CLR(dbc->dbp, DB_DBM_ERROR);
+ F_CLR(dbc->dbp, DB_AM_DBM_ERROR);
return (0);
}
diff --git a/db/dbreg/dbreg.c b/db/dbreg/dbreg.c
index 69b2fba22..4101e5e5a 100644
--- a/db/dbreg/dbreg.c
+++ b/db/dbreg/dbreg.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: dbreg.c,v 11.66 2002/08/11 02:14:16 margo Exp ";
+static const char revid[] = "$Id: dbreg.c,v 11.81 2003/10/27 15:54:31 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,8 +17,10 @@ static const char revid[] = "Id: dbreg.c,v 11.66 2002/08/11 02:14:16 margo Exp "
#endif
#include "db_int.h"
+#include "dbinc/db_page.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
+#include "dbinc/db_am.h"
/*
* The dbreg subsystem, as its name implies, registers database handles so
@@ -96,14 +98,12 @@ __dbreg_setup(dbp, name, create_txnid)
DB_ENV *dbenv;
DB_LOG *dblp;
FNAME *fnp;
- LOG *lp;
int ret;
size_t len;
void *namep;
dbenv = dbp->dbenv;
dblp = dbenv->lg_handle;
- lp = dblp->reginfo.primary;
fnp = NULL;
namep = NULL;
@@ -111,18 +111,14 @@ __dbreg_setup(dbp, name, create_txnid)
/* Allocate an FNAME and, if necessary, a buffer for the name itself. */
R_LOCK(dbenv, &dblp->reginfo);
if ((ret =
- __db_shalloc(dblp->reginfo.addr, sizeof(FNAME), 0, &fnp)) != 0) {
- R_UNLOCK(dbenv, &dblp->reginfo);
- return (ret);
- }
+ __db_shalloc(dblp->reginfo.addr, sizeof(FNAME), 0, &fnp)) != 0)
+ goto err;
memset(fnp, 0, sizeof(FNAME));
if (name != NULL) {
len = strlen(name) + 1;
- if ((ret = __db_shalloc(dblp->reginfo.addr,
- len, 0, &namep)) != 0) {
- R_UNLOCK(dbenv, &dblp->reginfo);
- return (ret);
- }
+ if ((ret =
+ __db_shalloc(dblp->reginfo.addr, len, 0, &namep)) != 0)
+ goto err;
fnp->name_off = R_OFFSET(&dblp->reginfo, namep);
memcpy(namep, name, len);
} else
@@ -143,6 +139,13 @@ __dbreg_setup(dbp, name, create_txnid)
dbp->log_filename = fnp;
return (0);
+
+err: R_UNLOCK(dbenv, &dblp->reginfo);
+ if (ret == ENOMEM)
+ __db_err(dbenv,
+ "Logging region out of memory; you may need to increase its size");
+
+ return (ret);
}
/*
@@ -186,7 +189,9 @@ __dbreg_teardown(dbp)
/*
* __dbreg_new_id --
- * Assign an unused dbreg id to this database handle.
+ * Get an unused dbreg id to this database handle.
+ * Used as a wrapper to acquire the mutex and
+ * only set the id on success.
*
* PUBLIC: int __dbreg_new_id __P((DB *, DB_TXN *));
*/
@@ -195,10 +200,8 @@ __dbreg_new_id(dbp, txn)
DB *dbp;
DB_TXN *txn;
{
- DBT fid_dbt, r_name;
DB_ENV *dbenv;
DB_LOG *dblp;
- DB_LSN unused;
FNAME *fnp;
LOG *lp;
int32_t id;
@@ -211,17 +214,49 @@ __dbreg_new_id(dbp, txn)
/* The fq_mutex protects the FNAME list and id management. */
MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ if (fnp->id != DB_LOGFILEID_INVALID) {
+ MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ return (0);
+ }
+ if ((ret = __dbreg_get_id(dbp, txn, &id)) == 0)
+ fnp->id = id;
+ MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ return (ret);
+}
+
+/*
+ * __dbreg_get_id --
+ * Assign an unused dbreg id to this database handle.
+ * Assume the caller holds the fq_mutex locked. Assume the
+ * caller will set the fnp->id field with the id we return.
+ *
+ * PUBLIC: int __dbreg_get_id __P((DB *, DB_TXN *, int32_t *));
+ */
+int
+__dbreg_get_id(dbp, txn, idp)
+ DB *dbp;
+ DB_TXN *txn;
+ int32_t *idp;
+{
+ DBT fid_dbt, r_name;
+ DB_ENV *dbenv;
+ DB_LOG *dblp;
+ DB_LSN unused;
+ FNAME *fnp;
+ LOG *lp;
+ int32_t id;
+ int ret;
+
+ dbenv = dbp->dbenv;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ fnp = dbp->log_filename;
/*
* It's possible that after deciding we needed to call this function,
* someone else allocated an ID before we grabbed the lock. Check
* to make sure there was no race and we have something useful to do.
*/
- if (fnp->id != DB_LOGFILEID_INVALID) {
- MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
- return (0);
- }
-
/* Get an unused ID from the free list. */
if ((ret = __dbreg_pop_id(dbenv, &id)) != 0)
goto err;
@@ -230,7 +265,7 @@ __dbreg_new_id(dbp, txn)
if (id == DB_LOGFILEID_INVALID)
id = lp->fid_max++;
- fnp->id = id;
+ fnp->is_durable = !F_ISSET(dbp, DB_AM_NOT_DURABLE);
/* Hook the FNAME into the list of open files. */
SH_TAILQ_INSERT_HEAD(&lp->fq, fnp, q, __fname);
@@ -249,18 +284,34 @@ __dbreg_new_id(dbp, txn)
}
fid_dbt.data = dbp->fileid;
fid_dbt.size = DB_FILE_ID_LEN;
- if ((ret = __dbreg_register_log(dbenv, txn, &unused, 0, LOG_OPEN,
- r_name.size == 0 ? NULL : &r_name, &fid_dbt, id, fnp->s_type,
- fnp->meta_pgno, fnp->create_txnid)) != 0)
+ if ((ret = __dbreg_register_log(dbenv, txn, &unused,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0,
+ DBREG_OPEN, r_name.size == 0 ? NULL : &r_name, &fid_dbt, id,
+ fnp->s_type, fnp->meta_pgno, fnp->create_txnid)) != 0)
goto err;
+ /*
+ * Once we log the create_txnid, we need to make sure we never
+ * log it again (as might happen if this is a replication client
+ * that later upgrades to a master).
+ */
+ fnp->create_txnid = TXN_INVALID;
DB_ASSERT(dbp->type == fnp->s_type);
DB_ASSERT(dbp->meta_pgno == fnp->meta_pgno);
if ((ret = __dbreg_add_dbentry(dbenv, dblp, dbp, id)) != 0)
goto err;
-
-err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ /*
+ * If we have a successful call, set the ID. Otherwise
+ * we have to revoke it and remove it from all the lists
+ * it has been added to, and return an invalid id.
+ */
+err:
+ if (ret != 0 && id != DB_LOGFILEID_INVALID) {
+ (void)__dbreg_revoke_id(dbp, 1, id);
+ id = DB_LOGFILEID_INVALID;
+ }
+ *idp = id;
return (ret);
}
@@ -313,11 +364,15 @@ __dbreg_assign_id(dbp, id)
* Once we have the dbp, revoke its id; we're about to
* reuse it.
*/
- if ((ret =
- __dbreg_id_to_db(dbenv, NULL, &close_dbp, id, 0)) != 0)
+ ret = __dbreg_id_to_db_int(dbenv, NULL, &close_dbp, id, 0, 0);
+ if (ret == ENOENT) {
+ ret = 0;
+ goto cont;
+ } else if (ret != 0)
goto err;
- if ((ret = __dbreg_revoke_id(close_dbp, 1)) != 0)
+ if ((ret = __dbreg_revoke_id(close_dbp, 1,
+ DB_LOGFILEID_INVALID)) != 0)
goto err;
}
@@ -325,13 +380,14 @@ __dbreg_assign_id(dbp, id)
* Remove this ID from the free list, if it's there, and make sure
* we don't allocate it anew.
*/
- if ((ret = __dbreg_pluck_id(dbenv, id)) != 0)
+cont: if ((ret = __dbreg_pluck_id(dbenv, id)) != 0)
goto err;
if (id >= lp->fid_max)
lp->fid_max = id + 1;
/* Now go ahead and assign the id to our dbp. */
fnp->id = id;
+ fnp->is_durable = !F_ISSET(dbp, DB_AM_NOT_DURABLE);
SH_TAILQ_INSERT_HEAD(&lp->fq, fnp, q, __fname);
if ((ret = __dbreg_add_dbentry(dbenv, dblp, dbp, id)) != 0)
@@ -341,7 +397,7 @@ err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
/* There's nothing useful that our caller can do if this close fails. */
if (close_dbp != NULL)
- (void)close_dbp->close(close_dbp, DB_NOSYNC);
+ (void)__db_close(close_dbp, NULL, DB_NOSYNC);
return (ret);
}
@@ -351,12 +407,13 @@ err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
* Take a log id away from a dbp, in preparation for closing it,
* but without logging the close.
*
- * PUBLIC: int __dbreg_revoke_id __P((DB *, int));
+ * PUBLIC: int __dbreg_revoke_id __P((DB *, int, int32_t));
*/
int
-__dbreg_revoke_id(dbp, have_lock)
+__dbreg_revoke_id(dbp, have_lock, force_id)
DB *dbp;
int have_lock;
+ int32_t force_id;
{
DB_ENV *dbenv;
DB_LOG *dblp;
@@ -371,13 +428,23 @@ __dbreg_revoke_id(dbp, have_lock)
fnp = dbp->log_filename;
/* If we lack an ID, this is a null-op. */
- if (fnp == NULL || fnp->id == DB_LOGFILEID_INVALID)
+ if (fnp == NULL)
return (0);
+ /*
+ * If we have a force_id, we had an error after allocating
+ * the id, and putting it on the fq list, but before we
+ * finished setting up fnp. So, if we have a force_id use it.
+ */
+ if (force_id != DB_LOGFILEID_INVALID)
+ id = force_id;
+ else if (fnp->id == DB_LOGFILEID_INVALID)
+ return (0);
+ else
+ id = fnp->id;
if (!have_lock)
MUTEX_LOCK(dbenv, &lp->fq_mutex);
- id = fnp->id;
fnp->id = DB_LOGFILEID_INVALID;
/* Remove the FNAME from the list of open files. */
@@ -437,12 +504,13 @@ __dbreg_close_id(dbp, txn)
memset(&fid_dbt, 0, sizeof(fid_dbt));
fid_dbt.data = fnp->ufid;
fid_dbt.size = DB_FILE_ID_LEN;
- if ((ret = __dbreg_register_log(dbenv, txn,
- &r_unused, 0, LOG_CLOSE, dbtp, &fid_dbt, fnp->id,
+ if ((ret = __dbreg_register_log(dbenv, txn, &r_unused,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0,
+ DBREG_CLOSE, dbtp, &fid_dbt, fnp->id,
fnp->s_type, fnp->meta_pgno, TXN_INVALID)) != 0)
goto err;
- ret = __dbreg_revoke_id(dbp, 1);
+ ret = __dbreg_revoke_id(dbp, 1, DB_LOGFILEID_INVALID);
err: MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
return (ret);
diff --git a/db/dbreg/dbreg.src b/db/dbreg/dbreg.src
index 337ffcb61..c2205958b 100644
--- a/db/dbreg/dbreg.src
+++ b/db/dbreg/dbreg.src
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: dbreg.src,v 10.22 2002/03/27 04:31:44 bostic Exp
+ * $Id: dbreg.src,v 10.24 2003/04/24 14:19:17 bostic Exp $
*/
PREFIX __dbreg
@@ -25,7 +25,6 @@ INCLUDE #include "dbinc/db_page.h"
INCLUDE #include "dbinc/db_dispatch.h"
INCLUDE #include "dbinc/db_am.h"
INCLUDE #include "dbinc/log.h"
-INCLUDE #include "dbinc/rep.h"
INCLUDE #include "dbinc/txn.h"
INCLUDE
diff --git a/db/dbreg/dbreg_auto.c b/db/dbreg/dbreg_auto.c
index 91eace3f4..857559c66 100644
--- a/db/dbreg/dbreg_auto.c
+++ b/db/dbreg/dbreg_auto.c
@@ -14,7 +14,6 @@
#include "dbinc/db_dispatch.h"
#include "dbinc/db_am.h"
#include "dbinc/log.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
/*
@@ -39,16 +38,23 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t id;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___dbreg_register;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -76,10 +82,28 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -137,19 +161,52 @@ __dbreg_register_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__dbreg_register_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __dbreg_register_getpgnos __P((DB_ENV *, DBT *,
* PUBLIC: DB_LSN *, db_recops, void *));
@@ -182,6 +239,7 @@ __dbreg_register_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __dbreg_register_print __P((DB_ENV *, DBT *, DB_LSN *,
@@ -206,9 +264,10 @@ __dbreg_register_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __dbreg_register_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__dbreg_register: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__dbreg_register%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -232,6 +291,7 @@ __dbreg_register_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tid: 0x%lx\n", (u_long)argp->id);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -253,7 +313,6 @@ __dbreg_register_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__dbreg_register_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -320,6 +379,7 @@ __dbreg_init_print(dbenv, dtabp, dtabsizep)
return (0);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __dbreg_init_getpgnos __P((DB_ENV *,
* PUBLIC: int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *),
@@ -338,6 +398,7 @@ __dbreg_init_getpgnos(dbenv, dtabp, dtabsizep)
return (ret);
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __dbreg_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
diff --git a/db/dbreg/dbreg_rec.c b/db/dbreg/dbreg_rec.c
index 1deefa88c..3c81e29d7 100644
--- a/db/dbreg/dbreg_rec.c
+++ b/db/dbreg/dbreg_rec.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,7 +36,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: dbreg_rec.c,v 11.107 2002/08/08 15:44:46 bostic Exp ";
+static const char revid[] = "$Id: dbreg_rec.c,v 11.120 2003/10/27 15:54:31 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -47,9 +47,12 @@ static const char revid[] = "Id: dbreg_rec.c,v 11.107 2002/08/08 15:44:46 bostic
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/db_am.h"
#include "dbinc/log.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
+#include "dbinc/qam.h"
static int __dbreg_open_file __P((DB_ENV *,
DB_TXN *, __dbreg_register_args *, void *));
@@ -83,7 +86,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
goto out;
switch (argp->opcode) {
- case LOG_OPEN:
+ case DBREG_OPEN:
if ((DB_REDO(op) ||
op == DB_TXN_OPENFILES || op == DB_TXN_POPENFILES))
do_open = 1;
@@ -91,20 +94,19 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
do_close = 1;
break;
- case LOG_CLOSE:
+ case DBREG_CLOSE:
if (DB_UNDO(op))
do_open = 1;
else
do_close = 1;
break;
- case LOG_RCLOSE:
+ case DBREG_RCLOSE:
/*
- * LOG_RCLOSE was generated by recover because a file
- * was left open. The POPENFILES pass, which is run
- * to open files to abort prepared transactions,
- * may not include the open for this file so we
- * open it here. Note that a normal CLOSE is
- * not legal before the prepared transaction is
+ * DBREG_RCLOSE was generated by recover because a file was
+ * left open. The POPENFILES pass, which is run to open
+ * files to abort prepared transactions, may not include the
+ * open for this file so we open it here. Note that a normal
+ * CLOSE is not legal before the prepared transaction is
* committed or aborted.
*/
if (DB_UNDO(op) || op == DB_TXN_POPENFILES)
@@ -113,7 +115,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
do_close = 1;
break;
- case LOG_CHECKPOINT:
+ case DBREG_CHKPNT:
if (DB_UNDO(op) ||
op == DB_TXN_OPENFILES || op == DB_TXN_POPENFILES)
do_open = 1;
@@ -125,7 +127,7 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
* We must open the db even if the meta page is not
* yet written as we may be creating subdatabase.
*/
- if (op == DB_TXN_OPENFILES && argp->opcode != LOG_CHECKPOINT)
+ if (op == DB_TXN_OPENFILES && argp->opcode != DBREG_CHKPNT)
F_SET(dblp, DBLOG_FORCE_OPEN);
/*
@@ -151,7 +153,13 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
ret =
__dbreg_open_file(dbenv, NULL, argp, info);
}
- ret = 0;
+ /*
+ * We treat ENOENT as OK since it's possible that
+ * the file was renamed or deleted.
+ * All other errors, we return.
+ */
+ if (ret == ENOENT)
+ ret = 0;
}
F_CLR(dblp, DBLOG_FORCE_OPEN);
}
@@ -174,19 +182,20 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
* Typically, closes should match an open which means
* that if this is a close, there should be a valid
* entry in the dbentry table when we get here,
- * however there is an exception. If this is an
+ * however there are exceptions. 1. If this is an
* OPENFILES pass, then we may have started from
* a log file other than the first, and the
* corresponding open appears in an earlier file.
- * We can ignore that case, but all others are errors.
+ * 2. If we are undoing an open on an abort or
+ * recovery, it's possible that we failed after
+ * the log record, but before we actually entered
+ * a handle here.
*/
dbe = &dblp->dbentry[argp->fileid];
if (dbe->dbp == NULL && !dbe->deleted) {
/* No valid entry here. */
- if ((argp->opcode != LOG_CLOSE &&
- argp->opcode != LOG_RCLOSE) ||
- (op != DB_TXN_OPENFILES &&
- op !=DB_TXN_POPENFILES)) {
+ if (DB_REDO(op) ||
+ argp->opcode == DBREG_CHKPNT) {
__db_err(dbenv,
"Improper file close at %lu/%lu",
(u_long)lsnp->file,
@@ -200,7 +209,8 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
/* We have either an open entry or a deleted entry. */
if ((dbp = dbe->dbp) != NULL) {
MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
- (void)__dbreg_revoke_id(dbp, 0);
+ (void)__dbreg_revoke_id(dbp, 0,
+ DB_LOGFILEID_INVALID);
/*
* If we're a replication client, it's
@@ -226,17 +236,6 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
if (do_rem) {
/*
- * If we are undoing a create we'd better discard
- * any buffers from the memory pool.
- */
- if (dbp != NULL && dbp->mpf != NULL && argp->id != 0) {
- if ((ret = dbp->mpf->close(dbp->mpf,
- DB_MPOOL_DISCARD)) != 0)
- goto out;
- dbp->mpf = NULL;
- }
-
- /*
* During recovery, all files are closed. On an abort,
* we only close the file if we opened it during the
* abort (DB_AM_RECOVER set), otherwise we simply do
@@ -245,12 +244,27 @@ __dbreg_register_recover(dbenv, dbtp, lsnp, op, info)
* because the NULL mpf would be a problem.
*/
if (dbp != NULL) {
+ /*
+ * If we are undoing a create we'd better
+ * discard any buffers from the memory pool.
+ * We identify creates because the argp->id
+ * field contains the transaction containing
+ * the file create; if that id is invalid, we
+ * are not creating.
+ */
+
+ if (argp->id != TXN_INVALID)
+ F_SET(dbp, DB_AM_DISCARD);
if (op == DB_TXN_ABORT &&
!F_ISSET(dbp, DB_AM_RECOVER))
+ t_ret = __db_refresh(dbp,
+ NULL, DB_NOSYNC, NULL);
+ else {
+ if (op == DB_TXN_APPLY)
+ __db_sync(dbp);
t_ret =
- __db_refresh(dbp, NULL, DB_NOSYNC);
- else
- t_ret = dbp->close(dbp, DB_NOSYNC);
+ __db_close(dbp, NULL, DB_NOSYNC);
+ }
if (t_ret != 0 && ret == 0)
ret = t_ret;
}
@@ -279,7 +293,6 @@ __dbreg_open_file(dbenv, txn, argp, info)
DB_ENTRY *dbe;
DB_LOG *lp;
DB *dbp;
- int ret;
u_int32_t id;
lp = (DB_LOG *)dbenv->lg_handle;
@@ -317,9 +330,10 @@ __dbreg_open_file(dbenv, txn, argp, info)
memcmp(dbp->fileid,
argp->uid.data, DB_FILE_ID_LEN) != 0) {
MUTEX_THREAD_UNLOCK(dbenv, lp->mutexp);
- (void)__dbreg_revoke_id(dbp, 0);
+ (void)__dbreg_revoke_id(dbp, 0,
+ DB_LOGFILEID_INVALID);
if (F_ISSET(dbp, DB_AM_RECOVER))
- dbp->close(dbp, DB_NOSYNC);
+ __db_close(dbp, NULL, DB_NOSYNC);
goto reopen;
}
@@ -337,9 +351,9 @@ __dbreg_open_file(dbenv, txn, argp, info)
* subtransaction that created the file system object.
*/
if (argp->id != TXN_INVALID &&
- (ret = __db_txnlist_update(dbenv, info,
- argp->id, TXN_EXPECTED, NULL)) == TXN_NOTFOUND)
- ret = __db_txnlist_add(dbenv,
+ __db_txnlist_update(dbenv, info,
+ argp->id, TXN_EXPECTED, NULL) == TXN_NOTFOUND)
+ (void)__db_txnlist_add(dbenv,
info, argp->id, TXN_EXPECTED, NULL);
return (0);
}
diff --git a/db/dbreg/dbreg_util.c b/db/dbreg/dbreg_util.c
index f625062c7..6e21c35f3 100644
--- a/db/dbreg/dbreg_util.c
+++ b/db/dbreg/dbreg_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: dbreg_util.c,v 11.13 2002/08/06 06:11:23 bostic Exp ";
+static const char revid[] = "$Id: dbreg_util.c,v 11.39 2003/11/10 17:42:34 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -73,9 +73,7 @@ err: MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
/*
* __dbreg_rem_dbentry
- * Remove an entry from the DB entry table. Find the appropriate DB and
- * unlink it from the linked list off the table. If the DB is NULL, treat
- * this as a simple refcount decrement.
+ * Remove an entry from the DB entry table.
*
* PUBLIC: void __dbreg_rem_dbentry __P((DB_LOG *, int32_t));
*/
@@ -85,14 +83,16 @@ __dbreg_rem_dbentry(dblp, ndx)
int32_t ndx;
{
MUTEX_THREAD_LOCK(dblp->dbenv, dblp->mutexp);
- dblp->dbentry[ndx].dbp = NULL;
- dblp->dbentry[ndx].deleted = 0;
+ if (dblp->dbentry_cnt > ndx) {
+ dblp->dbentry[ndx].dbp = NULL;
+ dblp->dbentry[ndx].deleted = 0;
+ }
MUTEX_THREAD_UNLOCK(dblp->dbenv, dblp->mutexp);
}
/*
* __dbreg_open_files --
- * Put a LOG_CHECKPOINT log record for each open database.
+ * Put a DBREG_CHKPNT log record for each open database.
*
* PUBLIC: int __dbreg_open_files __P((DB_ENV *));
*/
@@ -116,6 +116,7 @@ __dbreg_open_files(dbenv)
for (fnp = SH_TAILQ_FIRST(&lp->fq, __fname);
fnp != NULL; fnp = SH_TAILQ_NEXT(fnp, q, __fname)) {
+
if (fnp->name_off == INVALID_ROFF)
dbtp = NULL;
else {
@@ -128,18 +129,17 @@ __dbreg_open_files(dbenv)
fid_dbt.data = fnp->ufid;
fid_dbt.size = DB_FILE_ID_LEN;
/*
- * Output LOG_CHECKPOINT records which will be
- * processed during the OPENFILES pass of recovery.
- * At the end of recovery we want to output the
- * files that were open so that a future recovery
- * run will have the correct files open during
- * a backward pass. For this we output LOG_RCLOSE
- * records so that the files will be closed on
- * the forward pass.
+ * Output DBREG_CHKPNT records which will be processed during
+ * the OPENFILES pass of recovery. At the end of recovery we
+ * want to output the files that were open so a future recovery
+ * run will have the correct files open during a backward pass.
+ * For this we output DBREG_RCLOSE records so the files will be
+ * closed on the forward pass.
*/
if ((ret = __dbreg_register_log(dbenv,
- NULL, &r_unused, 0,
- F_ISSET(dblp, DBLOG_RECOVER) ? LOG_RCLOSE : LOG_CHECKPOINT,
+ NULL, &r_unused,
+ fnp->is_durable ? 0 : DB_LOG_NOT_DURABLE,
+ F_ISSET(dblp, DBLOG_RECOVER) ? DBREG_RCLOSE : DBREG_CHKPNT,
dbtp, &fid_dbt, fnp->id, fnp->s_type, fnp->meta_pgno,
TXN_INVALID)) != 0)
break;
@@ -152,7 +152,8 @@ __dbreg_open_files(dbenv)
/*
* __dbreg_close_files --
- * Close files that were opened by the recovery daemon. We sync the
+ * Remove the id's of open files and actually close those
+ * files that were opened by the recovery daemon. We sync the
* file, unless its mpf pointer has been NULLed by a db_remove or
* db_rename. We may not have flushed the log_register record that
* closes the file.
@@ -176,13 +177,19 @@ __dbreg_close_files(dbenv)
ret = 0;
MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
for (i = 0; i < dblp->dbentry_cnt; i++) {
- /* We only want to close dbps that recovery opened. */
- if ((dbp = dblp->dbentry[i].dbp) != NULL &&
- F_ISSET(dbp, DB_AM_RECOVER)) {
+ /*
+ * We only want to close dbps that recovery opened. Any
+ * dbps that weren't opened by recovery but show up here
+ * are about to be unconditionally removed from the table.
+ * Before doing so, we need to revoke their log fileids
+ * so that we don't end up leaving around FNAME entries
+ * for dbps that shouldn't have them.
+ */
+ if ((dbp = dblp->dbentry[i].dbp) != NULL) {
/*
- * It's unsafe to call DB->close while holding the
- * thread lock, because we'll call __dbreg_rem_dbentry
- * and grab it again.
+ * It's unsafe to call DB->close or revoke_id
+ * while holding the thread lock, because
+ * we'll call __dbreg_rem_dbentry and grab it again.
*
* Just drop it. Since dbreg ids go monotonically
* upward, concurrent opens should be safe, and the
@@ -191,11 +198,17 @@ __dbreg_close_files(dbenv)
* making all outstanding dbps invalid.
*/
MUTEX_THREAD_UNLOCK(dbenv, dblp->mutexp);
- if ((t_ret = dbp->close(dbp,
- dbp->mpf == NULL ? DB_NOSYNC : 0)) != 0 && ret == 0)
+ if (F_ISSET(dbp, DB_AM_RECOVER))
+ t_ret = __db_close(dbp,
+ NULL, dbp->mpf == NULL ? DB_NOSYNC : 0);
+ else
+ t_ret = __dbreg_revoke_id(
+ dbp, 0, DB_LOGFILEID_INVALID);
+ if (ret == 0)
ret = t_ret;
MUTEX_THREAD_LOCK(dbenv, dblp->mutexp);
}
+
dblp->dbentry[i].deleted = 0;
dblp->dbentry[i].dbp = NULL;
}
@@ -217,6 +230,30 @@ __dbreg_id_to_db(dbenv, txn, dbpp, ndx, inc)
int32_t ndx;
int inc;
{
+ return (__dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, 1));
+}
+
+/*
+ * __dbreg_id_to_db_int --
+ * Return the DB corresponding to the specified dbreg id. The internal
+ * version takes a final parameter that indicates whether we should attempt
+ * to open the file if no mapping is found. During recovery, the recovery
+ * routines all want to try to open the file (and this is called from
+ * __dbreg_id_to_db), however, if we have a multi-process environment where
+ * some processes may not have the files open (e.g., XA), then we also get
+ * called from __dbreg_assign_id and it's OK if there is no mapping.
+ *
+ * PUBLIC: int __dbreg_id_to_db_int __P((DB_ENV *,
+ * PUBLIC: DB_TXN *, DB **, int32_t, int, int));
+ */
+int
+__dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, tryopen)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ DB **dbpp;
+ int32_t ndx;
+ int inc, tryopen;
+{
DB_LOG *dblp;
FNAME *fname;
int ret;
@@ -236,7 +273,7 @@ __dbreg_id_to_db(dbenv, txn, dbpp, ndx, inc)
*/
if (ndx >= dblp->dbentry_cnt ||
(!dblp->dbentry[ndx].deleted && dblp->dbentry[ndx].dbp == NULL)) {
- if (F_ISSET(dblp, DBLOG_RECOVER)) {
+ if (!tryopen || F_ISSET(dblp, DBLOG_RECOVER)) {
ret = ENOENT;
goto err;
}
@@ -455,9 +492,9 @@ __dbreg_do_open(dbenv,
memcpy(dbp->fileid, uid, DB_FILE_ID_LEN);
dbp->meta_pgno = meta_pgno;
}
- dbp->type = ftype;
- if ((ret = __db_dbopen(dbp, txn, name, NULL,
- DB_ODDFILESIZE, __db_omode("rw----"), meta_pgno)) == 0) {
+ if ((ret = __db_open(dbp, txn, name, NULL,
+ ftype, DB_ODDFILESIZE, __db_omode("rw----"), meta_pgno)) == 0) {
+
/*
* Verify that we are opening the same file that we were
* referring to when we wrote this log record.
@@ -490,7 +527,7 @@ __dbreg_do_open(dbenv,
err: if (cstat == TXN_IGNORE)
goto not_right;
return (ret);
- } else {
+ } else if (ret == ENOENT) {
/* Record that the open failed in the txnlist. */
if (id != TXN_INVALID && (ret = __db_txnlist_update(dbenv,
info, id, TXN_UNEXPECTED, NULL)) == TXN_NOTFOUND)
@@ -498,10 +535,10 @@ err: if (cstat == TXN_IGNORE)
info, id, TXN_UNEXPECTED, NULL);
}
not_right:
- (void)dbp->close(dbp, 0);
+ (void)__db_close(dbp, NULL, 0);
/* Add this file as deleted. */
(void)__dbreg_add_dbentry(dbenv, lp, NULL, ndx);
- return (ENOENT);
+ return (ret);
}
static int
@@ -516,15 +553,14 @@ __dbreg_check_master(dbenv, uid, name)
ret = 0;
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return (ret);
- dbp->type = DB_BTREE;
F_SET(dbp, DB_AM_RECOVER);
- ret = __db_dbopen(dbp,
- NULL, name, NULL, 0, __db_omode("rw----"), PGNO_BASE_MD);
+ ret = __db_open(dbp,
+ NULL, name, NULL, DB_BTREE, 0, __db_omode("rw----"), PGNO_BASE_MD);
if (ret == 0 && memcmp(uid, dbp->fileid, DB_FILE_ID_LEN) != 0)
ret = EINVAL;
- (void)dbp->close(dbp, 0);
+ (void)__db_close(dbp, NULL, 0);
return (ret);
}
@@ -547,22 +583,56 @@ __dbreg_lazy_id(dbp)
DB *dbp;
{
DB_ENV *dbenv;
+ DB_LOG *dblp;
DB_TXN *txn;
+ FNAME *fnp;
+ LOG *lp;
+ int32_t id;
int ret;
dbenv = dbp->dbenv;
- DB_ASSERT(F_ISSET(dbenv, DB_ENV_REP_MASTER));
+ DB_ASSERT(IS_REP_MASTER(dbenv));
- if ((ret = dbenv->txn_begin(dbenv, NULL, &txn, 0)) != 0)
- return (ret);
+ dbenv = dbp->dbenv;
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ fnp = dbp->log_filename;
- if ((ret = __dbreg_new_id(dbp, txn)) != 0) {
- (void)txn->abort(txn);
- return (ret);
+ /* The fq_mutex protects the FNAME list and id management. */
+ MUTEX_LOCK(dbenv, &lp->fq_mutex);
+ if (fnp->id != DB_LOGFILEID_INVALID) {
+ MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ return (0);
+ }
+ id = DB_LOGFILEID_INVALID;
+ if ((ret = __txn_begin(dbenv, NULL, &txn, 0)) != 0)
+ goto err;
+
+ if ((ret = __dbreg_get_id(dbp, txn, &id)) != 0) {
+ (void)__txn_abort(txn);
+ goto err;
}
- return (txn->commit(txn, DB_TXN_NOSYNC));
+ if ((ret = __txn_commit(txn, DB_TXN_NOSYNC)) != 0)
+ goto err;
+
+ /*
+ * All DB related logging routines check the id value *without*
+ * holding the fq_mutex to know whether we need to call
+ * dbreg_lazy_id to begin with. We must set the ID after a
+ * *successful* commit so that there is no possibility of a second
+ * modification call finding a valid ID in the dbp before the
+ * dbreg_register and commit records are in the log.
+ * If there was an error, then we call __dbreg_revoke_id to
+ * remove the entry from the lists.
+ */
+ fnp->id = id;
+err:
+ if (ret != 0 && id != DB_LOGFILEID_INVALID)
+ (void)__dbreg_revoke_id(dbp, 1, id);
+ MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+ return (ret);
}
/*
@@ -687,3 +757,54 @@ __dbreg_pluck_id(dbenv, id)
return (0);
}
+
+#ifdef DEBUG
+/*
+ * __dbreg_print_dblist --
+ * Display the list of files.
+ *
+ * PUBLIC: void __dbreg_print_dblist __P((DB_ENV *));
+ */
+void
+__dbreg_print_dblist(dbenv)
+ DB_ENV *dbenv;
+{
+ DB *dbp;
+ DB_LOG *dblp;
+ FNAME *fnp;
+ LOG *lp;
+ int del, first;
+ char *name;
+
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+
+ MUTEX_LOCK(dbenv, &lp->fq_mutex);
+
+ for (first = 1, fnp = SH_TAILQ_FIRST(&lp->fq, __fname);
+ fnp != NULL; fnp = SH_TAILQ_NEXT(fnp, q, __fname)) {
+ if (first) {
+ first = 0;
+ __db_err(dbenv,
+ "ID\t\t\tName\tType\tPgno\tTxnid\tDBP-info");
+ }
+ if (fnp->name_off == INVALID_ROFF)
+ name = "";
+ else
+ name = R_ADDR(&dblp->reginfo, fnp->name_off);
+
+ dbp = fnp->id >= dblp->dbentry_cnt ? NULL :
+ dblp->dbentry[fnp->id].dbp;
+ del = fnp->id >= dblp->dbentry_cnt ? 0 :
+ dblp->dbentry[fnp->id].deleted;
+ __db_err(dbenv, "%ld\t%s\t\t\t%s\t%lu\t%lx\t%s %d %lx %lx",
+ (long)fnp->id, name,
+ __db_dbtype_to_string(fnp->s_type),
+ (u_long)fnp->meta_pgno, (u_long)fnp->create_txnid,
+ dbp == NULL ? "No DBP" : "DBP", del, P_TO_ULONG(dbp),
+ (u_long)(dbp == NULL ? 0 : dbp->flags));
+ }
+
+ MUTEX_UNLOCK(dbenv, &lp->fq_mutex);
+}
+#endif
diff --git a/db/dist/Makefile.in b/db/dist/Makefile.in
index 73f82cd56..2e3d940c4 100644
--- a/db/dist/Makefile.in
+++ b/db/dist/Makefile.in
@@ -1,101 +1,140 @@
-# $Id: Makefile.in,v 11.66 2000/11/27 16:27:51 bostic Exp $
+# $Id: Makefile.in,v 11.226 2003/11/28 18:50:05 bostic Exp $
srcdir= @srcdir@/..
builddir=.
##################################################
-# C, C++
+# Installation directories and permissions.
##################################################
-CPPFLAGS= -I$(builddir) -I$(srcdir)/include @CPPFLAGS@
-CFLAGS= -c $(CPPFLAGS) @CFLAGS@
-CXXFLAGS= -c $(CPPFLAGS) @CXXFLAGS@
+prefix= @prefix@
+exec_prefix=@exec_prefix@
+bindir= @bindir@
+includedir=@includedir@
+libdir= @libdir@
+docdir= $(prefix)/docs
-CC= @MAKEFILE_CC@
-CCLINK= @MAKEFILE_CCLINK@
-CXX= @MAKEFILE_CXX@
+dmode= 755
+emode= 555
+fmode= 444
-INSTALLER= @INSTALLER@
+transform=@program_transform_name@
-LDFLAGS= @LDFLAGS@
-LIBDB_ARGS= @LIBDB_ARGS@
-LIBJSO_LIBS= @LIBJSO_LIBS@
-LIBS= @LIBS@
-LIBSO_LIBS= @LIBSO_LIBS@
+##################################################
+# Paths for standard user-level commands.
+##################################################
+SHELL= @db_cv_path_sh@
+ar= @db_cv_path_ar@
+chmod= @db_cv_path_chmod@
+cp= @db_cv_path_cp@
+ln= @db_cv_path_ln@
+mkdir= @db_cv_path_mkdir@
+ranlib= @db_cv_path_ranlib@
+rm= @db_cv_path_rm@
+rpm= @db_cv_path_rpm@
+strip= @db_cv_path_strip@
+
+##################################################
+# General library information.
+##################################################
+DEF_LIB= @DEFAULT_LIB@
+DEF_LIB_CXX= @DEFAULT_LIB_CXX@
+INSTALLER= @INSTALLER@
LIBTOOL= @LIBTOOL@
-LIBTSO_LIBS= @LIBTSO_LIBS@
-LIBXSO_LIBS= @LIBXSO_LIBS@
POSTLINK= @POSTLINK@
-SOLINK= @SOLINK@
+SOLINK= @MAKEFILE_SOLINK@
SOFLAGS= @SOFLAGS@
-SOMAJOR= @DB_VERSION_MAJOR@
-SOVERSION= @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@
+LIBMAJOR= @DB_VERSION_MAJOR@
+LIBVERSION= @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@
+
+CPPFLAGS= -I$(builddir) -I$(srcdir) @CPPFLAGS@
-libdb= libdb.a
+##################################################
+# C API.
+##################################################
+CFLAGS= -c $(CPPFLAGS) @CFLAGS@
+CC= @MAKEFILE_CC@
+CCLINK= @MAKEFILE_CCLINK@
+
+LDFLAGS= @LDFLAGS@
+LIBS= @LIBS@
+LIBSO_LIBS= @LIBSO_LIBS@
-libso_base= libdb
-libso_linkname= $(libso_base)-$(SOVERSION).la
-libso= $(libso_base)-$(SOVERSION).@SOSUFFIX@
-libso_target= $(libso_base)-$(SOVERSION).la
-libso_default= $(libso_base).@SOSUFFIX@
-libso_major= $(libso_base)-$(SOMAJOR).@SOSUFFIX@
+libdb_base= libdb
+libdb= $(libdb_base).a
+libdb_version= $(libdb_base)-$(LIBVERSION).a
+libso= $(libdb_base)-$(LIBVERSION)@SOSUFFIX@
+libso_target= $(libdb_base)-$(LIBVERSION).la
+libso_default= $(libdb_base)@SOSUFFIX@
+libso_major= $(libdb_base)-$(LIBMAJOR)@SOSUFFIX@
##################################################
-# C++
+# C++ API.
#
-# C++ support is optional, and it can be used with or without shared libraries.
-# You must configure it using:
-# --enable-cxx
+# C++ support is optional, and can be built with static or shared libraries.
##################################################
-libcxx= libdb_cxx.a
-libxso_base= libdb_cxx
-libxso= $(libxso_base)-$(SOVERSION).@SOSUFFIX@
-libxso_target= $(libxso_base)-$(SOVERSION).la
-libxso_default= $(libxso_base).@SOSUFFIX@
-libxso_major= $(libxso_base)-$(SOMAJOR).@SOSUFFIX@
+CXXFLAGS= -c $(CPPFLAGS) @CXXFLAGS@
+CXX= @MAKEFILE_CXX@
+CXXLINK= @MAKEFILE_CXXLINK@
+XSOLINK= @MAKEFILE_XSOLINK@
+LIBXSO_LIBS= @LIBXSO_LIBS@
+
+libcxx_base= libdb_cxx
+libcxx= $(libcxx_base).a
+libcxx_version= $(libcxx_base)-$(LIBVERSION).a
+libxso= $(libcxx_base)-$(LIBVERSION)@SOSUFFIX@
+libxso_target= $(libcxx_base)-$(LIBVERSION).la
+libxso_default= $(libcxx_base)@SOSUFFIX@
+libxso_major= $(libcxx_base)-$(LIBMAJOR)@SOSUFFIX@
##################################################
-# JAVA
+# Java API.
#
# Java support is optional and requires shared librarires.
-# You must configure it using:
-# --enable-java --enable-dynamic
##################################################
CLASSPATH= $(JAVA_CLASSTOP)
-JAR= @JAR@
-JAVAC= env CLASSPATH=$(CLASSPATH) @JAVAC@
+LIBJSO_LIBS= @LIBJSO_LIBS@
+
+JAR= @JAR@
+JAVAC= env CLASSPATH="$(CLASSPATH)" @JAVAC@
JAVACFLAGS= @JAVACFLAGS@
-JAVA_BUILTFILE= .javabuilt
-JAVA_CLASSTOP= $(srcdir)/java/classes
+JAVA_CLASSTOP= ./classes
+JAVA_RPCCLASSTOP=./classes.rpc
+JAVA_EXCLASSTOP=./classes.ex
JAVA_SRCDIR= $(srcdir)/java/src
-JAVA_DBREL= com/sleepycat/db
-JAVA_DBDIR= $(JAVA_SRCDIR)/$(JAVA_DBREL)
-JAVA_EXDIR= $(JAVA_SRCDIR)/com/sleepycat/examples
+JAVA_DBREL= com/sleepycat/db
+JAVA_EXREL= com/sleepycat/examples
+JAVA_RPCREL= com/sleepycat/db/rpcserver
+JAVA_EXDIR= $(srcdir)/examples_java/src/com/sleepycat/examples
+JAVA_RPCDIR= $(srcdir)/rpc_server/java
libj_jarfile= db.jar
+libj_exjarfile= dbexamples.jar
+rpc_jarfile= dbsvc.jar
libjso_base= libdb_java
-libjso= $(libjso_base)-$(SOVERSION).@SOSUFFIX@
-libjso_target= $(libjso_base)-$(SOVERSION).la
-libjso_default= $(libjso_base).@SOSUFFIX@
-libjso_major= $(libjso_base)-$(SOMAJOR).@SOSUFFIX@
-libjso_g= $(libjso_base)-$(SOVERSION)_g.@SOSUFFIX@
+libjso= $(libjso_base)-$(LIBVERSION)@JMODSUFFIX@
+libjso_static= $(libjso_base)-$(LIBVERSION).a
+libjso_target= $(libjso_base)-$(LIBVERSION).la
+libjso_default= $(libjso_base)@JMODSUFFIX@
+libjso_major= $(libjso_base)-$(LIBMAJOR)@JMODSUFFIX@
+libjso_g= $(libjso_base)-$(LIBVERSION)_g@JMODSUFFIX@
##################################################
-# TCL
+# TCL API.
#
# Tcl support is optional and requires shared libraries.
-# You must configure it using:
-# --enable-tcl --with-tcl=DIR --enable-dynamic
##################################################
TCFLAGS= @TCFLAGS@
+LIBTSO_LIBS= @LIBTSO_LIBS@
libtso_base= libdb_tcl
-libtso= $(libtso_base)-$(SOVERSION).@SOSUFFIX@
-libtso_target= $(libtso_base)-$(SOVERSION).la
-libtso_default= $(libtso_base).@SOSUFFIX@
-libtso_major= $(libtso_base)-$(SOMAJOR).@SOSUFFIX@
+libtso= $(libtso_base)-$(LIBVERSION)@MODSUFFIX@
+libtso_static= $(libtso_base)-$(LIBVERSION).a
+libtso_target= $(libtso_base)-$(LIBVERSION).la
+libtso_default= $(libtso_base)@MODSUFFIX@
+libtso_major= $(libtso_base)-$(LIBMAJOR)@MODSUFFIX@
##################################################
-# DB_DUMP185 UTILITY
+# db_dump185 UTILITY
#
# The db_dump185 application should be compiled using the system's db.h file
# (which should be a DB 1.85/1.86 include file), and the system's 1.85/1.86
@@ -104,776 +143,1415 @@ libtso_major= $(libtso_base)-$(SOMAJOR).@SOSUFFIX@
# local libraries, for example. Do that by adding -I options to the DB185INC
# line, and -l options to the DB185LIB line.
##################################################
-DB185INC= -c @CFLAGS@ -I$(srcdir)/include @CPPFLAGS@
+DB185INC= -c @CFLAGS@ -I$(srcdir) @CPPFLAGS@
DB185LIB=
##################################################
-# INSTALLATION DIRECTORIES AND PERMISSIONS
+# NOTHING BELOW THIS LINE SHOULD EVER NEED TO BE MODIFIED.
##################################################
-prefix= @prefix@
-exec_prefix=@exec_prefix@
-bindir= @bindir@
-includedir=@includedir@
-libdir= @libdir@
-docdir= $(prefix)/docs
-
-dmode= 755
-emode= 555
-fmode= 444
-
-transform=@program_transform_name@
##################################################
-# PATHS FOR STANDARD USER-LEVEL COMMANDS
+# Object and utility lists.
##################################################
-SHELL= @db_cv_path_sh@
-ar= @db_cv_path_ar@ cr
-chmod= @db_cv_path_chmod@
-cp= @db_cv_path_cp@
-ln= @db_cv_path_ln@
-mkdir= @db_cv_path_mkdir@
-ranlib= @db_cv_path_ranlib@
-rm= @db_cv_path_rm@
-strip= @db_cv_path_strip@
-
-##################################################
-# NOTHING BELOW THIS LINE SHOULD EVER NEED TO BE MODIFIED.
-##################################################
-OBJS= @ADDITIONAL_OBJS@ @LIBOBJS@ @RPC_OBJS@ bt_compare@o@ bt_conv@o@ \
- bt_curadj@o@ bt_cursor@o@ bt_delete@o@ bt_method@o@ bt_open@o@ \
- bt_put@o@ bt_rec@o@ bt_reclaim@o@ bt_recno@o@ bt_rsearch@o@ \
- bt_search@o@ bt_split@o@ bt_stat@o@ bt_upgrade@o@ bt_verify@o@ \
- btree_auto@o@ crdel_auto@o@ crdel_rec@o@ db@o@ db_am@o@ db_auto@o@ \
+BTREE_OBJS=\
+ bt_compare@o@ bt_conv@o@ bt_curadj@o@ bt_cursor@o@ bt_delete@o@ \
+ bt_method@o@ bt_open@o@ bt_put@o@ bt_rec@o@ bt_reclaim@o@ \
+ bt_recno@o@ bt_rsearch@o@ bt_search@o@ bt_split@o@ bt_stat@o@ \
+ bt_upgrade@o@ btree_auto@o@
+BTREE_VRFY_OBJS=\
+ db_ovfl_vrfy@o@ db_vrfy@o@ db_vrfyutil@o@ bt_verify@o@
+HASH_OBJS=\
+ hash@o@ hash_auto@o@ hash_conv@o@ hash_dup@o@ hash_meta@o@ \
+ hash_method@o@ hash_open@o@ hash_page@o@ hash_rec@o@ \
+ hash_reclaim@o@ hash_stat@o@ hash_upgrade@o@
+HASH_VRFY_OBJS=\
+ hash_verify@o@
+QUEUE_OBJS=\
+ qam@o@ qam_auto@o@ qam_conv@o@ qam_files@o@ qam_method@o@ \
+ qam_open@o@ qam_rec@o@ qam_stat@o@ qam_upgrade@o@
+QUEUE_VRFY_OBJS=\
+ qam_verify@o@
+REP_OBJS=\
+ rep_method@o@ rep_record@o@ rep_region@o@ rep_util@o@
+
+C_OBJS= @ADDITIONAL_OBJS@ @REPLACEMENT_OBJS@ @CRYPTO_OBJS@ @RPC_CLIENT_OBJS@ \
+ crdel_auto@o@ crdel_rec@o@ db@o@ db_am@o@ db_auto@o@ \
db_byteorder@o@ db_cam@o@ db_conv@o@ db_dispatch@o@ db_dup@o@ \
- db_err@o@ db_getlong@o@ db_iface@o@ db_join@o@ db_log2@o@ \
- db_meta@o@ db_method@o@ db_overflow@o@ db_pr@o@ db_rec@o@ \
- db_reclaim@o@ db_ret@o@ db_salloc@o@ db_shash@o@ db_upg@o@ \
- db_upg_opd@o@ db_vrfy@o@ db_vrfyutil@o@ dbm@o@ env_method@o@ \
- env_open@o@ env_recover@o@ env_region@o@ hash@o@ hash_auto@o@ \
- hash_conv@o@ hash_dup@o@ hash_func@o@ hash_meta@o@ hash_method@o@ \
- hash_page@o@ hash_rec@o@ hash_reclaim@o@ hash_stat@o@ hash_upgrade@o@ \
- hash_verify@o@ hsearch@o@ lock@o@ lock_conflict@o@ \
+ db_err@o@ db_getlong@o@ db_idspace@o@ db_iface@o@ db_join@o@ \
+ db_log2@o@ db_meta@o@ db_method@o@ db_open@o@ db_overflow@o@ \
+ db_pr@o@ db_rec@o@ db_reclaim@o@ db_rename@o@ db_remove@o@ \
+ db_ret@o@ db_salloc@o@ db_shash@o@ db_truncate@o@ db_upg@o@ \
+ db_upg_opd@o@ dbm@o@ dbreg@o@ dbreg_auto@o@ dbreg_rec@o@ \
+ dbreg_util@o@ env_file@o@ env_method@o@ env_open@o@ \
+ env_recover@o@ env_region@o@ fileops_auto@o@ fop_basic@o@ \
+ fop_rec@o@ fop_util@o@ hash_func@o@ hmac@o@ hsearch@o@ lock@o@ \
lock_deadlock@o@ lock_method@o@ lock_region@o@ lock_stat@o@ \
- lock_util@o@ log@o@ log_archive@o@ log_auto@o@ log_compare@o@ \
- log_findckp@o@ log_get@o@ log_method@o@ log_put@o@ log_rec@o@ \
- log_register@o@ mp_alloc@o@ mp_bh@o@ mp_fget@o@ mp_fopen@o@ \
- mp_fput@o@ mp_fset@o@ mp_method@o@ mp_region@o@ mp_register@o@ \
- mp_stat@o@ mp_sync@o@ mp_trickle@o@ mutex@o@ os_abs@o@ \
- os_alloc@o@ os_dir@o@ os_errno@o@ os_fid@o@ os_finit@o@ \
- os_fsync@o@ os_handle@o@ os_map@o@ os_method@o@ os_oflags@o@ \
- os_open@o@ os_region@o@ os_rename@o@ os_root@o@ os_rpath@o@ \
- os_rw@o@ os_seek@o@ os_sleep@o@ os_spin@o@ os_stat@o@ \
- os_tmpdir@o@ os_unlink@o@ qam@o@ qam_auto@o@ qam_conv@o@ qam_files@o@ \
- qam_method@o@ qam_open@o@ qam_rec@o@ qam_stat@o@ qam_upgrade@o@ \
- qam_verify@o@ txn@o@ txn_auto@o@ txn_rec@o@ txn_region@o@ xa@o@ \
+ lock_util@o@ log@o@ log_archive@o@ log_compare@o@ log_get@o@ \
+ log_method@o@ log_put@o@ mp_alloc@o@ mp_bh@o@ mp_fget@o@ \
+ mp_fopen@o@ mp_fput@o@ mp_fset@o@ mp_method@o@ mp_region@o@ \
+ mp_register@o@ mp_stat@o@ mp_sync@o@ mp_trickle@o@ mutex@o@ \
+ os_abs@o@ os_alloc@o@ os_clock@o@ os_config@o@ os_dir@o@ \
+ os_errno@o@ os_fid@o@ os_fsync@o@ os_handle@o@ os_id@o@ \
+ os_map@o@ os_method@o@ os_oflags@o@ os_open@o@ os_region@o@ \
+ os_rename@o@ os_root@o@ os_rpath@o@ os_rw@o@ os_seek@o@ \
+ os_sleep@o@ os_spin@o@ os_stat@o@ os_tmpdir@o@ os_unlink@o@ \
+ sha1@o@ txn@o@ txn_auto@o@ txn_method@o@ txn_rec@o@ \
+ txn_recover@o@ txn_region@o@ txn_stat@o@ txn_util@o@ xa@o@ \
xa_db@o@ xa_map@o@
-COBJS= cxx_app@o@ cxx_except@o@ cxx_lock@o@ cxx_log@o@ cxx_mpool@o@ \
- cxx_table@o@ cxx_txn@o@
+CXX_OBJS=\
+ cxx_db@o@ cxx_dbc@o@ cxx_dbt@o@ cxx_env@o@ cxx_except@o@ \
+ cxx_lock@o@ cxx_logc@o@ cxx_mpool@o@ cxx_txn@o@ cxx_multi@o@
-DBSOBJS=dbs@o@ dbs_am@o@ dbs_checkpoint@o@ dbs_debug@o@ dbs_handles@o@ \
- dbs_log@o@ dbs_qam@o@ dbs_spawn@o@ dbs_trickle@o@ dbs_util@o@ \
- dbs_yield@o@
+CRYPTO_OBJS=\
+ aes_method@o@ crypto@o@ mt19937db@o@ rijndael-alg-fst@o@ \
+ rijndael-api-fst@o@
-EOBJS= ex_access@o@ ex_btrec@o@ ex_dbclient@o@ ex_env@o@ ex_lock@o@ \
- ex_mpool@o@ ex_thread@o@ ex_tpcb@o@
+JAVA_OBJS=\
+ db_java_wrap@o@
-JOBJS= java_Db@o@ java_DbEnv@o@ java_DbLock@o@ java_DbLsn@o@ java_DbTxn@o@ \
- java_Dbc@o@ java_Dbt@o@ java_info@o@ java_locked@o@ java_util@o@
+JAVA_SLEEPYCAT=$(JAVA_SRCDIR)/com/sleepycat
+JAVA_DBSRCS=\
+ $(JAVA_SLEEPYCAT)/bdb/bind/ByteArrayBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/ByteArrayFormat.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/DataBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/DataBuffer.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/DataFormat.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/DataType.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/EntityBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/KeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/SimpleBuffer.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/ClassCatalog.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialFormat.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialInput.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialOutput.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialSerialBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/SerialSerialKeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/TupleSerialBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/TupleSerialKeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/TupleSerialMarshalledBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/MarshalledTupleData.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/MarshalledTupleKeyEntity.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleFormat.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleInput.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleInputBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleMarshalledBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleOutput.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleTupleBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleTupleKeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleTupleMarshalledBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.java \
+ $(JAVA_SLEEPYCAT)/db/@db_cv_build_type@/DbConstants.java \
+ $(JAVA_SLEEPYCAT)/db/db_java.java \
+ $(JAVA_SLEEPYCAT)/db/db_javaJNI.java \
+ $(JAVA_SLEEPYCAT)/db/Db.java \
+ $(JAVA_SLEEPYCAT)/db/DbAppDispatch.java \
+ $(JAVA_SLEEPYCAT)/db/DbAppendRecno.java \
+ $(JAVA_SLEEPYCAT)/db/DbBtreeCompare.java \
+ $(JAVA_SLEEPYCAT)/db/DbBtreePrefix.java \
+ $(JAVA_SLEEPYCAT)/db/DbBtreeStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbClient.java \
+ $(JAVA_SLEEPYCAT)/db/DbDeadlockException.java \
+ $(JAVA_SLEEPYCAT)/db/DbDupCompare.java \
+ $(JAVA_SLEEPYCAT)/db/DbEnv.java \
+ $(JAVA_SLEEPYCAT)/db/DbEnvFeedback.java \
+ $(JAVA_SLEEPYCAT)/db/DbEnvFeedbackHandler.java \
+ $(JAVA_SLEEPYCAT)/db/DbErrcall.java \
+ $(JAVA_SLEEPYCAT)/db/DbErrorHandler.java \
+ $(JAVA_SLEEPYCAT)/db/DbException.java \
+ $(JAVA_SLEEPYCAT)/db/DbFeedback.java \
+ $(JAVA_SLEEPYCAT)/db/DbFeedbackHandler.java \
+ $(JAVA_SLEEPYCAT)/db/DbHash.java \
+ $(JAVA_SLEEPYCAT)/db/DbHashStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbKeyRange.java \
+ $(JAVA_SLEEPYCAT)/db/DbLock.java \
+ $(JAVA_SLEEPYCAT)/db/DbLockNotGrantedException.java \
+ $(JAVA_SLEEPYCAT)/db/DbLockRequest.java \
+ $(JAVA_SLEEPYCAT)/db/DbLockStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbLogStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbLogc.java \
+ $(JAVA_SLEEPYCAT)/db/DbLsn.java \
+ $(JAVA_SLEEPYCAT)/db/DbMemoryException.java \
+ $(JAVA_SLEEPYCAT)/db/DbMpoolFStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbMpoolFile.java \
+ $(JAVA_SLEEPYCAT)/db/DbMpoolStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbMultipleDataIterator.java \
+ $(JAVA_SLEEPYCAT)/db/DbMultipleIterator.java \
+ $(JAVA_SLEEPYCAT)/db/DbMultipleKeyDataIterator.java \
+ $(JAVA_SLEEPYCAT)/db/DbMultipleRecnoDataIterator.java \
+ $(JAVA_SLEEPYCAT)/db/DbPanicHandler.java \
+ $(JAVA_SLEEPYCAT)/db/DbPreplist.java \
+ $(JAVA_SLEEPYCAT)/db/DbQueueStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbRepStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbRepTransport.java \
+ $(JAVA_SLEEPYCAT)/db/DbRunRecoveryException.java \
+ $(JAVA_SLEEPYCAT)/db/DbSecondaryKeyCreate.java \
+ $(JAVA_SLEEPYCAT)/db/DbTxn.java \
+ $(JAVA_SLEEPYCAT)/db/DbTxnStat.java \
+ $(JAVA_SLEEPYCAT)/db/DbUtil.java \
+ $(JAVA_SLEEPYCAT)/db/Dbc.java \
+ $(JAVA_SLEEPYCAT)/db/Dbt.java \
+ $(JAVA_SLEEPYCAT)/bdb/CurrentTransaction.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataCursor.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataDb.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataEnvironment.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataIndex.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataStore.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataThang.java \
+ $(JAVA_SLEEPYCAT)/bdb/DataView.java \
+ $(JAVA_SLEEPYCAT)/bdb/ForeignKeyIndex.java \
+ $(JAVA_SLEEPYCAT)/bdb/IntegrityConstraintException.java \
+ $(JAVA_SLEEPYCAT)/bdb/KeyRange.java \
+ $(JAVA_SLEEPYCAT)/bdb/KeyRangeException.java \
+ $(JAVA_SLEEPYCAT)/bdb/PrimaryKeyAssigner.java \
+ $(JAVA_SLEEPYCAT)/bdb/RecordNumberBinding.java \
+ $(JAVA_SLEEPYCAT)/bdb/RecordNumberFormat.java \
+ $(JAVA_SLEEPYCAT)/bdb/StoredClassCatalog.java \
+ $(JAVA_SLEEPYCAT)/bdb/TransactionRunner.java \
+ $(JAVA_SLEEPYCAT)/bdb/TransactionWorker.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/MapEntry.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredCollection.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredCollections.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredContainer.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredEntrySet.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredIterator.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredKeySet.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredList.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredMap.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredMapEntry.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredSortedEntrySet.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredSortedKeySet.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredSortedMap.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredSortedValueSet.java \
+ $(JAVA_SLEEPYCAT)/bdb/collection/StoredValueSet.java \
+ $(JAVA_SLEEPYCAT)/bdb/factory/TupleSerialDbFactory.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/ExceptionUnwrapper.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/ExceptionWrapper.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/FastInputStream.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/FastOutputStream.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/IOExceptionWrapper.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/RuntimeExceptionWrapper.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/TimeUnits.java \
+ $(JAVA_SLEEPYCAT)/bdb/util/UtfOps.java
-RPC_OBJS=client@o@ db_server_clnt@o@ db_server_xdr@o@ gen_client@o@ \
+JAVA_EXSRCS=\
+ $(JAVA_EXDIR)/db/AccessExample.java \
+ $(JAVA_EXDIR)/db/BtRecExample.java \
+ $(JAVA_EXDIR)/db/BulkAccessExample.java \
+ $(JAVA_EXDIR)/db/EnvExample.java \
+ $(JAVA_EXDIR)/db/LockExample.java \
+ $(JAVA_EXDIR)/db/TpcbExample.java \
+ $(JAVA_EXDIR)/bdb/access/AccessExample.java \
+ $(JAVA_EXDIR)/bdb/helloworld/HelloDatabaseWorld.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/PartValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/ShipmentValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/SupplierValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/basic/Weight.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/Part.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/PartValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/Shipment.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/ShipmentValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/Supplier.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/SupplierValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/entity/Weight.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/Part.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/PartValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/Shipment.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/ShipmentValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/Supplier.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/SupplierValue.java \
+ $(JAVA_EXDIR)/bdb/shipment/tuple/Weight.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/Part.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/Shipment.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/Supplier.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/sentity/Weight.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/MarshalledEntity.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/MarshalledKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/Part.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/Shipment.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/Supplier.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/marshal/Weight.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/Part.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/PartKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/Sample.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/SampleDatabase.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/SampleViews.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/Shipment.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/ShipmentKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/Supplier.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/SupplierKey.java \
+ $(JAVA_EXDIR)/bdb/shipment/factory/Weight.java
+
+TCL_OBJS=\
+ tcl_compat@o@ tcl_db@o@ tcl_db_pkg@o@ tcl_dbcursor@o@ tcl_env@o@ \
+ tcl_internal@o@ tcl_lock@o@ tcl_log@o@ tcl_mp@o@ tcl_rep@o@ \
+ tcl_txn@o@ tcl_util@o@
+
+RPC_CLIENT_OBJS=\
+ client@o@ db_server_clnt@o@ db_server_xdr@o@ gen_client@o@ \
gen_client_ret@o@
-RPC_SRV=db_server_proc@o@ db_server_svc@o@ db_server_util@o@ gen_db_server@o@
-
-TOBJS= tcl_compat@o@ tcl_db@o@ tcl_db_pkg@o@ tcl_dbcursor@o@ tcl_env@o@ \
- tcl_internal@o@ tcl_lock@o@ tcl_log@o@ tcl_mp@o@ tcl_txn@o@
-UOBJS= db_archive@o@ db_checkpoint@o@ db_deadlock@o@ db_dump185@o@ \
- db_dump@o@ db_load@o@ db_printlog@o@ db_recover@o@ db_stat@o@ \
- db_upgrade@o@ db_verify@o@ util_log@o@ util_sig@o@
-
-PROGS= @ADDITIONAL_PROGS@ db_archive db_checkpoint db_deadlock \
+RPC_SRV_OBJS=\
+ db_server_proc@o@ db_server_svc@o@ db_server_util@o@ \
+ gen_db_server@o@
+
+RPC_CXXSRV_OBJS=\
+ db_server_cxxproc@o@ db_server_cxxutil@o@ db_server_svc@o@ \
+ gen_db_server@o@
+
+RPC_JAVASRV_SRCS=\
+ $(JAVA_RPCDIR)/DbDispatcher.java \
+ $(JAVA_RPCDIR)/DbServer.java \
+ $(JAVA_RPCDIR)/FreeList.java \
+ $(JAVA_RPCDIR)/LocalIterator.java \
+ $(JAVA_RPCDIR)/RpcDb.java \
+ $(JAVA_RPCDIR)/RpcDbEnv.java \
+ $(JAVA_RPCDIR)/RpcDbTxn.java \
+ $(JAVA_RPCDIR)/RpcDbc.java \
+ $(JAVA_RPCDIR)/Timer.java \
+ $(JAVA_RPCDIR)/gen/DbServerStub.java \
+ $(JAVA_RPCDIR)/gen/__db_associate_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_associate_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_bt_maxkey_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_bt_maxkey_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_bt_minkey_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_bt_minkey_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_close_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_close_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_create_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_create_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_cursor_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_cursor_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_del_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_del_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_encrypt_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_encrypt_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_extentsize_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_extentsize_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_bt_minkey_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_bt_minkey_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_encrypt_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_encrypt_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_extentsize_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_extentsize_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_h_ffactor_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_h_ffactor_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_h_nelem_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_h_nelem_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_lorder_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_lorder_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_name_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_name_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_open_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_open_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_pagesize_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_pagesize_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_delim_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_delim_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_len_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_len_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_pad_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_get_re_pad_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_get_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_h_ffactor_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_h_ffactor_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_h_nelem_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_h_nelem_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_join_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_join_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_key_range_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_key_range_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_lorder_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_lorder_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_open_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_open_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_pagesize_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_pagesize_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_pget_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_pget_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_put_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_put_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_re_delim_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_re_delim_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_re_len_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_re_len_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_re_pad_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_re_pad_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_remove_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_remove_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_rename_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_rename_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_stat_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_stat_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_sync_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_sync_reply.java \
+ $(JAVA_RPCDIR)/gen/__db_truncate_msg.java \
+ $(JAVA_RPCDIR)/gen/__db_truncate_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_close_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_close_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_count_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_count_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_del_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_del_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_dup_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_dup_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_get_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_get_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_pget_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_pget_reply.java \
+ $(JAVA_RPCDIR)/gen/__dbc_put_msg.java \
+ $(JAVA_RPCDIR)/gen/__dbc_put_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_cachesize_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_cachesize_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_close_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_close_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_create_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_create_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_dbremove_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_dbremove_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_dbrename_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_dbrename_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_encrypt_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_encrypt_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_get_cachesize_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_get_cachesize_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_get_encrypt_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_get_encrypt_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_get_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_get_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_get_home_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_get_home_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_get_open_flags_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_get_open_flags_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_open_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_open_reply.java \
+ $(JAVA_RPCDIR)/gen/__env_remove_msg.java \
+ $(JAVA_RPCDIR)/gen/__env_remove_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_abort_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_abort_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_begin_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_begin_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_commit_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_commit_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_discard_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_discard_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_prepare_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_prepare_reply.java \
+ $(JAVA_RPCDIR)/gen/__txn_recover_msg.java \
+ $(JAVA_RPCDIR)/gen/__txn_recover_reply.java \
+ $(JAVA_RPCDIR)/gen/db_server.java
+
+UTIL_PROGS=\
+ @ADDITIONAL_PROGS@ \
+ db_archive db_checkpoint db_deadlock \
db_dump db_load db_printlog db_recover db_stat db_upgrade db_verify
-JAVA_DBSRCS=\
- $(JAVA_DBDIR)/Db.java $(JAVA_DBDIR)/DbAppendRecno.java \
- $(JAVA_DBDIR)/DbBtreeCompare.java \
- $(JAVA_DBDIR)/DbBtreePrefix.java $(JAVA_DBDIR)/DbBtreeStat.java \
- $(JAVA_DBDIR)/DbConstants.java $(JAVA_DBDIR)/DbDeadlockException.java \
- $(JAVA_DBDIR)/DbDupCompare.java $(JAVA_DBDIR)/DbEnv.java \
- $(JAVA_DBDIR)/DbEnvFeedback.java $(JAVA_DBDIR)/DbErrcall.java \
- $(JAVA_DBDIR)/DbException.java $(JAVA_DBDIR)/DbFeedback.java \
- $(JAVA_DBDIR)/DbHash.java $(JAVA_DBDIR)/DbHashStat.java \
- $(JAVA_DBDIR)/DbKeyRange.java $(JAVA_DBDIR)/DbLock.java \
- $(JAVA_DBDIR)/DbLockStat.java $(JAVA_DBDIR)/DbLogStat.java \
- $(JAVA_DBDIR)/DbLsn.java $(JAVA_DBDIR)/DbMemoryException.java \
- $(JAVA_DBDIR)/DbMpoolFStat.java $(JAVA_DBDIR)/DbMpoolStat.java \
- $(JAVA_DBDIR)/DbOutputStreamErrcall.java \
- $(JAVA_DBDIR)/DbQueueStat.java $(JAVA_DBDIR)/DbRecoveryInit.java \
- $(JAVA_DBDIR)/DbRunRecoveryException.java $(JAVA_DBDIR)/DbTxn.java \
- $(JAVA_DBDIR)/DbTxnRecover.java $(JAVA_DBDIR)/DbTxnStat.java \
- $(JAVA_DBDIR)/Dbc.java $(JAVA_DBDIR)/Dbt.java
-
-JAVA_EXSRCS=\
- $(JAVA_EXDIR)/AccessExample.java \
- $(JAVA_EXDIR)/BtRecExample.java \
- $(JAVA_EXDIR)/EnvExample.java \
- $(JAVA_EXDIR)/LockExample.java \
- $(JAVA_EXDIR)/TpcbExample.java
+##################################################
+# List of files installed into the library directory.
+##################################################
+LIB_INSTALL_FILE_LIST=\
+ $(libdb) \
+ $(libso) \
+ $(libso_default) \
+ $(libso_major) \
+ $(libdb_version) \
+ $(libso_target) \
+ $(libcxx) \
+ $(libxso) \
+ $(libxso_default) \
+ $(libxso_major) \
+ $(libcxx_version) \
+ $(libxso_target) \
+ $(libtso) \
+ $(libtso_default) \
+ $(libtso_major) \
+ $(libtso_static) \
+ $(libtso_target) \
+ $(libjso) \
+ $(libjso_default) \
+ $(libjso_g) \
+ $(libjso_major) \
+ $(libjso_static) \
+ $(libjso_target) \
+ $(libj_exjarfile) \
+ $(libj_jarfile)
##################################################
-# Note: Berkeley DB Makefiles are configured to build either a static or
-# a dynamic library. You should not attempt to build both library types
-# in the same directory, as they have incompatible object file formats.
-# To build both static and dynamic libraries, create two separate build
-# directories, and configure and build them separately.
+# We're building a standard library or a RPM file hierarchy.
+# Note: "all" must be the first target in the Makefile.
##################################################
-all: @DEFAULT_LIB@ @ADDITIONAL_LIBS@ @ADDITIONAL_LANG@ $(PROGS)
+all: @BUILD_TARGET@
-$(libdb): $(OBJS)
- $(ar) $@ $(OBJS)
- test ! -f $(ranlib) || $(ranlib) $@
+install-strip install: all @INSTALL_TARGET@
-$(libcxx): $(COBJS) $(OBJS)
- $(ar) $@ $(COBJS) $(OBJS)
+##################################################
+# Library and standard utilities build.
+##################################################
+library_build: @INSTALL_LIBS@ @ADDITIONAL_LANG@ $(UTIL_PROGS)
+
+# Static C library named libdb.a.
+$(libdb): $(DEF_LIB)
+ $(rm) -f $@
+ test ! -f .libs/$(libdb_version) || \
+ $(ln) -s .libs/$(libdb_version) $@
+ test -f .libs/$(libdb_version) || \
+ (test -f $(libdb_version) && $(ln) -s $(libdb_version) $@)
+
+# Real static C library.
+$(libdb_version): $(C_OBJS)
+ $(ar) cr $@ $(C_OBJS)
test ! -f $(ranlib) || $(ranlib) $@
-$(libso_target): $(OBJS)
- $(SOLINK) $(SOFLAGS) -o $(libso_target) \
- $(OBJS) $(LDFLAGS) $(LIBSO_LIBS)
+# Shared C library.
+$(libso_target): $(C_OBJS)
+ $(SOLINK) $(SOFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) $(LIBSO_LIBS)
+
+# Static C++ library named libdb_cxx.a.
+$(libcxx): $(DEF_LIB_CXX)
+ $(rm) -f $@
+ test ! -f .libs/$(libcxx_version) || \
+ $(ln) -s .libs/$(libcxx_version) $@
+ test -f .libs/$(libcxx_version) || \
+ (test -f $(libcxx_version) && $(ln) -s $(libcxx_version) $@)
+
+# Real static C++ library.
+$(libcxx_version): $(CXX_OBJS) $(C_OBJS)
+ $(ar) cr $@ $(CXX_OBJS) $(C_OBJS)
+ test ! -f $(ranlib) || $(ranlib) $@
-$(libxso_target): $(COBJS) $(OBJS)
- $(SOLINK) $(SOFLAGS) -o $(libxso_target) \
- $(COBJS) $(OBJS) $(LDFLAGS) $(LIBXSO_LIBS)
+# Shared C++ library.
+$(libxso_target): $(CXX_OBJS) $(C_OBJS)
+ $(XSOLINK) $(SOFLAGS) $(LDFLAGS) \
+ -o $@ $(CXX_OBJS) $(C_OBJS) $(LIBXSO_LIBS)
-$(libjso_target): $(JOBJS) $(OBJS)
- $(SOLINK) $(SOFLAGS) -o $(libjso_target) \
- $(JOBJS) $(OBJS) $(LDFLAGS) $(LIBJSO_LIBS)
+# Shared Java library.
+$(libjso_target): $(JAVA_OBJS) $(C_OBJS)
+ $(SOLINK) -shrext @JMODSUFFIX@ $(SOFLAGS) $(LDFLAGS) \
+ -o $@ $(JAVA_OBJS) $(C_OBJS) $(LIBJSO_LIBS)
-$(libtso_target): $(TOBJS) $(OBJS)
- $(SOLINK) $(SOFLAGS) -o $(libtso_target) \
- $(TOBJS) $(OBJS) $(LDFLAGS) $(LIBTSO_LIBS)
+# Shared Tcl library.
+$(libtso_target): $(TCL_OBJS) $(C_OBJS)
+ $(SOLINK) @LIBTSO_MODULE@ $(SOFLAGS) $(LDFLAGS) \
+ -o $@ $(TCL_OBJS) $(C_OBJS) $(LIBTSO_LIBS)
##################################################
# Creating individual dependencies and actions for building class
# files is possible, but it is very messy and error prone.
##################################################
-java: $(JAVA_CLASSTOP) $(JAVA_BUILTFILE)
+java: $(libj_jarfile) $(libj_exjarfile)
-$(JAVA_BUILTFILE): $(JAVA_DBSRCS) $(JAVA_EXSRCS)
- @test -f $(rm) || (echo 'rm not found.'; exit 1)
- @test -f $(cp) || (echo 'cp not found.'; exit 1)
+$(libj_jarfile): $(JAVA_DBSRCS)
+ @test -d $(JAVA_CLASSTOP) || \
+ ($(mkdir) -p $(JAVA_CLASSTOP) && $(chmod) $(dmode) $(JAVA_CLASSTOP))
$(JAVAC) -d $(JAVA_CLASSTOP) $(JAVACFLAGS) $(JAVA_DBSRCS)
- @cd $(JAVA_CLASSTOP) && $(JAR) cf $(libj_jarfile) $(JAVA_DBREL)
- $(JAVAC) -d $(JAVA_CLASSTOP) $(JAVACFLAGS) $(JAVA_EXSRCS)
- @echo This file helps with building java using make > $(JAVA_BUILTFILE)
-
-$(JAVA_CLASSTOP):
- @test -f $(mkdir) || (echo 'mkdir not found.'; exit 1)
- $(mkdir) $(JAVA_CLASSTOP)
+ cd $(JAVA_CLASSTOP) && $(JAR) cf ../$(libj_jarfile) ./com/sleepycat
+
+$(libj_exjarfile): $(libj_jarfile) $(JAVA_EXSRCS)
+ @test -d $(JAVA_EXCLASSTOP) || \
+ ($(mkdir) -p $(JAVA_EXCLASSTOP) && \
+ $(chmod) $(dmode) $(JAVA_EXCLASSTOP))
+ $(JAVAC) -classpath $(libj_jarfile) -d $(JAVA_EXCLASSTOP) \
+ $(JAVACFLAGS) $(JAVA_EXSRCS)
+ cd $(JAVA_EXCLASSTOP) && $(JAR) cf ../$(libj_exjarfile) .
+
+$(rpc_jarfile): $(libj_jarfile) $(RPC_JAVASRV_SRCS)
+ @test -d $(JAVA_RPCCLASSTOP) || \
+ ($(mkdir) -p $(JAVA_RPCCLASSTOP) && \
+ $(chmod) $(dmode) $(JAVA_RPCCLASSTOP))
+ env CLASSPATH=$(CLASSPATH):$(JAVA_RPCDIR)/oncrpc.jar \
+ @JAVAC@ -d $(JAVA_RPCCLASSTOP) $(JAVACFLAGS) $(RPC_JAVASRV_SRCS)
+ cd $(JAVA_RPCCLASSTOP) && $(JAR) cf ../$(rpc_jarfile) $(JAVA_RPCREL)
##################################################
# Utilities
##################################################
-berkeley_db_svc: $(RPC_SRV) util_log@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) $(RPC_SRV) util_log@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-db_archive: db_archive@o@ util_sig@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) \
- db_archive@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-db_checkpoint: db_checkpoint@o@ util_log@o@ util_sig@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) \
- db_checkpoint@o@ util_log@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-db_deadlock: db_deadlock@o@ util_log@o@ util_sig@o@ @DEFAULT_LIB@
+berkeley_db_svc: $(RPC_SRV_OBJS) util_log@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
- db_deadlock@o@ util_log@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+ $(RPC_SRV_OBJS) util_log@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-db_dump: db_dump@o@ util_sig@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) db_dump@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+berkeley_db_cxxsvc: $(RPC_CXXSRV_OBJS) util_log@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) \
+ $(RPC_CXXSRV_OBJS) util_log@o@ $(DEF_LIB_CXX) $(LIBS)
$(POSTLINK) $@
-db_dump185: db_dump185@o@ @LIBOBJS@
- $(CCLINK) -o $@ $(LDFLAGS) db_dump185@o@ @LIBOBJS@ $(DB185LIB)
- $(POSTLINK) $@
+berkeley_db_javasvc: $(rpc_jarfile)
+ echo > $@ "#!/bin/sh"
+ echo >> $@ CLASSPATH="$(CLASSPATH):$(rpc_jarfile):$(JAVA_RPCDIR)/oncrpc.jar"
+ echo >> $@ LD_LIBRARY_PATH=.libs
+ echo >> $@ export CLASSPATH LD_LIBRARY_PATH
+ echo >> $@ exec java com.sleepycat.db.rpcserver.DbServer \$$@
+ chmod +x $@
-db_load: db_load@o@ util_sig@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) db_load@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-db_printlog: db_printlog@o@ util_sig@o@ @DEFAULT_LIB@
+db_archive: db_archive@o@ util_sig@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
- db_printlog@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+ db_archive@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-db_recover: db_recover@o@ util_sig@o@ @DEFAULT_LIB@
+db_checkpoint: db_checkpoint@o@ util_log@o@ util_sig@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
- db_recover@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+ db_checkpoint@o@ util_log@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-db_stat: db_stat@o@ util_sig@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) db_stat@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-db_upgrade: db_upgrade@o@ util_sig@o@ @DEFAULT_LIB@
+db_deadlock: db_deadlock@o@ util_log@o@ util_sig@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
- db_upgrade@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+ db_deadlock@o@ util_log@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-db_verify: db_verify@o@ util_sig@o@ @DEFAULT_LIB@
+db_dump: db_dump@o@ util_cache@o@ util_sig@o@ $(DEF_LIB)
$(CCLINK) -o $@ $(LDFLAGS) \
- db_verify@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS)
+ db_dump@o@ util_cache@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-##################################################
-# Example programs
-##################################################
-ex_access: ex_access@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_access@o@ $(LIBDB_ARGS) $(LIBS)
+db_dump185: db_dump185@o@ @REPLACEMENT_OBJS@
+ $(CCLINK) -o $@ $(LDFLAGS) db_dump185@o@ @REPLACEMENT_OBJS@ $(DB185LIB)
$(POSTLINK) $@
-ex_btrec: ex_btrec@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_btrec@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-ex_dbclient: ex_dbclient@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_dbclient@o@ $(LIBDB_ARGS) $(LIBS)
- $(POSTLINK) $@
-
-ex_env: ex_env@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_env@o@ $(LIBDB_ARGS) $(LIBS)
+db_load: db_load@o@ util_cache@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_load@o@ util_cache@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-ex_lock: ex_lock@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_lock@o@ $(LIBDB_ARGS) $(LIBS)
+db_printlog: db_printlog@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_printlog@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-ex_mpool: ex_mpool@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_mpool@o@ $(LIBDB_ARGS) $(LIBS)
+db_recover: db_recover@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_recover@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-ex_thread: ex_thread@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_thread@o@ $(LIBDB_ARGS) $(LIBS)
+db_stat: db_stat@o@ util_cache@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_stat@o@ util_cache@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-ex_tpcb: ex_tpcb@o@ @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) ex_tpcb@o@ $(LIBDB_ARGS) $(LIBS)
+db_upgrade: db_upgrade@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_upgrade@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
-##################################################
-# Multi-threaded tester.
-##################################################
-dbs: $(DBSOBJS) @DEFAULT_LIB@
- $(CCLINK) -o $@ $(LDFLAGS) $(DBSOBJS) $(LIBDB_ARGS) @DBS_LIBS@ $(LIBS)
+db_verify: db_verify@o@ util_cache@o@ util_sig@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) \
+ db_verify@o@ util_cache@o@ util_sig@o@ $(DEF_LIB) $(LIBS)
$(POSTLINK) $@
##################################################
-# Standard Makefile targets.
+# Library and standard utilities install.
##################################################
-RMLIST= berkeley_db_svc db_dump185 dbs ex_access ex_btrec ex_dbclient \
- ex_env ex_lock ex_mpool ex_thread ex_tpcb
-clean:
- $(rm) -f $(OBJS)
- $(rm) -f $(COBJS) $(DBSOBJS) $(EOBJS) $(CEOBJS) $(JOBJS)
- $(rm) -f $(TOBJS) $(UOBJS) $(RPC_OBJS) $(RPC_SRV)
- $(rm) -f $(PROGS) $(RMLIST)
- $(rm) -f *@o@ *.o *.lo core *.core
- $(rm) -rf ALL.OUT TESTDIR
- $(rm) -rf .libs $(libdb) $(libcxx)
- $(rm) -rf $(libso_target) $(libso) $(libso_default) $(libso_major)
- $(rm) -rf $(libxso_target) $(libxso) $(libxso_default) $(libxso_major)
- $(rm) -rf $(libtso_target) $(libtso) $(libtso_default) $(libtso_major)
- $(rm) -rf $(libjso_target) $(libjso) $(libjso_default) $(libjso_major)
-
-depend obj:
-
-realclean distclean: clean
- $(rm) -f Makefile config.cache config.log config.status db_config.h
- $(rm) -f confdefs.h db.h db_int.h db_185.h include.tcl libtool
-
-install: all install_setup \
- install_include install_lib install_utilities install_docs
+library_install: install_setup
+library_install: install_include install_lib install_utilities install_docs
-uninstall: uninstall_utilities uninstall_include uninstall_lib uninstall_docs
+uninstall: uninstall_include uninstall_lib uninstall_utilities uninstall_docs
install_setup:
- @test -f $(chmod) || (echo 'chmod not found.'; exit 1)
- @test -f $(cp) || (echo 'cp not found.'; exit 1)
- @test -f $(mkdir) || (echo 'mkdir not found.'; exit 1)
- @test -f $(rm) || (echo 'rm not found.'; exit 1)
+ @test -d $(DESTDIR)$(prefix) || \
+ ($(mkdir) -p $(DESTDIR)$(prefix) && \
+ $(chmod) $(dmode) $(DESTDIR)$(prefix))
+INCDOT= db.h db_cxx.h @ADDITIONAL_INCS@
install_include:
- @echo "Installing DB include files: $(includedir) ..."
- @test -d $(includedir) || \
- ($(mkdir) -p $(includedir) && $(chmod) $(dmode) $(includedir))
- @cd $(includedir) && $(rm) -f db.h db_185.h db_cxx.h
- @$(cp) -p db.h \
- $(srcdir)/include/db_cxx.h @ADDITIONAL_INCS@ $(includedir)
- @cd $(includedir) && $(chmod) $(fmode) db.h db_cxx.h @ADDITIONAL_INCS@
+ @echo "Installing DB include files: $(DESTDIR)$(includedir) ..."
+ @test -d $(DESTDIR)$(includedir) || \
+ ($(mkdir) -p $(DESTDIR)$(includedir) && \
+ $(chmod) $(dmode) $(DESTDIR)$(includedir))
+ @cd $(DESTDIR)$(includedir) && $(rm) -f $(INCDOT)
+ @$(cp) -p $(INCDOT) $(DESTDIR)$(includedir)
+ @cd $(DESTDIR)$(includedir) && $(chmod) $(fmode) $(INCDOT)
uninstall_include:
- -cd $(includedir) && $(rm) -f db.h db_185.h db_cxx.h
-
-install_lib: @DEFAULT_INSTALL@
+ @cd $(DESTDIR)$(includedir) && $(rm) -f $(INCDOT)
+
+install_lib:
+ @echo "Installing DB library: $(DESTDIR)$(libdir) ..."
+ @test -d $(DESTDIR)$(libdir) || \
+ ($(mkdir) -p $(DESTDIR)$(libdir) && \
+ $(chmod) $(dmode) $(DESTDIR)$(libdir))
+ @cd $(DESTDIR)$(libdir) && $(rm) -f $(LIB_INSTALL_FILE_LIST)
+ @$(INSTALLER) @INSTALL_LIBS@ $(DESTDIR)$(libdir)
+ @(cd $(DESTDIR)$(libdir) && \
+ test -f $(libso) && $(ln) -s $(libso) $(libso_default); \
+ test -f $(libso) && $(ln) -s $(libso) $(libso_major); \
+ test -f $(libxso) && $(ln) -s $(libxso) $(libxso_default); \
+ test -f $(libxso) && $(ln) -s $(libxso) $(libxso_major); \
+ test -f $(libtso) && $(ln) -s $(libtso) $(libtso_default); \
+ test -f $(libtso) && $(ln) -s $(libtso) $(libtso_major); \
+ test -f $(libjso) && $(ln) -s $(libjso) $(libjso_default); \
+ test -f $(libjso) && $(ln) -s $(libjso) $(libjso_major); \
+ test -f $(libjso) && $(ln) -s $(libjso) $(libjso_g)) || true
+ @(test -f $(libj_jarfile) && \
+ $(cp) $(libj_jarfile) $(DESTDIR)$(libdir) && \
+ $(chmod) $(fmode) $(DESTDIR)$(libdir)/$(libj_jarfile)) || true
uninstall_lib:
- -cd $(libdir) && $(rm) -f $(libdb) $(libcxx) \
- $(libso_target) $(libso) $(libso_default) $(libso_major) \
- $(libxso_target) $(libxso) $(libxso_default) $(libxso_major) \
- $(libtso_target) $(libtso) $(libtso_default) $(libtso_major) \
- $(libjso_target) $(libjso) $(libjso_default) $(libjso_major) \
- $(libj_jarfile)
-
-install_static:
- @echo "Installing DB library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f $(libdb)
- @$(cp) -p $(libdb) $(libdir)
- @cd $(libdir) && $(chmod) $(fmode) $(libdb)
-
-install_static_cxx:
- @echo "Installing DB C++ static library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f $(libcxx)
- @$(cp) -p $(libcxx) $(libdir)
- @cd $(libdir) && $(chmod) $(fmode) $(libcxx)
-
-install_dynamic:
- @echo "Installing DB library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f \
- $(libso_target) $(libso) $(libso_default) $(libso_major)
- @$(INSTALLER) $(libso_target) $(libdir)
- @cd $(libdir) && $(ln) -s $(libso) $(libso_default)
- @cd $(libdir) && $(ln) -s $(libso) $(libso_major)
- @$(LIBTOOL) --mode=finish $(libdir)
-
-install_dynamic_cxx:
- @echo "Installing DB C++ library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f \
- $(libxso_target) $(libxso) $(libxso_default) $(libxso_major)
- @$(INSTALLER) $(libxso_target) $(libdir)
- @cd $(libdir) && $(ln) -s $(libxso) $(libxso_default)
- @cd $(libdir) && $(ln) -s $(libxso) $(libxso_major)
-
-install_tcl:
- @echo "Installing DB Tcl library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f \
- $(libtso_target) $(libtso) $(libtso_default) $(libtso_major)
- @$(INSTALLER) $(libtso_target) $(libdir)
- @cd $(libdir) && $(ln) -s $(libtso) $(libtso_default)
- @cd $(libdir) && $(ln) -s $(libtso) $(libtso_major)
-
-install_java:
- @echo "Installing DB Java library: $(libdir) ..."
- @test -d $(libdir) || \
- ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir))
- @cd $(libdir) && $(rm) -f \
- $(libjso_target) $(libjso) $(libjso_default) $(libjso_major)
- @$(INSTALLER) $(libjso_target) $(libdir)
- @cd $(libdir) && $(ln) -s $(libjso) $(libjso_default)
- @cd $(libdir) && $(ln) -s $(libjso) $(libjso_major)
- @cd $(libdir) && $(ln) -s $(libjso) $(libjso_g)
- @$(cp) $(JAVA_CLASSTOP)/$(libj_jarfile) $(libdir)
+ @cd $(DESTDIR)$(libdir) && $(rm) -f $(LIB_INSTALL_FILE_LIST)
install_utilities:
- @echo "Installing DB utilities: $(bindir) ..."
- @test -d $(bindir) || \
- ($(mkdir) -p $(bindir) && $(chmod) $(dmode) $(bindir))
- @cd $(bindir) && $(rm) -f $(PROGS)
- @$(INSTALLER) -fp $(PROGS) $(bindir)
- @cd $(bindir) && (test ! -f $(strip) || $(strip) $(PROGS))
- @cd $(bindir) && $(chmod) $(emode) $(PROGS)
+ @echo "Installing DB utilities: $(DESTDIR)$(bindir) ..."
+ @test -d $(DESTDIR)$(bindir) || \
+ ($(mkdir) -p $(DESTDIR)$(bindir) && \
+ $(chmod) $(dmode) $(DESTDIR)$(bindir))
+ @for i in $(UTIL_PROGS); do \
+ $(rm) -f $(DESTDIR)$(bindir)/$$i $(DESTDIR)$(bindir)/$$i.exe; \
+ test -f $$i.exe && i=$$i.exe || true; \
+ $(INSTALLER) $$i $(DESTDIR)$(bindir)/$$i; \
+ test -f $(strip) && $(strip) $(DESTDIR)$(bindir)/$$i || true; \
+ $(chmod) $(emode) $(DESTDIR)$(bindir)/$$i; \
+ done
uninstall_utilities:
- -cd $(bindir) && $(rm) -f $(PROGS)
+ @(cd $(DESTDIR)$(bindir); for i in $(UTIL_PROGS); do \
+ $(rm) -f $$i $$i.exe; \
+ done)
+DOCLIST=api_c api_cxx api_tcl images index.html java ref sleepycat utility
install_docs:
- @echo "Installing documentation: $(docdir) ..."
- @test -d $(docdir) || \
- ($(mkdir) -p $(docdir) && $(chmod) $(dmode) $(docdir))
- @cd $(docdir) && $(rm) -rf *
- @cd $(srcdir)/docs && $(cp) -pr * $(docdir)/
+ @echo "Installing documentation: $(DESTDIR)$(docdir) ..."
+ @test -d $(DESTDIR)$(docdir) || \
+ ($(mkdir) -p $(DESTDIR)$(docdir) && \
+ $(chmod) $(dmode) $(DESTDIR)$(docdir))
+ @cd $(DESTDIR)$(docdir) && $(rm) -rf $(DOCLIST)
+ @cd $(srcdir)/docs && $(cp) -pr $(DOCLIST) $(DESTDIR)$(docdir)/
uninstall_docs:
- -cd $(docdir) && $(rm) -rf *
+ @cd $(docdir) && $(rm) -rf $(DESTDIR)$(DOCLIST)
##################################################
-# Object build rules.
+# RPM, build and install.
##################################################
-# Utilities
-db_archive@o@: $(srcdir)/db_archive/db_archive.c
- $(CC) $(CFLAGS) $?
-db_checkpoint@o@: $(srcdir)/db_checkpoint/db_checkpoint.c
- $(CC) $(CFLAGS) $?
-db_deadlock@o@: $(srcdir)/db_deadlock/db_deadlock.c
+rpm_build:
+ @test -f @db_cv_path_rpm_archive@ || \
+ (echo "@db_cv_path_rpm_archive@: archive file not found" && false)
+ @$(rm) -rf BUILD RPMS SOURCES SPECS SRPMS RPM_INSTALL
+ @$(mkdir) -p BUILD && $(chmod) $(dmode) BUILD
+ @$(mkdir) -p RPMS/i386 && $(chmod) $(dmode) RPMS RPMS/i386
+ @$(mkdir) -p SOURCES && $(chmod) $(dmode) SOURCES
+ @$(mkdir) -p SPECS && $(chmod) $(dmode) SPECS
+ @$(mkdir) -p SRPMS && $(chmod) $(dmode) SRPMS
+ $(cp) @db_cv_path_rpm_archive@ SOURCES/
+ $(cp) db.spec SPECS/db.spec
+ @RPM_BUILD@ --define="`cat rpm-macro-defines`" -ba SPECS/db.spec
+
+rpm_install:
+
+RPM_SRPMS=db-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@-1.src.rpm
+
+##################################################
+# Remaining standard Makefile targets.
+##################################################
+CLEAN_LIST=\
+ berkeley_db_svc berkeley_db_cxxsvc berkeley_db_javasvc \
+ db_dump185 db_perf dbs bench_001 \
+ ex_access ex_apprec ex_btrec ex_dbclient ex_env ex_lock ex_mpool \
+ ex_repquote ex_thread ex_tpcb excxx_access excxx_btrec excxx_env \
+ excxx_lock excxx_mpool excxx_tpcb rpmrc
+
+mostly-clean clean:
+ $(rm) -rf $(C_OBJS)
+ $(rm) -rf $(CXX_OBJS) $(JAVA_OBJS) $(TCL_OBJS)
+ $(rm) -rf $(RPC_CLIENT_OBJS) $(RPC_SRV_OBJS) $(RPC_CXXSRV_OBJS)
+ $(rm) -rf $(UTIL_PROGS) *.exe $(CLEAN_LIST)
+ $(rm) -rf $(JAVA_CLASSTOP) $(JAVA_EXCLASSTOP)
+ $(rm) -rf $(JAVA_RPCCLASSES) $(rpc_jarfile)
+ $(rm) -rf tags *@o@ *.o *.o.lock *.lo core *.core
+ $(rm) -rf ALL.OUT.* BUILD PARALLEL_TESTDIR.* RPMS RPM_INSTALL
+ $(rm) -rf RUN_LOG RUNQUEUE SOURCES SPECS SRPMS TESTDIR TESTDIR.A
+ $(rm) -rf TEST.LIST logtrack_seen.db tm .libs $(LIB_INSTALL_FILE_LIST)
+
+REALCLEAN_LIST=\
+ Makefile confdefs.h config.cache config.log config.status \
+ configure.lineno db.h db.spec db185_int.h db_185.h db_config.h \
+ db_cxx.h db_int.h db_int_def.h include.tcl rpm-macro-defines win_db.h
+
+distclean maintainer-clean realclean: clean
+ $(rm) -rf $(REALCLEAN_LIST)
+ $(rm) -rf libtool
+
+check depend dvi info obj TAGS:
+ @echo "$@: make target not supported" && true
+
+dist:
+ @echo "$@: make target not supported" && false
+
+##################################################
+# Multi-threaded testers, benchmarks.
+##################################################
+dbs@o@: $(srcdir)/test_server/dbs.c
$(CC) $(CFLAGS) $?
-db_dump@o@: $(srcdir)/db_dump/db_dump.c
+dbs_am@o@: $(srcdir)/test_server/dbs_am.c
$(CC) $(CFLAGS) $?
-db_dump185@o@: $(srcdir)/db_dump185/db_dump185.c
- $(CC) $(DB185INC) $?
-db_load@o@: $(srcdir)/db_load/db_load.c
+dbs_checkpoint@o@: $(srcdir)/test_server/dbs_checkpoint.c
$(CC) $(CFLAGS) $?
-db_printlog@o@: $(srcdir)/db_printlog/db_printlog.c
+dbs_debug@o@: $(srcdir)/test_server/dbs_debug.c
$(CC) $(CFLAGS) $?
-db_recover@o@: $(srcdir)/db_recover/db_recover.c
+dbs_handles@o@: $(srcdir)/test_server/dbs_handles.c
$(CC) $(CFLAGS) $?
-db_stat@o@: $(srcdir)/db_stat/db_stat.c
+dbs_log@o@: $(srcdir)/test_server/dbs_log.c
$(CC) $(CFLAGS) $?
-db_upgrade@o@: $(srcdir)/db_upgrade/db_upgrade.c
+dbs_qam@o@: $(srcdir)/test_server/dbs_qam.c
$(CC) $(CFLAGS) $?
-db_verify@o@: $(srcdir)/db_verify/db_verify.c
+dbs_spawn@o@: $(srcdir)/test_server/dbs_spawn.c
$(CC) $(CFLAGS) $?
-
-# Examples
-ex_access@o@: $(srcdir)/examples_c/ex_access.c
+dbs_trickle@o@: $(srcdir)/test_server/dbs_trickle.c
$(CC) $(CFLAGS) $?
-ex_btrec@o@: $(srcdir)/examples_c/ex_btrec.c
+dbs_util@o@: $(srcdir)/test_server/dbs_util.c
$(CC) $(CFLAGS) $?
-ex_dbclient@o@: $(srcdir)/examples_c/ex_dbclient.c
+dbs_yield@o@: $(srcdir)/test_server/dbs_yield.c
$(CC) $(CFLAGS) $?
-ex_env@o@: $(srcdir)/examples_c/ex_env.c
+DBS_OBJS=\
+ dbs@o@ dbs_am@o@ dbs_checkpoint@o@ dbs_debug@o@ dbs_handles@o@ \
+ dbs_log@o@ dbs_qam@o@ dbs_spawn@o@ dbs_trickle@o@ dbs_util@o@ \
+ dbs_yield@o@
+dbs: $(DBS_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(DBS_OBJS) $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
+ $(POSTLINK) $@
+
+db_perf@o@: $(srcdir)/test_perf/db_perf.c
$(CC) $(CFLAGS) $?
-ex_lock@o@: $(srcdir)/examples_c/ex_lock.c
+perf_checkpoint@o@: $(srcdir)/test_perf/perf_checkpoint.c
$(CC) $(CFLAGS) $?
-ex_mpool@o@: $(srcdir)/examples_c/ex_mpool.c
+perf_config@o@: $(srcdir)/test_perf/perf_config.c
$(CC) $(CFLAGS) $?
-ex_thread@o@: $(srcdir)/examples_c/ex_thread.c
+perf_dbs@o@: $(srcdir)/test_perf/perf_dbs.c
$(CC) $(CFLAGS) $?
-ex_tpcb@o@: $(srcdir)/examples_c/ex_tpcb.c
+perf_dead@o@: $(srcdir)/test_perf/perf_dead.c
$(CC) $(CFLAGS) $?
-
-# DB files
-crdel_auto@o@: $(srcdir)/db/crdel_auto.c
+perf_debug@o@: $(srcdir)/test_perf/perf_debug.c
$(CC) $(CFLAGS) $?
-crdel_rec@o@: $(srcdir)/db/crdel_rec.c
+perf_file@o@: $(srcdir)/test_perf/perf_file.c
$(CC) $(CFLAGS) $?
-db@o@: $(srcdir)/db/db.c
+perf_key@o@: $(srcdir)/test_perf/perf_key.c
$(CC) $(CFLAGS) $?
-db_am@o@: $(srcdir)/db/db_am.c
+perf_log@o@: $(srcdir)/test_perf/perf_log.c
$(CC) $(CFLAGS) $?
-db_auto@o@: $(srcdir)/db/db_auto.c
+perf_misc@o@: $(srcdir)/test_perf/perf_misc.c
$(CC) $(CFLAGS) $?
-db_cam@o@: $(srcdir)/db/db_cam.c
+perf_op@o@: $(srcdir)/test_perf/perf_op.c
$(CC) $(CFLAGS) $?
-db_conv@o@: $(srcdir)/db/db_conv.c
+perf_parse@o@: $(srcdir)/test_perf/perf_parse.c
$(CC) $(CFLAGS) $?
-db_dispatch@o@: $(srcdir)/db/db_dispatch.c
+perf_rand@o@: $(srcdir)/test_perf/perf_rand.c
$(CC) $(CFLAGS) $?
-db_dup@o@: $(srcdir)/db/db_dup.c
+perf_spawn@o@: $(srcdir)/test_perf/perf_spawn.c
$(CC) $(CFLAGS) $?
-db_iface@o@: $(srcdir)/db/db_iface.c
+perf_stat@o@: $(srcdir)/test_perf/perf_stat.c
$(CC) $(CFLAGS) $?
-db_join@o@: $(srcdir)/db/db_join.c
+perf_sync@o@: $(srcdir)/test_perf/perf_sync.c
$(CC) $(CFLAGS) $?
-db_meta@o@: $(srcdir)/db/db_meta.c
+perf_thread@o@: $(srcdir)/test_perf/perf_thread.c
$(CC) $(CFLAGS) $?
-db_method@o@: $(srcdir)/db/db_method.c
+perf_trickle@o@: $(srcdir)/test_perf/perf_trickle.c
$(CC) $(CFLAGS) $?
-db_overflow@o@: $(srcdir)/db/db_overflow.c
+perf_txn@o@: $(srcdir)/test_perf/perf_txn.c
$(CC) $(CFLAGS) $?
-db_pr@o@: $(srcdir)/db/db_pr.c
+perf_util@o@: $(srcdir)/test_perf/perf_util.c
$(CC) $(CFLAGS) $?
-db_rec@o@: $(srcdir)/db/db_rec.c
+perf_vx@o@: $(srcdir)/test_perf/perf_vx.c
$(CC) $(CFLAGS) $?
-db_reclaim@o@: $(srcdir)/db/db_reclaim.c
+DBPERF_OBJS=\
+ db_perf@o@ perf_checkpoint@o@ perf_config@o@ perf_dbs@o@ \
+ perf_dead@o@ perf_debug@o@ perf_file@o@ perf_key@o@ perf_log@o@ \
+ perf_misc@o@ perf_op@o@ perf_parse@o@ perf_rand@o@ perf_spawn@o@ \
+ perf_stat@o@ perf_sync@o@ perf_thread@o@ perf_trickle@o@ \
+ perf_txn@o@ perf_util@o@ perf_vx@o@
+
+db_perf: $(DBPERF_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(DBPERF_OBJS) $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
+ $(POSTLINK) $@
+
+tm@o@: $(srcdir)/mutex/tm.c
$(CC) $(CFLAGS) $?
-db_ret@o@: $(srcdir)/db/db_ret.c
+tm: tm@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) tm@o@ $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
+ $(POSTLINK) $@
+
+##################################################
+# Example programs for C.
+##################################################
+bench_001@o@: $(srcdir)/examples_c/bench_001.c
$(CC) $(CFLAGS) $?
-db_upg@o@: $(srcdir)/db/db_upg.c
+bench_001: bench_001@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) bench_001@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_access@o@: $(srcdir)/examples_c/ex_access.c
$(CC) $(CFLAGS) $?
-db_upg_opd@o@: $(srcdir)/db/db_upg_opd.c
+ex_access: ex_access@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_access@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_apprec@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec.c
$(CC) $(CFLAGS) $?
-db_vrfy@o@: $(srcdir)/db/db_vrfy.c
+ex_apprec_auto@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec_auto.c
$(CC) $(CFLAGS) $?
-db_vrfyutil@o@: $(srcdir)/db/db_vrfyutil.c
+ex_apprec_rec@o@: $(srcdir)/examples_c/ex_apprec/ex_apprec_rec.c
$(CC) $(CFLAGS) $?
+EX_APPREC_OBJS=ex_apprec@o@ ex_apprec_auto@o@ ex_apprec_rec@o@
+ex_apprec: $(EX_APPREC_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(EX_APPREC_OBJS) $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
-# Environment files
-db_salloc@o@: $(srcdir)/env/db_salloc.c
- $(CC) $(CFLAGS) $?
-db_shash@o@: $(srcdir)/env/db_shash.c
+ex_btrec@o@: $(srcdir)/examples_c/ex_btrec.c
$(CC) $(CFLAGS) $?
-env_method@o@: $(srcdir)/env/env_method.c
+ex_btrec: ex_btrec@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_btrec@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_dbclient@o@: $(srcdir)/examples_c/ex_dbclient.c
$(CC) $(CFLAGS) $?
-env_open@o@: $(srcdir)/env/env_open.c
+ex_dbclient: ex_dbclient@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_dbclient@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_env@o@: $(srcdir)/examples_c/ex_env.c
$(CC) $(CFLAGS) $?
-env_recover@o@: $(srcdir)/env/env_recover.c
+ex_env: ex_env@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_env@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_lock@o@: $(srcdir)/examples_c/ex_lock.c
$(CC) $(CFLAGS) $?
-env_region@o@: $(srcdir)/env/env_region.c
+ex_lock: ex_lock@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_lock@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+ex_mpool@o@: $(srcdir)/examples_c/ex_mpool.c
$(CC) $(CFLAGS) $?
+ex_mpool: ex_mpool@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_mpool@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
-# Common files
-db_byteorder@o@: $(srcdir)/common/db_byteorder.c
+ex_rq_client@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_client.c
$(CC) $(CFLAGS) $?
-db_err@o@: $(srcdir)/common/db_err.c
+ex_rq_main@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_main.c
$(CC) $(CFLAGS) $?
-db_getlong@o@: $(srcdir)/common/db_getlong.c
+ex_rq_master@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_master.c
$(CC) $(CFLAGS) $?
-db_log2@o@: $(srcdir)/common/db_log2.c
+ex_rq_net@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_net.c
$(CC) $(CFLAGS) $?
-util_log@o@: $(srcdir)/common/util_log.c
+ex_rq_util@o@: $(srcdir)/examples_c/ex_repquote/ex_rq_util.c
$(CC) $(CFLAGS) $?
-util_sig@o@: $(srcdir)/common/util_sig.c
+EX_RQ_OBJS=\
+ ex_rq_client@o@ ex_rq_main@o@ ex_rq_master@o@ ex_rq_net@o@ ex_rq_util@o@
+ex_repquote: $(EX_RQ_OBJS) $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) $(EX_RQ_OBJS) $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
+ $(POSTLINK) $@
+
+ex_thread@o@: $(srcdir)/examples_c/ex_thread.c
$(CC) $(CFLAGS) $?
+ex_thread: ex_thread@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ \
+ $(LDFLAGS) ex_thread@o@ $(DEF_LIB) @LOAD_LIBS@ $(LIBS)
+ $(POSTLINK) $@
-# Btree files
-bt_compare@o@: $(srcdir)/btree/bt_compare.c
+ex_tpcb@o@: $(srcdir)/examples_c/ex_tpcb.c
$(CC) $(CFLAGS) $?
+ex_tpcb: ex_tpcb@o@ $(DEF_LIB)
+ $(CCLINK) -o $@ $(LDFLAGS) ex_tpcb@o@ $(DEF_LIB) $(LIBS)
+ $(POSTLINK) $@
+
+##################################################
+# Example programs for C++.
+##################################################
+AccessExample@o@: $(srcdir)/examples_cxx/AccessExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_access: AccessExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) AccessExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+BtRecExample@o@: $(srcdir)/examples_cxx/BtRecExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_btrec: BtRecExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) BtRecExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+EnvExample@o@: $(srcdir)/examples_cxx/EnvExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_env: EnvExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) EnvExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+LockExample@o@: $(srcdir)/examples_cxx/LockExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_lock: LockExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) LockExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+MpoolExample@o@: $(srcdir)/examples_cxx/MpoolExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_mpool: MpoolExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) MpoolExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+TpcbExample@o@: $(srcdir)/examples_cxx/TpcbExample.cpp
+ $(CXX) $(CXXFLAGS) $?
+excxx_tpcb: TpcbExample@o@ $(DEF_LIB_CXX)
+ $(CXXLINK) -o $@ $(LDFLAGS) TpcbExample@o@ $(DEF_LIB_CXX) $(LIBS)
+ $(POSTLINK) $@
+
+##################################################
+# C API build rules.
+##################################################
+aes_method@o@: $(srcdir)/crypto/aes_method.c
+ $(CC) $(CFLAGS) $?
+bt_compare@o@: $(srcdir)/btree/bt_compare.c
+ $(CC) $(CFLAGS) $?
bt_conv@o@: $(srcdir)/btree/bt_conv.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_curadj@o@: $(srcdir)/btree/bt_curadj.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_cursor@o@: $(srcdir)/btree/bt_cursor.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_delete@o@: $(srcdir)/btree/bt_delete.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_method@o@: $(srcdir)/btree/bt_method.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_open@o@: $(srcdir)/btree/bt_open.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_put@o@: $(srcdir)/btree/bt_put.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_rec@o@: $(srcdir)/btree/bt_rec.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_reclaim@o@: $(srcdir)/btree/bt_reclaim.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_recno@o@: $(srcdir)/btree/bt_recno.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_rsearch@o@: $(srcdir)/btree/bt_rsearch.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_search@o@: $(srcdir)/btree/bt_search.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_split@o@: $(srcdir)/btree/bt_split.c
- $(CC) $(CFLAGS) $?
-bt_stack@o@: $(srcdir)/btree/bt_stack.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_stat@o@: $(srcdir)/btree/bt_stat.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_upgrade@o@: $(srcdir)/btree/bt_upgrade.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
bt_verify@o@: $(srcdir)/btree/bt_verify.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
btree_auto@o@: $(srcdir)/btree/btree_auto.c
+ $(CC) $(CFLAGS) $?
+crdel_auto@o@: $(srcdir)/db/crdel_auto.c
+ $(CC) $(CFLAGS) $?
+crdel_rec@o@: $(srcdir)/db/crdel_rec.c
+ $(CC) $(CFLAGS) $?
+crypto@o@: $(srcdir)/crypto/crypto.c
+ $(CC) $(CFLAGS) $?
+crypto_stub@o@: $(srcdir)/common/crypto_stub.c
+ $(CC) $(CFLAGS) $?
+db185@o@: $(srcdir)/db185/db185.c
+ $(CC) $(CFLAGS) $?
+db@o@: $(srcdir)/db/db.c
+ $(CC) $(CFLAGS) $?
+db_am@o@: $(srcdir)/db/db_am.c
+ $(CC) $(CFLAGS) $?
+db_auto@o@: $(srcdir)/db/db_auto.c
+ $(CC) $(CFLAGS) $?
+db_byteorder@o@: $(srcdir)/common/db_byteorder.c
+ $(CC) $(CFLAGS) $?
+db_cam@o@: $(srcdir)/db/db_cam.c
+ $(CC) $(CFLAGS) $?
+db_conv@o@: $(srcdir)/db/db_conv.c
+ $(CC) $(CFLAGS) $?
+db_dispatch@o@: $(srcdir)/db/db_dispatch.c
+ $(CC) $(CFLAGS) $?
+db_dup@o@: $(srcdir)/db/db_dup.c
+ $(CC) $(CFLAGS) $?
+db_err@o@: $(srcdir)/common/db_err.c
+ $(CC) $(CFLAGS) $?
+db_getlong@o@: $(srcdir)/common/db_getlong.c
+ $(CC) $(CFLAGS) $?
+db_idspace@o@: $(srcdir)/common/db_idspace.c
+ $(CC) $(CFLAGS) $?
+db_iface@o@: $(srcdir)/db/db_iface.c
+ $(CC) $(CFLAGS) $?
+db_join@o@: $(srcdir)/db/db_join.c
+ $(CC) $(CFLAGS) $?
+db_log2@o@: $(srcdir)/common/db_log2.c
+ $(CC) $(CFLAGS) $?
+db_meta@o@: $(srcdir)/db/db_meta.c
+ $(CC) $(CFLAGS) $?
+db_method@o@: $(srcdir)/db/db_method.c
+ $(CC) $(CFLAGS) $?
+db_open@o@: $(srcdir)/db/db_open.c
+ $(CC) $(CFLAGS) $?
+db_overflow@o@: $(srcdir)/db/db_overflow.c
+ $(CC) $(CFLAGS) $?
+db_ovfl_vrfy@o@: $(srcdir)/db/db_ovfl_vrfy.c
+ $(CC) $(CFLAGS) $?
+db_pr@o@: $(srcdir)/db/db_pr.c
+ $(CC) $(CFLAGS) $?
+db_rec@o@: $(srcdir)/db/db_rec.c
+ $(CC) $(CFLAGS) $?
+db_reclaim@o@: $(srcdir)/db/db_reclaim.c
+ $(CC) $(CFLAGS) $?
+db_rename@o@: $(srcdir)/db/db_rename.c
+ $(CC) $(CFLAGS) $?
+db_remove@o@: $(srcdir)/db/db_remove.c
+ $(CC) $(CFLAGS) $?
+db_ret@o@: $(srcdir)/db/db_ret.c
+ $(CC) $(CFLAGS) $?
+db_salloc@o@: $(srcdir)/env/db_salloc.c
+ $(CC) $(CFLAGS) $?
+db_shash@o@: $(srcdir)/env/db_shash.c
+ $(CC) $(CFLAGS) $?
+db_truncate@o@: $(srcdir)/db/db_truncate.c
+ $(CC) $(CFLAGS) $?
+db_upg@o@: $(srcdir)/db/db_upg.c
+ $(CC) $(CFLAGS) $?
+db_upg_opd@o@: $(srcdir)/db/db_upg_opd.c
+ $(CC) $(CFLAGS) $?
+db_vrfy@o@: $(srcdir)/db/db_vrfy.c
+ $(CC) $(CFLAGS) $?
+db_vrfyutil@o@: $(srcdir)/db/db_vrfyutil.c
+ $(CC) $(CFLAGS) $?
+db_vrfy_stub@o@: $(srcdir)/db/db_vrfy_stub.c
$(CC) $(CFLAGS) $?
-
-# Queue files
-qam@o@: $(srcdir)/qam/qam.c
- $(CC) $(CFLAGS) $?
-qam_auto@o@: $(srcdir)/qam/qam_auto.c
- $(CC) $(CFLAGS) $?
-qam_conv@o@: $(srcdir)/qam/qam_conv.c
- $(CC) $(CFLAGS) $?
-qam_files@o@: $(srcdir)/qam/qam_files.c
- $(CC) $(CFLAGS) $?
-qam_method@o@: $(srcdir)/qam/qam_method.c
- $(CC) $(CFLAGS) $?
-qam_open@o@: $(srcdir)/qam/qam_open.c
- $(CC) $(CFLAGS) $?
-qam_rec@o@: $(srcdir)/qam/qam_rec.c
- $(CC) $(CFLAGS) $?
-qam_stat@o@: $(srcdir)/qam/qam_stat.c
- $(CC) $(CFLAGS) $?
-qam_upgrade@o@: $(srcdir)/qam/qam_upgrade.c
- $(CC) $(CFLAGS) $?
-qam_verify@o@: $(srcdir)/qam/qam_verify.c
- $(CC) $(CFLAGS) $?
-
-# C++ files
-cxx_app@o@: $(srcdir)/cxx/cxx_app.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_except@o@: $(srcdir)/cxx/cxx_except.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_lock@o@: $(srcdir)/cxx/cxx_lock.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_log@o@: $(srcdir)/cxx/cxx_log.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_mpool@o@: $(srcdir)/cxx/cxx_mpool.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_table@o@: $(srcdir)/cxx/cxx_table.cpp
- $(CXX) $(CXXFLAGS) $?
-cxx_txn@o@: $(srcdir)/cxx/cxx_txn.cpp
- $(CXX) $(CXXFLAGS) $?
-
-# Java files
-java_Db@o@::$(srcdir)/libdb_java/java_Db.c
- $(CC) $(CFLAGS) $?
-java_DbEnv@o@: $(srcdir)/libdb_java/java_DbEnv.c
- $(CC) $(CFLAGS) $?
-java_DbLock@o@: $(srcdir)/libdb_java/java_DbLock.c
- $(CC) $(CFLAGS) $?
-java_DbLsn@o@: $(srcdir)/libdb_java/java_DbLsn.c
- $(CC) $(CFLAGS) $?
-java_DbTxn@o@: $(srcdir)/libdb_java/java_DbTxn.c
- $(CC) $(CFLAGS) $?
-java_Dbc@o@: $(srcdir)/libdb_java/java_Dbc.c
- $(CC) $(CFLAGS) $?
-java_Dbt@o@: $(srcdir)/libdb_java/java_Dbt.c
- $(CC) $(CFLAGS) $?
-java_info@o@: $(srcdir)/libdb_java/java_info.c
- $(CC) $(CFLAGS) $?
-java_locked@o@: $(srcdir)/libdb_java/java_locked.c
- $(CC) $(CFLAGS) $?
-java_util@o@: $(srcdir)/libdb_java/java_util.c
- $(CC) $(CFLAGS) $?
-
-# Tcl files
-tcl_compat@o@: $(srcdir)/tcl/tcl_compat.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_db@o@: $(srcdir)/tcl/tcl_db.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_db_pkg@o@: $(srcdir)/tcl/tcl_db_pkg.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_dbcursor@o@: $(srcdir)/tcl/tcl_dbcursor.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_env@o@: $(srcdir)/tcl/tcl_env.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_internal@o@: $(srcdir)/tcl/tcl_internal.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_lock@o@: $(srcdir)/tcl/tcl_lock.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_log@o@: $(srcdir)/tcl/tcl_log.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_mp@o@: $(srcdir)/tcl/tcl_mp.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-tcl_txn@o@: $(srcdir)/tcl/tcl_txn.c
- $(CC) $(CFLAGS) $(TCFLAGS) $?
-
-# Hash files
-hash_auto@o@: $(srcdir)/hash/hash_auto.c
- $(CC) $(CFLAGS) $?
+dbm@o@: $(srcdir)/dbm/dbm.c
+ $(CC) $(CFLAGS) $?
+dbreg@o@: $(srcdir)/dbreg/dbreg.c
+ $(CC) $(CFLAGS) $?
+dbreg_auto@o@: $(srcdir)/dbreg/dbreg_auto.c
+ $(CC) $(CFLAGS) $?
+dbreg_rec@o@: $(srcdir)/dbreg/dbreg_rec.c
+ $(CC) $(CFLAGS) $?
+dbreg_util@o@: $(srcdir)/dbreg/dbreg_util.c
+ $(CC) $(CFLAGS) $?
+env_file@o@: $(srcdir)/env/env_file.c
+ $(CC) $(CFLAGS) $?
+env_method@o@: $(srcdir)/env/env_method.c
+ $(CC) $(CFLAGS) $?
+env_open@o@: $(srcdir)/env/env_open.c
+ $(CC) $(CFLAGS) $?
+env_recover@o@: $(srcdir)/env/env_recover.c
+ $(CC) $(CFLAGS) $?
+env_region@o@: $(srcdir)/env/env_region.c
+ $(CC) $(CFLAGS) $?
+fileops_auto@o@: $(srcdir)/fileops/fileops_auto.c
+ $(CC) $(CFLAGS) $?
+fop_basic@o@: $(srcdir)/fileops/fop_basic.c
+ $(CC) $(CFLAGS) $?
+fop_rec@o@: $(srcdir)/fileops/fop_rec.c
+ $(CC) $(CFLAGS) $?
+fop_util@o@: $(srcdir)/fileops/fop_util.c
+ $(CC) $(CFLAGS) $?
hash@o@: $(srcdir)/hash/hash.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+hash_auto@o@: $(srcdir)/hash/hash_auto.c
+ $(CC) $(CFLAGS) $?
hash_conv@o@: $(srcdir)/hash/hash_conv.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_dup@o@: $(srcdir)/hash/hash_dup.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_func@o@: $(srcdir)/hash/hash_func.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_meta@o@: $(srcdir)/hash/hash_meta.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_method@o@: $(srcdir)/hash/hash_method.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+hash_open@o@: $(srcdir)/hash/hash_open.c
+ $(CC) $(CFLAGS) $?
hash_page@o@: $(srcdir)/hash/hash_page.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_rec@o@: $(srcdir)/hash/hash_rec.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_reclaim@o@: $(srcdir)/hash/hash_reclaim.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_stat@o@: $(srcdir)/hash/hash_stat.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+hash_stub@o@: $(srcdir)/hash/hash_stub.c
+ $(CC) $(CFLAGS) $?
hash_upgrade@o@: $(srcdir)/hash/hash_upgrade.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
hash_verify@o@: $(srcdir)/hash/hash_verify.c
- $(CC) $(CFLAGS) $?
-
-# Lock files
+ $(CC) $(CFLAGS) $?
+hmac@o@: $(srcdir)/hmac/hmac.c
+ $(CC) $(CFLAGS) $?
+hsearch@o@: $(srcdir)/hsearch/hsearch.c
+ $(CC) $(CFLAGS) $?
lock@o@: $(srcdir)/lock/lock.c
- $(CC) $(CFLAGS) $?
-lock_conflict@o@:$(srcdir)/lock/lock_conflict.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
lock_deadlock@o@:$(srcdir)/lock/lock_deadlock.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
lock_method@o@:$(srcdir)/lock/lock_method.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
lock_region@o@:$(srcdir)/lock/lock_region.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
lock_stat@o@:$(srcdir)/lock/lock_stat.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
lock_util@o@:$(srcdir)/lock/lock_util.c
- $(CC) $(CFLAGS) $?
-
-# Log files
+ $(CC) $(CFLAGS) $?
log@o@: $(srcdir)/log/log.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
log_archive@o@: $(srcdir)/log/log_archive.c
- $(CC) $(CFLAGS) $?
-log_auto@o@: $(srcdir)/log/log_auto.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
log_compare@o@: $(srcdir)/log/log_compare.c
- $(CC) $(CFLAGS) $?
-log_findckp@o@: $(srcdir)/log/log_findckp.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
log_get@o@: $(srcdir)/log/log_get.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
log_method@o@: $(srcdir)/log/log_method.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
log_put@o@: $(srcdir)/log/log_put.c
- $(CC) $(CFLAGS) $?
-log_rec@o@: $(srcdir)/log/log_rec.c
- $(CC) $(CFLAGS) $?
-log_register@o@: $(srcdir)/log/log_register.c
- $(CC) $(CFLAGS) $?
-
-# Mpool files
+ $(CC) $(CFLAGS) $?
mp_alloc@o@: $(srcdir)/mp/mp_alloc.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_bh@o@: $(srcdir)/mp/mp_bh.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_fget@o@: $(srcdir)/mp/mp_fget.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_fopen@o@: $(srcdir)/mp/mp_fopen.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_fput@o@: $(srcdir)/mp/mp_fput.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_fset@o@: $(srcdir)/mp/mp_fset.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_method@o@: $(srcdir)/mp/mp_method.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_region@o@: $(srcdir)/mp/mp_region.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_register@o@: $(srcdir)/mp/mp_register.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_stat@o@: $(srcdir)/mp/mp_stat.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_sync@o@: $(srcdir)/mp/mp_sync.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mp_trickle@o@: $(srcdir)/mp/mp_trickle.c
- $(CC) $(CFLAGS) $?
-
-# Mutex files
-mutex@o@: $(srcdir)/mutex/mutex.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+mt19937db@o@: $(srcdir)/crypto/mersenne/mt19937db.c
+ $(CC) $(CFLAGS) $?
mut_fcntl@o@: $(srcdir)/mutex/mut_fcntl.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mut_pthread@o@: $(srcdir)/mutex/mut_pthread.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
mut_tas@o@: $(srcdir)/mutex/mut_tas.c
+ $(CC) $(CFLAGS) $?
+mut_win32@o@: $(srcdir)/mutex/mut_win32.c
+ $(CC) $(CFLAGS) $?
+mutex@o@: $(srcdir)/mutex/mutex.c
+ $(CC) $(CFLAGS) $?
+os_abs@o@: $(srcdir)/@OSDIR@/os_abs.c
+ $(CC) $(CFLAGS) $?
+os_alloc@o@: $(srcdir)/os/os_alloc.c
+ $(CC) $(CFLAGS) $?
+os_clock@o@: $(srcdir)/@OSDIR@/os_clock.c
+ $(CC) $(CFLAGS) $?
+os_config@o@: $(srcdir)/@OSDIR@/os_config.c
+ $(CC) $(CFLAGS) $?
+os_dir@o@: $(srcdir)/@OSDIR@/os_dir.c
+ $(CC) $(CFLAGS) $?
+os_errno@o@: $(srcdir)/@OSDIR@/os_errno.c
+ $(CC) $(CFLAGS) $?
+os_fid@o@: $(srcdir)/@OSDIR@/os_fid.c
+ $(CC) $(CFLAGS) $?
+os_fsync@o@: $(srcdir)/@OSDIR@/os_fsync.c
+ $(CC) $(CFLAGS) $?
+os_id@o@: $(srcdir)/os/os_id.c
+ $(CC) $(CFLAGS) $?
+os_handle@o@: $(srcdir)/@OSDIR@/os_handle.c
+ $(CC) $(CFLAGS) $?
+os_map@o@: $(srcdir)/@OSDIR@/os_map.c
+ $(CC) $(CFLAGS) $?
+os_method@o@: $(srcdir)/os/os_method.c
+ $(CC) $(CFLAGS) $?
+os_oflags@o@: $(srcdir)/os/os_oflags.c
+ $(CC) $(CFLAGS) $?
+os_open@o@: $(srcdir)/@OSDIR@/os_open.c
+ $(CC) $(CFLAGS) $?
+os_region@o@: $(srcdir)/os/os_region.c
+ $(CC) $(CFLAGS) $?
+os_rename@o@: $(srcdir)/@OSDIR@/os_rename.c
+ $(CC) $(CFLAGS) $?
+os_root@o@: $(srcdir)/os/os_root.c
+ $(CC) $(CFLAGS) $?
+os_rpath@o@: $(srcdir)/os/os_rpath.c
+ $(CC) $(CFLAGS) $?
+os_rw@o@: $(srcdir)/@OSDIR@/os_rw.c
+ $(CC) $(CFLAGS) $?
+os_seek@o@: $(srcdir)/@OSDIR@/os_seek.c
+ $(CC) $(CFLAGS) $?
+os_sleep@o@: $(srcdir)/@OSDIR@/os_sleep.c
+ $(CC) $(CFLAGS) $?
+os_spin@o@: $(srcdir)/@OSDIR@/os_spin.c
+ $(CC) $(CFLAGS) $?
+os_stat@o@: $(srcdir)/@OSDIR@/os_stat.c
+ $(CC) $(CFLAGS) $?
+os_tmpdir@o@: $(srcdir)/os/os_tmpdir.c
+ $(CC) $(CFLAGS) $?
+os_unlink@o@: $(srcdir)/os/os_unlink.c
+ $(CC) $(CFLAGS) $?
+qam@o@: $(srcdir)/qam/qam.c
+ $(CC) $(CFLAGS) $?
+qam_auto@o@: $(srcdir)/qam/qam_auto.c
+ $(CC) $(CFLAGS) $?
+qam_conv@o@: $(srcdir)/qam/qam_conv.c
+ $(CC) $(CFLAGS) $?
+qam_files@o@: $(srcdir)/qam/qam_files.c
+ $(CC) $(CFLAGS) $?
+qam_method@o@: $(srcdir)/qam/qam_method.c
+ $(CC) $(CFLAGS) $?
+qam_open@o@: $(srcdir)/qam/qam_open.c
+ $(CC) $(CFLAGS) $?
+qam_rec@o@: $(srcdir)/qam/qam_rec.c
+ $(CC) $(CFLAGS) $?
+qam_stat@o@: $(srcdir)/qam/qam_stat.c
+ $(CC) $(CFLAGS) $?
+qam_stub@o@: $(srcdir)/qam/qam_stub.c
+ $(CC) $(CFLAGS) $?
+qam_upgrade@o@: $(srcdir)/qam/qam_upgrade.c
+ $(CC) $(CFLAGS) $?
+qam_verify@o@: $(srcdir)/qam/qam_verify.c
+ $(CC) $(CFLAGS) $?
+rep_method@o@: $(srcdir)/rep/rep_method.c
+ $(CC) $(CFLAGS) $?
+rep_record@o@: $(srcdir)/rep/rep_record.c
+ $(CC) $(CFLAGS) $?
+rep_region@o@: $(srcdir)/rep/rep_region.c
+ $(CC) $(CFLAGS) $?
+rep_stub@o@: $(srcdir)/rep/rep_stub.c
+ $(CC) $(CFLAGS) $?
+rep_util@o@: $(srcdir)/rep/rep_util.c
+ $(CC) $(CFLAGS) $?
+rijndael-alg-fst@o@: $(srcdir)/crypto/rijndael/rijndael-alg-fst.c
+ $(CC) $(CFLAGS) $?
+rijndael-api-fst@o@: $(srcdir)/crypto/rijndael/rijndael-api-fst.c
+ $(CC) $(CFLAGS) $?
+sha1@o@: $(srcdir)/hmac/sha1.c
$(CC) $(CFLAGS) $?
-# UTS4 spinlock assembly.
-uts4_cc@o@: $(srcdir)/mutex/uts4_cc.s
- $(AS) $(ASFLAGS) -o $@ $?
-
-# Transaction files
txn@o@: $(srcdir)/txn/txn.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
txn_auto@o@: $(srcdir)/txn/txn_auto.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+txn_method@o@: $(srcdir)/txn/txn_method.c
+ $(CC) $(CFLAGS) $?
txn_rec@o@: $(srcdir)/txn/txn_rec.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
+txn_recover@o@: $(srcdir)/txn/txn_recover.c
+ $(CC) $(CFLAGS) $?
txn_region@o@: $(srcdir)/txn/txn_region.c
- $(CC) $(CFLAGS) $?
-
-# XA files
+ $(CC) $(CFLAGS) $?
+txn_stat@o@: $(srcdir)/txn/txn_stat.c
+ $(CC) $(CFLAGS) $?
+txn_util@o@: $(srcdir)/txn/txn_util.c
+ $(CC) $(CFLAGS) $?
+util_cache@o@: $(srcdir)/common/util_cache.c
+ $(CC) $(CFLAGS) $?
+util_log@o@: $(srcdir)/common/util_log.c
+ $(CC) $(CFLAGS) $?
+util_sig@o@: $(srcdir)/common/util_sig.c
+ $(CC) $(CFLAGS) $?
+uts4_cc@o@: $(srcdir)/mutex/uts4_cc.s
+ $(AS) $(ASFLAGS) -o $@ $?
xa@o@: $(srcdir)/xa/xa.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
xa_db@o@: $(srcdir)/xa/xa_db.c
- $(CC) $(CFLAGS) $?
+ $(CC) $(CFLAGS) $?
xa_map@o@: $(srcdir)/xa/xa_map.c
+ $(CC) $(CFLAGS) $?
+
+##################################################
+# C++ API build rules.
+##################################################
+cxx_db@o@: $(srcdir)/cxx/cxx_db.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_dbc@o@: $(srcdir)/cxx/cxx_dbc.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_dbt@o@: $(srcdir)/cxx/cxx_dbt.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_env@o@: $(srcdir)/cxx/cxx_env.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_except@o@: $(srcdir)/cxx/cxx_except.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_lock@o@: $(srcdir)/cxx/cxx_lock.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_logc@o@: $(srcdir)/cxx/cxx_logc.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_mpool@o@: $(srcdir)/cxx/cxx_mpool.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_txn@o@: $(srcdir)/cxx/cxx_txn.cpp
+ $(CXX) $(CXXFLAGS) $?
+cxx_multi@o@: $(srcdir)/cxx/cxx_multi.cpp
+ $(CXX) $(CXXFLAGS) $?
+
+##################################################
+# Java API build rules.
+##################################################
+db_java_wrap@o@::$(srcdir)/libdb_java/db_java_wrap.c
$(CC) $(CFLAGS) $?
+##################################################
+# Tcl API build rules.
+##################################################
+tcl_compat@o@: $(srcdir)/tcl/tcl_compat.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_db@o@: $(srcdir)/tcl/tcl_db.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_db_pkg@o@: $(srcdir)/tcl/tcl_db_pkg.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_dbcursor@o@: $(srcdir)/tcl/tcl_dbcursor.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_env@o@: $(srcdir)/tcl/tcl_env.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_internal@o@: $(srcdir)/tcl/tcl_internal.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_lock@o@: $(srcdir)/tcl/tcl_lock.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_log@o@: $(srcdir)/tcl/tcl_log.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_mp@o@: $(srcdir)/tcl/tcl_mp.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_rep@o@: $(srcdir)/tcl/tcl_rep.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_txn@o@: $(srcdir)/tcl/tcl_txn.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+tcl_util@o@: $(srcdir)/tcl/tcl_util.c
+ $(CC) $(CFLAGS) $(TCFLAGS) $?
+
+##################################################
+# RPC build rules.
+##################################################
# RPC client files
client@o@: $(srcdir)/rpc_client/client.c
$(CC) $(CFLAGS) $?
@@ -885,98 +1563,50 @@ gen_client_ret@o@: $(srcdir)/rpc_client/gen_client_ret.c
$(CC) $(CFLAGS) $?
# RPC server files
-db_server_proc@o@: $(srcdir)/rpc_server/db_server_proc.c
- $(CC) $(CFLAGS) $?
-db_server_svc@o@: $(srcdir)/rpc_server/db_server_svc.c
- $(CC) $(CFLAGS) $?
-db_server_util@o@: $(srcdir)/rpc_server/db_server_util.c
+db_server_proc@o@: $(srcdir)/rpc_server/c/db_server_proc.c
$(CC) $(CFLAGS) $?
-db_server_xdr@o@: $(srcdir)/rpc_server/db_server_xdr.c
+db_server_svc@o@: $(srcdir)/rpc_server/c/db_server_svc.c
$(CC) $(CFLAGS) $?
-gen_db_server@o@: $(srcdir)/rpc_server/gen_db_server.c
+db_server_util@o@: $(srcdir)/rpc_server/c/db_server_util.c
$(CC) $(CFLAGS) $?
-
-# Historic compatibility files
-db185@o@: $(srcdir)/db185/db185.c
- $(CC) $(CFLAGS) $?
-dbm@o@: $(srcdir)/dbm/dbm.c
+db_server_xdr@o@: $(srcdir)/rpc_server/c/db_server_xdr.c
$(CC) $(CFLAGS) $?
-hsearch@o@: $(srcdir)/hsearch/hsearch.c
+gen_db_server@o@: $(srcdir)/rpc_server/c/gen_db_server.c
$(CC) $(CFLAGS) $?
+db_server_cxxproc@o@: $(srcdir)/rpc_server/cxx/db_server_cxxproc.cpp
+ $(CXX) $(CXXFLAGS) $?
+db_server_cxxutil@o@: $(srcdir)/rpc_server/cxx/db_server_cxxutil.cpp
+ $(CXX) $(CXXFLAGS) $?
-# OS specific files
-os_abs@o@: $(srcdir)/os/os_abs.c
- $(CC) $(CFLAGS) $?
-os_alloc@o@: $(srcdir)/os/os_alloc.c
- $(CC) $(CFLAGS) $?
-os_dir@o@: $(srcdir)/os/os_dir.c
- $(CC) $(CFLAGS) $?
-os_errno@o@: $(srcdir)/os/os_errno.c
- $(CC) $(CFLAGS) $?
-os_fid@o@: $(srcdir)/os/os_fid.c
- $(CC) $(CFLAGS) $?
-os_finit@o@: $(srcdir)/os/os_finit.c
- $(CC) $(CFLAGS) $?
-os_fsync@o@: $(srcdir)/os/os_fsync.c
- $(CC) $(CFLAGS) $?
-os_handle@o@: $(srcdir)/os/os_handle.c
- $(CC) $(CFLAGS) $?
-os_map@o@: $(srcdir)/os/os_map.c
- $(CC) $(CFLAGS) $?
-os_method@o@: $(srcdir)/os/os_method.c
- $(CC) $(CFLAGS) $?
-os_oflags@o@: $(srcdir)/os/os_oflags.c
- $(CC) $(CFLAGS) $?
-os_open@o@: $(srcdir)/os/os_open.c
- $(CC) $(CFLAGS) $?
-os_region@o@: $(srcdir)/os/os_region.c
- $(CC) $(CFLAGS) $?
-os_rename@o@: $(srcdir)/os/os_rename.c
+##################################################
+# Utility build rules.
+##################################################
+db_archive@o@: $(srcdir)/db_archive/db_archive.c
$(CC) $(CFLAGS) $?
-os_root@o@: $(srcdir)/os/os_root.c
+db_checkpoint@o@: $(srcdir)/db_checkpoint/db_checkpoint.c
$(CC) $(CFLAGS) $?
-os_rpath@o@: $(srcdir)/os/os_rpath.c
+db_deadlock@o@: $(srcdir)/db_deadlock/db_deadlock.c
$(CC) $(CFLAGS) $?
-os_rw@o@: $(srcdir)/os/os_rw.c
+db_dump@o@: $(srcdir)/db_dump/db_dump.c
$(CC) $(CFLAGS) $?
-os_seek@o@: $(srcdir)/os/os_seek.c
+db_dump185@o@: $(srcdir)/db_dump185/db_dump185.c
+ $(CC) $(DB185INC) $?
+db_load@o@: $(srcdir)/db_load/db_load.c
$(CC) $(CFLAGS) $?
-os_sleep@o@: $(srcdir)/os/os_sleep.c
+db_printlog@o@: $(srcdir)/db_printlog/db_printlog.c
$(CC) $(CFLAGS) $?
-os_spin@o@: $(srcdir)/os/os_spin.c
+db_recover@o@: $(srcdir)/db_recover/db_recover.c
$(CC) $(CFLAGS) $?
-os_stat@o@: $(srcdir)/os/os_stat.c
+db_stat@o@: $(srcdir)/db_stat/db_stat.c
$(CC) $(CFLAGS) $?
-os_tmpdir@o@: $(srcdir)/os/os_tmpdir.c
+db_upgrade@o@: $(srcdir)/db_upgrade/db_upgrade.c
$(CC) $(CFLAGS) $?
-os_unlink@o@: $(srcdir)/os/os_unlink.c
+db_verify@o@: $(srcdir)/db_verify/db_verify.c
$(CC) $(CFLAGS) $?
-# Dbs.
-dbs@o@: $(srcdir)/test_server/dbs.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_am@o@: $(srcdir)/test_server/dbs_am.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_checkpoint@o@: $(srcdir)/test_server/dbs_checkpoint.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_debug@o@: $(srcdir)/test_server/dbs_debug.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_handles@o@: $(srcdir)/test_server/dbs_handles.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_log@o@: $(srcdir)/test_server/dbs_log.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_qam@o@: $(srcdir)/test_server/dbs_qam.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_spawn@o@: $(srcdir)/test_server/dbs_spawn.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_trickle@o@: $(srcdir)/test_server/dbs_trickle.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_util@o@: $(srcdir)/test_server/dbs_util.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-dbs_yield@o@: $(srcdir)/test_server/dbs_yield.c
- $(CC) $(CFLAGS) -I$(srcdir)/test_server $?
-
-# Replacement files
+##################################################
+# C library replacement files.
+##################################################
getcwd@o@: $(srcdir)/clib/getcwd.c
$(CC) $(CFLAGS) $?
getopt@o@: $(srcdir)/clib/getopt.c
@@ -991,6 +1621,8 @@ raise@o@: $(srcdir)/clib/raise.c
$(CC) $(CFLAGS) $?
strcasecmp@o@: $(srcdir)/clib/strcasecmp.c
$(CC) $(CFLAGS) $?
+strdup@o@: $(srcdir)/clib/strdup.c
+ $(CC) $(CFLAGS) $?
snprintf@o@: $(srcdir)/clib/snprintf.c
$(CC) $(CFLAGS) $?
strerror@o@: $(srcdir)/clib/strerror.c
diff --git a/db/dist/RELEASE b/db/dist/RELEASE
index 495c12637..aec0cdc8a 100644
--- a/db/dist/RELEASE
+++ b/db/dist/RELEASE
@@ -1,8 +1,11 @@
-# $Id: RELEASE,v 11.72 2001/01/24 15:20:14 bostic Exp $
+# $Id: RELEASE,v 11.173 2003/12/03 21:15:38 bostic Exp $
-DB_VERSION_MAJOR=3
+DB_VERSION_MAJOR=4
DB_VERSION_MINOR=2
-DB_VERSION_PATCH=9
-DB_RELEASE_DATE=`date "+%B %e, %Y"`
+DB_VERSION_PATCH=52
+DB_VERSION="$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH"
+
+DB_VERSION_UNIQUE_NAME=`printf "_%d%03d" $DB_VERSION_MAJOR $DB_VERSION_MINOR`
-DB_VERSION_STRING="Sleepycat Software: Berkeley DB $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH: ($DB_RELEASE_DATE)"
+DB_RELEASE_DATE=`date "+%B %e, %Y"`
+DB_VERSION_STRING="Sleepycat Software: Berkeley DB $DB_VERSION: ($DB_RELEASE_DATE)"
diff --git a/db/dist/aclocal/config.ac b/db/dist/aclocal/config.ac
index cd2884259..717a0becc 100644
--- a/db/dist/aclocal/config.ac
+++ b/db/dist/aclocal/config.ac
@@ -1,5 +1,12 @@
# Features we don't test for, but want the #defines to exist for
# other ports.
+AH_TEMPLATE(DB_WIN32,
+ [We use DB_WIN32 much as one would use _WIN32 -- to specify that
+ we're using an operating system environment that supports Win32
+ calls and semantics. We don't use _WIN32 because Cygwin/GCC also
+ defines _WIN32, even though Cygwin/GCC closely emulates the Unix
+ environment.])
+
AH_TEMPLATE(HAVE_VXWORKS, [Define to 1 if building VxWorks.])
AH_TEMPLATE(HAVE_FILESYSTEM_NOTZERO,
@@ -48,4 +55,8 @@ AH_BOTTOM([/*
#endif
#ifndef HAVE_VSNPRINTF
#define vsnprintf __db_Cvsnprintf
+#endif
+
+#ifdef DB_WIN32
+#include "win_db.h"
#endif])
diff --git a/db/dist/aclocal/libtool.ac b/db/dist/aclocal/libtool.ac
index e99faf15e..59d0b0938 100644
--- a/db/dist/aclocal/libtool.ac
+++ b/db/dist/aclocal/libtool.ac
@@ -1,4 +1,4 @@
-# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
## Copyright 1996, 1997, 1998, 1999, 2000, 2001
## Free Software Foundation, Inc.
## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
@@ -22,10 +22,61 @@
## configuration script generated by Autoconf, you may include it under
## the same distribution terms that you use for the rest of that program.
-# serial 46 AC_PROG_LIBTOOL
+# serial 47 AC_PROG_LIBTOOL
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
# This can be used to rebuild libtool when needed
LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
@@ -36,10 +87,13 @@ AC_SUBST(LIBTOOL)dnl
# Prevent multiple expansion
define([AC_PROG_LIBTOOL], [])
-])
+])# _AC_PROG_LIBTOOL
+
+# AC_LIBTOOL_SETUP
+# ----------------
AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.13)dnl
+[AC_PREREQ(2.50)dnl
AC_REQUIRE([AC_ENABLE_SHARED])dnl
AC_REQUIRE([AC_ENABLE_STATIC])dnl
AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
@@ -49,340 +103,184 @@ AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_LD])dnl
AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
AC_REQUIRE([AC_PROG_NM])dnl
+
AC_REQUIRE([AC_PROG_LN_S])dnl
AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
AC_REQUIRE([AC_OBJEXT])dnl
AC_REQUIRE([AC_EXEEXT])dnl
dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
- if test "$file_magic_cmd" = '$MAGIC_CMD'; then
- AC_PATH_MAGIC
- fi
- ;;
-esac
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
-ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE(libtool-lock,
- [ --disable-libtool-lock avoid locking (might break parallel builds)])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-*-*-irix6*)
- # Find out which ABI we are using.
- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
- if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
- *32-bit*)
- LD="${LD-ld} -32"
- ;;
- *N32*)
- LD="${LD-ld} -n32"
- ;;
- *64-bit*)
- LD="${LD-ld} -64"
- ;;
- esac
- fi
- rm -rf conftest*
- ;;
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
-*-*-sco3.2v5*)
- # On SCO OpenServer 5, we need -belf to get full-featured binaries.
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -belf"
- AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_LANG_SAVE
- AC_LANG_C
- AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
- AC_LANG_RESTORE])
- if test x"$lt_cv_cc_needs_belf" != x"yes"; then
- # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
- CFLAGS="$SAVE_CFLAGS"
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
fi
;;
-
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
- AC_CHECK_TOOL(DLLTOOL, dlltool, false)
- AC_CHECK_TOOL(AS, as, false)
- AC_CHECK_TOOL(OBJDUMP, objdump, false)
-
- # recent cygwin and mingw systems supply a stub DllMain which the user
- # can override, but on older systems we have to supply one
- AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
- [AC_TRY_LINK([],
- [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
- DllMain (0, 0, 0);],
- [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
-
- case $host/$CC in
- *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
- # old mingw systems require "-dll" to link a DLL, while more recent ones
- # require "-mdll"
- SAVE_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -mdll"
- AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
- [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
- CFLAGS="$SAVE_CFLAGS" ;;
- *-*-cygwin* | *-*-pw32*)
- # cygwin systems need to pass --dll to the linker, and not link
- # crt.o which will require a WinMain@16 definition.
- lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
- esac
- ;;
- ])
esac
-_LT_AC_LTCONFIG_HACK
-
-])
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-# AC_LIBTOOL_HEADER_ASSERT
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
-[AC_CACHE_CHECK([whether $CC supports assert without backlinking],
- [lt_cv_func_assert_works],
- [case $host in
- *-*-solaris*)
- if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
- case `$CC --version 2>/dev/null` in
- [[12]].*) lt_cv_func_assert_works=no ;;
- *) lt_cv_func_assert_works=yes ;;
- esac
- fi
- ;;
- esac])
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-if test "x$lt_cv_func_assert_works" = xyes; then
- AC_CHECK_HEADERS(assert.h)
-fi
-])# AC_LIBTOOL_HEADER_ASSERT
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-# _LT_AC_CHECK_DLFCN
-# --------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)
-])# _LT_AC_CHECK_DLFCN
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
+# Constants:
+rm="rm -f"
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
-# Define system-specific variables.
-case $host_os in
-aix*)
- symcode='[[BCDT]]'
- ;;
-cygwin* | mingw* | pw32*)
- symcode='[[ABCDGISTW]]'
- ;;
-hpux*) # Its linker distinguishes data from code symbols
- lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
- lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
- ;;
-irix*)
- symcode='[[BCDEGRST]]'
- ;;
-solaris* | sysv5*)
- symcode='[[BDT]]'
- ;;
-sysv4)
- symcode='[[DFNSTU]]'
- ;;
-esac
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $host_os in
-mingw*)
- opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
;;
esac
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
- symcode='[[ABCDGISTW]]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
- # Write the raw and C identifiers.
-lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
- # Check to see that the pipe works correctly.
- pipe_works=no
- rm -f conftest*
- cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
+AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
- if AC_TRY_EVAL(ac_compile); then
- # Now try to grab the symbols.
- nlist=conftest.nm
- if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
- # Try sorting and uniquifying the output.
- if sort "$nlist" | uniq > "$nlist"T; then
- mv -f "$nlist"T "$nlist"
- else
- rm -f "$nlist"T
- fi
+AC_ARG_WITH([pic],
+ [AC_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
- # Make sure that we snagged all the symbols we need.
- if egrep ' nm_test_var$' "$nlist" >/dev/null; then
- if egrep ' nm_test_func$' "$nlist" >/dev/null; then
- cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
-EOF
- # Now generate the symbol file.
- eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
- cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
-/* The mapping between symbol names and symbols. */
-const struct {
- const char *name;
- lt_ptr address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
- sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
- cat <<\EOF >> conftest.$ac_ext
- {0, (lt_ptr) 0}
-};
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
-#ifdef __cplusplus
-}
-#endif
-EOF
- # Now try linking the two files.
- mv conftest.$ac_objext conftstm.$ac_objext
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
- LIBS="conftstm.$ac_objext"
- CFLAGS="$CFLAGS$no_builtin_flag"
- if AC_TRY_EVAL(ac_link) && test -s conftest; then
- pipe_works=yes
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
- else
- echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
- fi
- else
- echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
- fi
- else
- echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
- fi
- else
- echo "$progname: failed program was:" >&AC_FD_CC
- cat conftest.$ac_ext >&5
- fi
- rm -f conftest* conftst*
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
- # Do not use the global_symbol_pipe unless it works.
- if test "$pipe_works" = yes; then
- break
- else
- lt_cv_sys_global_symbol_pipe=
- fi
-done
-])
-global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
- global_symbol_to_cdecl=
- global_symbol_to_c_name_address=
-else
- global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
- global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
-fi
-if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
-then
- AC_MSG_RESULT(failed)
-else
- AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
-# ---------------------------------
-AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
-[# Find the correct PATH separator. Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
- UNAME=${UNAME-`uname 2>/dev/null`}
- case X$UNAME in
- *-DOS) lt_cv_sys_path_separator=';' ;;
- *) lt_cv_sys_path_separator=':' ;;
- esac
- PATH_SEPARATOR=$lt_cv_sys_path_separator
-fi
-])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
# _LT_AC_PROG_ECHO_BACKSLASH
# --------------------------
# Add some code to the start of the generated configure script which
# will find an echo command which doesn't interpret backslashes.
AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
- [AC_DIVERT_PUSH(NOTICE)])
-_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
-
+[_LT_AC_SHELL_INIT([
# Check that we are running under the correct shell.
SHELL=${CONFIG_SHELL-/bin/sh}
@@ -400,7 +298,7 @@ if test "X[$]1" = X--no-reexec; then
elif test "X[$]1" = X--fallback-echo; then
# Avoid inline document here, it may be left over
:
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
# Yippee, $echo works!
:
else
@@ -412,7 +310,7 @@ if test "X[$]1" = X--fallback-echo; then
# used as fallback echo
shift
cat <<EOF
-$*
+[$]*
EOF
exit 0
fi
@@ -446,8 +344,9 @@ else
#
# So, first we look for a working echo in the user's PATH.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
@@ -456,7 +355,7 @@ else
break
fi
done
- IFS="$save_ifs"
+ IFS="$lt_save_ifs"
if test "X$echo" = Xecho; then
# We didn't find a better echo, so look for alternatives.
@@ -529,17 +428,291 @@ if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
fi
AC_SUBST(ECHO)
-AC_DIVERT_POP
-])# _LT_AC_PROG_ECHO_BACKSLASH
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ else
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ testring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
# ------------------------------------------------------------------
AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[if test "$cross_compiling" = yes; then :
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
[$4]
else
- AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
@@ -620,10 +793,12 @@ fi
rm -fr conftest*
])# _LT_AC_TRY_DLOPEN_SELF
+
# AC_LIBTOOL_DLOPEN_SELF
# -------------------
AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[if test "x$enable_dlopen" != xyes; then
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
enable_dlopen=unknown
enable_dlopen_self=unknown
enable_dlopen_self_static=unknown
@@ -638,24 +813,39 @@ else
lt_cv_dlopen_self=yes
;;
- cygwin* | mingw* | pw32*)
+ mingw* | pw32*)
lt_cv_dlopen="LoadLibrary"
lt_cv_dlopen_libs=
;;
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
*)
AC_CHECK_FUNC([shl_load],
- [lt_cv_dlopen="shl_load"],
+ [lt_cv_dlopen="shl_load"],
[AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
[AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
- [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
@@ -673,7 +863,6 @@ else
case $lt_cv_dlopen in
dlopen)
save_CPPFLAGS="$CPPFLAGS"
- AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
save_LDFLAGS="$LDFLAGS"
@@ -717,422 +906,68 @@ else
fi
])# AC_LIBTOOL_DLOPEN_SELF
-AC_DEFUN([_LT_AC_LTCONFIG_HACK],
-[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
-# Sed substitution that helps us do robust quoting. It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-need_locks="$enable_libtool_lock"
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-if test x"$host" != x"$build"; then
- ac_tool_prefix=${host_alias}-
-else
- ac_tool_prefix=
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case $host_os in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-case $host_os in
-aix3*)
- # AIX sometimes has problems with the GCC collect2 program. For some
- # reason, if we set the COLLECT_NAMES environment variable, the problems
- # vanish in a puff of smoke.
- if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
- fi
- ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
- case $host_os in
- openbsd*)
- old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
- ;;
- *)
- old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
- ;;
- esac
- old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="[$]2"
-
-## FIXME: this should be a separate macro
-##
-AC_MSG_CHECKING([for objdir])
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
- objdir=.libs
-else
- # MS-DOS does not allow filenames that begin with a dot.
- objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-AC_MSG_RESULT($objdir)
-##
-## END FIXME
-
-
-## FIXME: this should be a separate macro
-##
-AC_ARG_WITH(pic,
-[ --with-pic try to use only PIC/non-PIC objects [default=use both]],
-pic_mode="$withval", pic_mode=default)
-test -z "$pic_mode" && pic_mode=default
-
-# We assume here that the value for lt_cv_prog_cc_pic will not be cached
-# in isolation, and that seeing it set (from the cache) indicates that
-# the associated values are set (in the cache) correctly too.
-AC_MSG_CHECKING([for $compiler option to produce PIC])
-AC_CACHE_VAL(lt_cv_prog_cc_pic,
-[ lt_cv_prog_cc_pic=
- lt_cv_prog_cc_shlib=
- lt_cv_prog_cc_wl=
- lt_cv_prog_cc_static=
- lt_cv_prog_cc_no_builtin=
- lt_cv_prog_cc_can_build_shared=$can_build_shared
-
- if test "$GCC" = yes; then
- lt_cv_prog_cc_wl='-Wl,'
- lt_cv_prog_cc_static='-static'
-
- case $host_os in
- aix*)
- # Below there is a dirty hack to force normal static linking with -ldl
- # The problem is because libdl dynamically linked with both libc and
- # libC (AIX C++ library), which obviously doesn't included in libraries
- # list by gcc. This cause undefined symbols with -static flags.
- # This hack allows C programs to be linked with "-static -ldl", but
- # not sure about C++ programs.
- lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
- ;;
- amigaos*)
- # FIXME: we need at least 68020 code to build shared libraries, but
- # adding the `-m68020' flag to GCC prevents building anything better,
- # like `-m68040'.
- lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
- ;;
- beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
- # PIC is the default for these OSes.
- ;;
- darwin* | rhapsody*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- lt_cv_prog_cc_pic='-fno-common'
- ;;
- cygwin* | mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
- sysv4*MP*)
- if test -d /usr/nec; then
- lt_cv_prog_cc_pic=-Kconform_pic
- fi
- ;;
- *)
- lt_cv_prog_cc_pic='-fPIC'
- ;;
- esac
- else
- # PORTME Check for PIC flags for the system compiler.
- case $host_os in
- aix3* | aix4* | aix5*)
- lt_cv_prog_cc_wl='-Wl,'
- # All AIX code is PIC.
- if test "$host_cpu" = ia64; then
- # AIX 5 now supports IA64 processor
- lt_cv_prog_cc_static='-Bstatic'
- else
- lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
- fi
- ;;
-
- hpux9* | hpux10* | hpux11*)
- # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
- lt_cv_prog_cc_wl='-Wl,'
- lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
- lt_cv_prog_cc_pic='+Z'
- ;;
-
- irix5* | irix6*)
- lt_cv_prog_cc_wl='-Wl,'
- lt_cv_prog_cc_static='-non_shared'
- # PIC (with -KPIC) is the default.
- ;;
-
- cygwin* | mingw* | pw32* | os2*)
- # This hack is so that the source file can tell whether it is being
- # built for inclusion in a dll (and should export symbols for example).
- lt_cv_prog_cc_pic='-DDLL_EXPORT'
- ;;
-
- newsos6)
- lt_cv_prog_cc_pic='-KPIC'
- lt_cv_prog_cc_static='-Bstatic'
- ;;
-
- osf3* | osf4* | osf5*)
- # All OSF/1 code is PIC.
- lt_cv_prog_cc_wl='-Wl,'
- lt_cv_prog_cc_static='-non_shared'
- ;;
-
- sco3.2v5*)
- lt_cv_prog_cc_pic='-Kpic'
- lt_cv_prog_cc_static='-dn'
- lt_cv_prog_cc_shlib='-belf'
- ;;
-
- solaris*)
- lt_cv_prog_cc_pic='-KPIC'
- lt_cv_prog_cc_static='-Bstatic'
- lt_cv_prog_cc_wl='-Wl,'
- ;;
-
- sunos4*)
- lt_cv_prog_cc_pic='-PIC'
- lt_cv_prog_cc_static='-Bstatic'
- lt_cv_prog_cc_wl='-Qoption ld '
- ;;
-
- sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
- lt_cv_prog_cc_pic='-KPIC'
- lt_cv_prog_cc_static='-Bstatic'
- if test "x$host_vendor" = xsni; then
- lt_cv_prog_cc_wl='-LD'
- else
- lt_cv_prog_cc_wl='-Wl,'
- fi
- ;;
-
- uts4*)
- lt_cv_prog_cc_pic='-pic'
- lt_cv_prog_cc_static='-Bstatic'
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec ;then
- lt_cv_prog_cc_pic='-Kconform_pic'
- lt_cv_prog_cc_static='-Bstatic'
- fi
- ;;
-
- *)
- lt_cv_prog_cc_can_build_shared=no
- ;;
- esac
- fi
-])
-if test -z "$lt_cv_prog_cc_pic"; then
- AC_MSG_RESULT([none])
-else
- AC_MSG_RESULT([$lt_cv_prog_cc_pic])
-
- # Check to make sure the pic_flag actually works.
- AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
- AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
- AC_TRY_COMPILE([], [], [dnl
- case $host_os in
- hpux9* | hpux10* | hpux11*)
- # On HP-UX, both CC and GCC only warn that PIC is supported... then
- # they create non-PIC objects. So, if there were any warnings, we
- # assume that PIC is not supported.
- if test -s conftest.err; then
- lt_cv_prog_cc_pic_works=no
- else
- lt_cv_prog_cc_pic_works=yes
- fi
- ;;
- *)
- lt_cv_prog_cc_pic_works=yes
- ;;
- esac
- ], [dnl
- lt_cv_prog_cc_pic_works=no
- ])
- CFLAGS="$save_CFLAGS"
- ])
-
- if test "X$lt_cv_prog_cc_pic_works" = Xno; then
- lt_cv_prog_cc_pic=
- lt_cv_prog_cc_can_build_shared=no
- else
- lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
- fi
-
- AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
-fi
-##
-## END FIXME
-# Check for any special shared library compilation flags.
-if test -n "$lt_cv_prog_cc_shlib"; then
- AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
- if echo "$old_CC $old_CFLAGS " | egrep -e "[[ ]]$lt_cv_prog_cc_shlib[[ ]]" >/dev/null; then :
- else
- AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
- lt_cv_prog_cc_can_build_shared=no
- fi
-fi
-
-## FIXME: this should be a separate macro
-##
-AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
-AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
- lt_cv_prog_cc_static_works=no
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
- AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
- LDFLAGS="$save_LDFLAGS"
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
])
-
-# Belt *and* braces to stop my trousers falling down:
-test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
-AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
-
-pic_flag="$lt_cv_prog_cc_pic"
-special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
-wl="$lt_cv_prog_cc_wl"
-link_static_flag="$lt_cv_prog_cc_static"
-no_builtin_flag="$lt_cv_prog_cc_no_builtin"
-can_build_shared="$lt_cv_prog_cc_can_build_shared"
-##
-## END FIXME
+])# AC_LIBTOOL_PROG_CC_C_O
-## FIXME: this should be a separate macro
-##
-# Check to see if options -o and -c are simultaneously supported by compiler
-AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
-AC_CACHE_VAL([lt_cv_compiler_c_o], [
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-echo "int some_variable = 0;" > conftest.$ac_ext
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory. Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
-compiler_c_o=no
-if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s out/conftest.err; then
- lt_cv_compiler_c_o=no
- else
- lt_cv_compiler_c_o=yes
- fi
-else
- # Append any errors to the config.log.
- cat out/conftest.err 1>&AC_FD_CC
- lt_cv_compiler_c_o=no
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-])
-compiler_c_o=$lt_cv_compiler_c_o
-AC_MSG_RESULT([$compiler_c_o])
-
-if test x"$compiler_c_o" = x"yes"; then
- # Check to see if we can write to a .lo
- AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
- AC_CACHE_VAL([lt_cv_compiler_o_lo], [
- lt_cv_compiler_o_lo=no
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -c -o conftest.lo"
- save_objext="$ac_objext"
- ac_objext=lo
- AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- lt_cv_compiler_o_lo=no
- else
- lt_cv_compiler_o_lo=yes
- fi
- ])
- ac_objext="$save_objext"
- CFLAGS="$save_CFLAGS"
- ])
- compiler_o_lo=$lt_cv_compiler_o_lo
- AC_MSG_RESULT([$compiler_o_lo])
-else
- compiler_o_lo=no
-fi
-##
-## END FIXME
-
-## FIXME: this should be a separate macro
-##
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
# do not overwrite the value of need_locks provided by the user
AC_MSG_CHECKING([if we can lock with hard links])
hard_links=yes
@@ -1143,802 +978,77 @@ if test "$compiler_c_o" = no && test "$need_locks" != no; then
ln conftest.a conftest.b 2>/dev/null && hard_links=no
AC_MSG_RESULT([$hard_links])
if test "$hard_links" = no; then
- AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
need_locks=warn
fi
else
need_locks=no
fi
-##
-## END FIXME
-
-## FIXME: this should be a separate macro
-##
-if test "$GCC" = yes; then
- # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
- AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
- echo "int some_variable = 0;" > conftest.$ac_ext
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
- compiler_rtti_exceptions=no
- AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
- # The compiler can only warn and ignore the option if not recognized
- # So say no if there are warnings
- if test -s conftest.err; then
- compiler_rtti_exceptions=no
- else
- compiler_rtti_exceptions=yes
- fi
- ])
- CFLAGS="$save_CFLAGS"
- AC_MSG_RESULT([$compiler_rtti_exceptions])
-
- if test "$compiler_rtti_exceptions" = "yes"; then
- no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
- else
- no_builtin_flag=' -fno-builtin'
- fi
-fi
-##
-## END FIXME
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-## FIXME: this should be a separate macro
-##
-# See if the linker supports building shared libraries.
-AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-old_archive_from_expsyms_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_into_libs=no
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-link_all_deplibs=unknown
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced. Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-extract_expsyms_cmds=
-
-case $host_os in
-cygwin* | mingw* | pw32*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- if test "$GCC" != yes; then
- with_gnu_ld=no
- fi
- ;;
-openbsd*)
- with_gnu_ld=no
- ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
- # If archive_cmds runs LD, not CC, wlarc should be empty
- wlarc='${wl}'
-
- # See if GNU ld supports shared libraries.
- case $host_os in
- aix3* | aix4* | aix5*)
- # On AIX, the GNU linker is very broken
- # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support. If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
-
- # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
- # that the semantics of dynamic libraries on AmigaOS, at least up
- # to version 4, is to share data among multiple programs linked
- # with the same dynamic library. Since this doesn't match the
- # behavior of shared libraries on other platforms, we can use
- # them.
- ld_shlibs=no
- ;;
-
- beos*)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- allow_undefined_flag=unsupported
- # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
- # support --undefined. This deserves some investigation. FIXME
- archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- cygwin* | mingw* | pw32*)
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec='-L$libdir'
- allow_undefined_flag=unsupported
- always_export_symbols=yes
-
- extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
- sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
- test -f $output_objdir/impgen.exe || (cd $output_objdir && \
- if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
- else $CC -o impgen impgen.c ; fi)~
- $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
-
- old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
-
- # cygwin and mingw dlls have different entry points and sets of symbols
- # to exclude.
- # FIXME: what about values for MSVC?
- dll_entry=__cygwin_dll_entry@12
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
- case $host_os in
- mingw*)
- # mingw values
- dll_entry=_DllMainCRTStartup@12
- dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
- ;;
- esac
-
- # mingw and cygwin differ, and it's simplest to just exclude the union
- # of the two symbol sets.
- dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
-
- # recent cygwin and mingw systems supply a stub DllMain which the user
- # can override, but on older systems we have to supply one (in ltdll.c)
- if test "x$lt_cv_need_dllmain" = "xyes"; then
- ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
- ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
- test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
- else
- ltdll_obj=
- ltdll_cmds=
- fi
-
- # Extract the symbol export list from an `--export-all' def file,
- # then regenerate the def file from the symbol export list, so that
- # the compiled dll only exports the symbol export list.
- # Be careful not to strip the DATA tag left be newer dlltools.
- export_symbols_cmds="$ltdll_cmds"'
- $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
- sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
-
- # If the export-symbols file already is a .def file (1st line
- # is EXPORTS), use it as is.
- # If DATA tags from a recent dlltool are present, honour them!
- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
- cp $export_symbols $output_objdir/$soname-def;
- else
- echo EXPORTS > $output_objdir/$soname-def;
- _lt_hint=1;
- cat $export_symbols | while read symbol; do
- set dummy \$symbol;
- case \[$]# in
- 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
- *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
- esac;
- _lt_hint=`expr 1 + \$_lt_hint`;
- done;
- fi~
- '"$ltdll_cmds"'
- $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
- $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
- $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
- $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
- wlarc=
- else
- archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- fi
- ;;
-
- solaris* | sysv5*)
- if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
- ld_shlibs=no
- cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems. Therefore, libtool
-*** is disabling shared libraries support. We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer. Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
- elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
-
- sunos4*)
- archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- wlarc=
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- *)
- if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
- archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
- else
- ld_shlibs=no
- fi
- ;;
- esac
-
- if test "$ld_shlibs" = yes; then
- runpath_var=LD_RUN_PATH
- hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
- export_dynamic_flag_spec='${wl}--export-dynamic'
- case $host_os in
- cygwin* | mingw* | pw32*)
- # dlltool doesn't understand --whole-archive et. al.
- whole_archive_flag_spec=
- ;;
- *)
- # ancient GNU ld didn't support --whole-archive et. al.
- if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
- whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
- else
- whole_archive_flag_spec=
- fi
- ;;
- esac
- fi
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
else
- # PORTME fill in a description of your system's linker (not GNU ld)
- case $host_os in
- aix3*)
- allow_undefined_flag=unsupported
- always_export_symbols=yes
- archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
- # Note: this linker hardcodes the directories in LIBPATH if there
- # are no directories specified by -L.
- hardcode_minus_L=yes
- if test "$GCC" = yes && test -z "$link_static_flag"; then
- # Neither direct hardcoding nor static linking is supported with a
- # broken collect2.
- hardcode_direct=unsupported
- fi
- ;;
-
- aix4* | aix5*)
- if test "$host_cpu" = ia64; then
- # On IA64, the linker does run time linking by default, so we don't
- # have to do anything special.
- aix_use_runtimelinking=no
- exp_sym_flag='-Bexport'
- no_entry_flag=""
- else
- aix_use_runtimelinking=no
-
- # Test if we are trying to use run time linking or normal
- # AIX style linking. If -brtl is somewhere in LDFLAGS, we
- # need to do runtime linking.
- case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
- for ld_flag in $LDFLAGS; do
- if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
- aix_use_runtimelinking=yes
- break
- fi
- done
- esac
-
- exp_sym_flag='-bexport'
- no_entry_flag='-bnoentry'
- fi
-
- # When large executables or shared objects are built, AIX ld can
- # have problems creating the table of contents. If linking a library
- # or program results in "error TOC overflow" add -mminimal-toc to
- # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
- # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
- hardcode_direct=yes
- archive_cmds=''
- hardcode_libdir_separator=':'
-
- #### Local change for Sleepycat's Berkeley DB [#5779]:
- # Added $aix_export variable to control use of exports file.
- # For non-gcc, we don't use exports files, and rather trust
- # the binder's -qmkshrobj option to export all the mangled
- # symbols we need for C++ and java.
-
- aix_export="\${wl}$exp_sym_flag:\$export_symbols"
-
- if test "$GCC" = yes; then
- case $host_os in aix4.[[012]]|aix4.[[012]].*)
- collect2name=`${CC} -print-prog-name=collect2`
- if test -f "$collect2name" && \
- strings "$collect2name" | grep resolve_lib_name >/dev/null
- then
- # We have reworked collect2
- hardcode_direct=yes
- else
- # We have old collect2
- hardcode_direct=unsupported
- # It fails to find uninstalled libraries when the uninstalled
- # path is not listed in the libpath. Setting hardcode_minus_L
- # to unsupported forces relinking
- hardcode_minus_L=yes
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_libdir_separator=
- fi
- esac
-
- shared_flag='-shared'
- else
- # not using gcc
- if test "$host_cpu" = ia64; then
- shared_flag='${wl}-G'
- else
- if test "$aix_use_runtimelinking" = yes; then
- shared_flag='${wl}-G'
- else
- shared_flag='${wl}-bM:SRE'
- fi
- fi
-
- # Test for -qmkshrobj and use it if it's available.
- # It's superior for determining exportable symbols,
- # especially for C++ or JNI libraries, which have
- # mangled names.
- #
- AC_LANG_CONFTEST(void f(){})
- if AC_TRY_EVAL(CC -c conftest.c) && AC_TRY_EVAL(CC -o conftest conftest.$ac_objext -qmkshrobj -lC_r); then
- lt_cv_aix_mkshrobj=yes
- else
- lt_cv_aix_mkshrobj=no
- fi
-
- if test "$lt_cv_aix_mkshrobj" = yes; then
- aix_export="-qmkshrobj"
- fi
- fi
-
- # It seems that -bexpall can do strange things, so it is better to
- # generate a list of symbols to export.
- always_export_symbols=yes
- if test "$aix_use_runtimelinking" = yes; then
- # Warning - without using the other runtime loading flags (-brtl),
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='-berok'
- hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
- archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag $aix_export $shared_flag"
- else
- if test "$host_cpu" = ia64; then
- hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
- allow_undefined_flag="-z nodefs"
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag $aix_export"
- else
- hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
- # Warning - without using the other run time loading flags,
- # -berok will link without error, but may produce a broken library.
- allow_undefined_flag='${wl}-berok'
- # This is a bit strange, but is similar to how AIX traditionally builds
- # it's shared libraries.
- archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag $aix_export"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
- fi
- fi
- ;;
-
- amigaos*)
- archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- # see comment about different semantics on the GNU ld section
- ld_shlibs=no
- ;;
-
- cygwin* | mingw* | pw32*)
- # When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
- # hardcode_libdir_flag_spec is actually meaningless, as there is
- # no search path for DLLs.
- hardcode_libdir_flag_spec=' '
- allow_undefined_flag=unsupported
- # Tell ltmain to make .lib files, not .a files.
- libext=lib
- # FIXME: Setting linknames here is a bad hack.
- archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
- # The linker will automatically build a .lib file if we build a DLL.
- old_archive_from_new_cmds='true'
- # FIXME: Should let the user specify the lib program.
- old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
- fix_srcfile_path='`cygpath -w "$srcfile"`'
- ;;
-
- darwin* | rhapsody*)
- case "$host_os" in
- rhapsody* | darwin1.[[012]])
- allow_undefined_flag='-undefined suppress'
- ;;
- *) # Darwin 1.3 on
- allow_undefined_flag='-flat_namespace -undefined suppress'
- ;;
- esac
- # FIXME: Relying on posixy $() will cause problems for
- # cross-compilation, but unfortunately the echo tests do not
- # yet detect zsh echo's removal of \ escapes.
-
- #### Local change for Sleepycat's Berkeley DB [#5664] [#6511]
- case "$host_os" in
- darwin[[12345]].*)
- # removed double quotes in the following line:
- archive_cmds='$nonopt $(test x$module = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
- ;;
- *) # Darwin6.0 on (Mac OS/X Jaguar)
- archive_cmds='$nonopt $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -dynamiclib -install_name $rpath/$soname $verstring'
- ;;
- esac
- #### End of changes for Sleepycat's Berkeley DB [#5664] [#6511]
-
- # We need to add '_' to the symbols in $export_symbols first
- #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- whole_archive_flag_spec='-all_load $convenience'
- ;;
-
- freebsd1*)
- ld_shlibs=no
- ;;
-
- # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
- # support. Future versions do this automatically, but an explicit c++rt0.o
- # does not break anything, and helps significantly (at the cost of a little
- # extra space).
- freebsd2.2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
- freebsd2*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd*)
- archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- hpux9* | hpux10* | hpux11*)
- case $host_os in
- hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
- *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
- esac
- hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_direct=yes
- hardcode_minus_L=yes # Not in the search PATH, but as the default
- # location of the library.
- export_dynamic_flag_spec='${wl}-E'
- ;;
-
- irix5* | irix6*)
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- link_all_deplibs=yes
- ;;
-
- netbsd*)
- if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
- else
- archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
- fi
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- ;;
-
- newsos6)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- hardcode_shlibpath_var=no
- ;;
-
- openbsd*)
- hardcode_direct=yes
- hardcode_shlibpath_var=no
- if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- export_dynamic_flag_spec='${wl}-E'
- else
- case "$host_os" in
- openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-R$libdir'
- ;;
- *)
- archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
- ;;
- esac
- fi
- ;;
-
- os2*)
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_minus_L=yes
- allow_undefined_flag=unsupported
- archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
- old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
- ;;
-
- osf3*)
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- fi
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- hardcode_libdir_separator=:
- ;;
-
- osf4* | osf5*) # as osf3* with the addition of -msym flag
- if test "$GCC" = yes; then
- allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
- archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
- hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
- else
- allow_undefined_flag=' -expect_unresolved \*'
- archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
- archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
- $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
-
- #Both c and cxx compiler support -rpath directly
- hardcode_libdir_flag_spec='-rpath $libdir'
- fi
- hardcode_libdir_separator=:
- ;;
-
- sco3.2v5*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- export_dynamic_flag_spec='${wl}-Bexport'
- ;;
-
- solaris*)
- # gcc --version < 3.0 without binutils cannot create self contained
- # shared libraries reliably, requiring libgcc.a to resolve some of
- # the object symbols generated in some cases. Libraries that use
- # assert need libgcc.a to resolve __eprintf, for example. Linking
- # a copy of libgcc.a into every shared library to guarantee resolving
- # such symbols causes other problems: According to Tim Van Holder
- # <tim.van.holder@pandora.be>, C++ libraries end up with a separate
- # (to the application) exception stack for one thing.
- no_undefined_flag=' -z defs'
- if test "$GCC" = yes; then
- case `$CC --version 2>/dev/null` in
- [[12]].*)
- cat <<EOF 1>&2
-
-*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
-*** create self contained shared libraries on Solaris systems, without
-*** introducing a dependency on libgcc.a. Therefore, libtool is disabling
-*** -no-undefined support, which will at least allow you to build shared
-*** libraries. However, you may find that when you link such libraries
-*** into an application without using GCC, you have to manually add
-*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to
-*** upgrade to a newer version of GCC. Another option is to rebuild your
-*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
-
-EOF
- no_undefined_flag=
- ;;
- esac
- fi
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_shlibpath_var=no
- case $host_os in
- solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
- *) # Supported since Solaris 2.6 (maybe 2.5.1?)
- whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
- esac
- link_all_deplibs=yes
- ;;
-
- sunos4*)
- if test "x$host_vendor" = xsequent; then
- # Use $CC to link under sequent, because it throws in some extra .o
- # files that make .init and .fini sections work.
- archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
- fi
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_direct=yes
- hardcode_minus_L=yes
- hardcode_shlibpath_var=no
- ;;
-
- sysv4)
- if test "x$host_vendor" = xsno; then
- archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes # is this really true???
- else
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=no #Motorola manual says yes, but my tests say they lie
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4.3*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- export_dynamic_flag_spec='-Bexport'
- ;;
-
- sysv5*)
- no_undefined_flag=' -z text'
- # $CC -shared without GNU ld will not create a library from C++
- # object files and a static libstdc++, better avoid it by now
- archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
- archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
- $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
- hardcode_libdir_flag_spec=
- hardcode_shlibpath_var=no
- runpath_var='LD_RUN_PATH'
- ;;
-
- uts4*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- dgux*)
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_libdir_flag_spec='-L$libdir'
- hardcode_shlibpath_var=no
- ;;
-
- sysv4*MP*)
- if test -d /usr/nec; then
- archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
- hardcode_shlibpath_var=no
- runpath_var=LD_RUN_PATH
- hardcode_runpath_var=yes
- ld_shlibs=yes
- fi
- ;;
-
- sysv4.2uw2*)
- archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=no
- hardcode_shlibpath_var=no
- hardcode_runpath_var=yes
- runpath_var=LD_RUN_PATH
- ;;
-
- sysv5uw7* | unixware7*)
- no_undefined_flag='${wl}-z ${wl}text'
- if test "$GCC" = yes; then
- archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- else
- archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
- fi
- runpath_var='LD_RUN_PATH'
- hardcode_shlibpath_var=no
- ;;
-
- *)
- ld_shlibs=no
- ;;
- esac
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
fi
-AC_MSG_RESULT([$ld_shlibs])
-test "$ld_shlibs" = no && can_build_shared=no
-##
-## END FIXME
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
-## FIXME: this should be a separate macro
-##
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
# Check hardcoding attributes.
-AC_MSG_CHECKING([how to hardcode library paths into programs])
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
- test -n "$runpath_var"; then
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
# We can hardcode non-existant directories.
- if test "$hardcode_direct" != no &&
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
# If the only mechanism to avoid hardcoding is shlibpath_var, we
# have to relink, otherwise we might link with an installed library
# when we should be linking with a yet-to-be-installed one
- ## test "$hardcode_shlibpath_var" != no &&
- test "$hardcode_minus_L" != no; then
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
# Linking always hardcodes the temporary library directory.
- hardcode_action=relink
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
else
# We can link without hardcoding, and we can hardcode nonexisting dirs.
- hardcode_action=immediate
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
fi
else
# We cannot hardcode anything, or else we can only hardcode existing
# directories.
- hardcode_action=unsupported
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
fi
-AC_MSG_RESULT([$hardcode_action])
-##
-## END FIXME
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-## FIXME: this should be a separate macro
-##
-striplib=
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
@@ -1946,21 +1056,33 @@ if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
test -z "$striplib" && striplib="$STRIP --strip-unneeded"
AC_MSG_RESULT([yes])
else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ AC_MSG_RESULT([yes])
+ else
AC_MSG_RESULT([no])
fi
-##
-## END FIXME
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-## FIXME: this should be a separate macro
-##
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
# PORTME Fill in your ld.so characteristics
-AC_MSG_CHECKING([dynamic linker characteristics])
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
library_names_spec=
libname_spec='lib$name'
soname_spec=
+shrext=".so"
postinstall_cmds=
postuninstall_cmds=
finish_cmds=
@@ -1970,29 +1092,45 @@ shlibpath_overrides_runpath=unknown
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
case $host_os in
aix3*)
version_type=linux
- library_names_spec='${libname}${release}.so$versuffix $libname.a'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
shlibpath_var=LIBPATH
- # AIX has no versioning support, so we append a major version to the name.
- soname_spec='${libname}${release}.so$major'
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
;;
aix4* | aix5*)
version_type=linux
-
- #### Local change for Sleepycat's Berkeley DB [#5779]:
- # If we don't set need_version, we'll get x.so.0.0.0,
- # even if -avoid-version is set.
+ need_lib_prefix=no
need_version=no
-
+ hardcode_into_libs=yes
if test "$host_cpu" = ia64; then
# AIX 5 supports IA64
- library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
else
# With GCC up to 2.95.x, collect2 would create an import file
@@ -2002,29 +1140,28 @@ aix4* | aix5*)
# development snapshots of GCC prior to 3.0.
case $host_os in
aix4 | aix4.[[01]] | aix4.[[01]].*)
- if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
- echo ' yes '
- echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
- :
- else
- can_build_shared=no
- fi
- ;;
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
esac
- # AIX (on Power*) has no versioning support, so currently we can
- # not hardcode correct soname into executable. Probably we can
- # add versioning support to collect2, so additional links can
- # be useful in future.
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
if test "$aix_use_runtimelinking" = yes; then
# If using run time linking (on AIX 4.2 or later) use lib<name>.so
# instead of lib<name>.a to let people know that these are not
# typical AIX shared libraries.
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
else
# We preserve .a as extension for shared libraries through AIX4.2
# and later when we are not doing run time linking.
library_names_spec='${libname}${release}.a $libname.a'
- soname_spec='${libname}${release}.so$major'
+ soname_spec='${libname}${release}${shared_ext}$major'
fi
shlibpath_var=LIBPATH
fi
@@ -2037,7 +1174,7 @@ amigaos*)
;;
beos*)
- library_names_spec='${libname}.so'
+ library_names_spec='${libname}${shared_ext}'
dynamic_linker="$host_os ld.so"
shlibpath_var=LIBRARY_PATH
;;
@@ -2045,13 +1182,12 @@ beos*)
bsdi4*)
version_type=linux
need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
- export_dynamic_flag_spec=-rdynamic
# the default ld.so.conf also contains /usr/contrib/lib and
# /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
# libtool to hard-code these into programs
@@ -2059,29 +1195,55 @@ bsdi4*)
cygwin* | mingw* | pw32*)
version_type=windows
+ shrext=".dll"
need_version=no
need_lib_prefix=no
+
case $GCC,$host_os in
- yes,cygwin*)
+ yes,cygwin* | yes,mingw* | yes,pw32*)
library_names_spec='$libname.dll.a'
- soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
- postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
dldir=$destdir/`dirname \$dlpath`~
test -d \$dldir || mkdir -p \$dldir~
- $install_prog .libs/$dlname \$dldir/$dlname'
- postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
dlpath=$dir/\$dldll~
$rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
;;
- yes,mingw*)
- library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
- ;;
- yes,pw32*)
- library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
- ;;
+
*)
- library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
;;
esac
dynamic_linker='Win32 ld.exe'
@@ -2097,13 +1259,25 @@ darwin* | rhapsody*)
# FIXME: Relying on posixy $() will cause problems for
# cross-compilation, but unfortunately the echo tests do not
# yet detect zsh echo's removal of \ escapes.
- #### Local change for Sleepycat's Berkeley DB [#6117]:
- # added support for -jnimodule, encapsulated below in ${darwin_suffix}
- darwin_suffix='$(test .$jnimodule = .yes && echo jnilib || (test .$module = .yes && echo so || echo dylib))'
- library_names_spec='${libname}${release}${versuffix}.'"${darwin_suffix}"' ${libname}${release}${major}.'"${darwin_suffix}"' ${libname}.'"${darwin_suffix}"
- soname_spec='${libname}${release}${major}.'"${darwin_suffix}"
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
;;
freebsd1*)
@@ -2115,12 +1289,12 @@ freebsd*)
version_type=freebsd-$objformat
case $version_type in
freebsd-elf*)
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
need_version=no
need_lib_prefix=no
;;
freebsd-*)
- library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
need_version=yes
;;
esac
@@ -2129,7 +1303,11 @@ freebsd*)
freebsd2*)
shlibpath_overrides_runpath=yes
;;
- *)
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
@@ -2140,8 +1318,8 @@ gnu*)
version_type=linux
need_lib_prefix=no
need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
hardcode_into_libs=yes
;;
@@ -2149,33 +1327,75 @@ gnu*)
hpux9* | hpux10* | hpux11*)
# Give a soname corresponding to the major version so that dld.sl refuses to
# link against other versions.
- dynamic_linker="$host_os dld.sl"
version_type=sunos
need_lib_prefix=no
need_version=no
- shlibpath_var=SHLIB_PATH
- shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
- library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
- soname_spec='${libname}${release}.sl$major'
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
# HP-UX runs *really* slowly unless shared libraries are mode 555.
postinstall_cmds='chmod 555 $lib'
;;
-irix5* | irix6*)
- version_type=irix
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
need_lib_prefix=no
need_version=no
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
case $host_os in
- irix5*)
+ irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in # libtool.m4 will add one of these switches to LD
- *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
- *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
- *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
*) libsuff= shlibsuff= libmagic=never-match;;
esac
;;
@@ -2184,20 +1404,21 @@ irix5* | irix6*)
shlibpath_overrides_runpath=no
sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
;;
# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+linux*oldld* | linux*aout* | linux*coff*)
dynamic_linker=no
;;
# This must be Linux ELF.
-linux-gnu*)
+linux*)
version_type=linux
need_lib_prefix=no
need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
@@ -2220,12 +1441,12 @@ netbsd*)
need_lib_prefix=no
need_version=no
if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
dynamic_linker='NetBSD (a.out) ld.so'
else
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
dynamic_linker='NetBSD ld.elf_so'
fi
shlibpath_var=LD_LIBRARY_PATH
@@ -2235,17 +1456,17 @@ netbsd*)
newsos6)
version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
;;
-nto-qnx)
+nto-qnx | nto-qnx6*)
version_type=linux
need_lib_prefix=no
need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
;;
@@ -2254,36 +1475,38 @@ openbsd*)
version_type=sunos
need_lib_prefix=no
need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
- case "$host_os" in
- openbsd2.[[89]] | openbsd2.[[89]].*)
- shlibpath_overrides_runpath=no
- ;;
- *)
- shlibpath_overrides_runpath=yes
- ;;
- esac
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
else
shlibpath_overrides_runpath=yes
fi
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
- finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
- shlibpath_var=LD_LIBRARY_PATH
;;
os2*)
libname_spec='$name'
+ shrext=".dll"
need_lib_prefix=no
- library_names_spec='$libname.dll $libname.a'
+ library_names_spec='$libname${shared_ext} $libname.a'
dynamic_linker='OS/2 ld.exe'
shlibpath_var=LIBPATH
;;
osf3* | osf4* | osf5*)
version_type=osf
+ need_lib_prefix=no
need_version=no
- soname_spec='${libname}${release}.so'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
@@ -2291,8 +1514,8 @@ osf3* | osf4* | osf5*)
sco3.2v5*)
version_type=osf
- soname_spec='${libname}${release}.so$major'
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
shlibpath_var=LD_LIBRARY_PATH
;;
@@ -2300,8 +1523,8 @@ solaris*)
version_type=linux
need_lib_prefix=no
need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
@@ -2311,7 +1534,7 @@ solaris*)
sunos4*)
version_type=sunos
- library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=yes
@@ -2323,12 +1546,18 @@ sunos4*)
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
case $host_vendor in
sni)
shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
;;
motorola)
need_lib_prefix=no
@@ -2339,839 +1568,308 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
esac
;;
-uts4*)
- version_type=linux
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
-dgux*)
- version_type=linux
- need_lib_prefix=no
- need_version=no
- library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
- soname_spec='${libname}${release}.so$major'
- shlibpath_var=LD_LIBRARY_PATH
- ;;
-
sysv4*MP*)
if test -d /usr/nec ;then
version_type=linux
- library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
- soname_spec='$libname.so.$major'
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
shlibpath_var=LD_LIBRARY_PATH
fi
;;
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
*)
dynamic_linker=no
;;
esac
AC_MSG_RESULT([$dynamic_linker])
test "$dynamic_linker" = no && can_build_shared=no
-##
-## END FIXME
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-## FIXME: this should be a separate macro
-##
-# Report the final consequences.
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-##
-## END FIXME
-## FIXME: this should be a separate macro
-##
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
- test "$enable_shared" = yes && enable_static=no
- if test -n "$RANLIB"; then
- archive_cmds="$archive_cmds~\$RANLIB \$lib"
- postinstall_cmds='$RANLIB $lib'
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
fi
- ;;
-aix4*)
- if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
- test "$enable_shared" = yes && enable_static=no
- fi
- ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-##
-## END FIXME
-
-## FIXME: this should be a separate macro
-##
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-##
-## END FIXME
-
-if test "$hardcode_action" = relink; then
- # Fast installation is not supported
- enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
- test "$enable_shared" = no; then
- # Fast installation is not necessary
- enable_fast_install=needless
-fi
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
- variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-AC_LIBTOOL_DLOPEN_SELF
-
-## FIXME: this should be a separate macro
-##
-if test "$enable_shared" = yes && test "$GCC" = yes; then
- case $archive_cmds in
- *'~'*)
- # FIXME: we may have to deal with multi-command sequences.
- ;;
- '$CC '*)
- # Test whether the compiler implicitly links with -lc since on some
- # systems, -lgcc has to come before -lc. If gcc already passes -lc
- # to ld, don't add -lc before -lgcc.
- AC_MSG_CHECKING([whether -lc should be explicitly linked in])
- AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
- [$rm conftest*
- echo 'static int dummy;' > conftest.$ac_ext
-
- if AC_TRY_EVAL(ac_compile); then
- soname=conftest
- lib=conftest
- libobjs=conftest.$ac_objext
- deplibs=
- wl=$lt_cv_prog_cc_wl
- compiler_flags=-v
- linker_flags=-v
- verstring=
- output_objdir=.
- libname=conftest
- save_allow_undefined_flag=$allow_undefined_flag
- allow_undefined_flag=
- if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
- then
- lt_cv_archive_cmds_need_lc=no
- else
- lt_cv_archive_cmds_need_lc=yes
- fi
- allow_undefined_flag=$save_allow_undefined_flag
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
else
- cat conftest.err 1>&5
- fi])
- AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
- ;;
- esac
-fi
-need_lc=${lt_cv_archive_cmds_need_lc-yes}
-##
-## END FIXME
-
-## FIXME: this should be a separate macro
-##
-# The second clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
- :
-else
- # If there is no Makefile yet, we rely on a make rule to execute
- # `config.status --recheck' to rerun these tests and create the
- # libtool script then.
- test -f Makefile && make "$ltmain"
-fi
-
-if test -f "$ltmain"; then
- trap "$rm \"${ofile}T\"; exit 1" 1 2 15
- $rm -f "${ofile}T"
-
- echo creating $ofile
-
- # Now quote all the things that may contain metacharacters while being
- # careful not to overquote the AC_SUBSTed values. We take copies of the
- # variables and quote the copies for generation of the libtool script.
- for var in echo old_CC old_CFLAGS \
- AR AR_FLAGS CC LD LN_S NM SHELL \
- reload_flag reload_cmds wl \
- pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
- thread_safe_flag_spec whole_archive_flag_spec libname_spec \
- library_names_spec soname_spec \
- RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
- old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
- postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
- old_striplib striplib file_magic_cmd export_symbols_cmds \
- deplibs_check_method allow_undefined_flag no_undefined_flag \
- finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
- global_symbol_to_c_name_address \
- hardcode_libdir_flag_spec hardcode_libdir_separator \
- sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
- compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
- case $var in
- reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
- old_postinstall_cmds | old_postuninstall_cmds | \
- export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
- extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
- postinstall_cmds | postuninstall_cmds | \
- finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
- # Double-quote double-evaled strings.
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
- ;;
- *)
- eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
- ;;
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
esac
- done
-
- cat <<__EOF__ > "${ofile}T"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996-2000 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$need_lc
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# The default C compiler.
-CC=$lt_CC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_pic_flag
-pic_mode=$pic_mode
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$lt_compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names. First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
-# ### END LIBTOOL CONFIG
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
-__EOF__
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
- case $host_os in
- aix3*)
- cat <<\EOF >> "${ofile}T"
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
-# AIX sometimes has problems with the GCC collect2 program. For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
- COLLECT_NAMES=
- export COLLECT_NAMES
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
fi
-EOF
- ;;
- esac
+])# _LT_AC_TAGCONFIG
- case $host_os in
- cygwin* | mingw* | pw32* | os2*)
- cat <<'EOF' >> "${ofile}T"
- # This is a source program that is used to create dlls on Windows
- # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
- # This is a source program that is used to create import libraries
- # on Windows for dlls which lack them. Don't remove nor modify the
- # starting and closing comments
-# /* impgen.c starts here */
-# /* Copyright (C) 1999-2000 Free Software Foundation, Inc.
-#
-# This file is part of GNU libtool.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-# */
-#
-# #include <stdio.h> /* for printf() */
-# #include <unistd.h> /* for open(), lseek(), read() */
-# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
-# #include <string.h> /* for strdup() */
-#
-# /* O_BINARY isn't required (or even defined sometimes) under Unix */
-# #ifndef O_BINARY
-# #define O_BINARY 0
-# #endif
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[2];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 2);
-# return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[4];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 4);
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-# void *ptr;
-# {
-# unsigned char *b = ptr;
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-# int argc;
-# char *argv[];
-# {
-# int dll;
-# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-# unsigned long export_rva, export_size, nsections, secptr, expptr;
-# unsigned long name_rvas, nexp;
-# unsigned char *expdata, *erva;
-# char *filename, *dll_name;
-#
-# filename = argv[1];
-#
-# dll = open(filename, O_RDONLY|O_BINARY);
-# if (dll < 1)
-# return 1;
-#
-# dll_name = filename;
-#
-# for (i=0; filename[i]; i++)
-# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
-# dll_name = filename + i +1;
-#
-# pe_header_offset = pe_get32 (dll, 0x3c);
-# opthdr_ofs = pe_header_offset + 4 + 20;
-# num_entries = pe_get32 (dll, opthdr_ofs + 92);
-#
-# if (num_entries < 1) /* no exports */
-# return 1;
-#
-# export_rva = pe_get32 (dll, opthdr_ofs + 96);
-# export_size = pe_get32 (dll, opthdr_ofs + 100);
-# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-# secptr = (pe_header_offset + 4 + 20 +
-# pe_get16 (dll, pe_header_offset + 4 + 16));
-#
-# expptr = 0;
-# for (i = 0; i < nsections; i++)
-# {
-# char sname[8];
-# unsigned long secptr1 = secptr + 40 * i;
-# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-# lseek(dll, secptr1, SEEK_SET);
-# read(dll, sname, 8);
-# if (vaddr <= export_rva && vaddr+vsize > export_rva)
-# {
-# expptr = fptr + (export_rva - vaddr);
-# if (export_rva + export_size > vaddr + vsize)
-# export_size = vsize - (export_rva - vaddr);
-# break;
-# }
-# }
-#
-# expdata = (unsigned char*)malloc(export_size);
-# lseek (dll, expptr, SEEK_SET);
-# read (dll, expdata, export_size);
-# erva = expdata - export_rva;
-#
-# nexp = pe_as32 (expdata+24);
-# name_rvas = pe_as32 (expdata+32);
-#
-# printf ("EXPORTS\n");
-# for (i = 0; i<nexp; i++)
-# {
-# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-# }
-#
-# return 0;
-# }
-# /* impgen.c ends here */
-EOF
- ;;
- esac
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
- # We use sed instead of cat because bash on DJGPP gets confused if
- # if finds mixed CR/LF and LF-only lines. Since sed operates in
- # text mode, it properly converts lines to CR/LF. This bash problem
- # is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
- mv -f "${ofile}T" "$ofile" || \
- (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
- chmod +x "$ofile"
-fi
-##
-## END FIXME
-
-])# _LT_AC_LTCONFIG_HACK
-
-# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
-# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
-# AC_ENABLE_SHARED - implement the --enable-shared flag
-# Usage: AC_ENABLE_SHARED[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
AC_DEFUN([AC_ENABLE_SHARED],
[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(shared,
-changequote(<<, >>)dnl
-<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case $enableval in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
- enable_shared=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_shared=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
-])
+AC_ARG_ENABLE([shared],
+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
-# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
AC_DEFUN([AC_DISABLE_SHARED],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)])
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
-# AC_ENABLE_STATIC - implement the --enable-static flag
-# Usage: AC_ENABLE_STATIC[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
AC_DEFUN([AC_ENABLE_STATIC],
[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(static,
-changequote(<<, >>)dnl
-<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case $enableval in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
- enable_static=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_static=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
-])
+AC_ARG_ENABLE([static],
+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
-# AC_DISABLE_STATIC - set the default static flag to --disable-static
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
AC_DEFUN([AC_DISABLE_STATIC],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)])
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
-# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
-# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
-# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
-# `yes'.
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
AC_DEFUN([AC_ENABLE_FAST_INSTALL],
[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(fast-install,
-changequote(<<, >>)dnl
-<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case $enableval in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
- enable_fast_install=no
- # Look at the argument we got. We use all the common list separators.
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
- for pkg in $enableval; do
- if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
- fi
- done
- IFS="$ac_save_ifs"
- ;;
-esac],
-enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
-])
+AC_ARG_ENABLE([fast-install],
+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
-# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
AC_DEFUN([AC_DISABLE_FAST_INSTALL],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)])
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
-# AC_LIBTOOL_PICMODE - implement the --with-pic flag
-# Usage: AC_LIBTOOL_PICMODE[(MODE)]
-# Where MODE is either `yes' or `no'. If omitted, it defaults to
-# `both'.
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
AC_DEFUN([AC_LIBTOOL_PICMODE],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)])
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
-# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_MSG_CHECKING([for $1])
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
[case $MAGIC_CMD in
- /*)
+[[\\/*] | ?:[\\/]*])
lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
;;
- ?:/*)
- lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
- ;;
- *)
- ac_save_MAGIC_CMD="$MAGIC_CMD"
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
dnl $ac_dummy forces splitting on constant user-supplied paths.
dnl POSIX.2 word splitting is done only on the output of word expansions,
dnl not every word. This closes a longstanding sh security hole.
ac_dummy="ifelse([$2], , $PATH, [$2])"
for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$1; then
lt_cv_path_MAGIC_CMD="$ac_dir/$1"
@@ -3181,7 +1879,7 @@ dnl not every word. This closes a longstanding sh security hole.
file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
- egrep "$file_magic_regex" > /dev/null; then
+ $EGREP "$file_magic_regex" > /dev/null; then
:
else
cat <<EOF 1>&2
@@ -3202,8 +1900,8 @@ EOF
break
fi
done
- IFS="$ac_save_ifs"
- MAGIC_CMD="$ac_save_MAGIC_CMD"
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
;;
esac])
MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
@@ -3212,36 +1910,41 @@ if test -n "$MAGIC_CMD"; then
else
AC_MSG_RESULT(no)
fi
-])
+])# AC_PATH_TOOL_PREFIX
-# AC_PATH_MAGIC - find a file program which can recognise a shared library
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
AC_DEFUN([AC_PATH_MAGIC],
-[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
-AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
- AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
else
MAGIC_CMD=:
fi
fi
-])
+])# AC_PATH_MAGIC
-# AC_PROG_LD - find the path to the GNU or non-GNU linker
+# AC_PROG_LD
+# ----------
+# find the path to the GNU or non-GNU linker
AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+[AC_ARG_WITH([gnu-ld],
+ [AC_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
+ AC_MSG_CHECKING([for ld used by $CC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -3251,12 +1954,12 @@ if test "$GCC" = yes; then
esac
case $ac_prog in
# Accept absolute paths.
- [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
+ [[\\/]]* | ?:[[\\/]]*)
re_direlt='/[[^/]][[^/]]*/\.\./'
# Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
@@ -3276,22 +1979,26 @@ else
fi
AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
- if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break
- else
+ ;;
+ *)
test "$with_gnu_ld" != yes && break
- fi
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
else
lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
@@ -3303,33 +2010,50 @@ else
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
AC_PROG_LD_GNU
-])
+])# AC_PROG_LD
+
-# AC_PROG_LD_GNU -
+# AC_PROG_LD_GNU
+# --------------
AC_DEFUN([AC_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+case `"$LD" -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
lt_cv_prog_gnu_ld=yes
-else
+ ;;
+*)
lt_cv_prog_gnu_ld=no
-fi])
+ ;;
+esac])
with_gnu_ld=$lt_cv_prog_gnu_ld
-])
+])# AC_PROG_LD_GNU
+
-# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
# -- PORTME Some linkers may need a different reload flag.
AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
-[lt_cv_ld_reload_flag='-r'])
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
reload_flag=$lt_cv_ld_reload_flag
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-])
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
-# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
# -- PORTME fill in with the dynamic library characteristics
AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependant libraries],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
lt_cv_deplibs_check_method,
[lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
@@ -3341,7 +2065,7 @@ lt_cv_deplibs_check_method='unknown'
# 'pass_all' -- all dependencies passed with no checks.
# 'test_compile' -- check by making test program.
# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
+# which responds to the $file_magic_cmd with a given extended regex.
# If you have `file' or equivalent on your system and you're not sure
# whether `pass_all' will *always* work, you probably want this one.
@@ -3361,21 +2085,24 @@ bsdi4*)
;;
cygwin* | mingw* | pw32*)
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
;;
darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
lt_cv_file_magic_cmd='/usr/bin/file -L'
case "$host_os" in
rhapsody* | darwin1.[[012]])
- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
;;
*) # Darwin 1.3 on
lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
;;
esac
+ lt_cv_deplibs_check_method=pass_all
;;
freebsd*)
@@ -3398,15 +2125,27 @@ gnu*)
lt_cv_deplibs_check_method=pass_all
;;
-hpux10.20*|hpux11*)
- lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+hpux10.20* | hpux11*)
lt_cv_file_magic_cmd=/usr/bin/file
- lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
;;
-irix5* | irix6*)
+irix5* | irix6* | nonstopux*)
case $host_os in
- irix5*)
+ irix5* | nonstopux*)
# this will be overridden with pass_all, but let us keep it just in case
lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
;;
@@ -3426,9 +2165,9 @@ irix5* | irix6*)
;;
# This must be Linux ELF.
-linux-gnu*)
+linux*)
case $host_cpu in
- alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* )
+ alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*)
lt_cv_deplibs_check_method=pass_all ;;
*)
# glibc up to 2.1.1 does not perform some relocations on ARM
@@ -3439,9 +2178,9 @@ linux-gnu*)
netbsd*)
if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
- lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else
- lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
fi
;;
@@ -3451,7 +2190,7 @@ newos6*)
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
-nto-qnx)
+nto-qnx | nto-qnx6*)
lt_cv_deplibs_check_method=unknown
;;
@@ -3481,10 +2220,6 @@ solaris*)
lt_cv_file_magic_test_file=/lib/libc.so
;;
-sysv5uw[[78]]* | sysv4*uw2*)
- lt_cv_deplibs_check_method=pass_all
- ;;
-
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
case $host_vendor in
motorola)
@@ -3503,77 +2238,97 @@ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
lt_cv_file_magic_test_file=/lib/libc.so
;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
esac
])
file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
-])
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
-# AC_PROG_NM - find the path to a BSD-compatible name lister
+# AC_PROG_NM
+# ----------
+# find the path to a BSD-compatible name lister
AC_DEFUN([AC_PROG_NM],
-[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
-AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(lt_cv_path_NM,
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
[if test -n "$NM"; then
# Let the user override the test.
lt_cv_path_NM="$NM"
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- tmp_nm=$ac_dir/${ac_tool_prefix}nm
- if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
# Tru64's nm complains that /dev/null is an invalid object file
- if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break
- elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- lt_cv_path_NM="$tmp_nm -p"
- break
- else
- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
- continue # so that we can try to find one that supports BSD flags
- fi
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
fi
done
- IFS="$ac_save_ifs"
+ IFS="$lt_save_ifs"
test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi])
NM="$lt_cv_path_NM"
-AC_MSG_RESULT([$NM])
-])
+])# AC_PROG_NM
+
-# AC_CHECK_LIBM - check for math library
+# AC_CHECK_LIBM
+# -------------
+# check for math library
AC_DEFUN([AC_CHECK_LIBM],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32*)
- # These system don't have libm
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
;;
*-ncr-sysv4.3*)
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
- AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
;;
*)
- AC_CHECK_LIB(m, main, LIBM="-lm")
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
;;
esac
-])
+])# AC_CHECK_LIBM
-# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl convenience library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-convenience to the
-# configure arguments. Note that LIBLTDL and INCLTDL are not
-# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not
-# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed
-# with '${top_builddir}/' and INCLTDL will be prefixed with
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
# '${top_srcdir}/' (note the single quotes!). If your package is not
# flat and you're not using automake, define top_builddir and
# top_srcdir appropriately in the Makefiles.
@@ -3585,23 +2340,27 @@ AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
esac
LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-])
-
-# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl installable library and INCLTDL to the include flags for
-# the libltdl header and adds --enable-ltdl-install to the configure
-# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
-# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed
-# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will
-# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
-# with '${top_srcdir}/' (note the single quotes!). If your package is
-# not flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!). If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- AC_CHECK_LIB(ltdl, main,
+ AC_CHECK_LIB(ltdl, lt_dlinit,
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
[if test x"$enable_ltdl_install" = xno; then
AC_MSG_WARN([libltdl not installed, but installation disabled])
@@ -3612,13 +2371,3415 @@ AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
if test x"$enable_ltdl_install" = x"yes"; then
ac_configure_args="$ac_configure_args --enable-ltdl-install"
LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
else
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
LIBLTDL="-lltdl"
- INCLTDL=
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,F77" | sed 's/^,//'`])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,GCJ" | sed 's/^,//'`])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,RC" | sed 's/^,//'`])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+ ;;
+ esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+ AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+ if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then :
+ else
+ AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+ _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+ fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[12]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sco*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+EOF
])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris* | sysv5*)
+ symcode='[[BDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGISTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ ccc)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi4*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv5*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
# old names
AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
@@ -3631,3 +5792,76 @@ AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
# This is just to silence aclocal about the macro not being used
ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+SED=$lt_cv_path_SED
+])
+AC_MSG_RESULT([$SED])
+])
diff --git a/db/dist/aclocal/mutex.ac b/db/dist/aclocal/mutex.ac
index ecfd7261c..4f2b0189e 100644
--- a/db/dist/aclocal/mutex.ac
+++ b/db/dist/aclocal/mutex.ac
@@ -1,4 +1,4 @@
-# Id: mutex.ac,v 11.38 2002/07/25 20:07:52 sue Exp
+# $Id: mutex.ac,v 11.42 2003/06/16 14:54:39 bostic Exp $
# POSIX pthreads tests: inter-process safe and intra-process only.
#
@@ -91,7 +91,6 @@ AC_DEFUN(AM_DEFINE_MUTEXES, [
# other ports.
AH_TEMPLATE(HAVE_MUTEX_VMS, [Define to 1 to use VMS mutexes.])
AH_TEMPLATE(HAVE_MUTEX_VXWORKS, [Define to 1 to use VxWorks mutexes.])
-AH_TEMPLATE(HAVE_MUTEX_WIN32, [Define to 1 to use Windows mutexes.])
AC_CACHE_CHECK([for mutexes], db_cv_mutex, [
db_cv_mutex=no
@@ -137,6 +136,11 @@ if test "$db_cv_uimutexes" = yes; then
esac
fi
+# User-specified Win32 mutexes (MinGW build)
+if test "$db_cv_mingw" = "yes"; then
+ db_cv_mutex=win32/gcc
+fi
+
# LWP threads: _lwp_XXX
if test "$db_cv_mutex" = no; then
AC_TRY_LINK([
@@ -327,7 +331,27 @@ AC_TRY_LINK([
], [db_cv_mutex="AIX/_check_lock"])
fi
-# Alpha/gcc: OSF/1
+# _spin_lock_try/_spin_unlock: Apple/Darwin
+if test "$db_cv_mutex" = no; then
+AC_TRY_LINK(,[
+ int x;
+ _spin_lock_try(&x);
+ _spin_unlock(&x);
+], [db_cv_mutex="Darwin/_spin_lock_try"])
+fi
+
+# Tru64/cc
+if test "$db_cv_mutex" = no; then
+AC_TRY_COMPILE(,[
+#if defined(__alpha) && defined(__DECC)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+], [db_cv_mutex="Tru64/cc-assembly"])
+fi
+
+# Alpha/gcc
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
#if defined(__alpha) && defined(__GNUC__)
@@ -361,16 +385,6 @@ AC_TRY_COMPILE(,[
fi
# PPC/gcc:
-# Test for Apple first, it requires slightly different assembly.
-if test "$db_cv_mutex" = no; then
-AC_TRY_COMPILE(,[
-#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GNUC__) && defined(__APPLE__)
- exit(0);
-#else
- FAIL TO COMPILE/LINK
-#endif
-], [db_cv_mutex="PPC_APPLE/gcc-assembly"])
-fi
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GNUC__)
@@ -378,7 +392,7 @@ AC_TRY_COMPILE(,[
#else
FAIL TO COMPILE/LINK
#endif
-], [db_cv_mutex="PPC_GENERIC/gcc-assembly"])
+], [db_cv_mutex="PPC/gcc-assembly"])
fi
# Sparc/gcc: SunOS, Solaris
@@ -414,6 +428,17 @@ AC_TRY_COMPILE(,[
], [db_cv_mutex="x86/gcc-assembly"])
fi
+# S390/cc: IBM OS/390 Unix
+if test "$db_cv_mutex" = no; then
+AC_TRY_COMPILE(,[
+#if defined(__MVS__) && defined(__IBMC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+], [db_cv_mutex="S390/cc-assembly"])
+fi
+
# S390/gcc: Linux
if test "$db_cv_mutex" = no; then
AC_TRY_COMPILE(,[
@@ -462,6 +487,10 @@ AIX/_check_lock) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_AIX_CHECK_LOCK)
AH_TEMPLATE(HAVE_MUTEX_AIX_CHECK_LOCK,
[Define to 1 to use the AIX _check_lock mutexes.]);;
+Darwin/_spin_lock_try) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY)
+ AH_TEMPLATE(HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY,
+ [Define to 1 to use the Apple/Darwin _spin_lock_try mutexes.]);;
ALPHA/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_ALPHA_GCC_ASSEMBLY)
AH_TEMPLATE(HAVE_MUTEX_ALPHA_GCC_ASSEMBLY,
@@ -507,20 +536,20 @@ POSIX/pthreads/library/private)
AC_DEFINE(HAVE_MUTEX_THREAD_ONLY)
AH_TEMPLATE(HAVE_MUTEX_THREAD_ONLY,
[Define to 1 to configure mutexes intra-process only.]);;
-PPC_GENERIC/gcc-assembly)
+PPC/gcc-assembly)
ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- AC_DEFINE(HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY)
- AH_TEMPLATE(HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY,
- [Define to 1 to use the GCC compiler and generic PowerPC assembly language.]);;
-PPC_APPLE/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- AC_DEFINE(HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY)
- AH_TEMPLATE(HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY,
- [Define to 1 to use the GCC compiler and Apple PowerPC assembly language.]);;
+ AC_DEFINE(HAVE_MUTEX_PPC_GCC_ASSEMBLY)
+ AH_TEMPLATE(HAVE_MUTEX_PPC_GCC_ASSEMBLY,
+ [Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.]);;
ReliantUNIX/initspin) LIBS="$LIBS -lmproc"
ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_RELIANTUNIX_INITSPIN)
AH_TEMPLATE(HAVE_MUTEX_RELIANTUNIX_INITSPIN,
[Define to 1 to use Reliant UNIX initspin mutexes.]);;
+S390/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_S390_CC_ASSEMBLY)
+ AH_TEMPLATE(HAVE_MUTEX_S390_CC_ASSEMBLY,
+ [Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.]);;
S390/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_S390_GCC_ASSEMBLY)
AH_TEMPLATE(HAVE_MUTEX_S390_GCC_ASSEMBLY,
@@ -545,6 +574,11 @@ Sparc/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_SPARC_GCC_ASSEMBLY)
AH_TEMPLATE(HAVE_MUTEX_SPARC_GCC_ASSEMBLY,
[Define to 1 to use the GCC compiler and Sparc assembly language mutexes.]);;
+Tru64/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_TRU64_CC_ASSEMBLY)
+ AH_TEMPLATE(HAVE_MUTEX_TRU64_CC_ASSEMBLY,
+ [Define to 1 to use the CC compiler and Tru64 assembly language mutexes.]);;
+
UI/threads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_UI_THREADS)
AH_TEMPLATE(HAVE_MUTEX_UI_THREADS,
@@ -562,10 +596,16 @@ UNIX/sema_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_SEMA_INIT)
AH_TEMPLATE(HAVE_MUTEX_SEMA_INIT,
[Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes.]);;
-UTS/cc-assembly) ADDITIONAL_OBJS="$ADDITIONAL_OBJS uts4.cc${o}"
+UTS/cc-assembly) ADDITIONAL_OBJS="uts4.cc${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_UTS_CC_ASSEMBLY)
AH_TEMPLATE(HAVE_MUTEX_UTS_CC_ASSEMBLY,
[Define to 1 to use the UTS compiler and assembly language mutexes.]);;
+win32) ADDITIONAL_OBJS="mut_win32${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_WIN32)
+ AH_TEMPLATE(HAVE_MUTEX_WIN32, [Define to 1 to use the MSVC compiler and Windows mutexes.]);;
+win32/gcc) ADDITIONAL_OBJS="mut_win32${o} $ADDITIONAL_OBJS"
+ AC_DEFINE(HAVE_MUTEX_WIN32_GCC)
+ AH_TEMPLATE(HAVE_MUTEX_WIN32_GCC, [Define to 1 to use the GCC compiler and Windows mutexes.]);;
x86/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
AC_DEFINE(HAVE_MUTEX_X86_GCC_ASSEMBLY)
AH_TEMPLATE(HAVE_MUTEX_X86_GCC_ASSEMBLY,
diff --git a/db/dist/aclocal/options.ac b/db/dist/aclocal/options.ac
index 7c2c6a70b..947a1c06b 100644
--- a/db/dist/aclocal/options.ac
+++ b/db/dist/aclocal/options.ac
@@ -1,4 +1,4 @@
-# Id: options.ac,v 11.19 2002/06/25 19:31:48 bostic Exp
+# $Id: options.ac,v 11.29 2003/11/05 18:25:41 bostic Exp $
# Process user-specified options.
AC_DEFUN(AM_OPTIONS_SET, [
@@ -11,6 +11,56 @@ AC_ARG_ENABLE(bigfile,
[AC_MSG_ERROR(
[--enable-bigfile no longer supported, use --enable-largefile])])
+AC_MSG_CHECKING(if --disable-cryptography option specified)
+AC_ARG_ENABLE(cryptography,
+ AC_HELP_STRING([--disable-cryptography],
+ [Do not build database cryptography support.]),, enableval="yes")
+db_cv_build_cryptography="$enableval"
+case "$enableval" in
+ no) AC_MSG_RESULT(yes);;
+yes) AC_MSG_RESULT(no);;
+esac
+
+AC_MSG_CHECKING(if --disable-hash option specified)
+AC_ARG_ENABLE(hash,
+ AC_HELP_STRING([--disable-hash],
+ [Do not build Hash access method.]),, enableval="yes")
+db_cv_build_hash="$enableval"
+case "$enableval" in
+ no) AC_MSG_RESULT(yes);;
+yes) AC_MSG_RESULT(no);;
+esac
+
+AC_MSG_CHECKING(if --disable-queue option specified)
+AC_ARG_ENABLE(queue,
+ AC_HELP_STRING([--disable-queue],
+ [Do not build Queue access method.]),, enableval="yes")
+db_cv_build_queue="$enableval"
+case "$enableval" in
+ no) AC_MSG_RESULT(yes);;
+yes) AC_MSG_RESULT(no);;
+esac
+
+AC_MSG_CHECKING(if --disable-replication option specified)
+AC_ARG_ENABLE(replication,
+ AC_HELP_STRING([--disable-replication],
+ [Do not build database replication support.]),, enableval="yes")
+db_cv_build_replication="$enableval"
+case "$enableval" in
+ no) AC_MSG_RESULT(yes);;
+yes) AC_MSG_RESULT(no);;
+esac
+
+AC_MSG_CHECKING(if --disable-verify option specified)
+AC_ARG_ENABLE(verify,
+ AC_HELP_STRING([--disable-verify],
+ [Do not build database verification support.]),, enableval="yes")
+db_cv_build_verify="$enableval"
+case "$enableval" in
+ no) AC_MSG_RESULT(yes);;
+yes) AC_MSG_RESULT(no);;
+esac
+
AC_MSG_CHECKING(if --enable-compat185 option specified)
AC_ARG_ENABLE(compat185,
[AC_HELP_STRING([--enable-compat185],
@@ -51,7 +101,20 @@ AC_ARG_ENABLE(diagnostic,
[AC_HELP_STRING([--enable-diagnostic],
[Build a version with run-time diagnostics.])],
[db_cv_diagnostic="$enable_diagnostic"], [db_cv_diagnostic="no"])
-AC_MSG_RESULT($db_cv_diagnostic)
+if test "$db_cv_diagnostic" = "yes"; then
+ AC_MSG_RESULT($db_cv_diagnostic)
+fi
+if test "$db_cv_diagnostic" = "no" -a "$db_cv_debug_rop" = "yes"; then
+ db_cv_diagnostic="yes"
+ AC_MSG_RESULT([by --enable-debug_rop])
+fi
+if test "$db_cv_diagnostic" = "no" -a "$db_cv_debug_wop" = "yes"; then
+ db_cv_diagnostic="yes"
+ AC_MSG_RESULT([by --enable-debug_wop])
+fi
+if test "$db_cv_diagnostic" = "no"; then
+ AC_MSG_RESULT($db_cv_diagnostic)
+fi
AC_MSG_CHECKING(if --enable-dump185 option specified)
AC_ARG_ENABLE(dump185,
@@ -67,6 +130,13 @@ AC_ARG_ENABLE(java,
[db_cv_java="$enable_java"], [db_cv_java="no"])
AC_MSG_RESULT($db_cv_java)
+AC_MSG_CHECKING(if --enable-mingw option specified)
+AC_ARG_ENABLE(mingw,
+ [AC_HELP_STRING([--enable-mingw],
+ [Build Berkeley DB for MinGW.])],
+ [db_cv_mingw="$enable_mingw"], [db_cv_mingw="no"])
+AC_MSG_RESULT($db_cv_mingw)
+
AC_MSG_CHECKING(if --enable-posixmutexes option specified)
AC_ARG_ENABLE(posixmutexes,
[AC_HELP_STRING([--enable-posixmutexes],
@@ -81,6 +151,20 @@ AC_ARG_ENABLE(rpc,
[db_cv_rpc="$enable_rpc"], [db_cv_rpc="no"])
AC_MSG_RESULT($db_cv_rpc)
+AC_MSG_CHECKING(if --enable-smallbuild option specified)
+AC_ARG_ENABLE(smallbuild,
+ [AC_HELP_STRING([--enable-smallbuild],
+ [Build small footprint version of the library.])],
+ [db_cv_smallbuild="$enable_smallbuild"], [db_cv_smallbuild="no"])
+if test "$db_cv_smallbuild" = "yes"; then
+ db_cv_build_cryptography="no"
+ db_cv_build_hash="no"
+ db_cv_build_queue="no"
+ db_cv_build_replication="no"
+ db_cv_build_verify="no"
+fi
+AC_MSG_RESULT($db_cv_smallbuild)
+
AC_MSG_CHECKING(if --enable-tcl option specified)
AC_ARG_ENABLE(tcl,
[AC_HELP_STRING([--enable-tcl],
@@ -109,24 +193,6 @@ AC_ARG_ENABLE(umrw,
[db_cv_umrw="$enable_umrw"], [db_cv_umrw="no"])
AC_MSG_RESULT($db_cv_umrw)
-AC_MSG_CHECKING([if --with-embedix=DIR option specified])
-AC_ARG_WITH(embedix,
- [AC_HELP_STRING([--with-embedix=DIR],
- [Embedix install directory location.])],
- [with_embedix="$withval"], [with_embedix="no"])
-if test "$with_embedix" = "no"; then
- db_cv_embedix="no"
- AC_MSG_RESULT($with_embedix)
-else
- db_cv_embedix="yes"
- if test "$with_embedix" = "yes"; then
- db_cv_path_embedix_install="/opt/Embedix"
- else
- db_cv_path_embedix_install="$with_embedix"
- fi
- AC_MSG_RESULT($db_cv_path_embedix_install)
-fi
-
AC_MSG_CHECKING(if --with-mutex=MUTEX option specified)
AC_ARG_WITH(mutex,
[AC_HELP_STRING([--with-mutex=MUTEX],
@@ -140,16 +206,31 @@ if test "$with_mutex" != "no"; then
fi
AC_MSG_RESULT($with_mutex)
-AC_MSG_CHECKING(if --with-rpm=DIR option specified)
+AH_TEMPLATE(MUTEX_ALIGN,
+ [Define to a value if using non-standard mutex alignment.])
+AC_MSG_CHECKING(if --with-mutexalign=ALIGNMENT option specified)
+AC_ARG_WITH(mutexalign,
+ [AC_HELP_STRING([--with-mutexalign=ALIGNMENT],
+ [Selection of non-standard mutex alignment.])],
+ [with_mutexalign="$withval"], [with_mutexalign="no"])
+if test "$with_mutexalign" = "yes"; then
+ AC_MSG_ERROR([--with-mutexalign requires a mutex alignment argument])
+fi
+if test "$with_mutexalign" != "no"; then
+ AC_DEFINE_UNQUOTED(MUTEX_ALIGN, $with_mutexalign)
+fi
+AC_MSG_RESULT($with_mutexalign)
+
+AC_MSG_CHECKING(if --with-rpm=ARCHIVE option specified)
AC_ARG_WITH(rpm,
- [AC_HELP_STRING([--with-rpm=DIR],
- [Directory location of RPM archive.])],
+ [AC_HELP_STRING([--with-rpm=ARCHIVE], [Path of RPM archive.])],
[with_rpm="$withval"], [with_rpm="no"])
if test "$with_rpm" = "no"; then
db_cv_rpm="no"
+ db_cv_path_rpm_archive="Not-configured-with-rpm=ARCHIVE"
else
if test "$with_rpm" = "yes"; then
- AC_MSG_ERROR([--with-rpm requires a directory argument])
+ AC_MSG_ERROR([--with-rpm requires an archive path argument])
fi
db_cv_rpm="yes"
db_cv_path_rpm_archive="$with_rpm"
@@ -173,22 +254,18 @@ AC_ARG_WITH(uniquename,
[with_uniquename="$withval"], [with_uniquename="no"])
if test "$with_uniquename" = "no"; then
db_cv_uniquename="no"
+ DB_VERSION_UNIQUE_NAME=""
AC_MSG_RESULT($with_uniquename)
else
db_cv_uniquename="yes"
- if test "$with_uniquename" != "yes"; then
+ if test "$with_uniquename" = "yes"; then
+ DB_VERSION_UNIQUE_NAME="__EDIT_DB_VERSION_UNIQUE_NAME__"
+ else
DB_VERSION_UNIQUE_NAME="$with_uniquename"
fi
AC_MSG_RESULT($DB_VERSION_UNIQUE_NAME)
fi
-# Embedix requires RPM.
-if test "$db_cv_embedix" = "yes"; then
- if test "$db_cv_rpm" = "no"; then
- AC_MSG_ERROR([--with-embedix requires --with-rpm])
- fi
-fi
-
# Test requires Tcl
if test "$db_cv_test" = "yes"; then
if test "$db_cv_tcl" = "no"; then
diff --git a/db/dist/aclocal/programs.ac b/db/dist/aclocal/programs.ac
index 6e7f475be..7bfa1fa26 100644
--- a/db/dist/aclocal/programs.ac
+++ b/db/dist/aclocal/programs.ac
@@ -1,4 +1,4 @@
-# Id: programs.ac,v 11.20 2001/09/24 02:09:25 bostic Exp
+# $Id: programs.ac,v 11.20 2001/09/24 02:09:25 bostic Exp $
# Check for programs used in building/installation.
AC_DEFUN(AM_PROGRAMS_SET, [
diff --git a/db/dist/aclocal/sosuffix.ac b/db/dist/aclocal/sosuffix.ac
index 07cd36bd4..6970d4706 100644
--- a/db/dist/aclocal/sosuffix.ac
+++ b/db/dist/aclocal/sosuffix.ac
@@ -1,29 +1,32 @@
-# Id: sosuffix.ac,v 1.1 2002/07/08 13:15:05 dda Exp
+# $Id: sosuffix.ac,v 1.3 2003/04/19 05:11:55 dda Exp $
# Determine shared object suffixes.
#
# Our method is to use the libtool variable $library_names_spec,
# set by using AC_PROG_LIBTOOL. This variable is a snippet of shell
-# defined in terms of $versuffix, $release, $libname, $module and $jnimodule.
+# defined in terms of $versuffix, $release, $libname and $module
# We want to eval it and grab the suffix used for shared objects.
-# By setting $module and $jnimodule to yes/no, we obtain the suffixes
+# By setting $module to yes/no, we obtain the suffixes
# used to create dlloadable, or java loadable modules.
# On many (*nix) systems, these all evaluate to .so, but there
# are some notable exceptions.
+# Before calling this macro, $LIBTOOL_PROG must be set to
+# the correct method of invoking libtool (e.g. $SHELL ./libtool)
# This macro is used internally to discover the suffix for the current
-# settings of $module and $jnimodule. The result is stored in $_SOSUFFIX.
+# settings of $module. The result is stored in $_SOSUFFIX.
AC_DEFUN(_SOSUFFIX_INTERNAL, [
versuffix=""
release=""
libname=libfoo
- eval library_names=\"$library_names_spec\"
- _SOSUFFIX=`echo "$library_names" | sed -e 's/.*\.\([[a-zA-Z0-9_]]*\).*/\1/'`
- if test "$_SOSUFFIX" = '' ; then
- _SOSUFFIX=so
- if test "$enable_shared" = "yes" && test "$_SOSUFFIX_MESSAGE" = ""; then
- _SOSUFFIX_MESSAGE=yes
- AC_MSG_WARN([libtool may not know about this architecture.])
- AC_MSG_WARN([assuming .$_SUFFIX suffix for dynamic libraries.])
+ eval _SOSUFFIX=\"$shrext\"
+ if test "X$_SOSUFFIX" = "" ; then
+ _SOSUFFIX=".so"
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
+ if test "X$_SOSUFFIX_MESSAGE" = "X"; then
+ _SOSUFFIX_MESSAGE=yes
+ AC_MSG_WARN([libtool may not know about this architecture.])
+ AC_MSG_WARN([assuming $_SUFFIX suffix for dynamic libraries.])
+ fi
fi
fi
])
@@ -33,7 +36,6 @@ AC_DEFUN(_SOSUFFIX_INTERNAL, [
AC_DEFUN(SOSUFFIX_CONFIG, [
AC_MSG_CHECKING([SOSUFFIX from libtool])
module=no
- jnimodule=no
_SOSUFFIX_INTERNAL
SOSUFFIX=$_SOSUFFIX
AC_MSG_RESULT($SOSUFFIX)
@@ -46,7 +48,6 @@ AC_DEFUN(SOSUFFIX_CONFIG, [
AC_DEFUN(MODSUFFIX_CONFIG, [
AC_MSG_CHECKING([MODSUFFIX from libtool])
module=yes
- jnimodule=no
_SOSUFFIX_INTERNAL
MODSUFFIX=$_SOSUFFIX
AC_MSG_RESULT($MODSUFFIX)
@@ -55,14 +56,20 @@ AC_DEFUN(MODSUFFIX_CONFIG, [
# JMODSUFFIX_CONFIG will set the variable JMODSUFFIX to be the
# shared library extension used JNI modules opened by Java.
-# To discover this, we set $jnimodule, simulating libtool's -jnimodule option.
-# -jnimodule is currently a Sleepycat local extension to libtool.
+# To discover this, we set $jnimodule, simulating libtool's -shrext option.
+##########################################################################
+# Robert Boehne: Not much point in this macro any more because apparently
+# Darwin is the only OS that wants or needs the .jnilib extension.
+##########################################################################
AC_DEFUN(JMODSUFFIX_CONFIG, [
AC_MSG_CHECKING([JMODSUFFIX from libtool])
module=yes
- jnimodule=yes
_SOSUFFIX_INTERNAL
- JMODSUFFIX=$_SOSUFFIX
+ if test `uname` = "Darwin"; then
+ JMODSUFFIX=".jnilib"
+ else
+ JMODSUFFIX=$_SOSUFFIX
+ fi
AC_MSG_RESULT($JMODSUFFIX)
AC_SUBST(JMODSUFFIX)
])
diff --git a/db/dist/aclocal/tcl.ac b/db/dist/aclocal/tcl.ac
index 7273044b5..25e3a16d3 100644
--- a/db/dist/aclocal/tcl.ac
+++ b/db/dist/aclocal/tcl.ac
@@ -1,4 +1,4 @@
-# Id: tcl.ac,v 11.14 2002/09/07 17:25:58 dda Exp
+# $Id: tcl.ac,v 11.17 2003/10/13 21:04:04 bostic Exp $
# The SC_* macros in this file are from the unix/tcl.m4 files in the Tcl
# 8.3.0 distribution, with some minor changes. For this reason, license
@@ -87,6 +87,12 @@ AC_DEFUN(SC_LOAD_TCLCONFIG, [
AC_MSG_RESULT([file not found])
fi
+ # DB requires at least version 8.4.
+ if test ${TCL_MAJOR_VERSION} -lt 8 \
+ -o ${TCL_MAJOR_VERSION} -eq 8 -a ${TCL_MINOR_VERSION} -lt 4; then
+ AC_MSG_ERROR([Berkeley DB requires Tcl version 8.4 or better.])
+ fi
+
#
# The eval is required to do the TCL_DBGX substitution in the
# TCL_LIB_FILE variable
@@ -119,7 +125,7 @@ AC_DEFUN(SC_LOAD_TCLCONFIG, [
# Optional Tcl API.
AC_DEFUN(AM_TCL_LOAD, [
if test "$db_cv_tcl" = "yes"; then
- if test "$enable_shared" = "no"; then
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
AC_MSG_ERROR([Tcl requires shared libraries])
fi
diff --git a/db/dist/aclocal/types.ac b/db/dist/aclocal/types.ac
index 905203104..fdac504eb 100644
--- a/db/dist/aclocal/types.ac
+++ b/db/dist/aclocal/types.ac
@@ -1,11 +1,4 @@
-# Id: types.ac,v 11.10 2001/12/10 14:16:49 bostic Exp
-
-# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
-# autoconf usually includes. For that reason, we specify a set of includes
-# for all type checking tests. [#5060]
-AC_DEFUN(DB_INCLUDES, [[
-#include <sys/types.h>
-#include <stdio.h>]])
+# $Id: types.ac,v 11.12 2003/09/04 23:59:06 bostic Exp $
# Check the sizes we know about, and see if any of them match what's needed.
#
@@ -41,106 +34,91 @@ AC_DEFUN(AM_SEARCH_SSIZES, [
# Check for the standard system types.
AC_DEFUN(AM_TYPES, [
+# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
+# autoconf usually includes. For that reason, we specify a set of includes
+# for all type checking tests. [#5060]
+#
+# IBM's OS/390 and z/OS releases have types in <inttypes.h> not also found
+# in <sys/types.h>. Include <inttypes.h> as well, if it exists.
+AC_SUBST(inttypes_decl)
+db_includes="#include <sys/types.h>"
+AC_CHECK_HEADER(inttypes.h, [
+ inttypes_decl="#include <inttypes.h>"
+ db_includes="$db_includes
+#include <inttypes.h>"])
+db_includes="$db_includes
+#include <stdio.h>"
+
# We need to know the sizes of various objects on this system.
# We don't use the SIZEOF_XXX values created by autoconf.
-AC_CHECK_SIZEOF(char,, DB_INCLUDES)
-AC_CHECK_SIZEOF(unsigned char,, DB_INCLUDES)
-AC_CHECK_SIZEOF(short,, DB_INCLUDES)
-AC_CHECK_SIZEOF(unsigned short,, DB_INCLUDES)
-AC_CHECK_SIZEOF(int,, DB_INCLUDES)
-AC_CHECK_SIZEOF(unsigned int,, DB_INCLUDES)
-AC_CHECK_SIZEOF(long,, DB_INCLUDES)
-AC_CHECK_SIZEOF(unsigned long,, DB_INCLUDES)
-AC_CHECK_SIZEOF(size_t,, DB_INCLUDES)
-AC_CHECK_SIZEOF(char *,, DB_INCLUDES)
+AC_CHECK_SIZEOF(char,, $db_includes)
+AC_CHECK_SIZEOF(unsigned char,, $db_includes)
+AC_CHECK_SIZEOF(short,, $db_includes)
+AC_CHECK_SIZEOF(unsigned short,, $db_includes)
+AC_CHECK_SIZEOF(int,, $db_includes)
+AC_CHECK_SIZEOF(unsigned int,, $db_includes)
+AC_CHECK_SIZEOF(long,, $db_includes)
+AC_CHECK_SIZEOF(unsigned long,, $db_includes)
+AC_CHECK_SIZEOF(size_t,, $db_includes)
+AC_CHECK_SIZEOF(char *,, $db_includes)
# We require off_t and size_t, and we don't try to substitute our own
# if we can't find them.
-AC_CHECK_TYPE(off_t,,, DB_INCLUDES)
-if test "$ac_cv_type_off_t" = no; then
- AC_MSG_ERROR([No off_t type.])
-fi
-
-AC_CHECK_TYPE(size_t,,, DB_INCLUDES)
-if test "$ac_cv_type_size_t" = no; then
- AC_MSG_ERROR([No size_t type.])
-fi
+AC_CHECK_TYPE(off_t,, AC_MSG_ERROR([No off_t type.]), $db_includes)
+AC_CHECK_TYPE(size_t,, AC_MSG_ERROR([No size_t type.]), $db_includes)
# We look for u_char, u_short, u_int, u_long -- if we can't find them,
# we create our own.
AC_SUBST(u_char_decl)
-AC_CHECK_TYPE(u_char,,, DB_INCLUDES)
-if test "$ac_cv_type_u_char" = no; then
- u_char_decl="typedef unsigned char u_char;"
-fi
+AC_CHECK_TYPE(u_char,,
+ [u_char_decl="typedef unsigned char u_char;"], $db_includes)
AC_SUBST(u_short_decl)
-AC_CHECK_TYPE(u_short,,, DB_INCLUDES)
-if test "$ac_cv_type_u_short" = no; then
- u_short_decl="typedef unsigned short u_short;"
-fi
+AC_CHECK_TYPE(u_short,,
+ [u_short_decl="typedef unsigned short u_short;"], $db_includes)
AC_SUBST(u_int_decl)
-AC_CHECK_TYPE(u_int,,, DB_INCLUDES)
-if test "$ac_cv_type_u_int" = no; then
- u_int_decl="typedef unsigned int u_int;"
-fi
+AC_CHECK_TYPE(u_int,,
+ [u_int_decl="typedef unsigned int u_int;"], $db_includes)
AC_SUBST(u_long_decl)
-AC_CHECK_TYPE(u_long,,, DB_INCLUDES)
-if test "$ac_cv_type_u_long" = no; then
- u_long_decl="typedef unsigned long u_long;"
-fi
+AC_CHECK_TYPE(u_long,,
+ [u_long_decl="typedef unsigned long u_long;"], $db_includes)
AC_SUBST(u_int8_decl)
-AC_CHECK_TYPE(u_int8_t,,, DB_INCLUDES)
-if test "$ac_cv_type_u_int8_t" = no; then
- AM_SEARCH_USIZES(u_int8_decl, u_int8_t, 1)
-fi
+AC_CHECK_TYPE(u_int8_t,,
+ [AM_SEARCH_USIZES(u_int8_decl, u_int8_t, 1)], $db_includes)
AC_SUBST(u_int16_decl)
-AC_CHECK_TYPE(u_int16_t,,, DB_INCLUDES)
-if test "$ac_cv_type_u_int16_t" = no; then
- AM_SEARCH_USIZES(u_int16_decl, u_int16_t, 2)
-fi
+AC_CHECK_TYPE(u_int16_t,,
+ [AM_SEARCH_USIZES(u_int16_decl, u_int16_t, 2)], $db_includes)
AC_SUBST(int16_decl)
-AC_CHECK_TYPE(int16_t,,, DB_INCLUDES)
-if test "$ac_cv_type_int16_t" = no; then
- AM_SEARCH_SSIZES(int16_decl, int16_t, 2)
-fi
+AC_CHECK_TYPE(int16_t,,
+ [AM_SEARCH_SSIZES(int16_decl, int16_t, 2)], $db_includes)
AC_SUBST(u_int32_decl)
-AC_CHECK_TYPE(u_int32_t,,, DB_INCLUDES)
-if test "$ac_cv_type_u_int32_t" = no; then
- AM_SEARCH_USIZES(u_int32_decl, u_int32_t, 4)
-fi
+AC_CHECK_TYPE(u_int32_t,,
+ [AM_SEARCH_USIZES(u_int32_decl, u_int32_t, 4)], $db_includes)
AC_SUBST(int32_decl)
-AC_CHECK_TYPE(int32_t,,, DB_INCLUDES)
-if test "$ac_cv_type_int32_t" = no; then
- AM_SEARCH_SSIZES(int32_decl, int32_t, 4)
-fi
+AC_CHECK_TYPE(int32_t,,
+ [AM_SEARCH_SSIZES(int32_decl, int32_t, 4)], $db_includes)
# Check for ssize_t -- if none exists, find a signed integral type that's
# the same size as a size_t.
AC_SUBST(ssize_t_decl)
-AC_CHECK_TYPE(ssize_t,,, DB_INCLUDES)
-if test "$ac_cv_type_ssize_t" = no; then
- AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)
-fi
+AC_CHECK_TYPE(ssize_t,,
+ [AM_SEARCH_SSIZES(ssize_t_decl, ssize_t, $ac_cv_sizeof_size_t)],
+ $db_includes)
# Find the largest integral type.
AC_SUBST(db_align_t_decl)
-AC_CHECK_TYPE(unsigned long long,,, DB_INCLUDES)
-if test "$ac_cv_type_unsigned_long_long" = no; then
- db_align_t_decl="typedef unsigned long db_align_t;"
-else
- db_align_t_decl="typedef unsigned long long db_align_t;"
-fi
+AC_CHECK_TYPE(unsigned long long,
+ [db_align_t_decl="typedef unsigned long long db_align_t;"],
+ [db_align_t_decl="typedef unsigned long db_align_t;"], $db_includes)
# Find an integral type which is the same size as a pointer.
AC_SUBST(db_alignp_t_decl)
AM_SEARCH_USIZES(db_alignp_t_decl, db_alignp_t, $ac_cv_sizeof_char_p)
-
])
diff --git a/db/dist/aclocal_java/ac_check_class.ac b/db/dist/aclocal_java/ac_check_class.ac
index 51c4cd5c3..915198af5 100644
--- a/db/dist/aclocal_java/ac_check_class.ac
+++ b/db/dist/aclocal_java/ac_check_class.ac
@@ -15,7 +15,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_check_class.ac,v 1.1 2001/08/23 16:58:42 dda Exp
+dnl @version $Id: ac_check_class.ac,v 1.1 2001/08/23 16:58:42 dda Exp $
dnl
AC_DEFUN([AC_CHECK_CLASS],[
AC_REQUIRE([AC_PROG_JAVA])
diff --git a/db/dist/aclocal_java/ac_check_classpath.ac b/db/dist/aclocal_java/ac_check_classpath.ac
index 5c4f60c18..4a78d0f87 100644
--- a/db/dist/aclocal_java/ac_check_classpath.ac
+++ b/db/dist/aclocal_java/ac_check_classpath.ac
@@ -12,7 +12,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_check_classpath.ac,v 1.1 2001/08/23 16:58:42 dda Exp
+dnl @version $Id: ac_check_classpath.ac,v 1.1 2001/08/23 16:58:42 dda Exp $
dnl
AC_DEFUN([AC_CHECK_CLASSPATH],[
if test "x$CLASSPATH" = x; then
diff --git a/db/dist/aclocal_java/ac_check_junit.ac b/db/dist/aclocal_java/ac_check_junit.ac
index d004f6ff2..3b81d1dc3 100644
--- a/db/dist/aclocal_java/ac_check_junit.ac
+++ b/db/dist/aclocal_java/ac_check_junit.ac
@@ -30,7 +30,7 @@ dnl echo "exec @JUNIT@ my.package.name.AllJunitTests" >> $@
dnl chmod +x $@
dnl
dnl @author Luc Maisonobe
-dnl @version Id: ac_check_junit.ac,v 1.1 2001/08/23 16:58:43 dda Exp
+dnl @version $Id: ac_check_junit.ac,v 1.1 2001/08/23 16:58:43 dda Exp $
dnl
AC_DEFUN([AC_CHECK_JUNIT],[
AC_CACHE_VAL(ac_cv_prog_JUNIT,[
diff --git a/db/dist/aclocal_java/ac_check_rqrd_class.ac b/db/dist/aclocal_java/ac_check_rqrd_class.ac
index 579be366a..ab62e33c8 100644
--- a/db/dist/aclocal_java/ac_check_rqrd_class.ac
+++ b/db/dist/aclocal_java/ac_check_rqrd_class.ac
@@ -14,7 +14,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_check_rqrd_class.ac,v 1.1 2001/08/23 16:58:43 dda Exp
+dnl @version $Id: ac_check_rqrd_class.ac,v 1.1 2001/08/23 16:58:43 dda Exp $
dnl
AC_DEFUN([AC_CHECK_RQRD_CLASS],[
diff --git a/db/dist/aclocal_java/ac_java_options.ac b/db/dist/aclocal_java/ac_java_options.ac
index a86067bbf..567afca7f 100644
--- a/db/dist/aclocal_java/ac_java_options.ac
+++ b/db/dist/aclocal_java/ac_java_options.ac
@@ -12,7 +12,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Devin Weaver <ktohg@tritarget.com>
-dnl @version Id: ac_java_options.ac,v 1.1 2001/08/23 16:58:43 dda Exp
+dnl @version $Id: ac_java_options.ac,v 1.1 2001/08/23 16:58:43 dda Exp $
dnl
AC_DEFUN([AC_JAVA_OPTIONS],[
AC_ARG_WITH(java-prefix,
diff --git a/db/dist/aclocal_java/ac_jni_include_dirs.ac b/db/dist/aclocal_java/ac_jni_include_dirs.ac
index e01f78c77..b70d108d6 100644
--- a/db/dist/aclocal_java/ac_jni_include_dirs.ac
+++ b/db/dist/aclocal_java/ac_jni_include_dirs.ac
@@ -28,7 +28,7 @@ dnl Note: This macro can work with the autoconf M4 macros for Java programs.
dnl This particular macro is not part of the original set of macros.
dnl
dnl @author Don Anderson <dda@sleepycat.com>
-dnl @version Id: ac_jni_include_dirs.ac,v 1.8 2002/09/04 21:27:30 dda Exp
+dnl @version $Id: ac_jni_include_dirs.ac,v 1.12 2003/10/05 18:10:06 dda Exp $
dnl
AC_DEFUN(AC_JNI_INCLUDE_DIR,[
@@ -54,18 +54,19 @@ esac
# If we find jni.h in /usr/include, then it's not a java-only tree, so
# don't add /usr/include or subdirectories to the list of includes.
# An extra -I/usr/include can foul things up with newer gcc's.
-if test -f "$_JINC/jni.h"; then
+#
+# If we don't find jni.h, just keep going. Hopefully javac knows where
+# to find its include files, even if we can't.
+if test -r "$_JINC/jni.h"; then
if test "$_JINC" != "/usr/include"; then
JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
fi
else
_JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[[^/]]*$::'`
- if test -f "$_JTOPDIR/include/jni.h"; then
+ if test -r "$_JTOPDIR/include/jni.h"; then
if test "$_JTOPDIR" != "/usr"; then
JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
fi
- else
- AC_MSG_ERROR([cannot find java include files])
fi
fi
@@ -74,6 +75,8 @@ if test "$_JTOPDIR" != "/usr"; then
case "$host_os" in
aix*) _JNI_INC_SUBDIRS="aix";;
bsdi*) _JNI_INC_SUBDIRS="bsdos";;
+ freebsd*) _JNI_INC_SUBDIRS="freebsd";;
+ hp*) _JNI_INC_SUBDIRS="hp-ux";;
linux*) _JNI_INC_SUBDIRS="linux genunix";;
osf*) _JNI_INC_SUBDIRS="alpha";;
solaris*) _JNI_INC_SUBDIRS="solaris";;
@@ -109,4 +112,3 @@ while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
done
_ACJNI_FOLLOWED="$_cur"
])# _ACJNI
-
diff --git a/db/dist/aclocal_java/ac_prog_jar.ac b/db/dist/aclocal_java/ac_prog_jar.ac
index 3bd789517..9dfa1be6d 100644
--- a/db/dist/aclocal_java/ac_prog_jar.ac
+++ b/db/dist/aclocal_java/ac_prog_jar.ac
@@ -22,7 +22,7 @@ dnl The general documentation of those macros, as well as the sample
dnl configure.in, is included in the AC_PROG_JAVA macro.
dnl
dnl @author Egon Willighagen <egonw@sci.kun.nl>
-dnl @version Id: ac_prog_jar.ac,v 1.1 2001/08/23 16:58:43 dda Exp
+dnl @version $Id: ac_prog_jar.ac,v 1.1 2001/08/23 16:58:43 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAR],[
AC_REQUIRE([AC_EXEEXT])dnl
diff --git a/db/dist/aclocal_java/ac_prog_java.ac b/db/dist/aclocal_java/ac_prog_java.ac
index 906e212e1..67a879ffc 100644
--- a/db/dist/aclocal_java/ac_prog_java.ac
+++ b/db/dist/aclocal_java/ac_prog_java.ac
@@ -62,14 +62,16 @@ dnl
dnl AC_OUTPUT(Makefile)
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_prog_java.ac,v 1.1 2001/08/23 16:58:43 dda Exp
+dnl @version $Id: ac_prog_java.ac,v 1.2 2003/05/10 17:46:09 dda Exp $
+dnl
+dnl Note: Modified by dda@sleepycat.com to prefer java over kaffe. [#8059]
dnl
AC_DEFUN([AC_PROG_JAVA],[
AC_REQUIRE([AC_EXEEXT])dnl
if test x$JAVAPREFIX = x; then
- test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe$EXEEXT java$EXEEXT)
+ test x$JAVA = x && AC_CHECK_PROGS(JAVA, java$EXEEXT kaffe$EXEEXT)
else
- test x$JAVA = x && AC_CHECK_PROGS(JAVA, kaffe$EXEEXT java$EXEEXT, $JAVAPREFIX)
+ test x$JAVA = x && AC_CHECK_PROGS(JAVA, java$EXEEXT kaffe$EXEEXT, $JAVAPREFIX)
fi
test x$JAVA = x && AC_MSG_ERROR([no acceptable Java virtual machine found in \$PATH])
AC_PROG_JAVA_WORKS
diff --git a/db/dist/aclocal_java/ac_prog_java_works.ac b/db/dist/aclocal_java/ac_prog_java_works.ac
index 23357470d..36acd2676 100644
--- a/db/dist/aclocal_java/ac_prog_java_works.ac
+++ b/db/dist/aclocal_java/ac_prog_java_works.ac
@@ -11,7 +11,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_prog_java_works.ac,v 1.1 2001/08/23 16:58:44 dda Exp
+dnl @version $Id: ac_prog_java_works.ac,v 1.1 2001/08/23 16:58:44 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAVA_WORKS], [
AC_CHECK_PROG(uudecode, uudecode$EXEEXT, yes)
diff --git a/db/dist/aclocal_java/ac_prog_javac.ac b/db/dist/aclocal_java/ac_prog_javac.ac
index 98f3eece7..5ded7d1b7 100644
--- a/db/dist/aclocal_java/ac_prog_javac.ac
+++ b/db/dist/aclocal_java/ac_prog_javac.ac
@@ -28,7 +28,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_prog_javac.ac,v 1.3 2001/08/23 17:08:22 dda Exp
+dnl @version $Id: ac_prog_javac.ac,v 1.3 2001/08/23 17:08:22 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAVAC],[
AC_REQUIRE([AC_EXEEXT])dnl
diff --git a/db/dist/aclocal_java/ac_prog_javac_works.ac b/db/dist/aclocal_java/ac_prog_javac_works.ac
index c83465713..139a99f98 100644
--- a/db/dist/aclocal_java/ac_prog_javac_works.ac
+++ b/db/dist/aclocal_java/ac_prog_javac_works.ac
@@ -11,7 +11,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Stephane Bortzmeyer <bortzmeyer@pasteur.fr>
-dnl @version Id: ac_prog_javac_works.ac,v 1.1 2001/08/23 16:58:44 dda Exp
+dnl @version $Id: ac_prog_javac_works.ac,v 1.1 2001/08/23 16:58:44 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAVAC_WORKS],[
AC_CACHE_CHECK([if $JAVAC works], ac_cv_prog_javac_works, [
diff --git a/db/dist/aclocal_java/ac_prog_javadoc.ac b/db/dist/aclocal_java/ac_prog_javadoc.ac
index 5ce42ade9..5154d3f1f 100644
--- a/db/dist/aclocal_java/ac_prog_javadoc.ac
+++ b/db/dist/aclocal_java/ac_prog_javadoc.ac
@@ -22,7 +22,7 @@ dnl The general documentation of those macros, as well as the sample
dnl configure.in, is included in the AC_PROG_JAVA macro.
dnl
dnl @author Egon Willighagen <egonw@sci.kun.nl>
-dnl @version Id: ac_prog_javadoc.ac,v 1.1 2001/08/23 16:58:44 dda Exp
+dnl @version $Id: ac_prog_javadoc.ac,v 1.1 2001/08/23 16:58:44 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAVADOC],[
AC_REQUIRE([AC_EXEEXT])dnl
diff --git a/db/dist/aclocal_java/ac_prog_javah.ac b/db/dist/aclocal_java/ac_prog_javah.ac
index 9be2c57bd..1b16d9e24 100644
--- a/db/dist/aclocal_java/ac_prog_javah.ac
+++ b/db/dist/aclocal_java/ac_prog_javah.ac
@@ -5,7 +5,7 @@ dnl and looks for the jni.h header file. If available, JAVAH is set to
dnl the full path of javah and CPPFLAGS is updated accordingly.
dnl
dnl @author Luc Maisonobe
-dnl @version Id: ac_prog_javah.ac,v 1.1 2001/08/23 16:58:44 dda Exp
+dnl @version $Id: ac_prog_javah.ac,v 1.1 2001/08/23 16:58:44 dda Exp $
dnl
AC_DEFUN([AC_PROG_JAVAH],[
AC_REQUIRE([AC_CANONICAL_SYSTEM])dnl
diff --git a/db/dist/aclocal_java/ac_try_compile_java.ac b/db/dist/aclocal_java/ac_try_compile_java.ac
index 6d9031333..775569ba0 100644
--- a/db/dist/aclocal_java/ac_try_compile_java.ac
+++ b/db/dist/aclocal_java/ac_try_compile_java.ac
@@ -14,7 +14,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Devin Weaver <ktohg@tritarget.com>
-dnl @version Id: ac_try_compile_java.ac,v 1.1 2001/08/23 16:58:44 dda Exp
+dnl @version $Id: ac_try_compile_java.ac,v 1.1 2001/08/23 16:58:44 dda Exp $
dnl
AC_DEFUN([AC_TRY_COMPILE_JAVA],[
AC_REQUIRE([AC_PROG_JAVAC])dnl
diff --git a/db/dist/aclocal_java/ac_try_run_javac.ac b/db/dist/aclocal_java/ac_try_run_javac.ac
index de9bb37d6..cf91306af 100644
--- a/db/dist/aclocal_java/ac_try_run_javac.ac
+++ b/db/dist/aclocal_java/ac_try_run_javac.ac
@@ -14,7 +14,7 @@ dnl The general documentation, as well as the sample configure.in, is
dnl included in the AC_PROG_JAVA macro.
dnl
dnl @author Devin Weaver <ktohg@tritarget.com>
-dnl @version Id: ac_try_run_javac.ac,v 1.1 2001/08/23 16:58:45 dda Exp
+dnl @version $Id: ac_try_run_javac.ac,v 1.1 2001/08/23 16:58:45 dda Exp $
dnl
AC_DEFUN([AC_TRY_RUN_JAVA],[
AC_REQUIRE([AC_PROG_JAVAC])dnl
diff --git a/db/dist/buildrel b/db/dist/buildrel
index 9b7ef87db..9187cc711 100644
--- a/db/dist/buildrel
+++ b/db/dist/buildrel
@@ -1,7 +1,6 @@
-#!/bin/sh -
-# Id: buildrel,v 1.39 2002/09/06 14:30:31 bostic Exp
+# $Id: buildrel,v 1.57 2003/11/28 19:21:02 bostic Exp $
#
-# Build the distribution archives.
+# Build the distribution package.
#
# A set of commands intended to be cut and pasted into a csh window.
@@ -10,23 +9,40 @@ setenv D `pwd`
# Update the release number.
cd $D/dist
+cvs -q update RELEASE
vi RELEASE
-setenv VERSION \
-`sh -c '. RELEASE; echo $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH'`
+setenv VERSION `sh -c '. RELEASE; echo $DB_VERSION'`
echo "Version: $VERSION"
-# Make sure the source tree is up-to-date, generate new support files, and
-# commit anything that's changed.
+# Make sure the source tree is up-to-date
cd $D && cvs -q update
+
+# Build the documentation.
+cd db.docs && cvs -q update
+cd db.docs && sh build ../db.rel clean && sh build ../db.rel |& sed '/.html$/d'
+cd db.docs && sh build ../db.rel javadoc
+
+# Generate new support files, commit anything that's changed.
cd $D/dist && sh s_all
cd $D && cvs -q commit
# Copy a development tree into a release tree.
setenv R /var/tmp/db-$VERSION
rm -rf $R && mkdir -p $R
-cd $D && tar cf - \
-`cvs -q status | sed -n -e "/Repository/s;.*/CVSROOT/db/;;" -e "s/,v//p"` | \
-(cd $R && tar xpf -)
+cd $D && cvs -q status | \
+ grep "Repository revision" | \
+ sed -e 's;.*CVSROOT/db/;;' \
+ -e 's;.*CVSROOT/;;' \
+ -e 's;,v$;;' | pax -rw $R/
+
+# Copy the already-built documentation into place
+rm -rf $R/docs && cp -r $D/docs $R/docs
+
+# Remove source directories we don't distribute.
+cd $R && rm -rf docs_src docs/api_java
+cd $R && rm -rf test/TODO test/upgrade test_perf test_purify
+cd $R && rm -rf test_server test_thread test_vxworks test_xa
+cd $R && rm -rf java/src/com/sleepycat/xa
# Fix symbolic links and permissions.
cd $R/dist && sh s_perm
@@ -39,33 +55,25 @@ cd $R/build_run && ~bostic/bin/dbconf && make >& mklog
# Smoke test.
cd $R/build_run && ./ex_access
-# Build the documentation.
-cd $R/docs_src && sh build clean
-cd $R/docs_src && sh build |& sed '/.html$/d'
-
# Check the install
cd $R/build_run && make prefix=`pwd`/BDB install
-# Clean up the tree.
-cd $R && rm -rf build_run docs_src
-cd $R && rm -rf test/TODO test/upgrade test_perf test_purify
-cd $R && rm -rf test_server test_thread test_vxworks test_xa
+# Build a small-footprint version.
+cd $R && rm -rf build_run && mkdir build_run
+cd $R/build_run && ../dist/configure --enable-smallbuild && make >& mklog
+
+# Remove the build directory
+cd $R && rm -rf build_run
# ACQUIRE ROOT PRIVILEGES
cd $R && find . -type d | xargs chmod 775
cd $R && find . -type f | xargs chmod 444
cd $R && chmod 664 build_win32/*.dsp
cd $R/dist && sh s_perm
-chown -R 100.100 $R
+chown -R 100 $R
+chgrp -R 100 $R
# DISCARD ROOT PRIVILEGES
-# Compare this release with the last one.
-set LR=3.1.X
-cd $R/.. && gzcat /a/releases/db-${LR}.tar.gz | tar xf -
-cd $R/../db-${LR} && find . | sort > /tmp/__OLD
-cd $R && find . | sort > /tmp/__NEW
-diff -c /tmp/__OLD /tmp/__NEW
-
# Create the crypto tar archive release.
setenv T "$R/../db-$VERSION.tar.gz"
cd $R/.. && tar cf - db-$VERSION | gzip --best > $T
@@ -83,7 +91,8 @@ cd $RNC && find . -type d | xargs chmod 775
cd $RNC && find . -type f | xargs chmod 444
cd $RNC && chmod 664 build_win32/*.dsp
cd $RNC/dist && sh s_perm
-chown -R 100.100 $RNC
+chown -R 100 $RNC
+chgrp -R 100 $RNC
# DISCARD ROOT PRIVILEGES
# Create the non-crypto tar archive release.
@@ -91,11 +100,11 @@ setenv T "$R/../db-$VERSION.NC.tar.gz"
cd $RNC/.. && tar cf - db-$VERSION.NC | gzip --best > $T
chmod 444 $T
-# Remove symbolic links to tags files. They're large and we don't want
-# to store real symbolic links in the zip archive for portability reasons.
+# Remove tags files. They're large and we don't want to store symbolic links
+# in the zip archive for portability reasons.
# ACQUIRE ROOT PRIVILEGES
-cd $R && rm -f `find . -type l -name 'tags'`
-cd $RNC && rm -f `find . -type l -name 'tags'`
+cd $R && rm -f `find . -name 'tags'`
+cd $RNC && rm -f `find . -name 'tags'`
# DISCARD ROOT PRIVILEGES
# Create the crypto zip archive release.
diff --git a/db/dist/camel.pm b/db/dist/camel.pm
new file mode 100644
index 000000000..b525f32f1
--- /dev/null
+++ b/db/dist/camel.pm
@@ -0,0 +1,202 @@
+package camel;
+@camel::EXPORT_OK = qw(under2camel camel2under);
+
+%under2camel = (
+ "abort" => "abort",
+ "app_dispatch" => "appDispatch",
+ "set_app_dispatch" => "setAppDispatch",
+ "set_append_recno" => "setAppendRecno",
+ "associate" => "associate",
+ "bt_compare" => "compare",
+ "set_bt_compare" => "setBtreeCompare",
+ "get_bt_minkey" => "getBtreeMinKey",
+ "set_bt_minkey" => "setBtreeMinKey",
+ "set_bt_prefix" => "setBtreePrefix",
+ "bt_prefix" => "prefix",
+ "get_byteswapped" => "isByteSwapped",
+ "get_cachesize" => "getCacheSize",
+ "set_cachesize" => "setCacheSize",
+ "get_cachesize_bytes" => "getCacheSizeBytes",
+ "get_cachesize_ncache" => "getCacheSizeNcache",
+ "get_clear_len" => "getClearLength",
+ "set_clear_len" => "setClearLength",
+ "close" => "close",
+ "commit" => "commit",
+ "cursor" => "cursor",
+ "set_data" => "setData",
+ "get_data" => "getData",
+ "set_data_dir" => "setDataDir",
+ "get_data_dirs" => "getDataDirs",
+ "db_append_recno" => "dbAppendRecno",
+ "get_errno" => "getErrno",
+ "get_filename" => "getFileName",
+ "get_dbname" => "getDatabaseName",
+ "dbremove" => "dbRemove",
+ "dbrename" => "dbRename",
+ "get_dbt" => "getDbt",
+ "del" => "delete",
+ "discard" => "discard",
+ "get_dlen" => "getPartialLength",
+ "set_dlen" => "setPartialLength",
+ "get_doff" => "getPartialOffset",
+ "set_doff" => "setPartialOffset",
+ "dup_compare" => "compareDuplicates",
+ "set_dup_compare" => "setDuplicateCompare",
+ "set_encrypt" => "setEncrypted",
+ "get_encrypt_flags" => "getEncryptFlags",
+ "get_env" => "getDbEnv",
+ "get_errfile" => "getErrorFile",
+ "set_errfile" => "setErrorFile",
+ "set_error_stream" => "setErrorStream",
+ "get_errpfx" => "getErrorPrefix",
+ "set_errpfx" => "setErrorPrefix",
+ "errx" => "errx",
+ "get_file" => "getFile",
+ "get_flags" => "getFlags",
+ "set_flags" => "setFlags",
+ "get" => "get",
+ "get_h_ffactor" => "getHashFillFactor",
+ "set_h_ffactor" => "setHashFillFactor",
+ "set_h_hash" => "setHash",
+ "get_h_nelem" => "getHashNumElements",
+ "set_h_nelem" => "setHashNumElements",
+ "get_home" => "getDbEnvHome",
+ "id" => "id",
+ "get_index" => "getIndex",
+ "join" => "join",
+ "key_range" => "keyRange",
+ "get_lg_bsize" => "getLogBufferSize",
+ "set_lg_bsize" => "setLogBufferSize",
+ "get_lg_dir" => "getLogDir",
+ "set_lg_dir" => "setLogDir",
+ "get_lg_max" => "getLogMax",
+ "set_lg_max" => "setLogMax",
+ "get_lg_regionmax" => "getLogRegionMax",
+ "set_lg_regionmax" => "setLogRegionMax",
+ "get_lk_conflicts" => "getLockConflicts",
+ "set_lk_conflicts" => "setLockConflicts",
+ "get_lk_detect" => "getLockDetect",
+ "set_lk_detect" => "setLockDetect",
+ "set_lk_max" => "setLockMax",
+ "get_lk_max_lockers" => "getLockMaxLockers",
+ "set_lk_max_lockers" => "setLockMaxLockers",
+ "get_lk_max_locks" => "getLockMaxLocks",
+ "set_lk_max_locks" => "setLockMaxLocks",
+ "get_lk_max_objects" => "getLockMaxObjects",
+ "set_lk_max_objects" => "setLockMaxObjects",
+ "lock_detect" => "lockDetect",
+ "lock_get" => "lockGet",
+ "lock_id" => "lockId",
+ "lock_id_free" => "lockIdFree",
+ "lock_put" => "lockPut",
+ "lock_stat" => "lockStat",
+ "lock_vec" => "lockVector",
+ "log_archive" => "logArchive",
+ "log_compare" => "logCompare",
+ "log_cursor" => "logCursor",
+ "log_file" => "logFile",
+ "log_flush" => "logFlush",
+ "log_put" => "logPut",
+ "log_stat" => "logStat",
+ "get_lock" => "getLock",
+ "get_lorder" => "getByteOrder",
+ "set_lorder" => "setByteOrder",
+ "get_lsn_offset" => "getLsnOffset",
+ "set_lsn_offset" => "setLsnOffset",
+ "get_maxsize" => "getMaxsize",
+ "set_maxsize" => "setMaxsize",
+ "memp_fstat" => "memoryPoolFileStat",
+ "memp_stat" => "memoryPoolStat",
+ "memp_sync" => "memoryPoolSync",
+ "memp_trickle" => "memoryPoolTrickle",
+ "get_mode" => "getMode",
+ "set_mode" => "setMode",
+ "set_mp_mmapsize" => "setMemoryPoolMapSize",
+ "get_mp_mmapsize" => "getMemoryPoolMapSize",
+ "get_obj" => "getObj",
+ "set_obj" => "setObj",
+ "get_object" => "getObject",
+ "set_object" => "setObject",
+ "get_offset" => "getOffset",
+ "set_offset" => "setOffset",
+ "get_op" => "getOp",
+ "set_op" => "setOp",
+ "open" => "open",
+ "get_open_flags" => "getOpenFlags",
+ "get_pagesize" => "getPageSize",
+ "set_pagesize" => "setPageSize",
+ "set_paniccall" => "setPanic",
+ "prepare" => "prepare",
+ "get_priority" => "getPriority",
+ "set_priority" => "setPriority",
+ "put" => "put",
+ "get_q_extentsize" => "getQueueExtentSize",
+ "set_q_extentsize" => "setQueueExtentSize",
+ "get_recno_key_data" => "getRecordNumber",
+ "set_recno_key_data" => "setRecordNumber",
+ "get_re_delim" => "getRecordDelimiter",
+ "set_re_delim" => "setRecordDelimiter",
+ "get_re_len" => "getRecordLength",
+ "set_re_len" => "setRecordLength",
+ "get_re_pad" => "getRecordPad",
+ "set_re_pad" => "setRecordPad",
+ "get_re_source" => "getRecordSource",
+ "set_re_source" => "setRecordSource",
+ "remove" => "remove",
+ "rename" => "rename",
+ "rep_elect" => "replicationElect",
+ "get_rep_limit" => "getReplicationLimit",
+ "set_rep_limit" => "setReplicationLimit",
+ "get_rep_limit_bytes" => "getReplicationLimit",
+ "get_rep_limit_gbytes" => "getReplicationLimit",
+ "rep_process_message" => "replicationProcessMessage",
+ "set_rep_request" => "setReplicationRequest",
+ "rep_start" => "replicationStart",
+ "rep_stat" => "replicationStat",
+ "set_rep_transport" => "setReplicationTransport",
+ "set_rpc_server" => "setRpcServer",
+ "set" => "set",
+ "get_shm_key" => "getSegmentId",
+ "set_shm_key" => "setSegmentId",
+ "set_size" => "setSize",
+ "get_size" => "getSize",
+ "sync" => "sync",
+ "get_tas_spins" => "getTestAndSetSpins",
+ "set_tas_spins" => "setTestAndSetSpins",
+ "get_timeout" => "getTimeout",
+ "set_timeout" => "setTimeout",
+ "get_tmp_dir" => "getTmpDir",
+ "set_tmp_dir" => "setTmpDir",
+ "get_transactional" => "isTransactional",
+ "truncate" => "truncate",
+ "get_tx_max" => "getTxnMax",
+ "set_tx_max" => "setTxnMax",
+ "get_tx_timestamp" => "getTxnTimestamp",
+ "secondary_key_create" => "secondaryKeyCreate",
+ "set_tx_timestamp" => "setTxnTimestamp",
+ "txn_begin" => "txnBegin",
+ "txn_checkpoint" => "txnCheckpoint",
+ "txn_recover" => "txnRecover",
+ "txn_stat" => "txnStat",
+ "get_type" => "getDbType",
+ "get_ulen" => "getUserBufferLength",
+ "set_ulen" => "setUserBufferLength",
+ "update_dbt" => "updateDbt",
+ "upgrade" => "upgrade",
+ "get_verbose" => "getVerbose",
+ "set_verbose" => "setVerbose",
+ "verify" => "verify",
+ "get_version_major" => "getVersionMajor",
+ "get_version_minor" => "getVersionMinor",
+ "get_version_patch" => "getVersionPatch",
+ "get_version_string" => "getVersionString",
+);
+
+%camel2under = reverse %under2camel;
+
+%refactored = (
+ "pget" => "get",
+ "getReplicationLimitGigabytes" => "getReplicationLimit",
+);
+
+1;
diff --git a/db/dist/camelize.pl b/db/dist/camelize.pl
new file mode 100644
index 000000000..541ba22fb
--- /dev/null
+++ b/db/dist/camelize.pl
@@ -0,0 +1,324 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use lib '.';
+use camel;
+
+my @lines = ();
+my %deprecated = ();
+
+sub adjust {
+ my ($i, $n, %h) = @_;
+
+ foreach my $k (keys %h) {
+ my @vals = split(/,/, $h{$k});
+ my $nvals = "";
+ foreach my $v (@vals) {
+ if ($v > $i) {
+ $v += $n;
+ }
+ $nvals .= "$v";
+ }
+ $h{$k} = $nvals;
+ }
+
+ return %h;
+}
+
+# Return a line containing the entire signature of the method.
+# This signature may have been spread across many lines, this
+# function will gobble up those lines and shrink the @lines
+# @ array as required.
+sub method_decl {
+ my ($i, $is_interface) = @_;
+ my @newline = ("");
+ my $balanced = 0;
+ my $count = 0;
+
+ chomp($lines[$i]);
+ @newline = ("$lines[$i]");
+
+ while (($balanced == 0) && ($lines[$i] =~ /{/ eq "") && (!$is_interface)) {
+ my ($op) = split(/{/, $lines[$i]); $op =~ s/[^(]//g;
+ my ($cp) = split(/{/, $lines[$i]); $cp =~ s/[^)]//g;
+ $balanced = 1 if (length($op) == length($cp));
+ chomp($lines[$i + 1]);
+ @newline = ("$newline[0]$lines[$i + 1]");
+ splice(@lines, $i, 2, @newline);
+ $count += 1; # for every line we take out, we must put one back
+ }
+ $lines[$i] = "$lines[$i]\n";
+ while ($count--) { splice(@lines, ($i + 1), 0, ("\n")); }
+ return $lines[$i];
+}
+
+# Return the name of the method.
+sub method_name {
+ my ($line) = @_;
+ my $methodname = "";
+
+ ($line) = split(/{/, $line);
+ if (defined($line)) {
+ ($methodname) = reverse(split(/ /, (split(/\(/, $line))[0]));
+ chomp($methodname);
+ }
+ return $methodname;
+}
+
+# Process lines within $classname, return a hash. Keys are method
+# names, values are comma delimited line numbers where they occur.
+sub public_methods_from {
+ my ($i, $classname, $type) = @_;
+ my %results;
+ my $bc = 1;
+ my $bl = "";
+ my $dep = 0;
+
+ while ($bc > 0 && $i <= $#lines) {
+ my $line = $lines[$i];
+ if ($line =~ /\@deprecated/) { $dep = 1; }
+ # look only for public method declarations
+ if ($line =~ /^\s*public/ && $line =~ /\(/) {
+ $line = method_decl($i, ($type eq "interface" ? 1 : 0));
+ my $methodname = method_name($line);
+ if ($methodname ne $classname) {
+ if (! defined($results{$methodname})) {
+ $results{$methodname} = "$i";
+ } else {
+ $results{$methodname} = "$results{$methodname},$i";
+ }
+ if ($dep == 1) {
+ $deprecated{$methodname} = $line;
+ $dep = 0;
+ }
+ }
+ }
+ # XXX this assumes that there are no unbalanced braces in comments
+ $bl = $lines[$i]; $bl =~ s/[^{]//g; $bc += length($bl);
+ $bl = $lines[$i]; $bl =~ s/[^}]//g; $bc -= length($bl);
+ $i++;
+ }
+ foreach my $key (keys %deprecated) {
+ $deprecated{$key} = method_type_sig($deprecated{$key});
+# print "key: $key\t$deprecated{$key}\n";
+ }
+ return %results;
+}
+
+##
+sub method_type_sig {
+ my ($line) = @_;
+ my $typesig = "";
+
+ my ($sig, $tail) = split(/{/, $line);
+ $typesig = $sig; $typesig =~ s/.*public ([^ \t]+).*/$1/;
+ $typesig = "$typesig|";
+ (my $argument) = $sig =~ /\(([^)]+)\)/;
+ if (defined $argument) {
+ my @arguments = split(/,/, $argument);
+ foreach my $ma (@arguments) {
+ $ma =~ /\s*(\S+)\s+(\S+)/;
+ $typesig .= "$1#";
+ }
+ }
+ return $typesig;
+}
+
+
+##
+sub deprecate_method {
+ my ($signature_line, $is_interface) = @_;
+
+ my ($sig, $tail) = split(/{/, $signature_line);
+ my $method = method_name($sig);
+ my $new_method = $camel::under2camel{$method};
+ my @arg_names = (); my @arg_types = (); my @arguments = ();
+
+ (my $argument) = $sig =~ /\(([^)]+)\)/;
+ if (defined $argument) {
+ @arguments = split(/,/, $argument);
+ foreach my $ma (@arguments) {
+ $ma =~ /\s*(\S+)\s+(\S+)/;
+ @arg_types = (@arg_types, $1);
+ @arg_names = (@arg_names, $2);
+ }
+ }
+ # When it comes to interfaces, only the new method will be invoked
+ # by our code, so leaving the old signature around will confuse
+ # programmers. Worse yet, by leaving around the old signature the
+ # javac compiler will insist that the method be defined or that the
+ # class be declared abstract, a bug either way you look at it on
+ # our part. The only thing to do is leave it out and go with
+ # the new signature only.
+ my $result = "";
+ if (! $is_interface) {
+ $result .= "\t/**\n";
+ $result .= "\t *\@deprecated As of Berkeley DB 4.2, replaced by ";
+ $result .= "{\@link #$new_method(";
+ $result .= join(",", @arg_types);
+ $result .= ")}\n";
+ $result .= "\t */\n";
+ $result .= "\t$sig";
+ $result .= "{\n" unless $is_interface;
+ if ($signature_line =~ /public void/) {
+ $result .= "\t\t";
+ } else {
+ $result .= "\t\treturn ";
+ }
+ $result .= "$new_method(";
+ $result .= join(", ", @arg_names);
+ $result .= ");\n";
+ $result .= "\t}\n\n";
+ }
+ $result .= "\n";
+ my $new_sig = $sig;
+ $new_sig =~ s/$method\(/$new_method\(/;
+ $result .= "$new_sig";
+ $result .= "{" if ($signature_line =~ /{/);
+ $result .= $tail if (defined $tail);
+ return $result;
+}
+
+sub usage {
+ print "camelize.pl [-d] [-m] [-c] <.java files>\n";
+ print " -d --deprecation\n";
+ print " -m --methodcalls\n";
+ print " -c --comments\n";
+ print " -h \n";
+ print "\n";
+ print "Update various aspects of Java files according to\n";
+ print "the mapping information provided by ./camel.pm file.\n";
+}
+
+##
+## MAIN
+
+my %public_methods;
+my $do_deprecation = 0;
+my $do_methodcalls = 0;
+my $do_comments = 0;
+my @files = ();
+
+foreach my $arg (@ARGV) {
+ if ($arg eq "-d" || $arg eq "--deprecation") {
+ $do_deprecation = 1;
+ } elsif ($arg eq "-m" || $arg eq "--methodcalls") {
+ $do_methodcalls = 1;
+ } elsif ($arg eq "-c" || $arg eq "--comments") {
+ $do_comments = 1;
+ } elsif ($arg eq "-h" || $arg eq "--help" || $arg eq "-?") {
+ usage();
+ exit 0;
+ } else {
+ push(@files, $arg);
+ }
+}
+
+if ($do_deprecation + $do_methodcalls + $do_comments == 0) {
+ usage();
+ exit 0;
+}
+
+foreach my $file (@files) {
+ open(IN, $file) or die;
+
+ # Read entire file into this array.
+ @lines = <IN>;
+
+ my $i = 0;
+
+ # SWIG puts some garbage comments into the code,
+ # take them out.
+ while (my $line = $lines[$i]) {
+ $line =~ s!/\* no exception \*/!!;
+ $line =~ s!/\*u_int32_t\*/!!;
+ $line =~ s!/\* package \*/!!;
+ $lines[$i] = $line;
+ $i++;
+ }
+
+ # Deprecate all older API methods and add new methods in their place.
+ if ($do_deprecation == 1) {
+ $i = 0;
+ while (my $line = $lines[$i]) {
+ if ($line =~ /^\s*public( final)? (class|interface) (\w*)/) {
+ %public_methods = public_methods_from($i, $3, $2);
+ my $is_interface = ("$2" eq "interface") ? 1 : 0;
+ foreach my $key (keys %public_methods) {
+ # if this is a method that needs to be translated and
+ # its translation is not the same name, proceed...
+ if (defined($camel::under2camel{$key}) &&
+ ($key ne $camel::under2camel{$key})) {
+ # each method name may appear more than once
+ foreach my $mloc (split(/,/, $public_methods{$key})) {
+ # make sure that a method with the translated name
+ # and signature of this one doesn't already exist
+ my $tm = method_type_sig($lines[$mloc]);
+ if ((! (defined $deprecated{$key})) ||
+ ($deprecated{$key} ne $tm)) {
+ my $dep = deprecate_method($lines[$mloc],
+ $is_interface);
+ splice(@lines, $mloc, 1, ($dep));
+ }
+ }
+ }
+ }
+ }
+ $i++;
+ }}
+
+ # Look for usage of old API, convert to new API.
+ if ($do_methodcalls == 1) {
+ $i = 0;
+ while (my $line = $lines[$i]) {
+ foreach my $key (keys %camel::under2camel) {
+ if ( ($line =~ /$key\(/) &&
+ !($line =~ /public/)) { # make sure not to rename the
+ # method decl lines as they may
+ # may be the deprecated cover method
+ $line =~ s/$key\(/$camel::under2camel{$key}\(/g;
+ $lines[$i] = $line;
+ }
+ }
+ $i++;
+ }}
+
+ # Look for comments referencing old API, convert to new API.
+ if ($do_comments == 1) {
+ $i = 0;
+ my $in_comment = 0; my $comment = ""; my $rest = "";
+ while (my $line = $lines[$i]) {
+ if ($in_comment == 0) {
+ ($rest, $comment) = split(/\/\*/, $line);
+ if (defined $comment) {
+ $in_comment = 1;
+ $i--;
+ }
+ } else {
+ # NOTE: if I were really picky I would just modify the
+ # comment portion and rebuild the line from that for the
+ # cases where a line opens with code then a '/*' comment.
+ ($comment, $rest) = split(/\*\//, $line);
+ foreach my $key (keys %camel::under2camel) {
+ if ($line =~ /[^a-zA-Z]$key([^a-zA-Z]|\n)/) {
+ $line =~ s/$key/$camel::under2camel{$key}/g;
+ $lines[$i] = $line;
+ }
+ }
+ if (defined $rest) {
+ $in_comment = 0;
+ }
+ }
+ if ($line =~ /\/\//) {
+ ($rest, $comment) = split(/\/\//, $line);
+ foreach my $key (keys %camel::under2camel) {
+ $comment =~ s/\(\w\)$key\(\w\)/$1$camel::under2camel{$key}$2/g;
+ }
+ $lines[$i] = "$rest//$comment";
+ }
+ $i++;
+ }}
+
+ print @lines;
+}
diff --git a/db/dist/config.guess b/db/dist/config.guess
index 08e8a750a..d56c46d84 100755
--- a/db/dist/config.guess
+++ b/db/dist/config.guess
@@ -1,9 +1,9 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
-# Free Software Foundation, Inc.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-version='2000-09-05'
+timestamp='2003-08-18'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -24,38 +24,50 @@ version='2000-09-05'
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@gnu.org>.
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
+# don't specify an explicit build system type.
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
Usage: $0 [OPTION]
-Output the configuration name of this system.
+Output the configuration name of the system \`$me' is run on.
Operation modes:
- -h, --help print this help, then exit
- -V, --version print version number, then exit"
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
- case "$1" in
- --version | --vers* | -V )
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
echo "$version" ; exit 0 ;;
--help | --h* | -h )
echo "$usage"; exit 0 ;;
@@ -64,9 +76,7 @@ while test $# -gt 0 ; do
- ) # Use stdin as input.
break ;;
-* )
- exec >&2
- echo "$me: invalid option $1"
- echo "$help"
+ echo "$me: invalid option $1$help" >&2
exit 1 ;;
* )
break ;;
@@ -78,133 +88,204 @@ if test $# != 0; then
exit 1
fi
-# Use $HOST_CC if defined. $CC may point to a cross-compiler
-if test x"$CC_FOR_BUILD" = x; then
- if test x"$HOST_CC" != x; then
- CC_FOR_BUILD="$HOST_CC"
- else
- if test x"$CC" != x; then
- CC_FOR_BUILD="$CC"
- else
- CC_FOR_BUILD=cc
- fi
- fi
-fi
+trap 'exit 1' 1 2 15
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
+# (ghazi@noc.rutgers.edu 1994-08-24)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
-
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
*:NetBSD:*:*)
- # Netbsd (nbsd) targets should (where applicable) match one or
+ # NetBSD (nbsd) targets should (where applicable) match one or
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
# switched to ELF, *-*-netbsd* would select the old
# object file format. This provides both forward
# compatibility and a consistent mechanism for selecting the
# object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
esac
- # The Operating System including object format.
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
# The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
echo "${machine}-${os}${release}"
exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mipseb-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
alpha:OSF1:*:*)
if test $UNAME_RELEASE = "V4.0"; then
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
fi
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
exit 0 ;;
+ Alpha*:OpenVMS:*:*)
+ echo alpha-hp-vms
+ exit 0 ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
@@ -217,29 +298,11 @@ EOF
Amiga*:UNIX_System_V:4.0:*)
echo m68k-unknown-sysv4
exit 0;;
- amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
*:[Aa]miga[Oo][Ss]:*:*)
echo ${UNAME_MACHINE}-unknown-amigaos
exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
exit 0 ;;
*:OS/390:*:*)
echo i370-ibm-openedition
@@ -247,7 +310,7 @@ EOF
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
- SR2?01:HI-UX/MPP:*:*)
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@@ -261,6 +324,13 @@ EOF
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit 0 ;;
+ DRS?6000:UNIX_SV:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7 && exit 0 ;;
+ esac ;;
sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
@@ -289,7 +359,7 @@ EOF
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
case "`/bin/arch`" in
sun3)
@@ -303,9 +373,6 @@ EOF
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
- atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -332,18 +399,6 @@ EOF
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
@@ -360,6 +415,7 @@ EOF
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -381,12 +437,20 @@ EOF
exit (-1);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ $CC_FOR_BUILD -o $dummy $dummy.c \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && exit 0
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
@@ -434,11 +498,20 @@ EOF
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i?86:AIX:*:*)
+ i*86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
@@ -450,8 +523,7 @@ EOF
exit(0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
@@ -459,9 +531,9 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
- *:AIX:*:4)
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
@@ -469,7 +541,7 @@ EOF
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV=4.${UNAME_RELEASE}
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
@@ -495,11 +567,28 @@ EOF
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- sed 's/^ //' << EOF >$dummy.c
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
#define _HPUX_SOURCE
#include <stdlib.h>
@@ -532,13 +621,29 @@ EOF
exit (0);
}
EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- rm -f $dummy.c $dummy
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ # avoid double evaluation of $set_cc_for_build
+ test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
3050*:HI-UX:*:*)
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
@@ -564,8 +669,7 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
@@ -574,7 +678,7 @@ EOF
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
- *9??*:MPE/iX:*:*)
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
@@ -583,7 +687,7 @@ EOF
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit 0 ;;
- i?86:OSF1:*:*)
+ i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
@@ -593,9 +697,6 @@ EOF
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
- hppa*:OpenBSD:*:*)
- echo hppa-unknown-openbsd
- exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
@@ -614,41 +715,34 @@ EOF
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE}
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*T3E:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- F300:UNIX_System_V:*:*)
+ *:UNICOS/mp:*:*)
+ echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
- F301:UNIX_System_V:*:*)
- echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
@@ -657,11 +751,22 @@ EOF
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:OpenBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
+ # Determine whether the default compiler uses glibc.
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #if __GLIBC__ >= 2
+ LIBC=gnu
+ #else
+ LIBC=
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ # GNU/FreeBSD systems have a "k" prefix to indicate we are using
+ # FreeBSD's kernel, but not the complete OS.
+ case ${LIBC} in gnu) kernel_only='k' ;; esac
+ echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
exit 0 ;;
i*:CYGWIN*:*)
echo ${UNAME_MACHINE}-pc-cygwin
@@ -672,11 +777,17 @@ EOF
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit 0 ;;
+ x86:Interix*:[34]*)
+ echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+ exit 0 ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
+ echo i586-pc-interix
exit 0 ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
@@ -693,225 +804,165 @@ EOF
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit 0 ;;
- *:Linux:*:*)
-
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
- ld_help_string=`cd /; ld --help 2>&1`
- ld_supported_emulations=`echo $ld_help_string \
- | sed -ne '/supported emulations:/!d
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
s/[ ][ ]*/ /g
- s/.*supported emulations: *//
+ s/.*supported targets: *//
s/ .*//
p'`
- case "$ld_supported_emulations" in
- *ia64)
- echo "${UNAME_MACHINE}-unknown-linux"
- exit 0
- ;;
- i?86linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0
- ;;
- elf_i?86)
+ case "$ld_supported_targets" in
+ elf32-i386)
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
;;
- i?86coff)
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0
- ;;
- sparclinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- armlinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- elf32arm*)
- echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
- exit 0
- ;;
- armelf_linux*)
- echo "${UNAME_MACHINE}-unknown-linux-gnu"
- exit 0
- ;;
- m68klinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- elf32ppc | elf32ppclinux)
- # Determine Lib Version
- cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
-main(argc, argv)
- int argc;
- char *argv[];
-{
-#if defined(__GLIBC__)
- printf("%s %s\n", __libc_version, __libc_release);
-#else
- printf("unkown\n");
-#endif
- return 0;
-}
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- ./$dummy | grep 1\.99 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f $dummy.c $dummy
- echo powerpc-unknown-linux-gnu${LIBC}
- exit 0
- ;;
- shelf_linux)
- echo "${UNAME_MACHINE}-unknown-linux-gnu"
- exit 0
- ;;
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
esac
-
- if test "${UNAME_MACHINE}" = "alpha" ; then
- cat <<EOF >$dummy.s
- .data
- \$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
- main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- esac
-
- objdump --private-headers $dummy | \
- grep ld.so.1 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
- elif test "${UNAME_MACHINE}" = "mips" ; then
- cat >$dummy.c <<EOF
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
- printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
- printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- elif test "${UNAME_MACHINE}" = "s390"; then
- echo s390-ibm-linux && exit 0
- elif test "${UNAME_MACHINE}" = "x86_64"; then
- echo x86_64-unknown-linux-gnu && exit 0
- else
- # Either a pre-BFD a.out linker (linux-gnuoldld)
- # or one that does not give us useful --help.
- # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
- # If ld does not provide *any* "supported emulations:"
- # that means it is gnuoldld.
- echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
- test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
- case "${UNAME_MACHINE}" in
- i?86)
- VENDOR=pc;
- ;;
- *)
- VENDOR=unknown;
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
- printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
- return 0;
-}
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
-# are messed up and put the nodename in both sysname and nodename.
- i?86:DYNIX/ptx:4*:*)
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
echo i386-sequent-sysv4
exit 0 ;;
- i?86:UNIX_SV:4.2MP:2.*)
+ i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
@@ -919,7 +970,24 @@ EOF
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;;
- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@@ -927,36 +995,32 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
exit 0 ;;
- i?86:*:5:7*)
- # Fixed at (any) Pentium or better
- UNAME_MACHINE=i586
- if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
- echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
exit 0 ;;
- i?86:*:3.2:*)
+ i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
&& UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
- i?86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
- exit 0 ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -980,9 +1044,15 @@ EOF
# "miniframe"
echo m68010-convergent-sysv
exit 0 ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit 0 ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit 0 ;;
M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -993,21 +1063,21 @@ EOF
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:*)
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
- i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
- rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+ rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
@@ -1025,8 +1095,8 @@ EOF
echo ns32k-sni-sysv
fi
exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
echo i586-unisys-sysv4
exit 0 ;;
*:UNIX_System_V:4*:FTX*)
@@ -1038,6 +1108,10 @@ EOF
# From seanf@swdc.stratus.com.
echo i860-stratus-sysv4
exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
@@ -1066,6 +1140,9 @@ EOF
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
exit 0 ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
@@ -1073,20 +1150,29 @@ EOF
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
*:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
+ case `uname -p` in
+ *86) UNAME_PROCESSOR=i686 ;;
+ powerpc) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit 0 ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
exit 0 ;;
*:QNX:*:4*)
echo i386-pc-qnx
exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
+ NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
exit 0 ;;
@@ -1104,11 +1190,33 @@ EOF
fi
echo ${UNAME_MACHINE}-unknown-plan9
exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+eval $set_cc_for_build
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
@@ -1195,11 +1303,24 @@ main ()
#endif
#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
#endif
#if defined (alliant) && defined (i860)
@@ -1210,8 +1331,7 @@ main ()
}
EOF
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
# Apollos put the system type in the environment.
@@ -1246,8 +1366,9 @@ fi
cat >&2 <<EOF
$0: unable to guess system type
-The $version version of this script cannot recognize your system type.
-Please download the most up to date version of the config scripts:
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
ftp://ftp.gnu.org/pub/gnu/config/
@@ -1256,7 +1377,7 @@ send the following data and any information you think might be
pertinent to <config-patches@gnu.org> in order to provide the needed
information to handle your system.
-config.guess version = $version
+config.guess timestamp = $timestamp
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
@@ -1283,7 +1404,7 @@ exit 1
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "version='"
+# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
diff --git a/db/dist/config.hin b/db/dist/config.hin
index d153bc0f8..78fbe74b3 100644
--- a/db/dist/config.hin
+++ b/db/dist/config.hin
@@ -1,197 +1,389 @@
-/* config.hin. Generated automatically from configure.in by autoheader. */
+/* config.hin. Generated from configure.ac by autoheader. */
-/* Define to empty if the keyword does not work. */
-#undef const
+/* Define to 1 if you want to build a version for running the test suite. */
+#undef CONFIG_TEST
-/* Define if your struct stat has st_blksize. */
-#undef HAVE_ST_BLKSIZE
+/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
+ an operating system environment that supports Win32 calls and semantics. We
+ don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
+ Cygwin/GCC closely emulates the Unix environment. */
+#undef DB_WIN32
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef mode_t
+/* Define to 1 if you want a debugging version. */
+#undef DEBUG
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
+/* Define to 1 if you want a version that logs read operations. */
+#undef DEBUG_ROP
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef pid_t
+/* Define to 1 if you want a version that logs write operations. */
+#undef DEBUG_WOP
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
+/* Define to 1 if you want a version with run-time diagnostic checking. */
+#undef DIAGNOSTIC
-/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-#undef STAT_MACROS_BROKEN
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
+/* Define to 1 if Berkeley DB release includes strong cryptography. */
+#undef HAVE_CRYPTO
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
+/* Define to 1 if you have the `directio' function. */
+#undef HAVE_DIRECTIO
-/* Define if your processor stores words with the most significant
- byte first (like Motorola and SPARC, unlike Intel and VAX). */
-#undef WORDS_BIGENDIAN
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_DIRENT_H
-/* Define if you are building a version for running the test suite. */
-#undef CONFIG_TEST
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
-/* Define if you want a debugging version. */
-#undef DEBUG
+/* Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines. */
+#undef HAVE_EXIT_SUCCESS
-/* Define if you want a version that logs read operations. */
-#undef DEBUG_ROP
+/* Define to 1 if fcntl/F_SETFD denies child access to file descriptors. */
+#undef HAVE_FCNTL_F_SETFD
-/* Define if you want a version that logs write operations. */
-#undef DEBUG_WOP
+/* Define to 1 if allocated filesystem blocks are not zeroed. */
+#undef HAVE_FILESYSTEM_NOTZERO
-/* Define if you want a version with run-time diagnostic checking. */
-#undef DIAGNOSTIC
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
-/* Define if you want to mask harmless unitialized memory read/writes. */
-#undef UMRW
+/* Define to 1 if you have the `getopt' function. */
+#undef HAVE_GETOPT
-/* Define if fcntl/F_SETFD denies child access to file descriptors. */
-#undef HAVE_FCNTL_F_SETFD
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define to 1 if building Hash access method. */
+#undef HAVE_HASH
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `memcmp' function. */
+#undef HAVE_MEMCMP
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
-/* Define if building big-file environment (e.g., AIX, HP/UX, Solaris). */
-#undef HAVE_FILE_OFFSET_BITS
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mlock' function. */
+#undef HAVE_MLOCK
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
-/* Mutex possibilities. */
+/* Define to 1 if you have the `munlock' function. */
+#undef HAVE_MUNLOCK
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define to 1 to use the GCC compiler and 68K assembly language mutexes. */
#undef HAVE_MUTEX_68K_GCC_ASSEMBLY
+
+/* Define to 1 to use the AIX _check_lock mutexes. */
#undef HAVE_MUTEX_AIX_CHECK_LOCK
+
+/* Define to 1 to use the GCC compiler and Alpha assembly language mutexes. */
#undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY
+
+/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
+#undef HAVE_MUTEX_ARM_GCC_ASSEMBLY
+
+/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
+#undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY
+
+/* Define to 1 to use the UNIX fcntl system call mutexes. */
+#undef HAVE_MUTEX_FCNTL
+
+/* Define to 1 to use the GCC compiler and PaRisc assembly language mutexes.
+ */
#undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY
+
+/* Define to 1 to use the msem_XXX mutexes on HP-UX. */
#undef HAVE_MUTEX_HPPA_MSEM_INIT
+
+/* Define to 1 to use the GCC compiler and IA64 assembly language mutexes. */
#undef HAVE_MUTEX_IA64_GCC_ASSEMBLY
-#undef HAVE_MUTEX_MACOS
+
+/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
#undef HAVE_MUTEX_MSEM_INIT
+
+/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
+ */
#undef HAVE_MUTEX_PPC_GCC_ASSEMBLY
+
+/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
#undef HAVE_MUTEX_PTHREADS
+
+/* Define to 1 to use Reliant UNIX initspin mutexes. */
#undef HAVE_MUTEX_RELIANTUNIX_INITSPIN
+
+/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
+ */
+#undef HAVE_MUTEX_S390_CC_ASSEMBLY
+
+/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
+#undef HAVE_MUTEX_S390_GCC_ASSEMBLY
+
+/* Define to 1 to use the SCO compiler and x86 assembly language mutexes. */
#undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY
+
+/* Define to 1 to use the obsolete POSIX 1003.1 sema_XXX mutexes. */
#undef HAVE_MUTEX_SEMA_INIT
+
+/* Define to 1 to use the SGI XXX_lock mutexes. */
#undef HAVE_MUTEX_SGI_INIT_LOCK
+
+/* Define to 1 to use the Solaris _lock_XXX mutexes. */
#undef HAVE_MUTEX_SOLARIS_LOCK_TRY
+
+/* Define to 1 to use the Solaris lwp threads mutexes. */
#undef HAVE_MUTEX_SOLARIS_LWP
+
+/* Define to 1 to use the GCC compiler and Sparc assembly language mutexes. */
#undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY
-#undef HAVE_MUTEX_THREADS
-#undef HAVE_MUTEX_UI_THREADS
-#undef HAVE_MUTEX_UTS_CC_ASSEMBLY
-#undef HAVE_MUTEX_VMS
-#undef HAVE_MUTEX_VXWORKS
-#undef HAVE_MUTEX_WIN16
-#undef HAVE_MUTEX_WIN32
-#undef HAVE_MUTEX_X86_GCC_ASSEMBLY
-/* Define if building on QNX. */
-#undef HAVE_QNX
+/* Define to 1 if mutexes hold system resources. */
+#undef HAVE_MUTEX_SYSTEM_RESOURCES
-/* Define if building RPC client/server. */
-#undef HAVE_RPC
+/* Define to 1 if fast mutexes are available. */
+#undef HAVE_MUTEX_THREADS
-/* Define if your sprintf returns a pointer, not a length. */
-#undef SPRINTF_RET_CHARPNT
+/* Define to 1 to configure mutexes intra-process only. */
+#undef HAVE_MUTEX_THREAD_ONLY
-/* Define if you have the getcwd function. */
-#undef HAVE_GETCWD
+/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
+#undef HAVE_MUTEX_TRU64_CC_ASSEMBLY
-/* Define if you have the getopt function. */
-#undef HAVE_GETOPT
+/* Define to 1 to use the UNIX International mutexes. */
+#undef HAVE_MUTEX_UI_THREADS
-/* Define if you have the getuid function. */
-#undef HAVE_GETUID
+/* Define to 1 to use the UTS compiler and assembly language mutexes. */
+#undef HAVE_MUTEX_UTS_CC_ASSEMBLY
-/* Define if you have the memcmp function. */
-#undef HAVE_MEMCMP
+/* Define to 1 to use VMS mutexes. */
+#undef HAVE_MUTEX_VMS
-/* Define if you have the memcpy function. */
-#undef HAVE_MEMCPY
+/* Define to 1 to use VxWorks mutexes. */
+#undef HAVE_MUTEX_VXWORKS
-/* Define if you have the memmove function. */
-#undef HAVE_MEMMOVE
+/* Define to 1 to use the MSVC compiler and Windows mutexes. */
+#undef HAVE_MUTEX_WIN32
-/* Define if you have the mlock function. */
-#undef HAVE_MLOCK
+/* Define to 1 to use the GCC compiler and Windows mutexes. */
+#undef HAVE_MUTEX_WIN32_GCC
-/* Define if you have the mmap function. */
-#undef HAVE_MMAP
+/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
+#undef HAVE_MUTEX_X86_GCC_ASSEMBLY
-/* Define if you have the munlock function. */
-#undef HAVE_MUNLOCK
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
-/* Define if you have the munmap function. */
-#undef HAVE_MUNMAP
+/* Define to 1 if you have the O_DIRECT flag. */
+#undef HAVE_O_DIRECT
-/* Define if you have the pread function. */
+/* Define to 1 if you have the `pread' function. */
#undef HAVE_PREAD
-/* Define if you have the pstat_getdynamic function. */
+/* Define to 1 if you have the `pstat_getdynamic' function. */
#undef HAVE_PSTAT_GETDYNAMIC
-/* Define if you have the pwrite function. */
+/* Define to 1 if you have the `pwrite' function. */
#undef HAVE_PWRITE
-/* Define if you have the qsort function. */
-#undef HAVE_QSORT
+/* Define to 1 if building on QNX. */
+#undef HAVE_QNX
+
+/* Define to 1 if building Queue access method. */
+#undef HAVE_QUEUE
-/* Define if you have the raise function. */
+/* Define to 1 if you have the `raise' function. */
#undef HAVE_RAISE
-/* Define if you have the sched_yield function. */
+/* Define to 1 if building replication support. */
+#undef HAVE_REPLICATION
+
+/* Define to 1 if building RPC client/server. */
+#undef HAVE_RPC
+
+/* Define to 1 if you have the `sched_yield' function. */
#undef HAVE_SCHED_YIELD
-/* Define if you have the select function. */
+/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
-/* Define if you have the shmget function. */
+/* Define to 1 if you have the `shmget' function. */
#undef HAVE_SHMGET
-/* Define if you have the snprintf function. */
+/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
-/* Define if you have the strcasecmp function. */
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
-/* Define if you have the strerror function. */
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
-/* Define if you have the strtoul function. */
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL
-/* Define if you have the sysconf function. */
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLKSIZE
+
+/* Define to 1 if you have the `sysconf' function. */
#undef HAVE_SYSCONF
-/* Define if you have the vsnprintf function. */
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/fcntl.h> header file. */
+#undef HAVE_SYS_FCNTL_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+ */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if unlink of file with open file descriptors will fail. */
+#undef HAVE_UNLINK_WITH_OPEN_FAILURE
+
+/* Define to 1 if building access method verification support. */
+#undef HAVE_VERIFY
+
+/* Define to 1 if you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
-/* Define if you have the yield function. */
+/* Define to 1 if building VxWorks. */
+#undef HAVE_VXWORKS
+
+/* Define to 1 if you have the `yield' function. */
#undef HAVE_YIELD
-/* Define if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
+/* Define to 1 if you have the `_fstati64' function. */
+#undef HAVE__FSTATI64
-/* Define if you have the <ndir.h> header file. */
-#undef HAVE_NDIR_H
+/* Define to a value if using non-standard mutex alignment. */
+#undef MUTEX_ALIGN
-/* Define if you have the <sys/dir.h> header file. */
-#undef HAVE_SYS_DIR_H
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
-/* Define if you have the <sys/ndir.h> header file. */
-#undef HAVE_SYS_NDIR_H
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
-/* Define if you have the <sys/select.h> header file. */
-#undef HAVE_SYS_SELECT_H
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
-/* Define if you have the nsl library (-lnsl). */
-#undef HAVE_LIBNSL
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of a `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of a `char *', as computed by sizeof. */
+#undef SIZEOF_CHAR_P
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of a `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of a `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of a `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of a `unsigned char', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_CHAR
+
+/* The size of a `unsigned int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_INT
+
+/* The size of a `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* The size of a `unsigned short', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_SHORT
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 to mask harmless unitialized memory read/writes. */
+#undef UMRW
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
/*
- * Big-file configuration.
+ * Exit success/failure macros.
*/
-#ifdef HAVE_FILE_OFFSET_BITS
-#define _FILE_OFFSET_BITS 64
+#ifndef HAVE_EXIT_SUCCESS
+#define EXIT_FAILURE 1
+#define EXIT_SUCCESS 0
#endif
/*
@@ -202,9 +394,6 @@
#ifndef HAVE_GETCWD
#define getcwd __db_Cgetcwd
#endif
-#ifndef HAVE_GETOPT
-#define getopt __db_Cgetopt
-#endif
#ifndef HAVE_MEMCMP
#define memcmp __db_Cmemcmp
#endif
@@ -222,6 +411,7 @@
#endif
#ifndef HAVE_STRCASECMP
#define strcasecmp __db_Cstrcasecmp
+#define strncasecmp __db_Cstrncasecmp
#endif
#ifndef HAVE_STRERROR
#define strerror __db_Cstrerror
@@ -229,3 +419,7 @@
#ifndef HAVE_VSNPRINTF
#define vsnprintf __db_Cvsnprintf
#endif
+
+#ifdef DB_WIN32
+#include "win_db.h"
+#endif
diff --git a/db/dist/config.sub b/db/dist/config.sub
index 42fc991d0..689009918 100755
--- a/db/dist/config.sub
+++ b/db/dist/config.sub
@@ -1,9 +1,9 @@
#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
-# Free Software Foundation, Inc.
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-version='2000-09-11'
+timestamp='2003-08-18'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -29,7 +29,8 @@ version='2000-09-11'
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Please send patches to <config-patches@gnu.org>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
@@ -60,16 +61,30 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS
Canonicalize a configuration name.
Operation modes:
- -h, --help print this help, then exit
- -V, --version print version number, then exit"
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
help="
Try \`$me --help' for more information."
# Parse command line
while test $# -gt 0 ; do
- case "$1" in
- --version | --vers* | -V )
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
echo "$version" ; exit 0 ;;
--help | --h* | -h )
echo "$usage"; exit 0 ;;
@@ -78,9 +93,7 @@ while test $# -gt 0 ; do
- ) # Use stdin as input.
break ;;
-* )
- exec >&2
- echo "$me: invalid option $1"
- echo "$help"
+ echo "$me: invalid option $1$help"
exit 1 ;;
*local*)
@@ -105,7 +118,7 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu*)
+ nto-qnx* | linux-gnu* | linux-dietlibc | kfreebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -145,6 +158,14 @@ case $os in
os=-vxworks
basic_machine=$1
;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -203,22 +224,49 @@ esac
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
- | arme[lb] | armv[2345] | armv[345][lb] | pyramid | mn10200 | mn10300 | tron | a29k \
- | 580 | i960 | h8300 \
- | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
- | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
- | hppa64 \
- | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
- | alphaev6[78] \
- | we32k | ns16k | clipper | i370 | sh | sh[34] \
- | powerpc | powerpcle \
- | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
- | mips64orion | mips64orionel | mipstx39 | mipstx39el \
- | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
- | mips64vr5000 | miprs64vr5000el | mcore \
- | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
- | thumb | d10v | d30v | fr30 | avr)
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32r | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | msp430 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xstormy16 | xtensa \
+ | z8k)
basic_machine=$basic_machine-unknown
;;
m6811 | m68hc11 | m6812 | m68hc12)
@@ -226,13 +274,13 @@ case $basic_machine in
basic_machine=$basic_machine-unknown
os=-none
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
- i[234567]86 | x86_64)
+ i*86 | x86_64)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
@@ -241,28 +289,60 @@ case $basic_machine in
exit 1
;;
# Recognize the basic CPU types with company name.
- # FIXME: clean up the formatting here.
- vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
- | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
- | xmp-* | ymp-* \
- | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
- | hppa2.0n-* | hppa64-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
- | alphaev6[78]-* \
- | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
- | clipper-* | orion-* \
- | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
- | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
- | mipstx39-* | mipstx39el-* | mcore-* \
- | f301-* | armv*-* | s390-* | sv1-* | t3e-* \
- | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
- | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
- | bs2000-* | tic54x-* | c54x-* | x86_64-*)
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32r-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | msp430-* \
+ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+ | xtensa-* \
+ | ymp-* \
+ | z8k-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -294,6 +374,9 @@ case $basic_machine in
basic_machine=a29k-none
os=-bsd
;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
amdahl)
basic_machine=580-amdahl
os=-sysv
@@ -325,6 +408,10 @@ case $basic_machine in
basic_machine=ns32k-sequent
os=-dynix
;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -345,16 +432,8 @@ case $basic_machine in
basic_machine=c38-convex
os=-bsd
;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [ctj]90-cray)
- basic_machine=c90-cray
+ cray | j90)
+ basic_machine=j90-cray
os=-unicos
;;
crds | unos)
@@ -369,6 +448,14 @@ case $basic_machine in
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
basic_machine=mips-dec
;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
basic_machine=m68k-motorola
@@ -410,6 +497,10 @@ case $basic_machine in
basic_machine=tron-gmicro
os=-sysv
;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -485,19 +576,19 @@ case $basic_machine in
basic_machine=i370-ibm
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[34567]86v32)
+ i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
- i[34567]86v4*)
+ i*86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
- i[34567]86v)
+ i*86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
- i[34567]86sol2)
+ i*86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
@@ -509,18 +600,6 @@ case $basic_machine in
basic_machine=i386-unknown
os=-vsta
;;
- i386-go32 | go32)
- basic_machine=i386-unknown
- os=-go32
- ;;
- i386-mingw32 | mingw32)
- basic_machine=i386-unknown
- os=-mingw32
- ;;
- i[34567]86-pw32 | pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@@ -546,6 +625,10 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -553,14 +636,6 @@ case $basic_machine in
basic_machine=m68k-atari
os=-mint
;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
@@ -575,8 +650,12 @@ case $basic_machine in
basic_machine=m68k-rom68k
os=-coff
;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
msdos)
- basic_machine=i386-unknown
+ basic_machine=i386-pc
os=-msdos
;;
mvs)
@@ -640,9 +719,17 @@ case $basic_machine in
basic_machine=i960-intel
os=-mon960
;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
np1)
basic_machine=np1-gould
;;
+ nv1)
+ basic_machine=nv1-cray
+ os=-unicosmp
+ ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -650,6 +737,10 @@ case $basic_machine in
basic_machine=hppa1.1-oki
os=-proelf
;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
os=-ose
@@ -672,45 +763,65 @@ case $basic_machine in
pbb)
basic_machine=m68k-tti
;;
- pc532 | pc532-*)
+ pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5 | k5 | k6 | nexen)
+ pentium | p5 | k5 | k6 | nexgen | viac3)
basic_machine=i586-pc
;;
- pentiumpro | p6 | 6x86 | athlon)
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
basic_machine=i686-pc
;;
- pentiumii | pentium2)
+ pentium4)
basic_machine=i786-pc
;;
- pentium-* | p5-* | k5-* | k6-* | nexen-*)
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | 6x86-* | athlon-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumii-* | pentium2-*)
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
- power) basic_machine=rs6000-ibm
+ power) basic_machine=power-ibm
;;
ppc) basic_machine=powerpc-unknown
- ;;
+ ;;
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
- ;;
+ ;;
ppcle-* | powerpclittle-*)
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
ps2)
basic_machine=i386-ibm
;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -721,10 +832,26 @@ case $basic_machine in
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
sa29200)
basic_machine=a29k-amd
os=-udi
;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
sequent)
basic_machine=i386-sequent
;;
@@ -732,7 +859,10 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
- sparclite-wrs)
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
basic_machine=sparclite-wrs
os=-vxworks
;;
@@ -799,19 +929,35 @@ case $basic_machine in
os=-dynix
;;
t3e)
- basic_machine=t3e-cray
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
os=-unicos
;;
tic54x | c54x*)
basic_machine=tic54x-unknown
os=-coff
;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
tx39)
basic_machine=mipstx39-unknown
;;
tx39el)
basic_machine=mipstx39el-unknown
;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
tower | tower-32)
basic_machine=m68k-ncr
;;
@@ -836,8 +982,8 @@ case $basic_machine in
os=-vms
;;
vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
+ basic_machine=f301-fujitsu
+ ;;
vxworks960)
basic_machine=i960-wrs
os=-vxworks
@@ -858,13 +1004,13 @@ case $basic_machine in
basic_machine=hppa1.1-winbond
os=-proelf
;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
+ xps | xps100)
basic_machine=xps100-honeywell
;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
z8k-*-coff)
basic_machine=z8k-unknown
os=-sim
@@ -885,13 +1031,6 @@ case $basic_machine in
op60c)
basic_machine=hppa1.1-oki
;;
- mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
- ;;
romp)
basic_machine=romp-ibm
;;
@@ -901,19 +1040,26 @@ case $basic_machine in
vax)
basic_machine=vax-dec
;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
- sh3 | sh4)
- base_machine=sh-unknown
+ sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
;;
- sparc | sparcv9)
+ sparc | sparcv9 | sparcv9b)
basic_machine=sparc-sun
;;
- cydra)
+ cydra)
basic_machine=cydra-cydrome
;;
orion)
@@ -928,9 +1074,8 @@ case $basic_machine in
pmac | pmac-mpw)
basic_machine=powerpc-apple
;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
@@ -984,27 +1129,34 @@ case $os in
| -aos* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32*)
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
case $basic_machine in
- x86-* | i[34567]86-*)
+ x86-* | i*86-*)
;;
*)
os=-nto$os
;;
esac
;;
+ -nto-qnx*)
+ ;;
-nto*)
- os=-nto-qnx
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
@@ -1013,6 +1165,9 @@ case $os in
-mac*)
os=`echo $os | sed -e 's|mac|macos|'`
;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
@@ -1043,14 +1198,20 @@ case $os in
-acis*)
os=-aos
;;
+ -atheos*)
+ os=-atheos
+ ;;
-386bsd)
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
-ns2 )
- os=-nextstep2
+ os=-nextstep2
;;
-nsk*)
os=-nsk
@@ -1089,8 +1250,14 @@ case $os in
-xenix)
os=-xenix
;;
- -*mint | -*MiNT)
- os=-mint
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
;;
-none)
;;
@@ -1123,7 +1290,14 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- pdp11-*)
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
os=-none
;;
*-dec | vax-*)
@@ -1150,6 +1324,9 @@ case $basic_machine in
mips*-*)
os=-elf
;;
+ or32-*)
+ os=-coff
+ ;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
@@ -1213,25 +1390,25 @@ case $basic_machine in
*-next)
os=-nextstep3
;;
- *-gould)
+ *-gould)
os=-sysv
;;
- *-highlevel)
+ *-highlevel)
os=-bsd
;;
*-encore)
os=-bsd
;;
- *-sgi)
+ *-sgi)
os=-irix
;;
- *-siemens)
+ *-siemens)
os=-sysv4
;;
*-masscomp)
os=-rtu
;;
- f301-fujitsu)
+ f30[01]-fujitsu | f700-fujitsu)
os=-uxpv
;;
*-rom68k)
@@ -1297,7 +1474,7 @@ case $basic_machine in
-ptx*)
vendor=sequent
;;
- -vxsim* | -vxworks*)
+ -vxsim* | -vxworks* | -windiss*)
vendor=wrs
;;
-aux*)
@@ -1309,9 +1486,12 @@ case $basic_machine in
-mpw* | -macos*)
vendor=apple
;;
- -*mint | -*MiNT)
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
vendor=atari
;;
+ -vos*)
+ vendor=stratus
+ ;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
@@ -1322,7 +1502,7 @@ exit 0
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "version='"
+# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
# End:
diff --git a/db/dist/configure b/db/dist/configure
index 387421304..cca842cdf 100755
--- a/db/dist/configure
+++ b/db/dist/configure
@@ -1,63 +1,481 @@
#! /bin/sh
-
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# Generated by GNU Autoconf 2.57 for Berkeley DB 4.2.52.
+#
+# Report bugs to <support@sleepycat.com>.
#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
-# Defaults:
-ac_help=
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`
+
+tagnames=`echo "$tagnames,F77" | sed 's/^,//'`
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_default_prefix=/usr/local/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@
-ac_help="$ac_help
- --disable-bigfile Disable AIX, HP/UX, Solaris big files."
-ac_help="$ac_help
- --enable-compat185 Build DB 1.85 compatibility API."
-ac_help="$ac_help
- --enable-cxx Build C++ API."
-ac_help="$ac_help
- --enable-debug Build a debugging version."
-ac_help="$ac_help
- --enable-debug_rop Build a version that logs read operations."
-ac_help="$ac_help
- --enable-debug_wop Build a version that logs write operations."
-ac_help="$ac_help
- --enable-diagnostic Build a version with run-time diagnostics."
-ac_help="$ac_help
- --enable-dump185 Build db_dump185(1) to dump 1.85 databases."
-ac_help="$ac_help
- --enable-dynamic Build with dynamic libraries."
-ac_help="$ac_help
- --enable-java Build Java API."
-ac_help="$ac_help
- --enable-posixmutexes Force use of POSIX standard mutexes."
-ac_help="$ac_help
- --enable-rpc Build RPC client/server."
-ac_help="$ac_help
- --enable-shared Build with dynamic libraries."
-ac_help="$ac_help
- --enable-tcl Build Tcl API."
-ac_help="$ac_help
- --enable-test Configure to run the test suite."
-ac_help="$ac_help
- --enable-uimutexes Force use of Unix International mutexes."
-ac_help="$ac_help
- --enable-umrw Mask harmless unitialized memory read/writes."
-ac_help="$ac_help
- --with-tcl=DIR Directory location of tclConfig.sh."
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='Berkeley DB'
+PACKAGE_TARNAME='db-4.2.52'
+PACKAGE_VERSION='4.2.52'
+PACKAGE_STRING='Berkeley DB 4.2.52'
+PACKAGE_BUGREPORT='support@sleepycat.com'
+
+ac_unique_file="../db/db.c"
+ac_default_prefix=/usr/local/BerkeleyDB.4.2
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os ADDITIONAL_INCS ADDITIONAL_LANG ADDITIONAL_OBJS ADDITIONAL_PROGS BUILD_TARGET CFLAGS CONFIGURATION_ARGS CONFIGURATION_PATH CPPFLAGS CRYPTO_OBJS CXX CXXFLAGS DEFAULT_LIB DEFAULT_LIB_CXX INSTALLER INSTALL_LIBS INSTALL_TARGET JAR JAVACFLAGS LDFLAGS LIBJSO_LIBS LIBSO_LIBS LIBTOOL LIBTSO_LIBS LIBTSO_MODSUFFIX LIBTSO_MODULE LIBXSO_LIBS LOAD_LIBS MAKEFILE_CC MAKEFILE_CCLINK MAKEFILE_CXX MAKEFILE_CXXLINK MAKEFILE_SOLINK MAKEFILE_XSOLINK OSDIR POSTLINK REPLACEMENT_OBJS RPC_CLIENT_OBJS RPM_BUILD RPM_POST_INSTALL RPM_POST_UNINSTALL SOFLAGS db_cv_path_rpm_archive db_int_def o DB_VERSION_MAJOR DB_VERSION_MINOR DB_VERSION_PATCH DB_VERSION_STRING DB_VERSION_UNIQUE_NAME db_cv_path_ar ac_ct_db_cv_path_ar db_cv_path_chmod ac_ct_db_cv_path_chmod db_cv_path_cp ac_ct_db_cv_path_cp path_ldconfig ac_ct_path_ldconfig db_cv_path_ldconfig db_cv_path_ln ac_ct_db_cv_path_ln db_cv_path_mkdir ac_ct_db_cv_path_mkdir path_ranlib ac_ct_path_ranlib db_cv_path_ranlib db_cv_path_rm ac_ct_db_cv_path_rm db_cv_path_rpm ac_ct_db_cv_path_rpm path_sh ac_ct_path_sh db_cv_path_sh path_strip ac_ct_path_strip db_cv_path_strip db_cv_path_kill ac_ct_db_cv_path_kill INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA db_cv_build_type CC ac_ct_CC EXEEXT OBJEXT DB_PROTO1 DB_PROTO2 DB_CONST CCC ac_ct_CCC ac_ct_CXX CXXCPP cxx_have_stdheaders EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP F77 FFLAGS ac_ct_F77 SOSUFFIX MODSUFFIX JMODSUFFIX JAVAC JAVA uudecode _ACJNI_JAVAC TCFLAGS TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_TCLSH inttypes_decl u_char_decl u_short_decl u_int_decl u_long_decl u_int8_decl u_int16_decl int16_decl u_int32_decl int32_decl ssize_t_decl db_align_t_decl db_alignp_t_decl LIBOBJS LTLIBOBJS'
+ac_subst_files=''
# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
# The variables have the same names as the options, with
# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
exec_prefix=NONE
-host=NONE
no_create=
-nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
@@ -66,10 +484,15 @@ program_transform_name=s,x,x,
silent=
site=
srcdir=
-target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
@@ -83,17 +506,9 @@ oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
ac_prev=
for ac_option
do
-
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
@@ -101,59 +516,59 @@ do
continue
fi
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case "$ac_option" in
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
+ bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
+ ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
+ build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
- datadir="$ac_optarg" ;;
+ datadir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
-enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -162,95 +577,47 @@ do
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
+ exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
- -help | --help | --hel | --he)
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
-host | --host | --hos | --ho)
- ac_prev=host ;;
+ ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
+ host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
+ includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
+ infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
+ libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
+ libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
@@ -259,19 +626,19 @@ EOF
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
+ localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
+ mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
+ | --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -285,26 +652,26 @@ EOF
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
+ oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
+ prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
+ program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
+ program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
@@ -321,7 +688,7 @@ EOF
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
+ program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
@@ -331,7 +698,7 @@ EOF
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
+ sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -342,58 +709,57 @@ EOF
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
+ sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
+ site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
+ srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
+ sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
+ ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
+ target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "with_${ac_package}='$ac_optarg'" ;;
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
--x)
# Obsolete; use --with-x.
@@ -404,99 +770,110 @@ EOF
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
+ x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
+ x_libraries=$ac_optarg ;;
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
;;
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
*)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
esac
done
if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
fi
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
esac
done
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=../db/db.c
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
@@ -506,13 +883,510 @@ else
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
fi
fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures Berkeley DB 4.2.52 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of Berkeley DB 4.2.52:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-bigfile Obsolete; use --disable-largefile instead.
+ --disable-cryptography Do not build database cryptography support.
+ --disable-hash Do not build Hash access method.
+ --disable-queue Do not build Queue access method.
+ --disable-replication Do not build database replication support.
+ --disable-verify Do not build database verification support.
+ --enable-compat185 Build DB 1.85 compatibility API.
+ --enable-cxx Build C++ API.
+ --enable-debug Build a debugging version.
+ --enable-debug_rop Build a version that logs read operations.
+ --enable-debug_wop Build a version that logs write operations.
+ --enable-diagnostic Build a version with run-time diagnostics.
+ --enable-dump185 Build db_dump185(1) to dump 1.85 databases.
+ --enable-java Build Java API.
+ --enable-mingw Build Berkeley DB for MinGW.
+ --enable-posixmutexes Force use of POSIX standard mutexes.
+ --enable-rpc Build RPC client/server.
+ --enable-smallbuild Build small footprint version of the library.
+ --enable-tcl Build Tcl API.
+ --enable-test Configure to run the test suite.
+ --enable-uimutexes Force use of Unix International mutexes.
+ --enable-umrw Mask harmless unitialized memory read/writes.
+ --enable-shared[=PKGS]
+ build shared libraries [default=yes]
+ --enable-static[=PKGS]
+ build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-largefile omit support for large files
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-mutex=MUTEX Selection of non-standard mutexes.
+ --with-mutexalign=ALIGNMENT
+ Selection of non-standard mutex alignment.
+ --with-rpm=ARCHIVE Path of RPM archive.
+ --with-tcl=DIR Directory location of tclConfig.sh.
+ --with-uniquename=NAME Build a uniquely named library.
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-pic try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-tags[=TAGS]
+ include additional configurations [automatic]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ CXXCPP C++ preprocessor
+ CPP C preprocessor
+ F77 Fortran 77 compiler command
+ FFLAGS Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <support@sleepycat.com>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+Berkeley DB configure 4.2.52
+generated by GNU Autoconf 2.57
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Berkeley DB $as_me 4.2.52, which was
+generated by GNU Autoconf 2.57. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core core.* *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
@@ -523,43 +1397,118 @@ if test -z "$CONFIG_SITE"; then
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
else
- echo "creating cache $cache_file"
- > $cache_file
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
fi
ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
-else
- ac_n= ac_c='\c' ac_t=
-fi
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers db_config.h:config.hin"
+
+
+# Configure setup.
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
@@ -570,131 +1519,114 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
fi
done
if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:595: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+
+# Don't build in the top-level or dist directories.
+echo "$as_me:$LINENO: checking if building in the top-level or dist directories" >&5
+echo $ECHO_N "checking if building in the top-level or dist directories... $ECHO_C" >&6
+if test -d db_archive -o -f configure.ac ; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ { { echo "$as_me:$LINENO: error: Berkeley DB should not be built in the top-level or dist directories." >&5
+echo "$as_me: error: Berkeley DB should not be built in the top-level or dist directories." >&2;}
+ { (exit 1); exit 1; }; }
fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+# Substitution variables.
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-# Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:654: checking host system type" >&5
-host_alias=$host
-case "$host_alias" in
-NONE)
- case $nonopt in
- NONE)
- if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
- else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
- fi ;;
- *) host_alias=$nonopt ;;
- esac ;;
-esac
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-if test "$program_transform_name" = s,x,x,; then
- program_transform_name=
-else
- # Double any \ or $. echo might interpret backslashes.
- cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
- program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
- rm -f conftestsed
-fi
-test "$program_prefix" != NONE &&
- program_transform_name="s,^,${program_prefix},; $program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
- program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-echo $ac_n "checking if building in the top-level directory""... $ac_c" 1>&6
-echo "configure:695: checking if building in the top-level directory" >&5
- test -d db_archive && { echo "configure: error:
-Berkeley DB cannot be built in the top-level distribution directory." 1>&2; exit 1; }
-echo "$ac_t""no" 1>&6
@@ -731,560 +1663,2308 @@ echo "$ac_t""no" 1>&6
-o=.o
-INSTALLER="\$(cp)"
-DEFAULT_LIB="\$(libdb)"
-DEFAULT_INSTALL="install_static"
+# RPM needs the current absolute path.
+# RPM needs the list of original arguments, but we don't include the RPM
+# option itself.
+CONFIGURATION_PATH=${PWD-`pwd`}
+CONFIGURATION_ARGS=`echo "$*" | sed -e 's/--with-rpm[^ ]*//'`
+# Set the default installation location.
-DB_VERSION_MAJOR=3
-DB_VERSION_MINOR=2
+# Configure the version information.
-DB_VERSION_PATCH=9
+DB_VERSION_MAJOR="4"
-DB_VERSION_STRING="\"Sleepycat Software: Berkeley DB 3.2.9: (January 24, 2001)\""
+DB_VERSION_MINOR="2"
+DB_VERSION_PATCH="52"
+DB_VERSION_STRING='"Sleepycat Software: Berkeley DB 4.2.52: (December 3, 2003)"'
+# Process all options before using them.
-echo $ac_n "checking if --disable-bigfile option specified""... $ac_c" 1>&6
-echo "configure:756: checking if --disable-bigfile option specified" >&5
+# --enable-bigfile was the configuration option that Berkeley DB used before
+# autoconf 2.50 was released (which had --enable-largefile integrated in).
# Check whether --enable-bigfile or --disable-bigfile was given.
if test "${enable_bigfile+set}" = set; then
enableval="$enable_bigfile"
- db_cv_bigfile="yes"
-else
- db_cv_bigfile="no"
-fi
+ { { echo "$as_me:$LINENO: error: --enable-bigfile no longer supported, use --enable-largefile" >&5
+echo "$as_me: error: --enable-bigfile no longer supported, use --enable-largefile" >&2;}
+ { (exit 1); exit 1; }; }
+fi;
+
+echo "$as_me:$LINENO: checking if --disable-cryptography option specified" >&5
+echo $ECHO_N "checking if --disable-cryptography option specified... $ECHO_C" >&6
+# Check whether --enable-cryptography or --disable-cryptography was given.
+if test "${enable_cryptography+set}" = set; then
+ enableval="$enable_cryptography"
+
+else
+ enableval="yes"
+fi;
+db_cv_build_cryptography="$enableval"
+case "$enableval" in
+ no) echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;;
+yes) echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;;
+esac
+
+echo "$as_me:$LINENO: checking if --disable-hash option specified" >&5
+echo $ECHO_N "checking if --disable-hash option specified... $ECHO_C" >&6
+# Check whether --enable-hash or --disable-hash was given.
+if test "${enable_hash+set}" = set; then
+ enableval="$enable_hash"
+
+else
+ enableval="yes"
+fi;
+db_cv_build_hash="$enableval"
+case "$enableval" in
+ no) echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;;
+yes) echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;;
+esac
-echo "$ac_t""$db_cv_bigfile" 1>&6
+echo "$as_me:$LINENO: checking if --disable-queue option specified" >&5
+echo $ECHO_N "checking if --disable-queue option specified... $ECHO_C" >&6
+# Check whether --enable-queue or --disable-queue was given.
+if test "${enable_queue+set}" = set; then
+ enableval="$enable_queue"
+
+else
+ enableval="yes"
+fi;
+db_cv_build_queue="$enableval"
+case "$enableval" in
+ no) echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;;
+yes) echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;;
+esac
+
+echo "$as_me:$LINENO: checking if --disable-replication option specified" >&5
+echo $ECHO_N "checking if --disable-replication option specified... $ECHO_C" >&6
+# Check whether --enable-replication or --disable-replication was given.
+if test "${enable_replication+set}" = set; then
+ enableval="$enable_replication"
+
+else
+ enableval="yes"
+fi;
+db_cv_build_replication="$enableval"
+case "$enableval" in
+ no) echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;;
+yes) echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;;
+esac
-echo $ac_n "checking if --enable-compat185 option specified""... $ac_c" 1>&6
-echo "configure:768: checking if --enable-compat185 option specified" >&5
+echo "$as_me:$LINENO: checking if --disable-verify option specified" >&5
+echo $ECHO_N "checking if --disable-verify option specified... $ECHO_C" >&6
+# Check whether --enable-verify or --disable-verify was given.
+if test "${enable_verify+set}" = set; then
+ enableval="$enable_verify"
+
+else
+ enableval="yes"
+fi;
+db_cv_build_verify="$enableval"
+case "$enableval" in
+ no) echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;;
+yes) echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;;
+esac
+
+echo "$as_me:$LINENO: checking if --enable-compat185 option specified" >&5
+echo $ECHO_N "checking if --enable-compat185 option specified... $ECHO_C" >&6
# Check whether --enable-compat185 or --disable-compat185 was given.
if test "${enable_compat185+set}" = set; then
enableval="$enable_compat185"
db_cv_compat185="$enable_compat185"
else
db_cv_compat185="no"
-fi
-
-echo "$ac_t""$db_cv_compat185" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_compat185" >&5
+echo "${ECHO_T}$db_cv_compat185" >&6
-echo $ac_n "checking if --enable-cxx option specified""... $ac_c" 1>&6
-echo "configure:780: checking if --enable-cxx option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-cxx option specified" >&5
+echo $ECHO_N "checking if --enable-cxx option specified... $ECHO_C" >&6
# Check whether --enable-cxx or --disable-cxx was given.
if test "${enable_cxx+set}" = set; then
enableval="$enable_cxx"
db_cv_cxx="$enable_cxx"
else
db_cv_cxx="no"
-fi
-
-echo "$ac_t""$db_cv_cxx" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_cxx" >&5
+echo "${ECHO_T}$db_cv_cxx" >&6
-echo $ac_n "checking if --enable-debug option specified""... $ac_c" 1>&6
-echo "configure:792: checking if --enable-debug option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-debug option specified" >&5
+echo $ECHO_N "checking if --enable-debug option specified... $ECHO_C" >&6
# Check whether --enable-debug or --disable-debug was given.
if test "${enable_debug+set}" = set; then
enableval="$enable_debug"
db_cv_debug="$enable_debug"
else
db_cv_debug="no"
-fi
-
-echo "$ac_t""$db_cv_debug" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_debug" >&5
+echo "${ECHO_T}$db_cv_debug" >&6
-echo $ac_n "checking if --enable-debug_rop option specified""... $ac_c" 1>&6
-echo "configure:804: checking if --enable-debug_rop option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-debug_rop option specified" >&5
+echo $ECHO_N "checking if --enable-debug_rop option specified... $ECHO_C" >&6
# Check whether --enable-debug_rop or --disable-debug_rop was given.
if test "${enable_debug_rop+set}" = set; then
enableval="$enable_debug_rop"
db_cv_debug_rop="$enable_debug_rop"
else
db_cv_debug_rop="no"
-fi
-
-echo "$ac_t""$db_cv_debug_rop" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_debug_rop" >&5
+echo "${ECHO_T}$db_cv_debug_rop" >&6
-echo $ac_n "checking if --enable-debug_wop option specified""... $ac_c" 1>&6
-echo "configure:816: checking if --enable-debug_wop option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-debug_wop option specified" >&5
+echo $ECHO_N "checking if --enable-debug_wop option specified... $ECHO_C" >&6
# Check whether --enable-debug_wop or --disable-debug_wop was given.
if test "${enable_debug_wop+set}" = set; then
enableval="$enable_debug_wop"
db_cv_debug_wop="$enable_debug_wop"
else
db_cv_debug_wop="no"
-fi
+fi;
+echo "$as_me:$LINENO: result: $db_cv_debug_wop" >&5
+echo "${ECHO_T}$db_cv_debug_wop" >&6
-echo "$ac_t""$db_cv_debug_wop" 1>&6
-
-echo $ac_n "checking if --enable-diagnostic option specified""... $ac_c" 1>&6
-echo "configure:828: checking if --enable-diagnostic option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-diagnostic option specified" >&5
+echo $ECHO_N "checking if --enable-diagnostic option specified... $ECHO_C" >&6
# Check whether --enable-diagnostic or --disable-diagnostic was given.
if test "${enable_diagnostic+set}" = set; then
enableval="$enable_diagnostic"
db_cv_diagnostic="$enable_diagnostic"
else
db_cv_diagnostic="no"
+fi;
+if test "$db_cv_diagnostic" = "yes"; then
+ echo "$as_me:$LINENO: result: $db_cv_diagnostic" >&5
+echo "${ECHO_T}$db_cv_diagnostic" >&6
+fi
+if test "$db_cv_diagnostic" = "no" -a "$db_cv_debug_rop" = "yes"; then
+ db_cv_diagnostic="yes"
+ echo "$as_me:$LINENO: result: by --enable-debug_rop" >&5
+echo "${ECHO_T}by --enable-debug_rop" >&6
+fi
+if test "$db_cv_diagnostic" = "no" -a "$db_cv_debug_wop" = "yes"; then
+ db_cv_diagnostic="yes"
+ echo "$as_me:$LINENO: result: by --enable-debug_wop" >&5
+echo "${ECHO_T}by --enable-debug_wop" >&6
+fi
+if test "$db_cv_diagnostic" = "no"; then
+ echo "$as_me:$LINENO: result: $db_cv_diagnostic" >&5
+echo "${ECHO_T}$db_cv_diagnostic" >&6
fi
-echo "$ac_t""$db_cv_diagnostic" 1>&6
-
-echo $ac_n "checking if --enable-dump185 option specified""... $ac_c" 1>&6
-echo "configure:840: checking if --enable-dump185 option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-dump185 option specified" >&5
+echo $ECHO_N "checking if --enable-dump185 option specified... $ECHO_C" >&6
# Check whether --enable-dump185 or --disable-dump185 was given.
if test "${enable_dump185+set}" = set; then
enableval="$enable_dump185"
db_cv_dump185="$enable_dump185"
else
db_cv_dump185="no"
-fi
-
-echo "$ac_t""$db_cv_dump185" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_dump185" >&5
+echo "${ECHO_T}$db_cv_dump185" >&6
-echo $ac_n "checking if --enable-dynamic option specified""... $ac_c" 1>&6
-echo "configure:852: checking if --enable-dynamic option specified" >&5
-# Check whether --enable-dynamic or --disable-dynamic was given.
-if test "${enable_dynamic+set}" = set; then
- enableval="$enable_dynamic"
- db_cv_dynamic="$enable_dynamic"
-else
- db_cv_dynamic="no"
-fi
-
-echo "$ac_t""$db_cv_dynamic" 1>&6
-
-echo $ac_n "checking if --enable-java option specified""... $ac_c" 1>&6
-echo "configure:864: checking if --enable-java option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-java option specified" >&5
+echo $ECHO_N "checking if --enable-java option specified... $ECHO_C" >&6
# Check whether --enable-java or --disable-java was given.
if test "${enable_java+set}" = set; then
enableval="$enable_java"
db_cv_java="$enable_java"
else
db_cv_java="no"
-fi
-
-echo "$ac_t""$db_cv_java" 1>&6
-
-echo $ac_n "checking if --enable-posixmutexes option specified""... $ac_c" 1>&6
-echo "configure:876: checking if --enable-posixmutexes option specified" >&5
+fi;
+echo "$as_me:$LINENO: result: $db_cv_java" >&5
+echo "${ECHO_T}$db_cv_java" >&6
+
+echo "$as_me:$LINENO: checking if --enable-mingw option specified" >&5
+echo $ECHO_N "checking if --enable-mingw option specified... $ECHO_C" >&6
+# Check whether --enable-mingw or --disable-mingw was given.
+if test "${enable_mingw+set}" = set; then
+ enableval="$enable_mingw"
+ db_cv_mingw="$enable_mingw"
+else
+ db_cv_mingw="no"
+fi;
+echo "$as_me:$LINENO: result: $db_cv_mingw" >&5
+echo "${ECHO_T}$db_cv_mingw" >&6
+
+echo "$as_me:$LINENO: checking if --enable-posixmutexes option specified" >&5
+echo $ECHO_N "checking if --enable-posixmutexes option specified... $ECHO_C" >&6
# Check whether --enable-posixmutexes or --disable-posixmutexes was given.
if test "${enable_posixmutexes+set}" = set; then
enableval="$enable_posixmutexes"
db_cv_posixmutexes="$enable_posixmutexes"
else
db_cv_posixmutexes="no"
-fi
-
-echo "$ac_t""$db_cv_posixmutexes" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_posixmutexes" >&5
+echo "${ECHO_T}$db_cv_posixmutexes" >&6
-echo $ac_n "checking if --enable-rpc option specified""... $ac_c" 1>&6
-echo "configure:888: checking if --enable-rpc option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-rpc option specified" >&5
+echo $ECHO_N "checking if --enable-rpc option specified... $ECHO_C" >&6
# Check whether --enable-rpc or --disable-rpc was given.
if test "${enable_rpc+set}" = set; then
enableval="$enable_rpc"
db_cv_rpc="$enable_rpc"
else
db_cv_rpc="no"
-fi
-
-echo "$ac_t""$db_cv_rpc" 1>&6
-
-echo $ac_n "checking if --enable-shared option specified""... $ac_c" 1>&6
-echo "configure:900: checking if --enable-shared option specified" >&5
-# Check whether --enable-shared or --disable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval="$enable_shared"
- db_cv_shared="$enable_shared"
-else
- db_cv_shared="no"
-fi
-
-echo "$ac_t""$db_cv_shared" 1>&6
-if test "$db_cv_shared" != "no"; then
- db_cv_dynamic="yes"
-fi
-
-echo $ac_n "checking if --enable-tcl option specified""... $ac_c" 1>&6
-echo "configure:915: checking if --enable-tcl option specified" >&5
+fi;
+echo "$as_me:$LINENO: result: $db_cv_rpc" >&5
+echo "${ECHO_T}$db_cv_rpc" >&6
+
+echo "$as_me:$LINENO: checking if --enable-smallbuild option specified" >&5
+echo $ECHO_N "checking if --enable-smallbuild option specified... $ECHO_C" >&6
+# Check whether --enable-smallbuild or --disable-smallbuild was given.
+if test "${enable_smallbuild+set}" = set; then
+ enableval="$enable_smallbuild"
+ db_cv_smallbuild="$enable_smallbuild"
+else
+ db_cv_smallbuild="no"
+fi;
+if test "$db_cv_smallbuild" = "yes"; then
+ db_cv_build_cryptography="no"
+ db_cv_build_hash="no"
+ db_cv_build_queue="no"
+ db_cv_build_replication="no"
+ db_cv_build_verify="no"
+fi
+echo "$as_me:$LINENO: result: $db_cv_smallbuild" >&5
+echo "${ECHO_T}$db_cv_smallbuild" >&6
+
+echo "$as_me:$LINENO: checking if --enable-tcl option specified" >&5
+echo $ECHO_N "checking if --enable-tcl option specified... $ECHO_C" >&6
# Check whether --enable-tcl or --disable-tcl was given.
if test "${enable_tcl+set}" = set; then
enableval="$enable_tcl"
db_cv_tcl="$enable_tcl"
else
db_cv_tcl="no"
-fi
-
-echo "$ac_t""$db_cv_tcl" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_tcl" >&5
+echo "${ECHO_T}$db_cv_tcl" >&6
-echo $ac_n "checking if --enable-test option specified""... $ac_c" 1>&6
-echo "configure:927: checking if --enable-test option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-test option specified" >&5
+echo $ECHO_N "checking if --enable-test option specified... $ECHO_C" >&6
# Check whether --enable-test or --disable-test was given.
if test "${enable_test+set}" = set; then
enableval="$enable_test"
db_cv_test="$enable_test"
else
db_cv_test="no"
-fi
-
-echo "$ac_t""$db_cv_test" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_test" >&5
+echo "${ECHO_T}$db_cv_test" >&6
-echo $ac_n "checking if --enable-uimutexes option specified""... $ac_c" 1>&6
-echo "configure:939: checking if --enable-uimutexes option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-uimutexes option specified" >&5
+echo $ECHO_N "checking if --enable-uimutexes option specified... $ECHO_C" >&6
# Check whether --enable-uimutexes or --disable-uimutexes was given.
if test "${enable_uimutexes+set}" = set; then
enableval="$enable_uimutexes"
db_cv_uimutexes="$enable_uimutexes"
else
db_cv_uimutexes="no"
-fi
-
-echo "$ac_t""$db_cv_uimutexes" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $db_cv_uimutexes" >&5
+echo "${ECHO_T}$db_cv_uimutexes" >&6
-echo $ac_n "checking if --enable-umrw option specified""... $ac_c" 1>&6
-echo "configure:951: checking if --enable-umrw option specified" >&5
+echo "$as_me:$LINENO: checking if --enable-umrw option specified" >&5
+echo $ECHO_N "checking if --enable-umrw option specified... $ECHO_C" >&6
# Check whether --enable-umrw or --disable-umrw was given.
if test "${enable_umrw+set}" = set; then
enableval="$enable_umrw"
db_cv_umrw="$enable_umrw"
else
db_cv_umrw="no"
+fi;
+echo "$as_me:$LINENO: result: $db_cv_umrw" >&5
+echo "${ECHO_T}$db_cv_umrw" >&6
+
+echo "$as_me:$LINENO: checking if --with-mutex=MUTEX option specified" >&5
+echo $ECHO_N "checking if --with-mutex=MUTEX option specified... $ECHO_C" >&6
+
+# Check whether --with-mutex or --without-mutex was given.
+if test "${with_mutex+set}" = set; then
+ withval="$with_mutex"
+ with_mutex="$withval"
+else
+ with_mutex="no"
+fi;
+if test "$with_mutex" = "yes"; then
+ { { echo "$as_me:$LINENO: error: --with-mutex requires a mutex name argument" >&5
+echo "$as_me: error: --with-mutex requires a mutex name argument" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test "$with_mutex" != "no"; then
+ db_cv_mutex="$with_mutex"
+fi
+echo "$as_me:$LINENO: result: $with_mutex" >&5
+echo "${ECHO_T}$with_mutex" >&6
+
+
+
+echo "$as_me:$LINENO: checking if --with-mutexalign=ALIGNMENT option specified" >&5
+echo $ECHO_N "checking if --with-mutexalign=ALIGNMENT option specified... $ECHO_C" >&6
+
+# Check whether --with-mutexalign or --without-mutexalign was given.
+if test "${with_mutexalign+set}" = set; then
+ withval="$with_mutexalign"
+ with_mutexalign="$withval"
+else
+ with_mutexalign="no"
+fi;
+if test "$with_mutexalign" = "yes"; then
+ { { echo "$as_me:$LINENO: error: --with-mutexalign requires a mutex alignment argument" >&5
+echo "$as_me: error: --with-mutexalign requires a mutex alignment argument" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test "$with_mutexalign" != "no"; then
+ cat >>confdefs.h <<_ACEOF
+#define MUTEX_ALIGN $with_mutexalign
+_ACEOF
+
+fi
+echo "$as_me:$LINENO: result: $with_mutexalign" >&5
+echo "${ECHO_T}$with_mutexalign" >&6
+
+echo "$as_me:$LINENO: checking if --with-rpm=ARCHIVE option specified" >&5
+echo $ECHO_N "checking if --with-rpm=ARCHIVE option specified... $ECHO_C" >&6
+
+# Check whether --with-rpm or --without-rpm was given.
+if test "${with_rpm+set}" = set; then
+ withval="$with_rpm"
+ with_rpm="$withval"
+else
+ with_rpm="no"
+fi;
+if test "$with_rpm" = "no"; then
+ db_cv_rpm="no"
+ db_cv_path_rpm_archive="Not-configured-with-rpm=ARCHIVE"
+else
+ if test "$with_rpm" = "yes"; then
+ { { echo "$as_me:$LINENO: error: --with-rpm requires an archive path argument" >&5
+echo "$as_me: error: --with-rpm requires an archive path argument" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ db_cv_rpm="yes"
+ db_cv_path_rpm_archive="$with_rpm"
fi
+echo "$as_me:$LINENO: result: $with_rpm" >&5
+echo "${ECHO_T}$with_rpm" >&6
-echo "$ac_t""$db_cv_umrw" 1>&6
+echo "$as_me:$LINENO: checking if --with-tcl=DIR option specified" >&5
+echo $ECHO_N "checking if --with-tcl=DIR option specified... $ECHO_C" >&6
-echo $ac_n "checking if --with-tcl option specified""... $ac_c" 1>&6
-echo "configure:963: checking if --with-tcl option specified" >&5
# Check whether --with-tcl or --without-tcl was given.
if test "${with_tcl+set}" = set; then
withval="$with_tcl"
- with_tclconfig=${withval}
+ with_tclconfig="$withval"
else
with_tclconfig="no"
-fi
-
-echo "$ac_t""$with_tclconfig" 1>&6
+fi;
+echo "$as_me:$LINENO: result: $with_tclconfig" >&5
+echo "${ECHO_T}$with_tclconfig" >&6
if test "$with_tclconfig" != "no"; then
db_cv_tcl="yes"
fi
+echo "$as_me:$LINENO: checking if --with-uniquename=NAME option specified" >&5
+echo $ECHO_N "checking if --with-uniquename=NAME option specified... $ECHO_C" >&6
-optimize_def="-O"
-case "$host_os" in
-aix4.*) optimize_def="-O2"
- CC=${CC-"xlc_r"}
- CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
- LIBTSO_LIBS="\$(LIBS)";;
-bsdi3*) CC=${CC-"shlicc2"}
- optimize_def="-O2"
- LIBS="-lipc $LIBS";;
-bsdi*) optimize_def="-O2";;
-freebsd*) optimize_def="-O2"
- CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS"
- LIBS="-pthread";;
-hpux*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";;
-irix*) optimize_def="-O2"
- CPPFLAGS="-D_SGI_MP_SOURCE $CPPFLAGS";;
-linux*) optimize_def="-O2"
- CFLAGS="-D_GNU_SOURCE"
- CPPFLAGS="-D_REENTRANT $CPPFLAGS";;
-mpeix*) CPPFLAGS="-D_POSIX_SOURCE -D_SOCKET_SOURCE $CPPFLAGS"
- LIBS="-lsocket -lsvipc $LIBS";;
-osf*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";;
-*qnx) cat >> confdefs.h <<\EOF
-#define HAVE_QNX 1
-EOF
-;;
-sco3.2v4*) CC=${CC-"cc -belf"}
- LIBS="-lsocket -lnsl_s $LIBS";;
-sco*) CC=${CC-"cc -belf"}
- LIBS="-lsocket -lnsl $LIBS";;
-solaris*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";;
+# Check whether --with-uniquename or --without-uniquename was given.
+if test "${with_uniquename+set}" = set; then
+ withval="$with_uniquename"
+ with_uniquename="$withval"
+else
+ with_uniquename="no"
+fi;
+if test "$with_uniquename" = "no"; then
+ db_cv_uniquename="no"
+ DB_VERSION_UNIQUE_NAME=""
+ echo "$as_me:$LINENO: result: $with_uniquename" >&5
+echo "${ECHO_T}$with_uniquename" >&6
+else
+ db_cv_uniquename="yes"
+ if test "$with_uniquename" = "yes"; then
+ DB_VERSION_UNIQUE_NAME="_4002"
+ else
+ DB_VERSION_UNIQUE_NAME="$with_uniquename"
+ fi
+ echo "$as_me:$LINENO: result: $DB_VERSION_UNIQUE_NAME" >&5
+echo "${ECHO_T}$DB_VERSION_UNIQUE_NAME" >&6
+fi
+
+# Test requires Tcl
+if test "$db_cv_test" = "yes"; then
+ if test "$db_cv_tcl" = "no"; then
+ { { echo "$as_me:$LINENO: error: --enable-test requires --enable-tcl" >&5
+echo "$as_me: error: --enable-test requires --enable-tcl" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+# Set some #defines based on configuration options.
+if test "$db_cv_diagnostic" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define DIAGNOSTIC 1
+_ACEOF
+
+
+
+fi
+if test "$db_cv_debug_rop" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define DEBUG_ROP 1
+_ACEOF
+
+
+
+fi
+if test "$db_cv_debug_wop" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define DEBUG_WOP 1
+_ACEOF
+
+
+
+fi
+if test "$db_cv_umrw" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define UMRW 1
+_ACEOF
+
+
+
+
+fi
+if test "$db_cv_test" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define CONFIG_TEST 1
+_ACEOF
+
+
+
+fi
+
+# Check for programs used in building and installation.
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_ar+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_ar"; then
+ ac_cv_prog_db_cv_path_ar="$db_cv_path_ar" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_ar="${ac_tool_prefix}ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+db_cv_path_ar=$ac_cv_prog_db_cv_path_ar
+if test -n "$db_cv_path_ar"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_ar" >&5
+echo "${ECHO_T}$db_cv_path_ar" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_db_cv_path_ar"; then
+ ac_ct_db_cv_path_ar=$db_cv_path_ar
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_ar+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_ar"; then
+ ac_cv_prog_ac_ct_db_cv_path_ar="$ac_ct_db_cv_path_ar" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_ar="ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_ar" && ac_cv_prog_ac_ct_db_cv_path_ar="missing_ar"
+fi
+fi
+ac_ct_db_cv_path_ar=$ac_cv_prog_ac_ct_db_cv_path_ar
+if test -n "$ac_ct_db_cv_path_ar"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_ar" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_ar" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ db_cv_path_ar=$ac_ct_db_cv_path_ar
+else
+ db_cv_path_ar="$ac_cv_prog_db_cv_path_ar"
+fi
+
+if test "$db_cv_path_ar" = missing_ar; then
+ { { echo "$as_me:$LINENO: error: No ar utility found." >&5
+echo "$as_me: error: No ar utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}chmod", so it can be a program name with args.
+set dummy ${ac_tool_prefix}chmod; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_chmod+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_chmod"; then
+ ac_cv_prog_db_cv_path_chmod="$db_cv_path_chmod" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_chmod="${ac_tool_prefix}chmod"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+db_cv_path_chmod=$ac_cv_prog_db_cv_path_chmod
+if test -n "$db_cv_path_chmod"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_chmod" >&5
+echo "${ECHO_T}$db_cv_path_chmod" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_db_cv_path_chmod"; then
+ ac_ct_db_cv_path_chmod=$db_cv_path_chmod
+ # Extract the first word of "chmod", so it can be a program name with args.
+set dummy chmod; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_chmod+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_chmod"; then
+ ac_cv_prog_ac_ct_db_cv_path_chmod="$ac_ct_db_cv_path_chmod" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_chmod="chmod"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_chmod" && ac_cv_prog_ac_ct_db_cv_path_chmod="missing_chmod"
+fi
+fi
+ac_ct_db_cv_path_chmod=$ac_cv_prog_ac_ct_db_cv_path_chmod
+if test -n "$ac_ct_db_cv_path_chmod"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_chmod" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_chmod" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ db_cv_path_chmod=$ac_ct_db_cv_path_chmod
+else
+ db_cv_path_chmod="$ac_cv_prog_db_cv_path_chmod"
+fi
+
+if test "$db_cv_path_chmod" = missing_chmod; then
+ { { echo "$as_me:$LINENO: error: No chmod utility found." >&5
+echo "$as_me: error: No chmod utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cp", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cp; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_cp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_cp"; then
+ ac_cv_prog_db_cv_path_cp="$db_cv_path_cp" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_cp="${ac_tool_prefix}cp"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+db_cv_path_cp=$ac_cv_prog_db_cv_path_cp
+if test -n "$db_cv_path_cp"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_cp" >&5
+echo "${ECHO_T}$db_cv_path_cp" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_db_cv_path_cp"; then
+ ac_ct_db_cv_path_cp=$db_cv_path_cp
+ # Extract the first word of "cp", so it can be a program name with args.
+set dummy cp; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_cp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_cp"; then
+ ac_cv_prog_ac_ct_db_cv_path_cp="$ac_ct_db_cv_path_cp" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_cp="cp"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_cp" && ac_cv_prog_ac_ct_db_cv_path_cp="missing_cp"
+fi
+fi
+ac_ct_db_cv_path_cp=$ac_cv_prog_ac_ct_db_cv_path_cp
+if test -n "$ac_ct_db_cv_path_cp"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_cp" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_cp" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ db_cv_path_cp=$ac_ct_db_cv_path_cp
+else
+ db_cv_path_cp="$ac_cv_prog_db_cv_path_cp"
+fi
+
+if test "$db_cv_path_cp" = missing_cp; then
+ { { echo "$as_me:$LINENO: error: No cp utility found." >&5
+echo "$as_me: error: No cp utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+if test "$db_cv_rpm" = "yes"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ldconfig", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ldconfig; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_path_ldconfig+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$path_ldconfig"; then
+ ac_cv_prog_path_ldconfig="$path_ldconfig" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_path_ldconfig="${ac_tool_prefix}ldconfig"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+path_ldconfig=$ac_cv_prog_path_ldconfig
+if test -n "$path_ldconfig"; then
+ echo "$as_me:$LINENO: result: $path_ldconfig" >&5
+echo "${ECHO_T}$path_ldconfig" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_path_ldconfig"; then
+ ac_ct_path_ldconfig=$path_ldconfig
+ # Extract the first word of "ldconfig", so it can be a program name with args.
+set dummy ldconfig; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_path_ldconfig+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_path_ldconfig"; then
+ ac_cv_prog_ac_ct_path_ldconfig="$ac_ct_path_ldconfig" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_path_ldconfig="ldconfig"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_path_ldconfig" && ac_cv_prog_ac_ct_path_ldconfig="missing_ldconfig"
+fi
+fi
+ac_ct_path_ldconfig=$ac_cv_prog_ac_ct_path_ldconfig
+if test -n "$ac_ct_path_ldconfig"; then
+ echo "$as_me:$LINENO: result: $ac_ct_path_ldconfig" >&5
+echo "${ECHO_T}$ac_ct_path_ldconfig" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ path_ldconfig=$ac_ct_path_ldconfig
+else
+ path_ldconfig="$ac_cv_prog_path_ldconfig"
+fi
+
+ # Extract the first word of "$path_ldconfig", so it can be a program name with args.
+set dummy $path_ldconfig; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_db_cv_path_ldconfig+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $db_cv_path_ldconfig in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_db_cv_path_ldconfig="$db_cv_path_ldconfig" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_db_cv_path_ldconfig="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_db_cv_path_ldconfig" && ac_cv_path_db_cv_path_ldconfig="missing_ldconfig"
+ ;;
esac
+fi
+db_cv_path_ldconfig=$ac_cv_path_db_cv_path_ldconfig
-CFLAGS=${CFLAGS-$optimize_def}
-CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
+if test -n "$db_cv_path_ldconfig"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_ldconfig" >&5
+echo "${ECHO_T}$db_cv_path_ldconfig" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-if test "$db_cv_debug" = yes; then
- cat >> confdefs.h <<\EOF
-#define DEBUG 1
-EOF
+ if test "$db_cv_path_ldconfig" != missing_ldconfig; then
+ RPM_POST_INSTALL="%post -p $db_cv_path_ldconfig"
+ RPM_POST_UNINSTALL="%postun -p $db_cv_path_ldconfig"
+ fi
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ln", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ln; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_ln+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_ln"; then
+ ac_cv_prog_db_cv_path_ln="$db_cv_path_ln" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_ln="${ac_tool_prefix}ln"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
- CFLAGS="$CFLAGS -g"
- CXXFLAGS="$CXXFLAGS -g"
+fi
+fi
+db_cv_path_ln=$ac_cv_prog_db_cv_path_ln
+if test -n "$db_cv_path_ln"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_ln" >&5
+echo "${ECHO_T}$db_cv_path_ln" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-# Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1026: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$ac_cv_prog_db_cv_path_ln"; then
+ ac_ct_db_cv_path_ln=$db_cv_path_ln
+ # Extract the first word of "ln", so it can be a program name with args.
+set dummy ln; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_ln+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
+ if test -n "$ac_ct_db_cv_path_ln"; then
+ ac_cv_prog_ac_ct_db_cv_path_ln="$ac_ct_db_cv_path_ln" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_ln="ln"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_ln" && ac_cv_prog_ac_ct_db_cv_path_ln="missing_ln"
fi
fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ac_ct_db_cv_path_ln=$ac_cv_prog_ac_ct_db_cv_path_ln
+if test -n "$ac_ct_db_cv_path_ln"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_ln" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_ln" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1055: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ db_cv_path_ln=$ac_ct_db_cv_path_ln
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
+ db_cv_path_ln="$ac_cv_prog_db_cv_path_ln"
+fi
+
+if test "$db_cv_path_ln" = missing_ln; then
+ { { echo "$as_me:$LINENO: error: No ln utility found." >&5
+echo "$as_me: error: No ln utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mkdir", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mkdir; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_mkdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ if test -n "$db_cv_path_mkdir"; then
+ ac_cv_prog_db_cv_path_mkdir="$db_cv_path_mkdir" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_mkdir="${ac_tool_prefix}mkdir"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+db_cv_path_mkdir=$ac_cv_prog_db_cv_path_mkdir
+if test -n "$db_cv_path_mkdir"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_mkdir" >&5
+echo "${ECHO_T}$db_cv_path_mkdir" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1084: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$ac_cv_prog_db_cv_path_mkdir"; then
+ ac_ct_db_cv_path_mkdir=$db_cv_path_mkdir
+ # Extract the first word of "mkdir", so it can be a program name with args.
+set dummy mkdir; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_mkdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
+ if test -n "$ac_ct_db_cv_path_mkdir"; then
+ ac_cv_prog_ac_ct_db_cv_path_mkdir="$ac_ct_db_cv_path_mkdir" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_mkdir="mkdir"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_mkdir" && ac_cv_prog_ac_ct_db_cv_path_mkdir="missing_mkdir"
fi
fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ac_ct_db_cv_path_mkdir=$ac_cv_prog_ac_ct_db_cv_path_mkdir
+if test -n "$ac_ct_db_cv_path_mkdir"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_mkdir" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_mkdir" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1114: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ db_cv_path_mkdir=$ac_ct_db_cv_path_mkdir
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
+ db_cv_path_mkdir="$ac_cv_prog_db_cv_path_mkdir"
+fi
+
+if test "$db_cv_path_mkdir" = missing_mkdir; then
+ { { echo "$as_me:$LINENO: error: No mkdir utility found." >&5
+echo "$as_me: error: No mkdir utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# We need a complete path for ranlib, because it doesn't exist on some
+# architectures because the ar utility packages the library itself.
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_path_ranlib+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$path_ranlib"; then
+ ac_cv_prog_path_ranlib="$path_ranlib" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_path_ranlib="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+path_ranlib=$ac_cv_prog_path_ranlib
+if test -n "$path_ranlib"; then
+ echo "$as_me:$LINENO: result: $path_ranlib" >&5
+echo "${ECHO_T}$path_ranlib" >&6
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# -gt 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- set dummy "$ac_dir/$ac_word" "$@"
- shift
- ac_cv_prog_CC="$@"
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_path_ranlib"; then
+ ac_ct_path_ranlib=$path_ranlib
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_path_ranlib+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_path_ranlib"; then
+ ac_cv_prog_ac_ct_path_ranlib="$ac_ct_path_ranlib" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_path_ranlib="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_path_ranlib" && ac_cv_prog_ac_ct_path_ranlib="missing_ranlib"
fi
fi
+ac_ct_path_ranlib=$ac_cv_prog_ac_ct_path_ranlib
+if test -n "$ac_ct_path_ranlib"; then
+ echo "$as_me:$LINENO: result: $ac_ct_path_ranlib" >&5
+echo "${ECHO_T}$ac_ct_path_ranlib" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+
+ path_ranlib=$ac_ct_path_ranlib
else
- echo "$ac_t""no" 1>&6
+ path_ranlib="$ac_cv_prog_path_ranlib"
fi
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1165: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Extract the first word of "$path_ranlib", so it can be a program name with args.
+set dummy $path_ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_db_cv_path_ranlib+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
+ case $db_cv_path_ranlib in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_db_cv_path_ranlib="$db_cv_path_ranlib" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_db_cv_path_ranlib="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_db_cv_path_ranlib" && ac_cv_path_db_cv_path_ranlib="missing_ranlib"
+ ;;
+esac
+fi
+db_cv_path_ranlib=$ac_cv_path_db_cv_path_ranlib
+
+if test -n "$db_cv_path_ranlib"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_ranlib" >&5
+echo "${ECHO_T}$db_cv_path_ranlib" >&6
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}rm", so it can be a program name with args.
+set dummy ${ac_tool_prefix}rm; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_rm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_rm"; then
+ ac_cv_prog_db_cv_path_rm="$db_cv_path_rm" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_rm="${ac_tool_prefix}rm"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CC="$ac_cv_prog_CC"
-if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+db_cv_path_rm=$ac_cv_prog_db_cv_path_rm
+if test -n "$db_cv_path_rm"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_rm" >&5
+echo "${ECHO_T}$db_cv_path_rm" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- ;;
- esac
+
+fi
+if test -z "$ac_cv_prog_db_cv_path_rm"; then
+ ac_ct_db_cv_path_rm=$db_cv_path_rm
+ # Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_rm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_rm"; then
+ ac_cv_prog_ac_ct_db_cv_path_rm="$ac_ct_db_cv_path_rm" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_rm="rm"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_rm" && ac_cv_prog_ac_ct_db_cv_path_rm="missing_rm"
+fi
+fi
+ac_ct_db_cv_path_rm=$ac_cv_prog_ac_ct_db_cv_path_rm
+if test -n "$ac_ct_db_cv_path_rm"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_rm" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_rm" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1197: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+ db_cv_path_rm=$ac_ct_db_cv_path_rm
+else
+ db_cv_path_rm="$ac_cv_prog_db_cv_path_rm"
+fi
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+if test "$db_cv_path_rm" = missing_rm; then
+ { { echo "$as_me:$LINENO: error: No rm utility found." >&5
+echo "$as_me: error: No rm utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
-cat > conftest.$ac_ext << EOF
+if test "$db_cv_rpm" = "yes"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}rpm", so it can be a program name with args.
+set dummy ${ac_tool_prefix}rpm; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_rpm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_rpm"; then
+ ac_cv_prog_db_cv_path_rpm="$db_cv_path_rpm" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_rpm="${ac_tool_prefix}rpm"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-#line 1208 "configure"
-#include "confdefs.h"
+fi
+fi
+db_cv_path_rpm=$ac_cv_prog_db_cv_path_rpm
+if test -n "$db_cv_path_rpm"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_rpm" >&5
+echo "${ECHO_T}$db_cv_path_rpm" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-main(){return(0);}
-EOF
-if { (eval echo configure:1213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
+fi
+if test -z "$ac_cv_prog_db_cv_path_rpm"; then
+ ac_ct_db_cv_path_rpm=$db_cv_path_rpm
+ # Extract the first word of "rpm", so it can be a program name with args.
+set dummy rpm; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_rpm+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_rpm"; then
+ ac_cv_prog_ac_ct_db_cv_path_rpm="$ac_ct_db_cv_path_rpm" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_rpm="rpm"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_rpm" && ac_cv_prog_ac_ct_db_cv_path_rpm="missing_rpm"
+fi
+fi
+ac_ct_db_cv_path_rpm=$ac_cv_prog_ac_ct_db_cv_path_rpm
+if test -n "$ac_ct_db_cv_path_rpm"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_rpm" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_rpm" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ db_cv_path_rpm=$ac_ct_db_cv_path_rpm
+else
+ db_cv_path_rpm="$ac_cv_prog_db_cv_path_rpm"
+fi
+
+ if test "$db_cv_path_rpm" = missing_rpm; then
+ { { echo "$as_me:$LINENO: error: No rpm utility found." >&5
+echo "$as_me: error: No rpm utility found." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+# We need a complete path for sh, because some implementations of make
+# get upset if SHELL is set to just the command name.
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}sh", so it can be a program name with args.
+set dummy ${ac_tool_prefix}sh; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_path_sh+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$path_sh"; then
+ ac_cv_prog_path_sh="$path_sh" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_path_sh="${ac_tool_prefix}sh"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+path_sh=$ac_cv_prog_path_sh
+if test -n "$path_sh"; then
+ echo "$as_me:$LINENO: result: $path_sh" >&5
+echo "${ECHO_T}$path_sh" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_path_sh"; then
+ ac_ct_path_sh=$path_sh
+ # Extract the first word of "sh", so it can be a program name with args.
+set dummy sh; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_path_sh+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_path_sh"; then
+ ac_cv_prog_ac_ct_path_sh="$ac_ct_path_sh" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_path_sh="sh"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_path_sh" && ac_cv_prog_ac_ct_path_sh="missing_sh"
+fi
+fi
+ac_ct_path_sh=$ac_cv_prog_ac_ct_path_sh
+if test -n "$ac_ct_path_sh"; then
+ echo "$as_me:$LINENO: result: $ac_ct_path_sh" >&5
+echo "${ECHO_T}$ac_ct_path_sh" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ path_sh=$ac_ct_path_sh
+else
+ path_sh="$ac_cv_prog_path_sh"
+fi
+
+# Extract the first word of "$path_sh", so it can be a program name with args.
+set dummy $path_sh; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_db_cv_path_sh+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $db_cv_path_sh in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_db_cv_path_sh="$db_cv_path_sh" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_db_cv_path_sh="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_db_cv_path_sh" && ac_cv_path_db_cv_path_sh="missing_sh"
+ ;;
+esac
+fi
+db_cv_path_sh=$ac_cv_path_db_cv_path_sh
+
+if test -n "$db_cv_path_sh"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_sh" >&5
+echo "${ECHO_T}$db_cv_path_sh" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test "$db_cv_path_sh" = missing_sh; then
+ { { echo "$as_me:$LINENO: error: No sh utility found." >&5
+echo "$as_me: error: No sh utility found." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# Don't strip the binaries if --enable-debug was specified.
+if test "$db_cv_debug" = yes; then
+ db_cv_path_strip=debug_build_no_strip
+else
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_path_strip+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$path_strip"; then
+ ac_cv_prog_path_strip="$path_strip" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_path_strip="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+path_strip=$ac_cv_prog_path_strip
+if test -n "$path_strip"; then
+ echo "$as_me:$LINENO: result: $path_strip" >&5
+echo "${ECHO_T}$path_strip" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_path_strip"; then
+ ac_ct_path_strip=$path_strip
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_path_strip+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_path_strip"; then
+ ac_cv_prog_ac_ct_path_strip="$ac_ct_path_strip" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_path_strip="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_path_strip" && ac_cv_prog_ac_ct_path_strip="missing_strip"
+fi
+fi
+ac_ct_path_strip=$ac_cv_prog_ac_ct_path_strip
+if test -n "$ac_ct_path_strip"; then
+ echo "$as_me:$LINENO: result: $ac_ct_path_strip" >&5
+echo "${ECHO_T}$ac_ct_path_strip" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ path_strip=$ac_ct_path_strip
+else
+ path_strip="$ac_cv_prog_path_strip"
+fi
+
+ # Extract the first word of "$path_strip", so it can be a program name with args.
+set dummy $path_strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_db_cv_path_strip+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $db_cv_path_strip in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_db_cv_path_strip="$db_cv_path_strip" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_db_cv_path_strip="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_db_cv_path_strip" && ac_cv_path_db_cv_path_strip="missing_strip"
+ ;;
+esac
+fi
+db_cv_path_strip=$ac_cv_path_db_cv_path_strip
+
+if test -n "$db_cv_path_strip"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_strip" >&5
+echo "${ECHO_T}$db_cv_path_strip" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+
+if test "$db_cv_test" = "yes"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}kill", so it can be a program name with args.
+set dummy ${ac_tool_prefix}kill; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_db_cv_path_kill+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$db_cv_path_kill"; then
+ ac_cv_prog_db_cv_path_kill="$db_cv_path_kill" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_db_cv_path_kill="${ac_tool_prefix}kill"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+db_cv_path_kill=$ac_cv_prog_db_cv_path_kill
+if test -n "$db_cv_path_kill"; then
+ echo "$as_me:$LINENO: result: $db_cv_path_kill" >&5
+echo "${ECHO_T}$db_cv_path_kill" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_db_cv_path_kill"; then
+ ac_ct_db_cv_path_kill=$db_cv_path_kill
+ # Extract the first word of "kill", so it can be a program name with args.
+set dummy kill; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_db_cv_path_kill+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_db_cv_path_kill"; then
+ ac_cv_prog_ac_ct_db_cv_path_kill="$ac_ct_db_cv_path_kill" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_db_cv_path_kill="kill"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_db_cv_path_kill" && ac_cv_prog_ac_ct_db_cv_path_kill="missing_kill"
+fi
+fi
+ac_ct_db_cv_path_kill=$ac_cv_prog_ac_ct_db_cv_path_kill
+if test -n "$ac_ct_db_cv_path_kill"; then
+ echo "$as_me:$LINENO: result: $ac_ct_db_cv_path_kill" >&5
+echo "${ECHO_T}$ac_ct_db_cv_path_kill" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ db_cv_path_kill=$ac_ct_db_cv_path_kill
+else
+ db_cv_path_kill="$ac_cv_prog_db_cv_path_kill"
+fi
+
+ if test "$db_cv_path_kill" = missing_kill; then
+ { { echo "$as_me:$LINENO: error: No kill utility found." >&5
+echo "$as_me: error: No kill utility found." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
else
- ac_cv_prog_cc_cross=yes
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+# RPM support: change the standard make and install targets
+if test "$db_cv_rpm" = "yes"; then
+ BUILD_TARGET="rpm_build"
+
+ # Check if we are running RPM version 3 or 4.
+ case "`rpm --version`" in
+ *version\ 4*)
+ RPM_BUILD="rpmbuild"
+ echo "_topdir $CONFIGURATION_PATH" > rpm-macro-defines;;
+ *version\ 3*)
+ RPM_BUILD="rpm"
+ echo "topdir: $CONFIGURATION_PATH" > rpm-macro-defines;;
+ esac
+ INSTALL_TARGET="rpm_install"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
+ BUILD_TARGET="library_build"
+ INSTALL_TARGET="library_install"
fi
-rm -fr conftest*
+
+# This is where we handle stuff that autoconf can't handle: compiler,
+# preprocessor and load flags, libraries that the standard tests don't
+# look for. The default optimization is -O. We would like to set the
+# default optimization for systems using gcc to -O2, but we can't. By
+# the time we know we're using gcc, it's too late to set optimization
+# flags.
+#
+# There are additional libraries we need for some compiler/architecture
+# combinations.
+#
+# Some architectures require DB to be compiled with special flags and/or
+# libraries for threaded applications
+#
+# The makefile CC may be different than the CC used in config testing,
+# because the makefile CC may be set to use $(LIBTOOL).
+#
+# XXX
+# Don't override anything if it's already set from the environment.
+optimize_def="-O"
+case "$host_os" in
+aix4.3.*|aix5*)
+ optimize_def="-O2"
+ CC=${CC-"xlc_r"}
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LDFLAGS="$LDFLAGS -Wl,-brtl";;
+bsdi3*) optimize_def="-O2"
+ CC=${CC-"shlicc2"}
+ LIBS="$LIBS -lipc";;
+bsdi*) optimize_def="-O2";;
+cygwin*)
+ optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
+freebsd*)
+ optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LDFLAGS="$LDFLAGS -pthread";;
+gnu*|k*bsd*-gnu|linux*)
+ optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
+hpux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
+irix*) optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_SGI_MP_SOURCE";;
+mpeix*) CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE -D_SOCKET_SOURCE"
+ LIBS="$LIBS -lsocket -lsvipc";;
+osf*) CPPFLAGS="$CPPFLAGS -pthread";;
+*qnx*) cat >>confdefs.h <<\_ACEOF
+#define HAVE_QNX 1
+_ACEOF
+
+
+;;
+solaris*)
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
+esac
+
+# Set CFLAGS/CXXFLAGS. We MUST set the flags before we call autoconf
+# compiler configuration macros, because if we don't, they set CFLAGS
+# to no optimization and -g, which isn't what we want.
+CFLAGS=${CFLAGS-$optimize_def}
+CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
+
+# If the user wants a debugging environment, add -g to the CFLAGS value.
+#
+# XXX
+# Some compilers can't mix optimizing and debug flags. The only way to
+# handle this is to specify CFLAGS in the environment before configuring.
+if test "$db_cv_debug" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define DEBUG 1
+_ACEOF
+
+
+
+
+ CFLAGS="$CFLAGS -g"
+ CXXFLAGS="$CXXFLAGS -g"
+ db_cv_build_type=debug
+else
+ db_cv_build_type=release
+fi
+
+
+# The default compiler is cc (NOT gcc), the default CFLAGS is as specified
+# above, NOT what is set by AC_PROG_CC, as it won't set optimization flags
+# for any compiler other than gcc.
ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in cc gcc
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1239: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1244: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cc gcc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
- ac_cv_prog_gcc=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+ test -n "$ac_ct_CC" && break
+done
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
+ CC=$ac_ct_CC
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
else
- GCC=
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
fi
-
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1272: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cc_g=yes
else
- ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
+ CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
@@ -1298,2281 +3978,23322 @@ else
CFLAGS=
fi
fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+fi
-MAKEFILE_CC=${CC}
-MAKEFILE_CCLINK="\$(CC)"
-MAKEFILE_CXX="nocxx"
-
-if test "$db_cv_diagnostic" = yes; then
- cat >> confdefs.h <<\EOF
-#define DIAGNOSTIC 1
-EOF
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
fi
-if test "$db_cv_debug_rop" = yes; then
- cat >> confdefs.h <<\EOF
-#define DEBUG_ROP 1
-EOF
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
-if test "$db_cv_debug_wop" = yes; then
- cat >> confdefs.h <<\EOF
-#define DEBUG_WOP 1
-EOF
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Checks for compiler characteristics.
+
+
+
+DB_PROTO1="#undef __P"
+
+# AC_PROG_CC_STDC only sets ac_cv_prog_cc_stdc if the test fails, so
+# check for "no", not "yes".
+if test "$ac_cv_prog_cc_stdc" = "no"; then
+ DB_PROTO2="#define __P(protos) ()"
+else
+ DB_PROTO2="#define __P(protos) protos"
+fi
+
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_c_const=no
fi
-if test "$db_cv_umrw" = yes; then
- cat >> confdefs.h <<\EOF
-#define UMRW 1
-EOF
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
fi
-if test "$db_cv_test" = yes; then
- cat >> confdefs.h <<\EOF
-#define CONFIG_TEST 1
-EOF
+
+if test "$ac_cv_c_const" != "yes"; then
+ DB_CONST="#define const"
fi
+# Because of shared library building, the ${CC} used for config tests
+# may be different than the ${CC} we want to put in the Makefile.
+# The latter is known as ${MAKEFILE_CC} in this script.
+MAKEFILE_CC="${CC}"
+MAKEFILE_CCLINK="${CC}"
+MAKEFILE_CXX="nocxx"
+MAKEFILE_CXXLINK="nocxx"
+
+# See if we need the C++ compiler at all. If so, we'd like to find one that
+# interoperates with the C compiler we chose. Since we prefered cc over gcc,
+# we'll also prefer the vendor's compiler over g++/gcc. If we're wrong, the
+# user can set CC and CXX in their environment before running configure.
+#
+# AC_PROG_CXX sets CXX, but it uses $CXX and $CCC (in that order) as its
+# first choices.
if test "$db_cv_cxx" = "yes"; then
if test "$GCC" != "yes"; then
case "$host_os" in
- aix*) # Extract the first word of "xlC_r", so it can be a program name with args.
+ aix*) if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}xlC_r", so it can be a program name with args.
+set dummy ${ac_tool_prefix}xlC_r; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CCC"; then
+ ac_cv_prog_CCC="$CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCC="${ac_tool_prefix}xlC_r"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CCC=$ac_cv_prog_CCC
+if test -n "$CCC"; then
+ echo "$as_me:$LINENO: result: $CCC" >&5
+echo "${ECHO_T}$CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CCC"; then
+ ac_ct_CCC=$CCC
+ # Extract the first word of "xlC_r", so it can be a program name with args.
set dummy xlC_r; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1345: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CCC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CCC"; then
+ ac_cv_prog_ac_ct_CCC="$ac_ct_CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCC="xlC_r"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CCC=$ac_cv_prog_ac_ct_CCC
+if test -n "$ac_ct_CCC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CCC" >&5
+echo "${ECHO_T}$ac_ct_CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CCC=$ac_ct_CCC
+else
+ CCC="$ac_cv_prog_CCC"
+fi
+
+ LIBXSO_LIBS="-lC_r $LIBXSO_LIBS"
+ LIBS="-lC_r $LIBS";;
+ hpux*) if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}aCC", so it can be a program name with args.
+set dummy ${ac_tool_prefix}aCC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CCC"; then
ac_cv_prog_CCC="$CCC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CCC="xlC_r"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCC="${ac_tool_prefix}aCC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CCC="$ac_cv_prog_CCC"
+CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$ac_t""$CCC" 1>&6
+ echo "$as_me:$LINENO: result: $CCC" >&5
+echo "${ECHO_T}$CCC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-;;
- hpux*) # Extract the first word of "aCC", so it can be a program name with args.
+
+fi
+if test -z "$ac_cv_prog_CCC"; then
+ ac_ct_CCC=$CCC
+ # Extract the first word of "aCC", so it can be a program name with args.
set dummy aCC; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1374: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CCC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CCC"; then
+ ac_cv_prog_ac_ct_CCC="$ac_ct_CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCC="aCC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CCC=$ac_cv_prog_ac_ct_CCC
+if test -n "$ac_ct_CCC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CCC" >&5
+echo "${ECHO_T}$ac_ct_CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CCC=$ac_ct_CCC
+else
+ CCC="$ac_cv_prog_CCC"
+fi
+;;
+ irix*) if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}CC", so it can be a program name with args.
+set dummy ${ac_tool_prefix}CC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CCC"; then
ac_cv_prog_CCC="$CCC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CCC="aCC"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCC="${ac_tool_prefix}CC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CCC="$ac_cv_prog_CCC"
+CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$ac_t""$CCC" 1>&6
+ echo "$as_me:$LINENO: result: $CCC" >&5
+echo "${ECHO_T}$CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CCC"; then
+ ac_ct_CCC=$CCC
+ # Extract the first word of "CC", so it can be a program name with args.
+set dummy CC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CCC"; then
+ ac_cv_prog_ac_ct_CCC="$ac_ct_CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCC="CC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CCC=$ac_cv_prog_ac_ct_CCC
+if test -n "$ac_ct_CCC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CCC" >&5
+echo "${ECHO_T}$ac_ct_CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CCC=$ac_ct_CCC
else
- echo "$ac_t""no" 1>&6
+ CCC="$ac_cv_prog_CCC"
fi
;;
- osf*) # Extract the first word of "cxx", so it can be a program name with args.
-set dummy cxx; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1403: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CCC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ osf*) if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cxx", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cxx; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CCC"; then
ac_cv_prog_CCC="$CCC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CCC="cxx"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCC="${ac_tool_prefix}cxx"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CCC="$ac_cv_prog_CCC"
+CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$ac_t""$CCC" 1>&6
+ echo "$as_me:$LINENO: result: $CCC" >&5
+echo "${ECHO_T}$CCC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CCC"; then
+ ac_ct_CCC=$CCC
+ # Extract the first word of "cxx", so it can be a program name with args.
+set dummy cxx; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CCC"; then
+ ac_cv_prog_ac_ct_CCC="$ac_ct_CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCC="cxx"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CCC=$ac_cv_prog_ac_ct_CCC
+if test -n "$ac_ct_CCC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CCC" >&5
+echo "${ECHO_T}$ac_ct_CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CCC=$ac_ct_CCC
+else
+ CCC="$ac_cv_prog_CCC"
fi
;;
- solaris*) # Extract the first word of "CC", so it can be a program name with args.
-set dummy CC; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1432: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CCC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ solaris*) if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}CC", so it can be a program name with args.
+set dummy ${ac_tool_prefix}CC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CCC"; then
ac_cv_prog_CCC="$CCC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CCC="CC"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CCC="${ac_tool_prefix}CC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CCC="$ac_cv_prog_CCC"
+CCC=$ac_cv_prog_CCC
if test -n "$CCC"; then
- echo "$ac_t""$CCC" 1>&6
+ echo "$as_me:$LINENO: result: $CCC" >&5
+echo "${ECHO_T}$CCC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CCC"; then
+ ac_ct_CCC=$CCC
+ # Extract the first word of "CC", so it can be a program name with args.
+set dummy CC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CCC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CCC"; then
+ ac_cv_prog_ac_ct_CCC="$ac_ct_CCC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CCC="CC"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CCC=$ac_cv_prog_ac_ct_CCC
+if test -n "$ac_ct_CCC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CCC" >&5
+echo "${ECHO_T}$ac_ct_CCC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CCC=$ac_ct_CCC
+else
+ CCC="$ac_cv_prog_CCC"
fi
;;
esac
fi
- for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1465: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CXX="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
fi
-CXX="$ac_cv_prog_CXX"
+CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- echo "$ac_t""$CXX" 1>&6
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-test -n "$CXX" && break
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
-test -n "$CXX" || CXX="gcc"
-
-
-echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1497: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
-ac_ext=C
-# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cxx_cross
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-cat > conftest.$ac_ext << EOF
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
-#line 1508 "configure"
-#include "confdefs.h"
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-int main(){return(0);}
-EOF
-if { (eval echo configure:1513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cxx_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cxx_cross=no
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
else
- ac_cv_prog_cxx_cross=yes
+ CXXFLAGS="-g"
fi
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cxx_works=no
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
fi
-rm -fr conftest*
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
-if test $ac_cv_prog_cxx_works = no; then
- { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1539: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
-cross_compiling=$ac_cv_prog_cxx_cross
-
-echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1544: checking whether we are using GNU C++" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.C <<EOF
-#ifdef __GNUC__
- yes;
+ ###### WORKAROUND: SEE SR #7938
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
#endif
-EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1553: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gxx=yes
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- ac_cv_prog_gxx=no
-fi
+ ac_cpp_err=yes
fi
-
-echo "$ac_t""$ac_cv_prog_gxx" 1>&6
-
-if test $ac_cv_prog_gxx = yes; then
- GXX=yes
+if test -z "$ac_cpp_err"; then
+ :
else
- GXX=
-fi
-
-ac_test_CXXFLAGS="${CXXFLAGS+set}"
-ac_save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS=
-echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1572: checking whether ${CXX-g++} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- echo 'void f(){}' > conftest.cc
-if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
- ac_cv_prog_cxx_g=yes
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
else
- ac_cv_prog_cxx_g=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
fi
-echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
-if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS="$ac_save_CXXFLAGS"
-elif test $ac_cv_prog_cxx_g = yes; then
- if test "$GXX" = yes; then
- CXXFLAGS="-g -O2"
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
else
- CXXFLAGS="-g"
+ ac_cpp_err=
fi
else
- if test "$GXX" = yes; then
- CXXFLAGS="-O2"
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
else
- CXXFLAGS=
+ ac_cpp_err=
fi
+else
+ ac_cpp_err=yes
fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
- MAKEFILE_CXX=${CXX}
+ # Passes both tests.
+ac_preproc_ok=:
+break
fi
+rm -f conftest.err conftest.$ac_ext
-if test "$GXX" = "yes"; then
- CXXVERSION=`${MAKEFILE_CXX} --version`
- case ${CXXVERSION} in
- 1.*|2.[01234567].*|*-1.*|*-2.[01234567].* )
- CXXFLAGS="-fhandle-exceptions $CXXFLAGS";;
- * ) CXXFLAGS="-fexceptions $CXXFLAGS";;
- esac
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
fi
-export CC CCC
-CCC=CXX
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-LIBDB_ARGS="libdb.a"
-LIBTOOL="nolibtool"
-POSTLINK="@true"
-SOSUFFIX="so"
-if test "$db_cv_dynamic" = "yes"; then
- SAVE_CC="${MAKEFILE_CC}"
- SAVE_CXX="${MAKEFILE_CXX}"
-
- # Configure libtool.
- echo $ac_n "checking libtool configuration""... $ac_c" 1>&6
-echo "configure:1628: checking libtool configuration" >&5
- echo "$ac_t""" 1>&6
- ${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig \
- --no-verify $srcdir/ltmain.sh \
- --output=./libtool $host_os \
- --disable-static \
- || { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
-
- SOSUFFIX=`sed -e '/^library_names_spec=/!d' -e 's/.*\.\([a-zA-Z0-9_]*\).*/\1/' ./libtool`
- DEFAULT_LIB="\$(libso_target)"
- DEFAULT_INSTALL="install_dynamic"
- LIBDB_ARGS="\$(libso_linkname)"
- LIBTOOL="\$(SHELL) ./libtool"
+ ###############################
- MAKEFILE_CC="\$(LIBTOOL) --mode=compile ${SAVE_CC}"
- MAKEFILE_CXX="\$(LIBTOOL) --mode=compile ${SAVE_CXX}"
- MAKEFILE_CCLINK="\$(LIBTOOL) --mode=link ${SAVE_CC}"
- INSTALLER="\$(LIBTOOL) --mode=install cp"
- POSTLINK="\$(LIBTOOL) --mode=execute true"
- SOLINK="\$(LIBTOOL) --mode=link ${SAVE_CC} -avoid-version"
- SOFLAGS="-rpath \$(libdir)"
- o=".lo"
+
+echo "$as_me:$LINENO: checking whether C++ supports the ISO C++ standard includes" >&5
+echo $ECHO_N "checking whether C++ supports the ISO C++ standard includes... $ECHO_C" >&6
+if test "${db_cv_cxx_have_stdheaders+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <iostream>
+
+int
+main ()
+{
+std::ostream *o; return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_cxx_have_stdheaders=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+db_cv_cxx_have_stdheaders=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+echo "$as_me:$LINENO: result: $db_cv_cxx_have_stdheaders" >&5
+echo "${ECHO_T}$db_cv_cxx_have_stdheaders" >&6
+if test "$db_cv_cxx_have_stdheaders" = yes; then
+ cxx_have_stdheaders="#define HAVE_CXX_STDHEADERS 1"
+fi
+ MAKEFILE_CXX="${CXX}"
+ MAKEFILE_CXXLINK="${CXX}"
fi
-if test "$db_cv_cxx" = "yes"; then
- if test "$db_cv_dynamic" = "yes"; then
- ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libxso_target)"
- DEFAULT_INSTALL="${DEFAULT_INSTALL} install_dynamic_cxx"
+# Do some gcc specific configuration.
+
+echo "$as_me:$LINENO: checking whether we are using gcc version 2.96" >&5
+echo $ECHO_N "checking whether we are using gcc version 2.96... $ECHO_C" >&6
+if test "${db_cv_gcc_2_96+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+db_cv_gcc_2_96=no
+if test "$GCC" = "yes"; then
+ GCC_VERSION=`${MAKEFILE_CC} --version`
+ case ${GCC_VERSION} in
+ 2.96*)
+ db_cv_gcc_2_96=yes;;
+ esac
+fi
+fi
+echo "$as_me:$LINENO: result: $db_cv_gcc_2_96" >&5
+echo "${ECHO_T}$db_cv_gcc_2_96" >&6
+if test "$db_cv_gcc_2_96" = "yes"; then
+ CFLAGS=`echo "$CFLAGS" | sed 's/-O2/-O/'`
+ CXXFLAGS=`echo "$CXXFLAGS" | sed 's/-O2/-O/'`
+ { echo "$as_me:$LINENO: WARNING: INSTALLED GCC COMPILER HAS SERIOUS BUGS; PLEASE UPGRADE." >&5
+echo "$as_me: WARNING: INSTALLED GCC COMPILER HAS SERIOUS BUGS; PLEASE UPGRADE." >&2;}
+ { echo "$as_me:$LINENO: WARNING: GCC OPTIMIZATION LEVEL SET TO -O." >&5
+echo "$as_me: WARNING: GCC OPTIMIZATION LEVEL SET TO -O." >&2;}
+fi
+
+echo "$as_me:$LINENO: checking whether g++ requires -fhandle-exceptions" >&5
+echo $ECHO_N "checking whether g++ requires -fhandle-exceptions... $ECHO_C" >&6
+if test "${db_cv_gxx_except+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+db_cv_gxx_except=no;
+if test "$GXX" = "yes"; then
+ GXX_VERSION=`${MAKEFILE_CXX} --version`
+ case ${GXX_VERSION} in
+ 1.*|2.[01234567].*|*-1.*|*-2.[01234567].*)
+ db_cv_gxx_except=yes;;
+ esac
+fi
+fi
+echo "$as_me:$LINENO: result: $db_cv_gxx_except" >&5
+echo "${ECHO_T}$db_cv_gxx_except" >&6
+if test "$db_cv_gxx_except" = "yes"; then
+ CXXFLAGS="$CXXFLAGS -fhandle-exceptions"
+fi
+
+# We need the -Kthread/-pthread flag when compiling on SCO/Caldera's UnixWare
+# and OpenUNIX releases. We can't make the test until we know which compiler
+# we're using.
+case "$host_os" in
+sysv5UnixWare*|sysv5OpenUNIX8*)
+ if test "$GCC" == "yes"; then
+ CPPFLAGS="$CPPFLAGS -pthread"
+ LDFLAGS="$LDFLAGS -pthread"
else
- ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libcxx)"
- DEFAULT_INSTALL="${DEFAULT_INSTALL} install_static_cxx"
+ CPPFLAGS="$CPPFLAGS -Kthread"
+ LDFLAGS="$LDFLAGS -Kthread"
+ fi;;
+esac
+
+# Export our compiler preferences for the libtool configuration.
+export CC CCC
+CCC=CXX
+
+# Libtool configuration.
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+ enableval="$enable_shared"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
fi
-fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_shared=yes
+fi;
-if test "$db_cv_java" = "yes"; then
- if test "$db_cv_dynamic" != "yes"; then
- { echo "configure: error: --enable-java requires --enable-dynamic" 1>&2; exit 1; }
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+ enableval="$enable_static"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else
+ enable_static=yes
+fi;
- # Extract the first word of "javac", so it can be a program name with args.
-set dummy javac; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1671: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_JAVAC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+ enableval="$enable_fast_install"
+ p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
else
- if test -n "$JAVAC"; then
- ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+ enable_fast_install=yes
+fi;
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_JAVAC="javac"
- break
+ # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
fi
done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_JAVAC" && ac_cv_prog_JAVAC="nojavac"
-fi
+done
+SED=$lt_cv_path_SED
+
fi
-JAVAC="$ac_cv_prog_JAVAC"
-if test -n "$JAVAC"; then
- echo "$ac_t""$JAVAC" 1>&6
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
- if test "$JAVAC" = "nojavac"; then
- { echo "configure: error: no javac compiler in PATH" 1>&2; exit 1; }
- fi
- # Extract the first word of "jar", so it can be a program name with args.
-set dummy jar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1704: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_JAR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
else
- if test -n "$JAR"; then
- ac_cv_prog_JAR="$JAR" # Let the user override the test.
+ with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_JAR="jar"
- break
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
fi
done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_JAR" && ac_cv_prog_JAR="nojar"
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
fi
-JAR="$ac_cv_prog_JAR"
-if test -n "$JAR"; then
- echo "$ac_t""$JAR" 1>&6
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-
- if test "$JAR" = "nojar"; then
- { echo "configure: error: no jar utility in PATH" 1>&2; exit 1; }
- fi
- # Extract the first word of "javac", so it can be a program name with args.
-set dummy javac; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1737: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_JAVACABS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- case "$JAVACABS" in
- /*)
- ac_cv_path_JAVACABS="$JAVACABS" # Let the user override the test with a path.
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `"$LD" -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
;;
- ?:/*)
- ac_cv_path_JAVACABS="$JAVACABS" # Let the user override the test with a dos path.
+*)
+ lt_cv_prog_gnu_ld=no
;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_JAVACABS="$ac_dir/$ac_word"
- break
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
fi
done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_JAVACABS" && ac_cv_path_JAVACABS="nojavac"
+ IFS="$lt_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin* | mingw* | pw32*)
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ case $host_cpu in
+ alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*)
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx | nto-qnx6*)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
;;
esac
+
fi
-JAVACABS="$ac_cv_path_JAVACABS"
-if test -n "$JAVACABS"; then
- echo "$ac_t""$JAVACABS" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
- ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libjso_target)"
- ADDITIONAL_LANG="$ADDITIONAL_LANG java"
- DEFAULT_INSTALL="${DEFAULT_INSTALL} install_java"
-
- while ls -ld "$JAVACABS" 2>/dev/null | grep " -> " >/dev/null; do
- echo $ac_n "checking symlink for $JAVACABS""... $ac_c" 1>&6
-echo "configure:1776: checking symlink for $JAVACABS" >&5
- JAVACLINK=`ls -ld $JAVACABS | sed 's/.* -> //'`
- case "$JAVACLINK" in
- /*) JAVACABS="$JAVACLINK";;
- *) JAVACABS=`echo "X$JAVACABS" | sed -e 's/^X//' -e 's:[^/]*$::'`"$JAVACLINK";;
- esac
- echo "$ac_t""$JAVACABS" 1>&6
- done
- JTOPDIR=`echo "$JAVACABS" | sed -e 's://*:/:g' -e 's:/[^/]*$::'`
- if test -f "$JTOPDIR/include/jni.h"; then
- CPPFLAGS="$CPPFLAGSS -I$JTOPDIR/include"
- else
- JTOPDIR=`echo "$JTOPDIR" | sed -e 's:/[^/]*$::'`
- if test -f "$JTOPDIR/include/jni.h"; then
- CPPFLAGS="$CPPFLAGS -I$JTOPDIR/include"
- else
- { echo "configure: error: cannot find java include files" 1>&2; exit 1; }
- fi
- fi
- case "$host_os" in
- solaris*) JINCSUBDIRS="solaris";;
- linux*) JINCSUBDIRS="linux genunix";;
- *) JINCSUBDIRS="genunix";;
- esac
- for JINCSUBDIR in $JINCSUBDIRS
- do
- if test -d "$JTOPDIR/include/$JINCSUBDIR"; then
- CPPFLAGS="$CPPFLAGS -I$JTOPDIR/include/$JINCSUBDIR"
- fi
- done
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 5993 "configure"' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- JAVAC=nojavac
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ lt_cv_cc_needs_belf=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
-if test "$db_cv_rpc" = "yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_RPC 1
-EOF
+esac
+need_locks="$enable_libtool_lock"
- RPC_OBJS="\$(RPC_OBJS)"
- ADDITIONAL_PROGS="berkeley_db_svc $ADDITIONAL_PROGS"
- case "$host_os" in
- hpux*)
- echo $ac_n "checking for svc_run""... $ac_c" 1>&6
-echo "configure:1824: checking for svc_run" >&5
-if eval "test \"`echo '$''{'ac_cv_func_svc_run'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- cat > conftest.$ac_ext <<EOF
-#line 1829 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char svc_run(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char svc_run();
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-int main() {
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_svc_run) || defined (__stub___svc_run)
-choke me
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
#else
-svc_run();
+# include <assert.h>
#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:1852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_svc_run=yes"
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_svc_run=no"
+ ac_cpp_err=yes
fi
-rm -f conftest*
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-if eval "test \"`echo '$ac_cv_func_'svc_run`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
:
else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for svc_run in -lnsl""... $ac_c" 1>&6
-echo "configure:1870: checking for svc_run in -lnsl" >&5
-ac_lib_var=`echo nsl'_'svc_run | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
else
- ac_save_LIBS="$LIBS"
-LIBS="-lnsl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1878 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char svc_run();
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-int main() {
-svc_run()
-; return 0; }
-EOF
-if { (eval echo configure:1889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ac_cv_header_stdc=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ ac_cv_header_stdc=no
fi
rm -f conftest*
-LIBS="$ac_save_LIBS"
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="-lnsl $LIBS"; LIBTSO_LIBS="-lnsl $LIBTSO_LIBS"
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
else
- echo "$ac_t""no" 1>&6
+ ac_cv_header_stdc=no
fi
+rm -f conftest*
fi
-;;
- solaris*)
- echo $ac_n "checking for svc_run""... $ac_c" 1>&6
-echo "configure:1913: checking for svc_run" >&5
-if eval "test \"`echo '$''{'ac_cv_func_svc_run'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1918 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char svc_run(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char svc_run();
-
-int main() {
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_svc_run) || defined (__stub___svc_run)
-choke me
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#else
-svc_run();
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_svc_run=yes"
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_svc_run=no"
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest*
fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
-if eval "test \"`echo '$ac_cv_func_'svc_run`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- :
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for svc_run in -lnsl""... $ac_c" 1>&6
-echo "configure:1959: checking for svc_run in -lnsl" >&5
-ac_lib_var=`echo nsl'_'svc_run | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
-LIBS="-lnsl $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1967 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char svc_run();
+ eval "$as_ac_Header=$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-int main() {
-svc_run()
-; return 0; }
-EOF
-if { (eval echo configure:1978: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/^a-zA-Z0-9_/_/g' \
- -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
- LIBS="-lnsl $LIBS"
+done
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$F77"; then
+ ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+ echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$F77" && break
+ done
+fi
+if test -z "$F77"; then
+ ac_ct_F77=$F77
+ for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_F77"; then
+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_F77="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-;;
- esac
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$ac_ct_F77" && break
+done
-if test "$db_cv_tcl" != no; then
- if test "$db_cv_dynamic" != "yes"; then
- { echo "configure: error: --with-tcl requires --enable-dynamic" 1>&2; exit 1; }
- fi
+ F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:6837:" \
+ "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+#ifndef __GNUC__
+ choke me
+#endif
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_f77_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+ FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+ if test "$G77" = yes; then
+ FFLAGS="-g -O2"
+ else
+ FFLAGS="-g"
+ fi
+else
+ if test "$G77" = yes; then
+ FFLAGS="-O2"
+ else
+ FFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
- if eval "test \"`echo '$''{'ac_cv_c_tclconfig'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
+ i=0
+ testring="ABCD"
- # First check to see if --with-tclconfig was specified.
- if test "${with_tclconfig}" != no; then
- if test -f "${with_tclconfig}/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
- else
- { echo "configure: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" 1>&2; exit 1; }
- fi
- fi
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
- # check in a few common install locations
- if test x"${ac_cv_c_tclconfig}" = x ; then
- for i in `ls -d /usr/local/lib 2>/dev/null` ; do
- if test -f "$i/tclConfig.sh" ; then
- ac_cv_c_tclconfig=`(cd $i; pwd)`
- break
- fi
- done
- fi
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
-
fi
+if test -n $lt_cv_sys_max_cmd_len ; then
+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+ echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
- if test x"${ac_cv_c_tclconfig}" = x ; then
- TCL_BIN_DIR="# no Tcl configs found"
- { echo "configure: error: can't find Tcl configuration definitions" 1>&2; exit 1; }
- else
- TCL_BIN_DIR=${ac_cv_c_tclconfig}
- fi
-
- echo $ac_n "checking for existence of $TCL_BIN_DIR/tclConfig.sh""... $ac_c" 1>&6
-echo "configure:2056: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5
- if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
- echo "$ac_t""loading" 1>&6
- . $TCL_BIN_DIR/tclConfig.sh
- else
- echo "$ac_t""file not found" 1>&6
- fi
- #
- # The eval is required to do the TCL_DBGX substitution in the
- # TCL_LIB_FILE variable
- #
- eval TCL_LIB_FILE="${TCL_LIB_FILE}"
- eval TCL_LIB_FLAG="${TCL_LIB_FLAG}"
- eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
-
-
-
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-
- TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}"
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
- if test x"$TCL_PREFIX" != x && test -f "$TCL_PREFIX/include/tcl.h"; then
- TCFLAGS="-I$TCL_PREFIX/include"
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris* | sysv5*)
+ symcode='[BDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGISTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
- LIBS="$LIBS $TCL_LIB_SPEC $TCL_LIBS"
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
- ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libtso_target)"
- DEFAULT_INSTALL="${DEFAULT_INSTALL} install_tcl"
fi
-if test "$db_cv_compat185" = "yes"; then
- ADDITIONAL_INCS="db_185.h $ADDITIONAL_INCS"
- ADDITIONAL_OBJS="db185${o} $ADDITIONAL_OBJS"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+ echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
fi
-if test "$db_cv_dump185" = "yes"; then
- ADDITIONAL_PROGS="db_dump185 $ADDITIONAL_PROGS"
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:2101: checking for pthread_create in -lpthread" >&5
-ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
-LIBS="-lpthread $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2109 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char pthread_create();
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-int main() {
-pthread_create()
-; return 0; }
-EOF
-if { (eval echo configure:2120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- DBS_LIBS=-lpthread
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ AR=$ac_ct_AR
+else
+ AR="$ac_cv_prog_AR"
+fi
-echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:2142: checking whether byte ordering is bigendian" >&5
-if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_cv_c_bigendian=unknown
-# See if sys/param.h defines the BYTE_ORDER macro.
-cat > conftest.$ac_ext <<EOF
-#line 2149 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/param.h>
-int main() {
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
- bogus endian macros
-#endif
-; return 0; }
-EOF
-if { (eval echo configure:2160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- # It does; now see whether it defined to BIG_ENDIAN or not.
-cat > conftest.$ac_ext <<EOF
-#line 2164 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/param.h>
-int main() {
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
-#endif
-; return 0; }
-EOF
-if { (eval echo configure:2175: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_bigendian=yes
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_bigendian=no
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
fi
-rm -f conftest*
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftest*
-if test $ac_cv_c_bigendian = unknown; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+
+ RANLIB=$ac_ct_RANLIB
else
- cat > conftest.$ac_ext <<EOF
-#line 2195 "configure"
-#include "confdefs.h"
-main () {
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long l;
- char c[sizeof (long)];
- } u;
- u.l = 1;
- exit (u.c[sizeof (long) - 1] == 1);
-}
-EOF
-if { (eval echo configure:2208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- ac_cv_c_bigendian=no
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_c_bigendian=yes
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-rm -fr conftest*
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
-echo "$ac_t""$ac_cv_c_bigendian" 1>&6
-if test $ac_cv_c_bigendian = yes; then
- cat >> confdefs.h <<\EOF
-#define WORDS_BIGENDIAN 1
EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2232: checking for working const" >&5
-if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2237 "configure"
-#include "confdefs.h"
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
-int main() {
-
-/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
-/* SunOS 4.1.1 cc rejects this. */
-char const *const *ccp;
-char **p;
-/* NEC SVR4.0.2 mips cc rejects this. */
-struct point {int x, y;};
-static struct point const zero = {0,0};
-/* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in an arm
- of an if-expression whose if-part is not a constant expression */
-const char *g = "string";
-ccp = &g + (g ? g-g : 0);
-/* HPUX 7.0 cc rejects these. */
-++ccp;
-p = (char**) ccp;
-ccp = (char const *const *) p;
-{ /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
-}
-{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
-}
-{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
-}
-{ /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
-}
-{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
-}
-
-; return 0; }
EOF
-if { (eval echo configure:2286: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_c_const=yes
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_c_const=no
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftest*
+
+ else
+ MAGIC_CMD=:
+ fi
fi
-echo "$ac_t""$ac_cv_c_const" 1>&6
-if test $ac_cv_c_const = no; then
- cat >> confdefs.h <<\EOF
-#define const
-EOF
+ fi
+ ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ lt_prog_cc_shlib='-belf'
+ ;;
+ esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+ if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then :
+ else
+ { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+ lt_cv_prog_cc_can_build_shared=no
+ fi
fi
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2307: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ else
+ lt_prog_compiler_static_works=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+
fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+ :
else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 2322 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+ lt_prog_compiler_static=
+fi
+
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 2339 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2345: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:7846: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:7850: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 2356 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
+ :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic='-Kpic'
+ lt_prog_compiler_static='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:8078: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:8082: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:8145: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:8149: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag=
+ enable_shared_with_static_runtimes=no
+ archive_cmds=
+ archive_expsym_cmds=
+ old_archive_From_new_cmds=
+ old_archive_from_expsyms_cmds=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ thread_safe_flag_spec=
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_flag_spec_ld=
+ hardcode_libdir_separator=
+ hardcode_direct=no
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ link_all_deplibs=unknown
+ hardcode_automatic=no
+ module_cmds=
+ module_expsym_cmds=
+ always_export_symbols=no
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2362: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec=' '
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec='-all_load $convenience'
+ link_all_deplibs=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld='+b $libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc=no
+ else
+ archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+ test -n "$runpath_var " || \
+ test "X$hardcode_automatic"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
fi
-rm -f conftest*
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi
-rm -f conftest*
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx | nto-qnx6*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
- CPP="$ac_cv_prog_CPP"
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
else
- ac_cv_prog_CPP="$CPP"
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
fi
-echo "$ac_t""$CPP" 1>&6
-echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:2387: checking whether stat file-mode macros are broken" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2392 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
+ ;;
-#if defined(S_ISBLK) && defined(S_IFDIR)
-# if S_ISBLK (S_IFDIR)
-You lose.
-# endif
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
#endif
-#if defined(S_ISBLK) && defined(S_IFCHR)
-# if S_ISBLK (S_IFCHR)
-You lose.
-# endif
+int
+main ()
+{
+return f != shl_load;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
#endif
-#if defined(S_ISLNK) && defined(S_IFREG)
-# if S_ISLNK (S_IFREG)
-You lose.
-# endif
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-#if defined(S_ISSOCK) && defined(S_IFREG)
-# if S_ISSOCK (S_IFREG)
-You lose.
-# endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "You lose" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_header_stat_broken=yes
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_dld_link=yes
else
- rm -rf conftest*
- ac_cv_header_stat_broken=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
fi
-rm -f conftest*
+
+
+fi
+
+
+fi
+
+
+fi
+
fi
-echo "$ac_t""$ac_cv_header_stat_broken" 1>&6
-if test $ac_cv_header_stat_broken = yes; then
- cat >> confdefs.h <<\EOF
-#define STAT_MACROS_BROKEN 1
-EOF
fi
-echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2443: checking whether time.h and sys/time.h may both be included" >&5
-if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2448 "configure"
+#line 10157 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-int main() {
-struct tm *tp;
-; return 0; }
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if { (eval echo configure:2457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_header_time=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_time=no
-fi
-rm -f conftest*
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
fi
+rm -fr conftest*
-echo "$ac_t""$ac_cv_header_time" 1>&6
-if test $ac_cv_header_time = yes; then
- cat >> confdefs.h <<\EOF
-#define TIME_WITH_SYS_TIME 1
-EOF
fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
-echo "configure:2478: checking for st_blksize in struct stat" >&5
-if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2483 "configure"
+#line 10255 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-int main() {
-struct stat s; s.st_blksize;
-; return 0; }
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if { (eval echo configure:2491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_struct_st_blksize=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_struct_st_blksize=no
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
fi
-rm -f conftest*
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
fi
-echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6
-if test $ac_cv_struct_st_blksize = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ST_BLKSIZE 1
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ output_verbose_link_cmd='echo'
+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+ module_cmds='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ whole_archive_flag_spec='-all_load $convenience'
+ link_all_deplibs=yes
+ fi
+ ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler \
+ CC \
+ LD \
+ lt_prog_compiler_wl \
+ lt_prog_compiler_pic \
+ lt_prog_compiler_static \
+ lt_prog_compiler_no_builtin_flag \
+ export_dynamic_flag_spec \
+ thread_safe_flag_spec \
+ whole_archive_flag_spec \
+ enable_shared_with_static_runtimes \
+ old_archive_cmds \
+ old_archive_from_new_cmds \
+ predep_objects \
+ postdep_objects \
+ predeps \
+ postdeps \
+ compiler_lib_search_path \
+ archive_cmds \
+ archive_expsym_cmds \
+ postinstall_cmds \
+ postuninstall_cmds \
+ old_archive_from_expsyms_cmds \
+ allow_undefined_flag \
+ no_undefined_flag \
+ export_symbols_cmds \
+ hardcode_libdir_flag_spec \
+ hardcode_libdir_flag_spec_ld \
+ hardcode_libdir_separator \
+ hardcode_automatic \
+ module_cmds \
+ module_expsym_cmds \
+ lt_cv_prog_compiler_c_o \
+ exclude_expsyms \
+ include_expsyms; do
+
+ case $var in
+ old_archive_cmds | \
+ old_archive_from_new_cmds | \
+ archive_cmds | \
+ archive_expsym_cmds | \
+ module_cmds | \
+ module_expsym_cmds | \
+ old_archive_from_expsyms_cmds | \
+ export_symbols_cmds | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+ cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
fi
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2512: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+ withval="$with_tags"
+ tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+ else
+ { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+ fi
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+ "") ;;
+ *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+ lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval="$with_gnu_ld"
+ test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2517 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2525: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- ac_cv_header_stdc=yes
+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_header_stdc=no
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
fi
-rm -f conftest*
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 2542 "configure"
-#include "confdefs.h"
-#include <string.h>
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "memchr" >/dev/null 2>&1; then
- :
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
else
- rm -rf conftest*
- ac_cv_header_stdc=no
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-rm -f conftest*
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `"$LD" -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_CXX=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
fi
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_CXX=''
+ hardcode_direct_CXX=yes
+ hardcode_libdir_separator_CXX=':'
+ link_all_deplibs_CXX=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_CXX=yes
+ else
+ # We have old collect2
+ hardcode_direct_CXX=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_CXX=yes
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ hardcode_libdir_separator_CXX=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_CXX=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_CXX='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_CXX="-z nodefs"
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_CXX=' ${wl}-bernotok'
+ allow_undefined_flag_CXX=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_CXX=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_CXX=' '
+ archive_cmds_need_lc_CXX=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ allow_undefined_flag_CXX=unsupported
+ always_export_symbols_CXX=no
+ enable_shared_with_static_runtimes_CXX=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs_CXX=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_CXX=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_CXX='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_CXX='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_CXX=no
+ hardcode_automatic_CXX=yes
+ hardcode_shlibpath_var_CXX=unsupported
+ whole_archive_flag_spec_CXX='-all_load $convenience'
+ link_all_deplibs_CXX=yes
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ freebsd12*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ ld_shlibs_CXX=no
+ ;;
+ freebsd-elf*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+ freebsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ ld_shlibs_CXX=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC)
+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+ hardcode_libdir_separator_CXX=:
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_CXX='-L$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ export_dynamic_flag_spec_CXX='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ ;;
+ ia64*)
+ hardcode_direct_CXX=no
+ hardcode_shlibpath_var_CXX=no
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ hardcode_direct_CXX=yes
+ hardcode_minus_L_CXX=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ link_all_deplibs_CXX=yes
+ ;;
+ esac
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ archive_cmds_need_lc_CXX=no
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_direct_CXX=yes
+ hardcode_shlibpath_var_CXX=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx)
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ cxx)
+ allow_undefined_flag_CXX=' -expect_unresolved \*'
+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_CXX=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ sco*)
+ archive_cmds_need_lc_CXX=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ no_undefined_flag_CXX=' -zdefs'
+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ hardcode_libdir_flag_spec_CXX='-R$libdir'
+ hardcode_shlibpath_var_CXX=no
+ case $host_os in
+ solaris2.0-5 | solaris2.0-5.*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ link_all_deplibs_CXX=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ archive_cmds_need_lc_CXX=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ ld_shlibs_CXX=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+
cat > conftest.$ac_ext <<EOF
-#line 2560 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "free" >/dev/null 2>&1; then
- :
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$compiler_lib_search_path_CXX"; then
+ compiler_lib_search_path_CXX="${prev}${p}"
+ else
+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$postdeps_CXX"; then
+ postdeps_CXX="${prev}${p}"
+ else
+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$predep_objects_CXX"; then
+ predep_objects_CXX="$p"
+ else
+ predep_objects_CXX="$predep_objects_CXX $p"
+ fi
+ else
+ if test -z "$postdep_objects_CXX"; then
+ postdep_objects_CXX="$p"
+ else
+ postdep_objects_CXX="$postdep_objects_CXX $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
else
- rm -rf conftest*
- ac_cv_header_stdc=no
+ echo "libtool.m4: error: problem compiling CXX test program"
fi
-rm -f conftest*
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_CXX='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ lt_prog_compiler_pic_CXX=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_CXX=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_CXX='-Bstatic'
+ else
+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ lt_prog_compiler_pic_CXX='+Z'
+ fi
+ ;;
+ aCC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_static_CXX='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ lt_prog_compiler_pic_CXX='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ lt_prog_compiler_wl_CXX='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ lt_prog_compiler_wl_CXX='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_static_CXX='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ lt_prog_compiler_pic_CXX='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ lt_prog_compiler_wl_CXX='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ lt_prog_compiler_pic_CXX='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ lt_prog_compiler_pic_CXX='-pic'
+ lt_prog_compiler_static_CXX='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ lt_prog_compiler_pic_CXX='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ lt_prog_compiler_pic_CXX='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ lt_prog_compiler_can_build_shared_CXX=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_CXX=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:12391: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:12395: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_CXX=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+ case $lt_prog_compiler_pic_CXX in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+ esac
+else
+ lt_prog_compiler_pic_CXX=
+ lt_prog_compiler_can_build_shared_CXX=no
fi
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
- :
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_CXX=
+ ;;
+ *)
+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_CXX=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:12458: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:12462: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_CXX=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
else
- cat > conftest.$ac_ext <<EOF
-#line 2581 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
+ need_locks=no
+fi
-EOF
-if { (eval echo configure:2592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- :
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ export_symbols_cmds_CXX="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_CXX=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_CXX in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_CXX
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+ allow_undefined_flag_CXX=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_CXX=no
+ else
+ archive_cmds_need_lc_CXX=yes
+ fi
+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+ test -n "$runpath_var CXX" || \
+ test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_CXX" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+ test "$hardcode_minus_L_CXX" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_CXX=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_CXX=immediate
+ fi
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_header_stdc=no
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
fi
-rm -fr conftest*
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx | nto-qnx6*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
-if test $ac_cv_header_stdc = yes; then
- cat >> confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
fi
-echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:2616: checking for mode_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2621 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
+ ;;
+
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
#endif
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_mode_t=yes
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_dld_link=yes
else
- rm -rf conftest*
- ac_cv_type_mode_t=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
fi
-rm -f conftest*
+
fi
-echo "$ac_t""$ac_cv_type_mode_t" 1>&6
-if test $ac_cv_type_mode_t = no; then
- cat >> confdefs.h <<\EOF
-#define mode_t int
-EOF
+
fi
-echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:2649: checking for off_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2654 "configure"
+#line 13701 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_off_t=yes
-else
- rm -rf conftest*
- ac_cv_type_off_t=no
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
fi
-rm -f conftest*
+rm -fr conftest*
-fi
-echo "$ac_t""$ac_cv_type_off_t" 1>&6
-if test $ac_cv_type_off_t = no; then
- cat >> confdefs.h <<\EOF
-#define off_t long
-EOF
fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:2682: checking for pid_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2687 "configure"
+#line 13799 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_pid_t=yes
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_CXX \
+ CC_CXX \
+ LD_CXX \
+ lt_prog_compiler_wl_CXX \
+ lt_prog_compiler_pic_CXX \
+ lt_prog_compiler_static_CXX \
+ lt_prog_compiler_no_builtin_flag_CXX \
+ export_dynamic_flag_spec_CXX \
+ thread_safe_flag_spec_CXX \
+ whole_archive_flag_spec_CXX \
+ enable_shared_with_static_runtimes_CXX \
+ old_archive_cmds_CXX \
+ old_archive_from_new_cmds_CXX \
+ predep_objects_CXX \
+ postdep_objects_CXX \
+ predeps_CXX \
+ postdeps_CXX \
+ compiler_lib_search_path_CXX \
+ archive_cmds_CXX \
+ archive_expsym_cmds_CXX \
+ postinstall_cmds_CXX \
+ postuninstall_cmds_CXX \
+ old_archive_from_expsyms_cmds_CXX \
+ allow_undefined_flag_CXX \
+ no_undefined_flag_CXX \
+ export_symbols_cmds_CXX \
+ hardcode_libdir_flag_spec_CXX \
+ hardcode_libdir_flag_spec_ld_CXX \
+ hardcode_libdir_separator_CXX \
+ hardcode_automatic_CXX \
+ module_cmds_CXX \
+ module_expsym_cmds_CXX \
+ lt_cv_prog_compiler_c_o_CXX \
+ exclude_expsyms_CXX \
+ include_expsyms_CXX; do
+
+ case $var in
+ old_archive_cmds_CXX | \
+ old_archive_from_new_cmds_CXX | \
+ archive_cmds_CXX | \
+ archive_expsym_cmds_CXX | \
+ module_cmds_CXX | \
+ module_expsym_cmds_CXX | \
+ old_archive_from_expsyms_cmds_CXX | \
+ export_symbols_cmds_CXX | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
else
- rm -rf conftest*
- ac_cv_type_pid_t=no
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
fi
-rm -f conftest*
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_static_F77='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_F77='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_F77=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_F77=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic_F77='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_F77='-Bstatic'
+ else
+ lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_F77='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_F77='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic_F77='-Kpic'
+ lt_prog_compiler_static_F77='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_F77='-Qoption ld '
+ lt_prog_compiler_pic_F77='-PIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl_F77='-Wl,'
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_F77='-Kconform_pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_F77='-pic'
+ lt_prog_compiler_static_F77='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_F77=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_F77=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_F77"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:14621: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:14625: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_F77=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+ case $lt_prog_compiler_pic_F77 in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+ esac
+else
+ lt_prog_compiler_pic_F77=
+ lt_prog_compiler_can_build_shared_F77=no
fi
-echo "$ac_t""$ac_cv_type_pid_t" 1>&6
-if test $ac_cv_type_pid_t = no; then
- cat >> confdefs.h <<\EOF
-#define pid_t int
-EOF
fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_F77=
+ ;;
+ *)
+ lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+ ;;
+esac
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2715: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_F77=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:14688: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:14692: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_F77=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
else
- cat > conftest.$ac_ext <<EOF
-#line 2720 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag_F77=
+ enable_shared_with_static_runtimes_F77=no
+ archive_cmds_F77=
+ archive_expsym_cmds_F77=
+ old_archive_From_new_cmds_F77=
+ old_archive_from_expsyms_cmds_F77=
+ export_dynamic_flag_spec_F77=
+ whole_archive_flag_spec_F77=
+ thread_safe_flag_spec_F77=
+ hardcode_libdir_flag_spec_F77=
+ hardcode_libdir_flag_spec_ld_F77=
+ hardcode_libdir_separator_F77=
+ hardcode_direct_F77=no
+ hardcode_minus_L_F77=no
+ hardcode_shlibpath_var_F77=unsupported
+ link_all_deplibs_F77=unknown
+ hardcode_automatic_F77=no
+ module_cmds_F77=
+ module_expsym_cmds_F77=
+ always_export_symbols_F77=no
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_F77=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_F77=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_F77=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_size_t=yes
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs_F77=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_F77=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=no
+ enable_shared_with_static_runtimes_F77=yes
+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_F77=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_F77" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_F77=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_F77=unsupported
+ always_export_symbols_F77=yes
+ archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_F77=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_F77=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_F77=''
+ hardcode_direct_F77=yes
+ hardcode_libdir_separator_F77=':'
+ link_all_deplibs_F77=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_F77=yes
+ else
+ # We have old collect2
+ hardcode_direct_F77=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_F77=yes
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_libdir_separator_F77=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_F77=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_F77='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_F77="-z nodefs"
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+ program main
+
+ end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_F77=' ${wl}-bernotok'
+ allow_undefined_flag_F77=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_F77=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_F77=' '
+ archive_cmds_need_lc_F77=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs_F77=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec_F77=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_F77=' '
+ allow_undefined_flag_F77=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds_F77='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_F77=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_F77=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_F77='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_F77='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_F77=no
+ hardcode_automatic_F77=yes
+ hardcode_shlibpath_var_F77=unsupported
+ whole_archive_flag_spec_F77='-all_load $convenience'
+ link_all_deplibs_F77=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_F77=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=no
+ hardcode_shlibpath_var_F77=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_direct_F77=yes
+ export_dynamic_flag_spec_F77='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_F77=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ link_all_deplibs_F77=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ newsos6)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ openbsd*)
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_F77='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ ;;
+ *)
+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_minus_L_F77=yes
+ allow_undefined_flag_F77=unsupported
+ archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_F77=' -expect_unresolved \*'
+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_F77='-rpath $libdir'
+ fi
+ hardcode_libdir_separator_F77=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag_F77=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_shlibpath_var_F77=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs_F77=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=yes
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_F77='$CC -r -o $output$reload_objs'
+ hardcode_direct_F77=no
+ ;;
+ motorola)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ export_dynamic_flag_spec_F77='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_F77=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_F77=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_F77=yes
+ hardcode_minus_L_F77=no
+ hardcode_shlibpath_var_F77=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_F77='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag_F77=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_F77=
+ hardcode_shlibpath_var_F77=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_F77='-L$libdir'
+ hardcode_shlibpath_var_F77=no
+ ;;
+
+ *)
+ ld_shlibs_F77=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_F77=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_F77 in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_F77
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+ allow_undefined_flag_F77=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_F77=no
+ else
+ archive_cmds_need_lc_F77=yes
+ fi
+ allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+ test -n "$runpath_var F77" || \
+ test "X$hardcode_automatic_F77"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_F77" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+ test "$hardcode_minus_L_F77" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_F77=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_F77=immediate
+ fi
else
- rm -rf conftest*
- ac_cv_type_size_t=no
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
fi
-rm -f conftest*
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx | nto-qnx6*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_F77 \
+ CC_F77 \
+ LD_F77 \
+ lt_prog_compiler_wl_F77 \
+ lt_prog_compiler_pic_F77 \
+ lt_prog_compiler_static_F77 \
+ lt_prog_compiler_no_builtin_flag_F77 \
+ export_dynamic_flag_spec_F77 \
+ thread_safe_flag_spec_F77 \
+ whole_archive_flag_spec_F77 \
+ enable_shared_with_static_runtimes_F77 \
+ old_archive_cmds_F77 \
+ old_archive_from_new_cmds_F77 \
+ predep_objects_F77 \
+ postdep_objects_F77 \
+ predeps_F77 \
+ postdeps_F77 \
+ compiler_lib_search_path_F77 \
+ archive_cmds_F77 \
+ archive_expsym_cmds_F77 \
+ postinstall_cmds_F77 \
+ postuninstall_cmds_F77 \
+ old_archive_from_expsyms_cmds_F77 \
+ allow_undefined_flag_F77 \
+ no_undefined_flag_F77 \
+ export_symbols_cmds_F77 \
+ hardcode_libdir_flag_spec_F77 \
+ hardcode_libdir_flag_spec_ld_F77 \
+ hardcode_libdir_separator_F77 \
+ hardcode_automatic_F77 \
+ module_cmds_F77 \
+ module_expsym_cmds_F77 \
+ lt_cv_prog_compiler_c_o_F77 \
+ exclude_expsyms_F77 \
+ include_expsyms_F77; do
+
+ case $var in
+ old_archive_cmds_F77 | \
+ old_archive_from_new_cmds_F77 | \
+ archive_cmds_F77 | \
+ archive_expsym_cmds_F77 | \
+ module_cmds_F77 | \
+ module_expsym_cmds_F77 | \
+ old_archive_from_expsyms_cmds_F77 | \
+ export_symbols_cmds_F77 | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
-echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:2751: checking for ssize_t" >&5
-if eval "test \"`echo '$''{'db_cv_ssize_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+ lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2756 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-ssize_t foo;
-; return 0; }
-EOF
-if { (eval echo configure:2763: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_ssize_t=yes
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16632: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:16636: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_ssize_t=no
+ :
fi
-rm -f conftest*
+
fi
-echo "$ac_t""$db_cv_ssize_t" 1>&6
-if test "$db_cv_ssize_t" = no; then
- ssize_t_decl="typedef int ssize_t;"
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_static_GCJ='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic_GCJ='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared_GCJ=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic_GCJ=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ lt_prog_compiler_pic_GCJ='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ else
+ lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc|ecc)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-static'
+ ;;
+ ccc)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static_GCJ='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_prog_compiler_pic_GCJ='-Kpic'
+ lt_prog_compiler_static_GCJ='-dn'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl_GCJ='-Qoption ld '
+ lt_prog_compiler_pic_GCJ='-PIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic_GCJ='-Kconform_pic'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic_GCJ='-pic'
+ lt_prog_compiler_static_GCJ='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared_GCJ=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_prog_compiler_pic_works_GCJ=no
+ ac_outfile=conftest.$ac_objext
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16864: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:16868: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ lt_prog_compiler_pic_works_GCJ=yes
+ fi
+ fi
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+ case $lt_prog_compiler_pic_GCJ in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+ esac
+else
+ lt_prog_compiler_pic_GCJ=
+ lt_prog_compiler_can_build_shared_GCJ=no
fi
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic_GCJ=
+ ;;
+ *)
+ lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+ ;;
+esac
-echo $ac_n "checking for u_char""... $ac_c" 1>&6
-echo "configure:2782: checking for u_char" >&5
-if eval "test \"`echo '$''{'db_cv_uchar'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ lt_cv_prog_compiler_c_o_GCJ=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:16931: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:16935: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ lt_cv_prog_compiler_c_o_GCJ=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+ if test "$hard_links" = no; then
+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
else
- cat > conftest.$ac_ext <<EOF
-#line 2787 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_char foo;
-; return 0; }
+ need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+ runpath_var=
+ allow_undefined_flag_GCJ=
+ enable_shared_with_static_runtimes_GCJ=no
+ archive_cmds_GCJ=
+ archive_expsym_cmds_GCJ=
+ old_archive_From_new_cmds_GCJ=
+ old_archive_from_expsyms_cmds_GCJ=
+ export_dynamic_flag_spec_GCJ=
+ whole_archive_flag_spec_GCJ=
+ thread_safe_flag_spec_GCJ=
+ hardcode_libdir_flag_spec_GCJ=
+ hardcode_libdir_flag_spec_ld_GCJ=
+ hardcode_libdir_separator_GCJ=
+ hardcode_direct_GCJ=no
+ hardcode_minus_L_GCJ=no
+ hardcode_shlibpath_var_GCJ=unsupported
+ link_all_deplibs_GCJ=unknown
+ hardcode_automatic_GCJ=no
+ module_cmds_GCJ=
+ module_expsym_cmds_GCJ=
+ always_export_symbols_GCJ=no
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms_GCJ=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs_GCJ=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs_GCJ=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
EOF
-if { (eval echo configure:2794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_uchar=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_uchar=no
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ ld_shlibs_GCJ=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag_GCJ=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ allow_undefined_flag_GCJ=unsupported
+ always_export_symbols_GCJ=no
+ enable_shared_with_static_runtimes_GCJ=yes
+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs_GCJ=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs_GCJ" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec_GCJ=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag_GCJ=unsupported
+ always_export_symbols_GCJ=yes
+ archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L_GCJ=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct_GCJ=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds_GCJ=''
+ hardcode_direct_GCJ=yes
+ hardcode_libdir_separator_GCJ=':'
+ link_all_deplibs_GCJ=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.012|aix4.012.*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct_GCJ=yes
+ else
+ # We have old collect2
+ hardcode_direct_GCJ=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L_GCJ=yes
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_libdir_separator_GCJ=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols_GCJ=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag_GCJ='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag_GCJ="-z nodefs"
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag_GCJ=' ${wl}-bernotok'
+ allow_undefined_flag_GCJ=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ always_export_symbols_GCJ=yes
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec_GCJ=' '
+ archive_cmds_need_lc_GCJ=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs_GCJ=no
+ ;;
+
+ bsdi4*)
+ export_dynamic_flag_spec_GCJ=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec_GCJ=' '
+ allow_undefined_flag_GCJ=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_From_new_cmds_GCJ='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ enable_shared_with_static_runtimes_GCJ=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ archive_cmds_need_lc_GCJ=no
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag_GCJ='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ else
+ archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+ fi
+ module_cmds_GCJ='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ hardcode_direct_GCJ=no
+ hardcode_automatic_GCJ=yes
+ hardcode_shlibpath_var_GCJ=unsupported
+ whole_archive_flag_spec_GCJ='-all_load $convenience'
+ link_all_deplibs_GCJ=yes
+ fi
+ ;;
+
+ dgux*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ freebsd1*)
+ ld_shlibs_GCJ=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+ ia64*)
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_direct_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ ;;
+ *)
+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_direct_GCJ=yes
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L_GCJ=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ link_all_deplibs_GCJ=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ newsos6)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ openbsd*)
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec_GCJ='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ ;;
+ *)
+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_minus_L_GCJ=yes
+ allow_undefined_flag_GCJ=unsupported
+ archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator_GCJ=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+ fi
+ hardcode_libdir_separator_GCJ=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ no_undefined_flag_GCJ=' -z text'
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+ else
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs_GCJ=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+ hardcode_direct_GCJ=no
+ ;;
+ motorola)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ export_dynamic_flag_spec_GCJ='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var_GCJ=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs_GCJ=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct_GCJ=yes
+ hardcode_minus_L_GCJ=no
+ hardcode_shlibpath_var_GCJ=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+ no_undefined_flag_GCJ='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ sysv5*)
+ no_undefined_flag_GCJ=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec_GCJ=
+ hardcode_shlibpath_var_GCJ=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
+ hardcode_shlibpath_var_GCJ=no
+ ;;
+
+ *)
+ ld_shlibs_GCJ=no
+ ;;
+ esac
+ fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
fi
-rm -f conftest*
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc_GCJ=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds_GCJ in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl_GCJ
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+ allow_undefined_flag_GCJ=
+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+ (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ then
+ archive_cmds_need_lc_GCJ=no
+ else
+ archive_cmds_need_lc_GCJ=yes
+ fi
+ allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+ test -n "$runpath_var GCJ" || \
+ test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct_GCJ" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+ test "$hardcode_minus_L_GCJ" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action_GCJ=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action_GCJ=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+ ;;
+ *)
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ ;;
+ esac
fi
-echo "$ac_t""$db_cv_uchar" 1>&6
-if test "$db_cv_uchar" = no; then
- u_char_decl="typedef unsigned char u_char;"
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
-echo $ac_n "checking for u_short""... $ac_c" 1>&6
-echo "configure:2813: checking for u_short" >&5
-if eval "test \"`echo '$''{'db_cv_ushort'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2818 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_short foo;
-; return 0; }
-EOF
-if { (eval echo configure:2825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_ushort=yes
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.01* | freebsdelf3.01*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx | nto-qnx6*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_ushort=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
-echo "$ac_t""$db_cv_ushort" 1>&6
-if test "$db_cv_ushort" = no; then
- u_short_decl="typedef unsigned short u_short;"
fi
+ ;;
-echo $ac_n "checking for u_int""... $ac_c" 1>&6
-echo "configure:2844: checking for u_int" >&5
-if eval "test \"`echo '$''{'db_cv_uint'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2849 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_int foo;
-; return 0; }
-EOF
-if { (eval echo configure:2856: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_uint=yes
+ *)
+ echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+ lt_cv_dlopen="shl_load"
+else
+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_shl_load=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+ lt_cv_dlopen="dlopen"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dl_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_svld_dlopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dld_dld_link=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_uint=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
fi
-echo "$ac_t""$db_cv_uint" 1>&6
-if test "$db_cv_uint" = no; then
- u_int_decl="typedef unsigned int u_int;"
+
fi
-echo $ac_n "checking for u_long""... $ac_c" 1>&6
-echo "configure:2875: checking for u_long" >&5
-if eval "test \"`echo '$''{'db_cv_ulong'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2880 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_long foo;
-; return 0; }
-EOF
-if { (eval echo configure:2887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_ulong=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_ulong=no
fi
-rm -f conftest*
+
+
+fi
+
+
fi
-echo "$ac_t""$db_cv_ulong" 1>&6
-if test "$db_cv_ulong" = no; then
- u_long_decl="typedef unsigned long u_long;"
+
fi
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
-echo $ac_n "checking for u_int8_t""... $ac_c" 1>&6
-echo "configure:2906: checking for u_int8_t" >&5
-if eval "test \"`echo '$''{'db_cv_uint8'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2911 "configure"
+#line 18943 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_int8_t foo;
-; return 0; }
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if { (eval echo configure:2918: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_uint8=yes
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 2929 "configure"
+#line 19041 "configure"
#include "confdefs.h"
-main(){exit(sizeof(unsigned char) != 1);}
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
EOF
-if { (eval echo configure:2933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_uint8="unsigned char"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_uint8=no
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
fi
rm -fr conftest*
+
+
fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
fi
-rm -f conftest*
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_GCJ \
+ CC_GCJ \
+ LD_GCJ \
+ lt_prog_compiler_wl_GCJ \
+ lt_prog_compiler_pic_GCJ \
+ lt_prog_compiler_static_GCJ \
+ lt_prog_compiler_no_builtin_flag_GCJ \
+ export_dynamic_flag_spec_GCJ \
+ thread_safe_flag_spec_GCJ \
+ whole_archive_flag_spec_GCJ \
+ enable_shared_with_static_runtimes_GCJ \
+ old_archive_cmds_GCJ \
+ old_archive_from_new_cmds_GCJ \
+ predep_objects_GCJ \
+ postdep_objects_GCJ \
+ predeps_GCJ \
+ postdeps_GCJ \
+ compiler_lib_search_path_GCJ \
+ archive_cmds_GCJ \
+ archive_expsym_cmds_GCJ \
+ postinstall_cmds_GCJ \
+ postuninstall_cmds_GCJ \
+ old_archive_from_expsyms_cmds_GCJ \
+ allow_undefined_flag_GCJ \
+ no_undefined_flag_GCJ \
+ export_symbols_cmds_GCJ \
+ hardcode_libdir_flag_spec_GCJ \
+ hardcode_libdir_flag_spec_ld_GCJ \
+ hardcode_libdir_separator_GCJ \
+ hardcode_automatic_GCJ \
+ module_cmds_GCJ \
+ module_expsym_cmds_GCJ \
+ lt_cv_prog_compiler_c_o_GCJ \
+ exclude_expsyms_GCJ \
+ include_expsyms_GCJ; do
+
+ case $var in
+ old_archive_cmds_GCJ | \
+ old_archive_from_new_cmds_GCJ | \
+ archive_cmds_GCJ | \
+ archive_expsym_cmds_GCJ | \
+ module_cmds_GCJ | \
+ module_expsym_cmds_GCJ | \
+ old_archive_from_expsyms_cmds_GCJ | \
+ export_symbols_cmds_GCJ | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
fi
-echo "$ac_t""$db_cv_uint8" 1>&6
-if test "$db_cv_uint8" = no; then
- { echo "configure: error: No unsigned 8-bit integral type." 1>&2; exit 1; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ compiler_RC \
+ CC_RC \
+ LD_RC \
+ lt_prog_compiler_wl_RC \
+ lt_prog_compiler_pic_RC \
+ lt_prog_compiler_static_RC \
+ lt_prog_compiler_no_builtin_flag_RC \
+ export_dynamic_flag_spec_RC \
+ thread_safe_flag_spec_RC \
+ whole_archive_flag_spec_RC \
+ enable_shared_with_static_runtimes_RC \
+ old_archive_cmds_RC \
+ old_archive_from_new_cmds_RC \
+ predep_objects_RC \
+ postdep_objects_RC \
+ predeps_RC \
+ postdeps_RC \
+ compiler_lib_search_path_RC \
+ archive_cmds_RC \
+ archive_expsym_cmds_RC \
+ postinstall_cmds_RC \
+ postuninstall_cmds_RC \
+ old_archive_from_expsyms_cmds_RC \
+ allow_undefined_flag_RC \
+ no_undefined_flag_RC \
+ export_symbols_cmds_RC \
+ hardcode_libdir_flag_spec_RC \
+ hardcode_libdir_flag_spec_ld_RC \
+ hardcode_libdir_separator_RC \
+ hardcode_automatic_RC \
+ module_cmds_RC \
+ module_expsym_cmds_RC \
+ lt_cv_prog_compiler_c_o_RC \
+ exclude_expsyms_RC \
+ include_expsyms_RC; do
+
+ case $var in
+ old_archive_cmds_RC | \
+ old_archive_from_new_cmds_RC | \
+ archive_cmds_RC | \
+ archive_expsym_cmds_RC | \
+ module_cmds_RC | \
+ module_expsym_cmds_RC | \
+ old_archive_from_expsyms_cmds_RC | \
+ export_symbols_cmds_RC | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\$0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+cfgfile="$ofile"
+
+ cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
fi
-if test "$db_cv_uint8" != yes; then
- u_int8_decl="typedef $db_cv_uint8 u_int8_t;"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+ ;;
+
+ *)
+ { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
fi
-echo $ac_n "checking for u_int16_t""... $ac_c" 1>&6
-echo "configure:2959: checking for u_int16_t" >&5
-if eval "test \"`echo '$''{'db_cv_uint16'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2964 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_int16_t foo;
-; return 0; }
-EOF
-if { (eval echo configure:2971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_uint16=yes
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+SOFLAGS="-rpath \$(libdir)"
+LIBTOOL_PROG="${SHELL} ./libtool"
+
+# Set SOSUFFIX and friends
+
+ echo "$as_me:$LINENO: checking SOSUFFIX from libtool" >&5
+echo $ECHO_N "checking SOSUFFIX from libtool... $ECHO_C" >&6
+ module=no
+
+ versuffix=""
+ release=""
+ libname=libfoo
+ eval _SOSUFFIX=\"$shrext\"
+ if test "X$_SOSUFFIX" = "" ; then
+ _SOSUFFIX=".so"
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
+ if test "X$_SOSUFFIX_MESSAGE" = "X"; then
+ _SOSUFFIX_MESSAGE=yes
+ { echo "$as_me:$LINENO: WARNING: libtool may not know about this architecture." >&5
+echo "$as_me: WARNING: libtool may not know about this architecture." >&2;}
+ { echo "$as_me:$LINENO: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&5
+echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
+ fi
+ fi
+ fi
+
+ SOSUFFIX=$_SOSUFFIX
+ echo "$as_me:$LINENO: result: $SOSUFFIX" >&5
+echo "${ECHO_T}$SOSUFFIX" >&6
+
+
+
+ echo "$as_me:$LINENO: checking MODSUFFIX from libtool" >&5
+echo $ECHO_N "checking MODSUFFIX from libtool... $ECHO_C" >&6
+ module=yes
+
+ versuffix=""
+ release=""
+ libname=libfoo
+ eval _SOSUFFIX=\"$shrext\"
+ if test "X$_SOSUFFIX" = "" ; then
+ _SOSUFFIX=".so"
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
+ if test "X$_SOSUFFIX_MESSAGE" = "X"; then
+ _SOSUFFIX_MESSAGE=yes
+ { echo "$as_me:$LINENO: WARNING: libtool may not know about this architecture." >&5
+echo "$as_me: WARNING: libtool may not know about this architecture." >&2;}
+ { echo "$as_me:$LINENO: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&5
+echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
+ fi
+ fi
+ fi
+
+ MODSUFFIX=$_SOSUFFIX
+ echo "$as_me:$LINENO: result: $MODSUFFIX" >&5
+echo "${ECHO_T}$MODSUFFIX" >&6
+
+
+
+ echo "$as_me:$LINENO: checking JMODSUFFIX from libtool" >&5
+echo $ECHO_N "checking JMODSUFFIX from libtool... $ECHO_C" >&6
+ module=yes
+
+ versuffix=""
+ release=""
+ libname=libfoo
+ eval _SOSUFFIX=\"$shrext\"
+ if test "X$_SOSUFFIX" = "" ; then
+ _SOSUFFIX=".so"
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
+ if test "X$_SOSUFFIX_MESSAGE" = "X"; then
+ _SOSUFFIX_MESSAGE=yes
+ { echo "$as_me:$LINENO: WARNING: libtool may not know about this architecture." >&5
+echo "$as_me: WARNING: libtool may not know about this architecture." >&2;}
+ { echo "$as_me:$LINENO: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&5
+echo "$as_me: WARNING: assuming $_SUFFIX suffix for dynamic libraries." >&2;}
+ fi
+ fi
+ fi
+
+ if test `uname` = "Darwin"; then
+ JMODSUFFIX=".jnilib"
+ else
+ JMODSUFFIX=$_SOSUFFIX
+ fi
+ echo "$as_me:$LINENO: result: $JMODSUFFIX" >&5
+echo "${ECHO_T}$JMODSUFFIX" >&6
+
+
+
+INSTALLER="\$(LIBTOOL) --mode=install cp -p"
+
+MAKEFILE_CC="\$(LIBTOOL) --mode=compile ${MAKEFILE_CC}"
+MAKEFILE_SOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CCLINK} -avoid-version"
+MAKEFILE_CCLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CCLINK}"
+MAKEFILE_CXX="\$(LIBTOOL) --mode=compile ${MAKEFILE_CXX}"
+MAKEFILE_XSOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK} -avoid-version"
+MAKEFILE_CXXLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK}"
+
+LIBTOOL="\$(SHELL) ./libtool"
+
+case "$host_os" in
+cygwin*)
+ MAKEFILE_SOLINK="$MAKEFILE_SOLINK -no-undefined"
+ MAKEFILE_XSOLINK="$MAKEFILE_XSOLINK -no-undefined";;
+esac
+
+# Configure for shared libraries, static libraries, or both. If both are
+# configured, build the utilities and example programs with shared versions.
+#
+# $o is set to ".o" or ".lo", and is the file suffix used in the Makefile
+# instead of .o
+if test `$LIBTOOL_PROG --config |
+ grep build_libtool_libs | grep no` 2>/dev/null; then
+ enable_shared="no"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ enable_shared="yes"
+fi
+if test `$LIBTOOL_PROG --config |
+ grep build_old_libs | grep no` 2>/dev/null; then
+ enable_static="no"
else
- cat > conftest.$ac_ext <<EOF
-#line 2982 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned short) != 2);}
-EOF
-if { (eval echo configure:2986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_uint16="unsigned short"
+ enable_static="yes"
+fi
+
+# C API.
+if test "$enable_shared" = "no"; then
+ DEFAULT_LIB="\$(libdb_version)"
+ POSTLINK=": "
+ o=".o"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ DEFAULT_LIB="\$(libso_target)"
+ POSTLINK="\$(LIBTOOL) --mode=execute true"
+ o=".lo"
+fi
+INSTALL_LIBS="$DEFAULT_LIB"
+if test "$enable_static" = "yes"; then
+ INSTALL_LIBS="$INSTALL_LIBS \$(libdb)"
+fi
+
+# Optional C++ API.
+if test "$db_cv_cxx" = "yes"; then
+ if test "$enable_shared" = "no"; then
+ DEFAULT_LIB_CXX="\$(libcxx_version)"
+ fi
+ if test "$enable_shared" = "yes"; then
+ DEFAULT_LIB_CXX="\$(libxso_target)"
+ fi
+ INSTALL_LIBS="$INSTALL_LIBS $DEFAULT_LIB_CXX"
+ if test "$enable_static" = "yes"; then
+ INSTALL_LIBS="$INSTALL_LIBS \$(libcxx)"
+ fi
+fi
+
+# Optional Java API.
+if test "$db_cv_java" = "yes"; then
+ # Java requires shared libraries.
+ if test "$enable_shared" = "no"; then
+ { { echo "$as_me:$LINENO: error: Java requires shared libraries" >&5
+echo "$as_me: error: Java requires shared libraries" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ # A classpath that includes . is needed to check for Java
+ CLASSPATH=".:$CLASSPATH"
+ export CLASSPATH
+
+if test "x$JAVAPREFIX" = x; then
+ test "x$JAVAC" = x && for ac_prog in javac$EXEEXT "gcj$EXEEXT -C" guavac$EXEEXT jikes$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVAC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2997 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned int) != 2);}
-EOF
-if { (eval echo configure:3001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_uint16="unsigned int"
+ if test -n "$JAVAC"; then
+ ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_uint16=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVAC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-rm -fr conftest*
fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+ echo "$as_me:$LINENO: result: $JAVAC" >&5
+echo "${ECHO_T}$JAVAC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$JAVAC" && break
+done
+
+else
+ test "x$JAVAC" = x && for ac_prog in javac$EXEEXT "gcj$EXEEXT -C" guavac$EXEEXT jikes$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVAC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$JAVAC"; then
+ ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVAC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
fi
-rm -fr conftest*
fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+ echo "$as_me:$LINENO: result: $JAVAC" >&5
+echo "${ECHO_T}$JAVAC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$JAVAC" && break
+done
+test -n "$JAVAC" || JAVAC="$JAVAPREFIX"
fi
-rm -f conftest*
+test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: no acceptable Java compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable Java compiler found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking if $JAVAC works" >&5
+echo $ECHO_N "checking if $JAVAC works... $ECHO_C" >&6
+if test "${ac_cv_prog_javac_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* #line 20312 "configure" */
+public class Test {
+}
+EOF
+if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } >/dev/null 2>&1; then
+ ac_cv_prog_javac_works=yes
+else
+ { { echo "$as_me:$LINENO: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&5
+echo "$as_me: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "configure: failed program was:" >&5
+ cat $JAVA_TEST >&5
fi
+rm -f $JAVA_TEST $CLASS_TEST
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_javac_works" >&5
+echo "${ECHO_T}$ac_cv_prog_javac_works" >&6
+
+
+
+if test "x$JAVAPREFIX" = x; then
+ test "x$JAR" = x && for ac_prog in jar$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$JAR"; then
+ ac_cv_prog_JAR="$JAR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAR="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
-echo "$ac_t""$db_cv_uint16" 1>&6
-if test "$db_cv_uint16" = no; then
- { echo "configure: error: No unsigned 16-bit integral type." 1>&2; exit 1; }
fi
-if test "$db_cv_uint16" != yes; then
- u_int16_decl="typedef $db_cv_uint16 u_int16_t;"
+fi
+JAR=$ac_cv_prog_JAR
+if test -n "$JAR"; then
+ echo "$as_me:$LINENO: result: $JAR" >&5
+echo "${ECHO_T}$JAR" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$JAR" && break
+done
-echo $ac_n "checking for int16_t""... $ac_c" 1>&6
-echo "configure:3031: checking for int16_t" >&5
-if eval "test \"`echo '$''{'db_cv_int16'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3036 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-int16_t foo;
-; return 0; }
-EOF
-if { (eval echo configure:3043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_int16=yes
+ test "x$JAR" = x && for ac_prog in jar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ if test -n "$JAR"; then
+ ac_cv_prog_JAR="$JAR" # Let the user override the test.
else
- cat > conftest.$ac_ext <<EOF
-#line 3054 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(short) != 2);}
-EOF
-if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_int16="short"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAR="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+JAR=$ac_cv_prog_JAR
+if test -n "$JAR"; then
+ echo "$as_me:$LINENO: result: $JAR" >&5
+echo "${ECHO_T}$JAR" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$JAR" && break
+done
+test -n "$JAR" || JAR="$JAVAPREFIX"
+
+fi
+test "x$JAR" = x && { { echo "$as_me:$LINENO: error: no acceptable jar program found in \$PATH" >&5
+echo "$as_me: error: no acceptable jar program found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+
+if test x$JAVAPREFIX = x; then
+ test x$JAVA = x && for ac_prog in java$EXEEXT kaffe$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVA+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3069 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(int) != 2);}
-EOF
-if { (eval echo configure:3073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_int16="int"
+ if test -n "$JAVA"; then
+ ac_cv_prog_JAVA="$JAVA" # Let the user override the test.
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_int16=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVA="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-rm -fr conftest*
+fi
+JAVA=$ac_cv_prog_JAVA
+if test -n "$JAVA"; then
+ echo "$as_me:$LINENO: result: $JAVA" >&5
+echo "${ECHO_T}$JAVA" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$JAVA" && break
+done
+
+else
+ test x$JAVA = x && for ac_prog in java$EXEEXT kaffe$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVA+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$JAVA"; then
+ ac_cv_prog_JAVA="$JAVA" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVA="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
fi
-rm -fr conftest*
fi
+JAVA=$ac_cv_prog_JAVA
+if test -n "$JAVA"; then
+ echo "$as_me:$LINENO: result: $JAVA" >&5
+echo "${ECHO_T}$JAVA" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$JAVA" && break
+done
+test -n "$JAVA" || JAVA="$JAVAPREFIX"
+
+fi
+test x$JAVA = x && { { echo "$as_me:$LINENO: error: no acceptable Java virtual machine found in \$PATH" >&5
+echo "$as_me: error: no acceptable Java virtual machine found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Extract the first word of "uudecode$EXEEXT", so it can be a program name with args.
+set dummy uudecode$EXEEXT; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_uudecode+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$uudecode"; then
+ ac_cv_prog_uudecode="$uudecode" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_uudecode="yes"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
fi
-rm -f conftest*
+fi
+uudecode=$ac_cv_prog_uudecode
+if test -n "$uudecode"; then
+ echo "$as_me:$LINENO: result: $uudecode" >&5
+echo "${ECHO_T}$uudecode" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo "$ac_t""$db_cv_int16" 1>&6
-if test "$db_cv_int16" = no; then
- { echo "configure: error: No signed 16-bit integral type." 1>&2; exit 1; }
+if test x$uudecode = xyes; then
+echo "$as_me:$LINENO: checking if uudecode can decode base 64 file" >&5
+echo $ECHO_N "checking if uudecode can decode base 64 file... $ECHO_C" >&6
+if test "${ac_cv_prog_uudecode_base64+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat << \EOF > Test.uue
+begin-base64 644 Test.class
+yv66vgADAC0AFQcAAgEABFRlc3QHAAQBABBqYXZhL2xhbmcvT2JqZWN0AQAE
+bWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51
+bWJlclRhYmxlDAAKAAsBAARleGl0AQAEKEkpVgoADQAJBwAOAQAQamF2YS9s
+YW5nL1N5c3RlbQEABjxpbml0PgEAAygpVgwADwAQCgADABEBAApTb3VyY2VG
+aWxlAQAJVGVzdC5qYXZhACEAAQADAAAAAAACAAkABQAGAAEABwAAACEAAQAB
+AAAABQO4AAyxAAAAAQAIAAAACgACAAAACgAEAAsAAQAPABAAAQAHAAAAIQAB
+AAEAAAAFKrcAErEAAAABAAgAAAAKAAIAAAAEAAQABAABABMAAAACABQ=
+====
+EOF
+if uudecode$EXEEXT Test.uue; then
+ ac_cv_prog_uudecode_base64=yes
+else
+ echo "configure: 20571: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+ echo "configure: failed file was:" >&5
+ cat Test.uue >&5
+ ac_cv_prog_uudecode_base64=no
+fi
+rm -f Test.uue
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_uudecode_base64" >&5
+echo "${ECHO_T}$ac_cv_prog_uudecode_base64" >&6
+fi
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+ rm -f Test.class
+ { echo "$as_me:$LINENO: WARNING: I have to compile Test.class from scratch" >&5
+echo "$as_me: WARNING: I have to compile Test.class from scratch" >&2;}
+ if test x$ac_cv_prog_javac_works = xno; then
+ { { echo "$as_me:$LINENO: error: Cannot compile java source. $JAVAC does not work properly" >&5
+echo "$as_me: error: Cannot compile java source. $JAVAC does not work properly" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ if test x$ac_cv_prog_javac_works = x; then
+
+if test "x$JAVAPREFIX" = x; then
+ test "x$JAVAC" = x && for ac_prog in javac$EXEEXT "gcj$EXEEXT -C" guavac$EXEEXT jikes$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVAC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$JAVAC"; then
+ ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVAC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
fi
-if test "$db_cv_int16" != yes; then
- int16_decl="typedef $db_cv_int16 int16_t;"
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+ echo "$as_me:$LINENO: result: $JAVAC" >&5
+echo "${ECHO_T}$JAVAC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ test -n "$JAVAC" && break
+done
-echo $ac_n "checking for u_int32_t""... $ac_c" 1>&6
-echo "configure:3103: checking for u_int32_t" >&5
-if eval "test \"`echo '$''{'db_cv_uint32'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3108 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-u_int32_t foo;
-; return 0; }
-EOF
-if { (eval echo configure:3115: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_uint32=yes
+ test "x$JAVAC" = x && for ac_prog in javac$EXEEXT "gcj$EXEEXT -C" guavac$EXEEXT jikes$EXEEXT
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_JAVAC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ if test -n "$JAVAC"; then
+ ac_cv_prog_JAVAC="$JAVAC" # Let the user override the test.
else
- cat > conftest.$ac_ext <<EOF
-#line 3126 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned int) != 4);}
-EOF
-if { (eval echo configure:3130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_uint32="unsigned int"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_JAVAC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+JAVAC=$ac_cv_prog_JAVAC
+if test -n "$JAVAC"; then
+ echo "$as_me:$LINENO: result: $JAVAC" >&5
+echo "${ECHO_T}$JAVAC" >&6
else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$JAVAC" && break
+done
+test -n "$JAVAC" || JAVAC="$JAVAPREFIX"
+
+fi
+test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: no acceptable Java compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable Java compiler found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking if $JAVAC works" >&5
+echo $ECHO_N "checking if $JAVAC works... $ECHO_C" >&6
+if test "${ac_cv_prog_javac_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+cat << \EOF > $JAVA_TEST
+/* #line 20689 "configure" */
+public class Test {
+}
+EOF
+if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } >/dev/null 2>&1; then
+ ac_cv_prog_javac_works=yes
+else
+ { { echo "$as_me:$LINENO: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&5
+echo "$as_me: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&2;}
+ { (exit 1); exit 1; }; }
echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ cat $JAVA_TEST >&5
+fi
+rm -f $JAVA_TEST $CLASS_TEST
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_javac_works" >&5
+echo "${ECHO_T}$ac_cv_prog_javac_works" >&6
+
+
+ fi
+fi
+echo "$as_me:$LINENO: checking if $JAVA works" >&5
+echo $ECHO_N "checking if $JAVA works... $ECHO_C" >&6
+if test "${ac_cv_prog_java_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3141 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned long) != 4);}
+
+JAVA_TEST=Test.java
+CLASS_TEST=Test.class
+TEST=Test
+cat << \EOF > $JAVA_TEST
+/* [#]line 20726 "configure" */
+public class Test {
+public static void main (String args[]) {
+ System.exit (0);
+} }
EOF
-if { (eval echo configure:3145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_uint32="unsigned long"
+if test x$ac_cv_prog_uudecode_base64 != xyes; then
+ if { ac_try='$JAVAC $JAVACFLAGS $JAVA_TEST'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } && test -s $CLASS_TEST; then
+ :
+ else
+ echo "configure: failed program was:" >&5
+ cat $JAVA_TEST >&5
+ { { echo "$as_me:$LINENO: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&5
+echo "$as_me: error: The Java compiler $JAVAC failed (see config.log, check the CLASSPATH?)" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+if { ac_try='$JAVA $JAVAFLAGS $TEST'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } >/dev/null 2>&1; then
+ ac_cv_prog_java_works=yes
else
echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_uint32=no
+ cat $JAVA_TEST >&5
+ { { echo "$as_me:$LINENO: error: The Java VM $JAVA failed (see config.log, check the CLASSPATH?)" >&5
+echo "$as_me: error: The Java VM $JAVA failed (see config.log, check the CLASSPATH?)" >&2;}
+ { (exit 1); exit 1; }; }
fi
-rm -fr conftest*
+rm -fr $JAVA_TEST $CLASS_TEST Test.uue
+
fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_java_works" >&5
+echo "${ECHO_T}$ac_cv_prog_java_works" >&6
+
+
+
+
+JNI_INCLUDE_DIRS=""
+
+test "x$JAVAC" = x && { { echo "$as_me:$LINENO: error: '$JAVAC' undefined" >&5
+echo "$as_me: error: '$JAVAC' undefined" >&2;}
+ { (exit 1); exit 1; }; }
+# Extract the first word of "$JAVAC", so it can be a program name with args.
+set dummy $JAVAC; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path__ACJNI_JAVAC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $_ACJNI_JAVAC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path__ACJNI_JAVAC="$_ACJNI_JAVAC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path__ACJNI_JAVAC="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path__ACJNI_JAVAC" && ac_cv_path__ACJNI_JAVAC="$JAVAC"
+ ;;
+esac
fi
-rm -fr conftest*
+_ACJNI_JAVAC=$ac_cv_path__ACJNI_JAVAC
+
+if test -n "$_ACJNI_JAVAC"; then
+ echo "$as_me:$LINENO: result: $_ACJNI_JAVAC" >&5
+echo "${ECHO_T}$_ACJNI_JAVAC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+test ! -x "$_ACJNI_JAVAC" && { { echo "$as_me:$LINENO: error: $JAVAC could not be found in path" >&5
+echo "$as_me: error: $JAVAC could not be found in path" >&2;}
+ { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking absolute path of $JAVAC" >&5
+echo $ECHO_N "checking absolute path of $JAVAC... $ECHO_C" >&6
+case "$_ACJNI_JAVAC" in
+/*) echo "$as_me:$LINENO: result: $_ACJNI_JAVAC" >&5
+echo "${ECHO_T}$_ACJNI_JAVAC" >&6;;
+*) { { echo "$as_me:$LINENO: error: $_ACJNI_JAVAC is not an absolute path name" >&5
+echo "$as_me: error: $_ACJNI_JAVAC is not an absolute path name" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+
+
+# find the include directory relative to the javac executable
+_cur=""$_ACJNI_JAVAC""
+while ls -ld "$_cur" 2>/dev/null | grep " -> " >/dev/null; do
+ echo "$as_me:$LINENO: checking symlink for $_cur" >&5
+echo $ECHO_N "checking symlink for $_cur... $ECHO_C" >&6
+ _slink=`ls -ld "$_cur" | sed 's/.* -> //'`
+ case "$_slink" in
+ /*) _cur="$_slink";;
+ # 'X' avoids triggering unwanted echo options.
+ *) _cur=`echo "X$_cur" | sed -e 's/^X//' -e 's:[^/]*$::'`"$_slink";;
+ esac
+ echo "$as_me:$LINENO: result: $_cur" >&5
+echo "${ECHO_T}$_cur" >&6
+done
+_ACJNI_FOLLOWED="$_cur"
+
+_JTOPDIR=`echo "$_ACJNI_FOLLOWED" | sed -e 's://*:/:g' -e 's:/[^/]*$::'`
+case "$host_os" in
+ darwin*) _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
+ _JINC="$_JTOPDIR/Headers";;
+ *) _JINC="$_JTOPDIR/include";;
+esac
+
+# If we find jni.h in /usr/include, then it's not a java-only tree, so
+# don't add /usr/include or subdirectories to the list of includes.
+# An extra -I/usr/include can foul things up with newer gcc's.
+#
+# If we don't find jni.h, just keep going. Hopefully javac knows where
+# to find its include files, even if we can't.
+if test -r "$_JINC/jni.h"; then
+ if test "$_JINC" != "/usr/include"; then
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JINC"
+ fi
+else
+ _JTOPDIR=`echo "$_JTOPDIR" | sed -e 's:/[^/]*$::'`
+ if test -r "$_JTOPDIR/include/jni.h"; then
+ if test "$_JTOPDIR" != "/usr"; then
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include"
+ fi
+ fi
fi
-rm -f conftest*
+
+# get the likely subdirectories for system specific java includes
+if test "$_JTOPDIR" != "/usr"; then
+ case "$host_os" in
+ aix*) _JNI_INC_SUBDIRS="aix";;
+ bsdi*) _JNI_INC_SUBDIRS="bsdos";;
+ freebsd*) _JNI_INC_SUBDIRS="freebsd";;
+ hp*) _JNI_INC_SUBDIRS="hp-ux";;
+ linux*) _JNI_INC_SUBDIRS="linux genunix";;
+ osf*) _JNI_INC_SUBDIRS="alpha";;
+ solaris*) _JNI_INC_SUBDIRS="solaris";;
+ *) _JNI_INC_SUBDIRS="genunix";;
+ esac
fi
-echo "$ac_t""$db_cv_uint32" 1>&6
-if test "$db_cv_uint32" = no; then
- { echo "configure: error: No unsigned 32-bit integral type." 1>&2; exit 1; }
+# add any subdirectories that are present
+for _JINCSUBDIR in $_JNI_INC_SUBDIRS
+do
+ if test -d "$_JTOPDIR/include/$_JINCSUBDIR"; then
+ JNI_INCLUDE_DIRS="$JNI_INCLUDE_DIRS $_JTOPDIR/include/$_JINCSUBDIR"
+ fi
+done
+
+
+ echo "$as_me:$LINENO: checking java version" >&5
+echo $ECHO_N "checking java version... $ECHO_C" >&6
+ case "$JAVA" in
+ *kaffe* )
+ JAVA_VERSION=`$JAVA -version 2>&1 |
+ sed -e '/Java Version:/!d' -e 's/.*Java Version: \([^ ]*\)[ ]*/\1/'` ;;
+ * ) JAVA_VERSION=`$JAVA -version 2>&1 |
+ sed -e '/ version /!d' -e 's/.*"\(.*\)".*/\1/'` ;;
+ esac
+ echo "$as_me:$LINENO: result: $JAVA_VERSION" >&5
+echo "${ECHO_T}$JAVA_VERSION" >&6
+ case "$JAVA_VERSION" in
+ 1.[3456789]* | 1.[1-9][0-9]* | [23456789]* ) ;;
+ * )
+ { { echo "$as_me:$LINENO: error: Java version 1.3 or higher required, got $JAVA_VERSION" >&5
+echo "$as_me: error: Java version 1.3 or higher required, got $JAVA_VERSION" >&2;}
+ { (exit 1); exit 1; }; } ;;
+ esac
+
+ for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
+ do
+ CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
+ done
+
+ ADDITIONAL_LANG="$ADDITIONAL_LANG java"
+ INSTALL_LIBS="$INSTALL_LIBS \$(libjso_target)"
+else
+ JAVAC=nojavac
fi
-if test "$db_cv_uint32" != yes; then
- u_int32_decl="typedef $db_cv_uint32 u_int32_t;"
+
+# MinGW support.
+if test "$db_cv_mingw" = "yes"; then
+ OSDIR=os_win32
+ PATH_SEPARATOR="\\\\/:"
+
+ cat >>confdefs.h <<\_ACEOF
+#define DB_WIN32 1
+_ACEOF
+
+ cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+else
+ OSDIR=os
+ PATH_SEPARATOR="/"
fi
+# Optional RPC client/server.
+if test "$db_cv_rpc" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_RPC 1
+_ACEOF
+
+
+
-echo $ac_n "checking for int32_t""... $ac_c" 1>&6
-echo "configure:3175: checking for int32_t" >&5
-if eval "test \"`echo '$''{'db_cv_int32'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ RPC_CLIENT_OBJS="\$(RPC_CLIENT_OBJS)"
+ ADDITIONAL_PROGS="berkeley_db_svc $ADDITIONAL_PROGS"
+
+ case "$host_os" in
+ hpux*)
+ echo "$as_me:$LINENO: checking for svc_run" >&5
+echo $ECHO_N "checking for svc_run... $ECHO_C" >&6
+if test "${ac_cv_func_svc_run+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char svc_run (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char svc_run ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_svc_run) || defined (__stub___svc_run)
+choke me
+#else
+char (*f) () = svc_run;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != svc_run;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_svc_run=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_svc_run=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_svc_run" >&5
+echo "${ECHO_T}$ac_cv_func_svc_run" >&6
+if test $ac_cv_func_svc_run = yes; then
+ :
else
- cat > conftest.$ac_ext <<EOF
-#line 3180 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-int32_t foo;
-; return 0; }
-EOF
-if { (eval echo configure:3187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_int32=yes
+ echo "$as_me:$LINENO: checking for svc_run in -lnsl" >&5
+echo $ECHO_N "checking for svc_run in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_svc_run+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char svc_run ();
+int
+main ()
+{
+svc_run ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_svc_run=yes
else
- cat > conftest.$ac_ext <<EOF
-#line 3198 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(int) != 4);}
-EOF
-if { (eval echo configure:3202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_int32="int"
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_svc_run=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_svc_run" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_svc_run" >&6
+if test $ac_cv_lib_nsl_svc_run = yes; then
+ LIBS="-lnsl $LIBS"; LIBTSO_LIBS="-lnsl $LIBTSO_LIBS";
+ LIBJSO_LIBS="-lnsl $LIBJSO_LIBS"
+fi
+
+fi
+;;
+ solaris*)
+ echo "$as_me:$LINENO: checking for svc_run" >&5
+echo $ECHO_N "checking for svc_run... $ECHO_C" >&6
+if test "${ac_cv_func_svc_run+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char svc_run (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char svc_run ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_svc_run) || defined (__stub___svc_run)
+choke me
+#else
+char (*f) () = svc_run;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != svc_run;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_svc_run=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_svc_run=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_svc_run" >&5
+echo "${ECHO_T}$ac_cv_func_svc_run" >&6
+if test $ac_cv_func_svc_run = yes; then
+ :
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+
+echo "$as_me:$LINENO: checking for svc_run in -lnsl" >&5
+echo $ECHO_N "checking for svc_run in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_svc_run+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3213 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(long) != 4);}
-EOF
-if { (eval echo configure:3217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_int32="long"
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char svc_run ();
+int
+main ()
+{
+svc_run ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_svc_run=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_svc_run=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_svc_run" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_svc_run" >&6
+if test $ac_cv_lib_nsl_svc_run = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+ LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+;;
+ esac
+fi
+
+case "$host_os" in
+ darwin*)
+ LIBTSO_MODULE=""
+ LIBTSO_MODSUFFIX=".dylib"
+ ;;
+ *)
+ LIBTSO_MODULE="-module"
+ LIBTSO_MODSUFFIX=@MODSUFFIX@
+ ;;
+esac
+
+
+if test "$db_cv_tcl" = "yes"; then
+ if test `$LIBTOOL_PROG --config | grep build_libtool_libs | grep no` 2>/dev/null; then
+ { { echo "$as_me:$LINENO: error: Tcl requires shared libraries" >&5
+echo "$as_me: error: Tcl requires shared libraries" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+
+
+
+ if test "${ac_cv_c_tclconfig+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_int32=no
+
+
+ # First check to see if --with-tclconfig was specified.
+ if test "${with_tclconfig}" != no; then
+ if test -f "${with_tclconfig}/tclConfig.sh" ; then
+ ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
+ else
+ { { echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5
+echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+
+ # check in a few common install locations
+ if test x"${ac_cv_c_tclconfig}" = x ; then
+ for i in `ls -d /usr/local/lib 2>/dev/null` ; do
+ if test -f "$i/tclConfig.sh" ; then
+ ac_cv_c_tclconfig=`(cd $i; pwd)`
+ break
+ fi
+ done
+ fi
+
+
fi
-rm -fr conftest*
+
+
+ if test x"${ac_cv_c_tclconfig}" = x ; then
+ TCL_BIN_DIR="# no Tcl configs found"
+ { { echo "$as_me:$LINENO: error: can't find Tcl configuration definitions" >&5
+echo "$as_me: error: can't find Tcl configuration definitions" >&2;}
+ { (exit 1); exit 1; }; }
+ else
+ TCL_BIN_DIR=${ac_cv_c_tclconfig}
+ fi
+
+
+ echo "$as_me:$LINENO: checking for existence of $TCL_BIN_DIR/tclConfig.sh" >&5
+echo $ECHO_N "checking for existence of $TCL_BIN_DIR/tclConfig.sh... $ECHO_C" >&6
+
+ if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
+ echo "$as_me:$LINENO: result: loading" >&5
+echo "${ECHO_T}loading" >&6
+ . $TCL_BIN_DIR/tclConfig.sh
+ else
+ echo "$as_me:$LINENO: result: file not found" >&5
+echo "${ECHO_T}file not found" >&6
+ fi
+
+ # DB requires at least version 8.4.
+ if test ${TCL_MAJOR_VERSION} -lt 8 \
+ -o ${TCL_MAJOR_VERSION} -eq 8 -a ${TCL_MINOR_VERSION} -lt 4; then
+ { { echo "$as_me:$LINENO: error: Berkeley DB requires Tcl version 8.4 or better." >&5
+echo "$as_me: error: Berkeley DB requires Tcl version 8.4 or better." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ #
+ # The eval is required to do the TCL_DBGX substitution in the
+ # TCL_LIB_FILE variable
+ #
+ eval TCL_LIB_FILE="${TCL_LIB_FILE}"
+ eval TCL_LIB_FLAG="${TCL_LIB_FLAG}"
+ eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
+
+ #
+ # If the DB Tcl library isn't loaded with the Tcl spec and library
+ # flags on AIX, the resulting libdb_tcl-X.Y.so.0 will drop core at
+ # load time. [#4843] Furthermore, with Tcl 8.3, the link flags
+ # given by the Tcl spec are insufficient for our use. [#5779]
+ #
+ case "$host_os" in
+ aix4.[2-9].*)
+ LIBTSO_LIBS="$LIBTSO_LIBS $TCL_LIB_SPEC $TCL_LIB_FLAG"
+ LIBTSO_LIBS="$LIBTSO_LIBS -L$TCL_EXEC_PREFIX/lib -ltcl$TCL_VERSION";;
+ aix*)
+ LIBTSO_LIBS="$LIBTSO_LIBS $TCL_LIB_SPEC $TCL_LIB_FLAG";;
+ esac
+
+
+
+
+
+ TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}"
+
+
+ if test x"$TCL_PREFIX" != x && test -f "$TCL_PREFIX/include/tcl.h"; then
+ TCFLAGS="-I$TCL_PREFIX/include"
+ fi
+
+ INSTALL_LIBS="${INSTALL_LIBS} \$(libtso_target)"
fi
+# Optional DB 1.85 compatibility API.
+if test "$db_cv_compat185" = "yes"; then
+ ADDITIONAL_INCS="db_185.h $ADDITIONAL_INCS"
+
+ ADDITIONAL_OBJS="db185${o} $ADDITIONAL_OBJS"
fi
-rm -fr conftest*
+
+# You can disable pieces of functionality to save space.
+#
+# Btree is always configured: it is the standard method, and Hash off-page
+# duplicates require it.
+ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(BTREE_OBJS)"
+
+# Hash can be disabled.
+if test "$db_cv_build_hash" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_HASH 1
+_ACEOF
+
+
+
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(HASH_OBJS)"
+ if test "$db_cv_build_verify" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(HASH_VRFY_OBJS)"
+ fi
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS hash_stub${o}"
fi
+# Queue can be disabled.
+if test "$db_cv_build_queue" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_QUEUE 1
+_ACEOF
+
+
+
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(QUEUE_OBJS)"
+ if test "$db_cv_build_verify" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(QUEUE_VRFY_OBJS)"
+ fi
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS qam_stub${o}"
fi
-rm -f conftest*
+
+# The replication code.
+if test "$db_cv_build_replication" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_REPLICATION 1
+_ACEOF
+
+
+
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REP_OBJS)"
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS rep_stub${o}"
fi
-echo "$ac_t""$db_cv_int32" 1>&6
-if test "$db_cv_int32" = no; then
- { echo "configure: error: No signed 32-bit integral type." 1>&2; exit 1; }
+# The verification code.
+if test "$db_cv_build_verify" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_VERIFY 1
+_ACEOF
+
+
+
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(BTREE_VRFY_OBJS)"
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS db_vrfy_stub${o}"
fi
-if test "$db_cv_int32" != yes; then
- int32_decl="typedef $db_cv_int32 int32_t;"
+
+# The crypto support.
+if test -d "$srcdir/../crypto" -a "$db_cv_build_cryptography" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_CRYPTO 1
+_ACEOF
+
+
+
+
+ CRYPTO_OBJS="\$(CRYPTO_OBJS)"
+else
+ CRYPTO_OBJS="crypto_stub${o}"
fi
+# Optional utilities.
+if test "$db_cv_dump185" = "yes"; then
+ ADDITIONAL_PROGS="db_dump185 $ADDITIONAL_PROGS"
+fi
-echo $ac_n "checking for largest integral type""... $ac_c" 1>&6
-echo "configure:3247: checking for largest integral type" >&5
-if eval "test \"`echo '$''{'db_cv_align_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Checks for include files, structures, C types.
+echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3252 "configure"
-#include "confdefs.h"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
-int main() {
-long long foo;
-; return 0; }
-EOF
-if { (eval echo configure:3259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- db_cv_align_t="unsigned long long"
+#include <sys/stat.h>
+
+#if defined(S_ISBLK) && defined(S_IFDIR)
+# if S_ISBLK (S_IFDIR)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISBLK) && defined(S_IFCHR)
+# if S_ISBLK (S_IFCHR)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISLNK) && defined(S_IFREG)
+# if S_ISLNK (S_IFREG)
+You lose.
+# endif
+#endif
+
+#if defined(S_ISSOCK) && defined(S_IFREG)
+# if S_ISSOCK (S_IFREG)
+You lose.
+# endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "You lose" >/dev/null 2>&1; then
+ ac_cv_header_stat_broken=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- db_cv_align_t="unsigned long"
+ ac_cv_header_stat_broken=no
fi
rm -f conftest*
+
fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6
+if test $ac_cv_header_stat_broken = yes; then
-echo "$ac_t""$db_cv_align_t" 1>&6
-db_align_t_decl="typedef $db_cv_align_t db_align_t;"
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
+fi
-echo $ac_n "checking for integral type equal to pointer size""... $ac_c" 1>&6
-echo "configure:3276: checking for integral type equal to pointer size" >&5
-if eval "test \"`echo '$''{'db_cv_alignp_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- db_cv_alignp_t=$db_cv_align_t
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3285 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned int) != sizeof(char *));}
-EOF
-if { (eval echo configure:3289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_alignp_t="unsigned int"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_time=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_time=no
fi
-rm -fr conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3303 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned long) != sizeof(char *));}
-EOF
-if { (eval echo configure:3307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_alignp_t="unsigned long"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
fi
-rm -fr conftest*
+
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in dir; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ done
+fi
+LIBS=$ac_func_search_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
+
fi
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
- cat > conftest.$ac_ext <<EOF
-#line 3321 "configure"
-#include "confdefs.h"
-main(){exit(sizeof(unsigned long long) != sizeof(char *));}
-EOF
-if { (eval echo configure:3325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_alignp_t="unsigned long long"
+ echo "$as_me:$LINENO: checking for library containing opendir" >&5
+echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6
+if test "${ac_cv_search_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_opendir=no
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in x; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_opendir="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ done
fi
-rm -fr conftest*
+LIBS=$ac_func_search_save_LIBS
fi
+echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+echo "${ECHO_T}$ac_cv_search_opendir" >&6
+if test "$ac_cv_search_opendir" != no; then
+ test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS"
fi
-echo "$ac_t""$db_cv_alignp_t" 1>&6
-db_alignp_t_decl="typedef $db_cv_alignp_t db_alignp_t;"
+fi
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+
+for ac_header in sys/select.h sys/time.h sys/fcntl.h
do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:3347: checking for $ac_hdr that defines DIR" >&5
-if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
else
- cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <$ac_hdr>
-int main() {
-DIR *dirp = 0;
-; return 0; }
-EOF
-if { (eval echo configure:3360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=yes"
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=no"
+ eval "$as_ac_Header=$ac_header_preproc"
fi
-rm -f conftest*
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
fi
-if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- ac_header_dirent=$ac_hdr; break
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
+echo $ECHO_N "checking for struct stat.st_blksize... $ECHO_C" >&6
+if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_blksize)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_blksize=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_blksize)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_blksize=yes
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_member_struct_stat_st_blksize=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_blksize" >&6
+if test $ac_cv_member_struct_stat_st_blksize = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
+_ACEOF
+
+
fi
+
+
+
+# db.h includes <sys/types.h> and <stdio.h>, not the other default includes
+# autoconf usually includes. For that reason, we specify a set of includes
+# for all type checking tests. [#5060]
+#
+# IBM's OS/390 and z/OS releases have types in <inttypes.h> not also found
+# in <sys/types.h>. Include <inttypes.h> as well, if it exists.
+
+db_includes="#include <sys/types.h>"
+if test "${ac_cv_header_inttypes_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${ac_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking inttypes.h usability" >&5
+echo $ECHO_N "checking inttypes.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <inttypes.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking inttypes.h presence" >&5
+echo $ECHO_N "checking inttypes.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <inttypes.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: inttypes.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: inttypes.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: inttypes.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: inttypes.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: inttypes.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: inttypes.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: inttypes.h: proceeding with the preprocessor's result" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to bug-autoconf@gnu.org. ##
+## ------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${ac_cv_header_inttypes_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_inttypes_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$ac_cv_header_inttypes_h" >&6
+
+fi
+if test $ac_cv_header_inttypes_h = yes; then
+
+ inttypes_decl="#include <inttypes.h>"
+ db_includes="$db_includes
+#include <inttypes.h>"
+fi
+
+
+db_includes="$db_includes
+#include <stdio.h>"
+
+# We need to know the sizes of various objects on this system.
+# We don't use the SIZEOF_XXX values created by autoconf.
+echo "$as_me:$LINENO: checking for char" >&5
+echo $ECHO_N "checking for char... $ECHO_C" >&6
+if test "${ac_cv_type_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((char *) 0)
+ return 0;
+if (sizeof (char))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_char=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_char=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+echo "${ECHO_T}$ac_cv_type_char" >&6
+
+echo "$as_me:$LINENO: checking size of char" >&5
+echo $ECHO_N "checking size of char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_char" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:3385: checking for opendir in -ldir" >&5
-ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-ldir $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 3393 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
+case $ac_lo in
+?*) ac_cv_sizeof_char=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (char)); }
+unsigned long ulongval () { return (long) (sizeof (char)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (char))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (char))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_char=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_char=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for unsigned char" >&5
+echo $ECHO_N "checking for unsigned char... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((unsigned char *) 0)
+ return 0;
+if (sizeof (unsigned char))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_char=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_char=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_char" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_char" >&6
+
+echo "$as_me:$LINENO: checking size of unsigned char" >&5
+echo $ECHO_N "checking size of unsigned char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_unsigned_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_unsigned_char" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned char))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_unsigned_char=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (unsigned char)); }
+unsigned long ulongval () { return (long) (sizeof (unsigned char)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (unsigned char))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (unsigned char))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (unsigned char))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_unsigned_char=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned char), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_unsigned_char=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_unsigned_char" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6
+if test "${ac_cv_type_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((short *) 0)
+ return 0;
+if (sizeof (short))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_short=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_short=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6
+
+echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_short" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (short)); }
+unsigned long ulongval () { return (long) (sizeof (short)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (short))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (short))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_short=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for unsigned short" >&5
+echo $ECHO_N "checking for unsigned short... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((unsigned short *) 0)
+ return 0;
+if (sizeof (unsigned short))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_short=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_short=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_short" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_short" >&6
+
+echo "$as_me:$LINENO: checking size of unsigned short" >&5
+echo $ECHO_N "checking size of unsigned short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_unsigned_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_unsigned_short" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned short))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_unsigned_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (unsigned short)); }
+unsigned long ulongval () { return (long) (sizeof (unsigned short)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (unsigned short))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (unsigned short))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (unsigned short))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_unsigned_short=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned short), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_unsigned_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_unsigned_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((int *) 0)
+ return 0;
+if (sizeof (int))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_int=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
+
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_int" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (int))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (int))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_int=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for unsigned int" >&5
+echo $ECHO_N "checking for unsigned int... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((unsigned int *) 0)
+ return 0;
+if (sizeof (unsigned int))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_int=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_int=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_int" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_int" >&6
+
+echo "$as_me:$LINENO: checking size of unsigned int" >&5
+echo $ECHO_N "checking size of unsigned int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_unsigned_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_unsigned_int" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned int))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_unsigned_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (unsigned int)); }
+unsigned long ulongval () { return (long) (sizeof (unsigned int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (unsigned int))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (unsigned int))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (unsigned int))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_unsigned_int=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned int), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_unsigned_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_unsigned_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((long *) 0)
+ return 0;
+if (sizeof (long))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
+
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_long=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for unsigned long" >&5
+echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((unsigned long *) 0)
+ return 0;
+if (sizeof (unsigned long))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_long=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long" >&6
+
+echo "$as_me:$LINENO: checking size of unsigned long" >&5
+echo $ECHO_N "checking size of unsigned long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_unsigned_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_unsigned_long" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (unsigned long))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_unsigned_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (unsigned long)); }
+unsigned long ulongval () { return (long) (sizeof (unsigned long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (unsigned long))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (unsigned long))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (unsigned long))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_unsigned_long=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (unsigned long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (unsigned long), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_unsigned_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_unsigned_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_unsigned_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:3404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ac_cv_type_size_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+
+echo "$as_me:$LINENO: checking size of size_t" >&5
+echo $ECHO_N "checking size of size_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ if test "$ac_cv_type_size_t" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_size_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (size_t)); }
+unsigned long ulongval () { return (long) (sizeof (size_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (size_t))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (size_t))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (size_t))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_size_t=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_size_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for char *" >&5
+echo $ECHO_N "checking for char *... $ECHO_C" >&6
+if test "${ac_cv_type_char_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((char * *) 0)
+ return 0;
+if (sizeof (char *))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_char_p=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_char_p=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_char_p" >&5
+echo "${ECHO_T}$ac_cv_type_char_p" >&6
+
+echo "$as_me:$LINENO: checking size of char *" >&5
+echo $ECHO_N "checking size of char *... $ECHO_C" >&6
+if test "${ac_cv_sizeof_char_p+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$ac_cv_type_char_p" = yes; then
+ # The cast to unsigned long works around a bug in the HP C Compiler
+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+ # This bug is HP SR number 8606223364.
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char *))) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char *))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char *))) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char *))) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_lo=$ac_mid; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char *))) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_hi=$ac_mid
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_char_p=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+else
+ if test "$cross_compiling" = yes; then
+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+long longval () { return (long) (sizeof (char *)); }
+unsigned long ulongval () { return (long) (sizeof (char *)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ exit (1);
+ if (((long) (sizeof (char *))) < 0)
+ {
+ long i = longval ();
+ if (i != ((long) (sizeof (char *))))
+ exit (1);
+ fprintf (f, "%ld\n", i);
+ }
+ else
+ {
+ unsigned long i = ulongval ();
+ if (i != ((long) (sizeof (char *))))
+ exit (1);
+ fprintf (f, "%lu\n", i);
+ }
+ exit (ferror (f) || fclose (f) != 0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sizeof_char_p=`cat conftest.val`
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char *), 77
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+ ac_cv_sizeof_char_p=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char_p" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char_p" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p
+_ACEOF
+
+
+
+# We require off_t and size_t, and we don't try to substitute our own
+# if we can't find them.
+echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((off_t *) 0)
+ return 0;
+if (sizeof (off_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_off_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+if test $ac_cv_type_off_t = yes; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: No off_t type." >&5
+echo "$as_me: error: No off_t type." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+ac_cv_type_size_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -ldir"
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: No size_t type." >&5
+echo "$as_me: error: No size_t type." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+# We look for u_char, u_short, u_int, u_long -- if we can't find them,
+# we create our own.
+
+echo "$as_me:$LINENO: checking for u_char" >&5
+echo $ECHO_N "checking for u_char... $ECHO_C" >&6
+if test "${ac_cv_type_u_char+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_char *) 0)
+ return 0;
+if (sizeof (u_char))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_char=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_char=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_char" >&5
+echo "${ECHO_T}$ac_cv_type_u_char" >&6
+if test $ac_cv_type_u_char = yes; then
+ :
else
- echo "$ac_t""no" 1>&6
+ u_char_decl="typedef unsigned char u_char;"
fi
+
+
+echo "$as_me:$LINENO: checking for u_short" >&5
+echo $ECHO_N "checking for u_short... $ECHO_C" >&6
+if test "${ac_cv_type_u_short+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
-echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:3426: checking for opendir in -lx" >&5
-ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_short *) 0)
+ return 0;
+if (sizeof (u_short))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_short=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_short=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_short" >&5
+echo "${ECHO_T}$ac_cv_type_u_short" >&6
+if test $ac_cv_type_u_short = yes; then
+ :
else
- ac_save_LIBS="$LIBS"
-LIBS="-lx $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 3434 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
+ u_short_decl="typedef unsigned short u_short;"
+fi
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:3445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+
+
+echo "$as_me:$LINENO: checking for u_int" >&5
+echo $ECHO_N "checking for u_int... $ECHO_C" >&6
+if test "${ac_cv_type_u_int+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_int *) 0)
+ return 0;
+if (sizeof (u_int))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_int=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int" >&5
+echo "${ECHO_T}$ac_cv_type_u_int" >&6
+if test $ac_cv_type_u_int = yes; then
+ :
+else
+ u_int_decl="typedef unsigned int u_int;"
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+
+
+echo "$as_me:$LINENO: checking for u_long" >&5
+echo $ECHO_N "checking for u_long... $ECHO_C" >&6
+if test "${ac_cv_type_u_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_long *) 0)
+ return 0;
+if (sizeof (u_long))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_long=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_long" >&5
+echo "${ECHO_T}$ac_cv_type_u_long" >&6
+if test $ac_cv_type_u_long = yes; then
+ :
+else
+ u_long_decl="typedef unsigned long u_long;"
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -lx"
+
+
+
+echo "$as_me:$LINENO: checking for u_int8_t" >&5
+echo $ECHO_N "checking for u_int8_t... $ECHO_C" >&6
+if test "${ac_cv_type_u_int8_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_int8_t *) 0)
+ return 0;
+if (sizeof (u_int8_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_int8_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int8_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int8_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int8_t" >&6
+if test $ac_cv_type_u_int8_t = yes; then
+ :
+else
+
+ case "1" in
+ "$ac_cv_sizeof_unsigned_int")
+ u_int8_decl="typedef unsigned int u_int8_t;";;
+ "$ac_cv_sizeof_unsigned_char")
+ u_int8_decl="typedef unsigned char u_int8_t;";;
+ "$ac_cv_sizeof_unsigned_short")
+ u_int8_decl="typedef unsigned short u_int8_t;";;
+ "$ac_cv_sizeof_unsigned_long")
+ u_int8_decl="typedef unsigned long u_int8_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No unsigned 1-byte integral type" >&5
+echo "$as_me: error: No unsigned 1-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
fi
+
+
+echo "$as_me:$LINENO: checking for u_int16_t" >&5
+echo $ECHO_N "checking for u_int16_t... $ECHO_C" >&6
+if test "${ac_cv_type_u_int16_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_int16_t *) 0)
+ return 0;
+if (sizeof (u_int16_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_int16_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int16_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int16_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int16_t" >&6
+if test $ac_cv_type_u_int16_t = yes; then
+ :
+else
+
+ case "2" in
+ "$ac_cv_sizeof_unsigned_int")
+ u_int16_decl="typedef unsigned int u_int16_t;";;
+ "$ac_cv_sizeof_unsigned_char")
+ u_int16_decl="typedef unsigned char u_int16_t;";;
+ "$ac_cv_sizeof_unsigned_short")
+ u_int16_decl="typedef unsigned short u_int16_t;";;
+ "$ac_cv_sizeof_unsigned_long")
+ u_int16_decl="typedef unsigned long u_int16_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No unsigned 2-byte integral type" >&5
+echo "$as_me: error: No unsigned 2-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
fi
-for ac_hdr in sys/select.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3471: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+
+echo "$as_me:$LINENO: checking for int16_t" >&5
+echo $ECHO_N "checking for int16_t... $ECHO_C" >&6
+if test "${ac_cv_type_int16_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 3476 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3481: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((int16_t *) 0)
+ return 0;
+if (sizeof (int16_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_int16_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int16_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5
+echo "${ECHO_T}$ac_cv_type_int16_t" >&6
+if test $ac_cv_type_int16_t = yes; then
+ :
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
+
+ case "2" in
+ "$ac_cv_sizeof_int")
+ int16_decl="typedef int int16_t;";;
+ "$ac_cv_sizeof_char")
+ int16_decl="typedef char int16_t;";;
+ "$ac_cv_sizeof_short")
+ int16_decl="typedef short int16_t;";;
+ "$ac_cv_sizeof_long")
+ int16_decl="typedef long int16_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No signed 2-byte integral type" >&5
+echo "$as_me: error: No signed 2-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
fi
-rm -f conftest*
+
+
+
+echo "$as_me:$LINENO: checking for u_int32_t" >&5
+echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6
+if test "${ac_cv_type_u_int32_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((u_int32_t *) 0)
+ return 0;
+if (sizeof (u_int32_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_u_int32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_u_int32_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5
+echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6
+if test $ac_cv_type_u_int32_t = yes; then
+ :
+else
+
+ case "4" in
+ "$ac_cv_sizeof_unsigned_int")
+ u_int32_decl="typedef unsigned int u_int32_t;";;
+ "$ac_cv_sizeof_unsigned_char")
+ u_int32_decl="typedef unsigned char u_int32_t;";;
+ "$ac_cv_sizeof_unsigned_short")
+ u_int32_decl="typedef unsigned short u_int32_t;";;
+ "$ac_cv_sizeof_unsigned_long")
+ u_int32_decl="typedef unsigned long u_int32_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No unsigned 4-byte integral type" >&5
+echo "$as_me: error: No unsigned 4-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
+
+
+
+echo "$as_me:$LINENO: checking for int32_t" >&5
+echo $ECHO_N "checking for int32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int32_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((int32_t *) 0)
+ return 0;
+if (sizeof (int32_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_int32_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int32_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int32_t" >&6
+if test $ac_cv_type_int32_t = yes; then
+ :
else
- echo "$ac_t""no" 1>&6
+
+ case "4" in
+ "$ac_cv_sizeof_int")
+ int32_decl="typedef int int32_t;";;
+ "$ac_cv_sizeof_char")
+ int32_decl="typedef char int32_t;";;
+ "$ac_cv_sizeof_short")
+ int32_decl="typedef short int32_t;";;
+ "$ac_cv_sizeof_long")
+ int32_decl="typedef long int32_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No signed 4-byte integral type" >&5
+echo "$as_me: error: No signed 4-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
fi
-done
-for ac_hdr in sys/time.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3511: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+# Check for ssize_t -- if none exists, find a signed integral type that's
+# the same size as a size_t.
+
+echo "$as_me:$LINENO: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((ssize_t *) 0)
+ return 0;
+if (sizeof (ssize_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_ssize_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_ssize_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+if test $ac_cv_type_ssize_t = yes; then
+ :
else
- cat > conftest.$ac_ext <<EOF
-#line 3516 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3521: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
+
+ case "$ac_cv_sizeof_size_t" in
+ "$ac_cv_sizeof_int")
+ ssize_t_decl="typedef int ssize_t;";;
+ "$ac_cv_sizeof_char")
+ ssize_t_decl="typedef char ssize_t;";;
+ "$ac_cv_sizeof_short")
+ ssize_t_decl="typedef short ssize_t;";;
+ "$ac_cv_sizeof_long")
+ ssize_t_decl="typedef long ssize_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No signed $ac_cv_sizeof_size_t-byte integral type" >&5
+echo "$as_me: error: No signed $ac_cv_sizeof_size_t-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+fi
+
+
+# Find the largest integral type.
+
+echo "$as_me:$LINENO: checking for unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_long_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$db_includes
+
+int
+main ()
+{
+if ((unsigned long long *) 0)
+ return 0;
+if (sizeof (unsigned long long))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_unsigned_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_long_long=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6
+if test $ac_cv_type_unsigned_long_long = yes; then
+ db_align_t_decl="typedef unsigned long long db_align_t;"
+else
+ db_align_t_decl="typedef unsigned long db_align_t;"
+fi
+
+
+# Find an integral type which is the same size as a pointer.
+
+
+ case "$ac_cv_sizeof_char_p" in
+ "$ac_cv_sizeof_unsigned_int")
+ db_alignp_t_decl="typedef unsigned int db_alignp_t;";;
+ "$ac_cv_sizeof_unsigned_char")
+ db_alignp_t_decl="typedef unsigned char db_alignp_t;";;
+ "$ac_cv_sizeof_unsigned_short")
+ db_alignp_t_decl="typedef unsigned short db_alignp_t;";;
+ "$ac_cv_sizeof_unsigned_long")
+ db_alignp_t_decl="typedef unsigned long db_alignp_t;";;
+ *)
+ { { echo "$as_me:$LINENO: error: No unsigned $ac_cv_sizeof_char_p-byte integral type" >&5
+echo "$as_me: error: No unsigned $ac_cv_sizeof_char_p-byte integral type" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+
+
+echo "$as_me:$LINENO: checking for ANSI C exit success/failure values" >&5
+echo $ECHO_N "checking for ANSI C exit success/failure values... $ECHO_C" >&6
+if test "${db_cv_exit_defines+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+int
+main ()
+{
+return (EXIT_SUCCESS);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_exit_defines=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+db_cv_exit_defines=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $db_cv_exit_defines" >&5
+echo "${ECHO_T}$db_cv_exit_defines" >&6
+if test "$db_cv_exit_defines" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_EXIT_SUCCESS 1
+_ACEOF
+
+
+
+fi
+
+# Test for various functions/libraries that the test and example programs use:
+# sched_yield function
+# pthreads, socket and math libraries
+echo "$as_me:$LINENO: checking for sched_yield" >&5
+echo $ECHO_N "checking for sched_yield... $ECHO_C" >&6
+if test "${ac_cv_func_sched_yield+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char sched_yield (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_sched_yield) || defined (__stub___sched_yield)
+choke me
+#else
+char (*f) () = sched_yield;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != sched_yield;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_sched_yield=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_sched_yield=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_sched_yield" >&5
+echo "${ECHO_T}$ac_cv_func_sched_yield" >&6
+if test $ac_cv_func_sched_yield = yes; then
+ :
+else
+ echo "$as_me:$LINENO: checking for library containing sched_yield" >&5
+echo $ECHO_N "checking for library containing sched_yield... $ECHO_C" >&6
+if test "${ac_cv_search_sched_yield+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+ac_cv_search_sched_yield=no
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main ()
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_sched_yield="none required"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+if test "$ac_cv_search_sched_yield" = no; then
+ for ac_lib in rt; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main ()
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_search_sched_yield="-l$ac_lib"
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ done
fi
-rm -f conftest*
+LIBS=$ac_func_search_save_LIBS
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
+echo "$as_me:$LINENO: result: $ac_cv_search_sched_yield" >&5
+echo "${ECHO_T}$ac_cv_search_sched_yield" >&6
+if test "$ac_cv_search_sched_yield" != no; then
+ test "$ac_cv_search_sched_yield" = "none required" || LIBS="$ac_cv_search_sched_yield $LIBS"
+ LOAD_LIBS="$LOAD_LIBS -lrt"
+fi
+
+fi
+
+
+# XXX
+# We can't check for pthreads in the same way we did the test for sched_yield
+# because the Solaris C library includes pthread interfaces which are not
+# thread-safe. For that reason we always add -lpthread if we find a pthread
+# library. Also we can't depend on any specific call existing (pthread_create,
+# for example), as it may be #defined in an include file -- OSF/1 (Tru64) has
+# this problem.
+echo "$as_me:$LINENO: checking for main in -lpthread" >&5
+echo $ECHO_N "checking for main in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_pthread_main=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_main=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_main" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_main" >&6
+if test $ac_cv_lib_pthread_main = yes; then
+ LOAD_LIBS="$LOAD_LIBS -lpthread"
+fi
+ac_cv_lib_pthread=ac_cv_lib_pthread_main
+
+
+# XXX
+# We could be more exact about whether these libraries are needed, but we don't
+# bother -- if they exist, we load them.
+echo "$as_me:$LINENO: checking for main in -lm" >&5
+echo $ECHO_N "checking for main in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_m_main=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_main=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_main" >&5
+echo "${ECHO_T}$ac_cv_lib_m_main" >&6
+if test $ac_cv_lib_m_main = yes; then
+ LOAD_LIBS="$LOAD_LIBS -lm"
+fi
+ac_cv_lib_m=ac_cv_lib_m_main
+
+echo "$as_me:$LINENO: checking for main in -lsocket" >&5
+echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_main=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_main=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_main" >&6
+if test $ac_cv_lib_socket_main = yes; then
+ LOAD_LIBS="$LOAD_LIBS -lsocket"
+fi
+ac_cv_lib_socket=ac_cv_lib_socket_main
+
+echo "$as_me:$LINENO: checking for main in -lnsl" >&5
+echo $ECHO_N "checking for main in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_main+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+main ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_main=yes
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_main=no
fi
-done
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_main" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_main" >&6
+if test $ac_cv_lib_nsl_main = yes; then
+ LOAD_LIBS="$LOAD_LIBS -lnsl"
+fi
+ac_cv_lib_nsl=ac_cv_lib_nsl_main
+# Check for mutexes.
+# We do this here because it changes $LIBS.
-echo $ac_n "checking for mutexes""... $ac_c" 1>&6
-echo "configure:3551: checking for mutexes" >&5
-if eval "test \"`echo '$''{'db_cv_mutex'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Mutexes we don't test for, but want the #defines to exist for
+# other ports.
+
+
+
+
+
+echo "$as_me:$LINENO: checking for mutexes" >&5
+echo $ECHO_N "checking for mutexes... $ECHO_C" >&6
+if test "${db_cv_mutex+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- db_cv_mutex=no
+
+db_cv_mutex=no
orig_libs=$LIBS
+# User-specified POSIX or UI mutexes.
+#
+# There are two different reasons to specify mutexes: First, the application
+# is already using one type of mutex and doesn't want to mix-and-match (for
+# example, on Solaris, which has POSIX, UI and LWP mutexes). Second, the
+# applications POSIX pthreads mutexes don't support inter-process locking,
+# but the application wants to use them anyway (for example, current Linux
+# and *BSD systems).
+#
+# If we're on Solaris, we insist that -lthread or -lpthread be used. The
+# problem is the Solaris C library has UI/POSIX interface stubs, but they're
+# broken, configuring them for inter-process mutexes doesn't return an error,
+# but it doesn't work either. Otherwise, we try first without the library
+# and then with it: there's some information that SCO/UnixWare/OpenUNIX needs
+# this. [#4950]
+#
+# Test for LWP threads before testing for UI/POSIX threads, we prefer them
+# on Solaris. There's a bug in SunOS 5.7 where applications get pwrite, not
+# pwrite64, if they load the C library before the appropriate threads library,
+# e.g., tclsh using dlopen to load the DB library. By using LWP threads we
+# avoid answering lots of user questions, not to mention the bugs.
if test "$db_cv_posixmutexes" = yes; then
- db_cv_mutex="posix_only"
+ case "$host_os" in
+ solaris*)
+ db_cv_mutex="posix_library_only";;
+ *)
+ db_cv_mutex="posix_only";;
+ esac
fi
if test "$db_cv_uimutexes" = yes; then
- db_cv_mutex="ui_only"
+ case "$host_os" in
+ solaris*)
+ db_cv_mutex="ui_library_only";;
+ *)
+ db_cv_mutex="ui_only";;
+ esac
+fi
+
+# User-specified Win32 mutexes (MinGW build)
+if test "$db_cv_mingw" = "yes"; then
+ db_cv_mutex=win32/gcc
fi
+# LWP threads: _lwp_XXX
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3572 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <synch.h>
-main(){
+int
+main ()
+{
+
static lwp_mutex_t mi = SHAREDMUTEX;
static lwp_cond_t ci = SHAREDCV;
lwp_mutex_t mutex = mi;
@@ -3580,32 +27301,50 @@ main(){
exit (
_lwp_mutex_lock(&mutex) ||
_lwp_mutex_unlock(&mutex));
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="Solaris/lwp"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+# UI threads: thr_XXX
+#
+# Try with and without the -lthread library.
if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; then
-LIBS="-lthread $LIBS"
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3604 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <thread.h>
#include <synch.h>
-main(){
+int
+main ()
+{
+
mutex_t mutex;
cond_t cond;
int type = USYNC_PROCESS;
@@ -3614,31 +27353,48 @@ main(){
cond_init(&cond, type, NULL) ||
mutex_lock(&mutex) ||
mutex_unlock(&mutex));
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3620: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_mutex="UI/threads/library"
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="UI/threads"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
-LIBS="$orig_libs"
fi
-if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3637 "configure"
-#include "confdefs.h"
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+if test "$db_cv_mutex" = no -o \
+ "$db_cv_mutex" = "ui_only" -o "$db_cv_mutex" = "ui_library_only"; then
+LIBS="$LIBS -lthread"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <thread.h>
#include <synch.h>
-main(){
+int
+main ()
+{
+
mutex_t mutex;
cond_t cond;
int type = USYNC_PROCESS;
@@ -3647,34 +27403,58 @@ main(){
cond_init(&cond, type, NULL) ||
mutex_lock(&mutex) ||
mutex_unlock(&mutex));
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_mutex="UI/threads"
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="UI/threads/library"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
-if test "$db_cv_mutex" = "ui_only"; then
- { echo "configure: error: unable to find UI mutex interfaces" 1>&2; exit 1; }
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS="$orig_libs"
+fi
+if test "$db_cv_mutex" = "ui_only" -o "$db_cv_mutex" = "ui_library_only"; then
+ { { echo "$as_me:$LINENO: error: unable to find UI mutex interfaces" >&5
+echo "$as_me: error: unable to find UI mutex interfaces" >&2;}
+ { (exit 1); exit 1; }; }
fi
-
+# POSIX.1 pthreads: pthread_XXX
+#
+# Try with and without the -lpthread library. If the user specified we use
+# POSIX pthreads mutexes, and we fail to find the full interface, try and
+# configure for just intra-process support.
if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then
+
if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ db_cv_mutex="no"
else
- cat > conftest.$ac_ext <<EOF
-#line 3674 "configure"
-#include "confdefs.h"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <pthread.h>
-main(){
+main() {
pthread_cond_t cond;
pthread_mutex_t mutex;
pthread_condattr_t condattr;
@@ -3693,29 +27473,45 @@ main(){
pthread_condattr_destroy(&condattr) ||
pthread_mutexattr_destroy(&mutexattr));
}
-EOF
-if { (eval echo configure:3698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_mutex="POSIX/pthreads"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads""
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -fr conftest*
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then
-LIBS="-lpthread $LIBS"
+if test "$db_cv_mutex" = no -o \
+ "$db_cv_mutex" = "posix_only" -o "$db_cv_mutex" = "posix_library_only"; then
+ LIBS="$LIBS -lpthread"
+
if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ db_cv_mutex="no"
else
- cat > conftest.$ac_ext <<EOF
-#line 3715 "configure"
-#include "confdefs.h"
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <pthread.h>
-main(){
+main() {
pthread_cond_t cond;
pthread_mutex_t mutex;
pthread_condattr_t condattr;
@@ -3734,33 +27530,264 @@ main(){
pthread_condattr_destroy(&condattr) ||
pthread_mutexattr_destroy(&mutexattr));
}
-EOF
-if { (eval echo configure:3739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_mutex="POSIX/pthreads/library"
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads/library""
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -fr conftest*
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
-LIBS="$orig_libs"
+ LIBS="$orig_libs"
fi
if test "$db_cv_mutex" = "posix_only"; then
- { echo "configure: error: unable to find POSIX mutex interfaces" 1>&2; exit 1; }
+
+if test "$cross_compiling" = yes; then
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <pthread.h>
+int
+main ()
+{
+
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+ pthread_condattr_t condattr;
+ pthread_mutexattr_t mutexattr;
+ exit (
+ pthread_condattr_init(&condattr) ||
+ pthread_mutexattr_init(&mutexattr) ||
+ pthread_cond_init(&cond, &condattr) ||
+ pthread_mutex_init(&mutex, &mutexattr) ||
+ pthread_mutex_lock(&mutex) ||
+ pthread_mutex_unlock(&mutex) ||
+ pthread_mutex_destroy(&mutex) ||
+ pthread_cond_destroy(&cond) ||
+ pthread_condattr_destroy(&condattr) ||
+ pthread_mutexattr_destroy(&mutexattr));
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads/private""
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <pthread.h>
+main() {
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+ pthread_condattr_t condattr;
+ pthread_mutexattr_t mutexattr;
+ exit (
+ pthread_condattr_init(&condattr) ||
+ pthread_mutexattr_init(&mutexattr) ||
+ pthread_cond_init(&cond, &condattr) ||
+ pthread_mutex_init(&mutex, &mutexattr) ||
+ pthread_mutex_lock(&mutex) ||
+ pthread_mutex_unlock(&mutex) ||
+ pthread_mutex_destroy(&mutex) ||
+ pthread_cond_destroy(&cond) ||
+ pthread_condattr_destroy(&condattr) ||
+ pthread_mutexattr_destroy(&mutexattr));
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads/private""
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+fi
+if test "$db_cv_mutex" = "posix_only" -o \
+ "$db_cv_mutex" = "posix_library_only"; then
+ LIBS="$LIBS -lpthread"
-if test "$db_cv_mutex" = no; then
if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <pthread.h>
+int
+main ()
+{
+
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+ pthread_condattr_t condattr;
+ pthread_mutexattr_t mutexattr;
+ exit (
+ pthread_condattr_init(&condattr) ||
+ pthread_mutexattr_init(&mutexattr) ||
+ pthread_cond_init(&cond, &condattr) ||
+ pthread_mutex_init(&mutex, &mutexattr) ||
+ pthread_mutex_lock(&mutex) ||
+ pthread_mutex_unlock(&mutex) ||
+ pthread_mutex_destroy(&mutex) ||
+ pthread_cond_destroy(&cond) ||
+ pthread_condattr_destroy(&condattr) ||
+ pthread_mutexattr_destroy(&mutexattr));
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads/library/private""
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <pthread.h>
+main() {
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+ pthread_condattr_t condattr;
+ pthread_mutexattr_t mutexattr;
+ exit (
+ pthread_condattr_init(&condattr) ||
+ pthread_mutexattr_init(&mutexattr) ||
+ pthread_cond_init(&cond, &condattr) ||
+ pthread_mutex_init(&mutex, &mutexattr) ||
+ pthread_mutex_lock(&mutex) ||
+ pthread_mutex_unlock(&mutex) ||
+ pthread_mutex_destroy(&mutex) ||
+ pthread_cond_destroy(&cond) ||
+ pthread_condattr_destroy(&condattr) ||
+ pthread_mutexattr_destroy(&mutexattr));
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex=""POSIX/pthreads/library/private""
else
- cat > conftest.$ac_ext <<EOF
-#line 3760 "configure"
-#include "confdefs.h"
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+ LIBS="$orig_libs"
+fi
+
+if test "$db_cv_mutex" = "posix_only" -o \
+ "$db_cv_mutex" = "posix_library_only"; then
+ { { echo "$as_me:$LINENO: error: unable to find POSIX 1003.1 mutex interfaces" >&5
+echo "$as_me: error: unable to find POSIX 1003.1 mutex interfaces" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# msemaphore: HPPA only
+# Try HPPA before general msem test, it needs special alignment.
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/mman.h>
-main(){
+int
+main ()
+{
+
#if defined(__hppa)
typedef msemaphore tsl_t;
msemaphore x;
@@ -3769,2043 +27796,3809 @@ main(){
msem_unlock(&x, 0);
exit(0);
#else
- exit(1);
+ FAIL TO COMPILE/LINK
#endif
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="HP/msem_init"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+# msemaphore: AIX, OSF/1
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3794 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
-#include <sys/mman.h>;
-main(){
+#include <sys/mman.h>
+int
+main ()
+{
+
typedef msemaphore tsl_t;
msemaphore x;
msem_init(&x, 0);
msem_lock(&x, 0);
msem_unlock(&x, 0);
exit(0);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="UNIX/msem_init"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+# ReliantUNIX
if test "$db_cv_mutex" = no; then
LIBS="$LIBS -lmproc"
-cat > conftest.$ac_ext <<EOF
-#line 3823 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
#include <ulocks.h>
-int main() {
-typedef spinlock_t tsl_t;
-spinlock_t x; initspin(&x, 1); cspinlock(&x); spinunlock(&x);
-; return 0; }
-EOF
-if { (eval echo configure:3831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+
+ typedef spinlock_t tsl_t;
+ spinlock_t x;
+ initspin(&x, 1);
+ cspinlock(&x);
+ spinunlock(&x);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="ReliantUNIX/initspin"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS="$orig_libs"
fi
+# SCO: UnixWare has threads in libthread, but OpenServer doesn't.
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3847 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
-main(){
#if defined(__USLC__)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:3857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="SCO/x86/cc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+# abilock_t: SGI
if test "$db_cv_mutex" = no; then
-cat > conftest.$ac_ext <<EOF
-#line 3871 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
#include <abi_mutex.h>
-int main() {
-typedef abilock_t tsl_t;
-abilock_t x; init_lock(&x); acquire_lock(&x); release_lock(&x);
-; return 0; }
-EOF
-if { (eval echo configure:3879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+
+ typedef abilock_t tsl_t;
+ abilock_t x;
+ init_lock(&x);
+ acquire_lock(&x);
+ release_lock(&x);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="SGI/init_lock"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
+# sema_t: Solaris
+# The sema_XXX calls do not work on Solaris 5.5. I see no reason to ever
+# turn this test on, unless we find some other platform that uses the old
+# POSIX.1 interfaces. (I plan to move directly to pthreads on Solaris.)
if test "$db_cv_mutex" = DOESNT_WORK; then
-cat > conftest.$ac_ext <<EOF
-#line 3891 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
#include <synch.h>
-int main() {
-typedef sema_t tsl_t;
- sema_t x;
- sema_init(&x, 1, USYNC_PROCESS, NULL); sema_wait(&x); sema_post(&x);
-; return 0; }
-EOF
-if { (eval echo configure:3900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+
+ typedef sema_t tsl_t;
+ sema_t x;
+ sema_init(&x, 1, USYNC_PROCESS, NULL);
+ sema_wait(&x);
+ sema_post(&x);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="UNIX/sema_init"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
+# _lock_try/_lock_clear: Solaris
+# On Solaris systems without Pthread or UI mutex interfaces, DB uses the
+# undocumented _lock_try _lock_clear function calls instead of either the
+# sema_trywait(3T) or sema_wait(3T) function calls. This is because of
+# problems in those interfaces in some releases of the Solaris C library.
if test "$db_cv_mutex" = no; then
-cat > conftest.$ac_ext <<EOF
-#line 3912 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
#include <sys/machlock.h>
-int main() {
-typedef lock_t tsl_t;
- lock_t x;
- _lock_try(&x); _lock_clear(&x);
-; return 0; }
-EOF
-if { (eval echo configure:3921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+
+ typedef lock_t tsl_t;
+ lock_t x;
+ _lock_try(&x);
+ _lock_clear(&x);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="Solaris/_lock_try"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
+# _check_lock/_clear_lock: AIX
if test "$db_cv_mutex" = no; then
-cat > conftest.$ac_ext <<EOF
-#line 3933 "configure"
-#include "confdefs.h"
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
#include <sys/atomic_op.h>
-int main() {
-int x; _check_lock(&x,0,1); _clear_lock(&x,0);
-; return 0; }
-EOF
-if { (eval echo configure:3940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+
+ int x;
+ _check_lock(&x,0,1);
+ _clear_lock(&x,0);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="AIX/_check_lock"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-if test "$db_cv_mutex" = DOESNT_WORK; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+# _spin_lock_try/_spin_unlock: Apple/Darwin
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ int x;
+ _spin_lock_try(&x);
+ _spin_unlock(&x);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="Darwin/_spin_lock_try"
else
- cat > conftest.$ac_ext <<EOF
-#line 3955 "configure"
-#include "confdefs.h"
-main(){
-#if defined(__alpha)
-#if defined(__GNUC__)
-exit(0);
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+
+# Tru64/cc
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__alpha) && defined(__DECC)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="Tru64/cc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+
+# Alpha/gcc
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__alpha) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-exit(1);}
-EOF
-if { (eval echo configure:3965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="ALPHA/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -fr conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# ARM/gcc: Linux
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__arm__) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="ARM/gcc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# PaRisc/gcc: HP/UX
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 3982 "configure"
-#include "confdefs.h"
-main(){
-#if defined(__hppa)
-#if defined(__GNUC__)
-exit(0);
-#endif
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(__hppa) || defined(__hppa__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-exit(1);}
-EOF
-if { (eval echo configure:3992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="HPPA/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+# PPC/gcc:
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4009 "configure"
-#include "confdefs.h"
-main(){
-#if defined(__powerpc__)
-#if defined(__GNUC__)
-exit(0);
-#endif
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-exit(1);}
-EOF
-if { (eval echo configure:4019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="PPC/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
-if test "$db_cv_mutex" = DOESNT_WORK; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4036 "configure"
-#include "confdefs.h"
-main(){
-#if defined(__sparc__)
-#if defined(__GNUC__)
+# Sparc/gcc: SunOS, Solaris
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__sparc__) && defined(__GNUC__)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:4047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="Sparc/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+# 68K/gcc: SunOS
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4064 "configure"
-#include "confdefs.h"
-main(){
-#if (defined(mc68020) || defined(sun3))
-#if defined(__GNUC__)
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(mc68020) || defined(sun3)) && defined(__GNUC__)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:4075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="68K/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+# x86/gcc: FreeBSD, NetBSD, BSD/OS, Linux
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4092 "configure"
-#include "confdefs.h"
-main(){
-#if defined(i386) || defined(__i386__)
-#if defined(__GNUC__)
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if (defined(i386) || defined(__i386__)) && defined(__GNUC__)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:4103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="x86/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -fr conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# S390/cc: IBM OS/390 Unix
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__MVS__) && defined(__IBMC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="S390/cc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# S390/gcc: Linux
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4120 "configure"
-#include "confdefs.h"
-main(){
-#if defined(__ia64)
-#if defined(__GNUC__)
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__s390__) && defined(__GNUC__)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
-#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:4131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_mutex="ia64/gcc-assembly"
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="S390/gcc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -fr conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# ia86/gcc: Linux
+if test "$db_cv_mutex" = no; then
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#if defined(__ia64) && defined(__GNUC__)
+ exit(0);
+#else
+ FAIL TO COMPILE/LINK
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_mutex="ia64/gcc-assembly"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
+# uts/cc: UTS
if test "$db_cv_mutex" = no; then
-if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4148 "configure"
-#include "confdefs.h"
-main(){
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
#if defined(_UTS)
exit(0);
+#else
+ FAIL TO COMPILE/LINK
#endif
- exit(1);
+
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:4157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_mutex="UTS/cc-assembly"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
-fi
-rm -fr conftest*
-fi
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
fi
-
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$db_cv_mutex" 1>&6
-
+# default to UNIX fcntl system call mutexes.
if test "$db_cv_mutex" = no; then
- echo "configure: warning: THREAD MUTEXES NOT AVAILABLE FOR THIS COMPILER/ARCHITECTURE." 1>&2
- ADDITIONAL_OBJS="mut_fcntl${o} $ADDITIONAL_OBJS"
-else
- cat >> confdefs.h <<\EOF
-#define HAVE_MUTEX_THREADS 1
-EOF
+ db_cv_mutex="UNIX/fcntl"
+fi
fi
+echo "$as_me:$LINENO: result: $db_cv_mutex" >&5
+echo "${ECHO_T}$db_cv_mutex" >&6
case "$db_cv_mutex" in
68K/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_68K_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
;;
AIX/_check_lock) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_AIX_CHECK_LOCK 1
-EOF
+_ACEOF
+
+
+;;
+Darwin/_spin_lock_try) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY 1
+_ACEOF
+
+
;;
ALPHA/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_ALPHA_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
+;;
+ARM/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_ARM_GCC_ASSEMBLY 1
+_ACEOF
+
+
;;
HP/msem_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_HPPA_MSEM_INIT 1
-EOF
+_ACEOF
+
+
;;
HPPA/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_HPPA_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
;;
ia64/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_IA64_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
;;
POSIX/pthreads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_PTHREADS 1
-EOF
+_ACEOF
+
+
+;;
+POSIX/pthreads/private) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_PTHREADS 1
+_ACEOF
+
+
+
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_THREAD_ONLY 1
+_ACEOF
+
+
;;
-POSIX/pthreads/library) LIBS="-lpthread $LIBS"
+POSIX/pthreads/library) LIBS="$LIBS -lpthread"
ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_PTHREADS 1
-EOF
+_ACEOF
+
+
;;
-PPC/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+POSIX/pthreads/library/private)
+ LIBS="$LIBS -lpthread"
+ ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_PTHREADS 1
+_ACEOF
+
+
+
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_THREAD_ONLY 1
+_ACEOF
+
+
+;;
+PPC/gcc-assembly)
+ ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_PPC_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
;;
ReliantUNIX/initspin) LIBS="$LIBS -lmproc"
ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_RELIANTUNIX_INITSPIN 1
-EOF
+_ACEOF
+
+
+;;
+S390/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_S390_CC_ASSEMBLY 1
+_ACEOF
+
+
+;;
+S390/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_S390_GCC_ASSEMBLY 1
+_ACEOF
+
+
;;
SCO/x86/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SCO_X86_CC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
;;
SGI/init_lock) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SGI_INIT_LOCK 1
-EOF
+_ACEOF
+
+
;;
Solaris/_lock_try) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SOLARIS_LOCK_TRY 1
-EOF
+_ACEOF
+
+
;;
Solaris/lwp) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SOLARIS_LWP 1
-EOF
+_ACEOF
+
+
;;
Sparc/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SPARC_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
+;;
+Tru64/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_TRU64_CC_ASSEMBLY 1
+_ACEOF
+
+
;;
+
UI/threads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_UI_THREADS 1
-EOF
+_ACEOF
+
+
;;
-UI/threads/library) LIBS="-lthread $LIBS"
+UI/threads/library) LIBS="$LIBS -lthread"
ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_UI_THREADS 1
-EOF
+_ACEOF
+
+
;;
UNIX/msem_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_MSEM_INIT 1
-EOF
+_ACEOF
+
+
;;
UNIX/sema_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_SEMA_INIT 1
-EOF
+_ACEOF
+
+
;;
-UTS/cc-assembly) ADDITIONAL_OBJS="$ADDITIONAL_OBJS uts4.cc${o}"
- cat >> confdefs.h <<\EOF
+UTS/cc-assembly) ADDITIONAL_OBJS="uts4.cc${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_UTS_CC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
+;;
+win32) ADDITIONAL_OBJS="mut_win32${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_WIN32 1
+_ACEOF
+
+
+;;
+win32/gcc) ADDITIONAL_OBJS="mut_win32${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_WIN32_GCC 1
+_ACEOF
+
+
;;
x86/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS"
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\_ACEOF
#define HAVE_MUTEX_X86_GCC_ASSEMBLY 1
-EOF
+_ACEOF
+
+
+;;
+UNIX/fcntl) { echo "$as_me:$LINENO: WARNING: NO FAST MUTEXES FOUND FOR THIS COMPILER/ARCHITECTURE." >&5
+echo "$as_me: WARNING: NO FAST MUTEXES FOUND FOR THIS COMPILER/ARCHITECTURE." >&2;}
+ ADDITIONAL_OBJS="mut_fcntl${o} $ADDITIONAL_OBJS"
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_FCNTL 1
+_ACEOF
+
+
+;;
+*) { { echo "$as_me:$LINENO: error: Unknown mutex interface: $db_cv_mutex" >&5
+echo "$as_me: error: Unknown mutex interface: $db_cv_mutex" >&2;}
+ { (exit 1); exit 1; }; };;
+esac
+
+if test "$db_cv_mutex" != "UNIX/fcntl"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_THREADS 1
+_ACEOF
+
+
+
+fi
+
+# There are 3 classes of mutexes:
+#
+# 1: Mutexes requiring no cleanup, for example, test-and-set mutexes.
+# 2: Mutexes that must be destroyed, but which don't hold permanent system
+# resources, for example, pthread mutexes on MVS aka OS/390 aka z/OS.
+# 3: Mutexes that must be destroyed, even after the process is gone, for
+# example, pthread mutexes on QNX and binary semaphores on VxWorks.
+#
+# DB cannot currently distinguish between #2 and #3 because DB does not know
+# if the application is running environment recovery as part of startup and
+# does not need to do cleanup, or if the environment is being removed and/or
+# recovered in a loop in the application, and so does need to clean up. If
+# we get it wrong, we're going to call the mutex destroy routine on a random
+# piece of memory, which usually works, but just might drop core. For now,
+# we group #2 and #3 into the HAVE_MUTEX_SYSTEM_RESOURCES define, until we
+# have a better solution or reason to solve this in a general way -- so far,
+# the places we've needed to handle this are few.
+
+
+
+case "$host_os$db_cv_mutex" in
+*qnx*POSIX/pthread*|openedition*POSIX/pthread*)
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_MUTEX_SYSTEM_RESOURCES 1
+_ACEOF
;;
esac
+# Checks for system functions for which we have replacements.
+#
+# XXX
+# The only portable getcwd call is getcwd(char *, size_t), where the
+# buffer is non-NULL -- Solaris can't handle a NULL buffer, and they
+# deleted getwd().
+
+
+
-for ac_func in getcwd getopt memcmp memcpy memmove
+
+
+for ac_func in getcwd getopt memcmp memcpy memmove raise
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4298: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4303 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4326: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
fi
done
-for ac_func in raise snprintf strcasecmp strerror vsnprintf
+
+
+
+
+
+for ac_func in snprintf strcasecmp strdup strerror vsnprintf
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4355: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4360 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+fi
+done
+
+
+
+# Check for system functions we optionally use.
-int main() {
+
+
+
+
+for ac_func in _fstati64 clock_gettime directio getrusage gettimeofday getuid
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
fi
done
-tmp="`echo \"$LIBOBJS\" | sed \"s/\.o/${o}/g\"`"
-LIBOBJS="$tmp"
-for ac_func in getuid pstat_getdynamic sysconf sched_yield strtoul yield
+
+
+
+for ac_func in pstat_getdynamic sched_yield select strtoul sysconf yield
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4416: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4421 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
done
-case "$host_os" in
-hpux*)
- echo "configure: warning: pread/pwrite interfaces ignored on $host_os." 1>&2;;
-*) for ac_func in pread pwrite
+# Pread/pwrite.
+# HP-UX has pread/pwrite, but it doesn't work with largefile support.
+# NCR's version of System V R 4.3 has pread/pwrite symbols, but no support.
+case "$host_os-$host_vendor" in
+hpux*|sysv4.3*-ncr)
+ { echo "$as_me:$LINENO: WARNING: pread/pwrite interfaces ignored on $host_os-$host_vendor." >&5
+echo "$as_me: WARNING: pread/pwrite interfaces ignored on $host_os-$host_vendor." >&2;};;
+*)
+
+
+for ac_func in pread pwrite
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4475: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4480 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
done
-
+;;
esac
-echo $ac_n "checking for fcntl/F_SETFD""... $ac_c" 1>&6
-echo "configure:4530: checking for fcntl/F_SETFD" >&5
-if eval "test \"`echo '$''{'db_cv_fcntl_f_setfd'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Check for fcntl(2) to deny child process access to file descriptors.
+echo "$as_me:$LINENO: checking for fcntl/F_SETFD" >&5
+echo $ECHO_N "checking for fcntl/F_SETFD... $ECHO_C" >&6
+if test "${db_cv_fcntl_f_setfd+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
-else
- cat > conftest.$ac_ext <<EOF
-#line 4538 "configure"
-#include "confdefs.h"
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <sys/types.h>
#include <fcntl.h>
-main(){exit(fcntl(1, F_SETFD, 1) == -1);}
-EOF
-if { (eval echo configure:4545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+int
+main ()
+{
+
+ fcntl(1, F_SETFD, 1);
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
db_cv_fcntl_f_setfd=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_fcntl_f_setfd=no
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+db_cv_fcntl_f_setfd=no
fi
-rm -fr conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: result: $db_cv_fcntl_f_setfd" >&5
+echo "${ECHO_T}$db_cv_fcntl_f_setfd" >&6
+if test "$db_cv_fcntl_f_setfd" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_FCNTL_F_SETFD 1
+_ACEOF
-fi
-echo "$ac_t""$db_cv_fcntl_f_setfd" 1>&6
-if test "$db_cv_fcntl_f_setfd" = yes; then
- cat >> confdefs.h <<\EOF
-#define HAVE_FCNTL_F_SETFD 1
-EOF
fi
+# A/UX has a broken getopt(3).
case "$host_os" in
-aux*) ADDITIONAL_OBJS="getopt${o} $ADDITIONAL_OBJS";;
+aux*) LIBOBJS="$LIBOBJS getopt.$ac_objext";;
esac
-
-for ac_func in qsort
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4575: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Linux has a broken O_DIRECT flag, but we allow people to override it from
+# the command line.
+test_host_prw=yes
+echo "$as_me:$LINENO: checking for open/O_DIRECT" >&5
+echo $ECHO_N "checking for open/O_DIRECT... $ECHO_C" >&6
+if test "${db_cv_open_o_direct+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 4580 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-int main() {
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
+#include <sys/types.h>
+#include <fcntl.h>
+int
+main ()
+{
-; return 0; }
-EOF
-if { (eval echo configure:4603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
+ open("a", O_RDONLY | O_DIRECT, 0);
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-{ echo "configure: error: No qsort library function." 1>&2; exit 1; }
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ db_cv_open_o_direct=yes; test_host_prw=no
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+db_cv_open_o_direct=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $db_cv_open_o_direct" >&5
+echo "${ECHO_T}$db_cv_open_o_direct" >&6
+if test "$test_host_prw" = "no" -a "$db_cv_open_o_direct" = "yes"; then
+ case "$host_os" in
+ linux*)
+ db_cv_open_o_direct=no;
+ { echo "$as_me:$LINENO: WARNING: O_DIRECT interface ignored on $host_os-$host_vendor." >&5
+echo "$as_me: WARNING: O_DIRECT interface ignored on $host_os-$host_vendor." >&2;};;
+ esac
fi
-done
+if test "$db_cv_open_o_direct" = "yes"; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_O_DIRECT 1
+_ACEOF
-for ac_func in select
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4631: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4636 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-int main() {
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:4659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
fi
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-{ echo "configure: error: No select library function." 1>&2; exit 1; }
-fi
-done
+# Check for largefile support.
+# Check whether --enable-largefile or --disable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+ enableval="$enable_largefile"
+fi;
+if test "$enable_largefile" != no; then
-echo $ac_n "checking for int type sprintf return value""... $ac_c" 1>&6
-echo "configure:4686: checking for int type sprintf return value" >&5
-if eval "test \"`echo '$''{'db_cv_sprintf_count'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test "$cross_compiling" = yes; then
- { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+ echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6
+if test "${ac_cv_sys_largefile_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 4694 "configure"
-#include "confdefs.h"
-main(){char buf[20]; exit(sprintf(buf, "XXX") != 3);}
-EOF
-if { (eval echo configure:4698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- db_cv_sprintf_count=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- db_cv_sprintf_count=no
-fi
-rm -fr conftest*
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext
+ CC="$CC -n32"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sys_largefile_CC=' -n32'; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
fi
+echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+ echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ while :; do
+ ac_cv_sys_file_offset_bits=no
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sys_file_offset_bits=64; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ break
+done
fi
+echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6
+if test "$ac_cv_sys_file_offset_bits" != no; then
-echo "$ac_t""$db_cv_sprintf_count" 1>&6
-if test "$db_cv_sprintf_count" = no; then
- cat >> confdefs.h <<\EOF
-#define SPRINTF_RET_CHARPNT 1
-EOF
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
fi
+rm -f conftest*
+ echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6
+if test "${ac_cv_sys_large_files+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ while :; do
+ ac_cv_sys_large_files=no
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sys_large_files=1; break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ break
+done
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+echo "${ECHO_T}$ac_cv_sys_large_files" >&6
+if test "$ac_cv_sys_large_files" != no; then
-if test "$db_cv_bigfile" = no; then
- case "$host_os" in
- solaris2.8|hpux*)
- if test "$db_cv_cxx" = "yes"; then
- echo "configure: warning: Large file and C++ API support are incompatible on HP-UX" 1>&2
- echo "configure: warning: and Solaris 8; large file support has been turned off." 1>&2
- else
- cat >> confdefs.h <<\EOF
-#define HAVE_FILE_OFFSET_BITS 1
-EOF
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
- fi;;
- aix*|solaris*|linux*)
- cat >> confdefs.h <<\EOF
-#define HAVE_FILE_OFFSET_BITS 1
-EOF
-;;
- esac
fi
+rm -f conftest*
+fi
+
+# Figure out how to create shared regions.
+#
+# First, we look for mmap.
+#
+# BSD/OS has mlock(2), but it doesn't work until the 4.1 release.
+#
+# Nextstep (version 3.3) apparently supports mmap(2) (the mmap symbol
+# is defined in the C library) but does not support munmap(2). Don't
+# try to use mmap if we can't find munmap.
+#
+# Ultrix has mmap(2), but it doesn't work.
mmap_ok=no
case "$host_os" in
bsdi3*|bsdi4.0)
- echo "configure: warning: mlock(2) interface ignored on BSD/OS 3.X and 4.0." 1>&2
+ { echo "$as_me:$LINENO: WARNING: mlock(2) interface ignored on $host_os-$host_vendor." >&5
+echo "$as_me: WARNING: mlock(2) interface ignored on $host_os-$host_vendor." >&2;}
mmap_ok=yes
- for ac_func in mmap munmap
+
+
+for ac_func in mmap munmap
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4748: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4753 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-mmap_ok=no
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ mmap_ok=no
fi
done
;;
ultrix*)
- echo "configure: warning: mmap(2) interface ignored on Ultrix." 1>&2;;
+ { echo "$as_me:$LINENO: WARNING: mmap(2) interface ignored on $host_os-$host_vendor." >&5
+echo "$as_me: WARNING: mmap(2) interface ignored on $host_os-$host_vendor." >&2;};;
*)
mmap_ok=yes
- for ac_func in mlock munlock
+
+
+for ac_func in mlock munlock
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4808: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4813 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
fi
done
- for ac_func in mmap munmap
+
+
+for ac_func in mmap munmap
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4863: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4868 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-mmap_ok=no
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ mmap_ok=no
fi
done
;;
esac
+# Second, we look for shmget.
+#
+# SunOS has the shmget(2) interfaces, but there appears to be a missing
+# #include <debug/debug.h> file, so we ignore them.
shmget_ok=no
case "$host_os" in
sunos*)
- echo "configure: warning: shmget(2) interface ignored on SunOS." 1>&2;;
+ { echo "$as_me:$LINENO: WARNING: shmget(2) interface ignored on $host_os-$host_vendor." >&5
+echo "$as_me: WARNING: shmget(2) interface ignored on $host_os-$host_vendor." >&2;};;
*)
shmget_ok=yes
- for ac_func in shmget
+
+for ac_func in shmget
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4927: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 4932 "configure"
-#include "confdefs.h"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
#endif
-; return 0; }
-EOF
-if { (eval echo configure:4955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-shmget_ok=no
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ shmget_ok=no
fi
done
;;
esac
-if test "$mmap_ok" = no -a "$shmget_ok" = no; then
- echo "configure: warning: Neither mmap/munmap(2) or shmget(2) library functions." 1>&2
+# We require either mmap/munmap(2) or shmget(2).
+if test "$mmap_ok" = "no" -a "$shmget_ok" = "no"; then
+ { echo "$as_me:$LINENO: WARNING: Neither mmap/munmap(2) or shmget(2) library functions." >&5
+echo "$as_me: WARNING: Neither mmap/munmap(2) or shmget(2) library functions." >&2;}
fi
+# We need to add the additional object files into the Makefile with the correct
+# suffix. We can't use $LTLIBOBJS itself, because that variable has $U encoded
+# in it for automake, and that's not what we want. See SR #7227 for additional
+# information.
+#
+# XXX: I'm not sure this is correct.
+REPLACEMENT_OBJS=`echo "$LIBOBJS" |
+ sed "s,\.[^.]* ,$o ,g;s,\.[^.]*$,$o,"`
+# This is necessary so that .o files in LIBOBJS are also built via
+# the ANSI2KNR-filtering rules.
+LIBOBJS=`echo "$LIBOBJS" |
+ sed 's,\.[^.]* ,$U&,g;s,\.[^.]*$,$U&,'`
+LTLIBOBJS=`echo "$LIBOBJS" |
+ sed 's,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,'`
-# Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4991: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_ar'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_ar" in
- /*)
- ac_cv_path_db_cv_path_ar="$db_cv_path_ar" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_ar="$db_cv_path_ar" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_ar="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_ar" && ac_cv_path_db_cv_path_ar="missing_ar"
- ;;
-esac
-fi
-db_cv_path_ar="$ac_cv_path_db_cv_path_ar"
-if test -n "$db_cv_path_ar"; then
- echo "$ac_t""$db_cv_path_ar" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-if test "$db_cv_path_ar" = missing_ar; then
- { echo "configure: error: No ar utility found." 1>&2; exit 1; }
-fi
-# Extract the first word of "chmod", so it can be a program name with args.
-set dummy chmod; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5030: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_chmod'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_chmod" in
- /*)
- ac_cv_path_db_cv_path_chmod="$db_cv_path_chmod" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_chmod="$db_cv_path_chmod" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_chmod="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_chmod" && ac_cv_path_db_cv_path_chmod="missing_chmod"
- ;;
-esac
-fi
-db_cv_path_chmod="$ac_cv_path_db_cv_path_chmod"
-if test -n "$db_cv_path_chmod"; then
- echo "$ac_t""$db_cv_path_chmod" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
+# Initial output file list.
+CREATE_LIST="Makefile
+ db_cxx.h:$srcdir/../dbinc/db_cxx.in
+ db_int.h:$srcdir/../dbinc/db_int.in
+ include.tcl:$srcdir/../test/include.tcl"
-if test "$db_cv_path_chmod" = missing_chmod; then
- { echo "configure: error: No chmod utility found." 1>&2; exit 1; }
-fi
-# Extract the first word of "cp", so it can be a program name with args.
-set dummy cp; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5069: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_cp'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_cp" in
- /*)
- ac_cv_path_db_cv_path_cp="$db_cv_path_cp" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_cp="$db_cv_path_cp" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_cp="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_cp" && ac_cv_path_db_cv_path_cp="missing_cp"
- ;;
-esac
-fi
-db_cv_path_cp="$ac_cv_path_db_cv_path_cp"
-if test -n "$db_cv_path_cp"; then
- echo "$ac_t""$db_cv_path_cp" 1>&6
-else
- echo "$ac_t""no" 1>&6
+# MinGW needs win_db.h.
+if test "$db_cv_mingw" = "yes"; then
+CREATE_LIST="$CREATE_LIST
+ win_db.h:$srcdir/win_db.in"
fi
-if test "$db_cv_path_cp" = missing_cp; then
- { echo "configure: error: No cp utility found." 1>&2; exit 1; }
-fi
-# Extract the first word of "ln", so it can be a program name with args.
-set dummy ln; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5108: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_ln'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+# Create the db.h file from a source file, a list of global function
+# prototypes, and, if configured for unique names, a list of #defines
+# to do DB_VERSION_UNIQUE_NAME substitution.
+if test "$db_cv_uniquename" = "yes"; then
+ CREATE_LIST="$CREATE_LIST
+ db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/rpc_defs.in:$srcdir/../dbinc_auto/ext_def.in:$srcdir/../dbinc_auto/ext_prot.in"
else
- case "$db_cv_path_ln" in
- /*)
- ac_cv_path_db_cv_path_ln="$db_cv_path_ln" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_ln="$db_cv_path_ln" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_ln="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_ln" && ac_cv_path_db_cv_path_ln="missing_ln"
- ;;
-esac
+ CREATE_LIST="$CREATE_LIST
+ db.h:$srcdir/../dbinc/db.in:$srcdir/../dbinc_auto/rpc_defs.in:$srcdir/../dbinc_auto/ext_prot.in"
fi
-db_cv_path_ln="$ac_cv_path_db_cv_path_ln"
-if test -n "$db_cv_path_ln"; then
- echo "$ac_t""$db_cv_path_ln" 1>&6
-else
- echo "$ac_t""no" 1>&6
+
+# If configured for unique names, create the db_int_uext.h file (which
+# does the DB_VERSION_UNIQUE_NAME substitution), which is included by
+# the db_int.h file.
+if test "$db_cv_uniquename" = "yes"; then
+ CREATE_LIST="$CREATE_LIST
+ db_int_def.h:$srcdir/../dbinc_auto/int_def.in"
+ db_int_def='#include "db_int_def.h"'
fi
-if test "$db_cv_path_ln" = missing_ln; then
- { echo "configure: error: No ln utility found." 1>&2; exit 1; }
+# Create the db_185.h and db185_int.h files from source files, a list of
+# global function prototypes, and, if configured for unique names, a list
+# of #defines to do DB_VERSION_UNIQUE_NAME substitution.
+if test "$db_cv_compat185" = "yes"; then
+ if test "$db_cv_uniquename" = "yes"; then
+ CREATE_LIST="$CREATE_LIST
+ db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in
+ db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_def.in:$srcdir/../dbinc_auto/ext_185_prot.in"
+ else
+ CREATE_LIST="$CREATE_LIST
+ db_185.h:$srcdir/../dbinc/db_185.in:$srcdir/../dbinc_auto/ext_185_prot.in
+ db185_int.h:$srcdir/../db185/db185_int.in:$srcdir/../dbinc_auto/ext_185_prot.in"
+ fi
fi
-# Extract the first word of "mkdir", so it can be a program name with args.
-set dummy mkdir; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5147: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_mkdir'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_mkdir" in
- /*)
- ac_cv_path_db_cv_path_mkdir="$db_cv_path_mkdir" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_mkdir="$db_cv_path_mkdir" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_mkdir="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_mkdir" && ac_cv_path_db_cv_path_mkdir="missing_mkdir"
- ;;
-esac
+
+if test "$db_cv_rpm" = "yes"; then
+ CREATE_LIST="$CREATE_LIST db.spec:../dist/db.spec.in"
fi
-db_cv_path_mkdir="$ac_cv_path_db_cv_path_mkdir"
-if test -n "$db_cv_path_mkdir"; then
- echo "$ac_t""$db_cv_path_mkdir" 1>&6
-else
- echo "$ac_t""no" 1>&6
+
+ ac_config_files="$ac_config_files $CREATE_LIST"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
fi
+rm -f confcache
-if test "$db_cv_path_mkdir" = missing_mkdir; then
- { echo "configure: error: No mkdir utility found." 1>&2; exit 1; }
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
fi
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5186: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_ranlib'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_ranlib" in
- /*)
- ac_cv_path_db_cv_path_ranlib="$db_cv_path_ranlib" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_ranlib="$db_cv_path_ranlib" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_ranlib="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_ranlib" && ac_cv_path_db_cv_path_ranlib="missing_ranlib"
- ;;
-esac
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
fi
-db_cv_path_ranlib="$ac_cv_path_db_cv_path_ranlib"
-if test -n "$db_cv_path_ranlib"; then
- echo "$ac_t""$db_cv_path_ranlib" 1>&6
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
else
- echo "$ac_t""no" 1>&6
+ as_unset=false
fi
-# Extract the first word of "rm", so it can be a program name with args.
-set dummy rm; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5222: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_rm'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
else
- case "$db_cv_path_rm" in
- /*)
- ac_cv_path_db_cv_path_rm="$db_cv_path_rm" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_rm="$db_cv_path_rm" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_rm="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_rm" && ac_cv_path_db_cv_path_rm="missing_rm"
- ;;
-esac
+ as_expr=false
fi
-db_cv_path_rm="$ac_cv_path_db_cv_path_rm"
-if test -n "$db_cv_path_rm"; then
- echo "$ac_t""$db_cv_path_rm" 1>&6
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
else
- echo "$ac_t""no" 1>&6
+ as_basename=false
fi
-if test "$db_cv_path_rm" = missing_rm; then
- { echo "configure: error: No rm utility found." 1>&2; exit 1; }
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
fi
-# Extract the first word of "sh", so it can be a program name with args.
-set dummy sh; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5261: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_sh'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_sh" in
- /*)
- ac_cv_path_db_cv_path_sh="$db_cv_path_sh" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_sh="$db_cv_path_sh" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_sh="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_sh" && ac_cv_path_db_cv_path_sh="missing_sh"
- ;;
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
esac
-fi
-db_cv_path_sh="$ac_cv_path_db_cv_path_sh"
-if test -n "$db_cv_path_sh"; then
- echo "$ac_t""$db_cv_path_sh" 1>&6
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
else
- echo "$ac_t""no" 1>&6
+ as_expr=false
fi
-if test "$db_cv_path_sh" = missing_sh; then
- { echo "configure: error: No sh utility found." 1>&2; exit 1; }
-fi
-# Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5300: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_strip'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
else
- case "$db_cv_path_strip" in
- /*)
- ac_cv_path_db_cv_path_strip="$db_cv_path_strip" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_strip="$db_cv_path_strip" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_strip="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_strip" && ac_cv_path_db_cv_path_strip="missing_strip"
- ;;
-esac
+ as_ln_s='cp -p'
fi
-db_cv_path_strip="$ac_cv_path_db_cv_path_strip"
-if test -n "$db_cv_path_strip"; then
- echo "$ac_t""$db_cv_path_strip" 1>&6
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
else
- echo "$ac_t""no" 1>&6
+ as_mkdir_p=false
fi
-if test "$db_cv_path_strip" = missing_strip; then
- { echo "configure: error: No strip utility found." 1>&2; exit 1; }
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by Berkeley DB $as_me 4.2.52, which was
+generated by GNU Autoconf 2.57. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
fi
-if test "$db_cv_test" = "yes"; then
- # Extract the first word of "kill", so it can be a program name with args.
-set dummy kill; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5341: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_db_cv_path_kill'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- case "$db_cv_path_kill" in
- /*)
- ac_cv_path_db_cv_path_kill="$db_cv_path_kill" # Let the user override the test with a path.
- ;;
- ?:/*)
- ac_cv_path_db_cv_path_kill="$db_cv_path_kill" # Let the user override the test with a dos path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_path_db_cv_path_kill="$ac_dir/$ac_word"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_path_db_cv_path_kill" && ac_cv_path_db_cv_path_kill="missing_kill"
- ;;
-esac
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
fi
-db_cv_path_kill="$ac_cv_path_db_cv_path_kill"
-if test -n "$db_cv_path_kill"; then
- echo "$ac_t""$db_cv_path_kill" 1>&6
-else
- echo "$ac_t""no" 1>&6
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
fi
- if test "$db_cv_path_kill" = missing_kill; then
- { echo "configure: error: No kill utility found." 1>&2; exit 1; }
- fi
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
fi
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
-CREATE_LIST="Makefile
- include.tcl:../test/include.tcl
- db.h:../include/db.src
- db_int.h:../include/db_int.src"
-if test "$db_cv_compat185" = "yes"; then
- CREATE_LIST="${CREATE_LIST} db_185.h:../include/db_185.h"
-fi
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+Berkeley DB config.status 4.2.52
+configured by $0, generated by GNU Autoconf 2.57,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
- else
- echo "not updating unwritable cache $cache_file"
- fi
-fi
-rm -f confcache
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
fi
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
-DEFS=-DHAVE_CONFIG_H
+_ACEOF
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
do
- case "\$ac_option" in
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "$CREATE_LIST" ) CONFIG_FILES="$CONFIG_FILES $CREATE_LIST" ;;
+ "db_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS db_config.h:config.hin" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
esac
done
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
-trap 'rm -fr `echo "${CREATE_LIST} db_config.h:config.hin" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@ADDITIONAL_INCS@%$ADDITIONAL_INCS%g
-s%@ADDITIONAL_LANG@%$ADDITIONAL_LANG%g
-s%@ADDITIONAL_LIBS@%$ADDITIONAL_LIBS%g
-s%@ADDITIONAL_OBJS@%$ADDITIONAL_OBJS%g
-s%@ADDITIONAL_PROGS@%$ADDITIONAL_PROGS%g
-s%@CXX@%$CXX%g
-s%@DBS_LIBS@%$DBS_LIBS%g
-s%@DEFAULT_INSTALL@%$DEFAULT_INSTALL%g
-s%@DEFAULT_LIB@%$DEFAULT_LIB%g
-s%@INSTALLER@%$INSTALLER%g
-s%@INSTALL_LIBS@%$INSTALL_LIBS%g
-s%@JAR@%$JAR%g
-s%@JAVAC@%$JAVAC%g
-s%@JAVACFLAGS@%$JAVACFLAGS%g
-s%@LIBDB_ARGS@%$LIBDB_ARGS%g
-s%@LIBJSO_LIBS@%$LIBJSO_LIBS%g
-s%@LIBSO_LIBS@%$LIBSO_LIBS%g
-s%@LIBTOOL@%$LIBTOOL%g
-s%@LIBTSO_LIBS@%$LIBTSO_LIBS%g
-s%@LIBXSO_LIBS@%$LIBXSO_LIBS%g
-s%@MAKEFILE_CC@%$MAKEFILE_CC%g
-s%@MAKEFILE_CCLINK@%$MAKEFILE_CCLINK%g
-s%@MAKEFILE_CXX@%$MAKEFILE_CXX%g
-s%@POSTLINK@%$POSTLINK%g
-s%@RPC_OBJS@%$RPC_OBJS%g
-s%@SOFLAGS@%$SOFLAGS%g
-s%@SOLINK@%$SOLINK%g
-s%@SOSUFFIX@%$SOSUFFIX%g
-s%@o@%$o%g
-s%@DB_VERSION_MAJOR@%$DB_VERSION_MAJOR%g
-s%@DB_VERSION_MINOR@%$DB_VERSION_MINOR%g
-s%@DB_VERSION_PATCH@%$DB_VERSION_PATCH%g
-s%@DB_VERSION_STRING@%$DB_VERSION_STRING%g
-s%@CC@%$CC%g
-s%@CCC@%$CCC%g
-s%@JAVACABS@%$JAVACABS%g
-s%@TCFLAGS@%$TCFLAGS%g
-s%@TCL_BIN_DIR@%$TCL_BIN_DIR%g
-s%@TCL_SRC_DIR@%$TCL_SRC_DIR%g
-s%@TCL_LIB_FILE@%$TCL_LIB_FILE%g
-s%@TCL_TCLSH@%$TCL_TCLSH%g
-s%@CPP@%$CPP%g
-s%@ssize_t_decl@%$ssize_t_decl%g
-s%@u_char_decl@%$u_char_decl%g
-s%@u_short_decl@%$u_short_decl%g
-s%@u_int_decl@%$u_int_decl%g
-s%@u_long_decl@%$u_long_decl%g
-s%@u_int8_decl@%$u_int8_decl%g
-s%@u_int16_decl@%$u_int16_decl%g
-s%@int16_decl@%$int16_decl%g
-s%@u_int32_decl@%$u_int32_decl%g
-s%@int32_decl@%$int32_decl%g
-s%@db_align_t_decl@%$db_align_t_decl%g
-s%@db_alignp_t_decl@%$db_alignp_t_decl%g
-s%@LIBOBJS@%$LIBOBJS%g
-s%@db_cv_path_ar@%$db_cv_path_ar%g
-s%@db_cv_path_chmod@%$db_cv_path_chmod%g
-s%@db_cv_path_cp@%$db_cv_path_cp%g
-s%@db_cv_path_ln@%$db_cv_path_ln%g
-s%@db_cv_path_mkdir@%$db_cv_path_mkdir%g
-s%@db_cv_path_ranlib@%$db_cv_path_ranlib%g
-s%@db_cv_path_rm@%$db_cv_path_rm%g
-s%@db_cv_path_sh@%$db_cv_path_sh%g
-s%@db_cv_path_strip@%$db_cv_path_strip%g
-s%@db_cv_path_kill@%$db_cv_path_kill%g
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@ADDITIONAL_INCS@,$ADDITIONAL_INCS,;t t
+s,@ADDITIONAL_LANG@,$ADDITIONAL_LANG,;t t
+s,@ADDITIONAL_OBJS@,$ADDITIONAL_OBJS,;t t
+s,@ADDITIONAL_PROGS@,$ADDITIONAL_PROGS,;t t
+s,@BUILD_TARGET@,$BUILD_TARGET,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@CONFIGURATION_ARGS@,$CONFIGURATION_ARGS,;t t
+s,@CONFIGURATION_PATH@,$CONFIGURATION_PATH,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@CRYPTO_OBJS@,$CRYPTO_OBJS,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@DEFAULT_LIB@,$DEFAULT_LIB,;t t
+s,@DEFAULT_LIB_CXX@,$DEFAULT_LIB_CXX,;t t
+s,@INSTALLER@,$INSTALLER,;t t
+s,@INSTALL_LIBS@,$INSTALL_LIBS,;t t
+s,@INSTALL_TARGET@,$INSTALL_TARGET,;t t
+s,@JAR@,$JAR,;t t
+s,@JAVACFLAGS@,$JAVACFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@LIBJSO_LIBS@,$LIBJSO_LIBS,;t t
+s,@LIBSO_LIBS@,$LIBSO_LIBS,;t t
+s,@LIBTOOL@,$LIBTOOL,;t t
+s,@LIBTSO_LIBS@,$LIBTSO_LIBS,;t t
+s,@LIBTSO_MODSUFFIX@,$LIBTSO_MODSUFFIX,;t t
+s,@LIBTSO_MODULE@,$LIBTSO_MODULE,;t t
+s,@LIBXSO_LIBS@,$LIBXSO_LIBS,;t t
+s,@LOAD_LIBS@,$LOAD_LIBS,;t t
+s,@MAKEFILE_CC@,$MAKEFILE_CC,;t t
+s,@MAKEFILE_CCLINK@,$MAKEFILE_CCLINK,;t t
+s,@MAKEFILE_CXX@,$MAKEFILE_CXX,;t t
+s,@MAKEFILE_CXXLINK@,$MAKEFILE_CXXLINK,;t t
+s,@MAKEFILE_SOLINK@,$MAKEFILE_SOLINK,;t t
+s,@MAKEFILE_XSOLINK@,$MAKEFILE_XSOLINK,;t t
+s,@OSDIR@,$OSDIR,;t t
+s,@POSTLINK@,$POSTLINK,;t t
+s,@REPLACEMENT_OBJS@,$REPLACEMENT_OBJS,;t t
+s,@RPC_CLIENT_OBJS@,$RPC_CLIENT_OBJS,;t t
+s,@RPM_BUILD@,$RPM_BUILD,;t t
+s,@RPM_POST_INSTALL@,$RPM_POST_INSTALL,;t t
+s,@RPM_POST_UNINSTALL@,$RPM_POST_UNINSTALL,;t t
+s,@SOFLAGS@,$SOFLAGS,;t t
+s,@db_cv_path_rpm_archive@,$db_cv_path_rpm_archive,;t t
+s,@db_int_def@,$db_int_def,;t t
+s,@o@,$o,;t t
+s,@DB_VERSION_MAJOR@,$DB_VERSION_MAJOR,;t t
+s,@DB_VERSION_MINOR@,$DB_VERSION_MINOR,;t t
+s,@DB_VERSION_PATCH@,$DB_VERSION_PATCH,;t t
+s,@DB_VERSION_STRING@,$DB_VERSION_STRING,;t t
+s,@DB_VERSION_UNIQUE_NAME@,$DB_VERSION_UNIQUE_NAME,;t t
+s,@db_cv_path_ar@,$db_cv_path_ar,;t t
+s,@ac_ct_db_cv_path_ar@,$ac_ct_db_cv_path_ar,;t t
+s,@db_cv_path_chmod@,$db_cv_path_chmod,;t t
+s,@ac_ct_db_cv_path_chmod@,$ac_ct_db_cv_path_chmod,;t t
+s,@db_cv_path_cp@,$db_cv_path_cp,;t t
+s,@ac_ct_db_cv_path_cp@,$ac_ct_db_cv_path_cp,;t t
+s,@path_ldconfig@,$path_ldconfig,;t t
+s,@ac_ct_path_ldconfig@,$ac_ct_path_ldconfig,;t t
+s,@db_cv_path_ldconfig@,$db_cv_path_ldconfig,;t t
+s,@db_cv_path_ln@,$db_cv_path_ln,;t t
+s,@ac_ct_db_cv_path_ln@,$ac_ct_db_cv_path_ln,;t t
+s,@db_cv_path_mkdir@,$db_cv_path_mkdir,;t t
+s,@ac_ct_db_cv_path_mkdir@,$ac_ct_db_cv_path_mkdir,;t t
+s,@path_ranlib@,$path_ranlib,;t t
+s,@ac_ct_path_ranlib@,$ac_ct_path_ranlib,;t t
+s,@db_cv_path_ranlib@,$db_cv_path_ranlib,;t t
+s,@db_cv_path_rm@,$db_cv_path_rm,;t t
+s,@ac_ct_db_cv_path_rm@,$ac_ct_db_cv_path_rm,;t t
+s,@db_cv_path_rpm@,$db_cv_path_rpm,;t t
+s,@ac_ct_db_cv_path_rpm@,$ac_ct_db_cv_path_rpm,;t t
+s,@path_sh@,$path_sh,;t t
+s,@ac_ct_path_sh@,$ac_ct_path_sh,;t t
+s,@db_cv_path_sh@,$db_cv_path_sh,;t t
+s,@path_strip@,$path_strip,;t t
+s,@ac_ct_path_strip@,$ac_ct_path_strip,;t t
+s,@db_cv_path_strip@,$db_cv_path_strip,;t t
+s,@db_cv_path_kill@,$db_cv_path_kill,;t t
+s,@ac_ct_db_cv_path_kill@,$ac_ct_db_cv_path_kill,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@db_cv_build_type@,$db_cv_build_type,;t t
+s,@CC@,$CC,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DB_PROTO1@,$DB_PROTO1,;t t
+s,@DB_PROTO2@,$DB_PROTO2,;t t
+s,@DB_CONST@,$DB_CONST,;t t
+s,@CCC@,$CCC,;t t
+s,@ac_ct_CCC@,$ac_ct_CCC,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@cxx_have_stdheaders@,$cxx_have_stdheaders,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LN_S@,$LN_S,;t t
+s,@ECHO@,$ECHO,;t t
+s,@AR@,$AR,;t t
+s,@ac_ct_AR@,$ac_ct_AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@CPP@,$CPP,;t t
+s,@F77@,$F77,;t t
+s,@FFLAGS@,$FFLAGS,;t t
+s,@ac_ct_F77@,$ac_ct_F77,;t t
+s,@SOSUFFIX@,$SOSUFFIX,;t t
+s,@MODSUFFIX@,$MODSUFFIX,;t t
+s,@JMODSUFFIX@,$JMODSUFFIX,;t t
+s,@JAVAC@,$JAVAC,;t t
+s,@JAVA@,$JAVA,;t t
+s,@uudecode@,$uudecode,;t t
+s,@_ACJNI_JAVAC@,$_ACJNI_JAVAC,;t t
+s,@TCFLAGS@,$TCFLAGS,;t t
+s,@TCL_BIN_DIR@,$TCL_BIN_DIR,;t t
+s,@TCL_SRC_DIR@,$TCL_SRC_DIR,;t t
+s,@TCL_LIB_FILE@,$TCL_LIB_FILE,;t t
+s,@TCL_TCLSH@,$TCL_TCLSH,;t t
+s,@inttypes_decl@,$inttypes_decl,;t t
+s,@u_char_decl@,$u_char_decl,;t t
+s,@u_short_decl@,$u_short_decl,;t t
+s,@u_int_decl@,$u_int_decl,;t t
+s,@u_long_decl@,$u_long_decl,;t t
+s,@u_int8_decl@,$u_int8_decl,;t t
+s,@u_int16_decl@,$u_int16_decl,;t t
+s,@int16_decl@,$int16_decl,;t t
+s,@u_int32_decl@,$u_int32_decl,;t t
+s,@int32_decl@,$int32_decl,;t t
+s,@ssize_t_decl@,$ssize_t_decl,;t t
+s,@db_align_t_decl@,$db_align_t_decl,;t t
+s,@db_alignp_t_decl@,$db_alignp_t_decl,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
CEOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
-
-cat >> $CONFIG_STATUS <<EOF
+fi # test -n "$CONFIG_FILES"
-CONFIG_FILES=\${CONFIG_FILES-"${CREATE_LIST}"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
else
- ac_dir_suffix= ac_dots=
- fi
-
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
*) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
- esac
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
esac
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="db_config.h:config.hin"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
# This sed command replaces #undef with comments. This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
rm -f conftest.tail
-while :
+while grep . conftest.undefs >/dev/null
do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
fi
- rm -f $ac_file
- mv conftest.h $ac_file
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
+done
+_ACEOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
+cat >>$CONFIG_STATUS <<\_ACEOF
-exit 0
-EOF
+{ (exit 0); exit 0; }
+_ACEOF
chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
diff --git a/db/dist/configure.ac b/db/dist/configure.ac
index 6086149ea..839b47da8 100644
--- a/db/dist/configure.ac
+++ b/db/dist/configure.ac
@@ -1,20 +1,23 @@
-# Id: configure.ac,v 11.156 2002/09/04 13:51:17 bostic Exp
+# $Id: configure.ac,v 11.198 2003/10/14 20:24:06 mjc Exp $
# Process this file with autoconf to produce a configure script.
PACKAGE=db
AC_INIT(Berkeley DB,
__EDIT_DB_VERSION__, support@sleepycat.com, db-__EDIT_DB_VERSION__)
AC_CONFIG_SRCDIR([../db/db.c])
-AC_CONFIG_HEADER(db_config.h:config.hin)
+AC_CONFIG_HEADERS([db_config.h:config.hin])
# Configure setup.
AC_CANONICAL_HOST()
AC_ARG_PROGRAM()
-# We cannot build in the top-level directory.
-AC_MSG_CHECKING(if building in the top-level directory)
-[ test -d db_archive ] && AC_MSG_ERROR([
-Berkeley DB cannot be built in the top-level distribution directory.])
+# Don't build in the top-level or dist directories.
+AC_MSG_CHECKING(if building in the top-level or dist directories)
+if [ test -d db_archive -o -f configure.ac ] ; then
+ AC_MSG_RESULT(yes)
+ AC_MSG_ERROR(
+ [Berkeley DB should not be built in the top-level or dist directories.])
+fi
AC_MSG_RESULT(no)
# Substitution variables.
@@ -27,13 +30,11 @@ AC_SUBST(CFLAGS)
AC_SUBST(CONFIGURATION_ARGS)
AC_SUBST(CONFIGURATION_PATH)
AC_SUBST(CPPFLAGS)
+AC_SUBST(CRYPTO_OBJS)
AC_SUBST(CXX)
AC_SUBST(CXXFLAGS)
AC_SUBST(DEFAULT_LIB)
AC_SUBST(DEFAULT_LIB_CXX)
-AC_SUBST(EMBEDIX_ECD_CXX)
-AC_SUBST(EMBEDIX_ECD_RPC)
-AC_SUBST(EMBEDIX_ROOT)
AC_SUBST(INSTALLER)
AC_SUBST(INSTALL_LIBS)
AC_SUBST(INSTALL_TARGET)
@@ -45,6 +46,8 @@ AC_SUBST(LIBS)
AC_SUBST(LIBSO_LIBS)
AC_SUBST(LIBTOOL)
AC_SUBST(LIBTSO_LIBS)
+AC_SUBST(LIBTSO_MODSUFFIX)
+AC_SUBST(LIBTSO_MODULE)
AC_SUBST(LIBXSO_LIBS)
AC_SUBST(LOAD_LIBS)
AC_SUBST(MAKEFILE_CC)
@@ -53,12 +56,15 @@ AC_SUBST(MAKEFILE_CXX)
AC_SUBST(MAKEFILE_CXXLINK)
AC_SUBST(MAKEFILE_SOLINK)
AC_SUBST(MAKEFILE_XSOLINK)
+AC_SUBST(OSDIR)
+AC_SUBST(PATH_SEPARATOR)
AC_SUBST(POSTLINK)
+AC_SUBST(REPLACEMENT_OBJS)
AC_SUBST(RPC_CLIENT_OBJS)
+AC_SUBST(RPM_BUILD)
AC_SUBST(RPM_POST_INSTALL)
AC_SUBST(RPM_POST_UNINSTALL)
AC_SUBST(SOFLAGS)
-AC_SUBST(db_cv_path_embedix_install)
AC_SUBST(db_cv_path_rpm_archive)
AC_SUBST(db_int_def)
AC_SUBST(o)
@@ -67,41 +73,48 @@ AC_SUBST(o)
# RPM needs the list of original arguments, but we don't include the RPM
# option itself.
CONFIGURATION_PATH=${PWD-`pwd`}
-CONFIGURATION_ARGS=`echo "$*" |
- sed -e 's/--with-embedix[[^ ]]*//' -e 's/--with-rpm[[^ ]]*//'`
-
-# Set the version.
-AM_VERSION_SET
+CONFIGURATION_ARGS=`echo "$*" | sed -e 's/--with-rpm[[^ ]]*//'`
# Set the default installation location.
-AC_PREFIX_DEFAULT(/usr/local/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@)
+AC_PREFIX_DEFAULT(/usr/local/BerkeleyDB.__EDIT_DB_VERSION_MAJOR__.__EDIT_DB_VERSION_MINOR__)
+
+# Configure the version information.
+AC_SUBST(DB_VERSION_MAJOR)
+DB_VERSION_MAJOR="__EDIT_DB_VERSION_MAJOR__"
+AC_SUBST(DB_VERSION_MINOR)
+DB_VERSION_MINOR="__EDIT_DB_VERSION_MINOR__"
+AC_SUBST(DB_VERSION_PATCH)
+DB_VERSION_PATCH="__EDIT_DB_VERSION_PATCH__"
+AC_SUBST(DB_VERSION_STRING)
+DB_VERSION_STRING='"__EDIT_DB_VERSION_STRING__"'
+AC_SUBST(DB_VERSION_UNIQUE_NAME)
# Process all options before using them.
AM_OPTIONS_SET
# Set some #defines based on configuration options.
-if test "$db_cv_diagnostic" = yes; then
+if test "$db_cv_diagnostic" = "yes"; then
AC_DEFINE(DIAGNOSTIC)
AH_TEMPLATE(DIAGNOSTIC,
[Define to 1 if you want a version with run-time diagnostic checking.])
fi
-if test "$db_cv_debug_rop" = yes; then
+if test "$db_cv_debug_rop" = "yes"; then
AC_DEFINE(DEBUG_ROP)
AH_TEMPLATE(DEBUG_ROP,
[Define to 1 if you want a version that logs read operations.])
fi
-if test "$db_cv_debug_wop" = yes; then
+if test "$db_cv_debug_wop" = "yes"; then
AC_DEFINE(DEBUG_WOP)
AH_TEMPLATE(DEBUG_WOP,
[Define to 1 if you want a version that logs write operations.])
fi
-if test "$db_cv_umrw" = yes; then
+if test "$db_cv_umrw" = "yes"; then
AC_DEFINE(UMRW)
AH_TEMPLATE(UMRW,
[Define to 1 to mask harmless unitialized memory read/writes.])
fi
-if test "$db_cv_test" = yes; then
+if test "$db_cv_test" = "yes"; then
AC_DEFINE(CONFIG_TEST)
AH_TEMPLATE(CONFIG_TEST,
[Define to 1 if you want to build a version for running the test suite.])
@@ -111,16 +124,20 @@ fi
AM_PROGRAMS_SET
AC_PROG_INSTALL
-# RPM/Embedix support: change the standard make and install targets
+# RPM support: change the standard make and install targets
if test "$db_cv_rpm" = "yes"; then
BUILD_TARGET="rpm_build"
- echo "topdir: $CONFIGURATION_PATH" > rpmrc
- if test "$db_cv_embedix" = "yes"; then
- EMBEDIX_ROOT="/usr"
- INSTALL_TARGET="embedix_install"
- else
- INSTALL_TARGET="rpm_install"
- fi
+
+ # Check if we are running RPM version 3 or 4.
+ case "`rpm --version`" in
+ *version\ 4*)
+ RPM_BUILD="rpmbuild"
+ echo "_topdir $CONFIGURATION_PATH" > rpm-macro-defines;;
+ *version\ 3*)
+ RPM_BUILD="rpm"
+ echo "topdir: $CONFIGURATION_PATH" > rpm-macro-defines;;
+ esac
+ INSTALL_TARGET="rpm_install"
else
BUILD_TARGET="library_build"
INSTALL_TARGET="library_install"
@@ -155,20 +172,23 @@ bsdi3*) optimize_def="-O2"
CC=${CC-"shlicc2"}
LIBS="$LIBS -lipc";;
bsdi*) optimize_def="-O2";;
+cygwin*)
+ optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
freebsd*)
optimize_def="-O2"
CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
LDFLAGS="$LDFLAGS -pthread";;
+gnu*|k*bsd*-gnu|linux*)
+ optimize_def="-O2"
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
hpux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
irix*) optimize_def="-O2"
CPPFLAGS="$CPPFLAGS -D_SGI_MP_SOURCE";;
-linux*) optimize_def="-O2"
- CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE -D_REENTRANT";;
mpeix*) CPPFLAGS="$CPPFLAGS -D_POSIX_SOURCE -D_SOCKET_SOURCE"
LIBS="$LIBS -lsocket -lsvipc";;
-osf*) CPPFLAGS="$CPPFLAGS -D_REENTRANT"
- LDFLAGS="$LDFLAGS -pthread";;
-*qnx) AC_DEFINE(HAVE_QNX)
+osf*) CPPFLAGS="$CPPFLAGS -pthread";;
+*qnx*) AC_DEFINE(HAVE_QNX)
AH_TEMPLATE(HAVE_QNX, [Define to 1 if building on QNX.]);;
solaris*)
CPPFLAGS="$CPPFLAGS -D_REENTRANT";;
@@ -185,19 +205,43 @@ CXXFLAGS=${CXXFLAGS-"$CFLAGS"}
# XXX
# Some compilers can't mix optimizing and debug flags. The only way to
# handle this is to specify CFLAGS in the environment before configuring.
-if test "$db_cv_debug" = yes; then
+if test "$db_cv_debug" = "yes"; then
AC_DEFINE(DEBUG)
AH_TEMPLATE(DEBUG, [Define to 1 if you want a debugging version.])
CFLAGS="$CFLAGS -g"
CXXFLAGS="$CXXFLAGS -g"
+ db_cv_build_type=debug
+else
+ db_cv_build_type=release
fi
+AC_SUBST(db_cv_build_type)
# The default compiler is cc (NOT gcc), the default CFLAGS is as specified
# above, NOT what is set by AC_PROG_CC, as it won't set optimization flags
# for any compiler other than gcc.
AC_PROG_CC(cc gcc)
+# Checks for compiler characteristics.
+AC_SUBST(DB_PROTO1)
+AC_SUBST(DB_PROTO2)
+
+DB_PROTO1="#undef __P"
+
+# AC_PROG_CC_STDC only sets ac_cv_prog_cc_stdc if the test fails, so
+# check for "no", not "yes".
+if test "$ac_cv_prog_cc_stdc" = "no"; then
+ DB_PROTO2="#define __P(protos) ()"
+else
+ DB_PROTO2="#define __P(protos) protos"
+fi
+
+AC_C_CONST
+AC_SUBST(DB_CONST)
+if test "$ac_cv_c_const" != "yes"; then
+ DB_CONST="#define const"
+fi
+
# Because of shared library building, the ${CC} used for config tests
# may be different than the ${CC} we want to put in the Makefile.
# The latter is known as ${MAKEFILE_CC} in this script.
@@ -226,6 +270,9 @@ if test "$db_cv_cxx" = "yes"; then
esac
fi
AC_PROG_CXX
+ ###### WORKAROUND: SEE SR #7938
+ AC_PROG_CXXCPP
+ ###############################
AC_CXX_HAVE_STDHEADERS
MAKEFILE_CXX="${CXX}"
MAKEFILE_CXXLINK="${CXX}"
@@ -256,8 +303,8 @@ CCC=CXX
# Libtool configuration.
AC_PROG_LIBTOOL
-LIBTOOL="\$(SHELL) ./libtool"
SOFLAGS="-rpath \$(libdir)"
+LIBTOOL_PROG="${SHELL} ./libtool"
# Set SOSUFFIX and friends
SOSUFFIX_CONFIG
@@ -273,53 +320,59 @@ MAKEFILE_CXX="\$(LIBTOOL) --mode=compile ${MAKEFILE_CXX}"
MAKEFILE_XSOLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK} -avoid-version"
MAKEFILE_CXXLINK="\$(LIBTOOL) --mode=link ${MAKEFILE_CXXLINK}"
+LIBTOOL="\$(SHELL) ./libtool"
+
+case "$host_os" in
+cygwin*)
+ MAKEFILE_SOLINK="$MAKEFILE_SOLINK -no-undefined"
+ MAKEFILE_XSOLINK="$MAKEFILE_XSOLINK -no-undefined";;
+esac
+
# Configure for shared libraries, static libraries, or both. If both are
# configured, build the utilities and example programs with shared versions.
#
# $o is set to ".o" or ".lo", and is the file suffix used in the Makefile
# instead of .o
+if test `$LIBTOOL_PROG --config |
+ grep build_libtool_libs | grep no` 2>/dev/null; then
+ enable_shared="no"
+else
+ enable_shared="yes"
+fi
+if test `$LIBTOOL_PROG --config |
+ grep build_old_libs | grep no` 2>/dev/null; then
+ enable_static="no"
+else
+ enable_static="yes"
+fi
+
+# C API.
if test "$enable_shared" = "no"; then
- DEFAULT_LIB="\$(libdb)"
- POSTLINK="@true"
+ DEFAULT_LIB="\$(libdb_version)"
+ POSTLINK=": "
o=".o"
-fi
-if test "$enable_shared" = "yes"; then
+else
DEFAULT_LIB="\$(libso_target)"
POSTLINK="\$(LIBTOOL) --mode=execute true"
o=".lo"
fi
INSTALL_LIBS="$DEFAULT_LIB"
+if test "$enable_static" = "yes"; then
+ INSTALL_LIBS="$INSTALL_LIBS \$(libdb)"
+fi
# Optional C++ API.
if test "$db_cv_cxx" = "yes"; then
if test "$enable_shared" = "no"; then
- DEFAULT_LIB_CXX="\$(libcxx)"
+ DEFAULT_LIB_CXX="\$(libcxx_version)"
fi
if test "$enable_shared" = "yes"; then
DEFAULT_LIB_CXX="\$(libxso_target)"
fi
INSTALL_LIBS="$INSTALL_LIBS $DEFAULT_LIB_CXX"
-
- # Fill in C++ library for Embedix.
- EMBEDIX_ECD_CXX='<OPTION db-extra>\
- TYPE=bool\
- DEFAULT_VALUE=1\
- PROMPT=Include BerkeleyDB C++ library?\
- <KEEPLIST>\
- /usr/include/db_cxx.h\
- /usr/lib/libdb_cxx-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.so\
- </KEEPLIST>\
- <PROVIDES>\
- libdb_cxx-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.so\
- </PROVIDES>\
- <REQUIRES>\
- ld-linux.so.2\
- libc.so.6\
- </REQUIRES>\
- STATIC_SIZE=0\
- STORAGE_SIZE=523612\
- STARTUP_TIME=0\
- </OPTION>'
+ if test "$enable_static" = "yes"; then
+ INSTALL_LIBS="$INSTALL_LIBS \$(libcxx)"
+ fi
fi
# Optional Java API.
@@ -329,9 +382,28 @@ if test "$db_cv_java" = "yes"; then
AC_MSG_ERROR([Java requires shared libraries])
fi
+ # A classpath that includes . is needed to check for Java
+ CLASSPATH=".:$CLASSPATH"
+ export CLASSPATH
AC_PROG_JAVAC
AC_PROG_JAR
- AC_JNI_INCLUDE_DIR
+ AC_PROG_JAVA
+ AC_JNI_INCLUDE_DIR
+
+ AC_MSG_CHECKING(java version)
+ case "$JAVA" in
+ *kaffe* )
+ JAVA_VERSION=`$JAVA -version 2>&1 |
+ sed -e '/Java Version:/!d' -e 's/.*Java Version: \([[^ ]]*\)[[ ]]*/\1/'` ;;
+ * ) JAVA_VERSION=`$JAVA -version 2>&1 |
+ sed -e '/ version /!d' -e 's/.*"\(.*\)".*/\1/'` ;;
+ esac
+ AC_MSG_RESULT($JAVA_VERSION)
+ case "$JAVA_VERSION" in
+ 1.[[3456789]]* | 1.[[1-9]][[0-9]]* | [[23456789]]* ) ;;
+ * )
+ AC_MSG_ERROR([Java version 1.3 or higher required, got $JAVA_VERSION]) ;;
+ esac
for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS
do
@@ -344,6 +416,18 @@ else
JAVAC=nojavac
fi
+# MinGW support.
+if test "$db_cv_mingw" = "yes"; then
+ OSDIR=os_win32
+ PATH_SEPARATOR="\\\\/:"
+
+ AC_DEFINE(DB_WIN32)
+ AC_DEFINE(STDC_HEADERS)
+else
+ OSDIR=os
+ PATH_SEPARATOR="/"
+fi
+
# Optional RPC client/server.
if test "$db_cv_rpc" = "yes"; then
AC_DEFINE(HAVE_RPC)
@@ -351,55 +435,116 @@ if test "$db_cv_rpc" = "yes"; then
RPC_CLIENT_OBJS="\$(RPC_CLIENT_OBJS)"
ADDITIONAL_PROGS="berkeley_db_svc $ADDITIONAL_PROGS"
-
- EMBEDIX_ECD_RPC="/usr/bin/berkeley_db_svc"
case "$host_os" in
hpux*)
AC_CHECK_FUNC(svc_run,,
AC_CHECK_LIB(nsl, svc_run,
- LIBS="-lnsl $LIBS"; LIBTSO_LIBS="-lnsl $LIBTSO_LIBS"));;
+ LIBS="-lnsl $LIBS"; LIBTSO_LIBS="-lnsl $LIBTSO_LIBS";
+ LIBJSO_LIBS="-lnsl $LIBJSO_LIBS"));;
solaris*)
AC_CHECK_FUNC(svc_run,, AC_CHECK_LIB(nsl, svc_run));;
esac
fi
-AM_TCL_LOAD
+case "$host_os" in
+ darwin*)
+ LIBTSO_MODULE=""
+ LIBTSO_MODSUFFIX=".dylib"
+ ;;
+ *)
+ LIBTSO_MODULE="-module"
+ LIBTSO_MODSUFFIX=@MODSUFFIX@
+ ;;
+esac
-# Optional crypto support.
-if test -d "$srcdir/../crypto"; then
- AC_DEFINE(HAVE_CRYPTO)
- AH_TEMPLATE(HAVE_CRYPTO,
- [Define to 1 if Berkeley DB release includes strong cryptography.])
- ADDITIONAL_OBJS="aes_method${o} crypto${o} mt19937db${o} rijndael-alg-fst${o} rijndael-api-fst${o} $ADDITIONAL_OBJS"
-fi
+AM_TCL_LOAD
# Optional DB 1.85 compatibility API.
if test "$db_cv_compat185" = "yes"; then
ADDITIONAL_INCS="db_185.h $ADDITIONAL_INCS"
+
ADDITIONAL_OBJS="db185${o} $ADDITIONAL_OBJS"
fi
+# You can disable pieces of functionality to save space.
+#
+# Btree is always configured: it is the standard method, and Hash off-page
+# duplicates require it.
+ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(BTREE_OBJS)"
+
+# Hash can be disabled.
+if test "$db_cv_build_hash" = "yes"; then
+ AC_DEFINE(HAVE_HASH)
+ AH_TEMPLATE(HAVE_HASH, [Define to 1 if building Hash access method.])
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(HASH_OBJS)"
+ if test "$db_cv_build_verify" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(HASH_VRFY_OBJS)"
+ fi
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS hash_stub${o}"
+fi
+
+# Queue can be disabled.
+if test "$db_cv_build_queue" = "yes"; then
+ AC_DEFINE(HAVE_QUEUE)
+ AH_TEMPLATE(HAVE_QUEUE, [Define to 1 if building Queue access method.])
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(QUEUE_OBJS)"
+ if test "$db_cv_build_verify" = "yes"; then
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(QUEUE_VRFY_OBJS)"
+ fi
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS qam_stub${o}"
+fi
+
+# The replication code.
+if test "$db_cv_build_replication" = "yes"; then
+ AC_DEFINE(HAVE_REPLICATION)
+ AH_TEMPLATE(HAVE_REPLICATION,
+ [Define to 1 if building replication support.])
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(REP_OBJS)"
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS rep_stub${o}"
+fi
+
+# The verification code.
+if test "$db_cv_build_verify" = "yes"; then
+ AC_DEFINE(HAVE_VERIFY)
+ AH_TEMPLATE(HAVE_VERIFY,
+ [Define to 1 if building access method verification support.])
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS \$(BTREE_VRFY_OBJS)"
+else
+ ADDITIONAL_OBJS="$ADDITIONAL_OBJS db_vrfy_stub${o}"
+fi
+
+# The crypto support.
+if test -d "$srcdir/../crypto" -a "$db_cv_build_cryptography" = "yes"; then
+ AC_DEFINE(HAVE_CRYPTO)
+ AH_TEMPLATE(HAVE_CRYPTO,
+ [Define to 1 if Berkeley DB release includes strong cryptography.])
+
+ CRYPTO_OBJS="\$(CRYPTO_OBJS)"
+else
+ CRYPTO_OBJS="crypto_stub${o}"
+fi
+
# Optional utilities.
if test "$db_cv_dump185" = "yes"; then
ADDITIONAL_PROGS="db_dump185 $ADDITIONAL_PROGS"
fi
-# Checks for compiler characteristics.
-AC_C_CONST
-
# Checks for include files, structures, C types.
AC_HEADER_STAT
AC_HEADER_TIME
AC_HEADER_DIRENT
-AC_CHECK_HEADERS(sys/select.h sys/time.h)
+AC_CHECK_HEADERS(sys/select.h sys/time.h sys/fcntl.h)
AC_CHECK_MEMBERS([struct stat.st_blksize])
AM_TYPES
AC_CACHE_CHECK([for ANSI C exit success/failure values], db_cv_exit_defines, [
AC_TRY_COMPILE([#include <stdlib.h>], return (EXIT_SUCCESS);,
[db_cv_exit_defines=yes], [db_cv_exit_defines=no])])
-if test "$db_cv_exit_defines" = yes; then
+if test "$db_cv_exit_defines" = "yes"; then
AC_DEFINE(HAVE_EXIT_SUCCESS)
AH_TEMPLATE(HAVE_EXIT_SUCCESS,
[Define to 1 if you have EXIT_SUCCESS/EXIT_FAILURE #defines.])
@@ -441,19 +586,18 @@ AC_REPLACE_FUNCS(getcwd getopt memcmp memcpy memmove raise)
AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror vsnprintf)
# Check for system functions we optionally use.
-AC_CHECK_FUNCS(_fstati64 clock_gettime directio gettimeofday getuid)
+AC_CHECK_FUNCS(_fstati64 clock_gettime directio getrusage gettimeofday getuid)
AC_CHECK_FUNCS(pstat_getdynamic sched_yield select strtoul sysconf yield)
-# Checks for system functions for which we don't have replacements.
-# We require qsort(3).
-AC_CHECK_FUNCS(qsort, , AC_MSG_ERROR([No qsort library function.]))
-
# Pread/pwrite.
# HP-UX has pread/pwrite, but it doesn't work with largefile support.
-case "$host_os" in
-hpux*)
- AC_MSG_WARN([pread/pwrite interfaces ignored on $host_os.]);;
-*) AC_CHECK_FUNCS(pread pwrite)
+# NCR's version of System V R 4.3 has pread/pwrite symbols, but no support.
+case "$host_os-$host_vendor" in
+hpux*|sysv4.3*-ncr)
+ AC_MSG_WARN(
+ [pread/pwrite interfaces ignored on $host_os-$host_vendor.]);;
+*)
+ AC_CHECK_FUNCS(pread pwrite);;
esac
# Check for fcntl(2) to deny child process access to file descriptors.
@@ -463,7 +607,7 @@ AC_TRY_LINK([
#include <fcntl.h>], [
fcntl(1, F_SETFD, 1);
], [db_cv_fcntl_f_setfd=yes], [db_cv_fcntl_f_setfd=no])])
-if test "$db_cv_fcntl_f_setfd" = yes; then
+if test "$db_cv_fcntl_f_setfd" = "yes"; then
AC_DEFINE(HAVE_FCNTL_F_SETFD)
AH_TEMPLATE(HAVE_FCNTL_F_SETFD,
[Define to 1 if fcntl/F_SETFD denies child access to file descriptors.])
@@ -471,26 +615,27 @@ fi
# A/UX has a broken getopt(3).
case "$host_os" in
-aux*) ADDITIONAL_OBJS="getopt${o} $ADDITIONAL_OBJS";;
+aux*) AC_LIBOBJ([getopt]);;
esac
-# Linux has the O_DIRECT flag, but you can't actually use it.
+# Linux has a broken O_DIRECT flag, but we allow people to override it from
+# the command line.
+test_host_prw=yes
AC_CACHE_CHECK([for open/O_DIRECT], db_cv_open_o_direct, [
-echo "test for working open/O_DIRECT" > __o_direct_file
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <fcntl.h>
-main() {
-int c, fd = open("__o_direct_file", O_RDONLY | O_DIRECT, 0);
-exit ((fd == -1) || (read(fd, &c, 1) != 1));
-}], [db_cv_open_o_direct=yes], [db_cv_open_o_direct=no],
AC_TRY_LINK([
-#include <sys/types.h>
+#include <sys/types.h>
#include <fcntl.h>], [
- open("__o_direct_file", O_RDONLY | O_DIRECT, 0);
-], [db_cv_open_o_direct=yes], [db_cv_open_o_direct=no]))
-rm -f __o_direct_file])
-if test "$db_cv_open_o_direct" = yes; then
+ open("a", O_RDONLY | O_DIRECT, 0);
+], [db_cv_open_o_direct=yes; test_host_prw=no], [db_cv_open_o_direct=no])])
+if test "$test_host_prw" = "no" -a "$db_cv_open_o_direct" = "yes"; then
+ case "$host_os" in
+ linux*)
+ db_cv_open_o_direct=no;
+ AC_MSG_WARN(
+ [O_DIRECT interface ignored on $host_os-$host_vendor.]);;
+ esac
+fi
+if test "$db_cv_open_o_direct" = "yes"; then
AC_DEFINE(HAVE_O_DIRECT)
AH_TEMPLATE(HAVE_O_DIRECT, [Define to 1 if you have the O_DIRECT flag.])
fi
@@ -512,11 +657,11 @@ AC_SYS_LARGEFILE
mmap_ok=no
case "$host_os" in
bsdi3*|bsdi4.0)
- AC_MSG_WARN([mlock(2) interface ignored on BSD/OS 3.X and 4.0.])
+ AC_MSG_WARN([mlock(2) interface ignored on $host_os-$host_vendor.])
mmap_ok=yes
AC_CHECK_FUNCS(mmap munmap, , mmap_ok=no);;
ultrix*)
- AC_MSG_WARN([mmap(2) interface ignored on Ultrix.]);;
+ AC_MSG_WARN([mmap(2) interface ignored on $host_os-$host_vendor.]);;
*)
mmap_ok=yes
AC_CHECK_FUNCS(mlock munlock)
@@ -530,22 +675,25 @@ esac
shmget_ok=no
case "$host_os" in
sunos*)
- AC_MSG_WARN([shmget(2) interface ignored on SunOS.]);;
+ AC_MSG_WARN([shmget(2) interface ignored on $host_os-$host_vendor.]);;
*)
shmget_ok=yes
AC_CHECK_FUNCS(shmget, , shmget_ok=no);;
esac
# We require either mmap/munmap(2) or shmget(2).
-if test "$mmap_ok" = no -a "$shmget_ok" = no; then
+if test "$mmap_ok" = "no" -a "$shmget_ok" = "no"; then
AC_MSG_WARN([Neither mmap/munmap(2) or shmget(2) library functions.])
fi
-# If we're not doing version name substitution, DB_VERSION_UNIQUE_NAME
-# needs to be erased.
-if test "$db_cv_uniquename" = "no"; then
- DB_VERSION_UNIQUE_NAME=""
-fi
+# We need to add the additional object files into the Makefile with the correct
+# suffix. We can't use $LTLIBOBJS itself, because that variable has $U encoded
+# in it for automake, and that's not what we want. See SR #7227 for additional
+# information.
+#
+# XXX: I'm not sure this is correct.
+REPLACEMENT_OBJS=`echo "$LIB@&t@OBJS" |
+ sed "s,\.[[^.]]* ,$o ,g;s,\.[[^.]]*$,$o,"`
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
@@ -561,6 +709,12 @@ CREATE_LIST="Makefile
db_int.h:$srcdir/../dbinc/db_int.in
include.tcl:$srcdir/../test/include.tcl"
+# MinGW needs win_db.h.
+if test "$db_cv_mingw" = "yes"; then
+CREATE_LIST="$CREATE_LIST
+ win_db.h:$srcdir/win_db.in"
+fi
+
# Create the db.h file from a source file, a list of global function
# prototypes, and, if configured for unique names, a list of #defines
# to do DB_VERSION_UNIQUE_NAME substitution.
@@ -596,10 +750,6 @@ if test "$db_cv_compat185" = "yes"; then
fi
fi
-if test "$db_cv_embedix" = "yes"; then
- CREATE_LIST="$CREATE_LIST db.ecd:../dist/db.ecd.in"
-fi
-
if test "$db_cv_rpm" = "yes"; then
CREATE_LIST="$CREATE_LIST db.spec:../dist/db.spec.in"
fi
diff --git a/db/dist/db.ecd.in b/db/dist/db.ecd.in
deleted file mode 100644
index 60bbf3ec3..000000000
--- a/db/dist/db.ecd.in
+++ /dev/null
@@ -1,64 +0,0 @@
-# Embedix Componenet Description (ECD) file for BerkeleyDB.
-#
-# Id: db.ecd.in,v 11.1 2001/04/04 14:06:13 bostic Exp
-
-<GROUP System>
-<GROUP Library>
-<COMPONENT BerkeleyDB>
- SRPM=db
- <SPECPATCH></SPECPATCH>
- <HELP>
- Berkeley DB is Sleepycat Software's programmatic database toolkit.
- </HELP>
-
- TYPE=bool
- DEFAULT_VALUE=1
- PROMPT=Include BerkeleyDB library?
- <KEEPLIST>
- /usr/lib/libdb-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.so
- /usr/include/db.h
- /usr/lib/libdb.so
- </KEEPLIST>
- <PROVIDES>
- libdb-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.so
- </PROVIDES>
- <REQUIRES>
- ld-linux.so.2
- libc.so.6
- </REQUIRES>
- STATIC_SIZE=0
- STARTUP_TIME=0
-
- @EMBEDIX_ECD_CXX@
-
- <OPTION db-extra>
- TYPE=bool
- DEFAULT_VALUE=1
- PROMPT=Include BerkeleyDB Utilities?
- <KEEPLIST>
- /usr/bin/db_archive
- /usr/bin/db_checkpoint
- /usr/bin/db_deadlock
- /usr/bin/db_dump
- /usr/bin/db_load
- /usr/bin/db_printlog
- /usr/bin/db_recover
- /usr/bin/db_stat
- /usr/bin/db_upgrade
- /usr/bin/db_verify
- @EMBEDIX_ECD_RPC@
- </KEEPLIST>
- <REQUIRES>
- libdb-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.so
- ld-linux.so.2
- libc.so.6
- libdl.so.2
- libm.so.6
- </REQUIRES>
- STATIC_SIZE=0
- STARTUP_TIME=0
- </OPTION>
-
-</COMPONENT>
-</GROUP>
-</GROUP>
diff --git a/db/dist/db.spec.in b/db/dist/db.spec.in
index a5f522c2b..7a6336271 100644
--- a/db/dist/db.spec.in
+++ b/db/dist/db.spec.in
@@ -10,43 +10,38 @@ URL: http://www.sleepycat.com
Group: System Environment/Libraries
BuildRoot: @CONFIGURATION_PATH@/RPM_INSTALL
+%define _unpackaged_files_terminate_build 0
+
%description
-Berkeley DB is a programmatic toolkit that provides fast, reliable,
-mission-critical, and scalable built-in database support for software
-ranging from embedded applications running on hand-held appliances to
+Berkeley DB is a programmatic toolkit that provides fast, scalable and
+reliable application-specific database support for software ranging from
+embedded applications running on hand-held appliances to mission-critical,
enterprise-scale servers.
The Berkeley DB access methods include B+tree, Extended Linear Hashing,
Fixed and Variable-length records, and Persistent Queues. Berkeley DB
-provides full transactional support, database recovery, online backups,
-and separate access to locking, logging and shared memory caching
-subsystems.
+provides full replication and transactional support, database recovery,
+online backups, and separate access to locking, logging and shared
+memory caching subsystems.
-Berkeley DB supports C, C++, Java, Tcl, Perl, and Python APIs. The
-software is available for Linux, a wide variety of UNIX platforms,
-Windows 95/98, Windows/NT, Windows 2000, VxWorks and QNX.
+Berkeley DB supports C, C++, Java, Tcl, Perl, Python and many other
+APIs. The software is available for a wide variety of UNIX/Linux
+platforms, Windows 95/98/NT/2000/XP, VxWorks and QNX.
%prep
-%setup
+%setup
%build
cd build_unix
-CFLAGS="$RPM_OPT_FLAGS" ../dist/configure @CONFIGURATION_ARGS@
+CFLAGS="$RPM_OPT_FLAGS" ../dist/configure @CONFIGURATION_ARGS@
make library_build
%install
cd build_unix
-make prefix=@CONFIGURATION_PATH@/RPM_INSTALL@EMBEDIX_ROOT@ install
+make prefix=@CONFIGURATION_PATH@/RPM_INSTALL install
@RPM_POST_INSTALL@
@RPM_POST_UNINSTALL@
-%files
-%defattr(-,root,root)
-%dir @EMBEDIX_ROOT@/bin
-%dir @EMBEDIX_ROOT@/docs
-%dir @EMBEDIX_ROOT@/include
-%dir @EMBEDIX_ROOT@/lib
-
%changelog
diff --git a/db/dist/gen_inc.awk b/db/dist/gen_inc.awk
index f308af484..d48d02bb1 100644
--- a/db/dist/gen_inc.awk
+++ b/db/dist/gen_inc.awk
@@ -1,76 +1,72 @@
# This awk script parses C input files looking for lines marked "PUBLIC:"
# and "EXTERN:". (PUBLIC lines are DB internal function prototypes and
-# #defines, EXTERN are DB external function prototypes and #defines.) The
+# #defines, EXTERN are DB external function prototypes and #defines.)
+#
# PUBLIC lines are put into two versions of per-directory include files:
-# one version for normal use, and one version to be post-processed based
-# on creating unique file names for every global symbol in the DB library.
-# The EXTERN lines are put into two versions of the db.h file, again, one
-# version for normal use, and one version to be post-processed for unique
-# naming.
+# one file that contains the prototypes, and one file that contains a
+# #define for the name to be processed during configuration when creating
+# unique names for every global symbol in the DB library.
+#
+# The EXTERN lines are put into two files: one of which contains prototypes
+# which are always appended to the db.h file, and one of which contains a
+# #define list for use when creating unique symbol names.
+#
+# Four arguments:
+# e_dfile list of EXTERN #defines
+# e_pfile include file that contains EXTERN prototypes
+# i_dfile list of internal (PUBLIC) #defines
+# i_pfile include file that contains internal (PUBLIC) prototypes
/PUBLIC:/ {
sub("^.*PUBLIC:[ ][ ]*", "")
- if ($0 ~ "^#if|^#endif") {
- print $0 >> inc_file
- print $0 >> uinc_file
- next
- }
- if ($0 ~ "^#define.*[(]") {
- print $0 >> inc_file
- def = gensub("[(]", "@DB_VERSION_UNIQUE_NAME@(", 2)
- print def >> uinc_file
- next
- }
- if ($0 ~ "^#define") {
- print $0 >> inc_file
- sub("[ ]*$", "@DB_VERSION_UNIQUE_NAME@")
- print $0 >> uinc_file
+ if ($0 ~ "^#if|^#ifdef|^#ifndef|^#else|^#endif") {
+ print $0 >> i_pfile
+ print $0 >> i_dfile
next
}
pline = sprintf("%s %s", pline, $0)
- if (pline ~ "));") {
+ if (pline ~ "\\)\\);") {
sub("^[ ]*", "", pline)
- print pline >> inc_file
- if (pline ~ db_version_unique_name)
- print pline >> uinc_file;
- else {
- def = gensub("[ ][ ]*__P.*", "", 1, pline)
- sub("^.*[ ][*]*", "", def)
- printf("#define %s %s@DB_VERSION_UNIQUE_NAME@\n%s\n",
- def, def, pline) >> uinc_file
+ print pline >> i_pfile
+ if (pline !~ db_version_unique_name) {
+ gsub("[ ][ ]*__P.*", "", pline)
+ sub("^.*[ ][*]*", "", pline)
+ printf("#define %s %s@DB_VERSION_UNIQUE_NAME@\n",
+ pline, pline) >> i_dfile
}
pline = ""
}
}
+
+# When we switched to methods in 4.0, we guessed txn_{abort,begin,commit}
+# were the interfaces applications would likely use and not be willing to
+# change, due to the sheer volume of the calls. Provide wrappers -- we
+# could do txn_abort and txn_commit using macros, but not txn_begin, as
+# the name of the field is txn_begin, we didn't want to modify it.
+#
+# The issue with txn_begin hits us in another way. If configured with the
+# --with-uniquename option, we use #defines to re-define DB's interfaces
+# to unique names. We can't do that for these functions because txn_begin
+# is also a field name in the DB_ENV structure, and the #defines we use go
+# at the end of the db.h file -- we get control too late to #define a field
+# name. So, modify the script that generates the unique names #defines to
+# not generate them for these three functions, and don't include the three
+# functions in libraries built with that configuration option.
/EXTERN:/ {
sub("^.*EXTERN:[ ][ ]*", "")
- if ($0 ~ "^#if|^#endif") {
- print $0 >> ext_file
- print $0 >> uext_file
- next
- }
- if ($0 ~ "^#define.*[(]") {
- print $0 >> ext_file
- def = gensub("[(]", "@DB_VERSION_UNIQUE_NAME@(", 2)
- print def >> uext_file
- next
- }
- if ($0 ~ "^#define") {
- print $0 >> ext_file
- sub("[ ]*$", "@DB_VERSION_UNIQUE_NAME@")
- print $0 >> uext_file
+ if ($0 ~ "^#if|^#ifdef|^#ifndef|^#else|^#endif") {
+ print $0 >> e_pfile
+ print $0 >> e_dfile
next
}
eline = sprintf("%s %s", eline, $0)
- if (eline ~ "));") {
+ if (eline ~ "\\)\\);") {
sub("^[ ]*", "", eline)
- print eline >> ext_file
- if (pline ~ db_version_unique_name)
- print pline >> uext_file;
- else {
- def = gensub("[ ][ ]*__P.*", "", 1, eline)
- sub("^.*[ ][*]*", "", def)
- printf("#define %s %s@DB_VERSION_UNIQUE_NAME@\n%s\n",
- def, def, eline) >> uext_file
+ print eline >> e_pfile
+ if (eline !~ db_version_unique_name && eline !~ "^int txn_") {
+ gsub("[ ][ ]*__P.*", "", eline)
+ sub("^.*[ ][*]*", "", eline)
+ printf("#define %s %s@DB_VERSION_UNIQUE_NAME@\n",
+ eline, eline) >> e_dfile
}
eline = ""
}
diff --git a/db/dist/gen_rec.awk b/db/dist/gen_rec.awk
index 5953ee051..592c1f39b 100644
--- a/db/dist/gen_rec.awk
+++ b/db/dist/gen_rec.awk
@@ -2,10 +2,10 @@
#
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: gen_rec.awk,v 11.26 2001/01/08 21:06:46 bostic Exp $
+# $Id: gen_rec.awk,v 11.87 2003/11/14 05:32:38 ubell Exp $
#
# This awk script generates all the log, print, and read routines for the DB
@@ -21,33 +21,44 @@
# (logical types are defined in each subsystem manually)
# structures to contain the data unmarshalled from the log.
#
-# This awk script requires that five variables be set when it is called:
+# This awk script requires that four variables be set when it is called:
#
# source_file -- the C source file being created
-# subsystem -- the subsystem prefix, e.g., "db"
# header_file -- the C #include file being created
# template_file -- the template file being created
-# template_dir -- the directory to find the source template
#
# And stdin must be the input file that defines the recovery setup.
+#
+# Within each file prefix.src, we use a number of public keywords (documented
+# in the reference guide) as well as the following ones which are private to
+# DB:
+# DBPRIVATE Indicates that a file will be built as part of DB,
+# rather than compiled independently, and so can use
+# DB-private interfaces (such as DB_LOG_NOCOPY).
+# DB A DB handle. Logs the dbreg fileid for that handle,
+# and makes the *_log interface take a DB * instead of a
+# DB_ENV *.
+# PGDBT Just like DBT, only we know it stores a page or page
+# header, so we can byte-swap it (once we write the
+# byte-swapping code, which doesn't exist yet).
BEGIN {
- if (source_file == "" || subsystem == "" ||
- header_file == "" || template_file == "" || template_dir == "") {
- print "Usage: gen_rec.awk requires five variables to be set:"
+ if (source_file == "" ||
+ header_file == "" || template_file == "") {
+ print "Usage: gen_rec.awk requires three variables to be set:"
print "\tsource_file\t-- the C source file being created"
- print "\tsubsystem\t-- the subsystem prefix, e.g., \"db\""
print "\theader_file\t-- the C #include file being created"
print "\ttemplate_file\t-- the template file being created"
- print "\ttemplate_dir\t-- the directory to find the source template"
exit
}
FS="[\t ][\t ]*"
CFILE=source_file
- NAME=subsystem
HFILE=header_file
TFILE=template_file
- TDIR=template_dir
+ dbprivate = 0
+}
+/^[ ]*DBPRIVATE/ {
+ dbprivate = 1
}
/^[ ]*PREFIX/ {
prefix = $2
@@ -71,36 +82,39 @@ BEGIN {
printf("#include <string.h>\n") >> TFILE
printf("#endif\n\n") >> TFILE
printf("#include \"db_int.h\"\n") >> TFILE
- printf("#include \"db_page.h\"\n") >> TFILE
- printf("#include \"%s.h\"\n", prefix) >> TFILE
- printf("#include \"log.h\"\n\n") >> TFILE
+ printf("#include \"dbinc/db_page.h\"\n") >> TFILE
+ printf("#include \"dbinc/%s.h\"\n", prefix) >> TFILE
+ printf("#include \"dbinc/log.h\"\n\n") >> TFILE
}
/^[ ]*INCLUDE/ {
- if ($3 == "")
- printf("%s\n", $2) >> CFILE
- else
- printf("%s %s\n", $2, $3) >> CFILE
+ for (i = 2; i < NF; i++)
+ printf("%s ", $i) >> CFILE
+ printf("%s\n", $i) >> CFILE
}
-/^[ ]*(BEGIN|DEPRECATED)/ {
+/^[ ]*(BEGIN|IGNORED)/ {
if (in_begin) {
print "Invalid format: missing END statement"
exit
}
in_begin = 1;
is_dbt = 0;
- is_deprecated = ($1 == "DEPRECATED");
+ has_dbp = 0;
+ is_uint = 0;
+ need_log_function = ($1 == "BEGIN");
nvars = 0;
+ # number of locks that the getpgnos functions will return
+ nlocks = 0;
+
thisfunc = $2;
funcname = sprintf("%s_%s", prefix, $2);
rectype = $3;
funcs[num_funcs] = funcname;
- funcs_dep[num_funcs] = is_deprecated;
++num_funcs;
}
-/^[ ]*(ARG|DBT|POINTER)/ {
+/^[ ]*(DB|ARG|DBT|PGDBT|POINTER|TIME)/ {
vars[nvars] = $2;
types[nvars] = $3;
atypes[nvars] = $1;
@@ -109,11 +123,16 @@ BEGIN {
for (i = 4; i < NF; i++)
types[nvars] = sprintf("%s %s", types[nvars], $i);
- if ($1 == "ARG")
- sizes[nvars] = sprintf("sizeof(%s)", $2);
- else if ($1 == "POINTER")
+ if ($1 == "DB") {
+ has_dbp = 1;
+ }
+
+ if ($1 == "DB" || $1 == "ARG" || $1 == "TIME") {
+ sizes[nvars] = sprintf("sizeof(u_int32_t)");
+ is_uint = 1;
+ } else if ($1 == "POINTER")
sizes[nvars] = sprintf("sizeof(*%s)", $2);
- else { # DBT
+ else { # DBT, PGDBT
sizes[nvars] = \
sprintf("sizeof(u_int32_t) + (%s == NULL ? 0 : %s->size)", \
$2, $2);
@@ -128,7 +147,7 @@ BEGIN {
}
# Declare the record type.
- printf("\n#define\tDB_%s\t%d\n", funcname, rectype) >> HFILE
+ printf("#define\tDB_%s\t%d\n", funcname, rectype) >> HFILE
# Structure declaration.
printf("typedef struct _%s_args {\n", funcname) >> HFILE
@@ -146,17 +165,26 @@ BEGIN {
}
printf("\t%s\t%s;\n", t, vars[i]) >> HFILE
}
- printf("} __%s_args;\n\n", funcname) >> HFILE
+ printf("} %s_args;\n\n", funcname) >> HFILE
- # Output the log, print and read functions.
- if (!is_deprecated)
+ # Output the log, print, read, and getpgnos functions.
+ if (need_log_function) {
log_function();
+
+ # The getpgnos function calls DB-private (__rep_*) functions,
+ # so we only generate it for our own logging functions,
+ # not application-specific ones.
+ if (dbprivate) {
+ getpgnos_function();
+ }
+ }
print_function();
read_function();
# Recovery template
- cmd = sprintf("sed -e s/PREF/%s/ -e s/FUNC/%s/ < %s/rec_ctemp >> %s",
- prefix, thisfunc, TDIR, TFILE)
+ cmd = sprintf(\
+ "sed -e s/PREF/%s/ -e s/FUNC/%s/ < template/rec_ctemp >> %s",
+ prefix, thisfunc, TFILE)
system(cmd);
# Done writing stuff, reset and continue.
@@ -164,63 +192,142 @@ BEGIN {
}
END {
+ # End the conditional for the HFILE
+ printf("#endif\n") >> HFILE;
+
# Print initialization routine; function prototype
- printf("int __%s_init_print __P((DB_ENV *));\n", prefix) >> HFILE;
+ p[1] = sprintf("int %s_init_print %s%s", prefix,
+ "__P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, ",
+ "db_recops, void *), size_t *));");
+ p[2] = "";
+ proto_format(p);
+
+ # Create the routine to call __db_add_recovery(print_fn, id)
+ printf("int\n%s_init_print(dbenv, dtabp, dtabsizep)\n", \
+ prefix) >> CFILE;
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;;
+ printf("\tint (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *,") >> CFILE;
+ printf(" db_recops, void *));\n") >> CFILE;
+ printf("\tsize_t *dtabsizep;\n{\n") >> CFILE;
+ # If application-specific, the user will need a prototype for
+ # __db_add_recovery, since they won't have DB's.
+ if (!dbprivate) {
+ printf("\tint __db_add_recovery __P((DB_ENV *,\n") >> CFILE;
+ printf(\
+"\t int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *),\n") >> CFILE;
+ printf("\t size_t *,\n") >> CFILE;
+ printf(\
+"\t int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), u_int32_t));\n") \
+ >> CFILE;
+ }
- # Create the routine to call db_add_recovery(print_fn, id)
- printf("int\n__%s_init_print(dbenv)\n", prefix) >> CFILE;
- printf("\tDB_ENV *dbenv;\n{\n\tint ret;\n\n") >> CFILE;
+ printf("\tint ret;\n\n") >> CFILE;
for (i = 0; i < num_funcs; i++) {
- printf("\tif ((ret = __db_add_recovery(dbenv,\n") >> CFILE;
- printf("\t __%s_print, DB_%s)) != 0)\n", \
+ printf("\tif ((ret = __db_add_recovery(dbenv, ") >> CFILE;
+ printf("dtabp, dtabsizep,\n") >> CFILE;
+ printf("\t %s_print, DB_%s)) != 0)\n", \
funcs[i], funcs[i]) >> CFILE;
printf("\t\treturn (ret);\n") >> CFILE;
}
printf("\treturn (0);\n}\n\n") >> CFILE;
+ # We only want to generate *_init_{getpgnos,recover} functions
+ # if this is a DB-private, rather than application-specific,
+ # set of recovery functions. Application-specific recovery functions
+ # should be dispatched using the DB_ENV->set_app_dispatch callback
+ # rather than a DB dispatch table ("dtab").
+ if (!dbprivate)
+ exit
+
+ # Page number initialization routine; function prototype
+ printf("#ifdef HAVE_REPLICATION\n") >> CFILE;
+ p[1] = sprintf("int %s_init_getpgnos %s%s", prefix,
+ "__P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, ",
+ "db_recops, void *), size_t *));");
+ p[2] = "";
+ proto_format(p);
+
+ # Create the routine to call db_add_recovery(pgno_fn, id)
+ printf("int\n%s_init_getpgnos(dbenv, dtabp, dtabsizep)\n", \
+ prefix) >> CFILE;
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ printf("\tint (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *,") >> CFILE;
+ printf(" db_recops, void *));\n") >> CFILE;
+ printf("\tsize_t *dtabsizep;\n{\n\tint ret;\n\n") >> CFILE;
+ for (i = 0; i < num_funcs; i++) {
+ printf("\tif ((ret = __db_add_recovery(dbenv, ") >> CFILE;
+ printf("dtabp, dtabsizep,\n") >> CFILE;
+ printf("\t %s_getpgnos, DB_%s)) != 0)\n", \
+ funcs[i], funcs[i]) >> CFILE;
+ printf("\t\treturn (ret);\n") >> CFILE;
+ }
+ printf("\treturn (0);\n}\n#endif /* HAVE_REPLICATION */\n\n") >> CFILE;
+
# Recover initialization routine
- printf("int __%s_init_recover __P((DB_ENV *));\n", prefix) >> HFILE;
+ p[1] = sprintf("int %s_init_recover %s%s", prefix,
+ "__P((DB_ENV *, int (***)(DB_ENV *, DBT *, DB_LSN *, ",
+ "db_recops, void *), size_t *));");
+ p[2] = "";
+ proto_format(p);
# Create the routine to call db_add_recovery(func, id)
- printf("int\n__%s_init_recover(dbenv)\n", prefix) >> CFILE;
- printf("\tDB_ENV *dbenv;\n{\n\tint ret;\n\n") >> CFILE;
+ printf("int\n%s_init_recover(dbenv, dtabp, dtabsizep)\n", \
+ prefix) >> CFILE;
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ printf("\tint (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *,") >> CFILE;
+ printf(" db_recops, void *));\n") >> CFILE;
+ printf("\tsize_t *dtabsizep;\n{\n\tint ret;\n\n") >> CFILE;
for (i = 0; i < num_funcs; i++) {
- printf("\tif ((ret = __db_add_recovery(dbenv,\n") >> CFILE;
- if (funcs_dep[i] == 1)
- printf("\t __deprecated_recover, DB_%s)) != 0)\n", \
- funcs[i]) >> CFILE;
- else
- printf("\t __%s_recover, DB_%s)) != 0)\n", \
- funcs[i], funcs[i]) >> CFILE;
+ printf("\tif ((ret = __db_add_recovery(dbenv, ") >> CFILE;
+ printf("dtabp, dtabsizep,\n") >> CFILE;
+ printf("\t %s_recover, DB_%s)) != 0)\n", \
+ funcs[i], funcs[i]) >> CFILE;
printf("\t\treturn (ret);\n") >> CFILE;
}
- printf("\treturn (0);\n}\n\n") >> CFILE;
-
- # End the conditional for the HFILE
- printf("#endif\n") >> HFILE;
+ printf("\treturn (0);\n}\n") >> CFILE;
}
function log_function() {
# Write the log function; function prototype
- printf("int __%s_log __P((", funcname) >> HFILE;
- printf("DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t") >> HFILE;
+ pi = 1;
+ p[pi++] = sprintf("int %s_log", funcname);
+ p[pi++] = " ";
+ if (has_dbp == 1) {
+ p[pi++] = "__P((DB *, DB_TXN *, DB_LSN *, u_int32_t";
+ } else {
+ p[pi++] = "__P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t";
+ }
for (i = 0; i < nvars; i++) {
- printf(", ") >> HFILE;
- if (modes[i] == "DBT")
- printf("const ") >> HFILE;
- printf("%s", types[i]) >> HFILE;
- if (modes[i] == "DBT")
- printf(" *") >> HFILE;
+ if (modes[i] == "DB")
+ continue;
+ p[pi++] = ", ";
+ p[pi++] = sprintf("%s%s%s",
+ (modes[i] == "DBT" || modes[i] == "PGDBT") ? "const " : "",
+ types[i],
+ (modes[i] == "DBT" || modes[i] == "PGDBT") ? " *" : "");
}
- printf("));\n") >> HFILE;
+ p[pi++] = "";
+ p[pi++] = "));";
+ p[pi++] = "";
+ proto_format(p);
# Function declaration
- printf("int\n__%s_log(dbenv, txnid, ret_lsnp, flags", \
- funcname) >> CFILE;
+ if (has_dbp == 1) {
+ printf("int\n%s_log(dbp, txnid, ret_lsnp, flags", \
+ funcname) >> CFILE;
+ } else {
+ printf("int\n%s_log(dbenv, txnid, ret_lsnp, flags", \
+ funcname) >> CFILE;
+ }
for (i = 0; i < nvars; i++) {
+ if (modes[i] == "DB") {
+ # We pass in fileids on the dbp, so if this is one,
+ # skip it.
+ continue;
+ }
printf(",") >> CFILE;
if ((i % 6) == 0)
- printf("\n\t") >> CFILE;
+ printf("\n ") >> CFILE;
else
printf(" ") >> CFILE;
printf("%s", vars[i]) >> CFILE;
@@ -228,65 +335,143 @@ function log_function() {
printf(")\n") >> CFILE;
# Now print the parameters
- printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ if (has_dbp == 1) {
+ printf("\tDB *dbp;\n") >> CFILE;
+ } else {
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ }
printf("\tDB_TXN *txnid;\n\tDB_LSN *ret_lsnp;\n") >> CFILE;
printf("\tu_int32_t flags;\n") >> CFILE;
for (i = 0; i < nvars; i++) {
- if (modes[i] == "DBT")
+ # We just skip for modes == DB.
+ if (modes[i] == "DBT" || modes[i] == "PGDBT")
printf("\tconst %s *%s;\n", types[i], vars[i]) >> CFILE;
- else
+ else if (modes[i] != "DB")
printf("\t%s %s;\n", types[i], vars[i]) >> CFILE;
}
# Function body and local decls
printf("{\n") >> CFILE;
printf("\tDBT logrec;\n") >> CFILE;
+ if (has_dbp == 1)
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ if (dbprivate)
+ printf("\tDB_TXNLOGREC *lr;\n") >> CFILE;
printf("\tDB_LSN *lsnp, null_lsn;\n") >> CFILE;
+ printf("\tu_int32_t ") >> CFILE;
if (is_dbt == 1)
- printf("\tu_int32_t zero;\n") >> CFILE;
- printf("\tu_int32_t rectype, txn_num;\n") >> CFILE;
- printf("\tint ret;\n") >> CFILE;
- printf("\tu_int8_t *bp;\n\n") >> CFILE;
+ printf("zero, ") >> CFILE;
+ if (is_uint == 1)
+ printf("uinttmp, ") >> CFILE;
+ printf("rectype, txn_num;\n") >> CFILE;
+ printf("\tu_int npad;\n") >> CFILE;
+ printf("\tu_int8_t *bp;\n") >> CFILE;
+ printf("\tint ") >> CFILE;
+ if (dbprivate) {
+ printf("is_durable, ") >> CFILE;
+ }
+ printf("ret;\n\n") >> CFILE;
# Initialization
+ if (has_dbp == 1)
+ printf("\tdbenv = dbp->dbenv;\n") >> CFILE;
printf("\trectype = DB_%s;\n", funcname) >> CFILE;
- printf("\tif (txnid != NULL &&\n") >> CFILE;
- printf("\t TAILQ_FIRST(&txnid->kids) != NULL &&\n") >> CFILE;
- printf("\t (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)\n")\
- >> CFILE;
- printf("\t\treturn (ret);\n") >> CFILE;
- printf("\ttxn_num = txnid == NULL ? 0 : txnid->txnid;\n") >> CFILE;
+ printf("\tnpad = 0;\n\n") >> CFILE;
+
+ if (dbprivate) {
+ printf("\tis_durable = 1;\n") >> CFILE;
+ printf("\tif (LF_ISSET(DB_LOG_NOT_DURABLE) ||\n") >> CFILE;
+ printf("\t F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)") >> CFILE;
+ if (has_dbp == 1) {
+ printf(" ||\n\t ") >> CFILE;
+ printf("F_ISSET(dbp, DB_AM_NOT_DURABLE)) {\n") >> CFILE;
+ printf("\t\tif (F_ISSET(dbenv, ") >> CFILE;
+ printf("DB_ENV_TXN_NOT_DURABLE) && ") >> CFILE;
+ printf("txnid == NULL)\n") >> CFILE;
+ } else {
+ printf(") {\n") >> CFILE;
+ printf("\t\tif (txnid == NULL)\n") >> CFILE;
+ }
+ printf("\t\t\treturn (0);\n") >> CFILE;
+ printf("\t\tis_durable = 0;\n") >> CFILE;
+ printf("\t}\n") >> CFILE;
+ }
+
printf("\tif (txnid == NULL) {\n") >> CFILE;
- printf("\t\tZERO_LSN(null_lsn);\n") >> CFILE;
+ printf("\t\ttxn_num = 0;\n") >> CFILE;
+ printf("\t\tnull_lsn.file = 0;\n") >> CFILE;
+ printf("\t\tnull_lsn.offset = 0;\n") >> CFILE;
printf("\t\tlsnp = &null_lsn;\n") >> CFILE;
- printf("\t} else\n\t\tlsnp = &txnid->last_lsn;\n") >> CFILE;
+ printf("\t} else {\n") >> CFILE;
+ if (dbprivate && funcname != "__db_debug") {
+ printf(\
+ "\t\tif (TAILQ_FIRST(&txnid->kids) != NULL &&\n") >> CFILE;
+ printf("\t\t (ret = __txn_activekids(") >> CFILE;
+ printf("dbenv, rectype, txnid)) != 0)\n") >> CFILE;
+ printf("\t\t\treturn (ret);\n") >> CFILE;
+ }
+ printf("\t\ttxn_num = txnid->txnid;\n") >> CFILE;
+ printf("\t\tlsnp = &txnid->last_lsn;\n") >> CFILE;
+ printf("\t}\n\n") >> CFILE;
# Malloc
printf("\tlogrec.size = sizeof(rectype) + ") >> CFILE;
printf("sizeof(txn_num) + sizeof(DB_LSN)") >> CFILE;
for (i = 0; i < nvars; i++)
printf("\n\t + %s", sizes[i]) >> CFILE;
- printf(";\n\tif ((ret = ") >> CFILE;
- printf(\
- "__os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)\n")\
- >> CFILE;
- printf("\t\treturn (ret);\n\n") >> CFILE;
+ printf(";\n") >> CFILE
+ if (dbprivate) {
+ printf("\tif (CRYPTO_ON(dbenv)) {\n") >> CFILE;
+ printf("\t\tnpad =\n") >> CFILE;
+ printf("\t\t ((DB_CIPHER *)dbenv->crypto_handle)") >> CFILE;
+ printf("->adj_size(logrec.size);\n") >> CFILE;
+ printf("\t\tlogrec.size += npad;\n\t}\n\n") >> CFILE
+
+ printf("\tif (!is_durable && txnid != NULL) {\n") >> CFILE;
+ write_malloc("\t\t",
+ "lr", "logrec.size + sizeof(DB_TXNLOGREC)", CFILE)
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("\t\tgoto do_malloc;\n") >> CFILE;
+ printf("#else\n") >> CFILE;
+ printf("\t\tlogrec.data = &lr->data;\n") >> CFILE;
+ printf("#endif\n") >> CFILE;
+ printf("\t} else {\n") >> CFILE;
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("do_malloc:\n") >> CFILE;
+ printf("#endif\n") >> CFILE;
+ printf("\t\tif ((ret =\n\t\t __os_malloc(dbenv, ") >> CFILE;
+ printf("logrec.size, &logrec.data)) != 0) {\n") >> CFILE;
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("\t\t\tif (!is_durable && txnid != NULL)\n") >> CFILE;
+ printf("\t\t\t\t(void)__os_free(dbenv, lr);\n") >> CFILE;
+ printf("#endif\n") >> CFILE;
+ printf("\t\t\treturn (ret);\n") >> CFILE;
+ printf("\t\t}\n") >> CFILE;
+ printf("\t}\n") >> CFILE;
+ } else
+ write_malloc("\t", "logrec.data", "logrec.size", CFILE)
+
+ printf("\tif (npad > 0)\n") >> CFILE;
+ printf("\t\tmemset((u_int8_t *)logrec.data + logrec.size ") >> CFILE;
+ printf("- npad, 0, npad);\n\n") >> CFILE;
# Copy args into buffer
- printf("\tbp = logrec.data;\n") >> CFILE;
+ printf("\tbp = logrec.data;\n\n") >> CFILE;
printf("\tmemcpy(bp, &rectype, sizeof(rectype));\n") >> CFILE;
- printf("\tbp += sizeof(rectype);\n") >> CFILE;
+ printf("\tbp += sizeof(rectype);\n\n") >> CFILE;
printf("\tmemcpy(bp, &txn_num, sizeof(txn_num));\n") >> CFILE;
- printf("\tbp += sizeof(txn_num);\n") >> CFILE;
+ printf("\tbp += sizeof(txn_num);\n\n") >> CFILE;
printf("\tmemcpy(bp, lsnp, sizeof(DB_LSN));\n") >> CFILE;
- printf("\tbp += sizeof(DB_LSN);\n") >> CFILE;
+ printf("\tbp += sizeof(DB_LSN);\n\n") >> CFILE;
for (i = 0; i < nvars; i ++) {
- if (modes[i] == "ARG") {
- printf("\tmemcpy(bp, &%s, %s);\n", \
- vars[i], sizes[i]) >> CFILE;
- printf("\tbp += %s;\n", sizes[i]) >> CFILE;
- } else if (modes[i] == "DBT") {
+ if (modes[i] == "ARG" || modes[i] == "TIME") {
+ printf("\tuinttmp = (u_int32_t)%s;\n", \
+ vars[i]) >> CFILE;
+ printf("\tmemcpy(bp, &uinttmp, sizeof(uinttmp));\n") \
+ >> CFILE;
+ printf("\tbp += sizeof(uinttmp);\n\n") >> CFILE;
+ } else if (modes[i] == "DBT" || modes[i] == "PGDBT") {
printf("\tif (%s == NULL) {\n", vars[i]) >> CFILE;
printf("\t\tzero = 0;\n") >> CFILE;
printf("\t\tmemcpy(bp, &zero, sizeof(u_int32_t));\n") \
@@ -299,49 +484,132 @@ function log_function() {
>> CFILE;
printf("\t\tmemcpy(bp, %s->data, %s->size);\n", \
vars[i], vars[i]) >> CFILE;
- printf("\t\tbp += %s->size;\n\t}\n", vars[i]) >> CFILE;
+ printf("\t\tbp += %s->size;\n\t}\n\n", \
+ vars[i]) >> CFILE;
+ } else if (modes[i] == "DB") {
+ # We need to log a DB handle. To do this, we
+ # actually just log its fileid; from that, we'll
+ # be able to acquire an open handle at recovery time.
+ printf("\tDB_ASSERT(dbp->log_filename != NULL);\n") \
+ >> CFILE;
+ printf("\tif (dbp->log_filename->id == ") >> CFILE;
+ printf("DB_LOGFILEID_INVALID &&\n\t ") >> CFILE
+ printf("(ret = __dbreg_lazy_id(dbp)) != 0)\n") \
+ >> CFILE;
+ printf("\t\treturn (ret);\n\n") >> CFILE;
+
+ printf("\tuinttmp = ") >> CFILE;
+ printf("(u_int32_t)dbp->log_filename->id;\n") >> CFILE;
+ printf("\tmemcpy(bp, &uinttmp, sizeof(uinttmp));\n") \
+ >> CFILE;
+ printf("\tbp += sizeof(uinttmp);\n\n") >> CFILE;
} else { # POINTER
printf("\tif (%s != NULL)\n", vars[i]) >> CFILE;
printf("\t\tmemcpy(bp, %s, %s);\n", vars[i], \
sizes[i]) >> CFILE;
printf("\telse\n") >> CFILE;
printf("\t\tmemset(bp, 0, %s);\n", sizes[i]) >> CFILE;
- printf("\tbp += %s;\n", sizes[i]) >> CFILE;
+ printf("\tbp += %s;\n\n", sizes[i]) >> CFILE;
}
}
- # Error checking
- printf("\tDB_ASSERT((u_int32_t)") >> CFILE;
- printf("(bp - (u_int8_t *)logrec.data) == logrec.size);\n") >> CFILE;
+ # Error checking. User code won't have DB_ASSERT available, but
+ # this is a pretty unlikely assertion anyway, so we just leave it out
+ # rather than requiring assert.h.
+ if (dbprivate) {
+ printf("\tDB_ASSERT((u_int32_t)") >> CFILE;
+ printf("(bp - (u_int8_t *)logrec.data) <= logrec.size);\n\n") \
+ >> CFILE;
+ }
- # Issue log call
- # The logging system cannot call the public log_put routine
- # due to mutual exclusion constraints. So, if we are
- # generating code for the log subsystem, use the internal
- # __log_put.
- if (prefix == "log")
- printf("\tret = __log_put\(dbenv, ret_lsnp, ") >> CFILE;
- else
- printf("\tret = log_put(dbenv, ret_lsnp, ") >> CFILE;
- printf("(DBT *)&logrec, flags);\n") >> CFILE;
- # Update the transactions last_lsn
- printf("\tif (txnid != NULL)\n") >> CFILE;
- printf("\t\ttxnid->last_lsn = *ret_lsnp;\n") >> CFILE;
+ # Save the log record off in the txn's linked list, or do log call.
+ #
+ # We didn't call the crypto alignment function when we created this
+ # log record (because we don't have the right header files to find
+ # the function), so we have to copy the log record to make sure the
+ # alignment is correct.
+ if (dbprivate) {
+ # Add the debug bit if we are logging a ND record.
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("\tif (!is_durable && txnid != NULL) {\n") >> CFILE;
+ printf("\t\t /*\n") >> CFILE;
+ printf("\t\t * We set the debug bit if we are going\n") \
+ >> CFILE;
+ printf("\t\t * to log non-durable transactions so\n") >> CFILE;
+ printf("\t\t * they will be ignored by recovery.\n") >> CFILE;
+ printf("\t\t */\n") >> CFILE;
+ printf("\t\tmemcpy(lr->data, logrec.data, logrec.size);\n") \
+ >> CFILE;
+ printf("\t\trectype |= DB_debug_FLAG;\n") >> CFILE;
+ printf("\t\tmemcpy(logrec.data, &rectype, sizeof(rectype));\n")\
+ >> CFILE;
+ printf("\t}\n") >> CFILE;
+ printf("#endif\n\n") >> CFILE;
+
+ # Add an ND record to the list.
+ printf("\tif (!is_durable && txnid != NULL) {\n") >> CFILE;
+ printf("\t\tret = 0;\n") >> CFILE;
+ printf("\t\tSTAILQ_INSERT_HEAD(&txnid") >> CFILE;
+ printf("->logs, lr, links);\n") >> CFILE;
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("\t\tgoto do_put;\n") >> CFILE;
+ printf("#endif\n") >> CFILE;
+ printf("\t}") >> CFILE;
+ # Output the log record.
+ printf(" else{\n") >> CFILE;
+ printf("#ifdef DIAGNOSTIC\n") >> CFILE;
+ printf("do_put:\n") >> CFILE;
+ printf("#endif\n") >> CFILE;
+ printf("\t\tret = __log_put(dbenv,\n") >> CFILE;
+ printf("\t\t ret_lsnp, (DBT *)&logrec, ") >> CFILE;
+ printf("flags | DB_LOG_NOCOPY);\n") >> CFILE;
+
+ # Update the transactions last_lsn.
+ printf("\t\tif (ret == 0 && txnid != NULL)\n") >> CFILE;
+ printf("\t\t\ttxnid->last_lsn = *ret_lsnp;\n") >> CFILE;
+ printf("\t}\n\n") >> CFILE;
+ printf("\tif (!is_durable)\n") >> CFILE;
+ printf("\t\tLSN_NOT_LOGGED(*ret_lsnp);\n") >> CFILE;
+ } else {
+ printf("\tret = dbenv->log_put(dbenv, ") >> CFILE;
+ printf("ret_lsnp, (DBT *)&logrec, flags);\n") >> CFILE;
+
+ # Update the transactions last_lsn.
+ printf("\tif (ret == 0 && txnid != NULL)\n") >> CFILE;
+ printf("\t\ttxnid->last_lsn = *ret_lsnp;\n\n") >> CFILE;
+ }
+
+ # If out of disk space log writes may fail. If we are debugging
+ # that print out which records did not make it to disk.
+ printf("#ifdef LOG_DIAGNOSTIC\n") >> CFILE
+ printf("\tif (ret != 0)\n") >> CFILE;
+ printf("\t\t(void)%s_print(dbenv,\n", funcname) >> CFILE;
+ printf("\t\t (DBT *)&logrec, ret_lsnp, NULL, NULL);\n") >> CFILE
+ printf("#endif\n") >> CFILE
# Free and return
- printf("\t__os_free(logrec.data, logrec.size);\n") >> CFILE;
+ if (dbprivate) {
+ printf("#ifndef DIAGNOSTIC\n") >> CFILE
+ printf("\tif (is_durable || txnid == NULL)\n") >> CFILE;
+ printf("#endif\n") >> CFILE
+ write_free("\t\t", "logrec.data", CFILE)
+ } else {
+ write_free("\t", "logrec.data", CFILE)
+ }
printf("\treturn (ret);\n}\n\n") >> CFILE;
}
function print_function() {
# Write the print function; function prototype
- printf("int __%s_print", funcname) >> HFILE;
- printf(" __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));\n") \
- >> HFILE;
+ p[1] = sprintf("int %s_print", funcname);
+ p[2] = " ";
+ p[3] = "__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));";
+ p[4] = "";
+ proto_format(p);
# Function declaration
- printf("int\n__%s_print(dbenv, ", funcname) >> CFILE;
+ printf("int\n%s_print(dbenv, ", funcname) >> CFILE;
printf("dbtp, lsnp, notused2, notused3)\n") >> CFILE;
printf("\tDB_ENV *dbenv;\n") >> CFILE;
printf("\tDBT *dbtp;\n") >> CFILE;
@@ -349,24 +617,37 @@ function print_function() {
printf("\tdb_recops notused2;\n\tvoid *notused3;\n{\n") >> CFILE;
# Locals
- printf("\t__%s_args *argp;\n", funcname) >> CFILE;
- printf("\tu_int32_t i;\n\tu_int ch;\n\tint ret;\n\n") >> CFILE;
+ printf("\t%s_args *argp;\n", funcname) >> CFILE;
+ for (i = 0; i < nvars; i ++)
+ if (modes[i] == "TIME") {
+ printf("\tstruct tm *lt;\n") >> CFILE
+ break;
+ }
+ for (i = 0; i < nvars; i ++)
+ if (modes[i] == "DBT" || modes[i] == "PGDBT") {
+ printf("\tu_int32_t i;\n") >> CFILE
+ printf("\tint ch;\n") >> CFILE
+ break;
+ }
+ printf("\tint ret;\n\n") >> CFILE;
# Get rid of complaints about unused parameters.
- printf("\ti = 0;\n\tch = 0;\n") >> CFILE;
printf("\tnotused2 = DB_TXN_ABORT;\n\tnotused3 = NULL;\n\n") >> CFILE;
# Call read routine to initialize structure
- printf("\tif ((ret = __%s_read(dbenv, dbtp->data, &argp)) != 0)\n", \
+ printf("\tif ((ret = %s_read(dbenv, dbtp->data, &argp)) != 0)\n", \
funcname) >> CFILE;
printf("\t\treturn (ret);\n") >> CFILE;
# Print values in every record
- printf("\tprintf(\"[%%lu][%%lu]%s: ", funcname) >> CFILE;
+ printf("\t(void)printf(\n\t \"[%%lu][%%lu]%s%%s: ",\
+ funcname) >> CFILE;
printf("rec: %%lu txnid %%lx ") >> CFILE;
printf("prevlsn [%%lu][%%lu]\\n\",\n") >> CFILE;
printf("\t (u_long)lsnp->file,\n") >> CFILE;
printf("\t (u_long)lsnp->offset,\n") >> CFILE;
+ printf("\t (argp->type & DB_debug_FLAG) ? \"_debug\" : \"\",\n") \
+ >> CFILE;
printf("\t (u_long)argp->type,\n") >> CFILE;
printf("\t (u_long)argp->txnid->txnid,\n") >> CFILE;
printf("\t (u_long)argp->prev_lsn.file,\n") >> CFILE;
@@ -374,19 +655,23 @@ function print_function() {
# Now print fields of argp
for (i = 0; i < nvars; i ++) {
- printf("\tprintf(\"\\t%s: ", vars[i]) >> CFILE;
+ if (modes[i] == "TIME") {
+ printf("\tlt = localtime((time_t *)&argp->%s);\n",
+ vars[i]) >> CFILE;
+ printf("\t(void)printf(\n\t \"\\t%s: ",
+ vars[i]) >> CFILE;
+ } else
+ printf("\t(void)printf(\"\\t%s: ", vars[i]) >> CFILE;
- if (modes[i] == "DBT") {
+ if (modes[i] == "DBT" || modes[i] == "PGDBT") {
printf("\");\n") >> CFILE;
printf("\tfor (i = 0; i < ") >> CFILE;
printf("argp->%s.size; i++) {\n", vars[i]) >> CFILE;
printf("\t\tch = ((u_int8_t *)argp->%s.data)[i];\n", \
vars[i]) >> CFILE;
- printf("\t\tif (isprint(ch) || ch == 0xa)\n") >> CFILE;
- printf("\t\t\tputchar(ch);\n") >> CFILE;
- printf("\t\telse\n") >> CFILE;
- printf("\t\t\tprintf(\"%%#x \", ch);\n") >> CFILE;
- printf("\t}\n\tprintf(\"\\n\");\n") >> CFILE;
+ printf("\t\tprintf(isprint(ch) || ch == 0x0a") >> CFILE;
+ printf(" ? \"%%c\" : \"%%#x \", ch);\n") >> CFILE;
+ printf("\t}\n\t(void)printf(\"\\n\");\n") >> CFILE;
} else if (types[i] == "DB_LSN *") {
printf("[%%%s][%%%s]\\n\",\n", \
formats[i], formats[i]) >> CFILE;
@@ -394,6 +679,21 @@ function print_function() {
vars[i]) >> CFILE;
printf(" (u_long)argp->%s.offset);\n", \
vars[i]) >> CFILE;
+ } else if (modes[i] == "TIME") {
+ # Time values are displayed in two ways: the standard
+ # string returned by ctime, and in the input format
+ # expected by db_recover -t.
+ printf(\
+ "%%%s (%%.24s, 20%%02lu%%02lu%%02lu%%02lu%%02lu.%%02lu)\\n\",\n", \
+ formats[i]) >> CFILE;
+ printf("\t (long)argp->%s, ", vars[i]) >> CFILE;
+ printf("ctime((time_t *)&argp->%s),", vars[i]) >> CFILE;
+ printf("\n\t (u_long)lt->tm_year - 100, ") >> CFILE;
+ printf("(u_long)lt->tm_mon+1,") >> CFILE;
+ printf("\n\t (u_long)lt->tm_mday, ") >> CFILE;
+ printf("(u_long)lt->tm_hour,") >> CFILE;
+ printf("\n\t (u_long)lt->tm_min, ") >> CFILE;
+ printf("(u_long)lt->tm_sec);\n") >> CFILE;
} else {
if (formats[i] == "lx")
printf("0x") >> CFILE;
@@ -405,52 +705,63 @@ function print_function() {
printf("argp->%s);\n", vars[i]) >> CFILE;
}
}
- printf("\tprintf(\"\\n\");\n") >> CFILE;
- printf("\t__os_free(argp, 0);\n") >> CFILE;
+ printf("\t(void)printf(\"\\n\");\n") >> CFILE;
+ write_free("\t", "argp", CFILE);
printf("\treturn (0);\n") >> CFILE;
printf("}\n\n") >> CFILE;
}
function read_function() {
# Write the read function; function prototype
- printf("int __%s_read __P((DB_ENV *, void *, ", funcname) >> HFILE;
- printf("__%s_args **));\n", funcname) >> HFILE;
+ p[1] = sprintf("int %s_read __P((DB_ENV *, void *,", funcname);
+ p[2] = " ";
+ p[3] = sprintf("%s_args **));", funcname);
+ p[4] = "";
+ proto_format(p);
# Function declaration
- printf("int\n__%s_read(dbenv, recbuf, argpp)\n", funcname) >> CFILE;
+ printf("int\n%s_read(dbenv, recbuf, argpp)\n", funcname) >> CFILE;
# Now print the parameters
printf("\tDB_ENV *dbenv;\n") >> CFILE;
printf("\tvoid *recbuf;\n") >> CFILE;
- printf("\t__%s_args **argpp;\n", funcname) >> CFILE;
+ printf("\t%s_args **argpp;\n", funcname) >> CFILE;
# Function body and local decls
- printf("{\n\t__%s_args *argp;\n", funcname) >> CFILE;
+ printf("{\n\t%s_args *argp;\n", funcname) >> CFILE;
+ if (is_uint == 1)
+ printf("\tu_int32_t uinttmp;\n") >> CFILE;
printf("\tu_int8_t *bp;\n") >> CFILE;
- printf("\tint ret;\n") >> CFILE;
- printf("\n\tret = __os_malloc(dbenv, sizeof(") >> CFILE;
- printf("__%s_args) +\n\t sizeof(DB_TXN), NULL, &argp);\n", \
- funcname) >> CFILE;
- printf("\tif (ret != 0)\n\t\treturn (ret);\n") >> CFILE;
- # Set up the pointers to the txnid and the prev lsn
- printf("\targp->txnid = (DB_TXN *)&argp[1];\n") >> CFILE;
+ if (dbprivate) {
+ # We only use dbenv and ret in the private malloc case.
+ printf("\tint ret;\n\n") >> CFILE;
+ } else {
+ printf("\t/* Keep the compiler quiet. */\n") >> CFILE;
+ printf("\n\tdbenv = NULL;\n") >> CFILE;
+ }
+
+ malloc_size = sprintf("sizeof(%s_args) + sizeof(DB_TXN)", funcname)
+ write_malloc("\t", "argp", malloc_size, CFILE)
+
+ # Set up the pointers to the txnid.
+ printf("\targp->txnid = (DB_TXN *)&argp[1];\n\n") >> CFILE;
# First get the record type, prev_lsn, and txnid fields.
printf("\tbp = recbuf;\n") >> CFILE;
printf("\tmemcpy(&argp->type, bp, sizeof(argp->type));\n") >> CFILE;
- printf("\tbp += sizeof(argp->type);\n") >> CFILE;
+ printf("\tbp += sizeof(argp->type);\n\n") >> CFILE;
printf("\tmemcpy(&argp->txnid->txnid, bp, ") >> CFILE;
printf("sizeof(argp->txnid->txnid));\n") >> CFILE;
- printf("\tbp += sizeof(argp->txnid->txnid);\n") >> CFILE;
+ printf("\tbp += sizeof(argp->txnid->txnid);\n\n") >> CFILE;
printf("\tmemcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));\n") >> CFILE;
- printf("\tbp += sizeof(DB_LSN);\n") >> CFILE;
+ printf("\tbp += sizeof(DB_LSN);\n\n") >> CFILE;
# Now get rest of data.
for (i = 0; i < nvars; i ++) {
- if (modes[i] == "DBT") {
+ if (modes[i] == "DBT" || modes[i] == "PGDBT") {
printf("\tmemset(&argp->%s, 0, sizeof(argp->%s));\n", \
vars[i], vars[i]) >> CFILE;
printf("\tmemcpy(&argp->%s.size, ", vars[i]) >> CFILE;
@@ -458,18 +769,180 @@ function read_function() {
printf("\tbp += sizeof(u_int32_t);\n") >> CFILE;
printf("\targp->%s.data = bp;\n", vars[i]) >> CFILE;
printf("\tbp += argp->%s.size;\n", vars[i]) >> CFILE;
- } else if (modes[i] == "ARG") {
- printf("\tmemcpy(&argp->%s, bp, %s%s));\n", \
- vars[i], "sizeof(argp->", vars[i]) >> CFILE;
- printf("\tbp += sizeof(argp->%s);\n", vars[i]) >> CFILE;
+ } else if (modes[i] == "ARG" || modes[i] == "TIME" ||
+ modes[i] == "DB") {
+ printf("\tmemcpy(&uinttmp, bp, sizeof(uinttmp));\n") \
+ >> CFILE;
+ printf("\targp->%s = (%s)uinttmp;\n", vars[i], \
+ types[i]) >> CFILE;
+ printf("\tbp += sizeof(uinttmp);\n") >> CFILE;
} else { # POINTER
printf("\tmemcpy(&argp->%s, bp, ", vars[i]) >> CFILE;
printf(" sizeof(argp->%s));\n", vars[i]) >> CFILE;
printf("\tbp += sizeof(argp->%s);\n", vars[i]) >> CFILE;
}
+ printf("\n") >> CFILE;
}
# Free and return
printf("\t*argpp = argp;\n") >> CFILE;
printf("\treturn (0);\n}\n\n") >> CFILE;
}
+
+function getpgnos_function() {
+ # Write the getpgnos function; function prototype
+ printf("#ifdef HAVE_REPLICATION\n") >> CFILE;
+ p[1] = sprintf("int %s_getpgnos", funcname);
+ p[2] = " ";
+ p[3] = "__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));";
+ p[4] = "";
+ proto_format(p);
+
+ # Function declaration
+ printf("int\n%s_getpgnos(dbenv, ", funcname) >> CFILE;
+ printf("rec, lsnp, notused1, summary)\n") >> CFILE;
+ printf("\tDB_ENV *dbenv;\n") >> CFILE;
+ printf("\tDBT *rec;\n") >> CFILE;
+ printf("\tDB_LSN *lsnp;\n") >> CFILE;
+ printf("\tdb_recops notused1;\n") >> CFILE;
+ printf("\tvoid *summary;\n{\n") >> CFILE;
+
+ # If there are no locks, return this fact.
+ if (nlocks == 0) {
+ printf("\tTXN_RECS *t;\n") >> CFILE;
+ printf("\tint ret;\n") >> CFILE;
+ printf("\tCOMPQUIET(rec, NULL);\n") >> CFILE;
+ printf("\tCOMPQUIET(notused1, DB_TXN_ABORT);\n") >> CFILE;
+
+ printf("\n\tt = (TXN_RECS *)summary;\n") >> CFILE;
+ printf("\n\tif ((ret = __rep_check_alloc(dbenv, ") >> CFILE;
+ printf("t, 1)) != 0)\n") >> CFILE;
+ printf("\t\treturn (ret);\n") >> CFILE;
+
+ printf("\n\tt->array[t->npages].flags = LSN_PAGE_NOLOCK;\n") \
+ >> CFILE;
+ printf("\tt->array[t->npages].lsn = *lsnp;\n") >> CFILE;
+ printf("\tt->array[t->npages].fid = DB_LOGFILEID_INVALID;\n") \
+ >> CFILE;
+ printf("\tmemset(&t->array[t->npages].pgdesc, 0,\n") >> CFILE;
+ printf("\t sizeof(t->array[t->npages].pgdesc));\n") >> CFILE;
+ printf("\n\tt->npages++;\n") >> CFILE;
+
+ printf("\n") >> CFILE;
+ printf("\treturn (0);\n") >> CFILE;
+ printf("}\n#endif /* HAVE_REPLICATION */\n\n") >> CFILE;
+ return;
+ }
+
+ # Locals
+ printf("\tDB *dbp;\n") >> CFILE;
+ printf("\tTXN_RECS *t;\n") >> CFILE;
+ printf("\t%s_args *argp;\n", funcname) >> CFILE;
+ printf("\tint ret;\n\n") >> CFILE;
+
+ # Shut up compiler.
+ printf("\tCOMPQUIET(notused1, DB_TXN_ABORT);\n\n") >> CFILE;
+
+ printf("\targp = NULL;\n") >> CFILE;
+ printf("\tt = (TXN_RECS *)summary;\n\n") >> CFILE;
+
+ printf("\tif ((ret = %s_read(dbenv, rec->data, &argp)) != 0)\n", \
+ funcname) >> CFILE;
+ printf("\t\treturn (ret);\n") >> CFILE;
+
+ # Get file ID.
+ printf("\n\tif ((ret = __dbreg_id_to_db(dbenv,\n\t ") >> CFILE;
+ printf("argp->txnid, &dbp, argp->fileid, 0)) != 0)\n") >> CFILE;
+ printf("\t\tgoto err;\n") >> CFILE;
+
+ printf("\n\tif ((ret = __rep_check_alloc(dbenv, t, %d)) != 0)\n", \
+ nlocks) >> CFILE;
+ printf("\t\tgoto err;\n\n") >> CFILE;
+
+ for (i = 1; i <= nlocks; i++) {
+ if (lock_if_zero[i]) {
+ indent = "\t";
+ } else {
+ indent = "\t\t";
+ printf("\tif (argp->%s != PGNO_INVALID) {\n", \
+ lock_pgnos[i]) >> CFILE;
+ }
+ printf("%st->array[t->npages].flags = 0;\n", indent) >> CFILE;
+ printf("%st->array[t->npages].fid = argp->fileid;\n", indent) \
+ >> CFILE;
+ printf("%st->array[t->npages].lsn = *lsnp;\n", indent) >> CFILE;
+ printf("%st->array[t->npages].pgdesc.pgno = argp->%s;\n", \
+ indent, lock_pgnos[i]) >> CFILE;
+ printf("%st->array[t->npages].pgdesc.type = DB_PAGE_LOCK;\n", \
+ indent) >> CFILE;
+ printf("%smemcpy(t->array[t->npages].pgdesc.fileid, ", indent) \
+ >> CFILE;
+ printf("dbp->fileid,\n%s DB_FILE_ID_LEN);\n", \
+ indent, indent) >> CFILE;
+ printf("%st->npages++;\n", indent) >> CFILE;
+ if (!lock_if_zero[i]) {
+ printf("\t}\n") >> CFILE;
+ }
+ }
+
+ printf("\nerr:\tif (argp != NULL)\n") >> CFILE;
+ write_free("\t", "argp", CFILE);
+
+ printf("\treturn (ret);\n") >> CFILE;
+
+ printf("}\n#endif /* HAVE_REPLICATION */\n\n") >> CFILE;
+}
+
+# proto_format --
+# Pretty-print a function prototype.
+function proto_format(p)
+{
+ printf("/*\n") >> CFILE;
+
+ s = "";
+ for (i = 1; i in p; ++i)
+ s = s p[i];
+
+ t = " * PUBLIC: "
+ if (length(s) + length(t) < 80)
+ printf("%s%s", t, s) >> CFILE;
+ else {
+ split(s, p, "__P");
+ len = length(t) + length(p[1]);
+ printf("%s%s", t, p[1]) >> CFILE
+
+ n = split(p[2], comma, ",");
+ comma[1] = "__P" comma[1];
+ for (i = 1; i <= n; i++) {
+ if (len + length(comma[i]) > 70) {
+ printf("\n * PUBLIC: ") >> CFILE;
+ len = 0;
+ }
+ printf("%s%s", comma[i], i == n ? "" : ",") >> CFILE;
+ len += length(comma[i]) + 2;
+ }
+ }
+ printf("\n */\n") >> CFILE;
+ delete p;
+}
+
+function write_malloc(tab, ptr, size, file)
+{
+ if (dbprivate) {
+ print(tab "if ((ret = __os_malloc(dbenv,") >> file
+ print(tab " " size ", &" ptr ")) != 0)") >> file
+ print(tab "\treturn (ret);") >> file;
+ } else {
+ print(tab "if ((" ptr " = malloc(" size ")) == NULL)") >> file
+ print(tab "\treturn (ENOMEM);") >> file
+ }
+}
+
+function write_free(tab, ptr, file)
+{
+ if (dbprivate) {
+ print(tab "__os_free(dbenv, " ptr ");\n") >> file
+ } else {
+ print(tab "free(" ptr ");\n") >> file
+ }
+}
diff --git a/db/dist/gen_rpc.awk b/db/dist/gen_rpc.awk
index 6c3bffc1a..9e57a98f3 100644
--- a/db/dist/gen_rpc.awk
+++ b/db/dist/gen_rpc.awk
@@ -1,5 +1,5 @@
#
-# $Id: gen_rpc.awk,v 11.25 2001/01/02 20:04:55 sue Exp $
+# $Id: gen_rpc.awk,v 11.54 2003/09/04 23:59:03 bostic Exp $
# Awk script for generating client/server RPC code.
#
# This awk script generates most of the RPC routines for DB client/server
@@ -9,27 +9,30 @@
#
# This awk script requires that these variables be set when it is called:
#
+# major -- Major version number
+# minor -- Minor version number
+# xidsize -- size of GIDs
# client_file -- the C source file being created for client code
-# cproto_file -- the header file create for client prototypes
# ctmpl_file -- the C template file being created for client code
# sed_file -- the sed file created to alter server proc code
# server_file -- the C source file being created for server code
-# sproto_file -- the header file create for server prototypes
# stmpl_file -- the C template file being created for server code
# xdr_file -- the XDR message file created
#
# And stdin must be the input file that defines the RPC setup.
BEGIN {
- if (client_file == "" || cproto_file == "" || ctmpl_file == "" ||
+ if (major == "" || minor == "" || xidsize == "" ||
+ client_file == "" || ctmpl_file == "" ||
sed_file == "" || server_file == "" ||
- sproto_file == "" || stmpl_file == "" || xdr_file == "") {
+ stmpl_file == "" || xdr_file == "") {
print "Usage: gen_rpc.awk requires these variables be set:"
+ print "\tmajor\t-- Major version number"
+ print "\tminor\t-- Minor version number"
+ print "\txidsize\t-- GID size"
print "\tclient_file\t-- the client C source file being created"
- print "\tcproto_file\t-- the client prototype header created"
print "\tctmpl_file\t-- the client template file being created"
print "\tsed_file\t-- the sed command file being created"
print "\tserver_file\t-- the server C source file being created"
- print "\tsproto_file\t-- the server prototype header created"
print "\tstmpl_file\t-- the server template file being created"
print "\txdr_file\t-- the XDR message file being created"
error = 1; exit
@@ -40,10 +43,6 @@ BEGIN {
printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
> CFILE
- CHFILE=cproto_file
- printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
- > CHFILE
-
TFILE = ctmpl_file
printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
> TFILE
@@ -52,10 +51,6 @@ BEGIN {
printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
> SFILE
- SHFILE=sproto_file
- printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \
- > SHFILE
-
# Server procedure template and a sed file to massage an existing
# template source file to change args.
# SEDFILE should be same name as PFILE but .c
@@ -74,28 +69,24 @@ BEGIN {
END {
printf("#endif /* HAVE_RPC */\n") >> CFILE
printf("#endif /* HAVE_RPC */\n") >> TFILE
- printf("program DB_SERVERPROG {\n") >> XFILE
- printf("\tversion DB_SERVERVERS {\n") >> XFILE
+ printf("program DB_RPC_SERVERPROG {\n") >> XFILE
+ printf("\tversion DB_RPC_SERVERVERS {\n") >> XFILE
for (i = 1; i < nendlist; ++i)
printf("\t\t%s;\n", endlist[i]) >> XFILE
- printf("\t} = 1;\n") >> XFILE
+ printf("\t} = %d%03d;\n", major, minor) >> XFILE
printf("} = 351457;\n") >> XFILE
}
/^[ ]*BEGIN/ {
name = $2;
- msgid = $3;
nofunc_code = 0;
funcvars = 0;
- gen_code = 1;
ret_code = 0;
- if ($4 == "NOCLNTCODE")
- gen_code = 0;
- if ($4 == "NOFUNC")
+ if ($3 == "NOFUNC")
nofunc_code = 1;
- if ($4 == "RETCODE")
+ if ($3 == "RETCODE")
ret_code = 1;
nvars = 0;
@@ -131,8 +122,10 @@ END {
if (c_type[nvars] == "DB *") {
ctp_type[nvars] = "CT_DB";
- db_handle = 1;
- db_idx = nvars;
+ if (db_handle != 1) {
+ db_handle = 1;
+ db_idx = nvars;
+ }
}
if (c_type[nvars] == "DBC *") {
@@ -176,12 +169,109 @@ END {
retlist_type[rvars] = $5;
} else
retlist_type[rvars] = 0;
+ ret_isarg[rvars] = 0;
++rvars;
}
+/^[ ]*ARET/ {
+ ret_type[rvars] = $2;
+ rpc_type[nvars] = "IGNORE";
+ retc_type[rvars] = $3;
+ c_type[nvars] = sprintf("%s *", $3);
+ pr_type[nvars] = c_type[nvars];
+ retargs[rvars] = $4;
+ args[nvars] = sprintf("%sp", $4);
+ if (ret_type[rvars] == "LIST" || ret_type[rvars] == "DBT") {
+ xdr_free = 1;
+ }
+ func_arg[nvars] = 0;
+ if (ret_type[nvars] == "LIST") {
+ retlist_type[rvars] = $5;
+ list_type[nvars] = $5;
+ } else {
+ retlist_type[rvars] = 0;
+ list_type[nvars] = 0;
+ }
+ ret_isarg[rvars] = 1;
+
+ ++nvars;
+ ++rvars;
+}
/^[ ]*END/ {
#
# =====================================================
+ # File headers, if necessary.
+ #
+ if (first == 0) {
+ printf("#include \"db_config.h\"\n") >> CFILE
+ printf("\n") >> CFILE
+ printf("#ifdef HAVE_RPC\n") >> CFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> CFILE
+ printf("#include <sys/types.h>\n\n") >> CFILE
+ printf("#include <rpc/rpc.h>\n") >> CFILE
+ printf("#include <rpc/xdr.h>\n") >> CFILE
+ printf("\n") >> CFILE
+ printf("#include <string.h>\n") >> CFILE
+ printf("#endif\n") >> CFILE
+ printf("\n") >> CFILE
+ printf("#include \"db_int.h\"\n") >> CFILE
+ printf("#include \"dbinc/txn.h\"\n") >> CFILE
+ printf("\n") >> CFILE
+ printf("#include \"dbinc_auto/db_server.h\"\n") >> CFILE
+ printf("#include \"dbinc_auto/rpc_client_ext.h\"\n") >> CFILE
+ printf("\n") >> CFILE
+
+ printf("#include \"db_config.h\"\n") >> TFILE
+ printf("\n") >> TFILE
+ printf("#ifdef HAVE_RPC\n") >> TFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE
+ printf("#include <sys/types.h>\n") >> TFILE
+ printf("#include <rpc/rpc.h>\n") >> TFILE
+ printf("\n") >> TFILE
+ printf("#include <string.h>\n") >> TFILE
+ printf("#endif\n") >> TFILE
+ printf("#include \"db_int.h\"\n") >> TFILE
+ printf("#include \"dbinc_auto/db_server.h\"\n") >> TFILE
+ printf("#include \"dbinc/txn.h\"\n") >> TFILE
+ printf("\n") >> TFILE
+
+ printf("#include \"db_config.h\"\n") >> SFILE
+ printf("\n") >> SFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> SFILE
+ printf("#include <sys/types.h>\n") >> SFILE
+ printf("\n") >> SFILE
+ printf("#include <rpc/rpc.h>\n") >> SFILE
+ printf("#include <rpc/xdr.h>\n") >> SFILE
+ printf("\n") >> SFILE
+ printf("#include <string.h>\n") >> SFILE
+ printf("#endif\n") >> SFILE
+ printf("\n") >> SFILE
+ printf("#include \"db_int.h\"\n") >> SFILE
+ printf("#include \"dbinc_auto/db_server.h\"\n") >> SFILE
+ printf("#include \"dbinc/db_server_int.h\"\n") >> SFILE
+ printf("#include \"dbinc_auto/rpc_server_ext.h\"\n") >> SFILE
+ printf("\n") >> SFILE
+
+ printf("#include \"db_config.h\"\n") >> PFILE
+ printf("\n") >> PFILE
+ printf("#ifndef NO_SYSTEM_INCLUDES\n") >> PFILE
+ printf("#include <sys/types.h>\n") >> PFILE
+ printf("\n") >> PFILE
+ printf("#include <rpc/rpc.h>\n") >> PFILE
+ printf("\n") >> PFILE
+ printf("#include <string.h>\n") >> PFILE
+ printf("#endif\n") >> PFILE
+ printf("\n") >> PFILE
+ printf("#include \"db_int.h\"\n") >> PFILE
+ printf("#include \"dbinc_auto/db_server.h\"\n") >> PFILE
+ printf("#include \"dbinc/db_server_int.h\"\n") >> PFILE
+ printf("#include \"dbinc_auto/rpc_server_ext.h\"\n") >> PFILE
+ printf("\n") >> PFILE
+
+ first = 1;
+ }
+ #
+ # =====================================================
# Generate Client Nofunc code first if necessary
# NOTE: This code must be first, because we don't want any
# other code other than this function, so before we write
@@ -190,50 +280,48 @@ END {
#
if (nofunc_code == 1) {
#
- # First time through, put out the general illegal function
+ # First time through, put out the general no server and
+ # illegal functions.
#
if (first_nofunc == 0) {
- printf("int __dbcl_rpc_illegal ") >> CHFILE
- printf("__P((DB_ENV *, char *));\n") >> CHFILE
- printf("int\n__dbcl_rpc_illegal(dbenv, name)\n") \
- >> CFILE
+ printf("static int __dbcl_noserver ") >> CFILE
+ printf("__P((DB_ENV *));\n\n") >> CFILE
+ printf("static int\n") >> CFILE
+ printf("__dbcl_noserver(dbenv)\n") >> CFILE
+ printf("\tDB_ENV *dbenv;\n") >> CFILE
+ printf("{\n\t__db_err(dbenv,") >> CFILE
+ printf(" \"No server environment\");\n") >> CFILE
+ printf("\treturn (DB_NOSERVER);\n") >> CFILE
+ printf("}\n\n") >> CFILE
+
+ printf("static int __dbcl_rpc_illegal ") >> CFILE
+ printf("__P((DB_ENV *, char *));\n\n") >> CFILE
+ printf("static int\n") >> CFILE
+ printf("__dbcl_rpc_illegal(dbenv, name)\n") >> CFILE
printf("\tDB_ENV *dbenv;\n\tchar *name;\n") >> CFILE
- printf("{\n\t__db_err(dbenv,\n") >> CFILE
- printf("\t \"%%s method meaningless in RPC") >> CFILE
- printf(" environment\", name);\n") >> CFILE
- printf("\treturn (__db_eopnotsup(dbenv));\n") >> CFILE
+ printf("{\n\t__db_err(dbenv,") >> CFILE
+ printf(" \"%%s method unsupported in RPC") >> CFILE
+ printf(" environments\", name);\n") >> CFILE
+ printf("\treturn (DB_OPNOTSUP);\n") >> CFILE
printf("}\n\n") >> CFILE
+
first_nofunc = 1
}
#
- # If we are doing a list, spit out prototype decl.
- #
- for (i = 0; i < nvars; i++) {
- if (rpc_type[i] != "LIST")
- continue;
- printf("static int __dbcl_%s_%slist __P((", \
- name, args[i]) >> CFILE
- printf("__%s_%slist **, ", name, args[i]) >> CFILE
- if (list_type[i] == "STRING")
- printf("%s));\n", c_type[i]) >> CFILE
- if (list_type[i] == "INT")
- printf("u_int32_t));\n") >> CFILE
- if (list_type[i] == "ID")
- printf("%s));\n", c_type[i]) >> CFILE
- printf("static void __dbcl_%s_%sfree __P((", \
- name, args[i]) >> CFILE
- printf("__%s_%slist **));\n", name, args[i]) >> CFILE
- }
- #
# Spit out PUBLIC prototypes.
#
- printf("int __dbcl_%s __P((",name) >> CHFILE
- sep = "";
+ pi = 1;
+ p[pi++] = sprintf("int __dbcl_%s __P((", name);
+ p[pi++] = "";
for (i = 0; i < nvars; ++i) {
- printf("%s%s", sep, pr_type[i]) >> CHFILE
- sep = ", ";
+ p[pi++] = pr_type[i];
+ p[pi++] = ", ";
}
- printf("));\n") >> CHFILE
+ p[pi - 1] = "";
+ p[pi++] = "));";
+ p[pi] = "";
+ proto_format(p, 0, CFILE);
+
#
# Spit out function name/args.
#
@@ -273,7 +361,7 @@ END {
printf("\tdbenv = %s->mgrp->dbenv;\n", \
args[txn_idx]) >> CFILE
else if (mp_handle)
- printf("\tdbenv = %s->dbmp->dbenv;\n", \
+ printf("\tdbenv = %s->dbenv;\n", \
args[mp_idx]) >> CFILE
else
printf("\tdbenv = NULL;\n") >> CFILE
@@ -286,7 +374,8 @@ END {
# to COMPQUIET that one.
for (i = 1; i < nvars; ++i) {
if (rpc_type[i] == "CONST" || rpc_type[i] == "DBT" ||
- rpc_type[i] == "LIST" || rpc_type[i] == "STRING") {
+ rpc_type[i] == "LIST" || rpc_type[i] == "STRING" ||
+ rpc_type[i] == "GID") {
printf("\tCOMPQUIET(%s, NULL);\n", args[i]) \
>> CFILE
}
@@ -313,60 +402,44 @@ END {
# XDR messages.
#
printf("\n") >> XFILE
- #
- # If there are any lists, generate the structure to contain them.
- #
+ printf("struct __%s_msg {\n", name) >> XFILE
for (i = 0; i < nvars; ++i) {
if (rpc_type[i] == "LIST") {
- printf("struct __%s_%slist {\n", name, args[i]) >> XFILE
- printf("\topaque ent<>;\n") >> XFILE
- printf("\t__%s_%slist *next;\n", name, args[i]) >> XFILE
- printf("};\n\n") >> XFILE
+ if (list_type[i] == "GID") {
+ printf("\topaque %s<>;\n", args[i]) >> XFILE
+ } else {
+ printf("\tunsigned int %s<>;\n", args[i]) >> XFILE
+ }
}
- }
- printf("struct __%s_msg {\n", name) >> XFILE
- for (i = 0; i < nvars; ++i) {
if (rpc_type[i] == "ID") {
printf("\tunsigned int %scl_id;\n", args[i]) >> XFILE
}
if (rpc_type[i] == "STRING") {
printf("\tstring %s<>;\n", args[i]) >> XFILE
}
+ if (rpc_type[i] == "GID") {
+ printf("\topaque %s[%d];\n", args[i], xidsize) >> XFILE
+ }
if (rpc_type[i] == "INT") {
printf("\tunsigned int %s;\n", args[i]) >> XFILE
}
if (rpc_type[i] == "DBT") {
printf("\tunsigned int %sdlen;\n", args[i]) >> XFILE
printf("\tunsigned int %sdoff;\n", args[i]) >> XFILE
+ printf("\tunsigned int %sulen;\n", args[i]) >> XFILE
printf("\tunsigned int %sflags;\n", args[i]) >> XFILE
printf("\topaque %sdata<>;\n", args[i]) >> XFILE
}
- if (rpc_type[i] == "LIST") {
- printf("\t__%s_%slist *%slist;\n", \
- name, args[i], args[i]) >> XFILE
- }
}
printf("};\n") >> XFILE
printf("\n") >> XFILE
#
- # If there are any lists, generate the structure to contain them.
- #
- for (i = 0; i < rvars; ++i) {
- if (ret_type[i] == "LIST") {
- printf("struct __%s_%sreplist {\n", \
- name, retargs[i]) >> XFILE
- printf("\topaque ent<>;\n") >> XFILE
- printf("\t__%s_%sreplist *next;\n", \
- name, retargs[i]) >> XFILE
- printf("};\n\n") >> XFILE
- }
- }
- #
# Generate the reply message
#
printf("struct __%s_reply {\n", name) >> XFILE
- printf("\tunsigned int status;\n") >> XFILE
+ printf("\t/* num return vars: %d */\n", rvars) >> XFILE
+ printf("\tint status;\n") >> XFILE
for (i = 0; i < rvars; ++i) {
if (ret_type[i] == "ID") {
printf("\tunsigned int %scl_id;\n", retargs[i]) >> XFILE
@@ -384,8 +457,11 @@ END {
printf("\topaque %sdata<>;\n", retargs[i]) >> XFILE
}
if (ret_type[i] == "LIST") {
- printf("\t__%s_%sreplist *%slist;\n", \
- name, retargs[i], retargs[i]) >> XFILE
+ if (retlist_type[i] == "GID") {
+ printf("\topaque %s<>;\n", retargs[i]) >> XFILE
+ } else {
+ printf("\tunsigned int %s<>;\n", retargs[i]) >> XFILE
+ }
}
}
printf("};\n") >> XFILE
@@ -394,158 +470,30 @@ END {
sprintf("__%s_reply __DB_%s(__%s_msg) = %d", \
name, name, name, nendlist);
nendlist++;
-
- #
- # =====================================================
- # File headers, if necessary.
- #
- if (first == 0) {
- printf("#include \"db_config.h\"\n") >> CFILE
- printf("\n") >> CFILE
- printf("#ifdef HAVE_RPC\n") >> CFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> CFILE
- printf("#include <sys/types.h>\n") >> CFILE
- printf("#include <rpc/rpc.h>\n") >> CFILE
- printf("#include <rpc/xdr.h>\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include <errno.h>\n") >> CFILE
- printf("#include <string.h>\n") >> CFILE
- printf("#endif\n") >> CFILE
- printf("#include \"db_server.h\"\n") >> CFILE
- printf("\n") >> CFILE
- printf("#include \"db_int.h\"\n") >> CFILE
- printf("#include \"db_page.h\"\n") >> CFILE
- printf("#include \"db_ext.h\"\n") >> CFILE
- printf("#include \"mp.h\"\n") >> CFILE
- printf("#include \"rpc_client_ext.h\"\n") >> CFILE
- printf("#include \"txn.h\"\n") >> CFILE
- printf("\n") >> CFILE
- n = split(CHFILE, hpieces, "/");
- printf("#include \"%s\"\n", hpieces[n]) >> CFILE
- printf("\n") >> CFILE
-
- printf("#include \"db_config.h\"\n") >> TFILE
- printf("\n") >> TFILE
- printf("#ifdef HAVE_RPC\n") >> TFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE
- printf("#include <sys/types.h>\n") >> TFILE
- printf("#include <rpc/rpc.h>\n") >> TFILE
- printf("\n") >> TFILE
- printf("#include <errno.h>\n") >> TFILE
- printf("#include <string.h>\n") >> TFILE
- printf("#endif\n") >> TFILE
- printf("#include \"db_server.h\"\n") >> TFILE
- printf("\n") >> TFILE
- printf("#include \"db_int.h\"\n") >> TFILE
- printf("#include \"db_page.h\"\n") >> TFILE
- printf("#include \"db_ext.h\"\n") >> TFILE
- printf("#include \"txn.h\"\n") >> TFILE
- printf("\n") >> TFILE
- n = split(CHFILE, hpieces, "/");
- printf("#include \"%s\"\n", hpieces[n]) >> TFILE
- printf("\n") >> TFILE
-
- printf("#include \"db_config.h\"\n") >> SFILE
- printf("\n") >> SFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> SFILE
- printf("#include <sys/types.h>\n") >> SFILE
- printf("\n") >> SFILE
- printf("#include <rpc/rpc.h>\n") >> SFILE
- printf("#include <rpc/xdr.h>\n") >> SFILE
- printf("\n") >> SFILE
- printf("#include <errno.h>\n") >> SFILE
- printf("#include <string.h>\n") >> SFILE
- printf("#endif\n") >> SFILE
- printf("#include \"db_server.h\"\n") >> SFILE
- printf("\n") >> SFILE
- printf("#include \"db_int.h\"\n") >> SFILE
- printf("#include \"db_server_int.h\"\n") >> SFILE
- printf("#include \"rpc_server_ext.h\"\n") >> SFILE
- printf("\n") >> SFILE
- n = split(SHFILE, hpieces, "/");
- printf("#include \"%s\"\n", hpieces[n]) >> SFILE
- printf("\n") >> SFILE
-
- printf("#include \"db_config.h\"\n") >> PFILE
- printf("\n") >> PFILE
- printf("#ifndef NO_SYSTEM_INCLUDES\n") >> PFILE
- printf("#include <sys/types.h>\n") >> PFILE
- printf("\n") >> PFILE
- printf("#include <rpc/rpc.h>\n") >> PFILE
- printf("\n") >> PFILE
- printf("#include <errno.h>\n") >> PFILE
- printf("#include <string.h>\n") >> PFILE
- printf("#include \"db_server.h\"\n") >> PFILE
- printf("#endif\n") >> PFILE
- printf("\n") >> PFILE
- printf("#include \"db_int.h\"\n") >> PFILE
- printf("#include \"db_server_int.h\"\n") >> PFILE
- printf("#include \"rpc_server_ext.h\"\n") >> PFILE
- printf("\n") >> PFILE
- n = split(SHFILE, hpieces, "/");
- printf("#include \"%s\"\n", hpieces[n]) >> PFILE
- printf("\n") >> PFILE
-
- first = 1;
- }
-
#
# =====================================================
# Server functions.
#
- # If we are doing a list, send out local list prototypes.
- #
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] != "LIST")
- continue;
- if (list_type[i] != "STRING" && list_type[i] != "INT" &&
- list_type[i] != "ID")
- continue;
- printf("int __db_%s_%slist __P((", name, args[i]) >> SFILE
- printf("__%s_%slist *, ", name, args[i]) >> SFILE
- if (list_type[i] == "STRING") {
- printf("char ***));\n") >> SFILE
- }
- if (list_type[i] == "INT" || list_type[i] == "ID") {
- printf("u_int32_t **));\n") >> SFILE
- }
- printf("void __db_%s_%sfree __P((", name, args[i]) >> SFILE
- if (list_type[i] == "STRING")
- printf("char **));\n\n") >> SFILE
- if (list_type[i] == "INT" || list_type[i] == "ID")
- printf("u_int32_t *));\n\n") >> SFILE
-
- }
- #
# First spit out PUBLIC prototypes for server functions.
#
- printf("__%s_reply * __db_%s_%d __P((__%s_msg *));\n", \
- name, name, msgid, name) >> SHFILE
+ p[1] = sprintf("__%s_reply *__db_%s_%d%03d __P((__%s_msg *, struct svc_req *));",
+ name, name, major, minor, name);
+ p[2] = "";
+ proto_format(p, 0, SFILE);
printf("__%s_reply *\n", name) >> SFILE
- printf("__db_%s_%d(req)\n", name, msgid) >> SFILE
- printf("\t__%s_msg *req;\n", name) >> SFILE;
+ printf("__db_%s_%d%03d(msg, req)\n", name, major, minor) >> SFILE
+ printf("\t__%s_msg *msg;\n", name) >> SFILE;
+ printf("\tstruct svc_req *req;\n", name) >> SFILE;
printf("{\n") >> SFILE
- doing_list = 0;
- #
- # If we are doing a list, decompose it for server proc we'll call.
- #
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] != "LIST")
- continue;
- doing_list = 1;
- if (list_type[i] == "STRING")
- printf("\tchar **__db_%slist;\n", args[i]) >> SFILE
- if (list_type[i] == "ID" || list_type[i] == "INT")
- printf("\tu_int32_t *__db_%slist;\n", args[i]) >> SFILE
- }
- if (doing_list)
- printf("\tint ret;\n") >> SFILE
printf("\tstatic __%s_reply reply; /* must be static */\n", \
name) >> SFILE
if (xdr_free) {
printf("\tstatic int __%s_free = 0; /* must be static */\n\n", \
name) >> SFILE
+ }
+ printf("\tCOMPQUIET(req, NULL);\n", name) >> SFILE
+ if (xdr_free) {
printf("\tif (__%s_free)\n", name) >> SFILE
printf("\t\txdr_free((xdrproc_t)xdr___%s_reply, (void *)&reply);\n", \
name) >> SFILE
@@ -553,8 +501,8 @@ END {
printf("\n\t/* Reinitialize allocated fields */\n") >> SFILE
for (i = 0; i < rvars; ++i) {
if (ret_type[i] == "LIST") {
- printf("\treply.%slist = NULL;\n", \
- retargs[i]) >> SFILE
+ printf("\treply.%s.%s_val = NULL;\n", \
+ retargs[i], retargs[i]) >> SFILE
}
if (ret_type[i] == "DBT") {
printf("\treply.%sdata.%sdata_val = NULL;\n", \
@@ -564,44 +512,43 @@ END {
}
need_out = 0;
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] == "LIST") {
- printf("\n\tif ((ret = __db_%s_%slist(", \
- name, args[i]) >> SFILE
- printf("req->%slist, &__db_%slist)) != 0)\n", \
- args[i], args[i]) >> SFILE
- printf("\t\tgoto out;\n") >> SFILE
- need_out = 1;
- }
- }
-
#
# Compose server proc to call. Decompose message components as args.
#
- printf("\n\t__%s_%d_proc(", name, msgid) >> SFILE
+ printf("\n\t__%s_proc(", name) >> SFILE
sep = "";
for (i = 0; i < nvars; ++i) {
+ if (rpc_type[i] == "IGNORE") {
+ continue;
+ }
if (rpc_type[i] == "ID") {
- printf("%sreq->%scl_id", sep, args[i]) >> SFILE
+ printf("%smsg->%scl_id", sep, args[i]) >> SFILE
}
if (rpc_type[i] == "STRING") {
- printf("%s(*req->%s == '\\0') ? NULL : req->%s", \
+ printf("%s(*msg->%s == '\\0') ? NULL : msg->%s", \
sep, args[i], args[i]) >> SFILE
}
+ if (rpc_type[i] == "GID") {
+ printf("%smsg->%s", sep, args[i]) >> SFILE
+ }
if (rpc_type[i] == "INT") {
- printf("%sreq->%s", sep, args[i]) >> SFILE
+ printf("%smsg->%s", sep, args[i]) >> SFILE
}
if (rpc_type[i] == "LIST") {
- printf("%s__db_%slist", sep, args[i]) >> SFILE
+ printf("%smsg->%s.%s_val", \
+ sep, args[i], args[i]) >> SFILE
+ printf("%smsg->%s.%s_len", \
+ sep, args[i], args[i]) >> SFILE
}
if (rpc_type[i] == "DBT") {
- printf("%sreq->%sdlen", sep, args[i]) >> SFILE
+ printf("%smsg->%sdlen", sep, args[i]) >> SFILE
sep = ",\n\t ";
- printf("%sreq->%sdoff", sep, args[i]) >> SFILE
- printf("%sreq->%sflags", sep, args[i]) >> SFILE
- printf("%sreq->%sdata.%sdata_val", \
+ printf("%smsg->%sdoff", sep, args[i]) >> SFILE
+ printf("%smsg->%sulen", sep, args[i]) >> SFILE
+ printf("%smsg->%sflags", sep, args[i]) >> SFILE
+ printf("%smsg->%sdata.%sdata_val", \
sep, args[i], args[i]) >> SFILE
- printf("%sreq->%sdata.%sdata_len", \
+ printf("%smsg->%sdata.%sdata_len", \
sep, args[i], args[i]) >> SFILE
}
sep = ",\n\t ";
@@ -611,12 +558,6 @@ END {
printf("%s&__%s_free);\n", sep, name) >> SFILE
else
printf(");\n\n") >> SFILE
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] == "LIST") {
- printf("\t__db_%s_%sfree(__db_%slist);\n", \
- name, args[i], args[i]) >> SFILE
- }
- }
if (need_out) {
printf("\nout:\n") >> SFILE
}
@@ -624,191 +565,102 @@ END {
printf("}\n\n") >> SFILE
#
- # If we are doing a list, write list functions for this op.
- #
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] != "LIST")
- continue;
- if (list_type[i] != "STRING" && list_type[i] != "INT" &&
- list_type[i] != "ID")
- continue;
- printf("int\n") >> SFILE
- printf("__db_%s_%slist(locp, ppp)\n", name, args[i]) >> SFILE
- printf("\t__%s_%slist *locp;\n", name, args[i]) >> SFILE
- if (list_type[i] == "STRING") {
- printf("\tchar ***ppp;\n{\n") >> SFILE
- printf("\tchar **pp;\n") >> SFILE
- }
- if (list_type[i] == "INT" || list_type[i] == "ID") {
- printf("\tu_int32_t **ppp;\n{\n") >> SFILE
- printf("\tu_int32_t *pp;\n") >> SFILE
- }
- printf("\tint cnt, ret, size;\n") >> SFILE
- printf("\t__%s_%slist *nl;\n\n", name, args[i]) >> SFILE
- printf("\tfor (cnt = 0, nl = locp;") >> SFILE
- printf(" nl != NULL; cnt++, nl = nl->next)\n\t\t;\n\n") >> SFILE
- printf("\tif (cnt == 0) {\n") >> SFILE
- printf("\t\t*ppp = NULL;\n") >> SFILE
- printf("\t\treturn (0);\n\t}\n") >> SFILE
- printf("\tsize = sizeof(*pp) * (cnt + 1);\n") >> SFILE
- printf("\tif ((ret = __os_malloc(NULL, size, ") >> SFILE
- printf("NULL, ppp)) != 0)\n") >> SFILE
- printf("\t\treturn (ret);\n") >> SFILE
- printf("\tmemset(*ppp, 0, size);\n") >> SFILE
- printf("\tfor (pp = *ppp, nl = locp;") >> SFILE
- printf(" nl != NULL; nl = nl->next, pp++) {\n") >> SFILE
- if (list_type[i] == "STRING") {
- printf("\t\tif ((ret = __os_malloc(NULL ,") >> SFILE
- printf("nl->ent.ent_len + 1, NULL, pp)) != 0)\n") \
- >> SFILE
- printf("\t\t\tgoto out;\n") >> SFILE
- printf("\t\tif ((ret = __os_strdup(NULL, ") >> SFILE
- printf("(char *)nl->ent.ent_val, pp)) != 0)\n") >> SFILE
- printf("\t\t\tgoto out;\n") >> SFILE
- }
- if (list_type[i] == "INT" || list_type[i] == "ID")
- printf("\t\t*pp = *(u_int32_t *)nl->ent.ent_val;\n") \
- >> SFILE
- printf("\t}\n") >> SFILE
- printf("\treturn (0);\n") >> SFILE
- if (list_type[i] == "STRING") {
- printf("out:\n") >> SFILE
- printf("\t__db_%s_%sfree(*ppp);\n", \
- name, args[i]) >> SFILE
- printf("\treturn (ret);\n") >> SFILE
- }
- printf("}\n\n") >> SFILE
-
- printf("void\n") >> SFILE
- printf("__db_%s_%sfree(pp)\n", name, args[i]) >> SFILE
-
- if (list_type[i] == "STRING")
- printf("\tchar **pp;\n") >> SFILE
- if (list_type[i] == "INT" || list_type[i] == "ID")
- printf("\tu_int32_t *pp;\n") >> SFILE
-
- printf("{\n") >> SFILE
- printf("\tsize_t size;\n") >> SFILE
-
- if (list_type[i] == "STRING")
- printf("\tchar **p;\n\n") >> SFILE
- if (list_type[i] == "INT" || list_type[i] == "ID")
- printf("\tu_int32_t *p;\n\n") >> SFILE
-
- printf("\tif (pp == NULL)\n\t\treturn;\n") >> SFILE
- printf("\tsize = sizeof(*p);\n") >> SFILE
- printf("\tfor (p = pp; *p != 0; p++) {\n") >> SFILE
- printf("\t\tsize += sizeof(*p);\n") >> SFILE
-
- if (list_type[i] == "STRING")
- printf("\t\t__os_free(*p, strlen(*p)+1);\n") >> SFILE
- printf("\t}\n") >> SFILE
- printf("\t__os_free(pp, size);\n") >> SFILE
- printf("}\n\n") >> SFILE
- }
-
- #
# =====================================================
# Generate Procedure Template Server code
#
# Produce SED file commands if needed at the same time
#
- # Start with PUBLIC prototypes
+ # Spit out comment, prototype, function name and arg list.
#
- printf("void __%s_%d_proc __P((", name, msgid) >> SHFILE
- sep = "";
- argcount = 0;
+ printf("/^\\/\\* BEGIN __%s_proc/,/^\\/\\* END __%s_proc/c\\\n", \
+ name, name) >> SEDFILE
+
+ printf("/* BEGIN __%s_proc */\n", name) >> PFILE
+ printf("/* BEGIN __%s_proc */\\\n", name) >> SEDFILE
+
+ pi = 1;
+ p[pi++] = sprintf("void __%s_proc __P((", name);
+ p[pi++] = "";
for (i = 0; i < nvars; ++i) {
- argcount++;
- split_lines(1);
- if (argcount == 0) {
- sep = "";
- }
if (rpc_type[i] == "IGNORE")
continue;
if (rpc_type[i] == "ID") {
- printf("%slong", sep) >> SHFILE
+ p[pi++] = "long";
+ p[pi++] = ", ";
}
if (rpc_type[i] == "STRING") {
- printf("%schar *", sep) >> SHFILE
+ p[pi++] = "char *";
+ p[pi++] = ", ";
+ }
+ if (rpc_type[i] == "GID") {
+ p[pi++] = "u_int8_t *";
+ p[pi++] = ", ";
}
if (rpc_type[i] == "INT") {
- printf("%su_int32_t", sep) >> SHFILE
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
+ }
+ if (rpc_type[i] == "INTRET") {
+ p[pi++] = "u_int32_t *";
+ p[pi++] = ", ";
}
- if (rpc_type[i] == "LIST" && list_type[i] == "STRING") {
- printf("%schar **", sep) >> SHFILE
+ if (rpc_type[i] == "LIST" && list_type[i] == "GID") {
+ p[pi++] = "u_int8_t *";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
}
if (rpc_type[i] == "LIST" && list_type[i] == "INT") {
- printf("%su_int32_t *", sep) >> SHFILE
+ p[pi++] = "u_int32_t *";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
}
if (rpc_type[i] == "LIST" && list_type[i] == "ID") {
- printf("%su_int32_t *", sep) >> SHFILE
+ p[pi++] = "u_int32_t *";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
}
if (rpc_type[i] == "DBT") {
- printf("%su_int32_t", sep) >> SHFILE
- sep = ", ";
- argcount++;
- split_lines(1);
- if (argcount == 0) {
- sep = "";
- } else {
- sep = ", ";
- }
- printf("%su_int32_t", sep) >> SHFILE
- argcount++;
- split_lines(1);
- if (argcount == 0) {
- sep = "";
- } else {
- sep = ", ";
- }
- printf("%su_int32_t", sep) >> SHFILE
- argcount++;
- split_lines(1);
- if (argcount == 0) {
- sep = "";
- } else {
- sep = ", ";
- }
- printf("%svoid *", sep) >> SHFILE
- argcount++;
- split_lines(1);
- if (argcount == 0) {
- sep = "";
- } else {
- sep = ", ";
- }
- printf("%su_int32_t", sep) >> SHFILE
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
+ p[pi++] = "void *";
+ p[pi++] = ", ";
+ p[pi++] = "u_int32_t";
+ p[pi++] = ", ";
}
- sep = ", ";
}
- printf("%s__%s_reply *", sep, name) >> SHFILE
+ p[pi++] = sprintf("__%s_reply *", name);
if (xdr_free) {
- printf("%sint *));\n", sep) >> SHFILE
+ p[pi++] = ", ";
+ p[pi++] = "int *));";
} else {
- printf("));\n") >> SHFILE
+ p[pi++] = "";
+ p[pi++] = "));";
}
- #
- # Spit out function name and arg list
- #
- printf("/^\\/\\* BEGIN __%s_%d_proc/,/^\\/\\* END __%s_%d_proc/c\\\n", \
- name, msgid, name, msgid) >> SEDFILE
+ p[pi++] = "";
+ proto_format(p, 1, SEDFILE);
- printf("/* BEGIN __%s_%d_proc */\n", name, msgid) >> PFILE
- printf("/* BEGIN __%s_%d_proc */\\\n", name, msgid) >> SEDFILE
printf("void\n") >> PFILE
printf("void\\\n") >> SEDFILE
- printf("__%s_%d_proc(", name, msgid) >> PFILE
- printf("__%s_%d_proc(", name, msgid) >> SEDFILE
+ printf("__%s_proc(", name) >> PFILE
+ printf("__%s_proc(", name) >> SEDFILE
sep = "";
argcount = 0;
for (i = 0; i < nvars; ++i) {
argcount++;
- split_lines(0);
+ split_lines();
if (argcount == 0) {
sep = "";
}
- if (rpc_type[i] == "IGNORE")
+ if (rpc_type[i] == "IGNORE")
continue;
if (rpc_type[i] == "ID") {
printf("%s%scl_id", sep, args[i]) >> PFILE
@@ -818,20 +670,37 @@ END {
printf("%s%s", sep, args[i]) >> PFILE
printf("%s%s", sep, args[i]) >> SEDFILE
}
+ if (rpc_type[i] == "GID") {
+ printf("%s%s", sep, args[i]) >> PFILE
+ printf("%s%s", sep, args[i]) >> SEDFILE
+ }
if (rpc_type[i] == "INT") {
printf("%s%s", sep, args[i]) >> PFILE
printf("%s%s", sep, args[i]) >> SEDFILE
}
+ if (rpc_type[i] == "INTRET") {
+ printf("%s%s", sep, args[i]) >> PFILE
+ printf("%s%s", sep, args[i]) >> SEDFILE
+ }
if (rpc_type[i] == "LIST") {
- printf("%s%slist", sep, args[i]) >> PFILE
- printf("%s%slist", sep, args[i]) >> SEDFILE
+ printf("%s%s", sep, args[i]) >> PFILE
+ printf("%s%s", sep, args[i]) >> SEDFILE
+ argcount++;
+ split_lines();
+ if (argcount == 0) {
+ sep = "";
+ } else {
+ sep = ", ";
+ }
+ printf("%s%slen", sep, args[i]) >> PFILE
+ printf("%s%slen", sep, args[i]) >> SEDFILE
}
if (rpc_type[i] == "DBT") {
printf("%s%sdlen", sep, args[i]) >> PFILE
printf("%s%sdlen", sep, args[i]) >> SEDFILE
sep = ", ";
argcount++;
- split_lines(0);
+ split_lines();
if (argcount == 0) {
sep = "";
} else {
@@ -840,7 +709,16 @@ END {
printf("%s%sdoff", sep, args[i]) >> PFILE
printf("%s%sdoff", sep, args[i]) >> SEDFILE
argcount++;
- split_lines(0);
+ split_lines();
+ if (argcount == 0) {
+ sep = "";
+ } else {
+ sep = ", ";
+ }
+ printf("%s%sulen", sep, args[i]) >> PFILE
+ printf("%s%sulen", sep, args[i]) >> SEDFILE
+ argcount++;
+ split_lines();
if (argcount == 0) {
sep = "";
} else {
@@ -849,7 +727,7 @@ END {
printf("%s%sflags", sep, args[i]) >> PFILE
printf("%s%sflags", sep, args[i]) >> SEDFILE
argcount++;
- split_lines(0);
+ split_lines();
if (argcount == 0) {
sep = "";
} else {
@@ -858,7 +736,7 @@ END {
printf("%s%sdata", sep, args[i]) >> PFILE
printf("%s%sdata", sep, args[i]) >> SEDFILE
argcount++;
- split_lines(0);
+ split_lines();
if (argcount == 0) {
sep = "";
} else {
@@ -890,22 +768,33 @@ END {
printf("\tchar *%s;\n", args[i]) >> PFILE
printf("\\\tchar *%s;\\\n", args[i]) >> SEDFILE
}
+ if (rpc_type[i] == "GID") {
+ printf("\tu_int8_t *%s;\n", args[i]) >> PFILE
+ printf("\\\tu_int8_t *%s;\\\n", args[i]) >> SEDFILE
+ }
if (rpc_type[i] == "INT") {
printf("\tu_int32_t %s;\n", args[i]) >> PFILE
printf("\\\tu_int32_t %s;\\\n", args[i]) >> SEDFILE
}
- if (rpc_type[i] == "LIST" && list_type[i] == "STRING") {
- printf("\tchar ** %slist;\n", args[i]) >> PFILE
- printf("\\\tchar ** %slist;\\\n", args[i]) >> SEDFILE
+ if (rpc_type[i] == "LIST" && list_type[i] == "GID") {
+ printf("\tu_int8_t * %s;\n", args[i]) >> PFILE
+ printf("\\\tu_int8_t * %s;\\\n", args[i]) >> SEDFILE
}
if (rpc_type[i] == "LIST" && list_type[i] == "INT") {
- printf("\tu_int32_t * %slist;\n", args[i]) >> PFILE
- printf("\\\tu_int32_t * %slist;\\\n", \
+ printf("\tu_int32_t * %s;\n", args[i]) >> PFILE
+ printf("\\\tu_int32_t * %s;\\\n", \
args[i]) >> SEDFILE
+ printf("\tu_int32_t %ssize;\n", args[i]) >> PFILE
+ printf("\\\tu_int32_t %ssize;\\\n", args[i]) >> SEDFILE
}
if (rpc_type[i] == "LIST" && list_type[i] == "ID") {
- printf("\tu_int32_t * %slist;\n", args[i]) >> PFILE
- printf("\\\tu_int32_t * %slist;\\\n", args[i]) \
+ printf("\tu_int32_t * %s;\n", args[i]) >> PFILE
+ printf("\\\tu_int32_t * %s;\\\n", args[i]) \
+ >> SEDFILE
+ }
+ if (rpc_type[i] == "LIST") {
+ printf("\tu_int32_t %slen;\n", args[i]) >> PFILE
+ printf("\\\tu_int32_t %slen;\\\n", args[i]) \
>> SEDFILE
}
if (rpc_type[i] == "DBT") {
@@ -913,6 +802,8 @@ END {
printf("\\\tu_int32_t %sdlen;\\\n", args[i]) >> SEDFILE
printf("\tu_int32_t %sdoff;\n", args[i]) >> PFILE
printf("\\\tu_int32_t %sdoff;\\\n", args[i]) >> SEDFILE
+ printf("\tu_int32_t %sulen;\n", args[i]) >> PFILE
+ printf("\\\tu_int32_t %sulen;\\\n", args[i]) >> SEDFILE
printf("\tu_int32_t %sflags;\n", args[i]) >> PFILE
printf("\\\tu_int32_t %sflags;\\\n", args[i]) >> SEDFILE
printf("\tvoid *%sdata;\n", args[i]) >> PFILE
@@ -928,8 +819,8 @@ END {
printf("\\\tint * freep;\\\n") >> SEDFILE
}
- printf("/* END __%s_%d_proc */\n", name, msgid) >> PFILE
- printf("/* END __%s_%d_proc */\n", name, msgid) >> SEDFILE
+ printf("/* END __%s_proc */\n", name) >> PFILE
+ printf("/* END __%s_proc */\n", name) >> SEDFILE
#
# Function body
@@ -957,43 +848,23 @@ END {
printf("}\n\n") >> PFILE
#
- # If we don't want client code generated, go on to next.
- #
- if (gen_code == 0)
- next;
-
- #
# =====================================================
# Generate Client code
#
- # If we are doing a list, spit out prototype decl.
- #
- for (i = 0; i < nvars; i++) {
- if (rpc_type[i] != "LIST")
- continue;
- printf("static int __dbcl_%s_%slist __P((", \
- name, args[i]) >> CFILE
- printf("__%s_%slist **, ", name, args[i]) >> CFILE
- if (list_type[i] == "STRING")
- printf("%s));\n", c_type[i]) >> CFILE
- if (list_type[i] == "INT")
- printf("u_int32_t));\n") >> CFILE
- if (list_type[i] == "ID")
- printf("%s));\n", c_type[i]) >> CFILE
- printf("static void __dbcl_%s_%sfree __P((", \
- name, args[i]) >> CFILE
- printf("__%s_%slist **));\n", name, args[i]) >> CFILE
- }
- #
# Spit out PUBLIC prototypes.
#
- printf("int __dbcl_%s __P((",name) >> CHFILE
- sep = "";
+ pi = 1;
+ p[pi++] = sprintf("int __dbcl_%s __P((", name);
+ p[pi++] = "";
for (i = 0; i < nvars; ++i) {
- printf("%s%s", sep, pr_type[i]) >> CHFILE
- sep = ", ";
+ p[pi++] = pr_type[i];
+ p[pi++] = ", ";
}
- printf("));\n") >> CHFILE
+ p[pi - 1] = "";
+ p[pi++] = "));";
+ p[pi] = "";
+ proto_format(p, 0, CFILE);
+
#
# Spit out function name/args.
#
@@ -1014,16 +885,28 @@ END {
printf("{\n") >> CFILE
printf("\tCLIENT *cl;\n") >> CFILE
- printf("\t__%s_msg req;\n", name) >> CFILE
- printf("\tstatic __%s_reply *replyp = NULL;\n", name) >> CFILE;
+ printf("\t__%s_msg msg;\n", name) >> CFILE
+ printf("\t__%s_reply *replyp = NULL;\n", name) >> CFILE;
printf("\tint ret;\n") >> CFILE
if (!env_handle)
printf("\tDB_ENV *dbenv;\n") >> CFILE
+ #
+ # If we are managing a list, we need a few more vars.
+ #
+ for (i = 0; i < nvars; ++i) {
+ if (rpc_type[i] == "LIST") {
+ printf("\t%s %sp;\n", c_type[i], args[i]) >> CFILE
+ printf("\tint %si;\n", args[i]) >> CFILE
+ if (list_type[i] == "GID")
+ printf("\tu_int8_t ** %sq;\n", args[i]) >> CFILE
+ else
+ printf("\tu_int32_t * %sq;\n", args[i]) >> CFILE
+ }
+ }
printf("\n") >> CFILE
printf("\tret = 0;\n") >> CFILE
if (!env_handle) {
- printf("\tdbenv = NULL;\n") >> CFILE
if (db_handle)
printf("\tdbenv = %s->dbenv;\n", args[db_idx]) >> CFILE
else if (dbc_handle)
@@ -1032,27 +915,19 @@ END {
else if (txn_handle)
printf("\tdbenv = %s->mgrp->dbenv;\n", \
args[txn_idx]) >> CFILE
- printf("\tif (dbenv == NULL || dbenv->cl_handle == NULL) {\n") \
- >> CFILE
- printf("\t\t__db_err(dbenv, \"No server environment.\");\n") \
+ else
+ printf("\tdbenv = NULL;\n") >> CFILE
+ printf("\tif (dbenv == NULL || !RPC_ON(dbenv))\n") \
>> CFILE
+ printf("\t\treturn (__dbcl_noserver(NULL));\n") >> CFILE
} else {
- printf("\tif (%s == NULL || %s->cl_handle == NULL) {\n", \
+ printf("\tif (%s == NULL || !RPC_ON(%s))\n", \
args[env_idx], args[env_idx]) >> CFILE
- printf("\t\t__db_err(%s, \"No server environment.\");\n", \
+ printf("\t\treturn (__dbcl_noserver(%s));\n", \
args[env_idx]) >> CFILE
}
- printf("\t\treturn (DB_NOSERVER);\n") >> CFILE
- printf("\t}\n") >> CFILE
printf("\n") >> CFILE
- #
- # Free old reply if there was one.
- #
- printf("\tif (replyp != NULL) {\n") >> CFILE
- printf("\t\txdr_free((xdrproc_t)xdr___%s_reply, (void *)replyp);\n", \
- name) >> CFILE
- printf("\t\treplyp = NULL;\n\t}\n") >> CFILE
if (!env_handle)
printf("\tcl = (CLIENT *)dbenv->cl_handle;\n") >> CFILE
else
@@ -1068,8 +943,12 @@ END {
if (func_arg[i] != 1)
continue;
printf("\tif (%s != NULL) {\n", args[i]) >> CFILE
- printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE
- printf("\"User functions not supported in RPC.\");\n") >> CFILE
+ if (!env_handle) {
+ printf("\t\t__db_err(dbenv, ") >> CFILE
+ } else {
+ printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE
+ }
+ printf("\"User functions not supported in RPC\");\n") >> CFILE
printf("\t\treturn (EINVAL);\n\t}\n") >> CFILE
}
@@ -1079,49 +958,102 @@ END {
for (i = 0; i < nvars; ++i) {
if (rpc_type[i] == "ID") {
printf("\tif (%s == NULL)\n", args[i]) >> CFILE
- printf("\t\treq.%scl_id = 0;\n\telse\n", \
+ printf("\t\tmsg.%scl_id = 0;\n\telse\n", \
args[i]) >> CFILE
if (c_type[i] == "DB_TXN *") {
- printf("\t\treq.%scl_id = %s->txnid;\n", \
+ printf("\t\tmsg.%scl_id = %s->txnid;\n", \
args[i], args[i]) >> CFILE
} else {
- printf("\t\treq.%scl_id = %s->cl_id;\n", \
+ printf("\t\tmsg.%scl_id = %s->cl_id;\n", \
args[i], args[i]) >> CFILE
}
}
+ if (rpc_type[i] == "GID") {
+ printf("\tmemcpy(msg.%s, %s, %d);\n", \
+ args[i], args[i], xidsize) >> CFILE
+ }
if (rpc_type[i] == "INT") {
- printf("\treq.%s = %s;\n", args[i], args[i]) >> CFILE
+ printf("\tmsg.%s = %s;\n", args[i], args[i]) >> CFILE
}
if (rpc_type[i] == "STRING") {
printf("\tif (%s == NULL)\n", args[i]) >> CFILE
- printf("\t\treq.%s = \"\";\n", args[i]) >> CFILE
+ printf("\t\tmsg.%s = \"\";\n", args[i]) >> CFILE
printf("\telse\n") >> CFILE
- printf("\t\treq.%s = (char *)%s;\n", \
+ printf("\t\tmsg.%s = (char *)%s;\n", \
args[i], args[i]) >> CFILE
}
if (rpc_type[i] == "DBT") {
- printf("\treq.%sdlen = %s->dlen;\n", \
+ printf("\tmsg.%sdlen = %s->dlen;\n", \
+ args[i], args[i]) >> CFILE
+ printf("\tmsg.%sdoff = %s->doff;\n", \
args[i], args[i]) >> CFILE
- printf("\treq.%sdoff = %s->doff;\n", \
+ printf("\tmsg.%sulen = %s->ulen;\n", \
args[i], args[i]) >> CFILE
- printf("\treq.%sflags = %s->flags;\n", \
+ printf("\tmsg.%sflags = %s->flags;\n", \
args[i], args[i]) >> CFILE
- printf("\treq.%sdata.%sdata_val = %s->data;\n", \
+ printf("\tmsg.%sdata.%sdata_val = %s->data;\n", \
args[i], args[i], args[i]) >> CFILE
- printf("\treq.%sdata.%sdata_len = %s->size;\n", \
+ printf("\tmsg.%sdata.%sdata_len = %s->size;\n", \
args[i], args[i], args[i]) >> CFILE
}
if (rpc_type[i] == "LIST") {
- printf("\tif ((ret = __dbcl_%s_%slist(", \
- name, args[i]) >> CFILE
- printf("&req.%slist, %s)) != 0)\n", \
+ printf("\tfor (%si = 0, %sp = %s; *%sp != 0; ", \
+ args[i], args[i], args[i], args[i]) >> CFILE
+ printf(" %si++, %sp++)\n\t\t;\n", args[i], args[i]) \
+ >> CFILE
+
+ #
+ # If we are an array of ints, *_len is how many
+ # elements. If we are a GID, *_len is total bytes.
+ #
+ printf("\tmsg.%s.%s_len = %si",args[i], args[i], \
+ args[i]) >> CFILE
+ if (list_type[i] == "GID")
+ printf(" * %d;\n", xidsize) >> CFILE
+ else
+ printf(";\n") >> CFILE
+ printf("\tif ((ret = __os_calloc(") >> CFILE
+ if (!env_handle)
+ printf("dbenv,\n") >> CFILE
+ else
+ printf("%s,\n", args[env_idx]) >> CFILE
+ printf("\t msg.%s.%s_len,", \
args[i], args[i]) >> CFILE
- printf("\t\tgoto out;\n") >> CFILE
+ if (list_type[i] == "GID")
+ printf(" 1,") >> CFILE
+ else
+ printf(" sizeof(u_int32_t),") >> CFILE
+ printf(" &msg.%s.%s_val)) != 0)\n",\
+ args[i], args[i], args[i], args[i]) >> CFILE
+ printf("\t\treturn (ret);\n") >> CFILE
+ printf("\tfor (%sq = msg.%s.%s_val, %sp = %s; ", \
+ args[i], args[i], args[i], \
+ args[i], args[i]) >> CFILE
+ printf("%si--; %sq++, %sp++)\n", \
+ args[i], args[i], args[i]) >> CFILE
+ printf("\t\t*%sq = ", args[i]) >> CFILE
+ if (list_type[i] == "GID")
+ printf("*%sp;\n", args[i]) >> CFILE
+ if (list_type[i] == "ID")
+ printf("(*%sp)->cl_id;\n", args[i]) >> CFILE
+ if (list_type[i] == "INT")
+ printf("*%sp;\n", args[i]) >> CFILE
}
}
printf("\n") >> CFILE
- printf("\treplyp = __db_%s_%d(&req, cl);\n", name, msgid) >> CFILE
+ printf("\treplyp = __db_%s_%d%03d(&msg, cl);\n", name, major, minor) \
+ >> CFILE
+ for (i = 0; i < nvars; ++i) {
+ if (rpc_type[i] == "LIST") {
+ printf("\t__os_free(") >> CFILE
+ if (!env_handle)
+ printf("dbenv, ") >> CFILE
+ else
+ printf("%s, ", args[env_idx]) >> CFILE
+ printf("msg.%s.%s_val);\n", args[i], args[i]) >> CFILE
+ }
+ }
printf("\tif (replyp == NULL) {\n") >> CFILE
if (!env_handle) {
printf("\t\t__db_err(dbenv, ") >> CFILE
@@ -1136,113 +1068,37 @@ END {
if (ret_code == 0) {
printf("\tret = replyp->status;\n") >> CFILE
- } else {
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] == "LIST") {
- printf("\t__dbcl_%s_%sfree(&req.%slist);\n", \
- name, args[i], args[i]) >> CFILE
+
+ #
+ # Set any arguments that are returned
+ #
+ for (i = 0; i < rvars; ++i) {
+ if (ret_isarg[i]) {
+ printf("\tif (%sp != NULL)\n", \
+ retargs[i]) >> CFILE;
+ printf("\t\t*%sp = replyp->%s;\n", \
+ retargs[i], retargs[i]) >> CFILE;
}
}
- printf("\treturn (__dbcl_%s_ret(", name) >> CFILE
+ } else {
+ printf("\tret = __dbcl_%s_ret(", name) >> CFILE
sep = "";
for (i = 0; i < nvars; ++i) {
printf("%s%s", sep, args[i]) >> CFILE
sep = ", ";
}
- printf("%sreplyp));\n", sep) >> CFILE
+ printf("%sreplyp);\n", sep) >> CFILE
}
printf("out:\n") >> CFILE
- for (i = 0; i < nvars; ++i) {
- if (rpc_type[i] == "LIST") {
- printf("\t__dbcl_%s_%sfree(&req.%slist);\n", \
- name, args[i], args[i]) >> CFILE
- }
- }
- printf("\treturn (ret);\n") >> CFILE
- printf("}\n\n") >> CFILE
-
#
- # If we are doing a list, write list functions for op.
+ # Free reply if there was one.
#
- for (i = 0; i < nvars; i++) {
- if (rpc_type[i] != "LIST")
- continue;
- printf("int\n__dbcl_%s_%slist(locp, pp)\n", \
- name, args[i]) >> CFILE
- printf("\t__%s_%slist **locp;\n", name, args[i]) >> CFILE
- if (list_type[i] == "STRING")
- printf("\t%s pp;\n{\n\t%s p;\n", \
- c_type[i], c_type[i]) >> CFILE
- if (list_type[i] == "INT")
- printf("\tu_int32_t *pp;\n{\n\tu_int32_t *p, *q;\n") \
- >> CFILE
- if (list_type[i] == "ID")
- printf("\t%s pp;\n{\n\t%s p;\n\tu_int32_t *q;\n", \
- c_type[i], c_type[i]) >> CFILE
-
- printf("\tint ret;\n") >> CFILE
- printf("\t__%s_%slist *nl, **nlp;\n\n", name, args[i]) >> CFILE
- printf("\t*locp = NULL;\n") >> CFILE
- printf("\tif (pp == NULL)\n\t\treturn (0);\n") >> CFILE
- printf("\tnlp = locp;\n") >> CFILE
- printf("\tfor (p = pp; *p != 0; p++) {\n") >> CFILE
- printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE
- printf("sizeof(*nl), NULL, nlp)) != 0)\n") >> CFILE
- printf("\t\t\tgoto out;\n") >> CFILE
- printf("\t\tnl = *nlp;\n") >> CFILE
- printf("\t\tnl->next = NULL;\n") >> CFILE
- printf("\t\tnl->ent.ent_val = NULL;\n") >> CFILE
- printf("\t\tnl->ent.ent_len = 0;\n") >> CFILE
- if (list_type[i] == "STRING") {
- printf("\t\tif ((ret = __os_strdup(NULL, ") >> CFILE
- printf("*p, &nl->ent.ent_val)) != 0)\n") >> CFILE
- printf("\t\t\tgoto out;\n") >> CFILE
- printf("\t\tnl->ent.ent_len = strlen(*p)+1;\n") >> CFILE
- }
- if (list_type[i] == "INT") {
- printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE
- printf("sizeof(%s), NULL, &nl->ent.ent_val)) != 0)\n", \
- c_type[i]) >> CFILE
- printf("\t\t\tgoto out;\n") >> CFILE
- printf("\t\tq = (u_int32_t *)nl->ent.ent_val;\n") \
- >> CFILE
- printf("\t\t*q = *p;\n") >> CFILE
- printf("\t\tnl->ent.ent_len = sizeof(%s);\n", \
- c_type[i]) >> CFILE
- }
- if (list_type[i] == "ID") {
- printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE
- printf("sizeof(u_int32_t),") >> CFILE
- printf(" NULL, &nl->ent.ent_val)) != 0)\n") >> CFILE
- printf("\t\t\tgoto out;\n") >> CFILE
- printf("\t\tq = (u_int32_t *)nl->ent.ent_val;\n") \
- >> CFILE
- printf("\t\t*q = (*p)->cl_id;\n") >> CFILE
- printf("\t\tnl->ent.ent_len = sizeof(u_int32_t);\n") \
- >> CFILE
- }
- printf("\t\tnlp = &nl->next;\n") >> CFILE
- printf("\t}\n") >> CFILE
- printf("\treturn (0);\n") >> CFILE
- printf("out:\n") >> CFILE
- printf("\t__dbcl_%s_%sfree(locp);\n", name, args[i]) >> CFILE
- printf("\treturn (ret);\n") >> CFILE
-
- printf("}\n\n") >> CFILE
+ printf("\tif (replyp != NULL)\n") >> CFILE
+ printf("\t\txdr_free((xdrproc_t)xdr___%s_reply,",name) >> CFILE
+ printf(" (void *)replyp);\n") >> CFILE
+ printf("\treturn (ret);\n") >> CFILE
+ printf("}\n\n") >> CFILE
- printf("void\n__dbcl_%s_%sfree(locp)\n", name, args[i]) >> CFILE
- printf("\t__%s_%slist **locp;\n", name, args[i]) >> CFILE
- printf("{\n") >> CFILE
- printf("\t__%s_%slist *nl, *nl1;\n\n", name, args[i]) >> CFILE
- printf("\tif (locp == NULL)\n\t\treturn;\n") >> CFILE
- printf("\tfor (nl = *locp; nl != NULL; nl = nl1) {\n") >> CFILE
- printf("\t\tnl1 = nl->next;\n") >> CFILE
- printf("\t\tif (nl->ent.ent_val)\n") >> CFILE
- printf("\t\t\t__os_free(nl->ent.ent_val, nl->ent.ent_len);\n") \
- >> CFILE
- printf("\t\t__os_free(nl, sizeof(*nl));\n") >> CFILE
- printf("\t}\n}\n\n") >> CFILE
- }
#
# Generate Client Template code
#
@@ -1250,38 +1106,16 @@ END {
#
# If we are doing a list, write prototypes
#
- for (i = 0; i < rvars; ++i) {
- if (ret_type[i] != "LIST")
- continue;
- if (retlist_type[i] != "STRING" &&
- retlist_type[i] != "INT" && list_type[i] != "ID")
- continue;
- printf("int __db_%s_%sreplist __P((", \
- name, retargs[i]) >> TFILE
- printf("__%s_%sreplist, ", \
- name, retargs[i]) >> TFILE
- if (retlist_type[i] == "STRING") {
- printf("char ***));\n") >> TFILE
- }
- if (retlist_type[i] == "INT" ||
- retlist_type[i] == "ID") {
- printf("u_int32_t **));\n") >> TFILE
- }
- printf("void __db_%s_%sfree __P((", \
- name, retargs[i]) >> TFILE
- if (retlist_type[i] == "STRING")
- printf("char **));\n") >> TFILE
- if (retlist_type[i] == "INT" || retlist_type[i] == "ID")
- printf("u_int32_t *));\n\n") >> TFILE
- }
-
- printf("int __dbcl_%s_ret __P((", name) >> CHFILE
- sep = "";
+ pi = 1;
+ p[pi++] = sprintf("int __dbcl_%s_ret __P((", name);
+ p[pi++] = "";
for (i = 0; i < nvars; ++i) {
- printf("%s%s", sep, pr_type[i]) >> CHFILE
- sep = ", ";
+ p[pi++] = pr_type[i];
+ p[pi++] = ", ";
}
- printf("%s__%s_reply *));\n", sep, name) >> CHFILE
+ p[pi++] = sprintf("__%s_reply *));", name);
+ p[pi++] = "";
+ proto_format(p, 0, TFILE);
printf("int\n") >> TFILE
printf("__dbcl_%s_ret(", name) >> TFILE
@@ -1310,12 +1144,12 @@ END {
printf("\t%s %s;\n", \
retc_type[i], retargs[i]) >> TFILE
} else if (ret_type[i] == "LIST") {
- if (retlist_type[i] == "STRING")
- printf("\tchar **__db_%slist;\n", \
+ if (retlist_type[i] == "GID")
+ printf("\tu_int8_t *__db_%s;\n", \
retargs[i]) >> TFILE
if (retlist_type[i] == "ID" ||
retlist_type[i] == "INT")
- printf("\tu_int32_t *__db_%slist;\n", \
+ printf("\tu_int32_t *__db_%s;\n", \
retargs[i]) >> TFILE
} else {
printf("\t/* %s %s; */\n", \
@@ -1347,16 +1181,9 @@ END {
printf("\t%s = replyp->%s;\n", \
retargs[i], varname) >> TFILE
} else if (ret_type[i] == "LIST") {
- printf("\n\tif ((ret = __db_%s_%slist(", \
- name, retargs[i]) >> TFILE
- printf("replyp->%slist, &__db_%slist)) != 0)", \
- retargs[i], retargs[i]) >> TFILE
- printf("\n\t\treturn (ret);\n") >> TFILE
printf("\n\t/*\n") >> TFILE
printf("\t * XXX Handle list\n") >> TFILE
printf("\t */\n\n") >> TFILE
- printf("\t__db_%s_%sfree(__db_%slist);\n", \
- name, retargs[i], retargs[i]) >> TFILE
} else {
printf("\t/* Handle replyp->%s; */\n", \
varname) >> TFILE
@@ -1365,118 +1192,69 @@ END {
printf("\n\t/*\n\t * XXX Code goes here\n\t */\n\n") >> TFILE
printf("\treturn (replyp->status);\n") >> TFILE
printf("}\n\n") >> TFILE
- #
- # If we are doing a list, write list functions for this op.
- #
- for (i = 0; i < rvars; ++i) {
- if (ret_type[i] != "LIST")
- continue;
- if (retlist_type[i] != "STRING" &&
- retlist_type[i] != "INT" && list_type[i] != "ID")
- continue;
- printf("int\n") >> TFILE
- printf("__db_%s_%sreplist(locp, ppp)\n", \
- name, retargs[i]) >> TFILE
- printf("\t__%s_%sreplist *locp;\n", \
- name, retargs[i]) >> TFILE
- if (retlist_type[i] == "STRING") {
- printf("\tchar ***ppp;\n{\n") >> TFILE
- printf("\tchar **pp;\n") >> TFILE
- }
- if (retlist_type[i] == "INT" ||
- retlist_type[i] == "ID") {
- printf("\tu_int32_t **ppp;\n{\n") >> TFILE
- printf("\tu_int32_t *pp;\n") >> TFILE
- }
-
- printf("\tint cnt, ret, size;\n") >> TFILE
- printf("\t__%s_%sreplist *nl;\n\n", \
- name, retargs[i]) >> TFILE
- printf("\tfor (cnt = 0, nl = locp; ") >> TFILE
- printf("nl != NULL; cnt++, nl = nl->next)\n\t\t;\n\n") \
- >> TFILE
- printf("\tif (cnt == 0) {\n") >> TFILE
- printf("\t\t*ppp = NULL;\n") >> TFILE
- printf("\t\treturn (0);\n\t}\n") >> TFILE
- printf("\tsize = sizeof(*pp) * cnt;\n") >> TFILE
- printf("\tif ((ret = __os_malloc(NULL, ") >> TFILE
- printf("size, NULL, ppp)) != 0)\n") >> TFILE
- printf("\t\treturn (ret);\n") >> TFILE
- printf("\tmemset(*ppp, 0, size);\n") >> TFILE
- printf("\tfor (pp = *ppp, nl = locp; ") >> TFILE
- printf("nl != NULL; nl = nl->next, pp++) {\n") >> TFILE
- if (retlist_type[i] == "STRING") {
- printf("\t\tif ((ret = __os_malloc(NULL, ") \
- >> TFILE
- printf("nl->ent.ent_len + 1, NULL,") >> TFILE
- printf(" pp)) != 0)\n") >> TFILE
- printf("\t\t\tgoto out;\n") >> TFILE
- printf("\t\tif ((ret = __os_strdup(") >> TFILE
- printf("NULL, (char *)nl->ent.ent_val,") \
- >> TFILE
- printf(" pp)) != 0)\n") >> TFILE
- printf("\t\t\tgoto out;\n") >> TFILE
- }
- if (retlist_type[i] == "INT" ||
- retlist_type[i] == "ID") {
- printf("\t\t*pp = *(u_int32_t *)") >> TFILE
- printf("nl->ent.ent_val;\n") >> TFILE
- }
- printf("\t}\n") >> TFILE
- printf("\treturn (0);\n") >> TFILE
- printf("out:\n") >> TFILE
- printf("\t__db_%s_%sfree(*ppp);\n", \
- name, retargs[i]) >> TFILE
- printf("\treturn (ret);\n") >> TFILE
- printf("}\n\n") >> TFILE
-
- printf("void\n") >> TFILE
- printf("__db_%s_%sfree(pp)\n", \
- name, retargs[i]) >> TFILE
-
- if (retlist_type[i] == "STRING")
- printf("\tchar **pp;\n") >> TFILE
- if (retlist_type[i] == "INT" || retlist_type[i] == "ID")
- printf("\tu_int32_t *pp;\n") >> TFILE
-
- printf("{\n") >> TFILE
- printf("\tsize_t size;\n") >> TFILE
-
- if (retlist_type[i] == "STRING")
- printf("\tchar **p;\n\n") >> TFILE
- if (retlist_type[i] == "INT" || retlist_type[i] == "ID")
- printf("\tu_int32_t *p;\n\n") >> TFILE
-
- printf("\tif (pp == NULL)\n\t\treturn;\n") >> TFILE
- printf("\tsize = sizeof(*p);\n") >> TFILE
- printf("\tfor (p = pp; *p != 0; p++) {\n") >> TFILE
- printf("\t\tsize += sizeof(*p);\n") >> TFILE
-
- if (retlist_type[i] == "STRING")
- printf("\t\t__os_free(*p, strlen(*p)+1);\n") \
- >> TFILE
- printf("\t}\n") >> TFILE
- printf("\t__os_free(pp, size);\n") >> TFILE
- printf("}\n\n") >> TFILE
- }
}
}
#
# split_lines --
# Add line separators to pretty-print the output.
-function split_lines(is_public) {
+function split_lines() {
if (argcount > 3) {
# Reset the counter, remove any trailing whitespace from
# the separator.
argcount = 0;
sub("[ ]$", "", sep)
- if (is_public) {
- printf("%s\n\t", sep) >> SHFILE
- } else {
- printf("%s\n\t\t", sep) >> PFILE
- printf("%s\\\n\\\t\\\t", sep) >> SEDFILE
+ printf("%s\n\t\t", sep) >> PFILE
+ printf("%s\\\n\\\t\\\t", sep) >> SEDFILE
+ }
+}
+
+# proto_format --
+# Pretty-print a function prototype.
+function proto_format(p, sedfile, OUTPUT)
+{
+ if (sedfile)
+ printf("/*\\\n") >> OUTPUT;
+ else
+ printf("/*\n") >> OUTPUT;
+
+ s = "";
+ for (i = 1; i in p; ++i)
+ s = s p[i];
+
+ if (sedfile)
+ t = "\\ * PUBLIC: "
+ else
+ t = " * PUBLIC: "
+ if (length(s) + length(t) < 80)
+ if (sedfile)
+ printf("%s%s", t, s) >> OUTPUT;
+ else
+ printf("%s%s", t, s) >> OUTPUT;
+ else {
+ split(s, p, "__P");
+ len = length(t) + length(p[1]);
+ printf("%s%s", t, p[1]) >> OUTPUT
+
+ n = split(p[2], comma, ",");
+ comma[1] = "__P" comma[1];
+ for (i = 1; i <= n; i++) {
+ if (len + length(comma[i]) > 75) {
+ if (sedfile)
+ printf(\
+ "\\\n\\ * PUBLIC: ") >> OUTPUT;
+ else
+ printf("\n * PUBLIC: ") >> OUTPUT;
+ len = 0;
+ }
+ printf("%s%s", comma[i], i == n ? "" : ",") >> OUTPUT;
+ len += length(comma[i]);
}
}
+ if (sedfile)
+ printf("\\\n\\ */\\\n") >> OUTPUT;
+ else
+ printf("\n */\n") >> OUTPUT;
+ delete p;
}
diff --git a/db/dist/ltmain.sh b/db/dist/ltmain.sh
index 5eb329149..3526e4b9b 100644
--- a/db/dist/ltmain.sh
+++ b/db/dist/ltmain.sh
@@ -1,7 +1,8 @@
# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+# NOTE: Changing this file will not affect anything until you rerun configure.
#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
+# Free Software Foundation, Inc.
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
@@ -48,14 +49,14 @@ EOF
fi
# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
+progname=`$echo "$0" | ${SED} 's%^.*/%%'`
modename="$progname"
# Constants.
PROGRAM=ltmain.sh
PACKAGE=libtool
-VERSION=1.3.5
-TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
+VERSION=1.5
+TIMESTAMP=" (1.1220 2003/04/05 19:32:58)"
default_mode=
help="Try \`$progname --help' for more information."
@@ -66,10 +67,19 @@ rm="rm -f"
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed="${SED}"' -e 1s/^X//'
sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
+ ;;
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
+ ;;
+esac
# NLS nuisances.
# Only set LANG and LC_ALL to C if already set.
@@ -83,15 +93,12 @@ if test "${LANG+set}" = set; then
save_LANG="$LANG"; LANG=C; export LANG
fi
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
- echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
+# Make sure IFS has a sensible default
+: ${IFS=" "}
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
- echo "$modename: not configured to build any kind of library" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ $echo "$modename: not configured to build any kind of library" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
exit 1
fi
@@ -107,22 +114,92 @@ execute_dlfiles=
lo2o="s/\\.lo\$/.${objext}/"
o2lo="s/\\.${objext}\$/.lo/"
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+win32_libid () {
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $echo $win32_libid_type
+}
+
+# End of Shell function definitions
+#####################################
+
# Parse our command line options once, thoroughly.
-while test $# -gt 0
+while test "$#" -gt 0
do
arg="$1"
shift
- case "$arg" in
+ case $arg in
-*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
- case "$prev" in
+ case $prev in
execute_dlfiles)
- eval "$prev=\"\$$prev \$arg\""
+ execute_dlfiles="$execute_dlfiles $arg"
+ ;;
+ tag)
+ tagname="$arg"
+
+ # Check whether tagname contains only valid characters
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ $echo "$progname: invalid tag name: $tagname" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $tagname in
+ CC)
+ # Don't test for the "default" C tag, as we know, it's there, but
+ # not specially marked.
+ ;;
+ *)
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
+ taglist="$taglist $tagname"
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
+ else
+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
+ fi
+ ;;
+ esac
;;
*)
eval "$prev=\$arg"
@@ -135,23 +212,31 @@ do
fi
# Have we seen a non-optional argument yet?
- case "$arg" in
+ case $arg in
--help)
show_help=yes
;;
--version)
- echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
exit 0
;;
--config)
- sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
+ done
exit 0
;;
--debug)
- echo "$progname: enabling shell trace mode"
+ $echo "$progname: enabling shell trace mode"
set -x
;;
@@ -160,16 +245,16 @@ do
;;
--features)
- echo "host: $host"
+ $echo "host: $host"
if test "$build_libtool_libs" = yes; then
- echo "enable shared libraries"
+ $echo "enable shared libraries"
else
- echo "disable shared libraries"
+ $echo "disable shared libraries"
fi
if test "$build_old_libs" = yes; then
- echo "enable static libraries"
+ $echo "enable static libraries"
else
- echo "disable static libraries"
+ $echo "disable static libraries"
fi
exit 0
;;
@@ -179,10 +264,19 @@ do
--mode) prevopt="--mode" prev=mode ;;
--mode=*) mode="$optarg" ;;
+ --preserve-dup-deps) duplicate_deps="yes" ;;
+
--quiet | --silent)
show=:
;;
+ --tag) prevopt="--tag" prev=tag ;;
+ --tag=*)
+ set tag "$optarg" ${1+"$@"}
+ shift
+ prev=tag
+ ;;
+
-dlopen)
prevopt="-dlopen"
prev=execute_dlfiles
@@ -207,16 +301,23 @@ if test -n "$prevopt"; then
exit 1
fi
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
if test -z "$show_help"; then
# Infer the operation mode.
if test -z "$mode"; then
- case "$nonopt" in
- *cc | *++ | gcc* | *-gcc*)
+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+ $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+ case $nonopt in
+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
mode=link
for arg
do
- case "$arg" in
+ case $arg in
-c)
mode=compile
break
@@ -261,109 +362,152 @@ if test -z "$show_help"; then
help="Try \`$modename --help --mode=$mode' for more information."
# These modes are in order of execution frequency so that they run quickly.
- case "$mode" in
+ case $mode in
# libtool compile mode
compile)
modename="$modename: compile"
# Get the compilation command and the source file.
base_compile=
- lastarg=
- srcfile="$nonopt"
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
suppress_output=
+ arg_mode=normal
+ libobj=
- user_target=no
for arg
do
- # Accept any command-line options.
- case "$arg" in
- -o)
- if test "$user_target" != "no"; then
- $echo "$modename: you cannot specify \`-o' more than once" 1>&2
- exit 1
- fi
- user_target=next
+ case "$arg_mode" in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
;;
- -static)
- build_old_libs=yes
- continue
- ;;
- esac
-
- case "$user_target" in
- next)
- # The next one is the -o target name
- user_target=yes
- continue
- ;;
- yes)
- # We got the output file
- user_target=set
+ target )
libobj="$arg"
+ arg_mode=normal
continue
;;
- esac
- # Accept the current argument as the source file.
- lastarg="$srcfile"
- srcfile="$arg"
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ if test -n "$libobj" ; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit 1
+ fi
+ arg_mode=target
+ continue
+ ;;
- # Aesthetically quote the previous argument.
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
- # Backslashify any backslashes, double quotes, and dollar signs.
- # These are the only characters that are still specially
- # interpreted inside of double-quoted scrings.
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ * )
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+ case $lastarg in
# Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly in scan
- # sets, so we specify it separately.
- case "$lastarg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
lastarg="\"$lastarg\""
;;
esac
- # Add the previous argument to base_compile.
- if test -z "$base_compile"; then
- base_compile="$lastarg"
- else
- base_compile="$base_compile $lastarg"
- fi
- done
+ base_compile="$base_compile $lastarg"
+ done # for arg
- case "$user_target" in
- set)
- ;;
- no)
- # Get the name of the library object.
- libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ case $arg_mode in
+ arg)
+ $echo "$modename: you must specify an argument for -Xcompile"
+ exit 1
;;
- *)
+ target)
$echo "$modename: you must specify a target with \`-o'" 1>&2
exit 1
;;
+ *)
+ # Get the name of the library object.
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
esac
# Recognize several different file suffixes.
# If the user specifies -o file.o, it is replaced with file.lo
- xform='[cCFSfmso]'
- case "$libobj" in
+ xform='[cCFSifmso]'
+ case $libobj in
*.ada) xform=ada ;;
*.adb) xform=adb ;;
*.ads) xform=ads ;;
*.asm) xform=asm ;;
*.c++) xform=c++ ;;
*.cc) xform=cc ;;
+ *.ii) xform=ii ;;
+ *.class) xform=class ;;
*.cpp) xform=cpp ;;
*.cxx) xform=cxx ;;
*.f90) xform=f90 ;;
*.for) xform=for ;;
+ *.java) xform=java ;;
esac
libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
- case "$libobj" in
+ case $libobj in
*.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
*)
$echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
@@ -371,6 +515,56 @@ if test -z "$show_help"; then
;;
esac
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base compile
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case "$base_compile " in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$obj"; then
+ xdir=
+ else
+ xdir=$xdir/
+ fi
+ lobj=${xdir}$objdir/$objname
+
if test -z "$base_compile"; then
$echo "$modename: you must specify a compilation command" 1>&2
$echo "$help" 1>&2
@@ -379,22 +573,34 @@ if test -z "$show_help"; then
# Delete any leftover library objects.
if test "$build_old_libs" = yes; then
- removelist="$obj $libobj"
+ removelist="$obj $lobj $libobj ${libobj}T"
else
- removelist="$libobj"
+ removelist="$lobj $libobj ${libobj}T"
fi
$run $rm $removelist
trap "$run $rm $removelist; exit 1" 1 2 15
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
# Calculate the filename of the output object if compiler does
# not support -o with -c
if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
lockfile="$output_obj.lock"
removelist="$removelist $output_obj $lockfile"
trap "$run $rm $removelist; exit 1" 1 2 15
else
+ output_obj=
need_locks=no
lockfile=
fi
@@ -402,13 +608,13 @@ if test -z "$show_help"; then
# Lock this critical section if it is needed
# We use this script file to make the link, it avoids creating a new file
if test "$need_locks" = yes; then
- until ln "$0" "$lockfile" 2>/dev/null; do
+ until $run ln "$0" "$lockfile" 2>/dev/null; do
$show "Waiting for $lockfile to be removed"
sleep 2
done
elif test "$need_locks" = warn; then
if test -f "$lockfile"; then
- echo "\
+ $echo "\
*** ERROR, $lockfile exists and contains:
`cat $lockfile 2>/dev/null`
@@ -422,51 +628,55 @@ compiler."
$run $rm $removelist
exit 1
fi
- echo $srcfile > "$lockfile"
+ $echo $srcfile > "$lockfile"
fi
if test -n "$fix_srcfile_path"; then
eval srcfile=\"$fix_srcfile_path\"
fi
+ $run $rm "$libobj" "${libobj}T"
+
+ # Create a libtool object file (analogous to a ".la" file),
+ # but don't create it if we're doing a dry run.
+ test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
# Only build a PIC object if we are building libtool libraries.
if test "$build_libtool_libs" = yes; then
# Without this assignment, base_compile gets emptied.
fbsd_hideous_sh_bug=$base_compile
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
- if test "$build_old_libs" = yes; then
- lo_libobj="$libobj"
- dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$libobj"; then
- dir="$objdir"
- else
- dir="$dir/$objdir"
- fi
- libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+ if test "$pic_mode" != no; then
+ command="$base_compile $srcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ fi
- if test -d "$dir"; then
- $show "$rm $libobj"
- $run $rm $libobj
- else
- $show "$mkdir $dir"
- $run $mkdir $dir
- status=$?
- if test $status -ne 0 && test ! -d $dir; then
- exit $status
- fi
+ if test ! -d "${xdir}$objdir"; then
+ $show "$mkdir ${xdir}$objdir"
+ $run $mkdir ${xdir}$objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
fi
fi
- if test "$compiler_o_lo" = yes; then
- output_obj="$libobj"
- command="$command -o $output_obj"
- elif test "$compiler_c_o" = yes; then
- output_obj="$obj"
- command="$command -o $output_obj"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
fi
- $run $rm "$output_obj"
+ $run $rm "$lobj" "$output_obj"
+
$show "$command"
if $run eval "$command"; then :
else
@@ -475,8 +685,8 @@ compiler."
fi
if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -495,9 +705,9 @@ compiler."
fi
# Just move the object if needed, then go on to compile the next one
- if test x"$output_obj" != x"$libobj"; then
- $show "$mv $output_obj $libobj"
- if $run $mv $output_obj $libobj; then :
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ $show "$mv $output_obj $lobj"
+ if $run $mv $output_obj $lobj; then :
else
error=$?
$run $rm $removelist
@@ -505,56 +715,38 @@ compiler."
fi
fi
- # If we have no pic_flag, then copy the object into place and finish.
- if test -z "$pic_flag" && test "$build_old_libs" = yes; then
- # Rename the .lo from within objdir to obj
- if test -f $obj; then
- $show $rm $obj
- $run $rm $obj
- fi
+ # Append the name of the PIC object to the libtool object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
- $show "$mv $libobj $obj"
- if $run $mv $libobj $obj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
-
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
- libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- # Now arrange that obj and lo_libobj become the same file
- $show "(cd $xdir && $LN_S $baseobj $libobj)"
- if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
- exit 0
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
+EOF
# Allow error messages only from the first compilation.
suppress_output=' >/dev/null 2>&1'
+ else
+ # No PIC object so indicate it doesn't exist in the libtool
+ # object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
fi
# Only build a position-dependent object if we build old libraries.
if test "$build_old_libs" = yes; then
- command="$base_compile $srcfile"
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ else
+ command="$base_compile $srcfile $pic_flag"
+ fi
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
- output_obj="$obj"
fi
# Suppress compiler output if we already did a PIC compilation.
command="$command$suppress_output"
- $run $rm "$output_obj"
+ $run $rm "$obj" "$output_obj"
$show "$command"
if $run eval "$command"; then :
else
@@ -563,8 +755,8 @@ compiler."
fi
if test "$need_locks" = warn &&
- test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
- echo "\
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
*** ERROR, $lockfile contains:
`cat $lockfile 2>/dev/null`
@@ -583,7 +775,7 @@ compiler."
fi
# Just move the object if needed
- if test x"$output_obj" != x"$obj"; then
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
$show "$mv $output_obj $obj"
if $run $mv $output_obj $obj; then :
else
@@ -593,40 +785,42 @@ compiler."
fi
fi
- # Create an invalid libtool object if no PIC, so that we do not
- # accidentally link it into a program.
- if test "$build_libtool_libs" != yes; then
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > \$libobj" || exit $?
- else
- # Move the .lo from within objdir
- $show "$mv $libobj $lo_libobj"
- if $run $mv $libobj $lo_libobj; then :
- else
- error=$?
- $run $rm $removelist
- exit $error
- fi
- fi
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+ else
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
fi
+ $run $mv "${libobj}T" "${libobj}"
+
# Unlock the critical section if it was locked
if test "$need_locks" != no; then
- $rm "$lockfile"
+ $run $rm "$lockfile"
fi
exit 0
;;
# libtool link mode
- link)
+ link | relink)
modename="$modename: link"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
# It is impossible to link a dll without this setting, and
# we shouldn't force the makefile maintainer to figure out
# which system we are compiling for in order to pass an extra
- # flag for every libtool invokation.
+ # flag for every libtool invocation.
# allow_undefined=no
# FIXME: Unfortunately, there are problems with the above when trying
@@ -635,179 +829,13 @@ compiler."
# -no-undefined on the libtool link line when we can be certain
# that all symbols are satisfied, otherwise we get a static library.
allow_undefined=yes
-
- # This is a source program that is used to create dlls on Windows
- # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
- # This is a source program that is used to create import libraries
- # on Windows for dlls which lack them. Don't remove nor modify the
- # starting and closing comments
-# /* impgen.c starts here */
-# /* Copyright (C) 1999 Free Software Foundation, Inc.
-#
-# This file is part of GNU libtool.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-# */
-#
-# #include <stdio.h> /* for printf() */
-# #include <unistd.h> /* for open(), lseek(), read() */
-# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
-# #include <string.h> /* for strdup() */
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[2];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 2);
-# return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[4];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 4);
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-# void *ptr;
-# {
-# unsigned char *b = ptr;
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-# int argc;
-# char *argv[];
-# {
-# int dll;
-# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-# unsigned long export_rva, export_size, nsections, secptr, expptr;
-# unsigned long name_rvas, nexp;
-# unsigned char *expdata, *erva;
-# char *filename, *dll_name;
-#
-# filename = argv[1];
-#
-# dll = open(filename, O_RDONLY|O_BINARY);
-# if (!dll)
-# return 1;
-#
-# dll_name = filename;
-#
-# for (i=0; filename[i]; i++)
-# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
-# dll_name = filename + i +1;
-#
-# pe_header_offset = pe_get32 (dll, 0x3c);
-# opthdr_ofs = pe_header_offset + 4 + 20;
-# num_entries = pe_get32 (dll, opthdr_ofs + 92);
-#
-# if (num_entries < 1) /* no exports */
-# return 1;
-#
-# export_rva = pe_get32 (dll, opthdr_ofs + 96);
-# export_size = pe_get32 (dll, opthdr_ofs + 100);
-# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-# secptr = (pe_header_offset + 4 + 20 +
-# pe_get16 (dll, pe_header_offset + 4 + 16));
-#
-# expptr = 0;
-# for (i = 0; i < nsections; i++)
-# {
-# char sname[8];
-# unsigned long secptr1 = secptr + 40 * i;
-# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-# lseek(dll, secptr1, SEEK_SET);
-# read(dll, sname, 8);
-# if (vaddr <= export_rva && vaddr+vsize > export_rva)
-# {
-# expptr = fptr + (export_rva - vaddr);
-# if (export_rva + export_size > vaddr + vsize)
-# export_size = vsize - (export_rva - vaddr);
-# break;
-# }
-# }
-#
-# expdata = (unsigned char*)malloc(export_size);
-# lseek (dll, expptr, SEEK_SET);
-# read (dll, expdata, export_size);
-# erva = expdata - export_rva;
-#
-# nexp = pe_as32 (expdata+24);
-# name_rvas = pe_as32 (expdata+32);
-#
-# printf ("EXPORTS\n");
-# for (i = 0; i<nexp; i++)
-# {
-# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-# }
-#
-# return 0;
-# }
-# /* impgen.c ends here */
;;
*)
allow_undefined=yes
;;
esac
+ libtool_args="$nonopt"
+ base_compile="$nonopt"
compile_command="$nonopt"
finalize_command="$nonopt"
@@ -818,18 +846,13 @@ compiler."
convenience=
old_convenience=
deplibs=
- linkopts=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- lib_search_path=
- fi
- # now prepend the system-specific ones
- eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
avoid_version=no
dlfiles=
dlprefiles=
@@ -839,10 +862,11 @@ compiler."
export_symbols_regex=
generated=
libobjs=
- link_against_libtool_libs=
ltlibs=
module=no
+ no_install=no
objs=
+ non_pic_objects=
prefer_static_libs=no
preload=no
prev=
@@ -854,11 +878,12 @@ compiler."
temp_rpath=
thread_safe=no
vinfo=
+ vinfo_number=no
# We need to know -static, to get the right output filenames.
for arg
do
- case "$arg" in
+ case $arg in
-all-static | -static)
if test "X$arg" = "X-all-static"; then
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
@@ -884,20 +909,28 @@ compiler."
test -n "$old_archive_from_new_cmds" && build_old_libs=yes
# Go through the arguments, transforming them on the way.
- while test $# -gt 0; do
+ while test "$#" -gt 0; do
arg="$1"
+ base_compile="$base_compile $arg"
shift
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
- case "$prev" in
+ case $prev in
output)
compile_command="$compile_command @OUTPUT@"
finalize_command="$finalize_command @OUTPUT@"
;;
esac
- case "$prev" in
+ case $prev in
dlfiles|dlprefiles)
if test "$preload" = no; then
# Add the symbol object into the linking commands.
@@ -905,7 +938,7 @@ compiler."
finalize_command="$finalize_command @SYMFILE@"
preload=yes
fi
- case "$arg" in
+ case $arg in
*.la | *.lo) ;; # We handle these cases below.
force)
if test "$dlself" = no; then
@@ -934,6 +967,7 @@ compiler."
dlprefiles="$dlprefiles $arg"
fi
prev=
+ continue
;;
esac
;;
@@ -951,14 +985,126 @@ compiler."
prev=
continue
;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
release)
release="-$arg"
prev=
continue
;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat $save_arg`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ done
+ else
+ $echo "$modename: link input file \`$save_arg' does not exist"
+ exit 1
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
rpath | xrpath)
# We need an absolute path.
- case "$arg" in
+ case $arg in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
$echo "$modename: only absolute run-paths are allowed" 1>&2
@@ -979,17 +1125,40 @@ compiler."
prev=
continue
;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
*)
eval "$prev=\"\$arg\""
prev=
continue
;;
esac
- fi
+ fi # test -n "$prev"
prevarg="$arg"
- case "$arg" in
+ case $arg in
-all-static)
if test -n "$link_static_flag"; then
compile_command="$compile_command $link_static_flag"
@@ -1026,7 +1195,7 @@ compiler."
-export-symbols | -export-symbols-regex)
if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: not more than one -exported-symbols argument allowed"
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
exit 1
fi
if test "X$arg" = "X-export-symbols"; then
@@ -1037,58 +1206,85 @@ compiler."
continue
;;
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
-L*)
dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
# We need an absolute path.
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit 1
fi
dir="$absdir"
;;
esac
- case " $deplibs " in
- *" $arg "*) ;;
- *) deplibs="$deplibs $arg";;
- esac
- case " $lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir";;
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
esac
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- case ":$dllsearchpath:" in
- ::) dllsearchpath="$dllsearchdir";;
- *":$dllsearchdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
esac
;;
esac
+ continue
;;
-l*)
- if test "$arg" = "-lc"; then
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # These systems don't actually have c library (as such)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
continue
;;
- esac
- elif test "$arg" = "-lm"; then
- case "$host" in
- *-*-cygwin* | *-*-beos*)
- # These systems don't actually have math library (as such)
- continue
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs -framework System"
+ continue
esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
fi
deplibs="$deplibs $arg"
+ continue
;;
-module)
@@ -1096,11 +1292,63 @@ compiler."
continue
;;
+ # gcc -m* arguments should be passed to the linker via $compiler_flags
+ # in order to pass architecture information to the linker
+ # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo
+ # but this is not reliable with gcc because gcc may use -mfoo to
+ # select a different linker, different libraries, etc, while
+ # -Wl,-mfoo simply passes -mfoo to the linker.
+ -m*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
-no-undefined)
allow_undefined=no
continue
;;
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
-o) prev=output ;;
-release)
@@ -1121,7 +1369,7 @@ compiler."
-R*)
dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
# We need an absolute path.
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
$echo "$modename: only absolute run-paths are allowed" 1>&2
@@ -1136,11 +1384,11 @@ compiler."
;;
-static)
- # If we have no pic_flag, then this is the same as -all-static.
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
continue
;;
@@ -1153,388 +1401,1315 @@ compiler."
prev=vinfo
continue
;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
# Some other compiler flag.
-* | +*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
arg="\"$arg\""
;;
esac
;;
- *.o | *.obj | *.a | *.lib)
+ *.$objext)
# A standard object.
objs="$objs $arg"
;;
*.lo)
- # A library object.
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
- prev=
- continue
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
else
- # If libtool objects are unsupported, then we need to preload.
- prev=dlprefiles
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
fi
fi
+ ;;
- if test "$prev" = dlprefiles; then
- # Preload the old-style object.
- dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
- prev=
- fi
- libobjs="$libobjs $arg"
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
;;
*.la)
# A libtool-controlled library.
- dlname=
- libdir=
- library_names=
- old_library=
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base link
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case $base_compile in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in $compile_command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d "$output_objdir"; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplcations in $postdeps and $predeps
+ duplicate_compiler_generated_deps=yes
+ ;;
+ *)
+ duplicate_compiler_generated_deps=$duplicate_deps
+ ;;
+ esac
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ continue
+ fi
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}.la"
+ if test -f "$lib"; then
+ found=yes
+ break
+ fi
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if (${SED} -e '2q' $lib |
+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ library_names=
+ old_library=
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ if test "$deplibs_check_method" != pass_all; then
+ $echo
+ $echo "*** Warning: Trying to link with static lib archive $deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because the file extensions .$libext of this argument makes me believe"
+ $echo "*** that it is just a static archive that I should not used here."
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the"
+ $echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit 1
+ fi
# Check to see that this really is a libtool archive.
- if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
else
- $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
exit 1
fi
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
# If the library was installed with an old release of libtool,
- # it will not redefine variable installed.
+ # it will not redefine variables installed, or shouldnotlink
installed=yes
+ shouldnotlink=no
# Read the .la file
- # If there is no directory component, then add one.
- case "$arg" in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
esac
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit 1
+ fi
+ continue
+ fi # $pass = conv
+
+
# Get the name of the library we link against.
linklib=
for l in $old_library $library_names; do
linklib="$l"
done
-
if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
exit 1
fi
- # Find the relevant object directory and library name.
- name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
if test "X$installed" = Xyes; then
- dir="$libdir"
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
else
- dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$arg"; then
- dir="$objdir"
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
else
- dir="$dir/$objdir"
+ newdlprefiles="$newdlprefiles $dir/$linklib"
fi
- fi
-
- if test -n "$dependency_libs"; then
- # Extract -R and -L from dependency_libs
- temp_deplibs=
- for deplib in $dependency_libs; do
- case "$deplib" in
- -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- case " $rpath $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- -L*) case "$compile_command $temp_deplibs " in
- *" $deplib "*) ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- case " $lib_search_path " in
- *" $temp_dir "*) ;;
- *) lib_search_path="$lib_search_path $temp_dir";;
- esac
- ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
+ fi # $pass = dlpreopen
if test -z "$libdir"; then
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$deplibs$dependency_libs"
- compile_command="$compile_command $dir/$old_library$dependency_libs"
- finalize_command="$finalize_command $dir/$old_library$dependency_libs"
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
continue
fi
- # This library was specified with -dlopen.
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking statically,
- # we need to preload.
- prev=dlprefiles
- else
- # We should not create a dependency on this library, but we
- # may need any libraries it requires.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- prev=
- continue
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
fi
- fi
- # The library was specified with -dlpreopen.
- if test "$prev" = dlprefiles; then
- # Prefer using a static library (so that no silly _DYNAMIC symbols
- # are required to link).
- if test -n "$old_library"; then
- dlprefiles="$dlprefiles $dir/$old_library"
- else
- dlprefiles="$dlprefiles $dir/$linklib"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var"; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
fi
- prev=
fi
+ link_static=no # Whether the deplib will be linked statically
if test -n "$library_names" &&
{ test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- link_against_libtool_libs="$link_against_libtool_libs $arg"
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
fi
-
- # We need an absolute path.
- case "$dir" in
- [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some systems (darwin)
+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
+ $echo
+ if test "$linkmode" = prog; then
+ $echo "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
fi
- ;;
- esac
-
- # This is the magic to use -rpath.
- # Skip directories that are in the system default run-time
- # search path, unless they have been requested with -R.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
+ $echo "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
*" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
esac
- ;;
- esac
-
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
+ case " $sys_lib_dlsearch_path " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
esac
- ;;
- esac
+ fi
- lib_linked=yes
- case "$hardcode_action" in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- compile_command="$compile_command $dir/$linklib"
- deplibs="$deplibs $dir/$linklib"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- if test -n "$dllsearchpath"; then
- dllsearchpath="$dllsearchpath:$dllsearchdir"
- else
- dllsearchpath="$dllsearchdir"
- fi
- ;;
- esac
- elif test "$hardcode_minus_L" = no; then
- case "$host" in
- *-*-sunos*)
- compile_shlibpath="$compile_shlibpath$dir:"
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ major=`expr $current - $age`
+ versuffix="-$major"
;;
esac
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$dir -l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- case ":$compile_shlibpath:" in
- *":$dir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$dir:";;
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$extract_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$old_archive_from_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a module then we can not link against it, someone
+ # is ignoring the new warnings I added
+ if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then
+ $echo "** Warning, lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $echo
+ $echo "** And there doesn't seem to be a static archive available"
+ $echo "** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit 1
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
else
- lib_linked=no
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
fi
- ;;
+ fi
- relink)
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
if test "$hardcode_direct" = yes; then
- compile_command="$compile_command $absdir/$linklib"
- deplibs="$deplibs $absdir/$linklib"
+ add="$libdir/$linklib"
elif test "$hardcode_minus_L" = yes; then
- case "$compile_command " in
- *" -L$absdir "*) ;;
- *) compile_command="$compile_command -L$absdir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$absdir -l$name"
+ add_dir="-L$libdir"
+ add="-l$name"
elif test "$hardcode_shlibpath_var" = yes; then
- case ":$compile_shlibpath:" in
- *":$absdir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$absdir:";;
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
else
- lib_linked=no
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
+ add="-l$name"
fi
- ;;
-
- *)
- lib_linked=no
- ;;
- esac
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
- fi
-
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- finalize_command="$finalize_command $libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- case "$finalize_command " in
- *" -L$libdir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case ":$finalize_shlibpath:" in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
- esac
- finalize_command="$finalize_command -l$name"
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
- fi
- else
- # Transform directly to old archives if we don't build new libraries.
- if test -n "$pic_flag" && test -z "$old_library"; then
- $echo "$modename: cannot find static library for \`$arg'" 1>&2
- exit 1
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
fi
-
+ elif test "$linkmode" = prog; then
# Here we assume that one of hardcode_direct or hardcode_minus_L
# is not unsupported. This is valid on all known static and
# shared platforms.
if test "$hardcode_direct" != unsupported; then
test -n "$old_library" && linklib="$old_library"
- compile_command="$compile_command $dir/$linklib"
- finalize_command="$finalize_command $dir/$linklib"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
else
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$dir";;
- esac
- finalize_command="$finalize_command -l$name"
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $echo
+ $echo "*** Warning: This system can not link to static lib archive $lib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $echo "*** But as you try to build a module library, libtool will still create "
+ $echo "*** a static module, that should work as long as the dlopening application"
+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ if test -n "$dependency_libs" &&
+ { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes ||
+ test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
fi
- fi
-
- # Add in any libraries that this one depends upon.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- continue
- ;;
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ if test "$absdir" != "$libdir"; then
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="$absdir"
+ fi
+ depdepl=
+ case $host in
+ *-*-darwin*)
+ # we do not want to link against static libs, but need to link against shared
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$path/$depdepl" ; then
+ depdepl="$path/$depdepl"
+ fi
+ newlib_search_path="$newlib_search_path $path"
+ path=""
+ fi
+ ;;
+ *)
+ path="-L$path"
+ ;;
+ esac
+
+ ;;
+ -l*)
+ case $host in
+ *-*-darwin*)
+ # Again, we only want to link against shared libraries
+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+ for tmp in $newlib_search_path ; do
+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
+ eval depdepl="$tmp/lib$tmp_libs.dylib"
+ break
+ fi
+ done
+ path=""
+ ;;
+ *) continue ;;
+ esac
+ ;;
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $depdepl "*) ;;
+ *) deplibs="$deplibs $depdepl" ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
fi
- done
-
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- case "$output" in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
- *.a | *.lib)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into archives" 1>&2
- exit 1
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
fi
+ # Last step: remove runtime libs from dependency_libs (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+ case $linkmode in
+ oldlib)
if test -n "$deplibs"; then
$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
fi
@@ -1552,7 +2727,7 @@ compiler."
fi
if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
fi
if test -n "$release"; then
@@ -1566,13 +2741,15 @@ compiler."
# Now set the variables for building old libraries.
build_libtool_libs=no
oldlibs="$output"
+ objs="$objs$old_deplibs"
;;
- *.la)
+ lib)
# Make sure we only generate libraries of the form `libNAME.la'.
- case "$outputname" in
+ case $outputname in
lib*)
name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval shared_ext=\"$shrext\"
eval libname=\"$libname_spec\"
;;
*)
@@ -1584,6 +2761,7 @@ compiler."
if test "$need_lib_prefix" != no; then
# Add the "lib" prefix for modules if required
name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval shared_ext=\"$shrext\"
eval libname=\"$libname_spec\"
else
libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
@@ -1591,30 +2769,24 @@ compiler."
;;
esac
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
if test -n "$objs"; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- exit 1
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit 1
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
+ $echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
fi
- # How the heck are we supposed to write a wrapper for a shared library?
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
- exit 1
- fi
-
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
fi
set dummy $rpath
- if test $# -gt 2; then
+ if test "$#" -gt 2; then
$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
fi
install_libdir="$2"
@@ -1623,15 +2795,16 @@ compiler."
if test -z "$rpath"; then
if test "$build_libtool_libs" = yes; then
# Building a libtool convenience library.
- libext=al
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
oldlibs="$output_objdir/$libname.$libext $oldlibs"
build_libtool_libs=convenience
build_old_libs=yes
fi
- dependency_libs="$deplibs"
if test -n "$vinfo"; then
- $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
fi
if test -n "$release"; then
@@ -1640,7 +2813,7 @@ compiler."
else
# Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
+ save_ifs="$IFS"; IFS=':'
set dummy $vinfo 0 0 0
IFS="$save_ifs"
@@ -1650,13 +2823,50 @@ compiler."
exit 1
fi
- current="$2"
- revision="$3"
- age="$4"
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$2"
+ number_minor="$3"
+ number_revision="$4"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ esac
+ ;;
+ no)
+ current="$2"
+ revision="$3"
+ age="$4"
+ ;;
+ esac
# Check that each of the things are valid numbers.
- case "$current" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $current in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1664,8 +2874,8 @@ compiler."
;;
esac
- case "$revision" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $revision in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1673,8 +2883,8 @@ compiler."
;;
esac
- case "$age" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $age in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1682,7 +2892,7 @@ compiler."
;;
esac
- if test $age -gt $current; then
+ if test "$age" -gt "$current"; then
$echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
exit 1
@@ -1692,21 +2902,49 @@ compiler."
major=
versuffix=
verstring=
- case "$version_type" in
+ case $version_type in
none) ;;
- irix)
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
+ irix | nonstopux)
major=`expr $current - $age + 1`
- versuffix="$major.$revision"
- verstring="sgi$major.$revision"
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
# Add in all the interfaces that we are compatible with.
loop=$revision
- while test $loop != 0; do
+ while test "$loop" -ne 0; do
iface=`expr $revision - $loop`
loop=`expr $loop - 1`
- verstring="sgi$major.$iface:$verstring"
+ verstring="$verstring_prefix$major.$iface:$verstring"
done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
;;
linux)
@@ -1715,13 +2953,13 @@ compiler."
;;
osf)
- major=`expr $current - $age`
+ major=.`expr $current - $age`
versuffix=".$current.$age.$revision"
verstring="$current.$age.$revision"
# Add in all the interfaces that we are compatible with.
loop=$age
- while test $loop != 0; do
+ while test "$loop" -ne 0; do
iface=`expr $current - $loop`
loop=`expr $loop - 1`
verstring="$verstring:${iface}.0"
@@ -1736,26 +2974,16 @@ compiler."
versuffix=".$current.$revision"
;;
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
windows)
- # Like Linux, but with '-' rather than '.', since we only
- # want one extension on Windows 95.
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
major=`expr $current - $age`
- versuffix="-$major-$age-$revision"
+ versuffix="-$major"
;;
*)
$echo "$modename: unknown library version type \`$version_type'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
exit 1
;;
esac
@@ -1763,7 +2991,16 @@ compiler."
# Clear the version info if we defaulted, and they specified a release.
if test -z "$vinfo" && test -n "$release"; then
major=
- verstring="0.0"
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
if test "$need_version" = no; then
versuffix=
else
@@ -1777,7 +3014,7 @@ compiler."
versuffix=
verstring=""
fi
-
+
# Check to see if the archive will have undefined symbols.
if test "$allow_undefined" = yes; then
if test "$allow_undefined_flag" = unsupported; then
@@ -1789,37 +3026,26 @@ compiler."
# Don't allow undefined symbols.
allow_undefined_flag="$no_undefined_flag"
fi
-
- dependency_libs="$deplibs"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
-
- #### local change for Sleepycat DB: [#2380]
- # The following case is added, since the linker's -pthread
- # option implicitly controls use of -lc or -lc_r.
- *freebsd*)
- # defer to whether the user wants -lc, or -lc_r
- ;;
-
- *)
- # Add libc to deplibs on all other systems.
- deplibs="$deplibs -lc"
- ;;
- esac
fi
- # Create the output directory, or remove our outputs if we need to.
- if test -d $output_objdir; then
- $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
- $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
- else
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$echo "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ if test -n "$removelist"; then
+ $show "${rm}r $removelist"
+ $run ${rm}r $removelist
fi
fi
@@ -1831,7 +3057,74 @@ compiler."
oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
fi
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs -framework System"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
# Transform deplibs into only deplibs that can be linked in shared.
name_save=$name
libname_save=$libname
@@ -1846,13 +3139,13 @@ compiler."
major=""
newdeplibs=
droppeddeps=no
- case "$deplibs_check_method" in
+ case $deplibs_check_method in
pass_all)
# Don't check for shared/static. Everything works.
# This might be a little naive. We might want to check
# whether the library exists or not. But this is on
# osf3 & osf4 and I'm not really sure... Just
- # implementing what was already the behaviour.
+ # implementing what was already the behavior.
newdeplibs=$deplibs
;;
test_compile)
@@ -1865,64 +3158,88 @@ compiler."
int main() { return 0; }
EOF
$rm conftest
- $CC -o conftest conftest.c $deplibs
- if test $? -eq 0 ; then
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
for i in $deplibs; do
name="`expr $i : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ if test "$name" != "" && test "$name" -ne "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which I believe you do not have"
+ $echo "*** because a test_compile did reveal that the linker did not use it for"
+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
fi
else
newdeplibs="$newdeplibs $i"
fi
done
else
- # Error occured in the first compile. Let's try to salvage the situation:
- # Compile a seperate program for each library.
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
for i in $deplibs; do
name="`expr $i : '-l\(.*\)'`"
- # If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
$rm conftest
- $CC -o conftest conftest.c $i
+ $LTCC -o conftest conftest.c $i
# Did it work?
- if test $? -eq 0 ; then
+ if test "$?" -eq 0 ; then
ldd_output=`ldd conftest`
- libname=`eval \\$echo \"$libname_spec\"`
- deplib_matches=`eval \\$echo \"$library_names_spec\"`
- set dummy $deplib_matches
- deplib_match=$2
- if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
- newdeplibs="$newdeplibs $i"
- else
- droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $i."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because a test_compile did reveal that the linker did not use this one"
+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
fi
else
droppeddeps=yes
- echo
- echo "*** Warning! Library $i is needed by this library but I was not able to"
- echo "*** make it link in! You will probably need to install it or some"
- echo "*** library that it depends on before this library will be fully"
- echo "*** functional. Installing it before continuing would be even better."
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
fi
else
newdeplibs="$newdeplibs $i"
@@ -1932,19 +3249,28 @@ EOF
;;
file_magic*)
set dummy $deplibs_check_method
- file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
name="`expr $a_deplib : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
- libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path; do
- potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
- for potent_lib in $potential_libs; do
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
# Follow soft links.
if ls -lLd "$potent_lib" 2>/dev/null \
| grep " -> " >/dev/null; then
- continue
+ continue
fi
# The statement above tries to avoid entering an
# endless loop below, in case of cyclic links.
@@ -1953,28 +3279,88 @@ EOF
# but so what?
potlib="$potent_lib"
while test -h "$potlib" 2>/dev/null; do
- potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- case "$potliblink" in
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
esac
done
if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
- | sed 10q \
- | egrep "$file_magic_regex" > /dev/null; then
+ | ${SED} 10q \
+ | $EGREP "$file_magic_regex" > /dev/null; then
newdeplibs="$newdeplibs $a_deplib"
a_deplib=""
break 2
fi
- done
- done
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval $echo \"$potent_lib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
if test -n "$a_deplib" ; then
droppeddeps=yes
- echo
- echo "*** Warning: This library needs some functionality provided by $a_deplib."
- echo "*** I have the capability to make that library automatically link in when"
- echo "*** you link to this library. But I can only do this if you have a"
- echo "*** shared version of the library, which you do not appear to have."
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a regex pattern. Last file checked: $potlib"
+ fi
fi
else
# Add a -L argument.
@@ -1984,16 +3370,23 @@ EOF
;;
none | unknown | *)
newdeplibs=""
- if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
- -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
- grep . >/dev/null; then
- echo
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+ -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ done
+ fi
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
+ | grep . >/dev/null; then
+ $echo
if test "X$deplibs_check_method" = "Xnone"; then
- echo "*** Warning: inter-library dependencies are not supported in this platform."
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
else
- echo "*** Warning: inter-library dependencies are not known to be supported."
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
fi
- echo "*** All declared inter-library dependencies are being dropped."
+ $echo "*** All declared inter-library dependencies are being dropped."
droppeddeps=yes
fi
;;
@@ -2004,19 +3397,26 @@ EOF
libname=$libname_save
name=$name_save
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
if test "$droppeddeps" = yes; then
if test "$module" = yes; then
- echo
- echo "*** Warning: libtool could not satisfy all declared inter-library"
- echo "*** dependencies of module $libname. Therefore, libtool will create"
- echo "*** a static module, that should work as long as the dlopening"
- echo "*** application is linked with the -dlopen flag."
+ $echo
+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
+ $echo "*** a static module, that should work as long as the dlopening"
+ $echo "*** application is linked with the -dlopen flag."
if test -z "$global_symbol_pipe"; then
- echo
- echo "*** However, this would only work if libtool was able to extract symbol"
- echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
- echo "*** not find such a program. So, this module is probably useless."
- echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
fi
if test "$build_old_libs" = no; then
oldlibs="$output_objdir/$libname.$libext"
@@ -2026,9 +3426,24 @@ EOF
build_libtool_libs=no
fi
else
- echo "*** The inter-library dependencies that have been dropped here will be"
- echo "*** automatically added whenever a program is linked with this library"
- echo "*** or is declared to -dlopen it."
+ $echo "*** The inter-library dependencies that have been dropped here will be"
+ $echo "*** automatically added whenever a program is linked with this library"
+ $echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $echo
+ $echo "*** Since this library must not contain undefined symbols,"
+ $echo "*** because either the platform does not support them or"
+ $echo "*** it was explicitly requested with -no-undefined,"
+ $echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
fi
fi
# Done checking deplibs!
@@ -2039,10 +3454,70 @@ EOF
library_names=
old_library=
dlname=
-
+
# Test again, we may have decided not to build it any more
if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
# Get the real and link names of the library.
+ eval shared_ext=\"$shrext\"
eval library_names=\"$library_names_spec\"
set dummy $library_names
realname="$2"
@@ -2053,6 +3528,9 @@ EOF
else
soname="$realname"
fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
lib="$output_objdir/$realname"
for link
@@ -2060,23 +3538,6 @@ EOF
linknames="$linknames $link"
done
- # Ensure that we have .o objects for linkers which dislike .lo
- # (e.g. aix) in case we are running --disable-static
- for obj in $libobjs; do
- xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$obj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- if test ! -f $xdir/$oldobj; then
- $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
- $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
- fi
- done
-
# Use standard objects if they are pic
test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
@@ -2087,16 +3548,24 @@ EOF
export_symbols="$output_objdir/$libname.exp"
$run $rm $export_symbols
eval cmds=\"$export_symbols_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd" || exit $?
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ $show "using reloadable object file for export list..."
+ skipped_export=:
+ fi
done
IFS="$save_ifs"
if test -n "$export_symbols_regex"; then
- $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
- $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
$show "$mv \"${export_symbols}T\" \"$export_symbols\""
$run eval '$mv "${export_symbols}T" "$export_symbols"'
fi
@@ -2107,24 +3576,36 @@ EOF
$run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
fi
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
else
gentop="$output_objdir/${outputname}x"
$show "${rm}r $gentop"
$run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
exit $status
fi
generated="$generated $gentop"
for xlib in $convenience; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -2133,32 +3614,183 @@ EOF
$show "${rm}r $xdir"
$run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
exit $status
fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
$show "(cd $xdir && $AR x $xabs)"
$run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
- libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
done
fi
fi
if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
eval flag=\"$thread_safe_flag_spec\"
- linkopts="$linkopts $flag"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
fi
# Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval cmds=\"$module_expsym_cmds\"
+ else
+ eval cmds=\"$module_cmds\"
+ fi
+ else
if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
eval cmds=\"$archive_expsym_cmds\"
else
eval cmds=\"$archive_cmds\"
+ fi
fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+
+ if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise.
+ $echo "creating reloadable object files..."
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ delfiles=
+ last_robj=
+ k=1
+ output=$output_objdir/$save_output-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$save_output-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$save_output-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ if ${skipped_export-false}; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+ fi
+
+ # Set up a command to remove the reloadale object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+ done
+
+ $echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval cmds=\"$archive_expsym_cmds\"
+ else
+ eval cmds=\"$archive_cmds\"
+ fi
+
+ # Append the command to remove the reloadable object files
+ # to the just-reset $cmds.
+ eval cmds=\"\$cmds~$rm $delfiles\"
+ fi
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2166,6 +3798,12 @@ EOF
done
IFS="$save_ifs"
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit 0
+ fi
+
# Create links to the real library.
for linkname in $linknames; do
if test "$realname" != "$linkname"; then
@@ -2182,12 +3820,7 @@ EOF
fi
;;
- *.lo | *.o | *.obj)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into objects" 1>&2
- exit 1
- fi
-
+ obj)
if test -n "$deplibs"; then
$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
fi
@@ -2212,9 +3845,9 @@ EOF
$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
fi
- case "$output" in
+ case $output in
*.lo)
- if test -n "$objs"; then
+ if test -n "$objs$old_deplibs"; then
$echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
exit 1
fi
@@ -2238,7 +3871,7 @@ EOF
gentop=
# reload_cmds runs $LD directly, so let us get rid of
# -Wl from whole_archive_flag_spec
- wl=
+ wl=
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
@@ -2247,17 +3880,17 @@ EOF
gentop="$output_objdir/${obj}x"
$show "${rm}r $gentop"
$run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
exit $status
fi
generated="$generated $gentop"
for xlib in $convenience; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -2266,26 +3899,52 @@ EOF
$show "${rm}r $xdir"
$run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
exit $status
fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
$show "(cd $xdir && $AR x $xabs)"
$run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
- reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
done
fi
fi
# Create the old-style object.
- reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
output="$obj"
eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2311,37 +3970,23 @@ EOF
# Create an invalid libtool object if no PIC, so that we don't
# accidentally link it into a program.
- $show "echo timestamp > $libobj"
- $run eval "echo timestamp > $libobj" || exit $?
+ # $show "echo timestamp > $libobj"
+ # $run eval "echo timestamp > $libobj" || exit $?
exit 0
fi
- if test -n "$pic_flag"; then
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
# Only do commands if we really have different PIC objects.
reload_objs="$libobjs $reload_conv_objs"
output="$libobj"
eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
$run eval "$cmd" || exit $?
done
IFS="$save_ifs"
- else
- # Just create a symlink.
- $show $rm $libobj
- $run $rm $libobj
- xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$libobj"; then
- xdir="."
- else
- xdir="$xdir"
- fi
- baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
- oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
- $show "(cd $xdir && $LN_S $oldobj $baseobj)"
- $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
fi
if test -n "$gentop"; then
@@ -2352,8 +3997,10 @@ EOF
exit 0
;;
- # Anything else should be a program.
- *)
+ prog)
+ case $host in
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
if test -n "$vinfo"; then
$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
fi
@@ -2363,20 +4010,37 @@ EOF
fi
if test "$preload" = yes; then
- if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
test "$dlopen_self_static" = unknown; then
$echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
+ fi
fi
-
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ case $host in
+ *darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ if test "$tagname" = CXX ; then
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ fi
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
if test -n "$rpath$xrpath"; then
# If the user specified any rpath flags, then add them.
for libdir in $rpath $xrpath; do
# This is the magic to use -rpath.
- case "$compile_rpath " in
- *" $libdir "*) ;;
- *) compile_rpath="$compile_rpath $libdir" ;;
- esac
case "$finalize_rpath " in
*" $libdir "*) ;;
*) finalize_rpath="$finalize_rpath $libdir" ;;
@@ -2394,7 +4058,7 @@ EOF
hardcode_libdirs="$libdir"
else
# Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
@@ -2412,6 +4076,14 @@ EOF
*) perm_rpath="$perm_rpath $libdir" ;;
esac
fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
done
# Substitute the hardcoded libdirs into the rpath.
if test -n "$hardcode_libdir_separator" &&
@@ -2430,7 +4102,7 @@ EOF
hardcode_libdirs="$libdir"
else
# Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
@@ -2457,23 +4129,6 @@ EOF
fi
finalize_rpath="$rpath"
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
- # Create the binary in the object directory, then wrap it.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
if test -n "$libobjs" && test "$build_old_libs" = yes; then
# Transform all the library objects into standard objects.
compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
@@ -2490,7 +4145,7 @@ EOF
fi
if test -n "$dlsyms"; then
- case "$dlsyms" in
+ case $dlsyms in
"") ;;
*.c)
# Discover the nlist of each of the dlfiles.
@@ -2522,19 +4177,19 @@ extern \"C\" {
test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
# Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
for arg in $progfiles; do
$show "extracting global C symbols from \`$arg'"
$run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
done
if test -n "$exclude_expsyms"; then
- $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
$run eval '$mv "$nlist"T "$nlist"'
fi
-
+
if test -n "$export_symbols_regex"; then
- $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
$run eval '$mv "$nlist"T "$nlist"'
fi
@@ -2542,9 +4197,9 @@ extern \"C\" {
if test -z "$export_symbols"; then
export_symbols="$output_objdir/$output.exp"
$run $rm $export_symbols
- $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
else
- $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
$run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
$run eval 'mv "$nlist"T "$nlist"'
fi
@@ -2552,8 +4207,8 @@ extern \"C\" {
for arg in $dlprefiles; do
$show "extracting global C symbols from \`$arg'"
- name=`echo "$arg" | sed -e 's%^.*/%%'`
- $run eval 'echo ": $name " >> "$nlist"'
+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+ $run eval '$echo ": $name " >> "$nlist"'
$run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
done
@@ -2562,12 +4217,18 @@ extern \"C\" {
test -f "$nlist" || : > "$nlist"
if test -n "$exclude_expsyms"; then
- egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
$mv "$nlist"T "$nlist"
fi
# Try sorting and uniquifying the output.
- if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+ if grep -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
:
else
grep -v "^: " < "$nlist" > "$nlist"S
@@ -2576,7 +4237,7 @@ extern \"C\" {
if test -f "$nlist"S; then
eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
else
- echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
fi
$echo >> "$output_objdir/$dlsyms" "\
@@ -2584,27 +4245,25 @@ extern \"C\" {
#undef lt_preloaded_symbols
#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
+# define lt_ptr void *
#else
-# define lt_ptr_t char *
+# define lt_ptr char *
# define const
#endif
/* The mapping between symbol names and symbols. */
const struct {
const char *name;
- lt_ptr_t address;
+ lt_ptr address;
}
lt_preloaded_symbols[] =
{\
"
- sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \
- -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \
- < "$nlist" >> "$output_objdir/$dlsyms"
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
$echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr_t) 0}
+ {0, (lt_ptr) 0}
};
/* This works around a problem in FreeBSD linker */
@@ -2621,27 +4280,27 @@ static const void *lt_preloaded_setup() {
fi
pic_flag_for_symtable=
- case "$host" in
+ case $host in
# compiling the symbol table file with pic_flag works around
# a FreeBSD bug that causes programs to crash when -lm is
# linked before any other PIC object. But we must not use
# pic_flag when linking with -static. The problem exists in
# FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
- *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
case "$compile_command " in
*" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
esac;;
*-*-hpux*)
case "$compile_command " in
*" -static "*) ;;
- *) pic_flag_for_symtable=" $pic_flag -DPIC";;
+ *) pic_flag_for_symtable=" $pic_flag";;
esac
esac
# Now compile the dynamic symbol file.
- $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
- $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
# Clean up the generated files.
$show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
@@ -2666,7 +4325,7 @@ static const void *lt_preloaded_setup() {
finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
fi
- if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
# Replace the output file specification.
compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
link_command="$compile_command$compile_rpath"
@@ -2675,7 +4334,7 @@ static const void *lt_preloaded_setup() {
$show "$link_command"
$run eval "$link_command"
status=$?
-
+
# Delete the generated files.
if test -n "$dlsyms"; then
$show "$rm $output_objdir/${outputname}S.${objext}"
@@ -2689,7 +4348,7 @@ static const void *lt_preloaded_setup() {
# We should set the shlibpath_var
rpath=
for dir in $temp_rpath; do
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*)
# Absolute path.
rpath="$rpath$dir:"
@@ -2731,11 +4390,24 @@ static const void *lt_preloaded_setup() {
fi
fi
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit 0
+ fi
+
if test "$hardcode_action" = relink; then
# Fast installation is not supported
link_command="$compile_var$compile_command$compile_rpath"
relink_command="$finalize_var$finalize_command$finalize_rpath"
-
+
$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
$echo "$modename: \`$output' will be relinked during installation" 1>&2
else
@@ -2755,7 +4427,7 @@ static const void *lt_preloaded_setup() {
# Replace the output file specification.
link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
+
# Delete the old output files.
$run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
@@ -2767,12 +4439,24 @@ static const void *lt_preloaded_setup() {
# Quote the relink command for shipping.
if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
fi
# Quote $echo for shipping.
if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case "$0" in
+ case $0 in
[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
esac
@@ -2786,7 +4470,227 @@ static const void *lt_preloaded_setup() {
# win32 will think the script is a binary if it has
# a .exe suffix, so we strip it off here.
case $output in
- *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ cwrappersource=`$echo ${objdir}/lt-${output}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15
+
+ cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+EOF
+
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha (name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+ size_t size;
+ char *p;
+ char tmp[LT_PATHMAX + 1];
+
+ assert(path != NULL);
+
+ /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
+#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
+
+ /* prepend the current directory */
+ /* doesn't handle '~' */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
esac
$rm $output
trap "$rm $output; exit 1" 1 2 15
@@ -2805,7 +4709,7 @@ static const void *lt_preloaded_setup() {
# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed='${SED} -e 1s/^X//'
sed_quote_subst='$sed_quote_subst'
# The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -2817,7 +4721,7 @@ relink_command=\"$relink_command\"
# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
# install mode needs the following variable:
- link_against_libtool_libs='$link_against_libtool_libs'
+ notinst_deplibs='$notinst_deplibs'
else
# When we are sourced in execute mode, \$file and \$echo are already set.
if test \"\$libtool_execute_magic\" != \"$magic\"; then
@@ -2843,20 +4747,20 @@ else
test \"x\$thisdir\" = \"x\$file\" && thisdir=.
# Follow symbolic links until we get to the real thisdir.
- file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
while test -n \"\$file\"; do
destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
# If there was a directory component, then change thisdir.
if test \"x\$destdir\" != \"x\$file\"; then
case \"\$destdir\" in
- [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
*) thisdir=\"\$thisdir/\$destdir\" ;;
esac
fi
file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
- file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
done
# Try to get the absolute directory name.
@@ -2865,12 +4769,12 @@ else
"
if test "$fast_install" = yes; then
- echo >> $output "\
- program=lt-'$outputname'
+ $echo >> $output "\
+ program=lt-'$outputname'$exeext
progdir=\"\$thisdir/$objdir\"
-
+
if test ! -f \"\$progdir/\$program\" || \\
- { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
test \"X\$file\" != \"X\$progdir/\$program\"; }; then
file=\"\$\$-\$program\"
@@ -2881,12 +4785,13 @@ else
$rm \"\$progdir/\$file\"
fi"
- echo >> $output "\
+ $echo >> $output "\
# relink executable if necessary
if test -n \"\$relink_command\"; then
- if (cd \"\$thisdir\" && eval \$relink_command); then :
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
else
+ $echo \"\$relink_command_output\" >&2
$rm \"\$progdir/\$file\"
exit 1
fi
@@ -2898,13 +4803,13 @@ else
$rm \"\$progdir/\$file\"
fi"
else
- echo >> $output "\
+ $echo >> $output "\
program='$outputname'
progdir=\"\$thisdir/$objdir\"
"
fi
- echo >> $output "\
+ $echo >> $output "\
if test -f \"\$progdir/\$program\"; then"
@@ -2935,14 +4840,6 @@ else
# Run the actual program with our arguments.
"
case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin*)
- $echo >> $output "\
- exec \$progdir/\$program \${1+\"\$@\"}
-"
- ;;
-
# Backslashes separate directories on plain windows
*-*-mingw | *-*-os2*)
$echo >> $output "\
@@ -2952,11 +4849,7 @@ else
*)
$echo >> $output "\
- # Export the path to the program.
- PATH=\"\$progdir:\$PATH\"
- export PATH
-
- exec \$program \${1+\"\$@\"}
+ exec \$progdir/\$program \${1+\"\$@\"}
"
;;
esac
@@ -2968,7 +4861,7 @@ else
# The program doesn't exist.
\$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
\$echo \"This script is just a wrapper for \$program.\" 1>&2
- echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
exit 1
fi
fi\
@@ -2991,7 +4884,7 @@ fi\
oldobjs="$libobjs_save"
build_libtool_libs=no
else
- oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+ oldobjs="$old_deplibs $non_pic_objects"
fi
addlibs="$old_convenience"
fi
@@ -3000,18 +4893,18 @@ fi\
gentop="$output_objdir/${outputname}x"
$show "${rm}r $gentop"
$run ${rm}r "$gentop"
- $show "mkdir $gentop"
- $run mkdir "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
status=$?
- if test $status -ne 0 && test ! -d "$gentop"; then
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
exit $status
fi
generated="$generated $gentop"
-
+
# Add in members from convenience archives.
for xlib in $addlibs; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -3020,14 +4913,40 @@ fi\
$show "${rm}r $xdir"
$run ${rm}r "$xdir"
- $show "mkdir $xdir"
- $run mkdir "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
status=$?
- if test $status -ne 0 && test ! -d "$xdir"; then
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
exit $status
fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
$show "(cd $xdir && $AR x $xabs)"
$run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
done
@@ -3037,27 +4956,67 @@ fi\
if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
eval cmds=\"$old_archive_from_new_cmds\"
else
- # Ensure that we have .o objects in place in case we decided
- # not to build a shared library, and have fallen back to building
- # static libs even though --disable-static was passed!
- for oldobj in $oldobjs; do
- if test ! -f $oldobj; then
- xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$xdir" = "X$oldobj"; then
- xdir="."
+ eval cmds=\"$old_archive_cmds\"
+
+ if len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # the command line is too long to link in one step, link in parts
+ $echo "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+ # encoded into archives. This makes 'ar r' malfunction in
+ # this piecewise linking case whenever conflicting object
+ # names appear in distinct ar calls; check, warn and compensate.
+ if (for obj in $save_oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+ $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+ AR_FLAGS=cq
+ fi
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
else
- xdir="$xdir"
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
fi
- baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
- obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
- $show "(cd $xdir && ${LN_S} $obj $baseobj)"
- $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~$old_archive_cmds\"
fi
- done
-
- eval cmds=\"$old_archive_cmds\"
+ fi
fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3072,19 +5031,26 @@ fi\
fi
# Now create the libtool archive.
- case "$output" in
+ case $output in
*.la)
old_library=
test "$build_old_libs" = yes && old_library="$libname.$libext"
$show "creating $output"
- if test -n "$xrpath"; then
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- done
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
# Only create the output if not a dry run.
if test -z "$run"; then
@@ -3094,8 +5060,52 @@ fi\
break
fi
output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
fi
$rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
$echo > $output "\
# $outputname - a libtool library file
# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
@@ -3104,7 +5114,7 @@ fi\
# It is necessary for linking the library.
# The name that we can dlopen(3).
-dlname='$dlname'
+dlname='$tdlname'
# Names of this library.
library_names='$library_names'
@@ -3123,16 +5133,26 @@ revision=$revision
# Is this an already installed library?
installed=$installed
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
# Directory that this library needs to be installed in:
-libdir='$install_libdir'\
-"
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
done
fi
# Do a symbolic link so that the libtool archive can be found in
# LD_LIBRARY_PATH before the program is installed.
$show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
;;
esac
exit 0
@@ -3144,10 +5164,12 @@ libdir='$install_libdir'\
# There may be an optional sh(1) argument at the beginning of
# install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
# Aesthetically quote it.
arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3163,7 +5185,7 @@ libdir='$install_libdir'\
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3186,7 +5208,7 @@ libdir='$install_libdir'\
continue
fi
- case "$arg" in
+ case $arg in
-d) isdir=yes ;;
-f) prev="-f" ;;
-g) prev="-g" ;;
@@ -3211,7 +5233,7 @@ libdir='$install_libdir'\
# Aesthetically quote the argument.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3256,17 +5278,17 @@ libdir='$install_libdir'\
# Not a directory, so check to see that there is only one file specified.
set dummy $files
- if test $# -gt 2; then
+ if test "$#" -gt 2; then
$echo "$modename: \`$dest' is not a directory" 1>&2
$echo "$help" 1>&2
exit 1
fi
fi
- case "$destdir" in
+ case $destdir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
for file in $files; do
- case "$file" in
+ case $file in
*.lo) ;;
*)
$echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
@@ -3288,15 +5310,15 @@ libdir='$install_libdir'\
for file in $files; do
# Do each installation.
- case "$file" in
- *.a | *.lib)
+ case $file in
+ *.$libext)
# Do the static libraries later.
staticlibs="$staticlibs $file"
;;
*.la)
# Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
else
$echo "$modename: \`$file' is not a valid libtool archive" 1>&2
$echo "$help" 1>&2
@@ -3305,8 +5327,9 @@ libdir='$install_libdir'\
library_names=
old_library=
+ relink_command=
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3325,10 +5348,41 @@ libdir='$install_libdir'\
esac
fi
- dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
test "X$dir" = "X$file/" && dir=
dir="$dir$objdir"
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ exit 1
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ exit 1
+ fi
+ fi
+
# See the names of the shared library.
set dummy $library_names
if test -n "$2"; then
@@ -3336,11 +5390,18 @@ libdir='$install_libdir'\
shift
shift
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
# Install the shared library and build the symlinks.
- $show "$install_prog $dir/$realname $destdir/$realname"
- $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
- if test $# -gt 0; then
+ if test "$#" -gt 0; then
# Delete the old symlinks, and create new ones.
for linkname
do
@@ -3354,7 +5415,7 @@ libdir='$install_libdir'\
# Do each command in the postinstall commands.
lib="$destdir/$realname"
eval cmds=\"$postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3385,11 +5446,11 @@ libdir='$install_libdir'\
fi
# Deduce the name of the destination old-style object file.
- case "$destfile" in
+ case $destfile in
*.lo)
staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
;;
- *.o | *.obj)
+ *.$objext)
staticdest="$destfile"
destfile=
;;
@@ -3426,41 +5487,83 @@ libdir='$install_libdir'\
destfile="$destdir/$destfile"
fi
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
# Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- link_against_libtool_libs=
+ case $host in
+ *cygwin*|*mingw*)
+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+ notinst_deplibs=
relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
# If there is no directory component, then add one.
- case "$file" in
- */* | *\\*) . $file ;;
- *) . ./$file ;;
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
esac
# Check the variables that should have been set.
- if test -z "$link_against_libtool_libs"; then
- $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
+ if test -z "$notinst_deplibs"; then
+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
exit 1
fi
finalize=yes
- for lib in $link_against_libtool_libs; do
+ for lib in $notinst_deplibs; do
# Check to see that each library is installed.
libdir=
if test -f "$lib"; then
# If there is no directory component, then add one.
- case "$lib" in
+ case $lib in
*/* | *\\*) . $lib ;;
*) . ./$lib ;;
esac
fi
- libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
if test -n "$libdir" && test ! -f "$libfile"; then
$echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
finalize=no
fi
done
+ relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
outputname=
if test "$fast_install" = no && test -n "$relink_command"; then
if test "$finalize" = yes && test -z "$run"; then
@@ -3472,6 +5575,7 @@ libdir='$install_libdir'\
$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
continue
fi
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
outputname="$tmpdir/$file"
# Replace the output file specification.
relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
@@ -3489,10 +5593,27 @@ libdir='$install_libdir'\
fi
else
# Install the binary that we compiled earlier.
- file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
fi
fi
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
$show "$install_prog$stripme $file $destfile"
$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
test -n "$outputname" && ${rm}r "$tmpdir"
@@ -3509,9 +5630,14 @@ libdir='$install_libdir'\
$show "$install_prog $file $oldlib"
$run eval "$install_prog \$file \$oldlib" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
# Do each command in the postinstall commands.
eval cmds=\"$old_postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3527,11 +5653,10 @@ libdir='$install_libdir'\
if test -n "$current_libdirs"; then
# Maybe just do a dry run.
test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec $SHELL $0 --finish$current_libdirs
- exit 1
+ exec_cmd='$SHELL $0 --finish$current_libdirs'
+ else
+ exit 0
fi
-
- exit 0
;;
# libtool finish mode
@@ -3550,7 +5675,7 @@ libdir='$install_libdir'\
if test -n "$finish_cmds"; then
# Do each command in the finish commands.
eval cmds=\"$finish_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3571,40 +5696,40 @@ libdir='$install_libdir'\
# Exit here if they wanted silent mode.
test "$show" = : && exit 0
- echo "----------------------------------------------------------------------"
- echo "Libraries have been installed in:"
+ $echo "----------------------------------------------------------------------"
+ $echo "Libraries have been installed in:"
for libdir in $libdirs; do
- echo " $libdir"
+ $echo " $libdir"
done
- echo
- echo "If you ever happen to want to link against installed libraries"
- echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use \`-LLIBDIR'"
- echo "flag during linking and do at least one of the following:"
+ $echo
+ $echo "If you ever happen to want to link against installed libraries"
+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $echo "flag during linking and do at least one of the following:"
if test -n "$shlibpath_var"; then
- echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
- echo " during execution"
+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $echo " during execution"
fi
if test -n "$runpath_var"; then
- echo " - add LIBDIR to the \`$runpath_var' environment variable"
- echo " during linking"
+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ $echo " during linking"
fi
if test -n "$hardcode_libdir_flag_spec"; then
libdir=LIBDIR
eval flag=\"$hardcode_libdir_flag_spec\"
- echo " - use the \`$flag' linker flag"
+ $echo " - use the \`$flag' linker flag"
fi
if test -n "$admincmds"; then
- echo " - have your system administrator run these commands:$admincmds"
+ $echo " - have your system administrator run these commands:$admincmds"
fi
if test -f /etc/ld.so.conf; then
- echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
fi
- echo
- echo "See any operating system documentation about shared libraries for"
- echo "more information, such as the ld(1) and ld.so(8) manual pages."
- echo "----------------------------------------------------------------------"
+ $echo
+ $echo "See any operating system documentation about shared libraries for"
+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ $echo "----------------------------------------------------------------------"
exit 0
;;
@@ -3629,10 +5754,10 @@ libdir='$install_libdir'\
fi
dir=
- case "$file" in
+ case $file in
*.la)
# Check to see that this really is a libtool archive.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
else
$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
$echo "$help" 1>&2
@@ -3644,7 +5769,7 @@ libdir='$install_libdir'\
library_names=
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3699,13 +5824,13 @@ libdir='$install_libdir'\
args=
for file
do
- case "$file" in
+ case $file in
-*) ;;
*)
# Do a test to see if this is really a libtool program.
- if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3722,11 +5847,11 @@ libdir='$install_libdir'\
if test -z "$run"; then
if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
fi
- # Restore saved enviroment variables
+ # Restore saved environment variables
if test "${save_LC_ALL+set}" = set; then
LC_ALL="$save_LC_ALL"; export LC_ALL
fi
@@ -3734,31 +5859,35 @@ libdir='$install_libdir'\
LANG="$save_LANG"; export LANG
fi
- # Now actually exec the command.
- eval "exec \$cmd$args"
-
- $echo "$modename: cannot exec \$cmd$args"
- exit 1
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
else
# Display what would be done.
if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
fi
$echo "$cmd$args"
exit 0
fi
;;
- # libtool uninstall mode
- uninstall)
- modename="$modename: uninstall"
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
rm="$nonopt"
files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
for arg
do
- case "$arg" in
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
-*) rm="$rm $arg" ;;
*) files="$files $arg" ;;
esac
@@ -3770,72 +5899,155 @@ libdir='$install_libdir'\
exit 1
fi
+ rmdirs=
+
+ origobjdir="$objdir"
for file in $files; do
dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
rmfiles="$file"
- case "$name" in
+ case $name in
*.la)
# Possibly a libtool archive, so verify it.
- if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
. $dir/$name
# Delete the libtool libraries and symlinks.
for n in $library_names; do
- rmfiles="$rmfiles $dir/$n"
+ rmfiles="$rmfiles $objdir/$n"
done
- test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
-
- $show "$rm $rmfiles"
- $run $rm $rmfiles
-
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+ if test "$mode" = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ eval cmds=\"$postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
- fi
+ fi
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ eval cmds=\"$old_postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
fi
-
- # FIXME: should reinstall the best remaining shared library.
fi
;;
*.lo)
- if test "$build_old_libs" = yes; then
- oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
- rmfiles="$rmfiles $dir/$oldobj"
+ # Possibly a libtool object, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+ # Read the .lo file
+ . $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" \
+ && test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" \
+ && test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
fi
- $show "$rm $rmfiles"
- $run $rm $rmfiles
;;
*)
- $show "$rm $rmfiles"
- $run $rm $rmfiles
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$noexename
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
;;
esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
done
- exit 0
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
;;
"")
@@ -3845,13 +6057,20 @@ libdir='$install_libdir'\
;;
esac
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ fi
fi # test -z "$show_help"
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit 1
+fi
+
# We need to display help for each of the modes.
-case "$mode" in
+case $mode in
"") $echo \
"Usage: $modename [OPTION]... [MODE-ARG]...
@@ -3866,10 +6085,12 @@ Provide generalized library-building support services.
--mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
--quiet same as \`--silent'
--silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
--version print version information
MODE must be one of the following:
+ clean remove files from the build directory
compile compile a source file into a libtool object
execute automatically set library path, then run a program
finish complete the installation of libtool libraries
@@ -3878,10 +6099,26 @@ MODE must be one of the following:
uninstall remove libraries from an installed directory
MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool@gnu.org>."
exit 0
;;
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
compile)
$echo \
"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
@@ -3891,6 +6128,8 @@ Compile a source file into a libtool library object.
This mode accepts the following additional options:
-o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
-static always build a \`.o' file suitable for static linking
COMPILE-COMMAND is a command to be used in creating a \`standard' object file
@@ -3970,8 +6209,11 @@ The following components of LINK-COMMAND are treated specially:
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
-no-undefined declare that a library does not refer to external symbols
-o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
-release RELEASE specify package release information
-rpath LIBDIR the created library will eventually be installed in LIBDIR
-R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
@@ -4017,13 +6259,32 @@ Otherwise, only FILE itself is deleted using RM."
;;
esac
-echo
+$echo
$echo "Try \`$modename --help' for more information about other modes."
exit 0
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
# Local Variables:
# mode:shell-script
# sh-indentation:2
# End:
-#! /bin/bash
diff --git a/db/dist/pubdef.in b/db/dist/pubdef.in
index f42363022..5c028a20b 100644
--- a/db/dist/pubdef.in
+++ b/db/dist/pubdef.in
@@ -21,6 +21,7 @@ DB_AM_ENCRYPT * I *
DB_AM_FIXEDLEN * I *
DB_AM_INMEM * I *
DB_AM_IN_RENAME * I *
+DB_AM_NOT_DURABLE * I *
DB_AM_OPEN_CALLED * I *
DB_AM_PAD * I *
DB_AM_PGDEF * I *
@@ -28,6 +29,7 @@ DB_AM_RDONLY * I *
DB_AM_RECNUM * I *
DB_AM_RECOVER * I *
DB_AM_RENUMBER * I *
+DB_AM_REPLICATION * I *
DB_AM_REVSPLITOFF * I *
DB_AM_SECONDARY * I *
DB_AM_SNAPSHOT * I *
@@ -39,6 +41,7 @@ DB_APPEND D I J
DB_ARCH_ABS D I J
DB_ARCH_DATA D I J
DB_ARCH_LOG D I J
+DB_ARCH_REMOVE D I J
DB_AUTO_COMMIT D I J
DB_BEFORE D I J
DB_BTREE D I C
@@ -47,9 +50,7 @@ DB_BTREEOLDVER * I *
DB_BTREEVERSION * I *
DB_CACHED_COUNTS * I J
DB_CDB_ALLDB D I J
-DB_CHKSUM_SHA1 D I J
-DB_CLIENT D I J
-DB_COMMIT * I *
+DB_CHKSUM D I J
DB_CONFIG D * *
DB_CONSUME D I J
DB_CONSUME_WAIT D I J
@@ -65,7 +66,7 @@ DB_DBT_PARTIAL D I J
DB_DBT_REALLOC D I J
DB_DBT_USERMEM D I J
DB_DELETED * I *
-DB_DIRECT D I J
+DB_DIRECT D I *
DB_DIRECT_DB D I J
DB_DIRECT_LOG D I J
DB_DIRTY_READ D I J
@@ -85,6 +86,7 @@ DB_ENV_DIRECT_DB * I *
DB_ENV_DIRECT_LOG * I *
DB_ENV_FATAL * I *
DB_ENV_LOCKDOWN * I *
+DB_ENV_LOG_AUTOREMOVE * I *
DB_ENV_NOLOCKING * I *
DB_ENV_NOMMAP * I *
DB_ENV_NOPANIC * I *
@@ -92,20 +94,20 @@ DB_ENV_OPEN_CALLED * I *
DB_ENV_OVERWRITE * I *
DB_ENV_PRIVATE * I *
DB_ENV_REGION_INIT * I *
-DB_ENV_REP_CLIENT * I *
-DB_ENV_REP_LOGSONLY * I *
-DB_ENV_REP_MASTER * I *
DB_ENV_RPCCLIENT * I *
DB_ENV_RPCCLIENT_GIVEN * I *
DB_ENV_SYSTEM_MEM * I *
DB_ENV_THREAD * I *
+DB_ENV_TIME_NOTGRANTED * I *
DB_ENV_TXN_NOSYNC * I *
+DB_ENV_TXN_NOT_DURABLE * I *
DB_ENV_TXN_WRITE_NOSYNC * I *
DB_ENV_YIELDCPU * I *
DB_EXCL D I J
DB_EXTENT * I *
DB_FAST_STAT D I J
DB_FCNTL_LOCKING * I *
+DB_FILEOPEN D I C
DB_FILE_ID_LEN * I *
DB_FIRST D I J
DB_FLUSH D I J
@@ -124,8 +126,8 @@ DB_INIT_CDB D I J
DB_INIT_LOCK D I J
DB_INIT_LOG D I J
DB_INIT_MPOOL D I J
+DB_INIT_REP D I J
DB_INIT_TXN D I J
-DB_JAVA_CALLBACK * I *
DB_JOINENV D I J
DB_JOIN_ITEM D I J
DB_JOIN_NOSORT D I J
@@ -141,7 +143,6 @@ DB_LOCK_DEFAULT D I J
DB_LOCK_DIRTY * I *
DB_LOCK_DUMP * I *
DB_LOCK_EXPIRE D I J
-DB_LOCK_FREE_LOCKER * I *
DB_LOCK_GET D I J
DB_LOCK_GET_TIMEOUT D I J
DB_LOCK_INHERIT * I *
@@ -180,9 +181,16 @@ DB_LOGFILEID_INVALID * I *
DB_LOGMAGIC * I *
DB_LOGOLDVER * I *
DB_LOGVERSION * I *
+DB_LOG_AUTOREMOVE D I J
+DB_LOG_CHKPNT * I *
+DB_LOG_COMMIT * I *
DB_LOG_DISK * I *
DB_LOG_LOCKED * I *
+DB_LOG_NOCOPY * I *
+DB_LOG_NOT_DURABLE * I *
+DB_LOG_PERM * I *
DB_LOG_SILENT_ERR * I *
+DB_LOG_WRNOSYNC * I *
DB_LSTAT_ABORTED * I *
DB_LSTAT_ERR * I *
DB_LSTAT_EXPIRED * I *
@@ -199,6 +207,8 @@ DB_MPOOL_DIRTY D I *
DB_MPOOL_DISCARD D I *
DB_MPOOL_LAST D I *
DB_MPOOL_NEW D I *
+DB_MPOOL_NOFILE D I J
+DB_MPOOL_UNLINK * I *
DB_MULTIPLE D I J
DB_MULTIPLE_INIT D I *
DB_MULTIPLE_KEY D I J
@@ -209,7 +219,6 @@ DB_NEEDSPLIT * I *
DB_NEXT D I J
DB_NEXT_DUP D I J
DB_NEXT_NODUP D I J
-DB_NOCOPY * I *
DB_NODUPDATA D I J
DB_NOLOCKING D I J
DB_NOMMAP D I J
@@ -221,7 +230,8 @@ DB_NOSERVER_HOME D I C
DB_NOSERVER_ID D I C
DB_NOSYNC D I J
DB_NOTFOUND D I C
-DB_ODDFILESIZE D I J
+DB_NO_AUTO_COMMIT * I *
+DB_ODDFILESIZE D I *
DB_OK_BTREE * I *
DB_OK_HASH * I *
DB_OK_QUEUE * I *
@@ -233,9 +243,7 @@ DB_OVERWRITE D I J
DB_PAGE_LOCK * I *
DB_PAGE_NOTFOUND D I C
DB_PANIC_ENVIRONMENT D I J
-DB_PERMANENT * I *
DB_POSITION D I J
-DB_POSITIONI * I *
DB_PREV D I J
DB_PREV_NODUP D I J
DB_PRINTABLE D I J
@@ -265,17 +273,23 @@ DB_REGION_MAGIC * I *
DB_RENAMEMAGIC * I *
DB_RENUMBER D I J
DB_REP_CLIENT D I J
+DB_REP_CREATE * I *
DB_REP_DUPMASTER D I C
+DB_REP_HANDLE_DEAD D I C
DB_REP_HOLDELECTION D I C
+DB_REP_ISPERM D I J
DB_REP_LOGSONLY D I J
DB_REP_MASTER D I J
DB_REP_NEWMASTER D I C
DB_REP_NEWSITE D I C
+DB_REP_NOBUFFER D I J
+DB_REP_NOTPERM D I J
DB_REP_OUTDATED D I C
DB_REP_PERMANENT D I J
DB_REP_UNAVAIL D I J
DB_REVSPLITOFF D I J
DB_RMW D I J
+DB_RPCCLIENT D I J
DB_RUNRECOVERY D I C
DB_SALVAGE D I J
DB_SECONDARY_BAD D I C
@@ -291,11 +305,6 @@ DB_SURPRISE_KID * I *
DB_SWAPBYTES * I *
DB_SYSTEM_MEM D I J
DB_TEST_ELECTINIT * I *
-DB_TEST_ELECTSEND * I *
-DB_TEST_ELECTVOTE1 * I *
-DB_TEST_ELECTVOTE2 * I *
-DB_TEST_ELECTWAIT1 * I *
-DB_TEST_ELECTWAIT2 * I *
DB_TEST_POSTDESTROY * I *
DB_TEST_POSTLOG * I *
DB_TEST_POSTLOGMETA * I *
@@ -306,6 +315,7 @@ DB_TEST_PREOPEN * I *
DB_TEST_SUBDB_LOCKS * I *
DB_THREAD D I J
DB_TIMEOUT * I *
+DB_TIME_NOTGRANTED D I J
DB_TRUNCATE D I J
DB_TXNVERSION * I *
DB_TXN_ABORT D I C
@@ -315,8 +325,8 @@ DB_TXN_BACKWARD_ROLL D I C
DB_TXN_CKP * I *
DB_TXN_FORWARD_ROLL D I C
DB_TXN_GETPGNOS * I *
-DB_TXN_LOCK * I *
DB_TXN_NOSYNC D I J
+DB_TXN_NOT_DURABLE D I J
DB_TXN_NOWAIT D I J
DB_TXN_OPENFILES * I *
DB_TXN_POPENFILES * I *
@@ -344,7 +354,6 @@ DB_VERSION_STRING * I *
DB_WRITECURSOR D I J
DB_WRITELOCK * I *
DB_WRITEOPEN * I *
-DB_WRNOSYNC * I *
DB_XA_CREATE D I J
DB_XIDDATASIZE D I J
DB_YIELDCPU D I J
diff --git a/db/dist/s_all b/db/dist/s_all
index dab6c7591..02686b742 100644
--- a/db/dist/s_all
+++ b/db/dist/s_all
@@ -1,16 +1,21 @@
#!/bin/sh -
-# $Id: s_all,v 1.7 2000/12/22 15:35:32 bostic Exp $
+# $Id: s_all,v 1.11 2002/10/30 15:26:36 bostic Exp $
sh s_perm # permissions.
sh s_symlink # symbolic links.
+sh s_readme # distribution README file.
+
+#
+# The following order is important, s_include must run last.
+#
sh s_config # autoconf.
-sh s_readme # db/README file.
sh s_recover # logging/recovery files.
sh s_rpc # RPC files.
sh s_include # standard include files.
+
sh s_win32 # Win32 include files.
sh s_win32_dsp # Win32 build environment.
sh s_vxworks # VxWorks include files.
sh s_java # Java support.
-sh s_tcl # Tcl support.
+sh s_test # Test suite support.
sh s_tags # Tags files.
diff --git a/db/dist/s_config b/db/dist/s_config
index 870109c38..604a1d089 100755
--- a/db/dist/s_config
+++ b/db/dist/s_config
@@ -1,37 +1,35 @@
#!/bin/sh -
-# $Id: s_config,v 1.3 2000/07/13 18:38:46 bostic Exp $
+# $Id: s_config,v 1.13 2003/07/02 15:27:44 bostic Exp $
#
# Build the autoconfiguration files.
-msgm4="dnl DO NOT EDIT: automatically built by dist/s_config."
+trap 'rm -f aclocal.m4 ; exit 0' 0 1 2 3 13 15
. ./RELEASE
-echo "Building aclocal.m4"
-rm -f aclocal.m4
-(echo "$msgm4" &&
- echo "AC_DEFUN(AM_VERSION_SET, [" &&
- echo "AC_SUBST(DB_VERSION_MAJOR)" &&
- echo "DB_VERSION_MAJOR=$DB_VERSION_MAJOR" &&
- echo "AC_SUBST(DB_VERSION_MINOR)" &&
- echo "DB_VERSION_MINOR=$DB_VERSION_MINOR" &&
- echo "AC_SUBST(DB_VERSION_PATCH)" &&
- echo "DB_VERSION_PATCH=$DB_VERSION_PATCH" &&
- echo "AC_SUBST(DB_VERSION_STRING)" &&
- echo "DB_VERSION_STRING=\"\\\"$DB_VERSION_STRING\\\"\"" &&
- echo "])dnl" &&
- cat aclocal/*.m4) > aclocal.m4
-chmod 444 aclocal.m4
+echo "autoconf: building aclocal.m4..."
+cat aclocal/*.ac aclocal_java/*.ac > aclocal.m4
+echo "autoconf: running autoheader to build config.hin..."
rm -f config.hin
-echo "Building config.hin (autoheader)"
-(autoheader configure.in > config.hin) 2>&1 | \
- sed '/warning: AC_TRY_RUN called without default/d'
+autoheader
chmod 444 config.hin
+echo "autoconf: running autoconf to build configure"
rm -f configure
-echo "Building configure (autoconf)"
-autoconf 2>&1 | sed '/warning: AC_TRY_RUN called without default/d'
+autoconf
-chmod 555 configure config.guess config.sub install-sh
-rm -f aclocal.m4
+# Edit version information we couldn't pre-compute.
+(echo "1,\$s/__EDIT_DB_VERSION_MAJOR__/$DB_VERSION_MAJOR/g" &&
+ echo "1,\$s/__EDIT_DB_VERSION_MINOR__/$DB_VERSION_MINOR/g" &&
+ echo "1,\$s/__EDIT_DB_VERSION_PATCH__/$DB_VERSION_PATCH/g" &&
+ echo "1,\$s/__EDIT_DB_VERSION_STRING__/$DB_VERSION_STRING/g" &&
+ echo "1,\$s/__EDIT_DB_VERSION_UNIQUE_NAME__/$DB_VERSION_UNIQUE_NAME/g" &&
+ echo "1,\$s/__EDIT_DB_VERSION__/$DB_VERSION/g" &&
+ echo "w" &&
+ echo "q") | ed configure
+
+rm -rf autom4te.cache
+chmod 555 configure
+
+chmod 555 config.guess config.sub install-sh
diff --git a/db/dist/s_crypto b/db/dist/s_crypto
index 3597f614d..05a93043a 100644
--- a/db/dist/s_crypto
+++ b/db/dist/s_crypto
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: s_crypto,v 11.2 2002/03/26 23:07:52 bostic Exp
+# $Id: s_crypto,v 11.8 2003/11/24 22:41:26 bostic Exp $
# Remove crypto from the DB source tree.
@@ -15,31 +15,45 @@ if ! test -d $d/crypto; then
fi
# Remove the crypto.
-rm -rf $d/crypto # Remove the crypto.
+rm -rf $d/crypto
+
+# Update the release splash page.
+f=$d/docs/index.html
+chmod 664 $f
+(echo '/DOES/' &&
+ echo 's/DOES/DOES NOT/' &&
+ echo 'w' &&
+ echo 'q') | ed $f
# Win/32.
+f=win_config.in
+chmod 664 $f
(echo '/#define.HAVE_CRYPTO/' &&
echo 'c' &&
echo '/* #undef HAVE_CRYPTO */'
echo '.' &&
echo 'w' &&
- echo 'q') | ed $d/build_win32/db_config.h
+ echo 'q') | ed $f
-(echo '1,$s/^\(^crypto[^ ]* *\)\(.*\)/\1skip/' &&
+f=srcfiles.in
+chmod 664 $f
+(echo 'g/^crypto\//d' &&
+ echo '/crypto_stub\.c/' &&
+ echo 's/small/dynamic small static vx/' &&
echo 'w' &&
- echo 'q') | ed ./srcfiles.in
+ echo 'q') | ed $f
sh ./s_win32
sh ./s_win32_dsp
# VxWorks
+f=vx_config.in
+chmod 664 $f
(echo '/#define.HAVE_CRYPTO/' &&
echo 'c' &&
echo '/* #undef HAVE_CRYPTO */'
echo '.' &&
echo 'w' &&
- echo 'q') | ed $d/build_vxworks/db_config.h
+ echo 'q') | ed $f
- cp vx_2.0/filelist $t
- sed '/^crypto/d' < $t > vx_2.0/filelist
sh ./s_vxworks
diff --git a/db/dist/s_include b/db/dist/s_include
index fee6e5033..44bfce30e 100755
--- a/db/dist/s_include
+++ b/db/dist/s_include
@@ -1,33 +1,160 @@
#!/bin/sh -
-# $Id: s_include,v 1.7 2000/07/13 18:38:46 bostic Exp $
+# $Id: s_include,v 1.19 2002/03/27 04:31:50 bostic Exp $
#
# Build the automatically generated function prototype files.
msgc="/* DO NOT EDIT: automatically built by dist/s_include. */"
-cxx_if="#if defined(__cplusplus)"
-cxx_head="extern \"C\" {"
-cxx_foot="}"
-cxx_endif="#endif"
-
-tmp=/tmp/__db_inc.$$
-trap 'rm -f $tmp ; exit 0' 0 1 2 3 13 15
-
-for i in db btree clib common env hash \
- lock log mp mutex os qam rpc_client rpc_server tcl txn xa; do
- f=../include/${i}_ext.h
- (echo "$msgc" &&
- echo "#ifndef _${i}_ext_h_" &&
- echo "#define _${i}_ext_h_" &&
- echo "$cxx_if" &&
- echo "$cxx_head" &&
- echo "$cxx_endif" &&
- sed -n "s/^ \* PUBLIC:[ ]\(.*\)/\1/p" ../$i/*.c;
- [ $i = os ] &&
- sed -n "s/^ \* PUBLIC:[ ]\(.*\)/\1/p" ../os_win32/*.c;
- echo "$cxx_if" &&
- echo "$cxx_foot" &&
- echo "$cxx_endif" &&
- echo "#endif /* _${i}_ext_h_ */") > $tmp
- cmp $tmp $f > /dev/null 2>&1 ||
- (echo "Building $f" && rm -f $f && cp $tmp $f && chmod 444 $f)
+
+. ./RELEASE
+
+head()
+{
+ defonly=0
+ while :
+ do case "$1" in
+ space)
+ echo ""; shift;;
+ defonly)
+ defonly=1; shift;;
+ *)
+ name="$1"; break;;
+ esac
+ done
+
+ echo "$msgc"
+ echo "#ifndef $name"
+ echo "#define $name"
+ echo ""
+ if [ $defonly -eq 0 ]; then
+ echo "#if defined(__cplusplus)"
+ echo "extern \"C\" {"
+ echo "#endif"
+ echo ""
+ fi
+}
+
+tail()
+{
+ defonly=0
+ while :
+ do case "$1" in
+ defonly)
+ defonly=1; shift;;
+ *)
+ name="$1"; break;;
+ esac
+ done
+
+ echo ""
+ if [ $defonly -eq 0 ]; then
+ echo "#if defined(__cplusplus)"
+ echo "}"
+ echo "#endif"
+ fi
+ echo "#endif /* !$name */"
+}
+
+# We are building several files:
+# 1 external #define file
+# 1 external prototype file
+# 1 internal #define file
+# N internal prototype files
+e_dfile=/tmp/__db_c.$$
+e_pfile=/tmp/__db_a.$$
+i_dfile=/tmp/__db_d.$$
+i_pfile=/tmp/__db_b.$$
+trap 'rm -f $e_dfile $e_pfile $i_dfile $i_pfile; exit 0' 0 1 2 3 13 15
+
+head defonly space _DB_EXT_DEF_IN_ > $e_dfile
+head space _DB_EXT_PROT_IN_ > $e_pfile
+head defonly _DB_INT_DEF_IN_ > $i_dfile
+
+# Process the standard directories, creating per-directory prototype
+# files and adding to the external prototype and #define files.
+for i in db btree clib common crypto dbreg env fileops hash hmac \
+ lock log mp mutex os qam rep rpc_client rpc_server tcl txn xa; do
+ head "_${i}_ext_h_" > $i_pfile
+
+ f="../$i/*.c"
+ [ $i = os ] && f="$f ../os_win32/*.c"
+ [ $i = rpc_server ] && f="../$i/c/*.c"
+ [ $i = crypto ] && f="../$i/*.c ../$i/*/*.c"
+ awk -f gen_inc.awk \
+ -v db_version_unique_name=$DB_VERSION_UNIQUE_NAME \
+ -v e_dfile=$e_dfile \
+ -v e_pfile=$e_pfile \
+ -v i_dfile=$i_dfile \
+ -v i_pfile=$i_pfile $f
+
+ tail "_${i}_ext_h_" >> $i_pfile
+
+ f=../dbinc_auto/${i}_ext.h
+ cmp $i_pfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $i_pfile $f && chmod 444 $f)
done
+
+# Process directories which only add to the external prototype and #define
+# files.
+for i in dbm hsearch; do
+ f="../$i/*.c"
+ awk -f gen_inc.awk \
+ -v db_version_unique_name=$DB_VERSION_UNIQUE_NAME \
+ -v e_dfile=$e_dfile \
+ -v e_pfile=$e_pfile \
+ -v i_dfile="" \
+ -v i_pfile="" $f
+done
+
+# RPC uses rpcgen to generate a header file; post-process it to add more
+# interfaces to the internal #define file.
+sed -e '/extern bool_t xdr___/{' \
+ -e 's/.* //' \
+ -e 's/();//' \
+ -e 's/.*/#define & &@DB_VERSION_UNIQUE_NAME@/' \
+ -e 'p' \
+ -e '}' \
+ -e d < ../dbinc_auto/db_server.h >> $i_dfile
+
+# There are a few globals in DB -- add them to the external/internal
+# #define files.
+(echo "#define __db_global_values __db_global_values@DB_VERSION_UNIQUE_NAME@";
+ echo "#define __db_jump __db_jump@DB_VERSION_UNIQUE_NAME@") >> $i_dfile
+(echo "#define db_xa_switch db_xa_switch@DB_VERSION_UNIQUE_NAME@") >> $e_dfile
+
+# Wrap up the external #defines/prototypes, and internal #defines.
+tail defonly _DB_EXT_DEF_IN_ >> $e_dfile
+f=../dbinc_auto/ext_def.in
+cmp $e_dfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $e_dfile $f && chmod 444 $f)
+
+tail _DB_EXT_PROT_IN_ >> $e_pfile
+f=../dbinc_auto/ext_prot.in
+cmp $e_pfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $e_pfile $f && chmod 444 $f)
+
+tail defonly _DB_INT_DEF_IN_ >> $i_dfile
+f=../dbinc_auto/int_def.in
+cmp $i_dfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $i_dfile $f && chmod 444 $f)
+
+# DB185 compatibility support.
+head space defonly _DB_EXT_185_DEF_IN_ > $e_dfile
+head space _DB_EXT_185_PROT_IN_ > $e_pfile
+
+f="../db185/*.c"
+awk -f gen_inc.awk \
+ -v db_version_unique_name=$DB_VERSION_UNIQUE_NAME \
+ -v e_dfile=$e_dfile \
+ -v e_pfile=$e_pfile \
+ -v i_dfile="" \
+ -v i_pfile="" $f
+
+tail defonly _DB_EXT_185_DEF_IN_ >> $e_dfile
+f=../dbinc_auto/ext_185_def.in
+cmp $e_dfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $e_dfile $f && chmod 444 $f)
+
+tail _DB_EXT_185_PROT_IN_ >> $e_pfile
+f=../dbinc_auto/ext_185_prot.in
+cmp $e_pfile $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $e_pfile $f && chmod 444 $f)
diff --git a/db/dist/s_java b/db/dist/s_java
index f324678ab..c262a9397 100755
--- a/db/dist/s_java
+++ b/db/dist/s_java
@@ -1,31 +1,9 @@
#!/bin/sh -
-# $Id: s_java,v 1.3 2000/07/13 18:38:46 bostic Exp $
+# $Id: s_java,v 11.6 2003/11/07 14:39:26 bostic Exp $
#
# Build the Java files.
-msgcxx="// DO NOT EDIT: automatically built by dist/s_java."
-
-. RELEASE
-
-f=../java/src/com/sleepycat/db/DbConstants.java
-echo "Building $f"
-rm -f $f
-(echo "$msgcxx" && \
- echo &&
- echo 'package com.sleepycat.db;' &&
- echo &&
- echo 'public class DbConstants' &&
- echo '{' &&
- egrep '^#define.DB_' ../include/db.src | \
- sed -e '/"/d' \
- -e '/@DB_VERSION_/d' \
- -e '/DB_REDO/d' \
- -e '/DB_UNDO/d' \
- -e 's/[()]/ /g' \
- -e 's/\/\*/ /' | \
- awk '{ print "\tpublic static final int " $2 " = " $3 ";" }' &&
- echo " public static final int DB_VERSION_MAJOR = $DB_VERSION_MAJOR;" &&
- echo " public static final int DB_VERSION_MINOR = $DB_VERSION_MINOR;" &&
- echo " public static final int DB_VERSION_PATCH = $DB_VERSION_PATCH;" &&
- echo '}') > $f
-chmod 444 $f
+sh s_java_swig # Create core Java API with SWIG
+sh s_java_const # Create Java constants
+sh s_java_stat # Create Java stat methods
+sh s_java_camel # Camel-case the Java API.
diff --git a/db/dist/s_java_camel b/db/dist/s_java_camel
new file mode 100755
index 000000000..85f482fde
--- /dev/null
+++ b/db/dist/s_java_camel
@@ -0,0 +1,25 @@
+#!/bin/sh -
+
+if [ $# -ne 1 -o ! -f $1/dbinc/db.in ] ; then
+ DBDIR=..
+else
+ DBDIR=$1
+fi
+
+trap 'rm -rf $TMP; exit 0' 0 1 2 3 13 15
+TMP=./_tmp
+mkdir -p $TMP
+
+for f in $DBDIR/java/src/com/sleepycat/db/*.java ; do
+ a=`basename $f`
+ # echo "Creating new API call while deprecating the old: $a"
+ perl ./camelize.pl -d $f > $TMP/$a
+ mv -f $TMP/$a $f
+done
+
+for f in $DBDIR/java/src/com/sleepycat/db/*.java ; do
+ a=`basename $f`
+ # echo "Updating method calls to new API: $a"
+ perl ./camelize.pl -c $f > $TMP/$a
+ mv -f $TMP/$a $f
+done
diff --git a/db/dist/s_java_const b/db/dist/s_java_const
new file mode 100755
index 000000000..338bb13ec
--- /dev/null
+++ b/db/dist/s_java_const
@@ -0,0 +1,74 @@
+#!/bin/sh -
+# $Id: s_java_const,v 1.25 2003/09/04 23:59:03 bostic Exp $
+#
+# Build the Java files.
+
+msgjava="/* DO NOT EDIT: automatically built by dist/s_java_const. */"
+
+. RELEASE
+
+t=/tmp/__java
+trap 'rm -f $t; exit 0' 0 1 2 3 13 15
+
+# Build {debug,release}/DbConstants.java.
+for build in debug release ; do
+ isdebug=`echo $build | sed 's/debug/true/;s/release/false/'`
+ (echo "$msgjava" &&
+ echo &&
+ echo 'package com.sleepycat.db;' &&
+ echo &&
+ echo 'class DbConstants' &&
+ echo '{' &&
+ for i in `egrep '^DB_.*J$' pubdef.in | awk '{print $1}'`; do \
+ egrep -w "^#define[ ]$i|^[ ][ ]*$i" ../dbinc/db.in; \
+ done |
+ sed -e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/" \
+ -e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/" \
+ -e "s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/" \
+ -e 's/^#define[ ][ ]*//' \
+ -e 's/[()=,]/ /g' \
+ -e 's/\/\*/ /' | \
+ awk '{ print " static final int " $1 " = " $2 ";" }' &&
+ echo &&
+ echo " static final boolean DB_DEBUG = ${isdebug};"
+ echo '}' &&
+ echo &&
+ echo '// end of DbConstants.java') > $t
+
+ f=../java/src/com/sleepycat/db/$build/DbConstants.java
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+done
+
+# Build Db.java.
+f=../java/src/com/sleepycat/db/Db.java
+sed '/BEGIN-JAVA-SPECIAL-CONSTANTS/q' < $f > $t
+(echo " $msgjava" &&
+ for i in `egrep '^DB_.*C$' pubdef.in | awk '{print $1}'`; do \
+ egrep -w "^#define[ ]$i|^[ ][ ]*$i" ../dbinc/db.in; \
+ done |
+ sed -e 's/^#define[ ][ ]*//' \
+ -e 's/[()=,]/ /g' |
+ awk '{ print " public static final int " $1 " = " $2 ";" }') >> $t
+(for i in `egrep '^DB_.*J$' pubdef.in | awk '{print $1}'`; do \
+ egrep -w "^#define[ ]$i|^[ ][ ]*$i" ../dbinc/db.in; \
+ done |
+ sed -e 's/^#define[ ][ ]*//' \
+ -e 's/[()=,]/ /g' |
+ awk '{ print " public static final int " $1 ";" }') >> $t
+sed -n \
+ '/END-JAVA-SPECIAL-CONSTANTS/,/BEGIN-JAVA-CONSTANT-INITIALIZATION/p' \
+ < $f >> $t
+(echo " $msgjava" &&
+ for i in `egrep '^DB_.*J$' pubdef.in | awk '{print $1}'`; do \
+ egrep -w "^#define[ ]$i|^[ ][ ]*$i" ../dbinc/db.in; \
+ done |
+ sed -e 's/^#define[ ][ ]*//' \
+ -e 's/[()=,]/ /g' \
+ -e 's/\/\*/ /' | \
+ awk '{ print " " $1 " = DbConstants." $1 ";" }') >> $t
+sed -n '/END-JAVA-CONSTANT-INITIALIZATION/,$p' < $f >> $t
+
+f=../java/src/com/sleepycat/db/Db.java
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
diff --git a/db/dist/s_java_stat b/db/dist/s_java_stat
new file mode 100755
index 000000000..893d3dc7e
--- /dev/null
+++ b/db/dist/s_java_stat
@@ -0,0 +1,190 @@
+#!/bin/sh -
+# $Id: s_java_stat,v 1.26 2003/09/04 23:59:04 bostic Exp $
+#
+# Build the Java files.
+
+msgjava="/* DO NOT EDIT: automatically built by dist/s_java_stat. */"
+
+t=/tmp/__java
+c=/tmp/__javajnic
+h=/tmp/__javajnih
+trap 'rm -f $t $c $h; exit 0' 0 1 2 3 13 15
+
+# Script to convert DB C structure declarations into Java declarations.
+jclass()
+{
+ cat ../dbinc/db.in |
+ sed -n \
+ -e "/struct $1 {/,/^}/{" \
+ -e "/$1/d" \
+ -e '/;/!d' \
+ -e '/^}/d' \
+ -e '/char[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$2 public String \1;/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/time_t/{' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/$2 public long \1;/p" \
+ -e 'd' \
+ -e '}' \
+ -e '/DB_LSN[ ]*/{' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/$2 public DbLsn \1;/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/DB_TXN_ACTIVE[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$2 public Active \1[];/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/u_int8_t[ ]*xid\[/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$2 public byte[] xid;/p"\
+ -e 'd' \
+ -e '}' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/$2 public int \1;/p" \
+ -e '}'
+}
+
+# Script to convert DB C structure declarations into Java declarations.
+jclass_jni()
+{
+ c=$3
+ echo "static int $2(JNIEnv *jnienv, jclass cl," >> $c
+ echo " jobject jobj, struct $1 *statp) {" >> $c
+ cat ../dbinc/db.in |
+ sed -n \
+ -e "/struct $1 {/,/^}/{" \
+ -e "/$1/d" \
+ -e '/;/!d' \
+ -e '/^}/d' \
+ -e '/char[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ JAVADB_STAT_STRING(jnienv, cl, jobj, statp, \1);/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/time_t/{' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_LONG(jnienv, cl, jobj, statp, \1);/p" \
+ -e 'd' \
+ -e '}' \
+ -e '/DB_LSN[ ]*/{' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_LSN(jnienv, cl, jobj, statp, \1);/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/DB_TXN_ACTIVE[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ JAVADB_STAT_ACTIVE(jnienv, cl, jobj, statp, \1);/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/u_int8_t[ ]*xid\[/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/ JAVADB_STAT_XID(jnienv, cl, jobj, statp, xid);/p"\
+ -e 'd' \
+ -e '}' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/ JAVADB_STAT_INT(jnienv, cl, jobj, statp, \1);/p" \
+ -e '}' >> $c
+ echo ' return (0);' >> $c
+ echo '}' >> $c
+}
+
+# Script to convert DB C structure declarations into a toString method body
+jclass_toString()
+{
+ echo "/**"
+ echo " * Provide a string representation of all the fields contained"
+ echo " * within this class."
+ echo " *"
+ echo " * @return The string representation."
+ echo " */"
+ echo "$3 public String toString() {"
+ echo "$3 return \"$2:\""
+ cat ../dbinc/db.in |
+ sed -n \
+ -e "/struct $1 {/,/^}/{" \
+ -e "/$1/d" \
+ -e '/;/!d' \
+ -e '/^}/d' \
+ -e '/char[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 \1=\" + \1/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/DB_TXN_ACTIVE[ ]*\*/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 \1=\" + DbUtil.objectArrayToString(\1, \"\1\")/p"\
+ -e 'd' \
+ -e '}' \
+ -e '/u_int8_t[ ]*xid\[/{' \
+ -e "s/^[ ]*[^\*]*\*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 xid=\" + DbUtil.byteArrayToString(xid)/p"\
+ -e 'd' \
+ -e '}' \
+ -e "s/^[ ]*[^ ]*[ ]*\([^;]*\).*/$3 + \"\\\\n$3 \1=\" + \1/p"\
+ -e '}'
+ echo "$3 ;"
+ echo "$3 }"
+}
+
+echo "$msgjava" >> $c
+
+stat_class()
+{
+ c_struct=$1
+ j_class=$2
+ fill=$3
+
+ (echo "$msgjava"
+ echo
+ echo 'package com.sleepycat.db;'
+ echo
+ echo "/**"
+ echo " * Statistics associated with $j_class generated by"
+ echo " * DbEnv on request.<p>"
+ echo " * The information contained within instances of this"
+ echo " * class is a snapshot in time, it is not continually updated."
+ echo " */"
+ echo "public class $j_class"
+ echo '{'
+ jclass $c_struct
+ echo
+ jclass_toString $c_struct $j_class
+ echo '}'
+ echo "// end of $j_class.java") > $t
+ jclass_jni $c_struct $fill $c
+ f=../java/src/com/sleepycat/db/$j_class.java
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+}
+
+stat_class __db_bt_stat DbBtreeStat __dbj_fill_bt_stat
+stat_class __db_h_stat DbHashStat __dbj_fill_h_stat
+stat_class __db_lock_stat DbLockStat __dbj_fill_lock_stat
+stat_class __db_log_stat DbLogStat __dbj_fill_log_stat
+stat_class __db_mpool_fstat DbMpoolFStat __dbj_fill_mpool_fstat
+stat_class __db_mpool_stat DbMpoolStat __dbj_fill_mpool_stat
+stat_class __db_qam_stat DbQueueStat __dbj_fill_qam_stat
+stat_class __db_rep_stat DbRepStat __dbj_fill_rep_stat
+
+# Build DbTxnStat.java - special because of embedded Active class
+(echo "$msgjava" &&
+ echo &&
+ echo 'package com.sleepycat.db;' &&
+ echo &&
+ echo "/**"
+ echo " * Statistics associated with DbTxnStat generated by"
+ echo " * DbEnv on request."
+ echo " * The information contained within instances of this"
+ echo " * class is a snapshot in time, it is not continually updated."
+ echo " */"
+ echo "public class DbTxnStat"
+ echo '{'
+ echo " public static class Active {"
+ jclass __db_txn_active " "
+ jclass_toString __db_txn_active Active " "
+
+ echo ' };'
+ jclass __db_txn_stat
+ jclass_toString __db_txn_stat DbTxnStat
+ echo '}'
+ echo '// end of DbTxnStat.java') > $t
+jclass_jni __db_txn_stat __dbj_fill_txn_stat $c $h
+jclass_jni __db_txn_active __dbj_fill_txn_active $c $h
+f=../java/src/com/sleepycat/db/DbTxnStat.java
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+mv $c $t
+f=../libdb_java/java_stat_auto.c
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
diff --git a/db/dist/s_java_swig b/db/dist/s_java_swig
new file mode 100755
index 000000000..569a5e2bc
--- /dev/null
+++ b/db/dist/s_java_swig
@@ -0,0 +1,45 @@
+#!/bin/sh -
+# $Id: s_java_swig,v 11.6 2003/05/19 01:14:37 bostic Exp $
+#
+# Run SWIG to generate the Java APIs
+
+SWIG=swig
+SWIG_DIR=../libdb_java
+SWIG_FILE=$SWIG_DIR/db.i
+
+die() {
+ echo "$@" >&2
+ exit 1
+}
+
+[ -f $SWIG_FILE ] || die "Must be run from the dist directory"
+
+for api in java ; do
+ echo "Building $api API"
+
+ swig_args=""
+ case $api in
+ java)
+ swig_args="-nodefault -package com.sleepycat.db $args"
+ ;;
+ esac
+
+ $SWIG -Wall -$api $swig_args -I$SWIG_DIR \
+ -o ../libdb_$api/db_${api}_wrap.c $SWIG_FILE || exit $?
+done
+
+# Fixups for Java
+JAVA_SRCTOP=../java/src
+JAVA_PKGDIR=com/sleepycat/db
+JAVA_SRCDIR=$JAVA_SRCTOP/$JAVA_PKGDIR
+
+# SWIG 1.3.18 puts the Java files in the same directory as the native code.
+cd $SWIG_DIR
+[ -f Db.java ] || exit 1
+
+for f in *.java ; do
+ rm -f $JAVA_SRCDIR/$f
+ sed -f $SWIG_DIR/java-post.sed < $f > $JAVA_SRCDIR/$f || exit $?
+ rm -f $f
+done
+cd ../dist
diff --git a/db/dist/s_javah b/db/dist/s_javah
deleted file mode 100755
index fadbb1c58..000000000
--- a/db/dist/s_javah
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh -
-# Id: s_javah,v 1.1 2002/08/14 17:14:24 dda Exp
-#
-# Use javah to build the libdb_java/com_*.h header files.
-#
-# To run this, you will need a javac and javah in your PATH.
-# If possible, install tools with a recent vintage, JDK 1.3 or higher is good.
-# Using Sun's JDK rather than some other installation ensures
-# that the header files will not be constantly changed.
-
-. RELEASE
-
-JAVAC=javac
-JAVAH=javah
-export CLASSPATH
-CLASSPATH=
-
-# CLASSES are only those classes for which we have native methods.
-D=com.sleepycat.db
-CLASSES="$D.Dbc $D.DbEnv $D.Db $D.DbLock $D.DbLogc $D.DbLsn $D.Dbt $D.DbTxn $D.xa.DbXAResource"
-
-d=/tmp/__javah
-c=$d/classes
-trap 'rm -rf $d; exit 0' 0 1 2 3 13 15
-
-rm -rf $d
-mkdir $d || exit 1
-mkdir $c || exit 1
-
-# Make skeleton versions of XA classes and interfaces
-# We only need to compile them, not run them.
-pkg="package javax.transaction.xa"
-echo "$pkg; public interface XAResource {}" > $d/XAResource.java
-echo "$pkg; public interface Xid {}" > $d/Xid.java
-echo "$pkg; public class XAException extends Exception {}" \
- > $d/XAException.java
-
-
-# Create the .class files and use them with javah to create the .h files
-${JAVAC} -d $c $d/*.java \
- ../java/src/com/sleepycat/db/*.java \
- ../java/src/com/sleepycat/db/xa/*.java || exit 1
-${JAVAH} -classpath $c -d $d ${CLASSES} || exit 1
-
-for cl in ${CLASSES}; do
- h=`echo $cl | sed -e 's/\./_/g'`.h
- t=$d/$h
- f=../libdb_java/$h
- if [ ! -f $t ]; then
- echo "ERROR: $t does not exist"
- exit 1
- fi
- cmp $t $f > /dev/null 2>&1 ||
- (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
-done
diff --git a/db/dist/s_perm b/db/dist/s_perm
index 4b0997f2f..16450873a 100755
--- a/db/dist/s_perm
+++ b/db/dist/s_perm
@@ -1,37 +1,51 @@
#!/bin/sh -
-# $Id: s_perm,v 1.9 2001/01/24 15:55:38 bostic Exp $
+# $Id: s_perm,v 1.29 2003/11/17 21:11:45 bostic Exp $
+d=..
echo 'Updating Berkeley DB source tree permissions...'
run()
{
- echo " $1 ($2)"
- if [ -f "../$1" ]; then
- chmod "$2" "../$1"
+ #echo " $1 ($2)"
+ if [ -f "$d/$1" ]; then
+ chmod "$2" "$d/$1"
else
- echo "$1: no such file or directory"
+ echo "$d/$1: no such file or directory"
exit 1
fi
}
-run dist/build/chk.def 0555
-run dist/build/chk.define 0555
-run dist/build/chk.offt 0555
-run dist/build/chk.srcfiles 0555
-run dist/build/chk.tags 0555
-run dist/config.guess 0555
-run dist/config.sub 0555
-run dist/configure 0555
-run dist/install-sh 0555
-run dist/s_config 0555
-run dist/s_include 0555
-run dist/s_java 0555
-run dist/s_perm 0555
-run dist/s_readme 0555
-run dist/s_recover 0555
-run dist/s_symlink 0555
-run dist/s_tags 0555
-run dist/s_tcl 0555
-run dist/s_win32 0555
-run perl.BerkeleyDB/dbinfo 0555
-run perl.BerkeleyDB/mkpod 0555
+run build_win32/include.tcl 664
+run dist/config.guess 555
+run dist/config.sub 555
+run dist/configure 555
+run dist/install-sh 555
+run dist/s_all 555
+run dist/s_config 555
+run dist/s_crypto 555
+run dist/s_include 555
+run dist/s_java 555
+run dist/s_java_camel 555
+run dist/s_java_const 555
+run dist/s_java_stat 555
+run dist/s_java_swig 555
+run dist/s_perm 555
+run dist/s_readme 555
+run dist/s_recover 555
+run dist/s_rpc 555
+run dist/s_symlink 555
+run dist/s_tags 555
+run dist/s_test 555
+run dist/s_vxworks 555
+run dist/s_win32 555
+run dist/s_win32_dsp 555
+run dist/vx_buildcd 555
+
+run perl/BerkeleyDB/dbinfo 555
+run perl/BerkeleyDB/mkpod 555
+
+for i in `cd $d && find build_vxworks \
+ -name '*.wsp' -o -name '*.cdf' -o -name '*.wpj'`; do
+ #echo " $i (775)"
+ chmod 775 $d/$i
+done
diff --git a/db/dist/s_readme b/db/dist/s_readme
index 9ff8a69bc..f2ed07044 100755
--- a/db/dist/s_readme
+++ b/db/dist/s_readme
@@ -1,18 +1,25 @@
#!/bin/sh -
-# $Id: s_readme,v 1.2 2000/01/27 21:42:18 bostic Exp $
+# $Id: s_readme,v 1.7 2003/07/02 15:27:44 bostic Exp $
#
# Build the README.
+echo 'Updating Berkeley DB README file...'
+
+d=..
+
+t=/tmp/__t
+trap 'rm -f $t; exit 0' 0 1 2 3 13 15
+
. RELEASE
+cat << END_OF_README>$t
+$DB_VERSION_STRING
+
+This is version $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH of Berkeley DB from Sleepycat Software. To view
+the release and installation documentation, load the distribution file
+docs/index.html into your web browser.
+END_OF_README
+
f=../README
-echo "Building $f"
-rm -f $f
-(echo "$DB_VERSION_STRING" &&
- echo "" &&
- echo -n "This is version " &&
- echo -n "$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH" &&
- echo " of Berkeley DB from Sleepycat Software. To view" &&
- echo "the release and installation documentation, load the distribution file" &&
- echo "docs/index.html into your web browser.") > $f
-chmod 444 $f
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
diff --git a/db/dist/s_recover b/db/dist/s_recover
index 0e8b3731c..331ae623d 100755
--- a/db/dist/s_recover
+++ b/db/dist/s_recover
@@ -1,16 +1,18 @@
#!/bin/sh -
-# $Id: s_recover,v 1.3 2000/03/30 05:24:36 krinsky Exp $
+# $Id: s_recover,v 1.14 2002/03/27 04:31:51 bostic Exp $
#
# Build the automatically generated logging/recovery files.
-DIR="db btree hash log qam txn"
+tmp=/tmp/__db_a
+loglist=/tmp/__db_b
+source=/tmp/__db_c
+header=/tmp/__db_d
+template=/tmp/__db_e
-t=/tmp/__db_$$
-loglist=../test/logtrack.list
-rm -f $t
-rm -f $loglist
+trap 'rm -f $tmp $loglist $source $header $template; exit 1' 1 2 3 13 15
+trap 'rm -f $tmp $loglist $source $header $template; exit 0' 0
-trap 'rm -f $t; exit 1' 1 2 3 13 15
+DIR="db dbreg btree hash qam txn"
# Check to make sure we haven't duplicated a log record entry, and build
# the list of log record types that the test suite uses.
@@ -19,38 +21,47 @@ for i in $DIR; do
for f in ../$i/*.src; do
# Grab the PREFIX; there should only be one per file, and
# so it's okay to just take the first.
- grep '^PREFIX' $f | head -1
- egrep '^DEPRECATED[ ]|^BEGIN[ ]' $f | \
+ grep '^PREFIX' $f | sed q
+ egrep '^BEGIN[ ]|^IGNORED[ ]|^DEPRECATED[ ]' $f |
awk '{print $1 "\t" $2 "\t" $3}'
done
done > $loglist
-grep -v '^PREFIX' $loglist | awk '{print $2 "\t" $3}' | sort +1 -n | \
- uniq -d -f 1 > $t
-[ -s $t ] && {
+grep -v '^PREFIX' $loglist |
+ awk '{print $2 "\t" $3}' | sort -n -k 2 | uniq -d -f 1 > $tmp
+[ -s $tmp ] && {
echo "DUPLICATE LOG VALUES:"
- cat $t
- rm -f $t
+ cat $tmp
+ rm -f $tmp
exit 1
}
-rm -f $t
+f=../test/logtrack.list
+cmp $loglist $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $loglist $f && chmod 444 $f)
-for i in db btree hash log qam txn; do
+# Build DB's recovery routines.
+for i in db dbreg btree fileops hash qam txn; do
for f in ../$i/*.src; do
subsystem=`basename $f .src`
- header_file=../include/${subsystem}_auto.h
- source_file=../$i/${subsystem}_auto.c
- template_file=template/rec_${subsystem}
- template_source=.
-
- echo "Building $source_file, $header_file, $template_file"
- rm -f $header_file $source_file $template_file
awk -f gen_rec.awk \
- -v subsystem=$subsystem \
- -v source_file=$source_file \
- -v header_file=$header_file \
- -v template_file=$template_file \
- -v template_dir=. < $f
- chmod 444 $header_file $source_file $template_file
+ -v source_file=$source \
+ -v header_file=$header \
+ -v template_file=$template < $f
+
+ f=../dbinc_auto/${subsystem}_auto.h
+ cmp $header $f > /dev/null 2>&1 ||
+ (echo "Building $f" &&
+ rm -f $f && cp $header $f && chmod 444 $f)
+ f=../$i/${subsystem}_auto.c
+ cmp $source $f > /dev/null 2>&1 ||
+ (echo "Building $f" &&
+ rm -f $f && cp $source $f && chmod 444 $f)
+ f=template/rec_${subsystem}
+ cmp $template $f > /dev/null 2>&1 ||
+ (echo "Building $f" &&
+ rm -f $f && cp $template $f && chmod 444 $f)
done
done
+
+# Build the example application's recovery routines.
+(cd ../examples_c/ex_apprec && sh auto_rebuild)
diff --git a/db/dist/s_rpc b/db/dist/s_rpc
index 88c9f47cb..6c420eee1 100644
--- a/db/dist/s_rpc
+++ b/db/dist/s_rpc
@@ -1,45 +1,58 @@
#!/bin/sh -
-# $Id: s_rpc,v 11.6 2000/04/26 19:15:51 sue Exp $
+# $Id: s_rpc,v 11.19 2003/07/02 15:27:44 bostic Exp $
#
# Build the automatically generated RPC files
-echo "Building RPC client/server files"
+echo "Building RPC client/server files..."
+
+. ./RELEASE
+
+t=/tmp/__db_a
+trap 'rm -f $t ; exit 0' 0
+trap 'rm -f $t ; exit 1' 1 2 3 13 15
client_file=../rpc_client/gen_client.c
-cproto_file=../include/gen_client_ext.h
ctmpl_file=./template/gen_client_ret
-header_file=../include/db_server.h
+dbinc_file=../dbinc/db.in
+defs_file=../dbinc_auto/rpc_defs.in
+header_file=../dbinc_auto/db_server.h
+proc_file=../rpc_server/c/db_server_proc.c
rpcclnt_file=../rpc_client/db_server_clnt.c
-rpcsvc_file=../rpc_server/db_server_svc.c
-rpcxdr_file=../rpc_server/db_server_xdr.c
-sed_file=../rpc_server/db_server_proc.sed
-server_file=../rpc_server/gen_db_server.c
-sproto_file=../include/gen_server_ext.h
+rpcsvc_file=../rpc_server/c/db_server_svc.c
+rpcxdr_file=../rpc_server/c/db_server_xdr.c
+sed_file=../rpc_server/c/db_server_proc.sed
+server_file=../rpc_server/c/gen_db_server.c
stmpl_file=./template/db_server_proc
xdr_file=../rpc_server/db_server.x
#
-# NOTE: We do NOT want to remove proc_file. It is what we apply
-# sed_file to, but we do not want to remove it.
-#
-proc_file=../rpc_server/db_server_proc.c
-svrsed_file=../rpc_server/db_server_svc.sed
-rpcsed_file=../rpc_server/db_server.sed
-
-rm -f $client_file $cproto_file $ctmpl_file $header_file $rpcsvc_file \
- $rpcclnt_file $rpcxdr_file $sed_file $server_file $sproto_file \
- $stmpl_file $xdr_file
+# NOTE: We do NOT want to remove proc_file. It is what we apply $sed_file
+# to, but we do not want to remove it, it does not get built in place.
+rm -f $client_file \
+ $ctmpl_file \
+ $header_file \
+ $rpcclnt_file \
+ $rpcsvc_file \
+ $rpcxdr_file \
+ $sed_file \
+ $server_file \
+ $stmpl_file \
+ $xdr_file
#
# Generate client/server/XDR code
#
+xidsize=\
+`awk '/^#define/ { if ($2 == "DB_XIDDATASIZE") { print $3 }}' $dbinc_file`
+
awk -f gen_rpc.awk \
+ -v major=$DB_VERSION_MAJOR \
+ -v minor=$DB_VERSION_MINOR \
+ -v xidsize=$xidsize \
-v client_file=$client_file \
- -v cproto_file=$cproto_file \
-v ctmpl_file=$ctmpl_file \
-v sed_file=$sed_file \
-v server_file=$server_file \
- -v sproto_file=$sproto_file \
-v stmpl_file=$stmpl_file \
-v xdr_file=$xdr_file < ../rpc_server/rpc.src
chmod 444 $client_file $server_file
@@ -52,19 +65,73 @@ rpcgen -l $xdr_file > $rpcclnt_file
rpcgen -s tcp $xdr_file > $rpcsvc_file
rpcgen -c $xdr_file > $rpcxdr_file
-# Run server files through sed
-sed -f $svrsed_file $rpcsvc_file > ${rpcsvc_file}.new
+#
+# Run various server files through sed.
+#
+cat <<ENDOFSEDTEXT>$t
+s/^#include[ ]"db_server.h"/#include "db_config.h"\\
+\\
+\\#ifndef NO_SYSTEM_INCLUDES\\
+\\#include <rpc\\/rpc.h>\\
+\\#include <rpc\\/pmap_clnt.h>/
+/^#include <netinet.in.h>/a\\
+\\#endif\\
+\\
+\\#include "db_int.h"\\
+\\#include "dbinc_auto/db_server.h"\\
+\\#include "dbinc/db_server_int.h"\\
+\\#include "dbinc_auto/rpc_server_ext.h"
+/^ return;/i\\
+\\ __dbsrv_timeout(0);
+s/svc_sendreply(transp, xdr_void,/svc_sendreply(transp, (xdrproc_t)xdr_void,/
+s/svc_getargs(transp, xdr_argument, &argument)/svc_getargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/
+s/svc_sendreply(transp, xdr_result, result)/svc_sendreply(transp, (xdrproc_t)xdr_result, result)/
+s/svc_freeargs(transp, xdr_argument, &argument)/svc_freeargs(transp, (xdrproc_t)xdr_argument, (char *)\&argument)/
+s/^main/void __dbsrv_main/
+ENDOFSEDTEXT
+sed -f $t $rpcsvc_file > ${rpcsvc_file}.new
mv ${rpcsvc_file}.new $rpcsvc_file
+
sed -f $sed_file $proc_file > ${proc_file}.new
mv ${proc_file}.new $proc_file
-# Run rpcgen files through sed to add HAVE_RPC ifdef
-sed -f $rpcsed_file $rpcsvc_file > ${rpcsvc_file}.new
-mv ${rpcsvc_file}.new $rpcsvc_file
-sed -f $rpcsed_file $rpcxdr_file > ${rpcxdr_file}.new
+# Run rpcgen files through sed to add HAVE_RPC ifdef and appropriate
+# includes.
+cat <<ENDOFSEDTEXT>$t
+1i\\
+\\#include "db_config.h"\\
+\\
+\\#ifdef HAVE_RPC
+/^#include "db_server.h"/c\\
+\\#ifndef NO_SYSTEM_INCLUDES\\
+\\#include <rpc/rpc.h>\\
+\\
+\\#include <strings.h>\\
+\\#endif\\
+\\
+\\#include "db_int.h"\\
+\\#include "dbinc_auto/db_server.h"
+\$a\\
+\\#endif /* HAVE_RPC */
+ENDOFSEDTEXT
+
+sed -f $t $rpcxdr_file > ${rpcxdr_file}.new
mv ${rpcxdr_file}.new $rpcxdr_file
-sed -f $rpcsed_file $rpcclnt_file > ${rpcclnt_file}.new
+sed -f $t $rpcclnt_file > ${rpcclnt_file}.new
mv ${rpcclnt_file}.new $rpcclnt_file
-chmod 444 $header_file $rpcclnt_file $rpcsvc_file $rpcxdr_file
+# Copy the DB_RPC SERVER #defines into a separate file so
+# they can be part of db.h.
+msgc="/* DO NOT EDIT: automatically built by dist/s_rpc. */"
+(echo "" && echo "$msgc" &&
+ sed -n -e "/DB_RPC_SERVER/p" $header_file) > $defs_file
+
+# Fix up the header file:
+# Remove the DB_RPC_SERVER #defines.
+# Remove the <rpc/rpc.h> include, it needs to be included earlier
+# than that.
+sed -e "/DB_RPC_SERVER/d"\
+ -e "/^#include.*<rpc\/rpc.h>/d" $header_file > ${header_file}.new
+mv ${header_file}.new $header_file
+chmod 444 $header_file $rpcclnt_file $rpcsvc_file $rpcxdr_file
diff --git a/db/dist/s_symlink b/db/dist/s_symlink
index 70efa4455..17498063b 100755
--- a/db/dist/s_symlink
+++ b/db/dist/s_symlink
@@ -1,11 +1,11 @@
#!/bin/sh -
-# $Id: s_symlink,v 1.9 2000/09/05 21:27:04 bostic Exp $
+# $Id: s_symlink,v 1.31 2003/07/02 15:27:44 bostic Exp $
echo 'Creating Berkeley DB source tree symbolic links...'
build()
{
- echo " $1 -> $2"
+ #echo " $1 -> $2"
(cd ../`dirname $1` && rm -f `basename $1` && ln -s $2 `basename $1`)
}
@@ -13,6 +13,7 @@ build btree/tags ../dist/tags
build build_unix/tags ../dist/tags
build clib/tags ../dist/tags
build common/tags ../dist/tags
+build crypto/tags ../dist/tags
build cxx/tags ../dist/tags
build db/tags ../dist/tags
build db185/tags ../dist/tags
@@ -27,54 +28,17 @@ build db_recover/tags ../dist/tags
build db_stat/tags ../dist/tags
build db_upgrade/tags ../dist/tags
build db_verify/tags ../dist/tags
+build dbinc/tags ../dist/tags
+build dbinc_auto/tags ../dist/tags
build dbm/tags ../dist/tags
-build docs_src/api_cxx/Makefile ../api_c/Makefile
-build docs_src/api_cxx/m4.seealso ../api_c/m4.seealso
-build docs_src/api_cxx/spell.ok ../api_c/spell.ok
-build docs_src/api_java/Makefile ../api_c/Makefile
-build docs_src/api_java/java_index.so ../api_cxx/cxx_index.so
-build docs_src/api_java/m4.seealso ../api_c/m4.seealso
-build docs_src/api_java/spell.ok ../api_c/spell.ok
-build docs_src/api_tcl/spell.ok ../api_c/spell.ok
-build docs_src/ref/am/spell.ok ../spell.ok
-build docs_src/ref/am_conf/spell.ok ../spell.ok
-build docs_src/ref/arch/spell.ok ../spell.ok
-build docs_src/ref/build_unix/spell.ok ../spell.ok
-build docs_src/ref/build_vxworks/spell.ok ../spell.ok
-build docs_src/ref/build_win/spell.ok ../spell.ok
-build docs_src/ref/cam/spell.ok ../spell.ok
-build docs_src/ref/debug/spell.ok ../spell.ok
-build docs_src/ref/distrib/spell.ok ../spell.ok
-build docs_src/ref/dumpload/spell.ok ../spell.ok
-build docs_src/ref/env/spell.ok ../spell.ok
-build docs_src/ref/install/spell.ok ../spell.ok
-build docs_src/ref/intro/spell.ok ../spell.ok
-build docs_src/ref/java/spell.ok ../spell.ok
-build docs_src/ref/lock/spell.ok ../spell.ok
-build docs_src/ref/log/spell.ok ../spell.ok
-build docs_src/ref/mp/spell.ok ../spell.ok
-build docs_src/ref/perl/spell.ok ../spell.ok
-build docs_src/ref/program/spell.ok ../spell.ok
-build docs_src/ref/refs/spell.ok ../spell.ok
-build docs_src/ref/rpc/spell.ok ../spell.ok
-build docs_src/ref/sendmail/spell.ok ../spell.ok
-build docs_src/ref/simple_tut/spell.ok ../spell.ok
-build docs_src/ref/tcl/spell.ok ../spell.ok
-build docs_src/ref/test/spell.ok ../spell.ok
-build docs_src/ref/transapp/spell.ok ../spell.ok
-build docs_src/ref/txn/spell.ok ../spell.ok
-build docs_src/ref/upgrade.2.0/spell.ok ../spell.ok
-build docs_src/ref/upgrade.3.0/spell.ok ../spell.ok
-build docs_src/ref/upgrade.3.1/spell.ok ../spell.ok
-build docs_src/ref/upgrade.3.2/spell.ok ../spell.ok
-build docs_src/ref/xa/spell.ok ../spell.ok
+build dbreg/tags ../dist/tags
build env/tags ../dist/tags
build examples_c/tags ../dist/tags
build examples_cxx/tags ../dist/tags
-build examples_java java/src/com/sleepycat/examples
+build fileops/tags ../dist/tags
build hash/tags ../dist/tags
+build hmac/tags ../dist/tags
build hsearch/tags ../dist/tags
-build include/tags ../dist/tags
build libdb_java/tags ../dist/tags
build lock/tags ../dist/tags
build log/tags ../dist/tags
@@ -84,6 +48,7 @@ build os/tags ../dist/tags
build os_vxworks/tags ../dist/tags
build os_win32/tags ../dist/tags
build qam/tags ../dist/tags
+build rep/tags ../dist/tags
build rpc_client/tags ../dist/tags
build rpc_server/tags ../dist/tags
build tcl/tags ../dist/tags
diff --git a/db/dist/s_tags b/db/dist/s_tags
index 834600b9f..68967eba1 100755
--- a/db/dist/s_tags
+++ b/db/dist/s_tags
@@ -1,31 +1,39 @@
#!/bin/sh -
-# $Id: s_tags,v 1.5 2000/09/05 21:27:04 bostic Exp $
+# $Id: s_tags,v 1.17 2003/03/18 02:16:32 bostic Exp $
#
# Build tags files.
-files="../include/*.h \
- ../include/*.src \
+files=`echo ../dbinc/*.h \
+ ../dbinc/*.in \
../btree/*.[ch] \
../clib/*.[ch] \
../common/*.[ch] \
+ ../crypto/*.[ch] \
+ ../crypto/mersenne/*.[ch] \
+ ../crypto/rijndael/*.[ch] \
../db/*.[ch] \
../db185/*.[ch] \
../dbm/*.[ch] \
+ ../dbreg/*.[ch] \
../env/*.[ch] \
+ ../fileops/*.[ch] \
../hash/*.[ch] \
+ ../hmac/*.[ch] \
../hsearch/*.[ch] \
- ../libdb_java/*.[ch] \
../lock/*.[ch] \
../log/*.[ch] \
../mp/*.[ch] \
../mutex/*.[ch] \
../os/*.[ch] \
../qam/*.[ch] \
+ ../rep/*.[ch] \
../rpc_client/*.[ch] \
- ../rpc_server/*.[ch] \
+ ../rpc_server/c/*.[ch] \
../tcl/*.[ch] \
../txn/*.[ch] \
- ../xa/*.[ch]"
+ ../xa/*.[ch] \
+ ../cxx/*.cpp \
+ ../libdb_java/*.[ch] | sed 's/[^ ]*stub.c//g'`
f=tags
echo "Building $f"
@@ -45,3 +53,8 @@ fi
ctags $flags $files 2>/dev/null
chmod 444 $f
+
+f=../test_perf/tags
+echo "Building $f"
+(cd ../test_perf && ctags $flags *.[ch] 2>/dev/null)
+chmod 444 $f
diff --git a/db/dist/s_test b/db/dist/s_test
index 8a0ae9edf..012fa7a09 100755
--- a/db/dist/s_test
+++ b/db/dist/s_test
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: s_test,v 1.24 2002/08/09 02:24:58 bostic Exp
+# $Id: s_test,v 1.28 2003/10/14 17:13:55 sandstro Exp $
#
# Build the Tcl test files.
@@ -14,7 +14,7 @@ trap 'rm -f $t; exit 0' 0 1 2 3 13 15
(echo "$msg1" && \
echo "" && \
echo "set tclsh_path @TCL_TCLSH@" && \
- echo "set tcllib .libs/libdb_tcl-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@MODSUFFIX@" && \
+ echo "set tcllib .libs/libdb_tcl-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@@LIBTSO_MODSUFFIX@" && \
echo "" && \
echo "set rpc_server localhost" && \
echo "set rpc_path ." && \
diff --git a/db/dist/s_vxworks b/db/dist/s_vxworks
index edf058df7..8802f5e72 100644
--- a/db/dist/s_vxworks
+++ b/db/dist/s_vxworks
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_vxworks,v 1.3 2000/07/13 18:38:46 bostic Exp $
+# $Id: s_vxworks,v 1.42 2003/08/27 16:23:33 sue Exp $
#
# Build the VxWorks files.
@@ -7,18 +7,30 @@ msgc="/* DO NOT EDIT: automatically built by dist/s_vxworks. */"
. RELEASE
-t=/tmp/__db_$$
-rm -f $t
+s=/tmp/__db_a
+t=/tmp/__db_b
+vxfilelist=/tmp/__db_c
-trap 'rm -f $t ; exit 1' 1 2 3 13 15
+trap 'rm -f $s $t $vxfilelist ; exit 0' 0
+trap 'rm -f $s $t $vxfilelist ; exit 1' 1 2 3 13 15
+# Build the VxWorks automatically generated files.
f=../build_vxworks/db.h
-echo "Building $f"
-rm -f $f
-cat <<ENDOFSEDTEXT > $t
+cat <<ENDOFSEDTEXT > $s
+/extern "C" {/{
+n
+n
+i\\
+\\
+/* Tornado 2 does not provide a standard C pre-processor #define. */\\
+#ifndef __vxworks\\
+#define __vxworks\\
+#endif
+}
s/@u_int8_decl@/typedef unsigned char u_int8_t;/
s/@u_int16_decl@/typedef unsigned short u_int16_t;/
s/@u_int32_decl@/typedef unsigned int u_int32_t;/
+/@inttypes_decl@/d
/@int16_decl@/d
/@int32_decl@/d
/@u_char_decl@/d
@@ -30,19 +42,293 @@ s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/
s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/
s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/
s/@DB_VERSION_STRING@/"$DB_VERSION_STRING"/
+s/@DB_VERSION_UNIQUE_NAME@//
+s/@DB_CONST@//
+s/@DB_PROTO1@/#undef __P/
+s/@DB_PROTO2@/#define __P(protos) protos/
ENDOFSEDTEXT
-(echo "$msgc" && sed -f $t ../include/db.src) > $f
-chmod 444 $f
+(echo "$msgc" &&
+ sed -f $s ../dbinc/db.in &&
+ cat ../dbinc_auto/rpc_defs.in &&
+ cat ../dbinc_auto/ext_prot.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
f=../build_vxworks/db_int.h
-echo "Building $f"
-rm -f $f
-cat <<ENDOFSEDTEXT > $t
-s/\(PATH_SEPARATOR[^"]*"\)\/"/\1\/\\\\\\\\\\"/
+cat <<ENDOFSEDTEXT > $s
+s/@PATH_SEPARATOR@/\/\\\\\\\\/
s/@db_align_t_decl@/typedef unsigned long db_align_t;/
s/@db_alignp_t_decl@/typedef unsigned long db_alignp_t;/
+s/@db_int_def@//
ENDOFSEDTEXT
-(echo "$msgc" && sed -f $t ../include/db_int.src) > $f
-chmod 444 $f
+(echo "$msgc" && sed -f $s ../dbinc/db_int.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
-rm -f $t
+f=../build_vxworks/db_config.h
+(echo "$msgc" && sed "s/__EDIT_DB_VERSION__/$DB_VERSION/" vx_config.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+# Build a sed script that will change a "standard" DB utility into
+# VxWorks-compatible code.
+transform()
+{
+ # Build a sed script that will add argument parsing support and
+ # rename all of the functions to be private to this file.
+cat <<ENDOFSEDTEXT
+/^main(argc, argv)$/{
+i\\
+$1(args)\\
+\\ char *args;\\
+{\\
+\\ int argc;\\
+\\ char **argv;\\
+\\
+\\ __db_util_arg("$1", args, &argc, &argv);\\
+\\ return ($1_main(argc, argv) ? EXIT_FAILURE : EXIT_SUCCESS);\\
+}\\
+\\
+#include <stdio.h>\\
+#define ERROR_RETURN ERROR\\
+\\
+int\\
+$1_main(argc, argv)
+d
+}
+/^ while ((ch = getopt/i\\
+\\ __db_getopt_reset = 1;
+/^[ ]*extern int optind;/s/;/, __db_getopt_reset;/
+ENDOFSEDTEXT
+
+ # Replace all function names with VxWorks safe names.
+ # Function names are:
+ # Tokens starting at the beginning of the line, immediately
+ # followed by an opening parenthesis.
+ # Replace:
+ # Matches preceded by a non-C-token character and immediately
+ # followed by an opening parenthesis.
+ # Matches preceded by a non-C-token character and immediately
+ # followed by " __P".
+ # Matches starting at the beginning of the line, immediately
+ # followed by an opening parenthesis.
+ for k in `sed -e 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)(.*$/\1/p' -e d $2`; do
+ echo "s/\([^a-zA-Z0-9_]\)\($k(\)/\1$1_\2/g"
+ echo "s/\([^a-zA-Z0-9_]\)\($k[ ]__P\)/\1$1_\2/g"
+ echo "s/^\($k(\)/$1_\1/g"
+ done
+
+ # There is a special case the rules above don't catch:
+ # a txn_compare function used as an argument to qsort(3).
+ # a print_app_record function used as argument to
+ # dbenv->set_app_dispatch).
+ echo "s/, txn_compare);/, db_stat_txn_compare);/"
+ echo "s/, print_app_record)) /, db_printlog_print_app_record)) /"
+
+ # We convert the ex_access sample into dbdemo for VxWorks.
+ echo 's/progname = "ex_access";/progname = "dbdemo";/'
+
+ # The example programs have to load db_int.h, not db.h -- else
+ # they won't have the right Berkeley DB prototypes for getopt
+ # and friends.
+ echo '/#include.*db.h/c\'
+ echo '#include <db_config.h>\'
+ echo '#include <db_int.h>'
+}
+
+PROGRAM_LIST="db_archive db_checkpoint db_deadlock db_dump db_load \
+ db_printlog db_recover db_stat db_upgrade db_verify ex_access"
+
+# Build VxWorks versions of the utilities.
+for i in $PROGRAM_LIST; do
+ if [ $i = "ex_access" ]; then
+ target=dbdemo
+ dir=../examples_c
+ else
+ target=$i
+ dir=../$i
+ fi
+
+ transform $target $dir/$i.c > $s
+ sed -f $s < $dir/$i.c > $t
+
+ f=../build_vxworks/$target/$target.c
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+done
+
+# Build VxWorks Tornado 2.0 project files for the utilities.
+for i in $PROGRAM_LIST; do
+ if [ $i = "ex_access" ]; then
+ target=dbdemo
+ dir=../examples_c
+ else
+ target=$i
+ dir=../$i
+ fi
+
+ sed "s/__DB_APPLICATION_NAME__/$target/g" < vx_2.0/wpj.in > $t
+ f=../build_vxworks/$target/${target}20.wpj
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+ sed "s/__DB_APPLICATION_NAME__/$target/g" < vx_2.2/wpj.in > $t
+ f=../build_vxworks/$target/${target}22.wpj
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+done
+
+# Build the list of files VxWorks knows about.
+sed -e '/^$/d' -e '/^[ #]/d' srcfiles.in |
+ egrep -w vx |
+ sed 's/[ ].*//' > $vxfilelist
+
+# Build VxWorks Tornado 2.0 project files for the library itself.
+for v in 0 2 ; do
+ (cat vx_2.${v}/BerkeleyDB.wpj
+ for i in `cat $vxfilelist`; do
+ o="<BEGIN> FILE_\$(PRJ_DIR)/../$i"
+ echo "${o}_dependDone"
+ echo "TRUE"
+ echo "<END>"
+ echo
+ echo "${o}_dependencies"
+ echo "\$(PRJ_DIR)/db_config.h \\"
+ echo " \$(PRJ_DIR)/db_int.h \\"
+ echo " \$(PRJ_DIR)/db.h"
+ echo "<END>"
+ echo
+ echo "${o}_objects"
+ echo "`basename $i .c`.o"
+ echo "<END>"
+ echo
+ echo "${o}_tool"
+ echo "C/C++ compiler"
+ echo "<END>"
+ echo
+ done
+ echo "<BEGIN> PROJECT_FILES"
+ sed -e '$!s/$/ \\/' \
+ -e 's/^/$(PRJ_DIR)\/..\//' \
+ -e '1!s/^/ /' < $vxfilelist
+ echo "<END>"
+ echo
+ echo "<BEGIN> userComments"
+ echo "BerkeleyDB"
+ echo "<END>") > $t
+ f=../build_vxworks/BerkeleyDB2${v}.wpj
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+done
+
+# Build VxWorks Tornado 3.1 project files for the utilities.
+for i in $PROGRAM_LIST; do
+ if [ $i = "ex_access" ]; then
+ target=dbdemo
+ dir=../examples_c
+ else
+ target=$i
+ dir=../$i
+ fi
+
+ cp vx_3.1/Makefile.custom $t
+ f=../build_vxworks/$target/$target/Makefile.custom
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+ for j in component.cdf component.wpj; do
+ #
+ # Some parts of the component files needs to have the
+ # name in all capitals. Sigh.
+ #
+ z=`echo $target | tr "a-z" "A-Z"`
+ sed -e "s/__DB_APPLICATION_NAME__/$target/g" \
+ -e "s/__DB_CAPAPPL_NAME__/$z/g" < vx_3.1/$j > $t
+ f=../build_vxworks/$target/$target/$j
+ cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+ done
+done
+
+# Build VxWorks Tornado 3.1 project files for the library itself.
+cp vx_3.1/Makefile.custom $t
+f=../build_vxworks/BerkeleyDB/Makefile.custom
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+(cat vx_3.1/cdf.1
+echo -n " MODULES"
+for i in `cat $vxfilelist`; do
+ echo " `basename $i .c`.o"
+done | sort | sed -e '$!s/$/ \\/'
+cat vx_3.1/cdf.2
+for i in `cat $vxfilelist`; do
+ b="`basename $i .c`.o"
+ echo "Module $b {"
+ echo
+ echo " NAME $b"
+ echo " SRC_PATH_NAME \$(PRJ_DIR)/../../$i"
+ echo "}"
+ echo
+done
+cat vx_3.1/cdf.3)> $t
+f=../build_vxworks/BerkeleyDB/component.cdf
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+(cat vx_3.1/wpj.1
+for i in `cat $vxfilelist`; do
+ o="<BEGIN> BUILD_PENTIUM2gnu.debug_FILE_\$(PRJ_DIR)/../../$i"
+ echo "${o}_infoTags"
+ echo "toolMacro objects"
+ echo "<END>"
+ echo
+ echo "${o}_objects"
+ echo "`basename $i .c`.o"
+ echo "<END>"
+ echo
+ echo "${o}_toolMacro"
+ echo "CC"
+ echo "<END>"
+ echo
+done
+cat vx_3.1/wpj.2
+for i in `cat $vxfilelist`; do
+ o="<BEGIN> BUILD_PENTIUM2gnu.release_FILE_\$(PRJ_DIR)/../../$i"
+ echo "${o}_infoTags"
+ echo "toolMacro objects"
+ echo "<END>"
+ echo
+ echo "${o}_objects"
+ echo "`basename $i .c`.o"
+ echo "<END>"
+ echo
+ echo "${o}_toolMacro"
+ echo "CC"
+ echo "<END>"
+ echo
+done
+cat vx_3.1/wpj.3
+for i in `cat $vxfilelist`; do
+ o="<BEGIN> BUILD_PENTIUMgnu.debug_FILE_\$(PRJ_DIR)/../../$i"
+ echo "${o}_infoTags"
+ echo "toolMacro objects"
+ echo "<END>"
+ echo
+ echo "${o}_objects"
+ echo "`basename $i .c`.o"
+ echo "<END>"
+ echo
+ echo "${o}_toolMacro"
+ echo "CC"
+ echo "<END>"
+ echo
+done
+cat vx_3.1/wpj.4
+sort $vxfilelist |
+sed -e 's/^/$(PRJ_DIR)\/..\/..\//' \
+ -e '1!s/^/ /' \
+ -e '$!s/$/ \\/'
+cat vx_3.1/wpj.5) > $t
+f=../build_vxworks/BerkeleyDB/component.wpj
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
diff --git a/db/dist/s_win32 b/db/dist/s_win32
index f989a615e..fd63a8a6a 100755
--- a/db/dist/s_win32
+++ b/db/dist/s_win32
@@ -1,21 +1,23 @@
#!/bin/sh -
-# $Id: s_win32,v 1.9 2000/09/20 15:29:54 bostic Exp $
+# $Id: s_win32,v 1.28 2003/05/20 23:37:20 mjc Exp $
#
# Build Windows/32 include files.
msgc="/* DO NOT EDIT: automatically built by dist/s_win32. */"
+msgw="; DO NOT EDIT: automatically built by dist/s_win32."
. RELEASE
-t=/tmp/__db_$$
-rm -f $t
+s=/tmp/__db_a$$
+t=/tmp/__db_b$$
+rm -f $s $t
-trap 'rm -f $t ; exit 1' 1 2 3 13 15
+trap 'rm -f $s $t ; exit 1' 1 2 3 13 15
+# Build the Win32 automatically generated files.
f=../build_win32/db.h
-echo "Building $f"
-rm -f $f
-cat <<ENDOFSEDTEXT > $t
+cat <<ENDOFSEDTEXT > $s
+/@inttypes_decl@/d
s/@u_int8_decl@/typedef unsigned char u_int8_t;/
s/@int16_decl@/typedef short int16_t;/
s/@u_int16_decl@/typedef unsigned short u_int16_t;/
@@ -23,7 +25,7 @@ s/@int32_decl@/typedef int int32_t;/
s/@u_int32_decl@/typedef unsigned int u_int32_t;/
/@u_char_decl@/{
i\\
- #if !defined(_WINSOCKAPI_)
+#if !defined(_WINSOCKAPI_)
s/@u_char_decl@/typedef unsigned char u_char;/
}
s/@u_short_decl@/typedef unsigned short u_short;/
@@ -31,37 +33,85 @@ s/@u_int_decl@/typedef unsigned int u_int;/
/@u_long_decl@/{
s/@u_long_decl@/typedef unsigned long u_long;/
a\\
- #endif
+#endif
+}
+/@ssize_t_decl@/{
+ i\\
+#if defined(_WIN64)\\
+typedef __int64 ssize_t;\\
+#else\\
+typedef int ssize_t;\\
+#endif
+ d
}
-s/@ssize_t_decl@/typedef int ssize_t;/
s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/
s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/
s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/
s/@DB_VERSION_STRING@/"$DB_VERSION_STRING"/
+s/@DB_VERSION_UNIQUE_NAME@//
+s/@DB_CONST@//
+s/@DB_PROTO1@/#undef __P/
+s/@DB_PROTO2@/#define __P(protos) protos/
+ENDOFSEDTEXT
+(echo "$msgc" &&
+ sed -f $s ../dbinc/db.in &&
+ cat ../dbinc_auto/rpc_defs.in &&
+ cat ../dbinc_auto/ext_prot.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+f=../build_win32/db_cxx.h
+cat <<ENDOFSEDTEXT > $s
+s/@cxx_have_stdheaders@/#define HAVE_CXX_STDHEADERS 1/
ENDOFSEDTEXT
-(echo "$msgc" && sed -f $t ../include/db.src) > $f
-chmod 444 $f
+(echo "$msgc" && sed -f $s ../dbinc/db_cxx.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
f=../build_win32/db_int.h
-echo "Building $f"
-rm -f $f
-cat <<ENDOFSEDTEXT > $t
-s/\(PATH_SEPARATOR[^"]*"\)\/"/\1\\\\\\\\\\/:\"/
+cat <<ENDOFSEDTEXT > $s
+s/@PATH_SEPARATOR@/\\\\\\\\\/:/
s/@db_align_t_decl@/typedef unsigned long db_align_t;/
s/@db_alignp_t_decl@/typedef unsigned long db_alignp_t;/
+s/@db_int_def@//
ENDOFSEDTEXT
-(echo "$msgc" && sed -f $t ../include/db_int.src) > $f
-chmod 444 $f
+(echo "$msgc" && sed -f $s ../dbinc/db_int.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+f=../build_win32/db_config.h
+(echo "$msgc" && sed "s/__EDIT_DB_VERSION__/$DB_VERSION/" win_config.in) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
f=../build_win32/libdb.rc
-echo "Building $f"
-rm -f $f
-cat <<ENDOFSEDTEXT > $t
+cat <<ENDOFSEDTEXT > $s
s/%MAJOR%/$DB_VERSION_MAJOR/
s/%MINOR%/$DB_VERSION_MINOR/
s/%PATCH%/$DB_VERSION_PATCH/
ENDOFSEDTEXT
-sed -f $t ../build_win32/libdbrc.src > $f
-chmod 444 $f
+sed -f $s ../build_win32/libdbrc.src > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+f=../build_win32/libdb.def
+(echo $msgw &&
+ echo &&
+ echo \
+ "DESCRIPTION 'Berkeley DB $DB_VERSION_MAJOR.$DB_VERSION_MINOR Library'" &&
+ echo &&
+ echo EXPORTS;
+a=1
+for i in `sed -e '/^$/d' -e '/^#/d' win_exports.in`; do
+ echo " $i @$a"
+ a=`expr $a + 1`
+done) > $t
+cmp $t $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $t $f && chmod 444 $f)
+
+f=../build_win32/win_db.h
+i=win_db.in
+cmp $i $f > /dev/null 2>&1 ||
+ (echo "Building $f" && rm -f $f && cp $i $f && chmod 444 $f)
-rm -f $t
+rm -f $s $t
diff --git a/db/dist/s_win32_dsp b/db/dist/s_win32_dsp
index 8abee7c1a..cd9ce00f0 100644
--- a/db/dist/s_win32_dsp
+++ b/db/dist/s_win32_dsp
@@ -1,5 +1,5 @@
#!/bin/sh -
-# $Id: s_win32_dsp,v 1.3 2000/12/02 04:36:47 dda Exp $
+# $Id: s_win32_dsp,v 1.10 2003/03/24 10:35:21 mjc Exp $
#
# Build Windows/32 .dsp files.
@@ -18,7 +18,6 @@ create_dsp()
dspoutput=$BUILDDIR/$projname.dsp
- echo "Building $dspoutput"
rm -f $dspoutput.insert
for srcpath in `egrep "$match" $sources | sed -e 's/[ ].*//'`
do
@@ -42,22 +41,26 @@ create_dsp()
-e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/g" \
-e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/g" \
< $dsptemplate > $dspoutput.new
- rm -f $dspoutput $dspoutput.insert
- mv $dspoutput.new $dspoutput
+
+ # Set the file mode to 644 because the VC++ IDE needs a writeable file
+ # in our development environment.
+ cmp $dspoutput.new $dspoutput > /dev/null 2>&1 ||
+ (echo "Building $dspoutput" && rm -f $dspoutput &&
+ cp $dspoutput.new $dspoutput && chmod 664 $dspoutput)
+ rm -f $dspoutput.insert $dspoutput.new
}
TMPA=/tmp/swin32dsp$$a
-trap "rm -f $TMPA; exit 1" 1 2 3 15
+trap "rm -f $TMPA; exit 1" 1 2 3 15
-# create a copy of the srcfiles with comments and 'skip' lines removed.
+# create a copy of the srcfiles with comments and empty lines removed.
# add a space at the end of each list of modules so that each module
# can be unambiguously matched e.g. ' dynamic '
-#
sed -e "s/#.*$//" \
-e "/^[ ]*$/d" \
-e "s/[ ][ ]*/ /" \
-e "s/[ ]*$//" \
- -e "/ skip$/d" \
+ -e "/[ ]/!d" \
-e "s/$/ /" < $SRCFILES > $TMPA
# get a list of all modules mentioned
@@ -72,6 +75,14 @@ do
create_dsp db_dll " $module " $TMPA \
$BUILDDIR/dynamic_dsp.src $BUILDDIR/srcfile_dsp.src
;;
+ small )
+ create_dsp db_small " $module " $TMPA \
+ $BUILDDIR/small_dsp.src $BUILDDIR/srcfile_dsp.src
+ ;;
+ static )
+ create_dsp db_static " $module " $TMPA \
+ $BUILDDIR/static_dsp.src $BUILDDIR/srcfile_dsp.src
+ ;;
java )
create_dsp db_java " $module " $TMPA \
$BUILDDIR/java_dsp.src $BUILDDIR/srcfile_dsp.src
@@ -80,15 +91,22 @@ do
create_dsp db_tcl " $module " $TMPA \
$BUILDDIR/tcl_dsp.src $BUILDDIR/srcfile_dsp.src
;;
- static )
- create_dsp db_static " $module " $TMPA \
- $BUILDDIR/static_dsp.src $BUILDDIR/srcfile_dsp.src
+ testutil )
+ create_dsp db_test " $module " $TMPA \
+ $BUILDDIR/db_test.src $BUILDDIR/srcfile_dsp.src
;;
app=* )
appname=`echo $module | sed -e 's/^app=//'`
+ if [ -f $BUILDDIR/$appname.src ] ; then
+ srcname=$BUILDDIR/$appname.src
+ else
+ srcname=$BUILDDIR/app_dsp.src
+ fi
create_dsp $appname " $module " $TMPA \
- $BUILDDIR/app_dsp.src $BUILDDIR/srcfile_dsp.src
+ $srcname $BUILDDIR/srcfile_dsp.src
;;
+ vx )
+ ;;
* )
echo "s_win32_dsp: module name $module in $SRCFILES is unknown type"
;;
diff --git a/db/dist/srcfiles.in b/db/dist/srcfiles.in
index bfc564e13..3eb8733a3 100644
--- a/db/dist/srcfiles.in
+++ b/db/dist/srcfiles.in
@@ -1,8 +1,8 @@
-# $Id: srcfiles.in,v 1.7 2000/11/30 18:42:21 dda Exp $
+# $Id: srcfiles.in,v 1.69 2003/11/21 02:24:47 bostic Exp $
#
-# This is an input file for the s_win32_dsp script. It describes every
-# source files used by Windows, and lists those that aren't as well,
-# as a completeness sanity check.
+# This is an input file for the s_win32_dsp and s_vxworks scripts. It lists
+# the source files in the Berkeley DB tree and notes which are used to build
+# the Win/32 and VxWorks libraries.
#
# Please keep this list sorted alphabetically!
#
@@ -11,259 +11,323 @@
#
# The possible modules, including the name of the project (.dsp) file:
#
-# app=NAME this is linked into application NAME.exe (db_NAME.dsp)
-# dynamic file appears in the DLL (db_dll.dsp)
-# java file appears in the java DLL (db_java.dsp)
-# skip this file is not used by Windows
-# static file appears in the static library (db_static.dsp)
-# tcl file appears in the tcl DLL (db_tcl.dsp)
+# app=NAME Linked into application NAME.exe (db_NAME.dsp)
+# dynamic File is in the Windows DLL (db_dll.dsp)
+# small File is in the small Windows library (db_small.dsp)
+# static File is in the Windows static library (db_static.dsp)
+# java File is in the Windows Java DLL (db_java.dsp)
+# tcl File is in the Windows tcl DLL (db_tcl.dsp)
+# testutil File is used for Windows testing (db_test.dsp)
+# vx File is in the VxWorks library.
-btree/bt_compare.c dynamic static
-btree/bt_conv.c dynamic static
-btree/bt_curadj.c dynamic static
-btree/bt_cursor.c dynamic static
-btree/bt_delete.c dynamic static
-btree/bt_method.c dynamic static
-btree/bt_open.c dynamic static
-btree/bt_put.c dynamic static
-btree/bt_rec.c dynamic static
-btree/bt_reclaim.c dynamic static
-btree/bt_recno.c dynamic static
-btree/bt_rsearch.c dynamic static
-btree/bt_search.c dynamic static
-btree/bt_split.c dynamic static
-btree/bt_stat.c dynamic static
-btree/bt_upgrade.c dynamic static
-btree/bt_verify.c dynamic static
-btree/btree_auto.c dynamic static
-build_win32/dbkill.cpp skip
-build_win32/dllmain.c dynamic
-build_win32/libdb.def dynamic
-build_win32/libdb.rc dynamic
-build_win32/libdb_tcl.def tcl
-clib/getcwd.c skip
-clib/getopt.c skip # must be linked into each app
-clib/memcmp.c skip
-clib/memmove.c skip
-clib/raise.c skip
-clib/snprintf.c skip
-clib/strcasecmp.c dynamic static
-clib/strerror.c skip
-clib/vsnprintf.c skip
-common/db_byteorder.c dynamic static
-common/db_err.c dynamic static
-common/db_getlong.c dynamic static
-common/db_log2.c dynamic static
-common/util_log.c dynamic static
-common/util_sig.c dynamic static
-cxx/cxx_app.cpp dynamic static
-cxx/cxx_except.cpp dynamic static
-cxx/cxx_lock.cpp dynamic static
-cxx/cxx_log.cpp dynamic static
-cxx/cxx_mpool.cpp dynamic static
-cxx/cxx_table.cpp dynamic static
-cxx/cxx_txn.cpp dynamic static
-db/crdel_auto.c dynamic static
-db/crdel_rec.c dynamic static
-db/db.c dynamic static
-db/db_am.c dynamic static
-db/db_auto.c dynamic static
-db/db_cam.c dynamic static
-db/db_conv.c dynamic static
-db/db_dispatch.c dynamic static
-db/db_dup.c dynamic static
-db/db_iface.c dynamic static
-db/db_join.c dynamic static
-db/db_meta.c dynamic static
-db/db_method.c dynamic static
-db/db_overflow.c dynamic static
-db/db_pr.c dynamic static
-db/db_rec.c dynamic static
-db/db_reclaim.c dynamic static
-db/db_ret.c dynamic static
-db/db_upg.c dynamic static
-db/db_upg_opd.c dynamic static
-db/db_vrfy.c dynamic static
-db/db_vrfyutil.c dynamic static
-db185/db185.c skip
-db_archive/db_archive.c app=db_archive
-db_checkpoint/db_checkpoint.c app=db_checkpoint
-db_deadlock/db_deadlock.c app=db_deadlock
-db_dump/db_dump.c app=db_dump
-db_dump185/db_dump185.c skip
-db_load/db_load.c app=db_load
-db_printlog/db_printlog.c app=db_printlog
-db_recover/db_recover.c app=db_recover
-db_stat/db_stat.c app=db_stat
-db_upgrade/db_upgrade.c app=db_upgrade
-db_verify/db_verify.c app=db_verify
-dbm/dbm.c dynamic static
-env/db_salloc.c dynamic static
-env/db_shash.c dynamic static
-env/env_method.c dynamic static
-env/env_open.c dynamic static
-env/env_recover.c dynamic static
-env/env_region.c dynamic static
-examples_c/ex_access.c app=ex_access
-examples_c/ex_btrec.c app=ex_btrec
-examples_c/ex_dbclient.c skip
-examples_c/ex_env.c app=ex_env
-examples_c/ex_lock.c app=ex_lock
-examples_c/ex_mpool.c app=ex_mpool
-examples_c/ex_thread.c skip
-examples_c/ex_tpcb.c app=ex_tpcb
-examples_cxx/AccessExample.cpp app=excxx_access
-examples_cxx/BtRecExample.cpp app=excxx_btrec
-examples_cxx/EnvExample.cpp app=excxx_env
-examples_cxx/LockExample.cpp app=excxx_lock
-examples_cxx/MpoolExample.cpp app=excxx_mpool
-examples_cxx/TpcbExample.cpp app=excxx_tpcb
-hash/hash.c dynamic static
-hash/hash_auto.c dynamic static
-hash/hash_conv.c dynamic static
-hash/hash_dup.c dynamic static
-hash/hash_func.c dynamic static
-hash/hash_meta.c dynamic static
-hash/hash_method.c dynamic static
-hash/hash_page.c dynamic static
-hash/hash_rec.c dynamic static
-hash/hash_reclaim.c dynamic static
-hash/hash_stat.c dynamic static
-hash/hash_upgrade.c dynamic static
-hash/hash_verify.c dynamic static
-hsearch/hsearch.c dynamic static
-libdb_java/java_Db.c java
-libdb_java/java_DbEnv.c java
-libdb_java/java_DbLock.c java
-libdb_java/java_DbLsn.c java
-libdb_java/java_DbTxn.c java
-libdb_java/java_Dbc.c java
-libdb_java/java_Dbt.c java
-libdb_java/java_info.c java
-libdb_java/java_locked.c java
-libdb_java/java_util.c java
-lock/lock.c dynamic static
-lock/lock_conflict.c dynamic static
-lock/lock_deadlock.c dynamic static
-lock/lock_method.c dynamic static
-lock/lock_region.c dynamic static
-lock/lock_stat.c dynamic static
-lock/lock_util.c dynamic static
-log/log.c dynamic static
-log/log_archive.c dynamic static
-log/log_auto.c dynamic static
-log/log_compare.c dynamic static
-log/log_findckp.c dynamic static
-log/log_get.c dynamic static
-log/log_method.c dynamic static
-log/log_put.c dynamic static
-log/log_rec.c dynamic static
-log/log_register.c dynamic static
-mp/mp_alloc.c dynamic static
-mp/mp_bh.c dynamic static
-mp/mp_fget.c dynamic static
-mp/mp_fopen.c dynamic static
-mp/mp_fput.c dynamic static
-mp/mp_fset.c dynamic static
-mp/mp_method.c dynamic static
-mp/mp_region.c dynamic static
-mp/mp_register.c dynamic static
-mp/mp_stat.c dynamic static
-mp/mp_sync.c dynamic static
-mp/mp_trickle.c dynamic static
-mutex/mut_fcntl.c skip
-mutex/mut_pthread.c skip
-mutex/mut_tas.c dynamic static
-mutex/mutex.c dynamic static
-os/os_abs.c skip
-os/os_alloc.c dynamic static
-os/os_dir.c skip
-os/os_errno.c skip
-os/os_fid.c skip
-os/os_finit.c skip
-os/os_fsync.c dynamic static
-os/os_handle.c dynamic static
-os/os_map.c skip
-os/os_method.c dynamic static
-os/os_oflags.c dynamic static
-os/os_open.c skip
-os/os_region.c dynamic static
-os/os_rename.c skip
-os/os_root.c dynamic static
-os/os_rpath.c dynamic static
-os/os_rw.c dynamic static
-os/os_seek.c skip
-os/os_sleep.c skip
-os/os_spin.c skip
-os/os_stat.c dynamic static
-os/os_tmpdir.c dynamic static
-os/os_unlink.c dynamic static
-os_vxworks/os_abs.c skip
-os_vxworks/os_finit.c skip
-os_vxworks/os_map.c skip
-os_win32/os_abs.c dynamic static
-os_win32/os_dir.c dynamic static
-os_win32/os_errno.c dynamic static
-os_win32/os_fid.c dynamic static
-os_win32/os_finit.c dynamic static
-os_win32/os_map.c dynamic static
-os_win32/os_open.c dynamic static
-os_win32/os_rename.c dynamic static
-os_win32/os_seek.c dynamic static
-os_win32/os_sleep.c dynamic static
-os_win32/os_spin.c dynamic static
-os_win32/os_type.c dynamic static
-qam/qam.c dynamic static
-qam/qam_auto.c dynamic static
-qam/qam_conv.c dynamic static
-qam/qam_files.c dynamic static
-qam/qam_method.c dynamic static
-qam/qam_open.c dynamic static
-qam/qam_rec.c dynamic static
-qam/qam_stat.c dynamic static
-qam/qam_upgrade.c dynamic static
-qam/qam_verify.c dynamic static
-rpc_client/client.c skip
-rpc_client/db_server_clnt.c skip
-rpc_client/gen_client.c skip
-rpc_client/gen_client_ret.c skip
-rpc_server/db_server_proc.c skip
-rpc_server/db_server_svc.c skip
-rpc_server/db_server_util.c skip
-rpc_server/db_server_xdr.c skip
-rpc_server/gen_db_server.c skip
-tcl/tcl_compat.c tcl
-tcl/tcl_db.c tcl
-tcl/tcl_db_pkg.c tcl
-tcl/tcl_dbcursor.c tcl
-tcl/tcl_env.c tcl
-tcl/tcl_internal.c tcl
-tcl/tcl_lock.c tcl
-tcl/tcl_log.c tcl
-tcl/tcl_mp.c tcl
-tcl/tcl_txn.c tcl
-test_server/dbs.c skip
-test_server/dbs_am.c skip
-test_server/dbs_checkpoint.c skip
-test_server/dbs_debug.c skip
-test_server/dbs_handles.c skip
-test_server/dbs_log.c skip
-test_server/dbs_qam.c skip
-test_server/dbs_spawn.c skip
-test_server/dbs_trickle.c skip
-test_server/dbs_util.c skip
-test_server/dbs_yield.c skip
-test_thread/lock.c skip
-test_thread/log.c skip
-test_thread/mpool.c skip
-test_thread/mutex.c skip
-test_vxworks/vx_mutex.c skip
-test_vxworks/vxtpcb_files.c skip
-test_vxworks/vxtpcb_onefile.c skip
-txn/txn.c dynamic static
-txn/txn_auto.c dynamic static
-txn/txn_rec.c dynamic static
-txn/txn_region.c dynamic static
-xa/xa.c dynamic static
-xa/xa_db.c dynamic static
-xa/xa_map.c dynamic static
+btree/bt_compare.c dynamic small static vx
+btree/bt_conv.c dynamic small static vx
+btree/bt_curadj.c dynamic small static vx
+btree/bt_cursor.c dynamic small static vx
+btree/bt_delete.c dynamic small static vx
+btree/bt_method.c dynamic small static vx
+btree/bt_open.c dynamic small static vx
+btree/bt_put.c dynamic small static vx
+btree/bt_rec.c dynamic small static vx
+btree/bt_reclaim.c dynamic small static vx
+btree/bt_recno.c dynamic small static vx
+btree/bt_rsearch.c dynamic small static vx
+btree/bt_search.c dynamic small static vx
+btree/bt_split.c dynamic small static vx
+btree/bt_stat.c dynamic small static vx
+btree/bt_upgrade.c dynamic small static vx
+btree/bt_verify.c dynamic static vx
+btree/btree_auto.c dynamic small static vx
+build_vxworks/db_archive/db_archive.c
+build_vxworks/db_checkpoint/db_checkpoint.c
+build_vxworks/db_deadlock/db_deadlock.c
+build_vxworks/db_dump/db_dump.c
+build_vxworks/db_load/db_load.c
+build_vxworks/db_printlog/db_printlog.c
+build_vxworks/db_recover/db_recover.c
+build_vxworks/db_stat/db_stat.c
+build_vxworks/db_upgrade/db_upgrade.c
+build_vxworks/db_verify/db_verify.c
+build_vxworks/dbdemo/dbdemo.c
+build_win32/dbkill.cpp testutil
+build_win32/libdb.def dynamic
+build_win32/libdb.rc dynamic
+build_win32/libdb_tcl.def tcl
+clib/getcwd.c
+clib/getopt.c vx
+clib/memcmp.c
+clib/memmove.c
+clib/raise.c
+clib/snprintf.c vx
+clib/strcasecmp.c dynamic small static vx
+clib/strdup.c vx
+clib/strerror.c
+clib/vsnprintf.c vx
+common/crypto_stub.c small
+common/db_byteorder.c dynamic small static vx
+common/db_err.c dynamic small static vx
+common/db_getlong.c dynamic small static vx
+common/db_idspace.c dynamic small static vx
+common/db_log2.c dynamic small static vx
+common/util_arg.c vx
+common/util_cache.c dynamic small static vx
+common/util_log.c dynamic small static vx
+common/util_sig.c dynamic small static vx
+crypto/aes_method.c dynamic static vx
+crypto/crypto.c dynamic static vx
+crypto/mersenne/mt19937db.c dynamic static vx
+crypto/rijndael/rijndael-alg-fst.c dynamic static vx
+crypto/rijndael/rijndael-api-fst.c dynamic static vx
+cxx/cxx_db.cpp dynamic small static
+cxx/cxx_dbc.cpp dynamic small static
+cxx/cxx_dbt.cpp dynamic small static
+cxx/cxx_env.cpp dynamic small static
+cxx/cxx_except.cpp dynamic small static
+cxx/cxx_lock.cpp dynamic small static
+cxx/cxx_logc.cpp dynamic small static
+cxx/cxx_mpool.cpp dynamic small static
+cxx/cxx_multi.cpp dynamic small static
+cxx/cxx_txn.cpp dynamic small static
+db/crdel_auto.c dynamic small static vx
+db/crdel_rec.c dynamic small static vx
+db/db.c dynamic small static vx
+db/db_am.c dynamic small static vx
+db/db_auto.c dynamic small static vx
+db/db_cam.c dynamic small static vx
+db/db_conv.c dynamic small static vx
+db/db_dispatch.c dynamic small static vx
+db/db_dup.c dynamic small static vx
+db/db_iface.c dynamic small static vx
+db/db_join.c dynamic small static vx
+db/db_meta.c dynamic small static vx
+db/db_method.c dynamic small static vx
+db/db_open.c dynamic small static vx
+db/db_overflow.c dynamic small static vx
+db/db_ovfl_vrfy.c dynamic static vx
+db/db_pr.c dynamic small static vx
+db/db_rec.c dynamic small static vx
+db/db_reclaim.c dynamic small static vx
+db/db_remove.c dynamic small static vx
+db/db_rename.c dynamic small static vx
+db/db_ret.c dynamic small static vx
+db/db_truncate.c dynamic small static vx
+db/db_upg.c dynamic small static vx
+db/db_upg_opd.c dynamic small static vx
+db/db_vrfy.c dynamic static vx
+db/db_vrfy_stub.c small
+db/db_vrfyutil.c dynamic static vx
+db185/db185.c
+db_archive/db_archive.c app=db_archive
+db_checkpoint/db_checkpoint.c app=db_checkpoint
+db_deadlock/db_deadlock.c app=db_deadlock
+db_dump/db_dump.c app=db_dump
+db_dump185/db_dump185.c
+db_load/db_load.c app=db_load
+db_printlog/db_printlog.c app=db_printlog
+db_recover/db_recover.c app=db_recover
+db_stat/db_stat.c app=db_stat
+db_upgrade/db_upgrade.c app=db_upgrade
+db_verify/db_verify.c app=db_verify
+dbm/dbm.c dynamic static
+dbreg/dbreg.c dynamic small static vx
+dbreg/dbreg_auto.c dynamic small static vx
+dbreg/dbreg_rec.c dynamic small static vx
+dbreg/dbreg_util.c dynamic small static vx
+env/db_salloc.c dynamic small static vx
+env/db_shash.c dynamic small static vx
+env/env_file.c dynamic small static vx
+env/env_method.c dynamic small static vx
+env/env_open.c dynamic small static vx
+env/env_recover.c dynamic small static vx
+env/env_region.c dynamic small static vx
+examples_c/bench_001.c
+examples_c/ex_access.c app=ex_access
+examples_c/ex_apprec/ex_apprec.c
+examples_c/ex_apprec/ex_apprec_auto.c
+examples_c/ex_apprec/ex_apprec_rec.c
+examples_c/ex_btrec.c app=ex_btrec
+examples_c/ex_dbclient.c
+examples_c/ex_env.c app=ex_env
+examples_c/ex_lock.c app=ex_lock
+examples_c/ex_mpool.c app=ex_mpool
+examples_c/ex_repquote/ex_rq_client.c app=ex_repquote
+examples_c/ex_repquote/ex_rq_main.c app=ex_repquote
+examples_c/ex_repquote/ex_rq_master.c app=ex_repquote
+examples_c/ex_repquote/ex_rq_net.c app=ex_repquote
+examples_c/ex_repquote/ex_rq_util.c app=ex_repquote
+examples_c/ex_thread.c
+examples_c/ex_tpcb.c app=ex_tpcb
+examples_cxx/AccessExample.cpp app=excxx_access
+examples_cxx/BtRecExample.cpp app=excxx_btrec
+examples_cxx/EnvExample.cpp app=excxx_env
+examples_cxx/LockExample.cpp app=excxx_lock
+examples_cxx/MpoolExample.cpp app=excxx_mpool
+examples_cxx/TpcbExample.cpp app=excxx_tpcb
+fileops/fileops_auto.c dynamic small static vx
+fileops/fop_basic.c dynamic small static vx
+fileops/fop_rec.c dynamic small static vx
+fileops/fop_util.c dynamic small static vx
+hash/hash.c dynamic static vx
+hash/hash_auto.c dynamic static vx
+hash/hash_conv.c dynamic static vx
+hash/hash_dup.c dynamic static vx
+hash/hash_func.c dynamic small static vx
+hash/hash_meta.c dynamic static vx
+hash/hash_method.c dynamic static vx
+hash/hash_open.c dynamic static vx
+hash/hash_page.c dynamic static vx
+hash/hash_rec.c dynamic static vx
+hash/hash_reclaim.c dynamic static vx
+hash/hash_stat.c dynamic static vx
+hash/hash_stub.c small
+hash/hash_upgrade.c dynamic static vx
+hash/hash_verify.c dynamic static vx
+hmac/hmac.c dynamic small static vx
+hmac/sha1.c dynamic small static vx
+hsearch/hsearch.c dynamic static vx
+libdb_java/db_java_wrap.c java
+lock/lock.c dynamic small static vx
+lock/lock_deadlock.c dynamic small static vx
+lock/lock_method.c dynamic small static vx
+lock/lock_region.c dynamic small static vx
+lock/lock_stat.c dynamic small static vx
+lock/lock_util.c dynamic small static vx
+log/log.c dynamic small static vx
+log/log_archive.c dynamic small static vx
+log/log_compare.c dynamic small static vx
+log/log_get.c dynamic small static vx
+log/log_method.c dynamic small static vx
+log/log_put.c dynamic small static vx
+mp/mp_alloc.c dynamic small static vx
+mp/mp_bh.c dynamic small static vx
+mp/mp_fget.c dynamic small static vx
+mp/mp_fopen.c dynamic small static vx
+mp/mp_fput.c dynamic small static vx
+mp/mp_fset.c dynamic small static vx
+mp/mp_method.c dynamic small static vx
+mp/mp_region.c dynamic small static vx
+mp/mp_register.c dynamic small static vx
+mp/mp_stat.c dynamic small static vx
+mp/mp_sync.c dynamic small static vx
+mp/mp_trickle.c dynamic small static vx
+mutex/mut_fcntl.c
+mutex/mut_pthread.c
+mutex/mut_tas.c vx
+mutex/mut_win32.c dynamic small static
+mutex/mutex.c dynamic small static vx
+mutex/tm.c
+os/os_abs.c
+os/os_alloc.c dynamic small static vx
+os/os_clock.c vx
+os/os_config.c
+os/os_dir.c vx
+os/os_errno.c vx
+os/os_fid.c vx
+os/os_fsync.c vx
+os/os_handle.c vx
+os/os_id.c dynamic small static vx
+os/os_map.c
+os/os_method.c dynamic small static vx
+os/os_oflags.c dynamic small static vx
+os/os_open.c vx
+os/os_region.c dynamic small static vx
+os/os_rename.c vx
+os/os_root.c dynamic small static vx
+os/os_rpath.c dynamic small static vx
+os/os_rw.c vx
+os/os_seek.c vx
+os/os_sleep.c vx
+os/os_spin.c vx
+os/os_stat.c vx
+os/os_tmpdir.c dynamic small static vx
+os/os_unlink.c dynamic small static vx
+os_vxworks/os_vx_abs.c vx
+os_vxworks/os_vx_config.c vx
+os_vxworks/os_vx_map.c vx
+os_win32/os_abs.c dynamic small static
+os_win32/os_clock.c dynamic small static
+os_win32/os_config.c dynamic small static
+os_win32/os_dir.c dynamic small static
+os_win32/os_errno.c dynamic small static
+os_win32/os_fid.c dynamic small static
+os_win32/os_fsync.c dynamic small static
+os_win32/os_handle.c dynamic small static
+os_win32/os_map.c dynamic small static
+os_win32/os_open.c dynamic small static
+os_win32/os_rename.c dynamic small static
+os_win32/os_rw.c dynamic small static
+os_win32/os_seek.c dynamic small static
+os_win32/os_sleep.c dynamic small static
+os_win32/os_spin.c dynamic small static
+os_win32/os_stat.c dynamic small static
+qam/qam.c dynamic static vx
+qam/qam_auto.c dynamic static vx
+qam/qam_conv.c dynamic static vx
+qam/qam_files.c dynamic static vx
+qam/qam_method.c dynamic static vx
+qam/qam_open.c dynamic static vx
+qam/qam_rec.c dynamic static vx
+qam/qam_stat.c dynamic static vx
+qam/qam_stub.c small
+qam/qam_upgrade.c dynamic static vx
+qam/qam_verify.c dynamic static vx
+rep/rep_method.c dynamic static vx
+rep/rep_record.c dynamic static vx
+rep/rep_region.c dynamic static vx
+rep/rep_stub.c small
+rep/rep_util.c dynamic static vx
+rpc_client/client.c vx
+rpc_client/db_server_clnt.c vx
+rpc_client/gen_client.c vx
+rpc_client/gen_client_ret.c vx
+rpc_server/c/db_server_proc.c
+rpc_server/c/db_server_svc.c
+rpc_server/c/db_server_util.c
+rpc_server/c/db_server_xdr.c vx
+rpc_server/c/gen_db_server.c
+rpc_server/cxx/db_server_cxxproc.cpp
+rpc_server/cxx/db_server_cxxutil.cpp
+tcl/tcl_compat.c tcl
+tcl/tcl_db.c tcl
+tcl/tcl_db_pkg.c tcl
+tcl/tcl_dbcursor.c tcl
+tcl/tcl_env.c tcl
+tcl/tcl_internal.c tcl
+tcl/tcl_lock.c tcl
+tcl/tcl_log.c tcl
+tcl/tcl_mp.c tcl
+tcl/tcl_rep.c tcl
+tcl/tcl_txn.c tcl
+tcl/tcl_util.c tcl
+test_perf/db_perf.c app=db_perf
+test_perf/perf_checkpoint.c app=db_perf
+test_perf/perf_config.c app=db_perf
+test_perf/perf_dbs.c app=db_perf
+test_perf/perf_dead.c app=db_perf
+test_perf/perf_debug.c app=db_perf
+test_perf/perf_file.c app=db_perf
+test_perf/perf_key.c app=db_perf
+test_perf/perf_log.c app=db_perf
+test_perf/perf_misc.c app=db_perf
+test_perf/perf_op.c app=db_perf
+test_perf/perf_parse.c app=db_perf
+test_perf/perf_rand.c app=db_perf
+test_perf/perf_spawn.c app=db_perf
+test_perf/perf_stat.c app=db_perf
+test_perf/perf_sync.c app=db_perf
+test_perf/perf_thread.c app=db_perf
+test_perf/perf_trickle.c app=db_perf
+test_perf/perf_txn.c app=db_perf
+test_perf/perf_util.c app=db_perf
+test_perf/perf_vx.c
+txn/txn.c dynamic small static vx
+txn/txn_auto.c dynamic small static vx
+txn/txn_method.c dynamic small static vx
+txn/txn_rec.c dynamic small static vx
+txn/txn_recover.c dynamic small static vx
+txn/txn_region.c dynamic small static vx
+txn/txn_stat.c dynamic small static vx
+txn/txn_util.c dynamic small static vx
+xa/xa.c dynamic small static vx
+xa/xa_db.c dynamic small static vx
+xa/xa_map.c dynamic small static vx
diff --git a/db/dist/tags b/db/dist/tags
index b6fe89e6d..a08477953 100644
--- a/db/dist/tags
+++ b/db/dist/tags
@@ -1,1217 +1,1789 @@
ACQUIRE ../btree/bt_cursor.c /^#define ACQUIRE(dbc, mode, lpgno, lock, fpgno, pag/
-ACQUIRE_CUR ../btree/bt_cursor.c /^#define ACQUIRE_CUR(dbc, mode, ret) { \\$/
-ACQUIRE_CUR_SET ../btree/bt_cursor.c /^#define ACQUIRE_CUR_SET(dbc, mode, p, ret) { \\/
+ACQUIRE_COUPLE ../btree/bt_cursor.c /^#define ACQUIRE_COUPLE(dbc, mode, lpgno, lock, fpg/
+ACQUIRE_CUR ../btree/bt_cursor.c /^#define ACQUIRE_CUR(dbc, mode, p, ret) { \\$/
+ACQUIRE_CUR_COUPLE ../btree/bt_cursor.c /^#define ACQUIRE_CUR_COUPLE(dbc, mode, p, ret) { /
ACQUIRE_WRITE_LOCK ../btree/bt_cursor.c /^#define ACQUIRE_WRITE_LOCK(dbc, ret) { \\$/
-ACTION ../include/db.in /^} ACTION;$/
-ACTIVATE_CTP ../include/db_server_int.h /^#define ACTIVATE_CTP(ctp, id, type) { \\$/
-ALIGN ../include/db_int.in /^#define ALIGN(value, bound) \\$/
-ALIGNP ../include/db_int.in /^#define ALIGNP(value, bound) ALIGN((db_alignp_t)va/
-APPNAME ../include/db_int.in /^} APPNAME;$/
-BACKUP_PREFIX ../db/db.c /^#define BACKUP_PREFIX "__db."$/
-BADARG ../clib/getopt.c /^#define BADARG (int)':'$/
-BADCH ../clib/getopt.c /^#define BADCH (int)'?'$/
-BAD_KILLID ../lock/lock_deadlock.c /^#define BAD_KILLID 0xffffffff$/
-BFMSG ../db185/db185.c /^#define BFMSG "DB: DB 1.85's recno bfname field is/
-BH ../include/mp.h /^struct __bh; typedef struct __bh BH;$/
-BH_CALLPGIN ../include/mp.h /^#define BH_CALLPGIN 0x001 \/* Page needs to be re/
-BH_DIRTY ../include/mp.h /^#define BH_DIRTY 0x002 \/* Page was modified. *\//
-BH_DISCARD ../include/mp.h /^#define BH_DISCARD 0x004 \/* Page is useless. *\//
-BH_LOCKED ../include/mp.h /^#define BH_LOCKED 0x008 \/* Page is locked (I\/O /
-BH_SYNC ../include/mp.h /^#define BH_SYNC 0x010 \/* memp sync: write the p/
-BH_SYNC_LOGFLSH ../include/mp.h /^#define BH_SYNC_LOGFLSH 0x020 \/* memp sync: also/
-BH_TO_CACHE ../include/mp.h /^#define BH_TO_CACHE(dbmp, bhp) \\$/
-BH_TRASH ../include/mp.h /^#define BH_TRASH 0x040 \/* Page is garbage. *\/$/
-BINTERNAL ../include/db_page.h /^} BINTERNAL;$/
-BINTERNAL_PSIZE ../include/db_page.h /^#define BINTERNAL_PSIZE(len) \\$/
-BINTERNAL_SIZE ../include/db_page.h /^#define BINTERNAL_SIZE(len) \\$/
-BI_DELETED ../include/btree.h /^#define BI_DELETED 0x01 \/* Key\/data pair only p/
-BKEYDATA ../include/db_page.h /^} BKEYDATA;$/
-BKEYDATA_PSIZE ../include/db_page.h /^#define BKEYDATA_PSIZE(len) \\$/
-BKEYDATA_SIZE ../include/db_page.h /^#define BKEYDATA_SIZE(len) \\$/
-BOVERFLOW ../include/db_page.h /^} BOVERFLOW;$/
-BOVERFLOW_PSIZE ../include/db_page.h /^#define BOVERFLOW_PSIZE \\$/
-BOVERFLOW_SIZE ../include/db_page.h /^#define BOVERFLOW_SIZE \\$/
-BS_TO_PAGE ../include/hash.h /^#define BS_TO_PAGE(bucket, spares) \\$/
-BTMETA ../include/db_page.h /^} BTMETA31, BTMETA;$/
-BTMETA2X ../include/db_upgrade.h /^} BTMETA2X;$/
-BTMETA30 ../include/db_upgrade.h /^} BTMETA30;$/
-BTM_DUP ../include/db_page.h /^#define BTM_DUP 0x001 \/* Duplicates. *\/$/
-BTM_DUPSORT ../include/db_page.h /^#define BTM_DUPSORT 0x040 \/* Duplicates are sor/
-BTM_FIXEDLEN ../include/db_page.h /^#define BTM_FIXEDLEN 0x008 \/* Recno: fixed leng/
-BTM_MASK ../include/db_page.h /^#define BTM_MASK 0x07f$/
-BTM_RECNO ../include/db_page.h /^#define BTM_RECNO 0x002 \/* Recno tree. *\/$/
-BTM_RECNUM ../include/db_page.h /^#define BTM_RECNUM 0x004 \/* Btree: maintain rec/
-BTM_RENUMBER ../include/db_page.h /^#define BTM_RENUMBER 0x010 \/* Recno: renumber o/
-BTM_SUBDB ../include/db_page.h /^#define BTM_SUBDB 0x020 \/* Subdatabases. *\/$/
-BTREE ../include/btree.h /^struct __btree; typedef struct __btree BTREE;$/
-BTREEINFO ../include/db_185.in /^} BTREEINFO;$/
-BTREEMAGIC ../include/db_185.in /^#define BTREEMAGIC 0x053162$/
-BTREEVERSION ../include/db_185.in /^#define BTREEVERSION 3$/
-BTREE_CURSOR ../include/btree.h /^struct __cursor; typedef struct __cursor BTREE_CUR/
-BT_STK_CLR ../include/btree.h /^#define BT_STK_CLR(c) do { \\$/
-BT_STK_ENTER ../include/btree.h /^#define BT_STK_ENTER(dbenv, c, pagep, page_indx, l/
-BT_STK_NUM ../include/btree.h /^#define BT_STK_NUM(dbenv, c, pagep, page_indx, ret/
-BT_STK_NUMPUSH ../include/btree.h /^#define BT_STK_NUMPUSH(dbenv, c, pagep, page_indx,/
-BT_STK_POP ../include/btree.h /^#define BT_STK_POP(c) \\$/
-BT_STK_PUSH ../include/btree.h /^#define BT_STK_PUSH(dbenv, c, pagep, page_indx, lo/
-BUCKET_INVALID ../include/hash.h /^#define BUCKET_INVALID 0xFFFFFFFF$/
-BUCKET_TO_PAGE ../include/hash.h /^#define BUCKET_TO_PAGE(I, B) (BS_TO_PAGE((B), (I)-/
-B_DCLR ../include/db_page.h /^#define B_DCLR(t) (t) &= ~B_DELETE$/
-B_DELETE ../include/db_page.h /^#define B_DELETE (0x80)$/
-B_DISSET ../include/db_page.h /^#define B_DISSET(t) ((t) & B_DELETE)$/
-B_DSET ../include/db_page.h /^#define B_DSET(t) (t) |= B_DELETE$/
-B_DUPLICATE ../include/db_page.h /^#define B_DUPLICATE 2 \/* Duplicate key\/data item/
-B_KEYDATA ../include/db_page.h /^#define B_KEYDATA 1 \/* Key\/data item. *\/$/
-B_MAX ../include/btree.h /^#define B_MAX(a,b) (((a) > (b)) ? (a) : (b))$/
-B_MAXSIZEONPAGE ../include/btree.h /^#define B_MAXSIZEONPAGE(ovflsize) \\$/
-B_MINKEY_TO_OVFLSIZE ../include/btree.h /^#define B_MINKEY_TO_OVFLSIZE(minkey, pgsize) \\/
-B_OVERFLOW ../include/db_page.h /^#define B_OVERFLOW 3 \/* Overflow key\/data item. /
-B_TSET ../include/db_page.h /^#define B_TSET(t, type, deleted) { \\$/
-B_TYPE ../include/db_page.h /^#define B_TYPE(t) ((t) & ~B_DELETE)$/
-C ../include/db_cxx.h /^\/\/ we allow you to declare the callbacks in C++ /
-CAD_UPDATEROOT ../include/btree.h /^#define CAD_UPDATEROOT 0x01 \/* Root page count w/
-CALC_QAM_RECNO_PER_PAGE ../include/qam.h /^#define CALC_QAM_RECNO_PER_PAGE(dbp) \\$/
-CDB_LOCKING ../include/db_int.in /^#define CDB_LOCKING(dbenv) F_ISSET(dbenv, DB_ENV_C/
-CDB_LOCKING_COPY ../db/db_cam.c /^#define CDB_LOCKING_COPY(dbp, dbc_o, dbc_n) \\$/
+ACTION ../dbinc/db.in 1965
+ACTIVATE_CTP ../dbinc/db_server_int.h /^#define ACTIVATE_CTP(ctp, id, type) { \\$/
+ALIGN ../dbinc/db_int.in /^#define ALIGN(v, bound) (((v) + (bound) - 1) & ~((/
+ANYSITE ../rep/rep_record.c /^#define ANYSITE(rep)$/
+APPNAME ../dbinc/db_int.in 216
+BACKUP_PREFIX ../db/db.c 994
+BADARG ../clib/getopt.c 61
+BADCH ../clib/getopt.c 59
+BAD_BLOCK_LENGTH ../crypto/rijndael/rijndael-api-fst.h 64
+BAD_CIPHER_INSTANCE ../crypto/rijndael/rijndael-api-fst.h 65
+BAD_CIPHER_MODE ../crypto/rijndael/rijndael-api-fst.h 62
+BAD_CIPHER_STATE ../crypto/rijndael/rijndael-api-fst.h 63
+BAD_DATA ../crypto/rijndael/rijndael-api-fst.h 66
+BAD_KEY_DIR ../crypto/rijndael/rijndael-api-fst.h 59
+BAD_KEY_INSTANCE ../crypto/rijndael/rijndael-api-fst.h 61
+BAD_KEY_MAT ../crypto/rijndael/rijndael-api-fst.h 60
+BAD_KILLID ../lock/lock_deadlock.c 42
+BAD_OTHER ../crypto/rijndael/rijndael-api-fst.h 67
+BFMSG ../db185/db185.c 176
+BH ../dbinc/mp.h 13
+BH_CALLPGIN ../dbinc/mp.h 303
+BH_DIRTY ../dbinc/mp.h 304
+BH_DIRTY_CREATE ../dbinc/mp.h 305
+BH_DISCARD ../dbinc/mp.h 306
+BH_LOCKED ../dbinc/mp.h 307
+BH_TRASH ../dbinc/mp.h 308
+BINTERNAL_PSIZE ../dbinc/db_page.h /^#define BINTERNAL_PSIZE(len) \\$/
+BINTERNAL_SIZE ../dbinc/db_page.h /^#define BINTERNAL_SIZE(len) \\$/
+BITSPERBLOCK ../crypto/rijndael/rijndael-api-fst.h 56
+BI_DELETED ../dbinc/btree.h 72
+BKEYDATA_PSIZE ../dbinc/db_page.h /^#define BKEYDATA_PSIZE(len) \\$/
+BKEYDATA_SIZE ../dbinc/db_page.h /^#define BKEYDATA_SIZE(len) \\$/
+BOVERFLOW_PSIZE ../dbinc/db_page.h 588
+BOVERFLOW_SIZE ../dbinc/db_page.h 586
+BS_TO_PAGE ../dbinc/hash.h /^#define BS_TO_PAGE(bucket, spares) \\$/
+BTM_DUP ../dbinc/db_page.h 93
+BTM_DUPSORT ../dbinc/db_page.h 99
+BTM_FIXEDLEN ../dbinc/db_page.h 96
+BTM_MASK ../dbinc/db_page.h 100
+BTM_RECNO ../dbinc/db_page.h 94
+BTM_RECNUM ../dbinc/db_page.h 95
+BTM_RENUMBER ../dbinc/db_page.h 97
+BTM_SUBDB ../dbinc/db_page.h 98
+BTREE ../dbinc/btree.h 48
+BTREEMAGIC ../dbinc/db_185.in 120
+BTREEVERSION ../dbinc/db_185.in 121
+BTREE_CURSOR ../dbinc/btree.h 49
+BT_STK_CLR ../dbinc/btree.h /^#define BT_STK_CLR(c) do { \\$/
+BT_STK_ENTER ../dbinc/btree.h /^#define BT_STK_ENTER(dbenv, c, pagep, page_indx, l/
+BT_STK_NUM ../dbinc/btree.h /^#define BT_STK_NUM(dbenv, c, pagep, page_indx, ret/
+BT_STK_NUMPUSH ../dbinc/btree.h /^#define BT_STK_NUMPUSH(dbenv, c, pagep, page_indx,/
+BT_STK_POP ../dbinc/btree.h /^#define BT_STK_POP(c) \\$/
+BT_STK_PUSH ../dbinc/btree.h /^#define BT_STK_PUSH(dbenv, c, pagep, page_indx, lo/
+BUCKET_INVALID ../dbinc/hash.h 111
+BUCKET_TO_PAGE ../dbinc/hash.h /^#define BUCKET_TO_PAGE(I, B) (BS_TO_PAGE((B), (I)-/
+B_DCLR ../dbinc/db_page.h /^#define B_DCLR(t) (t) &= ~B_DELETE$/
+B_DELETE ../dbinc/db_page.h 529
+B_DISSET ../dbinc/db_page.h /^#define B_DISSET(t) ((t) & B_DELETE)$/
+B_DSET ../dbinc/db_page.h /^#define B_DSET(t) (t) |= B_DELETE$/
+B_DUPLICATE ../dbinc/db_page.h 520
+B_KEYDATA ../dbinc/db_page.h 519
+B_MAX ../dbinc/btree.h /^#define B_MAX(a,b) (((a) > (b)) ? (a) : (b))$/
+B_MAXSIZEONPAGE ../dbinc/btree.h /^#define B_MAXSIZEONPAGE(ovflsize) \\$/
+B_MINKEY_TO_OVFLSIZE ../dbinc/btree.h /^#define B_MINKEY_TO_OVFLSIZE(dbp, minkey, pgsize) /
+B_OVERFLOW ../dbinc/db_page.h 521
+B_TSET ../dbinc/db_page.h /^#define B_TSET(t, type, deleted) { \\$/
+B_TYPE ../dbinc/db_page.h /^#define B_TYPE(t) ((t) & ~B_DELETE)$/
+CAD_UPDATEROOT ../dbinc/btree.h 66
+CALC_QAM_RECNO_PER_PAGE ../dbinc/qam.h /^#define CALC_QAM_RECNO_PER_PAGE(dbp) \\$/
+CDB_LOCKING ../dbinc/db_int.in /^#define CDB_LOCKING(dbenv) F_ISSET(dbenv, DB_ENV_C/
CDB_LOCKING_DONE ../db/db_cam.c /^#define CDB_LOCKING_DONE(dbp, dbc) \\$/
CDB_LOCKING_INIT ../db/db_cam.c /^#define CDB_LOCKING_INIT(dbp, dbc) \\$/
CD_CLR ../btree/bt_recno.c /^#define CD_CLR(cp) { \\$/
CD_ISSET ../btree/bt_recno.c /^#define CD_ISSET(cp) \\$/
CD_SET ../btree/bt_recno.c /^#define CD_SET(cp) { \\$/
-CHARKEY ../include/hash.h /^#define CHARKEY "%$sniglet^&"$/
-CHECK_LSN ../include/log.h /^#define CHECK_LSN(redo, cmp, lsn, prev) \\$/
-CIRCLEQ_ENTRY ../include/queue.h /^#define CIRCLEQ_ENTRY(type) \\$/
-CIRCLEQ_FIRST ../include/queue.h /^#define CIRCLEQ_FIRST(head) ((head)->cqh_first)$/
-CIRCLEQ_HEAD ../include/queue.h /^#define CIRCLEQ_HEAD(name, type) \\$/
-CIRCLEQ_INIT ../include/queue.h /^#define CIRCLEQ_INIT(head) do { \\$/
-CIRCLEQ_INSERT_AFTER ../include/queue.h /^#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, f/
-CIRCLEQ_INSERT_BEFORE ../include/queue.h /^#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, /
-CIRCLEQ_INSERT_HEAD ../include/queue.h /^#define CIRCLEQ_INSERT_HEAD(head, elm, field) do {/
-CIRCLEQ_INSERT_TAIL ../include/queue.h /^#define CIRCLEQ_INSERT_TAIL(head, elm, field) do {/
-CIRCLEQ_LAST ../include/queue.h /^#define CIRCLEQ_LAST(head) ((head)->cqh_last)$/
-CIRCLEQ_NEXT ../include/queue.h /^#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe/
-CIRCLEQ_PREV ../include/queue.h /^#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe/
-CIRCLEQ_REMOVE ../include/queue.h /^#define CIRCLEQ_REMOVE(head, elm, field) do { /
-CLEAR_BYTE ../include/debug.h /^#define CLEAR_BYTE 0xdb$/
+CHARKEY ../dbinc/hash.h 92
+CHECK_LSN ../dbinc/log.h /^#define CHECK_LSN(redo, cmp, lsn, prev) \\$/
+CIPHER_AES ../dbinc/crypto.h 45
+CIPHER_ANY ../dbinc/crypto.h 49
+CLEAR_BYTE ../dbinc/debug.h 28
CLEAR_MAP ../lock/lock_deadlock.c /^#define CLEAR_MAP(M, N) { \\$/
-CLR_MAP ../lock/lock_deadlock.c /^#define CLR_MAP(M, B) ((M)[(B) \/ 32] &= ~(1 << ((/
-COMPQUIET ../include/db_int.in /^#define COMPQUIET(n, v) (n) = (v)$/
-CONFIG_NAME ../env/env_open.c /^#define CONFIG_NAME "\/DB_CONFIG"$/
-CONFLICTS ../include/lock.h /^#define CONFLICTS(T, R, HELD, WANTED) \\$/
-COPY_RET_MEM ../include/db_int.in /^#define COPY_RET_MEM(src, dest) \\$/
-CT_CURSOR ../include/db_server_int.h /^#define CT_CURSOR 0x001 \/* Cursor *\/$/
-CT_DB ../include/db_server_int.h /^#define CT_DB 0x002 \/* Database *\/$/
-CT_ENV ../include/db_server_int.h /^#define CT_ENV 0x004 \/* Env *\/$/
-CT_JOIN ../include/db_server_int.h /^#define CT_JOIN 0x10000000 \/* Join cursor compon/
-CT_JOINCUR ../include/db_server_int.h /^#define CT_JOINCUR 0x20000000 \/* Join cursor *\/$/
-CT_TXN ../include/db_server_int.h /^#define CT_TXN 0x008 \/* Txn *\/$/
+CLIENT_ONLY ../rep/rep_record.c /^#define CLIENT_ONLY(rep, rp) do { \\$/
+CLOSE_HANDLE ../fileops/fop_util.c /^#define CLOSE_HANDLE(D, F) { \\$/
+CLR_MAP ../lock/lock_deadlock.c /^#define CLR_MAP(M, B) ((M)[(B) \/ 32] &= ~(1 << ((B/
+COMPQUIET ../dbinc/debug.h /^#define COMPQUIET(n, v) \\$/
+CONFLICTS ../dbinc/lock.h /^#define CONFLICTS(T, R, HELD, WANTED) \\$/
+COPY_OBJ ../lock/lock.c /^#define COPY_OBJ(dp, obj) do { \\$/
+COPY_RET_MEM ../dbinc/db_int.in /^#define COPY_RET_MEM(src, dest) \\$/
+CRYPTO_ON ../dbinc/db_int.in /^#define CRYPTO_ON(dbenv) ((dbenv)->crypto_handle !/
+CT_CURSOR ../dbinc/db_server_int.h 32
+CT_DB ../dbinc/db_server_int.h 33
+CT_ENV ../dbinc/db_server_int.h 34
+CT_JOIN ../dbinc/db_server_int.h 37
+CT_JOINCUR ../dbinc/db_server_int.h 38
+CT_TXN ../dbinc/db_server_int.h 35
CURADJ_LOG ../btree/bt_recno.c /^#define CURADJ_LOG(dbc) \\$/
-C_DELETED ../include/btree.h /^#define C_DELETED 0x0001 \/* Record was deleted. /
+C_DELETED ../dbinc/btree.h 215
C_EQUAL ../btree/bt_recno.c /^#define C_EQUAL(cp1, cp2) \\$/
C_LESSTHAN ../btree/bt_recno.c /^#define C_LESSTHAN(cp1, cp2) \\$/
-C_RECNUM ../include/btree.h /^#define C_RECNUM 0x0002 \/* Tree requires record /
-C_RENUMBER ../include/btree.h /^#define C_RENUMBER 0x0004 \/* Tree records are mu/
-DATA_INIT_CNT ../env/env_method.c /^#define DATA_INIT_CNT 20 \/* Start with 20 data /
-DB ../include/db.in /^struct __db; typedef struct __db DB;$/
-DBC ../include/db.in /^struct __dbc; typedef struct __dbc DBC;$/
-DBC_ACTIVE ../include/db.in /^#define DBC_ACTIVE 0x001 \/* Cursor is being used/
-DBC_COMPENSATE ../include/db.in /^#define DBC_COMPENSATE 0x002 \/* Cursor is doing /
-DBC_DIRTY_READ ../include/db.in /^#define DBC_DIRTY_READ 0x004 \/* Cursor is suppor/
-DBC_INTERNAL ../include/db.in /^struct __dbc_internal; typedef struct __dbc_intern/
-DBC_MULTIPLE ../include/db.in /^#define DBC_MULTIPLE 0x400 \/* Return Multiple da/
-DBC_MULTIPLE_KEY ../include/db.in /^#define DBC_MULTIPLE_KEY 0x800 \/* Return Multipl/
-DBC_OPD ../include/db.in /^#define DBC_OPD 0x008 \/* Cursor references off-/
-DBC_RECOVER ../include/db.in /^#define DBC_RECOVER 0x010 \/* Cursor created by /
-DBC_RMW ../include/db.in /^#define DBC_RMW 0x020 \/* Acquire write flag in /
-DBC_TRANSIENT ../include/db.in /^#define DBC_TRANSIENT 0x040 \/* Cursor is transie/
-DBC_WRITECURSOR ../include/db.in /^#define DBC_WRITECURSOR 0x080 \/* Cursor may be u/
-DBC_WRITEDUP ../include/db.in /^#define DBC_WRITEDUP 0x100 \/* idup'ed DBC_WRITEC/
-DBC_WRITER ../include/db.in /^#define DBC_WRITER 0x200 \/* Cursor immediately w/
-DBLOG_FORCE_OPEN ../include/log.h /^#define DBLOG_FORCE_OPEN 0x02 \/* Force the db ope/
-DBLOG_RECOVER ../include/log.h /^#define DBLOG_RECOVER 0x01 \/* We are in recovery/
-DBM ../include/db.in /^typedef struct __db DBM;$/
-DBMETA ../include/db_page.h /^} DBMETA31, DBMETA;$/
-DBMETA30 ../include/db_upgrade.h /^} DBMETA30;$/
-DBMETASIZE ../include/db_page.h /^#define DBMETASIZE 256$/
-DBM_INSERT ../include/db.in /^#define DBM_INSERT 0 \/* Flags to dbm_store(). */
-DBM_REPLACE ../include/db.in /^#define DBM_REPLACE 1$/
-DBM_SUFFIX ../include/db.in /^#define DBM_SUFFIX ".db"$/
-DBT ../include/db_cxx.h /^ (DB *, const DBT *, const DBT *);$/
-DBTBUFLEN ../db/db_pr.c /^#define DBTBUFLEN 100$/
-DBTCL_DBM ../include/tcl_db.h /^#define DBTCL_DBM 1$/
-DBTCL_INFO ../include/tcl_db.h /^} DBTCL_INFO;$/
-DBTCL_NDBM ../include/tcl_db.h /^#define DBTCL_NDBM 2$/
-DBTCL_PREP ../include/tcl_db.h /^#define DBTCL_PREP 64 \/* Size of txn_recover prep/
-DBTYPE ../include/db.in /^} DBTYPE;$/
-DBT_JAVAINFO ../libdb_java/java_info.h /^DBT_JAVAINFO; \/* used with all 'dbtji' functions/
+C_RECNUM ../dbinc/btree.h 221
+C_RENUMBER ../dbinc/btree.h 228
+DATA_INIT_CNT ../env/env_method.c 603
+DB ../dbinc/db.in 97
+DB2JDBENV ../libdb_java/db_java_wrap.c 385
+DBC ../dbinc/db.in 122
+DBC2JDBENV ../libdb_java/db_java_wrap.c 386
+DBC_ACTIVE ../dbinc/db.in 1496
+DBC_COMPENSATE ../dbinc/db.in 1497
+DBC_DIRTY_READ ../dbinc/db.in 1498
+DBC_INTERNAL ../dbinc/db.in 123
+DBC_LOGGING ../dbinc/db_int.in /^#define DBC_LOGGING(dbc) \\$/
+DBC_METHOD ../cxx/cxx_dbc.cpp /^#define DBC_METHOD(_name, _argspec, _arglist, _ret/
+DBC_MULTIPLE ../dbinc/db.in 1505
+DBC_MULTIPLE_KEY ../dbinc/db.in 1506
+DBC_OPD ../dbinc/db.in 1499
+DBC_OWN_LID ../dbinc/db.in 1507
+DBC_RECOVER ../dbinc/db.in 1500
+DBC_RMW ../dbinc/db.in 1501
+DBC_TRANSIENT ../dbinc/db.in 1502
+DBC_WRITECURSOR ../dbinc/db.in 1503
+DBC_WRITER ../dbinc/db.in 1504
+DBENV_LOGGING ../dbinc/db_int.in /^#define DBENV_LOGGING(dbenv) \\$/
+DBENV_METHOD ../cxx/cxx_env.cpp /^#define DBENV_METHOD(_name, _argspec, _arglist) /
+DBENV_METHOD_ERR ../cxx/cxx_env.cpp /^#define DBENV_METHOD_ERR(_name, _argspec, _arglist/
+DBENV_METHOD_QUIET ../cxx/cxx_env.cpp /^#define DBENV_METHOD_QUIET(_name, _argspec, _argli/
+DBENV_METHOD_VOID ../cxx/cxx_env.cpp /^#define DBENV_METHOD_VOID(_name, _argspec, _arglis/
+DBLOG_FORCE_OPEN ../dbinc/log.h 104
+DBLOG_RECOVER ../dbinc/log.h 103
+DBM ../dbinc/db.in 1902
+DBMETASIZE ../dbinc/db_page.h 180
+DBMETA_CHKSUM ../dbinc/db_page.h 76
+DBM_INSERT ../dbinc/db.in 1904
+DBM_REPLACE ../dbinc/db.in 1905
+DBM_SUFFIX ../dbinc/db.in 1911
+DBREG_CHKPNT ../dbinc/log.h 49
+DBREG_CLOSE ../dbinc/log.h 50
+DBREG_OPEN ../dbinc/log.h 51
+DBREG_RCLOSE ../dbinc/log.h 52
+DBT ../dbinc/db.in 100
+DBTBUFLEN ../db/db_pr.c 756
+DBTCL_DBM ../dbinc/tcl_db.h 21
+DBTCL_NDBM ../dbinc/tcl_db.h 22
+DBTCL_PREP ../dbinc/tcl_db.h 19
+DBTXN_METHOD ../cxx/cxx_txn.cpp /^#define DBTXN_METHOD(_name, _delete, _argspec, _ar/
+DBTYPE ../dbinc/db.in 965
DB_ADDSTR ../env/env_open.c /^#define DB_ADDSTR(add) { \\$/
-DB_ADD_BIG ../include/db_am.h /^#define DB_ADD_BIG 0x30$/
-DB_ADD_DUP ../include/db_am.h /^#define DB_ADD_DUP 0x10$/
-DB_ADD_PAGE ../include/db_am.h /^#define DB_ADD_PAGE 0x70$/
-DB_AFTER ../include/db.in /^#define DB_AFTER 1 \/* c_put() *\/$/
-DB_AGGRESSIVE ../include/db.in /^#define DB_AGGRESSIVE 0x0001 \/* Salvage an/
-DB_ALREADY_ABORTED ../include/db.in /^#define DB_ALREADY_ABORTED (-30899)$/
-DB_AM_DIRTY ../include/db.in /^#define DB_AM_DIRTY 0x000001 \/* Support Dirty Rea/
-DB_AM_DISCARD ../include/db.in /^#define DB_AM_DISCARD 0x000002 \/* Discard any cac/
-DB_AM_DUP ../include/db.in /^#define DB_AM_DUP 0x000004 \/* DB_DUP. *\/$/
-DB_AM_DUPSORT ../include/db.in /^#define DB_AM_DUPSORT 0x000008 \/* DB_DUPSORT. *\//
-DB_AM_INMEM ../include/db.in /^#define DB_AM_INMEM 0x000010 \/* In-memory; no syn/
-DB_AM_PGDEF ../include/db.in /^#define DB_AM_PGDEF 0x000020 \/* Page size was def/
-DB_AM_RDONLY ../include/db.in /^#define DB_AM_RDONLY 0x000040 \/* Database is read/
-DB_AM_RECOVER ../include/db.in /^#define DB_AM_RECOVER 0x000080 \/* DBP opened by r/
-DB_AM_SECONDARY ../include/db.in /^#define DB_AM_SECONDARY 0x000100 \/* Database is a/
-DB_AM_SUBDB ../include/db.in /^#define DB_AM_SUBDB 0x000200 \/* Subdatabases supp/
-DB_AM_SWAP ../include/db.in /^#define DB_AM_SWAP 0x000400 \/* Pages need to be b/
-DB_AM_TXN ../include/db.in /^#define DB_AM_TXN 0x000800 \/* DBP was in a transa/
-DB_AM_VERIFYING ../include/db.in /^#define DB_AM_VERIFYING 0x001000 \/* DB handle is /
-DB_APPEND ../include/db.in /^#define DB_APPEND 2 \/* put() *\/$/
-DB_ARCH_ABS ../include/db.in /^#define DB_ARCH_ABS 0x001 \/* Absolute pathnames./
-DB_ARCH_DATA ../include/db.in /^#define DB_ARCH_DATA 0x002 \/* Data files. *\/$/
-DB_ARCH_LOG ../include/db.in /^#define DB_ARCH_LOG 0x004 \/* Log files. *\/$/
-DB_ASSERT ../include/debug.h /^#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(/
-DB_BEFORE ../include/db.in /^#define DB_BEFORE 3 \/* c_put() *\/$/
-DB_BEGIN_SINGLE_THREAD ../include/mutex.h /^#define DB_BEGIN_SINGLE_THREAD$/
-DB_BTREEMAGIC ../include/db.in /^#define DB_BTREEMAGIC 0x053162$/
-DB_BTREEOLDVER ../include/db.in /^#define DB_BTREEOLDVER 6 \/* Oldest btree version/
-DB_BTREEVERSION ../include/db.in /^#define DB_BTREEVERSION 8 \/* Current btree versi/
-DB_BTREE_STAT ../include/db.in /^struct __db_bt_stat; typedef struct __db_bt_stat D/
-DB_BT_RECNUM ../include/db.in /^#define DB_BT_RECNUM 0x002000 \/* DB_RECNUM. *\/$/
-DB_BT_REVSPLIT ../include/db.in /^#define DB_BT_REVSPLIT 0x004000 \/* DB_REVSPLITOFF/
-DB_CACHED_COUNTS ../include/db.in /^#define DB_CACHED_COUNTS 4 \/* stat() *\/$/
-DB_CACHESIZE_MIN ../include/mp.h /^#define DB_CACHESIZE_MIN (40 * 1024)$/
-DB_CDB_ALLDB ../include/db.in /^#define DB_CDB_ALLDB 0x000400 \/* In CDB, lo/
-DB_CHECKPOINT ../include/db.in /^#define DB_CHECKPOINT 5 \/* log_put(), log_get()/
-DB_CHECK_TXN ../include/db_am.h /^#define DB_CHECK_TXN(dbp, txn) \\$/
-DB_CLIENT ../include/db.in /^#define DB_CLIENT 0x000400 \/* Open for a cl/
-DB_COMMIT ../include/db.in /^#define DB_COMMIT 6 \/* log_put() (internal) *\//
-DB_CONSUME ../include/db.in /^#define DB_CONSUME 7 \/* get() *\/$/
-DB_CONSUME_WAIT ../include/db.in /^#define DB_CONSUME_WAIT 8 \/* get() *\/$/
-DB_CREATE ../include/db.in /^#define DB_CREATE 0x000001 \/* Create file a/
-DB_CURLSN ../include/db.in /^#define DB_CURLSN 9 \/* log_put() *\/$/
-DB_CURRENT ../include/db.in /^#define DB_CURRENT 10 \/* c_get(), c_put(), log_g/
-DB_CXX_NO_EXCEPTIONS ../include/db.in /^#define DB_CXX_NO_EXCEPTIONS 0x000002 \/* C++: re/
-DB_CXX_PRIVATE_ENV ../include/cxx_int.h /^#define DB_CXX_PRIVATE_ENV 0x00000001$/
-DB_DBM_ERROR ../include/db.in /^#define DB_DBM_ERROR 0x008000 \/* Error in DBM\/ND/
-DB_DBM_HSEARCH ../include/db.in /^#define DB_DBM_HSEARCH 0 \/* No historic interfac/
-DB_DBT_APPMALLOC ../include/db.in /^#define DB_DBT_APPMALLOC 0x001 \/* Callback alloca/
-DB_DBT_DUPOK ../include/db.in /^#define DB_DBT_DUPOK 0x040 \/* Insert if duplicat/
-DB_DBT_ISSET ../include/db.in /^#define DB_DBT_ISSET 0x002 \/* Lower level calls /
-DB_DBT_MALLOC ../include/db.in /^#define DB_DBT_MALLOC 0x004 \/* Return in malloc'/
-DB_DBT_PARTIAL ../include/db.in /^#define DB_DBT_PARTIAL 0x008 \/* Partial put\/get/
-DB_DBT_REALLOC ../include/db.in /^#define DB_DBT_REALLOC 0x010 \/* Return in reallo/
-DB_DBT_USERMEM ../include/db.in /^#define DB_DBT_USERMEM 0x020 \/* Return in user's/
-DB_DEF_IOSIZE ../include/db_int.in /^#define DB_DEF_IOSIZE (8 * 1024)$/
-DB_DELETED ../include/db.in /^#define DB_DELETED (-30898)\/* Recovery file mark/
-DB_DIRTY_READ ../include/db.in /^#define DB_DIRTY_READ 0x10000000 \/* Support Dirty/
-DB_DONOTINDEX ../include/db.in /^#define DB_DONOTINDEX (-30999)\/* "Null" return f/
-DB_DUP ../include/db.in /^#define DB_DUP 0x0001 \/* Btree, Hash: duplicate/
-DB_DUPSORT ../include/db.in /^#define DB_DUPSORT 0x0002 \/* Btree, Hash: duplic/
-DB_END_SINGLE_THREAD ../include/mutex.h /^#define DB_END_SINGLE_THREAD$/
-DB_ENTRY ../include/log.h /^} DB_ENTRY;$/
-DB_ENV ../include/db.in /^struct __db_env; typedef struct __db_env DB_ENV;$/
-DB_ENV_CDB ../include/db.in /^#define DB_ENV_CDB 0x00001 \/* DB_INIT_CDB. *\/$/
-DB_ENV_CDB_ALLDB ../include/db.in /^#define DB_ENV_CDB_ALLDB 0x00002 \/* CDB environme/
-DB_ENV_CREATE ../include/db.in /^#define DB_ENV_CREATE 0x00004 \/* DB_CREATE set. /
-DB_ENV_DBLOCAL ../include/db.in /^#define DB_ENV_DBLOCAL 0x00008 \/* DB_ENV allocat/
-DB_ENV_JAVAINFO ../libdb_java/java_info.h /^DB_ENV_JAVAINFO; \/* used with all 'dbjie' functi/
-DB_ENV_LOCKDOWN ../include/db.in /^#define DB_ENV_LOCKDOWN 0x00010 \/* DB_LOCKDOWN s/
-DB_ENV_NOMMAP ../include/db.in /^#define DB_ENV_NOMMAP 0x00020 \/* DB_NOMMAP set. /
-DB_ENV_OPEN_CALLED ../include/db.in /^#define DB_ENV_OPEN_CALLED 0x00040 \/* DBENV->open/
-DB_ENV_PANIC_OK ../include/db.in /^#define DB_ENV_PANIC_OK 0x00080 \/* Removing env,/
-DB_ENV_PRIVATE ../include/db.in /^#define DB_ENV_PRIVATE 0x00100 \/* DB_PRIVATE set/
-DB_ENV_RPCCLIENT ../include/db.in /^#define DB_ENV_RPCCLIENT 0x00200 \/* DB_CLIENT set/
-DB_ENV_RPCCLIENT_GIVEN ../include/db.in /^#define DB_ENV_RPCCLIENT_GIVEN 0x00400 \/* User-su/
-DB_ENV_STANDALONE ../include/db.in /^#define DB_ENV_STANDALONE 0x00800 \/* Test: freest/
-DB_ENV_SYSTEM_MEM ../include/db.in /^#define DB_ENV_SYSTEM_MEM 0x01000 \/* DB_SYSTEM_ME/
-DB_ENV_THREAD ../include/db.in /^#define DB_ENV_THREAD 0x02000 \/* DB_THREAD set. /
-DB_ENV_TXN_NOSYNC ../include/db.in /^#define DB_ENV_TXN_NOSYNC 0x04000 \/* DB_TXN_NOSYN/
-DB_ENV_USER_ALLOC ../include/db.in /^#define DB_ENV_USER_ALLOC 0x08000 \/* User allocat/
-DB_EXCL ../include/db.in /^#define DB_EXCL 0x000400 \/* Exclusive open/
-DB_EXTENT ../include/db.in /^#define DB_EXTENT 0x008000 \/* UNDOC: deali/
-DB_FAST_STAT ../include/db.in /^#define DB_FAST_STAT 11 \/* stat() *\/$/
-DB_FCNTL_LOCKING ../include/db.in /^#define DB_FCNTL_LOCKING 0x000800 \/* UNDOC: /
-DB_FCNTL_OFF_GEN ../include/mutex.h /^#define DB_FCNTL_OFF_GEN 0 \/* Everything else. */
-DB_FCNTL_OFF_LOCK ../include/mutex.h /^#define DB_FCNTL_OFF_LOCK 1 \/* Lock subsystem of/
-DB_FCNTL_OFF_MPOOL ../include/mutex.h /^#define DB_FCNTL_OFF_MPOOL 2 \/* Mpool subsystem /
-DB_FH ../include/db.in /^struct __fh_t; typedef struct __fh_t DB_FH;$/
-DB_FH_NOSYNC ../include/os.h /^#define DB_FH_NOSYNC 0x01 \/* Handle doesn't need/
-DB_FH_VALID ../include/os.h /^#define DB_FH_VALID 0x02 \/* Handle is valid. *\//
-DB_FILE_ID_LEN ../include/db.in /^#define DB_FILE_ID_LEN 20 \/* DB file ID length. /
-DB_FILE_SETUP_CREATE ../db/db.c /^#define DB_FILE_SETUP_CREATE 0x01$/
-DB_FILE_SETUP_ZERO ../db/db.c /^#define DB_FILE_SETUP_ZERO 0x02$/
-DB_FIRST ../include/db.in /^#define DB_FIRST 12 \/* c_get(), log_get() *\/$/
-DB_FLUSH ../include/db.in /^#define DB_FLUSH 13 \/* log_put() *\/$/
-DB_FORCE ../include/db.in /^#define DB_FORCE 0x000004 \/* Force (anythin/
-DB_FTYPE_NOTSET ../include/db_int.in /^#define DB_FTYPE_NOTSET 0 \/* Don't call... *\/$/
-DB_FTYPE_SET ../include/db_int.in /^#define DB_FTYPE_SET -1 \/* Call pgin\/pgout func/
-DB_GET_BOTH ../include/db.in /^#define DB_GET_BOTH 14 \/* get(), c_get() *\/$/
-DB_GET_BOTHC ../include/db.in /^#define DB_GET_BOTHC 15 \/* c_get() (internal) */
-DB_GET_RECNO ../include/db.in /^#define DB_GET_RECNO 16 \/* c_get() *\/$/
-DB_GLOBAL ../include/db_int.in /^#define DB_GLOBAL(v) __db_global_values.v$/
-DB_GLOBALS ../include/db_int.in /^} DB_GLOBALS;$/
-DB_GROW_SIZE ../include/log.h /^#define DB_GROW_SIZE 64$/
-DB_HASHMAGIC ../include/db.in /^#define DB_HASHMAGIC 0x061561$/
-DB_HASHOLDVER ../include/db.in /^#define DB_HASHOLDVER 4 \/* Oldest hash version s/
-DB_HASHVERSION ../include/db.in /^#define DB_HASHVERSION 7 \/* Current hash version/
-DB_HASH_DUP ../include/db_page.h /^#define DB_HASH_DUP 0x01 \/* Duplicates. *\/$/
-DB_HASH_DUPSORT ../include/db_page.h /^#define DB_HASH_DUPSORT 0x04 \/* Duplicates are /
-DB_HASH_STAT ../include/db.in /^struct __db_h_stat; typedef struct __db_h_stat DB_/
-DB_HASH_SUBDB ../include/db_page.h /^#define DB_HASH_SUBDB 0x02 \/* Subdatabases. *\//
-DB_HTONL ../include/db_swap.h /^#define DB_HTONL(p)$/
-DB_ILLEGAL_AFTER_OPEN ../include/db_int.in /^#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \\$/
-DB_ILLEGAL_BEFORE_OPEN ../include/db_int.in /^#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \\$/
-DB_ILLEGAL_IN_ENV ../include/db_int.in /^#define DB_ILLEGAL_IN_ENV(dbp, name) \\$/
-DB_ILLEGAL_METHOD ../include/db_int.in /^#define DB_ILLEGAL_METHOD(dbp, flags) { \\$/
-DB_INCOMPLETE ../include/db.in /^#define DB_INCOMPLETE (-30998)\/* Sync didn't fin/
-DB_INITENV_CDB ../env/env_open.c /^#define DB_INITENV_CDB 0x0001 \/* DB_INIT_CDB *\//
-DB_INITENV_CDB_ALLDB ../env/env_open.c /^#define DB_INITENV_CDB_ALLDB 0x0002 \/* DB_INIT_CD/
-DB_INITENV_LOCK ../env/env_open.c /^#define DB_INITENV_LOCK 0x0004 \/* DB_INIT_LOCK */
-DB_INITENV_LOG ../env/env_open.c /^#define DB_INITENV_LOG 0x0008 \/* DB_INIT_LOG *\//
-DB_INITENV_MPOOL ../env/env_open.c /^#define DB_INITENV_MPOOL 0x0010 \/* DB_INIT_MPOOL /
-DB_INITENV_TXN ../env/env_open.c /^#define DB_INITENV_TXN 0x0020 \/* DB_INIT_TXN *\//
-DB_INITIALIZE_DB_GLOBALS ../env/env_method.c /^#define DB_INITIALIZE_DB_GLOBALS 1$/
-DB_INIT_CDB ../include/db.in /^#define DB_INIT_CDB 0x000400 \/* Concurrent /
-DB_INIT_LOCK ../include/db.in /^#define DB_INIT_LOCK 0x000800 \/* Initialize/
-DB_INIT_LOG ../include/db.in /^#define DB_INIT_LOG 0x001000 \/* Initialize /
-DB_INIT_MPOOL ../include/db.in /^#define DB_INIT_MPOOL 0x002000 \/* Initializ/
-DB_INIT_TXN ../include/db.in /^#define DB_INIT_TXN 0x004000 \/* Initialize /
-DB_IO ../include/os.h /^} DB_IO;$/
-DB_IO_READ ../include/os.h /^#define DB_IO_READ 1$/
-DB_IO_WRITE ../include/os.h /^#define DB_IO_WRITE 2$/
-DB_IS_THREADED ../include/db_int.in /^#define DB_IS_THREADED(dbp) \\$/
-DB_JAVAINFO ../libdb_java/java_info.h /^} DB_JAVAINFO;$/
-DB_JAVA_CALLBACK ../include/db.in /^#define DB_JAVA_CALLBACK (-30897)\/* Exception dur/
-DB_JOINENV ../include/db.in /^#define DB_JOINENV 0x008000 \/* Initialize /
-DB_JOIN_ITEM ../include/db.in /^#define DB_JOIN_ITEM 17 \/* c_get(); do not do pr/
-DB_JOIN_NOSORT ../include/db.in /^#define DB_JOIN_NOSORT 0x0001 \/* Don't try to o/
-DB_KEYEMPTY ../include/db.in /^#define DB_KEYEMPTY (-30997)\/* Key\/data deleted/
-DB_KEYEXIST ../include/db.in /^#define DB_KEYEXIST (-30996)\/* The key\/data pai/
-DB_KEYFIRST ../include/db.in /^#define DB_KEYFIRST 18 \/* c_put() *\/$/
-DB_KEYLAST ../include/db.in /^#define DB_KEYLAST 19 \/* c_put() *\/$/
-DB_KEY_RANGE ../include/db.in /^struct __key_range; typedef struct __key_range DB_/
-DB_LAST ../include/db.in /^#define DB_LAST 20 \/* c_get(), log_get() *\/$/
-DB_LINE ../include/db_int.in /^#define DB_LINE "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=/
-DB_LOCK ../include/db.in /^struct __db_lock_u; typedef struct __db_lock_u DB_/
-DB_LOCKDOWN ../include/db.in /^#define DB_LOCKDOWN 0x010000 \/* Lock memory/
-DB_LOCKER ../include/lock.h /^} DB_LOCKER;$/
-DB_LOCKER_DELETED ../include/lock.h /^#define DB_LOCKER_DELETED 0x0001$/
-DB_LOCKER_DIRTY ../include/lock.h /^#define DB_LOCKER_DIRTY 0x0002$/
-DB_LOCKER_INABORT ../include/lock.h /^#define DB_LOCKER_INABORT 0x0004$/
-DB_LOCKOBJ ../include/lock.h /^} DB_LOCKOBJ;$/
-DB_LOCKREGION ../include/lock.h /^} DB_LOCKREGION;$/
-DB_LOCKREQ ../include/db.in /^struct __db_lockreq; typedef struct __db_lockreq D/
-DB_LOCKTAB ../include/lock.h /^} DB_LOCKTAB;$/
-DB_LOCKVERSION ../include/db.in /^#define DB_LOCKVERSION 1$/
-DB_LOCK_CDB_N ../lock/lock_region.c /^#define DB_LOCK_CDB_N 5$/
-DB_LOCK_DEADLOCK ../include/db.in /^#define DB_LOCK_DEADLOCK (-30995)\/* Deadlock. *\//
-DB_LOCK_DEFAULT ../include/db.in /^#define DB_LOCK_DEFAULT 1 \/* Default policy. *\//
-DB_LOCK_DEFAULT_N ../include/lock.h /^#define DB_LOCK_DEFAULT_N 1000 \/* Default # of lo/
-DB_LOCK_DOALL ../include/lock.h /^#define DB_LOCK_DOALL 0x001$/
-DB_LOCK_FREE ../include/lock.h /^#define DB_LOCK_FREE 0x002$/
-DB_LOCK_IGNOREDEL ../include/lock.h /^#define DB_LOCK_IGNOREDEL 0x004$/
-DB_LOCK_ILOCK ../include/db.in /^struct __db_ilock; typedef struct __db_ilock DB_LO/
-DB_LOCK_INVALIDID ../include/lock.h /^#define DB_LOCK_INVALIDID 0$/
-DB_LOCK_MAXID ../include/lock.h /^#define DB_LOCK_MAXID 0x7fffffff$/
-DB_LOCK_MAXLOCKS ../include/db.in /^#define DB_LOCK_MAXLOCKS 2 \/* Abort txn with maxi/
-DB_LOCK_MINLOCKS ../include/db.in /^#define DB_LOCK_MINLOCKS 3 \/* Abort txn with mini/
-DB_LOCK_MINWRITE ../include/db.in /^#define DB_LOCK_MINWRITE 4 \/* Abort txn with mini/
-DB_LOCK_NOPROMOTE ../include/lock.h /^#define DB_LOCK_NOPROMOTE 0x008$/
-DB_LOCK_NORUN ../include/db.in /^#define DB_LOCK_NORUN 0$/
-DB_LOCK_NOTGRANTED ../include/db.in /^#define DB_LOCK_NOTGRANTED (-30994)\/* Lock unavai/
-DB_LOCK_NOWAIT ../include/db.in /^#define DB_LOCK_NOWAIT 0x01 \/* Don't wait on una/
-DB_LOCK_NOWAITERS ../include/lock.h /^#define DB_LOCK_NOWAITERS 0x020$/
-DB_LOCK_OLDEST ../include/db.in /^#define DB_LOCK_OLDEST 5 \/* Abort oldest transac/
-DB_LOCK_RANDOM ../include/db.in /^#define DB_LOCK_RANDOM 6 \/* Abort random transac/
-DB_LOCK_RECORD ../include/db.in /^#define DB_LOCK_RECORD 0x02 \/* Internal: record /
-DB_LOCK_RIW_N ../lock/lock_region.c /^#define DB_LOCK_RIW_N 9$/
-DB_LOCK_STAT ../include/db.in /^struct __db_lock_stat; typedef struct __db_lock_st/
-DB_LOCK_SWITCH ../include/db.in /^#define DB_LOCK_SWITCH 0x08 \/* Internal: switch /
-DB_LOCK_UNLINK ../include/lock.h /^#define DB_LOCK_UNLINK 0x010$/
-DB_LOCK_UPGRADE ../include/db.in /^#define DB_LOCK_UPGRADE 0x04 \/* Internal: upgrad/
-DB_LOCK_YOUNGEST ../include/db.in /^#define DB_LOCK_YOUNGEST 7 \/* Abort youngest tran/
-DB_LOG ../include/log.h /^struct __db_log; typedef struct __db_log DB_LOG;$/
-DB_LOGFILEID_INVALID ../include/db.in /^#define DB_LOGFILEID_INVALID -1$/
-DB_LOGGING ../include/db_int.in /^#define DB_LOGGING(dbc) \\$/
-DB_LOGMAGIC ../include/db.in /^#define DB_LOGMAGIC 0x040988$/
-DB_LOGOLDVER ../include/db.in /^#define DB_LOGOLDVER 3 \/* Oldest log version sup/
-DB_LOGVERSION ../include/db.in /^#define DB_LOGVERSION 3 \/* Current log version. /
-DB_LOG_STAT ../include/db.in /^struct __db_log_stat; typedef struct __db_log_stat/
-DB_LSN ../include/db.in /^struct __db_lsn; typedef struct __db_lsn DB_LSN;$/
-DB_MAXMMAPSIZE ../mp/mp_fopen.c /^#define DB_MAXMMAPSIZE (10 * 1024 * 1024) \/* 10 M/
-DB_MAX_HANDLES ../include/mutex.h /^#define DB_MAX_HANDLES 100 \/* Mutex slots for h/
-DB_MAX_PAGES ../include/db.in /^#define DB_MAX_PAGES 0xffffffff \/* >= # of pages /
-DB_MAX_PGSIZE ../include/db_int.in /^#define DB_MAX_PGSIZE 0x010000 \/* Maximum page si/
-DB_MAX_RECORDS ../include/db.in /^#define DB_MAX_RECORDS 0xffffffff \/* >= # of reco/
-DB_MINPAGECACHE ../include/db_am.h /^#define DB_MINPAGECACHE 10 \/* Min pages access m/
-DB_MIN_PGSIZE ../include/db_int.in /^#define DB_MIN_PGSIZE 0x000200 \/* Minimum page si/
-DB_MPOOL ../include/mp.h /^struct __db_mpool; typedef struct __db_mpool DB_MP/
-DB_MPOOLFILE ../include/db.in /^struct __db_mpoolfile; typedef struct __db_mpoolfi/
-DB_MPOOL_CLEAN ../include/db.in /^#define DB_MPOOL_CLEAN 0x001 \/* Page is not modi/
-DB_MPOOL_CREATE ../include/db.in /^#define DB_MPOOL_CREATE 0x001 \/* Create a page. /
-DB_MPOOL_DIRTY ../include/db.in /^#define DB_MPOOL_DIRTY 0x002 \/* Page is modified/
-DB_MPOOL_DISCARD ../include/db.in /^#define DB_MPOOL_DISCARD 0x004 \/* Don't cache the/
-DB_MPOOL_FINFO ../include/db.in /^struct __db_mpool_finfo;typedef struct __db_mpool_/
-DB_MPOOL_FSTAT ../include/db.in /^struct __db_mpool_fstat;typedef struct __db_mpool_/
-DB_MPOOL_LAST ../include/db.in /^#define DB_MPOOL_LAST 0x002 \/* Return the last p/
-DB_MPOOL_NEW ../include/db.in /^#define DB_MPOOL_NEW 0x004 \/* Create a new page./
-DB_MPOOL_NEW_GROUP ../include/db.in /^#define DB_MPOOL_NEW_GROUP 0x008 \/* Create a grou/
-DB_MPOOL_STAT ../include/db.in /^struct __db_mpool_stat; typedef struct __db_mpool_/
-DB_MPREG ../include/mp.h /^struct __db_mpreg; typedef struct __db_mpreg DB_MP/
-DB_MULTIPLE ../include/db.in /^#define DB_MULTIPLE 0x20000000 \/* Return multiple/
-DB_MULTIPLE_INIT ../include/db.in /^#define DB_MULTIPLE_INIT(pointer, dbt) \\$/
-DB_MULTIPLE_KEY ../include/db.in /^#define DB_MULTIPLE_KEY 0x40000000 \/* Return mult/
-DB_MULTIPLE_KEY_NEXT ../include/db.in /^#define DB_MULTIPLE_KEY_NEXT(pointer, dbt, retkey,/
-DB_MULTIPLE_NEXT ../include/db.in /^#define DB_MULTIPLE_NEXT(pointer, dbt, retdata, re/
-DB_MULTIPLE_RECNO_NEXT ../include/db.in /^#define DB_MULTIPLE_RECNO_NEXT(pointer, dbt, recno/
-DB_NEEDSPLIT ../include/db.in /^#define DB_NEEDSPLIT (-30896)\/* Page needs to be/
-DB_NEXT ../include/db.in /^#define DB_NEXT 21 \/* c_get(), log_get() *\/$/
-DB_NEXT_DUP ../include/db.in /^#define DB_NEXT_DUP 22 \/* c_get() *\/$/
-DB_NEXT_NODUP ../include/db.in /^#define DB_NEXT_NODUP 23 \/* c_get() *\/$/
-DB_NODUPDATA ../include/db.in /^#define DB_NODUPDATA 24 \/* put(), c_put() *\/$/
-DB_NOMMAP ../include/db.in /^#define DB_NOMMAP 0x000008 \/* Don't mmap un/
-DB_NONBLOCK ../include/db_int.in /^#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSE/
-DB_NOORDERCHK ../include/db.in /^#define DB_NOORDERCHK 0x0002 \/* Skip order/
-DB_NOOVERWRITE ../include/db.in /^#define DB_NOOVERWRITE 25 \/* put() *\/$/
-DB_NOSERVER ../include/db.in /^#define DB_NOSERVER (-30993)\/* Server panic retu/
-DB_NOSERVER_HOME ../include/db.in /^#define DB_NOSERVER_HOME (-30992)\/* Bad home sent/
-DB_NOSERVER_ID ../include/db.in /^#define DB_NOSERVER_ID (-30991)\/* Bad ID sent to/
-DB_NOSYNC ../include/db.in /^#define DB_NOSYNC 26 \/* close() *\/$/
-DB_NOTFOUND ../include/db.in /^#define DB_NOTFOUND (-30990)\/* Key\/data pair no/
-DB_NTOHL ../include/db_swap.h /^#define DB_NTOHL(p)$/
-DB_ODDFILESIZE ../include/db.in /^#define DB_ODDFILESIZE 0x001000 \/* UNDOC: /
-DB_OK_BTREE ../include/db.in /^#define DB_OK_BTREE 0x01$/
-DB_OK_HASH ../include/db.in /^#define DB_OK_HASH 0x02$/
-DB_OK_QUEUE ../include/db.in /^#define DB_OK_QUEUE 0x04$/
-DB_OK_RECNO ../include/db.in /^#define DB_OK_RECNO 0x08$/
-DB_OLD_VERSION ../include/db.in /^#define DB_OLD_VERSION (-30989)\/* Out-of-date ve/
-DB_OPEN_CALLED ../include/db.in /^#define DB_OPEN_CALLED 0x010000 \/* DB->open calle/
-DB_OPFLAGS_MASK ../include/db.in /^#define DB_OPFLAGS_MASK 0x000000ff \/* Mask for op/
-DB_ORDERCHKONLY ../include/db.in /^#define DB_ORDERCHKONLY 0x0004 \/* Only per/
-DB_OSO_CREATE ../include/db_int.in /^#define DB_OSO_CREATE 0x001 \/* POSIX: O_CREAT */
-DB_OSO_EXCL ../include/db_int.in /^#define DB_OSO_EXCL 0x002 \/* POSIX: O_EXCL *\/$/
-DB_OSO_LOG ../include/db_int.in /^#define DB_OSO_LOG 0x004 \/* Opening a log file. /
-DB_OSO_RDONLY ../include/db_int.in /^#define DB_OSO_RDONLY 0x008 \/* POSIX: O_RDONLY */
-DB_OSO_REGION ../include/db_int.in /^#define DB_OSO_REGION 0x010 \/* Opening a region /
-DB_OSO_SEQ ../include/db_int.in /^#define DB_OSO_SEQ 0x020 \/* Expected sequential /
-DB_OSO_TEMP ../include/db_int.in /^#define DB_OSO_TEMP 0x040 \/* Remove after last c/
-DB_OSO_TRUNC ../include/db_int.in /^#define DB_OSO_TRUNC 0x080 \/* POSIX: O_TRUNC *\//
-DB_OS_SEEK ../include/db_int.in /^} DB_OS_SEEK;$/
-DB_PACKAGE_NAME ../libdb_java/java_util.h /^#define DB_PACKAGE_NAME "com\/sleepycat\/db\/"$/
-DB_PAGE_DB_LEN ../include/db_page.h /^#define DB_PAGE_DB_LEN 32$/
-DB_PAGE_LOCK ../include/db.in /^#define DB_PAGE_LOCK 2$/
-DB_PAGE_NOTFOUND ../include/db.in /^#define DB_PAGE_NOTFOUND (-30988)\/* Verify failed/
-DB_PAGE_QUEUE_LEN ../include/db_page.h /^#define DB_PAGE_QUEUE_LEN 0$/
-DB_PGINFO ../include/db_int.in /^} DB_PGINFO;$/
-DB_POSITION ../include/db.in /^#define DB_POSITION 27 \/* c_dup() *\/$/
-DB_POSITIONI ../include/db.in /^#define DB_POSITIONI 28 \/* c_dup() (internal) */
-DB_PREPLIST ../include/db.in /^} DB_PREPLIST;$/
-DB_PREV ../include/db.in /^#define DB_PREV 29 \/* c_get(), log_get() *\/$/
-DB_PREV_NODUP ../include/db.in /^#define DB_PREV_NODUP 30 \/* c_get(), log_get() */
-DB_PRIVATE ../include/db.in /^#define DB_PRIVATE 0x020000 \/* DB_ENV is pr/
-DB_PR_PAGE ../include/db.in /^#define DB_PR_PAGE 0x0008 \/* Show page con/
-DB_PR_RECOVERYTEST ../include/db.in /^#define DB_PR_RECOVERYTEST 0x0010 \/* Recovery/
-DB_QAMMAGIC ../include/db.in /^#define DB_QAMMAGIC 0x042253$/
-DB_QAMOLDVER ../include/db.in /^#define DB_QAMOLDVER 1 \/* Oldest queue version s/
-DB_QAMVERSION ../include/db.in /^#define DB_QAMVERSION 3 \/* Current queue version/
-DB_QUEUE_STAT ../include/db.in /^struct __db_qam_stat; typedef struct __db_qam_stat/
-DB_RDONLY ../include/db.in /^#define DB_RDONLY 0x000010 \/* Read-only (O_/
-DB_RDWRMASTER ../include/db.in /^#define DB_RDWRMASTER 0x002000 \/* UNDOC: a/
-DB_RECNUM ../include/db.in /^#define DB_RECNUM 0x0004 \/* Btree: record number/
-DB_RECORDCOUNT ../include/db.in /^#define DB_RECORDCOUNT 31 \/* stat() *\/$/
-DB_RECORD_LOCK ../include/db.in /^#define DB_RECORD_LOCK 1$/
-DB_RECOVER ../include/db.in /^#define DB_RECOVER 0x000020 \/* Run normal r/
-DB_RECOVER_FATAL ../include/db.in /^#define DB_RECOVER_FATAL 0x040000 \/* Run cat/
-DB_REDO ../include/db.in /^#define DB_REDO(op) ((op) == DB_TXN_FORWARD_ROLL)$/
-DB_REGION_ENV ../include/region.h /^#define DB_REGION_ENV "__db.001" \/* Primary envir/
-DB_REGION_FMT ../include/region.h /^#define DB_REGION_FMT "__db.%03d" \/* Region file /
-DB_REGION_MAGIC ../include/db.in /^#define DB_REGION_MAGIC 0x120897 \/* Environment m/
-DB_REGION_NAME_LENGTH ../include/region.h /^#define DB_REGION_NAME_LENGTH 8 \/* Length of file/
-DB_REGION_NAME_NUM ../include/region.h /^#define DB_REGION_NAME_NUM 5 \/* First digit offse/
-DB_REM_BIG ../include/db_am.h /^#define DB_REM_BIG 0x40$/
-DB_REM_DUP ../include/db_am.h /^#define DB_REM_DUP 0x20$/
-DB_REM_PAGE ../include/db_am.h /^#define DB_REM_PAGE 0x80$/
-DB_RENUMBER ../include/db.in /^#define DB_RENUMBER 0x0008 \/* Recno: renumber on/
-DB_REVSPLITOFF ../include/db.in /^#define DB_REVSPLITOFF 0x0010 \/* Btree: turn off/
-DB_RE_DELIMITER ../include/db.in /^#define DB_RE_DELIMITER 0x020000 \/* Variablen len/
-DB_RE_FIXEDLEN ../include/db.in /^#define DB_RE_FIXEDLEN 0x040000 \/* Fixed-length r/
-DB_RE_PAD ../include/db.in /^#define DB_RE_PAD 0x080000 \/* Fixed-length record/
-DB_RE_RENUMBER ../include/db.in /^#define DB_RE_RENUMBER 0x100000 \/* DB_RENUMBER. */
-DB_RE_SNAPSHOT ../include/db.in /^#define DB_RE_SNAPSHOT 0x200000 \/* DB_SNAPSHOT. */
-DB_RMW ../include/db.in /^#define DB_RMW 0x80000000 \/* Acquire write flag /
-DB_RUNRECOVERY ../include/db.in /^#define DB_RUNRECOVERY (-30987)\/* Panic return. /
-DB_SALVAGE ../include/db.in /^#define DB_SALVAGE 0x0020 \/* Salvage what /
-DB_SERVER_FLAGMASK ../include/db_server_int.h /^#define DB_SERVER_FLAGMASK ( \\$/
-DB_SERVER_IDLETIMEOUT ../include/db_server_int.h /^#define DB_SERVER_IDLETIMEOUT 86400 \/* 1 day *\/$/
-DB_SERVER_MAXTIMEOUT ../include/db_server_int.h /^#define DB_SERVER_MAXTIMEOUT 1200 \/* 20 minutes */
-DB_SERVER_TIMEOUT ../include/db_server_int.h /^#define DB_SERVER_TIMEOUT 300 \/* 5 minutes *\/$/
-DB_SET ../include/db.in /^#define DB_SET 32 \/* c_get(), log_get() *\/$/
-DB_SET_RANGE ../include/db.in /^#define DB_SET_RANGE 33 \/* c_get() *\/$/
-DB_SET_RECNO ../include/db.in /^#define DB_SET_RECNO 34 \/* get(), c_get() *\/$/
-DB_SNAPSHOT ../include/db.in /^#define DB_SNAPSHOT 0x0020 \/* Recno: snapshot th/
-DB_SWAPBYTES ../include/db.in /^#define DB_SWAPBYTES (-30895)\/* Database needs b/
-DB_SYSTEM_MEM ../include/db.in /^#define DB_SYSTEM_MEM 0x080000 \/* Use syste/
-DB_TEST_POSTLOG ../include/db.in /^#define DB_TEST_POSTLOG 4 \/* after logging all /
-DB_TEST_POSTLOGMETA ../include/db.in /^#define DB_TEST_POSTLOGMETA 3 \/* after logging m/
-DB_TEST_POSTOPEN ../include/db.in /^#define DB_TEST_POSTOPEN 2 \/* after __os_open */
-DB_TEST_POSTRENAME ../include/db.in /^#define DB_TEST_POSTRENAME 7 \/* after __os_renam/
-DB_TEST_POSTSYNC ../include/db.in /^#define DB_TEST_POSTSYNC 5 \/* after syncing the /
-DB_TEST_PREOPEN ../include/db.in /^#define DB_TEST_PREOPEN 1 \/* before __os_open */
-DB_TEST_PRERENAME ../include/db.in /^#define DB_TEST_PRERENAME 6 \/* before __os_renam/
-DB_TEST_RECOVERY ../include/debug.h /^#define DB_TEST_RECOVERY(dbp, val, ret, name) /
-DB_TEST_RECOVERY_LABEL ../include/debug.h /^#define DB_TEST_RECOVERY_LABEL db_tr_err:$/
-DB_THREAD ../include/db.in /^#define DB_THREAD 0x000040 \/* Applications /
-DB_TRAIL ../env/env_open.c /^#define DB_TRAIL "BDBXXXXXX"$/
-DB_TRUNCATE ../include/db.in /^#define DB_TRUNCATE 0x004000 \/* Discard exi/
-DB_TXN ../include/db.in /^struct __db_txn; typedef struct __db_txn DB_TXN;$/
-DB_TXNHEAD ../include/db_int.in /^struct __db_txnhead; typedef struct __db_txnhead D/
-DB_TXNLIST ../include/db_int.in /^struct __db_txnlist; typedef struct __db_txnlist D/
-DB_TXNLIST_MAX_PGNO ../db/db_dispatch.c /^#define DB_TXNLIST_MAX_PGNO 8 \/* A nice even numb/
-DB_TXNMGR ../include/txn.h /^struct __db_txnmgr; typedef struct __db_txnmgr DB_/
-DB_TXNREGION ../include/txn.h /^struct __db_txnregion; typedef struct __db_txnregi/
-DB_TXNVERSION ../include/db.in /^#define DB_TXNVERSION 1$/
-DB_TXN_ACTIVE ../include/db.in /^struct __db_txn_active; typedef struct __db_txn_ac/
-DB_TXN_CKP ../include/db.in /^#define DB_TXN_CKP (-30894)\/* Encountered ckp re/
-DB_TXN_NOSYNC ../include/db.in /^#define DB_TXN_NOSYNC 0x000080 \/* Do not sy/
-DB_TXN_NOWAIT ../include/db.in /^#define DB_TXN_NOWAIT 0x000400 \/* Do not wa/
-DB_TXN_STAT ../include/db.in /^struct __db_txn_stat; typedef struct __db_txn_stat/
-DB_TXN_SYNC ../include/db.in /^#define DB_TXN_SYNC 0x000800 \/* Always sync/
-DB_UNDO ../include/db.in /^#define DB_UNDO(op) ((op) == DB_TXN_ABORT || (op) /
-DB_UNUSED_1 ../include/db_am.h /^#define DB_UNUSED_1 0x50$/
-DB_UNUSED_2 ../include/db_am.h /^#define DB_UNUSED_2 0x60$/
-DB_UPDATE_SECONDARY ../include/db.in /^#define DB_UPDATE_SECONDARY 35 \/* c_get(), c_del(/
-DB_UPGRADE ../include/db.in /^#define DB_UPGRADE 0x000400 \/* Upgrading. */
-DB_USE_ENVIRON ../include/db.in /^#define DB_USE_ENVIRON 0x000100 \/* Use the /
-DB_USE_ENVIRON_ROOT ../include/db.in /^#define DB_USE_ENVIRON_ROOT 0x000200 \/* Use the/
-DB_VERB_CHKPOINT ../include/db.in /^#define DB_VERB_CHKPOINT 0x0001 \/* List checkpoin/
-DB_VERB_DEADLOCK ../include/db.in /^#define DB_VERB_DEADLOCK 0x0002 \/* Deadlock detec/
-DB_VERB_RECOVERY ../include/db.in /^#define DB_VERB_RECOVERY 0x0004 \/* Recovery infor/
-DB_VERB_WAITSFOR ../include/db.in /^#define DB_VERB_WAITSFOR 0x0008 \/* Dump waits-for/
-DB_VERIFY ../include/db.in /^#define DB_VERIFY 0x000800 \/* Verifying. */
-DB_VERIFY_BAD ../include/db.in /^#define DB_VERIFY_BAD (-30986)\/* Verify failed; /
-DB_VERIFY_FATAL ../include/db.in /^#define DB_VERIFY_FATAL (-30893)\/* Fatal: DB->ve/
-DB_VERSION_MAJOR ../include/db.in /^#define DB_VERSION_MAJOR @DB_VERSION_MAJOR@$/
-DB_VERSION_MINOR ../include/db.in /^#define DB_VERSION_MINOR @DB_VERSION_MINOR@$/
-DB_VERSION_PATCH ../include/db.in /^#define DB_VERSION_PATCH @DB_VERSION_PATCH@$/
-DB_VERSION_STRING ../include/db.in /^#define DB_VERSION_STRING @DB_VERSION_STRING@$/
-DB_WO_ACCESS ../include/cxx_int.h /^#define DB_WO_ACCESS(_class, _type, _cxx_name, _fi/
-DB_WRITECURSOR ../include/db.in /^#define DB_WRITECURSOR 36 \/* cursor() *\/$/
-DB_WRITELOCK ../include/db.in /^#define DB_WRITELOCK 37 \/* cursor() (internal) */
-DB_XA_CREATE ../include/db.in /^#define DB_XA_CREATE 0x000400 \/* Open in an/
-DB_XIDDATASIZE ../include/db.in /^#define DB_XIDDATASIZE 128$/
-DB_user_BEGIN ../include/db_dispatch.h /^#define DB_user_BEGIN 10000$/
+DB_ADD_BIG ../dbinc/db_am.h 25
+DB_ADD_DUP ../dbinc/db_am.h 23
+DB_ADD_PAGE ../dbinc/db_am.h 27
+DB_AES_CHUNK ../dbinc/crypto.h 68
+DB_AES_KEYLEN ../dbinc/crypto.h 67
+DB_AFTER ../dbinc/db.in 985
+DB_AGGRESSIVE ../dbinc/db.in 293
+DB_ALREADY_ABORTED ../dbinc/db.in 1075
+DB_AM_CHKSUM ../dbinc/db.in 1334
+DB_AM_CL_WRITER ../dbinc/db.in 1335
+DB_AM_COMPENSATE ../dbinc/db.in 1336
+DB_AM_CREATED ../dbinc/db.in 1337
+DB_AM_CREATED_MSTR ../dbinc/db.in 1338
+DB_AM_DBM_ERROR ../dbinc/db.in 1339
+DB_AM_DELIMITER ../dbinc/db.in 1340
+DB_AM_DIRTY ../dbinc/db.in 1341
+DB_AM_DISCARD ../dbinc/db.in 1342
+DB_AM_DUP ../dbinc/db.in 1343
+DB_AM_DUPSORT ../dbinc/db.in 1344
+DB_AM_ENCRYPT ../dbinc/db.in 1345
+DB_AM_FIXEDLEN ../dbinc/db.in 1346
+DB_AM_INMEM ../dbinc/db.in 1347
+DB_AM_IN_RENAME ../dbinc/db.in 1348
+DB_AM_NOT_DURABLE ../dbinc/db.in 1349
+DB_AM_OPEN_CALLED ../dbinc/db.in 1350
+DB_AM_PAD ../dbinc/db.in 1351
+DB_AM_PGDEF ../dbinc/db.in 1352
+DB_AM_RDONLY ../dbinc/db.in 1353
+DB_AM_RECNUM ../dbinc/db.in 1354
+DB_AM_RECOVER ../dbinc/db.in 1355
+DB_AM_RENUMBER ../dbinc/db.in 1356
+DB_AM_REPLICATION ../dbinc/db.in 1357
+DB_AM_REVSPLITOFF ../dbinc/db.in 1358
+DB_AM_SECONDARY ../dbinc/db.in 1359
+DB_AM_SNAPSHOT ../dbinc/db.in 1360
+DB_AM_SUBDB ../dbinc/db.in 1361
+DB_AM_SWAP ../dbinc/db.in 1362
+DB_AM_TXN ../dbinc/db.in 1363
+DB_AM_VERIFYING ../dbinc/db.in 1364
+DB_APPEND ../dbinc/db.in 986
+DB_ARCH_ABS ../dbinc/db.in 467
+DB_ARCH_DATA ../dbinc/db.in 468
+DB_ARCH_LOG ../dbinc/db.in 469
+DB_ARCH_REMOVE ../dbinc/db.in 470
+DB_ASSERT ../dbinc/debug.h /^#define DB_ASSERT(e) ((e) ? (void)0 : __db_assert(/
+DB_AUTO_COMMIT ../dbinc/db.in 190
+DB_BEFORE ../dbinc/db.in 987
+DB_BEGIN_SINGLE_THREAD ../dbinc/mutex.h 17
+DB_BTREEMAGIC ../dbinc/db.in 971
+DB_BTREEOLDVER ../dbinc/db.in 970
+DB_BTREEVERSION ../dbinc/db.in 969
+DB_BTREE_STAT ../dbinc/db.in 98
+DB_CACHED_COUNTS ../dbinc/db.in 988
+DB_CACHESIZE_MIN ../dbinc/mp.h 19
+DB_CACHE_PRIORITY ../dbinc/db.in 588
+DB_CALLBACK_C_INTERCEPT ../cxx/cxx_db.cpp /^#define DB_CALLBACK_C_INTERCEPT(_name, _rettype, _/
+DB_CDB_ALLDB ../dbinc/db.in 242
+DB_CHKSUM ../dbinc/db.in 271
+DB_CIPHER ../dbinc/db.in 99
+DB_COMMIT_FLUSH ../dbinc/log.h 264
+DB_CONSUME ../dbinc/db.in 989
+DB_CONSUME_WAIT ../dbinc/db.in 990
+DB_CREATE ../dbinc/db.in 157
+DB_CURRENT ../dbinc/db.in 991
+DB_CXX_NO_EXCEPTIONS ../dbinc/db.in 158
+DB_CXX_PRIVATE_ENV ../dbinc/cxx_int.h 79
+DB_DBM_HSEARCH ../dbinc/db.in 1896
+DB_DBT_APPMALLOC ../dbinc/db.in 142
+DB_DBT_DUPOK ../dbinc/db.in 148
+DB_DBT_ISSET ../dbinc/db.in 143
+DB_DBT_MALLOC ../dbinc/db.in 144
+DB_DBT_PARTIAL ../dbinc/db.in 145
+DB_DBT_REALLOC ../dbinc/db.in 146
+DB_DBT_USERMEM ../dbinc/db.in 147
+DB_DEF_IOSIZE ../dbinc/db_int.in 65
+DB_DELETED ../dbinc/db.in 1076
+DB_DIRECT ../dbinc/db.in 264
+DB_DIRECT_DB ../dbinc/db.in 243
+DB_DIRECT_LOG ../dbinc/db.in 244
+DB_DIRTY_READ ../dbinc/db.in 191
+DB_DONOTINDEX ../dbinc/db.in 1049
+DB_DUP ../dbinc/db.in 272
+DB_DUPSORT ../dbinc/db.in 273
+DB_EID_BROADCAST ../dbinc/db.in 890
+DB_EID_INVALID ../dbinc/db.in 891
+DB_ENCRYPT ../dbinc/db.in 274
+DB_ENCRYPT_AES ../dbinc/db.in 237
+DB_ENC_MAGIC ../dbinc/hmac.h 29
+DB_END_SINGLE_THREAD ../dbinc/mutex.h 18
+DB_ENV ../dbinc/db.in 101
+DB_ENV_AUTO_COMMIT ../dbinc/db.in 1866
+DB_ENV_CDB ../dbinc/db.in 1867
+DB_ENV_CDB_ALLDB ../dbinc/db.in 1868
+DB_ENV_CREATE ../dbinc/db.in 1869
+DB_ENV_DBLOCAL ../dbinc/db.in 1870
+DB_ENV_DIRECT_DB ../dbinc/db.in 1871
+DB_ENV_DIRECT_LOG ../dbinc/db.in 1872
+DB_ENV_FATAL ../dbinc/db.in 1873
+DB_ENV_INTERNAL ../libdb_java/db_java_wrap.c /^#define DB_ENV_INTERNAL(dbenv) ((dbenv)->api2_inte/
+DB_ENV_LOCKDOWN ../dbinc/db.in 1874
+DB_ENV_LOG_AUTOREMOVE ../dbinc/db.in 1875
+DB_ENV_NOLOCKING ../dbinc/db.in 1876
+DB_ENV_NOMMAP ../dbinc/db.in 1877
+DB_ENV_NOPANIC ../dbinc/db.in 1878
+DB_ENV_OPEN_CALLED ../dbinc/db.in 1879
+DB_ENV_OVERWRITE ../dbinc/db.in 1880
+DB_ENV_PRIVATE ../dbinc/db.in 1881
+DB_ENV_REGION_INIT ../dbinc/db.in 1882
+DB_ENV_RPCCLIENT ../dbinc/db.in 1883
+DB_ENV_RPCCLIENT_GIVEN ../dbinc/db.in 1884
+DB_ENV_SYSTEM_MEM ../dbinc/db.in 1885
+DB_ENV_TEST_RECOVERY ../dbinc/debug.h /^#define DB_ENV_TEST_RECOVERY(env, val, ret, name) /
+DB_ENV_THREAD ../dbinc/db.in 1886
+DB_ENV_TIME_NOTGRANTED ../dbinc/db.in 1887
+DB_ENV_TXN_NOSYNC ../dbinc/db.in 1888
+DB_ENV_TXN_NOT_DURABLE ../dbinc/db.in 1889
+DB_ENV_TXN_WRITE_NOSYNC ../dbinc/db.in 1890
+DB_ENV_YIELDCPU ../dbinc/db.in 1891
+DB_ERROR ../dbinc/cxx_int.h /^#define DB_ERROR(env, caller, ecode, policy) \\$/
+DB_ERROR_DBT ../dbinc/cxx_int.h /^#define DB_ERROR_DBT(env, caller, dbt, policy) \\$/
+DB_EXCL ../dbinc/db.in 223
+DB_EXTENT ../dbinc/db.in 265
+DB_FAST_STAT ../dbinc/db.in 992
+DB_FCNTL_LOCKING ../dbinc/db.in 224
+DB_FCNTL_OFF_GEN ../dbinc/mutex.h 954
+DB_FCNTL_OFF_LOCK ../dbinc/mutex.h 955
+DB_FCNTL_OFF_MPOOL ../dbinc/mutex.h 956
+DB_FH ../dbinc/db.in 124
+DB_FH_NOSYNC ../dbinc/os.h 72
+DB_FH_OPENED ../dbinc/os.h 73
+DB_FH_UNLINK ../dbinc/os.h 74
+DB_FILEOPEN ../dbinc/db.in 1050
+DB_FILE_ID_LEN ../dbinc/db.in 317
+DB_FIRST ../dbinc/db.in 993
+DB_FLUSH ../dbinc/db.in 473
+DB_FORCE ../dbinc/db.in 159
+DB_FTYPE_NOTSET ../dbinc/db_int.in 362
+DB_FTYPE_SET ../dbinc/db_int.in 361
+DB_GET_BOTH ../dbinc/db.in 994
+DB_GET_BOTHC ../dbinc/db.in 995
+DB_GET_BOTH_RANGE ../dbinc/db.in 996
+DB_GET_RECNO ../dbinc/db.in 997
+DB_GLOBAL ../dbinc/globals.h /^#define DB_GLOBAL(v) __db_global_values.v$/
+DB_GROW_SIZE ../dbinc/log.h 87
+DB_HANDLE_LOCK ../dbinc/db.in 431
+DB_HASHMAGIC ../dbinc/db.in 975
+DB_HASHOLDVER ../dbinc/db.in 974
+DB_HASHVERSION ../dbinc/db.in 973
+DB_HASH_DUP ../dbinc/db_page.h 123
+DB_HASH_DUPSORT ../dbinc/db_page.h 125
+DB_HASH_STAT ../dbinc/db.in 102
+DB_HASH_SUBDB ../dbinc/db_page.h 124
+DB_HTONL ../dbinc/db_swap.h /^#define DB_HTONL(p) do { \\$/
+DB_ILLEGAL_AFTER_OPEN ../dbinc/db_int.in /^#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \\$/
+DB_ILLEGAL_BEFORE_OPEN ../dbinc/db_int.in /^#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \\$/
+DB_ILLEGAL_IN_ENV ../dbinc/db_int.in /^#define DB_ILLEGAL_IN_ENV(dbp, name) \\$/
+DB_ILLEGAL_METHOD ../dbinc/db_int.in /^#define DB_ILLEGAL_METHOD(dbp, flags) { \\$/
+DB_INITENV_CDB ../env/env_open.c 96
+DB_INITENV_CDB_ALLDB ../env/env_open.c 97
+DB_INITENV_LOCK ../env/env_open.c 98
+DB_INITENV_LOG ../env/env_open.c 99
+DB_INITENV_MPOOL ../env/env_open.c 100
+DB_INITENV_REP ../env/env_open.c 101
+DB_INITENV_TXN ../env/env_open.c 102
+DB_INITIALIZE_DB_GLOBALS ../env/env_method.c 29
+DB_INIT_CDB ../dbinc/db.in 208
+DB_INIT_LOCK ../dbinc/db.in 209
+DB_INIT_LOG ../dbinc/db.in 210
+DB_INIT_MPOOL ../dbinc/db.in 211
+DB_INIT_REP ../dbinc/db.in 212
+DB_INIT_TXN ../dbinc/db.in 213
+DB_INTERNAL ../libdb_java/db_java_wrap.c /^#define DB_INTERNAL(db) ((db)->api_internal)$/
+DB_IO_READ ../dbinc/os.h 43
+DB_IO_WRITE ../dbinc/os.h 44
+DB_IS_THREADED ../dbinc/db_int.in /^#define DB_IS_THREADED(dbp) \\$/
+DB_IV_BYTES ../dbinc/db_int.in 412
+DB_JOINENV ../dbinc/db.in 214
+DB_JOIN_ITEM ../dbinc/db.in 998
+DB_JOIN_NOSORT ../dbinc/db.in 288
+DB_KEYEMPTY ../dbinc/db.in 1051
+DB_KEYEXIST ../dbinc/db.in 1052
+DB_KEYFIRST ../dbinc/db.in 999
+DB_KEYLAST ../dbinc/db.in 1000
+DB_KEY_RANGE ../dbinc/db.in 126
+DB_LAST ../dbinc/db.in 1001
+DB_LINE ../dbinc/db_int.in 153
+DB_LOCK ../dbinc/db.in 105
+DB_LOCKDOWN ../dbinc/db.in 215
+DB_LOCKER_DELETED ../dbinc/lock.h 143
+DB_LOCKER_DIRTY ../dbinc/lock.h 144
+DB_LOCKER_INABORT ../dbinc/lock.h 145
+DB_LOCKER_TIMEOUT ../dbinc/lock.h 146
+DB_LOCKREQ ../dbinc/db.in 106
+DB_LOCKVERSION ../dbinc/db.in 315
+DB_LOCK_CDB_N ../lock/lock_region.c 55
+DB_LOCK_DEADLOCK ../dbinc/db.in 1053
+DB_LOCK_DEFAULT ../dbinc/db.in 324
+DB_LOCK_DEFAULT_N ../dbinc/lock.h 13
+DB_LOCK_DOALL ../dbinc/lock.h 196
+DB_LOCK_EXPIRE ../dbinc/db.in 325
+DB_LOCK_FREE ../dbinc/lock.h 197
+DB_LOCK_ILOCK ../dbinc/db.in 103
+DB_LOCK_INVALIDID ../dbinc/lock.h 20
+DB_LOCK_MAXID ../dbinc/lock.h 21
+DB_LOCK_MAXLOCKS ../dbinc/db.in 326
+DB_LOCK_MINLOCKS ../dbinc/db.in 327
+DB_LOCK_MINWRITE ../dbinc/db.in 328
+DB_LOCK_NOPROMOTE ../dbinc/lock.h 198
+DB_LOCK_NORUN ../dbinc/db.in 323
+DB_LOCK_NOTEXIST ../dbinc/db.in 1077
+DB_LOCK_NOTGRANTED ../dbinc/db.in 1054
+DB_LOCK_NOWAIT ../dbinc/db.in 334
+DB_LOCK_NOWAITERS ../dbinc/lock.h 200
+DB_LOCK_OLDEST ../dbinc/db.in 329
+DB_LOCK_RANDOM ../dbinc/db.in 330
+DB_LOCK_RECORD ../dbinc/db.in 335
+DB_LOCK_REMOVE ../dbinc/db.in 336
+DB_LOCK_RIW_N ../lock/lock_region.c 36
+DB_LOCK_SET_TIMEOUT ../dbinc/db.in 337
+DB_LOCK_STAT ../dbinc/db.in 104
+DB_LOCK_SWITCH ../dbinc/db.in 338
+DB_LOCK_UNLINK ../dbinc/lock.h 199
+DB_LOCK_UPGRADE ../dbinc/db.in 339
+DB_LOCK_YOUNGEST ../dbinc/db.in 331
+DB_LOG ../dbinc/log.h 58
+DB_LOGC ../dbinc/db.in 107
+DB_LOGC_BUF_SIZE ../dbinc/db.in 521
+DB_LOGFILEID_INVALID ../dbinc/db.in 1118
+DB_LOGMAGIC ../dbinc/db.in 464
+DB_LOGOLDVER ../dbinc/db.in 463
+DB_LOGVERSION ../dbinc/db.in 462
+DB_LOG_AUTOREMOVE ../dbinc/db.in 245
+DB_LOG_CHKPNT ../dbinc/db.in 474
+DB_LOG_COMMIT ../dbinc/db.in 475
+DB_LOG_DISK ../dbinc/db.in 533
+DB_LOG_LOCKED ../dbinc/db.in 534
+DB_LOG_NOCOPY ../dbinc/db.in 476
+DB_LOG_NOT_DURABLE ../dbinc/db.in 477
+DB_LOG_PERM ../dbinc/db.in 478
+DB_LOG_SILENT_ERR ../dbinc/db.in 535
+DB_LOG_STAT ../dbinc/db.in 108
+DB_LOG_WRNOSYNC ../dbinc/db.in 479
+DB_LSN ../dbinc/db.in 109
+DB_MAC_KEY ../dbinc/db_int.in 413
+DB_MAC_MAGIC ../dbinc/hmac.h 28
+DB_MAXMMAPSIZE ../mp/mp_fopen.c 962
+DB_MAX_HANDLES ../dbinc/mutex.h 973
+DB_MAX_PAGES ../dbinc/db.in 79
+DB_MAX_PGSIZE ../dbinc/db_int.in 54
+DB_MAX_RECORDS ../dbinc/db.in 82
+DB_METHOD ../cxx/cxx_db.cpp /^#define DB_METHOD(_name, _argspec, _arglist, _reto/
+DB_METHOD_CHECKED ../cxx/cxx_db.cpp /^#define DB_METHOD_CHECKED(_name, _cleanup, _argspe/
+DB_METHOD_QUIET ../cxx/cxx_db.cpp /^#define DB_METHOD_QUIET(_name, _argspec, _arglist)/
+DB_METHOD_VOID ../cxx/cxx_db.cpp /^#define DB_METHOD_VOID(_name, _argspec, _arglist) /
+DB_MINPAGECACHE ../dbinc/db_int.in 59
+DB_MIN_PGSIZE ../dbinc/db_int.in 53
+DB_MPOOL ../dbinc/db.in 110
+DB_MPOOLFILE ../dbinc/db.in 113
+DB_MPOOLFILE_METHOD ../cxx/cxx_mpool.cpp /^#define DB_MPOOLFILE_METHOD(_name, _argspec, _argl/
+DB_MPOOLFILE_METHOD_VOID ../cxx/cxx_mpool.cpp /^#define DB_MPOOLFILE_METHOD_VOID(_name, _argspec, /
+DB_MPOOL_CLEAN ../dbinc/db.in 573
+DB_MPOOL_CREATE ../dbinc/db.in 568
+DB_MPOOL_DIRTY ../dbinc/db.in 574
+DB_MPOOL_DISCARD ../dbinc/db.in 575
+DB_MPOOL_FSTAT ../dbinc/db.in 111
+DB_MPOOL_HASH ../dbinc/mp.h 14
+DB_MPOOL_LAST ../dbinc/db.in 569
+DB_MPOOL_NEW ../dbinc/db.in 570
+DB_MPOOL_NOFILE ../dbinc/db.in 578
+DB_MPOOL_STAT ../dbinc/db.in 112
+DB_MPOOL_UNLINK ../dbinc/db.in 579
+DB_MPREG ../dbinc/mp.h 15
+DB_MULTIPLE ../dbinc/db.in 1030
+DB_MULTIPLE_INIT ../dbinc/db.in /^#define DB_MULTIPLE_INIT(pointer, dbt) \\$/
+DB_MULTIPLE_KEY ../dbinc/db.in 1031
+DB_MULTIPLE_KEY_NEXT ../dbinc/db.in /^#define DB_MULTIPLE_KEY_NEXT(pointer, dbt, retkey,/
+DB_MULTIPLE_NEXT ../dbinc/db.in /^#define DB_MULTIPLE_NEXT(pointer, dbt, retdata, re/
+DB_MULTIPLE_RECNO_NEXT ../dbinc/db.in /^#define DB_MULTIPLE_RECNO_NEXT(pointer, dbt, recno/
+DB_MUTEX ../dbinc/db.in 128
+DB_NEEDSPLIT ../dbinc/db.in 1078
+DB_NEXT ../dbinc/db.in 1002
+DB_NEXT_DUP ../dbinc/db.in 1003
+DB_NEXT_NODUP ../dbinc/db.in 1004
+DB_NODUPDATA ../dbinc/db.in 1005
+DB_NOLOCKING ../dbinc/db.in 246
+DB_NOMMAP ../dbinc/db.in 160
+DB_NONBLOCK ../dbinc/db_int.in /^#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSE/
+DB_NOORDERCHK ../dbinc/db.in 294
+DB_NOOVERWRITE ../dbinc/db.in 1006
+DB_NOPANIC ../dbinc/db.in 247
+DB_NOSERVER ../dbinc/db.in 1055
+DB_NOSERVER_HOME ../dbinc/db.in 1056
+DB_NOSERVER_ID ../dbinc/db.in 1057
+DB_NOSYNC ../dbinc/db.in 1007
+DB_NOTFOUND ../dbinc/db.in 1058
+DB_NO_AUTO_COMMIT ../dbinc/db.in 192
+DB_NTOHL ../dbinc/db_swap.h /^#define DB_NTOHL(p) do { \\$/
+DB_ODDFILESIZE ../dbinc/db.in 266
+DB_OK_BTREE ../dbinc/db.in 1328
+DB_OK_HASH ../dbinc/db.in 1329
+DB_OK_QUEUE ../dbinc/db.in 1330
+DB_OK_RECNO ../dbinc/db.in 1331
+DB_OLD_VERSION ../dbinc/db.in 1059
+DB_OPFLAGS_MASK ../dbinc/db.in 1023
+DB_OPNOTSUP ../dbinc/db_int.in 183
+DB_ORDERCHKONLY ../dbinc/db.in 295
+DB_OSO_CREATE ../dbinc/os.h 20
+DB_OSO_DIRECT ../dbinc/os.h 21
+DB_OSO_EXCL ../dbinc/os.h 22
+DB_OSO_LOG ../dbinc/os.h 23
+DB_OSO_RDONLY ../dbinc/os.h 24
+DB_OSO_REGION ../dbinc/os.h 25
+DB_OSO_SEQ ../dbinc/os.h 26
+DB_OSO_TEMP ../dbinc/os.h 27
+DB_OSO_TRUNC ../dbinc/os.h 28
+DB_OS_SEEK ../dbinc/os.h 37
+DB_OVERFLOWED_DBT ../dbinc/cxx_int.h /^#define DB_OVERFLOWED_DBT(dbt) \\$/
+DB_OVERWRITE ../dbinc/db.in 248
+DB_PAGE_DB_LEN ../dbinc/db_page.h 58
+DB_PAGE_LOCK ../dbinc/db.in 433
+DB_PAGE_NOTFOUND ../dbinc/db.in 1060
+DB_PAGE_QUEUE_LEN ../dbinc/db_page.h 59
+DB_PANIC_ENVIRONMENT ../dbinc/db.in 249
+DB_PKG ../libdb_java/db_java_wrap.c 80
+DB_POSITION ../dbinc/db.in 1008
+DB_PREPLIST ../dbinc/db.in 114
+DB_PREV ../dbinc/db.in 1009
+DB_PREV_NODUP ../dbinc/db.in 1010
+DB_PRINTABLE ../dbinc/db.in 298
+DB_PRIVATE ../dbinc/db.in 216
+DB_PR_PAGE ../dbinc/db.in 296
+DB_PR_RECOVERYTEST ../dbinc/db.in 297
+DB_PUT_ACTION ../db/db_meta.c /^#define DB_PUT_ACTION(dbc, action, lockp) \\$/
+DB_QAMMAGIC ../dbinc/db.in 979
+DB_QAMOLDVER ../dbinc/db.in 978
+DB_QAMVERSION ../dbinc/db.in 977
+DB_QUEUE_STAT ../dbinc/db.in 115
+DB_RDONLY ../dbinc/db.in 161
+DB_RDWRMASTER ../dbinc/db.in 225
+DB_REAL_ERR ../dbinc/debug.h /^#define DB_REAL_ERR(env, error, error_set, stderr_/
+DB_RECNUM ../dbinc/db.in 275
+DB_RECORDCOUNT ../dbinc/db.in 1011
+DB_RECORD_LOCK ../dbinc/db.in 432
+DB_RECOVER ../dbinc/db.in 162
+DB_RECOVER_FATAL ../dbinc/db.in 217
+DB_REDO ../dbinc/db.in /^#define DB_REDO(op) ((op) == DB_TXN_FORWARD_ROLL |/
+DB_REGION_ENV ../dbinc/region.h 104
+DB_REGION_FMT ../dbinc/region.h 103
+DB_REGION_INIT ../dbinc/db.in 250
+DB_REGION_MAGIC ../dbinc/db.in 1582
+DB_REGION_NAME_LENGTH ../dbinc/region.h 105
+DB_REGION_PREFIX ../dbinc/region.h 102
+DB_REM_BIG ../dbinc/db_am.h 26
+DB_REM_DUP ../dbinc/db_am.h 24
+DB_REM_PAGE ../dbinc/db_am.h 28
+DB_RENAMEMAGIC ../dbinc/db.in 967
+DB_RENUMBER ../dbinc/db.in 276
+DB_REP ../dbinc/db.in 116
+DB_REPVERSION ../dbinc/rep.h 173
+DB_REP_CLIENT ../dbinc/db.in 894
+DB_REP_CREATE ../dbinc/db.in 202
+DB_REP_DUPMASTER ../dbinc/db.in 1061
+DB_REP_HANDLE_DEAD ../dbinc/db.in 1062
+DB_REP_HOLDELECTION ../dbinc/db.in 1063
+DB_REP_ISPERM ../dbinc/db.in 1064
+DB_REP_LOGSONLY ../dbinc/db.in 895
+DB_REP_MASTER ../dbinc/db.in 896
+DB_REP_MAX_GAP ../dbinc/rep.h 64
+DB_REP_NEWMASTER ../dbinc/db.in 1065
+DB_REP_NEWSITE ../dbinc/db.in 1066
+DB_REP_NOBUFFER ../dbinc/db.in 309
+DB_REP_NOTPERM ../dbinc/db.in 1067
+DB_REP_OUTDATED ../dbinc/db.in 1068
+DB_REP_PERMANENT ../dbinc/db.in 310
+DB_REP_REQUEST_GAP ../dbinc/rep.h 63
+DB_REP_STAT ../dbinc/db.in 117
+DB_REP_UNAVAIL ../dbinc/db.in 1069
+DB_RETOK_DBCDEL ../dbinc/db_int.in /^#define DB_RETOK_DBCDEL(ret) ((ret) == 0 || (ret) /
+DB_RETOK_DBCGET ../dbinc/db_int.in /^#define DB_RETOK_DBCGET(ret) ((ret) == 0 || (ret) /
+DB_RETOK_DBCPUT ../dbinc/db_int.in /^#define DB_RETOK_DBCPUT(ret) ((ret) == 0 || (ret) /
+DB_RETOK_DBDEL ../dbinc/db_int.in /^#define DB_RETOK_DBDEL(ret) DB_RETOK_DBCDEL(ret)$/
+DB_RETOK_DBGET ../dbinc/db_int.in /^#define DB_RETOK_DBGET(ret) DB_RETOK_DBCGET(ret)$/
+DB_RETOK_DBPUT ../dbinc/db_int.in /^#define DB_RETOK_DBPUT(ret) ((ret) == 0 || (ret) =/
+DB_RETOK_LGGET ../dbinc/db_int.in /^#define DB_RETOK_LGGET(ret) ((ret) == 0 || (ret) =/
+DB_RETOK_MPGET ../dbinc/db_int.in /^#define DB_RETOK_MPGET(ret) ((ret) == 0 || (ret) =/
+DB_RETOK_REPPMSG ../dbinc/db_int.in /^#define DB_RETOK_REPPMSG(ret) ((ret) == 0 || \\$/
+DB_RETOK_STD ../dbinc/db_int.in /^#define DB_RETOK_STD(ret) ((ret) == 0)$/
+DB_RETRY ../dbinc/db_int.in 68
+DB_REVSPLITOFF ../dbinc/db.in 277
+DB_RMW ../dbinc/db.in 1032
+DB_RPCCLIENT ../dbinc/db.in 197
+DB_RUNRECOVERY ../dbinc/db.in 1070
+DB_SALVAGE ../dbinc/db.in 299
+DB_SECONDARY_BAD ../dbinc/db.in 1071
+DB_SERVER_DBFLAGS ../dbinc/db_server_int.h 61
+DB_SERVER_DBNOSHARE ../dbinc/db_server_int.h 62
+DB_SERVER_ENVFLAGS ../dbinc/db_server_int.h 57
+DB_SERVER_FLAGMASK ../dbinc/db_server_int.h 28
+DB_SERVER_IDLETIMEOUT ../dbinc/db_server_int.h 15
+DB_SERVER_MAXTIMEOUT ../dbinc/db_server_int.h 14
+DB_SERVER_TIMEOUT ../dbinc/db_server_int.h 13
+DB_SET ../dbinc/db.in 1012
+DB_SET_CALLBACK ../cxx/cxx_db.cpp /^#define DB_SET_CALLBACK(_cxxname, _name, _cxxargsp/
+DB_SET_LOCK_TIMEOUT ../dbinc/db.in 1013
+DB_SET_RANGE ../dbinc/db.in 1014
+DB_SET_RECNO ../dbinc/db.in 1015
+DB_SET_TXN_NOW ../dbinc/db.in 1016
+DB_SET_TXN_TIMEOUT ../dbinc/db.in 1017
+DB_SNAPSHOT ../dbinc/db.in 278
+DB_STAT_CLEAR ../dbinc/db.in 283
+DB_SURPRISE_KID ../dbinc/db.in 1079
+DB_SWAPBYTES ../dbinc/db.in 1081
+DB_SYSTEM_MEM ../dbinc/db.in 218
+DB_TEST_ELECTINIT ../dbinc/db.in 1854
+DB_TEST_POSTDESTROY ../dbinc/db.in 1855
+DB_TEST_POSTLOG ../dbinc/db.in 1856
+DB_TEST_POSTLOGMETA ../dbinc/db.in 1857
+DB_TEST_POSTOPEN ../dbinc/db.in 1858
+DB_TEST_POSTSYNC ../dbinc/db.in 1859
+DB_TEST_PREDESTROY ../dbinc/db.in 1860
+DB_TEST_PREOPEN ../dbinc/db.in 1861
+DB_TEST_RECOVERY ../dbinc/debug.h /^#define DB_TEST_RECOVERY(dbp, val, ret, name) \\/
+DB_TEST_RECOVERY_LABEL ../dbinc/debug.h 206
+DB_TEST_SUBDB_LOCKS ../dbinc/db.in 1862
+DB_TEST_SUBLOCKS ../dbinc/debug.h /^#define DB_TEST_SUBLOCKS(env, flags) \\$/
+DB_THREAD ../dbinc/db.in 163
+DB_TIMEOUT ../dbinc/db.in 1082
+DB_TIME_NOTGRANTED ../dbinc/db.in 251
+DB_TRAIL ../env/env_open.c 869
+DB_TRUNCATE ../dbinc/db.in 164
+DB_TXN ../dbinc/db.in 118
+DB_TXNHEAD ../dbinc/db_int.in 419
+DB_TXNLIST ../dbinc/db_int.in 420
+DB_TXNLIST_MASK ../dbinc/db_dispatch.h /^#define DB_TXNLIST_MASK(hp, n) (n % hp->nslots)$/
+DB_TXNLIST_MAX_PGNO ../db/db_dispatch.c 1408
+DB_TXNLOGREC ../dbinc/txn.h 24
+DB_TXNMGR ../dbinc/db.in 121
+DB_TXNREGION ../dbinc/txn.h 23
+DB_TXNVERSION ../dbinc/db.in 730
+DB_TXN_ACTIVE ../dbinc/db.in 119
+DB_TXN_CKP ../dbinc/db.in 1083
+DB_TXN_NOSYNC ../dbinc/db.in 165
+DB_TXN_NOT_DURABLE ../dbinc/db.in 166
+DB_TXN_NOWAIT ../dbinc/db.in 231
+DB_TXN_STAT ../dbinc/db.in 120
+DB_TXN_SYNC ../dbinc/db.in 232
+DB_TXN_WRITE_NOSYNC ../dbinc/db.in 252
+DB_UNDO ../dbinc/db.in /^#define DB_UNDO(op) ((op) == DB_TXN_ABORT || \\$/
+DB_UPDATE_SECONDARY ../dbinc/db.in 1018
+DB_UPGRADE ../dbinc/db.in 258
+DB_USE_ENVIRON ../dbinc/db.in 167
+DB_USE_ENVIRON_ROOT ../dbinc/db.in 168
+DB_VERB_CHKPOINT ../dbinc/db.in 1606
+DB_VERB_DEADLOCK ../dbinc/db.in 1607
+DB_VERB_RECOVERY ../dbinc/db.in 1608
+DB_VERB_REPLICATION ../dbinc/db.in 1609
+DB_VERB_WAITSFOR ../dbinc/db.in 1610
+DB_VERIFY ../dbinc/db.in 259
+DB_VERIFY_BAD ../dbinc/db.in 1072
+DB_VERIFY_FATAL ../dbinc/db.in 1084
+DB_VERSION_MAJOR ../dbinc/db.in 43
+DB_VERSION_MINOR ../dbinc/db.in 44
+DB_VERSION_PATCH ../dbinc/db.in 45
+DB_VERSION_STRING ../dbinc/db.in 46
+DB_WRITECURSOR ../dbinc/db.in 1019
+DB_WRITELOCK ../dbinc/db.in 1020
+DB_WRITEOPEN ../dbinc/db.in 226
+DB_XA_CREATE ../dbinc/db.in 203
+DB_XIDDATASIZE ../dbinc/db.in 853
+DB_YIELDCPU ../dbinc/db.in 253
+DB_debug_FLAG ../dbinc/db.in 505
+DB_user_BEGIN ../dbinc/db.in 504
DCHARHASH ../hash/hash_func.c /^#define DCHARHASH(h, c) ((h) = 0x63c63cd9*(h) + 0x/
-DEBUG_LREAD ../include/debug.h /^#define DEBUG_LREAD(C, T, O, K, A, F) LOG_OP(C, T,/
-DEBUG_LWRITE ../include/debug.h /^#define DEBUG_LWRITE(C, T, O, K, A, F) LOG_OP(C, T/
-DEFMINKEYPAGE ../include/btree.h /^#define DEFMINKEYPAGE (2)$/
-DEF_MAX_TXNS ../include/txn.h /^#define DEF_MAX_TXNS 20 \/* Default max transacti/
-DELETE_GLOBAL_REF ../libdb_java/java_util.h /^#define DELETE_GLOBAL_REF(jnienv, obj) \\$/
-DELOVFL ../include/hash.h /^#define DELOVFL 0x50$/
-DELPAIR ../include/hash.h /^#define DELPAIR 0x30$/
-DISCARD ../btree/bt_cursor.c /^#define DISCARD(dbc, ldiscard, lock, pagep, ret) {/
+DD_INVALID_ID ../lock/lock_deadlock.c 346
+DEBUG_LREAD ../dbinc/debug.h /^#define DEBUG_LREAD(C, T, O, K, A, F) LOG_OP(C, T,/
+DEBUG_LWRITE ../dbinc/debug.h /^#define DEBUG_LWRITE(C, T, O, K, A, F) LOG_OP(C, T/
+DEFINE_DB_CLASS ../dbinc/db_cxx.in /^#define DEFINE_DB_CLASS(name) \\$/
+DEFMINKEYPAGE ../dbinc/btree.h 53
+DEF_MAX_TXNS ../dbinc/txn.h 34
+DELOVFL ../dbinc/hash.h 129
+DELPAIR ../dbinc/hash.h 127
+DIR_DECRYPT ../crypto/rijndael/rijndael-api-fst.h 48
+DIR_ENCRYPT ../crypto/rijndael/rijndael-api-fst.h 47
DISCARD_CUR ../btree/bt_cursor.c /^#define DISCARD_CUR(dbc, ret) { \\$/
DO_PREPLIST ../tcl/tcl_txn.c /^#define DO_PREPLIST(count) \\$/
-DUP_SIZE ../include/hash.h /^#define DUP_SIZE(len) ((len) + 2 * sizeof(db_indx_/
-DbEnv_feedback_callback ../libdb_java/java_info.c /^static void DbEnv_feedback_callback(DB_ENV *dbenv,/
-DbEnv_initialize ../libdb_java/java_DbEnv.c /^static void DbEnv_initialize(JNIEnv *jnienv, DB_EN/
-DbEnv_recovery_init_callback ../libdb_java/java_info.c /^static int DbEnv_recovery_init_callback(DB_ENV *db/
-DbEnv_tx_recover_callback ../libdb_java/java_info.c /^static int DbEnv_tx_recover_callback(DB_ENV *dbenv/
-DbException ../cxx/cxx_except.cpp /^DbException::~DbException()$/
-DbLock ../cxx/cxx_lock.cpp /^DbLock::DbLock()$/
-DbMemoryException ../cxx/cxx_except.cpp /^DbMemoryException::~DbMemoryException()$/
-DbMpoolFile ../cxx/cxx_mpool.cpp /^DbMpoolFile::~DbMpoolFile()$/
-DbTxn ../cxx/cxx_txn.cpp /^DbTxn::~DbTxn()$/
-Db_append_recno_callback ../libdb_java/java_info.c /^static int Db_append_recno_callback(DB *db, DBT *d/
-Db_assoc_callback ../libdb_java/java_info.c /^static int Db_assoc_callback(DB *db,$/
-Db_bt_compare_callback ../libdb_java/java_info.c /^static int Db_bt_compare_callback(DB *db, const DB/
-Db_bt_prefix_callback ../libdb_java/java_info.c /^static size_t Db_bt_prefix_callback(DB *db, const /
-Db_dup_compare_callback ../libdb_java/java_info.c /^static int Db_dup_compare_callback(DB *db, const D/
-Db_feedback_callback ../libdb_java/java_info.c /^static void Db_feedback_callback(DB *db, int opcod/
-Db_h_hash_callback ../libdb_java/java_info.c /^static u_int32_t Db_h_hash_callback(DB *db, const /
+DO_TRADE ../txn/txn_util.c 220
+DUP_SIZE ../dbinc/hash.h /^#define DUP_SIZE(len) ((len) + 2 * sizeof(db_indx_/
+Db::Db ../cxx/cxx_db.cpp /^Db::Db(DbEnv *env, u_int32_t flags)$/
+Db::cleanup ../cxx/cxx_db.cpp /^void Db::cleanup()$/
+Db::close ../cxx/cxx_db.cpp /^int Db::close(u_int32_t flags)$/
+Db::error_policy ../cxx/cxx_db.cpp /^int Db::error_policy()$/
+Db::errx ../cxx/cxx_db.cpp /^void Db::errx(const char *format, ...)$/
+Db::get_app_private ../cxx/cxx_db.cpp /^void *Db::get_app_private() const$/
+Db::get_byteswapped ../cxx/cxx_db.cpp /^int Db::get_byteswapped(int *isswapped)$/
+Db::get_env ../cxx/cxx_db.cpp /^DbEnv *Db::get_env()$/
+Db::get_mpf ../cxx/cxx_db.cpp /^DbMpoolFile *Db::get_mpf()$/
+Db::initialize ../cxx/cxx_db.cpp /^int Db::initialize()$/
+Db::pget ../cxx/cxx_db.cpp /^int Db::pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Db/
+Db::set_app_private ../cxx/cxx_db.cpp /^void Db::set_app_private(void *value)$/
+Db::set_error_stream ../cxx/cxx_db.cpp /^void Db::set_error_stream(__DB_OSTREAMCLASS *error/
+Db::verify ../cxx/cxx_db.cpp /^int Db::verify(const char *name, const char *subdb/
+Db::~Db ../cxx/cxx_db.cpp /^Db::~Db()$/
+DbDeadlockException::DbDeadlockException ../cxx/cxx_except.cpp /^DbDeadlockException::DbDeadlockException(const cha/
+DbDeadlockException::operator = ../cxx/cxx_except.cpp /^&DbDeadlockException::operator =(const DbDeadlockE/
+DbDeadlockException::~DbDeadlockException ../cxx/cxx_except.cpp /^DbDeadlockException::~DbDeadlockException()$/
+DbEnv::DbEnv ../cxx/cxx_env.cpp /^DbEnv::DbEnv(u_int32_t flags)$/
+DbEnv::_app_dispatch_intercept ../cxx/cxx_env.cpp /^int DbEnv::_app_dispatch_intercept(DB_ENV *env, DB/
+DbEnv::_feedback_intercept ../cxx/cxx_env.cpp /^void DbEnv::_feedback_intercept(DB_ENV *env, int o/
+DbEnv::_paniccall_intercept ../cxx/cxx_env.cpp /^void DbEnv::_paniccall_intercept(DB_ENV *env, int /
+DbEnv::_rep_send_intercept ../cxx/cxx_env.cpp /^int DbEnv::_rep_send_intercept(DB_ENV *env, const /
+DbEnv::_stream_error_function ../cxx/cxx_env.cpp /^void DbEnv::_stream_error_function(const char *pre/
+DbEnv::cleanup ../cxx/cxx_env.cpp /^void DbEnv::cleanup()$/
+DbEnv::close ../cxx/cxx_env.cpp /^int DbEnv::close(u_int32_t flags)$/
+DbEnv::error_policy ../cxx/cxx_env.cpp /^int DbEnv::error_policy()$/
+DbEnv::errx ../cxx/cxx_env.cpp /^void DbEnv::errx(const char *format, ...)$/
+DbEnv::get_app_private ../cxx/cxx_env.cpp /^void *DbEnv::get_app_private() const$/
+DbEnv::remove ../cxx/cxx_env.cpp /^int DbEnv::remove(const char *db_home, u_int32_t f/
+DbEnv::runtime_error ../cxx/cxx_env.cpp /^void DbEnv::runtime_error(DbEnv *env,$/
+DbEnv::runtime_error_dbt ../cxx/cxx_env.cpp /^void DbEnv::runtime_error_dbt(DbEnv *env,$/
+DbEnv::runtime_error_lock_get ../cxx/cxx_env.cpp /^void DbEnv::runtime_error_lock_get(DbEnv *env,$/
+DbEnv::set_error_stream ../cxx/cxx_env.cpp /^void DbEnv::set_error_stream(__DB_OSTREAMCLASS *st/
+DbEnv::set_feedback ../cxx/cxx_env.cpp /^int DbEnv::set_feedback(void (*arg)(DbEnv *, int, /
+DbEnv::strerror ../cxx/cxx_env.cpp /^char *DbEnv::strerror(int error)$/
+DbEnv::wrap_DB_ENV ../cxx/cxx_env.cpp /^DbEnv *DbEnv::wrap_DB_ENV(DB_ENV *dbenv)$/
+DbEnv::~DbEnv ../cxx/cxx_env.cpp /^DbEnv::~DbEnv()$/
+DbEnv_get_version_major ../libdb_java/db_java_wrap.c /^int DbEnv_get_version_major(){$/
+DbEnv_get_version_minor ../libdb_java/db_java_wrap.c /^int DbEnv_get_version_minor(){$/
+DbEnv_get_version_patch ../libdb_java/db_java_wrap.c /^int DbEnv_get_version_patch(){$/
+DbEnv_get_version_string ../libdb_java/db_java_wrap.c /^char const *DbEnv_get_version_string(){$/
+DbEnv_log_compare ../libdb_java/db_java_wrap.c /^int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN co/
+DbEnv_strerror ../libdb_java/db_java_wrap.c /^char const *DbEnv_strerror(int error){$/
+DbException::DbException ../cxx/cxx_except.cpp /^DbException::DbException(int err)$/
+DbException::get_env ../cxx/cxx_except.cpp /^DbEnv *DbException::get_env() const$/
+DbException::get_errno ../cxx/cxx_except.cpp /^int DbException::get_errno() const$/
+DbException::operator = ../cxx/cxx_except.cpp /^DbException &DbException::operator = (const DbExce/
+DbException::set_env ../cxx/cxx_except.cpp /^void DbException::set_env(DbEnv *env)$/
+DbException::what ../cxx/cxx_except.cpp /^const char *DbException::what() const$/
+DbException::~DbException ../cxx/cxx_except.cpp /^DbException::~DbException()$/
+DbLock::DbLock ../cxx/cxx_lock.cpp /^DbLock::DbLock(DB_LOCK value)$/
+DbLock::operator = ../cxx/cxx_lock.cpp /^DbLock &DbLock::operator = (const DbLock &that)$/
+DbLockNotGrantedException::DbLockNotGrantedException ../cxx/cxx_except.cpp /^DbLockNotGrantedException::DbLockNotGrantedExcepti/
+DbLockNotGrantedException::get_index ../cxx/cxx_except.cpp /^int DbLockNotGrantedException::get_index() const$/
+DbLockNotGrantedException::get_lock ../cxx/cxx_except.cpp /^DbLock* DbLockNotGrantedException::get_lock() cons/
+DbLockNotGrantedException::get_mode ../cxx/cxx_except.cpp /^db_lockmode_t DbLockNotGrantedException::get_mode(/
+DbLockNotGrantedException::get_obj ../cxx/cxx_except.cpp /^const Dbt* DbLockNotGrantedException::get_obj() co/
+DbLockNotGrantedException::get_op ../cxx/cxx_except.cpp /^db_lockop_t DbLockNotGrantedException::get_op() co/
+DbLockNotGrantedException::operator = ../cxx/cxx_except.cpp /^&DbLockNotGrantedException::operator =(const DbLoc/
+DbLockNotGrantedException::~DbLockNotGrantedException ../cxx/cxx_except.cpp /^DbLockNotGrantedException::~DbLockNotGrantedExcept/
+DbLogc::close ../cxx/cxx_logc.cpp /^int DbLogc::close(u_int32_t _flags)$/
+DbLogc::get ../cxx/cxx_logc.cpp /^int DbLogc::get(DbLsn *lsn, Dbt *data, u_int32_t _/
+DbLogc::~DbLogc ../cxx/cxx_logc.cpp /^DbLogc::~DbLogc()$/
+DbMemoryException::DbMemoryException ../cxx/cxx_except.cpp /^DbMemoryException::DbMemoryException(Dbt *dbt)$/
+DbMemoryException::get_dbt ../cxx/cxx_except.cpp /^Dbt *DbMemoryException::get_dbt() const$/
+DbMemoryException::operator = ../cxx/cxx_except.cpp /^&DbMemoryException::operator =(const DbMemoryExcep/
+DbMemoryException::~DbMemoryException ../cxx/cxx_except.cpp /^DbMemoryException::~DbMemoryException()$/
+DbMpoolFile::DbMpoolFile ../cxx/cxx_mpool.cpp /^DbMpoolFile::DbMpoolFile()$/
+DbMpoolFile::close ../cxx/cxx_mpool.cpp /^int DbMpoolFile::close(u_int32_t flags)$/
+DbMpoolFile::~DbMpoolFile ../cxx/cxx_mpool.cpp /^DbMpoolFile::~DbMpoolFile()$/
+DbMultipleDataIterator::next ../cxx/cxx_multi.cpp /^bool DbMultipleDataIterator::next(Dbt &data)$/
+DbMultipleIterator::DbMultipleIterator ../cxx/cxx_multi.cpp /^DbMultipleIterator::DbMultipleIterator(const Dbt &/
+DbMultipleKeyDataIterator::next ../cxx/cxx_multi.cpp /^bool DbMultipleKeyDataIterator::next(Dbt &key, Dbt/
+DbMultipleRecnoDataIterator::next ../cxx/cxx_multi.cpp /^bool DbMultipleRecnoDataIterator::next(db_recno_t /
+DbRunRecoveryException::DbRunRecoveryException ../cxx/cxx_except.cpp /^DbRunRecoveryException::DbRunRecoveryException(con/
+DbRunRecoveryException::operator = ../cxx/cxx_except.cpp /^&DbRunRecoveryException::operator =(const DbRunRec/
+DbRunRecoveryException::~DbRunRecoveryException ../cxx/cxx_except.cpp /^DbRunRecoveryException::~DbRunRecoveryException()$/
+DbTxn::DbTxn ../cxx/cxx_txn.cpp /^DbTxn::DbTxn()$/
+DbTxn::~DbTxn ../cxx/cxx_txn.cpp /^DbTxn::~DbTxn()$/
Db_tcl_Init ../tcl/tcl_db_pkg.c /^Db_tcl_Init(interp)$/
-EMSG ../clib/getopt.c /^#define EMSG ""$/
-ENTRY ../include/db.in /^} ENTRY;$/
-ENV_ILLEGAL_AFTER_OPEN ../include/db_int.in /^#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \\$/
-ENV_REQUIRES_CONFIG ../include/db_int.in /^#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flag/
-EPG ../include/btree.h /^struct __epg; typedef struct __epg EPG;$/
-EPRINT ../include/db_verify.h /^#define EPRINT(x) \\$/
+Dbc::get ../cxx/cxx_dbc.cpp /^int Dbc::get(Dbt* key, Dbt *data, u_int32_t _flags/
+Dbc::pget ../cxx/cxx_dbc.cpp /^int Dbc::pget(Dbt* key, Dbt *pkey, Dbt *data, u_in/
+Dbc::~Dbc ../cxx/cxx_dbc.cpp /^Dbc::~Dbc()$/
+Dbt::Dbt ../cxx/cxx_dbt.cpp /^Dbt::Dbt()$/
+Dbt::operator = ../cxx/cxx_dbt.cpp /^Dbt &Dbt::operator = (const Dbt &that)$/
+Dbt::~Dbt ../cxx/cxx_dbt.cpp /^Dbt::~Dbt()$/
+EMSG ../clib/getopt.c 63
+ENV_ILLEGAL_AFTER_OPEN ../dbinc/db_int.in /^#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \\$/
+ENV_ILLEGAL_BEFORE_OPEN ../dbinc/db_int.in /^#define ENV_ILLEGAL_BEFORE_OPEN(dbenv, name) \\$/
+ENV_REQUIRES_CONFIG ../dbinc/db_int.in /^#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flag/
+EPG ../dbinc/btree.h 50
+EPRINT ../dbinc/db_verify.h /^#define EPRINT(x) do { \\$/
+FALSE ../crypto/rijndael/rijndael-api-fst.h 55
FAST_HASH ../lock/lock_util.c /^#define FAST_HASH(P) { \\$/
-FLAG_CHECK ../include/tcl_db.h /^#define FLAG_CHECK(flag) \\$/
-FLAG_CHECK2 ../include/tcl_db.h /^#define FLAG_CHECK2(flag,val) \\$/
-FLD_CLR ../include/db_int.in /^#define FLD_CLR(fld, f) (fld) &= ~(f)$/
-FLD_ISSET ../include/db_int.in /^#define FLD_ISSET(fld, f) ((fld) & (f))$/
-FLD_SET ../include/db_int.in /^#define FLD_SET(fld, f) (fld) |= (f)$/
-FMAP_ENTRIES ../mp/mp_stat.c /^#define FMAP_ENTRIES 200 \/* Files we map. *\/$/
-FN ../include/db_int.in /^} FN;$/
-FNAME ../include/log.h /^struct __fname; typedef struct __fname FNAME;$/
-FREE_IF_NEEDED ../include/db_int.in /^#define FREE_IF_NEEDED(sdbp, dbt) \\$/
-F_CLR ../include/db_int.in /^#define F_CLR(p, f) (p)->flags &= ~(f)$/
-F_ISSET ../include/db_int.in /^#define F_ISSET(p, f) ((p)->flags & (f))$/
-F_SET ../include/db_int.in /^#define F_SET(p, f) (p)->flags |= (f)$/
-GET_BINTERNAL ../include/db_page.h /^#define GET_BINTERNAL(pg, indx) \\$/
-GET_BKEYDATA ../include/db_page.h /^#define GET_BKEYDATA(pg, indx) \\$/
-GET_BOVERFLOW ../include/db_page.h /^#define GET_BOVERFLOW(pg, indx) \\$/
+FLAG_CHECK ../dbinc/tcl_db.h /^#define FLAG_CHECK(flag) \\$/
+FLAG_CHECK2 ../dbinc/tcl_db.h /^#define FLAG_CHECK2(flag,val) \\$/
+FLD_CLR ../dbinc/db_int.in /^#define FLD_CLR(fld, f) (fld) &= ~(f)$/
+FLD_ISSET ../dbinc/db_int.in /^#define FLD_ISSET(fld, f) ((fld) & (f))$/
+FLD_SET ../dbinc/db_int.in /^#define FLD_SET(fld, f) (fld) |= (f)$/
+FMAP_ENTRIES ../mp/mp_stat.c 260
+FNAME ../dbinc/db.in 125
+FREE_IF_NEEDED ../dbinc/db_int.in /^#define FREE_IF_NEEDED(sdbp, dbt) \\$/
+F_CLR ../dbinc/db_int.in /^#define F_CLR(p, f) (p)->flags &= ~(f)$/
+F_ISSET ../dbinc/db_int.in /^#define F_ISSET(p, f) ((p)->flags & (f))$/
+F_SET ../dbinc/db_int.in /^#define F_SET(p, f) (p)->flags |= (f)$/
+GETU32 ../crypto/rijndael/rijndael-alg-fst.c /^#define GETU32(p) SWAP(*((u32 *)(p)))$/
+GET_BINTERNAL ../dbinc/db_page.h /^#define GET_BINTERNAL(dbp, pg, indx) \\$/
+GET_BKEYDATA ../dbinc/db_page.h /^#define GET_BKEYDATA(dbp, pg, indx) \\$/
+GET_BOVERFLOW ../dbinc/db_page.h /^#define GET_BOVERFLOW(dbp, pg, indx) \\$/
+GET_COUNT ../lock/lock.c /^#define GET_COUNT(dp, count) do { \\$/
+GET_ENVLOCK ../fileops/fop_util.c /^#define GET_ENVLOCK(ENV, ID, L) do { \\$/
+GET_HANDLE ../mutex/mut_win32.c /^#define GET_HANDLE(mutexp, event) do { \\$/
GET_PAGE ../db/db_upg_opd.c /^#define GET_PAGE(dbp, fhp, pgno, page) { \\$/
-GET_RINTERNAL ../include/db_page.h /^#define GET_RINTERNAL(pg, indx) \\$/
-GIGABYTE ../include/db_int.in /^#define GIGABYTE 1073741824$/
+GET_PCOUNT ../lock/lock.c /^#define GET_PCOUNT(dp, count) do { \\$/
+GET_PGNO ../lock/lock.c /^#define GET_PGNO(dp, pgno) do { \\$/
+GET_RINTERNAL ../dbinc/db_page.h /^#define GET_RINTERNAL(dbp, pg, indx) \\$/
+GET_SIZE ../lock/lock.c /^#define GET_SIZE(dp, size) do { \\$/
+GIGABYTE ../dbinc/db_int.in 42
GLOB_CHAR ../tcl/tcl_internal.c /^#define GLOB_CHAR(c) ((c) == '*' || (c) == '?')$/
-GUARD_BYTE ../include/debug.h /^#define GUARD_BYTE 0xdc$/
-HASH ../include/hash.h /^} HASH;$/
-HASH4 ../hash/hash_func.c /^#define HASH4 HASH4b$/
-HASH4a ../hash/hash_func.c /^#define HASH4a h = (h << 5) - h + *k++;$/
-HASH4b ../hash/hash_func.c /^#define HASH4b h = (h << 5) + h + *k++;$/
-HASHC ../hash/hash_func.c /^#define HASHC n = *k++ + 65599 * n$/
-HASHHDR ../include/db_upgrade.h /^} HASHHDR;$/
-HASHINFO ../include/db_185.in /^} HASHINFO;$/
-HASHINSERT ../include/db_shash.h /^#define HASHINSERT(begin, ndx, type, field, elt) d/
-HASHMAGIC ../include/db_185.in /^#define HASHMAGIC 0x061561$/
-HASHREMOVE_EL ../include/db_shash.h /^#define HASHREMOVE_EL(begin, ndx, type, field, obj/
-HASHVERSION ../include/db_185.in /^#define HASHVERSION 2$/
-HASH_CURSOR ../include/hash.h /^} HASH_CURSOR;$/
-HASH_UNUSED1 ../include/hash.h /^#define HASH_UNUSED1 0x60$/
-HASH_UNUSED2 ../include/hash.h /^#define HASH_UNUSED2 0x70$/
-HDR ../include/log.h /^struct __hdr; typedef struct __hdr HDR;$/
-HKEYDATA ../include/db_page.h /^} HKEYDATA;$/
-HKEYDATA_DATA ../include/db_page.h /^#define HKEYDATA_DATA(p) (((u_int8_t *)p) + SSZA(H/
-HKEYDATA_PSIZE ../include/db_page.h /^#define HKEYDATA_PSIZE(len) \\$/
-HKEYDATA_SIZE ../include/db_page.h /^#define HKEYDATA_SIZE(len) \\$/
-HMETA ../include/db_page.h /^} HMETA31, HMETA;$/
-HMETA30 ../include/db_upgrade.h /^} HMETA30;$/
-HOFFDUP ../include/db_page.h /^} HOFFDUP;$/
-HOFFDUP_PGNO ../include/db_page.h /^#define HOFFDUP_PGNO(p) (((u_int8_t *)p) + SSZ(HO/
-HOFFDUP_SIZE ../include/db_page.h /^#define HOFFDUP_SIZE (sizeof(HOFFDUP))$/
-HOFFPAGE ../include/db_page.h /^} HOFFPAGE;$/
-HOFFPAGE_PGNO ../include/db_page.h /^#define HOFFPAGE_PGNO(p) (((u_int8_t *)p) + SSZ(HO/
-HOFFPAGE_PSIZE ../include/db_page.h /^#define HOFFPAGE_PSIZE (HOFFPAGE_SIZE + sizeof(db/
-HOFFPAGE_SIZE ../include/db_page.h /^#define HOFFPAGE_SIZE (sizeof(HOFFPAGE))$/
-HOFFPAGE_TLEN ../include/db_page.h /^#define HOFFPAGE_TLEN(p) (((u_int8_t *)p) + SSZ(HO/
-HOFFSET ../include/db_page.h /^#define HOFFSET(p) (((PAGE *)p)->hf_offset)$/
-HPAGE_PTYPE ../include/db_page.h /^#define HPAGE_PTYPE(p) (*(u_int8_t *)p)$/
-HPAGE_TYPE ../include/db_page.h /^#define HPAGE_TYPE(pg, indx) (*P_ENTRY(pg, indx))$/
-H_CONTINUE ../include/hash.h /^#define H_CONTINUE 0x0001 \/* Join--search strict/
-H_DATAINDEX ../include/db_page.h /^#define H_DATAINDEX(indx) ((indx) + 1)$/
-H_DELETED ../include/hash.h /^#define H_DELETED 0x0002 \/* Cursor item is delet/
-H_DIRTY ../include/hash.h /^#define H_DIRTY 0x0004 \/* Meta-data page needs /
-H_DUPLICATE ../include/db_page.h /^#define H_DUPLICATE 2 \/* Duplicate key\/data item/
-H_DUPONLY ../include/hash.h /^#define H_DUPONLY 0x0008 \/* Dups only; do not ch/
-H_EXPAND ../include/hash.h /^#define H_EXPAND 0x0010 \/* Table expanded. *\/$/
-H_ISDUP ../include/hash.h /^#define H_ISDUP 0x0020 \/* Cursor is within dupl/
-H_KEYDATA ../include/db_page.h /^#define H_KEYDATA 1 \/* Key\/data item. *\/$/
-H_KEYINDEX ../include/db_page.h /^#define H_KEYINDEX(indx) (indx)$/
-H_NEXT_NODUP ../include/hash.h /^#define H_NEXT_NODUP 0x0040 \/* Get next non-dup /
-H_NOMORE ../include/hash.h /^#define H_NOMORE 0x0080 \/* No more entries in bu/
-H_NUMPAIRS ../include/db_page.h /^#define H_NUMPAIRS(pg) (NUM_ENT(pg) \/ 2)$/
-H_OFFDUP ../include/db_page.h /^#define H_OFFDUP 4 \/* Overflow page of duplicates/
-H_OFFPAGE ../include/db_page.h /^#define H_OFFPAGE 3 \/* Overflow key\/data item. */
-H_OK ../include/hash.h /^#define H_OK 0x0100 \/* Request succeeded. *\/$/
-H_PAIRDATA ../include/db_page.h /^#define H_PAIRDATA(pg, indx) P_ENTRY(pg, H_DATAIN/
-H_PAIRKEY ../include/db_page.h /^#define H_PAIRKEY(pg, indx) P_ENTRY(pg, H_KEYINDE/
-H_PAIRSIZE ../include/db_page.h /^#define H_PAIRSIZE(pg, psize, indx) \\$/
-ILLEGAL_SIZE ../env/db_salloc.c /^#define ILLEGAL_SIZE 1$/
-INFOTYPE ../include/tcl_db.h /^enum INFOTYPE {$/
-INITIAL_DEAD_ALLOC ../lock/lock_deadlock.c /^#define INITIAL_DEAD_ALLOC 8$/
-INP_OFFSET ../db/db_vrfy.c /^#define INP_OFFSET(h, i) \\$/
-INVALID_LSNMSG ../tcl/tcl_internal.c /^#define INVALID_LSNMSG "Invalid LSN with %d parts./
-INVALID_ORDER ../include/btree.h /^#define INVALID_ORDER 0$/
-INVALID_REGION_ID ../include/region.h /^#define INVALID_REGION_ID 0 \/* Out-of-band region/
-INVALID_REGION_SEGID ../include/region.h /^#define INVALID_REGION_SEGID -1 \/* Segment IDs ar/
-INVALID_ROFF ../include/region.h /^#define INVALID_ROFF 0$/
-ISBIG ../include/hash.h /^#define ISBIG(I, N) (((N) > ((I)->hdr->dbmeta.page/
+GUARD_BYTE ../dbinc/debug.h 29
+HASH4 ../hash/hash_func.c 168
+HASH4a ../hash/hash_func.c 166
+HASH4b ../hash/hash_func.c 167
+HASHC ../hash/hash_func.c 115
+HASHINSERT ../dbinc/db_shash.h /^#define HASHINSERT(begin, ndx, type, field, elt) d/
+HASHLOOKUP ../dbinc/db_shash.h /^#define HASHLOOKUP(begin, ndx, type, field, elt, r/
+HASHMAGIC ../dbinc/db_185.in 138
+HASHREMOVE_EL ../dbinc/db_shash.h /^#define HASHREMOVE_EL(begin, ndx, type, field, obj/
+HASHVERSION ../dbinc/db_185.in 139
+HASH_UNUSED1 ../dbinc/hash.h 130
+HASH_UNUSED2 ../dbinc/hash.h 131
+HDR ../dbinc/log.h 59
+HDR_CRYPTO_SZ ../dbinc/log.h 132
+HDR_NORMAL_SZ ../dbinc/log.h 131
+HKEYDATA_DATA ../dbinc/db_page.h /^#define HKEYDATA_DATA(p) (((u_int8_t *)p) + SSZA(H/
+HKEYDATA_PSIZE ../dbinc/db_page.h /^#define HKEYDATA_PSIZE(len) \\$/
+HKEYDATA_SIZE ../dbinc/db_page.h /^#define HKEYDATA_SIZE(len) \\$/
+HMAC_BLOCK_SIZE ../hmac/hmac.c 28
+HMAC_OUTPUT_SIZE ../hmac/hmac.c 27
+HOFFDUP_PGNO ../dbinc/db_page.h /^#define HOFFDUP_PGNO(p) (((u_int8_t *)p) + SSZ(HO/
+HOFFDUP_SIZE ../dbinc/db_page.h 512
+HOFFPAGE_PGNO ../dbinc/db_page.h /^#define HOFFPAGE_PGNO(p) (((u_int8_t *)p) + SSZ(HO/
+HOFFPAGE_PSIZE ../dbinc/db_page.h 496
+HOFFPAGE_SIZE ../dbinc/db_page.h 495
+HOFFPAGE_TLEN ../dbinc/db_page.h /^#define HOFFPAGE_TLEN(p) (((u_int8_t *)p) + SSZ(HO/
+HOFFSET ../dbinc/db_page.h /^#define HOFFSET(p) (((PAGE *)p)->hf_offset)$/
+HPAGE_PTYPE ../dbinc/db_page.h /^#define HPAGE_PTYPE(p) (*(u_int8_t *)p)$/
+HPAGE_TYPE ../dbinc/db_page.h /^#define HPAGE_TYPE(dbp, pg, indx) (*P_ENTRY(dbp, p/
+H_CONTINUE ../dbinc/hash.h 79
+H_DATAINDEX ../dbinc/db_page.h /^#define H_DATAINDEX(indx) ((indx) + 1)$/
+H_DELETED ../dbinc/hash.h 80
+H_DIRTY ../dbinc/hash.h 81
+H_DUPLICATE ../dbinc/db_page.h 397
+H_DUPONLY ../dbinc/hash.h 82
+H_EXPAND ../dbinc/hash.h 83
+H_ISDUP ../dbinc/hash.h 84
+H_KEYDATA ../dbinc/db_page.h 396
+H_KEYINDEX ../dbinc/db_page.h /^#define H_KEYINDEX(indx) (indx)$/
+H_NEXT_NODUP ../dbinc/hash.h 85
+H_NOMORE ../dbinc/hash.h 86
+H_NUMPAIRS ../dbinc/db_page.h /^#define H_NUMPAIRS(pg) (NUM_ENT(pg) \/ 2)$/
+H_OFFDUP ../dbinc/db_page.h 399
+H_OFFPAGE ../dbinc/db_page.h 398
+H_OK ../dbinc/hash.h 87
+H_PAIRDATA ../dbinc/db_page.h /^#define H_PAIRDATA(dbp, pg, indx) P_ENTRY(dbp, pg,/
+H_PAIRKEY ../dbinc/db_page.h /^#define H_PAIRKEY(dbp, pg, indx) P_ENTRY(dbp, pg, /
+H_PAIRSIZE ../dbinc/db_page.h /^#define H_PAIRSIZE(dbp, pg, psize, indx) \\$/
+ILLEGAL_SIZE ../env/db_salloc.c 171
+INITIAL_DEAD_ALLOC ../lock/lock_deadlock.c 659
+INIT_LSN ../dbinc/db_int.in /^#define INIT_LSN(LSN) do { \\$/
+INP_OFFSET ../db/db_vrfy.c /^#define INP_OFFSET(dbp, h, i) \\$/
+INVALID_LSNMSG ../tcl/tcl_internal.c 506
+INVALID_ORDER ../dbinc/btree.h 59
+INVALID_REGION_ID ../dbinc/region.h 107
+INVALID_REGION_SEGID ../dbinc/region.h 119
+INVALID_ROFF ../dbinc/region.h 129
+IN_ELECTION ../dbinc/rep.h /^#define IN_ELECTION(R) F_ISSET((R), REP_F_EPHASE1/
+IN_ELECTION_TALLY ../dbinc/rep.h /^#define IN_ELECTION_TALLY(R) \\$/
+ISBIG ../dbinc/hash.h /^#define ISBIG(I, N) (((N) > ((I)->hdr->dbmeta.page/
ISDOT ../clib/getcwd.c /^#define ISDOT(dp) \\$/
-ISINTERNAL ../include/btree.h /^#define ISINTERNAL(p) (TYPE(p) == P_IBTREE || TYPE/
-ISLEAF ../include/btree.h /^#define ISLEAF(p) (TYPE(p) == P_LBTREE || \\$/
-ISSET_MAP ../lock/lock_deadlock.c /^#define ISSET_MAP(M, N) ((M)[(N) \/ 32] & (1 << (N/
-ISTEMPORARY ../mp/mp_fopen.c /^#define ISTEMPORARY (path == NULL)$/
+ISINTERNAL ../dbinc/btree.h /^#define ISINTERNAL(p) (TYPE(p) == P_IBTREE || TYPE/
+ISLEAF ../dbinc/btree.h /^#define ISLEAF(p) (TYPE(p) == P_LBTREE || \\$/
+ISSET_MAP ../lock/lock_deadlock.c /^#define ISSET_MAP(M, N) ((M)[(N) \/ 32] & (1 << (N)/
+IS_AUTO_COMMIT ../dbinc/db_am.h /^#define IS_AUTO_COMMIT(dbenv, txn, flags) \\$/
IS_BTREE_PAGE ../btree/bt_rec.c /^#define IS_BTREE_PAGE(pagep) \\$/
IS_CUR_DELETED ../btree/bt_cursor.c /^#define IS_CUR_DELETED(dbc) \\$/
IS_CUR_DUPLICATE ../btree/bt_cursor.c /^#define IS_CUR_DUPLICATE(dbc, orig_pgno, orig_indx/
-IS_DELETED ../btree/bt_cursor.c /^#define IS_DELETED(page, indx) \\$/
+IS_DELETED ../btree/bt_cursor.c /^#define IS_DELETED(dbp, page, indx) \\$/
IS_DUPLICATE ../btree/bt_cursor.c /^#define IS_DUPLICATE(dbc, i1, i2) \\$/
-IS_HELP ../include/tcl_db.h /^#define IS_HELP(s) \\$/
-IS_INITIALIZED ../include/db_int.in /^#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno/
-IS_MAX_LSN ../include/db_int.in /^#define IS_MAX_LSN(LSN) \\$/
-IS_RECOVERING ../include/db_int.in /^#define IS_RECOVERING(dbenv) \\$/
-IS_SUBDB_SETUP ../db/db.c /^#define IS_SUBDB_SETUP (meta_pgno != PGNO_BASE_MD)/
-IS_SUBTRANSACTION ../include/db_int.in /^#define IS_SUBTRANSACTION(txn) \\$/
-IS_VALID_PAGESIZE ../include/db_verify.h /^#define IS_VALID_PAGESIZE(x) \\$/
-IS_VALID_PGNO ../include/db_verify.h /^#define IS_VALID_PGNO(x) ((x) <= vdp->last_pgno)$/
-IS_WRITELOCK ../include/lock.h /^#define IS_WRITELOCK(m) \\$/
+IS_ENV_REPLICATED ../dbinc/rep.h /^#define IS_ENV_REPLICATED(E) (!IS_RECOVERING(E) &&/
+IS_HELP ../dbinc/tcl_db.h /^#define IS_HELP(s) \\$/
+IS_INITIALIZED ../dbinc/db_int.in /^#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno/
+IS_INIT_LSN ../dbinc/db_int.in /^#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN)/
+IS_MAX_LSN ../dbinc/db_int.in /^#define IS_MAX_LSN(LSN) \\$/
+IS_NOT_LOGGED_LSN ../dbinc/db_int.in /^#define IS_NOT_LOGGED_LSN(LSN) \\$/
+IS_READONLY ../db/db_iface.c /^#define IS_READONLY(dbp) \\$/
+IS_RECOVERING ../dbinc/db_int.in /^#define IS_RECOVERING(dbenv) \\$/
+IS_REPLICATED ../dbinc/rep.h /^#define IS_REPLICATED(E, D) \\$/
+IS_REP_CLIENT ../dbinc/rep.h /^#define IS_REP_CLIENT(dbenv) \\$/
+IS_REP_LOGSONLY ../dbinc/rep.h /^#define IS_REP_LOGSONLY(dbenv) \\$/
+IS_REP_MASTER ../dbinc/rep.h /^#define IS_REP_MASTER(dbenv) \\$/
+IS_SIMPLE ../rep/rep_record.c /^#define IS_SIMPLE(R) ((R) != DB___txn_regop && (R)/
+IS_SUBTRANSACTION ../dbinc/db_int.in /^#define IS_SUBTRANSACTION(txn) \\$/
+IS_VALID_PAGESIZE ../dbinc/db_int.in /^#define IS_VALID_PAGESIZE(x) \\$/
+IS_VALID_PGNO ../dbinc/db_verify.h /^#define IS_VALID_PGNO(x) ((x) <= vdp->last_pgno)$/
+IS_WRITELOCK ../dbinc/lock.h /^#define IS_WRITELOCK(m) \\$/
IS_XA_TXN ../txn/txn_rec.c /^#define IS_XA_TXN(R) (R->xid.size != 0)$/
-IS_ZERO_LSN ../include/db_int.in /^#define IS_ZERO_LSN(LSN) ((LSN).file == 0)$/
-ITEM_BEGIN ../btree/bt_verify.c /^#define ITEM_BEGIN 1$/
-ITEM_END ../btree/bt_verify.c /^#define ITEM_END 2$/
-JAVADB_API_BEGIN ../libdb_java/java_util.h /^#define JAVADB_API_BEGIN(db, jthis) \\$/
-JAVADB_API_END ../libdb_java/java_util.h /^#define JAVADB_API_END(db) \\$/
-JAVADB_ENV_API_BEGIN ../libdb_java/java_util.h /^#define JAVADB_ENV_API_BEGIN(dbenv, jthis) \\$/
-JAVADB_ENV_API_END ../libdb_java/java_util.h /^#define JAVADB_ENV_API_END(dbenv) \\$/
-JAVADB_RO_ACCESS ../libdb_java/java_util.h /^#define JAVADB_RO_ACCESS(j_class, j_fieldtype, j_f/
-JAVADB_RW_ACCESS ../libdb_java/java_util.h /^#define JAVADB_RW_ACCESS(j_class, j_fieldtype, j_f/
-JAVADB_WO_ACCESS ../libdb_java/java_util.h /^#define JAVADB_WO_ACCESS(j_class, j_fieldtype, j_f/
-JAVADB_WO_ACCESS_METHOD ../libdb_java/java_Db.c /^JAVADB_WO_ACCESS_METHOD(Db, jint, flags, DB, flags/
-JAVADB_WO_ACCESS_STRING ../libdb_java/java_DbEnv.c /^JAVADB_WO_ACCESS_STRING(DbEnv, data_1dir, D/
-JDBT ../libdb_java/java_locked.h /^} JDBT;$/
-JOIN_CURSOR ../include/db_join.h /^} JOIN_CURSOR;$/
-JOIN_RETRY ../include/db_join.h /^#define JOIN_RETRY 0x01 \/* Error on primary get; /
-JSTR ../libdb_java/java_locked.h /^} JSTR;$/
-Java_com_sleepycat_db_DbUtil_am_1big_1endian ../libdb_java/java_DbUtil.c /^Java_com_sleepycat_db_DbUtil_am_1big_1endian (JNIE/
-LCK_ALWAYS ../include/db_am.h /^#define LCK_ALWAYS 0x02 \/* Lock even for off page/
-LCK_COUPLE ../include/db_am.h /^#define LCK_COUPLE 0x01 \/* Lock Couple *\/$/
-LCK_ROLLBACK ../include/db_am.h /^#define LCK_ROLLBACK 0x04 \/* Lock even if in roll/
-LEAFLEVEL ../include/db_page.h /^#define LEAFLEVEL 1$/
-LEN_HDATA ../include/db_page.h /^#define LEN_HDATA(p, psize, indx) LEN_HKEYDATA(p, /
-LEN_HITEM ../include/db_page.h /^#define LEN_HITEM(pg, pgsize, indx) \\$/
-LEN_HKEY ../include/db_page.h /^#define LEN_HKEY(p, psize, indx) LEN_HKEYDATA(p, p/
-LEN_HKEYDATA ../include/db_page.h /^#define LEN_HKEYDATA(pg, psize, indx) \\$/
-LEVEL ../include/db_page.h /^#define LEVEL(p) (((PAGE *)p)->level)$/
-LFNAME ../include/log.h /^#define LFNAME "log.%010d" \/* Log file name temp/
-LFNAME_V1 ../include/log.h /^#define LFNAME_V1 "log.%05d" \/* Log file name tem/
-LFPREFIX ../include/log.h /^#define LFPREFIX "log." \/* Log file name prefix./
-LF_CLR ../include/db_int.in /^#define LF_CLR(f) (flags &= ~(f))$/
-LF_ISSET ../include/db_int.in /^#define LF_ISSET(f) (flags & (f))$/
-LF_SET ../include/db_int.in /^#define LF_SET(f) (flags |= (f))$/
-LG_BASE_REGION_SIZE ../include/log.h /^#define LG_BASE_REGION_SIZE (60 * 1024) \/* 60 KB./
-LG_BSIZE_DEFAULT ../include/log.h /^#define LG_BSIZE_DEFAULT (32 * 1024) \/* 32 KB. */
-LG_MAINT_SIZE ../include/log.h /^#define LG_MAINT_SIZE (sizeof(roff_t) * DB_MAX_HAN/
-LG_MAX_DEFAULT ../include/log.h /^#define LG_MAX_DEFAULT (10 * MEGABYTE) \/* 10 MB./
-LIST_ENTRY ../include/queue.h /^#define LIST_ENTRY(type) \\$/
-LIST_FIRST ../include/queue.h /^#define LIST_FIRST(head) ((head)->lh_first)$/
-LIST_HEAD ../include/queue.h /^#define LIST_HEAD(name, type) \\$/
-LIST_INCREMENT ../log/log_archive.c /^#define LIST_INCREMENT 64$/
-LIST_INIT ../include/queue.h /^#define LIST_INIT(head) { \\$/
-LIST_INSERT_AFTER ../include/queue.h /^#define LIST_INSERT_AFTER(listelm, elm, field) do /
-LIST_INSERT_BEFORE ../include/queue.h /^#define LIST_INSERT_BEFORE(listelm, elm, field) do/
-LIST_INSERT_HEAD ../include/queue.h /^#define LIST_INSERT_HEAD(head, elm, field) do { /
-LIST_NEXT ../include/queue.h /^#define LIST_NEXT(elm, field) ((elm)->field.le_ne/
-LIST_REMOVE ../include/queue.h /^#define LIST_REMOVE(elm, field) do { \\$/
-LOAD_ACTUAL_MUTEX_CODE ../mutex/mut_tas.c /^#define LOAD_ACTUAL_MUTEX_CODE$/
-LOCKER_FREEABLE ../include/lock.h /^#define LOCKER_FREEABLE(lp) \\$/
-LOCKER_LOCK ../include/lock.h /^#define LOCKER_LOCK(lt, reg, locker, ndx) \\$/
-LOCKING_ON ../include/db_int.in /^#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != N/
-LOCKREGION ../include/lock.h /^#define LOCKREGION(dbenv, lt) R_LOCK((dbenv), &(l/
-LOCK_DUMP_ALL ../lock/lock_stat.c /^#define LOCK_DUMP_ALL 0x01f \/* Display all. *\//
-LOCK_DUMP_CONF ../lock/lock_stat.c /^#define LOCK_DUMP_CONF 0x001 \/* Conflict matrix/
-LOCK_DUMP_FREE ../lock/lock_stat.c /^#define LOCK_DUMP_FREE 0x002 \/* Display lock fr/
-LOCK_DUMP_LOCKERS ../lock/lock_stat.c /^#define LOCK_DUMP_LOCKERS 0x004 \/* Display locke/
-LOCK_DUMP_MEM ../lock/lock_stat.c /^#define LOCK_DUMP_MEM 0x008 \/* Display region m/
-LOCK_DUMP_OBJECTS ../lock/lock_stat.c /^#define LOCK_DUMP_OBJECTS 0x010 \/* Display objec/
-LOCK_INIT ../include/lock.h /^#define LOCK_INIT(lock) ((lock).off = LOCK_INVALID/
-LOCK_INVALID ../include/lock.h /^#define LOCK_INVALID INVALID_ROFF$/
-LOCK_ISSET ../include/lock.h /^#define LOCK_ISSET(lock) ((lock).off != LOCK_INVAL/
-LOFFSET ../include/db_page.h /^#define LOFFSET(pg) (P_OVERHEAD + NUM_ENT(pg) * s/
-LOG ../include/log.h /^struct __log; typedef struct __log LOG;$/
-LOGGING_ON ../include/db_int.in /^#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != N/
-LOGP ../include/log.h /^struct __log_persist; typedef struct __log_persist/
-LOG_CHECKPOINT ../include/log.h /^#define LOG_CHECKPOINT 1 \/* Checkpoint: file nam/
-LOG_CLOSE ../include/log.h /^#define LOG_CLOSE 2 \/* File close. *\/$/
-LOG_OP ../include/debug.h /^#define LOG_OP(C, T, O, K, A, F) { \\$/
-LOG_OPEN ../include/log.h /^#define LOG_OPEN 3 \/* File open. *\/$/
-LOG_RCLOSE ../include/log.h /^#define LOG_RCLOSE 4 \/* File close after recover/
-LSN ../include/db_page.h /^#define LSN(p) (((PAGE *)p)->lsn)$/
-LSN_NOT_LOGGED ../include/db_int.in /^#define LSN_NOT_LOGGED(LSN) do { \\$/
-MAKE_STAT_LSN ../tcl/tcl_txn.c /^#define MAKE_STAT_LSN(s, lsn) \\$/
-MAKE_STAT_STRLIST ../include/tcl_db.h /^#define MAKE_STAT_STRLIST(s,s1) \\$/
-MAP_FAILED ../mutex/tm.c /^#define MAP_FAILED (MUTEX *)-1$/
-MAP_FILE ../mutex/tm.c /^#define MAP_FILE 0$/
-MAXBQUALSIZE ../include/xa.h /^#define MAXBQUALSIZE 64 \/* maximum size in byte/
-MAXBTREELEVEL ../include/db_page.h /^#define MAXBTREELEVEL 255$/
-MAXGTRIDSIZE ../include/xa.h /^#define MAXGTRIDSIZE 64 \/* maximum size in byte/
-MAXINFOSIZE ../include/xa.h /^#define MAXINFOSIZE 256 \/* maximum size in bytes/
-MAXPATHLEN ../include/db_int.in /^#define MAXPATHLEN 1024$/
-MAX_ID ../include/tcl_db.h /^#define MAX_ID 8 \/* Maximum number of sub-id's w/
-MAX_LSN ../include/db_int.in /^#define MAX_LSN(LSN) do { \\$/
-MAX_LSN_TO_TEXT ../db/db.c /^#define MAX_LSN_TO_TEXT 21$/
-MAX_PAGE_NUMBER ../include/db_185.in /^#define MAX_PAGE_NUMBER 0xffffffff \/* >= # of pag/
-MAX_PAGE_OFFSET ../include/db_185.in /^#define MAX_PAGE_OFFSET 65535 \/* >= # of bytes i/
-MAX_REC_NUMBER ../include/db_185.in /^#define MAX_REC_NUMBER 0xffffffff \/* >= # of reco/
-MEGABYTE ../include/db_int.in /^#define MEGABYTE 1048576$/
-MEMP_FREMOVE ../mp/mp_fopen.c /^#define MEMP_FREMOVE(mfp) { \\$/
-MINFILL ../include/hash.h /^#define MINFILL 4$/
-MPFARRAY ../include/qam.h /^} MPFARRAY;$/
-MPOOL ../include/mp.h /^struct __mpool; typedef struct __mpool MPOOL;$/
-MPOOLFILE ../include/mp.h /^struct __mpoolfile; typedef struct __mpoolfile MPO/
-MPOOL_DUMP_ALL ../mp/mp_stat.c /^#define MPOOL_DUMP_ALL 0x07 \/* Debug all. *\/$/
-MPOOL_DUMP_HASH ../mp/mp_stat.c /^#define MPOOL_DUMP_HASH 0x01 \/* Debug hash chai/
-MPOOL_DUMP_LRU ../mp/mp_stat.c /^#define MPOOL_DUMP_LRU 0x02 \/* Debug LRU chains/
-MPOOL_DUMP_MEM ../mp/mp_stat.c /^#define MPOOL_DUMP_MEM 0x04 \/* Debug region mem/
-MPOOL_ON ../include/db_int.in /^#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NU/
-MP_CAN_MMAP ../include/mp.h /^#define MP_CAN_MMAP 0x01 \/* If the file can be m/
-MP_DEADFILE ../include/mp.h /^#define MP_DEADFILE 0x02 \/* Dirty pages can simp/
-MP_EXTENT ../include/mp.h /^#define MP_EXTENT 0x04 \/* Extent file. *\/$/
-MP_FLUSH ../include/mp.h /^#define MP_FLUSH 0x01 \/* Was opened to flush a b/
-MP_LSN_RETRY ../include/mp.h /^#define MP_LSN_RETRY 0x01 \/* Retry all BH_WRITE /
-MP_READONLY ../include/mp.h /^#define MP_READONLY 0x02 \/* File is readonly. */
-MP_TEMP ../include/mp.h /^#define MP_TEMP 0x08 \/* Backing file is a tempo/
-MP_UNLINK ../include/mp.h /^#define MP_UNLINK 0x10 \/* Unlink file on last cl/
-MP_UPGRADE ../include/mp.h /^#define MP_UPGRADE 0x04 \/* File descriptor is re/
-MP_UPGRADE_FAIL ../include/mp.h /^#define MP_UPGRADE_FAIL 0x08 \/* Upgrade wasn't p/
-MSG ../mutex/mut_fcntl.c /^#define MSG "mutex_unlock: ERROR: released lock t/
-MSG1 ../mutex/mut_pthread.c /^#define MSG1 "mutex_lock: ERROR: lock currently i/
-MSG2 ../mutex/mut_pthread.c /^#define MSG2 "mutex_unlock: ERROR: lock already u/
-MSGBUF_LEN ../lock/lock_deadlock.c /^#define MSGBUF_LEN ((nlockers + 1) * 10 + 64)$/
-MSG_SIZE ../include/tcl_db.h /^#define MSG_SIZE 100 \/* Message size *\/$/
-MS_PER_SEC ../include/db_int.in /^#define MS_PER_SEC 1000 \/* Milliseconds in a sec/
-MUTEX ../include/db_int.in /^struct __mutex_t; typedef struct __mutex_t MUTEX;$/
-MUTEX_ALIGN ../include/mutex.h /^#define MUTEX_ALIGN sizeof(int)$/
-MUTEX_DESTROY ../include/mutex.h /^#define MUTEX_DESTROY(x) sema_destroy(x)$/
-MUTEX_FIELDS ../include/mutex.h /^#define MUTEX_FIELDS \\$/
-MUTEX_IGNORE ../include/mutex.h /^#define MUTEX_IGNORE 0x001 \/* Ignore, no lock re/
-MUTEX_INIT ../include/mutex.h /^#define MUTEX_INIT(x) 0$/
-MUTEX_INITED ../include/mutex.h /^#define MUTEX_INITED 0x002 \/* Mutex is successfu/
-MUTEX_LOCK ../include/mutex.h /^#define MUTEX_LOCK(dbenv, mp, fh) \\$/
-MUTEX_NO_MALLOC_LOCKS ../include/mutex.h /^#define MUTEX_NO_MALLOC_LOCKS$/
-MUTEX_NO_SHMGET_LOCKS ../include/mutex.h /^#define MUTEX_NO_SHMGET_LOCKS$/
-MUTEX_SELF_BLOCK ../include/mutex.h /^#define MUTEX_SELF_BLOCK 0x004 \/* Must block self/
-MUTEX_SET ../include/mutex.h /^#define MUTEX_SET(x) (!_check_lock(x, 0, 1))$/
-MUTEX_SYSTEM_RESOURCES ../include/mutex.h /^#define MUTEX_SYSTEM_RESOURCES$/
-MUTEX_THREAD ../include/mutex.h /^#define MUTEX_THREAD 0x008 \/* Thread-only mutex./
-MUTEX_THREAD_LOCK ../include/mutex.h /^#define MUTEX_THREAD_LOCK(dbenv, mp) \\$/
-MUTEX_THREAD_UNLOCK ../include/mutex.h /^#define MUTEX_THREAD_UNLOCK(dbenv, mp) \\$/
-MUTEX_UNLOCK ../include/mutex.h /^#define MUTEX_UNLOCK(dbenv, mp) \\$/
-MUTEX_UNSET ../include/mutex.h /^#define MUTEX_UNSET(x) _clear_lock(x, 0)$/
-M_16_SWAP ../include/db_swap.h /^#define M_16_SWAP(a) { \\$/
-M_32_SWAP ../include/db_swap.h /^#define M_32_SWAP(a) { \\$/
+IS_ZERO_LSN ../dbinc/db_int.in /^#define IS_ZERO_LSN(LSN) ((LSN).file == 0)$/
+ITEM_BEGIN ../btree/bt_verify.c 603
+ITEM_END ../btree/bt_verify.c 604
+JAVADB_STAT_ACTIVE ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, /
+JAVADB_STAT_INT ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_INT(jenv, cl, jobj, statp, nam/
+JAVADB_STAT_LONG ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_LONG(jenv, cl, jobj, statp, na/
+JAVADB_STAT_LSN ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_LSN(jenv, cl, jobj, statp, nam/
+JAVADB_STAT_STRING ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_STRING(jenv, cl, jobj, statp, /
+JAVADB_STAT_XID ../libdb_java/db_java_wrap.c /^#define JAVADB_STAT_XID(jenv, cl, jobj, statp, nam/
+JDBENV ../libdb_java/db_java_wrap.c 384
+JOIN_RETRY ../dbinc/db_join.h 27
+Java_com_sleepycat_db_DbUtil_is_1big_1endian ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_DbUtil_is_1big_1endian(JNIEn/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1dbremove ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1dbrename ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1err ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1errx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1cachesize_1ncache ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1data_1dirs ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1encrypt_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1home ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1bsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1regionmax ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1conflicts ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1lockers ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1locks ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1objects ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1mp_1mmapsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1open_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1rep_1limit ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1shm_1key ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tas_1spins ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tmp_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tx_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tx_1timestamp ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1verbose ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_d/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1major ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1minor ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1patch ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1string ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1id ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1id_1free ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1vec ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1archive ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1cursor ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1file ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1flush ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1fstat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1trickle ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1open0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1remove0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1elect ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1process_1message ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1start ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setErrorHandler ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setFeedbackHandler ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setPanicHandler ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1app_1dispatch ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1data_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1encrypt ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1bsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1regionmax ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1conflicts ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1detect ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1lockers ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1locks ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1objects ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1mp_1mmapsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rep_1limit ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rep_1transport ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rpc_1server ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1shm_1key ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tas_1spins ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tmp_1dir ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tx_1max ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tx_1timestamp0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1verbose ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1strerror ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1begin ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1checkpoint ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1recover ../libdb_java/db_java_wrap.c /^JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_/
+Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_DbLogc_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbLogc_1get ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbLsn_1get_1file ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbLsn_1get_1offset ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1maxsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1priority ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1maxsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1priority ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1abort0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1commit0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1discard0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1id ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1prepare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_DbTxn_1set_1timeout ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1associate ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1cursor ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_Db_1del ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1err ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1errx ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1_1SWIG_10 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1_1SWIG_11 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1bt_1minkey ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1byteswapped ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_d/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1cachesize_1ncache ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1dbname ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1encrypt_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1filename ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1flags_1raw ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1h_1ffactor ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1h_1nelem ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1lorder ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1mpf ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1open_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1pagesize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1q_1extentsize ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1delim ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1len ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1pad ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1source ../libdb_java/db_java_wrap.c /^JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1transactional ../libdb_java/db_java_wrap.c /^JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_d/
+Java_com_sleepycat_db_db_1javaJNI_Db_1get_1type ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1join ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_Db_1key_1range ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1open0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1remove0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1rename0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1setFeedbackHandler ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1append_1recno ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1maxkey ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1minkey ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1prefix ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1cachesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1dup_1compare ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1encrypt ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1flags ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1ffactor ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1hash ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1nelem ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1lorder ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1pagesize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1q_1extentsize ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1delim ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1len ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1pad ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1source ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1stat ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_Db_1sync ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1truncate ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1upgrade ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Db_1verify0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1close0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1count ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1del ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1dup ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1get_1_1SWIG_10 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1get_1_1SWIG_11 ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_Dbc_1put ../libdb_java/db_java_wrap.c /^JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_deleteRef0 ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_delete_1DbLock ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_delete_1DbLsn ../libdb_java/db_java_wrap.c /^JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1j/
+Java_com_sleepycat_db_db_1javaJNI_getDbEnv0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_getDbRef0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_initDbEnvRef0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_initDbRef0 ../libdb_java/db_java_wrap.c /^JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db/
+Java_com_sleepycat_db_db_1javaJNI_initialize ../libdb_java/db_java_wrap.c /^Java_com_sleepycat_db_db_1javaJNI_initialize(JNIEn/
+Java_com_sleepycat_db_db_1javaJNI_new_1Db ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_new_1DbEnv ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+Java_com_sleepycat_db_db_1javaJNI_new_1DbLsn ../libdb_java/db_java_wrap.c /^JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1/
+LCK_ALWAYS ../dbinc/db_am.h 90
+LCK_COUPLE ../dbinc/db_am.h 91
+LCK_COUPLE_ALWAYS ../dbinc/db_am.h 92
+LCK_DOWNGRADE ../dbinc/db_am.h 93
+LCK_ROLLBACK ../dbinc/db_am.h 94
+LEAFLEVEL ../dbinc/db_page.h 240
+LEN_HDATA ../dbinc/db_page.h /^#define LEN_HDATA(dbp, p, psize, indx) \\$/
+LEN_HITEM ../dbinc/db_page.h /^#define LEN_HITEM(dbp, pg, pgsize, indx) \\$/
+LEN_HKEY ../dbinc/db_page.h /^#define LEN_HKEY(dbp, p, psize, indx) \\$/
+LEN_HKEYDATA ../dbinc/db_page.h /^#define LEN_HKEYDATA(dbp, pg, psize, indx) \\$/
+LEVEL ../dbinc/db_page.h /^#define LEVEL(p) (((PAGE *)p)->level)$/
+LFNAME ../dbinc/log.h 64
+LFNAME_V1 ../dbinc/log.h 65
+LFPREFIX ../dbinc/log.h 63
+LF_CLR ../dbinc/db_int.in /^#define LF_CLR(f) ((flags) &= ~(f))$/
+LF_ISSET ../dbinc/db_int.in /^#define LF_ISSET(f) ((flags) & (f))$/
+LF_SET ../dbinc/db_int.in /^#define LF_SET(f) ((flags) |= (f))$/
+LG_BASE_REGION_SIZE ../dbinc/log.h 69
+LG_BSIZE_DEFAULT ../dbinc/log.h 68
+LG_MAINT_SIZE ../dbinc/log.h 248
+LG_MAX_DEFAULT ../dbinc/log.h 67
+LIST_EMPTY ../dbinc/queue.h /^#define LIST_EMPTY(head) ((head)->lh_first == NULL/
+LIST_ENTRY ../dbinc/queue.h /^#define LIST_ENTRY(type) \\$/
+LIST_FIRST ../dbinc/queue.h /^#define LIST_FIRST(head) ((head)->lh_first)$/
+LIST_FOREACH ../dbinc/queue.h /^#define LIST_FOREACH(var, head, field) \\$/
+LIST_HEAD ../dbinc/queue.h /^#define LIST_HEAD(name, type) \\$/
+LIST_HEAD_INITIALIZER ../dbinc/queue.h /^#define LIST_HEAD_INITIALIZER(head) \\$/
+LIST_INCREMENT ../log/log_archive.c 207
+LIST_INIT ../dbinc/queue.h /^#define LIST_INIT(head) do { \\$/
+LIST_INSERT_AFTER ../dbinc/queue.h /^#define LIST_INSERT_AFTER(listelm, elm, field) do /
+LIST_INSERT_BEFORE ../dbinc/queue.h /^#define LIST_INSERT_BEFORE(listelm, elm, field) do/
+LIST_INSERT_HEAD ../dbinc/queue.h /^#define LIST_INSERT_HEAD(head, elm, field) do { /
+LIST_NEXT ../dbinc/queue.h /^#define LIST_NEXT(elm, field) ((elm)->field.le_nex/
+LIST_REMOVE ../dbinc/queue.h /^#define LIST_REMOVE(elm, field) do { \\$/
+LOAD_ACTUAL_MUTEX_CODE ../mutex/mut_tas.c 24
+LOCKER_LOCK ../dbinc/lock.h /^#define LOCKER_LOCK(lt, reg, locker, ndx) \\$/
+LOCKING_ON ../dbinc/db_int.in /^#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != N/
+LOCKREGION ../dbinc/lock.h /^#define LOCKREGION(dbenv, lt) R_LOCK((dbenv), &(l/
+LOCK_DUMP_ALL ../lock/lock_stat.c 137
+LOCK_DUMP_CONF ../lock/lock_stat.c 132
+LOCK_DUMP_LOCKERS ../lock/lock_stat.c 133
+LOCK_DUMP_MEM ../lock/lock_stat.c 134
+LOCK_DUMP_OBJECTS ../lock/lock_stat.c 135
+LOCK_DUMP_PARAMS ../lock/lock_stat.c 136
+LOCK_INIT ../dbinc/lock.h /^#define LOCK_INIT(lock) ((lock).off = LOCK_INVALI/
+LOCK_INVALID ../dbinc/lock.h 27
+LOCK_ISSET ../dbinc/lock.h /^#define LOCK_ISSET(lock) ((lock).off != LOCK_INVAL/
+LOCK_SET_TIME_INVALID ../dbinc/lock.h /^#define LOCK_SET_TIME_INVALID(time) ((time)->tv_se/
+LOCK_SET_TIME_MAX ../dbinc/lock.h /^#define LOCK_SET_TIME_MAX(time) ((time)->tv_sec =/
+LOCK_TIME_EQUAL ../dbinc/lock.h /^#define LOCK_TIME_EQUAL(t1, t2) \\$/
+LOCK_TIME_GREATER ../dbinc/lock.h /^#define LOCK_TIME_GREATER(t1, t2) \\$/
+LOCK_TIME_ISMAX ../dbinc/lock.h /^#define LOCK_TIME_ISMAX(time) ((time)->tv_sec == /
+LOCK_TIME_ISVALID ../dbinc/lock.h /^#define LOCK_TIME_ISVALID(time) ((time)->tv_sec !/
+LOFFSET ../dbinc/db_page.h /^#define LOFFSET(dbp, pg) \\$/
+LOG ../dbinc/log.h 60
+LOGGING_ON ../dbinc/db_int.in /^#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != N/
+LOGP ../dbinc/log.h 61
+LOG_OP ../dbinc/debug.h /^#define LOG_OP(C, T, O, K, A, F) { \\$/
+LOWER_MASK ../crypto/mersenne/mt19937db.c 42
+LSN ../dbinc/db_page.h /^#define LSN(p) (((PAGE *)p)->lsn)$/
+LSN_NOT_LOGGED ../dbinc/db_int.in /^#define LSN_NOT_LOGGED(LSN) do { \\$/
+LSN_PAGE_NOLOCK ../dbinc/rep.h 207
+M ../crypto/mersenne/mt19937db.c 39
+MAKE_STAT_LIST ../dbinc/tcl_db.h /^#define MAKE_STAT_LIST(s,v) \\$/
+MAKE_STAT_LSN ../dbinc/tcl_db.h /^#define MAKE_STAT_LSN(s, lsn) \\$/
+MAKE_STAT_STRLIST ../dbinc/tcl_db.h /^#define MAKE_STAT_STRLIST(s,s1) \\$/
+MAP_FAILED ../mutex/tm.c 733
+MAP_FILE ../mutex/tm.c 736
+MASTER_CHECK ../rep/rep_record.c /^#define MASTER_CHECK(dbenv, eid, rep) \\$/
+MASTER_ONLY ../rep/rep_record.c /^#define MASTER_ONLY(rep, rp) do { \\$/
+MATRIX_A ../crypto/mersenne/mt19937db.c 40
+MAXARGS ../common/util_arg.c 36
+MAXBQUALSIZE ../dbinc/xa.h 22
+MAXBTREELEVEL ../dbinc/db_page.h 241
+MAXGTRIDSIZE ../dbinc/xa.h 21
+MAXINFOSIZE ../dbinc/xa.h 46
+MAXKB ../crypto/rijndael/rijndael-alg-fst.h 33
+MAXKC ../crypto/rijndael/rijndael-alg-fst.h 32
+MAXNR ../crypto/rijndael/rijndael-alg-fst.h 34
+MAXPATHLEN ../dbinc/db_int.in 201
+MAX_ID ../dbinc/tcl_db.h 18
+MAX_IV_SIZE ../crypto/rijndael/rijndael-api-fst.h 71
+MAX_KEY_SIZE ../crypto/rijndael/rijndael-api-fst.h 70
+MAX_LSN ../dbinc/db_int.in /^#define MAX_LSN(LSN) do { \\$/
+MAX_LSN_TO_TEXT ../db/db.c 997
+MAX_PAGE_NUMBER ../dbinc/db_185.in 79
+MAX_PAGE_OFFSET ../dbinc/db_185.in 81
+MAX_PGNOS ../lock/lock.c 2188
+MAX_REC_NUMBER ../dbinc/db_185.in 83
+MEGABYTE ../dbinc/db_int.in 41
+MINFILL ../dbinc/hash.h 106
+MODE_CBC ../crypto/rijndael/rijndael-api-fst.h 50
+MODE_CFB1 ../crypto/rijndael/rijndael-api-fst.h 51
+MODE_ECB ../crypto/rijndael/rijndael-api-fst.h 49
+MPF_ILLEGAL_AFTER_OPEN ../dbinc/mp.h /^#define MPF_ILLEGAL_AFTER_OPEN(dbmfp, name) \\$/
+MPF_ILLEGAL_BEFORE_OPEN ../dbinc/mp.h /^#define MPF_ILLEGAL_BEFORE_OPEN(dbmfp, name) \\$/
+MPOOL ../dbinc/mp.h 16
+MPOOLFILE ../dbinc/db.in 127
+MPOOL_BASE_DECREMENT ../dbinc/mp.h 186
+MPOOL_DUMP_ALL ../mp/mp_stat.c 264
+MPOOL_DUMP_HASH ../mp/mp_stat.c 262
+MPOOL_DUMP_MEM ../mp/mp_stat.c 263
+MPOOL_ON ../dbinc/db_int.in /^#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NU/
+MPOOL_PRI_DEFAULT ../dbinc/mp.h 194
+MPOOL_PRI_DIRTY ../dbinc/mp.h 196
+MPOOL_PRI_HIGH ../dbinc/mp.h 195
+MPOOL_PRI_LOW ../dbinc/mp.h 193
+MPOOL_PRI_VERY_HIGH ../dbinc/mp.h 197
+MPOOL_PRI_VERY_LOW ../dbinc/mp.h 192
+MP_CAN_MMAP ../dbinc/mp.h 281
+MP_DIRECT ../dbinc/mp.h 282
+MP_EXTENT ../dbinc/mp.h 283
+MP_FAKE_DEADFILE ../dbinc/mp.h 284
+MP_FAKE_FILEWRITTEN ../dbinc/mp.h 285
+MP_FAKE_NB ../dbinc/mp.h 286
+MP_FAKE_UOC ../dbinc/mp.h 287
+MP_FILEID_SET ../dbinc/db.in 672
+MP_FLUSH ../dbinc/db.in 673
+MP_NOT_DURABLE ../dbinc/mp.h 288
+MP_OPEN_CALLED ../dbinc/db.in 674
+MP_READONLY ../dbinc/db.in 675
+MP_TEMP ../dbinc/mp.h 289
+MSG ../mutex/mut_fcntl.c 152
+MSG1 ../mutex/mut_pthread.c 24
+MSG2 ../mutex/mut_pthread.c 26
+MSGBUF_LEN ../lock/lock_deadlock.c 802
+MSG_SIZE ../dbinc/tcl_db.h 13
+MS_PER_SEC ../dbinc/db_int.in 44
+MT_FILE ../mutex/tm.c 42
+MT_FILE_QUIT ../mutex/tm.c 43
+MUTEX_ALIGN ../dbinc/mutex.h 82
+MUTEX_ALLOC ../dbinc/mutex.h 831
+MUTEX_DESTROY ../dbinc/mutex.h /^#define MUTEX_DESTROY(x) sema_destroy(x)$/
+MUTEX_FIELDS ../dbinc/mutex.h 26
+MUTEX_IGNORE ../dbinc/mutex.h 832
+MUTEX_INIT ../dbinc/mutex.h /^#define MUTEX_INIT(x) 0$/
+MUTEX_INITED ../dbinc/mutex.h 833
+MUTEX_LOCK ../dbinc/mutex.h /^#define MUTEX_LOCK(dbenv, mp) \\$/
+MUTEX_LOGICAL_LOCK ../dbinc/mutex.h 834
+MUTEX_MPOOL ../dbinc/mutex.h 835
+MUTEX_NO_MALLOC_LOCKS ../dbinc/mutex.h 126
+MUTEX_NO_RECORD ../dbinc/mutex.h 836
+MUTEX_NO_RLOCK ../dbinc/mutex.h 837
+MUTEX_NO_SHMGET_LOCKS ../dbinc/mutex.h 127
+MUTEX_PAUSE ../dbinc/mutex.h 363
+MUTEX_SELF_BLOCK ../dbinc/mutex.h 838
+MUTEX_SET ../dbinc/mutex.h /^#define MUTEX_SET(x) (!_check_lock(x, 0, 1))$/
+MUTEX_THREAD ../dbinc/mutex.h 839
+MUTEX_THREAD_LOCK ../dbinc/mutex.h /^#define MUTEX_THREAD_LOCK(dbenv, mp) \\$/
+MUTEX_THREAD_UNLOCK ../dbinc/mutex.h /^#define MUTEX_THREAD_UNLOCK(dbenv, mp) \\$/
+MUTEX_UNLOCK ../dbinc/mutex.h /^#define MUTEX_UNLOCK(dbenv, mp) \\$/
+MUTEX_UNSET ../dbinc/mutex.h /^#define MUTEX_UNSET(x) _clear_lock(x, 0)$/
+MUTEX_WAKEME ../mutex/tm.c 58
+M_16_SWAP ../dbinc/db_swap.h /^#define M_16_SWAP(a) { \\$/
+M_32_SWAP ../dbinc/db_swap.h /^#define M_32_SWAP(a) { \\$/
Mtm ../mutex/tm.c /^main(argc, argv)$/
-NBUCKET ../include/mp.h /^#define NBUCKET(mc, mf_offset, pgno) \\$/
-NCACHE ../include/mp.h /^#define NCACHE(mp, pgno) \\$/
-NCACHED ../include/db_page.h /^#define NCACHED 32 \/* number of spare points *\//
-NCACHED2X ../include/db_upgrade.h /^#define NCACHED2X 32 \/* number of spare points */
-NCACHED30 ../include/db_upgrade.h /^#define NCACHED30 32 \/* number of spare points */
-NDX_INVALID ../include/hash.h /^#define NDX_INVALID 0xFFFF$/
-NEW_GLOBAL_REF ../libdb_java/java_util.h /^#define NEW_GLOBAL_REF(jnienv, obj) \\$/
-NEXT_PGNO ../include/db_page.h /^#define NEXT_PGNO(p) (((PAGE *)p)->next_pgno)$/
-NOT_IMPLEMENTED ../libdb_java/java_util.h /^#define NOT_IMPLEMENTED(str) \\$/
-NUM_ENT ../include/db_page.h /^#define NUM_ENT(p) (((PAGE *)p)->entries)$/
-OBJECT_LOCK ../include/lock.h /^#define OBJECT_LOCK(lt, reg, obj, ndx) \\$/
-OBJ_LINKS_VALID ../include/lock.h /^#define OBJ_LINKS_VALID(L) ((L)->links.stqe_prev !/
-OKFLAGS ../btree/bt_verify.c /^#define OKFLAGS (DB_AGGRESSIVE | DB_NOORDERCHK | D/
-OKFLAGS_CDB ../env/env_open.c /^#define OKFLAGS_CDB \\$/
-OK_FLAGS ../env/env_method.c /^#define OK_FLAGS (DB_CDB_ALLDB | DB_NOMMAP | DB_TX/
-OPCODE_OF ../include/hash.h /^#define OPCODE_OF(N) (N & ~PAIR_MASK)$/
+N ../crypto/mersenne/mt19937db.c 38
+NAME_TO_DB ../dbinc/tcl_db.h /^#define NAME_TO_DB(name) (DB *)_NameToPtr((name))$/
+NAME_TO_DBC ../dbinc/tcl_db.h /^#define NAME_TO_DBC(name) (DBC *)_NameToPtr((name)/
+NAME_TO_ENV ../dbinc/tcl_db.h /^#define NAME_TO_ENV(name) (DB_ENV *)_NameToPtr((na/
+NAME_TO_LOCK ../dbinc/tcl_db.h /^#define NAME_TO_LOCK(name) (DB_LOCK *)_NameToPtr((/
+NAME_TO_MP ../dbinc/tcl_db.h /^#define NAME_TO_MP(name) (DB_MPOOLFILE *)_NameToPt/
+NAME_TO_TXN ../dbinc/tcl_db.h /^#define NAME_TO_TXN(name) (DB_TXN *)_NameToPtr((na/
+NAMLEN ../clib/getcwd.c /^# define NAMLEN(dirent) strlen((dirent)->d_name)$/
+NBUCKET ../dbinc/mp.h /^#define NBUCKET(mc, mf_offset, pgno) \\$/
+NCACHE ../dbinc/mp.h /^#define NCACHE(mp, mf_offset, pgno) \\$/
+NCACHED ../dbinc/db_page.h 134
+NCACHED2X ../dbinc/db_upgrade.h 231
+NCACHED30 ../dbinc/db_upgrade.h 152
+NDX_INVALID ../dbinc/hash.h 110
+NELEM ../libdb_java/db_java_wrap.c /^#define NELEM(x) (sizeof (x) \/ sizeof (x[0]))$/
+NEXT_PGNO ../dbinc/db_page.h /^#define NEXT_PGNO(p) (((PAGE *)p)->next_pgno)$/
+NUM_ENT ../dbinc/db_page.h /^#define NUM_ENT(p) (((PAGE *)p)->entries)$/
+OBJECT_LOCK ../dbinc/lock.h /^#define OBJECT_LOCK(lt, reg, obj, ndx) \\$/
+OBJ_LINKS_VALID ../dbinc/lock.h /^#define OBJ_LINKS_VALID(L) ((L)->links.stqe_prev !/
+OKFLAGS ../btree/bt_verify.c 37
+OKFLAGS_CDB ../env/env_open.c 87
+OK_CRYPTO_FLAGS ../env/env_method.c 335
+OK_FLAGS ../env/env_method.c 528
+ON_ERROR_RETURN ../dbinc/cxx_int.h 61
+ON_ERROR_THROW ../dbinc/cxx_int.h 60
+ON_ERROR_UNKNOWN ../dbinc/cxx_int.h 62
+OPCODE_OF ../dbinc/hash.h /^#define OPCODE_OF(N) (N & ~PAIR_MASK)$/
OR_MAP ../lock/lock_deadlock.c /^#define OR_MAP(D, S, N) { \\$/
-OS_ROUNDOFF ../include/region.h /^#define OS_ROUNDOFF(i, s) { \\$/
-OS_VMPAGESIZE ../include/region.h /^#define OS_VMPAGESIZE (8 * 1024)$/
-OS_VMROUNDOFF ../include/region.h /^#define OS_VMROUNDOFF(i) OS_ROUNDOFF(i, OS_VMPAGES/
-OV_LEN ../include/db_page.h /^#define OV_LEN(p) (((PAGE *)p)->hf_offset)$/
-OV_REF ../include/db_page.h /^#define OV_REF(p) (((PAGE *)p)->entries)$/
-O_ACCMODE ../os/os_oflags.c /^#define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY)$/
-O_INDX ../include/db_page.h /^#define O_INDX 1$/
-OpKind ../libdb_java/java_locked.h /^} OpKind;$/
-PAGE ../include/db_page.h /^} PAGE;$/
-PAIR_DATAMASK ../include/hash.h /^#define PAIR_DATAMASK 0x2$/
-PAIR_DUPMASK ../include/hash.h /^#define PAIR_DUPMASK 0x4$/
-PAIR_ISDATABIG ../include/hash.h /^#define PAIR_ISDATABIG(N) (N & PAIR_DATAMASK)$/
-PAIR_ISDATADUP ../include/hash.h /^#define PAIR_ISDATADUP(N) (N & PAIR_DUPMASK)$/
-PAIR_ISKEYBIG ../include/hash.h /^#define PAIR_ISKEYBIG(N) (N & PAIR_KEYMASK)$/
-PAIR_KEYMASK ../include/hash.h /^#define PAIR_KEYMASK 0x1$/
-PAIR_MASK ../include/hash.h /^#define PAIR_MASK 0xf$/
-PANIC_CHECK ../include/region.h /^#define PANIC_CHECK(dbenv) \\$/
-PATH_DOT ../include/db_int.in /^#define PATH_DOT "." \/* Current working directory/
-PATH_SEPARATOR ../include/db_int.in /^#define PATH_SEPARATOR "\/" \/* Path separator cha/
-PGNO ../include/db_page.h /^#define PGNO(p) (((PAGE *)p)->pgno)$/
-PGNO_BASE_MD ../include/db_page.h /^#define PGNO_BASE_MD 0 \/* Base database: metadata/
-PGNO_INVALID ../include/db_page.h /^#define PGNO_INVALID 0 \/* Invalid page number in /
-POWER_OF_TWO ../include/db_verify.h /^#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)$/
-PREV_PGNO ../include/db_page.h /^#define PREV_PGNO(p) (((PAGE *)p)->prev_pgno)$/
-PSIZE_BOUNDARY ../db/db_pr.c /^#define PSIZE_BOUNDARY (64 * 1024 + 1)$/
-PTHREAD_UNLOCK_ATTEMPTS ../mutex/mut_pthread.c /^#define PTHREAD_UNLOCK_ATTEMPTS 5$/
-PUTOVFL ../include/hash.h /^#define PUTOVFL 0x40$/
-PUTPAIR ../include/hash.h /^#define PUTPAIR 0x20$/
-PUT_HKEYDATA ../include/db_page.h /^#define PUT_HKEYDATA(pe, kd, len, type) { \\$/
+OS_VMPAGESIZE ../dbinc/region.h 283
+OS_VMROUNDOFF ../dbinc/region.h /^#define OS_VMROUNDOFF(i) { \\$/
+OVERFLOW_ERROR ../common/db_err.c 333
+OV_LEN ../dbinc/db_page.h /^#define OV_LEN(p) (((PAGE *)p)->hf_offset)$/
+OV_REF ../dbinc/db_page.h /^#define OV_REF(p) (((PAGE *)p)->entries)$/
+O_ACCMODE ../os/os_oflags.c 50
+O_INDX ../dbinc/db_page.h 596
+PAIR_DATAMASK ../dbinc/hash.h 118
+PAIR_DUPMASK ../dbinc/hash.h 119
+PAIR_ISDATABIG ../dbinc/hash.h /^#define PAIR_ISDATABIG(N) (N & PAIR_DATAMASK)$/
+PAIR_ISDATADUP ../dbinc/hash.h /^#define PAIR_ISDATADUP(N) (N & PAIR_DUPMASK)$/
+PAIR_ISKEYBIG ../dbinc/hash.h /^#define PAIR_ISKEYBIG(N) (N & PAIR_KEYMASK)$/
+PAIR_KEYMASK ../dbinc/hash.h 117
+PAIR_MASK ../dbinc/hash.h 120
+PANIC_CHECK ../dbinc/region.h /^#define PANIC_CHECK(dbenv) \\$/
+PANIC_SET ../dbinc/region.h /^#define PANIC_SET(dbenv, onoff) \\$/
+PATH_DOT ../dbinc/db_int.in 203
+PATH_SEPARATOR ../dbinc/db_int.in 205
+PGNO ../dbinc/db_page.h /^#define PGNO(p) (((PAGE *)p)->pgno)$/
+PGNO_BASE_MD ../dbinc/db_page.h 34
+PGNO_INVALID ../dbinc/db_page.h 33
+POWER_OF_TWO ../dbinc/db_int.in /^#define POWER_OF_TWO(x) (((x) & ((x) - 1)) == 0)$/
+PREPLISTSIZE ../rep/rep_method.c 495
+PREV_PGNO ../dbinc/db_page.h /^#define PREV_PGNO(p) (((PAGE *)p)->prev_pgno)$/
+PTHREAD_UNLOCK_ATTEMPTS ../mutex/mut_pthread.c 55
+PUTOVFL ../dbinc/hash.h 128
+PUTPAIR ../dbinc/hash.h 126
+PUTU32 ../crypto/rijndael/rijndael-alg-fst.c /^#define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st/
+PUT_COUNT ../lock/lock.c /^#define PUT_COUNT(dp, count) do { u_int32_t *ip =/
+PUT_HKEYDATA ../dbinc/db_page.h /^#define PUT_HKEYDATA(pe, kd, len, type) { \\$/
PUT_PAGE ../db/db_upg_opd.c /^#define PUT_PAGE(dbp, fhp, pgno, page) { \\$/
-P_16_COPY ../include/db_swap.h /^#define P_16_COPY(a, b) { \\$/
-P_16_SWAP ../include/db_swap.h /^#define P_16_SWAP(a) { \\$/
-P_32_COPY ../include/db_swap.h /^#define P_32_COPY(a, b) { \\$/
-P_32_SWAP ../include/db_swap.h /^#define P_32_SWAP(a) { \\$/
-P_BTREEMETA ../include/db_page.h /^#define P_BTREEMETA 9 \/* Btree metadata page. *\//
-P_ENTRY ../include/db_page.h /^#define P_ENTRY(pg, indx) ((u_int8_t *)pg + ((PAGE/
-P_FREESPACE ../include/db_page.h /^#define P_FREESPACE(pg) (HOFFSET(pg) - LOFFSET(pg/
-P_HASH ../include/db_page.h /^#define P_HASH 2 \/* Hash. *\/$/
-P_HASHMETA ../include/db_page.h /^#define P_HASHMETA 8 \/* Hash metadata page. *\/$/
-P_IBTREE ../include/db_page.h /^#define P_IBTREE 3 \/* Btree internal. *\/$/
-P_INDX ../include/db_page.h /^#define P_INDX 2$/
-P_INIT ../include/db_page.h /^#define P_INIT(pg, pg_size, n, pg_prev, pg_next, b/
-P_INVALID ../include/db_page.h /^#define P_INVALID 0 \/* Invalid page type. *\/$/
-P_IRECNO ../include/db_page.h /^#define P_IRECNO 4 \/* Recno internal. *\/$/
-P_LBTREE ../include/db_page.h /^#define P_LBTREE 5 \/* Btree leaf. *\/$/
-P_LDUP ../include/db_page.h /^#define P_LDUP 12 \/* Off-page duplicate leaf. */
-P_LRECNO ../include/db_page.h /^#define P_LRECNO 6 \/* Recno leaf. *\/$/
-P_MAXSPACE ../include/db_page.h /^#define P_MAXSPACE(psize) ((psize) - P_OVERHEAD)$/
-P_OVERFLOW ../include/db_page.h /^#define P_OVERFLOW 7 \/* Overflow. *\/$/
-P_OVERHEAD ../include/db_page.h /^#define P_OVERHEAD (SSZA(PAGE, inp))$/
-P_OVFLSPACE ../include/db_page.h /^#define P_OVFLSPACE(psize, pg) (P_MAXSPACE(psize)/
-P_PAGETYPE_MAX ../include/db_page.h /^#define P_PAGETYPE_MAX 13$/
-P_QAMDATA ../include/db_page.h /^#define P_QAMDATA 11 \/* Queue data page. *\/$/
-P_QAMMETA ../include/db_page.h /^#define P_QAMMETA 10 \/* Queue metadata page. *\/$/
-P_TO_ULONG ../include/db_int.in /^#define P_TO_ULONG(p) ((u_long)(db_alignp_t)(p))$/
-QAMDATA ../include/qam.h /^} QAMDATA;$/
-QAM_AFTER_CURRENT ../include/qam.h /^#define QAM_AFTER_CURRENT(meta, recno) \\$/
-QAM_BEFORE_FIRST ../include/qam.h /^#define QAM_BEFORE_FIRST(meta, recno) \\$/
-QAM_GET_RECORD ../include/qam.h /^#define QAM_GET_RECORD(dbp, page, index) \\$/
-QAM_NOT_VALID ../include/qam.h /^#define QAM_NOT_VALID(meta, recno) \\$/
-QAM_RECNO_INDEX ../include/qam.h /^#define QAM_RECNO_INDEX(dbp, pgno, recno) \\$/
-QAM_RECNO_PAGE ../include/qam.h /^#define QAM_RECNO_PAGE(dbp, recno) \\$/
-QAM_RECNO_PER_PAGE ../include/qam.h /^#define QAM_RECNO_PER_PAGE(dbp) (((QUEUE*)(dbp)->q/
-QAM_SET ../include/qam.h /^#define QAM_SET 0x02$/
-QAM_SETCUR ../include/qam.h /^#define QAM_SETCUR 0x02$/
-QAM_SETFIRST ../include/qam.h /^#define QAM_SETFIRST 0x01$/
-QAM_VALID ../include/qam.h /^#define QAM_VALID 0x01$/
-QDEBUG ../qam/qam.c /^#define QDEBUG$/
-QMETA ../include/db_page.h /^} QMETA32, QMETA;$/
-QMETA30 ../include/db_upgrade.h /^} QMETA30;$/
-QMETA31 ../include/db_upgrade.h /^} QMETA31;$/
-QPAGE ../include/db_page.h /^} QPAGE;$/
-QUEUE ../include/qam.h /^struct __queue; typedef struct __queue QUEUE;$/
-QUEUE_CURSOR ../include/qam.h /^struct __qcursor; typedef struct __qcursor QUEUE_C/
-QUEUE_EXTENT ../include/qam.h /^#define QUEUE_EXTENT "%s\/__dbq.%s.%d"$/
-QUEUE_FILELIST ../include/qam.h /^} QUEUE_FILELIST;$/
-RAND_MAX ../tcl/tcl_compat.c /^#define RAND_MAX 0x7fffffff$/
-RECNO ../include/btree.h /^struct __recno; typedef struct __recno RECNO;$/
-RECNOINFO ../include/db_185.in /^} RECNOINFO;$/
-RECNO_OOB ../include/db_int.in /^#define RECNO_OOB 0 \/* Illegal record number. */
-REC_CLOSE ../include/db_am.h /^#define REC_CLOSE { \\$/
-REC_INTRO ../include/db_am.h /^#define REC_INTRO(func, inc_count) { \\$/
-REC_NOOP_CLOSE ../include/db_am.h /^#define REC_NOOP_CLOSE \\$/
-REC_NOOP_INTRO ../include/db_am.h /^#define REC_NOOP_INTRO(func) { \\$/
-REC_PRINT ../include/db_am.h /^#define REC_PRINT(func) \\$/
-REGENV ../include/region.h /^} REGENV;$/
-REGENV_REF ../include/region.h /^} REGENV_REF;$/
-REGINFO ../include/db_int.in /^struct __db_reginfo_t; typedef struct __db_reginfo/
-REGION ../include/region.h /^} REGION;$/
-REGION_CREATE ../include/region.h /^#define REGION_CREATE 0x01 \/* Caller created reg/
-REGION_CREATE_OK ../include/region.h /^#define REGION_CREATE_OK 0x02 \/* Caller willing t/
-REGION_ID_ENV ../include/region.h /^#define REGION_ID_ENV 1 \/* Primary environment I/
-REGION_JOIN_OK ../include/region.h /^#define REGION_JOIN_OK 0x04 \/* Caller is looking/
-REGMAINT ../include/region.h /^} REGMAINT;$/
-REGMAINT_STAT ../include/region.h /^} REGMAINT_STAT;$/
-RESET_RET_MEM ../include/db_int.in /^#define RESET_RET_MEM(dbc) \\$/
-RET_ERROR ../include/db_185.in /^#define RET_ERROR -1 \/* Return values. *\/$/
-RET_SPECIAL ../include/db_185.in /^#define RET_SPECIAL 1$/
-RET_SUCCESS ../include/db_185.in /^#define RET_SUCCESS 0$/
-RE_NREC ../include/db_page.h /^#define RE_NREC(p) \\$/
-RE_NREC_ADJ ../include/db_page.h /^#define RE_NREC_ADJ(p, adj) \\$/
-RE_NREC_SET ../include/db_page.h /^#define RE_NREC_SET(p, num) \\$/
-RINTERNAL ../include/db_page.h /^} RINTERNAL;$/
-RINTERNAL_PSIZE ../include/db_page.h /^#define RINTERNAL_PSIZE \\$/
-RINTERNAL_SIZE ../include/db_page.h /^#define RINTERNAL_SIZE \\$/
-RMNAMESZ ../include/xa.h /^#define RMNAMESZ 32 \/* length of resource manage/
-RPC_SVC_FG ../rpc_server/db_server_svc.c /^#define RPC_SVC_FG$/
-RSMSG ../db185/db185.c /^#define RSMSG "DB: DB 1.85's R_RECNOSYNC sync flag/
-R_ADDR ../include/region.h /^#define R_ADDR(base, offset) \\$/
-R_CURSOR ../include/db_185.in /^#define R_CURSOR 1 \/* del, put, seq *\/$/
-R_DUP ../include/db_185.in /^#define R_DUP 0x01 \/* duplicate keys *\/$/
-R_FIRST ../include/db_185.in /^#define R_FIRST 3 \/* seq *\/$/
-R_FIXEDLEN ../include/db_185.in /^#define R_FIXEDLEN 0x01 \/* fixed-length records */
-R_IAFTER ../include/db_185.in /^#define R_IAFTER 4 \/* put (RECNO) *\/$/
-R_IBEFORE ../include/db_185.in /^#define R_IBEFORE 5 \/* put (RECNO) *\/$/
-R_LAST ../include/db_185.in /^#define R_LAST 6 \/* seq (BTREE, RECNO) *\/$/
-R_LOCK ../include/region.h /^#define R_LOCK(dbenv, reginfo) \\$/
-R_NEXT ../include/db_185.in /^#define R_NEXT 7 \/* seq *\/$/
-R_NOKEY ../include/db_185.in /^#define R_NOKEY 0x02 \/* key not required *\/$/
-R_NOOVERWRITE ../include/db_185.in /^#define R_NOOVERWRITE 8 \/* put *\/$/
-R_OFFSET ../include/region.h /^#define R_OFFSET(base, p) \\$/
-R_PREV ../include/db_185.in /^#define R_PREV 9 \/* seq (BTREE, RECNO) *\/$/
-R_RECNOSYNC ../include/db_185.in /^#define R_RECNOSYNC 11 \/* sync (RECNO) *\/$/
-R_SETCURSOR ../include/db_185.in /^#define R_SETCURSOR 10 \/* put (RECNO) *\/$/
-R_SNAPSHOT ../include/db_185.in /^#define R_SNAPSHOT 0x04 \/* snapshot the input *\//
-R_UNLOCK ../include/region.h /^#define R_UNLOCK(dbenv, reginfo) \\$/
-SALVAGE_HASH ../include/db_verify.h /^#define SALVAGE_HASH 6$/
-SALVAGE_IGNORE ../include/db_verify.h /^#define SALVAGE_IGNORE 1$/
-SALVAGE_INVALID ../include/db_verify.h /^#define SALVAGE_INVALID 0$/
-SALVAGE_LBTREE ../include/db_verify.h /^#define SALVAGE_LBTREE 5$/
-SALVAGE_LDUP ../include/db_verify.h /^#define SALVAGE_LDUP 2$/
-SALVAGE_LRECNO ../include/db_verify.h /^#define SALVAGE_LRECNO 7$/
-SALVAGE_LRECNODUP ../include/db_verify.h /^#define SALVAGE_LRECNODUP 3$/
-SALVAGE_OVERFLOW ../include/db_verify.h /^#define SALVAGE_OVERFLOW 4$/
-SALVAGE_PRINTFOOTER ../include/db_verify.h /^#define SALVAGE_PRINTFOOTER 0x02$/
-SALVAGE_PRINTHEADER ../include/db_verify.h /^#define SALVAGE_PRINTHEADER 0x01$/
-SA_SKIPFIRSTKEY ../include/db_verify.h /^#define SA_SKIPFIRSTKEY 0x00080000$/
-SERIAL_INIT ../os/os_fid.c /^#define SERIAL_INIT 0$/
-SET_MAP ../lock/lock_deadlock.c /^#define SET_MAP(M, B) ((M)[(B) \/ 32] |= (1 << ((B/
-SET_RET_MEM ../include/db_int.in /^#define SET_RET_MEM(dbc, owner) \\$/
-SHALLOC_FRAGMENT ../env/db_salloc.c /^#define SHALLOC_FRAGMENT 32$/
-SHOBJECT_LOCK ../include/lock.h /^#define SHOBJECT_LOCK(lt, reg, shobj, ndx) \\$/
-SH_CIRCLEQ_ENTRY ../include/shqueue.h /^#define SH_CIRCLEQ_ENTRY \\$/
-SH_CIRCLEQ_FIRST ../include/shqueue.h /^#define SH_CIRCLEQ_FIRST(head, type) \\$/
-SH_CIRCLEQ_FIRSTP ../include/shqueue.h /^#define SH_CIRCLEQ_FIRSTP(head, type) \\$/
-SH_CIRCLEQ_HEAD ../include/shqueue.h /^#define SH_CIRCLEQ_HEAD(name) \\$/
-SH_CIRCLEQ_INIT ../include/shqueue.h /^#define SH_CIRCLEQ_INIT(head) { \\$/
-SH_CIRCLEQ_INSERT_AFTER ../include/shqueue.h /^#define SH_CIRCLEQ_INSERT_AFTER(head, listelm, elm/
-SH_CIRCLEQ_INSERT_BEFORE ../include/shqueue.h /^#define SH_CIRCLEQ_INSERT_BEFORE(head, listelm, el/
-SH_CIRCLEQ_INSERT_HEAD ../include/shqueue.h /^#define SH_CIRCLEQ_INSERT_HEAD(head, elm, field, t/
-SH_CIRCLEQ_INSERT_TAIL ../include/shqueue.h /^#define SH_CIRCLEQ_INSERT_TAIL(head, elm, field, t/
-SH_CIRCLEQ_LAST ../include/shqueue.h /^#define SH_CIRCLEQ_LAST(head, type) \\$/
-SH_CIRCLEQ_LASTP ../include/shqueue.h /^#define SH_CIRCLEQ_LASTP(head, type) \\$/
-SH_CIRCLEQ_NEXT ../include/shqueue.h /^#define SH_CIRCLEQ_NEXT(head, elm, field, type) /
-SH_CIRCLEQ_NEXTP ../include/shqueue.h /^#define SH_CIRCLEQ_NEXTP(elm, field, type) \\$/
-SH_CIRCLEQ_PREV ../include/shqueue.h /^#define SH_CIRCLEQ_PREV(head, elm, field, type) /
-SH_CIRCLEQ_PREVP ../include/shqueue.h /^#define SH_CIRCLEQ_PREVP(elm, field, type) \\$/
-SH_CIRCLEQ_REMOVE ../include/shqueue.h /^#define SH_CIRCLEQ_REMOVE(head, elm, field, type) /
-SH_DBT ../include/lock.h /^} SH_DBT;$/
-SH_DBT_PTR ../include/lock.h /^#define SH_DBT_PTR(p) ((void *)(((u_int8_t *)(p)) /
-SH_LIST_ENTRY ../include/shqueue.h /^#define SH_LIST_ENTRY \\$/
-SH_LIST_FIRST ../include/shqueue.h /^#define SH_LIST_FIRST(head, type) \\$/
-SH_LIST_FIRSTP ../include/shqueue.h /^#define SH_LIST_FIRSTP(head, type) \\$/
-SH_LIST_HEAD ../include/shqueue.h /^#define SH_LIST_HEAD(name) \\$/
-SH_LIST_INIT ../include/shqueue.h /^#define SH_LIST_INIT(head) (head)->slh_first = -1$/
-SH_LIST_INSERT_AFTER ../include/shqueue.h /^#define SH_LIST_INSERT_AFTER(listelm, elm, field, /
-SH_LIST_INSERT_HEAD ../include/shqueue.h /^#define SH_LIST_INSERT_HEAD(head, elm, field, type/
-SH_LIST_NEXT ../include/shqueue.h /^#define SH_LIST_NEXT(elm, field, type) \\$/
-SH_LIST_NEXTP ../include/shqueue.h /^#define SH_LIST_NEXTP(elm, field, type) \\$/
-SH_LIST_NEXT_TO_PREV ../include/shqueue.h /^#define SH_LIST_NEXT_TO_PREV(elm, field) \\$/
-SH_LIST_PREV ../include/shqueue.h /^#define SH_LIST_PREV(elm, field) \\$/
-SH_LIST_REMOVE ../include/shqueue.h /^#define SH_LIST_REMOVE(elm, field, type) do { /
-SH_PTR_TO_OFF ../include/shqueue.h /^#define SH_PTR_TO_OFF(src, dest) \\$/
-SH_TAILQ_ENTRY ../include/shqueue.h /^#define SH_TAILQ_ENTRY \\$/
-SH_TAILQ_FIRST ../include/shqueue.h /^#define SH_TAILQ_FIRST(head, type) \\$/
-SH_TAILQ_FIRSTP ../include/shqueue.h /^#define SH_TAILQ_FIRSTP(head, type) \\$/
-SH_TAILQ_HEAD ../include/db_shash.h /^typedef SH_TAILQ_HEAD(__hash_head) DB_HASHTAB;$/
-SH_TAILQ_INIT ../include/shqueue.h /^#define SH_TAILQ_INIT(head) { \\$/
-SH_TAILQ_INSERT_AFTER ../include/shqueue.h /^#define SH_TAILQ_INSERT_AFTER(head, listelm, elm, /
-SH_TAILQ_INSERT_HEAD ../include/shqueue.h /^#define SH_TAILQ_INSERT_HEAD(head, elm, field, typ/
-SH_TAILQ_INSERT_TAIL ../include/shqueue.h /^#define SH_TAILQ_INSERT_TAIL(head, elm, field) do /
-SH_TAILQ_LAST ../include/shqueue.h /^#define SH_TAILQ_LAST(head) \\$/
-SH_TAILQ_NEXT ../include/shqueue.h /^#define SH_TAILQ_NEXT(elm, field, type) \\$/
-SH_TAILQ_NEXTP ../include/shqueue.h /^#define SH_TAILQ_NEXTP(elm, field, type) \\$/
-SH_TAILQ_NEXT_TO_PREV ../include/shqueue.h /^#define SH_TAILQ_NEXT_TO_PREV(elm, field) \\$/
-SH_TAILQ_PREVP ../include/shqueue.h /^#define SH_TAILQ_PREVP(elm, field) \\$/
-SH_TAILQ_REMOVE ../include/shqueue.h /^#define SH_TAILQ_REMOVE(head, elm, field, type) do/
+PUT_PCOUNT ../lock/lock.c /^#define PUT_PCOUNT(dp, count) do { u_int16_t *ip /
+PUT_PGNO ../lock/lock.c /^#define PUT_PGNO(dp, pgno) do { db_pgno_t *ip = (/
+PUT_SIZE ../lock/lock.c /^#define PUT_SIZE(dp, size) do { u_int16_t *ip = (/
+P_16_COPY ../dbinc/db_swap.h /^#define P_16_COPY(a, b) { \\$/
+P_16_SWAP ../dbinc/db_swap.h /^#define P_16_SWAP(a) { \\$/
+P_32_COPY ../dbinc/db_swap.h /^#define P_32_COPY(a, b) { \\$/
+P_32_SWAP ../dbinc/db_swap.h /^#define P_32_SWAP(a) { \\$/
+P_BTREEMETA ../dbinc/db_page.h 46
+P_CHKSUM ../dbinc/db_page.h /^#define P_CHKSUM(dbp, pg) \\$/
+P_ENTRY ../dbinc/db_page.h /^#define P_ENTRY(dbp, pg, indx) ((u_int8_t *)pg + P/
+P_FREESPACE ../dbinc/db_page.h /^#define P_FREESPACE(dbp, pg) (HOFFSET(pg) - LOFFSE/
+P_HASH ../dbinc/db_page.h 39
+P_HASHMETA ../dbinc/db_page.h 45
+P_IBTREE ../dbinc/db_page.h 40
+P_INDX ../dbinc/db_page.h 597
+P_INIT ../dbinc/db_page.h /^#define P_INIT(pg, pg_size, n, pg_prev, pg_next, b/
+P_INP ../dbinc/db_page.h /^#define P_INP(dbp, pg) \\$/
+P_INVALID ../dbinc/db_page.h 37
+P_IRECNO ../dbinc/db_page.h 41
+P_IV ../dbinc/db_page.h /^#define P_IV(dbp, pg) \\$/
+P_LBTREE ../dbinc/db_page.h 42
+P_LDUP ../dbinc/db_page.h 49
+P_LRECNO ../dbinc/db_page.h 43
+P_MAXSPACE ../dbinc/db_page.h /^#define P_MAXSPACE(dbp, psize) ((psize) - P_OVERHE/
+P_OVERFLOW ../dbinc/db_page.h 44
+P_OVERHEAD ../dbinc/db_page.h /^#define P_OVERHEAD(dbp) P_TO_UINT16(P_INP(dbp, 0))/
+P_OVFLSPACE ../dbinc/db_page.h /^#define P_OVFLSPACE(dbp, psize, pg) (P_MAXSPACE(db/
+P_PAGETYPE_MAX ../dbinc/db_page.h 50
+P_QAMDATA ../dbinc/db_page.h 48
+P_QAMMETA ../dbinc/db_page.h 47
+P_TO_UINT16 ../dbinc/db_int.in /^#define P_TO_UINT16(p) ((u_int16_t)(db_alignp_t)(p/
+P_TO_UINT32 ../dbinc/db_int.in /^#define P_TO_UINT32(p) ((u_int32_t)(db_alignp_t)(p/
+P_TO_ULONG ../dbinc/db_int.in /^#define P_TO_ULONG(p) ((u_long)(db_alignp_t)(p))$/
+QAM_AFTER_CURRENT ../dbinc/qam.h /^#define QAM_AFTER_CURRENT(meta, recno) \\$/
+QAM_BEFORE_FIRST ../dbinc/qam.h /^#define QAM_BEFORE_FIRST(meta, recno) \\$/
+QAM_EXNAME ../qam/qam_files.c /^#define QAM_EXNAME(Q, I, B, L) \\$/
+QAM_GET_RECORD ../dbinc/qam.h /^#define QAM_GET_RECORD(dbp, page, index) \\$/
+QAM_NOT_VALID ../dbinc/qam.h /^#define QAM_NOT_VALID(meta, recno) \\$/
+QAM_PAGE_EXTENT ../dbinc/qam.h /^#define QAM_PAGE_EXTENT(dbp, pgno) \\$/
+QAM_RECNO_EXTENT ../dbinc/qam.h /^#define QAM_RECNO_EXTENT(dbp, recno) \\$/
+QAM_RECNO_INDEX ../dbinc/qam.h /^#define QAM_RECNO_INDEX(dbp, pgno, recno) \\$/
+QAM_RECNO_PAGE ../dbinc/qam.h /^#define QAM_RECNO_PAGE(dbp, recno) \\$/
+QAM_RECNO_PER_PAGE ../dbinc/qam.h /^#define QAM_RECNO_PER_PAGE(dbp) (((QUEUE*)(dbp)->q/
+QAM_SET ../dbinc/qam.h 19
+QAM_SETCUR ../dbinc/qam.h 141
+QAM_SETFIRST ../dbinc/qam.h 140
+QAM_TRUNCATE ../dbinc/qam.h 142
+QAM_VALID ../dbinc/qam.h 18
+QDEBUG ../qam/qam.c 613
+QMD_TRACE_ELEM ../dbinc/queue.h /^#define QMD_TRACE_ELEM(elem) do { \\$/
+QMD_TRACE_HEAD ../dbinc/queue.h /^#define QMD_TRACE_HEAD(head) do { \\$/
+QPAGE_CHKSUM ../dbinc/db_page.h 293
+QPAGE_NORMAL ../dbinc/db_page.h 292
+QPAGE_SEC ../dbinc/db_page.h 294
+QPAGE_SZ ../dbinc/db_page.h /^#define QPAGE_SZ(dbp) \\$/
+QUEUE ../dbinc/qam.h 23
+QUEUE_CURSOR ../dbinc/qam.h 24
+QUEUE_EXTENT ../dbinc/qam.h 72
+QUEUE_EXTENT_HEAD ../dbinc/qam.h 73
+QUEUE_MACRO_DEBUG ../dbinc/queue.h 183
+R0 ../hmac/sha1.c /^#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0/
+R1 ../hmac/sha1.c /^#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x/
+R2 ../hmac/sha1.c /^#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EB/
+R3 ../hmac/sha1.c /^#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i/
+R4 ../hmac/sha1.c /^#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1/
+RAND_MAX ../tcl/tcl_util.c 92
+RECNO ../dbinc/btree.h 51
+RECNO_OOB ../dbinc/db_int.in 47
+REC_CLOSE ../dbinc/db_am.h 54
+REC_INTRO ../dbinc/db_am.h /^#define REC_INTRO(func, inc_count) do { \\$/
+REC_NOOP_CLOSE ../dbinc/db_am.h 72
+REC_NOOP_INTRO ../dbinc/db_am.h /^#define REC_NOOP_INTRO(func) do { \\$/
+REC_PRINT ../dbinc/db_am.h /^#define REC_PRINT(func) \\$/
+REGINFO ../dbinc/db_int.in 418
+REGION_CREATE ../dbinc/region.h 218
+REGION_CREATE_OK ../dbinc/region.h 219
+REGION_ID_ENV ../dbinc/region.h 108
+REGION_JOIN_OK ../dbinc/region.h 220
+REL_ENVLOCK ../fileops/fop_util.c /^#define REL_ENVLOCK(ENV, L) \\$/
+REPDBNAME ../rep/rep_method.c 396
+REP_ALIVE ../dbinc/rep.h 11
+REP_ALIVE_REQ ../dbinc/rep.h 12
+REP_ALL_REQ ../dbinc/rep.h 13
+REP_DUPMASTER ../dbinc/rep.h 14
+REP_FILE ../dbinc/rep.h 15
+REP_FILE_REQ ../dbinc/rep.h 16
+REP_F_EPHASE1 ../dbinc/rep.h 89
+REP_F_EPHASE2 ../dbinc/rep.h 90
+REP_F_LOGSONLY ../dbinc/rep.h 91
+REP_F_MASTER ../dbinc/rep.h 92
+REP_F_MASTERELECT ../dbinc/rep.h 93
+REP_F_NOARCHIVE ../dbinc/rep.h 94
+REP_F_READY ../dbinc/rep.h 95
+REP_F_RECOVER ../dbinc/rep.h 96
+REP_F_TALLY ../dbinc/rep.h 97
+REP_F_UPGRADE ../dbinc/rep.h 98
+REP_ISCLIENT ../dbinc/rep.h 99
+REP_LOG ../dbinc/rep.h 17
+REP_LOG_MORE ../dbinc/rep.h 18
+REP_LOG_REQ ../dbinc/rep.h 19
+REP_MASTER_REQ ../dbinc/rep.h 20
+REP_NEWCLIENT ../dbinc/rep.h 21
+REP_NEWFILE ../dbinc/rep.h 22
+REP_NEWMASTER ../dbinc/rep.h 23
+REP_NEWSITE ../dbinc/rep.h 24
+REP_ON ../dbinc/db_int.in /^#define REP_ON(dbenv) ((dbenv)->rep_handle != NUL/
+REP_PAGE ../dbinc/rep.h 30
+REP_PAGE_REQ ../dbinc/rep.h 31
+REP_PLIST ../dbinc/rep.h 32
+REP_PLIST_REQ ../dbinc/rep.h 33
+REP_VERIFY ../dbinc/rep.h 34
+REP_VERIFY_FAIL ../dbinc/rep.h 35
+REP_VERIFY_REQ ../dbinc/rep.h 36
+REP_VOTE1 ../dbinc/rep.h 37
+REP_VOTE2 ../dbinc/rep.h 38
+RESET_RET_MEM ../dbinc/db_int.in /^#define RESET_RET_MEM(dbc) \\$/
+RET_ERROR ../dbinc/db_185.in 58
+RET_SIZE ../lock/lock.c /^#define RET_SIZE(size, count) ((size) + \\$/
+RET_SPECIAL ../dbinc/db_185.in 60
+RET_SUCCESS ../dbinc/db_185.in 59
+RE_NREC ../dbinc/db_page.h /^#define RE_NREC(p) \\$/
+RE_NREC_ADJ ../dbinc/db_page.h /^#define RE_NREC_ADJ(p, adj) \\$/
+RE_NREC_SET ../dbinc/db_page.h /^#define RE_NREC_SET(p, num) \\$/
+RINTERNAL_PSIZE ../dbinc/db_page.h 650
+RINTERNAL_SIZE ../dbinc/db_page.h 648
+RLOCK ../log/log_get.c 26
+RMNAMESZ ../dbinc/xa.h 44
+RPC_ON ../dbinc/db_int.in /^#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL/
+RPC_SVC_FG ../rpc_server/c/db_server_svc.c 24
+RSMSG ../db185/db185.c 522
+R_ADDR ../dbinc/region.h /^#define R_ADDR(base, offset) \\$/
+R_CURSOR ../dbinc/db_185.in 93
+R_DUP ../dbinc/db_185.in 125
+R_FIRST ../dbinc/db_185.in 95
+R_FIXEDLEN ../dbinc/db_185.in 154
+R_IAFTER ../dbinc/db_185.in 96
+R_IBEFORE ../dbinc/db_185.in 97
+R_LAST ../dbinc/db_185.in 98
+R_LOCK ../dbinc/region.h /^#define R_LOCK(dbenv, reginfo) \\$/
+R_NEXT ../dbinc/db_185.in 99
+R_NOKEY ../dbinc/db_185.in 155
+R_NOOVERWRITE ../dbinc/db_185.in 100
+R_OFFSET ../dbinc/region.h /^#define R_OFFSET(base, p) \\$/
+R_PREV ../dbinc/db_185.in 101
+R_RECNOSYNC ../dbinc/db_185.in 103
+R_SETCURSOR ../dbinc/db_185.in 102
+R_SNAPSHOT ../dbinc/db_185.in 156
+R_UNLOCK ../dbinc/region.h /^#define R_UNLOCK(dbenv, reginfo) \\$/
+SALVAGE_HASH ../dbinc/db_verify.h 108
+SALVAGE_IGNORE ../dbinc/db_verify.h 103
+SALVAGE_INVALID ../dbinc/db_verify.h 102
+SALVAGE_LBTREE ../dbinc/db_verify.h 107
+SALVAGE_LDUP ../dbinc/db_verify.h 104
+SALVAGE_LRECNO ../dbinc/db_verify.h 109
+SALVAGE_LRECNODUP ../dbinc/db_verify.h 105
+SALVAGE_OVERFLOW ../dbinc/db_verify.h 106
+SALVAGE_PRINTABLE ../dbinc/db_verify.h 134
+SALVAGE_PRINTFOOTER ../dbinc/db_verify.h 136
+SALVAGE_PRINTHEADER ../dbinc/db_verify.h 135
+SA_SKIPFIRSTKEY ../dbinc/db_verify.h 65
+SERIAL_INIT ../os/os_fid.c 35
+SET_LOG_FLAGS ../txn/txn.c /^#define SET_LOG_FLAGS(dbenv, txnp, lflags) \\$/
+SET_MAP ../lock/lock_deadlock.c /^#define SET_MAP(M, B) ((M)[(B) \/ 32] |= (1 << ((B)/
+SET_RET_MEM ../dbinc/db_int.in /^#define SET_RET_MEM(dbc, owner) \\$/
+SET_TXN ../xa/xa_db.c /^#define SET_TXN(PARAM, LOCAL) { \\$/
+SHA1HANDSOFF ../hmac/sha1.c 76
+SHALLOC_FRAGMENT ../env/db_salloc.c 149
+SHOBJECT_LOCK ../dbinc/lock.h /^#define SHOBJECT_LOCK(lt, reg, shobj, ndx) \\$/
+SH_DBT_PTR ../dbinc/lock.h /^#define SH_DBT_PTR(p) ((void *)(((u_int8_t *)(p)) /
+SH_LIST_EMPTY ../dbinc/shqueue.h /^#define SH_LIST_EMPTY(head) \\$/
+SH_LIST_ENTRY ../dbinc/shqueue.h 49
+SH_LIST_FIRST ../dbinc/shqueue.h /^#define SH_LIST_FIRST(head, type) \\$/
+SH_LIST_FIRSTP ../dbinc/shqueue.h /^#define SH_LIST_FIRSTP(head, type) \\$/
+SH_LIST_FOREACH ../dbinc/shqueue.h /^#define SH_LIST_FOREACH(var, head, field, type) /
+SH_LIST_HEAD ../dbinc/shqueue.h /^#define SH_LIST_HEAD(name) \\$/
+SH_LIST_HEAD_INITIALIZER ../dbinc/shqueue.h /^#define SH_LIST_HEAD_INITIALIZER(head) \\$/
+SH_LIST_INIT ../dbinc/shqueue.h /^#define SH_LIST_INIT(head) (head)->slh_first = -1$/
+SH_LIST_INSERT_AFTER ../dbinc/shqueue.h /^#define SH_LIST_INSERT_AFTER(listelm, elm, field, /
+SH_LIST_INSERT_BEFORE ../dbinc/shqueue.h /^#define SH_LIST_INSERT_BEFORE(head, listelm, elm, /
+SH_LIST_INSERT_HEAD ../dbinc/shqueue.h /^#define SH_LIST_INSERT_HEAD(head, elm, field, type/
+SH_LIST_NEXT ../dbinc/shqueue.h /^#define SH_LIST_NEXT(elm, field, type) \\$/
+SH_LIST_NEXTP ../dbinc/shqueue.h /^#define SH_LIST_NEXTP(elm, field, type) \\$/
+SH_LIST_NEXT_TO_PREV ../dbinc/shqueue.h /^#define SH_LIST_NEXT_TO_PREV(elm, field) \\$/
+SH_LIST_PREV ../dbinc/shqueue.h /^#define SH_LIST_PREV(elm, field, type) \\$/
+SH_LIST_REMOVE ../dbinc/shqueue.h /^#define SH_LIST_REMOVE(elm, field, type) do { \\/
+SH_LIST_REMOVE_HEAD ../dbinc/shqueue.h /^#define SH_LIST_REMOVE_HEAD(head, field, type) do /
+SH_PTR_TO_OFF ../dbinc/shqueue.h /^#define SH_PTR_TO_OFF(src, dest) \\$/
+SH_TAILQ_EMPTY ../dbinc/shqueue.h /^#define SH_TAILQ_EMPTY(head) \\$/
+SH_TAILQ_ENTRY ../dbinc/shqueue.h 179
+SH_TAILQ_FIRST ../dbinc/shqueue.h /^#define SH_TAILQ_FIRST(head, type) \\$/
+SH_TAILQ_FIRSTP ../dbinc/shqueue.h /^#define SH_TAILQ_FIRSTP(head, type) \\$/
+SH_TAILQ_FOREACH ../dbinc/shqueue.h /^#define SH_TAILQ_FOREACH(var, head, field, type) /
+SH_TAILQ_FOREACH_REVERSE ../dbinc/shqueue.h /^#define SH_TAILQ_FOREACH_REVERSE(var, head, field,/
+SH_TAILQ_HEAD ../dbinc/db_shash.h 14
+SH_TAILQ_HEAD_INITIALIZER ../dbinc/shqueue.h /^#define SH_TAILQ_HEAD_INITIALIZER(head) \\$/
+SH_TAILQ_INIT ../dbinc/shqueue.h /^#define SH_TAILQ_INIT(head) { \\$/
+SH_TAILQ_INSERT_AFTER ../dbinc/shqueue.h /^#define SH_TAILQ_INSERT_AFTER(head, listelm, elm, /
+SH_TAILQ_INSERT_BEFORE ../dbinc/shqueue.h /^#define SH_TAILQ_INSERT_BEFORE(head, listelm, elm,/
+SH_TAILQ_INSERT_HEAD ../dbinc/shqueue.h /^#define SH_TAILQ_INSERT_HEAD(head, elm, field, typ/
+SH_TAILQ_INSERT_TAIL ../dbinc/shqueue.h /^#define SH_TAILQ_INSERT_TAIL(head, elm, field) do /
+SH_TAILQ_LAST ../dbinc/shqueue.h /^#define SH_TAILQ_LAST(head, field, type) \\$/
+SH_TAILQ_NEXT ../dbinc/shqueue.h /^#define SH_TAILQ_NEXT(elm, field, type) \\$/
+SH_TAILQ_NEXTP ../dbinc/shqueue.h /^#define SH_TAILQ_NEXTP(elm, field, type) \\$/
+SH_TAILQ_NEXT_TO_PREV ../dbinc/shqueue.h /^#define SH_TAILQ_NEXT_TO_PREV(elm, field) \\$/
+SH_TAILQ_PREV ../dbinc/shqueue.h /^#define SH_TAILQ_PREV(head, elm, field, type) \\/
+SH_TAILQ_PREVP ../dbinc/shqueue.h /^#define SH_TAILQ_PREVP(elm, field, type) \\$/
+SH_TAILQ_REMOVE ../dbinc/shqueue.h /^#define SH_TAILQ_REMOVE(head, elm, field, type) do/
+SIZEOF_PAGE ../dbinc/db_page.h 252
+SLIST_EMPTY ../dbinc/queue.h /^#define SLIST_EMPTY(head) ((head)->slh_first == NU/
+SLIST_ENTRY ../dbinc/queue.h /^#define SLIST_ENTRY(type) \\$/
+SLIST_FIRST ../dbinc/queue.h /^#define SLIST_FIRST(head) ((head)->slh_first)$/
+SLIST_FOREACH ../dbinc/queue.h /^#define SLIST_FOREACH(var, head, field) \\$/
+SLIST_FOREACH_PREVPTR ../dbinc/queue.h /^#define SLIST_FOREACH_PREVPTR(var, varp, head, fie/
+SLIST_HEAD ../dbinc/queue.h /^#define SLIST_HEAD(name, type) \\$/
+SLIST_HEAD_INITIALIZER ../dbinc/queue.h /^#define SLIST_HEAD_INITIALIZER(head) \\$/
+SLIST_INIT ../dbinc/queue.h /^#define SLIST_INIT(head) do { \\$/
+SLIST_INSERT_AFTER ../dbinc/queue.h /^#define SLIST_INSERT_AFTER(slistelm, elm, field) d/
+SLIST_INSERT_HEAD ../dbinc/queue.h /^#define SLIST_INSERT_HEAD(head, elm, field) do { /
+SLIST_NEXT ../dbinc/queue.h /^#define SLIST_NEXT(elm, field) ((elm)->field.sle_n/
+SLIST_REMOVE ../dbinc/queue.h /^#define SLIST_REMOVE(head, elm, type, field) do { /
+SLIST_REMOVE_HEAD ../dbinc/queue.h /^#define SLIST_REMOVE_HEAD(head, field) do { \\$/
SORTED_SET ../db/db_join.c /^#define SORTED_SET(jc, n) ((jc)->j_curslist[(n)]/
-SPLITNEW ../include/hash.h /^#define SPLITNEW 0x90$/
-SPLITOLD ../include/hash.h /^#define SPLITOLD 0x80$/
-SPL_NRECS ../include/btree.h /^#define SPL_NRECS 0x01 \/* Split tree has record /
-SSZ ../include/db_int.in /^#define SSZ(name, field) ((int)&(((name *)0)->fiel/
-SSZA ../include/db_int.in /^#define SSZA(name, field) ((int)&(((name *)0)->fie/
-STDERR_FILENO ../db185/db185.c /^#define STDERR_FILENO 2$/
-STD_LOCKING ../include/db_int.in /^#define STD_LOCKING(dbc) \\$/
-STK_CLRDBC ../include/btree.h /^#define STK_CLRDBC 0x01 \/* Clear dbc->page refer/
-STK_NOLOCK ../include/btree.h /^#define STK_NOLOCK 0x02 \/* Don't retain locks. */
-ST_DUPOK ../include/db_verify.h /^#define ST_DUPOK 0x00010000 \/* Duplicates are acc/
-ST_DUPSET ../include/db_verify.h /^#define ST_DUPSET 0x00020000 \/* Subtree is in a d/
-ST_DUPSORT ../include/db_verify.h /^#define ST_DUPSORT 0x00040000 \/* Duplicates are s/
-ST_IS_RECNO ../include/db_verify.h /^#define ST_IS_RECNO 0x00080000 \/* Subtree is a re/
-ST_OVFL_LEAF ../include/db_verify.h /^#define ST_OVFL_LEAF 0x00100000 \/* Overflow reffe/
-ST_RECNUM ../include/db_verify.h /^#define ST_RECNUM 0x00200000 \/* Subtree has recor/
-ST_RELEN ../include/db_verify.h /^#define ST_RELEN 0x00400000 \/* Subtree has fixed-/
-ST_TOPLEVEL ../include/db_verify.h /^#define ST_TOPLEVEL 0x00800000 \/* Subtree == enti/
-SWAP16 ../include/db_swap.h /^#define SWAP16(p) { \\$/
-SWAP32 ../include/db_swap.h /^#define SWAP32(p) { \\$/
-S_APPEND ../include/btree.h /^#define S_APPEND 0x00040 \/* Append to the tree. /
-S_DELETE ../include/btree.h /^#define S_DELETE (S_WRITE | S_DUPFIRST | S_DELNO |/
-S_DELNO ../include/btree.h /^#define S_DELNO 0x00080 \/* Don't return deleted/
-S_DUPFIRST ../include/btree.h /^#define S_DUPFIRST 0x00100 \/* Return first dupli/
-S_DUPLAST ../include/btree.h /^#define S_DUPLAST 0x00200 \/* Return last duplica/
-S_EXACT ../include/btree.h /^#define S_EXACT 0x00400 \/* Exact items only. */
-S_FIND ../include/btree.h /^#define S_FIND (S_READ | S_DUPFIRST | S_DELNO)$/
-S_FIND_WR ../include/btree.h /^#define S_FIND_WR (S_WRITE | S_DUPFIRST | S_DELNO)/
-S_INSERT ../include/btree.h /^#define S_INSERT (S_WRITE | S_DUPLAST | S_PAST_EOF/
-S_IRGRP ../os/os_oflags.c /^#define S_IRGRP 0 \/* R for group *\/$/
-S_IROTH ../os/os_oflags.c /^#define S_IROTH 0 \/* R for other *\/$/
-S_IRUSR ../os/os_oflags.c /^#define S_IRUSR S_IREAD \/* R for owner *\/$/
+SPLITNEW ../dbinc/hash.h 133
+SPLITOLD ../dbinc/hash.h 132
+SPL_NRECS ../dbinc/btree.h 69
+SSZ ../dbinc/db_int.in /^#define SSZ(name, field) P_TO_UINT16(&(((name *)0/
+SSZA ../dbinc/db_int.in /^#define SSZA(name, field) P_TO_UINT16(&(((name *)0/
+STACK_TO_CURSOR ../btree/bt_recno.c /^#define STACK_TO_CURSOR(cp) { \\$/
+STAILQ_CONCAT ../dbinc/queue.h /^#define STAILQ_CONCAT(head1, head2) do { \\$/
+STAILQ_EMPTY ../dbinc/queue.h /^#define STAILQ_EMPTY(head) ((head)->stqh_first == /
+STAILQ_ENTRY ../dbinc/queue.h /^#define STAILQ_ENTRY(type) \\$/
+STAILQ_FIRST ../dbinc/queue.h /^#define STAILQ_FIRST(head) ((head)->stqh_first)$/
+STAILQ_FOREACH ../dbinc/queue.h /^#define STAILQ_FOREACH(var, head, field) \\$/
+STAILQ_HEAD ../dbinc/queue.h /^#define STAILQ_HEAD(name, type) \\$/
+STAILQ_HEAD_INITIALIZER ../dbinc/queue.h /^#define STAILQ_HEAD_INITIALIZER(head) \\$/
+STAILQ_INIT ../dbinc/queue.h /^#define STAILQ_INIT(head) do { \\$/
+STAILQ_INSERT_AFTER ../dbinc/queue.h /^#define STAILQ_INSERT_AFTER(head, tqelm, elm, fiel/
+STAILQ_INSERT_HEAD ../dbinc/queue.h /^#define STAILQ_INSERT_HEAD(head, elm, field) do { /
+STAILQ_INSERT_TAIL ../dbinc/queue.h /^#define STAILQ_INSERT_TAIL(head, elm, field) do { /
+STAILQ_LAST ../dbinc/queue.h /^#define STAILQ_LAST(head, type, field) \\$/
+STAILQ_NEXT ../dbinc/queue.h /^#define STAILQ_NEXT(elm, field) ((elm)->field.stqe/
+STAILQ_REMOVE ../dbinc/queue.h /^#define STAILQ_REMOVE(head, elm, type, field) do {/
+STAILQ_REMOVE_HEAD ../dbinc/queue.h /^#define STAILQ_REMOVE_HEAD(head, field) do { \\$/
+STAILQ_REMOVE_HEAD_UNTIL ../dbinc/queue.h /^#define STAILQ_REMOVE_HEAD_UNTIL(head, elm, field)/
+STDERR_FILENO ../common/db_err.c 335
+STD_LOCKING ../dbinc/db_int.in /^#define STD_LOCKING(dbc) \\$/
+STK_CLRDBC ../dbinc/btree.h 75
+STK_NOLOCK ../dbinc/btree.h 76
+ST_DUPOK ../dbinc/db_verify.h 51
+ST_DUPSET ../dbinc/db_verify.h 52
+ST_DUPSORT ../dbinc/db_verify.h 53
+ST_IS_RECNO ../dbinc/db_verify.h 54
+ST_OVFL_LEAF ../dbinc/db_verify.h 55
+ST_RECNUM ../dbinc/db_verify.h 56
+ST_RELEN ../dbinc/db_verify.h 57
+ST_TOPLEVEL ../dbinc/db_verify.h 58
+SWAP ../crypto/rijndael/rijndael-alg-fst.c /^#define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrot/
+SWAP16 ../dbinc/db_swap.h /^#define SWAP16(p) { \\$/
+SWAP32 ../dbinc/db_swap.h /^#define SWAP32(p) { \\$/
+SWIG_JavaExceptionCodes ../libdb_java/db_java_wrap.c 30
+SWIG_JavaThrowException ../libdb_java/db_java_wrap.c /^void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_Ja/
+SWIG_NOINCLUDE ../libdb_java/db_java_wrap.c 75
+S_APPEND ../dbinc/btree.h 103
+S_DELETE ../dbinc/btree.h 117
+S_DELNO ../dbinc/btree.h 104
+S_DUPFIRST ../dbinc/btree.h 105
+S_DUPLAST ../dbinc/btree.h 106
+S_EXACT ../dbinc/btree.h 107
+S_FIND ../dbinc/btree.h 118
+S_FIND_WR ../dbinc/btree.h 119
+S_INSERT ../dbinc/btree.h 120
+S_IRGRP ../os/os_oflags.c 83
+S_IROTH ../os/os_oflags.c 89
+S_IRUSR ../os/os_oflags.c 77
S_ISDIR ../os/os_stat.c /^#define S_ISDIR(m) (_S_IFDIR & (m))$/
-S_IWGRP ../os/os_oflags.c /^#define S_IWGRP 0 \/* W for group *\/$/
-S_IWOTH ../os/os_oflags.c /^#define S_IWOTH 0 \/* W for other *\/$/
-S_IWUSR ../os/os_oflags.c /^#define S_IWUSR S_IWRITE \/* W for owner *\/$/
-S_KEYFIRST ../include/btree.h /^#define S_KEYFIRST (S_WRITE | S_DUPFIRST | S_PAST_/
-S_KEYLAST ../include/btree.h /^#define S_KEYLAST (S_WRITE | S_DUPLAST | S_PAST_EO/
-S_PARENT ../include/btree.h /^#define S_PARENT 0x00800 \/* Lock page pair. *\/$/
-S_PAST_EOF ../include/btree.h /^#define S_PAST_EOF 0x02000 \/* If doing insert se/
-S_READ ../include/btree.h /^#define S_READ 0x00001 \/* Read locks. *\/$/
-S_STACK ../include/btree.h /^#define S_STACK 0x01000 \/* Need a complete stac/
-S_STK_ONLY ../include/btree.h /^#define S_STK_ONLY 0x04000 \/* Just return info i/
-S_WRITE ../include/btree.h /^#define S_WRITE 0x00002 \/* Write locks. *\/$/
-S_WRPAIR ../include/btree.h /^#define S_WRPAIR (S_WRITE | S_DUPLAST | S_PAST_EOF/
-TAILQ_ENTRY ../include/queue.h /^#define TAILQ_ENTRY(type) \\$/
-TAILQ_FIRST ../include/queue.h /^#define TAILQ_FIRST(head) ((head)->tqh_first)$/
-TAILQ_HEAD ../include/queue.h /^#define TAILQ_HEAD(name, type) \\$/
-TAILQ_INIT ../include/queue.h /^#define TAILQ_INIT(head) do { \\$/
-TAILQ_INSERT_AFTER ../include/queue.h /^#define TAILQ_INSERT_AFTER(head, listelm, elm, fie/
-TAILQ_INSERT_BEFORE ../include/queue.h /^#define TAILQ_INSERT_BEFORE(listelm, elm, field) d/
-TAILQ_INSERT_HEAD ../include/queue.h /^#define TAILQ_INSERT_HEAD(head, elm, field) do { /
-TAILQ_INSERT_TAIL ../include/queue.h /^#define TAILQ_INSERT_TAIL(head, elm, field) do { /
-TAILQ_NEXT ../include/queue.h /^#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_/
-TAILQ_REINSERT_HEAD ../include/queue.h /^#define TAILQ_REINSERT_HEAD(head, elm, field) do {/
-TAILQ_REMOVE ../include/queue.h /^#define TAILQ_REMOVE(head, elm, field) do { \\$/
+S_IWGRP ../os/os_oflags.c 86
+S_IWOTH ../os/os_oflags.c 92
+S_IWUSR ../os/os_oflags.c 80
+S_KEYFIRST ../dbinc/btree.h 121
+S_KEYLAST ../dbinc/btree.h 122
+S_PARENT ../dbinc/btree.h 108
+S_PAST_EOF ../dbinc/btree.h 110
+S_READ ../dbinc/btree.h 100
+S_STACK ../dbinc/btree.h 109
+S_STK_ONLY ../dbinc/btree.h 115
+S_WRITE ../dbinc/btree.h 101
+S_WRPAIR ../dbinc/btree.h 123
+TAILQ_CONCAT ../dbinc/queue.h /^#define TAILQ_CONCAT(head1, head2, field) do { /
+TAILQ_EMPTY ../dbinc/queue.h /^#define TAILQ_EMPTY(head) ((head)->tqh_first == NU/
+TAILQ_ENTRY ../dbinc/queue.h /^#define TAILQ_ENTRY(type) \\$/
+TAILQ_FIRST ../dbinc/queue.h /^#define TAILQ_FIRST(head) ((head)->tqh_first)$/
+TAILQ_FOREACH ../dbinc/queue.h /^#define TAILQ_FOREACH(var, head, field) \\$/
+TAILQ_FOREACH_REVERSE ../dbinc/queue.h /^#define TAILQ_FOREACH_REVERSE(var, head, headname,/
+TAILQ_HEAD ../dbinc/queue.h /^#define TAILQ_HEAD(name, type) \\$/
+TAILQ_HEAD_INITIALIZER ../dbinc/queue.h /^#define TAILQ_HEAD_INITIALIZER(head) \\$/
+TAILQ_INIT ../dbinc/queue.h /^#define TAILQ_INIT(head) do { \\$/
+TAILQ_INSERT_AFTER ../dbinc/queue.h /^#define TAILQ_INSERT_AFTER(head, listelm, elm, fie/
+TAILQ_INSERT_BEFORE ../dbinc/queue.h /^#define TAILQ_INSERT_BEFORE(listelm, elm, field) d/
+TAILQ_INSERT_HEAD ../dbinc/queue.h /^#define TAILQ_INSERT_HEAD(head, elm, field) do { /
+TAILQ_INSERT_TAIL ../dbinc/queue.h /^#define TAILQ_INSERT_TAIL(head, elm, field) do { /
+TAILQ_LAST ../dbinc/queue.h /^#define TAILQ_LAST(head, headname) \\$/
+TAILQ_NEXT ../dbinc/queue.h /^#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_n/
+TAILQ_PREV ../dbinc/queue.h /^#define TAILQ_PREV(elm, headname, field) \\$/
+TAILQ_REMOVE ../dbinc/queue.h /^#define TAILQ_REMOVE(head, elm, field) do { \\$/
+TCLDB_SENDITEMS ../tcl/tcl_db_pkg.c 3089
+TEMPERING_MASK_B ../crypto/mersenne/mt19937db.c 45
+TEMPERING_MASK_C ../crypto/mersenne/mt19937db.c 46
+TEMPERING_SHIFT_L ../crypto/mersenne/mt19937db.c /^#define TEMPERING_SHIFT_L(y) (y >> 18)$/
+TEMPERING_SHIFT_S ../crypto/mersenne/mt19937db.c /^#define TEMPERING_SHIFT_S(y) (y << 7)$/
+TEMPERING_SHIFT_T ../crypto/mersenne/mt19937db.c /^#define TEMPERING_SHIFT_T(y) (y << 15)$/
+TEMPERING_SHIFT_U ../crypto/mersenne/mt19937db.c /^#define TEMPERING_SHIFT_U(y) (y >> 11)$/
TLOOP ../clib/memmove.c /^#define TLOOP(s) if (t) TLOOP1(s)$/
TLOOP1 ../clib/memmove.c /^#define TLOOP1(s) do { s; } while (--t)$/
-TMASYNC ../include/xa.h /^#define TMASYNC 0x80000000L \/* perform routine a/
-TMENDRSCAN ../include/xa.h /^#define TMENDRSCAN 0x00800000L \/* end a recovery /
-TMER_INVAL ../include/xa.h /^#define TMER_INVAL -2 \/* invalid arguments were /
-TMER_PROTO ../include/xa.h /^#define TMER_PROTO -3 \/* routine invoked in an i/
-TMER_TMERR ../include/xa.h /^#define TMER_TMERR -1 \/* an error occurred in th/
-TMFAIL ../include/xa.h /^#define TMFAIL 0x20000000L \/* dissociates caller/
-TMJOIN ../include/xa.h /^#define TMJOIN 0x00200000L \/* caller is joining /
-TMMIGRATE ../include/xa.h /^#define TMMIGRATE 0x00100000L \/* caller intends t/
-TMMULTIPLE ../include/xa.h /^#define TMMULTIPLE 0x00400000L \/* wait for any as/
-TMNOFLAGS ../include/xa.h /^#define TMNOFLAGS 0x00000000L \/* no resource mana/
-TMNOMIGRATE ../include/xa.h /^#define TMNOMIGRATE 0x00000002L \/* resource manag/
-TMNOWAIT ../include/xa.h /^#define TMNOWAIT 0x10000000L \/* return if blockin/
-TMONEPHASE ../include/xa.h /^#define TMONEPHASE 0x40000000L \/* caller is using/
-TMREGISTER ../include/xa.h /^#define TMREGISTER 0x00000001L \/* resource manage/
-TMRESUME ../include/xa.h /^#define TMRESUME 0x08000000L \/* caller is resumin/
-TMSTARTRSCAN ../include/xa.h /^#define TMSTARTRSCAN 0x01000000L \/* start a recov/
-TMSUCCESS ../include/xa.h /^#define TMSUCCESS 0x04000000L \/* dissociate calle/
-TMSUSPEND ../include/xa.h /^#define TMSUSPEND 0x02000000L \/* caller is suspen/
-TMUSEASYNC ../include/xa.h /^#define TMUSEASYNC 0x00000004L \/* resource manage/
-TM_JOIN ../include/xa.h /^#define TM_JOIN 2 \/* caller is joining existing/
-TM_OK ../include/xa.h /^#define TM_OK 0 \/* normal execution *\/$/
-TM_RESUME ../include/xa.h /^#define TM_RESUME 1 \/* caller is resuming associ/
-TXNLIST_FLAG_CLOSED ../include/db_dispatch.h /^#define TXNLIST_FLAG_CLOSED 0x2$/
-TXNLIST_FLAG_DELETED ../include/db_dispatch.h /^#define TXNLIST_FLAG_DELETED 0x1$/
-TXNLIST_INVALID_ID ../include/db_dispatch.h /^#define TXNLIST_INVALID_ID 0xffffffff$/
-TXNLIST_NEW ../include/db_dispatch.h /^#define TXNLIST_NEW 0x1$/
-TXN_ABORT ../include/txn.h /^#define TXN_ABORT 3$/
-TXN_ABORTED ../include/txn.h /^#define TXN_ABORTED 2$/
+TMASYNC ../dbinc/xa.h 90
+TMENDRSCAN ../dbinc/xa.h 104
+TMER_INVAL ../dbinc/xa.h 122
+TMER_PROTO ../dbinc/xa.h 123
+TMER_TMERR ../dbinc/xa.h 120
+TMFAIL ../dbinc/xa.h 93
+TMJOIN ../dbinc/xa.h 107
+TMMIGRATE ../dbinc/xa.h 109
+TMMULTIPLE ../dbinc/xa.h 105
+TMNOFLAGS ../dbinc/xa.h 78
+TMNOMIGRATE ../dbinc/xa.h 82
+TMNOWAIT ../dbinc/xa.h 95
+TMONEPHASE ../dbinc/xa.h 91
+TMREGISTER ../dbinc/xa.h 80
+TMRESUME ../dbinc/xa.h 97
+TMSTARTRSCAN ../dbinc/xa.h 103
+TMSUCCESS ../dbinc/xa.h 99
+TMSUSPEND ../dbinc/xa.h 101
+TMUSEASYNC ../dbinc/xa.h 84
+TM_JOIN ../dbinc/xa.h 115
+TM_OK ../dbinc/xa.h 119
+TM_RESUME ../dbinc/xa.h 117
+TRACEBUF ../dbinc/queue.h 193
+TRASHIT ../dbinc/queue.h /^#define TRASHIT(x) do {(x) = (void *)-1;} while (0/
+TRUE ../crypto/rijndael/rijndael-api-fst.h 53
+TXN2JDBENV ../libdb_java/db_java_wrap.c 387
+TXNLIST_NEW ../dbinc/db_dispatch.h 101
+TXN_ABORT ../dbinc/txn.h 145
+TXN_ABORTED ../dbinc/txn.h 47
TXN_BUBBLE ../db/db_dispatch.c /^#define TXN_BUBBLE(AP, MAX) { \\$/
-TXN_CHILDCOMMIT ../include/txn.h /^#define TXN_CHILDCOMMIT 0x01 \/* Transaction that/
-TXN_COLLECTED ../include/txn.h /^#define TXN_COLLECTED 0x1$/
-TXN_COMMIT ../include/txn.h /^#define TXN_COMMIT 1$/
-TXN_COMMITTED ../include/txn.h /^#define TXN_COMMITTED 4$/
-TXN_DETAIL ../include/txn.h /^} TXN_DETAIL;$/
-TXN_DIRTY_READ ../include/txn.h /^#define TXN_DIRTY_READ 0x02 \/* Transaction does /
-TXN_INVALID ../include/txn.h /^#define TXN_INVALID 0xffffffff \/* Maximum number /
-TXN_INVALID_ID ../include/txn.h /^#define TXN_INVALID_ID 0 \/* Invalid transaction /
-TXN_MAINT_SIZE ../include/txn.h /^#define TXN_MAINT_SIZE (sizeof(roff_t) * DB_MAX_HA/
-TXN_MALLOC ../include/txn.h /^#define TXN_MALLOC 0x04 \/* Structure allocated b/
-TXN_MINIMUM ../include/txn.h /^#define TXN_MINIMUM 0x80000000$/
-TXN_NOSYNC ../include/txn.h /^#define TXN_NOSYNC 0x08 \/* Do not sync on prepar/
-TXN_NOTFOUND ../include/txn.h /^#define TXN_NOTFOUND 4$/
-TXN_NOWAIT ../include/txn.h /^#define TXN_NOWAIT 0x10 \/* Do not wait on locks./
-TXN_OK ../include/txn.h /^#define TXN_OK 0$/
-TXN_ON ../include/db_int.in /^#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL/
-TXN_PREPARE ../include/txn.h /^#define TXN_PREPARE 2$/
-TXN_PREPARED ../include/txn.h /^#define TXN_PREPARED 3$/
-TXN_RESTORED ../include/txn.h /^#define TXN_RESTORED 0x2$/
-TXN_RUNNING ../include/txn.h /^#define TXN_RUNNING 1$/
-TXN_SYNC ../include/txn.h /^#define TXN_SYNC 0x20 \/* Sync on prepare and com/
-TXN_XA_ABORTED ../include/txn.h /^#define TXN_XA_ABORTED 1$/
-TXN_XA_DEADLOCKED ../include/txn.h /^#define TXN_XA_DEADLOCKED 2$/
-TXN_XA_ENDED ../include/txn.h /^#define TXN_XA_ENDED 3$/
-TXN_XA_PREPARED ../include/txn.h /^#define TXN_XA_PREPARED 4$/
-TXN_XA_STARTED ../include/txn.h /^#define TXN_XA_STARTED 5$/
-TXN_XA_SUSPENDED ../include/txn.h /^#define TXN_XA_SUSPENDED 6$/
-TYPE ../include/db_page.h /^#define TYPE(p) (((PAGE *)p)->type)$/
-TYPE_ERR_PRINT ../include/db_verify.h /^#define TYPE_ERR_PRINT(dbenv, func, pgno, ptype) /
-UINT16_T_MAX ../include/db_int.in /^#define UINT16_T_MAX 0xffff \/* Maximum 16 bit/
-UINT32_T_MAX ../include/db_int.in /^#define UINT32_T_MAX 0xffffffff \/* Maximum 32 bit/
-UMRW_SET ../include/debug.h /^#define UMRW_SET(v) (v) = 0$/
-UNLOCKREGION ../include/lock.h /^#define UNLOCKREGION(dbenv, lt) R_UNLOCK((dbenv),/
-UPREFIX ../clib/strerror.c /^#define UPREFIX "Unknown error: "$/
-USEC_PER_MS ../include/db_int.in /^#define USEC_PER_MS 1000 \/* Microseconds in a mi/
-VRFY_CHILDINFO ../include/db_int.in /^struct __vrfy_childinfo; typedef struct __vrfy_chi/
-VRFY_DBINFO ../include/db_int.in /^struct __vrfy_dbinfo; typedef struct __vrfy_dbin/
-VRFY_DUPS_UNSORTED ../include/db_verify.h /^#define VRFY_DUPS_UNSORTED 0x0001 \/* Have to flag/
-VRFY_HAS_DUPS ../include/db_verify.h /^#define VRFY_HAS_DUPS 0x0002$/
-VRFY_HAS_DUPSORT ../include/db_verify.h /^#define VRFY_HAS_DUPSORT 0x0004 \/* Has the flag s/
-VRFY_HAS_RECNUMS ../include/db_verify.h /^#define VRFY_HAS_RECNUMS 0x0010$/
-VRFY_HAS_SUBDBS ../include/db_verify.h /^#define VRFY_HAS_SUBDBS 0x0008$/
-VRFY_INCOMPLETE ../include/db_verify.h /^#define VRFY_INCOMPLETE 0x0020 \/* Meta or item o/
-VRFY_IS_ALLZEROES ../include/db_verify.h /^#define VRFY_IS_ALLZEROES 0x0040 \/* Hash page we /
-VRFY_IS_FIXEDLEN ../include/db_verify.h /^#define VRFY_IS_FIXEDLEN 0x0080$/
-VRFY_IS_RECNO ../include/db_verify.h /^#define VRFY_IS_RECNO 0x0100$/
-VRFY_IS_RRECNO ../include/db_verify.h /^#define VRFY_IS_RRECNO 0x0200$/
-VRFY_OVFL_LEAFSEEN ../include/db_verify.h /^#define VRFY_OVFL_LEAFSEEN 0x0400$/
-VRFY_PAGEINFO ../include/db_int.in /^struct __vrfy_pageinfo; typedef struct __vrfy_page/
-V_DUPLICATE ../include/db_verify.h /^#define V_DUPLICATE 1 \/* off-page dup metadata */
-V_OVERFLOW ../include/db_verify.h /^#define V_OVERFLOW 2 \/* overflow page *\/$/
-V_RECNO ../include/db_verify.h /^#define V_RECNO 3 \/* btree internal or leaf pag/
-WORDS_BIGENDIAN ../common/db_byteorder.c /^#define WORDS_BIGENDIAN 1$/
-WRAPPED_CLASS ../include/cxx_int.h /^WRAPPED_CLASS(DbMpoolFile, DbMpoolFileImp, DB_MPOO/
-XAER_ASYNC ../include/xa.h /^#define XAER_ASYNC -2 \/* asynchronous operation /
-XAER_DUPID ../include/xa.h /^#define XAER_DUPID -8 \/* the XID already exists /
-XAER_INVAL ../include/xa.h /^#define XAER_INVAL -5 \/* invalid arguments were /
-XAER_NOTA ../include/xa.h /^#define XAER_NOTA -4 \/* the XID is not valid *\//
-XAER_OUTSIDE ../include/xa.h /^#define XAER_OUTSIDE -9 \/* resource manager doin/
-XAER_PROTO ../include/xa.h /^#define XAER_PROTO -6 \/* routine invoked in an i/
-XAER_RMERR ../include/xa.h /^#define XAER_RMERR -3 \/* a resource manager erro/
-XAER_RMFAIL ../include/xa.h /^#define XAER_RMFAIL -7 \/* resource manager unava/
-XA_FLAGS ../xa/xa.c /^#define XA_FLAGS \\$/
-XA_H ../include/xa.h /^#define XA_H$/
-XA_HEURCOM ../include/xa.h /^#define XA_HEURCOM 7 \/* the transaction branch h/
-XA_HEURHAZ ../include/xa.h /^#define XA_HEURHAZ 8 \/* the transaction branch m/
-XA_HEURMIX ../include/xa.h /^#define XA_HEURMIX 5 \/* the transaction branch h/
-XA_HEURRB ../include/xa.h /^#define XA_HEURRB 6 \/* the transaction branch ha/
-XA_METHODS ../xa/xa_db.c /^} XA_METHODS;$/
-XA_NOMIGRATE ../include/xa.h /^#define XA_NOMIGRATE 9 \/* resumption must occur /
-XA_OK ../include/xa.h /^#define XA_OK 0 \/* normal execution *\/$/
-XA_RBBASE ../include/xa.h /^#define XA_RBBASE 100 \/* The inclusive lower bou/
-XA_RBCOMMFAIL ../include/xa.h /^#define XA_RBCOMMFAIL XA_RBBASE+1 \/* The rollback/
-XA_RBDEADLOCK ../include/xa.h /^#define XA_RBDEADLOCK XA_RBBASE+2 \/* A deadlock w/
-XA_RBEND ../include/xa.h /^#define XA_RBEND XA_RBTRANSIENT \/* The inclusive /
-XA_RBINTEGRITY ../include/xa.h /^#define XA_RBINTEGRITY XA_RBBASE+3 \/* A condition/
-XA_RBOTHER ../include/xa.h /^#define XA_RBOTHER XA_RBBASE+4 \/* The resource ma/
-XA_RBPROTO ../include/xa.h /^#define XA_RBPROTO XA_RBBASE+5 \/* A protocol erro/
-XA_RBROLLBACK ../include/xa.h /^#define XA_RBROLLBACK XA_RBBASE \/* The rollback w/
-XA_RBTIMEOUT ../include/xa.h /^#define XA_RBTIMEOUT XA_RBBASE+6 \/* A transaction/
-XA_RBTRANSIENT ../include/xa.h /^#define XA_RBTRANSIENT XA_RBBASE+7 \/* May retry t/
-XA_RDONLY ../include/xa.h /^#define XA_RDONLY 3 \/* the transaction branch wa/
-XA_RETRY ../include/xa.h /^#define XA_RETRY 4 \/* routine returned with no e/
-XID ../include/xa.h /^typedef struct xid_t XID;$/
-XIDDATASIZE ../include/xa.h /^#define XIDDATASIZE 128 \/* size in bytes *\/$/
-ZERO_LSN ../include/db_int.in /^#define ZERO_LSN(LSN) do { \\$/
-_CXX_COMMON_H_ ../include/cxx_common.h /^#define _CXX_COMMON_H_$/
-_CXX_EXCEPT_H_ ../include/cxx_except.h /^#define _CXX_EXCEPT_H_$/
-_CXX_INT_H_ ../include/cxx_int.h /^#define _CXX_INT_H_$/
-_DB_185_H_ ../include/db_185.in /^#define _DB_185_H_$/
-_DB_AM_H_ ../include/db_am.h /^#define _DB_AM_H_$/
-_DB_CXX_H_ ../include/db_cxx.h /^#define _DB_CXX_H_$/
-_DB_DISPATCH_H_ ../include/db_dispatch.h /^#define _DB_DISPATCH_H_$/
-_DB_H_ ../include/db.in /^#define _DB_H_$/
-_DB_INTERNAL_H_ ../include/db_int.in /^#define _DB_INTERNAL_H_$/
-_DB_JOIN_H_ ../include/db_join.h /^#define _DB_JOIN_H_$/
-_DB_PAGE_H_ ../include/db_page.h /^#define _DB_PAGE_H_$/
-_DB_SERVER_INT_H_ ../include/db_server_int.h /^#define _DB_SERVER_INT_H_$/
-_DB_SWAP_H_ ../include/db_swap.h /^#define _DB_SWAP_H_$/
-_DB_UPGRADE_H_ ../include/db_upgrade.h /^#define _DB_UPGRADE_H_$/
-_DB_VERIFY_H_ ../include/db_verify.h /^#define _DB_VERIFY_H_$/
+TXN_CHILDCOMMIT ../dbinc/db.in 833
+TXN_COMMIT ../dbinc/txn.h 143
+TXN_COMMITTED ../dbinc/txn.h 49
+TXN_COMPENSATE ../dbinc/db.in 834
+TXN_DIRTY_READ ../dbinc/db.in 835
+TXN_DTL_COLLECTED ../dbinc/txn.h 51
+TXN_DTL_RESTORED ../dbinc/txn.h 52
+TXN_EVENT ../txn/txn_util.c 27
+TXN_EVENT_T ../dbinc/txn.h 21
+TXN_EXPECTED ../dbinc/txn.h 148
+TXN_IGNORE ../dbinc/txn.h 147
+TXN_INVALID ../dbinc/txn.h 32
+TXN_IN_RECOVERY ../dbinc/txn.h 115
+TXN_LOCKTIMEOUT ../dbinc/db.in 836
+TXN_MAINT_SIZE ../dbinc/txn.h 120
+TXN_MALLOC ../dbinc/db.in 837
+TXN_MAXIMUM ../dbinc/txn.h 31
+TXN_MINIMUM ../dbinc/txn.h 30
+TXN_NOSYNC ../dbinc/db.in 838
+TXN_NOTFOUND ../dbinc/txn.h 146
+TXN_NOWAIT ../dbinc/db.in 839
+TXN_OK ../dbinc/txn.h 142
+TXN_ON ../dbinc/db_int.in /^#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL/
+TXN_PREPARE ../dbinc/txn.h 144
+TXN_PREPARED ../dbinc/txn.h 48
+TXN_RESTORED ../dbinc/db.in 840
+TXN_RUNNING ../dbinc/txn.h 46
+TXN_SYNC ../dbinc/db.in 841
+TXN_UNEXPECTED ../dbinc/txn.h 149
+TXN_XA_ABORTED ../dbinc/txn.h 57
+TXN_XA_DEADLOCKED ../dbinc/txn.h 58
+TXN_XA_ENDED ../dbinc/txn.h 59
+TXN_XA_PREPARED ../dbinc/txn.h 60
+TXN_XA_STARTED ../dbinc/txn.h 61
+TXN_XA_SUSPENDED ../dbinc/txn.h 62
+TYPE ../dbinc/db_page.h /^#define TYPE(p) (((PAGE *)p)->type)$/
+TYPE_ERR_PRINT ../dbinc/db_verify.h /^#define TYPE_ERR_PRINT(dbenv, func, pgno, ptype) /
+T_RESTORED ../db/db_dispatch.c /^#define T_RESTORED(txn) ((txn) != NULL && F_/
+UINT16_T_MAX ../dbinc/db_int.in 38
+UINT32_T_MAX ../dbinc/db_int.in 39
+UMRW_SET ../dbinc/debug.h /^#define UMRW_SET(v) (v) = 0$/
+UNLOCKREGION ../dbinc/lock.h /^#define UNLOCKREGION(dbenv, lt) R_UNLOCK((dbenv),/
+UPPER_MASK ../crypto/mersenne/mt19937db.c 41
+UPREFIX ../clib/strerror.c 57
+USEC_PER_MS ../dbinc/db_int.in 45
+VRFY_CHILDINFO ../dbinc/db_int.in 421
+VRFY_DBINFO ../dbinc/db_int.in 422
+VRFY_DUPS_UNSORTED ../dbinc/db_verify.h 181
+VRFY_HAS_DUPS ../dbinc/db_verify.h 182
+VRFY_HAS_DUPSORT ../dbinc/db_verify.h 183
+VRFY_HAS_RECNUMS ../dbinc/db_verify.h 185
+VRFY_HAS_SUBDBS ../dbinc/db_verify.h 184
+VRFY_INCOMPLETE ../dbinc/db_verify.h 186
+VRFY_IS_ALLZEROES ../dbinc/db_verify.h 187
+VRFY_IS_FIXEDLEN ../dbinc/db_verify.h 188
+VRFY_IS_RECNO ../dbinc/db_verify.h 189
+VRFY_IS_RRECNO ../dbinc/db_verify.h 190
+VRFY_LEAFCHAIN_BROKEN ../dbinc/db_verify.h 137
+VRFY_OVFL_LEAFSEEN ../dbinc/db_verify.h 191
+VRFY_PAGEINFO ../dbinc/db_int.in 423
+VRFY_QMETA_SET ../dbinc/db_verify.h 138
+V_DUPLICATE ../dbinc/db_verify.h 202
+V_OVERFLOW ../dbinc/db_verify.h 203
+V_RECNO ../dbinc/db_verify.h 204
+WRAPPED_CLASS ../dbinc/cxx_int.h /^#define WRAPPED_CLASS(_WRAPPER_CLASS, _IMP_CLASS, /
+XAER_ASYNC ../dbinc/xa.h 164
+XAER_DUPID ../dbinc/xa.h 173
+XAER_INVAL ../dbinc/xa.h 169
+XAER_NOTA ../dbinc/xa.h 168
+XAER_OUTSIDE ../dbinc/xa.h 174
+XAER_PROTO ../dbinc/xa.h 170
+XAER_RMERR ../dbinc/xa.h 166
+XAER_RMFAIL ../dbinc/xa.h 172
+XA_FLAGS ../xa/xa.c 176
+XA_H ../dbinc/xa.h 15
+XA_HEURCOM ../dbinc/xa.h 152
+XA_HEURHAZ ../dbinc/xa.h 150
+XA_HEURMIX ../dbinc/xa.h 156
+XA_HEURRB ../dbinc/xa.h 154
+XA_NOMIGRATE ../dbinc/xa.h 148
+XA_OK ../dbinc/xa.h 163
+XA_RBBASE ../dbinc/xa.h 129
+XA_RBCOMMFAIL ../dbinc/xa.h 133
+XA_RBDEADLOCK ../dbinc/xa.h 135
+XA_RBEND ../dbinc/xa.h 146
+XA_RBINTEGRITY ../dbinc/xa.h 136
+XA_RBOTHER ../dbinc/xa.h 139
+XA_RBPROTO ../dbinc/xa.h 142
+XA_RBROLLBACK ../dbinc/xa.h 131
+XA_RBTIMEOUT ../dbinc/xa.h 144
+XA_RBTRANSIENT ../dbinc/xa.h 145
+XA_RDONLY ../dbinc/xa.h 161
+XA_RETRY ../dbinc/xa.h 159
+XID ../dbinc/xa.h 30
+XIDDATASIZE ../dbinc/xa.h 20
+ZEROPG_ERR_PRINT ../dbinc/db_verify.h /^#define ZEROPG_ERR_PRINT(dbenv, pgno, str) do { /
+ZERO_LSN ../dbinc/db_int.in /^#define ZERO_LSN(LSN) do { \\$/
+ZF_LARGE_WRITE ../os/os_rw.c 247
+_CXX_INT_H_ ../dbinc/cxx_int.h 11
+_CopyObjBytes ../tcl/tcl_internal.c /^_CopyObjBytes(interp, obj, newp, sizep, freep)$/
+_DB_185_H_ ../dbinc/db_185.in 39
+_DB_AM_H_ ../dbinc/db_am.h 10
+_DB_BTREE_H_ ../dbinc/btree.h 45
+_DB_CRYPTO_H_ ../dbinc/crypto.h 11
+_DB_CXX_H_ ../dbinc/db_cxx.in 11
+_DB_DEBUG_H_ ../dbinc/debug.h 11
+_DB_DISPATCH_H_ ../dbinc/db_dispatch.h 39
+_DB_HASH_H_ ../dbinc/hash.h 46
+_DB_HMAC_H_ ../dbinc/hmac.h 11
+_DB_H_ ../dbinc/db.in 22
+_DB_INTERNAL_H_ ../dbinc/db_int.in 11
+_DB_JOIN_H_ ../dbinc/db_join.h 11
+_DB_LOCK_H_ ../dbinc/lock.h 11
+_DB_MP_H_ ../dbinc/mp.h 11
+_DB_MUTEX_H_ ../dbinc/mutex.h 11
+_DB_OS_H_ ../dbinc/os.h 11
+_DB_PAGE_H_ ../dbinc/db_page.h 11
+_DB_QAM_H_ ../dbinc/qam.h 11
+_DB_QUEUE_H_ ../dbinc/queue.h 39
+_DB_REGION_H_ ../dbinc/region.h 11
+_DB_SERVER_INT_H_ ../dbinc/db_server_int.h 11
+_DB_SHASH_H_ ../dbinc/db_shash.h 11
+_DB_SWAP_H_ ../dbinc/db_swap.h 39
+_DB_TCL_DB_H_ ../dbinc/tcl_db.h 11
+_DB_UPGRADE_H_ ../dbinc/db_upgrade.h 11
+_DB_VERIFY_H_ ../dbinc/db_verify.h 11
+_DbInfoDelete ../tcl/tcl_db.c /^_DbInfoDelete(interp, dbip)$/
_DeleteInfo ../tcl/tcl_internal.c /^_DeleteInfo(p)$/
_EnvInfoDelete ../tcl/tcl_env.c /^_EnvInfoDelete(interp, envip)$/
_ErrorFunc ../tcl/tcl_internal.c /^_ErrorFunc(pfx, msg)$/
_ErrorSetup ../tcl/tcl_internal.c /^_ErrorSetup(interp, ret, errmsg)$/
+_FOP_H_ ../dbinc/fop.h 11
+_GetFlagsList ../tcl/tcl_internal.c /^_GetFlagsList(interp, flags, func)$/
_GetGlobPrefix ../tcl/tcl_internal.c /^_GetGlobPrefix(pattern, prefix)$/
_GetLsn ../tcl/tcl_internal.c /^_GetLsn(interp, obj, lsn)$/
_GetThisLock ../tcl/tcl_lock.c /^_GetThisLock(interp, envp, lockid, flag, objp, mod/
-_Included_com_sleepycat_db_Db ../libdb_java/com_sleepycat_db_Db.h /^#define _Included_com_sleepycat_db_Db$/
-_Included_com_sleepycat_db_DbEnv ../libdb_java/com_sleepycat_db_DbEnv.h /^#define _Included_com_sleepycat_db_DbEnv$/
-_Included_com_sleepycat_db_DbLock ../libdb_java/com_sleepycat_db_DbLock.h /^#define _Included_com_sleepycat_db_DbLock$/
-_Included_com_sleepycat_db_DbLsn ../libdb_java/com_sleepycat_db_DbLsn.h /^#define _Included_com_sleepycat_db_DbLsn$/
-_Included_com_sleepycat_db_DbTxn ../libdb_java/com_sleepycat_db_DbTxn.h /^#define _Included_com_sleepycat_db_DbTxn$/
-_Included_com_sleepycat_db_DbUtil ../libdb_java/com_sleepycat_db_DbUtil.h /^#define _Included_com_sleepycat_db_DbUtil$/
-_Included_com_sleepycat_db_Dbc ../libdb_java/com_sleepycat_db_Dbc.h /^#define _Included_com_sleepycat_db_Dbc$/
-_Included_com_sleepycat_db_Dbt ../libdb_java/com_sleepycat_db_Dbt.h /^#define _Included_com_sleepycat_db_Dbt$/
-_JAVA_INFO_H_ ../libdb_java/java_info.h /^#define _JAVA_INFO_H_$/
-_JAVA_LOCKED_H_ ../libdb_java/java_locked.h /^#define _JAVA_LOCKED_H_$/
-_JAVA_UTIL_H_ ../libdb_java/java_util.h /^#define _JAVA_UTIL_H_$/
-_LOG_H_ ../include/log.h /^#define _LOG_H_$/
+_GetUInt32 ../tcl/tcl_internal.c /^_GetUInt32(interp, obj, resp)$/
+_LOG_H_ ../dbinc/log.h 11
_LockMode ../tcl/tcl_lock.c /^_LockMode(interp, obj, mode)$/
_LockPutInfo ../tcl/tcl_lock.c /^_LockPutInfo(interp, op, lock, lockid, objp)$/
-_MUTEX_DATA ../include/tcl_db.h /^} _MUTEX_DATA;$/
-_MUTEX_ENTRY ../include/tcl_db.h /^} _MUTEX_ENTRY;$/
_MpInfoDelete ../tcl/tcl_mp.c /^_MpInfoDelete(interp, mpip)$/
_NameToInfo ../tcl/tcl_internal.c /^_NameToInfo(name)$/
_NameToPtr ../tcl/tcl_internal.c /^_NameToPtr(name)$/
_NewInfo ../tcl/tcl_internal.c /^_NewInfo(interp, anyp, name, type)$/
_PtrToInfo ../tcl/tcl_internal.c /^_PtrToInfo(ptr)$/
-_ReturnSetup ../tcl/tcl_internal.c /^_ReturnSetup(interp, ret, errmsg)$/
-_SYS_SHQUEUE_H_ ../include/shqueue.h /^#define _SYS_SHQUEUE_H_$/
+_REP_H_ ../dbinc/rep.h 9
+_ReturnSetup ../tcl/tcl_internal.c /^_ReturnSetup(interp, ret, ok, errmsg)$/
+_SYS_SHQUEUE_H_ ../dbinc/shqueue.h 11
_Set3DBTList ../tcl/tcl_internal.c /^_Set3DBTList(interp, list, elem1, is1recno, elem2,/
_SetInfoData ../tcl/tcl_internal.c /^_SetInfoData(p, data)$/
_SetListElem ../tcl/tcl_internal.c /^_SetListElem(interp, list, elem1, e1cnt, elem2, e2/
_SetListElemInt ../tcl/tcl_internal.c /^_SetListElemInt(interp, list, elem1, elem2)$/
_SetListRecnoElem ../tcl/tcl_internal.c /^_SetListRecnoElem(interp, list, elem1, elem2, e2si/
_SetMultiList ../tcl/tcl_internal.c /^_SetMultiList(interp, list, key, data, type, flag)/
-_TXN_H_ ../include/txn.h /^#define _TXN_H_$/
+_TXN_H_ ../dbinc/txn.h 11
_TxnInfoDelete ../tcl/tcl_txn.c /^_TxnInfoDelete(interp, txnip)$/
-__BIT_TYPES_DEFINED__ ../include/db.in /^#define __BIT_TYPES_DEFINED__$/
-__DBC_INTERNAL ../include/db_int.in /^#define __DBC_INTERNAL \\$/
-__LPUT ../include/db_am.h /^#define __LPUT(dbc, lock) \\$/
-__P ../include/db.in /^#define __P(protos) protos \/* ANSI C prototypes /
-__P_DUPLICATE ../include/db_page.h /^#define __P_DUPLICATE 1 \/* Duplicate. DEPRECATED /
-__R_UNUSED ../include/db_185.in /^#define __R_UNUSED 2 \/* UNUSED *\/$/
-__TLPUT ../include/db_am.h /^#define __TLPUT(dbc, lock) \\$/
+__BIT_TYPES_DEFINED__ ../dbinc/db.in 62
+__DBC_INTERNAL ../dbinc/db_int.in 297
+__DB_OSTREAMCLASS ../dbinc/db_cxx.in 57
+__DB_OVFL ../env/env_open.c /^#define __DB_OVFL(v, max) \\$/
+__LPUT ../dbinc/db_am.h /^#define __LPUT(dbc, lock) \\$/
+__P ../dbinc/db_185.in /^#define __P(protos) protos \/* ANSI C prototypes */
+__P_DUPLICATE ../dbinc/db_page.h 38
+__RIJNDAEL_ALG_FST_H ../crypto/rijndael/rijndael-alg-fst.h 30
+__RIJNDAEL_API_FST_H ../crypto/rijndael/rijndael-api-fst.h 42
+__R_UNUSED ../dbinc/db_185.in 94
+__SH_LIST_PREV_OFF ../dbinc/shqueue.h /^#define __SH_LIST_PREV_OFF(elm, field) \\$/
+__SH_TAILQ_LAST_OFF ../dbinc/shqueue.h /^#define __SH_TAILQ_LAST_OFF(head) \\$/
+__SH_TAILQ_PREV_OFF ../dbinc/shqueue.h /^#define __SH_TAILQ_PREV_OFF(elm, field) \\$/
+__TLPUT ../dbinc/db_am.h /^#define __TLPUT(dbc, lock) \\$/
__absname ../log/log_archive.c /^__absname(dbenv, pref, name, newnamep)$/
+__aes_adj_size ../crypto/aes_method.c /^__aes_adj_size(len)$/
+__aes_close ../crypto/aes_method.c /^__aes_close(dbenv, data)$/
+__aes_decrypt ../crypto/aes_method.c /^__aes_decrypt(dbenv, aes_data, iv, cipher, cipher_/
+__aes_derivekeys ../crypto/aes_method.c /^__aes_derivekeys(dbenv, db_cipher, passwd, plen)$/
+__aes_encrypt ../crypto/aes_method.c /^__aes_encrypt(dbenv, aes_data, iv, data, data_len)/
+__aes_err ../crypto/aes_method.c /^__aes_err(dbenv, err)$/
+__aes_init ../crypto/aes_method.c /^__aes_init(dbenv, db_cipher)$/
+__aes_setup ../crypto/aes_method.c /^__aes_setup(dbenv, db_cipher)$/
+__attribute__ ../dbinc/debug.h /^#define __attribute__(s)$/
__bam_30_btreemeta ../btree/bt_upgrade.c /^__bam_30_btreemeta(dbp, real_name, buf)$/
__bam_31_btreemeta ../btree/bt_upgrade.c /^__bam_31_btreemeta(dbp, real_name, flags, fhp, h, /
__bam_31_lbtree ../btree/bt_upgrade.c /^__bam_31_lbtree(dbp, real_name, flags, fhp, h, dir/
-__bam_adj_log ../btree/btree_auto.c /^__bam_adj_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_adj_getpgnos ../btree/btree_auto.c /^__bam_adj_getpgnos(dbenv, rec, lsnp, notused1, sum/
+__bam_adj_log ../btree/btree_auto.c /^__bam_adj_log(dbp, txnid, ret_lsnp, flags, pgno, l/
__bam_adj_print ../btree/btree_auto.c /^__bam_adj_print(dbenv, dbtp, lsnp, notused2, notus/
__bam_adj_read ../btree/btree_auto.c /^__bam_adj_read(dbenv, recbuf, argpp)$/
__bam_adj_recover ../btree/bt_rec.c /^__bam_adj_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -1237,7 +1809,6 @@ __bam_c_physdel ../btree/bt_cursor.c /^__bam_c_physdel(dbc)$/
__bam_c_prev ../btree/bt_cursor.c /^__bam_c_prev(dbc)$/
__bam_c_put ../btree/bt_cursor.c /^__bam_c_put(dbc, key, data, flags, pgnop)$/
__bam_c_refresh ../btree/bt_cursor.c /^__bam_c_refresh(dbc)$/
-__bam_c_reset ../btree/bt_cursor.c /^__bam_c_reset(cp)$/
__bam_c_rget ../btree/bt_cursor.c /^__bam_c_rget(dbc, data)$/
__bam_c_search ../btree/bt_cursor.c /^__bam_c_search(dbc, root_pgno, key, flags, exactp)/
__bam_c_writelock ../btree/bt_cursor.c /^__bam_c_writelock(dbc)$/
@@ -1248,18 +1819,21 @@ __bam_ca_rsplit ../btree/bt_curadj.c /^__bam_ca_rsplit(my_dbc, fpgno, tpgno)$/
__bam_ca_split ../btree/bt_curadj.c /^__bam_ca_split(my_dbc, ppgno, lpgno, rpgno, split_/
__bam_ca_undodup ../btree/bt_curadj.c /^__bam_ca_undodup(dbp, first, fpgno, fi, ti)$/
__bam_ca_undosplit ../btree/bt_curadj.c /^__bam_ca_undosplit(dbp, frompgno, topgno, lpgno, s/
-__bam_cadjust_log ../btree/btree_auto.c /^__bam_cadjust_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_cadjust_getpgnos ../btree/btree_auto.c /^__bam_cadjust_getpgnos(dbenv, rec, lsnp, notused1,/
+__bam_cadjust_log ../btree/btree_auto.c /^__bam_cadjust_log(dbp, txnid, ret_lsnp, flags, pgn/
__bam_cadjust_print ../btree/btree_auto.c /^__bam_cadjust_print(dbenv, dbtp, lsnp, notused2, n/
__bam_cadjust_read ../btree/btree_auto.c /^__bam_cadjust_read(dbenv, recbuf, argpp)$/
__bam_cadjust_recover ../btree/bt_rec.c /^__bam_cadjust_recover(dbenv, dbtp, lsnp, op, info)/
-__bam_cdel_log ../btree/btree_auto.c /^__bam_cdel_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_cdel_getpgnos ../btree/btree_auto.c /^__bam_cdel_getpgnos(dbenv, rec, lsnp, notused1, su/
+__bam_cdel_log ../btree/btree_auto.c /^__bam_cdel_log(dbp, txnid, ret_lsnp, flags, pgno, /
__bam_cdel_print ../btree/btree_auto.c /^__bam_cdel_print(dbenv, dbtp, lsnp, notused2, notu/
__bam_cdel_read ../btree/btree_auto.c /^__bam_cdel_read(dbenv, recbuf, argpp)$/
__bam_cdel_recover ../btree/bt_rec.c /^__bam_cdel_recover(dbenv, dbtp, lsnp, op, info)$/
__bam_cmp ../btree/bt_compare.c /^__bam_cmp(dbp, dbt, h, indx, func, cmpp)$/
__bam_copy ../btree/bt_split.c /^__bam_copy(dbp, pp, cp, nxt, stop)$/
__bam_cprint ../btree/bt_curadj.c /^__bam_cprint(dbc)$/
-__bam_curadj_log ../btree/btree_auto.c /^__bam_curadj_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_curadj_getpgnos ../btree/btree_auto.c /^__bam_curadj_getpgnos(dbenv, rec, lsnp, notused1, /
+__bam_curadj_log ../btree/btree_auto.c /^__bam_curadj_log(dbp, txnid, ret_lsnp, flags, mode/
__bam_curadj_print ../btree/btree_auto.c /^__bam_curadj_print(dbenv, dbtp, lsnp, notused2, no/
__bam_curadj_read ../btree/btree_auto.c /^__bam_curadj_read(dbenv, recbuf, argpp)$/
__bam_curadj_recover ../btree/bt_rec.c /^__bam_curadj_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -1270,59 +1844,55 @@ __bam_defpfx ../btree/bt_compare.c /^__bam_defpfx(dbp, a, b)$/
__bam_ditem ../btree/bt_delete.c /^__bam_ditem(dbc, h, indx)$/
__bam_dpages ../btree/bt_delete.c /^__bam_dpages(dbc, stack_epg)$/
__bam_dup_convert ../btree/bt_put.c /^__bam_dup_convert(dbc, h, indx)$/
+__bam_get_bt_minkey ../btree/bt_method.c /^__bam_get_bt_minkey(dbp, bt_minkeyp)$/
__bam_get_prev ../btree/bt_cursor.c /^__bam_get_prev(dbc)$/
-__bam_getboth_finddatum ../btree/bt_cursor.c /^__bam_getboth_finddatum(dbc, data)$/
+__bam_getboth_finddatum ../btree/bt_cursor.c /^__bam_getboth_finddatum(dbc, data, flags)$/
__bam_getbothc ../btree/bt_cursor.c /^__bam_getbothc(dbc, data)$/
__bam_iitem ../btree/bt_put.c /^__bam_iitem(dbc, key, data, op, flags)$/
-__bam_init_print ../btree/btree_auto.c /^__bam_init_print(dbenv)$/
-__bam_init_recover ../btree/btree_auto.c /^__bam_init_recover(dbenv)$/
+__bam_init_getpgnos ../btree/btree_auto.c /^__bam_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__bam_init_meta ../btree/bt_open.c /^__bam_init_meta(dbp, meta, pgno, lsnp)$/
+__bam_init_print ../btree/btree_auto.c /^__bam_init_print(dbenv, dtabp, dtabsizep)$/
+__bam_init_recover ../btree/btree_auto.c /^__bam_init_recover(dbenv, dtabp, dtabsizep)$/
__bam_isopd ../btree/bt_cursor.c /^__bam_isopd(dbc, pgnop)$/
-__bam_key_range ../btree/bt_stat.c /^__bam_key_range(dbp, txn, dbt, kp, flags)$/
+__bam_key_range ../btree/bt_stat.c /^__bam_key_range(dbc, dbt, kp, flags)$/
+__bam_map_flags ../btree/bt_method.c /^__bam_map_flags(dbp, inflagsp, outflagsp)$/
__bam_meta2pgset ../btree/bt_verify.c /^__bam_meta2pgset(dbp, vdp, btmeta, flags, pgset)$/
__bam_metachk ../btree/bt_open.c /^__bam_metachk(dbp, name, btm)$/
__bam_mswap ../btree/bt_conv.c /^__bam_mswap(pg)$/
+__bam_new_file ../btree/bt_open.c /^__bam_new_file(dbp, txn, fhp, name)$/
+__bam_new_subdb ../btree/bt_open.c /^__bam_new_subdb(mdbp, dbp, txn)$/
__bam_nrecs ../btree/bt_rsearch.c /^__bam_nrecs(dbc, rep)$/
__bam_opd_cursor ../btree/bt_curadj.c /^__bam_opd_cursor(dbp, dbc, first, tpgno, ti)$/
-__bam_open ../btree/bt_open.c /^__bam_open(dbp, name, base_pgno, flags)$/
+__bam_open ../btree/bt_open.c /^__bam_open(dbp, txn, name, base_pgno, flags)$/
__bam_ovput ../btree/bt_put.c /^__bam_ovput(dbc, type, pgno, h, indx, item)$/
__bam_page ../btree/bt_split.c /^__bam_page(dbc, pp, cp)$/
-__bam_partsize ../btree/bt_put.c /^__bam_partsize(op, data, h, indx)$/
-__bam_pg_alloc1_print ../btree/btree_auto.c /^__bam_pg_alloc1_print(dbenv, dbtp, lsnp, notused2,/
-__bam_pg_alloc1_read ../btree/btree_auto.c /^__bam_pg_alloc1_read(dbenv, recbuf, argpp)$/
-__bam_pg_alloc_log ../btree/btree_auto.c /^__bam_pg_alloc_log(dbenv, txnid, ret_lsnp, flags,$/
-__bam_pg_alloc_print ../btree/btree_auto.c /^__bam_pg_alloc_print(dbenv, dbtp, lsnp, notused2, /
-__bam_pg_alloc_read ../btree/btree_auto.c /^__bam_pg_alloc_read(dbenv, recbuf, argpp)$/
-__bam_pg_alloc_recover ../btree/bt_rec.c /^__bam_pg_alloc_recover(dbenv, dbtp, lsnp, op, info/
-__bam_pg_free1_print ../btree/btree_auto.c /^__bam_pg_free1_print(dbenv, dbtp, lsnp, notused2, /
-__bam_pg_free1_read ../btree/btree_auto.c /^__bam_pg_free1_read(dbenv, recbuf, argpp)$/
-__bam_pg_free_log ../btree/btree_auto.c /^__bam_pg_free_log(dbenv, txnid, ret_lsnp, flags,$/
-__bam_pg_free_print ../btree/btree_auto.c /^__bam_pg_free_print(dbenv, dbtp, lsnp, notused2, n/
-__bam_pg_free_read ../btree/btree_auto.c /^__bam_pg_free_read(dbenv, recbuf, argpp)$/
-__bam_pg_free_recover ../btree/bt_rec.c /^__bam_pg_free_recover(dbenv, dbtp, lsnp, op, info)/
-__bam_pgin ../btree/bt_conv.c /^__bam_pgin(dbenv, pg, pp, cookie)$/
-__bam_pgout ../btree/bt_conv.c /^__bam_pgout(dbenv, pg, pp, cookie)$/
+__bam_partsize ../btree/bt_put.c /^__bam_partsize(dbp, op, data, h, indx)$/
+__bam_pgin ../btree/bt_conv.c /^__bam_pgin(dbenv, dummydbp, pg, pp, cookie)$/
+__bam_pgout ../btree/bt_conv.c /^__bam_pgout(dbenv, dummydbp, pg, pp, cookie)$/
__bam_pinsert ../btree/bt_split.c /^__bam_pinsert(dbc, parent, lchild, rchild, space_c/
__bam_psplit ../btree/bt_split.c /^__bam_psplit(dbc, cp, lp, rp, splitret)$/
-__bam_rcuradj_log ../btree/btree_auto.c /^__bam_rcuradj_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_rcuradj_getpgnos ../btree/btree_auto.c /^__bam_rcuradj_getpgnos(dbenv, rec, lsnp, notused1,/
+__bam_rcuradj_log ../btree/btree_auto.c /^__bam_rcuradj_log(dbp, txnid, ret_lsnp, flags, mod/
__bam_rcuradj_print ../btree/btree_auto.c /^__bam_rcuradj_print(dbenv, dbtp, lsnp, notused2, n/
__bam_rcuradj_read ../btree/btree_auto.c /^__bam_rcuradj_read(dbenv, recbuf, argpp)$/
__bam_rcuradj_recover ../btree/bt_rec.c /^__bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info)/
-__bam_read_root ../btree/bt_open.c /^__bam_read_root(dbp, name, base_pgno, flags)$/
+__bam_read_root ../btree/bt_open.c /^__bam_read_root(dbp, txn, base_pgno, flags)$/
__bam_reclaim ../btree/bt_reclaim.c /^__bam_reclaim(dbp, txn)$/
-__bam_repl_log ../btree/btree_auto.c /^__bam_repl_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_repl_getpgnos ../btree/btree_auto.c /^__bam_repl_getpgnos(dbenv, rec, lsnp, notused1, su/
+__bam_repl_log ../btree/btree_auto.c /^__bam_repl_log(dbp, txnid, ret_lsnp, flags, pgno, /
__bam_repl_print ../btree/btree_auto.c /^__bam_repl_print(dbenv, dbtp, lsnp, notused2, notu/
__bam_repl_read ../btree/btree_auto.c /^__bam_repl_read(dbenv, recbuf, argpp)$/
__bam_repl_recover ../btree/bt_rec.c /^__bam_repl_recover(dbenv, dbtp, lsnp, op, info)$/
__bam_ritem ../btree/bt_put.c /^__bam_ritem(dbc, h, indx, data)$/
__bam_root ../btree/bt_split.c /^__bam_root(dbc, cp)$/
-__bam_root_log ../btree/btree_auto.c /^__bam_root_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_root_getpgnos ../btree/btree_auto.c /^__bam_root_getpgnos(dbenv, rec, lsnp, notused1, su/
+__bam_root_log ../btree/btree_auto.c /^__bam_root_log(dbp, txnid, ret_lsnp, flags, meta_p/
__bam_root_print ../btree/btree_auto.c /^__bam_root_print(dbenv, dbtp, lsnp, notused2, notu/
__bam_root_read ../btree/btree_auto.c /^__bam_root_read(dbenv, recbuf, argpp)$/
__bam_root_recover ../btree/bt_rec.c /^__bam_root_recover(dbenv, dbtp, lsnp, op, info)$/
__bam_rsearch ../btree/bt_rsearch.c /^__bam_rsearch(dbc, recnop, flags, stop, exactp)$/
-__bam_rsplit1_print ../btree/btree_auto.c /^__bam_rsplit1_print(dbenv, dbtp, lsnp, notused2, n/
-__bam_rsplit1_read ../btree/btree_auto.c /^__bam_rsplit1_read(dbenv, recbuf, argpp)$/
-__bam_rsplit_log ../btree/btree_auto.c /^__bam_rsplit_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_rsplit_getpgnos ../btree/btree_auto.c /^__bam_rsplit_getpgnos(dbenv, rec, lsnp, notused1, /
+__bam_rsplit_log ../btree/btree_auto.c /^__bam_rsplit_log(dbp, txnid, ret_lsnp, flags, pgno/
__bam_rsplit_print ../btree/btree_auto.c /^__bam_rsplit_print(dbenv, dbtp, lsnp, notused2, no/
__bam_rsplit_read ../btree/btree_auto.c /^__bam_rsplit_read(dbenv, recbuf, argpp)$/
__bam_rsplit_recover ../btree/bt_rec.c /^__bam_rsplit_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -1336,152 +1906,180 @@ __bam_set_bt_minkey ../btree/bt_method.c /^__bam_set_bt_minkey(dbp, bt_minkey)$/
__bam_set_bt_prefix ../btree/bt_method.c /^__bam_set_bt_prefix(dbp, func)$/
__bam_set_flags ../btree/bt_method.c /^__bam_set_flags(dbp, flagsp)$/
__bam_split ../btree/bt_split.c /^__bam_split(dbc, arg, root_pgnop)$/
-__bam_split1_print ../btree/btree_auto.c /^__bam_split1_print(dbenv, dbtp, lsnp, notused2, no/
-__bam_split1_read ../btree/btree_auto.c /^__bam_split1_read(dbenv, recbuf, argpp)$/
-__bam_split_log ../btree/btree_auto.c /^__bam_split_log(dbenv, txnid, ret_lsnp, flags,$/
+__bam_split_getpgnos ../btree/btree_auto.c /^__bam_split_getpgnos(dbenv, rec, lsnp, notused1, s/
+__bam_split_log ../btree/btree_auto.c /^__bam_split_log(dbp, txnid, ret_lsnp, flags, left,/
__bam_split_print ../btree/btree_auto.c /^__bam_split_print(dbenv, dbtp, lsnp, notused2, not/
__bam_split_read ../btree/btree_auto.c /^__bam_split_read(dbenv, recbuf, argpp)$/
__bam_split_recover ../btree/bt_rec.c /^__bam_split_recover(dbenv, dbtp, lsnp, op, info)$/
-__bam_stat ../btree/bt_stat.c /^__bam_stat(dbp, spp, flags)$/
+__bam_stat ../btree/bt_stat.c /^__bam_stat(dbc, spp, flags)$/
__bam_stat_callback ../btree/bt_stat.c /^__bam_stat_callback(dbp, h, cookie, putp)$/
__bam_stkgrow ../btree/bt_search.c /^__bam_stkgrow(dbenv, cp)$/
__bam_stkrel ../btree/bt_search.c /^__bam_stkrel(dbc, flags)$/
-__bam_total ../btree/bt_rsearch.c /^__bam_total(h)$/
+__bam_total ../btree/bt_rsearch.c /^__bam_total(dbp, h)$/
__bam_traverse ../btree/bt_stat.c /^__bam_traverse(dbc, mode, root_pgno, callback, coo/
-__bam_truncate ../btree/bt_reclaim.c /^__bam_truncate(dbp, txn, countp)$/
+__bam_truncate ../btree/bt_reclaim.c /^__bam_truncate(dbc, countp)$/
__bam_vrfy ../btree/bt_verify.c /^__bam_vrfy(dbp, vdp, h, pgno, flags)$/
__bam_vrfy_inp ../btree/bt_verify.c /^__bam_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags/
__bam_vrfy_itemorder ../btree/bt_verify.c /^__bam_vrfy_itemorder(dbp, vdp, h, pgno, nentries, /
__bam_vrfy_meta ../btree/bt_verify.c /^__bam_vrfy_meta(dbp, vdp, meta, pgno, flags)$/
__bam_vrfy_structure ../btree/bt_verify.c /^__bam_vrfy_structure(dbp, vdp, meta_pgno, flags)$/
-__bam_vrfy_subtree ../btree/bt_verify.c /^__bam_vrfy_subtree(dbp,$/
+__bam_vrfy_subtree ../btree/bt_verify.c /^__bam_vrfy_subtree(dbp, vdp, pgno, l, r, flags, le/
__bam_vrfy_treeorder ../btree/bt_verify.c /^__bam_vrfy_treeorder(dbp, pgno, h, lp, rp, func, f/
-__bh ../include/mp.h /^struct __bh {$/
__bhcmp ../mp/mp_sync.c /^__bhcmp(p1, p2)$/
-__btree ../include/btree.h /^struct __btree { \/* Btree access method. *\/$/
__build_data ../log/log_archive.c /^__build_data(dbenv, pref, listp)$/
__cmpfunc ../log/log_archive.c /^__cmpfunc(p1, p2)$/
-__crdel_delete_log ../db/crdel_auto.c /^__crdel_delete_log(dbenv, txnid, ret_lsnp, flags,$/
-__crdel_delete_print ../db/crdel_auto.c /^__crdel_delete_print(dbenv, dbtp, lsnp, notused2, /
-__crdel_delete_read ../db/crdel_auto.c /^__crdel_delete_read(dbenv, recbuf, argpp)$/
-__crdel_delete_recover ../db/crdel_rec.c /^__crdel_delete_recover(dbenv, dbtp, lsnp, op, info/
-__crdel_fileopen_log ../db/crdel_auto.c /^__crdel_fileopen_log(dbenv, txnid, ret_lsnp, flags/
-__crdel_fileopen_print ../db/crdel_auto.c /^__crdel_fileopen_print(dbenv, dbtp, lsnp, notused2/
-__crdel_fileopen_read ../db/crdel_auto.c /^__crdel_fileopen_read(dbenv, recbuf, argpp)$/
-__crdel_fileopen_recover ../db/crdel_rec.c /^__crdel_fileopen_recover(dbenv, dbtp, lsnp, op, in/
-__crdel_init_print ../db/crdel_auto.c /^__crdel_init_print(dbenv)$/
-__crdel_init_recover ../db/crdel_auto.c /^__crdel_init_recover(dbenv)$/
-__crdel_metapage_log ../db/crdel_auto.c /^__crdel_metapage_log(dbenv, txnid, ret_lsnp, flags/
-__crdel_metapage_print ../db/crdel_auto.c /^__crdel_metapage_print(dbenv, dbtp, lsnp, notused2/
-__crdel_metapage_read ../db/crdel_auto.c /^__crdel_metapage_read(dbenv, recbuf, argpp)$/
-__crdel_metapage_recover ../db/crdel_rec.c /^__crdel_metapage_recover(dbenv, dbtp, lsnp, op, in/
-__crdel_metasub_log ../db/crdel_auto.c /^__crdel_metasub_log(dbenv, txnid, ret_lsnp, flags,/
+__crdel_init_getpgnos ../db/crdel_auto.c /^__crdel_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__crdel_init_print ../db/crdel_auto.c /^__crdel_init_print(dbenv, dtabp, dtabsizep)$/
+__crdel_init_recover ../db/crdel_auto.c /^__crdel_init_recover(dbenv, dtabp, dtabsizep)$/
+__crdel_metasub_getpgnos ../db/crdel_auto.c /^__crdel_metasub_getpgnos(dbenv, rec, lsnp, notused/
+__crdel_metasub_log ../db/crdel_auto.c /^__crdel_metasub_log(dbp, txnid, ret_lsnp, flags, p/
__crdel_metasub_print ../db/crdel_auto.c /^__crdel_metasub_print(dbenv, dbtp, lsnp, notused2,/
__crdel_metasub_read ../db/crdel_auto.c /^__crdel_metasub_read(dbenv, recbuf, argpp)$/
__crdel_metasub_recover ../db/crdel_rec.c /^__crdel_metasub_recover(dbenv, dbtp, lsnp, op, inf/
-__crdel_old_delete_print ../db/crdel_auto.c /^__crdel_old_delete_print(dbenv, dbtp, lsnp, notuse/
-__crdel_old_delete_read ../db/crdel_auto.c /^__crdel_old_delete_read(dbenv, recbuf, argpp)$/
-__crdel_rename_log ../db/crdel_auto.c /^__crdel_rename_log(dbenv, txnid, ret_lsnp, flags,$/
-__crdel_rename_print ../db/crdel_auto.c /^__crdel_rename_print(dbenv, dbtp, lsnp, notused2, /
-__crdel_rename_read ../db/crdel_auto.c /^__crdel_rename_read(dbenv, recbuf, argpp)$/
-__crdel_rename_recover ../db/crdel_rec.c /^__crdel_rename_recover(dbenv, dbtp, lsnp, op, info/
-__cursor ../include/btree.h /^struct __cursor {$/
-__data ../env/db_salloc.c /^struct __data {$/
-__db ../include/db.in /^struct __db {$/
+__crypto_algsetup ../crypto/crypto.c /^__crypto_algsetup(dbenv, db_cipher, alg, do_init)$/
+__crypto_dbenv_close ../crypto/crypto.c /^__crypto_dbenv_close(dbenv)$/
+__crypto_decrypt_meta ../crypto/crypto.c /^__crypto_decrypt_meta(dbenv, dbp, mbuf, do_metachk/
+__crypto_region_init ../crypto/crypto.c /^__crypto_region_init(dbenv)$/
+__crypto_set_passwd ../crypto/crypto.c /^__crypto_set_passwd(dbenv_src, dbenv_dest)$/
__db185_open ../db185/db185.c /^__db185_open(file, oflags, mode, type, openinfo)$/
__db_31_offdup ../db/db_upg_opd.c /^__db_31_offdup(dbp, real_name, fhp, sorted, pgnop)/
+__db_SHA1Final ../hmac/sha1.c /^__db_SHA1Final(digest, context)$/
+__db_SHA1Init ../hmac/sha1.c /^__db_SHA1Init(context)$/
+__db_SHA1Transform ../hmac/sha1.c /^__db_SHA1Transform(state, buffer)$/
+__db_SHA1Update ../hmac/sha1.c /^__db_SHA1Update(context, data, len)$/
+__db_SHAPrintContext ../hmac/sha1.c /^__db_SHAPrintContext(context, msg)$/
__db_add_limbo ../db/db_dispatch.c /^__db_add_limbo(dbenv, info, fileid, pgno, count)$/
-__db_add_recovery ../db/db_dispatch.c /^__db_add_recovery(dbenv, func, ndx)$/
-__db_addpage_print ../db/db_auto.c /^__db_addpage_print(dbenv, dbtp, lsnp, notused2, no/
-__db_addpage_read ../db/db_auto.c /^__db_addpage_read(dbenv, recbuf, argpp)$/
-__db_addrem_log ../db/db_auto.c /^__db_addrem_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_add_recovery ../db/db_dispatch.c /^__db_add_recovery(dbenv, dtab, dtabsize, func, ndx/
+__db_addrem_getpgnos ../db/db_auto.c /^__db_addrem_getpgnos(dbenv, rec, lsnp, notused1, s/
+__db_addrem_log ../db/db_auto.c /^__db_addrem_log(dbp, txnid, ret_lsnp, flags,$/
__db_addrem_print ../db/db_auto.c /^__db_addrem_print(dbenv, dbtp, lsnp, notused2, not/
__db_addrem_read ../db/db_auto.c /^__db_addrem_read(dbenv, recbuf, argpp)$/
__db_addrem_recover ../db/db_rec.c /^__db_addrem_recover(dbenv, dbtp, lsnp, op, info)$/
__db_append_primary ../db/db_am.c /^__db_append_primary(dbc, key, data)$/
-__db_appname ../env/env_open.c /^__db_appname(dbenv, appname, dir, file, tmp_oflags/
-__db_apprec ../env/env_recover.c /^__db_apprec(dbenv, flags)$/
+__db_appname ../env/env_open.c /^__db_appname(dbenv, appname, file, tmp_oflags, fhp/
+__db_apprec ../env/env_recover.c /^__db_apprec(dbenv, max_lsn, trunclsn, update, flag/
__db_assert ../common/db_err.c /^__db_assert(failedexpr, file, line)$/
-__db_associate ../db/db_am.c /^__db_associate(dbp, sdbp, callback, flags)$/
-__db_associate_proc ../rpc_server/db_server_proc.c /^__db_associate_proc(dbpcl_id, sdbpcl_id,$/
-__db_associatechk ../db/db_iface.c /^__db_associatechk(dbp, sdbp, callback, flags)$/
-__db_backup_name ../db/db.c /^__db_backup_name(dbenv, name, backup, lsn)$/
-__db_big_log ../db/db_auto.c /^__db_big_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_associate ../db/db_am.c /^__db_associate(dbp, txn, sdbp, callback, flags)$/
+__db_associate_arg ../db/db_iface.c /^__db_associate_arg(dbp, sdbp, callback, flags)$/
+__db_associate_pp ../db/db_iface.c /^__db_associate_pp(dbp, txn, sdbp, callback, flags)/
+__db_associate_proc ../rpc_server/c/db_server_proc.c /^__db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id/
+__db_backup_name ../db/db.c /^__db_backup_name(dbenv, name, txn, backup)$/
+__db_big_getpgnos ../db/db_auto.c /^__db_big_getpgnos(dbenv, rec, lsnp, notused1, summ/
+__db_big_log ../db/db_auto.c /^__db_big_log(dbp, txnid, ret_lsnp, flags,$/
__db_big_print ../db/db_auto.c /^__db_big_print(dbenv, dbtp, lsnp, notused2, notuse/
__db_big_read ../db/db_auto.c /^__db_big_read(dbenv, recbuf, argpp)$/
__db_big_recover ../db/db_rec.c /^__db_big_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_blockDecrypt ../crypto/rijndael/rijndael-api-fst.c /^__db_blockDecrypt(cipher, key, input, inputLen, ou/
+__db_blockEncrypt ../crypto/rijndael/rijndael-api-fst.c /^__db_blockEncrypt(cipher, key, input, inputLen, ou/
__db_bmeta ../db/db_pr.c /^__db_bmeta(dbp, fp, h, flags)$/
-__db_bt_maxkey_proc ../rpc_server/db_server_proc.c /^__db_bt_maxkey_proc(dbpcl_id, maxkey, replyp)$/
-__db_bt_minkey_proc ../rpc_server/db_server_proc.c /^__db_bt_minkey_proc(dbpcl_id, minkey, replyp)$/
-__db_bt_stat ../include/db.in /^struct __db_bt_stat {$/
+__db_bt_maxkey_proc ../rpc_server/c/db_server_proc.c /^__db_bt_maxkey_proc(dbpcl_id, maxkey, replyp)$/
+__db_bt_minkey_proc ../rpc_server/c/db_server_proc.c /^__db_bt_minkey_proc(dbpcl_id, minkey, replyp)$/
__db_build_bi ../db/db_upg_opd.c /^__db_build_bi(dbp, fhp, ipage, page, indx, nomemp)/
__db_build_ri ../db/db_upg_opd.c /^__db_build_ri(dbp, fhp, ipage, page, indx, nomemp)/
__db_buildpartial ../db/db_cam.c /^__db_buildpartial(dbp, oldrec, partial, newrec)$/
__db_byteorder ../common/db_byteorder.c /^__db_byteorder(dbenv, lorder)$/
-__db_byteswap ../db/db_conv.c /^__db_byteswap(dbenv, pg, h, pagesize, pgin)$/
+__db_byteswap ../db/db_conv.c /^__db_byteswap(dbenv, dbp, pg, h, pagesize, pgin)$/
__db_c_cleanup ../db/db_cam.c /^__db_c_cleanup(dbc, dbc_n, failed)$/
__db_c_close ../db/db_cam.c /^__db_c_close(dbc)$/
-__db_c_count ../db/db_cam.c /^__db_c_count(dbc, recnop, flags)$/
+__db_c_close_pp ../db/db_iface.c /^__db_c_close_pp(dbc)$/
+__db_c_count ../db/db_cam.c /^__db_c_count(dbc, recnop)$/
+__db_c_count_pp ../db/db_iface.c /^__db_c_count_pp(dbc, recnop, flags)$/
__db_c_del ../db/db_cam.c /^__db_c_del(dbc, flags)$/
+__db_c_del_arg ../db/db_iface.c /^__db_c_del_arg(dbc, flags)$/
+__db_c_del_pp ../db/db_iface.c /^__db_c_del_pp(dbc, flags)$/
__db_c_del_primary ../db/db_cam.c /^__db_c_del_primary(dbc)$/
__db_c_del_secondary ../db/db_cam.c /^__db_c_del_secondary(dbc)$/
__db_c_destroy ../db/db_cam.c /^__db_c_destroy(dbc)$/
__db_c_dup ../db/db_cam.c /^__db_c_dup(dbc_orig, dbcp, flags)$/
+__db_c_dup_pp ../db/db_iface.c /^__db_c_dup_pp(dbc, dbcp, flags)$/
__db_c_get ../db/db_cam.c /^__db_c_get(dbc_arg, key, data, flags)$/
+__db_c_get_arg ../db/db_iface.c /^__db_c_get_arg(dbc, key, data, flags)$/
+__db_c_get_pp ../db/db_iface.c /^__db_c_get_pp(dbc, key, data, flags)$/
__db_c_idup ../db/db_cam.c /^__db_c_idup(dbc_orig, dbcp, flags)$/
-__db_c_newopd ../db/db_cam.c /^__db_c_newopd(dbc_parent, root, dbcp)$/
+__db_c_newopd ../db/db_cam.c /^__db_c_newopd(dbc_parent, root, oldopd, dbcp)$/
__db_c_pget ../db/db_cam.c /^__db_c_pget(dbc, skey, pkey, data, flags)$/
+__db_c_pget_arg ../db/db_iface.c /^__db_c_pget_arg(dbc, pkey, flags)$/
+__db_c_pget_pp ../db/db_iface.c /^__db_c_pget_pp(dbc, skey, pkey, data, flags)$/
+__db_c_pget_recno ../db/db_cam.c /^__db_c_pget_recno(sdbc, pkey, data, flags)$/
__db_c_put ../db/db_cam.c /^__db_c_put(dbc_arg, key, data, flags)$/
-__db_c_secondary_get ../db/db_cam.c /^__db_c_secondary_get(dbc, skey, data, flags)$/
-__db_ccountchk ../db/db_iface.c /^__db_ccountchk(dbp, flags, isvalid)$/
-__db_cdelchk ../db/db_iface.c /^__db_cdelchk(dbp, flags, isrdonly, isvalid)$/
-__db_cgetchk ../db/db_iface.c /^__db_cgetchk(dbp, key, data, flags, isvalid)$/
-__db_close ../db/db.c /^__db_close(dbp, flags)$/
-__db_close_proc ../rpc_server/db_server_proc.c /^__db_close_proc(dbpcl_id, flags, replyp)$/
-__db_closechk ../db/db_iface.c /^__db_closechk(dbp, flags)$/
-__db_cpgetchk ../db/db_iface.c /^__db_cpgetchk(dbp, skey, pkey, data, flags, isvali/
+__db_c_put_arg ../db/db_iface.c /^__db_c_put_arg(dbc, key, data, flags)$/
+__db_c_put_pp ../db/db_iface.c /^__db_c_put_pp(dbc, key, data, flags)$/
+__db_c_secondary_get_pp ../db/db_cam.c /^__db_c_secondary_get_pp(dbc, skey, data, flags)$/
+__db_check_chksum ../hmac/hmac.c /^__db_check_chksum(dbenv, db_cipher, chksum, data, /
+__db_check_txn ../common/db_err.c /^__db_check_txn(dbp, txn, assoc_lid, read_op)$/
+__db_chk_meta ../db/db_open.c /^__db_chk_meta(dbenv, dbp, meta, do_metachk)$/
+__db_chksum ../hmac/hmac.c /^__db_chksum(data, data_len, mac_key, store)$/
+__db_cipherInit ../crypto/rijndael/rijndael-api-fst.c /^__db_cipherInit(cipher, mode, IV)$/
+__db_cipherUpdateRounds ../crypto/rijndael/rijndael-api-fst.c /^__db_cipherUpdateRounds(cipher, key, input, inputL/
+__db_cksum_getpgnos ../db/db_auto.c /^__db_cksum_getpgnos(dbenv, rec, lsnp, notused1, su/
+__db_cksum_log ../db/db_auto.c /^__db_cksum_log(dbenv, txnid, ret_lsnp, flags)$/
+__db_cksum_print ../db/db_auto.c /^__db_cksum_print(dbenv, dbtp, lsnp, notused2, notu/
+__db_cksum_read ../db/db_auto.c /^__db_cksum_read(dbenv, recbuf, argpp)$/
+__db_cksum_recover ../db/db_rec.c /^__db_cksum_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_close ../db/db.c /^__db_close(dbp, txn, flags)$/
+__db_close_int ../rpc_server/c/db_server_util.c /^__db_close_int(id, flags)$/
+__db_close_pp ../db/db_iface.c /^__db_close_pp(dbp, flags)$/
+__db_close_proc ../rpc_server/c/db_server_proc.c /^__db_close_proc(dbpcl_id, flags, replyp)$/
__db_cprint ../db/db_am.c /^__db_cprint(dbp)$/
-__db_cputchk ../db/db_iface.c /^__db_cputchk(dbp, key, data, flags, isrdonly, isva/
-__db_create_proc ../rpc_server/db_server_proc.c /^__db_create_proc(dbenvcl_id, flags, replyp)$/
+__db_cprint_item ../db/db_am.c /^int __db_cprint_item(dbc)$/
+__db_create_proc ../rpc_server/c/db_server_proc.c /^__db_create_proc(dbenvcl_id, flags, replyp)$/
__db_curinval ../db/db_iface.c /^__db_curinval(dbenv)$/
-__db_cursor ../db/db_am.c /^__db_cursor(dbp, txn, dbcp, flags)$/
-__db_cursor_proc ../rpc_server/db_server_proc.c /^__db_cursor_proc(dbpcl_id, txnpcl_id,$/
-__db_cursorchk ../db/db_iface.c /^__db_cursorchk(dbp, flags, isrdonly)$/
-__db_db_associate_3003 ../rpc_client/db_server_clnt.c /^__db_db_associate_3003(argp, clnt)$/
-__db_db_bt_maxkey_3003 ../rpc_client/db_server_clnt.c /^__db_db_bt_maxkey_3003(argp, clnt)$/
-__db_db_bt_minkey_3003 ../rpc_client/db_server_clnt.c /^__db_db_bt_minkey_3003(argp, clnt)$/
-__db_db_close_3003 ../rpc_client/db_server_clnt.c /^__db_db_close_3003(argp, clnt)$/
-__db_db_create_3003 ../rpc_client/db_server_clnt.c /^__db_db_create_3003(argp, clnt)$/
-__db_db_cursor_3003 ../rpc_client/db_server_clnt.c /^__db_db_cursor_3003(argp, clnt)$/
-__db_db_del_3003 ../rpc_client/db_server_clnt.c /^__db_db_del_3003(argp, clnt)$/
-__db_db_extentsize_3003 ../rpc_client/db_server_clnt.c /^__db_db_extentsize_3003(argp, clnt)$/
-__db_db_flags_3003 ../rpc_client/db_server_clnt.c /^__db_db_flags_3003(argp, clnt)$/
-__db_db_get_3003 ../rpc_client/db_server_clnt.c /^__db_db_get_3003(argp, clnt)$/
-__db_db_h_ffactor_3003 ../rpc_client/db_server_clnt.c /^__db_db_h_ffactor_3003(argp, clnt)$/
-__db_db_h_nelem_3003 ../rpc_client/db_server_clnt.c /^__db_db_h_nelem_3003(argp, clnt)$/
-__db_db_join_3003 ../rpc_client/db_server_clnt.c /^__db_db_join_3003(argp, clnt)$/
-__db_db_key_range_3003 ../rpc_client/db_server_clnt.c /^__db_db_key_range_3003(argp, clnt)$/
-__db_db_lorder_3003 ../rpc_client/db_server_clnt.c /^__db_db_lorder_3003(argp, clnt)$/
-__db_db_open_3003 ../rpc_client/db_server_clnt.c /^__db_db_open_3003(argp, clnt)$/
-__db_db_pagesize_3003 ../rpc_client/db_server_clnt.c /^__db_db_pagesize_3003(argp, clnt)$/
-__db_db_pget_3003 ../rpc_client/db_server_clnt.c /^__db_db_pget_3003(argp, clnt)$/
-__db_db_put_3003 ../rpc_client/db_server_clnt.c /^__db_db_put_3003(argp, clnt)$/
-__db_db_re_delim_3003 ../rpc_client/db_server_clnt.c /^__db_db_re_delim_3003(argp, clnt)$/
-__db_db_re_len_3003 ../rpc_client/db_server_clnt.c /^__db_db_re_len_3003(argp, clnt)$/
-__db_db_re_pad_3003 ../rpc_client/db_server_clnt.c /^__db_db_re_pad_3003(argp, clnt)$/
-__db_db_remove_3003 ../rpc_client/db_server_clnt.c /^__db_db_remove_3003(argp, clnt)$/
-__db_db_rename_3003 ../rpc_client/db_server_clnt.c /^__db_db_rename_3003(argp, clnt)$/
-__db_db_stat_3003 ../rpc_client/db_server_clnt.c /^__db_db_stat_3003(argp, clnt)$/
-__db_db_sync_3003 ../rpc_client/db_server_clnt.c /^__db_db_sync_3003(argp, clnt)$/
-__db_db_truncate_3003 ../rpc_client/db_server_clnt.c /^__db_db_truncate_3003(argp, clnt)$/
-__db_dbc_close_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_close_3003(argp, clnt)$/
-__db_dbc_count_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_count_3003(argp, clnt)$/
-__db_dbc_del_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_del_3003(argp, clnt)$/
-__db_dbc_dup_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_dup_3003(argp, clnt)$/
-__db_dbc_get_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_get_3003(argp, clnt)$/
-__db_dbc_pget_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_pget_3003(argp, clnt)$/
-__db_dbc_put_3003 ../rpc_client/db_server_clnt.c /^__db_dbc_put_3003(argp, clnt)$/
-__db_dbenv_setup ../db/db.c /^__db_dbenv_setup(dbp, name, flags)$/
+__db_cursor ../db/db_iface.c /^__db_cursor(dbp, txn, dbcp, flags)$/
+__db_cursor_arg ../db/db_iface.c /^__db_cursor_arg(dbp, flags)$/
+__db_cursor_check ../db/db_truncate.c /^__db_cursor_check(dbp)$/
+__db_cursor_int ../db/db_am.c /^__db_cursor_int(dbp, txn, dbtype, root, is_opd, lo/
+__db_cursor_pp ../db/db_iface.c /^__db_cursor_pp(dbp, txn, dbcp, flags)$/
+__db_cursor_proc ../rpc_server/c/db_server_proc.c /^__db_cursor_proc(dbpcl_id, txnpcl_id,$/
+__db_db_associate_4002 ../rpc_client/db_server_clnt.c /^__db_db_associate_4002(argp, clnt)$/
+__db_db_bt_maxkey_4002 ../rpc_client/db_server_clnt.c /^__db_db_bt_maxkey_4002(argp, clnt)$/
+__db_db_bt_minkey_4002 ../rpc_client/db_server_clnt.c /^__db_db_bt_minkey_4002(argp, clnt)$/
+__db_db_close_4002 ../rpc_client/db_server_clnt.c /^__db_db_close_4002(argp, clnt)$/
+__db_db_create_4002 ../rpc_client/db_server_clnt.c /^__db_db_create_4002(argp, clnt)$/
+__db_db_cursor_4002 ../rpc_client/db_server_clnt.c /^__db_db_cursor_4002(argp, clnt)$/
+__db_db_del_4002 ../rpc_client/db_server_clnt.c /^__db_db_del_4002(argp, clnt)$/
+__db_db_encrypt_4002 ../rpc_client/db_server_clnt.c /^__db_db_encrypt_4002(argp, clnt)$/
+__db_db_extentsize_4002 ../rpc_client/db_server_clnt.c /^__db_db_extentsize_4002(argp, clnt)$/
+__db_db_flags_4002 ../rpc_client/db_server_clnt.c /^__db_db_flags_4002(argp, clnt)$/
+__db_db_get_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_4002(argp, clnt)$/
+__db_db_get_bt_minkey_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_bt_minkey_4002(argp, clnt)$/
+__db_db_get_encrypt_flags_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_encrypt_flags_4002(argp, clnt)$/
+__db_db_get_extentsize_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_extentsize_4002(argp, clnt)$/
+__db_db_get_flags_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_flags_4002(argp, clnt)$/
+__db_db_get_h_ffactor_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_h_ffactor_4002(argp, clnt)$/
+__db_db_get_h_nelem_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_h_nelem_4002(argp, clnt)$/
+__db_db_get_lorder_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_lorder_4002(argp, clnt)$/
+__db_db_get_name_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_name_4002(argp, clnt)$/
+__db_db_get_open_flags_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_open_flags_4002(argp, clnt)$/
+__db_db_get_pagesize_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_pagesize_4002(argp, clnt)$/
+__db_db_get_re_delim_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_re_delim_4002(argp, clnt)$/
+__db_db_get_re_len_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_re_len_4002(argp, clnt)$/
+__db_db_get_re_pad_4002 ../rpc_client/db_server_clnt.c /^__db_db_get_re_pad_4002(argp, clnt)$/
+__db_db_h_ffactor_4002 ../rpc_client/db_server_clnt.c /^__db_db_h_ffactor_4002(argp, clnt)$/
+__db_db_h_nelem_4002 ../rpc_client/db_server_clnt.c /^__db_db_h_nelem_4002(argp, clnt)$/
+__db_db_join_4002 ../rpc_client/db_server_clnt.c /^__db_db_join_4002(argp, clnt)$/
+__db_db_key_range_4002 ../rpc_client/db_server_clnt.c /^__db_db_key_range_4002(argp, clnt)$/
+__db_db_lorder_4002 ../rpc_client/db_server_clnt.c /^__db_db_lorder_4002(argp, clnt)$/
+__db_db_open_4002 ../rpc_client/db_server_clnt.c /^__db_db_open_4002(argp, clnt)$/
+__db_db_pagesize_4002 ../rpc_client/db_server_clnt.c /^__db_db_pagesize_4002(argp, clnt)$/
+__db_db_pget_4002 ../rpc_client/db_server_clnt.c /^__db_db_pget_4002(argp, clnt)$/
+__db_db_put_4002 ../rpc_client/db_server_clnt.c /^__db_db_put_4002(argp, clnt)$/
+__db_db_re_delim_4002 ../rpc_client/db_server_clnt.c /^__db_db_re_delim_4002(argp, clnt)$/
+__db_db_re_len_4002 ../rpc_client/db_server_clnt.c /^__db_db_re_len_4002(argp, clnt)$/
+__db_db_re_pad_4002 ../rpc_client/db_server_clnt.c /^__db_db_re_pad_4002(argp, clnt)$/
+__db_db_remove_4002 ../rpc_client/db_server_clnt.c /^__db_db_remove_4002(argp, clnt)$/
+__db_db_rename_4002 ../rpc_client/db_server_clnt.c /^__db_db_rename_4002(argp, clnt)$/
+__db_db_stat_4002 ../rpc_client/db_server_clnt.c /^__db_db_stat_4002(argp, clnt)$/
+__db_db_sync_4002 ../rpc_client/db_server_clnt.c /^__db_db_sync_4002(argp, clnt)$/
+__db_db_truncate_4002 ../rpc_client/db_server_clnt.c /^__db_db_truncate_4002(argp, clnt)$/
+__db_dbc_close_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_close_4002(argp, clnt)$/
+__db_dbc_count_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_count_4002(argp, clnt)$/
+__db_dbc_del_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_del_4002(argp, clnt)$/
+__db_dbc_dup_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_dup_4002(argp, clnt)$/
+__db_dbc_get_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_get_4002(argp, clnt)$/
+__db_dbc_pget_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_pget_4002(argp, clnt)$/
+__db_dbc_put_4002 ../rpc_client/db_server_clnt.c /^__db_dbc_put_4002(argp, clnt)$/
+__db_dbenv_mpool ../db/db.c /^__db_dbenv_mpool(dbp, fname, flags)$/
+__db_dbenv_setup ../db/db.c /^__db_dbenv_setup(dbp, txn, fname, id, flags)$/
__db_dbm_close ../dbm/dbm.c /^__db_dbm_close()$/
__db_dbm_delete ../dbm/dbm.c /^__db_dbm_delete(key)$/
__db_dbm_fetch ../dbm/dbm.c /^__db_dbm_fetch(key)$/
@@ -1489,135 +2087,287 @@ __db_dbm_firstkey ../dbm/dbm.c /^__db_dbm_firstkey()$/
__db_dbm_init ../dbm/dbm.c /^__db_dbm_init(file)$/
__db_dbm_nextkey ../dbm/dbm.c /^__db_dbm_nextkey(key)$/
__db_dbm_store ../dbm/dbm.c /^__db_dbm_store(key, dat)$/
-__db_dbopen ../db/db.c /^__db_dbopen(dbp, name, flags, mode, meta_pgno)$/
-__db_dbt ../include/db.in /^struct __db_dbt {$/
-__db_dbtype_to_string ../db/db_pr.c /^__db_dbtype_to_string(dbp)$/
+__db_dbtxn_remove ../db/db_remove.c /^__db_dbtxn_remove(dbp, txn, name)$/
+__db_dbtype_to_string ../db/db_pr.c /^__db_dbtype_to_string(type)$/
+__db_debug_getpgnos ../db/db_auto.c /^__db_debug_getpgnos(dbenv, rec, lsnp, notused1, su/
__db_debug_log ../db/db_auto.c /^__db_debug_log(dbenv, txnid, ret_lsnp, flags,$/
__db_debug_print ../db/db_auto.c /^__db_debug_print(dbenv, dbtp, lsnp, notused2, notu/
__db_debug_read ../db/db_auto.c /^__db_debug_read(dbenv, recbuf, argpp)$/
__db_debug_recover ../db/db_rec.c /^__db_debug_recover(dbenv, dbtp, lsnp, op, info)$/
-__db_del_proc ../rpc_server/db_server_proc.c /^__db_del_proc(dbpcl_id, txnpcl_id, keydlen,$/
-__db_delchk ../db/db_iface.c /^__db_delchk(dbp, key, flags, isrdonly)$/
-__db_delete ../db/db_am.c /^__db_delete(dbp, txn, key, flags)$/
-__db_des_destroy ../env/env_region.c /^__db_des_destroy(dbenv, rp)$/
+__db_default_getpgnos ../db/db_dispatch.c /^__db_default_getpgnos(dbenv, lsnp, summary)$/
+__db_del ../db/db_am.c /^__db_del(dbp, txn, key, flags)$/
+__db_del_arg ../db/db_iface.c /^__db_del_arg(dbp, flags)$/
+__db_del_pp ../db/db_iface.c /^__db_del_pp(dbp, txn, key, flags)$/
+__db_del_proc ../rpc_server/c/db_server_proc.c /^__db_del_proc(dbpcl_id, txnpcl_id, keydlen,$/
+__db_derive_mac ../hmac/hmac.c /^__db_derive_mac(passwd, plen, mac_key)$/
+__db_des_destroy ../env/env_region.c /^__db_des_destroy(dbenv, rp, shmem_safe)$/
__db_des_get ../env/env_region.c /^__db_des_get(dbenv, env_infop, infop, rpp)$/
-__db_dispatch ../db/db_dispatch.c /^__db_dispatch(dbenv, db, lsnp, redo, info)$/
+__db_disassociate ../db/db.c /^__db_disassociate(sdbp)$/
+__db_dispatch ../db/db_dispatch.c /^__db_dispatch(dbenv, dtab, dtabsize, db, lsnp, red/
__db_ditem ../db/db_dup.c /^__db_ditem(dbc, pagep, indx, nbytes)$/
-__db_do_the_limbo ../db/db_dispatch.c /^__db_do_the_limbo(dbenv, hp)$/
+__db_do_the_limbo ../db/db_dispatch.c /^__db_do_the_limbo(dbenv, ptxn, txn, hp, state)$/
__db_doff ../db/db_overflow.c /^__db_doff(dbc, pgno)$/
__db_dump ../db/db_pr.c /^__db_dump(dbp, op, name)$/
__db_duperr ../db/db_cam.c /^__db_duperr(dbp, flags)$/
__db_e_attach ../env/env_region.c /^__db_e_attach(dbenv, init_flagsp)$/
__db_e_detach ../env/env_region.c /^__db_e_detach(dbenv, destroy)$/
__db_e_remfile ../env/env_region.c /^__db_e_remfile(dbenv)$/
-__db_e_remove ../env/env_region.c /^__db_e_remove(dbenv, force)$/
+__db_e_remove ../env/env_region.c /^__db_e_remove(dbenv, flags)$/
__db_e_stat ../env/env_region.c /^__db_e_stat(dbenv, arg_renv, arg_regions, arg_regi/
-__db_env ../include/db.in /^struct __db_env {$/
-__db_env_cachesize_3003 ../rpc_client/db_server_clnt.c /^__db_env_cachesize_3003(argp, clnt)$/
-__db_env_close_3003 ../rpc_client/db_server_clnt.c /^__db_env_close_3003(argp, clnt)$/
+__db_encrypt_proc ../rpc_server/c/db_server_proc.c /^__db_encrypt_proc(dbpcl_id, passwd, flags, replyp)/
+__db_env_cachesize_4002 ../rpc_client/db_server_clnt.c /^__db_env_cachesize_4002(argp, clnt)$/
+__db_env_close ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_close(struct __db_env *se/
+__db_env_close_4002 ../rpc_client/db_server_clnt.c /^__db_env_close_4002(argp, clnt)$/
__db_env_config ../env/env_method.c /^__db_env_config(dbenv, i, flags)$/
-__db_env_create_3003 ../rpc_client/db_server_clnt.c /^__db_env_create_3003(argp, clnt)$/
-__db_env_flags_3003 ../rpc_client/db_server_clnt.c /^__db_env_flags_3003(argp, clnt)$/
-__db_env_open_3003 ../rpc_client/db_server_clnt.c /^__db_env_open_3003(argp, clnt)$/
-__db_env_remove_3003 ../rpc_client/db_server_clnt.c /^__db_env_remove_3003(argp, clnt)$/
-__db_eopnotsup ../common/db_err.c /^__db_eopnotsup(dbenv)$/
-__db_err ../common/db_err.c /^__db_err(dbenv, fmt, va_alist)$/
+__db_env_create_4002 ../rpc_client/db_server_clnt.c /^__db_env_create_4002(argp, clnt)$/
+__db_env_dbremove ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_dbremove(struct __db_env /
+__db_env_dbremove_4002 ../rpc_client/db_server_clnt.c /^__db_env_dbremove_4002(argp, clnt)$/
+__db_env_dbrename ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_dbrename(struct __db_env /
+__db_env_dbrename_4002 ../rpc_client/db_server_clnt.c /^__db_env_dbrename_4002(argp, clnt)$/
+__db_env_encrypt_4002 ../rpc_client/db_server_clnt.c /^__db_env_encrypt_4002(argp, clnt)$/
+__db_env_err ../libdb_java/db_java_wrap.c /^static void __db_env_err(struct __db_env *self,int/
+__db_env_errx ../libdb_java/db_java_wrap.c /^static void __db_env_errx(struct __db_env *self,ch/
+__db_env_flags_4002 ../rpc_client/db_server_clnt.c /^__db_env_flags_4002(argp, clnt)$/
+__db_env_get_cachesize ../libdb_java/db_java_wrap.c /^static jlong __db_env_get_cachesize(struct __db_en/
+__db_env_get_cachesize_4002 ../rpc_client/db_server_clnt.c /^__db_env_get_cachesize_4002(argp, clnt)$/
+__db_env_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^static int __db_env_get_cachesize_ncache(struct __/
+__db_env_get_data_dirs ../libdb_java/db_java_wrap.c /^static char const **__db_env_get_data_dirs(struct /
+__db_env_get_encrypt_flags ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_encrypt_flags(struct/
+__db_env_get_encrypt_flags_4002 ../rpc_client/db_server_clnt.c /^__db_env_get_encrypt_flags_4002(argp, clnt)$/
+__db_env_get_flags ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_flags(struct __db_en/
+__db_env_get_flags_4002 ../rpc_client/db_server_clnt.c /^__db_env_get_flags_4002(argp, clnt)$/
+__db_env_get_home ../libdb_java/db_java_wrap.c /^static char const *__db_env_get_home(struct __db_e/
+__db_env_get_home_4002 ../rpc_client/db_server_clnt.c /^__db_env_get_home_4002(argp, clnt)$/
+__db_env_get_lg_bsize ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lg_bsize(struct __db/
+__db_env_get_lg_dir ../libdb_java/db_java_wrap.c /^static char const *__db_env_get_lg_dir(struct __db/
+__db_env_get_lg_max ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lg_max(struct __db_e/
+__db_env_get_lg_regionmax ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lg_regionmax(struct /
+__db_env_get_lk_conflicts ../libdb_java/db_java_wrap.c /^static struct __db_lk_conflicts __db_env_get_lk_co/
+__db_env_get_lk_detect ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lk_detect(struct __d/
+__db_env_get_lk_max_lockers ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lk_max_lockers(struc/
+__db_env_get_lk_max_locks ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lk_max_locks(struct /
+__db_env_get_lk_max_objects ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_lk_max_objects(struc/
+__db_env_get_mp_mmapsize ../libdb_java/db_java_wrap.c /^static size_t __db_env_get_mp_mmapsize(struct __db/
+__db_env_get_open_flags ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_open_flags(struct __/
+__db_env_get_open_flags_4002 ../rpc_client/db_server_clnt.c /^__db_env_get_open_flags_4002(argp, clnt)$/
+__db_env_get_rep_limit ../libdb_java/db_java_wrap.c /^static jlong __db_env_get_rep_limit(struct __db_en/
+__db_env_get_shm_key ../libdb_java/db_java_wrap.c /^static long __db_env_get_shm_key(struct __db_env */
+__db_env_get_tas_spins ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_tas_spins(struct __d/
+__db_env_get_timeout ../libdb_java/db_java_wrap.c /^static db_timeout_t __db_env_get_timeout(struct __/
+__db_env_get_tmp_dir ../libdb_java/db_java_wrap.c /^static char const *__db_env_get_tmp_dir(struct __d/
+__db_env_get_tx_max ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_get_tx_max(struct __db_e/
+__db_env_get_tx_timestamp ../libdb_java/db_java_wrap.c /^static time_t __db_env_get_tx_timestamp(struct __d/
+__db_env_get_verbose ../libdb_java/db_java_wrap.c /^static int_bool __db_env_get_verbose(struct __db_e/
+__db_env_lock_detect ../libdb_java/db_java_wrap.c /^static int __db_env_lock_detect(struct __db_env *s/
+__db_env_lock_get ../libdb_java/db_java_wrap.c /^static DB_LOCK *__db_env_lock_get(struct __db_env /
+__db_env_lock_id ../libdb_java/db_java_wrap.c /^static u_int32_t __db_env_lock_id(struct __db_env /
+__db_env_lock_id_free ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_lock_id_free(struct __db_/
+__db_env_lock_put ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_lock_put(struct __db_env /
+__db_env_lock_stat ../libdb_java/db_java_wrap.c /^static DB_LOCK_STAT *__db_env_lock_stat(struct __d/
+__db_env_log_archive ../libdb_java/db_java_wrap.c /^static char **__db_env_log_archive(struct __db_env/
+__db_env_log_cursor ../libdb_java/db_java_wrap.c /^static DB_LOGC *__db_env_log_cursor(struct __db_en/
+__db_env_log_file ../libdb_java/db_java_wrap.c /^static char *__db_env_log_file(struct __db_env *se/
+__db_env_log_flush ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_log_flush(struct __db_env/
+__db_env_log_put ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_log_put(struct __db_env */
+__db_env_log_stat ../libdb_java/db_java_wrap.c /^static DB_LOG_STAT *__db_env_log_stat(struct __db_/
+__db_env_memp_fstat ../libdb_java/db_java_wrap.c /^static DB_MPOOL_FSTAT **__db_env_memp_fstat(struct/
+__db_env_memp_stat ../libdb_java/db_java_wrap.c /^static DB_MPOOL_STAT *__db_env_memp_stat(struct __/
+__db_env_memp_trickle ../libdb_java/db_java_wrap.c /^static int __db_env_memp_trickle(struct __db_env */
+__db_env_open ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_open(struct __db_env *sel/
+__db_env_open_4002 ../rpc_client/db_server_clnt.c /^__db_env_open_4002(argp, clnt)$/
+__db_env_remove ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_remove(struct __db_env *s/
+__db_env_remove_4002 ../rpc_client/db_server_clnt.c /^__db_env_remove_4002(argp, clnt)$/
+__db_env_rep_elect ../libdb_java/db_java_wrap.c /^static int __db_env_rep_elect(struct __db_env *sel/
+__db_env_rep_process_message ../libdb_java/db_java_wrap.c /^static int __db_env_rep_process_message(struct __d/
+__db_env_rep_start ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_rep_start(struct __db_env/
+__db_env_rep_stat ../libdb_java/db_java_wrap.c /^static DB_REP_STAT *__db_env_rep_stat(struct __db_/
+__db_env_set_app_dispatch ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_app_dispatch(struct _/
+__db_env_set_cachesize ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_cachesize(struct __db/
+__db_env_set_data_dir ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_data_dir(struct __db_/
+__db_env_set_encrypt ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_encrypt(struct __db_e/
+__db_env_set_errcall ../libdb_java/db_java_wrap.c /^static void __db_env_set_errcall(struct __db_env */
+__db_env_set_feedback ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_feedback(struct __db_/
+__db_env_set_flags ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_flags(struct __db_env/
+__db_env_set_lg_bsize ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lg_bsize(struct __db_/
+__db_env_set_lg_dir ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lg_dir(struct __db_en/
+__db_env_set_lg_max ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lg_max(struct __db_en/
+__db_env_set_lg_regionmax ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lg_regionmax(struct _/
+__db_env_set_lk_conflicts ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lk_conflicts(struct _/
+__db_env_set_lk_detect ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lk_detect(struct __db/
+__db_env_set_lk_max_lockers ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lk_max_lockers(struct/
+__db_env_set_lk_max_locks ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lk_max_locks(struct _/
+__db_env_set_lk_max_objects ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_lk_max_objects(struct/
+__db_env_set_mp_mmapsize ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_mp_mmapsize(struct __/
+__db_env_set_paniccall ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_paniccall(struct __db/
+__db_env_set_rep_limit ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_rep_limit(struct __db/
+__db_env_set_rep_transport ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_rep_transport(struct /
+__db_env_set_rpc_server ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_rpc_server(struct __d/
+__db_env_set_shm_key ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_shm_key(struct __db_e/
+__db_env_set_tas_spins ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_tas_spins(struct __db/
+__db_env_set_timeout ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_timeout(struct __db_e/
+__db_env_set_tmp_dir ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_tmp_dir(struct __db_e/
+__db_env_set_tx_max ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_tx_max(struct __db_en/
+__db_env_set_tx_timestamp ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_tx_timestamp(struct _/
+__db_env_set_verbose ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_set_verbose(struct __db_e/
+__db_env_txn_begin ../libdb_java/db_java_wrap.c /^static DB_TXN *__db_env_txn_begin(struct __db_env /
+__db_env_txn_checkpoint ../libdb_java/db_java_wrap.c /^static db_ret_t __db_env_txn_checkpoint(struct __d/
+__db_env_txn_recover ../libdb_java/db_java_wrap.c /^static DB_PREPLIST *__db_env_txn_recover(struct __/
+__db_env_txn_stat ../libdb_java/db_java_wrap.c /^static DB_TXN_STAT *__db_env_txn_stat(struct __db_/
+__db_err ../common/db_err.c /^__db_err(const DB_ENV *dbenv, const char *fmt, .../
+__db_err_internal ../libdb_java/db_java_wrap.c /^static void __db_err_internal(struct __db *self,in/
__db_errcall ../common/db_err.c /^__db_errcall(dbenv, error, error_set, fmt, ap)$/
__db_errfile ../common/db_err.c /^__db_errfile(dbenv, error, error_set, fmt, ap)$/
-__db_extentsize_proc ../rpc_server/db_server_proc.c /^__db_extentsize_proc(dbpcl_id, extentsize, replyp)/
-__db_faultmem ../env/env_region.c /^__db_faultmem(addr, size, created)$/
+__db_errx ../libdb_java/db_java_wrap.c /^static void __db_errx(struct __db *self,char const/
+__db_extentsize_proc ../rpc_server/c/db_server_proc.c /^__db_extentsize_proc(dbpcl_id, extentsize, replyp)/
+__db_faultmem ../env/env_region.c /^__db_faultmem(dbenv, addr, size, created)$/
__db_fcchk ../common/db_err.c /^__db_fcchk(dbenv, name, flags, flag1, flag2)$/
__db_fchk ../common/db_err.c /^__db_fchk(dbenv, name, flags, ok_flags)$/
__db_fcntl_mutex_destroy ../mutex/mut_fcntl.c /^__db_fcntl_mutex_destroy(mutexp)$/
__db_fcntl_mutex_init ../mutex/mut_fcntl.c /^__db_fcntl_mutex_init(dbenv, mutexp, offset)$/
-__db_fcntl_mutex_lock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_lock(dbenv, mutexp, fhp)$/
+__db_fcntl_mutex_lock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_lock(dbenv, mutexp)$/
__db_fcntl_mutex_unlock ../mutex/mut_fcntl.c /^__db_fcntl_mutex_unlock(dbenv, mutexp)$/
-__db_fd ../db/db_am.c /^__db_fd(dbp, fdp)$/
+__db_fd_pp ../db/db_iface.c /^__db_fd_pp(dbp, fdp)$/
__db_ferr ../common/db_err.c /^__db_ferr(dbenv, name, iscombo)$/
-__db_file_setup ../db/db.c /^__db_file_setup(dbp, name, flags, mode, meta_pgno,/
-__db_fileid_to_db ../log/log_rec.c /^__db_fileid_to_db(dbenv, dbpp, ndx, inc)$/
-__db_flags_proc ../rpc_server/db_server_proc.c /^__db_flags_proc(dbpcl_id, flags, replyp)$/
+__db_fileinit ../env/env_file.c /^__db_fileinit(dbenv, fhp, size, zerofill)$/
+__db_flags_proc ../rpc_server/c/db_server_proc.c /^__db_flags_proc(dbpcl_id, flags, replyp)$/
+__db_fnl ../common/db_err.c /^__db_fnl(dbenv, name)$/
__db_free ../db/db_meta.c /^__db_free(dbc, h)$/
-__db_get ../db/db_am.c /^__db_get(dbp, txn, key, data, flags)$/
-__db_get_byteswapped ../db/db_method.c /^__db_get_byteswapped(dbp)$/
-__db_get_proc ../rpc_server/db_server_proc.c /^__db_get_proc(dbpcl_id, txnpcl_id, keydlen,$/
-__db_get_type ../db/db_method.c /^__db_get_type(dbp)$/
-__db_getchk ../db/db_iface.c /^__db_getchk(dbp, key, data, flags)$/
-__db_getlong ../common/db_getlong.c /^__db_getlong(dbp, progname, p, min, max, storep)$/
-__db_getulong ../common/db_getlong.c /^__db_getulong(dbp, progname, p, min, max, storep)$/
+__db_generate_iv ../crypto/mersenne/mt19937db.c /^__db_generate_iv(dbenv, iv)$/
+__db_genrand ../crypto/mersenne/mt19937db.c /^__db_genrand(dbenv)$/
+__db_get ../db/db_iface.c /^__db_get(dbp, txn, key, data, flags)$/
+__db_get__SWIG_0 ../libdb_java/db_java_wrap.c /^static int __db_get__SWIG_0(struct __db *self,DB_T/
+__db_get_arg ../db/db_iface.c /^__db_get_arg(dbp, key, data, flags)$/
+__db_get_bt_minkey ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_bt_minkey(struct __db *s/
+__db_get_bt_minkey_proc ../rpc_server/c/db_server_proc.c /^__db_get_bt_minkey_proc(dbpcl_id, replyp)$/
+__db_get_byteswapped ../db/db_method.c /^__db_get_byteswapped(dbp, isswapped)$/
+__db_get_cachesize ../db/db_method.c /^__db_get_cachesize(dbp, cache_gbytesp, cache_bytes/
+__db_get_cachesize_ncache ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_cachesize_ncache(struct /
+__db_get_dbname ../db/db_method.c /^__db_get_dbname(dbp, fnamep, dnamep)$/
+__db_get_encrypt_flags ../db/db_method.c /^__db_get_encrypt_flags(dbp, flagsp)$/
+__db_get_encrypt_flags_proc ../rpc_server/c/db_server_proc.c /^__db_get_encrypt_flags_proc(dbpcl_id, replyp)$/
+__db_get_env ../db/db_method.c /^__db_get_env(dbp, dbenvp)$/
+__db_get_errfile ../db/db_method.c /^__db_get_errfile(dbp, errfilep)$/
+__db_get_errpfx ../db/db_method.c /^__db_get_errpfx(dbp, errpfxp)$/
+__db_get_extentsize_proc ../rpc_server/c/db_server_proc.c /^__db_get_extentsize_proc(dbpcl_id, replyp)$/
+__db_get_filename ../libdb_java/db_java_wrap.c /^static char const *__db_get_filename(struct __db */
+__db_get_flags ../db/db_method.c /^__db_get_flags(dbp, flagsp)$/
+__db_get_flags_proc ../rpc_server/c/db_server_proc.c /^__db_get_flags_proc(dbpcl_id, replyp)$/
+__db_get_flags_raw ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_flags_raw(struct __db *s/
+__db_get_h_ffactor ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_h_ffactor(struct __db *s/
+__db_get_h_ffactor_proc ../rpc_server/c/db_server_proc.c /^__db_get_h_ffactor_proc(dbpcl_id, replyp)$/
+__db_get_h_nelem ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_h_nelem(struct __db *sel/
+__db_get_h_nelem_proc ../rpc_server/c/db_server_proc.c /^__db_get_h_nelem_proc(dbpcl_id, replyp)$/
+__db_get_lorder ../db/db_method.c /^__db_get_lorder(dbp, db_lorderp)$/
+__db_get_lorder_proc ../rpc_server/c/db_server_proc.c /^__db_get_lorder_proc(dbpcl_id, replyp)$/
+__db_get_mpf ../libdb_java/db_java_wrap.c /^static DB_MPOOLFILE *__db_get_mpf(struct __db *sel/
+__db_get_name_proc ../rpc_server/c/db_server_proc.c /^__db_get_name_proc(dbpcl_id, replyp)$/
+__db_get_open_flags ../db/db_open.c /^__db_get_open_flags(dbp, flagsp)$/
+__db_get_open_flags_proc ../rpc_server/c/db_server_proc.c /^__db_get_open_flags_proc(dbpcl_id, replyp)$/
+__db_get_pagesize ../db/db_method.c /^__db_get_pagesize(dbp, db_pagesizep)$/
+__db_get_pagesize_proc ../rpc_server/c/db_server_proc.c /^__db_get_pagesize_proc(dbpcl_id, replyp)$/
+__db_get_pp ../db/db_iface.c /^__db_get_pp(dbp, txn, key, data, flags)$/
+__db_get_proc ../rpc_server/c/db_server_proc.c /^__db_get_proc(dbpcl_id, txnpcl_id, keydlen,$/
+__db_get_q_extentsize ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_q_extentsize(struct __db/
+__db_get_re_delim ../libdb_java/db_java_wrap.c /^static int __db_get_re_delim(struct __db *self){$/
+__db_get_re_delim_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_delim_proc(dbpcl_id, replyp)$/
+__db_get_re_len ../libdb_java/db_java_wrap.c /^static u_int32_t __db_get_re_len(struct __db *self/
+__db_get_re_len_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_len_proc(dbpcl_id, replyp)$/
+__db_get_re_pad ../libdb_java/db_java_wrap.c /^static int __db_get_re_pad(struct __db *self){$/
+__db_get_re_pad_proc ../rpc_server/c/db_server_proc.c /^__db_get_re_pad_proc(dbpcl_id, replyp)$/
+__db_get_re_source ../libdb_java/db_java_wrap.c /^static char const *__db_get_re_source(struct __db /
+__db_get_transactional ../db/db_method.c /^__db_get_transactional(dbp, istxnp)$/
+__db_get_type ../db/db_method.c /^__db_get_type(dbp, dbtype)$/
+__db_getlong ../common/db_getlong.c /^__db_getlong(dbenv, progname, p, min, max, storep)/
+__db_getulong ../common/db_getlong.c /^__db_getulong(dbenv, progname, p, min, max, storep/
__db_goff ../db/db_overflow.c /^__db_goff(dbp, dbt, tlen, pgno, bpp, bpsz)$/
__db_guesspgsize ../db/db_vrfy.c /^__db_guesspgsize(dbenv, fhp)$/
-__db_h_ffactor_proc ../rpc_server/db_server_proc.c /^__db_h_ffactor_proc(dbpcl_id, ffactor, replyp)$/
-__db_h_nelem_proc ../rpc_server/db_server_proc.c /^__db_h_nelem_proc(dbpcl_id, nelem, replyp)$/
-__db_h_stat ../include/db.in /^struct __db_h_stat {$/
+__db_h_ffactor_proc ../rpc_server/c/db_server_proc.c /^__db_h_ffactor_proc(dbpcl_id, ffactor, replyp)$/
+__db_h_nelem_proc ../rpc_server/c/db_server_proc.c /^__db_h_nelem_proc(dbpcl_id, nelem, replyp)$/
__db_hashinit ../env/db_shash.c /^__db_hashinit(begin, nelements)$/
__db_hcreate ../hsearch/hsearch.c /^__db_hcreate(nel)$/
__db_hdestroy ../hsearch/hsearch.c /^__db_hdestroy()$/
+__db_hmac ../hmac/hmac.c /^__db_hmac(k, data, data_len, mac)$/
__db_hmeta ../db/db_pr.c /^__db_hmeta(dbp, fp, h, flags)$/
__db_home ../env/env_open.c /^__db_home(dbenv, db_home, flags)$/
__db_hsearch ../hsearch/hsearch.c /^__db_hsearch(item, action)$/
-__db_icursor ../db/db_am.c /^__db_icursor(dbp, txn, dbtype, root, is_opd, locke/
-__db_ilock ../include/db.in /^struct __db_ilock {$/
+__db_idcmp ../common/db_idspace.c /^__db_idcmp(a, b)$/
+__db_idspace ../common/db_idspace.c /^__db_idspace(inuse, n, minp, maxp)$/
+__db_infohead ../dbinc/tcl_db.h 155
__db_init ../db/db_method.c /^__db_init(dbp, flags)$/
-__db_init_print ../db/db_auto.c /^__db_init_print(dbenv)$/
-__db_init_recover ../db/db_auto.c /^__db_init_recover(dbenv)$/
+__db_init_getpgnos ../db/db_auto.c /^__db_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__db_init_meta ../db/db_meta.c /^__db_init_meta(dbp, p, pgno, pgtype)$/
+__db_init_print ../db/db_auto.c /^__db_init_print(dbenv, dtabp, dtabsizep)$/
+__db_init_recover ../db/db_auto.c /^__db_init_recover(dbenv, dtabp, dtabsizep)$/
+__db_init_subdb ../db/db_open.c /^__db_init_subdb(mdbp, dbp, name, txn)$/
+__db_inmemdbflags ../db/db_pr.c /^__db_inmemdbflags(flags, cookie, callback)$/
__db_is_valid_magicno ../db/db_vrfy.c /^__db_is_valid_magicno(magic, typep)$/
__db_is_valid_pagetype ../db/db_vrfy.c /^__db_is_valid_pagetype(type)$/
+__db_isbigendian ../common/db_byteorder.c /^__db_isbigendian()$/
__db_join ../db/db_join.c /^__db_join(primary, curslist, dbcp, flags)$/
+__db_join_arg ../db/db_iface.c /^__db_join_arg(primary, curslist, flags)$/
__db_join_close ../db/db_join.c /^__db_join_close(dbc)$/
+__db_join_close_pp ../db/db_join.c /^__db_join_close_pp(dbc)$/
__db_join_cmp ../db/db_join.c /^__db_join_cmp(a, b)$/
__db_join_del ../db/db_join.c /^__db_join_del(dbc, flags)$/
__db_join_get ../db/db_join.c /^__db_join_get(dbc, key_arg, data_arg, flags)$/
+__db_join_get_pp ../db/db_join.c /^__db_join_get_pp(dbc, key, data, flags)$/
__db_join_getnext ../db/db_join.c /^__db_join_getnext(dbc, key, data, exhausted, opmod/
-__db_join_proc ../rpc_server/db_server_proc.c /^__db_join_proc(dbpcl_id, curs, curslen,$/
+__db_join_pp ../db/db_iface.c /^__db_join_pp(primary, curslist, dbcp, flags)$/
+__db_join_primget ../db/db_join.c /^__db_join_primget(dbp, txn, lockerid, key, data, f/
+__db_join_proc ../rpc_server/c/db_server_proc.c /^__db_join_proc(dbpcl_id, curs, curslen,$/
__db_join_put ../db/db_join.c /^__db_join_put(dbc, key, data, flags)$/
-__db_joinchk ../db/db_iface.c /^__db_joinchk(dbp, curslist, flags)$/
-__db_joingetchk ../db/db_iface.c /^__db_joingetchk(dbp, key, flags)$/
-__db_jumptab ../include/os_jump.h /^struct __db_jumptab {$/
-__db_key_range ../db/db_method.c /^__db_key_range(dbp, txn, key, kr, flags)$/
-__db_key_range_proc ../rpc_server/db_server_proc.c /^__db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,$/
+__db_key_range ../libdb_java/db_java_wrap.c /^static db_ret_t __db_key_range(struct __db *self,D/
+__db_key_range_pp ../db/db_iface.c /^__db_key_range_pp(dbp, txn, key, kr, flags)$/
+__db_key_range_proc ../rpc_server/c/db_server_proc.c /^__db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,$/
__db_lastpgno ../db/db_upg.c /^__db_lastpgno(dbp, real_name, fhp, pgno_lastp)$/
-__db_lget ../db/db_meta.c /^__db_lget(dbc, flags, pgno, mode, lkflags, lockp)$/
+__db_lget ../db/db_meta.c /^__db_lget(dbc, action, pgno, mode, lkflags, lockp)/
+__db_limbo_bucket ../db/db_dispatch.c /^__db_limbo_bucket(dbenv, txn, elp, state)$/
+__db_limbo_fix ../db/db_dispatch.c /^__db_limbo_fix(dbp, ctxn, elp, lastp, meta, state)/
+__db_limbo_move ../db/db_dispatch.c /^__db_limbo_move(dbenv, ptxn, txn, elp)$/
+__db_limbo_prepare ../db/db_dispatch.c /^__db_limbo_prepare(dbp, txn, elp)$/
__db_loadme ../db/db_pr.c /^__db_loadme()$/
-__db_lock ../include/lock.h /^struct __db_lock {$/
-__db_lock_stat ../include/db.in /^struct __db_lock_stat {$/
-__db_lock_u ../include/db.in /^struct __db_lock_u {$/
-__db_lockreq ../include/db.in /^struct __db_lockreq {$/
-__db_log ../include/log.h /^struct __db_log {$/
+__db_lock_move ../db/db_dispatch.c /^__db_lock_move(dbenv, fileid, pgno, mode, ptxn, tx/
__db_log2 ../common/db_log2.c /^__db_log2(num)$/
-__db_log_page ../db/db.c /^__db_log_page(dbp, name, lsn, pgno, page)$/
-__db_log_stat ../include/db.in /^struct __db_log_stat {$/
-__db_logmsg ../common/db_err.c /^__db_logmsg(dbenv, txnid, opname, flags, fmt, va_a/
-__db_lorder_proc ../rpc_server/db_server_proc.c /^__db_lorder_proc(dbpcl_id, lorder, replyp)$/
+__db_log_cursor_close ../libdb_java/db_java_wrap.c /^static db_ret_t __db_log_cursor_close(struct __db_/
+__db_log_cursor_get ../libdb_java/db_java_wrap.c /^static int __db_log_cursor_get(struct __db_log_cur/
+__db_log_page ../db/db.c /^__db_log_page(dbp, txn, lsn, pgno, page)$/
+__db_logmsg ../common/db_err.c /^__db_logmsg(const DB_ENV *dbenv,$/
+__db_lorder_proc ../rpc_server/c/db_server_proc.c /^__db_lorder_proc(dbpcl_id, lorder, replyp)$/
__db_lprint ../db/db_meta.c /^__db_lprint(dbc)$/
-__db_lsn ../include/db.in /^struct __db_lsn {$/
-__db_maintinit ../include/mutex.h /^#define __db_maintinit(a, b, c) __db_shreg_mainti/
-__db_makecopy ../db/db.c /^__db_makecopy(src, dest)$/
+__db_lput ../db/db_meta.c /^__db_lput(dbc, lockp)$/
+__db_lsgenrand ../crypto/mersenne/mt19937db.c /^__db_lsgenrand(seed_array, mt, mtip)$/
+__db_lsn_get_file ../libdb_java/db_java_wrap.c /^static u_int32_t __db_lsn_get_file(struct __db_lsn/
+__db_lsn_get_offset ../libdb_java/db_java_wrap.c /^static u_int32_t __db_lsn_get_offset(struct __db_l/
+__db_maintinit ../dbinc/mutex.h /^#define __db_maintinit(a, b, c) __db_shreg_mainti/
+__db_makeKey ../crypto/rijndael/rijndael-api-fst.c /^__db_makeKey(key, direction, keyLen, keyMaterial)$/
+__db_makecopy ../db/db.c /^__db_makecopy(dbenv, src, dest)$/
+__db_map_flags ../db/db_method.c /^__db_map_flags(dbp, inflagsp, outflagsp)$/
__db_map_rmid ../xa/xa_map.c /^__db_map_rmid(rmid, env)$/
__db_map_xid ../xa/xa_map.c /^__db_map_xid(env, xid, off)$/
-__db_master_open ../db/db.c /^__db_master_open(subdbp, name, flags, mode, dbpp)$/
-__db_master_update ../db/db.c /^__db_master_update(mdbp, subdb, type, meta_pgnop, /
+__db_master_open ../db/db.c /^__db_master_open(subdbp, txn, name, flags, mode, d/
+__db_master_update ../db/db.c /^__db_master_update(mdbp, sdbp, txn, subdb, type, a/
__db_meta ../db/db_pr.c /^__db_meta(dbp, dbmeta, fp, fn, flags)$/
__db_meta2pgset ../db/db_vrfy.c /^__db_meta2pgset(dbp, vdp, pgno, flags, pgset)$/
-__db_metabegin ../db/db.c /^__db_metabegin(dbp, lockp)$/
-__db_metaend ../db/db.c /^__db_metaend(dbp, lockp, commit, callback, cookie)/
+__db_meta_setup ../db/db_open.c /^__db_meta_setup(dbenv, dbp, name, meta, oflags, do/
__db_metaswap ../db/db_conv.c /^__db_metaswap(pg)$/
__db_mi_env ../env/env_method.c /^__db_mi_env(dbenv, name)$/
__db_mi_open ../env/env_method.c /^__db_mi_open(dbenv, name, after)$/
-__db_missing_txn_err ../common/db_err.c /^__db_missing_txn_err(dbp)$/
__db_moff ../db/db_overflow.c /^__db_moff(dbp, dbt, pgno, tlen, cmpfunc, cmpp)$/
-__db_mpool ../include/mp.h /^struct __db_mpool {$/
-__db_mpool_finfo ../include/db.in /^struct __db_mpool_finfo {$/
-__db_mpool_fstat ../include/db.in /^struct __db_mpool_fstat {$/
-__db_mpool_stat ../include/db.in /^struct __db_mpool_stat {$/
-__db_mpoolfile ../include/mp.h /^struct __db_mpoolfile {$/
-__db_mpreg ../include/mp.h /^struct __db_mpreg {$/
-__db_mutex_alloc ../mutex/mutex.c /^__db_mutex_alloc(dbenv, infop, is_locked, storep)$/
-__db_mutex_destroy ../include/mutex.h /^#define __db_mutex_destroy(a) __db_pthread_mutex_/
+__db_mpoolfile_get_flags ../libdb_java/db_java_wrap.c /^static u_int32_t __db_mpoolfile_get_flags(struct _/
+__db_mpoolfile_get_maxsize ../libdb_java/db_java_wrap.c /^static jlong __db_mpoolfile_get_maxsize(struct __d/
+__db_mpoolfile_get_priority ../libdb_java/db_java_wrap.c /^static DB_CACHE_PRIORITY __db_mpoolfile_get_priori/
+__db_mpoolfile_set_flags ../libdb_java/db_java_wrap.c /^static db_ret_t __db_mpoolfile_set_flags(struct __/
+__db_mpoolfile_set_maxsize ../libdb_java/db_java_wrap.c /^static db_ret_t __db_mpoolfile_set_maxsize(struct /
+__db_mpoolfile_set_priority ../libdb_java/db_java_wrap.c /^static db_ret_t __db_mpoolfile_set_priority(struct/
+__db_mutex_alloc_int ../mutex/mutex.c /^__db_mutex_alloc_int(dbenv, infop, storep)$/
+__db_mutex_destroy ../dbinc/mutex.h /^#define __db_mutex_destroy(a) __db_pthread_mutex_/
__db_mutex_free ../mutex/mutex.c /^__db_mutex_free(dbenv, infop, mutexp)$/
-__db_mutex_init ../include/mutex.h /^#define __db_mutex_init(a, b, c, d) __db_pthread_m/
-__db_mutex_lock ../include/mutex.h /^#define __db_mutex_lock(a, b, c) __db_pthread_mute/
-__db_mutex_unlock ../include/mutex.h /^#define __db_mutex_unlock(a, b) __db_pthread_mute/
+__db_mutex_init ../dbinc/mutex.h /^#define __db_mutex_init(a, b, c, d, e, f) \\$/
+__db_mutex_init_int ../dbinc/mutex.h /^#define __db_mutex_init_int(a, b, c, d) __db_pthre/
+__db_mutex_lock ../dbinc/mutex.h /^#define __db_mutex_lock(a, b) __db_pthread_mutex_/
+__db_mutex_maint ../mutex/mutex.c /^__db_mutex_maint(dbenv, infop)$/
+__db_mutex_setup ../mutex/mutex.c /^__db_mutex_setup(dbenv, infop, ptr, flags)$/
+__db_mutex_unlock ../dbinc/mutex.h /^#define __db_mutex_unlock(a, b) __db_pthread_mute/
__db_ndbm_clearerr ../dbm/dbm.c /^__db_ndbm_clearerr(dbm)$/
__db_ndbm_close ../dbm/dbm.c /^__db_ndbm_close(dbm)$/
__db_ndbm_delete ../dbm/dbm.c /^__db_ndbm_delete(dbm, key)$/
@@ -1631,93 +2381,137 @@ __db_ndbm_pagfno ../dbm/dbm.c /^__db_ndbm_pagfno(dbm)$/
__db_ndbm_rdonly ../dbm/dbm.c /^__db_ndbm_rdonly(dbm)$/
__db_ndbm_store ../dbm/dbm.c /^__db_ndbm_store(dbm, key, data, flags)$/
__db_new ../db/db_meta.c /^__db_new(dbc, type, pagepp)$/
+__db_new_file ../db/db_open.c /^__db_new_file(dbp, txn, fhp, name)$/
__db_no_open ../dbm/dbm.c /^__db_no_open()$/
-__db_noop_log ../db/db_auto.c /^__db_noop_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_noop_getpgnos ../db/db_auto.c /^__db_noop_getpgnos(dbenv, rec, lsnp, notused1, sum/
+__db_noop_log ../db/db_auto.c /^__db_noop_log(dbp, txnid, ret_lsnp, flags, pgno, p/
__db_noop_print ../db/db_auto.c /^__db_noop_print(dbenv, dbtp, lsnp, notused2, notus/
__db_noop_read ../db/db_auto.c /^__db_noop_read(dbenv, recbuf, argpp)$/
__db_noop_recover ../db/db_rec.c /^__db_noop_recover(dbenv, dbtp, lsnp, op, info)$/
__db_nosystemmem ../os/os_map.c /^__db_nosystemmem(dbenv)$/
-__db_not_txn_env ../common/db_err.c /^__db_not_txn_env(dbp)$/
+__db_not_txn_env ../common/db_err.c /^__db_not_txn_env(dbenv)$/
__db_oflags ../os/os_oflags.c /^__db_oflags(oflags)$/
__db_omode ../os/os_oflags.c /^__db_omode(perm)$/
-__db_open ../db/db.c /^__db_open(dbp, name, subdb, type, flags, mode)$/
-__db_open_proc ../rpc_server/db_server_proc.c /^__db_open_proc(dbpcl_id, name, subdb,$/
+__db_open ../db/db_open.c /^__db_open(dbp, txn, fname, dname, type, flags, mod/
+__db_open_arg ../db/db_iface.c /^__db_open_arg(dbp, txn, fname, dname, type, flags)/
+__db_open_pp ../db/db_iface.c /^__db_open_pp(dbp, txn, fname, dname, type, flags, /
+__db_open_proc ../rpc_server/c/db_server_proc.c /^__db_open_proc(dbpcl_id, txnpcl_id, name,$/
+__db_overwrite ../env/env_file.c /^__db_overwrite(dbenv, path)$/
+__db_overwrite_pass ../env/env_file.c /^__db_overwrite_pass(dbenv, path, fhp, mbytes, byte/
__db_ovref ../db/db_overflow.c /^__db_ovref(dbc, pgno, adjust)$/
-__db_ovref_log ../db/db_auto.c /^__db_ovref_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_ovref_getpgnos ../db/db_auto.c /^__db_ovref_getpgnos(dbenv, rec, lsnp, notused1, su/
+__db_ovref_log ../db/db_auto.c /^__db_ovref_log(dbp, txnid, ret_lsnp, flags, pgno, /
__db_ovref_print ../db/db_auto.c /^__db_ovref_print(dbenv, dbtp, lsnp, notused2, notu/
__db_ovref_read ../db/db_auto.c /^__db_ovref_read(dbenv, recbuf, argpp)$/
__db_ovref_recover ../db/db_rec.c /^__db_ovref_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_padDecrypt ../crypto/rijndael/rijndael-api-fst.c /^__db_padDecrypt(cipher, key, input, inputOctets, o/
+__db_padEncrypt ../crypto/rijndael/rijndael-api-fst.c /^__db_padEncrypt(cipher, key, input, inputOctets, o/
__db_page_pass ../db/db_upg.c /^__db_page_pass(dbp, real_name, flags, fl, fhp)$/
-__db_pagesize_proc ../rpc_server/db_server_proc.c /^__db_pagesize_proc(dbpcl_id, pagesize, replyp)$/
+__db_pagesize_proc ../rpc_server/c/db_server_proc.c /^__db_pagesize_proc(dbpcl_id, pagesize, replyp)$/
__db_pagetype_to_string ../db/db_pr.c /^__db_pagetype_to_string(type)$/
__db_panic ../common/db_err.c /^__db_panic(dbenv, errval)$/
__db_panic_msg ../common/db_err.c /^__db_panic_msg(dbenv)$/
__db_parse ../env/env_open.c /^__db_parse(dbenv, s)$/
__db_partsize ../db/db_cam.c /^__db_partsize(nbytes, data)$/
-__db_pg_alloc_log ../include/db_am.h /^#define __db_pg_alloc_log __bam_pg_alloc_log$/
-__db_pg_free_log ../include/db_am.h /^#define __db_pg_free_log __bam_pg_free_log$/
-__db_pgerr ../common/db_err.c /^__db_pgerr(dbp, pgno)$/
-__db_pget ../db/db_am.c /^__db_pget(dbp, txn, skey, pkey, data, flags)$/
-__db_pget_proc ../rpc_server/db_server_proc.c /^__db_pget_proc(dbpcl_id, txnpcl_id, skeydlen,$/
-__db_pgetchk ../db/db_iface.c /^__db_pgetchk(dbp, skey, pkey, data, flags)$/
-__db_pgfmt ../common/db_err.c /^__db_pgfmt(dbp, pgno)$/
+__db_pg_alloc_getpgnos ../db/db_auto.c /^__db_pg_alloc_getpgnos(dbenv, rec, lsnp, notused1,/
+__db_pg_alloc_log ../db/db_auto.c /^__db_pg_alloc_log(dbp, txnid, ret_lsnp, flags, met/
+__db_pg_alloc_print ../db/db_auto.c /^__db_pg_alloc_print(dbenv, dbtp, lsnp, notused2, n/
+__db_pg_alloc_read ../db/db_auto.c /^__db_pg_alloc_read(dbenv, recbuf, argpp)$/
+__db_pg_alloc_recover ../db/db_rec.c /^__db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)/
+__db_pg_free_getpgnos ../db/db_auto.c /^__db_pg_free_getpgnos(dbenv, rec, lsnp, notused1, /
+__db_pg_free_log ../db/db_auto.c /^__db_pg_free_log(dbp, txnid, ret_lsnp, flags, pgno/
+__db_pg_free_print ../db/db_auto.c /^__db_pg_free_print(dbenv, dbtp, lsnp, notused2, no/
+__db_pg_free_read ../db/db_auto.c /^__db_pg_free_read(dbenv, recbuf, argpp)$/
+__db_pg_free_recover ../db/db_rec.c /^__db_pg_free_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_pg_free_recover_int ../db/db_rec.c /^__db_pg_free_recover_int(dbenv, argp, file_dbp, ls/
+__db_pg_freedata_getpgnos ../db/db_auto.c /^__db_pg_freedata_getpgnos(dbenv, rec, lsnp, notuse/
+__db_pg_freedata_log ../db/db_auto.c /^__db_pg_freedata_log(dbp, txnid, ret_lsnp, flags, /
+__db_pg_freedata_print ../db/db_auto.c /^__db_pg_freedata_print(dbenv, dbtp, lsnp, notused2/
+__db_pg_freedata_read ../db/db_auto.c /^__db_pg_freedata_read(dbenv, recbuf, argpp)$/
+__db_pg_freedata_recover ../db/db_rec.c /^__db_pg_freedata_recover(dbenv, dbtp, lsnp, op, in/
+__db_pg_new_getpgnos ../db/db_auto.c /^__db_pg_new_getpgnos(dbenv, rec, lsnp, notused1, s/
+__db_pg_new_log ../db/db_auto.c /^__db_pg_new_log(dbp, txnid, ret_lsnp, flags, pgno,/
+__db_pg_new_print ../db/db_auto.c /^__db_pg_new_print(dbenv, dbtp, lsnp, notused2, not/
+__db_pg_new_read ../db/db_auto.c /^__db_pg_new_read(dbenv, recbuf, argpp)$/
+__db_pg_new_recover ../db/db_rec.c /^__db_pg_new_recover(dbenv, dbtp, lsnp, op, info)$/
+__db_pg_prepare_getpgnos ../db/db_auto.c /^__db_pg_prepare_getpgnos(dbenv, rec, lsnp, notused/
+__db_pg_prepare_log ../db/db_auto.c /^__db_pg_prepare_log(dbp, txnid, ret_lsnp, flags, p/
+__db_pg_prepare_print ../db/db_auto.c /^__db_pg_prepare_print(dbenv, dbtp, lsnp, notused2,/
+__db_pg_prepare_read ../db/db_auto.c /^__db_pg_prepare_read(dbenv, recbuf, argpp)$/
+__db_pg_prepare_recover ../db/db_rec.c /^__db_pg_prepare_recover(dbenv, dbtp, lsnp, op, inf/
+__db_pgerr ../common/db_err.c /^__db_pgerr(dbp, pgno, errval)$/
+__db_pget ../db/db_iface.c /^__db_pget(dbp, txn, skey, pkey, data, flags)$/
+__db_pget__SWIG_1 ../libdb_java/db_java_wrap.c /^static int __db_pget__SWIG_1(struct __db *self,DB_/
+__db_pget_arg ../db/db_iface.c /^__db_pget_arg(dbp, pkey, flags)$/
+__db_pget_pp ../db/db_iface.c /^__db_pget_pp(dbp, txn, skey, pkey, data, flags)$/
+__db_pget_proc ../rpc_server/c/db_server_proc.c /^__db_pget_proc(dbpcl_id, txnpcl_id, skeydlen,$/
+__db_pgfmt ../common/db_err.c /^__db_pgfmt(dbenv, pgno)$/
__db_pgin ../db/db_conv.c /^__db_pgin(dbenv, pg, pp, cookie)$/
__db_pgout ../db/db_conv.c /^__db_pgout(dbenv, pg, pp, cookie)$/
__db_pitem ../db/db_dup.c /^__db_pitem(dbc, pagep, indx, nbytes, hdr, data)$/
__db_poff ../db/db_overflow.c /^__db_poff(dbc, dbt, pgnop)$/
-__db_pr ../db/db_pr.c /^__db_pr(p, len)$/
-__db_prdb ../db/db_pr.c /^__db_prdb(dbp, fp, flags)$/
+__db_pr ../db/db_pr.c /^__db_pr(p, len, fp)$/
+__db_pr_callback ../db/db_pr.c /^__db_pr_callback(handle, str_arg)$/
+__db_prdb ../db/db_pr.c /^__db_prdb(dbp, fp)$/
__db_prdbt ../db/db_pr.c /^__db_prdbt(dbtp, checkprint, prefix, handle, callb/
-__db_prflags ../db/db_pr.c /^__db_prflags(flags, fn, fp)$/
+__db_prflags ../db/db_pr.c /^__db_prflags(flags, fn, vfp)$/
__db_prfooter ../db/db_pr.c /^__db_prfooter(handle, callback)$/
__db_prheader ../db/db_pr.c /^__db_prheader(dbp, subname, pflag, keyflag, handle/
-__db_prinit ../db/db_pr.c /^__db_prinit(fp)$/
-__db_prnpage ../db/db_pr.c /^__db_prnpage(dbp, pgno)$/
-__db_proff ../db/db_pr.c /^__db_proff(vp)$/
-__db_prpage ../db/db_pr.c /^__db_prpage(dbp, h, flags)$/
-__db_prqueue ../qam/qam_method.c /^__db_prqueue(dbp, flags)$/
-__db_prtree ../db/db_pr.c /^__db_prtree(dbp, flags)$/
-__db_psize ../db/db_pr.c /^__db_psize(dbp)$/
+__db_prnpage ../db/db_pr.c /^__db_prnpage(dbp, pgno, fp)$/
+__db_proff ../db/db_pr.c /^__db_proff(vp, fp)$/
+__db_prpage ../db/db_pr.c /^__db_prpage(dbp, h, fp, flags)$/
+__db_prqueue ../qam/qam_method.c /^__db_prqueue(dbp, fp, flags)$/
+__db_prtree ../db/db_pr.c /^__db_prtree(dbp, fp, flags)$/
__db_pthread_mutex_destroy ../mutex/mut_pthread.c /^__db_pthread_mutex_destroy(mutexp)$/
__db_pthread_mutex_init ../mutex/mut_pthread.c /^__db_pthread_mutex_init(dbenv, mutexp, flags)$/
__db_pthread_mutex_lock ../mutex/mut_pthread.c /^__db_pthread_mutex_lock(dbenv, mutexp)$/
__db_pthread_mutex_unlock ../mutex/mut_pthread.c /^__db_pthread_mutex_unlock(dbenv, mutexp)$/
__db_put ../db/db_am.c /^__db_put(dbp, txn, key, data, flags)$/
-__db_put_proc ../rpc_server/db_server_proc.c /^__db_put_proc(dbpcl_id, txnpcl_id, keydlen,$/
-__db_putchk ../db/db_iface.c /^__db_putchk(dbp, key, data, flags, isrdonly, isdup/
-__db_qam_stat ../include/db.in /^struct __db_qam_stat {$/
+__db_put_arg ../db/db_iface.c /^__db_put_arg(dbp, key, data, flags)$/
+__db_put_pp ../db/db_iface.c /^__db_put_pp(dbp, txn, key, data, flags)$/
+__db_put_proc ../rpc_server/c/db_server_proc.c /^__db_put_proc(dbpcl_id, txnpcl_id, keydlen,$/
__db_qmeta ../db/db_pr.c /^__db_qmeta(dbp, fp, h, flags)$/
__db_r_attach ../env/env_region.c /^__db_r_attach(dbenv, infop, size)$/
__db_r_detach ../env/env_region.c /^__db_r_detach(dbenv, infop, destroy)$/
__db_rdonly ../db/db_iface.c /^__db_rdonly(dbenv, name)$/
-__db_re_delim_proc ../rpc_server/db_server_proc.c /^__db_re_delim_proc(dbpcl_id, delim, replyp)$/
-__db_re_len_proc ../rpc_server/db_server_proc.c /^__db_re_len_proc(dbpcl_id, len, replyp)$/
-__db_re_pad_proc ../rpc_server/db_server_proc.c /^__db_re_pad_proc(dbpcl_id, pad, replyp)$/
-__db_real_err ../common/db_err.c /^__db_real_err(dbenv, error, error_set, stderr_defa/
-__db_real_log ../common/db_err.c /^__db_real_log(dbenv, txnid, opname, flags, fmt, ap/
+__db_re_delim_proc ../rpc_server/c/db_server_proc.c /^__db_re_delim_proc(dbpcl_id, delim, replyp)$/
+__db_re_len_proc ../rpc_server/c/db_server_proc.c /^__db_re_len_proc(dbpcl_id, len, replyp)$/
+__db_re_pad_proc ../rpc_server/c/db_server_proc.c /^__db_re_pad_proc(dbpcl_id, pad, replyp)$/
+__db_rec_repl ../common/db_err.c /^__db_rec_repl(dbenv, data_size, data_dlen)$/
+__db_rec_toobig ../common/db_err.c /^__db_rec_toobig(dbenv, data_len, fixed_rec_len)$/
__db_reclaim_callback ../db/db_reclaim.c /^__db_reclaim_callback(dbp, p, cookie, putp)$/
-__db_refresh ../db/db.c /^__db_refresh(dbp)$/
-__db_reginfo_t ../include/region.h /^struct __db_reginfo_t { \/* __db_r_attach IN para/
+__db_refresh ../db/db.c /^__db_refresh(dbp, txn, flags, deferred_closep)$/
__db_region_destroy ../env/env_region.c /^__db_region_destroy(dbenv, infop)$/
__db_relink ../db/db_dup.c /^__db_relink(dbc, add_rem, pagep, new_next, needloc/
-__db_relink_log ../db/db_auto.c /^__db_relink_log(dbenv, txnid, ret_lsnp, flags,$/
+__db_relink_getpgnos ../db/db_auto.c /^__db_relink_getpgnos(dbenv, rec, lsnp, notused1, s/
+__db_relink_log ../db/db_auto.c /^__db_relink_log(dbp, txnid, ret_lsnp, flags,$/
__db_relink_print ../db/db_auto.c /^__db_relink_print(dbenv, dbtp, lsnp, notused2, not/
__db_relink_read ../db/db_auto.c /^__db_relink_read(dbenv, recbuf, argpp)$/
__db_relink_recover ../db/db_rec.c /^__db_relink_recover(dbenv, dbtp, lsnp, op, info)$/
-__db_remove ../db/db.c /^__db_remove(dbp, name, subdb, flags)$/
-__db_remove_callback ../db/db.c /^__db_remove_callback(dbp, cookie)$/
-__db_remove_proc ../rpc_server/db_server_proc.c /^__db_remove_proc(dbpcl_id, name, subdb,$/
-__db_removechk ../db/db_iface.c /^__db_removechk(dbp, flags)$/
-__db_rename ../db/db.c /^__db_rename(dbp, filename, subdb, newname, flags)$/
-__db_rename_proc ../rpc_server/db_server_proc.c /^__db_rename_proc(dbpcl_id, name, subdb,$/
+__db_remove ../db/db_remove.c /^__db_remove(dbp, txn, name, subdb, flags)$/
+__db_remove_int ../db/db_remove.c /^__db_remove_int(dbp, txn, name, subdb, flags)$/
+__db_remove_pp ../db/db_remove.c /^__db_remove_pp(dbp, name, subdb, flags)$/
+__db_remove_proc ../rpc_server/c/db_server_proc.c /^__db_remove_proc(dbpcl_id, name, subdb,$/
+__db_rename ../db/db_rename.c /^__db_rename(dbp, txn, name, subdb, newname)$/
+__db_rename_int ../db/db_rename.c /^__db_rename_int(dbp, txn, name, subdb, newname)$/
+__db_rename_pp ../db/db_rename.c /^__db_rename_pp(dbp, name, subdb, newname, flags)$/
+__db_rename_proc ../rpc_server/c/db_server_proc.c /^__db_rename_proc(dbpcl_id, name, subdb,$/
+__db_rep_enter ../rep/rep_util.c /^__db_rep_enter(dbp, checkgen, return_now)$/
+__db_rep_exit ../rep/rep_util.c /^__db_rep_exit(dbenv)$/
__db_ret ../db/db_ret.c /^__db_ret(dbp, h, indx, dbt, memp, memsize)$/
-__db_retcopy ../db/db_ret.c /^__db_retcopy(dbp, dbt, data, len, memp, memsize)$/
+__db_retcopy ../db/db_ret.c /^__db_retcopy(dbenv, dbt, data, len, memp, memsize)/
+__db_rijndaelDecrypt ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelDecrypt(rk, Nr, ct, pt)$/
+__db_rijndaelDecryptRound ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelDecryptRound(rk, Nr, pt, ct)$/
+__db_rijndaelEncrypt ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelEncrypt(rk, Nr, pt, ct)$/
+__db_rijndaelEncryptRound ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelEncryptRound(rk, Nr, pt, ct)$/
+__db_rijndaelKeySetupDec ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelKeySetupDec(rk, cipherKey, keyBits)$/
+__db_rijndaelKeySetupEnc ../crypto/rijndael/rijndael-alg-fst.c /^__db_rijndaelKeySetupEnc(rk, cipherKey, keyBits)$/
__db_rmid_to_env ../xa/xa_map.c /^__db_rmid_to_env(rmid, envp)$/
__db_rpath ../os/os_rpath.c /^__db_rpath(path)$/
__db_s_done ../db/db_cam.c /^__db_s_done(sdbp)$/
__db_s_first ../db/db_cam.c /^__db_s_first(pdbp)$/
__db_s_next ../db/db_cam.c /^__db_s_next(sdbpp)$/
-__db_safe_goff ../db/db_overflow.c /^__db_safe_goff(dbp, vdp, pgno, dbt, buf, flags)$/
+__db_safe_goff ../db/db_ovfl_vrfy.c /^__db_safe_goff(dbp, vdp, pgno, dbt, buf, flags)$/
__db_salvage ../db/db_vrfy.c /^__db_salvage(dbp, vdp, pgno, h, handle, callback, /
__db_salvage_destroy ../db/db_vrfyutil.c /^__db_salvage_destroy(vdp)$/
__db_salvage_duptree ../db/db_vrfy.c /^__db_salvage_duptree(dbp, vdp, pgno, key, handle, /
@@ -1729,103 +2523,124 @@ __db_salvage_markneeded ../db/db_vrfyutil.c /^__db_salvage_markneeded(vdp, pgno,
__db_salvage_subdbpg ../db/db_vrfy.c /^__db_salvage_subdbpg(dbp, vdp, master, handle, cal/
__db_salvage_subdbs ../db/db_vrfy.c /^__db_salvage_subdbs(dbp, vdp, handle, callback, fl/
__db_salvage_unknowns ../db/db_vrfy.c /^__db_salvage_unknowns(dbp, vdp, handle, callback, /
-__db_schema_init ../db/db.c /^__db_schema_init(dbp, command, name, subdb, lockp,/
__db_secondary_close ../db/db_am.c /^__db_secondary_close(sdbp, flags)$/
+__db_secondary_corrupt ../db/db_join.c /^__db_secondary_corrupt(dbp)$/
__db_secondary_get ../db/db_am.c /^__db_secondary_get(sdbp, txn, skey, data, flags)$/
__db_set_alloc ../db/db_method.c /^__db_set_alloc(dbp, mal_func, real_func, free_func/
__db_set_append_recno ../db/db_method.c /^__db_set_append_recno(dbp, func)$/
+__db_set_bt_compare ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_bt_compare(struct __db *s/
+__db_set_bt_maxkey ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_bt_maxkey(struct __db *se/
+__db_set_bt_minkey ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_bt_minkey(struct __db *se/
+__db_set_bt_prefix ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_bt_prefix(struct __db *se/
__db_set_cachesize ../db/db_method.c /^__db_set_cachesize(dbp, cache_gbytes, cache_bytes,/
__db_set_dup_compare ../db/db_method.c /^__db_set_dup_compare(dbp, func)$/
+__db_set_encrypt ../db/db_method.c /^__db_set_encrypt(dbp, passwd, flags)$/
__db_set_errcall ../db/db_method.c /^__db_set_errcall(dbp, errcall)$/
__db_set_errfile ../db/db_method.c /^__db_set_errfile(dbp, errfile)$/
__db_set_errpfx ../db/db_method.c /^__db_set_errpfx(dbp, errpfx)$/
__db_set_feedback ../db/db_method.c /^__db_set_feedback(dbp, feedback)$/
__db_set_flags ../db/db_method.c /^__db_set_flags(dbp, flags)$/
+__db_set_h_ffactor ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_h_ffactor(struct __db *se/
+__db_set_h_hash ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_h_hash(struct __db *self,/
+__db_set_h_nelem ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_h_nelem(struct __db *self/
__db_set_lorder ../db/db_method.c /^__db_set_lorder(dbp, db_lorder)$/
__db_set_pagesize ../db/db_method.c /^__db_set_pagesize(dbp, db_pagesize)$/
__db_set_paniccall ../db/db_method.c /^__db_set_paniccall(dbp, paniccall)$/
-__db_set_pgsize ../db/db.c /^__db_set_pgsize(dbp, fhp, name)$/
+__db_set_q_extentsize ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_q_extentsize(struct __db /
+__db_set_re_delim ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_re_delim(struct __db *sel/
+__db_set_re_len ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_re_len(struct __db *self,/
+__db_set_re_pad ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_re_pad(struct __db *self,/
+__db_set_re_source ../libdb_java/db_java_wrap.c /^static db_ret_t __db_set_re_source(struct __db *se/
+__db_sgenrand ../crypto/mersenne/mt19937db.c /^__db_sgenrand(seed, mt, mtip)$/
__db_shalloc ../env/db_salloc.c /^__db_shalloc(p, len, align, retp)$/
__db_shalloc_dump ../env/db_salloc.c /^__db_shalloc_dump(addr, fp)$/
__db_shalloc_free ../env/db_salloc.c /^__db_shalloc_free(regionp, ptr)$/
__db_shalloc_init ../env/db_salloc.c /^__db_shalloc_init(area, size)$/
__db_shalloc_size ../env/db_salloc.c /^__db_shalloc_size(len, align)$/
-__db_shlocks_clear ../include/mutex.h /^#define __db_shlocks_clear(a, b, c) __db_shreg_loc/
-__db_shlocks_destroy ../include/mutex.h /^#define __db_shlocks_destroy(a, b) __db_shreg_lock/
-__db_shmutex_init ../include/mutex.h /^#define __db_shmutex_init(a, b, c, d, e, f) \\$/
+__db_shlocks_clear ../dbinc/mutex.h /^#define __db_shlocks_clear(a, b, c) __db_shreg_loc/
+__db_shlocks_destroy ../dbinc/mutex.h /^#define __db_shlocks_destroy(a, b) __db_shreg_lock/
__db_shreg_locks_clear ../mutex/mutex.c /^__db_shreg_locks_clear(mutexp, infop, rp)$/
__db_shreg_locks_destroy ../mutex/mutex.c /^__db_shreg_locks_destroy(infop, rp)$/
__db_shreg_locks_record ../mutex/mutex.c /^__db_shreg_locks_record(dbenv, mutexp, infop, rp)$/
__db_shreg_maintinit ../mutex/mutex.c /^__db_shreg_maintinit(infop, addr, size)$/
__db_shreg_mutex_init ../mutex/mutex.c /^__db_shreg_mutex_init(dbenv, mutexp, offset, flags/
__db_shsizeof ../env/db_salloc.c /^__db_shsizeof(ptr)$/
-__db_split_print ../db/db_auto.c /^__db_split_print(dbenv, dbtp, lsnp, notused2, notu/
-__db_split_read ../db/db_auto.c /^__db_split_read(dbenv, recbuf, argpp)$/
-__db_stat_proc ../rpc_server/db_server_proc.c /^__db_stat_proc(dbpcl_id, flags, replyp, freep)$/
-__db_statchk ../db/db_iface.c /^__db_statchk(dbp, flags)$/
-__db_subdb_remove ../db/db.c /^__db_subdb_remove(dbp, name, subdb)$/
-__db_subdb_rename ../db/db.c /^__db_subdb_rename(dbp, name, subdb, newname)$/
-__db_sync ../db/db_am.c /^__db_sync(dbp, flags)$/
-__db_sync_proc ../rpc_server/db_server_proc.c /^__db_sync_proc(dbpcl_id, flags, replyp)$/
-__db_syncchk ../db/db_iface.c /^__db_syncchk(dbp, flags)$/
+__db_stat ../db/db_iface.c /^__db_stat(dbp, spp, flags)$/
+__db_stat_arg ../db/db_iface.c /^__db_stat_arg(dbp, flags)$/
+__db_stat_pp ../db/db_iface.c /^__db_stat_pp(dbp, spp, flags)$/
+__db_stat_proc ../rpc_server/c/db_server_proc.c /^__db_stat_proc(dbpcl_id, flags, replyp, freep)$/
+__db_strsep ../common/util_arg.c /^__db_strsep(stringp, delim)$/
+__db_subdb_remove ../db/db_remove.c /^__db_subdb_remove(dbp, txn, name, subdb)$/
+__db_subdb_rename ../db/db_rename.c /^__db_subdb_rename(dbp, txn, name, subdb, newname)$/
+__db_sync ../db/db_am.c /^__db_sync(dbp)$/
+__db_sync_pp ../db/db_iface.c /^__db_sync_pp(dbp, flags)$/
+__db_sync_proc ../rpc_server/c/db_server_proc.c /^__db_sync_proc(dbpcl_id, flags, replyp)$/
__db_tablesize ../env/db_shash.c /^__db_tablesize(n_buckets)$/
__db_tas_mutex_destroy ../mutex/mut_tas.c /^__db_tas_mutex_destroy(mutexp)$/
__db_tas_mutex_init ../mutex/mut_tas.c /^__db_tas_mutex_init(dbenv, mutexp, flags)$/
__db_tas_mutex_lock ../mutex/mut_tas.c /^__db_tas_mutex_lock(dbenv, mutexp)$/
__db_tas_mutex_unlock ../mutex/mut_tas.c /^__db_tas_mutex_unlock(dbenv, mutexp)$/
-__db_testcopy ../db/db.c /^__db_testcopy(dbp, name)$/
-__db_testdocopy ../db/db.c /^__db_testdocopy(dbp, name)$/
-__db_tmp_open ../env/env_open.c /^__db_tmp_open(dbenv, tmp_oflags, path, fhp)$/
+__db_testcopy ../db/db.c /^__db_testcopy(dbenv, dbp, name)$/
+__db_testdocopy ../db/db.c /^__db_testdocopy(dbenv, name)$/
+__db_tmp_open ../env/env_open.c /^__db_tmp_open(dbenv, tmp_oflags, path, fhpp)$/
__db_traverse_big ../db/db_reclaim.c /^__db_traverse_big(dbp, pgno, callback, cookie)$/
-__db_truncate ../db/db.c /^__db_truncate(dbp, name, subdb, countp, flags)$/
+__db_truncate ../db/db_truncate.c /^__db_truncate(dbp, txn, countp, flags)$/
__db_truncate_callback ../db/db_reclaim.c /^__db_truncate_callback(dbp, p, cookie, putp)$/
-__db_truncate_proc ../rpc_server/db_server_proc.c /^__db_truncate_proc(dbpcl_id, name, subdb,$/
-__db_txn ../include/txn.h /^struct __db_txn {$/
-__db_txn_abort_3003 ../rpc_client/db_server_clnt.c /^__db_txn_abort_3003(argp, clnt)$/
-__db_txn_active ../include/db.in /^struct __db_txn_active {$/
-__db_txn_begin_3003 ../rpc_client/db_server_clnt.c /^__db_txn_begin_3003(argp, clnt)$/
-__db_txn_commit_3003 ../rpc_client/db_server_clnt.c /^__db_txn_commit_3003(argp, clnt)$/
-__db_txn_prepare_3003 ../rpc_client/db_server_clnt.c /^__db_txn_prepare_3003(argp, clnt)$/
-__db_txn_recover_3003 ../rpc_client/db_server_clnt.c /^__db_txn_recover_3003(argp, clnt)$/
-__db_txn_stat ../include/db.in /^struct __db_txn_stat {$/
-__db_txnhead ../include/db_dispatch.h /^struct __db_txnhead {$/
-__db_txnlist ../include/db_dispatch.h /^struct __db_txnlist {$/
-__db_txnlist_add ../db/db_dispatch.c /^__db_txnlist_add(dbenv, listp, txnid, status)$/
-__db_txnlist_close ../db/db_dispatch.c /^__db_txnlist_close(listp, lid, count)$/
-__db_txnlist_delete ../db/db_dispatch.c /^__db_txnlist_delete(dbenv, listp, name, lid, delet/
+__db_truncate_pp ../db/db_truncate.c /^__db_truncate_pp(dbp, txn, countp, flags)$/
+__db_truncate_proc ../rpc_server/c/db_server_proc.c /^__db_truncate_proc(dbpcl_id, txnpcl_id,$/
+__db_txn_abort ../libdb_java/db_java_wrap.c /^static db_ret_t __db_txn_abort(struct __db_txn *se/
+__db_txn_abort_4002 ../rpc_client/db_server_clnt.c /^__db_txn_abort_4002(argp, clnt)$/
+__db_txn_auto_init ../db/db_iface.c /^__db_txn_auto_init(dbenv, txnidp)$/
+__db_txn_auto_resolve ../db/db_iface.c /^__db_txn_auto_resolve(dbenv, txn, nosync, ret)$/
+__db_txn_begin_4002 ../rpc_client/db_server_clnt.c /^__db_txn_begin_4002(argp, clnt)$/
+__db_txn_commit ../libdb_java/db_java_wrap.c /^static db_ret_t __db_txn_commit(struct __db_txn *s/
+__db_txn_commit_4002 ../rpc_client/db_server_clnt.c /^__db_txn_commit_4002(argp, clnt)$/
+__db_txn_discard ../libdb_java/db_java_wrap.c /^static db_ret_t __db_txn_discard(struct __db_txn */
+__db_txn_discard_4002 ../rpc_client/db_server_clnt.c /^__db_txn_discard_4002(argp, clnt)$/
+__db_txn_id ../libdb_java/db_java_wrap.c /^static u_int32_t __db_txn_id(struct __db_txn *self/
+__db_txn_prepare ../libdb_java/db_java_wrap.c /^static db_ret_t __db_txn_prepare(struct __db_txn */
+__db_txn_prepare_4002 ../rpc_client/db_server_clnt.c /^__db_txn_prepare_4002(argp, clnt)$/
+__db_txn_recover_4002 ../rpc_client/db_server_clnt.c /^__db_txn_recover_4002(argp, clnt)$/
+__db_txn_set_timeout ../libdb_java/db_java_wrap.c /^static db_ret_t __db_txn_set_timeout(struct __db_t/
+__db_txnlist_add ../db/db_dispatch.c /^__db_txnlist_add(dbenv, listp, txnid, status, lsn)/
+__db_txnlist_ckp ../db/db_dispatch.c /^__db_txnlist_ckp(dbenv, listp, ckp_lsn)$/
__db_txnlist_end ../db/db_dispatch.c /^__db_txnlist_end(dbenv, listp)$/
__db_txnlist_find ../db/db_dispatch.c /^__db_txnlist_find(dbenv, listp, txnid)$/
__db_txnlist_find_internal ../db/db_dispatch.c /^__db_txnlist_find_internal(dbenv, listp, type, txn/
-__db_txnlist_gen ../db/db_dispatch.c /^__db_txnlist_gen(listp, incr)$/
-__db_txnlist_init ../db/db_dispatch.c /^__db_txnlist_init(dbenv, retp)$/
+__db_txnlist_gen ../db/db_dispatch.c /^__db_txnlist_gen(dbenv, listp, incr, min, max)$/
+__db_txnlist_init ../db/db_dispatch.c /^__db_txnlist_init(dbenv, low_txn, hi_txn, trunc_ls/
__db_txnlist_lsnadd ../db/db_dispatch.c /^__db_txnlist_lsnadd(dbenv, listp, lsnp, flags)$/
__db_txnlist_lsninit ../db/db_dispatch.c /^__db_txnlist_lsninit(dbenv, hp, lsnp)$/
__db_txnlist_pgnoadd ../db/db_dispatch.c /^__db_txnlist_pgnoadd(dbenv, hp, fileid, uid, fname/
__db_txnlist_print ../db/db_dispatch.c /^__db_txnlist_print(listp)$/
__db_txnlist_remove ../db/db_dispatch.c /^__db_txnlist_remove(dbenv, listp, txnid)$/
-__db_txnmgr ../include/txn.h /^struct __db_txnmgr {$/
-__db_txnregion ../include/txn.h /^struct __db_txnregion {$/
+__db_txnlist_update ../db/db_dispatch.c /^__db_txnlist_update(dbenv, listp, txnid, status, l/
__db_unknown_flag ../common/db_err.c /^__db_unknown_flag(dbenv, routine, flag)$/
__db_unknown_type ../common/db_err.c /^__db_unknown_type(dbenv, routine, type)$/
__db_unmap_rmid ../xa/xa_map.c /^__db_unmap_rmid(rmid)$/
__db_unmap_xid ../xa/xa_map.c /^__db_unmap_xid(env, xid, off)$/
__db_up_ovref ../db/db_upg_opd.c /^__db_up_ovref(dbp, fhp, pgno)$/
__db_upgrade ../db/db_upg.c /^__db_upgrade(dbp, fname, flags)$/
+__db_upgrade_pp ../db/db_upg.c /^__db_upgrade_pp(dbp, fname, flags)$/
+__db_util_arg ../common/util_arg.c /^__db_util_arg(arg0, str, argcp, argvp)$/
+__db_util_cache ../common/util_cache.c /^__db_util_cache(dbenv, dbp, cachep, resizep)$/
__db_util_interrupted ../common/util_sig.c /^__db_util_interrupted()$/
__db_util_logset ../common/util_log.c /^__db_util_logset(progname, fname)$/
__db_util_siginit ../common/util_sig.c /^__db_util_siginit()$/
__db_util_sigresend ../common/util_sig.c /^__db_util_sigresend()$/
-__db_verify ../db/db_vrfy.c /^__db_verify(dbp, file, database, outfile, flags)$/
-__db_verify_callback ../db/db_vrfy.c /^__db_verify_callback(handle, str_arg)$/
-__db_verify_internal ../db/db_vrfy.c /^__db_verify_internal(dbp_orig, name, subdb, handle/
+__db_verify ../db/db_vrfy.c /^__db_verify(dbp, name, subdb, handle, callback, fl/
+__db_verify_arg ../db/db_vrfy.c /^__db_verify_arg(dbp, dname, flags)$/
+__db_verify_internal ../db/db_vrfy.c /^__db_verify_internal(dbp, fname, dname, handle, ca/
+__db_verify_pp ../db/db_vrfy.c /^__db_verify_pp(dbp, file, database, outfile, flags/
__db_vrfy_ccclose ../db/db_vrfyutil.c /^__db_vrfy_ccclose(dbc)$/
__db_vrfy_ccnext ../db/db_vrfyutil.c /^__db_vrfy_ccnext(dbc, cipp)$/
__db_vrfy_ccset ../db/db_vrfyutil.c /^__db_vrfy_ccset(dbc, pgno, cipp)$/
__db_vrfy_childcursor ../db/db_vrfyutil.c /^__db_vrfy_childcursor(vdp, dbcp)$/
+__db_vrfy_childinc ../db/db_vrfyutil.c /^__db_vrfy_childinc(dbc, cip)$/
__db_vrfy_childput ../db/db_vrfyutil.c /^__db_vrfy_childput(vdp, pgno, cip)$/
__db_vrfy_common ../db/db_vrfy.c /^__db_vrfy_common(dbp, vdp, h, pgno, flags)$/
__db_vrfy_datapage ../db/db_vrfy.c /^__db_vrfy_datapage(dbp, vdp, h, pgno, flags)$/
-__db_vrfy_dbinfo_create ../db/db_vrfyutil.c /^__db_vrfy_dbinfo_create (dbenv, pgsize, vdpp)$/
+__db_vrfy_dbinfo_create ../db/db_vrfyutil.c /^__db_vrfy_dbinfo_create(dbenv, pgsize, vdpp)$/
__db_vrfy_dbinfo_destroy ../db/db_vrfyutil.c /^__db_vrfy_dbinfo_destroy(dbenv, vdp)$/
__db_vrfy_duptype ../db/db_vrfy.c /^__db_vrfy_duptype(dbp, vdp, pgno, flags)$/
__db_vrfy_freelist ../db/db_vrfy.c /^__db_vrfy_freelist(dbp, vdp, meta, flags)$/
@@ -1834,14 +2649,12 @@ __db_vrfy_inpitem ../db/db_vrfy.c /^__db_vrfy_inpitem(dbp, h, pgno, i, is_btree,
__db_vrfy_invalid ../db/db_vrfy.c /^__db_vrfy_invalid(dbp, vdp, h, pgno, flags)$/
__db_vrfy_meta ../db/db_vrfy.c /^__db_vrfy_meta(dbp, vdp, meta, pgno, flags)$/
__db_vrfy_orderchkonly ../db/db_vrfy.c /^__db_vrfy_orderchkonly(dbp, vdp, name, subdb, flag/
-__db_vrfy_overflow ../db/db_overflow.c /^__db_vrfy_overflow(dbp, vdp, h, pgno, flags)$/
-__db_vrfy_ovfl_structure ../db/db_overflow.c /^__db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, fla/
-__db_vrfy_pageinfo_create ../db/db_vrfyutil.c /^__db_vrfy_pageinfo_create(pgipp)$/
+__db_vrfy_overflow ../db/db_ovfl_vrfy.c /^__db_vrfy_overflow(dbp, vdp, h, pgno, flags)$/
+__db_vrfy_ovfl_structure ../db/db_ovfl_vrfy.c /^__db_vrfy_ovfl_structure(dbp, vdp, pgno, tlen, fla/
+__db_vrfy_pageinfo_create ../db/db_vrfyutil.c /^__db_vrfy_pageinfo_create(dbenv, pgipp)$/
__db_vrfy_pagezero ../db/db_vrfy.c /^__db_vrfy_pagezero(dbp, vdp, fhp, flags)$/
__db_vrfy_pgset ../db/db_vrfyutil.c /^__db_vrfy_pgset(dbenv, pgsize, dbpp)$/
-__db_vrfy_pgset_dec ../db/db_vrfyutil.c /^__db_vrfy_pgset_dec(dbp, pgno)$/
__db_vrfy_pgset_get ../db/db_vrfyutil.c /^__db_vrfy_pgset_get(dbp, pgno, valp)$/
-__db_vrfy_pgset_iinc ../db/db_vrfyutil.c /^__db_vrfy_pgset_iinc(dbp, pgno, i)$/
__db_vrfy_pgset_inc ../db/db_vrfyutil.c /^__db_vrfy_pgset_inc(dbp, pgno)$/
__db_vrfy_pgset_next ../db/db_vrfyutil.c /^__db_vrfy_pgset_next(dbc, pgnop)$/
__db_vrfy_putpageinfo ../db/db_vrfyutil.c /^__db_vrfy_putpageinfo(dbenv, vdp, pip)$/
@@ -1849,6 +2662,10 @@ __db_vrfy_struct_feedback ../db/db_vrfy.c /^__db_vrfy_struct_feedback(dbp, vdp)$
__db_vrfy_structure ../db/db_vrfy.c /^__db_vrfy_structure(dbp, vdp, dbname, meta_pgno, f/
__db_vrfy_subdbs ../db/db_vrfy.c /^__db_vrfy_subdbs(dbp, vdp, dbname, flags)$/
__db_vrfy_walkpages ../db/db_vrfy.c /^__db_vrfy_walkpages(dbp, vdp, handle, callback, fl/
+__db_win32_mutex_destroy ../mutex/mut_win32.c /^__db_win32_mutex_destroy(mutexp)$/
+__db_win32_mutex_init ../mutex/mut_win32.c /^__db_win32_mutex_init(dbenv, mutexp, flags)$/
+__db_win32_mutex_lock ../mutex/mut_win32.c /^__db_win32_mutex_lock(dbenv, mutexp)$/
+__db_win32_mutex_unlock ../mutex/mut_win32.c /^__db_win32_mutex_unlock(dbenv, mutexp)$/
__db_wrlock_err ../db/db_cam.c /^__db_wrlock_err(dbenv)$/
__db_xa_close ../xa/xa.c /^__db_xa_close(xa_info, rmid, flags)$/
__db_xa_commit ../xa/xa.c /^__db_xa_commit(xid, rmid, flags)$/
@@ -1862,21 +2679,26 @@ __db_xa_recover ../xa/xa.c /^__db_xa_recover(xids, count, rmid, flags)$/
__db_xa_rollback ../xa/xa.c /^__db_xa_rollback(xid, rmid, flags)$/
__db_xa_start ../xa/xa.c /^__db_xa_start(xid, rmid, flags)$/
__db_xid_to_txn ../xa/xa_map.c /^__db_xid_to_txn(dbenv, xid, offp)$/
-__dbc ../include/db.in /^struct __dbc {$/
-__dbc_close_int ../rpc_server/db_server_util.c /^__dbc_close_int(dbc_ctp)$/
-__dbc_close_proc ../rpc_server/db_server_proc.c /^__dbc_close_proc(dbccl_id, replyp)$/
-__dbc_count_proc ../rpc_server/db_server_proc.c /^__dbc_count_proc(dbccl_id, flags, replyp)$/
-__dbc_del_proc ../rpc_server/db_server_proc.c /^__dbc_del_proc(dbccl_id, flags, replyp)$/
-__dbc_dup_proc ../rpc_server/db_server_proc.c /^__dbc_dup_proc(dbccl_id, flags, replyp)$/
-__dbc_get_proc ../rpc_server/db_server_proc.c /^__dbc_get_proc(dbccl_id, keydlen, keydoff,$/
-__dbc_internal ../include/db_int.in /^struct __dbc_internal {$/
-__dbc_pget_proc ../rpc_server/db_server_proc.c /^__dbc_pget_proc(dbccl_id, skeydlen, skeydoff,$/
-__dbc_put_proc ../rpc_server/db_server_proc.c /^__dbc_put_proc(dbccl_id, keydlen, keydoff,$/
+__dbc_close ../libdb_java/db_java_wrap.c /^static db_ret_t __dbc_close(struct __dbc *self){$/
+__dbc_close_int ../rpc_server/c/db_server_util.c /^__dbc_close_int(dbc_ctp)$/
+__dbc_close_proc ../rpc_server/c/db_server_proc.c /^__dbc_close_proc(dbccl_id, replyp)$/
+__dbc_count ../libdb_java/db_java_wrap.c /^static db_recno_t __dbc_count(struct __dbc *self,u/
+__dbc_count_proc ../rpc_server/c/db_server_proc.c /^__dbc_count_proc(dbccl_id, flags, replyp)$/
+__dbc_del ../libdb_java/db_java_wrap.c /^static int __dbc_del(struct __dbc *self,u_int32_t /
+__dbc_del_proc ../rpc_server/c/db_server_proc.c /^__dbc_del_proc(dbccl_id, flags, replyp)$/
+__dbc_dup ../libdb_java/db_java_wrap.c /^static DBC *__dbc_dup(struct __dbc *self,u_int32_t/
+__dbc_dup_proc ../rpc_server/c/db_server_proc.c /^__dbc_dup_proc(dbccl_id, flags, replyp)$/
+__dbc_get__SWIG_0 ../libdb_java/db_java_wrap.c /^static int __dbc_get__SWIG_0(struct __dbc *self,DB/
+__dbc_get_proc ../rpc_server/c/db_server_proc.c /^__dbc_get_proc(dbccl_id, keydlen, keydoff,$/
+__dbc_pget__SWIG_1 ../libdb_java/db_java_wrap.c /^static int __dbc_pget__SWIG_1(struct __dbc *self,D/
+__dbc_pget_proc ../rpc_server/c/db_server_proc.c /^__dbc_pget_proc(dbccl_id, skeydlen, skeydoff,$/
+__dbc_put ../libdb_java/db_java_wrap.c /^static int __dbc_put(struct __dbc *self,DBT *key,D/
+__dbc_put_proc ../rpc_server/c/db_server_proc.c /^__dbc_put_proc(dbccl_id, keydlen, keydoff,$/
__dbcl_c_destroy ../rpc_client/client.c /^__dbcl_c_destroy(dbc)$/
-__dbcl_c_refresh ../rpc_client/client.c /^__dbcl_c_refresh(dbcp)$/
-__dbcl_c_setup ../rpc_client/client.c /^__dbcl_c_setup(cl_id, dbp, dbcpp)$/
+__dbcl_c_refresh ../rpc_client/client.c /^__dbcl_c_refresh(dbc)$/
+__dbcl_c_setup ../rpc_client/client.c /^__dbcl_c_setup(cl_id, dbp, dbcp)$/
__dbcl_db_alloc ../rpc_client/gen_client.c /^__dbcl_db_alloc(dbp, func0, func1, func2)$/
-__dbcl_db_associate ../rpc_client/gen_client.c /^__dbcl_db_associate(dbp, sdbp, func0, flags)$/
+__dbcl_db_associate ../rpc_client/gen_client.c /^__dbcl_db_associate(dbp, txnp, sdbp, func0, flags)/
__dbcl_db_bt_compare ../rpc_client/gen_client.c /^__dbcl_db_bt_compare(dbp, func0)$/
__dbcl_db_bt_maxkey ../rpc_client/gen_client.c /^__dbcl_db_bt_maxkey(dbp, maxkey)$/
__dbcl_db_bt_minkey ../rpc_client/gen_client.c /^__dbcl_db_bt_minkey(dbp, minkey)$/
@@ -1887,24 +2709,42 @@ __dbcl_db_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_close_ret(dbp, fl
__dbcl_db_create ../rpc_client/gen_client.c /^__dbcl_db_create(dbp, dbenv, flags)$/
__dbcl_db_create_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_create_ret(dbp, dbenv, flags, replyp)$/
__dbcl_db_cursor ../rpc_client/gen_client.c /^__dbcl_db_cursor(dbp, txnp, dbcpp, flags)$/
-__dbcl_db_cursor_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, repl/
+__dbcl_db_cursor_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_cursor_ret(dbp, txnp, dbcp, flags, reply/
__dbcl_db_del ../rpc_client/gen_client.c /^__dbcl_db_del(dbp, txnp, key, flags)$/
+__dbcl_db_dup_compare ../rpc_client/gen_client.c /^__dbcl_db_dup_compare(dbp, func0)$/
+__dbcl_db_encrypt ../rpc_client/gen_client.c /^__dbcl_db_encrypt(dbp, passwd, flags)$/
__dbcl_db_extentsize ../rpc_client/gen_client.c /^__dbcl_db_extentsize(dbp, extentsize)$/
__dbcl_db_fd ../rpc_client/gen_client.c /^__dbcl_db_fd(dbp, fdp)$/
__dbcl_db_feedback ../rpc_client/gen_client.c /^__dbcl_db_feedback(dbp, func0)$/
__dbcl_db_flags ../rpc_client/gen_client.c /^__dbcl_db_flags(dbp, flags)$/
__dbcl_db_get ../rpc_client/gen_client.c /^__dbcl_db_get(dbp, txnp, key, data, flags)$/
+__dbcl_db_get_bt_minkey ../rpc_client/gen_client.c /^__dbcl_db_get_bt_minkey(dbp, minkeyp)$/
+__dbcl_db_get_cachesize ../rpc_client/gen_client.c /^__dbcl_db_get_cachesize(dbp, gbytesp, bytesp, ncac/
+__dbcl_db_get_encrypt_flags ../rpc_client/gen_client.c /^__dbcl_db_get_encrypt_flags(dbp, flagsp)$/
+__dbcl_db_get_extentsize ../rpc_client/gen_client.c /^__dbcl_db_get_extentsize(dbp, extentsizep)$/
+__dbcl_db_get_flags ../rpc_client/gen_client.c /^__dbcl_db_get_flags(dbp, flagsp)$/
+__dbcl_db_get_h_ffactor ../rpc_client/gen_client.c /^__dbcl_db_get_h_ffactor(dbp, ffactorp)$/
+__dbcl_db_get_h_nelem ../rpc_client/gen_client.c /^__dbcl_db_get_h_nelem(dbp, nelemp)$/
+__dbcl_db_get_lorder ../rpc_client/gen_client.c /^__dbcl_db_get_lorder(dbp, lorderp)$/
+__dbcl_db_get_name ../rpc_client/gen_client.c /^__dbcl_db_get_name(dbp, filenamep, dbnamep)$/
+__dbcl_db_get_open_flags ../rpc_client/gen_client.c /^__dbcl_db_get_open_flags(dbp, flagsp)$/
+__dbcl_db_get_pagesize ../rpc_client/gen_client.c /^__dbcl_db_get_pagesize(dbp, pagesizep)$/
+__dbcl_db_get_re_delim ../rpc_client/gen_client.c /^__dbcl_db_get_re_delim(dbp, delimp)$/
+__dbcl_db_get_re_len ../rpc_client/gen_client.c /^__dbcl_db_get_re_len(dbp, lenp)$/
+__dbcl_db_get_re_pad ../rpc_client/gen_client.c /^__dbcl_db_get_re_pad(dbp, padp)$/
+__dbcl_db_get_re_source ../rpc_client/gen_client.c /^__dbcl_db_get_re_source(dbp, re_sourcep)$/
__dbcl_db_get_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_get_ret(dbp, txnp, key, data, flags, rep/
__dbcl_db_h_ffactor ../rpc_client/gen_client.c /^__dbcl_db_h_ffactor(dbp, ffactor)$/
__dbcl_db_h_hash ../rpc_client/gen_client.c /^__dbcl_db_h_hash(dbp, func0)$/
__dbcl_db_h_nelem ../rpc_client/gen_client.c /^__dbcl_db_h_nelem(dbp, nelem)$/
__dbcl_db_join ../rpc_client/gen_client.c /^__dbcl_db_join(dbp, curs, dbcp, flags)$/
-__dbcl_db_join_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_join_ret(dbp, curs, dbcpp, flags, replyp/
+__dbcl_db_join_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)/
__dbcl_db_key_range ../rpc_client/gen_client.c /^__dbcl_db_key_range(dbp, txnp, key, range, flags)$/
__dbcl_db_key_range_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_key_range_ret(dbp, txnp, key, range, fla/
__dbcl_db_lorder ../rpc_client/gen_client.c /^__dbcl_db_lorder(dbp, lorder)$/
-__dbcl_db_open ../rpc_client/gen_client.c /^__dbcl_db_open(dbp, name, subdb, type, flags, mode/
-__dbcl_db_open_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_open_ret(dbp, name, subdb, type, flags, /
+__dbcl_db_open ../rpc_client/gen_client.c /^__dbcl_db_open(dbp, txnp, name, subdb, type, flags/
+__dbcl_db_open_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_open_ret(dbp, txn, name, subdb, type, fl/
+__dbcl_db_open_wrap ../rpc_client/client.c /^__dbcl_db_open_wrap(dbp, txnp, name, subdb, type, /
__dbcl_db_pagesize ../rpc_client/gen_client.c /^__dbcl_db_pagesize(dbp, pagesize)$/
__dbcl_db_panic ../rpc_client/gen_client.c /^__dbcl_db_panic(dbp, func0)$/
__dbcl_db_pget ../rpc_client/gen_client.c /^__dbcl_db_pget(dbp, txnp, skey, pkey, data, flags)/
@@ -1923,31 +2763,39 @@ __dbcl_db_set_append_recno ../rpc_client/gen_client.c /^__dbcl_db_set_append_rec
__dbcl_db_stat ../rpc_client/gen_client.c /^__dbcl_db_stat(dbp, sp, flags)$/
__dbcl_db_stat_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_stat_ret(dbp, sp, flags, replyp)$/
__dbcl_db_sync ../rpc_client/gen_client.c /^__dbcl_db_sync(dbp, flags)$/
-__dbcl_db_truncate ../rpc_client/gen_client.c /^__dbcl_db_truncate(dbp, name, subdb, countp, flags/
-__dbcl_db_truncate_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_truncate_ret(dbp, name, subdb, countp, f/
+__dbcl_db_truncate ../rpc_client/gen_client.c /^__dbcl_db_truncate(dbp, txnp, countp, flags)$/
+__dbcl_db_truncate_ret ../rpc_client/gen_client_ret.c /^__dbcl_db_truncate_ret(dbp, txnp, countp, flags, r/
__dbcl_db_upgrade ../rpc_client/gen_client.c /^__dbcl_db_upgrade(dbp, fname, flags)$/
__dbcl_db_verify ../rpc_client/gen_client.c /^__dbcl_db_verify(dbp, fname, subdb, outfile, flags/
__dbcl_dbc_close ../rpc_client/gen_client.c /^__dbcl_dbc_close(dbc)$/
-__dbcl_dbc_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_close_ret(dbcp, replyp)$/
+__dbcl_dbc_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_close_ret(dbc, replyp)$/
__dbcl_dbc_count ../rpc_client/gen_client.c /^__dbcl_dbc_count(dbc, countp, flags)$/
__dbcl_dbc_count_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_count_ret(dbc, countp, flags, replyp)$/
__dbcl_dbc_del ../rpc_client/gen_client.c /^__dbcl_dbc_del(dbc, flags)$/
__dbcl_dbc_dup ../rpc_client/gen_client.c /^__dbcl_dbc_dup(dbc, dbcp, flags)$/
-__dbcl_dbc_dup_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_dup_ret(dbcp, dbcpp, flags, replyp)$/
+__dbcl_dbc_dup_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)$/
__dbcl_dbc_get ../rpc_client/gen_client.c /^__dbcl_dbc_get(dbc, key, data, flags)$/
-__dbcl_dbc_get_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_get_ret(dbcp, key, data, flags, replyp)/
+__dbcl_dbc_get_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_get_ret(dbc, key, data, flags, replyp)$/
__dbcl_dbc_pget ../rpc_client/gen_client.c /^__dbcl_dbc_pget(dbc, skey, pkey, data, flags)$/
__dbcl_dbc_pget_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, /
__dbcl_dbc_put ../rpc_client/gen_client.c /^__dbcl_dbc_put(dbc, key, data, flags)$/
-__dbcl_dbc_put_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_put_ret(dbcp, key, data, flags, replyp)/
+__dbcl_dbc_put_ret ../rpc_client/gen_client_ret.c /^__dbcl_dbc_put_ret(dbc, key, data, flags, replyp)$/
__dbcl_dbclose_common ../rpc_client/client.c /^__dbcl_dbclose_common(dbp)$/
__dbcl_env_alloc ../rpc_client/gen_client.c /^__dbcl_env_alloc(dbenv, func0, func1, func2)$/
__dbcl_env_cachesize ../rpc_client/gen_client.c /^__dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)/
__dbcl_env_close ../rpc_client/gen_client.c /^__dbcl_env_close(dbenv, flags)$/
-__dbcl_env_close_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_close_ret(dbenv, flags, replyp)$/
+__dbcl_env_close_wrap ../rpc_client/client.c /^__dbcl_env_close_wrap(dbenv, flags)$/
__dbcl_env_create ../rpc_client/gen_client.c /^__dbcl_env_create(dbenv, timeout)$/
__dbcl_env_create_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_create_ret(dbenv, timeout, replyp)$/
+__dbcl_env_dbremove ../rpc_client/gen_client.c /^__dbcl_env_dbremove(dbenv, txnp, name, subdb, flag/
+__dbcl_env_dbrename ../rpc_client/gen_client.c /^__dbcl_env_dbrename(dbenv, txnp, name, subdb, newn/
+__dbcl_env_encrypt ../rpc_client/gen_client.c /^__dbcl_env_encrypt(dbenv, passwd, flags)$/
__dbcl_env_flags ../rpc_client/gen_client.c /^__dbcl_env_flags(dbenv, flags, onoff)$/
+__dbcl_env_get_cachesize ../rpc_client/gen_client.c /^__dbcl_env_get_cachesize(dbenv, gbytesp, bytesp, n/
+__dbcl_env_get_encrypt_flags ../rpc_client/gen_client.c /^__dbcl_env_get_encrypt_flags(dbenv, flagsp)$/
+__dbcl_env_get_flags ../rpc_client/gen_client.c /^__dbcl_env_get_flags(dbenv, flagsp)$/
+__dbcl_env_get_home ../rpc_client/gen_client.c /^__dbcl_env_get_home(dbenv, homep)$/
+__dbcl_env_get_open_flags ../rpc_client/gen_client.c /^__dbcl_env_get_open_flags(dbenv, flagsp)$/
__dbcl_env_open ../rpc_client/gen_client.c /^__dbcl_env_open(dbenv, home, flags, mode)$/
__dbcl_env_open_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_open_ret(dbenv, home, flags, mode, repl/
__dbcl_env_open_wrap ../rpc_client/client.c /^__dbcl_env_open_wrap(dbenv, home, flags, mode)$/
@@ -1956,35 +2804,78 @@ __dbcl_env_remove ../rpc_client/gen_client.c /^__dbcl_env_remove(dbenv, home, fl
__dbcl_env_remove_ret ../rpc_client/gen_client_ret.c /^__dbcl_env_remove_ret(dbenv, home, flags, replyp)$/
__dbcl_env_set_feedback ../rpc_client/gen_client.c /^__dbcl_env_set_feedback(dbenv, func0)$/
__dbcl_envrpcserver ../rpc_client/client.c /^__dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec,/
-__dbcl_envserver ../rpc_client/client.c /^__dbcl_envserver(dbenv, host, tsec, ssec, flags)$/
+__dbcl_get_data_dirs ../rpc_client/gen_client.c /^__dbcl_get_data_dirs(dbenv, dirpp)$/
+__dbcl_get_lg_bsize ../rpc_client/gen_client.c /^__dbcl_get_lg_bsize(dbenv, bsizep)$/
+__dbcl_get_lg_dir ../rpc_client/gen_client.c /^__dbcl_get_lg_dir(dbenv, dirp)$/
+__dbcl_get_lg_max ../rpc_client/gen_client.c /^__dbcl_get_lg_max(dbenv, maxp)$/
+__dbcl_get_lg_regionmax ../rpc_client/gen_client.c /^__dbcl_get_lg_regionmax(dbenv, maxp)$/
+__dbcl_get_lk_conflicts ../rpc_client/gen_client.c /^__dbcl_get_lk_conflicts(dbenv, conflicts, modes)$/
+__dbcl_get_lk_detect ../rpc_client/gen_client.c /^__dbcl_get_lk_detect(dbenv, detectp)$/
+__dbcl_get_lk_max_lockers ../rpc_client/gen_client.c /^__dbcl_get_lk_max_lockers(dbenv, maxp)$/
+__dbcl_get_lk_max_locks ../rpc_client/gen_client.c /^__dbcl_get_lk_max_locks(dbenv, maxp)$/
+__dbcl_get_lk_max_objects ../rpc_client/gen_client.c /^__dbcl_get_lk_max_objects(dbenv, maxp)$/
+__dbcl_get_mp_maxwrite ../rpc_client/gen_client.c /^__dbcl_get_mp_maxwrite(dbenv, nwritep, nsleepp)$/
+__dbcl_get_mp_mmapsize ../rpc_client/gen_client.c /^__dbcl_get_mp_mmapsize(dbenv, mmapsizep)$/
+__dbcl_get_shm_key ../rpc_client/gen_client.c /^__dbcl_get_shm_key(dbenv, shm_keyp)$/
+__dbcl_get_tas_spins ../rpc_client/gen_client.c /^__dbcl_get_tas_spins(dbenv, tas_spinsp)$/
+__dbcl_get_timeout ../rpc_client/gen_client.c /^__dbcl_get_timeout(dbenv, timeoutp, flags)$/
+__dbcl_get_tmp_dir ../rpc_client/gen_client.c /^__dbcl_get_tmp_dir(dbenv, dirp)$/
+__dbcl_get_tx_max ../rpc_client/gen_client.c /^__dbcl_get_tx_max(dbenv, maxp)$/
+__dbcl_get_tx_timestamp ../rpc_client/gen_client.c /^__dbcl_get_tx_timestamp(dbenv, maxp)$/
+__dbcl_get_verbose ../rpc_client/gen_client.c /^__dbcl_get_verbose(dbenv, which, onoffp)$/
__dbcl_init ../db/db_method.c /^__dbcl_init(dbp, dbenv, flags)$/
__dbcl_lock_detect ../rpc_client/gen_client.c /^__dbcl_lock_detect(dbenv, flags, atype, aborted)$/
__dbcl_lock_get ../rpc_client/gen_client.c /^__dbcl_lock_get(dbenv, locker, flags, obj, mode, l/
__dbcl_lock_id ../rpc_client/gen_client.c /^__dbcl_lock_id(dbenv, idp)$/
+__dbcl_lock_id_free ../rpc_client/gen_client.c /^__dbcl_lock_id_free(dbenv, id)$/
__dbcl_lock_put ../rpc_client/gen_client.c /^__dbcl_lock_put(dbenv, lock)$/
-__dbcl_lock_stat ../rpc_client/gen_client.c /^__dbcl_lock_stat(dbenv, statp)$/
+__dbcl_lock_stat ../rpc_client/gen_client.c /^__dbcl_lock_stat(dbenv, statp, flags)$/
__dbcl_lock_vec ../rpc_client/gen_client.c /^__dbcl_lock_vec(dbenv, locker, flags, list, nlist,/
__dbcl_log_archive ../rpc_client/gen_client.c /^__dbcl_log_archive(dbenv, listp, flags)$/
+__dbcl_log_cursor ../rpc_client/gen_client.c /^__dbcl_log_cursor(dbenv, logcp, flags)$/
__dbcl_log_file ../rpc_client/gen_client.c /^__dbcl_log_file(dbenv, lsn, namep, len)$/
__dbcl_log_flush ../rpc_client/gen_client.c /^__dbcl_log_flush(dbenv, lsn)$/
-__dbcl_log_get ../rpc_client/gen_client.c /^__dbcl_log_get(dbenv, lsn, data, flags)$/
__dbcl_log_put ../rpc_client/gen_client.c /^__dbcl_log_put(dbenv, lsn, data, flags)$/
-__dbcl_log_register ../rpc_client/gen_client.c /^__dbcl_log_register(dbenv, dbp, namep)$/
-__dbcl_log_stat ../rpc_client/gen_client.c /^__dbcl_log_stat(dbenv, statp)$/
-__dbcl_log_unregister ../rpc_client/gen_client.c /^__dbcl_log_unregister(dbenv, dbp)$/
-__dbcl_memp_fclose ../rpc_client/gen_client.c /^__dbcl_memp_fclose(mpf)$/
-__dbcl_memp_fget ../rpc_client/gen_client.c /^__dbcl_memp_fget(mpf, pgno, flags, pagep)$/
-__dbcl_memp_fopen ../rpc_client/gen_client.c /^__dbcl_memp_fopen(dbenv, file, flags, mode, pagesi/
-__dbcl_memp_fput ../rpc_client/gen_client.c /^__dbcl_memp_fput(mpf, pgaddr, flags)$/
-__dbcl_memp_fset ../rpc_client/gen_client.c /^__dbcl_memp_fset(mpf, pgaddr, flags)$/
-__dbcl_memp_fsync ../rpc_client/gen_client.c /^__dbcl_memp_fsync(mpf)$/
+__dbcl_log_stat ../rpc_client/gen_client.c /^__dbcl_log_stat(dbenv, statp, flags)$/
+__dbcl_memp_fget ../rpc_client/gen_client.c /^__dbcl_memp_fget(dbmfp, pgnoaddr, flags, addrp)$/
+__dbcl_memp_fopen ../rpc_client/gen_client.c /^__dbcl_memp_fopen(dbmfp, path, flags, mode, pagesi/
+__dbcl_memp_fput ../rpc_client/gen_client.c /^__dbcl_memp_fput(dbmfp, pgaddr, flags)$/
+__dbcl_memp_fset ../rpc_client/gen_client.c /^__dbcl_memp_fset(dbmfp, pgaddr, flags)$/
+__dbcl_memp_fsync ../rpc_client/gen_client.c /^__dbcl_memp_fsync(dbmfp)$/
+__dbcl_memp_get_clear_len ../rpc_client/gen_client.c /^__dbcl_memp_get_clear_len(dbmfp, clear_lenp)$/
+__dbcl_memp_get_fileid ../rpc_client/gen_client.c /^__dbcl_memp_get_fileid(dbmfp, fileid)$/
+__dbcl_memp_get_flags ../rpc_client/gen_client.c /^__dbcl_memp_get_flags(dbmfp, flagsp)$/
+__dbcl_memp_get_ftype ../rpc_client/gen_client.c /^__dbcl_memp_get_ftype(dbmfp, ftype)$/
+__dbcl_memp_get_lsn_offset ../rpc_client/gen_client.c /^__dbcl_memp_get_lsn_offset(dbmfp, lsn_offsetp)$/
+__dbcl_memp_get_maxsize ../rpc_client/gen_client.c /^__dbcl_memp_get_maxsize(dbmfp, gbytesp, bytesp)$/
+__dbcl_memp_get_pgcookie ../rpc_client/gen_client.c /^__dbcl_memp_get_pgcookie(dbmfp, pgcookie)$/
+__dbcl_memp_get_priority ../rpc_client/gen_client.c /^__dbcl_memp_get_priority(dbmfp, priorityp)$/
__dbcl_memp_register ../rpc_client/gen_client.c /^__dbcl_memp_register(dbenv, ftype, func0, func1)$/
-__dbcl_memp_stat ../rpc_client/gen_client.c /^__dbcl_memp_stat(dbenv, gstatp, fstatp)$/
+__dbcl_memp_set_clear_len ../rpc_client/gen_client.c /^__dbcl_memp_set_clear_len(dbmfp, clear_len)$/
+__dbcl_memp_set_fileid ../rpc_client/gen_client.c /^__dbcl_memp_set_fileid(dbmfp, fileid)$/
+__dbcl_memp_set_flags ../rpc_client/gen_client.c /^__dbcl_memp_set_flags(dbmfp, flags, onoff)$/
+__dbcl_memp_set_ftype ../rpc_client/gen_client.c /^__dbcl_memp_set_ftype(dbmfp, ftype)$/
+__dbcl_memp_set_lsn_offset ../rpc_client/gen_client.c /^__dbcl_memp_set_lsn_offset(dbmfp, lsn_offset)$/
+__dbcl_memp_set_maxsize ../rpc_client/gen_client.c /^__dbcl_memp_set_maxsize(dbmfp, gbytes, bytes)$/
+__dbcl_memp_set_pgcookie ../rpc_client/gen_client.c /^__dbcl_memp_set_pgcookie(dbmfp, pgcookie)$/
+__dbcl_memp_set_priority ../rpc_client/gen_client.c /^__dbcl_memp_set_priority(dbmfp, priority)$/
+__dbcl_memp_stat ../rpc_client/gen_client.c /^__dbcl_memp_stat(dbenv, gstatp, fstatp, flags)$/
__dbcl_memp_sync ../rpc_client/gen_client.c /^__dbcl_memp_sync(dbenv, lsn)$/
__dbcl_memp_trickle ../rpc_client/gen_client.c /^__dbcl_memp_trickle(dbenv, pct, nwrotep)$/
+__dbcl_noserver ../rpc_client/gen_client.c /^__dbcl_noserver(dbenv)$/
__dbcl_refresh ../rpc_client/client.c /^__dbcl_refresh(dbenv)$/
-__dbcl_retcopy ../rpc_client/client.c /^__dbcl_retcopy(dbenv, dbt, data, len)$/
+__dbcl_rep_elect ../rpc_client/gen_client.c /^__dbcl_rep_elect(dbenv, nsites, pri, timeout, idp)/
+__dbcl_rep_flush ../rpc_client/gen_client.c /^__dbcl_rep_flush(dbenv)$/
+__dbcl_rep_get_limit ../rpc_client/gen_client.c /^__dbcl_rep_get_limit(dbenv, mbytesp, bytesp)$/
+__dbcl_rep_process_message ../rpc_client/gen_client.c /^__dbcl_rep_process_message(dbenv, rec, control, id/
+__dbcl_rep_set_limit ../rpc_client/gen_client.c /^__dbcl_rep_set_limit(dbenv, mbytes, bytes)$/
+__dbcl_rep_set_rep_transport ../rpc_client/gen_client.c /^__dbcl_rep_set_rep_transport(dbenv, id, func0)$/
+__dbcl_rep_set_request ../rpc_client/gen_client.c /^__dbcl_rep_set_request(dbenv, min, max)$/
+__dbcl_rep_start ../rpc_client/gen_client.c /^__dbcl_rep_start(dbenv, cdata, flags)$/
+__dbcl_rep_stat ../rpc_client/gen_client.c /^__dbcl_rep_stat(dbenv, statp, flags)$/
+__dbcl_retcopy ../rpc_client/client.c /^__dbcl_retcopy(dbenv, dbt, data, len, memp, memsiz/
__dbcl_rpc_illegal ../rpc_client/gen_client.c /^__dbcl_rpc_illegal(dbenv, name)$/
+__dbcl_set_app_dispatch ../rpc_client/gen_client.c /^__dbcl_set_app_dispatch(dbenv, func0)$/
__dbcl_set_data_dir ../rpc_client/gen_client.c /^__dbcl_set_data_dir(dbenv, dir)$/
__dbcl_set_lg_bsize ../rpc_client/gen_client.c /^__dbcl_set_lg_bsize(dbenv, bsize)$/
__dbcl_set_lg_dir ../rpc_client/gen_client.c /^__dbcl_set_lg_dir(dbenv, dir)$/
@@ -1996,82 +2887,212 @@ __dbcl_set_lk_max ../rpc_client/gen_client.c /^__dbcl_set_lk_max(dbenv, max)$/
__dbcl_set_lk_max_lockers ../rpc_client/gen_client.c /^__dbcl_set_lk_max_lockers(dbenv, max)$/
__dbcl_set_lk_max_locks ../rpc_client/gen_client.c /^__dbcl_set_lk_max_locks(dbenv, max)$/
__dbcl_set_lk_max_objects ../rpc_client/gen_client.c /^__dbcl_set_lk_max_objects(dbenv, max)$/
+__dbcl_set_mp_maxwrite ../rpc_client/gen_client.c /^__dbcl_set_mp_maxwrite(dbenv, nwrite, nsleep)$/
__dbcl_set_mp_mmapsize ../rpc_client/gen_client.c /^__dbcl_set_mp_mmapsize(dbenv, mmapsize)$/
-__dbcl_set_mutex_locks ../rpc_client/gen_client.c /^__dbcl_set_mutex_locks(dbenv, do_lock)$/
-__dbcl_set_recovery_init ../rpc_client/gen_client.c /^__dbcl_set_recovery_init(dbenv, func0)$/
__dbcl_set_shm_key ../rpc_client/gen_client.c /^__dbcl_set_shm_key(dbenv, shm_key)$/
+__dbcl_set_tas_spins ../rpc_client/gen_client.c /^__dbcl_set_tas_spins(dbenv, tas_spins)$/
+__dbcl_set_timeout ../rpc_client/gen_client.c /^__dbcl_set_timeout(dbenv, timeout, flags)$/
__dbcl_set_tmp_dir ../rpc_client/gen_client.c /^__dbcl_set_tmp_dir(dbenv, dir)$/
__dbcl_set_tx_max ../rpc_client/gen_client.c /^__dbcl_set_tx_max(dbenv, max)$/
-__dbcl_set_tx_recover ../rpc_client/gen_client.c /^__dbcl_set_tx_recover(dbenv, func0)$/
__dbcl_set_tx_timestamp ../rpc_client/gen_client.c /^__dbcl_set_tx_timestamp(dbenv, max)$/
__dbcl_set_verbose ../rpc_client/gen_client.c /^__dbcl_set_verbose(dbenv, which, onoff)$/
__dbcl_txn_abort ../rpc_client/gen_client.c /^__dbcl_txn_abort(txnp)$/
__dbcl_txn_abort_ret ../rpc_client/gen_client_ret.c /^__dbcl_txn_abort_ret(txnp, replyp)$/
__dbcl_txn_begin ../rpc_client/gen_client.c /^__dbcl_txn_begin(dbenv, parent, txnpp, flags)$/
__dbcl_txn_begin_ret ../rpc_client/gen_client_ret.c /^__dbcl_txn_begin_ret(envp, parent, txnpp, flags, r/
-__dbcl_txn_checkpoint ../rpc_client/gen_client.c /^__dbcl_txn_checkpoint(dbenv, kbyte, min)$/
+__dbcl_txn_checkpoint ../rpc_client/gen_client.c /^__dbcl_txn_checkpoint(dbenv, kbyte, min, flags)$/
__dbcl_txn_close ../rpc_client/client.c /^__dbcl_txn_close(dbenv)$/
__dbcl_txn_commit ../rpc_client/gen_client.c /^__dbcl_txn_commit(txnp, flags)$/
__dbcl_txn_commit_ret ../rpc_client/gen_client_ret.c /^__dbcl_txn_commit_ret(txnp, flags, replyp)$/
+__dbcl_txn_discard ../rpc_client/gen_client.c /^__dbcl_txn_discard(txnp, flags)$/
+__dbcl_txn_discard_ret ../rpc_client/gen_client_ret.c /^__dbcl_txn_discard_ret(txnp, flags, replyp)$/
__dbcl_txn_end ../rpc_client/client.c /^__dbcl_txn_end(txnp)$/
__dbcl_txn_prepare ../rpc_client/gen_client.c /^__dbcl_txn_prepare(txnp, gid)$/
__dbcl_txn_recover ../rpc_client/gen_client.c /^__dbcl_txn_recover(dbenv, preplist, count, retp, f/
__dbcl_txn_recover_ret ../rpc_client/gen_client_ret.c /^__dbcl_txn_recover_ret(dbenv, preplist, count, ret/
__dbcl_txn_setup ../rpc_client/client.c /^__dbcl_txn_setup(dbenv, txn, parent, id)$/
-__dbcl_txn_stat ../rpc_client/gen_client.c /^__dbcl_txn_stat(dbenv, statp)$/
-__dbclear_child ../rpc_server/db_server_util.c /^__dbclear_child(parent)$/
-__dbclear_ctp ../rpc_server/db_server_util.c /^__dbclear_ctp(ctp)$/
-__dbdel_ctp ../rpc_server/db_server_util.c /^__dbdel_ctp(parent)$/
-__dbenv_close ../env/env_open.c /^__dbenv_close(dbenv, flags)$/
-__dbenv_close_int ../rpc_server/db_server_util.c /^__dbenv_close_int(id, flags)$/
+__dbcl_txn_stat ../rpc_client/gen_client.c /^__dbcl_txn_stat(dbenv, statp, flags)$/
+__dbcl_txn_timeout ../rpc_client/gen_client.c /^__dbcl_txn_timeout(txnp, timeout, flags)$/
+__dbclear_child ../rpc_server/c/db_server_util.c /^__dbclear_child(parent)$/
+__dbclear_ctp ../rpc_server/c/db_server_util.c /^__dbclear_ctp(ctp)$/
+__dbdel_ctp ../rpc_server/c/db_server_util.c /^__dbdel_ctp(parent)$/
+__dbenv_close ../env/env_open.c /^__dbenv_close(dbenv, rep_check)$/
+__dbenv_close_int ../rpc_server/c/db_server_util.c /^__dbenv_close_int(id, flags, force)$/
+__dbenv_close_pp ../env/env_open.c /^__dbenv_close_pp(dbenv, flags)$/
__dbenv_config ../env/env_open.c /^__dbenv_config(dbenv, db_home, flags)$/
-__dbenv_err ../env/env_method.c /^__dbenv_err(dbenv, error, fmt, va_alist)$/
-__dbenv_errx ../env/env_method.c /^__dbenv_errx(dbenv, fmt, va_alist)$/
+__dbenv_dbremove_pp ../db/db_remove.c /^__dbenv_dbremove_pp(dbenv, txn, name, subdb, flags/
+__dbenv_dbrename ../db/db_rename.c /^__dbenv_dbrename(dbenv, txn, name, subdb, newname,/
+__dbenv_dbrename_pp ../db/db_rename.c /^__dbenv_dbrename_pp(dbenv, txn, name, subdb, newna/
+__dbenv_err ../env/env_method.c /^__dbenv_err(const DB_ENV *dbenv, int error, const /
+__dbenv_errx ../env/env_method.c /^__dbenv_errx(const DB_ENV *dbenv, const char *fmt,/
+__dbenv_get_data_dirs ../env/env_method.c /^__dbenv_get_data_dirs(dbenv, dirpp)$/
+__dbenv_get_encrypt_flags ../env/env_method.c /^__dbenv_get_encrypt_flags(dbenv, flagsp)$/
+__dbenv_get_errfile ../env/env_method.c /^__dbenv_get_errfile(dbenv, errfilep)$/
+__dbenv_get_errpfx ../env/env_method.c /^__dbenv_get_errpfx(dbenv, errpfxp)$/
+__dbenv_get_flags ../env/env_method.c /^__dbenv_get_flags(dbenv, flagsp)$/
+__dbenv_get_home ../env/env_method.c /^__dbenv_get_home(dbenv, homep)$/
+__dbenv_get_open_flags ../env/env_open.c /^__dbenv_get_open_flags(dbenv, flagsp)$/
+__dbenv_get_shm_key ../env/env_method.c /^__dbenv_get_shm_key(dbenv, shm_keyp)$/
+__dbenv_get_tas_spins ../env/env_method.c /^__dbenv_get_tas_spins(dbenv, tas_spinsp)$/
+__dbenv_get_tmp_dir ../env/env_method.c /^__dbenv_get_tmp_dir(dbenv, dirp)$/
+__dbenv_get_verbose ../env/env_method.c /^__dbenv_get_verbose(dbenv, which, onoffp)$/
__dbenv_init ../env/env_method.c /^__dbenv_init(dbenv)$/
-__dbenv_iremove ../env/env_open.c /^__dbenv_iremove(dbenv, db_home, flags, destroy_han/
+__dbenv_map_flags ../env/env_method.c /^__dbenv_map_flags(dbenv, inflagsp, outflagsp)$/
__dbenv_open ../env/env_open.c /^__dbenv_open(dbenv, db_home, flags, mode)$/
-__dbenv_refresh ../env/env_open.c /^__dbenv_refresh(dbenv)$/
+__dbenv_refresh ../env/env_open.c /^__dbenv_refresh(dbenv, orig_flags, rep_check)$/
__dbenv_remove ../env/env_open.c /^__dbenv_remove(dbenv, db_home, flags)$/
+__dbenv_remove_int ../env/env_open.c /^__dbenv_remove_int(dbenv, db_home, flags)$/
__dbenv_set_alloc ../env/env_method.c /^__dbenv_set_alloc(dbenv, mal_func, real_func, free/
+__dbenv_set_app_dispatch ../env/env_method.c /^__dbenv_set_app_dispatch(dbenv, app_dispatch)$/
__dbenv_set_data_dir ../env/env_method.c /^__dbenv_set_data_dir(dbenv, dir)$/
+__dbenv_set_encrypt ../env/env_method.c /^__dbenv_set_encrypt(dbenv, passwd, flags)$/
__dbenv_set_errcall ../env/env_method.c /^__dbenv_set_errcall(dbenv, errcall)$/
__dbenv_set_errfile ../env/env_method.c /^__dbenv_set_errfile(dbenv, errfile)$/
__dbenv_set_errpfx ../env/env_method.c /^__dbenv_set_errpfx(dbenv, errpfx)$/
__dbenv_set_feedback ../env/env_method.c /^__dbenv_set_feedback(dbenv, feedback)$/
-__dbenv_set_flags ../env/env_method.c /^__dbenv_set_flags(dbenv, flags, onoff)$/
-__dbenv_set_mutexlocks ../env/env_method.c /^__dbenv_set_mutexlocks(dbenv, onoff)$/
+__dbenv_set_flags ../env/env_method.c /^__dbenv_set_flags(dbenv, flags, on)$/
__dbenv_set_paniccall ../env/env_method.c /^__dbenv_set_paniccall(dbenv, paniccall)$/
-__dbenv_set_recovery_init ../env/env_method.c /^__dbenv_set_recovery_init(dbenv, recovery_init)$/
__dbenv_set_rpc_server_noclnt ../env/env_method.c /^__dbenv_set_rpc_server_noclnt(dbenv, cl, host, tse/
-__dbenv_set_server_noclnt ../env/env_method.c /^__dbenv_set_server_noclnt(dbenv, host, tsec, ssec,/
__dbenv_set_shm_key ../env/env_method.c /^__dbenv_set_shm_key(dbenv, shm_key)$/
+__dbenv_set_tas_spins ../env/env_method.c /^__dbenv_set_tas_spins(dbenv, tas_spins)$/
__dbenv_set_tmp_dir ../env/env_method.c /^__dbenv_set_tmp_dir(dbenv, dir)$/
-__dbenv_set_verbose ../env/env_method.c /^__dbenv_set_verbose(dbenv, which, onoff)$/
+__dbenv_set_verbose ../env/env_method.c /^__dbenv_set_verbose(dbenv, which, on)$/
__dbh_am_chk ../db/db_method.c /^__dbh_am_chk(dbp, flags)$/
-__dbh_err ../db/db_method.c /^__dbh_err(dbp, error, fmt, va_alist)$/
-__dbh_errx ../db/db_method.c /^__dbh_errx(dbp, fmt, va_alist)$/
+__dbh_err ../db/db_method.c /^__dbh_err(DB *dbp, int error, const char *fmt, .../
+__dbh_errx ../db/db_method.c /^__dbh_errx(DB *dbp, const char *fmt, ...)$/
+__dbj_app_dispatch ../libdb_java/db_java_wrap.c /^static int __dbj_app_dispatch(DB_ENV *dbenv,$/
+__dbj_append_recno ../libdb_java/db_java_wrap.c /^static int __dbj_append_recno(DB *db, DBT *dbt, db/
+__dbj_bt_compare ../libdb_java/db_java_wrap.c /^static int __dbj_bt_compare(DB *db, const DBT *dbt/
+__dbj_bt_prefix ../libdb_java/db_java_wrap.c /^static size_t __dbj_bt_prefix(DB *db, const DBT *d/
+__dbj_db_feedback ../libdb_java/db_java_wrap.c /^static void __dbj_db_feedback(DB *db, int opcode, /
+__dbj_dbt_copyin ../libdb_java/db_java_wrap.c /^static int __dbj_dbt_copyin($/
+__dbj_dbt_copyout ../libdb_java/db_java_wrap.c /^static void __dbj_dbt_copyout($/
+__dbj_dbt_release ../libdb_java/db_java_wrap.c /^static void __dbj_dbt_release($/
+__dbj_dup_compare ../libdb_java/db_java_wrap.c /^static int __dbj_dup_compare(DB *db, const DBT *db/
+__dbj_env_feedback ../libdb_java/db_java_wrap.c /^static void __dbj_env_feedback(DB_ENV *dbenv, int /
+__dbj_error ../libdb_java/db_java_wrap.c /^static void __dbj_error(const char *prefix, char */
+__dbj_fill_bt_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_bt_stat(JNIEnv *jnienv, jcla/
+__dbj_fill_h_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_h_stat(JNIEnv *jnienv, jclas/
+__dbj_fill_lock_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_lock_stat(JNIEnv *jnienv, jc/
+__dbj_fill_log_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_log_stat(JNIEnv *jnienv, jcl/
+__dbj_fill_mpool_fstat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_mpool_fstat(JNIEnv *jnienv, /
+__dbj_fill_mpool_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_mpool_stat(JNIEnv *jnienv, j/
+__dbj_fill_qam_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_qam_stat(JNIEnv *jnienv, jcl/
+__dbj_fill_rep_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_rep_stat(JNIEnv *jnienv, jcl/
+__dbj_fill_txn_active ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_active(JNIEnv *jnienv, j/
+__dbj_fill_txn_stat ../libdb_java/java_stat_auto.c /^static int __dbj_fill_txn_stat(JNIEnv *jnienv, jcl/
+__dbj_get_except ../libdb_java/db_java_wrap.c /^static jthrowable __dbj_get_except(JNIEnv *jenv,$/
+__dbj_get_jnienv ../libdb_java/db_java_wrap.c /^static JNIEnv *__dbj_get_jnienv(void)$/
+__dbj_h_hash ../libdb_java/db_java_wrap.c /^static u_int32_t __dbj_h_hash(DB *db, const void */
+__dbj_panic ../libdb_java/db_java_wrap.c /^static void __dbj_panic(DB_ENV *dbenv, int err)$/
+__dbj_rep_transport ../libdb_java/db_java_wrap.c /^static int __dbj_rep_transport(DB_ENV *dbenv,$/
+__dbj_seckey_create ../libdb_java/db_java_wrap.c /^static int __dbj_seckey_create(DB *db,$/
+__dbj_throw ../libdb_java/db_java_wrap.c /^static int __dbj_throw(JNIEnv *jenv, int err, cons/
+__dbj_verify_callback ../libdb_java/db_java_wrap.c /^static int __dbj_verify_callback(void *handle, con/
+__dbj_wrap_DB_LSN ../libdb_java/db_java_wrap.c /^static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_/
__dblist_get ../db/db.c /^__dblist_get(dbenv, adjid)$/
-__dbsrv_active ../rpc_server/db_server_util.c /^__dbsrv_active(ctp)$/
-__dbsrv_main ../rpc_server/db_server_svc.c /^void __dbsrv_main()$/
-__dbsrv_settimeout ../rpc_server/db_server_util.c /^__dbsrv_settimeout(ctp, to)$/
-__dbsrv_timeout ../rpc_server/db_server_util.c /^__dbsrv_timeout(force)$/
+__dbreg_add_dbentry ../dbreg/dbreg_util.c /^__dbreg_add_dbentry(dbenv, dblp, dbp, ndx)$/
+__dbreg_assign_id ../dbreg/dbreg.c /^__dbreg_assign_id(dbp, id)$/
+__dbreg_check_master ../dbreg/dbreg_util.c /^__dbreg_check_master(dbenv, uid, name)$/
+__dbreg_close_files ../dbreg/dbreg_util.c /^__dbreg_close_files(dbenv)$/
+__dbreg_close_id ../dbreg/dbreg.c /^__dbreg_close_id(dbp, txn)$/
+__dbreg_do_open ../dbreg/dbreg_util.c /^__dbreg_do_open(dbenv,$/
+__dbreg_fid_to_fname ../dbreg/dbreg_util.c /^__dbreg_fid_to_fname(dblp, fid, have_lock, fnamep)/
+__dbreg_get_id ../dbreg/dbreg.c /^__dbreg_get_id(dbp, txn, idp)$/
+__dbreg_get_name ../dbreg/dbreg_util.c /^__dbreg_get_name(dbenv, fid, namep)$/
+__dbreg_id_to_db ../dbreg/dbreg_util.c /^__dbreg_id_to_db(dbenv, txn, dbpp, ndx, inc)$/
+__dbreg_id_to_db_int ../dbreg/dbreg_util.c /^__dbreg_id_to_db_int(dbenv, txn, dbpp, ndx, inc, t/
+__dbreg_id_to_fname ../dbreg/dbreg_util.c /^__dbreg_id_to_fname(dblp, lid, have_lock, fnamep)$/
+__dbreg_init_getpgnos ../dbreg/dbreg_auto.c /^__dbreg_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__dbreg_init_print ../dbreg/dbreg_auto.c /^__dbreg_init_print(dbenv, dtabp, dtabsizep)$/
+__dbreg_init_recover ../dbreg/dbreg_auto.c /^__dbreg_init_recover(dbenv, dtabp, dtabsizep)$/
+__dbreg_lazy_id ../dbreg/dbreg_util.c /^__dbreg_lazy_id(dbp)$/
+__dbreg_new_id ../dbreg/dbreg.c /^__dbreg_new_id(dbp, txn)$/
+__dbreg_open_file ../dbreg/dbreg_rec.c /^__dbreg_open_file(dbenv, txn, argp, info)$/
+__dbreg_open_files ../dbreg/dbreg_util.c /^__dbreg_open_files(dbenv)$/
+__dbreg_pluck_id ../dbreg/dbreg_util.c /^__dbreg_pluck_id(dbenv, id)$/
+__dbreg_pop_id ../dbreg/dbreg_util.c /^__dbreg_pop_id(dbenv, id)$/
+__dbreg_print_dblist ../dbreg/dbreg_util.c /^__dbreg_print_dblist(dbenv)$/
+__dbreg_push_id ../dbreg/dbreg_util.c /^__dbreg_push_id(dbenv, id)$/
+__dbreg_register_getpgnos ../dbreg/dbreg_auto.c /^__dbreg_register_getpgnos(dbenv, rec, lsnp, notuse/
+__dbreg_register_log ../dbreg/dbreg_auto.c /^__dbreg_register_log(dbenv, txnid, ret_lsnp, flags/
+__dbreg_register_print ../dbreg/dbreg_auto.c /^__dbreg_register_print(dbenv, dbtp, lsnp, notused2/
+__dbreg_register_read ../dbreg/dbreg_auto.c /^__dbreg_register_read(dbenv, recbuf, argpp)$/
+__dbreg_register_recover ../dbreg/dbreg_rec.c /^__dbreg_register_recover(dbenv, dbtp, lsnp, op, in/
+__dbreg_rem_dbentry ../dbreg/dbreg_util.c /^__dbreg_rem_dbentry(dblp, ndx)$/
+__dbreg_revoke_id ../dbreg/dbreg.c /^__dbreg_revoke_id(dbp, have_lock, force_id)$/
+__dbreg_setup ../dbreg/dbreg.c /^__dbreg_setup(dbp, name, create_txnid)$/
+__dbreg_teardown ../dbreg/dbreg.c /^__dbreg_teardown(dbp)$/
+__dbsrv_active ../rpc_server/c/db_server_util.c /^__dbsrv_active(ctp)$/
+__dbsrv_main ../rpc_server/c/db_server_svc.c /^void __dbsrv_main()$/
+__dbsrv_settimeout ../rpc_server/c/db_server_util.c /^__dbsrv_settimeout(ctp, to)$/
+__dbsrv_sharedb ../rpc_server/c/db_server_util.c /^__dbsrv_sharedb(db_ctp, name, subdb, type, flags)$/
+__dbsrv_shareenv ../rpc_server/c/db_server_util.c /^__dbsrv_shareenv(env_ctp, home, flags)$/
+__dbsrv_timeout ../rpc_server/c/db_server_util.c /^__dbsrv_timeout(force)$/
__dbt_ferr ../db/db_iface.c /^__dbt_ferr(dbp, name, dbt, check_thread)$/
__dd_abort ../lock/lock_deadlock.c /^__dd_abort(dbenv, info)$/
__dd_build ../lock/lock_deadlock.c /^__dd_build(dbenv, atype, bmp, nlockers, allocp, id/
__dd_debug ../lock/lock_deadlock.c /^__dd_debug(dbenv, idmap, bitmap, nlockers, nalloc)/
__dd_find ../lock/lock_deadlock.c /^__dd_find(dbenv, bmp, idmap, nlockers, nalloc, dea/
-__dd_verify ../lock/lock_deadlock.c /^__dd_verify(deadmap, tmpmap, origmap, nlockers, na/
-__deprecated_recover ../db/db_dispatch.c /^__deprecated_recover(dbenv, dbtp, lsnp, op, info)$/
-__env_cachesize_proc ../rpc_server/db_server_proc.c /^__env_cachesize_proc(dbenvcl_id, gbytes, bytes,$/
-__env_close_proc ../rpc_server/db_server_proc.c /^__env_close_proc(dbenvcl_id, flags, replyp)$/
-__env_create_proc ../rpc_server/db_server_proc.c /^__env_create_proc(timeout, replyp)$/
-__env_flags_proc ../rpc_server/db_server_proc.c /^__env_flags_proc(dbenvcl_id, flags, onoff, replyp)/
-__env_open_proc ../rpc_server/db_server_proc.c /^__env_open_proc(dbenvcl_id, home, flags,$/
-__env_openfiles ../env/env_recover.c /^__env_openfiles(dbenv, txninfo, data, open_lsn, la/
-__env_remove_proc ../rpc_server/db_server_proc.c /^__env_remove_proc(dbenvcl_id, home, flags, replyp)/
-__epg ../include/btree.h /^struct __epg {$/
-__fh_t ../include/os.h /^struct __fh_t {$/
-__fname ../include/log.h /^struct __fname {$/
+__dd_isolder ../lock/lock_deadlock.c /^__dd_isolder(a, b, lock_max, txn_max)$/
+__dd_verify ../lock/lock_deadlock.c /^__dd_verify(idmap, deadmap, tmpmap, origmap, nlock/
+__env_cachesize_proc ../rpc_server/c/db_server_proc.c /^__env_cachesize_proc(dbenvcl_id, gbytes, bytes,$/
+__env_close_proc ../rpc_server/c/db_server_proc.c /^__env_close_proc(dbenvcl_id, flags, replyp)$/
+__env_create_proc ../rpc_server/c/db_server_proc.c /^__env_create_proc(timeout, replyp)$/
+__env_dbremove_proc ../rpc_server/c/db_server_proc.c /^__env_dbremove_proc(dbenvcl_id, txnpcl_id, name,$/
+__env_dbrename_proc ../rpc_server/c/db_server_proc.c /^__env_dbrename_proc(dbenvcl_id, txnpcl_id, name,$/
+__env_encrypt_proc ../rpc_server/c/db_server_proc.c /^__env_encrypt_proc(dbenvcl_id, passwd, flags, repl/
+__env_flags_proc ../rpc_server/c/db_server_proc.c /^__env_flags_proc(dbenvcl_id, flags, onoff, replyp)/
+__env_get_cachesize_proc ../rpc_server/c/db_server_proc.c /^__env_get_cachesize_proc(dbenvcl_id,$/
+__env_get_encrypt_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_encrypt_flags_proc(dbenvcl_id, replyp)$/
+__env_get_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_flags_proc(dbenvcl_id, replyp)$/
+__env_get_home_proc ../rpc_server/c/db_server_proc.c /^__env_get_home_proc(dbenvcl_id, replyp)$/
+__env_get_open_flags_proc ../rpc_server/c/db_server_proc.c /^__env_get_open_flags_proc(dbenvcl_id, replyp)$/
+__env_open_proc ../rpc_server/c/db_server_proc.c /^__env_open_proc(dbenvcl_id, home, flags,$/
+__env_openfiles ../env/env_recover.c /^__env_openfiles(dbenv, logc, txninfo,$/
+__env_remove_proc ../rpc_server/c/db_server_proc.c /^__env_remove_proc(dbenvcl_id, home, flags, replyp)/
+__env_rep_enter ../rep/rep_util.c /^__env_rep_enter(dbenv)$/
+__env_rep_exit ../rep/rep_util.c /^__env_rep_exit(dbenv)$/
+__fop_create ../fileops/fop_basic.c /^__fop_create(dbenv, txn, fhpp, name, appname, mode/
+__fop_create_getpgnos ../fileops/fileops_auto.c /^__fop_create_getpgnos(dbenv, rec, lsnp, notused1, /
+__fop_create_log ../fileops/fileops_auto.c /^__fop_create_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_create_print ../fileops/fileops_auto.c /^__fop_create_print(dbenv, dbtp, lsnp, notused2, no/
+__fop_create_read ../fileops/fileops_auto.c /^__fop_create_read(dbenv, recbuf, argpp)$/
+__fop_create_recover ../fileops/fop_rec.c /^__fop_create_recover(dbenv, dbtp, lsnp, op, info)$/
+__fop_dbrename ../fileops/fop_util.c /^__fop_dbrename(dbp, old, new)$/
+__fop_dummy ../fileops/fop_util.c /^__fop_dummy(dbp, txn, old, new, flags)$/
+__fop_file_remove_getpgnos ../fileops/fileops_auto.c /^__fop_file_remove_getpgnos(dbenv, rec, lsnp, notus/
+__fop_file_remove_log ../fileops/fileops_auto.c /^__fop_file_remove_log(dbenv, txnid, ret_lsnp, flag/
+__fop_file_remove_print ../fileops/fileops_auto.c /^__fop_file_remove_print(dbenv, dbtp, lsnp, notused/
+__fop_file_remove_read ../fileops/fileops_auto.c /^__fop_file_remove_read(dbenv, recbuf, argpp)$/
+__fop_file_remove_recover ../fileops/fop_rec.c /^__fop_file_remove_recover(dbenv, dbtp, lsnp, op, i/
+__fop_file_setup ../fileops/fop_util.c /^__fop_file_setup(dbp, txn, name, mode, flags, reti/
+__fop_init_getpgnos ../fileops/fileops_auto.c /^__fop_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__fop_init_print ../fileops/fileops_auto.c /^__fop_init_print(dbenv, dtabp, dtabsizep)$/
+__fop_init_recover ../fileops/fileops_auto.c /^__fop_init_recover(dbenv, dtabp, dtabsizep)$/
+__fop_lock_handle ../fileops/fop_util.c /^__fop_lock_handle(dbenv, dbp, locker, mode, elock,/
+__fop_read_meta ../fileops/fop_util.c /^__fop_read_meta(dbenv, name, buf, size, fhp, errok/
+__fop_remove ../fileops/fop_basic.c /^__fop_remove(dbenv, txn, fileid, name, appname, fl/
+__fop_remove_getpgnos ../fileops/fileops_auto.c /^__fop_remove_getpgnos(dbenv, rec, lsnp, notused1, /
+__fop_remove_log ../fileops/fileops_auto.c /^__fop_remove_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_remove_print ../fileops/fileops_auto.c /^__fop_remove_print(dbenv, dbtp, lsnp, notused2, no/
+__fop_remove_read ../fileops/fileops_auto.c /^__fop_remove_read(dbenv, recbuf, argpp)$/
+__fop_remove_recover ../fileops/fop_rec.c /^__fop_remove_recover(dbenv, dbtp, lsnp, op, info)$/
+__fop_remove_setup ../fileops/fop_util.c /^__fop_remove_setup(dbp, txn, name, flags)$/
+__fop_rename ../fileops/fop_basic.c /^__fop_rename(dbenv, txn, oldname, newname, fid, ap/
+__fop_rename_getpgnos ../fileops/fileops_auto.c /^__fop_rename_getpgnos(dbenv, rec, lsnp, notused1, /
+__fop_rename_log ../fileops/fileops_auto.c /^__fop_rename_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_rename_print ../fileops/fileops_auto.c /^__fop_rename_print(dbenv, dbtp, lsnp, notused2, no/
+__fop_rename_read ../fileops/fileops_auto.c /^__fop_rename_read(dbenv, recbuf, argpp)$/
+__fop_rename_recover ../fileops/fop_rec.c /^__fop_rename_recover(dbenv, dbtp, lsnp, op, info)$/
+__fop_set_pgsize ../fileops/fop_util.c /^__fop_set_pgsize(dbp, fhp, name)$/
+__fop_subdb_setup ../fileops/fop_util.c /^__fop_subdb_setup(dbp, txn, mname, name, mode, fla/
+__fop_write ../fileops/fop_basic.c /^__fop_write(dbenv,$/
+__fop_write_getpgnos ../fileops/fileops_auto.c /^__fop_write_getpgnos(dbenv, rec, lsnp, notused1, s/
+__fop_write_log ../fileops/fileops_auto.c /^__fop_write_log(dbenv, txnid, ret_lsnp, flags,$/
+__fop_write_print ../fileops/fileops_auto.c /^__fop_write_print(dbenv, dbtp, lsnp, notused2, not/
+__fop_write_read ../fileops/fileops_auto.c /^__fop_write_read(dbenv, recbuf, argpp)$/
+__fop_write_recover ../fileops/fop_rec.c /^__fop_write_recover(dbenv, dbtp, lsnp, op, info)$/
__ham_30_hashmeta ../hash/hash_upgrade.c /^__ham_30_hashmeta(dbp, real_name, obuf)$/
__ham_30_sizefix ../hash/hash_upgrade.c /^__ham_30_sizefix(dbp, fhp, realname, metabuf)$/
__ham_31_hash ../hash/hash_upgrade.c /^__ham_31_hash(dbp, real_name, flags, fhp, h, dirty/
@@ -2079,12 +3100,13 @@ __ham_31_hashmeta ../hash/hash_upgrade.c /^__ham_31_hashmeta(dbp, real_name, fla
__ham_add_dup ../hash/hash_dup.c /^__ham_add_dup(dbc, nval, flags, pgnop)$/
__ham_add_el ../hash/hash_page.c /^__ham_add_el(dbc, key, val, type)$/
__ham_add_ovflpage ../hash/hash_page.c /^__ham_add_ovflpage(dbc, pagep, release, pp)$/
-__ham_alloc_pages ../hash/hash_rec.c /^__ham_alloc_pages(dbp, argp)$/
+__ham_alloc_pages ../hash/hash_rec.c /^__ham_alloc_pages(dbp, argp, lsnp)$/
__ham_bulk ../hash/hash.c /^__ham_bulk(dbc, data, flags)$/
-__ham_c_chgpg ../hash/hash.c /^__ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, /
+__ham_c_chgpg ../hash/hash_dup.c /^__ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, /
__ham_c_close ../hash/hash.c /^__ham_c_close(dbc, root_pgno, rmroot)$/
__ham_c_count ../hash/hash.c /^__ham_c_count(dbc, recnop)$/
__ham_c_del ../hash/hash.c /^__ham_c_del(dbc)$/
+__ham_c_delpg ../hash/hash_page.c /^__ham_c_delpg(dbc, old_pgno, new_pgno, num_ent, op/
__ham_c_destroy ../hash/hash.c /^__ham_c_destroy(dbc)$/
__ham_c_dup ../hash/hash.c /^__ham_c_dup(orig_dbc, new_dbc)$/
__ham_c_get ../hash/hash.c /^__ham_c_get(dbc, key, data, flags, pgnop)$/
@@ -2094,17 +3116,20 @@ __ham_c_update ../hash/hash.c /^__ham_c_update(dbc, len, add, is_dup)$/
__ham_c_writelock ../hash/hash.c /^__ham_c_writelock(dbc)$/
__ham_call_hash ../hash/hash.c /^__ham_call_hash(dbc, k, len)$/
__ham_check_move ../hash/hash_dup.c /^__ham_check_move(dbc, add_len)$/
-__ham_chgpg_log ../hash/hash_auto.c /^__ham_chgpg_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_chgpg_getpgnos ../hash/hash_auto.c /^__ham_chgpg_getpgnos(dbenv, rec, lsnp, notused1, s/
+__ham_chgpg_log ../hash/hash_auto.c /^__ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode,/
__ham_chgpg_print ../hash/hash_auto.c /^__ham_chgpg_print(dbenv, dbtp, lsnp, notused2, not/
__ham_chgpg_read ../hash/hash_auto.c /^__ham_chgpg_read(dbenv, recbuf, argpp)$/
__ham_chgpg_recover ../hash/hash_rec.c /^__ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)$/
-__ham_copy_item ../hash/hash_page.c /^__ham_copy_item(pgsize, src_page, src_ndx, dest_pa/
-__ham_copypage_log ../hash/hash_auto.c /^__ham_copypage_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_copy_item ../hash/hash_page.c /^__ham_copy_item(dbp, src_page, src_ndx, dest_page)/
+__ham_copypage_getpgnos ../hash/hash_auto.c /^__ham_copypage_getpgnos(dbenv, rec, lsnp, notused1/
+__ham_copypage_log ../hash/hash_auto.c /^__ham_copypage_log(dbp, txnid, ret_lsnp, flags, pg/
__ham_copypage_print ../hash/hash_auto.c /^__ham_copypage_print(dbenv, dbtp, lsnp, notused2, /
__ham_copypage_read ../hash/hash_auto.c /^__ham_copypage_read(dbenv, recbuf, argpp)$/
__ham_copypage_recover ../hash/hash_rec.c /^__ham_copypage_recover(dbenv, dbtp, lsnp, op, info/
__ham_cprint ../hash/hash_dup.c /^__ham_cprint(dbc)$/
-__ham_curadj_log ../hash/hash_auto.c /^__ham_curadj_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_curadj_getpgnos ../hash/hash_auto.c /^__ham_curadj_getpgnos(dbenv, rec, lsnp, notused1, /
+__ham_curadj_log ../hash/hash_auto.c /^__ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno/
__ham_curadj_print ../hash/hash_auto.c /^__ham_curadj_print(dbenv, dbtp, lsnp, notused2, no/
__ham_curadj_read ../hash/hash_auto.c /^__ham_curadj_read(dbenv, recbuf, argpp)$/
__ham_curadj_recover ../hash/hash_rec.c /^__ham_curadj_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -2114,31 +3139,32 @@ __ham_dcursor ../hash/hash_dup.c /^__ham_dcursor(dbc, pgno, indx)$/
__ham_del_pair ../hash/hash_page.c /^__ham_del_pair(dbc, reclaim_page)$/
__ham_dirty_meta ../hash/hash_meta.c /^__ham_dirty_meta(dbc)$/
__ham_dpair ../hash/hash_page.c /^__ham_dpair(dbp, p, indx)$/
-__ham_dsearch ../hash/hash_dup.c /^__ham_dsearch(dbc, dbt, offp, cmpp)$/
+__ham_dsearch ../hash/hash_dup.c /^__ham_dsearch(dbc, dbt, offp, cmpp, flags)$/
__ham_dup_convert ../hash/hash_dup.c /^__ham_dup_convert(dbc)$/
-__ham_dup_return ../hash/hash.c /^__ham_dup_return (dbc, val, flags)$/
+__ham_dup_return ../hash/hash.c /^__ham_dup_return(dbc, val, flags)$/
__ham_dups_unsorted ../hash/hash_verify.c /^__ham_dups_unsorted(dbp, buf, len)$/
__ham_expand_table ../hash/hash.c /^__ham_expand_table(dbc)$/
__ham_func2 ../hash/hash_func.c /^__ham_func2(dbp, key, len)$/
__ham_func3 ../hash/hash_func.c /^__ham_func3(dbp, key, len)$/
__ham_func4 ../hash/hash_func.c /^__ham_func4(dbp, key, len)$/
__ham_func5 ../hash/hash_func.c /^__ham_func5(dbp, key, len)$/
-__ham_get_clist ../hash/hash.c /^__ham_get_clist(dbp, bucket, indx, listp)$/
+__ham_get_clist ../hash/hash.c /^__ham_get_clist(dbp, pgno, indx, listp)$/
__ham_get_cpage ../hash/hash_page.c /^__ham_get_cpage(dbc, mode)$/
+__ham_get_h_ffactor ../hash/hash_method.c /^__ham_get_h_ffactor(dbp, h_ffactorp)$/
+__ham_get_h_nelem ../hash/hash_method.c /^__ham_get_h_nelem(dbp, h_nelemp)$/
__ham_get_meta ../hash/hash_meta.c /^__ham_get_meta(dbc)$/
-__ham_groupalloc1_print ../hash/hash_auto.c /^__ham_groupalloc1_print(dbenv, dbtp, lsnp, notused/
-__ham_groupalloc1_read ../hash/hash_auto.c /^__ham_groupalloc1_read(dbenv, recbuf, argpp)$/
-__ham_groupalloc2_print ../hash/hash_auto.c /^__ham_groupalloc2_print(dbenv, dbtp, lsnp, notused/
-__ham_groupalloc2_read ../hash/hash_auto.c /^__ham_groupalloc2_read(dbenv, recbuf, argpp)$/
-__ham_groupalloc_log ../hash/hash_auto.c /^__ham_groupalloc_log(dbenv, txnid, ret_lsnp, flags/
+__ham_groupalloc_getpgnos ../hash/hash_auto.c /^__ham_groupalloc_getpgnos(dbenv, rec, lsnp, notuse/
+__ham_groupalloc_log ../hash/hash_auto.c /^__ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, /
__ham_groupalloc_print ../hash/hash_auto.c /^__ham_groupalloc_print(dbenv, dbtp, lsnp, notused2/
__ham_groupalloc_read ../hash/hash_auto.c /^__ham_groupalloc_read(dbenv, recbuf, argpp)$/
__ham_groupalloc_recover ../hash/hash_rec.c /^__ham_groupalloc_recover(dbenv, dbtp, lsnp, op, in/
__ham_init_dbt ../hash/hash.c /^__ham_init_dbt(dbenv, dbt, size, bufp, sizep)$/
-__ham_init_htab ../hash/hash.c /^__ham_init_htab(dbc, name, pgno, nelem, ffactor)$/
-__ham_init_print ../hash/hash_auto.c /^__ham_init_print(dbenv)$/
-__ham_init_recover ../hash/hash_auto.c /^__ham_init_recover(dbenv)$/
-__ham_insdel_log ../hash/hash_auto.c /^__ham_insdel_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_init_getpgnos ../hash/hash_auto.c /^__ham_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__ham_init_meta ../hash/hash_open.c /^__ham_init_meta(dbp, meta, pgno, lsnp)$/
+__ham_init_print ../hash/hash_auto.c /^__ham_init_print(dbenv, dtabp, dtabsizep)$/
+__ham_init_recover ../hash/hash_auto.c /^__ham_init_recover(dbenv, dtabp, dtabsizep)$/
+__ham_insdel_getpgnos ../hash/hash_auto.c /^__ham_insdel_getpgnos(dbenv, rec, lsnp, notused1, /
+__ham_insdel_log ../hash/hash_auto.c /^__ham_insdel_log(dbp, txnid, ret_lsnp, flags,$/
__ham_insdel_print ../hash/hash_auto.c /^__ham_insdel_print(dbenv, dbtp, lsnp, notused2, no/
__ham_insdel_read ../hash/hash_auto.c /^__ham_insdel_read(dbenv, recbuf, argpp)$/
__ham_insdel_recover ../hash/hash_rec.c /^__ham_insdel_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -2153,77 +3179,96 @@ __ham_lock_bucket ../hash/hash_page.c /^__ham_lock_bucket(dbc, mode)$/
__ham_lookup ../hash/hash.c /^__ham_lookup(dbc, key, sought, mode, pgnop)$/
__ham_make_dup ../hash/hash_dup.c /^__ham_make_dup(dbenv, notdup, duplicate, bufp, siz/
__ham_meta2pgset ../hash/hash_verify.c /^int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset/
-__ham_metachk ../hash/hash.c /^__ham_metachk(dbp, name, hashm)$/
-__ham_metagroup_log ../hash/hash_auto.c /^__ham_metagroup_log(dbenv, txnid, ret_lsnp, flags,/
+__ham_metachk ../hash/hash_open.c /^__ham_metachk(dbp, name, hashm)$/
+__ham_metagroup_getpgnos ../hash/hash_auto.c /^__ham_metagroup_getpgnos(dbenv, rec, lsnp, notused/
+__ham_metagroup_log ../hash/hash_auto.c /^__ham_metagroup_log(dbp, txnid, ret_lsnp, flags, b/
__ham_metagroup_print ../hash/hash_auto.c /^__ham_metagroup_print(dbenv, dbtp, lsnp, notused2,/
__ham_metagroup_read ../hash/hash_auto.c /^__ham_metagroup_read(dbenv, recbuf, argpp)$/
__ham_metagroup_recover ../hash/hash_rec.c /^__ham_metagroup_recover(dbenv, dbtp, lsnp, op, inf/
__ham_move_offpage ../hash/hash_dup.c /^__ham_move_offpage(dbc, pagep, ndx, pgno)$/
__ham_mswap ../hash/hash_conv.c /^__ham_mswap(pg)$/
-__ham_newpage_log ../hash/hash_auto.c /^__ham_newpage_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_new_file ../hash/hash_open.c /^__ham_new_file(dbp, txn, fhp, name)$/
+__ham_new_subdb ../hash/hash_open.c /^__ham_new_subdb(mdbp, dbp, txn)$/
+__ham_newpage_getpgnos ../hash/hash_auto.c /^__ham_newpage_getpgnos(dbenv, rec, lsnp, notused1,/
+__ham_newpage_log ../hash/hash_auto.c /^__ham_newpage_log(dbp, txnid, ret_lsnp, flags,$/
__ham_newpage_print ../hash/hash_auto.c /^__ham_newpage_print(dbenv, dbtp, lsnp, notused2, n/
__ham_newpage_read ../hash/hash_auto.c /^__ham_newpage_read(dbenv, recbuf, argpp)$/
__ham_newpage_recover ../hash/hash_rec.c /^__ham_newpage_recover(dbenv, dbtp, lsnp, op, info)/
-__ham_newpgno_print ../hash/hash_auto.c /^__ham_newpgno_print(dbenv, dbtp, lsnp, notused2, n/
-__ham_newpgno_read ../hash/hash_auto.c /^__ham_newpgno_read(dbenv, recbuf, argpp)$/
__ham_next_cpage ../hash/hash_page.c /^__ham_next_cpage(dbc, pgno, dirty)$/
-__ham_onpage_replace ../hash/hash_page.c /^__ham_onpage_replace(pagep, pgsize, ndx, off, chan/
-__ham_open ../hash/hash.c /^__ham_open(dbp, name, base_pgno, flags)$/
+__ham_onpage_replace ../hash/hash_page.c /^__ham_onpage_replace(dbp, pagep, ndx, off, change,/
+__ham_open ../hash/hash_open.c /^__ham_open(dbp, txn, name, base_pgno, flags)$/
__ham_overwrite ../hash/hash.c /^__ham_overwrite(dbc, nval, flags)$/
-__ham_ovfl_print ../hash/hash_auto.c /^__ham_ovfl_print(dbenv, dbtp, lsnp, notused2, notu/
-__ham_ovfl_read ../hash/hash_auto.c /^__ham_ovfl_read(dbenv, recbuf, argpp)$/
-__ham_pgin ../hash/hash_conv.c /^__ham_pgin(dbenv, pg, pp, cookie)$/
-__ham_pgout ../hash/hash_conv.c /^__ham_pgout(dbenv, pg, pp, cookie)$/
-__ham_putitem ../hash/hash_page.c /^__ham_putitem(p, dbt, type)$/
+__ham_pgin ../hash/hash_conv.c /^__ham_pgin(dbenv, dummydbp, pg, pp, cookie)$/
+__ham_pgout ../hash/hash_conv.c /^__ham_pgout(dbenv, dummydbp, pg, pp, cookie)$/
+__ham_putitem ../hash/hash_page.c /^__ham_putitem(dbp, p, dbt, type)$/
__ham_quick_delete ../hash/hash.c /^__ham_quick_delete(dbc)$/
__ham_reclaim ../hash/hash_reclaim.c /^__ham_reclaim(dbp, txn)$/
__ham_release_meta ../hash/hash_meta.c /^__ham_release_meta(dbc)$/
-__ham_replace_log ../hash/hash_auto.c /^__ham_replace_log(dbenv, txnid, ret_lsnp, flags,$/
+__ham_replace_getpgnos ../hash/hash_auto.c /^__ham_replace_getpgnos(dbenv, rec, lsnp, notused1,/
+__ham_replace_log ../hash/hash_auto.c /^__ham_replace_log(dbp, txnid, ret_lsnp, flags, pgn/
__ham_replace_print ../hash/hash_auto.c /^__ham_replace_print(dbenv, dbtp, lsnp, notused2, n/
__ham_replace_read ../hash/hash_auto.c /^__ham_replace_read(dbenv, recbuf, argpp)$/
__ham_replace_recover ../hash/hash_rec.c /^__ham_replace_recover(dbenv, dbtp, lsnp, op, info)/
__ham_replpair ../hash/hash_page.c /^__ham_replpair(dbc, dbt, make_dup)$/
-__ham_reputpair ../hash/hash_page.c /^__ham_reputpair(p, psize, ndx, key, data)$/
+__ham_reputpair ../hash/hash_page.c /^__ham_reputpair(dbp, p, ndx, key, data)$/
__ham_salvage ../hash/hash_verify.c /^__ham_salvage(dbp, vdp, pgno, h, handle, callback,/
__ham_set_h_ffactor ../hash/hash_method.c /^__ham_set_h_ffactor(dbp, h_ffactor)$/
__ham_set_h_hash ../hash/hash_method.c /^__ham_set_h_hash(dbp, func)$/
__ham_set_h_nelem ../hash/hash_method.c /^__ham_set_h_nelem(dbp, h_nelem)$/
__ham_split_page ../hash/hash_page.c /^__ham_split_page(dbc, obucket, nbucket)$/
-__ham_splitdata_log ../hash/hash_auto.c /^__ham_splitdata_log(dbenv, txnid, ret_lsnp, flags,/
+__ham_splitdata_getpgnos ../hash/hash_auto.c /^__ham_splitdata_getpgnos(dbenv, rec, lsnp, notused/
+__ham_splitdata_log ../hash/hash_auto.c /^__ham_splitdata_log(dbp, txnid, ret_lsnp, flags, o/
__ham_splitdata_print ../hash/hash_auto.c /^__ham_splitdata_print(dbenv, dbtp, lsnp, notused2,/
__ham_splitdata_read ../hash/hash_auto.c /^__ham_splitdata_read(dbenv, recbuf, argpp)$/
__ham_splitdata_recover ../hash/hash_rec.c /^__ham_splitdata_recover(dbenv, dbtp, lsnp, op, inf/
-__ham_splitmeta_print ../hash/hash_auto.c /^__ham_splitmeta_print(dbenv, dbtp, lsnp, notused2,/
-__ham_splitmeta_read ../hash/hash_auto.c /^__ham_splitmeta_read(dbenv, recbuf, argpp)$/
-__ham_stat ../hash/hash_stat.c /^__ham_stat(dbp, spp, flags)$/
+__ham_stat ../hash/hash_stat.c /^__ham_stat(dbc, spp, flags)$/
__ham_stat_callback ../hash/hash_stat.c /^__ham_stat_callback(dbp, pagep, cookie, putp)$/
__ham_test ../hash/hash_func.c /^__ham_test(dbp, key, len)$/
__ham_traverse ../hash/hash_stat.c /^__ham_traverse(dbc, mode, callback, cookie, look_p/
-__ham_truncate ../hash/hash_reclaim.c /^__ham_truncate(dbp, txn, countp)$/
+__ham_truncate ../hash/hash_reclaim.c /^__ham_truncate(dbc, countp)$/
__ham_vrfy ../hash/hash_verify.c /^__ham_vrfy(dbp, vdp, h, pgno, flags)$/
__ham_vrfy_bucket ../hash/hash_verify.c /^__ham_vrfy_bucket(dbp, vdp, m, bucket, flags)$/
__ham_vrfy_hashing ../hash/hash_verify.c /^__ham_vrfy_hashing(dbp, nentries, m, thisbucket, p/
__ham_vrfy_item ../hash/hash_verify.c /^__ham_vrfy_item(dbp, vdp, pgno, h, i, flags)$/
__ham_vrfy_meta ../hash/hash_verify.c /^__ham_vrfy_meta(dbp, vdp, m, pgno, flags)$/
__ham_vrfy_structure ../hash/hash_verify.c /^__ham_vrfy_structure(dbp, vdp, meta_pgno, flags)$/
-__hdr ../include/log.h /^struct __hdr {$/
-__key_range ../include/db.in /^struct __key_range {$/
+__int64 ../libdb_java/db_java_wrap.c 13
__lock_addfamilylocker ../lock/lock.c /^__lock_addfamilylocker(dbenv, pid, id)$/
-__lock_checklocker ../lock/lock.c /^__lock_checklocker(lt, lockp, locker, flags, freed/
-__lock_close ../lock/lock_region.c /^__lock_close(dbenv)$/
__lock_cmp ../lock/lock_util.c /^__lock_cmp(dbt, lock_obj)$/
-__lock_dbenv_close ../lock/lock_region.c /^__lock_dbenv_close(dbenv)$/
-__lock_dbenv_create ../lock/lock_region.c /^__lock_dbenv_create(dbenv)$/
+__lock_dbenv_close ../lock/lock_method.c /^__lock_dbenv_close(dbenv)$/
+__lock_dbenv_create ../lock/lock_method.c /^__lock_dbenv_create(dbenv)$/
+__lock_dbenv_refresh ../lock/lock_region.c /^__lock_dbenv_refresh(dbenv)$/
+__lock_detect ../lock/lock_deadlock.c /^__lock_detect(dbenv, atype, abortp)$/
+__lock_detect_pp ../lock/lock_deadlock.c /^__lock_detect_pp(dbenv, flags, atype, abortp)$/
__lock_downgrade ../lock/lock.c /^__lock_downgrade(dbenv, lock, new_mode, flags)$/
__lock_dump_locker ../lock/lock_stat.c /^__lock_dump_locker(lt, lip, fp)$/
__lock_dump_object ../lock/lock_stat.c /^__lock_dump_object(lt, op, fp)$/
__lock_dump_region ../lock/lock_stat.c /^__lock_dump_region(dbenv, area, fp)$/
-__lock_dump_status ../lock/lock_stat.c /^__lock_dump_status(status)$/
+__lock_expired ../lock/lock.c /^__lock_expired(dbenv, now, timevalp)$/
+__lock_expires ../lock/lock.c /^__lock_expires(dbenv, timevalp, timeout)$/
+__lock_fix_list ../lock/lock.c /^__lock_fix_list(dbenv, list_dbt, nlocks)$/
__lock_freefamilylocker ../lock/lock.c /^__lock_freefamilylocker(lt, locker)$/
+__lock_freelock ../lock/lock.c /^__lock_freelock(lt, lockp, locker, flags)$/
__lock_freelocker ../lock/lock.c /^__lock_freelocker(lt, region, sh_locker, indx)$/
+__lock_get ../lock/lock.c /^__lock_get(dbenv, locker, flags, obj, lock_mode, l/
+__lock_get_env_timeout ../lock/lock_method.c /^__lock_get_env_timeout(dbenv, timeoutp, flag)$/
__lock_get_internal ../lock/lock.c /^__lock_get_internal(lt, locker, flags, obj, lock_m/
+__lock_get_list ../lock/lock.c /^__lock_get_list(dbenv, locker, flags, lock_mode, l/
+__lock_get_lk_conflicts ../lock/lock_method.c /^__lock_get_lk_conflicts(dbenv, lk_conflictsp, lk_m/
+__lock_get_lk_detect ../lock/lock_method.c /^__lock_get_lk_detect(dbenv, lk_detectp)$/
+__lock_get_lk_max_lockers ../lock/lock_method.c /^__lock_get_lk_max_lockers(dbenv, lk_maxp)$/
+__lock_get_lk_max_locks ../lock/lock_method.c /^__lock_get_lk_max_locks(dbenv, lk_maxp)$/
+__lock_get_lk_max_objects ../lock/lock_method.c /^__lock_get_lk_max_objects(dbenv, lk_maxp)$/
+__lock_get_pp ../lock/lock.c /^__lock_get_pp(dbenv, locker, flags, obj, lock_mode/
__lock_getlocker ../lock/lock.c /^__lock_getlocker(lt, locker, indx, create, retp)$/
__lock_getobj ../lock/lock.c /^__lock_getobj(lt, obj, ndx, create, retp)$/
+__lock_id ../lock/lock.c /^__lock_id(dbenv, idp)$/
+__lock_id_free ../lock/lock.c /^__lock_id_free(dbenv, id)$/
+__lock_id_free_pp ../lock/lock.c /^__lock_id_free_pp(dbenv, id)$/
+__lock_id_pp ../lock/lock.c /^__lock_id_pp(dbenv, idp)$/
+__lock_id_set ../lock/lock_region.c /^__lock_id_set(dbenv, cur_id, max_id)$/
+__lock_inherit_locks ../lock/lock.c /^__lock_inherit_locks(lt, locker, flags)$/
+__lock_inherit_timeout ../lock/lock.c /^__lock_inherit_timeout(dbenv, parent, locker)$/
__lock_init ../lock/lock_region.c /^__lock_init(dbenv, lt)$/
__lock_is_parent ../lock/lock.c /^__lock_is_parent(lt, locker, sh_locker)$/
__lock_lhash ../lock/lock_util.c /^__lock_lhash(lock_obj)$/
@@ -2231,153 +3276,227 @@ __lock_locker_cmp ../lock/lock_util.c /^__lock_locker_cmp(locker, sh_locker)$/
__lock_locker_hash ../lock/lock_util.c /^__lock_locker_hash(locker)$/
__lock_ohash ../lock/lock_util.c /^__lock_ohash(dbt)$/
__lock_open ../lock/lock_region.c /^__lock_open(dbenv)$/
-__lock_printlock ../lock/lock.c /^__lock_printlock(lt, lp, ispgno)$/
-__lock_promote ../lock/lock.c /^__lock_promote(lt, obj, not_waiters)$/
+__lock_printheader ../lock/lock_stat.c /^__lock_printheader(fp)$/
+__lock_printlock ../lock/lock_stat.c /^__lock_printlock(lt, lp, ispgno, fp)$/
+__lock_promote ../lock/lock.c /^__lock_promote(lt, obj, flags)$/
+__lock_put ../lock/lock.c /^__lock_put(dbenv, lock)$/
__lock_put_internal ../lock/lock.c /^__lock_put_internal(lt, lockp, obj_ndx, flags)$/
__lock_put_nolock ../lock/lock.c /^__lock_put_nolock(dbenv, lock, runp, flags)$/
+__lock_put_pp ../lock/lock.c /^__lock_put_pp(dbenv, lock)$/
__lock_region_destroy ../lock/lock_region.c /^__lock_region_destroy(dbenv, infop)$/
__lock_region_maint ../lock/lock_region.c /^__lock_region_maint(dbenv)$/
__lock_region_size ../lock/lock_region.c /^__lock_region_size(dbenv)$/
-__lock_remove_waiter ../lock/lock.c /^__lock_remove_waiter(dbenv, sh_obj, lockp, status)/
+__lock_remove_waiter ../lock/lock.c /^__lock_remove_waiter(lt, sh_obj, lockp, status)$/
+__lock_set_env_timeout ../lock/lock_method.c /^__lock_set_env_timeout(dbenv, timeout, flags)$/
__lock_set_lk_conflicts ../lock/lock_method.c /^__lock_set_lk_conflicts(dbenv, lk_conflicts, lk_mo/
__lock_set_lk_detect ../lock/lock_method.c /^__lock_set_lk_detect(dbenv, lk_detect)$/
__lock_set_lk_max ../lock/lock_method.c /^__lock_set_lk_max(dbenv, lk_max)$/
__lock_set_lk_max_lockers ../lock/lock_method.c /^__lock_set_lk_max_lockers(dbenv, lk_max)$/
__lock_set_lk_max_locks ../lock/lock_method.c /^__lock_set_lk_max_locks(dbenv, lk_max)$/
__lock_set_lk_max_objects ../lock/lock_method.c /^__lock_set_lk_max_objects(dbenv, lk_max)$/
-__log ../include/log.h /^struct __log {$/
-__log_add_logid ../log/log_rec.c /^__log_add_logid(dbenv, logp, dbp, ndx)$/
-__log_check_master ../log/log_rec.c /^__log_check_master(dbenv, uid, name)$/
-__log_close ../log/log.c /^__log_close(dbenv)$/
-__log_close_files ../log/log_rec.c /^__log_close_files(dbenv)$/
+__lock_set_timeout ../lock/lock.c /^__lock_set_timeout(dbenv, locker, timeout, op)$/
+__lock_set_timeout_internal ../lock/lock.c /^__lock_set_timeout_internal(dbenv, locker, timeout/
+__lock_sort_cmp ../lock/lock.c /^__lock_sort_cmp(a, b)$/
+__lock_stat ../lock/lock_stat.c /^__lock_stat(dbenv, statp, flags)$/
+__lock_stat_pp ../lock/lock_stat.c /^__lock_stat_pp(dbenv, statp, flags)$/
+__lock_trade ../lock/lock.c /^__lock_trade(dbenv, lock, new_locker)$/
+__lock_vec ../lock/lock.c /^__lock_vec(dbenv, locker, flags, list, nlist, elis/
+__lock_vec_pp ../lock/lock.c /^__lock_vec_pp(dbenv, locker, flags, list, nlist, e/
+__log_archive ../log/log_archive.c /^__log_archive(dbenv, listp, flags)$/
+__log_archive_pp ../log/log_archive.c /^__log_archive_pp(dbenv, listp, flags)$/
+__log_autoremove ../log/log.c /^__log_autoremove(dbenv)$/
+__log_backup ../env/env_recover.c /^__log_backup(dbenv, logc, max_lsn, start_lsn)$/
+__log_c_close ../log/log_get.c /^__log_c_close(logc)$/
+__log_c_close_pp ../log/log_get.c /^__log_c_close_pp(logc, flags)$/
+__log_c_get ../log/log_get.c /^__log_c_get(logc, alsn, dbt, flags)$/
+__log_c_get_int ../log/log_get.c /^__log_c_get_int(logc, alsn, dbt, flags)$/
+__log_c_get_pp ../log/log_get.c /^__log_c_get_pp(logc, alsn, dbt, flags)$/
+__log_c_hdrchk ../log/log_get.c /^__log_c_hdrchk(logc, lsn, hdr, eofp)$/
+__log_c_incursor ../log/log_get.c /^__log_c_incursor(logc, lsn, hdr, pp)$/
+__log_c_inregion ../log/log_get.c /^__log_c_inregion(logc, lsn, rlockp, last_lsn, hdr,/
+__log_c_io ../log/log_get.c /^__log_c_io(logc, fnum, offset, p, nrp, eofp)$/
+__log_c_ondisk ../log/log_get.c /^__log_c_ondisk(logc, lsn, last_lsn, flags, hdr, pp/
+__log_c_set_maxrec ../log/log_get.c /^__log_c_set_maxrec(logc, np)$/
+__log_c_shortread ../log/log_get.c /^__log_c_shortread(logc, lsn, check_silent)$/
+__log_cursor ../log/log_get.c /^__log_cursor(dbenv, logcp)$/
+__log_cursor_pp ../log/log_get.c /^__log_cursor_pp(dbenv, logcp, flags)$/
__log_dbenv_create ../log/log_method.c /^__log_dbenv_create(dbenv)$/
-__log_do_open ../log/log_rec.c /^__log_do_open(dbenv, lp, uid, name, ftype, ndx, me/
-__log_earliest ../env/env_recover.c /^__log_earliest(dbenv, lowtime, lowlsn)$/
-__log_file_lock ../log/log_register.c /^__log_file_lock(dbp)$/
-__log_filelist_update ../log/log_register.c /^__log_filelist_update(dbenv, dbp, fid, newname, se/
+__log_dbenv_refresh ../log/log.c /^__log_dbenv_refresh(dbenv)$/
+__log_earliest ../env/env_recover.c /^__log_earliest(dbenv, logc, lowtime, lowlsn)$/
+__log_encrypt_record ../log/log_put.c /^__log_encrypt_record(dbenv, dbt, hdr, orig)$/
+__log_file ../log/log_put.c /^__log_file(dbenv, lsn, namep, len)$/
+__log_file_pp ../log/log_put.c /^__log_file_pp(dbenv, lsn, namep, len)$/
__log_fill ../log/log_put.c /^__log_fill(dblp, lsn, addr, len)$/
__log_find ../log/log.c /^__log_find(dblp, find_first, valp, statusp)$/
-__log_findckp ../log/log_findckp.c /^__log_findckp(dbenv, lsnp)$/
-__log_flush ../log/log_put.c /^__log_flush(dblp, lsn)$/
-__log_get ../log/log_get.c /^__log_get(dblp, alsn, dbt, flags, silent)$/
+__log_flush ../log/log_put.c /^__log_flush(dbenv, lsn)$/
+__log_flush_commit ../log/log_put.c /^__log_flush_commit(dbenv, lsnp, flags)$/
+__log_flush_int ../log/log_put.c /^__log_flush_int(dblp, lsnp, release)$/
+__log_flush_pp ../log/log_put.c /^__log_flush_pp(dbenv, lsn)$/
+__log_get_cached_ckp_lsn ../log/log.c /^__log_get_cached_ckp_lsn(dbenv, ckp_lsnp)$/
+__log_get_lg_bsize ../log/log_method.c /^__log_get_lg_bsize(dbenv, lg_bsizep)$/
+__log_get_lg_dir ../log/log_method.c /^__log_get_lg_dir(dbenv, dirp)$/
+__log_get_lg_max ../log/log_method.c /^__log_get_lg_max(dbenv, lg_maxp)$/
+__log_get_lg_regionmax ../log/log_method.c /^__log_get_lg_regionmax(dbenv, lg_regionmaxp)$/
__log_init ../log/log.c /^__log_init(dbenv, dblp)$/
-__log_init_print ../log/log_auto.c /^__log_init_print(dbenv)$/
-__log_init_recover ../log/log_auto.c /^__log_init_recover(dbenv)$/
-__log_lastckp ../log/log.c /^__log_lastckp(dbenv, lsnp)$/
-__log_lid_to_fname ../log/log_rec.c /^__log_lid_to_fname(dblp, lid, fnamep)$/
-__log_name ../log/log_put.c /^__log_name(dblp, filenumber, namep, fhp, flags)$/
+__log_is_outdated ../log/log.c /^__log_is_outdated(dbenv, fnum, outdatedp)$/
+__log_name ../log/log_put.c /^__log_name(dblp, filenumber, namep, fhpp, flags)$/
__log_newfh ../log/log_put.c /^__log_newfh(dblp)$/
+__log_newfile ../log/log_put.c /^__log_newfile(dblp, lsnp)$/
__log_open ../log/log.c /^__log_open(dbenv)$/
-__log_open_file ../log/log_rec.c /^__log_open_file(dbenv, lp, argp)$/
-__log_open_files ../log/log_put.c /^__log_open_files(dbenv)$/
-__log_persist ../include/log.h /^struct __log_persist {$/
-__log_put ../log/log_put.c /^__log_put(dbenv, lsn, dbt, flags)$/
-__log_putr ../log/log_put.c /^__log_putr(dblp, lsn, dbt, prev)$/
+__log_put ../log/log_put.c /^__log_put(dbenv, lsnp, udbt, flags)$/
+__log_put_next ../log/log_put.c /^__log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)$/
+__log_put_pp ../log/log_put.c /^__log_put_pp(dbenv, lsnp, udbt, flags)$/
+__log_putr ../log/log_put.c /^__log_putr(dblp, lsn, dbt, prev, h)$/
__log_recover ../log/log.c /^__log_recover(dblp)$/
__log_region_destroy ../log/log.c /^__log_region_destroy(dbenv, infop)$/
__log_region_size ../log/log.c /^__log_region_size(dbenv)$/
-__log_register1_print ../log/log_auto.c /^__log_register1_print(dbenv, dbtp, lsnp, notused2,/
-__log_register1_read ../log/log_auto.c /^__log_register1_read(dbenv, recbuf, argpp)$/
-__log_register_log ../log/log_auto.c /^__log_register_log(dbenv, txnid, ret_lsnp, flags,$/
-__log_register_print ../log/log_auto.c /^__log_register_print(dbenv, dbtp, lsnp, notused2, /
-__log_register_read ../log/log_auto.c /^__log_register_read(dbenv, recbuf, argpp)$/
-__log_register_recover ../log/log_rec.c /^__log_register_recover(dbenv, dbtp, lsnp, op, info/
-__log_rem_logid ../log/log_rec.c /^__log_rem_logid(logp, dbp, ndx)$/
-__log_reopen_file ../log/log_rec.c /^__log_reopen_file(dbenv, name, ndx, fileid, meta_p/
+__log_rep_put ../log/log_put.c /^__log_rep_put(dbenv, lsnp, rec)$/
__log_set_lg_bsize ../log/log_method.c /^__log_set_lg_bsize(dbenv, lg_bsize)$/
__log_set_lg_dir ../log/log_method.c /^__log_set_lg_dir(dbenv, dir)$/
__log_set_lg_max ../log/log_method.c /^__log_set_lg_max(dbenv, lg_max)$/
__log_set_lg_regionmax ../log/log_method.c /^__log_set_lg_regionmax(dbenv, lg_regionmax)$/
-__log_valid ../log/log.c /^__log_valid(dblp, number, set_persist, statusp)$/
+__log_stat ../log/log.c /^__log_stat(dbenv, statp, flags)$/
+__log_stat_pp ../log/log.c /^__log_stat_pp(dbenv, statp, flags)$/
+__log_txn_lsn ../log/log_put.c /^__log_txn_lsn(dbenv, lsnp, mbytesp, bytesp)$/
+__log_valid ../log/log.c /^__log_valid(dblp, number, set_persist, fhpp, flags/
+__log_vtruncate ../log/log.c /^__log_vtruncate(dbenv, lsn, ckplsn, trunclsn)$/
__log_write ../log/log_put.c /^__log_write(dblp, addr, len)$/
+__log_zero ../log/log.c /^__log_zero(dbenv, from_lsn, to_lsn)$/
__lsn_diff ../env/env_recover.c /^__lsn_diff(low, high, current, max, is_forward)$/
__memp_alloc ../mp/mp_alloc.c /^__memp_alloc(dbmp, memreg, mfp, len, offsetp, retp/
-__memp_bhfree ../mp/mp_bh.c /^__memp_bhfree(dbmp, bhp, free_mem)$/
-__memp_bhwrite ../mp/mp_bh.c /^__memp_bhwrite(dbmp, mfp, bhp, open_extents, resta/
-__memp_clear_unlink ../mp/mp_fopen.c /^__memp_clear_unlink(dbmpf)$/
-__memp_close ../mp/mp_region.c /^__memp_close(dbenv)$/
-__memp_close_flush_files ../mp/mp_sync.c /^__memp_close_flush_files(dbmp)$/
+__memp_bad_buffer ../mp/mp_alloc.c /^__memp_bad_buffer(hp)$/
+__memp_bhfree ../mp/mp_bh.c /^__memp_bhfree(dbmp, hp, bhp, free_mem)$/
+__memp_bhwrite ../mp/mp_bh.c /^__memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)$/
+__memp_check_order ../mp/mp_alloc.c /^__memp_check_order(hp)$/
+__memp_close_flush_files ../mp/mp_sync.c /^__memp_close_flush_files(dbenv, dbmp)$/
__memp_dbenv_create ../mp/mp_method.c /^__memp_dbenv_create(dbenv)$/
+__memp_dbenv_refresh ../mp/mp_region.c /^__memp_dbenv_refresh(dbenv)$/
__memp_dump_region ../mp/mp_stat.c /^__memp_dump_region(dbenv, area, fp)$/
-__memp_dumpcache ../mp/mp_stat.c /^__memp_dumpcache(dbmp, reginfo, fmap, fp, flags)$/
-__memp_fclose ../mp/mp_fopen.c /^__memp_fclose(dbmfp, needlock)$/
+__memp_dumpcache ../mp/mp_stat.c /^__memp_dumpcache(dbenv, dbmp, reginfo, fmap, fp, f/
+__memp_fclose ../mp/mp_fopen.c /^__memp_fclose(dbmfp, flags)$/
+__memp_fclose_pp ../mp/mp_fopen.c /^__memp_fclose_pp(dbmfp, flags)$/
+__memp_fcreate ../mp/mp_fopen.c /^__memp_fcreate(dbenv, retp)$/
+__memp_fcreate_pp ../mp/mp_fopen.c /^__memp_fcreate_pp(dbenv, retp, flags)$/
+__memp_fget ../mp/mp_fget.c /^__memp_fget(dbmfp, pgnoaddr, flags, addrp)$/
+__memp_fget_pp ../mp/mp_fget.c /^__memp_fget_pp(dbmfp, pgnoaddr, flags, addrp)$/
__memp_fn ../mp/mp_fopen.c /^__memp_fn(dbmfp)$/
__memp_fns ../mp/mp_fopen.c /^__memp_fns(dbmp, mfp)$/
-__memp_fopen ../mp/mp_fopen.c /^__memp_fopen(dbmp, mfp, path, flags, mode, pagesiz/
-__memp_fremove ../mp/mp_fopen.c /^__memp_fremove(dbmfp)$/
+__memp_fopen ../mp/mp_fopen.c /^__memp_fopen(dbmfp, mfp, path, flags, mode, pagesi/
+__memp_fopen_pp ../mp/mp_fopen.c /^__memp_fopen_pp(dbmfp, path, flags, mode, pagesize/
+__memp_fput ../mp/mp_fput.c /^__memp_fput(dbmfp, pgaddr, flags)$/
+__memp_fput_pp ../mp/mp_fput.c /^__memp_fput_pp(dbmfp, pgaddr, flags)$/
+__memp_fset ../mp/mp_fset.c /^__memp_fset(dbmfp, pgaddr, flags)$/
+__memp_fset_pp ../mp/mp_fset.c /^__memp_fset_pp(dbmfp, pgaddr, flags)$/
__memp_fsync ../mp/mp_sync.c /^__memp_fsync(dbmfp)$/
+__memp_fsync_pp ../mp/mp_sync.c /^__memp_fsync_pp(dbmfp)$/
+__memp_get_cachesize ../mp/mp_method.c /^__memp_get_cachesize(dbenv, gbytesp, bytesp, ncach/
+__memp_get_clear_len ../mp/mp_fopen.c /^__memp_get_clear_len(dbmfp, clear_lenp)$/
+__memp_get_fileid ../mp/mp_fopen.c /^__memp_get_fileid(dbmfp, fileid)$/
+__memp_get_flags ../mp/mp_fopen.c /^__memp_get_flags(dbmfp, flagsp)$/
+__memp_get_ftype ../mp/mp_fopen.c /^__memp_get_ftype(dbmfp, ftypep)$/
+__memp_get_lsn_offset ../mp/mp_fopen.c /^__memp_get_lsn_offset(dbmfp, lsn_offsetp)$/
+__memp_get_maxsize ../mp/mp_fopen.c /^__memp_get_maxsize(dbmfp, gbytesp, bytesp)$/
+__memp_get_mp_maxwrite ../mp/mp_method.c /^__memp_get_mp_maxwrite(dbenv, maxwritep, maxwrite_/
+__memp_get_mp_mmapsize ../mp/mp_method.c /^__memp_get_mp_mmapsize(dbenv, mp_mmapsizep)$/
+__memp_get_pgcookie ../mp/mp_fopen.c /^__memp_get_pgcookie(dbmfp, pgcookie)$/
+__memp_get_priority ../mp/mp_fopen.c /^__memp_get_priority(dbmfp, priorityp)$/
+__memp_get_refcnt ../mp/mp_method.c /^__memp_get_refcnt(dbenv, fileid, refp)$/
+__memp_last_pgno ../mp/mp_fopen.c /^__memp_last_pgno(dbmfp, pgnoaddr)$/
__memp_mf_discard ../mp/mp_fopen.c /^__memp_mf_discard(dbmp, mfp)$/
-__memp_mf_open ../mp/mp_fopen.c /^__memp_mf_open(dbmp, path, pagesize, last_pgno, fi/
+__memp_mf_sync ../mp/mp_fopen.c /^__memp_mf_sync(dbmp, mfp)$/
+__memp_nameop ../mp/mp_method.c /^__memp_nameop(dbenv, fileid, newname, fullold, ful/
__memp_open ../mp/mp_region.c /^__memp_open(dbenv)$/
__memp_pbh ../mp/mp_stat.c /^__memp_pbh(dbmp, bhp, fmap, fp)$/
__memp_pg ../mp/mp_bh.c /^__memp_pg(dbmfp, bhp, is_pgin)$/
-__memp_pgread ../mp/mp_bh.c /^__memp_pgread(dbmfp, bhp, can_create)$/
-__memp_pgwrite ../mp/mp_bh.c /^__memp_pgwrite(dbmp, dbmfp, bhp, restartp, wrotep)/
-__memp_refcount ../mp/mp_fopen.c /^__memp_refcount(dbmpf, cntp)$/
-__memp_sballoc ../mp/mp_sync.c /^__memp_sballoc(dbenv, bharrayp, ar_maxp)$/
+__memp_pgread ../mp/mp_bh.c /^__memp_pgread(dbmfp, mutexp, bhp, can_create)$/
+__memp_pgwrite ../mp/mp_bh.c /^__memp_pgwrite(dbenv, dbmfp, hp, bhp)$/
+__memp_register ../mp/mp_register.c /^__memp_register(dbenv, ftype, pgin, pgout)$/
+__memp_register_pp ../mp/mp_register.c /^__memp_register_pp(dbenv, ftype, pgin, pgout)$/
+__memp_reset_lru ../mp/mp_fput.c /^__memp_reset_lru(dbenv, memreg)$/
__memp_set_cachesize ../mp/mp_method.c /^__memp_set_cachesize(dbenv, gbytes, bytes, ncache)/
-__memp_set_mp_mmapsize ../mp/mp_method.c /^__memp_set_mp_mmapsize(dbenv, mp_mmapsize )$/
-__memp_set_unlink ../mp/mp_fopen.c /^__memp_set_unlink(dbmpf)$/
-__memp_trick ../mp/mp_trickle.c /^__memp_trick(dbenv, ncache, pct, nwrotep)$/
-__memp_upgrade ../mp/mp_bh.c /^__memp_upgrade(dbmp, dbmfp, mfp)$/
+__memp_set_clear_len ../mp/mp_fopen.c /^__memp_set_clear_len(dbmfp, clear_len)$/
+__memp_set_fileid ../mp/mp_fopen.c /^__memp_set_fileid(dbmfp, fileid)$/
+__memp_set_flags ../mp/mp_fopen.c /^__memp_set_flags(dbmfp, flags, onoff)$/
+__memp_set_ftype ../mp/mp_fopen.c /^__memp_set_ftype(dbmfp, ftype)$/
+__memp_set_lsn_offset ../mp/mp_fopen.c /^__memp_set_lsn_offset(dbmfp, lsn_offset)$/
+__memp_set_maxsize ../mp/mp_fopen.c /^__memp_set_maxsize(dbmfp, gbytes, bytes)$/
+__memp_set_mp_maxwrite ../mp/mp_method.c /^__memp_set_mp_maxwrite(dbenv, maxwrite, maxwrite_s/
+__memp_set_mp_mmapsize ../mp/mp_method.c /^__memp_set_mp_mmapsize(dbenv, mp_mmapsize)$/
+__memp_set_pgcookie ../mp/mp_fopen.c /^__memp_set_pgcookie(dbmfp, pgcookie)$/
+__memp_set_priority ../mp/mp_fopen.c /^__memp_set_priority(dbmfp, priority)$/
+__memp_stat ../mp/mp_stat.c /^__memp_stat(dbenv, gspp, fspp, flags)$/
+__memp_stat_hash ../mp/mp_stat.c /^__memp_stat_hash(reginfo, mp, dirtyp)$/
+__memp_stat_pp ../mp/mp_stat.c /^__memp_stat_pp(dbenv, gspp, fspp, flags)$/
+__memp_stat_wait ../mp/mp_stat.c /^__memp_stat_wait(reginfo, mp, mstat, flags)$/
+__memp_sync ../mp/mp_sync.c /^__memp_sync(dbenv, lsnp)$/
+__memp_sync_files ../mp/mp_sync.c /^int __memp_sync_files(dbenv, dbmp)$/
+__memp_sync_int ../mp/mp_sync.c /^__memp_sync_int(dbenv, dbmfp, trickle_max, op, wro/
+__memp_sync_pp ../mp/mp_sync.c /^__memp_sync_pp(dbenv, lsnp)$/
+__memp_trickle ../mp/mp_trickle.c /^__memp_trickle(dbenv, pct, nwrotep)$/
+__memp_trickle_pp ../mp/mp_trickle.c /^__memp_trickle_pp(dbenv, pct, nwrotep)$/
__mp_xxx_fh ../mp/mp_sync.c /^__mp_xxx_fh(dbmfp, fhp)$/
__mpe_fsync ../os/os_fsync.c /^__mpe_fsync(fd)$/
-__mpool ../include/mp.h /^struct __mpool {$/
__mpool_init ../mp/mp_region.c /^__mpool_init(dbenv, dbmp, reginfo_off, htab_bucket/
__mpool_region_destroy ../mp/mp_region.c /^__mpool_region_destroy(dbenv, infop)$/
__mpool_region_maint ../mp/mp_region.c /^__mpool_region_maint(infop)$/
-__mpoolfile ../include/mp.h /^struct __mpoolfile {$/
-__mutex_t ../include/mutex.h /^struct __mutex_t {$/
+__op_rep_enter ../rep/rep_util.c /^__op_rep_enter(dbenv)$/
+__op_rep_exit ../rep/rep_util.c /^__op_rep_exit(dbenv)$/
__os_abspath ../os/os_abs.c /^__os_abspath(path)$/
__os_calloc ../os/os_alloc.c /^__os_calloc(dbenv, num, size, storep)$/
-__os_closehandle ../os/os_handle.c /^__os_closehandle(fhp)$/
+__os_clock ../os/os_clock.c /^__os_clock(dbenv, secsp, usecsp)$/
+__os_closehandle ../os/os_handle.c /^__os_closehandle(dbenv, fhp)$/
__os_dirfree ../os/os_dir.c /^__os_dirfree(dbenv, names, cnt)$/
__os_dirlist ../os/os_dir.c /^__os_dirlist(dbenv, dir, namesp, cntp)$/
__os_exists ../os/os_stat.c /^__os_exists(path, isdirp)$/
__os_fileid ../os/os_fid.c /^__os_fileid(dbenv, fname, unique_okay, fidp)$/
-__os_finit ../os/os_finit.c /^__os_finit(dbenv, fhp, size, zerofill)$/
-__os_fpinit ../os/os_finit.c /^__os_fpinit(dbenv, fhp, pgno, pagecount, pagesize)/
-__os_free ../os/os_alloc.c /^__os_free(dbenv, ptr, size)$/
-__os_freestr ../os/os_alloc.c /^__os_freestr(dbenv, ptr)$/
+__os_free ../os/os_alloc.c /^__os_free(dbenv, ptr)$/
+__os_fs_notzero ../os/os_config.c /^__os_fs_notzero()$/
__os_fsync ../os/os_fsync.c /^__os_fsync(dbenv, fhp)$/
__os_get_errno ../os/os_errno.c /^__os_get_errno()$/
+__os_get_errno_ret_zero ../os/os_errno.c /^__os_get_errno_ret_zero()$/
__os_guard ../os/os_alloc.c /^__os_guard(dbenv)$/
-__os_io ../os/os_rw.c /^__os_io(dbenv, db_iop, op, niop)$/
+__os_have_direct ../os/os_open.c /^__os_have_direct()$/
+__os_id ../os/os_id.c /^__os_id(idp)$/
+__os_io ../os/os_rw.c /^__os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)/
__os_ioinfo ../os/os_stat.c /^__os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, ios/
__os_isroot ../os/os_root.c /^__os_isroot()$/
__os_malloc ../os/os_alloc.c /^__os_malloc(dbenv, size, storep)$/
__os_map ../os/os_map.c /^__os_map(dbenv, path, fhp, len, is_region, is_rdon/
__os_mapfile ../os/os_map.c /^__os_mapfile(dbenv, path, fhp, len, is_rdonly, add/
-__os_open ../os/os_open.c /^__os_open(dbenv, name, flags, mode, fhp)$/
-__os_openhandle ../os/os_handle.c /^__os_openhandle(dbenv, name, flags, mode, fhp)$/
+__os_open ../os/os_open.c /^__os_open(dbenv, name, flags, mode, fhpp)$/
+__os_open_extend ../os/os_open.c /^__os_open_extend(dbenv, name, log_size, page_size,/
+__os_openhandle ../os/os_handle.c /^__os_openhandle(dbenv, name, flags, mode, fhpp)$/
+__os_physwrite ../os/os_rw.c /^__os_physwrite(dbenv, fhp, addr, len, nwp)$/
__os_pstat_getdynamic ../os/os_spin.c /^__os_pstat_getdynamic()$/
+__os_qnx_region_open ../os/os_open.c /^__os_qnx_region_open(dbenv, name, oflags, mode, fh/
__os_r_attach ../os/os_region.c /^__os_r_attach(dbenv, infop, rp)$/
__os_r_detach ../os/os_region.c /^__os_r_detach(dbenv, infop, destroy)$/
__os_r_sysattach ../os/os_map.c /^__os_r_sysattach(dbenv, infop, rp)$/
__os_r_sysdetach ../os/os_map.c /^__os_r_sysdetach(dbenv, infop, destroy)$/
__os_read ../os/os_rw.c /^__os_read(dbenv, fhp, addr, len, nrp)$/
__os_realloc ../os/os_alloc.c /^__os_realloc(dbenv, size, storep)$/
-__os_region_open ../os/os_open.c /^__os_region_open(dbenv, name, oflags, mode, fhp)$/
__os_region_unlink ../os/os_unlink.c /^__os_region_unlink(dbenv, path)$/
-__os_rename ../os/os_rename.c /^__os_rename(dbenv, old, new)$/
+__os_rename ../os/os_rename.c /^__os_rename(dbenv, old, new, flags)$/
__os_seek ../os/os_seek.c /^__os_seek(dbenv, fhp, pgsize, pageno, relative, is/
__os_set_errno ../os/os_errno.c /^__os_set_errno(evalue)$/
__os_shmname ../os/os_open.c /^__os_shmname(dbenv, name, newnamep)$/
__os_sleep ../os/os_sleep.c /^__os_sleep(dbenv, secs, usecs)$/
-__os_spin ../os/os_spin.c /^__os_spin()$/
+__os_spin ../os/os_spin.c /^__os_spin(dbenv)$/
__os_strdup ../os/os_alloc.c /^__os_strdup(dbenv, str, storep)$/
__os_sysconf ../os/os_spin.c /^__os_sysconf()$/
__os_tmpdir ../os/os_tmpdir.c /^__os_tmpdir(dbenv, flags)$/
-__os_ufree ../os/os_alloc.c /^__os_ufree(dbenv, ptr, size)$/
+__os_ufree ../os/os_alloc.c /^__os_ufree(dbenv, ptr)$/
__os_umalloc ../os/os_alloc.c /^__os_umalloc(dbenv, size, storep)$/
__os_unlink ../os/os_unlink.c /^__os_unlink(dbenv, path)$/
__os_unmapfile ../os/os_map.c /^__os_unmapfile(dbenv, addr, len)$/
__os_urealloc ../os/os_alloc.c /^__os_urealloc(dbenv, size, storep)$/
__os_write ../os/os_rw.c /^__os_write(dbenv, fhp, addr, len, nwp)$/
__os_yield ../os/os_spin.c /^__os_yield(dbenv, usecs)$/
+__os_zerofill ../os/os_rw.c /^__os_zerofill(dbenv, fhp)$/
__qam_31_qammeta ../qam/qam_upgrade.c /^__qam_31_qammeta(dbp, real_name, buf)$/
__qam_32_qammeta ../qam/qam_upgrade.c /^__qam_32_qammeta(dbp, real_name, buf)$/
-__qam_add_log ../qam/qam_auto.c /^__qam_add_log(dbenv, txnid, ret_lsnp, flags,$/
+__qam_add_getpgnos ../qam/qam_auto.c /^__qam_add_getpgnos(dbenv, rec, lsnp, notused1, sum/
+__qam_add_log ../qam/qam_auto.c /^__qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pg/
__qam_add_print ../qam/qam_auto.c /^__qam_add_print(dbenv, dbtp, lsnp, notused2, notus/
__qam_add_read ../qam/qam_auto.c /^__qam_add_read(dbenv, recbuf, argpp)$/
__qam_add_recover ../qam/qam_rec.c /^__qam_add_recover(dbenv, dbtp, lsnp, op, info)$/
@@ -2390,66 +3509,64 @@ __qam_c_dup ../qam/qam.c /^__qam_c_dup(orig_dbc, new_dbc)$/
__qam_c_get ../qam/qam.c /^__qam_c_get(dbc, key, data, flags, pgnop)$/
__qam_c_init ../qam/qam.c /^__qam_c_init(dbc)$/
__qam_c_put ../qam/qam.c /^__qam_c_put(dbc, key, data, flags, pgnop)$/
-__qam_cookie ../qam/qam_method.c /^struct __qam_cookie {$/
-__qam_db_close ../qam/qam_method.c /^__qam_db_close(dbp)$/
+__qam_consume ../qam/qam.c /^__qam_consume(dbc, meta, first)$/
+__qam_db_close ../qam/qam_method.c /^__qam_db_close(dbp, flags)$/
__qam_db_create ../qam/qam_method.c /^__qam_db_create(dbp)$/
-__qam_del_log ../qam/qam_auto.c /^__qam_del_log(dbenv, txnid, ret_lsnp, flags,$/
+__qam_del_getpgnos ../qam/qam_auto.c /^__qam_del_getpgnos(dbenv, rec, lsnp, notused1, sum/
+__qam_del_log ../qam/qam_auto.c /^__qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pg/
__qam_del_print ../qam/qam_auto.c /^__qam_del_print(dbenv, dbtp, lsnp, notused2, notus/
__qam_del_read ../qam/qam_auto.c /^__qam_del_read(dbenv, recbuf, argpp)$/
__qam_del_recover ../qam/qam_rec.c /^__qam_del_recover(dbenv, dbtp, lsnp, op, info)$/
-__qam_delete_log ../qam/qam_auto.c /^__qam_delete_log(dbenv, txnid, ret_lsnp, flags,$/
-__qam_delete_print ../qam/qam_auto.c /^__qam_delete_print(dbenv, dbtp, lsnp, notused2, no/
-__qam_delete_read ../qam/qam_auto.c /^__qam_delete_read(dbenv, recbuf, argpp)$/
-__qam_delete_recover ../qam/qam_rec.c /^__qam_delete_recover(dbenv, dbtp, lsnp, op, info)$/
-__qam_delext_log ../qam/qam_auto.c /^__qam_delext_log(dbenv, txnid, ret_lsnp, flags,$/
+__qam_delext_getpgnos ../qam/qam_auto.c /^__qam_delext_getpgnos(dbenv, rec, lsnp, notused1, /
+__qam_delext_log ../qam/qam_auto.c /^__qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn,/
__qam_delext_print ../qam/qam_auto.c /^__qam_delext_print(dbenv, dbtp, lsnp, notused2, no/
__qam_delext_read ../qam/qam_auto.c /^__qam_delext_read(dbenv, recbuf, argpp)$/
__qam_delext_recover ../qam/qam_rec.c /^__qam_delext_recover(dbenv, dbtp, lsnp, op, info)$/
+__qam_exid ../qam/qam_files.c /^__qam_exid(dbp, fidp, exnum)$/
+__qam_extent_names ../qam/qam_files.c /^__qam_extent_names(dbenv, name, namelistp)$/
__qam_fclose ../qam/qam_files.c /^__qam_fclose(dbp, pgnoaddr)$/
-__qam_fget ../include/qam.h /^#define __qam_fget(dbp, pgnoaddr, flags, addrp) \\/
+__qam_fget ../dbinc/qam.h /^#define __qam_fget(dbp, pgnoaddr, flags, addrp) \\$/
__qam_fprobe ../qam/qam_files.c /^__qam_fprobe(dbp, pgno, addrp, mode, flags)$/
-__qam_fput ../include/qam.h /^#define __qam_fput(dbp, pageno, addrp, flags) \\$/
+__qam_fput ../dbinc/qam.h /^#define __qam_fput(dbp, pageno, addrp, flags) \\$/
__qam_fremove ../qam/qam_files.c /^__qam_fremove(dbp, pgnoaddr)$/
__qam_gen_filelist ../qam/qam_files.c /^__qam_gen_filelist(dbp, filelistp)$/
+__qam_get_extentsize ../qam/qam_method.c /^__qam_get_extentsize(dbp, q_extentsizep)$/
__qam_getno ../qam/qam.c /^__qam_getno(dbp, key, rep)$/
-__qam_inc_log ../qam/qam_auto.c /^__qam_inc_log(dbenv, txnid, ret_lsnp, flags,$/
-__qam_inc_print ../qam/qam_auto.c /^__qam_inc_print(dbenv, dbtp, lsnp, notused2, notus/
-__qam_inc_read ../qam/qam_auto.c /^__qam_inc_read(dbenv, recbuf, argpp)$/
-__qam_inc_recover ../qam/qam_rec.c /^__qam_inc_recover(dbenv, dbtp, lsnp, op, info)$/
-__qam_incfirst_log ../qam/qam_auto.c /^__qam_incfirst_log(dbenv, txnid, ret_lsnp, flags,$/
+__qam_incfirst_getpgnos ../qam/qam_auto.c /^__qam_incfirst_getpgnos(dbenv, rec, lsnp, notused1/
+__qam_incfirst_log ../qam/qam_auto.c /^__qam_incfirst_log(dbp, txnid, ret_lsnp, flags, re/
__qam_incfirst_print ../qam/qam_auto.c /^__qam_incfirst_print(dbenv, dbtp, lsnp, notused2, /
__qam_incfirst_read ../qam/qam_auto.c /^__qam_incfirst_read(dbenv, recbuf, argpp)$/
__qam_incfirst_recover ../qam/qam_rec.c /^__qam_incfirst_recover(dbenv, dbtp, lsnp, op, info/
-__qam_init_print ../qam/qam_auto.c /^__qam_init_print(dbenv)$/
-__qam_init_recover ../qam/qam_auto.c /^__qam_init_recover(dbenv)$/
+__qam_init_getpgnos ../qam/qam_auto.c /^__qam_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__qam_init_meta ../qam/qam_open.c /^__qam_init_meta(dbp, meta)$/
+__qam_init_print ../qam/qam_auto.c /^__qam_init_print(dbenv, dtabp, dtabsizep)$/
+__qam_init_recover ../qam/qam_auto.c /^__qam_init_recover(dbenv, dtabp, dtabsizep)$/
__qam_metachk ../qam/qam_open.c /^__qam_metachk(dbp, name, qmeta)$/
__qam_mswap ../qam/qam_conv.c /^__qam_mswap(pg)$/
-__qam_mvptr_log ../qam/qam_auto.c /^__qam_mvptr_log(dbenv, txnid, ret_lsnp, flags,$/
+__qam_mvptr_getpgnos ../qam/qam_auto.c /^__qam_mvptr_getpgnos(dbenv, rec, lsnp, notused1, s/
+__qam_mvptr_log ../qam/qam_auto.c /^__qam_mvptr_log(dbp, txnid, ret_lsnp, flags,$/
__qam_mvptr_print ../qam/qam_auto.c /^__qam_mvptr_print(dbenv, dbtp, lsnp, notused2, not/
__qam_mvptr_read ../qam/qam_auto.c /^__qam_mvptr_read(dbenv, recbuf, argpp)$/
__qam_mvptr_recover ../qam/qam_rec.c /^__qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)$/
-__qam_open ../qam/qam_open.c /^__qam_open(dbp, name, base_pgno, mode, flags)$/
+__qam_nameop ../qam/qam_files.c /^int __qam_nameop(dbp, txn, newname, op)$/
+__qam_new_file ../qam/qam_open.c /^__qam_new_file(dbp, txn, fhp, name)$/
+__qam_open ../qam/qam_open.c /^__qam_open(dbp, txn, name, base_pgno, mode, flags)/
__qam_pgin_out ../qam/qam_conv.c /^__qam_pgin_out(dbenv, pg, pp, cookie)$/
__qam_pitem ../qam/qam.c /^__qam_pitem(dbc, pagep, indx, recno, data)$/
__qam_position ../qam/qam.c /^__qam_position(dbc, recnop, mode, exactp)$/
-__qam_remove ../qam/qam_method.c /^__qam_remove(dbp, name, subdb, lsnp, callbackp, co/
-__qam_remove_callback ../qam/qam_method.c /^__qam_remove_callback(dbp, cookie)$/
-__qam_rename ../qam/qam_method.c /^__qam_rename(dbp, filename, subdb, newname)$/
-__qam_rename_log ../qam/qam_auto.c /^__qam_rename_log(dbenv, txnid, ret_lsnp, flags,$/
-__qam_rename_print ../qam/qam_auto.c /^__qam_rename_print(dbenv, dbtp, lsnp, notused2, no/
-__qam_rename_read ../qam/qam_auto.c /^__qam_rename_read(dbenv, recbuf, argpp)$/
-__qam_rename_recover ../qam/qam_rec.c /^__qam_rename_recover(dbenv, dbtp, lsnp, op, info)$/
+__qam_remove ../qam/qam_method.c /^__qam_remove(dbp, txn, name, subdb, lsnp)$/
+__qam_rename ../qam/qam_method.c /^__qam_rename(dbp, txn, filename, subdb, newname)$/
+__qam_salvage ../qam/qam_verify.c /^__qam_salvage(dbp, vdp, pgno, h, handle, callback,/
+__qam_set_ext_data ../qam/qam_open.c /^__qam_set_ext_data(dbp, name)$/
__qam_set_extentsize ../qam/qam_method.c /^__qam_set_extentsize(dbp, extentsize)$/
-__qam_stat ../qam/qam_stat.c /^__qam_stat(dbp, spp, flags)$/
-__qam_sync ../qam/qam_files.c /^__qam_sync(dbp, flags)$/
+__qam_stat ../qam/qam_stat.c /^__qam_stat(dbc, spp, flags)$/
+__qam_sync ../qam/qam_files.c /^__qam_sync(dbp)$/
__qam_testdocopy ../db/db.c /^__qam_testdocopy(dbp, name)$/
-__qam_truncate ../qam/qam.c /^__qam_truncate(dbp, txn, countp)$/
+__qam_truncate ../qam/qam.c /^__qam_truncate(dbc, countp)$/
__qam_vrfy_data ../qam/qam_verify.c /^__qam_vrfy_data(dbp, vdp, h, pgno, flags)$/
__qam_vrfy_meta ../qam/qam_verify.c /^__qam_vrfy_meta(dbp, vdp, meta, pgno, flags)$/
__qam_vrfy_structure ../qam/qam_verify.c /^__qam_vrfy_structure(dbp, vdp, flags)$/
-__qcursor ../include/qam.h /^struct __qcursor {$/
-__qmpf ../include/qam.h /^ struct __qmpf {$/
-__queue ../include/qam.h /^struct __queue {$/
+__qam_vrfy_walkqueue ../qam/qam_verify.c /^__qam_vrfy_walkqueue(dbp, vdp, handle, callback, f/
__ram_add ../btree/bt_recno.c /^__ram_add(dbc, recnop, data, flags, bi_flags)$/
__ram_append ../btree/bt_recno.c /^__ram_append(dbc, key, data)$/
__ram_c_del ../btree/bt_recno.c /^__ram_c_del(dbc)$/
@@ -2457,8 +3574,13 @@ __ram_c_get ../btree/bt_recno.c /^__ram_c_get(dbc, key, data, flags, pgnop)$/
__ram_c_put ../btree/bt_recno.c /^__ram_c_put(dbc, key, data, flags, pgnop)$/
__ram_ca ../btree/bt_recno.c /^__ram_ca(dbc_arg, op)$/
__ram_ca_delete ../btree/bt_curadj.c /^__ram_ca_delete(dbp, root_pgno)$/
+__ram_get_re_delim ../btree/bt_method.c /^__ram_get_re_delim(dbp, re_delimp)$/
+__ram_get_re_len ../btree/bt_method.c /^__ram_get_re_len(dbp, re_lenp)$/
+__ram_get_re_pad ../btree/bt_method.c /^__ram_get_re_pad(dbp, re_padp)$/
+__ram_get_re_source ../btree/bt_method.c /^__ram_get_re_source(dbp, re_sourcep)$/
__ram_getno ../btree/bt_recno.c /^__ram_getno(dbc, key, rep, can_create)$/
-__ram_open ../btree/bt_recno.c /^__ram_open(dbp, name, base_pgno, flags)$/
+__ram_map_flags ../btree/bt_method.c /^__ram_map_flags(dbp, inflagsp, outflagsp)$/
+__ram_open ../btree/bt_recno.c /^__ram_open(dbp, txn, name, base_pgno, flags)$/
__ram_root ../btree/bt_split.c /^__ram_root(dbc, rootp, lp, rp)$/
__ram_set_flags ../btree/bt_method.c /^__ram_set_flags(dbp, flagsp)$/
__ram_set_re_delim ../btree/bt_method.c /^__ram_set_re_delim(dbp, re_delim)$/
@@ -2471,83 +3593,160 @@ __ram_update ../btree/bt_recno.c /^__ram_update(dbc, recno, can_create)$/
__ram_vrfy_inp ../btree/bt_verify.c /^__ram_vrfy_inp(dbp, vdp, h, pgno, nentriesp, flags/
__ram_vrfy_leaf ../btree/bt_verify.c /^__ram_vrfy_leaf(dbp, vdp, h, pgno, flags)$/
__ram_writeback ../btree/bt_recno.c /^__ram_writeback(dbp)$/
-__txn_abort_proc ../rpc_server/db_server_proc.c /^__txn_abort_proc(txnpcl_id, replyp)$/
+__rep_abort_prepared ../rep/rep_method.c /^__rep_abort_prepared(dbenv)$/
+__rep_apply ../rep/rep_record.c /^__rep_apply(dbenv, rp, rec, ret_lsnp)$/
+__rep_bt_cmp ../rep/rep_method.c /^__rep_bt_cmp(dbp, dbt1, dbt2)$/
+__rep_check_alloc ../rep/rep_util.c /^__rep_check_alloc(dbenv, r, n)$/
+__rep_client_dbinit ../rep/rep_method.c /^__rep_client_dbinit(dbenv, startup)$/
+__rep_cmp_vote ../rep/rep_record.c /^__rep_cmp_vote(dbenv, rep, eidp, lsnp, priority, g/
+__rep_cmp_vote2 ../rep/rep_record.c /^__rep_cmp_vote2(dbenv, rep, eid, egen)$/
+__rep_collect_txn ../rep/rep_record.c /^__rep_collect_txn(dbenv, lsnp, lc)$/
+__rep_dbenv_close ../rep/rep_region.c /^__rep_dbenv_close(dbenv)$/
+__rep_dbenv_create ../rep/rep_method.c /^__rep_dbenv_create(dbenv)$/
+__rep_dbenv_refresh ../rep/rep_region.c /^__rep_dbenv_refresh(dbenv)$/
+__rep_dorecovery ../rep/rep_record.c /^__rep_dorecovery(dbenv, lsnp, trunclsnp)$/
+__rep_elect ../rep/rep_method.c /^__rep_elect(dbenv, nsites, priority, timeout, eidp/
+__rep_elect_done ../rep/rep_util.c /^__rep_elect_done(dbenv, rep)$/
+__rep_elect_init ../rep/rep_method.c /^__rep_elect_init(dbenv, lsnp, nsites, priority, be/
+__rep_elect_master ../rep/rep_method.c /^__rep_elect_master(dbenv, rep, eidp)$/
+__rep_flush ../rep/rep_method.c /^__rep_flush(dbenv)$/
+__rep_get_gen ../rep/rep_util.c /^__rep_get_gen(dbenv, genp)$/
+__rep_get_limit ../rep/rep_method.c /^__rep_get_limit(dbenv, gbytesp, bytesp)$/
+__rep_grow_sites ../rep/rep_util.c /^__rep_grow_sites(dbenv, nsites)$/
+__rep_is_client ../rep/rep_util.c /^__rep_is_client(dbenv)$/
+__rep_lsn_cmp ../rep/rep_record.c /^__rep_lsn_cmp(lsn1, lsn2)$/
+__rep_new_master ../rep/rep_util.c /^__rep_new_master(dbenv, cntrl, eid)$/
+__rep_newfile ../rep/rep_record.c /^__rep_newfile(dbenv, rc, lsnp)$/
+__rep_noarchive ../rep/rep_util.c /^__rep_noarchive(dbenv)$/
+__rep_open ../rep/rep_method.c /^__rep_open(dbenv)$/
+__rep_preclose ../rep/rep_region.c /^__rep_preclose(dbenv, do_closefiles)$/
+__rep_print_logmsg ../rep/rep_util.c /^__rep_print_logmsg(dbenv, logdbt, lsnp)$/
+__rep_print_message ../rep/rep_util.c /^__rep_print_message(dbenv, eid, rp, str)$/
+__rep_process_message ../rep/rep_record.c /^__rep_process_message(dbenv, control, rec, eidp, r/
+__rep_process_txn ../rep/rep_record.c /^__rep_process_txn(dbenv, rec)$/
+__rep_region_destroy ../rep/rep_region.c /^__rep_region_destroy(dbenv)$/
+__rep_region_init ../rep/rep_region.c /^__rep_region_init(dbenv)$/
+__rep_restore_prepared ../rep/rep_method.c /^__rep_restore_prepared(dbenv)$/
+__rep_send_file ../rep/rep_util.c /^__rep_send_file(dbenv, rec, eid)$/
+__rep_send_message ../rep/rep_util.c /^__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, /
+__rep_send_vote ../rep/rep_util.c /^__rep_send_vote(dbenv, lsnp, nsites, pri, tiebreak/
+__rep_set_limit ../rep/rep_method.c /^__rep_set_limit(dbenv, gbytes, bytes)$/
+__rep_set_rep_transport ../rep/rep_method.c /^__rep_set_rep_transport(dbenv, eid, f_send)$/
+__rep_set_request ../rep/rep_method.c /^__rep_set_request(dbenv, min, max)$/
+__rep_start ../rep/rep_method.c /^__rep_start(dbenv, dbt, flags)$/
+__rep_stat ../rep/rep_method.c /^__rep_stat(dbenv, statp, flags)$/
+__rep_tally ../rep/rep_record.c /^__rep_tally(dbenv, rep, eid, countp, egen, vtoff)$/
+__rep_verify_match ../rep/rep_record.c /^__rep_verify_match(dbenv, rp, savetime)$/
+__rep_wait ../rep/rep_method.c /^__rep_wait(dbenv, timeout, eidp, flags)$/
+__txn_abort ../txn/txn.c /^__txn_abort(txnp)$/
+__txn_abort_pp ../txn/txn.c /^__txn_abort_pp(txnp)$/
+__txn_abort_proc ../rpc_server/c/db_server_proc.c /^__txn_abort_proc(txnpcl_id, replyp)$/
__txn_activekids ../txn/txn.c /^__txn_activekids(dbenv, rectype, txnp)$/
-__txn_begin ../txn/txn.c /^__txn_begin(txn, internal)$/
-__txn_begin_proc ../rpc_server/db_server_proc.c /^__txn_begin_proc(dbenvcl_id, parentcl_id,$/
+__txn_begin ../txn/txn.c /^__txn_begin(dbenv, parent, txnpp, flags)$/
+__txn_begin_int ../txn/txn.c /^__txn_begin_int(txn, internal)$/
+__txn_begin_pp ../txn/txn.c /^__txn_begin_pp(dbenv, parent, txnpp, flags)$/
+__txn_begin_proc ../rpc_server/c/db_server_proc.c /^__txn_begin_proc(dbenvcl_id, parentcl_id,$/
+__txn_checkpoint ../txn/txn.c /^__txn_checkpoint(dbenv, kbytes, minutes, flags)$/
+__txn_checkpoint_pp ../txn/txn.c /^__txn_checkpoint_pp(dbenv, kbytes, minutes, flags)/
+__txn_child_getpgnos ../txn/txn_auto.c /^__txn_child_getpgnos(dbenv, rec, lsnp, notused1, s/
__txn_child_log ../txn/txn_auto.c /^__txn_child_log(dbenv, txnid, ret_lsnp, flags,$/
-__txn_child_old_print ../txn/txn_auto.c /^__txn_child_old_print(dbenv, dbtp, lsnp, notused2,/
-__txn_child_old_read ../txn/txn_auto.c /^__txn_child_old_read(dbenv, recbuf, argpp)$/
__txn_child_print ../txn/txn_auto.c /^__txn_child_print(dbenv, dbtp, lsnp, notused2, not/
__txn_child_read ../txn/txn_auto.c /^__txn_child_read(dbenv, recbuf, argpp)$/
__txn_child_recover ../txn/txn_rec.c /^__txn_child_recover(dbenv, dbtp, lsnp, op, info)$/
+__txn_ckp_getpgnos ../txn/txn_auto.c /^__txn_ckp_getpgnos(dbenv, rec, lsnp, notused1, sum/
__txn_ckp_log ../txn/txn_auto.c /^__txn_ckp_log(dbenv, txnid, ret_lsnp, flags,$/
__txn_ckp_print ../txn/txn_auto.c /^__txn_ckp_print(dbenv, dbtp, lsnp, notused2, notus/
__txn_ckp_read ../txn/txn_auto.c /^__txn_ckp_read(dbenv, recbuf, argpp)$/
__txn_ckp_recover ../txn/txn_rec.c /^__txn_ckp_recover(dbenv, dbtp, lsnp, op, info)$/
-__txn_close ../txn/txn_region.c /^__txn_close(dbenv)$/
-__txn_commit_proc ../rpc_server/db_server_proc.c /^__txn_commit_proc(txnpcl_id, flags, replyp)$/
+__txn_closeevent ../txn/txn_util.c /^__txn_closeevent(dbenv, txn, dbp)$/
+__txn_commit ../txn/txn.c /^__txn_commit(txnp, flags)$/
+__txn_commit_pp ../txn/txn.c /^__txn_commit_pp(txnp, flags)$/
+__txn_commit_proc ../rpc_server/c/db_server_proc.c /^__txn_commit_proc(txnpcl_id, flags, replyp)$/
__txn_compensate_begin ../txn/txn.c /^__txn_compensate_begin(dbenv, txnpp)$/
__txn_continue ../txn/txn_recover.c /^__txn_continue(env, txnp, td, off)$/
-__txn_dbenv_create ../txn/txn_region.c /^__txn_dbenv_create(dbenv)$/
+__txn_dbenv_create ../txn/txn_method.c /^__txn_dbenv_create(dbenv)$/
+__txn_dbenv_refresh ../txn/txn_region.c /^__txn_dbenv_refresh(dbenv)$/
+__txn_discard ../txn/txn.c /^__txn_discard(txnp, flags)$/
+__txn_discard_pp ../txn/txn.c /^__txn_discard_pp(txnp, flags)$/
+__txn_discard_proc ../rpc_server/c/db_server_proc.c /^__txn_discard_proc(txnpcl_id, flags, replyp)$/
+__txn_dispatch_undo ../txn/txn.c /^__txn_dispatch_undo(dbenv, txnp, rdbt, key_lsn, tx/
+__txn_doevents ../txn/txn_util.c /^__txn_doevents(dbenv, txn, opcode, preprocess)$/
__txn_end ../txn/txn.c /^__txn_end(txnp, is_commit)$/
-__txn_force_abort ../txn/txn.c /^__txn_force_abort(buffer)$/
+__txn_findlastckp ../txn/txn_region.c /^__txn_findlastckp(dbenv, lsnp)$/
+__txn_force_abort ../txn/txn.c /^__txn_force_abort(dbenv, buffer)$/
__txn_get_prepared ../txn/txn_recover.c /^__txn_get_prepared(dbenv, xids, txns, count, retp,/
+__txn_get_tx_max ../txn/txn_method.c /^__txn_get_tx_max(dbenv, tx_maxp)$/
+__txn_get_tx_timestamp ../txn/txn_method.c /^__txn_get_tx_timestamp(dbenv, timestamp)$/
+__txn_getckp ../txn/txn.c /^__txn_getckp(dbenv, lsnp)$/
+__txn_id ../txn/txn.c /^__txn_id(txnp)$/
+__txn_id_set ../txn/txn_region.c /^__txn_id_set(dbenv, cur_txnid, max_txnid)$/
__txn_init ../txn/txn_region.c /^__txn_init(dbenv, tmgrp)$/
-__txn_init_print ../txn/txn_auto.c /^__txn_init_print(dbenv)$/
-__txn_init_recover ../txn/txn_auto.c /^__txn_init_recover(dbenv)$/
+__txn_init_getpgnos ../txn/txn_auto.c /^__txn_init_getpgnos(dbenv, dtabp, dtabsizep)$/
+__txn_init_print ../txn/txn_auto.c /^__txn_init_print(dbenv, dtabp, dtabsizep)$/
+__txn_init_recover ../txn/txn_auto.c /^__txn_init_recover(dbenv, dtabp, dtabsizep)$/
__txn_isvalid ../txn/txn.c /^__txn_isvalid(txnp, tdp, op)$/
+__txn_lockevent ../txn/txn_util.c /^__txn_lockevent(dbenv, txn, dbp, lock, locker)$/
__txn_map_gid ../txn/txn_recover.c /^__txn_map_gid(dbenv, gid, tdp, offp)$/
-__txn_old_ckp_print ../txn/txn_auto.c /^__txn_old_ckp_print(dbenv, dbtp, lsnp, notused2, n/
-__txn_old_ckp_read ../txn/txn_auto.c /^__txn_old_ckp_read(dbenv, recbuf, argpp)$/
-__txn_old_regop_print ../txn/txn_auto.c /^__txn_old_regop_print(dbenv, dbtp, lsnp, notused2,/
-__txn_old_regop_read ../txn/txn_auto.c /^__txn_old_regop_read(dbenv, recbuf, argpp)$/
__txn_open ../txn/txn_region.c /^__txn_open(dbenv)$/
-__txn_prepare_proc ../rpc_server/db_server_proc.c /^__txn_prepare_proc(txnpcl_id, gid, replyp)$/
-__txn_recover_proc ../rpc_server/db_server_proc.c /^__txn_recover_proc(dbenvcl_id, count,$/
+__txn_preclose ../txn/txn.c /^__txn_preclose(dbenv)$/
+__txn_prepare ../txn/txn.c /^__txn_prepare(txnp, gid)$/
+__txn_prepare_proc ../rpc_server/c/db_server_proc.c /^__txn_prepare_proc(txnpcl_id, gid, replyp)$/
+__txn_recover ../txn/txn_recover.c /^__txn_recover(dbenv, preplist, count, retp, flags)/
+__txn_recover_pp ../txn/txn_recover.c /^__txn_recover_pp(dbenv, preplist, count, retp, fla/
+__txn_recover_proc ../rpc_server/c/db_server_proc.c /^__txn_recover_proc(dbenvcl_id, count,$/
+__txn_recycle_getpgnos ../txn/txn_auto.c /^__txn_recycle_getpgnos(dbenv, rec, lsnp, notused1,/
+__txn_recycle_log ../txn/txn_auto.c /^__txn_recycle_log(dbenv, txnid, ret_lsnp, flags,$/
+__txn_recycle_print ../txn/txn_auto.c /^__txn_recycle_print(dbenv, dbtp, lsnp, notused2, n/
+__txn_recycle_read ../txn/txn_auto.c /^__txn_recycle_read(dbenv, recbuf, argpp)$/
+__txn_recycle_recover ../txn/txn_rec.c /^__txn_recycle_recover(dbenv, dbtp, lsnp, op, info)/
__txn_region_destroy ../txn/txn_region.c /^__txn_region_destroy(dbenv, infop)$/
__txn_region_size ../txn/txn_region.c /^__txn_region_size(dbenv)$/
+__txn_regop_getpgnos ../txn/txn_auto.c /^__txn_regop_getpgnos(dbenv, rec, lsnp, notused1, s/
__txn_regop_log ../txn/txn_auto.c /^__txn_regop_log(dbenv, txnid, ret_lsnp, flags,$/
__txn_regop_print ../txn/txn_auto.c /^__txn_regop_print(dbenv, dbtp, lsnp, notused2, not/
__txn_regop_read ../txn/txn_auto.c /^__txn_regop_read(dbenv, recbuf, argpp)$/
__txn_regop_recover ../txn/txn_rec.c /^__txn_regop_recover(dbenv, dbtp, lsnp, op, info)$/
+__txn_remevent ../txn/txn_util.c /^__txn_remevent(dbenv, txn, name, fileid)$/
+__txn_remlock ../txn/txn_util.c /^__txn_remlock(dbenv, txn, lock, locker)$/
+__txn_remrem ../txn/txn_util.c /^__txn_remrem(dbenv, txn, name)$/
+__txn_reset ../txn/txn.c /^__txn_reset(dbenv)$/
__txn_restore_txn ../txn/txn_rec.c /^__txn_restore_txn(dbenv, lsnp, argp)$/
-__txn_set_tx_max ../txn/txn_region.c /^__txn_set_tx_max(dbenv, tx_max)$/
-__txn_set_tx_recover ../txn/txn_region.c /^__txn_set_tx_recover(dbenv, tx_recover)$/
-__txn_set_tx_timestamp ../txn/txn_region.c /^__txn_set_tx_timestamp(dbenv, timestamp)$/
+__txn_set_timeout ../txn/txn.c /^__txn_set_timeout(txnp, timeout, op)$/
+__txn_set_tx_max ../txn/txn_method.c /^__txn_set_tx_max(dbenv, tx_max)$/
+__txn_set_tx_timestamp ../txn/txn_method.c /^__txn_set_tx_timestamp(dbenv, timestamp)$/
+__txn_stat ../txn/txn_stat.c /^__txn_stat(dbenv, statp, flags)$/
+__txn_stat_pp ../txn/txn_stat.c /^__txn_stat_pp(dbenv, statp, flags)$/
__txn_undo ../txn/txn.c /^__txn_undo(txnp)$/
+__txn_updateckp ../txn/txn.c /^__txn_updateckp(dbenv, lsnp)$/
__txn_xa_begin ../txn/txn.c /^__txn_xa_begin(dbenv, txn)$/
+__txn_xa_regop_getpgnos ../txn/txn_auto.c /^__txn_xa_regop_getpgnos(dbenv, rec, lsnp, notused1/
__txn_xa_regop_log ../txn/txn_auto.c /^__txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,$/
-__txn_xa_regop_old_print ../txn/txn_auto.c /^__txn_xa_regop_old_print(dbenv, dbtp, lsnp, notuse/
-__txn_xa_regop_old_read ../txn/txn_auto.c /^__txn_xa_regop_old_read(dbenv, recbuf, argpp)$/
__txn_xa_regop_print ../txn/txn_auto.c /^__txn_xa_regop_print(dbenv, dbtp, lsnp, notused2, /
__txn_xa_regop_read ../txn/txn_auto.c /^__txn_xa_regop_read(dbenv, recbuf, argpp)$/
__txn_xa_regop_recover ../txn/txn_rec.c /^__txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info/
__ua_memcpy ../os/os_alloc.c /^__ua_memcpy(dst, src, len)$/
__usermem ../log/log_archive.c /^__usermem(dbenv, listp)$/
-__vrfy_childinfo ../include/db_verify.h /^struct __vrfy_childinfo {$/
-__vrfy_dbinfo ../include/db_verify.h /^struct __vrfy_dbinfo {$/
-__vrfy_pageinfo ../include/db_verify.h /^struct __vrfy_pageinfo {$/
__vx_fsync ../os/os_fsync.c /^__vx_fsync(fd)$/
__xa_close ../xa/xa_db.c /^__xa_close(dbp, flags)$/
__xa_cursor ../xa/xa_db.c /^__xa_cursor(dbp, txn, dbcp, flags)$/
__xa_del ../xa/xa_db.c /^__xa_del(dbp, txn, key, flags)$/
__xa_get ../xa/xa_db.c /^__xa_get(dbp, txn, key, data, flags)$/
-__xa_open ../xa/xa_db.c /^__xa_open(dbp, name, subdb, type, flags, mode)$/
+__xa_get_txn ../xa/xa.c /^__xa_get_txn(env, txnp, do_init)$/
+__xa_open ../xa/xa_db.c /^__xa_open(dbp, txn, name, subdb, type, flags, mode/
__xa_put ../xa/xa_db.c /^__xa_put(dbp, txn, key, data, flags)$/
-__xa_txn_end ../xa/xa.c /^__xa_txn_end(txn)$/
+__xa_put_txn ../xa/xa.c /^__xa_put_txn(env, txnp)$/
+_app_dispatch_intercept_c ../cxx/cxx_env.cpp /^int _app_dispatch_intercept_c(DB_ENV *env, DBT *db/
_debug_check ../tcl/tcl_internal.c /^_debug_check()$/
-_stream_error_function ../cxx/cxx_app.cpp /^void DbEnv::_stream_error_function(const char *pre/
-_stream_error_function_c ../cxx/cxx_app.cpp /^void _stream_error_function_c(const char *prefix, /
-_tsl_set ../include/mutex.h /^_tsl_set(void *tsl)$/
-abort ../cxx/cxx_txn.cpp /^int DbTxn::abort()$/
-add_home ../rpc_server/db_server_util.c /^add_home(home)$/
-appinit ../include/db_cxx.h /^\/\/ call appinit() before any other db activity (/
-archopts ../tcl/tcl_log.c /^ enum archopts {$/
+_exported ../dbinc/db_cxx.in 150
+_feedback_intercept_c ../cxx/cxx_env.cpp /^void _feedback_intercept_c(DB_ENV *env, int opcode/
+_paniccall_intercept_c ../cxx/cxx_env.cpp /^void _paniccall_intercept_c(DB_ENV *env, int errva/
+_rep_send_intercept_c ../cxx/cxx_env.cpp /^int _rep_send_intercept_c(DB_ENV *env, const DBT */
+_stream_error_function_c ../cxx/cxx_env.cpp /^void _stream_error_function_c(const char *prefix, /
+add_home ../rpc_server/c/db_server_util.c /^add_home(home)$/
+add_passwd ../rpc_server/c/db_server_util.c /^add_passwd(passwd)$/
bdb_DbOpen ../tcl/tcl_db_pkg.c /^bdb_DbOpen(interp, objc, objv, ip, dbp)$/
bdb_DbRemove ../tcl/tcl_db_pkg.c /^bdb_DbRemove(interp, objc, objv)$/
bdb_DbRename ../tcl/tcl_db_pkg.c /^bdb_DbRename(interp, objc, objv)$/
-bdb_DbTruncate ../tcl/tcl_db_pkg.c /^bdb_DbTruncate(interp, objc, objv)$/
bdb_DbUpgrade ../tcl/tcl_db_pkg.c /^bdb_DbUpgrade(interp, objc, objv)$/
bdb_DbVerify ../tcl/tcl_db_pkg.c /^bdb_DbVerify(interp, objc, objv)$/
bdb_DbmCommand ../tcl/tcl_compat.c /^bdb_DbmCommand(interp, objc, objv, flag, dbm)$/
@@ -2555,48 +3754,37 @@ bdb_EnvOpen ../tcl/tcl_db_pkg.c /^bdb_EnvOpen(interp, objc, objv, ip, env)$/
bdb_HCommand ../tcl/tcl_compat.c /^bdb_HCommand(interp, objc, objv)$/
bdb_Handles ../tcl/tcl_db_pkg.c /^bdb_Handles(interp, objc, objv)$/
bdb_NdbmOpen ../tcl/tcl_compat.c /^bdb_NdbmOpen(interp, objc, objv, dbpp)$/
-bdb_RandCommand ../tcl/tcl_compat.c /^bdb_RandCommand(interp, objc, objv)$/
+bdb_RandCommand ../tcl/tcl_util.c /^bdb_RandCommand(interp, objc, objv)$/
bdb_Version ../tcl/tcl_db_pkg.c /^bdb_Version(interp, objc, objv)$/
-bdbenvopen ../tcl/tcl_db_pkg.c /^ enum bdbenvopen {$/
-bdbmv ../tcl/tcl_db_pkg.c /^ enum bdbmv {$/
-bdbopen ../tcl/tcl_db_pkg.c /^ enum bdbopen {$/
-bdbrem ../tcl/tcl_db_pkg.c /^ enum bdbrem {$/
-bdbtrunc ../tcl/tcl_db_pkg.c /^ enum bdbtrunc {$/
-bdbupg ../tcl/tcl_db_pkg.c /^ enum bdbupg {$/
-bdbver ../tcl/tcl_db_pkg.c /^ enum bdbver {$/
-bdbvrfy ../tcl/tcl_db_pkg.c /^ enum bdbvrfy {$/
berkdb_Cmd ../tcl/tcl_db_pkg.c /^berkdb_Cmd(notused, interp, objc, objv)$/
-berkdbcmds ../tcl/tcl_db_pkg.c /^ enum berkdbcmds {$/
-ca_recno_arg ../include/btree.h /^} ca_recno_arg;$/
-close ../cxx/cxx_mpool.cpp /^int DbMpoolFile::close()$/
-commitopt ../tcl/tcl_txn.c /^ enum commitopt {$/
-const ../include/db.in /^#define const$/
-construct_flags_ ../cxx/cxx_table.cpp /^, construct_flags_(flags)$/
-convert_object ../libdb_java/java_util.c /^jobject convert_object(JNIEnv *jnienv, const char /
-create_default_object ../libdb_java/java_util.c /^jobject create_default_object(JNIEnv *jnienv, cons/
-create_exception ../libdb_java/java_util.c /^jobject create_exception(JNIEnv *jnienv, jstring t/
-ct_anyp ../include/db_server_int.h /^#define ct_anyp handle_u.anyp$/
-ct_dbc ../include/db_server_int.h /^#define ct_dbc handle_u.dbc$/
-ct_dbp ../include/db_server_int.h /^#define ct_dbp handle_u.dbp$/
-ct_entry ../include/db_server_int.h /^typedef struct ct_entry ct_entry;$/
-ct_envp ../include/db_server_int.h /^#define ct_envp handle_u.envp$/
-ct_txnp ../include/db_server_int.h /^#define ct_txnp handle_u.txnp$/
-data ../include/tcl_db.h /^ union data {$/
-data2 ../include/tcl_db.h /^ union data2 {$/
-datum ../include/db.in /^} datum;$/
+blk ../hmac/sha1.c /^#define blk(i) (block->l[i&15] = rol(block->l[(i+1/
+blk0 ../hmac/sha1.c /^#define blk0(i) is_bigendian ? block->l[i] : \\$/
+bt_compare_fcn_type ../dbinc/db_cxx.in 177
+bt_prefix_fcn_type ../dbinc/db_cxx.in 179
+ca_recno_arg ../dbinc/btree.h 84
+const ../dbinc/db_185.in 54
+ct_anyp ../dbinc/db_server_int.h 126
+ct_dbc ../dbinc/db_server_int.h 125
+ct_dbdata ../dbinc/db_server_int.h 65
+ct_dbdp ../dbinc/db_server_int.h 129
+ct_dbp ../dbinc/db_server_int.h 124
+ct_entry ../dbinc/db_server_int.h 89
+ct_envdata ../dbinc/db_server_int.h 64
+ct_envdp ../dbinc/db_server_int.h 128
+ct_envp ../dbinc/db_server_int.h 122
+ct_txnp ../dbinc/db_server_int.h 123
db185_close ../db185/db185.c /^db185_close(db185p)$/
db185_compare ../db185/db185.c /^db185_compare(dbp, a, b)$/
db185_del ../db185/db185.c /^db185_del(db185p, key185, flags)$/
db185_fd ../db185/db185.c /^db185_fd(db185p)$/
db185_get ../db185/db185.c /^db185_get(db185p, key185, data185, flags)$/
db185_hash ../db185/db185.c /^db185_hash(dbp, key, len)$/
-db185_openstderr ../db185/db185.c /^db185_openstderr(fhp)$/
db185_prefix ../db185/db185.c /^db185_prefix(dbp, a, b)$/
db185_put ../db185/db185.c /^db185_put(db185p, key185, data185, flags)$/
db185_seq ../db185/db185.c /^db185_seq(db185p, key185, data185, flags)$/
db185_sync ../db185/db185.c /^db185_sync(db185p, flags)$/
db_Cmd ../tcl/tcl_db.c /^db_Cmd(clientData, interp, objc, objv)$/
-db_ca_mode ../include/btree.h /^} db_ca_mode;$/
+db_ca_mode ../dbinc/btree.h 315
db_create ../db/db_method.c /^db_create(dbpp, dbenv, flags)$/
db_env_create ../env/env_method.c /^db_env_create(dbenvpp, flags)$/
db_env_set_func_close ../os/os_method.c /^db_env_set_func_close(func_close)$/
@@ -2618,290 +3806,173 @@ db_env_set_func_unlink ../os/os_method.c /^db_env_set_func_unlink(func_unlink)$/
db_env_set_func_unmap ../os/os_method.c /^db_env_set_func_unmap(func_unmap)$/
db_env_set_func_write ../os/os_method.c /^db_env_set_func_write(func_write)$/
db_env_set_func_yield ../os/os_method.c /^db_env_set_func_yield(func_yield)$/
-db_env_set_pageyield ../os/os_method.c /^db_env_set_pageyield(onoff)$/
-db_env_set_panicstate ../os/os_method.c /^db_env_set_panicstate(onoff)$/
-db_env_set_region_init ../os/os_method.c /^db_env_set_region_init(onoff)$/
-db_env_set_tas_spins ../os/os_method.c /^db_env_set_tas_spins(tas_spins)$/
-db_ham_mode ../include/hash.h /^} db_ham_mode;$/
-db_indx_t ../include/db.in /^typedef u_int16_t db_indx_t; \/* Page offset type./
-db_lockmode_t ../include/db.in /^} db_lockmode_t;$/
-db_lockop_t ../include/db.in /^} db_lockop_t;$/
-db_pgno_t ../include/db.in /^typedef u_int32_t db_pgno_t; \/* Page number type./
-db_recno_t ../include/db.in /^typedef u_int32_t db_recno_t; \/* Record number ty/
-db_recops ../include/db.in /^} db_recops;$/
-db_rpc_serverprog_3003 ../rpc_server/db_server_svc.c /^db_rpc_serverprog_3003(rqstp, transp)$/
-db_status_t ../include/db.in /^} db_status_t;$/
+db_errcall_fcn_type ../cxx/cxx_env.cpp 69
+db_free_fcn_type ../dbinc/db_cxx.in 175
+db_ham_mode ../dbinc/hash.h 142
+db_indx_t ../dbinc/db.in 78
+db_limbo_state ../dbinc/db_dispatch.h 113
+db_lockmode_t ../dbinc/db.in 359
+db_lockop_t ../dbinc/db.in 376
+db_malloc_fcn_type ../dbinc/db_cxx.in 171
+db_pgno_t ../dbinc/db.in 77
+db_realloc_fcn_type ../dbinc/db_cxx.in 173
+db_recno_t ../dbinc/db.in 81
+db_recops ../dbinc/db.in 742
+db_ret_t ../libdb_java/db_java_wrap.c 1253
+db_rpc_serverprog_4002 ../rpc_server/c/db_server_svc.c /^db_rpc_serverprog_4002(rqstp, transp)$/
+db_status_t ../dbinc/db.in 393
db_strerror ../common/db_err.c /^db_strerror(error)$/
-db_trunc_param ../include/db_am.h /^} db_trunc_param;$/
-db_txnlist_type ../include/db_int.in /^} db_txnlist_type;$/
+db_sync_op ../dbinc/mp.h 37
+db_timeout_t ../dbinc/db.in 84
+db_txnlist_type ../dbinc/db_dispatch.h 51
db_version ../env/env_open.c /^db_version(majverp, minverp, patchp)$/
-dbaopts ../tcl/tcl_db.c /^ enum dbaopts {$/
dbc_Cmd ../tcl/tcl_dbcursor.c /^dbc_Cmd(clientData, interp, objc, objv)$/
-dbccmds ../tcl/tcl_dbcursor.c /^ enum dbccmds {$/
-dbcdupopts ../tcl/tcl_dbcursor.c /^ enum dbcdupopts {$/
-dbcgetopts ../tcl/tcl_dbcursor.c /^ enum dbcgetopts {$/
-dbcmds ../tcl/tcl_db.c /^ enum dbcmds {$/
-dbcuropts ../tcl/tcl_db.c /^ enum dbcuropts {$/
-dbcutopts ../tcl/tcl_dbcursor.c /^ enum dbcutopts {$/
-dbdelopts ../tcl/tcl_db.c /^ enum dbdelopts {$/
-dbgetjopts ../tcl/tcl_db.c /^ enum dbgetjopts {$/
-dbgetopts ../tcl/tcl_db.c /^ enum dbgetopts {$/
-dbji_call_append_recno ../libdb_java/java_info.c /^extern int dbji_call_append_recno(DB_JAVAINFO *dbj/
-dbji_call_assoc ../libdb_java/java_info.c /^extern int dbji_call_assoc(DB_JAVAINFO *dbji, DB */
-dbji_call_bt_compare ../libdb_java/java_info.c /^int dbji_call_bt_compare(DB_JAVAINFO *dbji, DB *db/
-dbji_call_bt_prefix ../libdb_java/java_info.c /^size_t dbji_call_bt_prefix(DB_JAVAINFO *dbji, DB */
-dbji_call_dup_compare ../libdb_java/java_info.c /^int dbji_call_dup_compare(DB_JAVAINFO *dbji, DB *d/
-dbji_call_feedback ../libdb_java/java_info.c /^void dbji_call_feedback(DB_JAVAINFO *dbji, DB *db,/
-dbji_call_h_hash ../libdb_java/java_info.c /^int dbji_call_h_hash(DB_JAVAINFO *dbji, DB *db, jo/
-dbji_construct ../libdb_java/java_info.c /^DB_JAVAINFO *dbji_construct(JNIEnv *jnienv, jint f/
-dbji_dealloc ../libdb_java/java_info.c /^dbji_dealloc(DB_JAVAINFO *dbji, JNIEnv *jnienv)$/
-dbji_destroy ../libdb_java/java_info.c /^dbji_destroy(DB_JAVAINFO *dbji, JNIEnv *jnienv)$/
-dbji_get_flags ../libdb_java/java_info.c /^jint dbji_get_flags(DB_JAVAINFO *dbji)$/
-dbji_get_jnienv ../libdb_java/java_info.c /^JNIEnv *dbji_get_jnienv(DB_JAVAINFO *dbji)$/
-dbji_set_append_recno_object ../libdb_java/java_info.c /^void dbji_set_append_recno_object(DB_JAVAINFO *dbj/
-dbji_set_assoc_object ../libdb_java/java_info.c /^void dbji_set_assoc_object(DB_JAVAINFO *dbji, JNIE/
-dbji_set_bt_compare_object ../libdb_java/java_info.c /^void dbji_set_bt_compare_object(DB_JAVAINFO *dbji,/
-dbji_set_bt_prefix_object ../libdb_java/java_info.c /^void dbji_set_bt_prefix_object(DB_JAVAINFO *dbji, /
-dbji_set_dup_compare_object ../libdb_java/java_info.c /^void dbji_set_dup_compare_object(DB_JAVAINFO *dbji/
-dbji_set_feedback_object ../libdb_java/java_info.c /^void dbji_set_feedback_object(DB_JAVAINFO *dbji, J/
-dbji_set_h_hash_object ../libdb_java/java_info.c /^void dbji_set_h_hash_object(DB_JAVAINFO *dbji, JNI/
-dbjie_call_feedback ../libdb_java/java_info.c /^void dbjie_call_feedback(DB_ENV_JAVAINFO *dbjie, D/
-dbjie_call_recovery_init ../libdb_java/java_info.c /^int dbjie_call_recovery_init(DB_ENV_JAVAINFO *dbji/
-dbjie_call_tx_recover ../libdb_java/java_info.c /^int dbjie_call_tx_recover(DB_ENV_JAVAINFO *dbjie, /
-dbjie_construct ../libdb_java/java_info.c /^dbjie_construct(JNIEnv *jnienv,$/
-dbjie_dealloc ../libdb_java/java_info.c /^void dbjie_dealloc(DB_ENV_JAVAINFO *dbjie, JNIEnv /
-dbjie_destroy ../libdb_java/java_info.c /^void dbjie_destroy(DB_ENV_JAVAINFO *dbjie, JNIEnv /
-dbjie_get_errcall ../libdb_java/java_info.c /^jobject dbjie_get_errcall(DB_ENV_JAVAINFO *dbjie)$/
-dbjie_get_errpfx ../libdb_java/java_info.c /^dbjie_get_errpfx(DB_ENV_JAVAINFO *dbjie, JNIEnv *j/
-dbjie_get_jnienv ../libdb_java/java_info.c /^dbjie_get_jnienv(DB_ENV_JAVAINFO *dbjie)$/
-dbjie_is_dbopen ../libdb_java/java_info.c /^int dbjie_is_dbopen(DB_ENV_JAVAINFO *dbjie)$/
-dbjie_set_conflict ../libdb_java/java_info.c /^dbjie_set_conflict(DB_ENV_JAVAINFO *dbjie, unsigne/
-dbjie_set_errcall ../libdb_java/java_info.c /^dbjie_set_errcall(DB_ENV_JAVAINFO *dbjie, JNIEnv */
-dbjie_set_errpfx ../libdb_java/java_info.c /^dbjie_set_errpfx(DB_ENV_JAVAINFO *dbjie, JNIEnv *j/
-dbjie_set_feedback_object ../libdb_java/java_info.c /^void dbjie_set_feedback_object(DB_ENV_JAVAINFO *db/
-dbjie_set_recovery_init_object ../libdb_java/java_info.c /^void dbjie_set_recovery_init_object(DB_ENV_JAVAINF/
-dbjie_set_tx_recover_object ../libdb_java/java_info.c /^void dbjie_set_tx_recover_object(DB_ENV_JAVAINFO */
-dbjit_construct ../libdb_java/java_info.c /^dbjit_construct()$/
-dbjit_destroy ../libdb_java/java_info.c /^void dbjit_destroy(DBT_JAVAINFO *dbjit)$/
-dbjopts ../tcl/tcl_db.c /^ enum dbjopts {$/
-dbkeyropts ../tcl/tcl_db.c /^ enum dbkeyropts {$/
-dbmcmds ../tcl/tcl_compat.c /^ enum dbmcmds {$/
-dbputapp ../tcl/tcl_db.c /^ enum dbputapp { DBPUT_APPEND0 };$/
-dbputopts ../tcl/tcl_db.c /^ enum dbputopts {$/
-dbt_ ../cxx/cxx_except.cpp /^, dbt_(dbt)$/
-debug_delete_global_ref ../libdb_java/java_util.h /^static void debug_delete_global_ref(JNIEnv *jnienv/
-debug_new_global_ref ../libdb_java/java_util.h /^static jobject debug_new_global_ref(JNIEnv *jnienv/
-del ../cxx/cxx_table.cpp /^int Db::del(DbTxn *txnid, Dbt *key, u_int32_t flag/
+dbm_clearerr ../dbinc/db.in /^#define dbm_clearerr(a) __db_ndbm_clearerr@DB_VER/
+dbm_close ../dbinc/db.in /^#define dbm_close(a) __db_ndbm_close@DB_VERSION_U/
+dbm_delete ../dbinc/db.in /^#define dbm_delete(a, b) __db_ndbm_delete@DB_VERSI/
+dbm_dirfno ../dbinc/db.in /^#define dbm_dirfno(a) __db_ndbm_dirfno@DB_VERSION/
+dbm_error ../dbinc/db.in /^#define dbm_error(a) __db_ndbm_error@DB_VERSION_U/
+dbm_fetch ../dbinc/db.in /^#define dbm_fetch(a, b) __db_ndbm_fetch@DB_VERSIO/
+dbm_firstkey ../dbinc/db.in /^#define dbm_firstkey(a) __db_ndbm_firstkey@DB_VER/
+dbm_nextkey ../dbinc/db.in /^#define dbm_nextkey(a) __db_ndbm_nextkey@DB_VERSI/
+dbm_open ../dbinc/db.in /^#define dbm_open(a, b, c) __db_ndbm_open@DB_VERSIO/
+dbm_pagfno ../dbinc/db.in /^#define dbm_pagfno(a) __db_ndbm_pagfno@DB_VERSION/
+dbm_rdonly ../dbinc/db.in /^#define dbm_rdonly(a) __db_ndbm_rdonly@DB_VERSION/
+dbm_store ../dbinc/db.in /^#define dbm_store(a, b, c, d) \\$/
+dbmclose ../dbinc/db.in 1951
+dbminit ../dbinc/db.in /^#define dbminit(a) __db_dbm_init@DB_VERSION_UNIQUE/
+dbopen ../dbinc/db_185.in 167
+delete ../dbinc/db.in /^#define delete(a) __db_dbm_delete@DB_VERSION_UNIQU/
+delete___db_lock_u ../libdb_java/db_java_wrap.c /^void delete___db_lock_u(struct __db_lock_u *self){/
+delete___db_lsn ../libdb_java/db_java_wrap.c /^void delete___db_lsn(struct __db_lsn *self){$/
+dirent ../clib/getcwd.c 50
dirfd ../clib/getcwd.c /^#define dirfd(dirp) ((dirp)->dd_fd)$/
dupString ../cxx/cxx_except.cpp /^static char *dupString(const char *s)$/
-dup_string ../libdb_java/java_util.c /^char *dup_string(const char *str)$/
+dup_compare_fcn_type ../dbinc/db_cxx.in 181
env_Cmd ../tcl/tcl_env.c /^env_Cmd(clientData, interp, objc, objv)$/
-env_recover ../rpc_server/db_server_util.c /^env_recover(progname)$/
-envcmds ../tcl/tcl_env.c /^ enum envcmds {$/
-envopen ../tcl/tcl_db_pkg.c /^ enum envopen {$/
-envremopts ../tcl/tcl_env.c /^ enum envremopts {$/
-envtestat ../tcl/tcl_env.c /^ enum envtestat {$/
-envtestcmd ../tcl/tcl_env.c /^ enum envtestcmd {$/
-err ../cxx/cxx_app.cpp /^void DbEnv::err(int error, const char *format, .../
-err_ ../cxx/cxx_except.cpp /^: err_(err)$/
-error_policy ../cxx/cxx_app.cpp /^int DbEnv::error_policy()$/
-errx ../cxx/cxx_app.cpp /^void DbEnv::errx(const char *format, ...)$/
-exec_one ../mutex/tm.c /^exec_one()$/
-fd ../cxx/cxx_table.cpp /^int Db::fd(int *fdp)$/
-file_init ../mutex/tm.c /^file_init()$/
+env_DbRemove ../tcl/tcl_env.c /^env_DbRemove(interp, objc, objv, dbenv)$/
+env_DbRename ../tcl/tcl_env.c /^env_DbRename(interp, objc, objv, dbenv)$/
+env_GetFlags ../tcl/tcl_env.c /^env_GetFlags(interp, objc, objv, dbenv)$/
+env_GetLockDetect ../tcl/tcl_env.c /^env_GetLockDetect(interp, objc, objv, dbenv)$/
+env_GetOpenFlag ../tcl/tcl_env.c /^env_GetOpenFlag(interp, objc, objv, dbenv)$/
+env_GetTimeout ../tcl/tcl_env.c /^env_GetTimeout(interp, objc, objv, dbenv)$/
+env_GetVerbose ../tcl/tcl_env.c /^env_GetVerbose(interp, objc, objv, dbenv)$/
+env_recover ../rpc_server/c/db_server_util.c /^env_recover(progname)$/
+exec_proc ../mutex/tm.c /^exec_proc(id, tmpath, typearg)$/
+fetch ../dbinc/db.in /^#define fetch(a) __db_dbm_fetch@DB_VERSION_UNIQUE_/
+firstkey ../dbinc/db.in 1956
fsync ../os/os_fsync.c /^#define fsync(fd) __vx_fsync(fd);$/
-get ../cxx/cxx_table.cpp /^int Db::get(DbTxn *txnid, Dbt *key, Dbt *value, u_/
-get_DB ../libdb_java/java_util.c /^DB *get_DB(JNIEnv *jnienv, jobject obj)$/
-get_DBC ../libdb_java/java_util.c /^DBC *get_DBC(JNIEnv *jnienv, jobject obj)$/
-get_DBT ../libdb_java/java_util.c /^DBT *get_DBT(JNIEnv *jnienv, jobject obj)$/
-get_DBT_JAVAINFO ../libdb_java/java_util.c /^DBT_JAVAINFO *get_DBT_JAVAINFO(JNIEnv *jnienv, job/
-get_DB_BTREE_STAT ../libdb_java/java_util.c /^DB_BTREE_STAT *get_DB_BTREE_STAT(JNIEnv *jnienv, j/
-get_DB_ENV ../libdb_java/java_util.c /^DB_ENV *get_DB_ENV(JNIEnv *jnienv, jobject obj)$/
-get_DB_ENV_JAVAINFO ../libdb_java/java_util.c /^DB_ENV_JAVAINFO *get_DB_ENV_JAVAINFO(JNIEnv *jnien/
-get_DB_HASH_STAT ../libdb_java/java_util.c /^DB_HASH_STAT *get_DB_HASH_STAT(JNIEnv *jnienv, job/
-get_DB_JAVAINFO ../libdb_java/java_util.c /^DB_JAVAINFO *get_DB_JAVAINFO(JNIEnv *jnienv, jobje/
-get_DB_LOCK ../libdb_java/java_util.c /^DB_LOCK *get_DB_LOCK(JNIEnv *jnienv, jobject obj)$/
-get_DB_LOG_STAT ../libdb_java/java_util.c /^DB_LOG_STAT *get_DB_LOG_STAT(JNIEnv *jnienv, jobje/
-get_DB_LSN ../libdb_java/java_util.c /^DB_LSN *get_DB_LSN(JNIEnv *jnienv, \/* DbLsn *\/ j/
-get_DB_MPOOL_FSTAT ../libdb_java/java_util.c /^DB_MPOOL_FSTAT *get_DB_MPOOL_FSTAT(JNIEnv *jnienv,/
-get_DB_MPOOL_STAT ../libdb_java/java_util.c /^DB_MPOOL_STAT *get_DB_MPOOL_STAT(JNIEnv *jnienv, j/
-get_DB_QUEUE_STAT ../libdb_java/java_util.c /^DB_QUEUE_STAT *get_DB_QUEUE_STAT(JNIEnv *jnienv, j/
-get_DB_TXN ../libdb_java/java_util.c /^DB_TXN *get_DB_TXN(JNIEnv *jnienv, jobject obj)$/
-get_DB_TXN_STAT ../libdb_java/java_util.c /^DB_TXN_STAT *get_DB_TXN_STAT(JNIEnv *jnienv, jobje/
-get_DbBtreeStat ../libdb_java/java_util.c /^jobject get_DbBtreeStat(JNIEnv *jnienv, DB_BTREE_S/
-get_DbHashStat ../libdb_java/java_util.c /^jobject get_DbHashStat(JNIEnv *jnienv, DB_HASH_STA/
-get_DbLogStat ../libdb_java/java_util.c /^jobject get_DbLogStat(JNIEnv *jnienv, DB_LOG_STAT /
-get_DbLsn ../libdb_java/java_util.c /^jobject get_DbLsn(JNIEnv *jnienv, DB_LSN dbobj)$/
-get_DbMpoolFStat ../libdb_java/java_util.c /^jobject get_DbMpoolFStat(JNIEnv *jnienv, DB_MPOOL_/
-get_DbMpoolStat ../libdb_java/java_util.c /^jobject get_DbMpoolStat(JNIEnv *jnienv, DB_MPOOL_S/
-get_DbQueueStat ../libdb_java/java_util.c /^jobject get_DbQueueStat(JNIEnv *jnienv, DB_QUEUE_S/
-get_DbTxn ../libdb_java/java_util.c /^jobject get_DbTxn(JNIEnv *jnienv, DB_TXN *dbobj)$/
-get_DbTxnStat ../libdb_java/java_util.c /^jobject get_DbTxnStat(JNIEnv *jnienv, DB_TXN_STAT /
-get_Dbc ../libdb_java/java_util.c /^jobject get_Dbc(JNIEnv *jnienv, DBC *dbobj)$/
-get_Dbt ../libdb_java/java_util.c /^jobject get_Dbt(JNIEnv *jnienv, DBT *dbt,$/
-get_Dbt_shared ../libdb_java/java_util.c /^static jobject get_Dbt_shared(JNIEnv *jnienv, cons/
-get_app_private ../cxx/cxx_table.cpp /^void *Db::get_app_private() const$/
-get_byteswapped ../cxx/cxx_table.cpp /^int Db::get_byteswapped() const$/
-get_c_string ../libdb_java/java_util.c /^char *get_c_string(JNIEnv *jnienv, jstring jstr)$/
-get_class ../libdb_java/java_util.c /^jclass get_class(JNIEnv *jnienv, const char *class/
-get_const_Dbt ../libdb_java/java_util.c /^jobject get_const_Dbt(JNIEnv *jnienv, const DBT *d/
-get_dbt ../cxx/cxx_except.cpp /^Dbt *DbMemoryException::get_dbt() const$/
-get_errno ../cxx/cxx_except.cpp /^int DbException::get_errno() const$/
-get_home ../rpc_server/db_server_util.c /^get_home(name)$/
-get_java_string ../libdb_java/java_util.c /^jstring get_java_string(JNIEnv *jnienv, const char/
-get_private_dbobj ../libdb_java/java_util.c /^void *get_private_dbobj(JNIEnv *jnienv, const char/
-get_private_info ../libdb_java/java_util.c /^void *get_private_info(JNIEnv *jnienv, const char /
-get_tableent ../rpc_server/db_server_util.c /^get_tableent(id)$/
-get_type ../cxx/cxx_table.cpp /^DBTYPE Db::get_type() const$/
+get_fullhome ../rpc_server/c/db_server_util.c /^get_fullhome(name)$/
+get_tableent ../rpc_server/c/db_server_util.c /^get_tableent(id)$/
getcwd ../clib/getcwd.c /^getcwd(pt, size)$/
getopt ../clib/getopt.c /^getopt(nargc, nargv, ostr)$/
-hcmds ../tcl/tcl_compat.c /^ enum hcmds {$/
-home_entry ../include/db_server_int.h /^typedef struct home_entry home_entry;$/
-id ../cxx/cxx_txn.cpp /^u_int32_t DbTxn::id()$/
-if ../cxx/cxx_app.cpp /^ if ((err = env->close(env, flags)) != 0) {$/
-imp ../include/db_cxx.h /^\/\/ DEFINE_DB_CLASS defines an imp_ data member a/
-imp_ ../cxx/cxx_mpool.cpp /^: imp_(0)$/
-indx_t ../include/db_185.in /^typedef u_int16_t indx_t;$/
-infop ../include/tcl_db.h /^ union infop {$/
-initialize ../cxx/cxx_app.cpp /^int DbEnv::initialize(DB_ENV *env)$/
-int ../db/db_upg.c /^static int (* const func_31_list[P_PAGETYPE_MAX])$/
-java_verify_callback ../libdb_java/java_Db.c /^static int java_verify_callback(void *handle, cons/
-jdbt_lock ../libdb_java/java_locked.c /^jdbt_lock(JDBT *jdbt, JNIEnv *jnienv, jobject obj,/
-jdbt_realloc ../libdb_java/java_locked.c /^int jdbt_realloc(JDBT *jdbt, JNIEnv *jnienv)$/
-jdbt_unlock ../libdb_java/java_locked.c /^jdbt_unlock(JDBT *jdbt, JNIEnv *jnienv)$/
-join ../cxx/cxx_table.cpp /^int Db::join(Dbc **curslist, Dbc **cursorp, u_int3/
-jstr_lock ../libdb_java/java_locked.c /^jstr_lock(JSTR *js, JNIEnv *jnienv, jstring jstr)$/
-jstr_unlock ../libdb_java/java_locked.c /^void jstr_unlock(JSTR *js, JNIEnv *jnienv)$/
-key_range ../cxx/cxx_table.cpp /^int Db::key_range(DbTxn *txnid, Dbt *key,$/
-ldopts ../tcl/tcl_lock.c /^ enum ldopts {$/
-lgopts ../tcl/tcl_lock.c /^ enum lgopts {$/
-lkcmds ../tcl/tcl_lock.c /^ enum lkcmds {$/
-lkmode ../tcl/tcl_lock.c /^enum lkmode {$/
-lkops ../tcl/tcl_lock.c /^ enum lkops {$/
-lock_ ../cxx/cxx_lock.cpp /^: lock_(value)$/
+h_hash_fcn_type ../dbinc/db_cxx.in 183
+hcreate ../dbinc/db.in /^#define hcreate(a) __db_hcreate@DB_VERSION_UNIQUE_/
+hdestroy ../dbinc/db.in 1973
+home_entry ../dbinc/db_server_int.h 40
+hsearch ../dbinc/db.in /^#define hsearch(a, b) __db_hsearch@DB_VERSION_UNIQ/
+i_anyp ../dbinc/tcl_db.h 123
+i_data ../dbinc/tcl_db.h 134
+i_data2 ../dbinc/tcl_db.h 137
+i_dbcp ../dbinc/tcl_db.h 127
+i_dbdbcid ../dbinc/tcl_db.h 148
+i_dbp ../dbinc/tcl_db.h 126
+i_envlockid ../dbinc/tcl_db.h 142
+i_envlogcid ../dbinc/tcl_db.h 144
+i_envmpid ../dbinc/tcl_db.h 141
+i_envmutexid ../dbinc/tcl_db.h 143
+i_envp ../dbinc/tcl_db.h 125
+i_envtxnid ../dbinc/tcl_db.h 140
+i_lock ../dbinc/tcl_db.h 130
+i_locker ../dbinc/tcl_db.h 136
+i_logc ../dbinc/tcl_db.h 132
+i_mp ../dbinc/tcl_db.h 129
+i_mppgid ../dbinc/tcl_db.h 146
+i_mutex ../dbinc/tcl_db.h 131
+i_pagep ../dbinc/tcl_db.h 124
+i_pgno ../dbinc/tcl_db.h 135
+i_pgsz ../dbinc/tcl_db.h 138
+i_txnp ../dbinc/tcl_db.h 128
+indx_t ../dbinc/db_185.in 82
+int_bool ../libdb_java/db_java_wrap.c 1254
+item ../hsearch/hsearch.c /^ ENTRY item;$/
lock_Cmd ../tcl/tcl_lock.c /^lock_Cmd(clientData, interp, objc, objv)$/
-lock_detect ../lock/lock_deadlock.c /^lock_detect(dbenv, flags, atype, abortp)$/
-lock_get ../lock/lock.c /^lock_get(dbenv, locker, flags, obj, lock_mode, loc/
-lock_id ../lock/lock.c /^lock_id(dbenv, idp)$/
-lock_put ../lock/lock.c /^lock_put(dbenv, lock)$/
-lock_stat ../lock/lock_stat.c /^lock_stat(dbenv, statp)$/
-lock_vec ../lock/lock.c /^lock_vec(dbenv, locker, flags, list, nlist, elistp/
-locker_info ../lock/lock_deadlock.c /^} locker_info;$/
-log_archive ../log/log_archive.c /^log_archive(dbenv, listp, flags)$/
log_compare ../log/log_compare.c /^log_compare(lsn0, lsn1)$/
-log_file ../log/log_put.c /^log_file(dbenv, lsn, namep, len)$/
-log_flush ../log/log_put.c /^log_flush(dbenv, lsn)$/
-log_get ../log/log_get.c /^log_get(dbenv, alsn, dbt, flags)$/
-log_put ../log/log_put.c /^log_put(dbenv, lsn, dbt, flags)$/
-log_register ../log/log_register.c /^log_register(dbenv, dbp, name)$/
-log_stat ../log/log.c /^log_stat(dbenv, statp)$/
-log_unregister ../log/log_register.c /^log_unregister(dbenv, dbp)$/
-logfile_validity ../include/log.h /^} logfile_validity;$/
-loggetopts ../tcl/tcl_log.c /^ enum loggetopts {$/
-logputopts ../tcl/tcl_log.c /^ enum logputopts {$/
-long_to_ptr ../libdb_java/java_util.h /^} long_to_ptr;$/
-lvopts ../tcl/tcl_lock.c /^ enum lvopts {$/
-m ../include/tcl_db.h /^#define m u.r.real_m$/
-map_file ../mutex/tm.c /^map_file(maddrp, fdp)$/
+logc_Cmd ../tcl/tcl_log.c /^logc_Cmd(clientData, interp, objc, objv)$/
+logfile_validity ../dbinc/log.h 288
+m ../dbinc/tcl_db.h 41
+map_file ../mutex/tm.c /^map_file(gm_addrp, tm_addrp, lm_addrp, fdp)$/
memcmp ../clib/memcmp.c /^memcmp(s1, s2, n)$/
-memp_fclose ../mp/mp_fopen.c /^memp_fclose(dbmfp)$/
-memp_fget ../mp/mp_fget.c /^memp_fget(dbmfp, pgnoaddr, flags, addrp)$/
-memp_fopen ../mp/mp_fopen.c /^memp_fopen(dbenv, path, flags, mode, pagesize, fin/
-memp_fput ../mp/mp_fput.c /^memp_fput(dbmfp, pgaddr, flags)$/
-memp_fset ../mp/mp_fset.c /^memp_fset(dbmfp, pgaddr, flags)$/
-memp_fsync ../mp/mp_sync.c /^memp_fsync(dbmfp)$/
-memp_register ../mp/mp_register.c /^memp_register(dbenv, ftype, pgin, pgout)$/
-memp_stat ../mp/mp_stat.c /^memp_stat(dbenv, gspp, fspp)$/
-memp_sync ../mp/mp_sync.c /^memp_sync(dbenv, lsnp)$/
-memp_trickle ../mp/mp_trickle.c /^memp_trickle(dbenv, pct, nwrotep)$/
+memcpy ../clib/memmove.c /^memcpy(dst0, src0, length)$/
mp_Cmd ../tcl/tcl_mp.c /^mp_Cmd(clientData, interp, objc, objv)$/
-mpcmds ../tcl/tcl_mp.c /^ enum mpcmds {$/
-mpget ../tcl/tcl_mp.c /^ enum mpget {$/
-mpopts ../tcl/tcl_mp.c /^ enum mpopts {$/
-mu_action ../db/db.c /^typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_/
-mutex_Cmd ../tcl/tcl_compat.c /^mutex_Cmd(clientData, interp, objc, objv)$/
-mutex_destroy ../mutex/tm.c /^mutex_destroy()$/
-mutex_init ../mutex/tm.c /^mutex_init()$/
-mutex_stats ../mutex/tm.c /^mutex_stats()$/
-mxcmds ../tcl/tcl_compat.c /^ enum mxcmds {$/
-ndbcmds ../tcl/tcl_compat.c /^ enum ndbcmds {$/
+mu_action ../dbinc/db_int.in 313
+mutex_Cmd ../tcl/tcl_util.c /^mutex_Cmd(clientData, interp, objc, objv)$/
ndbm_Cmd ../tcl/tcl_compat.c /^ndbm_Cmd(clientData, interp, objc, objv)$/
-ndbopen ../tcl/tcl_compat.c /^ enum ndbopen {$/
-new_ct_ent ../rpc_server/db_server_util.c /^new_ct_ent(errp)$/
-one_time_init ../libdb_java/java_util.c /^void one_time_init(JNIEnv *jnienv)$/
+new___db ../libdb_java/db_java_wrap.c /^struct __db *new___db(DB_ENV *dbenv,u_int32_t flag/
+new___db_env ../libdb_java/db_java_wrap.c /^struct __db_env *new___db_env(u_int32_t flags){$/
+new___db_lsn ../libdb_java/db_java_wrap.c /^struct __db_lsn *new___db_lsn(u_int32_t file,u_int/
+new_ct_ent ../rpc_server/c/db_server_util.c /^new_ct_ent(errp)$/
+nextkey ../dbinc/db.in /^#define nextkey(a) __db_dbm_nextkey@DB_VERSION_UNI/
onint ../common/util_sig.c /^onint(signo)$/
-open ../cxx/cxx_app.cpp /^int DbEnv::open(const char *db_home, u_int32_t fla/
pg_Cmd ../tcl/tcl_mp.c /^pg_Cmd(clientData, interp, objc, objv)$/
-pgcmds ../tcl/tcl_mp.c /^ enum pgcmds {$/
-pgcookie ../include/db_cxx.h /^ (DB_ENV *dbenv, db_pgno_t pgno, void *pgaddr, DB/
-pget ../cxx/cxx_table.cpp /^int Db::pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Db/
-pgno_t ../include/db_185.in /^#define pgno_t db_pgno_t$/
-pgopt ../tcl/tcl_mp.c /^ enum pgopt {$/
-prepare ../cxx/cxx_txn.cpp /^int DbTxn::prepare(u_int8_t *gid)$/
-pthread_cond_signal ../mutex/mut_pthread.c /^#define pthread_cond_signal _lwp_cond_signal$/
-pthread_cond_wait ../mutex/mut_pthread.c /^#define pthread_cond_wait _lwp_cond_wait$/
+pgin_fcn_type ../dbinc/db_cxx.in 185
+pgno_t ../dbinc/db_185.in 76
+pgout_fcn_type ../dbinc/db_cxx.in 187
+pthread_cond_signal ../mutex/mut_pthread.c 33
+pthread_cond_wait ../mutex/mut_pthread.c 34
pthread_mutex_destroy ../mutex/mut_pthread.c /^#define pthread_mutex_destroy(x) 0$/
-pthread_mutex_lock ../mutex/mut_pthread.c /^#define pthread_mutex_lock _lwp_mutex_lock$/
-pthread_mutex_trylock ../mutex/mut_pthread.c /^#define pthread_mutex_trylock _lwp_mutex_trylock$/
-pthread_mutex_unlock ../mutex/mut_pthread.c /^#define pthread_mutex_unlock _lwp_mutex_unlock$/
-pthread_self ../mutex/mut_pthread.c /^#define pthread_self _lwp_self$/
-put ../cxx/cxx_lock.cpp /^int DbLock::put(DbEnv *env)$/
-qam_position_mode ../include/qam.h /^} qam_position_mode;$/
-qam_probe_mode ../include/qam.h /^} qam_probe_mode;$/
+pthread_mutex_lock ../mutex/mut_pthread.c 35
+pthread_mutex_trylock ../mutex/mut_pthread.c 36
+pthread_mutex_unlock ../mutex/mut_pthread.c 37
+pthread_self ../mutex/mut_pthread.c 51
+qam_name_op ../dbinc/qam.h 166
+qam_position_mode ../dbinc/qam.h 151
+qam_probe_mode ../dbinc/qam.h 157
raise ../clib/raise.c /^raise(s)$/
-rcmds ../tcl/tcl_compat.c /^ enum rcmds {$/
-recno_t ../include/db_185.in /^typedef u_int32_t recno_t;$/
-reg_type ../include/region.h /^ REGION_TYPE_TXN } reg_type;$/
-remove ../cxx/cxx_app.cpp /^int DbEnv::remove(const char *db_home, u_int32_t f/
-rename ../cxx/cxx_table.cpp /^int Db::rename(const char *file, const char *datab/
-report_errcall ../libdb_java/java_util.c /^void report_errcall(JNIEnv *jnienv, jobject errcal/
-report_exception ../libdb_java/java_util.c /^void report_exception(JNIEnv *jnienv, const char */
-roff_t ../include/db_int.in /^typedef u_int32_t roff_t;$/
-run_one ../mutex/tm.c /^run_one()$/
-runtime_error ../cxx/cxx_app.cpp /^void DbEnv::runtime_error(const char *caller, int /
-runtime_error_dbt ../cxx/cxx_app.cpp /^void DbEnv::runtime_error_dbt(const char *caller, /
-set_alloc ../cxx/cxx_table.cpp /^int Db::set_alloc(db_malloc_fcn_type malloc_fcn,$/
-set_app_private ../cxx/cxx_table.cpp /^void Db::set_app_private(void *value)$/
-set_cachesize ../cxx/cxx_table.cpp /^int Db::set_cachesize(u_int32_t gbytes, u_int32_t /
-set_errcall ../cxx/cxx_table.cpp /^void Db::set_errcall(void (*arg)(const char *, cha/
-set_error_stream ../cxx/cxx_table.cpp /^void Db::set_error_stream(ostream *error_stream)$/
-set_int_field ../libdb_java/java_util.c /^void set_int_field(JNIEnv *jnienv, jclass class_of/
-set_long_field ../libdb_java/java_util.c /^void set_long_field(JNIEnv *jnienv, jclass class_o/
-set_lsn_field ../libdb_java/java_util.c /^void set_lsn_field(JNIEnv *jnienv, jclass class_of/
-set_object_field ../libdb_java/java_util.c /^void set_object_field(JNIEnv *jnienv, jclass class/
-set_paniccall ../cxx/cxx_table.cpp /^int Db::set_paniccall(void (*callback)(DbEnv *, in/
-set_private_dbobj ../libdb_java/java_util.c /^void set_private_dbobj(JNIEnv *jnienv, const char /
-set_private_info ../libdb_java/java_util.c /^void set_private_info(JNIEnv *jnienv, const char */
-size_t ../include/db_cxx.h /^ (size_t);$/
-snprintf ../clib/snprintf.c /^snprintf(str, n, fmt, va_alist)$/
-srchacts ../tcl/tcl_compat.c /^ enum srchacts {$/
-stat ../cxx/cxx_table.cpp /^int Db::stat(void *sp, u_int32_t flags)$/
-stflag ../tcl/tcl_compat.c /^ enum stflag {$/
+recno_t ../dbinc/db_185.in 84
+reg_type ../dbinc/region.h 117
+retval ../hsearch/hsearch.c /^static ENTRY retval;$/
+roff_t ../dbinc/db.in 91
+rol ../hmac/sha1.c /^#define rol(value, bits) (((value) << (bits)) | ((/
+run_locker ../mutex/tm.c /^run_locker(id)$/
+run_lthread ../mutex/tm.c /^run_lthread(arg)$/
+run_wakeup ../mutex/tm.c /^run_wakeup(id)$/
+run_wthread ../mutex/tm.c /^run_wthread(arg)$/
+shm_open ../mutex/tm.c 25
+shm_unlink ../mutex/tm.c 26
+snprintf ../clib/snprintf.c /^snprintf(char *str, size_t n, const char *fmt, .../
+store ../dbinc/db.in /^#define store(a, b) __db_dbm_store@DB_VERSION_UNIQ/
strcasecmp ../clib/strcasecmp.c /^strcasecmp(s1, s2)$/
+strdup ../clib/strdup.c /^strdup(str)$/
strerror ../clib/strerror.c /^strerror(num)$/
-sync ../cxx/cxx_table.cpp /^int Db::sync(u_int32_t flags)$/
-sys_errlist ../libdb_java/java_util.c /^#define sys_errlist _sys_errlist$/
-sys_nerr ../libdb_java/java_util.c /^#define sys_nerr _sys_nerr$/
+strncasecmp ../clib/strcasecmp.c /^strncasecmp(s1, s2, n)$/
tcl_DbAssociate ../tcl/tcl_db.c /^tcl_DbAssociate(interp, objc, objv, dbp)$/
tcl_DbClose ../tcl/tcl_db.c /^tcl_DbClose(interp, objc, objv, dbp, dbip)$/
tcl_DbCount ../tcl/tcl_db.c /^tcl_DbCount(interp, objc, objv, dbp)$/
tcl_DbCursor ../tcl/tcl_db.c /^tcl_DbCursor(interp, objc, objv, dbp, dbcp)$/
tcl_DbDelete ../tcl/tcl_db.c /^tcl_DbDelete(interp, objc, objv, dbp)$/
tcl_DbGet ../tcl/tcl_db.c /^tcl_DbGet(interp, objc, objv, dbp, ispget)$/
+tcl_DbGetFlags ../tcl/tcl_db.c /^tcl_DbGetFlags(interp, objc, objv, dbp)$/
+tcl_DbGetOpenFlags ../tcl/tcl_db.c /^tcl_DbGetOpenFlags(interp, objc, objv, dbp)$/
tcl_DbGetjoin ../tcl/tcl_db.c /^tcl_DbGetjoin(interp, objc, objv, dbp)$/
tcl_DbJoin ../tcl/tcl_db.c /^tcl_DbJoin(interp, objc, objv, dbp, dbcp)$/
tcl_DbKeyRange ../tcl/tcl_db.c /^tcl_DbKeyRange(interp, objc, objv, dbp)$/
tcl_DbPut ../tcl/tcl_db.c /^tcl_DbPut(interp, objc, objv, dbp)$/
tcl_DbStat ../tcl/tcl_db.c /^tcl_DbStat(interp, objc, objv, dbp)$/
+tcl_DbTruncate ../tcl/tcl_db.c /^tcl_DbTruncate(interp, objc, objv, dbp)$/
tcl_DbcDup ../tcl/tcl_dbcursor.c /^tcl_DbcDup(interp, objc, objv, dbc)$/
tcl_DbcGet ../tcl/tcl_dbcursor.c /^tcl_DbcGet(interp, objc, objv, dbc, ispget)$/
tcl_DbcPut ../tcl/tcl_dbcursor.c /^tcl_DbcPut(interp, objc, objv, dbc)$/
-tcl_EnvRemove ../tcl/tcl_env.c /^tcl_EnvRemove(interp, objc, objv, envp, envip)$/
-tcl_EnvTest ../tcl/tcl_env.c /^tcl_EnvTest(interp, objc, objv, envp)$/
-tcl_EnvVerbose ../tcl/tcl_env.c /^tcl_EnvVerbose(interp, envp, which, onoff)$/
+tcl_EnvAttr ../tcl/tcl_env.c /^tcl_EnvAttr(interp, objc, objv, dbenv)$/
+tcl_EnvGetEncryptFlags ../tcl/tcl_env.c /^tcl_EnvGetEncryptFlags(interp, objc, objv, dbenv)$/
+tcl_EnvRemove ../tcl/tcl_env.c /^tcl_EnvRemove(interp, objc, objv, dbenv, envip)$/
+tcl_EnvSetFlags ../tcl/tcl_env.c /^tcl_EnvSetFlags(interp, dbenv, which, onoff)$/
+tcl_EnvTest ../tcl/tcl_env.c /^tcl_EnvTest(interp, objc, objv, dbenv)$/
+tcl_EnvVerbose ../tcl/tcl_env.c /^tcl_EnvVerbose(interp, dbenv, which, onoff)$/
tcl_LockDetect ../tcl/tcl_lock.c /^tcl_LockDetect(interp, objc, objv, envp)$/
tcl_LockGet ../tcl/tcl_lock.c /^tcl_LockGet(interp, objc, objv, envp)$/
tcl_LockStat ../tcl/tcl_lock.c /^tcl_LockStat(interp, objc, objv, envp)$/
+tcl_LockTimeout ../tcl/tcl_lock.c /^tcl_LockTimeout(interp, objc, objv, envp)$/
tcl_LockVec ../tcl/tcl_lock.c /^tcl_LockVec(interp, objc, objv, envp)$/
tcl_LogArchive ../tcl/tcl_log.c /^tcl_LogArchive(interp, objc, objv, envp)$/
tcl_LogCompare ../tcl/tcl_log.c /^tcl_LogCompare(interp, objc, objv)$/
@@ -2909,153 +3980,192 @@ tcl_LogFile ../tcl/tcl_log.c /^tcl_LogFile(interp, objc, objv, envp)$/
tcl_LogFlush ../tcl/tcl_log.c /^tcl_LogFlush(interp, objc, objv, envp)$/
tcl_LogGet ../tcl/tcl_log.c /^tcl_LogGet(interp, objc, objv, envp)$/
tcl_LogPut ../tcl/tcl_log.c /^tcl_LogPut(interp, objc, objv, envp)$/
-tcl_LogRegister ../tcl/tcl_log.c /^tcl_LogRegister(interp, objc, objv, envp)$/
tcl_LogStat ../tcl/tcl_log.c /^tcl_LogStat(interp, objc, objv, envp)$/
-tcl_LogUnregister ../tcl/tcl_log.c /^tcl_LogUnregister(interp, objc, objv, envp)$/
+tcl_LogcGet ../tcl/tcl_log.c /^tcl_LogcGet(interp, objc, objv, logc)$/
tcl_Mp ../tcl/tcl_mp.c /^tcl_Mp(interp, objc, objv, envp, envip)$/
tcl_MpGet ../tcl/tcl_mp.c /^tcl_MpGet(interp, objc, objv, mp, mpip)$/
tcl_MpStat ../tcl/tcl_mp.c /^tcl_MpStat(interp, objc, objv, envp)$/
tcl_MpSync ../tcl/tcl_mp.c /^tcl_MpSync(interp, objc, objv, envp)$/
tcl_MpTrickle ../tcl/tcl_mp.c /^tcl_MpTrickle(interp, objc, objv, envp)$/
-tcl_Mutex ../tcl/tcl_compat.c /^tcl_Mutex(interp, objc, objv, envp, envip)$/
+tcl_Mutex ../tcl/tcl_util.c /^tcl_Mutex(interp, objc, objv, envp, envip)$/
tcl_Pg ../tcl/tcl_mp.c /^tcl_Pg(interp, objc, objv, page, mp, pgip, putop)$/
tcl_PgInit ../tcl/tcl_mp.c /^tcl_PgInit(interp, objc, objv, page, pgip)$/
tcl_PgIsset ../tcl/tcl_mp.c /^tcl_PgIsset(interp, objc, objv, page, pgip)$/
+tcl_RepElect ../tcl/tcl_rep.c /^tcl_RepElect(interp, objc, objv, dbenv)$/
+tcl_RepFlush ../tcl/tcl_rep.c /^tcl_RepFlush(interp, objc, objv, dbenv)$/
+tcl_RepLimit ../tcl/tcl_rep.c /^tcl_RepLimit(interp, objc, objv, dbenv)$/
+tcl_RepProcessMessage ../tcl/tcl_rep.c /^tcl_RepProcessMessage(interp, objc, objv, dbenv)$/
+tcl_RepRequest ../tcl/tcl_rep.c /^tcl_RepRequest(interp, objc, objv, dbenv)$/
+tcl_RepStart ../tcl/tcl_rep.c /^tcl_RepStart(interp, objc, objv, dbenv)$/
+tcl_RepStat ../tcl/tcl_rep.c /^tcl_RepStat(interp, objc, objv, dbenv)$/
tcl_Txn ../tcl/tcl_txn.c /^tcl_Txn(interp, objc, objv, envp, envip)$/
tcl_TxnCheckpoint ../tcl/tcl_txn.c /^tcl_TxnCheckpoint(interp, objc, objv, envp)$/
tcl_TxnCommit ../tcl/tcl_txn.c /^tcl_TxnCommit(interp, objc, objv, txnp, txnip)$/
tcl_TxnRecover ../tcl/tcl_txn.c /^tcl_TxnRecover(interp, objc, objv, envp, envip)$/
tcl_TxnStat ../tcl/tcl_txn.c /^tcl_TxnStat(interp, objc, objv, envp)$/
+tcl_TxnTimeout ../tcl/tcl_txn.c /^tcl_TxnTimeout(interp, objc, objv, envp)$/
tcl_bt_compare ../tcl/tcl_db_pkg.c /^tcl_bt_compare(dbp, dbta, dbtb)$/
tcl_compare_callback ../tcl/tcl_db_pkg.c /^tcl_compare_callback(dbp, dbta, dbtb, procobj, err/
+tcl_db_free ../tcl/tcl_db_pkg.c /^tcl_db_free(ptr)$/
+tcl_db_malloc ../tcl/tcl_db_pkg.c /^tcl_db_malloc(size)$/
+tcl_db_realloc ../tcl/tcl_db_pkg.c /^tcl_db_realloc(ptr, size)$/
tcl_dup_compare ../tcl/tcl_db_pkg.c /^tcl_dup_compare(dbp, dbta, dbtb)$/
+tcl_flag_callback ../tcl/tcl_internal.c /^tcl_flag_callback(flags, fn, vtcbp)$/
tcl_h_hash ../tcl/tcl_db_pkg.c /^tcl_h_hash(dbp, buf, len)$/
+tcl_rep_send ../tcl/tcl_db_pkg.c /^tcl_rep_send(dbenv, control, rec, lsnp, eid, flags/
tcl_second_call ../tcl/tcl_db.c /^tcl_second_call(dbp, pkey, data, skey)$/
-truncate ../cxx/cxx_table.cpp /^int Db::truncate(const char *file, const char *dat/
-tsl_t ../include/mutex.h /^typedef int tsl_t;$/
+tm_file_init ../mutex/tm.c /^tm_file_init()$/
+tm_mutex_destroy ../mutex/tm.c /^tm_mutex_destroy()$/
+tm_mutex_init ../mutex/tm.c /^tm_mutex_init()$/
+tm_mutex_stats ../mutex/tm.c /^tm_mutex_stats()$/
+tmpString::tmpString ../cxx/cxx_except.cpp /^tmpString::tmpString(const char *str1,$/
+tsl_t ../dbinc/mutex.h 79
txn_Cmd ../tcl/tcl_txn.c /^txn_Cmd(clientData, interp, objc, objv)$/
-txn_abort ../txn/txn.c /^txn_abort(txnp)$/
-txn_begin ../txn/txn.c /^txn_begin(dbenv, parent, txnpp, flags)$/
-txn_checkpoint ../txn/txn.c /^txn_checkpoint(dbenv, kbytes, minutes, flags)$/
-txn_commit ../txn/txn.c /^txn_commit(txnp, flags)$/
-txn_discard ../txn/txn.c /^txn_discard(txnp, flags)$/
-txn_id ../txn/txn.c /^txn_id(txnp)$/
-txn_prepare ../txn/txn.c /^txn_prepare(txnp, gid)$/
-txn_recover ../txn/txn_recover.c /^txn_recover(dbenv, preplist, count, retp, flags)$/
-txn_stat ../txn/txn_stat.c /^txn_stat(dbenv, statp)$/
-txnckpopts ../tcl/tcl_txn.c /^ enum txnckpopts {$/
-txncmds ../tcl/tcl_txn.c /^ enum txncmds {$/
-txnop_t ../txn/txn.c /^} txnop_t;$/
-txnopts ../tcl/tcl_txn.c /^ enum txnopts {$/
-u_int32_t ../include/db_cxx.h /^ (DB *, const void *, u_int32_t);$/
-unmap_file ../mutex/tm.c /^unmap_file(maddr, fd)$/
-unwrap ../include/cxx_int.h /^\/\/ back and forth using the various overloaded w/
-upgrade ../cxx/cxx_table.cpp /^int Db::upgrade(const char *name, u_int32_t flags)/
-usage ../rpc_server/db_server_util.c /^usage(prog)$/
-val ../include/tcl_db.h /^#define val u.r.real_val$/
-verbonoff ../tcl/tcl_env.c /^ enum verbonoff {$/
-verbwhich ../tcl/tcl_env.c /^ enum verbwhich {$/
-verify_callback_struct ../libdb_java/java_Db.c /^struct verify_callback_struct {$/
-verify_dbt ../libdb_java/java_util.c /^int verify_dbt(JNIEnv *jnienv, int err, JDBT *jdbt/
-verify_non_null ../libdb_java/java_util.c /^int verify_non_null(JNIEnv *jnienv, void *obj)$/
-verify_return ../libdb_java/java_util.c /^int verify_return(JNIEnv *jnienv, int err, unsigne/
-version_check ../rpc_server/db_server_util.c /^version_check()$/
-void ../include/db_cxx.h /^ (void *);$/
+txnop_t ../txn/txn.c 98
+u16 ../crypto/rijndael/rijndael-alg-fst.h 37
+u32 ../crypto/rijndael/rijndael-alg-fst.h 38
+u8 ../crypto/rijndael/rijndael-alg-fst.h 36
+unmap_file ../mutex/tm.c /^unmap_file(addr, fd)$/
+usage ../mutex/tm.c /^usage()$/
+val ../dbinc/tcl_db.h 42
+version_check ../rpc_server/c/db_server_util.c /^version_check()$/
vsnprintf ../clib/vsnprintf.c /^vsnprintf(str, n, fmt, ap)$/
-what ../cxx/cxx_except.cpp /^const char *DbException::what() const$/
-wmask ../clib/memmove.c /^#define wmask (wsize - 1)$/
-word ../clib/memmove.c /^typedef int word; \/* "word" used for optimal cop/
-wrdebug ../libdb_java/java_util.h /^static void wrdebug(const char *str)$/
-wsize ../clib/memmove.c /^#define wsize sizeof(word)$/
-xa_switch_t ../include/xa.h /^struct xa_switch_t {$/
-xdr___db_associate_msg ../rpc_server/db_server_xdr.c /^xdr___db_associate_msg(xdrs, objp)$/
-xdr___db_associate_reply ../rpc_server/db_server_xdr.c /^xdr___db_associate_reply(xdrs, objp)$/
-xdr___db_bt_maxkey_msg ../rpc_server/db_server_xdr.c /^xdr___db_bt_maxkey_msg(xdrs, objp)$/
-xdr___db_bt_maxkey_reply ../rpc_server/db_server_xdr.c /^xdr___db_bt_maxkey_reply(xdrs, objp)$/
-xdr___db_bt_minkey_msg ../rpc_server/db_server_xdr.c /^xdr___db_bt_minkey_msg(xdrs, objp)$/
-xdr___db_bt_minkey_reply ../rpc_server/db_server_xdr.c /^xdr___db_bt_minkey_reply(xdrs, objp)$/
-xdr___db_close_msg ../rpc_server/db_server_xdr.c /^xdr___db_close_msg(xdrs, objp)$/
-xdr___db_close_reply ../rpc_server/db_server_xdr.c /^xdr___db_close_reply(xdrs, objp)$/
-xdr___db_create_msg ../rpc_server/db_server_xdr.c /^xdr___db_create_msg(xdrs, objp)$/
-xdr___db_create_reply ../rpc_server/db_server_xdr.c /^xdr___db_create_reply(xdrs, objp)$/
-xdr___db_cursor_msg ../rpc_server/db_server_xdr.c /^xdr___db_cursor_msg(xdrs, objp)$/
-xdr___db_cursor_reply ../rpc_server/db_server_xdr.c /^xdr___db_cursor_reply(xdrs, objp)$/
-xdr___db_del_msg ../rpc_server/db_server_xdr.c /^xdr___db_del_msg(xdrs, objp)$/
-xdr___db_del_reply ../rpc_server/db_server_xdr.c /^xdr___db_del_reply(xdrs, objp)$/
-xdr___db_extentsize_msg ../rpc_server/db_server_xdr.c /^xdr___db_extentsize_msg(xdrs, objp)$/
-xdr___db_extentsize_reply ../rpc_server/db_server_xdr.c /^xdr___db_extentsize_reply(xdrs, objp)$/
-xdr___db_flags_msg ../rpc_server/db_server_xdr.c /^xdr___db_flags_msg(xdrs, objp)$/
-xdr___db_flags_reply ../rpc_server/db_server_xdr.c /^xdr___db_flags_reply(xdrs, objp)$/
-xdr___db_get_msg ../rpc_server/db_server_xdr.c /^xdr___db_get_msg(xdrs, objp)$/
-xdr___db_get_reply ../rpc_server/db_server_xdr.c /^xdr___db_get_reply(xdrs, objp)$/
-xdr___db_h_ffactor_msg ../rpc_server/db_server_xdr.c /^xdr___db_h_ffactor_msg(xdrs, objp)$/
-xdr___db_h_ffactor_reply ../rpc_server/db_server_xdr.c /^xdr___db_h_ffactor_reply(xdrs, objp)$/
-xdr___db_h_nelem_msg ../rpc_server/db_server_xdr.c /^xdr___db_h_nelem_msg(xdrs, objp)$/
-xdr___db_h_nelem_reply ../rpc_server/db_server_xdr.c /^xdr___db_h_nelem_reply(xdrs, objp)$/
-xdr___db_join_msg ../rpc_server/db_server_xdr.c /^xdr___db_join_msg(xdrs, objp)$/
-xdr___db_join_reply ../rpc_server/db_server_xdr.c /^xdr___db_join_reply(xdrs, objp)$/
-xdr___db_key_range_msg ../rpc_server/db_server_xdr.c /^xdr___db_key_range_msg(xdrs, objp)$/
-xdr___db_key_range_reply ../rpc_server/db_server_xdr.c /^xdr___db_key_range_reply(xdrs, objp)$/
-xdr___db_lorder_msg ../rpc_server/db_server_xdr.c /^xdr___db_lorder_msg(xdrs, objp)$/
-xdr___db_lorder_reply ../rpc_server/db_server_xdr.c /^xdr___db_lorder_reply(xdrs, objp)$/
-xdr___db_open_msg ../rpc_server/db_server_xdr.c /^xdr___db_open_msg(xdrs, objp)$/
-xdr___db_open_reply ../rpc_server/db_server_xdr.c /^xdr___db_open_reply(xdrs, objp)$/
-xdr___db_pagesize_msg ../rpc_server/db_server_xdr.c /^xdr___db_pagesize_msg(xdrs, objp)$/
-xdr___db_pagesize_reply ../rpc_server/db_server_xdr.c /^xdr___db_pagesize_reply(xdrs, objp)$/
-xdr___db_pget_msg ../rpc_server/db_server_xdr.c /^xdr___db_pget_msg(xdrs, objp)$/
-xdr___db_pget_reply ../rpc_server/db_server_xdr.c /^xdr___db_pget_reply(xdrs, objp)$/
-xdr___db_put_msg ../rpc_server/db_server_xdr.c /^xdr___db_put_msg(xdrs, objp)$/
-xdr___db_put_reply ../rpc_server/db_server_xdr.c /^xdr___db_put_reply(xdrs, objp)$/
-xdr___db_re_delim_msg ../rpc_server/db_server_xdr.c /^xdr___db_re_delim_msg(xdrs, objp)$/
-xdr___db_re_delim_reply ../rpc_server/db_server_xdr.c /^xdr___db_re_delim_reply(xdrs, objp)$/
-xdr___db_re_len_msg ../rpc_server/db_server_xdr.c /^xdr___db_re_len_msg(xdrs, objp)$/
-xdr___db_re_len_reply ../rpc_server/db_server_xdr.c /^xdr___db_re_len_reply(xdrs, objp)$/
-xdr___db_re_pad_msg ../rpc_server/db_server_xdr.c /^xdr___db_re_pad_msg(xdrs, objp)$/
-xdr___db_re_pad_reply ../rpc_server/db_server_xdr.c /^xdr___db_re_pad_reply(xdrs, objp)$/
-xdr___db_remove_msg ../rpc_server/db_server_xdr.c /^xdr___db_remove_msg(xdrs, objp)$/
-xdr___db_remove_reply ../rpc_server/db_server_xdr.c /^xdr___db_remove_reply(xdrs, objp)$/
-xdr___db_rename_msg ../rpc_server/db_server_xdr.c /^xdr___db_rename_msg(xdrs, objp)$/
-xdr___db_rename_reply ../rpc_server/db_server_xdr.c /^xdr___db_rename_reply(xdrs, objp)$/
-xdr___db_stat_msg ../rpc_server/db_server_xdr.c /^xdr___db_stat_msg(xdrs, objp)$/
-xdr___db_stat_reply ../rpc_server/db_server_xdr.c /^xdr___db_stat_reply(xdrs, objp)$/
-xdr___db_sync_msg ../rpc_server/db_server_xdr.c /^xdr___db_sync_msg(xdrs, objp)$/
-xdr___db_sync_reply ../rpc_server/db_server_xdr.c /^xdr___db_sync_reply(xdrs, objp)$/
-xdr___db_truncate_msg ../rpc_server/db_server_xdr.c /^xdr___db_truncate_msg(xdrs, objp)$/
-xdr___db_truncate_reply ../rpc_server/db_server_xdr.c /^xdr___db_truncate_reply(xdrs, objp)$/
-xdr___dbc_close_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_close_msg(xdrs, objp)$/
-xdr___dbc_close_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_close_reply(xdrs, objp)$/
-xdr___dbc_count_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_count_msg(xdrs, objp)$/
-xdr___dbc_count_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_count_reply(xdrs, objp)$/
-xdr___dbc_del_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_del_msg(xdrs, objp)$/
-xdr___dbc_del_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_del_reply(xdrs, objp)$/
-xdr___dbc_dup_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_dup_msg(xdrs, objp)$/
-xdr___dbc_dup_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_dup_reply(xdrs, objp)$/
-xdr___dbc_get_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_get_msg(xdrs, objp)$/
-xdr___dbc_get_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_get_reply(xdrs, objp)$/
-xdr___dbc_pget_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_pget_msg(xdrs, objp)$/
-xdr___dbc_pget_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_pget_reply(xdrs, objp)$/
-xdr___dbc_put_msg ../rpc_server/db_server_xdr.c /^xdr___dbc_put_msg(xdrs, objp)$/
-xdr___dbc_put_reply ../rpc_server/db_server_xdr.c /^xdr___dbc_put_reply(xdrs, objp)$/
-xdr___env_cachesize_msg ../rpc_server/db_server_xdr.c /^xdr___env_cachesize_msg(xdrs, objp)$/
-xdr___env_cachesize_reply ../rpc_server/db_server_xdr.c /^xdr___env_cachesize_reply(xdrs, objp)$/
-xdr___env_close_msg ../rpc_server/db_server_xdr.c /^xdr___env_close_msg(xdrs, objp)$/
-xdr___env_close_reply ../rpc_server/db_server_xdr.c /^xdr___env_close_reply(xdrs, objp)$/
-xdr___env_create_msg ../rpc_server/db_server_xdr.c /^xdr___env_create_msg(xdrs, objp)$/
-xdr___env_create_reply ../rpc_server/db_server_xdr.c /^xdr___env_create_reply(xdrs, objp)$/
-xdr___env_flags_msg ../rpc_server/db_server_xdr.c /^xdr___env_flags_msg(xdrs, objp)$/
-xdr___env_flags_reply ../rpc_server/db_server_xdr.c /^xdr___env_flags_reply(xdrs, objp)$/
-xdr___env_open_msg ../rpc_server/db_server_xdr.c /^xdr___env_open_msg(xdrs, objp)$/
-xdr___env_open_reply ../rpc_server/db_server_xdr.c /^xdr___env_open_reply(xdrs, objp)$/
-xdr___env_remove_msg ../rpc_server/db_server_xdr.c /^xdr___env_remove_msg(xdrs, objp)$/
-xdr___env_remove_reply ../rpc_server/db_server_xdr.c /^xdr___env_remove_reply(xdrs, objp)$/
-xdr___txn_abort_msg ../rpc_server/db_server_xdr.c /^xdr___txn_abort_msg(xdrs, objp)$/
-xdr___txn_abort_reply ../rpc_server/db_server_xdr.c /^xdr___txn_abort_reply(xdrs, objp)$/
-xdr___txn_begin_msg ../rpc_server/db_server_xdr.c /^xdr___txn_begin_msg(xdrs, objp)$/
-xdr___txn_begin_reply ../rpc_server/db_server_xdr.c /^xdr___txn_begin_reply(xdrs, objp)$/
-xdr___txn_commit_msg ../rpc_server/db_server_xdr.c /^xdr___txn_commit_msg(xdrs, objp)$/
-xdr___txn_commit_reply ../rpc_server/db_server_xdr.c /^xdr___txn_commit_reply(xdrs, objp)$/
-xdr___txn_prepare_msg ../rpc_server/db_server_xdr.c /^xdr___txn_prepare_msg(xdrs, objp)$/
-xdr___txn_prepare_reply ../rpc_server/db_server_xdr.c /^xdr___txn_prepare_reply(xdrs, objp)$/
-xdr___txn_recover_msg ../rpc_server/db_server_xdr.c /^xdr___txn_recover_msg(xdrs, objp)$/
-xdr___txn_recover_reply ../rpc_server/db_server_xdr.c /^xdr___txn_recover_reply(xdrs, objp)$/
-xid_t ../include/xa.h /^struct xid_t {$/
+wmask ../clib/memmove.c 55
+word ../clib/memmove.c 50
+wsize ../clib/memmove.c 53
+xdr___db_associate_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_associate_msg(xdrs, objp)$/
+xdr___db_associate_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_associate_reply(xdrs, objp)$/
+xdr___db_bt_maxkey_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_bt_maxkey_msg(xdrs, objp)$/
+xdr___db_bt_maxkey_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_bt_maxkey_reply(xdrs, objp)$/
+xdr___db_bt_minkey_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_bt_minkey_msg(xdrs, objp)$/
+xdr___db_bt_minkey_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_bt_minkey_reply(xdrs, objp)$/
+xdr___db_close_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_close_msg(xdrs, objp)$/
+xdr___db_close_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_close_reply(xdrs, objp)$/
+xdr___db_create_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_create_msg(xdrs, objp)$/
+xdr___db_create_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_create_reply(xdrs, objp)$/
+xdr___db_cursor_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_cursor_msg(xdrs, objp)$/
+xdr___db_cursor_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_cursor_reply(xdrs, objp)$/
+xdr___db_del_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_del_msg(xdrs, objp)$/
+xdr___db_del_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_del_reply(xdrs, objp)$/
+xdr___db_encrypt_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_encrypt_msg(xdrs, objp)$/
+xdr___db_encrypt_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_encrypt_reply(xdrs, objp)$/
+xdr___db_extentsize_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_extentsize_msg(xdrs, objp)$/
+xdr___db_extentsize_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_extentsize_reply(xdrs, objp)$/
+xdr___db_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_flags_msg(xdrs, objp)$/
+xdr___db_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_flags_reply(xdrs, objp)$/
+xdr___db_get_bt_minkey_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_bt_minkey_msg(xdrs, objp)$/
+xdr___db_get_bt_minkey_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_bt_minkey_reply(xdrs, objp)$/
+xdr___db_get_encrypt_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_encrypt_flags_msg(xdrs, objp)$/
+xdr___db_get_encrypt_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_encrypt_flags_reply(xdrs, objp)$/
+xdr___db_get_extentsize_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_extentsize_msg(xdrs, objp)$/
+xdr___db_get_extentsize_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_extentsize_reply(xdrs, objp)$/
+xdr___db_get_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_flags_msg(xdrs, objp)$/
+xdr___db_get_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_flags_reply(xdrs, objp)$/
+xdr___db_get_h_ffactor_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_h_ffactor_msg(xdrs, objp)$/
+xdr___db_get_h_ffactor_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_h_ffactor_reply(xdrs, objp)$/
+xdr___db_get_h_nelem_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_h_nelem_msg(xdrs, objp)$/
+xdr___db_get_h_nelem_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_h_nelem_reply(xdrs, objp)$/
+xdr___db_get_lorder_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_lorder_msg(xdrs, objp)$/
+xdr___db_get_lorder_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_lorder_reply(xdrs, objp)$/
+xdr___db_get_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_msg(xdrs, objp)$/
+xdr___db_get_name_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_name_msg(xdrs, objp)$/
+xdr___db_get_name_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_name_reply(xdrs, objp)$/
+xdr___db_get_open_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_open_flags_msg(xdrs, objp)$/
+xdr___db_get_open_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_open_flags_reply(xdrs, objp)$/
+xdr___db_get_pagesize_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_pagesize_msg(xdrs, objp)$/
+xdr___db_get_pagesize_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_pagesize_reply(xdrs, objp)$/
+xdr___db_get_re_delim_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_delim_msg(xdrs, objp)$/
+xdr___db_get_re_delim_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_delim_reply(xdrs, objp)$/
+xdr___db_get_re_len_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_len_msg(xdrs, objp)$/
+xdr___db_get_re_len_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_len_reply(xdrs, objp)$/
+xdr___db_get_re_pad_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_pad_msg(xdrs, objp)$/
+xdr___db_get_re_pad_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_re_pad_reply(xdrs, objp)$/
+xdr___db_get_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_get_reply(xdrs, objp)$/
+xdr___db_h_ffactor_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_h_ffactor_msg(xdrs, objp)$/
+xdr___db_h_ffactor_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_h_ffactor_reply(xdrs, objp)$/
+xdr___db_h_nelem_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_h_nelem_msg(xdrs, objp)$/
+xdr___db_h_nelem_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_h_nelem_reply(xdrs, objp)$/
+xdr___db_join_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_join_msg(xdrs, objp)$/
+xdr___db_join_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_join_reply(xdrs, objp)$/
+xdr___db_key_range_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_key_range_msg(xdrs, objp)$/
+xdr___db_key_range_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_key_range_reply(xdrs, objp)$/
+xdr___db_lorder_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_lorder_msg(xdrs, objp)$/
+xdr___db_lorder_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_lorder_reply(xdrs, objp)$/
+xdr___db_open_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_open_msg(xdrs, objp)$/
+xdr___db_open_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_open_reply(xdrs, objp)$/
+xdr___db_pagesize_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_pagesize_msg(xdrs, objp)$/
+xdr___db_pagesize_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_pagesize_reply(xdrs, objp)$/
+xdr___db_pget_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_pget_msg(xdrs, objp)$/
+xdr___db_pget_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_pget_reply(xdrs, objp)$/
+xdr___db_put_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_put_msg(xdrs, objp)$/
+xdr___db_put_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_put_reply(xdrs, objp)$/
+xdr___db_re_delim_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_re_delim_msg(xdrs, objp)$/
+xdr___db_re_delim_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_re_delim_reply(xdrs, objp)$/
+xdr___db_re_len_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_re_len_msg(xdrs, objp)$/
+xdr___db_re_len_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_re_len_reply(xdrs, objp)$/
+xdr___db_re_pad_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_re_pad_msg(xdrs, objp)$/
+xdr___db_re_pad_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_re_pad_reply(xdrs, objp)$/
+xdr___db_remove_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_remove_msg(xdrs, objp)$/
+xdr___db_remove_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_remove_reply(xdrs, objp)$/
+xdr___db_rename_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_rename_msg(xdrs, objp)$/
+xdr___db_rename_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_rename_reply(xdrs, objp)$/
+xdr___db_stat_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_stat_msg(xdrs, objp)$/
+xdr___db_stat_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_stat_reply(xdrs, objp)$/
+xdr___db_sync_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_sync_msg(xdrs, objp)$/
+xdr___db_sync_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_sync_reply(xdrs, objp)$/
+xdr___db_truncate_msg ../rpc_server/c/db_server_xdr.c /^xdr___db_truncate_msg(xdrs, objp)$/
+xdr___db_truncate_reply ../rpc_server/c/db_server_xdr.c /^xdr___db_truncate_reply(xdrs, objp)$/
+xdr___dbc_close_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_close_msg(xdrs, objp)$/
+xdr___dbc_close_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_close_reply(xdrs, objp)$/
+xdr___dbc_count_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_count_msg(xdrs, objp)$/
+xdr___dbc_count_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_count_reply(xdrs, objp)$/
+xdr___dbc_del_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_del_msg(xdrs, objp)$/
+xdr___dbc_del_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_del_reply(xdrs, objp)$/
+xdr___dbc_dup_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_dup_msg(xdrs, objp)$/
+xdr___dbc_dup_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_dup_reply(xdrs, objp)$/
+xdr___dbc_get_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_get_msg(xdrs, objp)$/
+xdr___dbc_get_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_get_reply(xdrs, objp)$/
+xdr___dbc_pget_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_pget_msg(xdrs, objp)$/
+xdr___dbc_pget_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_pget_reply(xdrs, objp)$/
+xdr___dbc_put_msg ../rpc_server/c/db_server_xdr.c /^xdr___dbc_put_msg(xdrs, objp)$/
+xdr___dbc_put_reply ../rpc_server/c/db_server_xdr.c /^xdr___dbc_put_reply(xdrs, objp)$/
+xdr___env_cachesize_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_cachesize_msg(xdrs, objp)$/
+xdr___env_cachesize_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_cachesize_reply(xdrs, objp)$/
+xdr___env_close_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_close_msg(xdrs, objp)$/
+xdr___env_close_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_close_reply(xdrs, objp)$/
+xdr___env_create_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_create_msg(xdrs, objp)$/
+xdr___env_create_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_create_reply(xdrs, objp)$/
+xdr___env_dbremove_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_dbremove_msg(xdrs, objp)$/
+xdr___env_dbremove_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_dbremove_reply(xdrs, objp)$/
+xdr___env_dbrename_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_dbrename_msg(xdrs, objp)$/
+xdr___env_dbrename_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_dbrename_reply(xdrs, objp)$/
+xdr___env_encrypt_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_encrypt_msg(xdrs, objp)$/
+xdr___env_encrypt_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_encrypt_reply(xdrs, objp)$/
+xdr___env_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_flags_msg(xdrs, objp)$/
+xdr___env_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_flags_reply(xdrs, objp)$/
+xdr___env_get_cachesize_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_get_cachesize_msg(xdrs, objp)$/
+xdr___env_get_cachesize_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_get_cachesize_reply(xdrs, objp)$/
+xdr___env_get_encrypt_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_get_encrypt_flags_msg(xdrs, objp)$/
+xdr___env_get_encrypt_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_get_encrypt_flags_reply(xdrs, objp)$/
+xdr___env_get_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_get_flags_msg(xdrs, objp)$/
+xdr___env_get_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_get_flags_reply(xdrs, objp)$/
+xdr___env_get_home_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_get_home_msg(xdrs, objp)$/
+xdr___env_get_home_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_get_home_reply(xdrs, objp)$/
+xdr___env_get_open_flags_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_get_open_flags_msg(xdrs, objp)$/
+xdr___env_get_open_flags_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_get_open_flags_reply(xdrs, objp)$/
+xdr___env_open_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_open_msg(xdrs, objp)$/
+xdr___env_open_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_open_reply(xdrs, objp)$/
+xdr___env_remove_msg ../rpc_server/c/db_server_xdr.c /^xdr___env_remove_msg(xdrs, objp)$/
+xdr___env_remove_reply ../rpc_server/c/db_server_xdr.c /^xdr___env_remove_reply(xdrs, objp)$/
+xdr___txn_abort_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_abort_msg(xdrs, objp)$/
+xdr___txn_abort_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_abort_reply(xdrs, objp)$/
+xdr___txn_begin_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_begin_msg(xdrs, objp)$/
+xdr___txn_begin_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_begin_reply(xdrs, objp)$/
+xdr___txn_commit_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_commit_msg(xdrs, objp)$/
+xdr___txn_commit_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_commit_reply(xdrs, objp)$/
+xdr___txn_discard_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_discard_msg(xdrs, objp)$/
+xdr___txn_discard_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_discard_reply(xdrs, objp)$/
+xdr___txn_prepare_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_prepare_msg(xdrs, objp)$/
+xdr___txn_prepare_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_prepare_reply(xdrs, objp)$/
+xdr___txn_recover_msg ../rpc_server/c/db_server_xdr.c /^xdr___txn_recover_msg(xdrs, objp)$/
+xdr___txn_recover_reply ../rpc_server/c/db_server_xdr.c /^xdr___txn_recover_reply(xdrs, objp)$/
diff --git a/db/dist/template/db_server_proc b/db/dist/template/db_server_proc
index 3fc732218..84fce4d2e 100644
--- a/db/dist/template/db_server_proc
+++ b/db/dist/template/db_server_proc
@@ -6,27 +6,47 @@
#include <rpc/rpc.h>
-#include <errno.h>
#include <string.h>
-#include "db_server.h"
#endif
#include "db_int.h"
-#include "db_server_int.h"
-#include "rpc_server_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc/db_server_int.h"
+#include "dbinc_auto/rpc_server_ext.h"
-#include "gen_server_ext.h"
+/* BEGIN __env_get_cachesize_proc */
+void
+__env_get_cachesize_proc(dbenvcl_id,
+ replyp)
+ long dbenvcl_id;
+ __env_get_cachesize_reply *replyp;
+/* END __env_get_cachesize_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
-/* BEGIN __env_cachesize_1_proc */
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_cachesize_proc */
void
-__env_cachesize_1_proc(dbenvcl_id, gbytes, bytes,
+__env_cachesize_proc(dbenvcl_id, gbytes, bytes,
ncache, replyp)
long dbenvcl_id;
u_int32_t gbytes;
u_int32_t bytes;
u_int32_t ncache;
__env_cachesize_reply *replyp;
-/* END __env_cachesize_1_proc */
+/* END __env_cachesize_proc */
{
int ret;
DB_ENV * dbenv;
@@ -43,13 +63,13 @@ __env_cachesize_1_proc(dbenvcl_id, gbytes, bytes,
return;
}
-/* BEGIN __env_close_1_proc */
+/* BEGIN __env_close_proc */
void
-__env_close_1_proc(dbenvcl_id, flags, replyp)
+__env_close_proc(dbenvcl_id, flags, replyp)
long dbenvcl_id;
u_int32_t flags;
__env_close_reply *replyp;
-/* END __env_close_1_proc */
+/* END __env_close_proc */
{
int ret;
DB_ENV * dbenv;
@@ -66,15 +86,100 @@ __env_close_1_proc(dbenvcl_id, flags, replyp)
return;
}
-/* BEGIN __env_create_1_proc */
+/* BEGIN __env_create_proc */
void
-__env_create_1_proc(timeout, replyp)
+__env_create_proc(timeout, replyp)
u_int32_t timeout;
__env_create_reply *replyp;
-/* END __env_create_1_proc */
+/* END __env_create_proc */
+{
+ int ret;
+
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_dbremove_proc */
+void
+__env_dbremove_proc(dbenvcl_id, txnpcl_id, name,
+ subdb, flags, replyp)
+ long dbenvcl_id;
+ long txnpcl_id;
+ char *name;
+ char *subdb;
+ u_int32_t flags;
+ __env_dbremove_reply *replyp;
+/* END __env_dbremove_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_dbrename_proc */
+void
+__env_dbrename_proc(dbenvcl_id, txnpcl_id, name,
+ subdb, newname, flags, replyp)
+ long dbenvcl_id;
+ long txnpcl_id;
+ char *name;
+ char *subdb;
+ char *newname;
+ u_int32_t flags;
+ __env_dbrename_reply *replyp;
+/* END __env_dbrename_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_get_encrypt_flags_proc */
+void
+__env_get_encrypt_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_encrypt_flags_reply *replyp;
+/* END __env_get_encrypt_flags_proc */
{
int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -84,14 +189,82 @@ __env_create_1_proc(timeout, replyp)
return;
}
-/* BEGIN __env_flags_1_proc */
+/* BEGIN __env_encrypt_proc */
void
-__env_flags_1_proc(dbenvcl_id, flags, onoff, replyp)
+__env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
+ long dbenvcl_id;
+ char *passwd;
+ u_int32_t flags;
+ __env_encrypt_reply *replyp;
+/* END __env_encrypt_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_get_flags_proc */
+void
+__env_get_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_flags_reply *replyp;
+/* END __env_get_flags_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_flags_proc */
+void
+__env_flags_proc(dbenvcl_id, flags, onoff, replyp)
long dbenvcl_id;
u_int32_t flags;
u_int32_t onoff;
__env_flags_reply *replyp;
-/* END __env_flags_1_proc */
+/* END __env_flags_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_get_home_proc */
+void
+__env_get_home_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_home_reply *replyp;
+/* END __env_get_home_proc */
{
int ret;
DB_ENV * dbenv;
@@ -108,16 +281,38 @@ __env_flags_1_proc(dbenvcl_id, flags, onoff, replyp)
return;
}
-/* BEGIN __env_open_1_proc */
+/* BEGIN __env_get_open_flags_proc */
void
-__env_open_1_proc(dbenvcl_id, home, flags,
+__env_get_open_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_open_flags_reply *replyp;
+/* END __env_get_open_flags_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __env_open_proc */
+void
+__env_open_proc(dbenvcl_id, home, flags,
mode, replyp)
long dbenvcl_id;
char *home;
u_int32_t flags;
u_int32_t mode;
__env_open_reply *replyp;
-/* END __env_open_1_proc */
+/* END __env_open_proc */
{
int ret;
DB_ENV * dbenv;
@@ -134,14 +329,14 @@ __env_open_1_proc(dbenvcl_id, home, flags,
return;
}
-/* BEGIN __env_remove_1_proc */
+/* BEGIN __env_remove_proc */
void
-__env_remove_1_proc(dbenvcl_id, home, flags, replyp)
+__env_remove_proc(dbenvcl_id, home, flags, replyp)
long dbenvcl_id;
char *home;
u_int32_t flags;
__env_remove_reply *replyp;
-/* END __env_remove_1_proc */
+/* END __env_remove_proc */
{
int ret;
DB_ENV * dbenv;
@@ -158,12 +353,12 @@ __env_remove_1_proc(dbenvcl_id, home, flags, replyp)
return;
}
-/* BEGIN __txn_abort_1_proc */
+/* BEGIN __txn_abort_proc */
void
-__txn_abort_1_proc(txnpcl_id, replyp)
+__txn_abort_proc(txnpcl_id, replyp)
long txnpcl_id;
__txn_abort_reply *replyp;
-/* END __txn_abort_1_proc */
+/* END __txn_abort_proc */
{
int ret;
DB_TXN * txnp;
@@ -180,24 +375,24 @@ __txn_abort_1_proc(txnpcl_id, replyp)
return;
}
-/* BEGIN __txn_begin_1_proc */
+/* BEGIN __txn_begin_proc */
void
-__txn_begin_1_proc(envpcl_id, parentcl_id,
+__txn_begin_proc(dbenvcl_id, parentcl_id,
flags, replyp)
- long envpcl_id;
+ long dbenvcl_id;
long parentcl_id;
u_int32_t flags;
__txn_begin_reply *replyp;
-/* END __txn_begin_1_proc */
+/* END __txn_begin_proc */
{
int ret;
- DB_ENV * envp;
- ct_entry *envp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
DB_TXN * parent;
ct_entry *parent_ctp;
- ACTIVATE_CTP(envp_ctp, envpcl_id, CT_ENV);
- envp = (DB_ENV *)envp_ctp->ct_anyp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
ACTIVATE_CTP(parent_ctp, parentcl_id, CT_TXN);
parent = (DB_TXN *)parent_ctp->ct_anyp;
@@ -209,13 +404,13 @@ __txn_begin_1_proc(envpcl_id, parentcl_id,
return;
}
-/* BEGIN __txn_commit_1_proc */
+/* BEGIN __txn_commit_proc */
void
-__txn_commit_1_proc(txnpcl_id, flags, replyp)
+__txn_commit_proc(txnpcl_id, flags, replyp)
long txnpcl_id;
u_int32_t flags;
__txn_commit_reply *replyp;
-/* END __txn_commit_1_proc */
+/* END __txn_commit_proc */
{
int ret;
DB_TXN * txnp;
@@ -232,13 +427,141 @@ __txn_commit_1_proc(txnpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_bt_maxkey_1_proc */
+/* BEGIN __txn_discard_proc */
void
-__db_bt_maxkey_1_proc(dbpcl_id, maxkey, replyp)
+__txn_discard_proc(txnpcl_id, flags, replyp)
+ long txnpcl_id;
+ u_int32_t flags;
+ __txn_discard_reply *replyp;
+/* END __txn_discard_proc */
+{
+ int ret;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __txn_prepare_proc */
+void
+__txn_prepare_proc(txnpcl_id, gid, replyp)
+ long txnpcl_id;
+ u_int8_t *gid;
+ __txn_prepare_reply *replyp;
+/* END __txn_prepare_proc */
+{
+ int ret;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __txn_recover_proc */
+void
+__txn_recover_proc(dbenvcl_id, count,
+ flags, replyp, freep)
+ long dbenvcl_id;
+ u_int32_t count;
+ u_int32_t flags;
+ __txn_recover_reply *replyp;
+ int * freep;
+/* END __txn_recover_proc */
+{
+ int ret;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_associate_proc */
+void
+__db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id,
+ flags, replyp)
+ long dbpcl_id;
+ long txnpcl_id;
+ long sdbpcl_id;
+ u_int32_t flags;
+ __db_associate_reply *replyp;
+/* END __db_associate_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+ DB * sdbp;
+ ct_entry *sdbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+ ACTIVATE_CTP(sdbp_ctp, sdbpcl_id, CT_DB);
+ sdbp = (DB *)sdbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_bt_maxkey_proc */
+void
+__db_bt_maxkey_proc(dbpcl_id, maxkey, replyp)
long dbpcl_id;
u_int32_t maxkey;
__db_bt_maxkey_reply *replyp;
-/* END __db_bt_maxkey_1_proc */
+/* END __db_bt_maxkey_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_bt_minkey_proc */
+void
+__db_get_bt_minkey_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_bt_minkey_reply *replyp;
+/* END __db_get_bt_minkey_proc */
{
int ret;
DB * dbp;
@@ -255,13 +578,13 @@ __db_bt_maxkey_1_proc(dbpcl_id, maxkey, replyp)
return;
}
-/* BEGIN __db_bt_minkey_1_proc */
+/* BEGIN __db_bt_minkey_proc */
void
-__db_bt_minkey_1_proc(dbpcl_id, minkey, replyp)
+__db_bt_minkey_proc(dbpcl_id, minkey, replyp)
long dbpcl_id;
u_int32_t minkey;
__db_bt_minkey_reply *replyp;
-/* END __db_bt_minkey_1_proc */
+/* END __db_bt_minkey_proc */
{
int ret;
DB * dbp;
@@ -278,13 +601,13 @@ __db_bt_minkey_1_proc(dbpcl_id, minkey, replyp)
return;
}
-/* BEGIN __db_close_1_proc */
+/* BEGIN __db_close_proc */
void
-__db_close_1_proc(dbpcl_id, flags, replyp)
+__db_close_proc(dbpcl_id, flags, replyp)
long dbpcl_id;
u_int32_t flags;
__db_close_reply *replyp;
-/* END __db_close_1_proc */
+/* END __db_close_proc */
{
int ret;
DB * dbp;
@@ -301,20 +624,20 @@ __db_close_1_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_create_1_proc */
+/* BEGIN __db_create_proc */
void
-__db_create_1_proc(flags, envpcl_id, replyp)
+__db_create_proc(dbenvcl_id, flags, replyp)
+ long dbenvcl_id;
u_int32_t flags;
- long envpcl_id;
__db_create_reply *replyp;
-/* END __db_create_1_proc */
+/* END __db_create_proc */
{
int ret;
- DB_ENV * envp;
- ct_entry *envp_ctp;
+ DB_ENV * dbenv;
+ ct_entry *dbenv_ctp;
- ACTIVATE_CTP(envp_ctp, envpcl_id, CT_ENV);
- envp = (DB_ENV *)envp_ctp->ct_anyp;
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -324,21 +647,22 @@ __db_create_1_proc(flags, envpcl_id, replyp)
return;
}
-/* BEGIN __db_del_1_proc */
+/* BEGIN __db_del_proc */
void
-__db_del_1_proc(dbpcl_id, txnpcl_id, keydlen,
- keydoff, keyflags, keydata, keysize,
- flags, replyp)
+__db_del_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, flags, replyp)
long dbpcl_id;
long txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t flags;
__db_del_reply *replyp;
-/* END __db_del_1_proc */
+/* END __db_del_proc */
{
int ret;
DB * dbp;
@@ -359,13 +683,81 @@ __db_del_1_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_extentsize_1_proc */
+/* BEGIN __db_get_encrypt_flags_proc */
+void
+__db_get_encrypt_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_encrypt_flags_reply *replyp;
+/* END __db_get_encrypt_flags_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_encrypt_proc */
void
-__db_extentsize_1_proc(dbpcl_id, extentsize, replyp)
+__db_encrypt_proc(dbpcl_id, passwd, flags, replyp)
+ long dbpcl_id;
+ char *passwd;
+ u_int32_t flags;
+ __db_encrypt_reply *replyp;
+/* END __db_encrypt_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_extentsize_proc */
+void
+__db_get_extentsize_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_extentsize_reply *replyp;
+/* END __db_get_extentsize_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_extentsize_proc */
+void
+__db_extentsize_proc(dbpcl_id, extentsize, replyp)
long dbpcl_id;
u_int32_t extentsize;
__db_extentsize_reply *replyp;
-/* END __db_extentsize_1_proc */
+/* END __db_extentsize_proc */
{
int ret;
DB * dbp;
@@ -382,13 +774,35 @@ __db_extentsize_1_proc(dbpcl_id, extentsize, replyp)
return;
}
-/* BEGIN __db_flags_1_proc */
+/* BEGIN __db_get_flags_proc */
void
-__db_flags_1_proc(dbpcl_id, flags, replyp)
+__db_get_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_flags_reply *replyp;
+/* END __db_get_flags_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_flags_proc */
+void
+__db_flags_proc(dbpcl_id, flags, replyp)
long dbpcl_id;
u_int32_t flags;
__db_flags_reply *replyp;
-/* END __db_flags_1_proc */
+/* END __db_flags_proc */
{
int ret;
DB * dbp;
@@ -405,28 +819,30 @@ __db_flags_1_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_get_1_proc */
+/* BEGIN __db_get_proc */
void
-__db_get_1_proc(dbpcl_id, txnpcl_id, keydlen,
- keydoff, keyflags, keydata, keysize,
- datadlen, datadoff, dataflags, datadata,
- datasize, flags, replyp, freep)
+__db_get_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, datadlen, datadoff, dataulen,
+ dataflags, datadata, datasize, flags, replyp, freep)
long dbpcl_id;
long txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t datadlen;
u_int32_t datadoff;
+ u_int32_t dataulen;
u_int32_t dataflags;
void *datadata;
u_int32_t datasize;
u_int32_t flags;
__db_get_reply *replyp;
int * freep;
-/* END __db_get_1_proc */
+/* END __db_get_proc */
{
int ret;
DB * dbp;
@@ -447,13 +863,101 @@ __db_get_1_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_h_ffactor_1_proc */
+/* BEGIN __db_get_name_proc */
void
-__db_h_ffactor_1_proc(dbpcl_id, ffactor, replyp)
+__db_get_name_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_name_reply *replyp;
+/* END __db_get_name_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_open_flags_proc */
+void
+__db_get_open_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_open_flags_reply *replyp;
+/* END __db_get_open_flags_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_h_ffactor_proc */
+void
+__db_get_h_ffactor_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_h_ffactor_reply *replyp;
+/* END __db_get_h_ffactor_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_h_ffactor_proc */
+void
+__db_h_ffactor_proc(dbpcl_id, ffactor, replyp)
long dbpcl_id;
u_int32_t ffactor;
__db_h_ffactor_reply *replyp;
-/* END __db_h_ffactor_1_proc */
+/* END __db_h_ffactor_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_h_nelem_proc */
+void
+__db_get_h_nelem_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_h_nelem_reply *replyp;
+/* END __db_get_h_nelem_proc */
{
int ret;
DB * dbp;
@@ -470,13 +974,13 @@ __db_h_ffactor_1_proc(dbpcl_id, ffactor, replyp)
return;
}
-/* BEGIN __db_h_nelem_1_proc */
+/* BEGIN __db_h_nelem_proc */
void
-__db_h_nelem_1_proc(dbpcl_id, nelem, replyp)
+__db_h_nelem_proc(dbpcl_id, nelem, replyp)
long dbpcl_id;
u_int32_t nelem;
__db_h_nelem_reply *replyp;
-/* END __db_h_nelem_1_proc */
+/* END __db_h_nelem_proc */
{
int ret;
DB * dbp;
@@ -493,21 +997,22 @@ __db_h_nelem_1_proc(dbpcl_id, nelem, replyp)
return;
}
-/* BEGIN __db_key_range_1_proc */
+/* BEGIN __db_key_range_proc */
void
-__db_key_range_1_proc(dbpcl_id, txnpcl_id, keydlen,
- keydoff, keyflags, keydata, keysize,
- flags, replyp)
+__db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, flags, replyp)
long dbpcl_id;
long txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t flags;
__db_key_range_reply *replyp;
-/* END __db_key_range_1_proc */
+/* END __db_key_range_proc */
{
int ret;
DB * dbp;
@@ -528,13 +1033,35 @@ __db_key_range_1_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_lorder_1_proc */
+/* BEGIN __db_get_lorder_proc */
+void
+__db_get_lorder_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_lorder_reply *replyp;
+/* END __db_get_lorder_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_lorder_proc */
void
-__db_lorder_1_proc(dbpcl_id, lorder, replyp)
+__db_lorder_proc(dbpcl_id, lorder, replyp)
long dbpcl_id;
u_int32_t lorder;
__db_lorder_reply *replyp;
-/* END __db_lorder_1_proc */
+/* END __db_lorder_proc */
{
int ret;
DB * dbp;
@@ -551,25 +1078,30 @@ __db_lorder_1_proc(dbpcl_id, lorder, replyp)
return;
}
-/* BEGIN __db_open_1_proc */
+/* BEGIN __db_open_proc */
void
-__db_open_1_proc(dbpcl_id, name, subdb,
- type, flags, mode, replyp)
+__db_open_proc(dbpcl_id, txnpcl_id, name,
+ subdb, type, flags, mode, replyp)
long dbpcl_id;
+ long txnpcl_id;
char *name;
char *subdb;
u_int32_t type;
u_int32_t flags;
u_int32_t mode;
__db_open_reply *replyp;
-/* END __db_open_1_proc */
+/* END __db_open_proc */
{
int ret;
DB * dbp;
ct_entry *dbp_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (DB *)dbp_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -579,13 +1111,35 @@ __db_open_1_proc(dbpcl_id, name, subdb,
return;
}
-/* BEGIN __db_pagesize_1_proc */
+/* BEGIN __db_get_pagesize_proc */
void
-__db_pagesize_1_proc(dbpcl_id, pagesize, replyp)
+__db_get_pagesize_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_pagesize_reply *replyp;
+/* END __db_get_pagesize_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_pagesize_proc */
+void
+__db_pagesize_proc(dbpcl_id, pagesize, replyp)
long dbpcl_id;
u_int32_t pagesize;
__db_pagesize_reply *replyp;
-/* END __db_pagesize_1_proc */
+/* END __db_pagesize_proc */
{
int ret;
DB * dbp;
@@ -602,28 +1156,82 @@ __db_pagesize_1_proc(dbpcl_id, pagesize, replyp)
return;
}
-/* BEGIN __db_put_1_proc */
+/* BEGIN __db_pget_proc */
void
-__db_put_1_proc(dbpcl_id, txnpcl_id, keydlen,
- keydoff, keyflags, keydata, keysize,
- datadlen, datadoff, dataflags, datadata,
+__db_pget_proc(dbpcl_id, txnpcl_id, skeydlen,
+ skeydoff, skeyulen, skeyflags, skeydata,
+ skeysize, pkeydlen, pkeydoff, pkeyulen,
+ pkeyflags, pkeydata, pkeysize, datadlen,
+ datadoff, dataulen, dataflags, datadata,
datasize, flags, replyp, freep)
long dbpcl_id;
long txnpcl_id;
+ u_int32_t skeydlen;
+ u_int32_t skeydoff;
+ u_int32_t skeyulen;
+ u_int32_t skeyflags;
+ void *skeydata;
+ u_int32_t skeysize;
+ u_int32_t pkeydlen;
+ u_int32_t pkeydoff;
+ u_int32_t pkeyulen;
+ u_int32_t pkeyflags;
+ void *pkeydata;
+ u_int32_t pkeysize;
+ u_int32_t datadlen;
+ u_int32_t datadoff;
+ u_int32_t dataulen;
+ u_int32_t dataflags;
+ void *datadata;
+ u_int32_t datasize;
+ u_int32_t flags;
+ __db_pget_reply *replyp;
+ int * freep;
+/* END __db_pget_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_put_proc */
+void
+__db_put_proc(dbpcl_id, txnpcl_id, keydlen,
+ keydoff, keyulen, keyflags, keydata,
+ keysize, datadlen, datadoff, dataulen,
+ dataflags, datadata, datasize, flags, replyp, freep)
+ long dbpcl_id;
+ long txnpcl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t datadlen;
u_int32_t datadoff;
+ u_int32_t dataulen;
u_int32_t dataflags;
void *datadata;
u_int32_t datasize;
u_int32_t flags;
__db_put_reply *replyp;
int * freep;
-/* END __db_put_1_proc */
+/* END __db_put_proc */
{
int ret;
DB * dbp;
@@ -644,13 +1252,35 @@ __db_put_1_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
-/* BEGIN __db_re_delim_1_proc */
+/* BEGIN __db_get_re_delim_proc */
+void
+__db_get_re_delim_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_delim_reply *replyp;
+/* END __db_get_re_delim_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_re_delim_proc */
void
-__db_re_delim_1_proc(dbpcl_id, delim, replyp)
+__db_re_delim_proc(dbpcl_id, delim, replyp)
long dbpcl_id;
u_int32_t delim;
__db_re_delim_reply *replyp;
-/* END __db_re_delim_1_proc */
+/* END __db_re_delim_proc */
{
int ret;
DB * dbp;
@@ -667,13 +1297,35 @@ __db_re_delim_1_proc(dbpcl_id, delim, replyp)
return;
}
-/* BEGIN __db_re_len_1_proc */
+/* BEGIN __db_get_re_len_proc */
void
-__db_re_len_1_proc(dbpcl_id, len, replyp)
+__db_get_re_len_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_len_reply *replyp;
+/* END __db_get_re_len_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_re_len_proc */
+void
+__db_re_len_proc(dbpcl_id, len, replyp)
long dbpcl_id;
u_int32_t len;
__db_re_len_reply *replyp;
-/* END __db_re_len_1_proc */
+/* END __db_re_len_proc */
{
int ret;
DB * dbp;
@@ -690,13 +1342,35 @@ __db_re_len_1_proc(dbpcl_id, len, replyp)
return;
}
-/* BEGIN __db_re_pad_1_proc */
+/* BEGIN __db_re_pad_proc */
void
-__db_re_pad_1_proc(dbpcl_id, pad, replyp)
+__db_re_pad_proc(dbpcl_id, pad, replyp)
long dbpcl_id;
u_int32_t pad;
__db_re_pad_reply *replyp;
-/* END __db_re_pad_1_proc */
+/* END __db_re_pad_proc */
+{
+ int ret;
+ DB * dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __db_get_re_pad_proc */
+void
+__db_get_re_pad_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_pad_reply *replyp;
+/* END __db_get_re_pad_proc */
{
int ret;
DB * dbp;
@@ -713,16 +1387,16 @@ __db_re_pad_1_proc(dbpcl_id, pad, replyp)
return;
}
-/* BEGIN __db_remove_1_proc */
+/* BEGIN __db_remove_proc */
void
-__db_remove_1_proc(dbpcl_id, name, subdb,
+__db_remove_proc(dbpcl_id, name, subdb,
flags, replyp)
long dbpcl_id;
char *name;
char *subdb;
u_int32_t flags;
__db_remove_reply *replyp;
-/* END __db_remove_1_proc */
+/* END __db_remove_proc */
{
int ret;
DB * dbp;
@@ -739,9 +1413,9 @@ __db_remove_1_proc(dbpcl_id, name, subdb,
return;
}
-/* BEGIN __db_rename_1_proc */
+/* BEGIN __db_rename_proc */
void
-__db_rename_1_proc(dbpcl_id, name, subdb,
+__db_rename_proc(dbpcl_id, name, subdb,
newname, flags, replyp)
long dbpcl_id;
char *name;
@@ -749,7 +1423,7 @@ __db_rename_1_proc(dbpcl_id, name, subdb,
char *newname;
u_int32_t flags;
__db_rename_reply *replyp;
-/* END __db_rename_1_proc */
+/* END __db_rename_proc */
{
int ret;
DB * dbp;
@@ -766,15 +1440,14 @@ __db_rename_1_proc(dbpcl_id, name, subdb,
return;
}
-/* BEGIN __db_stat_1_proc */
+/* BEGIN __db_stat_proc */
void
-__db_stat_1_proc(dbpcl_id,
- flags, replyp, freep)
+__db_stat_proc(dbpcl_id, flags, replyp, freep)
long dbpcl_id;
u_int32_t flags;
__db_stat_reply *replyp;
int * freep;
-/* END __db_stat_1_proc */
+/* END __db_stat_proc */
{
int ret;
DB * dbp;
@@ -791,12 +1464,13 @@ __db_stat_1_proc(dbpcl_id,
return;
}
-/* BEGIN __db_swapped_1_proc */
+/* BEGIN __db_sync_proc */
void
-__db_swapped_1_proc(dbpcl_id, replyp)
+__db_sync_proc(dbpcl_id, flags, replyp)
long dbpcl_id;
- __db_swapped_reply *replyp;
-/* END __db_swapped_1_proc */
+ u_int32_t flags;
+ __db_sync_reply *replyp;
+/* END __db_sync_proc */
{
int ret;
DB * dbp;
@@ -813,20 +1487,26 @@ __db_swapped_1_proc(dbpcl_id, replyp)
return;
}
-/* BEGIN __db_sync_1_proc */
+/* BEGIN __db_truncate_proc */
void
-__db_sync_1_proc(dbpcl_id, flags, replyp)
+__db_truncate_proc(dbpcl_id, txnpcl_id,
+ flags, replyp)
long dbpcl_id;
+ long txnpcl_id;
u_int32_t flags;
- __db_sync_reply *replyp;
-/* END __db_sync_1_proc */
+ __db_truncate_reply *replyp;
+/* END __db_truncate_proc */
{
int ret;
DB * dbp;
ct_entry *dbp_ctp;
+ DB_TXN * txnp;
+ ct_entry *txnp_ctp;
ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
dbp = (DB *)dbp_ctp->ct_anyp;
+ ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN);
+ txnp = (DB_TXN *)txnp_ctp->ct_anyp;
/*
* XXX Code goes here
@@ -836,15 +1516,15 @@ __db_sync_1_proc(dbpcl_id, flags, replyp)
return;
}
-/* BEGIN __db_cursor_1_proc */
+/* BEGIN __db_cursor_proc */
void
-__db_cursor_1_proc(dbpcl_id, txnpcl_id,
+__db_cursor_proc(dbpcl_id, txnpcl_id,
flags, replyp)
long dbpcl_id;
long txnpcl_id;
u_int32_t flags;
__db_cursor_reply *replyp;
-/* END __db_cursor_1_proc */
+/* END __db_cursor_proc */
{
int ret;
DB * dbp;
@@ -865,15 +1545,16 @@ __db_cursor_1_proc(dbpcl_id, txnpcl_id,
return;
}
-/* BEGIN __db_join_1_proc */
+/* BEGIN __db_join_proc */
void
-__db_join_1_proc(dbpcl_id, curslist,
+__db_join_proc(dbpcl_id, curs, curslen,
flags, replyp)
long dbpcl_id;
- u_int32_t * curslist;
+ u_int32_t * curs;
+ u_int32_t curslen;
u_int32_t flags;
__db_join_reply *replyp;
-/* END __db_join_1_proc */
+/* END __db_join_proc */
{
int ret;
DB * dbp;
@@ -890,12 +1571,12 @@ __db_join_1_proc(dbpcl_id, curslist,
return;
}
-/* BEGIN __dbc_close_1_proc */
+/* BEGIN __dbc_close_proc */
void
-__dbc_close_1_proc(dbccl_id, replyp)
+__dbc_close_proc(dbccl_id, replyp)
long dbccl_id;
__dbc_close_reply *replyp;
-/* END __dbc_close_1_proc */
+/* END __dbc_close_proc */
{
int ret;
DBC * dbc;
@@ -912,13 +1593,13 @@ __dbc_close_1_proc(dbccl_id, replyp)
return;
}
-/* BEGIN __dbc_count_1_proc */
+/* BEGIN __dbc_count_proc */
void
-__dbc_count_1_proc(dbccl_id, flags, replyp)
+__dbc_count_proc(dbccl_id, flags, replyp)
long dbccl_id;
u_int32_t flags;
__dbc_count_reply *replyp;
-/* END __dbc_count_1_proc */
+/* END __dbc_count_proc */
{
int ret;
DBC * dbc;
@@ -935,13 +1616,13 @@ __dbc_count_1_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_del_1_proc */
+/* BEGIN __dbc_del_proc */
void
-__dbc_del_1_proc(dbccl_id, flags, replyp)
+__dbc_del_proc(dbccl_id, flags, replyp)
long dbccl_id;
u_int32_t flags;
__dbc_del_reply *replyp;
-/* END __dbc_del_1_proc */
+/* END __dbc_del_proc */
{
int ret;
DBC * dbc;
@@ -958,13 +1639,13 @@ __dbc_del_1_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_dup_1_proc */
+/* BEGIN __dbc_dup_proc */
void
-__dbc_dup_1_proc(dbccl_id, flags, replyp)
+__dbc_dup_proc(dbccl_id, flags, replyp)
long dbccl_id;
u_int32_t flags;
__dbc_dup_reply *replyp;
-/* END __dbc_dup_1_proc */
+/* END __dbc_dup_proc */
{
int ret;
DBC * dbc;
@@ -981,27 +1662,29 @@ __dbc_dup_1_proc(dbccl_id, flags, replyp)
return;
}
-/* BEGIN __dbc_get_1_proc */
+/* BEGIN __dbc_get_proc */
void
-__dbc_get_1_proc(dbccl_id, keydlen, keydoff,
- keyflags, keydata, keysize, datadlen,
- datadoff, dataflags, datadata, datasize,
- flags, replyp, freep)
+__dbc_get_proc(dbccl_id, keydlen, keydoff,
+ keyulen, keyflags, keydata, keysize,
+ datadlen, datadoff, dataulen, dataflags,
+ datadata, datasize, flags, replyp, freep)
long dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t datadlen;
u_int32_t datadoff;
+ u_int32_t dataulen;
u_int32_t dataflags;
void *datadata;
u_int32_t datasize;
u_int32_t flags;
__dbc_get_reply *replyp;
int * freep;
-/* END __dbc_get_1_proc */
+/* END __dbc_get_proc */
{
int ret;
DBC * dbc;
@@ -1018,27 +1701,76 @@ __dbc_get_1_proc(dbccl_id, keydlen, keydoff,
return;
}
-/* BEGIN __dbc_put_1_proc */
+/* BEGIN __dbc_pget_proc */
void
-__dbc_put_1_proc(dbccl_id, keydlen, keydoff,
- keyflags, keydata, keysize, datadlen,
- datadoff, dataflags, datadata, datasize,
+__dbc_pget_proc(dbccl_id, skeydlen, skeydoff,
+ skeyulen, skeyflags, skeydata, skeysize,
+ pkeydlen, pkeydoff, pkeyulen, pkeyflags,
+ pkeydata, pkeysize, datadlen, datadoff,
+ dataulen, dataflags, datadata, datasize,
flags, replyp, freep)
long dbccl_id;
+ u_int32_t skeydlen;
+ u_int32_t skeydoff;
+ u_int32_t skeyulen;
+ u_int32_t skeyflags;
+ void *skeydata;
+ u_int32_t skeysize;
+ u_int32_t pkeydlen;
+ u_int32_t pkeydoff;
+ u_int32_t pkeyulen;
+ u_int32_t pkeyflags;
+ void *pkeydata;
+ u_int32_t pkeysize;
+ u_int32_t datadlen;
+ u_int32_t datadoff;
+ u_int32_t dataulen;
+ u_int32_t dataflags;
+ void *datadata;
+ u_int32_t datasize;
+ u_int32_t flags;
+ __dbc_pget_reply *replyp;
+ int * freep;
+/* END __dbc_pget_proc */
+{
+ int ret;
+ DBC * dbc;
+ ct_entry *dbc_ctp;
+
+ ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR);
+ dbc = (DBC *)dbc_ctp->ct_anyp;
+
+ /*
+ * XXX Code goes here
+ */
+
+ replyp->status = ret;
+ return;
+}
+
+/* BEGIN __dbc_put_proc */
+void
+__dbc_put_proc(dbccl_id, keydlen, keydoff,
+ keyulen, keyflags, keydata, keysize,
+ datadlen, datadoff, dataulen, dataflags,
+ datadata, datasize, flags, replyp, freep)
+ long dbccl_id;
u_int32_t keydlen;
u_int32_t keydoff;
+ u_int32_t keyulen;
u_int32_t keyflags;
void *keydata;
u_int32_t keysize;
u_int32_t datadlen;
u_int32_t datadoff;
+ u_int32_t dataulen;
u_int32_t dataflags;
void *datadata;
u_int32_t datasize;
u_int32_t flags;
__dbc_put_reply *replyp;
int * freep;
-/* END __dbc_put_1_proc */
+/* END __dbc_put_proc */
{
int ret;
DBC * dbc;
diff --git a/db/dist/template/gen_client_ret b/db/dist/template/gen_client_ret
index 81e14d8b2..340f99e0d 100644
--- a/db/dist/template/gen_client_ret
+++ b/db/dist/template/gen_client_ret
@@ -6,28 +6,28 @@
#include <sys/types.h>
#include <rpc/rpc.h>
-#include <errno.h>
#include <string.h>
#endif
-#include "db_server.h"
-
#include "db_int.h"
-#include "db_page.h"
-#include "db_ext.h"
-#include "txn.h"
-
-#include "gen_client_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc/txn.h"
+/*
+ * PUBLIC: int __dbcl_env_create_ret __P((DB_ENV *, long,
+ * PUBLIC: __env_create_reply *));
+ */
int
-__dbcl_env_close_ret(dbenv, flags, replyp)
+__dbcl_env_create_ret(dbenv, timeout, replyp)
DB_ENV * dbenv;
- u_int32_t flags;
- __env_close_reply *replyp;
+ long timeout;
+ __env_create_reply *replyp;
{
int ret;
+ long env;
if (replyp->status != 0)
return (replyp->status);
+ env = replyp->envcl_id;
/*
* XXX Code goes here
@@ -36,6 +36,10 @@ __dbcl_env_close_ret(dbenv, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_env_open_ret __P((DB_ENV *, const char *, u_int32_t, int,
+ * PUBLIC: __env_open_reply *));
+ */
int
__dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
DB_ENV * dbenv;
@@ -45,9 +49,11 @@ __dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
__env_open_reply *replyp;
{
int ret;
+ long env;
if (replyp->status != 0)
return (replyp->status);
+ env = replyp->envcl_id;
/*
* XXX Code goes here
@@ -56,6 +62,10 @@ __dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_env_remove_ret __P((DB_ENV *, const char *, u_int32_t,
+ * PUBLIC: __env_remove_reply *));
+ */
int
__dbcl_env_remove_ret(dbenv, home, flags, replyp)
DB_ENV * dbenv;
@@ -75,6 +85,9 @@ __dbcl_env_remove_ret(dbenv, home, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_abort_ret __P((DB_TXN *, __txn_abort_reply *));
+ */
int
__dbcl_txn_abort_ret(txnp, replyp)
DB_TXN * txnp;
@@ -92,9 +105,13 @@ __dbcl_txn_abort_ret(txnp, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_begin_ret __P((DB_ENV *, DB_TXN *, DB_TXN **,
+ * PUBLIC: u_int32_t, __txn_begin_reply *));
+ */
int
-__dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
- DB_ENV * envp;
+__dbcl_txn_begin_ret(dbenv, parent, txnpp, flags, replyp)
+ DB_ENV * dbenv;
DB_TXN * parent;
DB_TXN ** txnpp;
u_int32_t flags;
@@ -114,6 +131,10 @@ __dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_commit_ret __P((DB_TXN *, u_int32_t,
+ * PUBLIC: __txn_commit_reply *));
+ */
int
__dbcl_txn_commit_ret(txnp, flags, replyp)
DB_TXN * txnp;
@@ -132,6 +153,70 @@ __dbcl_txn_commit_ret(txnp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_discard_ret __P((DB_TXN *, u_int32_t,
+ * PUBLIC: __txn_discard_reply *));
+ */
+int
+__dbcl_txn_discard_ret(txnp, flags, replyp)
+ DB_TXN * txnp;
+ u_int32_t flags;
+ __txn_discard_reply *replyp;
+{
+ int ret;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
+ * PUBLIC: long *, u_int32_t, __txn_recover_reply *));
+ */
+int
+__dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp)
+ DB_ENV * dbenv;
+ DB_PREPLIST * preplist;
+ long count;
+ long * retp;
+ u_int32_t flags;
+ __txn_recover_reply *replyp;
+{
+ int ret;
+ u_int32_t *__db_txn;
+ u_int8_t *__db_gid;
+ long retcount;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ /*
+ * XXX Handle list
+ */
+
+
+ /*
+ * XXX Handle list
+ */
+
+ retcount = replyp->retcount;
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_close_ret __P((DB *, u_int32_t, __db_close_reply *));
+ */
int
__dbcl_db_close_ret(dbp, flags, replyp)
DB * dbp;
@@ -150,6 +235,35 @@ __dbcl_db_close_ret(dbp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_create_ret __P((DB *, DB_ENV *, u_int32_t,
+ * PUBLIC: __db_create_reply *));
+ */
+int
+__dbcl_db_create_ret(dbp, dbenv, flags, replyp)
+ DB * dbp;
+ DB_ENV * dbenv;
+ u_int32_t flags;
+ __db_create_reply *replyp;
+{
+ int ret;
+ long db;
+
+ if (replyp->status != 0)
+ return (replyp->status);
+ db = replyp->dbcl_id;
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_ret __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __db_get_reply *));
+ */
int
__dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp)
DB * dbp;
@@ -175,6 +289,10 @@ __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_key_range_ret __P((DB *, DB_TXN *, DBT *,
+ * PUBLIC: DB_KEY_RANGE *, u_int32_t, __db_key_range_reply *));
+ */
int
__dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp)
DB * dbp;
@@ -202,9 +320,14 @@ __dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_open_ret __P((DB *, DB_TXN *, const char *,
+ * PUBLIC: const char *, DBTYPE, u_int32_t, int, __db_open_reply *));
+ */
int
-__dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp)
+__dbcl_db_open_ret(dbp, txnp, name, subdb, type, flags, mode, replyp)
DB * dbp;
+ DB_TXN * txnp;
const char * name;
const char * subdb;
DBTYPE type;
@@ -213,13 +336,49 @@ __dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp)
__db_open_reply *replyp;
{
int ret;
+ long db;
DBTYPE type;
u_int32_t dbflags;
+ int lorder;
if (replyp->status != 0)
return (replyp->status);
+ db = replyp->dbcl_id;
type = replyp->type;
dbflags = replyp->dbflags;
+ lorder = replyp->lorder;
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_pget_ret __P((DB *, DB_TXN *, DBT *, DBT *, DBT *,
+ * PUBLIC: u_int32_t, __db_pget_reply *));
+ */
+int
+__dbcl_db_pget_ret(dbp, txnp, skey, pkey, data, flags, replyp)
+ DB * dbp;
+ DB_TXN * txnp;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+ __db_pget_reply *replyp;
+{
+ int ret;
+ /* DBT skey; */
+ /* DBT pkey; */
+ /* DBT data; */
+
+ if (replyp->status != 0)
+ return (replyp->status);
+ /* Handle replyp->skeydata; */
+ /* Handle replyp->pkeydata; */
+ /* Handle replyp->datadata; */
/*
* XXX Code goes here
@@ -228,6 +387,10 @@ __dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_put_ret __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __db_put_reply *));
+ */
int
__dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp)
DB * dbp;
@@ -251,6 +414,10 @@ __dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_remove_ret __P((DB *, const char *, const char *,
+ * PUBLIC: u_int32_t, __db_remove_reply *));
+ */
int
__dbcl_db_remove_ret(dbp, name, subdb, flags, replyp)
DB * dbp;
@@ -271,6 +438,10 @@ __dbcl_db_remove_ret(dbp, name, subdb, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_rename_ret __P((DB *, const char *, const char *,
+ * PUBLIC: const char *, u_int32_t, __db_rename_reply *));
+ */
int
__dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp)
DB * dbp;
@@ -292,31 +463,27 @@ __dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp)
return (replyp->status);
}
-int __db_db_stat_statsreplist __P((__db_stat_statsreplist, u_int32_t **));
-void __db_db_stat_statsfree __P((u_int32_t *));
-
+/*
+ * PUBLIC: int __dbcl_db_stat_ret __P((DB *, void *, u_int32_t,
+ * PUBLIC: __db_stat_reply *));
+ */
int
-__dbcl_db_stat_ret(dbp, sp, func0, flags, replyp)
+__dbcl_db_stat_ret(dbp, sp, flags, replyp)
DB * dbp;
void * sp;
- void *(*func0) __P((size_t));
u_int32_t flags;
__db_stat_reply *replyp;
{
int ret;
- u_int32_t *__db_statslist;
+ u_int32_t *__db_stats;
if (replyp->status != 0)
return (replyp->status);
- if ((ret = __db_db_stat_statslist(replyp->statslist, &__db_statslist)) != 0)
- return (ret);
-
/*
* XXX Handle list
*/
- __db_db_stat_statsfree(__db_statslist);
/*
* XXX Code goes here
@@ -325,51 +492,36 @@ __dbcl_db_stat_ret(dbp, sp, func0, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_truncate_ret __P((DB *, DB_TXN *, u_int32_t *,
+ * PUBLIC: u_int32_t, __db_truncate_reply *));
+ */
int
-__db_db_stat_statsreplist(locp, ppp)
- __db_stat_statsreplist *locp;
- u_int32_t **ppp;
+__dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp)
+ DB * dbp;
+ DB_TXN * txnp;
+ u_int32_t * countp;
+ u_int32_t flags;
+ __db_truncate_reply *replyp;
{
- u_int32_t *pp;
- int cnt, ret, size;
- __db_stat_statsreplist *nl;
-
- for (cnt = 0, nl = locp; nl != NULL; cnt++, nl = nl->next)
- ;
-
- if (cnt == 0) {
- *ppp = NULL;
- return (0);
- }
- size = sizeof(*pp) * cnt;
- if ((ret = __os_malloc(NULL, size, NULL, ppp)) != 0)
- return (ret);
- memset(*ppp, 0, size);
- for (pp = *ppp, nl = locp; nl != NULL; nl = nl->next, pp++) {
- *pp = *(u_int32_t *)nl->ent.ent_val;
- }
- return (0);
-out:
- __db_db_stat_statsfree(*ppp);
- return (ret);
-}
+ int ret;
+ u_int32_t count;
-void
-__db_db_stat_statsfree(pp)
- u_int32_t *pp;
-{
- size_t size;
- u_int32_t *p;
-
- if (pp == NULL)
- return;
- size = sizeof(*p);
- for (p = pp; *p != 0; p++) {
- size += sizeof(*p);
- }
- __os_free(pp, size);
+ if (replyp->status != 0)
+ return (replyp->status);
+ count = replyp->count;
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_cursor_ret __P((DB *, DB_TXN *, DBC **, u_int32_t,
+ * PUBLIC: __db_cursor_reply *));
+ */
int
__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
DB * dbp;
@@ -392,6 +544,10 @@ __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_join_ret __P((DB *, DBC **, DBC **, u_int32_t,
+ * PUBLIC: __db_join_reply *));
+ */
int
__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
DB * dbp;
@@ -414,6 +570,9 @@ __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_close_ret __P((DBC *, __dbc_close_reply *));
+ */
int
__dbcl_dbc_close_ret(dbc, replyp)
DBC * dbc;
@@ -431,6 +590,10 @@ __dbcl_dbc_close_ret(dbc, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_count_ret __P((DBC *, db_recno_t *, u_int32_t,
+ * PUBLIC: __dbc_count_reply *));
+ */
int
__dbcl_dbc_count_ret(dbc, countp, flags, replyp)
DBC * dbc;
@@ -452,6 +615,10 @@ __dbcl_dbc_count_ret(dbc, countp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_dup_ret __P((DBC *, DBC **, u_int32_t,
+ * PUBLIC: __dbc_dup_reply *));
+ */
int
__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
DBC * dbc;
@@ -473,6 +640,10 @@ __dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_get_ret __P((DBC *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_get_reply *));
+ */
int
__dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
DBC * dbc;
@@ -497,6 +668,41 @@ __dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_pget_reply *));
+ */
+int
+__dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp)
+ DBC * dbc;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+ __dbc_pget_reply *replyp;
+{
+ int ret;
+ /* DBT skey; */
+ /* DBT pkey; */
+ /* DBT data; */
+
+ if (replyp->status != 0)
+ return (replyp->status);
+ /* Handle replyp->skeydata; */
+ /* Handle replyp->pkeydata; */
+ /* Handle replyp->datadata; */
+
+ /*
+ * XXX Code goes here
+ */
+
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_dbc_put_ret __P((DBC *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_put_reply *));
+ */
int
__dbcl_dbc_put_ret(dbc, key, data, flags, replyp)
DBC * dbc;
diff --git a/db/dist/template/rec_db b/db/dist/template/rec_db
index 69d941351..d5245d4b5 100644
--- a/db/dist/template/rec_db
+++ b/db/dist/template/rec_db
@@ -7,9 +7,9 @@
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db.h"
-#include "log.h"
+#include "dbinc/db_page.h"
+#include "dbinc/__db.h"
+#include "dbinc/log.h"
/*
* __db_addrem_recover --
@@ -34,11 +34,11 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
int cmp_n, cmp_p, modified, ret;
REC_PRINT(__db_addrem_print);
- REC_INTRO(__db_addrem_read);
+ REC_INTRO(__db_addrem_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -64,7 +64,7 @@ __db_addrem_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -74,33 +74,33 @@ out: REC_CLOSE;
}
/*
- * __db_split_recover --
- * Recovery function for split.
+ * __db_big_recover --
+ * Recovery function for big.
*
- * PUBLIC: int __db_split_recover
+ * PUBLIC: int __db_big_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_split_recover(dbenv, dbtp, lsnp, op, info)
+__db_big_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_split_args *argp;
+ __db_big_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_split_print);
- REC_INTRO(__db_split_read);
+ REC_PRINT(__db_big_print);
+ REC_INTRO(__db_big_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -126,7 +126,7 @@ __db_split_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -136,33 +136,33 @@ out: REC_CLOSE;
}
/*
- * __db_big_recover --
- * Recovery function for big.
+ * __db_ovref_recover --
+ * Recovery function for ovref.
*
- * PUBLIC: int __db_big_recover
+ * PUBLIC: int __db_ovref_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_big_recover(dbenv, dbtp, lsnp, op, info)
+__db_ovref_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_big_args *argp;
+ __db_ovref_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_big_print);
- REC_INTRO(__db_big_read);
+ REC_PRINT(__db_ovref_print);
+ REC_INTRO(__db_ovref_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -188,7 +188,7 @@ __db_big_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -198,33 +198,33 @@ out: REC_CLOSE;
}
/*
- * __db_ovref_recover --
- * Recovery function for ovref.
+ * __db_relink_recover --
+ * Recovery function for relink.
*
- * PUBLIC: int __db_ovref_recover
+ * PUBLIC: int __db_relink_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_ovref_recover(dbenv, dbtp, lsnp, op, info)
+__db_relink_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_ovref_args *argp;
+ __db_relink_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_ovref_print);
- REC_INTRO(__db_ovref_read);
+ REC_PRINT(__db_relink_print);
+ REC_INTRO(__db_relink_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -250,7 +250,7 @@ __db_ovref_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -260,33 +260,33 @@ out: REC_CLOSE;
}
/*
- * __db_relink_recover --
- * Recovery function for relink.
+ * __db_debug_recover --
+ * Recovery function for debug.
*
- * PUBLIC: int __db_relink_recover
+ * PUBLIC: int __db_debug_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_relink_recover(dbenv, dbtp, lsnp, op, info)
+__db_debug_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_relink_args *argp;
+ __db_debug_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_relink_print);
- REC_INTRO(__db_relink_read);
+ REC_PRINT(__db_debug_print);
+ REC_INTRO(__db_debug_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -312,7 +312,7 @@ __db_relink_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -322,33 +322,33 @@ out: REC_CLOSE;
}
/*
- * __db_addpage_recover --
- * Recovery function for addpage.
+ * __db_noop_recover --
+ * Recovery function for noop.
*
- * PUBLIC: int __db_addpage_recover
+ * PUBLIC: int __db_noop_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_addpage_recover(dbenv, dbtp, lsnp, op, info)
+__db_noop_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_addpage_args *argp;
+ __db_noop_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_addpage_print);
- REC_INTRO(__db_addpage_read);
+ REC_PRINT(__db_noop_print);
+ REC_INTRO(__db_noop_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -374,7 +374,7 @@ __db_addpage_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -384,33 +384,33 @@ out: REC_CLOSE;
}
/*
- * __db_debug_recover --
- * Recovery function for debug.
+ * __db_pg_alloc_recover --
+ * Recovery function for pg_alloc.
*
- * PUBLIC: int __db_debug_recover
+ * PUBLIC: int __db_pg_alloc_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_debug_recover(dbenv, dbtp, lsnp, op, info)
+__db_pg_alloc_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_debug_args *argp;
+ __db_pg_alloc_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_debug_print);
- REC_INTRO(__db_debug_read);
+ REC_PRINT(__db_pg_alloc_print);
+ REC_INTRO(__db_pg_alloc_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -436,7 +436,7 @@ __db_debug_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
@@ -446,33 +446,281 @@ out: REC_CLOSE;
}
/*
- * __db_noop_recover --
- * Recovery function for noop.
+ * __db_pg_free_recover --
+ * Recovery function for pg_free.
*
- * PUBLIC: int __db_noop_recover
+ * PUBLIC: int __db_pg_free_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
-__db_noop_recover(dbenv, dbtp, lsnp, op, info)
+__db_pg_free_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops op;
void *info;
{
- __db_noop_args *argp;
+ __db_pg_free_args *argp;
DB *file_dbp;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
int cmp_n, cmp_p, modified, ret;
- REC_PRINT(__db_noop_print);
- REC_INTRO(__db_noop_read);
+ REC_PRINT(__db_pg_free_print);
+ REC_INTRO(__db_pg_free_read, 1);
+
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if (DB_REDO(op)) {
+ if ((ret = mpf->get(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ } else {
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+ goto out;
+ }
+
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+
+ /*
+ * Use this when there is something like "pagelsn" in the argp
+ * structure. Sometimes, you might need to compare meta-data
+ * lsn's instead.
+ *
+ * cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
+ */
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ modified = 1;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /* Need to undo update described. */
+ modified = 1;
+ }
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ goto out;
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __db_cksum_recover --
+ * Recovery function for cksum.
+ *
+ * PUBLIC: int __db_cksum_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_cksum_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_cksum_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_cksum_print);
+ REC_INTRO(__db_cksum_read, 1);
+
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if (DB_REDO(op)) {
+ if ((ret = mpf->get(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ } else {
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+ goto out;
+ }
+
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+
+ /*
+ * Use this when there is something like "pagelsn" in the argp
+ * structure. Sometimes, you might need to compare meta-data
+ * lsn's instead.
+ *
+ * cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
+ */
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ modified = 1;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /* Need to undo update described. */
+ modified = 1;
+ }
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ goto out;
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __db_pg_freedata_recover --
+ * Recovery function for pg_freedata.
+ *
+ * PUBLIC: int __db_pg_freedata_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_freedata_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_freedata_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_pg_freedata_print);
+ REC_INTRO(__db_pg_freedata_read, 1);
+
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if (DB_REDO(op)) {
+ if ((ret = mpf->get(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ } else {
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+ goto out;
+ }
+
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+
+ /*
+ * Use this when there is something like "pagelsn" in the argp
+ * structure. Sometimes, you might need to compare meta-data
+ * lsn's instead.
+ *
+ * cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
+ */
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ modified = 1;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /* Need to undo update described. */
+ modified = 1;
+ }
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ goto out;
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __db_pg_prepare_recover --
+ * Recovery function for pg_prepare.
+ *
+ * PUBLIC: int __db_pg_prepare_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_prepare_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_prepare_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_pg_prepare_print);
+ REC_INTRO(__db_pg_prepare_read, 1);
+
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if (DB_REDO(op)) {
+ if ((ret = mpf->get(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ } else {
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+ goto out;
+ }
+
+ modified = 0;
+ cmp_n = log_compare(lsnp, &LSN(pagep));
+
+ /*
+ * Use this when there is something like "pagelsn" in the argp
+ * structure. Sometimes, you might need to compare meta-data
+ * lsn's instead.
+ *
+ * cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
+ */
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Need to redo update described. */
+ modified = 1;
+ } else if (cmp_n == 0 && !DB_REDO(op)) {
+ /* Need to undo update described. */
+ modified = 1;
+ }
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ goto out;
+
+ *lsnp = argp->prev_lsn;
+ ret = 0;
+
+out: REC_CLOSE;
+}
+
+/*
+ * __db_pg_new_recover --
+ * Recovery function for pg_new.
+ *
+ * PUBLIC: int __db_pg_new_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__db_pg_new_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __db_pg_new_args *argp;
+ DB *file_dbp;
+ DBC *dbc;
+ DB_MPOOLFILE *mpf;
+ PAGE *pagep;
+ int cmp_n, cmp_p, modified, ret;
+
+ REC_PRINT(__db_pg_new_print);
+ REC_INTRO(__db_pg_new_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0)
+ if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = mpf->get(mpf,
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
} else {
@@ -498,7 +746,7 @@ __db_noop_recover(dbenv, dbtp, lsnp, op, info)
/* Need to undo update described. */
modified = 1;
}
- if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
+ if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
goto out;
*lsnp = argp->prev_lsn;
diff --git a/db/dist/vx_2.0/BerkeleyDB.wpj b/db/dist/vx_2.0/BerkeleyDB.wpj
index 78684d900..692d1b40b 100644
--- a/db/dist/vx_2.0/BerkeleyDB.wpj
+++ b/db/dist/vx_2.0/BerkeleyDB.wpj
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUM_debug_BUILDRULE
-BerkeleyDB.out
+BerkeleyDB20.out
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB_sim.a
+$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB20_sim.a
<END>
<BEGIN> BUILD_PENTIUM_debug_MACRO_AS
@@ -109,7 +109,7 @@ size386
<END>
<BEGIN> BUILD_PENTIUM_release_BUILDRULE
-BerkeleyDB.out
+BerkeleyDB20.out
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_AR
@@ -117,7 +117,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB_sim.a
+$(PRJ_DIR)/PENTIUMgnu/BerkeleyDB20_sim.a
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_AS
@@ -143,7 +143,7 @@ cc386
-DCPU=PENTIUM \
-O2 \
-I$(PRJ_DIR) \
- -I$(PRJ_DIR)/..
+ -I$(PRJ_DIR)/..
<END>
<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS_AS
@@ -217,11 +217,11 @@ size386
::tc_PENTIUMgnu
<END>
-<BEGIN> BUILD_RULE_BerkeleyDB.out
+<BEGIN> BUILD_RULE_BerkeleyDB20.out
<END>
-<BEGIN> BUILD_RULE_BerkeleyDB_sim.out
+<BEGIN> BUILD_RULE_BerkeleyDB20_sim.out
<END>
diff --git a/db/dist/vx_2.0/wpj.in b/db/dist/vx_2.0/wpj.in
index 2b942bb56..a38cf7251 100644
--- a/db/dist/vx_2.0/wpj.in
+++ b/db/dist/vx_2.0/wpj.in
@@ -1,7 +1,7 @@
Document file - DO NOT EDIT
<BEGIN> BUILD_PENTIUMgnu_BUILDRULE
-__DB_APPLICATION_NAME__.out
+__DB_APPLICATION_NAME__20.out
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AR
@@ -9,7 +9,7 @@ ar386
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_ARCHIVE
-$(PRJ_DIR)/PENTIUMgnu/__DB_APPLICATION_NAME__.a
+$(PRJ_DIR)/PENTIUMgnu/__DB_APPLICATION_NAME__20.a
<END>
<BEGIN> BUILD_PENTIUMgnu_MACRO_AS
@@ -111,7 +111,7 @@ size386
<END>
-<BEGIN> BUILD_RULE___DB_APPLICATION_NAME__.out
+<BEGIN> BUILD_RULE___DB_APPLICATION_NAME__20.out
<END>
diff --git a/db/dist/vx_2.2/BerkeleyDB.wpj b/db/dist/vx_2.2/BerkeleyDB.wpj
new file mode 100644
index 000000000..e27a231f7
--- /dev/null
+++ b/db/dist/vx_2.2/BerkeleyDB.wpj
@@ -0,0 +1,310 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM_debug_BUILDRULE
+BerkeleyDB22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM_debug/BerkeleyDB22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu \
+ -O0 \
+ -I$(PRJ_DIR) \
+ -I$(PRJ_DIR)/.. \
+ -DDIAGNOSTIC \
+ -DDEBUG
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM_debug_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_BUILDRULE
+BerkeleyDB22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM_release/BerkeleyDB22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu \
+ -O2 \
+ -I$(PRJ_DIR) \
+ -I$(PRJ_DIR)/..
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM_release_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_BerkeleyDB22.out
+
+<END>
+
+<BEGIN> BUILD_RULE_BerkeleyDB22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM_debug
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM_release PENTIUM_debug
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
diff --git a/db/dist/vx_2.2/wpj.in b/db/dist/vx_2.2/wpj.in
new file mode 100644
index 000000000..d883ef2b1
--- /dev/null
+++ b/db/dist/vx_2.2/wpj.in
@@ -0,0 +1,194 @@
+Document file - DO NOT EDIT
+
+<BEGIN> BUILD_PENTIUM2gnu_BUILDRULE
+__DB_APPLICATION_NAME__22.out
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AR
+arpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_ARCHIVE
+$(PRJ_DIR)/PENTIUM2gnu/__DB_APPLICATION_NAME__22.a
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_AS
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC
+ccpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CC_ARCH_SPEC
+-mcpu=pentiumpro -march=pentiumpro
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -DRW_MULTI_THREAD \
+ -D_REENTRANT \
+ -fvolatile \
+ -fno-builtin \
+ -fno-defer-pop \
+ -I$(PRJ_DIR)/.. \
+ -I$(PRJ_DIR)/../.. \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CFLAGS_AS
+-g \
+ -mcpu=pentiumpro \
+ -march=pentiumpro \
+ -ansi \
+ -nostdlib \
+ -fno-builtin \
+ -fno-defer-pop \
+ -P \
+ -xassembler-with-cpp \
+ -I$(WIND_BASE)/target/h \
+ -DCPU=PENTIUM2 \
+ -DTOOL_FAMILY=gnu \
+ -DTOOL=gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_CPP
+ccpentium -E -P
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_HEX_FLAGS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD
+ldpentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LDFLAGS
+-X -N
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL
+ccpentium -r -nostdlib -Wl,-X
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_LD_PARTIAL_FLAGS
+-X -r
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_NM
+nmpentium -g
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEFINE_MACRO
+-D
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_DEPEND
+-M -w
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_GENERATE_DEPENDENCY_FILE
+-MD
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_INCLUDE_DIR
+-I
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_LANG_C
+-xc
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_OPTION_UNDEFINE_MACRO
+-U
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_POST_BUILD_RULE
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_PRJ_LIBS
+
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_SIZE
+sizepentium
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_MACRO_TOOL_FAMILY
+gnu
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_RO_DEPEND_PATH
+{$(WIND_BASE)/target/h/} \
+ {$(WIND_BASE)/target/src/} \
+ {$(WIND_BASE)/target/config/}
+<END>
+
+<BEGIN> BUILD_PENTIUM2gnu_TC
+::tc_PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD_RULE_archive
+
+<END>
+
+<BEGIN> BUILD_RULE___DB_APPLICATION_NAME__22.out
+
+<END>
+
+<BEGIN> BUILD_RULE___DB_APPLICATION_NAME__22.pl
+
+<END>
+
+<BEGIN> BUILD_RULE_objects
+
+<END>
+
+<BEGIN> BUILD__CURRENT
+PENTIUM2gnu
+<END>
+
+<BEGIN> BUILD__LIST
+PENTIUM2gnu
+<END>
+
+<BEGIN> CORE_INFO_TYPE
+::prj_vxApp
+<END>
+
+<BEGIN> CORE_INFO_VERSION
+2.2
+<END>
+
+<BEGIN> FILE___DB_APPLICATION_NAME__.c_dependDone
+FALSE
+<END>
+
+<BEGIN> FILE___DB_APPLICATION_NAME__.c_dependencies
+
+<END>
+
+<BEGIN> FILE___DB_APPLICATION_NAME__.c_objects
+__DB_APPLICATION_NAME__.o
+<END>
+
+<BEGIN> FILE___DB_APPLICATION_NAME__.c_tool
+C/C++ compiler
+<END>
+
+<BEGIN> PROJECT_FILES
+$(PRJ_DIR)/__DB_APPLICATION_NAME__.c
+<END>
+
+<BEGIN> userComments
+__DB_APPLICATION_NAME__
+<END>
diff --git a/db/dist/vx_3.1/component.cdf b/db/dist/vx_3.1/component.cdf
index 91edaa878..3b603968a 100644
--- a/db/dist/vx_3.1/component.cdf
+++ b/db/dist/vx_3.1/component.cdf
@@ -9,8 +9,8 @@
/* Component information */
Component INCLUDE___DB_CAPAPPL_NAME__ {
- ENTRY_POINTS ALL_GLOBAL_SYMBOLS
- MODULES __DB_APPLICATION_NAME__.o
+ ENTRY_POINTS ALL_GLOBAL_SYMBOLS
+ MODULES __DB_APPLICATION_NAME__.o
NAME __DB_APPLICATION_NAME__
PREF_DOMAIN ANY
_INIT_ORDER usrComponentsInit
diff --git a/db/dist/vx_3.1/wpj.4 b/db/dist/vx_3.1/wpj.4
index 84de6ebf3..febc6c429 100644
--- a/db/dist/vx_3.1/wpj.4
+++ b/db/dist/vx_3.1/wpj.4
@@ -1,13 +1,13 @@
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_infoTags
toolMacro objects
-<END>
+<END>
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_objects
compConfig.o
-<END>
+<END>
<BEGIN> BUILD_PENTIUMgnu.debug_FILE_$(PRJ_DIR)/compConfig.c_toolMacro
-CC
+CC
<END>
<BEGIN> BUILD_PENTIUMgnu.debug_MACRO_AR
diff --git a/db/dist/vx_buildcd b/db/dist/vx_buildcd
index 477fede4c..a94d78db9 100755
--- a/db/dist/vx_buildcd
+++ b/db/dist/vx_buildcd
@@ -1,5 +1,5 @@
#!/bin/sh
-# Id: vx_buildcd,v 1.6 2001/11/05 21:05:58 sue Exp
+# $Id: vx_buildcd,v 1.6 2001/11/05 21:05:58 sue Exp $
#
# Build the Setup SDK CD image on the VxWorks host machine.
diff --git a/db/dist/vx_config.in b/db/dist/vx_config.in
index 5f456b7e8..e05d46984 100644
--- a/db/dist/vx_config.in
+++ b/db/dist/vx_config.in
@@ -5,6 +5,12 @@
/* Define to 1 if you want to build a version for running the test suite. */
/* #undef CONFIG_TEST */
+/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
+ an operating system environment that supports Win32 calls and semantics. We
+ don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
+ Cygwin/GCC closely emulates the Unix environment. */
+/* #undef DB_WIN32 */
+
/* !!!
* The DEBUG option may be added using the Tornado project build.
* DO NOT modify it here.
@@ -56,12 +62,18 @@
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
+/* Define to 1 if you have the `getrusage' function. */
+/* #undef HAVE_GETRUSAGE */
+
/* Define to 1 if you have the `gettimeofday' function. */
/* #undef HAVE_GETTIMEOFDAY */
/* Define to 1 if you have the `getuid' function. */
/* #undef HAVE_GETUID */
+/* Define to 1 if building Hash access method. */
+#define HAVE_HASH 1
+
/* Define to 1 if you have the <inttypes.h> header file. */
/* #undef HAVE_INTTYPES_H */
@@ -104,6 +116,9 @@
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
+/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
+/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
+
/* Define to 1 to use the UNIX fcntl system call mutexes. */
/* #undef HAVE_MUTEX_FCNTL */
@@ -120,12 +135,9 @@
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
-/* Define to 1 to use the GCC compiler and Apple PowerPC assembly language. */
-/* #undef HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY */
-
-/* Define to 1 to use the GCC compiler and generic PowerPC assembly language.
+/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
*/
-/* #undef HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY */
+/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
/* #undef HAVE_MUTEX_PTHREADS */
@@ -133,6 +145,10 @@
/* Define to 1 to use Reliant UNIX initspin mutexes. */
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
+/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
+ */
+/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
@@ -163,6 +179,9 @@
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
+/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
+
/* Define to 1 to use the UNIX International mutexes. */
/* #undef HAVE_MUTEX_UI_THREADS */
@@ -175,9 +194,12 @@
/* Define to 1 to use VxWorks mutexes. */
#define HAVE_MUTEX_VXWORKS 1
-/* Define to 1 to use Windows mutexes. */
+/* Define to 1 to use the MSVC compiler and Windows mutexes. */
/* #undef HAVE_MUTEX_WIN32 */
+/* Define to 1 to use the GCC compiler and Windows mutexes. */
+/* #undef HAVE_MUTEX_WIN32_GCC */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -199,12 +221,15 @@
/* Define to 1 if building on QNX. */
/* #undef HAVE_QNX */
-/* Define to 1 if you have the `qsort' function. */
-#define HAVE_QSORT 1
+/* Define to 1 if building Queue access method. */
+#define HAVE_QUEUE 1
/* Define to 1 if you have the `raise' function. */
#define HAVE_RAISE 1
+/* Define to 1 if building replication support. */
+#define HAVE_REPLICATION 1
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -254,6 +279,9 @@
*/
/* #undef HAVE_SYS_DIR_H */
+/* Define to 1 if you have the <sys/fcntl.h> header file. */
+/* #undef HAVE_SYS_FCNTL_H */
+
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/
/* #undef HAVE_SYS_NDIR_H */
@@ -276,6 +304,9 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
#define HAVE_UNLINK_WITH_OPEN_FAILURE 1
+/* Define to 1 if building access method verification support. */
+#define HAVE_VERIFY 1
+
/* Define to 1 if you have the `vsnprintf' function. */
/* #undef HAVE_VSNPRINTF */
@@ -288,6 +319,9 @@
/* Define to 1 if you have the `_fstati64' function. */
/* #undef HAVE__FSTATI64 */
+/* Define to a value if using non-standard mutex alignment. */
+/* #undef MUTEX_ALIGN */
+
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "support@sleepycat.com"
diff --git a/db/dist/vx_setup/CONFIG.in b/db/dist/vx_setup/CONFIG.in
index 6ccceee70..1fccd1d2e 100644
--- a/db/dist/vx_setup/CONFIG.in
+++ b/db/dist/vx_setup/CONFIG.in
@@ -1,4 +1,4 @@
-#
+#
# Install configuration file.
#
# Note: This file may be modified during the pool manufacturing process to
diff --git a/db/dist/vx_setup/LICENSE.TXT b/db/dist/vx_setup/LICENSE.TXT
index 7814c679c..463fb66d2 100644
--- a/db/dist/vx_setup/LICENSE.TXT
+++ b/db/dist/vx_setup/LICENSE.TXT
@@ -1,3 +1,3 @@
-Copyright (c) 1996-2002
+Copyright (c) 1996-2003
Sleepycat Software. All rights reserved.
See the file LICENSE for redistribution information.
diff --git a/db/dist/vx_setup/vx_allfile.in b/db/dist/vx_setup/vx_allfile.in
index 61a1b8ee8..8d87fa97b 100644
--- a/db/dist/vx_setup/vx_allfile.in
+++ b/db/dist/vx_setup/vx_allfile.in
@@ -1,5 +1,7 @@
-windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB.wpj
-windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB.wsp
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB20.wpj
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB20.wsp
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB20.wpj
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/BerkeleyDB22.wsp
windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/db.h
windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/db_config.h
windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/db_int.h
diff --git a/db/dist/vx_setup/vx_demofile.in b/db/dist/vx_setup/vx_demofile.in
index 42a698ea3..772f4cb4b 100644
--- a/db/dist/vx_setup/vx_demofile.in
+++ b/db/dist/vx_setup/vx_demofile.in
@@ -1,3 +1,4 @@
-windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/dbdemo/dbdemo.wpj
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/dbdemo/dbdemo20.wpj
+windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/dbdemo/dbdemo22.wpj
windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/dbdemo/README
windlink/sleepycat/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@DB_VERSION_PATCH@/build_vxworks/dbdemo/dbdemo.c
diff --git a/db/dist/win_config.in b/db/dist/win_config.in
index 52f3e5bf8..b4404d2fb 100644
--- a/db/dist/win_config.in
+++ b/db/dist/win_config.in
@@ -1,6 +1,12 @@
/* Define to 1 if you want to build a version for running the test suite. */
/* #undef CONFIG_TEST */
+/* We use DB_WIN32 much as one would use _WIN32 -- to specify that we're using
+ an operating system environment that supports Win32 calls and semantics. We
+ don't use _WIN32 because Cygwin/GCC also defines _WIN32, even though
+ Cygwin/GCC closely emulates the Unix environment. */
+#define DB_WIN32 1
+
/* Define to 1 if you want a debugging version. */
/* #undef DEBUG */
#if defined(_DEBUG)
@@ -22,7 +28,9 @@
/* #undef HAVE_CLOCK_GETTIME */
/* Define to 1 if Berkeley DB release includes strong cryptography. */
+#ifndef HAVE_SMALLBUILD
#define HAVE_CRYPTO 1
+#endif
/* Define to 1 if you have the `directio' function. */
/* #undef HAVE_DIRECTIO */
@@ -49,12 +57,20 @@
/* Define to 1 if you have the `getopt' function. */
/* #undef HAVE_GETOPT */
+/* Define to 1 if you have the `getrusage' function. */
+/* #undef HAVE_GETRUSAGE */
+
/* Define to 1 if you have the `gettimeofday' function. */
/* #undef HAVE_GETTIMEOFDAY */
/* Define to 1 if you have the `getuid' function. */
/* #undef HAVE_GETUID */
+/* Define to 1 if building Hash access method. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_HASH 1
+#endif
+
/* Define to 1 if you have the <inttypes.h> header file. */
/* #undef HAVE_INTTYPES_H */
@@ -97,6 +113,9 @@
/* Define to 1 to use the GCC compiler and ARM assembly language mutexes. */
/* #undef HAVE_MUTEX_ARM_GCC_ASSEMBLY */
+/* Define to 1 to use the Apple/Darwin _spin_lock_try mutexes. */
+/* #undef HAVE_MUTEX_DARWIN_SPIN_LOCK_TRY */
+
/* Define to 1 to use the UNIX fcntl system call mutexes. */
/* #undef HAVE_MUTEX_FCNTL */
@@ -113,12 +132,9 @@
/* Define to 1 to use the msem_XXX mutexes on systems other than HP-UX. */
/* #undef HAVE_MUTEX_MSEM_INIT */
-/* Define to 1 to use the GCC compiler and Apple PowerPC assembly language. */
-/* #undef HAVE_MUTEX_PPC_APPLE_GCC_ASSEMBLY */
-
-/* Define to 1 to use the GCC compiler and generic PowerPC assembly language.
+/* Define to 1 to use the GCC compiler and PowerPC assembly language mutexes.
*/
-/* #undef HAVE_MUTEX_PPC_GENERIC_GCC_ASSEMBLY */
+/* #undef HAVE_MUTEX_PPC_GCC_ASSEMBLY */
/* Define to 1 to use POSIX 1003.1 pthread_XXX mutexes. */
/* #undef HAVE_MUTEX_PTHREADS */
@@ -126,6 +142,10 @@
/* Define to 1 to use Reliant UNIX initspin mutexes. */
/* #undef HAVE_MUTEX_RELIANTUNIX_INITSPIN */
+/* Define to 1 to use the IBM C compiler and S/390 assembly language mutexes.
+ */
+/* #undef HAVE_MUTEX_S390_CC_ASSEMBLY */
+
/* Define to 1 to use the GCC compiler and S/390 assembly language mutexes. */
/* #undef HAVE_MUTEX_S390_GCC_ASSEMBLY */
@@ -156,6 +176,9 @@
/* Define to 1 to configure mutexes intra-process only. */
/* #undef HAVE_MUTEX_THREAD_ONLY */
+/* Define to 1 to use the CC compiler and Tru64 assembly language mutexes. */
+/* #undef HAVE_MUTEX_TRU64_CC_ASSEMBLY */
+
/* Define to 1 to use the UNIX International mutexes. */
/* #undef HAVE_MUTEX_UI_THREADS */
@@ -168,9 +191,12 @@
/* Define to 1 to use VxWorks mutexes. */
/* #undef HAVE_MUTEX_VXWORKS */
-/* Define to 1 to use Windows mutexes. */
+/* Define to 1 to use the MSVC compiler and Windows mutexes. */
#define HAVE_MUTEX_WIN32 1
+/* Define to 1 to use the GCC compiler and Windows mutexes. */
+/* #undef HAVE_MUTEX_WIN32_GCC */
+
/* Define to 1 to use the GCC compiler and x86 assembly language mutexes. */
/* #undef HAVE_MUTEX_X86_GCC_ASSEMBLY */
@@ -192,12 +218,19 @@
/* Define to 1 if building on QNX. */
/* #undef HAVE_QNX */
-/* Define to 1 if you have the `qsort' function. */
-#define HAVE_QSORT 1
+/* Define to 1 if building Queue access method. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_QUEUE 1
+#endif
/* Define to 1 if you have the `raise' function. */
#define HAVE_RAISE 1
+/* Define to 1 if building replication support. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_REPLICATION 1
+#endif
+
/* Define to 1 if building RPC client/server. */
/* #undef HAVE_RPC */
@@ -247,6 +280,9 @@
*/
/* #undef HAVE_SYS_DIR_H */
+/* Define to 1 if you have the <sys/fcntl.h> header file. */
+#define HAVE_SYS_FCNTL_H 1
+
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/
/* #undef HAVE_SYS_NDIR_H */
@@ -269,6 +305,11 @@
/* Define to 1 if unlink of file with open file descriptors will fail. */
/* #undef HAVE_UNLINK_WITH_OPEN_FAILURE */
+/* Define to 1 if building access method verification support. */
+#ifndef HAVE_SMALLBUILD
+#define HAVE_VERIFY 1
+#endif
+
/* Define to 1 if you have the `vsnprintf' function. */
#define HAVE_VSNPRINTF 1
@@ -281,6 +322,9 @@
/* Define to 1 if you have the `_fstati64' function. */
#define HAVE__FSTATI64 1
+/* Define to a value if using non-standard mutex alignment. */
+/* #undef MUTEX_ALIGN */
+
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "support@sleepycat.com"
@@ -359,81 +403,13 @@
#define vsnprintf __db_Cvsnprintf
#endif
-/*
- * XXX
- * The following is not part of the automatic configuration setup, but
- * provides the information necessary to build Berkeley DB on Windows.
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <direct.h>
-#include <fcntl.h>
-#include <io.h>
-#include <limits.h>
-#include <memory.h>
-#include <process.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <errno.h>
-
-/*
- * To build Tcl interface libraries, the include path must be configured to
- * use the directory containing <tcl.h>, usually the include directory in
- * the Tcl distribution.
- */
-#ifdef DB_TCL_SUPPORT
-#include <tcl.h>
-#endif
-
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-
-/*
- * All of the necessary includes have been included, ignore the #includes
- * in the Berkeley DB source files.
- */
-#define NO_SYSTEM_INCLUDES
-
-/*
- * Win32 has getcwd, snprintf and vsnprintf, but under different names.
- */
-#define getcwd(buf, size) _getcwd(buf, size)
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
-
-/*
- * Win32 does not define getopt and friends in any header file, so we must.
- */
-#if defined(__cplusplus)
-extern "C" {
-#endif
-extern int optind;
-extern char *optarg;
-extern int getopt(int, char * const *, const char *);
-#if defined(__cplusplus)
-}
-#endif
-
-/*
- * We use DB_WIN32 much as one would use _WIN32, to determine that we're
- * using an operating system environment that supports Win32 calls
- * and semantics. We don't use _WIN32 because cygwin/gcc also defines
- * that, even though it closely emulates the Unix environment.
- */
-#define DB_WIN32 1
+#include "win_db.h"
/*
- * This is a grievous hack -- once we've included windows.h, we have no choice
- * but to use ANSI-style varargs (because it pulls in stdarg.h for us). DB's
- * code decides which type of varargs to use based on the state of __STDC__.
- * Sensible. Unfortunately, Microsoft's compiler _doesn't_ define __STDC__
- * unless you invoke it with arguments turning OFF all vendor extensions. Even
- * more unfortunately, if we do that, it fails to parse windows.h!!!!! So, we
- * define __STDC__ here, after windows.h comes in. Note: the compiler knows
- * we've defined it, and starts enforcing strict ANSI compilance from this point
- * on.
+ * Microsoft's compiler _doesn't_ define __STDC__ unless you invoke it with
+ * arguments turning OFF all vendor extensions. Even more unfortunately, if
+ * we do that, it fails to parse windows.h!!!!! So, we define __STDC__ here,
+ * after windows.h comes in. Note: the compiler knows we've defined it, and
+ * starts enforcing strict ANSI compilance from this point on.
*/
#define __STDC__ 1
diff --git a/db/dist/win_db.in b/db/dist/win_db.in
new file mode 100644
index 000000000..5f2ecbee1
--- /dev/null
+++ b/db/dist/win_db.in
@@ -0,0 +1,59 @@
+/*-
+ * $Id: win_db.in,v 11.1 2003/03/20 15:08:21 bostic Exp $
+ *
+ * The following provides the information necessary to build Berkeley
+ * DB on native Windows, and other Windows environments such as MinGW.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <direct.h>
+#include <fcntl.h>
+#include <io.h>
+#include <limits.h>
+#include <memory.h>
+#include <process.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <errno.h>
+
+/*
+ * To build Tcl interface libraries, the include path must be configured to
+ * use the directory containing <tcl.h>, usually the include directory in
+ * the Tcl distribution.
+ */
+#ifdef DB_TCL_SUPPORT
+#include <tcl.h>
+#endif
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+/*
+ * All of the necessary includes have been included, ignore the #includes
+ * in the Berkeley DB source files.
+ */
+#define NO_SYSTEM_INCLUDES
+
+/*
+ * Win32 has getcwd, snprintf and vsnprintf, but under different names.
+ */
+#define getcwd(buf, size) _getcwd(buf, size)
+#define snprintf _snprintf
+#define vsnprintf _vsnprintf
+
+/*
+ * Win32 does not define getopt and friends in any header file, so we must.
+ */
+#if defined(__cplusplus)
+extern "C" {
+#endif
+extern int optind;
+extern char *optarg;
+extern int getopt(int, char * const *, const char *);
+#if defined(__cplusplus)
+}
+#endif
diff --git a/db/dist/win_exports.in b/db/dist/win_exports.in
index 0ff425a5f..bf2b181ab 100644
--- a/db/dist/win_exports.in
+++ b/db/dist/win_exports.in
@@ -1,4 +1,4 @@
-# Id: win_exports.in,v 1.25 2002/08/29 14:22:21 margo Exp
+# $Id: win_exports.in,v 1.28 2003/06/30 21:50:10 mjc Exp $
# Standard interfaces.
db_create
@@ -7,9 +7,6 @@
db_version
db_xa_switch
log_compare
- txn_abort
- txn_begin
- txn_commit
# Library configuration interfaces.
db_env_set_func_close
@@ -71,6 +68,7 @@
__ham_func5
__ham_test
__lock_dump_region
+ __lock_id_set
__memp_dump_region
__os_calloc
__os_closehandle
@@ -84,6 +82,7 @@
__os_strdup
__os_umalloc
__os_write
+ __txn_id_set
#These are needed for linking tools or java.
__bam_init_print
@@ -104,6 +103,7 @@
__db_overwrite
__db_pgin
__db_pgout
+ __db_pr_callback
__db_prdbt
__db_prfooter
__db_prheader
@@ -113,7 +113,6 @@
__db_util_logset
__db_util_siginit
__db_util_sigresend
- __db_verify_callback
__db_verify_internal
__dbreg_init_print
__fop_init_print
diff --git a/db/docs/api_c/api_index.html b/db/docs/api_c/api_index.html
new file mode 100644
index 000000000..2c922718e
--- /dev/null
+++ b/db/docs/api_c/api_index.html
@@ -0,0 +1,168 @@
+<!--$Id: api_index.so,v 10.108 2003/10/18 19:15:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Berkeley DB: C API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<h3 align=center>Berkeley DB: C API</h3>
+<table border=1 align=center>
+<tr><th>Section</th><th>Method</th><th>Description</th></tr>
+<tr><td><b>Database Environment</b></td><td><a href="../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_err.html">DB_ENV-&gt;err</a></td><td>Error message with error string</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_err.html">DB_ENV-&gt;errx</a></td><td>Error message</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_open.html">DB_ENV-&gt;open</a></td><td>Open an environment</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a></td><td>Remove an environment</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_strerror.html">db_strerror</a></td><td>Error strings</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_version.html">db_version</a></td><td>Return version information</td></tr>
+<tr><td><b>Environment Configuration</b></td><td><a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a></td><td>Configure application recovery</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a></td><td>Set local space allocation functions</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a></td><td>Set the environment data directory</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a></td><td>Set verbose messages</td></tr>
+<tr><td><b>Database Operations</b></td><td><a href="../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_err.html">DB-&gt;err</a></td><td>Error message with error string</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_get.html">DB-&gt;get</a>, <a href="../api_c/db_get.html">DB-&gt;pget</a></td><td>Get items from a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return a handle for the underlying database environment</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_open.html">DB-&gt;open</a></td><td>Open a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_put.html">DB-&gt;put</a></td><td>Store items into a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_remove.html">DB-&gt;remove</a></td><td>Remove a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_rename.html">DB-&gt;rename</a></td><td>Rename a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_stat.html">DB-&gt;stat</a></td><td>Return database statistics</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_sync.html">DB-&gt;sync</a></td><td>Flush a database to stable storage</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_truncate.html">DB-&gt;truncate</a></td><td>Empty a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a></td><td>Upgrade a database</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_verify.html">DB-&gt;verify</a></td><td>Verify/salvage a database</td></tr>
+<tr><td><b>Database Configuration</b></td><td><a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a></td><td>Set local space allocation functions</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a></td><td>Set the database cache size</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a></td><td>General database configuration</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a></td><td>Set the underlying database page size</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<tr><td><b>Btree/Recno Configuration</b></td><td><a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a></td><td>Set record append callback</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a></td><td>Set the fixed-length record length</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a></td><td>Set the fixed-length record pad byte</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a></td><td>Set the backing Recno text file</td></tr>
+<tr><td><b>Hash Configuration</b></td><td><a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a></td><td>Set the Hash table density</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a></td><td>Set a hashing function</td></tr>
+<tr><td><br></td><td><a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a></td><td>Set the Hash table size</td></tr>
+<tr><td><b>Queue Configuration</b></td><td><a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
+<tr><td><b>Database Cursor Operations</b></td><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a></td><td>Return count of duplicates</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a></td><td>Delete by cursor</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a></td><td>Duplicate a cursor</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>, <a href="../api_c/dbc_get.html">DBcursor-&gt;c_pget</a></td><td>Retrieve by cursor</td></tr>
+<tr><td><br></td><td><a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a></td><td>Store by cursor</td></tr>
+<tr><td><b>Key/Data Pairs</b></td><td><a href="../api_c/dbt_class.html">DBT</a></td><td><br></td></tr>
+<tr><td><b>Bulk Retrieval</b></td><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a></td><td><br></td></tr>
+<tr><td><b>Lock Subsystem</b></td><td><a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a></td><td>Perform deadlock detection</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_get.html">DB_ENV-&gt;lock_get</a></td><td>Acquire a lock</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_id.html">DB_ENV-&gt;lock_id</a></td><td>Acquire a locker ID</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_id_free.html">DB_ENV-&gt;lock_id_free</a></td><td>Release a locker ID</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_put.html">DB_ENV-&gt;lock_put</a></td><td>Release a lock</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
+<tr><td><br></td><td><a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
+<tr><td><b>Log Subsystem</b></td><td><a href="../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a></td><td>Set log buffer size</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a></td><td>Set log file size</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a></td><td>Set logging region size</td></tr>
+<tr><td><br></td><td><a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
+<tr><td><br></td><td><a href="../api_c/log_file.html">DB_ENV-&gt;log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
+<tr><td><br></td><td><a href="../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<tr><td><br></td><td><a href="../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
+<tr><td><br></td><td><a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
+<tr><td><b>Log Cursor Operations</b></td><td><a href="../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a></td><td>Create a log cursor handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/logc_close.html">DB_LOGC-&gt;close</a></td><td>Close a log cursor</td></tr>
+<tr><td><br></td><td><a href="../api_c/logc_get.html">DB_LOGC-&gt;get</a></td><td>Retrieve a log record</td></tr>
+<tr><td><b>Log Sequence Numbers</b></td><td><a href="../api_c/lsn_class.html">DB_LSN</a></td><td><br></td></tr>
+<tr><td><br></td><td><a href="../api_c/log_compare.html">log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
+<tr><td><b>Memory Pool Subsystem</b></td><td><a href="../api_c/db_get_mpf.html">DB-&gt;mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a></td><td>Register input/output functions for a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
+<tr><td><b>Memory Pool Files</b></td><td><a href="../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a></td><td>Close a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a></td><td>Get page from a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a></td><td>Open a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a></td><td>Return a page to a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fset.html">DB_MPOOLFILE-&gt;set</a></td><td>Set memory pool page status</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a></td><td>Flush pages from a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a></td><td>Set file page bytes to be cleared</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_fileid.html">DB_MPOOLFILE-&gt;set_fileid</a></td><td>Set file unique identifier</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_flags.html">DB_MPOOLFILE-&gt;set_flags</a></td><td>General memory pool file configuration</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_ftype.html">DB_MPOOLFILE-&gt;set_ftype</a></td><td>Set file type</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_lsn_offset.html">DB_MPOOLFILE-&gt;set_lsn_offset</a></td><td>Set file log-sequence-number offset</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_maxsize.html">DB_MPOOLFILE-&gt;set_maxsize</a></td><td>Set the maximum file size</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_pgcookie.html">DB_MPOOLFILE-&gt;set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
+<tr><td><br></td><td><a href="../api_c/memp_set_priority.html">DB_MPOOLFILE-&gt;set_priority</a></td><td>Set the file priority</td></tr>
+<tr><td><b>Transaction Subsystem</b></td><td><a href="../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
+<tr><td><br></td><td><a href="../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a></td><td>Distributed transaction recovery</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
+<tr><td><b>Transactions</b></td><td><a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a></td><td>Begin a transaction</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a></td><td>Abort a transaction</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a></td><td>Commit a transaction</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_discard.html">DB_TXN-&gt;discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_id.html">DB_TXN-&gt;id</a></td><td>Return a transaction's ID</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<tr><td><br></td><td><a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a></td><td>Set transaction timeout</td></tr>
+<tr><td><b>Replication</b></td><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
+<tr><td><br></td><td><a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
+<tr><td><br></td><td><a href="../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<tr><td><br></td><td><a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></td><td>Process a replication message</td></tr>
+<tr><td><br></td><td><a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
+<tr><td><br></td><td><a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
+<tr><td><b>Historic Interfaces</b></td><td><a href="../api_c/dbm.html">dbm</a></td><td>UNIX Dbm/Ndbm Interfaces</td></tr>
+<tr><td><br></td><td><a href="../api_c/hsearch.html">hsearch</a></td><td>UNIX Hsearch Interfaces</td></tr>
+<tr><td><b>System Configuration</b></td><td><a href="../ref/program/runtime.html">Run-time configuration</a></td><td>Replace underlying Berkeley DB system interfaces</td></tr>
+</table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/c_index.html b/db/docs/api_c/c_index.html
deleted file mode 100644
index 4b6023c80..000000000
--- a/db/docs/api_c/c_index.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!--$Id: c_index.so,v 10.53 2000/12/21 19:11:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: C Interface by Function/Structure</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>C Interface by Function/Structure</h1>
-<p><table border=1 align=center>
-<tr><th>Database Environment</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_create.html">db_env_create</a></td><td>Create an environment handle</td></tr>
-<tr><td><a href="../api_c/env_close.html">DBENV-&gt;close</a></td><td>Close an environment</td></tr>
-<tr><td><a href="../api_c/db_err.html">DBENV-&gt;err</a></td><td>Error message with error string</td></tr>
-<tr><td><a href="../api_c/db_err.html">DBENV-&gt;errx</a></td><td>Error message</td></tr>
-<tr><td><a href="../api_c/env_open.html">DBENV-&gt;open</a></td><td>Open an environment</td></tr>
-<tr><td><a href="../api_c/env_remove.html">DBENV-&gt;remove</a></td><td>Remove an environment</td></tr>
-<tr><td><a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<tr><td><a href="../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a></td><td>Set the environment data directory</td></tr>
-<tr><td><a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
-<tr><td><a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><a href="../api_c/env_set_feedback.html">DBENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
-<tr><td><a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a></td><td>Turn off mutual exclusion locking</td></tr>
-<tr><td><a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
-<tr><td><a href="../api_c/env_set_rec_init.html">DBENV-&gt;set_recovery_init</a></td><td>Set recovery initialization callback</td></tr>
-<tr><td><a href="../api_c/env_set_server.html">DBENV-&gt;set_server</a></td><td>Establish server connection</td></tr>
-<tr><td><a href="../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
-<tr><td><a href="../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
-<tr><td><a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a></td><td>Set verbose messages</td></tr>
-<tr><td><a href="../api_c/env_strerror.html">db_strerror</a></td><td>Error strings</td></tr>
-<tr><td><a href="../api_c/env_version.html">db_version</a></td><td>Return version information</td></tr>
-<tr><th>Database Operations</th><th>Description</th></tr>
-<tr><td><a href="../api_c/db_create.html">db_create</a></td><td>Create a database handle</td></tr>
-<tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
-<tr><td><a href="../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
-<tr><td><a href="../api_c/db_err.html">DB-&gt;err</a></td><td>Error message with error string</td></tr>
-<tr><td><a href="../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
-<tr><td><a href="../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
-<tr><td><a href="../api_c/db_get.html">DB-&gt;get</a></td><td>Get items from a database</td></tr>
-<tr><td><a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
-<tr><td><a href="../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
-<tr><td><a href="../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
-<tr><td><a href="../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
-<tr><td><a href="../api_c/db_open.html">DB-&gt;open</a></td><td>Open a database</td></tr>
-<tr><td><a href="../api_c/db_put.html">DB-&gt;put</a></td><td>Store items into a database</td></tr>
-<tr><td><a href="../api_c/db_remove.html">DB-&gt;remove</a></td><td>Remove a database</td></tr>
-<tr><td><a href="../api_c/db_rename.html">DB-&gt;rename</a></td><td>Rename a database</td></tr>
-<tr><td><a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a></td><td>Set record append callback</td></tr>
-<tr><td><a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
-<tr><td><a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
-<tr><td><a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
-<tr><td><a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a></td><td>Set the database cache size</td></tr>
-<tr><td><a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
-<tr><td><a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
-<tr><td><a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a></td><td>General database configuration</td></tr>
-<tr><td><a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a></td><td>Set the Hash table density</td></tr>
-<tr><td><a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a></td><td>Set a hashing function</td></tr>
-<tr><td><a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a></td><td>Set the Hash table size</td></tr>
-<tr><td><a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
-<tr><td><a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a></td><td>Set a local space allocation function</td></tr>
-<tr><td><a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a></td><td>Set the underlying database page size</td></tr>
-<tr><td><a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
-<tr><td><a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
-<tr><td><a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
-<tr><td><a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a></td><td>Set the fixed-length record length</td></tr>
-<tr><td><a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a></td><td>Set the fixed-length record pad byte</td></tr>
-<tr><td><a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a></td><td>Set the backing Recno text file</td></tr>
-<tr><td><a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a></td><td>Set a local space allocation function</td></tr>
-<tr><td><a href="../api_c/db_stat.html">DB-&gt;stat</a></td><td>Return database statistics</td></tr>
-<tr><td><a href="../api_c/db_sync.html">DB-&gt;sync</a></td><td>Flush a database to stable storage</td></tr>
-<tr><td><a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a></td><td>Upgrade a database</td></tr>
-<tr><td><a href="../api_c/db_verify.html">DB-&gt;verify</a></td><td>Verify/salvage a database</td></tr>
-<tr><th>Database Cursors</th><th>Description</th></tr>
-<tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Open a cursor into a database</td></tr>
-<tr><td><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
-<tr><td><a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a></td><td>Return count of duplicates</td></tr>
-<tr><td><a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a></td><td>Delete by cursor</td></tr>
-<tr><td><a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a></td><td>Duplicate a cursor</td></tr>
-<tr><td><a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a></td><td>Retrieve by cursor</td></tr>
-<tr><td><a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a></td><td>Store by cursor</td></tr>
-<tr><th>Lock Manager</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
-<tr><td><a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
-<tr><td><a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a></td><td>Set maximum number of locks (<b>Deprecated</b>)</td></tr>
-<tr><td><a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
-<tr><td><a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
-<tr><td><a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
-<tr><td><a href="../api_c/lock_detect.html">lock_detect</a></td><td>Perform deadlock detection</td></tr>
-<tr><td><a href="../api_c/lock_get.html">lock_get</a></td><td>Acquire a lock</td></tr>
-<tr><td><a href="../api_c/lock_id.html">lock_id</a></td><td>Acquire a locker ID</td></tr>
-<tr><td><a href="../api_c/lock_put.html">lock_put</a></td><td>Release a lock</td></tr>
-<tr><td><a href="../api_c/lock_stat.html">lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
-<tr><td><a href="../api_c/lock_vec.html">lock_vec</a></td><td>Acquire/release locks</td></tr>
-<tr><th>Log Manager</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a></td><td>Set log buffer size</td></tr>
-<tr><td><a href="../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
-<tr><td><a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a></td><td>Set log file size</td></tr>
-<tr><td><a href="../api_c/log_archive.html">log_archive</a></td><td>List log and database files</td></tr>
-<tr><td><a href="../api_c/log_compare.html">log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
-<tr><td><a href="../api_c/log_file.html">log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
-<tr><td><a href="../api_c/log_flush.html">log_flush</a></td><td>Flush log records</td></tr>
-<tr><td><a href="../api_c/log_get.html">log_get</a></td><td>Get a log record</td></tr>
-<tr><td><a href="../api_c/log_put.html">log_put</a></td><td>Write a log record</td></tr>
-<tr><td><a href="../api_c/log_register.html">log_register</a></td><td>Register a file name with the log manager</td></tr>
-<tr><td><a href="../api_c/log_stat.html">log_stat</a></td><td>Return log subsystem statistics</td></tr>
-<tr><td><a href="../api_c/log_unregister.html">log_unregister</a></td><td>Unregister a file name with the log manager</td></tr>
-<tr><th>Buffer Pool</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<tr><td><a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
-<tr><td><a href="../api_c/memp_fclose.html">memp_fclose</a></td><td>Close a file in a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_fget.html">memp_fget</a></td><td>Get a page from a file in a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_fopen.html">memp_fopen</a></td><td>Open a file in a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_fput.html">memp_fput</a></td><td>Return a page to a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_fset.html">memp_fset</a></td><td>Modify meta information for buffer pool page</td></tr>
-<tr><td><a href="../api_c/memp_fsync.html">memp_fsync</a></td><td>Flush pages from a file in a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_register.html">memp_register</a></td><td>Register input/output functions for a file in a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_stat.html">memp_stat</a></td><td>Return buffer pool statistics</td></tr>
-<tr><td><a href="../api_c/memp_sync.html">memp_sync</a></td><td>Flush pages from a buffer pool</td></tr>
-<tr><td><a href="../api_c/memp_trickle.html">memp_trickle</a></td><td>Trickle flush pages from a buffer pool</td></tr>
-<tr><th>Transaction Manager</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
-<tr><td><a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a></td><td>Set transaction abort recover function</td></tr>
-<tr><td><a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
-<tr><td><a href="../api_c/txn_abort.html">txn_abort</a></td><td>Abort a transaction</td></tr>
-<tr><td><a href="../api_c/txn_begin.html">txn_begin</a></td><td>Begin a transaction</td></tr>
-<tr><td><a href="../api_c/txn_checkpoint.html">txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
-<tr><td><a href="../api_c/txn_commit.html">txn_commit</a></td><td>Commit a transaction</td></tr>
-<tr><td><a href="../api_c/txn_id.html">txn_id</a></td><td>Return a transaction ID</td></tr>
-<tr><td><a href="../api_c/txn_prepare.html">txn_prepare</a></td><td>Prepare a transaction for commit</td></tr>
-<tr><td><a href="../api_c/txn_stat.html">txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
-<tr><th>Historic Interfaces</th><th>Description</th></tr>
-<tr><td><a href="../api_c/dbm.html">dbm</a></td><td>UNIX Dbm/Ndbm Interfaces</td></tr>
-<tr><td><a href="../api_c/hsearch.html">hsearch</a></td><td>UNIX Hsearch Interfaces</td></tr>
-<tr><th>Data Structures</th><th>Description</th></tr>
-<tr><td><a href="../api_c/dbt.html">DBT</a></td><td>DBT structures</td></tr>
-<tr><td><a href="../api_c/db_lsn.html">DB_LSN</a></td><td>DB_LSN structures</td></tr>
-<tr><th>DB Library Configuration</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_set_pageyield.html">db_env_set_pageyield</a></td><td>Yield the processor on each page access</td></tr>
-<tr><td><a href="../api_c/env_set_panicstate.html">db_env_set_panicstate</a></td><td>Reset panic state</td></tr>
-<tr><td><a href="../api_c/env_set_region_init.html">db_env_set_region_init</a></td><td>Fault in shared regions on initial access</td></tr>
-<tr><td><a href="../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
-<tr><th>DB System Call Configuration</th><th>Description</th></tr>
-<tr><td><a href="../api_c/set_func_close.html">db_env_set_func_close</a></td><td>Replace underlying Berkeley DB system interfaces</td></tr>
-<tr><td><a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_exists.html">db_env_set_func_exists</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_free.html">db_env_set_func_free</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_map.html">db_env_set_func_map</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_open.html">db_env_set_func_open</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_read.html">db_env_set_func_read</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_rename.html">db_env_set_func_rename</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_seek.html">db_env_set_func_seek</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_write.html">db_env_set_func_write</a></td><td><br></td></tr>
-<tr><td><a href="../api_c/set_func_yield.html">db_env_set_func_yield</a></td><td><br></td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_c/c_pindex.html b/db/docs/api_c/c_pindex.html
index 725bf0068..a0cefbaaa 100644
--- a/db/docs/api_c/c_pindex.html
+++ b/db/docs/api_c/c_pindex.html
@@ -1,528 +1,838 @@
<html>
<head>
-<title>Berkeley DB: C Interface Index</title>
+<title>Berkeley DB: C API Index</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>C Interface Index</h1>
+<h1 align=center>C API Index</h1>
<center>
<table cellspacing=0 cellpadding=0>
-<tr><td align=right> configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#5">1.85</a> API compatibility</td></tr>
-<tr><td align=right> building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> databases</td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
-<tr><td align=right> selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
-<tr><td align=right> data </td><td><a href="../api_c/dbt.html#5">alignment</a></td></tr>
-<tr><td align=right> programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_archive.html#3">archive</a> log files</td></tr>
-<tr><td align=right> </td><td><a href="../utility/berkeley_db_svc.html#2">berkeley_db_svc</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/byteorder.html#2">byte</a> ordering</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#6">C++</a> API</td></tr>
-<tr><td align=right> flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-cryptography">--disable-cryptography</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-hash">--disable-hash</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-queue">--disable-queue</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-replication">--disable-replication</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-shared">--disable-shared</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-static">--disable-static</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-verify">--disable-verify</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutex=MUTEX">--with-mutex=MUTEX</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutexalign=ALIGNMENT">--with-mutexalign=ALIGNMENT</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-rpm=ARCHIVE">--with-rpm=ARCHIVE</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
+<tr><td align=right>configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> API compatibility</td></tr>
+<tr><td align=right>building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#9">1.85</a> databases</td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.3/intro.html#2">3.3</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.0/intro.html#2">4.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.1/intro.html#2">4.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/cksum.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/client.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/del.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/intro.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/java.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/lockng.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/nosync.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/priority.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/queue.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/repinit.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/verify.html#2">4.2</a></td></tr>
+<tr><td align=right>selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#2">access</a> method FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/tune.html#2">access</a> method tuning</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
+<tr><td align=right>data </td><td><a href="../ref/am_misc/align.html#2">alignment</a></td></tr>
+<tr><td align=right>programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/archival.html#4">backup</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_bind.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_collection.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/overview.html#2">BDB</a></td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#4">buffer</a> pool subsystem</td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_c/memp_fopen.html#3">buffering</a></td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_c/env_set_flags.html#5">buffering</a> for database files</td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_c/env_set_flags.html#6">buffering</a> for log files</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#3">building</a> for QNX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/introae.html#2">building</a> for VxWorks AE</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbt_bulk.html#3">bulk</a> retrieval</td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#8">C++</a> API</td></tr>
+<tr><td align=right>flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
+<tr><td align=right>introduction to the memory </td><td><a href="../ref/mp/intro.html#3">cache</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
<tr><td align=right>Patches, Updates and </td><td><a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
-<tr><td align=right> utility to take </td><td><a href="../utility/db_checkpoint.html#3">checkpoints</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#clear_len">clear_len</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right> specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
-<tr><td align=right> changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
-<tr><td align=right> </td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> recovering </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
-<tr><td align=right> closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
-<tr><td align=right> deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
-<tr><td align=right> duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
-<tr><td align=right> retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
-<tr><td align=right> storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#data">data</a></td></tr>
-<tr><td align=right> utility to upgrade </td><td><a href="../utility/db_upgrade.html#3">database</a> files</td></tr>
-<tr><td align=right> utility to verify </td><td><a href="../utility/db_verify.html#3">database</a> files</td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
-<tr><td align=right>DB-&gt;verify</td><td><a href="../api_c/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a></td></tr>
-<tr><td align=right>DB-&gt;put</td><td><a href="../api_c/db_put.html#DB_APPEND">DB_APPEND</a></td></tr>
-<tr><td align=right>log_archive</td><td><a href="../api_c/log_archive.html#DB_ARCH_ABS">DB_ARCH_ABS</a></td></tr>
-<tr><td align=right>log_archive</td><td><a href="../api_c/log_archive.html#DB_ARCH_DATA">DB_ARCH_DATA</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_archive.html#2">db_archive</a></td></tr>
-<tr><td align=right>log_archive</td><td><a href="../api_c/log_archive.html#DB_ARCH_LOG">DB_ARCH_LOG</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
-<tr><td align=right>DB-&gt;stat</td><td><a href="../api_c/db_stat.html#DB_CACHED_COUNTS">DB_CACHED_COUNTS</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_flags</td><td><a href="../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_CHECKPOINT">DB_CHECKPOINT</a></td></tr>
-<tr><td align=right>log_put</td><td><a href="../api_c/log_put.html#DB_CHECKPOINT">DB_CHECKPOINT</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_checkpoint.html#2">db_checkpoint</a></td></tr>
-<tr><td align=right>db_env_create</td><td><a href="../api_c/env_create.html#DB_CLIENT">DB_CLIENT</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a></td></tr>
-<tr><td align=right>DB-&gt;get</td><td><a href="../api_c/db_get.html#DB_CONSUME">DB_CONSUME</a></td></tr>
-<tr><td align=right>DB-&gt;get</td><td><a href="../api_c/db_get.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_create.html#2">db_create</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>log_put</td><td><a href="../api_c/log_put.html#DB_CURLSN">DB_CURLSN</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_close.html#2">DBcursor-&gt;c_close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_count.html#2">DBcursor-&gt;c_count</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_del.html#2">DBcursor-&gt;c_del</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_dup.html#2">DBcursor-&gt;c_dup</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_get.html#2">DBcursor-&gt;c_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbc_put.html#2">DBcursor-&gt;c_put</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_deadlock.html#2">db_deadlock</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_dump.html#2">db_dump</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_DUP">DB_DUP</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
-<tr><td align=right>DB-&gt;upgrade</td><td><a href="../api_c/db_upgrade.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_create.html#2">db_env_create</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_close.html#2">DBENV-&gt;close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_err.html#2">DBENV-&gt;err</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_open.html#2">DBENV-&gt;open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_remove.html#2">DBENV-&gt;remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_cachesize.html#2">DBENV-&gt;set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_data_dir.html#2">DBENV-&gt;set_data_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_errcall.html#2">DBENV-&gt;set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_errfile.html#2">DBENV-&gt;set_errfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_errpfx.html#2">DBENV-&gt;set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_feedback.html#2">DBENV-&gt;set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_flags.html#2">DBENV-&gt;set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lg_bsize.html#2">DBENV-&gt;set_lg_bsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lg_dir.html#2">DBENV-&gt;set_lg_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lg_max.html#2">DBENV-&gt;set_lg_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_conflicts.html#2">DBENV-&gt;set_lk_conflicts</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_detect.html#2">DBENV-&gt;set_lk_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_max.html#2">DBENV-&gt;set_lk_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_max_lockers.html#2">DBENV-&gt;set_lk_max_lockers</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_max_locks.html#2">DBENV-&gt;set_lk_max_locks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_lk_max_objects.html#2">DBENV-&gt;set_lk_max_objects</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_mp_mmapsize.html#2">DBENV-&gt;set_mp_mmapsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_mutexlocks.html#2">DBENV-&gt;set_mutexlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_paniccall.html#2">DBENV-&gt;set_paniccall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_rec_init.html#2">DBENV-&gt;set_recovery_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_server.html#2">DBENV-&gt;set_server</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_shm_key.html#2">DBENV-&gt;set_shm_key</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_tmp_dir.html#2">DBENV-&gt;set_tmp_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_tx_max.html#2">DBENV-&gt;set_tx_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_tx_recover.html#2">DBENV-&gt;set_tx_recover</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_tx_timestamp.html#2">DBENV-&gt;set_tx_timestamp</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_verbose.html#2">DBENV-&gt;set_verbose</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_close.html#2">db_env_set_func_close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_dirfree.html#2">db_env_set_func_dirfree</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_dirlist.html#2">db_env_set_func_dirlist</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_exists.html#2">db_env_set_func_exists</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_free.html#2">db_env_set_func_free</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_fsync.html#2">db_env_set_func_fsync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_ioinfo.html#2">db_env_set_func_ioinfo</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_malloc.html#2">db_env_set_func_malloc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_map.html#2">db_env_set_func_map</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_open.html#2">db_env_set_func_open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_read.html#2">db_env_set_func_read</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_realloc.html#2">db_env_set_func_realloc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_rename.html#2">db_env_set_func_rename</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_seek.html#2">db_env_set_func_seek</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_sleep.html#2">db_env_set_func_sleep</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_unlink.html#2">db_env_set_func_unlink</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_unmap.html#2">db_env_set_func_unmap</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_write.html#2">db_env_set_func_write</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/set_func_yield.html#2">db_env_set_func_yield</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_pageyield.html#2">db_env_set_pageyield</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_panicstate.html#2">db_env_set_panicstate</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_region_init.html#2">db_env_set_region_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_set_tas_spins.html#2">db_env_set_tas_spins</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_FIRST">DB_FIRST</a></td></tr>
-<tr><td align=right>log_put</td><td><a href="../api_c/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
-<tr><td align=right>DBENV-&gt;remove</td><td><a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a></td></tr>
-<tr><td align=right>txn_checkpoint</td><td><a href="../api_c/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
-<tr><td align=right>DB-&gt;get</td><td><a href="../api_c/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_close.html#2">DB-&gt;close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_cursor.html#2">DB-&gt;cursor</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_del.html#2">DB-&gt;del</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_fd.html#2">DB-&gt;fd</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_get.html#2">DB-&gt;get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_get_byteswapped.html#2">DB-&gt;get_byteswapped</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_get_type.html#2">DB-&gt;get_type</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_join.html#2">DB-&gt;join</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_key_range.html#2">DB-&gt;key_range</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_open.html#2">DB-&gt;open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_put.html#2">DB-&gt;put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_remove.html#2">DB-&gt;remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_rename.html#2">DB-&gt;rename</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_append_recno.html#2">DB-&gt;set_append_recno</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_bt_compare.html#2">DB-&gt;set_bt_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_bt_minkey.html#2">DB-&gt;set_bt_minkey</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_bt_prefix.html#2">DB-&gt;set_bt_prefix</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_cachesize.html#2">DB-&gt;set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_dup_compare.html#2">DB-&gt;set_dup_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_errcall.html#2">DB-&gt;set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_errfile.html#2">DB-&gt;set_errfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_errpfx.html#2">DB-&gt;set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_feedback.html#2">DB-&gt;set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_flags.html#2">DB-&gt;set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_h_ffactor.html#2">DB-&gt;set_h_ffactor</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_h_hash.html#2">DB-&gt;set_h_hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_h_nelem.html#2">DB-&gt;set_h_nelem</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_lorder.html#2">DB-&gt;set_lorder</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_malloc.html#2">DB-&gt;set_malloc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_pagesize.html#2">DB-&gt;set_pagesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_paniccall.html#2">DB-&gt;set_paniccall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_q_extentsize.html#2">DB-&gt;set_q_extentsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_realloc.html#2">DB-&gt;set_realloc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_re_delim.html#2">DB-&gt;set_re_delim</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_re_len.html#2">DB-&gt;set_re_len</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_re_pad.html#2">DB-&gt;set_re_pad</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_set_re_source.html#2">DB-&gt;set_re_source</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_stat.html#2">DB-&gt;stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_sync.html#2">DB-&gt;sync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_upgrade.html#2">DB-&gt;upgrade</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_verify.html#2">DB-&gt;verify</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
-<tr><td align=right> DB-&gt;close </td><td><a href="../api_c/db_close.html#3">DB_INCOMPLETE</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
-<tr><td align=right>DB-&gt;join</td><td><a href="../api_c/db_join.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>DB-&gt;join</td><td><a href="../api_c/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_LAST">DB_LAST</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_load.html#2">db_load</a></td></tr>
-<tr><td align=right>lock_detect</td><td><a href="../api_c/lock_detect.html#DB_LOCK_CONFLICT">DB_LOCK_CONFLICT</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_lk_detect</td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_GET">DB_LOCK_GET</a></td></tr>
-<tr><td align=right>lock_get</td><td><a href="../api_c/lock_get.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>lock_get</td><td><a href="../api_c/lock_get.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_lk_detect</td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT">DB_LOCK_PUT</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_lk_detect</td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_lk_detect</td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/db_lsn.html#2">DB_LSN</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbm.html#2">dbm/ndbm</a></td></tr>
-<tr><td align=right>memp_fput</td><td><a href="../api_c/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
-<tr><td align=right>memp_fset</td><td><a href="../api_c/memp_fset.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
-<tr><td align=right>memp_fget</td><td><a href="../api_c/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a></td></tr>
-<tr><td align=right>memp_fput</td><td><a href="../api_c/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
-<tr><td align=right>memp_fset</td><td><a href="../api_c/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
-<tr><td align=right>memp_fput</td><td><a href="../api_c/memp_fput.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
-<tr><td align=right>memp_fset</td><td><a href="../api_c/memp_fset.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
-<tr><td align=right>memp_fget</td><td><a href="../api_c/memp_fget.html#DB_MPOOL_LAST">DB_MPOOL_LAST</a></td></tr>
-<tr><td align=right>memp_fget</td><td><a href="../api_c/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_NEXT">DB_NEXT</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a></td></tr>
-<tr><td align=right>DB-&gt;put</td><td><a href="../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_put</td><td><a href="../api_c/dbc_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_flags</td><td><a href="../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>DB-&gt;verify</td><td><a href="../api_c/db_verify.html#DB_NOORDERCHK">DB_NOORDERCHK</a></td></tr>
-<tr><td align=right>DB-&gt;put</td><td><a href="../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_server</td><td><a href="../api_c/env_set_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_server</td><td><a href="../api_c/env_set_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
-<tr><td align=right>DB-&gt;close</td><td><a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
-<tr><td align=right>DB-&gt;upgrade</td><td><a href="../api_c/db_upgrade.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
-<tr><td align=right>DB-&gt;verify</td><td><a href="../api_c/db_verify.html#DB_ORDERCHKONLY">DB_ORDERCHKONLY</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_dup</td><td><a href="../api_c/dbc_dup.html#DB_POSITION">DB_POSITION</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_PREV">DB_PREV</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_PREV">DB_PREV</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_printlog.html#2">db_printlog</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a></td></tr>
-<tr><td align=right>DB-&gt;stat</td><td><a href="../api_c/db_stat.html#DB_RECORDCOUNT">DB_RECORDCOUNT</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_feedback</td><td><a href="../api_c/env_set_feedback.html#DB_RECOVER">DB_RECOVER</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_recover.html#2">db_recover</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
-<tr><td align=right>DB-&gt;get</td><td><a href="../api_c/db_get.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>DB-&gt;join</td><td><a href="../api_c/db_join.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
-<tr><td align=right>DB-&gt;verify</td><td><a href="../api_c/db_verify.html#DB_SALVAGE">DB_SALVAGE</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_SET">DB_SET</a></td></tr>
-<tr><td align=right>log_get</td><td><a href="../api_c/log_get.html#DB_SET">DB_SET</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a></td></tr>
-<tr><td align=right>DB-&gt;get</td><td><a href="../api_c/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
-<tr><td align=right>DBcursor-&gt;c_get</td><td><a href="../api_c/dbc_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
-<tr><td align=right>DB-&gt;set_flags</td><td><a href="../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_stat.html#2">db_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_strerror.html#2">db_strerror</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_THREAD">DB_THREAD</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a></td></tr>
-<tr><td align=right>DB-&gt;open</td><td><a href="../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_tx_recover</td><td><a href="../api_c/env_set_tx_recover.html#DB_TXN_ABORT">DB_TXN_ABORT</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_tx_recover</td><td><a href="../api_c/env_set_tx_recover.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_tx_recover</td><td><a href="../api_c/env_set_tx_recover.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_flags</td><td><a href="../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>txn_begin</td><td><a href="../api_c/txn_begin.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>txn_commit</td><td><a href="../api_c/txn_commit.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>txn_begin</td><td><a href="../api_c/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a></td></tr>
-<tr><td align=right>txn_begin</td><td><a href="../api_c/txn_begin.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>txn_commit</td><td><a href="../api_c/txn_commit.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>DB-&gt;set_feedback</td><td><a href="../api_c/db_set_feedback.html#DB_UPGRADE">DB_UPGRADE</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_upgrade.html#2">db_upgrade</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DBENV-&gt;remove</td><td><a href="../api_c/env_remove.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DBENV-&gt;open</td><td><a href="../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DBENV-&gt;remove</td><td><a href="../api_c/env_remove.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_verbose</td><td><a href="../api_c/env_set_verbose.html#DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_verbose</td><td><a href="../api_c/env_set_verbose.html#DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_verbose</td><td><a href="../api_c/env_set_verbose.html#DB_VERB_RECOVERY">DB_VERB_RECOVERY</a></td></tr>
-<tr><td align=right>DBENV-&gt;set_verbose</td><td><a href="../api_c/env_set_verbose.html#DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a></td></tr>
-<tr><td align=right>DB-&gt;set_feedback</td><td><a href="../api_c/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_verify.html#2">db_verify</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/env_version.html#2">db_version</a></td></tr>
-<tr><td align=right>DB-&gt;cursor</td><td><a href="../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a></td></tr>
-<tr><td align=right>db_create</td><td><a href="../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
-<tr><td align=right> utility to detect </td><td><a href="../utility/db_deadlock.html#3">deadlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--disable-bigfile">--disable-bigfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/diskspace.html#2">disk</a> space requirements</td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#dlen">dlen</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#doff">doff</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_dump.html#3">dump</a> databases as text files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#9">dynamic</a> shared libraries</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dynamic">--enable-dynamic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-shared">--enable-shared</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
-<tr><td align=right> byte </td><td><a href="../ref/program/byteorder.html#3">endian</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/error.html#2">error</a> handling</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
-<tr><td align=right> selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
-<tr><td align=right> Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#fileid">fileid</a></td></tr>
-<tr><td align=right> recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
-<tr><td align=right> remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
-<tr><td align=right> page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#ftype">ftype</a></td></tr>
-<tr><td align=right> specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/hsearch.html#2">hsearch</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am/join.html#2">join</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/dbt.html#2">key/data</a> pairs</td></tr>
-<tr><td align=right> retrieved </td><td><a href="../api_c/dbt.html#4">key/data</a> permanence</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/program/dbsizes.html#2">limits</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
-<tr><td align=right> changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_load.html#3">load</a> text files into databases</td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#lock">lock</a></td></tr>
-<tr><td align=right> standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_detect.html#2">lock_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_get.html#2">lock_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_id.html#2">lock_id</a></td></tr>
-<tr><td align=right> page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
-<tr><td align=right> two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/intro.html#2">locking</a> introduction</td></tr>
-<tr><td align=right> sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_put.html#2">lock_put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_stat.html#2">lock_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/lock_vec.html#2">lock_vec</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
-<tr><td align=right> utility to display </td><td><a href="../utility/db_printlog.html#3">log</a> files as text</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_archive.html#2">log_archive</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_compare.html#2">log_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_file.html#2">log_file</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_flush.html#2">log_flush</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_get.html#2">log_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/intro.html#2">logging</a> introduction</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_put.html#2">log_put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_register.html#2">log_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_stat.html#2">log_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/log_unregister.html#2">log_unregister</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#lsn_offset">lsn_offset</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fclose.html#2">memp_fclose</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fget.html#2">memp_fget</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fopen.html#2">memp_fopen</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fput.html#2">memp_fput</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fset.html#2">memp_fset</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_fsync.html#2">memp_fsync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_register.html#2">memp_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_stat.html#2">memp_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_sync.html#2">memp_sync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/memp_trickle.html#2">memp_trickle</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#mode">mode</a></td></tr>
-<tr><td align=right> Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
-<tr><td align=right> file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
-<tr><td align=right> retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#obj">obj</a></td></tr>
-<tr><td align=right>lock_vec</td><td><a href="../api_c/lock_vec.html#op">op</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/partial.html#2">partial</a> record storage and retrieval</td></tr>
+<tr><td align=right>database page </td><td><a href="../api_c/db_set_flags.html#4">checksum</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/faq.html#3">compaction</a></td></tr>
+<tr><td align=right>specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
+<tr><td align=right>changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
+<tr><td align=right></td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
+<tr><td align=right>database environment </td><td><a href="../ref/env/db_config.html#3">configuration</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right>salvaging </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
+<tr><td align=right>closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
+<tr><td align=right>deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
+<tr><td align=right>duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
+<tr><td align=right>retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
+<tr><td align=right>storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#2">cursor</a> stability</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#data">data</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_associate.html#2">DB-&gt;associate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_close.html#2">DB-&gt;close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_cursor.html#2">DB-&gt;cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_del.html#2">DB-&gt;del</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_err.html#2">DB-&gt;err</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_err.html#3">DB-&gt;errx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_fd.html#2">DB-&gt;fd</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_get.html#2">DB-&gt;get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_bt_minkey.html#3">DB-&gt;get_bt_minkey</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_get_byteswapped.html#2">DB-&gt;get_byteswapped</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_cachesize.html#3">DB-&gt;get_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_open.html#4">DB-&gt;get_database</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_encrypt.html#3">DB-&gt;get_encrypt_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_getenv.html#2">DB-&gt;get_env</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_errfile.html#3">DB-&gt;get_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_errpfx.html#3">DB-&gt;get_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_open.html#3">DB-&gt;get_file</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_flags.html#3">DB-&gt;get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_h_ffactor.html#3">DB-&gt;get_h_ffactor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_h_nelem.html#3">DB-&gt;get_h_nelem</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_lorder.html#3">DB-&gt;get_lorder</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_open.html#5">DB-&gt;get_open_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_pagesize.html#3">DB-&gt;get_pagesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_q_extentsize.html#3">DB-&gt;get_q_extentsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_delim.html#3">DB-&gt;get_re_delim</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_len.html#3">DB-&gt;get_re_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_pad.html#3">DB-&gt;get_re_pad</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_source.html#3">DB-&gt;get_re_source</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_open.html#6">DB-&gt;get_transactional</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_get_type.html#2">DB-&gt;get_type</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_join.html#2">DB-&gt;join</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_key_range.html#2">DB-&gt;key_range</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_get_mpf.html#2">DB-&gt;mpf</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_open.html#2">DB-&gt;open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_get.html#3">DB-&gt;pget</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_put.html#2">DB-&gt;put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_remove.html#2">DB-&gt;remove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_rename.html#2">DB-&gt;rename</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_alloc.html#2">DB-&gt;set_alloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_append_recno.html#2">DB-&gt;set_append_recno</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_bt_compare.html#2">DB-&gt;set_bt_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_bt_minkey.html#2">DB-&gt;set_bt_minkey</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_bt_prefix.html#2">DB-&gt;set_bt_prefix</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_cachesize.html#2">DB-&gt;set_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_dup_compare.html#2">DB-&gt;set_dup_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_encrypt.html#2">DB-&gt;set_encrypt</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_errcall.html#2">DB-&gt;set_errcall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_errfile.html#2">DB-&gt;set_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_errpfx.html#2">DB-&gt;set_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_feedback.html#2">DB-&gt;set_feedback</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_flags.html#2">DB-&gt;set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_h_ffactor.html#2">DB-&gt;set_h_ffactor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_h_hash.html#2">DB-&gt;set_h_hash</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_h_nelem.html#2">DB-&gt;set_h_nelem</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_lorder.html#2">DB-&gt;set_lorder</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_pagesize.html#2">DB-&gt;set_pagesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_paniccall.html#2">DB-&gt;set_paniccall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_q_extentsize.html#2">DB-&gt;set_q_extentsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_delim.html#2">DB-&gt;set_re_delim</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_len.html#2">DB-&gt;set_re_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_pad.html#2">DB-&gt;set_re_pad</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_re_source.html#2">DB-&gt;set_re_source</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_stat.html#2">DB-&gt;stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_sync.html#2">DB-&gt;sync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_truncate.html#2">DB-&gt;truncate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_upgrade.html#2">DB-&gt;upgrade</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_verify.html#2">DB-&gt;verify</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_class.html#2">DBC</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_close.html#2">DBcursor-&gt;c_close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_count.html#2">DBcursor-&gt;c_count</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_del.html#2">DBcursor-&gt;c_del</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_dup.html#2">DBcursor-&gt;c_dup</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_get.html#2">DBcursor-&gt;c_get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_get.html#3">DBcursor-&gt;c_pget</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbc_put.html#2">DBcursor-&gt;c_put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_cachesize.html#4">DbEnv::get_cachesize_nocache</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbm.html#2">dbm/ndbm</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbt_bulk.html#2">DBT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbt_class.html#2">DBT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
+<tr><td align=right>DB-&gt;verify </td><td><a href="../api_c/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a></td></tr>
+<tr><td align=right>DB-&gt;put </td><td><a href="../api_c/db_put.html#DB_APPEND">DB_APPEND</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_archive </td><td><a href="../api_c/log_archive.html#DB_ARCH_ABS">DB_ARCH_ABS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_archive </td><td><a href="../api_c/log_archive.html#DB_ARCH_DATA">DB_ARCH_DATA</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_archive </td><td><a href="../api_c/log_archive.html#DB_ARCH_LOG">DB_ARCH_LOG</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_archive </td><td><a href="../api_c/log_archive.html#DB_ARCH_REMOVE">DB_ARCH_REMOVE</a></td></tr>
+<tr><td align=right>DB-&gt;associate </td><td><a href="../api_c/db_associate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB-&gt;del </td><td><a href="../api_c/db_del.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB-&gt;put </td><td><a href="../api_c/db_put.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB-&gt;truncate </td><td><a href="../api_c/db_truncate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;dbremove </td><td><a href="../api_c/env_dbremove.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;dbrename </td><td><a href="../api_c/env_dbrename.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_BTREE">DB_BTREE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_CHKSUM">DB_CHKSUM</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/env/db_config.html#2">DB_CONFIG</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_CONSUME">DB_CONSUME</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</a></td></tr>
+<tr><td align=right>DB-&gt;associate </td><td><a href="../api_c/db_associate.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_class.html#2">db_create</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td><a href="../api_c/memp_fopen.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_associate.html#3">DB_DBT_APPMALLOC</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td><a href="../api_c/memp_fopen.html#DB_DIRECT">DB_DIRECT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_DIRECT_DB">DB_DIRECT_DB</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_DIRECT_LOG">DB_DIRECT_LOG</a></td></tr>
+<tr><td align=right>DB-&gt;cursor </td><td><a href="../api_c/db_cursor.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DB-&gt;join </td><td><a href="../api_c/db_join.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td><a href="../api_c/txn_begin.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_associate.html#4">DB_DONOTINDEX</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_DUP">DB_DUP</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
+<tr><td align=right>DB-&gt;upgrade </td><td><a href="../api_c/db_upgrade.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_transport.html#3">DB_EID_BROADCAST</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_ENCRYPT">DB_ENCRYPT</a></td></tr>
+<tr><td align=right>DB-&gt;set_encrypt </td><td><a href="../api_c/db_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_encrypt </td><td><a href="../api_c/env_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_close.html#2">DB_ENV-&gt;close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_dbremove.html#2">DB_ENV-&gt;dbremove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_dbrename.html#2">DB_ENV-&gt;dbrename</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_err.html#2">DB_ENV-&gt;err</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_err.html#3">DB_ENV-&gt;errx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_cachesize.html#3">DB_ENV-&gt;get_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_data_dir.html#3">DB_ENV-&gt;get_data_dirs</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_encrypt.html#3">DB_ENV-&gt;get_encrypt_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_errfile.html#3">DB_ENV-&gt;get_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_errpfx.html#3">DB_ENV-&gt;get_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_flags.html#3">DB_ENV-&gt;get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_open.html#3">DB_ENV-&gt;get_home</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_bsize.html#3">DB_ENV-&gt;get_lg_bsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_dir.html#3">DB_ENV-&gt;get_lg_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_max.html#3">DB_ENV-&gt;get_lg_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_regionmax.html#3">DB_ENV-&gt;get_lg_regionmax</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_conflicts.html#3">DB_ENV-&gt;get_lk_conflicts</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_detect.html#3">DB_ENV-&gt;get_lk_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_lockers.html#3">DB_ENV-&gt;get_lk_max_lockers</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_locks.html#3">DB_ENV-&gt;get_lk_max_locks</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_objects.html#3">DB_ENV-&gt;get_lk_max_objects</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_mp_mmapsize.html#3">DB_ENV-&gt;get_mp_mmapsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_open.html#4">DB_ENV-&gt;get_open_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_limit.html#3">DB_ENV-&gt;get_rep_limit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_shm_key.html#3">DB_ENV-&gt;get_shm_key</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tas_spins.html#3">DB_ENV-&gt;get_tas_spins</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_timeout.html#3">DB_ENV-&gt;get_timeout</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tmp_dir.html#4">DB_ENV-&gt;get_tmp_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tx_max.html#3">DB_ENV-&gt;get_tx_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tx_timestamp.html#3">DB_ENV-&gt;get_tx_timestamp</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_verbose.html#3">DB_ENV-&gt;get_verbose</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_detect.html#2">DB_ENV-&gt;lock_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_get.html#2">DB_ENV-&gt;lock_get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_id.html#2">DB_ENV-&gt;lock_id</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_id_free.html#2">DB_ENV-&gt;lock_id_free</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_put.html#2">DB_ENV-&gt;lock_put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_stat.html#2">DB_ENV-&gt;lock_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_vec.html#2">DB_ENV-&gt;lock_vec</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_archive.html#2">DB_ENV-&gt;log_archive</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_cursor.html#2">DB_ENV-&gt;log_cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_file.html#2">DB_ENV-&gt;log_file</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_flush.html#2">DB_ENV-&gt;log_flush</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_put.html#2">DB_ENV-&gt;log_put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_stat.html#2">DB_ENV-&gt;log_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fcreate.html#2">DB_ENV-&gt;memp_fcreate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_register.html#2">DB_ENV-&gt;memp_register</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_stat.html#2">DB_ENV-&gt;memp_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_sync.html#2">DB_ENV-&gt;memp_sync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_trickle.html#2">DB_ENV-&gt;memp_trickle</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_open.html#2">DB_ENV-&gt;open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_remove.html#2">DB_ENV-&gt;remove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_elect.html#2">DB_ENV-&gt;rep_elect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_message.html#2">DB_ENV-&gt;rep_process_message</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_start.html#2">DB_ENV-&gt;rep_start</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_stat.html#2">DB_ENV-&gt;rep_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_alloc.html#2">DB_ENV-&gt;set_alloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_app_dispatch.html#2">DB_ENV-&gt;set_app_dispatch</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_cachesize.html#2">DB_ENV-&gt;set_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_data_dir.html#2">DB_ENV-&gt;set_data_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_encrypt.html#2">DB_ENV-&gt;set_encrypt</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_errcall.html#2">DB_ENV-&gt;set_errcall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_errfile.html#2">DB_ENV-&gt;set_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_errpfx.html#2">DB_ENV-&gt;set_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_feedback.html#2">DB_ENV-&gt;set_feedback</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_flags.html#2">DB_ENV-&gt;set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_bsize.html#2">DB_ENV-&gt;set_lg_bsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_dir.html#2">DB_ENV-&gt;set_lg_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_max.html#2">DB_ENV-&gt;set_lg_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lg_regionmax.html#2">DB_ENV-&gt;set_lg_regionmax</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_conflicts.html#2">DB_ENV-&gt;set_lk_conflicts</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_detect.html#2">DB_ENV-&gt;set_lk_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_lockers.html#2">DB_ENV-&gt;set_lk_max_lockers</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_locks.html#2">DB_ENV-&gt;set_lk_max_locks</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_lk_max_objects.html#2">DB_ENV-&gt;set_lk_max_objects</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_mp_mmapsize.html#2">DB_ENV-&gt;set_mp_mmapsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_paniccall.html#2">DB_ENV-&gt;set_paniccall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_limit.html#2">DB_ENV-&gt;set_rep_limit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_transport.html#2">DB_ENV-&gt;set_rep_transport</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_rpc_server.html#2">DB_ENV-&gt;set_rpc_server</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_shm_key.html#2">DB_ENV-&gt;set_shm_key</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tas_spins.html#2">DB_ENV-&gt;set_tas_spins</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_timeout.html#2">DB_ENV-&gt;set_timeout</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tmp_dir.html#2">DB_ENV-&gt;set_tmp_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tx_max.html#2">DB_ENV-&gt;set_tx_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tx_timestamp.html#2">DB_ENV-&gt;set_tx_timestamp</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_verbose.html#2">DB_ENV-&gt;set_verbose</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_begin.html#2">DB_ENV-&gt;txn_begin</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_checkpoint.html#2">DB_ENV-&gt;txn_checkpoint</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_recover.html#2">DB_ENV-&gt;txn_recover</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_stat.html#2">DB_ENV-&gt;txn_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_class.html#2">db_env_create</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_close.html#2">db_env_set_func_close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_dirfree.html#2">db_env_set_func_dirfree</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_dirlist.html#2">db_env_set_func_dirlist</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_exists.html#2">db_env_set_func_exists</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_free.html#2">db_env_set_func_free</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_fsync.html#2">db_env_set_func_fsync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_ioinfo.html#2">db_env_set_func_ioinfo</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_malloc.html#2">db_env_set_func_malloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_map.html#2">db_env_set_func_map</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_open.html#2">db_env_set_func_open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_read.html#2">db_env_set_func_read</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_realloc.html#2">db_env_set_func_realloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_rename.html#2">db_env_set_func_rename</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_seek.html#2">db_env_set_func_seek</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_sleep.html#2">db_env_set_func_sleep</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_unlink.html#2">db_env_set_func_unlink</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_unmap.html#2">db_env_set_func_unmap</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_write.html#2">db_env_set_func_write</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/set_func_yield.html#2">db_env_set_func_yield</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
+<tr><td align=right>DB-&gt;stat </td><td><a href="../api_c/db_stat.html#DB_FAST_STAT">DB_FAST_STAT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_recover </td><td><a href="../api_c/txn_recover.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_put </td><td><a href="../api_c/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;remove </td><td><a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_checkpoint </td><td><a href="../api_c/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_HASH">DB_HASH</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_REP">DB_INIT_REP</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
+<tr><td align=right>DB-&gt;join </td><td><a href="../api_c/db_join.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
+<tr><td align=right>DB-&gt;join </td><td><a href="../api_c/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEXIST">DB_KEYEXIST</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_LAST">DB_LAST</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lock_class.html#2">DB_LOCK</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#4">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_GET">DB_LOCK_GET</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_GET_TIMEOUT">DB_LOCK_GET_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_IREAD">DB_LOCK_IREAD</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_IWR">DB_LOCK_IWR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_IWRITE">DB_LOCK_IWRITE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_get </td><td><a href="../api_c/lock_get.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT">DB_LOCK_PUT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_READ">DB_LOCK_READ</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_TIMEOUT">DB_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#DB_LOCK_WRITE">DB_LOCK_WRITE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_lk_detect </td><td><a href="../api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_detect </td><td><a href="../api_c/lock_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/logc_class.html#2">DB_LOGC</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/logc_close.html#2">DB_LOGC-&gt;close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/logc_get.html#2">DB_LOGC-&gt;get</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/lsn_class.html#2">DB_LSN</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/mempfile_class.html#2">DB_MPOOLFILE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fclose.html#2">DB_MPOOLFILE-&gt;close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fget.html#2">DB_MPOOLFILE-&gt;get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_clear_len.html#3">DB_MPOOLFILE-&gt;get_clear_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_fileid.html#3">DB_MPOOLFILE-&gt;get_fileid</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_flags.html#3">DB_MPOOLFILE-&gt;get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_ftype.html#3">DB_MPOOLFILE-&gt;get_ftype</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_lsn_offset.html#3">DB_MPOOLFILE-&gt;get_lsn_offset</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_maxsize.html#3">DB_MPOOLFILE-&gt;get_maxsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_pgcookie.html#3">DB_MPOOLFILE-&gt;get_pgcookie</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_priority.html#3">DB_MPOOLFILE-&gt;get_priority</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fopen.html#2">DB_MPOOLFILE-&gt;open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fput.html#2">DB_MPOOLFILE-&gt;put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fset.html#2">DB_MPOOLFILE-&gt;set</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_clear_len.html#2">DB_MPOOLFILE-&gt;set_clear_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_fileid.html#2">DB_MPOOLFILE-&gt;set_fileid</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_flags.html#2">DB_MPOOLFILE-&gt;set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_ftype.html#2">DB_MPOOLFILE-&gt;set_ftype</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_lsn_offset.html#2">DB_MPOOLFILE-&gt;set_lsn_offset</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_maxsize.html#2">DB_MPOOLFILE-&gt;set_maxsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_pgcookie.html#2">DB_MPOOLFILE-&gt;set_pgcookie</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_set_priority.html#2">DB_MPOOLFILE-&gt;set_priority</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fsync.html#2">DB_MPOOLFILE-&gt;sync</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;put </td><td><a href="../api_c/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set </td><td><a href="../api_c/memp_fset.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;get </td><td><a href="../api_c/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;put </td><td><a href="../api_c/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set </td><td><a href="../api_c/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;put </td><td><a href="../api_c/memp_fput.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set </td><td><a href="../api_c/memp_fset.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;get </td><td><a href="../api_c/memp_fget.html#DB_MPOOL_LAST">DB_MPOOL_LAST</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;get </td><td><a href="../api_c/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_flags </td><td><a href="../api_c/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_recover </td><td><a href="../api_c/txn_recover.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a></td></tr>
+<tr><td align=right>DB-&gt;put </td><td><a href="../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_put </td><td><a href="../api_c/dbc_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_NOLOCKING">DB_NOLOCKING</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td><a href="../api_c/memp_fopen.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>DB-&gt;verify </td><td><a href="../api_c/db_verify.html#DB_NOORDERCHK">DB_NOORDERCHK</a></td></tr>
+<tr><td align=right>DB-&gt;put </td><td><a href="../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_rpc_server.html#3">DB_NOSERVER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td><a href="../api_c/env_set_rpc_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td><a href="../api_c/env_set_rpc_server.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_rpc_server.html#4">DB_NOSERVER_ID</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_rpc_server </td><td><a href="../api_c/env_set_rpc_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
+<tr><td align=right>DB-&gt;close </td><td><a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td><a href="../api_c/memp_fopen.html#DB_ODDFILESIZE">DB_ODDFILESIZE</a></td></tr>
+<tr><td align=right>DB-&gt;upgrade </td><td><a href="../api_c/db_upgrade.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
+<tr><td align=right>DB-&gt;verify </td><td><a href="../api_c/db_verify.html#DB_ORDERCHKONLY">DB_ORDERCHKONLY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_OVERWRITE">DB_OVERWRITE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/memp_fget.html#3">DB_PAGE_NOTFOUND</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_dup </td><td><a href="../api_c/dbc_dup.html#DB_POSITION">DB_POSITION</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_PREV">DB_PREV</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_PREV">DB_PREV</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a></td></tr>
+<tr><td align=right>DB-&gt;verify </td><td><a href="../api_c/db_verify.html#DB_PRINTABLE">DB_PRINTABLE</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_priority </td><td><a href="../api_c/memp_set_priority.html#DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_priority </td><td><a href="../api_c/memp_set_priority.html#DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_priority </td><td><a href="../api_c/memp_set_priority.html#DB_PRIORITY_LOW">DB_PRIORITY_LOW</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_priority </td><td><a href="../api_c/memp_set_priority.html#DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;set_priority </td><td><a href="../api_c/memp_set_priority.html#DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_QUEUE">DB_QUEUE</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>DB_MPOOLFILE-&gt;open </td><td><a href="../api_c/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_RECNO">DB_RECNO</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_feedback </td><td><a href="../api_c/env_set_feedback.html#DB_RECOVER">DB_RECOVER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_start </td><td><a href="../api_c/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_start </td><td><a href="../api_c/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_start </td><td><a href="../api_c/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_NEWSITE">DB_REP_NEWSITE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_rep_transport </td><td><a href="../api_c/rep_transport.html#DB_REP_NOBUFFER">DB_REP_NOBUFFER</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_process_message </td><td><a href="../api_c/rep_message.html#DB_REP_OUTDATED">DB_REP_OUTDATED</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_rep_transport </td><td><a href="../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/rep_elect.html#3">DB_REP_UNAVAIL</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>DB-&gt;join </td><td><a href="../api_c/db_join.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>db_env_create </td><td><a href="../api_c/env_class.html#DB_RPCCLIENT">DB_RPCCLIENT</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
+<tr><td align=right>DB-&gt;verify </td><td><a href="../api_c/db_verify.html#DB_SALVAGE">DB_SALVAGE</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_SET">DB_SET</a></td></tr>
+<tr><td align=right>DB_LOGC-&gt;get </td><td><a href="../api_c/logc_get.html#DB_SET">DB_SET</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_timeout </td><td><a href="../api_c/env_set_timeout.html#DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_TXN-&gt;set_timeout </td><td><a href="../api_c/txn_set_timeout.html#DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a></td></tr>
+<tr><td align=right>DB-&gt;get </td><td><a href="../api_c/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
+<tr><td align=right>DBcursor-&gt;c_get </td><td><a href="../api_c/dbc_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_timeout </td><td><a href="../api_c/env_set_timeout.html#DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a></td></tr>
+<tr><td align=right>DB_TXN-&gt;set_timeout </td><td><a href="../api_c/txn_set_timeout.html#DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_stat </td><td><a href="../api_c/lock_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;log_stat </td><td><a href="../api_c/log_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;memp_stat </td><td><a href="../api_c/memp_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;rep_stat </td><td><a href="../api_c/rep_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_stat </td><td><a href="../api_c/txn_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_strerror.html#2">db_strerror</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_THREAD">DB_THREAD</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_class.html#2">DB_TXN</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_abort.html#2">DB_TXN-&gt;abort</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_commit.html#2">DB_TXN-&gt;commit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_discard.html#2">DB_TXN-&gt;discard</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_id.html#2">DB_TXN-&gt;id</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_prepare.html#2">DB_TXN-&gt;prepare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_set_timeout.html#2">DB_TXN-&gt;set_timeout</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_app_dispatch </td><td><a href="../api_c/env_set_app_dispatch.html#DB_TXN_ABORT">DB_TXN_ABORT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_app_dispatch </td><td><a href="../api_c/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_app_dispatch </td><td><a href="../api_c/env_set_app_dispatch.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_app_dispatch </td><td><a href="../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td><a href="../api_c/txn_begin.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>DB_TXN-&gt;commit </td><td><a href="../api_c/txn_commit.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>DB-&gt;set_flags </td><td><a href="../api_c/db_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td><a href="../api_c/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_app_dispatch </td><td><a href="../api_c/env_set_app_dispatch.html#DB_TXN_PRINT">DB_TXN_PRINT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;txn_begin </td><td><a href="../api_c/txn_begin.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
+<tr><td align=right>DB_TXN-&gt;commit </td><td><a href="../api_c/txn_commit.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a></td></tr>
+<tr><td align=right>DB-&gt;open </td><td><a href="../api_c/db_open.html#DB_UNKNOWN">DB_UNKNOWN</a></td></tr>
+<tr><td align=right>DB-&gt;set_feedback </td><td><a href="../api_c/db_set_feedback.html#DB_UPGRADE">DB_UPGRADE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;remove </td><td><a href="../api_c/env_remove.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;open </td><td><a href="../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;remove </td><td><a href="../api_c/env_remove.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_verbose </td><td><a href="../api_c/env_set_verbose.html#DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_verbose </td><td><a href="../api_c/env_set_verbose.html#DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_verbose </td><td><a href="../api_c/env_set_verbose.html#DB_VERB_RECOVERY">DB_VERB_RECOVERY</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_verbose </td><td><a href="../api_c/env_set_verbose.html#DB_VERB_REPLICATION">DB_VERB_REPLICATION</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_verbose </td><td><a href="../api_c/env_set_verbose.html#DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a></td></tr>
+<tr><td align=right>DB-&gt;set_feedback </td><td><a href="../api_c/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_verify.html#3">DB_VERIFY_BAD</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_version.html#2">db_version</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_version.html#3">db_version</a></td></tr>
+<tr><td align=right>DB-&gt;cursor </td><td><a href="../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a></td></tr>
+<tr><td align=right>db_create </td><td><a href="../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/txn_prepare.html#3">DB_XIDDATASIZE</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;set_flags </td><td><a href="../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/debug/intro.html#2">debugging</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#4">degrees</a> of isolation</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#4">dirty</a> reads</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/diskspace.html#2">disk</a> space requirements</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#2">Distributed</a> Transactions</td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#dlen">dlen</a></td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#doff">doff</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#5">double</a> buffering</td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_flags.html#7">duplicate</a> data items</td></tr>
+<tr><td align=right>sorted </td><td><a href="../api_c/db_set_flags.html#8">duplicate</a> data items</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
+<tr><td align=right>turn off database </td><td><a href="../api_c/db_set_flags.html#6">durability</a></td></tr>
+<tr><td align=right>turn off </td><td><a href="../api_c/env_set_flags.html#14">durability</a> in the database environment</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#3">emptying</a> a database</td></tr>
+<tr><td align=right>database </td><td><a href="../api_c/db_set_flags.html#5">encryption</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/env/encrypt.html#2">encryption</a></td></tr>
+<tr><td align=right>turn off access to a database </td><td><a href="../api_c/env_set_flags.html#11">environment</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
+<tr><td align=right>use </td><td><a href="../api_c/env_open.html#5">environment</a> constants in naming</td></tr>
+<tr><td align=right>use </td><td><a href="../api_c/env_remove.html#3">environment</a> constants in naming</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/faq.html#2">environment</a> FAQ</td></tr>
+<tr><td align=right>fault database </td><td><a href="../api_c/env_set_flags.html#12">environment</a> in during open</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
+<tr><td align=right>introduction to database </td><td><a href="../ref/env/intro.html#2">environments</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#2">equality</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/error.html#2">error</a> handling</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
+<tr><td align=right>selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/hotfail.html#2">failover</a></td></tr>
+<tr><td align=right>Java API </td><td><a href="../ref/bdb/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
+<tr><td align=right>returning pages to the </td><td><a href="../ref/am_misc/faq.html#4">filesystem</a></td></tr>
+<tr><td align=right>recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
+<tr><td align=right>remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
+<tr><td align=right>page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
+<tr><td align=right>configuring a small memory </td><td><a href="../ref/build_unix/conf.html#12">footprint</a> library</td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
+<tr><td align=right>specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
+<tr><td align=right></td><td><a href="../api_c/hsearch.html#3">hcreate</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/hsearch.html#2">hsearch</a></td></tr>
+<tr><td align=right>secondary </td><td><a href="../ref/am/second.html#3">indices</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
+<tr><td align=right>degrees of </td><td><a href="../ref/am_misc/stability.html#5">isolation</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/faq.html#3">Java</a> API FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
+<tr><td align=right>equality </td><td><a href="../ref/am/join.html#3">join</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/dbt_class.html#3">key/data</a> pairs</td></tr>
+<tr><td align=right>retrieved </td><td><a href="../ref/am_misc/perm.html#3">key/data</a> permanence</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/dbsizes.html#2">limits</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
+<tr><td align=right>changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#lock">lock</a></td></tr>
+<tr><td align=right>standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
+<tr><td align=right>ignore </td><td><a href="../api_c/env_set_flags.html#8">locking</a></td></tr>
+<tr><td align=right>page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
+<tr><td align=right>two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
+<tr><td align=right>Berkeley DB Transactional Data Store </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right>Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right>configure </td><td><a href="../api_c/env_set_flags.html#4">locking</a> for Berkeley DB Concurrent Data Store</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/page.html#3">locking</a> granularity</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/lock/intro.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right>sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
+<tr><td align=right>automatic </td><td><a href="../api_c/env_set_flags.html#7">log</a> file removal</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/log/intro.html#2">logging</a> subsystem</td></tr>
+<tr><td align=right>retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#3">logical</a> record @number</td></tr>
+<tr><td align=right></td><td><a href="../api_c/log_compare.html#2">log_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/macosx.html#2">Mac</a> OS X</td></tr>
+<tr><td align=right>turn off database file </td><td><a href="../api_c/env_set_flags.html#9">memory</a> mapping</td></tr>
+<tr><td align=right></td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#2">memory</a> pool subsystem</td></tr>
+<tr><td align=right>configuring for </td><td><a href="../ref/build_win/faq.html#4">MinGW</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#mode">mode</a></td></tr>
+<tr><td align=right>Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
+<tr><td align=right>file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#4">natural</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/remote.html#3">NFS</a> problems</td></tr>
+<tr><td align=right>retrieving Btree records by logical record </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#obj">obj</a></td></tr>
+<tr><td align=right>DB_ENV-&gt;lock_vec </td><td><a href="../api_c/lock_vec.html#op">op</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
+<tr><td align=right>ignore database environment </td><td><a href="../api_c/env_set_flags.html#10">panic</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/partial.html#2">partial</a> record storage and retrieval</td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
-<tr><td align=right> </td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
-<tr><td align=right> retrieved key/data </td><td><a href="../api_c/dbt.html#3">permanence</a></td></tr>
-<tr><td align=right>memp_fopen</td><td><a href="../api_c/memp_fopen.html#pgcookie">pgcookie</a></td></tr>
-<tr><td align=right> Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right> logical </td><td><a href="../api_c/dbt.html#6">record</a> number format</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
-<tr><td align=right> managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
-<tr><td align=right> logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_recover.html#3">recover</a> database environments</td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
-<tr><td align=right> configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
-<tr><td align=right> utility to support </td><td><a href="../utility/berkeley_db_svc.html#3">RPC</a> client/server</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
-<tr><td align=right> Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/env/security.html#2">security</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/sendmail/intro.html#2">Sendmail</a></td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#8">shared</a> libraries</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
-<tr><td align=right> application </td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#size">size</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
+<tr><td align=right>retrieved key/data </td><td><a href="../ref/am_misc/perm.html#2">permanence</a></td></tr>
+<tr><td align=right>task/thread </td><td><a href="../ref/program/faq.html#2">priority</a></td></tr>
+<tr><td align=right>Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#5">QNX</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
+<tr><td align=right>dirty </td><td><a href="../ref/transapp/read.html#3">reads</a></td></tr>
+<tr><td align=right>accessing Btree records by </td><td><a href="../api_c/db_set_flags.html#9">record</a> number</td></tr>
+<tr><td align=right>logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
+<tr><td align=right>managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
+<tr><td align=right>logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
+<tr><td align=right></td><td><a href="../api_c/db_set_flags.html#12">renumbering</a> records in Recno databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#2">repeatable</a> read</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rep/intro.html#2">replication</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/xa_intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/get_bulk.html#2">retrieving</a> records in bulk</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
+<tr><td align=right>turn off </td><td><a href="../api_c/db_set_flags.html#10">reverse</a> splits in Btree databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
+<tr><td align=right>configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rpc/intro.html#2">rpc</a> client/server</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/faq.html#2">RPC</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/rpm.html#2">RPM</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
+<tr><td align=right>Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/second.html#2">secondary</a> indices</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/security.html#2">security</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#5">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#size">size</a></td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
-<tr><td align=right> cursor </td><td><a href="../ref/am/stability.html#3">stability</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
-<tr><td align=right> utility to display database and environment </td><td><a href="../utility/db_stat.html#3">statistics</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
-<tr><td align=right> loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
-<tr><td align=right> using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#12">Tcl</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#13">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
-<tr><td align=right> loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
-<tr><td align=right> dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
-<tr><td align=right> building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
-<tr><td align=right> administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
-<tr><td align=right> Berkeley DB and </td><td><a href="../ref/txn/intro.html#2">transactions</a></td></tr>
-<tr><td align=right> nested </td><td><a href="../ref/txn/nested.html#2">transactions</a></td></tr>
-<tr><td align=right> configuring Berkeley DB with the </td><td><a href="../ref/xa/config.html#2">Tuxedo</a> System</td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_abort.html#2">txn_abort</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_begin.html#2">txn_begin</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_checkpoint.html#2">txn_checkpoint</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_commit.html#2">txn_commit</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_id.html#2">txn_id</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_prepare.html#2">txn_prepare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_c/txn_stat.html#2">txn_stat</a></td></tr>
-<tr><td align=right>DBT</td><td><a href="../api_c/dbt.html#ulen">ulen</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
-<tr><td align=right> configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
+<tr><td align=right>turn off reverse </td><td><a href="../api_c/db_set_flags.html#11">splits</a> in Btree databases</td></tr>
+<tr><td align=right>cursor </td><td><a href="../ref/am_misc/stability.html#3">stability</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#6">static</a> libraries</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
+<tr><td align=right>configure for </td><td><a href="../api_c/env_set_flags.html#16">stress</a> testing</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
+<tr><td align=right>loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
+<tr><td align=right>using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#13">Tcl</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../api_c/env_set_tmp_dir.html#3">temporary</a> files</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#14">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
+<tr><td align=right>pre-loading </td><td><a href="../api_c/db_set_flags.html#13">text</a> files into Recno databases</td></tr>
+<tr><td align=right>loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
+<tr><td align=right>dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
+<tr><td align=right>building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
+<tr><td align=right>lock </td><td><a href="../ref/lock/timeout.html#2">timeouts</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/lock/timeout.html#3">timeouts</a></td></tr>
+<tr><td align=right>turn off synchronous </td><td><a href="../api_c/env_set_flags.html#13">transaction</a> commit</td></tr>
+<tr><td align=right>turn off synchronous </td><td><a href="../api_c/env_set_flags.html#15">transaction</a> commit</td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/faq.html#2">transaction</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/build.html#2">Transaction</a> Manager</td></tr>
+<tr><td align=right>administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/txn/intro.html#2">transaction</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/tune.html#2">transaction</a> tuning</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
+<tr><td align=right>nested </td><td><a href="../ref/transapp/nested.html#2">transactions</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#2">truncating</a> a database</td></tr>
+<tr><td align=right>access method </td><td><a href="../ref/am_misc/tune.html#3">tuning</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/transapp/tune.html#3">tuning</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/catalog.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/env.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/except.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/keyvalue.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/main.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/stores.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/transact.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/write.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/bindings.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/classes.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/foreign.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/second.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/binding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/class.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/remove.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/extract.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/format.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/sorted.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tsbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/summary.html#2">tutorial</a></td></tr>
+<tr><td align=right>simple </td><td><a href="../ref/simple_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right>configuring Berkeley DB with the </td><td><a href="../ref/xa/xa_config.html#2">Tuxedo</a> System</td></tr>
+<tr><td align=right>DBT </td><td><a href="../api_c/dbt_class.html#ulen">ulen</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#4">UNIX</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
+<tr><td align=right>configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
<tr><td align=right>Patches, </td><td><a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_upgrade.html#4">upgrade</a> database files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_verify.html#4">verify</a> database files</td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
-<tr><td align=right> running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/xa/intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
+<tr><td align=right>running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/faq.html#3">XA</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/xa_intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/region.html#2">__db.001</a></td></tr>
</table>
</center>
<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
diff --git a/db/docs/api_c/db_associate.html b/db/docs/api_c/db_associate.html
index 56ea224ea..eea6970f7 100644
--- a/db/docs/api_c/db_associate.html
+++ b/db/docs/api_c/db_associate.html
@@ -1,31 +1,35 @@
-<!--Id: db_associate.so,v 10.9 2001/05/05 01:49:09 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_associate.so,v 10.36 2003/11/08 19:17:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;associate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;associate</h1>
+<h3>DB-&gt;associate</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db.h&gt;
<p>
-DB-&gt;associate(DB *primary, DB *secondary,
- int (*callback)(DB *, const DBT *, const DBT *, DBT *),
- u_int32_t flags);
+int
+DB-&gt;associate(DB *primary, DB_TXN *txnid, DB *secondary,
+ int (*callback)(DB *, const DBT *, const DBT *, DBT *),
+ u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;associate</h3>
<p>The DB-&gt;associate function is used to declare one database a
secondary index for a primary database. After a secondary database has
been "associated" with a primary database, all updates to the primary
@@ -34,123 +38,117 @@ secondary will return corresponding data from the primary. Note that
as primary keys must be unique for secondary indices to work, the
primary database must be configured without support for duplicate data
items. See <a href="../ref/am/second.html">Secondary indices</a> for
-more information.
-<p>The <b>primary</b> argument should be a database handle for the primary
-database that is to be indexed.
-The <b>secondary</b> argument should be an open database handle of
-either a newly created and empty database that is to be used to store
-a secondary index, or of a database that was previously associated with
-the same primary and contains a secondary index. Note that it is not
-safe to associate as a secondary database a handle that is in use by
-another thread of control or has open cursors. If the handle was opened
-with the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag it is safe to use it in multiple threads
-of control after the DB-&gt;associate function has returned. Note also
-that either secondary keys must be unique or the secondary database must
-be configured with support for duplicate data items.
-<p>The <b>callback</b> argument should refer to a callback function that
-creates a secondary key from a given primary key and data pair. When
-called, the first argument will be the secondary DB handle; the
-second and third arguments will be <a href="../api_c/dbt.html">DBT</a>s containing a primary
-key and datum respectively; and the fourth argument will be a zeroed
-DBT in which the callback function should fill in <b>data</b> and
-<b>size</b> fields that describe the secondary key.
+more information.</p>
+<p>The DB-&gt;associate method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>callback</b><dd>
+The <b>callback</b> parameter is a callback function that creates a
+secondary key from a given primary key and data pair.
+<p>The callback parameter may be NULL if both the primary and secondary
+database handles were opened with the <a href="../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a> flag.</p>
+<p>The callback takes four arguments:</p>
+<p><dl compact>
+<p><dt><b>secondary</b><dd>The <b>secondary</b> parameter is the database handle for the secondary.
+<p><dt><b>key</b><dd>The <b>key</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> referencing the primary key.
+<p><dt><b>data</b><dd>The <b>data</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> referencing the primary data
+item.
+<p><dt><b>result</b><dd>The <b>result</b> parameter is a zeroed <a href="../api_c/dbt_class.html">DBT</a> in which the callback
+function should fill in <b>data</b> and <b>size</b> fields that describe
+the secondary key.
+</dl>
+<a name="3"><!--meow--></a>
<p>If the callback function needs to allocate memory for the <b>data</b>
field rather than simply pointing into the primary key or datum, the
-<b>flags</b> field of the returned <a href="../api_c/dbt.html">DBT</a> should be set to
+<b>flags</b> field of the returned <a href="../api_c/dbt_class.html">DBT</a> should be set to
DB_DBT_APPMALLOC, which indicates that Berkeley DB should free the
-memory when it is done with it.
+memory when it is done with it.</p>
+<a name="4"><!--meow--></a>
<p>If any key/data pair in the primary yields a null secondary key and
should be left out of the secondary index, the callback function may
optionally return DB_DONOTINDEX. Otherwise, the callback
-function should return 0 in case of success or any other integer error
-code in case of failure; the error code will be returned from the Berkeley DB
-interface call that initiated the callback. Note that if the callback
-function returns DB_DONOTINDEX for any key/data pairs in the
-primary database, the secondary index will not contain any reference to
-those key/data pairs, and such operations as cursor iterations and range
-queries will reflect only the corresponding subset of the database. If
-this is not desirable, the application should ensure that the callback
-function is well-defined for all possible values and never returns
-DB_DONOTINDEX.
-<p>The callback argument may be NULL if and only if both the primary and
-secondary database handles were opened with the <a href="../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a> flag.
-<p>The <b>flags</b> value must be set to 0 or
+function should return 0 in case of success or an error outside of the
+Berkeley DB name space in case of failure; the error code will be returned
+from the Berkeley DB call that initiated the callback.</p>
+<p>If the callback function returns DB_DONOTINDEX for any key/data
+pairs in the primary database, the secondary index will not contain any
+reference to those key/data pairs, and such operations as cursor
+iterations and range queries will reflect only the corresponding subset
+of the database. If this is not desirable, the application should
+ensure that the callback function is well-defined for all possible
+values and never returns DB_DONOTINDEX.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>If the secondary database is empty, walk through the primary and create
-an index to it in the empty secondary. Note that this operation is
-potentially very expensive.
+an index to it in the empty secondary. This operation is potentially
+very expensive.
<p>If the secondary database has been opened in an environment configured
with transactions, each put necessary for its creation will be done in
-the context of a transaction created for the purpose.
-<p>Note that care should be taken not to use a newly-created secondary
-database in another thread of control until the DB-&gt;associate
-call has returned successfully in the first thread.
+the context of a transaction created for the purpose.</p>
+<p>Care should be taken not to use a newly-populated secondary database in
+another thread of control until the DB-&gt;associate call has
+returned successfully in the first thread.</p>
+<p>If transactions are not being used, care should be taken not to modify
+a primary database being used to populate a secondary database, in
+another thread of control, until the DB-&gt;associate call has
+returned successfully in the first thread. If transactions are being
+used, Berkeley DB will perform appropriate locking and the application need
+not do any special operation ordering.</p>
+</dl>
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;associate call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+</dl>
+<p><dt><b>primary</b><dd>
+The <b>primary</b> parameter should be a database handle for the primary
+database that is to be indexed.
+<p><dt><b>secondary</b><dd>
+The <b>secondary</b> parameter should be an open database handle of
+either a newly created and empty database that is to be used to store
+a secondary index, or of a database that was previously associated with
+the same primary and contains a secondary index. Note that it is not
+safe to associate as a secondary database a handle that is in use by
+another thread of control or has open cursors. If the handle was opened
+with the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag it is safe to use it in multiple threads
+of control after the DB-&gt;associate method has returned. Note also
+that either secondary keys must be unique or the secondary database must
+be configured with support for duplicate data items.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;associate function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB-&gt;associate method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The secondary database handle has already been associated with this or
-another database handle.
-<p>The secondary database handle is not open.
-<p>The primary database has been configured to allow duplicates.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DB-&gt;associate function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;associate function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>, <a href="../api_c/db_err.html">DB-&gt;errx</a>
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>,
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dl compact>
+<p><dt>EINVAL<dd>If the secondary database handle has already been associated with this or
+another database handle; the secondary database handle is not open; the
+primary database has been configured to allow duplicates; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_class.html b/db/docs/api_c/db_class.html
index aced4a8c3..dfea794b6 100644
--- a/db/docs/api_c/db_class.html
+++ b/db/docs/api_c/db_class.html
@@ -1,21 +1,22 @@
-<!--Id: db_class.so,v 10.36 2002/08/29 03:24:30 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_class.so,v 10.47 2003/11/08 19:17:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB</title>
+<title>Berkeley DB: db_create</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB</h1>
+<h3>db_create</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,28 +24,78 @@
#include &lt;db.h&gt;
<p>
typedef struct __db DB;
+<p>
+int
+db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_create</h3>
<p>The DB handle is the handle for a Berkeley DB database, which may or
-may not be part of a database environment. DB handles are
-free-threaded if the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is specified to the
-<a href="../api_c/db_open.html">DB-&gt;open</a> method when the database is opened or if the database
-environment in which the database is opened is free-threaded. The
-handle should not be closed while any other handle that refers to the
-database is in use; for example, database handles must not be closed
+may not be part of a database environment.</p>
+<p>DB handles are free-threaded if the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is
+specified to the <a href="../api_c/db_open.html">DB-&gt;open</a> method when the database is opened or if the
+database environment in which the database is opened is free-threaded.
+The handle should not be closed while any other handle that refers to
+the database is in use; for example, database handles must not be closed
while cursor handles into the database remain open, or transactions that
include operations on the database have not yet been committed or
aborted. Once the <a href="../api_c/db_close.html">DB-&gt;close</a>, <a href="../api_c/db_remove.html">DB-&gt;remove</a>, or
<a href="../api_c/db_rename.html">DB-&gt;rename</a> methods are called, the handle may not be accessed again,
-regardless of the function's return.
-<h1>Class</h1>
+regardless of the method's return.</p>
+<p>The db_create method creates a DB structure that is the
+handle for a Berkeley DB database. Calling the <a href="../api_c/db_close.html">DB-&gt;close</a>,
+<a href="../api_c/db_remove.html">DB-&gt;remove</a> or <a href="../api_c/db_rename.html">DB-&gt;rename</a> methods will discard the returned
+handle.</p>
+<p>The DB handle contains a special field, "app_private", which is
+declared as type "void *". This field is provided for the use of the
+application program. It is initialized to NULL and is not further used
+by Berkeley DB in any way.</p>
+<p>The db_create method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbp</b><dd>
+The <b>dbp</b> parameter references the memory into which the returned
+structure pointer is stored.
+<p><dt><b>dbenv</b><dd>
+If the <b>dbenv</b> parameter is NULL, the database is standalone; that
+is, it is not part of any Berkeley DB environment.
+<p>If the <b>dbenv</b> parameter is not NULL, the database is created
+within the specified Berkeley DB environment. The database access methods
+automatically make calls to the other subsystems in Berkeley DB, based on the
+enclosing environment. For example, if the environment has been
+configured to use locking, the access methods will automatically acquire
+the correct locks when reading and writing pages of the database.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_XA_CREATE">DB_XA_CREATE</a><dd>Instead of creating a standalone database, create a database intended
+to be accessed via applications running under an X/Open conformant
+Transaction Manager. The database will be opened in the environment
+specified by the OPENINFO parameter of the GROUPS section of the
+ubbconfig file. See the <a href="../ref/xa/xa_intro.html">XA
+Introduction</a> section in the Berkeley DB Reference Guide for more information.
+</dl>
+</dl>
+<h3>Errors</h3>
+<p>The db_create method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
DB
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_close.html b/db/docs/api_c/db_close.html
index f6c763c5b..a18f1ede4 100644
--- a/db/docs/api_c/db_close.html
+++ b/db/docs/api_c/db_close.html
@@ -1,20 +1,22 @@
-<!--$Id: db_close.so,v 10.27 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_close.so,v 10.54 2003/11/08 19:17:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;close</h1>
+<h3>DB-&gt;close</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,96 +26,70 @@
int
DB-&gt;close(DB *db, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;close function flushes any cached database information to disk,
+<hr size=1 noshade>
+<h3>Description: DB-&gt;close</h3>
+<p>The DB-&gt;close method flushes any cached database information to disk,
closes any open cursors, frees any allocated resources, and closes any
-underlying files. Since key/data pairs are cached in memory, failing to
-sync the file with the DB-&gt;close or <a href="../api_c/db_sync.html">DB-&gt;sync</a> function may result
-in inconsistent or lost information.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
+underlying files.</p>
+<p>The <a href="../api_c/db_class.html">DB</a> handle should not be closed while any other handle that
+refers to it is not yet closed; for example, database handles must not
+be closed while cursor handles into the database remain open, or
+transactions that include operations on the database have not yet been
+committed or aborted. Specifically, this includes <a href="../api_c/dbc_class.html">DBC</a> and
+<a href="../api_c/txn_class.html">DB_TXN</a> handles.</p>
+<p>Because key/data pairs are cached in memory, failing to sync the file
+with the DB-&gt;close or <a href="../api_c/db_sync.html">DB-&gt;sync</a> method may result in
+inconsistent or lost information.</p>
+<p>When called on a database that is the primary database for a secondary
+index, the primary database should be closed only after all secondary
+indices which reference it have been closed.</p>
+<p>When multiple threads are using the <a href="../api_c/db_class.html">DB</a> concurrently, only a single
+thread may call the DB-&gt;close method.</p>
+<p>The <a href="../api_c/db_class.html">DB</a> handle may not be accessed again after DB-&gt;close is
+called, regardless of its return.</p>
+<p>The DB-&gt;close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_NOSYNC">DB_NOSYNC</a><dd>Do not flush cached information to disk.
-<p>The <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag is a dangerous option. It should only be set
-if the application is doing logging (with transactions) so that the
-database is recoverable after a system or application crash, or if the
-database is always generated from scratch after any system or application
-crash.
+<p><dt><a name="DB_NOSYNC">DB_NOSYNC</a><dd>Do not flush cached information to disk. The <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag is
+a dangerous option. It should be set only if the application is doing
+logging (with transactions) so that the database is recoverable after
+a system or application crash, or if the database is always generated
+from scratch after any system or application crash.
<p><b>It is important to understand that flushing cached information to disk
-only minimizes the window of opportunity for corrupted data.</b>
-While unlikely, it is possible for database corruption to happen if a
-system or application crash occurs while writing data to the database.
-To ensure that database corruption never occurs, applications must either:
-use transactions and logging with automatic recovery, use logging and
-application-specific recovery, or edit a copy of the database,
-and, once all applications using the database have successfully called
+only minimizes the window of opportunity for corrupted data.</b> Although
+unlikely, it is possible for database corruption to happen if a system
+or application crash occurs while writing data to the database. To
+ensure that database corruption never occurs, applications must either:
+use transactions and logging with automatic recovery; use logging and
+application-specific recovery; or edit a copy of the database, and once
+all applications using the database have successfully called
DB-&gt;close, atomically replace the original database with the
-updated copy.
+updated copy.</p>
+</dl>
</dl>
-<p>When multiple threads are using the Berkeley DB handle concurrently, only a single
-thread may call the DB-&gt;close function.
-<p>Once DB-&gt;close has been called, regardless of its return, the
-DB handle may not be accessed again.
- <a name="3"><!--meow--></a>
-<p>The DB-&gt;close function returns a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-DB-&gt;close function was called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, the <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> option should probably
-have been specified.)
-<p>The DB-&gt;close function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;close function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;close function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<h3>Errors</h3>
+<p>The DB-&gt;close method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_create.html b/db/docs/api_c/db_create.html
deleted file mode 100644
index c1fd3fca1..000000000
--- a/db/docs/api_c/db_create.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!--$Id: db_create.so,v 10.12 2000/10/25 18:51:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: db_create</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>db_create</h1>
-</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-#include &lt;db.h&gt;
-<p>
-int
-db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags);
-</pre></h3>
-<h1>Description</h1>
-<p>The db_create function creates a DB structure which is the
-handle for a Berkeley DB database. A pointer to this structure is returned
-in the memory referenced by <b>db</b>.
-<p>If the <b>dbenv</b> argument is NULL, the database is standalone, i.e.,
-it is not part of any Berkeley DB environment.
-<p>If the <b>dbenv</b> argument is not NULL, the database is created within
-the specified Berkeley DB environment. The database access methods
-automatically make calls to the other subsystems in Berkeley DB based on the
-enclosing environment. For example, if the environment has been
-configured to use locking, then the access methods will automatically
-acquire the correct locks when reading and writing pages of the database.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="DB_XA_CREATE">DB_XA_CREATE</a><dd>Instead of creating a standalone database, create a database intended to
-be accessed via applications running under a X/Open conformant Transaction
-Manager. The database will be opened in the environment specified by the
-OPENINFO parameter of the GROUPS section of the ubbconfig file. See the
-<a href="../ref/xa/intro.html">XA Resource Manager</a> chapter in the
-Reference Guide for more information.
-</dl>
-<p>The DB handle contains a special field, "app_private", which
-is declared as type "void *". This field is provided for the use of
-the application program. It is initialized to NULL and is not further
-used by Berkeley DB in any way.
-<p>The db_create function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The db_create function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the db_create function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_c/db_cursor.html b/db/docs/api_c/db_cursor.html
index 1fb6616ab..8060b49fc 100644
--- a/db/docs/api_c/db_cursor.html
+++ b/db/docs/api_c/db_cursor.html
@@ -1,20 +1,22 @@
-<!--$Id: db_cursor.so,v 10.25 2000/07/11 19:11:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_cursor.so,v 10.44 2003/11/08 19:17:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;cursor</h1>
+<h3>DB-&gt;cursor</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,79 +27,57 @@ int
DB-&gt;cursor(DB *db,
DB_TXN *txnid, DBC **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;cursor function
-creates a cursor and copies a pointer to it into the memory referenced
-by <b>cursorp</b>.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_c/txn_begin.html">txn_begin</a>, otherwise, NULL.
-<p>If transaction protection is enabled, cursors must be opened and closed
-within the context of a transaction, and the <b>txnid</b> parameter
-specifies the transaction context in which the cursor may be used.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;cursor</h3>
+The DB-&gt;cursor method returns a created database cursor.
+<p>The DB-&gt;cursor method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cursorp</b><dd>
+The <b>cursorp</b> parameter references memory into which
+a pointer to the allocated cursor is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>All read operations performed by the cursor may return modified but not
+yet committed data. Silently ignored if the <a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag
+was not specified when the underlying database was opened.
+<p><dt><a name="DB_WRITECURSOR">DB_WRITECURSOR</a><dd>Specify that the cursor will be used to update the database. The
+underlying database environment must have been opened using the
+<a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag.
+</dl>
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL. To transaction-protect cursor operations, cursors must be opened and
+closed within the context of a transaction, and the <b>txnid</b>
+parameter specifies the transaction context in which the cursor may be
+used.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;cursor method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_WRITECURSOR">DB_WRITECURSOR</a><dd>Specify that the cursor will be used to update the database. This
-flag should <b>only</b> be set when the <a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag
-was specified to <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DB-&gt;cursor function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;cursor function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;cursor function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;cursor function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_del.html b/db/docs/api_c/db_del.html
index b273d29fd..06a2c4b77 100644
--- a/db/docs/api_c/db_del.html
+++ b/db/docs/api_c/db_del.html
@@ -1,20 +1,22 @@
-<!--$Id: db_del.so,v 10.23 2000/09/05 19:35:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 10.44 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;del</h1>
+<h3>DB-&gt;del</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,78 +26,74 @@
int
DB-&gt;del(DB *db, DB_TXN *txnid, DBT *key, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;del function removes key/data pairs from the database. The
+<hr size=1 noshade>
+<h3>Description: DB-&gt;del</h3>
+<p>The DB-&gt;del method removes key/data pairs from the database. The
key/data pair associated with the specified <b>key</b> is discarded from
the database. In the presence of duplicate key values, all records
-associated with the designated key will be discarded.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_c/txn_begin.html">txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DB-&gt;del function returns a non-zero error value on failure, 0 on success, and <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified <b>key</b> did not exist in
-the file.
-<h1>Errors</h1>
-<p>The DB-&gt;del function may fail and return a non-zero error for the following conditions:
+associated with the designated key will be discarded.</p>
+<p>When called on a database that has been made into a secondary index
+using the <a href="../api_c/db_associate.html">DB-&gt;associate</a> method, the DB-&gt;del method deletes the
+key/data pair from the primary database and all secondary indices.</p>
+<p>
+The DB-&gt;del method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified key is not in the database.
+The DB-&gt;del method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the database is a Queue or Recno database and
+the specified key exists, but was never explicitly created by the
+application or was later deleted.
+Unless otherwise specified, the DB-&gt;del method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;del call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+</dl>
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;del method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
+</dl>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;del function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;del function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_err.html b/db/docs/api_c/db_err.html
index 1eae12fab..9c88a243f 100644
--- a/db/docs/api_c/db_err.html
+++ b/db/docs/api_c/db_err.html
@@ -1,20 +1,23 @@
-<!--$Id: db_err.so,v 10.11 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_err.so,v 1.3 2002/08/18 21:15:48 bostic Exp $-->
+<!--$Id: env_err.so,v 10.30 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;err</title>
+<title>Berkeley DB: DB-&gt;err</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;err</h1>
+<h3>DB-&gt;err</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,72 +25,65 @@
#include &lt;db.h&gt;
<p>
void
-DBENV-&gt;err(DB_ENV *dbenv, int error, const char *fmt, ...);
-<p>
-void
-DBENV-&gt;errx(DB_ENV *dbenv, const char *fmt, ...);
-<p>
-void
DB-&gt;err(DB *db, int error, const char *fmt, ...);
<p>
void
DB-&gt;errx(DB *db, const char *fmt, ...);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;err, DBENV-&gt;errx, DB-&gt;err and
-DB-&gt;errx functions provide error messaging functionality for
-applications written using the Berkeley DB library.
-<p>The DBENV-&gt;err function constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;err</h3>
+<a name="3"><!--meow--></a>
+<p>The <a href="../api_c/env_err.html">DB_ENV-&gt;err</a>, <a href="../api_c/env_err.html">DB_ENV-&gt;errx</a>, DB-&gt;err and
+DB-&gt;errx methods provide error-messaging functionality for
+applications written using the Berkeley DB library.</p>
+<p>The <a href="../api_c/env_err.html">DB_ENV-&gt;err</a> method constructs an error message consisting of the
+following elements:</p>
+<blockquote><p><dl compact>
<p><dt>An optional prefix string<dd>If no error callback function has been set using the
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a> function, any prefix string specified using the
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> function, followed by two separating characters: a colon
+<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> method, any prefix string specified using the
+<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> method, followed by two separating characters: a colon
and a &lt;space&gt; character.
-<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, where the ANSI C X3.159-1989 (ANSI C)
-printf function specifies how subsequent arguments are converted for
-output.
+<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, in which the
+ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent parameters
+are converted for output.
<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
-<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> function.
+<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> method.
</dl>
</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback function has been set (see <a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>
-and <a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>), that function is called with two
-arguments: any prefix string specified (see <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> and
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>), and the error message.
+<p>This constructed error message is then handled as follows:</p>
+<blockquote><p>If an error callback function has been set (see <a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>
+and <a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>), that function is called with two
+parameters: any prefix string specified (see <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> and
+<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>) and the error message.</p>
<p>If a C library FILE * has been set (see <a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> and
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>), the error message is written to that output
-stream.
+<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>), the error message is written to that output
+stream.</p>
<p>If none of these output options has been configured, the error message
-is written to stderr, the standard error output stream.</blockquote>
-<p>The DBENV-&gt;errx and DB-&gt;errx functions perform identically to the
-DBENV-&gt;err and DB-&gt;err functions except that they do not append
+is written to stderr, the standard
+error output stream.</p></blockquote>
+<p>The <a href="../api_c/env_err.html">DB_ENV-&gt;errx</a> and DB-&gt;errx methods perform identically to the
+<a href="../api_c/env_err.html">DB_ENV-&gt;err</a> and DB-&gt;err methods, except that they do not append
the final separator characters and standard error string to the error
-message.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+message.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error value for which the
+<a href="../api_c/env_err.html">DB_ENV-&gt;err</a> and DB-&gt;err methods will display a explanatory
+string.
+<p><dt><b>fmt</b><dd>
+The <b>fmt</b> parameter is an optional printf-style message to display.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_fd.html b/db/docs/api_c/db_fd.html
index 2a385c1b3..78163e0e2 100644
--- a/db/docs/api_c/db_fd.html
+++ b/db/docs/api_c/db_fd.html
@@ -1,20 +1,22 @@
-<!--$Id: db_fd.so,v 10.21 2000/03/01 21:41:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_fd.so,v 10.30 2003/10/31 15:17:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;fd</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;fd</h1>
+<h3>DB-&gt;fd</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,69 +26,37 @@
int
DB-&gt;fd(DB *db, int *fdp);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;fd function
-copies a file descriptor representative of the underlying database into
-the memory referenced by <b>fdp</b>. A file descriptor referencing the
-same file will be returned to all processes that call <a href="../api_c/db_open.html">DB-&gt;open</a> with
-the same <b>file</b> argument. This file descriptor may be safely used
-as an argument to the <b>fcntl</b>(2) and <b>flock</b>(2) locking
-functions. The file descriptor is not necessarily associated with any of
-the underlying files actually used by the access method.
-<p>The DB-&gt;fd function only supports a coarse-grained form of locking.
-Applications should use the lock manager where possible.
-<p>The DB-&gt;fd function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;fd function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;fd function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;fd</h3>
+<p>The DB-&gt;fd method provides access to a file descriptor representative
+of the underlying database. A file descriptor referring to the same
+file will be returned to all processes that call <a href="../api_c/db_open.html">DB-&gt;open</a> with
+the same <b>file</b> parameter.</p>
+<p>This file descriptor may be safely used as a parameter to the
+<b>fcntl</b>(2) and <b>flock</b>(2) locking functions. The file
+descriptor is not necessarily associated with any of the underlying
+files actually used by the access method.</p>
+<p>The DB-&gt;fd method only supports a coarse-grained form of locking.
+Applications should instead use the Berkeley DB lock manager where possible.</p>
+<p>The DB-&gt;fd method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>fdp</b><dd>
+The <b>fdp</b> parameter references memory into which
+ the current file descriptor is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_get.html b/db/docs/api_c/db_get.html
index c6cc3fcce..5e23e79b0 100644
--- a/db/docs/api_c/db_get.html
+++ b/db/docs/api_c/db_get.html
@@ -1,20 +1,22 @@
-<!--$Id: db_get.so,v 10.31 2000/11/28 20:12:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 10.79 2003/12/03 15:11:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;get</h1>
+<h3>DB-&gt;get</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,133 +26,182 @@
int
DB-&gt;get(DB *db,
DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);
+<p>
+int
+DB-&gt;pget(DB *db,
+ DB_TXN *txnid, DBT *key, DBT *pkey, DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;get function retrieves key/data pairs from the database. The
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get</h3>
+<a name="3"><!--meow--></a>
+<p>The DB-&gt;get method retrieves key/data pairs from the database. The
address
and length of the data associated with the specified <b>key</b> are
-returned in the structure referenced by <b>data</b>.
+returned in the structure to which <b>data</b> refers.</p>
<p>In the presence of duplicate key values, DB-&gt;get will return the
first data item for the designated key. Duplicates are sorted by insert
-order except where this order has been overridden by cursor operations.
+order, except where this order has been overridden by cursor operations.
<b>Retrieval of duplicates requires the use of cursor operations.</b>
-See <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for details.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_c/txn_begin.html">txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+See <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for details.</p>
+<p>When called on a database that has been made into a secondary index
+using the <a href="../api_c/db_associate.html">DB-&gt;associate</a> method, the DB-&gt;get
+and DB-&gt;pget methods return
+the key from the secondary index and the data item from the primary
+database. In addition, the
+DB-&gt;pget method
+returns the key from the primary database. In databases that are not
+secondary indices, the
+DB-&gt;pget method
+will always fail.</p>
+<p>
+The DB-&gt;get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified key is not in the database.
+The DB-&gt;get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the database is a Queue or Recno database and
+the specified key exists, but was never explicitly created by the
+application or was later deleted.
+Unless otherwise specified, the DB-&gt;get method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_CONSUME">DB_CONSUME</a><dd>Return the record number and data from the available record closest to
-the head of the queue and delete the record. The cursor will be
+the head of the queue, and delete the record. The cursor will be
positioned on the deleted record. The record number will be returned
-in <b>key</b> as described in <a href="../api_c/dbt.html">DBT</a>. The data will be returned
+in <b>key</b>, as described in <a href="../api_c/dbt_class.html">DBT</a>. The data will be returned
in the <b>data</b> parameter. A record is available if it is not
deleted and is not currently locked. The underlying database must be
of type Queue for DB_CONSUME to be specified.
<p><dt><a name="DB_CONSUME_WAIT">DB_CONSUME_WAIT</a><dd>The DB_CONSUME_WAIT flag is the same as the DB_CONSUME
-flag except that if the Queue database is empty, the thread of control
+flag, except that if the Queue database is empty, the thread of control
will wait until there is data in the queue before returning. The
underlying database must be of type Queue for DB_CONSUME_WAIT
to be specified.
+<p>If lock or transaction timeouts have been specified, the DB-&gt;get method
+with the DB_CONSUME_WAIT flag
+may return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>.
+This failure, by itself, does not require the enclosing transaction be
+aborted.</p>
<p><dt><a name="DB_GET_BOTH">DB_GET_BOTH</a><dd>Retrieve the key/data pair only if both the key and data match the
arguments.
-<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Retrieve the specified numbered key/data pair from a database.
-Upon return, both the <b>key</b> and <b>data</b> items will have been
-filled in, not just the data item as is done for all other uses of the
-DB-&gt;get function.
+<p>When used with the
+DB-&gt;pget method
+version of this method on a secondary index handle, return the
+secondary key/primary key/data tuple only if both the primary and
+secondary keys match the arguments. It is an error to use the
+DB_GET_BOTH flag with the
+DB-&gt;get
+version of this method and a secondary index handle.</p>
+<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Retrieve the specified numbered key/data pair from a database. Upon
+return, both the <b>key</b> and <b>data</b> items will have been
+filled in.
<p>The <b>data</b> field of the specified <b>key</b>
-must be a pointer to a logical record number (i.e., a <b>db_recno_t</b>).
+must be a pointer to a logical record number (that is, a <b>db_recno_t</b>).
This record number determines the record to be retrieved.
<p>For DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the DB_RECNUM flag.
+of type Btree, and it must have been created with the DB_RECNUM flag.</p></p>
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+In addition, the following flags may be set by
+bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;get call within a transaction. If the call
+succeeds, changes made by the operation will be recoverable. If the
+call fails, the operation will have made no changes. This flag may only
+be specified with the DB_CONSUME and DB_CONSUME_WAIT
+flags.
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_MULTIPLE">DB_MULTIPLE</a><dd>Return multiple data items in the buffer to which the <b>data</b>
+parameter refers.
+<p>In the case of Btree or Hash databases, all of the data items associated
+with the specified key are entered into the buffer. In the case of
+Queue or Recno databases, all of the data items in the database,
+starting at, and subsequent to, the specified key, are entered into the
+buffer.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The DB_MULTIPLE flag may only be used alone, or with the
+DB_GET_BOTH and DB_SET_RECNO options. The
+DB_MULTIPLE flag may not be used when accessing databases made
+into secondary indices using the <a href="../api_c/db_associate.html">DB-&gt;associate</a> method.</p>
+<p>See
+<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a>
+for more information.</p>
<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
-<p>As the DB-&gt;get interface will not hold locks across
-Berkeley DB interface calls in non-transactional environments, the
-<a href="../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag to the DB-&gt;get call is only meaningful in
-the presence of transactions.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
+<p>Because the DB-&gt;get method will not hold locks across
+Berkeley DB calls in non-transactional operations, the <a href="../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag
+to the DB-&gt;get call is meaningful only in the presence of
+transactions.</p>
+</dl>
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>pkey</b><dd>
+The <b>pkey</b> parameter is the return key from the primary database.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
</dl>
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-the DB-&gt;get function returns <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>Otherwise, if the requested key is not in the database, the
-DB-&gt;get function returns <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p>Otherwise, the DB-&gt;get function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;get function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB-&gt;get method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>There was insufficient memory to return the requested item.
+<p><dt>DB_LOCK_NOTGRANTED<dd>The DB_CONSUME_WAIT flag was specified, lock or transaction
+timers were configured and the lock could not be granted before the wait-time expired.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>The <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to the
-<a href="../api_c/db_open.html">DB-&gt;open</a> function and none of the <a href="../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
-<a href="../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or <a href="../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags were set in the
-<a href="../api_c/dbt.html">DBT</a>.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DB-&gt;get function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;get function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If a record number of 0 was specified;
+the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to the <a href="../api_c/db_open.html">DB-&gt;open</a> method and
+none of the <a href="../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or
+<a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags were set in the <a href="../api_c/dbt_class.html">DBT</a>;
+the DB-&gt;pget method
+was called with a <a href="../api_c/db_class.html">DB</a> handle that does not refer to a secondary index; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>ENOMEM<dd>The requested item could not be returned due to insufficient memory.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_get_byteswapped.html b/db/docs/api_c/db_get_byteswapped.html
index 205ddb794..b7a3849a9 100644
--- a/db/docs/api_c/db_get_byteswapped.html
+++ b/db/docs/api_c/db_get_byteswapped.html
@@ -1,20 +1,22 @@
-<!--$Id: db_get_byteswapped.so,v 10.7 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_byteswapped.so,v 10.22 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;get_byteswapped</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;get_byteswapped</h1>
+<h3>DB-&gt;get_byteswapped</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,63 +24,48 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;get_byteswapped(DB *db);
+DB-&gt;get_byteswapped(DB *db, int *isswapped);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;get_byteswapped function returns
-0
-if the underlying database files were created on an architecture
-of the same byte order as the current one, and
-1
-if they were not (i.e., big-endian on a little-endian machine or
-vice-versa). This field may be used to determine if application
-data needs to be adjusted for this architecture or not.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_byteswapped</h3>
+<p>The DB-&gt;get_byteswapped method returns
+if the underlying database files were created on an architecture of the
+same byte order as the current one,
+or
+if they were not (that is, big-endian on a little-endian machine, or
+vice versa). This information may be used to determine whether
+application data needs to be adjusted for this architecture or not.</p>
+<p>The DB-&gt;get_byteswapped method may not be called before the <a href="../api_c/db_open.html">DB-&gt;open</a> method has been
+called.</p>
+<p>The DB-&gt;get_byteswapped method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>isswapped</b><dd>
+If the underlying database files were created on an architecture of the
+same byte order as the current one. 0 is stored into the memory location
+referenced by <b>isswapped</b>. If the underlying database files were
+created on an architecture of a different byte order as the current one,
+1 is stored into the memory location referenced by <b>isswapped</b>.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;get_byteswapped method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called before <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_get_mpf.html b/db/docs/api_c/db_get_mpf.html
new file mode 100644
index 000000000..6f1d67afd
--- /dev/null
+++ b/db/docs/api_c/db_get_mpf.html
@@ -0,0 +1,43 @@
+<!--$Id: db_get_mpf.so,v 1.6 2003/10/13 21:10:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB-&gt;mpf</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DB-&gt;mpf</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db.h&gt;
+<p>
+DB_MPOOLFILE *DB-&gt;mpf
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;mpf</h3>
+<p>DB-&gt;mpf gives access to the <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> associated
+with a <a href="../api_c/db_class.html">DB</a> object.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/db_get_type.html b/db/docs/api_c/db_get_type.html
index a1905c782..bef9ddfc3 100644
--- a/db/docs/api_c/db_get_type.html
+++ b/db/docs/api_c/db_get_type.html
@@ -1,81 +1,67 @@
-<!--$Id: db_get_type.so,v 10.10 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_type.so,v 10.26 2003/10/31 17:24:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;get_type</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;get_type</h1>
+<h3>DB-&gt;get_type</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db.h&gt;
<p>
-DBTYPE
-DB-&gt;get_type(DB *db);
+int
+DB-&gt;get_type(DB *db, DBTYPE *type);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;get_type function returns the type of the underlying access method
-(and file format). It returns one of DB_BTREE,
-DB_HASH or DB_RECNO. This value may be used to
-determine the type of the database after a return from <a href="../api_c/db_open.html">DB-&gt;open</a>
-with the <b>type</b> argument set to DB_UNKNOWN.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_type</h3>
+<p>The DB-&gt;get_type method returns the type of the underlying access
+method (and file format). The type value is one of DB_BTREE,
+DB_HASH, DB_RECNO, or DB_QUEUE. This
+value may be used to determine the type of the database after a return
+from <a href="../api_c/db_open.html">DB-&gt;open</a> with the <b>type</b> parameter set to
+DB_UNKNOWN.</p>
+<p>The DB-&gt;get_type method may not be called before the <a href="../api_c/db_open.html">DB-&gt;open</a> method has been
+called.</p>
+<p>The DB-&gt;get_type method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>type</b><dd>
+The <b>type</b> parameter references memory into which
+ the type of the underlying access method is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;get_type method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called before <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_getenv.html b/db/docs/api_c/db_getenv.html
new file mode 100644
index 000000000..ec1be31fa
--- /dev/null
+++ b/db/docs/api_c/db_getenv.html
@@ -0,0 +1,55 @@
+<!--$Id: db_getenv.so,v 10.6 2003/10/13 21:10:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB-&gt;get_env</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DB-&gt;get_env</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db.h&gt;
+<p>
+DB_ENV *
+DB-&gt;getenv(DB *db);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_env</h3>
+<p>The DB-&gt;get_env method returns the handle for the database environment underlying the database.</p>
+<p>The DB-&gt;get_env method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_env method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db</b><dd>
+The DB-&gt;get_env method returns the
+handle for the database environment underlying the database in <b>db</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/db_join.html b/db/docs/api_c/db_join.html
index 13fe95d84..93e41577d 100644
--- a/db/docs/api_c/db_join.html
+++ b/db/docs/api_c/db_join.html
@@ -1,20 +1,22 @@
-<!--$Id: db_join.so,v 10.30 2000/12/20 15:34:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_join.so,v 10.55 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;join</h1>
+<h3>DB-&gt;join</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,129 +25,111 @@
<p>
int
DB-&gt;join(DB *primary,
- DBC **curslist, DBC **dbcp, u_int32_t flags);
+ DBC **curslist, DBC **dbcp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;join function creates a specialized cursor for use in performing
-joins on secondary indexes. For information on how to organize your data
-to use this functionality, see <a href="../ref/am/join.html">Logical
-join</a>.
-<p>The <b>primary</b> argument contains the DB handle of the primary
-database, which is keyed by the data values found in entries in the
-<b>curslist</b>.
-<p>The <b>curslist</b> argument contains a NULL terminated array of cursors.
-Each cursor must have been initialized to reference the key on which the
+<hr size=1 noshade>
+<h3>Description: DB-&gt;join</h3>
+<p>The DB-&gt;join method creates a specialized join cursor for use in
+performing equality or natural joins on secondary indices. For
+information on how to organize your data to use this functionality, see
+<a href="../ref/am/join.html">Equality join</a>.</p>
+<p>The DB-&gt;join method method is called using the <a href="../api_c/db_class.html">DB</a> handle of
+the primary database.</p>
+<p>The join cursor supports only the <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> and <b>dbc_close</b>
+cursor functions:</p>
+<p><dl compact>
+<p><dt><a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a><dd>Iterates over the values associated with the keys to which each item in
+<b>curslist</b> was initialized. Any data value that appears in all
+items specified by the <b>curslist</b> parameter is then used as a key
+into the <b>primary</b>, and the key/data pair found in the
+<b>primary</b> is returned.
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all the cursors as a lookup key for
+the <b>primary</b>, but simply return it in the key parameter instead.
+The data parameter is left unchanged.
+</dl>
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
+<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
+</dl>
+<p><dt><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a><dd>Close the returned cursor and release all resources. (Closing the cursors
+in <b>curslist</b> is the responsibility of the caller.)
+</dl>
+<p>The DB-&gt;join method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>curslist</b><dd>
+The <b>curslist</b> parameter contains a NULL terminated array of cursors.
+Each cursor must have been initialized to refer to the key on which the
underlying database should be joined. Typically, this initialization is done
by a <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> call with the <a href="../api_c/dbc_get.html#DB_SET">DB_SET</a> flag specified. Once the
cursors have been passed as part of a <b>curslist</b>, they should not
be accessed or modified until the newly created join cursor has been closed,
or else inconsistent results may be returned.
<p>Joined values are retrieved by doing a sequential iteration over the first
-cursor in the <b>curslist</b> argument, and a nested iteration over each
+cursor in the <b>curslist</b> parameter, and a nested iteration over each
secondary cursor in the order they are specified in the <b>curslist</b>
-argument. This requires database traversals to search for the current
+parameter. This requires database traversals to search for the current
datum in all the cursors after the first. For this reason, the best join
performance normally results from sorting the cursors from the one that
-references the least number of data items to the one that references the
-most. By default, DB-&gt;join does this sort on behalf of its caller.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
+refers to the least number of data items to the one that refers to the
+most. By default, DB-&gt;join does this sort on behalf of its caller.</p>
+<p>For the returned join cursor to be used in a transaction-protected manner,
+the cursors listed in <b>curslist</b> must have been created within the
+context of the same transaction.</p>
+<p><dt><b>dbcp</b><dd>
+The newly created join cursor is returned in the memory location to which
+<b>dbcp</b> refers.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_JOIN_NOSORT">DB_JOIN_NOSORT</a><dd>Do not sort the cursors based on the number of data items they reference.
-If the data are structured such that cursors with many data items also
-share many common elements, higher performance will result from listing
-those cursors before cursors with fewer data items, that is, a sort order
-other than the default. The DB_JOIN_NOSORT flag permits
-applications to perform join optimization prior to calling DB-&gt;join.
+<p><dt><a name="DB_JOIN_NOSORT">DB_JOIN_NOSORT</a><dd>Do not sort the cursors based on the number of data items to which they
+refer. If the data are structured so that cursors with many data items
+also share many common elements, higher performance will result from
+listing those cursors before cursors with fewer data items; that is, a
+sort order other than the default. The DB_JOIN_NOSORT flag
+permits applications to perform join optimization prior to calling
+DB-&gt;join.
</dl>
-<p>A newly created cursor is returned in the memory location referenced by
-<b>dbcp</b> and has the standard cursor functions:
-<p><dl compact>
-<p><dt><a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a><dd>Iterates over the values associated with the keys to which each item in
-<b>curslist</b> has been initialized. Any data value which appears in
-all items specified by the <b>curslist</b> argument is then used as a
-key into the <b>primary</b>, and the key/data pair found in the
-<b>primary</b> is returned.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup
-key for the <b>primary</b>, but simply return it in the key parameter
-instead. The data parameter is left unchanged.
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+<h3>Errors</h3>
+<p>The DB-&gt;join method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p><dt><a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a><dd>Returns EINVAL.
-<p><dt><a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a><dd>Returns EINVAL.
-<p><dt><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a><dd>Close the returned cursor and release all resources. (Closing the cursors
-in <b>curslist</b> is the responsibility of the caller.)
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
-<p>For the returned join cursor to be used in a transaction protected manner,
-the cursors listed in <b>curslist</b> must have been created within the
-context of the same transaction.
-<p>The DB-&gt;join function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;join function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a> or <a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a> functions were called.
+<p><dt>EINVAL<dd>If cursor methods other than <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> or <a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a> were
+called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;join function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;join function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_key_range.html b/db/docs/api_c/db_key_range.html
index 1e3c4c91f..d54adb7f5 100644
--- a/db/docs/api_c/db_key_range.html
+++ b/db/docs/api_c/db_key_range.html
@@ -1,20 +1,22 @@
-<!--$Id: db_key_range.so,v 10.5 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_key_range.so,v 10.22 2003/11/08 19:17:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;key_range</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;key_range</h1>
+<h3>DB-&gt;key_range</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,84 +25,76 @@
<p>
int
DB-&gt;key_range(DB *db, DB_TXN *txnid,
- DBT *key, DB_KEY_RANGE *key_range, u_int32_t flags);
+ DBT *key, DB_KEY_RANGE *key_range, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;key_range function returns an estimate of the proportion of keys
-that are less than, equal to and greater than the specified key. The
-underlying database must be of type Btree.
-<p>The information is returned in the <b>key_range</b> argument, which
-contains three elements of type double, <b>less</b>, <b>equal</b> and
-<b>greater</b>. Values are in the range of 0 to 1, e.g., if the field
-<b>less</b> is 0.05, that indicates that 5% of the keys in the database
-are less than the key argument. The value for <b>equal</b> will be zero
-if there is no matching key and non-zero otherwise.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_c/txn_begin.html">txn_begin</a>, otherwise, NULL.
-The DB-&gt;key_range function does not retain the locks it acquires for the
+<hr size=1 noshade>
+<h3>Description: DB-&gt;key_range</h3>
+<p>The DB-&gt;key_range method returns an estimate of the proportion of keys
+that are less than, equal to, and greater than the specified key. The
+underlying database must be of type Btree.</p>
+<p>The DB-&gt;key_range method fills in a structure of type DB_KEY_RANGE. The
+following data fields are available from the DB_KEY_RANGE structure:</p>
+<p><dl compact>
+<dt>double less;<dd>A value between 0 and 1, the proportion of keys less than the specified
+key.
+<dt>double equal;<dd>A value between 0 and 1, the proportion of keys equal to the specified
+key.
+<dt>double greater;<dd>A value between 0 and 1, the proportion of keys greater than the
+specified key.
+</dl>
+<p>Values are in the range of 0 to 1; for example, if the field
+<b>less</b> is 0.05, 5% of the keys in the database are less than the
+<b>key</b> parameter. The value for <b>equal</b> will be zero if
+there is no matching key, and will be non-zero otherwise.</p>
+<p>The DB-&gt;key_range method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>key_range</b><dd>
+The estimates are returned in the <b>key_range</b> parameter, which
+contains three elements of type double: <b>less</b>, <b>equal</b>, and
+<b>greater</b>. Values are in the range of 0 to 1; for example, if the
+field <b>less</b> is 0.05, 5% of the keys in the database are less than
+the <b>key</b> parameter. The value for <b>equal</b> will be zero if
+there is no matching key, and will be non-zero otherwise.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL. The DB-&gt;key_range method does not retain the locks it acquires for the
life of the transaction, so estimates may not be repeatable.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DB-&gt;key_range function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;key_range function may fail and return a non-zero error for the following conditions:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;key_range method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
+</dl>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The underlying database was not of type Btree.
+<p><dt>EINVAL<dd>If the underlying database was not of type Btree; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;key_range function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;key_range function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_list.html b/db/docs/api_c/db_list.html
index 07782f8b7..4a44358f6 100644
--- a/db/docs/api_c/db_list.html
+++ b/db/docs/api_c/db_list.html
@@ -1,19 +1,19 @@
-<!--Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Databases and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Databases and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Databases and Related Methods</h3>
+<!--$Id: m4.methods,v 1.3 2003/05/09 20:14:02 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Databases and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_c/db_create.html">db_create</a></td><td>Create a database handle</td></tr>
+<tr><td><a href="../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
<tr><td><a href="../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
<tr><td><a href="../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
<tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
@@ -23,6 +23,7 @@
<tr><td><a href="../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
<tr><td><a href="../api_c/db_get.html">DB-&gt;get</a></td><td>Get items from a database</td></tr>
<tr><td><a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
+<tr><td><a href="../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return a handle for the underlying database environment</td></tr>
<tr><td><a href="../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
<tr><td><a href="../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
<tr><td><a href="../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
@@ -36,7 +37,6 @@
<tr><td><a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
<tr><td><a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
<tr><td><a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
-<tr><td><a href="../api_c/db_set_cache_priority.html">DB-&gt;set_cache_priority</a></td><td>Set the database cache priority</td></tr>
<tr><td><a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a></td><td>Set the database cache size</td></tr>
<tr><td><a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
<tr><td><a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
@@ -62,6 +62,6 @@
<tr><td><a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a></td><td>Upgrade a database</td></tr>
<tr><td><a href="../api_c/db_verify.html">DB-&gt;verify</a></td><td>Verify/salvage a database</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_open.html b/db/docs/api_c/db_open.html
index afd410223..811d5f710 100644
--- a/db/docs/api_c/db_open.html
+++ b/db/docs/api_c/db_open.html
@@ -1,20 +1,22 @@
-<!--$Id: db_open.so,v 10.61 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 10.101 2003/12/02 13:38:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;open</h1>
+<h3>DB-&gt;open</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,161 +24,230 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;open(DB *db, const char *file,
+DB-&gt;open(DB *db, DB_TXN *txnid, const char *file,
const char *database, DBTYPE type, u_int32_t flags, int mode);
+<p>
+int
+DB-&gt;get_dbname(DB *db, const char **filenamep, const char **dbnamep);
+<p>
+int
+DB-&gt;get_open_flags(DB *db, u_int32_t *flagsp);
+<p>
+int
+DB-&gt;get_transactional(DB *db);
</pre></h3>
-<h1>Description</h1>
-<p>The currently supported Berkeley DB file formats (or <i>access methods</i>)
-are Btree, Hash, Queue and Recno. The Btree format is a representation
-of a sorted, balanced tree structure. The Hash format is an extensible,
-dynamic hashing scheme. The Queue format supports fast access to
-fixed-length records accessed by sequentially or logical record number.
-The Recno format supports fixed- or variable-length records, accessed
-sequentially or by logical record number, and optionally retrieved from
-a flat text file.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;open</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<a name="5"><!--meow--></a>
+<a name="6"><!--meow--></a>
+<p>The DB-&gt;open method opens the database represented by the <b>file</b>
+and <b>database</b> parameters for both reading and writing.</p>
+<p>The currently supported Berkeley DB file formats (or <i>access
+methods</i>) are Btree, Hash, Queue, and Recno. The Btree format is a
+representation of a sorted, balanced tree structure. The Hash format
+is an extensible, dynamic hashing scheme. The Queue format supports
+fast access to fixed-length records accessed sequentially or by logical
+record number. The Recno format supports fixed- or variable-length
+records, accessed sequentially or by logical record number, and
+optionally backed by a flat text file.</p>
<p>Storage and retrieval for the Berkeley DB access methods are based on key/data
-pairs, see <a href="../api_c/dbt.html">DBT</a> for more information.
-<p>The DB-&gt;open interface opens the database represented by the
-<b>file</b> and <b>database</b> arguments for both reading and writing.
-The <b>file</b> argument is used as the name of a physical file on disk
-that will be used to back the database. The <b>database</b> argument is
-optional and allows applications to have multiple logical databases in a
-single physical file. While no <b>database</b> argument needs to be
-specified, it is an error to attempt to open a second database in a
-<b>file</b> that was not initially created using a <b>database</b> name.
-In-memory databases never intended to be preserved on disk may
-be created by setting both the <b>file</b> and <b>database</b> arguments
+pairs; see <a href="../api_c/dbt_class.html">DBT</a> for more information.</p>
+<p>Calling DB-&gt;open is a relatively expensive operation, and
+maintaining a set of open databases will normally be preferable to
+repeatedly opening and closing the database for each new query.</p>
+<p>The DB-&gt;open method
+returns a non-zero error value on failure
+and 0 on success.
+If DB-&gt;open fails, the <a href="../api_c/db_close.html">DB-&gt;close</a> method should be called to
+discard the <a href="../api_c/db_class.html">DB</a> handle.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is optional, and allows applications to
+have multiple databases in a single file. Although no <b>database</b>
+parameter needs to be specified, it is an error to attempt to open a
+second database in a <b>file</b> that was not initially created using
+a <b>database</b> name. Further, the <b>database</b> parameter is not
+supported by the Queue format. Finally, when opening multiple databases
+in the same physical file, it is important to consider locking and
+memory cache issues; see <a href="../ref/am/opensub.html">Opening
+multiple databases in a single file</a> for more information.
+<p>In-memory databases never intended to be preserved on disk may be
+created by setting both the <b>file</b> and <b>database</b> parameters
to NULL. Note that in-memory databases can only ever be shared by
sharing the single database handle that created them, in circumstances
-where doing so is safe.
-<p>The <b>type</b> argument is of type DBTYPE
-and must be set to one of DB_BTREE, DB_HASH,
-DB_QUEUE, DB_RECNO or DB_UNKNOWN, except
-that databases of type DB_QUEUE are restricted to one per
-<b>file</b>. If <b>type</b> is DB_UNKNOWN, the database must
-already exist and DB-&gt;open will automatically determine its type.
-The <a href="../api_c/db_get_type.html">DB-&gt;get_type</a> function may be used to determine the underlying type of
-databases opened using DB_UNKNOWN.
-<p>The <b>flags</b> and <b>mode</b> arguments specify how files will be opened
-and/or created if they do not already exist.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+where doing so is safe.</p>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is used as the name of an underlying file that
+will be used to back the database.
+<p>In-memory databases never intended to be preserved on disk may be
+created by setting both the <b>file</b> and <b>database</b> parameters
+to NULL. Note that in-memory databases can only ever be shared by
+sharing the single database handle that created them, in circumstances
+where doing so is safe.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create any underlying files, as necessary. If the files do not already
-exist and the DB_CREATE flag is not specified, the call will fail.
-<p><dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the file already exists. Underlying filesystem
-primitives are used to implement this flag. For this reason it is only
-applicable to the physical file and cannot be used to test if a database
-in a file already exists.
-<p>The DB_EXCL flag is only meaningful when specified with the
-DB_CREATE flag.
-<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory (see the description of the
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a> function for further information).
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;open call within a transaction. If the call
+succeeds, the open operation will be recoverable. If the call fails,
+no database will have been created.
+<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create the database. If the database does not already exist and the
+DB_CREATE flag is not specified, the DB-&gt;open will
+fail.
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Support dirty reads; that is, read operations on the database may
+request the return of modified but not yet committed data. This flag
+must be specified on all <a href="../api_c/db_class.html">DB</a> handles used to perform dirty reads
+or database updates, otherwise requests for dirty reads may not be
+honored and the read may block.
+<p><dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the database already exists. The DB_EXCL
+flag is only meaningful when specified with the DB_CREATE
+flag.
+<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory (see the
+<a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a> method for further information).
<p><dt><a name="DB_RDONLY">DB_RDONLY</a><dd>Open the database for reading only. Any attempt to modify items in the
-database will fail regardless of the actual permissions of any underlying
-files.
-<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the DB handle returned by DB-&gt;open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
+database will fail, regardless of the actual permissions of any
+underlying files.
+<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_c/db_class.html">DB</a> handle returned by DB-&gt;open to be
+<i>free-threaded</i>; that is, usable by multiple threads within a
single address space.
-<p><dt><a name="DB_TRUNCATE">DB_TRUNCATE</a><dd>Physically truncate the underlying file, discarding all previous databases
-it might have held. Underlying filesystem primitives are used to
-implement this flag. For this reason it is only applicable to the
-physical file and cannot be used to discard databases within a file.
-<p>The DB_TRUNCATE flag cannot be transaction protected, and it is
-an error to specify it in a transaction protected environment.
+<p><dt><a name="DB_TRUNCATE">DB_TRUNCATE</a><dd>Physically truncate the underlying file, discarding all previous
+databases it might have held. Underlying filesystem primitives are used
+to implement this flag. For this reason, it is applicable only to the
+file and cannot be used to discard databases within a file.
+<p>The DB_TRUNCATE flag cannot be lock or transaction-protected,
+and it is an error to specify it in a locking or transaction-protected
+environment.</p>
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the access methods
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>Calling DB-&gt;open is a reasonably expensive operation, and
-maintaining a set of open databases will normally be preferable to
-repeatedly open and closing the database for each new query.
-<p>The DB-&gt;open function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;open
-is affected by the configuration value DB_DATA_DIR.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+the database open are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, the database open will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL. Note that transactionally protected operations on a <a href="../api_c/db_class.html">DB</a> handle
+requires the <a href="../api_c/db_class.html">DB</a> handle itself be transactionally protected
+during its open.
+<p><dt><b>type</b><dd>
+The <b>type</b> parameter
+is of type DBTYPE, and
+must be set to one of <a name="DB_BTREE">DB_BTREE</a>,
+<a name="DB_HASH">DB_HASH</a>, <a name="DB_QUEUE">DB_QUEUE</a>,
+<a name="DB_RECNO">DB_RECNO</a>, or <a name="DB_UNKNOWN">DB_UNKNOWN</a>. If
+<b>type</b> is DB_UNKNOWN, the database must already exist
+and DB-&gt;open will automatically determine its type. The
+<a href="../api_c/db_get_type.html">DB-&gt;get_type</a> method may be used to determine the underlying type of
+databases opened using DB_UNKNOWN.
</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>DB-&gt;open is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
<p><dl compact>
-<p><dt>TMPDIR<dd>If the <b>file</b> and <b>dbenv</b> arguments to DB-&gt;open are
+<p><dt>TMPDIR<dd>If the <b>file</b> and <b>dbenv</b> parameters to DB-&gt;open are
NULL, the environment variable <b>TMPDIR</b> may be used as a
-directory in which to create a temporary backing file.
+directory in which to create temporary backing files
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;open function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB-&gt;open method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be opened without being first upgraded.
-<p><dt>EEXIST<dd>DB_CREATE and DB_EXCL were specified and the file exists.
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified (e.g., unknown database
-type, page size, hash function, pad byte, byte order) or a flag value
-or parameter that is incompatible with the specified database.
-<p>
-The <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to DB-&gt;open, but was not
-specified to the <a href="../api_c/env_open.html">DBENV-&gt;open</a> call for the environment in which the
-DB handle was created.
-<p>A <b>re_source</b> file was specified with either the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
+</dl>
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<p><dl compact>
+<p><dt>DB_OLD_VERSION<dd>The database cannot be opened without being first upgraded.
+</dl>
+<p><dl compact>
+<p><dt>EEXIST<dd>DB_CREATE and DB_EXCL were specified and the database exists.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If an unknown database type, page size, hash function, pad byte, byte
+order, or a flag value or parameter that is incompatible with the
+specified database was specified;
+the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified and fast mutexes are not
+available for this architecture;
+the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to DB-&gt;open, but was
+not specified to the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> call for the environment in
+which the <a href="../api_c/db_class.html">DB</a> handle was created;
+a backing flat text file was specified with either the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a>
flag or the provided database environment supports transaction
-processing.
-<p><dt>ENOENT<dd>A non-existent <b>re_source</b> file was specified.
+processing; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>ENOENT<dd>A nonexistent <b>re_source</b> file was specified.
+</dl>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DB-&gt;open function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;open function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_database</h3>
+<p>The DB-&gt;get_database method returns the current filename and database
+name.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>filenamep</b><dd>
+The <b>filenamep</b> parameter references memory into which
+a pointer to the current filename is copied.
+<p><dt><b>dbnamep</b><dd>
+The <b>dbnamep</b> parameter references memory into which
+a pointer to the current database name is copied.
+</dl>
+<p>The DB-&gt;get_database method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_database method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_open_flags</h3>
+<p>The DB-&gt;get_open_flags method returns the current open method flags.</p>
+<p>The DB-&gt;get_open_flags method may not be called before the DB-&gt;open method has been
+called.</p>
+<p>The DB-&gt;get_open_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB-&gt;get_open_flags method returns the
+current open method flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_transactional</h3>
+<p>The DB-&gt;get_transactional method returns non-zero if the <a href="../api_c/db_class.html">DB</a>
+handle has been opened in a transactional mode.</p>
+<p>The DB-&gt;get_transactional method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_put.html b/db/docs/api_c/db_put.html
index 85c63b7cc..6cef08bd9 100644
--- a/db/docs/api_c/db_put.html
+++ b/db/docs/api_c/db_put.html
@@ -1,20 +1,22 @@
-<!--$Id: db_put.so,v 10.34 2000/09/16 22:27:56 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 10.53 2003/11/08 19:17:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;put</h1>
+<h3>DB-&gt;put</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,19 +27,24 @@ int
DB-&gt;put(DB *db,
DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;put function stores key/data pairs in the database. The default
+<hr size=1 noshade>
+<h3>Description: DB-&gt;put</h3>
+<p>The DB-&gt;put method stores key/data pairs in the database. The default
behavior of the DB-&gt;put function is to enter the new key/data
pair, replacing any previously existing key if duplicates are disallowed,
or adding a duplicate data item if duplicates are allowed. If the database
-supports duplicates, the DB-&gt;put function adds the new data value at the
+supports duplicates, the DB-&gt;put method adds the new data value at the
end of the duplicate set. If the database supports sorted duplicates,
-the new data value is inserted at the correct sorted location.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_c/txn_begin.html">txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+the new data value is inserted at the correct sorted location.</p>
+<p>Unless otherwise specified, the DB-&gt;put method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_APPEND">DB_APPEND</a><dd>Append the key/data pair to the end of the database. For the
DB_APPEND flag to be specified, the underlying database must be
@@ -46,91 +53,81 @@ returned in the specified <b>key</b>.
<p>There is a minor behavioral difference between the Recno and Queue access
methods for the DB_APPEND flag. If a transaction enclosing a
DB-&gt;put operation with the DB_APPEND flag aborts, the
-record number may be decremented (and later re-allocated by a subsequent
+record number may be decremented (and later reallocated by a subsequent
DB_APPEND operation) by the Recno access method, but will not be
-decremented or re-allocated by the Queue access method.
+decremented or reallocated by the Queue access method.</p>
<p><dt><a name="DB_NODUPDATA">DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, enter the new key/data
-pair only if it does not already appear in the database. If the
-key/data pair already appears in the database, <a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is
-returned. The DB_NODUPDATA flag may only be specified if the
-underlying database has been configured to support sorted duplicates.
-<p>The DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
-<p><dt><a name="DB_NOOVERWRITE">DB_NOOVERWRITE</a><dd>Enter the new key/data pair only if the key does not already appear in
-the database. If the key already appears in the database,
-<a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is returned. Even if the database allows duplicates,
-a call to DB-&gt;put with the DB_NOOVERWRITE flag set will
-fail if the key already exists in the database.
+pair only if it does not already appear in the database.
+<p>The DB_NODUPDATA flag may only be specified if the underlying
+database has been configured to support sorted duplicates. The
+DB_NODUPDATA flag may not be specified to the Queue or Recno
+access methods.</p>
+<p>
+The DB-&gt;put method will return <a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NODUPDATA is set and the key/data pair already appears
+in the database.
+</p>
+<p><dt><a name="DB_NOOVERWRITE">DB_NOOVERWRITE</a><dd>Enter the new key/data pair only if the key does not already appear in the
+database. The DB-&gt;put method call with the DB_NOOVERWRITE flag
+set will fail if the key already exists in the database, even if the database
+supports duplicates.
+<p>
+The DB-&gt;put method will return <a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NOOVERWRITE is set and the key already appears in the
+database.
+</p>
+</dl>
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;put call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+</dl>
+<p><dt><b>data</b><dd>
+The data <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
</dl>
-<p>Otherwise, the DB-&gt;put function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;put function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB-&gt;put method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
-<p>An attempt was made to do a partial put.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If a record number of 0 was specified;
+an attempt was made to add a record to a fixed-length database that was too
+large to fit;
+an attempt was made to do a partial put;
+an attempt was made to add a record to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOSPC<dd>A btree exceeded the maximum btree depth (255).
</dl>
-<p>The DB-&gt;put function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;put function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_remove.html b/db/docs/api_c/db_remove.html
index e8dae8645..ed4ffb989 100644
--- a/db/docs/api_c/db_remove.html
+++ b/db/docs/api_c/db_remove.html
@@ -1,20 +1,23 @@
-<!--$Id: db_remove.so,v 10.20 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_remove.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_dbremove.so,v 10.44 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;remove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;remove</h1>
+<h3>DB-&gt;remove</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,86 +26,70 @@
<p>
int
DB-&gt;remove(DB *db,
- const char *file, const char *database, u_int32_t flags);
+ const char *file, const char *database, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;remove interface removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
-specified, the physical file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
-<p>If a physical file is being removed and logging is currently enabled in
-the database environment, no database in the file may be open when the
-DB-&gt;remove function is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not remove databases that
-are currently in use. In particular, some architectures do not permit
-the removal of files with open handles. On these architectures, attempts
-to remove databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once DB-&gt;remove has been called, regardless of its return, the
-DB handle may not be accessed again.
-<p>The DB-&gt;remove function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;remove</h3>
+<p>The DB-&gt;remove method removes the database specified by the
+<b>file</b> and <b>database</b> parameters. If no <b>database</b> is
+specified, the underlying file represented by <b>file</b> is removed,
+incidentally removing all of the databases it contained.</p>
+<p>Applications should never remove databases with open <a href="../api_c/db_class.html">DB</a> handles,
+or in the case of removing a file, when any database in the file has an
+open handle. For example, some architectures do not permit the removal
+of files with open system handles. On these architectures, attempts to
+remove databases currently in use by any thread of control in the system
+will fail.</p>
+<p>The DB-&gt;remove method may not be called after calling the
+<a href="../api_c/db_open.html">DB-&gt;open</a> method on any <a href="../api_c/db_class.html">DB</a> handle. If the <a href="../api_c/db_open.html">DB-&gt;open</a> method
+has already been called on a <a href="../api_c/db_class.html">DB</a> handle, close the existing
+handle and create a new one before calling DB-&gt;remove.</p>
+<p>The <a href="../api_c/db_class.html">DB</a> handle may not be accessed again after DB-&gt;remove is
+called, regardless of its return.</p>
+<p>The DB-&gt;remove method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>DB-&gt;remove is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DB-&gt;remove method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;remove
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>DB_FILEOPEN<dd>An attempt was made to remove the underlying file and a database in the
+file was currently open.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;remove function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If DB-&gt;remove called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;remove function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;remove function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_rename.html b/db/docs/api_c/db_rename.html
index ff90836c6..c2830aa2e 100644
--- a/db/docs/api_c/db_rename.html
+++ b/db/docs/api_c/db_rename.html
@@ -1,20 +1,23 @@
-<!--$Id: db_rename.so,v 10.7 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_rename.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_dbrename.so,v 10.31 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;rename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;rename</h1>
+<h3>DB-&gt;rename</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,87 +26,74 @@
<p>
int
DB-&gt;rename(DB *db, const char *file,
- const char *database, const char *newname, u_int32_t flags);
+ const char *database, const char *newname, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;rename interface renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
-<b>database</b> is specified, the physical file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
-<p>If a physical file is being renamed and logging is currently enabled in
+<hr size=1 noshade>
+<h3>Description: DB-&gt;rename</h3>
+<p>The DB-&gt;rename method renames the database specified by the
+<b>file</b> and <b>database</b> parameters to <b>newname</b>. If no
+<b>database</b> is specified, the underlying file represented by
+<b>file</b> is renamed, incidentally renaming all of the databases it
+contained.</p>
+<p>Applications should not rename databases that are currently in use. If
+an underlying file is being renamed and logging is currently enabled in
the database environment, no database in the file may be open when the
-DB-&gt;rename function is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not rename databases that
-are currently in use. In particular, some architectures do not permit
-renaming files with open handles. On these architectures, attempts to
-rename databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once DB-&gt;rename has been called, regardless of its return, the
-DB handle may not be accessed again.
-<p>The DB-&gt;rename function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
+DB-&gt;rename method is called. In particular, some architectures do
+not permit renaming files with open handles. On these architectures,
+attempts to rename databases that are currently in use by any thread of
+control in the system will fail.</p>
+<p>The DB-&gt;rename method may not be called after calling the
+<a href="../api_c/db_open.html">DB-&gt;open</a> method on any <a href="../api_c/db_class.html">DB</a> handle. If the <a href="../api_c/db_open.html">DB-&gt;open</a> method
+has already been called on a <a href="../api_c/db_class.html">DB</a> handle, close the existing
+handle and create a new one before calling DB-&gt;rename.</p>
+<p>The <a href="../api_c/db_class.html">DB</a> handle may not be accessed again after DB-&gt;rename is
+called, regardless of its return.</p>
+<p>The DB-&gt;rename method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+<p><dt><b>newname</b><dd>
+The <b>newname</b> parameter is the new name of the database or file.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>DB-&gt;rename is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DB-&gt;rename method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;rename
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>DB_FILEOPEN<dd>An attempt was made to rename the underlying file and a database in the
+file was currently open.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;rename function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If DB-&gt;rename called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;rename function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;rename function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_alloc.html b/db/docs/api_c/db_set_alloc.html
index 90d55f0cc..17f25c49a 100644
--- a/db/docs/api_c/db_set_alloc.html
+++ b/db/docs/api_c/db_set_alloc.html
@@ -1,21 +1,23 @@
-<!--Id: db_set_alloc.so,v 10.1 2001/04/04 19:06:25 bostic Exp -->
-<!--Id: env_set_alloc.so,v 1.3 2001/05/01 14:23:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_alloc.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_set_alloc.so,v 1.21 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_alloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_alloc</h1>
+<h3>DB-&gt;set_alloc</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,107 +26,64 @@
<p>
int
DB-&gt;set_alloc(DB *db,
- void *(*app_malloc)(size_t size),
- void *(*app_realloc)(void *, size_t),
- void (*app_free)(void *));
+ void *(*app_malloc)(size_t),
+ void *(*app_realloc)(void *, size_t),
+ void (*app_free)(void *));
</pre></h3>
-<h1>Description</h1>
-<p>Set the allocation functions used by the DB_ENV and DB
-methods to allocate or free memory owned by the application. The
-<a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a> interface sets the allocation functions for a
-database environment; the DB-&gt;set_alloc interface sets the
-allocation functions for a single database. If both are specified,
-functions specified for a database will be used in preference to
-functions specified for environment.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_alloc</h3>
+<p>Set the allocation functions used by the <a href="../api_c/env_class.html">DB_ENV</a> and <a href="../api_c/db_class.html">DB</a>
+methods to allocate or free memory owned by the application.</p>
<p>There are a number of interfaces in Berkeley DB where memory is allocated by
the library and then given to the application. For example, the
-<a href="../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_c/dbt.html">DBT</a> object,
-will cause the DB methods to allocate and reallocate memory
+<a href="../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_c/dbt_class.html">DBT</a> object,
+will cause the <a href="../api_c/db_class.html">DB</a> methods to allocate and reallocate memory
which then becomes the responsibility of the calling application. (See
-<a href="../api_c/dbt.html">DBT</a> for more information.) Other examples are the Berkeley DB
+<a href="../api_c/dbt_class.html">DBT</a> for more information.) Other examples are the Berkeley DB
interfaces which return statistical information to the application:
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>, <a href="../api_c/lock_stat.html">lock_stat</a>, <a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_stat.html">log_stat</a>, <a href="../api_c/memp_stat.html">memp_stat</a>, and <a href="../api_c/txn_stat.html">txn_stat</a>. There is
-one interface in the Berkeley DB where memory is allocated by the application
-and then given to the library: <a href="../api_c/db_associate.html">DB-&gt;associate</a>.
+<a href="../api_c/db_stat.html">DB-&gt;stat</a>, <a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a>, <a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>,
+<a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>, <a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a>, and <a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>. There is one
+method in Berkeley DB where memory is allocated by the application and then
+given to the library: <a href="../api_c/db_associate.html">DB-&gt;associate</a>.</p>
<p>On systems in which there may be multiple library versions of the
standard allocation routines (notably Windows NT), transferring memory
between the library and the application will fail because the Berkeley DB
library allocates memory from a different heap than the application uses
-to free it. To avoid this problem, the <a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a> and
-DB-&gt;set_alloc functions can be used to pass Berkeley DB references to the
-application's allocation routines.
-<p>It is not an error to not specify all three arguments to these
-interfaces; however, in that case the specified interfaces must be
-compatible with the standard library interfaces, as they will be used
-together. The functions specified must match the calling
-conventions of the ANSI C X3.159-1989 (ANSI C) library routines of the same name.
-<p>For DB handles opened inside of Berkeley DB environments, calling the
-DB-&gt;set_alloc function affects the entire environment and is equivalent to calling
-the <a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a> function.
-<p>The DB-&gt;set_alloc interface may be used only to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_alloc function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;set_alloc function may fail and return a non-zero error for the following conditions:
+to free it. To avoid this problem, the <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> and
+DB-&gt;set_alloc methods can be used to pass Berkeley DB references to the
+application's allocation routines.</p>
+<p>It is not an error to specify only one or two of the possible allocation
+function parameters to these interfaces; however, in that case the
+specified interfaces must be compatible with the standard library
+interfaces, as they will be used together. The functions specified must
+match the calling conventions of the ANSI C X3.159-1989 (ANSI C) library routines of
+the same name.</p>
+<p>Because databases opened within Berkeley DB environments use the allocation
+interfaces specified to the environment, it is an error to attempt to
+set those interfaces in a database created within an environment.</p>
+<p>The DB-&gt;set_alloc method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The DB-&gt;set_alloc method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Errors</h3>
+<p>The DB-&gt;set_alloc method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If Called in a database environment.
+<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.</p>; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;set_alloc function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;set_alloc function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>, <a href="../api_c/db_err.html">DB-&gt;errx</a>
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>,
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_append_recno.html b/db/docs/api_c/db_set_append_recno.html
index 4b90190ff..fa5a5a7a1 100644
--- a/db/docs/api_c/db_set_append_recno.html
+++ b/db/docs/api_c/db_set_append_recno.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_append_recno.so,v 1.3 2000/07/18 16:19:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_append_recno.so,v 1.22 2003/11/19 04:10:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_append_recno</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_append_recno</h1>
+<h3>DB-&gt;set_append_recno</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,42 +27,57 @@ int
DB-&gt;set_append_recno(DB *,
int (*db_append_recno_fcn)(DB *dbp, DBT *data, db_recno_t recno));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_append_recno</h3>
<p>When using the <a href="../api_c/db_put.html#DB_APPEND">DB_APPEND</a> option of the <a href="../api_c/db_put.html">DB-&gt;put</a> method,
it may be useful to modify the stored data based on the generated key.
If a callback function is specified using the
-DB-&gt;set_append_recno function, it will be called after the record number
-has been selected but before the data has been stored.
-The callback function must return 0 on success and <b>errno</b> or
-a value outside of the Berkeley DB error name space on failure.
-<p>The called function must take three arguments: a reference to the
-enclosing database handle, the data <a href="../api_c/dbt.html">DBT</a> to be stored and the
-selected record number. The called function may then modify the data
-<a href="../api_c/dbt.html">DBT</a>.
-<p>The DB-&gt;set_append_recno interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_append_recno function returns a non-zero error value on failure and 0 on success.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+DB-&gt;set_append_recno method, it will be called after the record number
+has been selected, but before the data has been stored.</p>
+<p>The DB-&gt;set_append_recno method configures operations performed using the specified
+<a href="../api_c/db_class.html">DB</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The DB-&gt;set_append_recno method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The DB-&gt;set_append_recno method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_append_recno_fcn</b><dd>
+The <b>db_append_recno_fcn</b> parameter is a function to call after
+the record number has been selected but before the data has been stored
+into the database. The function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt</b><dd>The <b>dbt</b> parameter is the data <a href="../api_c/dbt_class.html">DBT</a> to be stored.
+<p><dt><b>recno</b><dd>The <b>recno</b> parameter is the generated record number.
+</dl>
+<p>The called function may modify the data <a href="../api_c/dbt_class.html">DBT</a>.
+If the function needs to allocate memory for the <b>data</b> field, the
+<b>flags</b> field of the returned <a href="../api_c/dbt_class.html">DBT</a> should be set to
+DB_DBT_APPMALLOC, which indicates that Berkeley DB should free the
+memory when it is done with it.</p>
+<p>The callback function must return 0 on success and <b>errno</b> or
+a value outside of the Berkeley DB error name space on failure.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_append_recno method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_bt_compare.html b/db/docs/api_c/db_set_bt_compare.html
index bf38ee51d..4f4a306fb 100644
--- a/db/docs/api_c/db_set_bt_compare.html
+++ b/db/docs/api_c/db_set_bt_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_compare.so,v 10.24 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_compare.so,v 10.48 2003/11/19 04:30:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_bt_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_bt_compare</h1>
+<h3>DB-&gt;set_bt_compare</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,83 +25,69 @@
<p>
int
DB-&gt;set_bt_compare(DB *db,
- int (*bt_compare_fcn)(DB *, const DBT *, const DBT *));
+ int (*bt_compare_fcn)(DB *db, const DBT *dbt1, const DBT *dbt2));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_bt_compare</h3>
<p>Set the Btree key comparison function. The comparison function is
-called when it is necessary to compare a key specified by the
-application with a key currently stored in the tree. The first argument
-to the comparison function is the <a href="../api_c/dbt.html">DBT</a> representing the
-application supplied key, the second is the current tree's key.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first key argument is considered to be
-respectively less than, equal to, or greater than the second key
-argument. In addition, the comparison function must cause the keys in
-the database to be <i>well-ordered</i>. The comparison function
-must correctly handle any key values used by the application (possibly
-including zero-length keys). In addition, when Btree key prefix
-comparison is being performed (see <a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a> for more
-information), the comparison routine may be passed a prefix of any
-database key. The <b>data</b> and <b>size</b> fields of the
-<a href="../api_c/dbt.html">DBT</a> are the only fields that may be used for the purposes of
-this comparison.
+called whenever it is necessary to compare a key specified by the
+application with a key currently stored in the tree.</p>
<p>If no comparison function is specified, the keys are compared lexically,
-with shorter keys collating before longer keys. The same comparison
-method must be used each time a particular Btree is opened.
-<p>The DB-&gt;set_bt_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_bt_compare function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+with shorter keys collating before longer keys.</p>
+<p>The DB-&gt;set_bt_compare method configures operations performed using the specified
+<a href="../api_c/db_class.html">DB</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The DB-&gt;set_bt_compare method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_bt_compare must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The DB-&gt;set_bt_compare method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_compare_fcn</b><dd>
+The <b>bt_compare_fcn</b> function is the application-specified Btree
+comparison function. The comparison function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is the <a href="../api_c/dbt_class.html">DBT</a> representing the
+application supplied key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is the <a href="../api_c/dbt_class.html">DBT</a> representing the
+current tree's key.
+</dl>
+<p>The <b>bt_compare_fcn</b> function must return an integer value less
+than, equal to, or greater than zero if the first key parameter is
+considered to be respectively less than, equal to, or greater than the
+second key parameter. In addition, the comparison function must cause
+the keys in the database to be <i>well-ordered</i>. The comparison
+function must correctly handle any key values used by the application
+(possibly including zero-length keys). In addition, when Btree key
+prefix comparison is being performed (see <a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a> for
+more information), the comparison routine may be passed a prefix of any
+database key. The <b>data</b> and <b>size</b> fields of the
+<a href="../api_c/dbt_class.html">DBT</a> are the only fields that may be used for the purposes of
+this comparison, and no particular alignment of the memory to which by
+the <b>data</b> field refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_bt_compare method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_bt_minkey.html b/db/docs/api_c/db_set_bt_minkey.html
index c36f3637b..e5e6ec22c 100644
--- a/db/docs/api_c/db_set_bt_minkey.html
+++ b/db/docs/api_c/db_set_bt_minkey.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_minkey.so,v 10.14 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_minkey.so,v 10.35 2003/11/08 19:17:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_bt_minkey</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_bt_minkey</h1>
+<h3>DB-&gt;set_bt_minkey</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,70 +25,70 @@
<p>
int
DB-&gt;set_bt_minkey(DB *db, u_int32_t bt_minkey);
+<p>
+int
+DB-&gt;get_bt_minkey(DB *db, u_int32_t *bt_minkeyp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the minimum number of keys that will be stored on any single
-Btree page.
-<p>This value is used to determine which keys will be stored on overflow
-pages, i.e. if a key or data item is larger than the underlying database
-page size divided by the <b>bt_minkey</b> value, it will be stored on
-overflow pages instead of within the page itself. The <b>bt_minkey</b>
-value specified must be at least 2; if <b>bt_minkey</b> is not explicitly
-set, a value of 2 is used.
-<p>The DB-&gt;set_bt_minkey interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_bt_minkey function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_bt_minkey</h3>
+<a name="3"><!--meow--></a>
+<p>Set the minimum number of key/data pairs intended to be stored on any
+single Btree leaf page.</p>
+<p>This value is used to determine if key or data items will be stored on
+overflow pages instead of Btree leaf pages. For more information on
+the specific algorithm used, see <a href="../ref/am_conf/bt_minkey.html">Minimum keys per page</a>. The <b>bt_minkey</b> value specified must
+be at least 2; if <b>bt_minkey</b> is not explicitly set, a value of
+2 is used.</p>
+<p>The DB-&gt;set_bt_minkey method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_bt_minkey method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_bt_minkey will
+be ignored.
+</p>
+<p>The DB-&gt;set_bt_minkey method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_minkey</b><dd>
+The <b>bt_minkey</b> parameter is the minimum number of key/data pairs
+intended to be stored on any single Btree leaf page.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_bt_minkey method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_bt_minkey</h3>
+<p>The DB-&gt;get_bt_minkey method returns the minimum number of key/data pairs intended to be stored on any single Btree
+leaf page.</p>
+<p>The DB-&gt;get_bt_minkey method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_bt_minkey method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_minkeyp</b><dd>
+The DB-&gt;get_bt_minkey method returns the
+minimum number of key/data pairs intended to be stored on any single Btree
+leaf page in <b>bt_minkeyp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_bt_prefix.html b/db/docs/api_c/db_set_bt_prefix.html
index 88bf3157f..f4428b32a 100644
--- a/db/docs/api_c/db_set_bt_prefix.html
+++ b/db/docs/api_c/db_set_bt_prefix.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_prefix.so,v 10.25 2000/09/08 21:35:26 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_prefix.so,v 10.47 2003/11/08 19:17:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_bt_prefix</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_bt_prefix</h1>
+<h3>DB-&gt;set_bt_prefix</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,82 +27,70 @@ int
DB-&gt;set_bt_prefix(DB *db,
size_t (*bt_prefix_fcn)(DB *, const DBT *, const DBT *));
</pre></h3>
-<h1>Description</h1>
-<p>Set the Btree prefix function. The prefix function must return the
-number of bytes of the second key argument that would be required by
-the Btree key comparison function to determine the second key argument's
-ordering relationship with respect to the first key argument. If the
-two keys are equal, the key length should be returned. The prefix
-function must correctly handle any key values used by the application
-(possibly including zero-length keys). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_c/dbt.html">DBT</a> are the only fields that may be
-used for the purposes of this determination.
-<p>The prefix function is used to determine the amount by which keys stored
-on the Btree internal pages can be safely truncated without losing their
-uniqueness. See the <a href="../ref/am_conf/bt_prefix.html">Btree
-prefix comparison</a> section of the Reference Guide for more details about
-how this works. The usefulness of this is data dependent, but in some
-data sets can produce significantly reduced tree sizes and search times.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_bt_prefix</h3>
+<p>Set the Btree prefix function. The prefix function is used to determine
+the amount by which keys stored on the Btree internal pages can be
+safely truncated without losing their uniqueness. See the
+<a href="../ref/am_conf/bt_prefix.html">Btree prefix comparison</a> section
+of the Berkeley DB Reference Guide for more details about how this works. The
+usefulness of this is data-dependent, but can produce significantly
+reduced tree sizes and search times in some data sets.</p>
<p>If no prefix function or key comparison function is specified by the
application, a default lexical comparison function is used as the prefix
function. If no prefix function is specified and a key comparison
function is specified, no prefix function is used. It is an error to
-specify a prefix function without also specifying a key comparison
-function.
-<p>The DB-&gt;set_bt_prefix interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_bt_prefix function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+specify a prefix function without also specifying a Btree key comparison
+function.</p>
+<p>The DB-&gt;set_bt_prefix method configures operations performed using the specified
+<a href="../api_c/db_class.html">DB</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The DB-&gt;set_bt_prefix method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_bt_prefix must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The DB-&gt;set_bt_prefix method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_prefix_fcn</b><dd>
+The <b>bt_prefix_fcn</b> function is the application-specific Btree
+prefix function. The prefix function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> representing a database key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> representing a database key.
+</dl>
+<p>The <b>bt_prefix_fcn</b> function must return the number of bytes of
+the second key parameter that would be required by the Btree key
+comparison function to determine the second key parameter's ordering
+relationship with respect to the first key parameter. If the two keys
+are equal, the key length should be returned. The prefix function must
+correctly handle any key values used by the application (possibly
+including zero-length keys). The <b>data</b> and <b>size</b> fields
+of the <a href="../api_c/dbt_class.html">DBT</a> are the only fields that may be used for the purposes
+of this determination, and no particular alignment of the memory to
+which the <b>data</b> field refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_bt_prefix method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_cache_priority.html b/db/docs/api_c/db_set_cache_priority.html
deleted file mode 100644
index 39e2588f9..000000000
--- a/db/docs/api_c/db_set_cache_priority.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--Id: db_set_cache_priority.so,v 10.3 2002/06/24 14:49:09 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DB-&gt;set_cache_priority</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DB-&gt;set_cache_priority</h1>
-</td>
-<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-#include &lt;db.h&gt;
-<p>
-int
-DB-&gt;set_cache_priority(DB *db, DB_CACHE_PRIORITY priority);
-</pre></h3>
-<h1>Description</h1>
-<p>Set the cache priority for pages from the specified database. The
-priority of a page biases the replacement algorithm to be more or less
-likely to discard a page when space is needed in the buffer pool. The
-bias is temporary, and pages will eventually be discarded if they are
-not referenced again. The DB-&gt;set_cache_priority interface is
-only advisory, and does not guarantee pages will be treated in a specific
-way.
-<p>The <b>priority</b> argument must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a><dd>The lowest priority: pages are the most likely to be discarded.
-<dt><a name="DB_PRIORITY_LOW">DB_PRIORITY_LOW</a><dd>The next lowest priority.
-<dt><a name="DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a><dd>The default priority.
-<dt><a name="DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a><dd>The next highest priority.
-<dt><a name="DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a><dd>The highest priority: pages are the least likely to be discarded.
-</dl>
-<p>The DB-&gt;set_cache_priority function configures a database, not only operations performed
-using the specified <a href="../api_c/db_create.html">DB</a> handle.
-<p>The DB-&gt;set_cache_priority interface may be called at any time during the life of
-the application.
-<p>The DB-&gt;set_cache_priority function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;set_cache_priority function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;set_cache_priority function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_err.html">DB-&gt;errx</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cache_priority.html">DB-&gt;set_cache_priority</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_c/db_set_cachesize.html b/db/docs/api_c/db_set_cachesize.html
index fd7176cbf..0d8a2e8ff 100644
--- a/db/docs/api_c/db_set_cachesize.html
+++ b/db/docs/api_c/db_set_cachesize.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_cachesize.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_cachesize.so,v 10.21 2002/08/18 21:15:53 bostic Exp $-->
+<!--$Id: env_set_cachesize.so,v 10.46 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_cachesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_cachesize</h1>
+<h3>DB-&gt;set_cachesize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,83 +27,93 @@
int
DB-&gt;set_cachesize(DB *db,
u_int32_t gbytes, u_int32_t bytes, int ncache);
+<p>
+int
+DB-&gt;get_cachesize(DB *db,
+ u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_cachesize</h3>
+<a name="3"><!--meow--></a>
+<p>Set the size of the shared memory buffer pool -- that is, the cache.
+The cache should be the size of the normal working data set of the
+application, with some small amount of additional memory for unusual
+situations. (Note: the working set is not the same as the number of
+pages accessed simultaneously, and is usually much larger.)</p>
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>As databases opened within Berkeley DB environments use the cache specified to
-the environment, it is an error to attempt to set a cache in a database
-created within an environment.
-<p>The DB-&gt;set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_cachesize function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified. The current maximum size of a single cache is 4GB.
+(All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.)
+For information on tuning the Berkeley DB cache size, see
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
+<p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large
+enough they cannot be allocated contiguously on some architectures. For
+example, some releases of Solaris limit the amount of memory that may
+be allocated contiguously by a process. If <b>ncache</b> is 0 or 1,
+the cache will be allocated contiguously in memory. If it is greater
+than 1, the cache will be broken up into <b>ncache</b> equally sized,
+separate pieces of memory.</p>
+<p>Because databases opened within Berkeley DB environments use the cache
+specified to the environment, it is an error to attempt to set a cache
+in a database created within an environment.</p>
+<p>The DB-&gt;set_cachesize method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The DB-&gt;set_cachesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>ncache</b><dd>
+The <b>ncache</b> parameter is the number of caches to create.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_cachesize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cache size was impossibly small.
+<p><dt>EINVAL<dd>If the specified cache size was impossibly small;
+called in a database environment;
+the method was called after
+<a href="../api_c/db_open.html">DB-&gt;open</a>
+was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_cachesize</h3>
+<p>The DB-&gt;get_cachesize method returns the current size and composition of the
+cache.</p>
+<p>The DB-&gt;get_cachesize method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_cachesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the cache is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the cache is copied.
+<p><dt><b>ncachep</b><dd>
+The <b>ncachep</b> parameter references memory into which
+ the number of caches is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_dup_compare.html b/db/docs/api_c/db_set_dup_compare.html
index 2ac6ed9de..9f6147c7a 100644
--- a/db/docs/api_c/db_set_dup_compare.html
+++ b/db/docs/api_c/db_set_dup_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_dup_compare.so,v 10.21 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_dup_compare.so,v 10.48 2003/11/19 04:03:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_dup_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_dup_compare</h1>
+<h3>DB-&gt;set_dup_compare</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,78 +27,65 @@ int
DB-&gt;set_dup_compare(DB *db,
int (*dup_compare_fcn)(DB *, const DBT *, const DBT *));
</pre></h3>
-<h1>Description</h1>
-<p>Set the duplicate data item comparison function. The comparison function
-is called when it is necessary to compare a data item specified by the
-application with a data item currently stored in the tree. The first
-argument to the comparison function is the <a href="../api_c/dbt.html">DBT</a> representing the
-application's data item, the second is the current tree's data item.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first data item argument is considered
-to be respectively less than, equal to, or greater than the second data
-item argument. In addition, the comparison function must cause the data
-items in the set to be <i>well-ordered</i>. The comparison function
-must correctly handle any data item values used by the application
-(possibly including zero-length data items). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_c/dbt.html">DBT</a> are the only fields that may be
-used for the purposes of this comparison.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_dup_compare</h3>
+<p>Set the duplicate data item comparison function. The comparison
+function is called whenever it is necessary to compare a data item
+specified by the application with a data item currently stored in the
+database. Calling DB-&gt;set_dup_compare implies calling
+<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a> with the <a href="../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag.</p>
<p>If no comparison function is specified, the data items are compared
-lexically, with shorter data items collating before longer data items.
-The same duplicate data item comparison method must be used each time
-a particular Btree is opened.
-<p>The DB-&gt;set_dup_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_dup_compare function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+lexically, with shorter data items collating before longer data items.</p>
+<p>The DB-&gt;set_dup_compare method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_dup_compare must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The DB-&gt;set_dup_compare method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dup_compare_fcn</b><dd>
+The <b>dup_compare_fcn</b> function is the application-specified
+duplicate data item comparison function. The function takes three
+arguments:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> representing the application
+supplied key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> representing the current
+tree's key.
+</dl>
+<p>The <b>dup_compare_fcn</b> function must return an integer value less
+than, equal to, or greater than zero if the first data item parameter
+is considered to be respectively less than, equal to, or greater than
+the second data item parameter. In addition, the comparison function
+must cause the data items in the set to be <i>well-ordered</i>. The
+comparison function must correctly handle any data item values used by
+the application (possibly including zero-length data items). The
+<b>data</b> and <b>size</b> fields of the <a href="../api_c/dbt_class.html">DBT</a> are the only
+fields that may be used for the purposes of this comparison, and no
+particular alignment of the memory to which the <b>data</b> field
+refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_dup_compare method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_encrypt.html b/db/docs/api_c/db_set_encrypt.html
index 790a7d336..94c513e96 100644
--- a/db/docs/api_c/db_set_encrypt.html
+++ b/db/docs/api_c/db_set_encrypt.html
@@ -1,22 +1,23 @@
-<!--Id: db_set_encrypt.so,v 10.2 2002/06/24 14:49:10 bostic Exp -->
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_encrypt.so,v 10.3 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_encrypt.so,v 10.20 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_encrypt</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_encrypt</h1>
+<h3>DB-&gt;set_encrypt</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,89 +26,74 @@
<p>
int
DB-&gt;set_encrypt(DB *db, const char *passwd, u_int32_t flags);
+<p>
+int
+DB-&gt;get_encrypt_flags(DB *db, u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_c/env_create.html">DB_ENV</a> and <a href="../api_c/db_create.html">DB</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_encrypt</h3>
+<a name="3"><!--meow--></a>
+<p>Set the password used by the Berkeley DB library to perform encryption and
+decryption.</p>
+<p>Because databases opened within Berkeley DB environments use the password
+specified to the environment, it is an error to attempt to set a
+password in a database created within an environment.</p>
+<p>The DB-&gt;set_encrypt method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The DB-&gt;set_encrypt method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_ENCRYPT_AES">DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
and Federal Information Processing Standard (FIPS) 197) algorithm for
encryption or decryption.
</dl>
-<p>Because databases opened within Berkeley DB environments use the password
-specified to the environment, it is an error to attempt to set a
-password in a database created within an environment.
-<p>The DB-&gt;set_encrypt interface may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a>
-interface is called.
-<p>The DB-&gt;set_encrypt function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;set_encrypt function may fail and return a non-zero error for the following conditions:
+<p><dt><b>passwd</b><dd>
+The <b>passwd</b> parameter is the password used to perform encryption
+and decryption.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_encrypt method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
+<p><dt>EINVAL<dd>If the method was called after
<a href="../api_c/db_open.html">DB-&gt;open</a>
-was called.
+was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>EOPNOTSUPP<dd>Cryptography is not available in this Berkeley DB release.
</dl>
-<p>The DB-&gt;set_encrypt function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;set_encrypt function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_err.html">DB-&gt;errx</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cache_priority.html">DB-&gt;set_cache_priority</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_encrypt_flags</h3>
+<p>The DB-&gt;get_encrypt_flags method returns the encryption flags.</p>
+<p>The DB-&gt;get_encrypt_flags method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_encrypt_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB-&gt;get_encrypt_flags method returns the
+encryption flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_errcall.html b/db/docs/api_c/db_set_errcall.html
index 97d8d9a3a..0dccad7ad 100644
--- a/db/docs/api_c/db_set_errcall.html
+++ b/db/docs/api_c/db_set_errcall.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_errcall.so,v 10.7 1999/12/20 08:52:28 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errcall.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_errcall.so,v 10.33 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_errcall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_errcall</h1>
+<h3>DB-&gt;set_errcall</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,51 +28,49 @@ void
DB-&gt;set_errcall(DB *,
void (*db_errcall_fcn)(const char *errpfx, char *msg));
</pre></h3>
-<h1>Description</h1>
-When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
-return value is returned by the function. In some cases, however,
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_errcall</h3>
+<p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
+return value is returned by the interface. In some cases, however,
the <b>errno</b> value may be insufficient to completely describe
-the cause of the error especially during initial application debugging.
-<p>The DB-&gt;set_errcall function is used to enhance the mechanism for reporting error
-messages to the application. In some cases, when an error occurs, Berkeley DB
-will call <b>db_errcall_fcn</b> with additional error information. The
-function must be declared with two arguments; the first will be the prefix
-string (as previously set by <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>), the second will be the error message string.
-It is up to the <b>db_errcall_fcn</b> function to display the error
-message in an appropriate manner.
+the cause of the error, especially during initial application debugging.</p>
+<p>The <a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> and DB-&gt;set_errcall methods are used to
+enhance the mechanism for reporting error messages to the application.
+In some cases, when an error occurs, Berkeley DB will call
+<b>db_errcall_fcn</b> with additional error information. It is up to
+the <b>db_errcall_fcn</b> function to display the error message in an
+appropriate manner.</p>
<p>Alternatively, you can use the <a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> or
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a> functions to display the additional information
-via a C library FILE *.
-<p>This error logging enhancement does not slow performance or significantly
+<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a> methods to display the additional information via
+a C library FILE *.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>For DB handles opened inside of Berkeley DB environments, calling the
-DB-&gt;set_errcall function affects the entire environment and is equivalent to calling
-the <a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a> function.
-<p>The DB-&gt;set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+as during application debugging.</p>
+<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
+DB-&gt;set_errcall method affects the entire environment and is equivalent to calling
+the <a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> method.</p>
+<p>The DB-&gt;set_errcall method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_errcall_fcn</b><dd>
+The <b>db_errcall_fcn</b> parameter is the application-specified error
+reporting function. The function takes two parameters:
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>The <b>errpfx</b> parameter is the prefix string (as previously set by
+<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>).
+<p><dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_errfile.html b/db/docs/api_c/db_set_errfile.html
index 5d160ed5c..d7a61b02e 100644
--- a/db/docs/api_c/db_set_errfile.html
+++ b/db/docs/api_c/db_set_errfile.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_errfile.so,v 10.7 1999/12/20 08:52:28 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errfile.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_errfile.so,v 10.31 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_errfile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_errfile</h1>
+<h3>DB-&gt;set_errfile</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,50 +26,64 @@
<p>
void
DB-&gt;set_errfile(DB *db, FILE *errfile);
+<p>
+void
+DB-&gt;get_errfile(DB *db, FILE **errfilep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_errfile</h3>
+<a name="3"><!--meow--></a>
When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
-return value is returned by the function. In some cases, however,
+return value is returned by the interface. In some cases, however,
the <b>errno</b> value may be insufficient to completely describe
the cause of the error especially during initial application debugging.
-<p>The DB-&gt;set_errfile function is used to enhance the mechanism for reporting error
-messages to the application by setting a C library FILE * to be used for
-displaying additional Berkeley DB error messages. In some cases, when an error
-occurs, Berkeley DB will output an additional error message to the specified
-file reference.
+<p>The <a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a> and DB-&gt;set_errfile methods are used to
+enhance the mechanism for reporting error messages to the application
+by setting a C library FILE * to be used for displaying additional Berkeley DB
+error messages. In some cases, when an error occurs, Berkeley DB will output
+an additional error message to the specified file reference.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>), an error string, and
-a trailing &lt;newline&gt; character.
+<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>), an error string, and
+a trailing &lt;newline&gt; character.</p>
<p>This error logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>For DB handles opened inside of Berkeley DB environments, calling the
-DB-&gt;set_errfile function affects the entire environment and is equivalent to calling
-the <a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a> function.
-<p>The DB-&gt;set_errfile interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+as during application debugging.</p>
+<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
+DB-&gt;set_errfile method affects the entire environment and is equivalent to calling
+the <a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a> method.</p>
+<p>The DB-&gt;set_errfile method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfile</b><dd>
+The <b>errfile</b> parameter is a C library FILE * to be used for
+displaying additional Berkeley DB error information.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_errfile</h3>
+<p>The DB-&gt;get_errfile method returns the FILE *.</p>
+<p>The DB-&gt;get_errfile method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_errfile method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfilep</b><dd>
+The DB-&gt;get_errfile method returns the
+FILE * in <b>errfilep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_errpfx.html b/db/docs/api_c/db_set_errpfx.html
index baf8f61fe..6b4808e7e 100644
--- a/db/docs/api_c/db_set_errpfx.html
+++ b/db/docs/api_c/db_set_errpfx.html
@@ -1,20 +1,23 @@
-<!--$Id: db_set_errpfx.so,v 10.6 1999/12/20 08:52:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errpfx.so,v 10.10 2002/08/18 21:15:55 bostic Exp $-->
+<!--$Id: env_set_errpfx.so,v 10.30 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_errpfx</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_errpfx</h1>
+<h3>DB-&gt;set_errpfx</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,40 +26,54 @@
<p>
void
DB-&gt;set_errpfx(DB *db, const char *errpfx);
+<p>
+void DB-&gt;get_errpfx(DB *db, const char **errpfxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>The DB-&gt;set_errpfx function does not copy the memory referenced by the
-<b>errpfx</b> argument, rather, it maintains a reference to it. This
-allows applications to modify the error message prefix at any time,
-without repeatedly calling DB-&gt;set_errpfx, but means that the
-memory must be maintained until the handle is closed.
-<p>For DB handles opened inside of Berkeley DB environments, calling the
-DB-&gt;set_errpfx function affects the entire environment and is equivalent to calling
-the <a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> function.
-<p>The DB-&gt;set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_errpfx</h3>
+<a name="3"><!--meow--></a>
+<p>Set the prefix string that appears before error messages issued by Berkeley DB.</p>
+<p>The DB-&gt;set_errpfx and <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> methods do not copy
+the memory to which the <b>errpfx</b> parameter refers; rather, they
+maintain a reference to it. Although this allows applications to modify
+the error message prefix at any time (without repeatedly calling the
+interfaces), it means the memory must be maintained until the handle is
+closed.</p>
+<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
+DB-&gt;set_errpfx method affects the entire environment and is equivalent to calling
+the <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> method.</p>
+<p>The DB-&gt;set_errpfx method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>
+The <b>errpfx</b> parameter is the application-specified error prefix
+for additional error messages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_errpfx</h3>
+<p>The DB-&gt;get_errpfx method returns the error prefix.</p>
+<p>The DB-&gt;get_errpfx method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_errpfx method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfxp</b><dd>
+The DB-&gt;get_errpfx method returns a reference to the
+error prefix in <b>errpfxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_feedback.html b/db/docs/api_c/db_set_feedback.html
index 213060ee7..2ed6166c8 100644
--- a/db/docs/api_c/db_set_feedback.html
+++ b/db/docs/api_c/db_set_feedback.html
@@ -1,20 +1,23 @@
-<!--$Id: db_set_feedback.so,v 10.16 2000/07/09 19:11:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_feedback.so,v 10.29 2003/10/19 01:27:11 bostic Exp $-->
+<!--$Id: env_set_feedback.so,v 10.40 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_feedback</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_feedback</h1>
+<h3>DB-&gt;set_feedback</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,73 +26,50 @@
<p>
int
DB-&gt;set_feedback(DB *,
- void (*db_feedback_fcn)(DB *dbp, int opcode, int pct));
+ void (*db_feedback_fcn)(DB *dbp, int opcode, int percent));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_feedback</h3>
<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The DB-&gt;set_feedback function can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback function. This function must be declared with
-three arguments: the first will be a reference to the enclosing database
-handle, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback function to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
+amounts of time. The DB-&gt;set_feedback method can be used by applications
+to monitor progress within these operations. When an operation is
+likely to take a long time, Berkeley DB will call the specified callback
+function with progress information.</p>
+<p>It is up to the callback function to display this information in an
+appropriate manner.</p>
+<p>The DB-&gt;set_feedback method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;set_feedback method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_feedback_fcn</b><dd>
+The <b>db_feedback_fcn</b> parameter is the application-specified
+feedback function called to report Berkeley DB operation progress. The
+callback function must take three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is a reference to the enclosing database.
+<p><dt><b>opcode</b><dd>The <b>opcode</b> parameter is an operation code. The <b>opcode</b>
+parameter may take on any of the following values:
<p><dl compact>
<p><dt><a name="DB_UPGRADE">DB_UPGRADE</a><dd>The underlying database is being upgraded.
<p><dt><a name="DB_VERIFY">DB_VERIFY</a><dd>The underlying database is being verified.
</dl>
-<p>The DB-&gt;set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DB-&gt;set_feedback function returns a non-zero error value on failure and 0 on success.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the operation that has
+been completed, specified as an integer value between 0 and 100.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_flags.html b/db/docs/api_c/db_set_flags.html
index f18233817..ed2e8a836 100644
--- a/db/docs/api_c/db_set_flags.html
+++ b/db/docs/api_c/db_set_flags.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_flags.so,v 10.26 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_flags.so,v 10.64 2003/11/09 02:22:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_flags</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_flags</h1>
+<h3>DB-&gt;set_flags</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,159 +25,263 @@
<p>
int
DB-&gt;set_flags(DB *db, u_int32_t flags);
+<p>
+int
+DB-&gt;get_flags(DB *db, u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Calling DB-&gt;set_flags is additive, there is no way to clear flags.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a database. Calling DB-&gt;set_flags is additive; there
+is no way to clear flags.</p>
+<p>The DB-&gt;set_flags method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The DB-&gt;set_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<h3>General</h3>
+<p>The following flags may be specified for any Berkeley DB access method:</p>
+<p><dl compact>
+<a name="4"><!--meow--></a>
+<p><dt><a name="DB_CHKSUM">DB_CHKSUM</a><dd>Do checksum verification of pages read into the cache from the backing
+filestore. Berkeley DB uses the SHA1 Secure Hash Algorithm
+if encryption is configured and a general hash algorithm if it is not.
+<p>Calling DB-&gt;set_flags with the DB_CHKSUM flag only affects the
+specified <a href="../api_c/db_class.html">DB</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_CHKSUM
+flag
+will be ignored.</p>
+If creating additional databases in a file, the checksum behavior specified
+must be consistent with the existing databases in the file or an error will
+be returned.
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_ENCRYPT">DB_ENCRYPT</a><dd>Encrypt the database using the cryptographic password specified to the
+<a href="../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a> or <a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a> methods.
+<p>Calling DB-&gt;set_flags with the DB_ENCRYPT flag only affects the
+specified <a href="../api_c/db_class.html">DB</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_ENCRYPT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+If creating additional databases in a file, the encryption behavior specified
+must be consistent with the existing databases in the file or an error will
+be returned.
+<p>Encrypted databases are not portable between machines of different byte
+orders, that is, encrypted databases created on big-endian machines
+cannot be read on little-endian machines, and vice versa.</p>
+<a name="6"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a><dd>If set, Berkeley DB will not write log records for this database. This
+means that updates of this database exhibit the ACI (atomicity,
+consistency, and isolation) properties, but not D (durability); that
+is, database integrity will be maintained, but if the application or
+system fails, integrity will not persist. The database file must be
+verified and/or restored from backup after a failure. In order to
+ensure integrity after application shut down, the database handles must
+be closed without specifying <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a>, or all database
+changes must be flushed from the database environment cache using
+either the <a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> or <a href="../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> methods.
+All database handles for a single physical file must set
+DB_TXN_NOT_DURABLE, including database handles for different
+databases in a physical file.
+<p>Calling DB-&gt;set_flags with the DB_TXN_NOT_DURABLE flag only affects the
+specified <a href="../api_c/db_class.html">DB</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+</dl>
<h3>Btree</h3>
-<p>The following flags may be specified for the Btree access method:
+<p>The following flags may be specified for the Btree access method:</p>
<p><dl compact>
-<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both DB_DUP and
-DB_RECNUM.
-<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
+<a name="7"><!--meow--></a>
+<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is
+determined by the order of insertion, unless the ordering is otherwise
+specified by use of a cursor operation.
+<p>The DB_DUPSORT flag is preferred to DB_DUP for
+performance reasons. The DB_DUP flag should only be used by
+applications wanting to order duplicate data items manually.</p>
+<p>Calling DB-&gt;set_flags with the DB_DUP flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_DUP
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<p>It is an error to specify both DB_DUP and DB_RECNUM.</p>
+<a name="8"><!--meow--></a>
+<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is determined
+by the duplicate comparison function.
If the application does not specify a comparison function using the
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> function, a default, lexical comparison will be
+<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> method, a default lexical comparison will be
used.
It is an error to specify both DB_DUPSORT and DB_RECNUM.
+<p>Calling DB-&gt;set_flags with the DB_DUPSORT flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_DUPSORT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="9"><!--meow--></a>
<p><dt><a name="DB_RECNUM">DB_RECNUM</a><dd>Support retrieval from the Btree using record numbers. For more
-information, see the DB_GET_RECNO flag to the <a href="../api_c/db_get.html">DB-&gt;get</a> and
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods.
+information, see the <a href="../api_c/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a> flag to the <a href="../api_c/db_get.html">DB-&gt;get</a>
+and <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods.
<p>Logical record numbers in Btree databases are mutable in the face of
-record insertion or deletion. See the DB_RENUMBER flag in the Recno
-access method information for further discussion.
+record insertion or deletion. See the DB_RENUMBER flag in the
+Recno access method information for further discussion.</p>
<p>Maintaining record counts within a Btree introduces a serious point of
-contention, namely the page locations where the record counts are stored.
-In addition, the entire tree must be locked during both insertions and
-deletions, effectively single-threading the tree for those operations.
-Specifying DB_RECNUM can result in serious performance degradation for
-some applications and data sets.
-<p>It is an error to specify both DB_DUP and DB_RECNUM.
+contention, namely the page locations where the record counts are
+stored. In addition, the entire database must be locked during both
+insertions and deletions, effectively single-threading the database for
+those operations. Specifying DB_RECNUM can result in serious
+performance degradation for some applications and data sets.</p>
+<p>It is an error to specify both DB_DUP and DB_RECNUM.</p>
+<p>Calling DB-&gt;set_flags with the DB_RECNUM flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_RECNUM
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="10"><!--meow--></a><a name="11"><!--meow--></a>
<p><dt><a name="DB_REVSPLITOFF">DB_REVSPLITOFF</a><dd>Turn off reverse splitting in the Btree. As pages are emptied in a
database, the Berkeley DB Btree implementation attempts to coalesce empty pages
-into higher-level pages in order to keep the tree as small as possible
-and minimize tree search time. This can hurt performance in applications
-with cyclical data demands, that is, applications where the database grows
+into higher-level pages in order to keep the database as small as possible
+and minimize search time. This can hurt performance in applications
+with cyclical data demands; that is, applications where the database grows
and shrinks repeatedly. For example, because Berkeley DB does page-level
-locking, the maximum level of concurrency in a database of 2 pages is far
-smaller than that in a database of 100 pages, and so a database that has
+locking, the maximum level of concurrency in a database of two pages is far
+smaller than that in a database of 100 pages, so a database that has
shrunk to a minimal size can cause severe deadlocking when a new cycle of
data insertion begins.
+<p>Calling DB-&gt;set_flags with the DB_REVSPLITOFF flag only affects the
+specified <a href="../api_c/db_class.html">DB</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
</dl>
<h3>Hash</h3>
-<p>The following flags may be specified for the Hash access method:
+<p>The following flags may be specified for the Hash access method:</p>
<p><dl compact>
-<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both DB_DUP and
-DB_RECNUM.
-<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
+<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is
+determined by the order of insertion, unless the ordering is otherwise
+specified by use of a cursor operation.
+<p>The DB_DUPSORT flag is preferred to DB_DUP for
+performance reasons. The DB_DUP flag should only be used by
+applications wanting to order duplicate data items manually.</p>
+<p>Calling DB-&gt;set_flags with the DB_DUP flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_DUP
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is determined
+by the duplicate comparison function.
If the application does not specify a comparison function using the
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> function, a default, lexical comparison will be
+<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> method, a default lexical comparison will be
used.
It is an error to specify both DB_DUPSORT and DB_RECNUM.
+<p>Calling DB-&gt;set_flags with the DB_DUPSORT flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_DUPSORT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
</dl>
<h3>Queue</h3>
<p>There are no additional flags that may be specified for the Queue access
-method.
+method.</p>
<h3>Recno</h3>
-<p>The following flags may be specified for the Recno access method:
+<p>The following flags may be specified for the Recno access method:</p>
<p><dl compact>
-<p><dt><a name="DB_RENUMBER">DB_RENUMBER</a><dd>Specifying the DB_RENUMBER flag causes the logical record numbers to be
-mutable, and change as records are added to and deleted from the database.
-For example, the deletion of record number 4 causes records numbered 5
-and greater to be renumbered downward by 1. If a cursor was positioned
-to record number 4 before the deletion, it will reference the new record
-number 4, if any such record exists, after the deletion. If a cursor was
-positioned after record number 4 before the deletion, it will be shifted
-downward 1 logical record, continuing to reference the same record as it
-did before.
+<a name="12"><!--meow--></a>
+<p><dt><a name="DB_RENUMBER">DB_RENUMBER</a><dd>Specifying the DB_RENUMBER flag causes the logical record
+numbers to be mutable, and change as records are added to and deleted
+from the database. For example, the deletion of record number 4 causes
+records numbered 5 and greater to be renumbered downward by one. If a
+cursor was positioned to record number 4 before the deletion, it will
+refer to the new record number 4, if any such record exists, after the
+deletion. If a cursor was positioned after record number 4 before the
+deletion, it will be shifted downward one logical record, continuing to
+refer to the same record as it did before.
<p>Using the <a href="../api_c/db_put.html">DB-&gt;put</a> or <a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a> interfaces to create new
records will cause the creation of multiple records if the record number
is more than one greater than the largest record currently in the
database. For example, creating record 28, when record 25 was previously
the last record in the database, will create records 26 and 27 as well as
28. Attempts to retrieve records that were created in this manner will
-result in an error return of <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
+result in an error return of <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.</p>
<p>If a created record is not at the end of the database, all records
-following the new record will be automatically renumbered upward by 1.
+following the new record will be automatically renumbered upward by one.
For example, the creation of a new record numbered 8 causes records
-numbered 8 and greater to be renumbered upward by 1. If a cursor was
+numbered 8 and greater to be renumbered upward by one. If a cursor was
positioned to record number 8 or greater before the insertion, it will be
-shifted upward 1 logical record, continuing to reference the same record
-as it did before.
+shifted upward one logical record, continuing to refer to the same record
+as it did before.</p>
<p>For these reasons, concurrent access to a Recno database with the
DB_RENUMBER flag specified may be largely meaningless, although
-it is supported.
-<p><dt><a name="DB_SNAPSHOT">DB_SNAPSHOT</a><dd>This flag specifies that any specified <b>re_source</b> file be read in
-its entirety when <a href="../api_c/db_open.html">DB-&gt;open</a> is called. If this flag is not
+it is supported.</p>
+<p>Calling DB-&gt;set_flags with the DB_RENUMBER flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_c/db_open.html">DB-&gt;open</a> is called, the DB_RENUMBER
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="13"><!--meow--></a>
+<p><dt><a name="DB_SNAPSHOT">DB_SNAPSHOT</a><dd>This flag specifies that any specified <b>re_source</b> file be read
+in its entirety when <a href="../api_c/db_open.html">DB-&gt;open</a> is called. If this flag is not
specified, the <b>re_source</b> file may be read lazily.
+<p>Calling DB-&gt;set_flags with the DB_SNAPSHOT flag only affects the
+specified <a href="../api_c/db_class.html">DB</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
</dl>
-<p>The DB-&gt;set_flags interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_flags function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_flags method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_flags</h3>
+<p>The DB-&gt;get_flags method returns the current flags.</p>
+<p>The DB-&gt;get_flags method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB-&gt;get_flags method returns the
+current flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_h_ffactor.html b/db/docs/api_c/db_set_h_ffactor.html
index c3bbb607e..187549ba1 100644
--- a/db/docs/api_c/db_set_h_ffactor.html
+++ b/db/docs/api_c/db_set_h_ffactor.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_ffactor.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_ffactor.so,v 10.34 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_h_ffactor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_h_ffactor</h1>
+<h3>DB-&gt;set_h_ffactor</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,71 +25,69 @@
<p>
int
DB-&gt;set_h_ffactor(DB *db, u_int32_t h_ffactor);
+int
+<p>
+DB-&gt;get_h_ffactor(DB *db, u_int32_t *h_ffactorp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the desired density within the hash table.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_h_ffactor</h3>
+<a name="3"><!--meow--></a>
+<p>Set the desired density within the hash table. If no value is
+specified, the fill factor will be selected dynamically as pages are
+filled.</p>
+<p>The DB-&gt;set_h_ffactor method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_h_ffactor method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_h_ffactor will
+be ignored.
+</p>
+<p>The DB-&gt;set_h_ffactor method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_ffactor</b><dd>
+The <b>h_ffactor</b> parameter is the desired density within the hash table.
<p>The density is an approximation of the number of keys allowed to
accumulate in any one bucket, determining when the hash table grows or
shrinks. If you know the average sizes of the keys and data in your
-dataset, setting the fill factor can enhance performance. A reasonable
-rule computing fill factor is to set it to:
-<p><blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
-<p>If no value is specified, the fill factor will be selected dynamically as
-pages are filled.
-<p>The DB-&gt;set_h_ffactor interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_h_ffactor function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+data set, setting the fill factor can enhance performance. A reasonable
+rule computing fill factor is to set it to the following:</p>
+<blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_h_ffactor method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_h_ffactor</h3>
+<p>The DB-&gt;get_h_ffactor method returns the hash table density.</p>
+<p>The DB-&gt;get_h_ffactor method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_h_ffactor method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_ffactorp</b><dd>
+The DB-&gt;get_h_ffactor method returns the
+hash table density in <b>h_ffactorp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_h_hash.html b/db/docs/api_c/db_set_h_hash.html
index cae03fa72..fa783ba1e 100644
--- a/db/docs/api_c/db_set_h_hash.html
+++ b/db/docs/api_c/db_set_h_hash.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_hash.so,v 10.18 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_hash.so,v 10.39 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_h_hash</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_h_hash</h1>
+<h3>DB-&gt;set_h_hash</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,73 +27,52 @@ int
DB-&gt;set_h_hash(DB *db,
u_int32_t (*h_hash_fcn)(DB *, const void *bytes, u_int32_t length));
</pre></h3>
-<h1>Description</h1>
-<p>Set a user defined hash method; if no hash method is specified, a default
-hash method is used. Since no hash method performs equally well on all
-possible data, the user may find that the built-in hash method performs
-poorly with a particular data set. User specified hash functions must
-take a pointer to a byte string and a length as arguments and return a
-value of type
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_h_hash</h3>
+<p>Set a user-defined hash function; if no hash function is specified, a
+default hash function is used. Because no hash function performs
+equally well on all possible data, the user may find that the built-in
+hash function performs poorly with a particular data set.</p>
+<p>The DB-&gt;set_h_hash method configures operations performed using the specified
+<a href="../api_c/db_class.html">DB</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The DB-&gt;set_h_hash method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_h_hash must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The DB-&gt;set_h_hash method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_hash_fcn</b><dd>
+The <b>h_hash_fcn</b> parameter is the application-specified hash function.
+<p>Application-specified hash functions take a pointer to a byte string and
+a length as parameters, and return a value of type
<b>u_int32_t</b>.
The hash function must handle any key values used by the application
-(possibly including zero-length keys).
-<p>If a hash method is specified, <a href="../api_c/db_open.html">DB-&gt;open</a> will attempt to determine
-if the hash method specified is the same as the one with which the database
-was created, and will fail if it detects that it is not.
-<p>The DB-&gt;set_h_hash interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_h_hash function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+(possibly including zero-length keys).</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_h_hash method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; the
+specified hash function differs from the hash function with which the
+database was created; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_h_nelem.html b/db/docs/api_c/db_set_h_nelem.html
index d052afff7..7117f64bd 100644
--- a/db/docs/api_c/db_set_h_nelem.html
+++ b/db/docs/api_c/db_set_h_nelem.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_nelem.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_nelem.so,v 10.33 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_h_nelem</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_h_nelem</h1>
+<h3>DB-&gt;set_h_nelem</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,66 +25,67 @@
<p>
int
DB-&gt;set_h_nelem(DB *db, u_int32_t h_nelem);
+<p>
+int
+DB-&gt;get_h_nelem(DB *db, u_int32_t *h_nelemp);
</pre></h3>
-<h1>Description</h1>
-<p>Set an estimate of the final size of the hash table.
-<p>If not set or set too low, hash tables will still expand gracefully
-as keys are entered, although a slight performance degradation may be
-noticed.
-<p>The DB-&gt;set_h_nelem interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_h_nelem function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_h_nelem</h3>
+<a name="3"><!--meow--></a>
+<p>Set an estimate of the final size of the hash table.</p>
+<p>In order for the estimate to be used when creating the database, the
+<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> method must also be called. If the estimate
+or fill factor are not set or are set too low, hash tables will still
+expand gracefully as keys are entered, although a slight performance
+degradation may be noticed.</p>
+<p>The DB-&gt;set_h_nelem method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_h_nelem method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_h_nelem will
+be ignored.
+</p>
+<p>The DB-&gt;set_h_nelem method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_nelem</b><dd>
+The <b>h_nelem</b> parameter is an estimate of the final size of the
+hash table.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_h_nelem method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_h_nelem</h3>
+<p>The DB-&gt;get_h_nelem method returns the estimate of the final size of the hash table.</p>
+<p>The DB-&gt;get_h_nelem method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_h_nelem method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_nelemp</b><dd>
+The DB-&gt;get_h_nelem method returns the
+estimate of the final size of the hash table in <b>h_nelemp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_lorder.html b/db/docs/api_c/db_set_lorder.html
index a9a3c9230..05ad69ba2 100644
--- a/db/docs/api_c/db_set_lorder.html
+++ b/db/docs/api_c/db_set_lorder.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_lorder.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_lorder.so,v 10.35 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_lorder</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_lorder</h1>
+<h3>DB-&gt;set_lorder</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,72 +25,72 @@
<p>
int
DB-&gt;set_lorder(DB *db, int lorder);
+<p>
+int
+DB-&gt;get_lorder(DB *db, int *lorderp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_lorder</h3>
+<a name="3"><!--meow--></a>
<p>Set the byte order for integers in the stored database metadata. The
-number should represent the order as an integer, for example, big endian
-order is the number 4,321, and little endian order is the number 1,234.
-If <b>lorder</b> is not explicitly set, the host order of the machine
-where the Berkeley DB library was compiled is used.
-<p>The value of <b>lorder</b> is ignored except when databases are being
-created. If a database already exists, the byte order it uses is
-determined when the database is opened.
+host byte order of the machine where the Berkeley DB library was compiled will
+be used if no byte order is set.</p>
<p><b>The access methods provide no guarantees about the byte ordering of the
application data stored in the database, and applications are responsible
-for maintaining any necessary ordering.</b>
-<p>The DB-&gt;set_lorder interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_lorder function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+for maintaining any necessary ordering.</b></p>
+<p>The DB-&gt;set_lorder method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_lorder method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_lorder will
+be ignored.
+</p>
+If creating additional databases in a single physical file, information
+specified to DB-&gt;set_lorder will be ignored and the byte order
+of the existing databases will be used.
+<p>The DB-&gt;set_lorder method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lorder</b><dd>
+The <b>lorder</b> parameter should represent the byte order as an
+integer; for example, big endian order is the number 4,321, and little
+endian order is the number 1,234.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_lorder method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_lorder</h3>
+<p>The DB-&gt;get_lorder method returns the database byte order; a byte order of 4,321 indicates a big endian
+order, and a byte order of 1,234 indicates a little endian order.</p>
+<p>The DB-&gt;get_lorder method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_lorder method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lorderp</b><dd>
+The DB-&gt;get_lorder method returns the
+database byte order in <b>lorderp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_pagesize.html b/db/docs/api_c/db_set_pagesize.html
index 7fa4af53d..20224ebc0 100644
--- a/db/docs/api_c/db_set_pagesize.html
+++ b/db/docs/api_c/db_set_pagesize.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_pagesize.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_pagesize.so,v 10.36 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_pagesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_pagesize</h1>
+<h3>DB-&gt;set_pagesize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,68 +25,71 @@
<p>
int
DB-&gt;set_pagesize(DB *db, u_int32_t pagesize);
+<p>
+int
+DB-&gt;get_pagesize(DB *db, u_int32_t *pagesizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_pagesize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the pages used to hold items in the database, in bytes.
-The minimum page size is 512 bytes and the maximum page size is 64K bytes.
-If the page size is not explicitly set, one is selected based on the
-underlying filesystem I/O block size. The automatically selected size
-has a lower limit of 512 bytes and an upper limit of 16K bytes.
+The minimum page size is 512 bytes, the maximum page size is 64K bytes,
+and the page size must be a power-of-two. If the page size is not
+explicitly set, one is selected based on the underlying filesystem I/O
+block size. The automatically selected size has a lower limit of 512
+bytes and an upper limit of 16K bytes.</p>
<p>For information on tuning the Berkeley DB page size, see
-<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.
-<p>The DB-&gt;set_pagesize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_pagesize function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.</p>
+<p>The DB-&gt;set_pagesize method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_pagesize method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_pagesize will
+be ignored.
+</p>
+If creating additional databases in a file, the page size specified must
+be consistent with the existing databases in the file or an error will
+be returned.
+<p>The DB-&gt;set_pagesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pagesize</b><dd>
+The <b>pagesize</b> parameter sets the database page size.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_pagesize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_pagesize</h3>
+<p>The DB-&gt;get_pagesize method returns the page size.</p>
+<p>The DB-&gt;get_pagesize method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_pagesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pagesizep</b><dd>
+The DB-&gt;get_pagesize method returns the
+page size in <b>pagesizep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_paniccall.html b/db/docs/api_c/db_set_paniccall.html
index 506272c96..68b17bbf8 100644
--- a/db/docs/api_c/db_set_paniccall.html
+++ b/db/docs/api_c/db_set_paniccall.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_paniccall.so,v 10.11 2000/07/09 19:12:16 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_paniccall.so,v 10.14 2002/08/18 21:15:57 bostic Exp $-->
+<!--$Id: env_set_paniccall.so,v 10.36 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_paniccall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_paniccall</h1>
+<h3>DB-&gt;set_paniccall</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,47 +26,50 @@
<p>
int
DB-&gt;set_paniccall(DB *db,
- void (*paniccall)(DB_ENV *, int errval));
+ void (*db_panic_fcn)(DB_ENV *dbenv, int errval));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_paniccall</h3>
<p>Errors can occur in the Berkeley DB library where the only solution is to shut
-down the application and run recovery. (For example, if Berkeley DB is unable
-to write log records to disk because there is insufficient disk space.)
-In these cases, the value <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is returned by Berkeley DB.
-<p>In these cases, it is also often simpler to shut down the application when
-such errors occur rather than attempting to gracefully return up the stack.
-The DB-&gt;set_paniccall function is used to specify a function to be called when
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned from a Berkeley DB method. When
-called, the <b>dbenv</b> argument will be a reference to the current
-environment, and the <b>errval</b> argument is the error value that would
-have been returned to the calling function.
-<p>For DB handles opened inside of Berkeley DB environments, calling the
-DB-&gt;set_paniccall function affects the entire environment and is equivalent to calling
-the <a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a> function.
-<p>The DB-&gt;set_paniccall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DB-&gt;set_paniccall function returns a non-zero error value on failure and 0 on success.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+down the application and run recovery (for example, if Berkeley DB is unable
+to allocate heap memory). In such cases, the Berkeley DB methods will
+return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.
+It is often easier to simply exit the application when such errors occur
+rather than gracefully return up the stack. The DB-&gt;set_paniccall method
+specifies a function to be called when
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned
+from a Berkeley DB method.</p>
+<p>For <a href="../api_c/db_class.html">DB</a> handles opened inside of Berkeley DB environments, calling the
+DB-&gt;set_paniccall method affects the entire environment and is equivalent to calling
+the <a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a> method.</p>
+<p>The DB-&gt;set_paniccall method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;set_paniccall method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_panic_fcn</b><dd>
+The <b>db_panic_fcn</b> parameter is the application-specified function
+called in the case of a database environment panic. The function takes
+two arguments:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>errval</b><dd>The <b>errval</b> parameter is the error value that would have been
+returned to the caller if <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> were not going to be
+returned instead.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_q_extentsize.html b/db/docs/api_c/db_set_q_extentsize.html
index 7ab89bdba..22b2c2f5f 100644
--- a/db/docs/api_c/db_set_q_extentsize.html
+++ b/db/docs/api_c/db_set_q_extentsize.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_q_extentsize.so,v 1.3 2000/11/21 19:25:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_q_extentsize.so,v 1.20 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_q_extentsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_q_extentsize</h1>
+<h3>DB-&gt;set_q_extentsize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,68 +25,67 @@
<p>
int
DB-&gt;set_q_extentsize(DB *db, u_int32_t extentsize);
+<p>
+int
+DB-&gt;get_q_extentsize(DB *db, u_int32_t *extentsizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_q_extentsize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the extents used to hold pages in a Queue database,
specified as a number of pages. Each extent is created as a separate
physical file. If no extent size is set, the default behavior is to
-create only a single underlying database file.
+create only a single underlying database file.</p>
<p>For information on tuning the extent size, see
-<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.
-<p>The DB-&gt;set_q_extentsize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_q_extentsize function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.</p>
+<p>The DB-&gt;set_q_extentsize method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_q_extentsize method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_q_extentsize will
+be ignored.
+</p>
+<p>The DB-&gt;set_q_extentsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>extentsize</b><dd>
+The <b>extentsize</b> parameter is the number of pages in a Queue database
+extent.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_q_extentsize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_q_extentsize</h3>
+<p>The DB-&gt;get_q_extentsize method returns the number of pages in an extent.</p>
+<p>The DB-&gt;get_q_extentsize method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_q_extentsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>extentsizep</b><dd>
+The DB-&gt;get_q_extentsize method returns the
+number of pages in an extent in <b>extentsizep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_re_delim.html b/db/docs/api_c/db_set_re_delim.html
index 6101130a5..3174fc9fa 100644
--- a/db/docs/api_c/db_set_re_delim.html
+++ b/db/docs/api_c/db_set_re_delim.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_delim.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_delim.so,v 10.36 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_re_delim</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_re_delim</h1>
+<h3>DB-&gt;set_re_delim</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,69 +24,68 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;set_re_delim(DB *db, int re_delim);
+DB-&gt;set_re_delim(DB *db, int delim);
+<p>
+int
+DB-&gt;get_re_delim(DB *db, int *delimp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_re_delim</h3>
+<a name="3"><!--meow--></a>
<p>Set the delimiting byte used to mark the end of a record in the backing
-source file for the Recno access method.
-<p>This byte is used for variable length records, if the <b>re_source</b>
+source file for the Recno access method.</p>
+<p>This byte is used for variable length records if the <b>re_source</b>
file is specified. If the <b>re_source</b> file is specified and no
-delimiting byte was specified, &lt;newline&gt; characters (i.e.
-ASCII 0x0a) are interpreted as end-of-record markers.
-<p>The DB-&gt;set_re_delim interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_re_delim function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+delimiting byte was specified, &lt;newline&gt; characters (that
+is, ASCII 0x0a) are interpreted as end-of-record markers.</p>
+<p>The DB-&gt;set_re_delim method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_re_delim method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_re_delim will
+be ignored.
+</p>
+<p>The DB-&gt;set_re_delim method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_delim</b><dd>
+The <b>re_delim</b> parameter is the delimiting byte used to mark the
+end of a record.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_re_delim method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_re_delim</h3>
+<p>The DB-&gt;get_re_delim method returns the delimiting byte.</p>
+<p>The DB-&gt;get_re_delim method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_re_delim method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>delimp</b><dd>
+The DB-&gt;get_re_delim method returns the
+delimiting byte in <b>delimp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_re_len.html b/db/docs/api_c/db_set_re_len.html
index 67b67ddfc..eb3ab1c16 100644
--- a/db/docs/api_c/db_set_re_len.html
+++ b/db/docs/api_c/db_set_re_len.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_len.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_len.so,v 10.37 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_re_len</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_re_len</h1>
+<h3>DB-&gt;set_re_len</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,72 +25,74 @@
<p>
int
DB-&gt;set_re_len(DB *db, u_int32_t re_len);
+<p>
+int
+DB-&gt;get_re_len(DB *db, u_int32_t *re_lenp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_re_len</h3>
+<a name="3"><!--meow--></a>
<p>For the Queue access method, specify that the records are of length
-<b>re_len</b>.
+<b>re_len</b>. For the Queue access method, the record length must be
+enough smaller than the database's page size that at least one record
+plus the database page's metadata information can fit on each database
+page.</p>
<p>For the Recno access method, specify that the records are fixed-length,
-not byte delimited, and are of length <b>re_len</b>.
+not byte-delimited, and are of length <b>re_len</b>.</p>
<p>Any records added to the database that are less than <b>re_len</b> bytes
long are automatically padded (see <a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a> for more
-information).
+information).</p>
<p>Any attempt to insert records into the database that are greater than
<b>re_len</b> bytes long will cause the call to fail immediately and
-return an error.
-<p>The DB-&gt;set_re_len interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_re_len function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+return an error.</p>
+<p>The DB-&gt;set_re_len method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_re_len method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_re_len will
+be ignored.
+</p>
+<p>The DB-&gt;set_re_len method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_len</b><dd>
+The <b>re_len</b> parameter is the length of a Queue or Recno database
+record, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_re_len method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_re_len</h3>
+<p>The DB-&gt;get_re_len method returns the record length.</p>
+<p>The DB-&gt;get_re_len method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_re_len method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_lenp</b><dd>
+The DB-&gt;get_re_len method returns the
+record length in <b>re_lenp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_re_pad.html b/db/docs/api_c/db_set_re_pad.html
index 43a6f947f..eb325f99b 100644
--- a/db/docs/api_c/db_set_re_pad.html
+++ b/db/docs/api_c/db_set_re_pad.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_pad.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_pad.so,v 10.34 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_re_pad</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_re_pad</h1>
+<h3>DB-&gt;set_re_pad</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,66 +25,65 @@
<p>
int
DB-&gt;set_re_pad(DB *db, int re_pad);
+<p>
+int
+DB-&gt;get_re_pad(DB *db, int *re_padp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_re_pad</h3>
+<a name="3"><!--meow--></a>
<p>Set the padding character for short, fixed-length records for the Queue
-and Recno access methods.
-<p>If no pad character is specified, &lt;space&gt; characters (i.e.,
-ASCII 0x20) are used for padding.
-<p>The DB-&gt;set_re_pad interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_re_pad function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+and Recno access methods.</p>
+<p>If no pad character is specified, &lt;space&gt; characters (that
+is, ASCII 0x20) are used for padding.</p>
+<p>The DB-&gt;set_re_pad method configures a database, not only operations performed
+using the specified <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB-&gt;set_re_pad method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_re_pad will
+be ignored.
+</p>
+<p>The DB-&gt;set_re_pad method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_pad</b><dd>
+The <b>re_pad</b> parameter is the pad character for fixed-length
+records for the Queue and Recno access methods.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;set_re_pad method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_re_pad</h3>
+<p>The DB-&gt;get_re_pad method returns the pad character.</p>
+<p>The DB-&gt;get_re_pad method may be called at any time during the life of the
+application.</p>
+<p>The DB-&gt;get_re_pad method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_padp</b><dd>
+The DB-&gt;get_re_pad method returns the
+pad character in <b>re_padp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_set_re_source.html b/db/docs/api_c/db_set_re_source.html
index 1a57cfea3..919dccee3 100644
--- a/db/docs/api_c/db_set_re_source.html
+++ b/db/docs/api_c/db_set_re_source.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_source.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_source.so,v 10.38 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;set_re_source</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;set_re_source</h1>
+<h3>DB-&gt;set_re_source</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,109 +24,95 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;set_re_source(DB *db, char *re_source);
+DB-&gt;set_re_source(DB *db, char *source);
+<p>
+int
+DB-&gt;get_re_source(DB *db, const char **sourcep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;set_re_source</h3>
+<a name="3"><!--meow--></a>
<p>Set the underlying source file for the Recno access method. The purpose
-of the <b>re_source</b> value is to provide fast access and modification
-to databases that are normally stored as flat text files.
-<p>If the <b>re_source</b> field is set, it specifies an underlying flat
-text database file that is read to initialize a transient record number
-index. In the case of variable length records, the records are separated
-as specified by <a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>. For example, standard UNIX
-byte stream files can be interpreted as a sequence of variable length
-records separated by &lt;newline&gt; characters.
+of the <b>source</b> value is to provide fast access and modification
+to databases that are normally stored as flat text files.</p>
+<p>The <b>source</b> parameter specifies an underlying flat text database
+file that is read to initialize a transient record number index. In
+the case of variable length records, the records are separated, as
+specified by <a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>. For example, standard UNIX byte
+stream files can be interpreted as a sequence of variable length records
+separated by &lt;newline&gt; characters.</p>
<p>In addition, when cached data would normally be written back to the
-underlying database file (e.g., the <a href="../api_c/db_close.html">DB-&gt;close</a> or <a href="../api_c/db_sync.html">DB-&gt;sync</a>
-methods are called), the in-memory copy of the database will be written
-back to the <b>re_source</b> file.
-<p>By default, the backing source file is read lazily, i.e., records are not
-read from the file until they are requested by the application.
+underlying database file (for example, the <a href="../api_c/db_close.html">DB-&gt;close</a> or
+<a href="../api_c/db_sync.html">DB-&gt;sync</a> methods are called), the in-memory copy of the database
+will be written back to the <b>source</b> file.</p>
+<p>By default, the backing source file is read lazily; that is, records
+are not read from the file until they are requested by the application.
<b>If multiple processes (not threads) are accessing a Recno database
-concurrently and either inserting or deleting records, the backing source
-file must be read in its entirety before more than a single process
-accesses the database, and only that process should specify the backing
-source file as part of the <a href="../api_c/db_open.html">DB-&gt;open</a> call. See the <a href="../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a>
-flag for more information.</b>
-<p><b>Reading and writing the backing source file specified by <b>re_source</b>
-cannot be transactionally protected because it involves filesystem
-operations that are not part of the Db transaction methodology.</b>
-For this reason, if a temporary database is used to hold the records,
-i.e., a NULL was specified as the <b>file</b> argument to <a href="../api_c/db_open.html">DB-&gt;open</a>,
-it is possible to lose the contents of the <b>re_source</b> file, e.g.,
-if the system crashes at the right instant.
-If a file is used to hold the database, i.e., a file name was specified
-as the <b>file</b> argument to <a href="../api_c/db_open.html">DB-&gt;open</a>, normal database
-recovery on that file can be used to prevent information loss,
-although it is still possible that the contents of <b>re_source</b>
-will be lost if the system crashes.
-<p>The <b>re_source</b> file must already exist (but may be zero-length) when
-<a href="../api_c/db_open.html">DB-&gt;open</a> is called.
-<p>It is not an error to specify a read-only <b>re_source</b> file when
+concurrently, and are either inserting or deleting records, the backing
+source file must be read in its entirety before more than a single
+process accesses the database, and only that process should specify the
+backing source file as part of the <a href="../api_c/db_open.html">DB-&gt;open</a> call. See the
+<a href="../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a> flag for more information.</b></p>
+<p><b>Reading and writing the backing source file specified by <b>source</b>
+cannot be transaction-protected because it involves filesystem
+operations that are not part of the Db transaction methodology.</b> For
+this reason, if a temporary database is used to hold the records, it is
+possible to lose the contents of the <b>source</b> file, for
+example, if the system crashes at the right instant. If a file is used
+to hold the database, normal database recovery on that file can be used
+to prevent information loss, although it is still possible that the
+contents of <b>source</b> will be lost if the system crashes.</p>
+<p>The <b>source</b> file must already exist (but may be zero-length) when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called.</p>
+<p>It is not an error to specify a read-only <b>source</b> file when
creating a database, nor is it an error to modify the resulting database.
However, any attempt to write the changes to the backing source file using
-either the <a href="../api_c/db_sync.html">DB-&gt;sync</a> or <a href="../api_c/db_close.html">DB-&gt;close</a> functions will fail, of course.
-Specify the <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag to the <a href="../api_c/db_close.html">DB-&gt;close</a> function to stop it
-from attempting to write the changes to the backing file, instead, they
-will be silently discarded.
-<p>For all of the above reasons, the <b>re_source</b> field is generally
-used to specify databases that are read-only for DB applications,
-and that are either generated on the fly by software tools, or modified
-using a different mechanism, e.g., a text editor.
-<p>The DB-&gt;set_re_source interface may only be used to configure Berkeley DB before
-the <a href="../api_c/db_open.html">DB-&gt;open</a> interface is called.
-<p>The DB-&gt;set_re_source function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+either the <a href="../api_c/db_sync.html">DB-&gt;sync</a> or <a href="../api_c/db_close.html">DB-&gt;close</a> methods will fail, of course.
+Specify the <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag to the <a href="../api_c/db_close.html">DB-&gt;close</a> method to stop it
+from attempting to write the changes to the backing file; instead, they
+will be silently discarded.</p>
+<p>For all of the previous reasons, the <b>source</b> field is generally
+used to specify databases that are read-only for Berkeley DB applications;
+and that are either generated on the fly by software tools or modified
+using a different mechanism -- for example, a text editor.</p>
+<p>The DB-&gt;set_re_source method configures operations performed using the specified
+<a href="../api_c/db_class.html">DB</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The DB-&gt;set_re_source method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+If the database already exists when
+<a href="../api_c/db_open.html">DB-&gt;open</a> is called, the information specified to DB-&gt;set_re_source must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The DB-&gt;set_re_source method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called.
+<p><dt><b>source</b><dd>
+The backing flat text database file for a Recno database.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<h3>Errors</h3>
+<p>The DB-&gt;set_re_source method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/db_open.html">DB-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB-&gt;get_re_source</h3>
+<p>The DB-&gt;get_re_source method returns the source file.</p>
+<p>The DB-&gt;get_re_source method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_stat.html b/db/docs/api_c/db_stat.html
index 92412d76d..40b76a7a5 100644
--- a/db/docs/api_c/db_stat.html
+++ b/db/docs/api_c/db_stat.html
@@ -1,20 +1,22 @@
-<!--$Id: db_stat.so,v 10.37 2000/10/03 21:55:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.75 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;stat</h1>
+<h3>DB-&gt;stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,66 +24,59 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;stat(DB *db,
- void *sp, void *(*db_malloc)(size_t), u_int32_t flags);
+DB-&gt;stat(DB *db, void *sp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;stat function creates a statistical structure and
+<hr size=1 noshade>
+<h3>Description: DB-&gt;stat</h3>
+<p>The DB-&gt;stat method creates a statistical structure and
copies a pointer to it into user-specified memory locations.
Specifically, if <b>sp</b> is non-NULL, a pointer to the statistics
-for the database are copied into the memory location it references.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="DB_CACHED_COUNTS">DB_CACHED_COUNTS</a><dd>Return a cached count of the keys and records in a database. This flag
-makes it possible for applications to request an possibly approximate key
-and record count without incurring the performance penalty of traversing
-the entire database. The statistics information described for the access
-method <b>XX_nkeys</b> and <b>XX_ndata</b> fields below is filled in,
-but no other information is collected. If the cached information has
-never been set, the fields will be returned set to 0.
-<p><dt><a name="DB_RECORDCOUNT">DB_RECORDCOUNT</a><dd>Return a count of the records in a Btree or Recno Access Method database.
-This flag makes it possible for applications to request a record count
-without incurring the performance penalty of traversing the entire
-database. The statistics information described for the <b>bt_nkeys</b>
-field below is filled in, but no other information is collected.
-<p>This option is only available for Recno databases, or Btree databases
-where the underlying database was created with the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
-</dl>
-<p>The DB-&gt;stat function may access all of the pages in the database,
+for the database are copied into the memory location to which it refers.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>If the DB_FAST_STAT flag has not been specified, the
+DB-&gt;stat method will access some of or all the pages in the database,
incurring a severe performance penalty as well as possibly flushing the
-underlying buffer pool.
+underlying buffer pool.</p>
<p>In the presence of multiple threads or processes accessing an active
-database, the information returned by DB-&gt;stat may be out-of-date.
-<p>If the database was not opened readonly and the DB_CACHED_COUNTS
-flag was not specified, the cached key and record numbers will be updated
-after the statistical information has been gathered.
-<p>The DB-&gt;stat function cannot be transaction protected. For this reason,
+database, the information returned by DB-&gt;stat may be out-of-date.</p>
+<p>If the database was not opened read-only and the DB_FAST_STAT
+flag was not specified, the cached key and record numbers will be
+updated after the statistical information has been gathered.</p>
+<p>The DB-&gt;stat method cannot be transaction-protected. For this reason,
it should be called in a thread of control that has no open cursors or
-active transactions.
-<p>The DB-&gt;stat function returns a non-zero error value on failure and 0 on success.
+active transactions.</p>
+<p>The DB-&gt;stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
<h3>Hash Statistics</h3>
<p>In the case of a Hash database,
the statistics are stored in a structure of type DB_HASH_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t hash_magic;<dd>Magic number that identifies the file as a Hash file.
-<dt>u_int32_t hash_version;<dd>The version of the Hash database.
-<dt>u_int32_t hash_nkeys;<dd>The number of unique keys in the database.
-<dt>u_int32_t hash_ndata;<dd>The number of key/data pairs in the database.]
-<dt>u_int32_t hash_pagesize;<dd>The underlying Hash database page (and bucket) size.
-<dt>u_int32_t hash_nelem;<dd>The estimated size of the hash table specified at database creation time.
-<dt>u_int32_t hash_ffactor;<dd>The desired fill factor (number of items per bucket) specified at database
-creation time.
-<dt>u_int32_t hash_buckets;<dd>The number of hash buckets.
+<dt>u_int32_t hash_magic;<dd>Magic number that identifies the file as a Hash file. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_version;<dd>The version of the Hash database. Returned if DB_FAST_STAT is
+set.
+<dt>u_int32_t hash_nkeys;<dd>The number of unique keys in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_ndata;<dd>The number of key/data pairs in the database. If DB_FAST_STAT
+was specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_pagesize;<dd>The underlying Hash database page (and bucket) size, in bytes.
+Returned if DB_FAST_STAT is set.
+<dt>u_int32_t hash_ffactor;<dd>The desired fill factor (number of items per bucket) specified at
+database-creation time. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t hash_buckets;<dd>The number of hash buckets. Returned if DB_FAST_STAT is set.
<dt>u_int32_t hash_free;<dd>The number of pages on the free list.
<dt>u_int32_t hash_bfree;<dd>The number of bytes free on bucket pages.
<dt>u_int32_t hash_bigpages;<dd>The number of big key/data pages.
@@ -95,20 +90,33 @@ that did not fit in the main bucket page).
<h3>Btree and Recno Statistics</h3>
<p>In the case of a Btree or Recno database,
the statistics are stored in a structure of type DB_BTREE_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t bt_magic;<dd>Magic number that identifies the file as a Btree database.
-<dt>u_int32_t bt_version;<dd>The version of the Btree database.
+<dt>u_int32_t bt_magic;<dd>Magic number that identifies the file as a Btree database. Returned
+if DB_FAST_STAT is set.
+<dt>u_int32_t bt_version;<dd>The version of the Btree database. Returned if DB_FAST_STAT
+is set.
<dt>u_int32_t bt_nkeys;<dd>For the Btree Access Method, the number of unique keys in the database.
-<p>For the Recno Access Method, the number of records in the database.
-<dt>u_int32_t bt_ndata;<dd>For the Btree Access Method, the number of key/data pairs in the database.
-<p>For the Recno Access Method, the number of records in the database. If
-the database has been configured to not re-number records during
-deletion, the number of records will only reflect undeleted records.
-<dt>u_int32_t bt_pagesize;<dd>Underlying database page size.
-<dt>u_int32_t bt_minkey;<dd>The minimum keys per page.
-<dt>u_int32_t bt_re_len;<dd>The length of fixed-length records.
-<dt>u_int32_t bt_re_pad;<dd>The padding byte value for fixed-length records.
+If DB_FAST_STAT was specified and the database was created with
+the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the count will be exact, otherwise, the
+count will be the last saved value unless it has never been calculated,
+in which case it will be 0. For the Recno Access Method, the exact
+number of records in the database. Returned if DB_FAST_STAT is
+set.
+<dt>u_int32_t bt_ndata;<dd>For the Btree Access Method, the number of key/data pairs in the
+database. If DB_FAST_STAT was specified the count will be the
+last saved value unless it has never been calculated, in which case it
+will be 0. For the Recno Access Method, the exact number of records in
+the database. If the database has been configured to not renumber
+records during deletion, the count of records will only reflect
+undeleted records. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t bt_pagesize;<dd>Underlying database page size, in bytes. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t bt_minkey;<dd>The minimum keys per page. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t bt_re_len;<dd>The length of fixed-length records. Returned if DB_FAST_STAT
+is set.
+<dt>u_int32_t bt_re_pad;<dd>The padding byte value for fixed-length records. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t bt_levels;<dd>Number of levels in the database.
<dt>u_int32_t bt_int_pg;<dd>Number of database internal pages.
<dt>u_int32_t bt_leaf_pg;<dd>Number of database leaf pages.
@@ -123,73 +131,73 @@ deletion, the number of records will only reflect undeleted records.
<h3>Queue Statistics</h3>
<p>In the case of a Queue database,
the statistics are stored in a structure of type DB_QUEUE_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t qs_magic;<dd>Magic number that identifies the file as a Queue file.
-<dt>u_int32_t qs_version;<dd>The version of the Queue file type.
-<dt>u_int32_t qs_nkeys;<dd>The number of records in the database.
-<dt>u_int32_t qs_ndata;<dd>The number of records in the database.
-<dt>u_int32_t qs_pagesize;<dd>Underlying database page size.
+<dt>u_int32_t qs_magic;<dd>Magic number that identifies the file as a Queue file. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_version;<dd>The version of the Queue file type. Returned if DB_FAST_STAT
+is set.
+<dt>u_int32_t qs_nkeys;<dd>The number of records in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_ndata;<dd>The number of records in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_pagesize;<dd>Underlying database page size, in bytes. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_extentsize;<dd>Underlying database extent size, in pages. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t qs_pages;<dd>Number of pages in the database.
-<dt>u_int32_t qs_re_len;<dd>The length of the records.
-<dt>u_int32_t qs_re_pad;<dd>The padding byte value for the records.
+<dt>u_int32_t qs_re_len;<dd>The length of the records. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t qs_re_pad;<dd>The padding byte value for the records. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t qs_pgfree;<dd>Number of bytes free in database pages.
-<dt>u_int32_t qs_start;<dd>Start offset.
-<dt>u_int32_t qs_first_recno;<dd>First undeleted record in the database.
-<dt>u_int32_t qs_cur_recno;<dd>Last allocated record number in the database.
+<dt>u_int32_t qs_first_recno;<dd>First undeleted record in the database. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_cur_recno;<dd>Next available record number. Returned if DB_FAST_STAT is set.
+</dl>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
+<p><dl compact>
+<p><dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
+<p>Among other things, this flag makes it possible for applications to
+request key and record counts without incurring the performance penalty
+of traversing the entire database. If the underlying database is of
+type Recno, or of type Btree and the database was created with the
+<a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the count of keys will be exact. Otherwise,
+the count of keys will be the value saved the last time the database
+was traversed, or 0 if no count of keys has ever been made. If the
+underlying database is of type Recno, the count of data items will be
+exact, otherwise, the count of data items will be the value saved the
+last time the database was traversed, or 0 if no count of data items
+has ever been done.</p>
</dl>
-<p>The DB-&gt;stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB-&gt;stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;stat function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_sync.html b/db/docs/api_c/db_sync.html
index 6af624a88..40ea2c30b 100644
--- a/db/docs/api_c/db_sync.html
+++ b/db/docs/api_c/db_sync.html
@@ -1,20 +1,22 @@
-<!--$Id: db_sync.so,v 10.20 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_sync.so,v 10.35 2003/10/31 17:24:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;sync</h1>
+<h3>DB-&gt;sync</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,75 +26,50 @@
int
DB-&gt;sync(DB *db, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;sync function flushes any cached information to disk.
-<p>If the database is in memory only, the DB-&gt;sync function has no effect and
-will always succeed.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>See <a href="../api_c/db_close.html">DB-&gt;close</a> for a discussion of Berkeley DB and cached data.
-<p>The DB-&gt;sync function returns a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-DB-&gt;sync function was being called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, there may be no reason to call
-DB-&gt;sync.)
-<h1>Errors</h1>
-<p>The DB-&gt;sync function may fail and return a non-zero error for the following conditions:
+<hr size=1 noshade>
+<h3>Description: DB-&gt;sync</h3>
+<p>The DB-&gt;sync method flushes any cached information to disk.</p>
+<p>If the database is in memory only, the DB-&gt;sync method has no effect and
+will always succeed.</p>
+<p><b>It is important to understand that flushing cached information to disk
+only minimizes the window of opportunity for corrupted data.</b> Although
+unlikely, it is possible for database corruption to happen if a system
+or application crash occurs while writing data to the database. To
+ensure that database corruption never occurs, applications must either:
+use transactions and logging with automatic recovery; use logging and
+application-specific recovery; or edit a copy of the database, and once
+all applications using the database have successfully called
+<a href="../api_c/db_close.html">DB-&gt;close</a>, atomically replace the original database with the
+updated copy.</p>
+<p>The DB-&gt;sync method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;sync method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DB-&gt;sync function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;sync function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_truncate.html b/db/docs/api_c/db_truncate.html
index e011122a0..735c8c948 100644
--- a/db/docs/api_c/db_truncate.html
+++ b/db/docs/api_c/db_truncate.html
@@ -1,20 +1,22 @@
-<!--Id: db_truncate.so,v 1.6 2001/04/18 13:44:46 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 1.24 2003/12/03 15:11:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;truncate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;truncate</h1>
+<h3>DB-&gt;truncate</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,90 +24,62 @@
#include &lt;db.h&gt;
<p>
int
-DB-&gt;truncate(DB *db, const char *file,
- const char *database, u_int32_t *countp, u_int32_t flags);
+DB-&gt;truncate(DB *db,
+ DB_TXN *txnid, u_int32_t *countp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;truncate interface empties the database specified by
-the <b>file</b> and <b>database</b> arguments, discarding all records
-it contains. If no <b>database</b> is specified, the underlying file
-represented by <b>file</b> is emptied.
+<hr size=1 noshade>
+<h3>Description: DB-&gt;truncate</h3>
+<p>The DB-&gt;truncate method empties the database, discarding all records
+it contains.
The number of records discarded from the database is returned in
-<b>countp</b>.
-<p>Truncate must have exclusive use of the database. While truncate is
-transaction-protected, it cannot be part of a application-created
-transaction.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>After DB-&gt;truncate has been called, regardless of its return,
-the DB handle may not be accessed again.
-<p>The DB-&gt;truncate function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
+<b>countp</b>.</p>
+<p>It is an error to call the DB-&gt;truncate method on a database with open
+cursors.</p>
+<p>The DB-&gt;truncate method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>countp</b><dd>
+The <b>countp</b> parameter references memory into which
+ the number of records discarded from the database is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB-&gt;truncate call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+</dl>
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The DB-&gt;truncate method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>, the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;truncate
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;truncate function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If there are open cursors in the database; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;truncate function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;truncate function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>, <a href="../api_c/db_err.html">DB-&gt;errx</a>
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>,
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_upgrade.html b/db/docs/api_c/db_upgrade.html
index e31b4d447..81f340f7a 100644
--- a/db/docs/api_c/db_upgrade.html
+++ b/db/docs/api_c/db_upgrade.html
@@ -1,20 +1,22 @@
-<!--$Id: db_upgrade.so,v 10.18 2000/05/01 15:58:04 krinsky Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_upgrade.so,v 10.36 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;upgrade</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;upgrade</h1>
+<h3>DB-&gt;upgrade</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,112 +26,83 @@
int
DB-&gt;upgrade(DB *db, const char *file, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;upgrade function upgrades all of the databases included in the
+<hr size=1 noshade>
+<h3>Description: DB-&gt;upgrade</h3>
+<p>The DB-&gt;upgrade method upgrades all of the databases included in the
file <b>file</b>, if necessary. If no upgrade is necessary,
-DB-&gt;upgrade always returns success.
-<p><b>Database upgrades are done in place and are destructive, e.g., if pages
-need to be allocated and no disk space is available, the database may be
-left corrupted. Backups should be made before databases are upgraded.
-See <a href="../ref/am/upgrade.html">Upgrading databases</a> for more
-information.</b>
+DB-&gt;upgrade always returns success.</p>
+<p><b>Database upgrades are done in place and are destructive. For example,
+if pages need to be allocated and no disk space is available, the
+database may be left corrupted. Backups should be made before databases
+are upgraded. See <a href="../ref/am/upgrade.html">Upgrading databases</a>
+for more information.</b></p>
<p>Unlike all other database operations, DB-&gt;upgrade may only be done
-on a system with the same byte-order as the database.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+on a system with the same byte-order as the database.</p>
+<p>The DB-&gt;upgrade method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>The DB-&gt;upgrade method is the underlying method used by the <a href="../utility/db_upgrade.html">db_upgrade</a> utility.
+See the <a href="../utility/db_upgrade.html">db_upgrade</a> utility source code for an example of using DB-&gt;upgrade
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file containing the databases
+to be upgraded.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd><b>This flag is only meaningful when upgrading databases from
releases before the Berkeley DB 3.1 release.</b>
-<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release, the
-on-disk format of duplicate data items changed. To correctly upgrade the
-format requires applications specify if duplicate data items in the
-database are sorted or not. Specifying the DB_DUPSORT flag
-informs DB-&gt;upgrade that the duplicates are sorted, otherwise they
-are assumed to be unsorted. Incorrectly specifying the value of this flag
-may lead to database corruption.
-<p>Further, because the DB-&gt;upgrade function upgrades a physical file
-(including all of the databases it contains), it is not possible to use
-DB-&gt;upgrade to upgrade files where some of the databases it
-includes have sorted duplicate data items and some of the databases it
+<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release,
+the on-disk format of duplicate data items changed. To correctly
+upgrade the format requires applications to specify whether duplicate
+data items in the database are sorted or not. Specifying the
+DB_DUPSORT flag informs DB-&gt;upgrade that the duplicates
+are sorted; otherwise they are assumed to be unsorted. Incorrectly
+specifying the value of this flag may lead to database corruption.</p>
+<p>Further, because the DB-&gt;upgrade method upgrades a physical file
+(including all the databases it contains), it is not possible to use
+DB-&gt;upgrade to upgrade files in which some of the databases it
+includes have sorted duplicate data items, and some of the databases it
includes have unsorted duplicate data items. If the file does not have
-more than a single database, or the databases do not support duplicate
-data items, or all of the databases that support duplicate data items
+more than a single database, if the databases do not support duplicate
+data items, or if all of the databases that support duplicate data items
support the same style of duplicates (either sorted or unsorted),
-DB-&gt;upgrade will work correctly as long as the DB_DUPSORT
-flag is correctly specified. Otherwise, the file cannot be upgraded using
-DB-&gt;upgrade, and must be upgraded manually by dumping and
-re-loading the databases.
+DB-&gt;upgrade will work correctly as long as the
+DB_DUPSORT flag is correctly specified. Otherwise, the file
+cannot be upgraded using DB-&gt;upgrade; it must be upgraded
+manually by dumping and reloading the databases.</p>
</dl>
-<p>The DB-&gt;upgrade function returns a non-zero error value on failure and 0 on success.
-<p>The DB-&gt;upgrade function is the underlying function used by the <a href="../utility/db_upgrade.html">db_upgrade</a> utility.
-See the <a href="../utility/db_upgrade.html">db_upgrade</a> utility source code for an example of using DB-&gt;upgrade
-in a IEEE/ANSI Std 1003.1 (POSIX) environment.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;upgrade
-is affected by the configuration value DB_DATA_DIR.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;upgrade function may fail and return a non-zero error for the following conditions:
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>DB-&gt;upgrade is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DB-&gt;upgrade method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The database is not in the same byte-order as the system.
+<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be upgraded by this version of the Berkeley DB software.
</dl>
<p><dl compact>
-<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be upgraded by this version of the Berkeley DB software.
+<p><dt>EINVAL<dd>If the database is not in the same byte-order as the system; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;upgrade function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;upgrade function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/db_verify.html b/db/docs/api_c/db_verify.html
index d011d90ab..ab3dad1c1 100644
--- a/db/docs/api_c/db_verify.html
+++ b/db/docs/api_c/db_verify.html
@@ -1,20 +1,22 @@
-<!--$Id: db_verify.so,v 10.3 2000/04/11 15:13:51 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_verify.so,v 10.28 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB-&gt;verify</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DB-&gt;verify</h1>
+<h3>DB-&gt;verify</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,24 +27,59 @@ int
DB-&gt;verify(DB *db, const char *file,
const char *database, FILE *outfile, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB-&gt;verify function verifies the integrity of all databases in the
-file specified by the file argument, and optionally outputs the databases'
-key/data pairs to a file stream.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DB-&gt;verify</h3>
+<p>The DB-&gt;verify method verifies the integrity of all databases in the
+file specified by the <b>file</b> parameter, and optionally outputs the
+databases' key/data pairs to the file stream specified by the
+<b>outfile</b> parameter.</p>
+<p><b>The DB-&gt;verify method does not perform any locking, even in Berkeley DB
+environments that are configured with a locking subsystem. As such, it
+should only be used on files that are not being modified by another
+thread of control.</b></p>
+<p>The DB-&gt;verify method may not be called after the <a href="../api_c/db_open.html">DB-&gt;open</a> method is called.
+</p>
+<p>The <a href="../api_c/db_class.html">DB</a> handle may not be accessed again after DB-&gt;verify is
+called, regardless of its return.</p>
+<p>The DB-&gt;verify method is the underlying method used by the <a href="../utility/db_verify.html">db_verify</a> utility.
+See the <a href="../utility/db_verify.html">db_verify</a> utility source code for an example of using DB-&gt;verify
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<a name="3"><!--meow--></a>
+<p>
+The DB-&gt;verify method will return DB_VERIFY_BAD if a database is
+corrupted. When the DB_SALVAGE flag is specified, the
+DB_VERIFY_BAD return means that all key/data pairs in the file
+may not have been successfully output.
+Unless otherwise specified, the DB-&gt;verify method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database in <b>file</b> on which
+the database checks for btree and duplicate sort order and for hashing
+are to be performed. See the DB_ORDERCHKONLY flag for more
+information.
+<p>The database parameter must be set to NULL except when the
+DB_ORDERCHKONLY flag is set.</p>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file in which the databases
+to be verified are found.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_SALVAGE">DB_SALVAGE</a><dd>Write the key/data pairs from all databases in the file to the file stream
-named in
-the <b>outfile</b> argument. The output format is the same as that
-specified for the <a href="../utility/db_dump.html">db_dump</a> utility and can be used as input for
-the <a href="../utility/db_load.html">db_load</a> utility.
+<p><dt><a name="DB_SALVAGE">DB_SALVAGE</a><dd>Write the key/data pairs from all databases in the file to the file
+stream named in the <b>outfile</b> parameter. The output format is the
+same as that specified for the <a href="../utility/db_dump.html">db_dump</a> utility, and can be used
+as input for the <a href="../utility/db_load.html">db_load</a> utility.
<p>Because the key/data pairs are output in page order as opposed to the sort
order used by <a href="../utility/db_dump.html">db_dump</a>, using DB-&gt;verify to dump key/data
-pairs normally produces less than optimal loads for Btree databases.
+pairs normally produces less than optimal loads for Btree databases.</p>
</dl>
<p>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the
-<b>flags</b> parameter:
+<b>flags</b> parameter:</p>
<p><dl compact>
<p><dt><a name="DB_AGGRESSIVE">DB_AGGRESSIVE</a><dd>Output <b>all</b> the key/data pairs in the file that can be found.
By default, DB-&gt;verify does not assume corruption. For example,
@@ -53,98 +90,64 @@ case, key/data pairs that are corrupted or have been deleted may appear
in the output (even if the file being salvaged is in no way corrupt), and
the output will almost certainly require editing before being loaded into
a database.
+<p><dt><a name="DB_PRINTABLE">DB_PRINTABLE</a><dd>When using the DB_SALVAGE flag, if characters in either the key
+or data items are printing characters (as defined by <b>isprint</b>(3)), use printing characters to represent them. This flag permits users
+to use standard text editors and tools to modify the contents of
+databases or selectively remove data from salvager output.
+<p>Note: different systems may have different notions about what characters
+are considered <i>printing characters</i>, and databases dumped in
+this manner may be less portable to external systems.</p>
<p><dt><a name="DB_NOORDERCHK">DB_NOORDERCHK</a><dd>Skip the database checks for btree and duplicate sort order and for
hashing.
-<p>The DB-&gt;verify function normally verifies that btree keys and duplicate
-items are correctly sorted and hash keys are correctly hashed. If the
+<p>The DB-&gt;verify method normally verifies that btree keys and duplicate
+items are correctly sorted, and hash keys are correctly hashed. If the
file being verified contains multiple databases using differing sorting
or hashing algorithms, some of them must necessarily fail database
-verification as only one sort order or hash function can be specified
-before DB-&gt;verify is called. To verify files with multiple
-databases having differing sorting orders or hashing functions, first
-perform verification of the file as a whole by using the
+verification because only one sort order or hash function can be
+specified before DB-&gt;verify is called. To verify files with
+multiple databases having differing sorting orders or hashing functions,
+first perform verification of the file as a whole by using the
DB_NOORDERCHK flag, and then individually verify the sort order
and hashing function for each database in the file using the
-DB_ORDERCHKONLY flag.
+DB_ORDERCHKONLY flag.</p>
<p><dt><a name="DB_ORDERCHKONLY">DB_ORDERCHKONLY</a><dd>Perform the database checks for btree and duplicate sort order and for
hashing, skipped by DB_NOORDERCHK.
-<p>When this flag is specified, a <b>database</b> argument should also be
+<p>When this flag is specified, a <b>database</b> parameter should also be
specified, indicating the database in the physical file which is to be
checked. This flag is only safe to use on databases that have already
successfully been verified using DB-&gt;verify with the
-DB_NOORDERCHK flag set.
+DB_NOORDERCHK flag set.</p>
</dl>
-<p>The database argument must be set to NULL except when the
-DB_ORDERCHKONLY flag is set.
-<p>The DB-&gt;verify function returns a non-zero error value on failure, 0 on success, and <a href="../ref/program/errorret.html#DB_VERIFY_BAD">DB_VERIFY_BAD</a> if a database is corrupted. When the
-DB_SALVAGE flag is specified, the <a href="../ref/program/errorret.html#DB_VERIFY_BAD">DB_VERIFY_BAD</a> return
-means that all key/data pairs in the file may not have been successfully
-output.
-<p>The DB-&gt;verify function is the underlying function used by the <a href="../utility/db_verify.html">db_verify</a> utility.
-See the <a href="../utility/db_verify.html">db_verify</a> utility source code for an example of using DB-&gt;verify
-in a IEEE/ANSI Std 1003.1 (POSIX) environment.
-<h1>Environment Variables</h1>
+<p><dt><b>outfile</b><dd>
+The <b>outfile</b> parameter is an optional file stream to which the
+databases' key/data pairs are written.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>DB-&gt;verify is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, DB-&gt;verify
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<h1>Errors</h1>
-<p>The DB-&gt;verify function may fail and return a non-zero error for the following conditions:
+<p>The DB-&gt;verify method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If DB-&gt;verify was called after <a href="../api_c/db_open.html">DB-&gt;open</a>; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB-&gt;verify function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB-&gt;verify function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_malloc.html">DB-&gt;set_malloc</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_realloc.html">DB-&gt;set_realloc</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_class.html b/db/docs/api_c/dbc_class.html
index be55405f7..16ff16892 100644
--- a/db/docs/api_c/dbc_class.html
+++ b/db/docs/api_c/dbc_class.html
@@ -1,21 +1,22 @@
-<!--Id: dbc_class.so,v 10.16 2002/08/24 18:22:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_class.so,v 10.18 2003/05/09 20:14:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBC</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBC</h1>
+<h3>DBC</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,18 +25,20 @@
<p>
typedef struct __dbc DBC;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DBC</h3>
<p>The DBC object is the handle for a cursor into a Berkeley DB database.
-The handle is not free-threaded, and cursors may not span threads; nor
-may cursors be used by more than a single thread. If the cursor is to
-be used to perform operations on behalf of a transaction, the cursor
-must be opened and closed within the context of that single transaction.
-Once <a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a> has been called, the handle may not be accessed
-again, regardless of the method's return.
+The handle is not free-threaded. Cursor handles may be used by multiple
+threads, but only serially, that is, the application must serialize
+access to the DBC handle.</p>
+<p>If the cursor is to be used to perform operations on behalf of a
+transaction, the cursor must be opened and closed within the context of
+that single transaction. Once <a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a> has been called, the
+handle may not be accessed again, regardless of the method's return.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_close.html b/db/docs/api_c/dbc_close.html
index 20eb28d95..e5508bfa3 100644
--- a/db/docs/api_c/dbc_close.html
+++ b/db/docs/api_c/dbc_close.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_close.so,v 10.20 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 10.31 2003/10/31 17:24:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_close</h1>
+<h3>DBcursor-&gt;c_close</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,43 +24,44 @@
#include &lt;db.h&gt;
<p>
int
-DBcursor-&gt;c_close(DBC *cursor);
+DBcursor-&gt;c_close(DBC *DBcursor);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_close function discards the cursor.
-<p>It is possible for the DBcursor-&gt;c_close function to return
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_close</h3>
+<p>The DBcursor-&gt;c_close method discards the cursor.</p>
+<p>It is possible for the DBcursor-&gt;c_close method to return
<a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, signaling that any enclosing transaction should
be aborted. If the application is already intending to abort the
transaction, this error should be ignored, and the application should
-proceed.
-<p>Once DBcursor-&gt;c_close has been called, regardless of its return, the
-cursor handle may not be used again.
-<p>The DBcursor-&gt;c_close function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_close function may fail and return a non-zero error for the following conditions:
+proceed.</p>
+<p>After DBcursor-&gt;c_close has been called, regardless of its return, the
+cursor handle may not be used again.</p>
+<p>The DBcursor-&gt;c_close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_close method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
+<p><dt>EINVAL<dd>If the cursor is already closed; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DBcursor-&gt;c_close function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_close function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_count.html b/db/docs/api_c/dbc_count.html
index 434a0ce8c..c5ad27375 100644
--- a/db/docs/api_c/dbc_count.html
+++ b/db/docs/api_c/dbc_count.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_count.so,v 10.4 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_count.so,v 10.24 2003/10/31 17:24:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_count</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_count</h1>
+<h3>DBcursor-&gt;c_count</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,34 +24,44 @@
#include &lt;db.h&gt;
<p>
int
-DBC-&gt;c_count(DBC *cursor, db_recno_t *countp, u_int32_t flags);
+DBcursor-&gt;c_count(DBC *DBcursor, db_recno_t *countp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_count function returns a count of the number of duplicate data
-items for the key referenced by the
-cursor into the memory location referenced by <b>countp</b>.
-If the underlying database does not support duplicate data items the call
-will still succeed and a count of 1 will be returned.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>If the <b>cursor</b> argument is not yet initialized, the DBcursor-&gt;c_count function will return EINVAL.
-<p>Otherwise, the DBcursor-&gt;c_count function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_count function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_count function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_count</h3>
+<p>The DBcursor-&gt;c_count method returns a count of the number of data items for
+the key to which the cursor refers.</p>
+<p>The DBcursor-&gt;c_count method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>countp</b><dd>
+The <b>countp</b> parameter references memory into which
+ the count of the number of duplicate data items is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_count method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_del.html b/db/docs/api_c/dbc_del.html
index 110d97471..91ec09d8b 100644
--- a/db/docs/api_c/dbc_del.html
+++ b/db/docs/api_c/dbc_del.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_del.so,v 10.23 2000/05/22 20:51:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_del.so,v 10.43 2003/10/31 17:24:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_del</h1>
+<h3>DBcursor-&gt;c_del</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,47 +24,66 @@
#include &lt;db.h&gt;
<p>
int
-DBcursor-&gt;c_del(DBC *cursor, u_int32_t flags);
+DBcursor-&gt;c_del(DBC *DBcursor, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_del function deletes the key/data pair currently referenced by
-the cursor.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_del</h3>
+<p>The DBcursor-&gt;c_del method deletes the key/data pair to which the cursor
+refers.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index using the <a href="../api_c/db_associate.html">DB-&gt;associate</a> method, the <a href="../api_c/db_del.html">DB-&gt;del</a> method
+deletes the key/data pair from the primary database and all secondary
+indices.</p>
<p>The cursor position is unchanged after a delete, and subsequent calls to
-cursor functions expecting the cursor to reference an existing key will
-fail.
-<p>If the element has already been deleted, DBcursor-&gt;c_del will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the DBcursor-&gt;c_del function will return EINVAL.
-<p>Otherwise, the DBcursor-&gt;c_del function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_del function may fail and return a non-zero error for the following conditions:
+cursor functions expecting the cursor to refer to an existing key will
+fail.</p>
+<p>
+The DBcursor-&gt;c_del method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the element has already been deleted.
+Unless otherwise specified, the DBcursor-&gt;c_del method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_del method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
+</dl>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
+</dl>
+<p><dl compact>
+<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag was
-specified to <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+specified to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<p>The DBcursor-&gt;c_del function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_del function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_dup.html b/db/docs/api_c/dbc_dup.html
index 42e3531ca..0c05aa923 100644
--- a/db/docs/api_c/dbc_dup.html
+++ b/db/docs/api_c/dbc_dup.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_dup.so,v 10.8 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_dup.so,v 10.30 2003/11/08 19:17:25 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_dup</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_dup</h1>
+<h3>DBcursor-&gt;c_dup</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,51 +24,51 @@
#include &lt;db.h&gt;
<p>
int
-DBC-&gt;c_dup(DBC *cursor, DBC **cursorp, u_int32_t flags);
+DBcursor-&gt;c_dup(DBC *DBcursor, DBC **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_dup function creates a new cursor that uses the same transaction
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_dup</h3>
+<p>The DBcursor-&gt;c_dup method creates a new cursor that uses the same transaction
and locker ID as the original cursor. This is useful when an application
is using locking and requires two or more cursors in the same thread of
-control.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+control.</p>
+<p>The DBcursor-&gt;c_dup method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_POSITION">DB_POSITION</a><dd>The newly created cursor is initialized to reference the same position
+<p><dt><a name="DB_POSITION">DB_POSITION</a><dd>The newly created cursor is initialized to refer to the same position
in the database as the original cursor and hold the same locks. If the
DB_POSITION flag is not specified, then the created cursor is
uninitialized and will behave like a cursor newly created using
<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>.
</dl>
-<p>When using the Berkeley DB Concurrent Data Store product, there can be only one active write cursor
-at a time. For this reason, attempting to duplicate a cursor for which
-the <a href="../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag was specified during creation will return
-an error.
-<p>If the <b>cursor</b> argument is not yet initialized, the DBcursor-&gt;c_dup function will return EINVAL.
-<p>Otherwise, the DBcursor-&gt;c_dup function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_dup function may fail and return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_dup method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <b>cursor</b> argument was created using the
-<a href="../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag in the Berkeley DB Concurrent Data Store product.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The DBcursor-&gt;c_dup function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_dup function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_get.html b/db/docs/api_c/dbc_get.html
index 014661f33..fe3f4533a 100644
--- a/db/docs/api_c/dbc_get.html
+++ b/db/docs/api_c/dbc_get.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_get.so,v 10.46 2001/01/19 17:29:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 10.108 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_get</h1>
+<h3>DBcursor-&gt;c_get</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,146 +24,316 @@
#include &lt;db.h&gt;
<p>
int
-DBcursor-&gt;c_get(DBC *cursor,
+DBcursor-&gt;c_get(DBC *DBcursor,
DBT *key, DBT *data, u_int32_t flags);
+<p>
+int
+DBcursor-&gt;c_pget(DBC *DBcursor,
+ DBT *key, DBT *pkey, DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_get function retrieves key/data pairs from the database. The
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_get</h3>
+<a name="3"><!--meow--></a>
+<p>The DBcursor-&gt;c_get method retrieves key/data pairs from the database. The
address and length of the key
-are returned in the object referenced by <b>key</b> (except for the case
-of the DB_SET flag where the <b>key</b> object is unchanged),
-and the address and length of
-the data are returned in the object referenced by <b>data</b>.
+are returned in the object to which <b>key</b> refers (except for the
+case of the DB_SET flag, in which the <b>key</b> object is
+unchanged), and the address
+and length of the data are returned in the object to which <b>data</b>
+refers.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index using the <a href="../api_c/db_associate.html">DB-&gt;associate</a> method, the DBcursor-&gt;c_get
+and DBcursor-&gt;c_pget methods return the key from the secondary index and the
+data item from the primary database. In addition, the
+DBcursor-&gt;c_pget method
+returns the key from the primary database. In databases that are not
+secondary indices, the
+DBcursor-&gt;c_pget method
+will always fail.</p>
<p>Modifications to the database during a sequential scan will be reflected
-in the scan, i.e. records inserted behind a cursor will not be returned
-while records inserted in front of a cursor will be returned.
-<p>In Queue and Recno databases, missing entries (i.e., entries that were
-never explicitly created or that were created and then deleted), will be
-skipped during a sequential scan.
-<p>If multiple threads or processes insert items into the same database file
-without using locking, the results are undefined.
-For more detail,
-see <a href="../ref/am/stability.html">Cursor stability</a>.
-<p>The <b>flags</b> parameter must be set to one of the following values:
+in the scan; that is, records inserted behind a cursor will not be
+returned while records inserted in front of a cursor will be returned.</p>
+<p>In Queue and Recno databases, missing entries (that is, entries that
+were never explicitly created or that were created and then deleted)
+will be skipped during a sequential scan.</p>
+<p>Unless otherwise specified, the DBcursor-&gt;c_get method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>If DBcursor-&gt;c_get fails for any reason, the state of the cursor will be
+unchanged.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the key/data pair currently referenced by the cursor.
-<p>If the cursor key/data pair was deleted, DBcursor-&gt;c_get will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the DBcursor-&gt;c_get function will return EINVAL.
-<p><dt><a name="DB_FIRST">DB_FIRST</a>, <a name="DB_LAST">DB_LAST</a><dd>The cursor is set to reference the first (last) key/data pair of the
-database, and that pair is returned. In the presence of duplicate key
-values, the first (last) data item in the set of duplicates is returned.
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the key/data pair to which the cursor refers.
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if DB_CURRENT is set and the cursor key/data pair was deleted.
+</p>
+<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>The cursor is set to refer to the first key/data pair of the database,
+and that pair is returned. If the first key has duplicate values, the
+first data item in the set of duplicates is returned.
<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
-DB_FIRST (DB_LAST) flags will ignore any keys that exist
-but were never explicitly created by the application or were created and
-later deleted.
-<p>If the database is empty, DBcursor-&gt;c_get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+DB_FIRST flag will ignore any keys that exist but were never
+explicitly created by the application, or were created and later
+deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_FIRST is set and the database is empty.
+</p>
<p><dt><a name="DB_GET_BOTH">DB_GET_BOTH</a><dd>The DB_GET_BOTH flag is identical to the DB_SET flag,
-except that both the key and the data arguments must be matched by the
+except that both the key and the data parameters must be matched by the
key and data item in the database.
+<p>When used with the
+DBcursor-&gt;c_pget method
+version of this method on a secondary index handle, both the
+secondary and primary keys must be matched by the secondary and primary
+key item in the database. It is an error to use the DB_GET_BOTH
+flag with the
+DBcursor-&gt;c_get
+version of this method and a cursor that has been opened on a
+secondary index handle.</p>
+<p><dt><a name="DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a><dd>The DB_GET_BOTH_RANGE flag is identical to the DB_GET_BOTH
+flag, except that, in the case of any database supporting sorted
+duplicate sets, the returned key/data pair is the smallest data item
+greater than or equal to the specified data item (as determined by the
+comparison function), permitting partial matches and range searches in
+duplicate data sets.
<p><dt><a name="DB_GET_RECNO">DB_GET_RECNO</a><dd>Return the record number associated with the cursor. The record number
-will be returned in <b>data</b> as described in <a href="../api_c/dbt.html">DBT</a>. The
+will be returned in <b>data</b>, as described in <a href="../api_c/dbt_class.html">DBT</a>. The
<b>key</b> parameter is ignored.
<p>For DB_GET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
+of type Btree, and it must have been created with the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
+flag.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index, the
+DBcursor-&gt;c_get and DBcursor-&gt;c_pget methods return
+the record number of the primary database in <b>data</b>. In addition,
+the
+DBcursor-&gt;c_pget method
+returns the record number of the secondary index in <b>pkey</b>. If
+either underlying database is not of type Btree or is not created with
+the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the out-of-band record number of 0 is
+returned.</p>
<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup key for
the primary database, but simply return it in the key parameter instead.
The data parameter is left unchanged.
<p>For DB_JOIN_ITEM to be specified, the underlying cursor must have
-been returned from the <a href="../api_c/db_join.html">DB-&gt;join</a> function.
-<p><dt><a name="DB_NEXT">DB_NEXT</a>, <a name="DB_PREV">DB_PREV</a><dd>If the cursor is not yet initialized, DB_NEXT (DB_PREV)
-is identical to DB_FIRST (DB_LAST). Otherwise, the cursor
-is moved to the next (previous) key/data pair of the database, and that
-pair is returned. In the presence of duplicate key values, the value of
-the key may not change.
+been returned from the <a href="../api_c/db_join.html">DB-&gt;join</a> method.</p>
+<p><dt><a name="DB_LAST">DB_LAST</a><dd>The cursor is set to refer to the last key/data pair of the database,
+and that pair is returned. If the last key has duplicate values, the
+last data item in the set of duplicates is returned.
+<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
+DB_LAST flag will ignore any keys that exist but were never
+explicitly created by the application, or were created and later
+deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_LAST is set and the database is empty.
+</p>
+<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>If the cursor is not yet initialized, DB_NEXT is identical to
+DB_FIRST. Otherwise, the cursor is moved to the next key/data
+pair of the database, and that pair is returned. In the presence of
+duplicate key values, the value of the key may not change.
+<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
+DB_NEXT flag will skip any keys that exist but were never
+explicitly created by the application, or those that were created and
+later deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT is set and the cursor is already on the last record
+in the database.
+</p>
+<p><dt><a name="DB_NEXT_DUP">DB_NEXT_DUP</a><dd>If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, the cursor is moved to the next key/data pair
+of the database, and that pair is returned.
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT_DUP is set and the next key/data pair of the
+database is not a duplicate data record for the current key/data pair.
+</p>
+<p><dt><a name="DB_NEXT_NODUP">DB_NEXT_NODUP</a><dd>If the cursor is not yet initialized, DB_NEXT_NODUP is identical
+to DB_FIRST. Otherwise, the cursor is moved to the next
+non-duplicate key of the database, and that key/data pair is returned.
<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
-DB_NEXT (DB_PREV) flag will skip any keys that exist but
-were never explicitly created by the application or were created and later
-deleted.
-<p>If the cursor is already on the last (first) record in the database,
-DBcursor-&gt;c_get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p><dt><a name="DB_NEXT_DUP">DB_NEXT_DUP</a><dd>If the next key/data pair of the database is a duplicate record for the
-current key/data pair, the cursor is moved to the next key/data pair of
-the database, and that pair is returned. Otherwise, DBcursor-&gt;c_get will
-return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p>If the cursor is not yet initialized, the DBcursor-&gt;c_get function will return EINVAL.
-<p><dt><a name="DB_NEXT_NODUP">DB_NEXT_NODUP</a>, <a name="DB_PREV_NODUP">DB_PREV_NODUP</a><dd>If the cursor is not yet initialized, DB_NEXT_NODUP
-(DB_PREV_NODUP) is identical to DB_FIRST
-(DB_LAST). Otherwise, the cursor is moved to the next (previous)
-non-duplicate key/data pair of the database, and that pair is returned.
+DB_NEXT_NODUP flag will ignore any keys that exist but were
+never explicitly created by the application, or those that were created
+and later deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT_NODUP is set and no non-duplicate key/data pairs
+occur after the cursor position in the database.
+</p>
+<p><dt><a name="DB_PREV">DB_PREV</a><dd>If the cursor is not yet initialized, DB_PREV is identical to
+DB_LAST. Otherwise, the cursor is moved to the previous
+key/data pair of the database, and that pair is returned. In the
+presence of duplicate key values, the value of the key may not change.
+<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
+DB_PREV flag will skip any keys that exist but were never
+explicitly created by the application, or those that were created and
+later deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV is set and the cursor is already on the first record
+in the database.
+</p>
+<p><dt><a name="DB_PREV_NODUP">DB_PREV_NODUP</a><dd>If the cursor is not yet initialized, DB_PREV_NODUP is identical
+to DB_LAST. Otherwise, the cursor is moved to the previous
+non-duplicate key of the database, and that key/data pair is returned.
<p>If the database is a Queue or Recno database, DBcursor-&gt;c_get using the
-DB_NEXT_NODUP (DB_PREV_NODUP) flags will ignore any keys
-that exist but were never explicitly created by the application or were
-created and later deleted.
-<p>If no non-duplicate key/data pairs occur after (before) the cursor
-position in the database, DBcursor-&gt;c_get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+DB_PREV_NODUP flag will ignore any keys that exist but were
+never explicitly created by the application, or those that were created
+and later deleted.</p>
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV_NODUP is set and no non-duplicate key/data pairs
+occur before the cursor position in the database.
+</p>
<p><dt><a name="DB_SET">DB_SET</a><dd>Move the cursor to the specified key/data pair of the database, and
return the datum associated with the given key.
-<p>In the presence of duplicate key values, DBcursor-&gt;c_get will return the
+<p>
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_SET is set and
+no matching keys are found.
+The DBcursor-&gt;c_get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if DB_SET is set and the database is a
+Queue or Recno database, and the specified key exists, but was never
+explicitly created by the application or was later deleted.
+In the presence of duplicate key values, DBcursor-&gt;c_get will return the
first data item for the given key.
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-DBcursor-&gt;c_get will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If no matching keys are found, DBcursor-&gt;c_get will return
-<a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+</p>
<p><dt><a name="DB_SET_RANGE">DB_SET_RANGE</a><dd>The DB_SET_RANGE flag is identical to the DB_SET flag,
-except that the key is returned as well as the data item, and, in the case
-of the Btree access method, the returned key/data pair is the smallest
+except that in the case of the Btree access method, the key is returned
+as well as the data item and the returned key/data pair is the smallest
key greater than or equal to the specified key (as determined by the
-comparison function), permitting partial key matches and range
+Btree comparison function), permitting partial key matches and range
searches.
<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Move the cursor to the specific numbered record of the database, and
return the associated key/data pair. The <b>data</b> field of the
specified <b>key</b>
-must be a pointer to a memory location from which a <a href="../api_c/dbt.html#db_recno_t">db_recno_t</a>
-may be read, as described in <a href="../api_c/dbt.html">DBT</a>. This memory location will be
+must be a pointer to a memory location from which a <a href="../api_c/dbt_class.html#db_recno_t">db_recno_t</a>
+may be read, as described in <a href="../api_c/dbt_class.html">DBT</a>. This memory location will be
read to determine the record to be retrieved.
<p>For DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
+of type Btree, and it must have been created with the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
+flag.</p>
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+In addition, the following flags may be set by
+bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_MULTIPLE">DB_MULTIPLE</a><dd>Return multiple data items in the <b>data</b> parameter.
+<p>In the case of Btree or Hash databases, duplicate data items for the
+current key, starting at the current cursor position, are entered into
+the buffer. Subsequent calls with both the DB_NEXT_DUP and
+DB_MULTIPLE flags specified will return additional duplicate
+data items associated with the current key or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if
+there are no additional duplicate data items to return. Subsequent
+calls with both the DB_NEXT and DB_MULTIPLE flags
+specified will return additional duplicate data items associated with
+the current key or if there are no additional duplicate data items will
+return the next key and its data items or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if there
+are no additional keys in the database.</p>
+<p>In the case of Queue or Recno databases, data items starting at the
+current cursor position are entered into the buffer. The record number
+of the first record will be returned in the <b>key</b> parameter. The
+record number of each subsequent returned record must be calculated from
+this value. Subsequent calls with the DB_MULTIPLE flag
+specified will return additional data items or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if
+there are no additional data items to return.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The multiple data items can be iterated over using the
+<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a> macro.</p>
+<p>The DB_MULTIPLE flag may only be used with the
+DB_CURRENT, DB_FIRST, DB_GET_BOTH,
+DB_GET_BOTH_RANGE, DB_NEXT, DB_NEXT_DUP,
+DB_NEXT_NODUP, DB_SET, DB_SET_RANGE, and
+DB_SET_RECNO options. The DB_MULTIPLE flag may not be
+used when accessing databases made into secondary indices using the
+<a href="../api_c/db_associate.html">DB-&gt;associate</a> method.</p>
+<p><dt><a name="DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a><dd>Return multiple key and data pairs in the <b>data</b> parameter.
+<p>Key and data pairs, starting at the current cursor position, are entered
+into the buffer. Subsequent calls with both the DB_NEXT and
+DB_MULTIPLE flags specified will return additional key and data
+pairs or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if there are no additional key and data
+items to return.</p>
+<p>In the case of Btree or Hash databases,
+the multiple key and data pairs can be iterated over using the
+<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a> macro.</p>
+<p>In the case of Queue or Recno databases,
+the multiple record number and data pairs can be iterated over using the
+<a href="../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a> macro.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The DB_MULTIPLE_KEY flag may only be used with the
+DB_CURRENT, DB_FIRST, DB_GET_BOTH,
+DB_GET_BOTH_RANGE, DB_NEXT, DB_NEXT_DUP,
+DB_NEXT_NODUP, DB_SET, DB_SET_RANGE, and
+DB_SET_RECNO options. The DB_MULTIPLE_KEY flag may not
+be used when accessing databases made into secondary indices using the
+<a href="../api_c/db_associate.html">DB-&gt;associate</a> method.</p>
<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
+</dl>
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>pkey</b><dd>
+The secondary index key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+</dl>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_get method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<p>Otherwise, the DBcursor-&gt;c_get function returns a non-zero error value on failure and 0 on success.
-<p>If DBcursor-&gt;c_get fails for any reason, the state of the cursor will be
-unchanged.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_get function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>There was insufficient memory to return the requested item.
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cursor was not currently initialized.
+<p><dt>EINVAL<dd>If the DB_CURRENT or DB_NEXT_DUP flags were specified and
+the cursor has not been initialized;
+the
+DBcursor-&gt;c_pget method
+was called with a cursor that does not refer to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DBcursor-&gt;c_get function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_get function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<p><dl compact>
+<p><dt>ENOMEM<dd>The requested item could not be returned due to insufficient memory.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_list.html b/db/docs/api_c/dbc_list.html
index 4fd0adefa..002d58956 100644
--- a/db/docs/api_c/dbc_list.html
+++ b/db/docs/api_c/dbc_list.html
@@ -1,17 +1,17 @@
-<!--Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Database Cursors and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Cursors and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Database Cursors and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
<tr><td><a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
@@ -22,6 +22,6 @@
<tr><td><a href="../api_c/dbc_get.html">DBcursor-&gt;c_pget</a></td><td>Retrieve by cursor</td></tr>
<tr><td><a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a></td><td>Store by cursor</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbc_put.html b/db/docs/api_c/dbc_put.html
index 9a8a0e895..f22845a8d 100644
--- a/db/docs/api_c/dbc_put.html
+++ b/db/docs/api_c/dbc_put.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_put.so,v 10.33 2000/12/04 17:02:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 10.56 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBcursor-&gt;c_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBcursor-&gt;c_put</h1>
+<h3>DBcursor-&gt;c_put</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,14 +24,28 @@
#include &lt;db.h&gt;
<p>
int
-DBcursor-&gt;c_put(DBC *, DBT *key, DBT *data, u_int32_t flags);
+DBcursor-&gt;c_put(DBC *DBcursor, DBT *key, DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBcursor-&gt;c_put function stores key/data pairs into the database.
-<p>The <b>flags</b> parameter must be set to one of the following values:
+<hr size=1 noshade>
+<h3>Description: DBcursor-&gt;c_put</h3>
+<p>The DBcursor-&gt;c_put method stores key/data pairs into the database.</p>
+<p>Unless otherwise specified, the DBcursor-&gt;c_put method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>If DBcursor-&gt;c_put fails for any reason, the state of the cursor will be
+unchanged. If DBcursor-&gt;c_put succeeds and an item is inserted into the
+database, the cursor is always positioned to refer to the newly inserted
+item.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_c/dbt_class.html">DBT</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_AFTER">DB_AFTER</a><dd>In the case of the Btree and Hash access methods, insert the data
-element as a duplicate element of the key referenced by the cursor.
+element as a duplicate element of the key to which the cursor refers.
The new element appears immediately after the current cursor position.
It is an error to specify DB_AFTER if the underlying Btree or
Hash database does not support duplicate data items. The <b>key</b>
@@ -39,47 +55,39 @@ DB_AFTER if the underlying Recno database was not created with
the <a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag. If the <a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag was
specified, a new key is created, all records after the inserted item
are automatically renumbered, and the key of the new record is returned
-in the structure referenced by the parameter <b>key</b>. The initial
+in the structure to which the <b>key</b> parameter refers. The initial
value of the <b>key</b> parameter is ignored. See <a href="../api_c/db_open.html">DB-&gt;open</a>
-for more information.
-<p>The DB_AFTER flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, DBcursor-&gt;c_put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, the DBcursor-&gt;c_put function will return EINVAL.
-<p><dt><a name="DB_BEFORE">DB_BEFORE</a><dd>In the case of the Btree and Hash access methods, insert the data element
-as a duplicate element of the key referenced by the cursor. The new
-element appears immediately before the current cursor position. It is
-an error to specify DB_BEFORE if the underlying Btree or Hash
-database does not support duplicate data items. The <b>key</b>
+for more information.</p>
+<p>The DB_AFTER flag may not be specified to the Queue access method.</p>
+<p>
+The DBcursor-&gt;c_put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the
+underlying access method is Hash.
+</p>
+<p><dt><a name="DB_BEFORE">DB_BEFORE</a><dd>In the case of the Btree and Hash access methods, insert the data
+element as a duplicate element of the key to which the cursor refers.
+The new element appears immediately before the current cursor position.
+It is an error to specify DB_BEFORE if the underlying Btree or
+Hash database does not support duplicate data items. The <b>key</b>
parameter is ignored.
<p>In the case of the Recno access method, it is an error to specify
DB_BEFORE if the underlying Recno database was not created with
the <a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag. If the <a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag was
specified, a new key is created, the current record and all records
after it are automatically renumbered, and the key of the new record is
-returned in the structure referenced by the parameter <b>key</b>. The
-initial value of the <b>key</b> parameter is ignored. See
-<a href="../api_c/db_open.html">DB-&gt;open</a> for more information.
-<p>The DB_BEFORE flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, DBcursor-&gt;c_put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, DBcursor-&gt;c_put will return EINVAL.
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Overwrite the data of the key/data pair referenced by the cursor with the
-specified data item. The <b>key</b> parameter is ignored.
-<p>If a duplicate sort function has been specified and the data item of the
-current referenced key/data pair does not compare equally to the <b>data</b>
-parameter, DBcursor-&gt;c_put will return EINVAL.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, DBcursor-&gt;c_put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree, Queue or Recno, the operation
-will succeed.
-<p>If the cursor is not yet initialized, DBcursor-&gt;c_put will return EINVAL.
+returned in the structure to which the <b>key</b> parameter refers.
+The initial value of the <b>key</b> parameter is ignored. See
+<a href="../api_c/db_open.html">DB-&gt;open</a> for more information.</p>
+<p>The DB_BEFORE flag may not be specified to the Queue access method.</p>
+<p>
+The DBcursor-&gt;c_put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the underlying
+access method is Hash.
+</p>
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Overwrite the data of the key/data pair to which the cursor refers with
+the specified data item. The <b>key</b> parameter is ignored.
+<p>
+The DBcursor-&gt;c_put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the underlying
+access method is Hash.
+</p>
<p><dt><a name="DB_KEYFIRST">DB_KEYFIRST</a><dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the underlying database supports duplicate data items, and if the
@@ -87,9 +95,9 @@ key already exists in the database and a duplicate sort function has
been specified, the inserted data item is added in its sorted location.
If the key already exists in the database and no duplicate sort function
has been specified, the inserted data item is added as the first of the
-data items for that key.
+data items for that key.</p>
<p>The DB_KEYFIRST flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
<p><dt><a name="DB_KEYLAST">DB_KEYLAST</a><dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the underlying database supports duplicate data items, and if the
@@ -97,58 +105,65 @@ key already exists in the database and a duplicate sort function has
been specified, the inserted data item is added in its sorted location.
If the key already exists in the database, and no duplicate sort
function has been specified, the inserted data item is added as the last
-of the data items for that key.
+of the data items for that key.</p>
<p>The DB_KEYLAST flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
<p><dt><a name="DB_NODUPDATA">DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, insert the specified
-key/data pair into the database unless it already exists in the database.
-If the key/data pair already appears in the database, <a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a>
-is returned. The DB_NODUPDATA flag may only be specified if
-the underlying database has been configured to support sorted duplicate
-data items.
+key/data pair into the database, unless a key/data pair comparing
+equally to it already exists in the database. If a matching key/data
+pair already exists in the database, <a href="../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is returned.
+The DB_NODUPDATA flag may only be specified if the underlying
+database has been configured to support sorted duplicate data items.
<p>The DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
</dl>
-<p>Otherwise, the DBcursor-&gt;c_put function returns a non-zero error value on failure and 0 on success.
-<p>If DBcursor-&gt;c_put fails for any reason, the state of the cursor will be
-unchanged. If DBcursor-&gt;c_put succeeds and an item is inserted into the
-database, the cursor is always positioned to reference the newly inserted
-item.
-<h1>Errors</h1>
-<p>The DBcursor-&gt;c_put function may fail and return a non-zero error for the following conditions:
+<p><dt><b>key</b><dd>
+The key <a href="../api_c/dbt_class.html">DBT</a> operated on.
+</dl>
+<h3>Errors</h3>
+<p>The DBcursor-&gt;c_put method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_BEFORE or DB_AFTER flags were specified, and the
-underlying access method is Queue.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the DB_AFTER, DB_BEFORE or DB_CURRENT flags
+were specified and the cursor has not been initialized;
+the DB_AFTER or DB_BEFORE flags were specified and a
+duplicate sort function has been specified;
+the DB_CURRENT flag was specified, a duplicate sort function has
+been specified, and the data item of the referenced key/data pair does
+not compare equally to the <b>data</b> parameter;
+the DB_AFTER or DB_BEFORE flags were specified, and the
+underlying access method is Queue;
+an attempt was made to add a record to a fixed-length database that was too
+large to fit;
+an attempt was made to add a record to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag was
-specified to <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+specified to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<p>The DBcursor-&gt;c_put function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBcursor-&gt;c_put function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/dbc_close.html">DBcursor-&gt;c_close</a>,
-<a href="../api_c/dbc_count.html">DBcursor-&gt;c_count</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>,
-<a href="../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>,
-<a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-and
-<a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/dbc_class.html">DBC</a>
+<h3>See Also</h3>
+<a href="../api_c/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbm.html b/db/docs/api_c/dbm.html
index 783d59e62..f65a91292 100644
--- a/db/docs/api_c/dbm.html
+++ b/db/docs/api_c/dbm.html
@@ -1,20 +1,22 @@
-<!--$Id: dbm.so,v 10.18 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbm.so,v 10.26 2003/10/18 19:15:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: dbm/ndbm</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>dbm/ndbm</h1>
+<h3>dbm/ndbm</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -77,68 +79,69 @@ dbm_error(DBM *db);
int
dbm_clearerr(DBM *db);
</pre></h3>
-<h1>Description</h1>
-<p>The dbm interfaces to the Berkeley DB library are intended to provide
-high-performance implementations and source code compatibility for
-applications written to historic interfaces. They are not recommended
-for any other purpose. The historic dbm database format
-<b>is not supported</b>, and databases previously built using the real
-dbm libraries cannot be read by the Berkeley DB functions.
+<hr size=1 noshade>
+<h3>Description: dbm/ndbm</h3>
+<p>The dbm functions are intended to provide high-performance
+implementations and source code compatibility for applications written
+to historic interfaces. They are not recommended for any other purpose.
+The historic dbm database format <b>is not supported</b>,
+and databases previously built using the real dbm libraries
+cannot be read by the Berkeley DB functions.</p>
<p>To compile dbm applications, replace the application's
-<b>#include</b> of the dbm or ndbm include file (e.g.,
+<b>#include</b> of the dbm or ndbm include file (for example,
<b>#include &lt;dbm.h&gt;</b> or <b>#include &lt;ndbm.h&gt;</b>)
-with the following two lines:
-<p><blockquote><pre>#define DB_DBM_HSEARCH 1
+with the following two lines:</p>
+<blockquote><pre>#define DB_DBM_HSEARCH 1
#include &lt;db.h&gt;</pre></blockquote>
<p>and recompile. If the application attempts to load against a dbm library
-(e.g., <b>-ldbm</b>), remove the library from the load line.
-<p><b>Key</b> and <b>content</b> arguments are objects described by the
+(for example, <b>-ldbm</b>), remove the library from the load line.</p>
+<p><b>Key</b> and <b>content</b> parameters are objects described by the
<b>datum</b> typedef. A <b>datum</b> specifies a string of
<b>dsize</b> bytes pointed to by <b>dptr</b>. Arbitrary binary data,
-as well as normal text strings, is allowed.
+as well as normal text strings, are allowed.</p>
<h3>Dbm Functions</h3>
<p>Before a database can be accessed, it must be opened by dbminit.
This will open and/or create the database <b>file</b>.db. If created,
the database file is created read/write by owner only (as described in
-<b>chmod</b>(2) and modified by the process' umask value at the time
+<b>chmod</b>(2)) and modified by the process' umask value at the time
of creation (see <b>umask</b>(2)). The group ownership of created
files is based on the system and directory defaults, and is not further
-specified by Berkeley DB.
+specified by Berkeley DB.</p>
<p>A database may be closed, and any held resources released, by calling
-dbmclose.
-<p>Once open, the data stored under a key is accessed by fetch and
+dbmclose.</p>
+<p>Once open, the data stored under a key is accessed by fetch, and
data is placed under a key by store. A key (and its associated
-contents) is deleted by delete. A linear pass through all keys
-in a database may be made, in an (apparently) random order, by use of
-firstkey and nextkey. The firstkey function will return
-the first key in the database. The nextkey function will return the next
-key in the database.
-<p>The following code will traverse the data base:
-<p><blockquote><pre>for (key = firstkey();
+contents) are deleted by delete. A linear pass through all keys
+in a database may be made, in an (apparently) random order, by using
+firstkey and nextkey. The firstkey method will return
+the first key in the database. The nextkey method will return the next
+key in the database.</p>
+<p>The following code will traverse the database:</p>
+<blockquote><pre>for (key = firstkey();
key.dptr != NULL; key = nextkey(key)) {
...
}</pre></blockquote>
<h3>Ndbm Functions</h3>
<p>Before a database can be accessed, it must be opened by dbm_open.
-This will open and/or create the database file <b>file.db</b> depending
+This will open and/or create the database file <b>file.db</b>, depending
on the flags parameter (see <b>open</b>(2)). If created, the database
file is created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation (see
<b>umask</b>(2)). The group ownership of created files is based on
the system and directory defaults, and is not further specified by
-Berkeley DB.
-<p>Once open, the data stored under a key is accessed by dbm_fetch
+Berkeley DB.</p>
+<p>Once open, the data stored under a key is accessed by dbm_fetch,
and data is placed under a key by dbm_store. The <b>flags</b>
field can be either <b>DBM_INSERT</b> or <b>DBM_REPLACE</b>.
-<b>DBM_INSERT</b> will only insert new entries into the database and will
+<b>DBM_INSERT</b> will only insert new entries into the database, and will
not change an existing entry with the same key. <b>DBM_REPLACE</b> will
replace an existing entry if it has the same key. A key (and its
-associated contents) is deleted by dbm_delete. A linear pass
+associated contents) are deleted by dbm_delete. A linear pass
through all keys in a database may be made, in an (apparently) random
-order, by use of dbm_firstkey and dbm_nextkey. The
-dbm_firstkey function will return the first key in the database. The
-dbm_nextkey function will return the next key in the database.
-<p>The following code will traverse the data base:
-<p><blockquote><pre>for (key = dbm_firstkey(db);
+order, by using dbm_firstkey and dbm_nextkey. The
+dbm_firstkey method will return the first key in the database. The
+dbm_nextkey method will return the next key in the database.</p>
+<p>The following code will traverse the database:</p>
+<blockquote><pre>for (key = dbm_firstkey(db);
key.dptr != NULL; key = dbm_nextkey(db)) {
...
}</pre></blockquote>
@@ -146,75 +149,75 @@ dbm_nextkey function will return the next key in the database.
<p>The historic dbm library created two underlying database files,
traditionally named <b>file.dir</b> and <b>file.pag</b>. The Berkeley DB
library creates a single database file named <b>file.db</b>.
-Applications that are aware of the underlying database file names may
-require additional source code modifications.
-<p>The historic dbminit interface required that the underlying
+Applications that are aware of the underlying database filenames may
+require additional source code modifications.</p>
+<p>The historic dbminit function required that the underlying
<b>.dir</b> and <b>.pag</b> files already exist (empty databases were
created by first manually creating zero-length <b>.dir</b> and
<b>.pag</b> files). Applications that expect to create databases using
-this method may require additional source code modifications.
+this method may require additional source code modifications.</p>
<p>The historic dbm_dirfno and dbm_pagfno macros are
-supported, but will return identical file descriptors as there is only a
-single underlying file used by the Berkeley DB hashing access method.
+supported, but will return identical file descriptors because there is
+only a single underlying file used by the Berkeley DB hashing access method.
Applications using both file descriptors for locking may require
-additional source code modifications.
-<p>If applications using the dbm interface exits without first
+additional source code modifications.</p>
+<p>If applications using the dbm function exits without first
closing the database, it may lose updates because the Berkeley DB library
buffers writes to underlying databases. Such applications will require
additional source code modifications to work correctly with the Berkeley DB
-library.
+library.</p>
<h3>Dbm Diagnostics</h3>
<p>The dbminit function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
+and 0 on success.</p>
<p>The fetch function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
+and returns a non-NULL <b>dptr</b> on success.</p>
<p>The store function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
+and 0 on success.</p>
<p>The delete function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
+and 0 on success.</p>
<p>The firstkey function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
+and returns a non-NULL <b>dptr</b> on success.</p>
<p>The nextkey function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
-<h1>Errors</h1>
-<p>The dbminit, fetch, store, delete, firstkey and nextkey functions may fail
-and return a non-zero error for errors specified for other Berkeley DB and C
-library or system functions.
+and returns a non-NULL <b>dptr</b> on success.</p>
+<h3>Errors</h3>
+<p>The dbminit, fetch, store, delete, firstkey, and nextkey functions may
+fail and return an error for errors specified for other Berkeley DB and C
+library or system functions.</p>
<h3>Ndbm Diagnostics</h3>
-<p>The dbm_close function returns non-zero when an error has occurred reading or
-writing the database.
-<p>The dbm_close function resets the error condition on the named database.
+<p>The dbm_close method returns non-zero when an error has occurred reading or
+writing the database.</p>
+<p>The dbm_close method resets the error condition on the named database.</p>
<p>The dbm_open function returns NULL on failure, setting <b>errno</b>,
-and 0 on success.
+and a DBM reference on success.</p>
<p>The dbm_fetch function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
+and returns a non-NULL <b>dptr</b> on success.</p>
<p>The dbm_store function returns -1 on failure, setting <b>errno</b>,
0 on success, and 1 if DBM_INSERT was set and the specified key already
-existed in the database.
+existed in the database.</p>
<p>The dbm_delete function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
+and 0 on success.</p>
<p>The dbm_firstkey function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
+and returns a non-NULL <b>dptr</b> on success.</p>
<p>The dbm_nextkey function sets the <b>dptr</b> field of the returned
<b>datum</b> to NULL on failure, setting <b>errno</b>,
-and returns a non-NULL <b>dptr</b> on success.
+and returns a non-NULL <b>dptr</b> on success.</p>
<p>The dbm_close function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
+and 0 on success.</p>
<p>The dbm_close function returns -1 on failure, setting <b>errno</b>,
-and 0 on success.
-<h1>Errors</h1>
-<p>The dbm_open, dbm_close, dbm_fetch, dbm_store, dbm_delete, dbm_firstkey
-and dbm_nextkey functions may fail and return a non-zero error for errors
-specified for other Berkeley DB and C library or system functions.
+and 0 on success.</p>
+<h3>Errors</h3>
+<p>The dbm_open, dbm_close, dbm_fetch, dbm_store, dbm_delete, dbm_firstkey,
+and dbm_nextkey functions may fail and return an error for errors
+specified for other Berkeley DB and C library or system functions.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbt_bulk.html b/db/docs/api_c/dbt_bulk.html
index ec8cb1a9a..5d19705a7 100644
--- a/db/docs/api_c/dbt_bulk.html
+++ b/db/docs/api_c/dbt_bulk.html
@@ -1,81 +1,82 @@
-<!--Id: dbt_bulk.so,v 10.5 2001/05/05 01:49:13 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: dbt_bulk.so,v 10.11 2003/09/25 15:26:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBT</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBT: Bulk Retrieval</h1>
+<h3>DBT: Bulk Retrieval</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
- <a name="3"><!--meow--></a>
-<p>If either of the DB_MULTIPLE or DB_MULTIPLE_KEY flags
-were specified to the <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> functions, the data
-<a href="../api_c/dbt.html">DBT</a> returned by those interfaces will refer to a buffer that
+<a name="3"><!--meow--></a>
+<p>If either of the <a href="../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> or <a href="../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flags
+were specified to the <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods, the data
+<a href="../api_c/dbt_class.html">DBT</a> returned by those interfaces will refer to a buffer that
is filled with data. Access to that data is through the following
-macros:
+macros:</p>
<p><dl compact>
-<p><dt><a name="DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a><dd><pre>DB_MULTIPLE_INIT(void *pointer, <a href="../api_c/dbt.html">DBT</a> *data);</pre>
-<p>Initialize the retrieval. The <b>pointer</b> argument is a variable
-to be initialized. The <b>data</b> argument is a <a href="../api_c/dbt.html">DBT</a> structure
+<p><dt><a name="DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a><dd><pre>DB_MULTIPLE_INIT(void *pointer, <a href="../api_c/dbt_class.html">DBT</a> *data);</pre>
+<p>Initialize the retrieval. The <b>pointer</b> parameter is a variable
+to be initialized. The <b>data</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> structure
returned from a successful call to <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a>
-for which one of the DB_MULTIPLE or DB_MULTIPLE_KEY
-flags was specified.
-<p><dt><a name="DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a><dd><pre>DB_MULTIPLE_NEXT(void *pointer, <a href="../api_c/dbt.html">DBT</a> *data, void *retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_c/dbt.html">DBT</a> structure returned from a
+for which one of the <a href="../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> or <a href="../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flags was specified.</p>
+<p><dt><a name="DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a><dd><pre>DB_MULTIPLE_NEXT(void *pointer, <a href="../api_c/dbt_class.html">DBT</a> *data, void *retdata, size_t retdlen);</pre>
+<p>The <b>data</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> structure returned from a
successful call to <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for which the
-DB_MULTIPLE flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>retdata</b> argument is set to
+<a href="../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> flag was specified. The <b>pointer</b> and
+<b>data</b> parameters must have been previously initialized by a call
+to DB_MULTIPLE_INIT. The <b>retdata</b> parameter is set to
refer to the next data element in the returned set, and the
-<b>retdlen</b> argument is set to the length, in bytes, of that data
+<b>retdlen</b> parameter is set to the length, in bytes, of that data
element. When used with the Queue and Recno access methods,
<b>retdata</b> will be set to NULL for deleted records. The
-<b>pointer</b> argument is set to NULL if there are no more data
-elements in the returned set.
-<p><dt><a name="DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a><dd><pre>DB_MULTIPLE_KEY_NEXT(void *pointer, <a href="../api_c/dbt.html">DBT</a> *data,
+<b>pointer</b> parameter is set to NULL if there are no more data
+elements in the returned set.</p>
+<p><dt><a name="DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a><dd><pre>DB_MULTIPLE_KEY_NEXT(void *pointer, <a href="../api_c/dbt_class.html">DBT</a> *data,
void *retkey, size_t retklen, void *retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_c/dbt.html">DBT</a> structure returned from a
-successful call to <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for which the
-DB_MULTIPLE_KEY flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>retkey</b> argument is set to
-refer to the next key element in the returned set, and the
-<b>retklen</b> argument is set to the length, in bytes, of that key
-element. The <b>retdata</b> argument is set to refer to the next data
-element in the returned set, and the <b>retdlen</b> argument is set to
-the length, in bytes, of that data element. The <b>pointer</b> and
-argument is set to NULL if there are no more key/data pairs in the
-returned set.
-<p><dt><a name="DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a><dd><pre>DB_MULTIPLE_RECNO_NEXT(void *pointer, <a href="../api_c/dbt.html">DBT</a> *data,
+<p>The <b>data</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> structure returned from a
+successful call to <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for which the <a href="../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag was specified. The <b>pointer</b> and <b>data</b> parameters must
+have been previously initialized by a call to DB_MULTIPLE_INIT.
+The <b>retkey</b> parameter is set to refer to the next key element in
+the returned set, and the <b>retklen</b> parameter is set to the length,
+in bytes, of that key element. The <b>retdata</b> parameter is set to
+refer to the next data element in the returned set, and the
+<b>retdlen</b> parameter is set to the length, in bytes, of that data
+element. The <b>pointer</b> parameter is set to NULL if there are
+no more key/data pairs in the returned set.</p>
+<p><dt><a name="DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a><dd><pre>DB_MULTIPLE_RECNO_NEXT(void *pointer, <a href="../api_c/dbt_class.html">DBT</a> *data,
db_recno_t recno, void * retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_c/dbt.html">DBT</a> structure returned from a
-successful call to <a href="../api_c/db_get.html">DB-&gt;get</a> or <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for which the
-DB_MULTIPLE_KEY flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>recno</b> argument is set to the
-record number of the next record in the returned set. The
-<b>retdata</b> argument is set to refer to the next data element in
-the returned set, and the <b>retdlen</b> argument is set to the length,
-in bytes, of that data element. When used with the Queue and Recno
-access methods, <b>retdata</b> will be set to NULL for deleted
-records. The <b>pointer</b> argument is set to NULL if there are
-no more key/data pairs in the returned set.
+<p>The <b>data</b> parameter is a <a href="../api_c/dbt_class.html">DBT</a> structure returned from a
+successful call to <a href="../api_c/dbc_get.html">DBcursor-&gt;c_get</a> for which the <a href="../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag was specified. The <b>pointer</b> and <b>data</b> parameters must
+have been previously initialized by a call to DB_MULTIPLE_INIT.
+The <b>recno</b> parameter is set to the record number of the next
+record in the returned set. The <b>retdata</b> parameter is set to
+refer to the next data element in the returned set, and the
+<b>retdlen</b> parameter is set to the length, in bytes, of that data
+element. When used with the Queue and Recno access methods,
+<b>retdata</b> will be set to NULL for deleted records. The
+<b>pointer</b> parameter is set to NULL if there are no more key/data
+pairs in the returned set.</p>
</dl>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/dbt_class.html b/db/docs/api_c/dbt_class.html
index d138a720f..89a3771c9 100644
--- a/db/docs/api_c/dbt_class.html
+++ b/db/docs/api_c/dbt_class.html
@@ -1,22 +1,23 @@
-<!--Id: dbt_class.so,v 10.1 2002/08/24 18:22:30 bostic Exp -->
-<!--Id: dbt_c.so,v 10.47 2002/08/29 03:24:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: dbt_class.so,v 10.1 2002/08/24 18:22:30 bostic Exp $-->
+<!--$Id: dbt_c.so,v 10.47 2002/08/29 03:24:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DBT</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBT: Key/Data Pairs</h1>
+<h3>DBT: Key/Data Pairs</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -27,8 +28,8 @@ structure. (The name <i>DBT</i> is a mnemonic for <i>data
base thang</i>, and was used because no one could think of a reasonable
name that wasn't already in use somewhere else.) Key and data byte
strings may refer to strings of zero length up to strings of
-essentially unlimited length. See <a href="../ref/am_misc/dbsizes.html">Database limits</a> for more information.
-<p><blockquote><pre>typedef struct {
+essentially unlimited length. See <a href="../ref/am_misc/dbsizes.html">Database limits</a> for more information.</p>
+<blockquote><pre>typedef struct {
void *data;
u_int32_t size;
u_int32_t ulen;
@@ -40,7 +41,7 @@ essentially unlimited length. See <a href="../ref/am_misc/dbsizes.html">Databas
fields of the DBT structure that are not explicitly set should be
initialized to nul bytes before the first time the structure is used.
Do this by declaring the structure external or static, or by calling
-the C library routine <b>bzero</b>(3) or <b>memset</b>(3).
+the C library routine <b>bzero</b>(3) or <b>memset</b>(3).</p>
<p>By default, the <b>flags</b> structure element is expected to be set
to 0. In this default case, when the application is providing Berkeley DB a
key or data item to store into the database, Berkeley DB expects the
@@ -48,8 +49,8 @@ key or data item to store into the database, Berkeley DB expects the
bytes. When returning a key/data item to the application, Berkeley DB will
store into the <b>data</b> structure element a pointer to a byte string
of <b>size</b> bytes, and the memory to which the pointer refers will be
-allocated and managed by Berkeley DB.
-<p>The elements of the DBT structure are defined as follows:
+allocated and managed by Berkeley DB.</p>
+<p>The elements of the DBT structure are defined as follows:</p>
<p><dl compact>
<p><dt>void *<a name="data">data</a>;<dd>A pointer to a byte string.
<p><dt>u_int32_t <a name="size">size</a>;<dd>The length of <b>data</b>, in bytes.
@@ -57,14 +58,13 @@ allocated and managed by Berkeley DB.
This location is not written by the Berkeley DB functions.
<p>Note that applications can determine the length of a record by setting
the <b>ulen</b> field to 0 and checking the return value in the
-<b>size</b> field. See the DB_DBT_USERMEM flag for more information.
+<b>size</b> field. See the DB_DBT_USERMEM flag for more information.</p>
<p><dt>u_int32_t <a name="dlen">dlen</a>;<dd>The length of the partial record being read or written by the application,
in bytes. See the DB_DBT_PARTIAL flag for more information.
<p><dt>u_int32_t <a name="doff">doff</a>;<dd>The offset of the partial record being read or written by the application,
in bytes. See the DB_DBT_PARTIAL flag for more information.
-<p><dt>u_int32_t flags;<dd>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or
-more of the following values:
+<p><dt>u_int32_t flags;<dd>The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_DBT_MALLOC">DB_DBT_MALLOC</a><dd>When this flag is set, Berkeley DB will allocate memory for the returned key
or data item (using <b>malloc</b>(3), or the user-specified malloc
@@ -74,7 +74,7 @@ responsibility of the calling application, the caller must determine
whether memory was allocated using the returned value of the
<b>data</b> field.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC, and DB_DBT_USERMEM.
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
<p><dt><a name="DB_DBT_REALLOC">DB_DBT_REALLOC</a><dd>When this flag is set Berkeley DB will allocate memory for the returned key
or data item (using <b>realloc</b>(3), or the user-specified realloc
function), and return a pointer to it in the <b>data</b> field of the
@@ -85,9 +85,9 @@ whether memory was allocated using the returned value of the
<p>The difference between DB_DBT_MALLOC and DB_DBT_REALLOC
is that the latter will call <b>realloc</b>(3) instead of
<b>malloc</b>(3), so the allocated memory will be grown as necessary
-instead of the application doing repeated free/malloc calls.
+instead of the application doing repeated free/malloc calls.</p>
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC, and DB_DBT_USERMEM.
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
<p><dt><a name="DB_DBT_USERMEM">DB_DBT_USERMEM</a><dd>The <b>data</b> field of the key or data structure must refer to
memory that is at least <b>ulen</b> bytes in length. If the length of
the requested item is less than or equal to that number of bytes, the
@@ -95,7 +95,7 @@ item is copied into the memory to which the <b>data</b> field refers.
Otherwise, the <b>size</b> field is set to the length needed for the
requested item, and the error ENOMEM is returned.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC, and DB_DBT_USERMEM.
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
<p><dt><a name="DB_DBT_PARTIAL">DB_DBT_PARTIAL</a><dd>Do partial retrieval or storage of an item. If the calling application
is doing a get, the <b>dlen</b> bytes starting <b>doff</b> bytes from
the beginning of the retrieved data record are returned as if they
@@ -106,7 +106,7 @@ are returned.
and a partial retrieval was done using a DBT having a <b>dlen</b>
field of 20 and a <b>doff</b> field of 85, the get call would succeed,
the <b>data</b> field would refer to the last 15 bytes of the record,
-and the <b>size</b> field would be set to 15.
+and the <b>size</b> field would be set to 15.</p>
<p>If the calling application is doing a put, the <b>dlen</b> bytes
starting <b>doff</b> bytes from the beginning of the specified key's
data record are replaced by the data specified by the <b>data</b> and
@@ -114,24 +114,24 @@ data record are replaced by the data specified by the <b>data</b> and
<b>size</b>, the record will grow; if <b>dlen</b> is larger than
<b>size</b>, the record will shrink. If the specified bytes do not
exist, the record will be extended using nul bytes as necessary, and
-the put call will succeed.
+the put call will succeed.</p>
<p>It is an error to attempt a partial put using the <a href="../api_c/db_put.html">DB-&gt;put</a> function
in a database that supports duplicate records.
Partial puts in databases supporting duplicate records must be done
-using a <a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a> function.
+using a <a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a> function.</p>
<p>It is an error to attempt a partial put with differing <b>dlen</b> and
-<b>size</b> values in Queue or Recno databases with fixed-length records.
+<b>size</b> values in Queue or Recno databases with fixed-length records.</p>
<p>For example, if the data portion of a retrieved record was 100 bytes,
and a partial put was done using a DBT having a <b>dlen</b> field of 20,
a <b>doff</b> field of 85, and a <b>size</b> field of 30, the resulting
record would be 115 bytes in length, where the last 30 bytes would be
-those specified by the put call.
+those specified by the put call.</p>
</dl>
</dl>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_class.html b/db/docs/api_c/env_class.html
index 848dc6956..51ab0e4d8 100644
--- a/db/docs/api_c/env_class.html
+++ b/db/docs/api_c/env_class.html
@@ -1,51 +1,80 @@
-<!--Id: env_class.so,v 10.32 2002/08/29 03:24:38 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_class.so,v 10.39 2003/10/31 03:44:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DB_ENV</title>
+<title>Berkeley DB: db_env_create</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV</h1>
+<h3>db_env_create</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db.h&gt;
<p>
-typedef struct __db_env DB_ENV;
+int
+db_env_create(DB_ENV **dbenvp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_create</h3>
<p>The DB_ENV object is the handle for a Berkeley DB environment -- a
collection including support for some or all of caching, locking,
logging and transaction subsystems, as well as databases and log files.
Methods off the DB_ENV handle are used to configure the
environment as well as to operate on subsystems and databases in the
-environment.
+environment.</p>
<p>DB_ENV handles are free-threaded if the <a href="../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag
is specified to the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method when the environment is opened.
The DB_ENV handle should not be closed while any other handle
remains open that is using it as a reference (for example, <a href="../api_c/db_class.html">DB</a>
or <a href="../api_c/txn_class.html">DB_TXN</a>). Once either the <a href="../api_c/env_close.html">DB_ENV-&gt;close</a> or
<a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a> methods are called, the handle may not be accessed again,
-regardless of the method's return.
-<h1>Class</h1>
+regardless of the method's return.</p>
+<p>The db_env_create method creates a DB_ENV structure that is the
+handle for a Berkeley DB environment. A pointer to this structure is returned
+in the memory to which <b>dbenvp</b> refers. Calling the
+<a href="../api_c/env_close.html">DB_ENV-&gt;close</a> or <a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a> methods will discard the returned
+handle.</p>
+<p>The DB_ENV handle contains a special field, "app_private", which
+is declared as type "void *". This field is provided for the use of
+the application program. It is initialized to NULL and is not further
+used by Berkeley DB in any way.</p>
+<p>The db_env_create method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_RPCCLIENT">DB_RPCCLIENT</a><dd>Create a client environment to connect to a server.
+<p>The DB_RPCCLIENT flag indicates to the system that this environment
+is remote on a server. The use of this flag causes the environment
+methods to use functions that call a server instead of local functions.
+Prior to making any environment or database method calls, the application
+must call the <a href="../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> function to establish the
+connection to the server.</p>
+</dl>
+<h3>Errors</h3>
+<hr size=1 noshade>
+<h3>Class</h3>
DB_ENV
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_close.html b/db/docs/api_c/env_close.html
index fdb11e2e1..f6ed4b517 100644
--- a/db/docs/api_c/env_close.html
+++ b/db/docs/api_c/env_close.html
@@ -1,20 +1,22 @@
-<!--$Id: env_close.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_close.so,v 10.37 2003/10/31 17:24:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;close</title>
+<title>Berkeley DB: DB_ENV-&gt;close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;close</h1>
+<h3>DB_ENV-&gt;close</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,63 +24,62 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;close(DB_ENV *dbenv, u_int32_t flags);
+DB_ENV-&gt;close(DB_ENV *dbenv, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;close function closes the Berkeley DB environment, freeing any
-allocated resources and closing any underlying subsystems.
-<p>Calling DBENV-&gt;close does not imply closing any databases that were
-opened in the environment.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;close</h3>
+<p>The DB_ENV-&gt;close method closes the Berkeley DB environment, freeing any
+allocated resources and closing any underlying subsystems.</p>
+<p>The <a href="../api_c/env_class.html">DB_ENV</a> handle should not be closed while any other handle
+that refers to it is not yet closed; for example, database environment
+handles must not be closed while database handles remain open, or
+transactions in the environment have not yet been committed or aborted.
+Specifically, this includes <a href="../api_c/db_class.html">DB</a>, <a href="../api_c/dbc_class.html">DBC</a>, <a href="../api_c/txn_class.html">DB_TXN</a>,
+<a href="../api_c/logc_class.html">DB_LOGC</a> and <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handles.</p>
<p>Where the environment was initialized with the <a href="../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> flag,
-calling DBENV-&gt;close does not release any locks still held by the
+calling DB_ENV-&gt;close does not release any locks still held by the
closing process, providing functionality for long-lived locks.
-Processes that wish to have all their locks
-released can do so by issuing the appropriate <a href="../api_c/lock_vec.html">lock_vec</a> call.
+Processes that want to have all their locks
+released can do so by issuing the appropriate <a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> call.</p>
<p>Where the environment was initialized with the <a href="../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>
-flag, calling DBENV-&gt;close implies calls to <a href="../api_c/memp_fclose.html">memp_fclose</a> for
+flag, calling DB_ENV-&gt;close implies calls to <a href="../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> for
any remaining open files in the memory pool that were returned to this
-process by calls to <a href="../api_c/memp_fopen.html">memp_fopen</a>. It does not imply a call to
-<a href="../api_c/memp_fsync.html">memp_fsync</a> for those files.
+process by calls to <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>. It does not imply a call to
+<a href="../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a> for those files.</p>
<p>Where the environment was initialized with the <a href="../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flag,
-calling DBENV-&gt;close aborts any uncommitted transactions.
-(Applications are should not depend on this behavior. If the process' has
-already closed a database handle which is necessary to abort an
-uncommitted transaction, the Berkeley DB environment must then require that
-recovery be run before further operations are done, since once a
-transaction exists that cannot be committed or aborted, no future
-checkpoint can ever succeed.)
-<p>In multi-threaded applications, only a single thread may call
-DBENV-&gt;close.
-<p>Once DBENV-&gt;close has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DBENV-&gt;close function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBENV-&gt;close function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;close function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+calling DB_ENV-&gt;close aborts any unresolved transactions.
+Applications should not depend on this behavior for transactions
+involving Berkeley DB databases; all such transactions should be explicitly
+resolved. The problem with depending on this semantic is that aborting
+an unresolved transaction involving database operations requires a
+database handle. Because the database handles should have been closed before
+calling DB_ENV-&gt;close, it will not be possible to abort the
+transaction, and recovery will have to be run on the Berkeley DB environment
+before further operations are done.</p>
+<p>Where log cursors were created using the <a href="../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a> method, calling
+DB_ENV-&gt;close does not imply closing those cursors.</p>
+<p>In multithreaded applications, only a single thread may call
+DB_ENV-&gt;close.</p>
+<p>After DB_ENV-&gt;close has been called, regardless of its return, the
+Berkeley DB environment handle may not be accessed again.</p>
+<p>The DB_ENV-&gt;close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_create.html b/db/docs/api_c/env_create.html
deleted file mode 100644
index 26ffb204e..000000000
--- a/db/docs/api_c/env_create.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--$Id: env_create.so,v 10.12 2000/10/25 18:51:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: db_env_create</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>db_env_create</h1>
-</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-#include &lt;db.h&gt;
-<p>
-int
-db_env_create(DB_ENV **dbenvp, u_int32_t flags);
-</pre></h3>
-<h1>Description</h1>
-<p>The db_env_create function creates a DB_ENV structure which is
-the handle for a Berkeley DB environment. A pointer to this structure is
-returned in the memory referenced by <b>dbenvp</b>.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="DB_CLIENT">DB_CLIENT</a><dd>Create a client environment to connect to a server.
-<p>The DB_CLIENT flag indicates to the system that this environment
-is remote on a server. The use of this flag causes the environment
-methods to use functions that call a server instead of local functions.
-Prior to making any environment or database method calls, the application
-must call the <a href="../api_c/env_set_server.html">DBENV-&gt;set_server</a> function to establish the
-connection to the server.
-</dl>
-<p>The DB_ENV handle contains a special field, "app_private", which
-is declared as type "void *". This field is provided for the use of
-the application program. It is initialized to NULL and is not further
-used by Berkeley DB in any way.
-<p>The db_env_create function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The db_env_create function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the db_env_create function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_c/env_dbremove.html b/db/docs/api_c/env_dbremove.html
index e4860c6d4..739aa269c 100644
--- a/db/docs/api_c/env_dbremove.html
+++ b/db/docs/api_c/env_dbremove.html
@@ -1,21 +1,22 @@
-<!--Id: env_dbremove.so,v 10.31 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.44 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;dbremove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;dbremove</h1>
+<h3>DB_ENV-&gt;dbremove</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,96 +27,78 @@ int
DB_ENV-&gt;dbremove(DB_ENV *dbenv, DB_TXN *txnid,
const char *file, const char *database, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB_ENV-&gt;dbremove function removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;dbremove</h3>
+<p>The DB_ENV-&gt;dbremove method removes the database specified by the
+<b>file</b> and <b>database</b> parameters. If no <b>database</b> is
specified, the underlying file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
-<p>Applications should never remove databases with open <a href="../api_c/db_create.html">DB</a> handles,
+incidentally removing all of the databases it contained.</p>
+<p>Applications should never remove databases with open <a href="../api_c/db_class.html">DB</a> handles,
or in the case of removing a file, when any database in the file has an
open handle. For example, some architectures do not permit the removal
of files with open system handles. On these architectures, attempts to
remove databases currently in use by any thread of control in the system
-will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>;
-otherwise, NULL.
-<p>The <b>flags</b> value must be set to 0 or
+will fail.</p>
+<p>The DB_ENV-&gt;dbremove method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB_ENV-&gt;dbremove call within a transaction. If the call succeeds,
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<p>The DB_ENV-&gt;dbremove function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Environment Variables</h3>
+<p>The
environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DB_ENV-&gt;dbremove is affected by any database directory specified using the
-<a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> function, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
+database environment home.</p>
+<p>DB_ENV-&gt;dbremove is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;dbremove method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_FILEOPEN<dd>An attempt was made to remove the underlying file and a database in the
+file was currently open.
+</dl>
+<p><dl compact>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;dbremove function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>EINVAL<dd>If DB_ENV-&gt;dbremove called before <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<p>The DB_ENV-&gt;dbremove function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;dbremove function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_close.html">DB_ENV-&gt;close</a>,
-<a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a>,
-<a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a>,
-<a href="../api_c/env_err.html">DB_ENV-&gt;err</a>,
-<a href="../api_c/env_err.html">DB_ENV-&gt;errx</a>,
-<a href="../api_c/env_open.html">DB_ENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a>,
-<a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>,
-<a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a>,
-<a href="../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a>,
-<a href="../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a>,
-<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a>,
-<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a>,
-<a href="../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a>,
-<a href="../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a>,
-<a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a>,
-<a href="../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a>,
-<a href="../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a>,
-<a href="../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a>,
-<a href="../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a>,
-<a href="../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a>,
-<a href="../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>
-and
-<a href="../api_c/env_version.html">db_version</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_dbrename.html b/db/docs/api_c/env_dbrename.html
index ff2b5a547..18a22d411 100644
--- a/db/docs/api_c/env_dbrename.html
+++ b/db/docs/api_c/env_dbrename.html
@@ -1,21 +1,22 @@
-<!--Id: env_dbrename.so,v 10.17 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.31 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;dbrename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;dbrename</h1>
+<h3>DB_ENV-&gt;dbrename</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,107 +27,82 @@ int
DB_ENV-&gt;dbrename(DB_ENV *dbenv, DB_TXN *txnid, const char *file,
const char *database, const char *newname, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB_ENV-&gt;dbrename function renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;dbrename</h3>
+<p>The DB_ENV-&gt;dbrename method renames the database specified by the
+<b>file</b> and <b>database</b> parameters to <b>newname</b>. If no
<b>database</b> is specified, the underlying file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
+<b>file</b> is renamed, incidentally renaming all of the databases it
+contained.</p>
<p>Applications should not rename databases that are currently in use. If
an underlying file is being renamed and logging is currently enabled in
the database environment, no database in the file may be open when the
-DB_ENV-&gt;dbrename function is called. In particular, some architectures do
+DB_ENV-&gt;dbrename method is called. In particular, some architectures do
not permit renaming files with open handles. On these architectures,
attempts to rename databases that are currently in use by any thread of
-control in the system will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>;
-otherwise, NULL.
-<p>The <b>flags</b> value must be set to 0 or
+control in the system will fail.</p>
+<p>The DB_ENV-&gt;dbrename method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DB_ENV-&gt;dbrename call within a transaction. If the call succeeds,
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<p>The DB_ENV-&gt;dbrename function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
+<p><dt><b>newname</b><dd>
+The <b>newname</b> parameter is the new name of the database or file.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Environment Variables</h3>
+<p>The
environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DB_ENV-&gt;dbrename is affected by any database directory specified using the
-<a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> function, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
+database environment home.</p>
+<p>DB_ENV-&gt;dbrename is affected by any database directory specified using
+the <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;dbrename method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_FILEOPEN<dd>An attempt was made to rename the underlying file and a database in the
+file was currently open.
+</dl>
+<p><dl compact>
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;dbrename function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>EINVAL<dd>If DB_ENV-&gt;dbrename called before <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<p>The DB_ENV-&gt;dbrename function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;dbrename function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/db_create.html">db_create</a>,
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>,
-<a href="../api_c/db_associate.html">DB-&gt;associate</a>,
-<a href="../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../api_c/db_cursor.html">DB-&gt;cursor</a>,
-<a href="../api_c/db_del.html">DB-&gt;del</a>,
-<a href="../api_c/db_err.html">DB-&gt;err</a>,
-<a href="../api_c/db_err.html">DB-&gt;errx</a>,
-<a href="../api_c/db_fd.html">DB-&gt;fd</a>,
-<a href="../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a>,
-<a href="../api_c/db_get_type.html">DB-&gt;get_type</a>,
-<a href="../api_c/db_join.html">DB-&gt;join</a>,
-<a href="../api_c/db_key_range.html">DB-&gt;key_range</a>,
-<a href="../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../api_c/db_get.html">DB-&gt;pget</a>,
-<a href="../api_c/db_put.html">DB-&gt;put</a>,
-<a href="../api_c/db_remove.html">DB-&gt;remove</a>,
-<a href="../api_c/db_rename.html">DB-&gt;rename</a>,
-<a href="../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a>,
-<a href="../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
-<a href="../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a>,
-<a href="../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>,
-<a href="../api_c/db_set_cache_priority.html">DB-&gt;set_cache_priority</a>,
-<a href="../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a>,
-<a href="../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a>,
-<a href="../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a>,
-<a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>,
-<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a>,
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a>,
-<a href="../api_c/db_set_feedback.html">DB-&gt;set_feedback</a>,
-<a href="../api_c/db_set_flags.html">DB-&gt;set_flags</a>,
-<a href="../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a>,
-<a href="../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>,
-<a href="../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a>,
-<a href="../api_c/db_set_lorder.html">DB-&gt;set_lorder</a>,
-<a href="../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a>,
-<a href="../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a>,
-<a href="../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a>,
-<a href="../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a>,
-<a href="../api_c/db_set_re_len.html">DB-&gt;set_re_len</a>,
-<a href="../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a>,
-<a href="../api_c/db_set_re_source.html">DB-&gt;set_re_source</a>,
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>,
-<a href="../api_c/db_sync.html">DB-&gt;sync</a>,
-<a href="../api_c/db_truncate.html">DB-&gt;truncate</a>,
-<a href="../api_c/db_upgrade.html">DB-&gt;upgrade</a>
-and
-<a href="../api_c/db_verify.html">DB-&gt;verify</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_err.html b/db/docs/api_c/env_err.html
index 01aea3553..604c10a02 100644
--- a/db/docs/api_c/env_err.html
+++ b/db/docs/api_c/env_err.html
@@ -1,20 +1,22 @@
-<!--Id: env_err.so,v 10.13 2001/04/05 20:01:26 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.30 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;err</title>
+<title>Berkeley DB: DB_ENV-&gt;err</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;err</h1>
+<h3>DB_ENV-&gt;err</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,77 +24,65 @@
#include &lt;db.h&gt;
<p>
void
-DBENV-&gt;err(DB_ENV *dbenv, int error, const char *fmt, ...);
+DB_ENV-&gt;err(DB_ENV *dbenv, int error, const char *fmt, ...);
<p>
void
-DBENV-&gt;errx(DB_ENV *dbenv, const char *fmt, ...);
+DB_ENV-&gt;errx(DB_ENV *dbenv, const char *fmt, ...);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;err, DBENV-&gt;errx, <a href="../api_c/db_err.html">DB-&gt;err</a> and
-<a href="../api_c/db_err.html">DB-&gt;errx</a> functions provide error-messaging functionality for
-applications written using the Berkeley DB library.
-<p>The DBENV-&gt;err function constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;err</h3>
+<a name="3"><!--meow--></a>
+<p>The DB_ENV-&gt;err, DB_ENV-&gt;errx, <a href="../api_c/db_err.html">DB-&gt;err</a> and
+<a href="../api_c/db_err.html">DB-&gt;errx</a> methods provide error-messaging functionality for
+applications written using the Berkeley DB library.</p>
+<p>The DB_ENV-&gt;err method constructs an error message consisting of the
+following elements:</p>
+<blockquote><p><dl compact>
<p><dt>An optional prefix string<dd>If no error callback function has been set using the
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a> function, any prefix string specified using the
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> function, followed by two separating characters: a colon
+<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a> method, any prefix string specified using the
+<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> method, followed by two separating characters: a colon
and a &lt;space&gt; character.
<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, in which the
-ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent arguments
+ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent parameters
are converted for output.
<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
-<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> function.
+<b>error</b> value, as returned by the <a href="../api_c/env_strerror.html">db_strerror</a> method.
</dl>
</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback function has been set (see <a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>
-and <a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>), that function is called with two
-arguments: any prefix string specified (see <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> and
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>) and the error message.
+<p>This constructed error message is then handled as follows:</p>
+<blockquote><p>If an error callback function has been set (see <a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a>
+and <a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>), that function is called with two
+parameters: any prefix string specified (see <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> and
+<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>) and the error message.</p>
<p>If a C library FILE * has been set (see <a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> and
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>), the error message is written to that output
-stream.
+<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>), the error message is written to that output
+stream.</p>
<p>If none of these output options has been configured, the error message
-is written to stderr, the standard error output stream.</blockquote>
-<p>The DBENV-&gt;errx and <a href="../api_c/db_err.html">DB-&gt;errx</a> functions perform identically to the
-DBENV-&gt;err and <a href="../api_c/db_err.html">DB-&gt;err</a> functions, except that they do not append
+is written to stderr, the standard
+error output stream.</p></blockquote>
+<p>The DB_ENV-&gt;errx and <a href="../api_c/db_err.html">DB-&gt;errx</a> methods perform identically to the
+DB_ENV-&gt;err and <a href="../api_c/db_err.html">DB-&gt;err</a> methods, except that they do not append
the final separator characters and standard error string to the error
-message.
-<h1>See Also</h1>
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_err.html">DBENV-&gt;err</a>, <a href="../api_c/env_err.html">DBENV-&gt;errx</a>
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_feedback.html">DBENV-&gt;set_feedback</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_pageyield.html">db_env_set_pageyield</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-<a href="../api_c/env_set_panicstate.html">db_env_set_panicstate</a>,
-<a href="../api_c/env_set_rec_init.html">DBENV-&gt;set_recovery_init</a>,
-<a href="../api_c/env_set_rpc_server.html">DBENV-&gt;set_rpc_server</a>,
-<a href="../api_c/env_set_region_init.html">db_env_set_region_init</a>,
-<a href="../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a>,
-<a href="../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a>,
-<a href="../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a>,
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>
-and
-<a href="../api_c/env_version.html">db_version</a>.
+message.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error value for which the
+DB_ENV-&gt;err and <a href="../api_c/db_err.html">DB-&gt;err</a> methods will display a explanatory
+string.
+<p><dt><b>fmt</b><dd>
+The <b>fmt</b> parameter is an optional printf-style message to display.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_list.html b/db/docs/api_c/env_list.html
index 099d4d241..82a3237c7 100644
--- a/db/docs/api_c/env_list.html
+++ b/db/docs/api_c/env_list.html
@@ -1,19 +1,19 @@
-<!--Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Database Environments and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Environments and Related Methods</h1>
-<!--Id: m4.methods,v 10.1 2002/08/30 20:00:51 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Database Environments and Related Methods</h3>
+<!--$Id: m4.methods,v 10.2 2003/10/18 19:15:47 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Database Environments and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_c/env_create.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<tr><td><a href="../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
<tr><td><a href="../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
<tr><td><a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
<tr><td><a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
@@ -44,7 +44,7 @@
<tr><td><a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
<tr><td><a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
<tr><td><a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a></td><td>Set local space allocation functions</td></tr>
-<tr><td><a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a></td><td>Configure application recovery interface</td></tr>
+<tr><td><a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a></td><td>Configure application recovery</td></tr>
<tr><td><a href="../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
<tr><td><a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a></td><td>Set the environment data directory</td></tr>
<tr><td><a href="../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
@@ -79,6 +79,6 @@
<tr><td><a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a></td><td>Distributed transaction recovery</td></tr>
<tr><td><a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_open.html b/db/docs/api_c/env_open.html
index 677f40c15..c8c4eb6ae 100644
--- a/db/docs/api_c/env_open.html
+++ b/db/docs/api_c/env_open.html
@@ -1,20 +1,22 @@
-<!--$Id: env_open.so,v 10.61 2000/12/01 15:50:31 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 10.91 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;open</title>
+<title>Berkeley DB: DB_ENV-&gt;open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;open</h1>
+<h3>DB_ENV-&gt;open</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,23 +24,45 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;open(DB_ENV *, char *db_home, u_int32_t flags, int mode);
+DB_ENV-&gt;open(DB_ENV *dbenv, char *db_home, u_int32_t flags, int mode);
+<p>
+int
+DB_ENV-&gt;get_home(DB_ENV *dbenv, const char **homep);
+<p>
+int
+DB_ENV-&gt;get_open_flags(DB_ENV *dbenv, u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;open function is the interface for opening the Berkeley DB
-environment. It provides a structure for creating a consistent
-environment for processes using one or more of the features of Berkeley DB.
-<p>The <b>db_home</b> argument to DBENV-&gt;open (and file name
-resolution in general) is described in
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;open</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>The DB_ENV-&gt;open method opens a Berkeley DB environment. It provides a
+structure for creating a consistent environment for processes using one
+or more of the features of Berkeley DB.</p>
+<p>The DB_ENV-&gt;open method
+returns a non-zero error value on failure
+and 0 on success.
+If DB_ENV-&gt;open fails, the <a href="../api_c/env_close.html">DB_ENV-&gt;close</a> method should be called
+to discard the <a href="../api_c/env_class.html">DB_ENV</a> handle.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_home</b><dd>
+The <b>db_home</b> parameter is the database environment's home
+directory. For more information on <b>db_home</b>, and filename
+resolution in general, see <a href="../ref/env/naming.html">Berkeley DB File
+Naming</a>. The environment variable <b>DB_HOME</b> may be used as
+the path of the database home, as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p>The <b>flags</b> argument specifies the subsystems that are initialized
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter specifies the subsystems that are initialized
and how the application's environment affects Berkeley DB file naming, among
other things.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p>As there are a large number of flags that can be specified, they have been
-grouped together by functionality. The first group of flags indicate
-which of the Berkeley DB subsystems should be initialized:
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<p>Because there are a large number of flags that can be specified, they
+have been grouped together by functionality. The first group of flags
+indicates which of the Berkeley DB subsystems should be initialized:</p>
<p><dl compact>
<p><dt><a name="DB_JOINENV">DB_JOINENV</a><dd>Join an existing environment. This option allows applications to
join an existing environment without knowing which Berkeley DB subsystems
@@ -47,159 +71,160 @@ the environment supports.
product. In this mode, Berkeley DB provides multiple reader/single writer
access. The only other subsystem that should be specified with the
DB_INIT_CDB flag is DB_INIT_MPOOL.
-<p>Access method calls are largely unchanged when using this flag, although
-any cursors through which update operations (e.g., <a href="../api_c/dbc_put.html">DBcursor-&gt;c_put</a>,
-<a href="../api_c/dbc_del.html">DBcursor-&gt;c_del</a>) will be made must have the <a href="../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> value
-set in the flags parameter to the cursor call that creates the cursor.
-See <a href="../api_c/db_cursor.html">DB-&gt;cursor</a> for more information.
<p><dt><a name="DB_INIT_LOCK">DB_INIT_LOCK</a><dd>Initialize the locking subsystem. This subsystem should be used when
-multiple processes or threads are going to be reading and writing a Berkeley DB
-database, so that they do not interfere with each other. If all threads
-are accessing the database(s) read-only, then locking is unnecessary.
-When the DB_INIT_LOCK flag is specified, it is usually necessary to run
-the deadlock detector, as well. See <a href="../utility/db_deadlock.html">db_deadlock</a> and
-<a href="../api_c/lock_detect.html">lock_detect</a> for more information.
-<p><dt><a name="DB_INIT_LOG">DB_INIT_LOG</a><dd>Initialize the logging subsystem. This subsystem is used when recovery
-from application or system failure is necessary.
-<p>The log is stored in one or more files in the environment directory.
-Each file is named using the format <i>log.NNNNNNNNNN</i>, where
-<i>NNNNNNNNNN</i> is the sequence number of the file within the log.
-For further information, see
-<a href="../ref/log/limits.html">Log File Limits</a>.
-<p>If the log region is being created and log files are already present, the
-log files are reviewed and subsequent log writes are appended
-to the end of the log, rather than overwriting current log entries.
-<p><dt><a name="DB_INIT_MPOOL">DB_INIT_MPOOL</a><dd>Initialize the shared memory buffer pool subsystem. This subsystem is
-used whenever the application is using any Berkeley DB access method.
-<p><dt><a name="DB_INIT_TXN">DB_INIT_TXN</a><dd>Initialize the transaction subsystem. This subsystem is used when
-recovery and atomicity of multiple operations and recovery are important.
-The DB_INIT_TXN flag implies the DB_INIT_LOG flag.
+multiple processes or threads are going to be reading and writing a
+Berkeley DB database, so that they do not interfere with each other. If all
+threads are accessing the database(s) read-only, locking is unnecessary.
+When the DB_INIT_LOCK flag is specified, it is usually necessary
+to run a deadlock detector, as well. See <a href="../utility/db_deadlock.html">db_deadlock</a> and
+<a href="../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> for more information.
+<p><dt><a name="DB_INIT_LOG">DB_INIT_LOG</a><dd>Initialize the logging subsystem. This subsystem should be used when
+recovery from application or system failure is necessary. If the log
+region is being created and log files are already present, the log files
+are reviewed; subsequent log writes are appended to the end of the log,
+rather than overwriting current log entries.
+<p><dt><a name="DB_INIT_MPOOL">DB_INIT_MPOOL</a><dd>Initialize the shared memory buffer pool subsystem. This subsystem
+should be used whenever an application is using any Berkeley DB access
+method.
+<p><dt><a name="DB_INIT_REP">DB_INIT_REP</a><dd>Initialize the replication subsystem. This subsystem
+should be used whenever an application plans on using replication.
+The DB_INIT_REP flag requires the DB_INIT_TXN and
+DB_INIT_LOCK flags also be configured.
+<p><dt><a name="DB_INIT_TXN">DB_INIT_TXN</a><dd>Initialize the transaction subsystem. This subsystem should be used
+when recovery and atomicity of multiple operations are important. The
+DB_INIT_TXN flag implies the DB_INIT_LOG flag.
</dl>
<p>The second group of flags govern what recovery, if any, is performed when
-the environment is initialized:
+the environment is initialized:</p>
<p><dl compact>
-<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>Run normal recovery on this environment before opening it for normal use.
-If this flag is set, the DB_CREATE flag must also be set since the regions
-will be removed and recreated.
-<p><dt><a name="DB_RECOVER_FATAL">DB_RECOVER_FATAL</a><dd>Run catastrophic recovery on this environment before opening it for normal
-use. If this flag is set, the DB_CREATE flag must also be set since the
-regions will be removed and recreated.
+<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>Run normal recovery on this environment before opening it for normal
+use. If this flag is set, the DB_CREATE flag must also be set
+because the regions will be removed and re-created.
+<p><dt><a name="DB_RECOVER_FATAL">DB_RECOVER_FATAL</a><dd>Run catastrophic recovery on this environment before opening it for
+normal use. If this flag is set, the DB_CREATE flag must also
+be set because the regions will be removed and re-created.
</dl>
<p>A standard part of the recovery process is to remove the existing Berkeley DB
environment and create a new one in which to perform recovery. If the
-thread of control performing recovery does not specify the correct region
-initialization information (e.g., the correct memory pool cache size),
-the result can be an application running in an environment with incorrect
-cache and other subsystem sizes. For this reason, the thread of control
-performing recovery should either specify correct configuration
-information before calling the DBENV-&gt;open function, or it should remove
-the environment after recovery is completed, leaving creation of the
-correctly sized environment to a subsequent call to DBENV-&gt;open.
-<p>All Berkeley DB recovery processing must be single-threaded, that is, only a
+thread of control performing recovery does not specify the correct
+region initialization information (for example, the correct memory pool
+cache size), the result can be an application running in an environment
+with incorrect cache and other subsystem sizes. For this reason, the
+thread of control performing recovery should specify correct
+configuration information before calling the DB_ENV-&gt;open method; or it
+should remove the environment after recovery is completed, leaving
+creation of the correctly sized environment to a subsequent call to
+DB_ENV-&gt;open.</p>
+<p>All Berkeley DB recovery processing must be single-threaded; that is, only a
single thread of control may perform recovery or access a Berkeley DB
-environment while recovery is being performed. As it is not an error to
-specify DB_RECOVER for an environment for which no recovery is
-required, it is reasonable programming practice for the thread of control
-responsible for performing recovery and creating the environment to always
-specify the DB_RECOVER flag during startup.
-<p>The DBENV-&gt;open function returns successfully if DB_RECOVER
-or DB_RECOVER_FATAL is specified and no log files exist, so it is
-necessary to ensure all necessary log files are present before running
-recovery. For further information, consult <a href="../utility/db_archive.html">db_archive</a> and
-<a href="../utility/db_recover.html">db_recover</a>.
-<p>The third group of flags govern file naming extensions in the environment:
+environment while recovery is being performed. Because it is not an
+error to specify DB_RECOVER for an environment for which no
+recovery is required, it is reasonable programming practice for the
+thread of control responsible for performing recovery and creating the
+environment to always specify the DB_CREATE and
+DB_RECOVER flags during startup.</p>
+<p>The DB_ENV-&gt;open function returns successfully if DB_RECOVER
+or DB_RECOVER_FATAL is specified and no log files exist, so it
+is necessary to ensure that all necessary log files are present before
+running recovery. For further information, consult <a href="../utility/db_archive.html">db_archive</a>
+and <a href="../utility/db_recover.html">db_recover</a>.</p>
+<p>The third group of flags govern file-naming extensions in the environment:</p>
<p><dl compact>
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, environment information will be
+used in file naming for all users only if the DB_USE_ENVIRON
+flag is set.
+<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, if the
+DB_USE_ENVIRON_ROOT flag is set, environment information will
+be used for file naming only for users with appropriate permissions (for
+example, users with a user-ID of 0 on UNIX systems).
</dl>
-<p>Finally, there are a few additional, unrelated flags:
+<p>Finally, there are a few additional unrelated flags:</p>
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
-<p><dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory mapped databases into memory.
+<p><dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory-mapped databases into
+memory.
<p><dt><a name="DB_PRIVATE">DB_PRIVATE</a><dd>Specify that the environment will only be accessed by a single process
-(although that process may be multi-threaded). This flag has two effects
+(although that process may be multithreaded). This flag has two effects
on the Berkeley DB environment. First, all underlying data structures are
allocated from per-process memory instead of from shared memory that is
potentially accessible to more than a single process. Second, mutexes
are only configured to work between threads.
<p>This flag should not be specified if more than a single process is
-accessing the environment, as it is likely to cause database corruption
-and unpredictable behavior, e.g., if both a server application and the
-Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> will access the environment, the
-DB_PRIVATE flag should not be specified.
+accessing the environment because it is likely to cause database
+corruption and unpredictable behavior. For example, if both a server
+application and the Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> are expected to access
+the environment, the DB_PRIVATE flag should not be
+specified.</p>
<p><dt><a name="DB_SYSTEM_MEM">DB_SYSTEM_MEM</a><dd>Allocate memory from system shared memory instead of from memory backed
by the filesystem. See <a href="../ref/env/region.html">Shared Memory
Regions</a> for more information.
-<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the DB_ENV handle returned by DBENV-&gt;open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
+<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_c/env_class.html">DB_ENV</a> handle returned by DB_ENV-&gt;open to be
+<i>free-threaded</i>; that is, usable by multiple threads within a
single address space.
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>The DBENV-&gt;open function returns a non-zero error value on failure and 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The environment variable <b>DB_HOME</b> may be used as the path of
-the database home as described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+Berkeley DB are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, Berkeley DB will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
</dl>
-<h1>Errors</h1>
-<p>The DBENV-&gt;open function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;open method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
<p><dt>EAGAIN<dd>The shared memory region was locked and (repeatedly) unavailable.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>
-The DB_THREAD flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The DB_HOME or TMPDIR environment variables were set but empty.
-<p>An incorrectly formatted <b>NAME VALUE</b> entry or line was found.
+<p><dt>EINVAL<dd>If the DB_THREAD flag was specified and fast mutexes are not
+available for this architecture;
+The DB_HOME or TMPDIR environment variables were set, but empty;
+An incorrectly formatted <b>NAME VALUE</b> entry or line was found; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOSPC<dd>HP-UX only: a previously created Berkeley DB environment for this process still
exists.
</dl>
-<p>The DBENV-&gt;open function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;open function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_home</h3>
+<p>The DB_ENV-&gt;get_home method returns the database environment home directory.</p>
+<p>The DB_ENV-&gt;get_home method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_open_flags</h3>
+<p>The DB_ENV-&gt;get_open_flags method returns the open method flags.</p>
+<p>The DB_ENV-&gt;get_open_flags method may not be called before the DB_ENV-&gt;open method has
+been called.</p>
+<p>The DB_ENV-&gt;get_open_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB_ENV-&gt;get_open_flags method returns the
+open method flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_remove.html b/db/docs/api_c/env_remove.html
index 2d7279d79..4c9c8dd5c 100644
--- a/db/docs/api_c/env_remove.html
+++ b/db/docs/api_c/env_remove.html
@@ -1,20 +1,22 @@
-<!--$Id: env_remove.so,v 10.24 2000/12/06 14:40:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_remove.so,v 10.42 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;remove</title>
+<title>Berkeley DB: DB_ENV-&gt;remove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;remove</h1>
+<h3>DB_ENV-&gt;remove</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,104 +24,98 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;remove(DB_ENV *, char *db_home, u_int32_t flags);
+DB_ENV-&gt;remove(DB_ENV *dbenv, char *db_home, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;remove function destroys a Berkeley DB environment, if it is not
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;remove</h3>
+<p>The DB_ENV-&gt;remove method destroys a Berkeley DB environment if it is not
currently in use. The environment regions, including any backing files,
are removed. Any log or database files and the environment directory are
-not removed.
-<p>The <b>db_home</b> argument to DBENV-&gt;remove is described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p>If there are processes that have called <a href="../api_c/env_open.html">DBENV-&gt;open</a> without
-calling <a href="../api_c/env_close.html">DBENV-&gt;close</a> (i.e., there are processes currently using
-the environment), DBENV-&gt;remove will fail without further action,
-unless the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, in which case
-DBENV-&gt;remove will attempt to remove the environment regardless
-of any processes still using it.
+not removed.</p>
+<p>If there are processes that have called <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> without
+calling <a href="../api_c/env_close.html">DB_ENV-&gt;close</a> (that is, there are processes currently
+using the environment), DB_ENV-&gt;remove will fail without further
+action unless the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, in which case
+DB_ENV-&gt;remove will attempt to remove the environment, regardless
+of any processes still using it.</p>
<p>The result of attempting to forcibly destroy the environment when it is
in use is unspecified. Processes using an environment often maintain open
file descriptors for shared regions within it. On UNIX systems, the
-environment removal will usually succeed and processes that have already
-joined the region will continue to run in that region without change,
-however processes attempting to join the environment will either fail or
-create new regions. On other systems (e.g., Windows/NT), where the
-<b>unlink</b>(2) system call will fail if any process has an open
-file descriptor for the file, the region removal will fail.
-<p>Calling DBENV-&gt;remove should not be necessary for most applications,
-as the Berkeley DB environment is cleaned up as part of normal database recovery
-procedures, however, applications may wish to call DBENV-&gt;remove
-as part of application shutdown to free up system resources.
-Specifically, when the <a href="../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was specified to
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>, it may be useful to call DBENV-&gt;remove in order
-to release system shared memory segments that have been allocated.
-<p>In the case of catastrophic or system failure, database recovery must be
-performed (see <a href="../utility/db_recover.html">db_recover</a>), or the <a href="../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> and
-<a href="../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a> flags to <a href="../api_c/env_open.html">DBENV-&gt;open</a> must be specified
-when the environment is re-opened. Alternatively, if recovery is not
-required because no database state is maintained across failures, and
-the <a href="../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was not specified when the environment
-was created, it is possible to clean up an environment by removing all
-of the files in the environment directory that begin with the string
-prefix "__db", as no backing files are created in any other directory.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+environment removal will usually succeed, and processes that have already
+joined the region will continue to run in that region without change.
+However, processes attempting to join the environment will either fail
+or create new regions. On other systems in which the <b>unlink</b>(2) system call will fail if any process has an open file descriptor for
+the file (for example Windows/NT), the region removal will fail.</p>
+<p>Calling DB_ENV-&gt;remove should not be necessary for most applications
+because the Berkeley DB environment is cleaned up as part of normal database
+recovery procedures. However, applications may want to call
+DB_ENV-&gt;remove as part of application shut down to free up system
+resources. For example, if the <a href="../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was specified
+to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>, it may be useful to call DB_ENV-&gt;remove in
+order to release system shared memory segments that have been allocated.
+Or, on architectures in which mutexes require allocation of underlying
+system resources, it may be useful to call DB_ENV-&gt;remove in order
+to release those resources. Alternatively, if recovery is not required
+because no database state is maintained across failures, and no system
+resources need to be released, it is possible to clean up an environment
+by simply removing all the Berkeley DB files in the database environment's
+directories.</p>
+<p>In multithreaded applications, only a single thread may call
+DB_ENV-&gt;remove.</p>
+<p>A <a href="../api_c/env_class.html">DB_ENV</a> handle that has already been used to open an environment
+should not be used to call the DB_ENV-&gt;remove method; a new
+<a href="../api_c/env_class.html">DB_ENV</a> handle should be created for that purpose.</p>
+<p>After DB_ENV-&gt;remove has been called, regardless of its return,
+the Berkeley DB environment handle may not be accessed again.</p>
+<p>The DB_ENV-&gt;remove method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_home</b><dd>
+The <b>db_home</b> parameter names the database environment to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>If the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, the environment is removed regardless
-of any processes that may still using it, and, no locks are acquired
-during this process. (Generally, the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is only
-specified when applications were unable to shut down cleanly, and there
+<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>If the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, the environment is removed, regardless
+of any processes that may still using it, and no locks are acquired
+during this process. (Generally, the <a href="../api_c/env_remove.html#DB_FORCE">DB_FORCE</a> flag is
+specified only when applications were unable to shut down cleanly, and there
is a risk that an application may have died holding a Berkeley DB lock.)
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
+<a name="3"><!--meow--></a>
+<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, environment information will be
+used in file naming for all users only if the DB_USE_ENVIRON
+flag is set.
+<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, if the
+DB_USE_ENVIRON_ROOT flag is set, environment information will
+be used for file naming only for users with appropriate permissions (for
+example, users with a user-ID of 0 on UNIX systems).
+</dl>
</dl>
-<p>In multi-threaded applications, only a single thread may call
-DBENV-&gt;remove.
-<p>A DB_ENV handle which has already been used to open an
-environment should not be used to call the DBENV-&gt;remove function, a new
-DB_ENV handle should be created for that purpose.
-<p>Once DBENV-&gt;remove has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DBENV-&gt;remove function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;remove method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EBUSY<dd>The shared memory region was in use and the force flag was not set.
+<p><dt>EBUSY <dd>The shared memory region was in use and the force flag was not set.
</dl>
-<p>The DBENV-&gt;remove function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;remove function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_alloc.html b/db/docs/api_c/env_set_alloc.html
index dc85ebe89..cea238d08 100644
--- a/db/docs/api_c/env_set_alloc.html
+++ b/db/docs/api_c/env_set_alloc.html
@@ -1,20 +1,22 @@
-<!--Id: env_set_alloc.so,v 1.3 2001/05/01 14:23:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_alloc.so,v 1.21 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_alloc</title>
+<title>Berkeley DB: DB_ENV-&gt;set_alloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_alloc</h1>
+<h3>DB_ENV-&gt;set_alloc</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,86 +24,76 @@
#include &lt;db.h&gt;
<p>
int
-DB_ENV-&gt;set_alloc(DB *db,
- void *(*app_malloc)(size_t size),
- void *(*app_realloc)(void *, size_t),
- void (*app_free)(void *));
+DB_ENV-&gt;set_alloc(DB_ENV *dbenv,
+ void *(*app_malloc)(size_t),
+ void *(*app_realloc)(void *, size_t),
+ void (*app_free)(void *));
</pre></h3>
-<h1>Description</h1>
-<p>Set the allocation functions used by the DB_ENV and DB
-methods to allocate or free memory owned by the application. The
-DBENV-&gt;set_alloc interface sets the allocation functions for a
-database environment; the <a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a> interface sets the
-allocation functions for a single database. If both are specified,
-functions specified for a database will be used in preference to
-functions specified for environment.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_alloc</h3>
+<p>Set the allocation functions used by the <a href="../api_c/env_class.html">DB_ENV</a> and <a href="../api_c/db_class.html">DB</a>
+methods to allocate or free memory owned by the application.</p>
<p>There are a number of interfaces in Berkeley DB where memory is allocated by
the library and then given to the application. For example, the
-<a href="../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_c/dbt.html">DBT</a> object,
-will cause the DB methods to allocate and reallocate memory
+<a href="../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_c/dbt_class.html">DBT</a> object,
+will cause the <a href="../api_c/db_class.html">DB</a> methods to allocate and reallocate memory
which then becomes the responsibility of the calling application. (See
-<a href="../api_c/dbt.html">DBT</a> for more information.) Other examples are the Berkeley DB
+<a href="../api_c/dbt_class.html">DBT</a> for more information.) Other examples are the Berkeley DB
interfaces which return statistical information to the application:
-<a href="../api_c/db_stat.html">DB-&gt;stat</a>, <a href="../api_c/lock_stat.html">lock_stat</a>, <a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_stat.html">log_stat</a>, <a href="../api_c/memp_stat.html">memp_stat</a>, and <a href="../api_c/txn_stat.html">txn_stat</a>. There is
-one interface in the Berkeley DB where memory is allocated by the application
-and then given to the library: <a href="../api_c/db_associate.html">DB-&gt;associate</a>.
+<a href="../api_c/db_stat.html">DB-&gt;stat</a>, <a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a>, <a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>,
+<a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>, <a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a>, and <a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>. There is one
+method in Berkeley DB where memory is allocated by the application and then
+given to the library: <a href="../api_c/db_associate.html">DB-&gt;associate</a>.</p>
<p>On systems in which there may be multiple library versions of the
standard allocation routines (notably Windows NT), transferring memory
between the library and the application will fail because the Berkeley DB
library allocates memory from a different heap than the application uses
-to free it. To avoid this problem, the DBENV-&gt;set_alloc and
-<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a> functions can be used to pass Berkeley DB references to the
-application's allocation routines.
-<p>It is not an error to not specify all three arguments to these
-interfaces; however, in that case the specified interfaces must be
-compatible with the standard library interfaces, as they will be used
-together. The functions specified must match the calling
-conventions of the ANSI C X3.159-1989 (ANSI C) library routines of the same name.
-<p>The DBENV-&gt;set_alloc interface may be used only to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_alloc function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBENV-&gt;set_alloc function may fail and return a non-zero error for the following conditions:
+to free it. To avoid this problem, the DB_ENV-&gt;set_alloc and
+<a href="../api_c/db_set_alloc.html">DB-&gt;set_alloc</a> methods can be used to pass Berkeley DB references to the
+application's allocation routines.</p>
+<p>It is not an error to specify only one or two of the possible allocation
+function parameters to these interfaces; however, in that case the
+specified interfaces must be compatible with the standard library
+interfaces, as they will be used together. The functions specified must
+match the calling conventions of the ANSI C X3.159-1989 (ANSI C) library routines of
+the same name.</p>
+<p>The DB_ENV-&gt;set_alloc method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_alloc method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+</p>
+<p>The DB_ENV-&gt;set_alloc method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>app_malloc</b><dd>
+The <b>app_malloc</b> parameter is the application-specified malloc
+function.
+<p><dt><b>app_realloc</b><dd>
+The <b>app_realloc</b> parameter is the application-specified realloc
+function.
+<p><dt><b>app_free</b><dd>
+The <b>app_free</b> parameter is the application-specified free function.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_alloc method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DBENV-&gt;set_alloc function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;set_alloc function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_err.html">DBENV-&gt;err</a>, <a href="../api_c/env_err.html">DBENV-&gt;errx</a>
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_feedback.html">DBENV-&gt;set_feedback</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_pageyield.html">db_env_set_pageyield</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-<a href="../api_c/env_set_panicstate.html">db_env_set_panicstate</a>,
-<a href="../api_c/env_set_rec_init.html">DBENV-&gt;set_recovery_init</a>,
-<a href="../api_c/env_set_rpc_server.html">DBENV-&gt;set_rpc_server</a>,
-<a href="../api_c/env_set_region_init.html">db_env_set_region_init</a>,
-<a href="../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a>,
-<a href="../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a>,
-<a href="../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a>,
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>
-and
-<a href="../api_c/env_version.html">db_version</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_app_dispatch.html b/db/docs/api_c/env_set_app_dispatch.html
index abf44c47f..64131e42a 100644
--- a/db/docs/api_c/env_set_app_dispatch.html
+++ b/db/docs/api_c/env_set_app_dispatch.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_app_dispatch.so,v 10.36 2002/06/24 14:49:17 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_app_dispatch.so,v 10.53 2003/11/19 03:57:15 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;set_app_dispatch</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;set_app_dispatch</h1>
+<h3>DB_ENV-&gt;set_app_dispatch</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -27,16 +28,33 @@ DB_ENV-&gt;set_app_dispatch(DB_ENV *dbenv,
int (*tx_recover)(DB_ENV *dbenv,
DBT *log_rec, DB_LSN *lsn, db_recops op));
</pre></h3>
-<h1>Description</h1>
-<p>Set the application's function to be called during transaction abort
-and recovery. This function must return 0 on success and either
-<b>errno</b> or a value outside of the Berkeley DB error name space on
-failure. It takes four arguments:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_app_dispatch</h3>
+<p>Declare a function to be called during transaction abort and recovery
+to process application-specific log records.</p>
+<p>The DB_ENV-&gt;set_app_dispatch method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_app_dispatch method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_app_dispatch
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DB_ENV-&gt;set_app_dispatch method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>dbenv <dd>A Berkeley DB environment.
-<p><dt>log_rec<dd>A log record.
-<p><dt>lsn<dd>A log sequence number.
-<p><dt>op<dd>One of the following values:
+<p><dt><b>tx_recover</b><dd>
+The <b>tx_recover</b> parameter is the application's abort and recovery
+function. The function takes four parameters:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>log_rec</b><dd>The <b>log_rec</b> parameter is a log record.
+<p><dt><b>lsn</b><dd>The <b>lsn</b> parameter is a log sequence number.
+<p><dt><b>op</b><dd>The <b>op</b> parameter is one of the following values:
<p><dl compact>
<p><dt><a name="DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a><dd>The log is being read backward to determine which transactions have been
committed and to abort those operations that were not; undo the operation
@@ -50,58 +68,37 @@ described by the log record.
<p><dt><a name="DB_TXN_PRINT">DB_TXN_PRINT</a><dd>The log is being printed for debugging purposes; print the contents of
this log record in the desired format.
</dl>
-</dl>
<p>The DB_TXN_FORWARD_ROLL and DB_TXN_APPLY operations
frequently imply the same actions, redoing changes that appear in the
log record, although if a recovery function is to be used on a
-replication client where reads may be taking place concurrently with
-the processing of incoming messages, DB_TXN_APPLY operations
-should also perform appropriate locking. The macro DB_REDO(op) checks
-that the operation is one of DB_TXN_FORWARD_ROLL or
-DB_TXN_APPLY, and should be used in the recovery code to refer
-to the conditions under which operations should be redone. Similarly,
-the macro DB_UNDO(op) checks if the operation is one of
-DB_TXN_BACKWARD_ROLL or DB_TXN_ABORT.
-<p>The DB_ENV-&gt;set_app_dispatch function configures operations performed using the specified
-<a href="../api_c/env_create.html">DB_ENV</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DB_ENV-&gt;set_app_dispatch interface may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_app_dispatch
-must be consistent with the existing environment or corruption can
-occur.
-<p>The DB_ENV-&gt;set_app_dispatch function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;set_app_dispatch function may fail and return a non-zero error for the following conditions:
+replication client where reads may be taking place concurrently with the
+processing of incoming messages, DB_TXN_APPLY operations should
+also perform appropriate locking. The macro DB_REDO(op) checks that the
+operation is one of DB_TXN_FORWARD_ROLL or DB_TXN_APPLY,
+and should be used in the recovery code to refer to the conditions under
+which operations should be redone. Similarly, the macro DB_UNDO(op)
+checks if the operation is one of DB_TXN_BACKWARD_ROLL or
+DB_TXN_ABORT.</p>
+</dl>
+<p>The function must return 0 on success and either <b>errno</b> or a
+value outside of the Berkeley DB error name space on failure.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_app_dispatch method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB_ENV-&gt;set_app_dispatch function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;set_app_dispatch function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a>,
-<a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a>
-and
-<a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>.
-<p>
-<a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>,
-<a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a>,
-<a href="../api_c/txn_discard.html">DB_TXN-&gt;discard</a>,
-<a href="../api_c/txn_id.html">DB_TXN-&gt;id</a>,
-<a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a>
-and
-<a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_cachesize.html b/db/docs/api_c/env_set_cachesize.html
index ba7980bb7..e32278ce0 100644
--- a/db/docs/api_c/env_set_cachesize.html
+++ b/db/docs/api_c/env_set_cachesize.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_cachesize.so,v 10.19 2000/05/20 16:29:11 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.46 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_cachesize</title>
+<title>Berkeley DB: DB_ENV-&gt;set_cachesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_cachesize</h1>
+<h3>DB_ENV-&gt;set_cachesize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,65 +24,108 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_cachesize(DB_ENV *dbenv,
+DB_ENV-&gt;set_cachesize(DB_ENV *dbenv,
u_int32_t gbytes, u_int32_t bytes, int ncache);
+<p>
+int
+DB_ENV-&gt;get_cachesize(DB_ENV *dbenv,
+ u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_cachesize</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>Set the size of the shared memory buffer pool -- that is, the cache.
+The cache should be the size of the normal working data set of the
+application, with some small amount of additional memory for unusual
+situations. (Note: the working set is not the same as the number of
+pages accessed simultaneously, and is usually much larger.)</p>
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>The DBENV-&gt;set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_cachesize function returns a non-zero error value on failure and 0 on success.
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified. The current maximum size of a single cache is 4GB.
+(All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.)
+For information on tuning the Berkeley DB cache size, see
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
+<p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large
+enough they cannot be allocated contiguously on some architectures. For
+example, some releases of Solaris limit the amount of memory that may
+be allocated contiguously by a process. If <b>ncache</b> is 0 or 1,
+the cache will be allocated contiguously in memory. If it is greater
+than 1, the cache will be broken up into <b>ncache</b> equally sized,
+separate pieces of memory.</p>
<p>The database environment's cache size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_cachesize", one or more whitespace characters,
-and the three arguments specified to this interface, separated by whitespace
-characters, for example, "set_cachesize 1 500 2". Because the <b>DB_CONFIG</b> file is read when the database
+and the cache size specified in three parts: the gigabytes of cache, the
+additional bytes of cache, and the number of caches, also separated by
+whitespace characters. For example, "set_cachesize 2 524288000 3" would
+create a 2.5GB logical cache, split between three physical caches.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_cachesize method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_cachesize method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_cachesize
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_cachesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>ncache</b><dd>
+The <b>ncache</b> parameter is the number of caches to create.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_cachesize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
-<p>The specified cache size was impossibly small.
+<p><dt>EINVAL<dd>If the specified cache size was impossibly small;
+the method was called after
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a>
+was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_cachesize</h3>
+<p>The DB_ENV-&gt;get_cachesize method returns the current size and composition of the
+cache.</p>
+<p>The DB_ENV-&gt;get_cachesize method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_cachesize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the cache is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the cache is copied.
+<p><dt><b>ncachep</b><dd>
+The <b>ncachep</b> parameter references memory into which
+ the number of caches is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_data_dir.html b/db/docs/api_c/env_set_data_dir.html
index 68db6dc47..9ae74a723 100644
--- a/db/docs/api_c/env_set_data_dir.html
+++ b/db/docs/api_c/env_set_data_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_data_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_data_dir.so,v 10.23 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_data_dir</title>
+<title>Berkeley DB: DB_ENV-&gt;set_data_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_data_dir</h1>
+<h3>DB_ENV-&gt;set_data_dir</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,56 +24,83 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_data_dir(DB_ENV *dbenv, const char *dir);
+DB_ENV-&gt;set_data_dir(DB_ENV *dbenv, const char *dir);
+<p>
+int
+DB_ENV-&gt;get_data_dirs(DB_ENV *dbenv, const char ***dirpp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_data_dir</h3>
+<a name="3"><!--meow--></a>
<p>Set the path of a directory to be used as the location of the access
method database files. Paths specified to the <a href="../api_c/db_open.html">DB-&gt;open</a> function
-will be searched relative to this path. Paths set using this interface
+will be searched relative to this path. Paths set using this method
are additive, and specifying more than one will result in each specified
directory being searched for database files. If any directories are
-specified, created database files will always be created in the first path
-specified.
-<p>If no database directories are specified, database files can only exist
-in the environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
+specified, created database files will always be created in the first
+path specified.</p>
+<p>If no database directories are specified, database files can exist only
+in the environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p>
<p>For the greatest degree of recoverability from system or application
failure, database files and log files should be located on separate
-physical devices.
-<p>The DBENV-&gt;set_data_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_data_dir function returns a non-zero error value on failure and 0 on success.
-<p>The database environment's data directory may also be set using the environment's
+physical devices.</p>
+<p>The database environment's data directories may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_data_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+and the directory name.
+</p>
+<p>The DB_ENV-&gt;set_data_dir method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_data_dir method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_data_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DB_ENV-&gt;set_data_dir method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is a directory to be used as a location for
+database files.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_data_dir method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_data_dirs</h3>
+<p>The DB_ENV-&gt;get_data_dirs method returns the NULL-terminated
+array of directories.</p>
+<p>The DB_ENV-&gt;get_data_dirs method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_data_dirs method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirpp</b><dd>
+The DB_ENV-&gt;get_data_dirs method returns a reference to the
+NULL-terminated
+array of directories in <b>dirpp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_encrypt.html b/db/docs/api_c/env_set_encrypt.html
index 113fdeae3..5f9a44c9f 100644
--- a/db/docs/api_c/env_set_encrypt.html
+++ b/db/docs/api_c/env_set_encrypt.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_encrypt.so,v 10.20 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;set_encrypt</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;set_encrypt</h1>
+<h3>DB_ENV-&gt;set_encrypt</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,83 +25,78 @@
<p>
int
DB_ENV-&gt;set_encrypt(DB_ENV *dbenv, const char *passwd, u_int32_t flags);
+<p>
+int
+DB_ENV-&gt;get_encrypt_flags(DB_ENV *dbenv, u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_c/env_create.html">DB_ENV</a> and <a href="../api_c/db_create.html">DB</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_encrypt</h3>
+<a name="3"><!--meow--></a>
+<p>Set the password used by the Berkeley DB library to perform encryption and
+decryption.</p>
+<p>The DB_ENV-&gt;set_encrypt method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_encrypt method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_encrypt
+must be consistent with the existing environment or an error will be
+returned.
+</p>
+<p>The DB_ENV-&gt;set_encrypt method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_ENCRYPT_AES">DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
and Federal Information Processing Standard (FIPS) 197) algorithm for
encryption or decryption.
</dl>
-<p>The DB_ENV-&gt;set_encrypt function configures a database environment, not only operations
-performed using the specified <a href="../api_c/env_create.html">DB_ENV</a> handle.
-<p>The DB_ENV-&gt;set_encrypt interface may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_encrypt
-must be consistent with the existing environment or an error will be
-returned.
-<p>The DB_ENV-&gt;set_encrypt function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;set_encrypt function may fail and return a non-zero error for the following conditions:
+<p><dt><b>passwd</b><dd>
+The <b>passwd</b> parameter is the password used to perform encryption
+and decryption.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_encrypt method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
+<p><dt>EINVAL<dd>If the method was called after
<a href="../api_c/env_open.html">DB_ENV-&gt;open</a>
-was called.
+was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>EOPNOTSUPP<dd>Cryptography is not available in this Berkeley DB release.
</dl>
-<p>The DB_ENV-&gt;set_encrypt function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;set_encrypt function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_close.html">DB_ENV-&gt;close</a>,
-<a href="../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a>,
-<a href="../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a>,
-<a href="../api_c/env_err.html">DB_ENV-&gt;err</a>,
-<a href="../api_c/env_err.html">DB_ENV-&gt;errx</a>,
-<a href="../api_c/env_open.html">DB_ENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DB_ENV-&gt;remove</a>,
-<a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>,
-<a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a>,
-<a href="../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a>,
-<a href="../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a>,
-<a href="../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a>,
-<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a>,
-<a href="../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a>,
-<a href="../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a>,
-<a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a>,
-<a href="../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a>,
-<a href="../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a>,
-<a href="../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a>,
-<a href="../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a>,
-<a href="../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a>,
-<a href="../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>
-and
-<a href="../api_c/env_version.html">db_version</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_encrypt_flags</h3>
+<p>The DB_ENV-&gt;get_encrypt_flags method returns the encryption flags.</p>
+<p>The DB_ENV-&gt;get_encrypt_flags method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_encrypt_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB_ENV-&gt;get_encrypt_flags method returns the
+encryption flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_errcall.html b/db/docs/api_c/env_set_errcall.html
index 660943070..68fd76a63 100644
--- a/db/docs/api_c/env_set_errcall.html
+++ b/db/docs/api_c/env_set_errcall.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_errcall.so,v 10.16 1999/12/20 08:52:29 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.33 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_errcall</title>
+<title>Berkeley DB: DB_ENV-&gt;set_errcall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_errcall</h1>
+<h3>DB_ENV-&gt;set_errcall</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,51 +24,49 @@
#include &lt;db.h&gt;
<p>
void
-DBENV-&gt;set_errcall(DB_ENV *dbenv,
+DB_ENV-&gt;set_errcall(DB_ENV *dbenv,
void (*db_errcall_fcn)(const char *errpfx, char *msg));
</pre></h3>
-<h1>Description</h1>
-When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
-return value is returned by the function. In some cases, however,
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_errcall</h3>
+<p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
+return value is returned by the interface. In some cases, however,
the <b>errno</b> value may be insufficient to completely describe
-the cause of the error especially during initial application debugging.
-<p>The DBENV-&gt;set_errcall function is used to enhance the mechanism for reporting error
-messages to the application. In some cases, when an error occurs, Berkeley DB
-will call <b>db_errcall_fcn</b> with additional error information. The
-function must be declared with two arguments; the first will be the prefix
-string (as previously set by <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>), the second will be the error message string.
-It is up to the <b>db_errcall_fcn</b> function to display the error
-message in an appropriate manner.
+the cause of the error, especially during initial application debugging.</p>
+<p>The DB_ENV-&gt;set_errcall and <a href="../api_c/db_set_errcall.html">DB-&gt;set_errcall</a> methods are used to
+enhance the mechanism for reporting error messages to the application.
+In some cases, when an error occurs, Berkeley DB will call
+<b>db_errcall_fcn</b> with additional error information. It is up to
+the <b>db_errcall_fcn</b> function to display the error message in an
+appropriate manner.</p>
<p>Alternatively, you can use the <a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> or
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a> functions to display the additional information
-via a C library FILE *.
-<p>This error logging enhancement does not slow performance or significantly
+<a href="../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a> methods to display the additional information via
+a C library FILE *.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>The DBENV-&gt;set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+as during application debugging.</p>
+<p>The DB_ENV-&gt;set_errcall method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_errcall_fcn</b><dd>
+The <b>db_errcall_fcn</b> parameter is the application-specified error
+reporting function. The function takes two parameters:
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>The <b>errpfx</b> parameter is the prefix string (as previously set by
+<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>).
+<p><dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_errfile.html b/db/docs/api_c/env_set_errfile.html
index ba1dd75f2..b84eeeec8 100644
--- a/db/docs/api_c/env_set_errfile.html
+++ b/db/docs/api_c/env_set_errfile.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_errfile.so,v 10.17 1999/12/20 08:52:29 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.31 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_errfile</title>
+<title>Berkeley DB: DB_ENV-&gt;set_errfile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_errfile</h1>
+<h3>DB_ENV-&gt;set_errfile</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,48 +24,62 @@
#include &lt;db.h&gt;
<p>
void
-DBENV-&gt;set_errfile(DB_ENV *dbenv, FILE *errfile);
+DB_ENV-&gt;set_errfile(DB_ENV *dbenv, FILE *errfile);
+<p>
+void
+DB_ENV-&gt;get_errfile(DB_ENV *dbenv, FILE **errfilep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_errfile</h3>
+<a name="3"><!--meow--></a>
When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
-return value is returned by the function. In some cases, however,
+return value is returned by the interface. In some cases, however,
the <b>errno</b> value may be insufficient to completely describe
the cause of the error especially during initial application debugging.
-<p>The DBENV-&gt;set_errfile function is used to enhance the mechanism for reporting error
-messages to the application by setting a C library FILE * to be used for
-displaying additional Berkeley DB error messages. In some cases, when an error
-occurs, Berkeley DB will output an additional error message to the specified
-file reference.
+<p>The DB_ENV-&gt;set_errfile and <a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> methods are used to
+enhance the mechanism for reporting error messages to the application
+by setting a C library FILE * to be used for displaying additional Berkeley DB
+error messages. In some cases, when an error occurs, Berkeley DB will output
+an additional error message to the specified file reference.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
-<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>), an error string, and
-a trailing &lt;newline&gt; character.
+<a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> or <a href="../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>), an error string, and
+a trailing &lt;newline&gt; character.</p>
<p>This error logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>The DBENV-&gt;set_errfile interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+as during application debugging.</p>
+<p>The DB_ENV-&gt;set_errfile method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfile</b><dd>
+The <b>errfile</b> parameter is a C library FILE * to be used for
+displaying additional Berkeley DB error information.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_errfile</h3>
+<p>The DB_ENV-&gt;get_errfile method returns the FILE *.</p>
+<p>The DB_ENV-&gt;get_errfile method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_errfile method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfilep</b><dd>
+The DB_ENV-&gt;get_errfile method returns the
+FILE * in <b>errfilep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_errpfx.html b/db/docs/api_c/env_set_errpfx.html
index be803070c..f1853d87f 100644
--- a/db/docs/api_c/env_set_errpfx.html
+++ b/db/docs/api_c/env_set_errpfx.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_errpfx.so,v 10.12 1999/12/20 08:52:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.30 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_errpfx</title>
+<title>Berkeley DB: DB_ENV-&gt;set_errpfx</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_errpfx</h1>
+<h3>DB_ENV-&gt;set_errpfx</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,38 +24,53 @@
#include &lt;db.h&gt;
<p>
void
-DBENV-&gt;set_errpfx(DB_ENV *dbenv, const char *errpfx);
+DB_ENV-&gt;set_errpfx(DB_ENV *dbenv, const char *errpfx);
+<p>
+void
+DB_ENV-&gt;get_errpfx(DB_ENV *dbenv, const char **errpfxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>The DBENV-&gt;set_errpfx function does not copy the memory referenced by the
-<b>errpfx</b> argument, rather, it maintains a reference to it. This
-allows applications to modify the error message prefix at any time,
-without repeatedly calling DBENV-&gt;set_errpfx, but means that the
-memory must be maintained until the handle is closed.
-<p>The DBENV-&gt;set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_errpfx</h3>
+<a name="3"><!--meow--></a>
+<p>Set the prefix string that appears before error messages issued by Berkeley DB.</p>
+<p>The <a href="../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> and DB_ENV-&gt;set_errpfx methods do not copy
+the memory to which the <b>errpfx</b> parameter refers; rather, they
+maintain a reference to it. Although this allows applications to modify
+the error message prefix at any time (without repeatedly calling the
+interfaces), it means the memory must be maintained until the handle is
+closed.</p>
+<p>The DB_ENV-&gt;set_errpfx method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>
+The <b>errpfx</b> parameter is the application-specified error prefix
+for additional error messages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_errpfx</h3>
+<p>The DB_ENV-&gt;get_errpfx method returns the error prefix.</p>
+<p>The DB_ENV-&gt;get_errpfx method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_errpfx method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfxp</b><dd>
+The DB_ENV-&gt;get_errpfx method returns a reference to the
+error prefix in <b>errpfxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_feedback.html b/db/docs/api_c/env_set_feedback.html
index 743f7772f..32c199f2e 100644
--- a/db/docs/api_c/env_set_feedback.html
+++ b/db/docs/api_c/env_set_feedback.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_feedback.so,v 10.19 2000/07/09 19:12:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.40 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_feedback</title>
+<title>Berkeley DB: DB_ENV-&gt;set_feedback</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_feedback</h1>
+<h3>DB_ENV-&gt;set_feedback</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,48 +24,53 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_feedback(DB_ENV *,
- void (*db_feedback_fcn)(DB_ENV *, int opcode, int pct));
+DB_ENV-&gt;set_feedback(DB_ENV *dbenv,
+ void (*db_feedback_fcn)(DB_ENV *dbenv, int opcode, int percent));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_feedback</h3>
<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The DBENV-&gt;set_feedback function can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback function. This function must be declared with
-three arguments: the first will be a reference to the enclosing
-environment, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback function to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
+amounts of time. The DB_ENV-&gt;set_feedback method can be used by applications
+to monitor progress within these operations. When an operation is
+likely to take a long time, Berkeley DB will call the specified callback
+function with progress information.</p>
+<p>It is up to the callback function to display this information in an
+appropriate manner.</p>
+<p>The DB_ENV-&gt;set_feedback method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle
+<p>The DB_ENV-&gt;set_feedback method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_feedback method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_feedback_fcn</b><dd>
+The <b>db_feedback_fcn</b> parameter is the application-specified
+feedback function called to report Berkeley DB operation progress. The
+callback function must take three parameters:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is a reference to the enclosing database
+environment.
+<p><dt><b>opcode</b><dd>The <b>opcode</b> parameter is an operation code. The <b>opcode</b>
+parameter may take on any of the following values:
<p><dl compact>
<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>The environment is being recovered.
</dl>
-<p>The DBENV-&gt;set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DBENV-&gt;set_feedback function returns a non-zero error value on failure and 0 on success.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<p><dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the operation that has
+been completed, specified as an integer value between 0 and 100.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_flags.html b/db/docs/api_c/env_set_flags.html
index 6dfc09508..34e6c3858 100644
--- a/db/docs/api_c/env_set_flags.html
+++ b/db/docs/api_c/env_set_flags.html
@@ -1,20 +1,22 @@
<!--$Id-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_flags</title>
+<title>Berkeley DB: DB_ENV-&gt;set_flags</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_flags</h1>
+<h3>DB_ENV-&gt;set_flags</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,63 +24,293 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_flags(DB_ENV *dbenv, u_int32_t flags, int onoff);
+DB_ENV-&gt;set_flags(DB_ENV *dbenv, u_int32_t flags, int onoff);
+<p>
+int
+DB_ENV-&gt;get_flags(DB_ENV *dbenv, u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-If <b>onoff</b> is zero, the specified flags are cleared, otherwise they
-are set.
-<p><dl compact>
-<p><dt><a name="DB_CDB_ALLDB">DB_CDB_ALLDB</a><dd>For Berkeley DB Concurrent Data Store applications, perform locking on an environment-wide basis
-rather than per-database. This flag may only be used to configure Berkeley DB
-before the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Copy read-only database files in this environment into the local cache
-instead of potentially mapping them into process memory (see the
-description of the <a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a> function for further information).
-<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log on transaction commit or prepare.
-This means that transactions exhibit the ACI (atomicity, consistency and
-isolation) properties, but not D (durability), i.e., database integrity
-will be maintained but it is possible that some number of the most
-recently committed transactions may be undone during recovery instead of
-being redone.
-<p>The number of transactions that are potentially at risk is governed by
-how often the log is checkpointed (see <a href="../utility/db_checkpoint.html">db_checkpoint</a> for more
-information) and how many log updates can fit on a single log page.
-</dl>
-<p>The DBENV-&gt;set_flags function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a database environment.</p>
<p>The database environment's flag values may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_flags", one or more whitespace characters,
-and the interface flag argument as a string, for example, "set_flags
-DB_TXN_NOSYNC". Because the <b>DB_CONFIG</b> file is read when the database
+and the method flag parameter as a string; for example, "set_flags
+DB_TXN_NOSYNC".
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set by bitwise inclusively <b>OR</b>'ing together one or more
+of the following values:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If set, operations for which no explicit transaction handle was
+specified, and which modify databases in the database environment, will
+be automatically enclosed within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+<p>Calling DB_ENV-&gt;set_flags with the <a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the <a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The <a href="../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="4"><!--meow--></a>
+<p><dt><a name="DB_CDB_ALLDB">DB_CDB_ALLDB</a><dd>If set, Berkeley DB Concurrent Data Store applications will perform locking on an environment-wide
+basis rather than on a per-database basis.
+<p>Calling DB_ENV-&gt;set_flags with the DB_CDB_ALLDB flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_CDB_ALLDB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_CDB_ALLDB flag may be used to configure Berkeley DB only before the
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is called.</p>
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_DIRECT_DB">DB_DIRECT_DB</a><dd>Turn off system buffering of Berkeley DB database files to avoid double caching.
+<p>Calling DB_ENV-&gt;set_flags with the DB_DIRECT_DB flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_DIRECT_DB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DIRECT_DB flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="6"><!--meow--></a>
+<p><dt><a name="DB_DIRECT_LOG">DB_DIRECT_LOG</a><dd>Turn off system buffering of Berkeley DB log files to avoid double caching.
+<p>Calling DB_ENV-&gt;set_flags with the DB_DIRECT_LOG flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_DIRECT_LOG flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DIRECT_LOG flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="7"><!--meow--></a>
+<p><dt><a name="DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a><dd>If set, Berkeley DB will automatically remove log files that are no longer
+needed. Automatic log file removal is likely to make catastrophic
+recovery impossible.
+<p>Calling DB_ENV-&gt;set_flags with the DB_LOG_AUTOREMOVE flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_LOG_AUTOREMOVE flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_LOG_AUTOREMOVE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="8"><!--meow--></a>
+<p><dt><a name="DB_NOLOCKING">DB_NOLOCKING</a><dd>If set, Berkeley DB will grant all requested mutual exclusion mutexes and
+database locks without regard for their actual availability. This
+functionality should never be used for purposes other than debugging.
+<p>Calling DB_ENV-&gt;set_flags with the DB_NOLOCKING flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_NOLOCKING flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="9"><!--meow--></a>
+<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>If set, Berkeley DB will copy read-only database files into the local cache
+instead of potentially mapping them into process memory (see the
+description of the <a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a> method for further
+information).
+<p>Calling DB_ENV-&gt;set_flags with the DB_NOMMAP flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_NOMMAP flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_NOMMAP flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="10"><!--meow--></a>
+<p><dt><a name="DB_NOPANIC">DB_NOPANIC</a><dd>If set, Berkeley DB will ignore any panic state in the database environment.
+(Database environments in a panic state normally refuse all attempts to
+call Berkeley DB functions, returning <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.) This
+functionality should never be used for purposes other than debugging.
+<p>Calling DB_ENV-&gt;set_flags with the DB_NOPANIC flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_NOPANIC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<p><dt><a name="DB_OVERWRITE">DB_OVERWRITE</a><dd>Overwrite files stored in encrypted formats before deleting them. Berkeley DB
+overwrites files using alternating 0xff, 0x00 and 0xff byte patterns.
+For file overwriting to be effective, the underlying file must be stored
+on a fixed-block filesystem. Systems with journaling or logging filesystems
+will require operating system support and probably modification of the
+Berkeley DB sources.
+<p>Calling DB_ENV-&gt;set_flags with the DB_OVERWRITE flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_OVERWRITE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="11"><!--meow--></a>
+<p><dt><a name="DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a><dd>If set, Berkeley DB will set the panic state for the database environment.
+(Database environments in a panic state normally refuse all attempts to
+call Berkeley DB functions, returning <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.) This flag may
+not be specified using the environment's <b>DB_CONFIG</b> file. This
+flag may be used to configure Berkeley DB only after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method
+is called.
+<p>Calling DB_ENV-&gt;set_flags with the DB_PANIC_ENVIRONMENT flag affects the
+database environment, including all threads of control accessing the
+database environment.</p>
+<p>The DB_PANIC_ENVIRONMENT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="12"><!--meow--></a>
+<p><dt><a name="DB_REGION_INIT">DB_REGION_INIT</a><dd>In some applications, the expense of page-faulting the underlying shared
+memory regions can affect performance. (For example, if the page-fault
+occurs while holding a lock, other lock requests can convoy, and overall
+throughput may decrease.) If set, Berkeley DB will page-fault shared regions
+into memory when initially creating or joining a Berkeley DB environment. In
+addition, Berkeley DB will write the shared regions when creating an
+environment, forcing the underlying virtual memory and filesystems to
+instantiate both the necessary memory and the necessary disk space.
+This can also avoid out-of-disk space failures later on.
+<p>Calling DB_ENV-&gt;set_flags with the DB_REGION_INIT flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_REGION_INIT flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_REGION_INIT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<p><dt><a name="DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a><dd>If set, database calls timing out based on lock or transaction timeout
+values will
+return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> instead of <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>.
+This allows applications to distinguish between operations which have
+deadlocked and operations which have exceeded their time limits.
+<p>Calling DB_ENV-&gt;set_flags with the <a href="../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the <a href="../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The <a href="../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="13"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If set, Berkeley DB will not write or synchronously flush the log on transaction
+commit.
+This means that transactions exhibit the ACI (atomicity, consistency,
+and isolation) properties, but not D (durability); that is, database
+integrity will be maintained, but if the application or system fails,
+it is possible some number of the most recently committed transactions
+may be undone during recovery. The number of transactions at risk is
+governed by how many log updates can fit into the log buffer, how often
+the operating system flushes dirty buffers to disk, and how often the
+log is checkpointed.
+<p>Calling DB_ENV-&gt;set_flags with the DB_TXN_NOSYNC flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_TXN_NOSYNC flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p> <p>The DB_TXN_NOSYNC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="14"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a><dd>If set, Berkeley DB will not write log records. This means that
+transactions exhibit the ACI (atomicity, consistency, and isolation)
+properties, but not D (durability); that is, database integrity will
+be maintained, but if the application or system fails, integrity will
+not persist. All database files must be verified and/or restored from
+backup after a failure. In order to ensure integrity after
+application shut down, all database handles must be closed without
+specifying <a href="../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a>, or all database changes must be flushed
+from the database environment cache using
+either the <a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> or <a href="../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> methods.
+<p>Calling DB_ENV-&gt;set_flags with the DB_TXN_NOT_DURABLE flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_TXN_NOT_DURABLE flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p> <p>The DB_TXN_NOT_DURABLE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="15"><!--meow--></a>
+<p><dt><a name="DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a><dd>If set, Berkeley DB will write, but will not synchronously flush, the log on
+transaction commit.
+This means that transactions exhibit the ACI (atomicity, consistency,
+and isolation) properties, but not D (durability); that is, database
+integrity will be maintained, but if the system fails, it is possible
+some number of the most recently committed transactions may be undone
+during recovery. The number of transactions at risk is governed by how
+often the system flushes dirty buffers to disk and how often the log is
+checkpointed.
+<p>Calling DB_ENV-&gt;set_flags with the DB_TXN_WRITE_NOSYNC flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_TXN_WRITE_NOSYNC flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_TXN_WRITE_NOSYNC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="16"><!--meow--></a>
+<p><dt><a name="DB_YIELDCPU">DB_YIELDCPU</a><dd>If set, Berkeley DB will yield the processor immediately after each page or
+mutex acquisition. This functionality should never be used for purposes
+other than stress testing.
+<p>Calling DB_ENV-&gt;set_flags with the DB_YIELDCPU flag only affects
+the specified <a href="../api_c/env_class.html">DB_ENV</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_c/env_class.html">DB_ENV</a>
+handles opened in the environment must either set the DB_YIELDCPU flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_YIELDCPU flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<p><dt><b>onoff</b><dd>
+If the <b>onoff</b> parameter is
+zero,
+the specified flags are cleared; otherwise they are set.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_flags method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_flags</h3>
+<p>The DB_ENV-&gt;get_flags method returns the configuration flags.</p>
+<p>The DB_ENV-&gt;get_flags method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB_ENV-&gt;get_flags method returns the
+configuration flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lg_bsize.html b/db/docs/api_c/env_set_lg_bsize.html
index 85e6dc121..9195f89e0 100644
--- a/db/docs/api_c/env_set_lg_bsize.html
+++ b/db/docs/api_c/env_set_lg_bsize.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_bsize.so,v 10.10 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_bsize.so,v 10.31 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lg_bsize</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lg_bsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lg_bsize</h1>
+<h3>DB_ENV-&gt;set_lg_bsize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,47 +24,81 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lg_bsize(DB_ENV *dbenv, u_int32_t lg_bsize);
+DB_ENV-&gt;set_lg_bsize(DB_ENV *dbenv, u_int32_t lg_bsize);
+<p>
+int
+DB_ENV-&gt;get_lg_bsize(DB_ENV *dbenv, u_int32_t *lg_bsizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_bsize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the in-memory log buffer, in bytes. By default, or if
-the value is set to 0, a size of 32K is used.
+the value is set to 0, a size of 32K is used. The size of the log file
+(see <a href="../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a>) must be at least four times the size of
+the in-memory log buffer.</p>
<p>Log information is stored in-memory until the storage space fills up
or transaction commit forces the information to be flushed to stable
storage. In the presence of long-running transactions or transactions
producing large amounts of data, larger buffer sizes can increase
-throughput.
-<p>The DBENV-&gt;set_lg_bsize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lg_bsize function returns a non-zero error value on failure and 0 on success.
+throughput.</p>
<p>The database environment's log buffer size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_bsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lg_bsize method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lg_bsize method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lg_bsize
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lg_bsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_bsize</b><dd>
+The <b>lg_bsize</b> parameter is the size of the in-memory log buffer,
+in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lg_bsize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called;
+The size of the log file is less than four times the size of the in-memory
+log buffer; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lg_bsize</h3>
+<p>The DB_ENV-&gt;get_lg_bsize method returns the size of the log buffer, in bytes.</p>
+<p>The DB_ENV-&gt;get_lg_bsize method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lg_bsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_bsizep</b><dd>
+The DB_ENV-&gt;get_lg_bsize method returns the
+size of the log buffer, in bytes in <b>lg_bsizep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lg_dir.html b/db/docs/api_c/env_set_lg_dir.html
index a8d5c8614..c93872f1f 100644
--- a/db/docs/api_c/env_set_lg_dir.html
+++ b/db/docs/api_c/env_set_lg_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_dir.so,v 10.21 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lg_dir</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lg_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lg_dir</h1>
+<h3>DB_ENV-&gt;set_lg_dir</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,52 +24,78 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lg_dir(DB_ENV *dbenv, const char *dir);
+DB_ENV-&gt;set_lg_dir(DB_ENV *dbenv, const char *dir);
+<p>
+int
+DB_ENV-&gt;get_lg_dir(DB_ENV *dbenv, const char **dirp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_dir</h3>
+<a name="3"><!--meow--></a>
<p>The path of a directory to be used as the location of logging files.
Log files created by the Log Manager subsystem will be created in this
-directory.
+directory.</p>
<p>If no logging directory is specified, log files are created in the
-environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
+environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p>
<p>For the greatest degree of recoverability from system or application
failure, database files and log files should be located on separate
-physical devices.
-<p>The DBENV-&gt;set_lg_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lg_dir function returns a non-zero error value on failure and 0 on success.
+physical devices.</p>
<p>The database environment's logging directory may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
+and the directory name.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lg_dir method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_lg_dir method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lg_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DB_ENV-&gt;set_lg_dir method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is the directory used to store the logging files.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lg_dir method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lg_dir</h3>
+<p>The DB_ENV-&gt;get_lg_dir method returns the log directory.</p>
+<p>The DB_ENV-&gt;get_lg_dir method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lg_dir method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirp</b><dd>
+The DB_ENV-&gt;get_lg_dir method returns a reference to the
+log directory in <b>dirp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lg_max.html b/db/docs/api_c/env_set_lg_max.html
index 4625db434..b22b0a5bf 100644
--- a/db/docs/api_c/env_set_lg_max.html
+++ b/db/docs/api_c/env_set_lg_max.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_max.so,v 10.20 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_max.so,v 10.40 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lg_max</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lg_max</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lg_max</h1>
+<h3>DB_ENV-&gt;set_lg_max</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,47 +24,79 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lg_max(DB_ENV *dbenv, u_int32_t lg_max);
+DB_ENV-&gt;set_lg_max(DB_ENV *dbenv, u_int32_t lg_max);
+<p>
+int
+DB_ENV-&gt;get_lg_max(DB_ENV *dbenv, u_int32_t *lg_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum size of a single file in the log, in bytes. Because
-<a href="../api_c/db_lsn.html">DB_LSN</a> file offsets are unsigned 4-byte values, the set value may
-not be larger than the maximum unsigned 4-byte value. By default, or if
-the value is set to 0, a size of 10MB is used.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_max</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum size of a single file in the log, in bytes. By default,
+or if the <b>lg_max</b> parameter is set to 0, a size of 10MB is used.
+Because <a href="../api_c/lsn_class.html">DB_LSN</a> file offsets are unsigned four-byte values, the
+set value may not be larger than the maximum unsigned four-byte value.
+The size of the log file must be at least four times the size of the
+in-memory log buffer (see <a href="../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a>).</p>
<p>See <a href="../ref/log/limits.html">Log File Limits</a>
-for more information.
-<p>The DBENV-&gt;set_lg_max interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lg_max function returns a non-zero error value on failure and 0 on success.
+for more information.</p>
<p>The database environment's log file size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_max", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lg_max method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lg_max method may be called at any time during the life of the
+application.</p>
+If no size is specified by the application, the size last specified for
+the database region will be used, or if no database region previously
+existed, the default will be used.
+<p>The DB_ENV-&gt;set_lg_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_max</b><dd>
+The <b>lg_max</b> parameter is the size of a single log file, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lg_max method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
-<p>The specified log file size was too large.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called;
+the size of the log file is less than four times the size of the in-memory
+log buffer;
+The specified log file size was too large; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lg_max</h3>
+<p>The DB_ENV-&gt;get_lg_max method returns the maximum log file size.</p>
+<p>The DB_ENV-&gt;get_lg_max method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lg_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_maxp</b><dd>
+The DB_ENV-&gt;get_lg_max method returns the
+maximum log file size in <b>lg_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lg_regionmax.html b/db/docs/api_c/env_set_lg_regionmax.html
index 322fdd830..e6580307d 100644
--- a/db/docs/api_c/env_set_lg_regionmax.html
+++ b/db/docs/api_c/env_set_lg_regionmax.html
@@ -1,20 +1,22 @@
-<!--Id: env_set_lg_regionmax.so,v 10.3 2001/05/01 14:23:08 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_regionmax.so,v 10.19 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lg_regionmax</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lg_regionmax</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lg_regionmax</h1>
+<h3>DB_ENV-&gt;set_lg_regionmax</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,52 +24,75 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lg_regionmax(DB_ENV *dbenv, u_int32_t lg_regionmax);
+DB_ENV-&gt;set_lg_regionmax(DB_ENV *dbenv, u_int32_t lg_regionmax);
+<p>
+int
+DB_ENV-&gt;get_lg_regionmax(DB_ENV *dbenv, u_int32_t *lg_regionmaxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the underlying logging subsystem region, in bytes. By
-default, or if the value is set to 0, the base region size is 60KB.
-The log region is used to store filenames, and so may need to be
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lg_regionmax</h3>
+<a name="3"><!--meow--></a>
+<p>Set the size of the underlying logging area of the Berkeley DB environment,
+in bytes. By default, or if the value is set to 0, the default size is
+60KB. The log region is used to store filenames, and so may need to be
increased in size if a large number of files will be opened and
-registered with the specified Berkeley DB environment's log manager.
-<p>The DBENV-&gt;set_lg_regionmax interface may be used only to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lg_regionmax function returns a non-zero error value on failure and 0 on success.
+registered with the specified Berkeley DB environment's log manager.</p>
<p>The database environment's log region size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_regionmax", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p>The DBENV-&gt;set_lg_regionmax function may fail and return a non-zero error for the following conditions:
+before that time.</p>
+<p>The DB_ENV-&gt;set_lg_regionmax method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lg_regionmax method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lg_regionmax
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lg_regionmax method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_regionmax</b><dd>
+The <b>lg_regionmax</b> parameter is the size of the logging area in
+the Berkeley DB environment, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lg_regionmax method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DBENV-&gt;set_lg_regionmax function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;set_lg_regionmax function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/env_set_lg_regionmax.html">DBENV-&gt;set_lg_regionmax</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>,
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lg_regionmax</h3>
+<p>The DB_ENV-&gt;get_lg_regionmax method returns the size of the underlying logging subsystem region.</p>
+<p>The DB_ENV-&gt;get_lg_regionmax method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lg_regionmax method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_regionmaxp</b><dd>
+The DB_ENV-&gt;get_lg_regionmax method returns the
+size of the underlying logging subsystem region in <b>lg_regionmaxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lk_conflicts.html b/db/docs/api_c/env_set_lk_conflicts.html
index 689464736..340c0997b 100644
--- a/db/docs/api_c/env_set_lk_conflicts.html
+++ b/db/docs/api_c/env_set_lk_conflicts.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_conflicts.so,v 10.22 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_conflicts.so,v 10.41 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lk_conflicts</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lk_conflicts</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lk_conflicts</h1>
+<h3>DB_ENV-&gt;set_lk_conflicts</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,48 +24,82 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lk_conflicts(DB_ENV *dbenv,
+DB_ENV-&gt;set_lk_conflicts(DB_ENV *dbenv,
u_int8_t *conflicts, int nmodes);
+<p>
+int
+DB_ENV-&gt;get_lk_conflicts(DB_ENV *dbenv,
+ const u_int8_t **lk_conflictsp, int *lk_modesp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the locking conflicts matrix.
-The <b>conflicts</b> argument
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_conflicts</h3>
+<a name="3"><!--meow--></a>
+<p>Set the locking conflicts matrix.</p>
+<p>If DB_ENV-&gt;set_lk_conflicts is never called, a standard conflicts
+array is used; see <a href="../ref/lock/stdmode.html">Standard Lock
+Modes</a> for more information.</p>
+<p>The DB_ENV-&gt;set_lk_conflicts method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lk_conflicts method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lk_conflicts
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lk_conflicts method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>conflicts</b><dd>
+The <b>conflicts</b> parameter is the new locking conflicts matrix.
+The <b>conflicts</b> parameter
is an <b>nmodes</b> by <b>nmodes</b> array.
-A non-0 value for the array element:
-<p><blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote>
-<p>indicates that requested_mode and held_mode conflict. The
-<i>not-granted</i> mode must be represented by 0.
-<p>If no <b>conflicts</b> value is specified, the conflicts array
-<b>db_rw_conflicts</b> is used; see <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for a description of that array.
-<p>The DBENV-&gt;set_lk_conflicts interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lk_conflicts function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+A non-0 value for the array element indicates that requested_mode and
+held_mode conflict:
+<blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote>
+<p>The <i>not-granted</i> mode must be represented by 0.</p>
+<p><dt><b>nmodes</b><dd>
+The <b>nmodes</b> parameter is the size of the lock conflicts matrix.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lk_conflicts method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>No memory was available to copy the conflicts array.
+<p><dt>ENOMEM<dd>The conflicts array could not be copied.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: dbenv_get_lk_conflicts</h3>
+<p>The DB_ENV-&gt;get_lk_conflicts method returns the current conflicts array.</p>
+<p>The DB_ENV-&gt;get_lk_conflicts method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lk_conflicts method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_conflictsp</b><dd>
+The <b>lk_conflictsp</b> parameter references memory into which
+a pointer to the current conflicts array is copied.
+<p><dt><b>lk_modesp</b><dd>
+The <b>lk_modesp</b> parameter references memory into which
+ the size of the current conflicts array is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lk_detect.html b/db/docs/api_c/env_set_lk_detect.html
index 460651a0d..21b020719 100644
--- a/db/docs/api_c/env_set_lk_detect.html
+++ b/db/docs/api_c/env_set_lk_detect.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_detect.so,v 10.19 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_detect.so,v 10.44 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lk_detect</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lk_detect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lk_detect</h1>
+<h3>DB_ENV-&gt;set_lk_detect</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,51 +24,93 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lk_detect(DB_ENV *dbenv, u_int32_t detect);
+DB_ENV-&gt;set_lk_detect(DB_ENV *dbenv, u_int32_t detect);
+<p>
+int
+DB_ENV-&gt;get_lk_detect(DB_ENV *dbenv, u_int32_t *lk_detectp);
</pre></h3>
-<h1>Description</h1>
-<p>Set if the deadlock detector is to be run whenever a lock conflict occurs,
-and specify which transaction should be aborted in the case of a deadlock.
-The specified value must be one of the following list:
-<p><dl compact>
-<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use the default policy as specified by <a href="../utility/db_deadlock.html">db_deadlock</a>.
-<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Abort the oldest transaction.
-<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Abort a random transaction involved in the deadlock.
-<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Abort the youngest transaction.
-</dl>
-<p>The DBENV-&gt;set_lk_detect interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lk_detect function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_detect</h3>
+<a name="3"><!--meow--></a>
+<p>Set if the deadlock detector is to be run whenever a lock conflict
+occurs, and specify what lock request(s) should be rejected. As
+transactions acquire locks on behalf of a single locker ID, rejecting a
+lock request associated with a transaction normally requires the
+transaction be aborted.</p>
<p>The database environment's deadlock detector configuration may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_detect", one or more whitespace characters,
-and the interface <b>detect</b> argument as a string, for example,
-"set_lk_detect DB_LOCK_OLDEST". Because the <b>DB_CONFIG</b> file is read when the database
+and the method <b>detect</b> parameter as a string; for example,
+"set_lk_detect DB_LOCK_OLDEST".
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lk_detect method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lk_detect method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lk_detect
+must be consistent with the existing environment or an error will be
+returned.
+</p>
+<p>The DB_ENV-&gt;set_lk_detect method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>detect</b><dd>
+The <b>detect</b> parameter configures the deadlock detector. The
+specified value must be one of the following list:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use whatever lock policy was specified when the database environment
+was created. If no lock policy has yet been specified, set the lock
+policy to DB_LOCK_RANDOM.
+<dt><a name="DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a><dd>Reject lock requests which have timed out. No other deadlock detection
+is performed.
+<dt><a name="DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a><dd>Reject the lock request for the locker ID with the greatest number of
+locks.
+<dt><a name="DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a><dd>Reject the lock request for the locker ID with the fewest number of
+locks.
+<dt><a name="DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a><dd>Reject the lock request for the locker ID with the fewest number of
+write locks.
+<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Reject the lock request for the oldest locker ID.
+<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Reject the lock request for a random locker ID.
+<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Reject the lock request for the youngest locker ID.
+</dl>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lk_detect method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lk_detect</h3>
+<p>The DB_ENV-&gt;get_lk_detect method returns the deadlock detector configuration.</p>
+<p>The DB_ENV-&gt;get_lk_detect method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lk_detect method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_detectp</b><dd>
+The DB_ENV-&gt;get_lk_detect method returns the
+deadlock detector configuration in <b>lk_detectp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lk_max_lockers.html b/db/docs/api_c/env_set_lk_max_lockers.html
index e41a943fd..7c25bda8b 100644
--- a/db/docs/api_c/env_set_lk_max_lockers.html
+++ b/db/docs/api_c/env_set_lk_max_lockers.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_lockers.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_lockers.so,v 1.20 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lk_max_lockers</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lk_max_lockers</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lk_max_lockers</h1>
+<h3>DB_ENV-&gt;set_lk_max_lockers</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,47 +24,75 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lk_max_lockers(DB_ENV *dbenv, u_int32_t max);
+DB_ENV-&gt;set_lk_max_lockers(DB_ENV *dbenv, u_int32_t max);
+<p>
+int
+DB_ENV-&gt;get_lk_max_lockers(DB_ENV *dbenv, u_int32_t *lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneous locking entities supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_c/env_open.html">DBENV-&gt;open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DBENV-&gt;set_lk_max_lockers interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lk_max_lockers function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_max_lockers</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locking entities supported by the Berkeley DB
+environment. This value is used by <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> to estimate how
+much space to allocate for various lock-table data structures. The
+default value is 1000 lockers. For specific information on configuring
+the size of the lock subsystem, see <a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.</p>
<p>The database environment's maximum number of lockers may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_lockers", one or more whitespace characters,
-and the number of lockers. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of lockers.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lk_max_lockers method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lk_max_lockers method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lk_max_lockers
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lk_max_lockers method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number simultaneous locking
+entities supported by the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lk_max_lockers method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lk_max_lockers</h3>
+<p>The DB_ENV-&gt;get_lk_max_lockers method returns the maximum number of lockers.</p>
+<p>The DB_ENV-&gt;get_lk_max_lockers method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lk_max_lockers method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DB_ENV-&gt;get_lk_max_lockers method returns the
+maximum number of lockers in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lk_max_locks.html b/db/docs/api_c/env_set_lk_max_locks.html
index a908b288f..3cffd6741 100644
--- a/db/docs/api_c/env_set_lk_max_locks.html
+++ b/db/docs/api_c/env_set_lk_max_locks.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_locks.so,v 10.1 2000/12/21 19:11:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_locks.so,v 10.19 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lk_max_locks</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lk_max_locks</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lk_max_locks</h1>
+<h3>DB_ENV-&gt;set_lk_max_locks</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,46 +24,76 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lk_max_locks(DB_ENV *dbenv, u_int32_t max);
+DB_ENV-&gt;set_lk_max_locks(DB_ENV *dbenv, u_int32_t max);
+<p>
+int
+DB_ENV-&gt;get_lk_max_locks(DB_ENV *dbenv, u_int32_t *lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of locks supported by the Berkeley DB lock subsystem.
-This value is used by <a href="../api_c/env_open.html">DBENV-&gt;open</a> to estimate how much space to
-allocate for various lock-table data structures. For specific
-information on configuring the size of the lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DBENV-&gt;set_lk_max_locks interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lk_max_locks function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_max_locks</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locks supported by the Berkeley DB environment.
+This value is used by <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> to estimate how much space to
+allocate for various lock-table data structures. The default value is
+1000 locks. For specific information on configuring the size of the lock
+subsystem, see <a href="../ref/lock/max.html">Configuring locking:
+sizing the system</a>.</p>
<p>The database environment's maximum number of locks may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_locks", one or more whitespace characters,
-and the number of locks. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of locks.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lk_max_locks method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lk_max_locks method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lk_max_locks
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lk_max_locks method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number of locks supported by
+the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lk_max_locks method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_max_locks</h3>
+<p>The DB_ENV-&gt;set_lk_max_locks method returns the maximum number of locks.</p>
+<p>The DB_ENV-&gt;set_lk_max_locks method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_lk_max_locks method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DB_ENV-&gt;set_lk_max_locks method returns the
+maximum number of locks in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_lk_max_objects.html b/db/docs/api_c/env_set_lk_max_objects.html
index 8fba15876..62f0b37ce 100644
--- a/db/docs/api_c/env_set_lk_max_objects.html
+++ b/db/docs/api_c/env_set_lk_max_objects.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_objects.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_objects.so,v 1.20 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_lk_max_objects</title>
+<title>Berkeley DB: DB_ENV-&gt;set_lk_max_objects</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_lk_max_objects</h1>
+<h3>DB_ENV-&gt;set_lk_max_objects</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,47 +24,75 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_lk_max_objects(DB_ENV *dbenv, u_int32_t max);
+DB_ENV-&gt;set_lk_max_objects(DB_ENV *dbenv, u_int32_t max);
+<p>
+int
+DB_ENV-&gt;get_lk_max_objects(DB_ENV *dbenv, u_int32_t *lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneously locked objects supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_c/env_open.html">DBENV-&gt;open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DBENV-&gt;set_lk_max_objects interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_lk_max_objects function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_lk_max_objects</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locked objects supported by the Berkeley DB
+environment. This value is used by <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> to estimate how
+much space to allocate for various lock-table data structures. The
+default value is 1000 objects. For specific information on configuring
+the size of the lock subsystem, see <a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.</p>
<p>The database environment's maximum number of objects may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_objects", one or more whitespace characters,
-and the number of objects. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of objects.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_lk_max_objects method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_lk_max_objects method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_lk_max_objects
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_lk_max_objects method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number of locked objects
+supported by the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_lk_max_objects method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_lk_max_objects</h3>
+<p>The DB_ENV-&gt;get_lk_max_objects method returns the maximum number of locked objects.</p>
+<p>The DB_ENV-&gt;get_lk_max_objects method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_lk_max_objects method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DB_ENV-&gt;get_lk_max_objects method returns the
+maximum number of locked objects in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_mp_mmapsize.html b/db/docs/api_c/env_set_mp_mmapsize.html
index 3f87a140a..fc117ac38 100644
--- a/db/docs/api_c/env_set_mp_mmapsize.html
+++ b/db/docs/api_c/env_set_mp_mmapsize.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_mp_mmapsize.so,v 10.18 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_mp_mmapsize.so,v 10.36 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_mp_mmapsize</title>
+<title>Berkeley DB: DB_ENV-&gt;set_mp_mmapsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_mp_mmapsize</h1>
+<h3>DB_ENV-&gt;set_mp_mmapsize</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,50 +24,78 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_mp_mmapsize(DB_ENV *dbenv, size_t mp_mmapsize);
+DB_ENV-&gt;set_mp_mmapsize(DB_ENV *dbenv, size_t mp_mmapsize);
+<p>
+int
+DB_ENV-&gt;get_mp_mmapsize(DB_ENV *dbenv, size_t *mp_mmapsizep);
</pre></h3>
-<h1>Description</h1>
-<p>Files that are opened read-only in the pool (and that satisfy a few other
-criteria) are, by default, mapped into the process address space instead
-of being copied into the local cache. This can result in better-than-usual
-performance, as available virtual memory is normally much larger than the
-local cache, and page faults are faster than page copying on many systems.
-However, in the presence of limited virtual memory it can cause resource
-starvation, and in the presence of large databases, it can result in immense
-process sizes.
-<p>Set the maximum file size, in bytes, for a file to be mapped into the
-process address space. If no value is specified, it defaults to 10MB.
-<p>The DBENV-&gt;set_mp_mmapsize interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_mp_mmapsize function returns a non-zero error value on failure and 0 on success.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_mp_mmapsize</h3>
+<a name="3"><!--meow--></a>
+<p>Files that are opened read-only in the pool (and that satisfy a few
+other criteria) are, by default, mapped into the process address space
+instead of being copied into the local cache. This can result in
+better-than-usual performance because available virtual memory is
+normally much larger than the local cache, and page faults are faster
+than page copying on many systems. However, it can cause resource
+starvation in the presence of limited virtual memory, and it can result
+in immense process sizes in the presence of large databases.</p>
+<p>The DB_ENV-&gt;get_mp_mmapsize method sets the maximum file size, in bytes,
+for a file to be mapped into the process address space. If no value is
+specified, it defaults to 10MB.</p>
<p>The database environment's maximum mapped file size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_mp_mmapsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_mp_mmapsize method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_mp_mmapsize method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_mp_mmapsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>mp_mmapsize</b><dd>
+The <b>mp_mmapsize</b> parameter is the maximum file size, in bytes,
+for a file to be mapped into the process address space.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_mp_mmapsize method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_mp_mmapsize</h3>
+<p>The DB_ENV-&gt;get_mp_mmapsize method returns the maximum file map size.</p>
+<p>The DB_ENV-&gt;get_mp_mmapsize method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_mp_mmapsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>mp_mmapsizep</b><dd>
+The DB_ENV-&gt;get_mp_mmapsize method returns the
+maximum file map size in <b>mp_mmapsizep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_paniccall.html b/db/docs/api_c/env_set_paniccall.html
index a9d58a80b..1f80b4846 100644
--- a/db/docs/api_c/env_set_paniccall.html
+++ b/db/docs/api_c/env_set_paniccall.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_paniccall.so,v 10.14 2000/07/09 19:12:56 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_paniccall.so,v 10.36 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_paniccall</title>
+<title>Berkeley DB: DB_ENV-&gt;set_paniccall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_paniccall</h1>
+<h3>DB_ENV-&gt;set_paniccall</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,45 +24,48 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_paniccall(DB_ENV *dbenv,
- void (*paniccall)(DB_ENV *, int errval));
+DB_ENV-&gt;set_paniccall(DB_ENV *dbenv,
+ void (*db_panic_fcn)(DB_ENV *dbenv, int errval));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_paniccall</h3>
<p>Errors can occur in the Berkeley DB library where the only solution is to shut
-down the application and run recovery. (For example, if Berkeley DB is unable
-to write log records to disk because there is insufficient disk space.)
-In these cases, the value <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is returned by Berkeley DB.
-<p>In these cases, it is also often simpler to shut down the application when
-such errors occur rather than attempting to gracefully return up the stack.
-The DBENV-&gt;set_paniccall function is used to specify a function to be called when
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned from a Berkeley DB method. When
-called, the <b>dbenv</b> argument will be a reference to the current
-environment, and the <b>errval</b> argument is the error value that would
-have been returned to the calling function.
-<p>The DBENV-&gt;set_paniccall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DBENV-&gt;set_paniccall function returns a non-zero error value on failure and 0 on success.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+down the application and run recovery (for example, if Berkeley DB is unable
+to allocate heap memory). In such cases, the Berkeley DB methods will
+return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.
+It is often easier to simply exit the application when such errors occur
+rather than gracefully return up the stack. The DB_ENV-&gt;set_paniccall method
+specifies a function to be called when
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned
+from a Berkeley DB method.</p>
+<p>The DB_ENV-&gt;set_paniccall method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_paniccall method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_panic_fcn</b><dd>
+The <b>db_panic_fcn</b> parameter is the application-specified function
+called in the case of a database environment panic. The function takes
+two arguments:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>errval</b><dd>The <b>errval</b> parameter is the error value that would have been
+returned to the caller if <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> were not going to be
+returned instead.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_rpc_server.html b/db/docs/api_c/env_set_rpc_server.html
index 17f0afe31..e58437174 100644
--- a/db/docs/api_c/env_set_rpc_server.html
+++ b/db/docs/api_c/env_set_rpc_server.html
@@ -1,20 +1,22 @@
-<!--"@(#)env_set_rpc_server.so 10.1 (Sleepycat) 8/25/99"-->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_rpc_server.so,v 10.28 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_rpc_server</title>
+<title>Berkeley DB: DB_ENV-&gt;set_rpc_server</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_rpc_server</h1>
+<h3>DB_ENV-&gt;set_rpc_server</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,22 +24,46 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_rpc_server(DB_ENV *dbenv, CLIENT *client, char *host,
+DB_ENV-&gt;set_rpc_server(DB_ENV *dbenv, CLIENT *client, char *host,
long cl_timeout, long sv_timeout, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>Establishes a connection for this <b>dbenv</b> to a RPC server. If
-the <b>client</b> argument is NULL, this call creates a connection to
-the Berkeley DB server on the indicated hostname and sets up a channel for
-communication.
-If the <b>client</b> channel has been provided by the
-application then Berkeley DB will use it as its connection and the <b>host</b> and
-<b>cl_timeout</b> fields are ignored.
-<p>The <b>cl_timeout</b> argument specifies the number of seconds the client
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_rpc_server</h3>
+<p>Establishes a connection for this <b>dbenv</b> to a RPC server.</p>
+<p>When the DB_ENV-&gt;set_rpc_server method has been called, subsequent calls
+to Berkeley DB library interfaces may return or throw exceptions encapsulating
+<a name="DB_NOSERVER">DB_NOSERVER</a>, <a name="DB_NOSERVER_ID">DB_NOSERVER_ID</a>, or
+<a name="DB_NOSERVER_HOME">DB_NOSERVER_HOME</a>.</p>
+<p>The DB_ENV-&gt;set_rpc_server method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_rpc_server method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+</p>
+<p>The DB_ENV-&gt;set_rpc_server method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cl_timeout</b><dd>
+<a name="3"><!--meow--></a>
+The <b>cl_timeout</b> parameter specifies the number of seconds the client
should wait for results to come back from the server. Once the timeout
has expired on any communication with the server, DB_NOSERVER will
be returned. If this value is zero, a default timeout is used.
-<p>The <b>sv_timeout</b> argument specifies the number of seconds the server
+<p><dt><b>client</b><dd>
+If the <b>client</b> channel has been provided by the application then
+Berkeley DB will use it as its connection and the <b>host</b> and
+<b>cl_timeout</b> fields are ignored.
+<p><dt><b>host</b><dd>
+The <b>host</b> parameter is the host to which the Berkeley DB server will
+connect and create a channel for communication.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+<a name="4"><!--meow--></a>
+<p><dt><b>sv_timeout</b><dd>
+The <b>sv_timeout</b> parameter specifies the number of seconds the server
should allow a client connection to remain idle before assuming that the
client is gone. Once that timeout has been reached, the server releases
all resources associated with that client connection. Subsequent attempts
@@ -46,52 +72,23 @@ DB_NOSERVER_ID, indicating that an invalid identifier has been
given to the server. This value can be considered a hint to the server.
The server may alter this value based on its own policies or allowed
values. If this value is zero, a default timeout is used.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>When the DBENV-&gt;set_rpc_server function has been called, any subsequent calls
-to Berkeley DB library interfaces may return either <a name="DB_NOSERVER">DB_NOSERVER</a> or
-<a name="DB_NOSERVER_ID">DB_NOSERVER_ID</a>.
-<p>The DBENV-&gt;set_rpc_server function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DBENV-&gt;set_rpc_server function may fail and return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_rpc_server method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DBENV-&gt;set_rpc_server function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DBENV-&gt;set_rpc_server function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_err.html">DBENV-&gt;err</a>, <a href="../api_c/env_err.html">DBENV-&gt;errx</a>
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_feedback.html">DBENV-&gt;set_feedback</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_pageyield.html">db_env_set_pageyield</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-<a href="../api_c/env_set_panicstate.html">db_env_set_panicstate</a>,
-<a href="../api_c/env_set_rec_init.html">DBENV-&gt;set_recovery_init</a>,
-<a href="../api_c/env_set_rpc_server.html">DBENV-&gt;set_rpc_server</a>,
-<a href="../api_c/env_set_region_init.html">db_env_set_region_init</a>,
-<a href="../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a>,
-<a href="../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a>,
-<a href="../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a>,
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>
-and
-<a href="../api_c/env_version.html">db_version</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_shm_key.html b/db/docs/api_c/env_set_shm_key.html
index 8de32ed84..936029a12 100644
--- a/db/docs/api_c/env_set_shm_key.html
+++ b/db/docs/api_c/env_set_shm_key.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_shm_key.so,v 10.5 2000/08/09 15:45:52 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_shm_key.so,v 10.25 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_shm_key</title>
+<title>Berkeley DB: DB_ENV-&gt;set_shm_key</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_shm_key</h1>
+<h3>DB_ENV-&gt;set_shm_key</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,66 +24,93 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_shm_key(DB_ENV *dbenv, long shm_key);
+DB_ENV-&gt;set_shm_key(DB_ENV *dbenv, long shm_key);
+<p>
+int
+DB_ENV-&gt;get_shm_key(DB_ENV *dbenv, long *shm_keyp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_shm_key</h3>
+<a name="3"><!--meow--></a>
<p>Specify a base segment ID for Berkeley DB environment shared memory regions
created in system memory on VxWorks or systems supporting X/Open-style
-shared memory interfaces, e.g., UNIX systems supporting
-<b>shmget</b>(2) and related System V IPC interfaces.
+shared memory interfaces; for example, UNIX systems supporting
+<b>shmget</b>(2) and related System V IPC interfaces.</p>
<p>This base segment ID will be used when Berkeley DB shared memory regions are
first created. It will be incremented a small integer value each time
-a new shared memory region is created, that is, if the base ID is 35,
-the first shared memory region created will have a segment ID of 35 and
-the next one a segment ID between 36 and 40 or so. A Berkeley DB environment
-always creates a master shared memory region, plus an additional shared
-memory region for each of the subsystems supported by the environment
-(locking, logging, memory pool and transaction), plus an additional
-shared memory region for each additional memory pool cache that is
-supported. Already existing regions with the same segment IDs will be
-removed. See <a href="../ref/env/region.html">Shared Memory Regions</a>
-for more information.
-<p>The intent behind this interface is two-fold: without it, applications
+a new shared memory region is created; that is, if the base ID is 35,
+the first shared memory region created will have a segment ID of 35,
+and the next one will have a segment ID between 36 and 40 or so. A
+Berkeley DB environment always creates a master shared memory region; an
+additional shared memory region for each of the subsystems supported by
+the environment (Locking, Logging, Memory Pool and Transaction); plus
+an additional shared memory region for each additional memory pool cache
+that is supported. Already existing regions with the same segment IDs
+will be removed. See <a href="../ref/env/region.html">Shared Memory
+Regions</a> for more information.</p>
+<p>The intent behind this method is two-fold: without it, applications
have no way to ensure that two Berkeley DB applications don't attempt to use
the same segment IDs when creating different Berkeley DB environments. In
addition, by using the same segment IDs each time the environment is
created, previously created segments will be removed, and the set of
-segments on the system will not grow without bound.
-<p>The DBENV-&gt;set_shm_key interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_shm_key function returns a non-zero error value on failure and 0 on success.
+segments on the system will not grow without bound.</p>
<p>The database environment's base segment ID may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_shm_key", one or more whitespace characters,
-and the ID. Because the <b>DB_CONFIG</b> file is read when the database
+and the ID.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_shm_key method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_shm_key method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_shm_key
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DB_ENV-&gt;set_shm_key method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>shm_key</b><dd>
+The <b>shm_key</b> parameter is the base segment ID for the database
+environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_shm_key method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_shm_key</h3>
+<p>The DB_ENV-&gt;get_shm_key method returns the base segment ID.</p>
+<p>The DB_ENV-&gt;get_shm_key method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_shm_key method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>shm_keyp</b><dd>
+The DB_ENV-&gt;get_shm_key method returns the
+base segment ID in <b>shm_keyp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_tas_spins.html b/db/docs/api_c/env_set_tas_spins.html
index 633dcda07..a27726ef1 100644
--- a/db/docs/api_c/env_set_tas_spins.html
+++ b/db/docs/api_c/env_set_tas_spins.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tas_spins.so,v 10.9 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tas_spins.so,v 10.26 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: db_env_set_tas_spins</title>
+<title>Berkeley DB: DB_ENV-&gt;set_tas_spins</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_tas_spins</h1>
+<h3>DB_ENV-&gt;set_tas_spins</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,49 +24,70 @@
#include &lt;db.h&gt;
<p>
int
-db_env_set_tas_spins(u_int32_t tas_spins);
+DB_ENV-&gt;set_tas_spins(DB_ENV *dbenv, u_int32_t tas_spins);
+<p>
+int
+DB_ENV-&gt;get_tas_spins(DB_ENV *dbenv, u_int32_t *tas_spinsp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_tas_spins</h3>
+<a name="3"><!--meow--></a>
<p>Specify that test-and-set mutexes should spin <b>tas_spins</b> times
without blocking. The value defaults to 1 on uniprocessor systems and
-to 50 times the number of processors on multiprocessor systems.
-<p>The db_env_set_tas_spins interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_tas_spins interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_tas_spins function returns a non-zero error value on failure and 0 on success.
+to 50 times the number of processors on multiprocessor systems.</p>
<p>The database environment's test-and-set spin count may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tas_spins", one or more whitespace characters,
-and the number of spins. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of spins.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_tas_spins method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_tas_spins method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tas_spins</b><dd>
+The <b>tas_spins</b> parameter is the number of spins test-and-set
+mutexes should execute before blocking.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_tas_spins method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_tas_spins</h3>
+<p>The DB_ENV-&gt;get_tas_spins method returns the test-and-set spin count.</p>
+<p>The DB_ENV-&gt;get_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_tas_spins method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tas_spinsp</b><dd>
+The DB_ENV-&gt;get_tas_spins method returns the
+test-and-set spin count in <b>tas_spinsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_timeout.html b/db/docs/api_c/env_set_timeout.html
index 46fb578f9..d838bf4ba 100644
--- a/db/docs/api_c/env_set_timeout.html
+++ b/db/docs/api_c/env_set_timeout.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_timeout.so,v 10.8 2002/08/29 03:24:42 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_timeout.so,v 10.21 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;set_timeout</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;set_timeout</h1>
+<h3>DB_ENV-&gt;set_timeout</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,29 +25,15 @@
<p>
int
DB_ENV-&gt;set_timeout(DB_ENV *dbenv, db_timeout_t timeout, u_int32_t flags);
+<p>
+int
+DB_ENV-&gt;get_timeout(DB_ENV *dbenv, db_timeout_t *timeoutp, u_int32_t flag);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_timeout</h3>
+<a name="3"><!--meow--></a>
<p>The DB_ENV-&gt;set_timeout method sets timeout values for locks or
-transactions in the database environment. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this database environment.
-<p>The database environment's transaction timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_txn_timeout", one or more whitespace characters,
-and the transaction timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for transactions in this database environment.
-<p>The database environment's lock timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lock_timeout", one or more whitespace characters,
-and the lock timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-</dl>
+transactions in the database environment.</p>
<p>Timeouts are checked whenever a thread of control blocks on a lock or
when deadlock detection is performed. (In the case of
DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
@@ -56,32 +43,82 @@ transaction. In either case, it may be a lock requested by the database
access methods underlying the application.) As timeouts are only
checked when the lock request first blocks or when deadlock detection
is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
+detection is performed.</p>
<p>Timeout values specified for the database environment may be overridden
on a per-lock or per-transaction basis. See <a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> and
-<a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a> for more information.
+<a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a> for more information.</p>
<p>The DB_ENV-&gt;set_timeout method configures a database environment, not only operations
-performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.
-<p>The DB_ENV-&gt;set_timeout interface may be called at any time during the life of
-the application.
-<p>The DB_ENV-&gt;set_timeout method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;set_timeout method may fail and return a non-zero error for the following conditions:
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_timeout method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this database environment.
+<p>The database environment's lock timeout value may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_lock_timeout", one or more whitespace characters,
+and the lock timeout value.
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for transactions in this database environment.
+<p>The database environment's transaction timeout value may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_txn_timeout", one or more whitespace characters,
+and the transaction timeout value.
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+</dl>
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter is the timeout value. It must be specified
+as an unsigned 32-bit number of microseconds, limiting the maximum timeout
+to roughly 71 minutes.
</dl>
-<p>The DB_ENV-&gt;set_timeout method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;set_timeout method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_timeout method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_timeout</h3>
+<p>The DB_ENV-&gt;get_timeout method returns a timeout value, in microseconds.</p>
+<p>The DB_ENV-&gt;get_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_timeout method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flag</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
+<p><dl compact>
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Return the timeout value for locks in this database environment.
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Return the timeout value for transactions in this database environment.
+</dl>
+<p><dt><b>timeoutp</b><dd>
+The <b>timeoutp</b> parameter references memory into which
+ the timeout value of the specified <b>flag</b> parameter is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_tmp_dir.html b/db/docs/api_c/env_set_tmp_dir.html
index 05f3bed5d..85ac6a945 100644
--- a/db/docs/api_c/env_set_tmp_dir.html
+++ b/db/docs/api_c/env_set_tmp_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tmp_dir.so,v 10.3 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tmp_dir.so,v 10.22 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_tmp_dir</title>
+<title>Berkeley DB: DB_ENV-&gt;set_tmp_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_tmp_dir</h1>
+<h3>DB_ENV-&gt;set_tmp_dir</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,17 +24,23 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_tmp_dir(DB_ENV *dbenv, const char *dir);
+DB_ENV-&gt;set_tmp_dir(DB_ENV *dbenv, const char *dir);
+<p>
+int
+DB_ENV-&gt;get_tmp_dir(DB_ENV *dbenv, const char **dirp);
</pre></h3>
-<h1>Description</h1>
-<p>The path of a directory to be used as the location of temporary files.
-The files created to back in-memory access method databases will be
-created relative to this path. These temporary files can be quite large,
-depending on the size of the database.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_tmp_dir</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>Specify the path of a directory to be used as the location of temporary
+files. The files created to back in-memory access method databases will
+be created relative to this path. These temporary files can be quite
+large, depending on the size of the database.</p>
<p>If no directories are specified, the following alternatives are checked
in the specified order. The first existing directory path is used for
-all temporary files.
-<p><ol>
+all temporary files.</p>
+<ol>
<p><li>The value of the environment variable <b>TMPDIR</b>.
<li>The value of the environment variable <b>TEMP</b>.
<li>The value of the environment variable <b>TMP</b>.
@@ -47,43 +55,65 @@ all temporary files.
</ol>
<p>Note: environment variables are only checked if one of the
<a href="../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> or <a href="../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags were
-specified.
-<p>Note: the GetTempPath interface is only checked on Win/32 platforms.
-<p>The DBENV-&gt;set_tmp_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_tmp_dir function returns a non-zero error value on failure and 0 on success.
+specified.</p>
+<p>Note: the GetTempPath interface is only checked on Win/32 platforms.</p>
<p>The database environment's temporary file directory may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tmp_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
+and the directory name.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_tmp_dir method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_tmp_dir method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_tmp_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DB_ENV-&gt;set_tmp_dir method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is the directory to be used to store temporary
+files.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_tmp_dir method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_tmp_dir</h3>
+<p>The DB_ENV-&gt;get_tmp_dir method returns the database environment temporary file directory.</p>
+<p>The DB_ENV-&gt;get_tmp_dir method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_tmp_dir method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirp</b><dd>
+The DB_ENV-&gt;get_tmp_dir method returns a reference to the
+database environment temporary file directory in <b>dirp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_tx_max.html b/db/docs/api_c/env_set_tx_max.html
index 823289552..d366037f9 100644
--- a/db/docs/api_c/env_set_tx_max.html
+++ b/db/docs/api_c/env_set_tx_max.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tx_max.so,v 10.21 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_max.so,v 10.42 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_tx_max</title>
+<title>Berkeley DB: DB_ENV-&gt;set_tx_max</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_tx_max</h1>
+<h3>DB_ENV-&gt;set_tx_max</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,46 +24,80 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_tx_max(DB_ENV *dbenv, u_int32_t tx_max);
+DB_ENV-&gt;set_tx_max(DB_ENV *dbenv, u_int32_t max);
+<p>
+int
+DB_ENV-&gt;get_tx_max(DB_ENV *dbenv, u_int32_t *tx_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of active transactions that are supported by the
-environment. This value bounds the size of backing shared memory regions.
-Note that child transactions must be counted as active until their
-ultimate parent commits or aborts.
-<p>When there are more than the specified number of concurrent transactions,
-calls to <a href="../api_c/txn_begin.html">txn_begin</a> will fail (until some active transactions
-complete). If no value is specified, a default value of 20 is used.
-<p>The DBENV-&gt;set_tx_max interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_tx_max function returns a non-zero error value on failure and 0 on success.
-<p>The database environment's maximum number of active transactions may also be set using the environment's
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_tx_max</h3>
+<a name="3"><!--meow--></a>
+<p>Configure the Berkeley DB database environment to support at least <b>max</b>
+active transactions. This value bounds the size of the memory allocated
+for transactions. Child transactions are counted as active until they
+either commit or abort.</p>
+<p>When all of the memory available in the database environment for
+transactions is in use, calls to <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> will fail (until some
+active transactions complete). If this interface is never called,
+the database environment is configured to support at least 20 active
+transactions.</p>
+<p>The database environment's number of active transactions may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tx_max", one or more whitespace characters,
-and the number of transactions. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of transactions.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DB_ENV-&gt;set_tx_max method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_tx_max method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_c/env_open.html">DB_ENV-&gt;open</a> is called, the information specified to DB_ENV-&gt;set_tx_max
+will be ignored.
+</p>
+<p>The DB_ENV-&gt;set_tx_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter configures the minimum number of
+simultaneously active transactions supported by Berkeley DB database
+environment.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_tx_max method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_c/env_open.html">DBENV-&gt;open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_tx_max</h3>
+<p>The DB_ENV-&gt;get_tx_max method returns the number of active transactions.</p>
+<p>The DB_ENV-&gt;get_tx_max method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_tx_max method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tx_maxp</b><dd>
+The DB_ENV-&gt;get_tx_max method returns the
+number of active transactions in <b>tx_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_tx_timestamp.html b/db/docs/api_c/env_set_tx_timestamp.html
index 68cd0d157..4949cb169 100644
--- a/db/docs/api_c/env_set_tx_timestamp.html
+++ b/db/docs/api_c/env_set_tx_timestamp.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tx_timestamp.so,v 10.6 2000/12/21 18:33:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_timestamp.so,v 10.26 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_tx_timestamp</title>
+<title>Berkeley DB: DB_ENV-&gt;set_tx_timestamp</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_tx_timestamp</h1>
+<h3>DB_ENV-&gt;set_tx_timestamp</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,42 +24,70 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_tx_timestamp(DB_ENV *dbenv, time_t *timestamp);
+DB_ENV-&gt;set_tx_timestamp(DB_ENV *dbenv, time_t *timestamp);
+<p>
+int
+DB_ENV-&gt;get_tx_timestamp(DB_ENV *dbenv, time_t *timestampp);
</pre></h3>
-<h1>Description</h1>
-<p>Recover to the time specified by <b>timestamp</b> rather than to the most
-current possible date.
-The <b>timestamp</b> argument should be the number of seconds since 0
-hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time,
-i.e., the Epoch.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_tx_timestamp</h3>
+<a name="3"><!--meow--></a>
+<p>Recover to the time specified by <b>timestamp</b> rather than to the
+most current possible date.</p>
<p>Once a database environment has been upgraded to a new version of Berkeley DB
-involving a log format change (see <a href="../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>, it is no longer possible to recover
-to a specific time before that upgrade.
-<p>The DBENV-&gt;set_tx_timestamp interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The DBENV-&gt;set_tx_timestamp function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+involving a log format change (see <a href="../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>), it is no longer possible to recover
+to a specific time before that upgrade.</p>
+<p>The DB_ENV-&gt;set_tx_timestamp method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_tx_timestamp method may not be called after the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method is
+called.
+</p>
+<p>The DB_ENV-&gt;set_tx_timestamp method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>timestamp</b><dd>
+The <b>timestamp</b> parameter references the memory location where the
+recovery timestamp is located.
+<p>The <b>timestamp</b> parameter should be the number of seconds since 0
+hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal
+Time; that is, the Epoch.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_tx_timestamp method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>It is not possible to recover to the specified time using the
-log files currently present in the environment.
+<p><dt>EINVAL<dd>If it is not possible to recover to the specified time using the log files
+currently present in the environment; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;get_tx_timestamp</h3>
+<p>The DB_ENV-&gt;get_tx_timestamp method returns the recovery timestamp.</p>
+<p>The DB_ENV-&gt;get_tx_timestamp method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_tx_timestamp method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>timestampp</b><dd>
+The DB_ENV-&gt;get_tx_timestamp method returns the
+recovery timestamp in <b>timestampp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_set_verbose.html b/db/docs/api_c/env_set_verbose.html
index 605fd577c..8a59400ab 100644
--- a/db/docs/api_c/env_set_verbose.html
+++ b/db/docs/api_c/env_set_verbose.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_verbose.so,v 10.23 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_verbose.so,v 10.45 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DBENV-&gt;set_verbose</title>
+<title>Berkeley DB: DB_ENV-&gt;set_verbose</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DBENV-&gt;set_verbose</h1>
+<h3>DB_ENV-&gt;set_verbose</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,57 +24,90 @@
#include &lt;db.h&gt;
<p>
int
-DBENV-&gt;set_verbose(DB_ENV *dbenv, u_int32_t which, int onoff);
+DB_ENV-&gt;set_verbose(DB_ENV *dbenv, u_int32_t which, int onoff);
+<p>
+int
+DB_ENV-&gt;get_verbose(DB_ENV *dbenv, u_int32_t which, int *onoffp);
</pre></h3>
-<h1>Description</h1>
-<p>The DBENV-&gt;set_verbose function turns additional informational and
-debugging messages in the Berkeley DB message output on and off. If
-<b>onoff</b> is set to
-non-zero,
-the additional messages are output.
-<p>The <b>which</b> parameter must be set to one of the following values:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_verbose</h3>
+<a name="3"><!--meow--></a>
+<p>The DB_ENV-&gt;set_verbose method turns specific additional informational
+and debugging messages in the Berkeley DB message output on and off. To see
+the additional messages, verbose messages must also be configured for
+the application. For more information on verbose messages, see the
+<a href="../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> method.</p>
+<p>The database environment's messages may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_verbose", one or more whitespace characters,
+and the method <b>which</b> parameter as a string; for example,
+"set_verbose DB_VERB_CHKPOINT".
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+<p>The DB_ENV-&gt;set_verbose method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_verbose method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_verbose method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>onoff</b><dd>
+If the <b>onoff</b> parameter is set to non-zero, the additional messages are output.
+<p><dt><b>which</b><dd>
+The <b>which</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a><dd>Display checkpoint location information when searching the log for
checkpoints.
<p><dt><a name="DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a><dd>Display additional information when doing deadlock detection.
<p><dt><a name="DB_VERB_RECOVERY">DB_VERB_RECOVERY</a><dd>Display additional information when performing recovery.
+<p><dt><a name="DB_VERB_REPLICATION">DB_VERB_REPLICATION</a><dd>Display additional information when processing replication messages.
+<p>Note, to get complete replication logging when debugging replication
+applications, you must also configure and build the Berkeley DB library with
+the <a href="../ref/build_unix/conf.html">--enable-diagnostic</a>
+configuration option as well as call the DB_ENV-&gt;set_verbose method.</p>
<p><dt><a name="DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a><dd>Display the waits-for table when doing deadlock detection.
</dl>
-<p>The DBENV-&gt;set_verbose interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DBENV-&gt;set_verbose function returns a non-zero error value on failure and 0 on success.
-<p>The database environment's verbosity may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_verbose", one or more whitespace characters,
-and the interface <b>which</b> argument as a string, for example,
-"set_verbose DB_VERB_CHKPOINT". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_verbose method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: dbenv_get_verbose</h3>
+<p>The DB_ENV-&gt;get_verbose method returns whether the specified <b>which</b>
+parameter is currently set or not.</p>
+<p>The DB_ENV-&gt;get_verbose method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_verbose method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>which</b><dd>
+The <b>which</b> parameter is the message value for which configuration
+is being checked.
+<p><dt><b>onoffp</b><dd>
+The <b>onoffp</b> parameter references memory into which
+ the configuration of the specified <b>which</b> parameter is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_strerror.html b/db/docs/api_c/env_strerror.html
index e6bd190a2..b61676f3c 100644
--- a/db/docs/api_c/env_strerror.html
+++ b/db/docs/api_c/env_strerror.html
@@ -1,20 +1,22 @@
-<!--$Id: env_strerror.so,v 8.4 2000/07/30 17:59:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_strerror.so,v 8.12 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_strerror</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_strerror</h1>
+<h3>db_strerror</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,37 +26,32 @@
char *
db_strerror(int error);
</pre></h3>
-<h1>Description</h1>
-<p>The db_strerror function returns an error message string corresponding
-to the error number <b>error</b>. This interface is a superset of the
-ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) interface. If the error number
-<b>error</b> is greater than or equal to 0, then the string returned by
-the system interface <b>strerror</b>(3) is returned. If the error
-number is less than 0, an error string appropriate to the corresponding
-Berkeley DB library error is returned. See
+<hr size=1 noshade>
+<h3>Description: db_strerror</h3>
+<p>The db_strerror method returns an error message string corresponding
+to the error number <b>error</b> parameter.</p>
+<p>This function is a superset of the ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) function. If the error number <b>error</b> is greater than or
+equal to 0, then the string returned by the system function
+<b>strerror</b>(3) is returned. If the error number is less than
+0, an error string appropriate to the corresponding Berkeley DB library error
+is returned. See
<a href="../ref/program/errorret.html">Error returns to applications</a>
-for more information.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+for more information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error number for which an error message
+string is wanted.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/env_version.html b/db/docs/api_c/env_version.html
index fa7704aae..68acc73a6 100644
--- a/db/docs/api_c/env_version.html
+++ b/db/docs/api_c/env_version.html
@@ -1,20 +1,22 @@
-<!--$Id: env_version.so,v 10.13 1999/12/20 08:52:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_version.so,v 10.24 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_version</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_version</h1>
+<h3>db_version</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,34 +26,32 @@
char *
db_version(int *major, int *minor, int *patch);
</pre></h3>
-<h1>Description</h1>
-<p>The db_version function returns a pointer to a string containing Berkeley DB
-version information. If <b>major</b> is non-NULL, the major version
-of the Berkeley DB release is stored in the memory it references. If
-<b>minor</b> is non-NULL, the minor version of the Berkeley DB release is
-stored in the memory it references. If <b>patch</b> is non-NULL, the
-patch version of the Berkeley DB release is stored in the memory it references.
-<h1>See Also</h1>
-<a href="../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../api_c/env_create.html">db_env_create</a>,
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>,
-<a href="../api_c/env_remove.html">DBENV-&gt;remove</a>,
-<a href="../api_c/db_err.html">DBENV-&gt;err</a>,
-<a href="../api_c/env_strerror.html">db_strerror</a>,
-<a href="../api_c/env_version.html">db_version</a>,
-<a href="../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>,
-<a href="../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>,
-<a href="../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a>,
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>,
-<a href="../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>,
-<a href="../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>,
-and
-<a href="../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
+<hr size=1 noshade>
+<h3>Description: db_version</h3>
+<a name="3"><!--meow--></a>
+<p>The db_version method returns a pointer to a string, suitable for
+display, containing Berkeley DB version information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>major</b><dd>
+If <b>major</b> is non-NULL, the major
+version of the Berkeley DB release is copied to the memory to which it refers.
+<p><dt><b>minor</b><dd>
+If <b>minor</b> is non-NULL, the minor version of the Berkeley DB release
+is copied to the memory to which it refers.
+<p><dt><b>patch</b><dd>
+If <b>patch</b> is non-NULL, the patch version of the Berkeley DB release
+is copied to the memory to which it refers.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/hsearch.html b/db/docs/api_c/hsearch.html
index 0d6d6ce51..1eca6d649 100644
--- a/db/docs/api_c/hsearch.html
+++ b/db/docs/api_c/hsearch.html
@@ -1,20 +1,22 @@
-<!--$Id: hsearch.so,v 10.18 2000/09/21 20:40:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: hsearch.so,v 10.27 2003/10/18 19:15:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: hsearch</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>hsearch</h1>
+<h3>hsearch</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -40,68 +42,63 @@ hcreate(size_t nelem);
void
hdestroy(void);
</pre></h3>
-<h1>Description</h1>
-<p>The hsearch interface to the Berkeley DB library is intended to
-provide a high-performance implementation and source code compatibility
-for applications written to the historic hsearch interface.
-It is not recommended for any other purpose.
+<hr size=1 noshade>
+<h3>Description: hsearch</h3>
+<a name="3"><!--meow--></a>
+<p>The hsearch functions are intended to provide a high-performance
+implementation and source code compatibility for applications written
+to the historic hsearch interface. It is not recommended for any other
+purpose.</p>
<p>To compile hsearch applications, replace the application's
<b>#include</b> of the hsearch include
-file (e.g., <b>#include &lt;search.h&gt;</b>)
-with the following two lines:
-<p><blockquote><pre>
-#define DB_DBM_HSEARCH 1
+file (for example, <b>#include &lt;search.h&gt;</b>)
+with the following two lines:</p>
+<blockquote><pre>#define DB_DBM_HSEARCH 1
#include &lt;db.h&gt;</pre></blockquote>
-<p>and recompile.
+<p>and recompile.</p>
<p>The hcreate function creates an in-memory database. The
-<b>nelem</b> argument is an estimation of the maximum number of key/data
-pairs that will be stored in the database.
-<p>The <b>hdestroy</b> function discards the database.
+<b>nelem</b> parameter is an estimation of the maximum number of key/data
+pairs that will be stored in the database.</p>
+<p>The <b>hdestroy</b> function discards the database.</p>
<p>Database elements are structures of type <b>ENTRY</b>, which contain at
least two fields: <b>key</b> and <b>data</b>. The field <b>key</b> is
-declared to be of type <b>char *</b> and is the key used for storage
+declared to be of type <b>char *</b>, and is the key used for storage
and retrieval. The field <b>data</b> is declared to be of type
-<b>void *</b> and is its associated data.
+<b>void *</b>, and is its associated data.</p>
<p>The hsearch function retrieves key/data pairs from, and stores
-key/data pairs into the database.
-<p>The <b>action</b> argument must be set to one of two values:
+key/data pairs into the database.</p>
+<p>The <b>action</b> parameter must be set to one of two values:</p>
<p><dl compact>
-<p><dt>ENTER<dd>If the key does not already appear in the database,
-insert the key/data pair into the database.
-If the key already appears in the database,
-return a reference to an <b>ENTRY</b>
-structure referencing the existing key and its associated data element.
+<p><dt>ENTER<dd>If the key does not already appear in the database, insert the key/data
+pair into the database. If the key already appears in the database,
+return a reference to an <b>ENTRY</b> structure which refers to the
+existing key and its associated data element.
<p><dt>FIND<dd>Retrieve the specified key/data pair from the database.
</dl>
<h3>Compatibility Notes</h3>
<p>Historically, hsearch required applications to maintain the keys
and data in the application's memory for as long as the <b>hsearch</b>
-database existed. As Berkeley DB handles key and data management internally,
-there is no requirement that applications maintain local copies of key
-and data items, although the only effect of doing so should be the
-allocation of additional memory.
+database existed. Because Berkeley DB handles key and data management
+internally, there is no requirement that applications maintain local
+copies of key and data items, although the only effect of doing so
+should be the allocation of additional memory.</p>
<h3>Hsearch Diagnostics</h3>
-<p>The <b>hcreate</b> function returns 0 on failure, setting <b>errno</b>
-and non-zero on success.
+<p>The <b>hcreate</b> function returns 0 on failure, setting
+<b>errno</b>, and non-zero on success.</p>
<p>The <b>hsearch</b> function returns a pointer to an ENTRY structure on
success, and NULL, setting <b>errno</b>, if the <b>action</b>
-specified was FIND and the item did not appear in the database.
-<h1>Errors</h1>
-<p>The hcreate function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the hcreate function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<p>The hsearch function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the hsearch function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<p>In addition, the <b>hsearch</b> function will fail, setting <b>errno</b>
-to 0, if the <b>action</b> specified was FIND and the item did not appear in
-the database.
+specified was FIND and the item did not appear in the database.</p>
+<h3>Errors</h3>
+<p>The <b>hsearch</b> function will fail, setting <b>errno</b> to 0,
+if the <b>action</b> specified was FIND and the item did not appear in
+the database.</p>
+<p>In addition, the hcreate, hsearch and hdestroy functions may fail and
+return an error for errors specified for other Berkeley DB and C library or
+system functions.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_class.html b/db/docs/api_c/lock_class.html
index 6b25d49cf..eea2d261b 100644
--- a/db/docs/api_c/lock_class.html
+++ b/db/docs/api_c/lock_class.html
@@ -1,21 +1,22 @@
-<!--Id: lock_class.so,v 10.18 2002/08/24 18:22:41 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_class.so,v 10.20 2003/09/25 15:27:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_LOCK</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_LOCK</h1>
+<h3>DB_LOCK</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,18 +25,20 @@
<p>
typedef struct __db_lock_u DB_LOCK;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_LOCK</h3>
<p>The locking interfaces for the Berkeley DB database environment are methods
of the <a href="../api_c/env_class.html">DB_ENV</a> handle. The DB_LOCK object is the handle
-for a single lock, and has no methods of its own.
-<h1>Class</h1>
+for a single lock, and has no methods of its own.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, DB_LOCK
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_detect.html b/db/docs/api_c/lock_detect.html
index 7b95e98e9..214725102 100644
--- a/db/docs/api_c/lock_detect.html
+++ b/db/docs/api_c/lock_detect.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_detect.so,v 10.26 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_detect.so,v 10.48 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_detect</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_detect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_detect</h1>
+<h3>DB_ENV-&gt;lock_detect</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,52 +24,62 @@
#include &lt;db.h&gt;
<p>
int
-lock_detect(DB_ENV *env,
- u_int32_t flags, u_int32_t atype, int *aborted);
+DB_ENV-&gt;lock_detect(DB_ENV *env,
+ u_int32_t flags, u_int32_t atype, int *aborted);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_detect function runs one iteration of the deadlock detector.
-The deadlock detector traverses the lock table, and for each deadlock
-it finds, marks one of the participating transactions for abort.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_detect</h3>
+<p>The DB_ENV-&gt;lock_detect method runs one iteration of the deadlock detector.
+The deadlock detector traverses the lock table and marks one of the
+participating lock requesters for rejection in each deadlock it finds.</p>
+<p>The DB_ENV-&gt;lock_detect method is the underlying method used by the <a href="../utility/db_deadlock.html">db_deadlock</a> utility.
+See the <a href="../utility/db_deadlock.html">db_deadlock</a> utility source code for an example of using DB_ENV-&gt;lock_detect
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<p>The DB_ENV-&gt;lock_detect method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>aborted</b><dd>
+<p><dt><b>atype</b><dd>
+The <b>atype</b> parameter specifies which lock request(s) to reject.
+It must be set to one of the following list:
+<p><dl compact>
+<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use whatever lock policy was specified when the database environment
+was created. If no lock policy has yet been specified, set the lock
+policy to DB_LOCK_RANDOM.
+<dt><a name="DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a><dd>Reject lock requests which have timed out. No other deadlock detection
+is performed.
+<dt><a name="DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a><dd>Reject the lock request for the locker ID with the greatest number of
+locks.
+<dt><a name="DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a><dd>Reject the lock request for the locker ID with the fewest number of
+locks.
+<dt><a name="DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a><dd>Reject the lock request for the locker ID with the fewest number of
+write locks.
+<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Reject the lock request for the oldest locker ID.
+<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Reject the lock request for a random locker ID.
+<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Reject the lock request for the youngest locker ID.
+</dl>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_detect method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_LOCK_CONFLICT">DB_LOCK_CONFLICT</a><dd>Only run the deadlock detector if a lock conflict has occurred since
-the last time that the deadlock detector was run.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The <b>atype</b> parameter specifies which transaction to abort in the
-case of deadlock. It must be set to one of possible arguments listed for
-the <a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a> interface.
-<p>If the <b>aborted</b> parameter is non-NULL, the memory location it
-references will be set to the number of transactions aborted by the
-lock_detect function.
-<p>The lock_detect function is the underlying function used by the <a href="../utility/db_deadlock.html">db_deadlock</a> utility.
-See the <a href="../utility/db_deadlock.html">db_deadlock</a> utility source code for an example of using lock_detect
-in a IEEE/ANSI Std 1003.1 (POSIX) environment.
-<p>The lock_detect function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_detect function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_detect function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_get.html b/db/docs/api_c/lock_get.html
index 8d68ba54c..d41232ae8 100644
--- a/db/docs/api_c/lock_get.html
+++ b/db/docs/api_c/lock_get.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_get.so,v 10.28 2000/04/24 16:33:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_get.so,v 10.52 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_get</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_get</h1>
+<h3>DB_ENV-&gt;lock_get</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,70 +24,82 @@
#include &lt;db.h&gt;
<p>
int
-lock_get(DB_ENV *env, u_int32_t locker,
- u_int32_t flags, const DBT *obj,
+DB_ENV-&gt;lock_get(DB_ENV *env, u_int32_t locker,
+ u_int32_t flags, const DBT *object,
const db_lockmode_t lock_mode, DB_LOCK *lock);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_get function acquires a lock from the lock table, returning
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_get</h3>
+<p>The DB_ENV-&gt;lock_get method acquires a lock from the lock table, returning
information about it in
-the <b>lock</b> argument.
-<p>The <b>locker</b> argument specified to lock_get is an unsigned
-32-bit integer quantity. It represents the entity requesting or releasing
-the lock.
-<p>The <b>flags</b> value must be set to 0 or the following value:
+the <b>lock</b> parameter.</p>
+<p>The DB_ENV-&gt;lock_get method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with an
-existing lock, return immediately instead of waiting for the lock to
-become available.
+existing lock,
+return DB_LOCK_NOTGRANTED immediately instead of waiting
+for the lock to become available.
+</dl>
+<p><dt><b>lock_mode</b><dd>
+The <b>lock_mode</b> parameter is used as an index into the environment's
+lock conflict matrix. When using the default lock conflict matrix,
+<b>lock_mode</b> must be set to one of the following values:
+<p><dl compact>
+<dt>DB_LOCK_READ<dd>read (shared)
+<dt>DB_LOCK_WRITE<dd>write (exclusive)
+<dt>DB_LOCK_IWRITE<dd>intention to write (shared)
+<dt>DB_LOCK_IREAD<dd>intention to read (shared)
+<dt>DB_LOCK_IWR<dd>intention to read and write (shared)
+</dl>
+<p>See <a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p>
+<p><dt><b>locker</b><dd>
+The <b>locker</b> parameter is an unsigned 32-bit integer quantity. It
+represents the entity requesting the lock.
+<p><dt><b>object</b><dd>
+The <b>object</b> parameter is an untyped byte string that specifies the
+object to be locked. Applications using the locking subsystem directly
+while also doing locking via the Berkeley DB access methods must take care not
+to inadvertently lock objects that happen to be equal to the unique file
+IDs used to lock files. See
+<a href="../ref/lock/am_conv.html">Access method locking conventions</a>
+for more information.
</dl>
-<p>The <b>obj</b> argument is an untyped byte string that specifies the
-object to be locked or released.
-<p>The <b>mode</b> argument is an index into the environment's lock conflict
-array. See <a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a> and
-<a href="../ref/lock/stdmode.html">Standard Lock Modes</a>
-for a description of that array.
-<p>The lock_get function may
-return
-one of the following values:
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_get method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a><dd>A lock was requested that could not be immediately granted and the
-<b>flags</b> parameter was set to DB_LOCK_NOWAIT.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<p>Otherwise, the lock_get function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_get function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>The <a href="../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> flag or lock timers were configured and the lock could not be granted before the wait-time expired.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOMEM<dd>The maximum number of locks has been reached.
</dl>
-<p>The lock_get function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_get function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_id.html b/db/docs/api_c/lock_id.html
index bd720cdb0..7d4e078da 100644
--- a/db/docs/api_c/lock_id.html
+++ b/db/docs/api_c/lock_id.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_id.so,v 10.19 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_id.so,v 10.32 2003/10/31 17:24:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_id</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_id</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_id</h1>
+<h3>DB_ENV-&gt;lock_id</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,36 +24,34 @@
#include &lt;db.h&gt;
<p>
int
-lock_id(DB_ENV *env, u_int32_t *idp);
+DB_ENV-&gt;lock_id(DB_ENV *env, u_int32_t *idp);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_id function
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_id</h3>
+<p>The DB_ENV-&gt;lock_id method
copies a locker ID, which is guaranteed to be unique in the specified lock
-table, into the memory location referenced by <b>idp</b>.
-<p>The lock_id function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_id function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_id function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+table, into the memory location to which <b>idp</b> refers.</p>
+<p>The <a href="../api_c/lock_id_free.html">DB_ENV-&gt;lock_id_free</a> method should be called to return the locker ID to
+the Berkeley DB library when it is no longer needed.</p>
+<p>The DB_ENV-&gt;lock_id method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>idp</b><dd>
+The <b>idp</b> parameter references memory into which
+ the allocated locker ID is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_id_free.html b/db/docs/api_c/lock_id_free.html
index 555d44bfb..64779372d 100644
--- a/db/docs/api_c/lock_id_free.html
+++ b/db/docs/api_c/lock_id_free.html
@@ -1,21 +1,22 @@
-<!--Id: lock_id_free.so,v 10.5 2002/08/18 21:16:37 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_id_free.so,v 10.13 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;lock_id_free</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;lock_id_free</h1>
+<h3>DB_ENV-&gt;lock_id_free</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,27 +26,35 @@
int
DB_ENV-&gt;lock_id_free(DB_ENV *env, u_int32_t id);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_id_free</h3>
<p>The DB_ENV-&gt;lock_id_free method frees a locker ID allocated by the
-<a href="../api_c/lock_id.html">DB_ENV-&gt;lock_id</a> method.
-<p>The DB_ENV-&gt;lock_id_free method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<a href="../api_c/lock_id.html">DB_ENV-&gt;lock_id</a> method.</p>
+<p>The DB_ENV-&gt;lock_id_free method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>id</b><dd>
+The <b>id</b> parameter is the locker id to be freed.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_id_free method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The locker ID is invalid or locks are still held by this locker ID.
+<p><dt>EINVAL<dd>If the locker ID is invalid or locks are still held by this locker ID; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB_ENV-&gt;lock_id_free method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;lock_id_free method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_list.html b/db/docs/api_c/lock_list.html
index 06f9803e0..5e7c5f04c 100644
--- a/db/docs/api_c/lock_list.html
+++ b/db/docs/api_c/lock_list.html
@@ -1,17 +1,17 @@
-<!--Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Locking Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Locking Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Locking Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
<tr><td><a href="../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
@@ -27,6 +27,6 @@
<tr><td><a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
<tr><td><a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_put.html b/db/docs/api_c/lock_put.html
index 777f4bdd0..9912df5d5 100644
--- a/db/docs/api_c/lock_put.html
+++ b/db/docs/api_c/lock_put.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_put.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_put.so,v 10.36 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_put</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_put</h1>
+<h3>DB_ENV-&gt;lock_put</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,38 +24,36 @@
#include &lt;db.h&gt;
<p>
int
-lock_put(DB_ENV *env, DB_LOCK *lock);
+DB_ENV-&gt;lock_put(DB_ENV *env, DB_LOCK *lock);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_put function releases <b>lock</b> from the lock table.
-<p>The lock_put function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_put function may fail and return a non-zero error for the following conditions:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_put</h3>
+<p>The DB_ENV-&gt;lock_put method releases <b>lock</b>.</p>
+<p>The DB_ENV-&gt;lock_put method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lock</b><dd>
+The <b>lock</b> parameter is the lock to be released.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_put method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The lock_put function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_put function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_stat.html b/db/docs/api_c/lock_stat.html
index c86024de7..8c86bde6f 100644
--- a/db/docs/api_c/lock_stat.html
+++ b/db/docs/api_c/lock_stat.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_stat.so,v 10.30 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_stat.so,v 10.54 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_stat</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_stat</h1>
+<h3>DB_ENV-&gt;lock_stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,71 +24,85 @@
#include &lt;db.h&gt;
<p>
int
-lock_stat(DB_ENV *env,
- DB_LOCK_STAT **statp, void *(*db_malloc)(size_t));
+DB_ENV-&gt;lock_stat(DB_ENV *env, DB_LOCK_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_stat function
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The lock region statistics are stored in a structure of type
-DB_LOCK_STAT. The following DB_LOCK_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_stat</h3>
+<p>The DB_ENV-&gt;lock_stat method returns the locking subsystem statistics.</p>
+<p>The DB_ENV-&gt;lock_stat method creates a statistical structure of type
+DB_LOCK_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_LOCK_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>u_int32_t st_lastid;<dd>The last allocated lock ID.
+<dt>u_int32_t st_id;<dd>The last allocated locker ID.
+<dt>u_int32_t st_cur_maxid;<dd>The current maximum unused locker ID.
<dt>u_int32_t st_nmodes;<dd>The number of lock modes.
<dt>u_int32_t st_maxlocks;<dd>The maximum number of locks possible.
<dt>u_int32_t st_maxlockers;<dd>The maximum number of lockers possible.
-<dt>u_int32_t st_maxobjects;<dd>The maximum number of objects possible.
+<dt>u_int32_t st_maxobjects;<dd>The maximum number of lock objects possible.
<dt>u_int32_t st_nlocks;<dd>The number of current locks.
<dt>u_int32_t st_maxnlocks;<dd>The maximum number of locks at any one time.
<dt>u_int32_t st_nlockers;<dd>The number of current lockers.
<dt>u_int32_t st_maxnlockers;<dd>The maximum number of lockers at any one time.
-<dt>u_int32_t st_nobjects;<dd>The number of current objects.
-<dt>u_int32_t st_maxnobjects;<dd>The maximum number of objects at any one time.
+<dt>u_int32_t st_nobjects;<dd>The number of current lock objects.
+<dt>u_int32_t st_maxnobjects;<dd>The maximum number of lock objects at any one time.
<dt>u_int32_t st_nrequests;<dd>The total number of locks requested.
<dt>u_int32_t st_nreleases;<dd>The total number of locks released.
-<dt>u_int32_t st_nnowaits;<dd>The total number of lock requests that failed because
+<dt>u_int32_t st_nnowaits;<dd>The total number of lock requests failing because
<a href="../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> was set.
<dt>u_int32_t st_nconflicts;<dd>The total number of locks not immediately available due to conflicts.
-<dt>u_int32_t st_ndeadlocks;<dd>The number of deadlocks detected.
-<dt>u_int32_t st_regsize;<dd>The size of the region.
+<dt>u_int32_t st_ndeadlocks;<dd>The number of deadlocks.
+<dt>u_int32_t st_locktimeout;<dd>Lock timeout value.
+<dt>u_int32_t st_nlocktimeouts;<dd>The number of lock requests that have timed out.
+<dt>u_int32_t st_txntimeout;<dd>Transaction timeout value.
+<dt>u_int32_t st_ntxntimeouts;<dd>The number of transactions that have timed out. This value is also a
+component of <b>st_ndeadlocks</b>, the total number of deadlocks
+detected.
+<dt>u_int32_t st_regsize;<dd>The size of the lock region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
</dl>
-<p>The lock_stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_stat function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<p>The DB_ENV-&gt;lock_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lock_vec.html b/db/docs/api_c/lock_vec.html
index 56d3fa96a..acbe1b22d 100644
--- a/db/docs/api_c/lock_vec.html
+++ b/db/docs/api_c/lock_vec.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_vec.so,v 10.31 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_vec.so,v 10.68 2003/11/25 23:23:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: lock_vec</title>
+<title>Berkeley DB: DB_ENV-&gt;lock_vec</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>lock_vec</h1>
+<h3>DB_ENV-&gt;lock_vec</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,102 +24,141 @@
#include &lt;db.h&gt;
<p>
int
-lock_vec(DB_ENV *env, u_int32_t locker, u_int32_t flags,
+DB_ENV-&gt;lock_vec(DB_ENV *env, u_int32_t locker, u_int32_t flags,
DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp);
</pre></h3>
-<h1>Description</h1>
-<p>The lock_vec function atomically obtains and releases one or more locks
-from the lock table. The lock_vec function is intended to support
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;lock_vec</h3>
+<p>The DB_ENV-&gt;lock_vec method atomically obtains and releases one or more locks
+from the lock table. The DB_ENV-&gt;lock_vec method is intended to support
acquisition or trading of multiple locks under one lock table semaphore,
as is needed for lock coupling or in multigranularity locking for lock
-escalation.
-<p>The <b>locker</b> argument specified to lock_vec is an unsigned
-32-bit integer quantity. It represents the entity requesting or releasing
-the lock.
-<p>The <b>flags</b> value must be set to 0 or the following value:
+escalation.</p>
+<p>If any of the requested locks cannot be acquired, or any of the locks to
+be released cannot be released, the operations before the failing
+operation are guaranteed to have completed successfully, and
+DB_ENV-&gt;lock_vec returns a non-zero value. In addition, if <b>elistp</b>
+is not NULL, it is set to point to the DB_LOCKREQ entry that was being
+processed when the error occurred.</p>
+<p>Unless otherwise specified, the DB_ENV-&gt;lock_vec method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>elistp</b><dd>
+If an error occurs, and the <b>elistp</b> parameter is non-NULL, it
+is set to point to the DB_LOCKREQ entry that was being processed when
+the error occurred.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be immediately granted because the requested lock
-conflicts with an existing lock, return instead of waiting for the lock
-to become available.
+<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with
+an existing lock,
+return DB_LOCK_NOTGRANTED immediately instead of waiting
+for the lock to become available. In this case, if non-NULL,
+<b>elistp</b> identifies the request that was not granted.
</dl>
-<p>The <b>list</b> array provided to lock_vec is typedef'd as
-DB_LOCKREQ. A DB_LOCKREQ structure has at least the following fields,
-which must be initialized before calling lock_vec:
+<p><dt><b>locker</b><dd>
+The <b>locker</b> parameter is an unsigned 32-bit integer quantity. It
+represents the entity requesting or releasing the lock.
+<p><dt><b>list</b><dd>
+The <b>list</b> array provided to DB_ENV-&gt;lock_vec is typedef'd as
+DB_LOCKREQ.
+<p>To ensure compatibility with future releases of Berkeley DB, all
+fields of the DB_LOCKREQ structure that are not explicitly set should
+be initialized to 0 before the first time the structure is used. Do
+this by declaring the structure external or static, or by calling
+<b>memset</b>(3).</p>
+<p>A DB_LOCKREQ structure has at least the following fields:</p>
<p><dl compact>
<p><dt>lockop_t <a name="op">op</a>;<dd>The operation to be performed, which must be set to one of the
following values:
<p><dl compact>
-<p><dt><a name="DB_LOCK_GET">DB_LOCK_GET</a><dd>Get a lock, as defined by the values of <b>locker</b>, <b>obj</b>,
-and <b>mode</b>. Upon return from lock_vec, if the
-<b>lock</b> field is non-NULL, a reference to the acquired lock is
-stored there. (This reference is invalidated by any call to
-lock_vec or <a href="../api_c/lock_put.html">lock_put</a> that releases the lock.)
-<p><dt><a name="DB_LOCK_PUT">DB_LOCK_PUT</a><dd>The lock referenced by the contents of the <b>lock</b> field is released.
-<p><dt><a name="DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a><dd>All locks held by the <b>locker</b> are released. (Any locks acquired
-as a part of the current call to lock_vec that appear after the
-DB_LOCK_PUT_ALL entry are not considered for this
-operation).
-<p><dt><a name="DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a><dd>All locks held on the object <b>obj</b> are released. The <b>mode</b>
-and <b>locker</b> parameters are ignored. Note that any locks acquired
-as a part of the current call to lock_vec that occur before the
-DB_LOCK_PUT_OBJ will also be released; those acquired afterwards
-will not be released.
+<p><dt><a name="DB_LOCK_GET">DB_LOCK_GET</a><dd>Get the lock defined by the values of the <b>mode</b> and <b>obj</b>
+structure fields, for the specified <b>locker</b>. Upon return from
+DB_ENV-&gt;lock_vec, if the <b>lock</b> field is non-NULL, a reference
+to the acquired lock is stored there. (This reference is invalidated
+by any call to DB_ENV-&gt;lock_vec or <a href="../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> that releases the
+lock.)
+<p><dt><a name="DB_LOCK_GET_TIMEOUT">DB_LOCK_GET_TIMEOUT</a><dd>Identical to DB_LOCK_GET except that the value in the <b>timeout</b>
+structure field overrides any previously specified timeout value for
+this lock. A value of 0 turns off any previously specified timeout.
+<p><dt><a name="DB_LOCK_PUT">DB_LOCK_PUT</a><dd>The lock to which the <b>lock</b> structure field refers is released.
+The <b>locker</b> parameter, and <b>mode</b> and <b>obj</b> fields
+are ignored.
+<p><dt><a name="DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a><dd>All locks held by the specified <b>locker</b> are released. The
+<b>lock</b>, <b>mode</b>, and <b>obj</b> structure fields are
+ignored. Locks acquired in operations performed by the current call to
+DB_ENV-&gt;lock_vec which appear before the DB_LOCK_PUT_ALL
+operation are released; those acquired in operations appearing after
+the DB_LOCK_PUT_ALL operation are not released.
+<p><dt><a name="DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a><dd>All locks held on <b>obj</b> are released. The <b>locker</b>
+parameter and the <b>lock</b> and <b>mode</b> structure fields are
+ignored. Locks acquired in operations performed by the current call to
+DB_ENV-&gt;lock_vec that appear before the DB_LOCK_PUT_OBJ
+operation are released; those acquired in operations appearing after the
+DB_LOCK_PUT_OBJ operation are not released.
+<p><dt><a name="DB_LOCK_TIMEOUT">DB_LOCK_TIMEOUT</a><dd>Cause the specified <b>locker</b> to timeout immediately. If the
+database environment has not configured automatic deadlock detection,
+the transaction will timeout the next time deadlock detection is
+performed. As transactions acquire locks on behalf of a single locker
+ID, timing out the locker ID associated with a transaction will time
+out the transaction itself.
</dl>
-<p><dt>const DBT <a name="obj">obj</a>;<dd>An untyped byte string that specifies the object to be locked or released.
-<p><dt>const lockmode_t <a name="mode">mode</a>;<dd>The lock mode, used as an index into the environment's lock conflict array.
-See <a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for a description of that array.
<p><dt>DB_LOCK <a name="lock">lock</a>;<dd>A lock reference.
+<p><dt>const lockmode_t <a name="mode">mode</a>;<dd>The lock mode, used as an index into the environment's lock conflict matrix.
+When using the default lock conflict matrix, <b>mode</b> must be set to one
+of the following values:
+<p><dl compact>
+<dt><a name="DB_LOCK_READ">DB_LOCK_READ</a><dd>read (shared)
+<dt><a name="DB_LOCK_WRITE">DB_LOCK_WRITE</a><dd>write (exclusive)
+<dt><a name="DB_LOCK_IWRITE">DB_LOCK_IWRITE</a><dd>intention to write (shared)
+<dt><a name="DB_LOCK_IREAD">DB_LOCK_IREAD</a><dd>intention to read (shared)
+<dt><a name="DB_LOCK_IWR">DB_LOCK_IWR</a><dd>intention to read and write (shared)
</dl>
-<p>The <b>nlist</b> argument specifies the number of elements in the
+<p>See <a href="../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p>
+<p><dt>const DBT <a name="obj">obj</a>;<dd>An untyped byte string that specifies the object to be locked or
+released. Applications using the locking subsystem directly while also
+doing locking via the Berkeley DB access methods must take care not to
+inadvertently lock objects that happen to be equal to the unique file
+IDs used to lock files. See <a href="../ref/lock/am_conv.html">Access
+method locking conventions</a> for more information.
+<p><dt>u_int32_t timeout;<dd>The lock timeout value.
+</dl>
+<p><dt><b>nlist</b><dd>
+The <b>nlist</b> parameter specifies the number of elements in the
<b>list</b> array.
-<p>If any of the requested locks cannot be acquired, or any of the locks to
-be released cannot be released, the operations before the failing
-operation are guaranteed to have completed successfully, and
-lock_vec returns a non-zero value. In addition, if <b>elistp</b>
-is not NULL, it is set to point to the DB_LOCKREQ entry that was being
-processed when the error occurred.
-<p>The lock_vec function may
-return
-one of the following values:
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;lock_vec method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a><dd>A lock was requested that could not be immediately granted and the
-<b>flag</b> parameter was set to DB_LOCK_NOWAIT. In this case, if
-non-NULL, <b>elistp</b> identifies the request that was not granted.
+<p><dt>DB_LOCK_DEADLOCK<dd>A transactional database environment operation was selected to resolve
+a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time.
</dl>
-<p>Otherwise, the lock_vec function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The lock_vec function may fail and return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_LOCK_NOTGRANTED<dd>The <a href="../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> flag or lock timers were configured and the lock could not be granted before the wait-time expired.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOMEM<dd>The maximum number of locks has been reached.
</dl>
-<p>The lock_vec function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the lock_vec function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a>,
-<a href="../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>,
-<a href="../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>,
-<a href="../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>,
-<a href="../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a>,
-<a href="../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a>,
-<a href="../api_c/lock_detect.html">lock_detect</a>,
-<a href="../api_c/lock_get.html">lock_get</a>,
-<a href="../api_c/lock_id.html">lock_id</a>,
-<a href="../api_c/lock_put.html">lock_put</a>,
-<a href="../api_c/lock_stat.html">lock_stat</a>
-and
-<a href="../api_c/lock_vec.html">lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/lock_class.html">DB_LOCK</a>
+<h3>See Also</h3>
+<a href="../api_c/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_archive.html b/db/docs/api_c/log_archive.html
index 6c9aea26b..5faf3d1fd 100644
--- a/db/docs/api_c/log_archive.html
+++ b/db/docs/api_c/log_archive.html
@@ -1,20 +1,22 @@
-<!--$Id: log_archive.so,v 10.26 2000/05/25 13:47:07 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_archive.so,v 10.48 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: log_archive</title>
+<title>Berkeley DB: DB_ENV-&gt;log_archive</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_archive</h1>
+<h3>DB_ENV-&gt;log_archive</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,81 +24,96 @@
#include &lt;db.h&gt;
<p>
int
-log_archive(DB_ENV *env, char *(*listp)[],
- u_int32_t flags, void *(*db_malloc)(size_t));
+DB_ENV-&gt;log_archive(DB_ENV *env, char *(*listp)[], u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The log_archive function
-creates a NULL-terminated array of log or database file names and copies
-a pointer to them into the user-specified memory location <b>listp</b>.
-<p>By default, log_archive returns the names of all of the log files
-that are no longer in use (e.g., no longer involved in active transactions),
-and that may safely be archived for catastrophic recovery and then removed
-from the system. If there were no file names to return, the memory location
-referenced by <b>listp</b> will be set to NULL.
-<p>Arrays of log file names are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_archive</h3>
+<p>The DB_ENV-&gt;log_archive method returns an array of log or database filenames.</p>
+<p>By default, DB_ENV-&gt;log_archive returns the names of all of the log
+files that are no longer in use (for example, that are no longer
+involved in active transactions), and that may safely be archived for
+catastrophic recovery and then removed from the system. If there are
+no filenames to return,
+the memory location to which <b>listp</b> refers will be set to NULL.</p>
+<p>Arrays of log filenames are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>Log cursor handles (returned by the <a href="../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a> method) may have open
+file descriptors for log files in the database environment. Also, the
+Berkeley DB interfaces to the database environment logging subsystem (for
+example, <a href="../api_c/log_put.html">DB_ENV-&gt;log_put</a> and <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>) may allocate log cursors
+and have open file descriptors for log files as well. On operating
+systems where filesystem related system calls (for example, rename and
+unlink on Windows/NT) can fail if a process has an open file descriptor
+for the affected file, attempting to move or remove the log files listed
+by DB_ENV-&gt;log_archive may fail. All Berkeley DB internal use of log cursors
+operates on active log files only and furthermore, is short-lived in
+nature. So, an application seeing such a failure should be restructured
+to close any open log cursors it may have, and otherwise to retry the
+operation until it succeeds. (Although the latter is not likely to be
+necessary; it is hard to imagine a reason to move or rename a log file
+in which transactions are being logged or aborted.)</p>
+<p>See <a href="../utility/db_archive.html">db_archive</a> for more information on database archival
+procedures.</p>
+<p>The DB_ENV-&gt;log_archive method is the underlying method used by the <a href="../utility/db_archive.html">db_archive</a> utility.
+See the <a href="../utility/db_archive.html">db_archive</a> utility source code for an example of using DB_ENV-&gt;log_archive
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<p>The DB_ENV-&gt;log_archive method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_ARCH_ABS">DB_ARCH_ABS</a><dd>All pathnames are returned as absolute pathnames,
-instead of relative to the database home directory.
+<p><dt><a name="DB_ARCH_ABS">DB_ARCH_ABS</a><dd>All pathnames are returned as absolute pathnames, instead of relative
+to the database home directory.
<p><dt><a name="DB_ARCH_DATA">DB_ARCH_DATA</a><dd>Return the database files that need to be archived in order to recover
the database from catastrophic failure. If any of the database files
have not been accessed during the lifetime of the current log files,
-log_archive will not include them in this list. It is also
-possible that some of the files referenced in the log have since been
+DB_ENV-&gt;log_archive will not include them in this list. It is also
+possible that some of the files referred to by the log have since been
deleted from the system.
-<p><dt><a name="DB_ARCH_LOG">DB_ARCH_LOG</a><dd>Return all the log file names regardless of whether or not they are in
+<p>The DB_ARCH_DATA and DB_ARCH_LOG flags are mutually
+exclusive.</p>
+<p><dt><a name="DB_ARCH_LOG">DB_ARCH_LOG</a><dd>Return all the log filenames, regardless of whether or not they are in
use.
-</dl>
<p>The DB_ARCH_DATA and DB_ARCH_LOG flags are mutually
-exclusive.
-<p>See the <a href="../utility/db_archive.html">db_archive</a> manual page for more information on database
-archival procedures.
-<p>The log_archive function is the underlying function used by the <a href="../utility/db_archive.html">db_archive</a> utility.
-See the <a href="../utility/db_archive.html">db_archive</a> utility source code for an example of using log_archive
-in a IEEE/ANSI Std 1003.1 (POSIX) environment.
-<p>The log_archive function returns a non-zero error value on failure and 0 on success.
-<h1>Bugs</h1>
-<p>In a threaded application (i.e., one where the environment was created
-with the DB_THREAD flag specified), calling log_archive with the
-DB_ARCH_DATA flag will fail, returning EINVAL. To work around this
-problem, re-open the log explicitly without specifying DB_THREAD. This
-restriction is expected to be removed in a future version of Berkeley DB.
-<h1>Errors</h1>
-<p>The log_archive function may fail and return a non-zero error for the following conditions:
+exclusive.</p>
+<p><dt><a name="DB_ARCH_REMOVE">DB_ARCH_REMOVE</a><dd>Remove log files that are no longer needed; no filenames are returned.
+Automatic log file removal is likely to make catastrophic recovery
+impossible.
+<p>The DB_ARCH_REMOVE flag may not be specified with any other
+flag.</p>
+</dl>
+<p><dt><b>listp</b><dd>
+The <b>listp</b> parameter references memory into which the allocated
+array of log or database filenames is copied. If there are no filenames
+to return, the memory location to which <b>listp</b> refers will be set
+to NULL.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_archive method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The log was corrupted.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The log_archive function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the log_archive function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_compare.html b/db/docs/api_c/log_compare.html
index c6e7743be..c2a0decb7 100644
--- a/db/docs/api_c/log_compare.html
+++ b/db/docs/api_c/log_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: log_compare.so,v 10.12 1999/12/20 08:52:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_compare.so,v 10.21 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: log_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_compare</h1>
+<h3>log_compare</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,28 +26,32 @@
int
log_compare(const DB_LSN *lsn0, const DB_LSN *lsn1);
</pre></h3>
-<h1>Description</h1>
-<p>The log_compare function allows the caller to compare two
+<hr size=1 noshade>
+<h3>Description: log_compare</h3>
+<p>The log_compare method allows the caller to compare two
DB_LSN structures,
returning 0 if they are equal, 1 if <b>lsn0</b> is greater than
-<b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn0</b><dd>
+The <b>lsn0</b> parameter is one of the
+DB_LSN structures
+to be compared.
+<p><dt><b>lsn1</b><dd>
+The <b>lsn1</b> parameter is one of the
+DB_LSN structures
+to be compared.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_cursor.html b/db/docs/api_c/log_cursor.html
index 12dd40c25..4a4f47e38 100644
--- a/db/docs/api_c/log_cursor.html
+++ b/db/docs/api_c/log_cursor.html
@@ -1,21 +1,22 @@
-<!--Id: log_cursor.so,v 10.5 2002/08/24 15:13:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_cursor.so,v 10.11 2003/10/31 17:24:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;log_cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;log_cursor</h1>
+<h3>DB_ENV-&gt;log_cursor</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,29 +26,37 @@
int
DB_ENV-&gt;log_cursor(DB_ENV *dbenv, DB_LOGC **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_cursor</h3>
+<p>The DB_ENV-&gt;log_cursor method returns a created log cursor.</p>
<p>The DB_ENV-&gt;log_cursor method
-creates a log cursor and copies a pointer to it into the memory to which
-<b>cursorp</b> refers.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DB_ENV-&gt;log_cursor method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;log_cursor method may fail and return a non-zero error for the following conditions:
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>cursorp</b><dd>
+The <b>cursorp</b> parameter references memory into which
+a pointer to the created log cursor is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
-<p>The DB_ENV-&gt;log_cursor method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;log_cursor method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_cursor method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_file.html b/db/docs/api_c/log_file.html
index 434380ccc..3bac18bfd 100644
--- a/db/docs/api_c/log_file.html
+++ b/db/docs/api_c/log_file.html
@@ -1,20 +1,22 @@
-<!--$Id: log_file.so,v 10.18 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_file.so,v 10.32 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: log_file</title>
+<title>Berkeley DB: DB_ENV-&gt;log_file</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_file</h1>
+<h3>DB_ENV-&gt;log_file</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,55 +24,56 @@
#include &lt;db.h&gt;
<p>
int
-log_file(DB_ENV *env,
+DB_ENV-&gt;log_file(DB_ENV *env,
const DB_LSN *lsn, char *namep, size_t len);
</pre></h3>
-<h1>Description</h1>
-<p>The log_file function maps
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_file</h3>
+<p>The DB_ENV-&gt;log_file method maps
DB_LSN structures
-to file names,
-copying the name of the file containing the record named by <b>lsn</b>
-into the memory location referenced by <b>namep</b>.
-<p>The <b>len</b> argument is the length of the <b>namep</b> buffer in bytes.
-If <b>namep</b> is too short to hold the file name, log_file will
-return ENOMEM.
-(Log file names are normally quite short, on the order of 10 characters.)
+to filenames, returning the name of the file containing the record named
+by <b>lsn</b>.</p>
<p>This mapping of
DB_LSN structures
to files is needed for database administration. For example, a
-transaction manager typically records the earliest
-DB_LSN
-needed for restart, and the database administrator may want to archive
-log files to tape when they contain only
-DB_LSN
-entries before the earliest one needed for restart.
-<p>The log_file function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The log_file function may fail and return a non-zero error for the following conditions:
+transaction manager typically records the earliest <a href="../api_c/lsn_class.html">DB_LSN</a> needed
+for restart, and the database administrator may want to archive log
+files to tape when they contain only <a href="../api_c/lsn_class.html">DB_LSN</a> entries before the
+earliest one needed for restart.</p>
+<p>The DB_ENV-&gt;log_file method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn</b><dd>
+The <b>lsn</b> parameter is the
+DB_LSN structure
+for which a filename is wanted.
+<p><dt><b>namep</b><dd>
+The <b>namep</b> parameter references memory into which
+ the name of the file containing the record named by <b>lsn</b> is copied.
+<p><dt><b>len</b><dd>
+The <b>len</b> parameter is the length of the <b>namep</b> buffer in
+bytes. If <b>namep</b> is too short to hold the filename,
+DB_ENV-&gt;log_file will fail. (Log filenames are normally quite short,
+on the order of 10 characters.)
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_file method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>ENOMEM<dd>The supplied buffer was too small to hold the log file name.
+<p><dt>ENOMEM<dd>The supplied buffer was too small to hold the log filename.
</dl>
-<p>The log_file function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the log_file function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_flush.html b/db/docs/api_c/log_flush.html
index 1315fc106..f7a1c2f16 100644
--- a/db/docs/api_c/log_flush.html
+++ b/db/docs/api_c/log_flush.html
@@ -1,20 +1,22 @@
-<!--$Id: log_flush.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_flush.so,v 10.30 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: log_flush</title>
+<title>Berkeley DB: DB_ENV-&gt;log_flush</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_flush</h1>
+<h3>DB_ENV-&gt;log_flush</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,41 +24,38 @@
#include &lt;db.h&gt;
<p>
int
-log_flush(DB_ENV *env, const DB_LSN *lsn);
+DB_ENV-&gt;log_flush(DB_ENV *env, const DB_LSN *lsn);
</pre></h3>
-<h1>Description</h1>
-<p>The log_flush function guarantees that all log records whose
-DB_LSN values
-are less than or equal to the <b>lsn</b> argument have been
-written to disk. If <b>lsn</b> is NULL, all records in the
-log are flushed.
-<p>The log_flush function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The log_flush function may fail and return a non-zero error for the following conditions:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_flush</h3>
+<p>The DB_ENV-&gt;log_flush method writes log records to disk.</p>
+<p>The DB_ENV-&gt;log_flush method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn</b><dd>
+All log records with <a href="../api_c/lsn_class.html">DB_LSN</a> values less than or equal to the
+<b>lsn</b> parameter are written to disk. If <b>lsn</b> is NULL,
+all records in the log are flushed.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_flush method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The log_flush function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the log_flush function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_list.html b/db/docs/api_c/log_list.html
index c0d6f4a2d..98095dbab 100644
--- a/db/docs/api_c/log_list.html
+++ b/db/docs/api_c/log_list.html
@@ -1,17 +1,17 @@
-<!--Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Logging Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Logging Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Logging Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
<tr><td><a href="../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a></td><td>Create a log cursor handle</td></tr>
@@ -27,6 +27,6 @@
<tr><td><a href="../api_c/logc_close.html">DB_LOGC-&gt;close</a></td><td>Close a log cursor</td></tr>
<tr><td><a href="../api_c/logc_get.html">DB_LOGC-&gt;get</a></td><td>Retrieve a log record</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_put.html b/db/docs/api_c/log_put.html
index 945529698..c1f74f3bd 100644
--- a/db/docs/api_c/log_put.html
+++ b/db/docs/api_c/log_put.html
@@ -1,20 +1,22 @@
-<!--$Id: log_put.so,v 10.21 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_put.so,v 10.40 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: log_put</title>
+<title>Berkeley DB: DB_ENV-&gt;log_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_put</h1>
+<h3>DB_ENV-&gt;log_put</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,60 +24,57 @@
#include &lt;db.h&gt;
<p>
int
-log_put(DB_ENV *env,
+DB_ENV-&gt;log_put(DB_ENV *env,
DB_LSN *lsn, const DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The log_put function appends records to the log. The <a href="../api_c/db_lsn.html">DB_LSN</a> of
-the put record is returned in the <b>lsn</b> argument. The <b>flags</b>
-argument may be set to one of the following values:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_put</h3>
+<p>The DB_ENV-&gt;log_put method appends records to the log. The <a href="../api_c/lsn_class.html">DB_LSN</a> of
+the put record is returned in the <b>lsn</b> parameter.</p>
+<p>The DB_ENV-&gt;log_put method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt><a name="DB_CHECKPOINT">DB_CHECKPOINT</a><dd>The log should write a checkpoint record, recording any information
-necessary to make the log structures recoverable after a crash.
-<p><dt><a name="DB_CURLSN">DB_CURLSN</a><dd>The <a href="../api_c/db_lsn.html">DB_LSN</a> of the next record to be put is returned in the
-<b>lsn</b> argument.
-<p><dt><a name="DB_FLUSH">DB_FLUSH</a><dd>The log is forced to disk after this record is written, guaranteeing
-that all records with <a href="../api_c/db_lsn.html">DB_LSN</a> values less than or equal to the
-one being put are on disk before this function returns (this function
-is most often used for a transaction commit, see <a href="../api_c/txn_commit.html">txn_commit</a> for
-more information).
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter is the record to write to the log.
<p>The caller is responsible for providing any necessary structure to
<b>data</b>. (For example, in a write-ahead logging protocol, the
application must understand what part of <b>data</b> is an operation
code, what part is redo information, and what part is undo information.
In addition, most transaction managers will store in <b>data</b> the
-<a href="../api_c/db_lsn.html">DB_LSN</a> of the previous log record for the same transaction, to
+<a href="../api_c/lsn_class.html">DB_LSN</a> of the previous log record for the same transaction, to
support chaining back through the transaction's log records during
-undo.)
+undo.)</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_FLUSH">DB_FLUSH</a><dd>The log is forced to disk after this record is written, guaranteeing
+that all records with <a href="../api_c/lsn_class.html">DB_LSN</a> values less than or equal to the
+one being "put" are on disk before DB_ENV-&gt;log_put returns.
+</dl>
+<p><dt><b>lsn</b><dd>
+The <b>lsn</b> parameter references memory into which
+ the <a href="../api_c/lsn_class.html">DB_LSN</a> of the put record is copied.
</dl>
-<p>The log_put function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The <a href="../api_c/log_flush.html">log_flush</a> function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The <a href="../api_c/log_flush.html">DB_ENV-&gt;log_flush</a> method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The record to be logged is larger than the maximum log record.
+<p><dt>EINVAL<dd>If the record to be logged is larger than the maximum log record; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The log_put function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the log_put function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/log_stat.html b/db/docs/api_c/log_stat.html
index 819c603d3..d4d53fb96 100644
--- a/db/docs/api_c/log_stat.html
+++ b/db/docs/api_c/log_stat.html
@@ -1,20 +1,22 @@
-<!--$Id: log_stat.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 10.48 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: log_stat</title>
+<title>Berkeley DB: DB_ENV-&gt;log_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>log_stat</h1>
+<h3>DB_ENV-&gt;log_stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,30 +24,28 @@
#include &lt;db.h&gt;
<p>
int
-log_stat(DB_ENV *env,
- DB_LOG_STAT **spp, void *(*db_malloc)(size_t));
+DB_ENV-&gt;log_stat(DB_ENV *env, DB_LOG_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The log_stat function
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The log region statistics are stored in a structure of type DB_LOG_STAT.
-The following DB_LOG_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;log_stat</h3>
+<p>The DB_ENV-&gt;log_stat method returns the logging subsystem statistics.</p>
+<p>The DB_ENV-&gt;log_stat method creates a statistical structure of type
+DB_LOG_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_LOG_STAT fields will be filled in:</p>
<p><dl compact>
<dt>u_int32_t st_magic;<dd>The magic number that identifies a file as a log file.
<dt>u_int32_t st_version;<dd>The version of the log file type.
-<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>int st_mode;<dd>The mode of any created log files.
<dt>u_int32_t st_lg_bsize;<dd>The in-memory log record cache size.
-<dt>u_int32_t st_lg_max;<dd>The maximum size of any individual file comprising the log.
+<dt>u_int32_t st_lg_size;<dd>The current log file size.
<dt>u_int32_t st_w_mbytes;<dd>The number of megabytes written to this log.
<dt>u_int32_t st_w_bytes;<dd>The number of bytes over and above <b>st_w_mbytes</b> written to this log.
<dt>u_int32_t st_wc_mbytes;<dd>The number of megabytes written to this log since the last checkpoint.
@@ -57,34 +57,49 @@ in-memory log record cache filled up.
<dt>u_int32_t st_scount;<dd>The number of times the log has been flushed to disk.
<dt>u_int32_t st_cur_file;<dd>The current log file number.
<dt>u_int32_t st_cur_offset;<dd>The byte offset in the current log file.
+<dt>u_int32_t st_disk_file;<dd>The log file number of the last record known to be on disk.
+<dt>u_int32_t st_disk_offset;<dd>The byte offset of the last record known to be on disk.
+<dt>u_int32_t st_maxcommitperflush;<dd>The maximum number of commits contained in a single log flush.
+<dt>u_int32_t st_mincommitperflush;<dd>The minimum number of commits contained in a single log flush that
+contained a commit.
+<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
</dl>
-<p>The log_stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The log_stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the log_stat function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a>,
-<a href="../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a>,
-<a href="../api_c/log_archive.html">log_archive</a>,
-<a href="../api_c/log_compare.html">log_compare</a>,
-<a href="../api_c/log_file.html">log_file</a>,
-<a href="../api_c/log_flush.html">log_flush</a>,
-<a href="../api_c/log_get.html">log_get</a>,
-<a href="../api_c/log_put.html">log_put</a>,
-<a href="../api_c/log_register.html">log_register</a>,
-<a href="../api_c/log_stat.html">log_stat</a>
-and
-<a href="../api_c/log_unregister.html">log_unregister</a>.
+<p>The DB_ENV-&gt;log_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;log_stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
+<h3>See Also</h3>
+<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/logc_class.html b/db/docs/api_c/logc_class.html
index f19323f67..f0bd8af30 100644
--- a/db/docs/api_c/logc_class.html
+++ b/db/docs/api_c/logc_class.html
@@ -1,21 +1,22 @@
-<!--Id: logc_class.so,v 1.5 2002/08/24 18:22:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_class.so,v 1.7 2003/09/25 15:27:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_LOGC</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_LOGC</h1>
+<h3>DB_LOGC</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,20 +25,22 @@
<p>
typedef struct __db_log_cursor DB_LOGC;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_LOGC</h3>
<p>The DB_LOGC object is the handle for a cursor into the log files,
supporting sequential access to the records stored in log files. The
handle is not free-threaded. Once the <a href="../api_c/logc_close.html">DB_LOGC-&gt;close</a> method is called,
the handle may not be accessed again, regardless of that method's
-return.
-<h1>Class</h1>
+return.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, DB_LOGC, <a href="../api_c/lsn_class.html">DB_LSN</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/logc_close.html b/db/docs/api_c/logc_close.html
index 30c466ff1..efb3d9f8a 100644
--- a/db/docs/api_c/logc_close.html
+++ b/db/docs/api_c/logc_close.html
@@ -1,21 +1,22 @@
-<!--Id: logc_close.so,v 10.6 2002/08/18 21:16:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_close.so,v 10.12 2003/10/31 17:25:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_LOGC-&gt;close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_LOGC-&gt;close</h1>
+<h3>DB_LOGC-&gt;close</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,30 +26,36 @@
int
DB_LOGC-&gt;close(DB_LOGC *cursor, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_LOGC-&gt;close</h3>
<p>The DB_LOGC-&gt;close method discards the log cursor. After DB_LOGC-&gt;close
has been called, regardless of its return, the cursor handle may not be
-used again.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DB_LOGC-&gt;close method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_LOGC-&gt;close method may fail and return a non-zero error for the following conditions:
+used again.</p>
+<p>The DB_LOGC-&gt;close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DB_LOGC-&gt;close method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
+<p><dt>EINVAL<dd>If the cursor was previously closed; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB_LOGC-&gt;close method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_LOGC-&gt;close method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/logc_get.html b/db/docs/api_c/logc_get.html
index 3081f182f..72bc0996b 100644
--- a/db/docs/api_c/logc_get.html
+++ b/db/docs/api_c/logc_get.html
@@ -1,21 +1,22 @@
-<!--Id: logc_get.so,v 10.37 2002/08/18 21:16:44 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_get.so,v 10.47 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_LOGC-&gt;get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_LOGC-&gt;get</h1>
+<h3>DB_LOGC-&gt;get</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,70 +26,91 @@
int
DB_LOGC-&gt;get(DB_LOGC *logc, DB_LSN *lsn, DBT *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB_LOGC-&gt;get method retrieve records from the log according to the
-<b>lsn</b> and <b>flags</b> arguments.
-<p>The data field of the <b>data</b> structure is set to the record
+<hr size=1 noshade>
+<h3>Description: DB_LOGC-&gt;get</h3>
+<p>The DB_LOGC-&gt;get method returns records from the log.</p>
+<p>Unless otherwise specified, the DB_LOGC-&gt;get method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data field of the <b>data</b> structure is set to the record
retrieved, and the size field indicates the number of bytes in the
record. See <a href="../api_c/dbt_class.html">DBT</a> for a description of other fields in the
<b>data</b> structure. The <a href="../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
<a href="../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> and <a href="../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags may be specified
for any <a href="../api_c/dbt_class.html">DBT</a> used for data retrieval.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the log record to which the log currently refers.
<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>The first record from any of the log files found in the log directory
-is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the
+is returned in the <b>data</b> parameter.
+The <b>lsn</b> parameter is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the
record returned.
<p>
-If the log is empty, the DB_LOGC-&gt;get method will return DB_NOTFOUND.
-<p><dt><a name="DB_LAST">DB_LAST</a><dd>The last record in the log is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the
+The DB_LOGC-&gt;get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_FIRST is set and the log is empty.
+</p>
+<p><dt><a name="DB_LAST">DB_LAST</a><dd>The last record in the log is returned in the <b>data</b> parameter.
+The <b>lsn</b> parameter is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the
record returned.
<p>
-If the log is empty, the DB_LOGC-&gt;get method will return DB_NOTFOUND.
-<p><dt><a name="DB_NEXT">DB_NEXT</a>, <a name="DB_PREV">DB_PREV</a><dd>The current log position is advanced to the next (previous) record in
-the log, and that record is returned in the <b>data</b> argument. The
-<b>lsn</b> argument is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the record
+The DB_LOGC-&gt;get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_LAST is set and the log is empty.
+</p>
+<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>The current log position is advanced to the next record in the log, and
+that record is returned in the <b>data</b> parameter. The <b>lsn</b>
+parameter is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the record returned.
+<p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET,
+DB_NEXT, or DB_PREV, DB_LOGC-&gt;get will return the first record in
+the log.</p>
+<p>
+The DB_LOGC-&gt;get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT is set and the last log record has already been
+returned or the log is empty.
+</p>
+<p><dt><a name="DB_PREV">DB_PREV</a><dd>The current log position is advanced to the previous record in the log,
+and that record is returned in the <b>data</b> parameter. The
+<b>lsn</b> parameter is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> of the record
returned.
<p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET,
-DB_NEXT, or DB_PREV, DB_LOGC-&gt;get will return the first (last) record
-in the log.
-If the last (first) log record has already been returned or the log is
-empty, the DB_LOGC-&gt;get method will return DB_NOTFOUND.
-If the log was opened with the DB_THREAD flag set, calls to
-DB_LOGC-&gt;get with the DB_NEXT (DB_PREV) flag set, the DB_LOGC-&gt;get method will return EINVAL.
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the log record to which the log currently refers.
-If the log cursor has not been initialized via DB_FIRST, DB_LAST,
-DB_SET, DB_NEXT, or DB_PREV, or if the log was opened with the DB_THREAD
-flag set, the DB_LOGC-&gt;get method will return EINVAL.
-<p><dt><a name="DB_SET">DB_SET</a><dd>Retrieve the record specified by the <b>lsn</b> argument.
-If the specified <a href="../api_c/lsn_class.html">DB_LSN</a> is invalid (for example, it does not
-appear in the log), the DB_LOGC-&gt;get method will return EINVAL.
-</dl>
+DB_NEXT, or DB_PREV, DB_LOGC-&gt;get will return the last record in the
+log.</p>
<p>
-Otherwise, the DB_LOGC-&gt;get method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_LOGC-&gt;get method may fail and return a non-zero error for the following conditions:
+The DB_LOGC-&gt;get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV is set and the first log record has already been
+returned or the log is empty.
+</p>
+<p><dt><a name="DB_SET">DB_SET</a><dd>Retrieve the record specified by the <b>lsn</b> parameter.
+</dl>
+<p><dt><b>lsn</b><dd>
+When the <b>flag</b> parameter is set to DB_CURRENT,
+DB_FIRST, DB_LAST, DB_NEXT or DB_PREV,
+the <b>lsn</b> parameter is overwritten with the <a href="../api_c/lsn_class.html">DB_LSN</a> value
+of the record retrieved. When <b>flag</b> is set to DB_SET,
+the <b>lsn</b> parameter is the <a href="../api_c/lsn_class.html">DB_LSN</a> value of the record to
+be retrieved.
+</dl>
+<h3>Errors</h3>
+<p>The DB_LOGC-&gt;get method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_CURRENT flag was set and the log pointer had not yet been
-initialized.
-<p>The DB_SET flag was set and the specified log sequence number does not
-exist.
+<p><dt>EINVAL<dd>If the DB_CURRENT flag was set and the log cursor has not yet
+been initialized;
+the DB_CURRENT, DB_NEXT, or DB_PREV flags were
+set and the log was opened with the DB_THREAD flag set;
+the DB_SET flag was set and the specified log sequence number
+does not appear in the log; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB_LOGC-&gt;get method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_LOGC-&gt;get method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, <a href="../api_c/lsn_class.html">DB_LSN</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/lsn_class.html b/db/docs/api_c/lsn_class.html
index 58d9a5081..444823f85 100644
--- a/db/docs/api_c/lsn_class.html
+++ b/db/docs/api_c/lsn_class.html
@@ -1,21 +1,22 @@
-<!--Id: lsn_class.so,v 10.13 2002/08/24 18:22:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lsn_class.so,v 10.20 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_LSN</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_LSN</h1>
+<h3>DB_LSN</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,18 +25,21 @@
<p>
typedef struct __db_lsn DB_LSN;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_LSN</h3>
<p>The DB_LSN object is a <b>log sequence number</b> which
-specifies a unique location in a log file. It has no methods and
-its data may not be manipulated by an application.
-<h1>Class</h1>
+specifies a unique location in a log file. A DB_LSN consists of
+two unsigned 32-bit integers -- one specifies the log file number, and
+the other specifies an offset in the log file.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/logc_class.html">DB_LOGC</a>, DB_LSN
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fclose.html b/db/docs/api_c/memp_fclose.html
index ae8ce3c56..f2481d782 100644
--- a/db/docs/api_c/memp_fclose.html
+++ b/db/docs/api_c/memp_fclose.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fclose.so,v 10.20 2000/06/13 13:55:49 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fclose.so,v 10.32 2003/09/25 15:27:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fclose</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fclose</h1>
+<h3>DB_MPOOLFILE-&gt;close</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,40 +24,36 @@
#include &lt;db.h&gt;
<p>
int
-memp_fclose(DB_MPOOLFILE *mpf);
+DB_MPOOLFILE-&gt;close(DB_MPOOLFILE *mpf, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fclose function closes the source file indicated by the
-DB_MPOOLFILE structure. Calling memp_fclose does not imply
-a call to <a href="../api_c/memp_fsync.html">memp_fsync</a>, i.e. no pages are written to the source
-file as as a result of calling memp_fclose.
-<p>In addition, if the <b>file</b> argument to <a href="../api_c/memp_fopen.html">memp_fopen</a> was NULL,
-any underlying files created for this DB_MPOOLFILE will be removed.
-<p>Once memp_fclose has been called, regardless of its return, the
-DB_MPOOLFILE handle may not be accessed again.
-<p>The memp_fclose function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_fclose function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fclose function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;close</h3>
+<p>The DB_MPOOLFILE-&gt;close method closes the source file indicated by the
+<a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> structure. Calling DB_MPOOLFILE-&gt;close does not imply a call
+to <a href="../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a>; that is, no pages are written to the source file
+as as a result of calling DB_MPOOLFILE-&gt;close.</p>
+<p>If the <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> was temporary, any underlying files created
+for this <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> will be removed.</p>
+<p>After DB_MPOOLFILE-&gt;close has been called, regardless of its return, the
+<a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle may not be accessed again.</p>
+<p>The DB_MPOOLFILE-&gt;close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fcreate.html b/db/docs/api_c/memp_fcreate.html
index 25893bbea..f7e810e6d 100644
--- a/db/docs/api_c/memp_fcreate.html
+++ b/db/docs/api_c/memp_fcreate.html
@@ -1,21 +1,22 @@
-<!--Id: memp_fcreate.so,v 10.8 2002/08/28 20:25:53 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fcreate.so,v 10.11 2003/09/25 15:27:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;memp_fcreate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;memp_fcreate</h1>
+<h3>DB_ENV-&gt;memp_fcreate</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,26 +26,30 @@
int
DB_ENV-&gt;memp_fcreate(DB_ENV *dbenvp, DB_MPOOLFILE **dbmfp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;memp_fcreate</h3>
<p>The DB_ENV-&gt;memp_fcreate method creates a <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> structure that
is the handle for a Berkeley DB shared memory buffer pool file. A pointer to
this structure is returned in the memory to which <b>dbmfp</b> refers.
-Calling the <a href="../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method will discard the returned handle.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DB_ENV-&gt;memp_fcreate method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;memp_fcreate method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;memp_fcreate method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+Calling the <a href="../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method will discard the returned handle.</p>
+<p>The DB_ENV-&gt;memp_fcreate method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fget.html b/db/docs/api_c/memp_fget.html
index 84b39e53e..331dd428f 100644
--- a/db/docs/api_c/memp_fget.html
+++ b/db/docs/api_c/memp_fget.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fget.so,v 10.23 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fget.so,v 10.42 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fget</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fget</h1>
+<h3>DB_MPOOLFILE-&gt;get</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,77 +24,84 @@
#include &lt;db.h&gt;
<p>
int
-memp_fget(DB_MPOOLFILE *mpf,
+DB_MPOOLFILE-&gt;get(DB_MPOOLFILE *mpf,
db_pgno_t *pgnoaddr, u_int32_t flags, void **pagep);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fget function copies a pointer to the page with the page
-number specified by <b>pgnoaddr</b>, from the source file in the
-DB_MPOOLFILE, into the memory location referenced by <b>pagep</b>.
-If the page does not exist or cannot be retrieved, memp_fget will
-fail.
-<p><b>Page numbers begin at 0, i.e., the first page in the file is page number
-0, not page number 1.</b>
-<p>The returned page is <b>size_t</b> type aligned.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get</h3>
+<p>The DB_MPOOLFILE-&gt;get method returns pages from the cache.</p>
+<p>All pages returned by DB_MPOOLFILE-&gt;get will be retained (that is,
+<i>pinned</i>), in the pool until a subsequent call to
+<a href="../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a>.</p>
+<p>The returned page is <b>size_t</b> type aligned.</p>
+<p>Fully or partially created pages have all their bytes set to a nul byte,
+unless the <a href="../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a> method was called to specify other
+behavior before the file was opened.</p>
+<a name="3"><!--meow--></a>
+<p>
+The DB_MPOOLFILE-&gt;get method
+will return DB_PAGE_NOTFOUND if the requested page does not exist and DB_MPOOL_CREATE was
+not set.
+Unless otherwise specified, the DB_MPOOLFILE-&gt;get method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_MPOOL_CREATE">DB_MPOOL_CREATE</a><dd>If the specified page does not exist, create it. In this case, the
-<a href="memp_register.html#pgin">pgin</a> function, if specified, is
+<a href="memp_register.html#pgin">pgin</a> method, if specified, is
called.
-<p><dt><a name="DB_MPOOL_LAST">DB_MPOOL_LAST</a><dd>Return the last page of the source file and copy its page number
-to the location referenced by <b>pgnoaddr</b>.
-<p><dt><a name="DB_MPOOL_NEW">DB_MPOOL_NEW</a><dd>Create a new page in the file and copy its page number to the location
-referenced by <b>pgnoaddr</b>. In this case, the
-<a href="memp_register.html#pgin">pgin</a> function, if specified, is
+<p><dt><a name="DB_MPOOL_LAST">DB_MPOOL_LAST</a><dd>Return the last page of the source file, and copy its page number into
+the memory location to which <b>pgnoaddr</b> refers.
+<p><dt><a name="DB_MPOOL_NEW">DB_MPOOL_NEW</a><dd>Create a new page in the file, and copy its page number into the memory
+location to which <b>pgnoaddr</b> refers. In this case, the
+<a href="memp_register.html#pgin">pgin</a> method, if specified, is
<b>not</b> called.
</dl>
-<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST and
-DB_MPOOL_NEW flags are mutually exclusive.
-<p>Created pages have all their bytes set to 0, unless otherwise specified
-when the file was opened.
-<p>All pages returned by memp_fget will be retained (i.e.
-<i>pinned</i>), in the pool until a subsequent call to
-<a href="../api_c/memp_fput.html">memp_fput</a>.
-<p>The memp_fget function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_fget function may fail and return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen unless
-there's a bug in the application.)
+<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST, and
+DB_MPOOL_NEW flags are mutually exclusive.</p>
+<p><dt><b>pagep</b><dd>
+The <b>pagep</b> parameter references memory into which
+a pointer to the returned page is copied.
+<p><dt><b>pgnoaddr</b><dd>
+If the <b>flags</b> parameter is set to DB_MPOOL_LAST or
+DB_MPOOL_NEW, the page number of the created page is copied
+into the memory location to which the <b>pgnoaddr</b> parameter
+refers. Otherwise, the <b>pgnoaddr</b> parameter is the page to
+create or retrieve.
+<p><b>Page numbers begin at 0; that is, the first page in the file is page
+number 0, not page number 1.</b></p>
</dl>
+<h3>Errors</h3>
+<p>The DB_MPOOLFILE-&gt;get method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_MPOOL_NEW flag was set and the source file was not opened for writing.
-<p>More than one of DB_MPOOL_CREATE, DB_MPOOL_LAST and DB_MPOOL_NEW was set.
+<p><dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen
+unless there is a bug in the application.)
</dl>
<p><dl compact>
-<p><dt>EIO<dd>The requested page does not exist and DB_MPOOL_CREATE was not set.
+<p><dt>EINVAL<dd>If the DB_MPOOL_NEW flag was set, and the source file was not
+opened for writing;
+more than one of DB_MPOOL_CREATE, DB_MPOOL_LAST, and
+DB_MPOOL_NEW was set; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>The cache is full and no more pages will fit in the pool.
+<p><dt>ENOMEM<dd>The cache is full, and no more pages will fit in the pool.
</dl>
-<p>The memp_fget function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fget function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fopen.html b/db/docs/api_c/memp_fopen.html
index ea0250246..e237f68e1 100644
--- a/db/docs/api_c/memp_fopen.html
+++ b/db/docs/api_c/memp_fopen.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fopen.so,v 10.28 2000/12/18 21:05:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fopen.so,v 10.49 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fopen</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fopen</h1>
+<h3>DB_MPOOLFILE-&gt;open</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,136 +24,80 @@
#include &lt;db.h&gt;
<p>
int
-memp_fopen(DB_ENV *env, char *file, u_int32_t flags,
- int mode, size_t pagesize, DB_MPOOL_FINFO *finfop,
- DB_MPOOLFILE **mpf);
+DB_MPOOLFILE-&gt;open(DB_MPOOLFILE *mpf,
+ char *file, u_int32_t flags, int mode, size_t pagesize);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fopen function opens a file in the pool specified by the
-DB_ENV <b>env</b>, copying the DB_MPOOLFILE pointer
-representing it into the memory location referenced by <b>mpf</b>.
-<p>The <b>file</b> argument is the name of the file to be opened.
-If <b>file</b> is NULL, a private file is created that cannot be
-shared with any other process (although it may be shared with
-other threads).
-<p>The <b>flags</b> and <b>mode</b> arguments specify how files will be opened
-and/or created if they do not already exist.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;open</h3>
+<p>The DB_MPOOLFILE-&gt;open method opens a file in the shared memory buffer pool.</p>
+<p>The DB_MPOOLFILE-&gt;open method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the name of the file to be opened. If
+<b>file</b> is NULL, a private temporary file is created that
+cannot be shared with any other process (although it may be shared with
+other threads of control in the same process).
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create any underlying files, as necessary. If the files do not already
-exist and the DB_CREATE flag is not specified, the call will fail.
+exist and the DB_CREATE flag is not specified, the call will
+fail.
+<a name="3"><!--meow--></a>
+<p><dt><a name="DB_DIRECT">DB_DIRECT</a><dd>If set and supported by the system, turn off system buffering of the
+file to avoid double caching.
<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Always copy this file into the local cache instead of potentially mapping
it into process memory (see the description of the
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a> function for further information).
+<a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a> method for further information).
+<p><dt><a name="DB_ODDFILESIZE">DB_ODDFILESIZE</a><dd>Attempts to open files which are not a multiple of the page size in
+length will fail, by default. If the DB_ODDFILESIZE flag is
+set, any partial page at the end of the file will be ignored and the
+open will proceed.
<p><dt><a name="DB_RDONLY">DB_RDONLY</a><dd>Open any underlying files for reading only. Any attempt to write the file
using the pool functions will fail, regardless of the actual permissions
of the file.
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by function memp_fopen
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>The <b>pagesize</b> argument is the size, in bytes, of the unit of transfer
-between the application and the pool, although it is not necessarily the
-unit of transfer between the pool and the source file.
-<p>Files opened in the pool may be further configured based on the
-<b>finfop</b> argument to memp_fopen (which is a pointer to a
-structure of type DB_MPOOL_FINFO). No references to the <b>finfop</b>
-structure are maintained by Berkeley DB, so it may be discarded when the
-memp_fopen function returns. In order to ensure compatibility
-with future releases of Berkeley DB, all fields of the DB_MPOOL_FINFO structure
-that are not explicitly set should be initialized to 0 before the first
-time the structure is used. Do this by declaring the structure external
-or static, or by calling the C library routine <b>bzero</b>(3) or
-<b>memset</b>(3).
-<p>The fields of the DB_MPOOL_FINFO structure used by memp_fopen are
-described below. If <b>finfop</b> is NULL or any of its fields are
-set to their default value, defaults appropriate for the system are used.
-<p><dl compact>
-<p><dt>int <a name="ftype">ftype</a>;<dd>The <b>ftype</b> field should be the same as a <b>ftype</b> argument
-previously specified to the <a href="../api_c/memp_register.html">memp_register</a> function, unless no
-input or output processing of the file's pages are necessary, in which
-case it should be 0. (See the description of the <a href="../api_c/memp_register.html">memp_register</a>
-function for more information.)
-<p><dt>DBT *<a name="pgcookie">pgcookie</a>;<dd>The <b>pgcookie</b> field contains the byte string that is passed to the
-<b>pgin</b> and <b>pgout</b> functions for this file, if any. If no
-<b>pgin</b> or <b>pgout</b> functions are specified, the
-<b>pgcookie</b> field should be NULL. (See the description of the
-<a href="../api_c/memp_register.html">memp_register</a> function for more information.)
-<p><dt>u_int8_t *<a name="fileid">fileid</a>;<dd>The <b>fileid</b> field is a unique identifier for the file. If the
-<b>fileid</b> field is non-NULL, it must reference a DB_FILE_ID_LEN
-length array of bytes that will be used to uniquely identify the file.
-<p>The mpool functions must be able to uniquely identify files in order that
-multiple processes wanting to share a file will correctly identify it in
-the pool.
-<p>On most UNIX/POSIX systems, the <b>fileid</b> field will not need to be
-set and the mpool functions will simply use the file's device and inode
-numbers for this purpose. On Windows systems, the mpool functions use
-the values returned by GetFileInformationByHandle() by default -- these
-values are known to be constant between processes and over reboot in the
-case of NTFS (where they are the NTFS MFT indexes).
-<p>On other filesystems, (e.g., FAT or NFS) these default values are not
-necessarily unique between processes or across system reboots.
-<b>Applications wanting to maintain a shared memory buffer pool
-between processes or across system reboots, where the pool contains pages
-from files stored on such filesystems, must specify a unique file
-identifier to the memp_fopen call and each process opening or
-registering the file must provide the same unique identifier.</b>
-<p>This should not be necessary for most applications. Specifically, it is
-not necessary if the memory pool is not shared between processes and is
-re-instantiated after each system reboot, or the application is using the
-Berkeley DB access methods instead of calling the pool functions explicitly, or
-the files in the memory pool are stored on filesystems where the default
-values as described above are invariant between process and across system
-reboots.
-<p><dt>int32_t <a name="lsn_offset">lsn_offset</a>;<dd>The <b>lsn_offset</b> field is the zero-based byte offset in the page of
-the page's log sequence number (LSN), or -1 if no LSN offset is specified.
-(See the description of the <a href="../api_c/memp_sync.html">memp_sync</a> function for more
-information.)
-<p><dt>u_int32_t <a name="clear_len">clear_len</a>;<dd>The <b>clear_len</b> field is the number of initial bytes in a page
-that should be set to zero when the page is created as a result of the
-DB_MPOOL_CREATE or DB_MPOOL_NEW flags being specified to <a href="../api_c/memp_fget.html">memp_fget</a>.
-If <b>finfop</b> is NULL or <b>clear_len</b> is 0, the entire page is
-cleared.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+DB_MPOOLFILE-&gt;open are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, DB_MPOOLFILE-&gt;open will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
+<p><dt><b>pagesize</b><dd>
+The <b>pagesize</b> parameter is the size, in bytes, of the unit of
+transfer between the application and the cache, although it is not
+necessarily the unit of transfer between the cache and the underlying
+filesystem.
</dl>
-<p>The memp_fopen function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_fopen function may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB_MPOOLFILE-&gt;open method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The file has already been entered into the pool, and the <b>pagesize</b>
+<p><dt>EINVAL<dd>If the file has already been entered into the pool, and the <b>pagesize</b>
value is not the same as when the file was entered into the pool, or the
-length of the file is not zero or a multiple of the <b>pagesize</b>.
-<p>The DB_RDONLY flag was specified for an in-memory pool.
+length of the file is not zero or a multiple of the <b>pagesize</b>;
+the DB_RDONLY flag was specified for an in-memory pool; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOMEM<dd>The maximum number of open files has been reached.
</dl>
-<p>The memp_fopen function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fopen function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fput.html b/db/docs/api_c/memp_fput.html
index ce382b4d0..42fe0dd5c 100644
--- a/db/docs/api_c/memp_fput.html
+++ b/db/docs/api_c/memp_fput.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fput.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fput.so,v 10.30 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fput</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fput</h1>
+<h3>DB_MPOOLFILE-&gt;put</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,58 +24,58 @@
#include &lt;db.h&gt;
<p>
int
-memp_fput(DB_MPOOLFILE *mpf, void *pgaddr, u_int32_t flags);
+DB_MPOOLFILE-&gt;put(DB_MPOOLFILE *mpf, void *pgaddr, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fput function indicates that the page referenced by
-<b>pgaddr</b> can be evicted from the pool. The <b>pgaddr</b>
-argument must be an address previously returned by <a href="../api_c/memp_fget.html">memp_fget</a>.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;put</h3>
+<p>The DB_MPOOLFILE-&gt;put method returns a page to the cache.</p>
+<p>The DB_MPOOLFILE-&gt;put method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgaddr</b><dd>
+The <b>pgaddr</b> parameter is the address of the page to be
+returned to the cache. The <b>pgaddr</b> parameter must be an
+address previously returned by <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (i.e., don't bother
+<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (that is, don't bother
writing the page back to the source file).
-<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file
-before being evicted from the pool.
-<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future,
-and should be discarded before other pages in the pool.
+<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file before
+being evicted from the pool.
+<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future, and should be
+discarded before other pages in the pool.
</dl>
<p>The DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags are
-mutually exclusive.
-<p>The memp_fput function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_fput function may fail and return a non-zero error for the following conditions:
+mutually exclusive.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB_MPOOLFILE-&gt;put method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EACCES<dd>The DB_MPOOL_DIRTY flag was set and the source file was not opened for
-writing.
+<p><dt>EACCES<dd>The <a href="../api_c/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a> flag was set and the source file was not
+opened for writing.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <b>pgaddr</b> parameter does not reference a page returned by
-<a href="../api_c/memp_fget.html">memp_fget</a>.
-<p>More than one of DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags was set.
+<p><dt>EINVAL<dd>If the <b>pgaddr</b> parameter does not refer to a page returned by
+<a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>;
+more than one of the <a href="../api_c/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a> and <a href="../api_c/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a>
+flags was set; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The memp_fput function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fput function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fset.html b/db/docs/api_c/memp_fset.html
index 73acd322c..6c2d8fb17 100644
--- a/db/docs/api_c/memp_fset.html
+++ b/db/docs/api_c/memp_fset.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fset.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fset.so,v 10.29 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fset</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;set</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fset</h1>
+<h3>DB_MPOOLFILE-&gt;set</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,51 +24,51 @@
#include &lt;db.h&gt;
<p>
int
-memp_fset(DB_MPOOLFILE *mpf, void *pgaddr, u_int32_t flags);
+DB_MPOOLFILE-&gt;set(DB_MPOOLFILE *mpf, void *pgaddr, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fset function sets the flags associated with the page referenced
-by <b>pgaddr</b> without unpinning it from the pool. The <b>pgaddr</b>
-argument must be an address previously returned by <a href="../api_c/memp_fget.html">memp_fget</a>.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set</h3>
+<p>The DB_MPOOLFILE-&gt;set method sets the attributes of a cache page.</p>
+<p>The DB_MPOOLFILE-&gt;set method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgaddr</b><dd>
+The <b>pgaddr</b> parameter is the address of the page for which
+attributes are to be set. he <b>pgaddr</b> parameter must be an
+address previously returned by <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (i.e., don't bother
+<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (that is, don't bother
writing the page back to the source file).
-<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file
-before being evicted from the pool.
-<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future,
-and should be discarded before other pages in the pool.
+<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file before
+being evicted from the pool.
+<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future, and should be
+discarded before other pages in the pool.
</dl>
<p>The DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags are
-mutually exclusive.
-<p>The memp_fset function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_fset function may fail and return a non-zero error for the following conditions:
+mutually exclusive.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB_MPOOLFILE-&gt;set method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The memp_fset function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fset function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_fsync.html b/db/docs/api_c/memp_fsync.html
index ad429ccf3..f9f018111 100644
--- a/db/docs/api_c/memp_fsync.html
+++ b/db/docs/api_c/memp_fsync.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fsync.so,v 10.22 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fsync.so,v 10.34 2003/09/25 15:27:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_fsync</title>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_fsync</h1>
+<h3>DB_MPOOLFILE-&gt;sync</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,38 +24,28 @@
#include &lt;db.h&gt;
<p>
int
-memp_fsync(DB_MPOOLFILE *mpf);
+DB_MPOOLFILE-&gt;sync(DB_MPOOLFILE *mpf);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_fsync function writes all pages associated with the
-DB_MPOOLFILE, that were marked as modified using <a href="../api_c/memp_fput.html">memp_fput</a>
-or <a href="../api_c/memp_fset.html">memp_fset</a>, back to the source file. If any of the modified
-pages are also <i>pinned</i> (i.e., currently referenced by this or
-another process) memp_fsync will ignore them.
-<p>The memp_fsync function returns a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages which were
-modified but which memp_fsync was unable to write immediately.
-<h1>Errors</h1>
-<p>The memp_fsync function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_fsync function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;sync</h3>
+<p>The DB_MPOOLFILE-&gt;sync method writes all pages associated with the
+<a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>, which were marked as modified using
+<a href="../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a> or <a href="../api_c/memp_fset.html">DB_MPOOLFILE-&gt;set</a>, back to the source file. If any
+of the modified pages are <i>pinned</i> (that is, currently in use),
+DB_MPOOLFILE-&gt;sync will ignore them.</p>
+<p>The DB_MPOOLFILE-&gt;sync method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_list.html b/db/docs/api_c/memp_list.html
index 5f08f6c18..84ad0d1ee 100644
--- a/db/docs/api_c/memp_list.html
+++ b/db/docs/api_c/memp_list.html
@@ -1,17 +1,17 @@
-<!--Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Memory Pools and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Memory Pools and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Memory Pools and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
<tr><td><a href="../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
@@ -32,6 +32,6 @@
<tr><td><a href="../api_c/memp_set_lsn_offset.html">DB_MPOOLFILE-&gt;set_lsn_offset</a></td><td>Set file log-sequence-number offset</td></tr>
<tr><td><a href="../api_c/memp_set_pgcookie.html">DB_MPOOLFILE-&gt;set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_register.html b/db/docs/api_c/memp_register.html
index 7c50a89ed..91f83a817 100644
--- a/db/docs/api_c/memp_register.html
+++ b/db/docs/api_c/memp_register.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_register.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_register.so,v 10.37 2003/11/19 03:47:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_register</title>
+<title>Berkeley DB: DB_ENV-&gt;memp_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_register</h1>
+<h3>DB_ENV-&gt;memp_register</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,72 +24,71 @@
#include &lt;db.h&gt;
<p>
int
-memp_register(DB_ENV *env, int ftype,
+DB_ENV-&gt;memp_register(DB_ENV *env, int ftype,
int (*pgin_fcn)(DB_ENV *, db_pgno_t pgno, void *pgaddr, DBT *pgcookie),
int (*pgout_fcn)(DB_ENV *, db_pgno_t pgno, void *pgaddr, DBT *pgcookie));
</pre></h3>
-<h1>Description</h1>
-<p>The memp_register function registers page-in and page-out
-functions for files of type <b>ftype</b> in the specified pool.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;memp_register</h3>
+<p>The DB_ENV-&gt;memp_register method registers page-in and page-out
+functions for files of type <b>ftype</b> in the specified pool.</p>
<p>If the <b>pgin_fcn</b> function is non-NULL, it is called each time
a page is read into the memory pool from a file of type <b>ftype</b>, or
a page is created for a file of type <b>ftype</b> (see the
-DB_MPOOL_CREATE flag for the <a href="../api_c/memp_fget.html">memp_fget</a> function).
+DB_MPOOL_CREATE flag for the <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> method).</p>
<p>If the <b>pgout_fcn</b> function is non-NULL, it is called each time
-a page is written to a file of type <b>ftype</b>.
-<p>Both the <b>pgin_fcn</b> and <b>pgout_fcn</b> functions are called with
-a reference to the current environment, the page number, a pointer to the
-page being read or written, and any argument <b>pgcookie</b> that was
-specified to the <a href="../api_c/memp_fopen.html">memp_fopen</a> function when the file was opened.
-The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions should return 0 on
-success, and an applicable non-zero <b>errno</b> value on failure, in
-which case the shared memory pool interface routine (and, by extension,
-any Berkeley DB library function) calling it will also fail, returning that
-<b>errno</b> value.
-<p>The purpose of the memp_register function is to support processing
-when pages are entered into, or flushed from, the pool. A file type must
-be specified to make it possible for unrelated threads or processes, that
-are sharing a pool, to evict each other's pages from the pool.
-Applications should call memp_register, during initialization,
-for each type of file requiring input or output processing that will be
-sharing the underlying pool. (No registry is necessary for the standard
-Berkeley DB access method types, as <a href="../api_c/db_open.html">DB-&gt;open</a> registers them
-separately.)
-<p>If a thread or process does not call memp_register for a file
+a page is written to a file of type <b>ftype</b>.</p>
+<p>The purpose of the DB_ENV-&gt;memp_register function is to support processing
+when pages are entered into, or flushed from, the pool. For example, this
+functionality might be used to do byte-endian conversion as pages are read
+from, or written to, the underlying file.</p>
+<p>A file type must be specified to make it possible for unrelated threads
+or processes that are sharing a pool, to evict each other's pages from
+the pool. During initialization, applications should call
+DB_ENV-&gt;memp_register for each type of file requiring input or output
+processing that will be sharing the underlying pool. (No registry is
+necessary for the standard Berkeley DB access method types because
+<a href="../api_c/db_open.html">DB-&gt;open</a> registers them separately.)</p>
+<p>If a thread or process does not call DB_ENV-&gt;memp_register for a file
type, it is impossible for it to evict pages for any file requiring input
or output processing from the pool. For this reason,
-memp_register should always be called by each application sharing
+DB_ENV-&gt;memp_register should always be called by each application sharing
a pool for each type of file included in the pool, regardless of whether
-or not the application itself uses files of that type.
-<p>There are no standard values for <b>ftype</b>, <b>pgin_fcn</b>,
-<b>pgout_fcn</b> and <b>pgcookie</b>, except that the <b>ftype</b>
-value for a file must be a non-zero positive number, as negative numbers
-are reserved for internal use by the Berkeley DB library. For this reason,
-applications sharing a pool must coordinate their values amongst
-themselves.
-<p>The memp_register function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_register function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_register function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+or not the application itself uses files of that type.</p>
+<p>The DB_ENV-&gt;memp_register method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftype</b><dd>
+The <b>ftype</b> parameter specifies the type of file for which the
+page-in and page-out functions will be called.
+<p>The <b>ftype</b> value for a file must be a non-zero positive number
+less than 128 (0 and negative numbers are reserved for internal use by
+the Berkeley DB library).</p>
+<p><dt><b>pgin_fcn</b><dd>
+The page-in and page-out functions.
+<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions are called with a
+reference to the current database environment, the page number being
+read or written, a pointer to the page being read or written, and any
+parameter <b>pgcookie</b> that was specified to the
+<a href="../api_c/memp_set_pgcookie.html">DB_MPOOLFILE-&gt;set_pgcookie</a> method.</p>
+<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions should return 0 on
+success, and a non-zero value on failure, in which case the shared Berkeley DB
+library function calling it will also fail, returning that non-zero
+value. The non-zero value should be selected from values outside of the
+Berkeley DB library namespace.</p>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_clear_len.html b/db/docs/api_c/memp_set_clear_len.html
index acfe0e81e..85a356ca7 100644
--- a/db/docs/api_c/memp_set_clear_len.html
+++ b/db/docs/api_c/memp_set_clear_len.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_clear_len.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_clear_len.so,v 10.14 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE-&gt;set_clear_len</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE-&gt;set_clear_len</h1>
+<h3>DB_MPOOLFILE-&gt;set_clear_len</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,35 +25,62 @@
<p>
int
DB_MPOOLFILE-&gt;set_clear_len(DB_MPOOLFILE *mpf, u_int32_t len);
+<p>
+int
+DB_MPOOLFILE-&gt;get_clear_len(DB_MPOOLFILE *mpf, u_int32_t *lenp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_clear_len</h3>
+<a name="3"><!--meow--></a>
<p>The DB_MPOOLFILE-&gt;set_clear_len method sets the number of initial bytes in a
page that should be set to nul when the page is created as a result of
the <a href="../api_c/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a> or <a href="../api_c/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a> flags being
specified to <a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a>. If no value is specified, or <b>len</b>
-is 0, the entire page is cleared.
+is 0, the entire page is cleared.</p>
<p>The DB_MPOOLFILE-&gt;set_clear_len method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.
-<p>The DB_MPOOLFILE-&gt;set_clear_len interface may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>
-interface is called.
+operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_clear_len method may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> is called, the information specified to DB_MPOOLFILE-&gt;set_clear_len
must be consistent with the existing file or an error will be
returned.
-<p>The DB_MPOOLFILE-&gt;set_clear_len method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_MPOOLFILE-&gt;set_clear_len method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_MPOOLFILE-&gt;set_clear_len method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+<p>The DB_MPOOLFILE-&gt;set_clear_len method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>len</b><dd>
+The <b>len</b> parameter is the number of initial bytes in a page that
+should be set to nul when the page is created. A value of 0 results in
+the entire page being set to nul bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_clear_len</h3>
+<p>The DB_MPOOLFILE-&gt;get_clear_len method returns the bytes to be cleared.</p>
+<p>The DB_MPOOLFILE-&gt;get_clear_len method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_clear_len method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lenp</b><dd>
+The DB_MPOOLFILE-&gt;get_clear_len method returns the
+bytes to be cleared in <b>lenp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_fileid.html b/db/docs/api_c/memp_set_fileid.html
index f8ded5f68..533c2dc27 100644
--- a/db/docs/api_c/memp_set_fileid.html
+++ b/db/docs/api_c/memp_set_fileid.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_fileid.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_fileid.so,v 10.11 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE-&gt;set_fileid</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE-&gt;set_fileid</h1>
+<h3>DB_MPOOLFILE-&gt;set_fileid</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,52 +25,72 @@
<p>
int
DB_MPOOLFILE-&gt;set_fileid(DB_MPOOLFILE *mpf, u_int8_t *fileid);
+<p>
+int
+DB_MPOOLFILE-&gt;get_fileid(DB_MPOOLFILE *mpf, u_int8_t *fileid);
</pre></h3>
-<h1>Description</h1>
-<p>The shared memory buffer pool functions must be able to uniquely
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_fileid</h3>
+<a name="3"><!--meow--></a>
+<p>The DB_MPOOLFILE-&gt;set_fileid method specifies a unique identifier for the file.
+(The shared memory buffer pool functions must be able to uniquely
identify files in order that multiple processes wanting to share a file
-will correctly identify it in the pool. The DB_MPOOLFILE-&gt;set_fileid method
-specifies a unique identifier for the file. Unique file identifiers
-must be a DB_FILE_ID_LEN length array of bytes.
+will correctly identify it in the pool.)</p>
<p>On most UNIX/POSIX systems, the <b>fileid</b> field will not need to
be set, and the memory pool functions will use the file's device and
inode numbers for this purpose. On Windows systems, the memory pool
functions use the values returned by GetFileInformationByHandle() by
default -- these values are known to be constant between processes and
over reboot in the case of NTFS (in which they are the NTFS MFT
-indices).
+indices).</p>
<p>On other filesystems (for example, FAT or NFS), these default values
are not necessarily unique between processes or across system reboots.
<b>Applications wanting to maintain a shared memory buffer pool
between processes or across system reboots, in which the pool contains
pages from files stored on such filesystems, must specify a unique file
identifier using the DB_MPOOLFILE-&gt;set_fileid method, and each process opening
-the file must provide the same unique identifier.</b>
+the file must provide the same unique identifier.</b></p>
<p>This call should not be necessary for most applications. Specifically,
it is not necessary if the memory pool is not shared between processes
and is reinstantiated after each system reboot, if the application is
using the Berkeley DB access methods instead of calling the pool functions
explicitly, or if the files in the memory pool are stored on filesystems
in which the default values as described previously are invariant
-between process and across system reboots.
+between process and across system reboots.</p>
<p>The DB_MPOOLFILE-&gt;set_fileid method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.
-<p>The DB_MPOOLFILE-&gt;set_fileid interface may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>
-interface is called.
-<p>The DB_MPOOLFILE-&gt;set_fileid method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_MPOOLFILE-&gt;set_fileid method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_MPOOLFILE-&gt;set_fileid method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_fileid method may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method is
+called.
+</p>
+<p>The DB_MPOOLFILE-&gt;set_fileid method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>fileid</b><dd>
+The <b>fileid</b> parameter is the unique identifier for the file.
+Unique file identifiers must be a DB_FILE_ID_LEN length array of bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_fileid</h3>
+<p>The DB_MPOOLFILE-&gt;get_fileid method copies the file's identifier into the
+memory location referenced by <b>fileid</b>.</p>
+<p>The <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;get_data_dirs</a> method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>The <a href="../api_c/env_set_data_dir.html">DB_ENV-&gt;get_data_dirs</a> method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_flags.html b/db/docs/api_c/memp_set_flags.html
new file mode 100644
index 000000000..3c2cff559
--- /dev/null
+++ b/db/docs/api_c/memp_set_flags.html
@@ -0,0 +1,86 @@
+<!--$Id: memp_set_flags.so,v 1.13 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;set_flags</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DB_MPOOLFILE-&gt;set_flags</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db.h&gt;
+<p>
+int
+DB_MPOOLFILE-&gt;set_flags(DB_MPOOLFILE *mpf, u_int32_t flags, int onoff)
+<p>
+int
+DB_MPOOLFILE-&gt;get_flags(DB_MPOOLFILE *mpf, u_int32_t *flagsp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a file in the cache.</p>
+<p>To set the flags for a particular database, call the
+DB_MPOOLFILE-&gt;set_flags method using the <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle stored in
+the <b>mpf</b> field of the <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set by bitwise inclusively <b>OR</b>'ing together one or more
+of the following values:
+<p><dl compact>
+<p><dt><a name="DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a><dd>If set, no backing temporary file will be opened for in-memory
+databases, even if they expand to fill the entire cache. Attempts to
+create new file pages after the cache has been filled will fail.
+<p>The DB_MPOOL_NOFILE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+</dl>
+<p><dt><b>onoff</b><dd>
+If <b>onoff</b> is
+zero,
+the specified flags are cleared; otherwise they are set.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_flags</h3>
+<p>The DB_MPOOLFILE-&gt;get_flags method returns the flags.</p>
+<p>The DB_MPOOLFILE-&gt;get_flags method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_flags method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DB_MPOOLFILE-&gt;get_flags method returns the
+flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/memp_set_ftype.html b/db/docs/api_c/memp_set_ftype.html
index 08a7111de..3039a2464 100644
--- a/db/docs/api_c/memp_set_ftype.html
+++ b/db/docs/api_c/memp_set_ftype.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_ftype.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_ftype.so,v 10.14 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE-&gt;set_ftype</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE-&gt;set_ftype</h1>
+<h3>DB_MPOOLFILE-&gt;set_ftype</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,35 +25,59 @@
<p>
int
DB_MPOOLFILE-&gt;set_ftype(DB_MPOOLFILE *mpf, int ftype);
+<p>
+int
+DB_MPOOLFILE-&gt;get_ftype(DB_MPOOLFILE *mpf, int *ftypep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_ftype</h3>
+<a name="3"><!--meow--></a>
<p>The DB_MPOOLFILE-&gt;set_ftype method specifies a file type for the purposes of
-input or output processing of the files pages as they are read from or
-written to, the backing filesystem store. The <b>ftype</b> argument
-must be the same as a <b>ftype</b> argument previously specified to
-the <a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a> method. (See the <a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a>
-documentation for more information.)
+input or output processing of the file's pages as they are read from or
+written to, the backing filesystem store.</p>
<p>The DB_MPOOLFILE-&gt;set_ftype method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.
-<p>The DB_MPOOLFILE-&gt;set_ftype interface may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>
-interface is called.
+operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_ftype method may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> is called, the information specified to DB_MPOOLFILE-&gt;set_ftype
-will replace the existing information.
-<p>The DB_MPOOLFILE-&gt;set_ftype method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_MPOOLFILE-&gt;set_ftype method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_MPOOLFILE-&gt;set_ftype method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+will replace the existing information.</p>
+<p>The DB_MPOOLFILE-&gt;set_ftype method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftype</b><dd>
+The <b>ftype</b> parameter sets the file's type for the purposes of input
+and output processing. The <b>ftype</b> must be the same as a
+<b>ftype</b> parameter previously specified to the <a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a> method.
+(See the <a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a> documentation for more information.)
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_ftype</h3>
+<p>The DB_MPOOLFILE-&gt;get_ftype method returns the file type.</p>
+<p>The DB_MPOOLFILE-&gt;get_ftype method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_ftype method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftypep</b><dd>
+The DB_MPOOLFILE-&gt;get_ftype method returns the
+file type in <b>ftypep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_lsn_offset.html b/db/docs/api_c/memp_set_lsn_offset.html
index 232d60d96..10274765e 100644
--- a/db/docs/api_c/memp_set_lsn_offset.html
+++ b/db/docs/api_c/memp_set_lsn_offset.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_lsn_offset.so,v 10.6 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_lsn_offset.so,v 10.14 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE-&gt;set_lsn_offset</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE-&gt;set_lsn_offset</h1>
+<h3>DB_MPOOLFILE-&gt;set_lsn_offset</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,34 +25,60 @@
<p>
int
DB_MPOOLFILE-&gt;set_lsn_offset(DB_MPOOLFILE *mpf, int32_t lsn_offset);
+<p>
+int
+DB_MPOOLFILE-&gt;get_lsn_offset(DB_MPOOLFILE *mpf, int32_t *lsn_offsetp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_lsn_offset</h3>
+<a name="3"><!--meow--></a>
<p>The DB_MPOOLFILE-&gt;set_lsn_offset method specifies the zero-based byte offset
of a log sequence number (<a href="../api_c/lsn_class.html">DB_LSN</a>) on the file's pages, for the
purposes of page-flushing as part of transaction checkpoint. (See the
-<a href="../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> documentation for more information.)
+<a href="../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> documentation for more information.)</p>
<p>The DB_MPOOLFILE-&gt;set_lsn_offset method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.
-<p>The DB_MPOOLFILE-&gt;set_lsn_offset interface may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>
-interface is called.
+operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_lsn_offset method may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> is called, the information specified to DB_MPOOLFILE-&gt;set_lsn_offset
must be consistent with the existing file or an error will be
returned.
-<p>The DB_MPOOLFILE-&gt;set_lsn_offset method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_MPOOLFILE-&gt;set_lsn_offset method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_MPOOLFILE-&gt;set_lsn_offset method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+<p>The DB_MPOOLFILE-&gt;set_lsn_offset method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn_offset</b><dd>
+The <b>lsn_offset</b> parameter is the zero-based byte offset of the
+log sequence number on the file's pages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_lsn_offset</h3>
+<p>The DB_MPOOLFILE-&gt;get_lsn_offset method returns the log sequence number byte offset.</p>
+<p>The DB_MPOOLFILE-&gt;get_lsn_offset method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_lsn_offset method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn_offsetp</b><dd>
+The DB_MPOOLFILE-&gt;get_lsn_offset method returns the
+log sequence number byte offset in <b>lsn_offsetp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_maxsize.html b/db/docs/api_c/memp_set_maxsize.html
new file mode 100644
index 000000000..950c83fb9
--- /dev/null
+++ b/db/docs/api_c/memp_set_maxsize.html
@@ -0,0 +1,88 @@
+<!--$Id: memp_set_maxsize.so,v 1.11 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;set_maxsize</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DB_MPOOLFILE-&gt;set_maxsize</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db.h&gt;
+<p>
+int
+DB_MPOOLFILE-&gt;set_set_maxsize(DB_MPOOLFILE *mpf,
+ u_int32_t gbytes, u_int32_t bytes);
+<p>
+int
+DB_MPOOLFILE-&gt;get_maxsize(DB_MPOOLFILE *mpf,
+ u_int32_t *gbytesp, u_int32_t *bytesp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_maxsize</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum size for the file to be
+<b>gbytes</b> gigabytes plus <b>bytes</b>.
+Attempts to allocate new pages in the file after the limit has been
+reached will fail.</p>
+<p>To set the maximum file size for a particular database, call the
+DB_MPOOLFILE-&gt;set_maxsize method using the <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle stored
+in the <b>mpf</b> field of the <a href="../api_c/db_class.html">DB</a> handle. Attempts to insert
+new items into the database after the limit has been reached may fail.</p>
+<p>The DB_MPOOLFILE-&gt;set_maxsize method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;set_maxsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The maximum size of the file is set to <b>gbytes</b> gigabytes plus
+<b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The maximum size of the file is set to <b>gbytes</b> gigabytes plus
+<b>bytes</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_maxsize</h3>
+<p>The DB_MPOOLFILE-&gt;get_maxsize method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>The DB_MPOOLFILE-&gt;get_maxsize method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the maximum file size is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the maximum file size is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/memp_set_pgcookie.html b/db/docs/api_c/memp_set_pgcookie.html
index 52c8c0ee4..119632784 100644
--- a/db/docs/api_c/memp_set_pgcookie.html
+++ b/db/docs/api_c/memp_set_pgcookie.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_pgcookie.so,v 10.6 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_pgcookie.so,v 10.14 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE-&gt;set_pgcookie</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE-&gt;set_pgcookie</h1>
+<h3>DB_MPOOLFILE-&gt;set_pgcookie</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,34 +25,60 @@
<p>
int
DB_MPOOLFILE-&gt;set_pgcookie(DB_MPOOLFILE *mpf, DBT *pgcookie);
+<p>
+int
+DB_MPOOLFILE-&gt;get_pgcookie(DB_MPOOLFILE *mpf, DBT *dbt);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_pgcookie</h3>
+<a name="3"><!--meow--></a>
<p>The DB_MPOOLFILE-&gt;set_pgcookie method specifies a byte string that is provided
to the functions registered to do input or output processing of the
file's pages as they are read from or written to, the backing filesystem
store. (See the <a href="../api_c/memp_register.html">DB_ENV-&gt;memp_register</a> documentation for more
-information.)
+information.)</p>
<p>The DB_MPOOLFILE-&gt;set_pgcookie method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.
-<p>The DB_MPOOLFILE-&gt;set_pgcookie interface may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a>
-interface is called.
+operations performed using the specified <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_pgcookie method may not be called after the <a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> is called, the information specified to DB_MPOOLFILE-&gt;set_pgcookie
-will replace the existing information.
-<p>The DB_MPOOLFILE-&gt;set_pgcookie method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_MPOOLFILE-&gt;set_pgcookie method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_MPOOLFILE-&gt;set_pgcookie method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+will replace the existing information.</p>
+<p>The DB_MPOOLFILE-&gt;set_pgcookie method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgcookie</b><dd>
+The <b>pgcookie</b> parameter is a byte string provided to the
+functions registered to do input or output processing of the file's
+pages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_pgcookie</h3>
+<p>The DB_MPOOLFILE-&gt;get_pgcookie method returns the byte string.</p>
+<p>The DB_MPOOLFILE-&gt;get_pgcookie method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_pgcookie method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbt</b><dd>
+The DB_MPOOLFILE-&gt;get_pgcookie method returns a reference to the
+byte string in <b>dbt</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_set_priority.html b/db/docs/api_c/memp_set_priority.html
new file mode 100644
index 000000000..12fdbb5db
--- /dev/null
+++ b/db/docs/api_c/memp_set_priority.html
@@ -0,0 +1,89 @@
+<!--$Id: memp_set_priority.so,v 10.19 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DB_MPOOLFILE-&gt;set_priority</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DB_MPOOLFILE-&gt;set_priority</h3>
+</td>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db.h&gt;
+<p>
+int
+DB_MPOOLFILE-&gt;set_priority(DB_MPOOLFILE *mpf, DB_CACHE_PRIORITY priority);
+<p>
+int
+DB_MPOOLFILE-&gt;get_priority(DB_MPOOLFILE *mpf, DB_CACHE_PRIORITY *priorityp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;set_priority</h3>
+<a name="3"><!--meow--></a>
+<p>Set the cache priority for pages from the specified file. The priority
+of a page biases the replacement algorithm to be more or less likely to
+discard a page when space is needed in the buffer pool. The bias is
+temporary, and pages will eventually be discarded if they are not
+referenced again. The DB_MPOOLFILE-&gt;set_priority method is only advisory, and
+does not guarantee pages will be treated in a specific way.</p>
+<p>To set the priority for the pages belonging to a particular database,
+call the DB_MPOOLFILE-&gt;set_priority method using the <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+handle stored in the <b>mpf</b> field of the <a href="../api_c/db_class.html">DB</a> handle.</p>
+<p>The DB_MPOOLFILE-&gt;set_priority method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;set_priority method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>priority</b><dd>
+The <b>priority</b> parameter must be set to one of the following
+values:
+<p><dl compact>
+<p><dt><a name="DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a><dd>The lowest priority: pages are the most likely to be discarded.
+<dt><a name="DB_PRIORITY_LOW">DB_PRIORITY_LOW</a><dd>The next lowest priority.
+<dt><a name="DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a><dd>The default priority.
+<dt><a name="DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a><dd>The next highest priority.
+<dt><a name="DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a><dd>The highest priority: pages are the least likely to be discarded.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE-&gt;get_priority</h3>
+<p>The DB_MPOOLFILE-&gt;get_priority method returns the cache priority.</p>
+<p>The DB_MPOOLFILE-&gt;get_priority method may be called at any time during the life of the
+application.</p>
+<p>The DB_MPOOLFILE-&gt;get_priority method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>priorityp</b><dd>
+The DB_MPOOLFILE-&gt;get_priority method returns the
+cache priority in <b>priorityp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/db_class.html">DB</a>
+<h3>See Also</h3>
+<a href="../api_c/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_c/memp_stat.html b/db/docs/api_c/memp_stat.html
index 8e9d136a9..5ae5c0317 100644
--- a/db/docs/api_c/memp_stat.html
+++ b/db/docs/api_c/memp_stat.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_stat.so,v 10.28 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_stat.so,v 10.53 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_stat</title>
+<title>Berkeley DB: DB_ENV-&gt;memp_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_stat</h1>
+<h3>DB_ENV-&gt;memp_stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,62 +24,76 @@
#include &lt;db.h&gt;
<p>
int
-memp_stat(DB_ENV *env, DB_MPOOL_STAT **gsp,
- DB_MPOOL_FSTAT *(*fsp)[], void *(*db_malloc)(size_t));
+DB_ENV-&gt;memp_stat(DB_ENV *env, DB_MPOOL_STAT **gsp,
+ DB_MPOOL_FSTAT *(*fsp)[], u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_stat function method creates statistical structures and copies
-pointers to them into user-specified memory locations. The statistics
-include the number of files participating in the pool, the active pages
-in the pool, and information as to how effective the cache has been.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>If <b>gsp</b> is non-NULL, the global statistics for the memory pool
-<b>mp</b> are copied into the memory location it references. The
-global statistics are stored in a structure of type DB_MPOOL_STAT.
-<p>The following DB_MPOOL_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;memp_stat</h3>
+<p>The DB_ENV-&gt;memp_stat method returns the memory pool (that is, the buffer
+cache) subsystem statistics.</p>
+<p>The DB_ENV-&gt;memp_stat method creates statistical structures of type DB_MPOOL_STAT
+and DB_MPOOL_FSTAT, and copy pointers to them into user-specified memory
+locations. The cache statistics are stored in the DB_MPOOL_STAT structure
+and the per-file cache statistics are stored the DB_MPOOL_FSTAT structure.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>If <b>gsp</b> is non-NULL, the global statistics for the cache
+<b>mp</b> are copied into the memory location to which it refers.
+The following DB_MPOOL_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>size_t st_gbytes;<dd>Gigabytes of cache (total cache size is st_gbytes + st_bytes)
-<dt>size_t st_bytes;<dd>Bytes of cache (total cache size is st_gbytes + st_bytes)
+<dt>size_t st_gbytes;<dd>Gigabytes of cache (total cache size is st_gbytes + st_bytes).
+<dt>size_t st_bytes;<dd>Bytes of cache (total cache size is st_gbytes + st_bytes).
<dt>u_int32_t st_ncache;<dd>Number of caches.
<dt>u_int32_t st_regsize;<dd>Individual cache size.
-<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
-<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
<dt>u_int32_t st_map;<dd>Requested pages mapped into the process' address space (there is no
-available information as to whether or not this request caused disk I/O,
+available information about whether or not this request caused disk I/O,
although examining the application page fault rate may be helpful).
+<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
+<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
<dt>u_int32_t st_page_create;<dd>Pages created in the cache.
<dt>u_int32_t st_page_in;<dd>Pages read into the cache.
<dt>u_int32_t st_page_out;<dd>Pages written from the cache to the backing file.
<dt>u_int32_t st_ro_evict;<dd>Clean pages forced from the cache.
<dt>u_int32_t st_rw_evict;<dd>Dirty pages forced from the cache.
+<dt>u_int32_t st_page_trickle;<dd>Dirty pages written using the <a href="../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a> method.
+<dt>u_int32_t st_pages;<dd>Pages in the cache.
+<dt>u_int32_t st_page_clean;<dd>Clean pages currently in the cache.
+<dt>u_int32_t st_page_dirty;<dd>Dirty pages currently in the cache.
<dt>u_int32_t st_hash_buckets;<dd>Number of hash buckets in buffer hash table.
<dt>u_int32_t st_hash_searches;<dd>Total number of buffer hash table lookups.
<dt>u_int32_t st_hash_longest;<dd>The longest chain ever encountered in buffer hash table lookups.
<dt>u_int32_t st_hash_examined;<dd>Total number of hash elements traversed during hash table lookups.
-<dt>u_int32_t st_page_clean;<dd>Clean pages currently in the cache.
-<dt>u_int32_t st_page_dirty;<dd>Dirty pages currently in the cache.
-<dt>u_int32_t st_page_trickle;<dd>Dirty pages written using the <a href="../api_c/memp_trickle.html">memp_trickle</a> interface.
+<dt>u_int32_t st_hash_nowait;<dd>The number of times that a thread of control was able to obtain a hash
+bucket lock without waiting.
+<dt>u_int32_t st_hash_wait;<dd>The number of times that a thread of control was forced to wait before
+obtaining a hash bucket lock.
+<dt>u_int32_t st_hash_max_wait;<dd>The maximum number of times any hash bucket lock was waited for by a
+thread of control.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
+obtaining a region lock.
+<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain a region
+lock without waiting.
+<dt>u_int32_t st_alloc;<dd>Number of page allocations.
+<dt>u_int32_t st_alloc_buckets;<dd>Number of hash buckets checked during allocation.
+<dt>u_int32_t st_alloc_max_buckets;<dd>Maximum number of hash buckets checked during an allocation.
+<dt>u_int32_t st_alloc_pages;<dd>Number of pages checked during allocation.
+<dt>u_int32_t st_alloc_max_pages;<dd>Maximum number of pages checked during an allocation.
</dl>
-<p>If <b>fsp</b> is non-NULL, a pointer to a NULL-terminated variable
-length array of statistics for individual files, in the memory pool <b>mp</b>,
-is copied into the memory location it references. If no individual files
-currently exist in the memory pool, <b>fsp</b> will be set to NULL.
+<p>If <b>fsp</b> is non-NULL, a pointer to a NULL-terminated
+variable length array of statistics for individual files, in the cache
+<b>mp</b>, is copied into the memory location to which it refers. If
+no individual files currently exist in the cache, <b>fsp</b> will be
+set to NULL.</p>
<p>The per-file statistics are stored in structures of type DB_MPOOL_FSTAT.
The following DB_MPOOL_FSTAT fields will be filled in for each file in
-the pool, i.e., each element of the array:
+the cache; that is, each element of the array:</p>
<p><dl compact>
-<dt>char *file_name;<dd>The name of the file.
+<dt>char * file_name;<dd>The name of the file.
<dt>size_t st_pagesize;<dd>Page size in bytes.
<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
@@ -86,33 +102,41 @@ the pool, i.e., each element of the array:
<dt>u_int32_t st_page_in;<dd>Pages read into the cache.
<dt>u_int32_t st_page_out;<dd>Pages written from the cache to the backing file.
</dl>
-<p>The memp_stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_stat function may fail and return a non-zero error for the following conditions:
+<p>The DB_ENV-&gt;memp_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>fsp</b><dd>
+The <b>fsp</b> parameter references memory into which
+a pointer to the allocated per-file statistics structures is copied.
+<p><dt><b>gsp</b><dd>
+The <b>gsp</b> parameter references memory into which
+a pointer to the allocated global statistics structure is copied.
</dl>
-<p>The memp_stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_stat function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;memp_stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_sync.html b/db/docs/api_c/memp_sync.html
index fc693d47e..7e2b562a8 100644
--- a/db/docs/api_c/memp_sync.html
+++ b/db/docs/api_c/memp_sync.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_sync.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 10.40 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_sync</title>
+<title>Berkeley DB: DB_ENV-&gt;memp_sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_sync</h1>
+<h3>DB_ENV-&gt;memp_sync</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,62 +24,52 @@
#include &lt;db.h&gt;
<p>
int
-memp_sync(DB_ENV *env, DB_LSN *lsn);
+DB_ENV-&gt;memp_sync(DB_ENV *env, DB_LSN *lsn);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_sync function ensures that any modified pages in the pool with
-log sequence numbers less than the <b>lsn</b> argument are written to
-disk. If <b>lsn</b> is NULL all modified pages in the pool are
-flushed.
-<p>The primary purpose of the memp_sync function is to enable a
-transaction manager to ensure, as part of a checkpoint, that all pages
-modified by a certain time have been written to disk. Pages in the pool
-that cannot be written back to disk immediately (e.g., that are currently
-pinned) are written to disk as soon as it is possible to do so. The
-expected behavior of the Berkeley DB or other transaction subsystem is to call
-the memp_sync function and then, if the return indicates that some
-pages could not be written immediately, to wait briefly and retry again
-with the same log sequence number until the memp_sync function
-returns that all pages have been written.
-<p>To support the memp_sync functionality, it is necessary that the
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;memp_sync</h3>
+<p>The DB_ENV-&gt;memp_sync method flushes modified pages in the cache to their
+backing files.</p>
+<p>Pages in the pool that cannot be immediately written back to disk (for
+example, pages that are currently in use by another thread of control)
+are waited for and written to disk as soon as it is possible to do
+so.</p>
+<p>To support the DB_ENV-&gt;memp_sync functionality, it is necessary that the
pool functions know the location of the log sequence number on the page
for each file type. This location should be specified when the file is
-opened using the <a href="../api_c/memp_fopen.html">memp_fopen</a> function. It is not required that
-the log sequence number be aligned on the page in any way.
-<p>The memp_sync function returns a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages which need to be
-written but which memp_sync was unable to write immediately.
-In addition, if memp_sync returns success, the value of
-<b>lsn</b> will be overwritten with the largest log sequence number
-from any page which was written by memp_sync to satisfy this
-request.
-<h1>Errors</h1>
-<p>The memp_sync function may fail and return a non-zero error for the following conditions:
+opened using the <a href="../api_c/memp_set_lsn_offset.html">DB_MPOOLFILE-&gt;set_lsn_offset</a> method. It is not required that
+the log sequence number be aligned on the page in any way.</p>
+<p>The DB_ENV-&gt;memp_sync method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn</b><dd>
+The purpose of the <b>lsn</b> parameter is to enable a transaction
+manager to ensure, as part of a checkpoint, that all pages modified by
+a certain time have been written to disk.
+<p>All modified pages with a a log sequence number (<a href="../api_c/lsn_class.html">DB_LSN</a>) less
+than the <b>lsn</b> parameter are written to disk. If <b>lsn</b> is
+NULL, all modified pages in the pool are written to disk.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;memp_sync method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The memp_sync function was called without logging having been
-initialized in the environment.
+<p><dt>EINVAL<dd>If the DB_ENV-&gt;memp_sync function was called without logging having been
+initialized in the environment; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The memp_sync function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_sync function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/memp_trickle.html b/db/docs/api_c/memp_trickle.html
index d7cfd7230..231fbe93f 100644
--- a/db/docs/api_c/memp_trickle.html
+++ b/db/docs/api_c/memp_trickle.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_trickle.so,v 10.21 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_trickle.so,v 10.35 2003/11/08 19:17:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: memp_trickle</title>
+<title>Berkeley DB: DB_ENV-&gt;memp_trickle</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>memp_trickle</h1>
+<h3>DB_ENV-&gt;memp_trickle</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,45 +24,25 @@
#include &lt;db.h&gt;
<p>
int
-memp_trickle(DB_ENV *env, int pct, int *nwrotep);
+DB_ENV-&gt;memp_trickle(DB_ENV *env, int percent, int *nwrotep);
</pre></h3>
-<h1>Description</h1>
-<p>The memp_trickle function ensures that at least <b>pct</b> percent of
-the pages in the shared memory pool are clean by writing dirty pages to
-their backing files.
-If the <b>nwrotep</b> argument is non-NULL, the number of pages that
-were written to reach the correct percentage is returned in the memory
-location it references.
-<p>The purpose of the memp_trickle function is to enable a memory
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;memp_trickle</h3>
+<p>The DB_ENV-&gt;memp_trickle method ensures that a specified percent of the pages
+in the shared memory pool are clean, by writing dirty pages to their
+backing files.</p>
+<p>The purpose of the DB_ENV-&gt;memp_trickle function is to enable a memory
pool manager to ensure that a page is always available for reading in new
-information without having to wait for a write.
-<p>The memp_trickle function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The memp_trickle function may fail and return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The memp_trickle function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the memp_trickle function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a>,
-<a href="../api_c/memp_fclose.html">memp_fclose</a>,
-<a href="../api_c/memp_fget.html">memp_fget</a>,
-<a href="../api_c/memp_fopen.html">memp_fopen</a>,
-<a href="../api_c/memp_fput.html">memp_fput</a>,
-<a href="../api_c/memp_fset.html">memp_fset</a>,
-<a href="../api_c/memp_fsync.html">memp_fsync</a>,
-<a href="../api_c/memp_register.html">memp_register</a>,
-<a href="../api_c/memp_stat.html">memp_stat</a>,
-<a href="../api_c/memp_sync.html">memp_sync</a>
-and
-<a href="../api_c/memp_trickle.html">memp_trickle</a>.
+information without having to wait for a write.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/mempfile_class.html">DB_MPOOLFILE</a>
+<h3>See Also</h3>
+<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/mempfile_class.html b/db/docs/api_c/mempfile_class.html
index 01671979d..b175a6878 100644
--- a/db/docs/api_c/mempfile_class.html
+++ b/db/docs/api_c/mempfile_class.html
@@ -1,21 +1,22 @@
-<!--Id: mempfile_class.so,v 10.18 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: mempfile_class.so,v 10.23 2003/09/25 15:27:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_MPOOLFILE</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_MPOOLFILE</h1>
+<h3>DB_MPOOLFILE</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,33 +25,35 @@
<p>
typedef struct __db_mpoolfile DB_MPOOLFILE;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_MPOOLFILE</h3>
<p>The memory pool interfaces for the Berkeley DB database environment are
methods of the <a href="../api_c/env_class.html">DB_ENV</a> handle. The <a href="../api_c/env_class.html">DB_ENV</a> memory pool
methods and the DB_MPOOLFILE class provide general-purpose,
page-oriented buffer management of files. Although designed to work
with the other <a href="../api_c/db_class.html">DB</a> classes, they are also useful for more general
purposes. The memory pools are referred to in this document as simply
-<i>pools</i>.
+<i>pools</i>.</p>
<p>Pools may be shared between processes. Pools are usually filled by
pages from one or more files. Pages in the pool are replaced in LRU
(least-recently-used) order, with each new page replacing the page that
has been unused the longest. Pages retrieved from the pool using
<a href="../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> are <i>pinned</i> in the pool until they are
returned to the control of the buffer pool using the <a href="../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a>
-method.
+method.</p>
<p>The DB_MPOOLFILE object is the handle for a file in the memory
pool. The handle is not free-threaded. Once the <a href="../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method
is called, the handle may not be accessed again, regardless of that
-method's return.
-<h1>Class</h1>
+method's return.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, DB_MPOOLFILE
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/pindex.src b/db/docs/api_c/pindex.src
index 1818c50a6..d71b9db97 100644
--- a/db/docs/api_c/pindex.src
+++ b/db/docs/api_c/pindex.src
@@ -1,301 +1,825 @@
-__APIREL__/api_c/db_create.html#2 @db_create
-__APIREL__/api_c/db_create.html#DB_XA_CREATE db_create@DB_XA_CREATE
-__APIREL__/api_c/db_err.html#2 @DBENV-__GT__err
-__APIREL__/api_c/db_lsn.html#2 @DB_LSN
-__APIREL__/api_c/db_set_errfile.html#2 @DB-__GT__set_errfile
-__APIREL__/api_c/db_set_malloc.html#2 @DB-__GT__set_malloc
-__APIREL__/api_c/db_set_paniccall.html#2 @DB-__GT__set_paniccall
-__APIREL__/api_c/db_set_realloc.html#2 @DB-__GT__set_realloc
-__APIREL__/api_c/dbm.html#2 @dbm/ndbm
-__APIREL__/api_c/dbt.html#2 @key/data pairs
-__APIREL__/api_c/dbt.html#data DBT@data
-__APIREL__/api_c/dbt.html#size DBT@size
-__APIREL__/api_c/dbt.html#ulen DBT@ulen
-__APIREL__/api_c/dbt.html#dlen DBT@dlen
-__APIREL__/api_c/dbt.html#doff DBT@doff
-__APIREL__/api_c/dbt.html#DB_DBT_MALLOC DBT@DB_DBT_MALLOC
-__APIREL__/api_c/dbt.html#DB_DBT_REALLOC DBT@DB_DBT_REALLOC
-__APIREL__/api_c/dbt.html#DB_DBT_USERMEM DBT@DB_DBT_USERMEM
-__APIREL__/api_c/dbt.html#DB_DBT_PARTIAL DBT@DB_DBT_PARTIAL
-__APIREL__/api_c/dbt.html#3 retrieved key/data @permanence
-__APIREL__/api_c/dbt.html#4 retrieved @key/data permanence
-__APIREL__/api_c/dbt.html#5 data @alignment
-__APIREL__/api_c/dbt.html#6 logical @record number format
-__APIREL__/api_c/env_create.html#2 @db_env_create
-__APIREL__/api_c/env_create.html#DB_CLIENT db_env_create@DB_CLIENT
-__APIREL__/api_c/env_set_errfile.html#2 @DBENV-__GT__set_errfile
-__APIREL__/api_c/env_set_paniccall.html#2 @DBENV-__GT__set_paniccall
-__APIREL__/api_c/hsearch.html#2 @hsearch
-__APIREL__/api_c/set_func_close.html#2 @db_env_set_func_close
-__APIREL__/api_c/set_func_dirfree.html#2 @db_env_set_func_dirfree
-__APIREL__/api_c/set_func_dirlist.html#2 @db_env_set_func_dirlist
-__APIREL__/api_c/set_func_exists.html#2 @db_env_set_func_exists
-__APIREL__/api_c/set_func_free.html#2 @db_env_set_func_free
-__APIREL__/api_c/set_func_fsync.html#2 @db_env_set_func_fsync
-__APIREL__/api_c/set_func_ioinfo.html#2 @db_env_set_func_ioinfo
-__APIREL__/api_c/set_func_malloc.html#2 @db_env_set_func_malloc
-__APIREL__/api_c/set_func_map.html#2 @db_env_set_func_map
-__APIREL__/api_c/set_func_open.html#2 @db_env_set_func_open
-__APIREL__/api_c/set_func_read.html#2 @db_env_set_func_read
-__APIREL__/api_c/set_func_realloc.html#2 @db_env_set_func_realloc
-__APIREL__/api_c/set_func_rename.html#2 @db_env_set_func_rename
-__APIREL__/api_c/set_func_seek.html#2 @db_env_set_func_seek
-__APIREL__/api_c/set_func_sleep.html#2 @db_env_set_func_sleep
-__APIREL__/api_c/set_func_unlink.html#2 @db_env_set_func_unlink
-__APIREL__/api_c/set_func_unmap.html#2 @db_env_set_func_unmap
-__APIREL__/api_c/set_func_write.html#2 @db_env_set_func_write
-__APIREL__/api_c/set_func_yield.html#2 @db_env_set_func_yield
-__APIREL__/api_c/db_close.html#2 @DB-__GT__close
-__APIREL__/api_c/db_close.html#DB_NOSYNC DB-__GT__close@DB_NOSYNC
-__APIREL__/api_c/db_close.html#3 DB-__GT__close @DB_INCOMPLETE
-__APIREL__/api_c/db_cursor.html#2 @DB-__GT__cursor
-__APIREL__/api_c/db_cursor.html#DB_WRITECURSOR DB-__GT__cursor@DB_WRITECURSOR
-__APIREL__/api_c/db_del.html#2 @DB-__GT__del
-__APIREL__/api_c/db_fd.html#2 @DB-__GT__fd
-__APIREL__/api_c/db_get.html#2 @DB-__GT__get
-__APIREL__/api_c/db_get.html#DB_CONSUME DB-__GT__get@DB_CONSUME
-__APIREL__/api_c/db_get.html#DB_CONSUME_WAIT DB-__GT__get@DB_CONSUME_WAIT
-__APIREL__/api_c/db_get.html#DB_GET_BOTH DB-__GT__get@DB_GET_BOTH
-__APIREL__/api_c/db_get.html#DB_SET_RECNO DB-__GT__get@DB_SET_RECNO
-__APIREL__/api_c/db_get.html#DB_RMW DB-__GT__get@DB_RMW
-__APIREL__/api_c/db_get_byteswapped.html#2 @DB-__GT__get_byteswapped
-__APIREL__/api_c/db_get_type.html#2 @DB-__GT__get_type
-__APIREL__/api_c/db_join.html#2 @DB-__GT__join
-__APIREL__/api_c/db_join.html#DB_JOIN_NOSORT DB-__GT__join@DB_JOIN_NOSORT
-__APIREL__/api_c/db_join.html#DB_JOIN_ITEM DB-__GT__join@DB_JOIN_ITEM
-__APIREL__/api_c/db_join.html#DB_RMW DB-__GT__join@DB_RMW
-__APIREL__/api_c/db_key_range.html#2 @DB-__GT__key_range
-__APIREL__/api_c/db_open.html#2 @DB-__GT__open
-__APIREL__/api_c/db_open.html#DB_CREATE DB-__GT__open@DB_CREATE
-__APIREL__/api_c/db_open.html#DB_EXCL DB-__GT__open@DB_EXCL
-__APIREL__/api_c/db_open.html#DB_NOMMAP DB-__GT__open@DB_NOMMAP
-__APIREL__/api_c/db_open.html#DB_RDONLY DB-__GT__open@DB_RDONLY
-__APIREL__/api_c/db_open.html#DB_THREAD DB-__GT__open@DB_THREAD
-__APIREL__/api_c/db_open.html#DB_TRUNCATE DB-__GT__open@DB_TRUNCATE
-__APIREL__/api_c/db_open.html#DB_OLD_VERSION DB-__GT__open@DB_OLD_VERSION
-__APIREL__/api_c/db_put.html#2 @DB-__GT__put
-__APIREL__/api_c/db_put.html#DB_APPEND DB-__GT__put@DB_APPEND
-__APIREL__/api_c/db_put.html#DB_NODUPDATA DB-__GT__put@DB_NODUPDATA
-__APIREL__/api_c/db_put.html#DB_NOOVERWRITE DB-__GT__put@DB_NOOVERWRITE
-__APIREL__/api_c/db_remove.html#2 @DB-__GT__remove
-__APIREL__/api_c/db_rename.html#2 @DB-__GT__rename
-__APIREL__/api_c/db_set_append_recno.html#2 @DB-__GT__set_append_recno
-__APIREL__/api_c/db_set_bt_compare.html#2 @DB-__GT__set_bt_compare
-__APIREL__/api_c/db_set_bt_minkey.html#2 @DB-__GT__set_bt_minkey
-__APIREL__/api_c/db_set_bt_prefix.html#2 @DB-__GT__set_bt_prefix
-__APIREL__/api_c/db_set_cachesize.html#2 @DB-__GT__set_cachesize
-__APIREL__/api_c/db_set_dup_compare.html#2 @DB-__GT__set_dup_compare
-__APIREL__/api_c/db_set_errcall.html#2 @DB-__GT__set_errcall
-__APIREL__/api_c/db_set_errpfx.html#2 @DB-__GT__set_errpfx
-__APIREL__/api_c/db_set_feedback.html#2 @DB-__GT__set_feedback
-__APIREL__/api_c/db_set_feedback.html#DB_UPGRADE DB-__GT__set_feedback@DB_UPGRADE
-__APIREL__/api_c/db_set_feedback.html#DB_VERIFY DB-__GT__set_feedback@DB_VERIFY
-__APIREL__/api_c/db_set_flags.html#2 @DB-__GT__set_flags
-__APIREL__/api_c/db_set_flags.html#DB_DUP DB-__GT__set_flags@DB_DUP
-__APIREL__/api_c/db_set_flags.html#DB_DUPSORT DB-__GT__set_flags@DB_DUPSORT
-__APIREL__/api_c/db_set_flags.html#DB_RECNUM DB-__GT__set_flags@DB_RECNUM
-__APIREL__/api_c/db_set_flags.html#DB_REVSPLITOFF DB-__GT__set_flags@DB_REVSPLITOFF
-__APIREL__/api_c/db_set_flags.html#DB_DUP DB-__GT__set_flags@DB_DUP
-__APIREL__/api_c/db_set_flags.html#DB_DUPSORT DB-__GT__set_flags@DB_DUPSORT
-__APIREL__/api_c/db_set_flags.html#DB_RENUMBER DB-__GT__set_flags@DB_RENUMBER
-__APIREL__/api_c/db_set_flags.html#DB_SNAPSHOT DB-__GT__set_flags@DB_SNAPSHOT
-__APIREL__/api_c/db_set_h_ffactor.html#2 @DB-__GT__set_h_ffactor
-__APIREL__/api_c/db_set_h_hash.html#2 @DB-__GT__set_h_hash
-__APIREL__/api_c/db_set_h_nelem.html#2 @DB-__GT__set_h_nelem
-__APIREL__/api_c/db_set_lorder.html#2 @DB-__GT__set_lorder
-__APIREL__/api_c/db_set_pagesize.html#2 @DB-__GT__set_pagesize
-__APIREL__/api_c/db_set_q_extentsize.html#2 @DB-__GT__set_q_extentsize
-__APIREL__/api_c/db_set_re_delim.html#2 @DB-__GT__set_re_delim
-__APIREL__/api_c/db_set_re_len.html#2 @DB-__GT__set_re_len
-__APIREL__/api_c/db_set_re_pad.html#2 @DB-__GT__set_re_pad
-__APIREL__/api_c/db_set_re_source.html#2 @DB-__GT__set_re_source
-__APIREL__/api_c/db_stat.html#2 @DB-__GT__stat
-__APIREL__/api_c/db_stat.html#DB_CACHED_COUNTS DB-__GT__stat@DB_CACHED_COUNTS
-__APIREL__/api_c/db_stat.html#DB_RECORDCOUNT DB-__GT__stat@DB_RECORDCOUNT
-__APIREL__/api_c/db_sync.html#2 @DB-__GT__sync
-__APIREL__/api_c/db_upgrade.html#2 @DB-__GT__upgrade
-__APIREL__/api_c/db_upgrade.html#DB_DUPSORT DB-__GT__upgrade@DB_DUPSORT
-__APIREL__/api_c/db_upgrade.html#DB_OLD_VERSION DB-__GT__upgrade@DB_OLD_VERSION
-__APIREL__/api_c/db_verify.html#2 @DB-__GT__verify
-__APIREL__/api_c/db_verify.html#DB_SALVAGE DB-__GT__verify@DB_SALVAGE
-__APIREL__/api_c/db_verify.html#DB_AGGRESSIVE DB-__GT__verify@DB_AGGRESSIVE
-__APIREL__/api_c/db_verify.html#DB_NOORDERCHK DB-__GT__verify@DB_NOORDERCHK
-__APIREL__/api_c/db_verify.html#DB_ORDERCHKONLY DB-__GT__verify@DB_ORDERCHKONLY
-__APIREL__/api_c/dbc_close.html#2 @DBcursor-__GT__c_close
-__APIREL__/api_c/dbc_count.html#2 @DBcursor-__GT__c_count
-__APIREL__/api_c/dbc_del.html#2 @DBcursor-__GT__c_del
-__APIREL__/api_c/dbc_dup.html#2 @DBcursor-__GT__c_dup
-__APIREL__/api_c/dbc_dup.html#DB_POSITION DBcursor-__GT__c_dup@DB_POSITION
-__APIREL__/api_c/dbc_get.html#2 @DBcursor-__GT__c_get
-__APIREL__/api_c/dbc_get.html#DB_CURRENT DBcursor-__GT__c_get@DB_CURRENT
-__APIREL__/api_c/dbc_get.html#DB_FIRST DBcursor-__GT__c_get@DB_FIRST
-__APIREL__/api_c/dbc_get.html#DB_LAST DBcursor-__GT__c_get@DB_LAST
-__APIREL__/api_c/dbc_get.html#DB_GET_BOTH DBcursor-__GT__c_get@DB_GET_BOTH
-__APIREL__/api_c/dbc_get.html#DB_GET_RECNO DBcursor-__GT__c_get@DB_GET_RECNO
-__APIREL__/api_c/dbc_get.html#DB_JOIN_ITEM DBcursor-__GT__c_get@DB_JOIN_ITEM
-__APIREL__/api_c/dbc_get.html#DB_NEXT DBcursor-__GT__c_get@DB_NEXT
-__APIREL__/api_c/dbc_get.html#DB_PREV DBcursor-__GT__c_get@DB_PREV
-__APIREL__/api_c/dbc_get.html#DB_NEXT_DUP DBcursor-__GT__c_get@DB_NEXT_DUP
-__APIREL__/api_c/dbc_get.html#DB_NEXT_NODUP DBcursor-__GT__c_get@DB_NEXT_NODUP
-__APIREL__/api_c/dbc_get.html#DB_PREV_NODUP DBcursor-__GT__c_get@DB_PREV_NODUP
-__APIREL__/api_c/dbc_get.html#DB_SET DBcursor-__GT__c_get@DB_SET
-__APIREL__/api_c/dbc_get.html#DB_SET_RANGE DBcursor-__GT__c_get@DB_SET_RANGE
-__APIREL__/api_c/dbc_get.html#DB_SET_RECNO DBcursor-__GT__c_get@DB_SET_RECNO
-__APIREL__/api_c/dbc_get.html#DB_RMW DBcursor-__GT__c_get@DB_RMW
-__APIREL__/api_c/dbc_put.html#2 @DBcursor-__GT__c_put
-__APIREL__/api_c/dbc_put.html#DB_AFTER DBcursor-__GT__c_put@DB_AFTER
-__APIREL__/api_c/dbc_put.html#DB_BEFORE DBcursor-__GT__c_put@DB_BEFORE
-__APIREL__/api_c/dbc_put.html#DB_CURRENT DBcursor-__GT__c_put@DB_CURRENT
-__APIREL__/api_c/dbc_put.html#DB_KEYFIRST DBcursor-__GT__c_put@DB_KEYFIRST
-__APIREL__/api_c/dbc_put.html#DB_KEYLAST DBcursor-__GT__c_put@DB_KEYLAST
-__APIREL__/api_c/dbc_put.html#DB_NODUPDATA DBcursor-__GT__c_put@DB_NODUPDATA
-__APIREL__/api_c/env_close.html#2 @DBENV-__GT__close
-__APIREL__/api_c/env_open.html#2 @DBENV-__GT__open
-__APIREL__/api_c/env_open.html#DB_JOINENV DBENV-__GT__open@DB_JOINENV
-__APIREL__/api_c/env_open.html#DB_INIT_CDB DBENV-__GT__open@DB_INIT_CDB
-__APIREL__/api_c/env_open.html#DB_INIT_LOCK DBENV-__GT__open@DB_INIT_LOCK
-__APIREL__/api_c/env_open.html#DB_INIT_LOG DBENV-__GT__open@DB_INIT_LOG
-__APIREL__/api_c/env_open.html#DB_INIT_MPOOL DBENV-__GT__open@DB_INIT_MPOOL
-__APIREL__/api_c/env_open.html#DB_INIT_TXN DBENV-__GT__open@DB_INIT_TXN
-__APIREL__/api_c/env_open.html#DB_RECOVER DBENV-__GT__open@DB_RECOVER
-__APIREL__/api_c/env_open.html#DB_RECOVER_FATAL DBENV-__GT__open@DB_RECOVER_FATAL
-__APIREL__/api_c/env_open.html#DB_USE_ENVIRON DBENV-__GT__open@DB_USE_ENVIRON
-__APIREL__/api_c/env_open.html#DB_USE_ENVIRON_ROOT DBENV-__GT__open@DB_USE_ENVIRON_ROOT
-__APIREL__/api_c/env_open.html#DB_CREATE DBENV-__GT__open@DB_CREATE
-__APIREL__/api_c/env_open.html#DB_LOCKDOWN DBENV-__GT__open@DB_LOCKDOWN
-__APIREL__/api_c/env_open.html#DB_PRIVATE DBENV-__GT__open@DB_PRIVATE
-__APIREL__/api_c/env_open.html#DB_SYSTEM_MEM DBENV-__GT__open@DB_SYSTEM_MEM
-__APIREL__/api_c/env_open.html#DB_THREAD DBENV-__GT__open@DB_THREAD
-__APIREL__/api_c/env_remove.html#2 @DBENV-__GT__remove
-__APIREL__/api_c/env_remove.html#DB_FORCE DBENV-__GT__remove@DB_FORCE
-__APIREL__/api_c/env_remove.html#DB_USE_ENVIRON DBENV-__GT__remove@DB_USE_ENVIRON
-__APIREL__/api_c/env_remove.html#DB_USE_ENVIRON_ROOT DBENV-__GT__remove@DB_USE_ENVIRON_ROOT
-__APIREL__/api_c/env_set_cachesize.html#2 @DBENV-__GT__set_cachesize
-__APIREL__/api_c/env_set_data_dir.html#2 @DBENV-__GT__set_data_dir
-__APIREL__/api_c/env_set_errcall.html#2 @DBENV-__GT__set_errcall
-__APIREL__/api_c/env_set_errpfx.html#2 @DBENV-__GT__set_errpfx
-__APIREL__/api_c/env_set_feedback.html#2 @DBENV-__GT__set_feedback
-__APIREL__/api_c/env_set_feedback.html#DB_RECOVER DBENV-__GT__set_feedback@DB_RECOVER
-__APIREL__/api_c/env_set_flags.html#2 @DBENV-__GT__set_flags
-__APIREL__/api_c/env_set_flags.html#DB_CDB_ALLDB DBENV-__GT__set_flags@DB_CDB_ALLDB
-__APIREL__/api_c/env_set_flags.html#DB_NOMMAP DBENV-__GT__set_flags@DB_NOMMAP
-__APIREL__/api_c/env_set_flags.html#DB_TXN_NOSYNC DBENV-__GT__set_flags@DB_TXN_NOSYNC
-__APIREL__/api_c/env_set_lg_bsize.html#2 @DBENV-__GT__set_lg_bsize
-__APIREL__/api_c/env_set_lg_dir.html#2 @DBENV-__GT__set_lg_dir
-__APIREL__/api_c/env_set_lg_max.html#2 @DBENV-__GT__set_lg_max
-__APIREL__/api_c/env_set_lk_conflicts.html#2 @DBENV-__GT__set_lk_conflicts
-__APIREL__/api_c/env_set_lk_detect.html#2 @DBENV-__GT__set_lk_detect
-__APIREL__/api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT DBENV-__GT__set_lk_detect@DB_LOCK_DEFAULT
-__APIREL__/api_c/env_set_lk_detect.html#DB_LOCK_OLDEST DBENV-__GT__set_lk_detect@DB_LOCK_OLDEST
-__APIREL__/api_c/env_set_lk_detect.html#DB_LOCK_RANDOM DBENV-__GT__set_lk_detect@DB_LOCK_RANDOM
-__APIREL__/api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST DBENV-__GT__set_lk_detect@DB_LOCK_YOUNGEST
-__APIREL__/api_c/env_set_lk_max.html#2 @DBENV-__GT__set_lk_max
-__APIREL__/api_c/env_set_lk_max_locks.html#2 @DBENV-__GT__set_lk_max_locks
-__APIREL__/api_c/env_set_lk_max_lockers.html#2 @DBENV-__GT__set_lk_max_lockers
-__APIREL__/api_c/env_set_lk_max_objects.html#2 @DBENV-__GT__set_lk_max_objects
-__APIREL__/api_c/env_set_mp_mmapsize.html#2 @DBENV-__GT__set_mp_mmapsize
-__APIREL__/api_c/env_set_mutexlocks.html#2 @DBENV-__GT__set_mutexlocks
-__APIREL__/api_c/env_set_pageyield.html#2 @db_env_set_pageyield
-__APIREL__/api_c/env_set_panicstate.html#2 @db_env_set_panicstate
-__APIREL__/api_c/env_set_rec_init.html#2 @DBENV-__GT__set_recovery_init
-__APIREL__/api_c/env_set_region_init.html#2 @db_env_set_region_init
-__APIREL__/api_c/env_set_server.html#2 @DBENV-__GT__set_server
-__APIREL__/api_c/env_set_server.html#DB_NOSERVER DBENV-__GT__set_server@DB_NOSERVER
-__APIREL__/api_c/env_set_server.html#DB_NOSERVER_ID DBENV-__GT__set_server@DB_NOSERVER_ID
-__APIREL__/api_c/env_set_shm_key.html#2 @DBENV-__GT__set_shm_key
-__APIREL__/api_c/env_set_tas_spins.html#2 @db_env_set_tas_spins
-__APIREL__/api_c/env_set_tmp_dir.html#2 @DBENV-__GT__set_tmp_dir
-__APIREL__/api_c/env_set_tx_max.html#2 @DBENV-__GT__set_tx_max
-__APIREL__/api_c/env_set_tx_recover.html#2 @DBENV-__GT__set_tx_recover
-__APIREL__/api_c/env_set_tx_recover.html#DB_TXN_BACKWARD_ROLL DBENV-__GT__set_tx_recover@DB_TXN_BACKWARD_ROLL
-__APIREL__/api_c/env_set_tx_recover.html#DB_TXN_FORWARD_ROLL DBENV-__GT__set_tx_recover@DB_TXN_FORWARD_ROLL
-__APIREL__/api_c/env_set_tx_recover.html#DB_TXN_ABORT DBENV-__GT__set_tx_recover@DB_TXN_ABORT
-__APIREL__/api_c/env_set_tx_timestamp.html#2 @DBENV-__GT__set_tx_timestamp
-__APIREL__/api_c/env_set_verbose.html#2 @DBENV-__GT__set_verbose
-__APIREL__/api_c/env_set_verbose.html#DB_VERB_CHKPOINT DBENV-__GT__set_verbose@DB_VERB_CHKPOINT
-__APIREL__/api_c/env_set_verbose.html#DB_VERB_DEADLOCK DBENV-__GT__set_verbose@DB_VERB_DEADLOCK
-__APIREL__/api_c/env_set_verbose.html#DB_VERB_RECOVERY DBENV-__GT__set_verbose@DB_VERB_RECOVERY
-__APIREL__/api_c/env_set_verbose.html#DB_VERB_WAITSFOR DBENV-__GT__set_verbose@DB_VERB_WAITSFOR
-__APIREL__/api_c/env_strerror.html#2 @db_strerror
-__APIREL__/api_c/env_version.html#2 @db_version
-__APIREL__/api_c/lock_detect.html#2 @lock_detect
-__APIREL__/api_c/lock_detect.html#DB_LOCK_CONFLICT lock_detect@DB_LOCK_CONFLICT
-__APIREL__/api_c/lock_get.html#2 @lock_get
-__APIREL__/api_c/lock_get.html#DB_LOCK_NOWAIT lock_get@DB_LOCK_NOWAIT
-__APIREL__/api_c/lock_get.html#DB_LOCK_NOTGRANTED lock_get@DB_LOCK_NOTGRANTED
-__APIREL__/api_c/lock_id.html#2 @lock_id
-__APIREL__/api_c/lock_put.html#2 @lock_put
-__APIREL__/api_c/lock_stat.html#2 @lock_stat
-__APIREL__/api_c/lock_vec.html#2 @lock_vec
-__APIREL__/api_c/lock_vec.html#DB_LOCK_NOWAIT lock_vec@DB_LOCK_NOWAIT
-__APIREL__/api_c/lock_vec.html#op lock_vec@op
-__APIREL__/api_c/lock_vec.html#DB_LOCK_GET lock_vec@DB_LOCK_GET
-__APIREL__/api_c/lock_vec.html#DB_LOCK_PUT lock_vec@DB_LOCK_PUT
-__APIREL__/api_c/lock_vec.html#DB_LOCK_PUT_ALL lock_vec@DB_LOCK_PUT_ALL
-__APIREL__/api_c/lock_vec.html#DB_LOCK_PUT_OBJ lock_vec@DB_LOCK_PUT_OBJ
-__APIREL__/api_c/lock_vec.html#obj lock_vec@obj
-__APIREL__/api_c/lock_vec.html#mode lock_vec@mode
-__APIREL__/api_c/lock_vec.html#lock lock_vec@lock
-__APIREL__/api_c/lock_vec.html#DB_LOCK_NOTGRANTED lock_vec@DB_LOCK_NOTGRANTED
-__APIREL__/api_c/log_archive.html#2 @log_archive
-__APIREL__/api_c/log_archive.html#DB_ARCH_ABS log_archive@DB_ARCH_ABS
-__APIREL__/api_c/log_archive.html#DB_ARCH_DATA log_archive@DB_ARCH_DATA
-__APIREL__/api_c/log_archive.html#DB_ARCH_LOG log_archive@DB_ARCH_LOG
-__APIREL__/api_c/log_compare.html#2 @log_compare
-__APIREL__/api_c/log_file.html#2 @log_file
-__APIREL__/api_c/log_flush.html#2 @log_flush
-__APIREL__/api_c/log_get.html#2 @log_get
-__APIREL__/api_c/log_get.html#DB_CHECKPOINT log_get@DB_CHECKPOINT
-__APIREL__/api_c/log_get.html#DB_FIRST log_get@DB_FIRST
-__APIREL__/api_c/log_get.html#DB_LAST log_get@DB_LAST
-__APIREL__/api_c/log_get.html#DB_NEXT log_get@DB_NEXT
-__APIREL__/api_c/log_get.html#DB_PREV log_get@DB_PREV
-__APIREL__/api_c/log_get.html#DB_CURRENT log_get@DB_CURRENT
-__APIREL__/api_c/log_get.html#DB_SET log_get@DB_SET
-__APIREL__/api_c/log_put.html#2 @log_put
-__APIREL__/api_c/log_put.html#DB_CHECKPOINT log_put@DB_CHECKPOINT
-__APIREL__/api_c/log_put.html#DB_CURLSN log_put@DB_CURLSN
-__APIREL__/api_c/log_put.html#DB_FLUSH log_put@DB_FLUSH
-__APIREL__/api_c/log_register.html#2 @log_register
-__APIREL__/api_c/log_stat.html#2 @log_stat
-__APIREL__/api_c/log_unregister.html#2 @log_unregister
-__APIREL__/api_c/memp_fclose.html#2 @memp_fclose
-__APIREL__/api_c/memp_fget.html#2 @memp_fget
-__APIREL__/api_c/memp_fget.html#DB_MPOOL_CREATE memp_fget@DB_MPOOL_CREATE
-__APIREL__/api_c/memp_fget.html#DB_MPOOL_LAST memp_fget@DB_MPOOL_LAST
-__APIREL__/api_c/memp_fget.html#DB_MPOOL_NEW memp_fget@DB_MPOOL_NEW
-__APIREL__/api_c/memp_fopen.html#2 @memp_fopen
-__APIREL__/api_c/memp_fopen.html#DB_CREATE memp_fopen@DB_CREATE
-__APIREL__/api_c/memp_fopen.html#DB_NOMMAP memp_fopen@DB_NOMMAP
-__APIREL__/api_c/memp_fopen.html#DB_RDONLY memp_fopen@DB_RDONLY
-__APIREL__/api_c/memp_fopen.html#ftype memp_fopen@ftype
-__APIREL__/api_c/memp_fopen.html#pgcookie memp_fopen@pgcookie
-__APIREL__/api_c/memp_fopen.html#fileid memp_fopen@fileid
-__APIREL__/api_c/memp_fopen.html#lsn_offset memp_fopen@lsn_offset
-__APIREL__/api_c/memp_fopen.html#clear_len memp_fopen@clear_len
-__APIREL__/api_c/memp_fput.html#2 @memp_fput
-__APIREL__/api_c/memp_fput.html#DB_MPOOL_CLEAN memp_fput@DB_MPOOL_CLEAN
-__APIREL__/api_c/memp_fput.html#DB_MPOOL_DIRTY memp_fput@DB_MPOOL_DIRTY
-__APIREL__/api_c/memp_fput.html#DB_MPOOL_DISCARD memp_fput@DB_MPOOL_DISCARD
-__APIREL__/api_c/memp_fset.html#2 @memp_fset
-__APIREL__/api_c/memp_fset.html#DB_MPOOL_CLEAN memp_fset@DB_MPOOL_CLEAN
-__APIREL__/api_c/memp_fset.html#DB_MPOOL_DIRTY memp_fset@DB_MPOOL_DIRTY
-__APIREL__/api_c/memp_fset.html#DB_MPOOL_DISCARD memp_fset@DB_MPOOL_DISCARD
-__APIREL__/api_c/memp_fsync.html#2 @memp_fsync
-__APIREL__/api_c/memp_register.html#2 @memp_register
-__APIREL__/api_c/memp_stat.html#2 @memp_stat
-__APIREL__/api_c/memp_sync.html#2 @memp_sync
-__APIREL__/api_c/memp_trickle.html#2 @memp_trickle
-__APIREL__/api_c/txn_abort.html#2 @txn_abort
-__APIREL__/api_c/txn_begin.html#2 @txn_begin
-__APIREL__/api_c/txn_begin.html#DB_TXN_NOSYNC txn_begin@DB_TXN_NOSYNC
-__APIREL__/api_c/txn_begin.html#DB_TXN_NOWAIT txn_begin@DB_TXN_NOWAIT
-__APIREL__/api_c/txn_begin.html#DB_TXN_SYNC txn_begin@DB_TXN_SYNC
-__APIREL__/api_c/txn_checkpoint.html#2 @txn_checkpoint
-__APIREL__/api_c/txn_checkpoint.html#DB_FORCE txn_checkpoint@DB_FORCE
-__APIREL__/api_c/txn_commit.html#2 @txn_commit
-__APIREL__/api_c/txn_commit.html#DB_TXN_NOSYNC txn_commit@DB_TXN_NOSYNC
-__APIREL__/api_c/txn_commit.html#DB_TXN_SYNC txn_commit@DB_TXN_SYNC
-__APIREL__/api_c/txn_id.html#2 @txn_id
-__APIREL__/api_c/txn_prepare.html#2 @txn_prepare
-__APIREL__/api_c/txn_stat.html#2 @txn_stat
+__APIREL__/api_c/db_associate.html__OCT__2 @DB-__GT__associate
+__APIREL__/api_c/db_associate.html__OCT__3 @DB_DBT_APPMALLOC
+__APIREL__/api_c/db_associate.html__OCT__4 @DB_DONOTINDEX
+__APIREL__/api_c/db_associate.html__OCT__DB_CREATE DB-__GT__associate@DB_CREATE
+__APIREL__/api_c/db_associate.html__OCT__DB_AUTO_COMMIT DB-__GT__associate@DB_AUTO_COMMIT
+__APIREL__/api_c/db_class.html__OCT__2 @db_create
+__APIREL__/api_c/db_class.html__OCT__DB_XA_CREATE db_create@DB_XA_CREATE
+__APIREL__/api_c/db_close.html__OCT__2 @DB-__GT__close
+__APIREL__/api_c/db_close.html__OCT__DB_NOSYNC DB-__GT__close@DB_NOSYNC
+__APIREL__/api_c/db_cursor.html__OCT__2 @DB-__GT__cursor
+__APIREL__/api_c/db_cursor.html__OCT__DB_DIRTY_READ DB-__GT__cursor@DB_DIRTY_READ
+__APIREL__/api_c/db_cursor.html__OCT__DB_WRITECURSOR DB-__GT__cursor@DB_WRITECURSOR
+__APIREL__/api_c/db_del.html__OCT__2 @DB-__GT__del
+__APIREL__/api_c/db_del.html__OCT__DB_AUTO_COMMIT DB-__GT__del@DB_AUTO_COMMIT
+__APIREL__/api_c/db_err.html__OCT__2 @DB-__GT__err
+__APIREL__/api_c/db_err.html__OCT__3 @DB-__GT__errx
+__APIREL__/api_c/db_get.html__OCT__2 @DB-__GT__get
+__APIREL__/api_c/db_get.html__OCT__3 @DB-__GT__pget
+__APIREL__/api_c/db_get.html__OCT__DB_CONSUME DB-__GT__get@DB_CONSUME
+__APIREL__/api_c/db_get.html__OCT__DB_CONSUME_WAIT DB-__GT__get@DB_CONSUME_WAIT
+__APIREL__/api_c/db_get.html__OCT__DB_GET_BOTH DB-__GT__get@DB_GET_BOTH
+__APIREL__/api_c/db_get.html__OCT__DB_SET_RECNO DB-__GT__get@DB_SET_RECNO
+__APIREL__/api_c/db_get.html__OCT__DB_AUTO_COMMIT DB-__GT__get@DB_AUTO_COMMIT
+__APIREL__/api_c/db_get.html__OCT__DB_DIRTY_READ DB-__GT__get@DB_DIRTY_READ
+__APIREL__/api_c/db_get.html__OCT__DB_MULTIPLE DB-__GT__get@DB_MULTIPLE
+__APIREL__/api_c/db_get.html__OCT__DB_RMW DB-__GT__get@DB_RMW
+__APIREL__/api_c/db_get_byteswapped.html__OCT__2 @DB-__GT__get_byteswapped
+__APIREL__/api_c/db_get_mpf.html__OCT__2 @DB-__GT__mpf
+__APIREL__/api_c/db_get_type.html__OCT__2 @DB-__GT__get_type
+__APIREL__/api_c/db_getenv.html__OCT__2 @DB-__GT__get_env
+__APIREL__/api_c/db_join.html__OCT__2 @DB-__GT__join
+__APIREL__/api_c/db_join.html__OCT__DB_JOIN_ITEM DB-__GT__join@DB_JOIN_ITEM
+__APIREL__/api_c/db_join.html__OCT__DB_DIRTY_READ DB-__GT__join@DB_DIRTY_READ
+__APIREL__/api_c/db_join.html__OCT__DB_RMW DB-__GT__join@DB_RMW
+__APIREL__/api_c/db_join.html__OCT__DB_JOIN_NOSORT DB-__GT__join@DB_JOIN_NOSORT
+__APIREL__/api_c/db_key_range.html__OCT__2 @DB-__GT__key_range
+__APIREL__/api_c/db_open.html__OCT__2 @DB-__GT__open
+__APIREL__/api_c/db_open.html__OCT__3 @DB-__GT__get_file
+__APIREL__/api_c/db_open.html__OCT__4 @DB-__GT__get_database
+__APIREL__/api_c/db_open.html__OCT__5 @DB-__GT__get_open_flags
+__APIREL__/api_c/db_open.html__OCT__6 @DB-__GT__get_transactional
+__APIREL__/api_c/db_open.html__OCT__DB_AUTO_COMMIT DB-__GT__open@DB_AUTO_COMMIT
+__APIREL__/api_c/db_open.html__OCT__DB_CREATE DB-__GT__open@DB_CREATE
+__APIREL__/api_c/db_open.html__OCT__DB_DIRTY_READ DB-__GT__open@DB_DIRTY_READ
+__APIREL__/api_c/db_open.html__OCT__DB_EXCL DB-__GT__open@DB_EXCL
+__APIREL__/api_c/db_open.html__OCT__DB_NOMMAP DB-__GT__open@DB_NOMMAP
+__APIREL__/api_c/db_open.html__OCT__DB_RDONLY DB-__GT__open@DB_RDONLY
+__APIREL__/api_c/db_open.html__OCT__DB_THREAD DB-__GT__open@DB_THREAD
+__APIREL__/api_c/db_open.html__OCT__DB_TRUNCATE DB-__GT__open@DB_TRUNCATE
+__APIREL__/api_c/db_open.html__OCT__DB_BTREE DB-__GT__open@DB_BTREE
+__APIREL__/api_c/db_open.html__OCT__DB_HASH DB-__GT__open@DB_HASH
+__APIREL__/api_c/db_open.html__OCT__DB_QUEUE DB-__GT__open@DB_QUEUE
+__APIREL__/api_c/db_open.html__OCT__DB_RECNO DB-__GT__open@DB_RECNO
+__APIREL__/api_c/db_open.html__OCT__DB_UNKNOWN DB-__GT__open@DB_UNKNOWN
+__APIREL__/api_c/db_put.html__OCT__2 @DB-__GT__put
+__APIREL__/api_c/db_put.html__OCT__DB_APPEND DB-__GT__put@DB_APPEND
+__APIREL__/api_c/db_put.html__OCT__DB_NODUPDATA DB-__GT__put@DB_NODUPDATA
+__APIREL__/api_c/db_put.html__OCT__DB_NOOVERWRITE DB-__GT__put@DB_NOOVERWRITE
+__APIREL__/api_c/db_put.html__OCT__DB_AUTO_COMMIT DB-__GT__put@DB_AUTO_COMMIT
+__APIREL__/api_c/db_remove.html__OCT__2 @DB-__GT__remove
+__APIREL__/api_c/db_rename.html__OCT__2 @DB-__GT__rename
+__APIREL__/api_c/db_set_append_recno.html__OCT__2 @DB-__GT__set_append_recno
+__APIREL__/api_c/db_set_bt_compare.html__OCT__2 @DB-__GT__set_bt_compare
+__APIREL__/api_c/db_set_bt_minkey.html__OCT__2 @DB-__GT__set_bt_minkey
+__APIREL__/api_c/db_set_bt_minkey.html__OCT__3 @DB-__GT__get_bt_minkey
+__APIREL__/api_c/db_set_bt_prefix.html__OCT__2 @DB-__GT__set_bt_prefix
+__APIREL__/api_c/db_set_cachesize.html__OCT__2 @DB-__GT__set_cachesize
+__APIREL__/api_c/db_set_cachesize.html__OCT__3 @DB-__GT__get_cachesize
+__APIREL__/api_c/db_set_dup_compare.html__OCT__2 @DB-__GT__set_dup_compare
+__APIREL__/api_c/db_set_encrypt.html__OCT__2 @DB-__GT__set_encrypt
+__APIREL__/api_c/db_set_encrypt.html__OCT__3 @DB-__GT__get_encrypt_flags
+__APIREL__/api_c/db_set_encrypt.html__OCT__DB_ENCRYPT_AES DB-__GT__set_encrypt@DB_ENCRYPT_AES
+__APIREL__/api_c/db_set_errcall.html__OCT__2 @DB-__GT__set_errcall
+__APIREL__/api_c/db_set_errpfx.html__OCT__2 @DB-__GT__set_errpfx
+__APIREL__/api_c/db_set_errpfx.html__OCT__3 @DB-__GT__get_errpfx
+__APIREL__/api_c/db_set_feedback.html__OCT__2 @DB-__GT__set_feedback
+__APIREL__/api_c/db_set_feedback.html__OCT__DB_UPGRADE DB-__GT__set_feedback@DB_UPGRADE
+__APIREL__/api_c/db_set_feedback.html__OCT__DB_VERIFY DB-__GT__set_feedback@DB_VERIFY
+__APIREL__/api_c/db_set_flags.html__OCT__2 @DB-__GT__set_flags
+__APIREL__/api_c/db_set_flags.html__OCT__3 @DB-__GT__get_flags
+__APIREL__/api_c/db_set_flags.html__OCT__4 database page @checksum
+__APIREL__/api_c/db_set_flags.html__OCT__DB_CHKSUM DB-__GT__set_flags@DB_CHKSUM
+__APIREL__/api_c/db_set_flags.html__OCT__5 database @encryption
+__APIREL__/api_c/db_set_flags.html__OCT__DB_ENCRYPT DB-__GT__set_flags@DB_ENCRYPT
+__APIREL__/api_c/db_set_flags.html__OCT__6 turn off database @durability
+__APIREL__/api_c/db_set_flags.html__OCT__DB_TXN_NOT_DURABLE DB-__GT__set_flags@DB_TXN_NOT_DURABLE
+__APIREL__/api_c/db_set_flags.html__OCT__7 @duplicate data items
+__APIREL__/api_c/db_set_flags.html__OCT__DB_DUP DB-__GT__set_flags@DB_DUP
+__APIREL__/api_c/db_set_flags.html__OCT__8 sorted @duplicate data items
+__APIREL__/api_c/db_set_flags.html__OCT__DB_DUPSORT DB-__GT__set_flags@DB_DUPSORT
+__APIREL__/api_c/db_set_flags.html__OCT__9 accessing Btree records by @record number
+__APIREL__/api_c/db_set_flags.html__OCT__DB_RECNUM DB-__GT__set_flags@DB_RECNUM
+__APIREL__/api_c/db_set_flags.html__OCT__10 turn off @reverse splits in Btree databases
+__APIREL__/api_c/db_set_flags.html__OCT__11 turn off reverse @splits in Btree databases
+__APIREL__/api_c/db_set_flags.html__OCT__DB_REVSPLITOFF DB-__GT__set_flags@DB_REVSPLITOFF
+__APIREL__/api_c/db_set_flags.html__OCT__DB_DUP DB-__GT__set_flags@DB_DUP
+__APIREL__/api_c/db_set_flags.html__OCT__DB_DUPSORT DB-__GT__set_flags@DB_DUPSORT
+__APIREL__/api_c/db_set_flags.html__OCT__12 @renumbering records in Recno databases
+__APIREL__/api_c/db_set_flags.html__OCT__DB_RENUMBER DB-__GT__set_flags@DB_RENUMBER
+__APIREL__/api_c/db_set_flags.html__OCT__13 pre-loading @text files into Recno databases
+__APIREL__/api_c/db_set_flags.html__OCT__DB_SNAPSHOT DB-__GT__set_flags@DB_SNAPSHOT
+__APIREL__/api_c/db_set_h_ffactor.html__OCT__2 @DB-__GT__set_h_ffactor
+__APIREL__/api_c/db_set_h_ffactor.html__OCT__3 @DB-__GT__get_h_ffactor
+__APIREL__/api_c/db_set_h_hash.html__OCT__2 @DB-__GT__set_h_hash
+__APIREL__/api_c/db_set_h_nelem.html__OCT__2 @DB-__GT__set_h_nelem
+__APIREL__/api_c/db_set_h_nelem.html__OCT__3 @DB-__GT__get_h_nelem
+__APIREL__/api_c/db_set_lorder.html__OCT__2 @DB-__GT__set_lorder
+__APIREL__/api_c/db_set_lorder.html__OCT__3 @DB-__GT__get_lorder
+__APIREL__/api_c/db_set_pagesize.html__OCT__2 @DB-__GT__set_pagesize
+__APIREL__/api_c/db_set_pagesize.html__OCT__3 @DB-__GT__get_pagesize
+__APIREL__/api_c/db_set_paniccall.html__OCT__2 @DB-__GT__set_paniccall
+__APIREL__/api_c/db_set_q_extentsize.html__OCT__2 @DB-__GT__set_q_extentsize
+__APIREL__/api_c/db_set_q_extentsize.html__OCT__3 @DB-__GT__get_q_extentsize
+__APIREL__/api_c/db_set_re_delim.html__OCT__2 @DB-__GT__set_re_delim
+__APIREL__/api_c/db_set_re_delim.html__OCT__3 @DB-__GT__get_re_delim
+__APIREL__/api_c/db_set_re_len.html__OCT__2 @DB-__GT__set_re_len
+__APIREL__/api_c/db_set_re_len.html__OCT__3 @DB-__GT__get_re_len
+__APIREL__/api_c/db_set_re_pad.html__OCT__2 @DB-__GT__set_re_pad
+__APIREL__/api_c/db_set_re_pad.html__OCT__3 @DB-__GT__get_re_pad
+__APIREL__/api_c/db_set_re_source.html__OCT__2 @DB-__GT__set_re_source
+__APIREL__/api_c/db_set_re_source.html__OCT__3 @DB-__GT__get_re_source
+__APIREL__/api_c/db_stat.html__OCT__2 @DB-__GT__stat
+__APIREL__/api_c/db_stat.html__OCT__DB_FAST_STAT DB-__GT__stat@DB_FAST_STAT
+__APIREL__/api_c/db_sync.html__OCT__2 @DB-__GT__sync
+__APIREL__/api_c/db_truncate.html__OCT__2 @DB-__GT__truncate
+__APIREL__/api_c/db_truncate.html__OCT__DB_AUTO_COMMIT DB-__GT__truncate@DB_AUTO_COMMIT
+__APIREL__/api_c/db_upgrade.html__OCT__2 @DB-__GT__upgrade
+__APIREL__/api_c/db_upgrade.html__OCT__DB_DUPSORT DB-__GT__upgrade@DB_DUPSORT
+__APIREL__/api_c/db_upgrade.html__OCT__DB_OLD_VERSION DB-__GT__upgrade@DB_OLD_VERSION
+__APIREL__/api_c/db_verify.html__OCT__2 @DB-__GT__verify
+__APIREL__/api_c/db_verify.html__OCT__3 @DB_VERIFY_BAD
+__APIREL__/api_c/db_verify.html__OCT__DB_SALVAGE DB-__GT__verify@DB_SALVAGE
+__APIREL__/api_c/db_verify.html__OCT__DB_AGGRESSIVE DB-__GT__verify@DB_AGGRESSIVE
+__APIREL__/api_c/db_verify.html__OCT__DB_PRINTABLE DB-__GT__verify@DB_PRINTABLE
+__APIREL__/api_c/db_verify.html__OCT__DB_NOORDERCHK DB-__GT__verify@DB_NOORDERCHK
+__APIREL__/api_c/db_verify.html__OCT__DB_ORDERCHKONLY DB-__GT__verify@DB_ORDERCHKONLY
+__APIREL__/api_c/dbt_class.html__OCT__2 @DBT
+__APIREL__/api_c/dbt_class.html__OCT__3 @key/data pairs
+__APIREL__/api_c/dbt_class.html__OCT__data DBT@data
+__APIREL__/api_c/dbt_class.html__OCT__size DBT@size
+__APIREL__/api_c/dbt_class.html__OCT__ulen DBT@ulen
+__APIREL__/api_c/dbt_class.html__OCT__dlen DBT@dlen
+__APIREL__/api_c/dbt_class.html__OCT__doff DBT@doff
+__APIREL__/api_c/dbt_class.html__OCT__DB_DBT_MALLOC DBT@DB_DBT_MALLOC
+__APIREL__/api_c/dbt_class.html__OCT__DB_DBT_REALLOC DBT@DB_DBT_REALLOC
+__APIREL__/api_c/dbt_class.html__OCT__DB_DBT_USERMEM DBT@DB_DBT_USERMEM
+__APIREL__/api_c/dbt_class.html__OCT__DB_DBT_PARTIAL DBT@DB_DBT_PARTIAL
+__APIREL__/api_c/db_fd.html__OCT__2 @DB-__GT__fd
+__APIREL__/api_c/db_set_alloc.html__OCT__2 @DB-__GT__set_alloc
+__APIREL__/api_c/db_set_errfile.html__OCT__2 @DB-__GT__set_errfile
+__APIREL__/api_c/db_set_errfile.html__OCT__3 @DB-__GT__get_errfile
+__APIREL__/api_c/dbt_bulk.html__OCT__2 @DBT
+__APIREL__/api_c/dbt_bulk.html__OCT__3 @bulk retrieval
+__APIREL__/api_c/dbt_bulk.html__OCT__DB_MULTIPLE_INIT DBT@DB_MULTIPLE_INIT
+__APIREL__/api_c/dbt_bulk.html__OCT__DB_MULTIPLE_NEXT DBT@DB_MULTIPLE_NEXT
+__APIREL__/api_c/dbt_bulk.html__OCT__DB_MULTIPLE_KEY_NEXT DBT@DB_MULTIPLE_KEY_NEXT
+__APIREL__/api_c/dbt_bulk.html__OCT__DB_MULTIPLE_RECNO_NEXT DBT@DB_MULTIPLE_RECNO_NEXT
+__APIREL__/api_c/dbc_class.html__OCT__2 @DBC
+__APIREL__/api_c/dbc_close.html__OCT__2 @DBcursor-__GT__c_close
+__APIREL__/api_c/dbc_count.html__OCT__2 @DBcursor-__GT__c_count
+__APIREL__/api_c/dbc_del.html__OCT__2 @DBcursor-__GT__c_del
+__APIREL__/api_c/dbc_dup.html__OCT__2 @DBcursor-__GT__c_dup
+__APIREL__/api_c/dbc_dup.html__OCT__DB_POSITION DBcursor-__GT__c_dup@DB_POSITION
+__APIREL__/api_c/dbc_get.html__OCT__2 @DBcursor-__GT__c_get
+__APIREL__/api_c/dbc_get.html__OCT__3 @DBcursor-__GT__c_pget
+__APIREL__/api_c/dbc_get.html__OCT__DB_CURRENT DBcursor-__GT__c_get@DB_CURRENT
+__APIREL__/api_c/dbc_get.html__OCT__DB_FIRST DBcursor-__GT__c_get@DB_FIRST
+__APIREL__/api_c/dbc_get.html__OCT__DB_GET_BOTH DBcursor-__GT__c_get@DB_GET_BOTH
+__APIREL__/api_c/dbc_get.html__OCT__DB_GET_BOTH_RANGE DBcursor-__GT__c_get@DB_GET_BOTH_RANGE
+__APIREL__/api_c/dbc_get.html__OCT__DB_GET_RECNO DBcursor-__GT__c_get@DB_GET_RECNO
+__APIREL__/api_c/dbc_get.html__OCT__DB_JOIN_ITEM DBcursor-__GT__c_get@DB_JOIN_ITEM
+__APIREL__/api_c/dbc_get.html__OCT__DB_LAST DBcursor-__GT__c_get@DB_LAST
+__APIREL__/api_c/dbc_get.html__OCT__DB_NEXT DBcursor-__GT__c_get@DB_NEXT
+__APIREL__/api_c/dbc_get.html__OCT__DB_NEXT_DUP DBcursor-__GT__c_get@DB_NEXT_DUP
+__APIREL__/api_c/dbc_get.html__OCT__DB_NEXT_NODUP DBcursor-__GT__c_get@DB_NEXT_NODUP
+__APIREL__/api_c/dbc_get.html__OCT__DB_PREV DBcursor-__GT__c_get@DB_PREV
+__APIREL__/api_c/dbc_get.html__OCT__DB_PREV_NODUP DBcursor-__GT__c_get@DB_PREV_NODUP
+__APIREL__/api_c/dbc_get.html__OCT__DB_SET DBcursor-__GT__c_get@DB_SET
+__APIREL__/api_c/dbc_get.html__OCT__DB_SET_RANGE DBcursor-__GT__c_get@DB_SET_RANGE
+__APIREL__/api_c/dbc_get.html__OCT__DB_SET_RECNO DBcursor-__GT__c_get@DB_SET_RECNO
+__APIREL__/api_c/dbc_get.html__OCT__DB_DIRTY_READ DBcursor-__GT__c_get@DB_DIRTY_READ
+__APIREL__/api_c/dbc_get.html__OCT__DB_MULTIPLE DBcursor-__GT__c_get@DB_MULTIPLE
+__APIREL__/api_c/dbc_get.html__OCT__DB_MULTIPLE_KEY DBcursor-__GT__c_get@DB_MULTIPLE_KEY
+__APIREL__/api_c/dbc_get.html__OCT__DB_RMW DBcursor-__GT__c_get@DB_RMW
+__APIREL__/api_c/dbc_put.html__OCT__2 @DBcursor-__GT__c_put
+__APIREL__/api_c/dbc_put.html__OCT__DB_AFTER DBcursor-__GT__c_put@DB_AFTER
+__APIREL__/api_c/dbc_put.html__OCT__DB_BEFORE DBcursor-__GT__c_put@DB_BEFORE
+__APIREL__/api_c/dbc_put.html__OCT__DB_CURRENT DBcursor-__GT__c_put@DB_CURRENT
+__APIREL__/api_c/dbc_put.html__OCT__DB_KEYFIRST DBcursor-__GT__c_put@DB_KEYFIRST
+__APIREL__/api_c/dbc_put.html__OCT__DB_KEYLAST DBcursor-__GT__c_put@DB_KEYLAST
+__APIREL__/api_c/dbc_put.html__OCT__DB_NODUPDATA DBcursor-__GT__c_put@DB_NODUPDATA
+__APIREL__/api_c/env_class.html__OCT__2 @db_env_create
+__APIREL__/api_c/env_class.html__OCT__DB_RPCCLIENT db_env_create@DB_RPCCLIENT
+__APIREL__/api_c/env_close.html__OCT__2 @DB_ENV-__GT__close
+__APIREL__/api_c/env_dbremove.html__OCT__2 @DB_ENV-__GT__dbremove
+__APIREL__/api_c/env_dbremove.html__OCT__DB_AUTO_COMMIT DB_ENV-__GT__dbremove@DB_AUTO_COMMIT
+__APIREL__/api_c/env_dbrename.html__OCT__2 @DB_ENV-__GT__dbrename
+__APIREL__/api_c/env_dbrename.html__OCT__DB_AUTO_COMMIT DB_ENV-__GT__dbrename@DB_AUTO_COMMIT
+__APIREL__/api_c/env_err.html__OCT__2 @DB_ENV-__GT__err
+__APIREL__/api_c/env_err.html__OCT__3 @DB_ENV-__GT__errx
+__APIREL__/api_c/env_open.html__OCT__2 @DB_ENV-__GT__open
+__APIREL__/api_c/env_open.html__OCT__3 @DB_ENV-__GT__get_home
+__APIREL__/api_c/env_open.html__OCT__4 @DB_ENV-__GT__get_open_flags
+__APIREL__/api_c/env_open.html__OCT__DB_JOINENV DB_ENV-__GT__open@DB_JOINENV
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_CDB DB_ENV-__GT__open@DB_INIT_CDB
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_LOCK DB_ENV-__GT__open@DB_INIT_LOCK
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_LOG DB_ENV-__GT__open@DB_INIT_LOG
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_MPOOL DB_ENV-__GT__open@DB_INIT_MPOOL
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_REP DB_ENV-__GT__open@DB_INIT_REP
+__APIREL__/api_c/env_open.html__OCT__DB_INIT_TXN DB_ENV-__GT__open@DB_INIT_TXN
+__APIREL__/api_c/env_open.html__OCT__DB_RECOVER DB_ENV-__GT__open@DB_RECOVER
+__APIREL__/api_c/env_open.html__OCT__DB_RECOVER_FATAL DB_ENV-__GT__open@DB_RECOVER_FATAL
+__APIREL__/api_c/env_open.html__OCT__5 use @environment constants in naming
+__APIREL__/api_c/env_open.html__OCT__DB_USE_ENVIRON DB_ENV-__GT__open@DB_USE_ENVIRON
+__APIREL__/api_c/env_open.html__OCT__DB_USE_ENVIRON_ROOT DB_ENV-__GT__open@DB_USE_ENVIRON_ROOT
+__APIREL__/api_c/env_open.html__OCT__DB_CREATE DB_ENV-__GT__open@DB_CREATE
+__APIREL__/api_c/env_open.html__OCT__DB_LOCKDOWN DB_ENV-__GT__open@DB_LOCKDOWN
+__APIREL__/api_c/env_open.html__OCT__DB_PRIVATE DB_ENV-__GT__open@DB_PRIVATE
+__APIREL__/api_c/env_open.html__OCT__DB_SYSTEM_MEM DB_ENV-__GT__open@DB_SYSTEM_MEM
+__APIREL__/api_c/env_open.html__OCT__DB_THREAD DB_ENV-__GT__open@DB_THREAD
+__APIREL__/api_c/env_remove.html__OCT__2 @DB_ENV-__GT__remove
+__APIREL__/api_c/env_remove.html__OCT__DB_FORCE DB_ENV-__GT__remove@DB_FORCE
+__APIREL__/api_c/env_remove.html__OCT__3 use @environment constants in naming
+__APIREL__/api_c/env_remove.html__OCT__DB_USE_ENVIRON DB_ENV-__GT__remove@DB_USE_ENVIRON
+__APIREL__/api_c/env_remove.html__OCT__DB_USE_ENVIRON_ROOT DB_ENV-__GT__remove@DB_USE_ENVIRON_ROOT
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__2 @DB_ENV-__GT__set_app_dispatch
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__DB_TXN_BACKWARD_ROLL DB_ENV-__GT__set_app_dispatch@DB_TXN_BACKWARD_ROLL
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__DB_TXN_FORWARD_ROLL DB_ENV-__GT__set_app_dispatch@DB_TXN_FORWARD_ROLL
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__DB_TXN_ABORT DB_ENV-__GT__set_app_dispatch@DB_TXN_ABORT
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__DB_TXN_APPLY DB_ENV-__GT__set_app_dispatch@DB_TXN_APPLY
+__APIREL__/api_c/env_set_app_dispatch.html__OCT__DB_TXN_PRINT DB_ENV-__GT__set_app_dispatch@DB_TXN_PRINT
+__APIREL__/api_c/env_set_cachesize.html__OCT__2 @DB_ENV-__GT__set_cachesize
+__APIREL__/api_c/env_set_cachesize.html__OCT__3 @DB_ENV-__GT__get_cachesize
+__APIREL__/api_c/env_set_cachesize.html__OCT__4 @DbEnv::get_cachesize_nocache
+__APIREL__/api_c/env_set_data_dir.html__OCT__2 @DB_ENV-__GT__set_data_dir
+__APIREL__/api_c/env_set_data_dir.html__OCT__3 @DB_ENV-__GT__get_data_dirs
+__APIREL__/api_c/env_set_encrypt.html__OCT__2 @DB_ENV-__GT__set_encrypt
+__APIREL__/api_c/env_set_encrypt.html__OCT__3 @DB_ENV-__GT__get_encrypt_flags
+__APIREL__/api_c/env_set_encrypt.html__OCT__DB_ENCRYPT_AES DB_ENV-__GT__set_encrypt@DB_ENCRYPT_AES
+__APIREL__/api_c/env_set_errcall.html__OCT__2 @DB_ENV-__GT__set_errcall
+__APIREL__/api_c/env_set_errpfx.html__OCT__2 @DB_ENV-__GT__set_errpfx
+__APIREL__/api_c/env_set_errpfx.html__OCT__3 @DB_ENV-__GT__get_errpfx
+__APIREL__/api_c/env_set_feedback.html__OCT__2 @DB_ENV-__GT__set_feedback
+__APIREL__/api_c/env_set_feedback.html__OCT__DB_RECOVER DB_ENV-__GT__set_feedback@DB_RECOVER
+__APIREL__/api_c/env_set_flags.html__OCT__2 @DB_ENV-__GT__set_flags
+__APIREL__/api_c/env_set_flags.html__OCT__3 @DB_ENV-__GT__get_flags
+__APIREL__/api_c/env_set_flags.html__OCT__DB_AUTO_COMMIT DB_ENV-__GT__set_flags@DB_AUTO_COMMIT
+__APIREL__/api_c/env_set_flags.html__OCT__4 configure @locking for Berkeley DB Concurrent Data Store
+__APIREL__/api_c/env_set_flags.html__OCT__DB_CDB_ALLDB DB_ENV-__GT__set_flags@DB_CDB_ALLDB
+__APIREL__/api_c/env_set_flags.html__OCT__5 turn off system @buffering for database files
+__APIREL__/api_c/env_set_flags.html__OCT__DB_DIRECT_DB DB_ENV-__GT__set_flags@DB_DIRECT_DB
+__APIREL__/api_c/env_set_flags.html__OCT__6 turn off system @buffering for log files
+__APIREL__/api_c/env_set_flags.html__OCT__DB_DIRECT_LOG DB_ENV-__GT__set_flags@DB_DIRECT_LOG
+__APIREL__/api_c/env_set_flags.html__OCT__7 automatic @log file removal
+__APIREL__/api_c/env_set_flags.html__OCT__DB_LOG_AUTOREMOVE DB_ENV-__GT__set_flags@DB_LOG_AUTOREMOVE
+__APIREL__/api_c/env_set_flags.html__OCT__8 ignore @locking
+__APIREL__/api_c/env_set_flags.html__OCT__DB_NOLOCKING DB_ENV-__GT__set_flags@DB_NOLOCKING
+__APIREL__/api_c/env_set_flags.html__OCT__9 turn off database file @memory mapping
+__APIREL__/api_c/env_set_flags.html__OCT__DB_NOMMAP DB_ENV-__GT__set_flags@DB_NOMMAP
+__APIREL__/api_c/env_set_flags.html__OCT__10 ignore database environment @panic
+__APIREL__/api_c/env_set_flags.html__OCT__DB_NOPANIC DB_ENV-__GT__set_flags@DB_NOPANIC
+__APIREL__/api_c/env_set_flags.html__OCT__DB_OVERWRITE DB_ENV-__GT__set_flags@DB_OVERWRITE
+__APIREL__/api_c/env_set_flags.html__OCT__11 turn off access to a database @environment
+__APIREL__/api_c/env_set_flags.html__OCT__DB_PANIC_ENVIRONMENT DB_ENV-__GT__set_flags@DB_PANIC_ENVIRONMENT
+__APIREL__/api_c/env_set_flags.html__OCT__12 fault database @environment in during open
+__APIREL__/api_c/env_set_flags.html__OCT__DB_REGION_INIT DB_ENV-__GT__set_flags@DB_REGION_INIT
+__APIREL__/api_c/env_set_flags.html__OCT__DB_TIME_NOTGRANTED DB_ENV-__GT__set_flags@DB_TIME_NOTGRANTED
+__APIREL__/api_c/env_set_flags.html__OCT__13 turn off synchronous @transaction commit
+__APIREL__/api_c/env_set_flags.html__OCT__DB_TXN_NOSYNC DB_ENV-__GT__set_flags@DB_TXN_NOSYNC
+__APIREL__/api_c/env_set_flags.html__OCT__14 turn off @durability in the database environment
+__APIREL__/api_c/env_set_flags.html__OCT__DB_TXN_NOT_DURABLE DB_ENV-__GT__set_flags@DB_TXN_NOT_DURABLE
+__APIREL__/api_c/env_set_flags.html__OCT__15 turn off synchronous @transaction commit
+__APIREL__/api_c/env_set_flags.html__OCT__DB_TXN_WRITE_NOSYNC DB_ENV-__GT__set_flags@DB_TXN_WRITE_NOSYNC
+__APIREL__/api_c/env_set_flags.html__OCT__16 configure for @stress testing
+__APIREL__/api_c/env_set_flags.html__OCT__DB_YIELDCPU DB_ENV-__GT__set_flags@DB_YIELDCPU
+__APIREL__/api_c/env_set_paniccall.html__OCT__2 @DB_ENV-__GT__set_paniccall
+__APIREL__/api_c/env_set_rpc_server.html__OCT__2 @DB_ENV-__GT__set_rpc_server
+__APIREL__/api_c/env_set_rpc_server.html__OCT__DB_NOSERVER DB_ENV-__GT__set_rpc_server@DB_NOSERVER
+__APIREL__/api_c/env_set_rpc_server.html__OCT__DB_NOSERVER_ID DB_ENV-__GT__set_rpc_server@DB_NOSERVER_ID
+__APIREL__/api_c/env_set_rpc_server.html__OCT__DB_NOSERVER_HOME DB_ENV-__GT__set_rpc_server@DB_NOSERVER_HOME
+__APIREL__/api_c/env_set_rpc_server.html__OCT__3 @DB_NOSERVER
+__APIREL__/api_c/env_set_rpc_server.html__OCT__4 @DB_NOSERVER_ID
+__APIREL__/api_c/env_set_shm_key.html__OCT__2 @DB_ENV-__GT__set_shm_key
+__APIREL__/api_c/env_set_shm_key.html__OCT__3 @DB_ENV-__GT__get_shm_key
+__APIREL__/api_c/env_set_tas_spins.html__OCT__2 @DB_ENV-__GT__set_tas_spins
+__APIREL__/api_c/env_set_tas_spins.html__OCT__3 @DB_ENV-__GT__get_tas_spins
+__APIREL__/api_c/env_set_timeout.html__OCT__2 @DB_ENV-__GT__set_timeout
+__APIREL__/api_c/env_set_timeout.html__OCT__3 @DB_ENV-__GT__get_timeout
+__APIREL__/api_c/env_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DB_ENV-__GT__set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_c/env_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DB_ENV-__GT__set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_c/env_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DB_ENV-__GT__set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_c/env_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DB_ENV-__GT__set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_c/env_set_tmp_dir.html__OCT__2 @DB_ENV-__GT__set_tmp_dir
+__APIREL__/api_c/env_set_tmp_dir.html__OCT__3 @temporary files
+__APIREL__/api_c/env_set_tmp_dir.html__OCT__4 @DB_ENV-__GT__get_tmp_dir
+__APIREL__/api_c/env_set_verbose.html__OCT__2 @DB_ENV-__GT__set_verbose
+__APIREL__/api_c/env_set_verbose.html__OCT__3 @DB_ENV-__GT__get_verbose
+__APIREL__/api_c/env_set_verbose.html__OCT__DB_VERB_CHKPOINT DB_ENV-__GT__set_verbose@DB_VERB_CHKPOINT
+__APIREL__/api_c/env_set_verbose.html__OCT__DB_VERB_DEADLOCK DB_ENV-__GT__set_verbose@DB_VERB_DEADLOCK
+__APIREL__/api_c/env_set_verbose.html__OCT__DB_VERB_RECOVERY DB_ENV-__GT__set_verbose@DB_VERB_RECOVERY
+__APIREL__/api_c/env_set_verbose.html__OCT__DB_VERB_REPLICATION DB_ENV-__GT__set_verbose@DB_VERB_REPLICATION
+__APIREL__/api_c/env_set_verbose.html__OCT__DB_VERB_WAITSFOR DB_ENV-__GT__set_verbose@DB_VERB_WAITSFOR
+__APIREL__/api_c/env_strerror.html__OCT__2 @db_strerror
+__APIREL__/api_c/env_version.html__OCT__2 @db_version
+__APIREL__/api_c/env_version.html__OCT__3 @db_version
+__APIREL__/api_c/env_set_alloc.html__OCT__2 @DB_ENV-__GT__set_alloc
+__APIREL__/api_c/env_set_errfile.html__OCT__2 @DB_ENV-__GT__set_errfile
+__APIREL__/api_c/env_set_errfile.html__OCT__3 @DB_ENV-__GT__get_errfile
+__APIREL__/api_c/dbm.html__OCT__2 @dbm/ndbm
+__APIREL__/api_c/hsearch.html__OCT__2 @hsearch
+__APIREL__/api_c/hsearch.html__OCT__3 @hcreate
+__APIREL__/api_c/env_set_lk_conflicts.html__OCT__2 @DB_ENV-__GT__set_lk_conflicts
+__APIREL__/api_c/env_set_lk_conflicts.html__OCT__3 @DB_ENV-__GT__get_lk_conflicts
+__APIREL__/api_c/env_set_lk_detect.html__OCT__2 @DB_ENV-__GT__set_lk_detect
+__APIREL__/api_c/env_set_lk_detect.html__OCT__3 @DB_ENV-__GT__get_lk_detect
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_DEFAULT DB_ENV-__GT__set_lk_detect@DB_LOCK_DEFAULT
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_EXPIRE DB_ENV-__GT__set_lk_detect@DB_LOCK_EXPIRE
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_MAXLOCKS DB_ENV-__GT__set_lk_detect@DB_LOCK_MAXLOCKS
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_MINLOCKS DB_ENV-__GT__set_lk_detect@DB_LOCK_MINLOCKS
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_MINWRITE DB_ENV-__GT__set_lk_detect@DB_LOCK_MINWRITE
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_OLDEST DB_ENV-__GT__set_lk_detect@DB_LOCK_OLDEST
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_RANDOM DB_ENV-__GT__set_lk_detect@DB_LOCK_RANDOM
+__APIREL__/api_c/env_set_lk_detect.html__OCT__DB_LOCK_YOUNGEST DB_ENV-__GT__set_lk_detect@DB_LOCK_YOUNGEST
+__APIREL__/api_c/env_set_lk_max_lockers.html__OCT__2 @DB_ENV-__GT__set_lk_max_lockers
+__APIREL__/api_c/env_set_lk_max_lockers.html__OCT__3 @DB_ENV-__GT__get_lk_max_lockers
+__APIREL__/api_c/env_set_lk_max_locks.html__OCT__2 @DB_ENV-__GT__set_lk_max_locks
+__APIREL__/api_c/env_set_lk_max_locks.html__OCT__3 @DB_ENV-__GT__get_lk_max_locks
+__APIREL__/api_c/env_set_lk_max_objects.html__OCT__2 @DB_ENV-__GT__set_lk_max_objects
+__APIREL__/api_c/env_set_lk_max_objects.html__OCT__3 @DB_ENV-__GT__get_lk_max_objects
+__APIREL__/api_c/lock_class.html__OCT__2 @DB_LOCK
+__APIREL__/api_c/lock_detect.html__OCT__2 @DB_ENV-__GT__lock_detect
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_DEFAULT DB_ENV-__GT__lock_detect@DB_LOCK_DEFAULT
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_EXPIRE DB_ENV-__GT__lock_detect@DB_LOCK_EXPIRE
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_MAXLOCKS DB_ENV-__GT__lock_detect@DB_LOCK_MAXLOCKS
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_MINLOCKS DB_ENV-__GT__lock_detect@DB_LOCK_MINLOCKS
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_MINWRITE DB_ENV-__GT__lock_detect@DB_LOCK_MINWRITE
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_OLDEST DB_ENV-__GT__lock_detect@DB_LOCK_OLDEST
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_RANDOM DB_ENV-__GT__lock_detect@DB_LOCK_RANDOM
+__APIREL__/api_c/lock_detect.html__OCT__DB_LOCK_YOUNGEST DB_ENV-__GT__lock_detect@DB_LOCK_YOUNGEST
+__APIREL__/api_c/lock_get.html__OCT__2 @DB_ENV-__GT__lock_get
+__APIREL__/api_c/lock_get.html__OCT__DB_LOCK_NOWAIT DB_ENV-__GT__lock_get@DB_LOCK_NOWAIT
+__APIREL__/api_c/lock_id.html__OCT__2 @DB_ENV-__GT__lock_id
+__APIREL__/api_c/lock_id_free.html__OCT__2 @DB_ENV-__GT__lock_id_free
+__APIREL__/api_c/lock_put.html__OCT__2 @DB_ENV-__GT__lock_put
+__APIREL__/api_c/lock_stat.html__OCT__2 @DB_ENV-__GT__lock_stat
+__APIREL__/api_c/lock_stat.html__OCT__DB_STAT_CLEAR DB_ENV-__GT__lock_stat@DB_STAT_CLEAR
+__APIREL__/api_c/lock_vec.html__OCT__2 @DB_ENV-__GT__lock_vec
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_NOWAIT DB_ENV-__GT__lock_vec@DB_LOCK_NOWAIT
+__APIREL__/api_c/lock_vec.html__OCT__op DB_ENV-__GT__lock_vec@op
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_GET DB_ENV-__GT__lock_vec@DB_LOCK_GET
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_GET_TIMEOUT DB_ENV-__GT__lock_vec@DB_LOCK_GET_TIMEOUT
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_PUT DB_ENV-__GT__lock_vec@DB_LOCK_PUT
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_PUT_ALL DB_ENV-__GT__lock_vec@DB_LOCK_PUT_ALL
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_PUT_OBJ DB_ENV-__GT__lock_vec@DB_LOCK_PUT_OBJ
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_TIMEOUT DB_ENV-__GT__lock_vec@DB_LOCK_TIMEOUT
+__APIREL__/api_c/lock_vec.html__OCT__lock DB_ENV-__GT__lock_vec@lock
+__APIREL__/api_c/lock_vec.html__OCT__mode DB_ENV-__GT__lock_vec@mode
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_READ DB_ENV-__GT__lock_vec@DB_LOCK_READ
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_WRITE DB_ENV-__GT__lock_vec@DB_LOCK_WRITE
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_IWRITE DB_ENV-__GT__lock_vec@DB_LOCK_IWRITE
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_IREAD DB_ENV-__GT__lock_vec@DB_LOCK_IREAD
+__APIREL__/api_c/lock_vec.html__OCT__DB_LOCK_IWR DB_ENV-__GT__lock_vec@DB_LOCK_IWR
+__APIREL__/api_c/lock_vec.html__OCT__obj DB_ENV-__GT__lock_vec@obj
+__APIREL__/api_c/env_set_lg_bsize.html__OCT__2 @DB_ENV-__GT__set_lg_bsize
+__APIREL__/api_c/env_set_lg_bsize.html__OCT__3 @DB_ENV-__GT__get_lg_bsize
+__APIREL__/api_c/env_set_lg_dir.html__OCT__2 @DB_ENV-__GT__set_lg_dir
+__APIREL__/api_c/env_set_lg_dir.html__OCT__3 @DB_ENV-__GT__get_lg_dir
+__APIREL__/api_c/env_set_lg_max.html__OCT__2 @DB_ENV-__GT__set_lg_max
+__APIREL__/api_c/env_set_lg_max.html__OCT__3 @DB_ENV-__GT__get_lg_max
+__APIREL__/api_c/env_set_lg_regionmax.html__OCT__2 @DB_ENV-__GT__set_lg_regionmax
+__APIREL__/api_c/env_set_lg_regionmax.html__OCT__3 @DB_ENV-__GT__get_lg_regionmax
+__APIREL__/api_c/log_archive.html__OCT__2 @DB_ENV-__GT__log_archive
+__APIREL__/api_c/log_archive.html__OCT__DB_ARCH_ABS DB_ENV-__GT__log_archive@DB_ARCH_ABS
+__APIREL__/api_c/log_archive.html__OCT__DB_ARCH_DATA DB_ENV-__GT__log_archive@DB_ARCH_DATA
+__APIREL__/api_c/log_archive.html__OCT__DB_ARCH_LOG DB_ENV-__GT__log_archive@DB_ARCH_LOG
+__APIREL__/api_c/log_archive.html__OCT__DB_ARCH_REMOVE DB_ENV-__GT__log_archive@DB_ARCH_REMOVE
+__APIREL__/api_c/log_compare.html__OCT__2 @log_compare
+__APIREL__/api_c/log_cursor.html__OCT__2 @DB_ENV-__GT__log_cursor
+__APIREL__/api_c/log_file.html__OCT__2 @DB_ENV-__GT__log_file
+__APIREL__/api_c/log_flush.html__OCT__2 @DB_ENV-__GT__log_flush
+__APIREL__/api_c/log_put.html__OCT__2 @DB_ENV-__GT__log_put
+__APIREL__/api_c/log_put.html__OCT__DB_FLUSH DB_ENV-__GT__log_put@DB_FLUSH
+__APIREL__/api_c/log_stat.html__OCT__2 @DB_ENV-__GT__log_stat
+__APIREL__/api_c/log_stat.html__OCT__DB_STAT_CLEAR DB_ENV-__GT__log_stat@DB_STAT_CLEAR
+__APIREL__/api_c/logc_class.html__OCT__2 @DB_LOGC
+__APIREL__/api_c/logc_close.html__OCT__2 @DB_LOGC-__GT__close
+__APIREL__/api_c/logc_get.html__OCT__2 @DB_LOGC-__GT__get
+__APIREL__/api_c/logc_get.html__OCT__DB_CURRENT DB_LOGC-__GT__get@DB_CURRENT
+__APIREL__/api_c/logc_get.html__OCT__DB_FIRST DB_LOGC-__GT__get@DB_FIRST
+__APIREL__/api_c/logc_get.html__OCT__DB_LAST DB_LOGC-__GT__get@DB_LAST
+__APIREL__/api_c/logc_get.html__OCT__DB_NEXT DB_LOGC-__GT__get@DB_NEXT
+__APIREL__/api_c/logc_get.html__OCT__DB_PREV DB_LOGC-__GT__get@DB_PREV
+__APIREL__/api_c/logc_get.html__OCT__DB_SET DB_LOGC-__GT__get@DB_SET
+__APIREL__/api_c/lsn_class.html__OCT__2 @DB_LSN
+__APIREL__/api_c/env_set_mp_mmapsize.html__OCT__2 @DB_ENV-__GT__set_mp_mmapsize
+__APIREL__/api_c/env_set_mp_mmapsize.html__OCT__3 @DB_ENV-__GT__get_mp_mmapsize
+__APIREL__/api_c/memp_set_flags.html__OCT__2 @DB_MPOOLFILE-__GT__set_flags
+__APIREL__/api_c/memp_set_flags.html__OCT__3 @DB_MPOOLFILE-__GT__get_flags
+__APIREL__/api_c/memp_set_flags.html__OCT__DB_MPOOL_NOFILE DB_MPOOLFILE-__GT__set_flags@DB_MPOOL_NOFILE
+__APIREL__/api_c/memp_set_maxsize.html__OCT__2 @DB_MPOOLFILE-__GT__set_maxsize
+__APIREL__/api_c/memp_set_maxsize.html__OCT__3 @DB_MPOOLFILE-__GT__get_maxsize
+__APIREL__/api_c/memp_set_priority.html__OCT__2 @DB_MPOOLFILE-__GT__set_priority
+__APIREL__/api_c/memp_set_priority.html__OCT__3 @DB_MPOOLFILE-__GT__get_priority
+__APIREL__/api_c/memp_set_priority.html__OCT__DB_PRIORITY_VERY_LOW DB_MPOOLFILE-__GT__set_priority@DB_PRIORITY_VERY_LOW
+__APIREL__/api_c/memp_set_priority.html__OCT__DB_PRIORITY_LOW DB_MPOOLFILE-__GT__set_priority@DB_PRIORITY_LOW
+__APIREL__/api_c/memp_set_priority.html__OCT__DB_PRIORITY_DEFAULT DB_MPOOLFILE-__GT__set_priority@DB_PRIORITY_DEFAULT
+__APIREL__/api_c/memp_set_priority.html__OCT__DB_PRIORITY_HIGH DB_MPOOLFILE-__GT__set_priority@DB_PRIORITY_HIGH
+__APIREL__/api_c/memp_set_priority.html__OCT__DB_PRIORITY_VERY_HIGH DB_MPOOLFILE-__GT__set_priority@DB_PRIORITY_VERY_HIGH
+__APIREL__/api_c/memp_stat.html__OCT__2 @DB_ENV-__GT__memp_stat
+__APIREL__/api_c/memp_stat.html__OCT__DB_STAT_CLEAR DB_ENV-__GT__memp_stat@DB_STAT_CLEAR
+__APIREL__/api_c/memp_sync.html__OCT__2 @DB_ENV-__GT__memp_sync
+__APIREL__/api_c/memp_trickle.html__OCT__2 @DB_ENV-__GT__memp_trickle
+__APIREL__/api_c/mempfile_class.html__OCT__2 @DB_MPOOLFILE
+__APIREL__/api_c/memp_fclose.html__OCT__2 @DB_MPOOLFILE-__GT__close
+__APIREL__/api_c/memp_fcreate.html__OCT__2 @DB_ENV-__GT__memp_fcreate
+__APIREL__/api_c/memp_fget.html__OCT__2 @DB_MPOOLFILE-__GT__get
+__APIREL__/api_c/memp_fget.html__OCT__3 @DB_PAGE_NOTFOUND
+__APIREL__/api_c/memp_fget.html__OCT__DB_MPOOL_CREATE DB_MPOOLFILE-__GT__get@DB_MPOOL_CREATE
+__APIREL__/api_c/memp_fget.html__OCT__DB_MPOOL_LAST DB_MPOOLFILE-__GT__get@DB_MPOOL_LAST
+__APIREL__/api_c/memp_fget.html__OCT__DB_MPOOL_NEW DB_MPOOLFILE-__GT__get@DB_MPOOL_NEW
+__APIREL__/api_c/memp_fopen.html__OCT__2 @DB_MPOOLFILE-__GT__open
+__APIREL__/api_c/memp_fopen.html__OCT__DB_CREATE DB_MPOOLFILE-__GT__open@DB_CREATE
+__APIREL__/api_c/memp_fopen.html__OCT__3 turn off system @buffering
+__APIREL__/api_c/memp_fopen.html__OCT__DB_DIRECT DB_MPOOLFILE-__GT__open@DB_DIRECT
+__APIREL__/api_c/memp_fopen.html__OCT__DB_NOMMAP DB_MPOOLFILE-__GT__open@DB_NOMMAP
+__APIREL__/api_c/memp_fopen.html__OCT__DB_ODDFILESIZE DB_MPOOLFILE-__GT__open@DB_ODDFILESIZE
+__APIREL__/api_c/memp_fopen.html__OCT__DB_RDONLY DB_MPOOLFILE-__GT__open@DB_RDONLY
+__APIREL__/api_c/memp_fput.html__OCT__2 @DB_MPOOLFILE-__GT__put
+__APIREL__/api_c/memp_fput.html__OCT__DB_MPOOL_CLEAN DB_MPOOLFILE-__GT__put@DB_MPOOL_CLEAN
+__APIREL__/api_c/memp_fput.html__OCT__DB_MPOOL_DIRTY DB_MPOOLFILE-__GT__put@DB_MPOOL_DIRTY
+__APIREL__/api_c/memp_fput.html__OCT__DB_MPOOL_DISCARD DB_MPOOLFILE-__GT__put@DB_MPOOL_DISCARD
+__APIREL__/api_c/memp_fset.html__OCT__2 @DB_MPOOLFILE-__GT__set
+__APIREL__/api_c/memp_fset.html__OCT__DB_MPOOL_CLEAN DB_MPOOLFILE-__GT__set@DB_MPOOL_CLEAN
+__APIREL__/api_c/memp_fset.html__OCT__DB_MPOOL_DIRTY DB_MPOOLFILE-__GT__set@DB_MPOOL_DIRTY
+__APIREL__/api_c/memp_fset.html__OCT__DB_MPOOL_DISCARD DB_MPOOLFILE-__GT__set@DB_MPOOL_DISCARD
+__APIREL__/api_c/memp_fsync.html__OCT__2 @DB_MPOOLFILE-__GT__sync
+__APIREL__/api_c/memp_register.html__OCT__2 @DB_ENV-__GT__memp_register
+__APIREL__/api_c/memp_set_clear_len.html__OCT__2 @DB_MPOOLFILE-__GT__set_clear_len
+__APIREL__/api_c/memp_set_clear_len.html__OCT__3 @DB_MPOOLFILE-__GT__get_clear_len
+__APIREL__/api_c/memp_set_fileid.html__OCT__2 @DB_MPOOLFILE-__GT__set_fileid
+__APIREL__/api_c/memp_set_fileid.html__OCT__3 @DB_MPOOLFILE-__GT__get_fileid
+__APIREL__/api_c/memp_set_ftype.html__OCT__2 @DB_MPOOLFILE-__GT__set_ftype
+__APIREL__/api_c/memp_set_ftype.html__OCT__3 @DB_MPOOLFILE-__GT__get_ftype
+__APIREL__/api_c/memp_set_lsn_offset.html__OCT__2 @DB_MPOOLFILE-__GT__set_lsn_offset
+__APIREL__/api_c/memp_set_lsn_offset.html__OCT__3 @DB_MPOOLFILE-__GT__get_lsn_offset
+__APIREL__/api_c/memp_set_pgcookie.html__OCT__2 @DB_MPOOLFILE-__GT__set_pgcookie
+__APIREL__/api_c/memp_set_pgcookie.html__OCT__3 @DB_MPOOLFILE-__GT__get_pgcookie
+__APIREL__/api_c/rep_elect.html__OCT__2 @DB_ENV-__GT__rep_elect
+__APIREL__/api_c/rep_elect.html__OCT__3 @DB_REP_UNAVAIL
+__APIREL__/api_c/rep_limit.html__OCT__2 @DB_ENV-__GT__set_rep_limit
+__APIREL__/api_c/rep_limit.html__OCT__3 @DB_ENV-__GT__get_rep_limit
+__APIREL__/api_c/rep_message.html__OCT__2 @DB_ENV-__GT__rep_process_message
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_DUPMASTER DB_ENV-__GT__rep_process_message@DB_REP_DUPMASTER
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_HOLDELECTION DB_ENV-__GT__rep_process_message@DB_REP_HOLDELECTION
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_ISPERM DB_ENV-__GT__rep_process_message@DB_REP_ISPERM
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_NEWMASTER DB_ENV-__GT__rep_process_message@DB_REP_NEWMASTER
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_NEWSITE DB_ENV-__GT__rep_process_message@DB_REP_NEWSITE
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_NOTPERM DB_ENV-__GT__rep_process_message@DB_REP_NOTPERM
+__APIREL__/api_c/rep_message.html__OCT__DB_REP_OUTDATED DB_ENV-__GT__rep_process_message@DB_REP_OUTDATED
+__APIREL__/api_c/rep_start.html__OCT__2 @DB_ENV-__GT__rep_start
+__APIREL__/api_c/rep_start.html__OCT__DB_REP_CLIENT DB_ENV-__GT__rep_start@DB_REP_CLIENT
+__APIREL__/api_c/rep_start.html__OCT__DB_REP_LOGSONLY DB_ENV-__GT__rep_start@DB_REP_LOGSONLY
+__APIREL__/api_c/rep_start.html__OCT__DB_REP_MASTER DB_ENV-__GT__rep_start@DB_REP_MASTER
+__APIREL__/api_c/rep_stat.html__OCT__2 @DB_ENV-__GT__rep_stat
+__APIREL__/api_c/rep_stat.html__OCT__DB_STAT_CLEAR DB_ENV-__GT__rep_stat@DB_STAT_CLEAR
+__APIREL__/api_c/rep_transport.html__OCT__2 @DB_ENV-__GT__set_rep_transport
+__APIREL__/api_c/rep_transport.html__OCT__3 @DB_EID_BROADCAST
+__APIREL__/api_c/rep_transport.html__OCT__DB_REP_NOBUFFER DB_ENV-__GT__set_rep_transport@DB_REP_NOBUFFER
+__APIREL__/api_c/rep_transport.html__OCT__DB_REP_PERMANENT DB_ENV-__GT__set_rep_transport@DB_REP_PERMANENT
+__APIREL__/api_c/set_func_close.html__OCT__2 @db_env_set_func_close
+__APIREL__/api_c/set_func_dirfree.html__OCT__2 @db_env_set_func_dirfree
+__APIREL__/api_c/set_func_dirlist.html__OCT__2 @db_env_set_func_dirlist
+__APIREL__/api_c/set_func_exists.html__OCT__2 @db_env_set_func_exists
+__APIREL__/api_c/set_func_free.html__OCT__2 @db_env_set_func_free
+__APIREL__/api_c/set_func_fsync.html__OCT__2 @db_env_set_func_fsync
+__APIREL__/api_c/set_func_ioinfo.html__OCT__2 @db_env_set_func_ioinfo
+__APIREL__/api_c/set_func_malloc.html__OCT__2 @db_env_set_func_malloc
+__APIREL__/api_c/set_func_map.html__OCT__2 @db_env_set_func_map
+__APIREL__/api_c/set_func_open.html__OCT__2 @db_env_set_func_open
+__APIREL__/api_c/set_func_read.html__OCT__2 @db_env_set_func_read
+__APIREL__/api_c/set_func_realloc.html__OCT__2 @db_env_set_func_realloc
+__APIREL__/api_c/set_func_rename.html__OCT__2 @db_env_set_func_rename
+__APIREL__/api_c/set_func_seek.html__OCT__2 @db_env_set_func_seek
+__APIREL__/api_c/set_func_sleep.html__OCT__2 @db_env_set_func_sleep
+__APIREL__/api_c/set_func_unlink.html__OCT__2 @db_env_set_func_unlink
+__APIREL__/api_c/set_func_unmap.html__OCT__2 @db_env_set_func_unmap
+__APIREL__/api_c/set_func_write.html__OCT__2 @db_env_set_func_write
+__APIREL__/api_c/set_func_yield.html__OCT__2 @db_env_set_func_yield
+__APIREL__/api_c/env_set_tx_max.html__OCT__2 @DB_ENV-__GT__set_tx_max
+__APIREL__/api_c/env_set_tx_max.html__OCT__3 @DB_ENV-__GT__get_tx_max
+__APIREL__/api_c/env_set_tx_timestamp.html__OCT__2 @DB_ENV-__GT__set_tx_timestamp
+__APIREL__/api_c/env_set_tx_timestamp.html__OCT__3 @DB_ENV-__GT__get_tx_timestamp
+__APIREL__/api_c/txn_abort.html__OCT__2 @DB_TXN-__GT__abort
+__APIREL__/api_c/txn_begin.html__OCT__2 @DB_ENV-__GT__txn_begin
+__APIREL__/api_c/txn_begin.html__OCT__DB_DIRTY_READ DB_ENV-__GT__txn_begin@DB_DIRTY_READ
+__APIREL__/api_c/txn_begin.html__OCT__DB_TXN_NOSYNC DB_ENV-__GT__txn_begin@DB_TXN_NOSYNC
+__APIREL__/api_c/txn_begin.html__OCT__DB_TXN_NOWAIT DB_ENV-__GT__txn_begin@DB_TXN_NOWAIT
+__APIREL__/api_c/txn_begin.html__OCT__DB_TXN_SYNC DB_ENV-__GT__txn_begin@DB_TXN_SYNC
+__APIREL__/api_c/txn_checkpoint.html__OCT__2 @DB_ENV-__GT__txn_checkpoint
+__APIREL__/api_c/txn_checkpoint.html__OCT__DB_FORCE DB_ENV-__GT__txn_checkpoint@DB_FORCE
+__APIREL__/api_c/txn_class.html__OCT__2 @DB_TXN
+__APIREL__/api_c/txn_commit.html__OCT__2 @DB_TXN-__GT__commit
+__APIREL__/api_c/txn_commit.html__OCT__DB_TXN_NOSYNC DB_TXN-__GT__commit@DB_TXN_NOSYNC
+__APIREL__/api_c/txn_commit.html__OCT__DB_TXN_SYNC DB_TXN-__GT__commit@DB_TXN_SYNC
+__APIREL__/api_c/txn_discard.html__OCT__2 @DB_TXN-__GT__discard
+__APIREL__/api_c/txn_id.html__OCT__2 @DB_TXN-__GT__id
+__APIREL__/api_c/txn_prepare.html__OCT__2 @DB_TXN-__GT__prepare
+__APIREL__/api_c/txn_prepare.html__OCT__3 @DB_XIDDATASIZE
+__APIREL__/api_c/txn_recover.html__OCT__2 @DB_ENV-__GT__txn_recover
+__APIREL__/api_c/txn_recover.html__OCT__DB_FIRST DB_ENV-__GT__txn_recover@DB_FIRST
+__APIREL__/api_c/txn_recover.html__OCT__DB_NEXT DB_ENV-__GT__txn_recover@DB_NEXT
+__APIREL__/api_c/txn_set_timeout.html__OCT__2 @DB_TXN-__GT__set_timeout
+__APIREL__/api_c/txn_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DB_TXN-__GT__set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_c/txn_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DB_TXN-__GT__set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_c/txn_stat.html__OCT__2 @DB_ENV-__GT__txn_stat
+__APIREL__/api_c/txn_stat.html__OCT__DB_STAT_CLEAR DB_ENV-__GT__txn_stat@DB_STAT_CLEAR
+__APIREL__/ref/am/close.html__OCT__2 @closing a database
+__APIREL__/ref/am/count.html__OCT__2 @counting data items for a key
+__APIREL__/ref/am/curclose.html__OCT__2 @closing a cursor
+__APIREL__/ref/am/curclose.html__OCT__3 closing a @cursor
+__APIREL__/ref/am/curdel.html__OCT__2 @deleting records with a cursor
+__APIREL__/ref/am/curdel.html__OCT__3 deleting records with a @cursor
+__APIREL__/ref/am/curdup.html__OCT__2 @duplicating a cursor
+__APIREL__/ref/am/curdup.html__OCT__3 duplicating a @cursor
+__APIREL__/ref/am/curget.html__OCT__2 @retrieving records with a cursor
+__APIREL__/ref/am/curget.html__OCT__3 retrieving records with a @cursor
+__APIREL__/ref/am/curput.html__OCT__2 @storing records with a cursor
+__APIREL__/ref/am/curput.html__OCT__3 storing records with a @cursor
+__APIREL__/ref/am/cursor.html__OCT__2 database @cursors
+__APIREL__/ref/am/delete.html__OCT__2 @deleting records
+__APIREL__/ref/am/get.html__OCT__2 @retrieving records
+__APIREL__/ref/am/join.html__OCT__2 @equality join
+__APIREL__/ref/am/join.html__OCT__3 equality @join
+__APIREL__/ref/am/join.html__OCT__4 @natural join
+__APIREL__/ref/am/open.html__OCT__2 @opening a database
+__APIREL__/ref/am/put.html__OCT__2 @storing records
+__APIREL__/ref/am/second.html__OCT__2 @secondary indices
+__APIREL__/ref/am/second.html__OCT__3 secondary @indices
+__APIREL__/ref/am/stat.html__OCT__2 database @statistics
+__APIREL__/ref/am/sync.html__OCT__2 flushing the database @cache
+__APIREL__/ref/am/truncate.html__OCT__2 @truncating a database
+__APIREL__/ref/am/truncate.html__OCT__3 @emptying a database
+__APIREL__/ref/am/upgrade.html__OCT__2 @upgrading databases
+__APIREL__/ref/am/verify.html__OCT__2 database @verification
+__APIREL__/ref/am/verify.html__OCT__3 database @salvage
+__APIREL__/ref/am/verify.html__OCT__4 salvaging @corrupted databases
+__APIREL__/ref/am_conf/bt_compare.html__OCT__2 specifying a Btree @comparison function
+__APIREL__/ref/am_conf/bt_recnum.html__OCT__2 retrieving Btree records by logical record @number
+__APIREL__/ref/am_conf/bt_recnum.html__OCT__3 retrieving Btree records by @logical record @number
+__APIREL__/ref/am_conf/byteorder.html__OCT__2 selecting a @byte order
+__APIREL__/ref/am_conf/cachesize.html__OCT__2 selecting a @cache size
+__APIREL__/ref/am_conf/dup.html__OCT__2 @duplicate data items
+__APIREL__/ref/am_conf/extentsize.html__OCT__2 selecting a Queue @extent size
+__APIREL__/ref/am_conf/h_ffactor.html__OCT__2 page @fill factor
+__APIREL__/ref/am_conf/h_hash.html__OCT__2 specifying a database @hash
+__APIREL__/ref/am_conf/h_nelem.html__OCT__2 @hash table size
+__APIREL__/ref/am_conf/intro.html__OCT__2 introduction to the @access methods
+__APIREL__/ref/am_conf/logrec.html__OCT__2 logical @record numbers
+__APIREL__/ref/am_conf/pagesize.html__OCT__2 selecting a @page size
+__APIREL__/ref/am_conf/re_source.html__OCT__2 @text backing files
+__APIREL__/ref/am_conf/recno.html__OCT__2 managing @record-based databases
+__APIREL__/ref/am_conf/renumber.html__OCT__2 logically renumbering @records
+__APIREL__/ref/am_conf/select.html__OCT__2 selecting an @access method
+__APIREL__/ref/am_misc/align.html__OCT__2 data @alignment
+__APIREL__/ref/am_misc/dbsizes.html__OCT__2 database @limits
+__APIREL__/ref/am_misc/diskspace.html__OCT__2 @disk space requirements
+__APIREL__/ref/am_misc/error.html__OCT__2 @error handling
+__APIREL__/ref/am_misc/faq.html__OCT__2 @access method FAQ
+__APIREL__/ref/am_misc/faq.html__OCT__3 database @compaction
+__APIREL__/ref/am_misc/faq.html__OCT__4 returning pages to the @filesystem
+__APIREL__/ref/am_misc/faq.html__OCT__5 @double buffering
+__APIREL__/ref/am_misc/get_bulk.html__OCT__2 @retrieving records in bulk
+__APIREL__/ref/am_misc/partial.html__OCT__2 @partial record storage and retrieval
+__APIREL__/ref/am_misc/perm.html__OCT__2 retrieved key/data @permanence
+__APIREL__/ref/am_misc/perm.html__OCT__3 retrieved @key/data permanence
+__APIREL__/ref/am_misc/stability.html__OCT__2 @cursor stability
+__APIREL__/ref/am_misc/stability.html__OCT__3 cursor @stability
+__APIREL__/ref/am_misc/stability.html__OCT__4 @degrees of isolation
+__APIREL__/ref/am_misc/stability.html__OCT__5 degrees of @isolation
+__APIREL__/ref/am_misc/tune.html__OCT__2 @access method tuning
+__APIREL__/ref/am_misc/tune.html__OCT__3 access method @tuning
+__APIREL__/ref/arch/apis.html__OCT__2 programmatic @APIs
+__APIREL__/ref/arch/utilities.html__OCT__2 @utilities
+__APIREL__/ref/build_unix/aix.html__OCT__2 @AIX
+__APIREL__/ref/build_unix/conf.html__OCT__2 @configuring Berkeley DB for UNIX systems
+__APIREL__/ref/build_unix/conf.html__OCT__3 configuring Berkeley DB for @UNIX systems
+__APIREL__/ref/build_unix/conf.html__OCT__4 configuring without large @file support
+__APIREL__/ref/build_unix/conf.html__OCT__--disable-largefile Configuring Berkeley DB@--disable-largefile
+__APIREL__/ref/build_unix/conf.html__OCT__5 disabling @shared libraries
+__APIREL__/ref/build_unix/conf.html__OCT__6 disabling @static libraries
+__APIREL__/ref/build_unix/conf.html__OCT__--disable-shared Configuring Berkeley DB@--disable-shared
+__APIREL__/ref/build_unix/conf.html__OCT__--disable-static Configuring Berkeley DB@--disable-static
+__APIREL__/ref/build_unix/conf.html__OCT__7 configuring Berkeley DB @1.85 API compatibility
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-compat185 Configuring Berkeley DB@--enable-compat185
+__APIREL__/ref/build_unix/conf.html__OCT__8 configuring the @C++ API
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-cxx Configuring Berkeley DB@--enable-cxx
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-debug Configuring Berkeley DB@--enable-debug
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-debug_rop Configuring Berkeley DB@--enable-debug_rop
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-debug_wop Configuring Berkeley DB@--enable-debug_wop
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-diagnostic Configuring Berkeley DB@--enable-diagnostic
+__APIREL__/ref/build_unix/conf.html__OCT__9 building a utility to dump Berkeley DB @1.85 databases
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-dump185 Configuring Berkeley DB@--enable-dump185
+__APIREL__/ref/build_unix/conf.html__OCT__10 configuring the @Java API
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-java Configuring Berkeley DB@--enable-java
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-posixmutexes Configuring Berkeley DB@--enable-posixmutexes
+__APIREL__/ref/build_unix/conf.html__OCT__11 configuring a @RPC client/server
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-rpc Configuring Berkeley DB@--enable-rpc
+__APIREL__/ref/build_unix/conf.html__OCT__12 configuring a small memory @footprint library
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-smallbuild Configuring Berkeley DB@--enable-smallbuild
+__APIREL__/ref/build_unix/conf.html__OCT__13 configuring the @Tcl API
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-tcl Configuring Berkeley DB@--enable-tcl
+__APIREL__/ref/build_unix/conf.html__OCT__14 configuring the @test suite
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-test Configuring Berkeley DB@--enable-test
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-uimutexes Configuring Berkeley DB@--enable-uimutexes
+__APIREL__/ref/build_unix/conf.html__OCT__--enable-umrw Configuring Berkeley DB@--enable-umrw
+__APIREL__/ref/build_unix/conf.html__OCT__--with-mutex=MUTEX Configuring Berkeley DB@--with-mutex=MUTEX
+__APIREL__/ref/build_unix/conf.html__OCT__--with-mutexalign=ALIGNMENT Configuring Berkeley DB@--with-mutexalign=ALIGNMENT
+__APIREL__/ref/build_unix/conf.html__OCT__--with-rpm=ARCHIVE Configuring Berkeley DB@--with-rpm=ARCHIVE
+__APIREL__/ref/build_unix/conf.html__OCT__--with-tcl=DIR Configuring Berkeley DB@--with-tcl=DIR
+__APIREL__/ref/build_unix/conf.html__OCT__--with-uniquename=NAME Configuring Berkeley DB@--with-uniquename=NAME
+__APIREL__/ref/build_unix/flags.html__OCT__2 changing @compile or load options
+__APIREL__/ref/build_unix/flags.html__OCT__3 changing compile or @load options
+__APIREL__/ref/build_unix/freebsd.html__OCT__2 @FreeBSD
+__APIREL__/ref/build_unix/hpux.html__OCT__2 @HP-UX
+__APIREL__/ref/build_unix/install.html__OCT__2 @installing Berkeley DB for UNIX systems
+__APIREL__/ref/build_unix/intro.html__OCT__2 @building for UNIX
+__APIREL__/ref/build_unix/intro.html__OCT__3 @building for QNX
+__APIREL__/ref/build_unix/intro.html__OCT__4 building for @UNIX
+__APIREL__/ref/build_unix/intro.html__OCT__5 building for @QNX
+__APIREL__/ref/build_unix/irix.html__OCT__2 @IRIX
+__APIREL__/ref/build_unix/linux.html__OCT__2 @Linux
+__APIREL__/ref/build_unix/macosx.html__OCT__2 @Mac OS X
+__APIREL__/ref/build_unix/notes.html__OCT__2 @building for UNIX FAQ
+__APIREL__/ref/build_unix/notes.html__OCT__3 building for @UNIX FAQ
+__APIREL__/ref/build_unix/osf1.html__OCT__2 @OSF/1
+__APIREL__/ref/build_unix/qnx.html__OCT__2 @QNX
+__APIREL__/ref/build_unix/sco.html__OCT__2 @SCO
+__APIREL__/ref/build_unix/shlib.html__OCT__2 @shared libraries
+__APIREL__/ref/build_unix/small.html__OCT__--disable-cryptography Building a small memory footprint library@--disable-cryptography
+__APIREL__/ref/build_unix/small.html__OCT__--disable-hash Building a small memory footprint library@--disable-hash
+__APIREL__/ref/build_unix/small.html__OCT__--disable-queue Building a small memory footprint library@--disable-queue
+__APIREL__/ref/build_unix/small.html__OCT__--disable-replication Building a small memory footprint library@--disable-replication
+__APIREL__/ref/build_unix/small.html__OCT__--disable-verify Building a small memory footprint library@--disable-verify
+__APIREL__/ref/build_unix/small.html__OCT__--enable-smallbuild Building a small memory footprint library@--enable-smallbuild
+__APIREL__/ref/build_unix/solaris.html__OCT__2 @Solaris
+__APIREL__/ref/build_unix/sunos.html__OCT__2 @SunOS
+__APIREL__/ref/build_unix/test.html__OCT__2 running the @test suite under UNIX
+__APIREL__/ref/build_unix/ultrix.html__OCT__2 @Ultrix
+__APIREL__/ref/build_vxworks/faq.html__OCT__2 @building for VxWorks FAQ
+__APIREL__/ref/build_vxworks/faq.html__OCT__3 building for @VxWorks FAQ
+__APIREL__/ref/build_vxworks/intro.html__OCT__2 @building for VxWorks
+__APIREL__/ref/build_vxworks/introae.html__OCT__2 @building for VxWorks AE
+__APIREL__/ref/build_vxworks/notes.html__OCT__2 @VxWorks notes
+__APIREL__/ref/build_win/faq.html__OCT__2 @building for Windows FAQ
+__APIREL__/ref/build_win/faq.html__OCT__3 building for @Windows FAQ
+__APIREL__/ref/build_win/faq.html__OCT__4 configuring for @MinGW
+__APIREL__/ref/build_win/intro.html__OCT__2 @building for Win32
+__APIREL__/ref/build_win/notes.html__OCT__2 @Windows notes
+__APIREL__/ref/build_win/test.html__OCT__2 running the @test suite under Windows
+__APIREL__/ref/build_win/test.html__OCT__3 running the test suite under @Windows
+__APIREL__/ref/cam/intro.html__OCT__2 @Concurrent Data Store
+__APIREL__/ref/debug/intro.html__OCT__2 introduction to @debugging
+__APIREL__/ref/debug/common.html__OCT__2 @debugging applications
+__APIREL__/ref/distrib/layout.html__OCT__2 @source code layout
+__APIREL__/ref/dumpload/text.html__OCT__2 loading @text into databases
+__APIREL__/ref/dumpload/utility.html__OCT__2 dumping/loading @text to/from databases
+__APIREL__/ref/env/create.html__OCT__2 database @environment
+__APIREL__/ref/env/db_config.html__OCT__2 @DB_CONFIG
+__APIREL__/ref/env/db_config.html__OCT__3 database environment @configuration
+__APIREL__/ref/env/encrypt.html__OCT__2 @encryption
+__APIREL__/ref/env/faq.html__OCT__2 database @environment FAQ
+__APIREL__/ref/env/intro.html__OCT__2 introduction to database @environments
+__APIREL__/ref/env/naming.html__OCT__2 file @naming
+__APIREL__/ref/env/naming.html__OCT__db_home File naming@db_home
+__APIREL__/ref/env/naming.html__OCT__DB_HOME File naming@DB_HOME
+__APIREL__/ref/env/region.html__OCT__2 @__db.001
+__APIREL__/ref/env/remote.html__OCT__2 remote @filesystems
+__APIREL__/ref/env/remote.html__OCT__3 @NFS problems
+__APIREL__/ref/env/security.html__OCT__2 @security
+__APIREL__/ref/intro/products.html__OCT__2 Sleepycat Software's Berkeley DB @products
+__APIREL__/ref/install/file.html__OCT__2 @/etc/magic
+__APIREL__/ref/install/file.html__OCT__3 @file utility
+__APIREL__/ref/install/rpm.html__OCT__2 @RPM
+__APIREL__/ref/java/compat.html__OCT__2 @Java compatibility
+__APIREL__/ref/java/conf.html__OCT__2 @Java configuration
+__APIREL__/ref/java/faq.html__OCT__2 Java @FAQ
+__APIREL__/ref/java/faq.html__OCT__3 @Java FAQ
+__APIREL__/ref/bdb/overview.html__OCT__2 @BDB
+__APIREL__/ref/bdb/cs_bdb_bind.html__OCT__2 @BDB
+__APIREL__/ref/bdb/cs_bdb_collection.html__OCT__2 @BDB
+__APIREL__/ref/bdb/faq.html__OCT__2 Java API @FAQ
+__APIREL__/ref/bdb/faq.html__OCT__3 @Java API FAQ
+__APIREL__/ref/bdb_basic/catalog.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/env.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/except.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/keyvalue.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/main.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/read.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/stores.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/transact.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/views.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_basic/write.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_entity/bindings.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_entity/classes.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_entity/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_entity/read.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_entity/views.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_index/foreign.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_index/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_index/read.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_index/second.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_index/views.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_sentity/binding.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_sentity/class.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_sentity/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_sentity/remove.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/extract.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/format.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/sorted.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/tbinding.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tuple/tsbinding.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tut/intro.html__OCT__2 @tutorial
+__APIREL__/ref/bdb_tut/summary.html__OCT__2 @tutorial
+__APIREL__/ref/lock/am_conv.html__OCT__2 Berkeley DB Transactional Data Store @locking conventions
+__APIREL__/ref/lock/cam_conv.html__OCT__2 Berkeley DB Concurrent Data Store @locking conventions
+__APIREL__/ref/lock/config.html__OCT__2 @locking configuration
+__APIREL__/ref/lock/dead.html__OCT__2 @deadlocks
+__APIREL__/ref/lock/intro.html__OCT__2 introduction to the @locking subsystem
+__APIREL__/ref/lock/max.html__OCT__2 sizing the @locking subsystem
+__APIREL__/ref/lock/nondb.html__OCT__2 @locking and non-Berkeley DB applications
+__APIREL__/ref/lock/notxn.html__OCT__2 @locking without transactions
+__APIREL__/ref/lock/page.html__OCT__2 page-level @locking
+__APIREL__/ref/lock/page.html__OCT__3 @locking granularity
+__APIREL__/ref/lock/stdmode.html__OCT__2 standard @lock modes
+__APIREL__/ref/lock/timeout.html__OCT__2 lock @timeouts
+__APIREL__/ref/lock/timeout.html__OCT__3 transaction @timeouts
+__APIREL__/ref/lock/twopl.html__OCT__2 two-phase @locking
+__APIREL__/ref/log/config.html__OCT__2 @logging configuration
+__APIREL__/ref/log/intro.html__OCT__2 introduction to the @logging subsystem
+__APIREL__/ref/log/limits.html__OCT__2 @log file limits
+__APIREL__/ref/mp/intro.html__OCT__2 introduction to the @memory pool subsystem
+__APIREL__/ref/mp/intro.html__OCT__3 introduction to the memory @cache subsystem
+__APIREL__/ref/mp/intro.html__OCT__4 introduction to the @buffer pool subsystem
+__APIREL__/ref/mp/config.html__OCT__2 @memory pool configuration
+__APIREL__/ref/perl/intro.html__OCT__2 @Perl
+__APIREL__/ref/program/appsignals.html__OCT__2 @signal handling
+__APIREL__/ref/program/compatible.html__OCT__2 @interface compatibility
+__APIREL__/ref/program/environ.html__OCT__2 @environment variables
+__APIREL__/ref/program/errorret.html__OCT__2 @error returns
+__APIREL__/ref/program/errorret.html__OCT__3 @error name space
+__APIREL__/ref/program/errorret.html__OCT__DB_NOTFOUND Error returns to applications@DB_NOTFOUND
+__APIREL__/ref/program/errorret.html__OCT__DB_KEYEMPTY Error returns to applications@DB_KEYEMPTY
+__APIREL__/ref/program/errorret.html__OCT__DB_KEYEXIST Error returns to applications@DB_KEYEXIST
+__APIREL__/ref/program/errorret.html__OCT__4 @DB_LOCK_DEADLOCK
+__APIREL__/ref/program/errorret.html__OCT__DB_LOCK_DEADLOCK Error returns to applications@DB_LOCK_DEADLOCK
+__APIREL__/ref/program/errorret.html__OCT__DB_LOCK_NOTGRANTED Error returns to applications@DB_LOCK_NOTGRANTED
+__APIREL__/ref/program/errorret.html__OCT__DB_RUNRECOVERY Error returns to applications@DB_RUNRECOVERY
+__APIREL__/ref/program/faq.html__OCT__2 task/thread @priority
+__APIREL__/ref/program/mt.html__OCT__2 building @threaded applications
+__APIREL__/ref/program/namespace.html__OCT__2 Berkeley DB library @name spaces
+__APIREL__/ref/program/scope.html__OCT__2 Berkeley DB handle @scope
+__APIREL__/ref/program/scope.html__OCT__3 Berkeley DB @free-threaded handles
+__APIREL__/ref/rep/intro.html__OCT__2 introduction to @replication
+__APIREL__/ref/rpc/client.html__OCT__2 @RPC client
+__APIREL__/ref/rpc/faq.html__OCT__2 @RPC FAQ
+__APIREL__/ref/rpc/intro.html__OCT__2 introduction to @rpc client/server
+__APIREL__/ref/rpc/server.html__OCT__2 @RPC server
+__APIREL__/ref/simple_tut/intro.html__OCT__2 simple @tutorial
+__APIREL__/ref/tcl/intro.html__OCT__2 loading Berkeley DB with @Tcl
+__APIREL__/ref/tcl/faq.html__OCT__2 Tcl @FAQ
+__APIREL__/ref/tcl/faq.html__OCT__3 @Tcl FAQ
+__APIREL__/ref/tcl/program.html__OCT__2 @Tcl API programming notes
+__APIREL__/ref/tcl/using.html__OCT__2 using Berkeley DB with @Tcl
+__APIREL__/ref/test/run.html__OCT__2 running the @test suite
+__APIREL__/ref/transapp/admin.html__OCT__2 administering @transaction protected applications
+__APIREL__/ref/transapp/archival.html__OCT__2 archival in @transaction protected applications
+__APIREL__/ref/transapp/archival.html__OCT__3 @catastrophic recovery
+__APIREL__/ref/transapp/archival.html__OCT__4 hot @backup
+__APIREL__/ref/transapp/checkpoint.html__OCT__2 checkpoints in @transaction protected applications
+__APIREL__/ref/transapp/deadlock.html__OCT__2 deadlock detection in @transaction protected applications
+__APIREL__/ref/transapp/faq.html__OCT__2 @transaction FAQ
+__APIREL__/ref/transapp/filesys.html__OCT__2 recovery and @filesystem operations
+__APIREL__/ref/transapp/hotfail.html__OCT__2 hot @failover
+__APIREL__/ref/transapp/intro.html__OCT__2 @Transactional Data Store
+__APIREL__/ref/transapp/logfile.html__OCT__2 @log file removal
+__APIREL__/ref/transapp/nested.html__OCT__2 nested @transactions
+__APIREL__/ref/transapp/read.html__OCT__2 @repeatable read
+__APIREL__/ref/transapp/read.html__OCT__3 dirty @reads
+__APIREL__/ref/transapp/read.html__OCT__4 @dirty reads
+__APIREL__/ref/transapp/reclimit.html__OCT__2 Berkeley DB @recoverability
+__APIREL__/ref/transapp/recovery.html__OCT__2 recovery in @transaction protected applications
+__APIREL__/ref/transapp/throughput.html__OCT__2 @transaction throughput
+__APIREL__/ref/transapp/tune.html__OCT__2 @transaction tuning
+__APIREL__/ref/transapp/tune.html__OCT__3 transaction @tuning
+__APIREL__/ref/txn/config.html__OCT__2 @transaction configuration
+__APIREL__/ref/txn/intro.html__OCT__2 introduction to the @transaction subsystem
+__APIREL__/ref/txn/limits.html__OCT__2 @transaction limits
+__APIREL__/ref/upgrade.2.0/intro.html__OCT__2 Upgrading to release @2.0
+__APIREL__/ref/upgrade.3.0/intro.html__OCT__2 Upgrading to release @3.0
+__APIREL__/ref/upgrade.3.1/intro.html__OCT__2 Upgrading to release @3.1
+__APIREL__/ref/upgrade.3.2/intro.html__OCT__2 Upgrading to release @3.2
+__APIREL__/ref/upgrade.3.3/intro.html__OCT__2 Upgrading to release @3.3
+__APIREL__/ref/upgrade.4.0/intro.html__OCT__2 Upgrading to release @4.0
+__APIREL__/ref/upgrade.4.1/intro.html__OCT__2 Upgrading to release @4.1
+__APIREL__/ref/upgrade.4.2/cksum.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/client.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/del.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/intro.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/java.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/lockng.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/nosync.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/priority.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/queue.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/repinit.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/upgrade.4.2/verify.html__OCT__2 Upgrading to release @4.2
+__APIREL__/ref/xa/build.html__OCT__2 @Transaction Manager
+__APIREL__/ref/xa/intro.html__OCT__2 @Distributed Transactions
+__APIREL__/ref/xa/intro.html__OCT__3 @Resource Manager
+__APIREL__/ref/xa/faq.html__OCT__2 XA @FAQ
+__APIREL__/ref/xa/faq.html__OCT__3 @XA FAQ
+__APIREL__/ref/xa/xa_config.html__OCT__2 configuring Berkeley DB with the @Tuxedo System
+__APIREL__/ref/xa/xa_intro.html__OCT__2 @XA Resource Manager
+__APIREL__/ref/xa/xa_intro.html__OCT__3 XA @Resource Manager
diff --git a/db/docs/api_c/rep_elect.html b/db/docs/api_c/rep_elect.html
index a38e86660..31ba16945 100644
--- a/db/docs/api_c/rep_elect.html
+++ b/db/docs/api_c/rep_elect.html
@@ -1,21 +1,22 @@
-<!--Id: rep_elect.so,v 1.8 2002/08/29 03:25:54 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_elect.so,v 1.18 2003/11/08 19:17:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;rep_elect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;rep_elect</h1>
+<h3>DB_ENV-&gt;rep_elect</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,10 +27,29 @@ int
DB_ENV-&gt;rep_elect(DB_ENV *env, int nsites,
int priority, u_int32_t timeout, int *envid);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_elect</h3>
<p>The DB_ENV-&gt;rep_elect method holds an election for the master of a replication
-group, returning the new master's ID in the <b>envid</b> parameter.
-<p>The <b>nsites</b> parameter indicates the number of environments that
+group.</p>
+<p>If the election is successful, the new master's ID may be the ID of the
+previous master, or the ID of the current environment. The application
+is responsible for adjusting its usage of the other environments in the
+replication group, including directing all database updates to the newly
+selected master, in accordance with the results of this election.</p>
+<p>The thread of control that calls the DB_ENV-&gt;rep_elect method must not be the
+thread of control that processes incoming messages; processing the
+incoming messages is necessary to successfully complete an election.</p>
+<p>The DB_ENV-&gt;rep_elect method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter references memory into which
+ the newly elected master's ID is copied.
+<p><dt><b>nsites</b><dd>
+The <b>nsites</b> parameter indicates the number of environments that
the application believes are in the replication group. This number is
used by Berkeley DB to avoid having two masters active simultaneously, even
in the case of a network partition. During an election, a new master
@@ -38,44 +58,33 @@ the new master. Thus, in the face of a network partition, the side of
the partition with more than half the environments will elect a new
master and continue, while the environments communicating with fewer
than half the other environments will fail to find a new master.
-<p>The <b>priority</b> parameter is the priority of this environment. It
+<p><dt><b>priority</b><dd>
+The <b>priority</b> parameter is the priority of this environment. It
must be a positive integer, or 0 if this environment is not permitted
to become a master (see <a href="../ref/rep/pri.html">Replication
environment priorities</a> for more information).
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter specifies a timeout period for an election.
+If the election has not completed after <b>timeout</b> microseconds, the
+election will fail.
+</dl>
<a name="3"><!--meow--></a>
-<p>The <b>timeout</b> parameter specifies a timeout period for an
-election. If the election has not completed after <b>timeout</b>
-microseconds, the thread will return DB_REP_UNAVAIL.
-<p>The DB_ENV-&gt;rep_elect method either returns successfully, with the new
-master's environment ID in the memory pointed to by the <b>envid</b>
-parameter, or it will return DB_REP_UNAVAIL if the participating
-group members were unable to elect a new master for any reason. In the
-event of a successful return, the new master's ID may be the ID of the
-previous master, or the ID of the current environment. The application
-is responsible for adjusting its usage of the other environments in the
-replication group, including directing all database updates to the newly
-selected master, in accordance with the results of this election.
-<p>The thread of control that calls the DB_ENV-&gt;rep_elect method must not be the
-thread of control that processes incoming messages; processing the
-incoming messages is necessary to successfully complete an election.
-<p>The DB_ENV-&gt;rep_elect method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;rep_elect method may fail and return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;rep_elect method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_REP_UNAVAIL<dd>The replication group was unable to elect a master.
+<p><dt>DB_REP_UNAVAIL<dd>The replication group was unable to elect a master, or was unable to
+complete the election in the specified <b>timeout</b> period.
</dl>
-<p>The DB_ENV-&gt;rep_elect method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;rep_elect method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_limit.html b/db/docs/api_c/rep_limit.html
index 28ff1c1ee..25f88a091 100644
--- a/db/docs/api_c/rep_limit.html
+++ b/db/docs/api_c/rep_limit.html
@@ -1,21 +1,22 @@
-<!--Id: rep_limit.so,v 1.2 2002/07/13 18:48:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_limit.so,v 1.16 2003/11/18 13:55:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;set_rep_limit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;set_rep_limit</h1>
+<h3>DB_ENV-&gt;set_rep_limit</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,34 +25,58 @@
<p>
int
DB_ENV-&gt;set_rep_limit(DB_ENV *env, u_int32_t gbytes, u_int32_t bytes);
+<p>
+int
+DB_ENV-&gt;get_rep_limit(DB_ENV *dbenv, u_int32_t *gbytesp, u_int32_t *bytesp);
</pre></h3>
-<h1>Description</h1>
-<p>The DB_ENV-&gt;set_rep_limit function imposes a limit on the amount of data that will
-be transmitted from a site during the course of a single call to
-<a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> function.
-<p>The <b>gbytes</b> and <b>bytes</b> parameters together represent the
-maximum number of bytes that can be sent during a single call to
-<a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> function.
-<p>The DB_ENV-&gt;set_rep_limit function configures a database environment, not only operations
-performed using the specified <a href="../api_c/env_create.html">DB_ENV</a> handle.
-<p>The DB_ENV-&gt;set_rep_limit interface may be called at any time during the life of
-the application.
-<p>The DB_ENV-&gt;set_rep_limit function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;set_rep_limit function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;set_rep_limit function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>,
-<a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>,
-<a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>
-and
-<a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a>.
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_rep_limit</h3>
+<a name="3"><!--meow--></a>
+<p>The DB_ENV-&gt;set_rep_limit method imposes a byte-count limit on the amount of data
+that will be transmitted from a site in a single call to <a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method.</p>
+<p>The DB_ENV-&gt;set_rep_limit method configures a database environment, not only operations
+performed using the specified <a href="../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>The DB_ENV-&gt;set_rep_limit method may not be called before the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method has
+been called.</p>
+<p>The DB_ENV-&gt;set_rep_limit method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The <b>gbytes</b> and <b>bytes</b> parameters specify the maximum
+number of bytes that will be sent in a single call to <a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method.
+<p><dt><b>gbytes</b><dd>
+The <b>gbytes</b> and <b>bytes</b> parameters specify the maximum
+number of bytes that will be sent in a single call to <a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method.
+</dl>
+<hr size=1 noshade>
+<h3>Description: dbenv_get_rep_limit</h3>
+<p>The DB_ENV-&gt;get_rep_limit method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;get_rep_limit method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the current transmit limit is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the in the current transmit limit is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_list.html b/db/docs/api_c/rep_list.html
index db10e79dc..85285640a 100644
--- a/db/docs/api_c/rep_list.html
+++ b/db/docs/api_c/rep_list.html
@@ -1,17 +1,17 @@
-<!--Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Replication and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Replication and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Replication and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Replication and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
<tr><td><a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
@@ -20,6 +20,6 @@
<tr><td><a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
<tr><td><a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_message.html b/db/docs/api_c/rep_message.html
index ec94114e6..9de2c00b9 100644
--- a/db/docs/api_c/rep_message.html
+++ b/db/docs/api_c/rep_message.html
@@ -1,21 +1,22 @@
-<!--Id: rep_message.so,v 1.11 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_message.so,v 1.27 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;rep_process_message</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;rep_process_message</h1>
+<h3>DB_ENV-&gt;rep_process_message</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,64 +25,107 @@
<p>
int
DB_ENV-&gt;rep_process_message(DB_ENV *env,
- DBT *control, DBT *rec, int *envid)
+ DBT *control, DBT *rec, int *envid, DB_LSN *ret_lsnp)
</pre></h3>
-<h1>Description</h1>
-<p>The DB_ENV-&gt;rep_process_message method processes an incoming replication
-message sent by a member of the replication group to the local database
-environment.
-<p>The <b>rec</b> and <b>control</b> parameters should reference a copy
-of the parameters specified by Berkeley DB for the <b>rec</b> and
-<b>control</b> parameters on the sending environment.
-<p>The <b>envid</b> parameter should contain the local identifier that
-corresponds to the environment that sent the message to be processed
-(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
-information).
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_process_message</h3>
+<p>The DB_ENV-&gt;rep_process_message method processes an incoming replication message sent
+by a member of the replication group to the local database environment.</p>
<p>For implementation reasons, all incoming replication messages must be
processed using the same <a href="../api_c/env_class.html">DB_ENV</a> handle. It is not required that
a single thread of control process all messages, only that all threads
-of control processing messages use the same handle.
+of control processing messages use the same handle.</p>
+<p>The DB_ENV-&gt;rep_process_message method has additional return values:</p>
+<p><dl compact>
+<p><dt><a name="DB_REP_DUPMASTER">DB_REP_DUPMASTER</a><dd>
+<p>
+The DB_ENV-&gt;rep_process_message method
+will return DB_REP_DUPMASTER if the replication group has more than one master.
+The application should reconfigure itself as a client by calling the
+<a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method, and then call for an election by calling
+<a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>.
+</p>
+<p><dt><a name="DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a><dd>
+<p>
+The DB_ENV-&gt;rep_process_message method
+will return DB_REP_HOLDELECTION if an election is needed.
+The application should call for an election by calling <a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>.
+</p>
+<p><dt><a name="DB_REP_ISPERM">DB_REP_ISPERM</a><dd>
+<p>
+The DB_ENV-&gt;rep_process_message method will return DB_REP_ISPERM if processing this message results in the processing of records
+that are permanent.
+The maximum LSN of the permanent records stored is returned.
+</p>
+<p><dt><a name="DB_REP_NEWMASTER">DB_REP_NEWMASTER</a><dd>
<p>
-If a new master has been elected, the DB_ENV-&gt;rep_process_message method will return DB_REP_NEWMASTER.
+The DB_ENV-&gt;rep_process_message method will return DB_REP_NEWMASTER if a new master has been elected.
The <b>envid</b> parameter contains the environment ID of the new
master. If the recipient of this error return has been made master, it
is the application's responsibility to begin acting as the master
environment.
+</p>
+<p><dt><a name="DB_REP_NEWSITE">DB_REP_NEWSITE</a><dd>
<p>
-If the system received contact information from a new environment, the DB_ENV-&gt;rep_process_message method will return DB_REP_NEWSITE.
+The DB_ENV-&gt;rep_process_message method will return DB_REP_NEWSITE if the system received contact information from a new environment.
The <b>rec</b> parameter contains the opaque data specified in the
<b>cdata</b> parameter to the <a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>. The application
should take whatever action is needed to establish a communication
channel with this new environment.
+</p>
+<p><dt><a name="DB_REP_NOTPERM">DB_REP_NOTPERM</a><dd>
<p>
-If the replication group has more than one master, the DB_ENV-&gt;rep_process_message method will return DB_REP_DUPMASTER.
-The application should reconfigure itself as a client by calling the
-<a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method, and then call for an election by calling
-<a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>.
+The DB_ENV-&gt;rep_process_message method will return DB_REP_NOTPERM if a message carrying a <a href="../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag was processed
+successfully, but was not written to disk.
+The LSN of this record is returned.
+The application should take whatever action is deemed necessary to
+retain its recoverability characteristics.
+</p>
+<p><dt><a name="DB_REP_OUTDATED">DB_REP_OUTDATED</a><dd>
<p>
-If an election is needed, the DB_ENV-&gt;rep_process_message method will return DB_REP_HOLDELECTION.
-The application should call for an election by
-calling <a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>.
-<p>
-If the current environment's logs are too far out of date with respect
-to the master to be automatically synchronized, the DB_ENV-&gt;rep_process_message method will return DB_REP_OUTDATED. The
-application should copy over a hot backup of the environment, run
+The DB_ENV-&gt;rep_process_message method
+will return DB_REP_OUTDATED if the current environment's logs are too far out of date with respect
+to the master to be automatically synchronized.
+The application should copy over a hot backup of the environment, run
recovery, and restart the client.
-<p>
-Otherwise, the DB_ENV-&gt;rep_process_message method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;rep_process_message method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;rep_process_message method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+</dl>
+<p>Unless otherwise specified, the DB_ENV-&gt;rep_process_message method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>control</b><dd>
+The <b>control</b> parameter should reference a copy of the
+<b>control</b> parameter specified by Berkeley DB on the sending
+environment.
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter should contain the local identifier that
+corresponds to the environment that sent the message to be processed
+(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
+information).
+<p><dt><b>rec</b><dd>
+The <b>rec</b> parameter should reference a copy of the <b>rec</b>
+parameter specified by Berkeley DB on the sending environment.
+<p><dt><b>ret_lsn</b><dd>
+If DB_ENV-&gt;rep_process_message method returns DB_REP_NOTPERM then the
+<b>ret_lsnp</b> parameter will
+contain the log sequence number of this permanent log message that could
+not be written to disk. If DB_ENV-&gt;rep_process_message method returns
+DB_REP_ISPERM then the <b>ret_lsnp</b> parameter will contain largest log sequence number of the
+permanent records that are now written to disk as a result of processing
+this message. In all other cases the value of <b>ret_lsnp</b> is undefined.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_start.html b/db/docs/api_c/rep_start.html
index b560517ac..b5c4c08c2 100644
--- a/db/docs/api_c/rep_start.html
+++ b/db/docs/api_c/rep_start.html
@@ -1,21 +1,22 @@
-<!--Id: rep_start.so,v 1.5 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_start.so,v 1.14 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;rep_start</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;rep_start</h1>
+<h3>DB_ENV-&gt;rep_start</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,49 +26,56 @@
int
DB_ENV-&gt;rep_start(DB_ENV *env, DBT *cdata, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_start</h3>
<p>The DB_ENV-&gt;rep_start method configures the database environment as a client
or master in a group of replicated database environments. Replication
master environments are the only database environments where replicated
databases may be modified. Replication client environments are
read-only as long as they are clients. Replication client environments
may be upgraded to be replication master environments in the case that
-the current master fails or there is no master present.
+the current master fails or there is no master present.</p>
<p>The enclosing database environment must already have been opened by
calling the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> method and must already have been configured
-to send replication messages by calling the <a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method.
-<p>The <b>cdata</b> parameter is an opaque data item that is sent over
+to send replication messages by calling the <a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method.</p>
+<p>The DB_ENV-&gt;rep_start method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cdata</b><dd>
+The <b>cdata</b> parameter is an opaque data item that is sent over
the communication infrastructure when the client or master comes online
(see <a href="../ref/rep/newsite.html">Connecting to a new site</a> for
more information). If no such information is useful, <b>cdata</b>
should be NULL.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Configure the environment as a replication client.
<p><dt><a name="DB_REP_LOGSONLY">DB_REP_LOGSONLY</a><dd>Configure the environment as a log files-only client.
<p><dt><a name="DB_REP_MASTER">DB_REP_MASTER</a><dd>Configure the environment as a replication master.
</dl>
-<p>The DB_ENV-&gt;rep_start method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;rep_start method may fail and return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;rep_start method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The environment was not already configured to communicate with a
-replication group by a call to <a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a>.
-<p>The environment was not already opened.
+<p><dt>EINVAL<dd>If the database environment was not already configured to communicate with
+a replication group by a call to <a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a>;
+the database environment was not already opened; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DB_ENV-&gt;rep_start method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;rep_start method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_stat.html b/db/docs/api_c/rep_stat.html
index cd2a83629..7f073492a 100644
--- a/db/docs/api_c/rep_stat.html
+++ b/db/docs/api_c/rep_stat.html
@@ -1,21 +1,22 @@
-<!--Id: rep_stat.so,v 10.7 2002/07/13 18:09:07 margo Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_stat.so,v 10.23 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;rep_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;rep_stat</h1>
+<h3>DB_ENV-&gt;rep_stat</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,38 +26,36 @@
int
DB_ENV-&gt;rep_stat(DB_ENV *env, DB_REP_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DB_ENV-&gt;rep_stat function returns the replication subsystem statistics.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
-</dl>
-<p>The DB_ENV-&gt;rep_stat function creates a statistical structure of type
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;rep_stat</h3>
+<p>The DB_ENV-&gt;rep_stat method returns the replication subsystem statistics.</p>
+<p>The DB_ENV-&gt;rep_stat method creates a statistical structure of type
DB_REP_STAT and copies a pointer to it into a user-specified memory
-location.
-<p>Statistical structures are created in allocated memory. If application-specific allocation
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
information), they are used to allocate the memory; otherwise, the
-library <b>malloc</b>(3) interface is used. The caller is
+standard C library <b>malloc</b>(3) is used. The caller is
responsible for deallocating the memory. To deallocate the memory, free
the memory reference; references inside the returned memory need not be
-individually freed.
-<p>The following DB_REP_STAT fields will be filled in:
+individually freed.</p>
+<p>The following DB_REP_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>u_int32_t st_stat;<dd>The current replication mode. Set to <a href="../api_c/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
+<dt>u_int32_t st_status;<dd>The current replication mode. Set to <a href="../api_c/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
environment is a replication master, <a href="../api_c/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> if the
environment is a replication client, <a href="../api_c/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a> if the
environment is a log-files-only replica, or 0 if replication is not
configured.
<dt>DB_LSN st_next_lsn;<dd>In replication environments configured as masters, the next LSN expected.
In replication environments configured as clients, the next LSN to be used.
-<dt>DB_LSN st_waiting_lsn;<dd>The LSN of the first missed log record being waited for, or 0 if no log
-records are currently missing.
+<dt>DB_LSN st_waiting_lsn;<dd>The LSN of the first log record we have after missing log records
+being waited for, or 0 if no log records are currently missing.
<dt>u_int32_t st_dupmasters;<dd>The number of duplicate master conditions detected.
<dt>u_int32_t st_env_id;<dd>The current environment ID.
<dt>u_int32_t st_env_priority;<dd>The current environment priority.
<dt>u_int32_t st_gen;<dd>The current generation number.
+<dt>u_int32_t st_in_recovery;<dd>The site is currently in client recovery. When this field is set, LSN
+values are not authoritative.
<dt>u_int32_t st_log_duplicated;<dd>The number of duplicate log records received.
<dt>u_int32_t st_log_queued;<dd>The number of log records currently queued.
<dt>u_int32_t st_log_queued_max;<dd>The maximum number of log records ever queued at once.
@@ -71,6 +70,7 @@ records are currently missing.
<dt>u_int32_t st_msgs_send_failures;<dd>The number of failed message sends.
<dt>u_int32_t st_msgs_sent;<dd>The number of messages sent.
<dt>u_int32_t st_newsites;<dd>The number of new site messages received.
+<dt>int st_nsites;<dd>The number of sites believed to be in the replication group.
<dt>u_int32_t st_outdated;<dd>The number of outdated conditions detected.
<dt>u_int32_t st_txns_applied;<dd>The number of transactions applied.
<dt>u_int32_t st_elections;<dd>The number of elections held.
@@ -87,22 +87,38 @@ to a single call to <a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_m
<dt>u_int32_t st_election_tiebreaker;<dd>The election tiebreaker value.
<dt>u_int32_t st_election_votes;<dd>The votes received this election round.
</dl>
-<p>The DB_ENV-&gt;rep_stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;rep_stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;rep_stat function may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>,
-<a href="../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>,
-<a href="../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>
-and
-<a href="../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a>.
+<p>The DB_ENV-&gt;rep_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;rep_stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>
+<h3>See Also</h3>
+<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/rep_transport.html b/db/docs/api_c/rep_transport.html
index 73b549858..a4a625b65 100644
--- a/db/docs/api_c/rep_transport.html
+++ b/db/docs/api_c/rep_transport.html
@@ -1,21 +1,22 @@
-<!--Id: rep_transport.so,v 1.9 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_transport.so,v 1.30 2003/11/19 04:07:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_ENV-&gt;set_rep_transport</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_ENV-&gt;set_rep_transport</h1>
+<h3>DB_ENV-&gt;set_rep_transport</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,37 +26,59 @@
int
DB_ENV-&gt;set_rep_transport(DB_ENV *env, int envid,
int (*send)(DB_ENV *dbenv,
- const DBT *control, const DBT *rec, int envid, u_int32_t flags));
+ const DBT *control, const DBT *rec, const DB_LSN *lsnp,
+ int envid, u_int32_t flags));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;set_rep_transport</h3>
<p>The DB_ENV-&gt;set_rep_transport method initializes the communication infrastructure
-for a database environment participating in a replicated application.
-<p>The <b>envid</b> parameter is the local environment's ID. It must be
+for a database environment participating in a replicated application.</p>
+<p>The DB_ENV-&gt;set_rep_transport method configures operations performed using the specified
+<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DB_ENV-&gt;set_rep_transport method may be called at any time during the life of the
+application.</p>
+<p>The DB_ENV-&gt;set_rep_transport method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter is the local environment's ID. It must be
a positive integer and uniquely identify this Berkeley DB database environment
(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
information).
-<p>The <b>send</b> parameter is a callback interface used to transmit data
-using the replication application's communication infrastructure. The
-parameters to <b>send</b> are as follows:
+<p><dt><b>send</b><dd>
+The <b>send</b> callback function is used to transmit data using the
+replication application's communication infrastructure. The parameters
+to <b>send</b> are as follows:
<p><dl compact>
-<p><dt>dbenv<dd>The enclosing database environment.
-<p><dt>control<dd>The control parameter is the first of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>rec<dd>The rec parameter is the second of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>envid<dd>The <b>envid</b> parameter is a positive integer identifier that
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>control</b><dd>The <b>control</b> parameter is the first of the two data elements to be
+transmitted by the <b>send</b> function.
+<p><dt><b>rec</b><dd>The <b>rec</b> parameter is the second of the two data elements to be
+transmitted by the <b>send</b> function.
+<p><dt><b>lsnp</b><dd>If the type of message to be sent has an LSN associated with it, then
+the <b>lsnp</b> parameter
+contains the LSN of the record being sent. This LSN can be used to
+determine that certain records have been processed successfully by
+clients.
+<p><dt><b>envid</b><dd>The <b>envid</b> parameter is a positive integer identifier that
specifies the replication environment to which the message should be
sent (see <a href="../ref/rep/id.html">Replication environment IDs</a> for
more information).
-<p><a name="3"><!--meow--></a>
-The special identifier DB_EID_BROADCAST indicates that a message
+<a name="3"><!--meow--></a>
+<p>The special identifier DB_EID_BROADCAST indicates that a message
should be broadcast to every environment in the replication group. The
-application may use a true broadcast protocol, or may send the message
-in sequence to each machine with which it is in communication.
-<p><dt>flags<dd>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or
-more of the following values:
+application may use a true broadcast protocol or may send the message
+in sequence to each machine with which it is in communication. In both
+cases, the sending site should not be asked to process the message.</p>
+<p><dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
+<p><dt><a name="DB_REP_NOBUFFER">DB_REP_NOBUFFER</a><dd>The record being sent should be transmitted immediately and not buffered
+or delayed.
<p><dt><a name="DB_REP_PERMANENT">DB_REP_PERMANENT</a><dd>The record being sent is critical for maintaining database integrity
(for example, the message includes a transaction commit). The
application should take appropriate action to enforce the reliability
@@ -63,33 +86,32 @@ guarantees it has chosen, such as waiting for acknowledgement from one
or more clients.
</dl>
</dl>
-<p>The <b>send</b> interface must return 0 on success and non-zero on
-failure. If the <b>send</b> interface fails, the message being sent
-is necessary to maintain database integrity, and the local log is not
-configured for synchronous flushing, the local log will be flushed;
-otherwise, any error from the <b>send</b> interface will be ignored.
<p>It may sometimes be useful to pass application-specific data to the
-<b>send</b> interface; see <a href="../ref/env/faq.html">Environment
-FAQ</a> for a discussion on how to do this.
-<p>The DB_ENV-&gt;set_rep_transport method configures operations performed using the specified
-<a href="../api_c/env_class.html">DB_ENV</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DB_ENV-&gt;set_rep_transport interface may be called at any time during the life of
-the application.
-<p>The DB_ENV-&gt;set_rep_transport method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_ENV-&gt;set_rep_transport method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_ENV-&gt;set_rep_transport method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<b>send</b> function; see <a href="../ref/env/faq.html">Environment
+FAQ</a> for a discussion on how to do this.</p>
+The <b>send</b> function should not call back down into Berkeley DB. The
+<b>send</b> function must return 0 on success and non-zero on failure.
+If the <b>send</b> function fails, the message being sent is necessary
+to maintain database integrity, and the local log is not configured for
+synchronous flushing, the local log will be flushed; otherwise, any
+error from the <b>send</b> function will be ignored.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;set_rep_transport method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_close.html b/db/docs/api_c/set_func_close.html
index 0d4af0aef..e6d76f3e1 100644
--- a/db/docs/api_c/set_func_close.html
+++ b/db/docs/api_c/set_func_close.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_close.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_close.so,v 10.14 2003/09/25 15:28:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_close</h1>
+<h3>db_env_set_func_close</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,33 @@
int
db_env_set_func_close(int (*func_close)(int fd));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>close</b> function
-with <b>func_close</b>, which must conform to the standard interface.
-<p>The db_env_set_func_close interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_close interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_close function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_close</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>close</b> function with
+<b>func_close</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_close method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_close method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_close method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_close</b><dd>
+The <b>func_close</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_dirfree.html b/db/docs/api_c/set_func_dirfree.html
index 249f69cc6..30cefb6d1 100644
--- a/db/docs/api_c/set_func_dirfree.html
+++ b/db/docs/api_c/set_func_dirfree.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_dirfree.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_dirfree.so,v 10.18 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_dirfree</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_dirfree</h1>
+<h3>db_env_set_func_dirfree</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,52 +26,36 @@
int
db_env_set_func_dirfree(void (*func_dirfree)(char **namesp, int cnt));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_dirfree</h3>
<p>The Berkeley DB library requires the ability to return any memory allocated as part
of the routine which reads through a directory and creates a list of files
-that that the directory contains (see <a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>).
-The <b>func_dirfree</b> argument must conform to the following interface:
-<p><blockquote><pre>int dirfree(char **namesp, int cnt);</pre></blockquote>
-<p>The <b>namesp</b> and <b>cnt</b> arguments are the same values as were
-returned by the <a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a> function.
-<p>The <b>func_dirfree</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_dirfree interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_dirfree interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_dirfree interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The db_env_set_func_dirfree function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+that the directory contains (see <a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>).</p>
+<p>The db_env_set_func_dirfree method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_dirfree method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_dirfree method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_dirfree</b><dd>
+The <b>func_dirfree</b> parameter is a function which frees the memory
+returned from the <a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a> function.
+<p>The <b>namesp</b> and <b>cnt</b> parameters to this function are the
+same values as were returned by the <a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>
+function.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_dirlist.html b/db/docs/api_c/set_func_dirlist.html
index 5025912e5..79eb63b5f 100644
--- a/db/docs/api_c/set_func_dirlist.html
+++ b/db/docs/api_c/set_func_dirlist.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_dirlist.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_dirlist.so,v 10.18 2003/11/08 19:17:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_dirlist</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_dirlist</h1>
+<h3>db_env_set_func_dirlist</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,54 +27,40 @@ int
db_env_set_func_dirlist(
int (*func_dirlist)(const char *dir, char ***namesp, int *cntp));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_dirlist</h3>
<p>The Berkeley DB library requires the ability to read through a directory and
-create a list of files that that the directory contains. The
-<b>func_dirlist</b> argument must conform to the following interface:
-<p><blockquote><pre>int dirlist(const char *dir, char ***namesp, int *cntp);</pre></blockquote>
-<p>The <b>dir</b> argument is the name of the directory to be searched.
-The function must return a pointer to an array of nul-terminated file
-names in the memory location referenced by the argument <b>namesp</b>,
-and a count of the number of elements in the array in the memory location
-referenced by <b>cntp</b>.
-<p>The <b>func_dirlist</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_dirlist interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_dirlist interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_dirlist interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The db_env_set_func_dirlist function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+create a list of files that the directory contains.</p>
+<p>The db_env_set_func_dirlist method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_dirlist method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_dirlist method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_dirlist</b><dd>
+The <b>func_dirlist</b> parameter is the function which reads through
+a directory and returns a list of the files it contains.
+<p>The <b>dir</b> parameter to this function is the name of the directory
+to be searched.</p>
+<p>The function must return a pointer to an array of nul-terminated file
+names into the memory location to which the <b>namesp</b> parameter
+refers, and a count of the number of elements in the array into the
+memory location to which <b>cntp</b> refers.</p>
+<p>The <b>func_dirlist</b> function must return the value of <b>errno</b> on
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_exists.html b/db/docs/api_c/set_func_exists.html
index 0b38b1e22..472d2d445 100644
--- a/db/docs/api_c/set_func_exists.html
+++ b/db/docs/api_c/set_func_exists.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_exists.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_exists.so,v 10.17 2003/11/08 19:17:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_exists</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_exists</h1>
+<h3>db_env_set_func_exists</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,52 +26,38 @@
int
db_env_set_func_exists(int (*func_exists)(const char *path, int *isdirp));
</pre></h3>
-<h1>Description</h1>
-<p>The Berkeley DB library requires the ability to determine if a file exists, and
-optionally, if it is a file of type directory. The <b>func</b> argument
-must conform to the following interface:
-<p><blockquote><pre>int exists(const char *path, int *isdirp);</pre></blockquote>
-<p>The <b>path</b> argument is the pathname of the file to be checked.
-<p>If the <b>isdirp</b> argument is non-NULL, it must be set to non-0 if
-<b>path</b> is a directory, and 0 if <b>path</b> is not a directory.
-<p>The <b>func_exists</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_exists interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_exists interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_exists interface may only be used to configure Berkeley DB before
-the <a href="../api_c/env_open.html">DBENV-&gt;open</a> interface is called.
-<p>The db_env_set_func_exists function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_exists</h3>
+<p>The Berkeley DB library requires the ability to determine whether a file
+exists and whether it is a file of type directory.</p>
+<p>The db_env_set_func_exists method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_exists method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_exists method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_exists</b><dd>
+The <b>func_exists</b> parameter is the function which returns if a
+file exists and if it is a file of type directory.
+<p>The <b>path</b> parameter to this function is the pathname of the file
+to be checked.</p>
+<p>If the <b>isdirp</b> parameter is non-NULL, it must be set to non-0 if
+<b>path</b> is a directory, and 0 if <b>path</b> is not a directory.</p>
+<p>The <b>func_exists</b> function must return the value of <b>errno</b> on
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_free.html b/db/docs/api_c/set_func_free.html
index 8b7b1afa6..121a5e3aa 100644
--- a/db/docs/api_c/set_func_free.html
+++ b/db/docs/api_c/set_func_free.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_free.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_free.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_free</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_free</h1>
+<h3>db_env_set_func_free</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,44 +26,33 @@
int
db_env_set_func_free(void (*func_free)(void *ptr));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_free</h3>
<p>Replace Berkeley DB calls to the ANSI C X3.159-1989 (ANSI C) standard
-<b>free</b> function with <b>func_free</b>, which must conform to
-the standard interface.
-<p>The db_env_set_func_free interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_free interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_free function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<b>free</b> function with <b>func_free</b>, which must conform to the
+standard interface specification.</p>
+<p>The db_env_set_func_free method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_free method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_free method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_free</b><dd>
+The <b>func_free</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_fsync.html b/db/docs/api_c/set_func_fsync.html
index f73956108..ecd3fe3b2 100644
--- a/db/docs/api_c/set_func_fsync.html
+++ b/db/docs/api_c/set_func_fsync.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_fsync.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_fsync.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_fsync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_fsync</h1>
+<h3>db_env_set_func_fsync</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,33 @@
int
db_env_set_func_fsync(int (*func_fsync)(int fd));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>fsync</b> function
-with <b>func_fsync</b>, which must conform to the standard interface.
-<p>The db_env_set_func_fsync interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_fsync interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_fsync function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_fsync</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>fsync</b> function with
+<b>func_fsync</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_fsync method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_fsync method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_fsync method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_fsync</b><dd>
+The <b>func_fsync</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_ioinfo.html b/db/docs/api_c/set_func_ioinfo.html
index 3a0143e57..3fd24586d 100644
--- a/db/docs/api_c/set_func_ioinfo.html
+++ b/db/docs/api_c/set_func_ioinfo.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_ioinfo.so,v 10.6 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_ioinfo.so,v 10.16 2003/11/08 19:17:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_ioinfo</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_ioinfo</h1>
+<h3>db_env_set_func_ioinfo</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,59 +27,45 @@ int
db_env_set_func_ioinfo(int (*func_ioinfo)(const char *path,
int fd, u_int32_t *mbytesp, u_int32_t *bytesp, u_int32_t *iosizep));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_ioinfo</h3>
<p>The Berkeley DB library requires the ability to determine the size and I/O
-characteristics of a file. The <b>func_ioinfo</b> argument must conform
-to the following interface:
-<p><blockquote><pre>int ioinfo(const char *path, int fd,
-u_int32_t *mbytesp, u_int32_t *bytesp, u_int32_t *iosizep);</pre></blockquote>
-<p>The <b>path</b> argument is the pathname of the file to be checked, and the
-<b>fd</b> argument is an open file descriptor on the file.
-<p>If the <b>mbytesp</b> and <b>bytesp</b> arguments are non-NULL, the
+characteristics of a file.</p>
+<p>The db_env_set_func_ioinfo method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_ioinfo method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_ioinfo method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>func_ioinfo</b><dd>
+The <b>func_ioinfo</b> parameter is the function which returns the size
+and I/O characteristics of a file.
+<p>The <b>path</b> parameter is the pathname of the file to be checked, and the
+<b>fd</b> parameter is an open file descriptor on the file.</p>
+<p>If the <b>mbytesp</b> and <b>bytesp</b> parameters are non-NULL, the
<b>ioinfo</b> function must return in them the size of the file: the
-number of megabytes in the file into the memory location referenced by
-the <b>mbytesp</b> argument, and the number of bytes over and above that
-number of megabytes into the memory location referenced by the
-<b>bytesp</b> argument.
-<p>In addition, if the <b>iosizep</b> argument is non-NULL, the <b>ioinfo</b>
+number of megabytes in the file into the memory location to which the
+<b>mbytesp</b> parameter refers, and the number of bytes over and above
+that number of megabytes into the memory location to which the
+<b>bytesp</b> parameter refers.</p>
+<p>In addition, if the <b>iosizep</b> parameter is non-NULL, the <b>ioinfo</b>
function must return the optimum granularity for I/O operations to the file
-in the memory location referenced by it.
+into the memory location to which it refers.</p>
<p>The <b>func_ioinfo</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_ioinfo interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_ioinfo interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_ioinfo function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_malloc.html b/db/docs/api_c/set_func_malloc.html
index a4be5bfb0..abb8d69f6 100644
--- a/db/docs/api_c/set_func_malloc.html
+++ b/db/docs/api_c/set_func_malloc.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_malloc.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_malloc.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_malloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_malloc</h1>
+<h3>db_env_set_func_malloc</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,44 +26,33 @@
int
db_env_set_func_malloc(void *(*func_malloc)(size_t size));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_malloc</h3>
<p>Replace Berkeley DB calls to the ANSI C X3.159-1989 (ANSI C) standard
-<b>malloc</b> function with <b>func_malloc</b>, which must conform to
-the standard interface.
-<p>The db_env_set_func_malloc interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_malloc interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_malloc function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<b>malloc</b> function with <b>func_malloc</b>, which must conform to the
+standard interface specification.</p>
+<p>The db_env_set_func_malloc method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_malloc method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_malloc method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_malloc</b><dd>
+The <b>func_malloc</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_map.html b/db/docs/api_c/set_func_map.html
index e14e9c4aa..de9cded75 100644
--- a/db/docs/api_c/set_func_map.html
+++ b/db/docs/api_c/set_func_map.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_map.so,v 10.8 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_map.so,v 10.19 2003/11/08 19:17:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_map</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_map</h1>
+<h3>db_env_set_func_map</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,62 +27,49 @@ int
db_env_set_func_map(int (*func_map)(char *path,
size_t len, int is_region, int is_rdonly, void **addr));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_map</h3>
<p>The Berkeley DB library requires the ability to map a file into memory and to
-create shared memory regions (which may or may not be backed by files).
-The <b>func_map</b> argument must conform to the following interface:
-<p><blockquote><pre>int map(char *path, size_t len,
-int is_region, int is_rdonly, void **addr);</pre></blockquote>
-<p>The <b>path</b> argument is the name of a file.
-<p>The <b>is_region</b> argument will be zero if the intention is to map a
-file into shared memory. In this case, the <b>map</b> function must map
-the first <b>len</b> bytes of the file into memory and return a pointer
-to the mapped location in the memory location referenced by the argument
-<b>addr</b>. The <b>is_rdonly</b> argument will be non-zero if the file
-is considered read-only by the caller.
-<p>The <b>is_region</b> argument will be non-zero if the memory is intended
-to be used as a shared memory region for synchronization between Berkeley DB
-threads/processes. In this case, the returned memory may be of any kind
-(e.g., anonymous), but must be able to support semaphores. In this case,
-the <b>path</b> argument may be ignored (although future <b>map</b>
-calls using the same <b>path</b> must return the same memory), and the
-<b>is_rdonly</b> argument will always be zero.
-<p>The <b>func_map</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_map interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_map interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_map function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+create shared memory regions (which may or may not be backed by files).</p>
+<p>The db_env_set_func_map method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_map method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_map method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_map</b><dd>
+The <b>func_map</b> parameter is the function which maps a file into
+memory and creates shared memory regions.
+<p>The <b>path</b> parameter is the name of a file.</p>
+<p>The <b>is_region</b> parameter will be zero if the intention is to map
+a file into shared memory. In this case, the <b>map</b> function must
+map the first <b>len</b> bytes of the file into memory and return a
+pointer to the mapped location into the memory location to which the
+parameter <b>addr</b> refers. The <b>is_rdonly</b> parameter will be
+non-zero if the file is considered read-only by the caller.</p>
+<p>The <b>is_region</b> parameter will be non-zero if the memory is
+intended to be used as a shared memory region for synchronization
+between Berkeley DB threads/processes. In this case, the returned memory may
+be of any kind (for example, anonymous memory), but must be able to
+support semaphores. In this case, the <b>path</b> parameter may be
+ignored (although future <b>map</b> calls using the same <b>path</b>
+must return the same memory), and the <b>is_rdonly</b> parameter will
+always be zero.</p>
+<p>The <b>func_map</b> function must return the value of <b>errno</b> on
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_open.html b/db/docs/api_c/set_func_open.html
index ff72d9882..349e0baa6 100644
--- a/db/docs/api_c/set_func_open.html
+++ b/db/docs/api_c/set_func_open.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_open.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_open.so,v 10.14 2003/09/25 15:28:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_open</h1>
+<h3>db_env_set_func_open</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,33 @@
int
db_env_set_func_open(int (*func_open)(const char *path, int flags, int mode));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>open</b> function
-with <b>func_open</b>, which must conform to the standard interface.
-<p>The db_env_set_func_open interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_open interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_open function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_open</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>open</b> function with
+<b>func_open</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_open method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_open method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_open method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_open</b><dd>
+The <b>func_open</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_read.html b/db/docs/api_c/set_func_read.html
index b3ee93081..55a733849 100644
--- a/db/docs/api_c/set_func_read.html
+++ b/db/docs/api_c/set_func_read.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_read.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_read.so,v 10.14 2003/09/25 15:28:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_read</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_read</h1>
+<h3>db_env_set_func_read</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,33 @@
int
db_env_set_func_read(ssize_t (*func_read)(int fd, void *buf, size_t nbytes));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>read</b> function
-with <b>func_read</b>, which must conform to the standard interface.
-<p>The db_env_set_func_read interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_read interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_read function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_read</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>read</b> function with
+<b>func_read</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_read method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_read method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_read method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_read</b><dd>
+The <b>func_read</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_realloc.html b/db/docs/api_c/set_func_realloc.html
index 91e5835bc..93d6a9bc7 100644
--- a/db/docs/api_c/set_func_realloc.html
+++ b/db/docs/api_c/set_func_realloc.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_realloc.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_realloc.so,v 10.14 2003/09/25 15:28:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_realloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_realloc</h1>
+<h3>db_env_set_func_realloc</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,44 +26,33 @@
int
db_env_set_func_realloc(void *(*func_realloc)(void *ptr, size_t size));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_realloc</h3>
<p>Replace Berkeley DB calls to the ANSI C X3.159-1989 (ANSI C) standard
-<b>realloc</b> function with <b>func_realloc</b>, which must conform to
-the standard interface.
-<p>The db_env_set_func_realloc interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_realloc interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_realloc function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<b>realloc</b> function with <b>func_realloc</b>, which must conform to the
+standard interface specification.</p>
+<p>The db_env_set_func_realloc method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_realloc method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_realloc method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_realloc</b><dd>
+The <b>func_realloc</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_rename.html b/db/docs/api_c/set_func_rename.html
index bb5886723..dbf57a979 100644
--- a/db/docs/api_c/set_func_rename.html
+++ b/db/docs/api_c/set_func_rename.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_rename.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_rename.so,v 10.16 2003/09/25 15:28:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_rename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_rename</h1>
+<h3>db_env_set_func_rename</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,45 +24,35 @@
#include &lt;db.h&gt;
<p>
int
-db_env_set_func_rename(int (*func_rename)(int fd));
+db_env_set_func_rename(int (*func_rename)(const char *from, const char *to));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>close</b> function
-with <b>func_close</b>, which must conform to the standard interface.
-<p>The db_env_set_func_rename interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_rename interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_rename function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_rename</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>rename</b> function with
+<b>func_rename</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_rename method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_rename method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_rename method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_rename</b><dd>
+The <b>func_rename</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_seek.html b/db/docs/api_c/set_func_seek.html
index dd27384f6..7e406ead2 100644
--- a/db/docs/api_c/set_func_seek.html
+++ b/db/docs/api_c/set_func_seek.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_seek.so,v 10.7 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_seek.so,v 10.17 2003/11/08 19:17:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_seek</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_seek</h1>
+<h3>db_env_set_func_seek</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,57 +27,43 @@ int
db_env_set_func_seek(int (*func_seek)(int fd, size_t pgsize,
db_pgno_t pageno, u_int32_t relative, int rewind, int whence));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_seek</h3>
<p>The Berkeley DB library requires the ability to specify that a subsequent read
-from or write to a file will occur at a specific location in that file.
-The <b>func_seek</b> argument must conform to the following interface:
-<p><blockquote><pre>int seek(int fd, size_t pgsize, db_pgno_t pageno,
-u_int32_t relative, int rewind, int whence);</pre></blockquote>
-<p>The <b>fd</b> argument is an open file descriptor on the file.
+from or write to a file will occur at a specific location in that file.</p>
+<p>The db_env_set_func_seek method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_seek method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_seek method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>func_seek</b><dd>
+The <b>func_seek</b> parameter is the function which seeks to a specific
+location in a file.
+<p>The <b>fd</b> parameter is an open file descriptor on the file.</p>
<p>The <b>seek</b> function must cause a subsequent read from or write to
-the file to occur at a byte offset specified by the calculation:
-<p><blockquote><pre>(pgsize * pageno) + relative</pre></blockquote>
-<p>If <b>rewind</b> is non-zero, the byte offset is treated as a backwards
-seek, not a forwards one.
-<p>The <b>whence</b> argument specifies where in the file the byte offset
+the file to occur at a byte offset specified by the calculation:</p>
+<blockquote><pre>(pgsize * pageno) + relative</pre></blockquote>
+<p>If <b>rewind</b> is non-zero, the byte offset is treated as a backward
+seek, not a forward one.</p>
+<p>The <b>whence</b> parameter specifies where in the file the byte offset
is relative to, as described by the IEEE/ANSI Std 1003.1 (POSIX) <b>lseek</b> system
-call.
+call.</p>
<p>The <b>func_seek</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_seek interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_seek interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_seek function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_sleep.html b/db/docs/api_c/set_func_sleep.html
index dd454b1a7..f1f6d8c92 100644
--- a/db/docs/api_c/set_func_sleep.html
+++ b/db/docs/api_c/set_func_sleep.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_sleep.so,v 10.7 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_sleep.so,v 10.19 2003/11/08 19:17:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_sleep</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_sleep</h1>
+<h3>db_env_set_func_sleep</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,53 +26,40 @@
int
db_env_set_func_sleep(int (*func_sleep)(u_long seconds, u_long microseconds));
</pre></h3>
-<h1>Description</h1>
-<p>The Berkeley DB library requires the ability to cause a process to suspend itself
-for a period of time, relinquishing control of the processor to any other
-waiting thread of control. The <b>func_sleep</b> argument must conform
-to the following interface:
-<p><blockquote><pre>int sleep(u_long seconds, u_long microseconds);</pre></blockquote>
-<p>The <b>seconds</b> and <b>microseconds</b> arguments specify the amount
-of time to wait until the suspending thread of control should run again.
-<p>The <b>seconds</b> and <b>microseconds</b> arguments may not be
-normalized when the <b>sleep</b> function is called, i.e., the
-<b>microseconds</b> argument may be greater than 1000000.
-<p>The <b>func_sleep</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_sleep interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_sleep interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_sleep function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_sleep</h3>
+<p>The Berkeley DB library requires the ability to cause a thread of control to
+suspend itself for a period of time, relinquishing control of the
+processor to any other waiting thread of control.</p>
+<p>The db_env_set_func_sleep method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_sleep method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_sleep method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_sleep</b><dd>
+The <b>func_sleep</b> parameter is the function which seeks to a specific
+location in a file.
+<p>The <b>seconds</b> and <b>microseconds</b> parameters specify the amount
+of time to wait until the suspending thread of control should run again.</p>
+<p>The <b>seconds</b> and <b>microseconds</b> parameters may not be
+normalized when the <b>sleep</b> function is called; that is, the
+<b>microseconds</b> parameter may be greater than 1000000.</p>
+<p>The <b>func_sleep</b> function must return the value of <b>errno</b> on
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_unlink.html b/db/docs/api_c/set_func_unlink.html
index 1e5e8e3cb..8a553cc22 100644
--- a/db/docs/api_c/set_func_unlink.html
+++ b/db/docs/api_c/set_func_unlink.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_unlink.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_unlink.so,v 10.14 2003/09/25 15:28:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_unlink</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_unlink</h1>
+<h3>db_env_set_func_unlink</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,33 @@
int
db_env_set_func_unlink(int (*func_unlink)(const char *path));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>unlink</b> function
-with <b>func_unlink</b>, which must conform to the standard interface.
-<p>The db_env_set_func_unlink interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_unlink interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_unlink function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_unlink</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>unlink</b> function with
+<b>func_unlink</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_unlink method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_unlink method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_unlink method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_unlink</b><dd>
+The <b>func_unlink</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_unmap.html b/db/docs/api_c/set_func_unmap.html
index 07635b48a..95ccb8961 100644
--- a/db/docs/api_c/set_func_unmap.html
+++ b/db/docs/api_c/set_func_unmap.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_unmap.so,v 10.8 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_unmap.so,v 10.17 2003/11/08 19:17:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_unmap</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_unmap</h1>
+<h3>db_env_set_func_unmap</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,52 +26,39 @@
int
db_env_set_func_unmap(int (*func_unmap)(void *addr, size_t len));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_unmap</h3>
<p>The Berkeley DB library requires the ability to unmap a file or shared memory
-region from memory. The <b>func_unmap</b> argument must conform to the
-following interface:
-<p><blockquote><pre>int unmap(void *addr, size_t len);</pre></blockquote>
-<p>The <b>addr</b> argument is the argument returned by the
+region from memory.</p>
+<p>The db_env_set_func_unmap method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_unmap method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_unmap method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>func_unmap</b><dd>
+The <b>func_unmap</b> parameter is the function which unmaps a file or
+shared memory region.
+<p>The <b>addr</b> parameter is the value returned by the
<a href="../api_c/set_func_map.html">db_env_set_func_map</a> function when the file or region was mapped
-into memory, and the <b>len</b> argument is the same as the <b>len</b>
-argument specified to the <a href="../api_c/set_func_map.html">db_env_set_func_map</a> function when the
-file or region was mapped into memory.
+into memory, and the <b>len</b> parameter is the same as the <b>len</b>
+parameter specified to the <a href="../api_c/set_func_map.html">db_env_set_func_map</a> function when the
+file or region was mapped into memory.</p>
<p>The <b>func_unmap</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_unmap interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_unmap interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_unmap function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_write.html b/db/docs/api_c/set_func_write.html
index 7b52b5078..d39e09bd6 100644
--- a/db/docs/api_c/set_func_write.html
+++ b/db/docs/api_c/set_func_write.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_write.so,v 10.6 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_write.so,v 10.14 2003/09/25 15:28:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_write</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_write</h1>
+<h3>db_env_set_func_write</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,43 +27,33 @@ int
db_env_set_func_write(
ssize_t (*func_write)(int fd, const void *buffer, size_t nbytes));
</pre></h3>
-<h1>Description</h1>
-<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>write</b> function
-with <b>func_write</b>, which must conform to the standard interface.
-<p>The db_env_set_func_write interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_write interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_write function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_write</h3>
+<p>Replace Berkeley DB calls to the IEEE/ANSI Std 1003.1 (POSIX) <b>write</b> function with
+<b>func_write</b>, which must conform to the standard interface
+specification.</p>
+<p>The db_env_set_func_write method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_write method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_write method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_write</b><dd>
+The <b>func_write</b> parameter is the replacement function. It must conform
+to the standard interface specification.
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/set_func_yield.html b/db/docs/api_c/set_func_yield.html
index 23915aea6..334af4895 100644
--- a/db/docs/api_c/set_func_yield.html
+++ b/db/docs/api_c/set_func_yield.html
@@ -1,20 +1,22 @@
-<!--$Id: set_func_yield.so,v 10.8 2000/05/31 15:10:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_func_yield.so,v 10.19 2003/11/08 19:17:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_env_set_func_yield</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_env_set_func_yield</h1>
+<h3>db_env_set_func_yield</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,61 +26,47 @@
int
db_env_set_func_yield(int (*func_yield)(void));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: db_env_set_func_yield</h3>
<p>The Berkeley DB library requires the ability to yield the processor from the current
-thread of control to any other waiting threads of control.
-The <b>func_yield</b> argument must conform to the following interface:
-<p><blockquote><pre>int yield(void);</pre></blockquote>
+thread of control to any other waiting threads of control.</p>
<p>The <b>func_yield</b> function must be able to cause the rescheduling
-all participants in the current Berkeley DB environment, whether threaded or
-not. It may be incorrect to supply a thread <b>yield</b> function if
-more than a single process is operating in the Berkeley DB environment. This
-is because many thread-yield functions will not allow other processes to
-run, and the contested lock may be held by another process, not by another
-thread.
+of all participants in the current Berkeley DB environment, whether threaded
+or not. It may be incorrect to supply a thread <b>yield</b> function
+if more than a single process is operating in the Berkeley DB environment.
+This is because many thread-yield functions will not allow other
+processes to run, and the contested lock may be held by another process,
+not by another thread.</p>
<p>If no <b>func_yield</b> function is specified, or if the <b>yield</b>
function returns an error, the function specified by the
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a> entry will be used instead or subsequently,
-i.e., if no <b>yield</b> function is specified, or it is possible for
-the <b>yield</b> function to fail, the <b>sleep</b> function
+<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a> entry will be used instead or subsequently;
+that is, if no <b>yield</b> function is specified, or if it is possible
+for the <b>yield</b> function to fail, the <b>sleep</b> function
<b>must</b> cause the processor to reschedule any waiting threads of
-control for execution.
-<p>The <b>func_yield</b> function must return the value of <b>errno</b> on
-failure and 0 on success.
-<p>The db_env_set_func_yield interface affects the entire application, not a single
-database or database environment.
-<p>While the db_env_set_func_yield interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> functions.
-<p>The db_env_set_func_yield function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
+control for execution.</p>
+<p>The db_env_set_func_yield method configures all operations performed by a process and
+all of its threads of control, not operations confined to a single
+database environment.</p>
+<p>Although the db_env_set_func_yield method may be called at any time during the life of
+the application, it should normally be called before making calls to the
+<a href="../api_c/env_class.html">db_env_create</a> or <a href="../api_c/db_class.html">db_create</a> methods.</p>
+<p>The db_env_set_func_yield method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>func_yield</b><dd>
+The <b>func_yield</b> parameter is the function which yields the processor.
+<p>The <b>func_yield</b> function must return the value of <b>errno</b> on
+failure and 0 on success.</p>
</dl>
-<h1>See Also</h1>
-<a href="../api_c/set_func_close.html">db_env_set_func_close</a>,
-<a href="../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>,
-<a href="../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>,
-<a href="../api_c/set_func_exists.html">db_env_set_func_exists</a>,
-<a href="../api_c/set_func_free.html">db_env_set_func_free</a>,
-<a href="../api_c/set_func_fsync.html">db_env_set_func_fsync</a>,
-<a href="../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a>,
-<a href="../api_c/set_func_malloc.html">db_env_set_func_malloc</a>,
-<a href="../api_c/set_func_map.html">db_env_set_func_map</a>,
-<a href="../api_c/set_func_open.html">db_env_set_func_open</a>,
-<a href="../api_c/set_func_read.html">db_env_set_func_read</a>,
-<a href="../api_c/set_func_realloc.html">db_env_set_func_realloc</a>,
-<a href="../api_c/set_func_seek.html">db_env_set_func_seek</a>,
-<a href="../api_c/set_func_sleep.html">db_env_set_func_sleep</a>,
-<a href="../api_c/set_func_unlink.html">db_env_set_func_unlink</a>,
-<a href="../api_c/set_func_unmap.html">db_env_set_func_unmap</a>,
-<a href="../api_c/set_func_write.html">db_env_set_func_write</a>
-and
-<a href="../api_c/set_func_yield.html">db_env_set_func_yield</a>.
+<h3>See Also</h3>
+<a href="../ref/program/runtime.html">Run-time configuration</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_abort.html b/db/docs/api_c/txn_abort.html
index 00056023a..b339e3316 100644
--- a/db/docs/api_c/txn_abort.html
+++ b/db/docs/api_c/txn_abort.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_abort.so,v 10.25 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_abort.so,v 10.38 2003/09/25 15:28:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_abort</title>
+<title>Berkeley DB: DB_TXN-&gt;abort</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_abort</h1>
+<h3>DB_TXN-&gt;abort</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,42 +24,34 @@
#include &lt;db.h&gt;
<p>
int
-txn_abort(DB_TXN *tid);
+DB_TXN-&gt;abort(DB_TXN *tid);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_abort function causes an abnormal termination of the
-transaction. The log is played backwards and any necessary recovery
-operations are initiated through the <b>recover</b> function specified
-to <a href="../api_c/env_open.html">DBENV-&gt;open</a>. After the log processing is completed, all locks
-held by the transaction are released. As is the case for
-<a href="../api_c/txn_commit.html">txn_commit</a>, applications that require strict two-phase locking
-should not explicitly release any locks.
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;abort</h3>
+<p>The DB_TXN-&gt;abort method causes an abnormal termination of the transaction.
+The log is played backward, and any necessary undo operations are done
+through the <b>tx_recover</b> function specified to
+<a href="../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a>. Before DB_TXN-&gt;abort returns, any
+locks held by the transaction will have been released.</p>
<p>In the case of nested transactions, aborting a parent transaction causes
-all children (unresolved or not) of the parent transaction to be aborted.
-<p>Once the txn_abort function returns, the DB_TXN handle may not
-be accessed again.
-<p>The txn_abort function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_abort function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_abort function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+all children (unresolved or not) of the parent transaction to be aborted.</p>
+<p>All cursors opened within the transaction must be closed before the
+transaction is aborted.</p>
+<p>After DB_TXN-&gt;abort has been called, regardless of its return, the
+<a href="../api_c/txn_class.html">DB_TXN</a> handle may not be accessed again.</p>
+<p>The DB_TXN-&gt;abort method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_begin.html b/db/docs/api_c/txn_begin.html
index 0241d5c1f..7d57ab0a2 100644
--- a/db/docs/api_c/txn_begin.html
+++ b/db/docs/api_c/txn_begin.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_begin.so,v 10.37 2001/01/11 17:47:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_begin.so,v 10.69 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_begin</title>
+<title>Berkeley DB: DB_ENV-&gt;txn_begin</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_begin</h1>
+<h3>DB_ENV-&gt;txn_begin</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,72 +24,84 @@
#include &lt;db.h&gt;
<p>
int
-txn_begin(DB_ENV *env,
- DB_TXN *parent, DB_TXN **tid, u_int32_t flags);
+DB_ENV-&gt;txn_begin(DB_ENV *env,
+ DB_TXN *parent, DB_TXN **tid, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_begin method creates a new transaction in the environment
-and copies a pointer to a DB_TXN that uniquely identifies it into
-the memory referenced by <b>tid</b>.
-<p>If the <b>parent</b> argument is non-NULL, the new transaction will
-be a nested transaction, with the transaction indicated by
-<b>parent</b> as its parent. Transactions may be
-nested to any level.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;txn_begin</h3>
+<p>The DB_ENV-&gt;txn_begin method creates a new transaction in the environment
+and copies a pointer to a <a href="../api_c/txn_class.html">DB_TXN</a> that uniquely identifies it into
+the memory to which <b>tid</b> refers.
+Calling the <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>,
+<a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a> or <a href="../api_c/txn_discard.html">DB_TXN-&gt;discard</a> methods will discard the returned
+handle.</p>
+<p><b>Note: Transactions may only span threads if they do so serially;
+that is, each transaction must be active in only a single thread
+of control at a time. This restriction holds for parents of nested
+transactions as well; not two children may be concurrently active in
+more than one thread of control at any one time.</b></p>
+<p><b>Note: Cursors may not span transactions; that is, each cursor must be
+opened and closed within a single transaction.</b></p>
+<p><b>Note: A parent transaction may not issue any Berkeley DB operations -- except for
+DB_ENV-&gt;txn_begin, <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a> and <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a> -- while it has
+active child transactions (child transactions that have not yet been
+committed or aborted).</b></p>
+<p>The DB_ENV-&gt;txn_begin method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>All read operations performed by the transaction may read modified but
+not yet committed data. Silently ignored if the <a href="../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a>
+flag was not specified when the underlying database was opened.
<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log when this transaction commits or
prepares. This means the transaction will exhibit the ACI (atomicity,
-consistency and isolation) properties, but not D (durability), i.e.,
+consistency, and isolation) properties, but not D (durability); that is,
database integrity will be maintained but it is possible that this
-transaction may be undone during recovery instead of being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> interface.
+transaction may be undone during recovery.
+<p>This behavior may be set for a Berkeley DB environment using the
+<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. Any value specified to this method
+overrides that setting.</p>
<p><dt><a name="DB_TXN_NOWAIT">DB_TXN_NOWAIT</a><dd>If a lock is unavailable for any Berkeley DB operation performed in the context
-of this transaction, return immediately instead of blocking on the lock.
-The error return in the case will be <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>.
+of this transaction, cause the operation to
+return DB_LOCK_DEADLOCK
+immediately instead of blocking on the lock.
<p><dt><a name="DB_TXN_SYNC">DB_TXN_SYNC</a><dd>Synchronously flush the log when this transaction commits or prepares.
This means the transaction will exhibit all of the ACID (atomicity,
-consistency and isolation and durability) properties.
+consistency, isolation, and durability) properties.
<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>
-interface.
+<a href="../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the
+<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. Any value specified to this method
+overrides that setting.</p>
</dl>
-<p><b>Note: An transaction may not span threads,
-i.e., each transaction must begin and end in the same thread, and each
-transaction may only be used by a single thread.</b>
-<p><b>Note: cursors may not span transactions, i.e., each cursor must be opened
-and closed within a single transaction.</b>
-<p><b>Note: a parent transaction may not issue any Berkeley DB operations, except for
-txn_begin, <a href="../api_c/txn_abort.html">txn_abort</a> and <a href="../api_c/txn_commit.html">txn_commit</a>, while it has
-active child transactions (child transactions that have not yet been
-committed or aborted).</b>
-<p>The txn_begin function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_begin function may fail and return a non-zero error for the following conditions:
+<p><dt><b>parent</b><dd>
+If the <b>parent</b> parameter is non-NULL, the new transaction will
+be a nested transaction, with the transaction indicated by
+<b>parent</b> as its parent. Transactions may be nested to any level.
+In the presence of distributed transactions and two-phase commit, only
+the parental transaction, that is a transaction without a <b>parent</b>
+specified, should be passed as an parameter to <a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a>.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;txn_begin method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
<p><dt>ENOMEM<dd>The maximum number of concurrent transactions has been reached.
</dl>
-<p>The txn_begin function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_begin function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_checkpoint.html b/db/docs/api_c/txn_checkpoint.html
index 140edee57..397f3a1b3 100644
--- a/db/docs/api_c/txn_checkpoint.html
+++ b/db/docs/api_c/txn_checkpoint.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_checkpoint.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_checkpoint.so,v 10.47 2003/11/20 14:55:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_checkpoint</title>
+<title>Berkeley DB: DB_ENV-&gt;txn_checkpoint</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_checkpoint</h1>
+<h3>DB_ENV-&gt;txn_checkpoint</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,54 +24,53 @@
#include &lt;db.h&gt;
<p>
int
-txn_checkpoint(const DB_ENV *env,
+DB_ENV-&gt;txn_checkpoint(const DB_ENV *env,
u_int32_t kbyte, u_int32_t min, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_checkpoint function flushes the underlying memory pool,
-writes a checkpoint record to the log and then flushes the log.
-<p>If either <b>kbyte</b> or <b>min</b> is non-zero, the checkpoint is only
-done if there has been activity since the last checkpoint and either
-more than <b>min</b> minutes have passed since the last checkpoint,
-or if more than <b>kbyte</b> kilobytes of log data have been written since
-the last checkpoint.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;txn_checkpoint</h3>
+<p>The DB_ENV-&gt;txn_checkpoint method flushes the underlying memory pool, writes
+a checkpoint record to the log, and then flushes the log.</p>
+<p>The DB_ENV-&gt;txn_checkpoint method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>The DB_ENV-&gt;txn_checkpoint method is the underlying method used by the <a href="../utility/db_checkpoint.html">db_checkpoint</a> utility.
+See the <a href="../utility/db_checkpoint.html">db_checkpoint</a> utility source code for an example of using DB_ENV-&gt;txn_checkpoint
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>Force a checkpoint record even if there has been no activity since the
+<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>Force a checkpoint record, even if there has been no activity since the
last checkpoint.
</dl>
-<p>The txn_checkpoint function returns a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages that needed to be
-written to complete the checkpoint but that <a href="../api_c/memp_sync.html">memp_sync</a> was unable
-to write immediately.
-<p>The txn_checkpoint function is the underlying function used by the <a href="../utility/db_checkpoint.html">db_checkpoint</a> utility.
-See the <a href="../utility/db_checkpoint.html">db_checkpoint</a> utility source code for an example of using txn_checkpoint
-in a IEEE/ANSI Std 1003.1 (POSIX) environment.
-<h1>Errors</h1>
-<p>The txn_checkpoint function may fail and return a non-zero error for the following conditions:
+<p><dt><b>kbyte</b><dd>
+If the <b>kbyte</b> parameter is non-zero, a checkpoint will be done
+if more than <b>kbyte</b> kilobytes of log data have been written since
+the last checkpoint.
+<p><dt><b>min</b><dd>
+If the <b>min</b> parameter is non-zero, a checkpoint will be done if
+more than <b>min</b> minutes have passed since the last checkpoint.
+</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;txn_checkpoint method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The txn_checkpoint function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_checkpoint function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_class.html b/db/docs/api_c/txn_class.html
index 7811ef956..00e05a48e 100644
--- a/db/docs/api_c/txn_class.html
+++ b/db/docs/api_c/txn_class.html
@@ -1,21 +1,22 @@
-<!--Id: txn_class.so,v 10.21 2002/08/24 18:24:49 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn_class.so,v 10.23 2003/09/25 15:28:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_TXN</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_TXN</h1>
+<h3>DB_TXN</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,11 +25,12 @@
<p>
typedef struct __db_txn DB_TXN;
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_TXN</h3>
<p>The DB_TXN object is the handle for a transaction. Methods off
the DB_TXN handle are used to configure, abort and commit the
transaction. DB_TXN handles are provided to <a href="../api_c/db_class.html">DB</a> methods
-in order to transactionally protect those database operations.
+in order to transactionally protect those database operations.</p>
<p>DB_TXN handles are not free-threaded; transactions handles may
be used by multiple threads, but only serially, that is, the application
must serialize access to the DB_TXN handle. Once the
@@ -37,15 +39,16 @@ not be accessed again, regardless of the method's return. In addition,
parent transactions may not issue any Berkeley DB operations while they have
active child transactions (child transactions that have not yet been
committed or aborted) except for <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>, <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>
-and <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a>.
-<h1>Class</h1>
+and <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a>.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, DB_TXN
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_commit.html b/db/docs/api_c/txn_commit.html
index 7fca3d08d..0de416e31 100644
--- a/db/docs/api_c/txn_commit.html
+++ b/db/docs/api_c/txn_commit.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_commit.so,v 10.27 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_commit.so,v 10.48 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_commit</title>
+<title>Berkeley DB: DB_TXN-&gt;commit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_commit</h1>
+<h3>DB_TXN-&gt;commit</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,62 +24,63 @@
#include &lt;db.h&gt;
<p>
int
-txn_commit(DB_TXN *tid, u_int32_t flags);
+DB_TXN-&gt;commit(DB_TXN *tid, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_commit function ends the transaction. In the case of nested
-transactions, if the transaction is a parent transaction, committing
-the parent transaction causes all unresolved children of the parent to
-be committed.
-<p>In the case of nested transactions, if the transaction is a child
-transaction, its locks are not released, but are acquired by its parent.
-While the commit of the child transaction will succeed, the actual
-resolution of the child transaction is postponed until the parent
-transaction is committed or aborted, i.e., if its parent transaction
-commits, it will be committed, and if its parent transaction aborts, it
-will be aborted.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;commit</h3>
+<p>The DB_TXN-&gt;commit method ends the transaction.</p>
+<p>In the case of nested transactions, if the transaction is a parent
+transaction, committing the parent transaction causes all unresolved
+children of the parent to be committed. In the case of nested
+transactions, if the transaction is a child transaction, its locks are
+not released, but are acquired by its parent. Although the commit of the
+child transaction will succeed, the actual resolution of the child
+transaction is postponed until the parent transaction is committed or
+aborted; that is, if its parent transaction commits, it will be
+committed; and if its parent transaction aborts, it will be aborted.</p>
+<p>All cursors opened within the transaction must be closed before the
+transaction is committed.</p>
+<p>After DB_TXN-&gt;commit has been called, regardless of its return, the
+<a href="../api_c/txn_class.html">DB_TXN</a> handle may not be accessed again. If DB_TXN-&gt;commit
+encounters an error, the transaction and all child transactions of the
+transaction are aborted.</p>
+<p>The DB_TXN-&gt;commit method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log. This means the transaction will
-exhibit the ACI (atomicity, consistency and isolation) properties, but
-not D (durability), i.e., database integrity will be maintained but it is
-possible that this transaction may be undone during recovery instead of
-being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> interface.
+exhibit the ACI (atomicity, consistency, and isolation) properties, but
+not D (durability); that is, database integrity will be maintained, but
+it is possible that this transaction may be undone during recovery.
+<p>This behavior may be set for a Berkeley DB environment using the
+<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method or for a single transaction using the
+<a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> method. Any value specified to this method overrides
+both of those settings.</p>
<p><dt><a name="DB_TXN_SYNC">DB_TXN_SYNC</a><dd>Synchronously flush the log. This means the transaction will exhibit
-all of the ACID (atomicity, consistency and isolation and durability)
+all of the ACID (atomicity, consistency, isolation, and durability)
properties.
<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>
-or <a href="../api_c/txn_begin.html">txn_begin</a> interfaces.
+<a href="../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the
+<a href="../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. This behavior may also be set for a single
+transaction using the <a href="../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> method. Any value specified to this
+method overrides both of those settings.</p>
</dl>
-<p>Once the txn_commit function returns, the DB_TXN handle may not
-be accessed again. If txn_commit encounters an error, the
-transaction and all child transactions of the transaction are aborted.
-<p>The txn_commit function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_commit function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_commit function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_discard.html b/db/docs/api_c/txn_discard.html
index 7f6f09aae..a6fcdaa6c 100644
--- a/db/docs/api_c/txn_discard.html
+++ b/db/docs/api_c/txn_discard.html
@@ -1,20 +1,22 @@
-<!--Id: txn_discard.so,v 10.2 2001/05/05 01:49:17 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: txn_discard.so,v 10.15 2003/10/31 17:25:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_discard</title>
+<title>Berkeley DB: DB_TXN-&gt;discard</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>txn_discard</h1>
+<h3>DB_TXN-&gt;discard</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,51 +24,46 @@
#include &lt;db.h&gt;
<p>
int
-txn_discard(DB_TXN *tid, u_int32_t flags);
+DB_TXN-&gt;discard(DB_TXN *tid, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_discard function frees up all the per-process resources
-associated with the specified DB_TXN handle, neither committing
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;discard</h3>
+<p>The DB_TXN-&gt;discard method frees up all the per-process resources
+associated with the specified <a href="../api_c/txn_class.html">DB_TXN</a> handle, neither committing
nor aborting the transaction. This call may be used only after calls
-to <a href="../api_c/txn_recover.html">txn_recover</a> when there are multiple global transaction
+to <a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> when there are multiple global transaction
managers recovering transactions in a single Berkeley DB environment. Any
-transactions returned by <a href="../api_c/txn_recover.html">txn_recover</a> that are not handled by
+transactions returned by <a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> that are not handled by
the current global transaction manager should be discarded using
-txn_discard.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The txn_discard function returns EINVAL if the transaction handle does
-not refer to a transaction that was recovered into a prepared but not
-yet completed state.
-<p>Otherwise, the txn_discard function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_discard function may fail and return a non-zero error for the following conditions:
+DB_TXN-&gt;discard.</p>
+<p>The DB_TXN-&gt;discard method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<p>After DB_TXN-&gt;discard has been called, regardless of its return, the
+<a href="../api_c/txn_class.html">DB_TXN</a> handle may not be accessed again.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DB_TXN-&gt;discard method
+may fail and return one of the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The transaction handle does not refer to a transaction that was
-recovered into a prepared but not yet completed state.
+<p><dt>EINVAL<dd>If the transaction handle does not refer to a transaction that was
+recovered into a prepared but not yet completed state; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The txn_discard function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_discard function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_discard.html">txn_discard</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>,
-<a href="../api_c/txn_recover.html">txn_recover</a>,
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_id.html b/db/docs/api_c/txn_id.html
index bcda4bcdf..948b885ef 100644
--- a/db/docs/api_c/txn_id.html
+++ b/db/docs/api_c/txn_id.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_id.so,v 10.12 1999/12/20 08:52:32 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_id.so,v 10.20 2003/10/31 17:25:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_id</title>
+<title>Berkeley DB: DB_TXN-&gt;id</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_id</h1>
+<h3>DB_TXN-&gt;id</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,29 +24,23 @@
#include &lt;db.h&gt;
<p>
u_int32_t
-txn_id(DB_TXN *tid);
+DB_TXN-&gt;id(DB_TXN *tid);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_id function returns the unique transaction id associated with the
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;id</h3>
+<p>The DB_TXN-&gt;id method returns the unique transaction id associated with the
specified transaction. Locking calls made on behalf of this transaction
-should use the value returned from txn_id as the locker parameter
-to the <a href="../api_c/lock_get.html">lock_get</a> or <a href="../api_c/lock_vec.html">lock_vec</a> calls.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+should use the value returned from DB_TXN-&gt;id as the locker parameter
+to the <a href="../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> or <a href="../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> calls.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_list.html b/db/docs/api_c/txn_list.html
index ad6633ca4..c7e1a0726 100644
--- a/db/docs/api_c/txn_list.html
+++ b/db/docs/api_c/txn_list.html
@@ -1,17 +1,17 @@
-<!--Id: txn_list.so,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn_list.so,v 1.1 2002/08/30 20:02:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Transaction Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
<tr><td><a href="../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
@@ -26,6 +26,6 @@
<tr><td><a href="../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
<tr><td><a href="../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a></td><td>Set transaction timeout</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_prepare.html b/db/docs/api_c/txn_prepare.html
index 549a6f074..ba48aa3fd 100644
--- a/db/docs/api_c/txn_prepare.html
+++ b/db/docs/api_c/txn_prepare.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_prepare.so,v 10.17 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_prepare.so,v 10.34 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_prepare</title>
+<title>Berkeley DB: DB_TXN-&gt;prepare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_prepare</h1>
+<h3>DB_TXN-&gt;prepare</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,42 +24,46 @@
#include &lt;db.h&gt;
<p>
int
-txn_prepare(DB_TXN *tid);
+DB_TXN-&gt;prepare(DB_TXN *tid, u_int8_t gid[DB_XIDDATASIZE]);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_prepare function initiates the beginning of a two-phase commit.
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;prepare</h3>
+<a name="3"><!--meow--></a>
+<p>The DB_TXN-&gt;prepare method initiates the beginning of a two-phase commit.</p>
<p>In a distributed transaction environment, Berkeley DB can be used as a local
transaction manager. In this case, the distributed transaction manager
must send <i>prepare</i> messages to each local manager. The local
-manager must then issue a txn_prepare and await its successful
+manager must then issue a DB_TXN-&gt;prepare and await its successful
return before responding to the distributed transaction manager. Only
after the distributed transaction manager receives successful responses
from all of its <i>prepare</i> messages should it issue any
-<i>commit</i> messages.
-<p>In the case of nested transactions, preparing a parent transaction
-causes all unresolved children of the parent transaction to be prepared.
-<p>The txn_prepare function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_prepare function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_prepare function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<i>commit</i> messages.</p>
+<p>In the case of nested transactions, preparing the parent
+causes all unresolved children of the parent transaction to be committed.
+Child transactions should never be explicitly prepared.
+Their fate will be resolved along with their parent's during
+global recovery.</p>
+<p>The DB_TXN-&gt;prepare method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>gid</b><dd>
+The <b>gid</b> parameter specifies the global transaction ID by which this
+transaction will be known. This global transaction ID will be returned
+in calls to <a href="../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a>, telling the application which global
+transactions must be resolved.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_recover.html b/db/docs/api_c/txn_recover.html
index fd91fce01..26fe245ca 100644
--- a/db/docs/api_c/txn_recover.html
+++ b/db/docs/api_c/txn_recover.html
@@ -1,82 +1,88 @@
-<!--Id: txn_recover.so,v 10.6 2001/05/04 14:31:05 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: txn_recover.so,v 10.24 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_recover</title>
+<title>Berkeley DB: DB_ENV-&gt;txn_recover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>txn_recover</h1>
+<h3>DB_ENV-&gt;txn_recover</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db.h&gt;
<p>
-int txn_recover(DB_ENV *dbenv, DB_PREPLIST preplist[],
- long count, long *retp, u_int32_t flags);
+int
+DB_ENV-&gt;txn_recover(DB_ENV *dbenv, DB_PREPLIST preplist[],
+ long count, long *retp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_recover interface returns a list of prepared but not
-yet resolved transactions. The txn_recover function should only be
-called after the environment has been recovered.
-<p>On return from txn_recover, the <b>preplist</b> argument will
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;txn_recover</h3>
+<p>The DB_ENV-&gt;txn_recover method returns a list of prepared but not yet resolved
+transactions. The DB_ENV-&gt;txn_recover method should only be called after the
+environment has been recovered. Because database environment state must
+be preserved between recovery and the application calling
+DB_ENV-&gt;txn_recover, applications must either call DB_ENV-&gt;txn_recover
+using the same environment handle used when recovery is done, or the
+database environment must not be configured using the <a href="../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>
+flag.</p>
+<p>On return from DB_ENV-&gt;txn_recover, the <b>preplist</b> parameter will
be filled in with a list of transactions that must be resolved by the
application (committed, aborted or discarded). The <b>preplist</b>
-argument is a structure of type DB_PREPLIST; the following DB_PREPLIST
-fields will be filled in:
+parameter is a structure of type DB_PREPLIST; the following DB_PREPLIST
+fields will be filled in:</p>
<p><dl compact>
-<p><dt>DB_TXN *txn;<dd>The transaction handle for the transaction.
-<p><dt>u_int8_t gid[<a href="../api_c/txn_prepare.html#DB_XIDDATASIZE">DB_XIDDATASIZE</a>];<dd>The global transaction ID for the transaction. The global transaction
+<dt>DB_TXN * txn;<dd>The transaction handle for the transaction.
+<dt>u_int8_t gid[DB_XIDDATASIZE];<dd>The global transaction ID for the transaction. The global transaction
ID is the one specified when the transaction was prepared. The
application is responsible for ensuring uniqueness among global
transaction IDs.
</dl>
-<p>The application must call <a href="../api_c/txn_abort.html">txn_abort</a>, <a href="../api_c/txn_commit.html">txn_commit</a> or
-<a href="../api_c/txn_discard.html">txn_discard</a> on each returned DB_TXN handle before
-starting any new operations.
-<p>The <b>count</b> parameter specifies the number of available entries
+<p>The application must call <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>, <a href="../api_c/txn_commit.html">DB_TXN-&gt;commit</a> or
+<a href="../api_c/txn_discard.html">DB_TXN-&gt;discard</a> on each returned <a href="../api_c/txn_class.html">DB_TXN</a> handle before
+starting any new operations.</p>
+<p>The DB_ENV-&gt;txn_recover method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>count</b><dd>
+The <b>count</b> parameter specifies the number of available entries
in the passed-in <b>preplist</b> array. The <b>retp</b> parameter
-returns the number of entries txn_recover has filled in, in the
+returns the number of entries DB_ENV-&gt;txn_recover has filled in, in the
array.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>Begin returning a list of prepared, but not yet resolved transactions.
<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>Continue returning a list of prepared, but not yet resolved transactions,
-starting where the last call to txn_recover left off.
+starting where the last call to DB_ENV-&gt;txn_recover left off.
</dl>
-<p>The txn_recover function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_recover function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_recover function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_discard.html">txn_discard</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>,
-<a href="../api_c/txn_recover.html">txn_recover</a>,
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<p><dt><b>preplist</b><dd>
+The <b>preplist</b> parameter references memory into which
+ the list of transactions to be resolved by the application is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_set_timeout.html b/db/docs/api_c/txn_set_timeout.html
index 310e26a56..2f169518e 100644
--- a/db/docs/api_c/txn_set_timeout.html
+++ b/db/docs/api_c/txn_set_timeout.html
@@ -1,21 +1,22 @@
-<!--Id: txn_set_timeout.so,v 10.8 2002/08/29 03:26:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn_set_timeout.so,v 10.18 2003/11/08 19:17:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DB_TXN-&gt;set_timeout</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DB_TXN-&gt;set_timeout</h1>
+<h3>DB_TXN-&gt;set_timeout</h3>
</td>
<td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,16 +26,10 @@
u_int32_t
DB_TXN-&gt;set_timeout(DB_TXN *tid, db_timeout_t timeout, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DB_TXN-&gt;set_timeout</h3>
<p>The DB_TXN-&gt;set_timeout method sets timeout values for locks or
-transactions for the specified transaction. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this transaction.
-<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for this transaction.
-</dl>
+transactions for the specified transaction.</p>
<p>Timeouts are checked whenever a thread of control blocks on a lock or
when deadlock detection is performed. (In the case of
DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
@@ -44,32 +39,47 @@ transaction. In either case, it may be a lock requested by the database
access methods underlying the application.) As timeouts are only
checked when the lock request first blocks or when deadlock detection
is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
+detection is performed.</p>
<p>Timeout values may be specified for the database environment as a whole.
-See <a href="../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a> and for more information.
+See <a href="../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a> and for more information.</p>
<p>The DB_TXN-&gt;set_timeout method configures operations performed on the underlying
transaction, not only operations performed using the specified
-<a href="../api_c/txn_class.html">DB_TXN</a> handle.
-<p>The DB_TXN-&gt;set_timeout interface may be called at any time during the life of
-the application.
-<p>The DB_TXN-&gt;set_timeout method returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The DB_TXN-&gt;set_timeout method may fail and return a non-zero error for the following conditions:
+<a href="../api_c/txn_class.html">DB_TXN</a> handle.</p>
+<p>The DB_TXN-&gt;set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DB_TXN-&gt;set_timeout method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this transaction.
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for this transaction.
+</dl>
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter is specified as an unsigned 32-bit number
+of microseconds, limiting the maximum timeout to roughly 71 minutes. A
+value of 0 disables timeouts for the transaction.
</dl>
-<p>The DB_TXN-&gt;set_timeout method may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the DB_TXN-&gt;set_timeout method may fail and
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DB_TXN-&gt;set_timeout method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_c/txn_stat.html b/db/docs/api_c/txn_stat.html
index 769283f93..5f07a3361 100644
--- a/db/docs/api_c/txn_stat.html
+++ b/db/docs/api_c/txn_stat.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_stat.so,v 10.27 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_stat.so,v 10.55 2003/11/27 02:15:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: txn_stat</title>
+<title>Berkeley DB: DB_ENV-&gt;txn_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>txn_stat</h1>
+<h3>DB_ENV-&gt;txn_stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,73 +24,83 @@
#include &lt;db.h&gt;
<p>
int
-txn_stat(DB_ENV *env,
- DB_TXN_STAT **statp, void *(*db_malloc)(size_t));
+DB_ENV-&gt;txn_stat(DB_ENV *env, DB_TXN_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The txn_stat function
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The transaction region statistics are stored in a structure of type
-DB_TXN_STAT. The following DB_TXN_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DB_ENV-&gt;txn_stat</h3>
+<p>The DB_ENV-&gt;txn_stat method returns the transaction subsystem statistics.</p>
+<p>The DB_ENV-&gt;txn_stat method creates a statistical structure of type
+DB_TXN_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_TXN_STAT fields will be filled in:</p>
<p><dl compact>
-<dt><a href="../api_c/db_lsn.html">DB_LSN</a> st_last_ckp;<dd>The LSN of the last checkpoint.
-<dt><a href="../api_c/db_lsn.html">DB_LSN</a> st_pending_ckp;<dd>The LSN of any checkpoint that is currently in progress. If
-<b>st_pending_ckp</b> is the same as <b>st_last_ckp</b> there
-is no checkpoint in progress.
+<dt>DbLsn st_last_ckp;<dd>The LSN of the last checkpoint.
<dt>time_t st_time_ckp;<dd>The time the last completed checkpoint finished (as the number of seconds
-since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> interface).
+since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> function).
<dt>u_int32_t st_last_txnid;<dd>The last transaction ID allocated.
-<dt>u_int32_t st_maxtxns;<dd>The maximum number of active transactions possible.
+<dt>u_int32_t st_maxtxns;<dd>The maximum number of active transactions configured.
<dt>u_int32_t st_nactive;<dd>The number of transactions that are currently active.
<dt>u_int32_t st_maxnactive;<dd>The maximum number of active transactions at any one time.
<dt>u_int32_t st_nbegins;<dd>The number of transactions that have begun.
<dt>u_int32_t st_naborts;<dd>The number of transactions that have aborted.
<dt>u_int32_t st_ncommits;<dd>The number of transactions that have committed.
+<dt>u_int32_t st_nrestores;<dd>The number of transactions that have been restored.
<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
-<dt>DB_TXN_ACTIVE * st_txnarray;<dd>A pointer to an array of <b>st_nactive</b> DB_TXN_ACTIVE structures,
+<dt>DB_TXN_ACTIVE *st_txnarray;<dd>A pointer to an array of <b>st_nactive</b> DB_TXN_ACTIVE structures,
describing the currently active transactions. The following fields of
the DB_TXN_ACTIVE structure will be filled in:
<p><dl compact>
-<p><dt>u_int32_t txnid;<dd>The transaction ID as returned by <a href="../api_c/txn_begin.html">txn_begin</a>.
+<dt>u_int32_t txnid;<dd>The transaction ID of the transaction.
<dt>u_int32_t parentid;<dd>The transaction ID of the parent transaction (or 0, if no parent).
-<dt><a href="../api_c/db_lsn.html">DB_LSN</a> lsn;<dd>The log sequence number of the transaction-begin record.
+<dt>DbLsn lsn;<dd>The current log sequence number when the transaction was begun.
+<dt>u_int32_t xa_status;<dd>If the transaction is an XA transaction, the status of the transaction,
+otherwise 0.
+<dt>u_int8_t xid[DB_XIDDATASIZE];<dd>If the transaction is an XA transaction, the transaction's XA ID.
+</dl>
+</dl>
+<p>The DB_ENV-&gt;txn_stat method
+returns a non-zero error value on failure
+and 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
</dl>
+<h3>Errors</h3>
+<p>The DB_ENV-&gt;txn_stat method
+may fail and return one of the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The txn_stat function returns a non-zero error value on failure and 0 on success.
-<h1>Errors</h1>
-<p>The txn_stat function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions.
-If a catastrophic error has occurred, the txn_stat function may fail and return
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>See Also</h1>
-<a href="../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a>,
-<a href="../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>,
-<a href="../api_c/env_set_tx_timestamp.html">DBENV-&gt;set_tx_timestamp</a>,
-<a href="../api_c/txn_abort.html">txn_abort</a>,
-<a href="../api_c/txn_begin.html">txn_begin</a>,
-<a href="../api_c/txn_checkpoint.html">txn_checkpoint</a>,
-<a href="../api_c/txn_commit.html">txn_commit</a>,
-<a href="../api_c/txn_id.html">txn_id</a>,
-<a href="../api_c/txn_prepare.html">txn_prepare</a>
-and
-<a href="../api_c/txn_stat.html">txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_c/env_class.html">DB_ENV</a>, <a href="../api_c/txn_class.html">DB_TXN</a>
+<h3>See Also</h3>
+<a href="../api_c/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_c/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/c_index.html b/db/docs/api_cxx/api_index.html
index 107e1c80d..f918538a3 100644
--- a/db/docs/api_cxx/c_index.html
+++ b/db/docs/api_cxx/api_index.html
@@ -1,16 +1,16 @@
-<!--Id: c_index.so,v 10.98 2002/08/24 18:22:34 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: api_index.so,v 10.108 2003/10/18 19:15:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Berkeley DB: C++ Interface</title>
+<title>Berkeley DB: Berkeley DB: C++ API</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: C++ Interface</h1>
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: C++ API</h3>
+<table border=1 align=center>
<tr><th>Section</th><th>Class/Method</th><th>Description</th></tr>
<tr><td><b>Database Environment</b></td><td><a href="../api_cxx/env_class.html">DbEnv</a></td><td>Create an environment handle</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_close.html">DbEnv::close</a></td><td>Close an environment</td></tr>
@@ -22,7 +22,7 @@
<tr><td><br></td><td><a href="../api_cxx/env_remove.html">DbEnv::remove</a></td><td>Remove an environment</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_strerror.html">DbEnv::strerror</a></td><td>Error strings</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_version.html">DbEnv::version</a></td><td>Return version information</td></tr>
-<tr><td><b>Environment Configuration</b></td><td><a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a></td><td>Configure application recovery interface</td></tr>
+<tr><td><b>Environment Configuration</b></td><td><a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a></td><td>Configure application recovery</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a></td><td>Set local space allocation functions</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a></td><td>Set the environment data directory</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
@@ -48,6 +48,7 @@
<tr><td><br></td><td><a href="../api_cxx/db_fd.html">Db::fd</a></td><td>Return a file descriptor from a database</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_get.html">Db::get</a>, <a href="../api_cxx/db_get.html">Db::pget</a></td><td>Get items from a database</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return a handle for the underlying database environment</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_get_type.html">Db::get_type</a></td><td>Return the database type</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_join.html">Db::join</a></td><td>Perform a database join on cursors</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_key_range.html">Db::key_range</a></td><td>Return estimate of key location</td></tr>
@@ -61,7 +62,6 @@
<tr><td><br></td><td><a href="../api_cxx/db_upgrade.html">Db::upgrade</a></td><td>Upgrade a database</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_verify.html">Db::verify</a></td><td>Verify/salvage a database</td></tr>
<tr><td><b>Database Configuration</b></td><td><a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a></td><td>Set local space allocation functions</td></tr>
-<tr><td><br></td><td><a href="../api_cxx/db_set_cache_priority.html">Db::set_cache_priority</a></td><td>Set the database cache priority</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a></td><td>Set the database cache size</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
<tr><td><br></td><td><a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
@@ -95,7 +95,9 @@
<tr><td><br></td><td><a href="../api_cxx/dbc_get.html">Dbc::get</a>, <a href="../api_cxx/dbc_get.html">Dbc::pget</a></td><td>Retrieve by cursor</td></tr>
<tr><td><br></td><td><a href="../api_cxx/dbc_put.html">Dbc::put</a></td><td>Store by cursor</td></tr>
<tr><td><b>Key/Data Pairs</b></td><td><a href="../api_cxx/dbt_class.html">Dbt</a></td><td><br></td></tr>
-<tr><td><b>Bulk Retrieval</b></td><td><a href="../api_cxx/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a></td><td><br></td></tr>
+<tr><td><b>Bulk Retrieval</b></td><td><a href="../api_cxx/dbt_bulk_class.html">DbMultipleDataIterator</a></td><td><br></td></tr>
+<tr><td><br></td><td><a href="../api_cxx/dbt_bulk_class.html">DbMultipleKeyDataIterator</a></td><td><br></td></tr>
+<tr><td><br></td><td><a href="../api_cxx/dbt_bulk_class.html">DbMultipleRecnoDataIterator</a></td><td><br></td></tr>
<tr><td><b>Lock Subsystem</b></td><td><a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
@@ -123,14 +125,15 @@
<tr><td><br></td><td><a href="../api_cxx/logc_get.html">DbLogc::get</a></td><td>Retrieve a log record</td></tr>
<tr><td><b>Log Sequence Numbers</b></td><td><a href="../api_cxx/lsn_class.html">DbLsn</a></td><td><br></td></tr>
<tr><td><br></td><td><a href="../api_cxx/log_compare.html">DbEnv::log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
-<tr><td><b>Memory Pool Subsystem</b></td><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
+<tr><td><b>Memory Pool Subsystem</b></td><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Return the database's memory pool handle</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_register.html">DbEnv::memp_register</a></td><td>Register input/output functions for a file in a memory pool</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a></td><td>Return memory pool statistics</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
<tr><td><b>Memory Pool Files</b></td><td><a href="../api_cxx/mempfile_class.html">DbMpoolFile</a></td><td><b>Memory Pool File class</b></td></tr>
-<tr><td><br></td><td><a href="../api_cxx/memp_fcreate.html">DbEnv::memp_fcreate</a></td><td>Open a file in a memory pool</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/memp_fcreate.html">DbEnv::memp_fcreate</a></td><td>Create a memory pool file handle</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a></td><td>Close a file in a memory pool</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a></td><td>Get page from a file in a memory pool</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a></td><td>Open a file in a memory pool</td></tr>
@@ -139,9 +142,12 @@
<tr><td><br></td><td><a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a></td><td>Flush pages from a file in a memory pool</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_set_clear_len.html">DbMpoolFile::set_clear_len</a></td><td>Set file page bytes to be cleared</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_set_fileid.html">DbMpoolFile::set_fileid</a></td><td>Set file unique identifier</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/memp_set_flags.html">DbMpoolFile::set_flags</a></td><td>General memory pool file configuration</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_set_ftype.html">DbMpoolFile::set_ftype</a></td><td>Set file type</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_set_lsn_offset.html">DbMpoolFile::set_lsn_offset</a></td><td>Set file log-sequence-number offset</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/memp_set_maxsize.html">DbMpoolFile::set_maxsize</a></td><td>Set the maximum file size</td></tr>
<tr><td><br></td><td><a href="../api_cxx/memp_set_pgcookie.html">DbMpoolFile::set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
+<tr><td><br></td><td><a href="../api_cxx/memp_set_priority.html">DbMpoolFile::set_priority</a></td><td>Set the file priority</td></tr>
<tr><td><b>Transaction Subsystem</b></td><td><a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
<tr><td><br></td><td><a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
<tr><td><br></td><td><a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
@@ -167,6 +173,6 @@
<tr><td><br></td><td><a href="../api_cxx/memp_class.html">DbMemoryException</a></td><td><b>Exception Class for insufficient memory</b></td></tr>
<tr><td><br></td><td><a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a></td><td><b>Exception Class for failures requiring recovery</b></td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/cxx_pindex.html b/db/docs/api_cxx/cxx_pindex.html
index d460fcf65..7a46557d0 100644
--- a/db/docs/api_cxx/cxx_pindex.html
+++ b/db/docs/api_cxx/cxx_pindex.html
@@ -1,514 +1,818 @@
<html>
<head>
-<title>Berkeley DB: C++ Interface Index</title>
+<title>Berkeley DB: C++ API Index</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>C++ Interface Index</h1>
+<h1 align=center>C++ API Index</h1>
<center>
<table cellspacing=0 cellpadding=0>
-<tr><td align=right> configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#5">1.85</a> API compatibility</td></tr>
-<tr><td align=right> building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> databases</td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
-<tr><td align=right> selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
-<tr><td align=right> data </td><td><a href="../api_cxx/dbt_class.html#6">alignment</a></td></tr>
-<tr><td align=right> programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_archive.html#3">archive</a> log files</td></tr>
-<tr><td align=right> </td><td><a href="../utility/berkeley_db_svc.html#2">berkeley_db_svc</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/byteorder.html#2">byte</a> ordering</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#6">C++</a> API</td></tr>
-<tr><td align=right> flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-cryptography">--disable-cryptography</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-hash">--disable-hash</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-queue">--disable-queue</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-replication">--disable-replication</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-shared">--disable-shared</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-static">--disable-static</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-verify">--disable-verify</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutex=MUTEX">--with-mutex=MUTEX</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutexalign=ALIGNMENT">--with-mutexalign=ALIGNMENT</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-rpm=ARCHIVE">--with-rpm=ARCHIVE</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
+<tr><td align=right>configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> API compatibility</td></tr>
+<tr><td align=right>building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#9">1.85</a> databases</td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.3/intro.html#2">3.3</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.0/intro.html#2">4.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.1/intro.html#2">4.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/cksum.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/client.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/del.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/intro.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/java.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/lockng.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/nosync.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/priority.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/queue.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/repinit.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/verify.html#2">4.2</a></td></tr>
+<tr><td align=right>selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#2">access</a> method FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/tune.html#2">access</a> method tuning</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
+<tr><td align=right>data </td><td><a href="../ref/am_misc/align.html#2">alignment</a></td></tr>
+<tr><td align=right>programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/archival.html#4">backup</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_bind.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_collection.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/overview.html#2">BDB</a></td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#4">buffer</a> pool subsystem</td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_cxx/memp_fopen.html#3">buffering</a></td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_cxx/env_set_flags.html#5">buffering</a> for database files</td></tr>
+<tr><td align=right>turn off system </td><td><a href="../api_cxx/env_set_flags.html#6">buffering</a> for log files</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#3">building</a> for QNX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/introae.html#2">building</a> for VxWorks AE</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbt_bulk_class.html#2">Bulk</a> Retrieval API</td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#8">C++</a> API</td></tr>
+<tr><td align=right>flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
+<tr><td align=right>introduction to the memory </td><td><a href="../ref/mp/intro.html#3">cache</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
<tr><td align=right>Patches, Updates and </td><td><a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
-<tr><td align=right> utility to take </td><td><a href="../utility/db_checkpoint.html#3">checkpoints</a></td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#clear_len">clear_len</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right> specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
-<tr><td align=right> changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
-<tr><td align=right> </td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> recovering </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
-<tr><td align=right> closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
-<tr><td align=right> deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
-<tr><td align=right> duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
-<tr><td align=right> retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
-<tr><td align=right> storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_cxx/dbt_class.html#data">data</a></td></tr>
-<tr><td align=right> utility to upgrade </td><td><a href="../utility/db_upgrade.html#3">database</a> files</td></tr>
-<tr><td align=right> utility to verify </td><td><a href="../utility/db_verify.html#3">database</a> files</td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_class.html#2">Db</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
-<tr><td align=right>Db::verify</td><td><a href="../api_cxx/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a></td></tr>
-<tr><td align=right>Db::put</td><td><a href="../api_cxx/db_put.html#DB_APPEND">DB_APPEND</a></td></tr>
-<tr><td align=right>DbEnv::log_archive</td><td><a href="../api_cxx/log_archive.html#DB_ARCH_ABS">DB_ARCH_ABS</a></td></tr>
-<tr><td align=right>DbEnv::log_archive</td><td><a href="../api_cxx/log_archive.html#DB_ARCH_DATA">DB_ARCH_DATA</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_archive.html#2">db_archive</a></td></tr>
-<tr><td align=right>DbEnv::log_archive</td><td><a href="../api_cxx/log_archive.html#DB_ARCH_LOG">DB_ARCH_LOG</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_class.html#2">Dbc</a></td></tr>
-<tr><td align=right>Db::stat</td><td><a href="../api_cxx/db_stat.html#DB_CACHED_COUNTS">DB_CACHED_COUNTS</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_close.html#2">Dbc::close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_count.html#2">Dbc::count</a></td></tr>
-<tr><td align=right>DbEnv::set_flags</td><td><a href="../api_cxx/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_del.html#2">Dbc::del</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_dup.html#2">Dbc::dup</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_get.html#2">Dbc::get</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_CHECKPOINT">DB_CHECKPOINT</a></td></tr>
-<tr><td align=right>DbEnv::log_put</td><td><a href="../api_cxx/log_put.html#DB_CHECKPOINT">DB_CHECKPOINT</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_checkpoint.html#2">db_checkpoint</a></td></tr>
-<tr><td align=right>DbEnv</td><td><a href="../api_cxx/dbenv_class.html#DB_CLIENT">DB_CLIENT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_close.html#2">Db::close</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a></td></tr>
-<tr><td align=right>Db::get</td><td><a href="../api_cxx/db_get.html#DB_CONSUME">DB_CONSUME</a></td></tr>
-<tr><td align=right>Db::get</td><td><a href="../api_cxx/db_get.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbc_put.html#2">Dbc::put</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#DB_CREATE">DB_CREATE</a></td></tr>
-<tr><td align=right>DbEnv::log_put</td><td><a href="../api_cxx/log_put.html#DB_CURLSN">DB_CURLSN</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_cursor.html#2">Db::cursor</a></td></tr>
-<tr><td align=right>Db</td><td><a href="../api_cxx/db_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a></td></tr>
-<tr><td align=right>DbEnv</td><td><a href="../api_cxx/dbenv_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_cxx/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_deadlock.html#2">db_deadlock</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_del.html#2">Db::del</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_dump.html#2">db_dump</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_DUP">DB_DUP</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
-<tr><td align=right>Db::upgrade</td><td><a href="../api_cxx/db_upgrade.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbenv_class.html#2">DbEnv</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_close.html#2">DbEnv::close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_err.html#2">DbEnv::err</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_detect.html#2">DbEnv::lock_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_get.html#2">DbEnv::lock_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_id.html#2">DbEnv::lock_id</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_stat.html#2">DbEnv::lock_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_vec.html#2">DbEnv::lock_vec</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_archive.html#2">DbEnv::log_archive</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_compare.html#2">DbEnv::log_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_file.html#2">DbEnv::log_file</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_flush.html#2">DbEnv::log_flush</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_get.html#2">DbEnv::log_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_put.html#2">DbEnv::log_put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_register.html#2">DbEnv::log_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_stat.html#2">DbEnv::log_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/log_unregister.html#2">DbEnv::log_unregister</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_register.html#2">DbEnv::memp_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_stat.html#2">DbEnv::memp_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_sync.html#2">DbEnv::memp_sync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_trickle.html#2">DbEnv::memp_trickle</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_open.html#2">DbEnv::open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_remove.html#2">DbEnv::remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_cachesize.html#2">DbEnv::set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_data_dir.html#2">DbEnv::set_data_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_errcall.html#2">DbEnv::set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_errfile.html#2">DbEnv::set_errfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_error_stream.html#2">DbEnv::set_error_stream</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_errpfx.html#2">DbEnv::set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_feedback.html#2">DbEnv::set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_flags.html#2">DbEnv::set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lg_bsize.html#2">DbEnv::set_lg_bsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lg_dir.html#2">DbEnv::set_lg_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lg_max.html#2">DbEnv::set_lg_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_conflicts.html#2">DbEnv::set_lk_conflicts</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_detect.html#2">DbEnv::set_lk_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_max.html#2">DbEnv::set_lk_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_max_lockers.html#2">DbEnv::set_lk_max_lockers</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_max_locks.html#2">DbEnv::set_lk_max_locks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_lk_max_objects.html#2">DbEnv::set_lk_max_objects</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_mp_mmapsize.html#2">DbEnv::set_mp_mmapsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_mutexlocks.html#2">DbEnv::set_mutexlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_pageyield.html#2">DbEnv::set_pageyield</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_paniccall.html#2">DbEnv::set_paniccall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_panicstate.html#2">DbEnv::set_panicstate</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_rec_init.html#2">DbEnv::set_recovery_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_region_init.html#2">DbEnv::set_region_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_server.html#2">DbEnv::set_server</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_shm_key.html#2">DbEnv::set_shm_key</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_tas_spins.html#2">DbEnv::set_tas_spins</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_tmp_dir.html#2">DbEnv::set_tmp_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_tx_max.html#2">DbEnv::set_tx_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_tx_recover.html#2">DbEnv::set_tx_recover</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_tx_timestamp.html#2">DbEnv::set_tx_timestamp</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_set_verbose.html#2">DbEnv::set_verbose</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_strerror.html#2">DbEnv::strerror</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_begin.html#2">DbEnv::txn_begin</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_checkpoint.html#2">DbEnv::txn_checkpoint</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_stat.html#2">DbEnv::txn_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/env_version.html#2">DbEnv::version</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/except_class.html#2">DbException</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/get_errno.html#2">DbException::get_errno</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/what.html#2">DbException::what</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_fd.html#2">Db::fd</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_FIRST">DB_FIRST</a></td></tr>
-<tr><td align=right>DbEnv::log_put</td><td><a href="../api_cxx/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
-<tr><td align=right>DbEnv::remove</td><td><a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a></td></tr>
-<tr><td align=right>DbEnv::txn_checkpoint</td><td><a href="../api_cxx/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_get.html#2">Db::get</a></td></tr>
-<tr><td align=right>Db::get</td><td><a href="../api_cxx/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_get_byteswapped.html#2">Db::get_byteswapped</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_get_type.html#2">Db::get_type</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
-<tr><td align=right> Db::close </td><td><a href="../api_cxx/db_close.html#3">DB_INCOMPLETE</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_join.html#2">Db::join</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
-<tr><td align=right>Db::join</td><td><a href="../api_cxx/db_join.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>Db::join</td><td><a href="../api_cxx/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_key_range.html#2">Db::key_range</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_LAST">DB_LAST</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_load.html#2">db_load</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_class.html#2">DbLock</a></td></tr>
-<tr><td align=right>DbEnv::lock_detect</td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_CONFLICT">DB_LOCK_CONFLICT</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
-<tr><td align=right>DbEnv::set_lk_detect</td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_GET">DB_LOCK_GET</a></td></tr>
-<tr><td align=right>DbEnv::lock_get</td><td><a href="../api_cxx/lock_get.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>DbEnv::lock_get</td><td><a href="../api_cxx/lock_get.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
-<tr><td align=right>DbEnv::set_lk_detect</td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lock_put.html#2">DbLock::put</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT">DB_LOCK_PUT</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a></td></tr>
-<tr><td align=right>DbEnv::set_lk_detect</td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
-<tr><td align=right>DbEnv::set_lk_detect</td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/lsn_class.html#2">DbLsn</a></td></tr>
-<tr><td align=right>DbMpoolFile::put</td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
-<tr><td align=right>DbMpoolFile::set</td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
-<tr><td align=right>DbMpoolFile::get</td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a></td></tr>
-<tr><td align=right>DbMpoolFile::put</td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
-<tr><td align=right>DbMpoolFile::set</td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
-<tr><td align=right>DbMpoolFile::put</td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
-<tr><td align=right>DbMpoolFile::set</td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/mempfile_class.html#2">DbMpoolFile</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fclose.html#2">DbMpoolFile::close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fget.html#2">DbMpoolFile::get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fopen.html#2">DbMpoolFile::open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fput.html#2">DbMpoolFile::put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fset.html#2">DbMpoolFile::set</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/memp_fsync.html#2">DbMpoolFile::sync</a></td></tr>
-<tr><td align=right>DbMpoolFile::get</td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_LAST">DB_MPOOL_LAST</a></td></tr>
-<tr><td align=right>DbMpoolFile::get</td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_NEXT">DB_NEXT</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a></td></tr>
-<tr><td align=right>Db::put</td><td><a href="../api_cxx/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
-<tr><td align=right>Dbc::put</td><td><a href="../api_cxx/dbc_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>DbEnv::set_flags</td><td><a href="../api_cxx/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
-<tr><td align=right>Db::verify</td><td><a href="../api_cxx/db_verify.html#DB_NOORDERCHK">DB_NOORDERCHK</a></td></tr>
-<tr><td align=right>Db::put</td><td><a href="../api_cxx/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a></td></tr>
-<tr><td align=right>DbEnv::set_server</td><td><a href="../api_cxx/env_set_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
-<tr><td align=right>DbEnv::set_server</td><td><a href="../api_cxx/env_set_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
-<tr><td align=right>Db::close</td><td><a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
-<tr><td align=right>Db::upgrade</td><td><a href="../api_cxx/db_upgrade.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_open.html#2">Db::open</a></td></tr>
-<tr><td align=right>Db::verify</td><td><a href="../api_cxx/db_verify.html#DB_ORDERCHKONLY">DB_ORDERCHKONLY</a></td></tr>
-<tr><td align=right>Dbc::dup</td><td><a href="../api_cxx/dbc_dup.html#DB_POSITION">DB_POSITION</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_PREV">DB_PREV</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_PREV">DB_PREV</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_printlog.html#2">db_printlog</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_PRIVATE">DB_PRIVATE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_put.html#2">Db::put</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a></td></tr>
-<tr><td align=right>Db::stat</td><td><a href="../api_cxx/db_stat.html#DB_RECORDCOUNT">DB_RECORDCOUNT</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_RECOVER">DB_RECOVER</a></td></tr>
-<tr><td align=right>DbEnv::set_feedback</td><td><a href="../api_cxx/env_set_feedback.html#DB_RECOVER">DB_RECOVER</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_recover.html#2">db_recover</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_remove.html#2">Db::remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_rename.html#2">Db::rename</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
-<tr><td align=right>Db::get</td><td><a href="../api_cxx/db_get.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>Db::join</td><td><a href="../api_cxx/db_join.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_RMW">DB_RMW</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
-<tr><td align=right>Db::verify</td><td><a href="../api_cxx/db_verify.html#DB_SALVAGE">DB_SALVAGE</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_SET">DB_SET</a></td></tr>
-<tr><td align=right>DbEnv::log_get</td><td><a href="../api_cxx/log_get.html#DB_SET">DB_SET</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_append_recno.html#2">Db::set_append_recno</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_bt_compare.html#2">Db::set_bt_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_bt_minkey.html#2">Db::set_bt_minkey</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_bt_prefix.html#2">Db::set_bt_prefix</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_cachesize.html#2">Db::set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_dup_compare.html#2">Db::set_dup_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_errcall.html#2">Db::set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_errfile.html#2">Db::set_errfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_errpfx.html#2">Db::set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_feedback.html#2">Db::set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_flags.html#2">Db::set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_h_ffactor.html#2">Db::set_h_ffactor</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_h_hash.html#2">Db::set_h_hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_h_nelem.html#2">Db::set_h_nelem</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_lorder.html#2">Db::set_lorder</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_malloc.html#2">Db::set_malloc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_pagesize.html#2">Db::set_pagesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_paniccall.html#2">Db::set_paniccall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_q_extentsize.html#2">Db::set_q_extentsize</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_realloc.html#2">Db::set_realloc</a></td></tr>
-<tr><td align=right>Db::get</td><td><a href="../api_cxx/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
-<tr><td align=right>Dbc::get</td><td><a href="../api_cxx/dbc_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_re_delim.html#2">Db::set_re_delim</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_re_len.html#2">Db::set_re_len</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_re_pad.html#2">Db::set_re_pad</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_set_re_source.html#2">Db::set_re_source</a></td></tr>
-<tr><td align=right>Db::set_flags</td><td><a href="../api_cxx/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_stat.html#2">Db::stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_stat.html#2">db_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_sync.html#2">Db::sync</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbt_class.html#2">Dbt</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_THREAD">DB_THREAD</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a></td></tr>
-<tr><td align=right>Db::open</td><td><a href="../api_cxx/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_class.html#2">DbTxn</a></td></tr>
-<tr><td align=right>DbEnv::set_tx_recover</td><td><a href="../api_cxx/env_set_tx_recover.html#DB_TXN_ABORT">DB_TXN_ABORT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_abort.html#2">DbTxn::abort</a></td></tr>
-<tr><td align=right>DbEnv::set_tx_recover</td><td><a href="../api_cxx/env_set_tx_recover.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_commit.html#2">DbTxn::commit</a></td></tr>
-<tr><td align=right>DbEnv::set_tx_recover</td><td><a href="../api_cxx/env_set_tx_recover.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_id.html#2">DbTxn::id</a></td></tr>
-<tr><td align=right>DbEnv::set_flags</td><td><a href="../api_cxx/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbEnv::txn_begin</td><td><a href="../api_cxx/txn_begin.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbTxn::commit</td><td><a href="../api_cxx/txn_commit.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbEnv::txn_begin</td><td><a href="../api_cxx/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/txn_prepare.html#2">DbTxn::prepare</a></td></tr>
-<tr><td align=right>DbEnv::txn_begin</td><td><a href="../api_cxx/txn_begin.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>DbTxn::commit</td><td><a href="../api_cxx/txn_commit.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>Db::set_feedback</td><td><a href="../api_cxx/db_set_feedback.html#DB_UPGRADE">DB_UPGRADE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_upgrade.html#2">Db::upgrade</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_upgrade.html#2">db_upgrade</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DbEnv::remove</td><td><a href="../api_cxx/env_remove.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DbEnv::open</td><td><a href="../api_cxx/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DbEnv::remove</td><td><a href="../api_cxx/env_remove.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DbEnv::set_verbose</td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a></td></tr>
-<tr><td align=right>DbEnv::set_verbose</td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a></td></tr>
-<tr><td align=right>DbEnv::set_verbose</td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_RECOVERY">DB_VERB_RECOVERY</a></td></tr>
-<tr><td align=right>DbEnv::set_verbose</td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a></td></tr>
-<tr><td align=right>Db::set_feedback</td><td><a href="../api_cxx/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/db_verify.html#2">Db::verify</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_verify.html#2">db_verify</a></td></tr>
-<tr><td align=right>Db::cursor</td><td><a href="../api_cxx/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a></td></tr>
-<tr><td align=right>Db</td><td><a href="../api_cxx/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
-<tr><td align=right> utility to detect </td><td><a href="../utility/db_deadlock.html#3">deadlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--disable-bigfile">--disable-bigfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/diskspace.html#2">disk</a> space requirements</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_dump.html#3">dump</a> databases as text files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#9">dynamic</a> shared libraries</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dynamic">--enable-dynamic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-shared">--enable-shared</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
-<tr><td align=right> byte </td><td><a href="../ref/program/byteorder.html#3">endian</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/error.html#2">error</a> handling</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
-<tr><td align=right> selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
-<tr><td align=right> Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#fileid">fileid</a></td></tr>
-<tr><td align=right> recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
-<tr><td align=right> remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
-<tr><td align=right> page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#ftype">ftype</a></td></tr>
-<tr><td align=right> specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am/join.html#2">join</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_cxx/dbt_class.html#3">key/data</a> pairs</td></tr>
-<tr><td align=right> retrieved </td><td><a href="../api_cxx/dbt_class.html#5">key/data</a> permanence</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/program/dbsizes.html#2">limits</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
-<tr><td align=right> changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_load.html#3">load</a> text files into databases</td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#lock">lock</a></td></tr>
-<tr><td align=right> standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right> page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
-<tr><td align=right> two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/intro.html#2">locking</a> introduction</td></tr>
-<tr><td align=right> sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
-<tr><td align=right> utility to display </td><td><a href="../utility/db_printlog.html#3">log</a> files as text</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/intro.html#2">logging</a> introduction</td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#lsn_offset">lsn_offset</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#mode">mode</a></td></tr>
-<tr><td align=right> Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
-<tr><td align=right> file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
-<tr><td align=right> retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#obj">obj</a></td></tr>
-<tr><td align=right>DbEnv::lock_vec</td><td><a href="../api_cxx/lock_vec.html#op">op</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/partial.html#2">partial</a> record storage and retrieval</td></tr>
+<tr><td align=right>database page </td><td><a href="../api_cxx/db_set_flags.html#4">checksum</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/faq.html#3">compaction</a></td></tr>
+<tr><td align=right>specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
+<tr><td align=right>changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
+<tr><td align=right></td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
+<tr><td align=right>database environment </td><td><a href="../ref/env/db_config.html#3">configuration</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right>salvaging </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
+<tr><td align=right>closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
+<tr><td align=right>deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
+<tr><td align=right>duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
+<tr><td align=right>retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
+<tr><td align=right>storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#2">cursor</a> stability</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_class.html#2">Db</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_associate.html#2">Db::associate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_close.html#2">Db::close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_cursor.html#2">Db::cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_del.html#2">Db::del</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_err.html#2">Db::err</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_err.html#3">Db::errx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_fd.html#2">Db::fd</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_get.html#2">Db::get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_getenv.html#2">Db::getenv</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_bt_minkey.html#3">Db::get_bt_minkey</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_get_byteswapped.html#2">Db::get_byteswapped</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_cachesize.html#3">Db::get_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_open.html#4">Db::get_database</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_encrypt.html#3">Db::get_encrypt_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_errfile.html#3">Db::get_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_errpfx.html#3">Db::get_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_open.html#3">Db::get_file</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_flags.html#3">Db::get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_h_ffactor.html#3">Db::get_h_ffactor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_h_nelem.html#3">Db::get_h_nelem</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_lorder.html#3">Db::get_lorder</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_get_mpf.html#2">Db::get_mpf</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_open.html#5">Db::get_open_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_pagesize.html#3">Db::get_pagesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_q_extentsize.html#3">Db::get_q_extentsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_delim.html#3">Db::get_re_delim</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_len.html#3">Db::get_re_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_pad.html#3">Db::get_re_pad</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_source.html#3">Db::get_re_source</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_open.html#6">Db::get_transactional</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_get_type.html#2">Db::get_type</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_join.html#2">Db::join</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_key_range.html#2">Db::key_range</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_open.html#2">Db::open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_get.html#3">Db::pget</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_put.html#2">Db::put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_remove.html#2">Db::remove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_rename.html#2">Db::rename</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_alloc.html#2">Db::set_alloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_append_recno.html#2">Db::set_append_recno</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_bt_compare.html#2">Db::set_bt_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_bt_minkey.html#2">Db::set_bt_minkey</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_bt_prefix.html#2">Db::set_bt_prefix</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_cachesize.html#2">Db::set_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_dup_compare.html#2">Db::set_dup_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_encrypt.html#2">Db::set_encrypt</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_errcall.html#2">Db::set_errcall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_errfile.html#2">Db::set_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_error_stream.html#2">Db::set_error_stream</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_errpfx.html#2">Db::set_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_feedback.html#2">Db::set_feedback</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_flags.html#2">Db::set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_h_ffactor.html#2">Db::set_h_ffactor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_h_hash.html#2">Db::set_h_hash</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_h_nelem.html#2">Db::set_h_nelem</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_lorder.html#2">Db::set_lorder</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_pagesize.html#2">Db::set_pagesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_paniccall.html#2">Db::set_paniccall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_q_extentsize.html#2">Db::set_q_extentsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_delim.html#2">Db::set_re_delim</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_len.html#2">Db::set_re_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_pad.html#2">Db::set_re_pad</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_re_source.html#2">Db::set_re_source</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_stat.html#2">Db::stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_sync.html#2">Db::sync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_truncate.html#2">Db::truncate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_upgrade.html#2">Db::upgrade</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_verify.html#2">Db::verify</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_class.html#2">Dbc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_close.html#2">Dbc::close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_count.html#2">Dbc::count</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_del.html#2">Dbc::del</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_dup.html#2">Dbc::dup</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_get.html#2">Dbc::get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_get.html#3">Dbc::pget</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbc_put.html#2">Dbc::put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/deadlock_class.html#2">DbDeadlockException</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_class.html#2">DbEnv</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_close.html#2">DbEnv::close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_dbremove.html#2">DbEnv::dbremove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_dbrename.html#2">DbEnv::dbrename</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_err.html#2">DbEnv::err</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_err.html#3">DbEnv::errx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_cachesize.html#3">DbEnv::get_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_cachesize.html#4">DbEnv::get_cachesize_nocache</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_data_dir.html#3">DbEnv::get_data_dirs</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_encrypt.html#3">DbEnv::get_encrypt_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_errfile.html#3">DbEnv::get_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_errpfx.html#3">DbEnv::get_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_flags.html#3">DbEnv::get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_open.html#3">DbEnv::get_home</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_bsize.html#3">DbEnv::get_lg_bsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_dir.html#3">DbEnv::get_lg_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_max.html#3">DbEnv::get_lg_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_regionmax.html#3">DbEnv::get_lg_regionmax</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_conflicts.html#3">DbEnv::get_lk_conflicts</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_detect.html#3">DbEnv::get_lk_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_lockers.html#3">DbEnv::get_lk_max_lockers</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_locks.html#3">DbEnv::get_lk_max_locks</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_objects.html#3">DbEnv::get_lk_max_objects</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_mp_mmapsize.html#3">DbEnv::get_mp_mmapsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_open.html#4">DbEnv::get_open_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_limit.html#3">DbEnv::get_rep_limit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_shm_key.html#3">DbEnv::get_shm_key</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tas_spins.html#3">DbEnv::get_tas_spins</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_timeout.html#3">DbEnv::get_timeout</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tmp_dir.html#4">DbEnv::get_tmp_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tx_max.html#3">DbEnv::get_tx_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tx_timestamp.html#3">DbEnv::get_tx_timestamp</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_verbose.html#3">DbEnv::get_verbose</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_detect.html#2">DbEnv::lock_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_get.html#2">DbEnv::lock_get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_id.html#2">DbEnv::lock_id</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_id_free.html#2">DbEnv::lock_id_free</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_put.html#2">DbEnv::lock_put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_stat.html#2">DbEnv::lock_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_vec.html#2">DbEnv::lock_vec</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_archive.html#2">DbEnv::log_archive</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_compare.html#2">DbEnv::log_compare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_cursor.html#2">DbEnv::log_cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_file.html#2">DbEnv::log_file</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_flush.html#2">DbEnv::log_flush</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_put.html#2">DbEnv::log_put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/log_stat.html#2">DbEnv::log_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fcreate.html#2">DbEnv::memp_fcreate</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_register.html#2">DbEnv::memp_register</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_stat.html#2">DbEnv::memp_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_sync.html#2">DbEnv::memp_sync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_trickle.html#2">DbEnv::memp_trickle</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_open.html#2">DbEnv::open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_remove.html#2">DbEnv::remove</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_elect.html#2">DbEnv::rep_elect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_message.html#2">DbEnv::rep_process_message</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_start.html#2">DbEnv::rep_start</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_stat.html#2">DbEnv::rep_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_alloc.html#2">DbEnv::set_alloc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_app_dispatch.html#2">DbEnv::set_app_dispatch</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_cachesize.html#2">DbEnv::set_cachesize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_data_dir.html#2">DbEnv::set_data_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_encrypt.html#2">DbEnv::set_encrypt</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_errcall.html#2">DbEnv::set_errcall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_errfile.html#2">DbEnv::set_errfile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_error_stream.html#2">DbEnv::set_error_stream</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_errpfx.html#2">DbEnv::set_errpfx</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_feedback.html#2">DbEnv::set_feedback</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_flags.html#2">DbEnv::set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_bsize.html#2">DbEnv::set_lg_bsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_dir.html#2">DbEnv::set_lg_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_max.html#2">DbEnv::set_lg_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lg_regionmax.html#2">DbEnv::set_lg_regionmax</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_conflicts.html#2">DbEnv::set_lk_conflicts</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_detect.html#2">DbEnv::set_lk_detect</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_lockers.html#2">DbEnv::set_lk_max_lockers</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_locks.html#2">DbEnv::set_lk_max_locks</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_lk_max_objects.html#2">DbEnv::set_lk_max_objects</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_mp_mmapsize.html#2">DbEnv::set_mp_mmapsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_paniccall.html#2">DbEnv::set_paniccall</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_limit.html#2">DbEnv::set_rep_limit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_transport.html#2">DbEnv::set_rep_transport</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_rpc_server.html#2">DbEnv::set_rpc_server</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_shm_key.html#2">DbEnv::set_shm_key</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tas_spins.html#2">DbEnv::set_tas_spins</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_timeout.html#2">DbEnv::set_timeout</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tmp_dir.html#2">DbEnv::set_tmp_dir</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tx_max.html#2">DbEnv::set_tx_max</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tx_timestamp.html#2">DbEnv::set_tx_timestamp</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_verbose.html#2">DbEnv::set_verbose</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_strerror.html#2">DbEnv::strerror</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_begin.html#2">DbEnv::txn_begin</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_checkpoint.html#2">DbEnv::txn_checkpoint</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_recover.html#2">DbEnv::txn_recover</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_stat.html#2">DbEnv::txn_stat</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_version.html#2">DbEnv::version</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_version.html#3">DbEnv::version</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/except_class.html#2">DbException</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/except_class.html#3">DbException::get_env</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/except_class.html#4">DbException::get_errno</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/except_class.html#5">DbException::what</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lock_class.html#2">DbLock</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lockng_class.html#2">DbLockNotGrantedException</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/logc_class.html#2">DbLogc</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/logc_close.html#2">DbLogc::close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/logc_get.html#2">DbLogc::get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/lsn_class.html#2">DbLsn</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_class.html#2">DbMemoryException</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/mempfile_class.html#2">DbMpoolFile</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fclose.html#2">DbMpoolFile::close</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fget.html#2">DbMpoolFile::get</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_clear_len.html#3">DbMpoolFile::get_clear_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_fileid.html#3">DbMpoolFile::get_fileid</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_flags.html#3">DbMpoolFile::get_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_ftype.html#3">DbMpoolFile::get_ftype</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_lsn_offset.html#3">DbMpoolFile::get_lsn_offset</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_maxsize.html#3">DbMpoolFile::get_maxsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_pgcookie.html#3">DbMpoolFile::get_pgcookie</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_priority.html#3">DbMpoolFile::get_priority</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fopen.html#2">DbMpoolFile::open</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fput.html#2">DbMpoolFile::put</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fset.html#2">DbMpoolFile::set</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_clear_len.html#2">DbMpoolFile::set_clear_len</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_fileid.html#2">DbMpoolFile::set_fileid</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_flags.html#2">DbMpoolFile::set_flags</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_ftype.html#2">DbMpoolFile::set_ftype</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_lsn_offset.html#2">DbMpoolFile::set_lsn_offset</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_maxsize.html#2">DbMpoolFile::set_maxsize</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_pgcookie.html#2">DbMpoolFile::set_pgcookie</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_set_priority.html#2">DbMpoolFile::set_priority</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fsync.html#2">DbMpoolFile::sync</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/runrec_class.html#2">DbRunRecoveryException</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbt_class.html#2">Dbt</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_class.html#2">DbTxn</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_abort.html#2">DbTxn::abort</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_commit.html#2">DbTxn::commit</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_discard.html#2">DbTxn::discard</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_id.html#2">DbTxn::id</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_prepare.html#2">DbTxn::prepare</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_set_timeout.html#2">DbTxn::set_timeout</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_AFTER">DB_AFTER</a></td></tr>
+<tr><td align=right>Db::verify </td><td><a href="../api_cxx/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a></td></tr>
+<tr><td align=right>Db::put </td><td><a href="../api_cxx/db_put.html#DB_APPEND">DB_APPEND</a></td></tr>
+<tr><td align=right>DbEnv::log_archive </td><td><a href="../api_cxx/log_archive.html#DB_ARCH_ABS">DB_ARCH_ABS</a></td></tr>
+<tr><td align=right>DbEnv::log_archive </td><td><a href="../api_cxx/log_archive.html#DB_ARCH_DATA">DB_ARCH_DATA</a></td></tr>
+<tr><td align=right>DbEnv::log_archive </td><td><a href="../api_cxx/log_archive.html#DB_ARCH_LOG">DB_ARCH_LOG</a></td></tr>
+<tr><td align=right>DbEnv::log_archive </td><td><a href="../api_cxx/log_archive.html#DB_ARCH_REMOVE">DB_ARCH_REMOVE</a></td></tr>
+<tr><td align=right>Db::associate </td><td><a href="../api_cxx/db_associate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Db::del </td><td><a href="../api_cxx/db_del.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Db::put </td><td><a href="../api_cxx/db_put.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Db::truncate </td><td><a href="../api_cxx/db_truncate.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DbEnv::dbremove </td><td><a href="../api_cxx/env_dbremove.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DbEnv::dbrename </td><td><a href="../api_cxx/env_dbrename.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_BEFORE">DB_BEFORE</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_BTREE">DB_BTREE</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_CHKSUM">DB_CHKSUM</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/env/db_config.html#2">DB_CONFIG</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_CONSUME">DB_CONSUME</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</a></td></tr>
+<tr><td align=right>Db::associate </td><td><a href="../api_cxx/db_associate.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td><a href="../api_cxx/memp_fopen.html#DB_CREATE">DB_CREATE</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_CURRENT">DB_CURRENT</a></td></tr>
+<tr><td align=right>Db </td><td><a href="../api_cxx/db_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a></td></tr>
+<tr><td align=right>DbEnv </td><td><a href="../api_cxx/env_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_associate.html#3">DB_DBT_APPMALLOC</a></td></tr>
+<tr><td align=right>Dbt </td><td><a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a></td></tr>
+<tr><td align=right>Dbt </td><td><a href="../api_cxx/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a></td></tr>
+<tr><td align=right>Dbt </td><td><a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a></td></tr>
+<tr><td align=right>Dbt </td><td><a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td><a href="../api_cxx/memp_fopen.html#DB_DIRECT">DB_DIRECT</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_DIRECT_DB">DB_DIRECT_DB</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_DIRECT_LOG">DB_DIRECT_LOG</a></td></tr>
+<tr><td align=right>Db::cursor </td><td><a href="../api_cxx/db_cursor.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>Db::join </td><td><a href="../api_cxx/db_join.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td><a href="../api_cxx/txn_begin.html#DB_DIRTY_READ">DB_DIRTY_READ</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_associate.html#4">DB_DONOTINDEX</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_DUP">DB_DUP</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
+<tr><td align=right>Db::upgrade </td><td><a href="../api_cxx/db_upgrade.html#DB_DUPSORT">DB_DUPSORT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_transport.html#3">DB_EID_BROADCAST</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_ENCRYPT">DB_ENCRYPT</a></td></tr>
+<tr><td align=right>Db::set_encrypt </td><td><a href="../api_cxx/db_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right>DbEnv::set_encrypt </td><td><a href="../api_cxx/env_set_encrypt.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_EXCL">DB_EXCL</a></td></tr>
+<tr><td align=right>Db::stat </td><td><a href="../api_cxx/db_stat.html#DB_FAST_STAT">DB_FAST_STAT</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DbEnv::txn_recover </td><td><a href="../api_cxx/txn_recover.html#DB_FIRST">DB_FIRST</a></td></tr>
+<tr><td align=right>DbEnv::log_put </td><td><a href="../api_cxx/log_put.html#DB_FLUSH">DB_FLUSH</a></td></tr>
+<tr><td align=right>DbEnv::remove </td><td><a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>DbEnv::txn_checkpoint </td><td><a href="../api_cxx/txn_checkpoint.html#DB_FORCE">DB_FORCE</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_GET_BOTH">DB_GET_BOTH</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_HASH">DB_HASH</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_REP">DB_INIT_REP</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_JOINENV">DB_JOINENV</a></td></tr>
+<tr><td align=right>Db::join </td><td><a href="../api_cxx/db_join.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_JOIN_ITEM">DB_JOIN_ITEM</a></td></tr>
+<tr><td align=right>Db::join </td><td><a href="../api_cxx/db_join.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEXIST">DB_KEYEXIST</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_LAST">DB_LAST</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_LAST">DB_LAST</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#4">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_GET">DB_LOCK_GET</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_GET_TIMEOUT">DB_LOCK_GET_TIMEOUT</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_IREAD">DB_LOCK_IREAD</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_IWR">DB_LOCK_IWR</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_IWRITE">DB_LOCK_IWRITE</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
+<tr><td align=right>DbEnv::lock_get </td><td><a href="../api_cxx/lock_get.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT">DB_LOCK_PUT</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_READ">DB_LOCK_READ</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_TIMEOUT">DB_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#DB_LOCK_WRITE">DB_LOCK_WRITE</a></td></tr>
+<tr><td align=right>DbEnv::set_lk_detect </td><td><a href="../api_cxx/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
+<tr><td align=right>DbEnv::lock_detect </td><td><a href="../api_cxx/lock_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a></td></tr>
+<tr><td align=right>DbMpoolFile::put </td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
+<tr><td align=right>DbMpoolFile::set </td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a></td></tr>
+<tr><td align=right>DbMpoolFile::get </td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a></td></tr>
+<tr><td align=right>DbMpoolFile::put </td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DbMpoolFile::set </td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a></td></tr>
+<tr><td align=right>DbMpoolFile::put </td><td><a href="../api_cxx/memp_fput.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
+<tr><td align=right>DbMpoolFile::set </td><td><a href="../api_cxx/memp_fset.html#DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a></td></tr>
+<tr><td align=right>DbMpoolFile::get </td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_LAST">DB_MPOOL_LAST</a></td></tr>
+<tr><td align=right>DbMpoolFile::get </td><td><a href="../api_cxx/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_flags </td><td><a href="../api_cxx/memp_set_flags.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>DbEnv::txn_recover </td><td><a href="../api_cxx/txn_recover.html#DB_NEXT">DB_NEXT</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a></td></tr>
+<tr><td align=right>Db::put </td><td><a href="../api_cxx/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
+<tr><td align=right>Dbc::put </td><td><a href="../api_cxx/dbc_put.html#DB_NODUPDATA">DB_NODUPDATA</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_NOLOCKING">DB_NOLOCKING</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td><a href="../api_cxx/memp_fopen.html#DB_NOMMAP">DB_NOMMAP</a></td></tr>
+<tr><td align=right>Db::verify </td><td><a href="../api_cxx/db_verify.html#DB_NOORDERCHK">DB_NOORDERCHK</a></td></tr>
+<tr><td align=right>Db::put </td><td><a href="../api_cxx/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_rpc_server.html#3">DB_NOSERVER</a></td></tr>
+<tr><td align=right>DbEnv::set_rpc_server </td><td><a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
+<tr><td align=right>DbEnv::set_rpc_server </td><td><a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_rpc_server.html#4">DB_NOSERVER_ID</a></td></tr>
+<tr><td align=right>DbEnv::set_rpc_server </td><td><a href="../api_cxx/env_set_rpc_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
+<tr><td align=right>Db::close </td><td><a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td><a href="../api_cxx/memp_fopen.html#DB_ODDFILESIZE">DB_ODDFILESIZE</a></td></tr>
+<tr><td align=right>Db::upgrade </td><td><a href="../api_cxx/db_upgrade.html#DB_OLD_VERSION">DB_OLD_VERSION</a></td></tr>
+<tr><td align=right>Db::verify </td><td><a href="../api_cxx/db_verify.html#DB_ORDERCHKONLY">DB_ORDERCHKONLY</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_OVERWRITE">DB_OVERWRITE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/memp_fget.html#3">DB_PAGE_NOTFOUND</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a></td></tr>
+<tr><td align=right>Dbc::dup </td><td><a href="../api_cxx/dbc_dup.html#DB_POSITION">DB_POSITION</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_PREV">DB_PREV</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_PREV">DB_PREV</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a></td></tr>
+<tr><td align=right>Db::verify </td><td><a href="../api_cxx/db_verify.html#DB_PRINTABLE">DB_PRINTABLE</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_priority </td><td><a href="../api_cxx/memp_set_priority.html#DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_priority </td><td><a href="../api_cxx/memp_set_priority.html#DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_priority </td><td><a href="../api_cxx/memp_set_priority.html#DB_PRIORITY_LOW">DB_PRIORITY_LOW</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_priority </td><td><a href="../api_cxx/memp_set_priority.html#DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a></td></tr>
+<tr><td align=right>DbMpoolFile::set_priority </td><td><a href="../api_cxx/memp_set_priority.html#DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_PRIVATE">DB_PRIVATE</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_QUEUE">DB_QUEUE</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>DbMpoolFile::open </td><td><a href="../api_cxx/memp_fopen.html#DB_RDONLY">DB_RDONLY</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_RECNO">DB_RECNO</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_RECOVER">DB_RECOVER</a></td></tr>
+<tr><td align=right>DbEnv::set_feedback </td><td><a href="../api_cxx/env_set_feedback.html#DB_RECOVER">DB_RECOVER</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a></td></tr>
+<tr><td align=right>DbEnv::rep_start </td><td><a href="../api_cxx/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a></td></tr>
+<tr><td align=right>DbEnv::rep_start </td><td><a href="../api_cxx/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a></td></tr>
+<tr><td align=right>DbEnv::rep_start </td><td><a href="../api_cxx/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_NEWSITE">DB_REP_NEWSITE</a></td></tr>
+<tr><td align=right>DbEnv::set_rep_transport </td><td><a href="../api_cxx/rep_transport.html#DB_REP_NOBUFFER">DB_REP_NOBUFFER</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a></td></tr>
+<tr><td align=right>DbEnv::rep_process_message </td><td><a href="../api_cxx/rep_message.html#DB_REP_OUTDATED">DB_REP_OUTDATED</a></td></tr>
+<tr><td align=right>DbEnv::set_rep_transport </td><td><a href="../api_cxx/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/rep_elect.html#3">DB_REP_UNAVAIL</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>Db::join </td><td><a href="../api_cxx/db_join.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_RMW">DB_RMW</a></td></tr>
+<tr><td align=right>DbEnv </td><td><a href="../api_cxx/env_class.html#DB_RPCCLIENT">DB_RPCCLIENT</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
+<tr><td align=right>Db::verify </td><td><a href="../api_cxx/db_verify.html#DB_SALVAGE">DB_SALVAGE</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_SET">DB_SET</a></td></tr>
+<tr><td align=right>DbLogc::get </td><td><a href="../api_cxx/logc_get.html#DB_SET">DB_SET</a></td></tr>
+<tr><td align=right>DbEnv::set_timeout </td><td><a href="../api_cxx/env_set_timeout.html#DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>DbTxn::set_timeout </td><td><a href="../api_cxx/txn_set_timeout.html#DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a></td></tr>
+<tr><td align=right>Db::get </td><td><a href="../api_cxx/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
+<tr><td align=right>Dbc::get </td><td><a href="../api_cxx/dbc_get.html#DB_SET_RECNO">DB_SET_RECNO</a></td></tr>
+<tr><td align=right>DbEnv::set_timeout </td><td><a href="../api_cxx/env_set_timeout.html#DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a></td></tr>
+<tr><td align=right>DbTxn::set_timeout </td><td><a href="../api_cxx/txn_set_timeout.html#DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a></td></tr>
+<tr><td align=right>DbEnv::lock_stat </td><td><a href="../api_cxx/lock_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::log_stat </td><td><a href="../api_cxx/log_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::memp_stat </td><td><a href="../api_cxx/memp_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::rep_stat </td><td><a href="../api_cxx/rep_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::txn_stat </td><td><a href="../api_cxx/txn_stat.html#DB_STAT_CLEAR">DB_STAT_CLEAR</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_THREAD">DB_THREAD</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a></td></tr>
+<tr><td align=right>DbEnv::set_app_dispatch </td><td><a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_ABORT">DB_TXN_ABORT</a></td></tr>
+<tr><td align=right>DbEnv::set_app_dispatch </td><td><a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a></td></tr>
+<tr><td align=right>DbEnv::set_app_dispatch </td><td><a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a></td></tr>
+<tr><td align=right>DbEnv::set_app_dispatch </td><td><a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td><a href="../api_cxx/txn_begin.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>DbTxn::commit </td><td><a href="../api_cxx/txn_commit.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a></td></tr>
+<tr><td align=right>Db::set_flags </td><td><a href="../api_cxx/db_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td><a href="../api_cxx/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a></td></tr>
+<tr><td align=right>DbEnv::set_app_dispatch </td><td><a href="../api_cxx/env_set_app_dispatch.html#DB_TXN_PRINT">DB_TXN_PRINT</a></td></tr>
+<tr><td align=right>DbEnv::txn_begin </td><td><a href="../api_cxx/txn_begin.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
+<tr><td align=right>DbTxn::commit </td><td><a href="../api_cxx/txn_commit.html#DB_TXN_SYNC">DB_TXN_SYNC</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a></td></tr>
+<tr><td align=right>Db::open </td><td><a href="../api_cxx/db_open.html#DB_UNKNOWN">DB_UNKNOWN</a></td></tr>
+<tr><td align=right>Db::set_feedback </td><td><a href="../api_cxx/db_set_feedback.html#DB_UPGRADE">DB_UPGRADE</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
+<tr><td align=right>DbEnv::remove </td><td><a href="../api_cxx/env_remove.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a></td></tr>
+<tr><td align=right>DbEnv::open </td><td><a href="../api_cxx/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
+<tr><td align=right>DbEnv::remove </td><td><a href="../api_cxx/env_remove.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a></td></tr>
+<tr><td align=right>DbEnv::set_verbose </td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a></td></tr>
+<tr><td align=right>DbEnv::set_verbose </td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a></td></tr>
+<tr><td align=right>DbEnv::set_verbose </td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_RECOVERY">DB_VERB_RECOVERY</a></td></tr>
+<tr><td align=right>DbEnv::set_verbose </td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_REPLICATION">DB_VERB_REPLICATION</a></td></tr>
+<tr><td align=right>DbEnv::set_verbose </td><td><a href="../api_cxx/env_set_verbose.html#DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a></td></tr>
+<tr><td align=right>Db::set_feedback </td><td><a href="../api_cxx/db_set_feedback.html#DB_VERIFY">DB_VERIFY</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_verify.html#3">DB_VERIFY_BAD</a></td></tr>
+<tr><td align=right>Db::cursor </td><td><a href="../api_cxx/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a></td></tr>
+<tr><td align=right>Db </td><td><a href="../api_cxx/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/txn_prepare.html#3">DB_XIDDATASIZE</a></td></tr>
+<tr><td align=right>DbEnv::set_flags </td><td><a href="../api_cxx/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/debug/intro.html#2">debugging</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#4">degrees</a> of isolation</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#4">dirty</a> reads</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/diskspace.html#2">disk</a> space requirements</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#2">Distributed</a> Transactions</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#5">double</a> buffering</td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_flags.html#7">duplicate</a> data items</td></tr>
+<tr><td align=right>sorted </td><td><a href="../api_cxx/db_set_flags.html#8">duplicate</a> data items</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
+<tr><td align=right>turn off database </td><td><a href="../api_cxx/db_set_flags.html#6">durability</a></td></tr>
+<tr><td align=right>turn off </td><td><a href="../api_cxx/env_set_flags.html#14">durability</a> in the database environment</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#3">emptying</a> a database</td></tr>
+<tr><td align=right>database </td><td><a href="../api_cxx/db_set_flags.html#5">encryption</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/env/encrypt.html#2">encryption</a></td></tr>
+<tr><td align=right>turn off access to a database </td><td><a href="../api_cxx/env_set_flags.html#11">environment</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
+<tr><td align=right>use </td><td><a href="../api_cxx/env_open.html#5">environment</a> constants in naming</td></tr>
+<tr><td align=right>use </td><td><a href="../api_cxx/env_remove.html#3">environment</a> constants in naming</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/faq.html#2">environment</a> FAQ</td></tr>
+<tr><td align=right>fault database </td><td><a href="../api_cxx/env_set_flags.html#12">environment</a> in during open</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
+<tr><td align=right>introduction to database </td><td><a href="../ref/env/intro.html#2">environments</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#2">equality</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/error.html#2">error</a> handling</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
+<tr><td align=right>selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/hotfail.html#2">failover</a></td></tr>
+<tr><td align=right>Java API </td><td><a href="../ref/bdb/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
+<tr><td align=right>returning pages to the </td><td><a href="../ref/am_misc/faq.html#4">filesystem</a></td></tr>
+<tr><td align=right>recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
+<tr><td align=right>remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
+<tr><td align=right>page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
+<tr><td align=right>configuring a small memory </td><td><a href="../ref/build_unix/conf.html#12">footprint</a> library</td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
+<tr><td align=right>specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
+<tr><td align=right>secondary </td><td><a href="../ref/am/second.html#3">indices</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
+<tr><td align=right>degrees of </td><td><a href="../ref/am_misc/stability.html#5">isolation</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/faq.html#3">Java</a> API FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
+<tr><td align=right>equality </td><td><a href="../ref/am/join.html#3">join</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/dbt_class.html#3">key/data</a> pairs</td></tr>
+<tr><td align=right>retrieved </td><td><a href="../ref/am_misc/perm.html#3">key/data</a> permanence</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/dbsizes.html#2">limits</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
+<tr><td align=right>changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#lock">lock</a></td></tr>
+<tr><td align=right>standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
+<tr><td align=right>ignore </td><td><a href="../api_cxx/env_set_flags.html#8">locking</a></td></tr>
+<tr><td align=right>page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
+<tr><td align=right>two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
+<tr><td align=right>Berkeley DB Transactional Data Store </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right>Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right>configure </td><td><a href="../api_cxx/env_set_flags.html#4">locking</a> for Berkeley DB Concurrent Data Store</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/page.html#3">locking</a> granularity</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/lock/intro.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right>sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
+<tr><td align=right>automatic </td><td><a href="../api_cxx/env_set_flags.html#7">log</a> file removal</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/log/intro.html#2">logging</a> subsystem</td></tr>
+<tr><td align=right>retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#3">logical</a> record @number</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/macosx.html#2">Mac</a> OS X</td></tr>
+<tr><td align=right>turn off database file </td><td><a href="../api_cxx/env_set_flags.html#9">memory</a> mapping</td></tr>
+<tr><td align=right></td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#2">memory</a> pool subsystem</td></tr>
+<tr><td align=right>configuring for </td><td><a href="../ref/build_win/faq.html#4">MinGW</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#mode">mode</a></td></tr>
+<tr><td align=right>Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
+<tr><td align=right>file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#4">natural</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/remote.html#3">NFS</a> problems</td></tr>
+<tr><td align=right>retrieving Btree records by logical record </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#obj">obj</a></td></tr>
+<tr><td align=right>DbEnv::lock_vec </td><td><a href="../api_cxx/lock_vec.html#op">op</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
+<tr><td align=right>ignore database environment </td><td><a href="../api_cxx/env_set_flags.html#10">panic</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/partial.html#2">partial</a> record storage and retrieval</td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
-<tr><td align=right> </td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
-<tr><td align=right> retrieved key/data </td><td><a href="../api_cxx/dbt_class.html#4">permanence</a></td></tr>
-<tr><td align=right>DbMpoolFile::open</td><td><a href="../api_cxx/memp_fopen.html#pgcookie">pgcookie</a></td></tr>
-<tr><td align=right> Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right> logical </td><td><a href="../api_cxx/dbt_class.html#7">record</a> number format</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
-<tr><td align=right> managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
-<tr><td align=right> logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_recover.html#3">recover</a> database environments</td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
-<tr><td align=right> configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
-<tr><td align=right> utility to support </td><td><a href="../utility/berkeley_db_svc.html#3">RPC</a> client/server</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
-<tr><td align=right> Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/env/security.html#2">security</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/sendmail/intro.html#2">Sendmail</a></td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#8">shared</a> libraries</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
-<tr><td align=right> application </td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
+<tr><td align=right></td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
+<tr><td align=right>retrieved key/data </td><td><a href="../ref/am_misc/perm.html#2">permanence</a></td></tr>
+<tr><td align=right>task/thread </td><td><a href="../ref/program/faq.html#2">priority</a></td></tr>
+<tr><td align=right>Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#5">QNX</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
+<tr><td align=right>dirty </td><td><a href="../ref/transapp/read.html#3">reads</a></td></tr>
+<tr><td align=right>accessing Btree records by </td><td><a href="../api_cxx/db_set_flags.html#9">record</a> number</td></tr>
+<tr><td align=right>logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
+<tr><td align=right>managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
+<tr><td align=right>logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/db_set_flags.html#12">renumbering</a> records in Recno databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#2">repeatable</a> read</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rep/intro.html#2">replication</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/xa_intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/get_bulk.html#2">retrieving</a> records in bulk</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
+<tr><td align=right>turn off </td><td><a href="../api_cxx/db_set_flags.html#10">reverse</a> splits in Btree databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
+<tr><td align=right>configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rpc/intro.html#2">rpc</a> client/server</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/faq.html#2">RPC</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/rpm.html#2">RPM</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
+<tr><td align=right>Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/second.html#2">secondary</a> indices</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/security.html#2">security</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#5">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
-<tr><td align=right> cursor </td><td><a href="../ref/am/stability.html#3">stability</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
-<tr><td align=right> utility to display database and environment </td><td><a href="../utility/db_stat.html#3">statistics</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
-<tr><td align=right> loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
-<tr><td align=right> using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#12">Tcl</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#13">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
-<tr><td align=right> loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
-<tr><td align=right> dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
-<tr><td align=right> building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
-<tr><td align=right> administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
-<tr><td align=right> Berkeley DB and </td><td><a href="../ref/txn/intro.html#2">transactions</a></td></tr>
-<tr><td align=right> nested </td><td><a href="../ref/txn/nested.html#2">transactions</a></td></tr>
-<tr><td align=right> configuring Berkeley DB with the </td><td><a href="../ref/xa/config.html#2">Tuxedo</a> System</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
-<tr><td align=right> configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
+<tr><td align=right>turn off reverse </td><td><a href="../api_cxx/db_set_flags.html#11">splits</a> in Btree databases</td></tr>
+<tr><td align=right>cursor </td><td><a href="../ref/am_misc/stability.html#3">stability</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#6">static</a> libraries</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
+<tr><td align=right>configure for </td><td><a href="../api_cxx/env_set_flags.html#16">stress</a> testing</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
+<tr><td align=right>loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
+<tr><td align=right>using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#13">Tcl</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../api_cxx/env_set_tmp_dir.html#3">temporary</a> files</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#14">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
+<tr><td align=right>pre-loading </td><td><a href="../api_cxx/db_set_flags.html#13">text</a> files into Recno databases</td></tr>
+<tr><td align=right>loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
+<tr><td align=right>dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
+<tr><td align=right>building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
+<tr><td align=right>lock </td><td><a href="../ref/lock/timeout.html#2">timeouts</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/lock/timeout.html#3">timeouts</a></td></tr>
+<tr><td align=right>turn off synchronous </td><td><a href="../api_cxx/env_set_flags.html#13">transaction</a> commit</td></tr>
+<tr><td align=right>turn off synchronous </td><td><a href="../api_cxx/env_set_flags.html#15">transaction</a> commit</td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/faq.html#2">transaction</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/build.html#2">Transaction</a> Manager</td></tr>
+<tr><td align=right>administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/txn/intro.html#2">transaction</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/tune.html#2">transaction</a> tuning</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
+<tr><td align=right>nested </td><td><a href="../ref/transapp/nested.html#2">transactions</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#2">truncating</a> a database</td></tr>
+<tr><td align=right>access method </td><td><a href="../ref/am_misc/tune.html#3">tuning</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/transapp/tune.html#3">tuning</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/catalog.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/env.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/except.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/keyvalue.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/main.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/stores.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/transact.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/write.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/bindings.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/classes.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/foreign.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/second.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/binding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/class.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/remove.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/extract.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/format.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/sorted.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tsbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/summary.html#2">tutorial</a></td></tr>
+<tr><td align=right>simple </td><td><a href="../ref/simple_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right>configuring Berkeley DB with the </td><td><a href="../ref/xa/xa_config.html#2">Tuxedo</a> System</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#4">UNIX</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
+<tr><td align=right>configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
<tr><td align=right>Patches, </td><td><a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_upgrade.html#4">upgrade</a> database files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_verify.html#4">verify</a> database files</td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
-<tr><td align=right> running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/xa/intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
+<tr><td align=right>running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/faq.html#3">XA</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/xa_intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/region.html#2">__db.001</a></td></tr>
</table>
</center>
<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
diff --git a/db/docs/api_cxx/db_associate.html b/db/docs/api_cxx/db_associate.html
index 2d17da91c..64b560b21 100644
--- a/db/docs/api_cxx/db_associate.html
+++ b/db/docs/api_cxx/db_associate.html
@@ -1,31 +1,35 @@
-<!--Id: db_associate.so,v 10.9 2001/05/05 01:49:09 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_associate.so,v 10.36 2003/11/08 19:17:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::associate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>Db::associate</h1>
+<h3>Db::associate</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-DB::associate(Db *secondary,
- int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
- u_int32_t flags);
+int
+Db::associate(DbTxn *txnid, Db *secondary,
+ int (*callback)(Db *, const Dbt *, const Dbt *, Dbt *),
+ u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::associate</h3>
<p>The Db::associate function is used to declare one database a
secondary index for a primary database. After a secondary database has
been "associated" with a primary database, all updates to the primary
@@ -34,125 +38,121 @@ secondary will return corresponding data from the primary. Note that
as primary keys must be unique for secondary indices to work, the
primary database must be configured without support for duplicate data
items. See <a href="../ref/am/second.html">Secondary indices</a> for
-more information.
-<p>The associate method called should be a method off a database handle for
-the primary database that is to be indexed.
-The <b>secondary</b> argument should be an open database handle of
-either a newly created and empty database that is to be used to store
-a secondary index, or of a database that was previously associated with
-the same primary and contains a secondary index. Note that it is not
-safe to associate as a secondary database a handle that is in use by
-another thread of control or has open cursors. If the handle was opened
-with the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag it is safe to use it in multiple threads
-of control after the Db::associate method has returned. Note also
-that either secondary keys must be unique or the secondary database must
-be configured with support for duplicate data items.
-<p>The <b>callback</b> argument should refer to a callback function that
-creates a secondary key from a given primary key and data pair. When
-called, the first argument will be the secondary <a href="../api_cxx/db_class.html">Db</a> handle; the
-second and third arguments will be <a href="../api_cxx/dbt_class.html">Dbt</a>s containing a primary
-key and datum respectively; and the fourth argument will be a zeroed
-DBT in which the callback function should fill in <b>data</b> and
-<b>size</b> fields that describe the secondary key.
+more information.</p>
+<p>The Db::associate method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>callback</b><dd>
+The <b>callback</b> parameter is a callback function that creates a
+secondary key from a given primary key and data pair.
+<p>The callback parameter may be NULL if both the primary and secondary
+database handles were opened with the <a href="../api_cxx/db_open.html#DB_RDONLY">DB_RDONLY</a> flag.</p>
+<p>The callback takes four arguments:</p>
+<p><dl compact>
+<p><dt><b>secondary</b><dd>The <b>secondary</b> parameter is the database handle for the secondary.
+<p><dt><b>key</b><dd>The <b>key</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> referencing the primary key.
+<p><dt><b>data</b><dd>The <b>data</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> referencing the primary data
+item.
+<p><dt><b>result</b><dd>The <b>result</b> parameter is a zeroed <a href="../api_cxx/dbt_class.html">Dbt</a> in which the callback
+function should fill in <b>data</b> and <b>size</b> fields that describe
+the secondary key.
+</dl>
+<a name="3"><!--meow--></a>
<p>If the callback function needs to allocate memory for the <b>data</b>
field rather than simply pointing into the primary key or datum, the
<b>flags</b> field of the returned <a href="../api_cxx/dbt_class.html">Dbt</a> should be set to
DB_DBT_APPMALLOC, which indicates that Berkeley DB should free the
-memory when it is done with it.
+memory when it is done with it.</p>
+<a name="4"><!--meow--></a>
<p>If any key/data pair in the primary yields a null secondary key and
should be left out of the secondary index, the callback function may
optionally return DB_DONOTINDEX. Otherwise, the callback
-function should return 0 in case of success or any other integer error
-code in case of failure; the error code will be returned from the Berkeley DB
-interface call that initiated the callback. Note that if the callback
-function returns DB_DONOTINDEX for any key/data pairs in the
-primary database, the secondary index will not contain any reference to
-those key/data pairs, and such operations as cursor iterations and range
-queries will reflect only the corresponding subset of the database. If
-this is not desirable, the application should ensure that the callback
-function is well-defined for all possible values and never returns
-DB_DONOTINDEX.
-<p>The callback argument may be NULL if and only if both the primary and
-secondary database handles were opened with the <a href="../api_cxx/db_open.html#DB_RDONLY">DB_RDONLY</a> flag.
-<p>The <b>flags</b> value must be set to 0 or
+function should return 0 in case of success or an error outside of the
+Berkeley DB name space in case of failure; the error code will be returned
+from the Berkeley DB call that initiated the callback.</p>
+<p>If the callback function returns DB_DONOTINDEX for any key/data
+pairs in the primary database, the secondary index will not contain any
+reference to those key/data pairs, and such operations as cursor
+iterations and range queries will reflect only the corresponding subset
+of the database. If this is not desirable, the application should
+ensure that the callback function is well-defined for all possible
+values and never returns DB_DONOTINDEX.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>If the secondary database is empty, walk through the primary and create
-an index to it in the empty secondary. Note that this operation is
-potentially very expensive.
+an index to it in the empty secondary. This operation is potentially
+very expensive.
<p>If the secondary database has been opened in an environment configured
with transactions, each put necessary for its creation will be done in
-the context of a transaction created for the purpose.
-<p>Note that care should be taken not to use a newly-created secondary
-database in another thread of control until the Db::associate
-call has returned successfully in the first thread.
+the context of a transaction created for the purpose.</p>
+<p>Care should be taken not to use a newly-populated secondary database in
+another thread of control until the Db::associate call has
+returned successfully in the first thread.</p>
+<p>If transactions are not being used, care should be taken not to modify
+a primary database being used to populate a secondary database, in
+another thread of control, until the Db::associate call has
+returned successfully in the first thread. If transactions are being
+used, Berkeley DB will perform appropriate locking and the application need
+not do any special operation ordering.</p>
+</dl>
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::associate call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
</dl>
-<h1>Errors</h1>
-<p>The Db::associate method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>primary</b><dd>
+The associate method called should be a method off a database handle for
+the primary database that is to be indexed.
+<p><dt><b>secondary</b><dd>
+The <b>secondary</b> parameter should be an open database handle of
+either a newly created and empty database that is to be used to store
+a secondary index, or of a database that was previously associated with
+the same primary and contains a secondary index. Note that it is not
+safe to associate as a secondary database a handle that is in use by
+another thread of control or has open cursors. If the handle was opened
+with the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag it is safe to use it in multiple threads
+of control after the Db::associate method has returned. Note also
+that either secondary keys must be unique or the secondary database must
+be configured with support for duplicate data items.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The Db::associate method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The secondary database handle has already been associated with this or
-another database handle.
-<p>The secondary database handle is not open.
-<p>The primary database has been configured to allow duplicates.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The Db::associate method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::associate method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the secondary database handle has already been associated with this or
+another database handle; the secondary database handle is not open; the
+primary database has been configured to allow duplicates; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>, <a href="../api_cxx/db_err.html">Db::errx</a>
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>,
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_class.html b/db/docs/api_cxx/db_class.html
index 75296aeee..5f8d256e5 100644
--- a/db/docs/api_cxx/db_class.html
+++ b/db/docs/api_cxx/db_class.html
@@ -1,20 +1,22 @@
-<!--$Id: db_class.so,v 10.23 2000/03/17 01:54:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_class.so,v 10.47 2003/11/08 19:17:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db</h1>
+<h3>Db</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,31 +27,70 @@ class Db {
public:
Db(DbEnv *dbenv, u_int32_t flags);
~Db();
+<p>
+ DB *Db::get_DB();
+ const DB *Db::get_const_DB() const;
+ static Db *Db::get_Db(DB *db);
+ static const Db *Db::get_const_Db(const DB *db);
...
};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Db class,
-which is the center of access method activity.
-<p>If no <b>dbenv</b> value is specified, the database is standalone, i.e.,
-it is not part of any Berkeley DB environment.
-<p>If a <b>dbenv</b> value is specified, the database is created within the
-specified Berkeley DB environment. The database access methods automatically
-make calls to the other subsystems in Berkeley DB based on the enclosing
-environment. For example, if the environment has been configured to use
-locking, then the access methods will automatically acquire the correct
-locks when reading and writing pages of the database.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: Db</h3>
+<p>The Db handle is the handle for a Berkeley DB database, which may or
+may not be part of a database environment.</p>
+<p>Db handles are free-threaded if the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag is
+specified to the <a href="../api_cxx/db_open.html">Db::open</a> method when the database is opened or if the
+database environment in which the database is opened is free-threaded.
+The handle should not be closed while any other handle that refers to
+the database is in use; for example, database handles must not be closed
+while cursor handles into the database remain open, or transactions that
+include operations on the database have not yet been committed or
+aborted. Once the <a href="../api_cxx/db_close.html">Db::close</a>, <a href="../api_cxx/db_remove.html">Db::remove</a>, or
+<a href="../api_cxx/db_rename.html">Db::rename</a> methods are called, the handle may not be accessed again,
+regardless of the method's return.</p>
+<p>The constructor creates a Db object that is the handle for a
+Berkeley DB database. The constructor allocates memory internally; calling
+the <a href="../api_cxx/db_close.html">Db::close</a>, <a href="../api_cxx/db_remove.html">Db::remove</a> or <a href="../api_cxx/db_rename.html">Db::rename</a> methods will
+free that memory.</p>
+<p>Each Db object has an associated DB struct, which is
+used by the underlying implementation of Berkeley DB and its C-language API.
+The Db::get_DB method returns a pointer to this struct. Given a const
+Db object, Db::get_const_DB returns a const pointer to the
+same struct.</p>
+<p>Given a DB struct, the Db::get_Db method returns the
+corresponding Db object, if there is one. If the DB
+object was not associated with a Db (that is, it was not
+returned from a call to Db::get_DB), then the result of Db::get_Db is
+undefined. Given a const DB struct, Db::get_const_Db returns
+the associated const Db object, if there is one.</p>
+<p>These methods may be useful for Berkeley DB applications including both C
+and C++ language software. It should not be necessary to use these
+calls in a purely C++ application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>
+If no <b>dbenv</b> value is specified, the database is standalone; that
+is, it is not part of any Berkeley DB environment.
+<p>If a <b>dbenv</b> value is specified, the database is created within
+the specified Berkeley DB environment. The database access methods
+automatically make calls to the other subsystems in Berkeley DB based on the
+enclosing environment. For example, if the environment has been
+configured to use locking, the access methods will automatically acquire
+the correct locks when reading and writing pages of the database.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a><dd>The Berkeley DB C++ API supports two different error behaviors. By default,
-whenever an error occurs an exception is thrown that encapsulates the
+whenever an error occurs, an exception is thrown that encapsulates the
error information. This generally allows for cleaner logic for
-transaction processing, as a try block can surround a single transaction.
-However, if DB_CXX_NO_EXCEPTIONS is specified, exceptions are not
-thrown, instead each individual function returns an error code.
-<p>If <b>dbenv</b> is not null, this flag is ignored and the error behavior
-of the specified environment is used instead.
+transaction processing because a try block can surround a single
+transaction. However, if DB_CXX_NO_EXCEPTIONS is specified,
+exceptions are not thrown; instead, each individual function returns an
+error code.
+<p>If <b>dbenv</b> is not null, this flag is ignored, and the error behavior
+of the specified environment is used instead.</p>
<p><dt><a name="DB_XA_CREATE">DB_XA_CREATE</a><dd>Instead of creating a standalone database, create a database intended to
be accessed via applications running under a X/Open conformant Transaction
Manager. The database will be opened in the environment specified by the
@@ -57,53 +98,16 @@ OPENINFO parameter of the GROUPS section of the ubbconfig file. See the
<a href="../ref/xa/intro.html">XA Resource Manager</a> chapter in the
Reference Guide for more information.
</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+Db
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_close.html b/db/docs/api_cxx/db_close.html
index fdde15bdb..6671977ca 100644
--- a/db/docs/api_cxx/db_close.html
+++ b/db/docs/api_cxx/db_close.html
@@ -1,20 +1,22 @@
-<!--$Id: db_close.so,v 10.27 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_close.so,v 10.54 2003/11/08 19:17:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::close</h1>
+<h3>Db::close</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,100 +26,74 @@
int
Db::close(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::close</h3>
<p>The Db::close method flushes any cached database information to disk,
closes any open cursors, frees any allocated resources, and closes any
-underlying files. Since key/data pairs are cached in memory, failing to
-sync the file with the Db::close or <a href="../api_cxx/db_sync.html">Db::sync</a> method may result
-in inconsistent or lost information.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
+underlying files.</p>
+<p>The <a href="../api_cxx/db_class.html">Db</a> handle should not be closed while any other handle that
+refers to it is not yet closed; for example, database handles must not
+be closed while cursor handles into the database remain open, or
+transactions that include operations on the database have not yet been
+committed or aborted. Specifically, this includes <a href="../api_cxx/dbc_class.html">Dbc</a> and
+<a href="../api_cxx/txn_class.html">DbTxn</a> handles.</p>
+<p>Because key/data pairs are cached in memory, failing to sync the file
+with the Db::close or <a href="../api_cxx/db_sync.html">Db::sync</a> method may result in
+inconsistent or lost information.</p>
+<p>When called on a database that is the primary database for a secondary
+index, the primary database should be closed only after all secondary
+indices which reference it have been closed.</p>
+<p>When multiple threads are using the <a href="../api_cxx/db_class.html">Db</a> concurrently, only a single
+thread may call the Db::close method.</p>
+<p>The <a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again after Db::close is
+called, regardless of its return.</p>
+<p>The Db::close method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_NOSYNC">DB_NOSYNC</a><dd>Do not flush cached information to disk.
-<p>The <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag is a dangerous option. It should only be set
-if the application is doing logging (with transactions) so that the
-database is recoverable after a system or application crash, or if the
-database is always generated from scratch after any system or application
-crash.
+<p><dt><a name="DB_NOSYNC">DB_NOSYNC</a><dd>Do not flush cached information to disk. The <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag is
+a dangerous option. It should be set only if the application is doing
+logging (with transactions) so that the database is recoverable after
+a system or application crash, or if the database is always generated
+from scratch after any system or application crash.
<p><b>It is important to understand that flushing cached information to disk
-only minimizes the window of opportunity for corrupted data.</b>
-While unlikely, it is possible for database corruption to happen if a
-system or application crash occurs while writing data to the database.
-To ensure that database corruption never occurs, applications must either:
-use transactions and logging with automatic recovery, use logging and
-application-specific recovery, or edit a copy of the database,
-and, once all applications using the database have successfully called
+only minimizes the window of opportunity for corrupted data.</b> Although
+unlikely, it is possible for database corruption to happen if a system
+or application crash occurs while writing data to the database. To
+ensure that database corruption never occurs, applications must either:
+use transactions and logging with automatic recovery; use logging and
+application-specific recovery; or edit a copy of the database, and once
+all applications using the database have successfully called
Db::close, atomically replace the original database with the
-updated copy.
+updated copy.</p>
+</dl>
</dl>
-<p>When multiple threads are using the Berkeley DB handle concurrently, only a single
-thread may call the Db::close method.
-<p>Once Db::close has been called, regardless of its return, the
-<a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again.
- <a name="3"><!--meow--></a>
-<p>The Db::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-Db::close method was called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, the <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a> option should probably
-have been specified.)
-<p>The Db::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::close method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<h3>Errors</h3>
+<p>The Db::close method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_cursor.html b/db/docs/api_cxx/db_cursor.html
index b6954b9f3..24439ce59 100644
--- a/db/docs/api_cxx/db_cursor.html
+++ b/db/docs/api_cxx/db_cursor.html
@@ -1,20 +1,22 @@
-<!--$Id: db_cursor.so,v 10.25 2000/07/11 19:11:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_cursor.so,v 10.44 2003/11/08 19:17:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::cursor</h1>
+<h3>Db::cursor</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,82 +26,61 @@
int
Db::cursor(DbTxn *txnid, Dbc **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::cursor</h3>
+The Db::cursor method returns a created database cursor.
<p>The Db::cursor method
-creates a cursor and copies a pointer to it into the memory referenced
-by <b>cursorp</b>.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, otherwise, NULL.
-<p>If transaction protection is enabled, cursors must be opened and closed
-within the context of a transaction, and the <b>txnid</b> parameter
-specifies the transaction context in which the cursor may be used.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cursorp</b><dd>
+The <b>cursorp</b> parameter references memory into which
+a pointer to the allocated cursor is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_WRITECURSOR">DB_WRITECURSOR</a><dd>Specify that the cursor will be used to update the database. This
-flag should <b>only</b> be set when the <a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag
-was specified to <a href="../api_cxx/env_open.html">DbEnv::open</a>.
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>All read operations performed by the cursor may return modified but not
+yet committed data. Silently ignored if the <a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag
+was not specified when the underlying database was opened.
+<p><dt><a name="DB_WRITECURSOR">DB_WRITECURSOR</a><dd>Specify that the cursor will be used to update the database. The
+underlying database environment must have been opened using the
+<a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag.
</dl>
-<p>The Db::cursor method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::cursor method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL. To transaction-protect cursor operations, cursors must be opened and
+closed within the context of a transaction, and the <b>txnid</b>
+parameter specifies the transaction context in which the cursor may be
+used.
+</dl>
+<h3>Errors</h3>
+<p>The Db::cursor method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The Db::cursor method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::cursor method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<a href="../api_cxx/dbc_class.html">Dbc</a>
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_del.html b/db/docs/api_cxx/db_del.html
index ec30c6ad0..63a1733d9 100644
--- a/db/docs/api_cxx/db_del.html
+++ b/db/docs/api_cxx/db_del.html
@@ -1,20 +1,22 @@
-<!--$Id: db_del.so,v 10.23 2000/09/05 19:35:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 10.44 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::del</h1>
+<h3>Db::del</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,81 +26,80 @@
int
Db::del(DbTxn *txnid, Dbt *key, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::del</h3>
<p>The Db::del method removes key/data pairs from the database. The
key/data pair associated with the specified <b>key</b> is discarded from
the database. In the presence of duplicate key values, all records
-associated with the designated key will be discarded.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The Db::del method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified <b>key</b> did not exist in
-the file.
-<h1>Errors</h1>
-<p>The Db::del method may fail and throw an exception or return a non-zero error for the following conditions:
+associated with the designated key will be discarded.</p>
+<p>When called on a database that has been made into a secondary index
+using the <a href="../api_cxx/db_associate.html">Db::associate</a> method, the Db::del method deletes the
+key/data pair from the primary database and all secondary indices.</p>
+<p>
+The Db::del method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified key is not in the database.
+The Db::del method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the database is a Queue or Recno database and
+the specified key exists, but was never explicitly created by the
+application or was later deleted.
+Unless otherwise specified, the Db::del method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::del call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+</dl>
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The Db::del method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::del method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::del method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::del method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::del method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_err.html b/db/docs/api_cxx/db_err.html
index fa0bccc39..86f1b6f33 100644
--- a/db/docs/api_cxx/db_err.html
+++ b/db/docs/api_cxx/db_err.html
@@ -1,94 +1,90 @@
-<!--$Id: db_err.so,v 10.11 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_err.so,v 1.3 2002/08/18 21:15:48 bostic Exp $-->
+<!--$Id: env_err.so,v 10.30 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbEnv::err</title>
+<title>Berkeley DB: Db::err</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::err</h1>
+<h3>Db::err</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-DbEnv::err(int error, const char *fmt, ...);
-<p>
-DbEnv::errx(const char *fmt, ...);
-<p>
Db::err(int error, const char *fmt, ...);
<p>
Db::errx(const char *fmt, ...);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::err, DbEnv::errx, Db::err and
-Db::errx methods provide error messaging functionality for
-applications written using the Berkeley DB library.
-<p>The DbEnv::err method constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
-<p><dt>An optional prefix string<dd>If no error callback method has been set using the
+<hr size=1 noshade>
+<h3>Description: Db::err</h3>
+<a name="3"><!--meow--></a>
+<p>The <a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a>, Db::err and
+Db::errx methods provide error-messaging functionality for
+applications written using the Berkeley DB library.</p>
+<p>The <a href="../api_cxx/env_err.html">DbEnv::err</a> method constructs an error message consisting of the
+following elements:</p>
+<blockquote><p><dl compact>
+<p><dt>An optional prefix string<dd>If no error callback function has been set using the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method, any prefix string specified using the
<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a> method, followed by two separating characters: a colon
and a &lt;space&gt; character.
-<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, where the ANSI C X3.159-1989 (ANSI C)
-printf function specifies how subsequent arguments are converted for
-output.
+<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, in which the
+ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent parameters
+are converted for output.
<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
<b>error</b> value, as returned by the <a href="../api_cxx/env_strerror.html">DbEnv::strerror</a> method.
</dl>
</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback method has been set (see <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>
-and <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>), that method is called with two
-arguments: any prefix string specified (see <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> and
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), and the error message.
+<p>This constructed error message is then handled as follows:</p>
+<blockquote><p>If an error callback function has been set (see <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>
+and <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>), that function is called with two
+parameters: any prefix string specified (see <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> and
+<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>) and the error message.</p>
<p>If a C library FILE * has been set (see <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a> and
<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>), the error message is written to that output
-stream.
+stream.</p>
<p>If a C++ ostream has been set
-(see <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>), the error message is written to that
-stream.
+(see <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> and <a href="../api_cxx/db_set_error_stream.html">Db::set_error_stream</a>),
+the error message is written to that stream.</p>
<p>If none of these output options has been configured, the error message
-is written to stderr, the standard error output stream.</blockquote>
-<p>The DbEnv::errx and Db::errx methods perform identically to the
-DbEnv::err and Db::err methods except that they do not append
+is written to stderr, the standard
+error output stream.</p></blockquote>
+<p>The <a href="../api_cxx/env_err.html">DbEnv::errx</a> and Db::errx methods perform identically to the
+<a href="../api_cxx/env_err.html">DbEnv::err</a> and Db::err methods, except that they do not append
the final separator characters and standard error string to the error
-message.
+message.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error value for which the
+<a href="../api_cxx/env_err.html">DbEnv::err</a> and Db::err methods will display a explanatory
+string.
+<p><dt><b>fmt</b><dd>
+The <b>fmt</b> parameter is an optional printf-style message to display.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_fd.html b/db/docs/api_cxx/db_fd.html
index 1cb98fb6b..2c80a7b31 100644
--- a/db/docs/api_cxx/db_fd.html
+++ b/db/docs/api_cxx/db_fd.html
@@ -1,20 +1,22 @@
-<!--$Id: db_fd.so,v 10.21 2000/03/01 21:41:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_fd.so,v 10.30 2003/10/31 15:17:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::fd</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::fd</h1>
+<h3>Db::fd</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,72 +26,38 @@
int
Db::fd(int *fdp);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::fd method
-copies a file descriptor representative of the underlying database into
-the memory referenced by <b>fdp</b>. A file descriptor referencing the
-same file will be returned to all processes that call <a href="../api_cxx/db_open.html">Db::open</a> with
-the same <b>file</b> argument. This file descriptor may be safely used
-as an argument to the <b>fcntl</b>(2) and <b>flock</b>(2) locking
-functions. The file descriptor is not necessarily associated with any of
-the underlying files actually used by the access method.
+<hr size=1 noshade>
+<h3>Description: Db::fd</h3>
+<p>The Db::fd method provides access to a file descriptor representative
+of the underlying database. A file descriptor referring to the same
+file will be returned to all processes that call <a href="../api_cxx/db_open.html">Db::open</a> with
+the same <b>file</b> parameter.</p>
+<p>This file descriptor may be safely used as a parameter to the
+<b>fcntl</b>(2) and <b>flock</b>(2) locking functions. The file
+descriptor is not necessarily associated with any of the underlying
+files actually used by the access method.</p>
<p>The Db::fd method only supports a coarse-grained form of locking.
-Applications should use the lock manager where possible.
-<p>The Db::fd method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::fd method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::fd method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+Applications should instead use the Berkeley DB lock manager where possible.</p>
+<p>The Db::fd method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>fdp</b><dd>
+The <b>fdp</b> parameter references memory into which
+ the current file descriptor is copied.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_get.html b/db/docs/api_cxx/db_get.html
index 0cee5526b..a7ed44b58 100644
--- a/db/docs/api_cxx/db_get.html
+++ b/db/docs/api_cxx/db_get.html
@@ -1,20 +1,22 @@
-<!--$Id: db_get.so,v 10.31 2000/11/28 20:12:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 10.79 2003/12/03 15:11:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::get</h1>
+<h3>Db::get</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,136 +25,189 @@
<p>
int
Db::get(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags);
+<p>
+int
+Db::pget(DbTxn *txnid, Dbt *key, Dbt *pkey, Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::get</h3>
+<a name="3"><!--meow--></a>
<p>The Db::get method retrieves key/data pairs from the database. The
address
and length of the data associated with the specified <b>key</b> are
-returned in the structure referenced by <b>data</b>.
+returned in the structure to which <b>data</b> refers.</p>
<p>In the presence of duplicate key values, Db::get will return the
first data item for the designated key. Duplicates are sorted by insert
-order except where this order has been overridden by cursor operations.
+order, except where this order has been overridden by cursor operations.
<b>Retrieval of duplicates requires the use of cursor operations.</b>
-See <a href="../api_cxx/dbc_get.html">Dbc::get</a> for details.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+See <a href="../api_cxx/dbc_get.html">Dbc::get</a> for details.</p>
+<p>When called on a database that has been made into a secondary index
+using the <a href="../api_cxx/db_associate.html">Db::associate</a> method, the Db::get
+and Db::pget methods return
+the key from the secondary index and the data item from the primary
+database. In addition, the
+Db::pget method
+returns the key from the primary database. In databases that are not
+secondary indices, the
+Db::pget method
+will always fail.</p>
+<p>
+The Db::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the specified key is not in the database.
+The Db::get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the database is a Queue or Recno database and
+the specified key exists, but was never explicitly created by the
+application or was later deleted.
+Unless otherwise specified, the Db::get method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_CONSUME">DB_CONSUME</a><dd>Return the record number and data from the available record closest to
-the head of the queue and delete the record. The cursor will be
+the head of the queue, and delete the record. The cursor will be
positioned on the deleted record. The record number will be returned
-in <b>key</b> as described in <a href="../api_cxx/dbt_class.html">Dbt</a>. The data will be returned
+in <b>key</b>, as described in <a href="../api_cxx/dbt_class.html">Dbt</a>. The data will be returned
in the <b>data</b> parameter. A record is available if it is not
deleted and is not currently locked. The underlying database must be
of type Queue for DB_CONSUME to be specified.
<p><dt><a name="DB_CONSUME_WAIT">DB_CONSUME_WAIT</a><dd>The DB_CONSUME_WAIT flag is the same as the DB_CONSUME
-flag except that if the Queue database is empty, the thread of control
+flag, except that if the Queue database is empty, the thread of control
will wait until there is data in the queue before returning. The
underlying database must be of type Queue for DB_CONSUME_WAIT
to be specified.
+<p>If lock or transaction timeouts have been specified, the Db::get method
+with the DB_CONSUME_WAIT flag
+may return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or throw a
+<a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.
+This failure, by itself, does not require the enclosing transaction be
+aborted.</p>
<p><dt><a name="DB_GET_BOTH">DB_GET_BOTH</a><dd>Retrieve the key/data pair only if both the key and data match the
arguments.
-<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Retrieve the specified numbered key/data pair from a database.
-Upon return, both the <b>key</b> and <b>data</b> items will have been
-filled in, not just the data item as is done for all other uses of the
-Db::get method.
+<p>When used with the
+Db::pget method
+version of this method on a secondary index handle, return the
+secondary key/primary key/data tuple only if both the primary and
+secondary keys match the arguments. It is an error to use the
+DB_GET_BOTH flag with the
+Db::get
+version of this method and a secondary index handle.</p>
+<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Retrieve the specified numbered key/data pair from a database. Upon
+return, both the <b>key</b> and <b>data</b> items will have been
+filled in.
<p>The <b>data</b> field of the specified <b>key</b>
-must be a pointer to a logical record number (i.e., a <b>db_recno_t</b>).
+must be a pointer to a logical record number (that is, a <b>db_recno_t</b>).
This record number determines the record to be retrieved.
<p>For DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the DB_RECNUM flag.
+of type Btree, and it must have been created with the DB_RECNUM flag.</p></p>
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+In addition, the following flags may be set by
+bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::get call within a transaction. If the call
+succeeds, changes made by the operation will be recoverable. If the
+call fails, the operation will have made no changes. This flag may only
+be specified with the DB_CONSUME and DB_CONSUME_WAIT
+flags.
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_MULTIPLE">DB_MULTIPLE</a><dd>Return multiple data items in the buffer to which the <b>data</b>
+parameter refers.
+<p>In the case of Btree or Hash databases, all of the data items associated
+with the specified key are entered into the buffer. In the case of
+Queue or Recno databases, all of the data items in the database,
+starting at, and subsequent to, the specified key, are entered into the
+buffer.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The DB_MULTIPLE flag may only be used alone, or with the
+DB_GET_BOTH and DB_SET_RECNO options. The
+DB_MULTIPLE flag may not be used when accessing databases made
+into secondary indices using the <a href="../api_cxx/db_associate.html">Db::associate</a> method.</p>
+<p>See
+<a href="../api_cxx/dbt_bulk_class.html">DbMultipleDataIterator</a>
+for more information.</p>
<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
-<p>As the Db::get interface will not hold locks across
-Berkeley DB interface calls in non-transactional environments, the
-<a href="../api_cxx/dbc_get.html#DB_RMW">DB_RMW</a> flag to the Db::get call is only meaningful in
-the presence of transactions.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
+<p>Because the Db::get method will not hold locks across
+Berkeley DB calls in non-transactional operations, the <a href="../api_cxx/dbc_get.html#DB_RMW">DB_RMW</a> flag
+to the Db::get call is meaningful only in the presence of
+transactions.</p>
+</dl>
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>pkey</b><dd>
+The <b>pkey</b> parameter is the return key from the primary database.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
</dl>
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-the Db::get method returns <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>Otherwise, if the requested key is not in the database, the
-Db::get function returns <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p>Otherwise, the Db::get method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::get method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The Db::get method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>There was insufficient memory to return the requested item.
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>The <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to the
-<a href="../api_cxx/db_open.html">Db::open</a> method and none of the <a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
-<a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags were set in the
-<a href="../api_cxx/dbt_class.html">Dbt</a>.
+<p><dt>EINVAL<dd>If a record number of 0 was specified;
+the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to the <a href="../api_cxx/db_open.html">Db::open</a> method and
+none of the <a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or
+<a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags were set in the <a href="../api_cxx/dbt_class.html">Dbt</a>;
+the Db::pget method
+was called with a <a href="../api_cxx/db_class.html">Db</a> handle that does not refer to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::get method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::get method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the DB_CONSUME_WAIT flag was specified, lock or transaction
+timers were configured and the lock could not be granted before the wait-time expired,
+the Db::get method will fail and
+either return DB_LOCK_NOTGRANTED or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the requested item could not be returned due to insufficient memory, the Db::get method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_get_byteswapped.html b/db/docs/api_cxx/db_get_byteswapped.html
index 5c661fa57..b0a800e47 100644
--- a/db/docs/api_cxx/db_get_byteswapped.html
+++ b/db/docs/api_cxx/db_get_byteswapped.html
@@ -1,20 +1,22 @@
-<!--$Id: db_get_byteswapped.so,v 10.7 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_byteswapped.so,v 10.22 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::get_byteswapped</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::get_byteswapped</h1>
+<h3>Db::get_byteswapped</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,64 +24,52 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::get_byteswapped(void) const;
+Db::get_byteswapped(int *isswapped);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::get_byteswapped</h3>
<p>The Db::get_byteswapped method returns
-0
-if the underlying database files were created on an architecture
-of the same byte order as the current one, and
-1
-if they were not (i.e., big-endian on a little-endian machine or
-vice-versa). This field may be used to determine if application
-data needs to be adjusted for this architecture or not.
+if the underlying database files were created on an architecture of the
+same byte order as the current one,
+or
+if they were not (that is, big-endian on a little-endian machine, or
+vice versa). This information may be used to determine whether
+application data needs to be adjusted for this architecture or not.</p>
+<p>The Db::get_byteswapped method may not be called before the <a href="../api_cxx/db_open.html">Db::open</a> method has been
+called.</p>
+<p>The Db::get_byteswapped method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>isswapped</b><dd>
+If the underlying database files were created on an architecture of the
+same byte order as the current one. 0 is stored into the memory location
+referenced by <b>isswapped</b>. If the underlying database files were
+created on an architecture of a different byte order as the current one,
+1 is stored into the memory location referenced by <b>isswapped</b>.
+</dl>
+<h3>Errors</h3>
+<p>The Db::get_byteswapped method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called before <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_get_mpf.html b/db/docs/api_cxx/db_get_mpf.html
new file mode 100644
index 000000000..02e026963
--- /dev/null
+++ b/db/docs/api_cxx/db_get_mpf.html
@@ -0,0 +1,44 @@
+<!--$Id: db_get_mpf.so,v 1.6 2003/10/13 21:10:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Db::get_mpf</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>Db::get_mpf</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+DbMpoolFile *
+Db::get_mpf();
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: Db::get_mpf</h3>
+<p>Db::get_mpf gives access to the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> associated
+with a <a href="../api_cxx/db_class.html">Db</a> object.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/db_get_type.html b/db/docs/api_cxx/db_get_type.html
index 755032390..885cea18e 100644
--- a/db/docs/api_cxx/db_get_type.html
+++ b/db/docs/api_cxx/db_get_type.html
@@ -1,82 +1,71 @@
-<!--$Id: db_get_type.so,v 10.10 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_type.so,v 10.26 2003/10/31 17:24:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::get_type</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::get_type</h1>
+<h3>Db::get_type</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-DBTYPE
-Db::get_type(void) const;
+int
+Db::get_type(DBTYPE *type);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::get_type method returns the type of the underlying access method
-(and file format). It returns one of DB_BTREE,
-DB_HASH or DB_RECNO. This value may be used to
-determine the type of the database after a return from <a href="../api_cxx/db_open.html">Db::open</a>
-with the <b>type</b> argument set to DB_UNKNOWN.
+<hr size=1 noshade>
+<h3>Description: Db::get_type</h3>
+<p>The Db::get_type method returns the type of the underlying access
+method (and file format). The type value is one of DB_BTREE,
+DB_HASH, DB_RECNO, or DB_QUEUE. This
+value may be used to determine the type of the database after a return
+from <a href="../api_cxx/db_open.html">Db::open</a> with the <b>type</b> parameter set to
+DB_UNKNOWN.</p>
+<p>The Db::get_type method may not be called before the <a href="../api_cxx/db_open.html">Db::open</a> method has been
+called.</p>
+<p>The Db::get_type method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>type</b><dd>
+The <b>type</b> parameter references memory into which
+ the type of the underlying access method is copied.
+</dl>
+<h3>Errors</h3>
+<p>The Db::get_type method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called before <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_getenv.html b/db/docs/api_cxx/db_getenv.html
new file mode 100644
index 000000000..9547e7603
--- /dev/null
+++ b/db/docs/api_cxx/db_getenv.html
@@ -0,0 +1,56 @@
+<!--$Id: db_getenv.so,v 10.6 2003/10/13 21:10:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Db::getenv</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>Db::getenv</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+DbEnv *
+Db::getenv();
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: Db::getenv</h3>
+<p>The Db::getenv method returns the handle for the database environment underlying the database.</p>
+<p>The Db::getenv method may be called at any time during the life of the
+application.</p>
+<p>The Db::getenv method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db</b><dd>
+The Db::getenv method returns the
+handle for the database environment underlying the database in <b>db</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/db_join.html b/db/docs/api_cxx/db_join.html
index 6767aaf76..440df0939 100644
--- a/db/docs/api_cxx/db_join.html
+++ b/db/docs/api_cxx/db_join.html
@@ -1,20 +1,22 @@
-<!--$Id: db_join.so,v 10.30 2000/12/20 15:34:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_join.so,v 10.55 2003/11/08 19:17:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::join</h1>
+<h3>Db::join</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,130 +26,113 @@
int
Db::join(Dbc **curslist, Dbc **dbcp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::join method creates a specialized cursor for use in performing
-joins on secondary indexes. For information on how to organize your data
-to use this functionality, see <a href="../ref/am/join.html">Logical
-join</a>.
-<p>The <b>primary</b> argument contains the <a href="../api_cxx/db_class.html">Db</a> handle of the primary
-database, which is keyed by the data values found in entries in the
-<b>curslist</b>.
-<p>The <b>curslist</b> argument contains a NULL terminated array of cursors.
-Each cursor must have been initialized to reference the key on which the
+<hr size=1 noshade>
+<h3>Description: Db::join</h3>
+<p>The Db::join method creates a specialized join cursor for use in
+performing equality or natural joins on secondary indices. For
+information on how to organize your data to use this functionality, see
+<a href="../ref/am/join.html">Equality join</a>.</p>
+<p>The Db::join method method is called using the <a href="../api_cxx/db_class.html">Db</a> handle of
+the primary database.</p>
+<p>The join cursor supports only the <a href="../api_cxx/dbc_get.html">Dbc::get</a> and <b>dbc_close</b>
+cursor functions:</p>
+<p><dl compact>
+<p><dt><a href="../api_cxx/dbc_get.html">Dbc::get</a><dd>Iterates over the values associated with the keys to which each item in
+<b>curslist</b> was initialized. Any data value that appears in all
+items specified by the <b>curslist</b> parameter is then used as a key
+into the <b>primary</b>, and the key/data pair found in the
+<b>primary</b> is returned.
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all the cursors as a lookup key for
+the <b>primary</b>, but simply return it in the key parameter instead.
+The data parameter is left unchanged.
+</dl>
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
+<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
+</dl>
+<p><dt><a href="../api_cxx/dbc_close.html">Dbc::close</a><dd>Close the returned cursor and release all resources. (Closing the cursors
+in <b>curslist</b> is the responsibility of the caller.)
+</dl>
+<p>The Db::join method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>curslist</b><dd>
+The <b>curslist</b> parameter contains a NULL terminated array of cursors.
+Each cursor must have been initialized to refer to the key on which the
underlying database should be joined. Typically, this initialization is done
by a <a href="../api_cxx/dbc_get.html">Dbc::get</a> call with the <a href="../api_cxx/dbc_get.html#DB_SET">DB_SET</a> flag specified. Once the
cursors have been passed as part of a <b>curslist</b>, they should not
be accessed or modified until the newly created join cursor has been closed,
or else inconsistent results may be returned.
<p>Joined values are retrieved by doing a sequential iteration over the first
-cursor in the <b>curslist</b> argument, and a nested iteration over each
+cursor in the <b>curslist</b> parameter, and a nested iteration over each
secondary cursor in the order they are specified in the <b>curslist</b>
-argument. This requires database traversals to search for the current
+parameter. This requires database traversals to search for the current
datum in all the cursors after the first. For this reason, the best join
performance normally results from sorting the cursors from the one that
-references the least number of data items to the one that references the
-most. By default, Db::join does this sort on behalf of its caller.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
+refers to the least number of data items to the one that refers to the
+most. By default, Db::join does this sort on behalf of its caller.</p>
+<p>For the returned join cursor to be used in a transaction-protected manner,
+the cursors listed in <b>curslist</b> must have been created within the
+context of the same transaction.</p>
+<p><dt><b>dbcp</b><dd>
+The newly created join cursor is returned in the memory location to which
+<b>dbcp</b> refers.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_JOIN_NOSORT">DB_JOIN_NOSORT</a><dd>Do not sort the cursors based on the number of data items they reference.
-If the data are structured such that cursors with many data items also
-share many common elements, higher performance will result from listing
-those cursors before cursors with fewer data items, that is, a sort order
-other than the default. The DB_JOIN_NOSORT flag permits
-applications to perform join optimization prior to calling Db::join.
+<p><dt><a name="DB_JOIN_NOSORT">DB_JOIN_NOSORT</a><dd>Do not sort the cursors based on the number of data items to which they
+refer. If the data are structured so that cursors with many data items
+also share many common elements, higher performance will result from
+listing those cursors before cursors with fewer data items; that is, a
+sort order other than the default. The DB_JOIN_NOSORT flag
+permits applications to perform join optimization prior to calling
+Db::join.
</dl>
-<p>A newly created cursor is returned in the memory location referenced by
-<b>dbcp</b> and has the standard cursor functions:
-<p><dl compact>
-<p><dt><a href="../api_cxx/dbc_get.html">Dbc::get</a><dd>Iterates over the values associated with the keys to which each item in
-<b>curslist</b> has been initialized. Any data value which appears in
-all items specified by the <b>curslist</b> argument is then used as a
-key into the <b>primary</b>, and the key/data pair found in the
-<b>primary</b> is returned.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup
-key for the <b>primary</b>, but simply return it in the key parameter
-instead. The data parameter is left unchanged.
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+<h3>Errors</h3>
+<p>The Db::join method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p><dt><a href="../api_cxx/dbc_put.html">Dbc::put</a><dd>Returns EINVAL.
-<p><dt><a href="../api_cxx/dbc_del.html">Dbc::del</a><dd>Returns EINVAL.
-<p><dt><a href="../api_cxx/dbc_close.html">Dbc::close</a><dd>Close the returned cursor and release all resources. (Closing the cursors
-in <b>curslist</b> is the responsibility of the caller.)
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
-<p>For the returned join cursor to be used in a transaction protected manner,
-the cursors listed in <b>curslist</b> must have been created within the
-context of the same transaction.
-<p>The Db::join method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::join method may fail and throw an exception or return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <a href="../api_cxx/dbc_put.html">Dbc::put</a> or <a href="../api_cxx/dbc_del.html">Dbc::del</a> functions were called.
+<p><dt>EINVAL<dd>If cursor methods other than <a href="../api_cxx/dbc_get.html">Dbc::get</a> or <a href="../api_cxx/dbc_close.html">Dbc::close</a> were
+called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::join method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::join method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_key_range.html b/db/docs/api_cxx/db_key_range.html
index 980dc119a..fe0cdcdfb 100644
--- a/db/docs/api_cxx/db_key_range.html
+++ b/db/docs/api_cxx/db_key_range.html
@@ -1,20 +1,22 @@
-<!--$Id: db_key_range.so,v 10.5 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_key_range.so,v 10.22 2003/11/08 19:17:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::key_range</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::key_range</h1>
+<h3>Db::key_range</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,87 +25,82 @@
<p>
int
Db::key_range(DbTxn *txnid
- Dbt *key, DB_KEY_RANGE *key_range, u_int32_t flags);
+ Dbt *key, DB_KEY_RANGE *key_range, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::key_range</h3>
<p>The Db::key_range method returns an estimate of the proportion of keys
-that are less than, equal to and greater than the specified key. The
-underlying database must be of type Btree.
-<p>The information is returned in the <b>key_range</b> argument, which
-contains three elements of type double, <b>less</b>, <b>equal</b> and
-<b>greater</b>. Values are in the range of 0 to 1, e.g., if the field
-<b>less</b> is 0.05, that indicates that 5% of the keys in the database
-are less than the key argument. The value for <b>equal</b> will be zero
-if there is no matching key and non-zero otherwise.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, otherwise, NULL.
-The Db::key_range method does not retain the locks it acquires for the
+that are less than, equal to, and greater than the specified key. The
+underlying database must be of type Btree.</p>
+<p>The Db::key_range method fills in a structure of type DB_KEY_RANGE. The
+following data fields are available from the DB_KEY_RANGE structure:</p>
+<p><dl compact>
+<dt>double less;<dd>A value between 0 and 1, the proportion of keys less than the specified
+key.
+<dt>double equal;<dd>A value between 0 and 1, the proportion of keys equal to the specified
+key.
+<dt>double greater;<dd>A value between 0 and 1, the proportion of keys greater than the
+specified key.
+</dl>
+<p>Values are in the range of 0 to 1; for example, if the field
+<b>less</b> is 0.05, 5% of the keys in the database are less than the
+<b>key</b> parameter. The value for <b>equal</b> will be zero if
+there is no matching key, and will be non-zero otherwise.</p>
+<p>The Db::key_range method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>key_range</b><dd>
+The estimates are returned in the <b>key_range</b> parameter, which
+contains three elements of type double: <b>less</b>, <b>equal</b>, and
+<b>greater</b>. Values are in the range of 0 to 1; for example, if the
+field <b>less</b> is 0.05, 5% of the keys in the database are less than
+the <b>key</b> parameter. The value for <b>equal</b> will be zero if
+there is no matching key, and will be non-zero otherwise.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL. The Db::key_range method does not retain the locks it acquires for the
life of the transaction, so estimates may not be repeatable.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The Db::key_range method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::key_range method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The Db::key_range method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The underlying database was not of type Btree.
+<p><dt>EINVAL<dd>If the underlying database was not of type Btree; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::key_range method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::key_range method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::key_range method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::key_range method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_list.html b/db/docs/api_cxx/db_list.html
index bd835909b..4fb11b052 100644
--- a/db/docs/api_cxx/db_list.html
+++ b/db/docs/api_cxx/db_list.html
@@ -1,17 +1,17 @@
-<!--Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Databases and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Databases and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Databases and Related Methods</h3>
+<!--$Id: m4.methods,v 1.3 2003/05/09 20:14:02 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Databases and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/db_associate.html">Db::associate</a></td><td>Associate a secondary index</td></tr>
<tr><td><a href="../api_cxx/db_close.html">Db::close</a></td><td>Close a database</td></tr>
@@ -22,6 +22,8 @@
<tr><td><a href="../api_cxx/db_fd.html">Db::fd</a></td><td>Return a file descriptor from a database</td></tr>
<tr><td><a href="../api_cxx/db_get.html">Db::get</a></td><td>Get items from a database</td></tr>
<tr><td><a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
+<tr><td><a href="../api_cxx/db_getenv.html">Db::getenv</a></td><td>Return a handle for the underlying database environment</td></tr>
+<tr><td><a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a></td><td>Get the memory pool handle for a database</td></tr>
<tr><td><a href="../api_cxx/db_get_type.html">Db::get_type</a></td><td>Return the database type</td></tr>
<tr><td><a href="../api_cxx/db_join.html">Db::join</a></td><td>Perform a database join on cursors</td></tr>
<tr><td><a href="../api_cxx/db_key_range.html">Db::key_range</a></td><td>Return estimate of key location</td></tr>
@@ -35,7 +37,6 @@
<tr><td><a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
<tr><td><a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
<tr><td><a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
-<tr><td><a href="../api_cxx/db_set_cache_priority.html">Db::set_cache_priority</a></td><td>Set the database cache priority</td></tr>
<tr><td><a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a></td><td>Set the database cache size</td></tr>
<tr><td><a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
<tr><td><a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
@@ -62,6 +63,6 @@
<tr><td><a href="../api_cxx/db_upgrade.html">Db::upgrade</a></td><td>Upgrade a database</td></tr>
<tr><td><a href="../api_cxx/db_verify.html">Db::verify</a></td><td>Verify/salvage a database</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_open.html b/db/docs/api_cxx/db_open.html
index 4c8cb75f4..d383e660e 100644
--- a/db/docs/api_cxx/db_open.html
+++ b/db/docs/api_cxx/db_open.html
@@ -1,20 +1,22 @@
-<!--$Id: db_open.so,v 10.61 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 10.101 2003/12/02 13:38:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::open</h1>
+<h3>Db::open</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,164 +24,238 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::open(const char *file,
+Db::open(DbTxn *txnid, const char *file,
const char *database, DBTYPE type, u_int32_t flags, int mode);
+<p>
+int
+Db::get_dbname(const char **filenamep, const char **dbnamep);
+<p>
+int
+Db::get_open_flags(u_int32_t *flagsp);
+<p>
+int
+Db::get_transactional()
</pre></h3>
-<h1>Description</h1>
-<p>The currently supported Berkeley DB file formats (or <i>access methods</i>)
-are Btree, Hash, Queue and Recno. The Btree format is a representation
-of a sorted, balanced tree structure. The Hash format is an extensible,
-dynamic hashing scheme. The Queue format supports fast access to
-fixed-length records accessed by sequentially or logical record number.
-The Recno format supports fixed- or variable-length records, accessed
-sequentially or by logical record number, and optionally retrieved from
-a flat text file.
+<hr size=1 noshade>
+<h3>Description: Db::open</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<a name="5"><!--meow--></a>
+<a name="6"><!--meow--></a>
+<p>The Db::open method opens the database represented by the <b>file</b>
+and <b>database</b> parameters for both reading and writing.</p>
+<p>The currently supported Berkeley DB file formats (or <i>access
+methods</i>) are Btree, Hash, Queue, and Recno. The Btree format is a
+representation of a sorted, balanced tree structure. The Hash format
+is an extensible, dynamic hashing scheme. The Queue format supports
+fast access to fixed-length records accessed sequentially or by logical
+record number. The Recno format supports fixed- or variable-length
+records, accessed sequentially or by logical record number, and
+optionally backed by a flat text file.</p>
<p>Storage and retrieval for the Berkeley DB access methods are based on key/data
-pairs, see <a href="../api_cxx/dbt_class.html">Dbt</a> for more information.
-<p>The Db::open interface opens the database represented by the
-<b>file</b> and <b>database</b> arguments for both reading and writing.
-The <b>file</b> argument is used as the name of a physical file on disk
-that will be used to back the database. The <b>database</b> argument is
-optional and allows applications to have multiple logical databases in a
-single physical file. While no <b>database</b> argument needs to be
-specified, it is an error to attempt to open a second database in a
-<b>file</b> that was not initially created using a <b>database</b> name.
-In-memory databases never intended to be preserved on disk may
-be created by setting both the <b>file</b> and <b>database</b> arguments
+pairs; see <a href="../api_cxx/dbt_class.html">Dbt</a> for more information.</p>
+<p>Calling Db::open is a relatively expensive operation, and
+maintaining a set of open databases will normally be preferable to
+repeatedly opening and closing the database for each new query.</p>
+<p>The Db::open method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+If Db::open fails, the <a href="../api_cxx/db_close.html">Db::close</a> method should be called to
+discard the <a href="../api_cxx/db_class.html">Db</a> handle.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is optional, and allows applications to
+have multiple databases in a single file. Although no <b>database</b>
+parameter needs to be specified, it is an error to attempt to open a
+second database in a <b>file</b> that was not initially created using
+a <b>database</b> name. Further, the <b>database</b> parameter is not
+supported by the Queue format. Finally, when opening multiple databases
+in the same physical file, it is important to consider locking and
+memory cache issues; see <a href="../ref/am/opensub.html">Opening
+multiple databases in a single file</a> for more information.
+<p>In-memory databases never intended to be preserved on disk may be
+created by setting both the <b>file</b> and <b>database</b> parameters
to NULL. Note that in-memory databases can only ever be shared by
sharing the single database handle that created them, in circumstances
-where doing so is safe.
-<p>The <b>type</b> argument is of type DBTYPE
-and must be set to one of DB_BTREE, DB_HASH,
-DB_QUEUE, DB_RECNO or DB_UNKNOWN, except
-that databases of type DB_QUEUE are restricted to one per
-<b>file</b>. If <b>type</b> is DB_UNKNOWN, the database must
-already exist and Db::open will automatically determine its type.
-The <a href="../api_cxx/db_get_type.html">Db::get_type</a> method may be used to determine the underlying type of
-databases opened using DB_UNKNOWN.
-<p>The <b>flags</b> and <b>mode</b> arguments specify how files will be opened
-and/or created if they do not already exist.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+where doing so is safe.</p>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is used as the name of an underlying file that
+will be used to back the database.
+<p>In-memory databases never intended to be preserved on disk may be
+created by setting both the <b>file</b> and <b>database</b> parameters
+to NULL. Note that in-memory databases can only ever be shared by
+sharing the single database handle that created them, in circumstances
+where doing so is safe.</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create any underlying files, as necessary. If the files do not already
-exist and the DB_CREATE flag is not specified, the call will fail.
-<p><dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the file already exists. Underlying filesystem
-primitives are used to implement this flag. For this reason it is only
-applicable to the physical file and cannot be used to test if a database
-in a file already exists.
-<p>The DB_EXCL flag is only meaningful when specified with the
-DB_CREATE flag.
-<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory (see the description of the
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::open call within a transaction. If the call
+succeeds, the open operation will be recoverable. If the call fails,
+no database will have been created.
+<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create the database. If the database does not already exist and the
+DB_CREATE flag is not specified, the Db::open will
+fail.
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Support dirty reads; that is, read operations on the database may
+request the return of modified but not yet committed data. This flag
+must be specified on all <a href="../api_cxx/db_class.html">Db</a> handles used to perform dirty reads
+or database updates, otherwise requests for dirty reads may not be
+honored and the read may block.
+<p><dt><a name="DB_EXCL">DB_EXCL</a><dd>Return an error if the database already exists. The DB_EXCL
+flag is only meaningful when specified with the DB_CREATE
+flag.
+<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory (see the
<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a> method for further information).
<p><dt><a name="DB_RDONLY">DB_RDONLY</a><dd>Open the database for reading only. Any attempt to modify items in the
-database will fail regardless of the actual permissions of any underlying
-files.
+database will fail, regardless of the actual permissions of any
+underlying files.
<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_cxx/db_class.html">Db</a> handle returned by Db::open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
+<i>free-threaded</i>; that is, usable by multiple threads within a
single address space.
-<p><dt><a name="DB_TRUNCATE">DB_TRUNCATE</a><dd>Physically truncate the underlying file, discarding all previous databases
-it might have held. Underlying filesystem primitives are used to
-implement this flag. For this reason it is only applicable to the
-physical file and cannot be used to discard databases within a file.
-<p>The DB_TRUNCATE flag cannot be transaction protected, and it is
-an error to specify it in a transaction protected environment.
+<p><dt><a name="DB_TRUNCATE">DB_TRUNCATE</a><dd>Physically truncate the underlying file, discarding all previous
+databases it might have held. Underlying filesystem primitives are used
+to implement this flag. For this reason, it is applicable only to the
+file and cannot be used to discard databases within a file.
+<p>The DB_TRUNCATE flag cannot be lock or transaction-protected,
+and it is an error to specify it in a locking or transaction-protected
+environment.</p>
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the access methods
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>Calling Db::open is a reasonably expensive operation, and
-maintaining a set of open databases will normally be preferable to
-repeatedly open and closing the database for each new query.
-<p>The Db::open method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::open
-is affected by the configuration value DB_DATA_DIR.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+the database open are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, the database open will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL. Note that transactionally protected operations on a <a href="../api_cxx/db_class.html">Db</a> handle
+requires the <a href="../api_cxx/db_class.html">Db</a> handle itself be transactionally protected
+during its open.
+<p><dt><b>type</b><dd>
+The <b>type</b> parameter
+is of type DBTYPE, and
+must be set to one of <a name="DB_BTREE">DB_BTREE</a>,
+<a name="DB_HASH">DB_HASH</a>, <a name="DB_QUEUE">DB_QUEUE</a>,
+<a name="DB_RECNO">DB_RECNO</a>, or <a name="DB_UNKNOWN">DB_UNKNOWN</a>. If
+<b>type</b> is DB_UNKNOWN, the database must already exist
+and Db::open will automatically determine its type. The
+<a href="../api_cxx/db_get_type.html">Db::get_type</a> method may be used to determine the underlying type of
+databases opened using DB_UNKNOWN.
</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>Db::open is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
<p><dl compact>
-<p><dt>TMPDIR<dd>If the <b>file</b> and <b>dbenv</b> arguments to Db::open are
+<p><dt>TMPDIR<dd>If the <b>file</b> and <b>dbenv</b> parameters to Db::open are
NULL, the environment variable <b>TMPDIR</b> may be used as a
-directory in which to create a temporary backing file.
+directory in which to create temporary backing files
</dl>
-<h1>Errors</h1>
-<p>The Db::open method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Errors</h3>
<p><dl compact>
-<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be opened without being first upgraded.
-<p><dt>EEXIST<dd>DB_CREATE and DB_EXCL were specified and the file exists.
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified (e.g., unknown database
-type, page size, hash function, pad byte, byte order) or a flag value
-or parameter that is incompatible with the specified database.
-<p>
-The <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to Db::open, but was not
-specified to the <a href="../api_cxx/env_open.html">DbEnv::open</a> call for the environment in which the
-<a href="../api_cxx/db_class.html">Db</a> handle was created.
-<p>A <b>re_source</b> file was specified with either the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<p>The Db::open method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_OLD_VERSION<dd>The database cannot be opened without being first upgraded.
+</dl>
+<p><dl compact>
+<p><dt>EEXIST<dd>DB_CREATE and DB_EXCL were specified and the database exists.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If an unknown database type, page size, hash function, pad byte, byte
+order, or a flag value or parameter that is incompatible with the
+specified database was specified;
+the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified and fast mutexes are not
+available for this architecture;
+the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag was specified to Db::open, but was
+not specified to the <a href="../api_cxx/env_open.html">DbEnv::open</a> call for the environment in
+which the <a href="../api_cxx/db_class.html">Db</a> handle was created;
+a backing flat text file was specified with either the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a>
flag or the provided database environment supports transaction
-processing.
-<p><dt>ENOENT<dd>A non-existent <b>re_source</b> file was specified.
+processing; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>ENOENT<dd>A nonexistent <b>re_source</b> file was specified.
+</dl>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The Db::open method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::open method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::open method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::open method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Description: Db::get_database</h3>
+<p>The Db::get_database method returns the current filename and database
+name.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>filenamep</b><dd>
+The <b>filenamep</b> parameter references memory into which
+a pointer to the current filename is copied.
+<p><dt><b>dbnamep</b><dd>
+The <b>dbnamep</b> parameter references memory into which
+a pointer to the current database name is copied.
+</dl>
+<p>The Db::get_database method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_database method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Description: Db::get_open_flags</h3>
+<p>The Db::get_open_flags method returns the current open method flags.</p>
+<p>The Db::get_open_flags method may not be called before the Db::open method has been
+called.</p>
+<p>The Db::get_open_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The Db::get_open_flags method returns the
+current open method flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_transactional</h3>
+<p>The Db::get_transactional method returns non-zero if the <a href="../api_cxx/db_class.html">Db</a>
+handle has been opened in a transactional mode.</p>
+<p>The Db::get_transactional method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_put.html b/db/docs/api_cxx/db_put.html
index 5e2d1b8c4..0aab595ce 100644
--- a/db/docs/api_cxx/db_put.html
+++ b/db/docs/api_cxx/db_put.html
@@ -1,20 +1,22 @@
-<!--$Id: db_put.so,v 10.34 2000/09/16 22:27:56 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 10.53 2003/11/08 19:17:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::put</h1>
+<h3>Db::put</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,19 +26,25 @@
int
Db::put(DbTxn *txnid, Dbt *key, Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::put</h3>
<p>The Db::put method stores key/data pairs in the database. The default
behavior of the Db::put function is to enter the new key/data
pair, replacing any previously existing key if duplicates are disallowed,
or adding a duplicate data item if duplicates are allowed. If the database
supports duplicates, the Db::put method adds the new data value at the
end of the duplicate set. If the database supports sorted duplicates,
-the new data value is inserted at the correct sorted location.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+the new data value is inserted at the correct sorted location.</p>
+<p>Unless otherwise specified, the Db::put method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_APPEND">DB_APPEND</a><dd>Append the key/data pair to the end of the database. For the
DB_APPEND flag to be specified, the underlying database must be
@@ -45,94 +53,86 @@ returned in the specified <b>key</b>.
<p>There is a minor behavioral difference between the Recno and Queue access
methods for the DB_APPEND flag. If a transaction enclosing a
Db::put operation with the DB_APPEND flag aborts, the
-record number may be decremented (and later re-allocated by a subsequent
+record number may be decremented (and later reallocated by a subsequent
DB_APPEND operation) by the Recno access method, but will not be
-decremented or re-allocated by the Queue access method.
+decremented or reallocated by the Queue access method.</p>
<p><dt><a name="DB_NODUPDATA">DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, enter the new key/data
-pair only if it does not already appear in the database. If the
-key/data pair already appears in the database, <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is
-returned. The DB_NODUPDATA flag may only be specified if the
-underlying database has been configured to support sorted duplicates.
-<p>The DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
-<p><dt><a name="DB_NOOVERWRITE">DB_NOOVERWRITE</a><dd>Enter the new key/data pair only if the key does not already appear in
-the database. If the key already appears in the database,
-<a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is returned. Even if the database allows duplicates,
-a call to Db::put with the DB_NOOVERWRITE flag set will
-fail if the key already exists in the database.
+pair only if it does not already appear in the database.
+<p>The DB_NODUPDATA flag may only be specified if the underlying
+database has been configured to support sorted duplicates. The
+DB_NODUPDATA flag may not be specified to the Queue or Recno
+access methods.</p>
+<p>
+The Db::put method will return <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NODUPDATA is set and the key/data pair already appears
+in the database.
+</p>
+<p><dt><a name="DB_NOOVERWRITE">DB_NOOVERWRITE</a><dd>Enter the new key/data pair only if the key does not already appear in the
+database. The Db::put method call with the DB_NOOVERWRITE flag
+set will fail if the key already exists in the database, even if the database
+supports duplicates.
+<p>
+The Db::put method will return <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> if DB_NOOVERWRITE is set and the key already appears in the
+database.
+</p>
</dl>
-<p>Otherwise, the Db::put method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::put method may fail and throw an exception or return a non-zero error for the following conditions:
+In addition, the following flag may be set by
+bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::put call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
</dl>
+<p><dt><b>data</b><dd>
+The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The Db::put method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
-<p>An attempt was made to do a partial put.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If a record number of 0 was specified;
+an attempt was made to add a record to a fixed-length database that was too
+large to fit;
+an attempt was made to do a partial put;
+an attempt was made to add a record to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOSPC<dd>A btree exceeded the maximum btree depth (255).
</dl>
-<p>The Db::put method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::put method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::put method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::put method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_remove.html b/db/docs/api_cxx/db_remove.html
index 56cc5a234..476afa154 100644
--- a/db/docs/api_cxx/db_remove.html
+++ b/db/docs/api_cxx/db_remove.html
@@ -1,20 +1,23 @@
-<!--$Id: db_remove.so,v 10.20 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_remove.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_dbremove.so,v 10.44 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::remove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::remove</h1>
+<h3>Db::remove</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,87 +27,72 @@
int
Db::remove(const char *file, const char *database, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::remove interface removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
-specified, the physical file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
-<p>If a physical file is being removed and logging is currently enabled in
-the database environment, no database in the file may be open when the
-Db::remove method is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not remove databases that
-are currently in use. In particular, some architectures do not permit
-the removal of files with open handles. On these architectures, attempts
-to remove databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once Db::remove has been called, regardless of its return, the
-<a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db::remove method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
+<hr size=1 noshade>
+<h3>Description: Db::remove</h3>
+<p>The Db::remove method removes the database specified by the
+<b>file</b> and <b>database</b> parameters. If no <b>database</b> is
+specified, the underlying file represented by <b>file</b> is removed,
+incidentally removing all of the databases it contained.</p>
+<p>Applications should never remove databases with open <a href="../api_cxx/db_class.html">Db</a> handles,
+or in the case of removing a file, when any database in the file has an
+open handle. For example, some architectures do not permit the removal
+of files with open system handles. On these architectures, attempts to
+remove databases currently in use by any thread of control in the system
+will fail.</p>
+<p>The Db::remove method may not be called after calling the
+<a href="../api_cxx/db_open.html">Db::open</a> method on any <a href="../api_cxx/db_class.html">Db</a> handle. If the <a href="../api_cxx/db_open.html">Db::open</a> method
+has already been called on a <a href="../api_cxx/db_class.html">Db</a> handle, close the existing
+handle and create a new one before calling Db::remove.</p>
+<p>The <a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again after Db::remove is
+called, regardless of its return.</p>
+<p>The Db::remove method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>Db::remove is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The Db::remove method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::remove
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>DB_FILEOPEN<dd>An attempt was made to remove the underlying file and a database in the
+file was currently open.
</dl>
-<h1>Errors</h1>
-<p>The Db::remove method may fail and throw an exception or return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If Db::remove called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::remove method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::remove method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_rename.html b/db/docs/api_cxx/db_rename.html
index 03f2063d4..e77a8cfa3 100644
--- a/db/docs/api_cxx/db_rename.html
+++ b/db/docs/api_cxx/db_rename.html
@@ -1,20 +1,23 @@
-<!--$Id: db_rename.so,v 10.7 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_rename.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_dbrename.so,v 10.31 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::rename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::rename</h1>
+<h3>Db::rename</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,90 +26,78 @@
<p>
int
Db::rename(const char *file,
- const char *database, const char *newname, u_int32_t flags);
+ const char *database, const char *newname, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::rename interface renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
-<b>database</b> is specified, the physical file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
-<p>If a physical file is being renamed and logging is currently enabled in
+<hr size=1 noshade>
+<h3>Description: Db::rename</h3>
+<p>The Db::rename method renames the database specified by the
+<b>file</b> and <b>database</b> parameters to <b>newname</b>. If no
+<b>database</b> is specified, the underlying file represented by
+<b>file</b> is renamed, incidentally renaming all of the databases it
+contained.</p>
+<p>Applications should not rename databases that are currently in use. If
+an underlying file is being renamed and logging is currently enabled in
the database environment, no database in the file may be open when the
-Db::rename method is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not rename databases that
-are currently in use. In particular, some architectures do not permit
-renaming files with open handles. On these architectures, attempts to
-rename databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once Db::rename has been called, regardless of its return, the
-<a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db::rename method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
+Db::rename method is called. In particular, some architectures do
+not permit renaming files with open handles. On these architectures,
+attempts to rename databases that are currently in use by any thread of
+control in the system will fail.</p>
+<p>The Db::rename method may not be called after calling the
+<a href="../api_cxx/db_open.html">Db::open</a> method on any <a href="../api_cxx/db_class.html">Db</a> handle. If the <a href="../api_cxx/db_open.html">Db::open</a> method
+has already been called on a <a href="../api_cxx/db_class.html">Db</a> handle, close the existing
+handle and create a new one before calling Db::rename.</p>
+<p>The <a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again after Db::rename is
+called, regardless of its return.</p>
+<p>The Db::rename method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+<p><dt><b>newname</b><dd>
+The <b>newname</b> parameter is the new name of the database or file.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>Db::rename is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The Db::rename method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::rename
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>DB_FILEOPEN<dd>An attempt was made to rename the underlying file and a database in the
+file was currently open.
</dl>
-<h1>Errors</h1>
-<p>The Db::rename method may fail and throw an exception or return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If Db::rename called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::rename method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::rename method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_alloc.html b/db/docs/api_cxx/db_set_alloc.html
index 194ec431a..65ead0a7b 100644
--- a/db/docs/api_cxx/db_set_alloc.html
+++ b/db/docs/api_cxx/db_set_alloc.html
@@ -1,21 +1,23 @@
-<!--Id: db_set_alloc.so,v 10.1 2001/04/04 19:06:25 bostic Exp -->
-<!--Id: env_set_alloc.so,v 1.3 2001/05/01 14:23:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_alloc.so,v 10.3 2002/08/18 21:15:51 bostic Exp $-->
+<!--$Id: env_set_alloc.so,v 1.21 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_alloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_alloc</h1>
+<h3>Db::set_alloc</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,24 +25,20 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef void *(*db_malloc_fcn_type)(void *, size_t);
- typedef void *(*db_realloc_fcn_type)(size_t);
- typedef void *(*db_free_fcn_type)(void *);
+ typedef void *(*db_malloc_fcn_type)(size_t);
+ typedef void *(*db_realloc_fcn_type)(void *, size_t);
+ typedef void *(*db_free_fcn_type)(void *);
};
<p>
int
Db::set_alloc(db_malloc_fcn_type app_malloc,
- db_realloc_fcn_type app_realloc,
- db_free_fcn_type app_free);
+ db_realloc_fcn_type app_realloc,
+ db_free_fcn_type app_free);
</pre></h3>
-<h1>Description</h1>
-<p>Set the allocation functions used by the <a href="../api_cxx/dbenv_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a>
-methods to allocate or free memory owned by the application. The
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> interface sets the allocation functions for a
-database environment; the Db::set_alloc interface sets the
-allocation functions for a single database. If both are specified,
-functions specified for a database will be used in preference to
-functions specified for environment.
+<hr size=1 noshade>
+<h3>Description: Db::set_alloc</h3>
+<p>Set the allocation functions used by the <a href="../api_cxx/env_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a>
+methods to allocate or free memory owned by the application.</p>
<p>There are a number of interfaces in Berkeley DB where memory is allocated by
the library and then given to the application. For example, the
<a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_cxx/dbt_class.html">Dbt</a> object,
@@ -49,90 +47,52 @@ which then becomes the responsibility of the calling application. (See
<a href="../api_cxx/dbt_class.html">Dbt</a> for more information.) Other examples are the Berkeley DB
interfaces which return statistical information to the application:
<a href="../api_cxx/db_stat.html">Db::stat</a>, <a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>, <a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>, <a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>, and <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>. There is
-one interface in the Berkeley DB where memory is allocated by the application
-and then given to the library: <a href="../api_cxx/db_associate.html">Db::associate</a>.
+<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>, <a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>, and <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>. There is one
+method in Berkeley DB where memory is allocated by the application and then
+given to the library: <a href="../api_cxx/db_associate.html">Db::associate</a>.</p>
<p>On systems in which there may be multiple library versions of the
standard allocation routines (notably Windows NT), transferring memory
between the library and the application will fail because the Berkeley DB
library allocates memory from a different heap than the application uses
to free it. To avoid this problem, the <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> and
Db::set_alloc methods can be used to pass Berkeley DB references to the
-application's allocation routines.
-<p>It is not an error to not specify all three arguments to these
-interfaces; however, in that case the specified interfaces must be
-compatible with the standard library interfaces, as they will be used
-together. The methods specified must match the calling
-conventions of the ANSI C X3.159-1989 (ANSI C) library routines of the same name.
-<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
-Db::set_alloc method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> method.
-<p>The Db::set_alloc interface may be used only to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_alloc method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::set_alloc method may fail and throw an exception or return a non-zero error for the following conditions:
+application's allocation routines.</p>
+<p>It is not an error to specify only one or two of the possible allocation
+function parameters to these interfaces; however, in that case the
+specified interfaces must be compatible with the standard library
+interfaces, as they will be used together. The functions specified must
+match the calling conventions of the ANSI C X3.159-1989 (ANSI C) library routines of
+the same name.</p>
+<p>Because databases opened within Berkeley DB environments use the allocation
+interfaces specified to the environment, it is an error to attempt to
+set those interfaces in a database created within an environment.</p>
+<p>The Db::set_alloc method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The Db::set_alloc method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Errors</h3>
+<p>The Db::set_alloc method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If Called in a database environment.
+<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.</p>; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::set_alloc method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::set_alloc method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>, <a href="../api_cxx/db_err.html">Db::errx</a>
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>,
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_append_recno.html b/db/docs/api_cxx/db_set_append_recno.html
index 296b47484..44d906ea8 100644
--- a/db/docs/api_cxx/db_set_append_recno.html
+++ b/db/docs/api_cxx/db_set_append_recno.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_append_recno.so,v 1.3 2000/07/18 16:19:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_append_recno.so,v 1.22 2003/11/19 04:10:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_append_recno</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_append_recno</h1>
+<h3>Db::set_append_recno</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,45 +27,61 @@ int
Db::set_append_recno(
int (*db_append_recno_fcn)(DB *dbp, Dbt *data, db_recno_t recno));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_append_recno</h3>
<p>When using the <a href="../api_cxx/db_put.html#DB_APPEND">DB_APPEND</a> option of the <a href="../api_cxx/db_put.html">Db::put</a> method,
it may be useful to modify the stored data based on the generated key.
-If a callback method is specified using the
+If a callback function is specified using the
Db::set_append_recno method, it will be called after the record number
-has been selected but before the data has been stored.
-The callback function must return 0 on success and <b>errno</b> or
-a value outside of the Berkeley DB error name space on failure.
-<p>The called function must take three arguments: a reference to the
-enclosing database handle, the data <a href="../api_cxx/dbt_class.html">Dbt</a> to be stored and the
-selected record number. The called function may then modify the data
-<a href="../api_cxx/dbt_class.html">Dbt</a>.
-<p>The Db::set_append_recno interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_append_recno method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+has been selected, but before the data has been stored.</p>
+<p>The Db::set_append_recno method configures operations performed using the specified
+<a href="../api_cxx/db_class.html">Db</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The Db::set_append_recno method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The Db::set_append_recno method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_append_recno_fcn</b><dd>
+The <b>db_append_recno_fcn</b> parameter is a function to call after
+the record number has been selected but before the data has been stored
+into the database. The function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt</b><dd>The <b>dbt</b> parameter is the data <a href="../api_cxx/dbt_class.html">Dbt</a> to be stored.
+<p><dt><b>recno</b><dd>The <b>recno</b> parameter is the generated record number.
+</dl>
+<p>The called function may modify the data <a href="../api_cxx/dbt_class.html">Dbt</a>.
+If the function needs to allocate memory for the <b>data</b> field, the
+<b>flags</b> field of the returned <a href="../api_cxx/dbt_class.html">Dbt</a> should be set to
+DB_DBT_APPMALLOC, which indicates that Berkeley DB should free the
+memory when it is done with it.</p>
+<p>The callback function must return 0 on success and <b>errno</b> or
+a value outside of the Berkeley DB error name space on failure.</p>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_append_recno method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_bt_compare.html b/db/docs/api_cxx/db_set_bt_compare.html
index 5ca95d401..bbf8af8ea 100644
--- a/db/docs/api_cxx/db_set_bt_compare.html
+++ b/db/docs/api_cxx/db_set_bt_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_compare.so,v 10.24 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_compare.so,v 10.48 2003/11/19 04:30:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_bt_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_bt_compare</h1>
+<h3>Db::set_bt_compare</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,88 +24,76 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef int (*bt_compare_fcn_type)(DB *, const DBT *, const DBT *);
+ typedef int (*bt_compare_fcn_type)(DB *db, const DBT *dbt1, const DBT *dbt2);
};
int
Db::set_bt_compare(bt_compare_fcn_type bt_compare_fcn);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_bt_compare</h3>
<p>Set the Btree key comparison function. The comparison function is
-called when it is necessary to compare a key specified by the
-application with a key currently stored in the tree. The first argument
-to the comparison function is the <a href="../api_cxx/dbt_class.html">Dbt</a> representing the
-application supplied key, the second is the current tree's key.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first key argument is considered to be
-respectively less than, equal to, or greater than the second key
-argument. In addition, the comparison function must cause the keys in
-the database to be <i>well-ordered</i>. The comparison function
-must correctly handle any key values used by the application (possibly
-including zero-length keys). In addition, when Btree key prefix
-comparison is being performed (see <a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a> for more
-information), the comparison routine may be passed a prefix of any
+called whenever it is necessary to compare a key specified by the
+application with a key currently stored in the tree.</p>
+<p>If no comparison function is specified, the keys are compared lexically,
+with shorter keys collating before longer keys.</p>
+<p>The Db::set_bt_compare method configures operations performed using the specified
+<a href="../api_cxx/db_class.html">Db</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The Db::set_bt_compare method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_bt_compare must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The Db::set_bt_compare method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_compare_fcn</b><dd>
+The <b>bt_compare_fcn</b> function is the application-specified Btree
+comparison function. The comparison function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is the <a href="../api_cxx/dbt_class.html">Dbt</a> representing the
+application supplied key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is the <a href="../api_cxx/dbt_class.html">Dbt</a> representing the
+current tree's key.
+</dl>
+<p>The <b>bt_compare_fcn</b> function must return an integer value less
+than, equal to, or greater than zero if the first key parameter is
+considered to be respectively less than, equal to, or greater than the
+second key parameter. In addition, the comparison function must cause
+the keys in the database to be <i>well-ordered</i>. The comparison
+function must correctly handle any key values used by the application
+(possibly including zero-length keys). In addition, when Btree key
+prefix comparison is being performed (see <a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a> for
+more information), the comparison routine may be passed a prefix of any
database key. The <b>data</b> and <b>size</b> fields of the
<a href="../api_cxx/dbt_class.html">Dbt</a> are the only fields that may be used for the purposes of
-this comparison.
-<p>If no comparison function is specified, the keys are compared lexically,
-with shorter keys collating before longer keys. The same comparison
-method must be used each time a particular Btree is opened.
-<p>The Db::set_bt_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_bt_compare method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+this comparison, and no particular alignment of the memory to which by
+the <b>data</b> field refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_bt_compare method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_bt_minkey.html b/db/docs/api_cxx/db_set_bt_minkey.html
index c0c5aced1..42ee969d3 100644
--- a/db/docs/api_cxx/db_set_bt_minkey.html
+++ b/db/docs/api_cxx/db_set_bt_minkey.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_minkey.so,v 10.14 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_minkey.so,v 10.35 2003/11/08 19:17:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_bt_minkey</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_bt_minkey</h1>
+<h3>Db::set_bt_minkey</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,72 +25,75 @@
<p>
int
Db::set_bt_minkey(u_int32_t bt_minkey);
+<p>
+int
+Db::get_bt_minkey(u_int32_t *bt_minkeyp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the minimum number of keys that will be stored on any single
-Btree page.
-<p>This value is used to determine which keys will be stored on overflow
-pages, i.e. if a key or data item is larger than the underlying database
-page size divided by the <b>bt_minkey</b> value, it will be stored on
-overflow pages instead of within the page itself. The <b>bt_minkey</b>
-value specified must be at least 2; if <b>bt_minkey</b> is not explicitly
-set, a value of 2 is used.
-<p>The Db::set_bt_minkey interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_bt_minkey method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_bt_minkey</h3>
+<a name="3"><!--meow--></a>
+<p>Set the minimum number of key/data pairs intended to be stored on any
+single Btree leaf page.</p>
+<p>This value is used to determine if key or data items will be stored on
+overflow pages instead of Btree leaf pages. For more information on
+the specific algorithm used, see <a href="../ref/am_conf/bt_minkey.html">Minimum keys per page</a>. The <b>bt_minkey</b> value specified must
+be at least 2; if <b>bt_minkey</b> is not explicitly set, a value of
+2 is used.</p>
+<p>The Db::set_bt_minkey method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_bt_minkey method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_bt_minkey will
+be ignored.
+</p>
+<p>The Db::set_bt_minkey method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_minkey</b><dd>
+The <b>bt_minkey</b> parameter is the minimum number of key/data pairs
+intended to be stored on any single Btree leaf page.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_bt_minkey method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_bt_minkey</h3>
+<p>The Db::get_bt_minkey method returns the minimum number of key/data pairs intended to be stored on any single Btree
+leaf page.</p>
+<p>The Db::get_bt_minkey method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_bt_minkey method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_minkeyp</b><dd>
+The Db::get_bt_minkey method returns the
+minimum number of key/data pairs intended to be stored on any single Btree
+leaf page in <b>bt_minkeyp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_bt_prefix.html b/db/docs/api_cxx/db_set_bt_prefix.html
index ecf949545..9c9df5293 100644
--- a/db/docs/api_cxx/db_set_bt_prefix.html
+++ b/db/docs/api_cxx/db_set_bt_prefix.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_bt_prefix.so,v 10.25 2000/09/08 21:35:26 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_bt_prefix.so,v 10.47 2003/11/08 19:17:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_bt_prefix</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_bt_prefix</h1>
+<h3>Db::set_bt_prefix</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,89 +24,79 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef size_t (*bt_prefix_fcn_type)(DB *, const DBT *, const DBT *);
+ typedef size_t (*bt_prefix_fcn_type)(DB *, const DBT *, const DBT *);
};
int
Db::set_bt_prefix(bt_prefix_fcn_type bt_prefix_fcn);
</pre></h3>
-<h1>Description</h1>
-<p>Set the Btree prefix function. The prefix function must return the
-number of bytes of the second key argument that would be required by
-the Btree key comparison function to determine the second key argument's
-ordering relationship with respect to the first key argument. If the
-two keys are equal, the key length should be returned. The prefix
-function must correctly handle any key values used by the application
-(possibly including zero-length keys). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_cxx/dbt_class.html">Dbt</a> are the only fields that may be
-used for the purposes of this determination.
-<p>The prefix function is used to determine the amount by which keys stored
-on the Btree internal pages can be safely truncated without losing their
-uniqueness. See the <a href="../ref/am_conf/bt_prefix.html">Btree
-prefix comparison</a> section of the Reference Guide for more details about
-how this works. The usefulness of this is data dependent, but in some
-data sets can produce significantly reduced tree sizes and search times.
+<hr size=1 noshade>
+<h3>Description: Db::set_bt_prefix</h3>
+<p>Set the Btree prefix function. The prefix function is used to determine
+the amount by which keys stored on the Btree internal pages can be
+safely truncated without losing their uniqueness. See the
+<a href="../ref/am_conf/bt_prefix.html">Btree prefix comparison</a> section
+of the Berkeley DB Reference Guide for more details about how this works. The
+usefulness of this is data-dependent, but can produce significantly
+reduced tree sizes and search times in some data sets.</p>
<p>If no prefix function or key comparison function is specified by the
application, a default lexical comparison function is used as the prefix
function. If no prefix function is specified and a key comparison
function is specified, no prefix function is used. It is an error to
-specify a prefix function without also specifying a key comparison
-function.
-<p>The Db::set_bt_prefix interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_bt_prefix method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+specify a prefix function without also specifying a Btree key comparison
+function.</p>
+<p>The Db::set_bt_prefix method configures operations performed using the specified
+<a href="../api_cxx/db_class.html">Db</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The Db::set_bt_prefix method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_bt_prefix must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The Db::set_bt_prefix method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bt_prefix_fcn</b><dd>
+The <b>bt_prefix_fcn</b> function is the application-specific Btree
+prefix function. The prefix function takes three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> representing a database key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> representing a database key.
+</dl>
+<p>The <b>bt_prefix_fcn</b> function must return the number of bytes of
+the second key parameter that would be required by the Btree key
+comparison function to determine the second key parameter's ordering
+relationship with respect to the first key parameter. If the two keys
+are equal, the key length should be returned. The prefix function must
+correctly handle any key values used by the application (possibly
+including zero-length keys). The <b>data</b> and <b>size</b> fields
+of the <a href="../api_cxx/dbt_class.html">Dbt</a> are the only fields that may be used for the purposes
+of this determination, and no particular alignment of the memory to
+which the <b>data</b> field refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_bt_prefix method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_cache_priority.html b/db/docs/api_cxx/db_set_cache_priority.html
deleted file mode 100644
index 971a9a2e2..000000000
--- a/db/docs/api_cxx/db_set_cache_priority.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--Id: db_set_cache_priority.so,v 10.3 2002/06/24 14:49:09 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Db::set_cache_priority</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db::set_cache_priority</h1>
-</td>
-<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-#include &lt;db_cxx.h&gt;
-<p>
-int
-Db::set_cache_priority(DB_CACHE_PRIORITY priority);
-</pre></h3>
-<h1>Description</h1>
-<p>Set the cache priority for pages from the specified database. The
-priority of a page biases the replacement algorithm to be more or less
-likely to discard a page when space is needed in the buffer pool. The
-bias is temporary, and pages will eventually be discarded if they are
-not referenced again. The Db::set_cache_priority interface is
-only advisory, and does not guarantee pages will be treated in a specific
-way.
-<p>The <b>priority</b> argument must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a><dd>The lowest priority: pages are the most likely to be discarded.
-<dt><a name="DB_PRIORITY_LOW">DB_PRIORITY_LOW</a><dd>The next lowest priority.
-<dt><a name="DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a><dd>The default priority.
-<dt><a name="DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a><dd>The next highest priority.
-<dt><a name="DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a><dd>The highest priority: pages are the least likely to be discarded.
-</dl>
-<p>The Db::set_cache_priority method configures a database, not only operations performed
-using the specified <a href="../api_cxx/db_class.html">Db</a> handle.
-<p>The Db::set_cache_priority interface may be called at any time during the life of
-the application.
-<p>The Db::set_cache_priority method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::set_cache_priority method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::set_cache_priority method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_err.html">Db::errx</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cache_priority.html">Db::set_cache_priority</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_cxx/db_set_cachesize.html b/db/docs/api_cxx/db_set_cachesize.html
index cc8e020cc..4670c9bb6 100644
--- a/db/docs/api_cxx/db_set_cachesize.html
+++ b/db/docs/api_cxx/db_set_cachesize.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_cachesize.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_cachesize.so,v 10.21 2002/08/18 21:15:53 bostic Exp $-->
+<!--$Id: env_set_cachesize.so,v 10.46 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_cachesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_cachesize</h1>
+<h3>Db::set_cachesize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,85 +26,96 @@
<p>
int
Db::set_cachesize(u_int32_t gbytes, u_int32_t bytes, int ncache);
+int
+Db::get_cachesize(u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<hr size=1 noshade>
+<h3>Description: Db::set_cachesize</h3>
+<a name="3"><!--meow--></a>
+<p>Set the size of the shared memory buffer pool -- that is, the cache.
+The cache should be the size of the normal working data set of the
+application, with some small amount of additional memory for unusual
+situations. (Note: the working set is not the same as the number of
+pages accessed simultaneously, and is usually much larger.)</p>
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>As databases opened within Berkeley DB environments use the cache specified to
-the environment, it is an error to attempt to set a cache in a database
-created within an environment.
-<p>The Db::set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_cachesize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified. The current maximum size of a single cache is 4GB.
+(All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.)
+For information on tuning the Berkeley DB cache size, see
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
+<p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large
+enough they cannot be allocated contiguously on some architectures. For
+example, some releases of Solaris limit the amount of memory that may
+be allocated contiguously by a process. If <b>ncache</b> is 0 or 1,
+the cache will be allocated contiguously in memory. If it is greater
+than 1, the cache will be broken up into <b>ncache</b> equally sized,
+separate pieces of memory.</p>
+<p>Because databases opened within Berkeley DB environments use the cache
+specified to the environment, it is an error to attempt to set a cache
+in a database created within an environment.</p>
+<p>The Db::set_cachesize method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The Db::set_cachesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>ncache</b><dd>
+The <b>ncache</b> parameter is the number of caches to create.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_cachesize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cache size was impossibly small.
+<p><dt>EINVAL<dd>If the specified cache size was impossibly small;
+called in a database environment;
+the method was called after
+<a href="../api_cxx/db_open.html">Db::open</a>
+was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_cachesize</h3>
+<p>The Db::get_cachesize method returns the current size and composition of the
+cache.</p>
+<p>The Db::get_cachesize method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_cachesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the cache is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the cache is copied.
+<p><dt><b>ncachep</b><dd>
+The <b>ncachep</b> parameter references memory into which
+ the number of caches is copied.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_dup_compare.html b/db/docs/api_cxx/db_set_dup_compare.html
index 7cd09ec0c..8ecdee7a5 100644
--- a/db/docs/api_cxx/db_set_dup_compare.html
+++ b/db/docs/api_cxx/db_set_dup_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_dup_compare.so,v 10.21 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_dup_compare.so,v 10.48 2003/11/19 04:03:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_dup_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_dup_compare</h1>
+<h3>Db::set_dup_compare</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,85 +24,74 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef int (*dup_compare_fcn_type)(DB *, const DBT *, const DBT *);
+ typedef int (*dup_compare_fcn_type)(DB *, const DBT *, const DBT *);
};
int
Db::set_dup_compare(dup_compare_fcn_type dup_compare_fcn);
</pre></h3>
-<h1>Description</h1>
-<p>Set the duplicate data item comparison function. The comparison function
-is called when it is necessary to compare a data item specified by the
-application with a data item currently stored in the tree. The first
-argument to the comparison function is the <a href="../api_cxx/dbt_class.html">Dbt</a> representing the
-application's data item, the second is the current tree's data item.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first data item argument is considered
-to be respectively less than, equal to, or greater than the second data
-item argument. In addition, the comparison function must cause the data
-items in the set to be <i>well-ordered</i>. The comparison function
-must correctly handle any data item values used by the application
-(possibly including zero-length data items). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_cxx/dbt_class.html">Dbt</a> are the only fields that may be
-used for the purposes of this comparison.
+<hr size=1 noshade>
+<h3>Description: Db::set_dup_compare</h3>
+<p>Set the duplicate data item comparison function. The comparison
+function is called whenever it is necessary to compare a data item
+specified by the application with a data item currently stored in the
+database. Calling Db::set_dup_compare implies calling
+<a href="../api_cxx/db_set_flags.html">Db::set_flags</a> with the <a href="../api_cxx/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag.</p>
<p>If no comparison function is specified, the data items are compared
-lexically, with shorter data items collating before longer data items.
-The same duplicate data item comparison method must be used each time
-a particular Btree is opened.
-<p>The Db::set_dup_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_dup_compare method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+lexically, with shorter data items collating before longer data items.</p>
+<p>The Db::set_dup_compare method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_dup_compare must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The Db::set_dup_compare method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dup_compare_fcn</b><dd>
+The <b>dup_compare_fcn</b> function is the application-specified
+duplicate data item comparison function. The function takes three
+arguments:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is the enclosing database handle.
+<p><dt><b>dbt1</b><dd>The <b>dbt1</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> representing the application
+supplied key.
+<p><dt><b>dbt2</b><dd>The <b>dbt2</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> representing the current
+tree's key.
+</dl>
+<p>The <b>dup_compare_fcn</b> function must return an integer value less
+than, equal to, or greater than zero if the first data item parameter
+is considered to be respectively less than, equal to, or greater than
+the second data item parameter. In addition, the comparison function
+must cause the data items in the set to be <i>well-ordered</i>. The
+comparison function must correctly handle any data item values used by
+the application (possibly including zero-length data items). The
+<b>data</b> and <b>size</b> fields of the <a href="../api_cxx/dbt_class.html">Dbt</a> are the only
+fields that may be used for the purposes of this comparison, and no
+particular alignment of the memory to which the <b>data</b> field
+refers may be assumed.</p>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_dup_compare method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_encrypt.html b/db/docs/api_cxx/db_set_encrypt.html
index ea1501fbf..a4b7c1a04 100644
--- a/db/docs/api_cxx/db_set_encrypt.html
+++ b/db/docs/api_cxx/db_set_encrypt.html
@@ -1,22 +1,23 @@
-<!--Id: db_set_encrypt.so,v 10.2 2002/06/24 14:49:10 bostic Exp -->
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_encrypt.so,v 10.3 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_encrypt.so,v 10.20 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_encrypt</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_encrypt</h1>
+<h3>Db::set_encrypt</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,92 +26,79 @@
<p>
int
Db::set_encrypt(const char *passwd, u_int32_t flags);
+<p>
+int
+Db::get_encrypt_flags(u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_cxx/dbenv_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
+<hr size=1 noshade>
+<h3>Description: Db::set_encrypt</h3>
+<a name="3"><!--meow--></a>
+<p>Set the password used by the Berkeley DB library to perform encryption and
+decryption.</p>
+<p>Because databases opened within Berkeley DB environments use the password
+specified to the environment, it is an error to attempt to set a
+password in a database created within an environment.</p>
+<p>The Db::set_encrypt method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The Db::set_encrypt method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_ENCRYPT_AES">DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
and Federal Information Processing Standard (FIPS) 197) algorithm for
encryption or decryption.
</dl>
-<p>Because databases opened within Berkeley DB environments use the password
-specified to the environment, it is an error to attempt to set a
-password in a database created within an environment.
-<p>The Db::set_encrypt interface may not be called after the <a href="../api_cxx/db_open.html">Db::open</a>
-interface is called.
-<p>The Db::set_encrypt method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::set_encrypt method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>passwd</b><dd>
+The <b>passwd</b> parameter is the password used to perform encryption
+and decryption.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_encrypt method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
+<p><dt>EINVAL<dd>If the method was called after
<a href="../api_cxx/db_open.html">Db::open</a>
-was called.
+was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>EOPNOTSUPP<dd>Cryptography is not available in this Berkeley DB release.
</dl>
-<p>The Db::set_encrypt method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::set_encrypt method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Description: Db::get_encrypt_flags</h3>
+<p>The Db::get_encrypt_flags method returns the encryption flags.</p>
+<p>The Db::get_encrypt_flags method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_encrypt_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The Db::get_encrypt_flags method returns the
+encryption flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_err.html">Db::errx</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cache_priority.html">Db::set_cache_priority</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_errcall.html b/db/docs/api_cxx/db_set_errcall.html
index 6cc5310eb..fec250a12 100644
--- a/db/docs/api_cxx/db_set_errcall.html
+++ b/db/docs/api_cxx/db_set_errcall.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_errcall.so,v 10.7 1999/12/20 08:52:28 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errcall.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_errcall.so,v 10.33 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_errcall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_errcall</h1>
+<h3>Db::set_errcall</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,55 +27,52 @@
void Db::set_errcall(
void (*db_errcall_fcn)(const char *errpfx, char *msg));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_errcall</h3>
When an error occurs in the Berkeley DB library, an exception is thrown or an
-error return value is returned by the method. In some cases,
+error return value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
debugging.
-<p>The Db::set_errcall method is used to enhance the mechanism for reporting error
-messages to the application. In some cases, when an error occurs, Berkeley DB
-will call <b>db_errcall_fcn</b> with additional error information. The
-function must be defined with two arguments; the first will be the prefix
-string (as previously set by <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), the second will be the error message string.
-It is up to the <b>db_errcall_fcn</b> method to display the error
-message in an appropriate manner.
-<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method to display
-the additional information via an output stream, or the <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>
-or <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> methods to display the additional information via a C
-library FILE *. You should not mix these approaches.
-<p>This error logging enhancement does not slow performance or significantly
+<p>The <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> and Db::set_errcall methods are used to
+enhance the mechanism for reporting error messages to the application.
+In some cases, when an error occurs, Berkeley DB will call
+<b>db_errcall_fcn</b> with additional error information. It is up to
+the <b>db_errcall_fcn</b> function to display the error message in an
+appropriate manner.</p>
+<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> and
+<a href="../api_cxx/db_set_error_stream.html">Db::set_error_stream</a> methods to display the additional information via
+an output stream, or the <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a> or
+<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> methods to display the additional information via a C
+library FILE *. You should not mix these approaches.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_errcall method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method.
-<p>The Db::set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
+the <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method.</p>
+<p>The Db::set_errcall method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_errcall_fcn</b><dd>
+The <b>db_errcall_fcn</b> parameter is the application-specified error
+reporting function. The function takes two parameters:
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>The <b>errpfx</b> parameter is the prefix string (as previously set by
+<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>).
+<p><dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_errfile.html b/db/docs/api_cxx/db_set_errfile.html
index 50c6bebd1..c883a6782 100644
--- a/db/docs/api_cxx/db_set_errfile.html
+++ b/db/docs/api_cxx/db_set_errfile.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_errfile.so,v 10.7 1999/12/20 08:52:28 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errfile.so,v 10.10 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_errfile.so,v 10.31 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_errfile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_errfile</h1>
+<h3>Db::set_errfile</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,58 +25,70 @@
#include &lt;db_cxx.h&gt;
<p>
void Db::set_errfile(FILE *errfile);
+<p>
+void Db::get_errfile(FILE **errfilep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_errfile</h3>
+<a name="3"><!--meow--></a>
When an error occurs in the Berkeley DB library, an exception is thrown or an
-error return value is returned by the method. In some cases,
+error return value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
debugging.
-<p>The Db::set_errfile method is used to enhance the mechanism for reporting error
-messages to the application by setting a C library FILE * to be used for
-displaying additional Berkeley DB error messages. In some cases, when an error
-occurs, Berkeley DB will output an additional error message to the specified
-file reference.
+<p>The <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> and <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a> methods are used to
+enhance the mechanism for reporting error messages to the application
+by setting a C library FILE * to be used for displaying additional Berkeley DB
+error messages. In some cases, when an error occurs, Berkeley DB will output
+an additional error message to the specified file reference.</p>
<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method to display
the additional information via an output stream, or the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method to capture the additional error information in
a way that does not use either output streams or C library FILE *'s. You
-should not mix these approaches.
+should not mix these approaches.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), an error string, and
-a trailing &lt;newline&gt; character.
+a trailing &lt;newline&gt; character.</p>
<p>This error logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_errfile method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> method.
-<p>The Db::set_errfile interface may be used to configure Berkeley DB at any time
-during the life of the application.
+the <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> method.</p>
+<p>The Db::set_errfile method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfile</b><dd>
+The <b>errfile</b> parameter is a C library FILE * to be used for
+displaying additional Berkeley DB error information.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_errfile</h3>
+<p>The Db::get_errfile method returns the FILE *.</p>
+<p>The Db::get_errfile method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_errfile method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfilep</b><dd>
+The Db::get_errfile method returns the
+FILE * in <b>errfilep</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_error_stream.html b/db/docs/api_cxx/db_set_error_stream.html
index d64f9fc81..3119487b8 100644
--- a/db/docs/api_cxx/db_set_error_stream.html
+++ b/db/docs/api_cxx/db_set_error_stream.html
@@ -1,22 +1,23 @@
-<!--Id: db_set_error_stream.so,v 10.2 2002/08/18 21:15:54 bostic Exp -->
-<!--Id: env_set_error_stream.so,v 10.19 2002/08/18 21:16:27 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_error_stream.so,v 10.2 2002/08/18 21:15:54 bostic Exp $-->
+<!--$Id: env_set_error_stream.so,v 10.26 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_error_stream</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_error_stream</h1>
+<h3>Db::set_error_stream</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,40 +26,48 @@
<p>
void Db::set_error_stream(class ostream*);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_error_stream</h3>
<p>When an error occurs in the Berkeley DB library, an exception is thrown or an
-<b>errno</b> value is returned by the method. In some cases,
+<b>errno</b> value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
-debugging.
+debugging.</p>
<p>The <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> and Db::set_error_stream methods
are used to enhance the mechanism for reporting error messages to the
application by setting the C++ ostream used for displaying additional
Berkeley DB error messages. In some cases, when an error occurs, Berkeley DB will
-output an additional error message to the specified stream.
+output an additional error message to the specified stream.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), an error string, and a trailing
-&lt;newline&gt; character.
+&lt;newline&gt; character.</p>
<p>Alternatively, you can use the <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> method to display
the additional information via a C library FILE *, or the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method to capture the additional error information in
a way that does not use either output streams or C library FILE *'s. You
-should not mix these approaches.
+should not mix these approaches.</p>
<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_error_stream method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method.
-<h1>Class</h1>
+the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>stream</b><dd>
+The <b>stream</b> parameter is the application-specified output stream to
+be used for additional error information.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_errpfx.html b/db/docs/api_cxx/db_set_errpfx.html
index 0baa3ba67..8801682a8 100644
--- a/db/docs/api_cxx/db_set_errpfx.html
+++ b/db/docs/api_cxx/db_set_errpfx.html
@@ -1,20 +1,23 @@
-<!--$Id: db_set_errpfx.so,v 10.6 1999/12/20 08:52:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_errpfx.so,v 10.10 2002/08/18 21:15:55 bostic Exp $-->
+<!--$Id: env_set_errpfx.so,v 10.30 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_errpfx</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_errpfx</h1>
+<h3>Db::set_errpfx</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,42 +25,55 @@
#include &lt;db_cxx.h&gt;
<p>
void Db::set_errpfx(const char *errpfx);
+<p>
+void Db::get_errpfx(const char **errpfxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>The Db::set_errpfx method does not copy the memory referenced by the
-<b>errpfx</b> argument, rather, it maintains a reference to it. This
-allows applications to modify the error message prefix at any time,
-without repeatedly calling Db::set_errpfx, but means that the
-memory must be maintained until the handle is closed.
+<hr size=1 noshade>
+<h3>Description: Db::set_errpfx</h3>
+<a name="3"><!--meow--></a>
+<p>Set the prefix string that appears before error messages issued by Berkeley DB.</p>
+<p>The Db::set_errpfx and <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a> methods do not copy
+the memory to which the <b>errpfx</b> parameter refers; rather, they
+maintain a reference to it. Although this allows applications to modify
+the error message prefix at any time (without repeatedly calling the
+interfaces), it means the memory must be maintained until the handle is
+closed.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_errpfx method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a> method.
-<p>The Db::set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
+the <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a> method.</p>
+<p>The Db::set_errpfx method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>
+The <b>errpfx</b> parameter is the application-specified error prefix
+for additional error messages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_errpfx</h3>
+<p>The Db::get_errpfx method returns the error prefix.</p>
+<p>The Db::get_errpfx method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_errpfx method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfxp</b><dd>
+The Db::get_errpfx method returns a reference to the
+error prefix in <b>errpfxp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_feedback.html b/db/docs/api_cxx/db_set_feedback.html
index 97a5a85b7..102db9ef0 100644
--- a/db/docs/api_cxx/db_set_feedback.html
+++ b/db/docs/api_cxx/db_set_feedback.html
@@ -1,20 +1,23 @@
-<!--$Id: db_set_feedback.so,v 10.16 2000/07/09 19:11:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_feedback.so,v 10.29 2003/10/19 01:27:11 bostic Exp $-->
+<!--$Id: env_set_feedback.so,v 10.40 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_feedback</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_feedback</h1>
+<h3>Db::set_feedback</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,75 +26,51 @@
<p>
int
Db::set_feedback(
- void (*db_feedback_fcn)(DB *dbp, int opcode, int pct));
+ void (*db_feedback_fcn)(DB *dbp, int opcode, int percent));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_feedback</h3>
<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The Db::set_feedback method can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback method. This method must be declared with
-three arguments: the first will be a reference to the enclosing database
-handle, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback method to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
+amounts of time. The Db::set_feedback method can be used by applications
+to monitor progress within these operations. When an operation is
+likely to take a long time, Berkeley DB will call the specified callback
+function with progress information.</p>
+<p>It is up to the callback function to display this information in an
+appropriate manner.</p>
+<p>The Db::set_feedback method may be called at any time during the life of the
+application.</p>
+<p>The Db::set_feedback method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_feedback_fcn</b><dd>
+The <b>db_feedback_fcn</b> parameter is the application-specified
+feedback function called to report Berkeley DB operation progress. The
+callback function must take three parameters:
+<p><dl compact>
+<p><dt><b>db</b><dd>The <b>db</b> parameter is a reference to the enclosing database.
+<p><dt><b>opcode</b><dd>The <b>opcode</b> parameter is an operation code. The <b>opcode</b>
+parameter may take on any of the following values:
<p><dl compact>
<p><dt><a name="DB_UPGRADE">DB_UPGRADE</a><dd>The underlying database is being upgraded.
<p><dt><a name="DB_VERIFY">DB_VERIFY</a><dd>The underlying database is being verified.
</dl>
-<p>The Db::set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The Db::set_feedback method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<p><dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the operation that has
+been completed, specified as an integer value between 0 and 100.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_flags.html b/db/docs/api_cxx/db_set_flags.html
index 059810357..1a7b00d16 100644
--- a/db/docs/api_cxx/db_set_flags.html
+++ b/db/docs/api_cxx/db_set_flags.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_flags.so,v 10.26 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_flags.so,v 10.64 2003/11/09 02:22:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_flags</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_flags</h1>
+<h3>Db::set_flags</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,161 +25,267 @@
<p>
int
Db::set_flags(u_int32_t flags);
+<p>
+int Db::get_flags(u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Calling Db::set_flags is additive, there is no way to clear flags.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: Db::set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a database. Calling Db::set_flags is additive; there
+is no way to clear flags.</p>
+<p>The Db::set_flags method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The Db::set_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<h3>General</h3>
+<p>The following flags may be specified for any Berkeley DB access method:</p>
+<p><dl compact>
+<a name="4"><!--meow--></a>
+<p><dt><a name="DB_CHKSUM">DB_CHKSUM</a><dd>Do checksum verification of pages read into the cache from the backing
+filestore. Berkeley DB uses the SHA1 Secure Hash Algorithm
+if encryption is configured and a general hash algorithm if it is not.
+<p>Calling Db::set_flags with the DB_CHKSUM flag only affects the
+specified <a href="../api_cxx/db_class.html">Db</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_CHKSUM
+flag
+will be ignored.</p>
+If creating additional databases in a file, the checksum behavior specified
+must be consistent with the existing databases in the file or an error will
+be returned.
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_ENCRYPT">DB_ENCRYPT</a><dd>Encrypt the database using the cryptographic password specified to the
+<a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a> or <a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a> methods.
+<p>Calling Db::set_flags with the DB_ENCRYPT flag only affects the
+specified <a href="../api_cxx/db_class.html">Db</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_ENCRYPT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+If creating additional databases in a file, the encryption behavior specified
+must be consistent with the existing databases in the file or an error will
+be returned.
+<p>Encrypted databases are not portable between machines of different byte
+orders, that is, encrypted databases created on big-endian machines
+cannot be read on little-endian machines, and vice versa.</p>
+<a name="6"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a><dd>If set, Berkeley DB will not write log records for this database. This
+means that updates of this database exhibit the ACI (atomicity,
+consistency, and isolation) properties, but not D (durability); that
+is, database integrity will be maintained, but if the application or
+system fails, integrity will not persist. The database file must be
+verified and/or restored from backup after a failure. In order to
+ensure integrity after application shut down, the database handles must
+be closed without specifying <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a>, or all database
+changes must be flushed from the database environment cache using
+either the <a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a> or <a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> methods.
+All database handles for a single physical file must set
+DB_TXN_NOT_DURABLE, including database handles for different
+databases in a physical file.
+<p>Calling Db::set_flags with the DB_TXN_NOT_DURABLE flag only affects the
+specified <a href="../api_cxx/db_class.html">Db</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
+</dl>
<h3>Btree</h3>
-<p>The following flags may be specified for the Btree access method:
+<p>The following flags may be specified for the Btree access method:</p>
<p><dl compact>
-<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both DB_DUP and
-DB_RECNUM.
-<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
+<a name="7"><!--meow--></a>
+<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is
+determined by the order of insertion, unless the ordering is otherwise
+specified by use of a cursor operation.
+<p>The DB_DUPSORT flag is preferred to DB_DUP for
+performance reasons. The DB_DUP flag should only be used by
+applications wanting to order duplicate data items manually.</p>
+<p>Calling Db::set_flags with the DB_DUP flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_DUP
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<p>It is an error to specify both DB_DUP and DB_RECNUM.</p>
+<a name="8"><!--meow--></a>
+<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is determined
+by the duplicate comparison function.
If the application does not specify a comparison function using the
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a> method, a default, lexical comparison will be
+<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a> method, a default lexical comparison will be
used.
It is an error to specify both DB_DUPSORT and DB_RECNUM.
+<p>Calling Db::set_flags with the DB_DUPSORT flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_DUPSORT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="9"><!--meow--></a>
<p><dt><a name="DB_RECNUM">DB_RECNUM</a><dd>Support retrieval from the Btree using record numbers. For more
-information, see the DB_GET_RECNO flag to the <a href="../api_cxx/db_get.html">Db::get</a> and
-<a href="../api_cxx/dbc_get.html">Dbc::get</a> methods.
+information, see the <a href="../api_cxx/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a> flag to the <a href="../api_cxx/db_get.html">Db::get</a>
+and <a href="../api_cxx/dbc_get.html">Dbc::get</a> methods.
<p>Logical record numbers in Btree databases are mutable in the face of
-record insertion or deletion. See the DB_RENUMBER flag in the Recno
-access method information for further discussion.
+record insertion or deletion. See the DB_RENUMBER flag in the
+Recno access method information for further discussion.</p>
<p>Maintaining record counts within a Btree introduces a serious point of
-contention, namely the page locations where the record counts are stored.
-In addition, the entire tree must be locked during both insertions and
-deletions, effectively single-threading the tree for those operations.
-Specifying DB_RECNUM can result in serious performance degradation for
-some applications and data sets.
-<p>It is an error to specify both DB_DUP and DB_RECNUM.
+contention, namely the page locations where the record counts are
+stored. In addition, the entire database must be locked during both
+insertions and deletions, effectively single-threading the database for
+those operations. Specifying DB_RECNUM can result in serious
+performance degradation for some applications and data sets.</p>
+<p>It is an error to specify both DB_DUP and DB_RECNUM.</p>
+<p>Calling Db::set_flags with the DB_RECNUM flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_RECNUM
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="10"><!--meow--></a><a name="11"><!--meow--></a>
<p><dt><a name="DB_REVSPLITOFF">DB_REVSPLITOFF</a><dd>Turn off reverse splitting in the Btree. As pages are emptied in a
database, the Berkeley DB Btree implementation attempts to coalesce empty pages
-into higher-level pages in order to keep the tree as small as possible
-and minimize tree search time. This can hurt performance in applications
-with cyclical data demands, that is, applications where the database grows
+into higher-level pages in order to keep the database as small as possible
+and minimize search time. This can hurt performance in applications
+with cyclical data demands; that is, applications where the database grows
and shrinks repeatedly. For example, because Berkeley DB does page-level
-locking, the maximum level of concurrency in a database of 2 pages is far
-smaller than that in a database of 100 pages, and so a database that has
+locking, the maximum level of concurrency in a database of two pages is far
+smaller than that in a database of 100 pages, so a database that has
shrunk to a minimal size can cause severe deadlocking when a new cycle of
data insertion begins.
+<p>Calling Db::set_flags with the DB_REVSPLITOFF flag only affects the
+specified <a href="../api_cxx/db_class.html">Db</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
</dl>
<h3>Hash</h3>
-<p>The following flags may be specified for the Hash access method:
+<p>The following flags may be specified for the Hash access method:</p>
<p><dl compact>
-<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both DB_DUP and
-DB_RECNUM.
-<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
+<p><dt><a name="DB_DUP">DB_DUP</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is
+determined by the order of insertion, unless the ordering is otherwise
+specified by use of a cursor operation.
+<p>The DB_DUPSORT flag is preferred to DB_DUP for
+performance reasons. The DB_DUP flag should only be used by
+applications wanting to order duplicate data items manually.</p>
+<p>Calling Db::set_flags with the DB_DUP flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_DUP
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd>Permit duplicate data items in the database; that is, insertion when the
+key of the key/data pair being inserted already exists in the database
+will be successful. The ordering of duplicates in the database is determined
+by the duplicate comparison function.
If the application does not specify a comparison function using the
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a> method, a default, lexical comparison will be
+<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a> method, a default lexical comparison will be
used.
It is an error to specify both DB_DUPSORT and DB_RECNUM.
+<p>Calling Db::set_flags with the DB_DUPSORT flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_DUPSORT
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
</dl>
<h3>Queue</h3>
<p>There are no additional flags that may be specified for the Queue access
-method.
+method.</p>
<h3>Recno</h3>
-<p>The following flags may be specified for the Recno access method:
+<p>The following flags may be specified for the Recno access method:</p>
<p><dl compact>
-<p><dt><a name="DB_RENUMBER">DB_RENUMBER</a><dd>Specifying the DB_RENUMBER flag causes the logical record numbers to be
-mutable, and change as records are added to and deleted from the database.
-For example, the deletion of record number 4 causes records numbered 5
-and greater to be renumbered downward by 1. If a cursor was positioned
-to record number 4 before the deletion, it will reference the new record
-number 4, if any such record exists, after the deletion. If a cursor was
-positioned after record number 4 before the deletion, it will be shifted
-downward 1 logical record, continuing to reference the same record as it
-did before.
+<a name="12"><!--meow--></a>
+<p><dt><a name="DB_RENUMBER">DB_RENUMBER</a><dd>Specifying the DB_RENUMBER flag causes the logical record
+numbers to be mutable, and change as records are added to and deleted
+from the database. For example, the deletion of record number 4 causes
+records numbered 5 and greater to be renumbered downward by one. If a
+cursor was positioned to record number 4 before the deletion, it will
+refer to the new record number 4, if any such record exists, after the
+deletion. If a cursor was positioned after record number 4 before the
+deletion, it will be shifted downward one logical record, continuing to
+refer to the same record as it did before.
<p>Using the <a href="../api_cxx/db_put.html">Db::put</a> or <a href="../api_cxx/dbc_put.html">Dbc::put</a> interfaces to create new
records will cause the creation of multiple records if the record number
is more than one greater than the largest record currently in the
database. For example, creating record 28, when record 25 was previously
the last record in the database, will create records 26 and 27 as well as
28. Attempts to retrieve records that were created in this manner will
-result in an error return of <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
+result in an error return of <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.</p>
<p>If a created record is not at the end of the database, all records
-following the new record will be automatically renumbered upward by 1.
+following the new record will be automatically renumbered upward by one.
For example, the creation of a new record numbered 8 causes records
-numbered 8 and greater to be renumbered upward by 1. If a cursor was
+numbered 8 and greater to be renumbered upward by one. If a cursor was
positioned to record number 8 or greater before the insertion, it will be
-shifted upward 1 logical record, continuing to reference the same record
-as it did before.
+shifted upward one logical record, continuing to refer to the same record
+as it did before.</p>
<p>For these reasons, concurrent access to a Recno database with the
DB_RENUMBER flag specified may be largely meaningless, although
-it is supported.
-<p><dt><a name="DB_SNAPSHOT">DB_SNAPSHOT</a><dd>This flag specifies that any specified <b>re_source</b> file be read in
-its entirety when <a href="../api_cxx/db_open.html">Db::open</a> is called. If this flag is not
+it is supported.</p>
+<p>Calling Db::set_flags with the DB_RENUMBER flag affects the
+database, including all threads of control accessing the database.</p>
+<p>If the database already exists when <a href="../api_cxx/db_open.html">Db::open</a> is called, the DB_RENUMBER
+flag
+must be the same as the existing database or an error
+will be returned.
+</p>
+<a name="13"><!--meow--></a>
+<p><dt><a name="DB_SNAPSHOT">DB_SNAPSHOT</a><dd>This flag specifies that any specified <b>re_source</b> file be read
+in its entirety when <a href="../api_cxx/db_open.html">Db::open</a> is called. If this flag is not
specified, the <b>re_source</b> file may be read lazily.
+<p>Calling Db::set_flags with the DB_SNAPSHOT flag only affects the
+specified <a href="../api_cxx/db_class.html">Db</a> handle (and any other Berkeley DB handles opened within
+the scope of that handle).</p>
</dl>
-<p>The Db::set_flags interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_flags method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_flags method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_flags</h3>
+<p>The Db::get_flags method returns the current flags.</p>
+<p>The Db::get_flags method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The Db::get_flags method returns the
+current flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_h_ffactor.html b/db/docs/api_cxx/db_set_h_ffactor.html
index fa7d4209e..0e9be3d5f 100644
--- a/db/docs/api_cxx/db_set_h_ffactor.html
+++ b/db/docs/api_cxx/db_set_h_ffactor.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_ffactor.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_ffactor.so,v 10.34 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_h_ffactor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_h_ffactor</h1>
+<h3>Db::set_h_ffactor</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,73 +25,73 @@
<p>
int
Db::set_h_ffactor(u_int32_t h_ffactor);
+<p>
+int Db::get_h_ffactor(u_int32_t *h_ffactorp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the desired density within the hash table.
+<hr size=1 noshade>
+<h3>Description: Db::set_h_ffactor</h3>
+<a name="3"><!--meow--></a>
+<p>Set the desired density within the hash table. If no value is
+specified, the fill factor will be selected dynamically as pages are
+filled.</p>
+<p>The Db::set_h_ffactor method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_h_ffactor method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_h_ffactor will
+be ignored.
+</p>
+<p>The Db::set_h_ffactor method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_ffactor</b><dd>
+The <b>h_ffactor</b> parameter is the desired density within the hash table.
<p>The density is an approximation of the number of keys allowed to
accumulate in any one bucket, determining when the hash table grows or
shrinks. If you know the average sizes of the keys and data in your
-dataset, setting the fill factor can enhance performance. A reasonable
-rule computing fill factor is to set it to:
-<p><blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
-<p>If no value is specified, the fill factor will be selected dynamically as
-pages are filled.
-<p>The Db::set_h_ffactor interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_h_ffactor method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+data set, setting the fill factor can enhance performance. A reasonable
+rule computing fill factor is to set it to the following:</p>
+<blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_h_ffactor method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_h_ffactor</h3>
+<p>The Db::get_h_ffactor method returns the hash table density.</p>
+<p>The Db::get_h_ffactor method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_h_ffactor method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_ffactorp</b><dd>
+The Db::get_h_ffactor method returns the
+hash table density in <b>h_ffactorp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_h_hash.html b/db/docs/api_cxx/db_set_h_hash.html
index 71808b081..d0c029cf0 100644
--- a/db/docs/api_cxx/db_set_h_hash.html
+++ b/db/docs/api_cxx/db_set_h_hash.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_hash.so,v 10.18 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_hash.so,v 10.39 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_h_hash</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_h_hash</h1>
+<h3>Db::set_h_hash</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,81 +24,62 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef u_int32_t (*h_hash_fcn_type)
- (DB *, const void *bytes, u_int32_t length);
+ typedef u_int32_t (*h_hash_fcn_type)
+ (DB *, const void *bytes, u_int32_t length);
};
int
Db::set_h_hash(h_hash_fcn_type h_hash_fcn);
</pre></h3>
-<h1>Description</h1>
-<p>Set a user defined hash method; if no hash method is specified, a default
-hash method is used. Since no hash method performs equally well on all
-possible data, the user may find that the built-in hash method performs
-poorly with a particular data set. User specified hash functions must
-take a pointer to a byte string and a length as arguments and return a
-value of type
+<hr size=1 noshade>
+<h3>Description: Db::set_h_hash</h3>
+<p>Set a user-defined hash function; if no hash function is specified, a
+default hash function is used. Because no hash function performs
+equally well on all possible data, the user may find that the built-in
+hash function performs poorly with a particular data set.</p>
+<p>The Db::set_h_hash method configures operations performed using the specified
+<a href="../api_cxx/db_class.html">Db</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The Db::set_h_hash method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_h_hash must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The Db::set_h_hash method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_hash_fcn</b><dd>
+The <b>h_hash_fcn</b> parameter is the application-specified hash function.
+<p>Application-specified hash functions take a pointer to a byte string and
+a length as parameters, and return a value of type
<b>u_int32_t</b>.
The hash function must handle any key values used by the application
-(possibly including zero-length keys).
-<p>If a hash method is specified, <a href="../api_cxx/db_open.html">Db::open</a> will attempt to determine
-if the hash method specified is the same as the one with which the database
-was created, and will fail if it detects that it is not.
-<p>The Db::set_h_hash interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_h_hash method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+(possibly including zero-length keys).</p>
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_h_hash method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; the
+specified hash function differs from the hash function with which the
+database was created; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_h_nelem.html b/db/docs/api_cxx/db_set_h_nelem.html
index 55698d457..3f6e4e0d1 100644
--- a/db/docs/api_cxx/db_set_h_nelem.html
+++ b/db/docs/api_cxx/db_set_h_nelem.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_h_nelem.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_h_nelem.so,v 10.33 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_h_nelem</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_h_nelem</h1>
+<h3>Db::set_h_nelem</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,68 +25,72 @@
<p>
int
Db::set_h_nelem(u_int32_t h_nelem);
+<p>
+int
+Db::get_h_nelem(u_int32_t *h_nelemp);
</pre></h3>
-<h1>Description</h1>
-<p>Set an estimate of the final size of the hash table.
-<p>If not set or set too low, hash tables will still expand gracefully
-as keys are entered, although a slight performance degradation may be
-noticed.
-<p>The Db::set_h_nelem interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_h_nelem method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_h_nelem</h3>
+<a name="3"><!--meow--></a>
+<p>Set an estimate of the final size of the hash table.</p>
+<p>In order for the estimate to be used when creating the database, the
+<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a> method must also be called. If the estimate
+or fill factor are not set or are set too low, hash tables will still
+expand gracefully as keys are entered, although a slight performance
+degradation may be noticed.</p>
+<p>The Db::set_h_nelem method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_h_nelem method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_h_nelem will
+be ignored.
+</p>
+<p>The Db::set_h_nelem method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_nelem</b><dd>
+The <b>h_nelem</b> parameter is an estimate of the final size of the
+hash table.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_h_nelem method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_h_nelem</h3>
+<p>The Db::get_h_nelem method returns the estimate of the final size of the hash table.</p>
+<p>The Db::get_h_nelem method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_h_nelem method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>h_nelemp</b><dd>
+The Db::get_h_nelem method returns the
+estimate of the final size of the hash table in <b>h_nelemp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_lorder.html b/db/docs/api_cxx/db_set_lorder.html
index f25779a25..05585e6c1 100644
--- a/db/docs/api_cxx/db_set_lorder.html
+++ b/db/docs/api_cxx/db_set_lorder.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_lorder.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_lorder.so,v 10.35 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_lorder</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_lorder</h1>
+<h3>Db::set_lorder</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,74 +25,77 @@
<p>
int
Db::set_lorder(int lorder);
+<p>
+int
+Db::get_lorder(int *lorderp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_lorder</h3>
+<a name="3"><!--meow--></a>
<p>Set the byte order for integers in the stored database metadata. The
-number should represent the order as an integer, for example, big endian
-order is the number 4,321, and little endian order is the number 1,234.
-If <b>lorder</b> is not explicitly set, the host order of the machine
-where the Berkeley DB library was compiled is used.
-<p>The value of <b>lorder</b> is ignored except when databases are being
-created. If a database already exists, the byte order it uses is
-determined when the database is opened.
+host byte order of the machine where the Berkeley DB library was compiled will
+be used if no byte order is set.</p>
<p><b>The access methods provide no guarantees about the byte ordering of the
application data stored in the database, and applications are responsible
-for maintaining any necessary ordering.</b>
-<p>The Db::set_lorder interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_lorder method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+for maintaining any necessary ordering.</b></p>
+<p>The Db::set_lorder method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_lorder method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_lorder will
+be ignored.
+</p>
+If creating additional databases in a single physical file, information
+specified to Db::set_lorder will be ignored and the byte order
+of the existing databases will be used.
+<p>The Db::set_lorder method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lorder</b><dd>
+The <b>lorder</b> parameter should represent the byte order as an
+integer; for example, big endian order is the number 4,321, and little
+endian order is the number 1,234.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_lorder method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_lorder</h3>
+<p>The Db::get_lorder method returns the database byte order; a byte order of 4,321 indicates a big endian
+order, and a byte order of 1,234 indicates a little endian order.</p>
+<p>The Db::get_lorder method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_lorder method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lorderp</b><dd>
+The Db::get_lorder method returns the
+database byte order in <b>lorderp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_pagesize.html b/db/docs/api_cxx/db_set_pagesize.html
index 114f0578a..d5742d393 100644
--- a/db/docs/api_cxx/db_set_pagesize.html
+++ b/db/docs/api_cxx/db_set_pagesize.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_pagesize.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_pagesize.so,v 10.36 2003/11/08 19:17:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_pagesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_pagesize</h1>
+<h3>Db::set_pagesize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,70 +25,76 @@
<p>
int
Db::set_pagesize(u_int32_t pagesize);
+<p>
+int
+Db::get_pagesize(u_int32_t *pagesizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_pagesize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the pages used to hold items in the database, in bytes.
-The minimum page size is 512 bytes and the maximum page size is 64K bytes.
-If the page size is not explicitly set, one is selected based on the
-underlying filesystem I/O block size. The automatically selected size
-has a lower limit of 512 bytes and an upper limit of 16K bytes.
+The minimum page size is 512 bytes, the maximum page size is 64K bytes,
+and the page size must be a power-of-two. If the page size is not
+explicitly set, one is selected based on the underlying filesystem I/O
+block size. The automatically selected size has a lower limit of 512
+bytes and an upper limit of 16K bytes.</p>
<p>For information on tuning the Berkeley DB page size, see
-<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.
-<p>The Db::set_pagesize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_pagesize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.</p>
+<p>The Db::set_pagesize method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_pagesize method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_pagesize will
+be ignored.
+</p>
+If creating additional databases in a file, the page size specified must
+be consistent with the existing databases in the file or an error will
+be returned.
+<p>The Db::set_pagesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pagesize</b><dd>
+The <b>pagesize</b> parameter sets the database page size.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_pagesize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_pagesize</h3>
+<p>The Db::get_pagesize method returns the page size.</p>
+<p>The Db::get_pagesize method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_pagesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pagesizep</b><dd>
+The Db::get_pagesize method returns the
+page size in <b>pagesizep</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_paniccall.html b/db/docs/api_cxx/db_set_paniccall.html
index 7cd08de4a..3cb84ee5f 100644
--- a/db/docs/api_cxx/db_set_paniccall.html
+++ b/db/docs/api_cxx/db_set_paniccall.html
@@ -1,21 +1,23 @@
-<!--$Id: db_set_paniccall.so,v 10.11 2000/07/09 19:12:16 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_paniccall.so,v 10.14 2002/08/18 21:15:57 bostic Exp $-->
+<!--$Id: env_set_paniccall.so,v 10.36 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_paniccall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_paniccall</h1>
+<h3>Db::set_paniccall</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,54 +25,53 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::set_paniccall(
- void (*db_paniccall_fcn)(DbEnv *dbenv, int errval));
+Db::set_paniccall(void (*db_panic_fcn)(DbEnv *dbenv, int errval));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_paniccall</h3>
<p>Errors can occur in the Berkeley DB library where the only solution is to shut
-down the application and run recovery. (For example, if Berkeley DB is unable
-to write log records to disk because there is insufficient disk space.)
-In these cases, when the C++ error model has been configured so that the
-individual Berkeley DB methods return error codes (see <a href="../api_cxx/except_class.html">DbException</a> for
-more information), the value <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is returned by Berkeley DB
-methods.
-<p>In these cases, it is also often simpler to shut down the application when
-such errors occur rather than attempting to gracefully return up the stack.
-The Db::set_paniccall method is used to specify a method to be called when
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned from a Berkeley DB method. When
-called, the <b>dbenv</b> argument will be a reference to the current
-environment, and the <b>errval</b> argument is the error value that would
-have been returned to the calling method.
+down the application and run recovery (for example, if Berkeley DB is unable
+to allocate heap memory). In such cases, the Berkeley DB methods will
+either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a <a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
+depending on the API configuration.
+It is often easier to simply exit the application when such errors occur
+rather than gracefully return up the stack. The Db::set_paniccall method
+specifies a function to be called when
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned or <a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>
+is about to be thrown
+from a Berkeley DB method.</p>
<p>For <a href="../api_cxx/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
Db::set_paniccall method affects the entire environment and is equivalent to calling
-the <a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a> method.
-<p>The Db::set_paniccall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The Db::set_paniccall method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+the <a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a> method.</p>
+<p>The Db::set_paniccall method may be called at any time during the life of the
+application.</p>
+<p>The Db::set_paniccall method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_panic_fcn</b><dd>
+The <b>db_panic_fcn</b> parameter is the application-specified function
+called in the case of a database environment panic. The function takes
+two arguments:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>errval</b><dd>The <b>errval</b> parameter is the error value that would have been
+returned to the caller if <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> were not going to be
+returned instead.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_q_extentsize.html b/db/docs/api_cxx/db_set_q_extentsize.html
index d9c702196..e43fa322f 100644
--- a/db/docs/api_cxx/db_set_q_extentsize.html
+++ b/db/docs/api_cxx/db_set_q_extentsize.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_q_extentsize.so,v 1.3 2000/11/21 19:25:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_q_extentsize.so,v 1.20 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_q_extentsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_q_extentsize</h1>
+<h3>Db::set_q_extentsize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,70 +25,72 @@
<p>
int
Db::set_q_extentsize(u_int32_t extentsize);
+<p>
+int
+Db::get_q_extentsize(u_int32_t *extentsizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_q_extentsize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the extents used to hold pages in a Queue database,
specified as a number of pages. Each extent is created as a separate
physical file. If no extent size is set, the default behavior is to
-create only a single underlying database file.
+create only a single underlying database file.</p>
<p>For information on tuning the extent size, see
-<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.
-<p>The Db::set_q_extentsize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_q_extentsize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.</p>
+<p>The Db::set_q_extentsize method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_q_extentsize method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_q_extentsize will
+be ignored.
+</p>
+<p>The Db::set_q_extentsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>extentsize</b><dd>
+The <b>extentsize</b> parameter is the number of pages in a Queue database
+extent.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_q_extentsize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_q_extentsize</h3>
+<p>The Db::get_q_extentsize method returns the number of pages in an extent.</p>
+<p>The Db::get_q_extentsize method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_q_extentsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>extentsizep</b><dd>
+The Db::get_q_extentsize method returns the
+number of pages in an extent in <b>extentsizep</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_re_delim.html b/db/docs/api_cxx/db_set_re_delim.html
index c88d6e89e..86b09d62c 100644
--- a/db/docs/api_cxx/db_set_re_delim.html
+++ b/db/docs/api_cxx/db_set_re_delim.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_delim.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_delim.so,v 10.36 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_re_delim</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_re_delim</h1>
+<h3>Db::set_re_delim</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,70 +25,72 @@
<p>
int
Db::set_re_delim(int re_delim);
+<p>
+int
+Db::get_re_delim(int *delimp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_re_delim</h3>
+<a name="3"><!--meow--></a>
<p>Set the delimiting byte used to mark the end of a record in the backing
-source file for the Recno access method.
-<p>This byte is used for variable length records, if the <b>re_source</b>
+source file for the Recno access method.</p>
+<p>This byte is used for variable length records if the <b>re_source</b>
file is specified. If the <b>re_source</b> file is specified and no
-delimiting byte was specified, &lt;newline&gt; characters (i.e.
-ASCII 0x0a) are interpreted as end-of-record markers.
-<p>The Db::set_re_delim interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_re_delim method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+delimiting byte was specified, &lt;newline&gt; characters (that
+is, ASCII 0x0a) are interpreted as end-of-record markers.</p>
+<p>The Db::set_re_delim method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_re_delim method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_re_delim will
+be ignored.
+</p>
+<p>The Db::set_re_delim method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_delim</b><dd>
+The <b>re_delim</b> parameter is the delimiting byte used to mark the
+end of a record.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_re_delim method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_re_delim</h3>
+<p>The Db::get_re_delim method returns the delimiting byte.</p>
+<p>The Db::get_re_delim method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_re_delim method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>delimp</b><dd>
+The Db::get_re_delim method returns the
+delimiting byte in <b>delimp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_re_len.html b/db/docs/api_cxx/db_set_re_len.html
index 7432ced16..ba3b7dde3 100644
--- a/db/docs/api_cxx/db_set_re_len.html
+++ b/db/docs/api_cxx/db_set_re_len.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_len.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_len.so,v 10.37 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_re_len</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_re_len</h1>
+<h3>Db::set_re_len</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,74 +25,79 @@
<p>
int
Db::set_re_len(u_int32_t re_len);
+<p>
+int
+Db::get_re_len(u_int32_t *re_lenp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_re_len</h3>
+<a name="3"><!--meow--></a>
<p>For the Queue access method, specify that the records are of length
-<b>re_len</b>.
+<b>re_len</b>. For the Queue access method, the record length must be
+enough smaller than the database's page size that at least one record
+plus the database page's metadata information can fit on each database
+page.</p>
<p>For the Recno access method, specify that the records are fixed-length,
-not byte delimited, and are of length <b>re_len</b>.
+not byte-delimited, and are of length <b>re_len</b>.</p>
<p>Any records added to the database that are less than <b>re_len</b> bytes
long are automatically padded (see <a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a> for more
-information).
+information).</p>
<p>Any attempt to insert records into the database that are greater than
<b>re_len</b> bytes long will cause the call to fail immediately and
-return an error.
-<p>The Db::set_re_len interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_re_len method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+return an error.</p>
+<p>The Db::set_re_len method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_re_len method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_re_len will
+be ignored.
+</p>
+<p>The Db::set_re_len method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_len</b><dd>
+The <b>re_len</b> parameter is the length of a Queue or Recno database
+record, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_re_len method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_re_len</h3>
+<p>The Db::get_re_len method returns the record length.</p>
+<p>The Db::get_re_len method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_re_len method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_lenp</b><dd>
+The Db::get_re_len method returns the
+record length in <b>re_lenp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_re_pad.html b/db/docs/api_cxx/db_set_re_pad.html
index 5b9453d0d..7f8ffadbc 100644
--- a/db/docs/api_cxx/db_set_re_pad.html
+++ b/db/docs/api_cxx/db_set_re_pad.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_pad.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_pad.so,v 10.34 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_re_pad</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_re_pad</h1>
+<h3>Db::set_re_pad</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,68 +25,70 @@
<p>
int
Db::set_re_pad(int re_pad);
+<p>
+int
+Db::get_re_pad(int *re_padp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_re_pad</h3>
+<a name="3"><!--meow--></a>
<p>Set the padding character for short, fixed-length records for the Queue
-and Recno access methods.
-<p>If no pad character is specified, &lt;space&gt; characters (i.e.,
-ASCII 0x20) are used for padding.
-<p>The Db::set_re_pad interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_re_pad method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+and Recno access methods.</p>
+<p>If no pad character is specified, &lt;space&gt; characters (that
+is, ASCII 0x20) are used for padding.</p>
+<p>The Db::set_re_pad method configures a database, not only operations performed
+using the specified <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The Db::set_re_pad method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_re_pad will
+be ignored.
+</p>
+<p>The Db::set_re_pad method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_pad</b><dd>
+The <b>re_pad</b> parameter is the pad character for fixed-length
+records for the Queue and Recno access methods.
+</dl>
+<h3>Errors</h3>
+<p>The Db::set_re_pad method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_re_pad</h3>
+<p>The Db::get_re_pad method returns the pad character.</p>
+<p>The Db::get_re_pad method may be called at any time during the life of the
+application.</p>
+<p>The Db::get_re_pad method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>re_padp</b><dd>
+The Db::get_re_pad method returns the
+pad character in <b>re_padp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_set_re_source.html b/db/docs/api_cxx/db_set_re_source.html
index ea51dde62..dccad0489 100644
--- a/db/docs/api_cxx/db_set_re_source.html
+++ b/db/docs/api_cxx/db_set_re_source.html
@@ -1,20 +1,22 @@
-<!--$Id: db_set_re_source.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_set_re_source.so,v 10.38 2003/11/08 19:17:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::set_re_source</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::set_re_source</h1>
+<h3>Db::set_re_source</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,111 +24,99 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::set_re_source(char *re_source);
+Db::set_re_source(char *source);
+<p>
+int
+Db::get_re_source(const char **sourcep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::set_re_source</h3>
+<a name="3"><!--meow--></a>
<p>Set the underlying source file for the Recno access method. The purpose
-of the <b>re_source</b> value is to provide fast access and modification
-to databases that are normally stored as flat text files.
-<p>If the <b>re_source</b> field is set, it specifies an underlying flat
-text database file that is read to initialize a transient record number
-index. In the case of variable length records, the records are separated
-as specified by <a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>. For example, standard UNIX
-byte stream files can be interpreted as a sequence of variable length
-records separated by &lt;newline&gt; characters.
+of the <b>source</b> value is to provide fast access and modification
+to databases that are normally stored as flat text files.</p>
+<p>The <b>source</b> parameter specifies an underlying flat text database
+file that is read to initialize a transient record number index. In
+the case of variable length records, the records are separated, as
+specified by <a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>. For example, standard UNIX byte
+stream files can be interpreted as a sequence of variable length records
+separated by &lt;newline&gt; characters.</p>
<p>In addition, when cached data would normally be written back to the
-underlying database file (e.g., the <a href="../api_cxx/db_close.html">Db::close</a> or <a href="../api_cxx/db_sync.html">Db::sync</a>
-methods are called), the in-memory copy of the database will be written
-back to the <b>re_source</b> file.
-<p>By default, the backing source file is read lazily, i.e., records are not
-read from the file until they are requested by the application.
+underlying database file (for example, the <a href="../api_cxx/db_close.html">Db::close</a> or
+<a href="../api_cxx/db_sync.html">Db::sync</a> methods are called), the in-memory copy of the database
+will be written back to the <b>source</b> file.</p>
+<p>By default, the backing source file is read lazily; that is, records
+are not read from the file until they are requested by the application.
<b>If multiple processes (not threads) are accessing a Recno database
-concurrently and either inserting or deleting records, the backing source
-file must be read in its entirety before more than a single process
-accesses the database, and only that process should specify the backing
-source file as part of the <a href="../api_cxx/db_open.html">Db::open</a> call. See the <a href="../api_cxx/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a>
-flag for more information.</b>
-<p><b>Reading and writing the backing source file specified by <b>re_source</b>
-cannot be transactionally protected because it involves filesystem
-operations that are not part of the Db transaction methodology.</b>
-For this reason, if a temporary database is used to hold the records,
-i.e., a NULL was specified as the <b>file</b> argument to <a href="../api_cxx/db_open.html">Db::open</a>,
-it is possible to lose the contents of the <b>re_source</b> file, e.g.,
-if the system crashes at the right instant.
-If a file is used to hold the database, i.e., a file name was specified
-as the <b>file</b> argument to <a href="../api_cxx/db_open.html">Db::open</a>, normal database
-recovery on that file can be used to prevent information loss,
-although it is still possible that the contents of <b>re_source</b>
-will be lost if the system crashes.
-<p>The <b>re_source</b> file must already exist (but may be zero-length) when
-<a href="../api_cxx/db_open.html">Db::open</a> is called.
-<p>It is not an error to specify a read-only <b>re_source</b> file when
+concurrently, and are either inserting or deleting records, the backing
+source file must be read in its entirety before more than a single
+process accesses the database, and only that process should specify the
+backing source file as part of the <a href="../api_cxx/db_open.html">Db::open</a> call. See the
+<a href="../api_cxx/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a> flag for more information.</b></p>
+<p><b>Reading and writing the backing source file specified by <b>source</b>
+cannot be transaction-protected because it involves filesystem
+operations that are not part of the Db transaction methodology.</b> For
+this reason, if a temporary database is used to hold the records, it is
+possible to lose the contents of the <b>source</b> file, for
+example, if the system crashes at the right instant. If a file is used
+to hold the database, normal database recovery on that file can be used
+to prevent information loss, although it is still possible that the
+contents of <b>source</b> will be lost if the system crashes.</p>
+<p>The <b>source</b> file must already exist (but may be zero-length) when
+<a href="../api_cxx/db_open.html">Db::open</a> is called.</p>
+<p>It is not an error to specify a read-only <b>source</b> file when
creating a database, nor is it an error to modify the resulting database.
However, any attempt to write the changes to the backing source file using
either the <a href="../api_cxx/db_sync.html">Db::sync</a> or <a href="../api_cxx/db_close.html">Db::close</a> methods will fail, of course.
Specify the <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag to the <a href="../api_cxx/db_close.html">Db::close</a> method to stop it
-from attempting to write the changes to the backing file, instead, they
-will be silently discarded.
-<p>For all of the above reasons, the <b>re_source</b> field is generally
-used to specify databases that are read-only for <a href="../api_cxx/db_class.html">Db</a> applications,
-and that are either generated on the fly by software tools, or modified
-using a different mechanism, e.g., a text editor.
-<p>The Db::set_re_source interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/db_open.html">Db::open</a> interface is called.
-<p>The Db::set_re_source method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+from attempting to write the changes to the backing file; instead, they
+will be silently discarded.</p>
+<p>For all of the previous reasons, the <b>source</b> field is generally
+used to specify databases that are read-only for Berkeley DB applications;
+and that are either generated on the fly by software tools or modified
+using a different mechanism -- for example, a text editor.</p>
+<p>The Db::set_re_source method configures operations performed using the specified
+<a href="../api_cxx/db_class.html">Db</a> handle, not all operations performed on the underlying
+database.</p>
+<p>The Db::set_re_source method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+If the database already exists when
+<a href="../api_cxx/db_open.html">Db::open</a> is called, the information specified to Db::set_re_source must
+be the same as that historically used to create the database or
+corruption can occur.</p>
+<p>The Db::set_re_source method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/db_open.html">Db::open</a> was called.
+<p><dt><b>source</b><dd>
+The backing flat text database file for a Recno database.
</dl>
+<h3>Errors</h3>
+<p>The Db::set_re_source method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/db_open.html">Db::open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Db::get_re_source</h3>
+<p>The Db::get_re_source method returns the source file.</p>
+<p>The Db::get_re_source method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_stat.html b/db/docs/api_cxx/db_stat.html
index 4245fd917..18ddb4d0c 100644
--- a/db/docs/api_cxx/db_stat.html
+++ b/db/docs/api_cxx/db_stat.html
@@ -1,90 +1,83 @@
-<!--$Id: db_stat.so,v 10.37 2000/10/03 21:55:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.75 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::stat</h1>
+<h3>Db::stat</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
-Db::stat(void *sp, db_malloc_fcn_type db_malloc, u_int32_t flags);
+Db::stat(void *sp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::stat</h3>
<p>The Db::stat method creates a statistical structure and
copies a pointer to it into user-specified memory locations.
Specifically, if <b>sp</b> is non-NULL, a pointer to the statistics
-for the database are copied into the memory location it references.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="DB_CACHED_COUNTS">DB_CACHED_COUNTS</a><dd>Return a cached count of the keys and records in a database. This flag
-makes it possible for applications to request an possibly approximate key
-and record count without incurring the performance penalty of traversing
-the entire database. The statistics information described for the access
-method <b>XX_nkeys</b> and <b>XX_ndata</b> fields below is filled in,
-but no other information is collected. If the cached information has
-never been set, the fields will be returned set to 0.
-<p><dt><a name="DB_RECORDCOUNT">DB_RECORDCOUNT</a><dd>Return a count of the records in a Btree or Recno Access Method database.
-This flag makes it possible for applications to request a record count
-without incurring the performance penalty of traversing the entire
-database. The statistics information described for the <b>bt_nkeys</b>
-field below is filled in, but no other information is collected.
-<p>This option is only available for Recno databases, or Btree databases
-where the underlying database was created with the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
-</dl>
-<p>The Db::stat method may access all of the pages in the database,
+for the database are copied into the memory location to which it refers.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>If the DB_FAST_STAT flag has not been specified, the
+Db::stat method will access some of or all the pages in the database,
incurring a severe performance penalty as well as possibly flushing the
-underlying buffer pool.
+underlying buffer pool.</p>
<p>In the presence of multiple threads or processes accessing an active
-database, the information returned by Db::stat may be out-of-date.
-<p>If the database was not opened readonly and the DB_CACHED_COUNTS
-flag was not specified, the cached key and record numbers will be updated
-after the statistical information has been gathered.
-<p>The Db::stat method cannot be transaction protected. For this reason,
+database, the information returned by Db::stat may be out-of-date.</p>
+<p>If the database was not opened read-only and the DB_FAST_STAT
+flag was not specified, the cached key and record numbers will be
+updated after the statistical information has been gathered.</p>
+<p>The Db::stat method cannot be transaction-protected. For this reason,
it should be called in a thread of control that has no open cursors or
-active transactions.
-<p>The Db::stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+active transactions.</p>
+<p>The Db::stat method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
<h3>Hash Statistics</h3>
<p>In the case of a Hash database,
the statistics are stored in a structure of type DB_HASH_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t hash_magic;<dd>Magic number that identifies the file as a Hash file.
-<dt>u_int32_t hash_version;<dd>The version of the Hash database.
-<dt>u_int32_t hash_nkeys;<dd>The number of unique keys in the database.
-<dt>u_int32_t hash_ndata;<dd>The number of key/data pairs in the database.]
-<dt>u_int32_t hash_pagesize;<dd>The underlying Hash database page (and bucket) size.
-<dt>u_int32_t hash_nelem;<dd>The estimated size of the hash table specified at database creation time.
-<dt>u_int32_t hash_ffactor;<dd>The desired fill factor (number of items per bucket) specified at database
-creation time.
-<dt>u_int32_t hash_buckets;<dd>The number of hash buckets.
+<dt>u_int32_t hash_magic;<dd>Magic number that identifies the file as a Hash file. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_version;<dd>The version of the Hash database. Returned if DB_FAST_STAT is
+set.
+<dt>u_int32_t hash_nkeys;<dd>The number of unique keys in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_ndata;<dd>The number of key/data pairs in the database. If DB_FAST_STAT
+was specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t hash_pagesize;<dd>The underlying Hash database page (and bucket) size, in bytes.
+Returned if DB_FAST_STAT is set.
+<dt>u_int32_t hash_ffactor;<dd>The desired fill factor (number of items per bucket) specified at
+database-creation time. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t hash_buckets;<dd>The number of hash buckets. Returned if DB_FAST_STAT is set.
<dt>u_int32_t hash_free;<dd>The number of pages on the free list.
<dt>u_int32_t hash_bfree;<dd>The number of bytes free on bucket pages.
<dt>u_int32_t hash_bigpages;<dd>The number of big key/data pages.
@@ -98,20 +91,33 @@ that did not fit in the main bucket page).
<h3>Btree and Recno Statistics</h3>
<p>In the case of a Btree or Recno database,
the statistics are stored in a structure of type DB_BTREE_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t bt_magic;<dd>Magic number that identifies the file as a Btree database.
-<dt>u_int32_t bt_version;<dd>The version of the Btree database.
+<dt>u_int32_t bt_magic;<dd>Magic number that identifies the file as a Btree database. Returned
+if DB_FAST_STAT is set.
+<dt>u_int32_t bt_version;<dd>The version of the Btree database. Returned if DB_FAST_STAT
+is set.
<dt>u_int32_t bt_nkeys;<dd>For the Btree Access Method, the number of unique keys in the database.
-<p>For the Recno Access Method, the number of records in the database.
-<dt>u_int32_t bt_ndata;<dd>For the Btree Access Method, the number of key/data pairs in the database.
-<p>For the Recno Access Method, the number of records in the database. If
-the database has been configured to not re-number records during
-deletion, the number of records will only reflect undeleted records.
-<dt>u_int32_t bt_pagesize;<dd>Underlying database page size.
-<dt>u_int32_t bt_minkey;<dd>The minimum keys per page.
-<dt>u_int32_t bt_re_len;<dd>The length of fixed-length records.
-<dt>u_int32_t bt_re_pad;<dd>The padding byte value for fixed-length records.
+If DB_FAST_STAT was specified and the database was created with
+the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the count will be exact, otherwise, the
+count will be the last saved value unless it has never been calculated,
+in which case it will be 0. For the Recno Access Method, the exact
+number of records in the database. Returned if DB_FAST_STAT is
+set.
+<dt>u_int32_t bt_ndata;<dd>For the Btree Access Method, the number of key/data pairs in the
+database. If DB_FAST_STAT was specified the count will be the
+last saved value unless it has never been calculated, in which case it
+will be 0. For the Recno Access Method, the exact number of records in
+the database. If the database has been configured to not renumber
+records during deletion, the count of records will only reflect
+undeleted records. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t bt_pagesize;<dd>Underlying database page size, in bytes. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t bt_minkey;<dd>The minimum keys per page. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t bt_re_len;<dd>The length of fixed-length records. Returned if DB_FAST_STAT
+is set.
+<dt>u_int32_t bt_re_pad;<dd>The padding byte value for fixed-length records. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t bt_levels;<dd>Number of levels in the database.
<dt>u_int32_t bt_int_pg;<dd>Number of database internal pages.
<dt>u_int32_t bt_leaf_pg;<dd>Number of database leaf pages.
@@ -126,76 +132,76 @@ deletion, the number of records will only reflect undeleted records.
<h3>Queue Statistics</h3>
<p>In the case of a Queue database,
the statistics are stored in a structure of type DB_QUEUE_STAT. The
-following fields will be filled in:
+following fields will be filled in:</p>
<p><dl compact>
-<p><dt>u_int32_t qs_magic;<dd>Magic number that identifies the file as a Queue file.
-<dt>u_int32_t qs_version;<dd>The version of the Queue file type.
-<dt>u_int32_t qs_nkeys;<dd>The number of records in the database.
-<dt>u_int32_t qs_ndata;<dd>The number of records in the database.
-<dt>u_int32_t qs_pagesize;<dd>Underlying database page size.
+<dt>u_int32_t qs_magic;<dd>Magic number that identifies the file as a Queue file. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_version;<dd>The version of the Queue file type. Returned if DB_FAST_STAT
+is set.
+<dt>u_int32_t qs_nkeys;<dd>The number of records in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_ndata;<dd>The number of records in the database. If DB_FAST_STAT was
+specified the count will be the last saved value unless it has never
+been calculated, in which case it will be 0. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_pagesize;<dd>Underlying database page size, in bytes. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_extentsize;<dd>Underlying database extent size, in pages. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t qs_pages;<dd>Number of pages in the database.
-<dt>u_int32_t qs_re_len;<dd>The length of the records.
-<dt>u_int32_t qs_re_pad;<dd>The padding byte value for the records.
+<dt>u_int32_t qs_re_len;<dd>The length of the records. Returned if DB_FAST_STAT is set.
+<dt>u_int32_t qs_re_pad;<dd>The padding byte value for the records. Returned if
+DB_FAST_STAT is set.
<dt>u_int32_t qs_pgfree;<dd>Number of bytes free in database pages.
-<dt>u_int32_t qs_start;<dd>Start offset.
-<dt>u_int32_t qs_first_recno;<dd>First undeleted record in the database.
-<dt>u_int32_t qs_cur_recno;<dd>Last allocated record number in the database.
+<dt>u_int32_t qs_first_recno;<dd>First undeleted record in the database. Returned if
+DB_FAST_STAT is set.
+<dt>u_int32_t qs_cur_recno;<dd>Next available record number. Returned if DB_FAST_STAT is set.
+</dl>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
+<p><dl compact>
+<p><dt><a name="DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only the values which do not require traversal of the database.
+<p>Among other things, this flag makes it possible for applications to
+request key and record counts without incurring the performance penalty
+of traversing the entire database. If the underlying database is of
+type Recno, or of type Btree and the database was created with the
+<a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the count of keys will be exact. Otherwise,
+the count of keys will be the value saved the last time the database
+was traversed, or 0 if no count of keys has ever been made. If the
+underlying database is of type Recno, the count of data items will be
+exact, otherwise, the count of data items will be the value saved the
+last time the database was traversed, or 0 if no count of data items
+has ever been done.</p>
</dl>
-<p>The Db::stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Db::stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::stat method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+</dl>
+<h3>Errors</h3>
+<p>The Db::stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_sync.html b/db/docs/api_cxx/db_sync.html
index 170d99127..1618c2da6 100644
--- a/db/docs/api_cxx/db_sync.html
+++ b/db/docs/api_cxx/db_sync.html
@@ -1,20 +1,22 @@
-<!--$Id: db_sync.so,v 10.20 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_sync.so,v 10.35 2003/10/31 17:24:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::sync</h1>
+<h3>Db::sync</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,78 +26,54 @@
int
Db::sync(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::sync method flushes any cached information to disk.
+<hr size=1 noshade>
+<h3>Description: Db::sync</h3>
+<p>The Db::sync method flushes any cached information to disk.</p>
<p>If the database is in memory only, the Db::sync method has no effect and
-will always succeed.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>See <a href="../api_cxx/db_close.html">Db::close</a> for a discussion of Berkeley DB and cached data.
-<p>The Db::sync method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-Db::sync method was being called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, there may be no reason to call
-Db::sync.)
-<h1>Errors</h1>
-<p>The Db::sync method may fail and throw an exception or return a non-zero error for the following conditions:
+will always succeed.</p>
+<p><b>It is important to understand that flushing cached information to disk
+only minimizes the window of opportunity for corrupted data.</b> Although
+unlikely, it is possible for database corruption to happen if a system
+or application crash occurs while writing data to the database. To
+ensure that database corruption never occurs, applications must either:
+use transactions and logging with automatic recovery; use logging and
+application-specific recovery; or edit a copy of the database, and once
+all applications using the database have successfully called
+<a href="../api_cxx/db_close.html">Db::close</a>, atomically replace the original database with the
+updated copy.</p>
+<p>The Db::sync method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The Db::sync method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The Db::sync method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::sync method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_truncate.html b/db/docs/api_cxx/db_truncate.html
index 31f34448e..56b2b32b6 100644
--- a/db/docs/api_cxx/db_truncate.html
+++ b/db/docs/api_cxx/db_truncate.html
@@ -1,20 +1,22 @@
-<!--Id: db_truncate.so,v 1.6 2001/04/18 13:44:46 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 1.24 2003/12/03 15:11:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::truncate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>Db::truncate</h1>
+<h3>Db::truncate</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,93 +24,67 @@
#include &lt;db_cxx.h&gt;
<p>
int
-Db::truncate(const char *file,
- const char *database, u_int32_t *countp, u_int32_t flags);
+Db::truncate(DbTxn *txnid, u_int32_t *countp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Db::truncate interface empties the database specified by
-the <b>file</b> and <b>database</b> arguments, discarding all records
-it contains. If no <b>database</b> is specified, the underlying file
-represented by <b>file</b> is emptied.
+<hr size=1 noshade>
+<h3>Description: Db::truncate</h3>
+<p>The Db::truncate method empties the database, discarding all records
+it contains.
The number of records discarded from the database is returned in
-<b>countp</b>.
-<p>Truncate must have exclusive use of the database. While truncate is
-transaction-protected, it cannot be part of a application-created
-transaction.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>After Db::truncate has been called, regardless of its return,
-the <a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db::truncate method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
+<b>countp</b>.</p>
+<p>It is an error to call the Db::truncate method on a database with open
+cursors.</p>
+<p>The Db::truncate method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>countp</b><dd>
+The <b>countp</b> parameter references memory into which
+ the number of records discarded from the database is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a>, the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::truncate
-is affected by the configuration value DB_DATA_DIR.
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the Db::truncate call within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
</dl>
-<h1>Errors</h1>
-<p>The Db::truncate method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+(other than by specifying the DB_AUTO_COMMIT flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Errors</h3>
+<p>The Db::truncate method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
+<p><dt>EINVAL<dd>If there are open cursors in the database; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::truncate method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::truncate method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Db::truncate method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Db::truncate method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>, <a href="../api_cxx/db_err.html">Db::errx</a>
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>,
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_upgrade.html b/db/docs/api_cxx/db_upgrade.html
index 8cbc3561f..ff409f638 100644
--- a/db/docs/api_cxx/db_upgrade.html
+++ b/db/docs/api_cxx/db_upgrade.html
@@ -1,20 +1,22 @@
-<!--$Id: db_upgrade.so,v 10.18 2000/05/01 15:58:04 krinsky Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_upgrade.so,v 10.36 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::upgrade</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::upgrade</h1>
+<h3>Db::upgrade</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,112 +26,84 @@
int
Db::upgrade(const char *file, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::upgrade</h3>
<p>The Db::upgrade method upgrades all of the databases included in the
file <b>file</b>, if necessary. If no upgrade is necessary,
-Db::upgrade always returns success.
-<p><b>Database upgrades are done in place and are destructive, e.g., if pages
-need to be allocated and no disk space is available, the database may be
-left corrupted. Backups should be made before databases are upgraded.
-See <a href="../ref/am/upgrade.html">Upgrading databases</a> for more
-information.</b>
+Db::upgrade always returns success.</p>
+<p><b>Database upgrades are done in place and are destructive. For example,
+if pages need to be allocated and no disk space is available, the
+database may be left corrupted. Backups should be made before databases
+are upgraded. See <a href="../ref/am/upgrade.html">Upgrading databases</a>
+for more information.</b></p>
<p>Unlike all other database operations, Db::upgrade may only be done
-on a system with the same byte-order as the database.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+on a system with the same byte-order as the database.</p>
+<p>The Db::upgrade method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file containing the databases
+to be upgraded.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
<p><dt><a name="DB_DUPSORT">DB_DUPSORT</a><dd><b>This flag is only meaningful when upgrading databases from
releases before the Berkeley DB 3.1 release.</b>
-<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release, the
-on-disk format of duplicate data items changed. To correctly upgrade the
-format requires applications specify if duplicate data items in the
-database are sorted or not. Specifying the DB_DUPSORT flag
-informs Db::upgrade that the duplicates are sorted, otherwise they
-are assumed to be unsorted. Incorrectly specifying the value of this flag
-may lead to database corruption.
+<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release,
+the on-disk format of duplicate data items changed. To correctly
+upgrade the format requires applications to specify whether duplicate
+data items in the database are sorted or not. Specifying the
+DB_DUPSORT flag informs Db::upgrade that the duplicates
+are sorted; otherwise they are assumed to be unsorted. Incorrectly
+specifying the value of this flag may lead to database corruption.</p>
<p>Further, because the Db::upgrade method upgrades a physical file
-(including all of the databases it contains), it is not possible to use
-Db::upgrade to upgrade files where some of the databases it
-includes have sorted duplicate data items and some of the databases it
+(including all the databases it contains), it is not possible to use
+Db::upgrade to upgrade files in which some of the databases it
+includes have sorted duplicate data items, and some of the databases it
includes have unsorted duplicate data items. If the file does not have
-more than a single database, or the databases do not support duplicate
-data items, or all of the databases that support duplicate data items
+more than a single database, if the databases do not support duplicate
+data items, or if all of the databases that support duplicate data items
support the same style of duplicates (either sorted or unsorted),
-Db::upgrade will work correctly as long as the DB_DUPSORT
-flag is correctly specified. Otherwise, the file cannot be upgraded using
-Db::upgrade, and must be upgraded manually by dumping and
-re-loading the databases.
+Db::upgrade will work correctly as long as the
+DB_DUPSORT flag is correctly specified. Otherwise, the file
+cannot be upgraded using Db::upgrade; it must be upgraded
+manually by dumping and reloading the databases.</p>
</dl>
-<p>The Db::upgrade method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::upgrade
-is affected by the configuration value DB_DATA_DIR.
</dl>
-<h1>Errors</h1>
-<p>The Db::upgrade method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>Db::upgrade is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The Db::upgrade method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The database is not in the same byte-order as the system.
+<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be upgraded by this version of the Berkeley DB software.
</dl>
<p><dl compact>
-<p><dt><a name="DB_OLD_VERSION">DB_OLD_VERSION</a><dd>The database cannot be upgraded by this version of the Berkeley DB software.
+<p><dt>EINVAL<dd>If the database is not in the same byte-order as the system; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::upgrade method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::upgrade method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/db_verify.html b/db/docs/api_cxx/db_verify.html
index 7e742af4c..f0f74d572 100644
--- a/db/docs/api_cxx/db_verify.html
+++ b/db/docs/api_cxx/db_verify.html
@@ -1,20 +1,22 @@
-<!--$Id: db_verify.so,v 10.3 2000/04/11 15:13:51 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_verify.so,v 10.28 2003/11/08 19:17:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Db::verify</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Db::verify</h1>
+<h3>Db::verify</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,24 +27,57 @@ int
Db::verify(const char *file,
const char *database, ostream *outfile, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Db::verify</h3>
<p>The Db::verify method verifies the integrity of all databases in the
-file specified by the file argument, and optionally outputs the databases'
-key/data pairs to a file stream.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+file specified by the <b>file</b> parameter, and optionally outputs the
+databases' key/data pairs to the file stream specified by the
+<b>outfile</b> parameter.</p>
+<p><b>The Db::verify method does not perform any locking, even in Berkeley DB
+environments that are configured with a locking subsystem. As such, it
+should only be used on files that are not being modified by another
+thread of control.</b></p>
+<p>The Db::verify method may not be called after the <a href="../api_cxx/db_open.html">Db::open</a> method is called.
+</p>
+<p>The <a href="../api_cxx/db_class.html">Db</a> handle may not be accessed again after Db::verify is
+called, regardless of its return.</p>
+<a name="3"><!--meow--></a>
+<p>
+The Db::verify method will return DB_VERIFY_BAD if a database is
+corrupted. When the DB_SALVAGE flag is specified, the
+DB_VERIFY_BAD return means that all key/data pairs in the file
+may not have been successfully output.
+Unless otherwise specified, the Db::verify method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database in <b>file</b> on which
+the database checks for btree and duplicate sort order and for hashing
+are to be performed. See the DB_ORDERCHKONLY flag for more
+information.
+<p>The database parameter must be set to NULL except when the
+DB_ORDERCHKONLY flag is set.</p>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file in which the databases
+to be verified are found.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_SALVAGE">DB_SALVAGE</a><dd>Write the key/data pairs from all databases in the file to the file stream
-named in
-the <b>outfile</b> argument. The output format is the same as that
-specified for the <a href="../utility/db_dump.html">db_dump</a> utility and can be used as input for
-the <a href="../utility/db_load.html">db_load</a> utility.
+<p><dt><a name="DB_SALVAGE">DB_SALVAGE</a><dd>Write the key/data pairs from all databases in the file to the file
+stream named in the <b>outfile</b> parameter. The output format is the
+same as that specified for the <a href="../utility/db_dump.html">db_dump</a> utility, and can be used
+as input for the <a href="../utility/db_load.html">db_load</a> utility.
<p>Because the key/data pairs are output in page order as opposed to the sort
order used by <a href="../utility/db_dump.html">db_dump</a>, using Db::verify to dump key/data
-pairs normally produces less than optimal loads for Btree databases.
+pairs normally produces less than optimal loads for Btree databases.</p>
</dl>
<p>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the
-<b>flags</b> parameter:
+<b>flags</b> parameter:</p>
<p><dl compact>
<p><dt><a name="DB_AGGRESSIVE">DB_AGGRESSIVE</a><dd>Output <b>all</b> the key/data pairs in the file that can be found.
By default, Db::verify does not assume corruption. For example,
@@ -53,98 +88,67 @@ case, key/data pairs that are corrupted or have been deleted may appear
in the output (even if the file being salvaged is in no way corrupt), and
the output will almost certainly require editing before being loaded into
a database.
+<p><dt><a name="DB_PRINTABLE">DB_PRINTABLE</a><dd>When using the DB_SALVAGE flag, if characters in either the key
+or data items are printing characters (as defined by <b>isprint</b>(3)), use printing characters to represent them. This flag permits users
+to use standard text editors and tools to modify the contents of
+databases or selectively remove data from salvager output.
+<p>Note: different systems may have different notions about what characters
+are considered <i>printing characters</i>, and databases dumped in
+this manner may be less portable to external systems.</p>
<p><dt><a name="DB_NOORDERCHK">DB_NOORDERCHK</a><dd>Skip the database checks for btree and duplicate sort order and for
hashing.
<p>The Db::verify method normally verifies that btree keys and duplicate
-items are correctly sorted and hash keys are correctly hashed. If the
+items are correctly sorted, and hash keys are correctly hashed. If the
file being verified contains multiple databases using differing sorting
or hashing algorithms, some of them must necessarily fail database
-verification as only one sort order or hash function can be specified
-before Db::verify is called. To verify files with multiple
-databases having differing sorting orders or hashing functions, first
-perform verification of the file as a whole by using the
+verification because only one sort order or hash function can be
+specified before Db::verify is called. To verify files with
+multiple databases having differing sorting orders or hashing functions,
+first perform verification of the file as a whole by using the
DB_NOORDERCHK flag, and then individually verify the sort order
and hashing function for each database in the file using the
-DB_ORDERCHKONLY flag.
+DB_ORDERCHKONLY flag.</p>
<p><dt><a name="DB_ORDERCHKONLY">DB_ORDERCHKONLY</a><dd>Perform the database checks for btree and duplicate sort order and for
hashing, skipped by DB_NOORDERCHK.
-<p>When this flag is specified, a <b>database</b> argument should also be
+<p>When this flag is specified, a <b>database</b> parameter should also be
specified, indicating the database in the physical file which is to be
checked. This flag is only safe to use on databases that have already
successfully been verified using Db::verify with the
-DB_NOORDERCHK flag set.
+DB_NOORDERCHK flag set.</p>
</dl>
-<p>The database argument must be set to NULL except when the
-DB_ORDERCHKONLY flag is set.
-<p>The Db::verify method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and <a href="../ref/program/errorret.html#DB_VERIFY_BAD">DB_VERIFY_BAD</a> if a database is corrupted. When the
-DB_SALVAGE flag is specified, the <a href="../ref/program/errorret.html#DB_VERIFY_BAD">DB_VERIFY_BAD</a> return
-means that all key/data pairs in the file may not have been successfully
-output.
-<h1>Environment Variables</h1>
+<p><dt><b>outfile</b><dd>
+The <b>outfile</b> parameter is an optional file stream to which the
+databases' key/data pairs are written.
+</dl>
+<h3>Environment Variables</h3>
+<p>If the database was opened within a database environment, the
+environment variable <b>DB_HOME</b> may be used as the path of the
+database environment home.</p>
+<p>Db::verify is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_cxx/env_open.html">DbEnv::open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db::verify
-is affected by the configuration value DB_DATA_DIR.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<h1>Errors</h1>
-<p>The Db::verify method may fail and throw an exception or return a non-zero error for the following conditions:
+<p>The Db::verify method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If Db::verify was called after <a href="../api_cxx/db_open.html">Db::open</a>; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Db::verify method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db::verify method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_malloc.html">Db::set_malloc</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_realloc.html">Db::set_realloc</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_class.html b/db/docs/api_cxx/dbc_class.html
index ac8081d4a..6c581bc24 100644
--- a/db/docs/api_cxx/dbc_class.html
+++ b/db/docs/api_cxx/dbc_class.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_class.so,v 10.12 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_class.so,v 10.18 2003/05/09 20:14:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc</h1>
+<h3>Dbc</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,27 +25,20 @@
<p>
class Dbc { ... };
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Dbc class,
-which provides cursor support for the access methods in Db.
-<p>The Dbc functions are the library interface supporting sequential
-access to the records stored by the access methods of the Berkeley DB library.
-Cursors are created by calling the <a href="../api_cxx/db_cursor.html">Db::cursor</a> method which returns a
-pointer to a Dbc object.
-<h3>Class</h3>
-<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<hr size=1 noshade>
+<h3>Description: Dbc</h3>
+<p>The Dbc object is the handle for a cursor into a Berkeley DB database.
+The handle is not free-threaded. Cursor handles may be used by multiple
+threads, but only serially, that is, the application must serialize
+access to the Dbc handle.</p>
+<p>If the cursor is to be used to perform operations on behalf of a
+transaction, the cursor must be opened and closed within the context of
+that single transaction. Once <a href="../api_cxx/dbc_close.html">Dbc::close</a> has been called, the
+handle may not be accessed again, regardless of the method's return.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_close.html b/db/docs/api_cxx/dbc_close.html
index 881bc3f7d..97b660ba4 100644
--- a/db/docs/api_cxx/dbc_close.html
+++ b/db/docs/api_cxx/dbc_close.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_close.so,v 10.20 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 10.31 2003/10/31 17:24:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::close</h1>
+<h3>Dbc::close</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,45 +26,48 @@
int
Dbc::close(void);
</pre></h3>
-<h1>Description</h1>
-<p>The Dbc::close method discards the cursor.
+<hr size=1 noshade>
+<h3>Description: Dbc::close</h3>
+<p>The Dbc::close method discards the cursor.</p>
<p>It is possible for the Dbc::close method to return
<a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, signaling that any enclosing transaction should
be aborted. If the application is already intending to abort the
transaction, this error should be ignored, and the application should
-proceed.
-<p>Once Dbc::close has been called, regardless of its return, the
-cursor handle may not be used again.
-<p>The Dbc::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Dbc::close method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
-</dl>
+proceed.</p>
+<p>After Dbc::close has been called, regardless of its return, the
+cursor handle may not be used again.</p>
+<p>The Dbc::close method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Errors</h3>
+<p>The Dbc::close method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
+<p><dt>EINVAL<dd>If the cursor is already closed; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Dbc::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::close method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Dbc::close method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Dbc::close method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_count.html b/db/docs/api_cxx/dbc_count.html
index be8f6b8e6..85eae93c4 100644
--- a/db/docs/api_cxx/dbc_count.html
+++ b/db/docs/api_cxx/dbc_count.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_count.so,v 10.4 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_count.so,v 10.24 2003/10/31 17:24:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::count</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::count</h1>
+<h3>Dbc::count</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,36 +26,46 @@
int
Dbc::count(db_recno_t *countp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Dbc::count method returns a count of the number of duplicate data
-items for the key referenced by the
-cursor into the memory location referenced by <b>countp</b>.
-If the underlying database does not support duplicate data items the call
-will still succeed and a count of 1 will be returned.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>If the <b>cursor</b> argument is not yet initialized, the Dbc::count method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc::count method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Dbc::count method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::count method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
+<h3>Description: Dbc::count</h3>
+<p>The Dbc::count method returns a count of the number of data items for
+the key to which the cursor refers.</p>
+<p>The Dbc::count method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>countp</b><dd>
+The <b>countp</b> parameter references memory into which
+ the count of the number of duplicate data items is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The Dbc::count method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_del.html b/db/docs/api_cxx/dbc_del.html
index 18f6959a8..04d87effb 100644
--- a/db/docs/api_cxx/dbc_del.html
+++ b/db/docs/api_cxx/dbc_del.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_del.so,v 10.23 2000/05/22 20:51:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_del.so,v 10.43 2003/10/31 17:24:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::del</h1>
+<h3>Dbc::del</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,49 +26,70 @@
int
Dbc::del(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Dbc::del method deletes the key/data pair currently referenced by
-the cursor.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
+<hr size=1 noshade>
+<h3>Description: Dbc::del</h3>
+<p>The Dbc::del method deletes the key/data pair to which the cursor
+refers.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index using the <a href="../api_cxx/db_associate.html">Db::associate</a> method, the <a href="../api_cxx/db_del.html">Db::del</a> method
+deletes the key/data pair from the primary database and all secondary
+indices.</p>
<p>The cursor position is unchanged after a delete, and subsequent calls to
-cursor functions expecting the cursor to reference an existing key will
-fail.
-<p>If the element has already been deleted, Dbc::del will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the Dbc::del method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc::del method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Dbc::del method may fail and throw an exception or return a non-zero error for the following conditions:
+cursor functions expecting the cursor to refer to an existing key will
+fail.</p>
+<p>
+The Dbc::del method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if the element has already been deleted.
+Unless otherwise specified, the Dbc::del method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
+<h3>Errors</h3>
+<p>The Dbc::del method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
+</dl>
+<p><dl compact>
+<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag was
specified to <a href="../api_cxx/env_open.html">DbEnv::open</a>.
</dl>
-<p>The Dbc::del method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::del method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Dbc::del method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Dbc::del method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_dup.html b/db/docs/api_cxx/dbc_dup.html
index 5dec52e46..57584570c 100644
--- a/db/docs/api_cxx/dbc_dup.html
+++ b/db/docs/api_cxx/dbc_dup.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_dup.so,v 10.8 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_dup.so,v 10.30 2003/11/08 19:17:25 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::dup</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::dup</h1>
+<h3>Dbc::dup</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,53 +26,53 @@
int
Dbc::dup(Dbc **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Dbc::dup</h3>
<p>The Dbc::dup method creates a new cursor that uses the same transaction
and locker ID as the original cursor. This is useful when an application
is using locking and requires two or more cursors in the same thread of
-control.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+control.</p>
+<p>The Dbc::dup method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_POSITION">DB_POSITION</a><dd>The newly created cursor is initialized to reference the same position
+<p><dt><a name="DB_POSITION">DB_POSITION</a><dd>The newly created cursor is initialized to refer to the same position
in the database as the original cursor and hold the same locks. If the
DB_POSITION flag is not specified, then the created cursor is
uninitialized and will behave like a cursor newly created using
<a href="../api_cxx/db_cursor.html">Db::cursor</a>.
</dl>
-<p>When using the Berkeley DB Concurrent Data Store product, there can be only one active write cursor
-at a time. For this reason, attempting to duplicate a cursor for which
-the <a href="../api_cxx/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag was specified during creation will return
-an error.
-<p>If the <b>cursor</b> argument is not yet initialized, the Dbc::dup method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc::dup method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The Dbc::dup method may fail and throw an exception or return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The Dbc::dup method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <b>cursor</b> argument was created using the
-<a href="../api_cxx/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag in the Berkeley DB Concurrent Data Store product.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
-<p>The Dbc::dup method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::dup method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>EINVAL<dd>If the cursor has not been initialized; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_get.html b/db/docs/api_cxx/dbc_get.html
index d42a194e5..857ddda42 100644
--- a/db/docs/api_cxx/dbc_get.html
+++ b/db/docs/api_cxx/dbc_get.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_get.so,v 10.46 2001/01/19 17:29:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 10.108 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::get</h1>
+<h3>Dbc::get</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,92 +25,181 @@
<p>
int
Dbc::get(Dbt *key, Dbt *data, u_int32_t flags);
+<p>
+int
+Dbc::pget(Dbt *key, Dbt *pkey, Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: Dbc::get</h3>
+<a name="3"><!--meow--></a>
<p>The Dbc::get method retrieves key/data pairs from the database. The
address and length of the key
-are returned in the object referenced by <b>key</b> (except for the case
-of the DB_SET flag where the <b>key</b> object is unchanged),
-and the address and length of
-the data are returned in the object referenced by <b>data</b>.
+are returned in the object to which <b>key</b> refers (except for the
+case of the DB_SET flag, in which the <b>key</b> object is
+unchanged), and the address
+and length of the data are returned in the object to which <b>data</b>
+refers.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index using the <a href="../api_cxx/db_associate.html">Db::associate</a> method, the Dbc::get
+and Dbc::pget methods return the key from the secondary index and the
+data item from the primary database. In addition, the
+Dbc::pget method
+returns the key from the primary database. In databases that are not
+secondary indices, the
+Dbc::pget method
+will always fail.</p>
<p>Modifications to the database during a sequential scan will be reflected
-in the scan, i.e. records inserted behind a cursor will not be returned
-while records inserted in front of a cursor will be returned.
-<p>In Queue and Recno databases, missing entries (i.e., entries that were
-never explicitly created or that were created and then deleted), will be
-skipped during a sequential scan.
-<p>If multiple threads or processes insert items into the same database file
-without using locking, the results are undefined.
-For more detail,
-see <a href="../ref/am/stability.html">Cursor stability</a>.
-<p>The <b>flags</b> parameter must be set to one of the following values:
+in the scan; that is, records inserted behind a cursor will not be
+returned while records inserted in front of a cursor will be returned.</p>
+<p>In Queue and Recno databases, missing entries (that is, entries that
+were never explicitly created or that were created and then deleted)
+will be skipped during a sequential scan.</p>
+<p>Unless otherwise specified, the Dbc::get method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<p>If Dbc::get fails for any reason, the state of the cursor will be
+unchanged.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the key/data pair currently referenced by the cursor.
-<p>If the cursor key/data pair was deleted, Dbc::get will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the Dbc::get method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p><dt><a name="DB_FIRST">DB_FIRST</a>, <a name="DB_LAST">DB_LAST</a><dd>The cursor is set to reference the first (last) key/data pair of the
-database, and that pair is returned. In the presence of duplicate key
-values, the first (last) data item in the set of duplicates is returned.
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the key/data pair to which the cursor refers.
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if DB_CURRENT is set and the cursor key/data pair was deleted.
+</p>
+<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>The cursor is set to refer to the first key/data pair of the database,
+and that pair is returned. If the first key has duplicate values, the
+first data item in the set of duplicates is returned.
<p>If the database is a Queue or Recno database, Dbc::get using the
-DB_FIRST (DB_LAST) flags will ignore any keys that exist
-but were never explicitly created by the application or were created and
-later deleted.
-<p>If the database is empty, Dbc::get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+DB_FIRST flag will ignore any keys that exist but were never
+explicitly created by the application, or were created and later
+deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_FIRST is set and the database is empty.
+</p>
<p><dt><a name="DB_GET_BOTH">DB_GET_BOTH</a><dd>The DB_GET_BOTH flag is identical to the DB_SET flag,
-except that both the key and the data arguments must be matched by the
+except that both the key and the data parameters must be matched by the
key and data item in the database.
+<p>When used with the
+Dbc::pget method
+version of this method on a secondary index handle, both the
+secondary and primary keys must be matched by the secondary and primary
+key item in the database. It is an error to use the DB_GET_BOTH
+flag with the
+Dbc::get
+version of this method and a cursor that has been opened on a
+secondary index handle.</p>
+<p><dt><a name="DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a><dd>The DB_GET_BOTH_RANGE flag is identical to the DB_GET_BOTH
+flag, except that, in the case of any database supporting sorted
+duplicate sets, the returned key/data pair is the smallest data item
+greater than or equal to the specified data item (as determined by the
+comparison function), permitting partial matches and range searches in
+duplicate data sets.
<p><dt><a name="DB_GET_RECNO">DB_GET_RECNO</a><dd>Return the record number associated with the cursor. The record number
-will be returned in <b>data</b> as described in <a href="../api_cxx/dbt_class.html">Dbt</a>. The
+will be returned in <b>data</b>, as described in <a href="../api_cxx/dbt_class.html">Dbt</a>. The
<b>key</b> parameter is ignored.
<p>For DB_GET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
+of type Btree, and it must have been created with the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
+flag.</p>
+<p>When called on a cursor opened on a database that has been made into a
+secondary index, the
+Dbc::get and Dbc::pget methods return
+the record number of the primary database in <b>data</b>. In addition,
+the
+Dbc::pget method
+returns the record number of the secondary index in <b>pkey</b>. If
+either underlying database is not of type Btree or is not created with
+the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag, the out-of-band record number of 0 is
+returned.</p>
<p><dt><a name="DB_JOIN_ITEM">DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup key for
the primary database, but simply return it in the key parameter instead.
The data parameter is left unchanged.
<p>For DB_JOIN_ITEM to be specified, the underlying cursor must have
-been returned from the <a href="../api_cxx/db_join.html">Db::join</a> method.
-<p><dt><a name="DB_NEXT">DB_NEXT</a>, <a name="DB_PREV">DB_PREV</a><dd>If the cursor is not yet initialized, DB_NEXT (DB_PREV)
-is identical to DB_FIRST (DB_LAST). Otherwise, the cursor
-is moved to the next (previous) key/data pair of the database, and that
-pair is returned. In the presence of duplicate key values, the value of
-the key may not change.
+been returned from the <a href="../api_cxx/db_join.html">Db::join</a> method.</p>
+<p><dt><a name="DB_LAST">DB_LAST</a><dd>The cursor is set to refer to the last key/data pair of the database,
+and that pair is returned. If the last key has duplicate values, the
+last data item in the set of duplicates is returned.
+<p>If the database is a Queue or Recno database, Dbc::get using the
+DB_LAST flag will ignore any keys that exist but were never
+explicitly created by the application, or were created and later
+deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_LAST is set and the database is empty.
+</p>
+<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>If the cursor is not yet initialized, DB_NEXT is identical to
+DB_FIRST. Otherwise, the cursor is moved to the next key/data
+pair of the database, and that pair is returned. In the presence of
+duplicate key values, the value of the key may not change.
+<p>If the database is a Queue or Recno database, Dbc::get using the
+DB_NEXT flag will skip any keys that exist but were never
+explicitly created by the application, or those that were created and
+later deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT is set and the cursor is already on the last record
+in the database.
+</p>
+<p><dt><a name="DB_NEXT_DUP">DB_NEXT_DUP</a><dd>If the next key/data pair of the database is a duplicate data record for
+the current key/data pair, the cursor is moved to the next key/data pair
+of the database, and that pair is returned.
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT_DUP is set and the next key/data pair of the
+database is not a duplicate data record for the current key/data pair.
+</p>
+<p><dt><a name="DB_NEXT_NODUP">DB_NEXT_NODUP</a><dd>If the cursor is not yet initialized, DB_NEXT_NODUP is identical
+to DB_FIRST. Otherwise, the cursor is moved to the next
+non-duplicate key of the database, and that key/data pair is returned.
<p>If the database is a Queue or Recno database, Dbc::get using the
-DB_NEXT (DB_PREV) flag will skip any keys that exist but
-were never explicitly created by the application or were created and later
-deleted.
-<p>If the cursor is already on the last (first) record in the database,
-Dbc::get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p><dt><a name="DB_NEXT_DUP">DB_NEXT_DUP</a><dd>If the next key/data pair of the database is a duplicate record for the
-current key/data pair, the cursor is moved to the next key/data pair of
-the database, and that pair is returned. Otherwise, Dbc::get will
-return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-<p>If the cursor is not yet initialized, the Dbc::get method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p><dt><a name="DB_NEXT_NODUP">DB_NEXT_NODUP</a>, <a name="DB_PREV_NODUP">DB_PREV_NODUP</a><dd>If the cursor is not yet initialized, DB_NEXT_NODUP
-(DB_PREV_NODUP) is identical to DB_FIRST
-(DB_LAST). Otherwise, the cursor is moved to the next (previous)
-non-duplicate key/data pair of the database, and that pair is returned.
+DB_NEXT_NODUP flag will ignore any keys that exist but were
+never explicitly created by the application, or those that were created
+and later deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT_NODUP is set and no non-duplicate key/data pairs
+occur after the cursor position in the database.
+</p>
+<p><dt><a name="DB_PREV">DB_PREV</a><dd>If the cursor is not yet initialized, DB_PREV is identical to
+DB_LAST. Otherwise, the cursor is moved to the previous
+key/data pair of the database, and that pair is returned. In the
+presence of duplicate key values, the value of the key may not change.
+<p>If the database is a Queue or Recno database, Dbc::get using the
+DB_PREV flag will skip any keys that exist but were never
+explicitly created by the application, or those that were created and
+later deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV is set and the cursor is already on the first record
+in the database.
+</p>
+<p><dt><a name="DB_PREV_NODUP">DB_PREV_NODUP</a><dd>If the cursor is not yet initialized, DB_PREV_NODUP is identical
+to DB_LAST. Otherwise, the cursor is moved to the previous
+non-duplicate key of the database, and that key/data pair is returned.
<p>If the database is a Queue or Recno database, Dbc::get using the
-DB_NEXT_NODUP (DB_PREV_NODUP) flags will ignore any keys
-that exist but were never explicitly created by the application or were
-created and later deleted.
-<p>If no non-duplicate key/data pairs occur after (before) the cursor
-position in the database, Dbc::get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+DB_PREV_NODUP flag will ignore any keys that exist but were
+never explicitly created by the application, or those that were created
+and later deleted.</p>
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV_NODUP is set and no non-duplicate key/data pairs
+occur before the cursor position in the database.
+</p>
<p><dt><a name="DB_SET">DB_SET</a><dd>Move the cursor to the specified key/data pair of the database, and
return the datum associated with the given key.
-<p>In the presence of duplicate key values, Dbc::get will return the
+<p>
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_SET is set and
+no matching keys are found.
+The Dbc::get method will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> if DB_SET is set and the database is a
+Queue or Recno database, and the specified key exists, but was never
+explicitly created by the application or was later deleted.
+In the presence of duplicate key values, Dbc::get will return the
first data item for the given key.
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-Dbc::get will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
-<p>If no matching keys are found, Dbc::get will return
-<a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
+</p>
<p><dt><a name="DB_SET_RANGE">DB_SET_RANGE</a><dd>The DB_SET_RANGE flag is identical to the DB_SET flag,
-except that the key is returned as well as the data item, and, in the case
-of the Btree access method, the returned key/data pair is the smallest
+except that in the case of the Btree access method, the key is returned
+as well as the data item and the returned key/data pair is the smallest
key greater than or equal to the specified key (as determined by the
-comparison method), permitting partial key matches and range
+Btree comparison function), permitting partial key matches and range
searches.
<p><dt><a name="DB_SET_RECNO">DB_SET_RECNO</a><dd>Move the cursor to the specific numbered record of the database, and
return the associated key/data pair. The <b>data</b> field of the
@@ -117,54 +208,136 @@ must be a pointer to a memory location from which a <a href="../api_cxx/dbt_clas
may be read, as described in <a href="../api_cxx/dbt_class.html">Dbt</a>. This memory location will be
read to determine the record to be retrieved.
<p>For DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
-flag.
+of type Btree, and it must have been created with the <a href="../api_cxx/db_set_flags.html#DB_RECNUM">DB_RECNUM</a>
+flag.</p>
</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
+In addition, the following flags may be set by
+bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:
<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Read modified but not yet committed data. Silently ignored if the
+<a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag was not specified when the underlying
+database was opened.
+<p><dt><a name="DB_MULTIPLE">DB_MULTIPLE</a><dd>Return multiple data items in the <b>data</b> parameter.
+<p>In the case of Btree or Hash databases, duplicate data items for the
+current key, starting at the current cursor position, are entered into
+the buffer. Subsequent calls with both the DB_NEXT_DUP and
+DB_MULTIPLE flags specified will return additional duplicate
+data items associated with the current key or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if
+there are no additional duplicate data items to return. Subsequent
+calls with both the DB_NEXT and DB_MULTIPLE flags
+specified will return additional duplicate data items associated with
+the current key or if there are no additional duplicate data items will
+return the next key and its data items or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if there
+are no additional keys in the database.</p>
+<p>In the case of Queue or Recno databases, data items starting at the
+current cursor position are entered into the buffer. The record number
+of the first record will be returned in the <b>key</b> parameter. The
+record number of each subsequent returned record must be calculated from
+this value. Subsequent calls with the DB_MULTIPLE flag
+specified will return additional data items or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if
+there are no additional data items to return.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The multiple data items can be iterated over using the
+<a href="../api_cxx/dbt_bulk_class.html">DbMultipleDataIterator</a> class.</p>
+<p>The DB_MULTIPLE flag may only be used with the
+DB_CURRENT, DB_FIRST, DB_GET_BOTH,
+DB_GET_BOTH_RANGE, DB_NEXT, DB_NEXT_DUP,
+DB_NEXT_NODUP, DB_SET, DB_SET_RANGE, and
+DB_SET_RECNO options. The DB_MULTIPLE flag may not be
+used when accessing databases made into secondary indices using the
+<a href="../api_cxx/db_associate.html">Db::associate</a> method.</p>
+<p><dt><a name="DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a><dd>Return multiple key and data pairs in the <b>data</b> parameter.
+<p>Key and data pairs, starting at the current cursor position, are entered
+into the buffer. Subsequent calls with both the DB_NEXT and
+DB_MULTIPLE flags specified will return additional key and data
+pairs or <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if there are no additional key and data
+items to return.</p>
+<p>In the case of Btree or Hash databases,
+the multiple key and data pairs can be iterated over using the
+<a href="../api_cxx/dbt_bulk_class.html">DbMultipleKeyDataIterator</a> class.</p>
+<p>In the case of Queue or Recno databases,
+the multiple record number and data pairs can be iterated over using the
+<a href="../api_cxx/dbt_bulk_class.html">DbMultipleRecnoDataIterator</a> class.</p>
+<p>The buffer to which the <b>data</b> parameter refers must be provided
+from user memory (see <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>). The buffer must be at
+least as large as the page size of the underlying database, aligned for
+unsigned integer access, and be a multiple of 1024 bytes in size. If
+the buffer size is insufficient, then upon return from the call the size
+field of the <b>data</b> parameter will have been set to an estimated
+buffer size, and the error ENOMEM is returned. (The size is an estimate as the
+exact size needed may not be known until all entries are read. It is
+best to initially provide a relatively large buffer, but applications
+should be prepared to resize the buffer as necessary and repeatedly call
+the method.)</p>
+<p>The DB_MULTIPLE_KEY flag may only be used with the
+DB_CURRENT, DB_FIRST, DB_GET_BOTH,
+DB_GET_BOTH_RANGE, DB_NEXT, DB_NEXT_DUP,
+DB_NEXT_NODUP, DB_SET, DB_SET_RANGE, and
+DB_SET_RECNO options. The DB_MULTIPLE_KEY flag may not
+be used when accessing databases made into secondary indices using the
+<a href="../api_cxx/db_associate.html">Db::associate</a> method.</p>
<p><dt><a name="DB_RMW">DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
+Setting this flag can eliminate deadlock during a read-modify-write
+cycle by acquiring the write lock during the read part of the cycle so
+that another thread of control acquiring a read lock for the same item,
+in its own read-modify-write cycle, will not result in deadlock.
</dl>
-<p>Otherwise, the Dbc::get method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<p>If Dbc::get fails for any reason, the state of the cursor will be
-unchanged.
-<h1>Errors</h1>
-<p>The Dbc::get method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>pkey</b><dd>
+The secondary index key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+</dl>
+<h3>Errors</h3>
+<p>The Dbc::get method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>There was insufficient memory to return the requested item.
+<p><dt>DB_SECONDARY_BAD<dd>A secondary index references a nonexistent primary key.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cursor was not currently initialized.
+<p><dt>EINVAL<dd>If the DB_CURRENT or DB_NEXT_DUP flags were specified and
+the cursor has not been initialized;
+the
+Dbc::pget method
+was called with a cursor that does not refer to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The Dbc::get method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::get method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Dbc::get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Dbc::get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the requested item could not be returned due to insufficient memory, the Dbc::get method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_list.html b/db/docs/api_cxx/dbc_list.html
index 99682459d..5668c167b 100644
--- a/db/docs/api_cxx/dbc_list.html
+++ b/db/docs/api_cxx/dbc_list.html
@@ -1,17 +1,17 @@
-<!--Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Database Cursors and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Cursors and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Database Cursors and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/db_cursor.html">Db::cursor</a></td><td>Create a cursor handle</td></tr>
<tr><td><a href="../api_cxx/dbc_close.html">Dbc::close</a></td><td>Close a cursor</td></tr>
@@ -22,6 +22,6 @@
<tr><td><a href="../api_cxx/dbc_get.html">Dbc::pget</a></td><td>Retrieve by cursor</td></tr>
<tr><td><a href="../api_cxx/dbc_put.html">Dbc::put</a></td><td>Store by cursor</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbc_put.html b/db/docs/api_cxx/dbc_put.html
index 05a95cd36..ca9eb3729 100644
--- a/db/docs/api_cxx/dbc_put.html
+++ b/db/docs/api_cxx/dbc_put.html
@@ -1,20 +1,22 @@
-<!--$Id: dbc_put.so,v 10.33 2000/12/04 17:02:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 10.56 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbc::put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbc::put</h1>
+<h3>Dbc::put</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,12 +26,27 @@
int
Dbc::put(Dbt *key, Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The Dbc::put method stores key/data pairs into the database.
-<p>The <b>flags</b> parameter must be set to one of the following values:
+<hr size=1 noshade>
+<h3>Description: Dbc::put</h3>
+<p>The Dbc::put method stores key/data pairs into the database.</p>
+<p>Unless otherwise specified, the Dbc::put method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<p>If Dbc::put fails for any reason, the state of the cursor will be
+unchanged. If Dbc::put succeeds and an item is inserted into the
+database, the cursor is always positioned to refer to the newly inserted
+item.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_AFTER">DB_AFTER</a><dd>In the case of the Btree and Hash access methods, insert the data
-element as a duplicate element of the key referenced by the cursor.
+element as a duplicate element of the key to which the cursor refers.
The new element appears immediately after the current cursor position.
It is an error to specify DB_AFTER if the underlying Btree or
Hash database does not support duplicate data items. The <b>key</b>
@@ -39,47 +56,39 @@ DB_AFTER if the underlying Recno database was not created with
the <a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag. If the <a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag was
specified, a new key is created, all records after the inserted item
are automatically renumbered, and the key of the new record is returned
-in the structure referenced by the parameter <b>key</b>. The initial
+in the structure to which the <b>key</b> parameter refers. The initial
value of the <b>key</b> parameter is ignored. See <a href="../api_cxx/db_open.html">Db::open</a>
-for more information.
-<p>The DB_AFTER flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc::put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, the Dbc::put function will return EINVAL.
-<p><dt><a name="DB_BEFORE">DB_BEFORE</a><dd>In the case of the Btree and Hash access methods, insert the data element
-as a duplicate element of the key referenced by the cursor. The new
-element appears immediately before the current cursor position. It is
-an error to specify DB_BEFORE if the underlying Btree or Hash
-database does not support duplicate data items. The <b>key</b>
+for more information.</p>
+<p>The DB_AFTER flag may not be specified to the Queue access method.</p>
+<p>
+The Dbc::put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the
+underlying access method is Hash.
+</p>
+<p><dt><a name="DB_BEFORE">DB_BEFORE</a><dd>In the case of the Btree and Hash access methods, insert the data
+element as a duplicate element of the key to which the cursor refers.
+The new element appears immediately before the current cursor position.
+It is an error to specify DB_BEFORE if the underlying Btree or
+Hash database does not support duplicate data items. The <b>key</b>
parameter is ignored.
<p>In the case of the Recno access method, it is an error to specify
DB_BEFORE if the underlying Recno database was not created with
the <a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag. If the <a href="../api_cxx/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag was
specified, a new key is created, the current record and all records
after it are automatically renumbered, and the key of the new record is
-returned in the structure referenced by the parameter <b>key</b>. The
-initial value of the <b>key</b> parameter is ignored. See
-<a href="../api_cxx/db_open.html">Db::open</a> for more information.
-<p>The DB_BEFORE flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc::put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, Dbc::put will return EINVAL.
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Overwrite the data of the key/data pair referenced by the cursor with the
-specified data item. The <b>key</b> parameter is ignored.
-<p>If a duplicate sort function has been specified and the data item of the
-current referenced key/data pair does not compare equally to the <b>data</b>
-parameter, Dbc::put will return EINVAL.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc::put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>.
-If the underlying access method is Btree, Queue or Recno, the operation
-will succeed.
-<p>If the cursor is not yet initialized, Dbc::put will return EINVAL.
+returned in the structure to which the <b>key</b> parameter refers.
+The initial value of the <b>key</b> parameter is ignored. See
+<a href="../api_cxx/db_open.html">Db::open</a> for more information.</p>
+<p>The DB_BEFORE flag may not be specified to the Queue access method.</p>
+<p>
+The Dbc::put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the underlying
+access method is Hash.
+</p>
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Overwrite the data of the key/data pair to which the cursor refers with
+the specified data item. The <b>key</b> parameter is ignored.
+<p>
+The Dbc::put method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if the current cursor record has already been deleted and the underlying
+access method is Hash.
+</p>
<p><dt><a name="DB_KEYFIRST">DB_KEYFIRST</a><dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the underlying database supports duplicate data items, and if the
@@ -87,9 +96,9 @@ key already exists in the database and a duplicate sort function has
been specified, the inserted data item is added in its sorted location.
If the key already exists in the database and no duplicate sort function
has been specified, the inserted data item is added as the first of the
-data items for that key.
+data items for that key.</p>
<p>The DB_KEYFIRST flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
<p><dt><a name="DB_KEYLAST">DB_KEYLAST</a><dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the underlying database supports duplicate data items, and if the
@@ -97,62 +106,70 @@ key already exists in the database and a duplicate sort function has
been specified, the inserted data item is added in its sorted location.
If the key already exists in the database, and no duplicate sort
function has been specified, the inserted data item is added as the last
-of the data items for that key.
+of the data items for that key.</p>
<p>The DB_KEYLAST flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
<p><dt><a name="DB_NODUPDATA">DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, insert the specified
-key/data pair into the database unless it already exists in the database.
-If the key/data pair already appears in the database, <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a>
-is returned. The DB_NODUPDATA flag may only be specified if
-the underlying database has been configured to support sorted duplicate
-data items.
+key/data pair into the database, unless a key/data pair comparing
+equally to it already exists in the database. If a matching key/data
+pair already exists in the database, <a href="../api_cxx/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> is returned.
+The DB_NODUPDATA flag may only be specified if the underlying
+database has been configured to support sorted duplicate data items.
<p>The DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
</dl>
-<p>Otherwise, the Dbc::put method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<p>If Dbc::put fails for any reason, the state of the cursor will be
-unchanged. If Dbc::put succeeds and an item is inserted into the
-database, the cursor is always positioned to reference the newly inserted
-item.
-<h1>Errors</h1>
-<p>The Dbc::put method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p><dt><b>key</b><dd>
+The key <a href="../api_cxx/dbt_class.html">Dbt</a> operated on.
</dl>
+<h3>Errors</h3>
+<p>The Dbc::put method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_BEFORE or DB_AFTER flags were specified, and the
-underlying access method is Queue.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
+<p><dt>DB_REP_HANDLE_DEAD<dd>The database handle has been invalidated because a replication election
+unrolled a committed transaction.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the DB_AFTER, DB_BEFORE or DB_CURRENT flags
+were specified and the cursor has not been initialized;
+the DB_AFTER or DB_BEFORE flags were specified and a
+duplicate sort function has been specified;
+the DB_CURRENT flag was specified, a duplicate sort function has
+been specified, and the data item of the referenced key/data pair does
+not compare equally to the <b>data</b> parameter;
+the DB_AFTER or DB_BEFORE flags were specified, and the
+underlying access method is Queue;
+an attempt was made to add a record to a fixed-length database that was too
+large to fit;
+an attempt was made to add a record to a secondary index; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_cxx/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag was
specified to <a href="../api_cxx/env_open.html">DbEnv::open</a>.
</dl>
-<p>The Dbc::put method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc::put method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the Dbc::put method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the Dbc::put method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
<a href="../api_cxx/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_cxx/dbc_close.html">Dbc::close</a>,
-<a href="../api_cxx/dbc_count.html">Dbc::count</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>,
-<a href="../api_cxx/dbc_dup.html">Dbc::dup</a>,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>
-and
-<a href="../api_cxx/dbc_put.html">Dbc::put</a>.
+<h3>See Also</h3>
+<a href="../api_cxx/dbc_list.html">Database Cursors and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/dbt_bulk.html b/db/docs/api_cxx/dbt_bulk.html
deleted file mode 100644
index aabb547d6..000000000
--- a/db/docs/api_cxx/dbt_bulk.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--Id: dbt_bulk.so,v 10.5 2001/05/05 01:49:13 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DBT</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DBT: Bulk Retrieval</h1>
-</td>
-<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
- <a name="3"><!--meow--></a>
-<p>If either of the DB_MULTIPLE or DB_MULTIPLE_KEY flags
-were specified to the <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> methods, the data
-<a href="../api_cxx/dbt_class.html">Dbt</a> returned by those interfaces will refer to a buffer that
-is filled with data. Access to that data is through the following
-macros:
-<p><dl compact>
-<p><dt><a name="DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a><dd><pre>DB_MULTIPLE_INIT(void *pointer, <a href="../api_cxx/dbt_class.html">Dbt</a> *data);</pre>
-<p>Initialize the retrieval. The <b>pointer</b> argument is a variable
-to be initialized. The <b>data</b> argument is a <a href="../api_cxx/dbt_class.html">Dbt</a> structure
-returned from a successful call to <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a>
-for which one of the DB_MULTIPLE or DB_MULTIPLE_KEY
-flags was specified.
-<p><dt><a name="DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a><dd><pre>DB_MULTIPLE_NEXT(void *pointer, <a href="../api_cxx/dbt_class.html">Dbt</a> *data, void *retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_cxx/dbt_class.html">Dbt</a> structure returned from a
-successful call to <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> for which the
-DB_MULTIPLE flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>retdata</b> argument is set to
-refer to the next data element in the returned set, and the
-<b>retdlen</b> argument is set to the length, in bytes, of that data
-element. When used with the Queue and Recno access methods,
-<b>retdata</b> will be set to NULL for deleted records. The
-<b>pointer</b> argument is set to NULL if there are no more data
-elements in the returned set.
-<p><dt><a name="DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a><dd><pre>DB_MULTIPLE_KEY_NEXT(void *pointer, <a href="../api_cxx/dbt_class.html">Dbt</a> *data,
- void *retkey, size_t retklen, void *retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_cxx/dbt_class.html">Dbt</a> structure returned from a
-successful call to <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> for which the
-DB_MULTIPLE_KEY flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>retkey</b> argument is set to
-refer to the next key element in the returned set, and the
-<b>retklen</b> argument is set to the length, in bytes, of that key
-element. The <b>retdata</b> argument is set to refer to the next data
-element in the returned set, and the <b>retdlen</b> argument is set to
-the length, in bytes, of that data element. The <b>pointer</b> and
-argument is set to NULL if there are no more key/data pairs in the
-returned set.
-<p><dt><a name="DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a><dd><pre>DB_MULTIPLE_RECNO_NEXT(void *pointer, <a href="../api_cxx/dbt_class.html">Dbt</a> *data,
- db_recno_t recno, void * retdata, size_t retdlen);</pre>
-<p>The <b>data</b> argument is a <a href="../api_cxx/dbt_class.html">Dbt</a> structure returned from a
-successful call to <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> for which the
-DB_MULTIPLE_KEY flag was specified. The <b>pointer</b> and
-<b>data</b> arguments must have been previously initialized by a call
-to DB_MULTIPLE_INIT. The <b>recno</b> argument is set to the
-record number of the next record in the returned set. The
-<b>retdata</b> argument is set to refer to the next data element in
-the returned set, and the <b>retdlen</b> argument is set to the length,
-in bytes, of that data element. When used with the Queue and Recno
-access methods, <b>retdata</b> will be set to NULL for deleted
-records. The <b>pointer</b> argument is set to NULL if there are
-no more key/data pairs in the returned set.
-</dl>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_cxx/dbt_bulk_class.html b/db/docs/api_cxx/dbt_bulk_class.html
new file mode 100644
index 000000000..6bc40670c
--- /dev/null
+++ b/db/docs/api_cxx/dbt_bulk_class.html
@@ -0,0 +1,172 @@
+<!--$Id: dbt_bulk_class.so,v 1.14 2003/11/20 03:37:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: Bulk Retrieval API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>Bulk Retrieval API</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+class DbMultipleDataIterator
+{
+public:
+ DbMultipleDataIterator(const Dbt &dbt);
+<p>
+ bool next(Dbt &data);
+};
+<p>
+class DbMultipleKeyDataIterator
+{
+public:
+ DbMultipleKeyDataIterator(const Dbt &dbt);
+<p>
+ bool next(Dbt &key, Dbt &data);
+};
+<p>
+class DbMultipleRecnoDataIterator
+{
+public:
+ DbMultipleRecnoDataIterator(const Dbt &dbt);
+<p>
+ bool next(db_recno_t &key, Dbt &data);
+};
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: Bulk Retrieval API</h3>
+<p>If either of the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> or <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flags
+were specified to the <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> method, the data
+<a href="../api_cxx/dbt_class.html">Dbt</a> returned by those interfaces will refer to a buffer that
+is filled with data. Access to that data is through the following
+classes.</p>
+<p>All instances of the bulk retrieval classes may be used only once, and
+to traverse the bulk retrieval buffer in the forward direction only.
+However, they are nondestructive, so multiple iterators can be
+instantiated and used on the same returned data <a href="../api_cxx/dbt_class.html">Dbt</a>.</p>
+<hr size=1 noshade>
+<h3>Description: DbMultipleIterator</h3>
+<p>The <a href="../api_cxx/dbt_bulk_class.html">DbMultipleIterator</a> is a shared package-private base class
+for the three types of bulk-return Iterator; it should never be
+instantiated directly, but it handles the functionality shared by its
+subclasses.</p>
+<hr size=1 noshade>
+<h3>Description: DbMultipleDataIterator</h3>
+<p>The DbMultipleDataIterator class is used to iterate through data
+returned using the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> flag from a database belonging
+to any access method.</p>
+<p>The constructor takes the data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a>
+flag.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbt</b><dd>
+The <b>dbt</b> parameter is a data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a>
+flag.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMultipleDataIterator.next</h3>
+<p>The DbMultipleDataIterator.next method takes a <a href="../api_cxx/dbt_class.html">Dbt</a> that will be
+filled in with a reference to a buffer, a size, and an offset that
+together yield the next data item in the original bulk retrieval buffer.</p>
+<p>The DbMultipleDataIterator.next method returns false if no more data are
+available, and true otherwise.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter is a <a href="../api_cxx/dbt_class.html">Dbt</a> that will be filled in with
+a reference to a buffer, a size, and an offset that together yield the
+next data item in the original bulk retrieval buffer.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMultipleKeyDataIterator</h3>
+<p>The DbMultipleKeyDataIterator class is used to iterate through
+data returned using the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flag from a database
+belonging to the Btree or Hash access methods.</p>
+<p>The constructor takes the data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbt</b><dd>
+The <b>dbt</b> parameter is a data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMultipleKeyDataIterator.next</h3>
+<p>The DbMultipleKeyDataIterator.next method takes two <a href="../api_cxx/dbt_class.html">Dbt</a>s, one
+for a key and one for a data item, that will each be filled in with a
+reference to a buffer, a size, and an offset that together yield the
+next key and data item in the original bulk retrieval buffer. The
+DbMultipleKeyDataIterator.next method returns false if no more data are
+available, and true otherwise.</p>
+<p>The DbMultipleKeyDataIterator.next method returns false if no more data
+are available, and true otherwise.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The <b>key</b> parameter will be filled in with a reference to a buffer,
+a size, and an offset that yields the next key item in the original bulk
+retrieval buffer.
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter will be filled in with a reference to a buffer,
+a size, and an offset that yields the next data item in the original bulk
+retrieval buffer.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMultipleRecnoDataIterator</h3>
+<p>This class is used to iterate through data returned using the
+<a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flag from a database belonging to the Recno or
+Queue access methods.</p>
+<p>The constructor takes the data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbt</b><dd>
+The <b>dbt</b> parameter is a data <a href="../api_cxx/dbt_class.html">Dbt</a> returned by the call to
+<a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> that used the <a href="../api_cxx/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
+flag.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMultipleRecnoDataIterator.next</h3>
+The DbMultipleRecnoDataIterator.next method takes a <b>db_recno_t</b>
+for the key and a <a href="../api_cxx/dbt_class.html">Dbt</a> for a data item, which will be filled in
+with a pointer to a buffer and a size. Together they yield the next key
+and data item in the original bulk retrieval buffer.
+<p>The DbMultipleRecnoDataIterator.next method returns false if no more
+data are available, and true otherwise.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>key</b><dd>
+The <b>key</b> parameter will be filled in with a reference to a
+buffer, a size, and an offset that yields the next key item in the
+original bulk retrieval buffer.
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter will be filled in with a reference to a
+buffer, a size, and an offset that yields the next data item in the
+original bulk retrieval buffer.
+</dl>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/dbt_class.html b/db/docs/api_cxx/dbt_class.html
index 24d18c60e..3628a3fd7 100644
--- a/db/docs/api_cxx/dbt_class.html
+++ b/db/docs/api_cxx/dbt_class.html
@@ -1,20 +1,23 @@
-<!--$Id: dbt_class.so,v 10.33 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbt_class.so,v 10.1 2002/08/24 18:22:30 bostic Exp $-->
+<!--$Id: dbt_cxx.so,v 10.66 2003/11/08 19:17:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Dbt</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>Dbt</h1>
+<h3>Dbt</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,6 +26,12 @@
<p>
class Dbt {
public:
+ Dbt(void *data, size_t size);
+ Dbt();
+ Dbt(const Dbt &);
+ Dbt &operator = (const Dbt &);
+ ~Dbt();
+<p>
void *get_data() const;
void set_data(void *);
<p>
@@ -41,103 +50,195 @@ public:
u_int32_t get_flags() const;
void set_flags(u_int32_t);
<p>
- Dbt(void *data, size_t size);
- Dbt();
- Dbt(const Dbt &);
- Dbt &operator = (const Dbt &);
- ~Dbt();
+ DBT *Dbt::get_DBT();
+ const DBT *Dbt::get_const_DBT() const;
+ static Dbt *Dbt::get_Dbt(DBT *dbt);
+ static const Dbt *Dbt::get_const_Dbt(const DBT *dbt);
};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Dbt class,
-used to encode keys and data items in a database.
- <a name="3"><!--meow--></a>
+<hr size=1 noshade>
+<h3>Description: Dbt</h3>
+<p>This information describes the specific details of the Dbt class,
+used to encode keys and data items in a database.</p>
+<a name="3"><!--meow--></a>
<h3>Key/Data Pairs</h3>
-<p>Storage and retrieval for the Db access methods are based on
+<p>Storage and retrieval for the <a href="../api_cxx/db_class.html">Db</a> access methods are based on
key/data pairs. Both key and data items are represented by Dbt
-objects. Key and data byte strings may reference strings of zero length
+objects. Key and data byte strings may refer to strings of zero length
up to strings of essentially unlimited length. See
-<a href="../ref/program/dbsizes.html">Database limits</a> for more
-information.
-<p>The Dbt class provides simple access to an underlying data structure,
-whose elements can be examined or changed using the <b>set_</b> or
-<b>get_</b> methods. The remainder of the manual page sometimes refers
-to these accesses using the underlying name, e.g., simply <b>ulen</b>
-instead of Dbt::get_ulen and Dbt::set_ulen.
-Dbt can be subclassed, providing a way to associate
-with it additional data, or references to other structures.
+<a href="../ref/am_misc/dbsizes.html">Database limits</a> for more
+information.</p>
+<p>The Dbt class provides simple access to an underlying data
+structure, whose elements can be examined or changed using the usual
+<b>set</b> or <b>get</b> methods. Dbt can be subclassed,
+providing a way to associate with it additional data or references to
+other structures.</p>
<p>The constructors set all elements of the underlying structure to zero.
-The constructor with two arguments has the effect of setting all elements
-to zero except for the specified <b>data</b> and <b>size</b> elements.
-<p>In the case where the <b>flags</b> structure element is 0, when the
-application is providing Berkeley DB a key or data item to store into the
-database, Berkeley DB expects the <b>data</b> object to point to a byte string
-of <b>size</b> bytes. When returning a key/data item to the application,
-Berkeley DB will store into the <b>data</b> object a pointer to a byte string
-of <b>size</b> bytes, and the memory referenced by the pointer will be
-allocated and managed by Berkeley DB.
-<p>The elements of the structure underlying the Dbt class are defined as follows:
+The constructor with two parameters has the effect of setting all elements
+to zero except for the <b>data</b> and <b>size</b> elements.</p>
+<p>In the case in which the <b>flags</b> structure element is set to 0, when
+the application is providing Berkeley DB a key or data item to store into the
+database, Berkeley DB expects the <b>data</b> object to point to a byte
+string of <b>size</b> bytes. When returning a key/data item to the
+application, Berkeley DB will store into the <b>data</b> object a pointer to
+a byte string of <b>size</b> bytes, and the memory to which the pointer
+refers will be allocated and managed by Berkeley DB.</p>
+<p>Access to Dbt objects is not re-entrant. In particular, if
+multiple threads simultaneously access the same Dbt object using
+<a href="../api_cxx/db_class.html">Db</a> API calls, the results are undefined, and may result in a
+crash. One easy way to avoid problems is to use Dbt objects
+that are
+constructed as stack variables.</p>
+<p>Each Dbt object has an associated DBT struct, which is used by
+the underlying implementation of Berkeley DB and its C-language API. The
+Dbt::get_DBT method returns a pointer to this struct. Given a const
+Dbt object, Dbt::get_const_DBT returns a const pointer to the
+same struct.</p>
+<p>Given a DBT struct, the Dbt::get_Dbt method returns the corresponding
+Dbt object, if there is one. If the DBT object was not
+associated with a Dbt (that is, it was not returned from a call
+to Dbt::get_DBT), then the result of Dbt::get_Dbt is undefined. Given
+a const DBT struct, Dbt::get_const_Dbt returns the associated const
+Dbt object, if there is one.</p>
+<p>These methods may be useful for Berkeley DB applications including both C
+and C++ language software. It should not be necessary to use these
+calls in a purely C++ application.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_data</h3>
+<p>Set the data array.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter is an array of bytes to be used to set the
+content for the Dbt.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_data</h3>
+<p>Return the data array.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_recno_key_data</h3>
+<p>Initialize the data array from a logical record number. Recno database
+records are ordered by integer keys starting at 1. When the
+Dbt::set_recno_key_data method is called, the data, size and offset
+fields in the Dbt are implicitly set to hold a byte array representation
+of the integer key.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>recno</b><dd>
+The <b>recno</b> parameter logical record number used to initialize the
+data array.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_recno_key_data</h3>
+<p>Return an object from the data array, expecting that data to be a
+logical record number.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_offset</h3>
+<p>Set the byte offset into the data array.</p>
+<p>The number of bytes offset into the <b>data</b> array determine the
+portion of the array actually used. This element is accessed using
+Dbt::get_offset and Dbt::set_offset.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>void *<a name="data">data</a>;<dd>A pointer to a byte string.
-This element is accessed using Dbt::get_data and
-Dbt::set_data, and may be initialized using one
-of the constructors.
-<p><dt>int offset;<dd>The number of bytes offset into the <b>data</b> array to determine the
-portion of the array actually used.
-This element is accessed using Dbt::get_offset and
-Dbt::set_offset.
-<p><dt>u_int32_t size;<dd>The length of <b>data</b>, in bytes.
-This element is accessed using Dbt::get_size and
-Dbt::set_size, and may be initialized
-using the constructor with two arguments.
-<p><dt>u_int32_t ulen;<dd>The size of the user's buffer (referenced by <b>data</b>), in bytes.
-This location is not written by the Db methods.
+<p><dt><b>offset</b><dd>
+The <b>offset</b> parameter is the byte offset into the data array.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_offset</h3>
+<p>Return the byte offset into the data array.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_size</h3>
+<p>Set the byte size of the data array.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>size</b><dd>
+The <b>size</b> parameter is the size of the data array in bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_size</h3>
+<p>Return the data array size.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_ulen</h3>
+<p>Set the byte size of the user-specified buffer.</p>
<p>Note that applications can determine the length of a record by setting
the <b>ulen</b> to 0 and checking the return value found in <b>size</b>.
-See the DB_DBT_USERMEM flag for more information.
-<p>This element is accessed using
-Dbt::get_ulen and Dbt::set_ulen.
-<p><dt>u_int32_t dlen;<dd>The length of the partial record being read or written by the application,
-in bytes.
-See the DB_DBT_PARTIAL flag for more information.
-This element is accessed using
-Dbt::get_dlen, and Dbt::set_dlen.
-<p><dt>u_int32_t doff;<dd>The offset of the partial record being read or written by the application,
-in bytes.
-See the DB_DBT_PARTIAL flag for more information.
-This element is accessed using
-Dbt::get_doff and Dbt::set_doff.
-<p><dt>u_int32_t flags;<dd>This element is accessed using Dbt::get_flags and
-Dbt::set_flags.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+See the DB_DBT_USERMEM flag for more information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ulen</b><dd>
+The <b>ulen</b> parameter the size of the data array in bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_ulen</h3>
+<p>Return the length in bytes of the user-specified buffer.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_dlen</h3>
+<p>Set the byte length of the partial record being read or written by the
+application, in bytes. See the DB_DBT_PARTIAL flag for more
+information.</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt><a name="DB_DBT_MALLOC">DB_DBT_MALLOC</a><dd>When this flag is set Berkeley DB will allocate memory for the returned key
+<p><dt><b>dlen</b><dd>
+The <b>dlen</b> parameter is the length of the partial record in bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_dlen</h3>
+<p>Return the length of the partial record, in bytes.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_doff</h3>
+<p>Set the offset of the partial record being read or written by the
+application, in bytes. See the DB_DBT_PARTIAL flag for more
+information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>doff</b><dd>
+The <b>doff</b> parameter is the offset of the partial record.
+</dl>
+<hr size=1 noshade>
+<h3>Description: Dbt::get_doff</h3>
+<p>Return the offset of the partial record, in bytes.</p>
+<hr size=1 noshade>
+<h3>Description: Dbt::set_object</h3>
+<p>Set the object flag value.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is Dbt flag value.
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<p><dl compact>
+<p><dt><a name="DB_DBT_MALLOC">DB_DBT_MALLOC</a><dd>
+When this flag is set, Berkeley DB will allocate memory for the returned key
or data item
-(using <b>malloc</b>(3) or the user-specified malloc method) and
+(using <b>malloc</b>(3) or the user-specified malloc method), and
return a pointer to it in the <b>data</b> field of the key or data
-Dbt object. As any allocated memory becomes the responsibility
-of the calling application, the caller must be able to determine if
-memory was allocated.
+Dbt object. Because any allocated memory becomes the
+responsibility of the calling application, the caller must determine
+whether memory was allocated using the returned value of the
+<b>data</b> field.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC and DB_DBT_USERMEM.
-<p><dt><a name="DB_DBT_REALLOC">DB_DBT_REALLOC</a><dd>When this flag is set Berkeley DB
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
+<p><dt><a name="DB_DBT_REALLOC">DB_DBT_REALLOC</a><dd>
+When this flag is set Berkeley DB
will allocate memory for the returned key or data item (using
-<b>realloc</b>(3) or the user-specified realloc method) and return
+<b>realloc</b>(3) or the user-specified realloc method), and return
a pointer to it in the <b>data</b> field of the key or data Dbt
-object. As any allocated memory becomes the responsibility of the
-calling application, the caller must be able to determine if memory was
-allocated.
+object. Because any allocated memory becomes the responsibility of the
+calling application, the caller must determine whether memory was
+allocated using the returned value of the <b>data</b> field.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC and DB_DBT_USERMEM.
-<p><dt><a name="DB_DBT_USERMEM">DB_DBT_USERMEM</a><dd>The <b>data</b> field of the key or data object must reference memory
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
+<p><dt><a name="DB_DBT_USERMEM">DB_DBT_USERMEM</a><dd>
+The <b>data</b> field of the key or data object must refer to memory
that is at least <b>ulen</b> bytes in length. If the length of the
requested item is less than or equal to that number of bytes, the item
-is copied into the memory referenced by the <b>data</b> field.
+is copied into the memory referred to by the <b>data</b> field.
Otherwise, the <b>size</b> field is set to the length needed for the
requested item, and the error ENOMEM is returned.
<p>It is an error to specify more than one of DB_DBT_MALLOC,
-DB_DBT_REALLOC and DB_DBT_USERMEM.
+DB_DBT_REALLOC, and DB_DBT_USERMEM.</p>
</dl>
<p>If DB_DBT_MALLOC or DB_DBT_REALLOC is specified, Berkeley DB
allocates a properly sized byte array to contain the data. This can be
@@ -149,82 +250,48 @@ you are retrieving, you might decrease the memory burden and speed your
application by allocating your own byte array and using
DB_DBT_USERMEM. Even if you don't know the maximum size, you can
use this option and reallocate your array whenever your retrieval API call
-returns an ENOMEM error, or throws an exception encapsulating an ENOMEM.
+returns an ENOMEM error or throws an exception encapsulating an ENOMEM.</p>
<p><dl compact>
-<p><dt><a name="DB_DBT_PARTIAL">DB_DBT_PARTIAL</a><dd>Do partial retrieval or storage of an item. If the calling application
+<p><dt><a name="DB_DBT_PARTIAL">DB_DBT_PARTIAL</a><dd>
+Do partial retrieval or storage of an item. If the calling application
is doing a get, the <b>dlen</b> bytes starting <b>doff</b> bytes from
the beginning of the retrieved data record are returned as if they
comprised the entire record. If any or all of the specified bytes do
-not exist in the record, the get is successful and the existing bytes
-or nul bytes are returned.
+not exist in the record, the get is successful, and any existing bytes
+are returned.
<p>For example, if the data portion of a retrieved record was 100 bytes,
and a partial retrieval was done using a Dbt having a <b>dlen</b>
field of 20 and a <b>doff</b> field of 85, the get call would succeed,
-the <b>data</b> field would reference the last 15 bytes of the record,
-and the <b>size</b> field would be set to 15.
+the <b>data</b> field would refer to the last 15 bytes of the record,
+and the <b>size</b> field would be set to 15.</p>
<p>If the calling application is doing a put, the <b>dlen</b> bytes starting
<b>doff</b> bytes from the beginning of the specified key's data record
are replaced by the data specified by the <b>data</b> and <b>size</b>
objects.
-If <b>dlen</b> is smaller than <b>size</b>, the record will grow, and if
+If <b>dlen</b> is smaller than <b>size</b>, the record will grow; if
<b>dlen</b> is larger than <b>size</b>, the record will shrink.
If the specified bytes do not exist, the record will be extended using nul
-bytes as necessary, and the put call will succeed.
+bytes as necessary, and the put call will succeed.</p>
<p>It is an error to attempt a partial put using the <a href="../api_cxx/db_put.html">Db::put</a>
method in a database that supports duplicate records.
Partial puts in databases supporting duplicate records must be done
-using a <a href="../api_cxx/dbc_class.html">Dbc</a> method.
+using a <a href="../api_cxx/dbc_class.html">Dbc</a> method.</p>
<p>It is an error to attempt a partial put with differing <b>dlen</b> and
-<b>size</b> values in Queue or Recno databases with fixed-length records.
+<b>size</b> values in Queue or Recno databases with fixed-length records.</p>
<p>For example, if the data portion of a retrieved record was 100 bytes,
and a partial put was done using a Dbt having a <b>dlen</b>
field of 20, a <b>doff</b> field of 85, and a <b>size</b> field of 30,
the resulting record would be 115 bytes in length, where the last 30
-bytes would be those specified by the put call.
+bytes would be those specified by the put call.</p>
</dl>
</dl>
- <a name="4"><!--meow--></a> <a name="5"><!--meow--></a>
-<h3>Retrieved key/data permanence</h3>
-<p>When using the non-cursor Berkeley DB calls to retrieve key/data items (e.g.,
-<a href="../api_cxx/db_get.html">Db::get</a>), the memory referenced by the pointer stored into the
-Dbt is only valid until the next call to Berkeley DB using the
-Db handle returned by <a href="../api_cxx/db_open.html">Db::open</a>. (This includes
-<b>any</b> use of the returned Db handle, including by another
-thread of control within the process. For this reason, when multiple
-threads are using the returned DB handle concurrently, one of the
-DB_DBT_MALLOC, DB_DBT_REALLOC or DB_DBT_USERMEM
-flags must be specified for any non-cursor Dbt used for key or
-data retrieval.)
-<p>When using the cursor Berkeley DB calls to retrieve key/data items (e.g.,
-<a href="../api_cxx/dbc_get.html">Dbc::get</a>), the memory referenced by the pointer into the
-Dbt is only valid until the next call to Berkeley DB using the
-<a href="../api_cxx/dbc_class.html">Dbc</a> handle returned by <a href="../api_cxx/db_cursor.html">Db::cursor</a>.
- <a name="6"><!--meow--></a>
-<h3>Data alignment</h3>
-<p>The Berkeley DB access methods provide no guarantees about key/data byte string
-alignment, and applications are responsible for arranging any necessary
-alignment. The DB_DBT_MALLOC, DB_DBT_REALLOC and
-DB_DBT_USERMEM flags may be used to store returned items in memory
-of arbitrary alignment.
- <a name="7"><!--meow--></a>
-<h3>Logical Record Numbers</h3>
-<p>In all cases for the Queue and Recno access methods, and when calling the
-<a href="../api_cxx/db_get.html">Db::get</a> and <a href="../api_cxx/dbc_get.html">Dbc::get</a> functions with the
-<a href="../api_cxx/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a> flag specified, the <b>data</b>
-field of the key must be a pointer to a memory location of type
-<b>db_recno_t</b>, as typedef'd in the #include &lt;db_cxx.h&gt; include file.
-This type is a 32-bit unsigned type,
-(which limits the number of logical records in a Queue or Recno database,
-and the maximum logical record which may be directly retrieved from a
-Btree database, to 4,294,967,296). The <b>size</b> field of the key
-should be the size of that type, i.e.,
-in the C programming language, <b>sizeof(db_recno_t)</b>.
-<p>Logical record numbers are 1-based, not 0-based, i.e., the first record
-in the database is record number 1.
+<hr size=1 noshade>
+<h3>Description: Dbt::set_object</h3>
+<p>Return the object flag value.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/deadlock_class.html b/db/docs/api_cxx/deadlock_class.html
index b796e8d3c..cde0e7228 100644
--- a/db/docs/api_cxx/deadlock_class.html
+++ b/db/docs/api_cxx/deadlock_class.html
@@ -1,21 +1,22 @@
-<!--Id: deadlock_class.so,v 10.10 2002/07/29 00:43:13 mjc Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: deadlock_class.so,v 10.15 2003/09/25 15:27:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbDeadlockException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbDeadlockException</h1>
+<h3>DbDeadlockException</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,24 +25,19 @@
<p>
class DbDeadlockException : public DbException { ... };
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbDeadlockException class and
-how it is used by the various Db* classes.
+<hr size=1 noshade>
+<h3>Description: DbDeadlockException</h3>
+<p>This information describes the DbDeadlockException class and how
+it is used in the Berkeley DB library.</p>
<p>A DbDeadlockException is thrown when multiple threads competing
-for a lock are deadlocked. One of the threads' transactions is selected
-for termination, and a DbDeadlockException is thrown to that thread.
-<p>See <a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a> for more information.
-<h1>Class</h1>
-<a href="../api_cxx/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_cxx/get_errno.html">DbException::get_errno</a>,
-<a href="../api_cxx/what.html">DbException::what</a>
-and
-<a href="../api_cxx/mem_class.html">DbMemoryException</a>
+for a lock are deadlocked, when a lock request has timed out, or when a
+lock request would need to block and the transaction has been configured
+to not wait for locks. One of the threads' transactions is selected for
+termination, and a DbDeadlockException is thrown to that thread.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_class.html b/db/docs/api_cxx/env_class.html
index 207dfc062..2b3a9a5ae 100644
--- a/db/docs/api_cxx/env_class.html
+++ b/db/docs/api_cxx/env_class.html
@@ -1,21 +1,22 @@
-<!--Id: env_class.so,v 10.32 2002/08/29 03:24:38 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_class.so,v 10.39 2003/10/31 03:44:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv</h1>
+<h3>DbEnv</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -34,32 +35,26 @@ public:
...
};
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv</h3>
<p>The DbEnv object is the handle for a Berkeley DB environment -- a
collection including support for some or all of caching, locking,
logging and transaction subsystems, as well as databases and log files.
Methods off the DbEnv handle are used to configure the
environment as well as to operate on subsystems and databases in the
-environment.
+environment.</p>
<p>DbEnv handles are free-threaded if the <a href="../api_cxx/env_open.html#DB_THREAD">DB_THREAD</a> flag
is specified to the <a href="../api_cxx/env_open.html">DbEnv::open</a> method when the environment is opened.
The DbEnv handle should not be closed while any other handle
remains open that is using it as a reference (for example, <a href="../api_cxx/db_class.html">Db</a>
or <a href="../api_cxx/txn_class.html">DbTxn</a>). Once either the <a href="../api_cxx/env_close.html">DbEnv::close</a> or
<a href="../api_cxx/env_remove.html">DbEnv::remove</a> methods are called, the handle may not be accessed again,
-regardless of the method's return.
+regardless of the method's return.</p>
<p>The constructor creates the DbEnv object. The constructor
allocates memory internally; calling the <a href="../api_cxx/env_close.html">DbEnv::close</a> or
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a> methods will free that memory.
-<p>The following <b>flags</b> value may be specified:
+<a href="../api_cxx/env_remove.html">DbEnv::remove</a> methods will free that memory.</p>
+<p>The following <b>flags</b> value may be specified:</p>
<p><dl compact>
-<p><dt><a name="DB_CLIENT">DB_CLIENT</a><dd>Create a client environment to connect to a server.
-<p>The DB_CLIENT flag indicates to the system that this environment
-is remote on a server. The use of this flag causes the environment
-methods to use functions that call a server instead of local functions.
-Prior to making any environment or database method calls, the
-application must call the <a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a> method to
-establish the connection to the server.
<p><dt><a name="DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a><dd>The Berkeley DB C++ API supports two different error behaviors. By default,
whenever an error occurs, an exception is thrown that encapsulates the
error information. This generally allows for cleaner logic for
@@ -67,30 +62,38 @@ transaction processing because a try block can surround a single
transaction. However, if DB_CXX_NO_EXCEPTIONS is specified,
exceptions are not thrown; instead, each individual function returns an
error code.
+<p><dt><a name="DB_RPCCLIENT">DB_RPCCLIENT</a><dd>Create a client environment to connect to a server.
+<p>The DB_RPCCLIENT flag indicates to the system that this environment
+is remote on a server. The use of this flag causes the environment
+methods to use functions that call a server instead of local functions.
+Prior to making any environment or database method calls, the application
+must call the <a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a> function to establish the
+connection to the server.</p>
</dl>
<p>Each DbEnv object has an associated DB_ENV structure,
which is used by the underlying implementation of Berkeley DB and its
C-language API. The DbEnv::get_DB_ENV method returns a pointer to this
struct. Given a const DbEnv object, DbEnv::get_const_DB_ENV
-returns a const pointer to the same struct.
+returns a const pointer to the same struct.</p>
<p>Given a DB_ENV struct, the DbEnv::get_DbEnv method returns the
corresponding DbEnv object, if there is one. If the
DB_ENV object was not associated with a DbEnv (that is,
it was not returned from a call to DbEnv::get_DB_ENV), then the result
of DbEnv::get_DbEnv is undefined. Given a const DB_ENV struct,
DbEnv::get_const_Db_Env returns the associated const DbEnv
-object, if there is one.
+object, if there is one.</p>
<p>These methods may be useful for Berkeley DB applications including both C
and C++ language software. It should not be necessary to use these
-calls in a purely C++ application.
-<h1>Class</h1>
+calls in a purely C++ application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
DbEnv
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_close.html b/db/docs/api_cxx/env_close.html
index fc1ae2573..58a0ff45b 100644
--- a/db/docs/api_cxx/env_close.html
+++ b/db/docs/api_cxx/env_close.html
@@ -1,20 +1,22 @@
-<!--$Id: env_close.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_close.so,v 10.37 2003/10/31 17:24:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::close</h1>
+<h3>DbEnv::close</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,65 +25,61 @@
<p>
DbEnv::close(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::close</h3>
<p>The DbEnv::close method closes the Berkeley DB environment, freeing any
-allocated resources and closing any underlying subsystems.
-<p>Calling DbEnv::close does not imply closing any databases that were
-opened in the environment.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
+allocated resources and closing any underlying subsystems.</p>
+<p>The <a href="../api_cxx/env_class.html">DbEnv</a> handle should not be closed while any other handle
+that refers to it is not yet closed; for example, database environment
+handles must not be closed while database handles remain open, or
+transactions in the environment have not yet been committed or aborted.
+Specifically, this includes <a href="../api_cxx/db_class.html">Db</a>, <a href="../api_cxx/dbc_class.html">Dbc</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>,
+<a href="../api_cxx/logc_class.html">DbLogc</a> and <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handles.</p>
<p>Where the environment was initialized with the <a href="../api_cxx/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> flag,
calling DbEnv::close does not release any locks still held by the
closing process, providing functionality for long-lived locks.
-Processes that wish to have all their locks
-released can do so by issuing the appropriate <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> call.
+Processes that want to have all their locks
+released can do so by issuing the appropriate <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> call.</p>
<p>Where the environment was initialized with the <a href="../api_cxx/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>
flag, calling DbEnv::close implies calls to <a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a> for
any remaining open files in the memory pool that were returned to this
process by calls to <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>. It does not imply a call to
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a> for those files.
+<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a> for those files.</p>
<p>Where the environment was initialized with the <a href="../api_cxx/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flag,
-calling DbEnv::close aborts any uncommitted transactions.
-(Applications are should not depend on this behavior. If the process' has
-already closed a database handle which is necessary to abort an
-uncommitted transaction, the Berkeley DB environment must then require that
-recovery be run before further operations are done, since once a
-transaction exists that cannot be committed or aborted, no future
-checkpoint can ever succeed.)
-<p>In multi-threaded applications, only a single thread may call
-DbEnv::close.
-<p>Once DbEnv::close has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DbEnv::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::close method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+calling DbEnv::close aborts any unresolved transactions.
+Applications should not depend on this behavior for transactions
+involving Berkeley DB databases; all such transactions should be explicitly
+resolved. The problem with depending on this semantic is that aborting
+an unresolved transaction involving database operations requires a
+database handle. Because the database handles should have been closed before
+calling DbEnv::close, it will not be possible to abort the
+transaction, and recovery will have to be run on the Berkeley DB environment
+before further operations are done.</p>
+<p>Where log cursors were created using the <a href="../api_cxx/log_cursor.html">DbEnv::log_cursor</a> method, calling
+DbEnv::close does not imply closing those cursors.</p>
+<p>In multithreaded applications, only a single thread may call
+DbEnv::close.</p>
+<p>After DbEnv::close has been called, regardless of its return, the
+Berkeley DB environment handle may not be accessed again.</p>
+<p>The DbEnv::close method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_dbremove.html b/db/docs/api_cxx/env_dbremove.html
index d5625bd2b..48ea68f03 100644
--- a/db/docs/api_cxx/env_dbremove.html
+++ b/db/docs/api_cxx/env_dbremove.html
@@ -1,21 +1,22 @@
-<!--Id: env_dbremove.so,v 10.31 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 10.44 2003/11/08 19:17:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::dbremove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::dbremove</h1>
+<h3>DbEnv::dbremove</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,101 +27,84 @@ int
DbEnv::dbremove(DbTxn *txnid,
const char *file, const char *database, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::dbremove</h3>
<p>The DbEnv::dbremove method removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
+<b>file</b> and <b>database</b> parameters. If no <b>database</b> is
specified, the underlying file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
+incidentally removing all of the databases it contained.</p>
<p>Applications should never remove databases with open <a href="../api_cxx/db_class.html">Db</a> handles,
or in the case of removing a file, when any database in the file has an
open handle. For example, some architectures do not permit the removal
of files with open system handles. On these architectures, attempts to
remove databases currently in use by any thread of control in the system
-will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>;
-otherwise, NULL.
-<p>The <b>flags</b> value must be set to 0 or
+will fail.</p>
+<p>The DbEnv::dbremove method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DbEnv::dbremove call within a transaction. If the call succeeds,
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<p>The DbEnv::dbremove method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Environment Variables</h3>
+<p>The
environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DbEnv::dbremove is affected by any database directory specified using the
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
+database environment home.</p>
+<p>DbEnv::dbremove is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DbEnv::dbremove method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_FILEOPEN<dd>An attempt was made to remove the underlying file and a database in the
+file was currently open.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If DbEnv::dbremove called before <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>Errors</h1>
-<p>The DbEnv::dbremove method may fail and throw an exception or return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<p>If the file or directory does not exist, the DbEnv::dbremove method will
-fail and
-and either return ENOENT or
-throw a FileNotFoundException exception.
-<p>The DbEnv::dbremove method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::dbremove method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_dbremove.html">DbEnv::dbremove</a>,
-<a href="../api_cxx/env_dbrename.html">DbEnv::dbrename</a>,
-<a href="../api_cxx/env_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_err.html">DbEnv::errx</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a>,
-<a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a>,
-<a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_dir.html">DbEnv::set_lg_dir</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/env_set_lg_regionmax.html">DbEnv::set_lg_regionmax</a>,
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-<a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a>,
-<a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a>,
-<a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a>,
-<a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a>,
-<a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a>,
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>
-and
-<a href="../api_cxx/env_version.html">DbEnv::version</a>.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the DbEnv::dbremove method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the DbEnv::dbremove method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_dbrename.html b/db/docs/api_cxx/env_dbrename.html
index 09edc1bbe..ce2c2d019 100644
--- a/db/docs/api_cxx/env_dbrename.html
+++ b/db/docs/api_cxx/env_dbrename.html
@@ -1,21 +1,22 @@
-<!--Id: env_dbrename.so,v 10.17 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 10.31 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::dbrename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::dbrename</h1>
+<h3>DbEnv::dbrename</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,111 +27,88 @@ int
DbEnv::dbrename(DbTxn *txnid, const char *file,
const char *database, const char *newname, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::dbrename</h3>
<p>The DbEnv::dbrename method renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
+<b>file</b> and <b>database</b> parameters to <b>newname</b>. If no
<b>database</b> is specified, the underlying file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
+<b>file</b> is renamed, incidentally renaming all of the databases it
+contained.</p>
<p>Applications should not rename databases that are currently in use. If
an underlying file is being renamed and logging is currently enabled in
the database environment, no database in the file may be open when the
DbEnv::dbrename method is called. In particular, some architectures do
not permit renaming files with open handles. On these architectures,
attempts to rename databases that are currently in use by any thread of
-control in the system will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>;
-otherwise, NULL.
-<p>The <b>flags</b> value must be set to 0 or
+control in the system will fail.</p>
+<p>The DbEnv::dbrename method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>database</b><dd>
+The <b>database</b> parameter is the database to be removed.
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the physical file which contains the
+database(s) to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>Enclose the DbEnv::dbrename call within a transaction. If the call succeeds,
changes made by the operation will be recoverable. If the call fails,
the operation will have made no changes.
</dl>
-<p>The DbEnv::dbrename method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
+<p><dt><b>newname</b><dd>
+The <b>newname</b> parameter is the new name of the database or file.
+<p><dt><b>txnid</b><dd>
+If the operation is to be transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>; otherwise, NULL.
+</dl>
+<h3>Environment Variables</h3>
+<p>The
environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DbEnv::dbrename is affected by any database directory specified using the
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
+database environment home.</p>
+<p>DbEnv::dbrename is affected by any database directory specified using
+the <a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a> method, or by setting the "set_data_dir" string
+in the environment's <b>DB_CONFIG</b> file.</p>
+<h3>Errors</h3>
+<p>The DbEnv::dbrename method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>DB_FILEOPEN<dd>An attempt was made to rename the underlying file and a database in the
+file was currently open.
+</dl>
+<p><dl compact>
+<p><dt>EINVAL<dd>If DbEnv::dbrename called before <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h1>Errors</h1>
-<p>The DbEnv::dbrename method may fail and throw an exception or return a non-zero error for the following conditions:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>ENOENT<dd>The file or directory does not exist.
</dl>
-<p>If the file or directory does not exist, the DbEnv::dbrename method will
-fail and
-and either return ENOENT or
-throw a FileNotFoundException exception.
-<p>The DbEnv::dbrename method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::dbrename method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a>,
-<a href="../api_cxx/db_associate.html">Db::associate</a>,
-<a href="../api_cxx/db_close.html">Db::close</a>,
-<a href="../api_cxx/db_cursor.html">Db::cursor</a>,
-<a href="../api_cxx/db_del.html">Db::del</a>,
-<a href="../api_cxx/db_err.html">Db::err</a>,
-<a href="../api_cxx/db_err.html">Db::errx</a>,
-<a href="../api_cxx/db_fd.html">Db::fd</a>,
-<a href="../api_cxx/db_get.html">Db::get</a>,
-<a href="../api_cxx/db_get_byteswapped.html">Db::get_byteswapped</a>,
-<a href="../api_cxx/db_get_type.html">Db::get_type</a>,
-<a href="../api_cxx/db_join.html">Db::join</a>,
-<a href="../api_cxx/db_key_range.html">Db::key_range</a>,
-<a href="../api_cxx/db_open.html">Db::open</a>,
-<a href="../api_cxx/db_get.html">Db::pget</a>,
-<a href="../api_cxx/db_put.html">Db::put</a>,
-<a href="../api_cxx/db_remove.html">Db::remove</a>,
-<a href="../api_cxx/db_rename.html">Db::rename</a>,
-<a href="../api_cxx/db_set_append_recno.html">Db::set_append_recno</a>,
-<a href="../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>,
-<a href="../api_cxx/db_set_bt_minkey.html">Db::set_bt_minkey</a>,
-<a href="../api_cxx/db_set_bt_prefix.html">Db::set_bt_prefix</a>,
-<a href="../api_cxx/db_set_cache_priority.html">Db::set_cache_priority</a>,
-<a href="../api_cxx/db_set_cachesize.html">Db::set_cachesize</a>,
-<a href="../api_cxx/db_set_dup_compare.html">Db::set_dup_compare</a>,
-<a href="../api_cxx/db_set_encrypt.html">Db::set_encrypt</a>,
-<a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>,
-<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>,
-<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a>,
-<a href="../api_cxx/db_set_feedback.html">Db::set_feedback</a>,
-<a href="../api_cxx/db_set_flags.html">Db::set_flags</a>,
-<a href="../api_cxx/db_set_h_ffactor.html">Db::set_h_ffactor</a>,
-<a href="../api_cxx/db_set_h_hash.html">Db::set_h_hash</a>,
-<a href="../api_cxx/db_set_h_nelem.html">Db::set_h_nelem</a>,
-<a href="../api_cxx/db_set_lorder.html">Db::set_lorder</a>,
-<a href="../api_cxx/db_set_pagesize.html">Db::set_pagesize</a>,
-<a href="../api_cxx/db_set_paniccall.html">Db::set_paniccall</a>,
-<a href="../api_cxx/db_set_q_extentsize.html">Db::set_q_extentsize</a>,
-<a href="../api_cxx/db_set_re_delim.html">Db::set_re_delim</a>,
-<a href="../api_cxx/db_set_re_len.html">Db::set_re_len</a>,
-<a href="../api_cxx/db_set_re_pad.html">Db::set_re_pad</a>,
-<a href="../api_cxx/db_set_re_source.html">Db::set_re_source</a>,
-<a href="../api_cxx/db_stat.html">Db::stat</a>,
-<a href="../api_cxx/db_sync.html">Db::sync</a>,
-<a href="../api_cxx/db_truncate.html">Db::truncate</a>,
-<a href="../api_cxx/db_upgrade.html">Db::upgrade</a>
-and
-<a href="../api_cxx/db_verify.html">Db::verify</a>.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the DbEnv::dbrename method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the DbEnv::dbrename method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_err.html b/db/docs/api_cxx/env_err.html
index 26096abde..076c4ffc6 100644
--- a/db/docs/api_cxx/env_err.html
+++ b/db/docs/api_cxx/env_err.html
@@ -1,20 +1,22 @@
-<!--Id: env_err.so,v 10.13 2001/04/05 20:01:26 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_err.so,v 10.30 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::err</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::err</h1>
+<h3>DbEnv::err</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,77 +27,63 @@ DbEnv::err(int error, const char *fmt, ...);
<p>
DbEnv::errx(const char *fmt, ...);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::err</h3>
+<a name="3"><!--meow--></a>
<p>The DbEnv::err, DbEnv::errx, <a href="../api_cxx/db_err.html">Db::err</a> and
<a href="../api_cxx/db_err.html">Db::errx</a> methods provide error-messaging functionality for
-applications written using the Berkeley DB library.
+applications written using the Berkeley DB library.</p>
<p>The DbEnv::err method constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
-<p><dt>An optional prefix string<dd>If no error callback method has been set using the
+following elements:</p>
+<blockquote><p><dl compact>
+<p><dt>An optional prefix string<dd>If no error callback function has been set using the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method, any prefix string specified using the
<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a> method, followed by two separating characters: a colon
and a &lt;space&gt; character.
<p><dt>An optional printf-style message<dd>The supplied message <b>fmt</b>, if non-NULL, in which the
-ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent arguments
+ANSI C X3.159-1989 (ANSI C) printf function specifies how subsequent parameters
are converted for output.
<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
<b>error</b> value, as returned by the <a href="../api_cxx/env_strerror.html">DbEnv::strerror</a> method.
</dl>
</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback method has been set (see <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>
-and <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>), that method is called with two
-arguments: any prefix string specified (see <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> and
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>) and the error message.
+<p>This constructed error message is then handled as follows:</p>
+<blockquote><p>If an error callback function has been set (see <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a>
+and <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>), that function is called with two
+parameters: any prefix string specified (see <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> and
+<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>) and the error message.</p>
<p>If a C library FILE * has been set (see <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a> and
<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>), the error message is written to that output
-stream.
+stream.</p>
<p>If a C++ ostream has been set
-(see <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>), the error message is written to that
-stream.
+(see <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> and <a href="../api_cxx/db_set_error_stream.html">Db::set_error_stream</a>),
+the error message is written to that stream.</p>
<p>If none of these output options has been configured, the error message
-is written to stderr, the standard error output stream.</blockquote>
+is written to stderr, the standard
+error output stream.</p></blockquote>
<p>The DbEnv::errx and <a href="../api_cxx/db_err.html">Db::errx</a> methods perform identically to the
DbEnv::err and <a href="../api_cxx/db_err.html">Db::err</a> methods, except that they do not append
the final separator characters and standard error string to the error
-message.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a>
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_pageyield.html">DbEnv::set_pageyield</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-<a href="../api_cxx/env_set_panicstate.html">DbEnv::set_panicstate</a>,
-<a href="../api_cxx/env_set_rec_init.html">DbEnv::set_recovery_init</a>,
-<a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a>,
-<a href="../api_cxx/env_set_region_init.html">DbEnv::set_region_init</a>,
-<a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a>,
-<a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a>,
-<a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a>,
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>
-and
-<a href="../api_cxx/env_version.html">DbEnv::version</a>.
+message.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error value for which the
+DbEnv::err and <a href="../api_cxx/db_err.html">Db::err</a> methods will display a explanatory
+string.
+<p><dt><b>fmt</b><dd>
+The <b>fmt</b> parameter is an optional printf-style message to display.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_list.html b/db/docs/api_cxx/env_list.html
index d1705ed3d..be0b3286b 100644
--- a/db/docs/api_cxx/env_list.html
+++ b/db/docs/api_cxx/env_list.html
@@ -1,17 +1,17 @@
-<!--Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Database Environments and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Environments and Related Methods</h1>
-<!--Id: m4.methods,v 10.1 2002/08/30 20:00:51 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Database Environments and Related Methods</h3>
+<!--$Id: m4.methods,v 10.2 2003/10/18 19:15:47 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Database Environments and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/env_close.html">DbEnv::close</a></td><td>Close an environment</td></tr>
<tr><td><a href="../api_cxx/env_dbremove.html">DbEnv::dbremove</a></td><td>Remove a database</td></tr>
@@ -41,7 +41,7 @@
<tr><td><a href="../api_cxx/rep_start.html">DbEnv::rep_start</a></td><td>Configure an environment for replication</td></tr>
<tr><td><a href="../api_cxx/rep_stat.html">DbEnv::rep_stat</a></td><td>Replication statistics</td></tr>
<tr><td><a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a></td><td>Set local space allocation functions</td></tr>
-<tr><td><a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a></td><td>Configure application recovery interface</td></tr>
+<tr><td><a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a></td><td>Configure application recovery</td></tr>
<tr><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
<tr><td><a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a></td><td>Set the environment data directory</td></tr>
<tr><td><a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
@@ -77,6 +77,6 @@
<tr><td><a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a></td><td>Distributed transaction recovery</td></tr>
<tr><td><a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_open.html b/db/docs/api_cxx/env_open.html
index 53c9908dc..e0b2f2f0c 100644
--- a/db/docs/api_cxx/env_open.html
+++ b/db/docs/api_cxx/env_open.html
@@ -1,20 +1,22 @@
-<!--$Id: env_open.so,v 10.61 2000/12/01 15:50:31 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 10.91 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::open</h1>
+<h3>DbEnv::open</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,22 +25,45 @@
<p>
int
DbEnv::open(const char *db_home, u_int32_t flags, int mode);
+<p>
+int
+DbEnv::get_home(const char **homep);
+<p>
+int
+DbEnv::get_open_flags(u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::open method is the interface for opening the Berkeley DB
-environment. It provides a structure for creating a consistent
-environment for processes using one or more of the features of Berkeley DB.
-<p>The <b>db_home</b> argument to DbEnv::open (and file name
-resolution in general) is described in
+<hr size=1 noshade>
+<h3>Description: DbEnv::open</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>The DbEnv::open method opens a Berkeley DB environment. It provides a
+structure for creating a consistent environment for processes using one
+or more of the features of Berkeley DB.</p>
+<p>The DbEnv::open method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+If DbEnv::open fails, the <a href="../api_cxx/env_close.html">DbEnv::close</a> method should be called
+to discard the <a href="../api_cxx/env_class.html">DbEnv</a> handle.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_home</b><dd>
+The <b>db_home</b> parameter is the database environment's home
+directory. For more information on <b>db_home</b>, and filename
+resolution in general, see <a href="../ref/env/naming.html">Berkeley DB File
+Naming</a>. The environment variable <b>DB_HOME</b> may be used as
+the path of the database home, as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p>The <b>flags</b> argument specifies the subsystems that are initialized
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter specifies the subsystems that are initialized
and how the application's environment affects Berkeley DB file naming, among
other things.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p>As there are a large number of flags that can be specified, they have been
-grouped together by functionality. The first group of flags indicate
-which of the Berkeley DB subsystems should be initialized:
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
+<p>Because there are a large number of flags that can be specified, they
+have been grouped together by functionality. The first group of flags
+indicates which of the Berkeley DB subsystems should be initialized:</p>
<p><dl compact>
<p><dt><a name="DB_JOINENV">DB_JOINENV</a><dd>Join an existing environment. This option allows applications to
join an existing environment without knowing which Berkeley DB subsystems
@@ -47,163 +72,164 @@ the environment supports.
product. In this mode, Berkeley DB provides multiple reader/single writer
access. The only other subsystem that should be specified with the
DB_INIT_CDB flag is DB_INIT_MPOOL.
-<p>Access method calls are largely unchanged when using this flag, although
-any cursors through which update operations (e.g., <a href="../api_cxx/dbc_put.html">Dbc::put</a>,
-<a href="../api_cxx/dbc_del.html">Dbc::del</a>) will be made must have the <a href="../api_cxx/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> value
-set in the flags parameter to the cursor call that creates the cursor.
-See <a href="../api_cxx/db_cursor.html">Db::cursor</a> for more information.
<p><dt><a name="DB_INIT_LOCK">DB_INIT_LOCK</a><dd>Initialize the locking subsystem. This subsystem should be used when
-multiple processes or threads are going to be reading and writing a Berkeley DB
-database, so that they do not interfere with each other. If all threads
-are accessing the database(s) read-only, then locking is unnecessary.
-When the DB_INIT_LOCK flag is specified, it is usually necessary to run
-the deadlock detector, as well. See <a href="../utility/db_deadlock.html">db_deadlock</a> and
+multiple processes or threads are going to be reading and writing a
+Berkeley DB database, so that they do not interfere with each other. If all
+threads are accessing the database(s) read-only, locking is unnecessary.
+When the DB_INIT_LOCK flag is specified, it is usually necessary
+to run a deadlock detector, as well. See <a href="../utility/db_deadlock.html">db_deadlock</a> and
<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a> for more information.
-<p><dt><a name="DB_INIT_LOG">DB_INIT_LOG</a><dd>Initialize the logging subsystem. This subsystem is used when recovery
-from application or system failure is necessary.
-<p>The log is stored in one or more files in the environment directory.
-Each file is named using the format <i>log.NNNNNNNNNN</i>, where
-<i>NNNNNNNNNN</i> is the sequence number of the file within the log.
-For further information, see
-<a href="../ref/log/limits.html">Log File Limits</a>.
-<p>If the log region is being created and log files are already present, the
-log files are reviewed and subsequent log writes are appended
-to the end of the log, rather than overwriting current log entries.
-<p><dt><a name="DB_INIT_MPOOL">DB_INIT_MPOOL</a><dd>Initialize the shared memory buffer pool subsystem. This subsystem is
-used whenever the application is using any Berkeley DB access method.
-<p><dt><a name="DB_INIT_TXN">DB_INIT_TXN</a><dd>Initialize the transaction subsystem. This subsystem is used when
-recovery and atomicity of multiple operations and recovery are important.
-The DB_INIT_TXN flag implies the DB_INIT_LOG flag.
+<p><dt><a name="DB_INIT_LOG">DB_INIT_LOG</a><dd>Initialize the logging subsystem. This subsystem should be used when
+recovery from application or system failure is necessary. If the log
+region is being created and log files are already present, the log files
+are reviewed; subsequent log writes are appended to the end of the log,
+rather than overwriting current log entries.
+<p><dt><a name="DB_INIT_MPOOL">DB_INIT_MPOOL</a><dd>Initialize the shared memory buffer pool subsystem. This subsystem
+should be used whenever an application is using any Berkeley DB access
+method.
+<p><dt><a name="DB_INIT_REP">DB_INIT_REP</a><dd>Initialize the replication subsystem. This subsystem
+should be used whenever an application plans on using replication.
+The DB_INIT_REP flag requires the DB_INIT_TXN and
+DB_INIT_LOCK flags also be configured.
+<p><dt><a name="DB_INIT_TXN">DB_INIT_TXN</a><dd>Initialize the transaction subsystem. This subsystem should be used
+when recovery and atomicity of multiple operations are important. The
+DB_INIT_TXN flag implies the DB_INIT_LOG flag.
</dl>
<p>The second group of flags govern what recovery, if any, is performed when
-the environment is initialized:
+the environment is initialized:</p>
<p><dl compact>
-<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>Run normal recovery on this environment before opening it for normal use.
-If this flag is set, the DB_CREATE flag must also be set since the regions
-will be removed and recreated.
-<p><dt><a name="DB_RECOVER_FATAL">DB_RECOVER_FATAL</a><dd>Run catastrophic recovery on this environment before opening it for normal
-use. If this flag is set, the DB_CREATE flag must also be set since the
-regions will be removed and recreated.
+<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>Run normal recovery on this environment before opening it for normal
+use. If this flag is set, the DB_CREATE flag must also be set
+because the regions will be removed and re-created.
+<p><dt><a name="DB_RECOVER_FATAL">DB_RECOVER_FATAL</a><dd>Run catastrophic recovery on this environment before opening it for
+normal use. If this flag is set, the DB_CREATE flag must also
+be set because the regions will be removed and re-created.
</dl>
<p>A standard part of the recovery process is to remove the existing Berkeley DB
environment and create a new one in which to perform recovery. If the
-thread of control performing recovery does not specify the correct region
-initialization information (e.g., the correct memory pool cache size),
-the result can be an application running in an environment with incorrect
-cache and other subsystem sizes. For this reason, the thread of control
-performing recovery should either specify correct configuration
-information before calling the DbEnv::open method, or it should remove
-the environment after recovery is completed, leaving creation of the
-correctly sized environment to a subsequent call to DbEnv::open.
-<p>All Berkeley DB recovery processing must be single-threaded, that is, only a
+thread of control performing recovery does not specify the correct
+region initialization information (for example, the correct memory pool
+cache size), the result can be an application running in an environment
+with incorrect cache and other subsystem sizes. For this reason, the
+thread of control performing recovery should specify correct
+configuration information before calling the DbEnv::open method; or it
+should remove the environment after recovery is completed, leaving
+creation of the correctly sized environment to a subsequent call to
+DbEnv::open.</p>
+<p>All Berkeley DB recovery processing must be single-threaded; that is, only a
single thread of control may perform recovery or access a Berkeley DB
-environment while recovery is being performed. As it is not an error to
-specify DB_RECOVER for an environment for which no recovery is
-required, it is reasonable programming practice for the thread of control
-responsible for performing recovery and creating the environment to always
-specify the DB_RECOVER flag during startup.
+environment while recovery is being performed. Because it is not an
+error to specify DB_RECOVER for an environment for which no
+recovery is required, it is reasonable programming practice for the
+thread of control responsible for performing recovery and creating the
+environment to always specify the DB_CREATE and
+DB_RECOVER flags during startup.</p>
<p>The DbEnv::open function returns successfully if DB_RECOVER
-or DB_RECOVER_FATAL is specified and no log files exist, so it is
-necessary to ensure all necessary log files are present before running
-recovery. For further information, consult <a href="../utility/db_archive.html">db_archive</a> and
-<a href="../utility/db_recover.html">db_recover</a>.
-<p>The third group of flags govern file naming extensions in the environment:
+or DB_RECOVER_FATAL is specified and no log files exist, so it
+is necessary to ensure that all necessary log files are present before
+running recovery. For further information, consult <a href="../utility/db_archive.html">db_archive</a>
+and <a href="../utility/db_recover.html">db_recover</a>.</p>
+<p>The third group of flags govern file-naming extensions in the environment:</p>
<p><dl compact>
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, environment information will be
+used in file naming for all users only if the DB_USE_ENVIRON
+flag is set.
+<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, if the
+DB_USE_ENVIRON_ROOT flag is set, environment information will
+be used for file naming only for users with appropriate permissions (for
+example, users with a user-ID of 0 on UNIX systems).
</dl>
-<p>Finally, there are a few additional, unrelated flags:
+<p>Finally, there are a few additional unrelated flags:</p>
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
-<p><dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory mapped databases into memory.
+<p><dt><a name="DB_LOCKDOWN">DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory-mapped databases into
+memory.
<p><dt><a name="DB_PRIVATE">DB_PRIVATE</a><dd>Specify that the environment will only be accessed by a single process
-(although that process may be multi-threaded). This flag has two effects
+(although that process may be multithreaded). This flag has two effects
on the Berkeley DB environment. First, all underlying data structures are
allocated from per-process memory instead of from shared memory that is
potentially accessible to more than a single process. Second, mutexes
are only configured to work between threads.
<p>This flag should not be specified if more than a single process is
-accessing the environment, as it is likely to cause database corruption
-and unpredictable behavior, e.g., if both a server application and the
-Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> will access the environment, the
-DB_PRIVATE flag should not be specified.
+accessing the environment because it is likely to cause database
+corruption and unpredictable behavior. For example, if both a server
+application and the Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> are expected to access
+the environment, the DB_PRIVATE flag should not be
+specified.</p>
<p><dt><a name="DB_SYSTEM_MEM">DB_SYSTEM_MEM</a><dd>Allocate memory from system shared memory instead of from memory backed
by the filesystem. See <a href="../ref/env/region.html">Shared Memory
Regions</a> for more information.
-<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_cxx/dbenv_class.html">DbEnv</a> handle returned by DbEnv::open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
+<p><dt><a name="DB_THREAD">DB_THREAD</a><dd>Cause the <a href="../api_cxx/env_class.html">DbEnv</a> handle returned by DbEnv::open to be
+<i>free-threaded</i>; that is, usable by multiple threads within a
single address space.
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>The DbEnv::open method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The environment variable <b>DB_HOME</b> may be used as the path of
-the database home as described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+Berkeley DB are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, Berkeley DB will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
</dl>
-<h1>Errors</h1>
-<p>The DbEnv::open method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DbEnv::open method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
<p><dt>EAGAIN<dd>The shared memory region was locked and (repeatedly) unavailable.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>
-The DB_THREAD flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The DB_HOME or TMPDIR environment variables were set but empty.
-<p>An incorrectly formatted <b>NAME VALUE</b> entry or line was found.
+<p><dt>EINVAL<dd>If the DB_THREAD flag was specified and fast mutexes are not
+available for this architecture;
+The DB_HOME or TMPDIR environment variables were set, but empty;
+An incorrectly formatted <b>NAME VALUE</b> entry or line was found; or if an
+invalid flag value or parameter was specified.
</dl>
<p><dl compact>
<p><dt>ENOSPC<dd>HP-UX only: a previously created Berkeley DB environment for this process still
exists.
</dl>
-<p>The DbEnv::open method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::open method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_home</h3>
+<p>The DbEnv::get_home method returns the database environment home directory.</p>
+<p>The DbEnv::get_home method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_open_flags</h3>
+<p>The DbEnv::get_open_flags method returns the open method flags.</p>
+<p>The DbEnv::get_open_flags method may not be called before the DbEnv::open method has
+been called.</p>
+<p>The DbEnv::get_open_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DbEnv::get_open_flags method returns the
+open method flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_remove.html b/db/docs/api_cxx/env_remove.html
index 58c3ff5de..d5c2b7862 100644
--- a/db/docs/api_cxx/env_remove.html
+++ b/db/docs/api_cxx/env_remove.html
@@ -1,20 +1,22 @@
-<!--$Id: env_remove.so,v 10.24 2000/12/06 14:40:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_remove.so,v 10.42 2003/11/08 19:17:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::remove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::remove</h1>
+<h3>DbEnv::remove</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,106 +26,100 @@
int
DbEnv::remove(const char *db_home, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::remove method destroys a Berkeley DB environment, if it is not
+<hr size=1 noshade>
+<h3>Description: DbEnv::remove</h3>
+<p>The DbEnv::remove method destroys a Berkeley DB environment if it is not
currently in use. The environment regions, including any backing files,
are removed. Any log or database files and the environment directory are
-not removed.
-<p>The <b>db_home</b> argument to DbEnv::remove is described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+not removed.</p>
<p>If there are processes that have called <a href="../api_cxx/env_open.html">DbEnv::open</a> without
-calling <a href="../api_cxx/env_close.html">DbEnv::close</a> (i.e., there are processes currently using
-the environment), DbEnv::remove will fail without further action,
-unless the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, in which case
-DbEnv::remove will attempt to remove the environment regardless
-of any processes still using it.
+calling <a href="../api_cxx/env_close.html">DbEnv::close</a> (that is, there are processes currently
+using the environment), DbEnv::remove will fail without further
+action unless the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, in which case
+DbEnv::remove will attempt to remove the environment, regardless
+of any processes still using it.</p>
<p>The result of attempting to forcibly destroy the environment when it is
in use is unspecified. Processes using an environment often maintain open
file descriptors for shared regions within it. On UNIX systems, the
-environment removal will usually succeed and processes that have already
-joined the region will continue to run in that region without change,
-however processes attempting to join the environment will either fail or
-create new regions. On other systems (e.g., Windows/NT), where the
-<b>unlink</b>(2) system call will fail if any process has an open
-file descriptor for the file, the region removal will fail.
-<p>Calling DbEnv::remove should not be necessary for most applications,
-as the Berkeley DB environment is cleaned up as part of normal database recovery
-procedures, however, applications may wish to call DbEnv::remove
-as part of application shutdown to free up system resources.
-Specifically, when the <a href="../api_cxx/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was specified to
-<a href="../api_cxx/env_open.html">DbEnv::open</a>, it may be useful to call DbEnv::remove in order
-to release system shared memory segments that have been allocated.
-<p>In the case of catastrophic or system failure, database recovery must be
-performed (see <a href="../utility/db_recover.html">db_recover</a>), or the <a href="../api_cxx/env_open.html#DB_RECOVER">DB_RECOVER</a> and
-<a href="../api_cxx/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a> flags to <a href="../api_cxx/env_open.html">DbEnv::open</a> must be specified
-when the environment is re-opened. Alternatively, if recovery is not
-required because no database state is maintained across failures, and
-the <a href="../api_cxx/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was not specified when the environment
-was created, it is possible to clean up an environment by removing all
-of the files in the environment directory that begin with the string
-prefix "__db", as no backing files are created in any other directory.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+environment removal will usually succeed, and processes that have already
+joined the region will continue to run in that region without change.
+However, processes attempting to join the environment will either fail
+or create new regions. On other systems in which the <b>unlink</b>(2) system call will fail if any process has an open file descriptor for
+the file (for example Windows/NT), the region removal will fail.</p>
+<p>Calling DbEnv::remove should not be necessary for most applications
+because the Berkeley DB environment is cleaned up as part of normal database
+recovery procedures. However, applications may want to call
+DbEnv::remove as part of application shut down to free up system
+resources. For example, if the <a href="../api_cxx/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag was specified
+to <a href="../api_cxx/env_open.html">DbEnv::open</a>, it may be useful to call DbEnv::remove in
+order to release system shared memory segments that have been allocated.
+Or, on architectures in which mutexes require allocation of underlying
+system resources, it may be useful to call DbEnv::remove in order
+to release those resources. Alternatively, if recovery is not required
+because no database state is maintained across failures, and no system
+resources need to be released, it is possible to clean up an environment
+by simply removing all the Berkeley DB files in the database environment's
+directories.</p>
+<p>In multithreaded applications, only a single thread may call
+DbEnv::remove.</p>
+<p>A <a href="../api_cxx/env_class.html">DbEnv</a> handle that has already been used to open an environment
+should not be used to call the DbEnv::remove method; a new
+<a href="../api_cxx/env_class.html">DbEnv</a> handle should be created for that purpose.</p>
+<p>After DbEnv::remove has been called, regardless of its return,
+the Berkeley DB environment handle may not be accessed again.</p>
+<p>The DbEnv::remove method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_home</b><dd>
+The <b>db_home</b> parameter names the database environment to be removed.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>If the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, the environment is removed regardless
-of any processes that may still using it, and, no locks are acquired
-during this process. (Generally, the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is only
-specified when applications were unable to shut down cleanly, and there
+<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>If the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is set, the environment is removed, regardless
+of any processes that may still using it, and no locks are acquired
+during this process. (Generally, the <a href="../api_cxx/env_remove.html#DB_FORCE">DB_FORCE</a> flag is
+specified only when applications were unable to shut down cleanly, and there
is a risk that an application may have died holding a Berkeley DB lock.)
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
+<a name="3"><!--meow--></a>
+<p><dt><a name="DB_USE_ENVIRON">DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, environment information will be
+used in file naming for all users only if the DB_USE_ENVIRON
+flag is set.
+<p><dt><a name="DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files
+are used can create security problems, if the
+DB_USE_ENVIRON_ROOT flag is set, environment information will
+be used for file naming only for users with appropriate permissions (for
+example, users with a user-ID of 0 on UNIX systems).
+</dl>
</dl>
-<p>In multi-threaded applications, only a single thread may call
-DbEnv::remove.
-<p>A <a href="../api_cxx/dbenv_class.html">DbEnv</a> handle which has already been used to open an
-environment should not be used to call the DbEnv::remove method, a new
-<a href="../api_cxx/dbenv_class.html">DbEnv</a> handle should be created for that purpose.
-<p>Once DbEnv::remove has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DbEnv::remove method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<h3>Errors</h3>
+<p>The DbEnv::remove method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EBUSY<dd>The shared memory region was in use and the force flag was not set.
+<p><dt>EBUSY <dd>The shared memory region was in use and the force flag was not set.
</dl>
-<p>The DbEnv::remove method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::remove method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p><dl compact>
+<p><dt>ENOENT<dd>The file or directory does not exist.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_alloc.html b/db/docs/api_cxx/env_set_alloc.html
index 7838fe017..2965d7f84 100644
--- a/db/docs/api_cxx/env_set_alloc.html
+++ b/db/docs/api_cxx/env_set_alloc.html
@@ -1,20 +1,22 @@
-<!--Id: env_set_alloc.so,v 1.3 2001/05/01 14:23:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_alloc.so,v 1.21 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_alloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_alloc</h1>
+<h3>DbEnv::set_alloc</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,24 +24,20 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef void *(*db_malloc_fcn_type)(void *, size_t);
- typedef void *(*db_realloc_fcn_type)(size_t);
- typedef void *(*db_free_fcn_type)(void *);
+ typedef void *(*db_malloc_fcn_type)(size_t);
+ typedef void *(*db_realloc_fcn_type)(void *, size_t);
+ typedef void *(*db_free_fcn_type)(void *);
};
<p>
int
DbEnv::set_alloc(db_malloc_fcn_type app_malloc,
- db_realloc_fcn_type app_realloc,
- db_free_fcn_type app_free);
+ db_realloc_fcn_type app_realloc,
+ db_free_fcn_type app_free);
</pre></h3>
-<h1>Description</h1>
-<p>Set the allocation functions used by the <a href="../api_cxx/dbenv_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a>
-methods to allocate or free memory owned by the application. The
-DbEnv::set_alloc interface sets the allocation functions for a
-database environment; the <a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a> interface sets the
-allocation functions for a single database. If both are specified,
-functions specified for a database will be used in preference to
-functions specified for environment.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_alloc</h3>
+<p>Set the allocation functions used by the <a href="../api_cxx/env_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a>
+methods to allocate or free memory owned by the application.</p>
<p>There are a number of interfaces in Berkeley DB where memory is allocated by
the library and then given to the application. For example, the
<a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> flag, when specified in the <a href="../api_cxx/dbt_class.html">Dbt</a> object,
@@ -48,69 +46,63 @@ which then becomes the responsibility of the calling application. (See
<a href="../api_cxx/dbt_class.html">Dbt</a> for more information.) Other examples are the Berkeley DB
interfaces which return statistical information to the application:
<a href="../api_cxx/db_stat.html">Db::stat</a>, <a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>, <a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>, <a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>, and <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>. There is
-one interface in the Berkeley DB where memory is allocated by the application
-and then given to the library: <a href="../api_cxx/db_associate.html">Db::associate</a>.
+<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>, <a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>, and <a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>. There is one
+method in Berkeley DB where memory is allocated by the application and then
+given to the library: <a href="../api_cxx/db_associate.html">Db::associate</a>.</p>
<p>On systems in which there may be multiple library versions of the
standard allocation routines (notably Windows NT), transferring memory
between the library and the application will fail because the Berkeley DB
library allocates memory from a different heap than the application uses
to free it. To avoid this problem, the DbEnv::set_alloc and
<a href="../api_cxx/db_set_alloc.html">Db::set_alloc</a> methods can be used to pass Berkeley DB references to the
-application's allocation routines.
-<p>It is not an error to not specify all three arguments to these
-interfaces; however, in that case the specified interfaces must be
-compatible with the standard library interfaces, as they will be used
-together. The methods specified must match the calling
-conventions of the ANSI C X3.159-1989 (ANSI C) library routines of the same name.
-<p>The DbEnv::set_alloc interface may be used only to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_alloc method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_alloc method may fail and throw an exception or return a non-zero error for the following conditions:
+application's allocation routines.</p>
+<p>It is not an error to specify only one or two of the possible allocation
+function parameters to these interfaces; however, in that case the
+specified interfaces must be compatible with the standard library
+interfaces, as they will be used together. The functions specified must
+match the calling conventions of the ANSI C X3.159-1989 (ANSI C) library routines of
+the same name.</p>
+<p>The DbEnv::set_alloc method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_alloc method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+</p>
+<p>The DbEnv::set_alloc method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>app_malloc</b><dd>
+The <b>app_malloc</b> parameter is the application-specified malloc
+function.
+<p><dt><b>app_realloc</b><dd>
+The <b>app_realloc</b> parameter is the application-specified realloc
+function.
+<p><dt><b>app_free</b><dd>
+The <b>app_free</b> parameter is the application-specified free function.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_alloc method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::set_alloc method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_alloc method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a>
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_pageyield.html">DbEnv::set_pageyield</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-<a href="../api_cxx/env_set_panicstate.html">DbEnv::set_panicstate</a>,
-<a href="../api_cxx/env_set_rec_init.html">DbEnv::set_recovery_init</a>,
-<a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a>,
-<a href="../api_cxx/env_set_region_init.html">DbEnv::set_region_init</a>,
-<a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a>,
-<a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a>,
-<a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a>,
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>
-and
-<a href="../api_cxx/env_version.html">DbEnv::version</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_app_dispatch.html b/db/docs/api_cxx/env_set_app_dispatch.html
index 28efde342..ba8b9ec11 100644
--- a/db/docs/api_cxx/env_set_app_dispatch.html
+++ b/db/docs/api_cxx/env_set_app_dispatch.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_app_dispatch.so,v 10.36 2002/06/24 14:49:17 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_app_dispatch.so,v 10.53 2003/11/19 03:57:15 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_app_dispatch</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_app_dispatch</h1>
+<h3>DbEnv::set_app_dispatch</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,19 +24,37 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_app_dispatch(int (*)(DbEnv *dbenv,
+DbEnv::set_app_dispatch(int (*tx_recover)(DbEnv *dbenv,
Dbt *log_rec, DbLsn *lsn, db_recops op));
</pre></h3>
-<h1>Description</h1>
-<p>Set the application's method to be called during transaction abort
-and recovery. This method must return 0 on success and either
-<b>errno</b> or a value outside of the Berkeley DB error name space on
-failure. It takes four arguments:
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_app_dispatch</h3>
+<p>Declare a function to be called during transaction abort and recovery
+to process application-specific log records.</p>
+<p>The DbEnv::set_app_dispatch method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_app_dispatch method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_app_dispatch
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DbEnv::set_app_dispatch method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tx_recover</b><dd>
+The <b>tx_recover</b> parameter is the application's abort and recovery
+function. The function takes four parameters:
<p><dl compact>
-<p><dt>dbenv <dd>A Berkeley DB environment.
-<p><dt>log_rec<dd>A log record.
-<p><dt>lsn<dd>A log sequence number.
-<p><dt>op<dd>One of the following values:
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>log_rec</b><dd>The <b>log_rec</b> parameter is a log record.
+<p><dt><b>lsn</b><dd>The <b>lsn</b> parameter is a log sequence number.
+<p><dt><b>op</b><dd>The <b>op</b> parameter is one of the following values:
<p><dl compact>
<p><dt><a name="DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a><dd>The log is being read backward to determine which transactions have been
committed and to abort those operations that were not; undo the operation
@@ -49,62 +68,40 @@ described by the log record.
<p><dt><a name="DB_TXN_PRINT">DB_TXN_PRINT</a><dd>The log is being printed for debugging purposes; print the contents of
this log record in the desired format.
</dl>
-</dl>
<p>The DB_TXN_FORWARD_ROLL and DB_TXN_APPLY operations
frequently imply the same actions, redoing changes that appear in the
log record, although if a recovery function is to be used on a
-replication client where reads may be taking place concurrently with
-the processing of incoming messages, DB_TXN_APPLY operations
-should also perform appropriate locking. The macro DB_REDO(op) checks
-that the operation is one of DB_TXN_FORWARD_ROLL or
-DB_TXN_APPLY, and should be used in the recovery code to refer
-to the conditions under which operations should be redone. Similarly,
-the macro DB_UNDO(op) checks if the operation is one of
-DB_TXN_BACKWARD_ROLL or DB_TXN_ABORT.
-<p>The DbEnv::set_app_dispatch method configures operations performed using the specified
-<a href="../api_cxx/dbenv_class.html">DbEnv</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DbEnv::set_app_dispatch interface may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_app_dispatch
-must be consistent with the existing environment or corruption can
-occur.
-<p>The DbEnv::set_app_dispatch method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_app_dispatch method may fail and throw an exception or return a non-zero error for the following conditions:
+replication client where reads may be taking place concurrently with the
+processing of incoming messages, DB_TXN_APPLY operations should
+also perform appropriate locking. The macro DB_REDO(op) checks that the
+operation is one of DB_TXN_FORWARD_ROLL or DB_TXN_APPLY,
+and should be used in the recovery code to refer to the conditions under
+which operations should be redone. Similarly, the macro DB_UNDO(op)
+checks if the operation is one of DB_TXN_BACKWARD_ROLL or
+DB_TXN_ABORT.</p>
+</dl>
+<p>The function must return 0 on success and either <b>errno</b> or a
+value outside of the Berkeley DB error name space on failure.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_app_dispatch method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::set_app_dispatch method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_app_dispatch method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
-<p>
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_discard.html">DbTxn::discard</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_set_timeout.html">DbTxn::set_timeout</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_cachesize.html b/db/docs/api_cxx/env_set_cachesize.html
index 57ad573cb..2f7e9d684 100644
--- a/db/docs/api_cxx/env_set_cachesize.html
+++ b/db/docs/api_cxx/env_set_cachesize.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_cachesize.so,v 10.19 2000/05/20 16:29:11 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_cachesize.so,v 10.46 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_cachesize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_cachesize</h1>
+<h3>DbEnv::set_cachesize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,66 +25,110 @@
<p>
int
DbEnv::set_cachesize(u_int32_t gbytes, u_int32_t bytes, int ncache);
+<p>
+int
+DbEnv::get_cachesize(u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_cachesize</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>Set the size of the shared memory buffer pool -- that is, the cache.
+The cache should be the size of the normal working data set of the
+application, with some small amount of additional memory for unusual
+situations. (Note: the working set is not the same as the number of
+pages accessed simultaneously, and is usually much larger.)</p>
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>The DbEnv::set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_cachesize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified. The current maximum size of a single cache is 4GB.
+(All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.)
+For information on tuning the Berkeley DB cache size, see
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
+<p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large
+enough they cannot be allocated contiguously on some architectures. For
+example, some releases of Solaris limit the amount of memory that may
+be allocated contiguously by a process. If <b>ncache</b> is 0 or 1,
+the cache will be allocated contiguously in memory. If it is greater
+than 1, the cache will be broken up into <b>ncache</b> equally sized,
+separate pieces of memory.</p>
<p>The database environment's cache size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_cachesize", one or more whitespace characters,
-and the three arguments specified to this interface, separated by whitespace
-characters, for example, "set_cachesize 1 500 2". Because the <b>DB_CONFIG</b> file is read when the database
+and the cache size specified in three parts: the gigabytes of cache, the
+additional bytes of cache, and the number of caches, also separated by
+whitespace characters. For example, "set_cachesize 2 524288000 3" would
+create a 2.5GB logical cache, split between three physical caches.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_cachesize method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_cachesize method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_cachesize
+will be ignored.
+</p>
+<p>The DbEnv::set_cachesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The size of the cache is set to <b>gbytes</b> gigabytes plus <b>bytes</b>.
+<p><dt><b>ncache</b><dd>
+The <b>ncache</b> parameter is the number of caches to create.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_cachesize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
-<p>The specified cache size was impossibly small.
+<p><dt>EINVAL<dd>If the specified cache size was impossibly small;
+the method was called after
+<a href="../api_cxx/env_open.html">DbEnv::open</a>
+was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_cachesize</h3>
+<p>The DbEnv::get_cachesize method returns the current size and composition of the
+cache.</p>
+<p>The DbEnv::get_cachesize method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_cachesize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the cache is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the cache is copied.
+<p><dt><b>ncachep</b><dd>
+The <b>ncachep</b> parameter references memory into which
+ the number of caches is copied.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_data_dir.html b/db/docs/api_cxx/env_set_data_dir.html
index 7c8bd44ff..63dd8106c 100644
--- a/db/docs/api_cxx/env_set_data_dir.html
+++ b/db/docs/api_cxx/env_set_data_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_data_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_data_dir.so,v 10.23 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_data_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_data_dir</h1>
+<h3>DbEnv::set_data_dir</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,58 +25,87 @@
<p>
int
DbEnv::set_data_dir(const char *dir);
+<p>
+int
+DbEnv::get_data_dirs(const char ***dirpp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_data_dir</h3>
+<a name="3"><!--meow--></a>
<p>Set the path of a directory to be used as the location of the access
method database files. Paths specified to the <a href="../api_cxx/db_open.html">Db::open</a> function
-will be searched relative to this path. Paths set using this interface
+will be searched relative to this path. Paths set using this method
are additive, and specifying more than one will result in each specified
directory being searched for database files. If any directories are
-specified, created database files will always be created in the first path
-specified.
-<p>If no database directories are specified, database files can only exist
-in the environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
+specified, created database files will always be created in the first
+path specified.</p>
+<p>If no database directories are specified, database files can exist only
+in the environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p>
<p>For the greatest degree of recoverability from system or application
failure, database files and log files should be located on separate
-physical devices.
-<p>The DbEnv::set_data_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_data_dir method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<p>The database environment's data directory may also be set using the environment's
+physical devices.</p>
+<p>The database environment's data directories may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_data_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+and the directory name.
+</p>
+<p>The DbEnv::set_data_dir method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_data_dir method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_data_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DbEnv::set_data_dir method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is a directory to be used as a location for
+database files.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_data_dir method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_data_dirs</h3>
+<p>The DbEnv::get_data_dirs method returns the NULL-terminated
+array of directories.</p>
+<p>The DbEnv::get_data_dirs method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_data_dirs method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirpp</b><dd>
+The DbEnv::get_data_dirs method returns a reference to the
+NULL-terminated
+array of directories in <b>dirpp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_encrypt.html b/db/docs/api_cxx/env_set_encrypt.html
index b0dbaf605..0e9e80d84 100644
--- a/db/docs/api_cxx/env_set_encrypt.html
+++ b/db/docs/api_cxx/env_set_encrypt.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_encrypt.so,v 10.20 2003/11/08 19:17:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_encrypt</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_encrypt</h1>
+<h3>DbEnv::set_encrypt</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,87 +25,83 @@
<p>
int
DbEnv::set_encrypt(const char *passwd, u_int32_t flags);
+<p>
+int
+DbEnv::get_encrypt_flags(u_int32_t *flagsp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_cxx/dbenv_class.html">DbEnv</a> and <a href="../api_cxx/db_class.html">Db</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_encrypt</h3>
+<a name="3"><!--meow--></a>
+<p>Set the password used by the Berkeley DB library to perform encryption and
+decryption.</p>
+<p>The DbEnv::set_encrypt method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_encrypt method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_encrypt
+must be consistent with the existing environment or an error will be
+returned.
+</p>
+<p>The DbEnv::set_encrypt method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
the following value:
<p><dl compact>
<p><dt><a name="DB_ENCRYPT_AES">DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
and Federal Information Processing Standard (FIPS) 197) algorithm for
encryption or decryption.
</dl>
-<p>The DbEnv::set_encrypt method configures a database environment, not only operations
-performed using the specified <a href="../api_cxx/dbenv_class.html">DbEnv</a> handle.
-<p>The DbEnv::set_encrypt interface may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_encrypt
-must be consistent with the existing environment or an error will be
-returned.
-<p>The DbEnv::set_encrypt method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_encrypt method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>passwd</b><dd>
+The <b>passwd</b> parameter is the password used to perform encryption
+and decryption.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_encrypt method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
+<p><dt>EINVAL<dd>If the method was called after
<a href="../api_cxx/env_open.html">DbEnv::open</a>
-was called.
+was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<p><dl compact>
+<p><dt>EOPNOTSUPP<dd>Cryptography is not available in this Berkeley DB release.
</dl>
-<p>The DbEnv::set_encrypt method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_encrypt method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_dbremove.html">DbEnv::dbremove</a>,
-<a href="../api_cxx/env_dbrename.html">DbEnv::dbrename</a>,
-<a href="../api_cxx/env_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_err.html">DbEnv::errx</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a>,
-<a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a>,
-<a href="../api_cxx/env_set_encrypt.html">DbEnv::set_encrypt</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_dir.html">DbEnv::set_lg_dir</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/env_set_lg_regionmax.html">DbEnv::set_lg_regionmax</a>,
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-<a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a>,
-<a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a>,
-<a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a>,
-<a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a>,
-<a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a>,
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>
-and
-<a href="../api_cxx/env_version.html">DbEnv::version</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_encrypt_flags</h3>
+<p>The DbEnv::get_encrypt_flags method returns the encryption flags.</p>
+<p>The DbEnv::get_encrypt_flags method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_encrypt_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DbEnv::get_encrypt_flags method returns the
+encryption flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_errcall.html b/db/docs/api_cxx/env_set_errcall.html
index 8c59632c6..7046d0b36 100644
--- a/db/docs/api_cxx/env_set_errcall.html
+++ b/db/docs/api_cxx/env_set_errcall.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_errcall.so,v 10.16 1999/12/20 08:52:29 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errcall.so,v 10.33 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_errcall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_errcall</h1>
+<h3>DbEnv::set_errcall</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,52 +26,49 @@
void DbEnv::set_errcall(
void (*db_errcall_fcn)(const char *errpfx, char *msg));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_errcall</h3>
When an error occurs in the Berkeley DB library, an exception is thrown or an
-error return value is returned by the method. In some cases,
+error return value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
debugging.
-<p>The DbEnv::set_errcall method is used to enhance the mechanism for reporting error
-messages to the application. In some cases, when an error occurs, Berkeley DB
-will call <b>db_errcall_fcn</b> with additional error information. The
-function must be defined with two arguments; the first will be the prefix
-string (as previously set by <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), the second will be the error message string.
-It is up to the <b>db_errcall_fcn</b> method to display the error
-message in an appropriate manner.
-<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method to display
-the additional information via an output stream, or the <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a>
-or <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> methods to display the additional information via a C
-library FILE *. You should not mix these approaches.
-<p>This error logging enhancement does not slow performance or significantly
+<p>The DbEnv::set_errcall and <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a> methods are used to
+enhance the mechanism for reporting error messages to the application.
+In some cases, when an error occurs, Berkeley DB will call
+<b>db_errcall_fcn</b> with additional error information. It is up to
+the <b>db_errcall_fcn</b> function to display the error message in an
+appropriate manner.</p>
+<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> and
+<a href="../api_cxx/db_set_error_stream.html">Db::set_error_stream</a> methods to display the additional information via
+an output stream, or the <a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a> or
+<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> methods to display the additional information via a C
+library FILE *. You should not mix these approaches.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>The DbEnv::set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
+as during application debugging.</p>
+<p>The DbEnv::set_errcall method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_errcall_fcn</b><dd>
+The <b>db_errcall_fcn</b> parameter is the application-specified error
+reporting function. The function takes two parameters:
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>The <b>errpfx</b> parameter is the prefix string (as previously set by
+<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>).
+<p><dt><b>msg</b><dd>The <b>msg</b> parameter is the error message string.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_errfile.html b/db/docs/api_cxx/env_set_errfile.html
index e9658cd18..1b589c4cd 100644
--- a/db/docs/api_cxx/env_set_errfile.html
+++ b/db/docs/api_cxx/env_set_errfile.html
@@ -1,77 +1,92 @@
-<!--$Id: env_set_errfile.so,v 10.17 1999/12/20 08:52:29 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errfile.so,v 10.31 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_errfile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_errfile</h1>
+<h3>DbEnv::set_errfile</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-void DbEnv::set_errfile(FILE *errfile);
+void
+DbEnv::set_errfile(FILE *errfile);
+<p>
+void
+DbEnv::get_errfile(FILE **errfilep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_errfile</h3>
+<a name="3"><!--meow--></a>
When an error occurs in the Berkeley DB library, an exception is thrown or an
-error return value is returned by the method. In some cases,
+error return value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
debugging.
-<p>The DbEnv::set_errfile method is used to enhance the mechanism for reporting error
-messages to the application by setting a C library FILE * to be used for
-displaying additional Berkeley DB error messages. In some cases, when an error
-occurs, Berkeley DB will output an additional error message to the specified
-file reference.
+<p>The <a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> and <a href="../api_cxx/db_set_errcall.html">Db::set_errcall</a> methods are used to
+enhance the mechanism for reporting error messages to the application
+by setting a C library FILE * to be used for displaying additional Berkeley DB
+error messages. In some cases, when an error occurs, Berkeley DB will output
+an additional error message to the specified file reference.</p>
<p>Alternatively, you can use the <a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a> method to display
the additional information via an output stream, or the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method to capture the additional error information in
a way that does not use either output streams or C library FILE *'s. You
-should not mix these approaches.
+should not mix these approaches.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
<a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> or <a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), an error string, and
-a trailing &lt;newline&gt; character.
+a trailing &lt;newline&gt; character.</p>
<p>This error logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>The DbEnv::set_errfile interface may be used to configure Berkeley DB at any time
-during the life of the application.
+as during application debugging.</p>
+<p>The DbEnv::set_errfile method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfile</b><dd>
+The <b>errfile</b> parameter is a C library FILE * to be used for
+displaying additional Berkeley DB error information.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_errfile</h3>
+<p>The DbEnv::get_errfile method returns the FILE *.</p>
+<p>The DbEnv::get_errfile method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_errfile method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errfilep</b><dd>
+The DbEnv::get_errfile method returns the
+FILE * in <b>errfilep</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_error_stream.html b/db/docs/api_cxx/env_set_error_stream.html
index 18dc192cc..ad04a7237 100644
--- a/db/docs/api_cxx/env_set_error_stream.html
+++ b/db/docs/api_cxx/env_set_error_stream.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_error_stream.so,v 10.13 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_error_stream.so,v 10.26 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_error_stream</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_error_stream</h1>
+<h3>DbEnv::set_error_stream</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,52 +25,45 @@
<p>
void DbEnv::set_error_stream(class ostream*);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_error_stream</h3>
<p>When an error occurs in the Berkeley DB library, an exception is thrown or an
-<b>errno</b> value is returned by the method. In some cases,
+<b>errno</b> value is returned by the interface. In some cases,
however, the <b>errno</b> value may be insufficient to completely
describe the cause of the error, especially during initial application
-debugging.
-<p>The DbEnv::set_error_stream method is used to enhance the mechanism for
-reporting error messages to the application by setting the C++ ostream
-used for displaying additional Berkeley DB error messages. In some cases,
-when an error occurs, Berkeley DB will output an additional error message to
-the specified stream.
+debugging.</p>
+<p>The DbEnv::set_error_stream and <a href="../api_cxx/db_set_error_stream.html">Db::set_error_stream</a> methods
+are used to enhance the mechanism for reporting error messages to the
+application by setting the C++ ostream used for displaying additional
+Berkeley DB error messages. In some cases, when an error occurs, Berkeley DB will
+output an additional error message to the specified stream.</p>
<p>The error message will consist of the prefix string and a colon
("<b>:</b>") (if a prefix string was previously specified using
<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>), an error string, and a trailing
-&lt;newline&gt; character.
+&lt;newline&gt; character.</p>
<p>Alternatively, you can use the <a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a> method to display
the additional information via a C library FILE *, or the
<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a> method to capture the additional error information in
a way that does not use either output streams or C library FILE *'s. You
-should not mix these approaches.
-<p>This error logging enhancement does not slow performance or significantly
+should not mix these approaches.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>stream</b><dd>
+The <b>stream</b> parameter is the application-specified output stream to
+be used for additional error information.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_errpfx.html b/db/docs/api_cxx/env_set_errpfx.html
index 62167d96e..8a093c921 100644
--- a/db/docs/api_cxx/env_set_errpfx.html
+++ b/db/docs/api_cxx/env_set_errpfx.html
@@ -1,60 +1,77 @@
-<!--$Id: env_set_errpfx.so,v 10.12 1999/12/20 08:52:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_errpfx.so,v 10.30 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_errpfx</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_errpfx</h1>
+<h3>DbEnv::set_errpfx</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-void DbEnv::set_errpfx(const char *errpfx);
+void
+DbEnv::set_errpfx(const char *errpfx);
+<p>
+void
+DbEnv::get_errpfx(const char **errpfxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>The DbEnv::set_errpfx method does not copy the memory referenced by the
-<b>errpfx</b> argument, rather, it maintains a reference to it. This
-allows applications to modify the error message prefix at any time,
-without repeatedly calling DbEnv::set_errpfx, but means that the
-memory must be maintained until the handle is closed.
-<p>The DbEnv::set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_errpfx</h3>
+<a name="3"><!--meow--></a>
+<p>Set the prefix string that appears before error messages issued by Berkeley DB.</p>
+<p>The <a href="../api_cxx/db_set_errpfx.html">Db::set_errpfx</a> and DbEnv::set_errpfx methods do not copy
+the memory to which the <b>errpfx</b> parameter refers; rather, they
+maintain a reference to it. Although this allows applications to modify
+the error message prefix at any time (without repeatedly calling the
+interfaces), it means the memory must be maintained until the handle is
+closed.</p>
+<p>The DbEnv::set_errpfx method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfx</b><dd>
+The <b>errpfx</b> parameter is the application-specified error prefix
+for additional error messages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_errpfx</h3>
+<p>The DbEnv::get_errpfx method returns the error prefix.</p>
+<p>The DbEnv::get_errpfx method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_errpfx method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>errpfxp</b><dd>
+The DbEnv::get_errpfx method returns a reference to the
+error prefix in <b>errpfxp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_feedback.html b/db/docs/api_cxx/env_set_feedback.html
index 147a5dc59..4ca4abd94 100644
--- a/db/docs/api_cxx/env_set_feedback.html
+++ b/db/docs/api_cxx/env_set_feedback.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_feedback.so,v 10.19 2000/07/09 19:12:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_feedback.so,v 10.40 2003/11/08 19:17:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_feedback</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_feedback</h1>
+<h3>DbEnv::set_feedback</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,50 +25,53 @@
<p>
int
DbEnv::set_feedback(
- void (*db_feedback_fcn)(DbEnv *, int opcode, int pct));
+ void (*db_feedback_fcn)(DbEnv *dbenv, int opcode, int percent));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_feedback</h3>
<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The DbEnv::set_feedback method can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback method. This method must be declared with
-three arguments: the first will be a reference to the enclosing
-environment, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback method to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
+amounts of time. The DbEnv::set_feedback method can be used by applications
+to monitor progress within these operations. When an operation is
+likely to take a long time, Berkeley DB will call the specified callback
+function with progress information.</p>
+<p>It is up to the callback function to display this information in an
+appropriate manner.</p>
+<p>The DbEnv::set_feedback method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle
+<p>The DbEnv::set_feedback method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_feedback method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_feedback_fcn</b><dd>
+The <b>db_feedback_fcn</b> parameter is the application-specified
+feedback function called to report Berkeley DB operation progress. The
+callback function must take three parameters:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is a reference to the enclosing database
+environment.
+<p><dt><b>opcode</b><dd>The <b>opcode</b> parameter is an operation code. The <b>opcode</b>
+parameter may take on any of the following values:
<p><dl compact>
<p><dt><a name="DB_RECOVER">DB_RECOVER</a><dd>The environment is being recovered.
</dl>
-<p>The DbEnv::set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DbEnv::set_feedback method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<p><dt><b>percent</b><dd>The <b>percent</b> parameter is the percent of the operation that has
+been completed, specified as an integer value between 0 and 100.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_flags.html b/db/docs/api_cxx/env_set_flags.html
index ad8f4fc1c..ea8b18b13 100644
--- a/db/docs/api_cxx/env_set_flags.html
+++ b/db/docs/api_cxx/env_set_flags.html
@@ -1,20 +1,22 @@
<!--$Id-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_flags</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_flags</h1>
+<h3>DbEnv::set_flags</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,65 +25,298 @@
<p>
int
DbEnv::set_flags(u_int32_t flags, int onoff);
+<p>
+int
+DbEnv::get_flags(u_int32_t *flagsp)
</pre></h3>
-<h1>Description</h1>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-If <b>onoff</b> is zero, the specified flags are cleared, otherwise they
-are set.
-<p><dl compact>
-<p><dt><a name="DB_CDB_ALLDB">DB_CDB_ALLDB</a><dd>For Berkeley DB Concurrent Data Store applications, perform locking on an environment-wide basis
-rather than per-database. This flag may only be used to configure Berkeley DB
-before the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Copy read-only database files in this environment into the local cache
-instead of potentially mapping them into process memory (see the
-description of the <a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a> method for further information).
-<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log on transaction commit or prepare.
-This means that transactions exhibit the ACI (atomicity, consistency and
-isolation) properties, but not D (durability), i.e., database integrity
-will be maintained but it is possible that some number of the most
-recently committed transactions may be undone during recovery instead of
-being redone.
-<p>The number of transactions that are potentially at risk is governed by
-how often the log is checkpointed (see <a href="../utility/db_checkpoint.html">db_checkpoint</a> for more
-information) and how many log updates can fit on a single log page.
-</dl>
-<p>The DbEnv::set_flags method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a database environment.</p>
<p>The database environment's flag values may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_flags", one or more whitespace characters,
-and the interface flag argument as a string, for example, "set_flags
-DB_TXN_NOSYNC". Because the <b>DB_CONFIG</b> file is read when the database
+and the method flag parameter as a string; for example, "set_flags
+DB_TXN_NOSYNC".
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set by bitwise inclusively <b>OR</b>'ing together one or more
+of the following values:
+<p><dl compact>
+<p><dt><a name="DB_AUTO_COMMIT">DB_AUTO_COMMIT</a><dd>If set, operations for which no explicit transaction handle was
+specified, and which modify databases in the database environment, will
+be automatically enclosed within a transaction. If the call succeeds,
+changes made by the operation will be recoverable. If the call fails,
+the operation will have made no changes.
+<p>Calling DbEnv::set_flags with the <a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the <a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The <a href="../api_cxx/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="4"><!--meow--></a>
+<p><dt><a name="DB_CDB_ALLDB">DB_CDB_ALLDB</a><dd>If set, Berkeley DB Concurrent Data Store applications will perform locking on an environment-wide
+basis rather than on a per-database basis.
+<p>Calling DbEnv::set_flags with the DB_CDB_ALLDB flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_CDB_ALLDB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_CDB_ALLDB flag may be used to configure Berkeley DB only before the
+<a href="../api_cxx/env_open.html">DbEnv::open</a> method is called.</p>
+<a name="5"><!--meow--></a>
+<p><dt><a name="DB_DIRECT_DB">DB_DIRECT_DB</a><dd>Turn off system buffering of Berkeley DB database files to avoid double caching.
+<p>Calling DbEnv::set_flags with the DB_DIRECT_DB flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_DIRECT_DB flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DIRECT_DB flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="6"><!--meow--></a>
+<p><dt><a name="DB_DIRECT_LOG">DB_DIRECT_LOG</a><dd>Turn off system buffering of Berkeley DB log files to avoid double caching.
+<p>Calling DbEnv::set_flags with the DB_DIRECT_LOG flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_DIRECT_LOG flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_DIRECT_LOG flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="7"><!--meow--></a>
+<p><dt><a name="DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a><dd>If set, Berkeley DB will automatically remove log files that are no longer
+needed. Automatic log file removal is likely to make catastrophic
+recovery impossible.
+<p>Calling DbEnv::set_flags with the DB_LOG_AUTOREMOVE flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_LOG_AUTOREMOVE flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_LOG_AUTOREMOVE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="8"><!--meow--></a>
+<p><dt><a name="DB_NOLOCKING">DB_NOLOCKING</a><dd>If set, Berkeley DB will grant all requested mutual exclusion mutexes and
+database locks without regard for their actual availability. This
+functionality should never be used for purposes other than debugging.
+<p>Calling DbEnv::set_flags with the DB_NOLOCKING flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_NOLOCKING flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="9"><!--meow--></a>
+<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>If set, Berkeley DB will copy read-only database files into the local cache
+instead of potentially mapping them into process memory (see the
+description of the <a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a> method for further
+information).
+<p>Calling DbEnv::set_flags with the DB_NOMMAP flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_NOMMAP flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_NOMMAP flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="10"><!--meow--></a>
+<p><dt><a name="DB_NOPANIC">DB_NOPANIC</a><dd>If set, Berkeley DB will ignore any panic state in the database environment.
+(Database environments in a panic state normally refuse all attempts to
+call Berkeley DB functions, returning <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.) This
+functionality should never be used for purposes other than debugging.
+<p>Calling DbEnv::set_flags with the DB_NOPANIC flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_NOPANIC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<p><dt><a name="DB_OVERWRITE">DB_OVERWRITE</a><dd>Overwrite files stored in encrypted formats before deleting them. Berkeley DB
+overwrites files using alternating 0xff, 0x00 and 0xff byte patterns.
+For file overwriting to be effective, the underlying file must be stored
+on a fixed-block filesystem. Systems with journaling or logging filesystems
+will require operating system support and probably modification of the
+Berkeley DB sources.
+<p>Calling DbEnv::set_flags with the DB_OVERWRITE flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+</p>
+<p>The DB_OVERWRITE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="11"><!--meow--></a>
+<p><dt><a name="DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a><dd>If set, Berkeley DB will set the panic state for the database environment.
+(Database environments in a panic state normally refuse all attempts to
+call Berkeley DB functions, returning <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>.) This flag may
+not be specified using the environment's <b>DB_CONFIG</b> file. This
+flag may be used to configure Berkeley DB only after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method
+is called.
+<p>Calling DbEnv::set_flags with the DB_PANIC_ENVIRONMENT flag affects the
+database environment, including all threads of control accessing the
+database environment.</p>
+<p>The DB_PANIC_ENVIRONMENT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="12"><!--meow--></a>
+<p><dt><a name="DB_REGION_INIT">DB_REGION_INIT</a><dd>In some applications, the expense of page-faulting the underlying shared
+memory regions can affect performance. (For example, if the page-fault
+occurs while holding a lock, other lock requests can convoy, and overall
+throughput may decrease.) If set, Berkeley DB will page-fault shared regions
+into memory when initially creating or joining a Berkeley DB environment. In
+addition, Berkeley DB will write the shared regions when creating an
+environment, forcing the underlying virtual memory and filesystems to
+instantiate both the necessary memory and the necessary disk space.
+This can also avoid out-of-disk space failures later on.
+<p>Calling DbEnv::set_flags with the DB_REGION_INIT flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_REGION_INIT flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_REGION_INIT flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<p><dt><a name="DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a><dd>If set, database calls timing out based on lock or transaction timeout
+values will
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception instead of
+<a href="../api_cxx/deadlock_class.html">DbDeadlockException</a>.
+This allows applications to distinguish between operations which have
+deadlocked and operations which have exceeded their time limits.
+<p>Calling DbEnv::set_flags with the <a href="../api_cxx/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the <a href="../api_cxx/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The <a href="../api_cxx/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="13"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>If set, Berkeley DB will not write or synchronously flush the log on transaction
+commit.
+This means that transactions exhibit the ACI (atomicity, consistency,
+and isolation) properties, but not D (durability); that is, database
+integrity will be maintained, but if the application or system fails,
+it is possible some number of the most recently committed transactions
+may be undone during recovery. The number of transactions at risk is
+governed by how many log updates can fit into the log buffer, how often
+the operating system flushes dirty buffers to disk, and how often the
+log is checkpointed.
+<p>Calling DbEnv::set_flags with the DB_TXN_NOSYNC flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_TXN_NOSYNC flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p> <p>The DB_TXN_NOSYNC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="14"><!--meow--></a>
+<p><dt><a name="DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a><dd>If set, Berkeley DB will not write log records. This means that
+transactions exhibit the ACI (atomicity, consistency, and isolation)
+properties, but not D (durability); that is, database integrity will
+be maintained, but if the application or system fails, integrity will
+not persist. All database files must be verified and/or restored from
+backup after a failure. In order to ensure integrity after
+application shut down, all database handles must be closed without
+specifying <a href="../api_cxx/db_close.html#DB_NOSYNC">DB_NOSYNC</a>, or all database changes must be flushed
+from the database environment cache using
+either the <a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a> or <a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> methods.
+<p>Calling DbEnv::set_flags with the DB_TXN_NOT_DURABLE flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_TXN_NOT_DURABLE flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p> <p>The DB_TXN_NOT_DURABLE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="15"><!--meow--></a>
+<p><dt><a name="DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a><dd>If set, Berkeley DB will write, but will not synchronously flush, the log on
+transaction commit.
+This means that transactions exhibit the ACI (atomicity, consistency,
+and isolation) properties, but not D (durability); that is, database
+integrity will be maintained, but if the system fails, it is possible
+some number of the most recently committed transactions may be undone
+during recovery. The number of transactions at risk is governed by how
+often the system flushes dirty buffers to disk and how often the log is
+checkpointed.
+<p>Calling DbEnv::set_flags with the DB_TXN_WRITE_NOSYNC flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_TXN_WRITE_NOSYNC flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_TXN_WRITE_NOSYNC flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+<a name="16"><!--meow--></a>
+<p><dt><a name="DB_YIELDCPU">DB_YIELDCPU</a><dd>If set, Berkeley DB will yield the processor immediately after each page or
+mutex acquisition. This functionality should never be used for purposes
+other than stress testing.
+<p>Calling DbEnv::set_flags with the DB_YIELDCPU flag only affects
+the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle (and any other Berkeley DB handles opened
+within the scope of that handle).
+For consistent behavior across the environment, all <a href="../api_cxx/env_class.html">DbEnv</a>
+handles opened in the environment must either set the DB_YIELDCPU flag
+or the flag should be specified in the <b>DB_CONFIG</b> configuration
+file.</p>
+<p>The DB_YIELDCPU flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
</dl>
+<p><dt><b>onoff</b><dd>
+If the <b>onoff</b> parameter is
+zero,
+the specified flags are cleared; otherwise they are set.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_flags method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_flags</h3>
+<p>The DbEnv::get_flags method returns the configuration flags.</p>
+<p>The DbEnv::get_flags method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DbEnv::get_flags method returns the
+configuration flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lg_bsize.html b/db/docs/api_cxx/env_set_lg_bsize.html
index fb9efecef..018af1026 100644
--- a/db/docs/api_cxx/env_set_lg_bsize.html
+++ b/db/docs/api_cxx/env_set_lg_bsize.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_bsize.so,v 10.10 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_bsize.so,v 10.31 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lg_bsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lg_bsize</h1>
+<h3>DbEnv::set_lg_bsize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,49 +25,85 @@
<p>
int
DbEnv::set_lg_bsize(u_int32_t lg_bsize);
+<p>
+int
+DbEnv::get_lg_bsize(u_int32_t *lg_bsizep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_bsize</h3>
+<a name="3"><!--meow--></a>
<p>Set the size of the in-memory log buffer, in bytes. By default, or if
-the value is set to 0, a size of 32K is used.
+the value is set to 0, a size of 32K is used. The size of the log file
+(see <a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>) must be at least four times the size of
+the in-memory log buffer.</p>
<p>Log information is stored in-memory until the storage space fills up
or transaction commit forces the information to be flushed to stable
storage. In the presence of long-running transactions or transactions
producing large amounts of data, larger buffer sizes can increase
-throughput.
-<p>The DbEnv::set_lg_bsize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lg_bsize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+throughput.</p>
<p>The database environment's log buffer size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_bsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lg_bsize method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lg_bsize method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lg_bsize
+will be ignored.
+</p>
+<p>The DbEnv::set_lg_bsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_bsize</b><dd>
+The <b>lg_bsize</b> parameter is the size of the in-memory log buffer,
+in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lg_bsize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called;
+The size of the log file is less than four times the size of the in-memory
+log buffer; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lg_bsize</h3>
+<p>The DbEnv::get_lg_bsize method returns the size of the log buffer, in bytes.</p>
+<p>The DbEnv::get_lg_bsize method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lg_bsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_bsizep</b><dd>
+The DbEnv::get_lg_bsize method returns the
+size of the log buffer, in bytes in <b>lg_bsizep</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lg_dir.html b/db/docs/api_cxx/env_set_lg_dir.html
index 9a97eb3fe..a46d9568f 100644
--- a/db/docs/api_cxx/env_set_lg_dir.html
+++ b/db/docs/api_cxx/env_set_lg_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_dir.so,v 10.21 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lg_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lg_dir</h1>
+<h3>DbEnv::set_lg_dir</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,54 +25,82 @@
<p>
int
DbEnv::set_lg_dir(const char *dir);
+<p>
+int
+DbEnv::get_lg_dir(const char **dirp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_dir</h3>
+<a name="3"><!--meow--></a>
<p>The path of a directory to be used as the location of logging files.
Log files created by the Log Manager subsystem will be created in this
-directory.
+directory.</p>
<p>If no logging directory is specified, log files are created in the
-environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
+environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p>
<p>For the greatest degree of recoverability from system or application
failure, database files and log files should be located on separate
-physical devices.
-<p>The DbEnv::set_lg_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lg_dir method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+physical devices.</p>
<p>The database environment's logging directory may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
+and the directory name.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lg_dir method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_lg_dir method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lg_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DbEnv::set_lg_dir method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is the directory used to store the logging files.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lg_dir method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lg_dir</h3>
+<p>The DbEnv::get_lg_dir method returns the log directory.</p>
+<p>The DbEnv::get_lg_dir method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lg_dir method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirp</b><dd>
+The DbEnv::get_lg_dir method returns a reference to the
+log directory in <b>dirp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lg_max.html b/db/docs/api_cxx/env_set_lg_max.html
index c0f27d19b..d692a1edd 100644
--- a/db/docs/api_cxx/env_set_lg_max.html
+++ b/db/docs/api_cxx/env_set_lg_max.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lg_max.so,v 10.20 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_max.so,v 10.40 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lg_max</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lg_max</h1>
+<h3>DbEnv::set_lg_max</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,49 +25,83 @@
<p>
int
DbEnv::set_lg_max(u_int32_t lg_max);
+<p>
+int
+DbEnv::get_lg_max(u_int32_t *);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum size of a single file in the log, in bytes. Because
-<a href="../api_cxx/lsn_class.html">DbLsn</a> file offsets are unsigned 4-byte values, the set value may
-not be larger than the maximum unsigned 4-byte value. By default, or if
-the value is set to 0, a size of 10MB is used.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_max</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum size of a single file in the log, in bytes. By default,
+or if the <b>lg_max</b> parameter is set to 0, a size of 10MB is used.
+Because <a href="../api_cxx/lsn_class.html">DbLsn</a> file offsets are unsigned four-byte values, the
+set value may not be larger than the maximum unsigned four-byte value.
+The size of the log file must be at least four times the size of the
+in-memory log buffer (see <a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>).</p>
<p>See <a href="../ref/log/limits.html">Log File Limits</a>
-for more information.
-<p>The DbEnv::set_lg_max interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lg_max method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+for more information.</p>
<p>The database environment's log file size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_max", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lg_max method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lg_max method may be called at any time during the life of the
+application.</p>
+If no size is specified by the application, the size last specified for
+the database region will be used, or if no database region previously
+existed, the default will be used.
+<p>The DbEnv::set_lg_max method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_max</b><dd>
+The <b>lg_max</b> parameter is the size of a single log file, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lg_max method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
-<p>The specified log file size was too large.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called;
+the size of the log file is less than four times the size of the in-memory
+log buffer;
+The specified log file size was too large; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lg_max</h3>
+<p>The DbEnv::get_lg_max method returns the maximum log file size.</p>
+<p>The DbEnv::get_lg_max method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lg_max method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_maxp</b><dd>
+The DbEnv::get_lg_max method returns the
+maximum log file size in <b>lg_maxp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lg_regionmax.html b/db/docs/api_cxx/env_set_lg_regionmax.html
index a3fef85cc..2d06a5580 100644
--- a/db/docs/api_cxx/env_set_lg_regionmax.html
+++ b/db/docs/api_cxx/env_set_lg_regionmax.html
@@ -1,20 +1,22 @@
-<!--Id: env_set_lg_regionmax.so,v 10.3 2001/05/01 14:23:08 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lg_regionmax.so,v 10.19 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lg_regionmax</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lg_regionmax</h1>
+<h3>DbEnv::set_lg_regionmax</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,55 +25,79 @@
<p>
int
DbEnv::set_lg_regionmax(u_int32_t lg_regionmax);
+<p>
+int
+DbEnv::get_lg_regionmax(u_int32_t *lg_regionmaxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the underlying logging subsystem region, in bytes. By
-default, or if the value is set to 0, the base region size is 60KB.
-The log region is used to store filenames, and so may need to be
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lg_regionmax</h3>
+<a name="3"><!--meow--></a>
+<p>Set the size of the underlying logging area of the Berkeley DB environment,
+in bytes. By default, or if the value is set to 0, the default size is
+60KB. The log region is used to store filenames, and so may need to be
increased in size if a large number of files will be opened and
-registered with the specified Berkeley DB environment's log manager.
-<p>The DbEnv::set_lg_regionmax interface may be used only to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lg_regionmax method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+registered with the specified Berkeley DB environment's log manager.</p>
<p>The database environment's log region size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lg_regionmax", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p>The DbEnv::set_lg_regionmax method may fail and throw an exception or return a non-zero error for the following conditions:
+before that time.</p>
+<p>The DbEnv::set_lg_regionmax method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lg_regionmax method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lg_regionmax
+will be ignored.
+</p>
+<p>The DbEnv::set_lg_regionmax method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_regionmax</b><dd>
+The <b>lg_regionmax</b> parameter is the size of the logging area in
+the Berkeley DB environment, in bytes.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lg_regionmax method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::set_lg_regionmax method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_lg_regionmax method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_dir.html">DbEnv::set_lg_dir</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/env_set_lg_regionmax.html">DbEnv::set_lg_regionmax</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>,
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lg_regionmax</h3>
+<p>The DbEnv::get_lg_regionmax method returns the size of the underlying logging subsystem region.</p>
+<p>The DbEnv::get_lg_regionmax method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lg_regionmax method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lg_regionmaxp</b><dd>
+The DbEnv::get_lg_regionmax method returns the
+size of the underlying logging subsystem region in <b>lg_regionmaxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lk_conflicts.html b/db/docs/api_cxx/env_set_lk_conflicts.html
index 9ef5e8c78..0ab10bee3 100644
--- a/db/docs/api_cxx/env_set_lk_conflicts.html
+++ b/db/docs/api_cxx/env_set_lk_conflicts.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_conflicts.so,v 10.22 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_conflicts.so,v 10.41 2003/11/08 19:17:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lk_conflicts</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lk_conflicts</h1>
+<h3>DbEnv::set_lk_conflicts</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,49 +25,84 @@
<p>
int
DbEnv::set_lk_conflicts(u_int8_t *conflicts, int nmodes);
+<p>
+int
+DbEnv::get_lk_conflicts(const u_int8_t **lk_conflictsp, int *lk_modesp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the locking conflicts matrix.
-The <b>conflicts</b> argument
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_conflicts</h3>
+<a name="3"><!--meow--></a>
+<p>Set the locking conflicts matrix.</p>
+<p>If DbEnv::set_lk_conflicts is never called, a standard conflicts
+array is used; see <a href="../ref/lock/stdmode.html">Standard Lock
+Modes</a> for more information.</p>
+<p>The DbEnv::set_lk_conflicts method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lk_conflicts method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lk_conflicts
+will be ignored.
+</p>
+<p>The DbEnv::set_lk_conflicts method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>conflicts</b><dd>
+The <b>conflicts</b> parameter is the new locking conflicts matrix.
+The <b>conflicts</b> parameter
is an <b>nmodes</b> by <b>nmodes</b> array.
-A non-0 value for the array element:
-<p><blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote>
-<p>indicates that requested_mode and held_mode conflict. The
-<i>not-granted</i> mode must be represented by 0.
-<p>If no <b>conflicts</b> value is specified, the conflicts array
-<b>db_rw_conflicts</b> is used; see <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for a description of that array.
-<p>The DbEnv::set_lk_conflicts interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lk_conflicts method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+A non-0 value for the array element indicates that requested_mode and
+held_mode conflict:
+<blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote>
+<p>The <i>not-granted</i> mode must be represented by 0.</p>
+<p><dt><b>nmodes</b><dd>
+The <b>nmodes</b> parameter is the size of the lock conflicts matrix.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lk_conflicts method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<p>If the conflicts array could not be copied, the DbEnv::set_lk_conflicts method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Description: dbenv_get_lk_conflicts</h3>
+<p>The DbEnv::get_lk_conflicts method returns the current conflicts array.</p>
+<p>The DbEnv::get_lk_conflicts method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lk_conflicts method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>ENOMEM<dd>No memory was available to copy the conflicts array.
+<p><dt><b>lk_conflictsp</b><dd>
+The <b>lk_conflictsp</b> parameter references memory into which
+a pointer to the current conflicts array is copied.
+<p><dt><b>lk_modesp</b><dd>
+The <b>lk_modesp</b> parameter references memory into which
+ the size of the current conflicts array is copied.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lk_detect.html b/db/docs/api_cxx/env_set_lk_detect.html
index ee17ce2a4..fc866e87a 100644
--- a/db/docs/api_cxx/env_set_lk_detect.html
+++ b/db/docs/api_cxx/env_set_lk_detect.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_detect.so,v 10.19 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_detect.so,v 10.44 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lk_detect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lk_detect</h1>
+<h3>DbEnv::set_lk_detect</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,53 +25,97 @@
<p>
int
DbEnv::set_lk_detect(u_int32_t detect);
+<p>
+int
+DbEnv::get_lk_detect(u_int32_t *lk_detectp);
</pre></h3>
-<h1>Description</h1>
-<p>Set if the deadlock detector is to be run whenever a lock conflict occurs,
-and specify which transaction should be aborted in the case of a deadlock.
-The specified value must be one of the following list:
-<p><dl compact>
-<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use the default policy as specified by <a href="../utility/db_deadlock.html">db_deadlock</a>.
-<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Abort the oldest transaction.
-<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Abort a random transaction involved in the deadlock.
-<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Abort the youngest transaction.
-</dl>
-<p>The DbEnv::set_lk_detect interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lk_detect method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_detect</h3>
+<a name="3"><!--meow--></a>
+<p>Set if the deadlock detector is to be run whenever a lock conflict
+occurs, and specify what lock request(s) should be rejected. As
+transactions acquire locks on behalf of a single locker ID, rejecting a
+lock request associated with a transaction normally requires the
+transaction be aborted.</p>
<p>The database environment's deadlock detector configuration may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_detect", one or more whitespace characters,
-and the interface <b>detect</b> argument as a string, for example,
-"set_lk_detect DB_LOCK_OLDEST". Because the <b>DB_CONFIG</b> file is read when the database
+and the method <b>detect</b> parameter as a string; for example,
+"set_lk_detect DB_LOCK_OLDEST".
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lk_detect method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lk_detect method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lk_detect
+must be consistent with the existing environment or an error will be
+returned.
+</p>
+<p>The DbEnv::set_lk_detect method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>detect</b><dd>
+The <b>detect</b> parameter configures the deadlock detector. The
+specified value must be one of the following list:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use whatever lock policy was specified when the database environment
+was created. If no lock policy has yet been specified, set the lock
+policy to DB_LOCK_RANDOM.
+<dt><a name="DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a><dd>Reject lock requests which have timed out. No other deadlock detection
+is performed.
+<dt><a name="DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a><dd>Reject the lock request for the locker ID with the greatest number of
+locks.
+<dt><a name="DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a><dd>Reject the lock request for the locker ID with the fewest number of
+locks.
+<dt><a name="DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a><dd>Reject the lock request for the locker ID with the fewest number of
+write locks.
+<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Reject the lock request for the oldest locker ID.
+<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Reject the lock request for a random locker ID.
+<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Reject the lock request for the youngest locker ID.
+</dl>
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<h3>Errors</h3>
+<p>The DbEnv::set_lk_detect method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lk_detect</h3>
+<p>The DbEnv::get_lk_detect method returns the deadlock detector configuration.</p>
+<p>The DbEnv::get_lk_detect method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lk_detect method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_detectp</b><dd>
+The DbEnv::get_lk_detect method returns the
+deadlock detector configuration in <b>lk_detectp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lk_max_lockers.html b/db/docs/api_cxx/env_set_lk_max_lockers.html
index 9e84c0150..175e53437 100644
--- a/db/docs/api_cxx/env_set_lk_max_lockers.html
+++ b/db/docs/api_cxx/env_set_lk_max_lockers.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_lockers.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_lockers.so,v 1.20 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lk_max_lockers</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lk_max_lockers</h1>
+<h3>DbEnv::set_lk_max_lockers</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,49 +25,79 @@
<p>
int
DbEnv::set_lk_max_lockers(u_int32_t max);
+<p>
+int
+DbEnv::get_lk_max_lockers(u_int32_t *, lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneous locking entities supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_cxx/env_open.html">DbEnv::open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv::set_lk_max_lockers interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lk_max_lockers method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_max_lockers</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locking entities supported by the Berkeley DB
+environment. This value is used by <a href="../api_cxx/env_open.html">DbEnv::open</a> to estimate how
+much space to allocate for various lock-table data structures. The
+default value is 1000 lockers. For specific information on configuring
+the size of the lock subsystem, see <a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.</p>
<p>The database environment's maximum number of lockers may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_lockers", one or more whitespace characters,
-and the number of lockers. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of lockers.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lk_max_lockers method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lk_max_lockers method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lk_max_lockers
+will be ignored.
+</p>
+<p>The DbEnv::set_lk_max_lockers method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number simultaneous locking
+entities supported by the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lk_max_lockers method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lk_max_lockers</h3>
+<p>The DbEnv::get_lk_max_lockers method returns the maximum number of lockers.</p>
+<p>The DbEnv::get_lk_max_lockers method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lk_max_lockers method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DbEnv::get_lk_max_lockers method returns the
+maximum number of lockers in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lk_max_locks.html b/db/docs/api_cxx/env_set_lk_max_locks.html
index 4e296e979..8e68bc408 100644
--- a/db/docs/api_cxx/env_set_lk_max_locks.html
+++ b/db/docs/api_cxx/env_set_lk_max_locks.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_locks.so,v 10.1 2000/12/21 19:11:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_locks.so,v 10.19 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lk_max_locks</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lk_max_locks</h1>
+<h3>DbEnv::set_lk_max_locks</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,48 +25,80 @@
<p>
int
DbEnv::set_lk_max_locks(u_int32_t max);
+<p>
+int
+DbEnv::get_lk_max_locks(u_int32_t *lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of locks supported by the Berkeley DB lock subsystem.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_max_locks</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locks supported by the Berkeley DB environment.
This value is used by <a href="../api_cxx/env_open.html">DbEnv::open</a> to estimate how much space to
-allocate for various lock-table data structures. For specific
-information on configuring the size of the lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv::set_lk_max_locks interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lk_max_locks method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+allocate for various lock-table data structures. The default value is
+1000 locks. For specific information on configuring the size of the lock
+subsystem, see <a href="../ref/lock/max.html">Configuring locking:
+sizing the system</a>.</p>
<p>The database environment's maximum number of locks may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_locks", one or more whitespace characters,
-and the number of locks. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of locks.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lk_max_locks method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lk_max_locks method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lk_max_locks
+will be ignored.
+</p>
+<p>The DbEnv::set_lk_max_locks method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number of locks supported by
+the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lk_max_locks method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_max_locks</h3>
+<p>The DbEnv::set_lk_max_locks method returns the maximum number of locks.</p>
+<p>The DbEnv::set_lk_max_locks method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_lk_max_locks method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DbEnv::set_lk_max_locks method returns the
+maximum number of locks in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_lk_max_objects.html b/db/docs/api_cxx/env_set_lk_max_objects.html
index b196cb925..cb951600f 100644
--- a/db/docs/api_cxx/env_set_lk_max_objects.html
+++ b/db/docs/api_cxx/env_set_lk_max_objects.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_lk_max_objects.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_lk_max_objects.so,v 1.20 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_lk_max_objects</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_lk_max_objects</h1>
+<h3>DbEnv::set_lk_max_objects</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,49 +25,79 @@
<p>
int
DbEnv::set_lk_max_objects(u_int32_t max);
+<p>
+int
+DbEnv::get_lk_max_objects(u_int32_t *lk_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneously locked objects supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_cxx/env_open.html">DbEnv::open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv::set_lk_max_objects interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_lk_max_objects method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_lk_max_objects</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum number of locked objects supported by the Berkeley DB
+environment. This value is used by <a href="../api_cxx/env_open.html">DbEnv::open</a> to estimate how
+much space to allocate for various lock-table data structures. The
+default value is 1000 objects. For specific information on configuring
+the size of the lock subsystem, see <a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.</p>
<p>The database environment's maximum number of objects may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_lk_max_objects", one or more whitespace characters,
-and the number of objects. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of objects.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_lk_max_objects method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_lk_max_objects method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_lk_max_objects
+will be ignored.
+</p>
+<p>The DbEnv::set_lk_max_objects method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter is the maximum number of locked objects
+supported by the Berkeley DB environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_lk_max_objects method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_lk_max_objects</h3>
+<p>The DbEnv::get_lk_max_objects method returns the maximum number of locked objects.</p>
+<p>The DbEnv::get_lk_max_objects method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_lk_max_objects method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lk_maxp</b><dd>
+The DbEnv::get_lk_max_objects method returns the
+maximum number of locked objects in <b>lk_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_mp_mmapsize.html b/db/docs/api_cxx/env_set_mp_mmapsize.html
index da7b3b5a6..df7ddb203 100644
--- a/db/docs/api_cxx/env_set_mp_mmapsize.html
+++ b/db/docs/api_cxx/env_set_mp_mmapsize.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_mp_mmapsize.so,v 10.18 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_mp_mmapsize.so,v 10.36 2003/11/08 19:17:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_mp_mmapsize</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_mp_mmapsize</h1>
+<h3>DbEnv::set_mp_mmapsize</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,52 +25,82 @@
<p>
int
DbEnv::set_mp_mmapsize(size_t mp_mmapsize);
+<p>
+int
+DbEnv::get_mp_mmapsize(size_t *mp_mmapsizep);
</pre></h3>
-<h1>Description</h1>
-<p>Files that are opened read-only in the pool (and that satisfy a few other
-criteria) are, by default, mapped into the process address space instead
-of being copied into the local cache. This can result in better-than-usual
-performance, as available virtual memory is normally much larger than the
-local cache, and page faults are faster than page copying on many systems.
-However, in the presence of limited virtual memory it can cause resource
-starvation, and in the presence of large databases, it can result in immense
-process sizes.
-<p>Set the maximum file size, in bytes, for a file to be mapped into the
-process address space. If no value is specified, it defaults to 10MB.
-<p>The DbEnv::set_mp_mmapsize interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_mp_mmapsize method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_mp_mmapsize</h3>
+<a name="3"><!--meow--></a>
+<p>Files that are opened read-only in the pool (and that satisfy a few
+other criteria) are, by default, mapped into the process address space
+instead of being copied into the local cache. This can result in
+better-than-usual performance because available virtual memory is
+normally much larger than the local cache, and page faults are faster
+than page copying on many systems. However, it can cause resource
+starvation in the presence of limited virtual memory, and it can result
+in immense process sizes in the presence of large databases.</p>
+<p>The DbEnv::get_mp_mmapsize method sets the maximum file size, in bytes,
+for a file to be mapped into the process address space. If no value is
+specified, it defaults to 10MB.</p>
<p>The database environment's maximum mapped file size may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_mp_mmapsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
+and the size in bytes.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_mp_mmapsize method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_mp_mmapsize method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_mp_mmapsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>mp_mmapsize</b><dd>
+The <b>mp_mmapsize</b> parameter is the maximum file size, in bytes,
+for a file to be mapped into the process address space.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_mp_mmapsize method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_mp_mmapsize</h3>
+<p>The DbEnv::get_mp_mmapsize method returns the maximum file map size.</p>
+<p>The DbEnv::get_mp_mmapsize method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_mp_mmapsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>mp_mmapsizep</b><dd>
+The DbEnv::get_mp_mmapsize method returns the
+maximum file map size in <b>mp_mmapsizep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_paniccall.html b/db/docs/api_cxx/env_set_paniccall.html
index 61950ad04..cd817ea1c 100644
--- a/db/docs/api_cxx/env_set_paniccall.html
+++ b/db/docs/api_cxx/env_set_paniccall.html
@@ -1,21 +1,22 @@
-<!--$Id: env_set_paniccall.so,v 10.14 2000/07/09 19:12:56 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_paniccall.so,v 10.36 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_paniccall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_paniccall</h1>
+<h3>DbEnv::set_paniccall</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,50 +24,50 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_paniccall(void (*)(DbEnv *, int));
+DbEnv::set_paniccall(void (*db_panic_fcn)(DbEnv *dbenv, int errval));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_paniccall</h3>
<p>Errors can occur in the Berkeley DB library where the only solution is to shut
-down the application and run recovery. (For example, if Berkeley DB is unable
-to write log records to disk because there is insufficient disk space.)
-In these cases, when the C++ error model has been configured so that the
-individual Berkeley DB methods return error codes (see <a href="../api_cxx/except_class.html">DbException</a> for
-more information), the value <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is returned by Berkeley DB
-methods.
-<p>In these cases, it is also often simpler to shut down the application when
-such errors occur rather than attempting to gracefully return up the stack.
-The DbEnv::set_paniccall method is used to specify a method to be called when
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned from a Berkeley DB method. When
-called, the <b>dbenv</b> argument will be a reference to the current
-environment, and the <b>errval</b> argument is the error value that would
-have been returned to the calling method.
-<p>The DbEnv::set_paniccall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DbEnv::set_paniccall method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+down the application and run recovery (for example, if Berkeley DB is unable
+to allocate heap memory). In such cases, the Berkeley DB methods will
+either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a <a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
+depending on the API configuration.
+It is often easier to simply exit the application when such errors occur
+rather than gracefully return up the stack. The DbEnv::set_paniccall method
+specifies a function to be called when
+<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is about to be returned or <a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>
+is about to be thrown
+from a Berkeley DB method.</p>
+<p>The DbEnv::set_paniccall method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_paniccall method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>db_panic_fcn</b><dd>
+The <b>db_panic_fcn</b> parameter is the application-specified function
+called in the case of a database environment panic. The function takes
+two arguments:
+<p><dl compact>
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>errval</b><dd>The <b>errval</b> parameter is the error value that would have been
+returned to the caller if <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> were not going to be
+returned instead.
+</dl>
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_rpc_server.html b/db/docs/api_cxx/env_set_rpc_server.html
index 90f7e9221..a0799c460 100644
--- a/db/docs/api_cxx/env_set_rpc_server.html
+++ b/db/docs/api_cxx/env_set_rpc_server.html
@@ -1,20 +1,22 @@
-<!--"@(#)env_set_rpc_server.so 10.1 (Sleepycat) 8/25/99"-->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_rpc_server.so,v 10.28 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_rpc_server</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_rpc_server</h1>
+<h3>DbEnv::set_rpc_server</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,22 +24,47 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_rpc_server(CLIENT *client, char *host,
+DbEnv::set_rpc_server(CLIENT *client, char *host,
long cl_timeout, long sv_timeout, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>Establishes a connection for this <b>dbenv</b> to a RPC server. If
-the <b>client</b> argument is NULL, this call creates a connection to
-the Berkeley DB server on the indicated hostname and sets up a channel for
-communication.
-If the <b>client</b> channel has been provided by the
-application then Berkeley DB will use it as its connection and the <b>host</b> and
-<b>cl_timeout</b> fields are ignored.
-<p>The <b>cl_timeout</b> argument specifies the number of seconds the client
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_rpc_server</h3>
+<p>Establishes a connection for this <b>dbenv</b> to a RPC server.</p>
+<p>When the DbEnv::set_rpc_server method has been called, subsequent calls
+to Berkeley DB library interfaces may return or throw exceptions encapsulating
+<a name="DB_NOSERVER">DB_NOSERVER</a>, <a name="DB_NOSERVER_ID">DB_NOSERVER_ID</a>, or
+<a name="DB_NOSERVER_HOME">DB_NOSERVER_HOME</a>.</p>
+<p>The DbEnv::set_rpc_server method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_rpc_server method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+</p>
+<p>The DbEnv::set_rpc_server method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cl_timeout</b><dd>
+<a name="3"><!--meow--></a>
+The <b>cl_timeout</b> parameter specifies the number of seconds the client
should wait for results to come back from the server. Once the timeout
has expired on any communication with the server, DB_NOSERVER will
be returned. If this value is zero, a default timeout is used.
-<p>The <b>sv_timeout</b> argument specifies the number of seconds the server
+<p><dt><b>client</b><dd>
+If the <b>client</b> channel has been provided by the application then
+Berkeley DB will use it as its connection and the <b>host</b> and
+<b>cl_timeout</b> fields are ignored.
+<p><dt><b>host</b><dd>
+The <b>host</b> parameter is the host to which the Berkeley DB server will
+connect and create a channel for communication.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+<a name="4"><!--meow--></a>
+<p><dt><b>sv_timeout</b><dd>
+The <b>sv_timeout</b> parameter specifies the number of seconds the server
should allow a client connection to remain idle before assuming that the
client is gone. Once that timeout has been reached, the server releases
all resources associated with that client connection. Subsequent attempts
@@ -46,56 +73,26 @@ DB_NOSERVER_ID, indicating that an invalid identifier has been
given to the server. This value can be considered a hint to the server.
The server may alter this value based on its own policies or allowed
values. If this value is zero, a default timeout is used.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>When the DbEnv::set_rpc_server method has been called, any subsequent calls
-to Berkeley DB library interfaces may return either <a name="DB_NOSERVER">DB_NOSERVER</a> or
-<a name="DB_NOSERVER_ID">DB_NOSERVER_ID</a>.
-<p>The DbEnv::set_rpc_server method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_rpc_server method may fail and throw an exception or return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_rpc_server method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::set_rpc_server method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_rpc_server method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_err.html">DbEnv::err</a>, <a href="../api_cxx/env_err.html">DbEnv::errx</a>
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_data_dir.html">DbEnv::set_data_dir</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_feedback.html">DbEnv::set_feedback</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_pageyield.html">DbEnv::set_pageyield</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-<a href="../api_cxx/env_set_panicstate.html">DbEnv::set_panicstate</a>,
-<a href="../api_cxx/env_set_rec_init.html">DbEnv::set_recovery_init</a>,
-<a href="../api_cxx/env_set_rpc_server.html">DbEnv::set_rpc_server</a>,
-<a href="../api_cxx/env_set_region_init.html">DbEnv::set_region_init</a>,
-<a href="../api_cxx/env_set_shm_key.html">DbEnv::set_shm_key</a>,
-<a href="../api_cxx/env_set_tas_spins.html">DbEnv::set_tas_spins</a>,
-<a href="../api_cxx/env_set_tmp_dir.html">DbEnv::set_tmp_dir</a>,
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>
-and
-<a href="../api_cxx/env_version.html">DbEnv::version</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_shm_key.html b/db/docs/api_cxx/env_set_shm_key.html
index 643bc1afd..61ccdbf8d 100644
--- a/db/docs/api_cxx/env_set_shm_key.html
+++ b/db/docs/api_cxx/env_set_shm_key.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_shm_key.so,v 10.5 2000/08/09 15:45:52 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_shm_key.so,v 10.25 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_shm_key</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_shm_key</h1>
+<h3>DbEnv::set_shm_key</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,68 +25,97 @@
<p>
int
DbEnv::set_shm_key(long shm_key);
+<p>
+int
+DbEnv::get_shm_key(long *shm_keyp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_shm_key</h3>
+<a name="3"><!--meow--></a>
<p>Specify a base segment ID for Berkeley DB environment shared memory regions
created in system memory on VxWorks or systems supporting X/Open-style
-shared memory interfaces, e.g., UNIX systems supporting
-<b>shmget</b>(2) and related System V IPC interfaces.
+shared memory interfaces; for example, UNIX systems supporting
+<b>shmget</b>(2) and related System V IPC interfaces.</p>
<p>This base segment ID will be used when Berkeley DB shared memory regions are
first created. It will be incremented a small integer value each time
-a new shared memory region is created, that is, if the base ID is 35,
-the first shared memory region created will have a segment ID of 35 and
-the next one a segment ID between 36 and 40 or so. A Berkeley DB environment
-always creates a master shared memory region, plus an additional shared
-memory region for each of the subsystems supported by the environment
-(locking, logging, memory pool and transaction), plus an additional
-shared memory region for each additional memory pool cache that is
-supported. Already existing regions with the same segment IDs will be
-removed. See <a href="../ref/env/region.html">Shared Memory Regions</a>
-for more information.
-<p>The intent behind this interface is two-fold: without it, applications
+a new shared memory region is created; that is, if the base ID is 35,
+the first shared memory region created will have a segment ID of 35,
+and the next one will have a segment ID between 36 and 40 or so. A
+Berkeley DB environment always creates a master shared memory region; an
+additional shared memory region for each of the subsystems supported by
+the environment (Locking, Logging, Memory Pool and Transaction); plus
+an additional shared memory region for each additional memory pool cache
+that is supported. Already existing regions with the same segment IDs
+will be removed. See <a href="../ref/env/region.html">Shared Memory
+Regions</a> for more information.</p>
+<p>The intent behind this method is two-fold: without it, applications
have no way to ensure that two Berkeley DB applications don't attempt to use
the same segment IDs when creating different Berkeley DB environments. In
addition, by using the same segment IDs each time the environment is
created, previously created segments will be removed, and the set of
-segments on the system will not grow without bound.
-<p>The DbEnv::set_shm_key interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_shm_key method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+segments on the system will not grow without bound.</p>
<p>The database environment's base segment ID may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_shm_key", one or more whitespace characters,
-and the ID. Because the <b>DB_CONFIG</b> file is read when the database
+and the ID.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_shm_key method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_shm_key method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_shm_key
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DbEnv::set_shm_key method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>shm_key</b><dd>
+The <b>shm_key</b> parameter is the base segment ID for the database
+environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_shm_key method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_shm_key</h3>
+<p>The DbEnv::get_shm_key method returns the base segment ID.</p>
+<p>The DbEnv::get_shm_key method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_shm_key method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>shm_keyp</b><dd>
+The DbEnv::get_shm_key method returns the
+base segment ID in <b>shm_keyp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_tas_spins.html b/db/docs/api_cxx/env_set_tas_spins.html
index fd21f03d3..fd401c467 100644
--- a/db/docs/api_cxx/env_set_tas_spins.html
+++ b/db/docs/api_cxx/env_set_tas_spins.html
@@ -1,73 +1,98 @@
-<!--$Id: env_set_tas_spins.so,v 10.9 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tas_spins.so,v 10.26 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_tas_spins</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_tas_spins</h1>
+<h3>DbEnv::set_tas_spins</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-static int
+int
DbEnv::set_tas_spins(u_int32_t tas_spins);
+<p>
+int
+DbEnv::get_tas_spins(u_int32_t *, tas_spinsp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_tas_spins</h3>
+<a name="3"><!--meow--></a>
<p>Specify that test-and-set mutexes should spin <b>tas_spins</b> times
without blocking. The value defaults to 1 on uniprocessor systems and
-to 50 times the number of processors on multiprocessor systems.
-<p>The DbEnv::set_tas_spins interface affects the entire application, not a single
-database or database environment.
-<p>While the DbEnv::set_tas_spins interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> methods.
-<p>The DbEnv::set_tas_spins method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+to 50 times the number of processors on multiprocessor systems.</p>
<p>The database environment's test-and-set spin count may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tas_spins", one or more whitespace characters,
-and the number of spins. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of spins.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_tas_spins method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_tas_spins method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tas_spins</b><dd>
+The <b>tas_spins</b> parameter is the number of spins test-and-set
+mutexes should execute before blocking.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_tas_spins method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_tas_spins</h3>
+<p>The DbEnv::get_tas_spins method returns the test-and-set spin count.</p>
+<p>The DbEnv::get_tas_spins method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_tas_spins method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tas_spinsp</b><dd>
+The DbEnv::get_tas_spins method returns the
+test-and-set spin count in <b>tas_spinsp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_timeout.html b/db/docs/api_cxx/env_set_timeout.html
index 4039a021c..f20643d41 100644
--- a/db/docs/api_cxx/env_set_timeout.html
+++ b/db/docs/api_cxx/env_set_timeout.html
@@ -1,21 +1,22 @@
-<!--Id: env_set_timeout.so,v 10.8 2002/08/29 03:24:42 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_timeout.so,v 10.21 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_timeout</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_timeout</h1>
+<h3>DbEnv::set_timeout</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,29 +25,15 @@
<p>
int
DbEnv::set_timeout(db_timeout_t timeout, u_int32_t flags);
+<p>
+int
+DbEnv::get_timeout(db_timeout_t *timeoutp, u_int32_t flag);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_timeout</h3>
+<a name="3"><!--meow--></a>
<p>The DbEnv::set_timeout method sets timeout values for locks or
-transactions in the database environment. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this database environment.
-<p>The database environment's transaction timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_txn_timeout", one or more whitespace characters,
-and the transaction timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for transactions in this database environment.
-<p>The database environment's lock timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lock_timeout", one or more whitespace characters,
-and the lock timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-</dl>
+transactions in the database environment.</p>
<p>Timeouts are checked whenever a thread of control blocks on a lock or
when deadlock detection is performed. (In the case of
DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
@@ -56,34 +43,87 @@ transaction. In either case, it may be a lock requested by the database
access methods underlying the application.) As timeouts are only
checked when the lock request first blocks or when deadlock detection
is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
+detection is performed.</p>
<p>Timeout values specified for the database environment may be overridden
on a per-lock or per-transaction basis. See <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> and
-<a href="../api_cxx/txn_set_timeout.html">DbTxn::set_timeout</a> for more information.
+<a href="../api_cxx/txn_set_timeout.html">DbTxn::set_timeout</a> for more information.</p>
<p>The DbEnv::set_timeout method configures a database environment, not only operations
-performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.
-<p>The DbEnv::set_timeout interface may be called at any time during the life of
-the application.
-<p>The DbEnv::set_timeout method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_timeout method may fail and throw an exception or return a non-zero error for the following conditions:
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_timeout method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this database environment.
+<p>The database environment's lock timeout value may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_lock_timeout", one or more whitespace characters,
+and the lock timeout value.
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for transactions in this database environment.
+<p>The database environment's transaction timeout value may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_txn_timeout", one or more whitespace characters,
+and the transaction timeout value.
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+</dl>
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter is the timeout value. It must be specified
+as an unsigned 32-bit number of microseconds, limiting the maximum timeout
+to roughly 71 minutes.
</dl>
-<p>The DbEnv::set_timeout method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_timeout method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DbEnv::set_timeout method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_timeout</h3>
+<p>The DbEnv::get_timeout method returns a timeout value, in microseconds.</p>
+<p>The DbEnv::get_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_timeout method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flag</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
+<p><dl compact>
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Return the timeout value for locks in this database environment.
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Return the timeout value for transactions in this database environment.
+</dl>
+<p><dt><b>timeoutp</b><dd>
+The <b>timeoutp</b> parameter references memory into which
+ the timeout value of the specified <b>flag</b> parameter is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_tmp_dir.html b/db/docs/api_cxx/env_set_tmp_dir.html
index 5993fe8a8..0714234ce 100644
--- a/db/docs/api_cxx/env_set_tmp_dir.html
+++ b/db/docs/api_cxx/env_set_tmp_dir.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tmp_dir.so,v 10.3 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tmp_dir.so,v 10.22 2003/11/08 19:17:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_tmp_dir</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_tmp_dir</h1>
+<h3>DbEnv::set_tmp_dir</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,16 +25,22 @@
<p>
int
DbEnv::set_tmp_dir(const char *dir);
+<p>
+int
+DbEnv::get_tmp_dir(const char **dirp);
</pre></h3>
-<h1>Description</h1>
-<p>The path of a directory to be used as the location of temporary files.
-The files created to back in-memory access method databases will be
-created relative to this path. These temporary files can be quite large,
-depending on the size of the database.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_tmp_dir</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>Specify the path of a directory to be used as the location of temporary
+files. The files created to back in-memory access method databases will
+be created relative to this path. These temporary files can be quite
+large, depending on the size of the database.</p>
<p>If no directories are specified, the following alternatives are checked
in the specified order. The first existing directory path is used for
-all temporary files.
-<p><ol>
+all temporary files.</p>
+<ol>
<p><li>The value of the environment variable <b>TMPDIR</b>.
<li>The value of the environment variable <b>TEMP</b>.
<li>The value of the environment variable <b>TMP</b>.
@@ -47,46 +55,70 @@ all temporary files.
</ol>
<p>Note: environment variables are only checked if one of the
<a href="../api_cxx/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> or <a href="../api_cxx/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags were
-specified.
-<p>Note: the GetTempPath interface is only checked on Win/32 platforms.
-<p>The DbEnv::set_tmp_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_tmp_dir method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
+specified.</p>
+<p>Note: the GetTempPath interface is only checked on Win/32 platforms.</p>
<p>The database environment's temporary file directory may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tmp_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
+and the directory name.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_tmp_dir method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_tmp_dir method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_tmp_dir
+must be consistent with the existing environment or corruption can
+occur.</p>
+<p>The DbEnv::set_tmp_dir method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dir</b><dd>
+The <b>dir</b> parameter is the directory to be used to store temporary
+files.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_tmp_dir method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_tmp_dir</h3>
+<p>The DbEnv::get_tmp_dir method returns the database environment temporary file directory.</p>
+<p>The DbEnv::get_tmp_dir method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_tmp_dir method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dirp</b><dd>
+The DbEnv::get_tmp_dir method returns a reference to the
+database environment temporary file directory in <b>dirp</b>.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_tx_max.html b/db/docs/api_cxx/env_set_tx_max.html
index 918952894..6f837ba2e 100644
--- a/db/docs/api_cxx/env_set_tx_max.html
+++ b/db/docs/api_cxx/env_set_tx_max.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tx_max.so,v 10.21 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_max.so,v 10.42 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_tx_max</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_tx_max</h1>
+<h3>DbEnv::set_tx_max</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,49 +24,85 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::set_tx_max(u_int32_t tx_max);
+DbEnv::set_tx_max(u_int32_t max);
+<p>
+int
+DbEnv::get_tx_max(u_int32_t *tx_maxp);
</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of active transactions that are supported by the
-environment. This value bounds the size of backing shared memory regions.
-Note that child transactions must be counted as active until their
-ultimate parent commits or aborts.
-<p>When there are more than the specified number of concurrent transactions,
-calls to <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a> will fail (until some active transactions
-complete). If no value is specified, a default value of 20 is used.
-<p>The DbEnv::set_tx_max interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_tx_max method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<p>The database environment's maximum number of active transactions may also be set using the environment's
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_tx_max</h3>
+<a name="3"><!--meow--></a>
+<p>Configure the Berkeley DB database environment to support at least <b>max</b>
+active transactions. This value bounds the size of the memory allocated
+for transactions. Child transactions are counted as active until they
+either commit or abort.</p>
+<p>When all of the memory available in the database environment for
+transactions is in use, calls to <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a> will fail (until some
+active transactions complete). If this interface is never called,
+the database environment is configured to support at least 20 active
+transactions.</p>
+<p>The database environment's number of active transactions may also be set using the environment's
<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
single line with the string "set_tx_max", one or more whitespace characters,
-and the number of transactions. Because the <b>DB_CONFIG</b> file is read when the database
+and the number of transactions.
+Because the <b>DB_CONFIG</b> file is read when the database
environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+before that time.</p>
+<p>The DbEnv::set_tx_max method configures a database environment, not only operations
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_tx_max method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+If the database environment already exists when
+<a href="../api_cxx/env_open.html">DbEnv::open</a> is called, the information specified to DbEnv::set_tx_max
+will be ignored.
+</p>
+<p>The DbEnv::set_tx_max method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>max</b><dd>
+The <b>max</b> parameter configures the minimum number of
+simultaneously active transactions supported by Berkeley DB database
+environment.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_tx_max method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called.
+<p><dt>EINVAL<dd>If the method was called after <a href="../api_cxx/env_open.html">DbEnv::open</a> was called; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_tx_max</h3>
+<p>The DbEnv::get_tx_max method returns the number of active transactions.</p>
+<p>The DbEnv::get_tx_max method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_tx_max method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>tx_maxp</b><dd>
+The DbEnv::get_tx_max method returns the
+number of active transactions in <b>tx_maxp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_tx_timestamp.html b/db/docs/api_cxx/env_set_tx_timestamp.html
index fa793324c..cce7f78c5 100644
--- a/db/docs/api_cxx/env_set_tx_timestamp.html
+++ b/db/docs/api_cxx/env_set_tx_timestamp.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_tx_timestamp.so,v 10.6 2000/12/21 18:33:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_tx_timestamp.so,v 10.26 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_tx_timestamp</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_tx_timestamp</h1>
+<h3>DbEnv::set_tx_timestamp</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,44 +25,74 @@
<p>
int
DbEnv::set_tx_timestamp(time_t *timestamp);
+<p>
+int
+DbEnv::get_tx_timestamp(time_t *timestampp);
</pre></h3>
-<h1>Description</h1>
-<p>Recover to the time specified by <b>timestamp</b> rather than to the most
-current possible date.
-The <b>timestamp</b> argument should be the number of seconds since 0
-hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time,
-i.e., the Epoch.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_tx_timestamp</h3>
+<a name="3"><!--meow--></a>
+<p>Recover to the time specified by <b>timestamp</b> rather than to the
+most current possible date.</p>
<p>Once a database environment has been upgraded to a new version of Berkeley DB
-involving a log format change (see <a href="../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>, it is no longer possible to recover
-to a specific time before that upgrade.
-<p>The DbEnv::set_tx_timestamp interface may only be used to configure Berkeley DB before
-the <a href="../api_cxx/env_open.html">DbEnv::open</a> interface is called.
-<p>The DbEnv::set_tx_timestamp method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+involving a log format change (see <a href="../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>), it is no longer possible to recover
+to a specific time before that upgrade.</p>
+<p>The DbEnv::set_tx_timestamp method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_tx_timestamp method may not be called after the <a href="../api_cxx/env_open.html">DbEnv::open</a> method is
+called.
+</p>
+<p>The DbEnv::set_tx_timestamp method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>timestamp</b><dd>
+The <b>timestamp</b> parameter references the memory location where the
+recovery timestamp is located.
+<p>The <b>timestamp</b> parameter should be the number of seconds since 0
+hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal
+Time; that is, the Epoch.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_tx_timestamp method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>It is not possible to recover to the specified time using the
-log files currently present in the environment.
+<p><dt>EINVAL<dd>If it is not possible to recover to the specified time using the log files
+currently present in the environment; or if an
+invalid flag value or parameter was specified.
</dl>
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<hr size=1 noshade>
+<h3>Description: DbEnv::get_tx_timestamp</h3>
+<p>The DbEnv::get_tx_timestamp method returns the recovery timestamp.</p>
+<p>The DbEnv::get_tx_timestamp method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_tx_timestamp method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>timestampp</b><dd>
+The DbEnv::get_tx_timestamp method returns the
+recovery timestamp in <b>timestampp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_set_verbose.html b/db/docs/api_cxx/env_set_verbose.html
index 48b280964..54511666e 100644
--- a/db/docs/api_cxx/env_set_verbose.html
+++ b/db/docs/api_cxx/env_set_verbose.html
@@ -1,20 +1,22 @@
-<!--$Id: env_set_verbose.so,v 10.23 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_set_verbose.so,v 10.45 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_verbose</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_verbose</h1>
+<h3>DbEnv::set_verbose</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,59 +25,94 @@
<p>
int
DbEnv::set_verbose(u_int32_t which, int onoff);
+<p>
+int
+DbEnv::get_verbose(u_int32_t which, int *onoffp);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::set_verbose method turns additional informational and
-debugging messages in the Berkeley DB message output on and off. If
-<b>onoff</b> is set to
-non-zero,
-the additional messages are output.
-<p>The <b>which</b> parameter must be set to one of the following values:
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_verbose</h3>
+<a name="3"><!--meow--></a>
+<p>The DbEnv::set_verbose method turns specific additional informational
+and debugging messages in the Berkeley DB message output on and off. To see
+the additional messages, verbose messages must also be configured for
+the application. For more information on verbose messages, see the
+<a href="../api_cxx/db_set_errfile.html">Db::set_errfile</a> method.</p>
+<p>The database environment's messages may also be set using the environment's
+<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
+single line with the string "set_verbose", one or more whitespace characters,
+and the method <b>which</b> parameter as a string; for example,
+"set_verbose DB_VERB_CHKPOINT".
+Because the <b>DB_CONFIG</b> file is read when the database
+environment is opened, it will silently overrule configuration done
+before that time.</p>
+<p>The DbEnv::set_verbose method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_verbose method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_verbose method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>onoff</b><dd>
+If the <b>onoff</b> parameter is set to non-zero, the additional messages are output.
+<p><dt><b>which</b><dd>
+The <b>which</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</a><dd>Display checkpoint location information when searching the log for
checkpoints.
<p><dt><a name="DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</a><dd>Display additional information when doing deadlock detection.
<p><dt><a name="DB_VERB_RECOVERY">DB_VERB_RECOVERY</a><dd>Display additional information when performing recovery.
+<p><dt><a name="DB_VERB_REPLICATION">DB_VERB_REPLICATION</a><dd>Display additional information when processing replication messages.
+<p>Note, to get complete replication logging when debugging replication
+applications, you must also configure and build the Berkeley DB library with
+the <a href="../ref/build_unix/conf.html">--enable-diagnostic</a>
+configuration option as well as call the DbEnv::set_verbose method.</p>
<p><dt><a name="DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</a><dd>Display the waits-for table when doing deadlock detection.
</dl>
-<p>The DbEnv::set_verbose interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DbEnv::set_verbose method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<p>The database environment's verbosity may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_verbose", one or more whitespace characters,
-and the interface <b>which</b> argument as a string, for example,
-"set_verbose DB_VERB_CHKPOINT". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_verbose method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
+<hr size=1 noshade>
+<h3>Description: dbenv_get_verbose</h3>
+<p>The DbEnv::get_verbose method returns whether the specified <b>which</b>
+parameter is currently set or not.</p>
+<p>The DbEnv::get_verbose method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_verbose method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>which</b><dd>
+The <b>which</b> parameter is the message value for which configuration
+is being checked.
+<p><dt><b>onoffp</b><dd>
+The <b>onoffp</b> parameter references memory into which
+ the configuration of the specified <b>which</b> parameter is copied.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_strerror.html b/db/docs/api_cxx/env_strerror.html
index e1572018b..64e7f5fae 100644
--- a/db/docs/api_cxx/env_strerror.html
+++ b/db/docs/api_cxx/env_strerror.html
@@ -1,20 +1,22 @@
-<!--$Id: env_strerror.so,v 8.4 2000/07/30 17:59:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_strerror.so,v 8.12 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::strerror</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::strerror</h1>
+<h3>DbEnv::strerror</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,39 +26,32 @@
static char *
DbEnv::strerror(int error);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::strerror</h3>
<p>The DbEnv::strerror method returns an error message string corresponding
-to the error number <b>error</b>. This interface is a superset of the
-ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) interface. If the error number
-<b>error</b> is greater than or equal to 0, then the string returned by
-the system interface <b>strerror</b>(3) is returned. If the error
-number is less than 0, an error string appropriate to the corresponding
-Berkeley DB library error is returned. See
+to the error number <b>error</b> parameter.</p>
+<p>This function is a superset of the ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) function. If the error number <b>error</b> is greater than or
+equal to 0, then the string returned by the system function
+<b>strerror</b>(3) is returned. If the error number is less than
+0, an error string appropriate to the corresponding Berkeley DB library error
+is returned. See
<a href="../ref/program/errorret.html">Error returns to applications</a>
-for more information.
+for more information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>error</b><dd>
+The <b>error</b> parameter is the error number for which an error message
+string is wanted.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/env_version.html b/db/docs/api_cxx/env_version.html
index 8d40aa8c5..068aab6c6 100644
--- a/db/docs/api_cxx/env_version.html
+++ b/db/docs/api_cxx/env_version.html
@@ -1,20 +1,22 @@
-<!--$Id: env_version.so,v 10.13 1999/12/20 08:52:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_version.so,v 10.24 2003/11/08 19:17:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::version</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::version</h1>
+<h3>DbEnv::version</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,36 +26,32 @@
static char *
DbEnv::version(int *major, int *minor, int *patch);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::version method returns a pointer to a string containing Berkeley DB
-version information. If <b>major</b> is non-NULL, the major version
-of the Berkeley DB release is stored in the memory it references. If
-<b>minor</b> is non-NULL, the minor version of the Berkeley DB release is
-stored in the memory it references. If <b>patch</b> is non-NULL, the
-patch version of the Berkeley DB release is stored in the memory it references.
+<hr size=1 noshade>
+<h3>Description: DbEnv::version</h3>
+<a name="3"><!--meow--></a>
+<p>The DbEnv::version method returns a pointer to a string, suitable for
+display, containing Berkeley DB version information.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>major</b><dd>
+If <b>major</b> is non-NULL, the major
+version of the Berkeley DB release is copied to the memory to which it refers.
+<p><dt><b>minor</b><dd>
+If <b>minor</b> is non-NULL, the minor version of the Berkeley DB release
+is copied to the memory to which it refers.
+<p><dt><b>patch</b><dd>
+If <b>patch</b> is non-NULL, the patch version of the Berkeley DB release
+is copied to the memory to which it refers.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_close.html">DbEnv::close</a>,
-<a href="../api_cxx/env_open.html">DbEnv::open</a>,
-<a href="../api_cxx/env_remove.html">DbEnv::remove</a>,
-<a href="../api_cxx/db_err.html">DbEnv::err</a>,
-<a href="../api_cxx/env_strerror.html">DbEnv::strerror</a>,
-<a href="../api_cxx/env_version.html">DbEnv::version</a>,
-<a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a>,
-<a href="../api_cxx/env_set_errcall.html">DbEnv::set_errcall</a>,
-<a href="../api_cxx/env_set_errfile.html">DbEnv::set_errfile</a>,
-<a href="../api_cxx/env_set_error_stream.html">DbEnv::set_error_stream</a>,
-<a href="../api_cxx/env_set_errpfx.html">DbEnv::set_errpfx</a>,
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>,
-<a href="../api_cxx/env_set_mutexlocks.html">DbEnv::set_mutexlocks</a>,
-<a href="../api_cxx/env_set_paniccall.html">DbEnv::set_paniccall</a>,
-and
-<a href="../api_cxx/env_set_verbose.html">DbEnv::set_verbose</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/env_list.html">Database Environments and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/except_class.html b/db/docs/api_cxx/except_class.html
index 063bede95..fca4e6df2 100644
--- a/db/docs/api_cxx/except_class.html
+++ b/db/docs/api_cxx/except_class.html
@@ -1,20 +1,22 @@
-<!--$Id: except_class.so,v 10.15 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: except_class.so,v 10.35 2003/11/08 19:17:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbException</h1>
+<h3>DbException</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,43 +24,45 @@
#include &lt;db_cxx.h&gt;
<p>
class DbException {
- DbException(int err);
- DbException(const char *description);
- DbException(const char *prefix, int err);
- DbException(const char *prefix1, const char *prefix2, int err);
+public:
+ int get_errno() const;
+ virtual const char *what() const;
+ DbEnv *get_env() const;
};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbException class and how it is used
-by the various Berkeley DB classes.
-<p>Most methods in the Berkeley DB classes return an int but also throw an
+<hr size=1 noshade>
+<h3>Description: DbException</h3>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<a name="5"><!--meow--></a>
+<p>This information describes the DbException class and how it is
+used by the various Berkeley DB classes.</p>
+<p>Most methods in the Berkeley DB classes return an int, but also throw an
exception. This allows for two different error behaviors. By default,
the Berkeley DB C++ API is configured to throw an exception whenever a serious
error occurs. This generally allows for cleaner logic for transaction
-processing, as a try block can surround a single transaction.
+processing because a try block can surround a single transaction.
Alternatively, Berkeley DB can be configured to not throw exceptions, and
instead have the individual function return an error code, by setting
-the constructor flags for the Db and <a href="../api_cxx/dbenv_class.html">DbEnv</a> objects.
-<p>A DbException object contains an informational string and an errno.
-The errno can be obtained by using <a href="../api_cxx/get_errno.html">DbException::get_errno</a>.
-The informational string can be obtained by using <a href="../api_cxx/what.html">DbException::what</a>.
+the <a href="../api_cxx/env_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a> for the <a href="../api_cxx/db_class.html">Db</a> and <a href="../api_cxx/env_class.html">DbEnv</a>
+constructors.</p>
+<p>A DbException object contains an informational string, an errno,
+and a reference to the environment from which the exception was
+thrown. The errno can be obtained by using DbException::get_errno.
+The informational string can be obtained by using DbException::what.
+And, the environment can be obtained using DbException::get_env.</p>
<p>We expect in the future that this class will inherit from the standard
class exception, but certain language implementation bugs currently
-prevent this on some platforms.
+prevent this on some platforms.</p>
<p>Some methods may return non-zero values without issuing an exception.
This occurs in situations that are not normally considered an error, but
-when some informational status is returned. For example, <a href="../api_cxx/db_get.html">Db::get</a>
-returns DB_NOTFOUND when a requested key does not appear in the database.
-<h3>Class</h3>
-<a href="../api_cxx/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_cxx/get_errno.html">DbException::get_errno</a>
-and
-<a href="../api_cxx/what.html">DbException::what</a>.
+when some informational status is returned. For example,
+<a href="../api_cxx/db_get.html">Db::get</a> returns <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> when a requested key does
+not appear in the database.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_class.html b/db/docs/api_cxx/lock_class.html
index c0aa324d9..622e42ad0 100644
--- a/db/docs/api_cxx/lock_class.html
+++ b/db/docs/api_cxx/lock_class.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_class.so,v 10.13 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_class.so,v 10.20 2003/09/25 15:27:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLock</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbLock</h1>
+<h3>DbLock</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -29,33 +31,20 @@ public:
~DbLock();
};
</pre></h3>
-<h1>Description</h1>
-<p>The <a href="../api_cxx/dbenv_class.html">DbEnv</a> lock methods and the DbLock class are used
-to provide general-purpose locking. While designed to work with the
-other Db classes, they are also useful for more general locking
-purposes. Locks can be shared between processes.
-<p>In most cases, when multiple threads or processes are using locking, the
-deadlock detector, <a href="../utility/db_deadlock.html">db_deadlock</a> should be run.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Description: DbLock</h3>
+<p>The locking interfaces for the Berkeley DB database environment are methods
+of the <a href="../api_cxx/env_class.html">DbEnv</a> handle. The DbLock object is the handle
+for a single lock, and has no methods of its own.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, DbLock
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_detect.html b/db/docs/api_cxx/lock_detect.html
index 889d0f520..4530d70e4 100644
--- a/db/docs/api_cxx/lock_detect.html
+++ b/db/docs/api_cxx/lock_detect.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_detect.so,v 10.26 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_detect.so,v 10.48 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_detect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_detect</h1>
+<h3>DbEnv::lock_detect</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,50 +26,60 @@
int
DbEnv::lock_detect(u_int32_t flags, u_int32_t atype, int *aborted);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_detect</h3>
<p>The DbEnv::lock_detect method runs one iteration of the deadlock detector.
-The deadlock detector traverses the lock table, and for each deadlock
-it finds, marks one of the participating transactions for abort.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+The deadlock detector traverses the lock table and marks one of the
+participating lock requesters for rejection in each deadlock it finds.</p>
+<p>The DbEnv::lock_detect method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>aborted</b><dd>
+<p><dt><b>atype</b><dd>
+The <b>atype</b> parameter specifies which lock request(s) to reject.
+It must be set to one of the following list:
+<p><dl compact>
+<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use whatever lock policy was specified when the database environment
+was created. If no lock policy has yet been specified, set the lock
+policy to DB_LOCK_RANDOM.
+<dt><a name="DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a><dd>Reject lock requests which have timed out. No other deadlock detection
+is performed.
+<dt><a name="DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</a><dd>Reject the lock request for the locker ID with the greatest number of
+locks.
+<dt><a name="DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</a><dd>Reject the lock request for the locker ID with the fewest number of
+locks.
+<dt><a name="DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</a><dd>Reject the lock request for the locker ID with the fewest number of
+write locks.
+<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Reject the lock request for the oldest locker ID.
+<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Reject the lock request for a random locker ID.
+<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Reject the lock request for the youngest locker ID.
+</dl>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_detect method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt><a name="DB_LOCK_CONFLICT">DB_LOCK_CONFLICT</a><dd>Only run the deadlock detector if a lock conflict has occurred since
-the last time that the deadlock detector was run.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The <b>atype</b> parameter specifies which transaction to abort in the
-case of deadlock. It must be set to one of possible arguments listed for
-the <a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a> interface.
-<p>If the <b>aborted</b> parameter is non-NULL, the memory location it
-references will be set to the number of transactions aborted by the
-DbEnv::lock_detect method.
-<p>The DbEnv::lock_detect method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::lock_detect method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_detect method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_get.html b/db/docs/api_cxx/lock_get.html
index 4dae9f5dc..c120e0890 100644
--- a/db/docs/api_cxx/lock_get.html
+++ b/db/docs/api_cxx/lock_get.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_get.so,v 10.28 2000/04/24 16:33:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_get.so,v 10.52 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_get</h1>
+<h3>DbEnv::lock_get</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,72 +25,88 @@
<p>
int
DbEnv::lock_get(u_int32_t locker, u_int32_t flags,
- const Dbt *obj, const db_lockmode_t lock_mode, DbLock *lock);
+ const Dbt *object, const db_lockmode_t lock_mode, DbLock *lock);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_get</h3>
<p>The DbEnv::lock_get method acquires a lock from the lock table, returning
information about it in
-the <b>lock</b> argument.
-<p>The <b>locker</b> argument specified to DbEnv::lock_get is an unsigned
-32-bit integer quantity. It represents the entity requesting or releasing
-the lock.
-<p>The <b>flags</b> value must be set to 0 or the following value:
+the <b>lock</b> parameter.</p>
+<p>The DbEnv::lock_get method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with an
-existing lock, return immediately instead of waiting for the lock to
-become available.
-</dl>
-<p>The <b>obj</b> argument is an untyped byte string that specifies the
-object to be locked or released.
-<p>The <b>mode</b> argument is an index into the environment's lock conflict
-array. See <a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a> and
-<a href="../ref/lock/stdmode.html">Standard Lock Modes</a>
-for a description of that array.
-<p>The DbEnv::lock_get method may
-return or throw an exception encapsulating
-one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a><dd>A lock was requested that could not be immediately granted and the
-<b>flags</b> parameter was set to DB_LOCK_NOWAIT.
+<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with an
+existing lock,
+return DB_LOCK_NOTGRANTED or throw a
+<a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> immediately instead of waiting for
+the lock to become available.
</dl>
-<p>Otherwise, the DbEnv::lock_get method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::lock_get method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>lock_mode</b><dd>
+The <b>lock_mode</b> parameter is used as an index into the environment's
+lock conflict matrix. When using the default lock conflict matrix,
+<b>lock_mode</b> must be set to one of the following values:
<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<dt>DB_LOCK_READ<dd>read (shared)
+<dt>DB_LOCK_WRITE<dd>write (exclusive)
+<dt>DB_LOCK_IWRITE<dd>intention to write (shared)
+<dt>DB_LOCK_IREAD<dd>intention to read (shared)
+<dt>DB_LOCK_IWR<dd>intention to read and write (shared)
</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p>See <a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p>
+<p><dt><b>locker</b><dd>
+The <b>locker</b> parameter is an unsigned 32-bit integer quantity. It
+represents the entity requesting the lock.
+<p><dt><b>object</b><dd>
+The <b>object</b> parameter is an untyped byte string that specifies the
+object to be locked. Applications using the locking subsystem directly
+while also doing locking via the Berkeley DB access methods must take care not
+to inadvertently lock objects that happen to be equal to the unique file
+IDs used to lock files. See
+<a href="../ref/lock/am_conv.html">Access method locking conventions</a>
+for more information.
</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_get method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of locks has been reached.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::lock_get method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_get method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the DbEnv::lock_get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the DbEnv::lock_get method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the <a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> flag or lock timers were configured and the lock could not be granted before the wait-time expired,
+the DbEnv::lock_get method will fail and
+either return DB_LOCK_NOTGRANTED or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the maximum number of locks has been reached, the DbEnv::lock_get method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_id.html b/db/docs/api_cxx/lock_id.html
index 72ab2a274..5b807e625 100644
--- a/db/docs/api_cxx/lock_id.html
+++ b/db/docs/api_cxx/lock_id.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_id.so,v 10.19 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_id.so,v 10.32 2003/10/31 17:24:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_id</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_id</h1>
+<h3>DbEnv::lock_id</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,38 +26,33 @@
int
DbEnv::lock_id(u_int32_t *idp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_id</h3>
<p>The DbEnv::lock_id method
copies a locker ID, which is guaranteed to be unique in the specified lock
-table, into the memory location referenced by <b>idp</b>.
-<p>The DbEnv::lock_id method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::lock_id method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_id method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+table, into the memory location to which <b>idp</b> refers.</p>
+<p>The <a href="../api_cxx/lock_id_free.html">DbEnv::lock_id_free</a> method should be called to return the locker ID to
+the Berkeley DB library when it is no longer needed.</p>
+<p>The DbEnv::lock_id method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>idp</b><dd>
+The <b>idp</b> parameter references memory into which
+ the allocated locker ID is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_id_free.html b/db/docs/api_cxx/lock_id_free.html
index 2320548a9..13b0065b7 100644
--- a/db/docs/api_cxx/lock_id_free.html
+++ b/db/docs/api_cxx/lock_id_free.html
@@ -1,21 +1,22 @@
-<!--Id: lock_id_free.so,v 10.5 2002/08/18 21:16:37 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_id_free.so,v 10.13 2003/11/08 19:17:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_id_free</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_id_free</h1>
+<h3>DbEnv::lock_id_free</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,29 +26,39 @@
int
DbEnv::lock_id_free(u_int32_t id);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_id_free</h3>
<p>The DbEnv::lock_id_free method frees a locker ID allocated by the
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a> method.
-<p>The DbEnv::lock_id_free method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
+<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a> method.</p>
+<p>The DbEnv::lock_id_free method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>id</b><dd>
+The <b>id</b> parameter is the locker id to be freed.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_id_free method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The locker ID is invalid or locks are still held by this locker ID.
+<p><dt>EINVAL<dd>If the locker ID is invalid or locks are still held by this locker ID; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::lock_id_free method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_id_free method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_list.html b/db/docs/api_cxx/lock_list.html
index 035e7aa4f..d3b754e73 100644
--- a/db/docs/api_cxx/lock_list.html
+++ b/db/docs/api_cxx/lock_list.html
@@ -1,17 +1,17 @@
-<!--Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Locking Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Locking Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Locking Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
<tr><td><a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
@@ -27,6 +27,6 @@
<tr><td><a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
<tr><td><a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a></td><td>Acquire/release locks</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_put.html b/db/docs/api_cxx/lock_put.html
index 2875e4cfe..25fdaf293 100644
--- a/db/docs/api_cxx/lock_put.html
+++ b/db/docs/api_cxx/lock_put.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_put.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_put.so,v 10.36 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: DbLock::put</title>
+<title>Berkeley DB: DbEnv::lock_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbLock::put</h1>
+<h3>DbEnv::lock_put</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,42 +24,40 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbLock::put(DbEnv *env);
+DbEnv::lock_put(DbLock *lock);
</pre></h3>
-<h1>Description</h1>
-<p>The DbLock::put method releases <b>lock</b> from the lock table.
-<p>The DbLock::put method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbLock::put method may fail and throw an exception or return a non-zero error for the following conditions:
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_put</h3>
+<p>The DbEnv::lock_put method releases <b>lock</b>.</p>
+<p>The DbEnv::lock_put method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lock</b><dd>
+The <b>lock</b> parameter is the lock to be released.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_put method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbLock::put method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLock::put method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_stat.html b/db/docs/api_cxx/lock_stat.html
index 87bdc9d75..f097440f6 100644
--- a/db/docs/api_cxx/lock_stat.html
+++ b/db/docs/api_cxx/lock_stat.html
@@ -1,98 +1,112 @@
-<!--$Id: lock_stat.so,v 10.30 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_stat.so,v 10.54 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_stat</h1>
+<h3>DbEnv::lock_stat</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
-DbEnv::lock_stat(DB_LOCK_STAT **statp, db_malloc_fcn_type db_malloc);
+DbEnv::lock_stat(DB_LOCK_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::lock_stat method
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The lock region statistics are stored in a structure of type
-DB_LOCK_STAT. The following DB_LOCK_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_stat</h3>
+<p>The DbEnv::lock_stat method returns the locking subsystem statistics.</p>
+<p>The DbEnv::lock_stat method creates a statistical structure of type
+DB_LOCK_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_LOCK_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>u_int32_t st_lastid;<dd>The last allocated lock ID.
+<dt>u_int32_t st_id;<dd>The last allocated locker ID.
+<dt>u_int32_t st_cur_maxid;<dd>The current maximum unused locker ID.
<dt>u_int32_t st_nmodes;<dd>The number of lock modes.
<dt>u_int32_t st_maxlocks;<dd>The maximum number of locks possible.
<dt>u_int32_t st_maxlockers;<dd>The maximum number of lockers possible.
-<dt>u_int32_t st_maxobjects;<dd>The maximum number of objects possible.
+<dt>u_int32_t st_maxobjects;<dd>The maximum number of lock objects possible.
<dt>u_int32_t st_nlocks;<dd>The number of current locks.
<dt>u_int32_t st_maxnlocks;<dd>The maximum number of locks at any one time.
<dt>u_int32_t st_nlockers;<dd>The number of current lockers.
<dt>u_int32_t st_maxnlockers;<dd>The maximum number of lockers at any one time.
-<dt>u_int32_t st_nobjects;<dd>The number of current objects.
-<dt>u_int32_t st_maxnobjects;<dd>The maximum number of objects at any one time.
+<dt>u_int32_t st_nobjects;<dd>The number of current lock objects.
+<dt>u_int32_t st_maxnobjects;<dd>The maximum number of lock objects at any one time.
<dt>u_int32_t st_nrequests;<dd>The total number of locks requested.
<dt>u_int32_t st_nreleases;<dd>The total number of locks released.
-<dt>u_int32_t st_nnowaits;<dd>The total number of lock requests that failed because
+<dt>u_int32_t st_nnowaits;<dd>The total number of lock requests failing because
<a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> was set.
<dt>u_int32_t st_nconflicts;<dd>The total number of locks not immediately available due to conflicts.
-<dt>u_int32_t st_ndeadlocks;<dd>The number of deadlocks detected.
-<dt>u_int32_t st_regsize;<dd>The size of the region.
+<dt>u_int32_t st_ndeadlocks;<dd>The number of deadlocks.
+<dt>u_int32_t st_locktimeout;<dd>Lock timeout value.
+<dt>u_int32_t st_nlocktimeouts;<dd>The number of lock requests that have timed out.
+<dt>u_int32_t st_txntimeout;<dd>Transaction timeout value.
+<dt>u_int32_t st_ntxntimeouts;<dd>The number of transactions that have timed out. This value is also a
+component of <b>st_ndeadlocks</b>, the total number of deadlocks
+detected.
+<dt>u_int32_t st_regsize;<dd>The size of the lock region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
</dl>
-<p>The DbEnv::lock_stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::lock_stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_stat method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<p>The DbEnv::lock_stat method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lock_vec.html b/db/docs/api_cxx/lock_vec.html
index 46180f2ce..0b9cf6699 100644
--- a/db/docs/api_cxx/lock_vec.html
+++ b/db/docs/api_cxx/lock_vec.html
@@ -1,20 +1,22 @@
-<!--$Id: lock_vec.so,v 10.31 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_vec.so,v 10.68 2003/11/25 23:23:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::lock_vec</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::lock_vec</h1>
+<h3>DbEnv::lock_vec</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,103 +27,148 @@ int
DbEnv::lock_vec(u_int32_t locker, u_int32_t flags,
DB_LOCKREQ list[], int nlist, DB_LOCKREQ **elistp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::lock_vec</h3>
<p>The DbEnv::lock_vec method atomically obtains and releases one or more locks
from the lock table. The DbEnv::lock_vec method is intended to support
acquisition or trading of multiple locks under one lock table semaphore,
as is needed for lock coupling or in multigranularity locking for lock
-escalation.
-<p>The <b>locker</b> argument specified to DbEnv::lock_vec is an unsigned
-32-bit integer quantity. It represents the entity requesting or releasing
-the lock.
-<p>The <b>flags</b> value must be set to 0 or the following value:
+escalation.</p>
+<p>If any of the requested locks cannot be acquired, or any of the locks to
+be released cannot be released, the operations before the failing
+operation are guaranteed to have completed successfully, and
+DbEnv::lock_vec returns a non-zero value. In addition, if <b>elistp</b>
+is not NULL, it is set to point to the DB_LOCKREQ entry that was being
+processed when the error occurred.</p>
+<p>Unless otherwise specified, the DbEnv::lock_vec method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>elistp</b><dd>
+If an error occurs, and the <b>elistp</b> parameter is non-NULL, it
+is set to point to the DB_LOCKREQ entry that was being processed when
+the error occurred.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be immediately granted because the requested lock
-conflicts with an existing lock, return instead of waiting for the lock
-to become available.
+<p><dt><a name="DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with
+an existing lock,
+return DB_LOCK_NOTGRANTED or throw a
+<a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> immediately instead of waiting for
+the lock to become available. In this case, if non-NULL,
+<b>elistp</b> identifies the request that was not granted, or, if an
+exception is thrown, the index of the request that was not granted can
+be found by calling DbLockNotGrantedException.get_index.
</dl>
-<p>The <b>list</b> array provided to DbEnv::lock_vec is typedef'd as
-DB_LOCKREQ. A DB_LOCKREQ structure has at least the following fields,
-which must be initialized before calling DbEnv::lock_vec:
+<p><dt><b>locker</b><dd>
+The <b>locker</b> parameter is an unsigned 32-bit integer quantity. It
+represents the entity requesting or releasing the lock.
+<p><dt><b>list</b><dd>
+The <b>list</b> array provided to DbEnv::lock_vec is typedef'd as
+DB_LOCKREQ.
+<p>To ensure compatibility with future releases of Berkeley DB, all
+fields of the DB_LOCKREQ structure that are not explicitly set should
+be initialized to 0 before the first time the structure is used. Do
+this by declaring the structure external or static, or by calling
+<b>memset</b>(3).</p>
+<p>A DB_LOCKREQ structure has at least the following fields:</p>
<p><dl compact>
<p><dt>lockop_t <a name="op">op</a>;<dd>The operation to be performed, which must be set to one of the
following values:
<p><dl compact>
-<p><dt><a name="DB_LOCK_GET">DB_LOCK_GET</a><dd>Get a lock, as defined by the values of <b>locker</b>, <b>obj</b>,
-and <b>mode</b>. Upon return from DbEnv::lock_vec, if the
-<b>lock</b> field is non-NULL, a reference to the acquired lock is
-stored there. (This reference is invalidated by any call to
-DbEnv::lock_vec or <a href="../api_cxx/lock_put.html">DbLock::put</a> that releases the lock.)
-<p><dt><a name="DB_LOCK_PUT">DB_LOCK_PUT</a><dd>The lock referenced by the contents of the <b>lock</b> field is released.
-<p><dt><a name="DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a><dd>All locks held by the <b>locker</b> are released. (Any locks acquired
-as a part of the current call to DbEnv::lock_vec that appear after the
-DB_LOCK_PUT_ALL entry are not considered for this
-operation).
-<p><dt><a name="DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a><dd>All locks held on the object <b>obj</b> are released. The <b>mode</b>
-and <b>locker</b> parameters are ignored. Note that any locks acquired
-as a part of the current call to DbEnv::lock_vec that occur before the
-DB_LOCK_PUT_OBJ will also be released; those acquired afterwards
-will not be released.
+<p><dt><a name="DB_LOCK_GET">DB_LOCK_GET</a><dd>Get the lock defined by the values of the <b>mode</b> and <b>obj</b>
+structure fields, for the specified <b>locker</b>. Upon return from
+DbEnv::lock_vec, if the <b>lock</b> field is non-NULL, a reference
+to the acquired lock is stored there. (This reference is invalidated
+by any call to DbEnv::lock_vec or <a href="../api_cxx/lock_put.html">DbEnv::lock_put</a> that releases the
+lock.)
+<p><dt><a name="DB_LOCK_GET_TIMEOUT">DB_LOCK_GET_TIMEOUT</a><dd>Identical to DB_LOCK_GET except that the value in the <b>timeout</b>
+structure field overrides any previously specified timeout value for
+this lock. A value of 0 turns off any previously specified timeout.
+<p><dt><a name="DB_LOCK_PUT">DB_LOCK_PUT</a><dd>The lock to which the <b>lock</b> structure field refers is released.
+The <b>locker</b> parameter, and <b>mode</b> and <b>obj</b> fields
+are ignored.
+<p><dt><a name="DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</a><dd>All locks held by the specified <b>locker</b> are released. The
+<b>lock</b>, <b>mode</b>, and <b>obj</b> structure fields are
+ignored. Locks acquired in operations performed by the current call to
+DbEnv::lock_vec which appear before the DB_LOCK_PUT_ALL
+operation are released; those acquired in operations appearing after
+the DB_LOCK_PUT_ALL operation are not released.
+<p><dt><a name="DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</a><dd>All locks held on <b>obj</b> are released. The <b>locker</b>
+parameter and the <b>lock</b> and <b>mode</b> structure fields are
+ignored. Locks acquired in operations performed by the current call to
+DbEnv::lock_vec that appear before the DB_LOCK_PUT_OBJ
+operation are released; those acquired in operations appearing after the
+DB_LOCK_PUT_OBJ operation are not released.
+<p><dt><a name="DB_LOCK_TIMEOUT">DB_LOCK_TIMEOUT</a><dd>Cause the specified <b>locker</b> to timeout immediately. If the
+database environment has not configured automatic deadlock detection,
+the transaction will timeout the next time deadlock detection is
+performed. As transactions acquire locks on behalf of a single locker
+ID, timing out the locker ID associated with a transaction will time
+out the transaction itself.
</dl>
-<p><dt>const Dbt <a name="obj">obj</a>;<dd>An untyped byte string that specifies the object to be locked or released.
-<p><dt>const lockmode_t <a name="mode">mode</a>;<dd>The lock mode, used as an index into the environment's lock conflict array.
-See <a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for a description of that array.
<p><dt>DB_LOCK <a name="lock">lock</a>;<dd>A lock reference.
-</dl>
-<p>The <b>nlist</b> argument specifies the number of elements in the
-<b>list</b> array.
-<p>If any of the requested locks cannot be acquired, or any of the locks to
-be released cannot be released, the operations before the failing
-operation are guaranteed to have completed successfully, and
-DbEnv::lock_vec returns a non-zero value. In addition, if <b>elistp</b>
-is not NULL, it is set to point to the DB_LOCKREQ entry that was being
-processed when the error occurred.
-<p>The DbEnv::lock_vec method may
-return or throw an exception encapsulating
-one of the following values:
+<p><dt>const lockmode_t <a name="mode">mode</a>;<dd>The lock mode, used as an index into the environment's lock conflict matrix.
+When using the default lock conflict matrix, <b>mode</b> must be set to one
+of the following values:
<p><dl compact>
-<p><dt><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a><dd>A lock was requested that could not be immediately granted and the
-<b>flag</b> parameter was set to DB_LOCK_NOWAIT. In this case, if
-non-NULL, <b>elistp</b> identifies the request that was not granted.
+<dt><a name="DB_LOCK_READ">DB_LOCK_READ</a><dd>read (shared)
+<dt><a name="DB_LOCK_WRITE">DB_LOCK_WRITE</a><dd>write (exclusive)
+<dt><a name="DB_LOCK_IWRITE">DB_LOCK_IWRITE</a><dd>intention to write (shared)
+<dt><a name="DB_LOCK_IREAD">DB_LOCK_IREAD</a><dd>intention to read (shared)
+<dt><a name="DB_LOCK_IWR">DB_LOCK_IWR</a><dd>intention to read and write (shared)
</dl>
-<p>Otherwise, the DbEnv::lock_vec method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::lock_vec method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>DB_LOCK_DEADLOCK<dd>The operation was selected to resolve a deadlock.
+<p>See <a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a> and <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p>
+<p><dt>const Dbt <a name="obj">obj</a>;<dd>An untyped byte string that specifies the object to be locked or
+released. Applications using the locking subsystem directly while also
+doing locking via the Berkeley DB access methods must take care not to
+inadvertently lock objects that happen to be equal to the unique file
+IDs used to lock files. See <a href="../ref/lock/am_conv.html">Access
+method locking conventions</a> for more information.
+<p><dt>u_int32_t timeout;<dd>The lock timeout value.
</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>nlist</b><dd>
+The <b>nlist</b> parameter specifies the number of elements in the
+<b>list</b> array.
</dl>
+<h3>Errors</h3>
+<p>The DbEnv::lock_vec method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of locks has been reached.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::lock_vec method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::lock_vec method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lk_conflicts.html">DbEnv::set_lk_conflicts</a>,
-<a href="../api_cxx/env_set_lk_detect.html">DbEnv::set_lk_detect</a>,
-<a href="../api_cxx/env_set_lk_max_locks.html">DbEnv::set_lk_max_locks</a>,
-<a href="../api_cxx/env_set_lk_max_lockers.html">DbEnv::set_lk_max_lockers</a>,
-<a href="../api_cxx/env_set_lk_max_objects.html">DbEnv::set_lk_max_objects</a>,
-<a href="../api_cxx/env_set_lk_max.html">DbEnv::set_lk_max</a>,
-<a href="../api_cxx/lock_detect.html">DbEnv::lock_detect</a>,
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a>,
-<a href="../api_cxx/lock_id.html">DbEnv::lock_id</a>,
-<a href="../api_cxx/lock_put.html">DbLock::put</a>,
-<a href="../api_cxx/lock_stat.html">DbEnv::lock_stat</a>
-and
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>.
+<p>If a transactional database environment operation was selected to
+resolve a deadlock, the DbEnv::lock_vec method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or
+throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a> exception.</p>
+<p>If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable
+to grant a lock in the allowed time, the DbEnv::lock_vec method will fail and
+either return <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the <a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> flag or lock timers were configured and the lock could not be granted before the wait-time expired,
+the DbEnv::lock_vec method will fail and
+either return DB_LOCK_NOTGRANTED or
+throw a <a href="../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>If the maximum number of locks has been reached, the DbEnv::lock_vec method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/lock_class.html">DbLock</a>
+<h3>See Also</h3>
+<a href="../api_cxx/lock_list.html">Locking Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lockng_class.html b/db/docs/api_cxx/lockng_class.html
index a9230f3d0..0e4f5df0a 100644
--- a/db/docs/api_cxx/lockng_class.html
+++ b/db/docs/api_cxx/lockng_class.html
@@ -1,21 +1,22 @@
-<!--Id: lockng_class.so,v 1.5 2002/07/29 04:27:14 mjc Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lockng_class.so,v 1.12 2003/10/31 17:24:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLockNotGrantedException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbLockNotGrantedException</h1>
+<h3>DbLockNotGrantedException</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -31,43 +32,40 @@ public:
int get_index() const;
};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbLockNotGrantedException class and
-how it is used by the various Db* classes.
+<hr size=1 noshade>
+<h3>Description: DbLockNotGrantedException</h3>
+<p>This information describes the DbLockNotGrantedException class and
+how it is used by the various Db* classes.</p>
<p>A DbLockNotGrantedException is thrown when a lock, requested
-using the <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> methods (where the
-<a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> option was specified), or by any Db
-operation performed in the context of a transaction begun using the
-<a href="../api_cxx/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a> option, is unable to be granted immediately.
-<p>The <b>get_op</b> method returns 0 when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called,
-and returns the <b>op</b> for the failed DB_LOCKREQ when
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
-<p>The <b>get_mode</b> method returns the <b>mode</b> argument when
+using the <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> methods, where the
+<a href="../api_cxx/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> option was specified, is unable to be granted
+immediately.</p>
+<p>The <b>get_op</b> method
+returns 0 when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and returns the <b>op</b>
+for the failed DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.</p>
+<p>The <b>get_mode</b> method
+returns the <b>mode</b> parameter when
<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and returns the <b>mode</b> for the failed
-DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
-<p>The <b>get_obj</b> method returns the <b>obj</b> argument when
-<a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and returns the <b>obj</b> for the failed
-DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
+DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.</p>
+<p>The <b>get_obj</b> method
+returns the <b>mode</b> parameter when
+returns the <b>object</b> parameter when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and
+returns the <b>object</b> for the failed DB_LOCKREQ when
+<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
The <a href="../api_cxx/dbt_class.html">Dbt</a> pointer may or may not refer to valid memory, depending on
whether the <a href="../api_cxx/dbt_class.html">Dbt</a> used in the call to the failed <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or
-<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> method is still in scope and has not been deleted.
-<p>The <b>get_lock</b> method returns NULL when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was
-called, and returns the <b>lock</b> in the failed DB_LOCKREQ
-when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
-<p>The <b>get_index</b> method returns -1 when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was
-called, and returns the index of the failed DB_LOCKREQ
-when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.
-<h1>Class</h1>
-<a href="../api_cxx/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_cxx/get_errno.html">DbException::get_errno</a>,
-<a href="../api_cxx/what.html">DbException::what</a>
-and
-<a href="../api_cxx/mem_class.html">DbMemoryException</a>
+<a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> method is still in scope and has not been deleted.</p>
+<p>The <b>get_lock</b> method
+returns NULL when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and returns the
+<b>lock</b> in the failed DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a>
+was called.</p>
+<p>The <b>get_index</b> method
+returns -1 when <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> was called, and returns the index of
+the failed DB_LOCKREQ when <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> was called.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_archive.html b/db/docs/api_cxx/log_archive.html
index e5436431a..ee9b4a4db 100644
--- a/db/docs/api_cxx/log_archive.html
+++ b/db/docs/api_cxx/log_archive.html
@@ -1,106 +1,120 @@
-<!--$Id: log_archive.so,v 10.26 2000/05/25 13:47:07 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_archive.so,v 10.48 2003/11/08 19:17:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_archive</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_archive</h1>
+<h3>DbEnv::log_archive</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
-DbEnv::log_archive(char *(*listp)[],
- u_int32_t flags, db_malloc_fcn_type db_malloc);
+DbEnv::log_archive(char *(*listp)[], u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_archive</h3>
+<p>The DbEnv::log_archive method returns an array of log or database filenames.</p>
+<p>By default, DbEnv::log_archive returns the names of all of the log
+files that are no longer in use (for example, that are no longer
+involved in active transactions), and that may safely be archived for
+catastrophic recovery and then removed from the system. If there are
+no filenames to return,
+the memory location to which <b>listp</b> refers will be set to NULL.</p>
+<p>Arrays of log filenames are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>Log cursor handles (returned by the <a href="../api_cxx/log_cursor.html">DbEnv::log_cursor</a> method) may have open
+file descriptors for log files in the database environment. Also, the
+Berkeley DB interfaces to the database environment logging subsystem (for
+example, <a href="../api_cxx/log_put.html">DbEnv::log_put</a> and <a href="../api_cxx/txn_abort.html">DbTxn::abort</a>) may allocate log cursors
+and have open file descriptors for log files as well. On operating
+systems where filesystem related system calls (for example, rename and
+unlink on Windows/NT) can fail if a process has an open file descriptor
+for the affected file, attempting to move or remove the log files listed
+by DbEnv::log_archive may fail. All Berkeley DB internal use of log cursors
+operates on active log files only and furthermore, is short-lived in
+nature. So, an application seeing such a failure should be restructured
+to close any open log cursors it may have, and otherwise to retry the
+operation until it succeeds. (Although the latter is not likely to be
+necessary; it is hard to imagine a reason to move or rename a log file
+in which transactions are being logged or aborted.)</p>
+<p>See <a href="../utility/db_archive.html">db_archive</a> for more information on database archival
+procedures.</p>
<p>The DbEnv::log_archive method
-creates a NULL-terminated array of log or database file names and copies
-a pointer to them into the user-specified memory location <b>listp</b>.
-<p>By default, DbEnv::log_archive returns the names of all of the log files
-that are no longer in use (e.g., no longer involved in active transactions),
-and that may safely be archived for catastrophic recovery and then removed
-from the system. If there were no file names to return, the memory location
-referenced by <b>listp</b> will be set to NULL.
-<p>Arrays of log file names are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_ARCH_ABS">DB_ARCH_ABS</a><dd>All pathnames are returned as absolute pathnames,
-instead of relative to the database home directory.
+<p><dt><a name="DB_ARCH_ABS">DB_ARCH_ABS</a><dd>All pathnames are returned as absolute pathnames, instead of relative
+to the database home directory.
<p><dt><a name="DB_ARCH_DATA">DB_ARCH_DATA</a><dd>Return the database files that need to be archived in order to recover
the database from catastrophic failure. If any of the database files
have not been accessed during the lifetime of the current log files,
DbEnv::log_archive will not include them in this list. It is also
-possible that some of the files referenced in the log have since been
+possible that some of the files referred to by the log have since been
deleted from the system.
-<p><dt><a name="DB_ARCH_LOG">DB_ARCH_LOG</a><dd>Return all the log file names regardless of whether or not they are in
+<p>The DB_ARCH_DATA and DB_ARCH_LOG flags are mutually
+exclusive.</p>
+<p><dt><a name="DB_ARCH_LOG">DB_ARCH_LOG</a><dd>Return all the log filenames, regardless of whether or not they are in
use.
-</dl>
<p>The DB_ARCH_DATA and DB_ARCH_LOG flags are mutually
-exclusive.
-<p>See the <a href="../utility/db_archive.html">db_archive</a> manual page for more information on database
-archival procedures.
-<p>The DbEnv::log_archive method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Bugs</h1>
-<p>In a threaded application (i.e., one where the environment was created
-with the DB_THREAD flag specified), calling DbEnv::log_archive with the
-DB_ARCH_DATA flag will fail, returning EINVAL. To work around this
-problem, re-open the log explicitly without specifying DB_THREAD. This
-restriction is expected to be removed in a future version of Berkeley DB.
-<h1>Errors</h1>
-<p>The DbEnv::log_archive method may fail and throw an exception or return a non-zero error for the following conditions:
+exclusive.</p>
+<p><dt><a name="DB_ARCH_REMOVE">DB_ARCH_REMOVE</a><dd>Remove log files that are no longer needed; no filenames are returned.
+Automatic log file removal is likely to make catastrophic recovery
+impossible.
+<p>The DB_ARCH_REMOVE flag may not be specified with any other
+flag.</p>
+</dl>
+<p><dt><b>listp</b><dd>
+The <b>listp</b> parameter references memory into which the allocated
+array of log or database filenames is copied. If there are no filenames
+to return, the memory location to which <b>listp</b> refers will be set
+to NULL.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::log_archive method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The log was corrupted.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::log_archive method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_archive method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_compare.html b/db/docs/api_cxx/log_compare.html
index 7d1b7ebb9..97c6d4294 100644
--- a/db/docs/api_cxx/log_compare.html
+++ b/db/docs/api_cxx/log_compare.html
@@ -1,20 +1,22 @@
-<!--$Id: log_compare.so,v 10.12 1999/12/20 08:52:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_compare.so,v 10.21 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_compare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_compare</h1>
+<h3>DbEnv::log_compare</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,30 +26,32 @@
static int
DbEnv::log_compare(const DbLsn *lsn0, const DbLsn *lsn1);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_compare</h3>
<p>The DbEnv::log_compare method allows the caller to compare two
<a href="../api_cxx/lsn_class.html">DbLsn</a> objects,
returning 0 if they are equal, 1 if <b>lsn0</b> is greater than
-<b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.
+<b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn0</b><dd>
+The <b>lsn0</b> parameter is one of the
+<a href="../api_cxx/lsn_class.html">DbLsn</a> objects
+to be compared.
+<p><dt><b>lsn1</b><dd>
+The <b>lsn1</b> parameter is one of the
+<a href="../api_cxx/lsn_class.html">DbLsn</a> objects
+to be compared.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_cursor.html b/db/docs/api_cxx/log_cursor.html
index 5baa889e3..391cc5bba 100644
--- a/db/docs/api_cxx/log_cursor.html
+++ b/db/docs/api_cxx/log_cursor.html
@@ -1,21 +1,22 @@
-<!--Id: log_cursor.so,v 10.5 2002/08/24 15:13:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_cursor.so,v 10.11 2003/10/31 17:24:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_cursor</h1>
+<h3>DbEnv::log_cursor</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,31 +26,41 @@
int
DbEnv::log_cursor(DbLogc **cursorp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_cursor</h3>
+<p>The DbEnv::log_cursor method returns a created log cursor.</p>
<p>The DbEnv::log_cursor method
-creates a log cursor and copies a pointer to it into the memory to which
-<b>cursorp</b> refers.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbEnv::log_cursor method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::log_cursor method may fail and throw an exception or return a non-zero error for the following conditions:
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>cursorp</b><dd>
+The <b>cursorp</b> parameter references memory into which
+a pointer to the created log cursor is copied.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
</dl>
-<p>The DbEnv::log_cursor method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_cursor method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DbEnv::log_cursor method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_file.html b/db/docs/api_cxx/log_file.html
index fa0ed4e53..4409adacb 100644
--- a/db/docs/api_cxx/log_file.html
+++ b/db/docs/api_cxx/log_file.html
@@ -1,20 +1,22 @@
-<!--$Id: log_file.so,v 10.18 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_file.so,v 10.32 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_file</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_file</h1>
+<h3>DbEnv::log_file</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,56 +26,52 @@
int
DbEnv::log_file(const DbLsn *lsn, char *namep, size_t len);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_file</h3>
<p>The DbEnv::log_file method maps
<a href="../api_cxx/lsn_class.html">DbLsn</a> objects
-to file names,
-copying the name of the file containing the record named by <b>lsn</b>
-into the memory location referenced by <b>namep</b>.
-<p>The <b>len</b> argument is the length of the <b>namep</b> buffer in bytes.
-If <b>namep</b> is too short to hold the file name, DbEnv::log_file will
-return ENOMEM.
-(Log file names are normally quite short, on the order of 10 characters.)
+to filenames, returning the name of the file containing the record named
+by <b>lsn</b>.</p>
<p>This mapping of
<a href="../api_cxx/lsn_class.html">DbLsn</a> objects
to files is needed for database administration. For example, a
-transaction manager typically records the earliest
-<a href="../api_cxx/lsn_class.html">DbLsn</a>
-needed for restart, and the database administrator may want to archive
-log files to tape when they contain only
-<a href="../api_cxx/lsn_class.html">DbLsn</a>
-entries before the earliest one needed for restart.
-<p>The DbEnv::log_file method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::log_file method may fail and throw an exception or return a non-zero error for the following conditions:
+transaction manager typically records the earliest <a href="../api_cxx/lsn_class.html">DbLsn</a> needed
+for restart, and the database administrator may want to archive log
+files to tape when they contain only <a href="../api_cxx/lsn_class.html">DbLsn</a> entries before the
+earliest one needed for restart.</p>
+<p>The DbEnv::log_file method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>ENOMEM<dd>The supplied buffer was too small to hold the log file name.
+<p><dt><b>lsn</b><dd>
+The <b>lsn</b> parameter is the
+<a href="../api_cxx/lsn_class.html">DbLsn</a> object
+for which a filename is wanted.
+<p><dt><b>namep</b><dd>
+The <b>namep</b> parameter references memory into which
+ the name of the file containing the record named by <b>lsn</b> is copied.
+<p><dt><b>len</b><dd>
+The <b>len</b> parameter is the length of the <b>namep</b> buffer in
+bytes. If <b>namep</b> is too short to hold the filename,
+DbEnv::log_file will fail. (Log filenames are normally quite short,
+on the order of 10 characters.)
</dl>
-<p>The DbEnv::log_file method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_file method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<h3>Errors</h3>
+<p>If the supplied buffer was too small to hold the log filename, the DbEnv::log_file method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_flush.html b/db/docs/api_cxx/log_flush.html
index ecb13b9c0..ab7dbccf1 100644
--- a/db/docs/api_cxx/log_flush.html
+++ b/db/docs/api_cxx/log_flush.html
@@ -1,20 +1,22 @@
-<!--$Id: log_flush.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_flush.so,v 10.30 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_flush</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_flush</h1>
+<h3>DbEnv::log_flush</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,43 +26,40 @@
int
DbEnv::log_flush(const DbLsn *lsn);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::log_flush method guarantees that all log records whose
-<a href="../api_cxx/lsn_class.html">DbLsn</a> values
-are less than or equal to the <b>lsn</b> argument have been
-written to disk. If <b>lsn</b> is NULL, all records in the
-log are flushed.
-<p>The DbEnv::log_flush method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::log_flush method may fail and throw an exception or return a non-zero error for the following conditions:
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_flush</h3>
+<p>The DbEnv::log_flush method writes log records to disk.</p>
+<p>The DbEnv::log_flush method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn</b><dd>
+All log records with <a href="../api_cxx/lsn_class.html">DbLsn</a> values less than or equal to the
+<b>lsn</b> parameter are written to disk. If <b>lsn</b> is NULL,
+all records in the log are flushed.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::log_flush method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::log_flush method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_flush method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_list.html b/db/docs/api_cxx/log_list.html
index 151c0121a..7dce46e65 100644
--- a/db/docs/api_cxx/log_list.html
+++ b/db/docs/api_cxx/log_list.html
@@ -1,17 +1,17 @@
-<!--Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Logging Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Logging Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Logging Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/log_archive.html">DbEnv::log_archive</a></td><td>List log and database files</td></tr>
<tr><td><a href="../api_cxx/log_cursor.html">DbEnv::log_cursor</a></td><td>Create a log cursor handle</td></tr>
@@ -27,6 +27,6 @@
<tr><td><a href="../api_cxx/logc_close.html">DbLogc::close</a></td><td>Close a log cursor</td></tr>
<tr><td><a href="../api_cxx/logc_get.html">DbLogc::get</a></td><td>Retrieve a log record</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_put.html b/db/docs/api_cxx/log_put.html
index ecd84e33c..a6904770e 100644
--- a/db/docs/api_cxx/log_put.html
+++ b/db/docs/api_cxx/log_put.html
@@ -1,20 +1,22 @@
-<!--$Id: log_put.so,v 10.21 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_put.so,v 10.40 2003/11/08 19:17:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_put</h1>
+<h3>DbEnv::log_put</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,20 +26,19 @@
int
DbEnv::log_put(DbLsn *lsn, const Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_put</h3>
<p>The DbEnv::log_put method appends records to the log. The <a href="../api_cxx/lsn_class.html">DbLsn</a> of
-the put record is returned in the <b>lsn</b> argument. The <b>flags</b>
-argument may be set to one of the following values:
+the put record is returned in the <b>lsn</b> parameter.</p>
+<p>The DbEnv::log_put method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt><a name="DB_CHECKPOINT">DB_CHECKPOINT</a><dd>The log should write a checkpoint record, recording any information
-necessary to make the log structures recoverable after a crash.
-<p><dt><a name="DB_CURLSN">DB_CURLSN</a><dd>The <a href="../api_cxx/lsn_class.html">DbLsn</a> of the next record to be put is returned in the
-<b>lsn</b> argument.
-<p><dt><a name="DB_FLUSH">DB_FLUSH</a><dd>The log is forced to disk after this record is written, guaranteeing
-that all records with <a href="../api_cxx/lsn_class.html">DbLsn</a> values less than or equal to the
-one being put are on disk before this function returns (this function
-is most often used for a transaction commit, see <a href="../api_cxx/txn_commit.html">DbTxn::commit</a> for
-more information).
+<p><dt><b>data</b><dd>
+The <b>data</b> parameter is the record to write to the log.
<p>The caller is responsible for providing any necessary structure to
<b>data</b>. (For example, in a write-ahead logging protocol, the
application must understand what part of <b>data</b> is an operation
@@ -45,40 +46,38 @@ code, what part is redo information, and what part is undo information.
In addition, most transaction managers will store in <b>data</b> the
<a href="../api_cxx/lsn_class.html">DbLsn</a> of the previous log record for the same transaction, to
support chaining back through the transaction's log records during
-undo.)
+undo.)</p>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_FLUSH">DB_FLUSH</a><dd>The log is forced to disk after this record is written, guaranteeing
+that all records with <a href="../api_cxx/lsn_class.html">DbLsn</a> values less than or equal to the
+one being "put" are on disk before DbEnv::log_put returns.
</dl>
-<p>The DbEnv::log_put method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The <a href="../api_cxx/log_flush.html">DbEnv::log_flush</a> method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>lsn</b><dd>
+The <b>lsn</b> parameter references memory into which
+ the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the put record is copied.
+</dl>
+<h3>Errors</h3>
+<p>The <a href="../api_cxx/log_flush.html">DbEnv::log_flush</a> method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The record to be logged is larger than the maximum log record.
+<p><dt>EINVAL<dd>If the record to be logged is larger than the maximum log record; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::log_put method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_put method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/log_stat.html b/db/docs/api_cxx/log_stat.html
index 061685ab4..4d8bd1ddb 100644
--- a/db/docs/api_cxx/log_stat.html
+++ b/db/docs/api_cxx/log_stat.html
@@ -1,53 +1,51 @@
-<!--$Id: log_stat.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 10.48 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::log_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::log_stat</h1>
+<h3>DbEnv::log_stat</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
-DbEnv::log_stat(DB_LOG_STAT **spp, db_malloc_fcn_type db_malloc);
+DbEnv::log_stat(DB_LOG_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::log_stat method
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The log region statistics are stored in a structure of type DB_LOG_STAT.
-The following DB_LOG_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DbEnv::log_stat</h3>
+<p>The DbEnv::log_stat method returns the logging subsystem statistics.</p>
+<p>The DbEnv::log_stat method creates a statistical structure of type
+DB_LOG_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_LOG_STAT fields will be filled in:</p>
<p><dl compact>
<dt>u_int32_t st_magic;<dd>The magic number that identifies a file as a log file.
<dt>u_int32_t st_version;<dd>The version of the log file type.
-<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>int st_mode;<dd>The mode of any created log files.
<dt>u_int32_t st_lg_bsize;<dd>The in-memory log record cache size.
-<dt>u_int32_t st_lg_max;<dd>The maximum size of any individual file comprising the log.
+<dt>u_int32_t st_lg_size;<dd>The current log file size.
<dt>u_int32_t st_w_mbytes;<dd>The number of megabytes written to this log.
<dt>u_int32_t st_w_bytes;<dd>The number of bytes over and above <b>st_w_mbytes</b> written to this log.
<dt>u_int32_t st_wc_mbytes;<dd>The number of megabytes written to this log since the last checkpoint.
@@ -59,38 +57,53 @@ in-memory log record cache filled up.
<dt>u_int32_t st_scount;<dd>The number of times the log has been flushed to disk.
<dt>u_int32_t st_cur_file;<dd>The current log file number.
<dt>u_int32_t st_cur_offset;<dd>The byte offset in the current log file.
+<dt>u_int32_t st_disk_file;<dd>The log file number of the last record known to be on disk.
+<dt>u_int32_t st_disk_offset;<dd>The byte offset of the last record known to be on disk.
+<dt>u_int32_t st_maxcommitperflush;<dd>The maximum number of commits contained in a single log flush.
+<dt>u_int32_t st_mincommitperflush;<dd>The minimum number of commits contained in a single log flush that
+contained a commit.
+<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
</dl>
-<p>The DbEnv::log_stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::log_stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::log_stat method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
+<p>The DbEnv::log_stat method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::log_stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
<h3>Class</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_lg_bsize.html">DbEnv::set_lg_bsize</a>,
-<a href="../api_cxx/env_set_lg_max.html">DbEnv::set_lg_max</a>,
-<a href="../api_cxx/log_archive.html">DbEnv::log_archive</a>,
-<a href="../api_cxx/log_compare.html">DbEnv::log_compare</a>,
-<a href="../api_cxx/log_file.html">DbEnv::log_file</a>,
-<a href="../api_cxx/log_flush.html">DbEnv::log_flush</a>,
-<a href="../api_cxx/log_get.html">DbEnv::log_get</a>,
-<a href="../api_cxx/log_put.html">DbEnv::log_put</a>,
-<a href="../api_cxx/log_register.html">DbEnv::log_register</a>,
-<a href="../api_cxx/log_stat.html">DbEnv::log_stat</a>
-and
-<a href="../api_cxx/log_unregister.html">DbEnv::log_unregister</a>.
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/logc_class.html b/db/docs/api_cxx/logc_class.html
index 84ff7c772..b456ae521 100644
--- a/db/docs/api_cxx/logc_class.html
+++ b/db/docs/api_cxx/logc_class.html
@@ -1,21 +1,22 @@
-<!--Id: logc_class.so,v 1.5 2002/08/24 18:22:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_class.so,v 1.7 2003/09/25 15:27:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLogc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbLogc</h1>
+<h3>DbLogc</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,20 +25,22 @@
<p>
class DbLogc { ... };
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbLogc</h3>
<p>The DbLogc object is the handle for a cursor into the log files,
supporting sequential access to the records stored in log files. The
handle is not free-threaded. Once the <a href="../api_cxx/logc_close.html">DbLogc::close</a> method is called,
the handle may not be accessed again, regardless of that method's
-return.
-<h1>Class</h1>
+return.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, DbLogc, <a href="../api_cxx/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/logc_close.html b/db/docs/api_cxx/logc_close.html
index c2f831f3e..14d245869 100644
--- a/db/docs/api_cxx/logc_close.html
+++ b/db/docs/api_cxx/logc_close.html
@@ -1,21 +1,22 @@
-<!--Id: logc_close.so,v 10.6 2002/08/18 21:16:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_close.so,v 10.12 2003/10/31 17:25:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLogc::close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbLogc::close</h1>
+<h3>DbLogc::close</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,32 +26,40 @@
int
DbLogc::close(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbLogc::close</h3>
<p>The DbLogc::close method discards the log cursor. After DbLogc::close
has been called, regardless of its return, the cursor handle may not be
-used again.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbLogc::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbLogc::close method may fail and throw an exception or return a non-zero error for the following conditions:
+used again.</p>
+<p>The DbLogc::close method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DbLogc::close method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
+<p><dt>EINVAL<dd>If the cursor was previously closed; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbLogc::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLogc::close method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/logc_get.html b/db/docs/api_cxx/logc_get.html
index 12f402210..719072f67 100644
--- a/db/docs/api_cxx/logc_get.html
+++ b/db/docs/api_cxx/logc_get.html
@@ -1,21 +1,22 @@
-<!--Id: logc_get.so,v 10.37 2002/08/18 21:16:44 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logc_get.so,v 10.47 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLogc::get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbLogc::get</h1>
+<h3>DbLogc::get</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,72 +26,95 @@
int
DbLogc::get(DbLsn *lsn, Dbt *data, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbLogc::get method retrieve records from the log according to the
-<b>lsn</b> and <b>flags</b> arguments.
-<p>The data field of the <b>data</b> structure is set to the record
+<hr size=1 noshade>
+<h3>Description: DbLogc::get</h3>
+<p>The DbLogc::get method returns records from the log.</p>
+<p>Unless otherwise specified, the DbLogc::get method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>data</b><dd>
+The data field of the <b>data</b> structure is set to the record
retrieved, and the size field indicates the number of bytes in the
record. See <a href="../api_cxx/dbt_class.html">Dbt</a> for a description of other fields in the
<b>data</b> structure. The <a href="../api_cxx/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
<a href="../api_cxx/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> and <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags may be specified
for any <a href="../api_cxx/dbt_class.html">Dbt</a> used for data retrieval.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
+<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the log record to which the log currently refers.
<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>The first record from any of the log files found in the log directory
-is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the
+is returned in the <b>data</b> parameter.
+The <b>lsn</b> parameter is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the
record returned.
<p>
-If the log is empty, the DbLogc::get method will return DB_NOTFOUND.
-<p><dt><a name="DB_LAST">DB_LAST</a><dd>The last record in the log is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the
+The DbLogc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_FIRST is set and the log is empty.
+</p>
+<p><dt><a name="DB_LAST">DB_LAST</a><dd>The last record in the log is returned in the <b>data</b> parameter.
+The <b>lsn</b> parameter is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the
record returned.
<p>
-If the log is empty, the DbLogc::get method will return DB_NOTFOUND.
-<p><dt><a name="DB_NEXT">DB_NEXT</a>, <a name="DB_PREV">DB_PREV</a><dd>The current log position is advanced to the next (previous) record in
-the log, and that record is returned in the <b>data</b> argument. The
-<b>lsn</b> argument is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the record
+The DbLogc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_LAST is set and the log is empty.
+</p>
+<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>The current log position is advanced to the next record in the log, and
+that record is returned in the <b>data</b> parameter. The <b>lsn</b>
+parameter is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the record returned.
+<p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET,
+DB_NEXT, or DB_PREV, DbLogc::get will return the first record in
+the log.</p>
+<p>
+The DbLogc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_NEXT is set and the last log record has already been
+returned or the log is empty.
+</p>
+<p><dt><a name="DB_PREV">DB_PREV</a><dd>The current log position is advanced to the previous record in the log,
+and that record is returned in the <b>data</b> parameter. The
+<b>lsn</b> parameter is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> of the record
returned.
<p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET,
-DB_NEXT, or DB_PREV, DbLogc::get will return the first (last) record
-in the log.
-If the last (first) log record has already been returned or the log is
-empty, the DbLogc::get method will return DB_NOTFOUND.
-If the log was opened with the DB_THREAD flag set, calls to
-DbLogc::get with the DB_NEXT (DB_PREV) flag set, the DbLogc::get method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p><dt><a name="DB_CURRENT">DB_CURRENT</a><dd>Return the log record to which the log currently refers.
-If the log cursor has not been initialized via DB_FIRST, DB_LAST,
-DB_SET, DB_NEXT, or DB_PREV, or if the log was opened with the DB_THREAD
-flag set, the DbLogc::get method either returns EINVAL or throws an exception that encapsulates EINVAL.
-<p><dt><a name="DB_SET">DB_SET</a><dd>Retrieve the record specified by the <b>lsn</b> argument.
-If the specified <a href="../api_cxx/lsn_class.html">DbLsn</a> is invalid (for example, it does not
-appear in the log), the DbLogc::get method either returns EINVAL or throws an exception that encapsulates EINVAL.
-</dl>
+DB_NEXT, or DB_PREV, DbLogc::get will return the last record in the
+log.</p>
<p>
-Otherwise, the DbLogc::get method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbLogc::get method may fail and throw an exception or return a non-zero error for the following conditions:
+The DbLogc::get method will return <a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a> if DB_PREV is set and the first log record has already been
+returned or the log is empty.
+</p>
+<p><dt><a name="DB_SET">DB_SET</a><dd>Retrieve the record specified by the <b>lsn</b> parameter.
+</dl>
+<p><dt><b>lsn</b><dd>
+When the <b>flag</b> parameter is set to DB_CURRENT,
+DB_FIRST, DB_LAST, DB_NEXT or DB_PREV,
+the <b>lsn</b> parameter is overwritten with the <a href="../api_cxx/lsn_class.html">DbLsn</a> value
+of the record retrieved. When <b>flag</b> is set to DB_SET,
+the <b>lsn</b> parameter is the <a href="../api_cxx/lsn_class.html">DbLsn</a> value of the record to
+be retrieved.
+</dl>
+<h3>Errors</h3>
+<p>The DbLogc::get method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_CURRENT flag was set and the log pointer had not yet been
-initialized.
-<p>The DB_SET flag was set and the specified log sequence number does not
-exist.
+<p><dt>EINVAL<dd>If the DB_CURRENT flag was set and the log cursor has not yet
+been initialized;
+the DB_CURRENT, DB_NEXT, or DB_PREV flags were
+set and the log was opened with the DB_THREAD flag set;
+the DB_SET flag was set and the specified log sequence number
+does not appear in the log; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbLogc::get method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLogc::get method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, <a href="../api_cxx/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/lsn_class.html b/db/docs/api_cxx/lsn_class.html
index db4d56567..d5b25e0e2 100644
--- a/db/docs/api_cxx/lsn_class.html
+++ b/db/docs/api_cxx/lsn_class.html
@@ -1,38 +1,45 @@
-<!--$Id: lsn_class.so,v 10.11 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lsn_class.so,v 10.20 2003/11/08 19:17:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbLsn</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbLsn</h1>
+<h3>DbLsn</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-class DbLsn { ... };
+class DbLsn : public DB_LSN { ... };
</pre></h3>
-<h1>Description</h1>
-<p>A DbLsn is a <b>log sequence number</b> that is fully
-encapsulated. The class itself has no methods, other than a default
-constructor, so there is no way for the user to manipulate its data
-directly.
-Methods always take a pointer to a DbLsn as an argument.
+<hr size=1 noshade>
+<h3>Description: DbLsn</h3>
+<p>The DbLsn object is a <b>log sequence number</b> which
+specifies a unique location in a log file. A DbLsn consists of
+two unsigned 32-bit integers -- one specifies the log file number, and
+the other specifies an offset in the log file.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/logc_class.html">DbLogc</a>, DbLsn
+<h3>See Also</h3>
+<a href="../api_cxx/log_list.html">Logging Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_class.html b/db/docs/api_cxx/memp_class.html
index 54b2c18a6..9f0b78fc3 100644
--- a/db/docs/api_cxx/memp_class.html
+++ b/db/docs/api_cxx/memp_class.html
@@ -1,21 +1,22 @@
-<!--Id: memp_class.so,v 10.14 2002/08/24 18:23:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_class.so,v 10.17 2003/10/31 17:25:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMemoryException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMemoryException</h1>
+<h3>DbMemoryException</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -27,23 +28,24 @@ public:
Dbt *get_dbt() const;
};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbMemoryException class and how
-it is used by the various Db* classes.
+<hr size=1 noshade>
+<h3>Description: DbMemoryException</h3>
+<p>This information describes the DbMemoryException class and how
+it is used by the various Db* classes.</p>
<p>A DbMemoryException is thrown when there is insufficient memory
to complete an operation, and there is the possibility of recovering.
An example is during a <a href="../api_cxx/db_get.html">Db::get</a> or <a href="../api_cxx/dbc_get.html">Dbc::get</a> operation with
-the <a href="../api_cxx/dbt_class.html">Dbt</a> flags set to <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>.
-<p>The <b>get_dbt</b> method returns the <a href="../api_cxx/dbt_class.html">Dbt</a> that has insufficient
-memory to complete the operation, causing the DbMemoryException
-to be thrown.
+the <a href="../api_cxx/dbt_class.html">Dbt</a> flags set to <a href="../api_cxx/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>.</p>
+<p>The <b>get_dbt</b> method returns the
+<a href="../api_cxx/dbt_class.html">Dbt</a> with insufficient memory to complete the operation, causing
+the DbMemoryException to be thrown.
The <a href="../api_cxx/dbt_class.html">Dbt</a> pointer may or may not refer to valid memory, depending
on whether the <a href="../api_cxx/dbt_class.html">Dbt</a> used in the call to the failed Berkeley DB method
-is still in scope and has not been deleted.
+is still in scope and has not been deleted.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fclose.html b/db/docs/api_cxx/memp_fclose.html
index 0906388e3..2e1cec107 100644
--- a/db/docs/api_cxx/memp_fclose.html
+++ b/db/docs/api_cxx/memp_fclose.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fclose.so,v 10.20 2000/06/13 13:55:49 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fclose.so,v 10.32 2003/09/25 15:27:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::close</h1>
+<h3>DbMpoolFile::close</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,44 +24,37 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbMpoolFile::close();
+DbMpoolFile::close(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::close</h3>
<p>The DbMpoolFile::close method closes the source file indicated by the
-<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> object. Calling DbMpoolFile::close does not imply
-a call to <a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>, i.e. no pages are written to the source
-file as as a result of calling DbMpoolFile::close.
-<p>In addition, if the <b>file</b> argument to <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> was NULL,
-any underlying files created for this <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> will be removed.
-<p>Once DbMpoolFile::close has been called, regardless of its return, the
-<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle may not be accessed again.
-<p>The DbMpoolFile::close method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::close method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::close method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> object. Calling DbMpoolFile::close does not imply a call
+to <a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>; that is, no pages are written to the source file
+as as a result of calling DbMpoolFile::close.</p>
+<p>If the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> was temporary, any underlying files created
+for this <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> will be removed.</p>
+<p>After DbMpoolFile::close has been called, regardless of its return, the
+<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle may not be accessed again.</p>
+<p>The DbMpoolFile::close method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fcreate.html b/db/docs/api_cxx/memp_fcreate.html
index 6c177b521..927d31af3 100644
--- a/db/docs/api_cxx/memp_fcreate.html
+++ b/db/docs/api_cxx/memp_fcreate.html
@@ -1,21 +1,22 @@
-<!--Id: memp_fcreate.so,v 10.8 2002/08/28 20:25:53 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fcreate.so,v 10.11 2003/09/25 15:27:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::memp_fcreate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::memp_fcreate</h1>
+<h3>DbEnv::memp_fcreate</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,28 +26,31 @@
int
DbEnv::memp_fcreate(DbMpoolFile **dbmfp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::memp_fcreate</h3>
<p>The DbEnv::memp_fcreate method creates a <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> structure that
is the handle for a Berkeley DB shared memory buffer pool file. A pointer to
this structure is returned in the memory to which <b>dbmfp</b> refers.
-Calling the <a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a> method will discard the returned handle.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbEnv::memp_fcreate method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::memp_fcreate method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::memp_fcreate method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+Calling the <a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a> method will discard the returned handle.</p>
+<p>The DbEnv::memp_fcreate method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fget.html b/db/docs/api_cxx/memp_fget.html
index c8067603c..aa8b28626 100644
--- a/db/docs/api_cxx/memp_fget.html
+++ b/db/docs/api_cxx/memp_fget.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fget.so,v 10.23 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fget.so,v 10.42 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::get</h1>
+<h3>DbMpoolFile::get</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,78 +26,86 @@
int
DbMpoolFile::get(db_pgno_t *pgnoaddr, u_int32_t flags, void **pagep);
</pre></h3>
-<h1>Description</h1>
-<p>The DbMpoolFile::get method copies a pointer to the page with the page
-number specified by <b>pgnoaddr</b>, from the source file in the
-<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>, into the memory location referenced by <b>pagep</b>.
-If the page does not exist or cannot be retrieved, DbMpoolFile::get will
-fail.
-<p><b>Page numbers begin at 0, i.e., the first page in the file is page number
-0, not page number 1.</b>
-<p>The returned page is <b>size_t</b> type aligned.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get</h3>
+<p>The DbMpoolFile::get method returns pages from the cache.</p>
+<p>All pages returned by DbMpoolFile::get will be retained (that is,
+<i>pinned</i>), in the pool until a subsequent call to
+<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>.</p>
+<p>The returned page is <b>size_t</b> type aligned.</p>
+<p>Fully or partially created pages have all their bytes set to a nul byte,
+unless the <a href="../api_cxx/memp_set_clear_len.html">DbMpoolFile::set_clear_len</a> method was called to specify other
+behavior before the file was opened.</p>
+<a name="3"><!--meow--></a>
+<p>
+The DbMpoolFile::get method
+will either return DB_PAGE_NOTFOUND or
+throw an exception that encapsulates DB_PAGE_NOTFOUND if the requested page does not exist and DB_MPOOL_CREATE was
+not set.
+Unless otherwise specified, the DbMpoolFile::get method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_MPOOL_CREATE">DB_MPOOL_CREATE</a><dd>If the specified page does not exist, create it. In this case, the
<a href="memp_register.html#pgin">pgin</a> method, if specified, is
called.
-<p><dt><a name="DB_MPOOL_LAST">DB_MPOOL_LAST</a><dd>Return the last page of the source file and copy its page number
-to the location referenced by <b>pgnoaddr</b>.
-<p><dt><a name="DB_MPOOL_NEW">DB_MPOOL_NEW</a><dd>Create a new page in the file and copy its page number to the location
-referenced by <b>pgnoaddr</b>. In this case, the
+<p><dt><a name="DB_MPOOL_LAST">DB_MPOOL_LAST</a><dd>Return the last page of the source file, and copy its page number into
+the memory location to which <b>pgnoaddr</b> refers.
+<p><dt><a name="DB_MPOOL_NEW">DB_MPOOL_NEW</a><dd>Create a new page in the file, and copy its page number into the memory
+location to which <b>pgnoaddr</b> refers. In this case, the
<a href="memp_register.html#pgin">pgin</a> method, if specified, is
<b>not</b> called.
</dl>
-<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST and
-DB_MPOOL_NEW flags are mutually exclusive.
-<p>Created pages have all their bytes set to 0, unless otherwise specified
-when the file was opened.
-<p>All pages returned by DbMpoolFile::get will be retained (i.e.
-<i>pinned</i>), in the pool until a subsequent call to
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>.
-<p>The DbMpoolFile::get method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::get method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen unless
-there's a bug in the application.)
-</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_MPOOL_NEW flag was set and the source file was not opened for writing.
-<p>More than one of DB_MPOOL_CREATE, DB_MPOOL_LAST and DB_MPOOL_NEW was set.
+<p>The DB_MPOOL_CREATE, DB_MPOOL_LAST, and
+DB_MPOOL_NEW flags are mutually exclusive.</p>
+<p><dt><b>pagep</b><dd>
+The <b>pagep</b> parameter references memory into which
+a pointer to the returned page is copied.
+<p><dt><b>pgnoaddr</b><dd>
+If the <b>flags</b> parameter is set to DB_MPOOL_LAST or
+DB_MPOOL_NEW, the page number of the created page is copied
+into the memory location to which the <b>pgnoaddr</b> parameter
+refers. Otherwise, the <b>pgnoaddr</b> parameter is the page to
+create or retrieve.
+<p><b>Page numbers begin at 0; that is, the first page in the file is page
+number 0, not page number 1.</b></p>
</dl>
+<h3>Errors</h3>
+<p>The DbMpoolFile::get method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EIO<dd>The requested page does not exist and DB_MPOOL_CREATE was not set.
+<p><dt>EAGAIN<dd>The page reference count has overflowed. (This should never happen
+unless there is a bug in the application.)
</dl>
<p><dl compact>
-<p><dt>ENOMEM<dd>The cache is full and no more pages will fit in the pool.
+<p><dt>EINVAL<dd>If the DB_MPOOL_NEW flag was set, and the source file was not
+opened for writing;
+more than one of DB_MPOOL_CREATE, DB_MPOOL_LAST, and
+DB_MPOOL_NEW was set; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbMpoolFile::get method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::get method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<p>If the cache is full, and no more pages will fit in the pool, the DbMpoolFile::get method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fopen.html b/db/docs/api_cxx/memp_fopen.html
index c993ee6f1..55d1b879a 100644
--- a/db/docs/api_cxx/memp_fopen.html
+++ b/db/docs/api_cxx/memp_fopen.html
@@ -1,160 +1,106 @@
-<!--$Id: memp_fopen.so,v 10.28 2000/12/18 21:05:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fopen.so,v 10.49 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::open</h1>
+<h3>DbMpoolFile::open</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-static int
-DbMpoolFile::open(DbEnv *env, const char *file, u_int32_t flags, int mode,
- size_t pagesize, DB_MPOOL_FINFO *finfop, DbMpoolFile **mpf);
+int
+DbMpoolFile::open(const char *file, u_int32_t flags, int mode, size_t pagesize);
</pre></h3>
-<h1>Description</h1>
-<p>The DbMpoolFile::open method opens a file in the pool specified by the
-<a href="../api_cxx/dbenv_class.html">DbEnv</a> <b>env</b>, copying the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> pointer
-representing it into the memory location referenced by <b>mpf</b>.
-<p>The <b>file</b> argument is the name of the file to be opened.
-If <b>file</b> is NULL, a private file is created that cannot be
-shared with any other process (although it may be shared with
-other threads).
-<p>The <b>flags</b> and <b>mode</b> arguments specify how files will be opened
-and/or created if they do not already exist.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::open</h3>
+<p>The DbMpoolFile::open method opens a file in the shared memory buffer pool.</p>
+<p>The DbMpoolFile::open method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>file</b><dd>
+The <b>file</b> parameter is the name of the file to be opened. If
+<b>file</b> is NULL, a private temporary file is created that
+cannot be shared with any other process (although it may be shared with
+other threads of control in the same process).
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
<p><dt><a name="DB_CREATE">DB_CREATE</a><dd>Create any underlying files, as necessary. If the files do not already
-exist and the DB_CREATE flag is not specified, the call will fail.
+exist and the DB_CREATE flag is not specified, the call will
+fail.
+<a name="3"><!--meow--></a>
+<p><dt><a name="DB_DIRECT">DB_DIRECT</a><dd>If set and supported by the system, turn off system buffering of the
+file to avoid double caching.
<p><dt><a name="DB_NOMMAP">DB_NOMMAP</a><dd>Always copy this file into the local cache instead of potentially mapping
it into process memory (see the description of the
<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a> method for further information).
+<p><dt><a name="DB_ODDFILESIZE">DB_ODDFILESIZE</a><dd>Attempts to open files which are not a multiple of the page size in
+length will fail, by default. If the DB_ODDFILESIZE flag is
+set, any partial page at the end of the file will be ignored and the
+open will proceed.
<p><dt><a name="DB_RDONLY">DB_RDONLY</a><dd>Open any underlying files for reading only. Any attempt to write the file
using the pool functions will fail, regardless of the actual permissions
of the file.
</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by function DbMpoolFile::open
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>The <b>pagesize</b> argument is the size, in bytes, of the unit of transfer
-between the application and the pool, although it is not necessarily the
-unit of transfer between the pool and the source file.
-<p>Files opened in the pool may be further configured based on the
-<b>finfop</b> argument to DbMpoolFile::open (which is a pointer to a
-structure of type DB_MPOOL_FINFO). No references to the <b>finfop</b>
-structure are maintained by Berkeley DB, so it may be discarded when the
-DbMpoolFile::open function returns. In order to ensure compatibility
-with future releases of Berkeley DB, all fields of the DB_MPOOL_FINFO structure
-that are not explicitly set should be initialized to 0 before the first
-time the structure is used. Do this by declaring the structure external
-or static, or by calling the C library routine <b>bzero</b>(3) or
-<b>memset</b>(3).
-<p>The fields of the DB_MPOOL_FINFO structure used by DbMpoolFile::open are
-described below. If <b>finfop</b> is NULL or any of its fields are
-set to their default value, defaults appropriate for the system are used.
-<p><dl compact>
-<p><dt>int <a name="ftype">ftype</a>;<dd>The <b>ftype</b> field should be the same as a <b>ftype</b> argument
-previously specified to the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> function, unless no
-input or output processing of the file's pages are necessary, in which
-case it should be 0. (See the description of the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>
-function for more information.)
-<p><dt>DBT *<a name="pgcookie">pgcookie</a>;<dd>The <b>pgcookie</b> field contains the byte string that is passed to the
-<b>pgin</b> and <b>pgout</b> functions for this file, if any. If no
-<b>pgin</b> or <b>pgout</b> functions are specified, the
-<b>pgcookie</b> field should be NULL. (See the description of the
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> function for more information.)
-<p><dt>u_int8_t *<a name="fileid">fileid</a>;<dd>The <b>fileid</b> field is a unique identifier for the file. If the
-<b>fileid</b> field is non-NULL, it must reference a DB_FILE_ID_LEN
-length array of bytes that will be used to uniquely identify the file.
-<p>The mpool functions must be able to uniquely identify files in order that
-multiple processes wanting to share a file will correctly identify it in
-the pool.
-<p>On most UNIX/POSIX systems, the <b>fileid</b> field will not need to be
-set and the mpool functions will simply use the file's device and inode
-numbers for this purpose. On Windows systems, the mpool functions use
-the values returned by GetFileInformationByHandle() by default -- these
-values are known to be constant between processes and over reboot in the
-case of NTFS (where they are the NTFS MFT indexes).
-<p>On other filesystems, (e.g., FAT or NFS) these default values are not
-necessarily unique between processes or across system reboots.
-<b>Applications wanting to maintain a shared memory buffer pool
-between processes or across system reboots, where the pool contains pages
-from files stored on such filesystems, must specify a unique file
-identifier to the DbMpoolFile::open call and each process opening or
-registering the file must provide the same unique identifier.</b>
-<p>This should not be necessary for most applications. Specifically, it is
-not necessary if the memory pool is not shared between processes and is
-re-instantiated after each system reboot, or the application is using the
-Berkeley DB access methods instead of calling the pool functions explicitly, or
-the files in the memory pool are stored on filesystems where the default
-values as described above are invariant between process and across system
-reboots.
-<p><dt>int32_t <a name="lsn_offset">lsn_offset</a>;<dd>The <b>lsn_offset</b> field is the zero-based byte offset in the page of
-the page's log sequence number (LSN), or -1 if no LSN offset is specified.
-(See the description of the <a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> function for more
-information.)
-<p><dt>u_int32_t <a name="clear_len">clear_len</a>;<dd>The <b>clear_len</b> field is the number of initial bytes in a page
-that should be set to zero when the page is created as a result of the
-DB_MPOOL_CREATE or DB_MPOOL_NEW flags being specified to <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
-If <b>finfop</b> is NULL or <b>clear_len</b> is 0, the entire page is
-cleared.
+<p><dt><b>mode</b><dd>
+On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by
+DbMpoolFile::open are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation
+(see <b>umask</b>(2)). If <b>mode</b> is 0, DbMpoolFile::open will use a default
+mode of readable and writable by both owner and group. On Windows
+systems, the mode parameter is ignored. The group ownership of created
+files is based on the system and directory defaults, and is not further
+specified by Berkeley DB.
+<p><dt><b>pagesize</b><dd>
+The <b>pagesize</b> parameter is the size, in bytes, of the unit of
+transfer between the application and the cache, although it is not
+necessarily the unit of transfer between the cache and the underlying
+filesystem.
</dl>
-<p>The DbMpoolFile::open method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::open method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DbMpoolFile::open method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The file has already been entered into the pool, and the <b>pagesize</b>
+<p><dt>EINVAL<dd>If the file has already been entered into the pool, and the <b>pagesize</b>
value is not the same as when the file was entered into the pool, or the
-length of the file is not zero or a multiple of the <b>pagesize</b>.
-<p>The DB_RDONLY flag was specified for an in-memory pool.
+length of the file is not zero or a multiple of the <b>pagesize</b>;
+the DB_RDONLY flag was specified for an in-memory pool; or if an
+invalid flag value or parameter was specified.
</dl>
-<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of open files has been reached.
-</dl>
-<p>The DbMpoolFile::open method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::open method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<p>If the maximum number of open files has been reached, the DbMpoolFile::open method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fput.html b/db/docs/api_cxx/memp_fput.html
index f49c809c0..693006b95 100644
--- a/db/docs/api_cxx/memp_fput.html
+++ b/db/docs/api_cxx/memp_fput.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fput.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fput.so,v 10.30 2003/11/08 19:17:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::put</h1>
+<h3>DbMpoolFile::put</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,60 +26,60 @@
int
DbMpoolFile::put(void *pgaddr, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbMpoolFile::put method indicates that the page referenced by
-<b>pgaddr</b> can be evicted from the pool. The <b>pgaddr</b>
-argument must be an address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::put</h3>
+<p>The DbMpoolFile::put method returns a page to the cache.</p>
+<p>The DbMpoolFile::put method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgaddr</b><dd>
+The <b>pgaddr</b> parameter is the address of the page to be
+returned to the cache. The <b>pgaddr</b> parameter must be an
+address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (i.e., don't bother
+<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (that is, don't bother
writing the page back to the source file).
-<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file
-before being evicted from the pool.
-<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future,
-and should be discarded before other pages in the pool.
+<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file before
+being evicted from the pool.
+<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future, and should be
+discarded before other pages in the pool.
</dl>
<p>The DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags are
-mutually exclusive.
-<p>The DbMpoolFile::put method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::put method may fail and throw an exception or return a non-zero error for the following conditions:
+mutually exclusive.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DbMpoolFile::put method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EACCES<dd>The DB_MPOOL_DIRTY flag was set and the source file was not opened for
-writing.
+<p><dt>EACCES<dd>The <a href="../api_cxx/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a> flag was set and the source file was not
+opened for writing.
</dl>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <b>pgaddr</b> parameter does not reference a page returned by
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
-<p>More than one of DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags was set.
+<p><dt>EINVAL<dd>If the <b>pgaddr</b> parameter does not refer to a page returned by
+<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>;
+more than one of the <a href="../api_cxx/memp_fput.html#DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a> and <a href="../api_cxx/memp_fput.html#DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a>
+flags was set; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbMpoolFile::put method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::put method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fset.html b/db/docs/api_cxx/memp_fset.html
index 6e46d45c1..f6ffcce7d 100644
--- a/db/docs/api_cxx/memp_fset.html
+++ b/db/docs/api_cxx/memp_fset.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fset.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fset.so,v 10.29 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set</h1>
+<h3>DbMpoolFile::set</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,53 +26,53 @@
int
DbMpoolFile::set(void *pgaddr, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbMpoolFile::set method sets the flags associated with the page referenced
-by <b>pgaddr</b> without unpinning it from the pool. The <b>pgaddr</b>
-argument must be an address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set</h3>
+<p>The DbMpoolFile::set method sets the attributes of a cache page.</p>
+<p>The DbMpoolFile::set method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgaddr</b><dd>
+The <b>pgaddr</b> parameter is the address of the page for which
+attributes are to be set. he <b>pgaddr</b> parameter must be an
+address previously returned by <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
-<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (i.e., don't bother
+<p><dt><a name="DB_MPOOL_CLEAN">DB_MPOOL_CLEAN</a><dd>Clear any previously set modification information (that is, don't bother
writing the page back to the source file).
-<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file
-before being evicted from the pool.
-<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future,
-and should be discarded before other pages in the pool.
+<p><dt><a name="DB_MPOOL_DIRTY">DB_MPOOL_DIRTY</a><dd>The page has been modified and must be written to the source file before
+being evicted from the pool.
+<p><dt><a name="DB_MPOOL_DISCARD">DB_MPOOL_DISCARD</a><dd>The page is unlikely to be useful in the near future, and should be
+discarded before other pages in the pool.
</dl>
<p>The DB_MPOOL_CLEAN and DB_MPOOL_DIRTY flags are
-mutually exclusive.
-<p>The DbMpoolFile::set method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set method may fail and throw an exception or return a non-zero error for the following conditions:
+mutually exclusive.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DbMpoolFile::set method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbMpoolFile::set method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_fsync.html b/db/docs/api_cxx/memp_fsync.html
index a38366f9e..20f445c5d 100644
--- a/db/docs/api_cxx/memp_fsync.html
+++ b/db/docs/api_cxx/memp_fsync.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_fsync.so,v 10.22 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fsync.so,v 10.34 2003/09/25 15:27:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::sync</h1>
+<h3>DbMpoolFile::sync</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,40 +26,27 @@
int
DbMpoolFile::sync();
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::sync</h3>
<p>The DbMpoolFile::sync method writes all pages associated with the
-<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>, that were marked as modified using <a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>
-or <a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>, back to the source file. If any of the modified
-pages are also <i>pinned</i> (i.e., currently referenced by this or
-another process) DbMpoolFile::sync will ignore them.
-<p>The DbMpoolFile::sync method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages which were
-modified but which DbMpoolFile::sync was unable to write immediately.
-<h1>Errors</h1>
-<p>The DbMpoolFile::sync method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::sync method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>, which were marked as modified using
+<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a> or <a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>, back to the source file. If any
+of the modified pages are <i>pinned</i> (that is, currently in use),
+DbMpoolFile::sync will ignore them.</p>
+<p>The DbMpoolFile::sync method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_list.html b/db/docs/api_cxx/memp_list.html
index 0ba9457b9..e79a351ac 100644
--- a/db/docs/api_cxx/memp_list.html
+++ b/db/docs/api_cxx/memp_list.html
@@ -1,17 +1,17 @@
-<!--Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Memory Pools and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Memory Pools and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Memory Pools and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/env_set_cachesize.html">DbEnv::set_cachesize</a></td><td>Set the environment cache size</td></tr>
<tr><td><a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
@@ -32,6 +32,6 @@
<tr><td><a href="../api_cxx/memp_set_lsn_offset.html">DbMpoolFile::set_lsn_offset</a></td><td>Set file log-sequence-number offset</td></tr>
<tr><td><a href="../api_cxx/memp_set_pgcookie.html">DbMpoolFile::set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_register.html b/db/docs/api_cxx/memp_register.html
index 4c5f0748e..ca4a210d9 100644
--- a/db/docs/api_cxx/memp_register.html
+++ b/db/docs/api_cxx/memp_register.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_register.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_register.so,v 10.37 2003/11/19 03:47:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::memp_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::memp_register</h1>
+<h3>DbEnv::memp_register</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,81 +24,77 @@
#include &lt;db_cxx.h&gt;
<p>
extern "C" {
- typedef int (*pgin_fcn_type)(DB_ENV *dbenv,
- db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
- typedef int (*pgout_fcn_type)(DB_ENV *dbenv,
- db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
+ typedef int (*pgin_fcn_type)(DB_ENV *dbenv,
+ db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
+ typedef int (*pgout_fcn_type)(DB_ENV *dbenv,
+ db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
};
int
DbEnv::memp_register(int ftype,
- pgin_fcn_type pgin_fcn, pgout_fcn_type pgout_fcn);
+ pgin_fcn_type pgin_fcn, pgout_fcn_type pgout_fcn);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::memp_register</h3>
<p>The DbEnv::memp_register method registers page-in and page-out
-functions for files of type <b>ftype</b> in the specified pool.
+functions for files of type <b>ftype</b> in the specified pool.</p>
<p>If the <b>pgin_fcn</b> function is non-NULL, it is called each time
a page is read into the memory pool from a file of type <b>ftype</b>, or
a page is created for a file of type <b>ftype</b> (see the
-DB_MPOOL_CREATE flag for the <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a> method).
+DB_MPOOL_CREATE flag for the <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a> method).</p>
<p>If the <b>pgout_fcn</b> function is non-NULL, it is called each time
-a page is written to a file of type <b>ftype</b>.
-<p>Both the <b>pgin_fcn</b> and <b>pgout_fcn</b> functions are called with
-a reference to the current environment, the page number, a pointer to the
-page being read or written, and any argument <b>pgcookie</b> that was
-specified to the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> function when the file was opened.
-The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions should return 0 on
-success, and an applicable non-zero <b>errno</b> value on failure, in
-which case the shared memory pool interface routine (and, by extension,
-any Berkeley DB library function) calling it will also fail, returning that
-<b>errno</b> value.
+a page is written to a file of type <b>ftype</b>.</p>
<p>The purpose of the DbEnv::memp_register function is to support processing
-when pages are entered into, or flushed from, the pool. A file type must
-be specified to make it possible for unrelated threads or processes, that
-are sharing a pool, to evict each other's pages from the pool.
-Applications should call DbEnv::memp_register, during initialization,
-for each type of file requiring input or output processing that will be
-sharing the underlying pool. (No registry is necessary for the standard
-Berkeley DB access method types, as <a href="../api_cxx/db_open.html">Db::open</a> registers them
-separately.)
+when pages are entered into, or flushed from, the pool. For example, this
+functionality might be used to do byte-endian conversion as pages are read
+from, or written to, the underlying file.</p>
+<p>A file type must be specified to make it possible for unrelated threads
+or processes that are sharing a pool, to evict each other's pages from
+the pool. During initialization, applications should call
+DbEnv::memp_register for each type of file requiring input or output
+processing that will be sharing the underlying pool. (No registry is
+necessary for the standard Berkeley DB access method types because
+<a href="../api_cxx/db_open.html">Db::open</a> registers them separately.)</p>
<p>If a thread or process does not call DbEnv::memp_register for a file
type, it is impossible for it to evict pages for any file requiring input
or output processing from the pool. For this reason,
DbEnv::memp_register should always be called by each application sharing
a pool for each type of file included in the pool, regardless of whether
-or not the application itself uses files of that type.
-<p>There are no standard values for <b>ftype</b>, <b>pgin_fcn</b>,
-<b>pgout_fcn</b> and <b>pgcookie</b>, except that the <b>ftype</b>
-value for a file must be a non-zero positive number, as negative numbers
-are reserved for internal use by the Berkeley DB library. For this reason,
-applications sharing a pool must coordinate their values amongst
-themselves.
-<p>The DbEnv::memp_register method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::memp_register method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::memp_register method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+or not the application itself uses files of that type.</p>
+<p>The DbEnv::memp_register method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftype</b><dd>
+The <b>ftype</b> parameter specifies the type of file for which the
+page-in and page-out functions will be called.
+<p>The <b>ftype</b> value for a file must be a non-zero positive number
+less than 128 (0 and negative numbers are reserved for internal use by
+the Berkeley DB library).</p>
+<p><dt><b>pgin_fcn</b><dd>
+The page-in and page-out functions.
+<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions are called with a
+reference to the current database environment, the page number being
+read or written, a pointer to the page being read or written, and any
+parameter <b>pgcookie</b> that was specified to the
+<a href="../api_cxx/memp_set_pgcookie.html">DbMpoolFile::set_pgcookie</a> method.</p>
+<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions should return 0 on
+success, and a non-zero value on failure, in which case the shared Berkeley DB
+library function calling it will also fail, returning that non-zero
+value. The non-zero value should be selected from values outside of the
+Berkeley DB library namespace.</p>
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_clear_len.html b/db/docs/api_cxx/memp_set_clear_len.html
index abca761ab..89e820474 100644
--- a/db/docs/api_cxx/memp_set_clear_len.html
+++ b/db/docs/api_cxx/memp_set_clear_len.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_clear_len.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_clear_len.so,v 10.14 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set_clear_len</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set_clear_len</h1>
+<h3>DbMpoolFile::set_clear_len</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,37 +25,64 @@
<p>
int
DbMpoolFile::set(u_int32_t len);
+<p>
+int
+DbMpoolFile::get_clear_len(u_int32_t *lenp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_clear_len</h3>
+<a name="3"><!--meow--></a>
<p>The DbMpoolFile::set_clear_len method sets the number of initial bytes in a
page that should be set to nul when the page is created as a result of
the <a href="../api_cxx/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a> or <a href="../api_cxx/memp_fget.html#DB_MPOOL_NEW">DB_MPOOL_NEW</a> flags being
specified to <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>. If no value is specified, or <b>len</b>
-is 0, the entire page is cleared.
+is 0, the entire page is cleared.</p>
<p>The DbMpoolFile::set_clear_len method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.
-<p>The DbMpoolFile::set_clear_len interface may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>
-interface is called.
+operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.</p>
+<p>The DbMpoolFile::set_clear_len method may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> is called, the information specified to DbMpoolFile::set_clear_len
must be consistent with the existing file or an error will be
returned.
-<p>The DbMpoolFile::set_clear_len method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set_clear_len method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set_clear_len method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+<p>The DbMpoolFile::set_clear_len method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>len</b><dd>
+The <b>len</b> parameter is the number of initial bytes in a page that
+should be set to nul when the page is created. A value of 0 results in
+the entire page being set to nul bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_clear_len</h3>
+<p>The DbMpoolFile::get_clear_len method returns the bytes to be cleared.</p>
+<p>The DbMpoolFile::get_clear_len method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_clear_len method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lenp</b><dd>
+The DbMpoolFile::get_clear_len method returns the
+bytes to be cleared in <b>lenp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_fileid.html b/db/docs/api_cxx/memp_set_fileid.html
index 931dcc3e5..df08ba7db 100644
--- a/db/docs/api_cxx/memp_set_fileid.html
+++ b/db/docs/api_cxx/memp_set_fileid.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_fileid.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_fileid.so,v 10.11 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set_fileid</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set_fileid</h1>
+<h3>DbMpoolFile::set_fileid</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,54 +25,73 @@
<p>
int
DbMpoolFile::set(u_int8_t *fileid);
+<p>
+int DbMpoolFile::get_fileid(u_int8_t *fileid);
</pre></h3>
-<h1>Description</h1>
-<p>The shared memory buffer pool functions must be able to uniquely
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_fileid</h3>
+<a name="3"><!--meow--></a>
+<p>The DbMpoolFile::set_fileid method specifies a unique identifier for the file.
+(The shared memory buffer pool functions must be able to uniquely
identify files in order that multiple processes wanting to share a file
-will correctly identify it in the pool. The DbMpoolFile::set_fileid method
-specifies a unique identifier for the file. Unique file identifiers
-must be a DB_FILE_ID_LEN length array of bytes.
+will correctly identify it in the pool.)</p>
<p>On most UNIX/POSIX systems, the <b>fileid</b> field will not need to
be set, and the memory pool functions will use the file's device and
inode numbers for this purpose. On Windows systems, the memory pool
functions use the values returned by GetFileInformationByHandle() by
default -- these values are known to be constant between processes and
over reboot in the case of NTFS (in which they are the NTFS MFT
-indices).
+indices).</p>
<p>On other filesystems (for example, FAT or NFS), these default values
are not necessarily unique between processes or across system reboots.
<b>Applications wanting to maintain a shared memory buffer pool
between processes or across system reboots, in which the pool contains
pages from files stored on such filesystems, must specify a unique file
identifier using the DbMpoolFile::set_fileid method, and each process opening
-the file must provide the same unique identifier.</b>
+the file must provide the same unique identifier.</b></p>
<p>This call should not be necessary for most applications. Specifically,
it is not necessary if the memory pool is not shared between processes
and is reinstantiated after each system reboot, if the application is
using the Berkeley DB access methods instead of calling the pool functions
explicitly, or if the files in the memory pool are stored on filesystems
in which the default values as described previously are invariant
-between process and across system reboots.
+between process and across system reboots.</p>
<p>The DbMpoolFile::set_fileid method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.
-<p>The DbMpoolFile::set_fileid interface may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>
-interface is called.
-<p>The DbMpoolFile::set_fileid method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set_fileid method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set_fileid method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.</p>
+<p>The DbMpoolFile::set_fileid method may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> method is
+called.
+</p>
+<p>The DbMpoolFile::set_fileid method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>fileid</b><dd>
+The <b>fileid</b> parameter is the unique identifier for the file.
+Unique file identifiers must be a DB_FILE_ID_LEN length array of bytes.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_fileid</h3>
+<p>The DbMpoolFile::get_fileid method copies the file's identifier into the
+memory location referenced by <b>fileid</b>.</p>
+<p>The <a href="../api_cxx/env_set_data_dir.html">DbEnv::get_data_dirs</a> method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<p>The <a href="../api_cxx/env_set_data_dir.html">DbEnv::get_data_dirs</a> method may be called at any time during the life of the
+application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_flags.html b/db/docs/api_cxx/memp_set_flags.html
new file mode 100644
index 000000000..c316a2f5d
--- /dev/null
+++ b/db/docs/api_cxx/memp_set_flags.html
@@ -0,0 +1,88 @@
+<!--$Id: memp_set_flags.so,v 1.13 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbMpoolFile::set_flags</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DbMpoolFile::set_flags</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+int
+DbMpoolFile::set_flags(u_int32_t flags, bool onoff);
+<p>
+int
+DbMpoolFile::get_flags(u_int32_t *flagsp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_flags</h3>
+<a name="3"><!--meow--></a>
+<p>Configure a file in the cache.</p>
+<p>To set the flags for a particular database, call the
+DbMpoolFile::set_flags method using the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle stored in
+the <b>mpf</b> field of the <a href="../api_cxx/db_class.html">Db</a> handle.</p>
+<p>The DbMpoolFile::set_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set by bitwise inclusively <b>OR</b>'ing together one or more
+of the following values:
+<p><dl compact>
+<p><dt><a name="DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</a><dd>If set, no backing temporary file will be opened for in-memory
+databases, even if they expand to fill the entire cache. Attempts to
+create new file pages after the cache has been filled will fail.
+<p>The DB_MPOOL_NOFILE flag may be used to configure Berkeley DB at any time during
+the life of the application.</p>
+</dl>
+<p><dt><b>onoff</b><dd>
+If <b>onoff</b> is
+false,
+the specified flags are cleared; otherwise they are set.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_flags</h3>
+<p>The DbMpoolFile::get_flags method returns the flags.</p>
+<p>The DbMpoolFile::get_flags method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_flags method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flagsp</b><dd>
+The DbMpoolFile::get_flags method returns the
+flags in <b>flagsp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/memp_set_ftype.html b/db/docs/api_cxx/memp_set_ftype.html
index 6c7f41881..3a54f518e 100644
--- a/db/docs/api_cxx/memp_set_ftype.html
+++ b/db/docs/api_cxx/memp_set_ftype.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_ftype.so,v 10.6 2002/08/24 18:23:32 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_ftype.so,v 10.14 2003/11/08 19:17:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set_ftype</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set_ftype</h1>
+<h3>DbMpoolFile::set_ftype</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,37 +25,61 @@
<p>
int
DbMpoolFile::set(int ftype);
+<p>
+int
+DbMpoolFile::get_ftype(int *ftypep);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_ftype</h3>
+<a name="3"><!--meow--></a>
<p>The DbMpoolFile::set_ftype method specifies a file type for the purposes of
-input or output processing of the files pages as they are read from or
-written to, the backing filesystem store. The <b>ftype</b> argument
-must be the same as a <b>ftype</b> argument previously specified to
-the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> method. (See the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>
-documentation for more information.)
+input or output processing of the file's pages as they are read from or
+written to, the backing filesystem store.</p>
<p>The DbMpoolFile::set_ftype method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.
-<p>The DbMpoolFile::set_ftype interface may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>
-interface is called.
+operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.</p>
+<p>The DbMpoolFile::set_ftype method may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> is called, the information specified to DbMpoolFile::set_ftype
-will replace the existing information.
-<p>The DbMpoolFile::set_ftype method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set_ftype method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set_ftype method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+will replace the existing information.</p>
+<p>The DbMpoolFile::set_ftype method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftype</b><dd>
+The <b>ftype</b> parameter sets the file's type for the purposes of input
+and output processing. The <b>ftype</b> must be the same as a
+<b>ftype</b> parameter previously specified to the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> method.
+(See the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> documentation for more information.)
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_ftype</h3>
+<p>The DbMpoolFile::get_ftype method returns the file type.</p>
+<p>The DbMpoolFile::get_ftype method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_ftype method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>ftypep</b><dd>
+The DbMpoolFile::get_ftype method returns the
+file type in <b>ftypep</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_lsn_offset.html b/db/docs/api_cxx/memp_set_lsn_offset.html
index afe6320ac..77c6574b4 100644
--- a/db/docs/api_cxx/memp_set_lsn_offset.html
+++ b/db/docs/api_cxx/memp_set_lsn_offset.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_lsn_offset.so,v 10.6 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_lsn_offset.so,v 10.14 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set_lsn_offset</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set_lsn_offset</h1>
+<h3>DbMpoolFile::set_lsn_offset</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,36 +25,62 @@
<p>
int
DbMpoolFile::set(int32_t lsn_offset);
+<p>
+int
+DbMpoolFile::get_lsn_offset(int32_t *lsn_offsetp);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_lsn_offset</h3>
+<a name="3"><!--meow--></a>
<p>The DbMpoolFile::set_lsn_offset method specifies the zero-based byte offset
of a log sequence number (<a href="../api_cxx/lsn_class.html">DbLsn</a>) on the file's pages, for the
purposes of page-flushing as part of transaction checkpoint. (See the
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> documentation for more information.)
+<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> documentation for more information.)</p>
<p>The DbMpoolFile::set_lsn_offset method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.
-<p>The DbMpoolFile::set_lsn_offset interface may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>
-interface is called.
+operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.</p>
+<p>The DbMpoolFile::set_lsn_offset method may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> is called, the information specified to DbMpoolFile::set_lsn_offset
must be consistent with the existing file or an error will be
returned.
-<p>The DbMpoolFile::set_lsn_offset method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set_lsn_offset method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set_lsn_offset method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+<p>The DbMpoolFile::set_lsn_offset method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn_offset</b><dd>
+The <b>lsn_offset</b> parameter is the zero-based byte offset of the
+log sequence number on the file's pages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_lsn_offset</h3>
+<p>The DbMpoolFile::get_lsn_offset method returns the log sequence number byte offset.</p>
+<p>The DbMpoolFile::get_lsn_offset method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_lsn_offset method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn_offsetp</b><dd>
+The DbMpoolFile::get_lsn_offset method returns the
+log sequence number byte offset in <b>lsn_offsetp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_maxsize.html b/db/docs/api_cxx/memp_set_maxsize.html
new file mode 100644
index 000000000..0e448ce15
--- /dev/null
+++ b/db/docs/api_cxx/memp_set_maxsize.html
@@ -0,0 +1,88 @@
+<!--$Id: memp_set_maxsize.so,v 1.11 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbMpoolFile::set_maxsize</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DbMpoolFile::set_maxsize</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+int
+DbMpoolFile::set_maxsize(u_int32_t gbytes, u_int32_t bytes);
+<p>
+int
+DbMpoolFile::get_maxsize(u_int32_t *gbytesp, u_int32_t *bytesp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_maxsize</h3>
+<a name="3"><!--meow--></a>
+<p>Set the maximum size for the file to be
+<b>gbytes</b> gigabytes plus <b>bytes</b>.
+Attempts to allocate new pages in the file after the limit has been
+reached will fail.</p>
+<p>To set the maximum file size for a particular database, call the
+DbMpoolFile::set_maxsize method using the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle stored
+in the <b>mpf</b> field of the <a href="../api_cxx/db_class.html">Db</a> handle. Attempts to insert
+new items into the database after the limit has been reached may fail.</p>
+<p>The DbMpoolFile::set_maxsize method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::set_maxsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The maximum size of the file is set to <b>gbytes</b> gigabytes plus
+<b>bytes</b>.
+<p><dt><b>gbytes</b><dd>
+The maximum size of the file is set to <b>gbytes</b> gigabytes plus
+<b>bytes</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_maxsize</h3>
+<p>The DbMpoolFile::get_maxsize method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<p>The DbMpoolFile::get_maxsize method may be called at any time during the life of the
+application.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the maximum file size is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the maximum file size is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/memp_set_pgcookie.html b/db/docs/api_cxx/memp_set_pgcookie.html
index cd17a52a7..08c99e77f 100644
--- a/db/docs/api_cxx/memp_set_pgcookie.html
+++ b/db/docs/api_cxx/memp_set_pgcookie.html
@@ -1,21 +1,22 @@
-<!--Id: memp_set_pgcookie.so,v 10.6 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_set_pgcookie.so,v 10.14 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile::set_pgcookie</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile::set_pgcookie</h1>
+<h3>DbMpoolFile::set_pgcookie</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,36 +25,62 @@
<p>
int
DbMpoolFile::set(DBT *pgcookie);
+<p>
+int
+DbMpoolFile::get_pgcookie(DBT *dbt);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_pgcookie</h3>
+<a name="3"><!--meow--></a>
<p>The DbMpoolFile::set_pgcookie method specifies a byte string that is provided
to the functions registered to do input or output processing of the
file's pages as they are read from or written to, the backing filesystem
store. (See the <a href="../api_cxx/memp_register.html">DbEnv::memp_register</a> documentation for more
-information.)
+information.)</p>
<p>The DbMpoolFile::set_pgcookie method configures a file in the memory pool, not only
-operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.
-<p>The DbMpoolFile::set_pgcookie interface may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>
-interface is called.
+operations performed using the specified <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a> handle.</p>
+<p>The DbMpoolFile::set_pgcookie method may not be called after the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> method is
+called.
If the file is already open in the memory pool when
<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> is called, the information specified to DbMpoolFile::set_pgcookie
-will replace the existing information.
-<p>The DbMpoolFile::set_pgcookie method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbMpoolFile::set_pgcookie method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbMpoolFile::set_pgcookie method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+will replace the existing information.</p>
+<p>The DbMpoolFile::set_pgcookie method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>pgcookie</b><dd>
+The <b>pgcookie</b> parameter is a byte string provided to the
+functions registered to do input or output processing of the file's
+pages.
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_pgcookie</h3>
+<p>The DbMpoolFile::get_pgcookie method returns the byte string.</p>
+<p>The DbMpoolFile::get_pgcookie method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_pgcookie method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>dbt</b><dd>
+The DbMpoolFile::get_pgcookie method returns a reference to the
+byte string in <b>dbt</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_set_priority.html b/db/docs/api_cxx/memp_set_priority.html
new file mode 100644
index 000000000..a8f98416f
--- /dev/null
+++ b/db/docs/api_cxx/memp_set_priority.html
@@ -0,0 +1,91 @@
+<!--$Id: memp_set_priority.so,v 10.19 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: DbMpoolFile::set_priority</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3>DbMpoolFile::set_priority</h3>
+</td>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>
+#include &lt;db_cxx.h&gt;
+<p>
+int
+DbMpoolFile::set_priority(DB_CACHE_PRIORITY priority);
+<p>
+int
+DbMpoolFile::get_priority(DB_CACHE_PRIORITY *priorityp);
+</pre></h3>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::set_priority</h3>
+<a name="3"><!--meow--></a>
+<p>Set the cache priority for pages from the specified file. The priority
+of a page biases the replacement algorithm to be more or less likely to
+discard a page when space is needed in the buffer pool. The bias is
+temporary, and pages will eventually be discarded if they are not
+referenced again. The DbMpoolFile::set_priority method is only advisory, and
+does not guarantee pages will be treated in a specific way.</p>
+<p>To set the priority for the pages belonging to a particular database,
+call the DbMpoolFile::set_priority method using the <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+handle returned by calling the <a href="../api_cxx/db_get_mpf.html">Db::get_mpf</a> method.</p>
+<p>The DbMpoolFile::set_priority method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::set_priority method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>priority</b><dd>
+The <b>priority</b> parameter must be set to one of the following
+values:
+<p><dl compact>
+<p><dt><a name="DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</a><dd>The lowest priority: pages are the most likely to be discarded.
+<dt><a name="DB_PRIORITY_LOW">DB_PRIORITY_LOW</a><dd>The next lowest priority.
+<dt><a name="DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</a><dd>The default priority.
+<dt><a name="DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</a><dd>The next highest priority.
+<dt><a name="DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</a><dd>The highest priority: pages are the least likely to be discarded.
+</dl>
+</dl>
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile::get_priority</h3>
+<p>The DbMpoolFile::get_priority method returns the cache priority.</p>
+<p>The DbMpoolFile::get_priority method may be called at any time during the life of the
+application.</p>
+<p>The DbMpoolFile::get_priority method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>priorityp</b><dd>
+The DbMpoolFile::get_priority method returns the
+cache priority in <b>priorityp</b>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/db_class.html">Db</a>
+<h3>See Also</h3>
+<a href="../api_cxx/db_list.html">Databases and Related Methods</a>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_cxx/memp_stat.html b/db/docs/api_cxx/memp_stat.html
index 1c7f16a2a..e669a4f93 100644
--- a/db/docs/api_cxx/memp_stat.html
+++ b/db/docs/api_cxx/memp_stat.html
@@ -1,86 +1,99 @@
-<!--$Id: memp_stat.so,v 10.28 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_stat.so,v 10.53 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::memp_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::memp_stat</h1>
+<h3>DbEnv::memp_stat</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
DbEnv::memp_stat(DB_MPOOL_STAT **gsp,
- DB_MPOOL_FSTAT *(*fsp)[], db_malloc_fcn_type db_malloc);
+ DB_MPOOL_FSTAT *(*fsp)[], u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::memp_stat method method creates statistical structures and copies
-pointers to them into user-specified memory locations. The statistics
-include the number of files participating in the pool, the active pages
-in the pool, and information as to how effective the cache has been.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>If <b>gsp</b> is non-NULL, the global statistics for the memory pool
-<b>mp</b> are copied into the memory location it references. The
-global statistics are stored in a structure of type DB_MPOOL_STAT.
-<p>The following DB_MPOOL_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DbEnv::memp_stat</h3>
+<p>The DbEnv::memp_stat method returns the memory pool (that is, the buffer
+cache) subsystem statistics.</p>
+<p>The DbEnv::memp_stat method creates statistical structures of type DB_MPOOL_STAT
+and DB_MPOOL_FSTAT, and copy pointers to them into user-specified memory
+locations. The cache statistics are stored in the DB_MPOOL_STAT structure
+and the per-file cache statistics are stored the DB_MPOOL_FSTAT structure.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>If <b>gsp</b> is non-NULL, the global statistics for the cache
+<b>mp</b> are copied into the memory location to which it refers.
+The following DB_MPOOL_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>size_t st_gbytes;<dd>Gigabytes of cache (total cache size is st_gbytes + st_bytes)
-<dt>size_t st_bytes;<dd>Bytes of cache (total cache size is st_gbytes + st_bytes)
+<dt>size_t st_gbytes;<dd>Gigabytes of cache (total cache size is st_gbytes + st_bytes).
+<dt>size_t st_bytes;<dd>Bytes of cache (total cache size is st_gbytes + st_bytes).
<dt>u_int32_t st_ncache;<dd>Number of caches.
<dt>u_int32_t st_regsize;<dd>Individual cache size.
-<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
-<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
<dt>u_int32_t st_map;<dd>Requested pages mapped into the process' address space (there is no
-available information as to whether or not this request caused disk I/O,
+available information about whether or not this request caused disk I/O,
although examining the application page fault rate may be helpful).
+<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
+<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
<dt>u_int32_t st_page_create;<dd>Pages created in the cache.
<dt>u_int32_t st_page_in;<dd>Pages read into the cache.
<dt>u_int32_t st_page_out;<dd>Pages written from the cache to the backing file.
<dt>u_int32_t st_ro_evict;<dd>Clean pages forced from the cache.
<dt>u_int32_t st_rw_evict;<dd>Dirty pages forced from the cache.
+<dt>u_int32_t st_page_trickle;<dd>Dirty pages written using the <a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a> method.
+<dt>u_int32_t st_pages;<dd>Pages in the cache.
+<dt>u_int32_t st_page_clean;<dd>Clean pages currently in the cache.
+<dt>u_int32_t st_page_dirty;<dd>Dirty pages currently in the cache.
<dt>u_int32_t st_hash_buckets;<dd>Number of hash buckets in buffer hash table.
<dt>u_int32_t st_hash_searches;<dd>Total number of buffer hash table lookups.
<dt>u_int32_t st_hash_longest;<dd>The longest chain ever encountered in buffer hash table lookups.
<dt>u_int32_t st_hash_examined;<dd>Total number of hash elements traversed during hash table lookups.
-<dt>u_int32_t st_page_clean;<dd>Clean pages currently in the cache.
-<dt>u_int32_t st_page_dirty;<dd>Dirty pages currently in the cache.
-<dt>u_int32_t st_page_trickle;<dd>Dirty pages written using the <a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a> interface.
+<dt>u_int32_t st_hash_nowait;<dd>The number of times that a thread of control was able to obtain a hash
+bucket lock without waiting.
+<dt>u_int32_t st_hash_wait;<dd>The number of times that a thread of control was forced to wait before
+obtaining a hash bucket lock.
+<dt>u_int32_t st_hash_max_wait;<dd>The maximum number of times any hash bucket lock was waited for by a
+thread of control.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
+obtaining a region lock.
+<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain a region
+lock without waiting.
+<dt>u_int32_t st_alloc;<dd>Number of page allocations.
+<dt>u_int32_t st_alloc_buckets;<dd>Number of hash buckets checked during allocation.
+<dt>u_int32_t st_alloc_max_buckets;<dd>Maximum number of hash buckets checked during an allocation.
+<dt>u_int32_t st_alloc_pages;<dd>Number of pages checked during allocation.
+<dt>u_int32_t st_alloc_max_pages;<dd>Maximum number of pages checked during an allocation.
</dl>
-<p>If <b>fsp</b> is non-NULL, a pointer to a NULL-terminated variable
-length array of statistics for individual files, in the memory pool <b>mp</b>,
-is copied into the memory location it references. If no individual files
-currently exist in the memory pool, <b>fsp</b> will be set to NULL.
+<p>If <b>fsp</b> is non-NULL, a pointer to a NULL-terminated
+variable length array of statistics for individual files, in the cache
+<b>mp</b>, is copied into the memory location to which it refers. If
+no individual files currently exist in the cache, <b>fsp</b> will be
+set to NULL.</p>
<p>The per-file statistics are stored in structures of type DB_MPOOL_FSTAT.
The following DB_MPOOL_FSTAT fields will be filled in for each file in
-the pool, i.e., each element of the array:
+the cache; that is, each element of the array:</p>
<p><dl compact>
-<dt>char *file_name;<dd>The name of the file.
+<dt>char * file_name;<dd>The name of the file.
<dt>size_t st_pagesize;<dd>Page size in bytes.
<dt>u_int32_t st_cache_hit;<dd>Requested pages found in the cache.
<dt>u_int32_t st_cache_miss;<dd>Requested pages not found in the cache.
@@ -89,37 +102,40 @@ the pool, i.e., each element of the array:
<dt>u_int32_t st_page_in;<dd>Pages read into the cache.
<dt>u_int32_t st_page_out;<dd>Pages written from the cache to the backing file.
</dl>
-<p>The DbEnv::memp_stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::memp_stat method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Parameters</h3>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>fsp</b><dd>
+The <b>fsp</b> parameter references memory into which
+a pointer to the allocated per-file statistics structures is copied.
+<p><dt><b>gsp</b><dd>
+The <b>gsp</b> parameter references memory into which
+a pointer to the allocated global statistics structure is copied.
</dl>
-<p>The DbEnv::memp_stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::memp_stat method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<h3>Errors</h3>
+<p>The DbEnv::memp_stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_sync.html b/db/docs/api_cxx/memp_sync.html
index fe63f1dff..bd7c004af 100644
--- a/db/docs/api_cxx/memp_sync.html
+++ b/db/docs/api_cxx/memp_sync.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_sync.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 10.40 2003/11/08 19:17:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::memp_sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::memp_sync</h1>
+<h3>DbEnv::memp_sync</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,64 +26,54 @@
int
DbEnv::memp_sync(DbLsn *lsn);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::memp_sync method ensures that any modified pages in the pool with
-log sequence numbers less than the <b>lsn</b> argument are written to
-disk. If <b>lsn</b> is NULL all modified pages in the pool are
-flushed.
-<p>The primary purpose of the DbEnv::memp_sync function is to enable a
-transaction manager to ensure, as part of a checkpoint, that all pages
-modified by a certain time have been written to disk. Pages in the pool
-that cannot be written back to disk immediately (e.g., that are currently
-pinned) are written to disk as soon as it is possible to do so. The
-expected behavior of the Berkeley DB or other transaction subsystem is to call
-the DbEnv::memp_sync function and then, if the return indicates that some
-pages could not be written immediately, to wait briefly and retry again
-with the same log sequence number until the DbEnv::memp_sync function
-returns that all pages have been written.
+<hr size=1 noshade>
+<h3>Description: DbEnv::memp_sync</h3>
+<p>The DbEnv::memp_sync method flushes modified pages in the cache to their
+backing files.</p>
+<p>Pages in the pool that cannot be immediately written back to disk (for
+example, pages that are currently in use by another thread of control)
+are waited for and written to disk as soon as it is possible to do
+so.</p>
<p>To support the DbEnv::memp_sync functionality, it is necessary that the
pool functions know the location of the log sequence number on the page
for each file type. This location should be specified when the file is
-opened using the <a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a> function. It is not required that
-the log sequence number be aligned on the page in any way.
-<p>The DbEnv::memp_sync method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages which need to be
-written but which DbEnv::memp_sync was unable to write immediately.
-In addition, if DbEnv::memp_sync returns success, the value of
-<b>lsn</b> will be overwritten with the largest log sequence number
-from any page which was written by DbEnv::memp_sync to satisfy this
-request.
-<h1>Errors</h1>
-<p>The DbEnv::memp_sync method may fail and throw an exception or return a non-zero error for the following conditions:
+opened using the <a href="../api_cxx/memp_set_lsn_offset.html">DbMpoolFile::set_lsn_offset</a> method. It is not required that
+the log sequence number be aligned on the page in any way.</p>
+<p>The DbEnv::memp_sync method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>lsn</b><dd>
+The purpose of the <b>lsn</b> parameter is to enable a transaction
+manager to ensure, as part of a checkpoint, that all pages modified by
+a certain time have been written to disk.
+<p>All modified pages with a a log sequence number (<a href="../api_cxx/lsn_class.html">DbLsn</a>) less
+than the <b>lsn</b> parameter are written to disk. If <b>lsn</b> is
+NULL, all modified pages in the pool are written to disk.</p>
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::memp_sync method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DbEnv::memp_sync function was called without logging having been
-initialized in the environment.
+<p><dt>EINVAL<dd>If the DbEnv::memp_sync function was called without logging having been
+initialized in the environment; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::memp_sync method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::memp_sync method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/memp_trickle.html b/db/docs/api_cxx/memp_trickle.html
index 185bc5481..add205158 100644
--- a/db/docs/api_cxx/memp_trickle.html
+++ b/db/docs/api_cxx/memp_trickle.html
@@ -1,20 +1,22 @@
-<!--$Id: memp_trickle.so,v 10.21 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_trickle.so,v 10.35 2003/11/08 19:17:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::memp_trickle</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::memp_trickle</h1>
+<h3>DbEnv::memp_trickle</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,49 +24,25 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::memp_trickle(int pct, int *nwrotep);
+DbEnv::memp_trickle(int percent, int *nwrotep);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::memp_trickle method ensures that at least <b>pct</b> percent of
-the pages in the shared memory pool are clean by writing dirty pages to
-their backing files.
-If the <b>nwrotep</b> argument is non-NULL, the number of pages that
-were written to reach the correct percentage is returned in the memory
-location it references.
+<hr size=1 noshade>
+<h3>Description: DbEnv::memp_trickle</h3>
+<p>The DbEnv::memp_trickle method ensures that a specified percent of the pages
+in the shared memory pool are clean, by writing dirty pages to their
+backing files.</p>
<p>The purpose of the DbEnv::memp_trickle function is to enable a memory
pool manager to ensure that a page is always available for reading in new
-information without having to wait for a write.
-<p>The DbEnv::memp_trickle method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::memp_trickle method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv::memp_trickle method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::memp_trickle method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+information without having to wait for a write.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/mempfile_class.html b/db/docs/api_cxx/mempfile_class.html
index ce10974d1..929db7d94 100644
--- a/db/docs/api_cxx/mempfile_class.html
+++ b/db/docs/api_cxx/mempfile_class.html
@@ -1,62 +1,73 @@
-<!--$Id: mempfile_class.so,v 10.10 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: mempfile_class.so,v 10.23 2003/09/25 15:27:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbMpoolFile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbMpoolFile</h1>
+<h3>DbMpoolFile</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-class DbMpoolFile { ... };
+class DbMpoolFile {
+public:
+ DB_MPOOLFILE *DbMpoolFile::get_DB_MPOOLFILE();
+ const DB_MPOOLFILE *DbMpoolFile::get_const_DB_MPOOLFILE() const;
+ ...
+};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the DbMpoolFile
-class.
-<p>The <a href="../api_cxx/dbenv_class.html">DbEnv</a> memory pool methods and the DbMpoolFile class
-are the library interface that provide general-purpose, page-oriented
-buffer management of one or more files. While designed to work with the
-other Db classes, they are also useful for more general purposes.
-The memory pools are referred to in this document as simply <i>pools</i>.
-<p>Pools may be shared between processes. Pools are usually filled by pages
-from one or more files. Pages in the pool are replaced in LRU
+<hr size=1 noshade>
+<h3>Description: DbMpoolFile</h3>
+<p>The memory pool interfaces for the Berkeley DB database environment are
+methods of the <a href="../api_cxx/env_class.html">DbEnv</a> handle. The <a href="../api_cxx/env_class.html">DbEnv</a> memory pool
+methods and the DbMpoolFile class provide general-purpose,
+page-oriented buffer management of files. Although designed to work
+with the other <a href="../api_cxx/db_class.html">Db</a> classes, they are also useful for more general
+purposes. The memory pools are referred to in this document as simply
+<i>pools</i>.</p>
+<p>Pools may be shared between processes. Pools are usually filled by
+pages from one or more files. Pages in the pool are replaced in LRU
(least-recently-used) order, with each new page replacing the page that
has been unused the longest. Pages retrieved from the pool using
<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a> are <i>pinned</i> in the pool until they are
returned to the control of the buffer pool using the <a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>
-method.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_mp_mmapsize.html">DbEnv::set_mp_mmapsize</a>,
-<a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a>,
-<a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a>,
-<a href="../api_cxx/memp_fopen.html">DbMpoolFile::open</a>,
-<a href="../api_cxx/memp_fput.html">DbMpoolFile::put</a>,
-<a href="../api_cxx/memp_fset.html">DbMpoolFile::set</a>,
-<a href="../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>,
-<a href="../api_cxx/memp_register.html">DbEnv::memp_register</a>,
-<a href="../api_cxx/memp_stat.html">DbEnv::memp_stat</a>,
-<a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a>
-and
-<a href="../api_cxx/memp_trickle.html">DbEnv::memp_trickle</a>.
+method.</p>
+<p>The DbMpoolFile object is the handle for a file in the memory
+pool. The handle is not free-threaded. Once the <a href="../api_cxx/memp_fclose.html">DbMpoolFile::close</a> method
+is called, the handle may not be accessed again, regardless of that
+method's return.</p>
+<p>Each DbMpoolFile object has an associated DB_MPOOLFILE
+structure, which is used by the underlying implementation of Berkeley DB and
+its C-language API. The DbMpoolFile::get_DB_MPOOLFILE method returns a
+pointer to this struct. Given a const DbMpoolFile object,
+DbMpoolFile::get_const_DB_MPOOLFILE returns a const pointer to the same
+struct.</p>
+<p>These methods may be useful for Berkeley DB applications including both C
+and C++ language software. It should not be necessary to use these
+calls in a purely C++ application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, DbMpoolFile
+<h3>See Also</h3>
+<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/pindex.src b/db/docs/api_cxx/pindex.src
index cf4a58836..2246cc9cd 100644
--- a/db/docs/api_cxx/pindex.src
+++ b/db/docs/api_cxx/pindex.src
@@ -1,287 +1,496 @@
-__APIREL__/api_cxx/db_class.html#2 @Db
-__APIREL__/api_cxx/db_class.html#DB_CXX_NO_EXCEPTIONS Db@DB_CXX_NO_EXCEPTIONS
-__APIREL__/api_cxx/db_class.html#DB_XA_CREATE Db@DB_XA_CREATE
-__APIREL__/api_cxx/db_err.html#2 @DbEnv::err
-__APIREL__/api_cxx/db_set_errfile.html#2 @Db::set_errfile
-__APIREL__/api_cxx/db_set_malloc.html#2 @Db::set_malloc
-__APIREL__/api_cxx/db_set_paniccall.html#2 @Db::set_paniccall
-__APIREL__/api_cxx/db_set_realloc.html#2 @Db::set_realloc
-__APIREL__/api_cxx/dbc_class.html#2 @Dbc
-__APIREL__/api_cxx/dbenv_class.html#2 @DbEnv
-__APIREL__/api_cxx/dbenv_class.html#DB_CLIENT DbEnv@DB_CLIENT
-__APIREL__/api_cxx/dbenv_class.html#DB_CXX_NO_EXCEPTIONS DbEnv@DB_CXX_NO_EXCEPTIONS
-__APIREL__/api_cxx/dbt_class.html#2 @Dbt
-__APIREL__/api_cxx/dbt_class.html#3 @key/data pairs
-__APIREL__/api_cxx/dbt_class.html#data Dbt@data
-__APIREL__/api_cxx/dbt_class.html#DB_DBT_MALLOC Dbt@DB_DBT_MALLOC
-__APIREL__/api_cxx/dbt_class.html#DB_DBT_REALLOC Dbt@DB_DBT_REALLOC
-__APIREL__/api_cxx/dbt_class.html#DB_DBT_USERMEM Dbt@DB_DBT_USERMEM
-__APIREL__/api_cxx/dbt_class.html#DB_DBT_PARTIAL Dbt@DB_DBT_PARTIAL
-__APIREL__/api_cxx/dbt_class.html#4 retrieved key/data @permanence
-__APIREL__/api_cxx/dbt_class.html#5 retrieved @key/data permanence
-__APIREL__/api_cxx/dbt_class.html#6 data @alignment
-__APIREL__/api_cxx/dbt_class.html#7 logical @record number format
-__APIREL__/api_cxx/env_set_errfile.html#2 @DbEnv::set_errfile
-__APIREL__/api_cxx/env_set_error_stream.html#2 @DbEnv::set_error_stream
-__APIREL__/api_cxx/env_set_paniccall.html#2 @DbEnv::set_paniccall
-__APIREL__/api_cxx/except_class.html#2 @DbException
-__APIREL__/api_cxx/get_errno.html#2 @DbException::get_errno
-__APIREL__/api_cxx/lock_class.html#2 @DbLock
-__APIREL__/api_cxx/lsn_class.html#2 @DbLsn
-__APIREL__/api_cxx/mempfile_class.html#2 @DbMpoolFile
-__APIREL__/api_cxx/txn_class.html#2 @DbTxn
-__APIREL__/api_cxx/what.html#2 @DbException::what
-__APIREL__/api_cxx/db_close.html#2 @Db::close
-__APIREL__/api_cxx/db_close.html#DB_NOSYNC Db::close@DB_NOSYNC
-__APIREL__/api_cxx/db_close.html#3 Db::close @DB_INCOMPLETE
-__APIREL__/api_cxx/db_cursor.html#2 @Db::cursor
-__APIREL__/api_cxx/db_cursor.html#DB_WRITECURSOR Db::cursor@DB_WRITECURSOR
-__APIREL__/api_cxx/db_del.html#2 @Db::del
-__APIREL__/api_cxx/db_fd.html#2 @Db::fd
-__APIREL__/api_cxx/db_get.html#2 @Db::get
-__APIREL__/api_cxx/db_get.html#DB_CONSUME Db::get@DB_CONSUME
-__APIREL__/api_cxx/db_get.html#DB_CONSUME_WAIT Db::get@DB_CONSUME_WAIT
-__APIREL__/api_cxx/db_get.html#DB_GET_BOTH Db::get@DB_GET_BOTH
-__APIREL__/api_cxx/db_get.html#DB_SET_RECNO Db::get@DB_SET_RECNO
-__APIREL__/api_cxx/db_get.html#DB_RMW Db::get@DB_RMW
-__APIREL__/api_cxx/db_get_byteswapped.html#2 @Db::get_byteswapped
-__APIREL__/api_cxx/db_get_type.html#2 @Db::get_type
-__APIREL__/api_cxx/db_join.html#2 @Db::join
-__APIREL__/api_cxx/db_join.html#DB_JOIN_NOSORT Db::join@DB_JOIN_NOSORT
-__APIREL__/api_cxx/db_join.html#DB_JOIN_ITEM Db::join@DB_JOIN_ITEM
-__APIREL__/api_cxx/db_join.html#DB_RMW Db::join@DB_RMW
-__APIREL__/api_cxx/db_key_range.html#2 @Db::key_range
-__APIREL__/api_cxx/db_open.html#2 @Db::open
-__APIREL__/api_cxx/db_open.html#DB_CREATE Db::open@DB_CREATE
-__APIREL__/api_cxx/db_open.html#DB_EXCL Db::open@DB_EXCL
-__APIREL__/api_cxx/db_open.html#DB_NOMMAP Db::open@DB_NOMMAP
-__APIREL__/api_cxx/db_open.html#DB_RDONLY Db::open@DB_RDONLY
-__APIREL__/api_cxx/db_open.html#DB_THREAD Db::open@DB_THREAD
-__APIREL__/api_cxx/db_open.html#DB_TRUNCATE Db::open@DB_TRUNCATE
-__APIREL__/api_cxx/db_open.html#DB_OLD_VERSION Db::open@DB_OLD_VERSION
-__APIREL__/api_cxx/db_put.html#2 @Db::put
-__APIREL__/api_cxx/db_put.html#DB_APPEND Db::put@DB_APPEND
-__APIREL__/api_cxx/db_put.html#DB_NODUPDATA Db::put@DB_NODUPDATA
-__APIREL__/api_cxx/db_put.html#DB_NOOVERWRITE Db::put@DB_NOOVERWRITE
-__APIREL__/api_cxx/db_remove.html#2 @Db::remove
-__APIREL__/api_cxx/db_rename.html#2 @Db::rename
-__APIREL__/api_cxx/db_set_append_recno.html#2 @Db::set_append_recno
-__APIREL__/api_cxx/db_set_bt_compare.html#2 @Db::set_bt_compare
-__APIREL__/api_cxx/db_set_bt_minkey.html#2 @Db::set_bt_minkey
-__APIREL__/api_cxx/db_set_bt_prefix.html#2 @Db::set_bt_prefix
-__APIREL__/api_cxx/db_set_cachesize.html#2 @Db::set_cachesize
-__APIREL__/api_cxx/db_set_dup_compare.html#2 @Db::set_dup_compare
-__APIREL__/api_cxx/db_set_errcall.html#2 @Db::set_errcall
-__APIREL__/api_cxx/db_set_errpfx.html#2 @Db::set_errpfx
-__APIREL__/api_cxx/db_set_feedback.html#2 @Db::set_feedback
-__APIREL__/api_cxx/db_set_feedback.html#DB_UPGRADE Db::set_feedback@DB_UPGRADE
-__APIREL__/api_cxx/db_set_feedback.html#DB_VERIFY Db::set_feedback@DB_VERIFY
-__APIREL__/api_cxx/db_set_flags.html#2 @Db::set_flags
-__APIREL__/api_cxx/db_set_flags.html#DB_DUP Db::set_flags@DB_DUP
-__APIREL__/api_cxx/db_set_flags.html#DB_DUPSORT Db::set_flags@DB_DUPSORT
-__APIREL__/api_cxx/db_set_flags.html#DB_RECNUM Db::set_flags@DB_RECNUM
-__APIREL__/api_cxx/db_set_flags.html#DB_REVSPLITOFF Db::set_flags@DB_REVSPLITOFF
-__APIREL__/api_cxx/db_set_flags.html#DB_DUP Db::set_flags@DB_DUP
-__APIREL__/api_cxx/db_set_flags.html#DB_DUPSORT Db::set_flags@DB_DUPSORT
-__APIREL__/api_cxx/db_set_flags.html#DB_RENUMBER Db::set_flags@DB_RENUMBER
-__APIREL__/api_cxx/db_set_flags.html#DB_SNAPSHOT Db::set_flags@DB_SNAPSHOT
-__APIREL__/api_cxx/db_set_h_ffactor.html#2 @Db::set_h_ffactor
-__APIREL__/api_cxx/db_set_h_hash.html#2 @Db::set_h_hash
-__APIREL__/api_cxx/db_set_h_nelem.html#2 @Db::set_h_nelem
-__APIREL__/api_cxx/db_set_lorder.html#2 @Db::set_lorder
-__APIREL__/api_cxx/db_set_pagesize.html#2 @Db::set_pagesize
-__APIREL__/api_cxx/db_set_q_extentsize.html#2 @Db::set_q_extentsize
-__APIREL__/api_cxx/db_set_re_delim.html#2 @Db::set_re_delim
-__APIREL__/api_cxx/db_set_re_len.html#2 @Db::set_re_len
-__APIREL__/api_cxx/db_set_re_pad.html#2 @Db::set_re_pad
-__APIREL__/api_cxx/db_set_re_source.html#2 @Db::set_re_source
-__APIREL__/api_cxx/db_stat.html#2 @Db::stat
-__APIREL__/api_cxx/db_stat.html#DB_CACHED_COUNTS Db::stat@DB_CACHED_COUNTS
-__APIREL__/api_cxx/db_stat.html#DB_RECORDCOUNT Db::stat@DB_RECORDCOUNT
-__APIREL__/api_cxx/db_sync.html#2 @Db::sync
-__APIREL__/api_cxx/db_upgrade.html#2 @Db::upgrade
-__APIREL__/api_cxx/db_upgrade.html#DB_DUPSORT Db::upgrade@DB_DUPSORT
-__APIREL__/api_cxx/db_upgrade.html#DB_OLD_VERSION Db::upgrade@DB_OLD_VERSION
-__APIREL__/api_cxx/db_verify.html#2 @Db::verify
-__APIREL__/api_cxx/db_verify.html#DB_SALVAGE Db::verify@DB_SALVAGE
-__APIREL__/api_cxx/db_verify.html#DB_AGGRESSIVE Db::verify@DB_AGGRESSIVE
-__APIREL__/api_cxx/db_verify.html#DB_NOORDERCHK Db::verify@DB_NOORDERCHK
-__APIREL__/api_cxx/db_verify.html#DB_ORDERCHKONLY Db::verify@DB_ORDERCHKONLY
-__APIREL__/api_cxx/dbc_close.html#2 @Dbc::close
-__APIREL__/api_cxx/dbc_count.html#2 @Dbc::count
-__APIREL__/api_cxx/dbc_del.html#2 @Dbc::del
-__APIREL__/api_cxx/dbc_dup.html#2 @Dbc::dup
-__APIREL__/api_cxx/dbc_dup.html#DB_POSITION Dbc::dup@DB_POSITION
-__APIREL__/api_cxx/dbc_get.html#2 @Dbc::get
-__APIREL__/api_cxx/dbc_get.html#DB_CURRENT Dbc::get@DB_CURRENT
-__APIREL__/api_cxx/dbc_get.html#DB_FIRST Dbc::get@DB_FIRST
-__APIREL__/api_cxx/dbc_get.html#DB_LAST Dbc::get@DB_LAST
-__APIREL__/api_cxx/dbc_get.html#DB_GET_BOTH Dbc::get@DB_GET_BOTH
-__APIREL__/api_cxx/dbc_get.html#DB_GET_RECNO Dbc::get@DB_GET_RECNO
-__APIREL__/api_cxx/dbc_get.html#DB_JOIN_ITEM Dbc::get@DB_JOIN_ITEM
-__APIREL__/api_cxx/dbc_get.html#DB_NEXT Dbc::get@DB_NEXT
-__APIREL__/api_cxx/dbc_get.html#DB_PREV Dbc::get@DB_PREV
-__APIREL__/api_cxx/dbc_get.html#DB_NEXT_DUP Dbc::get@DB_NEXT_DUP
-__APIREL__/api_cxx/dbc_get.html#DB_NEXT_NODUP Dbc::get@DB_NEXT_NODUP
-__APIREL__/api_cxx/dbc_get.html#DB_PREV_NODUP Dbc::get@DB_PREV_NODUP
-__APIREL__/api_cxx/dbc_get.html#DB_SET Dbc::get@DB_SET
-__APIREL__/api_cxx/dbc_get.html#DB_SET_RANGE Dbc::get@DB_SET_RANGE
-__APIREL__/api_cxx/dbc_get.html#DB_SET_RECNO Dbc::get@DB_SET_RECNO
-__APIREL__/api_cxx/dbc_get.html#DB_RMW Dbc::get@DB_RMW
-__APIREL__/api_cxx/dbc_put.html#2 @Dbc::put
-__APIREL__/api_cxx/dbc_put.html#DB_AFTER Dbc::put@DB_AFTER
-__APIREL__/api_cxx/dbc_put.html#DB_BEFORE Dbc::put@DB_BEFORE
-__APIREL__/api_cxx/dbc_put.html#DB_CURRENT Dbc::put@DB_CURRENT
-__APIREL__/api_cxx/dbc_put.html#DB_KEYFIRST Dbc::put@DB_KEYFIRST
-__APIREL__/api_cxx/dbc_put.html#DB_KEYLAST Dbc::put@DB_KEYLAST
-__APIREL__/api_cxx/dbc_put.html#DB_NODUPDATA Dbc::put@DB_NODUPDATA
-__APIREL__/api_cxx/env_close.html#2 @DbEnv::close
-__APIREL__/api_cxx/env_open.html#2 @DbEnv::open
-__APIREL__/api_cxx/env_open.html#DB_JOINENV DbEnv::open@DB_JOINENV
-__APIREL__/api_cxx/env_open.html#DB_INIT_CDB DbEnv::open@DB_INIT_CDB
-__APIREL__/api_cxx/env_open.html#DB_INIT_LOCK DbEnv::open@DB_INIT_LOCK
-__APIREL__/api_cxx/env_open.html#DB_INIT_LOG DbEnv::open@DB_INIT_LOG
-__APIREL__/api_cxx/env_open.html#DB_INIT_MPOOL DbEnv::open@DB_INIT_MPOOL
-__APIREL__/api_cxx/env_open.html#DB_INIT_TXN DbEnv::open@DB_INIT_TXN
-__APIREL__/api_cxx/env_open.html#DB_RECOVER DbEnv::open@DB_RECOVER
-__APIREL__/api_cxx/env_open.html#DB_RECOVER_FATAL DbEnv::open@DB_RECOVER_FATAL
-__APIREL__/api_cxx/env_open.html#DB_USE_ENVIRON DbEnv::open@DB_USE_ENVIRON
-__APIREL__/api_cxx/env_open.html#DB_USE_ENVIRON_ROOT DbEnv::open@DB_USE_ENVIRON_ROOT
-__APIREL__/api_cxx/env_open.html#DB_CREATE DbEnv::open@DB_CREATE
-__APIREL__/api_cxx/env_open.html#DB_LOCKDOWN DbEnv::open@DB_LOCKDOWN
-__APIREL__/api_cxx/env_open.html#DB_PRIVATE DbEnv::open@DB_PRIVATE
-__APIREL__/api_cxx/env_open.html#DB_SYSTEM_MEM DbEnv::open@DB_SYSTEM_MEM
-__APIREL__/api_cxx/env_open.html#DB_THREAD DbEnv::open@DB_THREAD
-__APIREL__/api_cxx/env_remove.html#2 @DbEnv::remove
-__APIREL__/api_cxx/env_remove.html#DB_FORCE DbEnv::remove@DB_FORCE
-__APIREL__/api_cxx/env_remove.html#DB_USE_ENVIRON DbEnv::remove@DB_USE_ENVIRON
-__APIREL__/api_cxx/env_remove.html#DB_USE_ENVIRON_ROOT DbEnv::remove@DB_USE_ENVIRON_ROOT
-__APIREL__/api_cxx/env_set_cachesize.html#2 @DbEnv::set_cachesize
-__APIREL__/api_cxx/env_set_data_dir.html#2 @DbEnv::set_data_dir
-__APIREL__/api_cxx/env_set_errcall.html#2 @DbEnv::set_errcall
-__APIREL__/api_cxx/env_set_errpfx.html#2 @DbEnv::set_errpfx
-__APIREL__/api_cxx/env_set_feedback.html#2 @DbEnv::set_feedback
-__APIREL__/api_cxx/env_set_feedback.html#DB_RECOVER DbEnv::set_feedback@DB_RECOVER
-__APIREL__/api_cxx/env_set_flags.html#2 @DbEnv::set_flags
-__APIREL__/api_cxx/env_set_flags.html#DB_CDB_ALLDB DbEnv::set_flags@DB_CDB_ALLDB
-__APIREL__/api_cxx/env_set_flags.html#DB_NOMMAP DbEnv::set_flags@DB_NOMMAP
-__APIREL__/api_cxx/env_set_flags.html#DB_TXN_NOSYNC DbEnv::set_flags@DB_TXN_NOSYNC
-__APIREL__/api_cxx/env_set_lg_bsize.html#2 @DbEnv::set_lg_bsize
-__APIREL__/api_cxx/env_set_lg_dir.html#2 @DbEnv::set_lg_dir
-__APIREL__/api_cxx/env_set_lg_max.html#2 @DbEnv::set_lg_max
-__APIREL__/api_cxx/env_set_lk_conflicts.html#2 @DbEnv::set_lk_conflicts
-__APIREL__/api_cxx/env_set_lk_detect.html#2 @DbEnv::set_lk_detect
-__APIREL__/api_cxx/env_set_lk_detect.html#DB_LOCK_DEFAULT DbEnv::set_lk_detect@DB_LOCK_DEFAULT
-__APIREL__/api_cxx/env_set_lk_detect.html#DB_LOCK_OLDEST DbEnv::set_lk_detect@DB_LOCK_OLDEST
-__APIREL__/api_cxx/env_set_lk_detect.html#DB_LOCK_RANDOM DbEnv::set_lk_detect@DB_LOCK_RANDOM
-__APIREL__/api_cxx/env_set_lk_detect.html#DB_LOCK_YOUNGEST DbEnv::set_lk_detect@DB_LOCK_YOUNGEST
-__APIREL__/api_cxx/env_set_lk_max.html#2 @DbEnv::set_lk_max
-__APIREL__/api_cxx/env_set_lk_max_locks.html#2 @DbEnv::set_lk_max_locks
-__APIREL__/api_cxx/env_set_lk_max_lockers.html#2 @DbEnv::set_lk_max_lockers
-__APIREL__/api_cxx/env_set_lk_max_objects.html#2 @DbEnv::set_lk_max_objects
-__APIREL__/api_cxx/env_set_mp_mmapsize.html#2 @DbEnv::set_mp_mmapsize
-__APIREL__/api_cxx/env_set_mutexlocks.html#2 @DbEnv::set_mutexlocks
-__APIREL__/api_cxx/env_set_pageyield.html#2 @DbEnv::set_pageyield
-__APIREL__/api_cxx/env_set_panicstate.html#2 @DbEnv::set_panicstate
-__APIREL__/api_cxx/env_set_rec_init.html#2 @DbEnv::set_recovery_init
-__APIREL__/api_cxx/env_set_region_init.html#2 @DbEnv::set_region_init
-__APIREL__/api_cxx/env_set_server.html#2 @DbEnv::set_server
-__APIREL__/api_cxx/env_set_server.html#DB_NOSERVER DbEnv::set_server@DB_NOSERVER
-__APIREL__/api_cxx/env_set_server.html#DB_NOSERVER_ID DbEnv::set_server@DB_NOSERVER_ID
-__APIREL__/api_cxx/env_set_shm_key.html#2 @DbEnv::set_shm_key
-__APIREL__/api_cxx/env_set_tas_spins.html#2 @DbEnv::set_tas_spins
-__APIREL__/api_cxx/env_set_tmp_dir.html#2 @DbEnv::set_tmp_dir
-__APIREL__/api_cxx/env_set_tx_max.html#2 @DbEnv::set_tx_max
-__APIREL__/api_cxx/env_set_tx_recover.html#2 @DbEnv::set_tx_recover
-__APIREL__/api_cxx/env_set_tx_recover.html#DB_TXN_BACKWARD_ROLL DbEnv::set_tx_recover@DB_TXN_BACKWARD_ROLL
-__APIREL__/api_cxx/env_set_tx_recover.html#DB_TXN_FORWARD_ROLL DbEnv::set_tx_recover@DB_TXN_FORWARD_ROLL
-__APIREL__/api_cxx/env_set_tx_recover.html#DB_TXN_ABORT DbEnv::set_tx_recover@DB_TXN_ABORT
-__APIREL__/api_cxx/env_set_tx_timestamp.html#2 @DbEnv::set_tx_timestamp
-__APIREL__/api_cxx/env_set_verbose.html#2 @DbEnv::set_verbose
-__APIREL__/api_cxx/env_set_verbose.html#DB_VERB_CHKPOINT DbEnv::set_verbose@DB_VERB_CHKPOINT
-__APIREL__/api_cxx/env_set_verbose.html#DB_VERB_DEADLOCK DbEnv::set_verbose@DB_VERB_DEADLOCK
-__APIREL__/api_cxx/env_set_verbose.html#DB_VERB_RECOVERY DbEnv::set_verbose@DB_VERB_RECOVERY
-__APIREL__/api_cxx/env_set_verbose.html#DB_VERB_WAITSFOR DbEnv::set_verbose@DB_VERB_WAITSFOR
-__APIREL__/api_cxx/env_strerror.html#2 @DbEnv::strerror
-__APIREL__/api_cxx/env_version.html#2 @DbEnv::version
-__APIREL__/api_cxx/lock_detect.html#2 @DbEnv::lock_detect
-__APIREL__/api_cxx/lock_detect.html#DB_LOCK_CONFLICT DbEnv::lock_detect@DB_LOCK_CONFLICT
-__APIREL__/api_cxx/lock_get.html#2 @DbEnv::lock_get
-__APIREL__/api_cxx/lock_get.html#DB_LOCK_NOWAIT DbEnv::lock_get@DB_LOCK_NOWAIT
-__APIREL__/api_cxx/lock_get.html#DB_LOCK_NOTGRANTED DbEnv::lock_get@DB_LOCK_NOTGRANTED
-__APIREL__/api_cxx/lock_id.html#2 @DbEnv::lock_id
-__APIREL__/api_cxx/lock_put.html#2 @DbLock::put
-__APIREL__/api_cxx/lock_stat.html#2 @DbEnv::lock_stat
-__APIREL__/api_cxx/lock_vec.html#2 @DbEnv::lock_vec
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_NOWAIT DbEnv::lock_vec@DB_LOCK_NOWAIT
-__APIREL__/api_cxx/lock_vec.html#op DbEnv::lock_vec@op
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_GET DbEnv::lock_vec@DB_LOCK_GET
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_PUT DbEnv::lock_vec@DB_LOCK_PUT
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_PUT_ALL DbEnv::lock_vec@DB_LOCK_PUT_ALL
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_PUT_OBJ DbEnv::lock_vec@DB_LOCK_PUT_OBJ
-__APIREL__/api_cxx/lock_vec.html#obj DbEnv::lock_vec@obj
-__APIREL__/api_cxx/lock_vec.html#mode DbEnv::lock_vec@mode
-__APIREL__/api_cxx/lock_vec.html#lock DbEnv::lock_vec@lock
-__APIREL__/api_cxx/lock_vec.html#DB_LOCK_NOTGRANTED DbEnv::lock_vec@DB_LOCK_NOTGRANTED
-__APIREL__/api_cxx/log_archive.html#2 @DbEnv::log_archive
-__APIREL__/api_cxx/log_archive.html#DB_ARCH_ABS DbEnv::log_archive@DB_ARCH_ABS
-__APIREL__/api_cxx/log_archive.html#DB_ARCH_DATA DbEnv::log_archive@DB_ARCH_DATA
-__APIREL__/api_cxx/log_archive.html#DB_ARCH_LOG DbEnv::log_archive@DB_ARCH_LOG
-__APIREL__/api_cxx/log_compare.html#2 @DbEnv::log_compare
-__APIREL__/api_cxx/log_file.html#2 @DbEnv::log_file
-__APIREL__/api_cxx/log_flush.html#2 @DbEnv::log_flush
-__APIREL__/api_cxx/log_get.html#2 @DbEnv::log_get
-__APIREL__/api_cxx/log_get.html#DB_CHECKPOINT DbEnv::log_get@DB_CHECKPOINT
-__APIREL__/api_cxx/log_get.html#DB_FIRST DbEnv::log_get@DB_FIRST
-__APIREL__/api_cxx/log_get.html#DB_LAST DbEnv::log_get@DB_LAST
-__APIREL__/api_cxx/log_get.html#DB_NEXT DbEnv::log_get@DB_NEXT
-__APIREL__/api_cxx/log_get.html#DB_PREV DbEnv::log_get@DB_PREV
-__APIREL__/api_cxx/log_get.html#DB_CURRENT DbEnv::log_get@DB_CURRENT
-__APIREL__/api_cxx/log_get.html#DB_SET DbEnv::log_get@DB_SET
-__APIREL__/api_cxx/log_put.html#2 @DbEnv::log_put
-__APIREL__/api_cxx/log_put.html#DB_CHECKPOINT DbEnv::log_put@DB_CHECKPOINT
-__APIREL__/api_cxx/log_put.html#DB_CURLSN DbEnv::log_put@DB_CURLSN
-__APIREL__/api_cxx/log_put.html#DB_FLUSH DbEnv::log_put@DB_FLUSH
-__APIREL__/api_cxx/log_register.html#2 @DbEnv::log_register
-__APIREL__/api_cxx/log_stat.html#2 @DbEnv::log_stat
-__APIREL__/api_cxx/log_unregister.html#2 @DbEnv::log_unregister
-__APIREL__/api_cxx/memp_fclose.html#2 @DbMpoolFile::close
-__APIREL__/api_cxx/memp_fget.html#2 @DbMpoolFile::get
-__APIREL__/api_cxx/memp_fget.html#DB_MPOOL_CREATE DbMpoolFile::get@DB_MPOOL_CREATE
-__APIREL__/api_cxx/memp_fget.html#DB_MPOOL_LAST DbMpoolFile::get@DB_MPOOL_LAST
-__APIREL__/api_cxx/memp_fget.html#DB_MPOOL_NEW DbMpoolFile::get@DB_MPOOL_NEW
-__APIREL__/api_cxx/memp_fopen.html#2 @DbMpoolFile::open
-__APIREL__/api_cxx/memp_fopen.html#DB_CREATE DbMpoolFile::open@DB_CREATE
-__APIREL__/api_cxx/memp_fopen.html#DB_NOMMAP DbMpoolFile::open@DB_NOMMAP
-__APIREL__/api_cxx/memp_fopen.html#DB_RDONLY DbMpoolFile::open@DB_RDONLY
-__APIREL__/api_cxx/memp_fopen.html#ftype DbMpoolFile::open@ftype
-__APIREL__/api_cxx/memp_fopen.html#pgcookie DbMpoolFile::open@pgcookie
-__APIREL__/api_cxx/memp_fopen.html#fileid DbMpoolFile::open@fileid
-__APIREL__/api_cxx/memp_fopen.html#lsn_offset DbMpoolFile::open@lsn_offset
-__APIREL__/api_cxx/memp_fopen.html#clear_len DbMpoolFile::open@clear_len
-__APIREL__/api_cxx/memp_fput.html#2 @DbMpoolFile::put
-__APIREL__/api_cxx/memp_fput.html#DB_MPOOL_CLEAN DbMpoolFile::put@DB_MPOOL_CLEAN
-__APIREL__/api_cxx/memp_fput.html#DB_MPOOL_DIRTY DbMpoolFile::put@DB_MPOOL_DIRTY
-__APIREL__/api_cxx/memp_fput.html#DB_MPOOL_DISCARD DbMpoolFile::put@DB_MPOOL_DISCARD
-__APIREL__/api_cxx/memp_fset.html#2 @DbMpoolFile::set
-__APIREL__/api_cxx/memp_fset.html#DB_MPOOL_CLEAN DbMpoolFile::set@DB_MPOOL_CLEAN
-__APIREL__/api_cxx/memp_fset.html#DB_MPOOL_DIRTY DbMpoolFile::set@DB_MPOOL_DIRTY
-__APIREL__/api_cxx/memp_fset.html#DB_MPOOL_DISCARD DbMpoolFile::set@DB_MPOOL_DISCARD
-__APIREL__/api_cxx/memp_fsync.html#2 @DbMpoolFile::sync
-__APIREL__/api_cxx/memp_register.html#2 @DbEnv::memp_register
-__APIREL__/api_cxx/memp_stat.html#2 @DbEnv::memp_stat
-__APIREL__/api_cxx/memp_sync.html#2 @DbEnv::memp_sync
-__APIREL__/api_cxx/memp_trickle.html#2 @DbEnv::memp_trickle
-__APIREL__/api_cxx/txn_abort.html#2 @DbTxn::abort
-__APIREL__/api_cxx/txn_begin.html#2 @DbEnv::txn_begin
-__APIREL__/api_cxx/txn_begin.html#DB_TXN_NOSYNC DbEnv::txn_begin@DB_TXN_NOSYNC
-__APIREL__/api_cxx/txn_begin.html#DB_TXN_NOWAIT DbEnv::txn_begin@DB_TXN_NOWAIT
-__APIREL__/api_cxx/txn_begin.html#DB_TXN_SYNC DbEnv::txn_begin@DB_TXN_SYNC
-__APIREL__/api_cxx/txn_checkpoint.html#2 @DbEnv::txn_checkpoint
-__APIREL__/api_cxx/txn_checkpoint.html#DB_FORCE DbEnv::txn_checkpoint@DB_FORCE
-__APIREL__/api_cxx/txn_commit.html#2 @DbTxn::commit
-__APIREL__/api_cxx/txn_commit.html#DB_TXN_NOSYNC DbTxn::commit@DB_TXN_NOSYNC
-__APIREL__/api_cxx/txn_commit.html#DB_TXN_SYNC DbTxn::commit@DB_TXN_SYNC
-__APIREL__/api_cxx/txn_id.html#2 @DbTxn::id
-__APIREL__/api_cxx/txn_prepare.html#2 @DbTxn::prepare
-__APIREL__/api_cxx/txn_stat.html#2 @DbEnv::txn_stat
+__APIREL__/api_cxx/db_associate.html__OCT__2 @Db::associate
+__APIREL__/api_cxx/db_associate.html__OCT__3 @DB_DBT_APPMALLOC
+__APIREL__/api_cxx/db_associate.html__OCT__4 @DB_DONOTINDEX
+__APIREL__/api_cxx/db_associate.html__OCT__DB_CREATE Db::associate@DB_CREATE
+__APIREL__/api_cxx/db_associate.html__OCT__DB_AUTO_COMMIT Db::associate@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_class.html__OCT__2 @Db
+__APIREL__/api_cxx/db_class.html__OCT__DB_CXX_NO_EXCEPTIONS Db@DB_CXX_NO_EXCEPTIONS
+__APIREL__/api_cxx/db_class.html__OCT__DB_XA_CREATE Db@DB_XA_CREATE
+__APIREL__/api_cxx/db_close.html__OCT__2 @Db::close
+__APIREL__/api_cxx/db_close.html__OCT__DB_NOSYNC Db::close@DB_NOSYNC
+__APIREL__/api_cxx/db_cursor.html__OCT__2 @Db::cursor
+__APIREL__/api_cxx/db_cursor.html__OCT__DB_DIRTY_READ Db::cursor@DB_DIRTY_READ
+__APIREL__/api_cxx/db_cursor.html__OCT__DB_WRITECURSOR Db::cursor@DB_WRITECURSOR
+__APIREL__/api_cxx/db_del.html__OCT__2 @Db::del
+__APIREL__/api_cxx/db_del.html__OCT__DB_AUTO_COMMIT Db::del@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_err.html__OCT__2 @Db::err
+__APIREL__/api_cxx/db_err.html__OCT__3 @Db::errx
+__APIREL__/api_cxx/db_get.html__OCT__2 @Db::get
+__APIREL__/api_cxx/db_get.html__OCT__3 @Db::pget
+__APIREL__/api_cxx/db_get.html__OCT__DB_CONSUME Db::get@DB_CONSUME
+__APIREL__/api_cxx/db_get.html__OCT__DB_CONSUME_WAIT Db::get@DB_CONSUME_WAIT
+__APIREL__/api_cxx/db_get.html__OCT__DB_GET_BOTH Db::get@DB_GET_BOTH
+__APIREL__/api_cxx/db_get.html__OCT__DB_SET_RECNO Db::get@DB_SET_RECNO
+__APIREL__/api_cxx/db_get.html__OCT__DB_AUTO_COMMIT Db::get@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_get.html__OCT__DB_DIRTY_READ Db::get@DB_DIRTY_READ
+__APIREL__/api_cxx/db_get.html__OCT__DB_MULTIPLE Db::get@DB_MULTIPLE
+__APIREL__/api_cxx/db_get.html__OCT__DB_RMW Db::get@DB_RMW
+__APIREL__/api_cxx/db_get_byteswapped.html__OCT__2 @Db::get_byteswapped
+__APIREL__/api_cxx/db_get_mpf.html__OCT__2 @Db::get_mpf
+__APIREL__/api_cxx/db_get_type.html__OCT__2 @Db::get_type
+__APIREL__/api_cxx/db_getenv.html__OCT__2 @Db::getenv
+__APIREL__/api_cxx/db_join.html__OCT__2 @Db::join
+__APIREL__/api_cxx/db_join.html__OCT__DB_JOIN_ITEM Db::join@DB_JOIN_ITEM
+__APIREL__/api_cxx/db_join.html__OCT__DB_DIRTY_READ Db::join@DB_DIRTY_READ
+__APIREL__/api_cxx/db_join.html__OCT__DB_RMW Db::join@DB_RMW
+__APIREL__/api_cxx/db_join.html__OCT__DB_JOIN_NOSORT Db::join@DB_JOIN_NOSORT
+__APIREL__/api_cxx/db_key_range.html__OCT__2 @Db::key_range
+__APIREL__/api_cxx/db_open.html__OCT__2 @Db::open
+__APIREL__/api_cxx/db_open.html__OCT__3 @Db::get_file
+__APIREL__/api_cxx/db_open.html__OCT__4 @Db::get_database
+__APIREL__/api_cxx/db_open.html__OCT__5 @Db::get_open_flags
+__APIREL__/api_cxx/db_open.html__OCT__6 @Db::get_transactional
+__APIREL__/api_cxx/db_open.html__OCT__DB_AUTO_COMMIT Db::open@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_open.html__OCT__DB_CREATE Db::open@DB_CREATE
+__APIREL__/api_cxx/db_open.html__OCT__DB_DIRTY_READ Db::open@DB_DIRTY_READ
+__APIREL__/api_cxx/db_open.html__OCT__DB_EXCL Db::open@DB_EXCL
+__APIREL__/api_cxx/db_open.html__OCT__DB_NOMMAP Db::open@DB_NOMMAP
+__APIREL__/api_cxx/db_open.html__OCT__DB_RDONLY Db::open@DB_RDONLY
+__APIREL__/api_cxx/db_open.html__OCT__DB_THREAD Db::open@DB_THREAD
+__APIREL__/api_cxx/db_open.html__OCT__DB_TRUNCATE Db::open@DB_TRUNCATE
+__APIREL__/api_cxx/db_open.html__OCT__DB_BTREE Db::open@DB_BTREE
+__APIREL__/api_cxx/db_open.html__OCT__DB_HASH Db::open@DB_HASH
+__APIREL__/api_cxx/db_open.html__OCT__DB_QUEUE Db::open@DB_QUEUE
+__APIREL__/api_cxx/db_open.html__OCT__DB_RECNO Db::open@DB_RECNO
+__APIREL__/api_cxx/db_open.html__OCT__DB_UNKNOWN Db::open@DB_UNKNOWN
+__APIREL__/api_cxx/db_put.html__OCT__2 @Db::put
+__APIREL__/api_cxx/db_put.html__OCT__DB_APPEND Db::put@DB_APPEND
+__APIREL__/api_cxx/db_put.html__OCT__DB_NODUPDATA Db::put@DB_NODUPDATA
+__APIREL__/api_cxx/db_put.html__OCT__DB_NOOVERWRITE Db::put@DB_NOOVERWRITE
+__APIREL__/api_cxx/db_put.html__OCT__DB_AUTO_COMMIT Db::put@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_remove.html__OCT__2 @Db::remove
+__APIREL__/api_cxx/db_rename.html__OCT__2 @Db::rename
+__APIREL__/api_cxx/db_set_append_recno.html__OCT__2 @Db::set_append_recno
+__APIREL__/api_cxx/db_set_bt_compare.html__OCT__2 @Db::set_bt_compare
+__APIREL__/api_cxx/db_set_bt_minkey.html__OCT__2 @Db::set_bt_minkey
+__APIREL__/api_cxx/db_set_bt_minkey.html__OCT__3 @Db::get_bt_minkey
+__APIREL__/api_cxx/db_set_bt_prefix.html__OCT__2 @Db::set_bt_prefix
+__APIREL__/api_cxx/db_set_cachesize.html__OCT__2 @Db::set_cachesize
+__APIREL__/api_cxx/db_set_cachesize.html__OCT__3 @Db::get_cachesize
+__APIREL__/api_cxx/db_set_dup_compare.html__OCT__2 @Db::set_dup_compare
+__APIREL__/api_cxx/db_set_encrypt.html__OCT__2 @Db::set_encrypt
+__APIREL__/api_cxx/db_set_encrypt.html__OCT__3 @Db::get_encrypt_flags
+__APIREL__/api_cxx/db_set_encrypt.html__OCT__DB_ENCRYPT_AES Db::set_encrypt@DB_ENCRYPT_AES
+__APIREL__/api_cxx/db_set_errcall.html__OCT__2 @Db::set_errcall
+__APIREL__/api_cxx/db_set_errpfx.html__OCT__2 @Db::set_errpfx
+__APIREL__/api_cxx/db_set_errpfx.html__OCT__3 @Db::get_errpfx
+__APIREL__/api_cxx/db_set_feedback.html__OCT__2 @Db::set_feedback
+__APIREL__/api_cxx/db_set_feedback.html__OCT__DB_UPGRADE Db::set_feedback@DB_UPGRADE
+__APIREL__/api_cxx/db_set_feedback.html__OCT__DB_VERIFY Db::set_feedback@DB_VERIFY
+__APIREL__/api_cxx/db_set_flags.html__OCT__2 @Db::set_flags
+__APIREL__/api_cxx/db_set_flags.html__OCT__3 @Db::get_flags
+__APIREL__/api_cxx/db_set_flags.html__OCT__4 database page @checksum
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_CHKSUM Db::set_flags@DB_CHKSUM
+__APIREL__/api_cxx/db_set_flags.html__OCT__5 database @encryption
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_ENCRYPT Db::set_flags@DB_ENCRYPT
+__APIREL__/api_cxx/db_set_flags.html__OCT__6 turn off database @durability
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_TXN_NOT_DURABLE Db::set_flags@DB_TXN_NOT_DURABLE
+__APIREL__/api_cxx/db_set_flags.html__OCT__7 @duplicate data items
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_DUP Db::set_flags@DB_DUP
+__APIREL__/api_cxx/db_set_flags.html__OCT__8 sorted @duplicate data items
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_DUPSORT Db::set_flags@DB_DUPSORT
+__APIREL__/api_cxx/db_set_flags.html__OCT__9 accessing Btree records by @record number
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_RECNUM Db::set_flags@DB_RECNUM
+__APIREL__/api_cxx/db_set_flags.html__OCT__10 turn off @reverse splits in Btree databases
+__APIREL__/api_cxx/db_set_flags.html__OCT__11 turn off reverse @splits in Btree databases
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_REVSPLITOFF Db::set_flags@DB_REVSPLITOFF
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_DUP Db::set_flags@DB_DUP
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_DUPSORT Db::set_flags@DB_DUPSORT
+__APIREL__/api_cxx/db_set_flags.html__OCT__12 @renumbering records in Recno databases
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_RENUMBER Db::set_flags@DB_RENUMBER
+__APIREL__/api_cxx/db_set_flags.html__OCT__13 pre-loading @text files into Recno databases
+__APIREL__/api_cxx/db_set_flags.html__OCT__DB_SNAPSHOT Db::set_flags@DB_SNAPSHOT
+__APIREL__/api_cxx/db_set_h_ffactor.html__OCT__2 @Db::set_h_ffactor
+__APIREL__/api_cxx/db_set_h_ffactor.html__OCT__3 @Db::get_h_ffactor
+__APIREL__/api_cxx/db_set_h_hash.html__OCT__2 @Db::set_h_hash
+__APIREL__/api_cxx/db_set_h_nelem.html__OCT__2 @Db::set_h_nelem
+__APIREL__/api_cxx/db_set_h_nelem.html__OCT__3 @Db::get_h_nelem
+__APIREL__/api_cxx/db_set_lorder.html__OCT__2 @Db::set_lorder
+__APIREL__/api_cxx/db_set_lorder.html__OCT__3 @Db::get_lorder
+__APIREL__/api_cxx/db_set_pagesize.html__OCT__2 @Db::set_pagesize
+__APIREL__/api_cxx/db_set_pagesize.html__OCT__3 @Db::get_pagesize
+__APIREL__/api_cxx/db_set_paniccall.html__OCT__2 @Db::set_paniccall
+__APIREL__/api_cxx/db_set_q_extentsize.html__OCT__2 @Db::set_q_extentsize
+__APIREL__/api_cxx/db_set_q_extentsize.html__OCT__3 @Db::get_q_extentsize
+__APIREL__/api_cxx/db_set_re_delim.html__OCT__2 @Db::set_re_delim
+__APIREL__/api_cxx/db_set_re_delim.html__OCT__3 @Db::get_re_delim
+__APIREL__/api_cxx/db_set_re_len.html__OCT__2 @Db::set_re_len
+__APIREL__/api_cxx/db_set_re_len.html__OCT__3 @Db::get_re_len
+__APIREL__/api_cxx/db_set_re_pad.html__OCT__2 @Db::set_re_pad
+__APIREL__/api_cxx/db_set_re_pad.html__OCT__3 @Db::get_re_pad
+__APIREL__/api_cxx/db_set_re_source.html__OCT__2 @Db::set_re_source
+__APIREL__/api_cxx/db_set_re_source.html__OCT__3 @Db::get_re_source
+__APIREL__/api_cxx/db_stat.html__OCT__2 @Db::stat
+__APIREL__/api_cxx/db_stat.html__OCT__DB_FAST_STAT Db::stat@DB_FAST_STAT
+__APIREL__/api_cxx/db_sync.html__OCT__2 @Db::sync
+__APIREL__/api_cxx/db_truncate.html__OCT__2 @Db::truncate
+__APIREL__/api_cxx/db_truncate.html__OCT__DB_AUTO_COMMIT Db::truncate@DB_AUTO_COMMIT
+__APIREL__/api_cxx/db_upgrade.html__OCT__2 @Db::upgrade
+__APIREL__/api_cxx/db_upgrade.html__OCT__DB_DUPSORT Db::upgrade@DB_DUPSORT
+__APIREL__/api_cxx/db_upgrade.html__OCT__DB_OLD_VERSION Db::upgrade@DB_OLD_VERSION
+__APIREL__/api_cxx/db_verify.html__OCT__2 @Db::verify
+__APIREL__/api_cxx/db_verify.html__OCT__3 @DB_VERIFY_BAD
+__APIREL__/api_cxx/db_verify.html__OCT__DB_SALVAGE Db::verify@DB_SALVAGE
+__APIREL__/api_cxx/db_verify.html__OCT__DB_AGGRESSIVE Db::verify@DB_AGGRESSIVE
+__APIREL__/api_cxx/db_verify.html__OCT__DB_PRINTABLE Db::verify@DB_PRINTABLE
+__APIREL__/api_cxx/db_verify.html__OCT__DB_NOORDERCHK Db::verify@DB_NOORDERCHK
+__APIREL__/api_cxx/db_verify.html__OCT__DB_ORDERCHKONLY Db::verify@DB_ORDERCHKONLY
+__APIREL__/api_cxx/dbt_class.html__OCT__2 @Dbt
+__APIREL__/api_cxx/dbt_class.html__OCT__3 @key/data pairs
+__APIREL__/api_cxx/dbt_class.html__OCT__DB_DBT_MALLOC Dbt@DB_DBT_MALLOC
+__APIREL__/api_cxx/dbt_class.html__OCT__DB_DBT_REALLOC Dbt@DB_DBT_REALLOC
+__APIREL__/api_cxx/dbt_class.html__OCT__DB_DBT_USERMEM Dbt@DB_DBT_USERMEM
+__APIREL__/api_cxx/dbt_class.html__OCT__DB_DBT_PARTIAL Dbt@DB_DBT_PARTIAL
+__APIREL__/api_cxx/db_fd.html__OCT__2 @Db::fd
+__APIREL__/api_cxx/db_set_alloc.html__OCT__2 @Db::set_alloc
+__APIREL__/api_cxx/db_set_errfile.html__OCT__2 @Db::set_errfile
+__APIREL__/api_cxx/db_set_errfile.html__OCT__3 @Db::get_errfile
+__APIREL__/api_cxx/db_set_error_stream.html__OCT__2 @Db::set_error_stream
+__APIREL__/api_cxx/dbt_bulk_class.html__OCT__2 @Bulk Retrieval API
+__APIREL__/api_cxx/dbc_class.html__OCT__2 @Dbc
+__APIREL__/api_cxx/dbc_close.html__OCT__2 @Dbc::close
+__APIREL__/api_cxx/dbc_count.html__OCT__2 @Dbc::count
+__APIREL__/api_cxx/dbc_del.html__OCT__2 @Dbc::del
+__APIREL__/api_cxx/dbc_dup.html__OCT__2 @Dbc::dup
+__APIREL__/api_cxx/dbc_dup.html__OCT__DB_POSITION Dbc::dup@DB_POSITION
+__APIREL__/api_cxx/dbc_get.html__OCT__2 @Dbc::get
+__APIREL__/api_cxx/dbc_get.html__OCT__3 @Dbc::pget
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_CURRENT Dbc::get@DB_CURRENT
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_FIRST Dbc::get@DB_FIRST
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_GET_BOTH Dbc::get@DB_GET_BOTH
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_GET_BOTH_RANGE Dbc::get@DB_GET_BOTH_RANGE
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_GET_RECNO Dbc::get@DB_GET_RECNO
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_JOIN_ITEM Dbc::get@DB_JOIN_ITEM
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_LAST Dbc::get@DB_LAST
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_NEXT Dbc::get@DB_NEXT
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_NEXT_DUP Dbc::get@DB_NEXT_DUP
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_NEXT_NODUP Dbc::get@DB_NEXT_NODUP
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_PREV Dbc::get@DB_PREV
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_PREV_NODUP Dbc::get@DB_PREV_NODUP
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_SET Dbc::get@DB_SET
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_SET_RANGE Dbc::get@DB_SET_RANGE
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_SET_RECNO Dbc::get@DB_SET_RECNO
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_DIRTY_READ Dbc::get@DB_DIRTY_READ
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_MULTIPLE Dbc::get@DB_MULTIPLE
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_MULTIPLE_KEY Dbc::get@DB_MULTIPLE_KEY
+__APIREL__/api_cxx/dbc_get.html__OCT__DB_RMW Dbc::get@DB_RMW
+__APIREL__/api_cxx/dbc_put.html__OCT__2 @Dbc::put
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_AFTER Dbc::put@DB_AFTER
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_BEFORE Dbc::put@DB_BEFORE
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_CURRENT Dbc::put@DB_CURRENT
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_KEYFIRST Dbc::put@DB_KEYFIRST
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_KEYLAST Dbc::put@DB_KEYLAST
+__APIREL__/api_cxx/dbc_put.html__OCT__DB_NODUPDATA Dbc::put@DB_NODUPDATA
+__APIREL__/api_cxx/except_class.html__OCT__2 @DbException
+__APIREL__/api_cxx/except_class.html__OCT__3 @DbException::get_env
+__APIREL__/api_cxx/except_class.html__OCT__4 @DbException::get_errno
+__APIREL__/api_cxx/except_class.html__OCT__5 @DbException::what
+__APIREL__/api_cxx/runrec_class.html__OCT__2 @DbRunRecoveryException
+__APIREL__/api_cxx/env_class.html__OCT__2 @DbEnv
+__APIREL__/api_cxx/env_class.html__OCT__DB_CXX_NO_EXCEPTIONS DbEnv@DB_CXX_NO_EXCEPTIONS
+__APIREL__/api_cxx/env_class.html__OCT__DB_RPCCLIENT DbEnv@DB_RPCCLIENT
+__APIREL__/api_cxx/env_close.html__OCT__2 @DbEnv::close
+__APIREL__/api_cxx/env_dbremove.html__OCT__2 @DbEnv::dbremove
+__APIREL__/api_cxx/env_dbremove.html__OCT__DB_AUTO_COMMIT DbEnv::dbremove@DB_AUTO_COMMIT
+__APIREL__/api_cxx/env_dbrename.html__OCT__2 @DbEnv::dbrename
+__APIREL__/api_cxx/env_dbrename.html__OCT__DB_AUTO_COMMIT DbEnv::dbrename@DB_AUTO_COMMIT
+__APIREL__/api_cxx/env_err.html__OCT__2 @DbEnv::err
+__APIREL__/api_cxx/env_err.html__OCT__3 @DbEnv::errx
+__APIREL__/api_cxx/env_open.html__OCT__2 @DbEnv::open
+__APIREL__/api_cxx/env_open.html__OCT__3 @DbEnv::get_home
+__APIREL__/api_cxx/env_open.html__OCT__4 @DbEnv::get_open_flags
+__APIREL__/api_cxx/env_open.html__OCT__DB_JOINENV DbEnv::open@DB_JOINENV
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_CDB DbEnv::open@DB_INIT_CDB
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_LOCK DbEnv::open@DB_INIT_LOCK
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_LOG DbEnv::open@DB_INIT_LOG
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_MPOOL DbEnv::open@DB_INIT_MPOOL
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_REP DbEnv::open@DB_INIT_REP
+__APIREL__/api_cxx/env_open.html__OCT__DB_INIT_TXN DbEnv::open@DB_INIT_TXN
+__APIREL__/api_cxx/env_open.html__OCT__DB_RECOVER DbEnv::open@DB_RECOVER
+__APIREL__/api_cxx/env_open.html__OCT__DB_RECOVER_FATAL DbEnv::open@DB_RECOVER_FATAL
+__APIREL__/api_cxx/env_open.html__OCT__5 use @environment constants in naming
+__APIREL__/api_cxx/env_open.html__OCT__DB_USE_ENVIRON DbEnv::open@DB_USE_ENVIRON
+__APIREL__/api_cxx/env_open.html__OCT__DB_USE_ENVIRON_ROOT DbEnv::open@DB_USE_ENVIRON_ROOT
+__APIREL__/api_cxx/env_open.html__OCT__DB_CREATE DbEnv::open@DB_CREATE
+__APIREL__/api_cxx/env_open.html__OCT__DB_LOCKDOWN DbEnv::open@DB_LOCKDOWN
+__APIREL__/api_cxx/env_open.html__OCT__DB_PRIVATE DbEnv::open@DB_PRIVATE
+__APIREL__/api_cxx/env_open.html__OCT__DB_SYSTEM_MEM DbEnv::open@DB_SYSTEM_MEM
+__APIREL__/api_cxx/env_open.html__OCT__DB_THREAD DbEnv::open@DB_THREAD
+__APIREL__/api_cxx/env_remove.html__OCT__2 @DbEnv::remove
+__APIREL__/api_cxx/env_remove.html__OCT__DB_FORCE DbEnv::remove@DB_FORCE
+__APIREL__/api_cxx/env_remove.html__OCT__3 use @environment constants in naming
+__APIREL__/api_cxx/env_remove.html__OCT__DB_USE_ENVIRON DbEnv::remove@DB_USE_ENVIRON
+__APIREL__/api_cxx/env_remove.html__OCT__DB_USE_ENVIRON_ROOT DbEnv::remove@DB_USE_ENVIRON_ROOT
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__2 @DbEnv::set_app_dispatch
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__DB_TXN_BACKWARD_ROLL DbEnv::set_app_dispatch@DB_TXN_BACKWARD_ROLL
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__DB_TXN_FORWARD_ROLL DbEnv::set_app_dispatch@DB_TXN_FORWARD_ROLL
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__DB_TXN_ABORT DbEnv::set_app_dispatch@DB_TXN_ABORT
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__DB_TXN_APPLY DbEnv::set_app_dispatch@DB_TXN_APPLY
+__APIREL__/api_cxx/env_set_app_dispatch.html__OCT__DB_TXN_PRINT DbEnv::set_app_dispatch@DB_TXN_PRINT
+__APIREL__/api_cxx/env_set_cachesize.html__OCT__2 @DbEnv::set_cachesize
+__APIREL__/api_cxx/env_set_cachesize.html__OCT__3 @DbEnv::get_cachesize
+__APIREL__/api_cxx/env_set_cachesize.html__OCT__4 @DbEnv::get_cachesize_nocache
+__APIREL__/api_cxx/env_set_data_dir.html__OCT__2 @DbEnv::set_data_dir
+__APIREL__/api_cxx/env_set_data_dir.html__OCT__3 @DbEnv::get_data_dirs
+__APIREL__/api_cxx/env_set_encrypt.html__OCT__2 @DbEnv::set_encrypt
+__APIREL__/api_cxx/env_set_encrypt.html__OCT__3 @DbEnv::get_encrypt_flags
+__APIREL__/api_cxx/env_set_encrypt.html__OCT__DB_ENCRYPT_AES DbEnv::set_encrypt@DB_ENCRYPT_AES
+__APIREL__/api_cxx/env_set_errcall.html__OCT__2 @DbEnv::set_errcall
+__APIREL__/api_cxx/env_set_errpfx.html__OCT__2 @DbEnv::set_errpfx
+__APIREL__/api_cxx/env_set_errpfx.html__OCT__3 @DbEnv::get_errpfx
+__APIREL__/api_cxx/env_set_feedback.html__OCT__2 @DbEnv::set_feedback
+__APIREL__/api_cxx/env_set_feedback.html__OCT__DB_RECOVER DbEnv::set_feedback@DB_RECOVER
+__APIREL__/api_cxx/env_set_flags.html__OCT__2 @DbEnv::set_flags
+__APIREL__/api_cxx/env_set_flags.html__OCT__3 @DbEnv::get_flags
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_AUTO_COMMIT DbEnv::set_flags@DB_AUTO_COMMIT
+__APIREL__/api_cxx/env_set_flags.html__OCT__4 configure @locking for Berkeley DB Concurrent Data Store
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_CDB_ALLDB DbEnv::set_flags@DB_CDB_ALLDB
+__APIREL__/api_cxx/env_set_flags.html__OCT__5 turn off system @buffering for database files
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_DIRECT_DB DbEnv::set_flags@DB_DIRECT_DB
+__APIREL__/api_cxx/env_set_flags.html__OCT__6 turn off system @buffering for log files
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_DIRECT_LOG DbEnv::set_flags@DB_DIRECT_LOG
+__APIREL__/api_cxx/env_set_flags.html__OCT__7 automatic @log file removal
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_LOG_AUTOREMOVE DbEnv::set_flags@DB_LOG_AUTOREMOVE
+__APIREL__/api_cxx/env_set_flags.html__OCT__8 ignore @locking
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_NOLOCKING DbEnv::set_flags@DB_NOLOCKING
+__APIREL__/api_cxx/env_set_flags.html__OCT__9 turn off database file @memory mapping
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_NOMMAP DbEnv::set_flags@DB_NOMMAP
+__APIREL__/api_cxx/env_set_flags.html__OCT__10 ignore database environment @panic
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_NOPANIC DbEnv::set_flags@DB_NOPANIC
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_OVERWRITE DbEnv::set_flags@DB_OVERWRITE
+__APIREL__/api_cxx/env_set_flags.html__OCT__11 turn off access to a database @environment
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_PANIC_ENVIRONMENT DbEnv::set_flags@DB_PANIC_ENVIRONMENT
+__APIREL__/api_cxx/env_set_flags.html__OCT__12 fault database @environment in during open
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_REGION_INIT DbEnv::set_flags@DB_REGION_INIT
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_TIME_NOTGRANTED DbEnv::set_flags@DB_TIME_NOTGRANTED
+__APIREL__/api_cxx/env_set_flags.html__OCT__13 turn off synchronous @transaction commit
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_TXN_NOSYNC DbEnv::set_flags@DB_TXN_NOSYNC
+__APIREL__/api_cxx/env_set_flags.html__OCT__14 turn off @durability in the database environment
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_TXN_NOT_DURABLE DbEnv::set_flags@DB_TXN_NOT_DURABLE
+__APIREL__/api_cxx/env_set_flags.html__OCT__15 turn off synchronous @transaction commit
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_TXN_WRITE_NOSYNC DbEnv::set_flags@DB_TXN_WRITE_NOSYNC
+__APIREL__/api_cxx/env_set_flags.html__OCT__16 configure for @stress testing
+__APIREL__/api_cxx/env_set_flags.html__OCT__DB_YIELDCPU DbEnv::set_flags@DB_YIELDCPU
+__APIREL__/api_cxx/env_set_paniccall.html__OCT__2 @DbEnv::set_paniccall
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__2 @DbEnv::set_rpc_server
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__DB_NOSERVER DbEnv::set_rpc_server@DB_NOSERVER
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__DB_NOSERVER_ID DbEnv::set_rpc_server@DB_NOSERVER_ID
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__DB_NOSERVER_HOME DbEnv::set_rpc_server@DB_NOSERVER_HOME
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__3 @DB_NOSERVER
+__APIREL__/api_cxx/env_set_rpc_server.html__OCT__4 @DB_NOSERVER_ID
+__APIREL__/api_cxx/env_set_shm_key.html__OCT__2 @DbEnv::set_shm_key
+__APIREL__/api_cxx/env_set_shm_key.html__OCT__3 @DbEnv::get_shm_key
+__APIREL__/api_cxx/env_set_tas_spins.html__OCT__2 @DbEnv::set_tas_spins
+__APIREL__/api_cxx/env_set_tas_spins.html__OCT__3 @DbEnv::get_tas_spins
+__APIREL__/api_cxx/env_set_timeout.html__OCT__2 @DbEnv::set_timeout
+__APIREL__/api_cxx/env_set_timeout.html__OCT__3 @DbEnv::get_timeout
+__APIREL__/api_cxx/env_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DbEnv::set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_cxx/env_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DbEnv::set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_cxx/env_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DbEnv::set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_cxx/env_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DbEnv::set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_cxx/env_set_tmp_dir.html__OCT__2 @DbEnv::set_tmp_dir
+__APIREL__/api_cxx/env_set_tmp_dir.html__OCT__3 @temporary files
+__APIREL__/api_cxx/env_set_tmp_dir.html__OCT__4 @DbEnv::get_tmp_dir
+__APIREL__/api_cxx/env_set_verbose.html__OCT__2 @DbEnv::set_verbose
+__APIREL__/api_cxx/env_set_verbose.html__OCT__3 @DbEnv::get_verbose
+__APIREL__/api_cxx/env_set_verbose.html__OCT__DB_VERB_CHKPOINT DbEnv::set_verbose@DB_VERB_CHKPOINT
+__APIREL__/api_cxx/env_set_verbose.html__OCT__DB_VERB_DEADLOCK DbEnv::set_verbose@DB_VERB_DEADLOCK
+__APIREL__/api_cxx/env_set_verbose.html__OCT__DB_VERB_RECOVERY DbEnv::set_verbose@DB_VERB_RECOVERY
+__APIREL__/api_cxx/env_set_verbose.html__OCT__DB_VERB_REPLICATION DbEnv::set_verbose@DB_VERB_REPLICATION
+__APIREL__/api_cxx/env_set_verbose.html__OCT__DB_VERB_WAITSFOR DbEnv::set_verbose@DB_VERB_WAITSFOR
+__APIREL__/api_cxx/env_strerror.html__OCT__2 @DbEnv::strerror
+__APIREL__/api_cxx/env_version.html__OCT__2 @DbEnv::version
+__APIREL__/api_cxx/env_version.html__OCT__3 @DbEnv::version
+__APIREL__/api_cxx/env_set_errfile.html__OCT__2 @DbEnv::set_errfile
+__APIREL__/api_cxx/env_set_errfile.html__OCT__3 @DbEnv::get_errfile
+__APIREL__/api_cxx/env_set_alloc.html__OCT__2 @DbEnv::set_alloc
+__APIREL__/api_cxx/env_set_error_stream.html__OCT__2 @DbEnv::set_error_stream
+__APIREL__/api_cxx/env_set_lk_conflicts.html__OCT__2 @DbEnv::set_lk_conflicts
+__APIREL__/api_cxx/env_set_lk_conflicts.html__OCT__3 @DbEnv::get_lk_conflicts
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__2 @DbEnv::set_lk_detect
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__3 @DbEnv::get_lk_detect
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_DEFAULT DbEnv::set_lk_detect@DB_LOCK_DEFAULT
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_EXPIRE DbEnv::set_lk_detect@DB_LOCK_EXPIRE
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_MAXLOCKS DbEnv::set_lk_detect@DB_LOCK_MAXLOCKS
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_MINLOCKS DbEnv::set_lk_detect@DB_LOCK_MINLOCKS
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_MINWRITE DbEnv::set_lk_detect@DB_LOCK_MINWRITE
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_OLDEST DbEnv::set_lk_detect@DB_LOCK_OLDEST
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_RANDOM DbEnv::set_lk_detect@DB_LOCK_RANDOM
+__APIREL__/api_cxx/env_set_lk_detect.html__OCT__DB_LOCK_YOUNGEST DbEnv::set_lk_detect@DB_LOCK_YOUNGEST
+__APIREL__/api_cxx/env_set_lk_max_lockers.html__OCT__2 @DbEnv::set_lk_max_lockers
+__APIREL__/api_cxx/env_set_lk_max_lockers.html__OCT__3 @DbEnv::get_lk_max_lockers
+__APIREL__/api_cxx/env_set_lk_max_locks.html__OCT__2 @DbEnv::set_lk_max_locks
+__APIREL__/api_cxx/env_set_lk_max_locks.html__OCT__3 @DbEnv::get_lk_max_locks
+__APIREL__/api_cxx/env_set_lk_max_objects.html__OCT__2 @DbEnv::set_lk_max_objects
+__APIREL__/api_cxx/env_set_lk_max_objects.html__OCT__3 @DbEnv::get_lk_max_objects
+__APIREL__/api_cxx/lock_class.html__OCT__2 @DbLock
+__APIREL__/api_cxx/lock_detect.html__OCT__2 @DbEnv::lock_detect
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_DEFAULT DbEnv::lock_detect@DB_LOCK_DEFAULT
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_EXPIRE DbEnv::lock_detect@DB_LOCK_EXPIRE
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_MAXLOCKS DbEnv::lock_detect@DB_LOCK_MAXLOCKS
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_MINLOCKS DbEnv::lock_detect@DB_LOCK_MINLOCKS
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_MINWRITE DbEnv::lock_detect@DB_LOCK_MINWRITE
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_OLDEST DbEnv::lock_detect@DB_LOCK_OLDEST
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_RANDOM DbEnv::lock_detect@DB_LOCK_RANDOM
+__APIREL__/api_cxx/lock_detect.html__OCT__DB_LOCK_YOUNGEST DbEnv::lock_detect@DB_LOCK_YOUNGEST
+__APIREL__/api_cxx/lock_get.html__OCT__2 @DbEnv::lock_get
+__APIREL__/api_cxx/lock_get.html__OCT__DB_LOCK_NOWAIT DbEnv::lock_get@DB_LOCK_NOWAIT
+__APIREL__/api_cxx/lock_id.html__OCT__2 @DbEnv::lock_id
+__APIREL__/api_cxx/lock_id_free.html__OCT__2 @DbEnv::lock_id_free
+__APIREL__/api_cxx/lock_put.html__OCT__2 @DbEnv::lock_put
+__APIREL__/api_cxx/lock_stat.html__OCT__2 @DbEnv::lock_stat
+__APIREL__/api_cxx/lock_stat.html__OCT__DB_STAT_CLEAR DbEnv::lock_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/lock_vec.html__OCT__2 @DbEnv::lock_vec
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_NOWAIT DbEnv::lock_vec@DB_LOCK_NOWAIT
+__APIREL__/api_cxx/lock_vec.html__OCT__op DbEnv::lock_vec@op
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_GET DbEnv::lock_vec@DB_LOCK_GET
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_GET_TIMEOUT DbEnv::lock_vec@DB_LOCK_GET_TIMEOUT
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_PUT DbEnv::lock_vec@DB_LOCK_PUT
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_PUT_ALL DbEnv::lock_vec@DB_LOCK_PUT_ALL
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_PUT_OBJ DbEnv::lock_vec@DB_LOCK_PUT_OBJ
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_TIMEOUT DbEnv::lock_vec@DB_LOCK_TIMEOUT
+__APIREL__/api_cxx/lock_vec.html__OCT__lock DbEnv::lock_vec@lock
+__APIREL__/api_cxx/lock_vec.html__OCT__mode DbEnv::lock_vec@mode
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_READ DbEnv::lock_vec@DB_LOCK_READ
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_WRITE DbEnv::lock_vec@DB_LOCK_WRITE
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_IWRITE DbEnv::lock_vec@DB_LOCK_IWRITE
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_IREAD DbEnv::lock_vec@DB_LOCK_IREAD
+__APIREL__/api_cxx/lock_vec.html__OCT__DB_LOCK_IWR DbEnv::lock_vec@DB_LOCK_IWR
+__APIREL__/api_cxx/lock_vec.html__OCT__obj DbEnv::lock_vec@obj
+__APIREL__/api_cxx/deadlock_class.html__OCT__2 @DbDeadlockException
+__APIREL__/api_cxx/lockng_class.html__OCT__2 @DbLockNotGrantedException
+__APIREL__/api_cxx/env_set_lg_bsize.html__OCT__2 @DbEnv::set_lg_bsize
+__APIREL__/api_cxx/env_set_lg_bsize.html__OCT__3 @DbEnv::get_lg_bsize
+__APIREL__/api_cxx/env_set_lg_dir.html__OCT__2 @DbEnv::set_lg_dir
+__APIREL__/api_cxx/env_set_lg_dir.html__OCT__3 @DbEnv::get_lg_dir
+__APIREL__/api_cxx/env_set_lg_max.html__OCT__2 @DbEnv::set_lg_max
+__APIREL__/api_cxx/env_set_lg_max.html__OCT__3 @DbEnv::get_lg_max
+__APIREL__/api_cxx/env_set_lg_regionmax.html__OCT__2 @DbEnv::set_lg_regionmax
+__APIREL__/api_cxx/env_set_lg_regionmax.html__OCT__3 @DbEnv::get_lg_regionmax
+__APIREL__/api_cxx/log_archive.html__OCT__2 @DbEnv::log_archive
+__APIREL__/api_cxx/log_archive.html__OCT__DB_ARCH_ABS DbEnv::log_archive@DB_ARCH_ABS
+__APIREL__/api_cxx/log_archive.html__OCT__DB_ARCH_DATA DbEnv::log_archive@DB_ARCH_DATA
+__APIREL__/api_cxx/log_archive.html__OCT__DB_ARCH_LOG DbEnv::log_archive@DB_ARCH_LOG
+__APIREL__/api_cxx/log_archive.html__OCT__DB_ARCH_REMOVE DbEnv::log_archive@DB_ARCH_REMOVE
+__APIREL__/api_cxx/log_compare.html__OCT__2 @DbEnv::log_compare
+__APIREL__/api_cxx/log_cursor.html__OCT__2 @DbEnv::log_cursor
+__APIREL__/api_cxx/log_file.html__OCT__2 @DbEnv::log_file
+__APIREL__/api_cxx/log_flush.html__OCT__2 @DbEnv::log_flush
+__APIREL__/api_cxx/log_put.html__OCT__2 @DbEnv::log_put
+__APIREL__/api_cxx/log_put.html__OCT__DB_FLUSH DbEnv::log_put@DB_FLUSH
+__APIREL__/api_cxx/log_stat.html__OCT__2 @DbEnv::log_stat
+__APIREL__/api_cxx/log_stat.html__OCT__DB_STAT_CLEAR DbEnv::log_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/logc_class.html__OCT__2 @DbLogc
+__APIREL__/api_cxx/logc_close.html__OCT__2 @DbLogc::close
+__APIREL__/api_cxx/logc_get.html__OCT__2 @DbLogc::get
+__APIREL__/api_cxx/logc_get.html__OCT__DB_CURRENT DbLogc::get@DB_CURRENT
+__APIREL__/api_cxx/logc_get.html__OCT__DB_FIRST DbLogc::get@DB_FIRST
+__APIREL__/api_cxx/logc_get.html__OCT__DB_LAST DbLogc::get@DB_LAST
+__APIREL__/api_cxx/logc_get.html__OCT__DB_NEXT DbLogc::get@DB_NEXT
+__APIREL__/api_cxx/logc_get.html__OCT__DB_PREV DbLogc::get@DB_PREV
+__APIREL__/api_cxx/logc_get.html__OCT__DB_SET DbLogc::get@DB_SET
+__APIREL__/api_cxx/lsn_class.html__OCT__2 @DbLsn
+__APIREL__/api_cxx/env_set_mp_mmapsize.html__OCT__2 @DbEnv::set_mp_mmapsize
+__APIREL__/api_cxx/env_set_mp_mmapsize.html__OCT__3 @DbEnv::get_mp_mmapsize
+__APIREL__/api_cxx/memp_set_flags.html__OCT__2 @DbMpoolFile::set_flags
+__APIREL__/api_cxx/memp_set_flags.html__OCT__3 @DbMpoolFile::get_flags
+__APIREL__/api_cxx/memp_set_flags.html__OCT__DB_MPOOL_NOFILE DbMpoolFile::set_flags@DB_MPOOL_NOFILE
+__APIREL__/api_cxx/memp_set_maxsize.html__OCT__2 @DbMpoolFile::set_maxsize
+__APIREL__/api_cxx/memp_set_maxsize.html__OCT__3 @DbMpoolFile::get_maxsize
+__APIREL__/api_cxx/memp_set_priority.html__OCT__2 @DbMpoolFile::set_priority
+__APIREL__/api_cxx/memp_set_priority.html__OCT__3 @DbMpoolFile::get_priority
+__APIREL__/api_cxx/memp_set_priority.html__OCT__DB_PRIORITY_VERY_LOW DbMpoolFile::set_priority@DB_PRIORITY_VERY_LOW
+__APIREL__/api_cxx/memp_set_priority.html__OCT__DB_PRIORITY_LOW DbMpoolFile::set_priority@DB_PRIORITY_LOW
+__APIREL__/api_cxx/memp_set_priority.html__OCT__DB_PRIORITY_DEFAULT DbMpoolFile::set_priority@DB_PRIORITY_DEFAULT
+__APIREL__/api_cxx/memp_set_priority.html__OCT__DB_PRIORITY_HIGH DbMpoolFile::set_priority@DB_PRIORITY_HIGH
+__APIREL__/api_cxx/memp_set_priority.html__OCT__DB_PRIORITY_VERY_HIGH DbMpoolFile::set_priority@DB_PRIORITY_VERY_HIGH
+__APIREL__/api_cxx/memp_stat.html__OCT__2 @DbEnv::memp_stat
+__APIREL__/api_cxx/memp_stat.html__OCT__DB_STAT_CLEAR DbEnv::memp_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/memp_sync.html__OCT__2 @DbEnv::memp_sync
+__APIREL__/api_cxx/memp_trickle.html__OCT__2 @DbEnv::memp_trickle
+__APIREL__/api_cxx/mempfile_class.html__OCT__2 @DbMpoolFile
+__APIREL__/api_cxx/memp_fclose.html__OCT__2 @DbMpoolFile::close
+__APIREL__/api_cxx/memp_fcreate.html__OCT__2 @DbEnv::memp_fcreate
+__APIREL__/api_cxx/memp_fget.html__OCT__2 @DbMpoolFile::get
+__APIREL__/api_cxx/memp_fget.html__OCT__3 @DB_PAGE_NOTFOUND
+__APIREL__/api_cxx/memp_fget.html__OCT__DB_MPOOL_CREATE DbMpoolFile::get@DB_MPOOL_CREATE
+__APIREL__/api_cxx/memp_fget.html__OCT__DB_MPOOL_LAST DbMpoolFile::get@DB_MPOOL_LAST
+__APIREL__/api_cxx/memp_fget.html__OCT__DB_MPOOL_NEW DbMpoolFile::get@DB_MPOOL_NEW
+__APIREL__/api_cxx/memp_fopen.html__OCT__2 @DbMpoolFile::open
+__APIREL__/api_cxx/memp_fopen.html__OCT__DB_CREATE DbMpoolFile::open@DB_CREATE
+__APIREL__/api_cxx/memp_fopen.html__OCT__3 turn off system @buffering
+__APIREL__/api_cxx/memp_fopen.html__OCT__DB_DIRECT DbMpoolFile::open@DB_DIRECT
+__APIREL__/api_cxx/memp_fopen.html__OCT__DB_NOMMAP DbMpoolFile::open@DB_NOMMAP
+__APIREL__/api_cxx/memp_fopen.html__OCT__DB_ODDFILESIZE DbMpoolFile::open@DB_ODDFILESIZE
+__APIREL__/api_cxx/memp_fopen.html__OCT__DB_RDONLY DbMpoolFile::open@DB_RDONLY
+__APIREL__/api_cxx/memp_fput.html__OCT__2 @DbMpoolFile::put
+__APIREL__/api_cxx/memp_fput.html__OCT__DB_MPOOL_CLEAN DbMpoolFile::put@DB_MPOOL_CLEAN
+__APIREL__/api_cxx/memp_fput.html__OCT__DB_MPOOL_DIRTY DbMpoolFile::put@DB_MPOOL_DIRTY
+__APIREL__/api_cxx/memp_fput.html__OCT__DB_MPOOL_DISCARD DbMpoolFile::put@DB_MPOOL_DISCARD
+__APIREL__/api_cxx/memp_fset.html__OCT__2 @DbMpoolFile::set
+__APIREL__/api_cxx/memp_fset.html__OCT__DB_MPOOL_CLEAN DbMpoolFile::set@DB_MPOOL_CLEAN
+__APIREL__/api_cxx/memp_fset.html__OCT__DB_MPOOL_DIRTY DbMpoolFile::set@DB_MPOOL_DIRTY
+__APIREL__/api_cxx/memp_fset.html__OCT__DB_MPOOL_DISCARD DbMpoolFile::set@DB_MPOOL_DISCARD
+__APIREL__/api_cxx/memp_fsync.html__OCT__2 @DbMpoolFile::sync
+__APIREL__/api_cxx/memp_register.html__OCT__2 @DbEnv::memp_register
+__APIREL__/api_cxx/memp_set_clear_len.html__OCT__2 @DbMpoolFile::set_clear_len
+__APIREL__/api_cxx/memp_set_clear_len.html__OCT__3 @DbMpoolFile::get_clear_len
+__APIREL__/api_cxx/memp_set_fileid.html__OCT__2 @DbMpoolFile::set_fileid
+__APIREL__/api_cxx/memp_set_fileid.html__OCT__3 @DbMpoolFile::get_fileid
+__APIREL__/api_cxx/memp_set_ftype.html__OCT__2 @DbMpoolFile::set_ftype
+__APIREL__/api_cxx/memp_set_ftype.html__OCT__3 @DbMpoolFile::get_ftype
+__APIREL__/api_cxx/memp_set_lsn_offset.html__OCT__2 @DbMpoolFile::set_lsn_offset
+__APIREL__/api_cxx/memp_set_lsn_offset.html__OCT__3 @DbMpoolFile::get_lsn_offset
+__APIREL__/api_cxx/memp_set_pgcookie.html__OCT__2 @DbMpoolFile::set_pgcookie
+__APIREL__/api_cxx/memp_set_pgcookie.html__OCT__3 @DbMpoolFile::get_pgcookie
+__APIREL__/api_cxx/memp_class.html__OCT__2 @DbMemoryException
+__APIREL__/api_cxx/rep_elect.html__OCT__2 @DbEnv::rep_elect
+__APIREL__/api_cxx/rep_elect.html__OCT__3 @DB_REP_UNAVAIL
+__APIREL__/api_cxx/rep_limit.html__OCT__2 @DbEnv::set_rep_limit
+__APIREL__/api_cxx/rep_limit.html__OCT__3 @DbEnv::get_rep_limit
+__APIREL__/api_cxx/rep_message.html__OCT__2 @DbEnv::rep_process_message
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_DUPMASTER DbEnv::rep_process_message@DB_REP_DUPMASTER
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_HOLDELECTION DbEnv::rep_process_message@DB_REP_HOLDELECTION
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_ISPERM DbEnv::rep_process_message@DB_REP_ISPERM
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_NEWMASTER DbEnv::rep_process_message@DB_REP_NEWMASTER
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_NEWSITE DbEnv::rep_process_message@DB_REP_NEWSITE
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_NOTPERM DbEnv::rep_process_message@DB_REP_NOTPERM
+__APIREL__/api_cxx/rep_message.html__OCT__DB_REP_OUTDATED DbEnv::rep_process_message@DB_REP_OUTDATED
+__APIREL__/api_cxx/rep_start.html__OCT__2 @DbEnv::rep_start
+__APIREL__/api_cxx/rep_start.html__OCT__DB_REP_CLIENT DbEnv::rep_start@DB_REP_CLIENT
+__APIREL__/api_cxx/rep_start.html__OCT__DB_REP_LOGSONLY DbEnv::rep_start@DB_REP_LOGSONLY
+__APIREL__/api_cxx/rep_start.html__OCT__DB_REP_MASTER DbEnv::rep_start@DB_REP_MASTER
+__APIREL__/api_cxx/rep_stat.html__OCT__2 @DbEnv::rep_stat
+__APIREL__/api_cxx/rep_stat.html__OCT__DB_STAT_CLEAR DbEnv::rep_stat@DB_STAT_CLEAR
+__APIREL__/api_cxx/rep_transport.html__OCT__2 @DbEnv::set_rep_transport
+__APIREL__/api_cxx/rep_transport.html__OCT__3 @DB_EID_BROADCAST
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_NOBUFFER DbEnv::set_rep_transport@DB_REP_NOBUFFER
+__APIREL__/api_cxx/rep_transport.html__OCT__DB_REP_PERMANENT DbEnv::set_rep_transport@DB_REP_PERMANENT
+__APIREL__/api_cxx/env_set_tx_max.html__OCT__2 @DbEnv::set_tx_max
+__APIREL__/api_cxx/env_set_tx_max.html__OCT__3 @DbEnv::get_tx_max
+__APIREL__/api_cxx/env_set_tx_timestamp.html__OCT__2 @DbEnv::set_tx_timestamp
+__APIREL__/api_cxx/env_set_tx_timestamp.html__OCT__3 @DbEnv::get_tx_timestamp
+__APIREL__/api_cxx/txn_abort.html__OCT__2 @DbTxn::abort
+__APIREL__/api_cxx/txn_begin.html__OCT__2 @DbEnv::txn_begin
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_DIRTY_READ DbEnv::txn_begin@DB_DIRTY_READ
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_TXN_NOSYNC DbEnv::txn_begin@DB_TXN_NOSYNC
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_TXN_NOWAIT DbEnv::txn_begin@DB_TXN_NOWAIT
+__APIREL__/api_cxx/txn_begin.html__OCT__DB_TXN_SYNC DbEnv::txn_begin@DB_TXN_SYNC
+__APIREL__/api_cxx/txn_checkpoint.html__OCT__2 @DbEnv::txn_checkpoint
+__APIREL__/api_cxx/txn_checkpoint.html__OCT__DB_FORCE DbEnv::txn_checkpoint@DB_FORCE
+__APIREL__/api_cxx/txn_class.html__OCT__2 @DbTxn
+__APIREL__/api_cxx/txn_commit.html__OCT__2 @DbTxn::commit
+__APIREL__/api_cxx/txn_commit.html__OCT__DB_TXN_NOSYNC DbTxn::commit@DB_TXN_NOSYNC
+__APIREL__/api_cxx/txn_commit.html__OCT__DB_TXN_SYNC DbTxn::commit@DB_TXN_SYNC
+__APIREL__/api_cxx/txn_discard.html__OCT__2 @DbTxn::discard
+__APIREL__/api_cxx/txn_id.html__OCT__2 @DbTxn::id
+__APIREL__/api_cxx/txn_prepare.html__OCT__2 @DbTxn::prepare
+__APIREL__/api_cxx/txn_prepare.html__OCT__3 @DB_XIDDATASIZE
+__APIREL__/api_cxx/txn_recover.html__OCT__2 @DbEnv::txn_recover
+__APIREL__/api_cxx/txn_recover.html__OCT__DB_FIRST DbEnv::txn_recover@DB_FIRST
+__APIREL__/api_cxx/txn_recover.html__OCT__DB_NEXT DbEnv::txn_recover@DB_NEXT
+__APIREL__/api_cxx/txn_set_timeout.html__OCT__2 @DbTxn::set_timeout
+__APIREL__/api_cxx/txn_set_timeout.html__OCT__DB_SET_LOCK_TIMEOUT DbTxn::set_timeout@DB_SET_LOCK_TIMEOUT
+__APIREL__/api_cxx/txn_set_timeout.html__OCT__DB_SET_TXN_TIMEOUT DbTxn::set_timeout@DB_SET_TXN_TIMEOUT
+__APIREL__/api_cxx/txn_stat.html__OCT__2 @DbEnv::txn_stat
+__APIREL__/api_cxx/txn_stat.html__OCT__DB_STAT_CLEAR DbEnv::txn_stat@DB_STAT_CLEAR
diff --git a/db/docs/api_cxx/rep_elect.html b/db/docs/api_cxx/rep_elect.html
index d6d0d08c5..eda1a9ff3 100644
--- a/db/docs/api_cxx/rep_elect.html
+++ b/db/docs/api_cxx/rep_elect.html
@@ -1,21 +1,22 @@
-<!--Id: rep_elect.so,v 1.8 2002/08/29 03:25:54 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_elect.so,v 1.18 2003/11/08 19:17:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::rep_elect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::rep_elect</h1>
+<h3>DbEnv::rep_elect</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,10 +27,30 @@ int
DbEnv::rep_elect(int nsites,
int priority, u_int32_t timeout, int *envid);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_elect</h3>
<p>The DbEnv::rep_elect method holds an election for the master of a replication
-group, returning the new master's ID in the <b>envid</b> parameter.
-<p>The <b>nsites</b> parameter indicates the number of environments that
+group.</p>
+<p>If the election is successful, the new master's ID may be the ID of the
+previous master, or the ID of the current environment. The application
+is responsible for adjusting its usage of the other environments in the
+replication group, including directing all database updates to the newly
+selected master, in accordance with the results of this election.</p>
+<p>The thread of control that calls the DbEnv::rep_elect method must not be the
+thread of control that processes incoming messages; processing the
+incoming messages is necessary to successfully complete an election.</p>
+<p>The DbEnv::rep_elect method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter references memory into which
+ the newly elected master's ID is copied.
+<p><dt><b>nsites</b><dd>
+The <b>nsites</b> parameter indicates the number of environments that
the application believes are in the replication group. This number is
used by Berkeley DB to avoid having two masters active simultaneously, even
in the case of a network partition. During an election, a new master
@@ -38,46 +59,36 @@ the new master. Thus, in the face of a network partition, the side of
the partition with more than half the environments will elect a new
master and continue, while the environments communicating with fewer
than half the other environments will fail to find a new master.
-<p>The <b>priority</b> parameter is the priority of this environment. It
+<p><dt><b>priority</b><dd>
+The <b>priority</b> parameter is the priority of this environment. It
must be a positive integer, or 0 if this environment is not permitted
to become a master (see <a href="../ref/rep/pri.html">Replication
environment priorities</a> for more information).
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter specifies a timeout period for an election.
+If the election has not completed after <b>timeout</b> microseconds, the
+election will fail.
+</dl>
<a name="3"><!--meow--></a>
-<p>The <b>timeout</b> parameter specifies a timeout period for an
-election. If the election has not completed after <b>timeout</b>
-microseconds, the thread will return DB_REP_UNAVAIL.
-<p>The DbEnv::rep_elect method either returns successfully, with the new
-master's environment ID in the memory pointed to by the <b>envid</b>
-parameter, or it will return DB_REP_UNAVAIL if the participating
-group members were unable to elect a new master for any reason. In the
-event of a successful return, the new master's ID may be the ID of the
-previous master, or the ID of the current environment. The application
-is responsible for adjusting its usage of the other environments in the
-replication group, including directing all database updates to the newly
-selected master, in accordance with the results of this election.
-<p>The thread of control that calls the DbEnv::rep_elect method must not be the
-thread of control that processes incoming messages; processing the
-incoming messages is necessary to successfully complete an election.
-<p>The DbEnv::rep_elect method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::rep_elect method may fail and throw an exception or return a non-zero error for the following conditions:
+<h3>Errors</h3>
+<p>The DbEnv::rep_elect method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>DB_REP_UNAVAIL<dd>The replication group was unable to elect a master.
+<p><dt>DB_REP_UNAVAIL<dd>The replication group was unable to elect a master, or was unable to
+complete the election in the specified <b>timeout</b> period.
</dl>
-<p>The DbEnv::rep_elect method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::rep_elect method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_limit.html b/db/docs/api_cxx/rep_limit.html
index 166840b7e..f058f9d10 100644
--- a/db/docs/api_cxx/rep_limit.html
+++ b/db/docs/api_cxx/rep_limit.html
@@ -1,21 +1,22 @@
-<!--Id: rep_limit.so,v 1.2 2002/07/13 18:48:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_limit.so,v 1.16 2003/11/18 13:55:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_rep_limit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_rep_limit</h1>
+<h3>DbEnv::set_rep_limit</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,36 +25,60 @@
<p>
int
DbEnv::set_rep_limit(u_int32_t gbytes, u_int32_t bytes);
+<p>
+int
+DbEnv::get_rep_limit(u_int32_t *gbytesp, u_int32_t *bytesp);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::set_rep_limit method imposes a limit on the amount of data that will
-be transmitted from a site during the course of a single call to
-<a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method.
-<p>The <b>gbytes</b> and <b>bytes</b> parameters together represent the
-maximum number of bytes that can be sent during a single call to
-<a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method.
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_rep_limit</h3>
+<a name="3"><!--meow--></a>
+<p>The DbEnv::set_rep_limit method imposes a byte-count limit on the amount of data
+that will be transmitted from a site in a single call to <a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method.</p>
<p>The DbEnv::set_rep_limit method configures a database environment, not only operations
-performed using the specified <a href="../api_cxx/dbenv_class.html">DbEnv</a> handle.
-<p>The DbEnv::set_rep_limit interface may be called at any time during the life of
-the application.
-<p>The DbEnv::set_rep_limit method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_rep_limit method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_rep_limit method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_cxx/rep_start.html">DbEnv::rep_start</a>,
-<a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>,
-<a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a>
-and
-<a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a>.
+performed using the specified <a href="../api_cxx/env_class.html">DbEnv</a> handle.</p>
+<p>The DbEnv::set_rep_limit method may not be called before the <a href="../api_cxx/env_open.html">DbEnv::open</a> method has
+been called.</p>
+<p>The DbEnv::set_rep_limit method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytes</b><dd>
+The <b>gbytes</b> and <b>bytes</b> parameters specify the maximum
+number of bytes that will be sent in a single call to <a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method.
+<p><dt><b>gbytes</b><dd>
+The <b>gbytes</b> and <b>bytes</b> parameters specify the maximum
+number of bytes that will be sent in a single call to <a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a> method.
+</dl>
+<hr size=1 noshade>
+<h3>Description: dbenv_get_rep_limit</h3>
+<p>The DbEnv::get_rep_limit method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::get_rep_limit method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>bytesp</b><dd>
+The <b>bytesp</b> parameter references memory into which
+ the additional bytes of memory in the current transmit limit is copied.
+<p><dt><b>gbytesp</b><dd>
+The <b>gbytesp</b> parameter references memory into which
+ the gigabytes of memory in the in the current transmit limit is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_list.html b/db/docs/api_cxx/rep_list.html
index 84d53ca57..21c9cb0bf 100644
--- a/db/docs/api_cxx/rep_list.html
+++ b/db/docs/api_cxx/rep_list.html
@@ -1,17 +1,17 @@
-<!--Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Replication and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Replication and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Replication and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Replication and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a></td><td>Configure replication transport</td></tr>
<tr><td><a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a></td><td>Hold a replication election</td></tr>
@@ -20,6 +20,6 @@
<tr><td><a href="../api_cxx/rep_start.html">DbEnv::rep_start</a></td><td>Configure an environment for replication</td></tr>
<tr><td><a href="../api_cxx/rep_stat.html">DbEnv::rep_stat</a></td><td>Replication statistics</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_message.html b/db/docs/api_cxx/rep_message.html
index c666bad3d..d2f2c7409 100644
--- a/db/docs/api_cxx/rep_message.html
+++ b/db/docs/api_cxx/rep_message.html
@@ -1,21 +1,22 @@
-<!--Id: rep_message.so,v 1.11 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_message.so,v 1.27 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::rep_process_message</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::rep_process_message</h1>
+<h3>DbEnv::rep_process_message</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,66 +24,111 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbEnv::rep_process_message(Dbt *control, Dbt *rec, int *envid)
+DbEnv::rep_process_message(Dbt *control, Dbt *rec, int *envid, DbLsn *ret_lsnp)
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::rep_process_message method processes an incoming replication
-message sent by a member of the replication group to the local database
-environment.
-<p>The <b>rec</b> and <b>control</b> parameters should reference a copy
-of the parameters specified by Berkeley DB for the <b>rec</b> and
-<b>control</b> parameters on the sending environment.
-<p>The <b>envid</b> parameter should contain the local identifier that
-corresponds to the environment that sent the message to be processed
-(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
-information).
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_process_message</h3>
+<p>The DbEnv::rep_process_message method processes an incoming replication message sent
+by a member of the replication group to the local database environment.</p>
<p>For implementation reasons, all incoming replication messages must be
processed using the same <a href="../api_cxx/env_class.html">DbEnv</a> handle. It is not required that
a single thread of control process all messages, only that all threads
-of control processing messages use the same handle.
+of control processing messages use the same handle.</p>
+<p>The DbEnv::rep_process_message method has additional return values:</p>
+<p><dl compact>
+<p><dt><a name="DB_REP_DUPMASTER">DB_REP_DUPMASTER</a><dd>
+<p>
+The DbEnv::rep_process_message method
+will either return DB_REP_DUPMASTER or
+throw an exception that encapsulates DB_REP_DUPMASTER if the replication group has more than one master.
+The application should reconfigure itself as a client by calling the
+<a href="../api_cxx/rep_start.html">DbEnv::rep_start</a> method, and then call for an election by calling
+<a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>.
+</p>
+<p><dt><a name="DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a><dd>
+<p>
+The DbEnv::rep_process_message method
+will either return DB_REP_HOLDELECTION or
+throw an exception that encapsulates DB_REP_HOLDELECTION if an election is needed.
+The application should call for an election by calling <a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>.
+</p>
+<p><dt><a name="DB_REP_ISPERM">DB_REP_ISPERM</a><dd>
+<p>
+The DbEnv::rep_process_message method will return DB_REP_ISPERM if processing this message results in the processing of records
+that are permanent.
+The maximum LSN of the permanent records stored is returned.
+</p>
+<p><dt><a name="DB_REP_NEWMASTER">DB_REP_NEWMASTER</a><dd>
<p>
-If a new master has been elected, the DbEnv::rep_process_message method will return DB_REP_NEWMASTER.
+The DbEnv::rep_process_message method will return DB_REP_NEWMASTER if a new master has been elected.
The <b>envid</b> parameter contains the environment ID of the new
master. If the recipient of this error return has been made master, it
is the application's responsibility to begin acting as the master
environment.
+</p>
+<p><dt><a name="DB_REP_NEWSITE">DB_REP_NEWSITE</a><dd>
<p>
-If the system received contact information from a new environment, the DbEnv::rep_process_message method will return DB_REP_NEWSITE.
+The DbEnv::rep_process_message method will return DB_REP_NEWSITE if the system received contact information from a new environment.
The <b>rec</b> parameter contains the opaque data specified in the
<b>cdata</b> parameter to the <a href="../api_cxx/rep_start.html">DbEnv::rep_start</a>. The application
should take whatever action is needed to establish a communication
channel with this new environment.
+</p>
+<p><dt><a name="DB_REP_NOTPERM">DB_REP_NOTPERM</a><dd>
<p>
-If the replication group has more than one master, the DbEnv::rep_process_message method either returns DB_REP_DUPMASTER or throws an exception that encapsulates DB_REP_DUPMASTER.
-The application should reconfigure itself as a client by calling the
-<a href="../api_cxx/rep_start.html">DbEnv::rep_start</a> method, and then call for an election by calling
-<a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>.
+The DbEnv::rep_process_message method will return DB_REP_NOTPERM if a message carrying a <a href="../api_cxx/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag was processed
+successfully, but was not written to disk.
+The LSN of this record is returned.
+The application should take whatever action is deemed necessary to
+retain its recoverability characteristics.
+</p>
+<p><dt><a name="DB_REP_OUTDATED">DB_REP_OUTDATED</a><dd>
<p>
-If an election is needed, the DbEnv::rep_process_message method either returns DB_REP_HOLDELECTION or throws an exception that encapsulates DB_REP_HOLDELECTION.
-The application should call for an election by
-calling <a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>.
-<p>
-If the current environment's logs are too far out of date with respect
-to the master to be automatically synchronized, the DbEnv::rep_process_message method either returns DB_REP_OUTDATED or throws an exception that encapsulates DB_REP_OUTDATED. The
-application should copy over a hot backup of the environment, run
+The DbEnv::rep_process_message method
+will either return DB_REP_OUTDATED or
+throw an exception that encapsulates DB_REP_OUTDATED if the current environment's logs are too far out of date with respect
+to the master to be automatically synchronized.
+The application should copy over a hot backup of the environment, run
recovery, and restart the client.
-<p>
-Otherwise, the DbEnv::rep_process_message method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::rep_process_message method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::rep_process_message method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+</p>
+</dl>
+<p>Unless otherwise specified, the DbEnv::rep_process_message method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>control</b><dd>
+The <b>control</b> parameter should reference a copy of the
+<b>control</b> parameter specified by Berkeley DB on the sending
+environment.
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter should contain the local identifier that
+corresponds to the environment that sent the message to be processed
+(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
+information).
+<p><dt><b>rec</b><dd>
+The <b>rec</b> parameter should reference a copy of the <b>rec</b>
+parameter specified by Berkeley DB on the sending environment.
+<p><dt><b>ret_lsn</b><dd>
+If DbEnv::rep_process_message method returns DB_REP_NOTPERM then the
+<b>ret_lsnp</b> parameter will
+contain the log sequence number of this permanent log message that could
+not be written to disk. If DbEnv::rep_process_message method returns
+DB_REP_ISPERM then the <b>ret_lsnp</b> parameter will contain largest log sequence number of the
+permanent records that are now written to disk as a result of processing
+this message. In all other cases the value of <b>ret_lsnp</b> is undefined.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_start.html b/db/docs/api_cxx/rep_start.html
index 167438297..d5ad2119b 100644
--- a/db/docs/api_cxx/rep_start.html
+++ b/db/docs/api_cxx/rep_start.html
@@ -1,21 +1,22 @@
-<!--Id: rep_start.so,v 1.5 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_start.so,v 1.14 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::rep_start</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::rep_start</h1>
+<h3>DbEnv::rep_start</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,51 +26,60 @@
int
DbEnv::rep_start(Dbt *cdata, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_start</h3>
<p>The DbEnv::rep_start method configures the database environment as a client
or master in a group of replicated database environments. Replication
master environments are the only database environments where replicated
databases may be modified. Replication client environments are
read-only as long as they are clients. Replication client environments
may be upgraded to be replication master environments in the case that
-the current master fails or there is no master present.
+the current master fails or there is no master present.</p>
<p>The enclosing database environment must already have been opened by
calling the <a href="../api_cxx/env_open.html">DbEnv::open</a> method and must already have been configured
-to send replication messages by calling the <a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a> method.
-<p>The <b>cdata</b> parameter is an opaque data item that is sent over
+to send replication messages by calling the <a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a> method.</p>
+<p>The DbEnv::rep_start method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>cdata</b><dd>
+The <b>cdata</b> parameter is an opaque data item that is sent over
the communication infrastructure when the client or master comes online
(see <a href="../ref/rep/newsite.html">Connecting to a new site</a> for
more information). If no such information is useful, <b>cdata</b>
should be NULL.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_REP_CLIENT">DB_REP_CLIENT</a><dd>Configure the environment as a replication client.
<p><dt><a name="DB_REP_LOGSONLY">DB_REP_LOGSONLY</a><dd>Configure the environment as a log files-only client.
<p><dt><a name="DB_REP_MASTER">DB_REP_MASTER</a><dd>Configure the environment as a replication master.
</dl>
-<p>The DbEnv::rep_start method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::rep_start method may fail and throw an exception or return a non-zero error for the following conditions:
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::rep_start method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The environment was not already configured to communicate with a
-replication group by a call to <a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a>.
-<p>The environment was not already opened.
+<p><dt>EINVAL<dd>If the database environment was not already configured to communicate with
+a replication group by a call to <a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a>;
+the database environment was not already opened; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::rep_start method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::rep_start method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_stat.html b/db/docs/api_cxx/rep_stat.html
index a686719cd..c79f68019 100644
--- a/db/docs/api_cxx/rep_stat.html
+++ b/db/docs/api_cxx/rep_stat.html
@@ -1,21 +1,22 @@
-<!--Id: rep_stat.so,v 10.7 2002/07/13 18:09:07 margo Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_stat.so,v 10.23 2003/11/08 19:17:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::rep_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::rep_stat</h1>
+<h3>DbEnv::rep_stat</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,38 +26,36 @@
int
DbEnv::rep_stat(DB_REP_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::rep_stat method returns the replication subsystem statistics.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
-</dl>
+<hr size=1 noshade>
+<h3>Description: DbEnv::rep_stat</h3>
+<p>The DbEnv::rep_stat method returns the replication subsystem statistics.</p>
<p>The DbEnv::rep_stat method creates a statistical structure of type
DB_REP_STAT and copies a pointer to it into a user-specified memory
-location.
-<p>Statistical structures are created in allocated memory. If application-specific allocation
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
information), they are used to allocate the memory; otherwise, the
-library <b>malloc</b>(3) interface is used. The caller is
+standard C library <b>malloc</b>(3) is used. The caller is
responsible for deallocating the memory. To deallocate the memory, free
the memory reference; references inside the returned memory need not be
-individually freed.
-<p>The following DB_REP_STAT fields will be filled in:
+individually freed.</p>
+<p>The following DB_REP_STAT fields will be filled in:</p>
<p><dl compact>
-<dt>u_int32_t st_stat;<dd>The current replication mode. Set to <a href="../api_cxx/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
+<dt>u_int32_t st_status;<dd>The current replication mode. Set to <a href="../api_cxx/rep_start.html#DB_REP_MASTER">DB_REP_MASTER</a> if the
environment is a replication master, <a href="../api_cxx/rep_start.html#DB_REP_CLIENT">DB_REP_CLIENT</a> if the
environment is a replication client, <a href="../api_cxx/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a> if the
environment is a log-files-only replica, or 0 if replication is not
configured.
<dt>DB_LSN st_next_lsn;<dd>In replication environments configured as masters, the next LSN expected.
In replication environments configured as clients, the next LSN to be used.
-<dt>DB_LSN st_waiting_lsn;<dd>The LSN of the first missed log record being waited for, or 0 if no log
-records are currently missing.
+<dt>DB_LSN st_waiting_lsn;<dd>The LSN of the first log record we have after missing log records
+being waited for, or 0 if no log records are currently missing.
<dt>u_int32_t st_dupmasters;<dd>The number of duplicate master conditions detected.
<dt>u_int32_t st_env_id;<dd>The current environment ID.
<dt>u_int32_t st_env_priority;<dd>The current environment priority.
<dt>u_int32_t st_gen;<dd>The current generation number.
+<dt>u_int32_t st_in_recovery;<dd>The site is currently in client recovery. When this field is set, LSN
+values are not authoritative.
<dt>u_int32_t st_log_duplicated;<dd>The number of duplicate log records received.
<dt>u_int32_t st_log_queued;<dd>The number of log records currently queued.
<dt>u_int32_t st_log_queued_max;<dd>The maximum number of log records ever queued at once.
@@ -71,6 +70,7 @@ records are currently missing.
<dt>u_int32_t st_msgs_send_failures;<dd>The number of failed message sends.
<dt>u_int32_t st_msgs_sent;<dd>The number of messages sent.
<dt>u_int32_t st_newsites;<dd>The number of new site messages received.
+<dt>int st_nsites;<dd>The number of sites believed to be in the replication group.
<dt>u_int32_t st_outdated;<dd>The number of outdated conditions detected.
<dt>u_int32_t st_txns_applied;<dd>The number of transactions applied.
<dt>u_int32_t st_elections;<dd>The number of elections held.
@@ -87,24 +87,42 @@ to a single call to <a href="../api_cxx/rep_message.html">DbEnv::rep_process_mes
<dt>u_int32_t st_election_tiebreaker;<dd>The election tiebreaker value.
<dt>u_int32_t st_election_votes;<dd>The votes received this election round.
</dl>
-<p>The DbEnv::rep_stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::rep_stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::rep_stat method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_cxx/rep_start.html">DbEnv::rep_start</a>,
-<a href="../api_cxx/rep_elect.html">DbEnv::rep_elect</a>,
-<a href="../api_cxx/rep_message.html">DbEnv::rep_process_message</a>
-and
-<a href="../api_cxx/rep_transport.html">DbEnv::set_rep_transport</a>.
+<p>The DbEnv::rep_stat method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
+</dl>
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::rep_stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>
+<h3>See Also</h3>
+<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/rep_transport.html b/db/docs/api_cxx/rep_transport.html
index f530e4114..4ba4e5f46 100644
--- a/db/docs/api_cxx/rep_transport.html
+++ b/db/docs/api_cxx/rep_transport.html
@@ -1,21 +1,22 @@
-<!--Id: rep_transport.so,v 1.9 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rep_transport.so,v 1.30 2003/11/19 04:07:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::set_rep_transport</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::set_rep_transport</h1>
+<h3>DbEnv::set_rep_transport</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,37 +26,60 @@
int
DbEnv::set_rep_transport(int envid,
int (*send)(DB_ENV *dbenv,
- const Dbt *control, const Dbt *rec, int envid, u_int32_t flags));
+ const Dbt *control, const Dbt *rec, const DbLsn *lsnp,
+ int envid, u_int32_t flags));
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::set_rep_transport</h3>
<p>The DbEnv::set_rep_transport method initializes the communication infrastructure
-for a database environment participating in a replicated application.
-<p>The <b>envid</b> parameter is the local environment's ID. It must be
+for a database environment participating in a replicated application.</p>
+<p>The DbEnv::set_rep_transport method configures operations performed using the specified
+<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
+database environment.</p>
+<p>The DbEnv::set_rep_transport method may be called at any time during the life of the
+application.</p>
+<p>The DbEnv::set_rep_transport method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>envid</b><dd>
+The <b>envid</b> parameter is the local environment's ID. It must be
a positive integer and uniquely identify this Berkeley DB database environment
(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
information).
-<p>The <b>send</b> parameter is a callback interface used to transmit data
-using the replication application's communication infrastructure. The
-parameters to <b>send</b> are as follows:
+<p><dt><b>send</b><dd>
+The <b>send</b> callback function is used to transmit data using the
+replication application's communication infrastructure. The parameters
+to <b>send</b> are as follows:
<p><dl compact>
-<p><dt>dbenv<dd>The enclosing database environment.
-<p><dt>control<dd>The control parameter is the first of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>rec<dd>The rec parameter is the second of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>envid<dd>The <b>envid</b> parameter is a positive integer identifier that
+<p><dt><b>dbenv</b><dd>The <b>dbenv</b> parameter is the enclosing database environment handle.
+<p><dt><b>control</b><dd>The <b>control</b> parameter is the first of the two data elements to be
+transmitted by the <b>send</b> function.
+<p><dt><b>rec</b><dd>The <b>rec</b> parameter is the second of the two data elements to be
+transmitted by the <b>send</b> function.
+<p><dt><b>lsnp</b><dd>If the type of message to be sent has an LSN associated with it, then
+the <b>lsnp</b> parameter
+contains the LSN of the record being sent. This LSN can be used to
+determine that certain records have been processed successfully by
+clients.
+<p><dt><b>envid</b><dd>The <b>envid</b> parameter is a positive integer identifier that
specifies the replication environment to which the message should be
sent (see <a href="../ref/rep/id.html">Replication environment IDs</a> for
more information).
-<p><a name="3"><!--meow--></a>
-The special identifier DB_EID_BROADCAST indicates that a message
+<a name="3"><!--meow--></a>
+<p>The special identifier DB_EID_BROADCAST indicates that a message
should be broadcast to every environment in the replication group. The
-application may use a true broadcast protocol, or may send the message
-in sequence to each machine with which it is in communication.
-<p><dt>flags<dd>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or
-more of the following values:
+application may use a true broadcast protocol or may send the message
+in sequence to each machine with which it is in communication. In both
+cases, the sending site should not be asked to process the message.</p>
+<p><dt><b>flags</b><dd>The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
+<p><dt><a name="DB_REP_NOBUFFER">DB_REP_NOBUFFER</a><dd>The record being sent should be transmitted immediately and not buffered
+or delayed.
<p><dt><a name="DB_REP_PERMANENT">DB_REP_PERMANENT</a><dd>The record being sent is critical for maintaining database integrity
(for example, the message includes a transaction commit). The
application should take appropriate action to enforce the reliability
@@ -63,35 +87,35 @@ guarantees it has chosen, such as waiting for acknowledgement from one
or more clients.
</dl>
</dl>
-<p>The <b>send</b> interface must return 0 on success and non-zero on
-failure. If the <b>send</b> interface fails, the message being sent
-is necessary to maintain database integrity, and the local log is not
-configured for synchronous flushing, the local log will be flushed;
-otherwise, any error from the <b>send</b> interface will be ignored.
<p>It may sometimes be useful to pass application-specific data to the
-<b>send</b> interface; see <a href="../ref/env/faq.html">Environment
-FAQ</a> for a discussion on how to do this.
-<p>The DbEnv::set_rep_transport method configures operations performed using the specified
-<a href="../api_cxx/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DbEnv::set_rep_transport interface may be called at any time during the life of
-the application.
-<p>The DbEnv::set_rep_transport method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::set_rep_transport method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::set_rep_transport method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<b>send</b> function; see <a href="../ref/env/faq.html">Environment
+FAQ</a> for a discussion on how to do this.</p>
+The <b>send</b> function should not call back down into Berkeley DB. The
+<b>send</b> function must return 0 on success and non-zero on failure.
+If the <b>send</b> function fails, the message being sent is necessary
+to maintain database integrity, and the local log is not configured for
+synchronous flushing, the local log will be flushed; otherwise, any
+error from the <b>send</b> function will be ignored.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::set_rep_transport method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/rep_list.html">Replication and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/runrec_class.html b/db/docs/api_cxx/runrec_class.html
index 2851cbaa0..11b464440 100644
--- a/db/docs/api_cxx/runrec_class.html
+++ b/db/docs/api_cxx/runrec_class.html
@@ -1,21 +1,22 @@
-<!--Id: runrec_class.so,v 10.12 2002/07/29 00:43:14 mjc Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: runrec_class.so,v 10.17 2003/10/24 14:50:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbRunRecoveryException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbRunRecoveryException</h1>
+<h3>DbRunRecoveryException</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,26 +25,20 @@
<p>
class DbRunRecoveryException : public DbException { ... };
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbRunRecoveryException class and
-how it is used by the various Db* classes.
+<hr size=1 noshade>
+<h3>Description: DbRunRecoveryException</h3>
+<p>This information describes the DbRunRecoveryException class and
+how it is used by the various Berkeley DB classes.</p>
<p>Errors can occur in the Berkeley DB library where the only solution is to shut
down the application and run recovery (for example, if Berkeley DB is unable
to allocate heap memory). When a fatal error occurs in Berkeley DB, methods
will throw a DbRunRecoveryException, at which point all
subsequent database calls will also fail in the same way. When this
-occurs, recovery should be performed.
-<h1>Class</h1>
-<a href="../api_cxx/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_cxx/get_errno.html">DbException::get_errno</a>,
-<a href="../api_cxx/what.html">DbException::what</a>
-and
-<a href="../api_cxx/mem_class.html">DbMemoryException</a>
+occurs, recovery should be performed.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_abort.html b/db/docs/api_cxx/txn_abort.html
index f9c863b3e..4475a6f80 100644
--- a/db/docs/api_cxx/txn_abort.html
+++ b/db/docs/api_cxx/txn_abort.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_abort.so,v 10.25 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_abort.so,v 10.38 2003/09/25 15:28:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::abort</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::abort</h1>
+<h3>DbTxn::abort</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,44 +26,33 @@
int
DbTxn::abort();
</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn::abort method causes an abnormal termination of the
-transaction. The log is played backwards and any necessary recovery
-operations are initiated through the <b>recover</b> function specified
-to <a href="../api_cxx/env_open.html">DbEnv::open</a>. After the log processing is completed, all locks
-held by the transaction are released. As is the case for
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>, applications that require strict two-phase locking
-should not explicitly release any locks.
+<hr size=1 noshade>
+<h3>Description: DbTxn::abort</h3>
+<p>The DbTxn::abort method causes an abnormal termination of the transaction.
+The log is played backward, and any necessary undo operations are done
+through the <b>tx_recover</b> function specified to
+<a href="../api_cxx/env_set_app_dispatch.html">DbEnv::set_app_dispatch</a>. Before DbTxn::abort returns, any
+locks held by the transaction will have been released.</p>
<p>In the case of nested transactions, aborting a parent transaction causes
-all children (unresolved or not) of the parent transaction to be aborted.
-<p>Once the DbTxn::abort method returns, the <a href="../api_cxx/txn_class.html">DbTxn</a> handle may not
-be accessed again.
-<p>The DbTxn::abort method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbTxn::abort method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn::abort method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+all children (unresolved or not) of the parent transaction to be aborted.</p>
+<p>All cursors opened within the transaction must be closed before the
+transaction is aborted.</p>
+<p>After DbTxn::abort has been called, regardless of its return, the
+<a href="../api_cxx/txn_class.html">DbTxn</a> handle may not be accessed again.</p>
+<p>The DbTxn::abort method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_begin.html b/db/docs/api_cxx/txn_begin.html
index 4cacec560..b4e384ab5 100644
--- a/db/docs/api_cxx/txn_begin.html
+++ b/db/docs/api_cxx/txn_begin.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_begin.so,v 10.37 2001/01/11 17:47:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_begin.so,v 10.69 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::txn_begin</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::txn_begin</h1>
+<h3>DbEnv::txn_begin</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,73 +26,80 @@
int
DbEnv::txn_begin(DbTxn *parent, DbTxn **tid, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbEnv::txn_begin</h3>
<p>The DbEnv::txn_begin method creates a new transaction in the environment
and copies a pointer to a <a href="../api_cxx/txn_class.html">DbTxn</a> that uniquely identifies it into
-the memory referenced by <b>tid</b>.
-<p>If the <b>parent</b> argument is non-NULL, the new transaction will
-be a nested transaction, with the transaction indicated by
-<b>parent</b> as its parent. Transactions may be
-nested to any level.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+the memory to which <b>tid</b> refers.
+Calling the <a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
+<a href="../api_cxx/txn_commit.html">DbTxn::commit</a> or <a href="../api_cxx/txn_discard.html">DbTxn::discard</a> methods will discard the returned
+handle.</p>
+<p><b>Note: Transactions may only span threads if they do so serially;
+that is, each transaction must be active in only a single thread
+of control at a time. This restriction holds for parents of nested
+transactions as well; not two children may be concurrently active in
+more than one thread of control at any one time.</b></p>
+<p><b>Note: Cursors may not span transactions; that is, each cursor must be
+opened and closed within a single transaction.</b></p>
+<p><b>Note: A parent transaction may not issue any Berkeley DB operations -- except for
+DbEnv::txn_begin, <a href="../api_cxx/txn_abort.html">DbTxn::abort</a> and <a href="../api_cxx/txn_commit.html">DbTxn::commit</a> -- while it has
+active child transactions (child transactions that have not yet been
+committed or aborted).</b></p>
+<p>The DbEnv::txn_begin method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one
+or more of the following values:
<p><dl compact>
+<p><dt><a name="DB_DIRTY_READ">DB_DIRTY_READ</a><dd>All read operations performed by the transaction may read modified but
+not yet committed data. Silently ignored if the <a href="../api_cxx/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a>
+flag was not specified when the underlying database was opened.
<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log when this transaction commits or
prepares. This means the transaction will exhibit the ACI (atomicity,
-consistency and isolation) properties, but not D (durability), i.e.,
+consistency, and isolation) properties, but not D (durability); that is,
database integrity will be maintained but it is possible that this
-transaction may be undone during recovery instead of being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> interface.
+transaction may be undone during recovery.
+<p>This behavior may be set for a Berkeley DB environment using the
+<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> method. Any value specified to this method
+overrides that setting.</p>
<p><dt><a name="DB_TXN_NOWAIT">DB_TXN_NOWAIT</a><dd>If a lock is unavailable for any Berkeley DB operation performed in the context
-of this transaction, return immediately instead of blocking on the lock.
-The error return in the case will be <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>.
+of this transaction, cause the operation to
+return DB_LOCK_DEADLOCK or throw a <a href="../api_cxx/deadlock_class.html">DbDeadlockException</a>
+immediately instead of blocking on the lock.
<p><dt><a name="DB_TXN_SYNC">DB_TXN_SYNC</a><dd>Synchronously flush the log when this transaction commits or prepares.
This means the transaction will exhibit all of the ACID (atomicity,
-consistency and isolation and durability) properties.
+consistency, isolation, and durability) properties.
<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_cxx/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>
-interface.
+<a href="../api_cxx/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the
+<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> method. Any value specified to this method
+overrides that setting.</p>
</dl>
-<p><b>Note: An transaction may not span threads,
-i.e., each transaction must begin and end in the same thread, and each
-transaction may only be used by a single thread.</b>
-<p><b>Note: cursors may not span transactions, i.e., each cursor must be opened
-and closed within a single transaction.</b>
-<p><b>Note: a parent transaction may not issue any Berkeley DB operations, except for
-DbEnv::txn_begin, <a href="../api_cxx/txn_abort.html">DbTxn::abort</a> and <a href="../api_cxx/txn_commit.html">DbTxn::commit</a>, while it has
-active child transactions (child transactions that have not yet been
-committed or aborted).</b>
-<p>The DbEnv::txn_begin method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::txn_begin method may fail and throw an exception or return a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of concurrent transactions has been reached.
+<p><dt><b>parent</b><dd>
+If the <b>parent</b> parameter is non-NULL, the new transaction will
+be a nested transaction, with the transaction indicated by
+<b>parent</b> as its parent. Transactions may be nested to any level.
+In the presence of distributed transactions and two-phase commit, only
+the parental transaction, that is a transaction without a <b>parent</b>
+specified, should be passed as an parameter to <a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>.
</dl>
-<p>The DbEnv::txn_begin method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::txn_begin method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<h3>Errors</h3>
+<p>If the maximum number of concurrent transactions has been reached, the DbEnv::txn_begin method will fail and
+either return ENOMEM or
+throw a <a href="../api_cxx/memp_class.html">DbMemoryException</a> exception.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_checkpoint.html b/db/docs/api_cxx/txn_checkpoint.html
index 3bac70bcc..615710189 100644
--- a/db/docs/api_cxx/txn_checkpoint.html
+++ b/db/docs/api_cxx/txn_checkpoint.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_checkpoint.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_checkpoint.so,v 10.47 2003/11/20 14:55:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::txn_checkpoint</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::txn_checkpoint</h1>
+<h3>DbEnv::txn_checkpoint</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,52 +26,51 @@
int
DbEnv::txn_checkpoint(u_int32_t kbyte, u_int32_t min, u_int32_t flags) const;
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::txn_checkpoint method flushes the underlying memory pool,
-writes a checkpoint record to the log and then flushes the log.
-<p>If either <b>kbyte</b> or <b>min</b> is non-zero, the checkpoint is only
-done if there has been activity since the last checkpoint and either
-more than <b>min</b> minutes have passed since the last checkpoint,
-or if more than <b>kbyte</b> kilobytes of log data have been written since
-the last checkpoint.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DbEnv::txn_checkpoint</h3>
+<p>The DbEnv::txn_checkpoint method flushes the underlying memory pool, writes
+a checkpoint record to the log, and then flushes the log.</p>
+<p>The DbEnv::txn_checkpoint method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
<p><dl compact>
-<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>Force a checkpoint record even if there has been no activity since the
+<p><dt><a name="DB_FORCE">DB_FORCE</a><dd>Force a checkpoint record, even if there has been no activity since the
last checkpoint.
</dl>
-<p>The DbEnv::txn_checkpoint method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, 0 on success, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> if there were pages that needed to be
-written to complete the checkpoint but that <a href="../api_cxx/memp_sync.html">DbEnv::memp_sync</a> was unable
-to write immediately.
-<h1>Errors</h1>
-<p>The DbEnv::txn_checkpoint method may fail and throw an exception or return a non-zero error for the following conditions:
+<p><dt><b>kbyte</b><dd>
+If the <b>kbyte</b> parameter is non-zero, a checkpoint will be done
+if more than <b>kbyte</b> kilobytes of log data have been written since
+the last checkpoint.
+<p><dt><b>min</b><dd>
+If the <b>min</b> parameter is non-zero, a checkpoint will be done if
+more than <b>min</b> minutes have passed since the last checkpoint.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::txn_checkpoint method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
</dl>
-<p>The DbEnv::txn_checkpoint method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::txn_checkpoint method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_class.html b/db/docs/api_cxx/txn_class.html
index 7a335f92a..f7ca97bdc 100644
--- a/db/docs/api_cxx/txn_class.html
+++ b/db/docs/api_cxx/txn_class.html
@@ -1,59 +1,76 @@
-<!--$Id: txn_class.so,v 10.13 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_class.so,v 10.23 2003/09/25 15:28:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn</h1>
+<h3>DbTxn</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-class DbTxn { ... };
+class DbTxn {
+public:
+ DB_TXN *DbTxn::get_DB_TXN();
+ const DB_TXN *DbTxn::get_const_DB_TXN() const;
+ static DbTxn *DbTxn::get_DbTxn(DB_TXN *txn);
+ static const DbTxn *DbTxn::get_const_DbTxn(const DB_TXN *txn);
+ ...
+};
</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the DbTxn class.
-<p>The <a href="../api_cxx/dbenv_class.html">DbEnv</a> transaction methods and the DbTxn class provide
-transaction semantics. Full transaction support is provided by a
-collection of modules that provide interfaces to the services required
-for transaction processing. These services are recovery, concurrency
-control and the management of shared data.
-<p>Transaction semantics can be applied to the access methods described in
-Db through method call parameters.
-<p>The model intended for transactional use (and the one that is used by
-the access methods) is write-ahead logging to record both before- and
-after-images. Locking follows a two-phase protocol, with all locks being
-released at transaction commit.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<hr size=1 noshade>
+<h3>Description: DbTxn</h3>
+<p>The DbTxn object is the handle for a transaction. Methods off
+the DbTxn handle are used to configure, abort and commit the
+transaction. DbTxn handles are provided to <a href="../api_cxx/db_class.html">Db</a> methods
+in order to transactionally protect those database operations.</p>
+<p>DbTxn handles are not free-threaded; transactions handles may
+be used by multiple threads, but only serially, that is, the application
+must serialize access to the DbTxn handle. Once the
+<a href="../api_cxx/txn_abort.html">DbTxn::abort</a> or <a href="../api_cxx/txn_commit.html">DbTxn::commit</a> methods are called, the handle may
+not be accessed again, regardless of the method's return. In addition,
+parent transactions may not issue any Berkeley DB operations while they have
+active child transactions (child transactions that have not yet been
+committed or aborted) except for <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>, <a href="../api_cxx/txn_abort.html">DbTxn::abort</a>
+and <a href="../api_cxx/txn_commit.html">DbTxn::commit</a>.</p>
+<p>Each DbTxn object has an associated DB_TXN struct, which
+is used by the underlying implementation of Berkeley DB and its C-language
+API. The DbTxn::get_DB_TXN method returns a pointer to this struct.
+Given a const DbTxn object, DbTxn::get_const_DB_TXN returns a
+const pointer to the same struct.</p>
+<p>Given a DB_TXN struct, the Db::get_DbTxn method returns the
+corresponding DbTxn object, if there is one. If the
+DB_TXN object was not associated with a DbTxn (that is,
+it was not returned from a call to DbTxn::get_DB_TXN), then the result
+of DbTxn::get_DbTxn is undefined. Given a const DB_TXN struct,
+DbTxn::get_const_DbTxn returns the associated const DbTxn
+object, if there is one.</p>
+<p>These methods may be useful for Berkeley DB applications including both C
+and C++ language software. It should not be necessary to use these
+calls in a purely C++ application.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, DbTxn
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_commit.html b/db/docs/api_cxx/txn_commit.html
index 16e20c253..ed56f1fa4 100644
--- a/db/docs/api_cxx/txn_commit.html
+++ b/db/docs/api_cxx/txn_commit.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_commit.so,v 10.27 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_commit.so,v 10.48 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::commit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::commit</h1>
+<h3>DbTxn::commit</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,64 +26,62 @@
int
DbTxn::commit(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn::commit method ends the transaction. In the case of nested
-transactions, if the transaction is a parent transaction, committing
-the parent transaction causes all unresolved children of the parent to
-be committed.
-<p>In the case of nested transactions, if the transaction is a child
-transaction, its locks are not released, but are acquired by its parent.
-While the commit of the child transaction will succeed, the actual
-resolution of the child transaction is postponed until the parent
-transaction is committed or aborted, i.e., if its parent transaction
-commits, it will be committed, and if its parent transaction aborts, it
-will be aborted.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
+<hr size=1 noshade>
+<h3>Description: DbTxn::commit</h3>
+<p>The DbTxn::commit method ends the transaction.</p>
+<p>In the case of nested transactions, if the transaction is a parent
+transaction, committing the parent transaction causes all unresolved
+children of the parent to be committed. In the case of nested
+transactions, if the transaction is a child transaction, its locks are
+not released, but are acquired by its parent. Although the commit of the
+child transaction will succeed, the actual resolution of the child
+transaction is postponed until the parent transaction is committed or
+aborted; that is, if its parent transaction commits, it will be
+committed; and if its parent transaction aborts, it will be aborted.</p>
+<p>All cursors opened within the transaction must be closed before the
+transaction is committed.</p>
+<p>After DbTxn::commit has been called, regardless of its return, the
+<a href="../api_cxx/txn_class.html">DbTxn</a> handle may not be accessed again. If DbTxn::commit
+encounters an error, the transaction and all child transactions of the
+transaction are aborted.</p>
+<p>The DbTxn::commit method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+one of the following values:
<p><dl compact>
<p><dt><a name="DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log. This means the transaction will
-exhibit the ACI (atomicity, consistency and isolation) properties, but
-not D (durability), i.e., database integrity will be maintained but it is
-possible that this transaction may be undone during recovery instead of
-being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> interface.
+exhibit the ACI (atomicity, consistency, and isolation) properties, but
+not D (durability); that is, database integrity will be maintained, but
+it is possible that this transaction may be undone during recovery.
+<p>This behavior may be set for a Berkeley DB environment using the
+<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> method or for a single transaction using the
+<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a> method. Any value specified to this method overrides
+both of those settings.</p>
<p><dt><a name="DB_TXN_SYNC">DB_TXN_SYNC</a><dd>Synchronously flush the log. This means the transaction will exhibit
-all of the ACID (atomicity, consistency and isolation and durability)
+all of the ACID (atomicity, consistency, isolation, and durability)
properties.
<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_cxx/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a>
-or <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a> interfaces.
+<a href="../api_cxx/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag was specified to the
+<a href="../api_cxx/env_set_flags.html">DbEnv::set_flags</a> method. This behavior may also be set for a single
+transaction using the <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a> method. Any value specified to this
+method overrides both of those settings.</p>
</dl>
-<p>Once the DbTxn::commit method returns, the <a href="../api_cxx/txn_class.html">DbTxn</a> handle may not
-be accessed again. If DbTxn::commit encounters an error, the
-transaction and all child transactions of the transaction are aborted.
-<p>The DbTxn::commit method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbTxn::commit method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn::commit method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_discard.html b/db/docs/api_cxx/txn_discard.html
index ac0d45ec8..7928a8f48 100644
--- a/db/docs/api_cxx/txn_discard.html
+++ b/db/docs/api_cxx/txn_discard.html
@@ -1,20 +1,22 @@
-<!--Id: txn_discard.so,v 10.2 2001/05/05 01:49:17 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: txn_discard.so,v 10.15 2003/10/31 17:25:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::discard</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::discard</h1>
+<h3>DbTxn::discard</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,7 +26,8 @@
int
DbTxn::discard(u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbTxn::discard</h3>
<p>The DbTxn::discard method frees up all the per-process resources
associated with the specified <a href="../api_cxx/txn_class.html">DbTxn</a> handle, neither committing
nor aborting the transaction. This call may be used only after calls
@@ -32,45 +35,39 @@ to <a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a> when there are m
managers recovering transactions in a single Berkeley DB environment. Any
transactions returned by <a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a> that are not handled by
the current global transaction manager should be discarded using
-DbTxn::discard.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbTxn::discard method returns EINVAL if the transaction handle does
-not refer to a transaction that was recovered into a prepared but not
-yet completed state.
-<p>Otherwise, the DbTxn::discard method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbTxn::discard method may fail and throw an exception or return a non-zero error for the following conditions:
+DbTxn::discard.</p>
+<p>The DbTxn::discard method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<p>After DbTxn::discard has been called, regardless of its return, the
+<a href="../api_cxx/txn_class.html">DbTxn</a> handle may not be accessed again.</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter is currently unused, and must be set to 0.
+</dl>
+<h3>Errors</h3>
+<p>The DbTxn::discard method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The transaction handle does not refer to a transaction that was
-recovered into a prepared but not yet completed state.
+<p><dt>EINVAL<dd>If the transaction handle does not refer to a transaction that was
+recovered into a prepared but not yet completed state; or if an
+invalid flag value or parameter was specified.
</dl>
-<p>The DbTxn::discard method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn::discard method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_discard.html">DbTxn::discard</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>,
-<a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a>,
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_id.html b/db/docs/api_cxx/txn_id.html
index 9c14adf1c..cb5005d48 100644
--- a/db/docs/api_cxx/txn_id.html
+++ b/db/docs/api_cxx/txn_id.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_id.so,v 10.12 1999/12/20 08:52:32 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_id.so,v 10.20 2003/10/31 17:25:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::id</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::id</h1>
+<h3>DbTxn::id</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -24,29 +26,21 @@
u_int32_t
DbTxn::id();
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbTxn::id</h3>
<p>The DbTxn::id method returns the unique transaction id associated with the
specified transaction. Locking calls made on behalf of this transaction
should use the value returned from DbTxn::id as the locker parameter
-to the <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> calls.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+to the <a href="../api_cxx/lock_get.html">DbEnv::lock_get</a> or <a href="../api_cxx/lock_vec.html">DbEnv::lock_vec</a> calls.</p>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_list.html b/db/docs/api_cxx/txn_list.html
index b89b980d7..6ca223e55 100644
--- a/db/docs/api_cxx/txn_list.html
+++ b/db/docs/api_cxx/txn_list.html
@@ -1,17 +1,17 @@
-<!--Id: txn_list.so,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn_list.so,v 1.1 2002/08/30 20:02:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB: Transaction Subsystem and Related Methods</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h3>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
<tr><td><a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
@@ -26,6 +26,6 @@
<tr><td><a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a></td><td>Prepare a transaction for commit</td></tr>
<tr><td><a href="../api_cxx/txn_set_timeout.html">DbTxn::set_timeout</a></td><td>Set transaction timeout</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_prepare.html b/db/docs/api_cxx/txn_prepare.html
index de7db8e76..222402bfc 100644
--- a/db/docs/api_cxx/txn_prepare.html
+++ b/db/docs/api_cxx/txn_prepare.html
@@ -1,20 +1,22 @@
-<!--$Id: txn_prepare.so,v 10.17 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_prepare.so,v 10.34 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::prepare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::prepare</h1>
+<h3>DbTxn::prepare</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -22,10 +24,12 @@
#include &lt;db_cxx.h&gt;
<p>
int
-DbTxn::prepare();
+DbTxn::prepare(u_int8_t gid[DB_XIDDATASIZE]);
</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn::prepare method initiates the beginning of a two-phase commit.
+<hr size=1 noshade>
+<h3>Description: DbTxn::prepare</h3>
+<a name="3"><!--meow--></a>
+<p>The DbTxn::prepare method initiates the beginning of a two-phase commit.</p>
<p>In a distributed transaction environment, Berkeley DB can be used as a local
transaction manager. In this case, the distributed transaction manager
must send <i>prepare</i> messages to each local manager. The local
@@ -33,35 +37,34 @@ manager must then issue a DbTxn::prepare and await its successful
return before responding to the distributed transaction manager. Only
after the distributed transaction manager receives successful responses
from all of its <i>prepare</i> messages should it issue any
-<i>commit</i> messages.
-<p>In the case of nested transactions, preparing a parent transaction
-causes all unresolved children of the parent transaction to be prepared.
-<p>The DbTxn::prepare method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbTxn::prepare method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn::prepare method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<i>commit</i> messages.</p>
+<p>In the case of nested transactions, preparing the parent
+causes all unresolved children of the parent transaction to be committed.
+Child transactions should never be explicitly prepared.
+Their fate will be resolved along with their parent's during
+global recovery.</p>
+<p>The DbTxn::prepare method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>gid</b><dd>
+The <b>gid</b> parameter specifies the global transaction ID by which this
+transaction will be known. This global transaction ID will be returned
+in calls to <a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a>, telling the application which global
+transactions must be resolved.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_recover.html b/db/docs/api_cxx/txn_recover.html
index 97c20aa09..342bf0f4a 100644
--- a/db/docs/api_cxx/txn_recover.html
+++ b/db/docs/api_cxx/txn_recover.html
@@ -1,20 +1,22 @@
-<!--Id: txn_recover.so,v 10.6 2001/05/04 14:31:05 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: txn_recover.so,v 10.24 2003/11/08 19:17:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::txn_recover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::txn_recover</h1>
+<h3>DbEnv::txn_recover</h3>
</td>
<td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,65 +25,65 @@
<p>
int
DbEnv::txn_recover(DB_PREPLIST preplist[],
- long count, long *retp, u_int32_t flags);
+ long count, long *retp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::txn_recover interface returns a list of prepared but not
-yet resolved transactions. The DbEnv::txn_recover method should only be
-called after the environment has been recovered.
-<p>On return from DbEnv::txn_recover, the <b>preplist</b> argument will
+<hr size=1 noshade>
+<h3>Description: DbEnv::txn_recover</h3>
+<p>The DbEnv::txn_recover method returns a list of prepared but not yet resolved
+transactions. The DbEnv::txn_recover method should only be called after the
+environment has been recovered. Because database environment state must
+be preserved between recovery and the application calling
+DbEnv::txn_recover, applications must either call DbEnv::txn_recover
+using the same environment handle used when recovery is done, or the
+database environment must not be configured using the <a href="../api_cxx/env_open.html#DB_PRIVATE">DB_PRIVATE</a>
+flag.</p>
+<p>On return from DbEnv::txn_recover, the <b>preplist</b> parameter will
be filled in with a list of transactions that must be resolved by the
application (committed, aborted or discarded). The <b>preplist</b>
-argument is a structure of type DB_PREPLIST; the following DB_PREPLIST
-fields will be filled in:
+parameter is a structure of type DB_PREPLIST; the following DB_PREPLIST
+fields will be filled in:</p>
<p><dl compact>
-<p><dt>DB_TXN *txn;<dd>The transaction handle for the transaction.
-<p><dt>u_int8_t gid[<a href="../api_cxx/txn_prepare.html#DB_XIDDATASIZE">DB_XIDDATASIZE</a>];<dd>The global transaction ID for the transaction. The global transaction
+<dt>DB_TXN * txn;<dd>The transaction handle for the transaction.
+<dt>u_int8_t gid[DB_XIDDATASIZE];<dd>The global transaction ID for the transaction. The global transaction
ID is the one specified when the transaction was prepared. The
application is responsible for ensuring uniqueness among global
transaction IDs.
</dl>
<p>The application must call <a href="../api_cxx/txn_abort.html">DbTxn::abort</a>, <a href="../api_cxx/txn_commit.html">DbTxn::commit</a> or
<a href="../api_cxx/txn_discard.html">DbTxn::discard</a> on each returned <a href="../api_cxx/txn_class.html">DbTxn</a> handle before
-starting any new operations.
-<p>The <b>count</b> parameter specifies the number of available entries
+starting any new operations.</p>
+<p>The DbEnv::txn_recover method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>count</b><dd>
+The <b>count</b> parameter specifies the number of available entries
in the passed-in <b>preplist</b> array. The <b>retp</b> parameter
returns the number of entries DbEnv::txn_recover has filled in, in the
array.
-<p>The <b>flags</b> value must be set to one of the following values:
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
<p><dt><a name="DB_FIRST">DB_FIRST</a><dd>Begin returning a list of prepared, but not yet resolved transactions.
<p><dt><a name="DB_NEXT">DB_NEXT</a><dd>Continue returning a list of prepared, but not yet resolved transactions,
starting where the last call to DbEnv::txn_recover left off.
</dl>
-<p>The DbEnv::txn_recover method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::txn_recover method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::txn_recover method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h1>Class</h1>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_discard.html">DbTxn::discard</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>,
-<a href="../api_cxx/txn_recover.html">DbEnv::txn_recover</a>,
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<p><dt><b>preplist</b><dd>
+The <b>preplist</b> parameter references memory into which
+ the list of transactions to be resolved by the application is copied.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_set_timeout.html b/db/docs/api_cxx/txn_set_timeout.html
index 68d808ca5..1279f8ee2 100644
--- a/db/docs/api_cxx/txn_set_timeout.html
+++ b/db/docs/api_cxx/txn_set_timeout.html
@@ -1,21 +1,22 @@
-<!--Id: txn_set_timeout.so,v 10.8 2002/08/29 03:26:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn_set_timeout.so,v 10.18 2003/11/08 19:17:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbTxn::set_timeout</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1>DbTxn::set_timeout</h1>
+<h3>DbTxn::set_timeout</h3>
</td>
<td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,16 +26,10 @@
u_int32_t
DbTxn::set_timeout(db_timeout_t timeout, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
+<hr size=1 noshade>
+<h3>Description: DbTxn::set_timeout</h3>
<p>The DbTxn::set_timeout method sets timeout values for locks or
-transactions for the specified transaction. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this transaction.
-<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for this transaction.
-</dl>
+transactions for the specified transaction.</p>
<p>Timeouts are checked whenever a thread of control blocks on a lock or
when deadlock detection is performed. (In the case of
DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
@@ -44,34 +39,51 @@ transaction. In either case, it may be a lock requested by the database
access methods underlying the application.) As timeouts are only
checked when the lock request first blocks or when deadlock detection
is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
+detection is performed.</p>
<p>Timeout values may be specified for the database environment as a whole.
-See <a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a> and for more information.
+See <a href="../api_cxx/env_set_timeout.html">DbEnv::set_timeout</a> and for more information.</p>
<p>The DbTxn::set_timeout method configures operations performed on the underlying
transaction, not only operations performed using the specified
-<a href="../api_cxx/txn_class.html">DbTxn</a> handle.
-<p>The DbTxn::set_timeout interface may be called at any time during the life of
-the application.
-<p>The DbTxn::set_timeout method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbTxn::set_timeout method may fail and throw an exception or return a non-zero error for the following conditions:
+<a href="../api_cxx/txn_class.html">DbTxn</a> handle.</p>
+<p>The DbTxn::set_timeout method may be called at any time during the life of the
+application.</p>
+<p>The DbTxn::set_timeout method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to one of the following values:
<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
+<p><dt><a name="DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this transaction.
+<p><dt><a name="DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for this transaction.
+</dl>
+<p><dt><b>timeout</b><dd>
+The <b>timeout</b> parameter is specified as an unsigned 32-bit number
+of microseconds, limiting the maximum timeout to roughly 71 minutes. A
+value of 0 disables timeouts for the transaction.
</dl>
-<p>The DbTxn::set_timeout method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn::set_timeout method may fail and
-either return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw a
-<a href="../api_cxx/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
+<h3>Errors</h3>
+<p>The DbTxn::set_timeout method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
+<h3>See Also</h3>
<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_cxx/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_cxx/txn_stat.html b/db/docs/api_cxx/txn_stat.html
index 9644a6ae8..d4bef3d85 100644
--- a/db/docs/api_cxx/txn_stat.html
+++ b/db/docs/api_cxx/txn_stat.html
@@ -1,100 +1,110 @@
-<!--$Id: txn_stat.so,v 10.27 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_stat.so,v 10.55 2003/11/27 02:15:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: DbEnv::txn_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>DbEnv::txn_stat</h1>
+<h3>DbEnv::txn_stat</h3>
</td>
-<td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>
#include &lt;db_cxx.h&gt;
<p>
-extern "C" {
- typedef void *(*db_malloc_fcn_type)(size_t);
-};
int
-DbEnv::txn_stat(DB_TXN_STAT **statp, db_malloc_fcn_type db_malloc);
+DbEnv::txn_stat(DB_TXN_STAT **statp, u_int32_t flags);
</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv::txn_stat method
-creates a statistical structure and copies a pointer to it into a
-user-specified memory location.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The transaction region statistics are stored in a structure of type
-DB_TXN_STAT. The following DB_TXN_STAT fields will be filled in:
+<hr size=1 noshade>
+<h3>Description: DbEnv::txn_stat</h3>
+<p>The DbEnv::txn_stat method returns the transaction subsystem statistics.</p>
+<p>The DbEnv::txn_stat method creates a statistical structure of type
+DB_TXN_STAT and copies a pointer to it into a user-specified memory
+location.</p>
+<p>Statistical structures are stored in allocated memory. If application-specific allocation
+routines have been declared (see <a href="../api_cxx/env_set_alloc.html">DbEnv::set_alloc</a> for more
+information), they are used to allocate the memory; otherwise, the
+standard C library <b>malloc</b>(3) is used. The caller is
+responsible for deallocating the memory. To deallocate the memory, free
+the memory reference; references inside the returned memory need not be
+individually freed.</p>
+<p>The following DB_TXN_STAT fields will be filled in:</p>
<p><dl compact>
-<dt><a href="../api_cxx/lsn_class.html">DbLsn</a> st_last_ckp;<dd>The LSN of the last checkpoint.
-<dt><a href="../api_cxx/lsn_class.html">DbLsn</a> st_pending_ckp;<dd>The LSN of any checkpoint that is currently in progress. If
-<b>st_pending_ckp</b> is the same as <b>st_last_ckp</b> there
-is no checkpoint in progress.
+<dt>DbLsn st_last_ckp;<dd>The LSN of the last checkpoint.
<dt>time_t st_time_ckp;<dd>The time the last completed checkpoint finished (as the number of seconds
-since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> interface).
+since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> function).
<dt>u_int32_t st_last_txnid;<dd>The last transaction ID allocated.
-<dt>u_int32_t st_maxtxns;<dd>The maximum number of active transactions possible.
+<dt>u_int32_t st_maxtxns;<dd>The maximum number of active transactions configured.
<dt>u_int32_t st_nactive;<dd>The number of transactions that are currently active.
<dt>u_int32_t st_maxnactive;<dd>The maximum number of active transactions at any one time.
<dt>u_int32_t st_nbegins;<dd>The number of transactions that have begun.
<dt>u_int32_t st_naborts;<dd>The number of transactions that have aborted.
<dt>u_int32_t st_ncommits;<dd>The number of transactions that have committed.
+<dt>u_int32_t st_nrestores;<dd>The number of transactions that have been restored.
<dt>u_int32_t st_regsize;<dd>The size of the region.
<dt>u_int32_t st_region_wait;<dd>The number of times that a thread of control was forced to wait before
obtaining the region lock.
<dt>u_int32_t st_region_nowait;<dd>The number of times that a thread of control was able to obtain
the region lock without waiting.
-<dt>DB_TXN_ACTIVE * st_txnarray;<dd>A pointer to an array of <b>st_nactive</b> DB_TXN_ACTIVE structures,
+<dt>DB_TXN_ACTIVE *st_txnarray;<dd>A pointer to an array of <b>st_nactive</b> DB_TXN_ACTIVE structures,
describing the currently active transactions. The following fields of
the DB_TXN_ACTIVE structure will be filled in:
<p><dl compact>
-<p><dt>u_int32_t txnid;<dd>The transaction ID as returned by <a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>.
+<dt>u_int32_t txnid;<dd>The transaction ID of the transaction.
<dt>u_int32_t parentid;<dd>The transaction ID of the parent transaction (or 0, if no parent).
-<dt><a href="../api_cxx/lsn_class.html">DbLsn</a> lsn;<dd>The log sequence number of the transaction-begin record.
+<dt>DbLsn lsn;<dd>The current log sequence number when the transaction was begun.
+<dt>u_int32_t xa_status;<dd>If the transaction is an XA transaction, the status of the transaction,
+otherwise 0.
+<dt>u_int8_t xid[DB_XIDDATASIZE];<dd>If the transaction is an XA transaction, the transaction's XA ID.
+</dl>
</dl>
+<p>The DbEnv::txn_stat method
+either returns a non-zero error value
+or throws an exception that encapsulates a non-zero error value on
+failure, and returns 0 on success.
+</p>
+<h3>Parameters</h3>
+<p><dl compact>
+<p><dt><b>flags</b><dd>
+The <b>flags</b> parameter must be set to 0 or
+the following value:
+<p><dl compact>
+<p><dt><a name="DB_STAT_CLEAR">DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
</dl>
-<p>The DbEnv::txn_stat method either returns a non-zero error value or throws an exception that
-encapsulates a non-zero error value on failure, and returns 0 on success.
-<h1>Errors</h1>
-<p>The DbEnv::txn_stat method may fail and throw an exception or return a non-zero error for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv::txn_stat method may fail and either
-return <a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> or throw an exception encapsulating
-<a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, in which case all subsequent Berkeley DB calls will fail
-in the same way.
-<h3>Classes</h3>
-<a href="../api_cxx/dbenv_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_cxx/env_set_tx_max.html">DbEnv::set_tx_max</a>,
-<a href="../api_cxx/env_set_tx_recover.html">DbEnv::set_tx_recover</a>,
-<a href="../api_cxx/env_set_tx_timestamp.html">DbEnv::set_tx_timestamp</a>,
-<a href="../api_cxx/txn_abort.html">DbTxn::abort</a>,
-<a href="../api_cxx/txn_begin.html">DbEnv::txn_begin</a>,
-<a href="../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>,
-<a href="../api_cxx/txn_commit.html">DbTxn::commit</a>,
-<a href="../api_cxx/txn_id.html">DbTxn::id</a>,
-<a href="../api_cxx/txn_prepare.html">DbTxn::prepare</a>
-and
-<a href="../api_cxx/txn_stat.html">DbEnv::txn_stat</a>.
+<p><dt><b>statp</b><dd>
+The <b>statp</b> parameter references memory into which
+a pointer to the allocated statistics structure is copied.
+</dl>
+<h3>Errors</h3>
+<p>The DbEnv::txn_stat method
+may fail and throw
+<a href="../api_cxx/except_class.html">DbException</a>,
+encapsulating one of the following non-zero errors, or return one of
+the following non-zero errors:</p>
+<p><dl compact>
+<p><dt>EINVAL<dd>An
+invalid flag value or parameter was specified.
+</dl>
+<hr size=1 noshade>
+<h3>Class</h3>
+<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/txn_class.html">DbTxn</a>
+<h3>See Also</h3>
+<a href="../api_cxx/txn_list.html">Transaction Subsystem and Related Methods</a>
</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_cxx/cxx_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_cxx/api_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_java/c_index.html b/db/docs/api_java/c_index.html
deleted file mode 100644
index 5f1243f45..000000000
--- a/db/docs/api_java/c_index.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!--Id: c_index.so,v 10.98 2002/08/24 18:22:34 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Java Interface</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Java Interface</h1>
-<p><table border=1 align=center>
-<tr><th>Section</th><th>Class/Method</th><th>Description</th></tr>
-<tr><td><b>Database Environment</b></td><td><a href="../api_java/env_class.html">DbEnv</a></td><td>Create an environment handle</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_close.html">DbEnv.close</a></td><td>Close an environment</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_dbremove.html">DbEnv.dbremove</a></td><td>Remove a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_dbrename.html">DbEnv.dbrename</a></td><td>Rename a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_err.html">DbEnv.err</a></td><td>Error message with error string</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_err.html">DbEnv.errx</a></td><td>Error message</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_open.html">DbEnv.open</a></td><td>Open an environment</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_remove.html">DbEnv.remove</a></td><td>Remove an environment</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_strerror.html">DbEnv.strerror</a></td><td>Error strings</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_version.html">DbEnv.version</a></td><td>Return version information</td></tr>
-<tr><td><b>Environment Configuration</b></td><td><a href="../api_java/env_set_app_dispatch.html">DbEnv.set_app_dispatch</a></td><td>Configure application recovery interface</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a></td><td>Set the environment data directory</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_encrypt.html">DbEnv.set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a></td><td>Set error message output stream</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_flags.html">DbEnv.set_flags</a></td><td>Environment configuration</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a></td><td>Set verbose messages</td></tr>
-<tr><td><b>Database Operations</b></td><td><a href="../api_java/db_class.html">Db</a></td><td>Create a database handle</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_associate.html">Db.associate</a></td><td>Associate a secondary index</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_close.html">Db.close</a></td><td>Close a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_del.html">Db.del</a></td><td>Delete items from a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_err.html">Db.err</a></td><td>Error message with error string</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_err.html">Db.errx</a></td><td>Error message</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_fd.html">Db.fd</a></td><td>Return a file descriptor from a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_get.html">Db.get</a>, <a href="../api_java/db_get.html">Db.pget</a></td><td>Get items from a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_get_type.html">Db.get_type</a></td><td>Return the database type</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_join.html">Db.join</a></td><td>Perform a database join on cursors</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_key_range.html">Db.key_range</a></td><td>Return estimate of key location</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_open.html">Db.open</a></td><td>Open a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_put.html">Db.put</a></td><td>Store items into a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_remove.html">Db.remove</a></td><td>Remove a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_rename.html">Db.rename</a></td><td>Rename a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_stat.html">Db.stat</a></td><td>Return database statistics</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_sync.html">Db.sync</a></td><td>Flush a database to stable storage</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_truncate.html">Db.truncate</a></td><td>Empty a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_upgrade.html">Db.upgrade</a></td><td>Upgrade a database</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_verify.html">Db.verify</a></td><td>Verify/salvage a database</td></tr>
-<tr><td><b>Database Configuration</b></td><td><a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a></td><td>Set the database cache priority</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a></td><td>Set the database cache size</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_dup_compare.html">Db.set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_errcall.html">Db.set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_error_stream.html">Db.set_error_stream</a></td><td>Set error message output stream</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_feedback.html">Db.set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_flags.html">Db.set_flags</a></td><td>General database configuration</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_lorder.html">Db.set_lorder</a></td><td>Set the database byte order</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a></td><td>Set the underlying database page size</td></tr>
-<tr><td><b>Btree/Recno Configuration</b></td><td><a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a></td><td>Set record append callback</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_bt_compare.html">Db.set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_bt_prefix.html">Db.set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_re_len.html">Db.set_re_len</a></td><td>Set the fixed-length record length</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a></td><td>Set the fixed-length record pad byte</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_re_source.html">Db.set_re_source</a></td><td>Set the backing Recno text file</td></tr>
-<tr><td><b>Hash Configuration</b></td><td><a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a></td><td>Set the Hash table density</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_h_hash.html">Db.set_h_hash</a></td><td>Set a hashing function</td></tr>
-<tr><td><br></td><td><a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a></td><td>Set the Hash table size</td></tr>
-<tr><td><b>Queue Configuration</b></td><td><a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
-<tr><td><b>Database Cursor Operations</b></td><td><a href="../api_java/dbc_class.html">Dbc</a></td><td><b>Cursor class</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/db_cursor.html">Db.cursor</a></td><td>Create a cursor handle</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_close.html">Dbc.close</a></td><td>Close a cursor</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_count.html">Dbc.count</a></td><td>Return count of duplicates</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_del.html">Dbc.del</a></td><td>Delete by cursor</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_dup.html">Dbc.dup</a></td><td>Duplicate a cursor</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_get.html">Dbc.get</a>, <a href="../api_java/dbc_get.html">Dbc.pget</a></td><td>Retrieve by cursor</td></tr>
-<tr><td><br></td><td><a href="../api_java/dbc_put.html">Dbc.put</a></td><td>Store by cursor</td></tr>
-<tr><td><b>Key/Data Pairs</b></td><td><a href="../api_java/dbt_class.html">Dbt</a></td><td><br></td></tr>
-<tr><td><b>Bulk Retrieval</b></td><td><a href="../api_java/dbt_bulk_class.html">DbMultipleDataIterator</a></td><td><br></td></tr>
-<tr><td><br></td><td><a href="../api_java/dbt_bulk_class.html">DbMultipleKeyDataIterator</a></td><td><br></td></tr>
-<tr><td><br></td><td><a href="../api_java/dbt_bulk_class.html">DbMultipleRecnoDataIterator</a></td><td><br></td></tr>
-<tr><td><b>Lock Subsystem</b></td><td><a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_detect.html">DbEnv.lock_detect</a></td><td>Perform deadlock detection</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_get.html">DbEnv.lock_get</a></td><td>Acquire a lock</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_id.html">DbEnv.lock_id</a></td><td>Acquire a locker ID</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_id_free.html">DbEnv.lock_id_free</a></td><td>Release a locker ID</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_put.html">DbEnv.lock_put</a></td><td>Release a lock</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_stat.html">DbEnv.lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
-<tr><td><br></td><td><a href="../api_java/lock_vec.html">DbEnv.lock_vec</a></td><td>Acquire/release locks</td></tr>
-<tr><td><b>Log Subsystem</b></td><td><a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a></td><td>Set log buffer size</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a></td><td>Set log file size</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a></td><td>Set logging region size</td></tr>
-<tr><td><br></td><td><a href="../api_java/log_archive.html">DbEnv.log_archive</a></td><td>List log and database files</td></tr>
-<tr><td><br></td><td><a href="../api_java/log_file.html">DbEnv.log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
-<tr><td><br></td><td><a href="../api_java/log_flush.html">DbEnv.log_flush</a></td><td>Flush log records</td></tr>
-<tr><td><br></td><td><a href="../api_java/log_put.html">DbEnv.log_put</a></td><td>Write a log record</td></tr>
-<tr><td><br></td><td><a href="../api_java/log_stat.html">DbEnv.log_stat</a></td><td>Return log subsystem statistics</td></tr>
-<tr><td><b>Log Cursor Operations</b></td><td><a href="../api_java/logc_class.html">DbLogc</a></td><td><b>Log cursor class</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/log_cursor.html">DbEnv.log_cursor</a></td><td>Create a log cursor handle</td></tr>
-<tr><td><br></td><td><a href="../api_java/logc_close.html">DbLogc.close</a></td><td>Close a log cursor</td></tr>
-<tr><td><br></td><td><a href="../api_java/logc_get.html">DbLogc.get</a></td><td>Retrieve a log record</td></tr>
-<tr><td><b>Log Sequence Numbers</b></td><td><a href="../api_java/lsn_class.html">DbLsn</a></td><td><br></td></tr>
-<tr><td><br></td><td><a href="../api_java/log_compare.html">DbEnv.log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
-<tr><td><b>Memory Pool Subsystem</b></td><td><a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
-<tr><td><br></td><td><a href="../api_java/memp_stat.html">DbEnv.memp_stat</a>, <a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a></td><td>Return memory pool statistics</td></tr>
-<tr><td><br></td><td><a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
-<tr><td><b>Transaction Subsystem</b></td><td><a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
-<tr><td><br></td><td><a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_recover.html">DbEnv.txn_recover</a></td><td>Distributed transaction recovery</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_stat.html">DbEnv.txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
-<tr><td><b>Transactions</b></td><td><a href="../api_java/txn_class.html">DbTxn</a></td><td><b>Transaction class</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_begin.html">DbEnv.txn_begin</a></td><td>Begin a transaction</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_abort.html">DbTxn.abort</a></td><td>Abort a transaction</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_commit.html">DbTxn.commit</a></td><td>Commit a transaction</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_discard.html">DbTxn.discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_id.html">DbTxn.id</a></td><td>Return a transaction's ID</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_prepare.html">DbTxn.prepare</a></td><td>Prepare a transaction for commit</td></tr>
-<tr><td><br></td><td><a href="../api_java/txn_set_timeout.html">DbTxn.set_timeout</a></td><td>Set transaction timeout</td></tr>
-<tr><td><b>Replication</b></td><td><a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a></td><td>Configure replication transport</td></tr>
-<tr><td><br></td><td><a href="../api_java/rep_elect.html">DbEnv.rep_elect</a></td><td>Hold a replication election</td></tr>
-<tr><td><br></td><td><a href="../api_java/rep_limit.html">DbEnv.set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
-<tr><td><br></td><td><a href="../api_java/rep_message.html">DbEnv.rep_process_message</a></td><td>Process a replication message</td></tr>
-<tr><td><br></td><td><a href="../api_java/rep_start.html">DbEnv.rep_start</a></td><td>Configure an environment for replication</td></tr>
-<tr><td><br></td><td><a href="../api_java/rep_stat.html">DbEnv.rep_stat</a></td><td>Replication statistics</td></tr>
-<tr><td><b>Exceptions</b></td><td><a href="../api_java/except_class.html">DbException</a></td><td><b>Exception Class for Berkeley DB Activity</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/deadlock_class.html">DbDeadlockException</a></td><td><b>Exception Class for deadlocks</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/lockng_class.html">DbLockNotGrantedException</a></td><td><b>Exception Class for lock request failures</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/memp_class.html">DbMemoryException</a></td><td><b>Exception Class for insufficient memory</b></td></tr>
-<tr><td><br></td><td><a href="../api_java/runrec_class.html">DbRunRecoveryException</a></td><td><b>Exception Class for failures requiring recovery</b></td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_associate.html b/db/docs/api_java/db_associate.html
deleted file mode 100644
index 9d0301d06..000000000
--- a/db/docs/api_java/db_associate.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!--Id: db_associate.so,v 10.9 2001/05/05 01:49:09 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.associate</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.associate</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbSecondaryKeyCreate
-{
- public abstract Dbt secondary_key_create(Db secondary, Dbt key, Dbt data)
- throws DbException;
-}
-public class Db
-{
- ...
- public int associate(Db secondary,
- DbSecondaryKeyCreate secondary_key_create, int flags)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.associate function is used to declare one database a
-secondary index for a primary database. After a secondary database has
-been "associated" with a primary database, all updates to the primary
-will be automatically reflected in the secondary and all reads from the
-secondary will return corresponding data from the primary. Note that
-as primary keys must be unique for secondary indices to work, the
-primary database must be configured without support for duplicate data
-items. See <a href="../ref/am/second.html">Secondary indices</a> for
-more information.
-<p>The associate method called should be a method off a database handle for
-the primary database that is to be indexed.
-The <b>secondary</b> argument should be an open database handle of
-either a newly created and empty database that is to be used to store
-a secondary index, or of a database that was previously associated with
-the same primary and contains a secondary index. Note that it is not
-safe to associate as a secondary database a handle that is in use by
-another thread of control or has open cursors. If the handle was opened
-with the <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag it is safe to use it in multiple threads
-of control after the Db.associate method has returned. Note also
-that either secondary keys must be unique or the secondary database must
-be configured with support for duplicate data items.
-<p>The <b>callback</b> argument should refer to a callback function that
-creates a secondary key from a given primary key and data pair. When
-called, the first argument will be the secondary <a href="../api_java/db_class.html">Db</a> handle; the
-second and third arguments will be <a href="../api_java/dbt_class.html">Dbt</a>s containing a primary
-key and datum respectively; and the fourth argument will be a zeroed
-DBT in which the callback function should fill in <b>data</b> and
-<b>size</b> fields that describe the secondary key.
-<p>If any key/data pair in the primary yields a null secondary key and
-should be left out of the secondary index, the callback function may
-optionally return Db.DB_DONOTINDEX. Otherwise, the callback
-function should return 0 in case of success or any other integer error
-code in case of failure; the error code will be returned from the Berkeley DB
-interface call that initiated the callback. Note that if the callback
-function returns Db.DB_DONOTINDEX for any key/data pairs in the
-primary database, the secondary index will not contain any reference to
-those key/data pairs, and such operations as cursor iterations and range
-queries will reflect only the corresponding subset of the database. If
-this is not desirable, the application should ensure that the callback
-function is well-defined for all possible values and never returns
-Db.DB_DONOTINDEX.
-<p>The callback argument may be NULL if and only if both the primary and
-secondary database handles were opened with the <a href="../api_java/db_open.html#DB_RDONLY">Db.DB_RDONLY</a> flag.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_CREATE">Db.DB_CREATE</a><dd>If the secondary database is empty, walk through the primary and create
-an index to it in the empty secondary. Note that this operation is
-potentially very expensive.
-<p>If the secondary database has been opened in an environment configured
-with transactions, each put necessary for its creation will be done in
-the context of a transaction created for the purpose.
-<p>Note that care should be taken not to use a newly-created secondary
-database in another thread of control until the Db.associate
-call has returned successfully in the first thread.
-</dl>
-<h1>Errors</h1>
-<p>The Db.associate method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The secondary database handle has already been associated with this or
-another database handle.
-<p>The secondary database handle is not open.
-<p>The primary database has been configured to allow duplicates.
-</dl>
-<p>The Db.associate method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.associate method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>,
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_class.html b/db/docs/api_java/db_class.html
deleted file mode 100644
index b03e55c1f..000000000
--- a/db/docs/api_java/db_class.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--$Id: db_class.so,v 10.23 2000/03/17 01:54:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class Db extends Object
-{
- Db(DbEnv dbenv, int flags)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Db class,
-which is the center of access method activity.
-<p>If no <b>dbenv</b> value is specified, the database is standalone, i.e.,
-it is not part of any Berkeley DB environment.
-<p>If a <b>dbenv</b> value is specified, the database is created within the
-specified Berkeley DB environment. The database access methods automatically
-make calls to the other subsystems in Berkeley DB based on the enclosing
-environment. For example, if the environment has been configured to use
-locking, then the access methods will automatically acquire the correct
-locks when reading and writing pages of the database.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_XA_CREATE">Db.DB_XA_CREATE</a><dd>Instead of creating a standalone database, create a database intended to
-be accessed via applications running under a X/Open conformant Transaction
-Manager. The database will be opened in the environment specified by the
-OPENINFO parameter of the GROUPS section of the ubbconfig file. See the
-<a href="../ref/xa/intro.html">XA Resource Manager</a> chapter in the
-Reference Guide for more information.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_close.html b/db/docs/api_java/db_close.html
deleted file mode 100644
index fcb8fde1d..000000000
--- a/db/docs/api_java/db_close.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--$Id: db_close.so,v 10.27 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.close</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.close</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int close(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.close method flushes any cached database information to disk,
-closes any open cursors, frees any allocated resources, and closes any
-underlying files. Since key/data pairs are cached in memory, failing to
-sync the file with the Db.close or <a href="../api_java/db_sync.html">Db.sync</a> method may result
-in inconsistent or lost information.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_NOSYNC">Db.DB_NOSYNC</a><dd>Do not flush cached information to disk.
-<p>The <a href="../api_java/db_close.html#DB_NOSYNC">Db.DB_NOSYNC</a> flag is a dangerous option. It should only be set
-if the application is doing logging (with transactions) so that the
-database is recoverable after a system or application crash, or if the
-database is always generated from scratch after any system or application
-crash.
-<p><b>It is important to understand that flushing cached information to disk
-only minimizes the window of opportunity for corrupted data.</b>
-While unlikely, it is possible for database corruption to happen if a
-system or application crash occurs while writing data to the database.
-To ensure that database corruption never occurs, applications must either:
-use transactions and logging with automatic recovery, use logging and
-application-specific recovery, or edit a copy of the database,
-and, once all applications using the database have successfully called
-Db.close, atomically replace the original database with the
-updated copy.
-</dl>
-<p>When multiple threads are using the Berkeley DB handle concurrently, only a single
-thread may call the Db.close method.
-<p>Once Db.close has been called, regardless of its return, the
-<a href="../api_java/db_class.html">Db</a> handle may not be accessed again.
- <a name="3"><!--meow--></a>
-<p>The Db.close method throws an exception that encapsulates a non-zero error value on
-failure, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-Db.close method was called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, the <a href="../api_java/db_close.html#DB_NOSYNC">Db.DB_NOSYNC</a> option should probably
-have been specified.)
-<p>The Db.close method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.close method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.close method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_cursor.html b/db/docs/api_java/db_cursor.html
deleted file mode 100644
index 2494aad58..000000000
--- a/db/docs/api_java/db_cursor.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--$Id: db_cursor.so,v 10.25 2000/07/11 19:11:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.cursor</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.cursor</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public Dbc cursor(DbTxn txnid, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.cursor method
-creates a cursor.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>, otherwise, NULL.
-<p>If transaction protection is enabled, cursors must be opened and closed
-within the context of a transaction, and the <b>txnid</b> parameter
-specifies the transaction context in which the cursor may be used.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_WRITECURSOR">Db.DB_WRITECURSOR</a><dd>Specify that the cursor will be used to update the database. This
-flag should <b>only</b> be set when the <a href="../api_java/env_open.html#DB_INIT_CDB">Db.DB_INIT_CDB</a> flag
-was specified to <a href="../api_java/env_open.html">DbEnv.open</a>.
-</dl>
-<p>The Db.cursor method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.cursor method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The Db.cursor method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.cursor method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_del.html b/db/docs/api_java/db_del.html
deleted file mode 100644
index 0a44190dd..000000000
--- a/db/docs/api_java/db_del.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--$Id: db_del.so,v 10.23 2000/09/05 19:35:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.del</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.del</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int del(DbTxn txnid, Dbt key, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.del method removes key/data pairs from the database. The
-key/data pair associated with the specified <b>key</b> is discarded from
-the database. In the presence of duplicate key values, all records
-associated with the designated key will be discarded.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The Db.del method throws an exception that encapsulates a non-zero error value on
-failure, and <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a> if the specified <b>key</b> did not exist in
-the file.
-<h1>Errors</h1>
-<p>The Db.del method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
-</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Db.del method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Db.del method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.del method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_err.html b/db/docs/api_java/db_err.html
deleted file mode 100644
index 4bbbd7143..000000000
--- a/db/docs/api_java/db_err.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!--Id: db_err.so,v 1.2 2002/06/24 14:49:05 bostic Exp -->
-<!--Id: env_err.so,v 10.20 2002/06/24 14:49:16 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Db.err</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.err</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void err(int errcode, String message)
-<p>
-public void errx(String message)
-</pre></h3>
-<h1>Description</h1>
-<p>The <a href="../api_java/env_err.html">DbEnv.err</a>, <a href="../api_java/env_err.html">DbEnv.errx</a>, Db.err and
-Db.errx methods provide error-messaging functionality for
-applications written using the Berkeley DB library.
-<p>The <a href="../api_java/env_err.html">DbEnv.err</a> method constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
-<p><dt>An optional prefix string<dd>If no error callback method has been set using the
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method, any prefix string specified using the
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a> method, followed by two separating characters: a colon
-and a &lt;space&gt; character.
-<p><dt>The supplied message string <b>message</b>.<dd>
-<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
-<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
-<b>error</b> value, as returned by the <a href="../api_java/env_strerror.html">DbEnv.strerror</a> method.
-</dl>
-</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback method has been set (see <a href="../api_java/db_set_errcall.html">Db.set_errcall</a>
-and <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>), that method is called with two
-arguments: any prefix string specified (see <a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a> and
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>) and the error message.
-<p>If a OutputStream has been set
-(see <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>), the error message is written to that
-stream.
-<p>If none of these output options has been configured, the error message
-is written to System.err, the standard
-error output stream.</blockquote>
-<p>The <a href="../api_java/env_err.html">DbEnv.errx</a> and Db.errx methods perform identically to the
-<a href="../api_java/env_err.html">DbEnv.err</a> and Db.err methods, except that they do not append
-the final separator characters and standard error string to the error
-message.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_err.html">Db.err</a>,
-<a href="../api_java/db_err.html">Db.errx</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_fd.html b/db/docs/api_java/db_fd.html
deleted file mode 100644
index 77342c2c9..000000000
--- a/db/docs/api_java/db_fd.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!--$Id: db_fd.so,v 10.21 2000/03/01 21:41:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.fd</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.fd</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int fd()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.fd method
-returns a file descriptor representative of the underlying database.
-This method does not fit well into the Java framework and may be removed
-in subsequent releases.
-<p>The Db.fd method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.fd method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.fd method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_get.html b/db/docs/api_java/db_get.html
deleted file mode 100644
index 8fd980e92..000000000
--- a/db/docs/api_java/db_get.html
+++ /dev/null
@@ -1,149 +0,0 @@
-<!--$Id: db_get.so,v 10.31 2000/11/28 20:12:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.get</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.get</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int get(DbTxn txnid, Dbt key, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.get method retrieves key/data pairs from the database. The
-byte array
-and length of the data associated with the specified <b>key</b> are
-returned in the structure referenced by <b>data</b>.
-<p>In the presence of duplicate key values, Db.get will return the
-first data item for the designated key. Duplicates are sorted by insert
-order except where this order has been overridden by cursor operations.
-<b>Retrieval of duplicates requires the use of cursor operations.</b>
-See <a href="../api_java/dbc_get.html">Dbc.get</a> for details.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_CONSUME">Db.DB_CONSUME</a><dd>Return the record number and data from the available record closest to
-the head of the queue and delete the record. The cursor will be
-positioned on the deleted record. The record number will be returned
-in <b>key</b> as described in <a href="../api_java/dbt_class.html">Dbt</a>. The data will be returned
-in the <b>data</b> parameter. A record is available if it is not
-deleted and is not currently locked. The underlying database must be
-of type Queue for Db.DB_CONSUME to be specified.
-<p><dt><a name="Db.DB_CONSUME_WAIT">Db.DB_CONSUME_WAIT</a><dd>The Db.DB_CONSUME_WAIT flag is the same as the Db.DB_CONSUME
-flag except that if the Queue database is empty, the thread of control
-will wait until there is data in the queue before returning. The
-underlying database must be of type Queue for Db.DB_CONSUME_WAIT
-to be specified.
-<p><dt><a name="Db.DB_GET_BOTH">Db.DB_GET_BOTH</a><dd>Retrieve the key/data pair only if both the key and data match the
-arguments.
-<p><dt><a name="Db.DB_SET_RECNO">Db.DB_SET_RECNO</a><dd>Retrieve the specified numbered key/data pair from a database.
-Upon return, both the <b>key</b> and <b>data</b> items will have been
-filled in, not just the data item as is done for all other uses of the
-Db.get method.
-<p>The <b>data</b> field of the specified <b>key</b>
-must be a byte array large enough to hold a logical record
-number (i.e., an int).
-This record number determines the record to be retrieved.
-<p>For Db.DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the DB_RECNUM flag.
-</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
-<p><dl compact>
-<p><dt><a name="Db.DB_RMW">Db.DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
-<p>As the Db.get interface will not hold locks across
-Berkeley DB interface calls in non-transactional environments, the
-<a href="../api_java/dbc_get.html#DB_RMW">Db.DB_RMW</a> flag to the Db.get call is only meaningful in
-the presence of transactions.
-</dl>
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-the Db.get method returns <a href="../ref/program/errorret.html#DB_KEYEMPTY">Db.DB_KEYEMPTY</a>.
-<p>Otherwise, if the requested key is not in the database, the
-Db.get function returns <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p>Otherwise, the Db.get method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.get method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>The <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag was specified to the
-<a href="../api_java/db_open.html">Db.open</a> method and none of the <a href="../api_java/dbt_class.html#DB_DBT_MALLOC">Db.DB_DBT_MALLOC</a>,
-<a href="../api_java/dbt_class.html#DB_DBT_REALLOC">Db.DB_DBT_REALLOC</a> or <a href="../api_java/dbt_class.html#DB_DBT_USERMEM">Db.DB_DBT_USERMEM</a> flags were set in the
-<a href="../api_java/dbt_class.html">Dbt</a>.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Db.get method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>If the requested item could not be returned due to insufficient memory,
-the Db.get method will fail and
-throw a <a href="../api_java/mem_class.html">DbMemoryException</a> exception.
-<p>The Db.get method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.get method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_get_byteswapped.html b/db/docs/api_java/db_get_byteswapped.html
deleted file mode 100644
index 1ef15479d..000000000
--- a/db/docs/api_java/db_get_byteswapped.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--$Id: db_get_byteswapped.so,v 10.7 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.get_byteswapped</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.get_byteswapped</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public boolean get_byteswapped();
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.get_byteswapped method returns
-false
-if the underlying database files were created on an architecture
-of the same byte order as the current one, and
-true
-if they were not (i.e., big-endian on a little-endian machine or
-vice-versa). This field may be used to determine if application
-data needs to be adjusted for this architecture or not.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_get_type.html b/db/docs/api_java/db_get_type.html
deleted file mode 100644
index cc1055619..000000000
--- a/db/docs/api_java/db_get_type.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!--$Id: db_get_type.so,v 10.10 1999/12/20 08:52:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.get_type</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.get_type</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int get_type();
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.get_type method returns the type of the underlying access method
-(and file format). It returns one of Db.DB_BTREE,
-Db.DB_HASH or Db.DB_RECNO. This value may be used to
-determine the type of the database after a return from <a href="../api_java/db_open.html">Db.open</a>
-with the <b>type</b> argument set to Db.DB_UNKNOWN.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_join.html b/db/docs/api_java/db_join.html
deleted file mode 100644
index 5bdd93fed..000000000
--- a/db/docs/api_java/db_join.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!--$Id: db_join.so,v 10.30 2000/12/20 15:34:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.join</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.join</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public Dbc join(Dbc curslist[], int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.join method creates a specialized cursor for use in performing
-joins on secondary indexes. For information on how to organize your data
-to use this functionality, see <a href="../ref/am/join.html">Logical
-join</a>.
-<p>The <b>primary</b> argument contains the <a href="../api_java/db_class.html">Db</a> handle of the primary
-database, which is keyed by the data values found in entries in the
-<b>curslist</b>.
-<p>The <b>curslist</b> argument contains a null terminated array of cursors.
-Each cursor must have been initialized to reference the key on which the
-underlying database should be joined. Typically, this initialization is done
-by a <a href="../api_java/dbc_get.html">Dbc.get</a> call with the <a href="../api_java/dbc_get.html#DB_SET">Db.DB_SET</a> flag specified. Once the
-cursors have been passed as part of a <b>curslist</b>, they should not
-be accessed or modified until the newly created join cursor has been closed,
-or else inconsistent results may be returned.
-<p>Joined values are retrieved by doing a sequential iteration over the first
-cursor in the <b>curslist</b> argument, and a nested iteration over each
-secondary cursor in the order they are specified in the <b>curslist</b>
-argument. This requires database traversals to search for the current
-datum in all the cursors after the first. For this reason, the best join
-performance normally results from sorting the cursors from the one that
-references the least number of data items to the one that references the
-most. By default, Db.join does this sort on behalf of its caller.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_JOIN_NOSORT">Db.DB_JOIN_NOSORT</a><dd>Do not sort the cursors based on the number of data items they reference.
-If the data are structured such that cursors with many data items also
-share many common elements, higher performance will result from listing
-those cursors before cursors with fewer data items, that is, a sort order
-other than the default. The Db.DB_JOIN_NOSORT flag permits
-applications to perform join optimization prior to calling Db.join.
-</dl>
-<p>The returned cursor has the standard cursor functions:
-<p><dl compact>
-<p><dt><a href="../api_java/dbc_get.html">Dbc.get</a><dd>Iterates over the values associated with the keys to which each item in
-<b>curslist</b> has been initialized. Any data value which appears in
-all items specified by the <b>curslist</b> argument is then used as a
-key into the <b>primary</b>, and the key/data pair found in the
-<b>primary</b> is returned.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_JOIN_ITEM">Db.DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup
-key for the <b>primary</b>, but simply return it in the key parameter
-instead. The data parameter is left unchanged.
-</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
-<p><dl compact>
-<p><dt><a name="Db.DB_RMW">Db.DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
-</dl>
-<p><dt><a href="../api_java/dbc_put.html">Dbc.put</a><dd>Returns EINVAL.
-<p><dt><a href="../api_java/dbc_del.html">Dbc.del</a><dd>Returns EINVAL.
-<p><dt><a href="../api_java/dbc_close.html">Dbc.close</a><dd>Close the returned cursor and release all resources. (Closing the cursors
-in <b>curslist</b> is the responsibility of the caller.)
-</dl>
-<p>For the returned join cursor to be used in a transaction protected manner,
-the cursors listed in <b>curslist</b> must have been created within the
-context of the same transaction.
-<p>The Db.join method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.join method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <a href="../api_java/dbc_put.html">Dbc.put</a> or <a href="../api_java/dbc_del.html">Dbc.del</a> functions were called.
-</dl>
-<p>The Db.join method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.join method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_key_range.html b/db/docs/api_java/db_key_range.html
deleted file mode 100644
index dd68e0e1a..000000000
--- a/db/docs/api_java/db_key_range.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!--$Id: db_key_range.so,v 10.5 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.key_range</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.key_range</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void key_range(DbTxn txnid
- Dbt key, DbKeyRange key_range, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.key_range method returns an estimate of the proportion of keys
-that are less than, equal to and greater than the specified key. The
-underlying database must be of type Btree.
-<p>The information is returned in the <b>key_range</b> argument, which
-contains three elements of type double, <b>less</b>, <b>equal</b> and
-<b>greater</b>. Values are in the range of 0 to 1, e.g., if the field
-<b>less</b> is 0.05, that indicates that 5% of the keys in the database
-are less than the key argument. The value for <b>equal</b> will be zero
-if there is no matching key and non-zero otherwise.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>, otherwise, NULL.
-The Db.key_range method does not retain the locks it acquires for the
-life of the transaction, so estimates may not be repeatable.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The Db.key_range method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.key_range method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The underlying database was not of type Btree.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Db.key_range method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Db.key_range method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.key_range method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_list.html b/db/docs/api_java/db_list.html
deleted file mode 100644
index f3869dbbe..000000000
--- a/db/docs/api_java/db_list.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--Id: db_list.so,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Databases and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Databases and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:48 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Databases and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/db_associate.html">Db.associate</a></td><td>Associate a secondary index</td></tr>
-<tr><td><a href="../api_java/db_close.html">Db.close</a></td><td>Close a database</td></tr>
-<tr><td><a href="../api_java/db_cursor.html">Db.cursor</a></td><td>Create a cursor handle</td></tr>
-<tr><td><a href="../api_java/db_del.html">Db.del</a></td><td>Delete items from a database</td></tr>
-<tr><td><a href="../api_java/db_err.html">Db.err</a></td><td>Error message with error string</td></tr>
-<tr><td><a href="../api_java/db_err.html">Db.errx</a></td><td>Error message</td></tr>
-<tr><td><a href="../api_java/db_fd.html">Db.fd</a></td><td>Return a file descriptor from a database</td></tr>
-<tr><td><a href="../api_java/db_get.html">Db.get</a></td><td>Get items from a database</td></tr>
-<tr><td><a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
-<tr><td><a href="../api_java/db_get_type.html">Db.get_type</a></td><td>Return the database type</td></tr>
-<tr><td><a href="../api_java/db_join.html">Db.join</a></td><td>Perform a database join on cursors</td></tr>
-<tr><td><a href="../api_java/db_key_range.html">Db.key_range</a></td><td>Return estimate of key location</td></tr>
-<tr><td><a href="../api_java/db_open.html">Db.open</a></td><td>Open a database</td></tr>
-<tr><td><a href="../api_java/db_get.html">Db.pget</a></td><td>Get items from a database</td></tr>
-<tr><td><a href="../api_java/db_put.html">Db.put</a></td><td>Store items into a database</td></tr>
-<tr><td><a href="../api_java/db_remove.html">Db.remove</a></td><td>Remove a database</td></tr>
-<tr><td><a href="../api_java/db_rename.html">Db.rename</a></td><td>Rename a database</td></tr>
-<tr><td><a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a></td><td>Set record append callback</td></tr>
-<tr><td><a href="../api_java/db_set_bt_compare.html">Db.set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
-<tr><td><a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
-<tr><td><a href="../api_java/db_set_bt_prefix.html">Db.set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
-<tr><td><a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a></td><td>Set the database cache priority</td></tr>
-<tr><td><a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a></td><td>Set the database cache size</td></tr>
-<tr><td><a href="../api_java/db_set_dup_compare.html">Db.set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
-<tr><td><a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
-<tr><td><a href="../api_java/db_set_errcall.html">Db.set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><a href="../api_java/db_set_error_stream.html">Db.set_error_stream</a></td><td>Set error message output stream</td></tr>
-<tr><td><a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><a href="../api_java/db_set_feedback.html">Db.set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><a href="../api_java/db_set_flags.html">Db.set_flags</a></td><td>General database configuration</td></tr>
-<tr><td><a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a></td><td>Set the Hash table density</td></tr>
-<tr><td><a href="../api_java/db_set_h_hash.html">Db.set_h_hash</a></td><td>Set a hashing function</td></tr>
-<tr><td><a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a></td><td>Set the Hash table size</td></tr>
-<tr><td><a href="../api_java/db_set_lorder.html">Db.set_lorder</a></td><td>Set the database byte order</td></tr>
-<tr><td><a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a></td><td>Set the underlying database page size</td></tr>
-<tr><td><a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
-<tr><td><a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
-<tr><td><a href="../api_java/db_set_re_len.html">Db.set_re_len</a></td><td>Set the fixed-length record length</td></tr>
-<tr><td><a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a></td><td>Set the fixed-length record pad byte</td></tr>
-<tr><td><a href="../api_java/db_set_re_source.html">Db.set_re_source</a></td><td>Set the backing Recno text file</td></tr>
-<tr><td><a href="../api_java/db_stat.html">Db.stat</a></td><td>Return database statistics</td></tr>
-<tr><td><a href="../api_java/db_sync.html">Db.sync</a></td><td>Flush a database to stable storage</td></tr>
-<tr><td><a href="../api_java/db_truncate.html">Db.truncate</a></td><td>Empty a database</td></tr>
-<tr><td><a href="../api_java/db_upgrade.html">Db.upgrade</a></td><td>Upgrade a database</td></tr>
-<tr><td><a href="../api_java/db_verify.html">Db.verify</a></td><td>Verify/salvage a database</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_open.html b/db/docs/api_java/db_open.html
deleted file mode 100644
index 5371e10bb..000000000
--- a/db/docs/api_java/db_open.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<!--$Id: db_open.so,v 10.61 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.open</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.open</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void open(String file,
- String database, int type, int flags, int mode)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The currently supported Berkeley DB file formats (or <i>access methods</i>)
-are Btree, Hash, Queue and Recno. The Btree format is a representation
-of a sorted, balanced tree structure. The Hash format is an extensible,
-dynamic hashing scheme. The Queue format supports fast access to
-fixed-length records accessed by sequentially or logical record number.
-The Recno format supports fixed- or variable-length records, accessed
-sequentially or by logical record number, and optionally retrieved from
-a flat text file.
-<p>Storage and retrieval for the Berkeley DB access methods are based on key/data
-pairs, see <a href="../api_java/dbt_class.html">Dbt</a> for more information.
-<p>The Db.open interface opens the database represented by the
-<b>file</b> and <b>database</b> arguments for both reading and writing.
-The <b>file</b> argument is used as the name of a physical file on disk
-that will be used to back the database. The <b>database</b> argument is
-optional and allows applications to have multiple logical databases in a
-single physical file. While no <b>database</b> argument needs to be
-specified, it is an error to attempt to open a second database in a
-<b>file</b> that was not initially created using a <b>database</b> name.
-In-memory databases never intended to be preserved on disk may
-be created by setting both the <b>file</b> and <b>database</b> arguments
-to null. Note that in-memory databases can only ever be shared by
-sharing the single database handle that created them, in circumstances
-where doing so is safe.
-<p>The <b>type</b> argument is of type int
-and must be set to one of Db.DB_BTREE, Db.DB_HASH,
-Db.DB_QUEUE, Db.DB_RECNO or Db.DB_UNKNOWN, except
-that databases of type Db.DB_QUEUE are restricted to one per
-<b>file</b>. If <b>type</b> is Db.DB_UNKNOWN, the database must
-already exist and Db.open will automatically determine its type.
-The <a href="../api_java/db_get_type.html">Db.get_type</a> method may be used to determine the underlying type of
-databases opened using Db.DB_UNKNOWN.
-<p>The <b>flags</b> and <b>mode</b> arguments specify how files will be opened
-and/or created if they do not already exist.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_CREATE">Db.DB_CREATE</a><dd>Create any underlying files, as necessary. If the files do not already
-exist and the DB_CREATE flag is not specified, the call will fail.
-<p><dt><a name="Db.DB_EXCL">Db.DB_EXCL</a><dd>Return an error if the file already exists. Underlying filesystem
-primitives are used to implement this flag. For this reason it is only
-applicable to the physical file and cannot be used to test if a database
-in a file already exists.
-<p>The Db.DB_EXCL flag is only meaningful when specified with the
-Db.DB_CREATE flag.
-<p><dt><a name="Db.DB_NOMMAP">Db.DB_NOMMAP</a><dd>Do not map this database into process memory (see the description of the
-<a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a> method for further information).
-<p><dt><a name="Db.DB_RDONLY">Db.DB_RDONLY</a><dd>Open the database for reading only. Any attempt to modify items in the
-database will fail regardless of the actual permissions of any underlying
-files.
-<p><dt><a name="Db.DB_THREAD">Db.DB_THREAD</a><dd>Cause the <a href="../api_java/db_class.html">Db</a> handle returned by Db.open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
-single address space.
-<p>Threading is always assumed in the Java API, so no special flags are
-required, and Berkeley DB functions will always behave as if the
-<a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag was specified.
-<p><dt><a name="Db.DB_TRUNCATE">Db.DB_TRUNCATE</a><dd>Physically truncate the underlying file, discarding all previous databases
-it might have held. Underlying filesystem primitives are used to
-implement this flag. For this reason it is only applicable to the
-physical file and cannot be used to discard databases within a file.
-<p>The Db.DB_TRUNCATE flag cannot be transaction protected, and it is
-an error to specify it in a transaction protected environment.
-</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the access methods
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>Calling Db.open is a reasonably expensive operation, and
-maintaining a set of open databases will normally be preferable to
-repeatedly open and closing the database for each new query.
-<p>The Db.open method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.open
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<p><dl compact>
-<p><dt>TMPDIR<dd>If the <b>file</b> and <b>dbenv</b> arguments to Db.open are
-null, the environment variable <b>TMPDIR</b> may be used as a
-directory in which to create a temporary backing file.
-</dl>
-<h1>Errors</h1>
-<p>The Db.open method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt><a name="Db.DB_OLD_VERSION">Db.DB_OLD_VERSION</a><dd>The database cannot be opened without being first upgraded.
-<p><dt>EEXIST<dd>DB_CREATE and DB_EXCL were specified and the file exists.
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified (e.g., unknown database
-type, page size, hash function, pad byte, byte order) or a flag value
-or parameter that is incompatible with the specified database.
-<p>
-The <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag was specified to Db.open, but was not
-specified to the <a href="../api_java/env_open.html">DbEnv.open</a> call for the environment in which the
-<a href="../api_java/db_class.html">Db</a> handle was created.
-<p>A <b>re_source</b> file was specified with either the <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a>
-flag or the provided database environment supports transaction
-processing.
-<p><dt>ENOENT<dd>A non-existent <b>re_source</b> file was specified.
-</dl>
-<p>The Db.open method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.open method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_put.html b/db/docs/api_java/db_put.html
deleted file mode 100644
index 41fe6dcff..000000000
--- a/db/docs/api_java/db_put.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!--$Id: db_put.so,v 10.34 2000/09/16 22:27:56 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.put</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.put</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int put(DbTxn txnid, Dbt key, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.put method stores key/data pairs in the database. The default
-behavior of the Db.put function is to enter the new key/data
-pair, replacing any previously existing key if duplicates are disallowed,
-or adding a duplicate data item if duplicates are allowed. If the database
-supports duplicates, the Db.put method adds the new data value at the
-end of the duplicate set. If the database supports sorted duplicates,
-the new data value is inserted at the correct sorted location.
-<p>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction ID returned from
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>, otherwise, NULL.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_APPEND">Db.DB_APPEND</a><dd>Append the key/data pair to the end of the database. For the
-Db.DB_APPEND flag to be specified, the underlying database must be
-a Queue or Recno database. The record number allocated to the record is
-returned in the specified <b>key</b>.
-<p>There is a minor behavioral difference between the Recno and Queue access
-methods for the Db.DB_APPEND flag. If a transaction enclosing a
-Db.put operation with the Db.DB_APPEND flag aborts, the
-record number may be decremented (and later re-allocated by a subsequent
-Db.DB_APPEND operation) by the Recno access method, but will not be
-decremented or re-allocated by the Queue access method.
-<p><dt><a name="Db.DB_NODUPDATA">Db.DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, enter the new key/data
-pair only if it does not already appear in the database. If the
-key/data pair already appears in the database, <a href="../api_java/dbc_put.html#DB_KEYEXIST">Db.DB_KEYEXIST</a> is
-returned. The Db.DB_NODUPDATA flag may only be specified if the
-underlying database has been configured to support sorted duplicates.
-<p>The Db.DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
-<p><dt><a name="Db.DB_NOOVERWRITE">Db.DB_NOOVERWRITE</a><dd>Enter the new key/data pair only if the key does not already appear in
-the database. If the key already appears in the database,
-<a href="../api_java/dbc_put.html#DB_KEYEXIST">Db.DB_KEYEXIST</a> is returned. Even if the database allows duplicates,
-a call to Db.put with the Db.DB_NOOVERWRITE flag set will
-fail if the key already exists in the database.
-</dl>
-<p>Otherwise, the Db.put method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.put method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
-</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A record number of 0 was specified.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
-<p>An attempt was made to do a partial put.
-</dl>
-<p><dl compact>
-<p><dt>ENOSPC<dd>A btree exceeded the maximum btree depth (255).
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Db.put method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Db.put method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.put method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_remove.html b/db/docs/api_java/db_remove.html
deleted file mode 100644
index d1238451c..000000000
--- a/db/docs/api_java/db_remove.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!--$Id: db_remove.so,v 10.20 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.remove</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.remove</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void remove(String file, String database, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.remove interface removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
-specified, the physical file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
-<p>If a physical file is being removed and logging is currently enabled in
-the database environment, no database in the file may be open when the
-Db.remove method is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not remove databases that
-are currently in use. In particular, some architectures do not permit
-the removal of files with open handles. On these architectures, attempts
-to remove databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once Db.remove has been called, regardless of its return, the
-<a href="../api_java/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db.remove method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.remove
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<h1>Errors</h1>
-<p>The Db.remove method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
-</dl>
-<p>If the file or directory does not exist, the Db.remove method will
-fail and
-throw a FileNotFoundException exception.
-<p>The Db.remove method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.remove method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_rename.html b/db/docs/api_java/db_rename.html
deleted file mode 100644
index b34f20a26..000000000
--- a/db/docs/api_java/db_rename.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!--$Id: db_rename.so,v 10.7 2000/10/25 15:24:44 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.rename</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.rename</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void rename(String file, String database, String newname, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.rename interface renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
-<b>database</b> is specified, the physical file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
-<p>If a physical file is being renamed and logging is currently enabled in
-the database environment, no database in the file may be open when the
-Db.rename method is called. Otherwise, no reference count of database
-use is maintained by Berkeley DB. Applications should not rename databases that
-are currently in use. In particular, some architectures do not permit
-renaming files with open handles. On these architectures, attempts to
-rename databases that are currently in use will fail.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Once Db.rename has been called, regardless of its return, the
-<a href="../api_java/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db.rename method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.rename
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<h1>Errors</h1>
-<p>The Db.rename method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
-</dl>
-<p>If the file or directory does not exist, the Db.rename method will
-fail and
-throw a FileNotFoundException exception.
-<p>The Db.rename method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.rename method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_append_recno.html b/db/docs/api_java/db_set_append_recno.html
deleted file mode 100644
index 8a4d4a0df..000000000
--- a/db/docs/api_java/db_set_append_recno.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--$Id: db_set_append_recno.so,v 1.3 2000/07/18 16:19:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_append_recno</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_append_recno</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbAppendRecno
-{
- public abstract void db_append_recno(Db db, Dbt data, int recno);
- throws DbException;
-}
-public class Db
-{
- public void set_append_recno(DbAppendRecno db_append_recno)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>When using the <a href="../api_java/db_put.html#DB_APPEND">Db.DB_APPEND</a> option of the <a href="../api_java/db_put.html">Db.put</a> method,
-it may be useful to modify the stored data based on the generated key.
-If a callback method is specified using the
-Db.set_append_recno method, it will be called after the record number
-has been selected but before the data has been stored.
-The callback function must throw a <a href="../api_java/except_class.html">DbException</a> object to
-encapsulate the error on failure. That object will be thrown to
-caller of <a href="../api_java/db_put.html">Db.put</a>.
-<p>The called function must take three arguments: a reference to the
-enclosing database handle, the data <a href="../api_java/dbt_class.html">Dbt</a> to be stored and the
-selected record number. The called function may then modify the data
-<a href="../api_java/dbt_class.html">Dbt</a>.
-<p>The Db.set_append_recno interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_append_recno method throws an exception that encapsulates a non-zero error value on
-failure.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_bt_compare.html b/db/docs/api_java/db_set_bt_compare.html
deleted file mode 100644
index 2a2ea869b..000000000
--- a/db/docs/api_java/db_set_bt_compare.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!--$Id: db_set_bt_compare.so,v 10.24 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_bt_compare</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_bt_compare</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbBtreeCompare
-{
- public abstract int bt_compare(Db db, Dbt dbt1, Dbt dbt2);
-}
-public class Db
-{
- public void set_bt_compare(DbBtreeCompare bt_compare)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Set the Btree key comparison function. The comparison function is
-called when it is necessary to compare a key specified by the
-application with a key currently stored in the tree. The first argument
-to the comparison function is the <a href="../api_java/dbt_class.html">Dbt</a> representing the
-application supplied key, the second is the current tree's key.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first key argument is considered to be
-respectively less than, equal to, or greater than the second key
-argument. In addition, the comparison function must cause the keys in
-the database to be <i>well-ordered</i>. The comparison function
-must correctly handle any key values used by the application (possibly
-including zero-length keys). In addition, when Btree key prefix
-comparison is being performed (see <a href="../api_java/db_set_bt_prefix.html">Db.set_bt_prefix</a> for more
-information), the comparison routine may be passed a prefix of any
-database key. The <b>data</b> and <b>size</b> fields of the
-<a href="../api_java/dbt_class.html">Dbt</a> are the only fields that may be used for the purposes of
-this comparison.
-<p>If no comparison function is specified, the keys are compared lexically,
-with shorter keys collating before longer keys. The same comparison
-method must be used each time a particular Btree is opened.
-<p>The Db.set_bt_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_bt_compare method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_bt_minkey.html b/db/docs/api_java/db_set_bt_minkey.html
deleted file mode 100644
index dc7c17451..000000000
--- a/db/docs/api_java/db_set_bt_minkey.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!--$Id: db_set_bt_minkey.so,v 10.14 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_bt_minkey</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_bt_minkey</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int set_bt_minkey(int bt_minkey)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the minimum number of keys that will be stored on any single
-Btree page.
-<p>This value is used to determine which keys will be stored on overflow
-pages, i.e. if a key or data item is larger than the underlying database
-page size divided by the <b>bt_minkey</b> value, it will be stored on
-overflow pages instead of within the page itself. The <b>bt_minkey</b>
-value specified must be at least 2; if <b>bt_minkey</b> is not explicitly
-set, a value of 2 is used.
-<p>The Db.set_bt_minkey interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_bt_minkey method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_bt_prefix.html b/db/docs/api_java/db_set_bt_prefix.html
deleted file mode 100644
index a6e823969..000000000
--- a/db/docs/api_java/db_set_bt_prefix.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!--$Id: db_set_bt_prefix.so,v 10.25 2000/09/08 21:35:26 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_bt_prefix</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_bt_prefix</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbBtreePrefix
-{
- public abstract int bt_prefix(Db db, Dbt dbt1, Dbt dbt2);
-}
-public class Db
-{
- public void set_bt_prefix(DbBtreePrefix bt_prefix)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Set the Btree prefix function. The prefix function must return the
-number of bytes of the second key argument that would be required by
-the Btree key comparison function to determine the second key argument's
-ordering relationship with respect to the first key argument. If the
-two keys are equal, the key length should be returned. The prefix
-function must correctly handle any key values used by the application
-(possibly including zero-length keys). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_java/dbt_class.html">Dbt</a> are the only fields that may be
-used for the purposes of this determination.
-<p>The prefix function is used to determine the amount by which keys stored
-on the Btree internal pages can be safely truncated without losing their
-uniqueness. See the <a href="../ref/am_conf/bt_prefix.html">Btree
-prefix comparison</a> section of the Reference Guide for more details about
-how this works. The usefulness of this is data dependent, but in some
-data sets can produce significantly reduced tree sizes and search times.
-<p>If no prefix function or key comparison function is specified by the
-application, a default lexical comparison function is used as the prefix
-function. If no prefix function is specified and a key comparison
-function is specified, no prefix function is used. It is an error to
-specify a prefix function without also specifying a key comparison
-function.
-<p>The Db.set_bt_prefix interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_bt_prefix method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_cache_priority.html b/db/docs/api_java/db_set_cache_priority.html
deleted file mode 100644
index 4915b958f..000000000
--- a/db/docs/api_java/db_set_cache_priority.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!--Id: db_set_cache_priority.so,v 10.3 2002/06/24 14:49:09 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_cache_priority</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.set_cache_priority</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_cache_priority(int priority)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the cache priority for pages from the specified database. The
-priority of a page biases the replacement algorithm to be more or less
-likely to discard a page when space is needed in the buffer pool. The
-bias is temporary, and pages will eventually be discarded if they are
-not referenced again. The Db.set_cache_priority interface is
-only advisory, and does not guarantee pages will be treated in a specific
-way.
-<p>The <b>priority</b> argument must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_PRIORITY_VERY_LOW">Db.DB_PRIORITY_VERY_LOW</a><dd>The lowest priority: pages are the most likely to be discarded.
-<dt><a name="Db.DB_PRIORITY_LOW">Db.DB_PRIORITY_LOW</a><dd>The next lowest priority.
-<dt><a name="Db.DB_PRIORITY_DEFAULT">Db.DB_PRIORITY_DEFAULT</a><dd>The default priority.
-<dt><a name="Db.DB_PRIORITY_HIGH">Db.DB_PRIORITY_HIGH</a><dd>The next highest priority.
-<dt><a name="Db.DB_PRIORITY_VERY_HIGH">Db.DB_PRIORITY_VERY_HIGH</a><dd>The highest priority: pages are the least likely to be discarded.
-</dl>
-<p>The Db.set_cache_priority method configures a database, not only operations performed
-using the specified <a href="../api_java/db_class.html">Db</a> handle.
-<p>The Db.set_cache_priority interface may be called at any time during the life of
-the application.
-<p>The Db.set_cache_priority method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.set_cache_priority method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.set_cache_priority method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_err.html">Db.err</a>,
-<a href="../api_java/db_err.html">Db.errx</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_cachesize.html b/db/docs/api_java/db_set_cachesize.html
deleted file mode 100644
index 67313aa5d..000000000
--- a/db/docs/api_java/db_set_cachesize.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!--$Id: db_set_cachesize.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_cachesize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_cachesize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int set_cachesize(int gbytes, int bytes, int ncache)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
-<p>The default cache size is 256KB, and may not be specified as less than
-20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>As databases opened within Berkeley DB environments use the cache specified to
-the environment, it is an error to attempt to set a cache in a database
-created within an environment.
-<p>The Db.set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_cachesize method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cache size was impossibly small.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_dup_compare.html b/db/docs/api_java/db_set_dup_compare.html
deleted file mode 100644
index ea12dda35..000000000
--- a/db/docs/api_java/db_set_dup_compare.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!--$Id: db_set_dup_compare.so,v 10.21 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_dup_compare</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_dup_compare</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbDupCompare
-{
- public abstract int dup_compare(Db db, Dbt dbt1, Dbt dbt2);
-}
-public class Db
-{
- public void set_dup_compare(DbDupCompare dup_compare)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Set the duplicate data item comparison function. The comparison function
-is called when it is necessary to compare a data item specified by the
-application with a data item currently stored in the tree. The first
-argument to the comparison function is the <a href="../api_java/dbt_class.html">Dbt</a> representing the
-application's data item, the second is the current tree's data item.
-<p>The comparison function must return an integer value less than, equal
-to, or greater than zero if the first data item argument is considered
-to be respectively less than, equal to, or greater than the second data
-item argument. In addition, the comparison function must cause the data
-items in the set to be <i>well-ordered</i>. The comparison function
-must correctly handle any data item values used by the application
-(possibly including zero-length data items). The <b>data</b> and
-<b>size</b> fields of the <a href="../api_java/dbt_class.html">Dbt</a> are the only fields that may be
-used for the purposes of this comparison.
-<p>If no comparison function is specified, the data items are compared
-lexically, with shorter data items collating before longer data items.
-The same duplicate data item comparison method must be used each time
-a particular Btree is opened.
-<p>The Db.set_dup_compare interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_dup_compare method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_encrypt.html b/db/docs/api_java/db_set_encrypt.html
deleted file mode 100644
index 46cca0da1..000000000
--- a/db/docs/api_java/db_set_encrypt.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!--Id: db_set_encrypt.so,v 10.2 2002/06/24 14:49:10 bostic Exp -->
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_encrypt</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.set_encrypt</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_encrypt(String passwd, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_java/dbenv_class.html">DbEnv</a> and <a href="../api_java/db_class.html">Db</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_ENCRYPT_AES">Db.DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
-and Federal Information Processing Standard (FIPS) 197) algorithm for
-encryption or decryption.
-</dl>
-<p>Because databases opened within Berkeley DB environments use the password
-specified to the environment, it is an error to attempt to set a
-password in a database created within an environment.
-<p>The Db.set_encrypt interface may not be called after the <a href="../api_java/db_open.html">Db.open</a>
-interface is called.
-<p>The Db.set_encrypt method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.set_encrypt method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
-<a href="../api_java/db_open.html">Db.open</a>
-was called.
-</dl>
-<p>The Db.set_encrypt method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.set_encrypt method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_err.html">Db.err</a>,
-<a href="../api_java/db_err.html">Db.errx</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_errcall.html b/db/docs/api_java/db_set_errcall.html
deleted file mode 100644
index 62f39f6b3..000000000
--- a/db/docs/api_java/db_set_errcall.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--$Id: db_set_errcall.so,v 10.7 1999/12/20 08:52:28 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_errcall</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_errcall</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbErrcall
-{
- public abstract void errcall(String errpfx, String msg);
-}
-public class Db
-{
- public void set_errcall(DbErrcall errcall);
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-When an error occurs in the Berkeley DB library, an exception is thrown. In
-some cases, however, the <b>errno</b> value may be insufficient to
-completely describe the cause of the error, especially during initial
-application debugging.
-<p>The Db.set_errcall method is used to enhance the mechanism for reporting error
-messages to the application. The <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method must be
-called with a single object argument. The object's class must implement
-the DbErrcall interface. In some cases, when an error occurs, Berkeley DB will
-invoke the object's errcall() method with two arguments; the first is the
-prefix string (as previously set by <a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a> or
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>), the second will be an error message string.
-It is up to this method to display the message in an appropriate manner.
-<p>Alternatively, you can use the <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a> method to display
-the additional information via an output stream. You should not mix these
-approaches.
-<p>This error logging enhancement does not slow performance or significantly
-increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>For <a href="../api_java/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
-Db.set_errcall method affects the entire environment and is equivalent to calling
-the <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method.
-<p>The Db.set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_error_stream.html b/db/docs/api_java/db_set_error_stream.html
deleted file mode 100644
index 611ae5420..000000000
--- a/db/docs/api_java/db_set_error_stream.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--Id: db_set_error_stream.so,v 10.2 2002/08/18 21:15:54 bostic Exp -->
-<!--Id: env_set_error_stream.so,v 10.19 2002/08/18 21:16:27 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_error_stream</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.set_error_stream</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void Db.set_error_stream(OutputStream s)
- throws DbException
-</pre></h3>
-<h1>Description</h1>
-<p>When an error occurs in the Berkeley DB library, an exception is thrown. In
-some cases, however, the <b>errno</b> value may be insufficient to
-completely describe the cause of the error, especially during initial
-application debugging.
-<p>The <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a> and Db.set_error_stream methods
-are used to enhance the mechanism for reporting error messages to the
-application by setting a OutputStream to be used for displaying additional
-Berkeley DB error messages. In some cases, when an error occurs, Berkeley DB will
-output an additional error message to the specified stream.
-<p>The error message will consist of the prefix string and a colon
-("<b>:</b>") (if a prefix string was previously specified using
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>), an error string, and a trailing
-&lt;newline&gt; character.
-<p>Alternatively, you can use the <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method to capture the
-additional error information in a way that does not use output streams.
-You should not mix these approaches.
-<p>This error-logging enhancement does not slow performance or significantly
-increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>For <a href="../api_java/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
-Db.set_error_stream method affects the entire environment and is equivalent to calling
-the <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a> method.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_list.html">Databases and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_errpfx.html b/db/docs/api_java/db_set_errpfx.html
deleted file mode 100644
index 36db5bd8a..000000000
--- a/db/docs/api_java/db_set_errpfx.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--$Id: db_set_errpfx.so,v 10.6 1999/12/20 08:52:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_errpfx</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_errpfx</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_errpfx(String errpfx);
-</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>For <a href="../api_java/db_class.html">Db</a> handles opened inside of Berkeley DB environments, calling the
-Db.set_errpfx method affects the entire environment and is equivalent to calling
-the <a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a> method.
-<p>The Db.set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_feedback.html b/db/docs/api_java/db_set_feedback.html
deleted file mode 100644
index b6dc64fc2..000000000
--- a/db/docs/api_java/db_set_feedback.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--$Id: db_set_feedback.so,v 10.16 2000/07/09 19:11:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_feedback</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_feedback</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbFeedback
-{
- public abstract void db_feedback(Db db, int opcode, int pct);
-}
-public class Db
-{
- public void set_feedback(DbFeedback db_feedback)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The Db.set_feedback method can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback method. This method must be declared with
-three arguments: the first will be a reference to the enclosing database
-handle, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback method to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_UPGRADE">Db.DB_UPGRADE</a><dd>The underlying database is being upgraded.
-<p><dt><a name="Db.DB_VERIFY">Db.DB_VERIFY</a><dd>The underlying database is being verified.
-</dl>
-<p>The Db.set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The Db.set_feedback method throws an exception that encapsulates a non-zero error value on
-failure.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_flags.html b/db/docs/api_java/db_set_flags.html
deleted file mode 100644
index 2a79213ea..000000000
--- a/db/docs/api_java/db_set_flags.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--$Id: db_set_flags.so,v 10.26 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_flags</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_flags</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_flags(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Calling Db.set_flags is additive, there is no way to clear flags.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<h3>Btree</h3>
-<p>The following flags may be specified for the Btree access method:
-<p><dl compact>
-<p><dt><a name="Db.DB_DUP">Db.DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both Db.DB_DUP and
-Db.DB_RECNUM.
-<p><dt><a name="Db.DB_DUPSORT">Db.DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
-A default, lexical comparison will be used.
-It is an error to specify both Db.DB_DUPSORT and Db.DB_RECNUM.
-<p><dt><a name="Db.DB_RECNUM">Db.DB_RECNUM</a><dd>Support retrieval from the Btree using record numbers. For more
-information, see the DB_GET_RECNO flag to the <a href="../api_java/db_get.html">Db.get</a> and
-<a href="../api_java/dbc_get.html">Dbc.get</a> methods.
-<p>Logical record numbers in Btree databases are mutable in the face of
-record insertion or deletion. See the DB_RENUMBER flag in the Recno
-access method information for further discussion.
-<p>Maintaining record counts within a Btree introduces a serious point of
-contention, namely the page locations where the record counts are stored.
-In addition, the entire tree must be locked during both insertions and
-deletions, effectively single-threading the tree for those operations.
-Specifying DB_RECNUM can result in serious performance degradation for
-some applications and data sets.
-<p>It is an error to specify both DB_DUP and DB_RECNUM.
-<p><dt><a name="Db.DB_REVSPLITOFF">Db.DB_REVSPLITOFF</a><dd>Turn off reverse splitting in the Btree. As pages are emptied in a
-database, the Berkeley DB Btree implementation attempts to coalesce empty pages
-into higher-level pages in order to keep the tree as small as possible
-and minimize tree search time. This can hurt performance in applications
-with cyclical data demands, that is, applications where the database grows
-and shrinks repeatedly. For example, because Berkeley DB does page-level
-locking, the maximum level of concurrency in a database of 2 pages is far
-smaller than that in a database of 100 pages, and so a database that has
-shrunk to a minimal size can cause severe deadlocking when a new cycle of
-data insertion begins.
-</dl>
-<h3>Hash</h3>
-<p>The following flags may be specified for the Hash access method:
-<p><dl compact>
-<p><dt><a name="Db.DB_DUP">Db.DB_DUP</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-order of insertion, unless the ordering is otherwise specified by use of
-a cursor operation. It is an error to specify both Db.DB_DUP and
-Db.DB_RECNUM.
-<p><dt><a name="Db.DB_DUPSORT">Db.DB_DUPSORT</a><dd>Permit duplicate data items in the tree, i.e. insertion when the key of
-the key/data pair being inserted already exists in the tree will be
-successful. The ordering of duplicates in the tree is determined by the
-duplicate comparison function.
-A default, lexical comparison will be used.
-It is an error to specify both Db.DB_DUPSORT and Db.DB_RECNUM.
-</dl>
-<h3>Queue</h3>
-<p>There are no additional flags that may be specified for the Queue access
-method.
-<h3>Recno</h3>
-<p>The following flags may be specified for the Recno access method:
-<p><dl compact>
-<p><dt><a name="Db.DB_RENUMBER">Db.DB_RENUMBER</a><dd>Specifying the DB_RENUMBER flag causes the logical record numbers to be
-mutable, and change as records are added to and deleted from the database.
-For example, the deletion of record number 4 causes records numbered 5
-and greater to be renumbered downward by 1. If a cursor was positioned
-to record number 4 before the deletion, it will reference the new record
-number 4, if any such record exists, after the deletion. If a cursor was
-positioned after record number 4 before the deletion, it will be shifted
-downward 1 logical record, continuing to reference the same record as it
-did before.
-<p>Using the <a href="../api_java/db_put.html">Db.put</a> or <a href="../api_java/dbc_put.html">Dbc.put</a> interfaces to create new
-records will cause the creation of multiple records if the record number
-is more than one greater than the largest record currently in the
-database. For example, creating record 28, when record 25 was previously
-the last record in the database, will create records 26 and 27 as well as
-28. Attempts to retrieve records that were created in this manner will
-result in an error return of <a href="../ref/program/errorret.html#DB_KEYEMPTY">Db.DB_KEYEMPTY</a>.
-<p>If a created record is not at the end of the database, all records
-following the new record will be automatically renumbered upward by 1.
-For example, the creation of a new record numbered 8 causes records
-numbered 8 and greater to be renumbered upward by 1. If a cursor was
-positioned to record number 8 or greater before the insertion, it will be
-shifted upward 1 logical record, continuing to reference the same record
-as it did before.
-<p>For these reasons, concurrent access to a Recno database with the
-Db.DB_RENUMBER flag specified may be largely meaningless, although
-it is supported.
-<p><dt><a name="Db.DB_SNAPSHOT">Db.DB_SNAPSHOT</a><dd>This flag specifies that any specified <b>re_source</b> file be read in
-its entirety when <a href="../api_java/db_open.html">Db.open</a> is called. If this flag is not
-specified, the <b>re_source</b> file may be read lazily.
-</dl>
-<p>The Db.set_flags interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_flags method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_h_ffactor.html b/db/docs/api_java/db_set_h_ffactor.html
deleted file mode 100644
index c5d10aab0..000000000
--- a/db/docs/api_java/db_set_h_ffactor.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--$Id: db_set_h_ffactor.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_h_ffactor</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_h_ffactor</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_h_ffactor(int h_ffactor)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the desired density within the hash table.
-<p>The density is an approximation of the number of keys allowed to
-accumulate in any one bucket, determining when the hash table grows or
-shrinks. If you know the average sizes of the keys and data in your
-dataset, setting the fill factor can enhance performance. A reasonable
-rule computing fill factor is to set it to:
-<p><blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
-<p>If no value is specified, the fill factor will be selected dynamically as
-pages are filled.
-<p>The Db.set_h_ffactor interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_h_ffactor method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_h_hash.html b/db/docs/api_java/db_set_h_hash.html
deleted file mode 100644
index 89bccc1fb..000000000
--- a/db/docs/api_java/db_set_h_hash.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--$Id: db_set_h_hash.so,v 10.18 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_h_hash</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_h_hash</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbHash
-{
- public abstract int hash(Db db, byte[] data, int len);
-}
-public class Db
-{
- public void set_h_hash(DbHash h_hash)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Set a user defined hash method; if no hash method is specified, a default
-hash method is used. Since no hash method performs equally well on all
-possible data, the user may find that the built-in hash method performs
-poorly with a particular data set. User specified hash functions must
-take a pointer to a byte string and a length as arguments and return a
-value of type
-<b>int</b>.
-The hash function must handle any key values used by the application
-(possibly including zero-length keys).
-<p>If a hash method is specified, <a href="../api_java/db_open.html">Db.open</a> will attempt to determine
-if the hash method specified is the same as the one with which the database
-was created, and will fail if it detects that it is not.
-<p>The Db.set_h_hash interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_h_hash method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_h_nelem.html b/db/docs/api_java/db_set_h_nelem.html
deleted file mode 100644
index 279e109ab..000000000
--- a/db/docs/api_java/db_set_h_nelem.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--$Id: db_set_h_nelem.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_h_nelem</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_h_nelem</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_h_nelem(int h_nelem)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set an estimate of the final size of the hash table.
-<p>If not set or set too low, hash tables will still expand gracefully
-as keys are entered, although a slight performance degradation may be
-noticed.
-<p>The Db.set_h_nelem interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_h_nelem method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_lorder.html b/db/docs/api_java/db_set_lorder.html
deleted file mode 100644
index 9f6ce37d9..000000000
--- a/db/docs/api_java/db_set_lorder.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--$Id: db_set_lorder.so,v 10.15 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_lorder</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_lorder</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lorder(int lorder)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the byte order for integers in the stored database metadata. The
-number should represent the order as an integer, for example, big endian
-order is the number 4,321, and little endian order is the number 1,234.
-If <b>lorder</b> is not explicitly set, the host order of the machine
-where the Berkeley DB library was compiled is used.
-<p>The value of <b>lorder</b> is ignored except when databases are being
-created. If a database already exists, the byte order it uses is
-determined when the database is opened.
-<p><b>The access methods provide no guarantees about the byte ordering of the
-application data stored in the database, and applications are responsible
-for maintaining any necessary ordering.</b>
-<p>The Db.set_lorder interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_lorder method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_pagesize.html b/db/docs/api_java/db_set_pagesize.html
deleted file mode 100644
index 23c2462a0..000000000
--- a/db/docs/api_java/db_set_pagesize.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--$Id: db_set_pagesize.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_pagesize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_pagesize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_pagesize(long pagesize)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the pages used to hold items in the database, in bytes.
-The minimum page size is 512 bytes and the maximum page size is 64K bytes.
-If the page size is not explicitly set, one is selected based on the
-underlying filesystem I/O block size. The automatically selected size
-has a lower limit of 512 bytes and an upper limit of 16K bytes.
-<p>For information on tuning the Berkeley DB page size, see
-<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.
-<p>The Db.set_pagesize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_pagesize method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_q_extentsize.html b/db/docs/api_java/db_set_q_extentsize.html
deleted file mode 100644
index 081c5b76c..000000000
--- a/db/docs/api_java/db_set_q_extentsize.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--$Id: db_set_q_extentsize.so,v 1.3 2000/11/21 19:25:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_q_extentsize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_q_extentsize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_q_extentsize(int extentsize)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the extents used to hold pages in a Queue database,
-specified as a number of pages. Each extent is created as a separate
-physical file. If no extent size is set, the default behavior is to
-create only a single underlying database file.
-<p>For information on tuning the extent size, see
-<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.
-<p>The Db.set_q_extentsize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_q_extentsize method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_re_delim.html b/db/docs/api_java/db_set_re_delim.html
deleted file mode 100644
index dfe6bb848..000000000
--- a/db/docs/api_java/db_set_re_delim.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--$Id: db_set_re_delim.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_re_delim</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_re_delim</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_re_delim(int re_delim)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the delimiting byte used to mark the end of a record in the backing
-source file for the Recno access method.
-<p>This byte is used for variable length records, if the <b>re_source</b>
-file is specified. If the <b>re_source</b> file is specified and no
-delimiting byte was specified, &lt;newline&gt; characters (i.e.
-ASCII 0x0a) are interpreted as end-of-record markers.
-<p>The Db.set_re_delim interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_re_delim method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_re_len.html b/db/docs/api_java/db_set_re_len.html
deleted file mode 100644
index 34fa523b0..000000000
--- a/db/docs/api_java/db_set_re_len.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--$Id: db_set_re_len.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_re_len</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_re_len</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_re_len(int re_len)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>For the Queue access method, specify that the records are of length
-<b>re_len</b>.
-<p>For the Recno access method, specify that the records are fixed-length,
-not byte delimited, and are of length <b>re_len</b>.
-<p>Any records added to the database that are less than <b>re_len</b> bytes
-long are automatically padded (see <a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a> for more
-information).
-<p>Any attempt to insert records into the database that are greater than
-<b>re_len</b> bytes long will cause the call to fail immediately and
-return an error.
-<p>The Db.set_re_len interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_re_len method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_re_pad.html b/db/docs/api_java/db_set_re_pad.html
deleted file mode 100644
index 118130c54..000000000
--- a/db/docs/api_java/db_set_re_pad.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--$Id: db_set_re_pad.so,v 10.16 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_re_pad</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_re_pad</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_re_pad(int re_pad)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the padding character for short, fixed-length records for the Queue
-and Recno access methods.
-<p>If no pad character is specified, &lt;space&gt; characters (i.e.,
-ASCII 0x20) are used for padding.
-<p>The Db.set_re_pad interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_re_pad method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_set_re_source.html b/db/docs/api_java/db_set_re_source.html
deleted file mode 100644
index 7ff82a204..000000000
--- a/db/docs/api_java/db_set_re_source.html
+++ /dev/null
@@ -1,123 +0,0 @@
-<!--$Id: db_set_re_source.so,v 10.17 2000/05/01 21:57:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.set_re_source</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.set_re_source</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_re_source(String re_source)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the underlying source file for the Recno access method. The purpose
-of the <b>re_source</b> value is to provide fast access and modification
-to databases that are normally stored as flat text files.
-<p>If the <b>re_source</b> field is set, it specifies an underlying flat
-text database file that is read to initialize a transient record number
-index. In the case of variable length records, the records are separated
-as specified by <a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>. For example, standard UNIX
-byte stream files can be interpreted as a sequence of variable length
-records separated by &lt;newline&gt; characters.
-<p>In addition, when cached data would normally be written back to the
-underlying database file (e.g., the <a href="../api_java/db_close.html">Db.close</a> or <a href="../api_java/db_sync.html">Db.sync</a>
-methods are called), the in-memory copy of the database will be written
-back to the <b>re_source</b> file.
-<p>By default, the backing source file is read lazily, i.e., records are not
-read from the file until they are requested by the application.
-<b>If multiple processes (not threads) are accessing a Recno database
-concurrently and either inserting or deleting records, the backing source
-file must be read in its entirety before more than a single process
-accesses the database, and only that process should specify the backing
-source file as part of the <a href="../api_java/db_open.html">Db.open</a> call. See the <a href="../api_java/db_set_flags.html#DB_SNAPSHOT">Db.DB_SNAPSHOT</a>
-flag for more information.</b>
-<p><b>Reading and writing the backing source file specified by <b>re_source</b>
-cannot be transactionally protected because it involves filesystem
-operations that are not part of the Db transaction methodology.</b>
-For this reason, if a temporary database is used to hold the records,
-i.e., a null was specified as the <b>file</b> argument to <a href="../api_java/db_open.html">Db.open</a>,
-it is possible to lose the contents of the <b>re_source</b> file, e.g.,
-if the system crashes at the right instant.
-If a file is used to hold the database, i.e., a file name was specified
-as the <b>file</b> argument to <a href="../api_java/db_open.html">Db.open</a>, normal database
-recovery on that file can be used to prevent information loss,
-although it is still possible that the contents of <b>re_source</b>
-will be lost if the system crashes.
-<p>The <b>re_source</b> file must already exist (but may be zero-length) when
-<a href="../api_java/db_open.html">Db.open</a> is called.
-<p>It is not an error to specify a read-only <b>re_source</b> file when
-creating a database, nor is it an error to modify the resulting database.
-However, any attempt to write the changes to the backing source file using
-either the <a href="../api_java/db_sync.html">Db.sync</a> or <a href="../api_java/db_close.html">Db.close</a> methods will fail, of course.
-Specify the <a href="../api_java/db_close.html#DB_NOSYNC">Db.DB_NOSYNC</a> flag to the <a href="../api_java/db_close.html">Db.close</a> method to stop it
-from attempting to write the changes to the backing file, instead, they
-will be silently discarded.
-<p>For all of the above reasons, the <b>re_source</b> field is generally
-used to specify databases that are read-only for <a href="../api_java/db_class.html">Db</a> applications,
-and that are either generated on the fly by software tools, or modified
-using a different mechanism, e.g., a text editor.
-<p>The Db.set_re_source interface may only be used to configure Berkeley DB before
-the <a href="../api_java/db_open.html">Db.open</a> interface is called.
-<p>The Db.set_re_source method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/db_open.html">Db.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_stat.html b/db/docs/api_java/db_stat.html
deleted file mode 100644
index 197ba1913..000000000
--- a/db/docs/api_java/db_stat.html
+++ /dev/null
@@ -1,185 +0,0 @@
-<!--$Id: db_stat.so,v 10.37 2000/10/03 21:55:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.stat</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public Object Db.stat(int flags);
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.stat method creates a statistical structure and
-fills it with statistics for the database.
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The <b>flags</b> parameter must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_CACHED_COUNTS">Db.DB_CACHED_COUNTS</a><dd>Return a cached count of the keys and records in a database. This flag
-makes it possible for applications to request an possibly approximate key
-and record count without incurring the performance penalty of traversing
-the entire database. The statistics information described for the access
-method <b>XX_nkeys</b> and <b>XX_ndata</b> fields below is filled in,
-but no other information is collected. If the cached information has
-never been set, the fields will be returned set to 0.
-<p><dt><a name="Db.DB_RECORDCOUNT">Db.DB_RECORDCOUNT</a><dd>Return a count of the records in a Btree or Recno Access Method database.
-This flag makes it possible for applications to request a record count
-without incurring the performance penalty of traversing the entire
-database. The statistics information described for the <b>bt_nkeys</b>
-field below is filled in, but no other information is collected.
-<p>This option is only available for Recno databases, or Btree databases
-where the underlying database was created with the <a href="../api_java/db_set_flags.html#DB_RECNUM">Db.DB_RECNUM</a>
-flag.
-</dl>
-<p>The Db.stat method may access all of the pages in the database,
-incurring a severe performance penalty as well as possibly flushing the
-underlying buffer pool.
-<p>In the presence of multiple threads or processes accessing an active
-database, the information returned by Db.stat may be out-of-date.
-<p>If the database was not opened readonly and the Db.DB_CACHED_COUNTS
-flag was not specified, the cached key and record numbers will be updated
-after the statistical information has been gathered.
-<p>The Db.stat method cannot be transaction protected. For this reason,
-it should be called in a thread of control that has no open cursors or
-active transactions.
-<p>The Db.stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h3>Hash Statistics</h3>
-<p>In the case of a Hash database,
-the statistics are returned in an instance of DbHashStat. The data
-fields are available from DbHashStat:
-<p><dl compact>
-<p><dt>public int hash_magic;<dd>Magic number that identifies the file as a Hash file.
-<dt>public int hash_version;<dd>The version of the Hash database.
-<dt>public int hash_nkeys;<dd>The number of unique keys in the database.
-<dt>public int hash_ndata;<dd>The number of key/data pairs in the database.]
-<dt>public int hash_pagesize;<dd>The underlying Hash database page (and bucket) size.
-<dt>public int hash_nelem;<dd>The estimated size of the hash table specified at database creation time.
-<dt>public int hash_ffactor;<dd>The desired fill factor (number of items per bucket) specified at database
-creation time.
-<dt>public int hash_buckets;<dd>The number of hash buckets.
-<dt>public int hash_free;<dd>The number of pages on the free list.
-<dt>public int hash_bfree;<dd>The number of bytes free on bucket pages.
-<dt>public int hash_bigpages;<dd>The number of big key/data pages.
-<dt>public int hash_big_bfree;<dd>The number of bytes free on big item pages.
-<dt>public int hash_overflows;<dd>The number of overflow pages (overflow pages are pages that contain items
-that did not fit in the main bucket page).
-<dt>public int hash_ovfl_free;<dd>The number of bytes free on overflow pages.
-<dt>public int hash_dup;<dd>The number of duplicate pages.
-<dt>public int hash_dup_free;<dd>The number of bytes free on duplicate pages.
-</dl>
-<h3>Btree and Recno Statistics</h3>
-<p>In the case of a Btree or Recno database,
-the statistics are returned in an instance of DbBtreeStat. The data
-fields are available from DbBtreeStat:
-<p><dl compact>
-<p><dt>public int bt_magic;<dd>Magic number that identifies the file as a Btree database.
-<dt>public int bt_version;<dd>The version of the Btree database.
-<dt>public int bt_nkeys;<dd>For the Btree Access Method, the number of unique keys in the database.
-<p>For the Recno Access Method, the number of records in the database.
-<dt>public int bt_ndata;<dd>For the Btree Access Method, the number of key/data pairs in the database.
-<p>For the Recno Access Method, the number of records in the database. If
-the database has been configured to not re-number records during
-deletion, the number of records will only reflect undeleted records.
-<dt>public int bt_pagesize;<dd>Underlying database page size.
-<dt>public int bt_minkey;<dd>The minimum keys per page.
-<dt>public int bt_re_len;<dd>The length of fixed-length records.
-<dt>public int bt_re_pad;<dd>The padding byte value for fixed-length records.
-<dt>public int bt_levels;<dd>Number of levels in the database.
-<dt>public int bt_int_pg;<dd>Number of database internal pages.
-<dt>public int bt_leaf_pg;<dd>Number of database leaf pages.
-<dt>public int bt_dup_pg;<dd>Number of database duplicate pages.
-<dt>public int bt_over_pg;<dd>Number of database overflow pages.
-<dt>public int bt_free;<dd>Number of pages on the free list.
-<dt>public int bt_int_pgfree;<dd>Number of bytes free in database internal pages.
-<dt>public int bt_leaf_pgfree;<dd>Number of bytes free in database leaf pages.
-<dt>public int bt_dup_pgfree;<dd>Number of bytes free in database duplicate pages.
-<dt>public int bt_over_pgfree;<dd>Number of bytes free in database overflow pages.
-</dl>
-<h3>Queue Statistics</h3>
-<p>In the case of a Queue database,
-the statistics are returned in an instance of DbQueueStat. The data
-fields are available from DbQueueStat:
-<p><dl compact>
-<p><dt>public int qs_magic;<dd>Magic number that identifies the file as a Queue file.
-<dt>public int qs_version;<dd>The version of the Queue file type.
-<dt>public int qs_nkeys;<dd>The number of records in the database.
-<dt>public int qs_ndata;<dd>The number of records in the database.
-<dt>public int qs_pagesize;<dd>Underlying database page size.
-<dt>public int qs_pages;<dd>Number of pages in the database.
-<dt>public int qs_re_len;<dd>The length of the records.
-<dt>public int qs_re_pad;<dd>The padding byte value for the records.
-<dt>public int qs_pgfree;<dd>Number of bytes free in database pages.
-<dt>public int qs_start;<dd>Start offset.
-<dt>public int qs_first_recno;<dd>First undeleted record in the database.
-<dt>public int qs_cur_recno;<dd>Last allocated record number in the database.
-</dl>
-<p>The Db.stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Db.stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.stat method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_sync.html b/db/docs/api_java/db_sync.html
deleted file mode 100644
index 5162bd13d..000000000
--- a/db/docs/api_java/db_sync.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!--$Id: db_sync.so,v 10.20 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.sync</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.sync</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int sync(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.sync method flushes any cached information to disk.
-<p>If the database is in memory only, the Db.sync method has no effect and
-will always succeed.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>See <a href="../api_java/db_close.html">Db.close</a> for a discussion of Berkeley DB and cached data.
-<p>The Db.sync method throws an exception that encapsulates a non-zero error value on
-failure, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> if the underlying database still has
-dirty pages in the cache. (The only reason to return
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> is if another thread of control was writing pages
-in the underlying database file at the same time as the
-Db.sync method was being called. For this reason, a return of
-<a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> can normally be ignored, or, in cases where it is
-a possible return value, there may be no reason to call
-Db.sync.)
-<h1>Errors</h1>
-<p>The Db.sync method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The Db.sync method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.sync method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_truncate.html b/db/docs/api_java/db_truncate.html
deleted file mode 100644
index c1ce182e0..000000000
--- a/db/docs/api_java/db_truncate.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!--Id: db_truncate.so,v 1.6 2001/04/18 13:44:46 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.truncate</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>Db.truncate</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public int truncate(String file, String database, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.truncate interface empties the database specified by
-the <b>file</b> and <b>database</b> arguments, discarding all records
-it contains. If no <b>database</b> is specified, the underlying file
-represented by <b>file</b> is emptied.
-The number of records discarded from the database is returned.
-<p>Truncate must have exclusive use of the database. While truncate is
-transaction-protected, it cannot be part of a application-created
-transaction.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>After Db.truncate has been called, regardless of its return,
-the <a href="../api_java/db_class.html">Db</a> handle may not be accessed again.
-<p>The Db.truncate method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a>, the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.truncate
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<h1>Errors</h1>
-<p>The Db.truncate method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>A database in the file is currently open.
-</dl>
-<p>If the file or directory does not exist, the Db.truncate method will
-fail and
-throw a FileNotFoundException exception.
-<p>The Db.truncate method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.truncate method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>,
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_upgrade.html b/db/docs/api_java/db_upgrade.html
deleted file mode 100644
index 6f6da088c..000000000
--- a/db/docs/api_java/db_upgrade.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!--$Id: db_upgrade.so,v 10.18 2000/05/01 15:58:04 krinsky Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.upgrade</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.upgrade</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void upgrade(String file, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.upgrade method upgrades all of the databases included in the
-file <b>file</b>, if necessary. If no upgrade is necessary,
-Db.upgrade always returns success.
-<p><b>Database upgrades are done in place and are destructive, e.g., if pages
-need to be allocated and no disk space is available, the database may be
-left corrupted. Backups should be made before databases are upgraded.
-See <a href="../ref/am/upgrade.html">Upgrading databases</a> for more
-information.</b>
-<p>Unlike all other database operations, Db.upgrade may only be done
-on a system with the same byte-order as the database.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_DUPSORT">Db.DB_DUPSORT</a><dd><b>This flag is only meaningful when upgrading databases from
-releases before the Berkeley DB 3.1 release.</b>
-<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release, the
-on-disk format of duplicate data items changed. To correctly upgrade the
-format requires applications specify if duplicate data items in the
-database are sorted or not. Specifying the Db.DB_DUPSORT flag
-informs Db.upgrade that the duplicates are sorted, otherwise they
-are assumed to be unsorted. Incorrectly specifying the value of this flag
-may lead to database corruption.
-<p>Further, because the Db.upgrade method upgrades a physical file
-(including all of the databases it contains), it is not possible to use
-Db.upgrade to upgrade files where some of the databases it
-includes have sorted duplicate data items and some of the databases it
-includes have unsorted duplicate data items. If the file does not have
-more than a single database, or the databases do not support duplicate
-data items, or all of the databases that support duplicate data items
-support the same style of duplicates (either sorted or unsorted),
-Db.upgrade will work correctly as long as the Db.DB_DUPSORT
-flag is correctly specified. Otherwise, the file cannot be upgraded using
-Db.upgrade, and must be upgraded manually by dumping and
-re-loading the databases.
-</dl>
-<p>The Db.upgrade method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.upgrade
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<h1>Errors</h1>
-<p>The Db.upgrade method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The database is not in the same byte-order as the system.
-</dl>
-<p><dl compact>
-<p><dt><a name="Db.DB_OLD_VERSION">Db.DB_OLD_VERSION</a><dd>The database cannot be upgraded by this version of the Berkeley DB software.
-</dl>
-<p>The Db.upgrade method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.upgrade method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/db_verify.html b/db/docs/api_java/db_verify.html
deleted file mode 100644
index e27020283..000000000
--- a/db/docs/api_java/db_verify.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!--$Id: db_verify.so,v 10.3 2000/04/11 15:13:51 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Db.verify</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Db.verify</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void verify(String file,
- String database, java.io.OutputStream outfile, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Db.verify method verifies the integrity of all databases in the
-file specified by the file argument, and optionally outputs the databases'
-key/data pairs to a file stream.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_SALVAGE">Db.DB_SALVAGE</a><dd>Write the key/data pairs from all databases in the file to the file stream
-named in
-the <b>outfile</b> argument. The output format is the same as that
-specified for the <a href="../utility/db_dump.html">db_dump</a> utility and can be used as input for
-the <a href="../utility/db_load.html">db_load</a> utility.
-<p>Because the key/data pairs are output in page order as opposed to the sort
-order used by <a href="../utility/db_dump.html">db_dump</a>, using Db.verify to dump key/data
-pairs normally produces less than optimal loads for Btree databases.
-</dl>
-<p>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the
-<b>flags</b> parameter:
-<p><dl compact>
-<p><dt><a name="Db.DB_AGGRESSIVE">Db.DB_AGGRESSIVE</a><dd>Output <b>all</b> the key/data pairs in the file that can be found.
-By default, Db.verify does not assume corruption. For example,
-if a key/data pair on a page is marked as deleted, it is not then written
-to the output file. When Db.DB_AGGRESSIVE is specified, corruption
-is assumed, and any key/data pair that can be found is written. In this
-case, key/data pairs that are corrupted or have been deleted may appear
-in the output (even if the file being salvaged is in no way corrupt), and
-the output will almost certainly require editing before being loaded into
-a database.
-<p><dt><a name="Db.DB_NOORDERCHK">Db.DB_NOORDERCHK</a><dd>Skip the database checks for btree and duplicate sort order and for
-hashing.
-<p>The Db.verify method normally verifies that btree keys and duplicate
-items are correctly sorted and hash keys are correctly hashed. If the
-file being verified contains multiple databases using differing sorting
-or hashing algorithms, some of them must necessarily fail database
-verification as only one sort order or hash function can be specified
-before Db.verify is called. To verify files with multiple
-databases having differing sorting orders or hashing functions, first
-perform verification of the file as a whole by using the
-Db.DB_NOORDERCHK flag, and then individually verify the sort order
-and hashing function for each database in the file using the
-Db.DB_ORDERCHKONLY flag.
-<p><dt><a name="Db.DB_ORDERCHKONLY">Db.DB_ORDERCHKONLY</a><dd>Perform the database checks for btree and duplicate sort order and for
-hashing, skipped by Db.DB_NOORDERCHK.
-<p>When this flag is specified, a <b>database</b> argument should also be
-specified, indicating the database in the physical file which is to be
-checked. This flag is only safe to use on databases that have already
-successfully been verified using Db.verify with the
-Db.DB_NOORDERCHK flag set.
-</dl>
-<p>The database argument must be set to null except when the
-Db.DB_ORDERCHKONLY flag is set.
-<p>The Db.verify method throws an exception that encapsulates a non-zero error value on
-failure, and <a href="../ref/program/errorret.html#DB_VERIFY_BAD">Db.DB_VERIFY_BAD</a> if a database is corrupted. When the
-Db.DB_SALVAGE flag is specified, the <a href="../ref/program/errorret.html#DB_VERIFY_BAD">Db.DB_VERIFY_BAD</a> return
-means that all key/data pairs in the file may not have been successfully
-output.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>If the <b>dbenv</b> argument to <a href="../api_c/db_create.html">db_create</a> was initialized using
-<a href="../api_java/env_open.html">DbEnv.open</a> the environment variable <b>DB_HOME</b> may be used
-as the path of the database environment home. Specifically, Db.verify
-is affected by the configuration value DB_DATA_DIR.
-</dl>
-<h1>Errors</h1>
-<p>The Db.verify method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The Db.verify method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Db.verify method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_class.html b/db/docs/api_java/dbc_class.html
deleted file mode 100644
index 61f6b9ec2..000000000
--- a/db/docs/api_java/dbc_class.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--$Id: dbc_class.so,v 10.12 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class Dbc extends Object { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Dbc class,
-which provides cursor support for the access methods in Db.
-<p>The Dbc functions are the library interface supporting sequential
-access to the records stored by the access methods of the Berkeley DB library.
-Cursors are created by calling the <a href="../api_java/db_cursor.html">Db.cursor</a> method which returns a
- Dbc object.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_close.html b/db/docs/api_java/dbc_close.html
deleted file mode 100644
index c8ad05702..000000000
--- a/db/docs/api_java/dbc_close.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--$Id: dbc_close.so,v 10.20 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.close</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.close</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void close()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.close method discards the cursor.
-<p>It is possible for the Dbc.close method to return
-<a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">Db.DB_LOCK_DEADLOCK</a>, signaling that any enclosing transaction should
-be aborted. If the application is already intending to abort the
-transaction, this error should be ignored, and the application should
-proceed.
-<p>Once Dbc.close has been called, regardless of its return, the
-cursor handle may not be used again.
-<p>The Dbc.close method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Dbc.close method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Dbc.close method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Dbc.close method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.close method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_count.html b/db/docs/api_java/dbc_count.html
deleted file mode 100644
index 324ee1485..000000000
--- a/db/docs/api_java/dbc_count.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--$Id: dbc_count.so,v 10.4 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.count</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.count</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int count(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.count method returns a count of the number of duplicate data
-items for the key referenced by the
-cursor.
-If the underlying database does not support duplicate data items the call
-will still succeed and a count of 1 will be returned.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>If the <b>cursor</b> argument is not yet initialized, the Dbc.count method throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc.count method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Dbc.count method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.count method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_del.html b/db/docs/api_java/dbc_del.html
deleted file mode 100644
index eb4a32362..000000000
--- a/db/docs/api_java/dbc_del.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--$Id: dbc_del.so,v 10.23 2000/05/22 20:51:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.del</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.del</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int del(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.del method deletes the key/data pair currently referenced by
-the cursor.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The cursor position is unchanged after a delete, and subsequent calls to
-cursor functions expecting the cursor to reference an existing key will
-fail.
-<p>If the element has already been deleted, Dbc.del will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">Db.DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the Dbc.del method throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc.del method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Dbc.del method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p><dl compact>
-<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_java/env_open.html#DB_INIT_CDB">Db.DB_INIT_CDB</a> flag was
-specified to <a href="../api_java/env_open.html">DbEnv.open</a>.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Dbc.del method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Dbc.del method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.del method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_dup.html b/db/docs/api_java/dbc_dup.html
deleted file mode 100644
index f02afbb73..000000000
--- a/db/docs/api_java/dbc_dup.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--$Id: dbc_dup.so,v 10.8 2000/03/17 01:53:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.dup</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.dup</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public Dbc dup(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.dup method creates a new cursor that uses the same transaction
-and locker ID as the original cursor. This is useful when an application
-is using locking and requires two or more cursors in the same thread of
-control.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_POSITION">Db.DB_POSITION</a><dd>The newly created cursor is initialized to reference the same position
-in the database as the original cursor and hold the same locks. If the
-Db.DB_POSITION flag is not specified, then the created cursor is
-uninitialized and will behave like a cursor newly created using
-<a href="../api_java/db_cursor.html">Db.cursor</a>.
-</dl>
-<p>When using the Berkeley DB Concurrent Data Store product, there can be only one active write cursor
-at a time. For this reason, attempting to duplicate a cursor for which
-the <a href="../api_java/db_cursor.html#DB_WRITECURSOR">Db.DB_WRITECURSOR</a> flag was specified during creation will return
-an error.
-<p>If the <b>cursor</b> argument is not yet initialized, the Dbc.dup method throws an exception that encapsulates EINVAL.
-<p>Otherwise, the Dbc.dup method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The Dbc.dup method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The <b>cursor</b> argument was created using the
-<a href="../api_java/db_cursor.html#DB_WRITECURSOR">Db.DB_WRITECURSOR</a> flag in the Berkeley DB Concurrent Data Store product.
-</dl>
-<p>The Dbc.dup method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.dup method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_get.html b/db/docs/api_java/dbc_get.html
deleted file mode 100644
index 8213c5b51..000000000
--- a/db/docs/api_java/dbc_get.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!--$Id: dbc_get.so,v 10.46 2001/01/19 17:29:46 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.get</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.get</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int get(Dbt key, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.get method retrieves key/data pairs from the database. The
-byte array and length of the key
-are returned in the object referenced by <b>key</b> (except for the case
-of the Db.DB_SET flag where the <b>key</b> object is unchanged),
-and the byte array and length of
-the data are returned in the object referenced by <b>data</b>.
-<p>Modifications to the database during a sequential scan will be reflected
-in the scan, i.e. records inserted behind a cursor will not be returned
-while records inserted in front of a cursor will be returned.
-<p>In Queue and Recno databases, missing entries (i.e., entries that were
-never explicitly created or that were created and then deleted), will be
-skipped during a sequential scan.
-<p>If multiple threads or processes insert items into the same database file
-without using locking, the results are undefined.
-For more detail,
-see <a href="../ref/am/stability.html">Cursor stability</a>.
-<p>The <b>flags</b> parameter must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_CURRENT">Db.DB_CURRENT</a><dd>Return the key/data pair currently referenced by the cursor.
-<p>If the cursor key/data pair was deleted, Dbc.get will return
-<a href="../ref/program/errorret.html#DB_KEYEMPTY">Db.DB_KEYEMPTY</a>.
-<p>If the cursor is not yet initialized, the Dbc.get method throws an exception that encapsulates EINVAL.
-<p><dt><a name="Db.DB_FIRST">Db.DB_FIRST</a>, <a name="Db.DB_LAST">Db.DB_LAST</a><dd>The cursor is set to reference the first (last) key/data pair of the
-database, and that pair is returned. In the presence of duplicate key
-values, the first (last) data item in the set of duplicates is returned.
-<p>If the database is a Queue or Recno database, Dbc.get using the
-Db.DB_FIRST (Db.DB_LAST) flags will ignore any keys that exist
-but were never explicitly created by the application or were created and
-later deleted.
-<p>If the database is empty, Dbc.get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p><dt><a name="Db.DB_GET_BOTH">Db.DB_GET_BOTH</a><dd>The Db.DB_GET_BOTH flag is identical to the Db.DB_SET flag,
-except that both the key and the data arguments must be matched by the
-key and data item in the database.
-<p><dt><a name="Db.DB_GET_RECNO">Db.DB_GET_RECNO</a><dd>Return the record number associated with the cursor. The record number
-will be returned in <b>data</b> as described in <a href="../api_java/dbt_class.html">Dbt</a>. The
-<b>key</b> parameter is ignored.
-<p>For Db.DB_GET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_java/db_set_flags.html#DB_RECNUM">Db.DB_RECNUM</a>
-flag.
-<p><dt><a name="Db.DB_JOIN_ITEM">Db.DB_JOIN_ITEM</a><dd>Do not use the data value found in all of the cursors as a lookup key for
-the primary database, but simply return it in the key parameter instead.
-The data parameter is left unchanged.
-<p>For Db.DB_JOIN_ITEM to be specified, the underlying cursor must have
-been returned from the <a href="../api_java/db_join.html">Db.join</a> method.
-<p><dt><a name="Db.DB_NEXT">Db.DB_NEXT</a>, <a name="Db.DB_PREV">Db.DB_PREV</a><dd>If the cursor is not yet initialized, Db.DB_NEXT (Db.DB_PREV)
-is identical to Db.DB_FIRST (Db.DB_LAST). Otherwise, the cursor
-is moved to the next (previous) key/data pair of the database, and that
-pair is returned. In the presence of duplicate key values, the value of
-the key may not change.
-<p>If the database is a Queue or Recno database, Dbc.get using the
-Db.DB_NEXT (Db.DB_PREV) flag will skip any keys that exist but
-were never explicitly created by the application or were created and later
-deleted.
-<p>If the cursor is already on the last (first) record in the database,
-Dbc.get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p><dt><a name="Db.DB_NEXT_DUP">Db.DB_NEXT_DUP</a><dd>If the next key/data pair of the database is a duplicate record for the
-current key/data pair, the cursor is moved to the next key/data pair of
-the database, and that pair is returned. Otherwise, Dbc.get will
-return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p>If the cursor is not yet initialized, the Dbc.get method throws an exception that encapsulates EINVAL.
-<p><dt><a name="Db.DB_NEXT_NODUP">Db.DB_NEXT_NODUP</a>, <a name="Db.DB_PREV_NODUP">Db.DB_PREV_NODUP</a><dd>If the cursor is not yet initialized, Db.DB_NEXT_NODUP
-(Db.DB_PREV_NODUP) is identical to Db.DB_FIRST
-(Db.DB_LAST). Otherwise, the cursor is moved to the next (previous)
-non-duplicate key/data pair of the database, and that pair is returned.
-<p>If the database is a Queue or Recno database, Dbc.get using the
-Db.DB_NEXT_NODUP (Db.DB_PREV_NODUP) flags will ignore any keys
-that exist but were never explicitly created by the application or were
-created and later deleted.
-<p>If no non-duplicate key/data pairs occur after (before) the cursor
-position in the database, Dbc.get will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p><dt><a name="Db.DB_SET">Db.DB_SET</a><dd>Move the cursor to the specified key/data pair of the database, and
-return the datum associated with the given key.
-<p>In the presence of duplicate key values, Dbc.get will return the
-first data item for the given key.
-<p>If the database is a Queue or Recno database and the requested key exists,
-but was never explicitly created by the application or was later deleted,
-Dbc.get will return <a href="../ref/program/errorret.html#DB_KEYEMPTY">Db.DB_KEYEMPTY</a>.
-<p>If no matching keys are found, Dbc.get will return
-<a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-<p><dt><a name="Db.DB_SET_RANGE">Db.DB_SET_RANGE</a><dd>The Db.DB_SET_RANGE flag is identical to the Db.DB_SET flag,
-except that the key is returned as well as the data item, and, in the case
-of the Btree access method, the returned key/data pair is the smallest
-key greater than or equal to the specified key (as determined by the
-comparison method), permitting partial key matches and range
-searches.
-<p><dt><a name="Db.DB_SET_RECNO">Db.DB_SET_RECNO</a><dd>Move the cursor to the specific numbered record of the database, and
-return the associated key/data pair. The <b>data</b> field of the
-specified <b>key</b>
-must be a byte array containing a record number, as described in
-<a href="../api_java/dbt_class.html">Dbt</a>. This determines the record to be retrieved.
-<p>For Db.DB_SET_RECNO to be specified, the underlying database must be
-of type Btree and it must have been created with the <a href="../api_java/db_set_flags.html#DB_RECNUM">Db.DB_RECNUM</a>
-flag.
-</dl>
-<p>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the
-<b>flags</b> parameter:
-<p><dl compact>
-<p><dt><a name="Db.DB_RMW">Db.DB_RMW</a><dd>Acquire write locks instead of read locks when doing the retrieval.
-Setting this flag may decrease the likelihood of deadlock during a
-read-modify-write cycle by immediately acquiring the write lock during
-the read part of the cycle so that another thread of control acquiring
-a read lock for the same item, in its own read-modify-write cycle, will
-not result in deadlock.
-</dl>
-<p>Otherwise, the Dbc.get method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>If Dbc.get fails for any reason, the state of the cursor will be
-unchanged.
-<h1>Errors</h1>
-<p>The Dbc.get method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The specified cursor was not currently initialized.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Dbc.get method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>If the requested item could not be returned due to insufficient memory,
-the Dbc.get method will fail and
-throw a <a href="../api_java/mem_class.html">DbMemoryException</a> exception.
-<p>The Dbc.get method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.get method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_list.html b/db/docs/api_java/dbc_list.html
deleted file mode 100644
index a22904748..000000000
--- a/db/docs/api_java/dbc_list.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--Id: dbc_list.so,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Database Cursors and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Cursors and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/db_cursor.html">Db.cursor</a></td><td>Create a cursor handle</td></tr>
-<tr><td><a href="../api_java/dbc_close.html">Dbc.close</a></td><td>Close a cursor</td></tr>
-<tr><td><a href="../api_java/dbc_count.html">Dbc.count</a></td><td>Return count of duplicates</td></tr>
-<tr><td><a href="../api_java/dbc_del.html">Dbc.del</a></td><td>Delete by cursor</td></tr>
-<tr><td><a href="../api_java/dbc_dup.html">Dbc.dup</a></td><td>Duplicate a cursor</td></tr>
-<tr><td><a href="../api_java/dbc_get.html">Dbc.get</a></td><td>Retrieve by cursor</td></tr>
-<tr><td><a href="../api_java/dbc_get.html">Dbc.pget</a></td><td>Retrieve by cursor</td></tr>
-<tr><td><a href="../api_java/dbc_put.html">Dbc.put</a></td><td>Store by cursor</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbc_put.html b/db/docs/api_java/dbc_put.html
deleted file mode 100644
index a2969e159..000000000
--- a/db/docs/api_java/dbc_put.html
+++ /dev/null
@@ -1,157 +0,0 @@
-<!--$Id: dbc_put.so,v 10.33 2000/12/04 17:02:01 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbc.put</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbc.put</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void put(Dbt key, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The Dbc.put method stores key/data pairs into the database.
-<p>The <b>flags</b> parameter must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_AFTER">Db.DB_AFTER</a><dd>In the case of the Btree and Hash access methods, insert the data
-element as a duplicate element of the key referenced by the cursor.
-The new element appears immediately after the current cursor position.
-It is an error to specify Db.DB_AFTER if the underlying Btree or
-Hash database does not support duplicate data items. The <b>key</b>
-parameter is ignored.
-<p>In the case of the Recno access method, it is an error to specify
-Db.DB_AFTER if the underlying Recno database was not created with
-the <a href="../api_java/db_set_flags.html#DB_RENUMBER">Db.DB_RENUMBER</a> flag. If the <a href="../api_java/db_set_flags.html#DB_RENUMBER">Db.DB_RENUMBER</a> flag was
-specified, a new key is created, all records after the inserted item
-are automatically renumbered, and the key of the new record is returned
-in the structure referenced by the parameter <b>key</b>. The initial
-value of the <b>key</b> parameter is ignored. See <a href="../api_java/db_open.html">Db.open</a>
-for more information.
-<p>The Db.DB_AFTER flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc.put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, the Dbc.put function will return EINVAL.
-<p><dt><a name="Db.DB_BEFORE">Db.DB_BEFORE</a><dd>In the case of the Btree and Hash access methods, insert the data element
-as a duplicate element of the key referenced by the cursor. The new
-element appears immediately before the current cursor position. It is
-an error to specify Db.DB_BEFORE if the underlying Btree or Hash
-database does not support duplicate data items. The <b>key</b>
-parameter is ignored.
-<p>In the case of the Recno access method, it is an error to specify
-Db.DB_BEFORE if the underlying Recno database was not created with
-the <a href="../api_java/db_set_flags.html#DB_RENUMBER">Db.DB_RENUMBER</a> flag. If the <a href="../api_java/db_set_flags.html#DB_RENUMBER">Db.DB_RENUMBER</a> flag was
-specified, a new key is created, the current record and all records
-after it are automatically renumbered, and the key of the new record is
-returned in the structure referenced by the parameter <b>key</b>. The
-initial value of the <b>key</b> parameter is ignored. See
-<a href="../api_java/db_open.html">Db.open</a> for more information.
-<p>The Db.DB_BEFORE flag may not be specified to the Queue access method.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc.put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-If the underlying access method is Btree or Recno, the operation will
-succeed.
-<p>If the cursor is not yet initialized or a duplicate sort function has been
-specified, Dbc.put will return EINVAL.
-<p><dt><a name="Db.DB_CURRENT">Db.DB_CURRENT</a><dd>Overwrite the data of the key/data pair referenced by the cursor with the
-specified data item. The <b>key</b> parameter is ignored.
-<p>If a duplicate sort function has been specified and the data item of the
-current referenced key/data pair does not compare equally to the <b>data</b>
-parameter, Dbc.put will return EINVAL.
-<p>If the current cursor record has already been deleted and the underlying
-access method is Hash, Dbc.put will return <a href="../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a>.
-If the underlying access method is Btree, Queue or Recno, the operation
-will succeed.
-<p>If the cursor is not yet initialized, Dbc.put will return EINVAL.
-<p><dt><a name="Db.DB_KEYFIRST">Db.DB_KEYFIRST</a><dd>In the case of the Btree and Hash access methods, insert the specified
-key/data pair into the database.
-<p>If the underlying database supports duplicate data items, and if the
-key already exists in the database and a duplicate sort function has
-been specified, the inserted data item is added in its sorted location.
-If the key already exists in the database and no duplicate sort function
-has been specified, the inserted data item is added as the first of the
-data items for that key.
-<p>The Db.DB_KEYFIRST flag may not be specified to the Queue or Recno
-access methods.
-<p><dt><a name="Db.DB_KEYLAST">Db.DB_KEYLAST</a><dd>In the case of the Btree and Hash access methods, insert the specified
-key/data pair into the database.
-<p>If the underlying database supports duplicate data items, and if the
-key already exists in the database and a duplicate sort function has
-been specified, the inserted data item is added in its sorted location.
-If the key already exists in the database, and no duplicate sort
-function has been specified, the inserted data item is added as the last
-of the data items for that key.
-<p>The Db.DB_KEYLAST flag may not be specified to the Queue or Recno
-access methods.
-<p><dt><a name="Db.DB_NODUPDATA">Db.DB_NODUPDATA</a><dd>In the case of the Btree and Hash access methods, insert the specified
-key/data pair into the database unless it already exists in the database.
-If the key/data pair already appears in the database, <a href="../api_java/dbc_put.html#DB_KEYEXIST">Db.DB_KEYEXIST</a>
-is returned. The Db.DB_NODUPDATA flag may only be specified if
-the underlying database has been configured to support sorted duplicate
-data items.
-<p>The Db.DB_NODUPDATA flag may not be specified to the Queue or Recno
-access methods.
-</dl>
-<p>Otherwise, the Dbc.put method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>If Dbc.put fails for any reason, the state of the cursor will be
-unchanged. If Dbc.put succeeds and an item is inserted into the
-database, the cursor is always positioned to reference the newly inserted
-item.
-<h1>Errors</h1>
-<p>The Dbc.put method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EACCES<dd>An attempt was made to modify a read-only database.
-</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The Db.DB_BEFORE or Db.DB_AFTER flags were specified, and the
-underlying access method is Queue.
-<p>An attempt was made to add a record to a fixed-length database that was too
-large to fit.
-</dl>
-<p><dl compact>
-<p><dt>EPERM <dd>Write attempted on read-only cursor when the <a href="../api_java/env_open.html#DB_INIT_CDB">Db.DB_INIT_CDB</a> flag was
-specified to <a href="../api_java/env_open.html">DbEnv.open</a>.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-Dbc.put method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The Dbc.put method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the Dbc.put method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbc_class.html">Dbc</a>
-<h1>See Also</h1>
-<a href="../api_java/dbc_close.html">Dbc.close</a>,
-<a href="../api_java/dbc_count.html">Dbc.count</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>,
-<a href="../api_java/dbc_dup.html">Dbc.dup</a>,
-<a href="../api_java/dbc_get.html">Dbc.get</a>
-and
-<a href="../api_java/dbc_put.html">Dbc.put</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbt_bulk_class.html b/db/docs/api_java/dbt_bulk_class.html
deleted file mode 100644
index 382428ae4..000000000
--- a/db/docs/api_java/dbt_bulk_class.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--Id: dbt_bulk_class.so,v 1.6 2002/08/29 03:24:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbMultipleDataIterator</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbMultipleDataIterator</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbMultipleDataIterator
-{
- public DbMultipleDataIterator(Dbt data);
-<p>
- public boolean next(Dbt data);
-}
-<p>
-public class DbMultipleKeyDataIterator
-{
- public DbMultipleKeyDataIterator(Dbt data);
-<p>
- public boolean next(Dbt key, Dbt data);
-}
-<p>
-public class DbMultipleRecnoDataIterator
-{
- public DbMultipleRecnoDataIterator(Dbt data);
-<p>
- public boolean next(Dbt key, Dbt data);
-}
-</pre></h3>
-<h1>Description</h1>
-<p>If either of the <a href="../api_java/dbc_get.html#DB_MULTIPLE">Db.DB_MULTIPLE</a> or <a href="../api_java/dbc_get.html#DB_MULTIPLE_KEY">Db.DB_MULTIPLE_KEY</a> flags
-were specified to the <a href="../api_java/db_get.html">Db.get</a> or <a href="../api_java/dbc_get.html">Dbc.get</a> method, the data
-<a href="../api_java/dbt_class.html">Dbt</a> returned by those interfaces will refer to a buffer that
-is filled with data. Access to that data is through the following
-classes.
-<p>All instances of the bulk retrieval classes may be used only once,
-and to traverse the bulk retrieval buffer in the forward direction
-only. However, they are nondestructive, so multiple iterators can be
-instantiated and used on the same returned data <a href="../api_java/dbt_class.html">Dbt</a>.
-<p><dl compact>
-<p><dt>DbMultipleDataIterator<dd>This class is used to iterate through data returned using the
-<a href="../api_java/dbc_get.html#DB_MULTIPLE">Db.DB_MULTIPLE</a> flag from a database belonging to any access method.
-The constructor takes the data <a href="../api_java/dbt_class.html">Dbt</a> returned by the call to
-<a href="../api_java/db_get.html">Db.get</a> or <a href="../api_java/dbc_get.html">Dbc.get</a> that used the <a href="../api_java/dbc_get.html#DB_MULTIPLE">Db.DB_MULTIPLE</a>
-flag. The next() method takes a <a href="../api_java/dbt_class.html">Dbt</a> that will be filled in with
-a reference to a buffer, a size, and an offset that together yield the
-next data item in the original bulk retrieval buffer. The next() method
-returns false if no more data are available, and true otherwise.
-<p><dt>DbMultipleKeyDataIterator<dd>This class is used to iterate through data returned using the
-<a href="../api_java/dbc_get.html#DB_MULTIPLE_KEY">Db.DB_MULTIPLE_KEY</a> flag from a database belonging to the Btree or
-Hash access methods. The constructor takes the data <a href="../api_java/dbt_class.html">Dbt</a>
-returned by the call to <a href="../api_java/db_get.html">Db.get</a> or <a href="../api_java/dbc_get.html">Dbc.get</a> that used the
-<a href="../api_java/dbc_get.html#DB_MULTIPLE_KEY">Db.DB_MULTIPLE_KEY</a> flag. The next() method takes two <a href="../api_java/dbt_class.html">Dbt</a>s,
-one for a key and one for a data item, that will each be filled in with
-a reference to a buffer, a size, and an offset that together yield the
-next key or data item in the original bulk retrieval buffer. The next()
-method returns false if no more data are available, and true
-otherwise.
-<p><dt>DbMultipleRecnoDataIterator<dd>This class is used to iterate through data returned using the
-<a href="../api_java/dbc_get.html#DB_MULTIPLE_KEY">Db.DB_MULTIPLE_KEY</a> flag from a database belonging to the Recno or
-Queue access methods. The constructor takes the data <a href="../api_java/dbt_class.html">Dbt</a>
-returned by the call to <a href="../api_java/db_get.html">Db.get</a> or <a href="../api_java/dbc_get.html">Dbc.get</a> that used the
-<a href="../api_java/dbc_get.html#DB_MULTIPLE_KEY">Db.DB_MULTIPLE_KEY</a> flag. The next() method takes two <a href="../api_java/dbt_class.html">Dbt</a>s,
-one for a key and one for a data item, that will each be filled in with
-a reference to a buffer, a size, and an offset that together yield the
-next key or data item in the original bulk retrieval buffer. The record
-number contained in the key item should be accessed using the
-<a href="../api_java/dbt_class.html">Dbt.get_recno_key_data</a> method. The next() method returns false if no
-more data are available, and true otherwise.
-</dl>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/dbt_class.html b/db/docs/api_java/dbt_class.html
deleted file mode 100644
index 1df9cbb59..000000000
--- a/db/docs/api_java/dbt_class.html
+++ /dev/null
@@ -1,227 +0,0 @@
-<!--$Id: dbt_class.so,v 10.33 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: Dbt</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>Dbt</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class Dbt extends Object
-{
- public Dbt(byte[] data);
- public Dbt(byte[] data, int off, int len);
-<p>
- public void set_data(byte[] data);
- public byte[] get_data();
-<p>
- public void set_offset(int off);
- public int get_offset();
-<p>
- public int get_size();
- public void set_size(int size);
-<p>
- public int get_ulen();
- public void set_ulen(int ulen);
-<p>
- public int get_dlen();
- public void set_dlen(int dlen);
-<p>
- public int get_doff();
- public void set_doff(int doff);
-<p>
- public int get_flags();
- public void set_flags(int flags);
-<p>
- public void set_recno_key_data(int recno);
- public int get_recno_key_data();
-}
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the Dbt class,
-used to encode keys and data items in a database.
- <a name="3"><!--meow--></a>
-<h3>Key/Data Pairs</h3>
-<p>Storage and retrieval for the Db access methods are based on
-key/data pairs. Both key and data items are represented by Dbt
-objects. Key and data byte strings may reference strings of zero length
-up to strings of essentially unlimited length. See
-<a href="../ref/program/dbsizes.html">Database limits</a> for more
-information.
-<p>The Dbt class provides simple access to an underlying data structure,
-whose elements can be examined or changed using the <b>set_</b> or
-<b>get_</b> methods. The remainder of the manual page sometimes refers
-to these accesses using the underlying name, e.g., simply <b>ulen</b>
-instead of Dbt.get_ulen and Dbt.set_ulen.
-Dbt can be subclassed, providing a way to associate
-with it additional data, or references to other structures.
-<p>The constructors set all elements of the underlying structure to zero.
-The constructor with one argument has the effect of setting all elements
-to zero except for the specified <b>data</b> and <b>size</b> elements.
-The constructor with three arguments has has the additional effect of
-only using the portion of the array specified by the size and offset.
-<p>In the case where the <b>flags</b> structure element is 0, when being
-provided a key or data item by the application, the Berkeley DB package expects
-the <b>data</b> object to be set to a byte array of <b>size</b> bytes.
-When returning a key/data item to the application, the Berkeley DB package will
-store into the <b>data</b> object a byte array of <b>size</b> bytes.
-During a get operation, one of the Db.DB_DBT_MALLOC,
-Db.DB_DBT_REALLOC or Db.DB_DBT_USERMEM flags must be
-specified.
-<p>The elements of the structure underlying the Dbt class are defined as follows:
-<p><dl compact>
-<p><dt>byte[] <a name="data">data</a>;<dd>A byte array containing the data.
-This element is accessed using Dbt.get_data and
-Dbt.set_data, and may be initialized using one
-of the constructors.
-Note that the array data is not copied immediately, but only when the
-Dbt is used.
-<p><dt>int offset;<dd>The number of bytes offset into the <b>data</b> array to determine the
-portion of the array actually used.
-This element is accessed using Dbt.get_offset and
-Dbt.set_offset.
-<p><dt>int size;<dd>The length of <b>data</b>, in bytes.
-This element is accessed using Dbt.get_size and
-Dbt.set_size, and may be initialized
-implicitly to the length of the data array with the constructor having
-one argument.
-<p><dt>int ulen;<dd>The size of the user's buffer (referenced by <b>data</b>), in bytes.
-This location is not written by the Db methods.
-<p>Note that applications can determine the length of a record by setting
-the <b>ulen</b> to 0 and checking the return value found in <b>size</b>.
-See the Db.DB_DBT_USERMEM flag for more information.
-<p>This element is accessed using
-Dbt.get_ulen and Dbt.set_ulen.
-<p><dt>int dlen;<dd>The length of the partial record being read or written by the application,
-in bytes.
-See the Db.DB_DBT_PARTIAL flag for more information.
-This element is accessed using
-Dbt.get_dlen, and Dbt.set_dlen.
-<p><dt>int doff;<dd>The offset of the partial record being read or written by the application,
-in bytes.
-See the Db.DB_DBT_PARTIAL flag for more information.
-This element is accessed using
-Dbt.get_doff and Dbt.set_doff.
-<p><dt>int flags;<dd>This element is accessed using Dbt.get_flags and
-Dbt.set_flags.
-<p>The <b>flags</b> value must be set by bitwise inclusively <b>OR</b>'ing together one or more of the
-following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_DBT_MALLOC">Db.DB_DBT_MALLOC</a><dd>When this flag is set Berkeley DB will allocate memory for the returned key
-or data item
-and return a byte array containing the data in the <b>data</b> field of
-the key or data Dbt object.
-<p>If Db.DB_DBT_MALLOC is specified, Berkeley DB allocates a properly sized
-byte array to contain the data. This can be convenient if you know little
-about the nature of the data, specifically the size of data in the
-database. However, if your application makes repeated calls to retrieve
-keys or data, you may notice increased garbage collection due to this
-allocation. If you know the maximum size of data you are retrieving, you
-might decrease the memory burden and speed your application by allocating
-your own byte array and using Db.DB_DBT_USERMEM. Even if you don't
-know the maximum size, you can use this option and reallocate your array
-whenever your retrieval API call
-throws a <a href="../api_java/mem_class.html">DbMemoryException</a>.
-<p>It is an error to specify more than one of Db.DB_DBT_MALLOC,
-Db.DB_DBT_REALLOC and Db.DB_DBT_USERMEM.
-<p><dt><a name="Db.DB_DBT_REALLOC">Db.DB_DBT_REALLOC</a><dd>When this flag is set Berkeley DB
-will return the data in the <b>data</b> field of the key or data
-Dbt object, reusing the existing byte array if it is large
-enough, or allocating a new one of the appropriate size.
-<p>It is an error to specify more than one of Db.DB_DBT_MALLOC,
-Db.DB_DBT_REALLOC and Db.DB_DBT_USERMEM.
-<p><dt><a name="Db.DB_DBT_USERMEM">Db.DB_DBT_USERMEM</a><dd>The <b>data</b> field of the key or data object must reference memory
-that is at least <b>ulen</b> bytes in length. If the length of the
-requested item is less than or equal to that number of bytes, the item
-is copied into the memory referenced by the <b>data</b> field.
-Otherwise, the <b>size</b> field is set to the length needed for the
-requested item, and the error ENOMEM is returned.
-<p>If Db.DB_DBT_USERMEM is specified, the data field of the Dbt
-must be set to an appropriately sized byte array.
-<p>It is an error to specify more than one of Db.DB_DBT_MALLOC,
-Db.DB_DBT_REALLOC and Db.DB_DBT_USERMEM.
-</dl>
-<p>If Db.DB_DBT_MALLOC or Db.DB_DBT_REALLOC is specified, Berkeley DB
-allocates a properly sized byte array to contain the data. This can be
-convenient if you know little about the nature of the data, specifically
-the size of data in the database. However, if your application makes
-repeated calls to retrieve keys or data, you may notice increased garbage
-collection due to this allocation. If you know the maximum size of data
-you are retrieving, you might decrease the memory burden and speed your
-application by allocating your own byte array and using
-Db.DB_DBT_USERMEM. Even if you don't know the maximum size, you can
-use this option and reallocate your array whenever your retrieval API call
-throws a <a href="../api_java/mem_class.html">DbMemoryException</a>.
-<p><dl compact>
-<p><dt><a name="Db.DB_DBT_PARTIAL">Db.DB_DBT_PARTIAL</a><dd>Do partial retrieval or storage of an item. If the calling application
-is doing a get, the <b>dlen</b> bytes starting <b>doff</b> bytes from
-the beginning of the retrieved data record are returned as if they
-comprised the entire record. If any or all of the specified bytes do
-not exist in the record, the get is successful and the existing bytes
-or nul bytes are returned.
-<p>For example, if the data portion of a retrieved record was 100 bytes,
-and a partial retrieval was done using a Dbt having a <b>dlen</b>
-field of 20 and a <b>doff</b> field of 85, the get call would succeed,
-the <b>data</b> field would reference the last 15 bytes of the record,
-and the <b>size</b> field would be set to 15.
-<p>If the calling application is doing a put, the <b>dlen</b> bytes starting
-<b>doff</b> bytes from the beginning of the specified key's data record
-are replaced by the data specified by the <b>data</b> and <b>size</b>
-objects.
-If <b>dlen</b> is smaller than <b>size</b>, the record will grow, and if
-<b>dlen</b> is larger than <b>size</b>, the record will shrink.
-If the specified bytes do not exist, the record will be extended using nul
-bytes as necessary, and the put call will succeed.
-<p>It is an error to attempt a partial put using the <a href="../api_java/db_put.html">Db.put</a>
-method in a database that supports duplicate records.
-Partial puts in databases supporting duplicate records must be done
-using a <a href="../api_java/dbc_class.html">Dbc</a> method.
-<p>It is an error to attempt a partial put with differing <b>dlen</b> and
-<b>size</b> values in Queue or Recno databases with fixed-length records.
-<p>For example, if the data portion of a retrieved record was 100 bytes,
-and a partial put was done using a Dbt having a <b>dlen</b>
-field of 20, a <b>doff</b> field of 85, and a <b>size</b> field of 30,
-the resulting record would be 115 bytes in length, where the last 30
-bytes would be those specified by the put call.
-</dl>
-</dl>
-<p>Although Java normally maintains proper alignment of byte arrays, the
-set_offset method can be used to specify unaligned addresses. Unaligned
-address accesses that are not supported by the underlying hardware may be
-reported as an exception, or may stop the running Java program.
- <a name="4"><!--meow--></a>
-<h3>Logical Record Numbers</h3>
-<p>In all cases for the Queue and Recno access methods, and when calling the
-<a href="../api_java/db_get.html">Db.get</a> and <a href="../api_java/dbc_get.html">Dbc.get</a> functions with the
-<a href="../api_java/db_get.html#DB_SET_RECNO">Db.DB_SET_RECNO</a> flag specified, the <b>data</b>
-field of the key must be a four byte array, large enough to store an int.
-The Dbt.set_recno_key_data method can be used to set the value of
-the array. An int is a 32-bit type,
-(which limits the number of logical records in a Queue or Recno database,
-and the maximum logical record which may be directly retrieved from a
-Btree database, to 4,294,967,296). The <b>size</b> field of the key
-should be the size of that type, i.e.,
-4.
-<p>Logical record numbers are 1-based, not 0-based, i.e., the first record
-in the database is record number 1.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/deadlock_class.html b/db/docs/api_java/deadlock_class.html
deleted file mode 100644
index b41c5649d..000000000
--- a/db/docs/api_java/deadlock_class.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--$Id: deadlock_class.so,v 10.6 2000/09/21 19:58:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbDeadlockException</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbDeadlockException</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbDeadlockException extends DbException { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbDeadlockException class and
-how it is used by the various Db* classes.
-<p>A DbDeadlockException is thrown when multiple threads competing
-for a lock are deadlocked. One of the threads' transactions is selected
-for termination, and a DbDeadlockException is thrown to that thread.
-<p>See <a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a> for more information.
-<h3>Class</h3>
-<a href="../api_java/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_java/get_errno.html">DbException.get_errno</a>,
-<a href="../api_java/deadlock_class.html">DbDeadlockException</a>,
-<a href="../api_java/mem_class.html">DbMemoryException</a>
-and
-<a href="../api_java/runrec_class.html">DbRunRecoveryException</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_class.html b/db/docs/api_java/env_class.html
deleted file mode 100644
index 25fe3f676..000000000
--- a/db/docs/api_java/env_class.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--Id: env_class.so,v 10.32 2002/08/29 03:24:38 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbEnv extends Object
-{
- public DbEnv(int flags) throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv object is the handle for a Berkeley DB environment -- a
-collection including support for some or all of caching, locking,
-logging and transaction subsystems, as well as databases and log files.
-Methods off the DbEnv handle are used to configure the
-environment as well as to operate on subsystems and databases in the
-environment.
-<p>DbEnv handles are free-threaded if the <a href="../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag
-is specified to the <a href="../api_java/env_open.html">DbEnv.open</a> method when the environment is opened.
-The DbEnv handle should not be closed while any other handle
-remains open that is using it as a reference (for example, <a href="../api_java/db_class.html">Db</a>
-or <a href="../api_java/txn_class.html">DbTxn</a>). Once either the <a href="../api_java/env_close.html">DbEnv.close</a> or
-<a href="../api_java/env_remove.html">DbEnv.remove</a> methods are called, the handle may not be accessed again,
-regardless of the method's return.
-<p>The constructor creates the DbEnv object. The constructor
-allocates memory internally; calling the <a href="../api_java/env_close.html">DbEnv.close</a> or
-<a href="../api_java/env_remove.html">DbEnv.remove</a> methods will free that memory.
-<p>The following <b>flags</b> value may be specified:
-<p><dl compact>
-<p><dt><a name="Db.DB_CLIENT">Db.DB_CLIENT</a><dd>Create a client environment to connect to a server.
-<p>The Db.DB_CLIENT flag indicates to the system that this environment
-is remote on a server. The use of this flag causes the environment
-methods to use functions that call a server instead of local functions.
-Prior to making any environment or database method calls, the
-application must call the <a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a> method to
-establish the connection to the server.
-</dl>
-<h1>Class</h1>
-DbEnv
-<h1>See Also</h1>
-<a href="../api_java/env_list.html">Database Environments and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_close.html b/db/docs/api_java/env_close.html
deleted file mode 100644
index 9650c83ed..000000000
--- a/db/docs/api_java/env_close.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!--$Id: env_close.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.close</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.close</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void close(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.close method closes the Berkeley DB environment, freeing any
-allocated resources and closing any underlying subsystems.
-<p>Calling DbEnv.close does not imply closing any databases that were
-opened in the environment.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>Where the environment was initialized with the <a href="../api_java/env_open.html#DB_INIT_LOCK">Db.DB_INIT_LOCK</a> flag,
-calling DbEnv.close does not release any locks still held by the
-closing process, providing functionality for long-lived locks.
-<p>Where the environment was initialized with the <a href="../api_java/env_open.html#DB_INIT_MPOOL">Db.DB_INIT_MPOOL</a>
-flag, calling DbEnv.close implies calls to <a href="../api_java/memp_fclose.html">DbMpoolFile.close</a> for
-any remaining open files in the memory pool that were returned to this
-process by calls to <a href="../api_java/memp_fopen.html">DbMpoolFile.open</a>. It does not imply a call to
-<a href="../api_java/memp_fsync.html">DbMpoolFile.sync</a> for those files.
-<p>Where the environment was initialized with the <a href="../api_java/env_open.html#DB_INIT_TXN">Db.DB_INIT_TXN</a> flag,
-calling DbEnv.close aborts any uncommitted transactions.
-(Applications are should not depend on this behavior. If the process' has
-already closed a database handle which is necessary to abort an
-uncommitted transaction, the Berkeley DB environment must then require that
-recovery be run before further operations are done, since once a
-transaction exists that cannot be committed or aborted, no future
-checkpoint can ever succeed.)
-<p>In multi-threaded applications, only a single thread may call
-DbEnv.close.
-<p>Once DbEnv.close has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DbEnv.close method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.close method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.close method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_dbremove.html b/db/docs/api_java/env_dbremove.html
deleted file mode 100644
index 3acf714ca..000000000
--- a/db/docs/api_java/env_dbremove.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!--Id: env_dbremove.so,v 10.31 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.dbremove</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.dbremove</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void dbremove(DbTxn txnid, String file, String database, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.dbremove method removes the database specified by the
-<b>file</b> and <b>database</b> arguments. If no <b>database</b> is
-specified, the underlying file represented by <b>file</b> is removed,
-incidentally removing all databases that it contained.
-<p>Applications should never remove databases with open <a href="../api_java/db_class.html">Db</a> handles,
-or in the case of removing a file, when any database in the file has an
-open handle. For example, some architectures do not permit the removal
-of files with open system handles. On these architectures, attempts to
-remove databases currently in use by any thread of control in the system
-will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>;
-otherwise, null.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a><dd>Enclose the DbEnv.dbremove call within a transaction. If the call succeeds,
-changes made by the operation will be recoverable. If the call fails,
-the operation will have made no changes.
-</dl>
-<p>The DbEnv.dbremove method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
-environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DbEnv.dbremove is affected by any database directory specified using the
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a> method, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
-</dl>
-<h1>Errors</h1>
-<p>The DbEnv.dbremove method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<p>If the file or directory does not exist, the DbEnv.dbremove method will
-fail and
-throw a FileNotFoundException exception.
-<p>The DbEnv.dbremove method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.dbremove method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_dbremove.html">DbEnv.dbremove</a>,
-<a href="../api_java/env_dbrename.html">DbEnv.dbrename</a>,
-<a href="../api_java/env_err.html">DbEnv.err</a>,
-<a href="../api_java/env_err.html">DbEnv.errx</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_set_app_dispatch.html">DbEnv.set_app_dispatch</a>,
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a>,
-<a href="../api_java/env_set_encrypt.html">DbEnv.set_encrypt</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a>,
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a>,
-<a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a>,
-<a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a>,
-<a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a>,
-<a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a>,
-<a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a>,
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>
-and
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_dbrename.html b/db/docs/api_java/env_dbrename.html
deleted file mode 100644
index a36578679..000000000
--- a/db/docs/api_java/env_dbrename.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!--Id: env_dbrename.so,v 10.17 2002/08/02 18:41:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.dbrename</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.dbrename</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void dbrename(DbTxn txnid,
- String file, String database, String newname, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.dbrename method renames the database specified by the
-<b>file</b> and <b>database</b> arguments to <b>newname</b>. If no
-<b>database</b> is specified, the underlying file represented by
-<b>file</b> is renamed, incidentally renaming all databases that it
-contained.
-<p>Applications should not rename databases that are currently in use. If
-an underlying file is being renamed and logging is currently enabled in
-the database environment, no database in the file may be open when the
-DbEnv.dbrename method is called. In particular, some architectures do
-not permit renaming files with open handles. On these architectures,
-attempts to rename databases that are currently in use by any thread of
-control in the system will fail.
-<p>If the operation is to be transaction-protected, the <b>txnid</b>
-parameter is a transaction handle returned from <a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>;
-otherwise, null.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a><dd>Enclose the DbEnv.dbrename call within a transaction. If the call succeeds,
-changes made by the operation will be recoverable. If the call fails,
-the operation will have made no changes.
-</dl>
-<p>The DbEnv.dbrename method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The
-environment variable <b>DB_HOME</b> may be used as the path of the
-database environment home.
-<p>DbEnv.dbrename is affected by any database directory specified using the
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a> method, or by setting the "set_data_dir" string
-in the environment's <b>DB_CONFIG</b> file.
-</dl>
-<h1>Errors</h1>
-<p>The DbEnv.dbrename method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>A database in the file is currently open.
-<p>Called before <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<p>If the file or directory does not exist, the DbEnv.dbrename method will
-fail and
-throw a FileNotFoundException exception.
-<p>The DbEnv.dbrename method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.dbrename method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/db_class.html">Db</a>
-<h1>See Also</h1>
-<a href="../api_java/db_associate.html">Db.associate</a>,
-<a href="../api_java/db_close.html">Db.close</a>,
-<a href="../api_java/db_cursor.html">Db.cursor</a>,
-<a href="../api_java/db_del.html">Db.del</a>,
-<a href="../api_java/db_err.html">Db.err</a>,
-<a href="../api_java/db_err.html">Db.errx</a>,
-<a href="../api_java/db_fd.html">Db.fd</a>,
-<a href="../api_java/db_get.html">Db.get</a>,
-<a href="../api_java/db_get_byteswapped.html">Db.get_byteswapped</a>,
-<a href="../api_java/db_get_type.html">Db.get_type</a>,
-<a href="../api_java/db_join.html">Db.join</a>,
-<a href="../api_java/db_key_range.html">Db.key_range</a>,
-<a href="../api_java/db_open.html">Db.open</a>,
-<a href="../api_java/db_get.html">Db.pget</a>,
-<a href="../api_java/db_put.html">Db.put</a>,
-<a href="../api_java/db_remove.html">Db.remove</a>,
-<a href="../api_java/db_rename.html">Db.rename</a>,
-<a href="../api_java/db_set_append_recno.html">Db.set_append_recno</a>,
-<a href="../api_java/db_set_bt_minkey.html">Db.set_bt_minkey</a>,
-<a href="../api_java/db_set_cache_priority.html">Db.set_cache_priority</a>,
-<a href="../api_java/db_set_cachesize.html">Db.set_cachesize</a>,
-<a href="../api_java/db_set_encrypt.html">Db.set_encrypt</a>,
-<a href="../api_java/db_set_errcall.html">Db.set_errcall</a>,
-<a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a>,
-<a href="../api_java/db_set_feedback.html">Db.set_feedback</a>,
-<a href="../api_java/db_set_flags.html">Db.set_flags</a>,
-<a href="../api_java/db_set_h_ffactor.html">Db.set_h_ffactor</a>,
-<a href="../api_java/db_set_h_nelem.html">Db.set_h_nelem</a>,
-<a href="../api_java/db_set_lorder.html">Db.set_lorder</a>,
-<a href="../api_java/db_set_pagesize.html">Db.set_pagesize</a>,
-<a href="../api_java/db_set_q_extentsize.html">Db.set_q_extentsize</a>,
-<a href="../api_java/db_set_re_delim.html">Db.set_re_delim</a>,
-<a href="../api_java/db_set_re_len.html">Db.set_re_len</a>,
-<a href="../api_java/db_set_re_pad.html">Db.set_re_pad</a>,
-<a href="../api_java/db_set_re_source.html">Db.set_re_source</a>,
-<a href="../api_java/db_stat.html">Db.stat</a>,
-<a href="../api_java/db_sync.html">Db.sync</a>,
-<a href="../api_java/db_truncate.html">Db.truncate</a>,
-<a href="../api_java/db_upgrade.html">Db.upgrade</a>
-and
-<a href="../api_java/db_verify.html">Db.verify</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_err.html b/db/docs/api_java/env_err.html
deleted file mode 100644
index edd37b47e..000000000
--- a/db/docs/api_java/env_err.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!--Id: env_err.so,v 10.20 2002/06/24 14:49:16 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.err</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.err</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void err(int errcode, String message)
-<p>
-public void errx(String message)
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.err, DbEnv.errx, <a href="../api_java/db_err.html">Db.err</a> and
-<a href="../api_java/db_err.html">Db.errx</a> methods provide error-messaging functionality for
-applications written using the Berkeley DB library.
-<p>The DbEnv.err method constructs an error message consisting of the
-following elements:
-<p><blockquote><p><dl compact>
-<p><dt>An optional prefix string<dd>If no error callback method has been set using the
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method, any prefix string specified using the
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a> method, followed by two separating characters: a colon
-and a &lt;space&gt; character.
-<p><dt>The supplied message string <b>message</b>.<dd>
-<p><dt>A separator<dd>Two separating characters: a colon and a &lt;space&gt; character.
-<p><dt>A standard error string<dd>The standard system or Berkeley DB library error string associated with the
-<b>error</b> value, as returned by the <a href="../api_java/env_strerror.html">DbEnv.strerror</a> method.
-</dl>
-</blockquote>
-<p>This constructed error message is then handled as follows:
-<p><blockquote>
-<p>If an error callback method has been set (see <a href="../api_java/db_set_errcall.html">Db.set_errcall</a>
-and <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>), that method is called with two
-arguments: any prefix string specified (see <a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a> and
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>) and the error message.
-<p>If a OutputStream has been set
-(see <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>), the error message is written to that
-stream.
-<p>If none of these output options has been configured, the error message
-is written to System.err, the standard
-error output stream.</blockquote>
-<p>The DbEnv.errx and <a href="../api_java/db_err.html">Db.errx</a> methods perform identically to the
-DbEnv.err and <a href="../api_java/db_err.html">Db.err</a> methods, except that they do not append
-the final separator characters and standard error string to the error
-message.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_dbremove.html">DbEnv.dbremove</a>,
-<a href="../api_java/env_dbrename.html">DbEnv.dbrename</a>,
-<a href="../api_java/env_err.html">DbEnv.err</a>,
-<a href="../api_java/env_err.html">DbEnv.errx</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_set_app_dispatch.html">DbEnv.set_app_dispatch</a>,
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a>,
-<a href="../api_java/env_set_encrypt.html">DbEnv.set_encrypt</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a>,
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a>,
-<a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a>,
-<a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a>,
-<a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a>,
-<a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a>,
-<a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a>,
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>
-and
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_list.html b/db/docs/api_java/env_list.html
deleted file mode 100644
index cc5ae1ba7..000000000
--- a/db/docs/api_java/env_list.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!--Id: env_list.so,v 10.1 2002/08/30 20:00:50 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Database Environments and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Database Environments and Related Methods</h1>
-<!--Id: m4.methods,v 10.1 2002/08/30 20:00:51 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Database Environments and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/env_close.html">DbEnv.close</a></td><td>Close an environment</td></tr>
-<tr><td><a href="../api_java/env_dbremove.html">DbEnv.dbremove</a></td><td>Remove a database</td></tr>
-<tr><td><a href="../api_java/env_dbrename.html">DbEnv.dbrename</a></td><td>Rename a database</td></tr>
-<tr><td><a href="../api_java/env_err.html">DbEnv.err</a></td><td>Error message with error string</td></tr>
-<tr><td><a href="../api_java/env_err.html">DbEnv.errx</a></td><td>Error message</td></tr>
-<tr><td><a href="../api_java/lock_detect.html">DbEnv.lock_detect</a></td><td>Perform deadlock detection</td></tr>
-<tr><td><a href="../api_java/lock_get.html">DbEnv.lock_get</a></td><td>Acquire a lock</td></tr>
-<tr><td><a href="../api_java/lock_id.html">DbEnv.lock_id</a></td><td>Acquire a locker ID</td></tr>
-<tr><td><a href="../api_java/lock_id_free.html">DbEnv.lock_id_free</a></td><td>Release a locker ID</td></tr>
-<tr><td><a href="../api_java/lock_put.html">DbEnv.lock_put</a></td><td>Release a lock</td></tr>
-<tr><td><a href="../api_java/lock_stat.html">DbEnv.lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
-<tr><td><a href="../api_java/lock_vec.html">DbEnv.lock_vec</a></td><td>Acquire/release locks</td></tr>
-<tr><td><a href="../api_java/log_archive.html">DbEnv.log_archive</a></td><td>List log and database files</td></tr>
-<tr><td><a href="../api_java/log_file.html">DbEnv.log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
-<tr><td><a href="../api_java/log_flush.html">DbEnv.log_flush</a></td><td>Flush log records</td></tr>
-<tr><td><a href="../api_java/log_put.html">DbEnv.log_put</a></td><td>Write a log record</td></tr>
-<tr><td><a href="../api_java/log_stat.html">DbEnv.log_stat</a></td><td>Return log subsystem statistics</td></tr>
-<tr><td><a href="../api_java/memp_stat.html">DbEnv.memp_stat</a></td><td>Return memory pool statistics</td></tr>
-<tr><td><a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a></td><td>Return memory pool statistics</td></tr>
-<tr><td><a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
-<tr><td><a href="../api_java/env_open.html">DbEnv.open</a></td><td>Open an environment</td></tr>
-<tr><td><a href="../api_java/env_remove.html">DbEnv.remove</a></td><td>Remove an environment</td></tr>
-<tr><td><a href="../api_java/rep_elect.html">DbEnv.rep_elect</a></td><td>Hold a replication election</td></tr>
-<tr><td><a href="../api_java/rep_message.html">DbEnv.rep_process_message</a></td><td>Process a replication message</td></tr>
-<tr><td><a href="../api_java/rep_start.html">DbEnv.rep_start</a></td><td>Configure an environment for replication</td></tr>
-<tr><td><a href="../api_java/rep_stat.html">DbEnv.rep_stat</a></td><td>Replication statistics</td></tr>
-<tr><td><a href="../api_java/env_set_app_dispatch.html">DbEnv.set_app_dispatch</a></td><td>Configure application recovery interface</td></tr>
-<tr><td><a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<tr><td><a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a></td><td>Set the environment data directory</td></tr>
-<tr><td><a href="../api_java/env_set_encrypt.html">DbEnv.set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
-<tr><td><a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a></td><td>Set error message callback</td></tr>
-<tr><td><a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a></td><td>Set error message output stream</td></tr>
-<tr><td><a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a></td><td>Set error message prefix</td></tr>
-<tr><td><a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a></td><td>Set feedback callback</td></tr>
-<tr><td><a href="../api_java/env_set_flags.html">DbEnv.set_flags</a></td><td>Environment configuration</td></tr>
-<tr><td><a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a></td><td>Set log buffer size</td></tr>
-<tr><td><a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
-<tr><td><a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a></td><td>Set log file size</td></tr>
-<tr><td><a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a></td><td>Set logging region size</td></tr>
-<tr><td><a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
-<tr><td><a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
-<tr><td><a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
-<tr><td><a href="../api_java/rep_limit.html">DbEnv.set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
-<tr><td><a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a></td><td>Configure replication transport</td></tr>
-<tr><td><a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
-<tr><td><a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
-<tr><td><a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
-<tr><td><a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
-<tr><td><a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
-<tr><td><a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
-<tr><td><a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
-<tr><td><a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a></td><td>Set verbose messages</td></tr>
-<tr><td><a href="../api_java/txn_begin.html">DbEnv.txn_begin</a></td><td>Begin a transaction</td></tr>
-<tr><td><a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
-<tr><td><a href="../api_java/txn_recover.html">DbEnv.txn_recover</a></td><td>Distributed transaction recovery</td></tr>
-<tr><td><a href="../api_java/txn_stat.html">DbEnv.txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_open.html b/db/docs/api_java/env_open.html
deleted file mode 100644
index 3a1c25036..000000000
--- a/db/docs/api_java/env_open.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<!--$Id: env_open.so,v 10.61 2000/12/01 15:50:31 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.open</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.open</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void open(String db_home, int flags, int mode)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.open method is the interface for opening the Berkeley DB
-environment. It provides a structure for creating a consistent
-environment for processes using one or more of the features of Berkeley DB.
-<p>The <b>db_home</b> argument to DbEnv.open (and file name
-resolution in general) is described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p>The <b>flags</b> argument specifies the subsystems that are initialized
-and how the application's environment affects Berkeley DB file naming, among
-other things.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p>As there are a large number of flags that can be specified, they have been
-grouped together by functionality. The first group of flags indicate
-which of the Berkeley DB subsystems should be initialized:
-<p><dl compact>
-<p><dt><a name="Db.DB_JOINENV">Db.DB_JOINENV</a><dd>Join an existing environment. This option allows applications to
-join an existing environment without knowing which Berkeley DB subsystems
-the environment supports.
-<p><dt><a name="Db.DB_INIT_CDB">Db.DB_INIT_CDB</a><dd>Initialize locking for the <a href="../ref/cam/intro.html">Berkeley DB Concurrent Data Store</a>
-product. In this mode, Berkeley DB provides multiple reader/single writer
-access. The only other subsystem that should be specified with the
-Db.DB_INIT_CDB flag is Db.DB_INIT_MPOOL.
-<p>Access method calls are largely unchanged when using this flag, although
-any cursors through which update operations (e.g., <a href="../api_java/dbc_put.html">Dbc.put</a>,
-<a href="../api_java/dbc_del.html">Dbc.del</a>) will be made must have the <a href="../api_java/db_cursor.html#DB_WRITECURSOR">Db.DB_WRITECURSOR</a> value
-set in the flags parameter to the cursor call that creates the cursor.
-See <a href="../api_java/db_cursor.html">Db.cursor</a> for more information.
-<p><dt><a name="Db.DB_INIT_LOCK">Db.DB_INIT_LOCK</a><dd>Initialize the locking subsystem. This subsystem should be used when
-multiple processes or threads are going to be reading and writing a Berkeley DB
-database, so that they do not interfere with each other. If all threads
-are accessing the database(s) read-only, then locking is unnecessary.
-When the DB_INIT_LOCK flag is specified, it is usually necessary to run
-the deadlock detector, as well. See <a href="../utility/db_deadlock.html">db_deadlock</a> and
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a> for more information.
-<p><dt><a name="Db.DB_INIT_LOG">Db.DB_INIT_LOG</a><dd>Initialize the logging subsystem. This subsystem is used when recovery
-from application or system failure is necessary.
-<p>The log is stored in one or more files in the environment directory.
-Each file is named using the format <i>log.NNNNNNNNNN</i>, where
-<i>NNNNNNNNNN</i> is the sequence number of the file within the log.
-For further information, see
-<a href="../ref/log/limits.html">Log File Limits</a>.
-<p>If the log region is being created and log files are already present, the
-log files are reviewed and subsequent log writes are appended
-to the end of the log, rather than overwriting current log entries.
-<p><dt><a name="Db.DB_INIT_MPOOL">Db.DB_INIT_MPOOL</a><dd>Initialize the shared memory buffer pool subsystem. This subsystem is
-used whenever the application is using any Berkeley DB access method.
-<p><dt><a name="Db.DB_INIT_TXN">Db.DB_INIT_TXN</a><dd>Initialize the transaction subsystem. This subsystem is used when
-recovery and atomicity of multiple operations and recovery are important.
-The DB_INIT_TXN flag implies the DB_INIT_LOG flag.
-</dl>
-<p>The second group of flags govern what recovery, if any, is performed when
-the environment is initialized:
-<p><dl compact>
-<p><dt><a name="Db.DB_RECOVER">Db.DB_RECOVER</a><dd>Run normal recovery on this environment before opening it for normal use.
-If this flag is set, the DB_CREATE flag must also be set since the regions
-will be removed and recreated.
-<p><dt><a name="Db.DB_RECOVER_FATAL">Db.DB_RECOVER_FATAL</a><dd>Run catastrophic recovery on this environment before opening it for normal
-use. If this flag is set, the DB_CREATE flag must also be set since the
-regions will be removed and recreated.
-</dl>
-<p>A standard part of the recovery process is to remove the existing Berkeley DB
-environment and create a new one in which to perform recovery. If the
-thread of control performing recovery does not specify the correct region
-initialization information (e.g., the correct memory pool cache size),
-the result can be an application running in an environment with incorrect
-cache and other subsystem sizes. For this reason, the thread of control
-performing recovery should either specify correct configuration
-information before calling the DbEnv.open method, or it should remove
-the environment after recovery is completed, leaving creation of the
-correctly sized environment to a subsequent call to DbEnv.open.
-<p>All Berkeley DB recovery processing must be single-threaded, that is, only a
-single thread of control may perform recovery or access a Berkeley DB
-environment while recovery is being performed. As it is not an error to
-specify Db.DB_RECOVER for an environment for which no recovery is
-required, it is reasonable programming practice for the thread of control
-responsible for performing recovery and creating the environment to always
-specify the Db.DB_RECOVER flag during startup.
-<p>The DbEnv.open function returns successfully if Db.DB_RECOVER
-or Db.DB_RECOVER_FATAL is specified and no log files exist, so it is
-necessary to ensure all necessary log files are present before running
-recovery. For further information, consult <a href="../utility/db_archive.html">db_archive</a> and
-<a href="../utility/db_recover.html">db_recover</a>.
-<p>The third group of flags govern file naming extensions in the environment:
-<p><dl compact>
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="Db.DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="Db.DB_USE_ENVIRON_ROOT">Db.DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
-</dl>
-<p>Finally, there are a few additional, unrelated flags:
-<p><dl compact>
-<p><dt><a name="Db.DB_CREATE">Db.DB_CREATE</a><dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
-<p><dt><a name="Db.DB_LOCKDOWN">Db.DB_LOCKDOWN</a><dd>Lock shared Berkeley DB environment files and memory mapped databases into memory.
-<p><dt><a name="Db.DB_PRIVATE">Db.DB_PRIVATE</a><dd>Specify that the environment will only be accessed by a single process
-(although that process may be multi-threaded). This flag has two effects
-on the Berkeley DB environment. First, all underlying data structures are
-allocated from per-process memory instead of from shared memory that is
-potentially accessible to more than a single process. Second, mutexes
-are only configured to work between threads.
-<p>This flag should not be specified if more than a single process is
-accessing the environment, as it is likely to cause database corruption
-and unpredictable behavior, e.g., if both a server application and the
-Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> will access the environment, the
-Db.DB_PRIVATE flag should not be specified.
-<p><dt><a name="Db.DB_SYSTEM_MEM">Db.DB_SYSTEM_MEM</a><dd>Allocate memory from system shared memory instead of from memory backed
-by the filesystem. See <a href="../ref/env/region.html">Shared Memory
-Regions</a> for more information.
-<p><dt><a name="Db.DB_THREAD">Db.DB_THREAD</a><dd>Cause the <a href="../api_java/dbenv_class.html">DbEnv</a> handle returned by DbEnv.open to be
-<i>free-threaded</i>, that is, useable by multiple threads within a
-single address space.
-<p>Threading is always assumed in the Java API, so no special flags are
-required and Berkeley DB functions will always behave as if the Db.DB_THREAD
-flag was specified.
-</dl>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB
-are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
-modified by the process' umask value at the time of creation (see
-<b>umask</b>(2)). The group ownership of created files is based on
-the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
-<p>The DbEnv.open method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Environment Variables</h1>
-<p><dl compact>
-<p><dt>DB_HOME<dd>The environment variable <b>DB_HOME</b> may be used as the path of
-the database home as described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-</dl>
-<h1>Errors</h1>
-<p>The DbEnv.open method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EAGAIN<dd>The shared memory region was locked and (repeatedly) unavailable.
-</dl>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>
-The Db.DB_THREAD flag was specified and spinlocks are not
-implemented for this architecture.
-<p>The DB_HOME or TMPDIR environment variables were set but empty.
-<p>An incorrectly formatted <b>NAME VALUE</b> entry or line was found.
-</dl>
-<p><dl compact>
-<p><dt>ENOSPC<dd>HP-UX only: a previously created Berkeley DB environment for this process still
-exists.
-</dl>
-<p>If the file or directory does not exist, the DbEnv.open method will
-fail and
-throw a FileNotFoundException exception.
-<p>The DbEnv.open method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.open method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_remove.html b/db/docs/api_java/env_remove.html
deleted file mode 100644
index acfaf3976..000000000
--- a/db/docs/api_java/env_remove.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!--$Id: env_remove.so,v 10.24 2000/12/06 14:40:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.remove</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.remove</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-<p>
-public void remove(String db_home, int flags)
- throws DbException, FileNotFoundException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.remove method destroys a Berkeley DB environment, if it is not
-currently in use. The environment regions, including any backing files,
-are removed. Any log or database files and the environment directory are
-not removed.
-<p>The <b>db_home</b> argument to DbEnv.remove is described in
-<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p>If there are processes that have called <a href="../api_java/env_open.html">DbEnv.open</a> without
-calling <a href="../api_java/env_close.html">DbEnv.close</a> (i.e., there are processes currently using
-the environment), DbEnv.remove will fail without further action,
-unless the <a href="../api_java/env_remove.html#DB_FORCE">Db.DB_FORCE</a> flag is set, in which case
-DbEnv.remove will attempt to remove the environment regardless
-of any processes still using it.
-<p>The result of attempting to forcibly destroy the environment when it is
-in use is unspecified. Processes using an environment often maintain open
-file descriptors for shared regions within it. On UNIX systems, the
-environment removal will usually succeed and processes that have already
-joined the region will continue to run in that region without change,
-however processes attempting to join the environment will either fail or
-create new regions. On other systems (e.g., Windows/NT), where the
-<b>unlink</b>(2) system call will fail if any process has an open
-file descriptor for the file, the region removal will fail.
-<p>Calling DbEnv.remove should not be necessary for most applications,
-as the Berkeley DB environment is cleaned up as part of normal database recovery
-procedures, however, applications may wish to call DbEnv.remove
-as part of application shutdown to free up system resources.
-Specifically, when the <a href="../api_java/env_open.html#DB_SYSTEM_MEM">Db.DB_SYSTEM_MEM</a> flag was specified to
-<a href="../api_java/env_open.html">DbEnv.open</a>, it may be useful to call DbEnv.remove in order
-to release system shared memory segments that have been allocated.
-<p>In the case of catastrophic or system failure, database recovery must be
-performed (see <a href="../utility/db_recover.html">db_recover</a>), or the <a href="../api_java/env_open.html#DB_RECOVER">Db.DB_RECOVER</a> and
-<a href="../api_java/env_open.html#DB_RECOVER_FATAL">Db.DB_RECOVER_FATAL</a> flags to <a href="../api_java/env_open.html">DbEnv.open</a> must be specified
-when the environment is re-opened. Alternatively, if recovery is not
-required because no database state is maintained across failures, and
-the <a href="../api_java/env_open.html#DB_SYSTEM_MEM">Db.DB_SYSTEM_MEM</a> flag was not specified when the environment
-was created, it is possible to clean up an environment by removing all
-of the files in the environment directory that begin with the string
-prefix "__db", as no backing files are created in any other directory.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_FORCE">Db.DB_FORCE</a><dd>If the <a href="../api_java/env_remove.html#DB_FORCE">Db.DB_FORCE</a> flag is set, the environment is removed regardless
-of any processes that may still using it, and, no locks are acquired
-during this process. (Generally, the <a href="../api_java/env_remove.html#DB_FORCE">Db.DB_FORCE</a> flag is only
-specified when applications were unable to shut down cleanly, and there
-is a risk that an application may have died holding a Berkeley DB lock.)
-<!--$Id: m4.env_flags,v 10.9 2000/06/29 22:54:10 bostic Exp $-->
-<p><dt><a name="Db.DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the DB_USE_ENVIRON flag is set.
-<p><dt><a name="Db.DB_USE_ENVIRON_ROOT">Db.DB_USE_ENVIRON_ROOT</a><dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the DB_USE_ENVIRON_ROOT flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on UNIX systems, users with a user-ID of 0).
-</dl>
-<p>In multi-threaded applications, only a single thread may call
-DbEnv.remove.
-<p>A <a href="../api_java/dbenv_class.html">DbEnv</a> handle which has already been used to open an
-environment should not be used to call the DbEnv.remove method, a new
-<a href="../api_java/dbenv_class.html">DbEnv</a> handle should be created for that purpose.
-<p>Once DbEnv.remove has been called, regardless of its return,
-the Berkeley DB environment handle may not be accessed again.
-<p>The DbEnv.remove method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EBUSY<dd>The shared memory region was in use and the force flag was not set.
-</dl>
-<p>If the file or directory does not exist, the DbEnv.remove method will
-fail and
-throw a FileNotFoundException exception.
-<p>The DbEnv.remove method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.remove method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_app_dispatch.html b/db/docs/api_java/env_set_app_dispatch.html
deleted file mode 100644
index 8bf96d1d0..000000000
--- a/db/docs/api_java/env_set_app_dispatch.html
+++ /dev/null
@@ -1,117 +0,0 @@
-<!--Id: env_set_app_dispatch.so,v 10.36 2002/06/24 14:49:17 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_app_dispatch</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_app_dispatch</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbTxnRecover
-{
- public abstract int
- tx_recover(DbEnv dbenv, Dbt log_rec, DbLsn lsn, int op);
-}
-public class DbEnv
-{
- public void set_app_dispatch(DbTxnRecover tx_recover)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Set the application's method to be called during transaction abort
-and recovery. This method must return 0 on success and either
-<b>errno</b> or a value outside of the Berkeley DB error name space on
-failure. It takes four arguments:
-<p><dl compact>
-<p><dt>dbenv <dd>A Berkeley DB environment.
-<p><dt>log_rec<dd>A log record.
-<p><dt>lsn<dd>A log sequence number.
-<p><dt>op<dd>One of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_TXN_BACKWARD_ROLL">Db.DB_TXN_BACKWARD_ROLL</a><dd>The log is being read backward to determine which transactions have been
-committed and to abort those operations that were not; undo the operation
-described by the log record.
-<p><dt><a name="Db.DB_TXN_FORWARD_ROLL">Db.DB_TXN_FORWARD_ROLL</a><dd>The log is being played forward; redo the operation described by the log
-record.
-<p><dt><a name="Db.DB_TXN_ABORT">Db.DB_TXN_ABORT</a><dd>The log is being read backward during a transaction abort; undo the
-operation described by the log record.
-<p><dt><a name="Db.DB_TXN_APPLY">Db.DB_TXN_APPLY</a><dd>The log is being applied on a replica site; redo the operation
-described by the log record.
-<p><dt><a name="Db.DB_TXN_PRINT">Db.DB_TXN_PRINT</a><dd>The log is being printed for debugging purposes; print the contents of
-this log record in the desired format.
-</dl>
-</dl>
-<p>The Db.DB_TXN_FORWARD_ROLL and Db.DB_TXN_APPLY operations
-frequently imply the same actions, redoing changes that appear in the
-log record, although if a recovery function is to be used on a
-replication client where reads may be taking place concurrently with
-the processing of incoming messages, Db.DB_TXN_APPLY operations
-should also perform appropriate locking. The macro DB_REDO(op) checks
-that the operation is one of Db.DB_TXN_FORWARD_ROLL or
-Db.DB_TXN_APPLY, and should be used in the recovery code to refer
-to the conditions under which operations should be redone. Similarly,
-the macro DB_UNDO(op) checks if the operation is one of
-Db.DB_TXN_BACKWARD_ROLL or Db.DB_TXN_ABORT.
-<p>The DbEnv.set_app_dispatch method configures operations performed using the specified
-<a href="../api_java/dbenv_class.html">DbEnv</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DbEnv.set_app_dispatch interface may not be called after the <a href="../api_java/env_open.html">DbEnv.open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_java/env_open.html">DbEnv.open</a> is called, the information specified to DbEnv.set_app_dispatch
-must be consistent with the existing environment or corruption can
-occur.
-<p>The DbEnv.set_app_dispatch method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_app_dispatch method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<p>The DbEnv.set_app_dispatch method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_app_dispatch method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_recover.html">DbEnv.txn_recover</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-<p>
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_discard.html">DbTxn.discard</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_set_timeout.html">DbTxn.set_timeout</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_cachesize.html b/db/docs/api_java/env_set_cachesize.html
deleted file mode 100644
index af31e44f9..000000000
--- a/db/docs/api_java/env_set_cachesize.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--$Id: env_set_cachesize.so,v 10.19 2000/05/20 16:29:11 bostic Exp $-->
-<!--$Id: m4.cachesize,v 10.7 2000/02/11 18:54:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_cachesize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_cachesize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int set_cachesize(int gbytes, int bytes, in ncache)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
-<p>The default cache size is 256KB, and may not be specified as less than
-20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified. For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
-<p>The DbEnv.set_cachesize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_cachesize method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's cache size may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_cachesize", one or more whitespace characters,
-and the three arguments specified to this interface, separated by whitespace
-characters, for example, "set_cachesize 1 500 2". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-<p>The specified cache size was impossibly small.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_data_dir.html b/db/docs/api_java/env_set_data_dir.html
deleted file mode 100644
index 52fc159e7..000000000
--- a/db/docs/api_java/env_set_data_dir.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--$Id: env_set_data_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_data_dir</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_data_dir</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_data_dir(String dir)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the path of a directory to be used as the location of the access
-method database files. Paths specified to the <a href="../api_java/db_open.html">Db.open</a> function
-will be searched relative to this path. Paths set using this interface
-are additive, and specifying more than one will result in each specified
-directory being searched for database files. If any directories are
-specified, created database files will always be created in the first path
-specified.
-<p>If no database directories are specified, database files can only exist
-in the environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
-<p>For the greatest degree of recoverability from system or application
-failure, database files and log files should be located on separate
-physical devices.
-<p>The DbEnv.set_data_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_data_dir method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's data directory may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_data_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_encrypt.html b/db/docs/api_java/env_set_encrypt.html
deleted file mode 100644
index 5a6ca0364..000000000
--- a/db/docs/api_java/env_set_encrypt.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!--Id: env_set_encrypt.so,v 10.3 2002/06/24 14:49:18 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_encrypt</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_encrypt</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_encrypt(String passwd, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the password used by the <a href="../api_java/dbenv_class.html">DbEnv</a> and <a href="../api_java/db_class.html">Db</a> methods to
-perform encryption and decryption.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_ENCRYPT_AES">Db.DB_ENCRYPT_AES</a><dd>Use the Rijndael/AES (also known as the Advanced Encryption Standard
-and Federal Information Processing Standard (FIPS) 197) algorithm for
-encryption or decryption.
-</dl>
-<p>The DbEnv.set_encrypt method configures a database environment, not only operations
-performed using the specified <a href="../api_java/dbenv_class.html">DbEnv</a> handle.
-<p>The DbEnv.set_encrypt interface may not be called after the <a href="../api_java/env_open.html">DbEnv.open</a>
-interface is called.
-If the database environment already exists when
-<a href="../api_java/env_open.html">DbEnv.open</a> is called, the information specified to DbEnv.set_encrypt
-must be consistent with the existing environment or an error will be
-returned.
-<p>The DbEnv.set_encrypt method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_encrypt method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after
-<a href="../api_java/env_open.html">DbEnv.open</a>
-was called.
-</dl>
-<p>The DbEnv.set_encrypt method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_encrypt method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_dbremove.html">DbEnv.dbremove</a>,
-<a href="../api_java/env_dbrename.html">DbEnv.dbrename</a>,
-<a href="../api_java/env_err.html">DbEnv.err</a>,
-<a href="../api_java/env_err.html">DbEnv.errx</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_set_app_dispatch.html">DbEnv.set_app_dispatch</a>,
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a>,
-<a href="../api_java/env_set_encrypt.html">DbEnv.set_encrypt</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a>,
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a>,
-<a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a>,
-<a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a>,
-<a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a>,
-<a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a>,
-<a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a>,
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>
-and
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_errcall.html b/db/docs/api_java/env_set_errcall.html
deleted file mode 100644
index 596de4713..000000000
--- a/db/docs/api_java/env_set_errcall.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!--$Id: env_set_errcall.so,v 10.16 1999/12/20 08:52:29 bostic Exp $-->
-<!--$Id: m4.errset,v 10.8 2000/02/19 20:57:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_errcall</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_errcall</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbErrcall
-{
- public abstract void errcall(String errpfx, String msg);
-}
-public class DbEnv
-{
- public void set_errcall(DbErrcall errcall);
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-When an error occurs in the Berkeley DB library, an exception is thrown. In
-some cases, however, the <b>errno</b> value may be insufficient to
-completely describe the cause of the error, especially during initial
-application debugging.
-<p>The DbEnv.set_errcall method is used to enhance the mechanism for reporting error
-messages to the application. The DbEnv.set_errcall method must be
-called with a single object argument. The object's class must implement
-the DbErrcall interface. In some cases, when an error occurs, Berkeley DB will
-invoke the object's errcall() method with two arguments; the first is the
-prefix string (as previously set by <a href="../api_java/db_set_errpfx.html">Db.set_errpfx</a> or
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>), the second will be an error message string.
-It is up to this method to display the message in an appropriate manner.
-<p>Alternatively, you can use the <a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a> method to display
-the additional information via an output stream. You should not mix these
-approaches.
-<p>This error logging enhancement does not slow performance or significantly
-increase application size, and may be run during normal operation as well
-as during application debugging.
-<p>The DbEnv.set_errcall interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_error_stream.html b/db/docs/api_java/env_set_error_stream.html
deleted file mode 100644
index 18f44c08d..000000000
--- a/db/docs/api_java/env_set_error_stream.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--$Id: env_set_error_stream.so,v 10.13 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_error_stream</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_error_stream</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void Db.set_error_stream(OutputStream s)
- throws DbException
-</pre></h3>
-<h1>Description</h1>
-<p>When an error occurs in the Berkeley DB library, an exception is thrown. In
-some cases, however, the <b>errno</b> value may be insufficient to
-completely describe the cause of the error, especially during initial
-application debugging.
-<p>The DbEnv.set_error_stream method is used to enhance the mechanism for
-reporting error messages to the application by setting a OutputStream
-to be used for displaying additional Berkeley DB error messages. In some cases,
-when an error occurs, Berkeley DB will output an additional error message to
-the specified stream.
-<p>The error message will consist of the prefix string and a colon
-("<b>:</b>") (if a prefix string was previously specified using
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>), an error string, and a trailing
-&lt;newline&gt; character.
-<p>Alternatively, you can use the <a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a> method to capture the
-additional error information in a way that does not use output streams.
-You should not mix these approaches.
-<p>This error logging enhancement does not slow performance or significantly
-increase application size, and may be run during normal operation as well
-as during application debugging.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_errpfx.html b/db/docs/api_java/env_set_errpfx.html
deleted file mode 100644
index aca43448c..000000000
--- a/db/docs/api_java/env_set_errpfx.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--$Id: env_set_errpfx.so,v 10.12 1999/12/20 08:52:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_errpfx</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_errpfx</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_errpfx(String errpfx);
-</pre></h3>
-<h1>Description</h1>
-<p>Set the prefix string that appears before error messages issued by Berkeley DB.
-<p>The DbEnv.set_errpfx interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_feedback.html b/db/docs/api_java/env_set_feedback.html
deleted file mode 100644
index 1b5310e25..000000000
--- a/db/docs/api_java/env_set_feedback.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--$Id: env_set_feedback.so,v 10.19 2000/07/09 19:12:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_feedback</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_feedback</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbEnvFeedback
-{
- public abstract void db_feedback(DbEnv dbenv, int opcode, int pct);
-}
-public class DbEnv
-{
- public void set_feedback(DbEnvFeedback db_feedback)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>Some operations performed by the Berkeley DB library can take non-trivial
-amounts of time. The DbEnv.set_feedback method can be used by
-applications to monitor progress within these operations.
-<p>When an operation is likely to take a long time, Berkeley DB will call the
-specified callback method. This method must be declared with
-three arguments: the first will be a reference to the enclosing
-environment, the second a flag value, and the third the percent of the
-operation that has been completed, specified as an integer value between
-0 and 100. It is up to the callback method to display this
-information in an appropriate manner.
-<p>The <b>opcode</b> argument may take on any of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_RECOVER">Db.DB_RECOVER</a><dd>The environment is being recovered.
-</dl>
-<p>The DbEnv.set_feedback interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DbEnv.set_feedback method throws an exception that encapsulates a non-zero error value on
-failure.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_flags.html b/db/docs/api_java/env_set_flags.html
deleted file mode 100644
index d371429e0..000000000
--- a/db/docs/api_java/env_set_flags.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!--$Id-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_flags</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_flags</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_flags(int flags, int onoff)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-If <b>onoff</b> is zero, the specified flags are cleared, otherwise they
-are set.
-<p><dl compact>
-<p><dt><a name="Db.DB_CDB_ALLDB">Db.DB_CDB_ALLDB</a><dd>For Berkeley DB Concurrent Data Store applications, perform locking on an environment-wide basis
-rather than per-database. This flag may only be used to configure Berkeley DB
-before the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p><dt><a name="Db.DB_NOMMAP">Db.DB_NOMMAP</a><dd>Copy read-only database files in this environment into the local cache
-instead of potentially mapping them into process memory (see the
-description of the <a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a> method for further information).
-<p><dt><a name="Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log on transaction commit or prepare.
-This means that transactions exhibit the ACI (atomicity, consistency and
-isolation) properties, but not D (durability), i.e., database integrity
-will be maintained but it is possible that some number of the most
-recently committed transactions may be undone during recovery instead of
-being redone.
-<p>The number of transactions that are potentially at risk is governed by
-how often the log is checkpointed (see <a href="../utility/db_checkpoint.html">db_checkpoint</a> for more
-information) and how many log updates can fit on a single log page.
-</dl>
-<p>The DbEnv.set_flags method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's flag values may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_flags", one or more whitespace characters,
-and the interface flag argument as a string, for example, "set_flags
-DB_TXN_NOSYNC". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lg_bsize.html b/db/docs/api_java/env_set_lg_bsize.html
deleted file mode 100644
index 1f3725f6e..000000000
--- a/db/docs/api_java/env_set_lg_bsize.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--$Id: env_set_lg_bsize.so,v 10.10 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lg_bsize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lg_bsize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lg_bsize(int lg_bsize)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the in-memory log buffer, in bytes. By default, or if
-the value is set to 0, a size of 32K is used.
-<p>Log information is stored in-memory until the storage space fills up
-or transaction commit forces the information to be flushed to stable
-storage. In the presence of long-running transactions or transactions
-producing large amounts of data, larger buffer sizes can increase
-throughput.
-<p>The DbEnv.set_lg_bsize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lg_bsize method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's log buffer size may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lg_bsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lg_dir.html b/db/docs/api_java/env_set_lg_dir.html
deleted file mode 100644
index 6633ee5d8..000000000
--- a/db/docs/api_java/env_set_lg_dir.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--$Id: env_set_lg_dir.so,v 10.3 2000/05/20 16:29:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lg_dir</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lg_dir</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lg_dir(String dir)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The path of a directory to be used as the location of logging files.
-Log files created by the Log Manager subsystem will be created in this
-directory.
-<p>If no logging directory is specified, log files are created in the
-environment home directory. See <a href="../ref/env/naming.html">Berkeley DB File Naming</a> for more information.
-<p>For the greatest degree of recoverability from system or application
-failure, database files and log files should be located on separate
-physical devices.
-<p>The DbEnv.set_lg_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lg_dir method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's logging directory may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lg_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lg_max.html b/db/docs/api_java/env_set_lg_max.html
deleted file mode 100644
index fea4163be..000000000
--- a/db/docs/api_java/env_set_lg_max.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--$Id: env_set_lg_max.so,v 10.20 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lg_max</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lg_max</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lg_max(int lg_max)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum size of a single file in the log, in bytes. Because
-<a href="../api_java/lsn_class.html">DbLsn</a> file offsets are unsigned 4-byte values, the set value may
-not be larger than the maximum unsigned 4-byte value. By default, or if
-the value is set to 0, a size of 10MB is used.
-<p>See <a href="../ref/log/limits.html">Log File Limits</a>
-for more information.
-<p>The DbEnv.set_lg_max interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lg_max method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's log file size may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lg_max", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-<p>The specified log file size was too large.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lg_regionmax.html b/db/docs/api_java/env_set_lg_regionmax.html
deleted file mode 100644
index 64995a7e7..000000000
--- a/db/docs/api_java/env_set_lg_regionmax.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--Id: env_set_lg_regionmax.so,v 10.3 2001/05/01 14:23:08 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lg_regionmax</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_lg_regionmax</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lg_regionmax(int lg_regionmax)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the size of the underlying logging subsystem region, in bytes. By
-default, or if the value is set to 0, the base region size is 60KB.
-The log region is used to store filenames, and so may need to be
-increased in size if a large number of files will be opened and
-registered with the specified Berkeley DB environment's log manager.
-<p>The DbEnv.set_lg_regionmax interface may be used only to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lg_regionmax method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's log region size may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lg_regionmax", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p>The DbEnv.set_lg_regionmax method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<p>The DbEnv.set_lg_regionmax method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_lg_regionmax method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>,
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lk_conflicts.html b/db/docs/api_java/env_set_lk_conflicts.html
deleted file mode 100644
index 3ad5c6173..000000000
--- a/db/docs/api_java/env_set_lk_conflicts.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--$Id: env_set_lk_conflicts.so,v 10.22 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lk_conflicts</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lk_conflicts</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lk_conflicts(byte[][] conflicts)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the locking conflicts matrix.
-A non-0 value for the array element:
-<p><blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote>
-<p>indicates that requested_mode and held_mode conflict. The
-<i>not-granted</i> mode must be represented by 0.
-<p>If no <b>conflicts</b> value is specified, the conflicts array
-<b>db_rw_conflicts</b> is used; see <a href="../ref/lock/stdmode.html">Standard Lock Modes</a> for a description of that array.
-<p>The DbEnv.set_lk_conflicts interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lk_conflicts method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<p><dl compact>
-<p><dt>ENOMEM<dd>No memory was available to copy the conflicts array.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lk_detect.html b/db/docs/api_java/env_set_lk_detect.html
deleted file mode 100644
index cf3dd0871..000000000
--- a/db/docs/api_java/env_set_lk_detect.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--$Id: env_set_lk_detect.so,v 10.19 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lk_detect</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lk_detect</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lk_detect(int detect)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set if the deadlock detector is to be run whenever a lock conflict occurs,
-and specify which transaction should be aborted in the case of a deadlock.
-The specified value must be one of the following list:
-<p><dl compact>
-<p><dt><a name="DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use the default policy as specified by <a href="../utility/db_deadlock.html">db_deadlock</a>.
-<dt><a name="DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Abort the oldest transaction.
-<dt><a name="DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Abort a random transaction involved in the deadlock.
-<dt><a name="DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Abort the youngest transaction.
-</dl>
-<p>The DbEnv.set_lk_detect interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lk_detect method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's deadlock detector configuration may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lk_detect", one or more whitespace characters,
-and the interface <b>detect</b> argument as a string, for example,
-"set_lk_detect DB_LOCK_OLDEST". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lk_max_lockers.html b/db/docs/api_java/env_set_lk_max_lockers.html
deleted file mode 100644
index 500244bee..000000000
--- a/db/docs/api_java/env_set_lk_max_lockers.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--$Id: env_set_lk_max_lockers.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lk_max_lockers</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lk_max_lockers</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lk_max_lockers(int max)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneous locking entities supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_java/env_open.html">DbEnv.open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv.set_lk_max_lockers interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lk_max_lockers method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's maximum number of lockers may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lk_max_lockers", one or more whitespace characters,
-and the number of lockers. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lk_max_locks.html b/db/docs/api_java/env_set_lk_max_locks.html
deleted file mode 100644
index 88a5100aa..000000000
--- a/db/docs/api_java/env_set_lk_max_locks.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--$Id: env_set_lk_max_locks.so,v 10.1 2000/12/21 19:11:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lk_max_locks</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lk_max_locks</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lk_max_locks(int max)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of locks supported by the Berkeley DB lock subsystem.
-This value is used by <a href="../api_java/env_open.html">DbEnv.open</a> to estimate how much space to
-allocate for various lock-table data structures. For specific
-information on configuring the size of the lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv.set_lk_max_locks interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lk_max_locks method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's maximum number of locks may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lk_max_locks", one or more whitespace characters,
-and the number of locks. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_lk_max_objects.html b/db/docs/api_java/env_set_lk_max_objects.html
deleted file mode 100644
index b31ebefbf..000000000
--- a/db/docs/api_java/env_set_lk_max_objects.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--$Id: env_set_lk_max_objects.so,v 1.2 2000/12/08 22:03:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_lk_max_objects</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_lk_max_objects</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_lk_max_objects(int max)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of simultaneously locked objects supported by
-the Berkeley DB lock subsystem. This value is used by <a href="../api_java/env_open.html">DbEnv.open</a> to
-estimate how much space to allocate for various lock-table data
-structures. For specific information on configuring the size of the
-lock subsystem, see
-<a href="../ref/lock/max.html">Configuring locking: sizing the system</a>.
-<p>The DbEnv.set_lk_max_objects interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_lk_max_objects method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's maximum number of objects may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lk_max_objects", one or more whitespace characters,
-and the number of objects. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_mp_mmapsize.html b/db/docs/api_java/env_set_mp_mmapsize.html
deleted file mode 100644
index ef1d5b14e..000000000
--- a/db/docs/api_java/env_set_mp_mmapsize.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--$Id: env_set_mp_mmapsize.so,v 10.18 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_mp_mmapsize</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_mp_mmapsize</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_mp_mmapsize(long mmapsize)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Files that are opened read-only in the pool (and that satisfy a few other
-criteria) are, by default, mapped into the process address space instead
-of being copied into the local cache. This can result in better-than-usual
-performance, as available virtual memory is normally much larger than the
-local cache, and page faults are faster than page copying on many systems.
-However, in the presence of limited virtual memory it can cause resource
-starvation, and in the presence of large databases, it can result in immense
-process sizes.
-<p>Set the maximum file size, in bytes, for a file to be mapped into the
-process address space. If no value is specified, it defaults to 10MB.
-<p>The DbEnv.set_mp_mmapsize interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_mp_mmapsize method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's maximum mapped file size may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_mp_mmapsize", one or more whitespace characters,
-and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a>,
-<a href="../api_java/memp_stat.html">DbEnv.memp_stat</a>
-and
-<a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_rpc_server.html b/db/docs/api_java/env_set_rpc_server.html
deleted file mode 100644
index b379bc643..000000000
--- a/db/docs/api_java/env_set_rpc_server.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--"@(#)env_set_rpc_server.so 10.1 (Sleepycat) 8/25/99"-->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_rpc_server</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_rpc_server</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_rpc_server(DbClient client, String host,
- long cl_timeout, long sv_timeout, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Establishes a connection for this <b>dbenv</b> to a RPC server. If
-the <b>client</b> argument is NULL, this call creates a connection to
-the Berkeley DB server on the indicated hostname and sets up a channel for
-communication.
-The <b>client</b> argument is reserved for future use.
-If it is not NULL, an exception is thrown.
-<p>The <b>cl_timeout</b> argument specifies the number of seconds the client
-should wait for results to come back from the server. Once the timeout
-has expired on any communication with the server, Db.DB_NOSERVER will
-be returned. If this value is zero, a default timeout is used.
-<p>The <b>sv_timeout</b> argument specifies the number of seconds the server
-should allow a client connection to remain idle before assuming that the
-client is gone. Once that timeout has been reached, the server releases
-all resources associated with that client connection. Subsequent attempts
-by that client to communicate with the server result in
-Db.DB_NOSERVER_ID, indicating that an invalid identifier has been
-given to the server. This value can be considered a hint to the server.
-The server may alter this value based on its own policies or allowed
-values. If this value is zero, a default timeout is used.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>When the DbEnv.set_rpc_server method has been called, any subsequent calls
-to Berkeley DB library interfaces may return either <a name="DB_NOSERVER">DB_NOSERVER</a> or
-<a name="DB_NOSERVER_ID">DB_NOSERVER_ID</a>.
-<p>The DbEnv.set_rpc_server method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_rpc_server method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.set_rpc_server method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_rpc_server method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_data_dir.html">DbEnv.set_data_dir</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_feedback.html">DbEnv.set_feedback</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-<a href="../api_java/env_set_pageyield.html">DbEnv.set_pageyield</a>,
-<a href="../api_java/env_set_panicstate.html">DbEnv.set_panicstate</a>,
-<a href="../api_java/env_set_rec_init.html">DbEnv.set_recovery_init</a>,
-<a href="../api_java/env_set_rpc_server.html">DbEnv.set_rpc_server</a>,
-<a href="../api_java/env_set_region_init.html">DbEnv.set_region_init</a>,
-<a href="../api_java/env_set_shm_key.html">DbEnv.set_shm_key</a>,
-<a href="../api_java/env_set_tas_spins.html">DbEnv.set_tas_spins</a>,
-<a href="../api_java/env_set_tmp_dir.html">DbEnv.set_tmp_dir</a>,
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>,
-and <a href="../api_java/env_strerror.html">DbEnv.strerror</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_shm_key.html b/db/docs/api_java/env_set_shm_key.html
deleted file mode 100644
index 12a65c922..000000000
--- a/db/docs/api_java/env_set_shm_key.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!--$Id: env_set_shm_key.so,v 10.5 2000/08/09 15:45:52 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_shm_key</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_shm_key</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_shm_key(long shm_key)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Specify a base segment ID for Berkeley DB environment shared memory regions
-created in system memory on VxWorks or systems supporting X/Open-style
-shared memory interfaces, e.g., UNIX systems supporting
-<b>shmget</b>(2) and related System V IPC interfaces.
-<p>This base segment ID will be used when Berkeley DB shared memory regions are
-first created. It will be incremented a small integer value each time
-a new shared memory region is created, that is, if the base ID is 35,
-the first shared memory region created will have a segment ID of 35 and
-the next one a segment ID between 36 and 40 or so. A Berkeley DB environment
-always creates a master shared memory region, plus an additional shared
-memory region for each of the subsystems supported by the environment
-(locking, logging, memory pool and transaction), plus an additional
-shared memory region for each additional memory pool cache that is
-supported. Already existing regions with the same segment IDs will be
-removed. See <a href="../ref/env/region.html">Shared Memory Regions</a>
-for more information.
-<p>The intent behind this interface is two-fold: without it, applications
-have no way to ensure that two Berkeley DB applications don't attempt to use
-the same segment IDs when creating different Berkeley DB environments. In
-addition, by using the same segment IDs each time the environment is
-created, previously created segments will be removed, and the set of
-segments on the system will not grow without bound.
-<p>The DbEnv.set_shm_key interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_shm_key method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's base segment ID may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_shm_key", one or more whitespace characters,
-and the ID. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_tas_spins.html b/db/docs/api_java/env_set_tas_spins.html
deleted file mode 100644
index 64654ebc9..000000000
--- a/db/docs/api_java/env_set_tas_spins.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--$Id: env_set_tas_spins.so,v 10.9 2000/05/31 15:10:00 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_tas_spins</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_tas_spins</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-static int
-DbEnv.set_tas_spins(u_int32_t tas_spins);
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Specify that test-and-set mutexes should spin <b>tas_spins</b> times
-without blocking. The value defaults to 1 on uniprocessor systems and
-to 50 times the number of processors on multiprocessor systems.
-<p>The DbEnv.set_tas_spins interface affects the entire application, not a single
-database or database environment.
-<p>While the DbEnv.set_tas_spins interface may be used to configure Berkeley DB at any time
-during the life of the application, it should normally be called before
-making any calls to the <a href="../api_c/env_create.html">db_env_create</a> or <a href="../api_c/db_create.html">db_create</a> methods.
-<p>The DbEnv.set_tas_spins method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's test-and-set spin count may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_tas_spins", one or more whitespace characters,
-and the number of spins. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_timeout.html b/db/docs/api_java/env_set_timeout.html
deleted file mode 100644
index 9a193327e..000000000
--- a/db/docs/api_java/env_set_timeout.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!--Id: env_set_timeout.so,v 10.8 2002/08/29 03:24:42 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_timeout</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_timeout</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_timeout(long timeout, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.set_timeout method sets timeout values for locks or
-transactions in the database environment. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_SET_LOCK_TIMEOUT">Db.DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this database environment.
-<p>The database environment's transaction timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_txn_timeout", one or more whitespace characters,
-and the transaction timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<p><dt><a name="Db.DB_SET_TXN_TIMEOUT">Db.DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for transactions in this database environment.
-<p>The database environment's lock timeout value may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_lock_timeout", one or more whitespace characters,
-and the lock timeout value. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-</dl>
-<p>Timeouts are checked whenever a thread of control blocks on a lock or
-when deadlock detection is performed. (In the case of
-Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
-through the Lock subsystem interfaces. In the case of
-Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a
-transaction. In either case, it may be a lock requested by the database
-access methods underlying the application.) As timeouts are only
-checked when the lock request first blocks or when deadlock detection
-is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
-<p>Timeout values specified for the database environment may be overridden
-on a per-lock or per-transaction basis. See <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> and
-<a href="../api_java/txn_set_timeout.html">DbTxn.set_timeout</a> for more information.
-<p>The DbEnv.set_timeout method configures a database environment, not only operations
-performed using the specified <a href="../api_java/env_class.html">DbEnv</a> handle.
-<p>The DbEnv.set_timeout interface may be called at any time during the life of
-the application.
-<p>The DbEnv.set_timeout method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_timeout method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.set_timeout method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_timeout method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_list.html">Database Environments and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_tmp_dir.html b/db/docs/api_java/env_set_tmp_dir.html
deleted file mode 100644
index 8c3c4b899..000000000
--- a/db/docs/api_java/env_set_tmp_dir.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<!--$Id: env_set_tmp_dir.so,v 10.3 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_tmp_dir</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_tmp_dir</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_tmp_dir(String dir)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The path of a directory to be used as the location of temporary files.
-The files created to back in-memory access method databases will be
-created relative to this path. These temporary files can be quite large,
-depending on the size of the database.
-<p>If no directories are specified, the following alternatives are checked
-in the specified order. The first existing directory path is used for
-all temporary files.
-<p><ol>
-<p><li>The value of the environment variable <b>TMPDIR</b>.
-<li>The value of the environment variable <b>TEMP</b>.
-<li>The value of the environment variable <b>TMP</b>.
-<li>The value of the environment variable <b>TempFolder</b>.
-<li>The value returned by the GetTempPath interface.
-<li>The directory <b>/var/tmp</b>.
-<li>The directory <b>/usr/tmp</b>.
-<li>The directory <b>/temp</b>.
-<li>The directory <b>/tmp</b>.
-<li>The directory <b>C:/temp</b>.
-<li>The directory <b>C:/tmp</b>.
-</ol>
-<p>Note: environment variables are only checked if one of the
-<a href="../api_java/env_open.html#DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a> or <a href="../api_java/env_open.html#DB_USE_ENVIRON_ROOT">Db.DB_USE_ENVIRON_ROOT</a> flags were
-specified.
-<p>Note: the GetTempPath interface is only checked on Win/32 platforms.
-<p>The DbEnv.set_tmp_dir interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_tmp_dir method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's temporary file directory may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_tmp_dir", one or more whitespace characters,
-and the directory name. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_tx_max.html b/db/docs/api_java/env_set_tx_max.html
deleted file mode 100644
index d1a57f5c8..000000000
--- a/db/docs/api_java/env_set_tx_max.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--$Id: env_set_tx_max.so,v 10.21 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_tx_max</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_tx_max</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_tx_max(int tx_max)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Set the maximum number of active transactions that are supported by the
-environment. This value bounds the size of backing shared memory regions.
-Note that child transactions must be counted as active until their
-ultimate parent commits or aborts.
-<p>When there are more than the specified number of concurrent transactions,
-calls to <a href="../api_java/txn_begin.html">DbEnv.txn_begin</a> will fail (until some active transactions
-complete). If no value is specified, a default value of 20 is used.
-<p>The DbEnv.set_tx_max interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_tx_max method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's maximum number of active transactions may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_tx_max", one or more whitespace characters,
-and the number of transactions. Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>Called after <a href="../api_java/env_open.html">DbEnv.open</a> was called.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_tx_timestamp.html b/db/docs/api_java/env_set_tx_timestamp.html
deleted file mode 100644
index 93ae153a7..000000000
--- a/db/docs/api_java/env_set_tx_timestamp.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--$Id: env_set_tx_timestamp.so,v 10.6 2000/12/21 18:33:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_tx_timestamp</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_tx_timestamp</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_tx_timestamp(java.util.Date timestamp)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>Recover to the time specified by <b>timestamp</b> rather than to the most
-current possible date.
-Note that only the seconds (not the milliseconds) of the <b>timestamp</b>
-are used
-<p>Once a database environment has been upgraded to a new version of Berkeley DB
-involving a log format change (see <a href="../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>, it is no longer possible to recover
-to a specific time before that upgrade.
-<p>The DbEnv.set_tx_timestamp interface may only be used to configure Berkeley DB before
-the <a href="../api_java/env_open.html">DbEnv.open</a> interface is called.
-<p>The DbEnv.set_tx_timestamp method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>It is not possible to recover to the specified time using the
-log files currently present in the environment.
-</dl>
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_set_verbose.html b/db/docs/api_java/env_set_verbose.html
deleted file mode 100644
index 8fbfb32eb..000000000
--- a/db/docs/api_java/env_set_verbose.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--$Id: env_set_verbose.so,v 10.23 2000/05/20 16:29:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_verbose</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.set_verbose</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int set_verbose(u_int32_t which, boolean onoff);
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.set_verbose method turns additional informational and
-debugging messages in the Berkeley DB message output on and off. If
-<b>onoff</b> is set to
-true,
-the additional messages are output.
-<p>The <b>which</b> parameter must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_VERB_CHKPOINT">Db.DB_VERB_CHKPOINT</a><dd>Display checkpoint location information when searching the log for
-checkpoints.
-<p><dt><a name="Db.DB_VERB_DEADLOCK">Db.DB_VERB_DEADLOCK</a><dd>Display additional information when doing deadlock detection.
-<p><dt><a name="Db.DB_VERB_RECOVERY">Db.DB_VERB_RECOVERY</a><dd>Display additional information when performing recovery.
-<p><dt><a name="Db.DB_VERB_WAITSFOR">Db.DB_VERB_WAITSFOR</a><dd>Display the waits-for table when doing deadlock detection.
-</dl>
-<p>The DbEnv.set_verbose interface may be used to configure Berkeley DB at any time
-during the life of the application.
-<p>The DbEnv.set_verbose method throws an exception that encapsulates a non-zero error value on
-failure.
-<p>The database environment's verbosity may also be set using the environment's
-<b>DB_CONFIG</b> file. The syntax of the entry in that file is a
-single line with the string "set_verbose", one or more whitespace characters,
-and the interface <b>which</b> argument as a string, for example,
-"set_verbose DB_VERB_CHKPOINT". Because the <b>DB_CONFIG</b> file is read when the database
-environment is opened, it will silently overrule configuration done
-before that time.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_strerror.html b/db/docs/api_java/env_strerror.html
deleted file mode 100644
index e63e82e5f..000000000
--- a/db/docs/api_java/env_strerror.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--$Id: env_strerror.so,v 8.4 2000/07/30 17:59:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.strerror</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.strerror</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public static String strerror(int errcode);
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.strerror method returns an error message string corresponding
-to the error number <b>error</b>. This interface is a superset of the
-ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) interface. If the error number
-<b>error</b> is greater than or equal to 0, then the string returned by
-the system interface <b>strerror</b>(3) is returned. If the error
-number is less than 0, an error string appropriate to the corresponding
-Berkeley DB library error is returned. See
-<a href="../ref/program/errorret.html">Error returns to applications</a>
-for more information.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/env_version.html b/db/docs/api_java/env_version.html
deleted file mode 100644
index ba0b1a034..000000000
--- a/db/docs/api_java/env_version.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--$Id: env_version.so,v 10.7 2000/09/21 19:58:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.get_version_major</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.get_version_major</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public static int get_version_major();
-public static int get_version_minor();
-public static int get_version_patch();
-public static String get_version_string();
-</pre></h3>
-<h1>Description</h1>
-<p>These methods return version information about the underlying Berkeley DB
-software. Berkeley DB is released with a major, minor and patch number, which
-is returned by DbEnv.get_version_major,
-DbEnv.get_version_minor and DbEnv.get_version_patch.
-A verbose version of this information, suitable for display, is returned
-by DbEnv.get_version_string.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_close.html">DbEnv.close</a>,
-<a href="../api_java/env_open.html">DbEnv.open</a>,
-<a href="../api_java/env_remove.html">DbEnv.remove</a>,
-<a href="../api_java/env_strerror.html">DbEnv.strerror</a>,
-<a href="../api_java/env_version.html">DbEnv.get_version_string</a>
-<a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a>,
-<a href="../api_java/env_set_errcall.html">DbEnv.set_errcall</a>,
-<a href="../api_java/env_set_error_stream.html">DbEnv.set_error_stream</a>,
-<a href="../api_java/env_set_errpfx.html">DbEnv.set_errpfx</a>,
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>,
-<a href="../api_java/env_set_mutexlocks.html">DbEnv.set_mutexlocks</a>,
-and
-<a href="../api_java/env_set_verbose.html">DbEnv.set_verbose</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/except_class.html b/db/docs/api_java/except_class.html
deleted file mode 100644
index 885d161d5..000000000
--- a/db/docs/api_java/except_class.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--$Id: except_class.so,v 10.15 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbException</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbException</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbException extends Exception { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbException class and how it is used
-by the various Berkeley DB classes.
-<p>Most methods in the Berkeley DB classes throw an exception when an error occurs.
-A DbException object contains an informational string and an errno. The
-errno can be obtained using <a href="../api_java/get_errno.html">DbException.get_errno</a>. Since DbException
-inherits from the java.Exception, the string portion is available using
-toString().
-<p>Some methods may return non-zero values without issuing an exception.
-This occurs in situations that are not normally considered an error, but
-when some informational status is returned. For example, <a href="../api_java/db_get.html">Db.get</a>
-returns DB_NOTFOUND when a requested key does not appear in the database.
-<h3>Class</h3>
-<a href="../api_java/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_java/get_errno.html">DbException.get_errno</a>,
-<a href="../api_java/deadlock_class.html">DbDeadlockException</a>,
-<a href="../api_java/mem_class.html">DbMemoryException</a>
-and
-<a href="../api_java/runrec_class.html">DbRunRecoveryException</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/java_pindex.html b/db/docs/api_java/java_pindex.html
deleted file mode 100644
index 5ac50e479..000000000
--- a/db/docs/api_java/java_pindex.html
+++ /dev/null
@@ -1,478 +0,0 @@
-<html>
-<head>
-<title>Berkeley DB: Java Interface Index</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Java Interface Index</h1>
-<center>
-<table cellspacing=0 cellpadding=0>
-<tr><td align=right> configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#5">1.85</a> API compatibility</td></tr>
-<tr><td align=right> building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> databases</td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
-<tr><td align=right> selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
-<tr><td align=right> programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_archive.html#3">archive</a> log files</td></tr>
-<tr><td align=right> </td><td><a href="../utility/berkeley_db_svc.html#2">berkeley_db_svc</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/byteorder.html#2">byte</a> ordering</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#6">C++</a> API</td></tr>
-<tr><td align=right> flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
-<tr><td align=right>Patches, Updates and </td><td><a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
-<tr><td align=right> utility to take </td><td><a href="../utility/db_checkpoint.html#3">checkpoints</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right> specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
-<tr><td align=right> changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
-<tr><td align=right> </td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> recovering </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
-<tr><td align=right> closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
-<tr><td align=right> deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
-<tr><td align=right> duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
-<tr><td align=right> retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
-<tr><td align=right> storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_java/dbt_class.html#data">data</a></td></tr>
-<tr><td align=right> utility to upgrade </td><td><a href="../utility/db_upgrade.html#3">database</a> files</td></tr>
-<tr><td align=right> utility to verify </td><td><a href="../utility/db_verify.html#3">database</a> files</td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_class.html#2">Db</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_archive.html#2">db_archive</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_class.html#2">Dbc</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_close.html#2">Dbc.close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_count.html#2">Dbc.count</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_del.html#2">Dbc.del</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_dup.html#2">Dbc.dup</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_get.html#2">Dbc.get</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_checkpoint.html#2">db_checkpoint</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_close.html#2">Db.close</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbc_put.html#2">Dbc.put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_cursor.html#2">Db.cursor</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_AFTER">Db.DB_AFTER</a></td></tr>
-<tr><td align=right>Db.verify</td><td><a href="../api_java/db_verify.html#Db.DB_AGGRESSIVE">Db.DB_AGGRESSIVE</a></td></tr>
-<tr><td align=right>Db.put</td><td><a href="../api_java/db_put.html#Db.DB_APPEND">Db.DB_APPEND</a></td></tr>
-<tr><td align=right>DbEnv.log_archive</td><td><a href="../api_java/log_archive.html#Db.DB_ARCH_ABS">Db.DB_ARCH_ABS</a></td></tr>
-<tr><td align=right>DbEnv.log_archive</td><td><a href="../api_java/log_archive.html#Db.DB_ARCH_DATA">Db.DB_ARCH_DATA</a></td></tr>
-<tr><td align=right>DbEnv.log_archive</td><td><a href="../api_java/log_archive.html#Db.DB_ARCH_LOG">Db.DB_ARCH_LOG</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_BEFORE">Db.DB_BEFORE</a></td></tr>
-<tr><td align=right>Db.stat</td><td><a href="../api_java/db_stat.html#Db.DB_CACHED_COUNTS">Db.DB_CACHED_COUNTS</a></td></tr>
-<tr><td align=right>DbEnv.set_flags</td><td><a href="../api_java/env_set_flags.html#Db.DB_CDB_ALLDB">Db.DB_CDB_ALLDB</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_CHECKPOINT">Db.DB_CHECKPOINT</a></td></tr>
-<tr><td align=right>DbEnv.log_put</td><td><a href="../api_java/log_put.html#Db.DB_CHECKPOINT">Db.DB_CHECKPOINT</a></td></tr>
-<tr><td align=right>DbEnv</td><td><a href="../api_java/dbenv_class.html#Db.DB_CLIENT">Db.DB_CLIENT</a></td></tr>
-<tr><td align=right>Db.get</td><td><a href="../api_java/db_get.html#Db.DB_CONSUME">Db.DB_CONSUME</a></td></tr>
-<tr><td align=right>Db.get</td><td><a href="../api_java/db_get.html#Db.DB_CONSUME_WAIT">Db.DB_CONSUME_WAIT</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_CREATE">Db.DB_CREATE</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_CREATE">Db.DB_CREATE</a></td></tr>
-<tr><td align=right>DbEnv.log_put</td><td><a href="../api_java/log_put.html#Db.DB_CURLSN">Db.DB_CURLSN</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_CURRENT">Db.DB_CURRENT</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_CURRENT">Db.DB_CURRENT</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_CURRENT">Db.DB_CURRENT</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_java/dbt_class.html#Db.DB_DBT_MALLOC">Db.DB_DBT_MALLOC</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_java/dbt_class.html#Db.DB_DBT_PARTIAL">Db.DB_DBT_PARTIAL</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_java/dbt_class.html#Db.DB_DBT_REALLOC">Db.DB_DBT_REALLOC</a></td></tr>
-<tr><td align=right>Dbt</td><td><a href="../api_java/dbt_class.html#Db.DB_DBT_USERMEM">Db.DB_DBT_USERMEM</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_DUP">Db.DB_DUP</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_DUPSORT">Db.DB_DUPSORT</a></td></tr>
-<tr><td align=right>Db.upgrade</td><td><a href="../api_java/db_upgrade.html#Db.DB_DUPSORT">Db.DB_DUPSORT</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_EXCL">Db.DB_EXCL</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_FIRST">Db.DB_FIRST</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_FIRST">Db.DB_FIRST</a></td></tr>
-<tr><td align=right>DbEnv.log_put</td><td><a href="../api_java/log_put.html#Db.DB_FLUSH">Db.DB_FLUSH</a></td></tr>
-<tr><td align=right>DbEnv.remove</td><td><a href="../api_java/env_remove.html#Db.DB_FORCE">Db.DB_FORCE</a></td></tr>
-<tr><td align=right>DbEnv.txn_checkpoint</td><td><a href="../api_java/txn_checkpoint.html#Db.DB_FORCE">Db.DB_FORCE</a></td></tr>
-<tr><td align=right>Db.get</td><td><a href="../api_java/db_get.html#Db.DB_GET_BOTH">Db.DB_GET_BOTH</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_GET_BOTH">Db.DB_GET_BOTH</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_GET_RECNO">Db.DB_GET_RECNO</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_INIT_CDB">Db.DB_INIT_CDB</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_INIT_LOCK">Db.DB_INIT_LOCK</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_INIT_LOG">Db.DB_INIT_LOG</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_INIT_MPOOL">Db.DB_INIT_MPOOL</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_INIT_TXN">Db.DB_INIT_TXN</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_JOINENV">Db.DB_JOINENV</a></td></tr>
-<tr><td align=right>Db.join</td><td><a href="../api_java/db_join.html#Db.DB_JOIN_ITEM">Db.DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_JOIN_ITEM">Db.DB_JOIN_ITEM</a></td></tr>
-<tr><td align=right>Db.join</td><td><a href="../api_java/db_join.html#Db.DB_JOIN_NOSORT">Db.DB_JOIN_NOSORT</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_KEYFIRST">Db.DB_KEYFIRST</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_KEYLAST">Db.DB_KEYLAST</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_LAST">Db.DB_LAST</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_LAST">Db.DB_LAST</a></td></tr>
-<tr><td align=right>DbEnv.lock_detect</td><td><a href="../api_java/lock_detect.html#Db.DB_LOCK_CONFLICT">Db.DB_LOCK_CONFLICT</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_LOCKDOWN">Db.DB_LOCKDOWN</a></td></tr>
-<tr><td align=right>DbEnv.lock_get</td><td><a href="../api_java/lock_get.html#Db.DB_LOCK_NOTGRANTED">Db.DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>DbEnv.lock_get</td><td><a href="../api_java/lock_get.html#Db.DB_LOCK_NOWAIT">Db.DB_LOCK_NOWAIT</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_NEXT">Db.DB_NEXT</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_NEXT">Db.DB_NEXT</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_NEXT_DUP">Db.DB_NEXT_DUP</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_NEXT_NODUP">Db.DB_NEXT_NODUP</a></td></tr>
-<tr><td align=right>Db.put</td><td><a href="../api_java/db_put.html#Db.DB_NODUPDATA">Db.DB_NODUPDATA</a></td></tr>
-<tr><td align=right>Dbc.put</td><td><a href="../api_java/dbc_put.html#Db.DB_NODUPDATA">Db.DB_NODUPDATA</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_NOMMAP">Db.DB_NOMMAP</a></td></tr>
-<tr><td align=right>DbEnv.set_flags</td><td><a href="../api_java/env_set_flags.html#Db.DB_NOMMAP">Db.DB_NOMMAP</a></td></tr>
-<tr><td align=right>Db.verify</td><td><a href="../api_java/db_verify.html#Db.DB_NOORDERCHK">Db.DB_NOORDERCHK</a></td></tr>
-<tr><td align=right>Db.put</td><td><a href="../api_java/db_put.html#Db.DB_NOOVERWRITE">Db.DB_NOOVERWRITE</a></td></tr>
-<tr><td align=right>Db.close</td><td><a href="../api_java/db_close.html#Db.DB_NOSYNC">Db.DB_NOSYNC</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_OLD_VERSION">Db.DB_OLD_VERSION</a></td></tr>
-<tr><td align=right>Db.upgrade</td><td><a href="../api_java/db_upgrade.html#Db.DB_OLD_VERSION">Db.DB_OLD_VERSION</a></td></tr>
-<tr><td align=right>Db.verify</td><td><a href="../api_java/db_verify.html#Db.DB_ORDERCHKONLY">Db.DB_ORDERCHKONLY</a></td></tr>
-<tr><td align=right>Dbc.dup</td><td><a href="../api_java/dbc_dup.html#Db.DB_POSITION">Db.DB_POSITION</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_PREV">Db.DB_PREV</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_PREV">Db.DB_PREV</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_PREV_NODUP">Db.DB_PREV_NODUP</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_PRIVATE">Db.DB_PRIVATE</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_RDONLY">Db.DB_RDONLY</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_RECNUM">Db.DB_RECNUM</a></td></tr>
-<tr><td align=right>Db.stat</td><td><a href="../api_java/db_stat.html#Db.DB_RECORDCOUNT">Db.DB_RECORDCOUNT</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_RECOVER">Db.DB_RECOVER</a></td></tr>
-<tr><td align=right>DbEnv.set_feedback</td><td><a href="../api_java/env_set_feedback.html#Db.DB_RECOVER">Db.DB_RECOVER</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_RECOVER_FATAL">Db.DB_RECOVER_FATAL</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_RENUMBER">Db.DB_RENUMBER</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_REVSPLITOFF">Db.DB_REVSPLITOFF</a></td></tr>
-<tr><td align=right>Db.get</td><td><a href="../api_java/db_get.html#Db.DB_RMW">Db.DB_RMW</a></td></tr>
-<tr><td align=right>Db.join</td><td><a href="../api_java/db_join.html#Db.DB_RMW">Db.DB_RMW</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_RMW">Db.DB_RMW</a></td></tr>
-<tr><td align=right>Db.verify</td><td><a href="../api_java/db_verify.html#Db.DB_SALVAGE">Db.DB_SALVAGE</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_SET">Db.DB_SET</a></td></tr>
-<tr><td align=right>DbEnv.log_get</td><td><a href="../api_java/log_get.html#Db.DB_SET">Db.DB_SET</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_SET_RANGE">Db.DB_SET_RANGE</a></td></tr>
-<tr><td align=right>Db.get</td><td><a href="../api_java/db_get.html#Db.DB_SET_RECNO">Db.DB_SET_RECNO</a></td></tr>
-<tr><td align=right>Dbc.get</td><td><a href="../api_java/dbc_get.html#Db.DB_SET_RECNO">Db.DB_SET_RECNO</a></td></tr>
-<tr><td align=right>Db.set_flags</td><td><a href="../api_java/db_set_flags.html#Db.DB_SNAPSHOT">Db.DB_SNAPSHOT</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_SYSTEM_MEM">Db.DB_SYSTEM_MEM</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_THREAD">Db.DB_THREAD</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_THREAD">Db.DB_THREAD</a></td></tr>
-<tr><td align=right>Db.open</td><td><a href="../api_java/db_open.html#Db.DB_TRUNCATE">Db.DB_TRUNCATE</a></td></tr>
-<tr><td align=right>DbEnv.set_tx_recover</td><td><a href="../api_java/env_set_tx_recover.html#Db.DB_TXN_ABORT">Db.DB_TXN_ABORT</a></td></tr>
-<tr><td align=right>DbEnv.set_tx_recover</td><td><a href="../api_java/env_set_tx_recover.html#Db.DB_TXN_BACKWARD_ROLL">Db.DB_TXN_BACKWARD_ROLL</a></td></tr>
-<tr><td align=right>DbEnv.set_tx_recover</td><td><a href="../api_java/env_set_tx_recover.html#Db.DB_TXN_FORWARD_ROLL">Db.DB_TXN_FORWARD_ROLL</a></td></tr>
-<tr><td align=right>DbEnv.set_flags</td><td><a href="../api_java/env_set_flags.html#Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbEnv.txn_begin</td><td><a href="../api_java/txn_begin.html#Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbTxn.commit</td><td><a href="../api_java/txn_commit.html#Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a></td></tr>
-<tr><td align=right>DbEnv.txn_begin</td><td><a href="../api_java/txn_begin.html#Db.DB_TXN_NOWAIT">Db.DB_TXN_NOWAIT</a></td></tr>
-<tr><td align=right>DbEnv.txn_begin</td><td><a href="../api_java/txn_begin.html#Db.DB_TXN_SYNC">Db.DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>DbTxn.commit</td><td><a href="../api_java/txn_commit.html#Db.DB_TXN_SYNC">Db.DB_TXN_SYNC</a></td></tr>
-<tr><td align=right>Db.set_feedback</td><td><a href="../api_java/db_set_feedback.html#Db.DB_UPGRADE">Db.DB_UPGRADE</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DbEnv.remove</td><td><a href="../api_java/env_remove.html#Db.DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a></td></tr>
-<tr><td align=right>DbEnv.open</td><td><a href="../api_java/env_open.html#Db.DB_USE_ENVIRON_ROOT">Db.DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DbEnv.remove</td><td><a href="../api_java/env_remove.html#Db.DB_USE_ENVIRON_ROOT">Db.DB_USE_ENVIRON_ROOT</a></td></tr>
-<tr><td align=right>DbEnv.set_verbose</td><td><a href="../api_java/env_set_verbose.html#Db.DB_VERB_CHKPOINT">Db.DB_VERB_CHKPOINT</a></td></tr>
-<tr><td align=right>DbEnv.set_verbose</td><td><a href="../api_java/env_set_verbose.html#Db.DB_VERB_DEADLOCK">Db.DB_VERB_DEADLOCK</a></td></tr>
-<tr><td align=right>DbEnv.set_verbose</td><td><a href="../api_java/env_set_verbose.html#Db.DB_VERB_RECOVERY">Db.DB_VERB_RECOVERY</a></td></tr>
-<tr><td align=right>DbEnv.set_verbose</td><td><a href="../api_java/env_set_verbose.html#Db.DB_VERB_WAITSFOR">Db.DB_VERB_WAITSFOR</a></td></tr>
-<tr><td align=right>Db.set_feedback</td><td><a href="../api_java/db_set_feedback.html#Db.DB_VERIFY">Db.DB_VERIFY</a></td></tr>
-<tr><td align=right>Db.cursor</td><td><a href="../api_java/db_cursor.html#Db.DB_WRITECURSOR">Db.DB_WRITECURSOR</a></td></tr>
-<tr><td align=right>Db</td><td><a href="../api_java/db_class.html#Db.DB_XA_CREATE">Db.DB_XA_CREATE</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_deadlock.html#2">db_deadlock</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/deadlock_class.html#2">DbDeadlockException</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_del.html#2">Db.del</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_dump.html#2">db_dump</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbenv_class.html#2">DbEnv</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_close.html#2">DbEnv.close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_version.html#2">DbEnv.get_version_major</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_detect.html#2">DbEnv.lock_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_get.html#2">DbEnv.lock_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_id.html#2">DbEnv.lock_id</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_stat.html#2">DbEnv.lock_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_vec.html#2">DbEnv.lock_vec</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_archive.html#2">DbEnv.log_archive</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_compare.html#2">DbEnv.log_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_file.html#2">DbEnv.log_file</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_flush.html#2">DbEnv.log_flush</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_get.html#2">DbEnv.log_get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_put.html#2">DbEnv.log_put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_register.html#2">DbEnv.log_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_stat.html#2">DbEnv.log_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/log_unregister.html#2">DbEnv.log_unregister</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_register.html#2">DbEnv.memp_register</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_stat.html#2">DbEnv.memp_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_sync.html#2">DbEnv.memp_sync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_trickle.html#2">DbEnv.memp_trickle</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_open.html#2">DbEnv.open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_remove.html#2">DbEnv.remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_cachesize.html#2">DbEnv.set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_data_dir.html#2">DbEnv.set_data_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_errcall.html#2">DbEnv.set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_error_stream.html#2">DbEnv.set_error_stream</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_errpfx.html#2">DbEnv.set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_feedback.html#2">DbEnv.set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_flags.html#2">DbEnv.set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lg_bsize.html#2">DbEnv.set_lg_bsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lg_dir.html#2">DbEnv.set_lg_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lg_max.html#2">DbEnv.set_lg_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_conflicts.html#2">DbEnv.set_lk_conflicts</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_detect.html#2">DbEnv.set_lk_detect</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_max.html#2">DbEnv.set_lk_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_max_lockers.html#2">DbEnv.set_lk_max_lockers</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_max_locks.html#2">DbEnv.set_lk_max_locks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_lk_max_objects.html#2">DbEnv.set_lk_max_objects</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_mp_mmapsize.html#2">DbEnv.set_mp_mmapsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_mutexlocks.html#2">DbEnv.set_mutexlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_pageyield.html#2">DbEnv.set_pageyield</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_panicstate.html#2">DbEnv.set_panicstate</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_rec_init.html#2">DbEnv.set_recovery_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_region_init.html#2">DbEnv.set_region_init</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_server.html#2">DbEnv.set_server</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_shm_key.html#2">DbEnv.set_shm_key</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_tas_spins.html#2">DbEnv.set_tas_spins</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_tmp_dir.html#2">DbEnv.set_tmp_dir</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_tx_max.html#2">DbEnv.set_tx_max</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_tx_recover.html#2">DbEnv.set_tx_recover</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_tx_timestamp.html#2">DbEnv.set_tx_timestamp</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_set_verbose.html#2">DbEnv.set_verbose</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/env_strerror.html#2">DbEnv.strerror</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_begin.html#2">DbEnv.txn_begin</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_checkpoint.html#2">DbEnv.txn_checkpoint</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_stat.html#2">DbEnv.txn_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/except_class.html#2">DbException</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/get_errno.html#2">DbException.get_errno</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_fd.html#2">Db.fd</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_get.html#2">Db.get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_get_byteswapped.html#2">Db.get_byteswapped</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_get_type.html#2">Db.get_type</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
-<tr><td align=right> Db.close </td><td><a href="../api_java/db_close.html#3">DB_INCOMPLETE</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_join.html#2">Db.join</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_key_range.html#2">Db.key_range</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_load.html#2">db_load</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_class.html#2">DbLock</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
-<tr><td align=right>DbEnv.set_lk_detect</td><td><a href="../api_java/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>DbEnv.set_lk_detect</td><td><a href="../api_java/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lock_put.html#2">DbLock.put</a></td></tr>
-<tr><td align=right>DbEnv.set_lk_detect</td><td><a href="../api_java/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a></td></tr>
-<tr><td align=right>DbEnv.set_lk_detect</td><td><a href="../api_java/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/lsn_class.html#2">DbLsn</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/mem_class.html#2">DbMemoryException</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fclose.html#2">DbMpoolFile.close</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fget.html#2">DbMpoolFile.get</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fopen.html#2">DbMpoolFile.open</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fput.html#2">DbMpoolFile.put</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fset.html#2">DbMpoolFile.set</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/memp_fsync.html#2">DbMpoolFile.sync</a></td></tr>
-<tr><td align=right>DbEnv.set_server</td><td><a href="../api_java/env_set_server.html#DB_NOSERVER">DB_NOSERVER</a></td></tr>
-<tr><td align=right>DbEnv.set_server</td><td><a href="../api_java/env_set_server.html#DB_NOSERVER_ID">DB_NOSERVER_ID</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_open.html#2">Db.open</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_printlog.html#2">db_printlog</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_put.html#2">Db.put</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_recover.html#2">db_recover</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_remove.html#2">Db.remove</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_rename.html#2">Db.rename</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/runrec_class.html#2">DbRunRecoveryException</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_append_recno.html#2">Db.set_append_recno</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_bt_compare.html#2">Db.set_bt_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_bt_minkey.html#2">Db.set_bt_minkey</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_bt_prefix.html#2">Db.set_bt_prefix</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_cachesize.html#2">Db.set_cachesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_dup_compare.html#2">Db.set_dup_compare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_errcall.html#2">Db.set_errcall</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_errpfx.html#2">Db.set_errpfx</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_feedback.html#2">Db.set_feedback</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_flags.html#2">Db.set_flags</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_h_ffactor.html#2">Db.set_h_ffactor</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_h_hash.html#2">Db.set_h_hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_h_nelem.html#2">Db.set_h_nelem</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_lorder.html#2">Db.set_lorder</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_pagesize.html#2">Db.set_pagesize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_q_extentsize.html#2">Db.set_q_extentsize</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_re_delim.html#2">Db.set_re_delim</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_re_len.html#2">Db.set_re_len</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_re_pad.html#2">Db.set_re_pad</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_set_re_source.html#2">Db.set_re_source</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_stat.html#2">Db.stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_stat.html#2">db_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_sync.html#2">Db.sync</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbt_class.html#2">Dbt</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_class.html#2">DbTxn</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_abort.html#2">DbTxn.abort</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_commit.html#2">DbTxn.commit</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_id.html#2">DbTxn.id</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/txn_prepare.html#2">DbTxn.prepare</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_upgrade.html#2">Db.upgrade</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_upgrade.html#2">db_upgrade</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/db_verify.html#2">Db.verify</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_verify.html#2">db_verify</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
-<tr><td align=right> utility to detect </td><td><a href="../utility/db_deadlock.html#3">deadlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--disable-bigfile">--disable-bigfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/diskspace.html#2">disk</a> space requirements</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_dump.html#3">dump</a> databases as text files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#9">dynamic</a> shared libraries</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dynamic">--enable-dynamic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-shared">--enable-shared</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
-<tr><td align=right> byte </td><td><a href="../ref/program/byteorder.html#3">endian</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/error.html#2">error</a> handling</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
-<tr><td align=right> selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
-<tr><td align=right> Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right> recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
-<tr><td align=right> remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
-<tr><td align=right> page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
-<tr><td align=right> specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am/join.html#2">join</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_java/dbt_class.html#3">key/data</a> pairs</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/program/dbsizes.html#2">limits</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
-<tr><td align=right> changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_load.html#3">load</a> text files into databases</td></tr>
-<tr><td align=right> standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right> page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
-<tr><td align=right> two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/intro.html#2">locking</a> introduction</td></tr>
-<tr><td align=right> sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
-<tr><td align=right> utility to display </td><td><a href="../utility/db_printlog.html#3">log</a> files as text</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/intro.html#2">logging</a> introduction</td></tr>
-<tr><td align=right> </td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
-<tr><td align=right> Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
-<tr><td align=right> file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
-<tr><td align=right> retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/partial.html#2">partial</a> record storage and retrieval</td></tr>
-<tr><td align=right></td><td><a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
-<tr><td align=right> </td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
-<tr><td align=right> Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right> logical </td><td><a href="../api_java/dbt_class.html#4">record</a> number format</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
-<tr><td align=right> managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
-<tr><td align=right> logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_recover.html#3">recover</a> database environments</td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
-<tr><td align=right> configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
-<tr><td align=right> utility to support </td><td><a href="../utility/berkeley_db_svc.html#3">RPC</a> client/server</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
-<tr><td align=right> Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/env/security.html#2">security</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/sendmail/intro.html#2">Sendmail</a></td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#8">shared</a> libraries</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
-<tr><td align=right> application </td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
-<tr><td align=right></td><td><a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
-<tr><td align=right> cursor </td><td><a href="../ref/am/stability.html#3">stability</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
-<tr><td align=right> utility to display database and environment </td><td><a href="../utility/db_stat.html#3">statistics</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
-<tr><td align=right> loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
-<tr><td align=right> using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#12">Tcl</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#13">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
-<tr><td align=right> loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
-<tr><td align=right> dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
-<tr><td align=right> building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
-<tr><td align=right> administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
-<tr><td align=right> Berkeley DB and </td><td><a href="../ref/txn/intro.html#2">transactions</a></td></tr>
-<tr><td align=right> nested </td><td><a href="../ref/txn/nested.html#2">transactions</a></td></tr>
-<tr><td align=right> configuring Berkeley DB with the </td><td><a href="../ref/xa/config.html#2">Tuxedo</a> System</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
-<tr><td align=right> configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
-<tr><td align=right>Patches, </td><td><a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_upgrade.html#4">upgrade</a> database files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_verify.html#4">verify</a> database files</td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
-<tr><td align=right> running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/xa/intro.html#2">XA</a> Resource Manager</td></tr>
-</table>
-</center>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_class.html b/db/docs/api_java/lock_class.html
deleted file mode 100644
index 6705e95bd..000000000
--- a/db/docs/api_java/lock_class.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--$Id: lock_class.so,v 10.13 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbLock</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbLock</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbLock extends Object { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>The <a href="../api_java/dbenv_class.html">DbEnv</a> lock methods and the DbLock class are used
-to provide general-purpose locking. While designed to work with the
-other Db classes, they are also useful for more general locking
-purposes. Locks can be shared between processes.
-<p>In most cases, when multiple threads or processes are using locking, the
-deadlock detector, <a href="../utility/db_deadlock.html">db_deadlock</a> should be run.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_detect.html b/db/docs/api_java/lock_detect.html
deleted file mode 100644
index 6f453ddb8..000000000
--- a/db/docs/api_java/lock_detect.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--$Id: lock_detect.so,v 10.26 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_detect</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.lock_detect</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int lock_detect(int flags, int atype)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.lock_detect method runs one iteration of the deadlock detector.
-The deadlock detector traverses the lock table, and for each deadlock
-it finds, marks one of the participating transactions for abort.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_LOCK_CONFLICT">Db.DB_LOCK_CONFLICT</a><dd>Only run the deadlock detector if a lock conflict has occurred since
-the last time that the deadlock detector was run.
-</dl>
-<p>The <b>atype</b> parameter specifies which transaction to abort in the
-case of deadlock. It must be set to one of possible arguments listed for
-the <a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a> interface.
-<p>The DbEnv.lock_detect method returns the number of transactions aborted.
-<p>The DbEnv.lock_detect method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.lock_detect method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.lock_detect method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_get.html b/db/docs/api_java/lock_get.html
deleted file mode 100644
index 42604bc46..000000000
--- a/db/docs/api_java/lock_get.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--$Id: lock_get.so,v 10.28 2000/04/24 16:33:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_get</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.lock_get</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbLock lock_get(int locker,
- int flags, Dbt obj, int lock_mode)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.lock_get method acquires a lock from the lock table, returning
-information about it in
-a DbLock object.
-<p>The <b>locker</b> argument specified to DbEnv.lock_get is an unsigned
-32-bit integer quantity. It represents the entity requesting or releasing
-the lock.
-<p>The <b>flags</b> value must be set to 0 or the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_LOCK_NOWAIT">Db.DB_LOCK_NOWAIT</a><dd>If a lock cannot be granted because the requested lock conflicts with an
-existing lock, return immediately instead of waiting for the lock to
-become available.
-</dl>
-<p>The <b>obj</b> argument is an untyped byte string that specifies the
-object to be locked or released.
-<p>The <b>mode</b> argument is an index into the environment's lock conflict
-array. See <a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a> and
-<a href="../ref/lock/stdmode.html">Standard Lock Modes</a>
-for a description of that array.
-<p>The DbEnv.lock_get method may
-throw an exception encapsulating
-one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_LOCK_NOTGRANTED">Db.DB_LOCK_NOTGRANTED</a><dd>A lock was requested that could not be immediately granted and the
-<b>flags</b> parameter was set to DB_LOCK_NOWAIT.
-</dl>
-<p>Otherwise, the DbEnv.lock_get method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.lock_get method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of locks has been reached.
-</dl>
-<p>If the operation was selected to resolve a deadlock, the
-DbEnv.lock_get method will fail and
-throw a <a href="../api_java/deadlock_class.html">DbDeadlockException</a> exception.
-<p>The DbEnv.lock_get method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.lock_get method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_id.html b/db/docs/api_java/lock_id.html
deleted file mode 100644
index 2fa59317f..000000000
--- a/db/docs/api_java/lock_id.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--$Id: lock_id.so,v 10.19 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_id</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.lock_id</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int lock_id()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.lock_id method
-returns a locker ID, which is guaranteed to be unique in the specified lock
-table.
-<p>The DbEnv.lock_id method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.lock_id method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.lock_id method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_id_free.html b/db/docs/api_java/lock_id_free.html
deleted file mode 100644
index 7a22c15ac..000000000
--- a/db/docs/api_java/lock_id_free.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--Id: lock_id_free.so,v 10.5 2002/08/18 21:16:37 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_id_free</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.lock_id_free</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void lock_id_free(int id)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.lock_id_free method frees a locker ID allocated by the
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a> method.
-<p>The DbEnv.lock_id_free method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The locker ID is invalid or locks are still held by this locker ID.
-</dl>
-<p>The DbEnv.lock_id_free method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.lock_id_free method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/lock_list.html">Locking Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_list.html b/db/docs/api_java/lock_list.html
deleted file mode 100644
index 6fbcc9395..000000000
--- a/db/docs/api_java/lock_list.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--Id: lock_list.so,v 1.1 2002/08/30 20:00:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Locking Subsystem and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Locking Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
-<tr><td><a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
-<tr><td><a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
-<tr><td><a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
-<tr><td><a href="../api_java/lock_detect.html">DbEnv.lock_detect</a></td><td>Perform deadlock detection</td></tr>
-<tr><td><a href="../api_java/lock_get.html">DbEnv.lock_get</a></td><td>Acquire a lock</td></tr>
-<tr><td><a href="../api_java/lock_id.html">DbEnv.lock_id</a></td><td>Acquire a locker ID</td></tr>
-<tr><td><a href="../api_java/lock_id_free.html">DbEnv.lock_id_free</a></td><td>Release a locker ID</td></tr>
-<tr><td><a href="../api_java/lock_put.html">DbEnv.lock_put</a></td><td>Release a lock</td></tr>
-<tr><td><a href="../api_java/lock_stat.html">DbEnv.lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
-<tr><td><a href="../api_java/lock_vec.html">DbEnv.lock_vec</a></td><td>Acquire/release locks</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_put.html b/db/docs/api_java/lock_put.html
deleted file mode 100644
index fe4eacc28..000000000
--- a/db/docs/api_java/lock_put.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--$Id: lock_put.so,v 10.21 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbLock.put</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbLock.put</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public native void put(DbEnv env)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbLock.put method releases <b>lock</b> from the lock table.
-<p>The DbLock.put method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbLock.put method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbLock.put method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLock.put method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_stat.html b/db/docs/api_java/lock_stat.html
deleted file mode 100644
index 00c3703f5..000000000
--- a/db/docs/api_java/lock_stat.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--$Id: lock_stat.so,v 10.30 2000/12/08 20:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.lock_stat</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbLockStat lock_stat()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.lock_stat method
-creates a DbLockStat object encapsulating a statistical structure.
-The lock region statistics are stored in a DbLockStat object.
-The following data fields are available from the DbLockStat object:
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The lock region statistics are stored in a structure of type
-DB_LOCK_STAT. The following DB_LOCK_STAT fields will be filled in:
-<p><dl compact>
-<dt>public int st_lastid;<dd>The last allocated lock ID.
-<dt>public int st_nmodes;<dd>The number of lock modes.
-<dt>public int st_maxlocks;<dd>The maximum number of locks possible.
-<dt>public int st_maxlockers;<dd>The maximum number of lockers possible.
-<dt>public int st_maxobjects;<dd>The maximum number of objects possible.
-<dt>public int st_nlocks;<dd>The number of current locks.
-<dt>public int st_maxnlocks;<dd>The maximum number of locks at any one time.
-<dt>public int st_nlockers;<dd>The number of current lockers.
-<dt>public int st_maxnlockers;<dd>The maximum number of lockers at any one time.
-<dt>public int st_nobjects;<dd>The number of current objects.
-<dt>public int st_maxnobjects;<dd>The maximum number of objects at any one time.
-<dt>public int st_nrequests;<dd>The total number of locks requested.
-<dt>public int st_nreleases;<dd>The total number of locks released.
-<dt>public int st_nnowaits;<dd>The total number of lock requests that failed because
-<a href="../api_java/lock_vec.html#DB_LOCK_NOWAIT">Db.DB_LOCK_NOWAIT</a> was set.
-<dt>public int st_nconflicts;<dd>The total number of locks not immediately available due to conflicts.
-<dt>public int st_ndeadlocks;<dd>The number of deadlocks detected.
-<dt>public int st_regsize;<dd>The size of the region.
-<dt>public int st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>public int st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
-</dl>
-<p>The DbEnv.lock_stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.lock_stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.lock_stat method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/lock_class.html">DbLock</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lk_conflicts.html">DbEnv.set_lk_conflicts</a>,
-<a href="../api_java/env_set_lk_detect.html">DbEnv.set_lk_detect</a>,
-<a href="../api_java/env_set_lk_max_locks.html">DbEnv.set_lk_max_locks</a>,
-<a href="../api_java/env_set_lk_max_lockers.html">DbEnv.set_lk_max_lockers</a>,
-<a href="../api_java/env_set_lk_max_objects.html">DbEnv.set_lk_max_objects</a>,
-<a href="../api_java/env_set_lk_max.html">DbEnv.set_lk_max</a>,
-<a href="../api_java/lock_detect.html">DbEnv.lock_detect</a>,
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a>,
-<a href="../api_java/lock_id.html">DbEnv.lock_id</a>,
-<a href="../api_java/lock_put.html">DbLock.put</a>
-and
-<a href="../api_java/lock_stat.html">DbEnv.lock_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lock_vec.html b/db/docs/api_java/lock_vec.html
deleted file mode 100644
index 233e036a3..000000000
--- a/db/docs/api_java/lock_vec.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: lock_vec.so,v 10.31 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.lock_vec</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.lock_vec</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbEnv.lock_vec method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lockng_class.html b/db/docs/api_java/lockng_class.html
deleted file mode 100644
index ffa205800..000000000
--- a/db/docs/api_java/lockng_class.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!--Id: lockng_class.so,v 1.5 2002/07/29 04:27:14 mjc Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbLockNotGrantedException</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbLockNotGrantedException</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbLockNotGrantedException extends DbException {
- public int get_op();
- public int get_mode();
- public Dbt get_obj();
- public DbLock get_lock();
- public int get_index();
-}
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbLockNotGrantedException class and
-how it is used by the various Db* classes.
-<p>A DbLockNotGrantedException is thrown when a lock, requested
-using the <a href="../api_java/lock_get.html">DbEnv.lock_get</a> or <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> methods (where the
-<a href="../api_java/lock_vec.html#DB_LOCK_NOWAIT">Db.DB_LOCK_NOWAIT</a> option was specified), or by any Db
-operation performed in the context of a transaction begun using the
-<a href="../api_java/txn_begin.html#DB_TXN_NOWAIT">Db.DB_TXN_NOWAIT</a> option, is unable to be granted immediately.
-<p>The <b>get_op</b> method returns 0 when <a href="../api_java/lock_get.html">DbEnv.lock_get</a> was called,
-and returns the <b>op</b> for the failed DbLockRequest when
-<a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> was called.
-<p>The <b>get_mode</b> method returns the <b>mode</b> argument when
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a> was called, and returns the <b>mode</b> for the failed
-DbLockRequest when <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> was called.
-<p>The <b>get_obj</b> method returns the <b>obj</b> argument when
-<a href="../api_java/lock_get.html">DbEnv.lock_get</a> was called, and returns the <b>obj</b> for the failed
-DbLockRequest when <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> was called.
-<p>The <b>get_lock</b> method returns null when <a href="../api_java/lock_get.html">DbEnv.lock_get</a> was
-called, and returns the <b>lock</b> in the failed DbLockRequest
-when <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> was called.
-<p>The <b>get_index</b> method returns -1 when <a href="../api_java/lock_get.html">DbEnv.lock_get</a> was
-called, and returns the index of the failed DbLockRequest
-when <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> was called.
-<h1>Class</h1>
-<a href="../api_java/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_java/get_errno.html">DbException.get_errno</a>,
-<a href="../api_java/deadlock_class.html">DbDeadlockException</a>,
-<a href="../api_java/lockng_class.html">DbLockNotGrantedException</a>
-<a href="../api_java/mem_class.html">DbMemoryException</a>
-and
-<a href="../api_java/runrec_class.html">DbRunRecoveryException</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_archive.html b/db/docs/api_java/log_archive.html
deleted file mode 100644
index a84228658..000000000
--- a/db/docs/api_java/log_archive.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!--$Id: log_archive.so,v 10.26 2000/05/25 13:47:07 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_archive</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_archive</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public String[] log_archive(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_archive method
-returns an array of log or database file names.
-<p>By default, DbEnv.log_archive returns the names of all of the log files
-that are no longer in use (e.g., no longer involved in active transactions),
-and that may safely be archived for catastrophic recovery and then removed
-from the system. If there were no file names to return, the memory location
-referenced by <b>listp</b> will be set to null.
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more
-of the following values.
-<p><dl compact>
-<p><dt><a name="Db.DB_ARCH_ABS">Db.DB_ARCH_ABS</a><dd>All pathnames are returned as absolute pathnames,
-instead of relative to the database home directory.
-<p><dt><a name="Db.DB_ARCH_DATA">Db.DB_ARCH_DATA</a><dd>Return the database files that need to be archived in order to recover
-the database from catastrophic failure. If any of the database files
-have not been accessed during the lifetime of the current log files,
-DbEnv.log_archive will not include them in this list. It is also
-possible that some of the files referenced in the log have since been
-deleted from the system.
-<p><dt><a name="Db.DB_ARCH_LOG">Db.DB_ARCH_LOG</a><dd>Return all the log file names regardless of whether or not they are in
-use.
-</dl>
-<p>The Db.DB_ARCH_DATA and Db.DB_ARCH_LOG flags are mutually
-exclusive.
-<p>See the <a href="../utility/db_archive.html">db_archive</a> manual page for more information on database
-archival procedures.
-<p>The DbEnv.log_archive method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Bugs</h1>
-<p>In a threaded application (i.e., one where the environment was created
-with the DB_THREAD flag specified), calling DbEnv.log_archive with the
-DB_ARCH_DATA flag will fail, returning EINVAL. To work around this
-problem, re-open the log explicitly without specifying DB_THREAD. This
-restriction is expected to be removed in a future version of Berkeley DB.
-<h1>Errors</h1>
-<p>The DbEnv.log_archive method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The log was corrupted.
-</dl>
-<p>The DbEnv.log_archive method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_archive method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_compare.html b/db/docs/api_java/log_compare.html
deleted file mode 100644
index aba583203..000000000
--- a/db/docs/api_java/log_compare.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!--$Id: log_compare.so,v 10.12 1999/12/20 08:52:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_compare</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_compare</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public static int log_compare(DbLsn lsn0, DbLsn lsn1);
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_compare method allows the caller to compare two
-<a href="../api_java/lsn_class.html">DbLsn</a> objects,
-returning 0 if they are equal, 1 if <b>lsn0</b> is greater than
-<b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_cursor.html b/db/docs/api_java/log_cursor.html
deleted file mode 100644
index 566ee5cfd..000000000
--- a/db/docs/api_java/log_cursor.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--Id: log_cursor.so,v 10.5 2002/08/24 15:13:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_cursor</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.log_cursor</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbLogc log_cursor(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_cursor method
-creates a log cursor.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbEnv.log_cursor method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.log_cursor method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.log_cursor method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_cursor method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, <a href="../api_java/logc_class.html">DbLogc</a>, <a href="../api_java/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
-<a href="../api_java/log_list.html">Logging Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_file.html b/db/docs/api_java/log_file.html
deleted file mode 100644
index e85fa46df..000000000
--- a/db/docs/api_java/log_file.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--$Id: log_file.so,v 10.18 2000/03/01 21:41:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_file</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_file</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public String log_file(DbLsn lsn)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_file method maps
-<a href="../api_java/lsn_class.html">DbLsn</a> objects
-to file names,
-returning the name of the file containing the record named by <b>lsn</b>.
-<p>The <b>len</b> argument is the length of the <b>namep</b> buffer in bytes.
-If <b>namep</b> is too short to hold the file name, DbEnv.log_file will
-return ENOMEM.
-(Log file names are normally quite short, on the order of 10 characters.)
-<p>This mapping of
-<a href="../api_java/lsn_class.html">DbLsn</a> objects
-to files is needed for database administration. For example, a
-transaction manager typically records the earliest
-<a href="../api_java/lsn_class.html">DbLsn</a>
-needed for restart, and the database administrator may want to archive
-log files to tape when they contain only
-<a href="../api_java/lsn_class.html">DbLsn</a>
-entries before the earliest one needed for restart.
-<p>The DbEnv.log_file method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.log_file method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>ENOMEM<dd>The supplied buffer was too small to hold the log file name.
-</dl>
-<p>The DbEnv.log_file method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_file method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_flush.html b/db/docs/api_java/log_flush.html
deleted file mode 100644
index 4396d21f7..000000000
--- a/db/docs/api_java/log_flush.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--$Id: log_flush.so,v 10.18 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_flush</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_flush</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void log_flush(DbLsn lsn)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_flush method guarantees that all log records whose
-<a href="../api_java/lsn_class.html">DbLsn</a> values
-are less than or equal to the <b>lsn</b> argument have been
-written to disk. If <b>lsn</b> is null, all records in the
-log are flushed.
-<p>The DbEnv.log_flush method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.log_flush method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.log_flush method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_flush method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_list.html b/db/docs/api_java/log_list.html
deleted file mode 100644
index e16db8aa2..000000000
--- a/db/docs/api_java/log_list.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--Id: log_list.so,v 1.1 2002/08/30 20:00:56 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Logging Subsystem and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Logging Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/log_archive.html">DbEnv.log_archive</a></td><td>List log and database files</td></tr>
-<tr><td><a href="../api_java/log_cursor.html">DbEnv.log_cursor</a></td><td>Create a log cursor handle</td></tr>
-<tr><td><a href="../api_java/log_file.html">DbEnv.log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
-<tr><td><a href="../api_java/log_flush.html">DbEnv.log_flush</a></td><td>Flush log records</td></tr>
-<tr><td><a href="../api_java/log_put.html">DbEnv.log_put</a></td><td>Write a log record</td></tr>
-<tr><td><a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a></td><td>Set log buffer size</td></tr>
-<tr><td><a href="../api_java/env_set_lg_dir.html">DbEnv.set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
-<tr><td><a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a></td><td>Set log file size</td></tr>
-<tr><td><a href="../api_java/env_set_lg_regionmax.html">DbEnv.set_lg_regionmax</a></td><td>Set logging region size</td></tr>
-<tr><td><a href="../api_java/log_compare.html">DbEnv.log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
-<tr><td><a href="../api_java/log_stat.html">DbEnv.log_stat</a></td><td>Return log subsystem statistics</td></tr>
-<tr><td><a href="../api_java/logc_close.html">DbLogc.close</a></td><td>Close a log cursor</td></tr>
-<tr><td><a href="../api_java/logc_get.html">DbLogc.get</a></td><td>Retrieve a log record</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_put.html b/db/docs/api_java/log_put.html
deleted file mode 100644
index 03749f20d..000000000
--- a/db/docs/api_java/log_put.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--$Id: log_put.so,v 10.21 2000/03/17 01:53:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_put</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_put</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void log_put(DbLsn lsn, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_put method appends records to the log. The <a href="../api_java/lsn_class.html">DbLsn</a> of
-the put record is returned in the <b>lsn</b> argument. The <b>flags</b>
-argument may be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_CHECKPOINT">Db.DB_CHECKPOINT</a><dd>The log should write a checkpoint record, recording any information
-necessary to make the log structures recoverable after a crash.
-<p><dt><a name="Db.DB_CURLSN">Db.DB_CURLSN</a><dd>The <a href="../api_java/lsn_class.html">DbLsn</a> of the next record to be put is returned in the
-<b>lsn</b> argument.
-<p><dt><a name="Db.DB_FLUSH">Db.DB_FLUSH</a><dd>The log is forced to disk after this record is written, guaranteeing
-that all records with <a href="../api_java/lsn_class.html">DbLsn</a> values less than or equal to the
-one being put are on disk before this function returns (this function
-is most often used for a transaction commit, see <a href="../api_java/txn_commit.html">DbTxn.commit</a> for
-more information).
-<p>The caller is responsible for providing any necessary structure to
-<b>data</b>. (For example, in a write-ahead logging protocol, the
-application must understand what part of <b>data</b> is an operation
-code, what part is redo information, and what part is undo information.
-In addition, most transaction managers will store in <b>data</b> the
-<a href="../api_java/lsn_class.html">DbLsn</a> of the previous log record for the same transaction, to
-support chaining back through the transaction's log records during
-undo.)
-</dl>
-<p>The DbEnv.log_put method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The <a href="../api_java/log_flush.html">DbEnv.log_flush</a> method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The record to be logged is larger than the maximum log record.
-</dl>
-<p>The DbEnv.log_put method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_put method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/log_stat.html b/db/docs/api_java/log_stat.html
deleted file mode 100644
index 4c51f1095..000000000
--- a/db/docs/api_java/log_stat.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--$Id: log_stat.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.log_stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.log_stat</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbLogStat log_stat()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.log_stat method
-creates a DbLogStat object encapsulating a statistical structure.
-The log region statistics are stored in a DbLogStat object.
-The following data fields are available from the DbLogStat object:
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The log region statistics are stored in a structure of type DB_LOG_STAT.
-The following DB_LOG_STAT fields will be filled in:
-<p><dl compact>
-<dt>public int st_magic;<dd>The magic number that identifies a file as a log file.
-<dt>public int st_version;<dd>The version of the log file type.
-<dt>public int st_regsize;<dd>The size of the region.
-<dt>public int st_mode;<dd>The mode of any created log files.
-<dt>public int st_lg_bsize;<dd>The in-memory log record cache size.
-<dt>public int st_lg_max;<dd>The maximum size of any individual file comprising the log.
-<dt>public int st_w_mbytes;<dd>The number of megabytes written to this log.
-<dt>public int st_w_bytes;<dd>The number of bytes over and above <b>st_w_mbytes</b> written to this log.
-<dt>public int st_wc_mbytes;<dd>The number of megabytes written to this log since the last checkpoint.
-<dt>public int st_wc_bytes;<dd>The number of bytes over and above <b>st_wc_mbytes</b> written to this log
-since the last checkpoint.
-<dt>public int st_wcount;<dd>The number of times the log has been written to disk.
-<dt>public int st_wcount_fill;<dd>The number of times the log has been written to disk because the
-in-memory log record cache filled up.
-<dt>public int st_scount;<dd>The number of times the log has been flushed to disk.
-<dt>public int st_cur_file;<dd>The current log file number.
-<dt>public int st_cur_offset;<dd>The byte offset in the current log file.
-<dt>public int st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>public int st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
-</dl>
-<p>The DbEnv.log_stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.log_stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.log_stat method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_lg_bsize.html">DbEnv.set_lg_bsize</a>,
-<a href="../api_java/env_set_lg_max.html">DbEnv.set_lg_max</a>,
-<a href="../api_java/log_archive.html">DbEnv.log_archive</a>,
-<a href="../api_java/log_compare.html">DbEnv.log_compare</a>,
-<a href="../api_java/log_file.html">DbEnv.log_file</a>,
-<a href="../api_java/log_flush.html">DbEnv.log_flush</a>,
-<a href="../api_java/log_get.html">DbEnv.log_get</a>,
-<a href="../api_java/log_put.html">DbEnv.log_put</a>,
-<a href="../api_java/log_register.html">DbEnv.log_register</a>,
-<a href="../api_java/log_stat.html">DbEnv.log_stat</a>
-and
-<a href="../api_java/log_unregister.html">DbEnv.log_unregister</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/logc_class.html b/db/docs/api_java/logc_class.html
deleted file mode 100644
index 4ad402c70..000000000
--- a/db/docs/api_java/logc_class.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--Id: logc_class.so,v 1.5 2002/08/24 18:22:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbLogc</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbLogc</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbLogc extends Object { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>The DbLogc object is the handle for a cursor into the log files,
-supporting sequential access to the records stored in log files. The
-handle is not free-threaded. Once the <a href="../api_java/logc_close.html">DbLogc.close</a> method is called,
-the handle may not be accessed again, regardless of that method's
-return.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, DbLogc, <a href="../api_java/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
-<a href="../api_java/log_list.html">Logging Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/logc_close.html b/db/docs/api_java/logc_close.html
deleted file mode 100644
index 9d0ce47a6..000000000
--- a/db/docs/api_java/logc_close.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--Id: logc_close.so,v 10.6 2002/08/18 21:16:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbLogc.close</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbLogc.close</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void close(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbLogc.close method discards the log cursor. After DbLogc.close
-has been called, regardless of its return, the cursor handle may not be
-used again.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbLogc.close method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbLogc.close method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The cursor was previously closed.
-</dl>
-<p>The DbLogc.close method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLogc.close method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, <a href="../api_java/logc_class.html">DbLogc</a>, <a href="../api_java/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
-<a href="../api_java/log_list.html">Logging Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/logc_get.html b/db/docs/api_java/logc_get.html
deleted file mode 100644
index 8cd873f23..000000000
--- a/db/docs/api_java/logc_get.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--Id: logc_get.so,v 10.37 2002/08/18 21:16:44 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbLogc.get</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbLogc.get</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int get(DbLsn lsn, Dbt data, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbLogc.get method retrieve records from the log according to the
-<b>lsn</b> and <b>flags</b> arguments.
-<p>The data field of the <b>data</b> structure is set to the record
-retrieved, and the size field indicates the number of bytes in the
-record. See <a href="../api_java/dbt_class.html">Dbt</a> for a description of other fields in the
-<b>data</b> structure. The <a href="../api_java/dbt_class.html#DB_DBT_MALLOC">Db.DB_DBT_MALLOC</a>,
-<a href="../api_java/dbt_class.html#DB_DBT_REALLOC">Db.DB_DBT_REALLOC</a> and <a href="../api_java/dbt_class.html#DB_DBT_USERMEM">Db.DB_DBT_USERMEM</a> flags may be specified
-for any <a href="../api_java/dbt_class.html">Dbt</a> used for data retrieval.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_FIRST">Db.DB_FIRST</a><dd>The first record from any of the log files found in the log directory
-is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_java/lsn_class.html">DbLsn</a> of the
-record returned.
-<p>
-If the log is empty, the DbLogc.get method will return Db.DB_NOTFOUND.
-<p><dt><a name="Db.DB_LAST">Db.DB_LAST</a><dd>The last record in the log is returned in the <b>data</b> argument.
-The <b>lsn</b> argument is overwritten with the <a href="../api_java/lsn_class.html">DbLsn</a> of the
-record returned.
-<p>
-If the log is empty, the DbLogc.get method will return Db.DB_NOTFOUND.
-<p><dt><a name="Db.DB_NEXT">Db.DB_NEXT</a>, <a name="Db.DB_PREV">Db.DB_PREV</a><dd>The current log position is advanced to the next (previous) record in
-the log, and that record is returned in the <b>data</b> argument. The
-<b>lsn</b> argument is overwritten with the <a href="../api_java/lsn_class.html">DbLsn</a> of the record
-returned.
-<p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET,
-DB_NEXT, or DB_PREV, DbLogc.get will return the first (last) record
-in the log.
-If the last (first) log record has already been returned or the log is
-empty, the DbLogc.get method will return Db.DB_NOTFOUND.
-If the log was opened with the DB_THREAD flag set, calls to
-DbLogc.get with the DB_NEXT (DB_PREV) flag set, the DbLogc.get method throws an exception that encapsulates Db.EINVAL.
-<p><dt><a name="Db.DB_CURRENT">Db.DB_CURRENT</a><dd>Return the log record to which the log currently refers.
-If the log cursor has not been initialized via DB_FIRST, DB_LAST,
-DB_SET, DB_NEXT, or DB_PREV, or if the log was opened with the DB_THREAD
-flag set, the DbLogc.get method throws an exception that encapsulates Db.EINVAL.
-<p><dt><a name="Db.DB_SET">Db.DB_SET</a><dd>Retrieve the record specified by the <b>lsn</b> argument.
-If the specified <a href="../api_java/lsn_class.html">DbLsn</a> is invalid (for example, it does not
-appear in the log), the DbLogc.get method throws an exception that encapsulates Db.EINVAL.
-</dl>
-<p>
-Otherwise, the DbLogc.get method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbLogc.get method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The DB_CURRENT flag was set and the log pointer had not yet been
-initialized.
-<p>The DB_SET flag was set and the specified log sequence number does not
-exist.
-</dl>
-<p>The DbLogc.get method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbLogc.get method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, <a href="../api_java/logc_class.html">DbLogc</a>, <a href="../api_java/lsn_class.html">DbLsn</a>
-<h1>See Also</h1>
-<a href="../api_java/log_list.html">Logging Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/lsn_class.html b/db/docs/api_java/lsn_class.html
deleted file mode 100644
index 891ba8d0c..000000000
--- a/db/docs/api_java/lsn_class.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!--$Id: lsn_class.so,v 10.11 1999/12/20 08:52:33 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbLsn</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbLsn</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbLsn extends Object { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>A DbLsn is a <b>log sequence number</b> that is fully
-encapsulated. The class itself has no methods, other than a default
-constructor, so there is no way for the user to manipulate its data
-directly.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_class.html b/db/docs/api_java/memp_class.html
deleted file mode 100644
index 5f5dca239..000000000
--- a/db/docs/api_java/memp_class.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--Id: memp_class.so,v 10.14 2002/08/24 18:23:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbMemoryException</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbMemoryException</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbMemoryException extends DbException {
- public Dbt get_dbt();
-}
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbMemoryException class and how
-it is used by the various Db* classes.
-<p>A DbMemoryException is thrown when there is insufficient memory
-to complete an operation, and there is the possibility of recovering.
-An example is during a <a href="../api_java/db_get.html">Db.get</a> or <a href="../api_java/dbc_get.html">Dbc.get</a> operation with
-the <a href="../api_java/dbt_class.html">Dbt</a> flags set to <a href="../api_java/dbt_class.html#DB_DBT_USERMEM">Db.DB_DBT_USERMEM</a>.
-<p>In a Java Virtual Machine, there are usually separate heaps for memory
-allocated by native code and for objects allocated in Java code. If the
-Java heap is exhausted, the JVM will throw an OutOfMemoryError, so you
-may see that exception rather than DbMemoryException.
-<p>The <b>get_dbt</b> method returns the <a href="../api_java/dbt_class.html">Dbt</a> that has insufficient
-memory to complete the operation, causing the DbMemoryException
-to be thrown.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_fclose.html b/db/docs/api_java/memp_fclose.html
deleted file mode 100644
index 5cf196d40..000000000
--- a/db/docs/api_java/memp_fclose.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: memp_fclose.so,v 10.20 2000/06/13 13:55:49 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbMpoolFile.close</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbMpoolFile.close</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbMpoolFile.close method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_fopen.html b/db/docs/api_java/memp_fopen.html
deleted file mode 100644
index e1186d505..000000000
--- a/db/docs/api_java/memp_fopen.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: memp_fopen.so,v 10.28 2000/12/18 21:05:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbMpoolFile.open</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbMpoolFile.open</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbMpoolFile.open method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_fsync.html b/db/docs/api_java/memp_fsync.html
deleted file mode 100644
index b61063521..000000000
--- a/db/docs/api_java/memp_fsync.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: memp_fsync.so,v 10.22 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbMpoolFile.sync</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbMpoolFile.sync</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbMpoolFile.sync method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_list.html b/db/docs/api_java/memp_list.html
deleted file mode 100644
index b3fcef021..000000000
--- a/db/docs/api_java/memp_list.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--Id: memp_list.so,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Memory Pools and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Memory Pools and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/env_set_cachesize.html">DbEnv.set_cachesize</a></td><td>Set the environment cache size</td></tr>
-<tr><td><a href="../api_java/env_set_mp_mmapsize.html">DbEnv.set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
-<tr><td><a href="../api_java/memp_stat.html">DbEnv.memp_stat</a></td><td>Return memory pool statistics</td></tr>
-<tr><td><a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a></td><td>Return memory pool statistics</td></tr>
-<tr><td><a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_register.html b/db/docs/api_java/memp_register.html
deleted file mode 100644
index 147b45a20..000000000
--- a/db/docs/api_java/memp_register.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: memp_register.so,v 10.23 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.memp_register</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.memp_register</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbEnv.memp_register method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_stat.html b/db/docs/api_java/memp_stat.html
deleted file mode 100644
index 1314201a5..000000000
--- a/db/docs/api_java/memp_stat.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!--$Id: memp_stat.so,v 10.28 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.memp_stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.memp_stat</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbMpoolStat memp_stat()
- throws DbException;
-<p>
-public DbMpoolFStat[] memp_fstat()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.memp_stat and <a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a> method create statistical
-structures and return to the caller. The statistics include the number
-of files participating in the pool, the active pages in the pool, and
-information as to how effective the cache has been.
-<p>The DbEnv.memp_stat method creates a DbMpoolStat object containing global
-statistics. The following data fields are available:
-<p><dl compact>
-<dt>public long st_gbytes;<dd>Gigabytes of cache (total cache size is st_gbytes + st_bytes)
-<dt>public long st_bytes;<dd>Bytes of cache (total cache size is st_gbytes + st_bytes)
-<dt>public int st_ncache;<dd>Number of caches.
-<dt>public int st_regsize;<dd>Individual cache size.
-<dt>public int st_cache_hit;<dd>Requested pages found in the cache.
-<dt>public int st_cache_miss;<dd>Requested pages not found in the cache.
-<dt>public int st_map;<dd>Requested pages mapped into the process' address space (there is no
-available information as to whether or not this request caused disk I/O,
-although examining the application page fault rate may be helpful).
-<dt>public int st_page_create;<dd>Pages created in the cache.
-<dt>public int st_page_in;<dd>Pages read into the cache.
-<dt>public int st_page_out;<dd>Pages written from the cache to the backing file.
-<dt>public int st_ro_evict;<dd>Clean pages forced from the cache.
-<dt>public int st_rw_evict;<dd>Dirty pages forced from the cache.
-<dt>public int st_hash_buckets;<dd>Number of hash buckets in buffer hash table.
-<dt>public int st_hash_searches;<dd>Total number of buffer hash table lookups.
-<dt>public int st_hash_longest;<dd>The longest chain ever encountered in buffer hash table lookups.
-<dt>public int st_hash_examined;<dd>Total number of hash elements traversed during hash table lookups.
-<dt>public int st_page_clean;<dd>Clean pages currently in the cache.
-<dt>public int st_page_dirty;<dd>Dirty pages currently in the cache.
-<dt>public int st_page_trickle;<dd>Dirty pages written using the <a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a> interface.
-<dt>public int st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>public int st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
-</dl>
-<p>The <a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a> method creates an array of DbMpoolFStat objects
-containing statistics for individual files in the pool. Each
-DbMpoolFStat object contains statistics for an individual DbMpoolFile.
-The following data fields are available for each DbMpoolFStat object:
-<p><dl compact>
-<dt>public String file_name;<dd>The name of the file.
-<dt>public long st_pagesize;<dd>Page size in bytes.
-<dt>public int st_cache_hit;<dd>Requested pages found in the cache.
-<dt>public int st_cache_miss;<dd>Requested pages not found in the cache.
-<dt>public int st_map;<dd>Requested pages mapped into the process' address space.
-<dt>public int st_page_create;<dd>Pages created in the cache.
-<dt>public int st_page_in;<dd>Pages read into the cache.
-<dt>public int st_page_out;<dd>Pages written from the cache to the backing file.
-</dl>
-<p>The DbEnv.memp_stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.memp_stat method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.memp_stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.memp_stat method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a>,
-<a href="../api_java/memp_stat.html">DbEnv.memp_stat</a>
-and
-<a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_sync.html b/db/docs/api_java/memp_sync.html
deleted file mode 100644
index 6c729b8f5..000000000
--- a/db/docs/api_java/memp_sync.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--$Id: memp_sync.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.memp_sync</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.memp_sync</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-</pre></h3>
-<h1>Description</h1>
-<p>A DbEnv.memp_sync method is not available in the Berkeley DB
-Java API.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/memp_trickle.html b/db/docs/api_java/memp_trickle.html
deleted file mode 100644
index 0eeae97d5..000000000
--- a/db/docs/api_java/memp_trickle.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--$Id: memp_trickle.so,v 10.21 2000/03/01 21:41:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.memp_trickle</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.memp_trickle</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int memp_trickle(int pct)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.memp_trickle method ensures that at least <b>pct</b> percent of
-the pages in the shared memory pool are clean by writing dirty pages to
-their backing files.
-The number of pages that were written to reach the correct percentage is
-returned.
-<p>The purpose of the DbEnv.memp_trickle function is to enable a memory
-pool manager to ensure that a page is always available for reading in new
-information without having to wait for a write.
-<p>The DbEnv.memp_trickle method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.memp_trickle method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.memp_trickle method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.memp_trickle method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Class</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/memp_stat.html">DbEnv.memp_fstat</a>,
-<a href="../api_java/memp_stat.html">DbEnv.memp_stat</a>
-and
-<a href="../api_java/memp_trickle.html">DbEnv.memp_trickle</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/mempfile_class.html b/db/docs/api_java/mempfile_class.html
deleted file mode 100644
index 3c37148d6..000000000
--- a/db/docs/api_java/mempfile_class.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--Id: mempfile_class.so,v 10.18 2002/08/24 18:23:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbMpoolFile</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbMpoolFile</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-</pre></h3>
-<h1>Description</h1>
-<p>The DbMpoolFile class is not included in the Berkeley DB
-Java API.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/pindex.src b/db/docs/api_java/pindex.src
deleted file mode 100644
index 2dd85859d..000000000
--- a/db/docs/api_java/pindex.src
+++ /dev/null
@@ -1,249 +0,0 @@
-__APIREL__/api_java/db_class.html#2 @Db
-__APIREL__/api_java/db_class.html#Db.DB_XA_CREATE Db@Db.DB_XA_CREATE
-__APIREL__/api_java/dbc_class.html#2 @Dbc
-__APIREL__/api_java/dbenv_class.html#2 @DbEnv
-__APIREL__/api_java/dbenv_class.html#Db.DB_CLIENT DbEnv@Db.DB_CLIENT
-__APIREL__/api_java/dbt_class.html#2 @Dbt
-__APIREL__/api_java/dbt_class.html#3 @key/data pairs
-__APIREL__/api_java/dbt_class.html#data Dbt@data
-__APIREL__/api_java/dbt_class.html#Db.DB_DBT_MALLOC Dbt@Db.DB_DBT_MALLOC
-__APIREL__/api_java/dbt_class.html#Db.DB_DBT_REALLOC Dbt@Db.DB_DBT_REALLOC
-__APIREL__/api_java/dbt_class.html#Db.DB_DBT_USERMEM Dbt@Db.DB_DBT_USERMEM
-__APIREL__/api_java/dbt_class.html#Db.DB_DBT_PARTIAL Dbt@Db.DB_DBT_PARTIAL
-__APIREL__/api_java/dbt_class.html#4 logical @record number format
-__APIREL__/api_java/deadlock_class.html#2 @DbDeadlockException
-__APIREL__/api_java/env_set_error_stream.html#2 @DbEnv.set_error_stream
-__APIREL__/api_java/except_class.html#2 @DbException
-__APIREL__/api_java/get_errno.html#2 @DbException.get_errno
-__APIREL__/api_java/lock_class.html#2 @DbLock
-__APIREL__/api_java/lsn_class.html#2 @DbLsn
-__APIREL__/api_java/mem_class.html#2 @DbMemoryException
-__APIREL__/api_java/runrec_class.html#2 @DbRunRecoveryException
-__APIREL__/api_java/txn_class.html#2 @DbTxn
-__APIREL__/api_java/db_close.html#2 @Db.close
-__APIREL__/api_java/db_close.html#Db.DB_NOSYNC Db.close@Db.DB_NOSYNC
-__APIREL__/api_java/db_close.html#3 Db.close @DB_INCOMPLETE
-__APIREL__/api_java/db_cursor.html#2 @Db.cursor
-__APIREL__/api_java/db_cursor.html#Db.DB_WRITECURSOR Db.cursor@Db.DB_WRITECURSOR
-__APIREL__/api_java/db_del.html#2 @Db.del
-__APIREL__/api_java/db_fd.html#2 @Db.fd
-__APIREL__/api_java/db_get.html#2 @Db.get
-__APIREL__/api_java/db_get.html#Db.DB_CONSUME Db.get@Db.DB_CONSUME
-__APIREL__/api_java/db_get.html#Db.DB_CONSUME_WAIT Db.get@Db.DB_CONSUME_WAIT
-__APIREL__/api_java/db_get.html#Db.DB_GET_BOTH Db.get@Db.DB_GET_BOTH
-__APIREL__/api_java/db_get.html#Db.DB_SET_RECNO Db.get@Db.DB_SET_RECNO
-__APIREL__/api_java/db_get.html#Db.DB_RMW Db.get@Db.DB_RMW
-__APIREL__/api_java/db_get_byteswapped.html#2 @Db.get_byteswapped
-__APIREL__/api_java/db_get_type.html#2 @Db.get_type
-__APIREL__/api_java/db_join.html#2 @Db.join
-__APIREL__/api_java/db_join.html#Db.DB_JOIN_NOSORT Db.join@Db.DB_JOIN_NOSORT
-__APIREL__/api_java/db_join.html#Db.DB_JOIN_ITEM Db.join@Db.DB_JOIN_ITEM
-__APIREL__/api_java/db_join.html#Db.DB_RMW Db.join@Db.DB_RMW
-__APIREL__/api_java/db_key_range.html#2 @Db.key_range
-__APIREL__/api_java/db_open.html#2 @Db.open
-__APIREL__/api_java/db_open.html#Db.DB_CREATE Db.open@Db.DB_CREATE
-__APIREL__/api_java/db_open.html#Db.DB_EXCL Db.open@Db.DB_EXCL
-__APIREL__/api_java/db_open.html#Db.DB_NOMMAP Db.open@Db.DB_NOMMAP
-__APIREL__/api_java/db_open.html#Db.DB_RDONLY Db.open@Db.DB_RDONLY
-__APIREL__/api_java/db_open.html#Db.DB_THREAD Db.open@Db.DB_THREAD
-__APIREL__/api_java/db_open.html#Db.DB_TRUNCATE Db.open@Db.DB_TRUNCATE
-__APIREL__/api_java/db_open.html#Db.DB_OLD_VERSION Db.open@Db.DB_OLD_VERSION
-__APIREL__/api_java/db_put.html#2 @Db.put
-__APIREL__/api_java/db_put.html#Db.DB_APPEND Db.put@Db.DB_APPEND
-__APIREL__/api_java/db_put.html#Db.DB_NODUPDATA Db.put@Db.DB_NODUPDATA
-__APIREL__/api_java/db_put.html#Db.DB_NOOVERWRITE Db.put@Db.DB_NOOVERWRITE
-__APIREL__/api_java/db_remove.html#2 @Db.remove
-__APIREL__/api_java/db_rename.html#2 @Db.rename
-__APIREL__/api_java/db_set_append_recno.html#2 @Db.set_append_recno
-__APIREL__/api_java/db_set_bt_compare.html#2 @Db.set_bt_compare
-__APIREL__/api_java/db_set_bt_minkey.html#2 @Db.set_bt_minkey
-__APIREL__/api_java/db_set_bt_prefix.html#2 @Db.set_bt_prefix
-__APIREL__/api_java/db_set_cachesize.html#2 @Db.set_cachesize
-__APIREL__/api_java/db_set_dup_compare.html#2 @Db.set_dup_compare
-__APIREL__/api_java/db_set_errcall.html#2 @Db.set_errcall
-__APIREL__/api_java/db_set_errpfx.html#2 @Db.set_errpfx
-__APIREL__/api_java/db_set_feedback.html#2 @Db.set_feedback
-__APIREL__/api_java/db_set_feedback.html#Db.DB_UPGRADE Db.set_feedback@Db.DB_UPGRADE
-__APIREL__/api_java/db_set_feedback.html#Db.DB_VERIFY Db.set_feedback@Db.DB_VERIFY
-__APIREL__/api_java/db_set_flags.html#2 @Db.set_flags
-__APIREL__/api_java/db_set_flags.html#Db.DB_DUP Db.set_flags@Db.DB_DUP
-__APIREL__/api_java/db_set_flags.html#Db.DB_DUPSORT Db.set_flags@Db.DB_DUPSORT
-__APIREL__/api_java/db_set_flags.html#Db.DB_RECNUM Db.set_flags@Db.DB_RECNUM
-__APIREL__/api_java/db_set_flags.html#Db.DB_REVSPLITOFF Db.set_flags@Db.DB_REVSPLITOFF
-__APIREL__/api_java/db_set_flags.html#Db.DB_DUP Db.set_flags@Db.DB_DUP
-__APIREL__/api_java/db_set_flags.html#Db.DB_DUPSORT Db.set_flags@Db.DB_DUPSORT
-__APIREL__/api_java/db_set_flags.html#Db.DB_RENUMBER Db.set_flags@Db.DB_RENUMBER
-__APIREL__/api_java/db_set_flags.html#Db.DB_SNAPSHOT Db.set_flags@Db.DB_SNAPSHOT
-__APIREL__/api_java/db_set_h_ffactor.html#2 @Db.set_h_ffactor
-__APIREL__/api_java/db_set_h_hash.html#2 @Db.set_h_hash
-__APIREL__/api_java/db_set_h_nelem.html#2 @Db.set_h_nelem
-__APIREL__/api_java/db_set_lorder.html#2 @Db.set_lorder
-__APIREL__/api_java/db_set_pagesize.html#2 @Db.set_pagesize
-__APIREL__/api_java/db_set_q_extentsize.html#2 @Db.set_q_extentsize
-__APIREL__/api_java/db_set_re_delim.html#2 @Db.set_re_delim
-__APIREL__/api_java/db_set_re_len.html#2 @Db.set_re_len
-__APIREL__/api_java/db_set_re_pad.html#2 @Db.set_re_pad
-__APIREL__/api_java/db_set_re_source.html#2 @Db.set_re_source
-__APIREL__/api_java/db_stat.html#2 @Db.stat
-__APIREL__/api_java/db_stat.html#Db.DB_CACHED_COUNTS Db.stat@Db.DB_CACHED_COUNTS
-__APIREL__/api_java/db_stat.html#Db.DB_RECORDCOUNT Db.stat@Db.DB_RECORDCOUNT
-__APIREL__/api_java/db_sync.html#2 @Db.sync
-__APIREL__/api_java/db_upgrade.html#2 @Db.upgrade
-__APIREL__/api_java/db_upgrade.html#Db.DB_DUPSORT Db.upgrade@Db.DB_DUPSORT
-__APIREL__/api_java/db_upgrade.html#Db.DB_OLD_VERSION Db.upgrade@Db.DB_OLD_VERSION
-__APIREL__/api_java/db_verify.html#2 @Db.verify
-__APIREL__/api_java/db_verify.html#Db.DB_SALVAGE Db.verify@Db.DB_SALVAGE
-__APIREL__/api_java/db_verify.html#Db.DB_AGGRESSIVE Db.verify@Db.DB_AGGRESSIVE
-__APIREL__/api_java/db_verify.html#Db.DB_NOORDERCHK Db.verify@Db.DB_NOORDERCHK
-__APIREL__/api_java/db_verify.html#Db.DB_ORDERCHKONLY Db.verify@Db.DB_ORDERCHKONLY
-__APIREL__/api_java/dbc_close.html#2 @Dbc.close
-__APIREL__/api_java/dbc_count.html#2 @Dbc.count
-__APIREL__/api_java/dbc_del.html#2 @Dbc.del
-__APIREL__/api_java/dbc_dup.html#2 @Dbc.dup
-__APIREL__/api_java/dbc_dup.html#Db.DB_POSITION Dbc.dup@Db.DB_POSITION
-__APIREL__/api_java/dbc_get.html#2 @Dbc.get
-__APIREL__/api_java/dbc_get.html#Db.DB_CURRENT Dbc.get@Db.DB_CURRENT
-__APIREL__/api_java/dbc_get.html#Db.DB_FIRST Dbc.get@Db.DB_FIRST
-__APIREL__/api_java/dbc_get.html#Db.DB_LAST Dbc.get@Db.DB_LAST
-__APIREL__/api_java/dbc_get.html#Db.DB_GET_BOTH Dbc.get@Db.DB_GET_BOTH
-__APIREL__/api_java/dbc_get.html#Db.DB_GET_RECNO Dbc.get@Db.DB_GET_RECNO
-__APIREL__/api_java/dbc_get.html#Db.DB_JOIN_ITEM Dbc.get@Db.DB_JOIN_ITEM
-__APIREL__/api_java/dbc_get.html#Db.DB_NEXT Dbc.get@Db.DB_NEXT
-__APIREL__/api_java/dbc_get.html#Db.DB_PREV Dbc.get@Db.DB_PREV
-__APIREL__/api_java/dbc_get.html#Db.DB_NEXT_DUP Dbc.get@Db.DB_NEXT_DUP
-__APIREL__/api_java/dbc_get.html#Db.DB_NEXT_NODUP Dbc.get@Db.DB_NEXT_NODUP
-__APIREL__/api_java/dbc_get.html#Db.DB_PREV_NODUP Dbc.get@Db.DB_PREV_NODUP
-__APIREL__/api_java/dbc_get.html#Db.DB_SET Dbc.get@Db.DB_SET
-__APIREL__/api_java/dbc_get.html#Db.DB_SET_RANGE Dbc.get@Db.DB_SET_RANGE
-__APIREL__/api_java/dbc_get.html#Db.DB_SET_RECNO Dbc.get@Db.DB_SET_RECNO
-__APIREL__/api_java/dbc_get.html#Db.DB_RMW Dbc.get@Db.DB_RMW
-__APIREL__/api_java/dbc_put.html#2 @Dbc.put
-__APIREL__/api_java/dbc_put.html#Db.DB_AFTER Dbc.put@Db.DB_AFTER
-__APIREL__/api_java/dbc_put.html#Db.DB_BEFORE Dbc.put@Db.DB_BEFORE
-__APIREL__/api_java/dbc_put.html#Db.DB_CURRENT Dbc.put@Db.DB_CURRENT
-__APIREL__/api_java/dbc_put.html#Db.DB_KEYFIRST Dbc.put@Db.DB_KEYFIRST
-__APIREL__/api_java/dbc_put.html#Db.DB_KEYLAST Dbc.put@Db.DB_KEYLAST
-__APIREL__/api_java/dbc_put.html#Db.DB_NODUPDATA Dbc.put@Db.DB_NODUPDATA
-__APIREL__/api_java/env_close.html#2 @DbEnv.close
-__APIREL__/api_java/env_open.html#2 @DbEnv.open
-__APIREL__/api_java/env_open.html#Db.DB_JOINENV DbEnv.open@Db.DB_JOINENV
-__APIREL__/api_java/env_open.html#Db.DB_INIT_CDB DbEnv.open@Db.DB_INIT_CDB
-__APIREL__/api_java/env_open.html#Db.DB_INIT_LOCK DbEnv.open@Db.DB_INIT_LOCK
-__APIREL__/api_java/env_open.html#Db.DB_INIT_LOG DbEnv.open@Db.DB_INIT_LOG
-__APIREL__/api_java/env_open.html#Db.DB_INIT_MPOOL DbEnv.open@Db.DB_INIT_MPOOL
-__APIREL__/api_java/env_open.html#Db.DB_INIT_TXN DbEnv.open@Db.DB_INIT_TXN
-__APIREL__/api_java/env_open.html#Db.DB_RECOVER DbEnv.open@Db.DB_RECOVER
-__APIREL__/api_java/env_open.html#Db.DB_RECOVER_FATAL DbEnv.open@Db.DB_RECOVER_FATAL
-__APIREL__/api_java/env_open.html#Db.DB_USE_ENVIRON DbEnv.open@Db.DB_USE_ENVIRON
-__APIREL__/api_java/env_open.html#Db.DB_USE_ENVIRON_ROOT DbEnv.open@Db.DB_USE_ENVIRON_ROOT
-__APIREL__/api_java/env_open.html#Db.DB_CREATE DbEnv.open@Db.DB_CREATE
-__APIREL__/api_java/env_open.html#Db.DB_LOCKDOWN DbEnv.open@Db.DB_LOCKDOWN
-__APIREL__/api_java/env_open.html#Db.DB_PRIVATE DbEnv.open@Db.DB_PRIVATE
-__APIREL__/api_java/env_open.html#Db.DB_SYSTEM_MEM DbEnv.open@Db.DB_SYSTEM_MEM
-__APIREL__/api_java/env_open.html#Db.DB_THREAD DbEnv.open@Db.DB_THREAD
-__APIREL__/api_java/env_remove.html#2 @DbEnv.remove
-__APIREL__/api_java/env_remove.html#Db.DB_FORCE DbEnv.remove@Db.DB_FORCE
-__APIREL__/api_java/env_remove.html#Db.DB_USE_ENVIRON DbEnv.remove@Db.DB_USE_ENVIRON
-__APIREL__/api_java/env_remove.html#Db.DB_USE_ENVIRON_ROOT DbEnv.remove@Db.DB_USE_ENVIRON_ROOT
-__APIREL__/api_java/env_set_cachesize.html#2 @DbEnv.set_cachesize
-__APIREL__/api_java/env_set_data_dir.html#2 @DbEnv.set_data_dir
-__APIREL__/api_java/env_set_errcall.html#2 @DbEnv.set_errcall
-__APIREL__/api_java/env_set_errpfx.html#2 @DbEnv.set_errpfx
-__APIREL__/api_java/env_set_feedback.html#2 @DbEnv.set_feedback
-__APIREL__/api_java/env_set_feedback.html#Db.DB_RECOVER DbEnv.set_feedback@Db.DB_RECOVER
-__APIREL__/api_java/env_set_flags.html#2 @DbEnv.set_flags
-__APIREL__/api_java/env_set_flags.html#Db.DB_CDB_ALLDB DbEnv.set_flags@Db.DB_CDB_ALLDB
-__APIREL__/api_java/env_set_flags.html#Db.DB_NOMMAP DbEnv.set_flags@Db.DB_NOMMAP
-__APIREL__/api_java/env_set_flags.html#Db.DB_TXN_NOSYNC DbEnv.set_flags@Db.DB_TXN_NOSYNC
-__APIREL__/api_java/env_set_lg_bsize.html#2 @DbEnv.set_lg_bsize
-__APIREL__/api_java/env_set_lg_dir.html#2 @DbEnv.set_lg_dir
-__APIREL__/api_java/env_set_lg_max.html#2 @DbEnv.set_lg_max
-__APIREL__/api_java/env_set_lk_conflicts.html#2 @DbEnv.set_lk_conflicts
-__APIREL__/api_java/env_set_lk_detect.html#2 @DbEnv.set_lk_detect
-__APIREL__/api_java/env_set_lk_detect.html#DB_LOCK_DEFAULT DbEnv.set_lk_detect@DB_LOCK_DEFAULT
-__APIREL__/api_java/env_set_lk_detect.html#DB_LOCK_OLDEST DbEnv.set_lk_detect@DB_LOCK_OLDEST
-__APIREL__/api_java/env_set_lk_detect.html#DB_LOCK_RANDOM DbEnv.set_lk_detect@DB_LOCK_RANDOM
-__APIREL__/api_java/env_set_lk_detect.html#DB_LOCK_YOUNGEST DbEnv.set_lk_detect@DB_LOCK_YOUNGEST
-__APIREL__/api_java/env_set_lk_max.html#2 @DbEnv.set_lk_max
-__APIREL__/api_java/env_set_lk_max_locks.html#2 @DbEnv.set_lk_max_locks
-__APIREL__/api_java/env_set_lk_max_lockers.html#2 @DbEnv.set_lk_max_lockers
-__APIREL__/api_java/env_set_lk_max_objects.html#2 @DbEnv.set_lk_max_objects
-__APIREL__/api_java/env_set_mp_mmapsize.html#2 @DbEnv.set_mp_mmapsize
-__APIREL__/api_java/env_set_mutexlocks.html#2 @DbEnv.set_mutexlocks
-__APIREL__/api_java/env_set_pageyield.html#2 @DbEnv.set_pageyield
-__APIREL__/api_java/env_set_panicstate.html#2 @DbEnv.set_panicstate
-__APIREL__/api_java/env_set_rec_init.html#2 @DbEnv.set_recovery_init
-__APIREL__/api_java/env_set_region_init.html#2 @DbEnv.set_region_init
-__APIREL__/api_java/env_set_server.html#2 @DbEnv.set_server
-__APIREL__/api_java/env_set_server.html#DB_NOSERVER DbEnv.set_server@DB_NOSERVER
-__APIREL__/api_java/env_set_server.html#DB_NOSERVER_ID DbEnv.set_server@DB_NOSERVER_ID
-__APIREL__/api_java/env_set_shm_key.html#2 @DbEnv.set_shm_key
-__APIREL__/api_java/env_set_tas_spins.html#2 @DbEnv.set_tas_spins
-__APIREL__/api_java/env_set_tmp_dir.html#2 @DbEnv.set_tmp_dir
-__APIREL__/api_java/env_set_tx_max.html#2 @DbEnv.set_tx_max
-__APIREL__/api_java/env_set_tx_recover.html#2 @DbEnv.set_tx_recover
-__APIREL__/api_java/env_set_tx_recover.html#Db.DB_TXN_BACKWARD_ROLL DbEnv.set_tx_recover@Db.DB_TXN_BACKWARD_ROLL
-__APIREL__/api_java/env_set_tx_recover.html#Db.DB_TXN_FORWARD_ROLL DbEnv.set_tx_recover@Db.DB_TXN_FORWARD_ROLL
-__APIREL__/api_java/env_set_tx_recover.html#Db.DB_TXN_ABORT DbEnv.set_tx_recover@Db.DB_TXN_ABORT
-__APIREL__/api_java/env_set_tx_timestamp.html#2 @DbEnv.set_tx_timestamp
-__APIREL__/api_java/env_set_verbose.html#2 @DbEnv.set_verbose
-__APIREL__/api_java/env_set_verbose.html#Db.DB_VERB_CHKPOINT DbEnv.set_verbose@Db.DB_VERB_CHKPOINT
-__APIREL__/api_java/env_set_verbose.html#Db.DB_VERB_DEADLOCK DbEnv.set_verbose@Db.DB_VERB_DEADLOCK
-__APIREL__/api_java/env_set_verbose.html#Db.DB_VERB_RECOVERY DbEnv.set_verbose@Db.DB_VERB_RECOVERY
-__APIREL__/api_java/env_set_verbose.html#Db.DB_VERB_WAITSFOR DbEnv.set_verbose@Db.DB_VERB_WAITSFOR
-__APIREL__/api_java/env_strerror.html#2 @DbEnv.strerror
-__APIREL__/api_java/env_version.html#2 @DbEnv.get_version_major
-__APIREL__/api_java/lock_detect.html#2 @DbEnv.lock_detect
-__APIREL__/api_java/lock_detect.html#Db.DB_LOCK_CONFLICT DbEnv.lock_detect@Db.DB_LOCK_CONFLICT
-__APIREL__/api_java/lock_get.html#2 @DbEnv.lock_get
-__APIREL__/api_java/lock_get.html#Db.DB_LOCK_NOWAIT DbEnv.lock_get@Db.DB_LOCK_NOWAIT
-__APIREL__/api_java/lock_get.html#Db.DB_LOCK_NOTGRANTED DbEnv.lock_get@Db.DB_LOCK_NOTGRANTED
-__APIREL__/api_java/lock_id.html#2 @DbEnv.lock_id
-__APIREL__/api_java/lock_put.html#2 @DbLock.put
-__APIREL__/api_java/lock_stat.html#2 @DbEnv.lock_stat
-__APIREL__/api_java/lock_vec.html#2 @DbEnv.lock_vec
-__APIREL__/api_java/log_archive.html#2 @DbEnv.log_archive
-__APIREL__/api_java/log_archive.html#Db.DB_ARCH_ABS DbEnv.log_archive@Db.DB_ARCH_ABS
-__APIREL__/api_java/log_archive.html#Db.DB_ARCH_DATA DbEnv.log_archive@Db.DB_ARCH_DATA
-__APIREL__/api_java/log_archive.html#Db.DB_ARCH_LOG DbEnv.log_archive@Db.DB_ARCH_LOG
-__APIREL__/api_java/log_compare.html#2 @DbEnv.log_compare
-__APIREL__/api_java/log_file.html#2 @DbEnv.log_file
-__APIREL__/api_java/log_flush.html#2 @DbEnv.log_flush
-__APIREL__/api_java/log_get.html#2 @DbEnv.log_get
-__APIREL__/api_java/log_get.html#Db.DB_CHECKPOINT DbEnv.log_get@Db.DB_CHECKPOINT
-__APIREL__/api_java/log_get.html#Db.DB_FIRST DbEnv.log_get@Db.DB_FIRST
-__APIREL__/api_java/log_get.html#Db.DB_LAST DbEnv.log_get@Db.DB_LAST
-__APIREL__/api_java/log_get.html#Db.DB_NEXT DbEnv.log_get@Db.DB_NEXT
-__APIREL__/api_java/log_get.html#Db.DB_PREV DbEnv.log_get@Db.DB_PREV
-__APIREL__/api_java/log_get.html#Db.DB_CURRENT DbEnv.log_get@Db.DB_CURRENT
-__APIREL__/api_java/log_get.html#Db.DB_SET DbEnv.log_get@Db.DB_SET
-__APIREL__/api_java/log_put.html#2 @DbEnv.log_put
-__APIREL__/api_java/log_put.html#Db.DB_CHECKPOINT DbEnv.log_put@Db.DB_CHECKPOINT
-__APIREL__/api_java/log_put.html#Db.DB_CURLSN DbEnv.log_put@Db.DB_CURLSN
-__APIREL__/api_java/log_put.html#Db.DB_FLUSH DbEnv.log_put@Db.DB_FLUSH
-__APIREL__/api_java/log_register.html#2 @DbEnv.log_register
-__APIREL__/api_java/log_stat.html#2 @DbEnv.log_stat
-__APIREL__/api_java/log_unregister.html#2 @DbEnv.log_unregister
-__APIREL__/api_java/memp_fclose.html#2 @DbMpoolFile.close
-__APIREL__/api_java/memp_fget.html#2 @DbMpoolFile.get
-__APIREL__/api_java/memp_fopen.html#2 @DbMpoolFile.open
-__APIREL__/api_java/memp_fput.html#2 @DbMpoolFile.put
-__APIREL__/api_java/memp_fset.html#2 @DbMpoolFile.set
-__APIREL__/api_java/memp_fsync.html#2 @DbMpoolFile.sync
-__APIREL__/api_java/memp_register.html#2 @DbEnv.memp_register
-__APIREL__/api_java/memp_stat.html#2 @DbEnv.memp_stat
-__APIREL__/api_java/memp_sync.html#2 @DbEnv.memp_sync
-__APIREL__/api_java/memp_trickle.html#2 @DbEnv.memp_trickle
-__APIREL__/api_java/txn_abort.html#2 @DbTxn.abort
-__APIREL__/api_java/txn_begin.html#2 @DbEnv.txn_begin
-__APIREL__/api_java/txn_begin.html#Db.DB_TXN_NOSYNC DbEnv.txn_begin@Db.DB_TXN_NOSYNC
-__APIREL__/api_java/txn_begin.html#Db.DB_TXN_NOWAIT DbEnv.txn_begin@Db.DB_TXN_NOWAIT
-__APIREL__/api_java/txn_begin.html#Db.DB_TXN_SYNC DbEnv.txn_begin@Db.DB_TXN_SYNC
-__APIREL__/api_java/txn_checkpoint.html#2 @DbEnv.txn_checkpoint
-__APIREL__/api_java/txn_checkpoint.html#Db.DB_FORCE DbEnv.txn_checkpoint@Db.DB_FORCE
-__APIREL__/api_java/txn_commit.html#2 @DbTxn.commit
-__APIREL__/api_java/txn_commit.html#Db.DB_TXN_NOSYNC DbTxn.commit@Db.DB_TXN_NOSYNC
-__APIREL__/api_java/txn_commit.html#Db.DB_TXN_SYNC DbTxn.commit@Db.DB_TXN_SYNC
-__APIREL__/api_java/txn_id.html#2 @DbTxn.id
-__APIREL__/api_java/txn_prepare.html#2 @DbTxn.prepare
-__APIREL__/api_java/txn_stat.html#2 @DbEnv.txn_stat
diff --git a/db/docs/api_java/rep_elect.html b/db/docs/api_java/rep_elect.html
deleted file mode 100644
index 3b7d0f1f8..000000000
--- a/db/docs/api_java/rep_elect.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--Id: rep_elect.so,v 1.8 2002/08/29 03:25:54 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.rep_elect</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.rep_elect</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int rep_elect(int nsites, int pri, int timeout);
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.rep_elect method holds an election for the master of a replication
-group, returning the new master's ID in the <b>envid</b> parameter.
-<p>The <b>nsites</b> parameter indicates the number of environments that
-the application believes are in the replication group. This number is
-used by Berkeley DB to avoid having two masters active simultaneously, even
-in the case of a network partition. During an election, a new master
-cannot be elected unless more than half of <b>nsites</b> agree on
-the new master. Thus, in the face of a network partition, the side of
-the partition with more than half the environments will elect a new
-master and continue, while the environments communicating with fewer
-than half the other environments will fail to find a new master.
-<p>The <b>priority</b> parameter is the priority of this environment. It
-must be a positive integer, or 0 if this environment is not permitted
-to become a master (see <a href="../ref/rep/pri.html">Replication
-environment priorities</a> for more information).
-<a name="3"><!--meow--></a>
-<p>The <b>timeout</b> parameter specifies a timeout period for an
-election. If the election has not completed after <b>timeout</b>
-microseconds, the thread will return Db.DB_REP_UNAVAIL.
-<p>The DbEnv.rep_elect method either returns successfully, with the new
-master's environment ID in the memory pointed to by the <b>envid</b>
-parameter, or it will return Db.DB_REP_UNAVAIL if the participating
-group members were unable to elect a new master for any reason. In the
-event of a successful return, the new master's ID may be the ID of the
-previous master, or the ID of the current environment. The application
-is responsible for adjusting its usage of the other environments in the
-replication group, including directing all database updates to the newly
-selected master, in accordance with the results of this election.
-<p>The thread of control that calls the DbEnv.rep_elect method must not be the
-thread of control that processes incoming messages; processing the
-incoming messages is necessary to successfully complete an election.
-<p>The DbEnv.rep_elect method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.rep_elect method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>DB_REP_UNAVAIL<dd>The replication group was unable to elect a master.
-</dl>
-<p>The DbEnv.rep_elect method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.rep_elect method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/rep_list.html">Replication and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_limit.html b/db/docs/api_java/rep_limit.html
deleted file mode 100644
index 46136a7c7..000000000
--- a/db/docs/api_java/rep_limit.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--Id: rep_limit.so,v 1.2 2002/07/13 18:48:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_rep_limit</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_rep_limit</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbEnv
-{
- public int set_rep_limit(int gbytes, int bytes)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.set_rep_limit method imposes a limit on the amount of data that will
-be transmitted from a site during the course of a single call to
-<a href="../api_java/rep_message.html">DbEnv.rep_process_message</a> method.
-<p>The <b>gbytes</b> and <b>bytes</b> parameters together represent the
-maximum number of bytes that can be sent during a single call to
-<a href="../api_java/rep_message.html">DbEnv.rep_process_message</a> method.
-<p>The DbEnv.set_rep_limit method configures a database environment, not only operations
-performed using the specified <a href="../api_java/dbenv_class.html">DbEnv</a> handle.
-<p>The DbEnv.set_rep_limit interface may be called at any time during the life of
-the application.
-<p>The DbEnv.set_rep_limit method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_rep_limit method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_rep_limit method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_java/rep_start.html">DbEnv.rep_start</a>,
-<a href="../api_java/rep_elect.html">DbEnv.rep_elect</a>,
-<a href="../api_java/rep_message.html">DbEnv.rep_process_message</a>
-and
-<a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_list.html b/db/docs/api_java/rep_list.html
deleted file mode 100644
index c2dae3941..000000000
--- a/db/docs/api_java/rep_list.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--Id: rep_list.so,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Replication and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Replication and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Replication and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a></td><td>Configure replication transport</td></tr>
-<tr><td><a href="../api_java/rep_elect.html">DbEnv.rep_elect</a></td><td>Hold a replication election</td></tr>
-<tr><td><a href="../api_java/rep_limit.html">DbEnv.set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
-<tr><td><a href="../api_java/rep_message.html">DbEnv.rep_process_message</a></td><td>Process a replication message</td></tr>
-<tr><td><a href="../api_java/rep_start.html">DbEnv.rep_start</a></td><td>Configure an environment for replication</td></tr>
-<tr><td><a href="../api_java/rep_stat.html">DbEnv.rep_stat</a></td><td>Replication statistics</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_message.html b/db/docs/api_java/rep_message.html
deleted file mode 100644
index 343f96e51..000000000
--- a/db/docs/api_java/rep_message.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!--Id: rep_message.so,v 1.11 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.rep_process_message</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.rep_process_message</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public static class RepProcessMessage {
- public int envid;
-}
-public int rep_process_message(
- Dbt control, Dbt rec, DbEnv.RepProcessMessage envid)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.rep_process_message method processes an incoming replication
-message sent by a member of the replication group to the local database
-environment.
-<p>The <b>rec</b> and <b>control</b> parameters should reference a copy
-of the parameters specified by Berkeley DB for the <b>rec</b> and
-<b>control</b> parameters on the sending environment.
-<p>The <b>envid</b> parameter should contain the local identifier that
-corresponds to the environment that sent the message to be processed
-(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
-information).
-<p>For implementation reasons, all incoming replication messages must be
-processed using the same <a href="../api_java/env_class.html">DbEnv</a> handle. It is not required that
-a single thread of control process all messages, only that all threads
-of control processing messages use the same handle.
-<p>
-If a new master has been elected, the DbEnv.rep_process_message method will return Db.DB_REP_NEWMASTER.
-The <b>envid</b> parameter contains the environment ID of the new
-master. If the recipient of this error return has been made master, it
-is the application's responsibility to begin acting as the master
-environment.
-<p>
-If the system received contact information from a new environment, the DbEnv.rep_process_message method will return Db.DB_REP_NEWSITE.
-The <b>rec</b> parameter contains the opaque data specified in the
-<b>cdata</b> parameter to the <a href="../api_java/rep_start.html">DbEnv.rep_start</a>. The application
-should take whatever action is needed to establish a communication
-channel with this new environment.
-<p>
-If the replication group has more than one master, the DbEnv.rep_process_message method throws an exception that encapsulates Db.DB_REP_DUPMASTER.
-The application should reconfigure itself as a client by calling the
-<a href="../api_java/rep_start.html">DbEnv.rep_start</a> method, and then call for an election by calling
-<a href="../api_java/rep_elect.html">DbEnv.rep_elect</a>.
-<p>
-If an election is needed, the DbEnv.rep_process_message method throws an exception that encapsulates Db.DB_REP_HOLDELECTION.
-The application should call for an election by
-calling <a href="../api_java/rep_elect.html">DbEnv.rep_elect</a>.
-<p>
-If the current environment's logs are too far out of date with respect
-to the master to be automatically synchronized, the DbEnv.rep_process_message method throws an exception that encapsulates Db.DB_REP_OUTDATED. The
-application should copy over a hot backup of the environment, run
-recovery, and restart the client.
-<p>
-Otherwise, the DbEnv.rep_process_message method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.rep_process_message method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.rep_process_message method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/rep_list.html">Replication and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_start.html b/db/docs/api_java/rep_start.html
deleted file mode 100644
index 78c3e3f41..000000000
--- a/db/docs/api_java/rep_start.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--Id: rep_start.so,v 1.5 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.rep_start</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.rep_start</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void rep_start(Dbt cdata, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.rep_start method configures the database environment as a client
-or master in a group of replicated database environments. Replication
-master environments are the only database environments where replicated
-databases may be modified. Replication client environments are
-read-only as long as they are clients. Replication client environments
-may be upgraded to be replication master environments in the case that
-the current master fails or there is no master present.
-<p>The enclosing database environment must already have been opened by
-calling the <a href="../api_java/env_open.html">DbEnv.open</a> method and must already have been configured
-to send replication messages by calling the <a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a> method.
-<p>The <b>cdata</b> parameter is an opaque data item that is sent over
-the communication infrastructure when the client or master comes online
-(see <a href="../ref/rep/newsite.html">Connecting to a new site</a> for
-more information). If no such information is useful, <b>cdata</b>
-should be null.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_REP_CLIENT">Db.DB_REP_CLIENT</a><dd>Configure the environment as a replication client.
-<p><dt><a name="Db.DB_REP_LOGSONLY">Db.DB_REP_LOGSONLY</a><dd>Configure the environment as a log files-only client.
-<p><dt><a name="Db.DB_REP_MASTER">Db.DB_REP_MASTER</a><dd>Configure the environment as a replication master.
-</dl>
-<p>The DbEnv.rep_start method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.rep_start method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The environment was not already configured to communicate with a
-replication group by a call to <a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a>.
-<p>The environment was not already opened.
-</dl>
-<p>The DbEnv.rep_start method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.rep_start method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/rep_list.html">Replication and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_stat.html b/db/docs/api_java/rep_stat.html
deleted file mode 100644
index 47e64c25d..000000000
--- a/db/docs/api_java/rep_stat.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!--Id: rep_stat.so,v 10.7 2002/07/13 18:09:07 margo Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.rep_stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.rep_stat</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbRepStat rep_stat(int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.rep_stat method returns the replication subsystem statistics.
-<p>The <b>flags</b> value must be set to 0 or
-the following value:
-<p><dl compact>
-<p><dt><a name="Db.DB_STAT_CLEAR">Db.DB_STAT_CLEAR</a><dd>Reset statistics after returning their values.
-</dl>
-<p>The DbEnv.rep_stat method creates a DbRepStat object encapsulating the
-replication subsystem statistics. The following data fields are
-available from the DbRepStat object:
-<p><dl compact>
-<dt>public int st_stat;<dd>The current replication mode. Set to <a href="../api_java/rep_start.html#DB_REP_MASTER">Db.DB_REP_MASTER</a> if the
-environment is a replication master, <a href="../api_java/rep_start.html#DB_REP_CLIENT">Db.DB_REP_CLIENT</a> if the
-environment is a replication client, <a href="../api_java/rep_start.html#DB_REP_LOGSONLY">Db.DB_REP_LOGSONLY</a> if the
-environment is a log-files-only replica, or 0 if replication is not
-configured.
-<dt>public DbLsn st_next_lsn;<dd>In replication environments configured as masters, the next LSN expected.
-In replication environments configured as clients, the next LSN to be used.
-<dt>public DbLsn st_waiting_lsn;<dd>The LSN of the first missed log record being waited for, or 0 if no log
-records are currently missing.
-<dt>public int st_dupmasters;<dd>The number of duplicate master conditions detected.
-<dt>public int st_env_id;<dd>The current environment ID.
-<dt>public int st_env_priority;<dd>The current environment priority.
-<dt>public int st_gen;<dd>The current generation number.
-<dt>public int st_log_duplicated;<dd>The number of duplicate log records received.
-<dt>public int st_log_queued;<dd>The number of log records currently queued.
-<dt>public int st_log_queued_max;<dd>The maximum number of log records ever queued at once.
-<dt>public int st_log_queued_total;<dd>The total number of log records queued.
-<dt>public int st_log_records;<dd>The number of log records received and appended to the log.
-<dt>public int st_log_requested;<dd>The number of log records missed and requested.
-<dt>public int st_master;<dd>The current master environment ID.
-<dt>public int st_master_changes;<dd>The number of times the master has changed.
-<dt>public int st_msgs_badgen;<dd>The number of messages received with a bad generation number.
-<dt>public int st_msgs_processed;<dd>The number of messages received and processed.
-<dt>public int st_msgs_recover;<dd>The number of messages ignored due to pending recovery.
-<dt>public int st_msgs_send_failures;<dd>The number of failed message sends.
-<dt>public int st_msgs_sent;<dd>The number of messages sent.
-<dt>public int st_newsites;<dd>The number of new site messages received.
-<dt>public int st_outdated;<dd>The number of outdated conditions detected.
-<dt>public int st_txns_applied;<dd>The number of transactions applied.
-<dt>public int st_elections;<dd>The number of elections held.
-<dt>public int st_elections_won;<dd>The number of elections won.
-<dt>public int st_election_status;<dd>The current election phase (0 if no election is in progress).
-<dt>public int st_election_cur_winner;<dd>The election winner.
-<dt>public int st_election_gen;<dd>The election generation number.
-<dt>public DbLsn st_election_lsn;<dd>The maximum LSN of election winner.
-<dt>public int st_election_nsites;<dd>The number sites expected to participate in elections.
-<dt>public int st_nthrottles;<dd>Transmission limited. This indicates the number of times that data
-transmission was stopped to limit the amount of data sent in response
-to a single call to <a href="../api_java/rep_message.html">DbEnv.rep_process_message</a>.
-<dt>public int st_election_priority;<dd>The election priority.
-<dt>public int st_election_tiebreaker;<dd>The election tiebreaker value.
-<dt>public int st_election_votes;<dd>The votes received this election round.
-</dl>
-<p>The DbEnv.rep_stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.rep_stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.rep_stat method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>See Also</h1>
-<a href="../api_java/rep_start.html">DbEnv.rep_start</a>,
-<a href="../api_java/rep_elect.html">DbEnv.rep_elect</a>,
-<a href="../api_java/rep_message.html">DbEnv.rep_process_message</a>
-and
-<a href="../api_java/rep_transport.html">DbEnv.set_rep_transport</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/rep_transport.html b/db/docs/api_java/rep_transport.html
deleted file mode 100644
index 9bf357037..000000000
--- a/db/docs/api_java/rep_transport.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!--Id: rep_transport.so,v 1.9 2002/08/29 03:26:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.set_rep_transport</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.set_rep_transport</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public interface DbEnvSend
-{
- public abstract int db_send(DB_ENV *dbenv,
- const Dbt *control, const Dbt *rec, int envid, int flags);
-}
-public class DbEnv
-{
- public int set_rep_transport(DbEnvSend db_send)
- throws DbException;
- ...
-}
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.set_rep_transport method initializes the communication infrastructure
-for a database environment participating in a replicated application.
-<p>The <b>envid</b> parameter is the local environment's ID. It must be
-a positive integer and uniquely identify this Berkeley DB database environment
-(see <a href="../ref/rep/id.html">Replication environment IDs</a> for more
-information).
-<p>The <b>send</b> parameter is a callback interface used to transmit data
-using the replication application's communication infrastructure. The
-parameters to <b>send</b> are as follows:
-<p><dl compact>
-<p><dt>dbenv<dd>The enclosing database environment.
-<p><dt>control<dd>The control parameter is the first of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>rec<dd>The rec parameter is the second of the two data elements to be
-transmitted by the <b>send</b> interface.
-<p><dt>envid<dd>The <b>envid</b> parameter is a positive integer identifier that
-specifies the replication environment to which the message should be
-sent (see <a href="../ref/rep/id.html">Replication environment IDs</a> for
-more information).
-<p><a name="3"><!--meow--></a>
-The special identifier Db.DB_EID_BROADCAST indicates that a message
-should be broadcast to every environment in the replication group. The
-application may use a true broadcast protocol, or may send the message
-in sequence to each machine with which it is in communication.
-<p><dt>flags<dd>
-<p>The <b>flags</b> value must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or
-more of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_REP_PERMANENT">Db.DB_REP_PERMANENT</a><dd>The record being sent is critical for maintaining database integrity
-(for example, the message includes a transaction commit). The
-application should take appropriate action to enforce the reliability
-guarantees it has chosen, such as waiting for acknowledgement from one
-or more clients.
-</dl>
-</dl>
-<p>The <b>send</b> interface must return 0 on success and non-zero on
-failure. If the <b>send</b> interface fails, the message being sent
-is necessary to maintain database integrity, and the local log is not
-configured for synchronous flushing, the local log will be flushed;
-otherwise, any error from the <b>send</b> interface will be ignored.
-<p>It may sometimes be useful to pass application-specific data to the
-<b>send</b> interface; see <a href="../ref/env/faq.html">Environment
-FAQ</a> for a discussion on how to do this.
-<p>The DbEnv.set_rep_transport method configures operations performed using the specified
-<a href="../api_java/env_class.html">DbEnv</a> handle, not all operations performed on the underlying
-database environment.
-<p>The DbEnv.set_rep_transport interface may be called at any time during the life of
-the application.
-<p>The DbEnv.set_rep_transport method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.set_rep_transport method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.set_rep_transport method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>
-<h1>See Also</h1>
-<a href="../api_java/rep_list.html">Replication and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/runrec_class.html b/db/docs/api_java/runrec_class.html
deleted file mode 100644
index 31fd07b94..000000000
--- a/db/docs/api_java/runrec_class.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--$Id: runrec_class.so,v 10.7 2000/09/21 19:58:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbRunRecoveryException</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbRunRecoveryException</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbRunRecoveryException extends DbException { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the DbRunRecoveryException class and
-how it is used by the various Db* classes.
-<p>Errors can occur in the Berkeley DB library where the only solution is to shut
-down the application and run recovery. (For example, if Berkeley DB is unable
-to write log records to disk because there is insufficient disk space.)
-When a fatal error occurs in Berkeley DB, methods will throw a
-DbRunRecoveryException, at which point all subsequent database
-calls will also fail in the same way. When this occurs, recovery should
-be performed.
-<h3>Class</h3>
-<a href="../api_java/except_class.html">DbException</a>
-<h1>See Also</h1>
-<a href="../api_java/get_errno.html">DbException.get_errno</a>,
-<a href="../api_java/deadlock_class.html">DbDeadlockException</a>,
-<a href="../api_java/mem_class.html">DbMemoryException</a>
-and
-<a href="../api_java/runrec_class.html">DbRunRecoveryException</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_abort.html b/db/docs/api_java/txn_abort.html
deleted file mode 100644
index 48f4ddf07..000000000
--- a/db/docs/api_java/txn_abort.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--$Id: txn_abort.so,v 10.25 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.abort</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbTxn.abort</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void abort()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.abort method causes an abnormal termination of the
-transaction. The log is played backwards and any necessary recovery
-operations are initiated through the <b>recover</b> function specified
-to <a href="../api_java/env_open.html">DbEnv.open</a>. After the log processing is completed, all locks
-held by the transaction are released. As is the case for
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>, applications that require strict two-phase locking
-should not explicitly release any locks.
-<p>In the case of nested transactions, aborting a parent transaction causes
-all children (unresolved or not) of the parent transaction to be aborted.
-<p>Once the DbTxn.abort method returns, the <a href="../api_java/txn_class.html">DbTxn</a> handle may not
-be accessed again.
-<p>The DbTxn.abort method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbTxn.abort method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn.abort method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_begin.html b/db/docs/api_java/txn_begin.html
deleted file mode 100644
index f81e86aea..000000000
--- a/db/docs/api_java/txn_begin.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--$Id: txn_begin.so,v 10.37 2001/01/11 17:47:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.txn_begin</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.txn_begin</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbTxn txn_begin(DbTxn parent, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.txn_begin method creates a new transaction in the environment
-and returns a <a href="../api_java/txn_class.html">DbTxn</a> that uniquely identifies it.
-<p>If the <b>parent</b> argument is non-null, the new transaction will
-be a nested transaction, with the transaction indicated by
-<b>parent</b> as its parent. Transactions may be
-nested to any level.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log when this transaction commits or
-prepares. This means the transaction will exhibit the ACI (atomicity,
-consistency and isolation) properties, but not D (durability), i.e.,
-database integrity will be maintained but it is possible that this
-transaction may be undone during recovery instead of being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a> interface.
-<p><dt><a name="Db.DB_TXN_NOWAIT">Db.DB_TXN_NOWAIT</a><dd>If a lock is unavailable for any Berkeley DB operation performed in the context
-of this transaction, return immediately instead of blocking on the lock.
-The error return in the case will be <a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">Db.DB_LOCK_NOTGRANTED</a>.
-<p><dt><a name="Db.DB_TXN_SYNC">Db.DB_TXN_SYNC</a><dd>Synchronously flush the log when this transaction commits or prepares.
-This means the transaction will exhibit all of the ACID (atomicity,
-consistency and isolation and durability) properties.
-<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_java/env_open.html#DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>
-interface.
-</dl>
-<p><b>Note: An transaction may not span threads,
-i.e., each transaction must begin and end in the same thread, and each
-transaction may only be used by a single thread.</b>
-<p><b>Note: cursors may not span transactions, i.e., each cursor must be opened
-and closed within a single transaction.</b>
-<p><b>Note: a parent transaction may not issue any Berkeley DB operations, except for
-DbEnv.txn_begin, <a href="../api_java/txn_abort.html">DbTxn.abort</a> and <a href="../api_java/txn_commit.html">DbTxn.commit</a>, while it has
-active child transactions (child transactions that have not yet been
-committed or aborted).</b>
-<p>The DbEnv.txn_begin method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.txn_begin method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>ENOMEM<dd>The maximum number of concurrent transactions has been reached.
-</dl>
-<p>The DbEnv.txn_begin method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.txn_begin method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_checkpoint.html b/db/docs/api_java/txn_checkpoint.html
deleted file mode 100644
index f2bc7528a..000000000
--- a/db/docs/api_java/txn_checkpoint.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--$Id: txn_checkpoint.so,v 10.25 2000/09/08 15:20:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.txn_checkpoint</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.txn_checkpoint</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-int
-public int txn_checkpoint(int kbyte, int min, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.txn_checkpoint method flushes the underlying memory pool,
-writes a checkpoint record to the log and then flushes the log.
-<p>If either <b>kbyte</b> or <b>min</b> is non-zero, the checkpoint is only
-done if there has been activity since the last checkpoint and either
-more than <b>min</b> minutes have passed since the last checkpoint,
-or if more than <b>kbyte</b> kilobytes of log data have been written since
-the last checkpoint.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_FORCE">Db.DB_FORCE</a><dd>Force a checkpoint record even if there has been no activity since the
-last checkpoint.
-</dl>
-<p>The DbEnv.txn_checkpoint method throws an exception that encapsulates a non-zero error value on
-failure, and returns <a href="../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> if there were pages that needed to be
-written to complete the checkpoint but that <a href="../api_java/memp_sync.html">DbEnv.memp_sync</a> was unable
-to write immediately.
-<h1>Errors</h1>
-<p>The DbEnv.txn_checkpoint method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbEnv.txn_checkpoint method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.txn_checkpoint method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_class.html b/db/docs/api_java/txn_class.html
deleted file mode 100644
index ab386172b..000000000
--- a/db/docs/api_java/txn_class.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--$Id: txn_class.so,v 10.13 2000/12/04 18:05:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbTxn</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public class DbTxn extends Object { ... }
-</pre></h3>
-<h1>Description</h1>
-<p>This manual page describes the specific details of the DbTxn class.
-<p>The <a href="../api_java/dbenv_class.html">DbEnv</a> transaction methods and the DbTxn class provide
-transaction semantics. Full transaction support is provided by a
-collection of modules that provide interfaces to the services required
-for transaction processing. These services are recovery, concurrency
-control and the management of shared data.
-<p>Transaction semantics can be applied to the access methods described in
-Db through method call parameters.
-<p>The model intended for transactional use (and the one that is used by
-the access methods) is write-ahead logging to record both before- and
-after-images. Locking follows a two-phase protocol, with all locks being
-released at transaction commit.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_commit.html b/db/docs/api_java/txn_commit.html
deleted file mode 100644
index 53aa0df46..000000000
--- a/db/docs/api_java/txn_commit.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!--$Id: txn_commit.so,v 10.27 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.commit</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbTxn.commit</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void commit(u_int32_t flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.commit method ends the transaction. In the case of nested
-transactions, if the transaction is a parent transaction, committing
-the parent transaction causes all unresolved children of the parent to
-be committed.
-<p>In the case of nested transactions, if the transaction is a child
-transaction, its locks are not released, but are acquired by its parent.
-While the commit of the child transaction will succeed, the actual
-resolution of the child transaction is postponed until the parent
-transaction is committed or aborted, i.e., if its parent transaction
-commits, it will be committed, and if its parent transaction aborts, it
-will be aborted.
-<p>The <b>flags</b> parameter must be set to 0 or one of the following
-values:
-<p><dl compact>
-<p><dt><a name="Db.DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a><dd>Do not synchronously flush the log. This means the transaction will
-exhibit the ACI (atomicity, consistency and isolation) properties, but
-not D (durability), i.e., database integrity will be maintained but it is
-possible that this transaction may be undone during recovery instead of
-being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of the
-<a href="../api_java/env_set_flags.html">DbEnv.set_flags</a> interface.
-<p><dt><a name="Db.DB_TXN_SYNC">Db.DB_TXN_SYNC</a><dd>Synchronously flush the log. This means the transaction will exhibit
-all of the ACID (atomicity, consistency and isolation and durability)
-properties.
-<p>This behavior is the default for Berkeley DB environments unless the
-<a href="../api_java/env_open.html#DB_TXN_NOSYNC">Db.DB_TXN_NOSYNC</a> flag was specified to the <a href="../api_java/env_set_flags.html">DbEnv.set_flags</a>
-or <a href="../api_java/txn_begin.html">DbEnv.txn_begin</a> interfaces.
-</dl>
-<p>Once the DbTxn.commit method returns, the <a href="../api_java/txn_class.html">DbTxn</a> handle may not
-be accessed again. If DbTxn.commit encounters an error, the
-transaction and all child transactions of the transaction are aborted.
-<p>The DbTxn.commit method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbTxn.commit method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn.commit method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_discard.html b/db/docs/api_java/txn_discard.html
deleted file mode 100644
index 85dc1e53b..000000000
--- a/db/docs/api_java/txn_discard.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!--Id: txn_discard.so,v 10.2 2001/05/05 01:49:17 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.discard</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbTxn.discard</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void discard(u_int32_t flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.discard method frees up all the per-process resources
-associated with the specified <a href="../api_java/txn_class.html">DbTxn</a> handle, neither committing
-nor aborting the transaction. This call may be used only after calls
-to <a href="../api_java/txn_recover.html">DbEnv.txn_recover</a> when there are multiple global transaction
-managers recovering transactions in a single Berkeley DB environment. Any
-transactions returned by <a href="../api_java/txn_recover.html">DbEnv.txn_recover</a> that are not handled by
-the current global transaction manager should be discarded using
-DbTxn.discard.
-<p>The <b>flags</b> parameter is currently unused, and must be set to 0.
-<p>The DbTxn.discard method returns EINVAL if the transaction handle does
-not refer to a transaction that was recovered into a prepared but not
-yet completed state.
-<p>Otherwise, the DbTxn.discard method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbTxn.discard method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-<p>The transaction handle does not refer to a transaction that was
-recovered into a prepared but not yet completed state.
-</dl>
-<p>The DbTxn.discard method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn.discard method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_discard.html">DbTxn.discard</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>,
-<a href="../api_java/txn_recover.html">DbEnv.txn_recover</a>,
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_id.html b/db/docs/api_java/txn_id.html
deleted file mode 100644
index 89fc62a37..000000000
--- a/db/docs/api_java/txn_id.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--$Id: txn_id.so,v 10.12 1999/12/20 08:52:32 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.id</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbTxn.id</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public int id()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.id method returns the unique transaction id associated with the
-specified transaction. Locking calls made on behalf of this transaction
-should use the value returned from DbTxn.id as the locker parameter
-to the <a href="../api_java/lock_get.html">DbEnv.lock_get</a> or <a href="../api_java/lock_vec.html">DbEnv.lock_vec</a> calls.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_list.html b/db/docs/api_java/txn_list.html
deleted file mode 100644
index 13061844e..000000000
--- a/db/docs/api_java/txn_list.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--Id: txn_list.so,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: Berkeley DB: Transaction Subsystem and Related Methods</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<h1 align=center>Berkeley DB: Transaction Subsystem and Related Methods</h1>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp -->
-<p><table border=1 align=center>
-<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
-<tr><td><a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
-<tr><td><a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
-<tr><td><a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
-<tr><td><a href="../api_java/txn_recover.html">DbEnv.txn_recover</a></td><td>Distributed transaction recovery</td></tr>
-<tr><td><a href="../api_java/txn_stat.html">DbEnv.txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
-<tr><td><a href="../api_java/txn_begin.html">DbEnv.txn_begin</a></td><td>Begin a transaction</td></tr>
-<tr><td><a href="../api_java/txn_abort.html">DbTxn.abort</a></td><td>Abort a transaction</td></tr>
-<tr><td><a href="../api_java/txn_commit.html">DbTxn.commit</a></td><td>Commit a transaction</td></tr>
-<tr><td><a href="../api_java/txn_discard.html">DbTxn.discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
-<tr><td><a href="../api_java/txn_id.html">DbTxn.id</a></td><td>Return a transaction's ID</td></tr>
-<tr><td><a href="../api_java/txn_prepare.html">DbTxn.prepare</a></td><td>Prepare a transaction for commit</td></tr>
-<tr><td><a href="../api_java/txn_set_timeout.html">DbTxn.set_timeout</a></td><td>Set transaction timeout</td></tr>
-</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_prepare.html b/db/docs/api_java/txn_prepare.html
deleted file mode 100644
index 09feae726..000000000
--- a/db/docs/api_java/txn_prepare.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!--$Id: txn_prepare.so,v 10.17 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.prepare</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbTxn.prepare</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void prepare()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.prepare method initiates the beginning of a two-phase commit.
-<p>In a distributed transaction environment, Berkeley DB can be used as a local
-transaction manager. In this case, the distributed transaction manager
-must send <i>prepare</i> messages to each local manager. The local
-manager must then issue a DbTxn.prepare and await its successful
-return before responding to the distributed transaction manager. Only
-after the distributed transaction manager receives successful responses
-from all of its <i>prepare</i> messages should it issue any
-<i>commit</i> messages.
-<p>In the case of nested transactions, preparing a parent transaction
-causes all unresolved children of the parent transaction to be prepared.
-<p>The DbTxn.prepare method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbTxn.prepare method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn.prepare method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_recover.html b/db/docs/api_java/txn_recover.html
deleted file mode 100644
index 402e3c379..000000000
--- a/db/docs/api_java/txn_recover.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--Id: txn_recover.so,v 10.6 2001/05/04 14:31:05 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.txn_recover</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbEnv.txn_recover</h1>
-</td>
-<td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbPreplist[] txn_recover(int count, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.txn_recover interface returns a list of prepared but not
-yet resolved transactions. The DbEnv.txn_recover method should only be
-called after the environment has been recovered.
-<p>The DbEnv.txn_recover method returns a list of transactions that must be
-resolved by the application (committed, aborted or discarded). The
-return value is an array of objects of type DbPreplist; the following
-DbPreplist fields will be filled in:
-<p><dl compact>
-<p><dt>public DbTxn txn;<dd>The transaction handle for the transaction.
-<p><dt>public byte[] gid;<dd>The global transaction ID for the transaction. The global transaction
-ID is the one specified when the transaction was prepared. The
-application is responsible for ensuring uniqueness among global
-transaction IDs.
-</dl>
-<p>The application must call <a href="../api_java/txn_abort.html">DbTxn.abort</a>, <a href="../api_java/txn_commit.html">DbTxn.commit</a> or
-<a href="../api_java/txn_discard.html">DbTxn.discard</a> on each returned <a href="../api_java/txn_class.html">DbTxn</a> handle before
-starting any new operations.
-<p>The <b>count</b> parameter specifies the number of maximum size of the
-array that should be returned.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_FIRST">Db.DB_FIRST</a><dd>Begin returning a list of prepared, but not yet resolved transactions.
-<p><dt><a name="Db.DB_NEXT">Db.DB_NEXT</a><dd>Continue returning a list of prepared, but not yet resolved transactions,
-starting where the last call to DbEnv.txn_recover left off.
-</dl>
-<p>The DbEnv.txn_recover method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.txn_recover method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.txn_recover method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_discard.html">DbTxn.discard</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>,
-<a href="../api_java/txn_recover.html">DbEnv.txn_recover</a>,
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_set_timeout.html b/db/docs/api_java/txn_set_timeout.html
deleted file mode 100644
index 66de82d9d..000000000
--- a/db/docs/api_java/txn_set_timeout.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!--Id: txn_set_timeout.so,v 10.8 2002/08/29 03:26:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<!--See the file LICENSE for redistribution information.-->
-<html>
-<head>
-<title>Berkeley DB: DbTxn.set_timeout</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-<a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td>
-<h1>DbTxn.set_timeout</h1>
-</td>
-<td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public void set_timeout(long timeout, int flags)
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbTxn.set_timeout method sets timeout values for locks or
-transactions for the specified transaction. The timeout value is
-currently specified as an unsigned 32-bit number of microseconds,
-limiting the maximum timeout to roughly 71 minutes.
-<p>The <b>flags</b> value must be set to one of the following values:
-<p><dl compact>
-<p><dt><a name="Db.DB_SET_LOCK_TIMEOUT">Db.DB_SET_LOCK_TIMEOUT</a><dd>Set the timeout value for locks in this transaction.
-<p><dt><a name="Db.DB_SET_TXN_TIMEOUT">Db.DB_SET_TXN_TIMEOUT</a><dd>Set the timeout value for this transaction.
-</dl>
-<p>Timeouts are checked whenever a thread of control blocks on a lock or
-when deadlock detection is performed. (In the case of
-Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
-through the Lock subsystem interfaces. In the case of
-Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a
-transaction. In either case, it may be a lock requested by the database
-access methods underlying the application.) As timeouts are only
-checked when the lock request first blocks or when deadlock detection
-is performed, the accuracy of the timeout depends on how often deadlock
-detection is performed.
-<p>Timeout values may be specified for the database environment as a whole.
-See <a href="../api_java/env_set_timeout.html">DbEnv.set_timeout</a> and for more information.
-<p>The DbTxn.set_timeout method configures operations performed on the underlying
-transaction, not only operations performed using the specified
-<a href="../api_java/txn_class.html">DbTxn</a> handle.
-<p>The DbTxn.set_timeout interface may be called at any time during the life of
-the application.
-<p>The DbTxn.set_timeout method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbTxn.set_timeout method may fail and throw an exception encapsulating a non-zero error for the following conditions:
-<p><dl compact>
-<p><dt>EINVAL<dd>An invalid flag value or parameter was specified.
-</dl>
-<p>The DbTxn.set_timeout method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbTxn.set_timeout method may fail and
-throw a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>,
-in which case all subsequent Berkeley DB calls will fail in the same way.
-<h1>Class</h1>
-<a href="../api_java/env_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/txn_list.html">Transaction Subsystem and Related Methods</a>
-</tt>
-<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_java/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_java/txn_stat.html b/db/docs/api_java/txn_stat.html
deleted file mode 100644
index cb033ccde..000000000
--- a/db/docs/api_java/txn_stat.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--$Id: txn_stat.so,v 10.27 2000/05/25 13:47:08 dda Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB: DbEnv.txn_stat</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td>
-<h1>DbEnv.txn_stat</h1>
-</td>
-<td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<hr size=1 noshade>
-<tt>
-<h3><pre>
-import com.sleepycat.db.*;
-<p>
-public DbTxnStat txn_stat()
- throws DbException;
-</pre></h3>
-<h1>Description</h1>
-<p>The DbEnv.txn_stat method
-creates a DbTxnStat object encapsulating a statistical structure.
-The transaction region statistics are stored in a DbTxnStat object.
-The following data fields are available from the DbTxnStat object:
-<p>Statistical structures are created in allocated memory. If <b>db_malloc</b> is non-NULL, it
-is called to allocate the memory, otherwise, the library function
-<b>malloc</b>(3) is used. The function <b>db_malloc</b> must match
-the calling conventions of the <b>malloc</b>(3) library routine.
-Regardless, the caller is responsible for deallocating the returned
-memory. To deallocate returned memory, free the returned memory
-reference, references inside the returned memory do not need to be
-individually freed.
-<p>The transaction region statistics are stored in a structure of type
-DB_TXN_STAT. The following DB_TXN_STAT fields will be filled in:
-<p><dl compact>
-<dt>public <a href="../api_java/lsn_class.html">DbLsn</a> st_last_ckp;<dd>The LSN of the last checkpoint.
-<dt>public <a href="../api_java/lsn_class.html">DbLsn</a> st_pending_ckp;<dd>The LSN of any checkpoint that is currently in progress. If
-<b>st_pending_ckp</b> is the same as <b>st_last_ckp</b> there
-is no checkpoint in progress.
-<dt>public long st_time_ckp;<dd>The time the last completed checkpoint finished (as the number of seconds
-since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> interface).
-<dt>public int st_last_txnid;<dd>The last transaction ID allocated.
-<dt>public int st_maxtxns;<dd>The maximum number of active transactions possible.
-<dt>public int st_nactive;<dd>The number of transactions that are currently active.
-<dt>public int st_maxnactive;<dd>The maximum number of active transactions at any one time.
-<dt>public int st_nbegins;<dd>The number of transactions that have begun.
-<dt>public int st_naborts;<dd>The number of transactions that have aborted.
-<dt>public int st_ncommits;<dd>The number of transactions that have committed.
-<dt>public int st_regsize;<dd>The size of the region.
-<dt>public int st_region_wait;<dd>The number of times that a thread of control was forced to wait before
-obtaining the region lock.
-<dt>public int st_region_nowait;<dd>The number of times that a thread of control was able to obtain
-the region lock without waiting.
-<dt>public Active st_txnarray[];<dd>The array of active transactions. Each element of the array is an object
-of type DbTxnStat.Active, a top level inner class, that has the following
-fields:
-<p><dl compact>
-<p><dt>public int txnid;<dd>The Transaction ID.
-<dt>public DbLsn lsn;<dd>The Lsn of the begin record.
-</dl>
-</dl>
-<p>The DbEnv.txn_stat method throws an exception that encapsulates a non-zero error value on
-failure.
-<h1>Errors</h1>
-<p>The DbEnv.txn_stat method may fail and throw an exception for errors specified for other Berkeley DB and C library or system methods.
-If a catastrophic error has occurred, the DbEnv.txn_stat method may fail and throw
-a <a href="../api_java/runrec_class.html">DbRunRecoveryException</a>, in which case all subsequent Berkeley DB calls
-will fail in the same way.
-<h3>Classes</h3>
-<a href="../api_java/dbenv_class.html">DbEnv</a>, <a href="../api_java/txn_class.html">DbTxn</a>
-<h1>See Also</h1>
-<a href="../api_java/env_set_tx_max.html">DbEnv.set_tx_max</a>,
-<a href="../api_java/env_set_tx_timestamp.html">DbEnv.set_tx_timestamp</a>,
-<a href="../api_java/txn_abort.html">DbTxn.abort</a>,
-<a href="../api_java/txn_begin.html">DbEnv.txn_begin</a>,
-<a href="../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>,
-<a href="../api_java/txn_commit.html">DbTxn.commit</a>,
-<a href="../api_java/txn_id.html">DbTxn.id</a>,
-<a href="../api_java/txn_prepare.html">DbTxn.prepare</a>
-and
-<a href="../api_java/txn_stat.html">DbEnv.txn_stat</a>.
-</tt>
-<table><tr><td><br></td><td width="1%">
-<a href="../api_java/java_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/api_tcl/db_close.html b/db/docs/api_tcl/db_close.html
index eaae31655..37218fb33 100644
--- a/db/docs/api_tcl/db_close.html
+++ b/db/docs/api_tcl/db_close.html
@@ -1,59 +1,61 @@
-<!--$Id: db_close.so,v 11.10 1999/12/20 08:52:33 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_close.so,v 11.15 2002/08/18 21:17:23 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>close</b></h1>
+<h3><i>db</i> <b>close</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db close
[-nosync]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db close)</h3>
<p>The <i>db</i> <b>close</b> command flushes any cached database information to
disk, closes any open cursors, frees any allocated resources, and closes
-any underlying files. Since key/data pairs are cached in memory, failing
+any underlying files. Because key/data pairs are cached in memory, failing
to sync the file with the <i>db</i> <b>close</b> or <i>db</i> <b>sync</b> command may
-result in inconsistent or lost information.
-<p>The options are as follows:
+result in inconsistent or lost information.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-nosync<dd>Do not flush cached information to disk.
<p>The -nosync flag is a dangerous option. It should only be set if the
application is doing logging (with transactions) so that the database is
recoverable after a system or application crash, or if the database is
-always generated from scratch after any system or application crash.
+always generated from scratch after any system or application crash.</p>
<p>It is important to understand that flushing cached information to disk
-only minimizes the window of opportunity for corrupted data. While
+only minimizes the window of opportunity for corrupted data. Although
unlikely, it is possible for database corruption to happen if a system or
application crash occurs while writing data to the database. To ensure
-that database corruption never occurs, applications must either: use
+that database corruption never occurs, applications must either use
transactions and logging with automatic recovery, use logging and
-application-specific recovery, or edit a copy of the database, and, once
+application-specific recovery, or edit a copy of the database; and after
all applications using the database have successfully called
-<i>db</i> <b>close</b>, atomically replace the original database with the updated
-copy.
+<i>db</i> <b>close</b>, atomically replace the original database with the
+updated copy.</p>
</dl>
-<p>Once <i>db</i> <b>close</b> has been called, regardless of its return, the DB
-handle may not be accessed again.
+<p>After <i>db</i> <b>close</b> has been called, regardless of its return, the DB
+handle may not be accessed again.</p>
<p>The <i>db</i> <b>close</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_count.html b/db/docs/api_tcl/db_count.html
index 123c030cc..4224c7a49 100644
--- a/db/docs/api_tcl/db_count.html
+++ b/db/docs/api_tcl/db_count.html
@@ -1,38 +1,39 @@
-<!--$Id: db_count.so,v 11.1 2000/02/02 18:23:19 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_count.so,v 11.4 2002/08/18 21:17:24 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db count</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>count</b></h1>
+<h3><i>db</i> <b>count</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db count key
</pre></h3>
-<h1>Description</h1>
-<p>The <i>db</i> <b>count</b> command returns a count of the number
-of duplicate data items for the key given.
-If the key does not exist, a value of 0 is returned.
-If there are no duplicates, or the database does not support
-duplicates, but a key/data pair exists, a value of 1 is returned.
-If an error occurs, a Berkeley DB error message is returned or a Tcl error is
-thrown.
+<h3>Description(db count)</h3>
+<p>The <i>db</i> <b>count</b> command returns a count of the number of duplicate
+data items for the key given. If the key does not exist, a value of 0
+is returned. If there are no duplicates, or if the database does not
+support duplicates, but a key/data pair exists, a value of 1 is
+returned. If an error occurs, a Berkeley DB error message is returned or a
+Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_cursor.html b/db/docs/api_tcl/db_cursor.html
index 79187650d..bc96bcd55 100644
--- a/db/docs/api_tcl/db_cursor.html
+++ b/db/docs/api_tcl/db_cursor.html
@@ -1,42 +1,47 @@
-<!--$Id: db_cursor.so,v 11.10 1999/12/20 08:52:33 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_cursor.so,v 11.13 2002/08/18 21:17:25 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>cursor</b></h1>
+<h3><i>db</i> <b>cursor</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db cursor
[-txn txnid]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db cursor)</h3>
<p>The <i>db</i> <b>cursor</b> command creates a database cursor. The returned
-cursor handle is bound to a Tcl command of the form <b>dbN.cX</b>, where
-X is an integer starting at 0 (e.g., db0.c0 and db0.c1). It is through
-this Tcl command that the script accesses the cursor methods.
-<p>The options are as follows:
+cursor handle is bound to a Tcl command of the form <b>dbN.cX</b>,
+where X is an integer starting at 0 (for example, db0.c0 and db0.c1).
+It is through this Tcl command that the script accesses the cursor
+methods.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-txn txnid<dd>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction handle returned from <i>env</i> <b>txn</b>.
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
-<p>In the case of error, a Tcl error is thrown.
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_del.html b/db/docs/api_tcl/db_del.html
index b3340312a..3aacca5d3 100644
--- a/db/docs/api_tcl/db_del.html
+++ b/db/docs/api_tcl/db_del.html
@@ -1,47 +1,56 @@
-<!--$Id: db_del.so,v 11.10 2000/03/15 16:43:04 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_del.so,v 11.14 2002/08/18 21:17:25 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>del</b></h1>
+<h3><i>db</i> <b>del</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db del
+ [-auto_commit]
[-glob]
[-txn txnid]
key
</pre></h3>
-<h1>Description</h1>
-<p>The <i>db</i> <b>del</b> command removes key/data pairs from the database.
+<h3>Description(db del)</h3>
+<p>The <i>db</i> <b>del</b> command removes key/data pairs from the database.</p>
<p>In the presence of duplicate key values, all records associated with the
-designated key will be discarded.
-<p>The options are as follows:
+designated key will be discarded.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
+made by the operation will be recoverable. If the call fails, the
+operation will have made no changes.
<p><dt>-glob<dd>The specified key is a wildcard pattern, and all keys matching that
pattern are discarded from the database. The pattern is a simple
wildcard, any characters after the wildcard character are ignored.
-<p><dt>-txn txnid<dd>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction handle returned from <i>env</i> <b>txn</b>.
+This option only works on databases using the Btree access method.
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected (other than by specifying the -auto_commit flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
<p>The <i>db</i> <b>del</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_get.html b/db/docs/api_tcl/db_get.html
index 391f15652..8b5610c76 100644
--- a/db/docs/api_tcl/db_get.html
+++ b/db/docs/api_tcl/db_get.html
@@ -1,25 +1,28 @@
-<!--$Id: db_get.so,v 11.13 2000/11/28 20:12:30 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get.so,v 11.19 2002/11/14 21:07:39 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>get</b></h1>
+<h3><i>db</i> <b>get</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db get
+ [-auto_commit]
[-consume]
[-consume_wait]
[-glob]
@@ -35,15 +38,19 @@ db get
[-txn txnid]
key data
</pre></h3>
-<h1>Description</h1>
-<p>The <i>db</i> <b>get</b> command returns key/data pairs from the database.
+<h3>Description(db get)</h3>
+<p>The <i>db</i> <b>get</b> command returns key/data pairs from the database.</p>
<p>In the presence of duplicate key values, <i>db</i> <b>get</b> will return all
duplicate items. Duplicates are sorted by insert order except where this
-order has been overridden by cursor operations.
-<p>The options are as follows:
+order has been overridden by cursor operations.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
+made by the operation will be recoverable. If the call fails, the
+operation will have made no changes. This option may only be specified
+with the <b>-consume</b> or <b>-consume_wait</b> flags.
<p><dt>-consume<dd>Return the record number and data from the available record closest to
-the head of the queue and delete the record. The cursor will be
+the head of the queue, and delete the record. The cursor will be
positioned on the deleted record. A record is available if it is not
deleted and is not currently locked. The underlying database must be
of type Queue for <b>-consume</b> to be specified.
@@ -53,46 +60,49 @@ queue before returning. The underlying database must be of type Queue
for <b>-consume_wait</b> to be specified.
<p><dt>-get_both key data<dd>Retrieve the key/data pair only if both the key and data match the
arguments.
-<p><dt>-glob<dd>Return all keys matching the given key, where the key is a simple wildcard
-pattern. Where it is used, it replaces the use of the key with the given
-pattern of a set of keys. Any characters after the wildcard character
-are ignored. For example, in a database of last names, the
-command "db0 get Jones" will return all of the "Jones" in the database,
-and the command "db0 get -glob Jo*" will return both "Jones" and "Johnson"
-from the database. The command "db0 get -glob *" will return all of the
-key/data pairs in the database.
-<p><dt>-partial {doff dlen}<dd>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning of
-the retrieved data record are returned as if they comprised the entire
-record. If any or all of the specified bytes do not exist in the record,
-the command is successful and the existing bytes or 0 bytes are
-returned.
+<p><dt>-glob<dd>Return all keys matching the given key, where the key is a simple
+wildcard pattern. Where it is used, it replaces the use of the key with
+the given pattern of a set of keys. Any characters after the wildcard
+character are ignored. For example, in a database of last names, the
+command "db0 get Jones" will return all occurrences of "Jones" in the
+database, and the command "db0 get -glob Jo*" will return both "Jones"
+and "Johnson" from the database. The command "db0 get -glob *" will
+return all of the key/data pairs in the database.
+This option only works on databases using the Btree access method.
+<p><dt>-partial {doff dlen}<dd>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning
+of the retrieved data record are returned as if they comprised the
+entire record. If any or all of the specified bytes do not exist in the
+record, the command is successful and any existing bytes are returned.
<p><dt>-recno<dd>Retrieve the specified numbered key/data pair from a database. For
-<b>-recno</b> to be specified, the specified key must be a record number
-and the underlying database must be of type Recno or Queue, or of type
-Btree that was created with the <b>-recnum</b> option.
+<b>-recno</b> to be specified, the specified key must be a record
+number; and the underlying database must be of type Recno or Queue, or
+of type Btree that was created with the <b>-recnum</b> option.
<p><dt>-rmw<dd>Acquire write locks instead of read locks when doing the retrieval.
Setting this flag may decrease the likelihood of deadlock during a
read-modify-write cycle by immediately acquiring the write lock during
the read part of the cycle so that another thread of control acquiring a
read lock for the same item, in its own read-modify-write cycle, will not
result in deadlock.
-<p>As the <i>db</i> <b>get</b> command will not hold locks across Berkeley DB interface
-calls in non-transactional environments, the <b>-rmw</b> argument to the
-<i>db</i> <b>get</b> call is only meaningful in the presence of transactions.
-<p><dt>-txn txnid<dd>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction handle returned from <i>env</i> <b>txn</b>.
+<p>Because the <i>db</i> <b>get</b> command will not hold locks across Berkeley DB
+interface calls in nontransactional environments, the <b>-rmw</b>
+argument to the <i>db</i> <b>get</b> call is only meaningful in the presence
+of transactions.</p>
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
-<p>If the underlying database is a Queue or Recno database, then the given
-key will be interpreted by Tcl as an integer. For all other database
-types, the key is interpreted by Tcl as a byte array unless indicated
-by a given option.
+<p>If the underlying database is a Queue or Recno database, the given key
+will be interpreted by Tcl as an integer. For all other database types,
+the key is interpreted by Tcl as a byte array, unless indicated by a
+given option.</p>
<p>A list of key/data pairs is returned. In the error case that no matching
key exists, an empty list is returned. In all other cases, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_get_join.html b/db/docs/api_tcl/db_get_join.html
index e2ede7e47..3b8c04043 100644
--- a/db/docs/api_tcl/db_get_join.html
+++ b/db/docs/api_tcl/db_get_join.html
@@ -1,21 +1,23 @@
-<!--$Id: db_get_join.so,v 11.15 2000/12/04 18:05:39 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_join.so,v 11.18 2002/08/18 21:17:25 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db get_join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>get_join</b></h1>
+<h3><i>db</i> <b>get_join</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,21 +27,23 @@
{<i>db</i> key}
...
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db get_join)</h3>
<p>The <i>db</i> <b>get_join</b> command performs the cursor operations required to
join the specified keys and returns a list of joined {key data} pairs.
-See <a href="../ref/am/join.html">Logical join</a> for more information on
-the underlying requirements for joining.
-<p>The options are as follows:
+See <a href="../ref/am/join.html">Equality join</a> for more information on
+the underlying requirements for joining.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-txn txnid<dd>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction handle returned from <i>env</i> <b>txn</b>.
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected,
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
-<p>In the case of error, a Tcl error is thrown.
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_get_type.html b/db/docs/api_tcl/db_get_type.html
index 75fac1e78..fa01c3249 100644
--- a/db/docs/api_tcl/db_get_type.html
+++ b/db/docs/api_tcl/db_get_type.html
@@ -1,34 +1,36 @@
-<!--$Id: db_get_type.so,v 11.9 1999/12/20 08:52:34 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_get_type.so,v 11.11 2002/08/18 21:17:25 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db get_type</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>get_type</b></h1>
+<h3><i>db</i> <b>get_type</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db get_type
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db get_type)</h3>
<p>The <i>db</i> <b>get_type</b> command returns the underlying database type,
-returning one of "btree", "hash", "queue" or "recno".
-<p>In the case of error, a Tcl error is thrown.
+returning one of "btree", "hash", "queue" or "recno".</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_is_byteswapped.html b/db/docs/api_tcl/db_is_byteswapped.html
index 6a196eddf..d73927c51 100644
--- a/db/docs/api_tcl/db_is_byteswapped.html
+++ b/db/docs/api_tcl/db_is_byteswapped.html
@@ -1,37 +1,40 @@
-<!--$Id: db_is_byteswapped.so,v 11.10 1999/12/20 08:52:34 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_is_byteswapped.so,v 11.15 2003/10/13 19:57:26 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db is_byteswapped</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>is_byteswapped</b></h1>
+<h3><i>db</i> <b>is_byteswapped</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db is_byteswapped
</pre></h3>
-<h1>Description</h1>
-<p>The <i>db</i> <b>is_byteswapped</b> command returns 0 if the underlying database
-files were created on an architecture of the same byte order as the
-current one, and 1 if they were not (i.e., big-endian on a little-endian
-machine or vice-versa). This value may be used to determine if application
-data needs to be adjusted for this architecture or not.
-<p>In the case of error, a Tcl error is thrown.
+<h3>Description(db is_byteswapped)</h3>
+<p>The <i>db</i> <b>is_byteswapped</b> command returns 0 if the underlying
+database files were created on an architecture of the same byte order
+as the current one, and 1 if they were not (that is, big-endian on a
+little-endian machine, or vice versa). This information may be used to
+determine if application data needs to be adjusted for this architecture
+or not.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_join.html b/db/docs/api_tcl/db_join.html
index ba3f0a2e5..bd1e7bc6b 100644
--- a/db/docs/api_tcl/db_join.html
+++ b/db/docs/api_tcl/db_join.html
@@ -1,21 +1,23 @@
-<!--$Id: db_join.so,v 11.16 2000/12/04 18:05:39 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_join.so,v 11.22 2002/08/18 21:17:26 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>join</b></h1>
+<h3><i>db</i> <b>join</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,24 +27,24 @@
<i>db.cZ</i>
...
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db join)</h3>
<p>The <i>db</i> <b>join</b> command joins the specified cursors and returns a
cursor handle that can be used to iterate through the joined {key data}
pairs. The returned cursor handle is bound to a Tcl command of the form
-<b>dbN.cX</b>, where X is an integer starting at 0 (e.g., db0.c0 and
-db0.c1). It is through this Tcl command that the script accesses the
-cursor methods.
-<p>The returned join cursor has limited cursor functionality and only the
-<i>dbc</i> <b>get</b> and <i>dbc</i> <b>close</b> commands will succeed.
-<p>See <a href="../ref/am/join.html">Logical join</a> for more information on
-the underlying requirements for joining.
-<p>In a transaction protected environment, all of the cursors listed must
-have been created within the same transaction.
-<p>In the case of error, a Tcl error is thrown.
+<b>dbN.cX</b>, where X is an integer starting at 0 (for example,
+db0.c0 and db0.c1). It is through this Tcl command that the script
+accesses the cursor methods.</p>
+<p>The returned join cursor has limited cursor functionality, and only the
+<i>dbc</i> <b>get</b> and <i>dbc</i> <b>close</b> commands will succeed.</p>
+<p>See <a href="../ref/am/join.html">Equality join</a> for more information on
+the underlying requirements for joining.</p>
+<p>In a transaction-protected environment, all the cursors listed must have
+been created within the same transaction.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_open.html b/db/docs/api_tcl/db_open.html
index 4f7b651e5..3d273ab44 100644
--- a/db/docs/api_tcl/db_open.html
+++ b/db/docs/api_tcl/db_open.html
@@ -1,31 +1,37 @@
-<!--$Id: db_open.so,v 11.18 2000/11/27 18:14:47 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_open.so,v 11.33 2003/05/09 20:07:57 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb open</b></h1>
+<h3><b>berkdb open</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>berkdb open
+ [-auto_commit]
[-btree | -hash | -recno | -queue | -unknown]
[-cachesize {gbytes bytes ncache}]
[-create]
[-delim delim]
[-dup]
[-dupsort]
+ [-encrypt]
+ [-encryptaes passwd]
+ [-encryptany passwd]
[-env env]
[-errfile filename]
[-excl]
@@ -42,18 +48,21 @@
[-snapshot]
[-source file]
[-truncate]
- [-upgrade]
+ [-txn txnid]
[--]
[file [database]]
</pre></h3>
-<h1>Description</h1>
-<p>The <b>berkdb open</b> command opens, and optionally creates, a database.
+<h3>Description(berkdb open)</h3>
+<p>The <b>berkdb open</b> command opens and optionally creates a database.
The returned database handle is bound to a Tcl command of the form
-<b>dbN</b>, where N is an integer starting at 0 (e.g., db0 and db1).
-It is through this Tcl command that the script accesses the database
-methods.
-<p>The options are as follows:
+<b>dbN</b>, where N is an integer starting at 0 (for example, db0 and
+db1). It is through this Tcl command that the script accesses the
+database methods.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
+made by the operation will be recoverable. If the call fails, the
+operation will have made no changes.
<p><dt>-btree<dd>Open/create a database of type Btree. The Btree format
is a representation of a sorted, balanced tree structure.
<p><dt>-hash<dd>Open/create a database of type Hash. The Hash format is
@@ -65,161 +74,163 @@ logical record number.
supports fixed- or variable-length records, accessed sequentially or by
logical record number, and optionally retrieved from a flat text file.
<p><dt>-unknown<dd>The database is of an unknown type, and must already exist.
-<p><dt>-cachesize {gbytes bytes ncache}<dd>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<p><dt>-cachesize {gbytes bytes ncache}<dd>Set the size of the database's shared memory buffer pool (that is, the
+cache), to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache
+should be the size of the normal working data set of the application,
+with some small amount of additional memory for unusual situations.
+(Note: The working set is not the same as the number of simultaneously
+referenced pages, and should be quite a bit larger!)
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified.
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified.</p>
<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
+they cannot be allocated contiguously on some architectures; for example,
+some releases of Solaris limit the amount of memory that may be
+allocated contiguously by a process. If <b>ncache</b> is 0 or 1, the
+cache will be allocated contiguously in memory. If it is greater than
+1, the cache will be broken up into <b>ncache</b> equally sized
+separate pieces of memory.</p>
<p>For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
-<p>As databases opened within Berkeley DB environments use the cache specified to
-the environment, it is an error to attempt to set a cache in a database
-created within an environment.
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
+<p>Because databases opened within Berkeley DB environments use the cache
+specified to the environment, it is an error to attempt to set a cache
+in a database created within an environment.</p>
<p><dt>-create<dd>Create any underlying files, as necessary. If the files do not already
exist and the <b>-create</b> argument is not specified, the call will
fail.
<p><dt>-delim delim<dd>Set the delimiting byte used to mark the end of a record in the backing
source file for the Recno access method.
-<p>This byte is used for variable length records, if the <b>-source</b>
+<p>This byte is used for variable length records if the <b>-source</b>
argument file is specified. If the <b>-source</b> argument file is
specified and no delimiting byte was specified, &lt;newline&gt;
-characters (i.e. ASCII 0x0a) are interpreted as end-of-record markers.
-<p><dt>-dup<dd>Permit duplicate data items in the tree, i.e. insertion when the key of the
-key/data pair being inserted already exists in the tree will be successful.
-The ordering of duplicates in the tree is determined by the order of
-insertion, unless the ordering is otherwise specified by use of a cursor or
-a duplicate comparison function.
-<p>It is an error to specify both <b>-dup</b> and <b>-recnum</b>.
-<p><dt>-dupsort<dd>Sort duplicates within a set of data items. A default, lexical comparison
-will be used. Specifying that duplicates are to be sorted changes the
-behavior of the <i>db</i> <b>put</b> operation as well as the <i>dbc</i> <b>put</b>
-operation when the <b>-keyfirst</b>, <b>-keylast</b> and
-<b>-current</b> options are specified.
-<p><dt>-env env<dd>If no <b>-env</b> argument is given, the database is standalone, i.e.,
-it is not part of any Berkeley DB environment.
+characters (that is, ASCII 0x0a) are interpreted as end-of-record
+markers.</p>
+<p><dt>-dup<dd>Permit duplicate data items in the tree, that is, insertion when the
+key of the key/data pair being inserted already exists in the tree will
+be successful. The ordering of duplicates in the tree is determined by
+the order of insertion unless the ordering is otherwise specified by
+use of a cursor or a duplicate comparison function. <p>error to specify both <b>-dup</b> and <b>-recnum</b>.</p>
+<p><dt>-dupsort<dd>Sort duplicates within a set of data items. A default lexical
+comparison will be used. Specifying that duplicates are to be sorted
+changes the behavior of the <i>db</i> <b>put</b> operation as well as the
+<i>dbc</i> <b>put</b> operation when the <b>-keyfirst</b>, <b>-keylast</b>
+and <b>-current</b> options are specified.
+<p><dt>-encrypt<dd>Specify the database in an environment should be encrypted with the
+same password that is being used in the environment.
+<p><dt>-encryptaes passwd<dd>Specify the database should be encrypted with the given password
+using the Rijndael/AES (also known as the Advanced Encryption Standard
+and Federal Information Processing Standard (FIPS) 197) algorithm.
+<p><dt>-encryptany passwd<dd>Specify the already existing database should be opened
+with the given password. This option is used if the database is
+known to be encrypted, but the specific algorithm used is not known.
+<p><dt>-env env<dd>If no <b>-env</b> argument is given, the database is standalone; that
+is, it is not part of any Berkeley DB environment.
<p>If a <b>-env</b> argument is given, the database is created within the
specified Berkeley DB environment. The database access methods automatically
-make calls to the other subsystems in Berkeley DB based on the enclosing
+make calls to the other subsystems in Berkeley DB, based on the enclosing
environment. For example, if the environment has been configured to use
-locking, then the access methods will automatically acquire the correct
-locks when reading and writing pages of the database.
-<p><dt>-errfile filename<dd>
-<p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
+locking, the access methods will automatically acquire the correct locks
+when reading and writing pages of the database.</p>
+<p><dt>-errfile filename<dd><p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
return value is returned by the function. In some cases, however, the
errno value may be insufficient to completely describe the cause of the
-error especially during initial application debugging.
+error especially during initial application debugging.</p>
<p>The <b>-errfile</b> argument is used to enhance the mechanism for
reporting error messages to the application by specifying a file to be
used for displaying additional Berkeley DB error messages. In some cases, when
an error occurs, Berkeley DB will output an additional error message to the
-specified file reference.
+specified file reference.</p>
<p>The error message will consist of a Tcl command name and a colon (":"),
-an error string, and a trailing &lt;newline&gt; character. If the
-database was opened in an environment the Tcl command name will be the
-environment name (e.g., env0), otherwise it will be the database command
-name (e.g., db0).
-<p>This error logging enhancement does not slow performance or significantly
+an error string, and a trailing &lt;newline&gt; character. If
+the database was opened in an environment, the Tcl command name will be
+the environment name (for example, env0), otherwise it will be the
+database command name (for example, db0).</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
<p>For database handles opened inside of Berkeley DB environments, specifying the
<b>-errfile</b> argument affects the entire environment and is equivalent
-to specifying the same argument to the <b>berkdb env</b> command.
-<p><dt>-excl<dd>Return an error if the file already exists. Underlying filesystem
-primitives are used to implement this flag. For this reason it is only
-applicable to the physical database file and cannot be used to test if a
-database in a file already exists.
-<p><dt>-extent size<dd>Set the size of the extents of the Queue database, The size is specified
-as the number of pages in an extent.
-Each extent is created as a separate physical file. If no extent size
-is set, the default behavior is to create only
-a single underlying database file.
+to specifying the same argument to the <b>berkdb env</b> command.</p>
+<p><dt>-excl<dd>Return an error if the database already exists.
+<p><dt>-extent size<dd>Set the size of the extents of the Queue database; the size is specified
+as the number of pages in an extent. Each extent is created as a
+separate physical file. If no extent size is set, the default behavior
+is to create only a single underlying database file.
<p>For information on tuning the extent size, see
-<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.
+<a href="../ref/am_conf/extentsize.html">Selecting a extent size</a>.</p>
<p><dt>-ffactor density<dd>Set the desired density within the hash table.
<p>The density is an approximation of the number of keys allowed to
accumulate in any one bucket
<p><dt>-len len<dd>For the Queue access method, specify that the records are of length
<b>len</b>.
<p>For the Recno access method, specify that the records are fixed-length,
-not byte delimited, and are of length <b>len</b>.
+not byte-delimited, and are of length <b>len</b>.</p>
<p>Any records added to the database that are less than <b>len</b> bytes
long are automatically padded (see the <b>-pad</b> argument for more
-information).
+information).</p>
<p>Any attempt to insert records into the database that are greater than
<b>len</b> bytes long will cause the call to fail immediately and return
-an error.
-<p><dt>-mode mode<dd>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the access methods
+an error.</p>
+<p><dt>-mode mode<dd><p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the access methods
are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
modified by the process' umask value at the time of creation (see
<b>umask</b>(2)). The group ownership of created files is based on
the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
+If <b>mode</b> is 0, files are created readable and writable by both
+owner and group. On Windows systems, the mode argument is ignored.</p>
<p><dt>-nelem size<dd>Set an estimate of the final size of the hash table.
<p>If not set or set too low, hash tables will still expand gracefully as
keys are entered, although a slight performance degradation may be
-noticed.
+noticed.</p>
<p><dt>-pad pad<dd>Set the padding character for short, fixed-length records for the Queue
and Recno access methods.
-<p>If no pad character is specified, &lt;space&gt; characters (i.e.,
-ASCII 0x20) are used for padding.
+<p>If no pad character is specified, &lt;space&gt; characters (that is,
+ASCII 0x20) are used for padding.</p>
<p><dt>-pagesize pagesize<dd>Set the size of the pages used to hold items in the database, in bytes.
-The minimum page size is 512 bytes and the maximum page size is 64K bytes.
-If the page size is not explicitly set, one is selected based on the
-underlying filesystem I/O block size. The automatically selected size
-has a lower limit of 512 bytes and an upper limit of 16K bytes.
+The minimum page size is 512 bytes, and the maximum page size is 64K
+bytes. If the page size is not explicitly set, one is selected based
+on the underlying filesystem I/O block size. The automatically selected
+size has a lower limit of 512 bytes and an upper limit of 16K bytes.
<p>For information on tuning the Berkeley DB page size, see
-<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.
+<a href="../ref/am_conf/pagesize.html">Selecting a page size</a>.</p>
<p><dt>-rdonly<dd>Open the database for reading only. Any attempt to modify items in the
-database will fail regardless of the actual permissions of any underlying
-files.
+database will fail, regardless of the actual permissions of any
+underlying files.
<p><dt>-recnum<dd>Support retrieval from the Btree using record numbers.
<p>Logical record numbers in Btree databases are mutable in the face of
record insertion or deletion. See the <b>-renumber</b> argument for
-further discussion.
+further discussion.</p>
<p>Maintaining record counts within a Btree introduces a serious point of
contention, namely the page locations where the record counts are stored. In
addition, the entire tree must be locked during both insertions and
deletions, effectively single-threading the tree for those operations.
Specifying <b>-recnum</b> can result in serious performance degradation
-for some applications and data sets.
-<p>It is an error to specify both <b>-dup</b> and <b>-recnum</b>.
+for some applications and data sets.</p>
+<p>It is an error to specify both <b>-dup</b> and <b>-recnum</b>.</p>
<p><dt>-renumber<dd>Specifying the <b>-renumber</b> argument causes the logical record
numbers to be mutable, and change as records are added to and deleted from
the database. For example, the deletion of record number 4 causes records
-numbered 5 and greater to be renumbered downward by 1. If a cursor was
-positioned to record number 4 before the deletion, it will reference the
+numbered 5 and greater to be renumbered downward by one. If a cursor was
+positioned to record number 4 before the deletion, it will refer to the
new record number 4, if any such record exists, after the deletion. If a
cursor was positioned after record number 4 before the deletion, it will
-be shifted downward 1 logical record, continuing to reference the same
+be shifted downward one logical record, continuing to refer to the same
record as it did before.
<p>Using the <i>db</i> <b>put</b> or <i>dbc</i> <b>put</b> interfaces to create new records will
cause the creation of multiple records if the record number is more than one
greater than the largest record currently in the database. For example,
-creating record 28, when record 25 was previously the last record in the
-database, will create records 26 and 27 as well as 28.
+creating record 28 when record 25 was previously the last record in the
+database, will create records 26 and 27 as well as 28.</p>
<p>If a created record is not at the end of the database, all records following
-the new record will be automatically renumbered upward by 1. For example,
+the new record will be automatically renumbered upward by one. For example,
the creation of a new record numbered 8 causes records numbered 8 and
-greater to be renumbered upward by 1. If a cursor was positioned to record
-number 8 or greater before the insertion, it will be shifted upward 1
-logical record, continuing to reference the same record as it did before.
+greater to be renumbered upward by one. If a cursor was positioned to record
+number 8 or greater before the insertion, it will be shifted upward one
+logical record, continuing to refer to the same record as it did before.</p>
<p>For these reasons, concurrent access to a Recno database with the
<b>-renumber</b> flag specified may be largely meaningless, although it
-is supported.
+is supported.</p>
<p><dt>-snapshot<dd>This argument specifies that any specified <b>-source</b> file be read
in its entirety when the database is opened. If this argument is not
specified, the <b>-source</b> file may be read lazily.
@@ -231,54 +242,53 @@ text database file that is read to initialize a transient record number
index. In the case of variable length records, the records are separated
as specified by <b>-delim</b>. For example, standard UNIX byte stream
files can be interpreted as a sequence of variable length records
-separated by &lt;newline&gt; characters.
+separated by &lt;newline&gt; characters.</p>
<p>In addition, when cached data would normally be written back to the
-underlying database file (e.g., the <i>db</i> <b>close</b> or <i>db</i> <b>sync</b>
-commands are called), the in-memory copy of the database will be written
-back to the <b>-source</b> file.
-<p>By default, the backing source file is read lazily, i.e., records are not
-read from the file until they are requested by the application.
+underlying database file (for example, when the <i>db</i> <b>close</b> or
+<i>db</i> <b>sync</b> commands are called), the in-memory copy of the database
+will be written back to the <b>-source</b> file.</p>
+<p>By default, the backing source file is read lazily, that is, records
+are not read from the file until they are requested by the application.
<b>If multiple processes (not threads) are accessing a Recno database
concurrently and either inserting or deleting records, the backing source
file must be read in its entirety before more than a single process
accesses the database, and only that process should specify the backing
source argument as part of the <b>berkdb open</b> call. See the <b>-snapshot</b>
-argument for more information.</b>
+argument for more information.</b></p>
<p><b>Reading and writing the backing source file specified by <b>-source</b>
-cannot be transactionally protected because it involves filesystem
+cannot be transaction protected because it involves filesystem
operations that are not part of the Berkeley DB transaction methodology.</b>
For this reason, if a temporary database is used to hold the records,
-i.e., no <b>file</b> argument was specified to the <b>berkdb open</b> call,
-it is possible to lose the contents of the <b>-file</b> file, e.g., if
-the system crashes at the right instant. If a file is used to hold the
-database, i.e., a file name was specified as the <b>file</b> argument
-to <b>berkdb open</b>, normal database recovery on that file can be used to
-prevent information loss, although it is still possible that the contents
-of <b>-source</b> will be lost if the system crashes.
+it is possible to lose the contents of the <b>-file</b> file, for
+example, if the system crashes at the right instant. If a file is used
+to hold the database, that is, a filename was specified as the
+<b>file</b> argument to <b>berkdb open</b>, normal database recovery on
+that file can be used to prevent information loss, although it is still
+possible that the contents of <b>-source</b> will be lost if the system
+crashes.</p>
<p>The <b>-source</b> file must already exist (but may be zero-length) when
-<b>berkdb open</b> is called.
+<b>berkdb open</b> is called.</p>
<p>It is not an error to specify a read-only <b>-source</b> file when
creating a database, nor is it an error to modify the resulting database.
However, any attempt to write the changes to the backing source file using
either the <i>db</i> <b>close</b> or <i>db</i> <b>sync</b> commands will fail, of course.
Specify the <b>-nosync</b> argument to the <i>db</i> <b>close</b> command will
-stop it from attempting to write the changes to the backing file, instead,
-they will be silently discarded.
-<p>For all of the above reasons, the <b>-source</b> file is generally used
-to specify databases that are read-only for Berkeley DB applications, and that
-are either generated on the fly by software tools, or modified using a
-different mechanism, e.g., a text editor.
+stop it from attempting to write the changes to the backing file; instead,
+they will be silently discarded.</p>
+<p>For all of the previous reasons, the <b>-source</b> file is generally
+used to specify databases that are read-only for Berkeley DB applications,
+and that are either generated on the fly by software tools, or modified
+using a different mechanism such as a text editor.</p>
<p><dt>-truncate<dd>Physically truncate the underlying file, discarding all previous databases
it might have held. Underlying filesystem primitives are used to
-implement this flag. For this reason it is only applicable to the
+implement this flag. For this reason, it is only applicable to the
physical file and cannot be used to discard databases within a file.
-<p>The <b>-truncate</b> argument cannot be transaction protected, and it is
-an error to specify it in a transaction protected environment.
-<p><dt>-upgrade<dd>Upgrade the database represented by <b>file</b>, if necessary.
-<p><b>Note: Database upgrades are done in place and are
-destructive, e.g., if pages need to be allocated and no disk space is
-available, the database may be left corrupted. Backups should be made
-before databases are upgraded. See <a href="../ref/am/upgrade.html">Upgrading databases</a> for more information.</b>
+<p>The <b>-truncate</b> argument cannot be transaction-protected, and it is
+an error to specify it in a transaction-protected environment.</p>
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected (other than by specifying the -auto_commit flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
<p><dt>--<dd>Mark the end of the command arguments.
<p><dt>file<dd>The name of a single physical file on disk that will be used to back the
database.
@@ -288,13 +298,17 @@ databases are both numerous and reasonably small, in order to avoid
creating a large number of underlying files. It is an error to attempt
to open a second database file that was not initially created using a
<b>database</b> name.
+<p>Applications opening multiple databases in a single file will almost
+certainly need to create a shared database environment. See
+<a href="../ref/am/opensub.html">Opening multiple databases in a single
+file</a> for more information.</p>
</dl>
-<p>The <b>berkdb open</b> command returns a database handle on success.
-<p>In the case of error, a Tcl error is thrown.
+<p>The <b>berkdb open</b> command returns a database handle on success.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_put.html b/db/docs/api_tcl/db_put.html
index 2311a3c97..48b5e245b 100644
--- a/db/docs/api_tcl/db_put.html
+++ b/db/docs/api_tcl/db_put.html
@@ -1,74 +1,82 @@
-<!--$Id: db_put.so,v 11.10 2000/06/12 17:50:01 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_put.so,v 11.13 2002/08/18 21:17:26 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>put</b></h1>
+<h3><i>db</i> <b>put</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db put
-append
+ [-auto_commit]
[-partial {doff dlen}]
[-txn txnid]
data
db put
+ [-auto_commit]
[-nooverwrite]
[-partial {doff dlen}]
[-txn txnid]
key data
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db put)</h3>
<p>The <i>db</i> <b>put</b> command stores the specified key/data pair into the
-database.
-<p>The options are as follows:
+database.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
+made by the operation will be recoverable. If the call fails, the
+operation will have made no changes.
<p><dt>-append<dd>Append the data item to the end of the database. For the <b>-append</b>
option to be specified, the underlying database must be a Queue or Recno
database. The record number allocated to the record is returned on
success.
<p><dt>-nooverwrite<dd>Enter the new key/data pair only if the key does not already appear in
the database.
-<p><dt>-partial {doff dlen}<dd>
-<p>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning of
-the specified key's data record are replaced by the data specified by the
-data and size structure elements. If <b>dlen</b> is smaller than the
-length of the supplied data, the record will grow, and if <b>dlen</b> is
-larger than the length of the supplied data, the record will shrink. If
-the specified bytes do not exist, the record will be extended using nul
-bytes as necessary, and the <i>db</i> <b>put</b> call will succeed.
+<p><dt>-partial {doff dlen}<dd><p>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning
+of the specified key's data record are replaced by the data specified
+by the data and size structure elements. If <b>dlen</b> is smaller
+than the length of the supplied data, the record will grow; if
+<b>dlen</b> is larger than the length of the supplied data, the record
+will shrink. If the specified bytes do not exist, the record will be
+extended using nul bytes as necessary, and the <i>db</i> <b>put</b> call will succeed.
<p>It is an error to attempt a partial put using the <i>db</i> <b>put</b> command in a database
that supports duplicate records. Partial puts in databases supporting
-duplicate records must be done using a <i>dbc</i> <b>put</b> command.
+duplicate records must be done using a <i>dbc</i> <b>put</b> command.</p></p>
<p>It is an error to attempt a partial put with differing <b>dlen</b> and
supplied data length values in Queue or Recno databases with fixed-length
-records.
-<p><dt>-txn txnid<dd>If the file is being accessed under transaction protection, the
-<b>txnid</b> parameter is a transaction handle returned from <i>env</i> <b>txn</b>.
+records.</p>
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected (other than by specifying the -auto_commit flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
<p>The <i>db</i> <b>put</b> command returns either 0 or a record number for success
(the record number is returned if the <b>-append</b> option was specified).
If an error occurs, a Berkeley DB error message is returned or a Tcl error is
-thrown.
+thrown.</p>
<p>If the underlying database is a Queue or Recno database, then the given
key will be interpreted by Tcl as an integer. For all other database
-types, the key is interpreted by Tcl as a byte array.
+types, the key is interpreted by Tcl as a byte array.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_remove.html b/db/docs/api_tcl/db_remove.html
index e45f3bc49..2282179ec 100644
--- a/db/docs/api_tcl/db_remove.html
+++ b/db/docs/api_tcl/db_remove.html
@@ -1,49 +1,62 @@
-<!--$Id: db_remove.so,v 11.6 2000/03/22 21:56:10 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_remove.so,v 11.12 2002/09/26 17:34:02 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb dbremove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb dbremove</b></h1>
+<h3><b>berkdb dbremove</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>berkdb dbremove
+ [-encrypt]
+ [-encryptaes passwd]
+ [-encryptany passwd]
[-env env]
[--]
file
[database]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(berkdb dbremove)</h3>
<p>Remove the Berkeley DB database specified by the database name <b>file</b> and
[database] name arguments. If no <b>database</b> is specified,
the physical file represented by <b>file</b> is removed, incidentally
-removing all databases that it contained.
+removing all databases that it contained.</p>
<p>No reference count of database use is maintained by Berkeley DB. Applications
-should not remove databases that are currently in use.
-<p>The options are as follows:
+should not remove databases that are currently in use.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-encrypt<dd>Specify the database in an environment is encrypted with the
+same password that is being used in the environment.
+<p><dt>-encryptaes passwd<dd>Specify the database is encrypted with the given password
+using the Rijndael/AES (also known as the Advanced Encryption Standard
+and Federal Information Processing Standard (FIPS) 197) algorithm.
+<p><dt>-encryptany passwd<dd>Specify the already existing database is encrypted
+with the given password. This option is used if the database is
+known to be encrypted, but the specific algorithm used is not known.
<p><dt>-env env<dd>If a <b>-env</b> argument is given, the database in the specified Berkeley DB
environment is removed.
<p><dt>--<dd>Mark the end of the command arguments.
</dl>
<p>The <b>berkdb dbremove</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_rename.html b/db/docs/api_tcl/db_rename.html
index 75707d92a..f161437a6 100644
--- a/db/docs/api_tcl/db_rename.html
+++ b/db/docs/api_tcl/db_rename.html
@@ -1,50 +1,63 @@
-<!--$Id: db_rename.so,v 11.1 2000/04/24 17:31:12 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_rename.so,v 11.7 2002/09/26 17:34:02 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb dbrename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb dbrename</b></h1>
+<h3><b>berkdb dbrename</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>berkdb rename
+ [-encrypt]
+ [-encryptaes passwd]
+ [-encryptany passwd]
[-env env]
[--]
file
[database
newname]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(berkdb dbrename)</h3>
<p>Renames the Berkeley DB database specified by the database name <b>file</b> and
[database] name arguments to the new name given.
If no <b>database</b> is specified,
-the physical file represented by <b>file</b> is renamed.
+the physical file represented by <b>file</b> is renamed.</p>
<p>No reference count of database use is maintained by Berkeley DB. Applications
-should not rename databases that are currently in use.
-<p>The options are as follows:
+should not rename databases that are currently in use.</p>
+<p>The options are as follows:</p>
<p><dl compact>
+<p><dt>-encrypt<dd>Specify the database in an environment is encrypted with the
+same password that is being used in the environment.
+<p><dt>-encryptaes passwd<dd>Specify the database is encrypted with the given password
+using the Rijndael/AES (also known as the Advanced Encryption Standard
+and Federal Information Processing Standard (FIPS) 197) algorithm.
+<p><dt>-encryptany passwd<dd>Specify the already existing database is encrypted
+with the given password. This option is used if the database is
+known to be encrypted, but the specific algorithm used is not known.
<p><dt>-env env<dd>If a <b>-env</b> argument is given, the database in the specified Berkeley DB
environment is renamed.
<p><dt>--<dd>Mark the end of the command arguments.
</dl>
<p>The <b>berkdb dbrename</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_stat.html b/db/docs/api_tcl/db_stat.html
index 494226dfd..e85362a68 100644
--- a/db/docs/api_tcl/db_stat.html
+++ b/db/docs/api_tcl/db_stat.html
@@ -1,41 +1,42 @@
-<!--$Id: db_stat.so,v 11.9 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 11.12 2002/08/18 21:17:27 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>stat</b></h1>
+<h3><i>db</i> <b>stat</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db stat
- [-recordcount]
+ [-faststat]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db stat)</h3>
<p>The <i>db</i> <b>stat</b> command returns a list of name/value pairs comprising
-the statistics of the database.
-<p>The options are as follows:
+the statistics of the database.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-recordcount<dd>Return the number of records in the database. The <b>-recordcount</b>
-option may only be specified for Recno databases, or Btree databases where
-the underlying database was created with the <b>-recnum</b> option.
+<p><dt>-faststat<dd>Return only that information which does not require a traversal
+of the database.
</dl>
-<p>In the case of error, a Tcl error is thrown.
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_sync.html b/db/docs/api_tcl/db_sync.html
index f0e61b45a..49cbe142e 100644
--- a/db/docs/api_tcl/db_sync.html
+++ b/db/docs/api_tcl/db_sync.html
@@ -1,36 +1,38 @@
-<!--$Id: db_sync.so,v 11.9 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_sync.so,v 11.11 2002/08/18 21:17:27 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>db</i> <b>sync</b></h1>
+<h3><i>db</i> <b>sync</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db sync
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db sync)</h3>
<p>The <i>db</i> <b>sync</b> command function flushes any database cached
-information to disk.
-<p>See <i>db</i> <b>close</b> for a discussion of Berkeley DB and cached data.
+information to disk.</p>
+<p>See <i>db</i> <b>close</b> for a discussion of Berkeley DB and cached data. </p>
<p>The <i>db</i> <b>sync</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/db_truncate.html b/db/docs/api_tcl/db_truncate.html
index 1ae13d1b4..b2fd10bb4 100644
--- a/db/docs/api_tcl/db_truncate.html
+++ b/db/docs/api_tcl/db_truncate.html
@@ -1,48 +1,49 @@
-<!--Id: db_truncate.so,v 11.1 2001/02/27 19:00:44 sue Exp -->
-<!--Id: m4.tcl,v 11.22 2001/04/18 15:50:10 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: db_truncate.so,v 11.5 2002/08/18 21:17:28 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: berkdb dbtruncate</title>
+<title>Berkeley DB: db truncate</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb dbtruncate</b></h1>
+<h3><i>db</i> <b>truncate</b></h3>
</td>
<td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>berkdb dbtruncate
- [-env env]
- [--]
- file
- [database]
+<h3><pre>db truncate
+ [-auto_commit]
+ [-txn txnid]
</pre></h3>
-<h1>Description</h1>
-<p>Truncates the Berkeley DB database specified by the database name <b>file</b> and
-[database] name arguments. If no <b>database</b> is specified,
-the physical file represented by <b>file</b> is emptied, incidentally
-removing all databases that it contained.
-<p>The options are as follows:
+<h3>Description(db truncate)</h3>
+<p>Empties the database, discarding all records it contains.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-env env<dd>If a <b>-env</b> argument is given, the database in the specified Berkeley DB
-environment is removed.
-<p><dt>--<dd>Mark the end of the command arguments.
+<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
+made by the operation will be recoverable. If the call fails, the
+operation will have made no changes.
+<p><dt>-txn txnid<dd>If the operation is to be
+transaction-protected (other than by specifying the -auto_commit flag),
+the <b>txnid</b> parameter is a transaction handle returned from
+<i>env</i> <b>txn</b>.
</dl>
-<p>The <b>berkdb dbtruncate</b> command returns the number of records discarded
-from the database on success. If an error occurs, a Berkeley DB error message
-is returned or a Tcl error is thrown.
+<p>The <i>db</i> <b>truncate</b> command returns the number of records discarded
+from the database on success.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/dbc_close.html b/db/docs/api_tcl/dbc_close.html
index f3a63b4c5..4591cdfa0 100644
--- a/db/docs/api_tcl/dbc_close.html
+++ b/db/docs/api_tcl/dbc_close.html
@@ -1,36 +1,38 @@
-<!--$Id: dbc_close.so,v 11.10 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_close.so,v 11.13 2002/08/18 21:17:28 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>dbc</i> <b>close</b></h1>
+<h3><i>dbc</i> <b>close</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>dbc close
</pre></h3>
-<h1>Description</h1>
-<p>The <i>dbc</i> <b>close</b> command discards the cursor.
-<p>Once <i>dbc</i> <b>close</b> has been called, regardless of its return, the
-cursor handle may not be used again.
+<h3>Description(db close)</h3>
+<p>The <i>dbc</i> <b>close</b> command discards the cursor. </p>
+<p>After <i>dbc</i> <b>close</b> has been called, regardless of its return, the
+cursor handle may not be used again.</p>
<p>The <i>dbc</i> <b>close</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/dbc_del.html b/db/docs/api_tcl/dbc_del.html
index 11264eeea..b2593d20c 100644
--- a/db/docs/api_tcl/dbc_del.html
+++ b/db/docs/api_tcl/dbc_del.html
@@ -1,38 +1,40 @@
-<!--$Id: dbc_del.so,v 11.10 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_del.so,v 11.13 2002/08/18 21:17:28 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db del</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>dbc</i> <b>del</b></h1>
+<h3><i>dbc</i> <b>del</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>dbc del
</pre></h3>
-<h1>Description</h1>
-<p>The <i>dbc</i> <b>del</b> command deletes the key/data pair currently referenced
-by the cursor.
+<h3>Description(db del)</h3>
+<p>The <i>dbc</i> <b>del</b> command deletes the key/data pair to which the cursor
+currently refers.</p>
<p>The cursor position is unchanged after a delete, and subsequent calls to
-cursor commands expecting the cursor to reference an existing key will
-fail.
+cursor commands expecting the cursor to refer to an existing key will
+fail.</p>
<p>The <i>dbc</i> <b>del</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/dbc_dup.html b/db/docs/api_tcl/dbc_dup.html
index 85b2bfb08..2fdfb9b89 100644
--- a/db/docs/api_tcl/dbc_dup.html
+++ b/db/docs/api_tcl/dbc_dup.html
@@ -1,46 +1,48 @@
-<!--$Id: dbc_dup.so,v 11.4 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_dup.so,v 11.8 2002/08/18 21:17:28 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db dup</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>dbc</i> <b>dup</b></h1>
+<h3><i>dbc</i> <b>dup</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>dbc dup
[-position]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db dup)</h3>
<p>The <i>dbc</i> <b>dup</b> command duplicates the cursor, creates a new cursor
that uses the same transaction and locker ID as the original cursor. This
is useful when an application is using locking and requires two or more
-cursors in the same thread of control.
-<p>The options are as follows:
+cursors in the same thread of control.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-position<dd>The newly created cursor is initialized to reference the same position in
-the database as the original cursor and hold the same locks. If the
-<b>-position</b> flag is not specified, then the created cursor is
+<p><dt>-position<dd>The newly created cursor is initialized to refer to the same position
+in the database as the original cursor and hold the same locks. If the
+<b>-position</b> flag is not specified, the created cursor is
uninitialized and will behave like a cursor newly created using the
<i>db</i> <b>cursor</b> command.
</dl>
<p>The <i>dbc</i> <b>dup</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/dbc_get.html b/db/docs/api_tcl/dbc_get.html
index d16e51bdf..083e0e8fc 100644
--- a/db/docs/api_tcl/dbc_get.html
+++ b/db/docs/api_tcl/dbc_get.html
@@ -1,21 +1,23 @@
-<!--$Id: dbc_get.so,v 11.16 2000/11/28 20:12:30 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_get.so,v 11.21 2002/08/18 21:17:28 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db get</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>dbc</i> <b>get</b></h1>
+<h3><i>dbc</i> <b>get</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -45,41 +47,41 @@ dbc get
[-rmw]
key data
</pre></h3>
-<h1>Description</h1>
+<h3>Description(db get)</h3>
<p>The <i>dbc</i> <b>get</b> command returns a list of {key value} pairs, except in
the case of the <b>-get_recno</b> and <b>-join_item</b> options. In
the case of the <b>-get_recno</b> option, <i>dbc</i> <b>get</b> returns a list
of the record number. In the case of the <b>-join_item</b> option,
-<i>dbc</i> <b>get</b> returns a list containing the joined key.
-<p>The options are as follows:
+<i>dbc</i> <b>get</b> returns a list containing the joined key.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-current<dd>Return the key/data pair currently referenced by the cursor.
+<p><dt>-current<dd>Return the key/data pair to which the cursor currently refers.
<p>If the cursor key/data pair was deleted, <i>dbc</i> <b>get</b> will return an
-empty list.
-<p><dt>-first<dd>The cursor is set to reference the first key/data pair of the database, and
+empty list.</p>
+<p><dt>-first<dd>The cursor is set to refer to the first key/data pair of the database, and
that pair is returned. In the presence of duplicate key values, the first
data item in the set of duplicates is returned.
<p>If the database is a Queue or Recno database, <i>dbc</i> <b>get</b> using the
<b>-first</b> option will skip any keys that exist but were never
-explicitly created by the application or were created and later deleted.
-<p>If the database is empty, <i>dbc</i> <b>get</b> will return an empty list.
-<p><dt>-last<dd>The cursor is set to reference the last key/data pair of the database, and
+explicitly created by the application, or were created and later deleted.</p>
+<p>If the database is empty, <i>dbc</i> <b>get</b> will return an empty list.</p>
+<p><dt>-last<dd>The cursor is set to refer to the last key/data pair of the database, and
that pair is returned. In the presence of duplicate key values, the last
data item in the set of duplicates is returned.
<p>If the database is a Queue or Recno database, <i>dbc</i> <b>get</b> using the
<b>-last</b> option will skip any keys that exist but were never
-explicitly created by the application or were created and later deleted.
-<p>If the database is empty, <i>dbc</i> <b>get</b> will return an empty list.
+explicitly created by the application, or were created and later deleted.</p>
+<p>If the database is empty, <i>dbc</i> <b>get</b> will return an empty list.</p>
<p><dt>-next<dd>If the cursor is not yet initialized, the <b>-next</b> option is
identical to <b>-first</b>.
<p>Otherwise, the cursor is moved to the next key/data pair of the database,
and that pair is returned. In the presence of duplicate key values, the
-value of the key may not change.
+value of the key may not change. </p>
<p>If the database is a Queue or Recno database, <i>dbc</i> <b>get</b> using the
<b>-next</b> option will skip any keys that exist but were never
-explicitly created by the application or were created and later deleted.
+explicitly created by the application, or were created and later deleted.</p>
<p>If the cursor is already on the last record in the database, <i>dbc</i> <b>get</b>
-will return an empty list.
+will return an empty list.</p>
<p><dt>-nextdup<dd>If the next key/data pair of the database is a duplicate record for the
current key/data pair, the cursor is moved to the next key/data pair of the
database, and that pair is returned. Otherwise, <i>dbc</i> <b>get</b> will return
@@ -87,33 +89,33 @@ an empty list.
<p><dt>-nextnodup<dd>If the cursor is not yet initialized, the <b>-nextnodup</b> option is
identical to <b>-first</b>.
<p>Otherwise, the cursor is moved to the next non-duplicate
-key/data pair of the database, and that pair is returned.
+key/data pair of the database, and that pair is returned.</p>
<p>If no non-duplicate key/data pairs occur after the cursor
-position in the database, <i>dbc</i> <b>get</b> will return an empty list.
+position in the database, <i>dbc</i> <b>get</b> will return an empty list.</p>
<p><dt>-prev<dd>If the cursor is not yet initialized, <b>-prev</b> is identical to
<b>-last</b>.
<p>Otherwise, the cursor is moved to the previous key/data pair of the
database, and that pair is returned. In the presence of duplicate key
-values, the value of the key may not change.
+values, the value of the key may not change.</p>
<p>If the database is a Queue or Recno database, <i>dbc</i> <b>get</b> using the
<b>-prev</b> flag will skip any keys that exist but were never explicitly
-created by the application or were created and later deleted.
+created by the application, or were created and later deleted.</p>
<p>If the cursor is already on the first record in the database,
-<i>dbc</i> <b>get</b> will return an empty list.
+<i>dbc</i> <b>get</b> will return an empty list.</p>
<p><dt>-prevnodup<dd>If the cursor is not yet initialized, the <b>-prevnodup</b> option is
identical to <b>-last</b>.
<p>Otherwise, the cursor is moved to the previous non-duplicate
-key/data pair of the database, and that pair is returned.
+key/data pair of the database, and that pair is returned.</p>
<p>If no non-duplicate key/data pairs occur before the cursor
-position in the database, <i>dbc</i> <b>get</b> will return an empty list.
+position in the database, <i>dbc</i> <b>get</b> will return an empty list.</p>
<p><dt>-set<dd>Move the cursor to the specified key/data pair of the database, and return
the datum associated with the given key.
<p>In the presence of duplicate key values, <i>dbc</i> <b>get</b> will return the
-first data item for the given key.
+first data item for the given key. </p>
<p>If the database is a Queue or Recno database and the requested key exists,
but was never explicitly created by the application or was later deleted,
-<i>dbc</i> <b>get</b> will return an empty list.
-<p>If no matching keys are found, <i>dbc</i> <b>get</b> will return an empty list.
+<i>dbc</i> <b>get</b> will return an empty list.</p>
+<p>If no matching keys are found, <i>dbc</i> <b>get</b> will return an empty list.</p>
<p><dt>-set_range<dd>The <b>-set_range</b> option is identical to the <b>-set</b> option,
except that the key is returned as well as the data item, and, in the case
of the Btree access method, the returned key/data pair is the smallest
@@ -123,27 +125,27 @@ comparison function), permitting partial key matches and range searches.
except that both the key and the data arguments must be matched by the
key and data item in the database.
<p>For <b>-get_both</b> to be specified, the underlying database must be of
-type Btree or Hash.
+type Btree or Hash.</p>
<p><dt>-set_recno<dd>Move the cursor to the specific numbered record of the database, and
return the associated key/data pair. The key
must be a record number.
<p>For the <b>-set_recno</b> option to be specified, the underlying database
-must be of type Btree and it must have been created with the <b>-recnum</b>
-option.
+must be of type Btree, and it must have been created with the <b>-recnum</b>
+option.</p>
<p><dt>-get_recno<dd>Return a list of the record number associated with the current cursor
position. No key argument should be specified.
<p>For <b>-get_recno</b> to be specified, the underlying database must be
-of type Btree and it must have been created with the <b>-recnum</b>
-option.
-<p><dt>-join_item<dd>Do not use the data value found in all of the cursors as a lookup key for
+of type Btree, and it must have been created with the <b>-recnum</b>
+option.</p>
+<p><dt>-join_item<dd>Do not use the data value found in all the cursors as a lookup key for
the primary database, but simply return it in the key parameter instead.
The data parameter is left unchanged.
<p>For <b>-join_item</b> to be specified, the cursor must have been created
-by the <i>db</i> <b>join</b> command.
-<p><dt>-partial {offset length}<dd>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning of
-the retrieved data record are returned as if they comprised the entire
-record. If any or all of the specified bytes do not exist in the record,
-the command is successful and the existing bytes or 0 bytes are
+by the <i>db</i> <b>join</b> command.</p>
+<p><dt>-partial {offset length}<dd>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning
+of the retrieved data record are returned as if they comprised the
+entire record. If any or all of the specified bytes do not exist in
+the record, the command is successful and any existing bytes are
returned.
<p><dt>-rmw<dd>Acquire write locks instead of read locks when doing the retrieval. Setting
this flag may decrease the likelihood of deadlock during a read-modify-write
@@ -151,18 +153,17 @@ cycle by immediately acquiring the write lock during the read part of the
cycle so that another thread of control acquiring a read lock for the same
item, in its own read-modify-write cycle, will not result in deadlock.
</dl>
-<p>If a key is specified, and
-if the underlying database is a Queue or Recno database, then the given
-key will be interpreted by Tcl as an integer. For all other database
-types, the key is interpreted by Tcl as a byte array unless indicated
-by a given option.
+<p>If a key is specified, and if the underlying database is a Queue or
+Recno database, the given key will be interpreted by Tcl as an integer.
+For all other database types, the key is interpreted by Tcl as a byte
+array, unless indicated by a given option.</p>
<p>In the normal error case of attempting to retrieve a key that does not
-exist an empty list is returned.
-<p>In the case of error, a Tcl error is thrown.
+exist an empty list is returned.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/dbc_put.html b/db/docs/api_tcl/dbc_put.html
index bd791ab94..d00b5a12a 100644
--- a/db/docs/api_tcl/dbc_put.html
+++ b/db/docs/api_tcl/dbc_put.html
@@ -1,21 +1,23 @@
-<!--$Id: dbc_put.so,v 11.12 2000/06/12 17:50:01 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbc_put.so,v 11.17 2003/02/21 15:16:45 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: dbc put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>dbc</i> <b>put</b></h1>
+<h3><i>dbc</i> <b>put</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -31,31 +33,30 @@ dbc put
[-partial {doff dlen}]
key data
</pre></h3>
-<h1>Description</h1>
+<h3>Description(dbc put)</h3>
<p>The <i>dbc</i> <b>put</b> command stores the specified key/data pair into the
-database.
-<p>The options are as follows:
+database. One of the following options must be specified:</p>
<p><dl compact>
<p><dt>-after<dd>In the case of the Btree and Hash access methods, insert the data element
-as a duplicate element of the key referenced by the cursor. The new
+as a duplicate element of the key to which the cursor refers. The new
element appears immediately after the current cursor position. It is an
error to specify <b>-after</b> if the underlying Btree or Hash database
was not created with the <b>-dup</b> option. No key argument should be
specified.
-<p>In the case of the Recno access method, it is an error to specify
+<p>In the case of the Recno access method, it is an error to specify the
<b>-after</b> option if the underlying Recno database was not created
with the <b>-renumber</b> option. If the <b>-renumber</b> option was
-specified, a new key is created, all records after the inserted item are
-automatically renumbered, and the key of the new record is returned in
-the structure referenced by the parameter key. The initial value of the
-key parameter is ignored. See <b>berkdb open</b> for more information.
+specified, a new key is created, all records after the inserted item
+are automatically renumbered, and the key of the new record is returned
+in the structure to which the key argument refers. The initial value of
+the key parameter is ignored. See <b>berkdb open</b> for more information.</p>
<p>In the case of the Queue access method, it is always an error to specify
-<b>-after</b>.
-<p>If the current cursor record has already been deleted and the underlying
+<b>-after</b>.</p>
+<p>If the current cursor record has already been deleted, and the underlying
access method is Hash, <i>dbc</i> <b>put</b> will throw a Tcl error. If the
-underlying access method is Btree or Recno, the operation will succeed.
+underlying access method is Btree or Recno, the operation will succeed.</p>
<p><dt>-before<dd>In the case of the Btree and Hash access methods, insert the data element
-as a duplicate element of the key referenced by the cursor. The new
+as a duplicate element of the key to which the cursor refers. The new
element appears immediately before the current cursor position. It is an
error to specify <b>-before</b> if the underlying Btree or Hash database
was not created with the <b>-dup</b> option. No key argument should be
@@ -65,69 +66,69 @@ specified.
<b>-before</b> option. If the <b>-before</b> option was specified, a
new key is created, the current record and all records after it are
automatically renumbered, and the key of the new record is returned in
-the structure referenced by the parameter key. The initial value of the
-key parameter is ignored. See <b>berkdb open</b> for more information.
+the structure to which the key argument refers. The initial value of the
+key parameter is ignored. See <b>berkdb open</b> for more information.</p>
<p>In the case of the Queue access method, it is always an error to specify
-<b>-before</b>.
+<b>-before</b>. </p>
<p>If the current cursor record has already been deleted and the underlying
access method is Hash, <i>dbc</i> <b>put</b> will throw a Tcl error. If the
-underlying access method is Btree or Recno, the operation will succeed.
-<p><dt>-current<dd>Overwrite the data of the key/data pair referenced by the cursor with the
-specified data item. No key argument should be specified.
+underlying access method is Btree or Recno, the operation will succeed.</p>
+<p><dt>-current<dd>Overwrite the data of the key/data pair to which the cursor refers with
+the specified data item. No key argument should be specified.
<p>If the <b>-dupsort</b> option was specified to <b>berkdb open</b> and the
-data item of the current referenced key/data pair does not compare
-equally to the data parameter, <i>dbc</i> <b>put</b> will throw a Tcl error.
+data item of the key/data pair to which the cursor refers does not
+compare equally to the data parameter, <i>dbc</i> <b>put</b> will throw a Tcl
+error.</p>
<p>If the current cursor record has already been deleted and the underlying
access method is Hash, <i>dbc</i> <b>put</b> will throw a Tcl error. If the
-underlying access method is Btree, Queue or Recno, the operation will
-succeed.
+underlying access method is Btree, Queue, or Recno, the operation will
+succeed.</p>
<p><dt>-keyfirst<dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the key already exists in the database, and the <b>-dupsort</b> option
was specified to <b>berkdb open</b>, the inserted data item is added in its
sorted location. If the key already exists in the database, and the
<b>-dupsort</b> option was not specified, the inserted data item is added
-as the first of the data items for that key.
+as the first of the data items for that key.</p>
<p>The <b>-keyfirst</b> option may not be specified to the Queue or Recno
-access methods.
+access methods.</p>
<p><dt>-keylast<dd>In the case of the Btree and Hash access methods, insert the specified
key/data pair into the database.
<p>If the key already exists in the database, and the <b>-dupsort</b> option
was specified to <b>berkdb open</b>, the inserted data item is added in its
sorted location. If the key already exists in the database, and the
<b>-dupsort</b> option was not specified, the inserted data item is added
-as the last of the data items for that key.
+as the last of the data items for that key.</p>
<p>The <b>-keylast</b> option may not be specified to the Queue or Recno
-access methods.
-<p><dt>-partial {doff dlen}<dd>
-<p>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning of
-the specified key's data record are replaced by the data specified by the
-data and size structure elements. If <b>dlen</b> is smaller than the
-length of the supplied data, the record will grow, and if <b>dlen</b> is
-larger than the length of the supplied data, the record will shrink. If
-the specified bytes do not exist, the record will be extended using nul
-bytes as necessary, and the <i>dbc</i> <b>put</b> call will succeed.
+access methods.</p>
+<p><dt>-partial {doff dlen}<dd><p>The <b>dlen</b> bytes starting <b>doff</b> bytes from the beginning
+of the specified key's data record are replaced by the data specified
+by the data and size structure elements. If <b>dlen</b> is smaller
+than the length of the supplied data, the record will grow; if
+<b>dlen</b> is larger than the length of the supplied data, the record
+will shrink. If the specified bytes do not exist, the record will be
+extended using nul bytes as necessary, and the <i>dbc</i> <b>put</b> call will succeed.
<p>It is an error to attempt a partial put using the <i>dbc</i> <b>put</b> command in a database
that supports duplicate records. Partial puts in databases supporting
-duplicate records must be done using a <i>dbc</i> <b>put</b> command.
+duplicate records must be done using a <i>dbc</i> <b>put</b> command.</p></p>
<p>It is an error to attempt a partial put with differing <b>dlen</b> and
supplied data length values in Queue or Recno databases with fixed-length
-records.
+records.</p>
</dl>
<p>If a key is specified, and
-if the underlying database is a Queue or Recno database, then the given
-key will be interpreted by Tcl as an integer. For all other database
-types, the key is interpreted by Tcl as a byte array.
+if the underlying database is a Queue or Recno database, the given key
+will be interpreted by Tcl as an integer. For all other database types,
+the key is interpreted by Tcl as a byte array.</p>
<p>If <i>dbc</i> <b>put</b> fails for any reason, the state of the cursor will be
unchanged. If <i>dbc</i> <b>put</b> succeeds and an item is inserted into the
-database, the cursor is always positioned to reference the newly inserted
-item.
+database, the cursor is always positioned to refer to the newly inserted
+item.</p>
<p>The <i>dbc</i> <b>put</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/env_close.html b/db/docs/api_tcl/env_close.html
index 719ad2160..1f381b887 100644
--- a/db/docs/api_tcl/env_close.html
+++ b/db/docs/api_tcl/env_close.html
@@ -1,42 +1,44 @@
-<!--$Id: env_close.so,v 11.10 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_close.so,v 11.14 2002/08/18 21:17:29 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: env close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>env</i> <b>close</b></h1>
+<h3><i>env</i> <b>close</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>env close
</pre></h3>
-<h1>Description</h1>
+<h3>Description(env close)</h3>
<p>Close the Berkeley DB environment, freeing any allocated resources and closing
-any underlying subsystems.
+any underlying subsystems.</p>
<p>This does not imply closing any databases that were opened in the
-environment.
-<p>Where the environment was initialized with the <b>-lock</b> option,
+environment.</p>
+<p>Where the environment was initialized with the <b>-txn</b> option,
calling <i>env</i> <b>close</b> does not release any locks still held by the
-closing process, providing functionality for long-lived locks.
-<p>Once <i>env</i> <b>close</b> has been called the <b>env</b> handle may not be
-accessed again.
+closing process, providing functionality for long-lived locks.</p>
+<p>After <i>env</i> <b>close</b> has been called the <b>env</b> handle may not be
+accessed again.</p>
<p>The <i>env</i> <b>close</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/env_dbremove.html b/db/docs/api_tcl/env_dbremove.html
index c885d5021..0679c5747 100644
--- a/db/docs/api_tcl/env_dbremove.html
+++ b/db/docs/api_tcl/env_dbremove.html
@@ -1,22 +1,23 @@
-<!--Id: env_dbremove.so,v 11.2 2002/06/24 14:49:55 bostic Exp -->
-<!--Id: m4.tcl,v 11.25 2002/02/22 18:59:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbremove.so,v 11.3 2002/08/18 21:17:29 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: env dbremove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1><i>env</i> <b>dbremove</b></h1>
+<h3><i>env</i> <b>dbremove</b></h3>
</td>
<td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -26,9 +27,9 @@
[--]
file
</pre></h3>
-<h1>Description</h1>
-<p>Remove the Berkeley DB database <b>file</b>.
-<p>The options are as follows:
+<h3>Description(env dbremove)</h3>
+<p>Remove the Berkeley DB database <b>file</b>.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
made by the operation will be recoverable. If the call fails, the
@@ -39,11 +40,11 @@ the <b>txnid</b> parameter is a transaction handle returned from
<i>env</i> <b>txn</b>.
</dl>
<p>The <i>env</i> <b>dbremove</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/env_dbrename.html b/db/docs/api_tcl/env_dbrename.html
index e21dcba95..fc9d8aa12 100644
--- a/db/docs/api_tcl/env_dbrename.html
+++ b/db/docs/api_tcl/env_dbrename.html
@@ -1,22 +1,23 @@
-<!--Id: env_dbrename.so,v 11.2 2002/06/24 14:49:56 bostic Exp -->
-<!--Id: m4.tcl,v 11.25 2002/02/22 18:59:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env_dbrename.so,v 11.3 2002/08/18 21:17:29 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: env dbrename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td>
-<h1><i>env</i> <b>dbrename</b></h1>
+<h3><i>env</i> <b>dbrename</b></h3>
</td>
<td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -27,9 +28,9 @@
file
newname
</pre></h3>
-<h1>Description</h1>
-<p>Rename the Berkeley DB database <b>file</b> to <b>newname</b>.
-<p>The options are as follows:
+<h3>Description(env dbrename)</h3>
+<p>Rename the Berkeley DB database <b>file</b> to <b>newname</b>.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-auto_commit<dd>Enclose the call within a transaction. If the call succeeds, changes
made by the operation will be recoverable. If the call fails, the
@@ -40,11 +41,11 @@ the <b>txnid</b> parameter is a transaction handle returned from
<i>env</i> <b>txn</b>.
</dl>
<p>The <i>env</i> <b>dbrename</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
<table width="100%"><tr><td><br></td><td align=right>
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../reftoc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/env_open.html b/db/docs/api_tcl/env_open.html
index 1c5bafee4..d73f785c3 100644
--- a/db/docs/api_tcl/env_open.html
+++ b/db/docs/api_tcl/env_open.html
@@ -1,21 +1,23 @@
-<!--$Id: env_open.so,v 11.21 2000/06/05 15:17:24 sue Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 11.29 2002/12/22 21:11:07 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb env</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb env</b></h1>
+<h3><b>berkdb env</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,6 +25,8 @@
[-cachesize {gbytes bytes ncache}]
[-create]
[-data_dir dirname]
+ [-encryptaes passwd]
+ [-encryptany passwd]
[-errfile filename]
[-home directory]
[-log_dir dirname]
@@ -38,131 +42,135 @@
[-use_environ]
[-use_environ_root]
</pre></h3>
-<h1>Description</h1>
-<p>The <b>berkdb env</b> command opens, and optionally creates, a database
+<h3>Description(berkdb env)</h3>
+<p>The <b>berkdb env</b> command opens and optionally creates a database
environment. The returned environment handle is bound to a Tcl command
-of the form <b>envN</b>, where N is an integer starting at 0 (e.g., env0
-and env1). It is through this Tcl command that the script accesses the
-environment methods.
-The command automatically initializes the shared memory buffer pool subsystem.
-This subsystem is used whenever the application is
-using any Berkeley DB access method.
-<p>The options are as follows:
+of the form <b>envN</b>, where N is an integer starting at 0 (for
+example, env0 and env1). It is through this Tcl command that the script
+accesses the environment methods. The command automatically initializes
+the Shared Memory Buffer Pool subsystem. This subsystem is used
+whenever the application is using any Berkeley DB access method.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-cachesize {gbytes bytes ncache}<dd>Set the size of the database's shared memory buffer pool, i.e., the cache,
-to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache should be the
-size of the normal working data set of the application, with some small
-amount of additional memory for unusual situations. (Note, the working
-set is not the same as the number of simultaneously referenced pages, and
-should be quite a bit larger!)
+<p><dt>-cachesize {gbytes bytes ncache}<dd>Set the size of the database's shared memory buffer pool (that is, the
+cache), to <b>gbytes</b> gigabytes plus <b>bytes</b>. The cache
+should be the size of the normal working data set of the application,
+with some small amount of additional memory for unusual situations.
+(Note: The working set is not the same as the number of simultaneously
+referenced pages, and should be quite a bit larger!)
<p>The default cache size is 256KB, and may not be specified as less than
20KB. Any cache size less than 500MB is automatically increased by 25%
-to account for buffer pool overhead, cache sizes larger than 500MB are
-used as specified.
+to account for buffer pool overhead; cache sizes larger than 500MB are
+used as specified.</p>
<p>It is possible to specify caches to Berkeley DB that are large enough so that
-they cannot be allocated contiguously on some architectures, e.g., some
-releases of Solaris limit the amount of memory that may be allocated
-contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will
-be allocated contiguously in memory. If it is greater than 1, the cache
-will be broken up into <b>ncache</b> equally sized separate pieces of
-memory.
+they cannot be allocated contiguously on some architectures; for example,
+some releases of Solaris limit the amount of memory that may be
+allocated contiguously by a process. If <b>ncache</b> is 0 or 1, the
+cache will be allocated contiguously in memory. If it is greater than
+1, the cache will be broken up into <b>ncache</b> equally sized
+separate pieces of memory.</p>
<p>For information on tuning the Berkeley DB cache size, see
-<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.
+<a href="../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p>
<p><dt>-create<dd>Cause Berkeley DB subsystems to create any underlying files, as necessary.
<p><dt>-data_dir dirname<dd>Specify the environment's data directory as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-errfile filename<dd>
-<p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
+<p><dt>-encryptaes passwd<dd>Specify the database should be encrypted with the given password
+using the Rijndael/AES (also known as the Advanced Encryption Standard
+and Federal Information Processing Standard (FIPS) 197) algorithm.
+<p><dt>-encryptany passwd<dd>Specify the already existing environment should be opened
+with the given password. This option is used if the environment is
+known to be encrypted, but the specific algorithm used is not known.
+<p><dt>-errfile filename<dd><p>When an error occurs in the Berkeley DB library, a Berkeley DB error or an error
return value is returned by the function. In some cases, however, the
errno value may be insufficient to completely describe the cause of the
-error especially during initial application debugging.
+error especially during initial application debugging.</p>
<p>The <b>-errfile</b> argument is used to enhance the mechanism for
reporting error messages to the application by specifying a file to be
used for displaying additional Berkeley DB error messages. In some cases, when
an error occurs, Berkeley DB will output an additional error message to the
-specified file reference.
-<p>The error message will consist of the environment command name (e.g., env0)
-and a colon (":"), an error string, and a trailing &lt;newline&gt;
-character.
-<p>This error logging enhancement does not slow performance or significantly
+specified file reference.</p>
+<p>consist of the environment command name (for example, env0) and a colon
+(":"), an error string, and a trailing &lt;newline&gt;
+character.</p>
+<p>This error-logging enhancement does not slow performance or significantly
increase application size, and may be run during normal operation as well
-as during application debugging.
+as during application debugging.</p>
<p><dt>-home directory<dd>The <b>-home</b> argument is described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
<p><dt>-log_dir dirname<dd>Specify the environment's logging file directory as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-mode mode<dd>
-<p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB
+<p><dt>-mode mode<dd><p>On UNIX systems, or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB
are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and
modified by the process' umask value at the time of creation (see
<b>umask</b>(2)). The group ownership of created files is based on
the system and directory defaults, and is not further specified by Berkeley DB.
-If <b>mode</b> is 0, files are created readable and writeable by both
-owner and group. On Windows systems, the mode argument is ignored.
+If <b>mode</b> is 0, files are created readable and writable by both
+owner and group. On Windows systems, the mode argument is ignored.</p>
<p><dt>-private<dd>Specify that the environment will only be accessed by a single process
-(although that process may be multi-threaded). This flag has two effects
+(although that process may be multithreaded). This flag has two effects
on the Berkeley DB environment. First, all underlying data structures are
allocated from per-process memory instead of from shared memory that is
potentially accessible to more than a single process. Second, mutexes
are only configured to work between threads.
<p>This flag should not be specified if more than a single process is
accessing the environment, as it is likely to cause database corruption
-and unpredictable behavior, e.g., if both a server application and the
-Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> will access the environment, the
-<b>-private</b> option should not be specified.
+and unpredictable behavior. For example, if both a server application
+and the Berkeley DB utility <a href="../utility/db_stat.html">db_stat</a> will access the environment, the
+<b>-private</b> option should not be specified.</p>
<p><dt>-recover<dd>Run normal recovery on this environment before opening it for normal use.
-If this flag is set, the <b>-create</b> option must also be set since
-the regions will be removed and recreated.
+If this flag is set, the <b>-create</b> option must also be set because
+the regions will be removed and re-created.
<p><dt>-recover_fatal<dd>Run catastrophic recovery on this environment before opening it for
normal use. If this flag is set, the <b>-create</b> option must also be
-set since the regions will be removed and recreated.
+set since the regions will be removed and re-created.
<p><dt>-shm_key key<dd>Specify a base segment ID for Berkeley DB environment shared memory regions
-created in system memory on systems supporting X/Open-style shared memory
-interfaces, e.g., UNIX systems supporting shmget(2) and related System V
-IPC interfaces. See <a href="../ref/env/region.html">Shared Memory
-Regions</a> for more information.
+created in system memory on systems supporting X/Open-style shared
+memory interfaces, for example, UNIX systems supporting shmget(2) and
+related System V IPC interfaces. See <a href="../ref/env/region.html">Shared Memory Regions</a> for more information.
<p><dt>-system_mem<dd>Allocate memory from system shared memory instead of memory backed by the
filesystem. See <a href="../ref/env/region.html">Shared Memory Regions</a>
for more information.
-<p><dt>-tmp_dir dirname<dd>Specify the environment's tmp directory as described in
+<p><dt>-tmp_dir dirname<dd>Specify the environment's tmp directory, as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-txn [nosync]<dd>Initialize the transaction subsystem. This subsystem is used when
+<p><dt>-txn [nosync]<dd>Initialize the Transaction subsystem. This subsystem is used when
recovery and atomicity of multiple operations and recovery are important.
The <b>-txn</b> option implies the initialization of the logging
and locking subsystems as well.
-<p>If the optional <b>nosync</b> argument is specified, the log will not be
-synchronously flushed on transaction commit or prepare. This means that
-transactions exhibit the ACI (atomicity, consistency and isolation)
-properties, but not D (durability), i.e., database integrity will be
-maintained but it is possible that some number of the most recently
+<p>If the optional <b>nosync</b> argument is specified, the log will not
+be synchronously flushed on transaction commit. This means that
+transactions exhibit the ACI (atomicity, consistency, and isolation)
+properties, but not D (durability); that is, database integrity will be
+maintained, but it is possible that some number of the most recently
committed transactions may be undone during recovery instead of being
-redone.
+redone.</p>
<p>The number of transactions that are potentially at risk is governed by
how often the log is checkpointed (see <a href="../utility/db_checkpoint.html">db_checkpoint</a> for more
-information) and how many log updates can fit on a single log page.
+information) and how many log updates can fit on a single log page.</p>
<p><dt>-txn_max max<dd>Set the maximum number of simultaneous transactions that are supported
-by the environment. This bounds the size of backing files. When there
+by the environment, which bounds the size of backing files. When there
are more than the specified number of concurrent transactions, calls to
<i>env</i> <b>txn</b> will fail (until some active transactions complete).
-<p><dt>-use_environ<dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the <b>-use_environ</b> flag is set.
+<p><dt>-use_environ<dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see
+<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+Because permitting users to specify which files are used can create
+security problems, environment information will be used in file naming
+for all users only if the <b>-use_environ</b> flag is set.
<p><dt>-use_environ_root<dd>The Berkeley DB process' environment may be permitted to specify information
-to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the <b>-use_environ_root</b> flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on IEEE/ANSI Std 1003.1 (POSIX) systems, users with a
-user-ID of 0).
+to be used when naming files; see
+<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+As permitting users to specify which files are used can create security
+problems, if the <b>-use_environ_root</b> flag is set, environment
+information will be used for file naming only for users with appropriate
+permissions (for example, users with a user-ID of 0 on IEEE/ANSI Std 1003.1 (POSIX)
+systems).
</dl>
-<p>The <b>berkdb env</b> command returns an environment handle on success.
-<p>In the case of error, a Tcl error is thrown.
+<p>The <b>berkdb env</b> command returns an environment handle on success.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/env_remove.html b/db/docs/api_tcl/env_remove.html
index ca90595f8..62c5c77e4 100644
--- a/db/docs/api_tcl/env_remove.html
+++ b/db/docs/api_tcl/env_remove.html
@@ -1,21 +1,23 @@
-<!--$Id: env_remove.so,v 11.13 2000/02/19 20:57:57 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_remove.so,v 11.17 2002/08/18 21:17:29 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb envremove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb envremove</b></h1>
+<h3><b>berkdb envremove</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -28,43 +30,45 @@
[-use_environ]
[-use_environ_root]
</pre></h3>
-<h1>Description</h1>
-<p>Remove a Berkeley DB environment.
-<p>The options are as follows:
+<h3>Description(berkdb envremove)</h3>
+<p>Remove a Berkeley DB environment.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt>-data_dir dirname<dd>Specify the environment's data directory as described in
+<p><dt>-data_dir dirname<dd>Specify the environment's data directory, as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
<p><dt>-force<dd>If there are processes that have called <b>berkdb env</b> without calling
-<i>env</i> <b>close</b> (i.e., there are processes currently using the
+<i>env</i> <b>close</b> (that is, there are processes currently using the
environment), <b>berkdb envremove</b> will fail without further action, unless
the <b>-force</b> flag is set, in which case <b>berkdb envremove</b> will
-attempt to remove the environment regardless of any processes still using
-it.
+attempt to remove the environment regardless of any processes still
+using it.
<p><dt>-home directory<dd>The <b>-home</b> argument is described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-log_dir dirname<dd>Specify the environment's log directory as described in
+<p><dt>-log_dir dirname<dd>Specify the environment's log directory, as described in
+<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+<p><dt>-tmp_dir dirname<dd>Specify the environment's tmp directory, as described in
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-tmp_dir dirname<dd>Specify the environment's tmp directory as described in
+<p><dt>-use_environ<dd>The Berkeley DB process' environment may be permitted to specify information
+to be used when naming files; see
<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
-<p><dt>-use_environ<dd>The Berkeley DB process' environment may be permitted to specify information to
-be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, environment information will be used in file
-naming for all users only if the <b>-use_environ</b> flag is set.
+Because permitting users to specify which files are used can create
+security problems, environment information will be used in file naming
+for all users only if the <b>-use_environ</b> flag is set.
<p><dt>-use_environ_root<dd>The Berkeley DB process' environment may be permitted to specify information
-to be used when naming files; see <a href="../ref/env/naming.html">Berkeley DB
-File Naming</a>. As permitting users to specify which files are used can
-create security problems, if the <b>-use_environ_root</b> flag is set,
-environment information will be used for file naming only for users with
-appropriate permissions (e.g., on IEEE/ANSI Std 1003.1 (POSIX) systems, users with a
-user-ID of 0).
+to be used when naming files; see
+<a href="../ref/env/naming.html">Berkeley DB File Naming</a>.
+As permitting users to specify which files are used can create security
+problems, if the <b>-use_environ_root</b> flag is set, environment
+information will be used for file naming only for users with appropriate
+permissions (for example, users with a user-ID of 0 on IEEE/ANSI Std 1003.1 (POSIX)
+systems).
</dl>
<p>The <b>berkdb envremove</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/pindex.src b/db/docs/api_tcl/pindex.src
index 668f53d25..8d36b87b9 100644
--- a/db/docs/api_tcl/pindex.src
+++ b/db/docs/api_tcl/pindex.src
@@ -1,27 +1,31 @@
-__APIREL__/api_tcl/db_close.html#2 @db close
-__APIREL__/api_tcl/db_count.html#2 @db count
-__APIREL__/api_tcl/db_cursor.html#2 @db cursor
-__APIREL__/api_tcl/db_del.html#2 @db del
-__APIREL__/api_tcl/db_get.html#2 @db get
-__APIREL__/api_tcl/db_get_join.html#2 @db get_join
-__APIREL__/api_tcl/db_get_type.html#2 @db get_type
-__APIREL__/api_tcl/db_is_byteswapped.html#2 @db is_byteswapped
-__APIREL__/api_tcl/db_join.html#2 @db join
-__APIREL__/api_tcl/db_open.html#2 @berkdb open
-__APIREL__/api_tcl/db_put.html#2 @db put
-__APIREL__/api_tcl/db_rename.html#2 @berkdb dbrename
-__APIREL__/api_tcl/db_remove.html#2 @berkdb dbremove
-__APIREL__/api_tcl/db_stat.html#2 @db stat
-__APIREL__/api_tcl/db_sync.html#2 @db sync
-__APIREL__/api_tcl/dbc_close.html#2 @db close
-__APIREL__/api_tcl/dbc_del.html#2 @db del
-__APIREL__/api_tcl/dbc_dup.html#2 @db dup
-__APIREL__/api_tcl/dbc_get.html#2 @db get
-__APIREL__/api_tcl/dbc_put.html#2 @dbc put
-__APIREL__/api_tcl/env_close.html#2 @env close
-__APIREL__/api_tcl/env_open.html#2 @berkdb env
-__APIREL__/api_tcl/env_remove.html#2 @berkdb envremove
-__APIREL__/api_tcl/txn.html#2 @env txn
-__APIREL__/api_tcl/txn_abort.html#2 @txn abort
-__APIREL__/api_tcl/txn_commit.html#2 @txn commit
-__APIREL__/api_tcl/version.html#2 @berkdb version
+__APIREL__/api_tcl/db_close.html__OCT__2 @db close
+__APIREL__/api_tcl/db_count.html__OCT__2 @db count
+__APIREL__/api_tcl/db_cursor.html__OCT__2 @db cursor
+__APIREL__/api_tcl/db_del.html__OCT__2 @db del
+__APIREL__/api_tcl/db_get.html__OCT__2 @db get
+__APIREL__/api_tcl/db_get_join.html__OCT__2 @db get_join
+__APIREL__/api_tcl/db_get_type.html__OCT__2 @db get_type
+__APIREL__/api_tcl/db_is_byteswapped.html__OCT__2 @db is_byteswapped
+__APIREL__/api_tcl/db_join.html__OCT__2 @db join
+__APIREL__/api_tcl/db_open.html__OCT__2 @berkdb open
+__APIREL__/api_tcl/db_put.html__OCT__2 @db put
+__APIREL__/api_tcl/db_remove.html__OCT__2 @berkdb dbremove
+__APIREL__/api_tcl/db_rename.html__OCT__2 @berkdb dbrename
+__APIREL__/api_tcl/db_stat.html__OCT__2 @db stat
+__APIREL__/api_tcl/db_sync.html__OCT__2 @db sync
+__APIREL__/api_tcl/db_truncate.html__OCT__2 @db truncate
+__APIREL__/api_tcl/dbc_close.html__OCT__2 @db close
+__APIREL__/api_tcl/dbc_del.html__OCT__2 @db del
+__APIREL__/api_tcl/dbc_dup.html__OCT__2 @db dup
+__APIREL__/api_tcl/dbc_get.html__OCT__2 @db get
+__APIREL__/api_tcl/dbc_put.html__OCT__2 @dbc put
+__APIREL__/api_tcl/env_close.html__OCT__2 @env close
+__APIREL__/api_tcl/env_dbremove.html__OCT__2 @env dbremove
+__APIREL__/api_tcl/env_dbrename.html__OCT__2 @env dbrename
+__APIREL__/api_tcl/env_open.html__OCT__2 @berkdb env
+__APIREL__/api_tcl/env_remove.html__OCT__2 @berkdb envremove
+__APIREL__/api_tcl/txn.html__OCT__2 @env txn
+__APIREL__/api_tcl/txn_abort.html__OCT__2 @txn abort
+__APIREL__/api_tcl/txn_checkpoint.html__OCT__2 @env txn_checkpoint
+__APIREL__/api_tcl/txn_commit.html__OCT__2 @txn commit
+__APIREL__/api_tcl/version.html__OCT__2 @berkdb version
diff --git a/db/docs/api_tcl/tcl_index.html b/db/docs/api_tcl/tcl_index.html
index a31c6fc82..95ad48fa3 100644
--- a/db/docs/api_tcl/tcl_index.html
+++ b/db/docs/api_tcl/tcl_index.html
@@ -1,27 +1,32 @@
-<!--$Id: tcl_index.so,v 11.13 2000/04/24 17:31:12 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: tcl_index.so,v 11.21 2003/10/18 19:16:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Tcl Interface</title>
+<title>Berkeley DB: Tcl API</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Tcl Interface</h1>
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<p><table border=1 align=center>
+<h3 align=center>Tcl API</h3>
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<table border=1 align=center>
<tr><th>Tcl Command</th><th>Description</th></tr>
-<tr><td><a href="../api_tcl/db_remove.html"><b>berkdb dbremove</b></a></td><td>Remove a database</td></tr>
-<tr><td><a href="../api_tcl/db_rename.html"><b>berkdb dbrename</b></a></td><td>Rename a database</td></tr>
<tr><td><a href="../api_tcl/env_open.html"><b>berkdb env</b></a></td><td>Create an environment handle</td></tr>
<tr><td><a href="../api_tcl/env_remove.html"><b>berkdb envremove</b></a></td><td>Remove an environment</td></tr>
-<tr><td><a href="../api_tcl/db_open.html"><b>berkdb open</b></a></td><td>Create a database handle</td></tr>
-<tr><td><a href="../api_tcl/version.html"><b>berkdb version</b></a></td><td>Return version information</td></tr>
-<tr><td><br></td><td><br></td></tr>
<tr><td><a href="../api_tcl/env_close.html"><i>env</i> <b>close</b></a></td><td>Close an environment</td></tr>
+<tr><td><a href="../api_tcl/env_dbremove.html"><i>env</i> <b>dbremove</b></a></td><td>Remove a database</td></tr>
+<tr><td><a href="../api_tcl/env_dbrename.html"><i>env</i> <b>dbrename</b></a></td><td>Rename a database</td></tr>
+<tr><td><br></td><td><br></td></tr>
<tr><td><a href="../api_tcl/txn.html"><i>env</i> <b>txn</b></a></td><td>Begin a transaction</td></tr>
+<tr><td><a href="../api_tcl/txn_checkpoint.html"><i>env</i> <b>txn_checkpoint</b></a></td><td>Checkpoint the environment</td></tr>
+<tr><td><a href="../api_tcl/txn_abort.html"><i>txn</i> <b>abort</b></a></td><td>Abort a transaction</td></tr>
+<tr><td><a href="../api_tcl/txn_commit.html"><i>txn</i> <b>commit</b></a></td><td>Commit a transaction</td></tr>
<tr><td><br></td><td><br></td></tr>
+<tr><td><a href="../api_tcl/db_open.html"><b>berkdb open</b></a></td><td>Create a database handle</td></tr>
+<tr><td><a href="../api_tcl/db_remove.html"><b>berkdb dbremove</b></a></td><td>Remove a database</td></tr>
+<tr><td><a href="../api_tcl/db_rename.html"><b>berkdb dbrename</b></a></td><td>Rename a database</td></tr>
<tr><td><a href="../api_tcl/db_close.html"><i>db</i> <b>close</b></a></td><td>Close a database</td></tr>
<tr><td><a href="../api_tcl/db_count.html"><i>db</i> <b>count</b></a></td><td>Return a count of a key's data items</td></tr>
<tr><td><a href="../api_tcl/db_cursor.html"><i>db</i> <b>cursor</b></a></td><td>Open a cursor into a database</td></tr>
@@ -34,6 +39,7 @@
<tr><td><a href="../api_tcl/db_put.html"><i>db</i> <b>put</b></a></td><td>Store items into a database</td></tr>
<tr><td><a href="../api_tcl/db_stat.html"><i>db</i> <b>stat</b></a></td><td>Return database statistics</td></tr>
<tr><td><a href="../api_tcl/db_sync.html"><i>db</i> <b>sync</b></a></td><td>Flush a database to stable storage</td></tr>
+<tr><td><a href="../api_tcl/db_truncate.html"><i>db</i> <b>truncate</b></a></td><td>Truncate a database</td></tr>
<tr><td><br></td><td><br></td></tr>
<tr><td><a href="../api_tcl/dbc_close.html"><i>dbc</i> <b>close</b></a></td><td>Close a cursor</td></tr>
<tr><td><a href="../api_tcl/dbc_del.html"><i>dbc</i> <b>del</b></a></td><td>Delete by cursor</td></tr>
@@ -41,9 +47,8 @@
<tr><td><a href="../api_tcl/dbc_get.html"><i>dbc</i> <b>get</b></a></td><td>Retrieve by cursor</td></tr>
<tr><td><a href="../api_tcl/dbc_put.html"><i>dbc</i> <b>put</b></a></td><td>Store by cursor</td></tr>
<tr><td><br></td><td><br></td></tr>
-<tr><td><a href="../api_tcl/txn_abort.html"><i>txn</i> <b>abort</b></a></td><td>Abort a transaction</td></tr>
-<tr><td><a href="../api_tcl/txn_commit.html"><i>txn</i> <b>commit</b></a></td><td>Commit a transaction</td></tr>
+<tr><td><a href="../api_tcl/version.html"><b>berkdb version</b></a></td><td>Return version information</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/tcl_pindex.html b/db/docs/api_tcl/tcl_pindex.html
index c82153bad..0f9d77e07 100644
--- a/db/docs/api_tcl/tcl_pindex.html
+++ b/db/docs/api_tcl/tcl_pindex.html
@@ -1,256 +1,357 @@
<html>
<head>
-<title>Berkeley DB: Tcl Interface Index</title>
+<title>Berkeley DB: Tcl API Index</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Tcl Interface Index</h1>
+<h1 align=center>Tcl API Index</h1>
<center>
<table cellspacing=0 cellpadding=0>
-<tr><td align=right> configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#5">1.85</a> API compatibility</td></tr>
-<tr><td align=right> building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> databases</td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
-<tr><td align=right> Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
-<tr><td align=right> selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
-<tr><td align=right> programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_archive.html#3">archive</a> log files</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_remove.html#2">berkdb</a> dbremove</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_rename.html#2">berkdb</a> dbrename</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/env_open.html#2">berkdb</a> env</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/env_remove.html#2">berkdb</a> envremove</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_open.html#2">berkdb</a> open</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/version.html#2">berkdb</a> version</td></tr>
-<tr><td align=right> </td><td><a href="../utility/berkeley_db_svc.html#2">berkeley_db_svc</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/byteorder.html#2">byte</a> ordering</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#6">C++</a> API</td></tr>
-<tr><td align=right> flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-cryptography">--disable-cryptography</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-hash">--disable-hash</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-queue">--disable-queue</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-replication">--disable-replication</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-shared">--disable-shared</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--disable-static">--disable-static</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--disable-verify">--disable-verify</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Building a small memory footprint library </td><td><a href="../ref/build_unix/small.html#--enable-smallbuild">--enable-smallbuild</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutex=MUTEX">--with-mutex=MUTEX</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-mutexalign=ALIGNMENT">--with-mutexalign=ALIGNMENT</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-rpm=ARCHIVE">--with-rpm=ARCHIVE</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
+<tr><td align=right>Configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
+<tr><td align=right>configuring Berkeley DB </td><td><a href="../ref/build_unix/conf.html#7">1.85</a> API compatibility</td></tr>
+<tr><td align=right>building a utility to dump Berkeley DB </td><td><a href="../ref/build_unix/conf.html#9">1.85</a> databases</td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.2.0/intro.html#2">2.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.0/intro.html#2">3.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.1/intro.html#2">3.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.2/intro.html#2">3.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.3.3/intro.html#2">3.3</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.0/intro.html#2">4.0</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.1/intro.html#2">4.1</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/cksum.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/client.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/del.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/intro.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/java.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/lockng.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/nosync.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/priority.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/queue.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/repinit.html#2">4.2</a></td></tr>
+<tr><td align=right>Upgrading to release </td><td><a href="../ref/upgrade.4.2/verify.html#2">4.2</a></td></tr>
+<tr><td align=right>selecting an </td><td><a href="../ref/am_conf/select.html#2">access</a> method</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#2">access</a> method FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/tune.html#2">access</a> method tuning</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/am_conf/intro.html#2">access</a> methods</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/aix.html#2">AIX</a></td></tr>
+<tr><td align=right>data </td><td><a href="../ref/am_misc/align.html#2">alignment</a></td></tr>
+<tr><td align=right>programmatic </td><td><a href="../ref/arch/apis.html#2">APIs</a></td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/archival.html#4">backup</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_bind.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/cs_bdb_collection.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/overview.html#2">BDB</a></td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_remove.html#2">berkdb</a> dbremove</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_rename.html#2">berkdb</a> dbrename</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/env_open.html#2">berkdb</a> env</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/env_remove.html#2">berkdb</a> envremove</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_open.html#2">berkdb</a> open</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/version.html#2">berkdb</a> version</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#4">buffer</a> pool subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#3">building</a> for QNX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/intro.html#2">building</a> for UNIX</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/notes.html#2">building</a> for UNIX FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/intro.html#2">building</a> for VxWorks</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/introae.html#2">building</a> for VxWorks AE</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/faq.html#2">building</a> for VxWorks FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/intro.html#2">building</a> for Win32</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/faq.html#2">building</a> for Windows FAQ</td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/byteorder.html#2">byte</a> order</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#8">C++</a> API</td></tr>
+<tr><td align=right>flushing the database </td><td><a href="../ref/am/sync.html#2">cache</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/cachesize.html#2">cache</a> size</td></tr>
+<tr><td align=right>introduction to the memory </td><td><a href="../ref/mp/intro.html#3">cache</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/archival.html#3">catastrophic</a> recovery</td></tr>
<tr><td align=right>Patches, Updates and </td><td><a href="http://www.sleepycat.com/update/index.html">Change</a> logs</td></tr>
-<tr><td align=right> utility to take </td><td><a href="../utility/db_checkpoint.html#3">checkpoints</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
-<tr><td align=right> specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
-<tr><td align=right> changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
-<tr><td align=right> </td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> recovering </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
-<tr><td align=right> closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
-<tr><td align=right> deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
-<tr><td align=right> duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
-<tr><td align=right> retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
-<tr><td align=right> storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/stability.html#2">cursor</a> stability</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
-<tr><td align=right> utility to upgrade </td><td><a href="../utility/db_upgrade.html#3">database</a> files</td></tr>
-<tr><td align=right> utility to verify </td><td><a href="../utility/db_verify.html#3">database</a> files</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_close.html#2">db</a> close</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/dbc_close.html#2">db</a> close</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_count.html#2">db</a> count</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_cursor.html#2">db</a> cursor</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_del.html#2">db</a> del</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/dbc_del.html#2">db</a> del</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/dbc_dup.html#2">db</a> dup</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_get.html#2">db</a> get</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/dbc_get.html#2">db</a> get</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_get_join.html#2">db</a> get_join</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_get_type.html#2">db</a> get_type</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_is_byteswapped.html#2">db</a> is_byteswapped</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_join.html#2">db</a> join</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_put.html#2">db</a> put</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_stat.html#2">db</a> stat</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/db_sync.html#2">db</a> sync</td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_archive.html#2">db_archive</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/dbc_put.html#2">dbc</a> put</td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_checkpoint.html#2">db_checkpoint</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_deadlock.html#2">db_deadlock</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_dump.html#2">db_dump</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
-<tr><td align=right>File naming</td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_load.html#2">db_load</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_printlog.html#2">db_printlog</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_recover.html#2">db_recover</a></td></tr>
-<tr><td align=right>Error returns to applications</td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_stat.html#2">db_stat</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_upgrade.html#2">db_upgrade</a></td></tr>
-<tr><td align=right> </td><td><a href="../utility/db_verify.html#2">db_verify</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
-<tr><td align=right> utility to detect </td><td><a href="../utility/db_deadlock.html#3">deadlocks</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--disable-bigfile">--disable-bigfile</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/diskspace.html#2">disk</a> space requirements</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_dump.html#3">dump</a> databases as text files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#9">dynamic</a> shared libraries</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-compat185">--enable-compat185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-cxx">--enable-cxx</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug">--enable-debug</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dump185">--enable-dump185</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-dynamic">--enable-dynamic</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-java">--enable-java</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-rpc">--enable-rpc</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-shared">--enable-shared</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-tcl">--enable-tcl</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-test">--enable-test</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a></td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a></td></tr>
-<tr><td align=right> byte </td><td><a href="../ref/program/byteorder.html#3">endian</a></td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/env_close.html#2">env</a> close</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/txn.html#2">env</a> txn</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/error.html#2">error</a> handling</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#2">/etc/magic</a></td></tr>
-<tr><td align=right> selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
-<tr><td align=right> Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
-<tr><td align=right> configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
-<tr><td align=right> </td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
-<tr><td align=right> recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
-<tr><td align=right> remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
-<tr><td align=right> page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
-<tr><td align=right> specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
-<tr><td align=right> </td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am/join.html#2">join</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/program/dbsizes.html#2">limits</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
-<tr><td align=right> changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_load.html#3">load</a> text files into databases</td></tr>
-<tr><td align=right> standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
-<tr><td align=right> page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
-<tr><td align=right> two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/intro.html#2">locking</a> introduction</td></tr>
-<tr><td align=right> sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
-<tr><td align=right> </td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
-<tr><td align=right> utility to display </td><td><a href="../utility/db_printlog.html#3">log</a> files as text</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/log/intro.html#2">logging</a> introduction</td></tr>
-<tr><td align=right> </td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
-<tr><td align=right> Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
-<tr><td align=right> file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
-<tr><td align=right> retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
-<tr><td align=right> selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/partial.html#2">partial</a> record storage and retrieval</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curclose.html#2">closing</a> a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/close.html#2">closing</a> a database</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/faq.html#3">compaction</a></td></tr>
+<tr><td align=right>specifying a Btree </td><td><a href="../ref/am_conf/bt_compare.html#2">comparison</a> function</td></tr>
+<tr><td align=right>changing </td><td><a href="../ref/build_unix/flags.html#2">compile</a> or load options</td></tr>
+<tr><td align=right></td><td><a href="../ref/cam/intro.html#2">Concurrent</a> Data Store</td></tr>
+<tr><td align=right>database environment </td><td><a href="../ref/env/db_config.html#3">configuration</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/conf.html#2">configuring</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right>salvaging </td><td><a href="../ref/am/verify.html#4">corrupted</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/count.html#2">counting</a> data items for a key</td></tr>
+<tr><td align=right>closing a </td><td><a href="../ref/am/curclose.html#3">cursor</a></td></tr>
+<tr><td align=right>deleting records with a </td><td><a href="../ref/am/curdel.html#3">cursor</a></td></tr>
+<tr><td align=right>duplicating a </td><td><a href="../ref/am/curdup.html#3">cursor</a></td></tr>
+<tr><td align=right>retrieving records with a </td><td><a href="../ref/am/curget.html#3">cursor</a></td></tr>
+<tr><td align=right>storing records with a </td><td><a href="../ref/am/curput.html#3">cursor</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#2">cursor</a> stability</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/cursor.html#2">cursors</a></td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_close.html#2">db</a> close</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/dbc_close.html#2">db</a> close</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_count.html#2">db</a> count</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_cursor.html#2">db</a> cursor</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_del.html#2">db</a> del</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/dbc_del.html#2">db</a> del</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/dbc_dup.html#2">db</a> dup</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_get.html#2">db</a> get</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/dbc_get.html#2">db</a> get</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_get_join.html#2">db</a> get_join</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_get_type.html#2">db</a> get_type</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_is_byteswapped.html#2">db</a> is_byteswapped</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_join.html#2">db</a> join</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_put.html#2">db</a> put</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_stat.html#2">db</a> stat</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_sync.html#2">db</a> sync</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/db_truncate.html#2">db</a> truncate</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/dbc_put.html#2">dbc</a> put</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/db_config.html#2">DB_CONFIG</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#DB_HOME">DB_HOME</a></td></tr>
+<tr><td align=right>File naming </td><td><a href="../ref/env/naming.html#db_home">db_home</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_KEYEXIST">DB_KEYEXIST</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#4">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a></td></tr>
+<tr><td align=right>Error returns to applications </td><td><a href="../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/dead.html#2">deadlocks</a></td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/debug/intro.html#2">debugging</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/debug/common.html#2">debugging</a> applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/stability.html#4">degrees</a> of isolation</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/delete.html#2">deleting</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdel.html#2">deleting</a> records with a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#4">dirty</a> reads</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/diskspace.html#2">disk</a> space requirements</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#2">Distributed</a> Transactions</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/faq.html#5">double</a> buffering</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/dup.html#2">duplicate</a> data items</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curdup.html#2">duplicating</a> a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#3">emptying</a> a database</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/encrypt.html#2">encryption</a></td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/env_close.html#2">env</a> close</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/env_dbremove.html#2">env</a> dbremove</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/env_dbrename.html#2">env</a> dbrename</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/txn.html#2">env</a> txn</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/txn_checkpoint.html#2">env</a> txn_checkpoint</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/create.html#2">environment</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/env/faq.html#2">environment</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/environ.html#2">environment</a> variables</td></tr>
+<tr><td align=right>introduction to database </td><td><a href="../ref/env/intro.html#2">environments</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#2">equality</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/error.html#2">error</a> handling</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#3">error</a> name space</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/errorret.html#2">error</a> returns</td></tr>
+<tr><td align=right>selecting a Queue </td><td><a href="../ref/am_conf/extentsize.html#2">extent</a> size</td></tr>
+<tr><td align=right>hot </td><td><a href="../ref/transapp/hotfail.html#2">failover</a></td></tr>
+<tr><td align=right>Java API </td><td><a href="../ref/bdb/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Java </td><td><a href="../ref/java/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>Tcl </td><td><a href="../ref/tcl/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/faq.html#2">FAQ</a></td></tr>
+<tr><td align=right>configuring without large </td><td><a href="../ref/build_unix/conf.html#4">file</a> support</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/file.html#3">file</a> utility</td></tr>
+<tr><td align=right>returning pages to the </td><td><a href="../ref/am_misc/faq.html#4">filesystem</a></td></tr>
+<tr><td align=right>recovery and </td><td><a href="../ref/transapp/filesys.html#2">filesystem</a> operations</td></tr>
+<tr><td align=right>remote </td><td><a href="../ref/env/remote.html#2">filesystems</a></td></tr>
+<tr><td align=right>page </td><td><a href="../ref/am_conf/h_ffactor.html#2">fill</a> factor</td></tr>
+<tr><td align=right>configuring a small memory </td><td><a href="../ref/build_unix/conf.html#12">footprint</a> library</td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/program/scope.html#3">free-threaded</a> handles</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/freebsd.html#2">FreeBSD</a></td></tr>
+<tr><td align=right>specifying a database </td><td><a href="../ref/am_conf/h_hash.html#2">hash</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/h_nelem.html#2">hash</a> table size</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/hpux.html#2">HP-UX</a></td></tr>
+<tr><td align=right>secondary </td><td><a href="../ref/am/second.html#3">indices</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/install.html#2">installing</a> Berkeley DB for UNIX systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/compatible.html#2">interface</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/irix.html#2">IRIX</a></td></tr>
+<tr><td align=right>degrees of </td><td><a href="../ref/am_misc/stability.html#5">isolation</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#10">Java</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb/faq.html#3">Java</a> API FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/compat.html#2">Java</a> compatibility</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/conf.html#2">Java</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/java/faq.html#3">Java</a> FAQ</td></tr>
+<tr><td align=right>equality </td><td><a href="../ref/am/join.html#3">join</a></td></tr>
+<tr><td align=right>retrieved </td><td><a href="../ref/am_misc/perm.html#3">key/data</a> permanence</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am_misc/dbsizes.html#2">limits</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/linux.html#2">Linux</a></td></tr>
+<tr><td align=right>changing compile or </td><td><a href="../ref/build_unix/flags.html#3">load</a> options</td></tr>
+<tr><td align=right>standard </td><td><a href="../ref/lock/stdmode.html#2">lock</a> modes</td></tr>
+<tr><td align=right>page-level </td><td><a href="../ref/lock/page.html#2">locking</a></td></tr>
+<tr><td align=right>two-phase </td><td><a href="../ref/lock/twopl.html#2">locking</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/nondb.html#2">locking</a> and non-Berkeley DB applications</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/config.html#2">locking</a> configuration</td></tr>
+<tr><td align=right>Berkeley DB Transactional Data Store </td><td><a href="../ref/lock/am_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right>Berkeley DB Concurrent Data Store </td><td><a href="../ref/lock/cam_conv.html#2">locking</a> conventions</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/page.html#3">locking</a> granularity</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/lock/intro.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right>sizing the </td><td><a href="../ref/lock/max.html#2">locking</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/lock/notxn.html#2">locking</a> without transactions</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/limits.html#2">log</a> file limits</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/logfile.html#2">log</a> file removal</td></tr>
+<tr><td align=right></td><td><a href="../ref/log/config.html#2">logging</a> configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/log/intro.html#2">logging</a> subsystem</td></tr>
+<tr><td align=right>retrieving Btree records by </td><td><a href="../ref/am_conf/bt_recnum.html#3">logical</a> record @number</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/macosx.html#2">Mac</a> OS X</td></tr>
+<tr><td align=right></td><td><a href="../ref/mp/config.html#2">memory</a> pool configuration</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/mp/intro.html#2">memory</a> pool subsystem</td></tr>
+<tr><td align=right>configuring for </td><td><a href="../ref/build_win/faq.html#4">MinGW</a></td></tr>
+<tr><td align=right>Berkeley DB library </td><td><a href="../ref/program/namespace.html#2">name</a> spaces</td></tr>
+<tr><td align=right>file </td><td><a href="../ref/env/naming.html#2">naming</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/join.html#4">natural</a> join</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/remote.html#3">NFS</a> problems</td></tr>
+<tr><td align=right>retrieving Btree records by logical record </td><td><a href="../ref/am_conf/bt_recnum.html#2">number</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/open.html#2">opening</a> a database</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/osf1.html#2">OSF/1</a></td></tr>
+<tr><td align=right>selecting a </td><td><a href="../ref/am_conf/pagesize.html#2">page</a> size</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/partial.html#2">partial</a> record storage and retrieval</td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/update/index.html">Patches,</a> Updates and Change logs</td></tr>
-<tr><td align=right> </td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
-<tr><td align=right> Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
-<tr><td align=right> logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
-<tr><td align=right> managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
-<tr><td align=right> logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_recover.html#3">recover</a> database environments</td></tr>
-<tr><td align=right> Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
-<tr><td align=right> configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
-<tr><td align=right> utility to support </td><td><a href="../utility/berkeley_db_svc.html#3">RPC</a> client/server</td></tr>
-<tr><td align=right> </td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
-<tr><td align=right> Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/env/security.html#2">security</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/sendmail/intro.html#2">Sendmail</a></td></tr>
-<tr><td align=right> configuring </td><td><a href="../ref/build_unix/conf.html#8">shared</a> libraries</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
-<tr><td align=right> application </td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
+<tr><td align=right></td><td><a href="../ref/perl/intro.html#2">Perl</a></td></tr>
+<tr><td align=right>retrieved key/data </td><td><a href="../ref/am_misc/perm.html#2">permanence</a></td></tr>
+<tr><td align=right>task/thread </td><td><a href="../ref/program/faq.html#2">priority</a></td></tr>
+<tr><td align=right>Sleepycat Software's Berkeley DB </td><td><a href="../ref/intro/products.html#2">products</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#5">QNX</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/qnx.html#2">QNX</a></td></tr>
+<tr><td align=right>dirty </td><td><a href="../ref/transapp/read.html#3">reads</a></td></tr>
+<tr><td align=right>logical </td><td><a href="../ref/am_conf/logrec.html#2">record</a> numbers</td></tr>
+<tr><td align=right>managing </td><td><a href="../ref/am_conf/recno.html#2">record-based</a> databases</td></tr>
+<tr><td align=right>logically renumbering </td><td><a href="../ref/am_conf/renumber.html#2">records</a></td></tr>
+<tr><td align=right>Berkeley DB </td><td><a href="../ref/transapp/reclimit.html#2">recoverability</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/read.html#2">repeatable</a> read</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rep/intro.html#2">replication</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right>XA </td><td><a href="../ref/xa/xa_intro.html#3">Resource</a> Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/get.html#2">retrieving</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_misc/get_bulk.html#2">retrieving</a> records in bulk</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curget.html#2">retrieving</a> records with a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/client.html#2">RPC</a> client</td></tr>
+<tr><td align=right>configuring a </td><td><a href="../ref/build_unix/conf.html#11">RPC</a> client/server</td></tr>
+<tr><td align=right>introduction to </td><td><a href="../ref/rpc/intro.html#2">rpc</a> client/server</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/faq.html#2">RPC</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/rpc/server.html#2">RPC</a> server</td></tr>
+<tr><td align=right></td><td><a href="../ref/install/rpm.html#2">RPM</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#3">salvage</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sco.html#2">SCO</a></td></tr>
+<tr><td align=right>Berkeley DB handle </td><td><a href="../ref/program/scope.html#2">scope</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/second.html#2">secondary</a> indices</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/security.html#2">security</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#5">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/shlib.html#2">shared</a> libraries</td></tr>
+<tr><td align=right></td><td><a href="../ref/program/appsignals.html#2">signal</a> handling</td></tr>
<tr><td align=right></td><td><a href="http://www.sleepycat.com/">Sleepycat</a> Software</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
-<tr><td align=right> cursor </td><td><a href="../ref/am/stability.html#3">stability</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
-<tr><td align=right> utility to display database and environment </td><td><a href="../utility/db_stat.html#3">statistics</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
-<tr><td align=right> loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
-<tr><td align=right> using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#12">Tcl</a> API</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
-<tr><td align=right> </td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
-<tr><td align=right> configuring the </td><td><a href="../ref/build_unix/conf.html#13">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
-<tr><td align=right> running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
-<tr><td align=right> loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
-<tr><td align=right> dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
-<tr><td align=right> building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
-<tr><td align=right> </td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
-<tr><td align=right> administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
-<tr><td align=right> </td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
-<tr><td align=right> Berkeley DB and </td><td><a href="../ref/txn/intro.html#2">transactions</a></td></tr>
-<tr><td align=right> nested </td><td><a href="../ref/txn/nested.html#2">transactions</a></td></tr>
-<tr><td align=right> configuring Berkeley DB with the </td><td><a href="../ref/xa/config.html#2">Tuxedo</a> System</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/txn_abort.html#2">txn</a> abort</td></tr>
-<tr><td align=right> </td><td><a href="../api_tcl/txn_commit.html#2">txn</a> commit</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
-<tr><td align=right> configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/solaris.html#2">Solaris</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/distrib/layout.html#2">source</a> code layout</td></tr>
+<tr><td align=right>cursor </td><td><a href="../ref/am_misc/stability.html#3">stability</a></td></tr>
+<tr><td align=right>disabling </td><td><a href="../ref/build_unix/conf.html#6">static</a> libraries</td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/stat.html#2">statistics</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/put.html#2">storing</a> records</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/curput.html#2">storing</a> records with a cursor</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/sunos.html#2">SunOS</a></td></tr>
+<tr><td align=right>loading Berkeley DB with </td><td><a href="../ref/tcl/intro.html#2">Tcl</a></td></tr>
+<tr><td align=right>using Berkeley DB with </td><td><a href="../ref/tcl/using.html#2">Tcl</a></td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#13">Tcl</a> API</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/program.html#2">Tcl</a> API programming notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/tcl/faq.html#3">Tcl</a> FAQ</td></tr>
+<tr><td align=right>configuring the </td><td><a href="../ref/build_unix/conf.html#14">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/test/run.html#2">test</a> suite</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_unix/test.html#2">test</a> suite under UNIX</td></tr>
+<tr><td align=right>running the </td><td><a href="../ref/build_win/test.html#2">test</a> suite under Windows</td></tr>
+<tr><td align=right></td><td><a href="../ref/am_conf/re_source.html#2">text</a> backing files</td></tr>
+<tr><td align=right>loading </td><td><a href="../ref/dumpload/text.html#2">text</a> into databases</td></tr>
+<tr><td align=right>dumping/loading </td><td><a href="../ref/dumpload/utility.html#2">text</a> to/from databases</td></tr>
+<tr><td align=right>building </td><td><a href="../ref/program/mt.html#2">threaded</a> applications</td></tr>
+<tr><td align=right>lock </td><td><a href="../ref/lock/timeout.html#2">timeouts</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/lock/timeout.html#3">timeouts</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/config.html#2">transaction</a> configuration</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/faq.html#2">transaction</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/txn/limits.html#2">transaction</a> limits</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/build.html#2">Transaction</a> Manager</td></tr>
+<tr><td align=right>administering </td><td><a href="../ref/transapp/admin.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>archival in </td><td><a href="../ref/transapp/archival.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>checkpoints in </td><td><a href="../ref/transapp/checkpoint.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>deadlock detection in </td><td><a href="../ref/transapp/deadlock.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>recovery in </td><td><a href="../ref/transapp/recovery.html#2">transaction</a> protected applications</td></tr>
+<tr><td align=right>introduction to the </td><td><a href="../ref/txn/intro.html#2">transaction</a> subsystem</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/throughput.html#2">transaction</a> throughput</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/tune.html#2">transaction</a> tuning</td></tr>
+<tr><td align=right></td><td><a href="../ref/transapp/intro.html#2">Transactional</a> Data Store</td></tr>
+<tr><td align=right>nested </td><td><a href="../ref/transapp/nested.html#2">transactions</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/am/truncate.html#2">truncating</a> a database</td></tr>
+<tr><td align=right>access method </td><td><a href="../ref/am_misc/tune.html#3">tuning</a></td></tr>
+<tr><td align=right>transaction </td><td><a href="../ref/transapp/tune.html#3">tuning</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/catalog.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/env.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/except.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/keyvalue.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/main.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/stores.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/transact.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_basic/write.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/bindings.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/classes.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_entity/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/foreign.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/read.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/second.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_index/views.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/binding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/class.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_sentity/remove.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/extract.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/format.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/sorted.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tuple/tsbinding.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right></td><td><a href="../ref/bdb_tut/summary.html#2">tutorial</a></td></tr>
+<tr><td align=right>simple </td><td><a href="../ref/simple_tut/intro.html#2">tutorial</a></td></tr>
+<tr><td align=right>configuring Berkeley DB with the </td><td><a href="../ref/xa/xa_config.html#2">Tuxedo</a> System</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/txn_abort.html#2">txn</a> abort</td></tr>
+<tr><td align=right></td><td><a href="../api_tcl/txn_commit.html#2">txn</a> commit</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_unix/ultrix.html#2">Ultrix</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/intro.html#4">UNIX</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_unix/notes.html#3">UNIX</a> FAQ</td></tr>
+<tr><td align=right>configuring Berkeley DB for </td><td><a href="../ref/build_unix/conf.html#3">UNIX</a> systems</td></tr>
<tr><td align=right>Patches, </td><td><a href="http://www.sleepycat.com/update/index.html">Updates</a> and Change logs</td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_upgrade.html#4">upgrade</a> database files</td></tr>
-<tr><td align=right> </td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
-<tr><td align=right> </td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
-<tr><td align=right> database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
-<tr><td align=right> utility to </td><td><a href="../utility/db_verify.html#4">verify</a> database files</td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
-<tr><td align=right> running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
-<tr><td align=right> building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
-<tr><td align=right> </td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
-<tr><td align=right>Configuring Berkeley DB</td><td><a href="../ref/build_unix/conf.html#--with-tcl=DIR">--with-tcl=DIR</a></td></tr>
-<tr><td align=right> </td><td><a href="../ref/xa/intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/am/upgrade.html#2">upgrading</a> databases</td></tr>
+<tr><td align=right></td><td><a href="../ref/arch/utilities.html#2">utilities</a></td></tr>
+<tr><td align=right>database </td><td><a href="../ref/am/verify.html#2">verification</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_vxworks/faq.html#3">VxWorks</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_vxworks/notes.html#2">VxWorks</a> notes</td></tr>
+<tr><td align=right>running the test suite under </td><td><a href="../ref/build_win/test.html#3">Windows</a></td></tr>
+<tr><td align=right>building for </td><td><a href="../ref/build_win/faq.html#3">Windows</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/build_win/notes.html#2">Windows</a> notes</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/faq.html#3">XA</a> FAQ</td></tr>
+<tr><td align=right></td><td><a href="../ref/xa/xa_intro.html#2">XA</a> Resource Manager</td></tr>
+<tr><td align=right></td><td><a href="../ref/env/region.html#2">__db.001</a></td></tr>
</table>
</center>
<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
diff --git a/db/docs/api_tcl/txn.html b/db/docs/api_tcl/txn.html
index 4e66a96a6..448d8fafe 100644
--- a/db/docs/api_tcl/txn.html
+++ b/db/docs/api_tcl/txn.html
@@ -1,21 +1,23 @@
-<!--$Id: txn.so,v 11.12 2000/02/19 20:57:57 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn.so,v 11.17 2003/10/18 19:16:24 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: env txn</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>env</i> <b>txn</b></h1>
+<h3><i>env</i> <b>txn</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -25,38 +27,39 @@
[-parent txnid]
[-sync]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(env txn)</h3>
<p>The <i>env</i> <b>txn</b> command begins a transaction. The returned transaction
-handle is bound to a Tcl command of the form <b>env.txnX</b>, where X
-is an integer starting at 0 (e.g., env0.txn0 and env0.txn1). It is
-through this Tcl command that the script accesses the transaction methods.
-<p>The options are as follows:
+handle is bound to a Tcl command of the form <b>env.txnX</b>, where
+X is an integer starting at 0 (for example, env0.txn0 and env0.txn1).
+It is through this Tcl command that the script accesses the transaction
+methods.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-nosync<dd>Do not synchronously flush the log when this transaction commits or
prepares. This means the transaction will exhibit the ACI (atomicity,
-consistency and isolation) properties, but not D (durability), i.e.,
-database integrity will be maintained but it is possible that this
+consistency, and isolation) properties, but not D (durability); that
+is, database integrity will be maintained, but it is possible that this
transaction may be undone during recovery instead of being redone.
-<p>This behavior may be set for an entire Berkeley DB environment as part of
-the <b>berkdb env</b> interface.
+<p>This behavior may be set for an entire Berkeley DB environment as part of the
+<b>berkdb env</b> call.</p>
<p><dt>-nowait<dd>If a lock is unavailable for any Berkeley DB operation performed in the context
of this transaction, throw a Tcl error immediately instead of blocking on
the lock.
<p><dt>-parent txnid<dd>Create the new transaction as a nested transaction, with the specified
transaction indicated as its parent. Transactions may be nested to any
level.
-<p><dt>-sync<dd>Synchronously flush the log when this transaction commits or prepares. This
-means the transaction will exhibit all of the ACID (atomicity, consistency
-and isolation and durability) properties.
+<p><dt>-sync<dd>Synchronously flush the log when this transaction commits or prepares.
+This means the transaction will exhibit all of the ACID (atomicity,
+consistency, isolation, and durability) properties.
<p>This behavior is the default for Berkeley DB environments unless the
-<b>-nosync</b> option was specified to the <b>berkdb env</b> interface.
+<b>-nosync</b> option was specified to the <b>berkdb env</b> call.</p>
</dl>
-<p>The <i>env</i> <b>txn</b> command returns a transaction handle on success.
-<p>In the case of error, a Tcl error is thrown.
+<p>The <i>env</i> <b>txn</b> command returns a transaction handle on success.</p>
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/txn_abort.html b/db/docs/api_tcl/txn_abort.html
index 8b147883f..21fb840f2 100644
--- a/db/docs/api_tcl/txn_abort.html
+++ b/db/docs/api_tcl/txn_abort.html
@@ -1,45 +1,47 @@
-<!--$Id: txn_abort.so,v 11.12 2000/06/28 14:30:15 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_abort.so,v 11.15 2002/08/18 21:17:30 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: txn abort</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>txn</i> <b>abort</b></h1>
+<h3><i>txn</i> <b>abort</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>txn abort
</pre></h3>
-<h1>Description</h1>
+<h3>Description(txn abort)</h3>
<p>The <i>txn</i> <b>abort</b> command causes an abnormal termination of the
-transaction.
-<p>The log is played backwards and any necessary recovery operations are
+transaction.</p>
+<p>The log is played backward, and any necessary recovery operations are
performed. After recovery is completed, all locks held by the
transaction are acquired by the parent transaction in the case of a
-nested transaction or released in the case of a non-nested transaction.
+nested transaction, or released in the case of a non-nested transaction.
As is the case for <i>txn</i> <b>commit</b>, applications that require strict
-two-phase locking should not explicitly release any locks.
+two-phase locking should not explicitly release any locks.</p>
<p>In the case of nested transactions, aborting the parent transaction
-causes all children of that transaction to be aborted.
-<p>Once <i>txn</i> <b>abort</b> has been called, regardless of its return, the
-<b>txn</b> handle may not be accessed again.
+causes all children of that transaction to be aborted.</p>
+<p>After <i>txn</i> <b>abort</b> has been called, regardless of its return, the
+<b>txn</b> handle may not be accessed again.</p>
<p>The <i>txn</i> <b>abort</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/txn_checkpoint.html b/db/docs/api_tcl/txn_checkpoint.html
new file mode 100644
index 000000000..5219b9097
--- /dev/null
+++ b/db/docs/api_tcl/txn_checkpoint.html
@@ -0,0 +1,46 @@
+<!--$Id: txn_checkpoint.so,v 11.1 2003/09/02 14:38:51 sue Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB: env txn_checkpoint</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td>
+<h3><i>env</i> <b>txn_checkpoint</b></h3>
+</td>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<hr size=1 noshade>
+<tt>
+<h3><pre>env txn_checkpoint
+ [-force]
+ [-kbyte kb]
+ [-min minutes]
+</pre></h3>
+<h3>Description(env txn_checkpoint)</h3>
+<p>The <i>env</i> <b>txn_checkpoint</b> command writes a checkpoint.</p>
+<p>The options are as follows:</p>
+<p><dl compact>
+<p><dt>-force<dd>The checkpoint will occur regardless of activity level.
+<p><dt>-kbyte kb<dd>The checkpoint will occur only if at least the specified number
+of kilobytes of log data has been written since the last checkpoint.
+<p><dt>-min minutes<dd>The checkpoint will occur only if at least the specified number
+of minutes has passed since the last checkpoint.
+</dl>
+<p>In the case of error, a Tcl error is thrown.</p>
+</tt>
+<table width="100%"><tr><td><br></td><td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/api_tcl/txn_commit.html b/db/docs/api_tcl/txn_commit.html
index acd1f2d1b..91c7afdd4 100644
--- a/db/docs/api_tcl/txn_commit.html
+++ b/db/docs/api_tcl/txn_commit.html
@@ -1,21 +1,23 @@
-<!--$Id: txn_commit.so,v 11.14 2000/06/28 14:30:15 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_commit.so,v 11.19 2003/10/18 19:16:24 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: txn commit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><i>txn</i> <b>commit</b></h1>
+<h3><i>txn</i> <b>commit</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
@@ -23,46 +25,47 @@
[-nosync]
[-sync]
</pre></h3>
-<h1>Description</h1>
-<p>The <i>txn</i> <b>commit</b> command ends the transaction.
+<h3>Description(txn commit)</h3>
+<p>The <i>txn</i> <b>commit</b> command ends the transaction. </p>
<p>In the case of nested transactions, if the transaction is a parent
transaction with unresolved (neither committed or aborted) child
transactions, the child transactions are aborted and the commit of the
-parent will succeed.
+parent will succeed.</p>
<p>In the case of nested transactions, if the transaction is a child
transaction, its locks are not released, but are acquired by its parent.
-While the commit of the child transaction will succeed, the actual
+Although the commit of the child transaction will succeed, the actual
resolution of the child transaction is postponed until the parent
-transaction is committed or aborted, i.e., if its parent transaction
+transaction is committed or aborted; that is, if its parent transaction
commits, it will be committed, and if its parent transaction aborts, it
-will be aborted.
+will be aborted.</p>
<p>If the <b>-nosync</b> option is not specified, a commit log record is
-written and flushed to disk, as are all previously written log records.
-<p>The options are as follows:
+written and flushed to disk, as are all previously written log records.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-nosync<dd>Do not synchronously flush the log. This means the transaction will
-exhibit the ACI (atomicity, consistency and isolation) properties, but
-not D (durability), i.e., database integrity will be maintained but it is
-possible that this transaction may be undone during recovery instead of
-being redone.
+exhibit the ACI (atomicity, consistency, and isolation) properties, but
+not D (durability); that is, database integrity will be maintained, but
+it is possible that this transaction may be undone during recovery
+instead of being redone.
<p>This behavior may be set for an entire Berkeley DB environment as part of
-the <b>berkdb env</b> interface.
-<p><dt>-sync<dd>Synchronously flush the log. This means the transaction will exhibit all of
-the ACID (atomicity, consistency and isolation and durability) properties.
+the <b>berkdb env</b> call.</p>
+<p><dt>-sync<dd>Synchronously flush the log. This means the transaction will exhibit
+all of the ACID (atomicity, consistency, isolation and durability)
+properties.
<p>This behavior is the default for Berkeley DB environments unless the
<b>-nosync</b> option was specified to the <b>berkdb env</b> or
-<i>env</i> <b>txn</b> interfaces.
+<i>env</i> <b>txn</b> calls.</p>
</dl>
-<p>Once <i>txn</i> <b>commit</b> has been called, regardless of its return, the
+<p>After <i>txn</i> <b>commit</b> has been called, regardless of its return, the
<b>txn</b> handle may not be accessed again. If <i>txn</i> <b>commit</b>
-encounters an error, then this transaction and all child transactions
-of this transaction are aborted.
+encounters an error, this transaction and all child transactions of this
+transaction are aborted.</p>
<p>The <i>txn</i> <b>commit</b> command returns 0 on success, and in the case of error, a Tcl error
-is thrown.
+is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/api_tcl/version.html b/db/docs/api_tcl/version.html
index ab4b901f1..a3c989582 100644
--- a/db/docs/api_tcl/version.html
+++ b/db/docs/api_tcl/version.html
@@ -1,39 +1,41 @@
-<!--$Id: version.so,v 11.10 1999/12/20 08:52:35 bostic Exp $-->
-<!--$Id: m4.tcl,v 11.17 2000/04/24 17:31:11 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: version.so,v 11.12 2002/08/18 21:17:30 bostic Exp $-->
+<!--$Id: m4.tcl,v 11.26 2003/09/02 14:38:50 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkdb version</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1><b>berkdb version</b></h1>
+<h3><b>berkdb version</b></h3>
</td>
-<td width="1%">
-<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
+<td align=right>
+<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a>
+<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>berkdb version
[-string]
</pre></h3>
-<h1>Description</h1>
+<h3>Description(berkdb version)</h3>
<p>Return a list of the form {major minor patch} for the major, minor and
-patch levels of the underlying Berkeley DB release.
-<p>The options are as follows:
+patch levels of the underlying Berkeley DB release.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt>-string<dd>Return a string with formatted Berkeley DB version information.
</dl>
-<p>In the case of error, a Tcl error is thrown.
+<p>In the case of error, a Tcl error is thrown.</p>
</tt>
-<table><tr><td><br></td><td width="1%">
+<table width="100%"><tr><td><br></td><td align=right>
<a href="../api_tcl/tcl_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/images/sleepycat.gif b/db/docs/images/sleepycat.gif
index 5e768f74f..852703742 100644
--- a/db/docs/images/sleepycat.gif
+++ b/db/docs/images/sleepycat.gif
Binary files differ
diff --git a/db/docs/index.html b/db/docs/index.html
index ad638e776..f9ecf1835 100644
--- a/db/docs/index.html
+++ b/db/docs/index.html
@@ -1,44 +1,42 @@
-<!--$Id: index.html,v 1.11 2000/11/22 21:40:34 bostic Exp $-->
+<!--$Id: index_db.html,v 1.51 2003/11/27 18:25:53 bostic Exp $-->
<html>
<head>
-<title>Berkeley DB (Version: 3.2.9)</title>
+<title>Berkeley DB (Version: 4.2.52)</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
</head>
<body bgcolor=white>
<p align=center>
<img src="images/sleepycat.gif" alt="Sleepycat Software Inc.">
-<p align=right>
-<font size="+1">... <i>the embedded database company</i></font><sup>tm</sup>
+</p>
-<p><br>
-<p><br>
-<center><h1><b>Berkeley DB</b></h1></center>
+<center>
+<h1><b>Berkeley DB</b></h1>
+</center>
<p>
<table align=center cellpadding=4 border=2>
<tr>
- <th align=center width="50%">Interface Documentation</th>
+ <th align=center width="50%">API Documentation</th>
<th align=center width="50%">Building Berkeley DB</th>
</tr><tr valign=top>
<td>
- <a href="api_c/c_index.html">C API</a><br>
- <a href="api_c/c_pindex.html">C API Index</a><br>
+ <a href="api_c/api_index.html">C API</a><br>
+ <a href="api_c/c_pindex.html">C API Permuted Index</a><br>
<p>
- <a href="api_cxx/cxx_index.html">C++ API</a><br>
- <a href="api_cxx/cxx_pindex.html">C++ API Index</a><br>
+ <a href="api_cxx/api_index.html">C++ API</a><br>
+ <a href="api_cxx/cxx_pindex.html">C++ API Permuted Index</a><br>
<p>
- <a href="api_java/java_index.html">Java API</a><br>
- <a href="api_java/java_pindex.html">Java API Index</a><br>
+ <a href="java/index.html">Javadoc</a><br>
<p>
<a href="api_tcl/tcl_index.html">Tcl API</a><br>
</td><td>
- <a href="ref/build_unix/intro.html">Building for UNIX and QNX systems</a><br>
+ <a href="ref/build_unix/intro.html">Building for UNIX/POSIX systems</a><p>
+ <a href="ref/build_vxworks/intro.html">Building for VxWorks</a><p>
+ <a href="ref/build_win/intro.html">Building for Win32</a><br>
<p>
- <a href="ref/build_win/intro.html">Building for Win32 platforms</a><br>
- <p>
- <a href="ref/build_vxworks/intro.html">Building for VxWorks platforms</a><br>
- <p>
- <a href="ref/upgrade.3.2/intro.html">Upgrading Applications to the 3.2 release</a><br>
+ <a href="ref/upgrade.4.2/toc.html">Upgrading Applications to the 4.2 release</a><br>
</td>
</tr><tr valign=top>
@@ -46,15 +44,17 @@
<th align=center>Company and Product Information</th>
</tr><tr valign=top>
<td>
+ <a href="ref/debug/common.html">Troubleshooting common Berkeley DB problems</a>
+ <p>
<a href="utility/index.html">Supporting Utilities</a><br>
<p>
<a href="ref/toc.html">Programmer's Tutorial and Reference Guide</a><br>
</td><td>
<a href="sleepycat/contact.html">Contacting Sleepycat Software</a><br>
- <a href="ref/intro/products.html">Commercial Product List</a><br>
- <a href="sleepycat/license.html">License</a><br>
- <a href="http://www.sleepycat.com/update/index.html">Release Patches and Change Logs</a><br>
<a href="http://www.sleepycat.com">Sleepycat Software Home Page</a><br>
+ <a href="ref/intro/products.html">Sleepycat Software Product List</a><br>
+ <a href="http://www.sleepycat.com/update/index.html">Release Patches and Change Logs</a><br>
+ <a href="sleepycat/license.html">License</a>,&nbsp;&nbsp;<a href="sleepycat/legal.html">Legal Notices</a><br>
</td>
</tr>
@@ -62,14 +62,23 @@
<p>
<center><b>
-Version 3.2.9, January 24, 2001<br>
-Copyright 1997-2000 Sleepycat Software, Inc. All Rights Reserved
+Version 4.2.52, December 3, 2003<br>
+Copyright 1997-2003 Sleepycat Software, Inc. All Rights Reserved
</b></center>
-<p><br>
-<p><br>
-<p><br>
-<p><h5><a href="sleepycat/legal.html">Legal Notices</a></h5>
+<p>
+<hr size=1 noshade>
+
+<p>
+Berkeley DB releases optionally include strong cryptographic
+support; this release <b>DOES</b> contain cryptographic support.
+Export/import and/or use of cryptography software, or even
+communicating technical details about cryptography software, is
+illegal in some parts of the world. You are strongly advised to
+pay close attention to any export/import and/or use laws which
+apply to you when you import a release of Berkeley DB including
+cryptography to your country or re-distribute source code from
+it in any way.
</body>
</html>
diff --git a/db/docs/java/allclasses-frame.html b/db/docs/java/allclasses-frame.html
new file mode 100644
index 000000000..44d0539c5
--- /dev/null
+++ b/db/docs/java/allclasses-frame.html
@@ -0,0 +1,265 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html" TARGET="classFrame">ByteArrayBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html" TARGET="classFrame">ByteArrayFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html" TARGET="classFrame"><I>ClassCatalog</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/CurrentTransaction.html" TARGET="classFrame">CurrentTransaction</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataBinding.html" TARGET="classFrame"><I>DataBinding</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataBuffer.html" TARGET="classFrame"><I>DataBuffer</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataCursor.html" TARGET="classFrame">DataCursor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataDb.html" TARGET="classFrame">DataDb</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataFormat.html" TARGET="classFrame"><I>DataFormat</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataIndex.html" TARGET="classFrame">DataIndex</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataStore.html" TARGET="classFrame">DataStore</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataThang.html" TARGET="classFrame">DataThang</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataType.html" TARGET="classFrame"><I>DataType</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataView.html" TARGET="classFrame">DataView</A>
+<BR>
+<A HREF="com/sleepycat/db/Db.html" TARGET="classFrame">Db</A>
+<BR>
+<A HREF="com/sleepycat/db/DbAppDispatch.html" TARGET="classFrame"><I>DbAppDispatch</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbAppendRecno.html" TARGET="classFrame"><I>DbAppendRecno</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreeCompare.html" TARGET="classFrame"><I>DbBtreeCompare</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreePrefix.html" TARGET="classFrame"><I>DbBtreePrefix</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreeStat.html" TARGET="classFrame">DbBtreeStat</A>
+<BR>
+<A HREF="com/sleepycat/db/Dbc.html" TARGET="classFrame">Dbc</A>
+<BR>
+<A HREF="com/sleepycat/db/DbClient.html" TARGET="classFrame"><I>DbClient</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbDeadlockException.html" TARGET="classFrame">DbDeadlockException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbDupCompare.html" TARGET="classFrame"><I>DbDupCompare</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnv.html" TARGET="classFrame">DbEnv</A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html" TARGET="classFrame">DbEnv.RepProcessMessage</A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnvFeedback.html" TARGET="classFrame"><I>DbEnvFeedback</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html" TARGET="classFrame"><I>DbEnvFeedbackHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbErrcall.html" TARGET="classFrame"><I>DbErrcall</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbErrorHandler.html" TARGET="classFrame"><I>DbErrorHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbException.html" TARGET="classFrame">DbException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbFeedback.html" TARGET="classFrame"><I>DbFeedback</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbFeedbackHandler.html" TARGET="classFrame"><I>DbFeedbackHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbHash.html" TARGET="classFrame"><I>DbHash</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbHashStat.html" TARGET="classFrame">DbHashStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbKeyRange.html" TARGET="classFrame">DbKeyRange</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLock.html" TARGET="classFrame">DbLock</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockNotGrantedException.html" TARGET="classFrame">DbLockNotGrantedException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockRequest.html" TARGET="classFrame">DbLockRequest</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockStat.html" TARGET="classFrame">DbLockStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLogc.html" TARGET="classFrame">DbLogc</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLogStat.html" TARGET="classFrame">DbLogStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLsn.html" TARGET="classFrame">DbLsn</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMemoryException.html" TARGET="classFrame">DbMemoryException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolFile.html" TARGET="classFrame">DbMpoolFile</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolFStat.html" TARGET="classFrame">DbMpoolFStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolStat.html" TARGET="classFrame">DbMpoolStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleDataIterator.html" TARGET="classFrame">DbMultipleDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html" TARGET="classFrame">DbMultipleKeyDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html" TARGET="classFrame">DbMultipleRecnoDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbPanicHandler.html" TARGET="classFrame"><I>DbPanicHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbPreplist.html" TARGET="classFrame">DbPreplist</A>
+<BR>
+<A HREF="com/sleepycat/db/DbQueueStat.html" TARGET="classFrame">DbQueueStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbRepStat.html" TARGET="classFrame">DbRepStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbRepTransport.html" TARGET="classFrame"><I>DbRepTransport</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbRunRecoveryException.html" TARGET="classFrame">DbRunRecoveryException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html" TARGET="classFrame"><I>DbSecondaryKeyCreate</I></A>
+<BR>
+<A HREF="com/sleepycat/db/Dbt.html" TARGET="classFrame">Dbt</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxn.html" TARGET="classFrame">DbTxn</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxnStat.html" TARGET="classFrame">DbTxnStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxnStat.Active.html" TARGET="classFrame">DbTxnStat.Active</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/EntityBinding.html" TARGET="classFrame"><I>EntityBinding</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html" TARGET="classFrame">ExceptionUnwrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html" TARGET="classFrame"><I>ExceptionWrapper</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/FastInputStream.html" TARGET="classFrame">FastInputStream</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/FastOutputStream.html" TARGET="classFrame">FastOutputStream</A>
+<BR>
+<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html" TARGET="classFrame">ForeignKeyIndex</A>
+<BR>
+<A HREF="com/sleepycat/bdb/IntegrityConstraintException.html" TARGET="classFrame">IntegrityConstraintException</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html" TARGET="classFrame">IOExceptionWrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html" TARGET="classFrame"><I>KeyExtractor</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/KeyRangeException.html" TARGET="classFrame">KeyRangeException</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/MapEntry.html" TARGET="classFrame">MapEntry</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html" TARGET="classFrame"><I>MarshalledTupleData</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html" TARGET="classFrame"><I>MarshalledTupleKeyEntity</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html" TARGET="classFrame"><I>PrimaryKeyAssigner</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/RecordNumberBinding.html" TARGET="classFrame">RecordNumberBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/RecordNumberFormat.html" TARGET="classFrame">RecordNumberFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html" TARGET="classFrame">RuntimeExceptionWrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html" TARGET="classFrame">SerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html" TARGET="classFrame">SerialFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html" TARGET="classFrame">SerialInput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html" TARGET="classFrame">SerialOutput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html" TARGET="classFrame">SerialSerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html" TARGET="classFrame">SerialSerialKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html" TARGET="classFrame">SimpleBuffer</A>
+<BR>
+<A HREF="com/sleepycat/bdb/StoredClassCatalog.html" TARGET="classFrame">StoredClassCatalog</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredCollection.html" TARGET="classFrame">StoredCollection</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredCollections.html" TARGET="classFrame">StoredCollections</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredContainer.html" TARGET="classFrame">StoredContainer</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html" TARGET="classFrame">StoredEntrySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredIterator.html" TARGET="classFrame">StoredIterator</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html" TARGET="classFrame">StoredKeySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredList.html" TARGET="classFrame">StoredList</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredMap.html" TARGET="classFrame">StoredMap</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html" TARGET="classFrame">StoredSortedEntrySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html" TARGET="classFrame">StoredSortedKeySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html" TARGET="classFrame">StoredSortedMap</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html" TARGET="classFrame">StoredSortedValueSet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html" TARGET="classFrame">StoredValueSet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/TimeUnits.html" TARGET="classFrame">TimeUnits</A>
+<BR>
+<A HREF="com/sleepycat/bdb/TransactionRunner.html" TARGET="classFrame">TransactionRunner</A>
+<BR>
+<A HREF="com/sleepycat/bdb/TransactionWorker.html" TARGET="classFrame"><I>TransactionWorker</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html" TARGET="classFrame">TupleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html" TARGET="classFrame">TupleFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html" TARGET="classFrame">TupleInput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html" TARGET="classFrame">TupleInputBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html" TARGET="classFrame">TupleMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html" TARGET="classFrame">TupleOutput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html" TARGET="classFrame">TupleSerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html" TARGET="classFrame">TupleSerialDbFactory</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html" TARGET="classFrame">TupleSerialKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html" TARGET="classFrame">TupleSerialMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html" TARGET="classFrame">TupleSerialMarshalledKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html" TARGET="classFrame">TupleTupleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html" TARGET="classFrame">TupleTupleKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html" TARGET="classFrame">TupleTupleMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html" TARGET="classFrame">TupleTupleMarshalledKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/UtfOps.html" TARGET="classFrame">UtfOps</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/allclasses-noframe.html b/db/docs/java/allclasses-noframe.html
new file mode 100644
index 000000000..543a095ba
--- /dev/null
+++ b/db/docs/java/allclasses-noframe.html
@@ -0,0 +1,265 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="All Classes (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html" TARGET="">ByteArrayBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html" TARGET="">ByteArrayFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html" TARGET=""><I>ClassCatalog</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/CurrentTransaction.html" TARGET="">CurrentTransaction</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataBinding.html" TARGET=""><I>DataBinding</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataBuffer.html" TARGET=""><I>DataBuffer</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataCursor.html" TARGET="">DataCursor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataDb.html" TARGET="">DataDb</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataFormat.html" TARGET=""><I>DataFormat</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataIndex.html" TARGET="">DataIndex</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataStore.html" TARGET="">DataStore</A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataThang.html" TARGET="">DataThang</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/DataType.html" TARGET=""><I>DataType</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/DataView.html" TARGET="">DataView</A>
+<BR>
+<A HREF="com/sleepycat/db/Db.html" TARGET="">Db</A>
+<BR>
+<A HREF="com/sleepycat/db/DbAppDispatch.html" TARGET=""><I>DbAppDispatch</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbAppendRecno.html" TARGET=""><I>DbAppendRecno</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreeCompare.html" TARGET=""><I>DbBtreeCompare</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreePrefix.html" TARGET=""><I>DbBtreePrefix</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbBtreeStat.html" TARGET="">DbBtreeStat</A>
+<BR>
+<A HREF="com/sleepycat/db/Dbc.html" TARGET="">Dbc</A>
+<BR>
+<A HREF="com/sleepycat/db/DbClient.html" TARGET=""><I>DbClient</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbDeadlockException.html" TARGET="">DbDeadlockException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbDupCompare.html" TARGET=""><I>DbDupCompare</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnv.html" TARGET="">DbEnv</A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html" TARGET="">DbEnv.RepProcessMessage</A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnvFeedback.html" TARGET=""><I>DbEnvFeedback</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html" TARGET=""><I>DbEnvFeedbackHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbErrcall.html" TARGET=""><I>DbErrcall</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbErrorHandler.html" TARGET=""><I>DbErrorHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbException.html" TARGET="">DbException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbFeedback.html" TARGET=""><I>DbFeedback</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbFeedbackHandler.html" TARGET=""><I>DbFeedbackHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbHash.html" TARGET=""><I>DbHash</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbHashStat.html" TARGET="">DbHashStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbKeyRange.html" TARGET="">DbKeyRange</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLock.html" TARGET="">DbLock</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockNotGrantedException.html" TARGET="">DbLockNotGrantedException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockRequest.html" TARGET="">DbLockRequest</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLockStat.html" TARGET="">DbLockStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLogc.html" TARGET="">DbLogc</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLogStat.html" TARGET="">DbLogStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbLsn.html" TARGET="">DbLsn</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMemoryException.html" TARGET="">DbMemoryException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolFile.html" TARGET="">DbMpoolFile</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolFStat.html" TARGET="">DbMpoolFStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMpoolStat.html" TARGET="">DbMpoolStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleDataIterator.html" TARGET="">DbMultipleDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html" TARGET="">DbMultipleKeyDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html" TARGET="">DbMultipleRecnoDataIterator</A>
+<BR>
+<A HREF="com/sleepycat/db/DbPanicHandler.html" TARGET=""><I>DbPanicHandler</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbPreplist.html" TARGET="">DbPreplist</A>
+<BR>
+<A HREF="com/sleepycat/db/DbQueueStat.html" TARGET="">DbQueueStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbRepStat.html" TARGET="">DbRepStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbRepTransport.html" TARGET=""><I>DbRepTransport</I></A>
+<BR>
+<A HREF="com/sleepycat/db/DbRunRecoveryException.html" TARGET="">DbRunRecoveryException</A>
+<BR>
+<A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html" TARGET=""><I>DbSecondaryKeyCreate</I></A>
+<BR>
+<A HREF="com/sleepycat/db/Dbt.html" TARGET="">Dbt</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxn.html" TARGET="">DbTxn</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxnStat.html" TARGET="">DbTxnStat</A>
+<BR>
+<A HREF="com/sleepycat/db/DbTxnStat.Active.html" TARGET="">DbTxnStat.Active</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/EntityBinding.html" TARGET=""><I>EntityBinding</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html" TARGET="">ExceptionUnwrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html" TARGET=""><I>ExceptionWrapper</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/FastInputStream.html" TARGET="">FastInputStream</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/FastOutputStream.html" TARGET="">FastOutputStream</A>
+<BR>
+<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html" TARGET="">ForeignKeyIndex</A>
+<BR>
+<A HREF="com/sleepycat/bdb/IntegrityConstraintException.html" TARGET="">IntegrityConstraintException</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html" TARGET="">IOExceptionWrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html" TARGET=""><I>KeyExtractor</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/KeyRangeException.html" TARGET="">KeyRangeException</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/MapEntry.html" TARGET="">MapEntry</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html" TARGET=""><I>MarshalledTupleData</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html" TARGET=""><I>MarshalledTupleKeyEntity</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html" TARGET=""><I>PrimaryKeyAssigner</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/RecordNumberBinding.html" TARGET="">RecordNumberBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/RecordNumberFormat.html" TARGET="">RecordNumberFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html" TARGET="">RuntimeExceptionWrapper</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html" TARGET="">SerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html" TARGET="">SerialFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html" TARGET="">SerialInput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html" TARGET="">SerialOutput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html" TARGET="">SerialSerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html" TARGET="">SerialSerialKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html" TARGET="">SimpleBuffer</A>
+<BR>
+<A HREF="com/sleepycat/bdb/StoredClassCatalog.html" TARGET="">StoredClassCatalog</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredCollection.html" TARGET="">StoredCollection</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredCollections.html" TARGET="">StoredCollections</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredContainer.html" TARGET="">StoredContainer</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html" TARGET="">StoredEntrySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredIterator.html" TARGET="">StoredIterator</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html" TARGET="">StoredKeySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredList.html" TARGET="">StoredList</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredMap.html" TARGET="">StoredMap</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html" TARGET="">StoredSortedEntrySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html" TARGET="">StoredSortedKeySet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html" TARGET="">StoredSortedMap</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html" TARGET="">StoredSortedValueSet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html" TARGET="">StoredValueSet</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/TimeUnits.html" TARGET="">TimeUnits</A>
+<BR>
+<A HREF="com/sleepycat/bdb/TransactionRunner.html" TARGET="">TransactionRunner</A>
+<BR>
+<A HREF="com/sleepycat/bdb/TransactionWorker.html" TARGET=""><I>TransactionWorker</I></A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html" TARGET="">TupleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html" TARGET="">TupleFormat</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html" TARGET="">TupleInput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html" TARGET="">TupleInputBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html" TARGET="">TupleMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html" TARGET="">TupleOutput</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html" TARGET="">TupleSerialBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html" TARGET="">TupleSerialDbFactory</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html" TARGET="">TupleSerialKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html" TARGET="">TupleSerialMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html" TARGET="">TupleSerialMarshalledKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html" TARGET="">TupleTupleBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html" TARGET="">TupleTupleKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html" TARGET="">TupleTupleMarshalledBinding</A>
+<BR>
+<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html" TARGET="">TupleTupleMarshalledKeyExtractor</A>
+<BR>
+<A HREF="com/sleepycat/bdb/util/UtfOps.html" TARGET="">UtfOps</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/CurrentTransaction.html b/db/docs/java/com/sleepycat/bdb/CurrentTransaction.html
new file mode 100644
index 000000000..17ca7d9cf
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/CurrentTransaction.html
@@ -0,0 +1,472 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.CurrentTransaction,CurrentTransaction class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/CurrentTransaction.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CurrentTransaction.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class CurrentTransaction</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.CurrentTransaction</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>CurrentTransaction</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Provides access to the current transaction for the current thread within the
+ context of a Berkeley DB environment. This class provides explicit
+ transaction control beyond that provided by the <A HREF="../../../com/sleepycat/bdb/TransactionRunner.html"><CODE>TransactionRunner</CODE></A>
+ class. However, both methods of transaction control manage per-thread
+ transactions.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#abortTxn()">abortTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aborts the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn()">beginTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn(boolean, boolean)">beginTxn</A></B>(boolean&nbsp;dirtyRead,
+ boolean&nbsp;noWait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#commitTxn()">commitTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commits the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the underlying Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#getInstance(com.sleepycat.db.DbEnv)">getInstance</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the CurrentTransaction accessor for a specified Berkeley DB
+ environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#getTxn()">getTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the transaction associated with the current thread for this
+ environment, or null if no transaction is active.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#isAutoCommit()">isAutoCommit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether AUTO_COMMIT will be used for all non-cursor write
+ operations when no transaction is active.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#isDirtyRead()">isDirtyRead</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether dirty-read is used for the current transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html#isNoWait()">isNoWait</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether no-wait is used for the current transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getInstance(com.sleepycat.db.DbEnv)"><!-- --></A><H3>
+getInstance</H3>
+<PRE>
+public static <A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A> <B>getInstance</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</PRE>
+<DL>
+<DD>Gets the CurrentTransaction accessor for a specified Berkeley DB
+ environment. This method always returns the same reference when called
+ more than once with the same environment parameter.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>env</CODE> - is an open Berkeley DB environment.
+<DT><B>Returns:</B><DD>the CurrentTransaction accessor for the given environment, or
+ null if the environment is not transactional.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEnv()"><!-- --></A><H3>
+getEnv</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>getEnv</B>()</PRE>
+<DL>
+<DD>Returns the underlying Berkeley DB environment.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isAutoCommit()"><!-- --></A><H3>
+isAutoCommit</H3>
+<PRE>
+public final boolean <B>isAutoCommit</B>()</PRE>
+<DL>
+<DD>Returns whether AUTO_COMMIT will be used for all non-cursor write
+ operations when no transaction is active.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyRead()"><!-- --></A><H3>
+isDirtyRead</H3>
+<PRE>
+public final boolean <B>isDirtyRead</B>()</PRE>
+<DL>
+<DD>Returns whether dirty-read is used for the current transaction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isNoWait()"><!-- --></A><H3>
+isNoWait</H3>
+<PRE>
+public final boolean <B>isNoWait</B>()</PRE>
+<DL>
+<DD>Returns whether no-wait is used for the current transaction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTxn()"><!-- --></A><H3>
+getTxn</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>getTxn</B>()</PRE>
+<DL>
+<DD>Returns the transaction associated with the current thread for this
+ environment, or null if no transaction is active.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="beginTxn()"><!-- --></A><H3>
+beginTxn</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>beginTxn</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Begins a new transaction for this environment and associates it with
+ the current thread. If a transaction is already active for this
+ environment and thread, a nested transaction will be created.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the new transaction.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if the transaction cannot be started, in which case
+ any existing transaction is not affected.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="beginTxn(boolean, boolean)"><!-- --></A><H3>
+beginTxn</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>beginTxn</B>(boolean&nbsp;dirtyRead,
+ boolean&nbsp;noWait)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Begins a new transaction for this environment and associates it with
+ the current thread. If a transaction is already active for this
+ environment and thread, a nested transaction will be created.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dirtyRead</CODE> - true if this transaction should read data that is
+ modified by another transaction but not committed.<DD><CODE>noWait</CODE> - true if this transaction should throw
+ DbLockNotGrantedException instead of blocking when trying to access data
+ that is locked by another transaction.
+<DT><B>Returns:</B><DD>the new transaction.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if the transaction cannot be started, in which case
+ any existing transaction is not affected.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="commitTxn()"><!-- --></A><H3>
+commitTxn</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>commitTxn</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></PRE>
+<DL>
+<DD>Commits the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the parent transaction or null if the committed transaction was
+ not nested.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if an error occurs commiting the transaction. The
+ transaction will still be closed and the parent transaction will become
+ the current transaction.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if no transaction is active for the
+ current thread for this environement.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="abortTxn()"><!-- --></A><H3>
+abortTxn</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>abortTxn</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></PRE>
+<DL>
+<DD>Aborts the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the parent transaction or null if the aborted transaction was
+ not nested.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if an error occurs aborting the transaction. The
+ transaction will still be closed and the parent transaction will become
+ the current transaction.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if no transaction is active for the
+ current thread for this environement.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/CurrentTransaction.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CurrentTransaction.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataCursor.html b/db/docs/java/com/sleepycat/bdb/DataCursor.html
new file mode 100644
index 000000000..163f1927c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataCursor.html
@@ -0,0 +1,690 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataCursor,DataCursor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataCursor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataDb.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataCursor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataCursor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.DataCursor</B>
+</PRE>
+<HR>
+<DL>
+<DT>public final class <B>DataCursor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+(<em>internal</em>) Represents a Berkeley DB cursor and adds support for
+ indices, bindings and key ranges.
+
+ <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ deleted in the future. It is public only so it may be used by
+ subpackages.</p>
+
+ <p>This class operates on a view and takes care of reading and updating
+ indices, calling bindings, constraining access to a key range, etc.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataCursor)">DataCursor</A></B>(<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones a cursor preserving the current position.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean)">DataCursor</A></B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object)">DataCursor</A></B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object, boolean, java.lang.Object, boolean)">DataCursor</A></B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and key range.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#count()">count</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the number of duplicates for the current key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#delete()">delete</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'delete' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#find(java.lang.Object, boolean)">find</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ boolean&nbsp;findFirst)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Find the given value, using DB_GET_BOTH if possible, or a sequential
+ search otherwise.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#get(java.lang.Object, java.lang.Object, int, boolean)">get</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ boolean&nbsp;lockForWrite)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a database 'get' using the given key and value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#getCurrentKey()">getCurrentKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key object for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#getCurrentRecordNumber()">getCurrentRecordNumber</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the record number for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#getCurrentValue()">getCurrentValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value object for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#getView()">getView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the view for this cursor, as specified to the constructor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#hasRecNumAccess()">hasRecNumAccess</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether record number access is allowed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#isWriteAllowed()">isWriteAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether write is allowed for this cursor, as specified to the
+ constructor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'put' operation, optionally returning
+ the previous value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[], boolean)">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue,
+ boolean&nbsp;useCurrentKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'put' operation, optionally using the
+ current key instead of the key parameter.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataCursor(com.sleepycat.bdb.DataView, boolean)"><!-- --></A><H3>
+DataCursor</H3>
+<PRE>
+public <B>DataCursor</B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Creates a cursor for a given view.
+<P>
+<DT><B>Parameters:</B><DD><CODE>view</CODE> - the database view traversed by the cursor.<DD><CODE>writeAllowed</CODE> - whether the cursor can be used for writing.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+<HR>
+
+<A NAME="DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object)"><!-- --></A><H3>
+DataCursor</H3>
+<PRE>
+public <B>DataCursor</B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Creates a cursor for a given view and single key range.
+<P>
+<DT><B>Parameters:</B><DD><CODE>view</CODE> - the database view traversed by the cursor.<DD><CODE>writeAllowed</CODE> - whether the cursor can be used for writing.<DD><CODE>singleKey</CODE> - the single key value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+<HR>
+
+<A NAME="DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object, boolean, java.lang.Object, boolean)"><!-- --></A><H3>
+DataCursor</H3>
+<PRE>
+public <B>DataCursor</B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Creates a cursor for a given view and key range.
+<P>
+<DT><B>Parameters:</B><DD><CODE>view</CODE> - the database view traversed by the cursor.<DD><CODE>writeAllowed</CODE> - whether the cursor can be used for writing.<DD><CODE>beginKey</CODE> - the lower bound.<DD><CODE>beginInclusive</CODE> - whether the lower bound is inclusive.<DD><CODE>endKey</CODE> - the upper bound.<DD><CODE>endInclusive</CODE> - whether the upper bound is inclusive.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+<HR>
+
+<A NAME="DataCursor(com.sleepycat.bdb.DataCursor)"><!-- --></A><H3>
+DataCursor</H3>
+<PRE>
+public <B>DataCursor</B>(<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>&nbsp;other)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clones a cursor preserving the current position.
+<P>
+<DT><B>Parameters:</B><DD><CODE>other</CODE> - the cursor to clone.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Closes a cursor.
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getView()"><!-- --></A><H3>
+getView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>getView</B>()</PRE>
+<DL>
+<DD>Returns the view for this cursor, as specified to the constructor.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the view.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isWriteAllowed()"><!-- --></A><H3>
+isWriteAllowed</H3>
+<PRE>
+public boolean <B>isWriteAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether write is allowed for this cursor, as specified to the
+ constructor.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether write is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCurrentKey()"><!-- --></A><H3>
+getCurrentKey</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getCurrentKey</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns the key object for the last record read.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the current key object.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCurrentValue()"><!-- --></A><H3>
+getCurrentValue</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getCurrentValue</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns the value object for the last record read.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the current value object.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasRecNumAccess()"><!-- --></A><H3>
+hasRecNumAccess</H3>
+<PRE>
+public boolean <B>hasRecNumAccess</B>()</PRE>
+<DL>
+<DD>Returns whether record number access is allowed.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether record number access is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCurrentRecordNumber()"><!-- --></A><H3>
+getCurrentRecordNumber</H3>
+<PRE>
+public int <B>getCurrentRecordNumber</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns the record number for the last record read.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last read record number.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object, java.lang.Object, int, boolean)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ boolean&nbsp;lockForWrite)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Perform a database 'get' using the given key and value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key or null if none is required by the flag.<DD><CODE>value</CODE> - the value or null if none is required by the flag.<DD><CODE>flag</CODE> - a single flag value appropriate for cursor get.<DD><CODE>lockForWrite</CODE> - whether to set the RMW flag.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="find(java.lang.Object, boolean)"><!-- --></A><H3>
+find</H3>
+<PRE>
+public int <B>find</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ boolean&nbsp;findFirst)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Find the given value, using DB_GET_BOTH if possible, or a sequential
+ search otherwise.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value to search for among duplicates at the current
+ position.<DD><CODE>findFirst</CODE> - whether to find the first or last value.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count()"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Return the number of duplicates for the current key.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of duplicates.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object, java.lang.Object, int, java.lang.Object[])"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Perform an arbitrary database 'put' operation, optionally returning
+ the previous value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to put.<DD><CODE>value</CODE> - the value to put.<DD><CODE>flag</CODE> - a single flag value appropriate for cursor put.<DD><CODE>oldValue</CODE> - holds the old value, or null if the old value should
+ not be returned.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object, java.lang.Object, int, java.lang.Object[], boolean)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue,
+ boolean&nbsp;useCurrentKey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Perform an arbitrary database 'put' operation, optionally using the
+ current key instead of the key parameter.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to put.<DD><CODE>value</CODE> - the value to put.<DD><CODE>flag</CODE> - a single flag value appropriate for cursor put.<DD><CODE>oldValue</CODE> - holds the old value, or null if the old value should
+ not be returned.<DD><CODE>useCurrentKey</CODE> - is true to use the current key rather than the
+ key parameter.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delete()"><!-- --></A><H3>
+delete</H3>
+<PRE>
+public int <B>delete</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Perform an arbitrary database 'delete' operation.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataCursor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataDb.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataCursor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataDb.html b/db/docs/java/com/sleepycat/bdb/DataDb.html
new file mode 100644
index 000000000..b82f43bc2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataDb.html
@@ -0,0 +1,796 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataDb (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataDb,DataDb class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataDb (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataDb.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataIndex.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataDb.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataDb</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.DataDb</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DataDb</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+(<em>internal</em>) Wraps a Berkeley DB database (Db) object and adds
+ normalization of certain flags and environment modes.
+
+ <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ deleted in the future. It is public only so it may be used by
+ subpackages.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#EINVAL">EINVAL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#ENOMEM">ENOMEM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#FLAGS_MOD_MASK">FLAGS_MOD_MASK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#FLAGS_POS_MASK">FLAGS_POS_MASK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#DataDb(com.sleepycat.db.Db)">DataDb</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a database wrapper.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#areDuplicatesAllowed()">areDuplicatesAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicates are allowed for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#areDuplicatesOrdered()">areDuplicatesOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicates are ordered for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#areKeysRenumbered()">areKeysRenumbered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys (record numbers) are renumbered for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#closeCursor(com.sleepycat.db.Dbc)">closeCursor</A></B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#delete(com.sleepycat.bdb.DataThang, int)">delete</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'delete' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#dupCursor(com.sleepycat.db.Dbc, boolean, int)">dupCursor</A></B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ boolean&nbsp;writeCursor,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Duplicates a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Db.html">Db</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#getDb()">getDb</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the underlying database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;com.sleepycat.bdb.DataEnvironment</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#hasRecNumAccess()">hasRecNumAccess</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether record number access is allowed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#isDirtyReadAllowed()">isDirtyReadAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether dirty-read is allowed for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#isOrdered()">isOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys are ordered for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#isTransactional()">isTransactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the database was opened in a transaction and therefore
+ must be written in a transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#openCursor(boolean)">openCursor</A></B>(boolean&nbsp;writeCursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataDb.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a debugging string containing the database name.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ENOMEM"><!-- --></A><H3>
+ENOMEM</H3>
+<PRE>
+public static final int <B>ENOMEM</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.DataDb.ENOMEM">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="EINVAL"><!-- --></A><H3>
+EINVAL</H3>
+<PRE>
+public static final int <B>EINVAL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.DataDb.EINVAL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAGS_POS_MASK"><!-- --></A><H3>
+FLAGS_POS_MASK</H3>
+<PRE>
+public static final int <B>FLAGS_POS_MASK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.DataDb.FLAGS_POS_MASK">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAGS_MOD_MASK"><!-- --></A><H3>
+FLAGS_MOD_MASK</H3>
+<PRE>
+public static final int <B>FLAGS_MOD_MASK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.DataDb.FLAGS_MOD_MASK">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataDb(com.sleepycat.db.Db)"><!-- --></A><H3>
+DataDb</H3>
+<PRE>
+public <B>DataDb</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db)</PRE>
+<DL>
+<DD>Creates a database wrapper.
+<P>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - is the underlying database.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Closes the database.
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEnv()"><!-- --></A><H3>
+getEnv</H3>
+<PRE>
+public final com.sleepycat.bdb.DataEnvironment <B>getEnv</B>()</PRE>
+<DL>
+<DD>Returns the environment.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the environment.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDb()"><!-- --></A><H3>
+getDb</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/Db.html">Db</A> <B>getDb</B>()</PRE>
+<DL>
+<DD>Returns the underlying database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the underlying database.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isOrdered()"><!-- --></A><H3>
+isOrdered</H3>
+<PRE>
+public final boolean <B>isOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether keys are ordered for the database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesAllowed()"><!-- --></A><H3>
+areDuplicatesAllowed</H3>
+<PRE>
+public final boolean <B>areDuplicatesAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether duplicates are allowed for the database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesOrdered()"><!-- --></A><H3>
+areDuplicatesOrdered</H3>
+<PRE>
+public final boolean <B>areDuplicatesOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether duplicates are ordered for the database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areKeysRenumbered()"><!-- --></A><H3>
+areKeysRenumbered</H3>
+<PRE>
+public final boolean <B>areKeysRenumbered</B>()</PRE>
+<DL>
+<DD>Returns whether keys (record numbers) are renumbered for the database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are renumbered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasRecNumAccess()"><!-- --></A><H3>
+hasRecNumAccess</H3>
+<PRE>
+public final boolean <B>hasRecNumAccess</B>()</PRE>
+<DL>
+<DD>Returns whether record number access is allowed.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether record number access is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTransactional()"><!-- --></A><H3>
+isTransactional</H3>
+<PRE>
+public final boolean <B>isTransactional</B>()</PRE>
+<DL>
+<DD>Returns whether the database was opened in a transaction and therefore
+ must be written in a transaction.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the database is transactional.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyReadAllowed()"><!-- --></A><H3>
+isDirtyReadAllowed</H3>
+<PRE>
+public final boolean <B>isDirtyReadAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether dirty-read is allowed for the database.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether dirty-read is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Performs a general database 'get' operation.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key thang.<DD><CODE>data</CODE> - the data thang.<DD><CODE>flags</CODE> - the low-level get flags.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Performs a general database 'get' operation via a cursor.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cursor</CODE> - the cursor to read.<DD><CODE>key</CODE> - the key thang.<DD><CODE>val</CODE> - the data thang.<DD><CODE>flags</CODE> - the low-level get flags.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Performs a general database 'put' operation.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to put.<DD><CODE>data</CODE> - the data to put.<DD><CODE>flags</CODE> - the low-level put flags.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Performs a general database 'put' operation via a cursor.
+ This method works for HASH/BTREE types and all flags, or with all types
+ and DB_CURRENT only.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cursor</CODE> - the cursor to write.<DD><CODE>key</CODE> - the key to put.<DD><CODE>data</CODE> - the data to put.<DD><CODE>flags</CODE> - the low-level put flags.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delete(com.sleepycat.bdb.DataThang, int)"><!-- --></A><H3>
+delete</H3>
+<PRE>
+public int <B>delete</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Performs a general database 'delete' operation.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - the key to delete.<DD><CODE>flags</CODE> - the low-level delete flags.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="openCursor(boolean)"><!-- --></A><H3>
+openCursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A> <B>openCursor</B>(boolean&nbsp;writeCursor)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Opens a cursor for this database.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>writeCursor</CODE> - true to open a write cursor in a CDB environment, and
+ ignored for other environments.
+<DT><B>Returns:</B><DD>the open cursor.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dupCursor(com.sleepycat.db.Dbc, boolean, int)"><!-- --></A><H3>
+dupCursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A> <B>dupCursor</B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ boolean&nbsp;writeCursor,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Duplicates a cursor for this database.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>writeCursor</CODE> - true to open a write cursor in a CDB environment, and
+ ignored for other environments.<DD><CODE>flags</CODE> - the low-level dup() flags.
+<DT><B>Returns:</B><DD>the open cursor.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="closeCursor(com.sleepycat.db.Dbc)"><!-- --></A><H3>
+closeCursor</H3>
+<PRE>
+public void <B>closeCursor</B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Closes a cursor for this database.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cursor</CODE> - the cursor to close.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a debugging string containing the database name.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a debugging string.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataDb.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataIndex.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataDb.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataIndex.html b/db/docs/java/com/sleepycat/bdb/DataIndex.html
new file mode 100644
index 000000000..24387baa8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataIndex.html
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataIndex (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataIndex,DataIndex class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataIndex (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataIndex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataDb.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataIndex</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.DataIndex</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DataIndex</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Represents a Berkeley DB secondary index. An index is always attached to a
+ single <A HREF="../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> when it is constructed. An index is typically
+ accessed by passing it to the constructor of one of the collection classes
+ in the <A HREF="../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> package. For example:
+
+ <pre>
+ Db db = new Db(env, 0);
+ db.setFlags(Db.DB_DUPSORT);
+ db.open(null, "index.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ DataIndex index = new DataIndex(store, db, keyFormat, keyExtractor);
+ StoredMap map = new StoredMap(index, keyBinding, valueBinding, writeAllowed);
+ </pre>
+
+ <p>All access methods may be used with BDB. However, some access methods
+ may only be used with certain types of collection views, and some access
+ methods impose restrictions on the way collection views are used.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)">DataIndex</A></B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataIndex.html#getKeyExtractor()">getKeyExtractor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key extractor associated with this index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataIndex.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key format associated with this index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataIndex.html#getStore()">getStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the store associated with this index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataIndex.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a printable string identifying the file and database name
+ of the index.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)"><!-- --></A><H3>
+DataIndex</H3>
+<PRE>
+public <B>DataIndex</B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</PRE>
+<DL>
+<DD>Creates an index from a previously opened Db object.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - the store to be indexed and also specifies the
+ environment that was used to create the Db object.<DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>keyFormat</CODE> - the data format for keys.<DD><CODE>keyExtractor</CODE> - an object for extracting the index key from primary
+ key and/or value buffers, and for clearing the index key in a value
+ buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if a format mismatch is detected
+ between the index and the store, or if unsorted duplicates were
+ specified for the index Db.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getStore()"><!-- --></A><H3>
+getStore</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A> <B>getStore</B>()</PRE>
+<DL>
+<DD>Returns the store associated with this index.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD>Returns the key format associated with this index.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyExtractor()"><!-- --></A><H3>
+getKeyExtractor</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A> <B>getKeyExtractor</B>()</PRE>
+<DL>
+<DD>Returns the key extractor associated with this index.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a printable string identifying the file and database name
+ of the index.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataIndex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataDb.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataStore.html b/db/docs/java/com/sleepycat/bdb/DataStore.html
new file mode 100644
index 000000000..2faea2497
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataStore.html
@@ -0,0 +1,448 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataStore (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataStore,DataStore class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataStore (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataStore.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataIndex.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataThang.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataStore.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataStore</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.DataStore</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DataStore</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Represents a Berkeley DB database in the role of a primary data store. A
+ store may be used by itself or along with one or more <A HREF="../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>
+ objects. A store is typically accessed by passing it to the constructor of
+ one of the collection classes in the <A HREF="../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A>
+ package. For example:
+
+ <pre>
+ Db db = new Db(env, 0);
+ db.open(null, "store.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ DataStore store = new DataStore(db, keyFormat, valueFormat, keyAssigner);
+ StoredMap map = new StoredMap(store, keyBinding, valueBinding, writeAllowed);
+ </pre>
+
+ <p>All access methods may be used with BDB. However, some access methods
+ may only be used with certain types of collection views, and some access
+ methods impose restrictions on the way collection views are used.</p>
+
+ <p>A store is always associated with the environment of its underlying
+ database, which is the first parameter to the {Db#Db} constructor. There
+ are three types of environments in Berkeley DB.</p>
+ <p>
+ <table border="1">
+ <tr>
+ <th>Environment</th>
+ <th>Access Mode</th>
+ <th>Berkeley DB Flags</th>
+ </tr>
+ <tr>
+ <td>Data Store</td>
+ <td>single-threaded access</td>
+ <td>Db.DB_INIT_MPOOL</td>
+ </tr>
+ <tr>
+ <td>Concurrent Data Store</td>
+ <td>single-writer multiple-reader access</td>
+ <td>Db.DB_INIT_CDB | Db.DB_INIT_MPOOL</td>
+ </tr>
+ <tr>
+ <td>Transactional Data Store</td>
+ <td>transactional access for any number of readers and writers</td>
+ <td>Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL</td>
+ </tr>
+ </table>
+
+ <p>The flags shown are the minimum required for creating the Berkeley DB
+ environment. Many other Berkeley DB options are also available. For details
+ on creating and configuring the environment see the Berkeley DB
+ documentation.</p>
+
+ <p>All three environments may be used within BDB. However, the Concurrent
+ Data Store Environment imposes the restriction that only one writable cursor
+ may be open at a time. This means that if you have a writable iterator for
+ a data store open, then you cannot obtain another writable iterator for the
+ same data store and you cannot perform other write operations through a
+ collection for that data store (since this also uses a write cursor).</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)">DataStore</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the store and all associated indices.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the environment associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#getIndices()">getIndices</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the indices associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#getKeyAssigner()">getKeyAssigner</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key assigner associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key format associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value format associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataStore.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a printable string identifying the filename and datbase name
+ of the store.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)"><!-- --></A><H3>
+DataStore</H3>
+<PRE>
+public <B>DataStore</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</PRE>
+<DL>
+<DD>Creates a store from a previously opened Db object.
+<P>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>keyFormat</CODE> - the data format for keys.<DD><CODE>valueFormat</CODE> - the data format for values.<DD><CODE>keyAssigner</CODE> - an object for assigning keys or null if no automatic
+ key assignment is used.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Closes the store and all associated indices.
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEnv()"><!-- --></A><H3>
+getEnv</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>getEnv</B>()</PRE>
+<DL>
+<DD>Returns the environment associated with this store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD>Returns the key format associated with this store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyAssigner()"><!-- --></A><H3>
+getKeyAssigner</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A> <B>getKeyAssigner</B>()</PRE>
+<DL>
+<DD>Returns the key assigner associated with this store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD>Returns the value format associated with this store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndices()"><!-- --></A><H3>
+getIndices</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A> <B>getIndices</B>()</PRE>
+<DL>
+<DD>Returns the indices associated with this store. Indices are associated
+ with a store when they are constructed. All objects returned by the
+ iterator will be of class <A HREF="../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A> and may also be of class
+ <A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an iterator of associated indices or null if there are none.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Returns a printable string identifying the filename and datbase name
+ of the store.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataStore.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataIndex.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataThang.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataStore.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataThang.html b/db/docs/java/com/sleepycat/bdb/DataThang.html
new file mode 100644
index 000000000..d3f6626dd
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataThang.html
@@ -0,0 +1,783 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataThang (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataThang,DataThang class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataThang (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataThang.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataThang.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataThang</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../com/sleepycat/db/Dbt.html">com.sleepycat.db.Dbt</A>
+ |
+ +--<B>com.sleepycat.bdb.DataThang</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public final class <B>DataThang</B><DT>extends <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A><DT>implements <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></DL>
+
+<P>
+(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.
+
+ <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ deleted in the future. It is public only so it may be used by
+ subpackages.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#DataThang()">DataThang</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a thang with no data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#DataThang(byte[])">DataThang</A></B>(byte[]&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a thang containing the given data data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#DataThang(com.sleepycat.bdb.DataThang)">DataThang</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a thang with a copy of the data from the given thang.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#clearDataFormation()">clearDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#compareTo(com.sleepycat.db.Dbt)">compareTo</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns -1 if the byte array of this thang is less than that of the
+ given thang, 0 if they are equal, or 1 if greater.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#copy(com.sleepycat.bdb.DataThang)">copy</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies the data from the given thang to this thang..</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#dump(com.sleepycat.db.Dbt, java.io.PrintStream)">dump</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html">PrintStream</A>&nbsp;out)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prints the byte array of the given thing to the given stream using
+ toString() to convert the bytes to a string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#dump(java.io.PrintStream)">dump</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html">PrintStream</A>&nbsp;out)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prints the byte array of this thing to the given stream using toString()
+ to convert the bytes to a string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#equals(com.sleepycat.db.Dbt)">equals</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the byte array of this thang is equal to that of the
+ given thang.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getBytes()">getBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the data for this thang.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ByteArrayInputStream.html">ByteArrayInputStream</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getByteStream()">getByteStream</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the data for this thang as a byte array input stream..</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getDataBytes()">getDataBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte array of the data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getDataFormation()">getDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the formation associated with the data in this buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getDataLength()">getDataLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#getDataOffset()">getDataOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte offset of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#increment()">increment</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Increments the data value for this thang, treating the byte array as
+ a Java BigInteger where the bytes are in MSB-first order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#setBytes(byte[])">setBytes</A></B>(byte[]&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the data for this thang.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#setBytes(byte[], int, int)">setBytes</A></B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the data for this thang.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#setData(byte[], int, int)">setData</A></B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the data in this buffer to the given value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#setDataFormation(java.lang.Object)">setDataFormation</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataThang.html#toString(com.sleepycat.db.Dbt)">toString</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.Dbt"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/Dbt.html#get_data()">get_data</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_dlen()">get_dlen</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_doff()">get_doff</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_flags()">get_flags</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_object()">get_object</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_offset()">get_offset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_recno_key_data()">get_recno_key_data</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_size()">get_size</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#get_ulen()">get_ulen</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getData()">getData</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getFlags()">getFlags</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getObject()">getObject</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getOffset()">getOffset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialLength()">getPartialLength</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialOffset()">getPartialOffset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()">getRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getSize()">getSize</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#getUserBufferLength()">getUserBufferLength</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_data(byte[])">set_data</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_dlen(int)">set_dlen</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_doff(int)">set_doff</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_flags(int)">set_flags</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_object(java.lang.Object)">set_object</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_offset(int)">set_offset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_recno_key_data(int)">set_recno_key_data</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_size(int)">set_size</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#set_ulen(int)">set_ulen</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setData(byte[])">setData</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)">setFlags</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setObject(java.lang.Object)">setObject</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setOffset(int)">setOffset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialLength(int)">setPartialLength</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialOffset(int)">setPartialOffset</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setRecordNumber(int)">setRecordNumber</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setSize(int)">setSize</A>, <A HREF="../../../com/sleepycat/db/Dbt.html#setUserBufferLength(int)">setUserBufferLength</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataThang()"><!-- --></A><H3>
+DataThang</H3>
+<PRE>
+public <B>DataThang</B>()</PRE>
+<DL>
+<DD>Creates a thang with no data.
+<P>
+</DL>
+<HR>
+
+<A NAME="DataThang(byte[])"><!-- --></A><H3>
+DataThang</H3>
+<PRE>
+public <B>DataThang</B>(byte[]&nbsp;bytes)</PRE>
+<DL>
+<DD>Creates a thang containing the given data data.
+<P>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the initial data.</DL>
+<HR>
+
+<A NAME="DataThang(com.sleepycat.bdb.DataThang)"><!-- --></A><H3>
+DataThang</H3>
+<PRE>
+public <B>DataThang</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</PRE>
+<DL>
+<DD>Creates a thang with a copy of the data from the given thang.
+<P>
+<DT><B>Parameters:</B><DD><CODE>copyFrom</CODE> - a data thang to clone.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="copy(com.sleepycat.bdb.DataThang)"><!-- --></A><H3>
+copy</H3>
+<PRE>
+public void <B>copy</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</PRE>
+<DL>
+<DD>Copies the data from the given thang to this thang..
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>copyFrom</CODE> - a data thang to clone.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBytes(byte[])"><!-- --></A><H3>
+setBytes</H3>
+<PRE>
+public void <B>setBytes</B>(byte[]&nbsp;bytes)</PRE>
+<DL>
+<DD>Sets the data for this thang.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the new data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBytes(byte[], int, int)"><!-- --></A><H3>
+setBytes</H3>
+<PRE>
+public void <B>setBytes</B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Sets the data for this thang.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the new data.<DD><CODE>offset</CODE> - the new data offset.<DD><CODE>length</CODE> - the new data length.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBytes()"><!-- --></A><H3>
+getBytes</H3>
+<PRE>
+public byte[] <B>getBytes</B>()</PRE>
+<DL>
+<DD>Returns the data for this thang.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data for this thang.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getByteStream()"><!-- --></A><H3>
+getByteStream</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ByteArrayInputStream.html">ByteArrayInputStream</A> <B>getByteStream</B>()</PRE>
+<DL>
+<DD>Returns the data for this thang as a byte array input stream..
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data as a stream.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="increment()"><!-- --></A><H3>
+increment</H3>
+<PRE>
+public void <B>increment</B>()</PRE>
+<DL>
+<DD>Increments the data value for this thang, treating the byte array as
+ a Java BigInteger where the bytes are in MSB-first order. The byte
+ array will be increased in size if necessary.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compareTo(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+compareTo</H3>
+<PRE>
+public int <B>compareTo</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key2)</PRE>
+<DL>
+<DD>Returns -1 if the byte array of this thang is less than that of the
+ given thang, 0 if they are equal, or 1 if greater. The comparison is
+ performed by treating the bytes as unsigned integers to match the
+ Berkeley DB default key comparison algorithm.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key2</CODE> - the key to compare.
+<DT><B>Returns:</B><DD>the comparison result.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;other)</PRE>
+<DL>
+<DD>Returns whether the byte array of this thang is equal to that of the
+ given thang.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>other</CODE> - the thang to compare.
+<DT><B>Returns:</B><DD>whether their data is equal.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dump(java.io.PrintStream)"><!-- --></A><H3>
+dump</H3>
+<PRE>
+public void <B>dump</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html">PrintStream</A>&nbsp;out)</PRE>
+<DL>
+<DD>Prints the byte array of this thing to the given stream using toString()
+ to convert the bytes to a string.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>out</CODE> - the stream to write to.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dump(com.sleepycat.db.Dbt, java.io.PrintStream)"><!-- --></A><H3>
+dump</H3>
+<PRE>
+public static void <B>dump</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html">PrintStream</A>&nbsp;out)</PRE>
+<DL>
+<DD>Prints the byte array of the given thing to the given stream using
+ toString() to convert the bytes to a string.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbt</CODE> - the data thang to dump.<DD><CODE>out</CODE> - the stream to write to.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</PRE>
+<DL>
+<DD>Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbt</CODE> - the thang to convert.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setData(byte[], int, int)"><!-- --></A><H3>
+setData</H3>
+<PRE>
+public void <B>setData</B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the data in this buffer to the given value. The byte array given
+ will be owned by this buffer object after this method is called and
+ must not be modified thereafter. This method must clear the data
+ formation for this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#setData(byte[], int, int)">setData</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the data array and must not be modified after this
+ method is called.<DD><CODE>offset</CODE> - is the byte offset of the data in the array.<DD><CODE>length</CODE> - is the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataBytes()"><!-- --></A><H3>
+getDataBytes</H3>
+<PRE>
+public byte[] <B>getDataBytes</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte array of the data buffer. This array is owned by
+ the buffer object and should not be modified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataBytes()">getDataBytes</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte array of the data buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataOffset()"><!-- --></A><H3>
+getDataOffset</H3>
+<PRE>
+public int <B>getDataOffset</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte offset of the data in the array.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataOffset()">getDataOffset</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte offset of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataLength()"><!-- --></A><H3>
+getDataLength</H3>
+<PRE>
+public int <B>getDataLength</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte length of the data in the array.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataLength()">getDataLength</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataFormation(java.lang.Object)"><!-- --></A><H3>
+setDataFormation</H3>
+<PRE>
+public void <B>setDataFormation</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#setDataFormation(java.lang.Object)">setDataFormation</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>formation</CODE> - is Object to set.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormation()"><!-- --></A><H3>
+getDataFormation</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getDataFormation</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataFormation()">getDataFormation</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>formation Object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearDataFormation()"><!-- --></A><H3>
+clearDataFormation</H3>
+<PRE>
+public void <B>clearDataFormation</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the formation associated with the data in this buffer to null.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html#clearDataFormation()">clearDataFormation</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataThang.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataThang.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/DataView.html b/db/docs/java/com/sleepycat/bdb/DataView.html
new file mode 100644
index 000000000..79c871300
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/DataView.html
@@ -0,0 +1,1245 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+DataView (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.DataView,DataView class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataView (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataThang.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataView.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class DataView</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.DataView</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public final class <B>DataView</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A></DL>
+
+<P>
+(<em>internal</em>) Represents a Berkeley DB database and adds support
+ for indices, bindings and key ranges.
+
+ <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ deleted in the future. It is public only so it may be used by
+ subpackages.</p>
+
+ <p>This class defines a view and takes care of reading and updating indices,
+ calling bindings, constraining access to a key range, etc.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#addValue(com.sleepycat.bdb.DataThang, java.lang.Object, int)">addValue</A></B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;primaryKeyThang,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a duplicate value for a specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#append(java.lang.Object, java.lang.Object[], java.lang.Object[])">append</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends a value and returns the new key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#areDuplicatesAllowed()">areDuplicatesAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicates are allowed for the index or store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#areDuplicatesOrdered()">areDuplicatesOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicates are ordered for the index or store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#areKeysRenumbered()">areKeysRenumbered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys (record numbers) are renumbered for the index or
+ store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#autoCommitView(boolean)">autoCommitView</A></B>(boolean&nbsp;enable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new view with a specified autoCommit setting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#canDeriveKeyFromValue()">canDeriveKeyFromValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether data keys can be derived from the value/entity binding
+ of this view, which determines whether a value/entity object alone is
+ sufficient for operations that require keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#clear(java.util.Collection)">clear</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;oldValues)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deletes all records in the current range, optionally returning the
+ values for the deleted records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#consume(int, java.lang.Object[], java.lang.Object[])">consume</A></B>(int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a database 'get and consume' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#dirtyReadView(boolean)">dirtyReadView</A></B>(boolean&nbsp;enable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new view with a specified dirtyRead setting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#get(java.lang.Object, java.lang.Object, int, boolean, java.lang.Object[])">get</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ boolean&nbsp;lockForWrite,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getCurrentTxn()">getCurrentTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the current transaction for the view or null if the environment
+ is non-transactional.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataDb.html">DataDb</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getDb()">getDb</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the database for the index, if one is used, or store, if no
+ index is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the environment for the store and index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getIndex()">getIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index, as specified to the constructor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getKeyBinding()">getKeyBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key binding that is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getSingleKeyThang()">getSingleKeyThang</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key thang for a single key range, or null if a single key
+ range is not used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getStore()">getStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the store, as specified to the constructor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getValueBinding()">getValueBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value binding that is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#getValueEntityBinding()">getValueEntityBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the entity binding that is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isAutoCommit()">isAutoCommit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether auto-commit is set for this view or for the
+ transactional environment of the store and index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isDirtyReadAllowed()">isDirtyReadAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether DIRTY_READ was specified for both the Store and Index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isDirtyReadEnabled()">isDirtyReadEnabled</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether DIRTY_READ will be used for all read operations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether no records are present in the view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isOrdered()">isOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys are ordered for the index or store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isTransactional()">isTransactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the store and index are transactional.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#isWriteAllowed()">isWriteAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether write operations are allowed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataCursor[], boolean)">join</A></B>(<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>[]&nbsp;indexCursors,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>[]&nbsp;indexViews,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ specified index key values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#keySetView()">keySetView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new key-set view derived from this view by setting the
+ entity and value binding to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;primaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a database 'put' operation, optionally returning the old value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)">subView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for key range, optionally changing
+ the key binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#valueSetView()">valueSetView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view derived from this view by setting the
+ key binding to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/DataView.html#valueSetView(java.lang.Object)">valueSetView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for single key range.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+DataView</H3>
+<PRE>
+public <B>DataView</B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></PRE>
+<DL>
+<DD>Creates a view for a given store/index and bindings. The key range of
+ the view will be open.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the store or is ignored if the index parameter is given.<DD><CODE>index</CODE> - is the index or null if no index is used.<DD><CODE>keyBinding</CODE> - is the key binding or null if keys will not be used.<DD><CODE>valueBinding</CODE> - is the value binding or null if an entityBinding is
+ given or if values will not be used.<DD><CODE>entityBinding</CODE> - is the entity binding or null if an valueBinding
+ is given or if values will not be used.<DD><CODE>writeAllowed</CODE> - is whether writing through this view is allowed.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="keySetView()"><!-- --></A><H3>
+keySetView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>keySetView</B>()</PRE>
+<DL>
+<DD>Return a new key-set view derived from this view by setting the
+ entity and value binding to null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the derived view.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueSetView()"><!-- --></A><H3>
+valueSetView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>valueSetView</B>()</PRE>
+<DL>
+<DD>Return a new value-set view derived from this view by setting the
+ key binding to null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the derived view.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="valueSetView(java.lang.Object)"><!-- --></A><H3>
+valueSetView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>valueSetView</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></PRE>
+<DL>
+<DD>Return a new value-set view for single key range.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>singleKey</CODE> - the single key value.
+<DT><B>Returns:</B><DD>the derived view.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.
+<DD><CODE><A HREF="../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></CODE> - if the specified range is not within the
+ current range.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)"><!-- --></A><H3>
+subView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>subView</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></PRE>
+<DL>
+<DD>Return a new value-set view for key range, optionally changing
+ the key binding.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>beginKey</CODE> - the lower bound.<DD><CODE>beginInclusive</CODE> - whether the lower bound is inclusive.<DD><CODE>endKey</CODE> - the upper bound.<DD><CODE>endInclusive</CODE> - whether the upper bound is inclusive.<DD><CODE>keyBinding</CODE> - a key binding to use, or null to retain the base
+ view's key binding.
+<DT><B>Returns:</B><DD>the derived view.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.
+<DD><CODE><A HREF="../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></CODE> - if the specified range is not within the
+ current range.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadView(boolean)"><!-- --></A><H3>
+dirtyReadView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>dirtyReadView</B>(boolean&nbsp;enable)</PRE>
+<DL>
+<DD>Returns a new view with a specified dirtyRead setting.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>enable</CODE> - whether to enable or disable dirty-read.
+<DT><B>Returns:</B><DD>the derived view.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitView(boolean)"><!-- --></A><H3>
+autoCommitView</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A> <B>autoCommitView</B>(boolean&nbsp;enable)</PRE>
+<DL>
+<DD>Returns a new view with a specified autoCommit setting.
+ Note that auto-commit is not implemented by the view, the view only
+ holds the auto-commit property.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>enable</CODE> - whether to enable or disable auto-commit.
+<DT><B>Returns:</B><DD>the derived view.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCurrentTxn()"><!-- --></A><H3>
+getCurrentTxn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A> <B>getCurrentTxn</B>()</PRE>
+<DL>
+<DD>Returns the current transaction for the view or null if the environment
+ is non-transactional.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the current transaction.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSingleKeyThang()"><!-- --></A><H3>
+getSingleKeyThang</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A> <B>getSingleKeyThang</B>()</PRE>
+<DL>
+<DD>Returns the key thang for a single key range, or null if a single key
+ range is not used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key thang or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDb()"><!-- --></A><H3>
+getDb</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataDb.html">DataDb</A> <B>getDb</B>()</PRE>
+<DL>
+<DD>Returns the database for the index, if one is used, or store, if no
+ index is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the database of the index or, if none, the store.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEnv()"><!-- --></A><H3>
+getEnv</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>getEnv</B>()</PRE>
+<DL>
+<DD>Returns the environment for the store and index.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the environment.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isAutoCommit()"><!-- --></A><H3>
+isAutoCommit</H3>
+<PRE>
+public final boolean <B>isAutoCommit</B>()</PRE>
+<DL>
+<DD>Returns whether auto-commit is set for this view or for the
+ transactional environment of the store and index.
+ Note that auto-commit is not implemented by the view, the view only
+ holds the auto-commit property.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the auto-commit setting.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getStore()"><!-- --></A><H3>
+getStore</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A> <B>getStore</B>()</PRE>
+<DL>
+<DD>Returns the store, as specified to the constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the store.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndex()"><!-- --></A><H3>
+getIndex</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> <B>getIndex</B>()</PRE>
+<DL>
+<DD>Returns the index, as specified to the constructor.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the index or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyBinding()"><!-- --></A><H3>
+getKeyBinding</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> <B>getKeyBinding</B>()</PRE>
+<DL>
+<DD>Returns the key binding that is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key binding or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueBinding()"><!-- --></A><H3>
+getValueBinding</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> <B>getValueBinding</B>()</PRE>
+<DL>
+<DD>Returns the value binding that is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value binding or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueEntityBinding()"><!-- --></A><H3>
+getValueEntityBinding</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A> <B>getValueEntityBinding</B>()</PRE>
+<DL>
+<DD>Returns the entity binding that is used.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the entity binding or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesAllowed()"><!-- --></A><H3>
+areDuplicatesAllowed</H3>
+<PRE>
+public final boolean <B>areDuplicatesAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether duplicates are allowed for the index or store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesOrdered()"><!-- --></A><H3>
+areDuplicatesOrdered</H3>
+<PRE>
+public final boolean <B>areDuplicatesOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether duplicates are ordered for the index or store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areKeysRenumbered()"><!-- --></A><H3>
+areKeysRenumbered</H3>
+<PRE>
+public final boolean <B>areKeysRenumbered</B>()</PRE>
+<DL>
+<DD>Returns whether keys (record numbers) are renumbered for the index or
+ store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are renumbered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isOrdered()"><!-- --></A><H3>
+isOrdered</H3>
+<PRE>
+public final boolean <B>isOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether keys are ordered for the index or store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isWriteAllowed()"><!-- --></A><H3>
+isWriteAllowed</H3>
+<PRE>
+public final boolean <B>isWriteAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether write operations are allowed.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether write operations are allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyReadAllowed()"><!-- --></A><H3>
+isDirtyReadAllowed</H3>
+<PRE>
+public final boolean <B>isDirtyReadAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether DIRTY_READ was specified for both the Store and Index.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether dirty-read is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyReadEnabled()"><!-- --></A><H3>
+isDirtyReadEnabled</H3>
+<PRE>
+public final boolean <B>isDirtyReadEnabled</B>()</PRE>
+<DL>
+<DD>Returns whether DIRTY_READ will be used for all read operations.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether dirty-read is enabled.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTransactional()"><!-- --></A><H3>
+isTransactional</H3>
+<PRE>
+public final boolean <B>isTransactional</B>()</PRE>
+<DL>
+<DD>Returns whether the store and index are transactional.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the store and index are transactional.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns whether no records are present in the view.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the view is empty.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(java.lang.Object, java.lang.Object, int, boolean, java.lang.Object[])"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ boolean&nbsp;lockForWrite,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Performs a general database 'get' operation.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - used to find the value<DD><CODE>value</CODE> - used to find the value<DD><CODE>flags</CODE> - all flags except DB_SET and DB_GET_BOTH
+ are legal, <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,int)</CODE></A>.<DD><CODE>lockForWrite</CODE> - if true locks the cursor during the get.<DD><CODE>retValue</CODE> - used to store the result of the query
+<DT><B>Returns:</B><DD>0 if mathing values are found, Db.DB_NOTFOUND if not.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="consume(int, java.lang.Object[], java.lang.Object[])"><!-- --></A><H3>
+consume</H3>
+<PRE>
+public int <B>consume</B>(int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Performs a database 'get and consume' operation.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be CONSUME or CONSUME_WAIT.<DD><CODE>retPrimaryKey</CODE> - used to store the resulting key.<DD><CODE>retValue</CODE> - used to store the resulting value.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object, java.lang.Object, int, java.lang.Object[])"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;primaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Performs a database 'put' operation, optionally returning the old value.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKey</CODE> - key of new record.<DD><CODE>value</CODE> - value of new record.<DD><CODE>flags</CODE> - must be 0, NODUPDATA or NOOVERWRITE.<DD><CODE>oldValue</CODE> - used to store the old value, or null if none should be
+ returned.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addValue(com.sleepycat.bdb.DataThang, java.lang.Object, int)"><!-- --></A><H3>
+addValue</H3>
+<PRE>
+public int <B>addValue</B>(<A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;primaryKeyThang,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Adds a duplicate value for a specified key.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyThang</CODE> - key of new record.<DD><CODE>value</CODE> - value of new record.<DD><CODE>flags</CODE> - must be 0 or NODUPDATA or KEYFIRST or KEYLAST.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="append(java.lang.Object, java.lang.Object[], java.lang.Object[])"><!-- --></A><H3>
+append</H3>
+<PRE>
+public int <B>append</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Appends a value and returns the new key. If a key assigner is used
+ it assigns the key, otherwise a QUEUE or RECNO database is required.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - is the value to append.<DD><CODE>retPrimaryKey</CODE> - used to store the assigned key.<DD><CODE>retValue</CODE> - used to store the resulting entity, or null if none
+ should be returned.
+<DT><B>Returns:</B><DD>an error or zero for success.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear(java.util.Collection)"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;oldValues)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Deletes all records in the current range, optionally returning the
+ values for the deleted records.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>oldValues</CODE> - is used to store the values that are cleared, or null
+ if the old values should not be returned.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A> <B>join</B>(<A HREF="../../../com/sleepycat/bdb/DataView.html">DataView</A>[]&nbsp;indexViews,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns a cursor for this view that reads only records having the
+ specified index key values.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>indexViews</CODE> - are the views to be joined.<DD><CODE>indexKeys</CODE> - are the keys to join on for each view.<DD><CODE>presorted</CODE> - is whether the given views are presorted or should be
+ sorted by number of values per key.
+<DT><B>Returns:</B><DD>the join cursor.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(com.sleepycat.bdb.DataCursor[], boolean)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A> <B>join</B>(<A HREF="../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>[]&nbsp;indexCursors,
+ boolean&nbsp;presorted)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>presorted</CODE> - is whether the given cursors are presorted or should be
+ sorted by number of values per key.
+<DT><B>Returns:</B><DD>the join cursor.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - if a database problem occurs.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if an IO problem occurs.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="canDeriveKeyFromValue()"><!-- --></A><H3>
+canDeriveKeyFromValue</H3>
+<PRE>
+public boolean <B>canDeriveKeyFromValue</B>()</PRE>
+<DL>
+<DD>Returns whether data keys can be derived from the value/entity binding
+ of this view, which determines whether a value/entity object alone is
+ sufficient for operations that require keys.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether data keys can be derived.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataView.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataThang.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataView.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/ForeignKeyIndex.html b/db/docs/java/com/sleepycat/bdb/ForeignKeyIndex.html
new file mode 100644
index 000000000..f201bf20e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/ForeignKeyIndex.html
@@ -0,0 +1,391 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+ForeignKeyIndex (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.ForeignKeyIndex,ForeignKeyIndex class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ForeignKeyIndex (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForeignKeyIndex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForeignKeyIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class ForeignKeyIndex</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../com/sleepycat/bdb/DataIndex.html">com.sleepycat.bdb.DataIndex</A>
+ |
+ +--<B>com.sleepycat.bdb.ForeignKeyIndex</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ForeignKeyIndex</B><DT>extends <A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></DL>
+
+<P>
+Represents a Berkeley DB secondary index where the index key is the primary
+ key of another data store. An index is always attached to a single <A HREF="../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> when it is constructed. An index is typically accessed by
+ passing it to the constructor of one of the collection classes in the <A HREF="../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> package. For example:
+
+ <pre>
+ Db db = new Db(env, 0);
+ db.setFlags(Db.DB_DUPSORT);
+ db.open(null, "index.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ ForeignKeyIndex index = new ForeignKeyIndex(store, db, keyExtractor,
+ foreignStore, deleteAction);
+ StoredMap map = new StoredMap(index, keyBinding, valueBinding, writeAllowed);
+ </pre>
+
+ <p>All access methods may be used with BDB. However, some access methods
+ may only be used with certain types of collection views, and some access
+ methods impose restrictions on the way collection views are used.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_ABORT">ON_DELETE_ABORT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When the foreign key is deleted, throw an exception.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CASCADE">ON_DELETE_CASCADE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When the foreign key is deleted, delete the index key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR">ON_DELETE_CLEAR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When the foreign key is deleted, clear the index key.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)">ForeignKeyIndex</A></B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#getDeleteAction()">getDeleteAction</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a value indicating what action occurs when the foreign key
+ is deleted.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html#getForeignStore()">getForeignStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the foreign store which has the primary key which matches the
+ index key of this store.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.DataIndex"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/bdb/DataIndex.html#getKeyExtractor()">getKeyExtractor</A>, <A HREF="../../../com/sleepycat/bdb/DataIndex.html#getKeyFormat()">getKeyFormat</A>, <A HREF="../../../com/sleepycat/bdb/DataIndex.html#getStore()">getStore</A>, <A HREF="../../../com/sleepycat/bdb/DataIndex.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ON_DELETE_ABORT"><!-- --></A><H3>
+ON_DELETE_ABORT</H3>
+<PRE>
+public static final int <B>ON_DELETE_ABORT</B></PRE>
+<DL>
+<DD>When the foreign key is deleted, throw an exception.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_ABORT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ON_DELETE_CASCADE"><!-- --></A><H3>
+ON_DELETE_CASCADE</H3>
+<PRE>
+public static final int <B>ON_DELETE_CASCADE</B></PRE>
+<DL>
+<DD>When the foreign key is deleted, delete the index key.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_CASCADE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ON_DELETE_CLEAR"><!-- --></A><H3>
+ON_DELETE_CLEAR</H3>
+<PRE>
+public static final int <B>ON_DELETE_CLEAR</B></PRE>
+<DL>
+<DD>When the foreign key is deleted, clear the index key.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_CLEAR">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)"><!-- --></A><H3>
+ForeignKeyIndex</H3>
+<PRE>
+public <B>ForeignKeyIndex</B>(<A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</PRE>
+<DL>
+<DD>Creates a foreign key index from a previously opened Db object.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - the store to be indexed and also specifies the
+ environment that was used to create the Db object.<DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>keyExtractor</CODE> - an object for extracting the index key from primary
+ key and/or value buffers, and for clearing the index key in a value
+ buffer.<DD><CODE>foreignStore</CODE> - is the store in which the index key for this store
+ is a primary key.<DD><CODE>deleteAction</CODE> - determines what action occurs when the foreign key
+ is deleted. It must be one of the ON_DELETE_ constants.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if a format mismatch is detected
+ between the index and the store, or if unsorted duplicates were
+ specified for the index Db.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getForeignStore()"><!-- --></A><H3>
+getForeignStore</H3>
+<PRE>
+public final <A HREF="../../../com/sleepycat/bdb/DataStore.html">DataStore</A> <B>getForeignStore</B>()</PRE>
+<DL>
+<DD>Returns the foreign store which has the primary key which matches the
+ index key of this store.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDeleteAction()"><!-- --></A><H3>
+getDeleteAction</H3>
+<PRE>
+public final int <B>getDeleteAction</B>()</PRE>
+<DL>
+<DD>Returns a value indicating what action occurs when the foreign key
+ is deleted. It must be one of the ON_DELETE_ constants.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ForeignKeyIndex.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/DataView.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForeignKeyIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/IntegrityConstraintException.html b/db/docs/java/com/sleepycat/bdb/IntegrityConstraintException.html
new file mode 100644
index 000000000..ac8bd6ae6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/IntegrityConstraintException.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+IntegrityConstraintException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.IntegrityConstraintException,IntegrityConstraintException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="IntegrityConstraintException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/IntegrityConstraintException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/KeyRangeException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IntegrityConstraintException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class IntegrityConstraintException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html">java.lang.RuntimeException</A>
+ |
+ +--<B>com.sleepycat.bdb.IntegrityConstraintException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>IntegrityConstraintException</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html">RuntimeException</A></DL>
+
+<P>
+Thrown when an integrity constraint violation occurs. This normally occurs
+ when an attempt is made to delete a store element, and the primary key of
+ that element is referenced by a foreign key index with a ON_DELETE_ABORT
+ delete action. It may also occur when an internal index inconsistency is
+ detected, in processing a ForeignKeyIndex or a DataIndex.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A>,
+<A HREF="../../../serialized-form.html" TARGET="com.sleepycat.bdb.IntegrityConstraintException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/IntegrityConstraintException.html#IntegrityConstraintException(java.lang.String)">IntegrityConstraintException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an integrity constraint exception.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="IntegrityConstraintException(java.lang.String)"><!-- --></A><H3>
+IntegrityConstraintException</H3>
+<PRE>
+public <B>IntegrityConstraintException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</PRE>
+<DL>
+<DD>Creates an integrity constraint exception.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/IntegrityConstraintException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/KeyRangeException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IntegrityConstraintException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/KeyRangeException.html b/db/docs/java/com/sleepycat/bdb/KeyRangeException.html
new file mode 100644
index 000000000..8d76341fa
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/KeyRangeException.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+KeyRangeException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.KeyRangeException,KeyRangeException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="KeyRangeException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/KeyRangeException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/IntegrityConstraintException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyRangeException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class KeyRangeException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html">java.lang.RuntimeException</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">java.lang.IllegalArgumentException</A>
+ |
+ +--<B>com.sleepycat.bdb.KeyRangeException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>KeyRangeException</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></DL>
+
+<P>
+(<em>internal</em>) An exception thrown when a key is out of range.
+
+ <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ deleted in the future. It is public only so it may be used by
+ subpackages.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.bdb.KeyRangeException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/KeyRangeException.html#KeyRangeException(java.lang.String)">KeyRangeException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key range exception.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="KeyRangeException(java.lang.String)"><!-- --></A><H3>
+KeyRangeException</H3>
+<PRE>
+public <B>KeyRangeException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</PRE>
+<DL>
+<DD>Creates a key range exception.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/KeyRangeException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/IntegrityConstraintException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyRangeException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Throwable">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/PrimaryKeyAssigner.html b/db/docs/java/com/sleepycat/bdb/PrimaryKeyAssigner.html
new file mode 100644
index 000000000..8848b38e0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/PrimaryKeyAssigner.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.PrimaryKeyAssigner,PrimaryKeyAssigner interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PrimaryKeyAssigner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/TransactionWorker.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PrimaryKeyAssigner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Interface PrimaryKeyAssigner</H2>
+<HR>
+<DL>
+<DT>public interface <B>PrimaryKeyAssigner</B></DL>
+
+<P>
+An interface implemented to assign new primary key values.
+ An implementation of this interface is passed to the <A HREF="../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>
+ constructor to assign primary keys for that store. Key assignment occurs
+ when <A HREF="../../../com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)"><CODE>StoredMap.append(java.lang.Object)</CODE></A> or <A HREF="../../../com/sleepycat/bdb/collection/StoredList.html#append(java.lang.Object)"><CODE>StoredList.append(java.lang.Object)</CODE></A> is called.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html#assignKey(com.sleepycat.bdb.bind.DataBuffer)">assignKey</A></B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;keyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assigns a new primary key value into the given data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="assignKey(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+assignKey</H3>
+<PRE>
+public void <B>assignKey</B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;keyData)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Assigns a new primary key value into the given data buffer.
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/PrimaryKeyAssigner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/TransactionWorker.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PrimaryKeyAssigner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/RecordNumberBinding.html b/db/docs/java/com/sleepycat/bdb/RecordNumberBinding.html
new file mode 100644
index 000000000..f46864f62
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/RecordNumberBinding.html
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.RecordNumberBinding,RecordNumberBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RecordNumberBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class RecordNumberBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.RecordNumberBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>RecordNumberBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DL>
+
+<P>
+A concrete binding for record number keys. Record numbers are returned
+ as Long objects, although on input any Number object may be used.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html#RecordNumberBinding(com.sleepycat.bdb.RecordNumberFormat)">RecordNumberBinding</A></B>(<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a byte array binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="RecordNumberBinding(com.sleepycat.bdb.RecordNumberFormat)"><!-- --></A><H3>
+RecordNumberBinding</H3>
+<PRE>
+public <B>RecordNumberBinding</B>(<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a byte array binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RecordNumberBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/RecordNumberFormat.html b/db/docs/java/com/sleepycat/bdb/RecordNumberFormat.html
new file mode 100644
index 000000000..f34cecc1f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/RecordNumberFormat.html
@@ -0,0 +1,318 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+RecordNumberFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.RecordNumberFormat,RecordNumberFormat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="RecordNumberFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RecordNumberFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class RecordNumberFormat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.RecordNumberFormat</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>RecordNumberFormat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DL>
+
+<P>
+The data format for record number keys. This class must be used whenever a
+ record number is used with a store, index, or binding. It is used to
+ identify Berkeley DB record numbers as such and perform special processing
+ required by Berkeley DB. Namely, the byte order of record numbers is not
+ the same as the byte order for integers in Java, and is also platform
+ dependent.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html#RecordNumberFormat()">RecordNumberFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a record number format.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html#dataToRecordNumber(com.sleepycat.bdb.bind.DataBuffer)">dataToRecordNumber</A></B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a data buffer to an
+ record number integer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;o)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html#recordNumberToData(long, com.sleepycat.bdb.bind.DataBuffer)">recordNumberToData</A></B>(long&nbsp;recordNumber,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a record number integer
+ to a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="RecordNumberFormat()"><!-- --></A><H3>
+RecordNumberFormat</H3>
+<PRE>
+public <B>RecordNumberFormat</B>()</PRE>
+<DL>
+<DD>Creates a record number format.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToRecordNumber(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToRecordNumber</H3>
+<PRE>
+public final long <B>dataToRecordNumber</B>(<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</PRE>
+<DL>
+<DD>Utility method for use by bindings to translate a data buffer to an
+ record number integer.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - the data buffer.
+<DT><B>Returns:</B><DD>the record number.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="recordNumberToData(long, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+recordNumberToData</H3>
+<PRE>
+public final void <B>recordNumberToData</B>(long&nbsp;recordNumber,
+ <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</PRE>
+<DL>
+<DD>Utility method for use by bindings to translate a record number integer
+ to a data buffer.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>recordNumber</CODE> - the record number.<DD><CODE>data</CODE> - the data buffer to hold the record number.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;o)</PRE>
+<DL>
+<DD>Test for equality.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>o</CODE> - the object to check.
+<DT><B>Returns:</B><DD>true if the given object is a RecordNumberFormat instance,
+ since all RecordNumberFormat instances are equivalent.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RecordNumberFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/StoredClassCatalog.html b/db/docs/java/com/sleepycat/bdb/StoredClassCatalog.html
new file mode 100644
index 000000000..c6b8ee870
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/StoredClassCatalog.html
@@ -0,0 +1,373 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.StoredClassCatalog,StoredClassCatalog class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/TransactionRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class StoredClassCatalog</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.StoredClassCatalog</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredClassCatalog</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></DL>
+
+<P>
+Java serialization catalog used for compact storage of database objects.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.DbEnv, java.lang.String, java.lang.String, int)">StoredClassCatalog</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;openFlags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a catalog database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close a catalog database and release any cached resources.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html#getClassFormat(byte[])">getClassFormat</A></B>(byte[]&nbsp;classID)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ObjectStreamClass for the given class ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html#getClassFormat(java.lang.String)">getClassFormat</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ObjectStreamClass for the given class name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html#getClassID(java.lang.String)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the class ID for the current version of the given class name.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredClassCatalog(com.sleepycat.db.DbEnv, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+StoredClassCatalog</H3>
+<PRE>
+public <B>StoredClassCatalog</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;openFlags)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A>,
+ <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Open a catalog database. To save resources, only a single catalog object
+ should be used for each unique catalog file.
+<P>
+<DT><B>Parameters:</B><DD><CODE>env</CODE> - is the environment in which to open the catalog.<DD><CODE>file</CODE> - is the name of the catalog file.<DD><CODE>database</CODE> - the database name to be used within the specified
+ store. If null then the filename is the database name.<DD><CODE>openFlags</CODE> - Flags for calling Db.open such as Db.DB_CREATE and
+ Db.DB_AUTO_COMMIT.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></B></DD>
+<DD>Close a catalog database and release any cached resources.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#close()">close</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassID(java.lang.String)"><!-- --></A><H3>
+getClassID</H3>
+<PRE>
+public byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></B></DD>
+<DD>Return the class ID for the current version of the given class name.
+ This is used for storing in serialization streams in place of a full
+ class descriptor, since it is much more compact. To get back the
+ ObjectStreamClass for a class ID, call <A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(byte[])"><CODE>ClassCatalog.getClassFormat(byte[])</CODE></A>.
+ This function causes a new class ID to be assigned if the class
+ description has changed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassID(java.lang.String)">getClassID</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>className</CODE> - The fully qualified class name for which to return the
+ class ID.
+<DT><B>Returns:</B><DD>The class ID for the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassFormat(java.lang.String)"><!-- --></A><H3>
+getClassFormat</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A> <B>getClassFormat</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></B></DD>
+<DD>Return the ObjectStreamClass for the given class name. This is always
+ the current class format. Calling this method is equivalent to calling
+ java.io.ObjectStreamClass.lookup, but this method causes a new class
+ ID to be assigned if the class description has changed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(java.lang.String)">getClassFormat</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>className</CODE> - The fully qualified class name for which to return the
+ class format.
+<DT><B>Returns:</B><DD>The class format for the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassFormat(byte[])"><!-- --></A><H3>
+getClassFormat</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A> <B>getClassFormat</B>(byte[]&nbsp;classID)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></B></DD>
+<DD>Return the ObjectStreamClass for the given class ID. This may or may not
+ be the current class format, depending on whether the class has changed
+ since the class ID was generated.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(byte[])">getClassFormat</A></CODE> in interface <CODE><A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>classID</CODE> - The class ID for which to return the class format.
+<DT><B>Returns:</B><DD>The class format for the given class ID, which may or may not
+ represent the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/TransactionRunner.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/TransactionRunner.html b/db/docs/java/com/sleepycat/bdb/TransactionRunner.html
new file mode 100644
index 000000000..bb24f8990
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/TransactionRunner.html
@@ -0,0 +1,442 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.TransactionRunner,TransactionRunner class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TransactionRunner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionRunner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Class TransactionRunner</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.TransactionRunner</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>TransactionRunner</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Starts a transaction, calls <A HREF="../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
+ transaction retry and exceptions.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv)">TransactionRunner</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a transaction runner for a given Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv, int)">TransactionRunner</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;maxRetries)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a transaction runner for a given Berkeley DB environment and
+ with a given number of maximum retries.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#getDirtyRead()">getDirtyRead</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether transactions will read data that is modified by another
+ transaction but not committed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#getMaxRetries()">getMaxRetries</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the maximum number of retries that will be performed when
+ deadlocks are detected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#getNoWait()">getNoWait</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)">run</A></B>(<A HREF="../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>&nbsp;worker)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, begins and ends a transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#setDirtyRead(boolean)">setDirtyRead</A></B>(boolean&nbsp;dirtyRead)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes whether transactions will read data that is modified by another
+ transaction but not committed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#setMaxRetries(int)">setMaxRetries</A></B>(int&nbsp;maxRetries)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the maximum number of retries that will be performed when
+ deadlocks are detected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#setNoWait(boolean)">setNoWait</A></B>(boolean&nbsp;noWait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TransactionRunner(com.sleepycat.db.DbEnv)"><!-- --></A><H3>
+TransactionRunner</H3>
+<PRE>
+public <B>TransactionRunner</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</PRE>
+<DL>
+<DD>Creates a transaction runner for a given Berkeley DB environment.
+ The default maximum number of retries (10) will be used.
+<P>
+<DT><B>Parameters:</B><DD><CODE>env</CODE> - is the environment for running transactions.</DL>
+<HR>
+
+<A NAME="TransactionRunner(com.sleepycat.db.DbEnv, int)"><!-- --></A><H3>
+TransactionRunner</H3>
+<PRE>
+public <B>TransactionRunner</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;maxRetries)</PRE>
+<DL>
+<DD>Creates a transaction runner for a given Berkeley DB environment and
+ with a given number of maximum retries.
+<P>
+<DT><B>Parameters:</B><DD><CODE>env</CODE> - is the environment for running transactions.<DD><CODE>maxRetries</CODE> - is the maximum number of retries that will be performed
+ when deadlocks are detected.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getMaxRetries()"><!-- --></A><H3>
+getMaxRetries</H3>
+<PRE>
+public int <B>getMaxRetries</B>()</PRE>
+<DL>
+<DD>Returns the maximum number of retries that will be performed when
+ deadlocks are detected.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMaxRetries(int)"><!-- --></A><H3>
+setMaxRetries</H3>
+<PRE>
+public void <B>setMaxRetries</B>(int&nbsp;maxRetries)</PRE>
+<DL>
+<DD>Changes the maximum number of retries that will be performed when
+ deadlocks are detected.
+ Calling this method does not impact transactions already running.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDirtyRead()"><!-- --></A><H3>
+getDirtyRead</H3>
+<PRE>
+public boolean <B>getDirtyRead</B>()</PRE>
+<DL>
+<DD>Returns whether transactions will read data that is modified by another
+ transaction but not committed.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDirtyRead(boolean)"><!-- --></A><H3>
+setDirtyRead</H3>
+<PRE>
+public void <B>setDirtyRead</B>(boolean&nbsp;dirtyRead)</PRE>
+<DL>
+<DD>Changes whether transactions will read data that is modified by another
+ transaction but not committed.
+ Calling this method does not impact transaction already running.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNoWait()"><!-- --></A><H3>
+getNoWait</H3>
+<PRE>
+public boolean <B>getNoWait</B>()</PRE>
+<DL>
+<DD>Returns whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setNoWait(boolean)"><!-- --></A><H3>
+setNoWait</H3>
+<PRE>
+public void <B>setNoWait</B>(boolean&nbsp;noWait)</PRE>
+<DL>
+<DD>Changes whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="run(com.sleepycat.bdb.TransactionWorker)"><!-- --></A><H3>
+run</H3>
+<PRE>
+public void <B>run</B>(<A HREF="../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>&nbsp;worker)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></PRE>
+<DL>
+<DD>Calls the <A HREF="../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, begins and ends a transaction. If the environment given
+ is non-transactional, a transaction will not be used but the doWork()
+ method will still be called.
+
+ <p> In a transactional environment, a new transaction is started before
+ calling doWork(). This will start a nested transaction if one is
+ already active. If DbDeadlockException is thrown by doWork(), the
+ transaction will be aborted and the process will be repeated up to the
+ maximum number of retries specified. If another exception is thrown by
+ doWork() or the maximum number of retries has occurred, the transaction
+ will be aborted and the exception will be rethrown by this method. If
+ no exception is thrown by doWork(), the transaction will be committed.
+ This method will not attempt to commit or abort a transaction if it has
+ already been committed or aborted by doWork(). </p>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - when it is thrown by doWork() and the
+ maximum number of retries has occurred. The transaction will have been
+ aborted by this method.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></CODE> - when any other exception is thrown by doWork(). The
+ exception will first be unwrapped by calling <A HREF="../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrap(java.lang.Exception)"><CODE>ExceptionUnwrapper.unwrap(java.lang.Exception)</CODE></A>. The transaction will have been aborted by
+ this method.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TransactionRunner.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionRunner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/TransactionWorker.html b/db/docs/java/com/sleepycat/bdb/TransactionWorker.html
new file mode 100644
index 000000000..d6074b7d1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/TransactionWorker.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.TransactionWorker,TransactionWorker interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TransactionWorker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionWorker.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb</FONT>
+<BR>
+Interface TransactionWorker</H2>
+<HR>
+<DL>
+<DT>public interface <B>TransactionWorker</B></DL>
+
+<P>
+The interface implemented to perform the work within a transaction.
+ To run a transaction, an instance of this interface is passed to the
+ <A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)"><CODE>TransactionRunner.run(com.sleepycat.bdb.TransactionWorker)</CODE></A> method.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/bdb/TransactionWorker.html#doWork()">doWork</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform the work for a single transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="doWork()"><!-- --></A><H3>
+doWork</H3>
+<PRE>
+public void <B>doWork</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></PRE>
+<DL>
+<DD>Perform the work for a single transaction.
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></CODE><DT><B>See Also:</B><DD><A HREF="../../../com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)"><CODE>TransactionRunner.run(com.sleepycat.bdb.TransactionWorker)</CODE></A></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TransactionWorker.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionWorker.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/ByteArrayBinding.html b/db/docs/java/com/sleepycat/bdb/bind/ByteArrayBinding.html
new file mode 100644
index 000000000..566609cca
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/ByteArrayBinding.html
@@ -0,0 +1,317 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.ByteArrayBinding,ByteArrayBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ByteArrayBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Class ByteArrayBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.ByteArrayBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ByteArrayBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DL>
+
+<P>
+A transparent binding where the data byte array is used as the object.
+ The Object of the binding is of type <code>byte[]</code> and the data is
+ nothing more than the byte array itself.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#ByteArrayBinding(com.sleepycat.bdb.bind.ByteArrayFormat)">ByteArrayBinding</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a byte array binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ByteArrayBinding(com.sleepycat.bdb.bind.ByteArrayFormat)"><!-- --></A><H3>
+ByteArrayBinding</H3>
+<PRE>
+public <B>ByteArrayBinding</B>(<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a byte array binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ByteArrayBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/ByteArrayFormat.html b/db/docs/java/com/sleepycat/bdb/bind/ByteArrayFormat.html
new file mode 100644
index 000000000..92ab17b98
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/ByteArrayFormat.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+ByteArrayFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.ByteArrayFormat,ByteArrayFormat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ByteArrayFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ByteArrayFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Class ByteArrayFormat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.ByteArrayFormat</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ByteArrayFormat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DL>
+
+<P>
+The format for data stored as a byte array.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html#ByteArrayFormat()">ByteArrayFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a byte array format.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ByteArrayFormat()"><!-- --></A><H3>
+ByteArrayFormat</H3>
+<PRE>
+public <B>ByteArrayFormat</B>()</PRE>
+<DL>
+<DD>Creates a byte array format.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ByteArrayFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/DataBinding.html b/db/docs/java/com/sleepycat/bdb/bind/DataBinding.html
new file mode 100644
index 000000000..2317121e2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/DataBinding.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+DataBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.DataBinding,DataBinding interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface DataBinding</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>, <A HREF="../../../../com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>, <A HREF="../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>, <A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>, <A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>DataBinding</B></DL>
+
+<P>
+The interface implemented by all data-to-object bindings.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/DataBuffer.html b/db/docs/java/com/sleepycat/bdb/bind/DataBuffer.html
new file mode 100644
index 000000000..f154437c7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/DataBuffer.html
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+DataBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.DataBuffer,DataBuffer interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataBuffer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface DataBuffer</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>, <A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>DataBuffer</B></DL>
+
+<P>
+The interface used in bindings to access the data as a byte array.
+
+ <p>Each data buffer may contain a formation Object that is associated with
+ the data. The formation may be used by bindings to cache an internal
+ representation of the data that is specific to the format but can be used by
+ all bindings. The formation must be cleared whenever the data in the buffer
+ is changed.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#clearDataFormation()">clearDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataBytes()">getDataBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte array of the data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataFormation()">getDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the formation associated with the data in this buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataLength()">getDataLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataOffset()">getDataOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte offset of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#setData(byte[], int, int)">setData</A></B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the data in this buffer to the given value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#setDataFormation(java.lang.Object)">setDataFormation</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="setData(byte[], int, int)"><!-- --></A><H3>
+setData</H3>
+<PRE>
+public void <B>setData</B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Sets the data in this buffer to the given value. The byte array given
+ will be owned by this buffer object after this method is called and
+ must not be modified thereafter. This method must clear the data
+ formation for this buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the data array and must not be modified after this
+ method is called.<DD><CODE>offset</CODE> - is the byte offset of the data in the array.<DD><CODE>length</CODE> - is the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataBytes()"><!-- --></A><H3>
+getDataBytes</H3>
+<PRE>
+public byte[] <B>getDataBytes</B>()</PRE>
+<DL>
+<DD>Returns the byte array of the data buffer. This array is owned by
+ the buffer object and should not be modified.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte array of the data buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataOffset()"><!-- --></A><H3>
+getDataOffset</H3>
+<PRE>
+public int <B>getDataOffset</B>()</PRE>
+<DL>
+<DD>Returns the byte offset of the data in the array.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte offset of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataLength()"><!-- --></A><H3>
+getDataLength</H3>
+<PRE>
+public int <B>getDataLength</B>()</PRE>
+<DL>
+<DD>Returns the byte length of the data in the array.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataFormation(java.lang.Object)"><!-- --></A><H3>
+setDataFormation</H3>
+<PRE>
+public void <B>setDataFormation</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</PRE>
+<DL>
+<DD>Sets the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>formation</CODE> - is Object to set.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormation()"><!-- --></A><H3>
+getDataFormation</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getDataFormation</B>()</PRE>
+<DL>
+<DD>Returns the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>formation Object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearDataFormation()"><!-- --></A><H3>
+clearDataFormation</H3>
+<PRE>
+public void <B>clearDataFormation</B>()</PRE>
+<DL>
+<DD>Sets the formation associated with the data in this buffer to null.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataBuffer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/DataFormat.html b/db/docs/java/com/sleepycat/bdb/bind/DataFormat.html
new file mode 100644
index 000000000..6b0cb56bd
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/DataFormat.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+DataFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.DataFormat,DataFormat interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataType.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface DataFormat</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>, <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>, <A HREF="../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>, <A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>DataFormat</B></DL>
+
+<P>
+The tag interface implemented by all data formats.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataType.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/DataType.html b/db/docs/java/com/sleepycat/bdb/bind/DataType.html
new file mode 100644
index 000000000..3ecaab5bc
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/DataType.html
@@ -0,0 +1,346 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+DataType (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.DataType,DataType interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DataType (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataType.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataType.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface DataType</H2>
+<HR>
+<DL>
+<DT>public interface <B>DataType</B></DL>
+
+<P>
+Primitive data type constants.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#BINARY">BINARY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>byte[]</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#DATETIME">DATETIME</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>Date</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#DOUBLE">DOUBLE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>Double</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#FLOAT">FLOAT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>Float</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#INT">INT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>Integer</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#LONG">LONG</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>Long</code> data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#NONE">NONE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undefined data type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/DataType.html#STRING">STRING</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>String</code> data type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="NONE"><!-- --></A><H3>
+NONE</H3>
+<PRE>
+public static final int <B>NONE</B></PRE>
+<DL>
+<DD>Undefined data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.NONE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="STRING"><!-- --></A><H3>
+STRING</H3>
+<PRE>
+public static final int <B>STRING</B></PRE>
+<DL>
+<DD><code>String</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.STRING">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BINARY"><!-- --></A><H3>
+BINARY</H3>
+<PRE>
+public static final int <B>BINARY</B></PRE>
+<DL>
+<DD><code>byte[]</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.BINARY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INT"><!-- --></A><H3>
+INT</H3>
+<PRE>
+public static final int <B>INT</B></PRE>
+<DL>
+<DD><code>Integer</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.INT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="LONG"><!-- --></A><H3>
+LONG</H3>
+<PRE>
+public static final int <B>LONG</B></PRE>
+<DL>
+<DD><code>Long</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.LONG">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLOAT"><!-- --></A><H3>
+FLOAT</H3>
+<PRE>
+public static final int <B>FLOAT</B></PRE>
+<DL>
+<DD><code>Float</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.FLOAT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DOUBLE"><!-- --></A><H3>
+DOUBLE</H3>
+<PRE>
+public static final int <B>DOUBLE</B></PRE>
+<DL>
+<DD><code>Double</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.DOUBLE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DATETIME"><!-- --></A><H3>
+DATETIME</H3>
+<PRE>
+public static final int <B>DATETIME</B></PRE>
+<DL>
+<DD><code>Date</code> data type.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.bind.DataType.DATETIME">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DataType.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataType.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/EntityBinding.html b/db/docs/java/com/sleepycat/bdb/bind/EntityBinding.html
new file mode 100644
index 000000000..69da206a9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/EntityBinding.html
@@ -0,0 +1,309 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.EntityBinding,EntityBinding interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EntityBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataType.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EntityBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface EntityBinding</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>, <A HREF="../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>, <A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>EntityBinding</B></DL>
+
+<P>
+The interface implemented by all entity or key/data-to-object bindings.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the key data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the value data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the value data from an entity Object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Converts key and value data buffers into an entity Object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the source key data.<DD><CODE>value</CODE> - is the source value data.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the key data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>key</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the value data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>value</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD>Returns the format used for the key data of this binding.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD>Returns the format used for the value data of this binding.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value data format.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/EntityBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataType.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EntityBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/KeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/KeyExtractor.html
new file mode 100644
index 000000000..19c5a19e3
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/KeyExtractor.html
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+KeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.KeyExtractor,KeyExtractor interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="KeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/KeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Interface KeyExtractor</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>, <A HREF="../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>, <A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>KeyExtractor</B></DL>
+
+<P>
+The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer. The
+ implementation of this interface defines a specific index key for use in a
+ database, and that is independent of any bindings that may be used.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the index key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the value data or null if the index key data is
+ not derived from the value data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the index key data from primary key and value buffers.
+ The index key is extracted when saving the data record identified by the
+ primary key and value buffers, in order to add or remove an index
+ entry in the database for that data record.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyData</CODE> - is the source primary key data, or null if no
+ primary key data is used to construct the index key, in which case
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()"><CODE>getPrimaryKeyFormat()</CODE></A> should also return null.<DD><CODE>valueData</CODE> - is the source value data, or null if no value data is
+ used to construct the index key, in which case <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()"><CODE>getValueFormat()</CODE></A>
+ should also return null.<DD><CODE>indexKeyData</CODE> - is the destination index key buffer. For index keys
+ which are optionally present, the buffer's length should be set to zero
+ to indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clears the index key in a value buffer. The index key is cleared when
+ the index is for a foreign key identifying a record that has been
+ deleted. This method is called only if the <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A> is configured with <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A>. It is never called
+ for index keys that are derived from primary key data, since in this
+ case <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A> is not
+ allowed.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueData</CODE> - is the source and destination value data. On entry
+ this contains the index key to be cleared. It should be changed by this
+ method such that <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a null key (set
+ the buffer length to zero). Other data in the buffer should remain
+ unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPrimaryKeyFormat()"><!-- --></A><H3>
+getPrimaryKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getPrimaryKeyFormat</B>()</PRE>
+<DL>
+<DD>Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data. If this method returns null,
+ then null will be passed for the <code>primaryKeyData</code> parameter
+ of <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the primary key data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD>Returns the format of the value data or null if the index key data is
+ not derived from the value data. If this method returns null, then null
+ will be passed for the <code>valueData</code> parameter of <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the value data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndexKeyFormat()"><!-- --></A><H3>
+getIndexKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getIndexKeyFormat</B>()</PRE>
+<DL>
+<DD>Returns the format of the index key data.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the index key data.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/KeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/SimpleBuffer.html b/db/docs/java/com/sleepycat/bdb/bind/SimpleBuffer.html
new file mode 100644
index 000000000..3a89602e2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/SimpleBuffer.html
@@ -0,0 +1,463 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SimpleBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.SimpleBuffer,SimpleBuffer class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SimpleBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SimpleBuffer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SimpleBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind</FONT>
+<BR>
+Class SimpleBuffer</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.SimpleBuffer</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>SimpleBuffer</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></DL>
+
+<P>
+A simple data buffer implementation that allows using bindings for arbitrary
+ data outside the context of a database.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer()">SimpleBuffer</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a simple buffer with null data, an offset of zero and a length
+ of zero.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer(byte[])">SimpleBuffer</A></B>(byte[]&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a simple buffer with the given data with an offset of zero and a
+ length equal to the length of the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer(byte[], int, int)">SimpleBuffer</A></B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a simple buffer with the given data, offset and length.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#clearDataFormation()">clearDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#getDataBytes()">getDataBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte array of the data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#getDataFormation()">getDataFormation</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the formation associated with the data in this buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#getDataLength()">getDataLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#getDataOffset()">getDataOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte offset of the data in the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#setData(byte[], int, int)">setData</A></B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the data in this buffer to the given value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html#setDataFormation(java.lang.Object)">setDataFormation</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the formation associated with the data in this buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SimpleBuffer()"><!-- --></A><H3>
+SimpleBuffer</H3>
+<PRE>
+public <B>SimpleBuffer</B>()</PRE>
+<DL>
+<DD>Creates a simple buffer with null data, an offset of zero and a length
+ of zero.
+<P>
+</DL>
+<HR>
+
+<A NAME="SimpleBuffer(byte[])"><!-- --></A><H3>
+SimpleBuffer</H3>
+<PRE>
+public <B>SimpleBuffer</B>(byte[]&nbsp;data)</PRE>
+<DL>
+<DD>Creates a simple buffer with the given data with an offset of zero and a
+ length equal to the length of the data array.
+<P>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the data array and must not be modified after this
+ method is called.</DL>
+<HR>
+
+<A NAME="SimpleBuffer(byte[], int, int)"><!-- --></A><H3>
+SimpleBuffer</H3>
+<PRE>
+public <B>SimpleBuffer</B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Creates a simple buffer with the given data, offset and length.
+<P>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the data array and must not be modified after this
+ method is called.<DD><CODE>offset</CODE> - is the byte offset of the data in the array.<DD><CODE>length</CODE> - is the byte length of the data in the array.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="setData(byte[], int, int)"><!-- --></A><H3>
+setData</H3>
+<PRE>
+public void <B>setData</B>(byte[]&nbsp;data,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the data in this buffer to the given value. The byte array given
+ will be owned by this buffer object after this method is called and
+ must not be modified thereafter. This method must clear the data
+ formation for this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#setData(byte[], int, int)">setData</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the data array and must not be modified after this
+ method is called.<DD><CODE>offset</CODE> - is the byte offset of the data in the array.<DD><CODE>length</CODE> - is the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataBytes()"><!-- --></A><H3>
+getDataBytes</H3>
+<PRE>
+public byte[] <B>getDataBytes</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte array of the data buffer. This array is owned by
+ the buffer object and should not be modified.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataBytes()">getDataBytes</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte array of the data buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataOffset()"><!-- --></A><H3>
+getDataOffset</H3>
+<PRE>
+public int <B>getDataOffset</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte offset of the data in the array.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataOffset()">getDataOffset</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte offset of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataLength()"><!-- --></A><H3>
+getDataLength</H3>
+<PRE>
+public int <B>getDataLength</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the byte length of the data in the array.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataLength()">getDataLength</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte length of the data in the array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataFormation(java.lang.Object)"><!-- --></A><H3>
+setDataFormation</H3>
+<PRE>
+public void <B>setDataFormation</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;formation)</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#setDataFormation(java.lang.Object)">setDataFormation</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>formation</CODE> - is Object to set.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormation()"><!-- --></A><H3>
+getDataFormation</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getDataFormation</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Returns the formation associated with the data in this buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#getDataFormation()">getDataFormation</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>formation Object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearDataFormation()"><!-- --></A><H3>
+clearDataFormation</H3>
+<PRE>
+public void <B>clearDataFormation</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></B></DD>
+<DD>Sets the formation associated with the data in this buffer to null.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html#clearDataFormation()">clearDataFormation</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SimpleBuffer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SimpleBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayBinding.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayBinding.html
new file mode 100644
index 000000000..7542122e5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.ByteArrayBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.ByteArrayBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.ByteArrayBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayFormat.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayFormat.html
new file mode 100644
index 000000000..8db3ce124
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/ByteArrayFormat.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.ByteArrayFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.ByteArrayFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.ByteArrayFormat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind"><B>com.sleepycat.bdb.bind</B></A></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#ByteArrayBinding(com.sleepycat.bdb.bind.ByteArrayFormat)">ByteArrayBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a byte array binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ByteArrayFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBinding.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBinding.html
new file mode 100644
index 000000000..6e80b06ef
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBinding.html
@@ -0,0 +1,545 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.DataBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.DataBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.DataBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind"><B>com.sleepycat.bdb.bind</B></A></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete binding for record number keys.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#getKeyBinding()">getKeyBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key binding that is used.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#getValueBinding()">getValueBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value binding that is used.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)">subView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for key range, optionally changing
+ the key binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A transparent binding where the data byte array is used as the object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete serial binding for keys or values.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract tuple binding for tuple keys or values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete tuple binding for keys or values which are <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A>
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key or value binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A>
+ interface.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBuffer.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBuffer.html
new file mode 100644
index 000000000..9ec259a95
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataBuffer.html
@@ -0,0 +1,723 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.DataBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.DataBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.DataBuffer</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind"><B>com.sleepycat.bdb.bind</B></A></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A> in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberFormat.html#dataToRecordNumber(com.sleepycat.bdb.bind.DataBuffer)">dataToRecordNumber</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a data buffer to an
+ record number integer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberFormat.html#recordNumberToData(long, com.sleepycat.bdb.bind.DataBuffer)">recordNumberToData</A></B>(long&nbsp;recordNumber,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to translate a record number integer
+ to a data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>PrimaryKeyAssigner.</B><B><A HREF="../../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html#assignKey(com.sleepycat.bdb.bind.DataBuffer)">assignKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;keyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assigns a new primary key value into the given data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A simple data buffer implementation that allows using bindings for arbitrary
+ data outside the context of a database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the value data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>DataBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SerialFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to deserialize an object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to serialize an object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#outputToData(com.sleepycat.bdb.bind.tuple.TupleOutput, com.sleepycat.bdb.bind.DataBuffer)">outputToData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ output object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#inputToData(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.DataBuffer)">inputToData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ input object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#dataToInput(com.sleepycat.bdb.bind.DataBuffer)">dataToInput</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to create a new tuple input object for reading the data
+ from a given buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/DataFormat.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataFormat.html
new file mode 100644
index 000000000..5bef3be68
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataFormat.html
@@ -0,0 +1,551 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.DataFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.DataFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.DataFormat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind"><B>com.sleepycat.bdb.bind</B></A></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The data format for record number keys.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>RecordNumberBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/RecordNumberBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>DataStore.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataStore.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key format associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>DataStore.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataStore.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value format associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>DataIndex.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataIndex.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key format associated with this index.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)">DataStore</A></B>(<A HREF="../../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)">DataStore</A></B>(<A HREF="../../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)">DataIndex</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for data stored as a byte array.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the value data or null if the index key data is
+ not derived from the value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>KeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the index key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the key data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>EntityBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the value data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>DataBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>ByteArrayBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for serialized data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialSerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>SerialBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleInputBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/DataType.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataType.html
new file mode 100644
index 000000000..fa7f0958d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/DataType.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.DataType (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.DataType (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataType.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataType.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.DataType</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.DataType
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/DataType.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataType.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/EntityBinding.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/EntityBinding.html
new file mode 100644
index 000000000..5304f4fb5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/EntityBinding.html
@@ -0,0 +1,371 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.EntityBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EntityBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.EntityBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#getValueEntityBinding()">getValueEntityBinding</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the entity binding that is used.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract entity binding that uses a serial key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract entity binding that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract entity binding that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="EntityBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/KeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/KeyExtractor.html
new file mode 100644
index 000000000..2aa410bc3
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/KeyExtractor.html
@@ -0,0 +1,271 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.KeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.KeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.KeyExtractor</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A> in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></FONT></TD>
+<TD><CODE><B>DataIndex.</B><B><A HREF="../../../../../com/sleepycat/bdb/DataIndex.html#getKeyExtractor()">getKeyExtractor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key extractor associated with this index.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)">ForeignKeyIndex</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)">DataIndex</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract key extractor that uses a serial key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract key extractor that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that implement <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract key extractor that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/class-use/SimpleBuffer.html b/db/docs/java/com/sleepycat/bdb/bind/class-use/SimpleBuffer.html
new file mode 100644
index 000000000..aac7371af
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/class-use/SimpleBuffer.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.SimpleBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.SimpleBuffer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/SimpleBuffer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SimpleBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.SimpleBuffer</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.SimpleBuffer
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/bind/SimpleBuffer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SimpleBuffer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/package-frame.html b/db/docs/java/com/sleepycat/bdb/bind/package-frame.html
new file mode 100644
index 000000000..4e66afc40
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/package-frame.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.bind</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="DataBinding.html" TARGET="classFrame"><I>DataBinding</I></A>
+<BR>
+<A HREF="DataBuffer.html" TARGET="classFrame"><I>DataBuffer</I></A>
+<BR>
+<A HREF="DataFormat.html" TARGET="classFrame"><I>DataFormat</I></A>
+<BR>
+<A HREF="DataType.html" TARGET="classFrame"><I>DataType</I></A>
+<BR>
+<A HREF="EntityBinding.html" TARGET="classFrame"><I>EntityBinding</I></A>
+<BR>
+<A HREF="KeyExtractor.html" TARGET="classFrame"><I>KeyExtractor</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ByteArrayBinding.html" TARGET="classFrame">ByteArrayBinding</A>
+<BR>
+<A HREF="ByteArrayFormat.html" TARGET="classFrame">ByteArrayFormat</A>
+<BR>
+<A HREF="SimpleBuffer.html" TARGET="classFrame">SimpleBuffer</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/package-summary.html b/db/docs/java/com/sleepycat/bdb/bind/package-summary.html
new file mode 100644
index 000000000..938575da1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/package-summary.html
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/serial/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.bind
+</H2>
+Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataBinding.html"><I>DataBinding</I></A></B></TD>
+<TD>The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataBuffer.html"><I>DataBuffer</I></A></B></TD>
+<TD>The interface used in bindings to access the data as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataFormat.html"><I>DataFormat</I></A></B></TD>
+<TD>The tag interface implemented by all data formats.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataType.html"><I>DataType</I></A></B></TD>
+<TD>Primitive data type constants.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="EntityBinding.html"><I>EntityBinding</I></A></B></TD>
+<TD>The interface implemented by all entity or key/data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="KeyExtractor.html"><I>KeyExtractor</I></A></B></TD>
+<TD>The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ByteArrayBinding.html">ByteArrayBinding</A></B></TD>
+<TD>A transparent binding where the data byte array is used as the object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ByteArrayFormat.html">ByteArrayFormat</A></B></TD>
+<TD>The format for data stored as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SimpleBuffer.html">SimpleBuffer</A></B></TD>
+<TD>A simple data buffer implementation that allows using bindings for arbitrary
+ data outside the context of a database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.bind Description
+</H2>
+
+<P>
+<p>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/serial/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/package-tree.html b/db/docs/java/com/sleepycat/bdb/bind/package-tree.html
new file mode 100644
index 000000000..6e5304e09
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/package-tree.html
@@ -0,0 +1,142 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/serial/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.bind
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayBinding.html"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>ByteArrayFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/SimpleBuffer.html"><B>SimpleBuffer</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>)
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html"><B>DataBinding</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><B>DataBuffer</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html"><B>DataFormat</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/DataType.html"><B>DataType</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html"><B>EntityBinding</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html"><B>KeyExtractor</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/serial/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/package-use.html b/db/docs/java/com/sleepycat/bdb/bind/package-use.html
new file mode 100644
index 000000000..677703174
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/package-use.html
@@ -0,0 +1,329 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.bind (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.bind</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind"><B>com.sleepycat.bdb.bind</B></A></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../../../../../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> used by <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBinding.html#com.sleepycat.bdb"><B>DataBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBuffer.html#com.sleepycat.bdb"><B>DataBuffer</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface used in bindings to access the data as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataFormat.html#com.sleepycat.bdb"><B>DataFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The tag interface implemented by all data formats.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/EntityBinding.html#com.sleepycat.bdb"><B>EntityBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all entity or key/data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/KeyExtractor.html#com.sleepycat.bdb"><B>KeyExtractor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> used by <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/ByteArrayFormat.html#com.sleepycat.bdb.bind"><B>ByteArrayFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for data stored as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBinding.html#com.sleepycat.bdb.bind"><B>DataBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBuffer.html#com.sleepycat.bdb.bind"><B>DataBuffer</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface used in bindings to access the data as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataFormat.html#com.sleepycat.bdb.bind"><B>DataFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The tag interface implemented by all data formats.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> used by <A HREF="../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBinding.html#com.sleepycat.bdb.bind.serial"><B>DataBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBuffer.html#com.sleepycat.bdb.bind.serial"><B>DataBuffer</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface used in bindings to access the data as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataFormat.html#com.sleepycat.bdb.bind.serial"><B>DataFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The tag interface implemented by all data formats.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/EntityBinding.html#com.sleepycat.bdb.bind.serial"><B>EntityBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all entity or key/data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/KeyExtractor.html#com.sleepycat.bdb.bind.serial"><B>KeyExtractor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> used by <A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBinding.html#com.sleepycat.bdb.bind.tuple"><B>DataBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBuffer.html#com.sleepycat.bdb.bind.tuple"><B>DataBuffer</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface used in bindings to access the data as a byte array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataFormat.html#com.sleepycat.bdb.bind.tuple"><B>DataFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The tag interface implemented by all data formats.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/EntityBinding.html#com.sleepycat.bdb.bind.tuple"><B>EntityBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all entity or key/data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/KeyExtractor.html#com.sleepycat.bdb.bind.tuple"><B>KeyExtractor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A> used by <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/DataBinding.html#com.sleepycat.bdb.collection"><B>DataBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all data-to-object bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/bind/class-use/EntityBinding.html#com.sleepycat.bdb.collection"><B>EntityBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented by all entity or key/data-to-object bindings.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/ClassCatalog.html b/db/docs/java/com/sleepycat/bdb/bind/serial/ClassCatalog.html
new file mode 100644
index 000000000..31c3154fb
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/ClassCatalog.html
@@ -0,0 +1,312 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.ClassCatalog,ClassCatalog interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Interface ClassCatalog</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>ClassCatalog</B></DL>
+
+<P>
+Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.
+
+ <p>This information is used for serialization of class descriptors or
+ java.io.ObjectStreamClass objects, each of which represents a unique class
+ format. For each unique format, a unique class ID is assigned by the
+ catalog. The class ID can then be used in the serialization stream in place
+ of the full class information. When used with <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><CODE>SerialInput</CODE></A> and
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> or any of the serial bindings, the use of the catalog
+ is transparent to the application.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close a catalog database and release any cached resources.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(byte[])">getClassFormat</A></B>(byte[]&nbsp;classID)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ObjectStreamClass for the given class ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(java.lang.String)">getClassFormat</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ObjectStreamClass for the given class name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassID(java.lang.String)">getClassID</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the class ID for the current version of the given class name.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Close a catalog database and release any cached resources.
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassID(java.lang.String)"><!-- --></A><H3>
+getClassID</H3>
+<PRE>
+public byte[] <B>getClassID</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Return the class ID for the current version of the given class name.
+ This is used for storing in serialization streams in place of a full
+ class descriptor, since it is much more compact. To get back the
+ ObjectStreamClass for a class ID, call <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(byte[])"><CODE>getClassFormat(byte[])</CODE></A>.
+ This function causes a new class ID to be assigned if the class
+ description has changed.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>className</CODE> - The fully qualified class name for which to return the
+ class ID.
+<DT><B>Returns:</B><DD>The class ID for the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassFormat(java.lang.String)"><!-- --></A><H3>
+getClassFormat</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A> <B>getClassFormat</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;className)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Return the ObjectStreamClass for the given class name. This is always
+ the current class format. Calling this method is equivalent to calling
+ java.io.ObjectStreamClass.lookup, but this method causes a new class
+ ID to be assigned if the class description has changed.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>className</CODE> - The fully qualified class name for which to return the
+ class format.
+<DT><B>Returns:</B><DD>The class format for the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClassFormat(byte[])"><!-- --></A><H3>
+getClassFormat</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamClass.html">ObjectStreamClass</A> <B>getClassFormat</B>(byte[]&nbsp;classID)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Return the ObjectStreamClass for the given class ID. This may or may not
+ be the current class format, depending on whether the class has changed
+ since the class ID was generated.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>classID</CODE> - The class ID for which to return the class format.
+<DT><B>Returns:</B><DD>The class format for the given class ID, which may or may not
+ represent the current version of the class.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialBinding.html
new file mode 100644
index 000000000..ebbbca8ae
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialBinding.html
@@ -0,0 +1,384 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialBinding,SerialBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>SerialBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DL>
+
+<P>
+A concrete serial binding for keys or values. This binding stores objects
+ in serial data format. If this class is used "as is" the deserialized
+ objects are returned by the binding, and these objects must be serializable.
+
+ <p>The class may also be extended to override the <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(java.lang.Object)"><CODE>dataToObject(Object)</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object)"><CODE>objectToData(Object)</CODE></A> methods in order to
+ map between the deserialized objects and other objects. In that case the
+ objects returned by the binding do not have to be serializable. Note that
+ both methods must be overridden.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat)">SerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(java.lang.Object)">dataToObject</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Can be overridden to convert the deserialized data object to another
+ object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Can be overridden to convert the object to a deserialized data object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat)"><!-- --></A><H3>
+SerialBinding</H3>
+<PRE>
+public <B>SerialBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a serial binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(java.lang.Object)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Can be overridden to convert the deserialized data object to another
+ object. This method is called by <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><CODE>dataToObject(DataBuffer)</CODE></A>
+ after deserializing the data. The default implemention simply returns
+ the data parameter.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the deserialized data object (will always be
+ serializable).
+<DT><B>Returns:</B><DD>the resulting object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Can be overridden to convert the object to a deserialized data object.
+ This method is called by <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><CODE>objectToData(Object,DataBuffer)</CODE></A>
+ before serializing the object. The default implemention simply returns
+ the object parameter.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source object.
+<DT><B>Returns:</B><DD>the resulting deserialized object (must be serializable)..
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialFormat.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialFormat.html
new file mode 100644
index 000000000..c18816b7a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialFormat.html
@@ -0,0 +1,330 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialFormat,SerialFormat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialFormat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialFormat</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>SerialFormat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DL>
+
+<P>
+The format for serialized data. In addition to identifying a serial format
+ this class provides utility methods for use by bindings.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#SerialFormat(com.sleepycat.bdb.bind.serial.ClassCatalog, java.lang.Class)">SerialFormat</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial format.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to deserialize an object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#getBaseClass()">getBaseClass</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the base class for this format.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to serialize an object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialFormat(com.sleepycat.bdb.bind.serial.ClassCatalog, java.lang.Class)"><!-- --></A><H3>
+SerialFormat</H3>
+<PRE>
+public <B>SerialFormat</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass)</PRE>
+<DL>
+<DD>Creates a serial format.
+<P>
+<DT><B>Parameters:</B><DD><CODE>classCatalog</CODE> - is the catalog to hold shared class information and
+ for a database should be a <A HREF="../../../../../com/sleepycat/bdb/StoredClassCatalog.html"><CODE>StoredClassCatalog</CODE></A>.<DD><CODE>baseClass</CODE> - is the base class for serialized objects stored using
+ this format -- all objects using this format must be an instance of
+ this class.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getBaseClass()"><!-- --></A><H3>
+getBaseClass</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A> <B>getBaseClass</B>()</PRE>
+<DL>
+<DD>Returns the base class for this format.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the base class for this format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Utility method for use by bindings to deserialize an object. May only
+ be called for data that was serialized using <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><CODE>objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>,
+ since the fixed serialization header is assumed to not be included in
+ the input data. <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><CODE>SerialInput</CODE></A> is used to deserialize the object.
+ If a deserialized object is cached in the buffer's data formation
+ property, it is returned directly.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the input serialized data.
+<DT><B>Returns:</B><DD>the output deserialized object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public final void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Utility method for use by bindings to serialize an object. The fixed
+ serialization header is not included in the output data to save space,
+ and therefore to deserialize the data the complementary <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><CODE>dataToObject(com.sleepycat.bdb.bind.DataBuffer)</CODE></A> method must be used. <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> is used to
+ serialize the object. The deserialized object is cached in the buffer's
+ data formation property.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the input deserialized object.<DD><CODE>data</CODE> - is the output serialized data.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if the object is not an instance of the
+ base class for this format.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialInput.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialInput.html
new file mode 100644
index 000000000..a52d6f453
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialInput.html
@@ -0,0 +1,275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialInput,SerialInput class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.io.ObjectInputStream">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialInput</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">java.io.InputStream</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html">java.io.ObjectInputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialInput</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html">DataInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html">ObjectInput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>SerialInput</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html">ObjectInputStream</A></DL>
+
+<P>
+Used instead of an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><CODE>ObjectInputStream</CODE></A>, which it extends, to read an
+ object stream written by the <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> class. For reading
+ objects from a database normally <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><CODE>SerialFormat</CODE></A> or one of the serial
+ binding classes is used. <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><CODE>SerialInput</CODE></A> is used when an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><CODE>ObjectInputStream</CODE></A> is needed along with compact storage. A <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><CODE>ClassCatalog</CODE></A> must be supplied, however, to stored shared class
+ descriptions.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_java.io.ObjectStreamConstants"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Fields inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING">TC_STRING</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A>&nbsp;in,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial input stream.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.io.ObjectInputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html">ObjectInputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#available()">available</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#close()">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#defaultReadObject()">defaultReadObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read()">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#read(byte[], int, int)">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readBoolean()">readBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readByte()">readByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readChar()">readChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readDouble()">readDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFields()">readFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFloat()">readFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[])">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readFully(byte[], int, int)">readFully</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readInt()">readInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLine()">readLine</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readLong()">readLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readObject()">readObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readShort()">readShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnshared()">readUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedByte()">readUnsignedByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUnsignedShort()">readUnsignedShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#readUTF()">readUTF</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#registerValidation(java.io.ObjectInputValidation, int)">registerValidation</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html#skipBytes(int)">skipBytes</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#mark(int)">mark</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#markSupported()">markSupported</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#read(byte[])">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#reset()">reset</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#skip(long)">skip</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.ObjectInput"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html">ObjectInput</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html#read(byte[])">read</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html#skip(long)">skip</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialInput(java.io.InputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)"><!-- --></A><H3>
+SerialInput</H3>
+<PRE>
+public <B>SerialInput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A>&nbsp;in,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Creates a serial input stream.
+<P>
+<DT><B>Parameters:</B><DD><CODE>in</CODE> - is the input stream from which compact serialized objects will
+ be read.<DD><CODE>classCatalog</CODE> - is the catalog containing the class descriptions
+ for the serialized objects.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.io.ObjectInputStream">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialOutput.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialOutput.html
new file mode 100644
index 000000000..0bb2d5827
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialOutput.html
@@ -0,0 +1,301 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialOutput,SerialOutput class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialOutput</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">java.io.OutputStream</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html">java.io.ObjectOutputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialOutput</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html">DataOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html">ObjectOutput</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>SerialOutput</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html">ObjectOutputStream</A></DL>
+
+<P>
+Used instead of an ObjectOutputStream, which it extends, to write a compact
+ object stream. For writing objects to a database normally <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><CODE>SerialFormat</CODE></A> or one of the serial binding classes is used. <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> is used when an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html"><CODE>ObjectOutputStream</CODE></A> is needed along
+ with compact storage. A <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><CODE>ClassCatalog</CODE></A> must be supplied, however, to
+ stored shared class descriptions.
+
+ <p>The <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><CODE>ClassCatalog</CODE></A> is used to store class definitions rather than
+ embedding these into the stream. Instead, a class format identifier is
+ embedded into the stream. This identifier is then used by <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><CODE>SerialInput</CODE></A> to load the class format to deserialize the object.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_java.io.ObjectStreamConstants"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Fields inherited from interface java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#baseWireHandle">baseWireHandle</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_1">PROTOCOL_VERSION_1</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#PROTOCOL_VERSION_2">PROTOCOL_VERSION_2</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_BLOCK_DATA">SC_BLOCK_DATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_EXTERNALIZABLE">SC_EXTERNALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_SERIALIZABLE">SC_SERIALIZABLE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SC_WRITE_METHOD">SC_WRITE_METHOD</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_MAGIC">STREAM_MAGIC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#STREAM_VERSION">STREAM_VERSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBCLASS_IMPLEMENTATION_PERMISSION">SUBCLASS_IMPLEMENTATION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#SUBSTITUTION_PERMISSION">SUBSTITUTION_PERMISSION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ARRAY">TC_ARRAY</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BASE">TC_BASE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATA">TC_BLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_BLOCKDATALONG">TC_BLOCKDATALONG</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASS">TC_CLASS</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_CLASSDESC">TC_CLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_ENDBLOCKDATA">TC_ENDBLOCKDATA</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_EXCEPTION">TC_EXCEPTION</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_LONGSTRING">TC_LONGSTRING</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_MAX">TC_MAX</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_NULL">TC_NULL</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_OBJECT">TC_OBJECT</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_PROXYCLASSDESC">TC_PROXYCLASSDESC</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_REFERENCE">TC_REFERENCE</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_RESET">TC_RESET</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html#TC_STRING">TC_STRING</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)">SerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;out,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial output stream.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html#getStreamHeader()">getStreamHeader</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the fixed stream header used for all serialized streams in
+ PROTOCOL_VERSION_2 format.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.ObjectOutputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html">ObjectOutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#close()">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#defaultWriteObject()">defaultWriteObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#flush()">flush</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#putFields()">putFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#reset()">reset</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#useProtocolVersion(int)">useProtocolVersion</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[])">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(byte[], int, int)">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#write(int)">write</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBoolean(boolean)">writeBoolean</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeByte(int)">writeByte</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeBytes(java.lang.String)">writeBytes</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChar(int)">writeChar</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeChars(java.lang.String)">writeChars</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeDouble(double)">writeDouble</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFields()">writeFields</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeFloat(float)">writeFloat</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeInt(int)">writeInt</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeLong(long)">writeLong</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeObject(java.lang.Object)">writeObject</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeShort(int)">writeShort</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUnshared(java.lang.Object)">writeUnshared</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html#writeUTF(java.lang.String)">writeUTF</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialOutput(java.io.OutputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)"><!-- --></A><H3>
+SerialOutput</H3>
+<PRE>
+public <B>SerialOutput</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;out,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Creates a serial output stream.
+<P>
+<DT><B>Parameters:</B><DD><CODE>out</CODE> - is the output stream to which the compact serialized objects
+ will be written.<DD><CODE>classCatalog</CODE> - is the catalog to which the class descriptions for
+ the serialized objects will be written.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getStreamHeader()"><!-- --></A><H3>
+getStreamHeader</H3>
+<PRE>
+public static byte[] <B>getStreamHeader</B>()</PRE>
+<DL>
+<DD>Returns the fixed stream header used for all serialized streams in
+ PROTOCOL_VERSION_2 format. To save space this header can be removed and
+ serialized streams before storage and inserted before deserializing.
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> always uses PROTOCOL_VERSION_2 serialization format
+ to guarantee that this header is fixed. <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><CODE>SerialFormat</CODE></A> removes
+ this header from serialized streams automatically.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the fixed stream header.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html
new file mode 100644
index 000000000..d3bf18cac
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html
@@ -0,0 +1,467 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialSerialBinding,SerialSerialBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialSerialBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialSerialBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>SerialSerialBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DL>
+
+<P>
+An abstract entity binding that uses a serial key and a serial value. This
+ class takes care of serializing and deserializing the key and value data
+ automatically. Its three abstract methods must be implemented by a concrete
+ subclass to convert the deserialized objects to/from an entity object.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(java.lang.Object, java.lang.Object)"><CODE>dataToObject(Object,Object)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object)"><CODE>objectToKey(Object)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object)"><CODE>objectToValue(Object)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(java.lang.Object, java.lang.Object)">dataToObject</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;keyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from deserialized key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the key data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the value data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key object from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a value object from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the value data from an entity Object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialSerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><!-- --></A><H3>
+SerialSerialBinding</H3>
+<PRE>
+public <B>SerialSerialBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</PRE>
+<DL>
+<DD>Creates a serial-serial entity binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>keyFormat</CODE> - is the key format.<DD><CODE>valueFormat</CODE> - is the value format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Converts key and value data buffers into an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the source key data.<DD><CODE>value</CODE> - is the source value data.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the key data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>key</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the value data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>value</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the key data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()">getKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the value data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;keyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Constructs an entity object from deserialized key and value data
+ objects.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyInput</CODE> - is the deserialized key data object.<DD><CODE>valueInput</CODE> - is the deserialized value data object.
+<DT><B>Returns:</B><DD>the entity object constructed from the key and value.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a key object from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.
+<DT><B>Returns:</B><DD>the deserialized key data object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a value object from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.
+<DT><B>Returns:</B><DD>the deserialized value data object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html
new file mode 100644
index 000000000..18cbf5202
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+SerialSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor,SerialSerialKeyExtractor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="SerialSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class SerialSerialKeyExtractor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>SerialSerialKeyExtractor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DL>
+
+<P>
+A abstract key extractor that uses a serial key and a serial value. This
+ class takes care of serializing and deserializing the key and value data
+ automatically. Its two abstract methods must be implemented by a concrete
+ subclass to extract/clear the index key from the deserialized data objects.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(java.lang.Object, java.lang.Object)"><CODE>extractIndexKey(Object,Object)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(java.lang.Object)"><CODE>clearIndexKey(Object)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialKeyExtractor</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(java.lang.Object)">clearIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value data object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(java.lang.Object, java.lang.Object)">extractIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;primaryKeyData,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data object from primary key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the index key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the value data or null if the index key data is
+ not derived from the value data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><!-- --></A><H3>
+SerialSerialKeyExtractor</H3>
+<PRE>
+public <B>SerialSerialKeyExtractor</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;indexKeyFormat)</PRE>
+<DL>
+<DD>Creates a serial-serial entity binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyFormat</CODE> - is the primary key format, or null if no
+ primary key data is used to construct the index key.<DD><CODE>valueFormat</CODE> - is the value format, or null if no value data is
+ used to construct the index key.<DD><CODE>indexKeyFormat</CODE> - is the index key format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getPrimaryKeyFormat()"><!-- --></A><H3>
+getPrimaryKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getPrimaryKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data. If this method returns null,
+ then null will be passed for the <code>primaryKeyData</code> parameter
+ of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the primary key data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the value data or null if the index key data is
+ not derived from the value data. If this method returns null, then null
+ will be passed for the <code>valueData</code> parameter of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the value data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndexKeyFormat()"><!-- --></A><H3>
+getIndexKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getIndexKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the index key data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the index key data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Extracts the index key data from primary key and value buffers.
+ The index key is extracted when saving the data record identified by the
+ primary key and value buffers, in order to add or remove an index
+ entry in the database for that data record.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyData</CODE> - is the source primary key data, or null if no
+ primary key data is used to construct the index key, in which case
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()"><CODE>KeyExtractor.getPrimaryKeyFormat()</CODE></A> should also return null.<DD><CODE>valueData</CODE> - is the source value data, or null if no value data is
+ used to construct the index key, in which case <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()"><CODE>KeyExtractor.getValueFormat()</CODE></A>
+ should also return null.<DD><CODE>indexKeyData</CODE> - is the destination index key buffer. For index keys
+ which are optionally present, the buffer's length should be set to zero
+ to indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Clears the index key in a value buffer. The index key is cleared when
+ the index is for a foreign key identifying a record that has been
+ deleted. This method is called only if the <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A> is configured with <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A>. It is never called
+ for index keys that are derived from primary key data, since in this
+ case <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A> is not
+ allowed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueData</CODE> - is the source and destination value data. On entry
+ this contains the index key to be cleared. It should be changed by this
+ method such that <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a null key (set
+ the buffer length to zero). Other data in the buffer should remain
+ unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>extractIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;primaryKeyData,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the index key data object from primary key and value data
+ objects.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyData</CODE> - is the deserialized source primary key data, or
+ null if no primary key data is used to construct the index key.<DD><CODE>valueData</CODE> - is the deserialized source value data, or null if no
+ value data is used to construct the index key.
+<DT><B>Returns:</B><DD>the destination index key data object, or null to indicate that
+ the key is not present.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(java.lang.Object)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>clearIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clears the index key in a value data object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueData</CODE> - is the source and destination value data object.
+<DT><B>Returns:</B><DD>the destination value data object, or null to indicate that the
+ key is not present and no change is necessary. The value returned may
+ be the same object passed as the valueData parameter or a newly created
+ object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/SerialSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html
new file mode 100644
index 000000000..5980e5306
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html
@@ -0,0 +1,475 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.TupleSerialBinding,TupleSerialBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class TupleSerialBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.TupleSerialBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>TupleSerialBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DL>
+
+<P>
+A abstract entity binding that uses a tuple key and a serial value. This
+ class takes care of serializing and deserializing the value data,
+ and converting the key data to/from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> objects. Its three abstract methods must be implemented by a
+ concrete subclass to convert these objects to/from an entity object.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)"><CODE>dataToObject(TupleInput,Object)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>objectToKey(Object,TupleOutput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object)"><CODE>objectToValue(Object)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial entity binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the key data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the value data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a value object from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the value data from an entity Object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleSerialBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><!-- --></A><H3>
+TupleSerialBinding</H3>
+<PRE>
+public <B>TupleSerialBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</PRE>
+<DL>
+<DD>Creates a tuple-serial entity binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>keyFormat</CODE> - is the key format.<DD><CODE>valueFormat</CODE> - is the value format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Converts key and value data buffers into an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the source key data.<DD><CODE>value</CODE> - is the source value data.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the key data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>key</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the value data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>value</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the key data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()">getKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the value data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data object.<DD><CODE>valueInput</CODE> - is the deserialized value data object.
+<DT><B>Returns:</B><DD>the entity object constructed from the key and value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public abstract void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the key should be
+ written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a value object from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.
+<DT><B>Returns:</B><DD>the deserialized value data object.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html
new file mode 100644
index 000000000..4d62c5d0e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html
@@ -0,0 +1,476 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor,TupleSerialKeyExtractor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class TupleSerialKeyExtractor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>TupleSerialKeyExtractor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DL>
+
+<P>
+A abstract key extractor that uses a tuple key and a serial value. This
+ class takes care of serializing and deserializing the value data, and
+ converting the key data to/from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A>
+ objects. Its two abstract methods must be implemented by a concrete
+ subclass to extract and clear the index key using these objects.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>extractIndexKey(TupleInput,Object,TupleOutput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(java.lang.Object)"><CODE>clearIndexKey(Object)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleSerialKeyExtractor</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(java.lang.Object)">clearIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInputOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the deserialized value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key tuple data and deserialized
+ value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the index key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the value data or null if the index key data is
+ not derived from the value data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+TupleSerialKeyExtractor</H3>
+<PRE>
+public <B>TupleSerialKeyExtractor</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</PRE>
+<DL>
+<DD>Creates a tuple-serial key extractor.
+<P>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyFormat</CODE> - is the primary key format, or null if no
+ primary key data is used to construct the index key.<DD><CODE>valueFormat</CODE> - is the value format, or null if no value data is
+ used to construct the index key.<DD><CODE>indexKeyFormat</CODE> - is the index key format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getPrimaryKeyFormat()"><!-- --></A><H3>
+getPrimaryKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getPrimaryKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data. If this method returns null,
+ then null will be passed for the <code>primaryKeyData</code> parameter
+ of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the primary key data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the value data or null if the index key data is
+ not derived from the value data. If this method returns null, then null
+ will be passed for the <code>valueData</code> parameter of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the value data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndexKeyFormat()"><!-- --></A><H3>
+getIndexKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getIndexKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the index key data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the index key data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Extracts the index key data from primary key and value buffers.
+ The index key is extracted when saving the data record identified by the
+ primary key and value buffers, in order to add or remove an index
+ entry in the database for that data record.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyData</CODE> - is the source primary key data, or null if no
+ primary key data is used to construct the index key, in which case
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()"><CODE>KeyExtractor.getPrimaryKeyFormat()</CODE></A> should also return null.<DD><CODE>valueData</CODE> - is the source value data, or null if no value data is
+ used to construct the index key, in which case <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()"><CODE>KeyExtractor.getValueFormat()</CODE></A>
+ should also return null.<DD><CODE>indexKeyData</CODE> - is the destination index key buffer. For index keys
+ which are optionally present, the buffer's length should be set to zero
+ to indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Clears the index key in a value buffer. The index key is cleared when
+ the index is for a foreign key identifying a record that has been
+ deleted. This method is called only if the <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A> is configured with <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A>. It is never called
+ for index keys that are derived from primary key data, since in this
+ case <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A> is not
+ allowed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueData</CODE> - is the source and destination value data. On entry
+ this contains the index key to be cleared. It should be changed by this
+ method such that <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a null key (set
+ the buffer length to zero). Other data in the buffer should remain
+ unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public abstract void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the index key data from primary key tuple data and deserialized
+ value data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the primary key
+ data, or null if no primary key data is used to construct the index key.<DD><CODE>valueInput</CODE> - is the deserialized value data, or null if no value
+ data is used to construct the index key.<DD><CODE>indexKeyOutput</CODE> - is the destination index key tuple. For index
+ keys which are optionally present, no tuple data should be output to
+ indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(java.lang.Object)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public abstract void <B>clearIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInputOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clears the index key in the deserialized value data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueInputOutput</CODE> - is the source and destination deserialized value
+ data. On entry this contains the index key to be cleared. It should be
+ changed by this method such that <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a
+ null key (not output any tuple data). Other data in the value object
+ should remain unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html
new file mode 100644
index 000000000..7e48f3619
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding,TupleSerialMarshalledBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class TupleSerialMarshalledBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">com.sleepycat.bdb.bind.serial.TupleSerialBinding</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleSerialMarshalledBinding</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></DL>
+
+<P>
+A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface. It works by calling the methods of the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interface, which must be implemented by the entity
+ class, to convert between the key/value data and entity object.
+
+ <p> The binding is "tricky" in that it uses the entity class for both the
+ stored data value and the combined entity object. To do this, the entity's
+ key field(s) are transient and are set by the binding after the data object
+ has been deserialized. This avoids the use of a "value" class completely.
+ </p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;tupleInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;javaInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#objectToValue(java.lang.Object)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a value object from an entity object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.bind.serial.TupleSerialBinding"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getKeyFormat()">getKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getValueFormat()">getValueFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleSerialMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><!-- --></A><H3>
+TupleSerialMarshalledBinding</H3>
+<PRE>
+public <B>TupleSerialMarshalledBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</PRE>
+<DL>
+<DD>Creates a tuple-serial marshalled binding object.
+<P>
+<DT><B>Parameters:</B><DD><CODE>keyFormat</CODE> - is the key data format.<DD><CODE>valueFormat</CODE> - is the value data format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;tupleInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;javaInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></B></DD>
+<DD>Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)">dataToObject</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>tupleInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data object.<DD><CODE>javaInput</CODE> - is the deserialized value data object.
+<DT><B>Returns:</B><DD>the entity object constructed from the key and value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></B></DD>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the key should be
+ written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></B></DD>
+<DD>Extracts a value object from an entity object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object)">objectToValue</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.
+<DT><B>Returns:</B><DD>the deserialized value data object.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if data cannot be read or written.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html
new file mode 100644
index 000000000..946840ff9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html
@@ -0,0 +1,324 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleSerialMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor,TupleSerialMarshalledKeyExtractor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleSerialMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.serial</FONT>
+<BR>
+Class TupleSerialMarshalledKeyExtractor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleSerialMarshalledKeyExtractor</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></DL>
+
+<P>
+A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>. This key extractor works by calling the
+ methods of the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interface to extract and
+ clear the index key data.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#TupleSerialMarshalledKeyExtractor(com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleSerialMarshalledKeyExtractor</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#clearIndexKey(java.lang.Object)">clearIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the deserialized value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key tuple data and deserialized
+ value data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getValueFormat()">getValueFormat</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleSerialMarshalledKeyExtractor(com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)"><!-- --></A><H3>
+TupleSerialMarshalledKeyExtractor</H3>
+<PRE>
+public <B>TupleSerialMarshalledKeyExtractor</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</PRE>
+<DL>
+<DD>Creates a tuple-serial marshalled key extractor.
+<P>
+<DT><B>Parameters:</B><DD><CODE>binding</CODE> - is the binding used for the tuple-serial entity.<DD><CODE>indexKeyFormat</CODE> - is the index key format.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)</CODE></A> method to identify the index
+ key.<DD><CODE>usePrimaryKey</CODE> - is true if the primary key data is used to
+ construct the index key.<DD><CODE>useValue</CODE> - is true if the value data is used to construct the index
+ key.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></CODE></B></DD>
+<DD>Extracts the index key data from primary key tuple data and deserialized
+ value data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the primary key
+ data, or null if no primary key data is used to construct the index key.<DD><CODE>valueInput</CODE> - is the deserialized value data, or null if no value
+ data is used to construct the index key.<DD><CODE>indexKeyOutput</CODE> - is the destination index key tuple. For index
+ keys which are optionally present, no tuple data should be output to
+ indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(java.lang.Object)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></CODE></B></DD>
+<DD>Clears the index key in the deserialized value data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(java.lang.Object)">clearIndexKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueInput</CODE> - is the source and destination deserialized value
+ data. On entry this contains the index key to be cleared. It should be
+ changed by this method such that <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>TupleSerialKeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a
+ null key (not output any tuple data). Other data in the value object
+ should remain unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html
new file mode 100644
index 000000000..1af152d37
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.serial.ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.serial.ClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.serial.ClassCatalog</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A> in <A HREF="../../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that implement <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java serialization catalog used for compact storage of database objects.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)">SerialOutput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;out,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial output stream.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)">SerialInput</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A>&nbsp;in,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial input stream.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html#SerialFormat(com.sleepycat.bdb.bind.serial.ClassCatalog, java.lang.Class)">SerialFormat</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;classCatalog,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial format.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A> in <A HREF="../../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#getCatalog()">getCatalog</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the class catalog associated with this factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#TupleSerialDbFactory(com.sleepycat.bdb.bind.serial.ClassCatalog)">TupleSerialDbFactory</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;catalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial factory for given environment and class catalog.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialBinding.html
new file mode 100644
index 000000000..8e10791fe
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.SerialBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialFormat.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialFormat.html
new file mode 100644
index 000000000..dafad0789
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialFormat.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialFormat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">SerialSerialBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial-serial entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat)">SerialBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a serial binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialInput.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialInput.html
new file mode 100644
index 000000000..4f71da53c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialInput.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialInput</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.SerialInput
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialOutput.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialOutput.html
new file mode 100644
index 000000000..3f727f9d3
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialOutput.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialOutput</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.SerialOutput
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialBinding.html
new file mode 100644
index 000000000..bdbef4339
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialSerialBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.SerialSerialBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialKeyExtractor.html
new file mode 100644
index 000000000..3c9b2866c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/SerialSerialKeyExtractor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="SerialSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialBinding.html
new file mode 100644
index 000000000..0ad7f2acc
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialBinding.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.TupleSerialBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialKeyExtractor.html
new file mode 100644
index 000000000..6be485cae
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialKeyExtractor.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key extractor that works in conjunction with a <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledBinding.html
new file mode 100644
index 000000000..ac06837f1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledBinding.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#TupleSerialMarshalledKeyExtractor(com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleSerialMarshalledKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledKeyExtractor.html
new file mode 100644
index 000000000..466b91f1b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledKeyExtractor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/package-frame.html b/db/docs/java/com/sleepycat/bdb/bind/serial/package-frame.html
new file mode 100644
index 000000000..4d86020ec
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/package-frame.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.bind.serial</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ClassCatalog.html" TARGET="classFrame"><I>ClassCatalog</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="SerialBinding.html" TARGET="classFrame">SerialBinding</A>
+<BR>
+<A HREF="SerialFormat.html" TARGET="classFrame">SerialFormat</A>
+<BR>
+<A HREF="SerialInput.html" TARGET="classFrame">SerialInput</A>
+<BR>
+<A HREF="SerialOutput.html" TARGET="classFrame">SerialOutput</A>
+<BR>
+<A HREF="SerialSerialBinding.html" TARGET="classFrame">SerialSerialBinding</A>
+<BR>
+<A HREF="SerialSerialKeyExtractor.html" TARGET="classFrame">SerialSerialKeyExtractor</A>
+<BR>
+<A HREF="TupleSerialBinding.html" TARGET="classFrame">TupleSerialBinding</A>
+<BR>
+<A HREF="TupleSerialKeyExtractor.html" TARGET="classFrame">TupleSerialKeyExtractor</A>
+<BR>
+<A HREF="TupleSerialMarshalledBinding.html" TARGET="classFrame">TupleSerialMarshalledBinding</A>
+<BR>
+<A HREF="TupleSerialMarshalledKeyExtractor.html" TARGET="classFrame">TupleSerialMarshalledKeyExtractor</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/package-summary.html b/db/docs/java/com/sleepycat/bdb/bind/serial/package-summary.html
new file mode 100644
index 000000000..ca6387131
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/package-summary.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.serial package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.bind.serial
+</H2>
+Formats and bindings that use Java serialization
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ClassCatalog.html"><I>ClassCatalog</I></A></B></TD>
+<TD>Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialBinding.html">SerialBinding</A></B></TD>
+<TD>A concrete serial binding for keys or values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialFormat.html">SerialFormat</A></B></TD>
+<TD>The format for serialized data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialInput.html">SerialInput</A></B></TD>
+<TD>Used instead of an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><CODE>ObjectInputStream</CODE></A>, which it extends, to read an
+ object stream written by the <A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialOutput.html">SerialOutput</A></B></TD>
+<TD>Used instead of an ObjectOutputStream, which it extends, to write a compact
+ object stream.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialSerialBinding.html">SerialSerialBinding</A></B></TD>
+<TD>An abstract entity binding that uses a serial key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A></B></TD>
+<TD>A abstract key extractor that uses a serial key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleSerialBinding.html">TupleSerialBinding</A></B></TD>
+<TD>A abstract entity binding that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A></B></TD>
+<TD>A abstract key extractor that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A></B></TD>
+<TD>A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A></B></TD>
+<TD>A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.bind.serial Description
+</H2>
+
+<P>
+<p>Formats and bindings that use Java serialization
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/package-tree.html b/db/docs/java/com/sleepycat/bdb/bind/serial/package-tree.html
new file mode 100644
index 000000000..2062e5892
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/package-tree.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.serial Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.serial Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.bind.serial
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html"><B>InputStream</B></A><UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialInput.html"><B>SerialInput</B></A></UL>
+</UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html"><B>OutputStream</B></A><UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>SerialOutput</B></A></UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialBinding.html"><B>SerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>SerialFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>SerialSerialKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>TupleSerialMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>TupleSerialKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><B>TupleSerialMarshalledKeyExtractor</B></A></UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.bind.serial.<A HREF="../../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html"><B>ClassCatalog</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/serial/package-use.html b/db/docs/java/com/sleepycat/bdb/bind/serial/package-use.html
new file mode 100644
index 000000000..6185e90c8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/serial/package-use.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.bind.serial (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.bind.serial</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> used by <A HREF="../../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html#com.sleepycat.bdb"><B>ClassCatalog</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> used by <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html#com.sleepycat.bdb.bind.serial"><B>ClassCatalog</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/SerialFormat.html#com.sleepycat.bdb.bind.serial"><B>SerialFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for serialized data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/TupleSerialBinding.html#com.sleepycat.bdb.bind.serial"><B>TupleSerialBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract entity binding that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/TupleSerialKeyExtractor.html#com.sleepycat.bdb.bind.serial"><B>TupleSerialKeyExtractor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract key extractor that uses a tuple key and a serial value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/TupleSerialMarshalledBinding.html#com.sleepycat.bdb.bind.serial"><B>TupleSerialMarshalledBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> used by <A HREF="../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/serial/class-use/ClassCatalog.html#com.sleepycat.bdb.factory"><B>ClassCatalog</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html
new file mode 100644
index 000000000..37412c602
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html
@@ -0,0 +1,244 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+MarshalledTupleData (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.MarshalledTupleData,MarshalledTupleData interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="MarshalledTupleData (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MarshalledTupleData.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleData.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Interface MarshalledTupleData</H2>
+<HR>
+<DL>
+<DT>public interface <B>MarshalledTupleData</B></DL>
+
+<P>
+A marshalling interface implemented by key, value or entity classes that
+ have tuple data. Key classes implement this interface to marshal their key
+ data. Value or entity classes implement this interface to marshal their
+ value data. Implementations of this interface must have a public no
+ arguments contructor so that they can be instantiated by a binding,
+ prior to calling the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)"><CODE>unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)</CODE></A> method.
+
+ <p>Note that implementing this interface is not necessary when the data is a
+ Java simple type, for example: String, Integer, etc. These types can be
+ used with built-in bindings returned by <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)"><CODE>TupleBinding.getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)</CODE></A>.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>,
+<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><CODE>TupleTupleMarshalledKeyExtractor</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#marshalData(com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;dataOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or value tuple data from the key or value object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)">unmarshalData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;dataInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or value object from the key or value tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="marshalData(com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+marshalData</H3>
+<PRE>
+public void <B>marshalData</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;dataOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Construct the key or value tuple data from the key or value object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dataOutput</CODE> - is the output tuple.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+unmarshalData</H3>
+<PRE>
+public void <B>unmarshalData</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;dataInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Construct the key or value object from the key or value tuple data.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dataInput</CODE> - is the input tuple.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MarshalledTupleData.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleData.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html
new file mode 100644
index 000000000..8a9f46aab
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity,MarshalledTupleKeyEntity interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MarshalledTupleKeyEntity.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleKeyEntity.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Interface MarshalledTupleKeyEntity</H2>
+<HR>
+<DL>
+<DT>public interface <B>MarshalledTupleKeyEntity</B></DL>
+
+<P>
+A marshalling interface implemented by entity classes that have tuple data
+ keys. Since MarshalledTupleKeyEntity objects are instantiated by Java
+ serialization, no particular contructor is required.
+
+ <p>Note that a marshalled tuple key extractor is somewhat less efficient
+ than a non-marshalled key tuple extractor because more conversions are
+ needed. A marshalled key extractor must convert the data to an object in
+ order to extract the key data, while an unmarshalled key extractor does
+ not.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>,
+<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><CODE>TupleTupleMarshalledKeyExtractor</CODE></A>,
+<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>,
+<A HREF="../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><CODE>TupleSerialMarshalledKeyExtractor</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#clearIndexKey(java.lang.String)">clearIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the entity's index key value for the given key name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's index key and writes it to the key output.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's primary key and writes it to the key output.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleInput)">unmarshalPrimaryKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Completes construction of the entity by setting its primary key from the
+ stored primary key.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="marshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+marshalPrimaryKey</H3>
+<PRE>
+public void <B>marshalPrimaryKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the entity's primary key and writes it to the key output.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyOutput</CODE> - is the output tuple.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unmarshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+unmarshalPrimaryKey</H3>
+<PRE>
+public void <B>unmarshalPrimaryKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Completes construction of the entity by setting its primary key from the
+ stored primary key.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyInput</CODE> - is the input tuple.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+marshalIndexKey</H3>
+<PRE>
+public void <B>marshalIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the entity's index key and writes it to the key output.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyName</CODE> - identifies the index key.<DD><CODE>keyOutput</CODE> - is the output tuple.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(java.lang.String)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clears the entity's index key value for the given key name.
+ This method is called when the entity for this foreign key is
+ deleted, if ON_DELETE_CLEAR was specified when creating the index.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyName</CODE> - identifies the index key.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MarshalledTupleKeyEntity.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleKeyEntity.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleBinding.html
new file mode 100644
index 000000000..1e039a934
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleBinding.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleBinding,TupleBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>TupleBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DL>
+
+<P>
+An abstract tuple binding for tuple keys or values. This class takes care of
+ converting the data to/from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A>
+ objects. Its two abstract methods must be implemented by a concrete
+ subclass to convert between tuples and key or value objects.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)"><CODE>dataToObject(TupleInput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>objectToData(Object,TupleOutput)</CODE></A> </li>
+ </ul>
+
+ <p>For keys or values which are Java primitive classes (String, Integer,
+ etc) <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)"><CODE>getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)</CODE></A> may be used to return a builtin tuple
+ binding. A custom tuple binding for these types is not needed.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#TupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or value object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)">getPrimitiveBinding</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple binding for a primitive Java class.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or value object to a tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+TupleBinding</H3>
+<PRE>
+public <B>TupleBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a tuple binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Constructs a key or value object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the tuple key or value data.
+<DT><B>Returns:</B><DD>the key or value object constructed from the data.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public abstract void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Converts a key or value object to a tuple data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the key or value object.<DD><CODE>output</CODE> - is the tuple data to which the key or value should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+getPrimitiveBinding</H3>
+<PRE>
+public static <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A> <B>getPrimitiveBinding</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a tuple binding for a primitive Java class. The following
+ Java classes are supported.
+ <ul>
+ <li><code>String</code></li>
+ <li><code>Integer</code></li>
+ </ul>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cls</CODE> - is the primitive Java class.<DD><CODE>format</CODE> - is the tuple format for the new binding.
+<DT><B>Returns:</B><DD>a new building for the primitive class or null if the cls
+ parameter is not one of the supported classes.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleFormat.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleFormat.html
new file mode 100644
index 000000000..285f903f5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleFormat.html
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleFormat,TupleFormat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleFormat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleFormat</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleFormat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></DL>
+
+<P>
+The format for tuple data. In addition to identifying a tuple format
+ this class provides utility methods for use by bindings.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#TupleFormat()">TupleFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple format.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#dataToInput(com.sleepycat.bdb.bind.DataBuffer)">dataToInput</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to create a new tuple input object for reading the data
+ from a given buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#inputToData(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.DataBuffer)">inputToData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ input object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#newOutput()">newOutput</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to create a tuple output object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#outputToData(com.sleepycat.bdb.bind.tuple.TupleOutput, com.sleepycat.bdb.bind.DataBuffer)">outputToData</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ output object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleFormat()"><!-- --></A><H3>
+TupleFormat</H3>
+<PRE>
+public <B>TupleFormat</B>()</PRE>
+<DL>
+<DD>Creates a tuple format.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="newOutput()"><!-- --></A><H3>
+newOutput</H3>
+<PRE>
+public final <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A> <B>newOutput</B>()</PRE>
+<DL>
+<DD>Utility method for use by bindings to create a tuple output object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a new tuple output object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="outputToData(com.sleepycat.bdb.bind.tuple.TupleOutput, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+outputToData</H3>
+<PRE>
+public final void <B>outputToData</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</PRE>
+<DL>
+<DD>Utility method to set the data in a data buffer to the data in a tuple
+ output object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>output</CODE> - is the source tuple output object.<DD><CODE>data</CODE> - is the destination data buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="inputToData(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+inputToData</H3>
+<PRE>
+public final void <B>inputToData</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</PRE>
+<DL>
+<DD>Utility method to set the data in a data buffer to the data in a tuple
+ input object. The tuple input for a buffer is cached in the buffer's
+ data formation property.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the source tuple input object.<DD><CODE>data</CODE> - is the destination data buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToInput(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToInput</H3>
+<PRE>
+public final <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A> <B>dataToInput</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</PRE>
+<DL>
+<DD>Utility method to create a new tuple input object for reading the data
+ from a given buffer. The tuple input for a buffer is cached in the
+ buffer's data formation property. If an existing input is reused, it
+ is reset before returning it.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the new tuple input object.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleFormat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInput.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInput.html
new file mode 100644
index 000000000..08d4e1aa7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInput.html
@@ -0,0 +1,814 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleInput,TupleInput class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleInput</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">java.io.InputStream</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">com.sleepycat.bdb.util.FastInputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleInput</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>TupleInput</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A></DL>
+
+<P>
+Used by tuple bindings to read tuple data.
+
+ <p>This class has many methods that have the same signatures as methods in
+ the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html"><CODE>DataInput</CODE></A> interface. The reason this class does not
+ implement <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html"><CODE>DataInput</CODE></A> is because it would break the interface
+ contract for those methods because of data format differences.</p>
+
+ <p>Signed numbers are stored in the buffer in MSB (most significant byte
+ first) order with their sign bit (high-order bit) inverted to cause negative
+ numbers to be sorted first when comparing values as unsigned byte arrays,
+ as done in a database. Unsigned numbers, including characters, are stored
+ in MSB order with no change to their sign bit.</p>
+
+ <p>Strings and character arrays are stored either as a fixed length array of
+ unicode characters, where the length must be known by the application, or as
+ a null-terminated UTF byte array.</p>
+
+ <p>Floats and doubles are stored in standard integer-bit representation and
+ are therefore not ordered by numeric value.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(byte[])">TupleInput</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input object for reading a byte array of tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(byte[], int, int)">TupleInput</A></B>(byte[]&nbsp;buffer,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input object for reading a byte array of tuple data at
+ a given offset for a given length.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)">TupleInput</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input object from the data contained in a tuple output
+ object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBoolean()">readBoolean</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a boolean (one byte) unsigned value from the buffer and returns
+ true if it is non-zero and false if it is zero.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readByte()">readByte</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed byte (one byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(char[])">readBytes</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(int)">readBytes</A></B>(int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;char</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChar()">readChar</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a char (two byte) unsigned value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(char[])">readChars</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(int)">readChars</A></B>(int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readDouble()">readDouble</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed double (eight byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;float</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readFloat()">readFloat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed float (four byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readInt()">readInt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed int (four byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readLong()">readLong</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed long (eight byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;short</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readShort()">readShort</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a signed short (two byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString()">readString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads a null-terminated UTF string from the data buffer and converts
+ the data from UTF to Unicode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(char[])">readString</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(int)">readString</A></B>(int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedByte()">readUnsignedByte</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads an unsigned byte (one byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedInt()">readUnsignedInt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads an unsigned int (four byte) value from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedShort()">readUnsignedShort</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reads an unsigned short (two byte) value from the buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.util.FastInputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.util.<A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#available()">available</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#mark(int)">mark</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#markSupported()">markSupported</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#read()">read</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#read(byte[])">read</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#read(byte[], int, int)">read</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#reset()">reset</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html#skip(long)">skip</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#close()">close</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleInput(byte[])"><!-- --></A><H3>
+TupleInput</H3>
+<PRE>
+public <B>TupleInput</B>(byte[]&nbsp;buffer)</PRE>
+<DL>
+<DD>Creates a tuple input object for reading a byte array of tuple data. A
+ reference to the byte array will be kept by this object (it will not be
+ copied) and therefore the byte array should not be modified while this
+ object is in use.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - is the byte array to be read and should contain data in
+ tuple format.</DL>
+<HR>
+
+<A NAME="TupleInput(byte[], int, int)"><!-- --></A><H3>
+TupleInput</H3>
+<PRE>
+public <B>TupleInput</B>(byte[]&nbsp;buffer,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Creates a tuple input object for reading a byte array of tuple data at
+ a given offset for a given length. A reference to the byte array will
+ be kept by this object (it will not be copied) and therefore the byte
+ array should not be modified while this object is in use.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - is the byte array to be read and should contain data in
+ tuple format.<DD><CODE>offset</CODE> - is the byte offset at which to begin reading.<DD><CODE>length</CODE> - is the number of bytes to be read.</DL>
+<HR>
+
+<A NAME="TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+TupleInput</H3>
+<PRE>
+public <B>TupleInput</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</PRE>
+<DL>
+<DD>Creates a tuple input object from the data contained in a tuple output
+ object. A reference to the tuple output's byte array will be kept by
+ this object (it will not be copied) and therefore the tuple output
+ object should not be modified while this object is in use.
+<P>
+<DT><B>Parameters:</B><DD><CODE>output</CODE> - is the tuple output object containing the data to be read.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="readString()"><!-- --></A><H3>
+readString</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>readString</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a null-terminated UTF string from the data buffer and converts
+ the data from UTF to Unicode.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(java.lang.String)"><CODE>TupleOutput.writeString(String)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the converted string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if no null terminating byte is found in the buffer
+ or malformed UTF data is encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readChar()"><!-- --></A><H3>
+readChar</H3>
+<PRE>
+public final char <B>readChar</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a char (two byte) unsigned value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChar(int)"><CODE>TupleOutput.writeChar(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readBoolean()"><!-- --></A><H3>
+readBoolean</H3>
+<PRE>
+public final boolean <B>readBoolean</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a boolean (one byte) unsigned value from the buffer and returns
+ true if it is non-zero and false if it is zero.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBoolean(boolean)"><CODE>TupleOutput.writeBoolean(boolean)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readByte()"><!-- --></A><H3>
+readByte</H3>
+<PRE>
+public final byte <B>readByte</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed byte (one byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeByte(int)"><CODE>TupleOutput.writeByte(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readShort()"><!-- --></A><H3>
+readShort</H3>
+<PRE>
+public final short <B>readShort</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed short (two byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeShort(int)"><CODE>TupleOutput.writeShort(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readInt()"><!-- --></A><H3>
+readInt</H3>
+<PRE>
+public final int <B>readInt</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed int (four byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeInt(int)"><CODE>TupleOutput.writeInt(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readLong()"><!-- --></A><H3>
+readLong</H3>
+<PRE>
+public final long <B>readLong</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed long (eight byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeLong(long)"><CODE>TupleOutput.writeLong(long)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readFloat()"><!-- --></A><H3>
+readFloat</H3>
+<PRE>
+public final float <B>readFloat</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed float (four byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeFloat(float)"><CODE>TupleOutput.writeFloat(float)</CODE></A>.
+ <code>Float.intBitsToFloat</code> is used to convert the signed int
+ value.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readDouble()"><!-- --></A><H3>
+readDouble</H3>
+<PRE>
+public final double <B>readDouble</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads a signed double (eight byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeDouble(double)"><CODE>TupleOutput.writeDouble(double)</CODE></A>.
+ <code>Double.longBitsToDouble</code> is used to convert the signed long
+ value.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readUnsignedByte()"><!-- --></A><H3>
+readUnsignedByte</H3>
+<PRE>
+public final int <B>readUnsignedByte</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads an unsigned byte (one byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedByte(int)"><CODE>TupleOutput.writeUnsignedByte(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readUnsignedShort()"><!-- --></A><H3>
+readUnsignedShort</H3>
+<PRE>
+public final int <B>readUnsignedShort</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads an unsigned short (two byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedShort(int)"><CODE>TupleOutput.writeUnsignedShort(int)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readUnsignedInt()"><!-- --></A><H3>
+readUnsignedInt</H3>
+<PRE>
+public final long <B>readUnsignedInt</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads an unsigned int (four byte) value from the buffer.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedInt(long)"><CODE>TupleOutput.writeUnsignedInt(long)</CODE></A>.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readBytes(int)"><!-- --></A><H3>
+readBytes</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>readBytes</B>(int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting string.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)"><CODE>TupleOutput.writeBytes(java.lang.String)</CODE></A>.
+ Only characters with values below 0x100 may be read using this method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>length</CODE> - is the number of bytes to be read.
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readChars(int)"><!-- --></A><H3>
+readChars</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>readChars</B>(int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting string.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(java.lang.String)"><CODE>TupleOutput.writeChars(java.lang.String)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>length</CODE> - is the number of characters to be read.
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readBytes(char[])"><!-- --></A><H3>
+readBytes</H3>
+<PRE>
+public final void <B>readBytes</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting array.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)"><CODE>TupleOutput.writeBytes(java.lang.String)</CODE></A>.
+ Only characters with values below 0x100 may be read using this method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array to receive the data and whose length is used
+ to determine the number of bytes to be read.
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readChars(char[])"><!-- --></A><H3>
+readChars</H3>
+<PRE>
+public final void <B>readChars</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting array.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(java.lang.String)"><CODE>TupleOutput.writeChars(java.lang.String)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array to receive the data and whose length is used
+ to determine the number of characters to be read.
+<DT><B>Returns:</B><DD>the value read from the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readString(int)"><!-- --></A><H3>
+readString</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>readString</B>(int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(char[])"><CODE>TupleOutput.writeString(char[])</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>length</CODE> - is the number of characters to be read.
+<DT><B>Returns:</B><DD>the converted string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer
+ or malformed UTF data is encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="readString(char[])"><!-- --></A><H3>
+readString</H3>
+<PRE>
+public final void <B>readString</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.
+ Reads values that were written using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(char[])"><CODE>TupleOutput.writeString(char[])</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array to receive the data and whose length is used
+ to determine the number of characters to be read.
+<DT><B>Returns:</B><DD>the converted string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - if not enough bytes are available in the buffer
+ or malformed UTF data is encountered.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleInput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInputBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInputBinding.html
new file mode 100644
index 000000000..3aa3c03e0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleInputBinding.html
@@ -0,0 +1,319 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleInputBinding,TupleInputBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleInputBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInputBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleInputBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleInputBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleInputBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DL>
+
+<P>
+A concrete tuple binding for keys or values which are <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A>
+ objects. This binding is used when tuples themselves are the data object,
+ rather than using application defined objects. A <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> must
+ always be used. To convert a <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to a <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A>,
+ use the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>TupleInput.TupleInput(TupleOutput)</CODE></A> constructor.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#TupleInputBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleInputBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a data buffer into an Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#getDataFormat()">getDataFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts an Object into a data buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleInputBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+TupleInputBinding</H3>
+<PRE>
+public <B>TupleInputBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</PRE>
+<DL>
+<DD>Creates a tuple input binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts a data buffer into an Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - is the source data buffer.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Converts an Object into a data buffer.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>data</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataFormat()"><!-- --></A><H3>
+getDataFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getDataFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></B></DD>
+<DD>Returns the format used for the data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()">getDataFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data format.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleInputBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInputBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html
new file mode 100644
index 000000000..5efd580d9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html
@@ -0,0 +1,310 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding,TupleMarshalledBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleMarshalledBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">com.sleepycat.bdb.bind.tuple.TupleBinding</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleMarshalledBinding</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></DL>
+
+<P>
+A concrete key or value binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A>
+ interface. It works by calling the methods of the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface, which must be implemented by the key or
+ value class, to convert between the key or value data and the object.
+ use the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>TupleInput.TupleInput(TupleOutput)</CODE></A> constructor.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)">TupleMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple marshalled binding object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or value object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or value object to a tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.bind.tuple.TupleBinding"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getDataFormat()">getDataFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)">getPrimitiveBinding</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToData</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)"><!-- --></A><H3>
+TupleMarshalledBinding</H3>
+<PRE>
+public <B>TupleMarshalledBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</PRE>
+<DL>
+<DD>Creates a tuple marshalled binding object.
+
+ <p>The given class is used to instantiate key or value objects using
+ <CODE>Class.forName(java.lang.String)</CODE>, and therefore must be a public class and have a
+ public no-arguments constructor. It must also implement the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>format</CODE> - is the format of the new binding.<DD><CODE>cls</CODE> - is the class of the key or value objects.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></B></DD>
+<DD>Constructs a key or value object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>input</CODE> - is the tuple key or value data.
+<DT><B>Returns:</B><DD>the key or value object constructed from the data.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToData</H3>
+<PRE>
+public void <B>objectToData</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></B></DD>
+<DD>Converts a key or value object to a tuple data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToData</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the key or value object.<DD><CODE>output</CODE> - is the tuple data to which the key or value should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleOutput.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleOutput.html
new file mode 100644
index 000000000..91fdd0bcb
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleOutput.html
@@ -0,0 +1,771 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleOutput,TupleOutput class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bdb.util.FastOutputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleOutput</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">java.io.OutputStream</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">com.sleepycat.bdb.util.FastOutputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleOutput</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>TupleOutput</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A></DL>
+
+<P>
+Used by tuple bindings to write tuple data.
+
+ <p>This class has many methods that have the same signatures as methods in
+ the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html"><CODE>DataOutput</CODE></A> interface. The reason this class does not
+ implement <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html"><CODE>DataOutput</CODE></A> is because it would break the interface
+ contract for those methods because of data format differences.</p>
+
+ <p>Signed numbers are stored in the buffer in MSB (most significant byte
+ first) order with their sign bit (high-order bit) inverted to cause negative
+ numbers to be sorted first when comparing values as unsigned byte arrays,
+ as done in a database. Unsigned numbers, including characters, are stored
+ in MSB order with no change to their sign bit.</p>
+
+ <p>Strings and character arrays are stored either as a fixed length array of
+ unicode characters, where the length must be known by the application, or as
+ a null-terminated UTF byte array.</p>
+
+ <p>Floats and doubles are stored in standard integer-bit representation and
+ are therefore not ordered by numeric value.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="fields_inherited_from_class_com.sleepycat.bdb.util.FastOutputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Fields inherited from class com.sleepycat.bdb.util.<A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_BUMP_SIZE">DEFAULT_BUMP_SIZE</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_INIT_SIZE">DEFAULT_INIT_SIZE</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#TupleOutput()">TupleOutput</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple output object for writing a byte array of tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#TupleOutput(byte[])">TupleOutput</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple output object for writing a byte array of tuple data,
+ using a given buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBoolean(boolean)">writeBoolean</A></B>(boolean&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a boolean (one byte) unsigned value to the buffer, writing one
+ if the value is true and zero if it is false.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeByte(int)">writeByte</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed byte (one byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(char[])">writeBytes</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)">writeBytes</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChar(int)">writeChar</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes a char (two byte) unsigned value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(char[])">writeChars</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(java.lang.String)">writeChars</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeDouble(double)">writeDouble</A></B>(double&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed double (eight byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeFloat(float)">writeFloat</A></B>(float&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed float (four byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeInt(int)">writeInt</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed int (four byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeLong(long)">writeLong</A></B>(long&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed long (eight byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeShort(int)">writeShort</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an signed short (two byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(char[])">writeString</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified characters to the buffer, converting each character
+ to UTF format.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(java.lang.String)">writeString</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes the specified characters to the buffer, converting each character
+ to UTF format, and adding a null terminator byte.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedByte(int)">writeUnsignedByte</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an unsigned byte (one byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedInt(long)">writeUnsignedInt</A></B>(long&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an unsigned int (four byte) value to the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedShort(int)">writeUnsignedShort</A></B>(int&nbsp;val)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes an unsigned short (two byte) value to the buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.util.FastOutputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.util.<A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#addSize(int)">addSize</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferBytes()">getBufferBytes</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferLength()">getBufferLength</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferOffset()">getBufferOffset</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#makeSpace(int)">makeSpace</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#reset()">reset</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#size()">size</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#toByteArray()">toByteArray</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#toByteArray(byte[], int)">toByteArray</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#toString()">toString</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#toString(java.lang.String)">toString</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(byte[])">write</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(byte[], int, int)">write</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(int)">write</A>, <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html#writeTo(java.io.OutputStream)">writeTo</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.OutputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#close()">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#flush()">flush</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleOutput()"><!-- --></A><H3>
+TupleOutput</H3>
+<PRE>
+public <B>TupleOutput</B>()</PRE>
+<DL>
+<DD>Creates a tuple output object for writing a byte array of tuple data.
+<P>
+</DL>
+<HR>
+
+<A NAME="TupleOutput(byte[])"><!-- --></A><H3>
+TupleOutput</H3>
+<PRE>
+public <B>TupleOutput</B>(byte[]&nbsp;buffer)</PRE>
+<DL>
+<DD>Creates a tuple output object for writing a byte array of tuple data,
+ using a given buffer. A new buffer will be allocated only if the number
+ of bytes needed is greater than the length of this buffer. A reference
+ to the byte array will be kept by this object and therefore the byte
+ array should not be modified while this object is in use.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - is the byte array to use as the buffer.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="writeBytes(java.lang.String)"><!-- --></A><H3>
+writeBytes</H3>
+<PRE>
+public final void <B>writeBytes</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(int)"><CODE>TupleInput.readBytes(int)</CODE></A>.
+ Only characters with values below 0x100 may be written using this
+ method, since the high-order 8 bits of all characters are discarded.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the string containing the values to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeChars(java.lang.String)"><!-- --></A><H3>
+writeChars</H3>
+<PRE>
+public final void <B>writeChars</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(int)"><CODE>TupleInput.readChars(int)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the string containing the characters to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeString(java.lang.String)"><!-- --></A><H3>
+writeString</H3>
+<PRE>
+public final void <B>writeString</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified characters to the buffer, converting each character
+ to UTF format, and adding a null terminator byte.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString()"><CODE>TupleInput.readString()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the string containing the characters to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeChar(int)"><!-- --></A><H3>
+writeChar</H3>
+<PRE>
+public final void <B>writeChar</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes a char (two byte) unsigned value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChar()"><CODE>TupleInput.readChar()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeBoolean(boolean)"><!-- --></A><H3>
+writeBoolean</H3>
+<PRE>
+public final void <B>writeBoolean</B>(boolean&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes a boolean (one byte) unsigned value to the buffer, writing one
+ if the value is true and zero if it is false.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBoolean()"><CODE>TupleInput.readBoolean()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeByte(int)"><!-- --></A><H3>
+writeByte</H3>
+<PRE>
+public final void <B>writeByte</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed byte (one byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readByte()"><CODE>TupleInput.readByte()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeShort(int)"><!-- --></A><H3>
+writeShort</H3>
+<PRE>
+public final void <B>writeShort</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed short (two byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readShort()"><CODE>TupleInput.readShort()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeInt(int)"><!-- --></A><H3>
+writeInt</H3>
+<PRE>
+public final void <B>writeInt</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed int (four byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readInt()"><CODE>TupleInput.readInt()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeLong(long)"><!-- --></A><H3>
+writeLong</H3>
+<PRE>
+public final void <B>writeLong</B>(long&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed long (eight byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readLong()"><CODE>TupleInput.readLong()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeFloat(float)"><!-- --></A><H3>
+writeFloat</H3>
+<PRE>
+public final void <B>writeFloat</B>(float&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed float (four byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readFloat()"><CODE>TupleInput.readFloat()</CODE></A>.
+ <code>Float.floatToIntBits</code> is used to convert the signed float
+ value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeDouble(double)"><!-- --></A><H3>
+writeDouble</H3>
+<PRE>
+public final void <B>writeDouble</B>(double&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an signed double (eight byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readDouble()"><CODE>TupleInput.readDouble()</CODE></A>.
+ <code>Double.doubleToLongBits</code> is used to convert the signed
+ double value.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeBytes(char[])"><!-- --></A><H3>
+writeBytes</H3>
+<PRE>
+public final void <B>writeBytes</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(int)"><CODE>TupleInput.readBytes(int)</CODE></A>.
+ Only characters with values below 0x100 may be written using this
+ method, since the high-order 8 bits of all characters are discarded.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array of values to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeChars(char[])"><!-- --></A><H3>
+writeChars</H3>
+<PRE>
+public final void <B>writeChars</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(int)"><CODE>TupleInput.readChars(int)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array of characters to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeString(char[])"><!-- --></A><H3>
+writeString</H3>
+<PRE>
+public final void <B>writeString</B>(char[]&nbsp;chars)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes the specified characters to the buffer, converting each character
+ to UTF format.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(int)"><CODE>TupleInput.readString(int)</CODE></A>
+ or <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(char[])"><CODE>TupleInput.readString(char[])</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - is the array of characters to be written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeUnsignedByte(int)"><!-- --></A><H3>
+writeUnsignedByte</H3>
+<PRE>
+public final void <B>writeUnsignedByte</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an unsigned byte (one byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedByte()"><CODE>TupleInput.readUnsignedByte()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeUnsignedShort(int)"><!-- --></A><H3>
+writeUnsignedShort</H3>
+<PRE>
+public final void <B>writeUnsignedShort</B>(int&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an unsigned short (two byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedShort()"><CODE>TupleInput.readUnsignedShort()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeUnsignedInt(long)"><!-- --></A><H3>
+writeUnsignedInt</H3>
+<PRE>
+public final void <B>writeUnsignedInt</B>(long&nbsp;val)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Writes an unsigned int (four byte) value to the buffer.
+ Writes values that can be read using <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedInt()"><CODE>TupleInput.readUnsignedInt()</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>val</CODE> - is the value to write to the buffer.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - is never thrown but is declared for compatibility
+ with {java.io.OutputStream#write}.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleOutput.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sleepycat.bdb.util.FastOutputStream">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html
new file mode 100644
index 000000000..202a90c94
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html
@@ -0,0 +1,474 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleTupleBinding,TupleTupleBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleTupleBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleTupleBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>TupleTupleBinding</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DL>
+
+<P>
+An abstract entity binding that uses a tuple key and a tuple value.
+ This class takes care of converting the data to/from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> and
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> objects. Its three abstract methods must be implemented
+ by a concrete subclass to convert between tuples and entity objects.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)"><CODE>dataToObject(TupleInput,TupleInput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>objectToKey(Object,TupleOutput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>objectToValue(Object,TupleOutput)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#TupleTupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple entity binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts key and value data buffers into an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getKeyFormat()">getKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the key data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format used for the value data of this binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the key data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the value data from an entity Object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleTupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+TupleTupleBinding</H3>
+<PRE>
+public <B>TupleTupleBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat)</PRE>
+<DL>
+<DD>Creates a tuple-tuple entity binding.
+<P>
+<DT><B>Parameters:</B><DD><CODE>keyFormat</CODE> - is the key format.<DD><CODE>valueFormat</CODE> - is the value format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Converts key and value data buffers into an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the source key data.<DD><CODE>value</CODE> - is the source value data.
+<DT><B>Returns:</B><DD>the resulting Object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;key)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the key data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>key</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;value)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Extracts the value data from an entity Object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the source Object.<DD><CODE>value</CODE> - is the destination data buffer.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeyFormat()"><!-- --></A><H3>
+getKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the key data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()">getKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></B></DD>
+<DD>Returns the format used for the value data of this binding.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value data format.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public abstract <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data object.<DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> value data object.
+<DT><B>Returns:</B><DD>the entity object constructed from the key and value.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public abstract void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the key should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public abstract void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the value should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html
new file mode 100644
index 000000000..b60280bb8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html
@@ -0,0 +1,474 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleTupleKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor,TupleTupleKeyExtractor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleTupleKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleTupleKeyExtractor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>TupleTupleKeyExtractor</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DL>
+
+<P>
+An abstract key extractor that uses a tuple key and a tuple value. This
+ class takes care of converting the key and value data to/from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> objects. Its two abstract methods must
+ be implemented by a concrete subclass to extract and clear the index key
+ using these objects.
+ <ul>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>extractIndexKey(TupleInput,TupleInput,TupleOutput)</CODE></A> </li>
+ <li> <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>clearIndexKey(TupleInput,TupleOutput)</CODE></A> </li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleKeyExtractor</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in a value buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key and value buffers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary
+ key tuple and value tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the index key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getValueFormat()">getValueFormat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the format of the value data or null if the index key data is
+ not derived from the value data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><!-- --></A><H3>
+TupleTupleKeyExtractor</H3>
+<PRE>
+public <B>TupleTupleKeyExtractor</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</PRE>
+<DL>
+<DD>Creates a tuple-tuple key extractor.
+<P>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyFormat</CODE> - is the primary key format, or null if no
+ primary key data is used to construct the index key.<DD><CODE>valueFormat</CODE> - is the value format, or null if no value data is
+ used to construct the index key.<DD><CODE>indexKeyFormat</CODE> - is the index key format.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getPrimaryKeyFormat()"><!-- --></A><H3>
+getPrimaryKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getPrimaryKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data. If this method returns null,
+ then null will be passed for the <code>primaryKeyData</code> parameter
+ of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the primary key data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValueFormat()"><!-- --></A><H3>
+getValueFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getValueFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the value data or null if the index key data is
+ not derived from the value data. If this method returns null, then null
+ will be passed for the <code>valueData</code> parameter of <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()">getValueFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the value data or null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getIndexKeyFormat()"><!-- --></A><H3>
+getIndexKeyFormat</H3>
+<PRE>
+public <A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A> <B>getIndexKeyFormat</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Returns the format of the index key data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the format of the index key data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;primaryKeyData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;indexKeyData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Extracts the index key data from primary key and value buffers.
+ The index key is extracted when saving the data record identified by the
+ primary key and value buffers, in order to add or remove an index
+ entry in the database for that data record.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyData</CODE> - is the source primary key data, or null if no
+ primary key data is used to construct the index key, in which case
+ <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()"><CODE>KeyExtractor.getPrimaryKeyFormat()</CODE></A> should also return null.<DD><CODE>valueData</CODE> - is the source value data, or null if no value data is
+ used to construct the index key, in which case <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()"><CODE>KeyExtractor.getValueFormat()</CODE></A>
+ should also return null.<DD><CODE>indexKeyData</CODE> - is the destination index key buffer. For index keys
+ which are optionally present, the buffer's length should be set to zero
+ to indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;valueData)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></B></DD>
+<DD>Clears the index key in a value buffer. The index key is cleared when
+ the index is for a foreign key identifying a record that has been
+ deleted. This method is called only if the <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A> is configured with <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A>. It is never called
+ for index keys that are derived from primary key data, since in this
+ case <A HREF="../../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><CODE>ForeignKeyIndex.ON_DELETE_CLEAR</CODE></A> is not
+ allowed.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A></CODE> in interface <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueData</CODE> - is the source and destination value data. On entry
+ this contains the index key to be cleared. It should be changed by this
+ method such that <A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><CODE>KeyExtractor.extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)</CODE></A> will extract a null key (set
+ the buffer length to zero). Other data in the buffer should remain
+ unchanged.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public abstract void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Extracts the index key data from primary
+ key tuple and value tuple data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the primary key
+ data, or null if no primary key data is used to construct the index key.<DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the value data, or null
+ if no value data is used to construct the index key.<DD><CODE>indexKeyOutput</CODE> - is the destination index key tuple. For index
+ keys which are optionally present, no tuple data should be output to
+ indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public abstract void <B>clearIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Clears the index key in the tuple value data. The valueInput should be
+ read and then written to the valueOutput, clearing the index key in the
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the value data.<DD><CODE>valueOutput</CODE> - is the destination <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A>.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html
new file mode 100644
index 000000000..b2a019288
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding,TupleTupleMarshalledBinding class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleTupleMarshalledBinding</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">com.sleepycat.bdb.bind.tuple.TupleTupleBinding</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleTupleMarshalledBinding</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></DL>
+
+<P>
+A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces. It calls the methods of the
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface to convert between the value data and
+ entity object. It calls the methods of the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface to convert between the key data and the entity object. These two
+ interfaces must both be implemented by the entity class
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)">TupleTupleMarshalledBinding</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled binding object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.bind.tuple.TupleTupleBinding"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">dataToObject</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getKeyFormat()">getKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getValueFormat()">getValueFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)">objectToValue</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleTupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)"><!-- --></A><H3>
+TupleTupleMarshalledBinding</H3>
+<PRE>
+public <B>TupleTupleMarshalledBinding</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</PRE>
+<DL>
+<DD>Creates a tuple-tuple marshalled binding object.
+
+ <p>The given class is used to instantiate entity objects using
+ <CODE>Class.forName(java.lang.String)</CODE>, and therefore must be a public class and have a
+ public no-arguments constructor. It must also implement the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interfaces.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>keyFormat</CODE> - is the stored data key format.<DD><CODE>valueFormat</CODE> - is the stored data value format.<DD><CODE>cls</CODE> - is the class of the entity objects.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)"><!-- --></A><H3>
+dataToObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>dataToObject</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></B></DD>
+<DD>Constructs an entity object from <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>keyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data object.<DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> value data object.
+<DT><B>Returns:</B><DD>the entity object constructed from the key and value.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToKey</H3>
+<PRE>
+public void <B>objectToKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></B></DD>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the key should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+objectToValue</H3>
+<PRE>
+public void <B>objectToValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></B></DD>
+<DD>Extracts a key tuple from an entity object.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToValue</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>object</CODE> - is the entity object.<DD><CODE>output</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A> to which the value should be
+ written.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html
new file mode 100644
index 000000000..64b13dc28
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html
@@ -0,0 +1,329 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+TupleTupleMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor,TupleTupleMarshalledKeyExtractor class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleTupleMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.bind.tuple</FONT>
+<BR>
+Class TupleTupleMarshalledKeyExtractor</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor</A>
+ |
+ +--<B>com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>TupleTupleMarshalledKeyExtractor</B><DT>extends <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></DL>
+
+<P>
+A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>. This key extractor works by calling the
+ methods of the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interface to extract and
+ clear the index key data.
+
+ <p>Note that a marshalled tuple key extractor is somewhat less efficient
+ than a non-marshalled key tuple extractor because more conversions are
+ needed. A marshalled key extractor must convert the data to an object in
+ order to extract the key data, while an unmarshalled key extractor does
+ not.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#TupleTupleMarshalledKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleTupleMarshalledKeyExtractor</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary
+ key tuple and value tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)">clearIndexKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)">extractIndexKey</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getIndexKeyFormat()">getIndexKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getPrimaryKeyFormat()">getPrimaryKeyFormat</A>, <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getValueFormat()">getValueFormat</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleTupleMarshalledKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)"><!-- --></A><H3>
+TupleTupleMarshalledKeyExtractor</H3>
+<PRE>
+public <B>TupleTupleMarshalledKeyExtractor</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</PRE>
+<DL>
+<DD>Creates a tuple-tuple marshalled key extractor.
+<P>
+<DT><B>Parameters:</B><DD><CODE>binding</CODE> - is the binding used for the tuple-tuple entity.<DD><CODE>indexKeyFormat</CODE> - is the index key format.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)</CODE></A> method to identify the index
+ key.<DD><CODE>usePrimaryKey</CODE> - is true if the primary key data is used to
+ construct the index key.<DD><CODE>useValue</CODE> - is true if the value data is used to construct the index
+ key.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+extractIndexKey</H3>
+<PRE>
+public void <B>extractIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></CODE></B></DD>
+<DD>Extracts the index key data from primary
+ key tuple and value tuple data.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>primaryKeyInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the primary key
+ data, or null if no primary key data is used to construct the index key.<DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the value data, or null
+ if no value data is used to construct the index key.<DD><CODE>indexKeyOutput</CODE> - is the destination index key tuple. For index
+ keys which are optionally present, no tuple data should be output to
+ indicate that the key is not present or null.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><!-- --></A><H3>
+clearIndexKey</H3>
+<PRE>
+public void <B>clearIndexKey</B>(<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></CODE></B></DD>
+<DD>Clears the index key in the tuple value data. The valueInput should be
+ read and then written to the valueOutput, clearing the index key in the
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></CODE> in class <CODE><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>valueInput</CODE> - is the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> for the value data.<DD><CODE>valueOutput</CODE> - is the destination <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><CODE>TupleOutput</CODE></A>.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleTupleMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleData.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleData.html
new file mode 100644
index 000000000..fc0621816
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleData.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.tuple.MarshalledTupleData (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.tuple.MarshalledTupleData (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleData.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.tuple.MarshalledTupleData</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.tuple.MarshalledTupleData
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleData.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleKeyEntity.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleKeyEntity.html
new file mode 100644
index 000000000..d0cd6d304
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/MarshalledTupleKeyEntity.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleKeyEntity.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MarshalledTupleKeyEntity.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleBinding.html
new file mode 100644
index 000000000..b1a3f0fc0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleBinding.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key or value binding that uses the <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A>
+ interface.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that return <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)">getPrimitiveBinding</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple binding for a primitive Java class.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html
new file mode 100644
index 000000000..99c257f09
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html
@@ -0,0 +1,314 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleFormat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#TupleSerialMarshalledKeyExtractor(com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleSerialMarshalledKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialMarshalledBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial marshalled binding object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleSerialKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)">TupleSerialBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial entity binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)">getPrimitiveBinding</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple binding for a primitive Java class.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#TupleTupleMarshalledKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleTupleMarshalledKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)">TupleTupleMarshalledBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled binding object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)">TupleTupleMarshalledBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled binding object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;primaryKeyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple key extractor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#TupleTupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#TupleTupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleTupleBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;valueFormat)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple entity binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)">TupleMarshalledBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;cls)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple marshalled binding object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#TupleInputBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleInputBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#TupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)">TupleBinding</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html
new file mode 100644
index 000000000..a2160b620
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html
@@ -0,0 +1,372 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleInput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleInput</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;tupleInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;javaInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key tuple data and deserialized
+ value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that return <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#dataToInput(com.sleepycat.bdb.bind.DataBuffer)">dataToInput</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to create a new tuple input object for reading the data
+ from a given buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary
+ key tuple and value tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary
+ key tuple and value tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs an entity object from <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#inputToData(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.DataBuffer)">inputToData</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ input object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)">dataToObject</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;input)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructs a key or value object from <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleInput)">unmarshalPrimaryKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;keyInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Completes construction of the entity by setting its primary key from the
+ stored primary key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleData.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)">unmarshalData</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;dataInput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or value object from the key or value tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInputBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInputBinding.html
new file mode 100644
index 000000000..867918da3
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleInputBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleInputBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInputBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleInputBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.tuple.TupleInputBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleInputBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleMarshalledBinding.html
new file mode 100644
index 000000000..477c5dea1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleMarshalledBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html
new file mode 100644
index 000000000..dac307391
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html
@@ -0,0 +1,372 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleOutput (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleOutput</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary key tuple data and deserialized
+ value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleSerialBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> that return <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#newOutput()">newOutput</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method for use by bindings to create a tuple output object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">extractIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;primaryKeyInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;indexKeyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the index key data from primary
+ key tuple and value tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleKeyExtractor.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)">clearIndexKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>&nbsp;valueInput,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;valueOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the index key in the tuple value data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleTupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts a key tuple from an entity object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleMarshalledBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleFormat.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html#outputToData(com.sleepycat.bdb.bind.tuple.TupleOutput, com.sleepycat.bdb.bind.DataBuffer)">outputToData</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utility method to set the data in a data buffer to the data in a tuple
+ output object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>abstract &nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TupleBinding.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)">objectToData</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;object,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts a key or value object to a tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalPrimaryKey</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's primary key and writes it to the key output.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleKeyEntity.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalIndexKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;keyOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extracts the entity's index key and writes it to the key output.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>MarshalledTupleData.</B><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#marshalData(com.sleepycat.bdb.bind.tuple.TupleOutput)">marshalData</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;dataOutput)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct the key or value tuple data from the key or value object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)">TupleInput</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>&nbsp;output)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple input object from the data contained in a tuple output
+ object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleOutput.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleBinding.html
new file mode 100644
index 000000000..1b6465c8c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleBinding.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleTupleBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleKeyExtractor.html
new file mode 100644
index 000000000..737719bec
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleKeyExtractor.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleTupleKeyExtractor</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete key extractor that works in conjunction with a <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledBinding.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledBinding.html
new file mode 100644
index 000000000..669eae524
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledBinding.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A> in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> with parameters of type <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#TupleTupleMarshalledKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)">TupleTupleMarshalledKeyExtractor</A></B>(<A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>&nbsp;binding,
+ <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>&nbsp;indexKeyFormat,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-tuple marshalled key extractor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledKeyExtractor.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledKeyExtractor.html
new file mode 100644
index 000000000..65c5d90dd
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledKeyExtractor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:02 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleTupleMarshalledKeyExtractor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/package-frame.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-frame.html
new file mode 100644
index 000000000..27205f01e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-frame.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.bind.tuple</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="MarshalledTupleData.html" TARGET="classFrame"><I>MarshalledTupleData</I></A>
+<BR>
+<A HREF="MarshalledTupleKeyEntity.html" TARGET="classFrame"><I>MarshalledTupleKeyEntity</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="TupleBinding.html" TARGET="classFrame">TupleBinding</A>
+<BR>
+<A HREF="TupleFormat.html" TARGET="classFrame">TupleFormat</A>
+<BR>
+<A HREF="TupleInput.html" TARGET="classFrame">TupleInput</A>
+<BR>
+<A HREF="TupleInputBinding.html" TARGET="classFrame">TupleInputBinding</A>
+<BR>
+<A HREF="TupleMarshalledBinding.html" TARGET="classFrame">TupleMarshalledBinding</A>
+<BR>
+<A HREF="TupleOutput.html" TARGET="classFrame">TupleOutput</A>
+<BR>
+<A HREF="TupleTupleBinding.html" TARGET="classFrame">TupleTupleBinding</A>
+<BR>
+<A HREF="TupleTupleKeyExtractor.html" TARGET="classFrame">TupleTupleKeyExtractor</A>
+<BR>
+<A HREF="TupleTupleMarshalledBinding.html" TARGET="classFrame">TupleTupleMarshalledBinding</A>
+<BR>
+<A HREF="TupleTupleMarshalledKeyExtractor.html" TARGET="classFrame">TupleTupleMarshalledKeyExtractor</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/package-summary.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-summary.html
new file mode 100644
index 000000000..0457c5d0f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-summary.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.bind.tuple package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.bind.tuple
+</H2>
+Formats and bindings that use sequences of primitive data items or tuples
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="MarshalledTupleData.html"><I>MarshalledTupleData</I></A></B></TD>
+<TD>A marshalling interface implemented by key, value or entity classes that
+ have tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="MarshalledTupleKeyEntity.html"><I>MarshalledTupleKeyEntity</I></A></B></TD>
+<TD>A marshalling interface implemented by entity classes that have tuple data
+ keys.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleBinding.html">TupleBinding</A></B></TD>
+<TD>An abstract tuple binding for tuple keys or values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleFormat.html">TupleFormat</A></B></TD>
+<TD>The format for tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleInput.html">TupleInput</A></B></TD>
+<TD>Used by tuple bindings to read tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleInputBinding.html">TupleInputBinding</A></B></TD>
+<TD>A concrete tuple binding for keys or values which are <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A>
+ objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleMarshalledBinding.html">TupleMarshalledBinding</A></B></TD>
+<TD>A concrete key or value binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A>
+ interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleOutput.html">TupleOutput</A></B></TD>
+<TD>Used by tuple bindings to write tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleTupleBinding.html">TupleTupleBinding</A></B></TD>
+<TD>An abstract entity binding that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A></B></TD>
+<TD>An abstract key extractor that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A></B></TD>
+<TD>A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A></B></TD>
+<TD>A concrete key extractor that works in conjunction with a <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.bind.tuple Description
+</H2>
+
+<P>
+<p>Formats and bindings that use sequences of primitive data items or tuples
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/package-tree.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-tree.html
new file mode 100644
index 000000000..cda927a83
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-tree.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.bind.tuple Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.bind.tuple Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.bind.tuple
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html"><B>InputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>FastInputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>TupleInput</B></A></UL>
+</UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html"><B>OutputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>FastOutputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>TupleOutput</B></A></UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleBinding.html"><B>TupleBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>TupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>TupleFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>TupleInputBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>TupleTupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>TupleTupleKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><B>TupleTupleMarshalledKeyExtractor</B></A></UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><B>MarshalledTupleData</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.tuple.<A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><B>MarshalledTupleKeyEntity</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/bind/tuple/package-use.html b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-use.html
new file mode 100644
index 000000000..66b4970da
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/bind/tuple/package-use.html
@@ -0,0 +1,219 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.bind.tuple (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.bind.tuple</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.serial"><B>com.sleepycat.bdb.bind.serial</B></A></TD>
+<TD>Formats and bindings that use Java serialization&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.serial"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> used by <A HREF="../../../../../com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html#com.sleepycat.bdb.bind.serial"><B>TupleFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html#com.sleepycat.bdb.bind.serial"><B>TupleInput</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to read tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html#com.sleepycat.bdb.bind.serial"><B>TupleOutput</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to write tuple data.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A> used by <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleBinding.html#com.sleepycat.bdb.bind.tuple"><B>TupleBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract tuple binding for tuple keys or values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleFormat.html#com.sleepycat.bdb.bind.tuple"><B>TupleFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The format for tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleInput.html#com.sleepycat.bdb.bind.tuple"><B>TupleInput</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to read tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleOutput.html#com.sleepycat.bdb.bind.tuple"><B>TupleOutput</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to write tuple data.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleTupleBinding.html#com.sleepycat.bdb.bind.tuple"><B>TupleTupleBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract entity binding that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleTupleKeyExtractor.html#com.sleepycat.bdb.bind.tuple"><B>TupleTupleKeyExtractor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An abstract key extractor that uses a tuple key and a tuple value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/class-use/TupleTupleMarshalledBinding.html#com.sleepycat.bdb.bind.tuple"><B>TupleTupleMarshalledBinding</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A concrete entity binding that uses the <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/CurrentTransaction.html b/db/docs/java/com/sleepycat/bdb/class-use/CurrentTransaction.html
new file mode 100644
index 000000000..42a9e9fac
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/CurrentTransaction.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.CurrentTransaction (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CurrentTransaction.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.CurrentTransaction</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getCurrentTxn()">getCurrentTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the current transaction for the view or null if the environment
+ is non-transactional.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#getInstance(com.sleepycat.db.DbEnv)">getInstance</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the CurrentTransaction accessor for a specified Berkeley DB
+ environment.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="CurrentTransaction.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataCursor.html b/db/docs/java/com/sleepycat/bdb/class-use/DataCursor.html
new file mode 100644
index 000000000..7cc5bfb91
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataCursor.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataCursor (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataCursor (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataCursor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataCursor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataCursor</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>[]&nbsp;indexViews,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ specified index key values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataCursor[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>[]&nbsp;indexCursors,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataCursor[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>[]&nbsp;indexCursors,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataCursor)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones a cursor preserving the current position.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataCursor.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataCursor.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataDb.html b/db/docs/java/com/sleepycat/bdb/class-use/DataDb.html
new file mode 100644
index 000000000..878384277
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataDb.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataDb (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataDb (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataDb.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataDb.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataDb</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataDb.html">DataDb</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataDb.html">DataDb</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataDb.html">DataDb</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataDb.html">DataDb</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getDb()">getDb</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the database for the index, if one is used, or store, if no
+ index is used.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataDb.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataDb.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataIndex.html b/db/docs/java/com/sleepycat/bdb/class-use/DataIndex.html
new file mode 100644
index 000000000..1554a94ce
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataIndex.html
@@ -0,0 +1,382 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataIndex (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataIndex (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataIndex</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB secondary index where the index key is the primary
+ key of another data store.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getIndex()">getIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index, as specified to the constructor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)">newDataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given index that was obtained from this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given index that was obtained from this
+ factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataStore.html b/db/docs/java/com/sleepycat/bdb/class-use/DataStore.html
new file mode 100644
index 000000000..4b0eae85b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataStore.html
@@ -0,0 +1,441 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataStore (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataStore (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataStore.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataStore</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>ForeignKeyIndex.</B><B><A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#getForeignStore()">getForeignStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the foreign store which has the primary key which matches the
+ index key of this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getStore()">getStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the store, as specified to the constructor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>DataIndex.</B><B><A HREF="../../../../com/sleepycat/bdb/DataIndex.html#getStore()">getStore</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the store associated with this index.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)">ForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)">ForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">DataView</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;entityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a view for a given store/index and bindings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)">DataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A> in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A> in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)">newDataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)">newDataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)">newForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)">newForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given store that was obtained from this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given store that was obtained from this
+ factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataStore.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataThang.html b/db/docs/java/com/sleepycat/bdb/class-use/DataThang.html
new file mode 100644
index 000000000..99e135dcd
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataThang.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataThang (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataThang (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataThang.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataThang.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataThang</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getSingleKeyThang()">getSingleKeyThang</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key thang for a single key range, or null if a single key
+ range is not used.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#addValue(com.sleepycat.bdb.DataThang, java.lang.Object, int)">addValue</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;primaryKeyThang,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a duplicate value for a specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataThang.</B><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#copy(com.sleepycat.bdb.DataThang)">copy</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies the data from the given thang to this thang..</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#delete(com.sleepycat.bdb.DataThang, int)">delete</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'delete' operation.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#DataThang(com.sleepycat.bdb.DataThang)">DataThang</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;copyFrom)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a thang with a copy of the data from the given thang.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataThang.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataThang.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/DataView.html b/db/docs/java/com/sleepycat/bdb/class-use/DataView.html
new file mode 100644
index 000000000..35d96096d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/DataView.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.DataView (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.DataView (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataView.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataView.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.DataView</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#keySetView()">keySetView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new key-set view derived from this view by setting the
+ entity and value binding to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#valueSetView()">valueSetView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view derived from this view by setting the
+ key binding to null.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#valueSetView(java.lang.Object)">valueSetView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)">subView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for key range, optionally changing
+ the key binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#dirtyReadView(boolean)">dirtyReadView</A></B>(boolean&nbsp;enable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new view with a specified dirtyRead setting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#autoCommitView(boolean)">autoCommitView</A></B>(boolean&nbsp;enable)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new view with a specified autoCommit setting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#getView()">getView</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the view for this cursor, as specified to the constructor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>[]&nbsp;indexViews,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ specified index key values.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object, boolean, java.lang.Object, boolean)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and key range.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/DataView.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DataView.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/ForeignKeyIndex.html b/db/docs/java/com/sleepycat/bdb/class-use/ForeignKeyIndex.html
new file mode 100644
index 000000000..73a740a37
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/ForeignKeyIndex.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.ForeignKeyIndex (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.ForeignKeyIndex (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForeignKeyIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.ForeignKeyIndex</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A> in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)">newForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ForeignKeyIndex.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/IntegrityConstraintException.html b/db/docs/java/com/sleepycat/bdb/class-use/IntegrityConstraintException.html
new file mode 100644
index 000000000..3da83db67
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/IntegrityConstraintException.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.IntegrityConstraintException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.IntegrityConstraintException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/IntegrityConstraintException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IntegrityConstraintException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.IntegrityConstraintException</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.IntegrityConstraintException
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/IntegrityConstraintException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IntegrityConstraintException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/KeyRangeException.html b/db/docs/java/com/sleepycat/bdb/class-use/KeyRangeException.html
new file mode 100644
index 000000000..916ccd923
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/KeyRangeException.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.KeyRangeException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.KeyRangeException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/KeyRangeException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyRangeException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.KeyRangeException</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that throw <A HREF="../../../../com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#valueSetView(java.lang.Object)">valueSetView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)">subView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for key range, optionally changing
+ the key binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/KeyRangeException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="KeyRangeException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html b/db/docs/java/com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html
new file mode 100644
index 000000000..f0a04cb72
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.PrimaryKeyAssigner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PrimaryKeyAssigner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.PrimaryKeyAssigner</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></CODE></FONT></TD>
+<TD><CODE><B>DataStore.</B><B><A HREF="../../../../com/sleepycat/bdb/DataStore.html#getKeyAssigner()">getKeyAssigner</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key assigner associated with this store.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)">DataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A> in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)">newDataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="PrimaryKeyAssigner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberBinding.html b/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberBinding.html
new file mode 100644
index 000000000..e313403c6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberBinding.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.RecordNumberBinding (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/RecordNumberBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.RecordNumberBinding</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.RecordNumberBinding
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/RecordNumberBinding.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberBinding.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberFormat.html b/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberFormat.html
new file mode 100644
index 000000000..41f0420f2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/RecordNumberFormat.html
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.RecordNumberFormat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.RecordNumberFormat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.RecordNumberFormat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/RecordNumberBinding.html#RecordNumberBinding(com.sleepycat.bdb.RecordNumberFormat)">RecordNumberBinding</A></B>(<A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>&nbsp;format)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a byte array binding.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/RecordNumberFormat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RecordNumberFormat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/StoredClassCatalog.html b/db/docs/java/com/sleepycat/bdb/class-use/StoredClassCatalog.html
new file mode 100644
index 000000000..aec5a3a1a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/StoredClassCatalog.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.StoredClassCatalog (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/StoredClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.StoredClassCatalog</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.StoredClassCatalog
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/StoredClassCatalog.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredClassCatalog.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/TransactionRunner.html b/db/docs/java/com/sleepycat/bdb/class-use/TransactionRunner.html
new file mode 100644
index 000000000..8aa5596bf
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/TransactionRunner.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.TransactionRunner (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionRunner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.TransactionRunner</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.TransactionRunner
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionRunner.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/class-use/TransactionWorker.html b/db/docs/java/com/sleepycat/bdb/class-use/TransactionWorker.html
new file mode 100644
index 000000000..559216722
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/class-use/TransactionWorker.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:01 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.TransactionWorker (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionWorker.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.TransactionWorker</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TransactionRunner.</B><B><A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)">run</A></B>(<A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>&nbsp;worker)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>doWork()</CODE></A> method and, for transactional
+ environments, begins and ends a transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TransactionWorker.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/MapEntry.html b/db/docs/java/com/sleepycat/bdb/collection/MapEntry.html
new file mode 100644
index 000000000..72155f2a0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/MapEntry.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+MapEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.MapEntry,MapEntry class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="MapEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapEntry.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class MapEntry</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.MapEntry</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>MapEntry</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></DL>
+
+<P>
+A simple Map.Entry implementation.
+
+ <p><b>Warning:</b> Use of this interface violates the Java Collections
+ interface contract since these state that Map.Entry objects should only be
+ obtained from Map.entrySet() sets, while this class allows constructing them
+ directly. However, it is useful for performing operations on an entry set
+ such as add(), contains(), etc. For restrictions see <A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#getValue()"><CODE>getValue()</CODE></A> and
+ <A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#setValue(java.lang.Object)"><CODE>setValue(java.lang.Object)</CODE></A>.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#MapEntry(java.lang.Object, java.lang.Object)">MapEntry</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entry with a given key and value.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares this entry to a given entry as specified by <CODE>Map.Entry.equals(java.lang.Object)</CODE>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#getKey()">getKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key of this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#getValue()">getValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Computes a hash code as specified by <CODE>Map.Entry.hashCode()</CODE>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#setValue(java.lang.Object)">setValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;newValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes the value of this entry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the entry to a string representation for debugging.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="MapEntry(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+MapEntry</H3>
+<PRE>
+public <B>MapEntry</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Creates a map entry with a given key and value.
+<P>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the key to use.<DD><CODE>value</CODE> - is the value to use.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD>Computes a hash code as specified by <CODE>Map.Entry.hashCode()</CODE>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>hashCode</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the computed hash code.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Compares this entry to a given entry as specified by <CODE>Map.Entry.equals(java.lang.Object)</CODE>.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>equals</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the computed hash code.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKey()"><!-- --></A><H3>
+getKey</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getKey</B>()</PRE>
+<DL>
+<DD>Returns the key of this entry.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getKey</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the key of this entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValue()"><!-- --></A><H3>
+getValue</H3>
+<PRE>
+public final <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getValue</B>()</PRE>
+<DL>
+<DD>Returns the value of this entry. Note that this will be the value
+ passed to the constructor or the last value passed to <A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html#setValue(java.lang.Object)"><CODE>setValue(java.lang.Object)</CODE></A>.
+ It will not reflect changes made to a Map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getValue</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value of this entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setValue(java.lang.Object)"><!-- --></A><H3>
+setValue</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>setValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;newValue)</PRE>
+<DL>
+<DD>Changes the value of this entry. Note that this will change the value
+ in this entry object but will not change the value in a Map.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>setValue</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the value of this entry.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Converts the entry to a string representation for debugging.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/MapEntry.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapEntry.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredCollection.html b/db/docs/java/com/sleepycat/bdb/collection/StoredCollection.html
new file mode 100644
index 000000000..ac8a4ce13
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredCollection.html
@@ -0,0 +1,656 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredCollection,StoredCollection class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollection.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredCollection</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredCollection</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html">StoredList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>StoredCollection</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></DL>
+
+<P>
+A abstract base class for all stored collections. This class, and its
+ base class <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><CODE>StoredContainer</CODE></A>, provide implementations of most methods
+ in the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interface. Other methods, such as <CODE>Collection.add(java.lang.Object)</CODE>
+ and <CODE>Collection.remove(java.lang.Object)</CODE>, are provided by concrete classes that extend this
+ class.
+
+ <p>In addition, this class provides the following methods for stored
+ collections only. Note that the use of these methods is not compatible with
+ the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)"><CODE>iterator(boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])"><CODE>join(StoredContainer[], Object[])</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)"><CODE>join(StoredContainer[], Object[], boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()"><CODE>toList()</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds all of the elements in the specified collection to this collection
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this collection contains all of the elements in the
+ specified collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this collection for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator over the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A></B>(boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a read or read-write iterator over the elements in this
+ collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all this collection's elements that are also contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of all the elements in this collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;a)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an array of all the elements in this collection whose runtime
+ type is that of the specified array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a copy of this collection as an ArrayList.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the collection to a string representation for debugging.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add(java.lang.Object)">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#contains(java.lang.Object)">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove(java.lang.Object)">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="iterator()"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A> <B>iterator</B>()</PRE>
+<DL>
+<DD>Returns an iterator over the elements in this collection.
+ The iterator will be read-only if the collection is read-only.
+ This method conforms to the <CODE>Collection.iterator()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>iterator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator(boolean)"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A> <B>iterator</B>(boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Returns a read or read-write iterator over the elements in this
+ collection.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>writeAllowed</CODE> - is true to open a read-write iterator or false to
+ open a read-only iterator. If the collection is read-only the iterator
+ will always be read-only.
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if writeAllowed is true but the collection
+ is read-only.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray()"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[] <B>toArray</B>()</PRE>
+<DL>
+<DD>Returns an array of all the elements in this collection.
+ This method conforms to the <CODE>Collection.toArray()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>toArray</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toArray(java.lang.Object[])"><!-- --></A><H3>
+toArray</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[] <B>toArray</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;a)</PRE>
+<DL>
+<DD>Returns an array of all the elements in this collection whose runtime
+ type is that of the specified array.
+ This method conforms to the <CODE>Collection.toArray(Object[])</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>toArray</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsAll(java.util.Collection)"><!-- --></A><H3>
+containsAll</H3>
+<PRE>
+public boolean <B>containsAll</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</PRE>
+<DL>
+<DD>Returns true if this collection contains all of the elements in the
+ specified collection.
+ This method conforms to the <CODE>Collection.containsAll(java.util.Collection)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>containsAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</PRE>
+<DL>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation).
+ This method calls the <CODE>Collection.add(Object)</CODE> method of the concrete
+ collection class, which may or may not be supported.
+ This method conforms to the <CODE>Collection.addAll(java.util.Collection)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>addAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only, or
+ if the collection is indexed, or if the add method is not supported by
+ the concrete collection.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="removeAll(java.util.Collection)"><!-- --></A><H3>
+removeAll</H3>
+<PRE>
+public boolean <B>removeAll</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</PRE>
+<DL>
+<DD>Removes all this collection's elements that are also contained in the
+ specified collection (optional operation).
+ This method conforms to the <CODE>Collection.removeAll(java.util.Collection)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>removeAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="retainAll(java.util.Collection)"><!-- --></A><H3>
+retainAll</H3>
+<PRE>
+public boolean <B>retainAll</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</PRE>
+<DL>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).
+ This method conforms to the <CODE>Collection.removeAll(java.util.Collection)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>retainAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Compares the specified object with this collection for equality.
+ A value comparison is performed by this method and the stored values
+ are compared rather than calling the equals() method of each element.
+ This method conforms to the <CODE>Collection.equals(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>equals</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toList()"><!-- --></A><H3>
+toList</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A> <B>toList</B>()</PRE>
+<DL>
+<DD>Returns a copy of this collection as an ArrayList. This is the same as
+ <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()"><CODE>toArray()</CODE></A> but returns a collection instead of an array.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ArrayList.html"><CODE>ArrayList</CODE></A> containing a copy of all elements in this
+ collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Converts the collection to a string representation for debugging.
+ WARNING: All elements will be converted to strings and returned and
+ therefore the returned string may be very large.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string representation.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A> <B>join</B>(<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys)</PRE>
+<DL>
+<DD>Returns an iterator representing an equality join of the indices and
+ index key values specified.
+ The indices will be sorted by least number of references, which is
+ commonly the best optimization.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interface.
+
+ <p>The returned iterator supports only the two methods: hasNext() and
+ next(). All other methods will throw UnsupportedOperationException.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>indices</CODE> - is an array of indices with elements corresponding to
+ those in the indexKeys array.<DD><CODE>indexKeys</CODE> - is an array of index key values identifying the
+ elements to be selected.
+<DT><B>Returns:</B><DD>an iterator over the elements in this collection that match
+ all specified index key values.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if this collection is indexed or if a
+ given index does not have the same store as this collection.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A> <B>join</B>(<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</PRE>
+<DL>
+<DD>Returns an iterator representing an equality join of the indices and
+ index key values specified.
+ The indices may be presorted to allow custom optimizations.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interface.
+
+ <p>The returned iterator supports only the two methods: hasNext() and
+ next(). All other methods will throw UnsupportedOperationException.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>indices</CODE> - is an array of indices with elements corresponding to
+ those in the indexKeys array.<DD><CODE>indexKeys</CODE> - is an array of index key values identifying the
+ elements to be selected.<DD><CODE>presorted</CODE> - is true if the index order should not be changed, or
+ false to use the default sorting by least number of references.
+<DT><B>Returns:</B><DD>an iterator over the elements in this collection that match
+ all specified index key values.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if this collection is indexed or if a
+ given index does not have the same store as this collection.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredCollection.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollection.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredCollections.html b/db/docs/java/com/sleepycat/bdb/collection/StoredCollections.html
new file mode 100644
index 000000000..c3ad1721f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredCollections.html
@@ -0,0 +1,559 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredCollections,StoredCollections class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredCollections.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollections.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredCollections</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredCollections</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>StoredCollections</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+This class consists exclusively of static methods that operate on or return
+ stored collections. It contains methods for changing certain properties of a
+ collection. Because collection properties are immutable, these methods
+ always return a new collection reference. This allows stored collections to
+ be used safely by multiple threads. Note that creating the new collection
+ reference is not expensive and creates only two new objects.
+
+ <p>When a collection is created with a particular property, all collections
+ and iterators derieved from that collection will inherit the property. For
+ example, if a dirty-read Map is created then calls to subMap(), values(),
+ entrySet(), and keySet() will create dirty-read collections also.</p>
+
+ <p><b>Dirty-Read</b> Methods names beginning with dirtyRead create a new
+ dirty-read container from a given stored container. When dirty-read is
+ enabled, data will be read that has been modified by another transaction but
+ not committed. Using dirty-read can improve concurrency since reading will
+ not wait for other transactions to complete. For a non-transactional
+ container (when <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()"><CODE>StoredContainer.isTransactional()</CODE></A> returns false),
+ dirty-read has no effect. If <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()"><CODE>StoredContainer.isDirtyReadAllowed()</CODE></A>
+ returns false, dirty-read also has no effect. If dirty-ready is enabled
+ (and allowed) for a container, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()"><CODE>StoredContainer.isDirtyReadEnabled()</CODE></A>
+ will return true. Dirty-read is disabled by default for a container.</p>
+
+ <p><b>Auto-Commit</b> Methods names beginning with autoCommit create a new
+ auto-commit container from a given stored container. If auto-commit is
+ enabled for a container (or for its <A HREF="../../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A>), a transaction will be
+ started and committed automatically for each write operation when no
+ transaction is already active. Auto-commit only applies to container
+ methods. It does not apply to iterator methods and these always require an
+ active transaction. For a non-transactional container (where <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()"><CODE>StoredContainer.isTransactional()</CODE></A> returns false) auto-commit has no effect.
+ If auto-commit is enabled for a transactional container or its environment,
+ <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()"><CODE>StoredContainer.isAutoCommit()</CODE></A> will return true. Auto-commit is
+ disabled by default for a container but may be enabled for an entire
+ environment using <A HREF="../../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int, boolean)</CODE></A>.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitCollection(java.util.Collection)">autoCommitCollection</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;storedCollection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit collection from a given stored collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitList(java.util.List)">autoCommitList</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>&nbsp;storedList)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit list from a given stored list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitMap(java.util.Map)">autoCommitMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;storedMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit map from a given stored map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSet(java.util.Set)">autoCommitSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>&nbsp;storedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit set from a given stored set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSortedMap(java.util.SortedMap)">autoCommitSortedMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>&nbsp;storedSortedMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit sorted map from a given stored sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSortedSet(java.util.SortedSet)">autoCommitSortedSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>&nbsp;storedSortedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a auto-commit sorted set from a given stored sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadCollection(java.util.Collection)">dirtyReadCollection</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;storedCollection)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read collection from a given stored collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadList(java.util.List)">dirtyReadList</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>&nbsp;storedList)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read list from a given stored list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadMap(java.util.Map)">dirtyReadMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;storedMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read map from a given stored map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSet(java.util.Set)">dirtyReadSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>&nbsp;storedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read set from a given stored set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)">dirtyReadSortedMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>&nbsp;storedSortedMap)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read sorted map from a given stored sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)">dirtyReadSortedSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>&nbsp;storedSortedSet)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a dirty-read sorted set from a given stored sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html#iterator(java.util.Iterator)">iterator</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A>&nbsp;storedIterator)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones a stored iterator preserving its current position.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dirtyReadCollection(java.util.Collection)"><!-- --></A><H3>
+dirtyReadCollection</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A> <B>dirtyReadCollection</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;storedCollection)</PRE>
+<DL>
+<DD>Creates a dirty-read collection from a given stored collection.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedCollection</CODE> - the base collection.
+<DT><B>Returns:</B><DD>the dirty-read collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadList(java.util.List)"><!-- --></A><H3>
+dirtyReadList</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A> <B>dirtyReadList</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>&nbsp;storedList)</PRE>
+<DL>
+<DD>Creates a dirty-read list from a given stored list.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedList</CODE> - the base list.
+<DT><B>Returns:</B><DD>the dirty-read list.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadMap(java.util.Map)"><!-- --></A><H3>
+dirtyReadMap</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A> <B>dirtyReadMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;storedMap)</PRE>
+<DL>
+<DD>Creates a dirty-read map from a given stored map.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedMap</CODE> - the base map.
+<DT><B>Returns:</B><DD>the dirty-read map.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadSet(java.util.Set)"><!-- --></A><H3>
+dirtyReadSet</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A> <B>dirtyReadSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>&nbsp;storedSet)</PRE>
+<DL>
+<DD>Creates a dirty-read set from a given stored set.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSet</CODE> - the base set.
+<DT><B>Returns:</B><DD>the dirty-read set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadSortedMap(java.util.SortedMap)"><!-- --></A><H3>
+dirtyReadSortedMap</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>dirtyReadSortedMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>&nbsp;storedSortedMap)</PRE>
+<DL>
+<DD>Creates a dirty-read sorted map from a given stored sorted map.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSortedMap</CODE> - the base map.
+<DT><B>Returns:</B><DD>the dirty-read map.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dirtyReadSortedSet(java.util.SortedSet)"><!-- --></A><H3>
+dirtyReadSortedSet</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>dirtyReadSortedSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>&nbsp;storedSortedSet)</PRE>
+<DL>
+<DD>Creates a dirty-read sorted set from a given stored sorted set.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSortedSet</CODE> - the base set.
+<DT><B>Returns:</B><DD>the dirty-read set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitCollection(java.util.Collection)"><!-- --></A><H3>
+autoCommitCollection</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A> <B>autoCommitCollection</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;storedCollection)</PRE>
+<DL>
+<DD>Creates a auto-commit collection from a given stored collection.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedCollection</CODE> - the base collection.
+<DT><B>Returns:</B><DD>the auto-commit collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitList(java.util.List)"><!-- --></A><H3>
+autoCommitList</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A> <B>autoCommitList</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>&nbsp;storedList)</PRE>
+<DL>
+<DD>Creates a auto-commit list from a given stored list.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedList</CODE> - the base list.
+<DT><B>Returns:</B><DD>the auto-commit list.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitMap(java.util.Map)"><!-- --></A><H3>
+autoCommitMap</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A> <B>autoCommitMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;storedMap)</PRE>
+<DL>
+<DD>Creates a auto-commit map from a given stored map.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedMap</CODE> - the base map.
+<DT><B>Returns:</B><DD>the auto-commit map.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitSet(java.util.Set)"><!-- --></A><H3>
+autoCommitSet</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A> <B>autoCommitSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>&nbsp;storedSet)</PRE>
+<DL>
+<DD>Creates a auto-commit set from a given stored set.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSet</CODE> - the base set.
+<DT><B>Returns:</B><DD>the auto-commit set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitSortedMap(java.util.SortedMap)"><!-- --></A><H3>
+autoCommitSortedMap</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>autoCommitSortedMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>&nbsp;storedSortedMap)</PRE>
+<DL>
+<DD>Creates a auto-commit sorted map from a given stored sorted map.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSortedMap</CODE> - the base map.
+<DT><B>Returns:</B><DD>the auto-commit map.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="autoCommitSortedSet(java.util.SortedSet)"><!-- --></A><H3>
+autoCommitSortedSet</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>autoCommitSortedSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>&nbsp;storedSortedSet)</PRE>
+<DL>
+<DD>Creates a auto-commit sorted set from a given stored sorted set.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedSortedSet</CODE> - the base set.
+<DT><B>Returns:</B><DD>the auto-commit set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given container is not a
+ StoredContainer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="iterator(java.util.Iterator)"><!-- --></A><H3>
+iterator</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A> <B>iterator</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A>&nbsp;storedIterator)</PRE>
+<DL>
+<DD>Clones a stored iterator preserving its current position.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>storedIterator</CODE> - an iterator to clone.
+<DT><B>Returns:</B><DD>a new <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A> having the same position as the
+ given iterator.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the given iterator is not a
+ StoredIterator.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredCollections.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollections.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredContainer.html b/db/docs/java/com/sleepycat/bdb/collection/StoredContainer.html
new file mode 100644
index 000000000..746ce180e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredContainer.html
@@ -0,0 +1,602 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:07 EST 2003 -->
+<TITLE>
+StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredContainer,StoredContainer class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredContainer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredContainer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredContainer</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredContainer</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>StoredContainer</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A></DL>
+
+<P>
+A abstract base class for all stored collections and maps. This class
+ provides implementations of methods that are common to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> and the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> interfaces, namely <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()"><CODE>clear()</CODE></A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()"><CODE>isEmpty()</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()"><CODE>size()</CODE></A>.
+
+ <p>In addition, this class provides the following methods for stored
+ collections only. Note that the use of these methods is not compatible with
+ the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>isWriteAllowed()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()"><CODE>isIndexed()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()"><CODE>isOrdered()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()"><CODE>areDuplicatesAllowed()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()"><CODE>areDuplicatesOrdered()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()"><CODE>areKeysRenumbered()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()"><CODE>isDirtyReadAllowed()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()"><CODE>isDirtyReadEnabled()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()"><CODE>isAutoCommit()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()"><CODE>isTransactional()</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicate keys are allowed in this container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether duplicate keys are allowed and sorted by element value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys are renumbered when insertions and deletions occur.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all mappings or elements from this map or collection (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether auto-commit is enabled for this container or for its
+ associated <A HREF="../../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether dirty-read is allowed for this container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether dirty-read is enabled for this container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this map or collection contains no mappings or elements.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether this container is a view on a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A> rather
+ than directly on a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether keys are ordered in this container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the databases underlying this container are
+ transactional.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this is a read-write container or false if this is a
+ read-only container.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Always throws UnsupportedOperationException.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="isWriteAllowed()"><!-- --></A><H3>
+isWriteAllowed</H3>
+<PRE>
+public final boolean <B>isWriteAllowed</B>()</PRE>
+<DL>
+<DD>Returns true if this is a read-write container or false if this is a
+ read-only container.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether write is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyReadAllowed()"><!-- --></A><H3>
+isDirtyReadAllowed</H3>
+<PRE>
+public final boolean <B>isDirtyReadAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether dirty-read is allowed for this container.
+ Dirty-read is allowed if Db.DB_DIRTY_READ was specified when opening the
+ database of the underlying Store and Index (if any) for this container.
+ Even when dirty-read is allowed it must specifically be enabled by
+ calling one of the <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><CODE>StoredCollections</CODE></A> methods.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether dirty-read is allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDirtyReadEnabled()"><!-- --></A><H3>
+isDirtyReadEnabled</H3>
+<PRE>
+public final boolean <B>isDirtyReadEnabled</B>()</PRE>
+<DL>
+<DD>Returns whether dirty-read is enabled for this container.
+ If dirty-read is enabled, data will be read that is modified but not
+ committed.
+ Dirty-read is disabled by default.
+ This method always returns false if <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()"><CODE>isDirtyReadAllowed()</CODE></A> returns
+ false.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether dirty-read is enabled.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isAutoCommit()"><!-- --></A><H3>
+isAutoCommit</H3>
+<PRE>
+public final boolean <B>isAutoCommit</B>()</PRE>
+<DL>
+<DD>Returns whether auto-commit is enabled for this container or for its
+ associated <A HREF="../../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A>.
+ If auto-commit is enabled, a transaction will be started and committed
+ automatically for each write operation when no transaction is active.
+ Auto-commit only applies to container methods. It does not apply to
+ iterator methods and these always require an explict transaction.
+ Auto-commit is disabled by default for a container but may be enabled
+ for an entire environment using <A HREF="../../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int, boolean)</CODE></A>.
+ This method always returns false if <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()"><CODE>isTransactional()</CODE></A> returns
+ false.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether auto-commit is enabled.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTransactional()"><!-- --></A><H3>
+isTransactional</H3>
+<PRE>
+public final boolean <B>isTransactional</B>()</PRE>
+<DL>
+<DD>Returns whether the databases underlying this container are
+ transactional.
+ Even in a transactional environment, a database will be transactional
+ only if it was opened within a transaction or if the auto-commit option
+ was specified when it was opened.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the database is transactional.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesAllowed()"><!-- --></A><H3>
+areDuplicatesAllowed</H3>
+<PRE>
+public final boolean <B>areDuplicatesAllowed</B>()</PRE>
+<DL>
+<DD>Returns whether duplicate keys are allowed in this container.
+ Duplicates are optionally allowed for HASH and BTREE databases.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are allowed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areDuplicatesOrdered()"><!-- --></A><H3>
+areDuplicatesOrdered</H3>
+<PRE>
+public final boolean <B>areDuplicatesOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether duplicate keys are allowed and sorted by element value.
+ Duplicates are optionally sorted for HASH and BTREE databases.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether duplicates are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="areKeysRenumbered()"><!-- --></A><H3>
+areKeysRenumbered</H3>
+<PRE>
+public final boolean <B>areKeysRenumbered</B>()</PRE>
+<DL>
+<DD>Returns whether keys are renumbered when insertions and deletions occur.
+ Keys are optionally renumbered for RECNO databases.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are renumbered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isOrdered()"><!-- --></A><H3>
+isOrdered</H3>
+<PRE>
+public final boolean <B>isOrdered</B>()</PRE>
+<DL>
+<DD>Returns whether keys are ordered in this container.
+ Keys are ordered for BTREE, RECNO and QUEUE database.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether keys are ordered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isIndexed()"><!-- --></A><H3>
+isIndexed</H3>
+<PRE>
+public final boolean <B>isIndexed</B>()</PRE>
+<DL>
+<DD>Returns whether this container is a view on a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A> rather
+ than directly on a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html"><CODE>Collection</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the view is indexed.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD>Always throws UnsupportedOperationException. The size of a database
+ cannot be obtained reliably or inexpensively.
+ This method therefore violates the <CODE>Collection.size()</CODE> and <CODE>Map.size()</CODE> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>always throws an exception.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - unconditionally.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEmpty()"><!-- --></A><H3>
+isEmpty</H3>
+<PRE>
+public boolean <B>isEmpty</B>()</PRE>
+<DL>
+<DD>Returns true if this map or collection contains no mappings or elements.
+ This method conforms to the <CODE>Collection.isEmpty()</CODE> and <CODE>Map.isEmpty()</CODE> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether the container is empty.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clear()"><!-- --></A><H3>
+clear</H3>
+<PRE>
+public void <B>clear</B>()</PRE>
+<DL>
+<DD>Removes all mappings or elements from this map or collection (optional
+ operation).
+ This method conforms to the <CODE>Collection.clear()</CODE> and <CODE>Map.clear()</CODE> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the container is read-only.
+<DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredContainer.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredContainer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredEntrySet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredEntrySet.html
new file mode 100644
index 000000000..a8e75819b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredEntrySet.html
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredEntrySet,StoredEntrySet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredEntrySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredEntrySet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredEntrySet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredEntrySet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DL>
+
+<P>
+The Set returned by Map.entrySet(). This class may not be instantiated
+ directly. Contrary to what is stated by <CODE>Map.entrySet()</CODE> this class
+ does support the <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#add(java.lang.Object)"><CODE>add(java.lang.Object)</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)"><CODE>StoredCollection.addAll(java.util.Collection)</CODE></A> methods.
+
+ <p>The <CODE>Map.Entry.setValue(java.lang.Object)</CODE> method of the Map.Entry objects
+ that are returned by this class and its iterators behaves just as the <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#set(java.lang.Object)"><CODE>StoredIterator.set(java.lang.Object)</CODE></A> method does.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#add(java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified element to this set if it is not already present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this set contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified element from this set if it is present (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the collection to a string representation for debugging.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</PRE>
+<DL>
+<DD>Adds the specified element to this set if it is not already present
+ (optional operation).
+ This method conforms to the <CODE>Set.add(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mapEntry</CODE> - must be a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance.
+<DT><B>Returns:</B><DD>true if the key-value pair was added to the set (and was not
+ previously present).
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassCastException.html">ClassCastException</A></CODE> - if the mapEntry is not a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</PRE>
+<DL>
+<DD>Removes the specified element from this set if it is present (optional
+ operation).
+ This method conforms to the <CODE>Set.remove(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mapEntry</CODE> - is a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance to be removed.
+<DT><B>Returns:</B><DD>true if the key-value pair was removed from the set, or false if
+ the mapEntry is not a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance or is not
+ present in the set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;mapEntry)</PRE>
+<DL>
+<DD>Returns true if this set contains the specified element.
+ This method conforms to the <CODE>Set.contains(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>contains</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mapEntry</CODE> - is a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance to be checked.
+<DT><B>Returns:</B><DD>true if the key-value pair is present in the set, or false if
+ the mapEntry is not a <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html"><CODE>Map.Entry</CODE></A> instance or is not
+ present in the set.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></CODE></B></DD>
+<DD>Converts the collection to a string representation for debugging.
+ WARNING: All elements will be converted to strings and returned and
+ therefore the returned string may be very large.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredEntrySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredIterator.html b/db/docs/java/com/sleepycat/bdb/collection/StoredIterator.html
new file mode 100644
index 000000000..c33d6e664
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredIterator.html
@@ -0,0 +1,696 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredIterator,StoredIterator class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredIterator</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredIterator</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredIterator</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A></DL>
+
+<P>
+The Iterator returned by all stored collections.
+
+ <p>While in general this class conforms to the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html"><CODE>Iterator</CODE></A> interface,
+ it is important to note that all iterators for stored collections must be
+ explicitly closed with <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>close()</CODE></A>. The static method <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)"><CODE>close(java.util.Iterator)</CODE></A> allows calling close for all iterators without
+ harm to iterators that are not from stored collections, and also avoids
+ casting. If a stored iterator is not closed, unpredictable behavior
+ including process death may result.</p>
+
+ <p>This class implements the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html"><CODE>Iterator</CODE></A> interface for all stored
+ iterators. It also implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html"><CODE>ListIterator</CODE></A> because some list
+ iterator methods apply to all stored iterators, for example, <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#previous()"><CODE>previous()</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#hasPrevious()"><CODE>hasPrevious()</CODE></A>. Other list iterator methods are always
+ supports for lists, but for other types of collections are only supported
+ under certain conditions. For example, <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#nextIndex()"><CODE>nextIndex()</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#previousIndex()"><CODE>previousIndex()</CODE></A> are only supported when record number keys are used, while
+ <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#add(java.lang.Object)"><CODE>add(java.lang.Object)</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#set(java.lang.Object)"><CODE>set(java.lang.Object)</CODE></A> are supported only under certain other
+ conditions. See the individual method descriptions for more
+ information.</p>
+
+ <p>In addition, this class provides the following methods for stored
+ collection iterators only. Note that the use of these methods is not
+ compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>close()</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)"><CODE>close(Iterator)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#getCollection()"><CODE>getCollection()</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#add(java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts the specified element into the list or inserts a duplicate into
+ other types of collections (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes this iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)">close</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A>&nbsp;i)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the given iterator using <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>close()</CODE></A> if it is a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#count()">count</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of elements having the same key value as the key
+ value of the element last returned by next() or previous().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#getCollection()">getCollection</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the collection associated with this iterator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#getLockForWrite()">getLockForWrite</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether write-locks will be obtained when reading with this
+ cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#hasNext()">hasNext</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this iterator has more elements when traversing in the
+ forward direction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#hasPrevious()">hasPrevious</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this iterator has more elements when traversing in the
+ reverse direction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#next()">next</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the interation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#nextIndex()">nextIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the element that would be returned by a subsequent
+ call to next.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#previous()">previous</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the next element in the interation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#previousIndex()">previousIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index of the element that would be returned by a subsequent
+ call to previous.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#remove()">remove</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the last element that was returned by next or previous (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#set(java.lang.Object)">set</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the last element returned by next or previous with the
+ specified element (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#setLockForWrite(boolean)">setLockForWrite</A></B>(boolean&nbsp;lockForWrite)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes whether write-locks will be obtained when reading with this
+ cursor.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close(java.util.Iterator)"><!-- --></A><H3>
+close</H3>
+<PRE>
+public static void <B>close</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</A>&nbsp;i)</PRE>
+<DL>
+<DD>Closes the given iterator using <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>close()</CODE></A> if it is a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A>. If the given iterator is not a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A>,
+ this method does nothing.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>i</CODE> - is the iterator to close.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockForWrite()"><!-- --></A><H3>
+getLockForWrite</H3>
+<PRE>
+public final boolean <B>getLockForWrite</B>()</PRE>
+<DL>
+<DD>Returns whether write-locks will be obtained when reading with this
+ cursor.
+ Obtaining write-locks can prevent deadlocks when reading and then
+ modifying data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the write-lock setting.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockForWrite(boolean)"><!-- --></A><H3>
+setLockForWrite</H3>
+<PRE>
+public void <B>setLockForWrite</B>(boolean&nbsp;lockForWrite)</PRE>
+<DL>
+<DD>Changes whether write-locks will be obtained when reading with this
+ cursor.
+ Obtaining write-locks can prevent deadlocks when reading and then
+ modifying data.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lockForWrite</CODE> - the write-lock setting.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasNext()"><!-- --></A><H3>
+hasNext</H3>
+<PRE>
+public boolean <B>hasNext</B>()</PRE>
+<DL>
+<DD>Returns true if this iterator has more elements when traversing in the
+ forward direction. False is returned if the iterator has been closed.
+ This method conforms to the <CODE>Iterator.hasNext()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>hasNext</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#next()"><CODE>next()</CODE></A> will succeed.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hasPrevious()"><!-- --></A><H3>
+hasPrevious</H3>
+<PRE>
+public boolean <B>hasPrevious</B>()</PRE>
+<DL>
+<DD>Returns true if this iterator has more elements when traversing in the
+ reverse direction. It returns false if the iterator has been closed.
+ This method conforms to the <CODE>ListIterator.hasPrevious()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>hasPrevious</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>whether <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#previous()"><CODE>previous()</CODE></A> will succeed.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="next()"><!-- --></A><H3>
+next</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>next</B>()</PRE>
+<DL>
+<DD>Returns the next element in the interation.
+ This method conforms to the <CODE>Iterator.next()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>next</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="previous()"><!-- --></A><H3>
+previous</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>previous</B>()</PRE>
+<DL>
+<DD>Returns the next element in the interation.
+ This method conforms to the <CODE>ListIterator.previous()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>previous</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the previous element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="nextIndex()"><!-- --></A><H3>
+nextIndex</H3>
+<PRE>
+public int <B>nextIndex</B>()</PRE>
+<DL>
+<DD>Returns the index of the element that would be returned by a subsequent
+ call to next.
+ This method conforms to the <CODE>ListIterator.nextIndex()</CODE> interface
+ except that it returns Integer.MAX_VALUE for stored lists when
+ positioned at the end of the list, rather than returning the list size
+ as specified by the ListIterator interface. This is because the database
+ size is not available.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>nextIndex</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the next index.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if this iterator's collection does
+ not use record number keys.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="previousIndex()"><!-- --></A><H3>
+previousIndex</H3>
+<PRE>
+public int <B>previousIndex</B>()</PRE>
+<DL>
+<DD>Returns the index of the element that would be returned by a subsequent
+ call to previous.
+ This method conforms to the <CODE>ListIterator.previousIndex()</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>previousIndex</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the previous index.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if this iterator's collection does
+ not use record number keys.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set(java.lang.Object)"><!-- --></A><H3>
+set</H3>
+<PRE>
+public void <B>set</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Replaces the last element returned by next or previous with the
+ specified element (optional operation).
+ This method conforms to the <CODE>ListIterator.set(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>set</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the new value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><CODE>StoredKeySet</CODE></A> (the set returned by <CODE>Map.keySet()</CODE>), or if duplicates
+ are sorted since this would change the iterator position, or if
+ the collection is indexed, or if the collection is read-only.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if an entity value binding is used and
+ the primary key of the value given is different than the existing stored
+ primary key.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove()"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public void <B>remove</B>()</PRE>
+<DL>
+<DD>Removes the last element that was returned by next or previous (optional
+ operation).
+ This method conforms to the <CODE>ListIterator.remove()</CODE> interface except
+ that when the collection is a list and the RECNO-RENUMBER access method
+ is not used, list indices will not be renumbered.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public void <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Inserts the specified element into the list or inserts a duplicate into
+ other types of collections (optional operation).
+ This method conforms to the <CODE>ListIterator.add(java.lang.Object)</CODE> interface when
+ the collection is a list and the RECNO-RENUMBER access method is used.
+ Otherwise, this method may only be called when duplicates are allowed.
+ If duplicates are unsorted, the new value will be inserted in the same
+ manner as list elements.
+ If duplicates are sorted, the new value will be inserted in sort order.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the new value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is indexed, or if the collection is read-only, or if
+ the collection is a list and the RECNO-RENUMBER access method was not
+ used, or if the collection is not a list and duplicates are not allowed.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if the collection is empty and is not a
+ list with RECNO-RENUMBER access.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if a duplicate value is being added
+ that already exists and duplicates are sorted.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count()"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>()</PRE>
+<DL>
+<DD>Returns the number of elements having the same key value as the key
+ value of the element last returned by next() or previous(). If no
+ duplicates are allowed, 1 is always returned.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the number of duplicates.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalStateException.html">IllegalStateException</A></CODE> - if next() or previous() has not been
+ called for this iterator, or if remove() or add() were called after
+ the last call to next() or previous().</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()</PRE>
+<DL>
+<DD>Closes this iterator.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html"><CODE>Iterator</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html"><CODE>ListIterator</CODE></A> interfaces.
+
+ <p>After being closed, only the <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#hasNext()"><CODE>hasNext()</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#hasPrevious()"><CODE>hasPrevious()</CODE></A> methods may be called and these will return false. <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>close()</CODE></A> may also be called again and will do nothing. If other
+ methods are called a <code>NullPointerException</code> will generally be
+ thrown.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCollection()"><!-- --></A><H3>
+getCollection</H3>
+<PRE>
+public final <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A> <B>getCollection</B>()</PRE>
+<DL>
+<DD>Returns the collection associated with this iterator.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html"><CODE>Iterator</CODE></A> or <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html"><CODE>ListIterator</CODE></A> interfaces.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the collection associated with this iterator.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredKeySet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredKeySet.html
new file mode 100644
index 000000000..88a9375c1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredKeySet.html
@@ -0,0 +1,399 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredKeySet,StoredKeySet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredKeySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredKeySet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredKeySet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredKeySet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DL>
+
+<P>
+The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.
+ Since this collection is a set it only contains one element for each key,
+ even when duplicates are allowed. Key set iterators are therefore
+ particularly useful for enumerating the unique keys of a store or index that
+ allows duplicates.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#add(java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified key to this set if it is not already present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this set contains the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified key from this set if it is present (optional
+ operation).</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredKeySet</H3>
+<PRE>
+public <B>StoredKeySet</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredKeySet</H3>
+<PRE>
+public <B>StoredKeySet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Adds the specified key to this set if it is not already present
+ (optional operation).
+ When a key is added the value in the underlying data store will be
+ empty.
+ This method conforms to the <CODE>Set.add(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is indexed, or
+ if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes the specified key from this set if it is present (optional
+ operation).
+ If duplicates are allowed, this method removes all duplicates for the
+ given key.
+ This method conforms to the <CODE>Set.remove(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns true if this set contains the specified key.
+ This method conforms to the <CODE>Set.contains(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>contains</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredKeySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredList.html b/db/docs/java/com/sleepycat/bdb/collection/StoredList.html
new file mode 100644
index 000000000..177c9c609
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredList.html
@@ -0,0 +1,836 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredList,StoredList class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredList.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredList</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredList</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredList</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></DL>
+
+<P>
+A List view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+
+ <p>For all stored lists the keys of the underlying DataStore or DataIndex
+ must have record number format, and therefore the store or index must be a
+ RECNO, RECNO-RENUMBER, QUEUE, or BTREE-RECNUM database. Only RECNO-RENUMBER
+ allows true list behavior where record numbers are renumbered following the
+ position of an element that is added or removed. For the other access
+ methods (RECNO, QUEUE, and BTREE-RECNUM), stored Lists are most useful as
+ read-only collections where record numbers are not required to be
+ sequential.</p>
+
+ <p>In addition to the standard List methods, this class provides the
+ following methods for stored lists only. Note that the use of these methods
+ is not compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#append(java.lang.Object)"><CODE>append(Object)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredList</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#add(int, java.lang.Object)">add</A></B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts the specified element at the specified position in this list
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#add(java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends the specified element to the end of this list (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#addAll(int, java.util.Collection)">addAll</A></B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inserts all of the elements in the specified collection into this list
+ at the specified position (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#append(java.lang.Object)">append</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends a given value returning the newly assigned index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this list contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this list for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#get(int)">get</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the element at the specified position in this list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#indexOf(java.lang.Object)">indexOf</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in this list of the first occurrence of the specified
+ element, or -1 if this list does not contain this element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#lastIndexOf(java.lang.Object)">lastIndexOf</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the index in this list of the last occurrence of the specified
+ element, or -1 if this list does not contain this element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#listIterator()">listIterator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list iterator of the elements in this list (in proper
+ sequence).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#listIterator(int)">listIterator</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a list iterator of the elements in this list (in proper
+ sequence), starting at the specified position in this list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#remove(int)">remove</A></B>(int&nbsp;index)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the element at the specified position in this list (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the first occurrence in this list of the specified element
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#set(int, java.lang.Object)">set</A></B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Replaces the element at the specified position in this list with the
+ specified element (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html#subList(int, int)">subList</A></B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this list between the specified
+ fromIndex, inclusive, and toIndex, exclusive.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.List"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredList</H3>
+<PRE>
+public <B>StoredList</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredList</H3>
+<PRE>
+public <B>StoredList</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredList</H3>
+<PRE>
+public <B>StoredList</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a list view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredList</H3>
+<PRE>
+public <B>StoredList</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a list entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="add(int, java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public void <B>add</B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Inserts the specified element at the specified position in this list
+ (optional operation).
+ This method conforms to the <CODE>List.add(int, Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is indexed, or if the collection is read-only, or if
+ the RECNO-RENUMBER access method was not used.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Appends the specified element to the end of this list (optional
+ operation).
+ This method conforms to the <CODE>List.add(Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is indexed, or if the collection is read-only, or if
+ the RECNO-RENUMBER access method was not used.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="append(java.lang.Object)"><!-- --></A><H3>
+append</H3>
+<PRE>
+public int <B>append</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Appends a given value returning the newly assigned index.
+ If a <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><CODE>PrimaryKeyAssigner</CODE></A> is associated with
+ Store for this list, it will be used to assigned the returned index.
+ Otherwise the Store must be a QUEUE or RECNO database and the next
+ available record number is assigned as the index.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html"><CODE>List</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value to be appended.
+<DT><B>Returns:</B><DD>the assigned index.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is indexed, or
+ if the collection is read-only, or if the Store has no <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><CODE>PrimaryKeyAssigner</CODE></A> and is not a QUEUE or RECNO
+ database.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addAll(int, java.util.Collection)"><!-- --></A><H3>
+addAll</H3>
+<PRE>
+public boolean <B>addAll</B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;coll)</PRE>
+<DL>
+<DD>Inserts all of the elements in the specified collection into this list
+ at the specified position (optional operation).
+ This method conforms to the <CODE>List.addAll(int, Collection)</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>addAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is indexed, or if the collection is read-only, or if
+ the RECNO-RENUMBER access method was not used.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns true if this list contains the specified element.
+ This method conforms to the <CODE>List.contains(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>contains</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>get</B>(int&nbsp;index)</PRE>
+<DL>
+<DD>Returns the element at the specified position in this list.
+ This method conforms to the <CODE>List.get(int)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>get</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="indexOf(java.lang.Object)"><!-- --></A><H3>
+indexOf</H3>
+<PRE>
+public int <B>indexOf</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns the index in this list of the first occurrence of the specified
+ element, or -1 if this list does not contain this element.
+ This method conforms to the <CODE>List.indexOf(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>indexOf</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastIndexOf(java.lang.Object)"><!-- --></A><H3>
+lastIndexOf</H3>
+<PRE>
+public int <B>lastIndexOf</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns the index in this list of the last occurrence of the specified
+ element, or -1 if this list does not contain this element.
+ This method conforms to the <CODE>List.lastIndexOf(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>lastIndexOf</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="listIterator()"><!-- --></A><H3>
+listIterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A> <B>listIterator</B>()</PRE>
+<DL>
+<DD>Returns a list iterator of the elements in this list (in proper
+ sequence).
+ The iterator will be read-only if the collection is read-only.
+ This method conforms to the <CODE>List.listIterator()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>listIterator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="listIterator(int)"><!-- --></A><H3>
+listIterator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A> <B>listIterator</B>(int&nbsp;index)</PRE>
+<DL>
+<DD>Returns a list iterator of the elements in this list (in proper
+ sequence), starting at the specified position in this list.
+ The iterator will be read-only if the collection is read-only.
+ This method conforms to the <CODE>List.listIterator(int)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>listIterator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A> for this collection.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>remove</B>(int&nbsp;index)</PRE>
+<DL>
+<DD>Removes the element at the specified position in this list (optional
+ operation).
+ This method conforms to the <CODE>List.remove(int)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Removes the first occurrence in this list of the specified element
+ (optional operation).
+ This method conforms to the <CODE>List.remove(Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is a sublist, or
+ if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set(int, java.lang.Object)"><!-- --></A><H3>
+set</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>set</B>(int&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Replaces the element at the specified position in this list with the
+ specified element (optional operation).
+ This method conforms to the <CODE>List.set(int, java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>set</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is indexed, or
+ if the collection is read-only.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if an entity value binding is used and
+ the primary key of the value given is different than the existing stored
+ primary key.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subList(int, int)"><!-- --></A><H3>
+subList</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A> <B>subList</B>(int&nbsp;fromIndex,
+ int&nbsp;toIndex)</PRE>
+<DL>
+<DD>Returns a view of the portion of this list between the specified
+ fromIndex, inclusive, and toIndex, exclusive.
+ Note that add() and remove() may not be called for the returned sublist.
+ This method conforms to the <CODE>List.subList(int, int)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>subList</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Compares the specified object with this list for equality.
+ A value comparison is performed by this method and the stored values
+ are compared rather than calling the equals() method of each element.
+ This method conforms to the <CODE>List.equals(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>equals</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredList.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredMap.html b/db/docs/java/com/sleepycat/bdb/collection/StoredMap.html
new file mode 100644
index 000000000..c7ae9db0c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredMap.html
@@ -0,0 +1,789 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredMap,StoredMap class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredMap</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredMap</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredMap</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></DL>
+
+<P>
+A Map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+
+ <p>In addition to the standard Map methods, this class provides the
+ following methods for stored maps only. Note that the use of these methods
+ is not compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#duplicates(java.lang.Object)"><CODE>duplicates(Object)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)"><CODE>append(Object)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)">append</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends a given value returning the newly assigned key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#containsKey(java.lang.Object)">containsKey</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this map contains the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#containsValue(java.lang.Object)">containsValue</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this map contains the specified value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#duplicates(java.lang.Object)">duplicates</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a new collection containing the values mapped to the given
+ key in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#entrySet()">entrySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set view of the mappings contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compares the specified object with this map for equality.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#get(java.lang.Object)">get</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value to which this map maps the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#keySet()">keySet</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a set view of the keys contained in this map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#put(java.lang.Object, java.lang.Object)">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified key in this map
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#putAll(java.util.Map)">putAll</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;map)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copies all of the mappings from the specified map to this map (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the mapping for this key from this map if present (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the map to a string representation for debugging.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#values()">values</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a collection view of the values contained in this map.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredMap</H3>
+<PRE>
+public <B>StoredMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredMap</H3>
+<PRE>
+public <B>StoredMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredMap</H3>
+<PRE>
+public <B>StoredMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredMap</H3>
+<PRE>
+public <B>StoredMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="get(java.lang.Object)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>get</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns the value to which this map maps the specified key.
+ If duplicates are allowed, this method returns the first duplicate, in
+ the order in which duplicates are configured, that maps to the specified
+ key.
+ This method conforms to the <CODE>Map.get(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>get</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#get(java.lang.Object)">get</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>put</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation).
+ If duplicates are allowed and the specified key is already mapped to a
+ value, this method appends the new duplicate after the existing
+ duplicates.
+ This method conforms to the <CODE>Map.put(java.lang.Object, java.lang.Object)</CODE> interface.
+
+ <p>The key parameter may be null if an entity binding is used and the
+ key will be derived from the value (entity) parameter. If an entity
+ binding is used and the key parameter is non-null, then the key
+ parameter must be equal to the key derived from the value parameter.</p>
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>put</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#put(java.lang.Object, java.lang.Object)">put</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the previous value associated with specified key, or null if
+ there was no mapping for the key or if duplicates are allowed.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is indexed, or
+ if the collection is read-only.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if an entity value binding is used and
+ the primary key of the value given is different than the existing stored
+ primary key.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="append(java.lang.Object)"><!-- --></A><H3>
+append</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>append</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Appends a given value returning the newly assigned key.
+ If a <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><CODE>PrimaryKeyAssigner</CODE></A> is associated with
+ Store for this map, it will be used to assigned the returned key.
+ Otherwise the Store must be a QUEUE or RECNO database and the next
+ available record number is assigned as the key.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value to be appended.
+<DT><B>Returns:</B><DD>the assigned key.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is indexed, or
+ if the collection is read-only, or if the Store has no <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><CODE>PrimaryKeyAssigner</CODE></A> and is not a QUEUE or RECNO
+ database.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Removes the mapping for this key from this map if present (optional
+ operation).
+ If duplicates are allowed, this method removes all duplicates for the
+ given key.
+ This method conforms to the <CODE>Map.remove(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsKey(java.lang.Object)"><!-- --></A><H3>
+containsKey</H3>
+<PRE>
+public boolean <B>containsKey</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns true if this map contains the specified key.
+ This method conforms to the <CODE>Map.containsKey(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>containsKey</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#containsKey(java.lang.Object)">containsKey</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="containsValue(java.lang.Object)"><!-- --></A><H3>
+containsValue</H3>
+<PRE>
+public boolean <B>containsValue</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns true if this map contains the specified value.
+ When an entity binding is used, this method returns whether the map
+ contains the primary key and value mapping of the entity.
+ This method conforms to the <CODE>Map.containsValue(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>containsValue</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#containsValue(java.lang.Object)">containsValue</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="putAll(java.util.Map)"><!-- --></A><H3>
+putAll</H3>
+<PRE>
+public void <B>putAll</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>&nbsp;map)</PRE>
+<DL>
+<DD>Copies all of the mappings from the specified map to this map (optional
+ operation).
+ When duplicates are allowed, the mappings in the specified map are
+ effectively appended to the existing mappings in this map, that is no
+ previously existing mappings in this map are replaced.
+ This method conforms to the <CODE>Map.putAll(java.util.Map)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>putAll</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only, or
+ if the collection is indexed.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keySet()"><!-- --></A><H3>
+keySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A> <B>keySet</B>()</PRE>
+<DL>
+<DD>Returns a set view of the keys contained in this map.
+ A <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> is returned if the map is ordered.
+ The returned collection will be read-only if the map is read-only.
+ This method conforms to the <CODE>Map.keySet()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>keySet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><CODE>StoredKeySet</CODE></A> or a <A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><CODE>StoredSortedKeySet</CODE></A> for this
+ map.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()"><CODE>StoredContainer.isOrdered()</CODE></A>,
+<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="entrySet()"><!-- --></A><H3>
+entrySet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A> <B>entrySet</B>()</PRE>
+<DL>
+<DD>Returns a set view of the mappings contained in this map.
+ A <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> is returned if the map is ordered.
+ The returned collection will be read-only if the map is read-only.
+ This method conforms to the <CODE>Map.entrySet()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>entrySet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><CODE>StoredEntrySet</CODE></A> or a <A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><CODE>StoredSortedEntrySet</CODE></A> for
+ this map.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()"><CODE>StoredContainer.isOrdered()</CODE></A>,
+<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="values()"><!-- --></A><H3>
+values</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A> <B>values</B>()</PRE>
+<DL>
+<DD>Returns a collection view of the values contained in this map.
+ A <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> is returned if the map is ordered and the
+ value/entity binding can be used to derive the map's key from its
+ value/entity object.
+ The returned collection will be read-only if the map is read-only.
+ This method conforms to the <CODE>Map.entrySet()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>values</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>a <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><CODE>StoredEntrySet</CODE></A> or a <A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><CODE>StoredSortedEntrySet</CODE></A> for
+ this map.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.<DT><B>See Also:</B><DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()"><CODE>StoredContainer.isOrdered()</CODE></A>,
+<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><CODE>StoredContainer.isWriteAllowed()</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="duplicates(java.lang.Object)"><!-- --></A><H3>
+duplicates</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A> <B>duplicates</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key)</PRE>
+<DL>
+<DD>Returns a new collection containing the values mapped to the given
+ key in this map. This collection's iterator() method is particularly
+ useful for iterating over the duplicates for a given key, since this
+ is not supported by the standard Map interface.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html"><CODE>Map</CODE></A> interface.
+
+ <p>If no mapping for the given key is present, an empty collection is
+ returned. If duplicates are not allowed, at most a single value will be
+ in the collection returned. If duplicates are allowed, the returned
+ collection's add() method may be used to add values for the given
+ key.</p>
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - is the key for which values are to be returned.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;other)</PRE>
+<DL>
+<DD>Compares the specified object with this map for equality.
+ A value comparison is performed by this method and the stored values
+ are compared rather than calling the equals() method of each element.
+ This method conforms to the <CODE>Map.equals(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>equals</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Converts the map to a string representation for debugging.
+ WARNING: All mappings will be converted to strings and returned and
+ therefore the returned string may be very large.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string representation.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredSortedEntrySet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedEntrySet.html
new file mode 100644
index 000000000..52d346294
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedEntrySet.html
@@ -0,0 +1,538 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredSortedEntrySet,StoredSortedEntrySet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedEntrySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredSortedEntrySet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">com.sleepycat.bdb.collection.StoredEntrySet</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredSortedEntrySet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredSortedEntrySet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DL>
+
+<P>
+The SortedSet returned by Map.entrySet(). This class may not be
+ instantiated directly. Contrary to what is stated by <CODE>Map.entrySet()</CODE>
+ this class does support the <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#add(java.lang.Object)"><CODE>StoredEntrySet.add(java.lang.Object)</CODE></A> and <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)"><CODE>StoredCollection.addAll(java.util.Collection)</CODE></A> methods.
+
+ <p>The <CODE>Map.Entry.setValue(java.lang.Object)</CODE> method of the Map.Entry objects
+ that are returned by this class and its iterators behaves just as the <A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html#set(java.lang.Object)"><CODE>StoredIterator.set(java.lang.Object)</CODE></A> method does.</p>
+
+ <p>In addition to the standard SortedSet methods, this class provides the
+ following methods for stored sorted sets only. Note that the use of these
+ methods is not compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#headSet(java.lang.Object, boolean)"><CODE>headSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#tailSet(java.lang.Object, boolean)"><CODE>tailSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><CODE>subSet(Object, boolean, Object, boolean)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns null since comparators are not supported.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#first()">first</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#headSet(java.lang.Object)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#headSet(java.lang.Object, boolean)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry, optionally including toMapEntry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#last()">last</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry and strictly less than toMapEntry,
+ optionally including fromMapEntry and toMapEntry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#subSet(java.lang.Object, java.lang.Object)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements range
+ from fromMapEntry, inclusive, to toMapEntry, exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#tailSet(java.lang.Object)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromMapEntry.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html#tailSet(java.lang.Object, boolean)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ boolean&nbsp;fromInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry, optionally including fromMapEntry.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredEntrySet"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#add(java.lang.Object)">add</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A> <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns null since comparators are not supported. The natural ordering
+ of a stored collection is data byte order, whether the data classes
+ implement the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html"><CODE>Comparable</CODE></A> interface or not.
+ This method does not conform to the <CODE>SortedSet.comparator()</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>comparator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="first()"><!-- --></A><H3>
+first</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>first</B>()</PRE>
+<DL>
+<DD>Returns the first (lowest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.first()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>first</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="last()"><!-- --></A><H3>
+last</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>last</B>()</PRE>
+<DL>
+<DD>Returns the last (highest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.last()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>last</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry.
+ This method conforms to the <CODE>SortedSet.headSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>headSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toMapEntry</CODE> - the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object, boolean)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry, optionally including toMapEntry.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toMapEntry</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toMapEntry.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromMapEntry.
+ This method conforms to the <CODE>SortedSet.tailSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>tailSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromMapEntry</CODE> - is the lower bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object, boolean)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ boolean&nbsp;fromInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry, optionally including fromMapEntry.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromMapEntry</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromMapEntry.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromMapEntry, inclusive, to toMapEntry, exclusive.
+ This method conforms to the <CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>subSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromMapEntry</CODE> - is the lower bound.<DD><CODE>toMapEntry</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromMapEntry,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toMapEntry,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry and strictly less than toMapEntry,
+ optionally including fromMapEntry and toMapEntry.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromMapEntry</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromMapEntry.<DD><CODE>toMapEntry</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toMapEntry.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedEntrySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredSortedKeySet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedKeySet.html
new file mode 100644
index 000000000..0a48126d1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedKeySet.html
@@ -0,0 +1,603 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredSortedKeySet,StoredSortedKeySet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedKeySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredSortedKeySet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html">com.sleepycat.bdb.collection.StoredKeySet</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredSortedKeySet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredSortedKeySet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DL>
+
+<P>
+The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.
+ Since this collection is a set it only contains one element for each key,
+ even when duplicates are allowed. Key set iterators are therefore
+ particularly useful for enumerating the unique keys of a store or index that
+ allows duplicates.
+
+ <p>In addition to the standard SortedSet methods, this class provides the
+ following methods for stored sorted sets only. Note that the use of these
+ methods is not compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#headSet(java.lang.Object, boolean)"><CODE>headSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#tailSet(java.lang.Object, boolean)"><CODE>tailSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><CODE>subSet(Object, boolean, Object, boolean)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedKeySet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns null since comparators are not supported.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#first()">first</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#headSet(java.lang.Object)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#headSet(java.lang.Object, boolean)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey, optionally including toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#last()">last</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#subSet(java.lang.Object, java.lang.Object)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements range
+ from fromKey, inclusive, to toKey, exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#tailSet(java.lang.Object)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html#tailSet(java.lang.Object, boolean)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey, optionally including fromKey.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredKeySet"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#add(java.lang.Object)">add</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html#remove(java.lang.Object)">remove</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredSortedKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredSortedKeySet</H3>
+<PRE>
+public <B>StoredSortedKeySet</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredSortedKeySet</H3>
+<PRE>
+public <B>StoredSortedKeySet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted key set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A> <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns null since comparators are not supported. The natural ordering
+ of a stored collection is data byte order, whether the data classes
+ implement the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html"><CODE>Comparable</CODE></A> interface or not.
+ This method does not conform to the <CODE>SortedSet.comparator()</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>comparator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="first()"><!-- --></A><H3>
+first</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>first</B>()</PRE>
+<DL>
+<DD>Returns the first (lowest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.first()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>first</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="last()"><!-- --></A><H3>
+last</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>last</B>()</PRE>
+<DL>
+<DD>Returns the last (highest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.last()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>last</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey.
+ This method conforms to the <CODE>SortedSet.headSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>headSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object, boolean)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey, optionally including toKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toKey.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromKey.
+ This method conforms to the <CODE>SortedSet.tailSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>tailSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object, boolean)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey, optionally including fromKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromKey.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromKey, inclusive, to toKey, exclusive.
+ This method conforms to the <CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>subSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>toKey</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromKey.<DD><CODE>toKey</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toKey.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedKeySet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredSortedMap.html b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedMap.html
new file mode 100644
index 000000000..282a377e6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedMap.html
@@ -0,0 +1,652 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredSortedMap,StoredSortedMap class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredSortedMap</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">com.sleepycat.bdb.collection.StoredMap</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredSortedMap</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredSortedMap</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></DL>
+
+<P>
+A SortedMap view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+
+ <p>In addition to the standard SortedMap methods, this class provides the
+ following methods for stored sorted maps only. Note that the use of these
+ methods is not compatible with the standard Java collections interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#duplicates(java.lang.Object)"><CODE>StoredMap.duplicates(Object)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#headMap(java.lang.Object, boolean)"><CODE>headMap(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#tailMap(java.lang.Object, boolean)"><CODE>tailMap(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><CODE>subMap(Object, boolean, Object, boolean)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns null since comparators are not supported.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#firstKey()">firstKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) key currently in this sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#headMap(java.lang.Object)">headMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose keys are
+ strictly less than toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#headMap(java.lang.Object, boolean)">headMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted map whose elements are
+ strictly less than toKey, optionally including toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#lastKey()">lastKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) element currently in this sorted map.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)">subMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#subMap(java.lang.Object, java.lang.Object)">subMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted map whose elements range
+ from fromKey, inclusive, to toKey, exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#tailMap(java.lang.Object)">tailMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted map whose elements are
+ greater than or equal to fromKey.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html#tailMap(java.lang.Object, boolean)">tailMap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey, optionally including fromKey.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredMap"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)">append</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#duplicates(java.lang.Object)">duplicates</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#entrySet()">entrySet</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#get(java.lang.Object)">get</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#keySet()">keySet</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#put(java.lang.Object, java.lang.Object)">put</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#putAll(java.util.Map)">putAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#toString()">toString</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Map"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#containsKey(java.lang.Object)">containsKey</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#containsValue(java.lang.Object)">containsValue</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()">entrySet</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get(java.lang.Object)">get</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#keySet()">keySet</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put(java.lang.Object, java.lang.Object)">put</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#putAll(java.util.Map)">putAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#remove(java.lang.Object)">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values()">values</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredSortedMap</H3>
+<PRE>
+public <B>StoredSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredSortedMap</H3>
+<PRE>
+public <B>StoredSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredSortedMap</H3>
+<PRE>
+public <B>StoredSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredSortedMap</H3>
+<PRE>
+public <B>StoredSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>keyBinding</CODE> - is the binding used to translate between key buffers
+ and key objects.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A> <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns null since comparators are not supported. The natural ordering
+ of a stored collection is data byte order, whether the data classes
+ implement the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html"><CODE>Comparable</CODE></A> interface or not.
+ This method does not conform to the <CODE>SortedMap.comparator()</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>comparator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="firstKey()"><!-- --></A><H3>
+firstKey</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>firstKey</B>()</PRE>
+<DL>
+<DD>Returns the first (lowest) key currently in this sorted map.
+ This method conforms to the <CODE>SortedMap.firstKey()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>firstKey</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first key.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lastKey()"><!-- --></A><H3>
+lastKey</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>lastKey</B>()</PRE>
+<DL>
+<DD>Returns the last (highest) element currently in this sorted map.
+ This method conforms to the <CODE>SortedMap.lastKey()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>lastKey</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last key.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headMap(java.lang.Object)"><!-- --></A><H3>
+headMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>headMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose keys are
+ strictly less than toKey.
+ This method conforms to the <CODE>SortedMap.headMap(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>headMap</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headMap(java.lang.Object, boolean)"><!-- --></A><H3>
+headMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>headMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly less than toKey, optionally including toKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"><CODE>SortedMap</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toKey</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toKey.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailMap(java.lang.Object)"><!-- --></A><H3>
+tailMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>tailMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ greater than or equal to fromKey.
+ This method conforms to the <CODE>SortedMap.tailMap(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>tailMap</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailMap(java.lang.Object, boolean)"><!-- --></A><H3>
+tailMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>tailMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey, optionally including fromKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"><CODE>SortedMap</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromKey.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subMap(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+subMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>subMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted map whose elements range
+ from fromKey, inclusive, to toKey, exclusive.
+ This method conforms to the <CODE>SortedMap.subMap(java.lang.Object, java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>subMap</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>toKey</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><!-- --></A><H3>
+subMap</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A> <B>subMap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromKey,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toKey,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html"><CODE>SortedMap</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromKey</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromKey.<DD><CODE>toKey</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toKey.
+<DT><B>Returns:</B><DD>the submap.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedMap.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredSortedValueSet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedValueSet.html
new file mode 100644
index 000000000..34a0b366b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredSortedValueSet.html
@@ -0,0 +1,628 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredSortedValueSet,StoredSortedValueSet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedValueSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredSortedValueSet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html">com.sleepycat.bdb.collection.StoredValueSet</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredSortedValueSet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredSortedValueSet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></DL>
+
+<P>
+The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.
+ Although this collection is a set it may contain duplicate values. Only if
+ an entity value binding is used are all elements guaranteed to be unique.
+
+ <p>In addition to the standard SortedSet methods, this class provides the
+ following methods for stored sorted value sets only. Note that the use of
+ these methods is not compatible with the standard Java collections
+ interface.</p>
+ <ul>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#headSet(java.lang.Object, boolean)"><CODE>headSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#tailSet(java.lang.Object, boolean)"><CODE>tailSet(Object, boolean)</CODE></A></li>
+ <li><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><CODE>subSet(Object, boolean, Object, boolean)</CODE></A></li>
+ </ul>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredSortedValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#comparator()">comparator</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns null since comparators are not supported.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#first()">first</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the first (lowest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#headSet(java.lang.Object)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#headSet(java.lang.Object, boolean)">headSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue, optionally including toValue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#last()">last</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the last (highest) element currently in this sorted set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue,
+ boolean&nbsp;toInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue and strictly less than toValue,
+ optionally including fromValue and toValue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#subSet(java.lang.Object, java.lang.Object)">subSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements range
+ from fromValue, inclusive, to toValue, exclusive.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#tailSet(java.lang.Object)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromValue.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html#tailSet(java.lang.Object, boolean)">tailSet</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ boolean&nbsp;fromInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue, optionally including fromValue.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredValueSet"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#add(java.lang.Object)">add</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#contains(java.lang.Object)">contains</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#remove(java.lang.Object)">remove</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#size()">size</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add(java.lang.Object)">add</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#contains(java.lang.Object)">contains</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#remove(java.lang.Object)">remove</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#size()">size</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredSortedValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredSortedValueSet</H3>
+<PRE>
+public <B>StoredSortedValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredSortedValueSet</H3>
+<PRE>
+public <B>StoredSortedValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredSortedValueSet</H3>
+<PRE>
+public <B>StoredSortedValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="comparator()"><!-- --></A><H3>
+comparator</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</A> <B>comparator</B>()</PRE>
+<DL>
+<DD>Returns null since comparators are not supported. The natural ordering
+ of a stored collection is data byte order, whether the data classes
+ implement the <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html"><CODE>Comparable</CODE></A> interface or not.
+ This method does not conform to the <CODE>SortedSet.comparator()</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>comparator</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>null.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="first()"><!-- --></A><H3>
+first</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>first</B>()</PRE>
+<DL>
+<DD>Returns the first (lowest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.first()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>first</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the first element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="last()"><!-- --></A><H3>
+last</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>last</B>()</PRE>
+<DL>
+<DD>Returns the last (highest) element currently in this sorted set.
+ This method conforms to the <CODE>SortedSet.last()</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>last</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the last element.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue.
+ This method conforms to the <CODE>SortedSet.headSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>headSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toValue</CODE> - the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="headSet(java.lang.Object, boolean)"><!-- --></A><H3>
+headSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>headSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue, optionally including toValue.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toValue</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toValue.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromValue.
+ This method conforms to the <CODE>SortedSet.tailSet(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>tailSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromValue</CODE> - is the lower bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="tailSet(java.lang.Object, boolean)"><!-- --></A><H3>
+tailSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>tailSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ boolean&nbsp;fromInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue, optionally including fromValue.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromValue</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromValue.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, java.lang.Object)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromValue, inclusive, to toValue, exclusive.
+ This method conforms to the <CODE>SortedSet.subSet(java.lang.Object, java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>subSet</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromValue</CODE> - is the lower bound.<DD><CODE>toValue</CODE> - is the upper bound.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><!-- --></A><H3>
+subSet</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A> <B>subSet</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;fromValue,
+ boolean&nbsp;fromInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;toValue,
+ boolean&nbsp;toInclusive)</PRE>
+<DL>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue and strictly less than toValue,
+ optionally including fromValue and toValue.
+ This method does not exist in the standard <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html"><CODE>SortedSet</CODE></A> interface.
+<P>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>fromValue</CODE> - is the lower bound.<DD><CODE>fromInclusive</CODE> - is true to include fromValue.<DD><CODE>toValue</CODE> - is the upper bound.<DD><CODE>toInclusive</CODE> - is true to include toValue.
+<DT><B>Returns:</B><DD>the subset.
+<DT><B>Throws:</B>
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredSortedValueSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/StoredValueSet.html b/db/docs/java/com/sleepycat/bdb/collection/StoredValueSet.html
new file mode 100644
index 000000000..135e54be7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/StoredValueSet.html
@@ -0,0 +1,478 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection.StoredValueSet,StoredValueSet class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredValueSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.collection</FONT>
+<BR>
+Class StoredValueSet</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">com.sleepycat.bdb.collection.StoredContainer</A>
+ |
+ +--<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">com.sleepycat.bdb.collection.StoredCollection</A>
+ |
+ +--<B>com.sleepycat.bdb.collection.StoredValueSet</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>StoredValueSet</B><DT>extends <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A><DT>implements <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></DL>
+
+<P>
+The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.
+ Although this collection is a set it may contain duplicate values. Only if
+ an entity value binding is used are all elements guaranteed to be unique.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)">StoredValueSet</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#add(java.lang.Object)">add</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;entity)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the specified entity to this set if it is not already present
+ (optional operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#contains(java.lang.Object)">contains</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if this set contains the specified element.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#remove(java.lang.Object)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes the specified value from this set if it is present (optional
+ operation).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Always throws UnsupportedOperationException.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredCollection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)">addAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)">equals</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator()">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray()">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])">toArray</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toList()">toList</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.bdb.collection.StoredContainer"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()">areDuplicatesAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()">areDuplicatesOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()">areKeysRenumbered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#clear()">clear</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()">isAutoCommit</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()">isDirtyReadAllowed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()">isDirtyReadEnabled</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()">isEmpty</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()">isIndexed</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()">isOrdered</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()">isTransactional</A>, <A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()">isWriteAllowed</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.util.Set"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from interface java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#addAll(java.util.Collection)">addAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#clear()">clear</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#containsAll(java.util.Collection)">containsAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#isEmpty()">isEmpty</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator()">iterator</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#removeAll(java.util.Collection)">removeAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#retainAll(java.util.Collection)">retainAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray()">toArray</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#toArray(java.lang.Object[])">toArray</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredValueSet</H3>
+<PRE>
+public <B>StoredValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredValueSet</H3>
+<PRE>
+public <B>StoredValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - is the DataStore underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><!-- --></A><H3>
+StoredValueSet</H3>
+<PRE>
+public <B>StoredValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;valueBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a value set view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueBinding</CODE> - is the binding used to translate between value
+ buffers and value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+<HR>
+
+<A NAME="StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><!-- --></A><H3>
+StoredValueSet</H3>
+<PRE>
+public <B>StoredValueSet</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="../../../../com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>&nbsp;valueEntityBinding,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a value set entity view of a <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<P>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - is the DataIndex underlying the new collection.<DD><CODE>valueEntityBinding</CODE> - is the binding used to translate between
+ key/value buffers and entity value objects.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if formats are not consistently
+ defined or a parameter is invalid.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="add(java.lang.Object)"><!-- --></A><H3>
+add</H3>
+<PRE>
+public boolean <B>add</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;entity)</PRE>
+<DL>
+<DD>Adds the specified entity to this set if it is not already present
+ (optional operation).
+ This method conforms to the <CODE>Set.add(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>add</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>entity</CODE> - is the entity to be added.
+<DT><B>Returns:</B><DD>true if the entity was added, that is the key-value pair
+ represented by the entity was not previously present in the collection.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only,
+ if the collection is indexed, or if an entity binding is not used.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="contains(java.lang.Object)"><!-- --></A><H3>
+contains</H3>
+<PRE>
+public boolean <B>contains</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Returns true if this set contains the specified element.
+ This method conforms to the <CODE>Set.contains(Object)</CODE>
+ interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>contains</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>value</CODE> - the value to check.
+<DT><B>Returns:</B><DD>whether the set contains the given value.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.Object)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public boolean <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value)</PRE>
+<DL>
+<DD>Removes the specified value from this set if it is present (optional
+ operation).
+ If an entity binding is used, the key-value pair represented by the
+ given entity is removed. If an entity binding is used, the first
+ occurance of a key-value pair with the given value is removed.
+ This method conforms to the <CODE>Set.remove(java.lang.Object)</CODE> interface.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>remove</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</A></CODE> - if the collection is read-only.
+<DD><CODE>RuntimeExceptionWrapper</CODE> - if a <A HREF="../../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A> is thrown.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><B>Description copied from class: <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></B></DD>
+<DD>Always throws UnsupportedOperationException. The size of a database
+ cannot be obtained reliably or inexpensively.
+ This method therefore violates the <CODE>Collection.size()</CODE> and <CODE>Map.size()</CODE> interfaces.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>size</CODE> in interface <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html#size()">size</A></CODE> in class <CODE><A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>always throws an exception.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/StoredValueSet.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/MapEntry.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/MapEntry.html
new file mode 100644
index 000000000..7961dd269
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/MapEntry.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.MapEntry (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.MapEntry (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/MapEntry.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapEntry.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.MapEntry</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.MapEntry
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/MapEntry.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="MapEntry.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollection.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollection.html
new file mode 100644
index 000000000..52e25dccb
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollection.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredCollection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollection.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredCollection</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html">StoredList</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A List view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> that return <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></CODE></FONT></TD>
+<TD><CODE><B>StoredIterator.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html#getCollection()">getCollection</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the collection associated with this iterator.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollection.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollections.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollections.html
new file mode 100644
index 000000000..572cc37bd
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredCollections.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredCollections (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollections.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollections.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredCollections</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.StoredCollections
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollections.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredCollections.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredContainer.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredContainer.html
new file mode 100644
index 000000000..d3e8a4284
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredContainer.html
@@ -0,0 +1,267 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredContainer (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredContainer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredContainer</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract base class for all stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html">StoredList</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A List view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A Map view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A SortedMap view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> with parameters of type <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A></B>(<A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredContainer.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredEntrySet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredEntrySet.html
new file mode 100644
index 000000000..321e3cf7a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredEntrySet.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredEntrySet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.entrySet().</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredIterator.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredIterator.html
new file mode 100644
index 000000000..7fe09b9b9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredIterator.html
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredIterator</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> that return <A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">iterator</A></B>(boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a read or read-write iterator over the elements in this
+ collection.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])">join</A></B>(<A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A></CODE></FONT></TD>
+<TD><CODE><B>StoredCollection.</B><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../../com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>[]&nbsp;indices,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns an iterator representing an equality join of the indices and
+ index key values specified.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredKeySet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredKeySet.html
new file mode 100644
index 000000000..db5e4109f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredKeySet.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredKeySet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredList.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredList.html
new file mode 100644
index 000000000..30b826a12
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredList.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredList (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredList.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredList</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.StoredList
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredList.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredList.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredMap.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredMap.html
new file mode 100644
index 000000000..300e145c6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredMap.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A SortedMap view of a <A HREF="../../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A> in <A HREF="../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given store that was obtained from this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given index that was obtained from this factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredMap.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedEntrySet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedEntrySet.html
new file mode 100644
index 000000000..9a0bb4ede
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedEntrySet.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredSortedEntrySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredSortedEntrySet</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.StoredSortedEntrySet
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedEntrySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedKeySet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedKeySet.html
new file mode 100644
index 000000000..4e18d43a0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedKeySet.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredSortedKeySet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredSortedKeySet</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.StoredSortedKeySet
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedKeySet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedMap.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedMap.html
new file mode 100644
index 000000000..f8421d518
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedMap.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredSortedMap (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredSortedMap</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A> in <A HREF="../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> that return <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given store that was obtained from this
+ factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given index that was obtained from this
+ factory.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedMap.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedValueSet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedValueSet.html
new file mode 100644
index 000000000..33d038a41
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredSortedValueSet.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredSortedValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredSortedValueSet</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.collection.StoredSortedValueSet
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredSortedValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredValueSet.html b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredValueSet.html
new file mode 100644
index 000000000..aa2d3c723
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/class-use/StoredValueSet.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.collection.StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.collection.StoredValueSet (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.collection.StoredValueSet</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A> in <A HREF="../../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/collection/StoredValueSet.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="StoredValueSet.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/package-frame.html b/db/docs/java/com/sleepycat/bdb/collection/package-frame.html
new file mode 100644
index 000000000..9d8c9eeb5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/package-frame.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.collection</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="MapEntry.html" TARGET="classFrame">MapEntry</A>
+<BR>
+<A HREF="StoredCollection.html" TARGET="classFrame">StoredCollection</A>
+<BR>
+<A HREF="StoredCollections.html" TARGET="classFrame">StoredCollections</A>
+<BR>
+<A HREF="StoredContainer.html" TARGET="classFrame">StoredContainer</A>
+<BR>
+<A HREF="StoredEntrySet.html" TARGET="classFrame">StoredEntrySet</A>
+<BR>
+<A HREF="StoredIterator.html" TARGET="classFrame">StoredIterator</A>
+<BR>
+<A HREF="StoredKeySet.html" TARGET="classFrame">StoredKeySet</A>
+<BR>
+<A HREF="StoredList.html" TARGET="classFrame">StoredList</A>
+<BR>
+<A HREF="StoredMap.html" TARGET="classFrame">StoredMap</A>
+<BR>
+<A HREF="StoredSortedEntrySet.html" TARGET="classFrame">StoredSortedEntrySet</A>
+<BR>
+<A HREF="StoredSortedKeySet.html" TARGET="classFrame">StoredSortedKeySet</A>
+<BR>
+<A HREF="StoredSortedMap.html" TARGET="classFrame">StoredSortedMap</A>
+<BR>
+<A HREF="StoredSortedValueSet.html" TARGET="classFrame">StoredSortedValueSet</A>
+<BR>
+<A HREF="StoredValueSet.html" TARGET="classFrame">StoredValueSet</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/package-summary.html b/db/docs/java/com/sleepycat/bdb/collection/package-summary.html
new file mode 100644
index 000000000..4b2b0d9e6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/package-summary.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.collection package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.collection
+</H2>
+Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="MapEntry.html">MapEntry</A></B></TD>
+<TD>A simple Map.Entry implementation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredCollection.html">StoredCollection</A></B></TD>
+<TD>A abstract base class for all stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredCollections.html">StoredCollections</A></B></TD>
+<TD>This class consists exclusively of static methods that operate on or return
+ stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredContainer.html">StoredContainer</A></B></TD>
+<TD>A abstract base class for all stored collections and maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredEntrySet.html">StoredEntrySet</A></B></TD>
+<TD>The Set returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredIterator.html">StoredIterator</A></B></TD>
+<TD>The Iterator returned by all stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredKeySet.html">StoredKeySet</A></B></TD>
+<TD>The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredList.html">StoredList</A></B></TD>
+<TD>A List view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredMap.html">StoredMap</A></B></TD>
+<TD>A Map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredSortedEntrySet.html">StoredSortedEntrySet</A></B></TD>
+<TD>The SortedSet returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredSortedKeySet.html">StoredSortedKeySet</A></B></TD>
+<TD>The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredSortedMap.html">StoredSortedMap</A></B></TD>
+<TD>A SortedMap view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredSortedValueSet.html">StoredSortedValueSet</A></B></TD>
+<TD>The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredValueSet.html">StoredValueSet</A></B></TD>
+<TD>The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.collection Description
+</H2>
+
+<P>
+<p>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/package-tree.html b/db/docs/java/com/sleepycat/bdb/collection/package-tree.html
new file mode 100644
index 000000000..608694580
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/package-tree.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.collection Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.collection Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.collection
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/MapEntry.html"><B>MapEntry</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollections.html"><B>StoredCollections</B></A><LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredContainer.html"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredCollection.html"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredEntrySet.html"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredKeySet.html"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredList.html"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredValueSet.html"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>)
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="../../../../com/sleepycat/bdb/collection/StoredIterator.html"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A>)
+</UL>
+</UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/collection/package-use.html b/db/docs/java/com/sleepycat/bdb/collection/package-use.html
new file mode 100644
index 000000000..844ab9633
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/collection/package-use.html
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.collection (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.collection</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> used by <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredCollection.html#com.sleepycat.bdb.collection"><B>StoredCollection</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract base class for all stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredContainer.html#com.sleepycat.bdb.collection"><B>StoredContainer</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A abstract base class for all stored collections and maps.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredEntrySet.html#com.sleepycat.bdb.collection"><B>StoredEntrySet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.entrySet().</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredIterator.html#com.sleepycat.bdb.collection"><B>StoredIterator</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Iterator returned by all stored collections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredKeySet.html#com.sleepycat.bdb.collection"><B>StoredKeySet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredMap.html#com.sleepycat.bdb.collection"><B>StoredMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A Map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredValueSet.html#com.sleepycat.bdb.collection"><B>StoredValueSet</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A> used by <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredMap.html#com.sleepycat.bdb.factory"><B>StoredMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A Map view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/collection/class-use/StoredSortedMap.html#com.sleepycat.bdb.factory"><B>StoredSortedMap</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A SortedMap view of a <A HREF="../../../../com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="../../../../com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/TupleSerialDbFactory.html b/db/docs/java/com/sleepycat/bdb/factory/TupleSerialDbFactory.html
new file mode 100644
index 000000000..ad968dbb9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/TupleSerialDbFactory.html
@@ -0,0 +1,483 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+TupleSerialDbFactory (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.factory.TupleSerialDbFactory,TupleSerialDbFactory class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TupleSerialDbFactory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialDbFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialDbFactory.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.factory</FONT>
+<BR>
+Class TupleSerialDbFactory</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.factory.TupleSerialDbFactory</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>TupleSerialDbFactory</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Creates stored collections having tuple keys and serialized entity values.
+ The entity classes must implement the java.io.Serializable and
+ MarshalledTupleKeyEntity interfaces. The key classes must either implement
+ the MarshalledTupleData interface or be one of the Java primitive type
+ classes.
+
+ <p> This factory object is used to create DataStore, DataIndex,
+ ForeignKeyIndex and Map objects. The underlying DataFormat,
+ DataBinding and KeyExtractor objects are created automatically. </p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#TupleSerialDbFactory(com.sleepycat.bdb.bind.serial.ClassCatalog)">TupleSerialDbFactory</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;catalog)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a tuple-serial factory for given environment and class catalog.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#getCatalog()">getCatalog</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the class catalog associated with this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)">newDataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)">newDataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)">newForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given index that was obtained from this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map for a given store that was obtained from this factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given index that was obtained from this
+ factory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)">newSortedMap</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a sorted map for a given store that was obtained from this
+ factory.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TupleSerialDbFactory(com.sleepycat.bdb.bind.serial.ClassCatalog)"><!-- --></A><H3>
+TupleSerialDbFactory</H3>
+<PRE>
+public <B>TupleSerialDbFactory</B>(<A HREF="../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>&nbsp;catalog)</PRE>
+<DL>
+<DD>Creates a tuple-serial factory for given environment and class catalog.
+<P>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getCatalog()"><!-- --></A><H3>
+getCatalog</H3>
+<PRE>
+public final <A HREF="../../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A> <B>getCatalog</B>()</PRE>
+<DL>
+<DD>Returns the class catalog associated with this factory.
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)"><!-- --></A><H3>
+newDataStore</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A> <B>newDataStore</B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</PRE>
+<DL>
+<DD>Creates a store from a previously opened Db object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>baseClass</CODE> - the base class of the entity values for this store.
+ It must implement the <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interface.<DD><CODE>keyAssigner</CODE> - an object for assigning keys or null if no automatic
+ key assignment is used.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)"><!-- --></A><H3>
+newDataIndex</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A> <B>newDataIndex</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</PRE>
+<DL>
+<DD>Creates an index from a previously opened Db object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>store</CODE> - the store to be indexed and also specifies the
+ environment that was used to create the Db object.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)</CODE></A> method to identify the index
+ key.<DD><CODE>usePrimaryKey</CODE> - is true if the primary key data is used to
+ construct the index key.<DD><CODE>useValue</CODE> - is true if the value data is used to construct the index
+ key.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if a format mismatch is detected
+ between the index and the store, or if unsorted duplicates were
+ specified for the index Db.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)"><!-- --></A><H3>
+newForeignKeyIndex</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A> <B>newForeignKeyIndex</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</PRE>
+<DL>
+<DD>Creates a foreign key index from a previously opened Db object.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - the store to be indexed and also specifies the
+ environment that was used to create the Db object.<DD><CODE>db</CODE> - the previously opened Db object.<DD><CODE>keyName</CODE> - is the key name passed to the <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><CODE>MarshalledTupleKeyEntity.marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)</CODE></A> method to identify the index
+ key.<DD><CODE>usePrimaryKey</CODE> - is true if the primary key data is used to
+ construct the index key.<DD><CODE>useValue</CODE> - is true if the value data is used to construct the index
+ key.<DD><CODE>foreignStore</CODE> - is the store in which the index key for this store
+ is a primary key.<DD><CODE>deleteAction</CODE> - determines what action occurs when the foreign key
+ is deleted. It must be one of the
+ <A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html"><CODE>ForeignKeyIndex</CODE></A> ON_DELETE_
+ constants.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if a format mismatch is detected
+ between the index and the store, or if unsorted duplicates were
+ specified for the index Db.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)"><!-- --></A><H3>
+newMap</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A> <B>newMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map for a given store that was obtained from this factory.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - a store obtained from this factory.<DD><CODE>keyClass</CODE> - is the class used for map keys. It must implement the
+ <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface or be one of the Java primitive
+ type classes.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)"><!-- --></A><H3>
+newMap</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A> <B>newMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a map for a given index that was obtained from this factory.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - a index obtained from this factory.<DD><CODE>keyClass</CODE> - is the class used for map keys. It must implement the
+ <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface or be one of the Java primitive
+ type classes.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newSortedMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)"><!-- --></A><H3>
+newSortedMap</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A> <B>newSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map for a given store that was obtained from this
+ factory.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>store</CODE> - a store obtained from this factory.<DD><CODE>keyClass</CODE> - is the class used for map keys. It must implement the
+ <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface or be one of the Java primitive
+ type classes.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="newSortedMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)"><!-- --></A><H3>
+newSortedMap</H3>
+<PRE>
+public <A HREF="../../../../com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A> <B>newSortedMap</B>(<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A>&nbsp;index,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;keyClass,
+ boolean&nbsp;writeAllowed)</PRE>
+<DL>
+<DD>Creates a sorted map for a given index that was obtained from this
+ factory.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>index</CODE> - an index obtained from this factory.<DD><CODE>keyClass</CODE> - is the class used for map keys. It must implement the
+ <A HREF="../../../../com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> interface or be one of the Java primitive
+ type classes.<DD><CODE>writeAllowed</CODE> - is true to create a read-write collection or false
+ to create a read-only collection.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TupleSerialDbFactory.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialDbFactory.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/class-use/TupleSerialDbFactory.html b/db/docs/java/com/sleepycat/bdb/factory/class-use/TupleSerialDbFactory.html
new file mode 100644
index 000000000..a7b113c33
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/class-use/TupleSerialDbFactory.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.factory.TupleSerialDbFactory (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.factory.TupleSerialDbFactory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialDbFactory.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.factory.TupleSerialDbFactory</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.factory.TupleSerialDbFactory
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TupleSerialDbFactory.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/package-frame.html b/db/docs/java/com/sleepycat/bdb/factory/package-frame.html
new file mode 100644
index 000000000..cfd2aba8c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/package-frame.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.factory package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.factory</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="TupleSerialDbFactory.html" TARGET="classFrame">TupleSerialDbFactory</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/package-summary.html b/db/docs/java/com/sleepycat/bdb/factory/package-summary.html
new file mode 100644
index 000000000..fde7d2084
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/package-summary.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.factory package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.factory
+</H2>
+Factory classes
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TupleSerialDbFactory.html">TupleSerialDbFactory</A></B></TD>
+<TD>Creates stored collections having tuple keys and serialized entity values.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.factory Description
+</H2>
+
+<P>
+<p>Factory classes
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/package-tree.html b/db/docs/java/com/sleepycat/bdb/factory/package-tree.html
new file mode 100644
index 000000000..9f0b0bab6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/package-tree.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.factory Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.factory Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.factory
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.factory.<A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html"><B>TupleSerialDbFactory</B></A></UL>
+</UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/collection/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/factory/package-use.html b/db/docs/java/com/sleepycat/bdb/factory/package-use.html
new file mode 100644
index 000000000..5069165ea
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/factory/package-use.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.factory (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.factory</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.factory
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/package-frame.html b/db/docs/java/com/sleepycat/bdb/package-frame.html
new file mode 100644
index 000000000..0f34cd054
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/package-frame.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../com/sleepycat/bdb/package-summary.html" TARGET="classFrame">com.sleepycat.bdb</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="PrimaryKeyAssigner.html" TARGET="classFrame"><I>PrimaryKeyAssigner</I></A>
+<BR>
+<A HREF="TransactionWorker.html" TARGET="classFrame"><I>TransactionWorker</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="CurrentTransaction.html" TARGET="classFrame">CurrentTransaction</A>
+<BR>
+<A HREF="DataCursor.html" TARGET="classFrame">DataCursor</A>
+<BR>
+<A HREF="DataDb.html" TARGET="classFrame">DataDb</A>
+<BR>
+<A HREF="DataIndex.html" TARGET="classFrame">DataIndex</A>
+<BR>
+<A HREF="DataStore.html" TARGET="classFrame">DataStore</A>
+<BR>
+<A HREF="DataThang.html" TARGET="classFrame">DataThang</A>
+<BR>
+<A HREF="DataView.html" TARGET="classFrame">DataView</A>
+<BR>
+<A HREF="ForeignKeyIndex.html" TARGET="classFrame">ForeignKeyIndex</A>
+<BR>
+<A HREF="RecordNumberBinding.html" TARGET="classFrame">RecordNumberBinding</A>
+<BR>
+<A HREF="RecordNumberFormat.html" TARGET="classFrame">RecordNumberFormat</A>
+<BR>
+<A HREF="StoredClassCatalog.html" TARGET="classFrame">StoredClassCatalog</A>
+<BR>
+<A HREF="TransactionRunner.html" TARGET="classFrame">TransactionRunner</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Exceptions</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="IntegrityConstraintException.html" TARGET="classFrame">IntegrityConstraintException</A>
+<BR>
+<A HREF="KeyRangeException.html" TARGET="classFrame">KeyRangeException</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/package-summary.html b/db/docs/java/com/sleepycat/bdb/package-summary.html
new file mode 100644
index 000000000..2313b9f9d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/package-summary.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb
+</H2>
+Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="PrimaryKeyAssigner.html"><I>PrimaryKeyAssigner</I></A></B></TD>
+<TD>An interface implemented to assign new primary key values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TransactionWorker.html"><I>TransactionWorker</I></A></B></TD>
+<TD>The interface implemented to perform the work within a transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="CurrentTransaction.html">CurrentTransaction</A></B></TD>
+<TD>Provides access to the current transaction for the current thread within the
+ context of a Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataCursor.html">DataCursor</A></B></TD>
+<TD>(<em>internal</em>) Represents a Berkeley DB cursor and adds support for
+ indices, bindings and key ranges.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataDb.html">DataDb</A></B></TD>
+<TD>(<em>internal</em>) Wraps a Berkeley DB database (Db) object and adds
+ normalization of certain flags and environment modes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataIndex.html">DataIndex</A></B></TD>
+<TD>Represents a Berkeley DB secondary index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataStore.html">DataStore</A></B></TD>
+<TD>Represents a Berkeley DB database in the role of a primary data store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataThang.html">DataThang</A></B></TD>
+<TD>(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DataView.html">DataView</A></B></TD>
+<TD>(<em>internal</em>) Represents a Berkeley DB database and adds support
+ for indices, bindings and key ranges.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ForeignKeyIndex.html">ForeignKeyIndex</A></B></TD>
+<TD>Represents a Berkeley DB secondary index where the index key is the primary
+ key of another data store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="RecordNumberBinding.html">RecordNumberBinding</A></B></TD>
+<TD>A concrete binding for record number keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="RecordNumberFormat.html">RecordNumberFormat</A></B></TD>
+<TD>The data format for record number keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="StoredClassCatalog.html">StoredClassCatalog</A></B></TD>
+<TD>Java serialization catalog used for compact storage of database objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TransactionRunner.html">TransactionRunner</A></B></TD>
+<TD>Starts a transaction, calls <A HREF="../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
+ transaction retry and exceptions.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="IntegrityConstraintException.html">IntegrityConstraintException</A></B></TD>
+<TD>Thrown when an integrity constraint violation occurs.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="KeyRangeException.html">KeyRangeException</A></B></TD>
+<TD>(<em>internal</em>) An exception thrown when a key is out of range.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb Description
+</H2>
+
+<P>
+<p>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV PACKAGE&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/package-tree.html b/db/docs/java/com/sleepycat/bdb/package-tree.html
new file mode 100644
index 000000000..e76f622d5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/package-tree.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/CurrentTransaction.html"><B>CurrentTransaction</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataCursor.html"><B>DataCursor</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataDb.html"><B>DataDb</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataIndex.html"><B>DataIndex</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/ForeignKeyIndex.html"><B>ForeignKeyIndex</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataStore.html"><B>DataStore</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataView.html"><B>DataView</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>)
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Dbt.html"><B>Dbt</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/DataThang.html"><B>DataThang</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/RecordNumberBinding.html"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/RecordNumberFormat.html"><B>RecordNumberFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/StoredClassCatalog.html"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bdb.bind.serial.<A HREF="../../../com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>)
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A>)
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html"><B>Exception</B></A><UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html"><B>IllegalArgumentException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/KeyRangeException.html"><B>KeyRangeException</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/IntegrityConstraintException.html"><B>IntegrityConstraintException</B></A></UL>
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/TransactionRunner.html"><B>TransactionRunner</B></A></UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/PrimaryKeyAssigner.html"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">interface com.sleepycat.bdb.<A HREF="../../../com/sleepycat/bdb/TransactionWorker.html"><B>TransactionWorker</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/bdb/bind/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/package-use.html b/db/docs/java/com/sleepycat/bdb/package-use.html
new file mode 100644
index 000000000..0ca7a635d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/package-use.html
@@ -0,0 +1,281 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.collection"><B>com.sleepycat.bdb.collection</B></A></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../../../../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> used by <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/CurrentTransaction.html#com.sleepycat.bdb"><B>CurrentTransaction</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provides access to the current transaction for the current thread within the
+ context of a Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataCursor.html#com.sleepycat.bdb"><B>DataCursor</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) Represents a Berkeley DB cursor and adds support for
+ indices, bindings and key ranges.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataDb.html#com.sleepycat.bdb"><B>DataDb</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) Wraps a Berkeley DB database (Db) object and adds
+ normalization of certain flags and environment modes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataIndex.html#com.sleepycat.bdb"><B>DataIndex</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB secondary index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataStore.html#com.sleepycat.bdb"><B>DataStore</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB database in the role of a primary data store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataThang.html#com.sleepycat.bdb"><B>DataThang</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="../../../com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataView.html#com.sleepycat.bdb"><B>DataView</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) Represents a Berkeley DB database and adds support
+ for indices, bindings and key ranges.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/KeyRangeException.html#com.sleepycat.bdb"><B>KeyRangeException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) An exception thrown when a key is out of range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html#com.sleepycat.bdb"><B>PrimaryKeyAssigner</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface implemented to assign new primary key values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/RecordNumberFormat.html#com.sleepycat.bdb"><B>RecordNumberFormat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The data format for record number keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/TransactionWorker.html#com.sleepycat.bdb"><B>TransactionWorker</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The interface implemented to perform the work within a transaction.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.collection"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> used by <A HREF="../../../com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataIndex.html#com.sleepycat.bdb.collection"><B>DataIndex</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB secondary index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataStore.html#com.sleepycat.bdb.collection"><B>DataStore</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB database in the role of a primary data store.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> used by <A HREF="../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataIndex.html#com.sleepycat.bdb.factory"><B>DataIndex</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB secondary index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/DataStore.html#com.sleepycat.bdb.factory"><B>DataStore</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB database in the role of a primary data store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/ForeignKeyIndex.html#com.sleepycat.bdb.factory"><B>ForeignKeyIndex</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Represents a Berkeley DB secondary index where the index key is the primary
+ key of another data store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/bdb/class-use/PrimaryKeyAssigner.html#com.sleepycat.bdb.factory"><B>PrimaryKeyAssigner</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface implemented to assign new primary key values.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/ExceptionUnwrapper.html b/db/docs/java/com/sleepycat/bdb/util/ExceptionUnwrapper.html
new file mode 100644
index 000000000..fbceb578a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/ExceptionUnwrapper.html
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.ExceptionUnwrapper,ExceptionUnwrapper class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ExceptionUnwrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionUnwrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class ExceptionUnwrapper</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.util.ExceptionUnwrapper</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ExceptionUnwrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Unwraps nested exceptions by calling the <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
+ <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html"><CODE>ExceptionWrapper</CODE></A> interface. Does not currently support the Java 1.4
+ <code>Throwable.getDetail()</code> method.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html#ExceptionUnwrapper()">ExceptionUnwrapper</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrap(java.lang.Exception)">unwrap</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unwraps an Exception and returns the underlying Exception, or throws an
+ Error if the underlying Throwable is an Error.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrapAny(java.lang.Throwable)">unwrapAny</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unwraps an Exception and returns the underlying Throwable.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ExceptionUnwrapper()"><!-- --></A><H3>
+ExceptionUnwrapper</H3>
+<PRE>
+public <B>ExceptionUnwrapper</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="unwrap(java.lang.Exception)"><!-- --></A><H3>
+unwrap</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A> <B>unwrap</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A>&nbsp;e)</PRE>
+<DL>
+<DD>Unwraps an Exception and returns the underlying Exception, or throws an
+ Error if the underlying Throwable is an Error.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>e</CODE> - is the Exception to unwrap.
+<DT><B>Returns:</B><DD>the underlying Exception.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Error.html">Error</A></CODE> - if the underlying Throwable is an Error.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - if the underlying Throwable is not an
+ Exception or an Error.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="unwrapAny(java.lang.Throwable)"><!-- --></A><H3>
+unwrapAny</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>unwrapAny</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</PRE>
+<DL>
+<DD>Unwraps an Exception and returns the underlying Throwable.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>e</CODE> - is the Exception to unwrap.
+<DT><B>Returns:</B><DD>the underlying Throwable.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ExceptionUnwrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionUnwrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/ExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/ExceptionWrapper.html
new file mode 100644
index 000000000..96aa4e2eb
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/ExceptionWrapper.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.ExceptionWrapper,ExceptionWrapper interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Interface ExceptionWrapper</H2>
+<DL>
+<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html">IOExceptionWrapper</A>, <A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public interface <B>ExceptionWrapper</B></DL>
+
+<P>
+Interface implemented by exceptions that can contain nested exceptions.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the nested exception or null if none is present.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDetail()"><!-- --></A><H3>
+getDetail</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>getDetail</B>()</PRE>
+<DL>
+<DD>Returns the nested exception or null if none is present.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/ExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/FastInputStream.html b/db/docs/java/com/sleepycat/bdb/util/FastInputStream.html
new file mode 100644
index 000000000..3d5b67e56
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/FastInputStream.html
@@ -0,0 +1,516 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.FastInputStream,FastInputStream class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FastInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastInputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class FastInputStream</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">java.io.InputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.util.FastInputStream</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>FastInputStream</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></DL>
+
+<P>
+A replacement for ByteArrayInputStream that does not synchronize every
+ byte read.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#FastInputStream(byte[])">FastInputStream</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an input stream.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#FastInputStream(byte[], int, int)">FastInputStream</A></B>(byte[]&nbsp;buffer,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an input stream.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#available()">available</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferBytes()">getBufferBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the underlying data being read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferLength()">getBufferLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the end of the buffer being read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#getBufferOffset()">getBufferOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the offset at which data is being read from the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#mark(int)">mark</A></B>(int&nbsp;pos)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#markSupported()">markSupported</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#read()">read</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#read(byte[])">read</A></B>(byte[]&nbsp;toBuf)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#read(byte[], int, int)">read</A></B>(byte[]&nbsp;toBuf,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#reset()">reset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html#skip(long)">skip</A></B>(long&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.InputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#close()">close</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="FastInputStream(byte[])"><!-- --></A><H3>
+FastInputStream</H3>
+<PRE>
+public <B>FastInputStream</B>(byte[]&nbsp;buffer)</PRE>
+<DL>
+<DD>Creates an input stream.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the data to read.</DL>
+<HR>
+
+<A NAME="FastInputStream(byte[], int, int)"><!-- --></A><H3>
+FastInputStream</H3>
+<PRE>
+public <B>FastInputStream</B>(byte[]&nbsp;buffer,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Creates an input stream.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the data to read.<DD><CODE>offset</CODE> - the byte offset at which to begin reading.<DD><CODE>length</CODE> - the number of bytes to read.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="available()"><!-- --></A><H3>
+available</H3>
+<PRE>
+public int <B>available</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#available()">available</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="markSupported()"><!-- --></A><H3>
+markSupported</H3>
+<PRE>
+public boolean <B>markSupported</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#markSupported()">markSupported</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="mark(int)"><!-- --></A><H3>
+mark</H3>
+<PRE>
+public void <B>mark</B>(int&nbsp;pos)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#mark(int)">mark</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reset()"><!-- --></A><H3>
+reset</H3>
+<PRE>
+public void <B>reset</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#reset()">reset</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="skip(long)"><!-- --></A><H3>
+skip</H3>
+<PRE>
+public long <B>skip</B>(long&nbsp;count)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#skip(long)">skip</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="read()"><!-- --></A><H3>
+read</H3>
+<PRE>
+public int <B>read</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#read()">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="read(byte[])"><!-- --></A><H3>
+read</H3>
+<PRE>
+public int <B>read</B>(byte[]&nbsp;toBuf)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#read(byte[])">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="read(byte[], int, int)"><!-- --></A><H3>
+read</H3>
+<PRE>
+public int <B>read</B>(byte[]&nbsp;toBuf,
+ int&nbsp;offset,
+ int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html#read(byte[], int, int)">read</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html">InputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferBytes()"><!-- --></A><H3>
+getBufferBytes</H3>
+<PRE>
+public byte[] <B>getBufferBytes</B>()</PRE>
+<DL>
+<DD>Returns the underlying data being read.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the underlying data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferOffset()"><!-- --></A><H3>
+getBufferOffset</H3>
+<PRE>
+public int <B>getBufferOffset</B>()</PRE>
+<DL>
+<DD>Returns the offset at which data is being read from the buffer.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the offset at which data is being read.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferLength()"><!-- --></A><H3>
+getBufferLength</H3>
+<PRE>
+public int <B>getBufferLength</B>()</PRE>
+<DL>
+<DD>Returns the end of the buffer being read.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the end of the buffer.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FastInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastInputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/FastOutputStream.html b/db/docs/java/com/sleepycat/bdb/util/FastOutputStream.html
new file mode 100644
index 000000000..465d578bc
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/FastOutputStream.html
@@ -0,0 +1,699 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.FastOutputStream,FastOutputStream class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FastOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastOutputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class FastOutputStream</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">java.io.OutputStream</A>
+ |
+ +--<B>com.sleepycat.bdb.util.FastOutputStream</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>FastOutputStream</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></DL>
+
+<P>
+A replacement for ByteArrayOutputStream that does not synchronize every
+ byte read.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_BUMP_SIZE">DEFAULT_BUMP_SIZE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_INIT_SIZE">DEFAULT_INIT_SIZE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream()">FastOutputStream</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an output stream with default sizes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(byte[])">FastOutputStream</A></B>(byte[]&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an output stream with a given initial buffer and a default
+ bump size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(byte[], int)">FastOutputStream</A></B>(byte[]&nbsp;buffer,
+ int&nbsp;bumpSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an output stream with a given initial buffer and a given
+ bump size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(int)">FastOutputStream</A></B>(int&nbsp;initialSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an output stream with a default bump size and a given initial
+ size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(int, int)">FastOutputStream</A></B>(int&nbsp;initialSize,
+ int&nbsp;bumpSize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an output stream with a given bump size and initial size.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#addSize(int)">addSize</A></B>(int&nbsp;sizeAdded)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Skip the given number of bytes in the buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferBytes()">getBufferBytes</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the buffer owned by this object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferLength()">getBufferLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the length used in the internal buffer, that is, the offset at
+ which data will be written next.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#getBufferOffset()">getBufferOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the offset of the internal buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#makeSpace(int)">makeSpace</A></B>(int&nbsp;sizeNeeded)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ensure that at least the given number of bytes are available in the
+ internal buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#reset()">reset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#size()">size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#toByteArray()">toByteArray</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#toByteArray(byte[], int)">toByteArray</A></B>(byte[]&nbsp;toBuf,
+ int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy the buffered data to the given array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#toString(java.lang.String)">toString</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;encoding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(byte[])">write</A></B>(byte[]&nbsp;fromBuf)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(byte[], int, int)">write</A></B>(byte[]&nbsp;fromBuf,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#write(int)">write</A></B>(int&nbsp;b)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html#writeTo(java.io.OutputStream)">writeTo</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;out)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.io.OutputStream"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#close()">close</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#flush()">flush</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DEFAULT_INIT_SIZE"><!-- --></A><H3>
+DEFAULT_INIT_SIZE</H3>
+<PRE>
+public static final int <B>DEFAULT_INIT_SIZE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.FastOutputStream.DEFAULT_INIT_SIZE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DEFAULT_BUMP_SIZE"><!-- --></A><H3>
+DEFAULT_BUMP_SIZE</H3>
+<PRE>
+public static final int <B>DEFAULT_BUMP_SIZE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.FastOutputStream.DEFAULT_BUMP_SIZE">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="FastOutputStream()"><!-- --></A><H3>
+FastOutputStream</H3>
+<PRE>
+public <B>FastOutputStream</B>()</PRE>
+<DL>
+<DD>Creates an output stream with default sizes.
+<P>
+</DL>
+<HR>
+
+<A NAME="FastOutputStream(int)"><!-- --></A><H3>
+FastOutputStream</H3>
+<PRE>
+public <B>FastOutputStream</B>(int&nbsp;initialSize)</PRE>
+<DL>
+<DD>Creates an output stream with a default bump size and a given initial
+ size.
+<P>
+<DT><B>Parameters:</B><DD><CODE>initialSize</CODE> - the initial size of the buffer.</DL>
+<HR>
+
+<A NAME="FastOutputStream(int, int)"><!-- --></A><H3>
+FastOutputStream</H3>
+<PRE>
+public <B>FastOutputStream</B>(int&nbsp;initialSize,
+ int&nbsp;bumpSize)</PRE>
+<DL>
+<DD>Creates an output stream with a given bump size and initial size.
+<P>
+<DT><B>Parameters:</B><DD><CODE>initialSize</CODE> - the initial size of the buffer.<DD><CODE>bumpSize</CODE> - the amount to increment the buffer.</DL>
+<HR>
+
+<A NAME="FastOutputStream(byte[])"><!-- --></A><H3>
+FastOutputStream</H3>
+<PRE>
+public <B>FastOutputStream</B>(byte[]&nbsp;buffer)</PRE>
+<DL>
+<DD>Creates an output stream with a given initial buffer and a default
+ bump size.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the initial buffer; will be owned by this object.</DL>
+<HR>
+
+<A NAME="FastOutputStream(byte[], int)"><!-- --></A><H3>
+FastOutputStream</H3>
+<PRE>
+public <B>FastOutputStream</B>(byte[]&nbsp;buffer,
+ int&nbsp;bumpSize)</PRE>
+<DL>
+<DD>Creates an output stream with a given initial buffer and a given
+ bump size.
+<P>
+<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the initial buffer; will be owned by this object.<DD><CODE>bumpSize</CODE> - the amount to increment the buffer.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reset()"><!-- --></A><H3>
+reset</H3>
+<PRE>
+public void <B>reset</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="write(int)"><!-- --></A><H3>
+write</H3>
+<PRE>
+public void <B>write</B>(int&nbsp;b)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#write(int)">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="write(byte[])"><!-- --></A><H3>
+write</H3>
+<PRE>
+public void <B>write</B>(byte[]&nbsp;fromBuf)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#write(byte[])">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="write(byte[], int, int)"><!-- --></A><H3>
+write</H3>
+<PRE>
+public void <B>write</B>(byte[]&nbsp;fromBuf,
+ int&nbsp;offset,
+ int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html#write(byte[], int, int)">write</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="writeTo(java.io.OutputStream)"><!-- --></A><H3>
+writeTo</H3>
+<PRE>
+public void <B>writeTo</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;out)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString(java.lang.String)"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;encoding)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UnsupportedEncodingException.html">UnsupportedEncodingException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UnsupportedEncodingException.html">UnsupportedEncodingException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toByteArray()"><!-- --></A><H3>
+toByteArray</H3>
+<PRE>
+public byte[] <B>toByteArray</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toByteArray(byte[], int)"><!-- --></A><H3>
+toByteArray</H3>
+<PRE>
+public void <B>toByteArray</B>(byte[]&nbsp;toBuf,
+ int&nbsp;offset)</PRE>
+<DL>
+<DD>Copy the buffered data to the given array.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>toBuf</CODE> - the buffer to hold a copy of the data.<DD><CODE>offset</CODE> - the offset at which to start copying.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferBytes()"><!-- --></A><H3>
+getBufferBytes</H3>
+<PRE>
+public byte[] <B>getBufferBytes</B>()</PRE>
+<DL>
+<DD>Returns the buffer owned by this object.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the buffer.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferOffset()"><!-- --></A><H3>
+getBufferOffset</H3>
+<PRE>
+public int <B>getBufferOffset</B>()</PRE>
+<DL>
+<DD>Returns the offset of the internal buffer.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>always zero currently.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBufferLength()"><!-- --></A><H3>
+getBufferLength</H3>
+<PRE>
+public int <B>getBufferLength</B>()</PRE>
+<DL>
+<DD>Returns the length used in the internal buffer, that is, the offset at
+ which data will be written next.
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the buffer length.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="makeSpace(int)"><!-- --></A><H3>
+makeSpace</H3>
+<PRE>
+public void <B>makeSpace</B>(int&nbsp;sizeNeeded)</PRE>
+<DL>
+<DD>Ensure that at least the given number of bytes are available in the
+ internal buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>sizeNeeded</CODE> - the number of bytes desired.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addSize(int)"><!-- --></A><H3>
+addSize</H3>
+<PRE>
+public void <B>addSize</B>(int&nbsp;sizeAdded)</PRE>
+<DL>
+<DD>Skip the given number of bytes in the buffer.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>sizeAdded</CODE> - number of bytes to skip.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/FastOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastOutputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/IOExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/IOExceptionWrapper.html
new file mode 100644
index 000000000..e9b8a1af0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/IOExceptionWrapper.html
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.IOExceptionWrapper,IOExceptionWrapper class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/IOExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IOExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class IOExceptionWrapper</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">java.io.IOException</A>
+ |
+ +--<B>com.sleepycat.bdb.util.IOExceptionWrapper</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>IOExceptionWrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A><DT>implements <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></DL>
+
+<P>
+An IOException that can contain nested exceptions.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html" TARGET="com.sleepycat.bdb.util.IOExceptionWrapper">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html#IOExceptionWrapper(java.lang.Throwable)">IOExceptionWrapper</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the nested exception or null if none is present.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="IOExceptionWrapper(java.lang.Throwable)"><!-- --></A><H3>
+IOExceptionWrapper</H3>
+<PRE>
+public <B>IOExceptionWrapper</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDetail()"><!-- --></A><H3>
+getDetail</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>getDetail</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></CODE></B></DD>
+<DD>Returns the nested exception or null if none is present.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()">getDetail</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/IOExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IOExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html
new file mode 100644
index 000000000..1eb5a0e78
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.RuntimeExceptionWrapper,RuntimeExceptionWrapper class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RuntimeExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RuntimeExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class RuntimeExceptionWrapper</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html">java.lang.RuntimeException</A>
+ |
+ +--<B>com.sleepycat.bdb.util.RuntimeExceptionWrapper</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>RuntimeExceptionWrapper</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html">RuntimeException</A><DT>implements <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></DL>
+
+<P>
+A RuntimeException that can contain nested exceptions.
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../serialized-form.html" TARGET="com.sleepycat.bdb.util.RuntimeExceptionWrapper">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html#RuntimeExceptionWrapper(java.lang.Throwable)">RuntimeExceptionWrapper</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html#getDetail()">getDetail</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the nested exception or null if none is present.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="RuntimeExceptionWrapper(java.lang.Throwable)"><!-- --></A><H3>
+RuntimeExceptionWrapper</H3>
+<PRE>
+public <B>RuntimeExceptionWrapper</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A>&nbsp;e)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDetail()"><!-- --></A><H3>
+getDetail</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>getDetail</B>()</PRE>
+<DL>
+<DD><B>Description copied from interface: <CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></CODE></B></DD>
+<DD>Returns the nested exception or null if none is present.
+<P>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()">getDetail</A></CODE> in interface <CODE><A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the nested exception or null if none is present.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/RuntimeExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RuntimeExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/TimeUnits.html b/db/docs/java/com/sleepycat/bdb/util/TimeUnits.html
new file mode 100644
index 000000000..188ae0d49
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/TimeUnits.html
@@ -0,0 +1,327 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:08 EST 2003 -->
+<TITLE>
+TimeUnits (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.TimeUnits,TimeUnits class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="TimeUnits (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TimeUnits.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TimeUnits.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class TimeUnits</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.util.TimeUnits</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>TimeUnits</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+Common time unit definitions.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#ONE_DAY">ONE_DAY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One day in milliseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#ONE_HOUR">ONE_HOUR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One hour in milliseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#ONE_MINUTE">ONE_MINUTE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One minute in milliseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#ONE_SECOND">ONE_SECOND</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One second in milliseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#ONE_WEEK">ONE_WEEK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;One week in milliseconds.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html#TimeUnits()">TimeUnits</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ONE_SECOND"><!-- --></A><H3>
+ONE_SECOND</H3>
+<PRE>
+public static final int <B>ONE_SECOND</B></PRE>
+<DL>
+<DD>One second in milliseconds.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.TimeUnits.ONE_SECOND">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ONE_MINUTE"><!-- --></A><H3>
+ONE_MINUTE</H3>
+<PRE>
+public static final int <B>ONE_MINUTE</B></PRE>
+<DL>
+<DD>One minute in milliseconds.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.TimeUnits.ONE_MINUTE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ONE_HOUR"><!-- --></A><H3>
+ONE_HOUR</H3>
+<PRE>
+public static final int <B>ONE_HOUR</B></PRE>
+<DL>
+<DD>One hour in milliseconds.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.TimeUnits.ONE_HOUR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ONE_DAY"><!-- --></A><H3>
+ONE_DAY</H3>
+<PRE>
+public static final long <B>ONE_DAY</B></PRE>
+<DL>
+<DD>One day in milliseconds.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.TimeUnits.ONE_DAY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ONE_WEEK"><!-- --></A><H3>
+ONE_WEEK</H3>
+<PRE>
+public static final long <B>ONE_WEEK</B></PRE>
+<DL>
+<DD>One week in milliseconds.
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.sleepycat.bdb.util.TimeUnits.ONE_WEEK">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TimeUnits()"><!-- --></A><H3>
+TimeUnits</H3>
+<PRE>
+public <B>TimeUnits</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TimeUnits.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TimeUnits.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/UtfOps.html b/db/docs/java/com/sleepycat/bdb/util/UtfOps.html
new file mode 100644
index 000000000..bd98a3000
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/UtfOps.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util.UtfOps,UtfOps class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/UtfOps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UtfOps.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.bdb.util</FONT>
+<BR>
+Class UtfOps</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.bdb.util.UtfOps</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>UtfOps</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+UTF operations with more flexibility than is provided by DataInput and
+ DataOutput.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#UtfOps()">UtfOps</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#bytesToChars(byte[], int, char[], int, int, boolean)">bytesToChars</A></B>(byte[]&nbsp;bytes,
+ int&nbsp;byteOffset,
+ char[]&nbsp;chars,
+ int&nbsp;charOffset,
+ int&nbsp;len,
+ boolean&nbsp;isByteLen)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts byte arrays into character arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#bytesToString(byte[], int, int)">bytesToString</A></B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts byte arrays into strings.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#charsToBytes(char[], int, byte[], int, int)">charsToBytes</A></B>(char[]&nbsp;chars,
+ int&nbsp;charOffset,
+ byte[]&nbsp;bytes,
+ int&nbsp;byteOffset,
+ int&nbsp;charLength)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts character arrays into byte arrays.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#getByteLength(char[])">getByteLength</A></B>(char[]&nbsp;chars)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#getByteLength(char[], int, int)">getByteLength</A></B>(char[]&nbsp;chars,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#getCharLength(byte[])">getCharLength</A></B>(byte[]&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of characters represented by the given UTF string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#getCharLength(byte[], int, int)">getCharLength</A></B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the number of characters represented by the given UTF string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#getZeroTerminatedByteLength(byte[], int)">getZeroTerminatedByteLength</A></B>(byte[]&nbsp;bytes,
+ int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the byte length of a null terminated UTF string, not including
+ the terminator.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html#stringToBytes(java.lang.String)">stringToBytes</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;string)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts strings to byte arrays.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="UtfOps()"><!-- --></A><H3>
+UtfOps</H3>
+<PRE>
+public <B>UtfOps</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getZeroTerminatedByteLength(byte[], int)"><!-- --></A><H3>
+getZeroTerminatedByteLength</H3>
+<PRE>
+public static int <B>getZeroTerminatedByteLength</B>(byte[]&nbsp;bytes,
+ int&nbsp;offset)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></PRE>
+<DL>
+<DD>Returns the byte length of a null terminated UTF string, not including
+ the terminator.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the data containing the UTF string.<DD><CODE>offset</CODE> - the beginning of the string the measure.
+<DT><B>Returns:</B><DD>the number of bytes.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getByteLength(char[])"><!-- --></A><H3>
+getByteLength</H3>
+<PRE>
+public static int <B>getByteLength</B>(char[]&nbsp;chars)</PRE>
+<DL>
+<DD>Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - the characters that would be converted.
+<DT><B>Returns:</B><DD>the byte length of the equivalent UTF data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getByteLength(char[], int, int)"><!-- --></A><H3>
+getByteLength</H3>
+<PRE>
+public static int <B>getByteLength</B>(char[]&nbsp;chars,
+ int&nbsp;offset,
+ int&nbsp;length)</PRE>
+<DL>
+<DD>Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - the characters that would be converted.<DD><CODE>offset</CODE> - the first character to be converted.<DD><CODE>length</CODE> - the number of characters to be converted.
+<DT><B>Returns:</B><DD>the byte length of the equivalent UTF data.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCharLength(byte[])"><!-- --></A><H3>
+getCharLength</H3>
+<PRE>
+public static int <B>getCharLength</B>(byte[]&nbsp;bytes)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></PRE>
+<DL>
+<DD>Returns the number of characters represented by the given UTF string.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the UTF string.
+<DT><B>Returns:</B><DD>the number of characters.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></CODE> - if a UTF character sequence at the end of the data
+ is not complete.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A></CODE> - if an illegal UTF sequence is
+ encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCharLength(byte[], int, int)"><!-- --></A><H3>
+getCharLength</H3>
+<PRE>
+public static int <B>getCharLength</B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></PRE>
+<DL>
+<DD>Returns the number of characters represented by the given UTF string.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the data containing the UTF string.<DD><CODE>offset</CODE> - the first byte to be converted.<DD><CODE>length</CODE> - the number of byte to be converted.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></CODE> - if a UTF character sequence at the end of the data
+ is not complete.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A></CODE> - if an illegal UTF sequence is
+ encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="bytesToChars(byte[], int, char[], int, int, boolean)"><!-- --></A><H3>
+bytesToChars</H3>
+<PRE>
+public static int <B>bytesToChars</B>(byte[]&nbsp;bytes,
+ int&nbsp;byteOffset,
+ char[]&nbsp;chars,
+ int&nbsp;charOffset,
+ int&nbsp;len,
+ boolean&nbsp;isByteLen)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></PRE>
+<DL>
+<DD>Converts byte arrays into character arrays.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the source byte data to convert<DD><CODE>byteOffset</CODE> - the offset into the byte array at which
+ to start the conversion<DD><CODE>chars</CODE> - the destination array<DD><CODE>charOffset</CODE> - the offset into chars at which to begin the copy<DD><CODE>len</CODE> - the amount of information to copy into chars<DD><CODE>isByteLen</CODE> - if true then len is a measure of bytes, otherwise
+ len is a measure of characters
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></CODE> - if a UTF character sequence at the end of the data
+ is not complete.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A></CODE> - if an illegal UTF sequence is
+ encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="charsToBytes(char[], int, byte[], int, int)"><!-- --></A><H3>
+charsToBytes</H3>
+<PRE>
+public static void <B>charsToBytes</B>(char[]&nbsp;chars,
+ int&nbsp;charOffset,
+ byte[]&nbsp;bytes,
+ int&nbsp;byteOffset,
+ int&nbsp;charLength)</PRE>
+<DL>
+<DD>Converts character arrays into byte arrays.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chars</CODE> - the source character data to convert<DD><CODE>charOffset</CODE> - the offset into the character array at which
+ to start the conversion<DD><CODE>bytes</CODE> - the destination array<DD><CODE>byteOffset</CODE> - the offset into bytes at which to begin the copy<DD><CODE>charLength</CODE> - the length of characters to copy into bytes</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="bytesToString(byte[], int, int)"><!-- --></A><H3>
+bytesToString</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>bytesToString</B>(byte[]&nbsp;bytes,
+ int&nbsp;offset,
+ int&nbsp;length)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></PRE>
+<DL>
+<DD>Converts byte arrays into strings.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - the source byte data to convert<DD><CODE>offset</CODE> - the offset into the byte array at which
+ to start the conversion<DD><CODE>length</CODE> - the number of bytes to be converted.
+<DT><B>Returns:</B><DD>the string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/EOFException.html">EOFException</A></CODE> - if a UTF character sequence at the end of the data
+ is not complete.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/UTFDataFormatException.html">UTFDataFormatException</A></CODE> - if an illegal UTF sequence is
+ encountered.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="stringToBytes(java.lang.String)"><!-- --></A><H3>
+stringToBytes</H3>
+<PRE>
+public static byte[] <B>stringToBytes</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;string)</PRE>
+<DL>
+<DD>Converts strings to byte arrays.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>string</CODE> - the string to convert.
+<DT><B>Returns:</B><DD>the UTF byte array.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/UtfOps.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UtfOps.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionUnwrapper.html b/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionUnwrapper.html
new file mode 100644
index 000000000..988e66730
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionUnwrapper.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.ExceptionUnwrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionUnwrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.ExceptionUnwrapper</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.util.ExceptionUnwrapper
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionUnwrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionWrapper.html
new file mode 100644
index 000000000..d0f659e72
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/ExceptionWrapper.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.bdb.util.ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.bdb.util.ExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.bdb.util.ExceptionWrapper</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.util"><B>com.sleepycat.bdb.util</B></A></TD>
+<TD>General utilities used throughout DB<br>
+<a href="../../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.util"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A> in <A HREF="../../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Classes in <A HREF="../../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A> that implement <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html">IOExceptionWrapper</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An IOException that can contain nested exceptions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A RuntimeException that can contain nested exceptions.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/ExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/FastInputStream.html b/db/docs/java/com/sleepycat/bdb/util/class-use/FastInputStream.html
new file mode 100644
index 000000000..72c8bc880
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/FastInputStream.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.FastInputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastInputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.FastInputStream</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to read tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/FastInputStream.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastInputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/FastOutputStream.html b/db/docs/java/com/sleepycat/bdb/util/class-use/FastOutputStream.html
new file mode 100644
index 000000000..b7ae264f1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/FastOutputStream.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.FastOutputStream (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastOutputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.FastOutputStream</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A> in <A HREF="../../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used by tuple bindings to write tuple data.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/FastOutputStream.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="FastOutputStream.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/IOExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/class-use/IOExceptionWrapper.html
new file mode 100644
index 000000000..0607b7be1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/IOExceptionWrapper.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.IOExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IOExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.IOExceptionWrapper</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.util.IOExceptionWrapper
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="IOExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/RuntimeExceptionWrapper.html b/db/docs/java/com/sleepycat/bdb/util/class-use/RuntimeExceptionWrapper.html
new file mode 100644
index 000000000..a4fc2491d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/RuntimeExceptionWrapper.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.RuntimeExceptionWrapper (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RuntimeExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.RuntimeExceptionWrapper</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.util.RuntimeExceptionWrapper
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="RuntimeExceptionWrapper.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/TimeUnits.html b/db/docs/java/com/sleepycat/bdb/util/class-use/TimeUnits.html
new file mode 100644
index 000000000..abee051d2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/TimeUnits.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.TimeUnits (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.TimeUnits (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/TimeUnits.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TimeUnits.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.TimeUnits</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.util.TimeUnits
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/TimeUnits.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="TimeUnits.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/class-use/UtfOps.html b/db/docs/java/com/sleepycat/bdb/util/class-use/UtfOps.html
new file mode 100644
index 000000000..0c84e69ff
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/class-use/UtfOps.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.bdb.util.UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.bdb.util.UtfOps (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/UtfOps.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UtfOps.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.bdb.util.UtfOps</B></H2>
+</CENTER>
+No usage of com.sleepycat.bdb.util.UtfOps
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/sleepycat/bdb/util/UtfOps.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="UtfOps.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/package-frame.html b/db/docs/java/com/sleepycat/bdb/util/package-frame.html
new file mode 100644
index 000000000..635be3950
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/package-frame.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../com/sleepycat/bdb/util/package-summary.html" TARGET="classFrame">com.sleepycat.bdb.util</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ExceptionWrapper.html" TARGET="classFrame"><I>ExceptionWrapper</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ExceptionUnwrapper.html" TARGET="classFrame">ExceptionUnwrapper</A>
+<BR>
+<A HREF="FastInputStream.html" TARGET="classFrame">FastInputStream</A>
+<BR>
+<A HREF="FastOutputStream.html" TARGET="classFrame">FastOutputStream</A>
+<BR>
+<A HREF="TimeUnits.html" TARGET="classFrame">TimeUnits</A>
+<BR>
+<A HREF="UtfOps.html" TARGET="classFrame">UtfOps</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Exceptions</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="IOExceptionWrapper.html" TARGET="classFrame">IOExceptionWrapper</A>
+<BR>
+<A HREF="RuntimeExceptionWrapper.html" TARGET="classFrame">RuntimeExceptionWrapper</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/package-summary.html b/db/docs/java/com/sleepycat/bdb/util/package-summary.html
new file mode 100644
index 000000000..f77010703
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/package-summary.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.bdb.util package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/db/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.bdb.util
+</H2>
+General utilities used throughout DB<br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ExceptionWrapper.html"><I>ExceptionWrapper</I></A></B></TD>
+<TD>Interface implemented by exceptions that can contain nested exceptions.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="ExceptionUnwrapper.html">ExceptionUnwrapper</A></B></TD>
+<TD>Unwraps nested exceptions by calling the <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
+ <A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html"><CODE>ExceptionWrapper</CODE></A> interface.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="FastInputStream.html">FastInputStream</A></B></TD>
+<TD>A replacement for ByteArrayInputStream that does not synchronize every
+ byte read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="FastOutputStream.html">FastOutputStream</A></B></TD>
+<TD>A replacement for ByteArrayOutputStream that does not synchronize every
+ byte read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="TimeUnits.html">TimeUnits</A></B></TD>
+<TD>Common time unit definitions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="UtfOps.html">UtfOps</A></B></TD>
+<TD>UTF operations with more flexibility than is provided by DataInput and
+ DataOutput.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="IOExceptionWrapper.html">IOExceptionWrapper</A></B></TD>
+<TD>An IOException that can contain nested exceptions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A></B></TD>
+<TD>A RuntimeException that can contain nested exceptions.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.bdb.util Description
+</H2>
+
+<P>
+<p>General utilities used throughout DB<br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/db/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/package-tree.html b/db/docs/java/com/sleepycat/bdb/util/package-tree.html
new file mode 100644
index 000000000..4779ee652
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/package-tree.html
@@ -0,0 +1,154 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.bdb.util Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.bdb.util Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/db/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.bdb.util
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/ExceptionUnwrapper.html"><B>ExceptionUnwrapper</B></A><LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html"><B>InputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/FastInputStream.html"><B>FastInputStream</B></A></UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html"><B>OutputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/FastOutputStream.html"><B>FastOutputStream</B></A></UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A>)
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html"><B>Exception</B></A><UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html"><B>IOException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/IOExceptionWrapper.html"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>)
+</UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>)
+</UL>
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/TimeUnits.html"><B>TimeUnits</B></A><LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/UtfOps.html"><B>UtfOps</B></A></UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.util.<A HREF="../../../../com/sleepycat/bdb/util/ExceptionWrapper.html"><B>ExceptionWrapper</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../../com/sleepycat/bdb/factory/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;<A HREF="../../../../com/sleepycat/db/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/bdb/util/package-use.html b/db/docs/java/com/sleepycat/bdb/util/package-use.html
new file mode 100644
index 000000000..cc594df9b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/bdb/util/package-use.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.bdb.util (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.bdb.util</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.bind.tuple"><B>com.sleepycat.bdb.bind.tuple</B></A></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.util"><B>com.sleepycat.bdb.util</B></A></TD>
+<TD>General utilities used throughout DB<br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.bind.tuple"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A> used by <A HREF="../../../../com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/util/class-use/FastInputStream.html#com.sleepycat.bdb.bind.tuple"><B>FastInputStream</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A replacement for ByteArrayInputStream that does not synchronize every
+ byte read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/util/class-use/FastOutputStream.html#com.sleepycat.bdb.bind.tuple"><B>FastOutputStream</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A replacement for ByteArrayOutputStream that does not synchronize every
+ byte read.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.util"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A> used by <A HREF="../../../../com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../com/sleepycat/bdb/util/class-use/ExceptionWrapper.html#com.sleepycat.bdb.util"><B>ExceptionWrapper</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interface implemented by exceptions that can contain nested exceptions.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Db.html b/db/docs/java/com/sleepycat/db/Db.html
new file mode 100644
index 000000000..321c7322c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/Db.html
@@ -0,0 +1,7532 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+Db (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.Db,Db class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Db.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Db.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class Db</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.Db</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>Db</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.</p> <p> The handle should not be closed while any other handle that refers to the database is in use; for example, database handles must not be closed while cursor handles into the database remain open, or transactions that include operations on the database have not yet been committed or aborted. Once the <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A>, <A HREF="../../../com/sleepycat/db/Db.html#remove(java.lang.String, java.lang.String, int)"><CODE>Db.remove</CODE></A>, or <A HREF="../../../com/sleepycat/db/Db.html#rename(java.lang.String, java.lang.String, java.lang.String, int)"><CODE>Db.rename</CODE></A> methods are called, the handle may not be accessed again, regardless of the method's return.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_AFTER">DB_AFTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_AGGRESSIVE">DB_AGGRESSIVE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_APPEND">DB_APPEND</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_ABS">DB_ARCH_ABS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_DATA">DB_ARCH_DATA</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_LOG">DB_ARCH_LOG</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_REMOVE">DB_ARCH_REMOVE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_BEFORE">DB_BEFORE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_BTREE">DB_BTREE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CACHED_COUNTS">DB_CACHED_COUNTS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CDB_ALLDB">DB_CDB_ALLDB</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CHKSUM">DB_CHKSUM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME">DB_CONSUME</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CREATE">DB_CREATE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CURRENT">DB_CURRENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_MALLOC">DB_DBT_MALLOC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_REALLOC">DB_DBT_REALLOC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM">DB_DBT_USERMEM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRECT_DB">DB_DIRECT_DB</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRECT_LOG">DB_DIRECT_LOG</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ">DB_DIRTY_READ</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DONOTINDEX">DB_DONOTINDEX</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DUP">DB_DUP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_DUPSORT">DB_DUPSORT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_EID_BROADCAST">DB_EID_BROADCAST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_EID_INVALID">DB_EID_INVALID</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ENCRYPT">DB_ENCRYPT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ENCRYPT_AES">DB_ENCRYPT_AES</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_EXCL">DB_EXCL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_FAST_STAT">DB_FAST_STAT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_FILEOPEN">DB_FILEOPEN</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_FIRST">DB_FIRST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_FLUSH">DB_FLUSH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE">DB_FORCE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH">DB_GET_BOTH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_RECNO">DB_GET_RECNO</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_HASH">DB_HASH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_CDB">DB_INIT_CDB</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_LOCK">DB_INIT_LOCK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_LOG">DB_INIT_LOG</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_MPOOL">DB_INIT_MPOOL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_REP">DB_INIT_REP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_TXN">DB_INIT_TXN</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_JOIN_ITEM">DB_JOIN_ITEM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_JOIN_NOSORT">DB_JOIN_NOSORT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_JOINENV">DB_JOINENV</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY">DB_KEYEMPTY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST">DB_KEYEXIST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYFIRST">DB_KEYFIRST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYLAST">DB_KEYLAST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LAST">DB_LAST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_GET">DB_LOCK_GET</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_GET_TIMEOUT">DB_LOCK_GET_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IREAD">DB_LOCK_IREAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IWR">DB_LOCK_IWR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IWRITE">DB_LOCK_IWRITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MAXLOCKS">DB_LOCK_MAXLOCKS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINLOCKS">DB_LOCK_MINLOCKS</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINWRITE">DB_LOCK_MINWRITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT">DB_LOCK_PUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT_ALL">DB_LOCK_PUT_ALL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT_OBJ">DB_LOCK_PUT_OBJ</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_READ">DB_LOCK_READ</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_TIMEOUT">DB_LOCK_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_WRITE">DB_LOCK_WRITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCKDOWN">DB_LOCKDOWN</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_MPOOL_NOFILE">DB_MPOOL_NOFILE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE">DB_MULTIPLE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT">DB_NEXT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_DUP">DB_NEXT_DUP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_NODUP">DB_NEXT_NODUP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NODUPDATA">DB_NODUPDATA</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOLOCKING">DB_NOLOCKING</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOMMAP">DB_NOMMAP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOORDERCHK">DB_NOORDERCHK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOOVERWRITE">DB_NOOVERWRITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOPANIC">DB_NOPANIC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOSERVER">DB_NOSERVER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOSERVER_ID">DB_NOSERVER_ID</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC">DB_NOSYNC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND">DB_NOTFOUND</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_OLD_VERSION">DB_OLD_VERSION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_ORDERCHKONLY">DB_ORDERCHKONLY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_OVERWRITE">DB_OVERWRITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_POSITION">DB_POSITION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV">DB_PREV</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV_NODUP">DB_PREV_NODUP</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRINTABLE">DB_PRINTABLE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_DEFAULT">DB_PRIORITY_DEFAULT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_HIGH">DB_PRIORITY_HIGH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_LOW">DB_PRIORITY_LOW</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_VERY_HIGH">DB_PRIORITY_VERY_HIGH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_VERY_LOW">DB_PRIORITY_VERY_LOW</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIVATE">DB_PRIVATE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_QUEUE">DB_QUEUE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RDONLY">DB_RDONLY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RECNO">DB_RECNO</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM">DB_RECNUM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RECORDCOUNT">DB_RECORDCOUNT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RECOVER">DB_RECOVER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REGION_INIT">DB_REGION_INIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER">DB_RENUMBER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_CLIENT">DB_REP_CLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_HANDLE_DEAD">DB_REP_HANDLE_DEAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_ISPERM">DB_REP_ISPERM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_MASTER">DB_REP_MASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NEWSITE">DB_REP_NEWSITE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NOBUFFER">DB_REP_NOBUFFER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NOTPERM">DB_REP_NOTPERM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_OUTDATED">DB_REP_OUTDATED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_PERMANENT">DB_REP_PERMANENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_UNAVAIL">DB_REP_UNAVAIL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_REVSPLITOFF">DB_REVSPLITOFF</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RMW">DB_RMW</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RPCCLIENT">DB_RPCCLIENT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_RUNRECOVERY">DB_RUNRECOVERY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SALVAGE">DB_SALVAGE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SECONDARY_BAD">DB_SECONDARY_BAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SET">DB_SET</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_LOCK_TIMEOUT">DB_SET_LOCK_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RANGE">DB_SET_RANGE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO">DB_SET_RECNO</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_TXN_TIMEOUT">DB_SET_TXN_TIMEOUT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SNAPSHOT">DB_SNAPSHOT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR">DB_STAT_CLEAR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD">DB_THREAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TRUNCATE">DB_TRUNCATE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_ABORT">DB_TXN_ABORT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_APPLY">DB_TXN_APPLY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_PRINT">DB_TXN_PRINT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_SYNC">DB_TXN_SYNC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_UNKNOWN">DB_UNKNOWN</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_UPGRADE">DB_UPGRADE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON">DB_USE_ENVIRON</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_CHKPOINT">DB_VERB_CHKPOINT</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_DEADLOCK">DB_VERB_DEADLOCK</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_RECOVERY">DB_VERB_RECOVERY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_REPLICATION">DB_VERB_REPLICATION</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_WAITSFOR">DB_VERB_WAITSFOR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERIFY">DB_VERIFY</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERIFY_BAD">DB_VERIFY_BAD</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERSION_MAJOR">DB_VERSION_MAJOR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERSION_MINOR">DB_VERSION_MINOR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_VERSION_PATCH">DB_VERSION_PATCH</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_WRITECURSOR">DB_WRITECURSOR</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_XA_CREATE">DB_XA_CREATE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_XIDDATASIZE">DB_XIDDATASIZE</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#DB_YIELDCPU">DB_YIELDCPU</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A constant used to configure the system.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#Db(com.sleepycat.db.DbEnv, int)">Db</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor creates a Db object that is the handle for a Berkeley DB database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)">associate</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.close method flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)">cursor</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.cursor method returns a created database cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">del</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">delete</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.delete method removes key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)">err</A></B>(int&nbsp;error,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A>, <A HREF="../../../com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A>, Db.err and Db.errx methods provide error-messaging functionality for applications written using the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#errx(java.lang.String)">errx</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <A HREF="../../../com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A> and Db.errx methods perform identically to the <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A> and Db.err methods, except that they do not append the final separator characters and standard error string to the error message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_bt_minkey()">get_bt_minkey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getBtreeMinKey()"><CODE>getBtreeMinKey()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_byteswapped()">get_byteswapped</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#isByteSwapped()"><CODE>isByteSwapped()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_cachesize_ncache()">get_cachesize_ncache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_cachesize()">get_cachesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_dbname()">get_dbname</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDatabaseName()"><CODE>getDatabaseName()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_encrypt_flags()">get_encrypt_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_env()">get_env</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDbEnv()"><CODE>getDbEnv()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_errpfx()">get_errpfx</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_filename()">get_filename</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getFileName()"><CODE>getFileName()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_flags_raw()">get_flags_raw</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getFlags()"><CODE>getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_h_ffactor()">get_h_ffactor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getHashFillFactor()"><CODE>getHashFillFactor()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_h_nelem()">get_h_nelem</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getHashNumElements()"><CODE>getHashNumElements()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_lorder()">get_lorder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getByteOrder()"><CODE>getByteOrder()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_mpf()">get_mpf</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get_mpf method returns the handle for the cache file underlying the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_open_flags()">get_open_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_pagesize()">get_pagesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getPageSize()"><CODE>getPageSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_q_extentsize()">get_q_extentsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getQueueExtentSize()"><CODE>getQueueExtentSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_re_delim()">get_re_delim</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordDelimiter()"><CODE>getRecordDelimiter()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_re_len()">get_re_len</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordLength()"><CODE>getRecordLength()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_re_pad()">get_re_pad</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordPad()"><CODE>getRecordPad()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_re_source()">get_re_source</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordSource()"><CODE>getRecordSource()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_transactional()">get_transactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#isTransactional()"><CODE>isTransactional()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get_type()">get_type</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDbType()"><CODE>getDbType()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getBtreeMinKey()">getBtreeMinKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getBtreeMinKey method returns the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getByteOrder()">getByteOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getByteOrder method returns the database byte order; a byte order of 4,321 indicates a big endian order, and a byte order of 1,234 indicates a little endian order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getCacheSize()">getCacheSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getCacheSize method returns the size of the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getCacheSizeNcache()">getCacheSizeNcache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSizeNcache method returns the number of caches.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getDatabaseName()">getDatabaseName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDatabaseName method returns the current database name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getDbEnv()">getDbEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDbEnv method returns the handle for the database environment underlying the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getDbType()">getDbType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDbType method returns the type of the underlying access method (and file format).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getEncryptFlags()">getEncryptFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getEncryptFlags method returns the encryption flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getErrorPrefix()">getErrorPrefix</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getErrorPrefix method returns the error prefix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getFileName()">getFileName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getFileName method returns the current filename.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getFlags method returns the current flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getHashFillFactor()">getHashFillFactor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getHashFillFactor method returns the hash table density.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getHashNumElements()">getHashNumElements</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getHashNumElements method returns the estimate of the final size of the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getOpenFlags()">getOpenFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getOpenFlags method returns the current open method flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getPageSize()">getPageSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getPageSize method returns the page size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getQueueExtentSize()">getQueueExtentSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getQueueExtentSize method returns the number of pages in an extent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getRecordDelimiter()">getRecordDelimiter</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordDelimiter method returns the delimiting byte.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getRecordLength()">getRecordLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordLength method returns the record length.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getRecordPad()">getRecordPad</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordPad method returns the pad character.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#getRecordSource()">getRecordSource</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordSource method returns the source file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#isByteSwapped()">isByteSwapped</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.isByteSwapped method returns false if the underlying database files were created on an architecture of the same byte order as the current one, and true if they were not (that is, big-endian on a little-endian machine, or vice versa).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#isEncrypted()">isEncrypted</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <A HREF="../../../com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method returns false if the underlying database files are encrypted and true if they are not.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#isTransactional()">isTransactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.isTransactional method returns true if the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle has been opened in a transactional mode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)">join</A></B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>[]&nbsp;curslist,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">key_range</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">keyRange</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)">open</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.put method stores key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#remove(java.lang.String, java.lang.String, int)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.remove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#rename(java.lang.String, java.lang.String, java.lang.String, int)">rename</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.rename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_append_recno(com.sleepycat.db.DbAppendRecno)">set_append_recno</A></B>(<A HREF="../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>setAppendRecno(DbAppendRecno)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_bt_compare(com.sleepycat.db.DbBtreeCompare)">set_bt_compare</A></B>(<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>setBtreeCompare(DbBtreeCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_bt_maxkey(int)">set_bt_maxkey</A></B>(int&nbsp;maxkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_bt_minkey(int)">set_bt_minkey</A></B>(int&nbsp;bt_minkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreeMinKey(int)"><CODE>setBtreeMinKey(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_bt_prefix(com.sleepycat.db.DbBtreePrefix)">set_bt_prefix</A></B>(<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>setBtreePrefix(DbBtreePrefix)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_cachesize(int, int, int)">set_cachesize</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_cachesize(long, int)">set_cachesize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_dup_compare(com.sleepycat.db.DbDupCompare)">set_dup_compare</A></B>(<A HREF="../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>setDuplicateCompare(DbDupCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_encrypt(java.lang.String, int)">set_encrypt</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_errcall(com.sleepycat.db.DbErrcall)">set_errcall</A></B>(<A HREF="../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_error_stream(java.io.OutputStream)">set_error_stream</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_errpfx(java.lang.String)">set_errpfx</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_feedback(com.sleepycat.db.DbFeedback)">set_feedback</A></B>(<A HREF="../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_flags(int)">set_flags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_h_ffactor(int)">set_h_ffactor</A></B>(int&nbsp;h_ffactor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>setHashFillFactor(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_h_hash(com.sleepycat.db.DbHash)">set_h_hash</A></B>(<A HREF="../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>setHash(DbHash)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_h_nelem(int)">set_h_nelem</A></B>(int&nbsp;h_nelem)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHashNumElements(int)"><CODE>setHashNumElements(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_lorder(int)">set_lorder</A></B>(int&nbsp;lorder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setByteOrder(int)"><CODE>setByteOrder(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_pagesize(long)">set_pagesize</A></B>(long&nbsp;pagesize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setPageSize(long)"><CODE>setPageSize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_q_extentsize(int)">set_q_extentsize</A></B>(int&nbsp;extentsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setQueueExtentSize(int)"><CODE>setQueueExtentSize(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_re_delim(int)">set_re_delim</A></B>(int&nbsp;re_delim)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>setRecordDelimiter(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_re_len(int)">set_re_len</A></B>(int&nbsp;re_len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordLength(int)"><CODE>setRecordLength(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_re_pad(int)">set_re_pad</A></B>(int&nbsp;re_pad)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>setRecordPad(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#set_re_source(java.lang.String)">set_re_source</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><CODE>setRecordSource(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)">setAppendRecno</A></B>(<A HREF="../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)">setBtreeCompare</A></B>(<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setBtreeMinKey(int)">setBtreeMinKey</A></B>(int&nbsp;bt_minkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)">setBtreePrefix</A></B>(<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setByteOrder(int)">setByteOrder</A></B>(int&nbsp;lorder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte order for integers in the stored database metadata.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setCacheSize(long, int)">setCacheSize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the shared memory buffer pool -- that is, the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)">setDuplicateCompare</A></B>(<A HREF="../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)">setEncrypted</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the password used by the Berkeley DB library to perform encryption and decryption.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)">setErrorPrefix</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the prefix string that appears before error messages issued by Berkeley DB.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)">setErrorStream</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)">setFlags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)">setHash</A></B>(<A HREF="../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setHashFillFactor(int)">setHashFillFactor</A></B>(int&nbsp;h_ffactor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the desired density within the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setHashNumElements(int)">setHashNumElements</A></B>(int&nbsp;h_nelem)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an estimate of the final size of the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setPageSize(long)">setPageSize</A></B>(long&nbsp;pagesize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the pages used to hold items in the database, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setQueueExtentSize(int)">setQueueExtentSize</A></B>(int&nbsp;extentsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the extents used to hold pages in a Queue database, specified as a number of pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)">setRecordDelimiter</A></B>(int&nbsp;re_delim)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the delimiting byte used to mark the end of a record in the backing source file for the Recno access method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setRecordLength(int)">setRecordLength</A></B>(int&nbsp;re_len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For the Queue access method, specify that the records are of length <b>re_len</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setRecordPad(int)">setRecordPad</A></B>(int&nbsp;re_pad)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the padding character for short, fixed-length records for the Queue and Recno access methods.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#setRecordSource(java.lang.String)">setRecordSource</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the underlying source file for the Recno access method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#stat(int)">stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.stat method creates a statistical structure and fills it with statistics for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#sync(int)">sync</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.sync method flushes any cached information to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#truncate(com.sleepycat.db.DbTxn, int)">truncate</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.truncate method empties the database, discarding all records it contains.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#upgrade(java.lang.String, int)">upgrade</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.upgrade method upgrades all of the databases included in the file <b>file</b>, if necessary.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;outfile,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.verify method verifies the integrity of all databases in the file specified by the <b>file</b> parameter, and optionally outputs the databases' key/data pairs to the file stream specified by the <b>outfile</b> parameter.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DB_BTREE"><!-- --></A><H3>
+DB_BTREE</H3>
+<PRE>
+public static final int <B>DB_BTREE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_BTREE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_DONOTINDEX"><!-- --></A><H3>
+DB_DONOTINDEX</H3>
+<PRE>
+public static final int <B>DB_DONOTINDEX</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>associate(DbTxn,Db,DbSecondaryKeyCreate,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><CODE>DbSecondaryKeyCreate.secondaryKeyCreate(Db,Dbt,Dbt,Dbt)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_DONOTINDEX">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_FILEOPEN"><!-- --></A><H3>
+DB_FILEOPEN</H3>
+<PRE>
+public static final int <B>DB_FILEOPEN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_FILEOPEN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_HASH"><!-- --></A><H3>
+DB_HASH</H3>
+<PRE>
+public static final int <B>DB_HASH</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_HASH">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_KEYEMPTY"><!-- --></A><H3>
+DB_KEYEMPTY</H3>
+<PRE>
+public static final int <B>DB_KEYEMPTY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_KEYEMPTY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_KEYEXIST"><!-- --></A><H3>
+DB_KEYEXIST</H3>
+<PRE>
+public static final int <B>DB_KEYEXIST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_KEYEXIST">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_DEADLOCK"><!-- --></A><H3>
+DB_LOCK_DEADLOCK</H3>
+<PRE>
+public static final int <B>DB_LOCK_DEADLOCK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_LOCK_DEADLOCK">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_NOTGRANTED"><!-- --></A><H3>
+DB_LOCK_NOTGRANTED</H3>
+<PRE>
+public static final int <B>DB_LOCK_NOTGRANTED</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_LOCK_NOTGRANTED">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOSERVER"><!-- --></A><H3>
+DB_NOSERVER</H3>
+<PRE>
+public static final int <B>DB_NOSERVER</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_NOSERVER">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOSERVER_HOME"><!-- --></A><H3>
+DB_NOSERVER_HOME</H3>
+<PRE>
+public static final int <B>DB_NOSERVER_HOME</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_NOSERVER_HOME">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOSERVER_ID"><!-- --></A><H3>
+DB_NOSERVER_ID</H3>
+<PRE>
+public static final int <B>DB_NOSERVER_ID</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_NOSERVER_ID">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOTFOUND"><!-- --></A><H3>
+DB_NOTFOUND</H3>
+<PRE>
+public static final int <B>DB_NOTFOUND</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_NOTFOUND">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_OLD_VERSION"><!-- --></A><H3>
+DB_OLD_VERSION</H3>
+<PRE>
+public static final int <B>DB_OLD_VERSION</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_OLD_VERSION">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_PAGE_NOTFOUND"><!-- --></A><H3>
+DB_PAGE_NOTFOUND</H3>
+<PRE>
+public static final int <B>DB_PAGE_NOTFOUND</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_PAGE_NOTFOUND">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_QUEUE"><!-- --></A><H3>
+DB_QUEUE</H3>
+<PRE>
+public static final int <B>DB_QUEUE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_QUEUE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_RECNO"><!-- --></A><H3>
+DB_RECNO</H3>
+<PRE>
+public static final int <B>DB_RECNO</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_RECNO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_DUPMASTER"><!-- --></A><H3>
+DB_REP_DUPMASTER</H3>
+<PRE>
+public static final int <B>DB_REP_DUPMASTER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_DUPMASTER">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_HANDLE_DEAD"><!-- --></A><H3>
+DB_REP_HANDLE_DEAD</H3>
+<PRE>
+public static final int <B>DB_REP_HANDLE_DEAD</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>associate(DbTxn,Db,DbSecondaryKeyCreate,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)"><CODE>cursor(DbTxn,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#stat(int)"><CODE>stat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#sync(int)"><CODE>sync(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#count(int)"><CODE>Dbc.count(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#dup(int)"><CODE>Dbc.dup(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_HANDLE_DEAD">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_HOLDELECTION"><!-- --></A><H3>
+DB_REP_HOLDELECTION</H3>
+<PRE>
+public static final int <B>DB_REP_HOLDELECTION</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_HOLDELECTION">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_NEWMASTER"><!-- --></A><H3>
+DB_REP_NEWMASTER</H3>
+<PRE>
+public static final int <B>DB_REP_NEWMASTER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_NEWMASTER">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_NEWSITE"><!-- --></A><H3>
+DB_REP_NEWSITE</H3>
+<PRE>
+public static final int <B>DB_REP_NEWSITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_NEWSITE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_OUTDATED"><!-- --></A><H3>
+DB_REP_OUTDATED</H3>
+<PRE>
+public static final int <B>DB_REP_OUTDATED</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_REP_OUTDATED">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_RUNRECOVERY"><!-- --></A><H3>
+DB_RUNRECOVERY</H3>
+<PRE>
+public static final int <B>DB_RUNRECOVERY</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_RUNRECOVERY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_SECONDARY_BAD"><!-- --></A><H3>
+DB_SECONDARY_BAD</H3>
+<PRE>
+public static final int <B>DB_SECONDARY_BAD</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_SECONDARY_BAD">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_ABORT"><!-- --></A><H3>
+DB_TXN_ABORT</H3>
+<PRE>
+public static final int <B>DB_TXN_ABORT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><CODE>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_TXN_ABORT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_APPLY"><!-- --></A><H3>
+DB_TXN_APPLY</H3>
+<PRE>
+public static final int <B>DB_TXN_APPLY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><CODE>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_TXN_APPLY">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_BACKWARD_ROLL"><!-- --></A><H3>
+DB_TXN_BACKWARD_ROLL</H3>
+<PRE>
+public static final int <B>DB_TXN_BACKWARD_ROLL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><CODE>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_TXN_BACKWARD_ROLL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_FORWARD_ROLL"><!-- --></A><H3>
+DB_TXN_FORWARD_ROLL</H3>
+<PRE>
+public static final int <B>DB_TXN_FORWARD_ROLL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><CODE>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_TXN_FORWARD_ROLL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_PRINT"><!-- --></A><H3>
+DB_TXN_PRINT</H3>
+<PRE>
+public static final int <B>DB_TXN_PRINT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><CODE>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_TXN_PRINT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_UNKNOWN"><!-- --></A><H3>
+DB_UNKNOWN</H3>
+<PRE>
+public static final int <B>DB_UNKNOWN</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_UNKNOWN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERIFY_BAD"><!-- --></A><H3>
+DB_VERIFY_BAD</H3>
+<PRE>
+public static final int <B>DB_VERIFY_BAD</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#com.sleepycat.db.Db.DB_VERIFY_BAD">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DB_AFTER"><!-- --></A><H3>
+DB_AFTER</H3>
+<PRE>
+public static final int <B>DB_AFTER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_AGGRESSIVE"><!-- --></A><H3>
+DB_AGGRESSIVE</H3>
+<PRE>
+public static final int <B>DB_AGGRESSIVE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_APPEND"><!-- --></A><H3>
+DB_APPEND</H3>
+<PRE>
+public static final int <B>DB_APPEND</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ARCH_ABS"><!-- --></A><H3>
+DB_ARCH_ABS</H3>
+<PRE>
+public static final int <B>DB_ARCH_ABS</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ARCH_DATA"><!-- --></A><H3>
+DB_ARCH_DATA</H3>
+<PRE>
+public static final int <B>DB_ARCH_DATA</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ARCH_LOG"><!-- --></A><H3>
+DB_ARCH_LOG</H3>
+<PRE>
+public static final int <B>DB_ARCH_LOG</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ARCH_REMOVE"><!-- --></A><H3>
+DB_ARCH_REMOVE</H3>
+<PRE>
+public static final int <B>DB_ARCH_REMOVE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_AUTO_COMMIT"><!-- --></A><H3>
+DB_AUTO_COMMIT</H3>
+<PRE>
+public static final int <B>DB_AUTO_COMMIT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>associate(DbTxn,Db,DbSecondaryKeyCreate,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#truncate(com.sleepycat.db.DbTxn, int)"><CODE>truncate(DbTxn,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_BEFORE"><!-- --></A><H3>
+DB_BEFORE</H3>
+<PRE>
+public static final int <B>DB_BEFORE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CACHED_COUNTS"><!-- --></A><H3>
+DB_CACHED_COUNTS</H3>
+<PRE>
+public static final int <B>DB_CACHED_COUNTS</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CDB_ALLDB"><!-- --></A><H3>
+DB_CDB_ALLDB</H3>
+<PRE>
+public static final int <B>DB_CDB_ALLDB</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CHKSUM"><!-- --></A><H3>
+DB_CHKSUM</H3>
+<PRE>
+public static final int <B>DB_CHKSUM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CONSUME"><!-- --></A><H3>
+DB_CONSUME</H3>
+<PRE>
+public static final int <B>DB_CONSUME</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CONSUME_WAIT"><!-- --></A><H3>
+DB_CONSUME_WAIT</H3>
+<PRE>
+public static final int <B>DB_CONSUME_WAIT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CREATE"><!-- --></A><H3>
+DB_CREATE</H3>
+<PRE>
+public static final int <B>DB_CREATE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>associate(DbTxn,Db,DbSecondaryKeyCreate,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CURRENT"><!-- --></A><H3>
+DB_CURRENT</H3>
+<PRE>
+public static final int <B>DB_CURRENT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_CXX_NO_EXCEPTIONS"><!-- --></A><H3>
+DB_CXX_NO_EXCEPTIONS</H3>
+<PRE>
+public static final int <B>DB_CXX_NO_EXCEPTIONS</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DBT_MALLOC"><!-- --></A><H3>
+DB_DBT_MALLOC</H3>
+<PRE>
+public static final int <B>DB_DBT_MALLOC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DBT_PARTIAL"><!-- --></A><H3>
+DB_DBT_PARTIAL</H3>
+<PRE>
+public static final int <B>DB_DBT_PARTIAL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DBT_REALLOC"><!-- --></A><H3>
+DB_DBT_REALLOC</H3>
+<PRE>
+public static final int <B>DB_DBT_REALLOC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DBT_USERMEM"><!-- --></A><H3>
+DB_DBT_USERMEM</H3>
+<PRE>
+public static final int <B>DB_DBT_USERMEM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DIRECT_DB"><!-- --></A><H3>
+DB_DIRECT_DB</H3>
+<PRE>
+public static final int <B>DB_DIRECT_DB</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DIRECT_LOG"><!-- --></A><H3>
+DB_DIRECT_LOG</H3>
+<PRE>
+public static final int <B>DB_DIRECT_LOG</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DIRTY_READ"><!-- --></A><H3>
+DB_DIRTY_READ</H3>
+<PRE>
+public static final int <B>DB_DIRTY_READ</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)"><CODE>cursor(DbTxn,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DUP"><!-- --></A><H3>
+DB_DUP</H3>
+<PRE>
+public static final int <B>DB_DUP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_DUPSORT"><!-- --></A><H3>
+DB_DUPSORT</H3>
+<PRE>
+public static final int <B>DB_DUPSORT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#upgrade(java.lang.String, int)"><CODE>upgrade(String,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_EID_BROADCAST"><!-- --></A><H3>
+DB_EID_BROADCAST</H3>
+<PRE>
+public static final int <B>DB_EID_BROADCAST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)"><CODE>DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_EID_INVALID"><!-- --></A><H3>
+DB_EID_INVALID</H3>
+<PRE>
+public static final int <B>DB_EID_INVALID</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ENCRYPT"><!-- --></A><H3>
+DB_ENCRYPT</H3>
+<PRE>
+public static final int <B>DB_ENCRYPT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ENCRYPT_AES"><!-- --></A><H3>
+DB_ENCRYPT_AES</H3>
+<PRE>
+public static final int <B>DB_ENCRYPT_AES</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>DbEnv.setEncrypted(String,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_EXCL"><!-- --></A><H3>
+DB_EXCL</H3>
+<PRE>
+public static final int <B>DB_EXCL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_FAST_STAT"><!-- --></A><H3>
+DB_FAST_STAT</H3>
+<PRE>
+public static final int <B>DB_FAST_STAT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#stat(int)"><CODE>stat(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_FIRST"><!-- --></A><H3>
+DB_FIRST</H3>
+<PRE>
+public static final int <B>DB_FIRST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_FLUSH"><!-- --></A><H3>
+DB_FLUSH</H3>
+<PRE>
+public static final int <B>DB_FLUSH</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_FORCE"><!-- --></A><H3>
+DB_FORCE</H3>
+<PRE>
+public static final int <B>DB_FORCE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><CODE>DbEnv.remove(String,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint(int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_GET_BOTH"><!-- --></A><H3>
+DB_GET_BOTH</H3>
+<PRE>
+public static final int <B>DB_GET_BOTH</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_GET_BOTH_RANGE"><!-- --></A><H3>
+DB_GET_BOTH_RANGE</H3>
+<PRE>
+public static final int <B>DB_GET_BOTH_RANGE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_GET_RECNO"><!-- --></A><H3>
+DB_GET_RECNO</H3>
+<PRE>
+public static final int <B>DB_GET_RECNO</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_CDB"><!-- --></A><H3>
+DB_INIT_CDB</H3>
+<PRE>
+public static final int <B>DB_INIT_CDB</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_LOCK"><!-- --></A><H3>
+DB_INIT_LOCK</H3>
+<PRE>
+public static final int <B>DB_INIT_LOCK</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_LOG"><!-- --></A><H3>
+DB_INIT_LOG</H3>
+<PRE>
+public static final int <B>DB_INIT_LOG</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_MPOOL"><!-- --></A><H3>
+DB_INIT_MPOOL</H3>
+<PRE>
+public static final int <B>DB_INIT_MPOOL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_REP"><!-- --></A><H3>
+DB_INIT_REP</H3>
+<PRE>
+public static final int <B>DB_INIT_REP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_INIT_TXN"><!-- --></A><H3>
+DB_INIT_TXN</H3>
+<PRE>
+public static final int <B>DB_INIT_TXN</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_JOINENV"><!-- --></A><H3>
+DB_JOINENV</H3>
+<PRE>
+public static final int <B>DB_JOINENV</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_JOIN_ITEM"><!-- --></A><H3>
+DB_JOIN_ITEM</H3>
+<PRE>
+public static final int <B>DB_JOIN_ITEM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_JOIN_NOSORT"><!-- --></A><H3>
+DB_JOIN_NOSORT</H3>
+<PRE>
+public static final int <B>DB_JOIN_NOSORT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_KEYFIRST"><!-- --></A><H3>
+DB_KEYFIRST</H3>
+<PRE>
+public static final int <B>DB_KEYFIRST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_KEYLAST"><!-- --></A><H3>
+DB_KEYLAST</H3>
+<PRE>
+public static final int <B>DB_KEYLAST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LAST"><!-- --></A><H3>
+DB_LAST</H3>
+<PRE>
+public static final int <B>DB_LAST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCKDOWN"><!-- --></A><H3>
+DB_LOCKDOWN</H3>
+<PRE>
+public static final int <B>DB_LOCKDOWN</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_DEFAULT"><!-- --></A><H3>
+DB_LOCK_DEFAULT</H3>
+<PRE>
+public static final int <B>DB_LOCK_DEFAULT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_EXPIRE"><!-- --></A><H3>
+DB_LOCK_EXPIRE</H3>
+<PRE>
+public static final int <B>DB_LOCK_EXPIRE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_GET"><!-- --></A><H3>
+DB_LOCK_GET</H3>
+<PRE>
+public static final int <B>DB_LOCK_GET</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_GET_TIMEOUT"><!-- --></A><H3>
+DB_LOCK_GET_TIMEOUT</H3>
+<PRE>
+public static final int <B>DB_LOCK_GET_TIMEOUT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_IREAD"><!-- --></A><H3>
+DB_LOCK_IREAD</H3>
+<PRE>
+public static final int <B>DB_LOCK_IREAD</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_IWR"><!-- --></A><H3>
+DB_LOCK_IWR</H3>
+<PRE>
+public static final int <B>DB_LOCK_IWR</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_IWRITE"><!-- --></A><H3>
+DB_LOCK_IWRITE</H3>
+<PRE>
+public static final int <B>DB_LOCK_IWRITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_MAXLOCKS"><!-- --></A><H3>
+DB_LOCK_MAXLOCKS</H3>
+<PRE>
+public static final int <B>DB_LOCK_MAXLOCKS</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_MINLOCKS"><!-- --></A><H3>
+DB_LOCK_MINLOCKS</H3>
+<PRE>
+public static final int <B>DB_LOCK_MINLOCKS</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_MINWRITE"><!-- --></A><H3>
+DB_LOCK_MINWRITE</H3>
+<PRE>
+public static final int <B>DB_LOCK_MINWRITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_NOWAIT"><!-- --></A><H3>
+DB_LOCK_NOWAIT</H3>
+<PRE>
+public static final int <B>DB_LOCK_NOWAIT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_OLDEST"><!-- --></A><H3>
+DB_LOCK_OLDEST</H3>
+<PRE>
+public static final int <B>DB_LOCK_OLDEST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_PUT"><!-- --></A><H3>
+DB_LOCK_PUT</H3>
+<PRE>
+public static final int <B>DB_LOCK_PUT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_PUT_ALL"><!-- --></A><H3>
+DB_LOCK_PUT_ALL</H3>
+<PRE>
+public static final int <B>DB_LOCK_PUT_ALL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_PUT_OBJ"><!-- --></A><H3>
+DB_LOCK_PUT_OBJ</H3>
+<PRE>
+public static final int <B>DB_LOCK_PUT_OBJ</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_RANDOM"><!-- --></A><H3>
+DB_LOCK_RANDOM</H3>
+<PRE>
+public static final int <B>DB_LOCK_RANDOM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_READ"><!-- --></A><H3>
+DB_LOCK_READ</H3>
+<PRE>
+public static final int <B>DB_LOCK_READ</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_TIMEOUT"><!-- --></A><H3>
+DB_LOCK_TIMEOUT</H3>
+<PRE>
+public static final int <B>DB_LOCK_TIMEOUT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_WRITE"><!-- --></A><H3>
+DB_LOCK_WRITE</H3>
+<PRE>
+public static final int <B>DB_LOCK_WRITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOCK_YOUNGEST"><!-- --></A><H3>
+DB_LOCK_YOUNGEST</H3>
+<PRE>
+public static final int <B>DB_LOCK_YOUNGEST</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_LOG_AUTOREMOVE"><!-- --></A><H3>
+DB_LOG_AUTOREMOVE</H3>
+<PRE>
+public static final int <B>DB_LOG_AUTOREMOVE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_MPOOL_NOFILE"><!-- --></A><H3>
+DB_MPOOL_NOFILE</H3>
+<PRE>
+public static final int <B>DB_MPOOL_NOFILE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>DbMpoolFile.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_MULTIPLE"><!-- --></A><H3>
+DB_MULTIPLE</H3>
+<PRE>
+public static final int <B>DB_MULTIPLE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_MULTIPLE_KEY"><!-- --></A><H3>
+DB_MULTIPLE_KEY</H3>
+<PRE>
+public static final int <B>DB_MULTIPLE_KEY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NEXT"><!-- --></A><H3>
+DB_NEXT</H3>
+<PRE>
+public static final int <B>DB_NEXT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NEXT_DUP"><!-- --></A><H3>
+DB_NEXT_DUP</H3>
+<PRE>
+public static final int <B>DB_NEXT_DUP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NEXT_NODUP"><!-- --></A><H3>
+DB_NEXT_NODUP</H3>
+<PRE>
+public static final int <B>DB_NEXT_NODUP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NODUPDATA"><!-- --></A><H3>
+DB_NODUPDATA</H3>
+<PRE>
+public static final int <B>DB_NODUPDATA</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put(Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOLOCKING"><!-- --></A><H3>
+DB_NOLOCKING</H3>
+<PRE>
+public static final int <B>DB_NOLOCKING</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOMMAP"><!-- --></A><H3>
+DB_NOMMAP</H3>
+<PRE>
+public static final int <B>DB_NOMMAP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOORDERCHK"><!-- --></A><H3>
+DB_NOORDERCHK</H3>
+<PRE>
+public static final int <B>DB_NOORDERCHK</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOOVERWRITE"><!-- --></A><H3>
+DB_NOOVERWRITE</H3>
+<PRE>
+public static final int <B>DB_NOOVERWRITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>put(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOPANIC"><!-- --></A><H3>
+DB_NOPANIC</H3>
+<PRE>
+public static final int <B>DB_NOPANIC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_NOSYNC"><!-- --></A><H3>
+DB_NOSYNC</H3>
+<PRE>
+public static final int <B>DB_NOSYNC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>close(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_ORDERCHKONLY"><!-- --></A><H3>
+DB_ORDERCHKONLY</H3>
+<PRE>
+public static final int <B>DB_ORDERCHKONLY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_OVERWRITE"><!-- --></A><H3>
+DB_OVERWRITE</H3>
+<PRE>
+public static final int <B>DB_OVERWRITE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PANIC_ENVIRONMENT"><!-- --></A><H3>
+DB_PANIC_ENVIRONMENT</H3>
+<PRE>
+public static final int <B>DB_PANIC_ENVIRONMENT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_POSITION"><!-- --></A><H3>
+DB_POSITION</H3>
+<PRE>
+public static final int <B>DB_POSITION</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#dup(int)"><CODE>Dbc.dup(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PREV"><!-- --></A><H3>
+DB_PREV</H3>
+<PRE>
+public static final int <B>DB_PREV</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PREV_NODUP"><!-- --></A><H3>
+DB_PREV_NODUP</H3>
+<PRE>
+public static final int <B>DB_PREV_NODUP</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRINTABLE"><!-- --></A><H3>
+DB_PRINTABLE</H3>
+<PRE>
+public static final int <B>DB_PRINTABLE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIORITY_DEFAULT"><!-- --></A><H3>
+DB_PRIORITY_DEFAULT</H3>
+<PRE>
+public static final int <B>DB_PRIORITY_DEFAULT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIORITY_HIGH"><!-- --></A><H3>
+DB_PRIORITY_HIGH</H3>
+<PRE>
+public static final int <B>DB_PRIORITY_HIGH</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIORITY_LOW"><!-- --></A><H3>
+DB_PRIORITY_LOW</H3>
+<PRE>
+public static final int <B>DB_PRIORITY_LOW</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIORITY_VERY_HIGH"><!-- --></A><H3>
+DB_PRIORITY_VERY_HIGH</H3>
+<PRE>
+public static final int <B>DB_PRIORITY_VERY_HIGH</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIORITY_VERY_LOW"><!-- --></A><H3>
+DB_PRIORITY_VERY_LOW</H3>
+<PRE>
+public static final int <B>DB_PRIORITY_VERY_LOW</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_PRIVATE"><!-- --></A><H3>
+DB_PRIVATE</H3>
+<PRE>
+public static final int <B>DB_PRIVATE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RDONLY"><!-- --></A><H3>
+DB_RDONLY</H3>
+<PRE>
+public static final int <B>DB_RDONLY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RECNUM"><!-- --></A><H3>
+DB_RECNUM</H3>
+<PRE>
+public static final int <B>DB_RECNUM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RECORDCOUNT"><!-- --></A><H3>
+DB_RECORDCOUNT</H3>
+<PRE>
+public static final int <B>DB_RECORDCOUNT</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RECOVER"><!-- --></A><H3>
+DB_RECOVER</H3>
+<PRE>
+public static final int <B>DB_RECOVER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RECOVER_FATAL"><!-- --></A><H3>
+DB_RECOVER_FATAL</H3>
+<PRE>
+public static final int <B>DB_RECOVER_FATAL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REGION_INIT"><!-- --></A><H3>
+DB_REGION_INIT</H3>
+<PRE>
+public static final int <B>DB_REGION_INIT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RENUMBER"><!-- --></A><H3>
+DB_RENUMBER</H3>
+<PRE>
+public static final int <B>DB_RENUMBER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_CLIENT"><!-- --></A><H3>
+DB_REP_CLIENT</H3>
+<PRE>
+public static final int <B>DB_REP_CLIENT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_ISPERM"><!-- --></A><H3>
+DB_REP_ISPERM</H3>
+<PRE>
+public static final int <B>DB_REP_ISPERM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_LOGSONLY"><!-- --></A><H3>
+DB_REP_LOGSONLY</H3>
+<PRE>
+public static final int <B>DB_REP_LOGSONLY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_MASTER"><!-- --></A><H3>
+DB_REP_MASTER</H3>
+<PRE>
+public static final int <B>DB_REP_MASTER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_NOBUFFER"><!-- --></A><H3>
+DB_REP_NOBUFFER</H3>
+<PRE>
+public static final int <B>DB_REP_NOBUFFER</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)"><CODE>DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_NOTPERM"><!-- --></A><H3>
+DB_REP_NOTPERM</H3>
+<PRE>
+public static final int <B>DB_REP_NOTPERM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_PERMANENT"><!-- --></A><H3>
+DB_REP_PERMANENT</H3>
+<PRE>
+public static final int <B>DB_REP_PERMANENT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)"><CODE>DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REP_UNAVAIL"><!-- --></A><H3>
+DB_REP_UNAVAIL</H3>
+<PRE>
+public static final int <B>DB_REP_UNAVAIL</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect(int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_REVSPLITOFF"><!-- --></A><H3>
+DB_REVSPLITOFF</H3>
+<PRE>
+public static final int <B>DB_REVSPLITOFF</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RMW"><!-- --></A><H3>
+DB_RMW</H3>
+<PRE>
+public static final int <B>DB_RMW</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>join(Dbc[],int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_RPCCLIENT"><!-- --></A><H3>
+DB_RPCCLIENT</H3>
+<PRE>
+public static final int <B>DB_RPCCLIENT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#DbEnv(int)"><CODE>DbEnv(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SALVAGE"><!-- --></A><H3>
+DB_SALVAGE</H3>
+<PRE>
+public static final int <B>DB_SALVAGE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><CODE>verify(String,String,java.io.OutputStream,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SET"><!-- --></A><H3>
+DB_SET</H3>
+<PRE>
+public static final int <B>DB_SET</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbLogc.get(DbLsn,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SET_LOCK_TIMEOUT"><!-- --></A><H3>
+DB_SET_LOCK_TIMEOUT</H3>
+<PRE>
+public static final int <B>DB_SET_LOCK_TIMEOUT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout(long,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>DbEnv.getTimeout(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout(long,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SET_RANGE"><!-- --></A><H3>
+DB_SET_RANGE</H3>
+<PRE>
+public static final int <B>DB_SET_RANGE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SET_RECNO"><!-- --></A><H3>
+DB_SET_RECNO</H3>
+<PRE>
+public static final int <B>DB_SET_RECNO</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SET_TXN_TIMEOUT"><!-- --></A><H3>
+DB_SET_TXN_TIMEOUT</H3>
+<PRE>
+public static final int <B>DB_SET_TXN_TIMEOUT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout(long,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>DbEnv.getTimeout(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout(long,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SNAPSHOT"><!-- --></A><H3>
+DB_SNAPSHOT</H3>
+<PRE>
+public static final int <B>DB_SNAPSHOT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_STAT_CLEAR"><!-- --></A><H3>
+DB_STAT_CLEAR</H3>
+<PRE>
+public static final int <B>DB_STAT_CLEAR</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>DbEnv.lockStat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>DbEnv.logStat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>DbEnv.memoryPoolStat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>DbEnv.memoryPoolFileStat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>DbEnv.replicationStat(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>DbEnv.txnStat(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_SYSTEM_MEM"><!-- --></A><H3>
+DB_SYSTEM_MEM</H3>
+<PRE>
+public static final int <B>DB_SYSTEM_MEM</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_THREAD"><!-- --></A><H3>
+DB_THREAD</H3>
+<PRE>
+public static final int <B>DB_THREAD</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TIME_NOTGRANTED"><!-- --></A><H3>
+DB_TIME_NOTGRANTED</H3>
+<PRE>
+public static final int <B>DB_TIME_NOTGRANTED</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TRUNCATE"><!-- --></A><H3>
+DB_TRUNCATE</H3>
+<PRE>
+public static final int <B>DB_TRUNCATE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>open(DbTxn,String,String,int,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_NOSYNC"><!-- --></A><H3>
+DB_TXN_NOSYNC</H3>
+<PRE>
+public static final int <B>DB_TXN_NOSYNC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_NOT_DURABLE"><!-- --></A><H3>
+DB_TXN_NOT_DURABLE</H3>
+<PRE>
+public static final int <B>DB_TXN_NOT_DURABLE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_NOWAIT"><!-- --></A><H3>
+DB_TXN_NOWAIT</H3>
+<PRE>
+public static final int <B>DB_TXN_NOWAIT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_SYNC"><!-- --></A><H3>
+DB_TXN_SYNC</H3>
+<PRE>
+public static final int <B>DB_TXN_SYNC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit(int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_TXN_WRITE_NOSYNC"><!-- --></A><H3>
+DB_TXN_WRITE_NOSYNC</H3>
+<PRE>
+public static final int <B>DB_TXN_WRITE_NOSYNC</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_UPGRADE"><!-- --></A><H3>
+DB_UPGRADE</H3>
+<PRE>
+public static final int <B>DB_UPGRADE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_USE_ENVIRON"><!-- --></A><H3>
+DB_USE_ENVIRON</H3>
+<PRE>
+public static final int <B>DB_USE_ENVIRON</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><CODE>DbEnv.remove(String,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_USE_ENVIRON_ROOT"><!-- --></A><H3>
+DB_USE_ENVIRON_ROOT</H3>
+<PRE>
+public static final int <B>DB_USE_ENVIRON_ROOT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open(String,int,int)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><CODE>DbEnv.remove(String,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERB_CHKPOINT"><!-- --></A><H3>
+DB_VERB_CHKPOINT</H3>
+<PRE>
+public static final int <B>DB_VERB_CHKPOINT</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERB_DEADLOCK"><!-- --></A><H3>
+DB_VERB_DEADLOCK</H3>
+<PRE>
+public static final int <B>DB_VERB_DEADLOCK</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERB_RECOVERY"><!-- --></A><H3>
+DB_VERB_RECOVERY</H3>
+<PRE>
+public static final int <B>DB_VERB_RECOVERY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERB_REPLICATION"><!-- --></A><H3>
+DB_VERB_REPLICATION</H3>
+<PRE>
+public static final int <B>DB_VERB_REPLICATION</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERB_WAITSFOR"><!-- --></A><H3>
+DB_VERB_WAITSFOR</H3>
+<PRE>
+public static final int <B>DB_VERB_WAITSFOR</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERIFY"><!-- --></A><H3>
+DB_VERIFY</H3>
+<PRE>
+public static final int <B>DB_VERIFY</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></li>
+<li><A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERSION_MAJOR"><!-- --></A><H3>
+DB_VERSION_MAJOR</H3>
+<PRE>
+public static final int <B>DB_VERSION_MAJOR</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERSION_MINOR"><!-- --></A><H3>
+DB_VERSION_MINOR</H3>
+<PRE>
+public static final int <B>DB_VERSION_MINOR</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_VERSION_PATCH"><!-- --></A><H3>
+DB_VERSION_PATCH</H3>
+<PRE>
+public static final int <B>DB_VERSION_PATCH</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_WRITECURSOR"><!-- --></A><H3>
+DB_WRITECURSOR</H3>
+<PRE>
+public static final int <B>DB_WRITECURSOR</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)"><CODE>cursor(DbTxn,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_XA_CREATE"><!-- --></A><H3>
+DB_XA_CREATE</H3>
+<PRE>
+public static final int <B>DB_XA_CREATE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/Db.html#Db(com.sleepycat.db.DbEnv, int)"><CODE>Db(DbEnv,int)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_XIDDATASIZE"><!-- --></A><H3>
+DB_XIDDATASIZE</H3>
+<PRE>
+public static final int <B>DB_XIDDATASIZE</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbTxn.html#prepare(byte[])"><CODE>DbTxn.prepare(byte[])</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="DB_YIELDCPU"><!-- --></A><H3>
+DB_YIELDCPU</H3>
+<PRE>
+public static final int <B>DB_YIELDCPU</B></PRE>
+<DL>
+<DD>A constant used to configure the system.
+It is used in the following locations:
+<ul>
+<li><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></li>
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="Db(com.sleepycat.db.DbEnv, int)"><!-- --></A><H3>
+Db</H3>
+<PRE>
+public <B>Db</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The constructor creates a Db object that is the handle for a Berkeley DB database. The constructor allocates memory internally; calling the <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A>, <A HREF="../../../com/sleepycat/db/Db.html#remove(java.lang.String, java.lang.String, int)"><CODE>Db.remove</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#rename(java.lang.String, java.lang.String, java.lang.String, int)"><CODE>Db.rename</CODE></A> methods will free that memory.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>dbenv</CODE> - If no <b>dbenv</b> value is specified, the database is standalone; that is, it is not part of any Berkeley DB environment. <p>If a <b>dbenv</b> value is specified, the database is created within the specified Berkeley DB environment. The database access methods automatically make calls to the other subsystems in Berkeley DB based on the enclosing environment. For example, if the environment has been configured to use locking, the access methods will automatically acquire the correct locks when reading and writing pages of the database.</p><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_XA_CREATE"><CODE>Db.DB_XA_CREATE</CODE></A><p>Instead of creating a standalone database, create a database intended to be accessed via applications running under a X/Open conformant Transaction Manager. The database will be opened in the environment specified by the OPENINFO parameter of the GROUPS section of the ubbconfig file. See the <a href="../../../../ref/xa/intro.html">XA Resource Manager</a> chapter in the Reference Guide for more information. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close(int)"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.close method flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle should not be closed while any other handle that refers to it is not yet closed; for example, database handles must not be closed while cursor handles into the database remain open, or transactions that include operations on the database have not yet been committed or aborted. Specifically, this includes <A HREF="../../../com/sleepycat/db/Dbc.html"><CODE>Dbc</CODE></A> and <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handles.</p> <p>Because key/data pairs are cached in memory, failing to sync the file with the Db.close or <A HREF="../../../com/sleepycat/db/Db.html#sync(int)"><CODE>Db.sync</CODE></A> method may result in inconsistent or lost information.</p> <p>When called on a database that is the primary database for a secondary index, the primary database should be closed only after all secondary indices which reference it have been closed.</p> <p>When multiple threads are using the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> concurrently, only a single thread may call the Db.close method.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle may not be accessed again after Db.close is called, regardless of its return.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC"><CODE>Db.DB_NOSYNC</CODE></A><p>Do not flush cached information to disk. The <A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC"><CODE><code>Db.DB_NOSYNC</code></CODE></A> flag is a dangerous option. It should be set only if the application is doing logging (with transactions) so that the database is recoverable after a system or application crash, or if the database is always generated from scratch after any system or application crash. <p><b>It is important to understand that flushing cached information to disk only minimizes the window of opportunity for corrupted data.</b> Although unlikely, it is possible for database corruption to happen if a system or application crash occurs while writing data to the database. To ensure that database corruption never occurs, applications must either: use transactions and logging with automatic recovery; use logging and application-specific recovery; or edit a copy of the database, and once all applications using the database have successfully called Db.close, atomically replace the original database with the updated copy.</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.close method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_env()"><!-- --></A><H3>
+get_env</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>get_env</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDbEnv()"><CODE>getDbEnv()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDbEnv()"><!-- --></A><H3>
+getDbEnv</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>getDbEnv</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getDbEnv method returns the handle for the database environment underlying the database.</p> <p>The Db.getDbEnv method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getDbEnv method returns the handle for the database environment underlying the database.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isEncrypted()"><!-- --></A><H3>
+isEncrypted</H3>
+<PRE>
+public boolean <B>isEncrypted</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The <A HREF="../../../com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method returns false if the underlying database files are encrypted and true if they are not.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method may not be called before the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method has been called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <A HREF="../../../com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method returns false if the underlying database files are encrypted and true if they are not.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><!-- --></A><H3>
+open</H3>
+<PRE>
+public void <B>open</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A>,
+ <A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>,
+ <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></PRE>
+<DL>
+<DD>The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</p> <p>The currently supported Berkeley DB file formats (or <i>access methods</i>) are Btree, Hash, Queue, and Recno. The Btree format is a representation of a sorted, balanced tree structure. The Hash format is an extensible, dynamic hashing scheme. The Queue format supports fast access to fixed-length records accessed sequentially or by logical record number. The Recno format supports fixed- or variable-length records, accessed sequentially or by logical record number, and optionally backed by a flat text file.</p> <p>Storage and retrieval for the Berkeley DB access methods are based on key/data pairs; see <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> for more information.</p> <p>Calling Db.open is a relatively expensive operation, and maintaining a set of open databases will normally be preferable to repeatedly opening and closing the database for each new query.</p> <h3>Environment Variables</h3> <p>If the database was opened within a database environment, the environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>Db.open is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p> <p>If the <b>file</b> and <b>dbenv</b> parameters to Db.open are null, the environment variable <b>TMPDIR</b> may be used as a directory in which to create temporary backing files
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - optional, and allows applications to have multiple databases in a single file. Although no <b>database</b> parameter needs to be specified, it is an error to attempt to open a second database in a <b>file</b> that was not initially created using a <b>database</b> name. Further, the <b>database</b> parameter is not supported by the Queue format. Finally, when opening multiple databases in the same physical file, it is important to consider locking and memory cache issues; see <a href="../../../../ref/am/opensub.html">Opening multiple databases in a single file</a> for more information. <p>In-memory databases never intended to be preserved on disk may be created by setting both the <b>file</b> and <b>database</b> parameters to null. Note that in-memory databases can only ever be shared by sharing the single database handle that created them, in circumstances where doing so is safe.</p><DD><CODE>file</CODE> - used as the name of an underlying file that will be used to back the database. <p>In-memory databases never intended to be preserved on disk may be created by setting both the <b>file</b> and <b>database</b> parameters to null. Note that in-memory databases can only ever be shared by sharing the single database handle that created them, in circumstances where doing so is safe.</p><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.open call within a transaction. If the call succeeds, the open operation will be recoverable. If the call fails, no database will have been created. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CREATE"><CODE>Db.DB_CREATE</CODE></A><p>Create the database. If the database does not already exist and the <code>Db.DB_CREATE</code> flag is not specified, the Db.open will fail. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>Support dirty reads; that is, read operations on the database may request the return of modified but not yet committed data. This flag must be specified on all <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles used to perform dirty reads or database updates, otherwise requests for dirty reads may not be honored and the read may block. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_EXCL"><CODE>Db.DB_EXCL</CODE></A><p>Return an error if the database already exists. The <code>Db.DB_EXCL</code> flag is only meaningful when specified with the <code>Db.DB_CREATE</code> flag. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOMMAP"><CODE>Db.DB_NOMMAP</CODE></A><p>Do not map this database into process memory (see the <A HREF="../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>DbEnv.setMemoryPoolMapSize</CODE></A> method for further information). </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RDONLY"><CODE>Db.DB_RDONLY</CODE></A><p>Open the database for reading only. Any attempt to modify items in the database will fail, regardless of the actual permissions of any underlying files. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A><p>Cause the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle returned by Db.open to be <i>free-threaded</i>; that is, usable by multiple threads within a single address space. <p>Threading is always assumed in the Java API, so no special flags are required, and Berkeley DB functions will always behave as if the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE><code>Db.DB_THREAD</code></CODE></A> flag was specified.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TRUNCATE"><CODE>Db.DB_TRUNCATE</CODE></A><p>Physically truncate the underlying file, discarding all previous databases it might have held. Underlying filesystem primitives are used to implement this flag. For this reason, it is applicable only to the file and cannot be used to discard databases within a file. <p>The <code>Db.DB_TRUNCATE</code> flag cannot be lock or transaction-protected, and it is an error to specify it in a locking or transaction-protected environment.</p> </li></ul><DD><CODE>mode</CODE> - On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by the database open are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation (see <b>umask</b>(2)). If <b>mode</b> is 0, the database open will use a default mode of readable and writable by both owner and group. On Windows systems, the mode parameter is ignored. The group ownership of created files is based on the system and directory defaults, and is not further specified by Berkeley DB.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, (other than by specifying the Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null. Note that transactionally protected operations on a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle requires the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle itself be transactionally protected during its open.<DD><CODE>type</CODE> - must be set to one of Db.DB_BTREE, Db.DB_HASH, Db.DB_QUEUE, Db.DB_RECNO, or Db.DB_UNKNOWN. If <b>type</b> is Db.DB_UNKNOWN, the database must already exist and Db.open will automatically determine its type. The <A HREF="../../../com/sleepycat/db/Db.html#getDbType()"><CODE>Db.getDbType</CODE></A> method may be used to determine the underlying type of databases opened using Db.DB_UNKNOWN.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.open method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>The database cannot be opened without being first upgraded. <li>Db.DB_CREATE and Db.DB_EXCL were specified and the database exists. <li>A nonexistent <b>re_source</b> file was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.open method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.open method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the Db.open method will fail and throw a FileNotFoundException exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.open method will fail and throw a IllegalArgumentException exception if an unknown database type, page size, hash function, pad byte, byte order, or a flag value or parameter that is incompatible with the specified database was specified; the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag was specified and fast mutexes are not available for this architecture; the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag was specified to Db.open, but was not specified to the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> call for the environment in which the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle was created; a backing flat text file was specified with either the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag or the provided database environment supports transaction processing; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+pget</H3>
+<PRE>
+public int <B>pget</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public void <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The Db.remove method removes the database specified by the <b>file</b> and <b>database</b> parameters. If no <b>database</b> is specified, the underlying file represented by <b>file</b> is removed, incidentally removing all of the databases it contained.</p> <p>Applications should never remove databases with open <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles, or in the case of removing a file, when any database in the file has an open handle. For example, some architectures do not permit the removal of files with open system handles. On these architectures, attempts to remove databases currently in use by any thread of control in the system will fail.</p> <p>The Db.remove method may not be called after calling the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method on any <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle. If the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method has already been called on a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle, close the existing handle and create a new one before calling Db.remove.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle may not be accessed again after Db.remove is called, regardless of its return.</p> <h3>Environment Variables</h3> <p>If the database was opened within a database environment, the environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>Db.remove is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - the database to be removed.<DD><CODE>file</CODE> - the physical file which contains the database(s) to be removed.<DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.remove method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to remove the underlying file and a database in the file was currently open.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.remove method will fail and throw a IllegalArgumentException exception if Db.remove called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the Db.remove method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rename(java.lang.String, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+rename</H3>
+<PRE>
+public void <B>rename</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The Db.rename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>. If no <b>database</b> is specified, the underlying file represented by <b>file</b> is renamed, incidentally renaming all of the databases it contained.</p> <p>Applications should not rename databases that are currently in use. If an underlying file is being renamed and logging is currently enabled in the database environment, no database in the file may be open when the Db.rename method is called. In particular, some architectures do not permit renaming files with open handles. On these architectures, attempts to rename databases that are currently in use by any thread of control in the system will fail.</p> <p>The Db.rename method may not be called after calling the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method on any <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle. If the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method has already been called on a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle, close the existing handle and create a new one before calling Db.rename.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle may not be accessed again after Db.rename is called, regardless of its return.</p> <h3>Environment Variables</h3> <p>If the database was opened within a database environment, the environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>Db.rename is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - the database to be removed.<DD><CODE>file</CODE> - the physical file which contains the database(s) to be removed.<DD><CODE>flags</CODE> - currently unused, and must be set to 0.<DD><CODE>newname</CODE> - the new name of the database or file.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.rename method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to rename the underlying file and a database in the file was currently open.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.rename method will fail and throw a IllegalArgumentException exception if Db.rename called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the Db.rename method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><!-- --></A><H3>
+verify</H3>
+<PRE>
+public void <B>verify</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;outfile,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The Db.verify method verifies the integrity of all databases in the file specified by the <b>file</b> parameter, and optionally outputs the databases' key/data pairs to the file stream specified by the <b>outfile</b> parameter.</p> <p><b>The Db.verify method does not perform any locking, even in Berkeley DB environments that are configured with a locking subsystem. As such, it should only be used on files that are not being modified by another thread of control.</b></p> <p>The Db.verify method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. </p> <p>The <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle may not be accessed again after Db.verify is called, regardless of its return.</p> <h3>Environment Variables</h3> <p>If the database was opened within a database environment, the environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>Db.verify is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - the database in <b>file</b> on which the database checks for btree and duplicate sort order and for hashing are to be performed. See the Db.DB_ORDERCHKONLY flag for more information. <p>The database parameter must be set to null except when the Db.DB_ORDERCHKONLY flag is set.</p><DD><CODE>file</CODE> - the physical file in which the databases to be verified are found.<DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SALVAGE"><CODE>Db.DB_SALVAGE</CODE></A><p>Write the key/data pairs from all databases in the file to the file stream named in the <b>outfile</b> parameter. The output format is the same as that specified for the <a href="../../../../utility/db_dump.html">db_dump</a> utility, and can be used as input for the <a href="../../../../utility/db_load.html">db_load</a> utility. <p>Because the key/data pairs are output in page order as opposed to the sort order used by <a href="../../../../utility/db_dump.html">db_dump</a>, using Db.verify to dump key/data pairs normally produces less than optimal loads for Btree databases.</p> </li></ul>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AGGRESSIVE"><CODE>Db.DB_AGGRESSIVE</CODE></A><p>Output <b>all</b> the key/data pairs in the file that can be found. By default, Db.verify does not assume corruption. For example, if a key/data pair on a page is marked as deleted, it is not then written to the output file. When <code>Db.DB_AGGRESSIVE</code> is specified, corruption is assumed, and any key/data pair that can be found is written. In this case, key/data pairs that are corrupted or have been deleted may appear in the output (even if the file being salvaged is in no way corrupt), and the output will almost certainly require editing before being loaded into a database. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRINTABLE"><CODE>Db.DB_PRINTABLE</CODE></A><p>When using the <code>Db.DB_SALVAGE</code> flag, if characters in either the key or data items are printing characters (as defined by <b>isprint</b>(3)), use printing characters to represent them. This flag permits users to use standard text editors and tools to modify the contents of databases or selectively remove data from salvager output. <p>Note: different systems may have different notions about what characters are considered <i>printing characters</i>, and databases dumped in this manner may be less portable to external systems.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOORDERCHK"><CODE>Db.DB_NOORDERCHK</CODE></A><p>Skip the database checks for btree and duplicate sort order and for hashing. <p>The Db.verify method normally verifies that btree keys and duplicate items are correctly sorted, and hash keys are correctly hashed. If the file being verified contains multiple databases using differing sorting or hashing algorithms, some of them must necessarily fail database verification because only one sort order or hash function can be specified before Db.verify is called. To verify files with multiple databases having differing sorting orders or hashing functions, first perform verification of the file as a whole by using the <code>Db.DB_NOORDERCHK</code> flag, and then individually verify the sort order and hashing function for each database in the file using the <code>Db.DB_ORDERCHKONLY</code> flag.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ORDERCHKONLY"><CODE>Db.DB_ORDERCHKONLY</CODE></A><p>Perform the database checks for btree and duplicate sort order and for hashing, skipped by <code>Db.DB_NOORDERCHK</code>. <p>When this flag is specified, a <b>database</b> parameter should also be specified, indicating the database in the physical file which is to be checked. This flag is only safe to use on databases that have already successfully been verified using Db.verify with the <code>Db.DB_NOORDERCHK</code> flag set.</p> </li></ul><DD><CODE>outfile</CODE> - an optional file stream to which the databases' key/data pairs are written.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the Db.verify method will fail and throw a FileNotFoundException exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.verify method will fail and throw a IllegalArgumentException exception if Db.verify was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A>; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_cachesize(int, int, int)"><!-- --></A><H3>
+set_cachesize</H3>
+<PRE>
+public void <B>set_cachesize</B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_errcall(com.sleepycat.db.DbErrcall)"><!-- --></A><H3>
+set_errcall</H3>
+<PRE>
+public void <B>set_errcall</B>(<A HREF="../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorHandler(com.sleepycat.db.DbErrorHandler)"><!-- --></A><H3>
+setErrorHandler</H3>
+<PRE>
+public void <B>setErrorHandler</B>(<A HREF="../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown. In some cases, however, the <b>errno</b> value may be insufficient to completely describe the cause of the error, especially during initial application debugging. <p>The <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> and Db.setOnError methods are used to enhance the mechanism for reporting error messages to the application. The <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> and Db.setOnError methods must be called with a single object parameter. The object's class must implement the DbErrorHandler interface.</p> <p>In some cases, when an error occurs, Berkeley DB will invoke the object's errcall() method with two parameters; the first is the prefix string (as previously set by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>), the second will be an error message string. It is up to this method to display the message in an appropriate manner.</p> <p>Alternatively, you can use the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A> methods to display the additional information via an output stream. You should not mix these approaches.</p> <p>This error-logging enhancement does not slow performance or significantly increase application size, and may be run during normal operation as well as during application debugging.</p> <p>For <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles opened inside of Berkeley DB environments, calling the Db.setOnError method affects the entire environment and is equivalent to calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> method.</p> <p>The Db.setOnError method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db_errcall_fcn</CODE> - the application-specified error reporting function. The function takes two parameters: <p>The <b>errpfx</b> parameter is the prefix string (as previously set by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>). <p>The <b>msg</b> parameter is the error message string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_errpfx()"><!-- --></A><H3>
+get_errpfx</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_errpfx</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getErrorPrefix()"><!-- --></A><H3>
+getErrorPrefix</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getErrorPrefix</B>()</PRE>
+<DL>
+<DD>The Db.getErrorPrefix method returns the error prefix.</p> <p>The Db.getErrorPrefix method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getErrorPrefix method returns the error prefix.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_errpfx(java.lang.String)"><!-- --></A><H3>
+set_errpfx</H3>
+<PRE>
+public void <B>set_errpfx</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorPrefix(java.lang.String)"><!-- --></A><H3>
+setErrorPrefix</H3>
+<PRE>
+public void <B>setErrorPrefix</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</PRE>
+<DL>
+<DD>Set the prefix string that appears before error messages issued by Berkeley DB.</p> <p>For <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles opened inside of Berkeley DB environments, calling the Db.setErrorPrefix method affects the entire environment and is equivalent to calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A> method.</p> <p>The Db.setErrorPrefix method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>errpfx</CODE> - the application-specified error prefix for additional error messages.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_error_stream(java.io.OutputStream)"><!-- --></A><H3>
+set_error_stream</H3>
+<PRE>
+public void <B>set_error_stream</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorStream(java.io.OutputStream)"><!-- --></A><H3>
+setErrorStream</H3>
+<PRE>
+public void <B>setErrorStream</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</PRE>
+<DL>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown. In some cases, however, the error information known to the Java layer may be insufficient to completely describe the cause of the error, especially during initial application debugging.</p> <p>The <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> and Db.setErrorStream methods are used to enhance the mechanism for reporting error messages to the application by setting a OutputStream to be used for displaying additional Berkeley DB error messages. In some cases, when an error occurs, Berkeley DB will output an additional error message to the specified stream.</p> <p>The error message will consist of the prefix string and a colon ("<b>:</b>") (if a prefix string was previously specified using <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>), an error string, and a trailing &lt;newline&gt; character.</p> <p>Alternatively, you can use the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> method to capture the additional error information in a way that does not use output streams. You should not mix these approaches. </p> <p>This error-logging enhancement does not slow performance or significantly increase application size, and may be run during normal operation as well as during application debugging.</p> <p>For <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles opened inside of Berkeley DB environments, calling the Db.setErrorStream method affects the entire environment and is equivalent to calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> method.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>stream</CODE> - the application-specified output stream to be used for additional error information.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_feedback(com.sleepycat.db.DbFeedback)"><!-- --></A><H3>
+set_feedback</H3>
+<PRE>
+public void <B>set_feedback</B>(<A HREF="../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A>&nbsp;feedback)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPanicHandler(com.sleepycat.db.DbPanicHandler)"><!-- --></A><H3>
+setPanicHandler</H3>
+<PRE>
+public void <B>setPanicHandler</B>(<A HREF="../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory). In such cases, the Berkeley DB methods will throw a <A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html"><CODE>DbRunRecoveryException</CODE></A>. It is often easier to simply exit the application when such errors occur rather than gracefully return up the stack. The Db.setPanic method specifies a function to be called when <A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html"><CODE>DbRunRecoveryException</CODE></A> is about to be thrown from a Berkeley DB method.</p> <p>For <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles opened inside of Berkeley DB environments, calling the Db.setPanic method affects the entire environment and is equivalent to calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)"><CODE>DbEnv.setPanicHandler</CODE></A> method.</p> <p>The Db.setPanic method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db_panic_fcn</CODE> - the application-specified function called in the case of a database environment panic. The function takes two arguments: <p>The <b>dbenv</b> parameter is the enclosing database environment handle. <p>The <b>e</b> parameter is the DbException that would have been thrown to the calling method.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><!-- --></A><H3>
+associate</H3>
+<PRE>
+public void <B>associate</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="cursor(com.sleepycat.db.DbTxn, int)"><!-- --></A><H3>
+cursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A> <B>cursor</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.cursor method returns a created database cursor.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>All read operations performed by the cursor may return modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_WRITECURSOR"><CODE>Db.DB_WRITECURSOR</CODE></A><p>Specify that the cursor will be used to update the database. The underlying database environment must have been opened using the <A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_CDB"><CODE><code>Db.DB_INIT_CDB</code></CODE></A> flag. </li></ul><DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null. To transaction-protect cursor operations, cursors must be opened and closed within the context of a transaction, and the <b>txnid</b> parameter specifies the transaction context in which the cursor may be used.
+<DT><B>Returns:</B><DD>The Db.cursor method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.cursor method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.cursor method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+del</H3>
+<PRE>
+public int <B>del</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+delete</H3>
+<PRE>
+public int <B>delete</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.delete method removes key/data pairs from the database. The key/data pair associated with the specified <b>key</b> is discarded from the database. In the presence of duplicate key values, all records associated with the designated key will be discarded.</p> <p>When called on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the Db.delete method deletes the key/data pair from the primary database and all secondary indices.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.delete call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. </li></ul><DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, (other than by specifying the Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Db.delete method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the specified key is not in the database. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Db.delete method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if the database is a Queue or Recno database and the specified key exists, but was never explicitly created by the application or was later deleted. </li></ul>Unless otherwise specified, the Db.delete method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.delete method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: An attempt was made to modify a read-only database.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.delete method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.delete method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.delete method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="err(int, java.lang.String)"><!-- --></A><H3>
+err</H3>
+<PRE>
+public void <B>err</B>(int&nbsp;error,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</PRE>
+<DL>
+<DD>The <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A>, <A HREF="../../../com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A>, Db.err and Db.errx methods provide error-messaging functionality for applications written using the Berkeley DB library.</p> <p>The <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A> method constructs an error message consisting of the following elements:</p> <blockquote> <p>If no error callback function has been set using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> method, any prefix string specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A> method, followed by two separating characters: a colon and a &lt;space&gt; character. <p> <p>Two separating characters: a colon and a &lt;space&gt; character. <p>The standard system or Berkeley DB library error string associated with the <b>error</b> value, as returned by the <A HREF="../../../com/sleepycat/db/DbEnv.html#strerror(int)"><CODE>DbEnv.strerror</CODE></A> method. </blockquote> <p>This constructed error message is then handled as follows:</p> <blockquote><p>If an error callback function has been set (see <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>Db.setErrorHandler</CODE></A> and <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A>), that function is called with two parameters: any prefix string specified (see <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> and <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>) and the error message.</p> <p>If an OutputStream has been set (see <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A>), the error message is written to that stream.</p> <p>If none of these output options has been configured, the error message is written to System.err, the standard error output stream.</p></blockquote>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>error</CODE> - the error value for which the <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A> and Db.err methods will display a explanatory string.<DD><CODE>message</CODE> - an error message to display.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="errx(java.lang.String)"><!-- --></A><H3>
+errx</H3>
+<PRE>
+public void <B>errx</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</PRE>
+<DL>
+<DD>The <A HREF="../../../com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A> and Db.errx methods perform identically to the <A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A> and Db.err methods, except that they do not append the final separator characters and standard error string to the error message.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>message</CODE> - an error message to display.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.get method retrieves key/data pairs from the database. The byte array and length of the data associated with the specified <b>key</b> are returned in the structure to which <b>data</b> refers.</p> <p>In the presence of duplicate key values, Db.get will return the first data item for the designated key. Duplicates are sorted by insert order, except where this order has been overridden by cursor operations. <b>Retrieval of duplicates requires the use of cursor operations.</b> See <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> for details.</p> <p>When called on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the Db.get method returns the key from the secondary index and the data item from the primary database. In addition, the second method signature returns the key from the primary database. In databases that are not secondary indices, the second method signature will always fail.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to 0 or one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME"><CODE>Db.DB_CONSUME</CODE></A><p>Return the record number and data from the available record closest to the head of the queue, and delete the record. The cursor will be positioned on the deleted record. The record number will be returned in <b>key</b>, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. The data will be returned in the <b>data</b> parameter. A record is available if it is not deleted and is not currently locked. The underlying database must be of type Queue for <code>Db.DB_CONSUME</code> to be specified. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME_WAIT"><CODE>Db.DB_CONSUME_WAIT</CODE></A><p>The <code>Db.DB_CONSUME_WAIT</code> flag is the same as the <code>Db.DB_CONSUME</code> flag, except that if the Queue database is empty, the thread of control will wait until there is data in the queue before returning. The underlying database must be of type Queue for <code>Db.DB_CONSUME_WAIT</code> to be specified. <p>If lock or transaction timeouts have been specified, the Db.get method with the <code>Db.DB_CONSUME_WAIT</code> flag may return <a href="../../../../ref/program/errorret.html#DB_LOCK_NOTGRANTED"><code>Db.DB_LOCK_NOTGRANTED</code></a>. This failure, by itself, does not require the enclosing transaction be aborted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH"><CODE>Db.DB_GET_BOTH</CODE></A><p>Retrieve the key/data pair only if both the key and data match the arguments. <p>When used with the second method signature version of this method on a secondary index handle, return the secondary key/primary key/data tuple only if both the primary and secondary keys match the arguments. It is an error to use the <code>Db.DB_GET_BOTH</code> flag with the first method signature version of this method and a secondary index handle.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO"><CODE>Db.DB_SET_RECNO</CODE></A><p>Retrieve the specified numbered key/data pair from a database. Upon return, both the <b>key</b> and <b>data</b> items will have been filled in. <p>The <b>data</b> field of the specified <b>key</b> must be a byte array large enough to hold a logical record number (that is, an int). This record number determines the record to be retrieved. <p>For <code>Db.DB_SET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the DB_RECNUM flag.</p></p> </li></ul>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.get call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. This flag may only be specified with the <code>Db.DB_CONSUME</code> and <code>Db.DB_CONSUME_WAIT</code> flags. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>Read modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A><p>Return multiple data items in the buffer to which the <b>data</b> parameter refers. <p>In the case of Btree or Hash databases, all of the data items associated with the specified key are entered into the buffer. In the case of Queue or Recno databases, all of the data items in the database, starting at, and subsequent to, the specified key, are entered into the buffer.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The <code>Db.DB_MULTIPLE</code> flag may only be used alone, or with the <code>Db.DB_GET_BOTH</code> and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> <p>See <A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><CODE>DbMultipleDataIterator</CODE></A> for more information.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE>Db.DB_RMW</CODE></A><p>Acquire write locks instead of read locks when doing the retrieval. Setting this flag can eliminate deadlock during a read-modify-write cycle by acquiring the write lock during the read part of the cycle so that another thread of control acquiring a read lock for the same item, in its own read-modify-write cycle, will not result in deadlock. <p>Because the Db.get method will not hold locks across Berkeley DB calls in non-transactional operations, the <A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE><code>Db.DB_RMW</code></CODE></A> flag to the Db.get call is meaningful only in the presence of transactions.</p> </li></ul><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Db.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the specified key is not in the database. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Db.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if the database is a Queue or Recno database and the specified key exists, but was never explicitly created by the application or was later deleted. </li></ul>Unless otherwise specified, the Db.get method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.get method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If the Db.DB_CONSUME_WAIT flag was specified, lock or transaction timers were configured and the lock could not be granted before the wait-time expired, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.get method will fail and throw a IllegalArgumentException exception if a record number of 0 was specified; the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag was specified to the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method and none of the <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_MALLOC"><CODE>Db.DB_DBT_MALLOC</CODE></A>, <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_REALLOC"><CODE>Db.DB_DBT_REALLOC</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE>Db.DB_DBT_USERMEM</CODE></A> flags were set in the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>; the second method signature was called with a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle that does not refer to a secondary index; or if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the requested item could not be returned due to insufficient memory, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_byteswapped()"><!-- --></A><H3>
+get_byteswapped</H3>
+<PRE>
+public boolean <B>get_byteswapped</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#isByteSwapped()"><CODE>isByteSwapped()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isByteSwapped()"><!-- --></A><H3>
+isByteSwapped</H3>
+<PRE>
+public boolean <B>isByteSwapped</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.isByteSwapped method returns false if the underlying database files were created on an architecture of the same byte order as the current one, and true if they were not (that is, big-endian on a little-endian machine, or vice versa). This information may be used to determine whether application data needs to be adjusted for this architecture or not.</p> <p>The Db.isByteSwapped method may not be called before the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method has been called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.isByteSwapped method returns false if the underlying database files were created on an architecture of the same byte order as the current one, and true if they were not.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.isByteSwapped method will fail and throw a IllegalArgumentException exception if the method was called before <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_cachesize()"><!-- --></A><H3>
+get_cachesize</H3>
+<PRE>
+public long <B>get_cachesize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCacheSize()"><!-- --></A><H3>
+getCacheSize</H3>
+<PRE>
+public long <B>getCacheSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getCacheSize method returns the size of the cache.</p> <p>The Db.getCacheSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getCacheSize method returns the size of the cache.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_cachesize_ncache()"><!-- --></A><H3>
+get_cachesize_ncache</H3>
+<PRE>
+public int <B>get_cachesize_ncache</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCacheSizeNcache()"><!-- --></A><H3>
+getCacheSizeNcache</H3>
+<PRE>
+public int <B>getCacheSizeNcache</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getCacheSizeNcache method returns the number of caches.</p> <p>The DbEnv.getCacheSizeNcache method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getCacheSizeNcache method returns the number of caches.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_filename()"><!-- --></A><H3>
+get_filename</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_filename</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getFileName()"><CODE>getFileName()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFileName()"><!-- --></A><H3>
+getFileName</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getFileName</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getFileName method returns the current filename.</p> <p>The Db.getFileName method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getFileName method returns the current filename.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_dbname()"><!-- --></A><H3>
+get_dbname</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_dbname</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDatabaseName()"><CODE>getDatabaseName()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDatabaseName()"><!-- --></A><H3>
+getDatabaseName</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getDatabaseName</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getDatabaseName method returns the current database name.</p> <p>The Db.getDatabaseName method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getDatabaseName method returns the current database name.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_encrypt_flags()"><!-- --></A><H3>
+get_encrypt_flags</H3>
+<PRE>
+public int <B>get_encrypt_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEncryptFlags()"><!-- --></A><H3>
+getEncryptFlags</H3>
+<PRE>
+public int <B>getEncryptFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getEncryptFlags method returns the encryption flags.</p> <p>The Db.getEncryptFlags method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getEncryptFlags method returns the encryption flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_flags()"><!-- --></A><H3>
+get_flags</H3>
+<PRE>
+public int <B>get_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getFlags()"><CODE>getFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFlags()"><!-- --></A><H3>
+getFlags</H3>
+<PRE>
+public int <B>getFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getFlags method returns the current flags.</p> <p>The Db.getFlags method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getFlags method returns the current flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lorder()"><!-- --></A><H3>
+get_lorder</H3>
+<PRE>
+public int <B>get_lorder</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getByteOrder()"><CODE>getByteOrder()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getByteOrder()"><!-- --></A><H3>
+getByteOrder</H3>
+<PRE>
+public int <B>getByteOrder</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getByteOrder method returns the database byte order; a byte order of 4,321 indicates a big endian order, and a byte order of 1,234 indicates a little endian order.</p> <p>The Db.getByteOrder method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getByteOrder method returns the database byte order; a byte order of 4,321 indicates a big endian order, and a byte order of 1,234 indicates a little endian order.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_mpf()"><!-- --></A><H3>
+get_mpf</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A> <B>get_mpf</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.get_mpf method returns the handle for the cache file underlying the database.</p> <p>The Db.get_mpf method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.get_mpf method returns the handle for the cache file underlying the database.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_open_flags()"><!-- --></A><H3>
+get_open_flags</H3>
+<PRE>
+public int <B>get_open_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOpenFlags()"><!-- --></A><H3>
+getOpenFlags</H3>
+<PRE>
+public int <B>getOpenFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getOpenFlags method returns the current open method flags.</p> <p>The Db.getOpenFlags method may not be called before the Db.open method has been called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getOpenFlags method returns the current open method flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_pagesize()"><!-- --></A><H3>
+get_pagesize</H3>
+<PRE>
+public int <B>get_pagesize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getPageSize()"><CODE>getPageSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPageSize()"><!-- --></A><H3>
+getPageSize</H3>
+<PRE>
+public int <B>getPageSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getPageSize method returns the page size.</p> <p>The Db.getPageSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getPageSize method returns the page size.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_bt_minkey()"><!-- --></A><H3>
+get_bt_minkey</H3>
+<PRE>
+public int <B>get_bt_minkey</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getBtreeMinKey()"><CODE>getBtreeMinKey()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBtreeMinKey()"><!-- --></A><H3>
+getBtreeMinKey</H3>
+<PRE>
+public int <B>getBtreeMinKey</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getBtreeMinKey method returns the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</p> <p>The Db.getBtreeMinKey method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getBtreeMinKey method returns the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_h_ffactor()"><!-- --></A><H3>
+get_h_ffactor</H3>
+<PRE>
+public int <B>get_h_ffactor</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getHashFillFactor()"><CODE>getHashFillFactor()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getHashFillFactor()"><!-- --></A><H3>
+getHashFillFactor</H3>
+<PRE>
+public int <B>getHashFillFactor</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getHashFillFactor method returns the hash table density.</p> <p>The Db.getHashFillFactor method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getHashFillFactor method returns the hash table density.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_h_nelem()"><!-- --></A><H3>
+get_h_nelem</H3>
+<PRE>
+public int <B>get_h_nelem</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getHashNumElements()"><CODE>getHashNumElements()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getHashNumElements()"><!-- --></A><H3>
+getHashNumElements</H3>
+<PRE>
+public int <B>getHashNumElements</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getHashNumElements method returns the estimate of the final size of the hash table.</p> <p>The Db.getHashNumElements method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getHashNumElements method returns the estimate of the final size of the hash table.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_re_delim()"><!-- --></A><H3>
+get_re_delim</H3>
+<PRE>
+public int <B>get_re_delim</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordDelimiter()"><CODE>getRecordDelimiter()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRecordDelimiter()"><!-- --></A><H3>
+getRecordDelimiter</H3>
+<PRE>
+public int <B>getRecordDelimiter</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getRecordDelimiter method returns the delimiting byte.</p> <p>The Db.getRecordDelimiter method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getRecordDelimiter method returns the delimiting byte.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_re_len()"><!-- --></A><H3>
+get_re_len</H3>
+<PRE>
+public int <B>get_re_len</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordLength()"><CODE>getRecordLength()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRecordLength()"><!-- --></A><H3>
+getRecordLength</H3>
+<PRE>
+public int <B>getRecordLength</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getRecordLength method returns the record length.</p> <p>The Db.getRecordLength method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getRecordLength method returns the record length.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_re_pad()"><!-- --></A><H3>
+get_re_pad</H3>
+<PRE>
+public int <B>get_re_pad</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordPad()"><CODE>getRecordPad()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRecordPad()"><!-- --></A><H3>
+getRecordPad</H3>
+<PRE>
+public int <B>getRecordPad</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getRecordPad method returns the pad character.</p> <p>The Db.getRecordPad method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getRecordPad method returns the pad character.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_re_source()"><!-- --></A><H3>
+get_re_source</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_re_source</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getRecordSource()"><CODE>getRecordSource()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRecordSource()"><!-- --></A><H3>
+getRecordSource</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getRecordSource</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getRecordSource method returns the source file.</p> <p>The Db.getRecordSource method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getRecordSource method returns the source file.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_q_extentsize()"><!-- --></A><H3>
+get_q_extentsize</H3>
+<PRE>
+public int <B>get_q_extentsize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getQueueExtentSize()"><CODE>getQueueExtentSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getQueueExtentSize()"><!-- --></A><H3>
+getQueueExtentSize</H3>
+<PRE>
+public int <B>getQueueExtentSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getQueueExtentSize method returns the number of pages in an extent.</p> <p>The Db.getQueueExtentSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getQueueExtentSize method returns the number of pages in an extent.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_flags_raw()"><!-- --></A><H3>
+get_flags_raw</H3>
+<PRE>
+public int <B>get_flags_raw</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_transactional()"><!-- --></A><H3>
+get_transactional</H3>
+<PRE>
+public boolean <B>get_transactional</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#isTransactional()"><CODE>isTransactional()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTransactional()"><!-- --></A><H3>
+isTransactional</H3>
+<PRE>
+public boolean <B>isTransactional</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.isTransactional method returns true if the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle has been opened in a transactional mode.</p> <p>The Db.isTransactional method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.isTransactional method returns true if the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle has been opened in a transactional mode.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_type()"><!-- --></A><H3>
+get_type</H3>
+<PRE>
+public int <B>get_type</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#getDbType()"><CODE>getDbType()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDbType()"><!-- --></A><H3>
+getDbType</H3>
+<PRE>
+public int <B>getDbType</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.getDbType method returns the type of the underlying access method (and file format). The type value is one of Db.DB_BTREE, Db.DB_HASH, Db.DB_RECNO, or Db.DB_QUEUE. This value may be used to determine the type of the database after a return from <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> with the <b>type</b> parameter set to Db.DB_UNKNOWN.</p> <p>The Db.getDbType method may not be called before the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method has been called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The Db.getDbType method returns the type of the underlying access method (and file format).</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.getDbType method will fail and throw a IllegalArgumentException exception if the method was called before <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="join(com.sleepycat.db.Dbc[], int)"><!-- --></A><H3>
+join</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A> <B>join</B>(<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A>[]&nbsp;curslist,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices. For information on how to organize your data to use this functionality, see <a href="../../../../ref/am/join.html">Equality join</a>.</p> <p>The Db.join method method is called using the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle of the primary database.</p> <p>The join cursor supports only the <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> and <b>dbc_close</b> cursor functions:</p> <p>Iterates over the values associated with the keys to which each item in <b>curslist</b> was initialized. Any data value that appears in all items specified by the <b>curslist</b> parameter is then used as a key into the <b>primary</b>, and the key/data pair found in the <b>primary</b> is returned. The <b>flags</b> parameter must be set to 0 or the following value: In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter: Close the returned cursor and release all resources. (Closing the cursors in <b>curslist</b> is the responsibility of the caller.)
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>curslist</CODE> - The <b>curslist</b> parameter contains a null terminated array of cursors. Each cursor must have been initialized to refer to the key on which the underlying database should be joined. Typically, this initialization is done by a <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> call with the <A HREF="../../../com/sleepycat/db/Db.html#DB_SET"><CODE>Db.DB_SET</CODE></A> flag specified. Once the cursors have been passed as part of a <b>curslist</b>, they should not be accessed or modified until the newly created join cursor has been closed, or else inconsistent results may be returned. <p>Joined values are retrieved by doing a sequential iteration over the first cursor in the <b>curslist</b> parameter, and a nested iteration over each secondary cursor in the order they are specified in the <b>curslist</b> parameter. This requires database traversals to search for the current datum in all the cursors after the first. For this reason, the best join performance normally results from sorting the cursors from the one that refers to the least number of data items to the one that refers to the most. By default, Db.join does this sort on behalf of its caller.</p> <p>For the returned join cursor to be used in a transaction-protected manner, the cursors listed in <b>curslist</b> must have been created within the context of the same transaction.</p><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_JOIN_NOSORT"><CODE>Db.DB_JOIN_NOSORT</CODE></A><p>Do not sort the cursors based on the number of data items to which they refer. If the data are structured so that cursors with many data items also share many common elements, higher performance will result from listing those cursors before cursors with fewer data items; that is, a sort order other than the default. The <code>Db.DB_JOIN_NOSORT</code> flag permits applications to perform join optimization prior to calling Db.join. </li></ul>
+<DT><B>Returns:</B><DD>The Db.join method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.join method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.join method will fail and throw a IllegalArgumentException exception if cursor methods other than <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#close()"><CODE>Dbc.close</CODE></A> were called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><!-- --></A><H3>
+key_range</H3>
+<PRE>
+public void <B>key_range</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><!-- --></A><H3>
+keyRange</H3>
+<PRE>
+public void <B>keyRange</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key. The underlying database must be of type Btree.</p> <p>The Db.keyRange method fills in a DbKeyRange object. The following data fields are available from the DbKeyRange object:</p> Values are in the range of 0 to 1; for example, if the field <b>less</b> is 0.05, 5% of the keys in the database are less than the <b>key</b> parameter. The value for <b>equal</b> will be zero if there is no matching key, and will be non-zero otherwise.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>key_range</CODE> - The estimates are returned in the <b>key_range</b> parameter, which contains three elements of type double: <b>less</b>, <b>equal</b>, and <b>greater</b>. Values are in the range of 0 to 1; for example, if the field <b>less</b> is 0.05, 5% of the keys in the database are less than the <b>key</b> parameter. The value for <b>equal</b> will be zero if there is no matching key, and will be non-zero otherwise.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null. The Db.keyRange method does not retain the locks it acquires for the life of the transaction, so estimates may not be repeatable.<DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.keyRange method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.keyRange method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.keyRange method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.keyRange method will fail and throw a IllegalArgumentException exception if the underlying database was not of type Btree; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.get method retrieves key/data pairs from the database. The byte array and length of the data associated with the specified <b>key</b> are returned in the structure to which <b>data</b> refers.</p> <p>In the presence of duplicate key values, Db.get will return the first data item for the designated key. Duplicates are sorted by insert order, except where this order has been overridden by cursor operations. <b>Retrieval of duplicates requires the use of cursor operations.</b> See <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> for details.</p> <p>When called on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the Db.get method returns the key from the secondary index and the data item from the primary database. In addition, the second method signature returns the key from the primary database. In databases that are not secondary indices, the second method signature will always fail.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to 0 or one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME"><CODE>Db.DB_CONSUME</CODE></A><p>Return the record number and data from the available record closest to the head of the queue, and delete the record. The cursor will be positioned on the deleted record. The record number will be returned in <b>key</b>, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. The data will be returned in the <b>data</b> parameter. A record is available if it is not deleted and is not currently locked. The underlying database must be of type Queue for <code>Db.DB_CONSUME</code> to be specified. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CONSUME_WAIT"><CODE>Db.DB_CONSUME_WAIT</CODE></A><p>The <code>Db.DB_CONSUME_WAIT</code> flag is the same as the <code>Db.DB_CONSUME</code> flag, except that if the Queue database is empty, the thread of control will wait until there is data in the queue before returning. The underlying database must be of type Queue for <code>Db.DB_CONSUME_WAIT</code> to be specified. <p>If lock or transaction timeouts have been specified, the Db.get method with the <code>Db.DB_CONSUME_WAIT</code> flag may return <a href="../../../../ref/program/errorret.html#DB_LOCK_NOTGRANTED"><code>Db.DB_LOCK_NOTGRANTED</code></a>. This failure, by itself, does not require the enclosing transaction be aborted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH"><CODE>Db.DB_GET_BOTH</CODE></A><p>Retrieve the key/data pair only if both the key and data match the arguments. <p>When used with the second method signature version of this method on a secondary index handle, return the secondary key/primary key/data tuple only if both the primary and secondary keys match the arguments. It is an error to use the <code>Db.DB_GET_BOTH</code> flag with the first method signature version of this method and a secondary index handle.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO"><CODE>Db.DB_SET_RECNO</CODE></A><p>Retrieve the specified numbered key/data pair from a database. Upon return, both the <b>key</b> and <b>data</b> items will have been filled in. <p>The <b>data</b> field of the specified <b>key</b> must be a byte array large enough to hold a logical record number (that is, an int). This record number determines the record to be retrieved. <p>For <code>Db.DB_SET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the DB_RECNUM flag.</p></p> </li></ul>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.get call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. This flag may only be specified with the <code>Db.DB_CONSUME</code> and <code>Db.DB_CONSUME_WAIT</code> flags. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>Read modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A><p>Return multiple data items in the buffer to which the <b>data</b> parameter refers. <p>In the case of Btree or Hash databases, all of the data items associated with the specified key are entered into the buffer. In the case of Queue or Recno databases, all of the data items in the database, starting at, and subsequent to, the specified key, are entered into the buffer.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The <code>Db.DB_MULTIPLE</code> flag may only be used alone, or with the <code>Db.DB_GET_BOTH</code> and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> <p>See <A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><CODE>DbMultipleDataIterator</CODE></A> for more information.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE>Db.DB_RMW</CODE></A><p>Acquire write locks instead of read locks when doing the retrieval. Setting this flag can eliminate deadlock during a read-modify-write cycle by acquiring the write lock during the read part of the cycle so that another thread of control acquiring a read lock for the same item, in its own read-modify-write cycle, will not result in deadlock. <p>Because the Db.get method will not hold locks across Berkeley DB calls in non-transactional operations, the <A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE><code>Db.DB_RMW</code></CODE></A> flag to the Db.get call is meaningful only in the presence of transactions.</p> </li></ul><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>pkey</CODE> - the return key from the primary database.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Db.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the specified key is not in the database. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Db.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if the database is a Queue or Recno database and the specified key exists, but was never explicitly created by the application or was later deleted. </li></ul>Unless otherwise specified, the Db.get method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.get method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If the Db.DB_CONSUME_WAIT flag was specified, lock or transaction timers were configured and the lock could not be granted before the wait-time expired, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.get method will fail and throw a IllegalArgumentException exception if a record number of 0 was specified; the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag was specified to the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method and none of the <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_MALLOC"><CODE>Db.DB_DBT_MALLOC</CODE></A>, <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_REALLOC"><CODE>Db.DB_DBT_REALLOC</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE>Db.DB_DBT_USERMEM</CODE></A> flags were set in the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>; the second method signature was called with a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle that does not refer to a secondary index; or if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the requested item could not be returned due to insufficient memory, the Db.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.put method stores key/data pairs in the database. The default behavior of the Db.put function is to enter the new key/data pair, replacing any previously existing key if duplicates are disallowed, or adding a duplicate data item if duplicates are allowed. If the database supports duplicates, the Db.put method adds the new data value at the end of the duplicate set. If the database supports sorted duplicates, the new data value is inserted at the correct sorted location.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_APPEND"><CODE>Db.DB_APPEND</CODE></A><p>Append the key/data pair to the end of the database. For the <code>Db.DB_APPEND</code> flag to be specified, the underlying database must be a Queue or Recno database. The record number allocated to the record is returned in the specified <b>key</b>. <p>There is a minor behavioral difference between the Recno and Queue access methods for the <code>Db.DB_APPEND</code> flag. If a transaction enclosing a Db.put operation with the <code>Db.DB_APPEND</code> flag aborts, the record number may be decremented (and later reallocated by a subsequent <code>Db.DB_APPEND</code> operation) by the Recno access method, but will not be decremented or reallocated by the Queue access method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NODUPDATA"><CODE>Db.DB_NODUPDATA</CODE></A><p>In the case of the Btree and Hash access methods, enter the new key/data pair only if it does not already appear in the database. <p>The <code>Db.DB_NODUPDATA</code> flag may only be specified if the underlying database has been configured to support sorted duplicates. The <code>Db.DB_NODUPDATA</code> flag may not be specified to the Queue or Recno access methods.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOOVERWRITE"><CODE>Db.DB_NOOVERWRITE</CODE></A><p>Enter the new key/data pair only if the key does not already appear in the database. The Db.put method call with the <code>Db.DB_NOOVERWRITE</code> flag set will fail if the key already exists in the database, even if the database supports duplicates. </li></ul>In addition, the following flag may be set by bitwise inclusively <b>OR</b>'ing it into the <b>flags</b> parameter: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.put call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. </li></ul><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, (other than by specifying the Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Returns:</B><DD>Unless otherwise specified, the Db.put method throws an exception that encapsulates a non-zero error value on failure. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST"><CODE>DB_KEYEXIST</CODE></A><p>The Db.put method will return <A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST"><CODE><code>Db.DB_KEYEXIST</code></CODE></A> if <code>Db.DB_NODUPDATA</code> is set and the key/data pair already appears in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST"><CODE>DB_KEYEXIST</CODE></A><p>The Db.put method will return <A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST"><CODE><code>Db.DB_KEYEXIST</code></CODE></A> if <code>Db.DB_NOOVERWRITE</code> is set and the key already appears in the database. </li></ul></p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.put method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to modify a read-only database. A btree exceeded the maximum btree depth (255).
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.put method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.put method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.put method will fail and throw a IllegalArgumentException exception if a record number of 0 was specified; an attempt was made to add a record to a fixed-length database that was too large to fit; an attempt was made to do a partial put; an attempt was made to add a record to a secondary index; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_append_recno(com.sleepycat.db.DbAppendRecno)"><!-- --></A><H3>
+set_append_recno</H3>
+<PRE>
+public void <B>set_append_recno</B>(<A HREF="../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>setAppendRecno(DbAppendRecno)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setAppendRecno(com.sleepycat.db.DbAppendRecno)"><!-- --></A><H3>
+setAppendRecno</H3>
+<PRE>
+public void <B>setAppendRecno</B>(<A HREF="../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_bt_compare(com.sleepycat.db.DbBtreeCompare)"><!-- --></A><H3>
+set_bt_compare</H3>
+<PRE>
+public void <B>set_bt_compare</B>(<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>setBtreeCompare(DbBtreeCompare)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><!-- --></A><H3>
+setBtreeCompare</H3>
+<PRE>
+public void <B>setBtreeCompare</B>(<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_bt_maxkey(int)"><!-- --></A><H3>
+set_bt_maxkey</H3>
+<PRE>
+public void <B>set_bt_maxkey</B>(int&nbsp;maxkey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_bt_minkey(int)"><!-- --></A><H3>
+set_bt_minkey</H3>
+<PRE>
+public void <B>set_bt_minkey</B>(int&nbsp;bt_minkey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreeMinKey(int)"><CODE>setBtreeMinKey(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBtreeMinKey(int)"><!-- --></A><H3>
+setBtreeMinKey</H3>
+<PRE>
+public void <B>setBtreeMinKey</B>(int&nbsp;bt_minkey)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</p> <p>This value is used to determine if key or data items will be stored on overflow pages instead of Btree leaf pages. For more information on the specific algorithm used, see <a href="../../../../ref/am_conf/bt_minkey.html">Minimum keys per page</a>. The <b>bt_minkey</b> value specified must be at least 2; if <b>bt_minkey</b> is not explicitly set, a value of 2 is used.</p> <p>The Db.setBtreeMinKey method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setBtreeMinKey method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setBtreeMinKey will be ignored. </p> <hr size=1 noshade> <h3>Description: Db.getBtreeMinKey</h3>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bt_minkey</CODE> - the minimum number of key/data pairs intended to be stored on any single Btree leaf page.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setBtreeMinKey method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_bt_prefix(com.sleepycat.db.DbBtreePrefix)"><!-- --></A><H3>
+set_bt_prefix</H3>
+<PRE>
+public void <B>set_bt_prefix</B>(<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>setBtreePrefix(DbBtreePrefix)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><!-- --></A><H3>
+setBtreePrefix</H3>
+<PRE>
+public void <B>setBtreePrefix</B>(<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_cachesize(long, int)"><!-- --></A><H3>
+set_cachesize</H3>
+<PRE>
+public void <B>set_cachesize</B>(long&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCacheSize(long, int)"><!-- --></A><H3>
+setCacheSize</H3>
+<PRE>
+public void <B>setCacheSize</B>(long&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the shared memory buffer pool -- that is, the cache. The cache should be the size of the normal working data set of the application, with some small amount of additional memory for unusual situations. (Note: the working set is not the same as the number of pages accessed simultaneously, and is usually much larger.)</p> <p>The default cache size is 256KB, and may not be specified as less than 20KB. Any cache size less than 500MB is automatically increased by 25% to account for buffer pool overhead; cache sizes larger than 500MB are used as specified. The current maximum size of a single cache is 4GB. (All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.) For information on tuning the Berkeley DB cache size, see <a href="../../../../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p> <p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large enough they cannot be allocated contiguously on some architectures. For example, some releases of Solaris limit the amount of memory that may be allocated contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will be allocated contiguously in memory. If it is greater than 1, the cache will be broken up into <b>ncache</b> equally sized, separate pieces of memory.</p> <p>Because databases opened within Berkeley DB environments use the cache specified to the environment, it is an error to attempt to set a cache in a database created within an environment.</p> <p>The Db.setCacheSize method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The size of the cache in bytes.<DD><CODE>ncache</CODE> - the number of caches to create.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setCacheSize method will fail and throw a IllegalArgumentException exception if the specified cache size was impossibly small; called in a database environment; the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_dup_compare(com.sleepycat.db.DbDupCompare)"><!-- --></A><H3>
+set_dup_compare</H3>
+<PRE>
+public void <B>set_dup_compare</B>(<A HREF="../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>setDuplicateCompare(DbDupCompare)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><!-- --></A><H3>
+setDuplicateCompare</H3>
+<PRE>
+public void <B>setDuplicateCompare</B>(<A HREF="../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_encrypt(java.lang.String, int)"><!-- --></A><H3>
+set_encrypt</H3>
+<PRE>
+public void <B>set_encrypt</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setEncrypted(java.lang.String, int)"><!-- --></A><H3>
+setEncrypted</H3>
+<PRE>
+public void <B>setEncrypted</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the password used by the Berkeley DB library to perform encryption and decryption.</p> <p>Because databases opened within Berkeley DB environments use the password specified to the environment, it is an error to attempt to set a password in a database created within an environment.</p> <p>The Db.setEncrypted method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ENCRYPT_AES"><CODE>Db.DB_ENCRYPT_AES</CODE></A><p>Use the Rijndael/AES (also known as the Advanced Encryption Standard and Federal Information Processing Standard (FIPS) 197) algorithm for encryption or decryption. </li></ul><DD><CODE>passwd</CODE> - the password used to perform encryption and decryption.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.setEncrypted method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>Cryptography is not available in this Berkeley DB release.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setEncrypted method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><!-- --></A><H3>
+setFeedbackHandler</H3>
+<PRE>
+public void <B>setFeedbackHandler</B>(<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>&nbsp;db_feedback_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_flags(int)"><!-- --></A><H3>
+set_flags</H3>
+<PRE>
+public void <B>set_flags</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFlags(int)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Configure a database. Calling Db.setFlags is additive; there is no way to clear flags.</p> <p>The Db.setFlags method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <h3>General</h3> <p>The following flags may be specified for any Berkeley DB access method:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CHKSUM"><CODE>Db.DB_CHKSUM</CODE></A><p>Do checksum verification of pages read into the cache from the backing filestore. Berkeley DB uses the SHA1 Secure Hash Algorithm if encryption is configured and a general hash algorithm if it is not. <p>Calling Db.setFlags with the <code>Db.DB_CHKSUM</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle).</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_CHKSUM flag will be ignored.</p> If creating additional databases in a file, the checksum behavior specified must be consistent with the existing databases in the file or an error will be returned. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ENCRYPT"><CODE>Db.DB_ENCRYPT</CODE></A><p>Encrypt the database using the cryptographic password specified to the <A HREF="../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>DbEnv.setEncrypted</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>Db.setEncrypted</CODE></A> methods. <p>Calling Db.setFlags with the <code>Db.DB_ENCRYPT</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle).</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_ENCRYPT flag must be the same as the existing database or an error will be returned. </p> If creating additional databases in a file, the encryption behavior specified must be consistent with the existing databases in the file or an error will be returned. <p>Encrypted databases are not portable between machines of different byte orders, that is, encrypted databases created on big-endian machines cannot be read on little-endian machines, and vice versa.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOT_DURABLE"><CODE>Db.DB_TXN_NOT_DURABLE</CODE></A><p>If set, Berkeley DB will not write log records for this database. This means that updates of this database exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the application or system fails, integrity will not persist. The database file must be verified and/or restored from backup after a failure. In order to ensure integrity after application shut down, the database handles must be closed without specifying <A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC"><CODE><code>Db.DB_NOSYNC</code></CODE></A>, or all database changes must be flushed from the database environment cache using the <A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint</CODE></A> method. All database handles for a single physical file must set <code>Db.DB_TXN_NOT_DURABLE</code>, including database handles for different databases in a physical file. <p>Calling Db.setFlags with the <code>Db.DB_TXN_NOT_DURABLE</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle).</p> </li></ul><h3>Btree</h3> <p>The following flags may be specified for the Btree access method:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DUP"><CODE>Db.DB_DUP</CODE></A><p>Permit duplicate data items in the database; that is, insertion when the key of the key/data pair being inserted already exists in the database will be successful. The ordering of duplicates in the database is determined by the order of insertion, unless the ordering is otherwise specified by use of a cursor operation. <p>The <code>Db.DB_DUPSORT</code> flag is preferred to <code>Db.DB_DUP</code> for performance reasons. The <code>Db.DB_DUP</code> flag should only be used by applications wanting to order duplicate data items manually.</p> <p>Calling Db.setFlags with the <code>Db.DB_DUP</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_DUP flag must be the same as the existing database or an error will be returned. </p> <p>It is an error to specify both <code>Db.DB_DUP</code> and <code>Db.DB_RECNUM</code>.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DUPSORT"><CODE>Db.DB_DUPSORT</CODE></A><p>Permit duplicate data items in the database; that is, insertion when the key of the key/data pair being inserted already exists in the database will be successful. The ordering of duplicates in the database is determined by the duplicate comparison function. A default lexical comparison will be used. It is an error to specify both <code>Db.DB_DUPSORT</code> and <code>Db.DB_RECNUM</code>. <p>Calling Db.setFlags with the <code>Db.DB_DUPSORT</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_DUPSORT flag must be the same as the existing database or an error will be returned. </p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE>Db.DB_RECNUM</CODE></A><p>Support retrieval from the Btree using record numbers. For more information, see the <A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO"><CODE><code>Db.DB_SET_RECNO</code></CODE></A> flag to the <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> and <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> methods. <p>Logical record numbers in Btree databases are mutable in the face of record insertion or deletion. See the <code>Db.DB_RENUMBER</code> flag in the Recno access method information for further discussion.</p> <p>Maintaining record counts within a Btree introduces a serious point of contention, namely the page locations where the record counts are stored. In addition, the entire database must be locked during both insertions and deletions, effectively single-threading the database for those operations. Specifying <code>Db.DB_RECNUM</code> can result in serious performance degradation for some applications and data sets.</p> <p>It is an error to specify both <code>Db.DB_DUP</code> and <code>Db.DB_RECNUM</code>.</p> <p>Calling Db.setFlags with the <code>Db.DB_RECNUM</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_RECNUM flag must be the same as the existing database or an error will be returned. </p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REVSPLITOFF"><CODE>Db.DB_REVSPLITOFF</CODE></A><p>Turn off reverse splitting in the Btree. As pages are emptied in a database, the Berkeley DB Btree implementation attempts to coalesce empty pages into higher-level pages in order to keep the database as small as possible and minimize search time. This can hurt performance in applications with cyclical data demands; that is, applications where the database grows and shrinks repeatedly. For example, because Berkeley DB does page-level locking, the maximum level of concurrency in a database of two pages is far smaller than that in a database of 100 pages, so a database that has shrunk to a minimal size can cause severe deadlocking when a new cycle of data insertion begins. <p>Calling Db.setFlags with the <code>Db.DB_REVSPLITOFF</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle).</p> </li></ul><h3>Hash</h3> <p>The following flags may be specified for the Hash access method:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DUP"><CODE>Db.DB_DUP</CODE></A><p>Permit duplicate data items in the database; that is, insertion when the key of the key/data pair being inserted already exists in the database will be successful. The ordering of duplicates in the database is determined by the order of insertion, unless the ordering is otherwise specified by use of a cursor operation. <p>The <code>Db.DB_DUPSORT</code> flag is preferred to <code>Db.DB_DUP</code> for performance reasons. The <code>Db.DB_DUP</code> flag should only be used by applications wanting to order duplicate data items manually.</p> <p>Calling Db.setFlags with the <code>Db.DB_DUP</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_DUP flag must be the same as the existing database or an error will be returned. </p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DUPSORT"><CODE>Db.DB_DUPSORT</CODE></A><p>Permit duplicate data items in the database; that is, insertion when the key of the key/data pair being inserted already exists in the database will be successful. The ordering of duplicates in the database is determined by the duplicate comparison function. A default lexical comparison will be used. It is an error to specify both <code>Db.DB_DUPSORT</code> and <code>Db.DB_RECNUM</code>. <p>Calling Db.setFlags with the <code>Db.DB_DUPSORT</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_DUPSORT flag must be the same as the existing database or an error will be returned. </p> </li></ul><h3>Queue</h3> <p>There are no additional flags that may be specified for the Queue access method.</p> <h3>Recno</h3> <p>The following flags may be specified for the Recno access method:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER"><CODE>Db.DB_RENUMBER</CODE></A><p>Specifying the <code>Db.DB_RENUMBER</code> flag causes the logical record numbers to be mutable, and change as records are added to and deleted from the database. For example, the deletion of record number 4 causes records numbered 5 and greater to be renumbered downward by one. If a cursor was positioned to record number 4 before the deletion, it will refer to the new record number 4, if any such record exists, after the deletion. If a cursor was positioned after record number 4 before the deletion, it will be shifted downward one logical record, continuing to refer to the same record as it did before. <p>Using the <A HREF="../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.put</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.put</CODE></A> interfaces to create new records will cause the creation of multiple records if the record number is more than one greater than the largest record currently in the database. For example, creating record 28, when record 25 was previously the last record in the database, will create records 26 and 27 as well as 28. Attempts to retrieve records that were created in this manner will result in an error return of <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a>.</p> <p>If a created record is not at the end of the database, all records following the new record will be automatically renumbered upward by one. For example, the creation of a new record numbered 8 causes records numbered 8 and greater to be renumbered upward by one. If a cursor was positioned to record number 8 or greater before the insertion, it will be shifted upward one logical record, continuing to refer to the same record as it did before.</p> <p>For these reasons, concurrent access to a Recno database with the <code>Db.DB_RENUMBER</code> flag specified may be largely meaningless, although it is supported.</p> <p>Calling Db.setFlags with the <code>Db.DB_RENUMBER</code> flag affects the database, including all threads of control accessing the database.</p> <p>If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the DB_RENUMBER flag must be the same as the existing database or an error will be returned. </p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SNAPSHOT"><CODE>Db.DB_SNAPSHOT</CODE></A><p>This flag specifies that any specified <b>re_source</b> file be read in its entirety when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called. If this flag is not specified, the <b>re_source</b> file may be read lazily. <p>Calling Db.setFlags with the <code>Db.DB_SNAPSHOT</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle).</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setFlags method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_h_ffactor(int)"><!-- --></A><H3>
+set_h_ffactor</H3>
+<PRE>
+public void <B>set_h_ffactor</B>(int&nbsp;h_ffactor)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>setHashFillFactor(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setHashFillFactor(int)"><!-- --></A><H3>
+setHashFillFactor</H3>
+<PRE>
+public void <B>setHashFillFactor</B>(int&nbsp;h_ffactor)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the desired density within the hash table. If no value is specified, the fill factor will be selected dynamically as pages are filled.</p> <p>The Db.setHashFillFactor method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setHashFillFactor method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setHashFillFactor will be ignored. </p> The density is an approximation of the number of keys allowed to accumulate in any one bucket, determining when the hash table grows or shrinks. If you know the average sizes of the keys and data in your data set, setting the fill factor can enhance performance. A reasonable rule computing fill factor is to set it to the following:</p> <blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>h_ffactor</CODE> - the desired density within the hash table.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setHashFillFactor method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_h_hash(com.sleepycat.db.DbHash)"><!-- --></A><H3>
+set_h_hash</H3>
+<PRE>
+public void <B>set_h_hash</B>(<A HREF="../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>setHash(DbHash)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setHash(com.sleepycat.db.DbHash)"><!-- --></A><H3>
+setHash</H3>
+<PRE>
+public void <B>setHash</B>(<A HREF="../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_h_nelem(int)"><!-- --></A><H3>
+set_h_nelem</H3>
+<PRE>
+public void <B>set_h_nelem</B>(int&nbsp;h_nelem)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setHashNumElements(int)"><CODE>setHashNumElements(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setHashNumElements(int)"><!-- --></A><H3>
+setHashNumElements</H3>
+<PRE>
+public void <B>setHashNumElements</B>(int&nbsp;h_nelem)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set an estimate of the final size of the hash table.</p> <p>In order for the estimate to be used when creating the database, the <A HREF="../../../com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>Db.setHashFillFactor</CODE></A> method must also be called. If the estimate or fill factor are not set or are set too low, hash tables will still expand gracefully as keys are entered, although a slight performance degradation may be noticed.</p> <p>The Db.setHashNumElements method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setHashNumElements method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setHashNumElements will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>h_nelem</CODE> - an estimate of the final size of the hash table.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setHashNumElements method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lorder(int)"><!-- --></A><H3>
+set_lorder</H3>
+<PRE>
+public void <B>set_lorder</B>(int&nbsp;lorder)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setByteOrder(int)"><CODE>setByteOrder(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setByteOrder(int)"><!-- --></A><H3>
+setByteOrder</H3>
+<PRE>
+public void <B>setByteOrder</B>(int&nbsp;lorder)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the byte order for integers in the stored database metadata. The host byte order of the machine where the Berkeley DB library was compiled will be used if no byte order is set.</p> <p><b>The access methods provide no guarantees about the byte ordering of the application data stored in the database, and applications are responsible for maintaining any necessary ordering.</b></p> <p>The Db.setByteOrder method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setByteOrder method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setByteOrder will be ignored. </p> If creating additional databases in a single physical file, information specified to Db.setByteOrder will be ignored and the byte order of the existing databases will be used.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lorder</CODE> - The <b>lorder</b> parameter should represent the byte order as an integer; for example, big endian order is the number 4,321, and little endian order is the number 1,234.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setByteOrder method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_pagesize(long)"><!-- --></A><H3>
+set_pagesize</H3>
+<PRE>
+public void <B>set_pagesize</B>(long&nbsp;pagesize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setPageSize(long)"><CODE>setPageSize(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPageSize(long)"><!-- --></A><H3>
+setPageSize</H3>
+<PRE>
+public void <B>setPageSize</B>(long&nbsp;pagesize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the pages used to hold items in the database, in bytes. The minimum page size is 512 bytes, the maximum page size is 64K bytes, and the page size must be a power-of-two. If the page size is not explicitly set, one is selected based on the underlying filesystem I/O block size. The automatically selected size has a lower limit of 512 bytes and an upper limit of 16K bytes.</p> <p>For information on tuning the Berkeley DB page size, see <a href="../../../../ref/am_conf/pagesize.html">Selecting a page size</a>.</p> <p>The Db.setPageSize method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setPageSize method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setPageSize will be ignored. </p> If creating additional databases in a file, the page size specified must be consistent with the existing databases in the file or an error will be returned.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>pagesize</CODE> - The <b>pagesize</b> parameter sets the database page size.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setPageSize method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_re_delim(int)"><!-- --></A><H3>
+set_re_delim</H3>
+<PRE>
+public void <B>set_re_delim</B>(int&nbsp;re_delim)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>setRecordDelimiter(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRecordDelimiter(int)"><!-- --></A><H3>
+setRecordDelimiter</H3>
+<PRE>
+public void <B>setRecordDelimiter</B>(int&nbsp;re_delim)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the delimiting byte used to mark the end of a record in the backing source file for the Recno access method.</p> <p>This byte is used for variable length records if the <b>re_source</b> file is specified. If the <b>re_source</b> file is specified and no delimiting byte was specified, &lt;newline&gt; characters (that is, ASCII 0x0a) are interpreted as end-of-record markers.</p> <p>The Db.setRecordDelimiter method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setRecordDelimiter method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setRecordDelimiter will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>re_delim</CODE> - the delimiting byte used to mark the end of a record.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setRecordDelimiter method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_re_len(int)"><!-- --></A><H3>
+set_re_len</H3>
+<PRE>
+public void <B>set_re_len</B>(int&nbsp;re_len)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordLength(int)"><CODE>setRecordLength(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRecordLength(int)"><!-- --></A><H3>
+setRecordLength</H3>
+<PRE>
+public void <B>setRecordLength</B>(int&nbsp;re_len)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>For the Queue access method, specify that the records are of length <b>re_len</b>. For the Queue access method, the record length must be enough smaller than the database's page size that at least one record plus the database page's metadata information can fit on each database page.</p> <p>For the Recno access method, specify that the records are fixed-length, not byte-delimited, and are of length <b>re_len</b>.</p> <p>Any records added to the database that are less than <b>re_len</b> bytes long are automatically padded (see <A HREF="../../../com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>Db.setRecordPad</CODE></A> for more information).</p> <p>Any attempt to insert records into the database that are greater than <b>re_len</b> bytes long will cause the call to fail immediately and return an error.</p> <p>The Db.setRecordLength method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setRecordLength method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setRecordLength will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>re_len</CODE> - the length of a Queue or Recno database record, in bytes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setRecordLength method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_re_pad(int)"><!-- --></A><H3>
+set_re_pad</H3>
+<PRE>
+public void <B>set_re_pad</B>(int&nbsp;re_pad)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>setRecordPad(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRecordPad(int)"><!-- --></A><H3>
+setRecordPad</H3>
+<PRE>
+public void <B>setRecordPad</B>(int&nbsp;re_pad)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the padding character for short, fixed-length records for the Queue and Recno access methods.</p> <p>If no pad character is specified, &lt;space&gt; characters (that is, ASCII 0x20) are used for padding.</p> <p>The Db.setRecordPad method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setRecordPad method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setRecordPad will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>re_pad</CODE> - the pad character for fixed-length records for the Queue and Recno access methods.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setRecordPad method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_re_source(java.lang.String)"><!-- --></A><H3>
+set_re_source</H3>
+<PRE>
+public void <B>set_re_source</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><CODE>setRecordSource(String)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRecordSource(java.lang.String)"><!-- --></A><H3>
+setRecordSource</H3>
+<PRE>
+public void <B>setRecordSource</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the underlying source file for the Recno access method. The purpose of the <b>source</b> value is to provide fast access and modification to databases that are normally stored as flat text files.</p> <p>The <b>source</b> parameter specifies an underlying flat text database file that is read to initialize a transient record number index. In the case of variable length records, the records are separated, as specified by <A HREF="../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>Db.setRecordDelimiter</CODE></A>. For example, standard UNIX byte stream files can be interpreted as a sequence of variable length records separated by &lt;newline&gt; characters.</p> <p>In addition, when cached data would normally be written back to the underlying database file (for example, the <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#sync(int)"><CODE>Db.sync</CODE></A> methods are called), the in-memory copy of the database will be written back to the <b>source</b> file.</p> <p>By default, the backing source file is read lazily; that is, records are not read from the file until they are requested by the application. <b>If multiple processes (not threads) are accessing a Recno database concurrently, and are either inserting or deleting records, the backing source file must be read in its entirety before more than a single process accesses the database, and only that process should specify the backing source file as part of the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> call. See the <A HREF="../../../com/sleepycat/db/Db.html#DB_SNAPSHOT"><CODE>Db.DB_SNAPSHOT</CODE></A> flag for more information.</b></p> <p><b>Reading and writing the backing source file specified by <b>source</b> cannot be transaction-protected because it involves filesystem operations that are not part of the Db transaction methodology.</b> For this reason, if a temporary database is used to hold the records, it is possible to lose the contents of the <b>source</b> file, for example, if the system crashes at the right instant. If a file is used to hold the database, normal database recovery on that file can be used to prevent information loss, although it is still possible that the contents of <b>source</b> will be lost if the system crashes.</p> <p>The <b>source</b> file must already exist (but may be zero-length) when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called.</p> <p>It is not an error to specify a read-only <b>source</b> file when creating a database, nor is it an error to modify the resulting database. However, any attempt to write the changes to the backing source file using either the <A HREF="../../../com/sleepycat/db/Db.html#sync(int)"><CODE>Db.sync</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A> methods will fail, of course. Specify the <A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC"><CODE>Db.DB_NOSYNC</CODE></A> flag to the <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A> method to stop it from attempting to write the changes to the backing file; instead, they will be silently discarded.</p> <p>For all of the previous reasons, the <b>source</b> field is generally used to specify databases that are read-only for Berkeley DB applications; and that are either generated on the fly by software tools or modified using a different mechanism -- for example, a text editor.</p> <p>The Db.setRecordSource method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle, not all operations performed on the underlying database.</p> <p>The Db.setRecordSource method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setRecordSource must be the same as that historically used to create the database or corruption can occur.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>source</CODE> - The backing flat text database file for a Recno database.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setRecordSource method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_q_extentsize(int)"><!-- --></A><H3>
+set_q_extentsize</H3>
+<PRE>
+public void <B>set_q_extentsize</B>(int&nbsp;extentsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Db.html#setQueueExtentSize(int)"><CODE>setQueueExtentSize(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setQueueExtentSize(int)"><!-- --></A><H3>
+setQueueExtentSize</H3>
+<PRE>
+public void <B>setQueueExtentSize</B>(int&nbsp;extentsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the extents used to hold pages in a Queue database, specified as a number of pages. Each extent is created as a separate physical file. If no extent size is set, the default behavior is to create only a single underlying database file.</p> <p>For information on tuning the extent size, see <a href="../../../../ref/am_conf/extentsize.html">Selecting a extent size</a>.</p> <p>The Db.setQueueExtentSize method configures a database, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p> <p>The Db.setQueueExtentSize method may not be called after the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> method is called. If the database already exists when <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> is called, the information specified to Db.setQueueExtentSize will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>extentsize</CODE> - the number of pages in a Queue database extent.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.setQueueExtentSize method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="stat(int)"><!-- --></A><H3>
+stat</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.stat method creates a statistical structure and fills it with statistics for the database.</p> <p>If the Db.DB_FAST_STAT flag has not been specified, the Db.stat method will access some of or all the pages in the database, incurring a severe performance penalty as well as possibly flushing the underlying buffer pool.</p> <p>In the presence of multiple threads or processes accessing an active database, the information returned by Db.stat may be out-of-date.</p> <p>If the database was not opened read-only and the Db.DB_FAST_STAT flag was not specified, the cached key and record numbers will be updated after the statistical information has been gathered.</p> <p>The Db.stat method cannot be transaction-protected. For this reason, it should be called in a thread of control that has no open cursors or active transactions.</p> <h3>Hash Statistics</h3> <p>In the case of a Hash database, the statistics are returned in an instance of DbHashStat. The data fields are available from DbHashStat: </p> <h3>Btree and Recno Statistics</h3> <p>In the case of a Btree or Recno database, the statistics are returned in an instance of DbBtreeStat. The data fields are available from DbBtreeStat: </p> <h3>Queue Statistics</h3> <p>In the case of a Queue database, the statistics are returned in an instance of DbQueueStat. The data fields are available from DbQueueStat: </p> For convenience, the DbBtreeStat, DbHashStat and DbQueueStat classes have a toString method that lists all their data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FAST_STAT"><CODE>Db.DB_FAST_STAT</CODE></A><p>Return only the values which do not require traversal of the database. <p>Among other things, this flag makes it possible for applications to request key and record counts without incurring the performance penalty of traversing the entire database. If the underlying database is of type Recno, or of type Btree and the database was created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag, the count of keys will be exact. Otherwise, the count of keys will be the value saved the last time the database was traversed, or 0 if no count of keys has ever been made. If the underlying database is of type Recno, the count of data items will be exact, otherwise, the count of data items will be the value saved the last time the database was traversed, or 0 if no count of data items has ever been done.</p> </li></ul>
+<DT><B>Returns:</B><DD>In the case of a Hash database, the statistics are returned in an instance of DbHashStat. In the case of a Btree or Recno database, the statistics are returned in an instance of DbBtreeStat. In the case of a Queue database, the statistics are returned in an instance of DbQueueStat.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.stat method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.stat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="sync(int)"><!-- --></A><H3>
+sync</H3>
+<PRE>
+public void <B>sync</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.sync method flushes any cached information to disk.</p> <p>If the database is in memory only, the Db.sync method has no effect and will always succeed.</p> <p><b>It is important to understand that flushing cached information to disk only minimizes the window of opportunity for corrupted data.</b> Although unlikely, it is possible for database corruption to happen if a system or application crash occurs while writing data to the database. To ensure that database corruption never occurs, applications must either: use transactions and logging with automatic recovery; use logging and application-specific recovery; or edit a copy of the database, and once all applications using the database have successfully called <A HREF="../../../com/sleepycat/db/Db.html#close(int)"><CODE>Db.close</CODE></A>, atomically replace the original database with the updated copy.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.sync method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.sync method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="truncate(com.sleepycat.db.DbTxn, int)"><!-- --></A><H3>
+truncate</H3>
+<PRE>
+public int <B>truncate</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.truncate method empties the database, discarding all records it contains. The number of records discarded from the database is returned.</p> <p>It is an error to call the Db.truncate method on a database with open cursors.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the Db.truncate call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. </li></ul><DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, (other than by specifying the Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Returns:</B><DD>The Db.truncate method returns the number of records discarded from the database.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Db.truncate method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Db.truncate method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.truncate method will fail and throw a IllegalArgumentException exception if there are open cursors in the database; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="upgrade(java.lang.String, int)"><!-- --></A><H3>
+upgrade</H3>
+<PRE>
+public void <B>upgrade</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Db.upgrade method upgrades all of the databases included in the file <b>file</b>, if necessary. If no upgrade is necessary, Db.upgrade always returns success.</p> <p><b>Database upgrades are done in place and are destructive. For example, if pages need to be allocated and no disk space is available, the database may be left corrupted. Backups should be made before databases are upgraded. See <a href="../../../../ref/am/upgrade.html">Upgrading databases</a> for more information.</b></p> <p>Unlike all other database operations, Db.upgrade may only be done on a system with the same byte-order as the database.</p> <h3>Environment Variables</h3> <p>If the database was opened within a database environment, the environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>Db.upgrade is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>file</CODE> - the physical file containing the databases to be upgraded.<DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DUPSORT"><CODE>Db.DB_DUPSORT</CODE></A><p><b>This flag is only meaningful when upgrading databases from releases before the Berkeley DB 3.1 release.</b> <p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release, the on-disk format of duplicate data items changed. To correctly upgrade the format requires applications to specify whether duplicate data items in the database are sorted or not. Specifying the <code>Db.DB_DUPSORT</code> flag informs Db.upgrade that the duplicates are sorted; otherwise they are assumed to be unsorted. Incorrectly specifying the value of this flag may lead to database corruption.</p> <p>Further, because the Db.upgrade method upgrades a physical file (including all the databases it contains), it is not possible to use Db.upgrade to upgrade files in which some of the databases it includes have sorted duplicate data items, and some of the databases it includes have unsorted duplicate data items. If the file does not have more than a single database, if the databases do not support duplicate data items, or if all of the databases that support duplicate data items support the same style of duplicates (either sorted or unsorted), Db.upgrade will work correctly as long as the <code>Db.DB_DUPSORT</code> flag is correctly specified. Otherwise, the file cannot be upgraded using Db.upgrade; it must be upgraded manually by dumping and reloading the databases.</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Db.upgrade method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>The database cannot be upgraded by this version of the Berkeley DB software.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Db.upgrade method will fail and throw a IllegalArgumentException exception if the database is not in the same byte-order as the system; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Db.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Db.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbAppDispatch.html b/db/docs/java/com/sleepycat/db/DbAppDispatch.html
new file mode 100644
index 000000000..2c26d364f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbAppDispatch.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbAppDispatch (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbAppDispatch,DbAppDispatch interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbAppDispatch (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbAppDispatch.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppendRecno.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppDispatch.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbAppDispatch</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbAppDispatch</B></DL>
+
+<P>
+An interface specifying a recovery function, which recovers application-specific actions.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)">appDispatch</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;log_rec,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppDispatch interface is used by the DbEnv.setAppDispatch method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><!-- --></A><H3>
+appDispatch</H3>
+<PRE>
+public int <B>appDispatch</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;log_rec,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;op)</PRE>
+<DL>
+<DD>The DbAppDispatch interface is used by the DbEnv.setAppDispatch method. This interface defines the application-specific function to be called during transaction abort and recovery.</p> The Db.DB_TXN_FORWARD_ROLL and Db.DB_TXN_APPLY operations frequently imply the same actions, redoing changes that appear in the log record, although if a recovery function is to be used on a replication client where reads may be taking place concurrently with the processing of incoming messages, Db.DB_TXN_APPLY operations should also perform appropriate locking. The macro DB_REDO(op) checks that the operation is one of Db.DB_TXN_FORWARD_ROLL or Db.DB_TXN_APPLY, and should be used in the recovery code to refer to the conditions under which operations should be redone. Similarly, the macro DB_UNDO(op) checks if the operation is one of Db.DB_TXN_BACKWARD_ROLL or Db.DB_TXN_ABORT.</p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbenv</CODE> - the enclosing database environment handle.<DD><CODE>log_rec</CODE> - a log record.<DD><CODE>lsn</CODE> - a log sequence number.<DD><CODE>op</CODE> - one of the following values:
+<DT><B>Returns:</B><DD>The function must return 0 on success and either <b>errno</b> or a value outside of the Berkeley DB error name space on failure.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbAppDispatch.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppendRecno.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppDispatch.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbAppendRecno.html b/db/docs/java/com/sleepycat/db/DbAppendRecno.html
new file mode 100644
index 000000000..17b755621
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbAppendRecno.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbAppendRecno (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbAppendRecno,DbAppendRecno interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbAppendRecno (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbAppendRecno.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppDispatch.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppendRecno.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbAppendRecno</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbAppendRecno</B></DL>
+
+<P>
+An interface specifying a callback function that modifies stored data based on a generated key.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbAppendRecno.html#dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)">dbAppendRecno</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppendRecno interface is used by the Db.setAppendRecno method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+dbAppendRecno</H3>
+<PRE>
+public void <B>dbAppendRecno</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;recno)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbAppendRecno interface is used by the Db.setAppendRecno method.</p> The called function may modify the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the enclosing database handle.<DD><CODE>data</CODE> - the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> to be stored.<DD><CODE>recno</CODE> - the generated record number.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbAppendRecno.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppDispatch.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppendRecno.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbBtreeCompare.html b/db/docs/java/com/sleepycat/db/DbBtreeCompare.html
new file mode 100644
index 000000000..f670b57a0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbBtreeCompare.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbBtreeCompare (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbBtreeCompare,DbBtreeCompare interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbBtreeCompare (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreeCompare.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppendRecno.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbBtreeCompare</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbBtreeCompare</B></DL>
+
+<P>
+An interface specifying a comparison function, which imposes a total ordering on the keys in a Btree database.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeCompare.html#compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compare</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreeCompare interface is used by the Db.setBtreeCompare method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+compare</H3>
+<PRE>
+public int <B>compare</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</PRE>
+<DL>
+<DD>The DbBtreeCompare interface is used by the Db.setBtreeCompare method.</p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the enclosing database handle.<DD><CODE>dbt1</CODE> - the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing the application supplied key.<DD><CODE>dbt2</CODE> - the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing the current tree's key.
+<DT><B>Returns:</B><DD>The <b>bt_compare_fcn</b> function must return an integer value less than, equal to, or greater than zero if the first key parameter is considered to be respectively less than, equal to, or greater than the second key parameter. In addition, the comparison function must cause the keys in the database to be <i>well-ordered</i>. The comparison function must correctly handle any key values used by the application (possibly including zero-length keys). In addition, when Btree key prefix comparison is being performed (see <A HREF="../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>Db.setBtreePrefix</CODE></A> for more information), the comparison routine may be passed a prefix of any database key. The <b>data</b> and <b>size</b> fields of the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> are the only fields that may be used for the purposes of this comparison, and no particular alignment of the memory to which by the <b>data</b> field refers may be assumed.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreeCompare.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbAppendRecno.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbBtreePrefix.html b/db/docs/java/com/sleepycat/db/DbBtreePrefix.html
new file mode 100644
index 000000000..900888281
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbBtreePrefix.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbBtreePrefix (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbBtreePrefix,DbBtreePrefix interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbBtreePrefix (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreePrefix.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbClient.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreePrefix.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbBtreePrefix</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbBtreePrefix</B></DL>
+
+<P>
+An interface specifying a comparison function, which specifies the number of bytes needed to differentiate Btree keys.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreePrefix.html#prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">prefix</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreePrefix interface is used by the Db.setBtreePrefix method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+prefix</H3>
+<PRE>
+public int <B>prefix</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</PRE>
+<DL>
+<DD>The DbBtreePrefix interface is used by the Db.setBtreePrefix method.</p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the enclosing database handle.<DD><CODE>dbt1</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing a database key.<DD><CODE>dbt2</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing a database key.
+<DT><B>Returns:</B><DD>The <b>bt_prefix_fcn</b> function must return the number of bytes of the second key parameter that would be required by the Btree key comparison function to determine the second key parameter's ordering relationship with respect to the first key parameter. If the two keys are equal, the key length should be returned. The prefix function must correctly handle any key values used by the application (possibly including zero-length keys). The <b>data</b> and <b>size</b> fields of the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> are the only fields that may be used for the purposes of this determination, and no particular alignment of the memory to which the <b>data</b> field refers may be assumed.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreePrefix.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbClient.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreePrefix.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbBtreeStat.html b/db/docs/java/com/sleepycat/db/DbBtreeStat.html
new file mode 100644
index 000000000..8b175bf77
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbBtreeStat.html
@@ -0,0 +1,681 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbBtreeStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbBtreeStat,DbBtreeStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbBtreeStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreeStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Db.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbBtreeStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbBtreeStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbBtreeStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbBtreeStat object is used to return Btree or Recno database statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_dup_pg">bt_dup_pg</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of database duplicate pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_dup_pgfree">bt_dup_pgfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes free in database duplicate pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_free">bt_free</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of pages on the free list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_int_pg">bt_int_pg</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of database internal pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_int_pgfree">bt_int_pgfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes free in database internal pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_leaf_pg">bt_leaf_pg</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of database leaf pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_leaf_pgfree">bt_leaf_pgfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes free in database leaf pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_levels">bt_levels</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of levels in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_magic">bt_magic</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Magic number that identifies the file as a Btree database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_maxkey">bt_maxkey</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_metaflags">bt_metaflags</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_minkey">bt_minkey</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The minimum keys per page.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_ndata">bt_ndata</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For the Btree Access Method, the number of key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_nkeys">bt_nkeys</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For the Btree Access Method, the number of unique keys in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_over_pg">bt_over_pg</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of database overflow pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_over_pgfree">bt_over_pgfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes free in database overflow pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_pagesize">bt_pagesize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Underlying database page size, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_re_len">bt_re_len</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The length of fixed-length records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_re_pad">bt_re_pad</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The padding byte value for fixed-length records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#bt_version">bt_version</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The version of the Btree database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#DbBtreeStat()">DbBtreeStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbBtreeStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="bt_magic"><!-- --></A><H3>
+bt_magic</H3>
+<PRE>
+public int <B>bt_magic</B></PRE>
+<DL>
+<DD>Magic number that identifies the file as a Btree database. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_version"><!-- --></A><H3>
+bt_version</H3>
+<PRE>
+public int <B>bt_version</B></PRE>
+<DL>
+<DD>The version of the Btree database. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_metaflags"><!-- --></A><H3>
+bt_metaflags</H3>
+<PRE>
+public int <B>bt_metaflags</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_nkeys"><!-- --></A><H3>
+bt_nkeys</H3>
+<PRE>
+public int <B>bt_nkeys</B></PRE>
+<DL>
+<DD>For the Btree Access Method, the number of unique keys in the database. If Db.DB_FAST_STAT was specified and the database was created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE>Db.DB_RECNUM</CODE></A> flag, the count will be exact, otherwise, the count will be the last saved value unless it has never been calculated, in which case it will be 0. For the Recno Access Method, the exact number of records in the database. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_ndata"><!-- --></A><H3>
+bt_ndata</H3>
+<PRE>
+public int <B>bt_ndata</B></PRE>
+<DL>
+<DD>For the Btree Access Method, the number of key/data pairs in the database. If Db.DB_FAST_STAT was specified the count will be the last saved value unless it has never been calculated, in which case it will be 0. For the Recno Access Method, the exact number of records in the database. If the database has been configured to not renumber records during deletion, the count of records will only reflect undeleted records. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_pagesize"><!-- --></A><H3>
+bt_pagesize</H3>
+<PRE>
+public int <B>bt_pagesize</B></PRE>
+<DL>
+<DD>Underlying database page size, in bytes. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_maxkey"><!-- --></A><H3>
+bt_maxkey</H3>
+<PRE>
+public int <B>bt_maxkey</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_minkey"><!-- --></A><H3>
+bt_minkey</H3>
+<PRE>
+public int <B>bt_minkey</B></PRE>
+<DL>
+<DD>The minimum keys per page. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_re_len"><!-- --></A><H3>
+bt_re_len</H3>
+<PRE>
+public int <B>bt_re_len</B></PRE>
+<DL>
+<DD>The length of fixed-length records. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_re_pad"><!-- --></A><H3>
+bt_re_pad</H3>
+<PRE>
+public int <B>bt_re_pad</B></PRE>
+<DL>
+<DD>The padding byte value for fixed-length records. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_levels"><!-- --></A><H3>
+bt_levels</H3>
+<PRE>
+public int <B>bt_levels</B></PRE>
+<DL>
+<DD>Number of levels in the database.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_int_pg"><!-- --></A><H3>
+bt_int_pg</H3>
+<PRE>
+public int <B>bt_int_pg</B></PRE>
+<DL>
+<DD>Number of database internal pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_leaf_pg"><!-- --></A><H3>
+bt_leaf_pg</H3>
+<PRE>
+public int <B>bt_leaf_pg</B></PRE>
+<DL>
+<DD>Number of database leaf pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_dup_pg"><!-- --></A><H3>
+bt_dup_pg</H3>
+<PRE>
+public int <B>bt_dup_pg</B></PRE>
+<DL>
+<DD>Number of database duplicate pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_over_pg"><!-- --></A><H3>
+bt_over_pg</H3>
+<PRE>
+public int <B>bt_over_pg</B></PRE>
+<DL>
+<DD>Number of database overflow pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_free"><!-- --></A><H3>
+bt_free</H3>
+<PRE>
+public int <B>bt_free</B></PRE>
+<DL>
+<DD>Number of pages on the free list.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_int_pgfree"><!-- --></A><H3>
+bt_int_pgfree</H3>
+<PRE>
+public int <B>bt_int_pgfree</B></PRE>
+<DL>
+<DD>Number of bytes free in database internal pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_leaf_pgfree"><!-- --></A><H3>
+bt_leaf_pgfree</H3>
+<PRE>
+public int <B>bt_leaf_pgfree</B></PRE>
+<DL>
+<DD>Number of bytes free in database leaf pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_dup_pgfree"><!-- --></A><H3>
+bt_dup_pgfree</H3>
+<PRE>
+public int <B>bt_dup_pgfree</B></PRE>
+<DL>
+<DD>Number of bytes free in database duplicate pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="bt_over_pgfree"><!-- --></A><H3>
+bt_over_pgfree</H3>
+<PRE>
+public int <B>bt_over_pgfree</B></PRE>
+<DL>
+<DD>Number of bytes free in database overflow pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbBtreeStat()"><!-- --></A><H3>
+DbBtreeStat</H3>
+<PRE>
+public <B>DbBtreeStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbBtreeStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Db.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbClient.html b/db/docs/java/com/sleepycat/db/DbClient.html
new file mode 100644
index 000000000..0e62d8cfe
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbClient.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbClient (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbClient,DbClient interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbClient (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbClient.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDupCompare.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbClient.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbClient</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbClient</B></DL>
+
+<P>
+The DbClient object is used to encapsulate a reference to an RPC client.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbClient.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDupCompare.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbClient.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbDeadlockException.html b/db/docs/java/com/sleepycat/db/DbDeadlockException.html
new file mode 100644
index 000000000..77f34526b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbDeadlockException.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbDeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbDeadlockException,DbDeadlockException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbDeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbDeadlockException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDeadlockException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_com.sleepycat.db.DbException">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbDeadlockException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="../../../com/sleepycat/db/DbException.html">com.sleepycat.db.DbException</A>
+ |
+ +--<B>com.sleepycat.db.DbDeadlockException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DbDeadlockException</B><DT>extends <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></DL>
+
+<P>
+This information describes the DbDeadlockException class and how it is used in the Berkeley DB library.</p> <p>A DbDeadlockException is thrown when multiple threads competing for a lock are deadlocked, when a lock request has timed out, or when a lock request would need to block and the transaction has been configured to not wait for locks. One of the threads' transactions is selected for termination, and a DbDeadlockException is thrown to that thread.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.db.DbDeadlockException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_com.sleepycat.db.DbException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DbException.html#get_errno()">get_errno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbDeadlockException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDeadlockException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_com.sleepycat.db.DbException">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbDupCompare.html b/db/docs/java/com/sleepycat/db/DbDupCompare.html
new file mode 100644
index 000000000..6ed30209d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbDupCompare.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbDupCompare (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbDupCompare,DbDupCompare interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbDupCompare (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbDupCompare.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbClient.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDupCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbDupCompare</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbDupCompare</B></DL>
+
+<P>
+An interface specifying a comparison function, which imposes a total ordering on the duplicate data items in a Btree database.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbDupCompare.html#compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compareDuplicates</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+compareDuplicates</H3>
+<PRE>
+public int <B>compareDuplicates</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</PRE>
+<DL>
+<DD>The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.</p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the enclosing database handle.<DD><CODE>dbt1</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing the application supplied data item.<DD><CODE>dbt2</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> representing the current tree's data item.
+<DT><B>Returns:</B><DD>The <b>dup_compare_fcn</b> function must return an integer value less than, equal to, or greater than zero if the first data item parameter is considered to be respectively less than, equal to, or greater than the second data item parameter. In addition, the comparison function must cause the data items in the set to be <i>well-ordered</i>. The comparison function must correctly handle any data item values used by the application (possibly including zero-length data items). The <b>data</b> and <b>size</b> fields of the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> are the only fields that may be used for the purposes of this comparison, and no particular alignment of the memory to which the <b>data</b> field refers may be assumed.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbDupCompare.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbClient.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDupCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbEnv.RepProcessMessage.html b/db/docs/java/com/sleepycat/db/DbEnv.RepProcessMessage.html
new file mode 100644
index 000000000..e22c2c15e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbEnv.RepProcessMessage.html
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbEnv.RepProcessMessage (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbEnv.RepProcessMessage,DbEnv.RepProcessMessage class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbEnv.RepProcessMessage (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnv.RepProcessMessage.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHashStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.RepProcessMessage.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbEnv.RepProcessMessage</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbEnv.RepProcessMessage</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public static class <B>DbEnv.RepProcessMessage</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html#envid">envid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>envid</b> field contains the local identifier of the environment returned by the DbEnv.replicationProcessMessage method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html#DbEnv.RepProcessMessage()">DbEnv.RepProcessMessage</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="envid"><!-- --></A><H3>
+envid</H3>
+<PRE>
+public int <B>envid</B></PRE>
+<DL>
+<DD>The <b>envid</b> field contains the local identifier of the environment returned by the DbEnv.replicationProcessMessage method.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbEnv.RepProcessMessage()"><!-- --></A><H3>
+DbEnv.RepProcessMessage</H3>
+<PRE>
+public <B>DbEnv.RepProcessMessage</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnv.RepProcessMessage.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHashStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.RepProcessMessage.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbEnv.html b/db/docs/java/com/sleepycat/db/DbEnv.html
new file mode 100644
index 000000000..4eb5572a4
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbEnv.html
@@ -0,0 +1,4738 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbEnv (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbEnv,DbEnv class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbEnv (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnv.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbEnv</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbEnv</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbEnv</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbEnv object is the handle for a Berkeley DB environment -- a collection including support for some or all of caching, locking, logging and transaction subsystems, as well as databases and log files. Methods off the DbEnv handle are used to configure the environment as well as to operate on subsystems and databases in the environment.</p> <p>DbEnv handles are free-threaded if the <A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A> flag is specified to the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method when the environment is opened. The DbEnv handle should not be closed while any other handle remains open that is using it as a reference (for example, <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> or <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A>). Once either the <A HREF="../../../com/sleepycat/db/DbEnv.html#close(int)"><CODE>DbEnv.close</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><CODE>DbEnv.remove</CODE></A> methods are called, the handle may not be accessed again, regardless of the method's return.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#DbEnv(int)">DbEnv</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor creates the DbEnv object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.close method closes the Berkeley DB environment, freeing any allocated resources and closing any underlying subsystems.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbremove</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>dbRemove(DbTxn,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbRemove</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbrename</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>dbRename(DbTxn,String,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbRename</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#err(int, java.lang.String)">err</A></B>(int&nbsp;error,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.err, DbEnv.errx, <A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods provide error-messaging functionality for applications written using the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#errx(java.lang.String)">errx</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.errx and <A HREF="../../../com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods perform identically to the DbEnv.err and <A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> methods, except that they do not append the final separator characters and standard error string to the error message.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_cachesize_ncache()">get_cachesize_ncache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_cachesize()">get_cachesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_data_dirs()">get_data_dirs</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getDataDirs()"><CODE>getDataDirs()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_encrypt_flags()">get_encrypt_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_errpfx()">get_errpfx</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getFlags()"><CODE>getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_home()">get_home</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getDbEnvHome()"><CODE>getDbEnvHome()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lg_bsize()">get_lg_bsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogBufferSize()"><CODE>getLogBufferSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lg_dir()">get_lg_dir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogDir()"><CODE>getLogDir()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lg_max()">get_lg_max</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogMax()"><CODE>getLogMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lg_regionmax()">get_lg_regionmax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogRegionMax()"><CODE>getLogRegionMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[][]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lk_conflicts()">get_lk_conflicts</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockConflicts()"><CODE>getLockConflicts()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lk_detect()">get_lk_detect</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockDetect()"><CODE>getLockDetect()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lk_max_lockers()">get_lk_max_lockers</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><CODE>getLockMaxLockers()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lk_max_locks()">get_lk_max_locks</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><CODE>getLockMaxLocks()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_lk_max_objects()">get_lk_max_objects</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><CODE>getLockMaxObjects()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_mp_mmapsize()">get_mp_mmapsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><CODE>getMemoryPoolMapSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_open_flags()">get_open_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_rep_limit()">get_rep_limit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getReplicationLimit()"><CODE>getReplicationLimit()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_shm_key()">get_shm_key</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getSegmentId()"><CODE>getSegmentId()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_tas_spins()">get_tas_spins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><CODE>getTestAndSetSpins()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_timeout(int)">get_timeout</A></B>(int&nbsp;flag)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>getTimeout(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_tmp_dir()">get_tmp_dir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTmpDir()"><CODE>getTmpDir()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_tx_max()">get_tx_max</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnMax()"><CODE>getTxnMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_tx_timestamp()">get_tx_timestamp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><CODE>getTxnTimestamp()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_verbose(int)">get_verbose</A></B>(int&nbsp;which)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVerbose(int)"><CODE>getVerbose(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_version_major()">get_version_major</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMajor()"><CODE>getVersionMajor()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_version_minor()">get_version_minor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMinor()"><CODE>getVersionMinor()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_version_patch()">get_version_patch</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionPatch()"><CODE>getVersionPatch()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#get_version_string()">get_version_string</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionString()"><CODE>getVersionString()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSize()">getCacheSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSize method returns the size of the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSizeNcache()">getCacheSizeNcache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSizeNcache method returns the number of caches.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getDataDirs()">getDataDirs</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getDataDirs method returns the array of directories.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getDbEnvHome()">getDbEnvHome</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getDbEnvHome method returns the database environment home directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getEncryptFlags()">getEncryptFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getEncryptFlags method returns the encryption flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getErrorPrefix()">getErrorPrefix</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getErrorPrefix method returns the error prefix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getFlags method returns the configuration flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[][]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLockConflicts()">getLockConflicts</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockConflicts method returns the conflicts array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLockDetect()">getLockDetect</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockDetect method returns the deadlock detector configuration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLockers()">getLockMaxLockers</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockMaxLockers method returns the maximum number of lockers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLocks()">getLockMaxLocks</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setLockMaxLocks method returns the maximum number of locks.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxObjects()">getLockMaxObjects</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockMaxObjects method returns the maximum number of locked objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLogBufferSize()">getLogBufferSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogBufferSize method returns the size of the log buffer, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLogDir()">getLogDir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogDir method returns the log directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLogMax()">getLogMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogMax method returns the maximum log file size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getLogRegionMax()">getLogRegionMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogRegionMax method returns the size of the underlying logging subsystem region.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()">getMemoryPoolMapSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getMemoryPoolMapSize method returns the maximum file map size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getOpenFlags()">getOpenFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getOpenFlags method returns the open method flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getReplicationLimit()">getReplicationLimit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getReplicationLimit method returns the transmit limit in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getSegmentId()">getSegmentId</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getSegmentId method returns the base segment ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getTestAndSetSpins()">getTestAndSetSpins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTestAndSetSpins method returns the test-and-set spin count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getTimeout(int)">getTimeout</A></B>(int&nbsp;flag)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTimeout method returns a timeout value, in microseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getTmpDir()">getTmpDir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTmpDir method returns the database environment temporary file directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnMax()">getTxnMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTxnMax method returns the number of active transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnTimestamp()">getTxnTimestamp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTxnTimestamp method returns the recovery timestamp.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getVerbose(int)">getVerbose</A></B>(int&nbsp;which)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVerbose method returns whether the specified <b>which</b> parameter is currently set or not.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMajor()">getVersionMajor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVersionMajor method returns the release major number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMinor()">getVersionMinor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVersionMinor method returns the release minor number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionPatch()">getVersionPatch</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVersionPatch method returns the release patch number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionString()">getVersionString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVersionString method returns the release verbose version information, suitable for display.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_detect(int, int)">lock_detect</A></B>(int&nbsp;flags,
+ int&nbsp;atype)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>lockDetect(int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)">lock_get</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>lockGet(int,int,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_id_free(int)">lock_id_free</A></B>(int&nbsp;id)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>lockIdFree(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_id()">lock_id</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>lockId()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_put(com.sleepycat.db.DbLock)">lock_put</A></B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>lockPut(DbLock)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_stat(int)">lock_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>lockStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lock_vec</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)">lockDetect</A></B>(int&nbsp;flags,
+ int&nbsp;atype)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockDetect method runs one iteration of the deadlock detector.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)">lockGet</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockId()">lockId</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockId method returns a locker ID, which is guaranteed to be unique in the specified lock table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)">lockIdFree</A></B>(int&nbsp;id)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockIdFree method frees a locker ID allocated by the <A HREF="../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId</CODE></A> method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)">lockPut</A></B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockPut method releases <b>lock</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockStat(int)">lockStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockStat method returns the locking subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lockVector</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockVector method atomically obtains and releases one or more locks from the lock table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_archive(int)">log_archive</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>logArchive(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">log_compare</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>logCompare(DbLsn,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_cursor(int)">log_cursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>logCursor(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_file(com.sleepycat.db.DbLsn)">log_file</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>logFile(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_flush(com.sleepycat.db.DbLsn)">log_flush</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>logFlush(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">log_put</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>logPut(DbLsn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#log_stat(int)">log_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>logStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)">logArchive</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logArchive method returns an array of log or database filenames.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">logCompare</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCompare method allows the caller to compare two <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects, returning 0 if they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logCursor(int)">logCursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCursor method returns a created log cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)">logFile</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFile method maps <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to filenames, returning the name of the file containing the record named by <b>lsn</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)">logFlush</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFlush method writes log records to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">logPut</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logPut method appends records to the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#logStat(int)">logStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logStat method returns the logging subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)">memoryPoolFileStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolFileStat method creates an array of DbMpoolFStat objects containing statistics for individual files in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)">memoryPoolStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolStat method returns the memory pool (that is, the buffer cache) subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)">memoryPoolTrickle</A></B>(int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolTrickle method ensures that a specified percent of the pages in the shared memory pool are clean, by writing dirty pages to their backing files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memp_fstat(int)">memp_fstat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>memoryPoolFileStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memp_stat(int)">memp_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>memoryPoolStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#memp_trickle(int)">memp_trickle</A></B>(int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>memoryPoolTrickle(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)">open</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.open method opens a Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.remove method destroys a Berkeley DB environment if it is not currently in use.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#rep_elect(int, int, int)">rep_elect</A></B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>replicationElect(int,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#rep_start(com.sleepycat.db.Dbt, int)">rep_start</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>replicationStart(Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#rep_stat(int)">rep_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>replicationStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)">replicationElect</A></B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationElect method holds an election for the master of a replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)">replicationStart</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStart method configures the database environment as a client or master in a group of replicated database environments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStat(int)">replicationStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStat method returns the replication subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_app_dispatch(com.sleepycat.db.DbAppDispatch)">set_app_dispatch</A></B>(<A HREF="../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>setAppDispatch(DbAppDispatch)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_cachesize(int, int, int)">set_cachesize</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_cachesize(long, int)">set_cachesize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_data_dir(java.lang.String)">set_data_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>setDataDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_encrypt(java.lang.String, int)">set_encrypt</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_errcall(com.sleepycat.db.DbErrcall)">set_errcall</A></B>(<A HREF="../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_error_stream(java.io.OutputStream)">set_error_stream</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_errpfx(java.lang.String)">set_errpfx</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_feedback(com.sleepycat.db.DbEnvFeedback)">set_feedback</A></B>(<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_flags(int, boolean)">set_flags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>setFlags(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lg_bsize(int)">set_lg_bsize</A></B>(int&nbsp;lg_bsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>setLogBufferSize(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lg_dir(java.lang.String)">set_lg_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><CODE>setLogDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lg_max(int)">set_lg_max</A></B>(int&nbsp;lg_max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>setLogMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lg_regionmax(int)">set_lg_regionmax</A></B>(int&nbsp;lg_regionmax)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><CODE>setLogRegionMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lk_conflicts(byte[][])">set_lk_conflicts</A></B>(byte[][]&nbsp;conflicts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>setLockConflicts(byte[][])</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lk_detect(int)">set_lk_detect</A></B>(int&nbsp;detect)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>setLockDetect(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lk_max_lockers(int)">set_lk_max_lockers</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><CODE>setLockMaxLockers(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lk_max_locks(int)">set_lk_max_locks</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><CODE>setLockMaxLocks(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_lk_max_objects(int)">set_lk_max_objects</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><CODE>setLockMaxObjects(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_mp_mmapsize(long)">set_mp_mmapsize</A></B>(long&nbsp;mp_mmapsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>setMemoryPoolMapSize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_rep_limit(int, int)">set_rep_limit</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>setReplicationLimit(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_rep_limit(long)">set_rep_limit</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>setReplicationLimit(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_rep_transport(int, com.sleepycat.db.DbRepTransport)">set_rep_transport</A></B>(int&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>setReplicationTransport(int,DbRepTransport)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">set_rpc_server</A></B>(<A HREF="../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>setRpcServer(DbClient,String,long,long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_shm_key(long)">set_shm_key</A></B>(long&nbsp;shm_key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setSegmentId(long)"><CODE>setSegmentId(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_tas_spins(int)">set_tas_spins</A></B>(int&nbsp;tas_spins)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><CODE>setTestAndSetSpins(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_timeout(long, int)">set_timeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>setTimeout(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_tmp_dir(java.lang.String)">set_tmp_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><CODE>setTmpDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_tx_max(int)">set_tx_max</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnMax(int)"><CODE>setTxnMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_tx_timestamp(java.util.Date)">set_tx_timestamp</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><CODE>setTxnTimestamp(java.util.Date)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#set_verbose(int, boolean)">set_verbose</A></B>(int&nbsp;which,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>setVerbose(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)">setAppDispatch</A></B>(<A HREF="../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)">setCacheSize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the shared memory buffer pool -- that is, the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)">setDataDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the path of a directory to be used as the location of the access method database files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)">setEncrypted</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the password used by the Berkeley DB library to perform encryption and decryption.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)">setErrorPrefix</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the prefix string that appears before error messages issued by Berkeley DB.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)">setErrorStream</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)">setFlags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])">setLockConflicts</A></B>(byte[][]&nbsp;conflicts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the locking conflicts matrix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)">setLockDetect</A></B>(int&nbsp;detect)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set if the deadlock detector is to be run whenever a lock conflict occurs, and specify what lock request(s) should be rejected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)">setLockMaxLockers</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locking entities supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)">setLockMaxLocks</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locks supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)">setLockMaxObjects</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locked objects supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)">setLogBufferSize</A></B>(int&nbsp;lg_bsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the in-memory log buffer, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)">setLogDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The path of a directory to be used as the location of logging files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLogMax(int)">setLogMax</A></B>(int&nbsp;lg_max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum size of a single file in the log, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setLogRegionMax(int)">setLogRegionMax</A></B>(int&nbsp;lg_regionmax)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the underlying logging area of the Berkeley DB environment, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)">setMemoryPoolMapSize</A></B>(long&nbsp;mp_mmapsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Files that are opened read-only in the pool (and that satisfy a few other criteria) are, by default, mapped into the process address space instead of being copied into the local cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)">setReplicationLimit</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setReplicationLimit method imposes a byte-count limit on the amount of data that will be transmitted from a site in a single call to <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A> method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)">setReplicationTransport</A></B>(int&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">setRpcServer</A></B>(<A HREF="../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Establishes a connection for this <b>dbenv</b> to a RPC server.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setSegmentId(long)">setSegmentId</A></B>(long&nbsp;shm_key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify a base segment ID for Berkeley DB environment shared memory regions created in system memory on VxWorks or systems supporting X/Open-style shared memory interfaces; for example, UNIX systems supporting <b>shmget</b>(2) and related System V IPC interfaces.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)">setTestAndSetSpins</A></B>(int&nbsp;tas_spins)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify that test-and-set mutexes should spin <b>tas_spins</b> times without blocking.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)">setTimeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setTimeout method sets timeout values for locks or transactions in the database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)">setTmpDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify the path of a directory to be used as the location of temporary files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnMax(int)">setTxnMax</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the Berkeley DB database environment to support at least <b>max</b> active transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)">setTxnTimestamp</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recover to the time specified by <b>timestamp</b> rather than to the most current possible date.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)">setVerbose</A></B>(int&nbsp;which,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setVerbose method turns specific additional informational and debugging messages in the Berkeley DB message output on and off.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#strerror(int)">strerror</A></B>(int&nbsp;error)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.strerror method returns an error message string corresponding to the error number <b>error</b> parameter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)">txn_begin</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>txnBegin(DbTxn,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txn_checkpoint(int, int, int)">txn_checkpoint</A></B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>txnCheckpoint(int,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txn_recover(int, int)">txn_recover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>txnRecover(int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txn_stat(int)">txn_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>txnStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)">txnBegin</A></B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)">txnCheckpoint</A></B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnCheckpoint method flushes the underlying memory pool, writes a checkpoint record to the log, and then flushes the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)">txnRecover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnRecover method returns a list of prepared but not yet resolved transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnv.html#txnStat(int)">txnStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnStat method returns the transaction subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbEnv(int)"><!-- --></A><H3>
+DbEnv</H3>
+<PRE>
+public <B>DbEnv</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The constructor creates the DbEnv object. The constructor allocates memory internally; calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#close(int)"><CODE>DbEnv.close</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><CODE>DbEnv.remove</CODE></A> methods will free that memory.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - The following <b>flags</b> value may be specified:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RPCCLIENT"><CODE>Db.DB_RPCCLIENT</CODE></A><p>Create a client environment to connect to a server. <p>The <code>Db.DB_RPCCLIENT</code> flag indicates to the system that this environment is remote on a server. The use of this flag causes the environment methods to use functions that call a server instead of local functions. Prior to making any environment or database method calls, the application must call the <A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer</CODE></A> function to establish the connection to the server.</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close(int)"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.close method closes the Berkeley DB environment, freeing any allocated resources and closing any underlying subsystems.</p> <p>The <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle should not be closed while any other handle that refers to it is not yet closed; for example, database environment handles must not be closed while database handles remain open, or transactions in the environment have not yet been committed or aborted. Specifically, this includes <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A>, <A HREF="../../../com/sleepycat/db/Dbc.html"><CODE>Dbc</CODE></A>, <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A>, <A HREF="../../../com/sleepycat/db/DbLogc.html"><CODE>DbLogc</CODE></A> and <A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><CODE>DbMpoolFile</CODE></A> handles.</p> <p>Where the environment was initialized with the <A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_LOCK"><CODE>Db.DB_INIT_LOCK</CODE></A> flag, calling DbEnv.close does not release any locks still held by the closing process, providing functionality for long-lived locks. </p> <p>Where the environment was initialized with the <A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_TXN"><CODE>Db.DB_INIT_TXN</CODE></A> flag, calling DbEnv.close aborts any unresolved transactions. Applications should not depend on this behavior for transactions involving Berkeley DB databases; all such transactions should be explicitly resolved. The problem with depending on this semantic is that aborting an unresolved transaction involving database operations requires a database handle. Because the database handles should have been closed before calling DbEnv.close, it will not be possible to abort the transaction, and recovery will have to be run on the Berkeley DB environment before further operations are done.</p> <p>Where log cursors were created using the <A HREF="../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor</CODE></A> method, calling DbEnv.close does not imply closing those cursors.</p> <p>In multithreaded applications, only a single thread may call DbEnv.close.</p> <p>After DbEnv.close has been called, regardless of its return, the Berkeley DB environment handle may not be accessed again.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><!-- --></A><H3>
+lock_vec</H3>
+<PRE>
+public void <B>lock_vec</B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><!-- --></A><H3>
+lockVector</H3>
+<PRE>
+public void <B>lockVector</B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockVector method atomically obtains and releases one or more locks from the lock table. The DbEnv.lockVector method is intended to support acquisition or trading of multiple locks under one lock table semaphore, as is needed for lock coupling or in multigranularity locking for lock escalation.</p> <p>If any of the requested locks cannot be acquired, or any of the locks to be released cannot be released, the operations before the failing operation are guaranteed to have completed successfully, and DbEnv.lockVector throws an exception</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A><p>If a lock cannot be granted because the requested lock conflicts with an existing lock, throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> immediately instead of waiting for the lock to become available. In this case, the index of the request that was not granted can be found by calling DbLockNotGrantedException.get_index. </li></ul><DD><CODE>locker</CODE> - an unsigned 32-bit integer quantity. It represents the entity requesting or releasing the lock.<DD><CODE>list</CODE> - The <b>list</b> array provided to DbEnv.lockVector is a set of DbLockRequest objects. Only <b>count</b> elements of <b>list</b> starting at <b>offset</b> are considered by DbEnv.lockVector. A DbLockRequest object has at least the following fields: <p>A DB_LOCKREQ structure has at least the following fields:</p> <p>The operation to be performed, which must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_GET"><CODE>Db.DB_LOCK_GET</CODE></A><p>Get the lock defined by the values of the <b>mode</b> and <b>obj</b> structure fields, for the specified <b>locker</b>. Upon return from DbEnv.lockVector, if the <b>lock</b> field is non-null, a reference to the acquired lock is stored there. (This reference is invalidated by any call to DbEnv.lockVector or <A HREF="../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>DbEnv.lockPut</CODE></A> that releases the lock.) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_GET_TIMEOUT"><CODE>Db.DB_LOCK_GET_TIMEOUT</CODE></A><p>Identical to <code>Db.DB_LOCK_GET</code> except that the value in the <b>timeout</b> structure field overrides any previously specified timeout value for this lock. A value of 0 turns off any previously specified timeout. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT"><CODE>Db.DB_LOCK_PUT</CODE></A><p>The lock to which the <b>lock</b> structure field refers is released. The <b>locker</b> parameter, and <b>mode</b> and <b>obj</b> fields are ignored. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT_ALL"><CODE>Db.DB_LOCK_PUT_ALL</CODE></A><p>All locks held by the specified <b>locker</b> are released. The <b>lock</b>, <b>mode</b>, and <b>obj</b> structure fields are ignored. Locks acquired in operations performed by the current call to DbEnv.lockVector which appear before the <code>Db.DB_LOCK_PUT_ALL</code> operation are released; those acquired in operations appearing after the <code>Db.DB_LOCK_PUT_ALL</code> operation are not released. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_PUT_OBJ"><CODE>Db.DB_LOCK_PUT_OBJ</CODE></A><p>All locks held on <b>obj</b> are released. The <b>locker</b> parameter and the <b>lock</b> and <b>mode</b> structure fields are ignored. Locks acquired in operations performed by the current call to DbEnv.lockVector that appear before the <code>Db.DB_LOCK_PUT_OBJ</code> operation are released; those acquired in operations appearing after the <code>Db.DB_LOCK_PUT_OBJ</code> operation are not released. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_TIMEOUT"><CODE>Db.DB_LOCK_TIMEOUT</CODE></A><p>Cause the specified <b>locker</b> to timeout immediately. If the database environment has not configured automatic deadlock detection, the transaction will timeout the next time deadlock detection is performed. As transactions acquire locks on behalf of a single locker ID, timing out the locker ID associated with a transaction will time out the transaction itself. </li></ul>A lock reference. <p>The lock mode, used as an index into the environment's lock conflict matrix. When using the default lock conflict matrix, <b>mode</b> must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_READ"><CODE>Db.DB_LOCK_READ</CODE></A><p>read (shared) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_WRITE"><CODE>Db.DB_LOCK_WRITE</CODE></A><p>write (exclusive) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IWRITE"><CODE>Db.DB_LOCK_IWRITE</CODE></A><p>intention to write (shared) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IREAD"><CODE>Db.DB_LOCK_IREAD</CODE></A><p>intention to read (shared) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_IWR"><CODE>Db.DB_LOCK_IWR</CODE></A><p>intention to read and write (shared) </li></ul>See <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>DbEnv.setLockConflicts</CODE></A> and <a href="../../../../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p> <p>An untyped byte string that specifies the object to be locked or released. Applications using the locking subsystem directly while also doing locking via the Berkeley DB access methods must take care not to inadvertently lock objects that happen to be equal to the unique file IDs used to lock files. See <a href="../../../../ref/lock/am_conv.html">Access method locking conventions</a> for more information. <p>The lock timeout value.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the DbEnv.lockVector method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the DbEnv.lockVector method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If the <A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> flag or lock timers were configured and the lock could not be granted before the wait-time expired, the DbEnv.lockVector method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockVector method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the maximum number of locks has been reached, the DbEnv.lockVector method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="open(java.lang.String, int, int)"><!-- --></A><H3>
+open</H3>
+<PRE>
+public void <B>open</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags,
+ int&nbsp;mode)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The DbEnv.open method opens a Berkeley DB environment. It provides a structure for creating a consistent environment for processes using one or more of the features of Berkeley DB.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db_home</CODE> - the database environment's home directory. For more information on <b>db_home</b>, and filename resolution in general, see <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>. The environment variable <b>DB_HOME</b> may be used as the path of the database home, as described in <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>.<DD><CODE>flags</CODE> - specifies the subsystems that are initialized and how the application's environment affects Berkeley DB file naming, among other things. The <b>flags</b> parameter must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <p>Because there are a large number of flags that can be specified, they have been grouped together by functionality. The first group of flags indicates which of the Berkeley DB subsystems should be initialized:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_JOINENV"><CODE>Db.DB_JOINENV</CODE></A><p>Join an existing environment. This option allows applications to join an existing environment without knowing which Berkeley DB subsystems the environment supports. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_CDB"><CODE>Db.DB_INIT_CDB</CODE></A><p>Initialize locking for the <a href="../../../../ref/cam/intro.html">Berkeley DB Concurrent Data Store</a> product. In this mode, Berkeley DB provides multiple reader/single writer access. The only other subsystem that should be specified with the <code>Db.DB_INIT_CDB</code> flag is <code>Db.DB_INIT_MPOOL</code>. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_LOCK"><CODE>Db.DB_INIT_LOCK</CODE></A><p>Initialize the locking subsystem. This subsystem should be used when multiple processes or threads are going to be reading and writing a Berkeley DB database, so that they do not interfere with each other. If all threads are accessing the database(s) read-only, locking is unnecessary. When the <code>Db.DB_INIT_LOCK</code> flag is specified, it is usually necessary to run a deadlock detector, as well. See <a href="../../../../utility/db_deadlock.html">db_deadlock</a> and <A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect</CODE></A> for more information. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_LOG"><CODE>Db.DB_INIT_LOG</CODE></A><p>Initialize the logging subsystem. This subsystem should be used when recovery from application or system failure is necessary. If the log region is being created and log files are already present, the log files are reviewed; subsequent log writes are appended to the end of the log, rather than overwriting current log entries. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_MPOOL"><CODE>Db.DB_INIT_MPOOL</CODE></A><p>Initialize the shared memory buffer pool subsystem. This subsystem should be used whenever an application is using any Berkeley DB access method. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_REP"><CODE>Db.DB_INIT_REP</CODE></A><p>Initialize the replication subsystem. This subsystem should be used whenever an application plans on using replication. The <code>Db.DB_INIT_REP</code> flag requires the <code>Db.DB_INIT_TXN</code> and <code>Db.DB_INIT_LOCK</code> flags also be configured. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_TXN"><CODE>Db.DB_INIT_TXN</CODE></A><p>Initialize the transaction subsystem. This subsystem should be used when recovery and atomicity of multiple operations are important. The <code>Db.DB_INIT_TXN</code> flag implies the <code>Db.DB_INIT_LOG</code> flag. </li></ul>The second group of flags govern what recovery, if any, is performed when the environment is initialized:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RECOVER"><CODE>Db.DB_RECOVER</CODE></A><p>Run normal recovery on this environment before opening it for normal use. If this flag is set, the <code>Db.DB_CREATE</code> flag must also be set because the regions will be removed and re-created. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RECOVER_FATAL"><CODE>Db.DB_RECOVER_FATAL</CODE></A><p>Run catastrophic recovery on this environment before opening it for normal use. If this flag is set, the <code>Db.DB_CREATE</code> flag must also be set because the regions will be removed and re-created. </li></ul>A standard part of the recovery process is to remove the existing Berkeley DB environment and create a new one in which to perform recovery. If the thread of control performing recovery does not specify the correct region initialization information (for example, the correct memory pool cache size), the result can be an application running in an environment with incorrect cache and other subsystem sizes. For this reason, the thread of control performing recovery should specify correct configuration information before calling the DbEnv.open method; or it should remove the environment after recovery is completed, leaving creation of the correctly sized environment to a subsequent call to DbEnv.open.</p> <p>All Berkeley DB recovery processing must be single-threaded; that is, only a single thread of control may perform recovery or access a Berkeley DB environment while recovery is being performed. Because it is not an error to specify Db.DB_RECOVER for an environment for which no recovery is required, it is reasonable programming practice for the thread of control responsible for performing recovery and creating the environment to always specify the Db.DB_CREATE and Db.DB_RECOVER flags during startup.</p> <p>The DbEnv.open function returns successfully if Db.DB_RECOVER or Db.DB_RECOVER_FATAL is specified and no log files exist, so it is necessary to ensure that all necessary log files are present before running recovery. For further information, consult <a href="../../../../utility/db_archive.html">db_archive</a> and <a href="../../../../utility/db_recover.html">db_recover</a>.</p> <p>The third group of flags govern file-naming extensions in the environment:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON"><CODE>Db.DB_USE_ENVIRON</CODE></A><p>The Berkeley DB process' environment may be permitted to specify information to be used when naming files; see <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files are used can create security problems, environment information will be used in file naming for all users only if the <code>Db.DB_USE_ENVIRON</code> flag is set. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON_ROOT"><CODE>Db.DB_USE_ENVIRON_ROOT</CODE></A><p>The Berkeley DB process' environment may be permitted to specify information to be used when naming files; see <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files are used can create security problems, if the <code>Db.DB_USE_ENVIRON_ROOT</code> flag is set, environment information will be used for file naming only for users with appropriate permissions (for example, users with a user-ID of 0 on UNIX systems). </li></ul>Finally, there are a few additional unrelated flags:</p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CREATE"><CODE>Db.DB_CREATE</CODE></A><p>Cause Berkeley DB subsystems to create any underlying files, as necessary. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCKDOWN"><CODE>Db.DB_LOCKDOWN</CODE></A><p>Lock shared Berkeley DB environment files and memory-mapped databases into memory. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIVATE"><CODE>Db.DB_PRIVATE</CODE></A><p>Specify that the environment will only be accessed by a single process (although that process may be multithreaded). This flag has two effects on the Berkeley DB environment. First, all underlying data structures are allocated from per-process memory instead of from shared memory that is potentially accessible to more than a single process. Second, mutexes are only configured to work between threads. <p>This flag should not be specified if more than a single process is accessing the environment because it is likely to cause database corruption and unpredictable behavior. For example, if both a server application and the Berkeley DB utility <a href="../../../../utility/db_stat.html">db_stat</a> are expected to access the environment, the <code>Db.DB_PRIVATE</code> flag should not be specified.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SYSTEM_MEM"><CODE>Db.DB_SYSTEM_MEM</CODE></A><p>Allocate memory from system shared memory instead of from memory backed by the filesystem. See <a href="../../../../ref/env/region.html">Shared Memory Regions</a> for more information. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_THREAD"><CODE>Db.DB_THREAD</CODE></A><p>Cause the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle returned by DbEnv.open to be <i>free-threaded</i>; that is, usable by multiple threads within a single address space. <p>Threading is always assumed in the Java API, so no special flags are required and Berkeley DB functions will always behave as if the <code>Db.DB_THREAD</code> flag was specified.</p> </li></ul><DD><CODE>mode</CODE> - On UNIX systems or in IEEE/ANSI Std 1003.1 (POSIX) environments, all files created by Berkeley DB are created with mode <b>mode</b> (as described in <b>chmod</b>(2)) and modified by the process' umask value at the time of creation (see <b>umask</b>(2)). If <b>mode</b> is 0, Berkeley DB will use a default mode of readable and writable by both owner and group. On Windows systems, the mode parameter is ignored. The group ownership of created files is based on the system and directory defaults, and is not further specified by Berkeley DB.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.open method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>The shared memory region was locked and (repeatedly) unavailable. <li>HP-UX only: a previously created Berkeley DB environment for this process still exists.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.open method will fail and throw a IllegalArgumentException exception if the Db.DB_THREAD flag was specified and fast mutexes are not available for this architecture; The DB_HOME or TMPDIR environment variables were set, but empty; An incorrectly formatted <b>NAME VALUE</b> entry or line was found; or if an invalid flag value or parameter was specified.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the DbEnv.open method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="remove(java.lang.String, int)"><!-- --></A><H3>
+remove</H3>
+<PRE>
+public void <B>remove</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The DbEnv.remove method destroys a Berkeley DB environment if it is not currently in use. The environment regions, including any backing files, are removed. Any log or database files and the environment directory are not removed.</p> <p>If there are processes that have called <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> without calling <A HREF="../../../com/sleepycat/db/DbEnv.html#close(int)"><CODE>DbEnv.close</CODE></A> (that is, there are processes currently using the environment), DbEnv.remove will fail without further action unless the <A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE"><CODE>Db.DB_FORCE</CODE></A> flag is set, in which case DbEnv.remove will attempt to remove the environment, regardless of any processes still using it.</p> <p>The result of attempting to forcibly destroy the environment when it is in use is unspecified. Processes using an environment often maintain open file descriptors for shared regions within it. On UNIX systems, the environment removal will usually succeed, and processes that have already joined the region will continue to run in that region without change. However, processes attempting to join the environment will either fail or create new regions. On other systems in which the <b>unlink</b>(2) system call will fail if any process has an open file descriptor for the file (for example Windows/NT), the region removal will fail.</p> <p>Calling DbEnv.remove should not be necessary for most applications because the Berkeley DB environment is cleaned up as part of normal database recovery procedures. However, applications may want to call DbEnv.remove as part of application shut down to free up system resources. For example, if the <A HREF="../../../com/sleepycat/db/Db.html#DB_SYSTEM_MEM"><CODE>Db.DB_SYSTEM_MEM</CODE></A> flag was specified to <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A>, it may be useful to call DbEnv.remove in order to release system shared memory segments that have been allocated. Or, on architectures in which mutexes require allocation of underlying system resources, it may be useful to call DbEnv.remove in order to release those resources. Alternatively, if recovery is not required because no database state is maintained across failures, and no system resources need to be released, it is possible to clean up an environment by simply removing all the Berkeley DB files in the database environment's directories.</p> <p>In multithreaded applications, only a single thread may call DbEnv.remove.</p> <p>A <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle that has already been used to open an environment should not be used to call the DbEnv.remove method; a new <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle should be created for that purpose.</p> <p>After DbEnv.remove has been called, regardless of its return, the Berkeley DB environment handle may not be accessed again.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db_home</CODE> - The <b>db_home</b> parameter names the database environment to be removed.<DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE"><CODE>Db.DB_FORCE</CODE></A><p>If the <A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE"><CODE><code>Db.DB_FORCE</code></CODE></A> flag is set, the environment is removed, regardless of any processes that may still using it, and no locks are acquired during this process. (Generally, the <A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE"><CODE><code>Db.DB_FORCE</code></CODE></A> flag is specified only when applications were unable to shut down cleanly, and there is a risk that an application may have died holding a Berkeley DB lock.) </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON"><CODE>Db.DB_USE_ENVIRON</CODE></A><p>The Berkeley DB process' environment may be permitted to specify information to be used when naming files; see <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files are used can create security problems, environment information will be used in file naming for all users only if the <code>Db.DB_USE_ENVIRON</code> flag is set. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON_ROOT"><CODE>Db.DB_USE_ENVIRON_ROOT</CODE></A><p>The Berkeley DB process' environment may be permitted to specify information to be used when naming files; see <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a>. Because permitting users to specify which files are used can create security problems, if the <code>Db.DB_USE_ENVIRON_ROOT</code> flag is set, environment information will be used for file naming only for users with appropriate permissions (for example, users with a user-ID of 0 on UNIX systems). </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.remove method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>The shared memory region was in use and the force flag was not set.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the DbEnv.remove method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_cachesize(int, int, int)"><!-- --></A><H3>
+set_cachesize</H3>
+<PRE>
+public void <B>set_cachesize</B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_errpfx()"><!-- --></A><H3>
+get_errpfx</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_errpfx</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getErrorPrefix()"><!-- --></A><H3>
+getErrorPrefix</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getErrorPrefix</B>()</PRE>
+<DL>
+<DD>The DbEnv.getErrorPrefix method returns the error prefix.</p> <p>The DbEnv.getErrorPrefix method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getErrorPrefix method returns the error prefix.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_errcall(com.sleepycat.db.DbErrcall)"><!-- --></A><H3>
+set_errcall</H3>
+<PRE>
+public void <B>set_errcall</B>(<A HREF="../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_error_stream(java.io.OutputStream)"><!-- --></A><H3>
+set_error_stream</H3>
+<PRE>
+public void <B>set_error_stream</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorStream(java.io.OutputStream)"><!-- --></A><H3>
+setErrorStream</H3>
+<PRE>
+public void <B>setErrorStream</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;stream)</PRE>
+<DL>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown. In some cases, however, the error information known to the Java layer may be insufficient to completely describe the cause of the error, especially during initial application debugging.</p> <p>The DbEnv.setErrorStream and <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A> methods are used to enhance the mechanism for reporting error messages to the application by setting a OutputStream to be used for displaying additional Berkeley DB error messages. In some cases, when an error occurs, Berkeley DB will output an additional error message to the specified stream.</p> <p>The error message will consist of the prefix string and a colon ("<b>:</b>") (if a prefix string was previously specified using <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>), an error string, and a trailing &lt;newline&gt; character.</p> <p>Alternatively, you can use the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> method to capture the additional error information in a way that does not use output streams. You should not mix these approaches. </p> <p>This error-logging enhancement does not slow performance or significantly increase application size, and may be run during normal operation as well as during application debugging.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>stream</CODE> - the application-specified output stream to be used for additional error information.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_errpfx(java.lang.String)"><!-- --></A><H3>
+set_errpfx</H3>
+<PRE>
+public void <B>set_errpfx</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorPrefix(java.lang.String)"><!-- --></A><H3>
+setErrorPrefix</H3>
+<PRE>
+public void <B>setErrorPrefix</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx)</PRE>
+<DL>
+<DD>Set the prefix string that appears before error messages issued by Berkeley DB.</p> <p>The DbEnv.setErrorPrefix method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>errpfx</CODE> - the application-specified error prefix for additional error messages.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_feedback(com.sleepycat.db.DbEnvFeedback)"><!-- --></A><H3>
+set_feedback</H3>
+<PRE>
+public void <B>set_feedback</B>(<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>&nbsp;feedback)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_rep_limit(int, int)"><!-- --></A><H3>
+set_rep_limit</H3>
+<PRE>
+public void <B>set_rep_limit</B>(int&nbsp;gbytes,
+ int&nbsp;bytes)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>setReplicationLimit(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_tx_timestamp(java.util.Date)"><!-- --></A><H3>
+set_tx_timestamp</H3>
+<PRE>
+public void <B>set_tx_timestamp</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><CODE>setTxnTimestamp(java.util.Date)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTxnTimestamp(java.util.Date)"><!-- --></A><H3>
+setTxnTimestamp</H3>
+<PRE>
+public void <B>setTxnTimestamp</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Recover to the time specified by <b>timestamp</b> rather than to the most current possible date.</p> <p>Once a database environment has been upgraded to a new version of Berkeley DB involving a log format change (see <a href="../../../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>), it is no longer possible to recover to a specific time before that upgrade.</p> <p>The DbEnv.setTxnTimestamp method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setTxnTimestamp method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>timestamp</CODE> - references the memory location where the recovery timestamp is located. <p>Note that only the seconds (not the milliseconds) of the <b>timestamp</b> are used</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setTxnTimestamp method will fail and throw a IllegalArgumentException exception if it is not possible to recover to the specified time using the log files currently present in the environment; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+dbremove</H3>
+<PRE>
+public void <B>dbremove</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>,
+ <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>dbRemove(DbTxn,String,String,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+dbRemove</H3>
+<PRE>
+public void <B>dbRemove</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>,
+ <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters. If no <b>database</b> is specified, the underlying file represented by <b>file</b> is removed, incidentally removing all of the databases it contained.</p> <p>Applications should never remove databases with open <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handles, or in the case of removing a file, when any database in the file has an open handle. For example, some architectures do not permit the removal of files with open system handles. On these architectures, attempts to remove databases currently in use by any thread of control in the system will fail.</p> <h3>Environment Variables</h3> <p>The environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>DbEnv.dbRemove is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - the database to be removed.<DD><CODE>file</CODE> - the physical file which contains the database(s) to be removed.<DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the DbEnv.dbRemove call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. </li></ul><DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.dbRemove method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to remove the underlying file and a database in the file was currently open.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the DbEnv.dbRemove method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the DbEnv.dbRemove method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.dbRemove method will fail and throw a IllegalArgumentException exception if DbEnv.dbRemove called before <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the DbEnv.dbRemove method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+dbrename</H3>
+<PRE>
+public void <B>dbrename</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>,
+ <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>dbRename(DbTxn,String,String,String,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><!-- --></A><H3>
+dbRename</H3>
+<PRE>
+public void <B>dbRename</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>,
+ <A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>,
+ <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/FileNotFoundException.html">FileNotFoundException</A></PRE>
+<DL>
+<DD>The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>. If no <b>database</b> is specified, the underlying file represented by <b>file</b> is renamed, incidentally renaming all of the databases it contained.</p> <p>Applications should not rename databases that are currently in use. If an underlying file is being renamed and logging is currently enabled in the database environment, no database in the file may be open when the DbEnv.dbRename method is called. In particular, some architectures do not permit renaming files with open handles. On these architectures, attempts to rename databases that are currently in use by any thread of control in the system will fail.</p> <h3>Environment Variables</h3> <p>The environment variable <b>DB_HOME</b> may be used as the path of the database environment home.</p> <p>DbEnv.dbRename is affected by any database directory specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir</CODE></A> method, or by setting the "set_data_dir" string in the environment's <b>DB_CONFIG</b> file.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>database</CODE> - the database to be removed.<DD><CODE>file</CODE> - the physical file which contains the database(s) to be removed.<DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>Enclose the DbEnv.dbRename call within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. </li></ul><DD><CODE>newname</CODE> - the new name of the database or file.<DD><CODE>txnid</CODE> - If the operation is to be transaction-protected, the <b>txnid</b> parameter is a transaction handle returned from <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>; otherwise, null.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.dbRename method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to rename the underlying file and a database in the file was currently open.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the DbEnv.dbRename method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the DbEnv.dbRename method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.dbRename method will fail and throw a IllegalArgumentException exception if DbEnv.dbRename called before <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.
+<DD><CODE>FileNotFoundException</CODE> - If the file or directory does not exist, the DbEnv.dbRename method will fail and throw a FileNotFoundException exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="err(int, java.lang.String)"><!-- --></A><H3>
+err</H3>
+<PRE>
+public void <B>err</B>(int&nbsp;error,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</PRE>
+<DL>
+<DD>The DbEnv.err, DbEnv.errx, <A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods provide error-messaging functionality for applications written using the Berkeley DB library.</p> <p>The DbEnv.err method constructs an error message consisting of the following elements:</p> <blockquote> <p>If no error callback function has been set using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A> method, any prefix string specified using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A> method, followed by two separating characters: a colon and a &lt;space&gt; character. <p> <p>Two separating characters: a colon and a &lt;space&gt; character. <p>The standard system or Berkeley DB library error string associated with the <b>error</b> value, as returned by the <A HREF="../../../com/sleepycat/db/DbEnv.html#strerror(int)"><CODE>DbEnv.strerror</CODE></A> method. </blockquote> <p>This constructed error message is then handled as follows:</p> <blockquote><p>If an error callback function has been set (see <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>Db.setErrorHandler</CODE></A> and <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler</CODE></A>), that function is called with two parameters: any prefix string specified (see <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> and <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>) and the error message.</p> <p>If an OutputStream has been set (see <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A>), the error message is written to that stream.</p> <p>If none of these output options has been configured, the error message is written to System.err, the standard error output stream.</p></blockquote>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>error</CODE> - the error value for which the DbEnv.err and <A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> methods will display a explanatory string.<DD><CODE>message</CODE> - an error message to display.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="errx(java.lang.String)"><!-- --></A><H3>
+errx</H3>
+<PRE>
+public void <B>errx</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;message)</PRE>
+<DL>
+<DD>The DbEnv.errx and <A HREF="../../../com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods perform identically to the DbEnv.err and <A HREF="../../../com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> methods, except that they do not append the final separator characters and standard error string to the error message.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>message</CODE> - an error message to display.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_data_dirs()"><!-- --></A><H3>
+get_data_dirs</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[] <B>get_data_dirs</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getDataDirs()"><CODE>getDataDirs()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDataDirs()"><!-- --></A><H3>
+getDataDirs</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[] <B>getDataDirs</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getDataDirs method returns the array of directories.</p> <p>The DbEnv.getDataDirs method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getDataDirs method returns the array of directories.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_encrypt_flags()"><!-- --></A><H3>
+get_encrypt_flags</H3>
+<PRE>
+public int <B>get_encrypt_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEncryptFlags()"><!-- --></A><H3>
+getEncryptFlags</H3>
+<PRE>
+public int <B>getEncryptFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getEncryptFlags method returns the encryption flags.</p> <p>The DbEnv.getEncryptFlags method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getEncryptFlags method returns the encryption flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_flags()"><!-- --></A><H3>
+get_flags</H3>
+<PRE>
+public int <B>get_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getFlags()"><CODE>getFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFlags()"><!-- --></A><H3>
+getFlags</H3>
+<PRE>
+public int <B>getFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getFlags method returns the configuration flags.</p> <p>The DbEnv.getFlags method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getFlags method returns the configuration flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_home()"><!-- --></A><H3>
+get_home</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_home</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getDbEnvHome()"><CODE>getDbEnvHome()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDbEnvHome()"><!-- --></A><H3>
+getDbEnvHome</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getDbEnvHome</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getDbEnvHome method returns the database environment home directory.</p> <p>The DbEnv.getDbEnvHome method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getDbEnvHome method returns the database environment home directory.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_open_flags()"><!-- --></A><H3>
+get_open_flags</H3>
+<PRE>
+public int <B>get_open_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOpenFlags()"><!-- --></A><H3>
+getOpenFlags</H3>
+<PRE>
+public int <B>getOpenFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getOpenFlags method returns the open method flags.</p> <p>The DbEnv.getOpenFlags method may not be called before the DbEnv.open method has been called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getOpenFlags method returns the open method flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_shm_key()"><!-- --></A><H3>
+get_shm_key</H3>
+<PRE>
+public long <B>get_shm_key</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getSegmentId()"><CODE>getSegmentId()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSegmentId()"><!-- --></A><H3>
+getSegmentId</H3>
+<PRE>
+public long <B>getSegmentId</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getSegmentId method returns the base segment ID.</p> <p>The DbEnv.getSegmentId method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getSegmentId method returns the base segment ID.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_tas_spins()"><!-- --></A><H3>
+get_tas_spins</H3>
+<PRE>
+public int <B>get_tas_spins</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><CODE>getTestAndSetSpins()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTestAndSetSpins()"><!-- --></A><H3>
+getTestAndSetSpins</H3>
+<PRE>
+public int <B>getTestAndSetSpins</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getTestAndSetSpins method returns the test-and-set spin count.</p> <p>The DbEnv.getTestAndSetSpins method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getTestAndSetSpins method returns the test-and-set spin count.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_tmp_dir()"><!-- --></A><H3>
+get_tmp_dir</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_tmp_dir</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTmpDir()"><CODE>getTmpDir()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTmpDir()"><!-- --></A><H3>
+getTmpDir</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getTmpDir</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getTmpDir method returns the database environment temporary file directory.</p> <p>The DbEnv.getTmpDir method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getTmpDir method returns the database environment temporary file directory.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_verbose(int)"><!-- --></A><H3>
+get_verbose</H3>
+<PRE>
+public boolean <B>get_verbose</B>(int&nbsp;which)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVerbose(int)"><CODE>getVerbose(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVerbose(int)"><!-- --></A><H3>
+getVerbose</H3>
+<PRE>
+public boolean <B>getVerbose</B>(int&nbsp;which)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getVerbose method returns whether the specified <b>which</b> parameter is currently set or not.</p> <p>The DbEnv.getVerbose method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>which</CODE> - the message value for which configuration is being checked.
+<DT><B>Returns:</B><DD>The DbEnv.getVerbose method returns whether the specified <b>which</b> parameter is currently set or not.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_cachesize(long, int)"><!-- --></A><H3>
+set_cachesize</H3>
+<PRE>
+public void <B>set_cachesize</B>(long&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCacheSize(long, int)"><!-- --></A><H3>
+setCacheSize</H3>
+<PRE>
+public void <B>setCacheSize</B>(long&nbsp;bytes,
+ int&nbsp;ncache)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the shared memory buffer pool -- that is, the cache. The cache should be the size of the normal working data set of the application, with some small amount of additional memory for unusual situations. (Note: the working set is not the same as the number of pages accessed simultaneously, and is usually much larger.)</p> <p>The default cache size is 256KB, and may not be specified as less than 20KB. Any cache size less than 500MB is automatically increased by 25% to account for buffer pool overhead; cache sizes larger than 500MB are used as specified. The current maximum size of a single cache is 4GB. (All sizes are in powers-of-two, that is, 256KB is 2^32 not 256,000.) For information on tuning the Berkeley DB cache size, see <a href="../../../../ref/am_conf/cachesize.html">Selecting a cache size</a>.</p> <p>It is possible to specify caches to Berkeley DB larger than 4GB and/or large enough they cannot be allocated contiguously on some architectures. For example, some releases of Solaris limit the amount of memory that may be allocated contiguously by a process. If <b>ncache</b> is 0 or 1, the cache will be allocated contiguously in memory. If it is greater than 1, the cache will be broken up into <b>ncache</b> equally sized, separate pieces of memory.</p> <p>The database environment's cache size may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_cachesize", one or more whitespace characters, and the cache size specified in three parts: the gigabytes of cache, the additional bytes of cache, and the number of caches, also separated by whitespace characters. For example, "set_cachesize 2 524288000 3" would create a 2.5GB logical cache, split between three physical caches. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setCacheSize method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setCacheSize method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setCacheSize will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The size of the cache in bytes.<DD><CODE>ncache</CODE> - the number of caches to create.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setCacheSize method will fail and throw a IllegalArgumentException exception if the specified cache size was impossibly small; the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_data_dir(java.lang.String)"><!-- --></A><H3>
+set_data_dir</H3>
+<PRE>
+public void <B>set_data_dir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>setDataDir(String)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDataDir(java.lang.String)"><!-- --></A><H3>
+setDataDir</H3>
+<PRE>
+public void <B>setDataDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the path of a directory to be used as the location of the access method database files. Paths specified to the <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> function will be searched relative to this path. Paths set using this method are additive, and specifying more than one will result in each specified directory being searched for database files. If any directories are specified, created database files will always be created in the first path specified.</p> <p>If no database directories are specified, database files can exist only in the environment home directory. See <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p> <p>For the greatest degree of recoverability from system or application failure, database files and log files should be located on separate physical devices.</p> <p>The database environment's data directories may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_data_dir", one or more whitespace characters, and the directory name. </p> <p>The DbEnv.setDataDir method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setDataDir method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setDataDir must be consistent with the existing environment or corruption can occur.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dir</CODE> - a directory to be used as a location for database files.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setDataDir method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_encrypt(java.lang.String, int)"><!-- --></A><H3>
+set_encrypt</H3>
+<PRE>
+public void <B>set_encrypt</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setEncrypted(java.lang.String, int)"><!-- --></A><H3>
+setEncrypted</H3>
+<PRE>
+public void <B>setEncrypted</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the password used by the Berkeley DB library to perform encryption and decryption.</p> <p>The DbEnv.setEncrypted method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setEncrypted method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setEncrypted must be consistent with the existing environment or an error will be returned. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ENCRYPT_AES"><CODE>Db.DB_ENCRYPT_AES</CODE></A><p>Use the Rijndael/AES (also known as the Advanced Encryption Standard and Federal Information Processing Standard (FIPS) 197) algorithm for encryption or decryption. </li></ul><DD><CODE>passwd</CODE> - the password used to perform encryption and decryption.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.setEncrypted method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>Cryptography is not available in this Berkeley DB release.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setEncrypted method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setErrorHandler(com.sleepycat.db.DbErrorHandler)"><!-- --></A><H3>
+setErrorHandler</H3>
+<PRE>
+public void <B>setErrorHandler</B>(<A HREF="../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown. In some cases, however, the <b>errno</b> value may be insufficient to completely describe the cause of the error, especially during initial application debugging. <p>The DbEnv.setOnError and <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>Db.setErrorHandler</CODE></A> methods are used to enhance the mechanism for reporting error messages to the application. The DbEnv.setOnError and <A HREF="../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>Db.setErrorHandler</CODE></A> methods must be called with a single object parameter. The object's class must implement the DbErrorHandler interface.</p> <p>In some cases, when an error occurs, Berkeley DB will invoke the object's errcall() method with two parameters; the first is the prefix string (as previously set by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>), the second will be an error message string. It is up to this method to display the message in an appropriate manner.</p> <p>Alternatively, you can use the <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A> methods to display the additional information via an output stream. You should not mix these approaches.</p> <p>This error-logging enhancement does not slow performance or significantly increase application size, and may be run during normal operation as well as during application debugging.</p> <p>The DbEnv.setOnError method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db_errcall_fcn</CODE> - the application-specified error reporting function. The function takes two parameters: <p>The <b>errpfx</b> parameter is the prefix string (as previously set by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>). <p>The <b>msg</b> parameter is the error message string.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_flags(int, boolean)"><!-- --></A><H3>
+set_flags</H3>
+<PRE>
+public void <B>set_flags</B>(int&nbsp;flags,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>setFlags(int,boolean)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFlags(int, boolean)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int&nbsp;flags,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Configure a database environment.</p> <p>The database environment's flag values may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_flags", one or more whitespace characters, and the method flag parameter as a string; for example, "set_flags DB_TXN_NOSYNC". Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE>Db.DB_AUTO_COMMIT</CODE></A><p>If set, operations for which no explicit transaction handle was specified, and which modify databases in the database environment, will be automatically enclosed within a transaction. If the call succeeds, changes made by the operation will be recoverable. If the call fails, the operation will have made no changes. <p>Calling DbEnv.setFlags with the <A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE><code>Db.DB_AUTO_COMMIT</code></CODE></A> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE><code>Db.DB_AUTO_COMMIT</code></CODE></A> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><CODE><code>Db.DB_AUTO_COMMIT</code></CODE></A> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CDB_ALLDB"><CODE>Db.DB_CDB_ALLDB</CODE></A><p>If set, Berkeley DB Concurrent Data Store applications will perform locking on an environment-wide basis rather than on a per-database basis. <p>Calling DbEnv.setFlags with the <code>Db.DB_CDB_ALLDB</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_CDB_ALLDB</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_CDB_ALLDB</code> flag may be used to configure Berkeley DB only before the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRECT_DB"><CODE>Db.DB_DIRECT_DB</CODE></A><p>Turn off system buffering of Berkeley DB database files to avoid double caching. <p>Calling DbEnv.setFlags with the <code>Db.DB_DIRECT_DB</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_DIRECT_DB</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_DIRECT_DB</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRECT_LOG"><CODE>Db.DB_DIRECT_LOG</CODE></A><p>Turn off system buffering of Berkeley DB log files to avoid double caching. <p>Calling DbEnv.setFlags with the <code>Db.DB_DIRECT_LOG</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_DIRECT_LOG</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_DIRECT_LOG</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOG_AUTOREMOVE"><CODE>Db.DB_LOG_AUTOREMOVE</CODE></A><p>If set, Berkeley DB will automatically remove log files that are no longer needed. Automatic log file removal is likely to make catastrophic recovery impossible. <p>Calling DbEnv.setFlags with the <code>Db.DB_LOG_AUTOREMOVE</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_LOG_AUTOREMOVE</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_LOG_AUTOREMOVE</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOLOCKING"><CODE>Db.DB_NOLOCKING</CODE></A><p>If set, Berkeley DB will grant all requested mutual exclusion mutexes and database locks without regard for their actual availability. This functionality should never be used for purposes other than debugging. <p>Calling DbEnv.setFlags with the <code>Db.DB_NOLOCKING</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). </p> <p>The <code>Db.DB_NOLOCKING</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOMMAP"><CODE>Db.DB_NOMMAP</CODE></A><p>If set, Berkeley DB will copy read-only database files into the local cache instead of potentially mapping them into process memory (see the description of the <A HREF="../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>DbEnv.setMemoryPoolMapSize</CODE></A> method for further information). <p>Calling DbEnv.setFlags with the <code>Db.DB_NOMMAP</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_NOMMAP</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_NOMMAP</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOPANIC"><CODE>Db.DB_NOPANIC</CODE></A><p>If set, Berkeley DB will ignore any panic state in the database environment. (Database environments in a panic state normally refuse all attempts to call Berkeley DB functions, returning <a href="../../../../ref/program/errorret.html#DB_RUNRECOVERY"><code>Db.DB_RUNRECOVERY</code></a>.) This functionality should never be used for purposes other than debugging. <p>Calling DbEnv.setFlags with the <code>Db.DB_NOPANIC</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). </p> <p>The <code>Db.DB_NOPANIC</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_OVERWRITE"><CODE>Db.DB_OVERWRITE</CODE></A><p>Overwrite files stored in encrypted formats before deleting them. Berkeley DB overwrites files using alternating 0xff, 0x00 and 0xff byte patterns. For file overwriting to be effective, the underlying file must be stored on a fixed-block filesystem. Systems with journaling or logging filesystems will require operating system support and probably modification of the Berkeley DB sources. <p>Calling DbEnv.setFlags with the <code>Db.DB_OVERWRITE</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). </p> <p>The <code>Db.DB_OVERWRITE</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PANIC_ENVIRONMENT"><CODE>Db.DB_PANIC_ENVIRONMENT</CODE></A><p>If set, Berkeley DB will set the panic state for the database environment. (Database environments in a panic state normally refuse all attempts to call Berkeley DB functions, returning <a href="../../../../ref/program/errorret.html#DB_RUNRECOVERY"><code>Db.DB_RUNRECOVERY</code></a>.) This flag may not be specified using the environment's <b>DB_CONFIG</b> file. This flag may be used to configure Berkeley DB only after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. <p>Calling DbEnv.setFlags with the <code>Db.DB_PANIC_ENVIRONMENT</code> flag affects the database environment, including all threads of control accessing the database environment.</p> <p>The <code>Db.DB_PANIC_ENVIRONMENT</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REGION_INIT"><CODE>Db.DB_REGION_INIT</CODE></A><p>In some applications, the expense of page-faulting the underlying shared memory regions can affect performance. (For example, if the page-fault occurs while holding a lock, other lock requests can convoy, and overall throughput may decrease.) If set, Berkeley DB will page-fault shared regions into memory when initially creating or joining a Berkeley DB environment. In addition, Berkeley DB will write the shared regions when creating an environment, forcing the underlying virtual memory and filesystems to instantiate both the necessary memory and the necessary disk space. This can also avoid out-of-disk space failures later on. <p>Calling DbEnv.setFlags with the <code>Db.DB_REGION_INIT</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_REGION_INIT</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_REGION_INIT</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED"><CODE>Db.DB_TIME_NOTGRANTED</CODE></A><p>If set, database calls timing out based on lock or transaction timeout values will throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception instead of <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A>. This allows applications to distinguish between operations which have deadlocked and operations which have exceeded their time limits. <p>Calling DbEnv.setFlags with the <A HREF="../../../com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED"><CODE><code>Db.DB_TIME_NOTGRANTED</code></CODE></A> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <A HREF="../../../com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED"><CODE><code>Db.DB_TIME_NOTGRANTED</code></CODE></A> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <A HREF="../../../com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED"><CODE><code>Db.DB_TIME_NOTGRANTED</code></CODE></A> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><CODE>Db.DB_TXN_NOSYNC</CODE></A><p>If set, Berkeley DB will not write or synchronously flush the log on transaction commit. This means that transactions exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the application or system fails, it is possible some number of the most recently committed transactions may be undone during recovery. The number of transactions at risk is governed by how many log updates can fit into the log buffer, how often the operating system flushes dirty buffers to disk, and how often the log is checkpointed. <p>Calling DbEnv.setFlags with the <code>Db.DB_TXN_NOSYNC</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_TXN_NOSYNC</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_TXN_NOSYNC</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOT_DURABLE"><CODE>Db.DB_TXN_NOT_DURABLE</CODE></A><p>If set, Berkeley DB will not write log records. This means that transactions exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the application or system fails, integrity will not persist. All database files must be verified and/or restored from backup after a failure. In order to ensure integrity after application shut down, all database handles must be closed without specifying <A HREF="../../../com/sleepycat/db/Db.html#DB_NOSYNC"><CODE><code>Db.DB_NOSYNC</code></CODE></A>, or all database changes must be flushed from the database environment cache using the <A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint</CODE></A> method. <p>Calling DbEnv.setFlags with the <code>Db.DB_TXN_NOT_DURABLE</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_TXN_NOT_DURABLE</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_TXN_NOT_DURABLE</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_WRITE_NOSYNC"><CODE>Db.DB_TXN_WRITE_NOSYNC</CODE></A><p>If set, Berkeley DB will write, but will not synchronously flush, the log on transaction commit. This means that transactions exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but if the system fails, it is possible some number of the most recently committed transactions may be undone during recovery. The number of transactions at risk is governed by how often the system flushes dirty buffers to disk and how often the log is checkpointed. <p>Calling DbEnv.setFlags with the <code>Db.DB_TXN_WRITE_NOSYNC</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_TXN_WRITE_NOSYNC</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_TXN_WRITE_NOSYNC</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_YIELDCPU"><CODE>Db.DB_YIELDCPU</CODE></A><p>If set, Berkeley DB will yield the processor immediately after each page or mutex acquisition. This functionality should never be used for purposes other than stress testing. <p>Calling DbEnv.setFlags with the <code>Db.DB_YIELDCPU</code> flag only affects the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle (and any other Berkeley DB handles opened within the scope of that handle). For consistent behavior across the environment, all <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handles opened in the environment must either set the <code>Db.DB_YIELDCPU</code> flag or the flag should be specified in the <b>DB_CONFIG</b> configuration file.</p> <p>The <code>Db.DB_YIELDCPU</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><DD><CODE>onoff</CODE> - If the <b>onoff</b> parameter is false, the specified flags are cleared; otherwise they are set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setFlags method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><!-- --></A><H3>
+setFeedbackHandler</H3>
+<PRE>
+public void <B>setFeedbackHandler</B>(<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>&nbsp;db_feedback_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_mp_mmapsize(long)"><!-- --></A><H3>
+set_mp_mmapsize</H3>
+<PRE>
+public void <B>set_mp_mmapsize</B>(long&nbsp;mp_mmapsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>setMemoryPoolMapSize(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMemoryPoolMapSize(long)"><!-- --></A><H3>
+setMemoryPoolMapSize</H3>
+<PRE>
+public void <B>setMemoryPoolMapSize</B>(long&nbsp;mp_mmapsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Files that are opened read-only in the pool (and that satisfy a few other criteria) are, by default, mapped into the process address space instead of being copied into the local cache. This can result in better-than-usual performance because available virtual memory is normally much larger than the local cache, and page faults are faster than page copying on many systems. However, it can cause resource starvation in the presence of limited virtual memory, and it can result in immense process sizes in the presence of large databases.</p> <p>The DbEnv.getMemoryPoolMapSize method sets the maximum file size, in bytes, for a file to be mapped into the process address space. If no value is specified, it defaults to 10MB.</p> <p>The database environment's maximum mapped file size may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_mp_mmapsize", one or more whitespace characters, and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setMemoryPoolMapSize method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setMemoryPoolMapSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mp_mmapsize</CODE> - the maximum file size, in bytes, for a file to be mapped into the process address space.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setMemoryPoolMapSize method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPanicHandler(com.sleepycat.db.DbPanicHandler)"><!-- --></A><H3>
+setPanicHandler</H3>
+<PRE>
+public void <B>setPanicHandler</B>(<A HREF="../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><!-- --></A><H3>
+set_rpc_server</H3>
+<PRE>
+public void <B>set_rpc_server</B>(<A HREF="../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>setRpcServer(DbClient,String,long,long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><!-- --></A><H3>
+setRpcServer</H3>
+<PRE>
+public void <B>setRpcServer</B>(<A HREF="../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Establishes a connection for this <b>dbenv</b> to a RPC server.</p> The DbEnv.setRpcServer method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setRpcServer method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cl_timeout</CODE> - specifies the number of seconds the client should wait for results to come back from the server. Once the timeout has expired on any communication with the server, Db.DB_NOSERVER will be returned. If this value is zero, a default timeout is used.<DD><CODE>client</CODE> - reserved for future use. If it is not NULL, an exception is thrown.<DD><CODE>host</CODE> - the host to which the Berkeley DB server will connect and create a channel for communication.<DD><CODE>flags</CODE> - currently unused, and must be set to 0.<DD><CODE>sv_timeout</CODE> - specifies the number of seconds the server should allow a client connection to remain idle before assuming that the client is gone. Once that timeout has been reached, the server releases all resources associated with that client connection. Subsequent attempts by that client to communicate with the server result in Db.DB_NOSERVER_ID, indicating that an invalid identifier has been given to the server. This value can be considered a hint to the server. The server may alter this value based on its own policies or allowed values. If this value is zero, a default timeout is used.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setRpcServer method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_shm_key(long)"><!-- --></A><H3>
+set_shm_key</H3>
+<PRE>
+public void <B>set_shm_key</B>(long&nbsp;shm_key)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setSegmentId(long)"><CODE>setSegmentId(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSegmentId(long)"><!-- --></A><H3>
+setSegmentId</H3>
+<PRE>
+public void <B>setSegmentId</B>(long&nbsp;shm_key)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Specify a base segment ID for Berkeley DB environment shared memory regions created in system memory on VxWorks or systems supporting X/Open-style shared memory interfaces; for example, UNIX systems supporting <b>shmget</b>(2) and related System V IPC interfaces.</p> <p>This base segment ID will be used when Berkeley DB shared memory regions are first created. It will be incremented a small integer value each time a new shared memory region is created; that is, if the base ID is 35, the first shared memory region created will have a segment ID of 35, and the next one will have a segment ID between 36 and 40 or so. A Berkeley DB environment always creates a master shared memory region; an additional shared memory region for each of the subsystems supported by the environment (Locking, Logging, Memory Pool and Transaction); plus an additional shared memory region for each additional memory pool cache that is supported. Already existing regions with the same segment IDs will be removed. See <a href="../../../../ref/env/region.html">Shared Memory Regions</a> for more information.</p> <p>The intent behind this method is two-fold: without it, applications have no way to ensure that two Berkeley DB applications don't attempt to use the same segment IDs when creating different Berkeley DB environments. In addition, by using the same segment IDs each time the environment is created, previously created segments will be removed, and the set of segments on the system will not grow without bound.</p> <p>The database environment's base segment ID may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_shm_key", one or more whitespace characters, and the ID. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setSegmentId method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setSegmentId method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setSegmentId must be consistent with the existing environment or corruption can occur.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>shm_key</CODE> - the base segment ID for the database environment.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setSegmentId method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_tas_spins(int)"><!-- --></A><H3>
+set_tas_spins</H3>
+<PRE>
+public void <B>set_tas_spins</B>(int&nbsp;tas_spins)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><CODE>setTestAndSetSpins(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTestAndSetSpins(int)"><!-- --></A><H3>
+setTestAndSetSpins</H3>
+<PRE>
+public void <B>setTestAndSetSpins</B>(int&nbsp;tas_spins)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Specify that test-and-set mutexes should spin <b>tas_spins</b> times without blocking. The value defaults to 1 on uniprocessor systems and to 50 times the number of processors on multiprocessor systems.</p> <p>The database environment's test-and-set spin count may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_tas_spins", one or more whitespace characters, and the number of spins. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setTestAndSetSpins method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setTestAndSetSpins method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>tas_spins</CODE> - the number of spins test-and-set mutexes should execute before blocking.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setTestAndSetSpins method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_timeout(long, int)"><!-- --></A><H3>
+set_timeout</H3>
+<PRE>
+public void <B>set_timeout</B>(long&nbsp;timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>setTimeout(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTimeout(long, int)"><!-- --></A><H3>
+setTimeout</H3>
+<PRE>
+public void <B>setTimeout</B>(long&nbsp;timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.setTimeout method sets timeout values for locks or transactions in the database environment.</p> <p>Timeouts are checked whenever a thread of control blocks on a lock or when deadlock detection is performed. (In the case of Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly through the Lock subsystem interfaces. In the case of Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a transaction. In either case, it may be a lock requested by the database access methods underlying the application.) As timeouts are only checked when the lock request first blocks or when deadlock detection is performed, the accuracy of the timeout depends on how often deadlock detection is performed.</p> <p>Timeout values specified for the database environment may be overridden on a per-lock or per-transaction basis. See <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> and <A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout</CODE></A> for more information.</p> <p>The DbEnv.setTimeout method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setTimeout method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_LOCK_TIMEOUT"><CODE>Db.DB_SET_LOCK_TIMEOUT</CODE></A><p>Set the timeout value for locks in this database environment. <p>The database environment's lock timeout value may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lock_timeout", one or more whitespace characters, and the lock timeout value. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_TXN_TIMEOUT"><CODE>Db.DB_SET_TXN_TIMEOUT</CODE></A><p>Set the timeout value for transactions in this database environment. <p>The database environment's transaction timeout value may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_txn_timeout", one or more whitespace characters, and the transaction timeout value. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> </li></ul><DD><CODE>timeout</CODE> - the timeout value. It must be specified as an unsigned 32-bit number of microseconds, limiting the maximum timeout to roughly 71 minutes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setTimeout method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_tmp_dir(java.lang.String)"><!-- --></A><H3>
+set_tmp_dir</H3>
+<PRE>
+public void <B>set_tmp_dir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><CODE>setTmpDir(String)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTmpDir(java.lang.String)"><!-- --></A><H3>
+setTmpDir</H3>
+<PRE>
+public void <B>setTmpDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Specify the path of a directory to be used as the location of temporary files. The files created to back in-memory access method databases will be created relative to this path. These temporary files can be quite large, depending on the size of the database.</p> <p>If no directories are specified, the following alternatives are checked in the specified order. The first existing directory path is used for all temporary files.</p> <ol> <p><li>The value of the environment variable <b>TMPDIR</b>. <li>The value of the environment variable <b>TEMP</b>. <li>The value of the environment variable <b>TMP</b>. <li>The value of the environment variable <b>TempFolder</b>. <li>The value returned by the GetTempPath interface. <li>The directory <b>/var/tmp</b>. <li>The directory <b>/usr/tmp</b>. <li>The directory <b>/temp</b>. <li>The directory <b>/tmp</b>. <li>The directory <b>C:/temp</b>. <li>The directory <b>C:/tmp</b>. </ol> <p>Note: environment variables are only checked if one of the <A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON"><CODE>Db.DB_USE_ENVIRON</CODE></A> or <A HREF="../../../com/sleepycat/db/Db.html#DB_USE_ENVIRON_ROOT"><CODE>Db.DB_USE_ENVIRON_ROOT</CODE></A> flags were specified.</p> <p>Note: the GetTempPath interface is only checked on Win/32 platforms.</p> <p>The database environment's temporary file directory may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_tmp_dir", one or more whitespace characters, and the directory name. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setTmpDir method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setTmpDir method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setTmpDir must be consistent with the existing environment or corruption can occur.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dir</CODE> - the directory to be used to store temporary files.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setTmpDir method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_tx_max(int)"><!-- --></A><H3>
+set_tx_max</H3>
+<PRE>
+public void <B>set_tx_max</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setTxnMax(int)"><CODE>setTxnMax(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTxnMax(int)"><!-- --></A><H3>
+setTxnMax</H3>
+<PRE>
+public void <B>setTxnMax</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Configure the Berkeley DB database environment to support at least <b>max</b> active transactions. This value bounds the size of the memory allocated for transactions. Child transactions are counted as active until they either commit or abort.</p> <p>When all of the memory available in the database environment for transactions is in use, calls to <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A> will fail (until some active transactions complete). If this interface is never called, the database environment is configured to support at least 20 active transactions.</p> <p>The database environment's number of active transactions may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_tx_max", one or more whitespace characters, and the number of transactions. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setTxnMax method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setTxnMax method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setTxnMax will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>max</CODE> - The <b>max</b> parameter configures the minimum number of simultaneously active transactions supported by Berkeley DB database environment.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setTxnMax method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_app_dispatch(com.sleepycat.db.DbAppDispatch)"><!-- --></A><H3>
+set_app_dispatch</H3>
+<PRE>
+public void <B>set_app_dispatch</B>(<A HREF="../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>setAppDispatch(DbAppDispatch)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setAppDispatch(com.sleepycat.db.DbAppDispatch)"><!-- --></A><H3>
+setAppDispatch</H3>
+<PRE>
+public void <B>setAppDispatch</B>(<A HREF="../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_verbose(int, boolean)"><!-- --></A><H3>
+set_verbose</H3>
+<PRE>
+public void <B>set_verbose</B>(int&nbsp;which,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>setVerbose(int,boolean)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setVerbose(int, boolean)"><!-- --></A><H3>
+setVerbose</H3>
+<PRE>
+public void <B>setVerbose</B>(int&nbsp;which,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.setVerbose method turns specific additional informational and debugging messages in the Berkeley DB message output on and off. To see the additional messages, verbose messages must also be configured for the application. For more information on verbose messages, see the <A HREF="../../../com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>Db.setErrorStream</CODE></A> method.</p> <p>The database environment's messages may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_verbose", one or more whitespace characters, and the method <b>which</b> parameter as a string; for example, "set_verbose DB_VERB_CHKPOINT". Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setVerbose method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setVerbose method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>onoff</CODE> - If the <b>onoff</b> parameter is set to true, the additional messages are output.<DD><CODE>which</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_CHKPOINT"><CODE>Db.DB_VERB_CHKPOINT</CODE></A><p>Display checkpoint location information when searching the log for checkpoints. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_DEADLOCK"><CODE>Db.DB_VERB_DEADLOCK</CODE></A><p>Display additional information when doing deadlock detection. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_RECOVERY"><CODE>Db.DB_VERB_RECOVERY</CODE></A><p>Display additional information when performing recovery. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_REPLICATION"><CODE>Db.DB_VERB_REPLICATION</CODE></A><p>Display additional information when processing replication messages. <p>Note, to get complete replication logging when debugging replication applications, you must also configure and build the Berkeley DB library with the <a href="../../../../ref/build_unix/conf.html">--enable-diagnostic</a> configuration option as well as call the DbEnv.setVerbose method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERB_WAITSFOR"><CODE>Db.DB_VERB_WAITSFOR</CODE></A><p>Display the waits-for table when doing deadlock detection. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setVerbose method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lk_conflicts()"><!-- --></A><H3>
+get_lk_conflicts</H3>
+<PRE>
+public byte[][] <B>get_lk_conflicts</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockConflicts()"><CODE>getLockConflicts()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockConflicts()"><!-- --></A><H3>
+getLockConflicts</H3>
+<PRE>
+public byte[][] <B>getLockConflicts</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLockConflicts method returns the conflicts array.</p> <p>The DbEnv.getLockConflicts method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLockConflicts method returns the conflicts array.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lk_detect()"><!-- --></A><H3>
+get_lk_detect</H3>
+<PRE>
+public int <B>get_lk_detect</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockDetect()"><CODE>getLockDetect()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockDetect()"><!-- --></A><H3>
+getLockDetect</H3>
+<PRE>
+public int <B>getLockDetect</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLockDetect method returns the deadlock detector configuration.</p> <p>The DbEnv.getLockDetect method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLockDetect method returns the deadlock detector configuration.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lk_max_locks()"><!-- --></A><H3>
+get_lk_max_locks</H3>
+<PRE>
+public int <B>get_lk_max_locks</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><CODE>getLockMaxLocks()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockMaxLocks()"><!-- --></A><H3>
+getLockMaxLocks</H3>
+<PRE>
+public int <B>getLockMaxLocks</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.setLockMaxLocks method returns the maximum number of locks.</p> <p>The DbEnv.setLockMaxLocks method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.setLockMaxLocks method returns the maximum number of locks.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lk_max_lockers()"><!-- --></A><H3>
+get_lk_max_lockers</H3>
+<PRE>
+public int <B>get_lk_max_lockers</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><CODE>getLockMaxLockers()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockMaxLockers()"><!-- --></A><H3>
+getLockMaxLockers</H3>
+<PRE>
+public int <B>getLockMaxLockers</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLockMaxLockers method returns the maximum number of lockers.</p> <p>The DbEnv.getLockMaxLockers method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLockMaxLockers method returns the maximum number of lockers.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lk_max_objects()"><!-- --></A><H3>
+get_lk_max_objects</H3>
+<PRE>
+public int <B>get_lk_max_objects</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><CODE>getLockMaxObjects()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLockMaxObjects()"><!-- --></A><H3>
+getLockMaxObjects</H3>
+<PRE>
+public int <B>getLockMaxObjects</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLockMaxObjects method returns the maximum number of locked objects.</p> <p>The DbEnv.getLockMaxObjects method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLockMaxObjects method returns the maximum number of locked objects.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_detect(int, int)"><!-- --></A><H3>
+lock_detect</H3>
+<PRE>
+public int <B>lock_detect</B>(int&nbsp;flags,
+ int&nbsp;atype)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>lockDetect(int,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockDetect(int, int)"><!-- --></A><H3>
+lockDetect</H3>
+<PRE>
+public int <B>lockDetect</B>(int&nbsp;flags,
+ int&nbsp;atype)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockDetect method runs one iteration of the deadlock detector. The deadlock detector traverses the lock table and marks one of the participating lock requesters for rejection in each deadlock it finds.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>atype</CODE> - specifies which lock request(s) to reject. It must be set to one of the following list: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_DEFAULT"><CODE>Db.DB_LOCK_DEFAULT</CODE></A><p>Use whatever lock policy was specified when the database environment was created. If no lock policy has yet been specified, set the lock policy to <code>Db.DB_LOCK_RANDOM</code>. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_EXPIRE"><CODE>Db.DB_LOCK_EXPIRE</CODE></A><p>Reject lock requests which have timed out. No other deadlock detection is performed. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MAXLOCKS"><CODE>Db.DB_LOCK_MAXLOCKS</CODE></A><p>Reject the lock request for the locker ID with the greatest number of locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINLOCKS"><CODE>Db.DB_LOCK_MINLOCKS</CODE></A><p>Reject the lock request for the locker ID with the fewest number of locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINWRITE"><CODE>Db.DB_LOCK_MINWRITE</CODE></A><p>Reject the lock request for the locker ID with the fewest number of write locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_OLDEST"><CODE>Db.DB_LOCK_OLDEST</CODE></A><p>Reject the lock request for the oldest locker ID. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_RANDOM"><CODE>Db.DB_LOCK_RANDOM</CODE></A><p>Reject the lock request for a random locker ID. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_YOUNGEST"><CODE>Db.DB_LOCK_YOUNGEST</CODE></A><p>Reject the lock request for the youngest locker ID. </li></ul><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Returns:</B><DD>The DbEnv.lockDetect method returns the number of lock requests that were rejected.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockDetect method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_get(int, int, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+lock_get</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>lock_get</B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>lockGet(int,int,Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockGet(int, int, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+lockGet</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>lockGet</B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A><p>If a lock cannot be granted because the requested lock conflicts with an existing lock, throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> immediately instead of waiting for the lock to become available. </li></ul><DD><CODE>lock_mode</CODE> - used as an index into the environment's lock conflict matrix. When using the default lock conflict matrix, <b>lock_mode</b> must be set to one of the following values: read (shared) write (exclusive) intention to write (shared) intention to read (shared) intention to read and write (shared) <p>See <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>DbEnv.setLockConflicts</CODE></A> and <a href="../../../../ref/lock/stdmode.html">Standard Lock Modes</a> for more information on the lock conflict matrix.</p><DD><CODE>locker</CODE> - an unsigned 32-bit integer quantity. It represents the entity requesting the lock.<DD><CODE>object</CODE> - an untyped byte string that specifies the object to be locked. Applications using the locking subsystem directly while also doing locking via the Berkeley DB access methods must take care not to inadvertently lock objects that happen to be equal to the unique file IDs used to lock files. See <a href="../../../../ref/lock/am_conv.html">Access method locking conventions</a> for more information.
+<DT><B>Returns:</B><DD>The DbEnv.lockGet method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the DbEnv.lockGet method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the DbEnv.lockGet method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If the <A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> flag or lock timers were configured and the lock could not be granted before the wait-time expired, the DbEnv.lockGet method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockGet method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the maximum number of locks has been reached, the DbEnv.lockGet method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_id()"><!-- --></A><H3>
+lock_id</H3>
+<PRE>
+public int <B>lock_id</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>lockId()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockId()"><!-- --></A><H3>
+lockId</H3>
+<PRE>
+public int <B>lockId</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockId method returns a locker ID, which is guaranteed to be unique in the specified lock table.</p> <p>The <A HREF="../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>DbEnv.lockIdFree</CODE></A> method should be called to return the locker ID to the Berkeley DB library when it is no longer needed.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.lockId method returns a locker ID which is guaranteed to be unique in the specified lock table.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_id_free(int)"><!-- --></A><H3>
+lock_id_free</H3>
+<PRE>
+public void <B>lock_id_free</B>(int&nbsp;id)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>lockIdFree(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockIdFree(int)"><!-- --></A><H3>
+lockIdFree</H3>
+<PRE>
+public void <B>lockIdFree</B>(int&nbsp;id)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockIdFree method frees a locker ID allocated by the <A HREF="../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId</CODE></A> method.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>id</CODE> - the locker id to be freed.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockIdFree method will fail and throw a IllegalArgumentException exception if the locker ID is invalid or locks are still held by this locker ID; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_put(com.sleepycat.db.DbLock)"><!-- --></A><H3>
+lock_put</H3>
+<PRE>
+public void <B>lock_put</B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>lockPut(DbLock)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockPut(com.sleepycat.db.DbLock)"><!-- --></A><H3>
+lockPut</H3>
+<PRE>
+public void <B>lockPut</B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockPut method releases <b>lock</b>.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lock</CODE> - the lock to be released.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockPut method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lock_stat(int)"><!-- --></A><H3>
+lock_stat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A> <B>lock_stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>lockStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="lockStat(int)"><!-- --></A><H3>
+lockStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A> <B>lockStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.lockStat method returns the locking subsystem statistics.</p> <p>The DbEnv.lockStat method creates a DbLockStat object encapsulating the locking subsystem statistics. The following data fields are available from the DbLockStat object:</p> For convenience, the DbLockStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.lockStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.lockStat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lk_conflicts(byte[][])"><!-- --></A><H3>
+set_lk_conflicts</H3>
+<PRE>
+public void <B>set_lk_conflicts</B>(byte[][]&nbsp;conflicts)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>setLockConflicts(byte[][])</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockConflicts(byte[][])"><!-- --></A><H3>
+setLockConflicts</H3>
+<PRE>
+public void <B>setLockConflicts</B>(byte[][]&nbsp;conflicts)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the locking conflicts matrix.</p> <p>If DbEnv.setLockConflicts is never called, a standard conflicts array is used; see <a href="../../../../ref/lock/stdmode.html">Standard Lock Modes</a> for more information.</p> <p>The DbEnv.setLockConflicts method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLockConflicts method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLockConflicts will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>conflicts</CODE> - the new locking conflicts matrix. A non-0 value for the array element indicates that requested_mode and held_mode conflict: <blockquote><pre>conflicts[requested_mode][held_mode]</pre></blockquote> <p>The <i>not-granted</i> mode must be represented by 0.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLockConflicts method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the conflicts array could not be copied, the DbEnv.setLockConflicts method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lk_detect(int)"><!-- --></A><H3>
+set_lk_detect</H3>
+<PRE>
+public void <B>set_lk_detect</B>(int&nbsp;detect)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>setLockDetect(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockDetect(int)"><!-- --></A><H3>
+setLockDetect</H3>
+<PRE>
+public void <B>setLockDetect</B>(int&nbsp;detect)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set if the deadlock detector is to be run whenever a lock conflict occurs, and specify what lock request(s) should be rejected. As transactions acquire locks on behalf of a single locker ID, rejecting a lock request associated with a transaction normally requires the transaction be aborted.</p> <p>The database environment's deadlock detector configuration may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lk_detect", one or more whitespace characters, and the method <b>detect</b> parameter as a string; for example, "set_lk_detect DB_LOCK_OLDEST". Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLockDetect method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLockDetect method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLockDetect must be consistent with the existing environment or an error will be returned. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>detect</CODE> - The <b>detect</b> parameter configures the deadlock detector. The specified value must be one of the following list: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_DEFAULT"><CODE>Db.DB_LOCK_DEFAULT</CODE></A><p>Use whatever lock policy was specified when the database environment was created. If no lock policy has yet been specified, set the lock policy to <code>Db.DB_LOCK_RANDOM</code>. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_EXPIRE"><CODE>Db.DB_LOCK_EXPIRE</CODE></A><p>Reject lock requests which have timed out. No other deadlock detection is performed. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MAXLOCKS"><CODE>Db.DB_LOCK_MAXLOCKS</CODE></A><p>Reject the lock request for the locker ID with the greatest number of locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINLOCKS"><CODE>Db.DB_LOCK_MINLOCKS</CODE></A><p>Reject the lock request for the locker ID with the fewest number of locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_MINWRITE"><CODE>Db.DB_LOCK_MINWRITE</CODE></A><p>Reject the lock request for the locker ID with the fewest number of write locks. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_OLDEST"><CODE>Db.DB_LOCK_OLDEST</CODE></A><p>Reject the lock request for the oldest locker ID. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_RANDOM"><CODE>Db.DB_LOCK_RANDOM</CODE></A><p>Reject the lock request for a random locker ID. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_YOUNGEST"><CODE>Db.DB_LOCK_YOUNGEST</CODE></A><p>Reject the lock request for the youngest locker ID. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLockDetect method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lk_max_lockers(int)"><!-- --></A><H3>
+set_lk_max_lockers</H3>
+<PRE>
+public void <B>set_lk_max_lockers</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><CODE>setLockMaxLockers(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockMaxLockers(int)"><!-- --></A><H3>
+setLockMaxLockers</H3>
+<PRE>
+public void <B>setLockMaxLockers</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the maximum number of locking entities supported by the Berkeley DB environment. This value is used by <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> to estimate how much space to allocate for various lock-table data structures. The default value is 1000 lockers. For specific information on configuring the size of the lock subsystem, see <a href="../../../../ref/lock/max.html">Configuring locking: sizing the system</a>.</p> <p>The database environment's maximum number of lockers may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lk_max_lockers", one or more whitespace characters, and the number of lockers. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLockMaxLockers method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLockMaxLockers method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLockMaxLockers will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>max</CODE> - the maximum number simultaneous locking entities supported by the Berkeley DB environment.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLockMaxLockers method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lk_max_locks(int)"><!-- --></A><H3>
+set_lk_max_locks</H3>
+<PRE>
+public void <B>set_lk_max_locks</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><CODE>setLockMaxLocks(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockMaxLocks(int)"><!-- --></A><H3>
+setLockMaxLocks</H3>
+<PRE>
+public void <B>setLockMaxLocks</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the maximum number of locks supported by the Berkeley DB environment. This value is used by <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> to estimate how much space to allocate for various lock-table data structures. The default value is 1000 locks. For specific information on configuring the size of the lock subsystem, see <a href="../../../../ref/lock/max.html">Configuring locking: sizing the system</a>.</p> <p>The database environment's maximum number of locks may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lk_max_locks", one or more whitespace characters, and the number of locks. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLockMaxLocks method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLockMaxLocks method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLockMaxLocks will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>max</CODE> - the maximum number of locks supported by the Berkeley DB environment.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLockMaxLocks method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lk_max_objects(int)"><!-- --></A><H3>
+set_lk_max_objects</H3>
+<PRE>
+public void <B>set_lk_max_objects</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><CODE>setLockMaxObjects(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLockMaxObjects(int)"><!-- --></A><H3>
+setLockMaxObjects</H3>
+<PRE>
+public void <B>setLockMaxObjects</B>(int&nbsp;max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the maximum number of locked objects supported by the Berkeley DB environment. This value is used by <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> to estimate how much space to allocate for various lock-table data structures. The default value is 1000 objects. For specific information on configuring the size of the lock subsystem, see <a href="../../../../ref/lock/max.html">Configuring locking: sizing the system</a>.</p> <p>The database environment's maximum number of objects may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lk_max_objects", one or more whitespace characters, and the number of objects. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLockMaxObjects method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLockMaxObjects method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLockMaxObjects will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>max</CODE> - the maximum number of locked objects supported by the Berkeley DB environment.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLockMaxObjects method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lg_bsize()"><!-- --></A><H3>
+get_lg_bsize</H3>
+<PRE>
+public int <B>get_lg_bsize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogBufferSize()"><CODE>getLogBufferSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLogBufferSize()"><!-- --></A><H3>
+getLogBufferSize</H3>
+<PRE>
+public int <B>getLogBufferSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLogBufferSize method returns the size of the log buffer, in bytes.</p> <p>The DbEnv.getLogBufferSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLogBufferSize method returns the size of the log buffer, in bytes.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lg_dir()"><!-- --></A><H3>
+get_lg_dir</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_lg_dir</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogDir()"><CODE>getLogDir()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLogDir()"><!-- --></A><H3>
+getLogDir</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getLogDir</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLogDir method returns the log directory.</p> <p>The DbEnv.getLogDir method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLogDir method returns the log directory.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lg_max()"><!-- --></A><H3>
+get_lg_max</H3>
+<PRE>
+public int <B>get_lg_max</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogMax()"><CODE>getLogMax()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLogMax()"><!-- --></A><H3>
+getLogMax</H3>
+<PRE>
+public int <B>getLogMax</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLogMax method returns the maximum log file size.</p> <p>The DbEnv.getLogMax method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLogMax method returns the maximum log file size.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lg_regionmax()"><!-- --></A><H3>
+get_lg_regionmax</H3>
+<PRE>
+public int <B>get_lg_regionmax</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getLogRegionMax()"><CODE>getLogRegionMax()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLogRegionMax()"><!-- --></A><H3>
+getLogRegionMax</H3>
+<PRE>
+public int <B>getLogRegionMax</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getLogRegionMax method returns the size of the underlying logging subsystem region.</p> <p>The DbEnv.getLogRegionMax method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getLogRegionMax method returns the size of the underlying logging subsystem region.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_archive(int)"><!-- --></A><H3>
+log_archive</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[] <B>log_archive</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>logArchive(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logArchive(int)"><!-- --></A><H3>
+logArchive</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[] <B>logArchive</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logArchive method returns an array of log or database filenames.</p> <p>By default, DbEnv.logArchive returns the names of all of the log files that are no longer in use (for example, that are no longer involved in active transactions), and that may safely be archived for catastrophic recovery and then removed from the system. If there are no filenames to return, DbEnv.logArchive returns null.</p> <p>Log cursor handles (returned by the <A HREF="../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor</CODE></A> method) may have open file descriptors for log files in the database environment. Also, the Berkeley DB interfaces to the database environment logging subsystem (for example, <A HREF="../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut</CODE></A> and <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A>) may allocate log cursors and have open file descriptors for log files as well. On operating systems where filesystem related system calls (for example, rename and unlink on Windows/NT) can fail if a process has an open file descriptor for the affected file, attempting to move or remove the log files listed by DbEnv.logArchive may fail. All Berkeley DB internal use of log cursors operates on active log files only and furthermore, is short-lived in nature. So, an application seeing such a failure should be restructured to close any open log cursors it may have, and otherwise to retry the operation until it succeeds. (Although the latter is not likely to be necessary; it is hard to imagine a reason to move or rename a log file in which transactions are being logged or aborted.)</p> <p>See <a href="../../../../utility/db_archive.html">db_archive</a> for more information on database archival procedures.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_ABS"><CODE>Db.DB_ARCH_ABS</CODE></A><p>All pathnames are returned as absolute pathnames, instead of relative to the database home directory. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_DATA"><CODE>Db.DB_ARCH_DATA</CODE></A><p>Return the database files that need to be archived in order to recover the database from catastrophic failure. If any of the database files have not been accessed during the lifetime of the current log files, DbEnv.logArchive will not include them in this list. It is also possible that some of the files referred to by the log have since been deleted from the system. <p>The <code>Db.DB_ARCH_DATA</code> and <code>Db.DB_ARCH_LOG</code> flags are mutually exclusive.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_LOG"><CODE>Db.DB_ARCH_LOG</CODE></A><p>Return all the log filenames, regardless of whether or not they are in use. <p>The <code>Db.DB_ARCH_DATA</code> and <code>Db.DB_ARCH_LOG</code> flags are mutually exclusive.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_ARCH_REMOVE"><CODE>Db.DB_ARCH_REMOVE</CODE></A><p>Remove log files that are no longer needed; no filenames are returned. Automatic log file removal is likely to make catastrophic recovery impossible. <p>The <code>Db.DB_ARCH_REMOVE</code> flag may not be specified with any other flag.</p> </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.logArchive method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.logArchive method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+log_compare</H3>
+<PRE>
+public static int <B>log_compare</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>logCompare(DbLsn,DbLsn)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+logCompare</H3>
+<PRE>
+public static int <B>logCompare</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</PRE>
+<DL>
+<DD>The DbEnv.logCompare method allows the caller to compare two <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects, returning 0 if they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lsn0</CODE> - one of the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to be compared.<DD><CODE>lsn1</CODE> - one of the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to be compared.
+<DT><B>Returns:</B><DD>The DbEnv.logCompare method returns 0 if the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> object parameters are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_cursor(int)"><!-- --></A><H3>
+log_cursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLogc.html">DbLogc</A> <B>log_cursor</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>logCursor(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logCursor(int)"><!-- --></A><H3>
+logCursor</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLogc.html">DbLogc</A> <B>logCursor</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logCursor method returns a created log cursor.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Returns:</B><DD>The DbEnv.logCursor method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.logCursor method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_file(com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+log_file</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>log_file</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>logFile(DbLsn)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logFile(com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+logFile</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>logFile</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logFile method maps <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to filenames, returning the name of the file containing the record named by <b>lsn</b>.</p> <p>This mapping of <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to files is needed for database administration. For example, a transaction manager typically records the earliest <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> needed for restart, and the database administrator may want to archive log files to tape when they contain only <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> entries before the earliest one needed for restart.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lsn</CODE> - the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> object for which a filename is wanted.
+<DT><B>Returns:</B><DD>The DbEnv.logFile method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the supplied buffer was too small to hold the log filename, the DbEnv.logFile method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_flush(com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+log_flush</H3>
+<PRE>
+public void <B>log_flush</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>logFlush(DbLsn)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logFlush(com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+logFlush</H3>
+<PRE>
+public void <B>logFlush</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logFlush method writes log records to disk.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lsn</CODE> - All log records with <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> values less than or equal to the <b>lsn</b> parameter are written to disk. If <b>lsn</b> is null, all records in the log are flushed.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.logFlush method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+log_put</H3>
+<PRE>
+public void <B>log_put</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>logPut(DbLsn,Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+logPut</H3>
+<PRE>
+public void <B>logPut</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logPut method appends records to the log. The <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the put record is returned in the <b>lsn</b> parameter.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - the record to write to the log. <p>The caller is responsible for providing any necessary structure to <b>data</b>. (For example, in a write-ahead logging protocol, the application must understand what part of <b>data</b> is an operation code, what part is redo information, and what part is undo information. In addition, most transaction managers will store in <b>data</b> the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the previous log record for the same transaction, to support chaining back through the transaction's log records during undo.)</p><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FLUSH"><CODE>Db.DB_FLUSH</CODE></A><p>The log is forced to disk after this record is written, guaranteeing that all records with <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> values less than or equal to the one being "put" are on disk before DbEnv.logPut returns. </li></ul><DD><CODE>lsn</CODE> - references memory into which the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the put record is copied.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The <A HREF="../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFlush</CODE></A> method will fail and throw a IllegalArgumentException exception if the record to be logged is larger than the maximum log record; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="log_stat(int)"><!-- --></A><H3>
+log_stat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A> <B>log_stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>logStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="logStat(int)"><!-- --></A><H3>
+logStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A> <B>logStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.logStat method returns the logging subsystem statistics.</p> <p>The DbEnv.logStat method creates a DbLogStat object encapsulating the logging subsystem statistics. The following data fields are available from the DbLogStat object:</p> For convenience, the DbLogStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.logStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.logStat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lg_bsize(int)"><!-- --></A><H3>
+set_lg_bsize</H3>
+<PRE>
+public void <B>set_lg_bsize</B>(int&nbsp;lg_bsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>setLogBufferSize(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLogBufferSize(int)"><!-- --></A><H3>
+setLogBufferSize</H3>
+<PRE>
+public void <B>setLogBufferSize</B>(int&nbsp;lg_bsize)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the in-memory log buffer, in bytes. By default, or if the value is set to 0, a size of 32K is used. The size of the log file (see <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>DbEnv.setLogMax</CODE></A>) must be at least four times the size of the in-memory log buffer.</p> <p>Log information is stored in-memory until the storage space fills up or transaction commit forces the information to be flushed to stable storage. In the presence of long-running transactions or transactions producing large amounts of data, larger buffer sizes can increase throughput.</p> <p>The database environment's log buffer size may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lg_bsize", one or more whitespace characters, and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLogBufferSize method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLogBufferSize method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLogBufferSize will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lg_bsize</CODE> - the size of the in-memory log buffer, in bytes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLogBufferSize method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; The size of the log file is less than four times the size of the in-memory log buffer; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lg_dir(java.lang.String)"><!-- --></A><H3>
+set_lg_dir</H3>
+<PRE>
+public void <B>set_lg_dir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><CODE>setLogDir(String)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLogDir(java.lang.String)"><!-- --></A><H3>
+setLogDir</H3>
+<PRE>
+public void <B>setLogDir</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The path of a directory to be used as the location of logging files. Log files created by the Log Manager subsystem will be created in this directory.</p> <p>If no logging directory is specified, log files are created in the environment home directory. See <a href="../../../../ref/env/naming.html">Berkeley DB File Naming</a> for more information.</p> <p>For the greatest degree of recoverability from system or application failure, database files and log files should be located on separate physical devices.</p> <p>The database environment's logging directory may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lg_dir", one or more whitespace characters, and the directory name. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLogDir method configures operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle, not all operations performed on the underlying database environment.</p> <p>The DbEnv.setLogDir method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLogDir must be consistent with the existing environment or corruption can occur.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dir</CODE> - the directory used to store the logging files.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLogDir method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lg_max(int)"><!-- --></A><H3>
+set_lg_max</H3>
+<PRE>
+public void <B>set_lg_max</B>(int&nbsp;lg_max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>setLogMax(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLogMax(int)"><!-- --></A><H3>
+setLogMax</H3>
+<PRE>
+public void <B>setLogMax</B>(int&nbsp;lg_max)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the maximum size of a single file in the log, in bytes. By default, or if the <b>lg_max</b> parameter is set to 0, a size of 10MB is used. Because <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> file offsets are unsigned four-byte values, the set value may not be larger than the maximum unsigned four-byte value. The size of the log file must be at least four times the size of the in-memory log buffer (see <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>DbEnv.setLogBufferSize</CODE></A>).</p> <p>See <a href="../../../../ref/log/limits.html">Log File Limits</a> for more information.</p> <p>The database environment's log file size may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lg_max", one or more whitespace characters, and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLogMax method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLogMax method may be called at any time during the life of the application.</p> If no size is specified by the application, the size last specified for the database region will be used, or if no database region previously existed, the default will be used.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lg_max</CODE> - the size of a single log file, in bytes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLogMax method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; the size of the log file is less than four times the size of the in-memory log buffer; The specified log file size was too large; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lg_regionmax(int)"><!-- --></A><H3>
+set_lg_regionmax</H3>
+<PRE>
+public void <B>set_lg_regionmax</B>(int&nbsp;lg_regionmax)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><CODE>setLogRegionMax(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLogRegionMax(int)"><!-- --></A><H3>
+setLogRegionMax</H3>
+<PRE>
+public void <B>setLogRegionMax</B>(int&nbsp;lg_regionmax)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the size of the underlying logging area of the Berkeley DB environment, in bytes. By default, or if the value is set to 0, the default size is 60KB. The log region is used to store filenames, and so may need to be increased in size if a large number of files will be opened and registered with the specified Berkeley DB environment's log manager.</p> <p>The database environment's log region size may also be set using the environment's <b>DB_CONFIG</b> file. The syntax of the entry in that file is a single line with the string "set_lg_regionmax", one or more whitespace characters, and the size in bytes. Because the <b>DB_CONFIG</b> file is read when the database environment is opened, it will silently overrule configuration done before that time.</p> <p>The DbEnv.setLogRegionMax method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setLogRegionMax method may not be called after the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method is called. If the database environment already exists when <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> is called, the information specified to DbEnv.setLogRegionMax will be ignored. </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lg_regionmax</CODE> - the size of the logging area in the Berkeley DB environment, in bytes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.setLogRegionMax method will fail and throw a IllegalArgumentException exception if the method was called after <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> was called; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_cachesize()"><!-- --></A><H3>
+get_cachesize</H3>
+<PRE>
+public long <B>get_cachesize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCacheSize()"><!-- --></A><H3>
+getCacheSize</H3>
+<PRE>
+public long <B>getCacheSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getCacheSize method returns the size of the cache.</p> <p>The DbEnv.getCacheSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getCacheSize method returns the size of the cache.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_cachesize_ncache()"><!-- --></A><H3>
+get_cachesize_ncache</H3>
+<PRE>
+public int <B>get_cachesize_ncache</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getCacheSizeNcache()"><!-- --></A><H3>
+getCacheSizeNcache</H3>
+<PRE>
+public int <B>getCacheSizeNcache</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getCacheSizeNcache method returns the number of caches.</p> <p>The DbEnv.getCacheSizeNcache method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getCacheSizeNcache method returns the number of caches.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_mp_mmapsize()"><!-- --></A><H3>
+get_mp_mmapsize</H3>
+<PRE>
+public long <B>get_mp_mmapsize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><CODE>getMemoryPoolMapSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMemoryPoolMapSize()"><!-- --></A><H3>
+getMemoryPoolMapSize</H3>
+<PRE>
+public long <B>getMemoryPoolMapSize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getMemoryPoolMapSize method returns the maximum file map size.</p> <p>The DbEnv.getMemoryPoolMapSize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getMemoryPoolMapSize method returns the maximum file map size.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memp_stat(int)"><!-- --></A><H3>
+memp_stat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A> <B>memp_stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>memoryPoolStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memoryPoolStat(int)"><!-- --></A><H3>
+memoryPoolStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A> <B>memoryPoolStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.memoryPoolStat method returns the memory pool (that is, the buffer cache) subsystem statistics.</p> <p>The DbEnv.memoryPoolStat method creates a DbMpoolStat object encapsulating memory pool (that is, the buffer cache) statistics. The following data fields are available from the DbMpoolStat object:</p> For convenience, the DbMpoolStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.memoryPoolStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memp_fstat(int)"><!-- --></A><H3>
+memp_fstat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[] <B>memp_fstat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>memoryPoolFileStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memoryPoolFileStat(int)"><!-- --></A><H3>
+memoryPoolFileStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[] <B>memoryPoolFileStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.memoryPoolFileStat method creates an array of DbMpoolFStat objects containing statistics for individual files in the cache. Each DbMpoolFStat object contains statistics for an individual DbMpoolFile. The following data fields are available for each DbMpoolFStat object:</p> For convenience, the DbMpoolFStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.memoryPoolFileStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.memoryPoolStat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memp_trickle(int)"><!-- --></A><H3>
+memp_trickle</H3>
+<PRE>
+public int <B>memp_trickle</B>(int&nbsp;percent)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>memoryPoolTrickle(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="memoryPoolTrickle(int)"><!-- --></A><H3>
+memoryPoolTrickle</H3>
+<PRE>
+public int <B>memoryPoolTrickle</B>(int&nbsp;percent)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.memoryPoolTrickle method ensures that a specified percent of the pages in the shared memory pool are clean, by writing dirty pages to their backing files.</p> <p>The purpose of the DbEnv.memoryPoolTrickle function is to enable a memory pool manager to ensure that a page is always available for reading in new information without having to wait for a write.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>percent</CODE> - the percent of the pages in the cache that should be clean.
+<DT><B>Returns:</B><DD>The DbEnv.memoryPoolTrickle method returns the number of pages that were written to reach the specified percentage.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.memoryPoolTrickle method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_tx_max()"><!-- --></A><H3>
+get_tx_max</H3>
+<PRE>
+public int <B>get_tx_max</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnMax()"><CODE>getTxnMax()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTxnMax()"><!-- --></A><H3>
+getTxnMax</H3>
+<PRE>
+public int <B>getTxnMax</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getTxnMax method returns the number of active transactions.</p> <p>The DbEnv.getTxnMax method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getTxnMax method returns the number of active transactions.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_tx_timestamp()"><!-- --></A><H3>
+get_tx_timestamp</H3>
+<PRE>
+public long <B>get_tx_timestamp</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><CODE>getTxnTimestamp()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTxnTimestamp()"><!-- --></A><H3>
+getTxnTimestamp</H3>
+<PRE>
+public long <B>getTxnTimestamp</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getTxnTimestamp method returns the recovery timestamp.</p> <p>The DbEnv.getTxnTimestamp method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getTxnTimestamp method returns the recovery timestamp.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_timeout(int)"><!-- --></A><H3>
+get_timeout</H3>
+<PRE>
+public long <B>get_timeout</B>(int&nbsp;flag)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>getTimeout(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeout(int)"><!-- --></A><H3>
+getTimeout</H3>
+<PRE>
+public long <B>getTimeout</B>(int&nbsp;flag)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getTimeout method returns a timeout value, in microseconds.</p> <p>The DbEnv.getTimeout method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flag</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_LOCK_TIMEOUT"><CODE>Db.DB_SET_LOCK_TIMEOUT</CODE></A><p>Return the timeout value for locks in this database environment. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_TXN_TIMEOUT"><CODE>Db.DB_SET_TXN_TIMEOUT</CODE></A><p>Return the timeout value for transactions in this database environment. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.getTimeout method returns a timeout value, in microseconds.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txn_begin(com.sleepycat.db.DbTxn, int)"><!-- --></A><H3>
+txn_begin</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>txn_begin</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>txnBegin(DbTxn,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txnBegin(com.sleepycat.db.DbTxn, int)"><!-- --></A><H3>
+txnBegin</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>txnBegin</B>(<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it. Calling the <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A>, <A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit</CODE></A> or <A HREF="../../../com/sleepycat/db/DbTxn.html#discard(int)"><CODE>DbTxn.discard</CODE></A> methods will discard the returned handle.</p> <p><b>Note: Transactions may only span threads if they do so serially; that is, each transaction must be active in only a single thread of control at a time. This restriction holds for parents of nested transactions as well; not two children may be concurrently active in more than one thread of control at any one time.</b></p> <p><b>Note: Cursors may not span transactions; that is, each cursor must be opened and closed within a single transaction.</b></p> <p><b>Note: A parent transaction may not issue any Berkeley DB operations -- except for DbEnv.txnBegin, <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A> and <A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit</CODE></A> -- while it has active child transactions (child transactions that have not yet been committed or aborted).</b></p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>All read operations performed by the transaction may read modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><CODE>Db.DB_TXN_NOSYNC</CODE></A><p>Do not synchronously flush the log when this transaction commits or prepares. This means the transaction will exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained but it is possible that this transaction may be undone during recovery. <p>This behavior may be set for a Berkeley DB environment using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags</CODE></A> method. Any value specified to this method overrides that setting.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOWAIT"><CODE>Db.DB_TXN_NOWAIT</CODE></A><p>If a lock is unavailable for any Berkeley DB operation performed in the context of this transaction, cause the operation to throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> immediately instead of blocking on the lock. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_SYNC"><CODE>Db.DB_TXN_SYNC</CODE></A><p>Synchronously flush the log when this transaction commits or prepares. This means the transaction will exhibit all of the ACID (atomicity, consistency, isolation, and durability) properties. <p>This behavior is the default for Berkeley DB environments unless the <A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><CODE><code>Db.DB_TXN_NOSYNC</code></CODE></A> flag was specified to the <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags</CODE></A> method. Any value specified to this method overrides that setting.</p> </li></ul><DD><CODE>parent</CODE> - If the <b>parent</b> parameter is non-null, the new transaction will be a nested transaction, with the transaction indicated by <b>parent</b> as its parent. Transactions may be nested to any level. In the presence of distributed transactions and two-phase commit, only the parental transaction, that is a transaction without a <b>parent</b> specified, should be passed as an parameter to <A HREF="../../../com/sleepycat/db/DbTxn.html#prepare(byte[])"><CODE>DbTxn.prepare</CODE></A>.
+<DT><B>Returns:</B><DD>The DbEnv.txnBegin method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the maximum number of concurrent transactions has been reached, the DbEnv.txnBegin method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txn_checkpoint(int, int, int)"><!-- --></A><H3>
+txn_checkpoint</H3>
+<PRE>
+public void <B>txn_checkpoint</B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>txnCheckpoint(int,int,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txnCheckpoint(int, int, int)"><!-- --></A><H3>
+txnCheckpoint</H3>
+<PRE>
+public void <B>txnCheckpoint</B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.txnCheckpoint method flushes the underlying memory pool, writes a checkpoint record to the log, and then flushes the log.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FORCE"><CODE>Db.DB_FORCE</CODE></A><p>Force a checkpoint record, even if there has been no activity since the last checkpoint. </li></ul><DD><CODE>kbyte</CODE> - If the <b>kbyte</b> parameter is non-zero, a checkpoint will be done if more than <b>kbyte</b> kilobytes of log data have been written since the last checkpoint.<DD><CODE>min</CODE> - If the <b>min</b> parameter is non-zero, a checkpoint will be done if more than <b>min</b> minutes have passed since the last checkpoint.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.txnCheckpoint method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txn_recover(int, int)"><!-- --></A><H3>
+txn_recover</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[] <B>txn_recover</B>(int&nbsp;count,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>txnRecover(int,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txnRecover(int, int)"><!-- --></A><H3>
+txnRecover</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[] <B>txnRecover</B>(int&nbsp;count,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.txnRecover method returns a list of prepared but not yet resolved transactions. The DbEnv.txnRecover method should only be called after the environment has been recovered. Because database environment state must be preserved between recovery and the application calling DbEnv.txnRecover, applications must either call DbEnv.txnRecover using the same environment handle used when recovery is done, or the database environment must not be configured using the <A HREF="../../../com/sleepycat/db/Db.html#DB_PRIVATE"><CODE>Db.DB_PRIVATE</CODE></A> flag.</p> <p>The DbEnv.txnRecover method returns a list of transactions that must be resolved by the application (committed, aborted or discarded). The return value is an array of objects of type DbPreplist; the following DbPreplist fields will be filled in:</p> The application must call <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A>, <A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit</CODE></A> or <A HREF="../../../com/sleepycat/db/DbTxn.html#discard(int)"><CODE>DbTxn.discard</CODE></A> on each returned <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle before starting any new operations.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>count</CODE> - specifies the number of maximum size of the array that should be returned.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FIRST"><CODE>Db.DB_FIRST</CODE></A><p>Begin returning a list of prepared, but not yet resolved transactions. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT"><CODE>Db.DB_NEXT</CODE></A><p>Continue returning a list of prepared, but not yet resolved transactions, starting where the last call to DbEnv.txnRecover left off. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.txnRecover method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txn_stat(int)"><!-- --></A><H3>
+txn_stat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A> <B>txn_stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>txnStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="txnStat(int)"><!-- --></A><H3>
+txnStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A> <B>txnStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.txnStat method returns the transaction subsystem statistics.</p> <p>The DbEnv.txnStat method creates a DbTxnStat object encapsulating the transaction subsystem statistics. The following data fields are available from the DbTxnStat object:</p> For convenience, the DbTxnStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.txnStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.txnStat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_rep_limit()"><!-- --></A><H3>
+get_rep_limit</H3>
+<PRE>
+public long <B>get_rep_limit</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getReplicationLimit()"><CODE>getReplicationLimit()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getReplicationLimit()"><!-- --></A><H3>
+getReplicationLimit</H3>
+<PRE>
+public long <B>getReplicationLimit</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.getReplicationLimit method returns the transmit limit in bytes.</p> <p>The DbEnv.getReplicationLimit method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getReplicationLimit method returns the transmit limit in bytes.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rep_elect(int, int, int)"><!-- --></A><H3>
+rep_elect</H3>
+<PRE>
+public int <B>rep_elect</B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>replicationElect(int,int,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationElect(int, int, int)"><!-- --></A><H3>
+replicationElect</H3>
+<PRE>
+public int <B>replicationElect</B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.replicationElect method holds an election for the master of a replication group.</p> <p>If the election is successful, the new master's ID may be the ID of the previous master, or the ID of the current environment. The application is responsible for adjusting its usage of the other environments in the replication group, including directing all database updates to the newly selected master, in accordance with the results of this election.</p> <p>The thread of control that calls the DbEnv.replicationElect method must not be the thread of control that processes incoming messages; processing the incoming messages is necessary to successfully complete an election.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>nsites</CODE> - The <b>nsites</b> parameter indicates the number of environments that the application believes are in the replication group. This number is used by Berkeley DB to avoid having two masters active simultaneously, even in the case of a network partition. During an election, a new master cannot be elected unless more than half of <b>nsites</b> agree on the new master. Thus, in the face of a network partition, the side of the partition with more than half the environments will elect a new master and continue, while the environments communicating with fewer than half the other environments will fail to find a new master.<DD><CODE>priority</CODE> - the priority of this environment. It must be a positive integer, or 0 if this environment is not permitted to become a master (see <a href="../../../../ref/rep/pri.html">Replication environment priorities</a> for more information).<DD><CODE>timeout</CODE> - specifies a timeout period for an election. If the election has not completed after <b>timeout</b> microseconds, the election will fail.
+<DT><B>Returns:</B><DD>The DbEnv.replicationElect method returns the newly elected master's ID.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The DbEnv.replicationElect method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>The replication group was unable to elect a master, or was unable to complete the election in the specified <b>timeout</b> period.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+rep_process_message</H3>
+<PRE>
+public int <B>rep_process_message</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><!-- --></A><H3>
+replicationProcessMessage</H3>
+<PRE>
+public int <B>replicationProcessMessage</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</p> <p>For implementation reasons, all incoming replication messages must be processed using the same <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle. It is not required that a single thread of control process all messages, only that all threads of control processing messages use the same handle.</p> <p>The DbEnv.replicationProcessMessage method has additional return values:</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>control</CODE> - The <b>control</b> parameter should reference a copy of the <b>control</b> parameter specified by Berkeley DB on the sending environment.<DD><CODE>envid</CODE> - The <b>envid</b> parameter should contain the local identifier that corresponds to the environment that sent the message to be processed (see <a href="../../../../ref/rep/id.html">Replication environment IDs</a> for more information).<DD><CODE>rec</CODE> - The <b>rec</b> parameter should reference a copy of the <b>rec</b> parameter specified by Berkeley DB on the sending environment.<DD><CODE>ret_lsn</CODE> - If DbEnv.replicationProcessMessage method returns Db.DB_REP_NOTPERM then the <b>ret_lsn</b> parameter will contain the log sequence number of this permanent log message that could not be written to disk. If DbEnv.replicationProcessMessage method returns Db.DB_REP_ISPERM then the <b>ret_lsn</b> parameter will contain largest log sequence number of the permanent records that are now written to disk as a result of processing this message. In all other cases the value of <b>ret_lsn</b> is undefined.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_DUPMASTER"><CODE>DB_REP_DUPMASTER</CODE></A><p>The DbEnv.replicationProcessMessage method will throw an exception that encapsulates <code>Db.DB_REP_DUPMASTER</code> if the replication group has more than one master. </li></ul>The application should reconfigure itself as a client by calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart</CODE></A> method, and then call for an election by calling <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect</CODE></A>. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_HOLDELECTION"><CODE>DB_REP_HOLDELECTION</CODE></A><p>The DbEnv.replicationProcessMessage method will throw an exception that encapsulates <code>Db.DB_REP_HOLDELECTION</code> if an election is needed. </li></ul>The application should call for an election by calling <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect</CODE></A>. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_ISPERM"><CODE>DB_REP_ISPERM</CODE></A><p>The DbEnv.replicationProcessMessage method will return <code>Db.DB_REP_ISPERM</code> if processing this message results in the processing of records that are permanent. </li></ul>The maximum LSN of the permanent records stored is returned. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NEWMASTER"><CODE>DB_REP_NEWMASTER</CODE></A><p>The DbEnv.replicationProcessMessage method will return <code>Db.DB_REP_NEWMASTER</code> if a new master has been elected. </li></ul>The <b>envid</b> parameter contains the environment ID of the new master. If the recipient of this error return has been made master, it is the application's responsibility to begin acting as the master environment. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NEWSITE"><CODE>DB_REP_NEWSITE</CODE></A><p>The DbEnv.replicationProcessMessage method will return <code>Db.DB_REP_NEWSITE</code> if the system received contact information from a new environment. </li></ul>The <b>rec</b> parameter contains the opaque data specified in the <b>cdata</b> parameter to the <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart</CODE></A>. The application should take whatever action is needed to establish a communication channel with this new environment. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NOTPERM"><CODE>DB_REP_NOTPERM</CODE></A><p>The DbEnv.replicationProcessMessage method will return <code>Db.DB_REP_NOTPERM</code> if a message carrying a <A HREF="../../../com/sleepycat/db/Db.html#DB_REP_PERMANENT"><CODE><code>Db.DB_REP_PERMANENT</code></CODE></A> flag was processed successfully, but was not written to disk. </li></ul>The LSN of this record is returned. The application should take whatever action is deemed necessary to retain its recoverability characteristics. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_OUTDATED"><CODE>DB_REP_OUTDATED</CODE></A><p>The DbEnv.replicationProcessMessage method will throw an exception that encapsulates <code>Db.DB_REP_OUTDATED</code> if the current environment's logs are too far out of date with respect to the master to be automatically synchronized. </li></ul>The application should copy over a hot backup of the environment, run recovery, and restart the client. </p> Unless otherwise specified, the DbEnv.replicationProcessMessage method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rep_start(com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+rep_start</H3>
+<PRE>
+public void <B>rep_start</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>replicationStart(Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationStart(com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+replicationStart</H3>
+<PRE>
+public void <B>replicationStart</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.replicationStart method configures the database environment as a client or master in a group of replicated database environments. Replication master environments are the only database environments where replicated databases may be modified. Replication client environments are read-only as long as they are clients. Replication client environments may be upgraded to be replication master environments in the case that the current master fails or there is no master present.</p> <p>The enclosing database environment must already have been opened by calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method and must already have been configured to send replication messages by calling the <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport</CODE></A> method.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>cdata</CODE> - an opaque data item that is sent over the communication infrastructure when the client or master comes online (see <a href="../../../../ref/rep/newsite.html">Connecting to a new site</a> for more information). If no such information is useful, <b>cdata</b> should be null.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_CLIENT"><CODE>Db.DB_REP_CLIENT</CODE></A><p>Configure the environment as a replication client. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_LOGSONLY"><CODE>Db.DB_REP_LOGSONLY</CODE></A><p>Configure the environment as a log files-only client. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_MASTER"><CODE>Db.DB_REP_MASTER</CODE></A><p>Configure the environment as a replication master. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.replicationStart method will fail and throw a IllegalArgumentException exception if the database environment was not already configured to communicate with a replication group by a call to <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport</CODE></A>; the database environment was not already opened; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="rep_stat(int)"><!-- --></A><H3>
+rep_stat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A> <B>rep_stat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>replicationStat(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="replicationStat(int)"><!-- --></A><H3>
+replicationStat</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A> <B>replicationStat</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.replicationStat method returns the replication subsystem statistics.</p> <p>The DbEnv.replicationStat method creates a DbRepStat object encapsulating the replication subsystem statistics. The following data fields are available from the DbRepStat object:</p> For convenience, the DbRepStat class has a toString method that lists all the data fields.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or the following value: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_STAT_CLEAR"><CODE>Db.DB_STAT_CLEAR</CODE></A><p>Reset statistics after returning their values. </li></ul>
+<DT><B>Returns:</B><DD>The DbEnv.replicationStat method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbEnv.replicationStat method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_rep_limit(long)"><!-- --></A><H3>
+set_rep_limit</H3>
+<PRE>
+public void <B>set_rep_limit</B>(long&nbsp;bytes)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>setReplicationLimit(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationLimit(long)"><!-- --></A><H3>
+setReplicationLimit</H3>
+<PRE>
+public void <B>setReplicationLimit</B>(long&nbsp;bytes)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbEnv.setReplicationLimit method imposes a byte-count limit on the amount of data that will be transmitted from a site in a single call to <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A> method.</p> <p>The DbEnv.setReplicationLimit method configures a database environment, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</p> <p>The DbEnv.setReplicationLimit method may not be called before the <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A> method has been called.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - specifies the maximum number of bytes that will be sent in a single call to <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A> method.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_rep_transport(int, com.sleepycat.db.DbRepTransport)"><!-- --></A><H3>
+set_rep_transport</H3>
+<PRE>
+public void <B>set_rep_transport</B>(int&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>setReplicationTransport(int,DbRepTransport)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><!-- --></A><H3>
+setReplicationTransport</H3>
+<PRE>
+public void <B>setReplicationTransport</B>(int&nbsp;envid,
+ <A HREF="../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="strerror(int)"><!-- --></A><H3>
+strerror</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>strerror</B>(int&nbsp;error)</PRE>
+<DL>
+<DD>The DbEnv.strerror method returns an error message string corresponding to the error number <b>error</b> parameter.</p> <p>This function is a superset of the ANSI C X3.159-1989 (ANSI C) <b>strerror</b>(3) function. If the error number <b>error</b> is greater than or equal to 0, then the string returned by the system function <b>strerror</b>(3) is returned. If the error number is less than 0, an error string appropriate to the corresponding Berkeley DB library error is returned. See <a href="../../../../ref/program/errorret.html">Error returns to applications</a> for more information.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>error</CODE> - the error number for which an error message string is wanted.
+<DT><B>Returns:</B><DD>The DbEnv.strerror method returns an error message string corresponding to the error number <b>error</b> parameter.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_version_major()"><!-- --></A><H3>
+get_version_major</H3>
+<PRE>
+public static int <B>get_version_major</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMajor()"><CODE>getVersionMajor()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersionMajor()"><!-- --></A><H3>
+getVersionMajor</H3>
+<PRE>
+public static int <B>getVersionMajor</B>()</PRE>
+<DL>
+<DD>The DbEnv.getVersionMajor method returns the release major number.</p> <p>The DbEnv.getVersionMajor method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getVersionMajor method returns the release major number.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_version_minor()"><!-- --></A><H3>
+get_version_minor</H3>
+<PRE>
+public static int <B>get_version_minor</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionMinor()"><CODE>getVersionMinor()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersionMinor()"><!-- --></A><H3>
+getVersionMinor</H3>
+<PRE>
+public static int <B>getVersionMinor</B>()</PRE>
+<DL>
+<DD>The DbEnv.getVersionMinor method returns the release minor number.</p> <p>The DbEnv.getVersionMinor method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getVersionMinor method returns the release minor number.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_version_patch()"><!-- --></A><H3>
+get_version_patch</H3>
+<PRE>
+public static int <B>get_version_patch</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionPatch()"><CODE>getVersionPatch()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersionPatch()"><!-- --></A><H3>
+getVersionPatch</H3>
+<PRE>
+public static int <B>getVersionPatch</B>()</PRE>
+<DL>
+<DD>The DbEnv.getVersionPatch method returns the release patch number.</p> <p>The DbEnv.getVersionPatch method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getVersionPatch method returns the release patch number.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_version_string()"><!-- --></A><H3>
+get_version_string</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>get_version_string</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnv.html#getVersionString()"><CODE>getVersionString()</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersionString()"><!-- --></A><H3>
+getVersionString</H3>
+<PRE>
+public static <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>getVersionString</B>()</PRE>
+<DL>
+<DD>The DbEnv.getVersionString method returns the release verbose version information, suitable for display.</p> <p>The DbEnv.getVersionString method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbEnv.getVersionString method returns the release verbose version information, suitable for display.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnv.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbEnvFeedback.html b/db/docs/java/com/sleepycat/db/DbEnvFeedback.html
new file mode 100644
index 000000000..4589709c1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbEnvFeedback.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbEnvFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbEnvFeedback,DbEnvFeedback interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbEnvFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnvFeedback.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDupCompare.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbEnvFeedback</H2>
+<HR>
+<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><CODE>DbEnvFeedbackHandler</CODE></A></I>
+<P>
+<DL>
+<DT>public interface <B>DbEnvFeedback</B></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnvFeedback.html#feedback(com.sleepycat.db.DbEnv, int, int)">feedback</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="feedback(com.sleepycat.db.DbEnv, int, int)"><!-- --></A><H3>
+feedback</H3>
+<PRE>
+public void <B>feedback</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;opcode,
+ int&nbsp;percent)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></I>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>env</CODE> - <DD><CODE>opcode</CODE> - <DD><CODE>percent</CODE> - </DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnvFeedback.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDupCompare.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbEnvFeedbackHandler.html b/db/docs/java/com/sleepycat/db/DbEnvFeedbackHandler.html
new file mode 100644
index 000000000..b4c62b1c7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbEnvFeedbackHandler.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbEnvFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbEnvFeedbackHandler,DbEnvFeedbackHandler interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbEnvFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnvFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrcall.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbEnvFeedbackHandler</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbEnvFeedbackHandler</B></DL>
+
+<P>
+The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method. This interface defines the application-specific function to be called to to report Berkeley DB operation progress.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)">feedback</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="feedback(com.sleepycat.db.DbEnv, int, int)"><!-- --></A><H3>
+feedback</H3>
+<PRE>
+public void <B>feedback</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;opcode,
+ int&nbsp;percent)</PRE>
+<DL>
+<DD>The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method. This interface defines the application-specific function to be called to to report Berkeley DB operation progress. <p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbenv</CODE> - a reference to the enclosing database environment.<DD><CODE>opcode</CODE> - an operation code. The <b>opcode</b> parameter may take on any of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RECOVER"><CODE>Db.DB_RECOVER</CODE></A><p>The environment is being recovered. </li></ul><DD><CODE>percent</CODE> - the percent of the operation that has been completed, specified as an integer value between 0 and 100.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbEnvFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrcall.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbErrcall.html b/db/docs/java/com/sleepycat/db/DbErrcall.html
new file mode 100644
index 000000000..b64feb6fe
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbErrcall.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbErrcall (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbErrcall,DbErrcall interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbErrcall (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbErrcall.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrcall.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbErrcall</H2>
+<HR>
+<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><CODE>DbErrorHandler</CODE></A></I>
+<P>
+<DL>
+<DT>public interface <B>DbErrcall</B></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbErrcall.html#errcall(java.lang.String, java.lang.String)">errcall</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;prefix,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;buffer)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)"><CODE>DbErrorHandler.error(String,String)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="errcall(java.lang.String, java.lang.String)"><!-- --></A><H3>
+errcall</H3>
+<PRE>
+public void <B>errcall</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;prefix,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;buffer)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)"><CODE>DbErrorHandler.error(String,String)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbErrcall.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrcall.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbErrorHandler.html b/db/docs/java/com/sleepycat/db/DbErrorHandler.html
new file mode 100644
index 000000000..510b04df0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbErrorHandler.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbErrorHandler,DbErrorHandler interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbErrorHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrcall.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedback.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrorHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbErrorHandler</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbErrorHandler</B></DL>
+
+<P>
+An interface specifying a application-specific error reporting function.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)">error</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In some cases, when an error occurs, Berkeley DB will call the DbErrorHandler interface with additional error information.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="error(java.lang.String, java.lang.String)"><!-- --></A><H3>
+error</H3>
+<PRE>
+public void <B>error</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;errpfx,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;msg)</PRE>
+<DL>
+<DD>In some cases, when an error occurs, Berkeley DB will call the DbErrorHandler interface with additional error information. It is up to this interface to display the error message in an appropriate manner.</p> <p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>errpfx</CODE> - the prefix string (as previously set by <A HREF="../../../com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>Db.setErrorPrefix</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix</CODE></A>).<DD><CODE>msg</CODE> - the error message string.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbErrorHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrcall.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedback.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrorHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbException.html b/db/docs/java/com/sleepycat/db/DbException.html
new file mode 100644
index 000000000..87118749e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbException.html
@@ -0,0 +1,377 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbException,DbException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<B>com.sleepycat.db.DbException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>, <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>, <A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A>, <A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DbException</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">Exception</A></DL>
+
+<P>
+This information describes the DbException class and how it is used by the various Berkeley DB classes.</p> <p>Most methods in the Berkeley DB classes throw an exception when an error occurs. A DbException object contains an informational string, an errno, and a reference to the environment from which the exception was thrown.</p> <p>Some methods may return non-zero values without issuing an exception. This occurs in situations that are not normally considered an error, but when some informational status is returned. For example, <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> returns <a href="../../../../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a> when a requested key does not appear in the database.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.db.DbException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#DbException(java.lang.String)">DbException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException constructor returns an instance of the DbException class containing the string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#DbException(java.lang.String, int)">DbException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s,
+ int&nbsp;errno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException constructor returns an instance of the DbException class containing the string and the encapsulated errno.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#DbException(java.lang.String, int, com.sleepycat.db.DbEnv)">DbException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException constructor returns an instance of the DbException class containing the string, the encapsulated errno, and the database environment.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#get_errno()">get_errno</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()"><CODE>getErrno()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException.getDbEnv method returns the database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#getErrno()">getErrno</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException.getErrno method returns the error value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbException.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbException(java.lang.String)"><!-- --></A><H3>
+DbException</H3>
+<PRE>
+public <B>DbException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s)</PRE>
+<DL>
+<DD>The DbException constructor returns an instance of the DbException class containing the string.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>s</CODE> - specifies a message describing the exception.</DL>
+<HR>
+
+<A NAME="DbException(java.lang.String, int)"><!-- --></A><H3>
+DbException</H3>
+<PRE>
+public <B>DbException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s,
+ int&nbsp;errno)</PRE>
+<DL>
+<DD>The DbException constructor returns an instance of the DbException class containing the string and the encapsulated errno.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>s</CODE> - specifies a message describing the exception.<DD><CODE>errno</CODE> - specifies an error code.</DL>
+<HR>
+
+<A NAME="DbException(java.lang.String, int, com.sleepycat.db.DbEnv)"><!-- --></A><H3>
+DbException</H3>
+<PRE>
+public <B>DbException</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv)</PRE>
+<DL>
+<DD>The DbException constructor returns an instance of the DbException class containing the string, the encapsulated errno, and the database environment.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>s</CODE> - specifies a message describing the exception.<DD><CODE>errno</CODE> - specifies an error code.<DD><CODE>dbenv</CODE> - the database environment where the exception occurred.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDbEnv()"><!-- --></A><H3>
+getDbEnv</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A> <B>getDbEnv</B>()</PRE>
+<DL>
+<DD>The DbException.getDbEnv method returns the database environment.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbException.getDbEnv method returns the database environment.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getErrno()"><!-- --></A><H3>
+getErrno</H3>
+<PRE>
+public int <B>getErrno</B>()</PRE>
+<DL>
+<DD>The DbException.getErrno method returns the error value.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbException.getErrno method returns the error value.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_errno()"><!-- --></A><H3>
+get_errno</H3>
+<PRE>
+public int <B>get_errno</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()"><CODE>getErrno()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbFeedback.html b/db/docs/java/com/sleepycat/db/DbFeedback.html
new file mode 100644
index 000000000..671ba1795
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbFeedback.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbFeedback,DbFeedback interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbFeedback.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbFeedback</H2>
+<HR>
+<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><CODE>DbFeedbackHandler</CODE></A></I>
+<P>
+<DL>
+<DT>public interface <B>DbFeedback</B></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbFeedback.html#feedback(com.sleepycat.db.Db, int, int)">feedback</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="feedback(com.sleepycat.db.Db, int, int)"><!-- --></A><H3>
+feedback</H3>
+<PRE>
+public void <B>feedback</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbFeedback.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbFeedbackHandler.html b/db/docs/java/com/sleepycat/db/DbFeedbackHandler.html
new file mode 100644
index 000000000..b1ef30a0a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbFeedbackHandler.html
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbFeedbackHandler,DbFeedbackHandler interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedback.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHash.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbFeedbackHandler</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbFeedbackHandler</B></DL>
+
+<P>
+The DbFeedbackHandler interface is used by the Db.setFeedback method. This interface defines the application-specific function to be called to to report Berkeley DB operation progress.
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)">feedback</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbFeedbackHandler interface is used by the Db.setFeedback method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="feedback(com.sleepycat.db.Db, int, int)"><!-- --></A><H3>
+feedback</H3>
+<PRE>
+public void <B>feedback</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</PRE>
+<DL>
+<DD>The DbFeedbackHandler interface is used by the Db.setFeedback method. This interface defines the application-specific function to be called to to report Berkeley DB operation progress. <p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - a reference to the enclosing database.<DD><CODE>opcode</CODE> - an operation code. The <b>opcode</b> parameter may take on any of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_UPGRADE"><CODE>Db.DB_UPGRADE</CODE></A><p>The underlying database is being upgraded. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_VERIFY"><CODE>Db.DB_VERIFY</CODE></A><p>The underlying database is being verified. </li></ul><DD><CODE>percent</CODE> - the percent of the operation that has been completed, specified as an integer value between 0 and 100.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedback.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHash.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbHash.html b/db/docs/java/com/sleepycat/db/DbHash.html
new file mode 100644
index 000000000..f280c0ed5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbHash.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbHash (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbHash,DbHash interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbHash (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbHash.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPanicHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHash.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbHash</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbHash</B></DL>
+
+<P>
+An interface specifying a hashing function, which imposes a total ordering on the Hash database.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHash.html#hash(com.sleepycat.db.Db, byte[], int)">hash</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ byte[]&nbsp;data,
+ int&nbsp;len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbHash interface is used by the Db.setHash method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="hash(com.sleepycat.db.Db, byte[], int)"><!-- --></A><H3>
+hash</H3>
+<PRE>
+public int <B>hash</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ byte[]&nbsp;data,
+ int&nbsp;len)</PRE>
+<DL>
+<DD>The DbHash interface is used by the Db.setHash method. This interface defines the database-specific hash function. The hash function must handle any key values used by the application (possibly including zero-length keys).</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>db</CODE> - the enclosing database handle.<DD><CODE>data</CODE> - the byte string to be hashed.<DD><CODE>len</CODE> - the length of the byte string in bytes.
+<DT><B>Returns:</B><DD>The DbHash interface returns a hash value of type int.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbHash.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPanicHandler.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHash.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbHashStat.html b/db/docs/java/com/sleepycat/db/DbHashStat.html
new file mode 100644
index 000000000..4f1593374
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbHashStat.html
@@ -0,0 +1,600 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbHashStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbHashStat,DbHashStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbHashStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbHashStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbKeyRange.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHashStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbHashStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbHashStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbHashStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbHashStat object is used to return Hash database statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_bfree">hash_bfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes free on bucket pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_big_bfree">hash_big_bfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes free on big item pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_bigpages">hash_bigpages</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of big key/data pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_buckets">hash_buckets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of hash buckets.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_dup">hash_dup</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of duplicate pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_dup_free">hash_dup_free</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes free on duplicate pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_ffactor">hash_ffactor</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The desired fill factor (number of items per bucket) specified at database-creation time.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_free">hash_free</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of pages on the free list.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_magic">hash_magic</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Magic number that identifies the file as a Hash file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_metaflags">hash_metaflags</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_ndata">hash_ndata</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_nkeys">hash_nkeys</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of unique keys in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_overflows">hash_overflows</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of overflow pages (overflow pages are pages that contain items that did not fit in the main bucket page).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_ovfl_free">hash_ovfl_free</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes free on overflow pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_pagesize">hash_pagesize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The underlying Hash database page (and bucket) size, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#hash_version">hash_version</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The version of the Hash database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#DbHashStat()">DbHashStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbHashStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="hash_magic"><!-- --></A><H3>
+hash_magic</H3>
+<PRE>
+public int <B>hash_magic</B></PRE>
+<DL>
+<DD>Magic number that identifies the file as a Hash file. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_version"><!-- --></A><H3>
+hash_version</H3>
+<PRE>
+public int <B>hash_version</B></PRE>
+<DL>
+<DD>The version of the Hash database. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_metaflags"><!-- --></A><H3>
+hash_metaflags</H3>
+<PRE>
+public int <B>hash_metaflags</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_nkeys"><!-- --></A><H3>
+hash_nkeys</H3>
+<PRE>
+public int <B>hash_nkeys</B></PRE>
+<DL>
+<DD>The number of unique keys in the database. If Db.DB_FAST_STAT was specified the count will be the last saved value unless it has never been calculated, in which case it will be 0. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_ndata"><!-- --></A><H3>
+hash_ndata</H3>
+<PRE>
+public int <B>hash_ndata</B></PRE>
+<DL>
+<DD>The number of key/data pairs in the database. If Db.DB_FAST_STAT was specified the count will be the last saved value unless it has never been calculated, in which case it will be 0. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_pagesize"><!-- --></A><H3>
+hash_pagesize</H3>
+<PRE>
+public int <B>hash_pagesize</B></PRE>
+<DL>
+<DD>The underlying Hash database page (and bucket) size, in bytes. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_ffactor"><!-- --></A><H3>
+hash_ffactor</H3>
+<PRE>
+public int <B>hash_ffactor</B></PRE>
+<DL>
+<DD>The desired fill factor (number of items per bucket) specified at database-creation time. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_buckets"><!-- --></A><H3>
+hash_buckets</H3>
+<PRE>
+public int <B>hash_buckets</B></PRE>
+<DL>
+<DD>The number of hash buckets. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_free"><!-- --></A><H3>
+hash_free</H3>
+<PRE>
+public int <B>hash_free</B></PRE>
+<DL>
+<DD>The number of pages on the free list.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_bfree"><!-- --></A><H3>
+hash_bfree</H3>
+<PRE>
+public int <B>hash_bfree</B></PRE>
+<DL>
+<DD>The number of bytes free on bucket pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_bigpages"><!-- --></A><H3>
+hash_bigpages</H3>
+<PRE>
+public int <B>hash_bigpages</B></PRE>
+<DL>
+<DD>The number of big key/data pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_big_bfree"><!-- --></A><H3>
+hash_big_bfree</H3>
+<PRE>
+public int <B>hash_big_bfree</B></PRE>
+<DL>
+<DD>The number of bytes free on big item pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_overflows"><!-- --></A><H3>
+hash_overflows</H3>
+<PRE>
+public int <B>hash_overflows</B></PRE>
+<DL>
+<DD>The number of overflow pages (overflow pages are pages that contain items that did not fit in the main bucket page).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_ovfl_free"><!-- --></A><H3>
+hash_ovfl_free</H3>
+<PRE>
+public int <B>hash_ovfl_free</B></PRE>
+<DL>
+<DD>The number of bytes free on overflow pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_dup"><!-- --></A><H3>
+hash_dup</H3>
+<PRE>
+public int <B>hash_dup</B></PRE>
+<DL>
+<DD>The number of duplicate pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="hash_dup_free"><!-- --></A><H3>
+hash_dup_free</H3>
+<PRE>
+public int <B>hash_dup_free</B></PRE>
+<DL>
+<DD>The number of bytes free on duplicate pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbHashStat()"><!-- --></A><H3>
+DbHashStat</H3>
+<PRE>
+public <B>DbHashStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbHashStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbKeyRange.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHashStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbKeyRange.html b/db/docs/java/com/sleepycat/db/DbKeyRange.html
new file mode 100644
index 000000000..9d0864116
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbKeyRange.html
@@ -0,0 +1,289 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbKeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbKeyRange,DbKeyRange class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbKeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbKeyRange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHashStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbKeyRange.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbKeyRange</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbKeyRange</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbKeyRange</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbKeyRange.html#equal">equal</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A value between 0 and 1, the proportion of keys equal to the
+ specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbKeyRange.html#greater">greater</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A value between 0 and 1, the proportion of keys greater than
+ the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;double</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbKeyRange.html#less">less</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A value between 0 and 1, the proportion of keys less than the
+ specified key.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbKeyRange.html#DbKeyRange()">DbKeyRange</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="equal"><!-- --></A><H3>
+equal</H3>
+<PRE>
+public double <B>equal</B></PRE>
+<DL>
+<DD>A value between 0 and 1, the proportion of keys equal to the
+ specified key.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="greater"><!-- --></A><H3>
+greater</H3>
+<PRE>
+public double <B>greater</B></PRE>
+<DL>
+<DD>A value between 0 and 1, the proportion of keys greater than
+ the specified key.
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="less"><!-- --></A><H3>
+less</H3>
+<PRE>
+public double <B>less</B></PRE>
+<DL>
+<DD>A value between 0 and 1, the proportion of keys less than the
+ specified key.
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbKeyRange()"><!-- --></A><H3>
+DbKeyRange</H3>
+<PRE>
+public <B>DbKeyRange</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbKeyRange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHashStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbKeyRange.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLock.html b/db/docs/java/com/sleepycat/db/DbLock.html
new file mode 100644
index 000000000..f7a2b5f95
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLock.html
@@ -0,0 +1,187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLock (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLock,DbLock class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLock (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLock.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbKeyRange.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockRequest.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLock.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLock</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLock</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLock</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The locking interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle. The DbLock object is the handle for a single lock, and has no methods of its own.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLock.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbKeyRange.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockRequest.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLock.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLockNotGrantedException.html b/db/docs/java/com/sleepycat/db/DbLockNotGrantedException.html
new file mode 100644
index 000000000..970b3202d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLockNotGrantedException.html
@@ -0,0 +1,449 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLockNotGrantedException,DbLockNotGrantedException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockNotGrantedException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMemoryException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockNotGrantedException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLockNotGrantedException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="../../../com/sleepycat/db/DbException.html">com.sleepycat.db.DbException</A>
+ |
+ +--<B>com.sleepycat.db.DbLockNotGrantedException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DbLockNotGrantedException</B><DT>extends <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></DL>
+
+<P>
+This information describes the DbLockNotGrantedException class and how it is used by the various Db* classes.</p> <p>A DbLockNotGrantedException is thrown when a lock, requested using the <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> methods, where the <A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> option was specified, is unable to be granted immediately.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.db.DbLockNotGrantedException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#get_index()">get_index</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getIndex()"><CODE>getIndex()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#get_lock()">get_lock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><CODE>getLock()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#get_mode()">get_mode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getMode()"><CODE>getMode()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#get_obj()">get_obj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><CODE>getObj()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#get_op()">get_op</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getOp()"><CODE>getOp()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getIndex()">getIndex</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getIndex</b> method returns -1 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the index of the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getLock()">getLock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getLock</b> method returns null when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>lock</b> in the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getMode()">getMode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getMode</b> method returns the <b>mode</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>mode</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getObj()">getObj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getObj</b> method returns the <b>mode</b> parameter when returns the <b>object</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>object</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getOp()">getOp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getOp</b> method returns 0 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>op</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DbException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DbException.html#get_errno()">get_errno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getIndex()"><!-- --></A><H3>
+getIndex</H3>
+<PRE>
+public int <B>getIndex</B>()</PRE>
+<DL>
+<DD>The <b>getIndex</b> method returns -1 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the index of the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getIndex</b> method returns -1 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the index of the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLock()"><!-- --></A><H3>
+getLock</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>getLock</B>()</PRE>
+<DL>
+<DD>The <b>getLock</b> method returns null when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>lock</b> in the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getLock</b> method returns null when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>lock</b> in the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMode()"><!-- --></A><H3>
+getMode</H3>
+<PRE>
+public int <B>getMode</B>()</PRE>
+<DL>
+<DD>The <b>getMode</b> method returns the <b>mode</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>mode</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getMode</b> method returns the <b>mode</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>mode</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getObj()"><!-- --></A><H3>
+getObj</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>getObj</B>()</PRE>
+<DL>
+<DD>The <b>getObj</b> method returns the <b>mode</b> parameter when returns the <b>object</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>object</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called. </p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getObj</b> method returns the <b>mode</b> parameter when returns the <b>object</b> parameter when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>object</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOp()"><!-- --></A><H3>
+getOp</H3>
+<PRE>
+public int <B>getOp</B>()</PRE>
+<DL>
+<DD>The <b>getOp</b> method returns 0 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>op</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getOp</b> method returns 0 when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>op</b> for the failed DbLockRequest when <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_index()"><!-- --></A><H3>
+get_index</H3>
+<PRE>
+public int <B>get_index</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getIndex()"><CODE>getIndex()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lock()"><!-- --></A><H3>
+get_lock</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>get_lock</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><CODE>getLock()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_mode()"><!-- --></A><H3>
+get_mode</H3>
+<PRE>
+public int <B>get_mode</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getMode()"><CODE>getMode()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_obj()"><!-- --></A><H3>
+get_obj</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>get_obj</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><CODE>getObj()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_op()"><!-- --></A><H3>
+get_op</H3>
+<PRE>
+public int <B>get_op</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html#getOp()"><CODE>getOp()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockNotGrantedException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMemoryException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockNotGrantedException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLockRequest.html b/db/docs/java/com/sleepycat/db/DbLockRequest.html
new file mode 100644
index 000000000..81ecb30ea
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLockRequest.html
@@ -0,0 +1,646 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLockRequest,DbLockRequest class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockRequest.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockRequest.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLockRequest</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLockRequest</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLockRequest</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbLockRequest object is used to encapsulate a single lock request.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode and lock, for the specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock, int)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode, lock and timeout for the specified object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#get_lock()">get_lock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getLock()"><CODE>getLock()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#get_mode()">get_mode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getMode()"><CODE>getMode()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#get_obj()">get_obj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getObj()"><CODE>getObj()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#get_op()">get_op</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getOp()"><CODE>getOp()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#getLock()">getLock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getLock method returns the lock reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#getMode()">getMode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getMode method returns the lock mode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#getObj()">getObj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getObj method returns the object protected by this lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#getOp()">getOp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getOp method returns the operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#getTimeout()">getTimeout</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getTimeout method returns the lock timeout value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#set_lock(com.sleepycat.db.DbLock)">set_lock</A></B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><CODE>setLock(DbLock)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#set_mode(int)">set_mode</A></B>(int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setMode(int)"><CODE>setMode(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#set_obj(com.sleepycat.db.Dbt)">set_obj</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><CODE>setObj(Dbt)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#set_op(int)">set_op</A></B>(int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setOp(int)"><CODE>setOp(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)">setLock</A></B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setLock method sets the lock reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#setMode(int)">setMode</A></B>(int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setMode method sets the lock mode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)">setObj</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setObj method sets the lock object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#setOp(int)">setOp</A></B>(int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setOp method sets the operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockRequest.html#setTimeout(int)">setTimeout</A></B>(int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setTimeout method sets the lock timeout value.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock)"><!-- --></A><H3>
+DbLockRequest</H3>
+<PRE>
+public <B>DbLockRequest</B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</PRE>
+<DL>
+<DD>The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode and lock, for the specified object.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>lock</CODE> - the lock type for the object.<DD><CODE>mode</CODE> - the permissions mode for the object.<DD><CODE>obj</CODE> - the object being locked.<DD><CODE>op</CODE> - The <b>op</b> parameter operation being performed.</DL>
+<HR>
+
+<A NAME="DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock, int)"><!-- --></A><H3>
+DbLockRequest</H3>
+<PRE>
+public <B>DbLockRequest</B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock,
+ int&nbsp;timeout)</PRE>
+<DL>
+<DD>The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode, lock and timeout for the specified object.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>lock</CODE> - the lock type for the object.<DD><CODE>mode</CODE> - the permissions mode for the object.<DD><CODE>obj</CODE> - the object being locked.<DD><CODE>op</CODE> - the operation being performed.<DD><CODE>timeout</CODE> - the timeout value for the lock.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="setLock(com.sleepycat.db.DbLock)"><!-- --></A><H3>
+setLock</H3>
+<PRE>
+public void <B>setLock</B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</PRE>
+<DL>
+<DD>The DbLockRequest.setLock method sets the lock reference.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>lock</CODE> - the lock reference.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMode(int)"><!-- --></A><H3>
+setMode</H3>
+<PRE>
+public void <B>setMode</B>(int&nbsp;mode)</PRE>
+<DL>
+<DD>The DbLockRequest.setMode method sets the lock mode.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>mode</CODE> - the lock mode.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setObj(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+setObj</H3>
+<PRE>
+public void <B>setObj</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</PRE>
+<DL>
+<DD>The DbLockRequest.setObj method sets the lock object.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>obj</CODE> - the lock object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setOp(int)"><!-- --></A><H3>
+setOp</H3>
+<PRE>
+public void <B>setOp</B>(int&nbsp;op)</PRE>
+<DL>
+<DD>The DbLockRequest.setOp method sets the operation.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>op</CODE> - the operation.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTimeout(int)"><!-- --></A><H3>
+setTimeout</H3>
+<PRE>
+public void <B>setTimeout</B>(int&nbsp;timeout)</PRE>
+<DL>
+<DD>The DbLockRequest.setTimeout method sets the lock timeout value.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>timeout</CODE> - the lock timeout value.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_lock(com.sleepycat.db.DbLock)"><!-- --></A><H3>
+set_lock</H3>
+<PRE>
+public void <B>set_lock</B>(<A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><CODE>setLock(DbLock)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_mode(int)"><!-- --></A><H3>
+set_mode</H3>
+<PRE>
+public void <B>set_mode</B>(int&nbsp;mode)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setMode(int)"><CODE>setMode(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_obj(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+set_obj</H3>
+<PRE>
+public void <B>set_obj</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><CODE>setObj(Dbt)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_op(int)"><!-- --></A><H3>
+set_op</H3>
+<PRE>
+public void <B>set_op</B>(int&nbsp;op)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#setOp(int)"><CODE>setOp(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLock()"><!-- --></A><H3>
+getLock</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>getLock</B>()</PRE>
+<DL>
+<DD>The DbLockRequest.getLock method returns the lock reference.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLockRequest.getLock method returns the lock reference.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMode()"><!-- --></A><H3>
+getMode</H3>
+<PRE>
+public int <B>getMode</B>()</PRE>
+<DL>
+<DD>The DbLockRequest.getMode method returns the lock mode.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLockRequest.getMode method returns the lock mode.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getObj()"><!-- --></A><H3>
+getObj</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>getObj</B>()</PRE>
+<DL>
+<DD>The DbLockRequest.getObj method returns the object protected by this lock.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLockRequest.getObj method returns the object protected by this lock.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOp()"><!-- --></A><H3>
+getOp</H3>
+<PRE>
+public int <B>getOp</B>()</PRE>
+<DL>
+<DD>The DbLockRequest.getOp method returns the operation.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLockRequest.getOp method returns the operation.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeout()"><!-- --></A><H3>
+getTimeout</H3>
+<PRE>
+public int <B>getTimeout</B>()</PRE>
+<DL>
+<DD>The DbLockRequest.getTimeout method returns the lock timeout value.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLockRequest.getTimeout method returns the lock timeout value.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_lock()"><!-- --></A><H3>
+get_lock</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLock.html">DbLock</A> <B>get_lock</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getLock()"><CODE>getLock()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_mode()"><!-- --></A><H3>
+get_mode</H3>
+<PRE>
+public int <B>get_mode</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getMode()"><CODE>getMode()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_obj()"><!-- --></A><H3>
+get_obj</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>get_obj</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getObj()"><CODE>getObj()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_op()"><!-- --></A><H3>
+get_op</H3>
+<PRE>
+public int <B>get_op</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLockRequest.html#getOp()"><CODE>getOp()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockRequest.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLock.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockRequest.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLockStat.html b/db/docs/java/com/sleepycat/db/DbLockStat.html
new file mode 100644
index 000000000..440574a01
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLockStat.html
@@ -0,0 +1,771 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLockStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLockStat,DbLockStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLockStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockRequest.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLockStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLockStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLockStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbLockStat object is used to return lock region statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_cur_maxid">st_cur_maxid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current maximum unused locker ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_id">st_id</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The last allocated locker ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_locktimeout">st_locktimeout</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lock timeout value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxlockers">st_maxlockers</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of lockers possible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxlocks">st_maxlocks</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of locks possible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxnlockers">st_maxnlockers</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of lockers at any one time.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxnlocks">st_maxnlocks</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of locks at any one time.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxnobjects">st_maxnobjects</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of lock objects at any one time.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_maxobjects">st_maxobjects</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of lock objects possible.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nconflicts">st_nconflicts</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of locks not immediately available due to conflicts.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_ndeadlocks">st_ndeadlocks</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of deadlocks.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nlockers">st_nlockers</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of current lockers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nlocks">st_nlocks</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of current locks.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nlocktimeouts">st_nlocktimeouts</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of lock requests that have timed out.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nmodes">st_nmodes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of lock modes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nnowaits">st_nnowaits</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of lock requests failing because <A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> was set.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nobjects">st_nobjects</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of current lock objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nreleases">st_nreleases</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of locks released.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_nrequests">st_nrequests</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of locks requested.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_ntxntimeouts">st_ntxntimeouts</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that have timed out.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_region_nowait">st_region_nowait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was able to obtain the region lock without waiting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_region_wait">st_region_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was forced to wait before obtaining the region lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_regsize">st_regsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The size of the lock region.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#st_txntimeout">st_txntimeout</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction timeout value.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#DbLockStat()">DbLockStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLockStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="st_id"><!-- --></A><H3>
+st_id</H3>
+<PRE>
+public int <B>st_id</B></PRE>
+<DL>
+<DD>The last allocated locker ID.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cur_maxid"><!-- --></A><H3>
+st_cur_maxid</H3>
+<PRE>
+public int <B>st_cur_maxid</B></PRE>
+<DL>
+<DD>The current maximum unused locker ID.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxlocks"><!-- --></A><H3>
+st_maxlocks</H3>
+<PRE>
+public int <B>st_maxlocks</B></PRE>
+<DL>
+<DD>The maximum number of locks possible.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxlockers"><!-- --></A><H3>
+st_maxlockers</H3>
+<PRE>
+public int <B>st_maxlockers</B></PRE>
+<DL>
+<DD>The maximum number of lockers possible.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxobjects"><!-- --></A><H3>
+st_maxobjects</H3>
+<PRE>
+public int <B>st_maxobjects</B></PRE>
+<DL>
+<DD>The maximum number of lock objects possible.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nmodes"><!-- --></A><H3>
+st_nmodes</H3>
+<PRE>
+public int <B>st_nmodes</B></PRE>
+<DL>
+<DD>The number of lock modes.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nlocks"><!-- --></A><H3>
+st_nlocks</H3>
+<PRE>
+public int <B>st_nlocks</B></PRE>
+<DL>
+<DD>The number of current locks.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxnlocks"><!-- --></A><H3>
+st_maxnlocks</H3>
+<PRE>
+public int <B>st_maxnlocks</B></PRE>
+<DL>
+<DD>The maximum number of locks at any one time.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nlockers"><!-- --></A><H3>
+st_nlockers</H3>
+<PRE>
+public int <B>st_nlockers</B></PRE>
+<DL>
+<DD>The number of current lockers.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxnlockers"><!-- --></A><H3>
+st_maxnlockers</H3>
+<PRE>
+public int <B>st_maxnlockers</B></PRE>
+<DL>
+<DD>The maximum number of lockers at any one time.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nobjects"><!-- --></A><H3>
+st_nobjects</H3>
+<PRE>
+public int <B>st_nobjects</B></PRE>
+<DL>
+<DD>The number of current lock objects.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxnobjects"><!-- --></A><H3>
+st_maxnobjects</H3>
+<PRE>
+public int <B>st_maxnobjects</B></PRE>
+<DL>
+<DD>The maximum number of lock objects at any one time.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nconflicts"><!-- --></A><H3>
+st_nconflicts</H3>
+<PRE>
+public int <B>st_nconflicts</B></PRE>
+<DL>
+<DD>The total number of locks not immediately available due to conflicts.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nrequests"><!-- --></A><H3>
+st_nrequests</H3>
+<PRE>
+public int <B>st_nrequests</B></PRE>
+<DL>
+<DD>The total number of locks requested.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nreleases"><!-- --></A><H3>
+st_nreleases</H3>
+<PRE>
+public int <B>st_nreleases</B></PRE>
+<DL>
+<DD>The total number of locks released.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nnowaits"><!-- --></A><H3>
+st_nnowaits</H3>
+<PRE>
+public int <B>st_nnowaits</B></PRE>
+<DL>
+<DD>The total number of lock requests failing because <A HREF="../../../com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> was set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_ndeadlocks"><!-- --></A><H3>
+st_ndeadlocks</H3>
+<PRE>
+public int <B>st_ndeadlocks</B></PRE>
+<DL>
+<DD>The number of deadlocks.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_locktimeout"><!-- --></A><H3>
+st_locktimeout</H3>
+<PRE>
+public int <B>st_locktimeout</B></PRE>
+<DL>
+<DD>Lock timeout value.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nlocktimeouts"><!-- --></A><H3>
+st_nlocktimeouts</H3>
+<PRE>
+public int <B>st_nlocktimeouts</B></PRE>
+<DL>
+<DD>The number of lock requests that have timed out.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_txntimeout"><!-- --></A><H3>
+st_txntimeout</H3>
+<PRE>
+public int <B>st_txntimeout</B></PRE>
+<DL>
+<DD>Transaction timeout value.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_ntxntimeouts"><!-- --></A><H3>
+st_ntxntimeouts</H3>
+<PRE>
+public int <B>st_ntxntimeouts</B></PRE>
+<DL>
+<DD>The number of transactions that have timed out. This value is also a component of <b>st_ndeadlocks</b>, the total number of deadlocks detected.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_wait"><!-- --></A><H3>
+st_region_wait</H3>
+<PRE>
+public int <B>st_region_wait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_nowait"><!-- --></A><H3>
+st_region_nowait</H3>
+<PRE>
+public int <B>st_region_nowait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_regsize"><!-- --></A><H3>
+st_regsize</H3>
+<PRE>
+public int <B>st_regsize</B></PRE>
+<DL>
+<DD>The size of the lock region.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbLockStat()"><!-- --></A><H3>
+DbLockStat</H3>
+<PRE>
+public <B>DbLockStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLockStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockRequest.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLogStat.html b/db/docs/java/com/sleepycat/db/DbLogStat.html
new file mode 100644
index 000000000..204acd151
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLogStat.html
@@ -0,0 +1,708 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLogStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLogStat,DbLogStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLogStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLogStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLogStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLogStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLogStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbLogStat object is used to return logging subsystem statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_cur_file">st_cur_file</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current log file number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_cur_offset">st_cur_offset</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The byte offset in the current log file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_disk_file">st_disk_file</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The log file number of the last record known to be on disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_disk_offset">st_disk_offset</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The byte offset of the last record known to be on disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_lg_bsize">st_lg_bsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The in-memory log record cache size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_lg_size">st_lg_size</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current log file size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_magic">st_magic</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The magic number that identifies a file as a log file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_maxcommitperflush">st_maxcommitperflush</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of commits contained in a single log flush.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_mincommitperflush">st_mincommitperflush</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The minimum number of commits contained in a single log flush that contained a commit.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_mode">st_mode</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The mode of any created log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_region_nowait">st_region_nowait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was able to obtain the region lock without waiting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_region_wait">st_region_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was forced to wait before obtaining the region lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_regsize">st_regsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The size of the region.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_scount">st_scount</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the log has been flushed to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_version">st_version</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The version of the log file type.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_w_bytes">st_w_bytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes over and above <b>st_w_mbytes</b> written to this log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_w_mbytes">st_w_mbytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of megabytes written to this log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_wc_bytes">st_wc_bytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of bytes over and above <b>st_wc_mbytes</b> written to this log since the last checkpoint.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_wc_mbytes">st_wc_mbytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of megabytes written to this log since the last checkpoint.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_wcount">st_wcount</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the log has been written to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#st_wcount_fill">st_wcount_fill</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the log has been written to disk because the in-memory log record cache filled up.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#DbLogStat()">DbLogStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="st_magic"><!-- --></A><H3>
+st_magic</H3>
+<PRE>
+public int <B>st_magic</B></PRE>
+<DL>
+<DD>The magic number that identifies a file as a log file.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_version"><!-- --></A><H3>
+st_version</H3>
+<PRE>
+public int <B>st_version</B></PRE>
+<DL>
+<DD>The version of the log file type.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_mode"><!-- --></A><H3>
+st_mode</H3>
+<PRE>
+public int <B>st_mode</B></PRE>
+<DL>
+<DD>The mode of any created log files.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_lg_bsize"><!-- --></A><H3>
+st_lg_bsize</H3>
+<PRE>
+public int <B>st_lg_bsize</B></PRE>
+<DL>
+<DD>The in-memory log record cache size.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_lg_size"><!-- --></A><H3>
+st_lg_size</H3>
+<PRE>
+public int <B>st_lg_size</B></PRE>
+<DL>
+<DD>The current log file size.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_w_bytes"><!-- --></A><H3>
+st_w_bytes</H3>
+<PRE>
+public int <B>st_w_bytes</B></PRE>
+<DL>
+<DD>The number of bytes over and above <b>st_w_mbytes</b> written to this log.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_w_mbytes"><!-- --></A><H3>
+st_w_mbytes</H3>
+<PRE>
+public int <B>st_w_mbytes</B></PRE>
+<DL>
+<DD>The number of megabytes written to this log.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_wc_bytes"><!-- --></A><H3>
+st_wc_bytes</H3>
+<PRE>
+public int <B>st_wc_bytes</B></PRE>
+<DL>
+<DD>The number of bytes over and above <b>st_wc_mbytes</b> written to this log since the last checkpoint.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_wc_mbytes"><!-- --></A><H3>
+st_wc_mbytes</H3>
+<PRE>
+public int <B>st_wc_mbytes</B></PRE>
+<DL>
+<DD>The number of megabytes written to this log since the last checkpoint.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_wcount"><!-- --></A><H3>
+st_wcount</H3>
+<PRE>
+public int <B>st_wcount</B></PRE>
+<DL>
+<DD>The number of times the log has been written to disk.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_wcount_fill"><!-- --></A><H3>
+st_wcount_fill</H3>
+<PRE>
+public int <B>st_wcount_fill</B></PRE>
+<DL>
+<DD>The number of times the log has been written to disk because the in-memory log record cache filled up.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_scount"><!-- --></A><H3>
+st_scount</H3>
+<PRE>
+public int <B>st_scount</B></PRE>
+<DL>
+<DD>The number of times the log has been flushed to disk.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_wait"><!-- --></A><H3>
+st_region_wait</H3>
+<PRE>
+public int <B>st_region_wait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_nowait"><!-- --></A><H3>
+st_region_nowait</H3>
+<PRE>
+public int <B>st_region_nowait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cur_file"><!-- --></A><H3>
+st_cur_file</H3>
+<PRE>
+public int <B>st_cur_file</B></PRE>
+<DL>
+<DD>The current log file number.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cur_offset"><!-- --></A><H3>
+st_cur_offset</H3>
+<PRE>
+public int <B>st_cur_offset</B></PRE>
+<DL>
+<DD>The byte offset in the current log file.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_disk_file"><!-- --></A><H3>
+st_disk_file</H3>
+<PRE>
+public int <B>st_disk_file</B></PRE>
+<DL>
+<DD>The log file number of the last record known to be on disk.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_disk_offset"><!-- --></A><H3>
+st_disk_offset</H3>
+<PRE>
+public int <B>st_disk_offset</B></PRE>
+<DL>
+<DD>The byte offset of the last record known to be on disk.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_regsize"><!-- --></A><H3>
+st_regsize</H3>
+<PRE>
+public int <B>st_regsize</B></PRE>
+<DL>
+<DD>The size of the region.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxcommitperflush"><!-- --></A><H3>
+st_maxcommitperflush</H3>
+<PRE>
+public int <B>st_maxcommitperflush</B></PRE>
+<DL>
+<DD>The maximum number of commits contained in a single log flush.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_mincommitperflush"><!-- --></A><H3>
+st_mincommitperflush</H3>
+<PRE>
+public int <B>st_mincommitperflush</B></PRE>
+<DL>
+<DD>The minimum number of commits contained in a single log flush that contained a commit.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbLogStat()"><!-- --></A><H3>
+DbLogStat</H3>
+<PRE>
+public <B>DbLogStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLogStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogc.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLogc.html b/db/docs/java/com/sleepycat/db/DbLogc.html
new file mode 100644
index 000000000..533abe4ec
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLogc.html
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLogc (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLogc,DbLogc class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLogc (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLogc.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLogc</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLogc</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLogc</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbLogc object is the handle for a cursor into the log files, supporting sequential access to the records stored in log files. The handle is not free-threaded. Once the <A HREF="../../../com/sleepycat/db/DbLogc.html#close(int)"><CODE>DbLogc.close</CODE></A> method is called, the handle may not be accessed again, regardless of that method's return.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogc.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.close method discards the log cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.get method returns records from the log.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close(int)"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbLogc.close method discards the log cursor. After DbLogc.close has been called, regardless of its return, the cursor handle may not be used again.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbLogc.close method will fail and throw a IllegalArgumentException exception if the cursor was previously closed; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbLogc.get method returns records from the log.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data field of the <b>data</b> structure is set to the record retrieved, and the size field indicates the number of bytes in the record. See <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> for a description of other fields in the <b>data</b> structure. The <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_MALLOC"><CODE>Db.DB_DBT_MALLOC</CODE></A>, <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_REALLOC"><CODE>Db.DB_DBT_REALLOC</CODE></A> and <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE>Db.DB_DBT_USERMEM</CODE></A> flags may be specified for any <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> used for data retrieval.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CURRENT"><CODE>Db.DB_CURRENT</CODE></A><p>Return the log record to which the log currently refers. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FIRST"><CODE>Db.DB_FIRST</CODE></A><p>The first record from any of the log files found in the log directory is returned in the <b>data</b> parameter. overwritten with the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the record returned. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LAST"><CODE>Db.DB_LAST</CODE></A><p>The last record in the log is returned in the <b>data</b> parameter. overwritten with the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the record returned. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT"><CODE>Db.DB_NEXT</CODE></A><p>The current log position is advanced to the next record in the log, and that record is returned in the <b>data</b> parameter. overwritten with the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the record returned. <p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET, DB_NEXT, or DB_PREV, DbLogc.get will return the first record in the log.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV"><CODE>Db.DB_PREV</CODE></A><p>The current log position is advanced to the previous record in the log, and that record is returned in the <b>data</b> parameter. overwritten with the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> of the record returned. <p>If the cursor has not been initialized via DB_FIRST, DB_LAST, DB_SET, DB_NEXT, or DB_PREV, DbLogc.get will return the last record in the log.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET"><CODE>Db.DB_SET</CODE></A><p>Retrieve the record specified by the <b>lsn</b> parameter. </li></ul><DD><CODE>lsn</CODE> - When the <b>flag</b> parameter is set to Db.DB_CURRENT, Db.DB_FIRST, Db.DB_LAST, Db.DB_NEXT or Db.DB_PREV, the <b>lsn</b> parameter is overwritten with the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> value of the record retrieved. When <b>flag</b> is set to Db.DB_SET, the <b>lsn</b> parameter is the <A HREF="../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> value of the record to be retrieved.
+<DT><B>Returns:</B><DD>Unless otherwise specified, the DbLogc.get method throws an exception that encapsulates a non-zero error value on failure. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The DbLogc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code> is set and the log is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The DbLogc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code> is set and the log is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The DbLogc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code> is set and the last log record has already been returned or the log is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The DbLogc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code> is set and the first log record has already been returned or the log is empty. </li></ul></p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbLogc.get method will fail and throw a IllegalArgumentException exception if the Db.DB_CURRENT flag was set and the log cursor has not yet been initialized; the Db.DB_CURRENT, Db.DB_NEXT, or Db.DB_PREV flags were set and the log was opened with the DB_THREAD flag set; the Db.DB_SET flag was set and the specified log sequence number does not appear in the log; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLogc.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbLsn.html b/db/docs/java/com/sleepycat/db/DbLsn.html
new file mode 100644
index 000000000..d2842d476
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbLsn.html
@@ -0,0 +1,330 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbLsn (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbLsn,DbLsn class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbLsn (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLsn.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLsn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbLsn</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbLsn</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbLsn</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbLsn object is a <b>log sequence number</b> which specifies a unique location in a log file. A DbLsn consists of two unsigned 32-bit integers -- one specifies the log file number, and the other specifies an offset in the log file.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLsn.html#DbLsn(int, int)">DbLsn</A></B>(int&nbsp;file,
+ int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn constructor constructs a DbLsn with the specified file and offset.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLsn.html#get_file()">get_file</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLsn.html#getFile()"><CODE>getFile()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLsn.html#get_offset()">get_offset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLsn.html#getOffset()"><CODE>getOffset()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLsn.html#getFile()">getFile</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn.getFile method returns the DbLsn object's file number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbLsn.html#getOffset()">getOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn.getOffset method returns the DbLsn object's file number.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbLsn(int, int)"><!-- --></A><H3>
+DbLsn</H3>
+<PRE>
+public <B>DbLsn</B>(int&nbsp;file,
+ int&nbsp;offset)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbLsn constructor constructs a DbLsn with the specified file and offset.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>file</CODE> - the log file number.<DD><CODE>offset</CODE> - the log file offset.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="get_file()"><!-- --></A><H3>
+get_file</H3>
+<PRE>
+public int <B>get_file</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLsn.html#getFile()"><CODE>getFile()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFile()"><!-- --></A><H3>
+getFile</H3>
+<PRE>
+public int <B>getFile</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbLsn.getFile method returns the DbLsn object's file number.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLsn.getFile method returns the DbLsn object's file number.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_offset()"><!-- --></A><H3>
+get_offset</H3>
+<PRE>
+public int <B>get_offset</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbLsn.html#getOffset()"><CODE>getOffset()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOffset()"><!-- --></A><H3>
+getOffset</H3>
+<PRE>
+public int <B>getOffset</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbLsn.getOffset method returns the DbLsn object's file number.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbLsn.getOffset method returns the DbLsn object's file number.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbLsn.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLogStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLsn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMemoryException.html b/db/docs/java/com/sleepycat/db/DbMemoryException.html
new file mode 100644
index 000000000..61127c0fb
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMemoryException.html
@@ -0,0 +1,300 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:11 EST 2003 -->
+<TITLE>
+DbMemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMemoryException,DbMemoryException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMemoryException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMemoryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMemoryException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="../../../com/sleepycat/db/DbException.html">com.sleepycat.db.DbException</A>
+ |
+ +--<B>com.sleepycat.db.DbMemoryException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DbMemoryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></DL>
+
+<P>
+This information describes the DbMemoryException class and how it is used by the various Db* classes.</p> <p>A DbMemoryException is thrown when there is insufficient memory to complete an operation, and there is the possibility of recovering. An example is during a <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> operation with the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> flags set to <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE>Db.DB_DBT_USERMEM</CODE></A>.</p> <p>In a Java Virtual Machine, there are usually separate heaps for memory allocated by native code and for objects allocated in Java code. If the Java heap is exhausted, the JVM will throw an OutOfMemoryError, so you may see that exception rather than DbMemoryException.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.db.DbMemoryException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMemoryException.html#get_dbt()">get_dbt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMemoryException.html#getDbt()"><CODE>getDbt()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMemoryException.html#getDbt()">getDbt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getDbt</b> method returns the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> with insufficient memory to complete the operation, causing the DbMemoryException to be thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMemoryException.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Override of DbException.toString(): the extra verbage that
+ comes from DbEnv.strerror(ENOMEM) is not helpful.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sleepycat.db.DbException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DbException.html#get_errno()">get_errno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()">getErrno</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDbt()"><!-- --></A><H3>
+getDbt</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>getDbt</B>()</PRE>
+<DL>
+<DD>The <b>getDbt</b> method returns the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> with insufficient memory to complete the operation, causing the DbMemoryException to be thrown. </p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The <b>getDbt</b> method returns the <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> with insufficient memory to complete the operation, causing the DbMemoryException to be thrown.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_dbt()"><!-- --></A><H3>
+get_dbt</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A> <B>get_dbt</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMemoryException.html#getDbt()"><CODE>getDbt()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Override of DbException.toString(): the extra verbage that
+ comes from DbEnv.strerror(ENOMEM) is not helpful.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html#toString()">toString</A></CODE> in class <CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMemoryException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMemoryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMpoolFStat.html b/db/docs/java/com/sleepycat/db/DbMpoolFStat.html
new file mode 100644
index 000000000..8273685b7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMpoolFStat.html
@@ -0,0 +1,435 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMpoolFStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMpoolFStat,DbMpoolFStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMpoolFStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolFStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMpoolFStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbMpoolFStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMpoolFStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbMpoolFStat object is used to return memory pool per-file statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#file_name">file_name</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The name of the file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_cache_hit">st_cache_hit</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages found in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_cache_miss">st_cache_miss</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages not found in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_map">st_map</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages mapped into the process' address space.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_page_create">st_page_create</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages created in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_page_in">st_page_in</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages read into the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_page_out">st_page_out</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages written from the cache to the backing file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#st_pagesize">st_pagesize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page size in bytes.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#DbMpoolFStat()">DbMpoolFStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="file_name"><!-- --></A><H3>
+file_name</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>file_name</B></PRE>
+<DL>
+<DD>The name of the file.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_pagesize"><!-- --></A><H3>
+st_pagesize</H3>
+<PRE>
+public int <B>st_pagesize</B></PRE>
+<DL>
+<DD>Page size in bytes.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_map"><!-- --></A><H3>
+st_map</H3>
+<PRE>
+public int <B>st_map</B></PRE>
+<DL>
+<DD>Requested pages mapped into the process' address space.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cache_hit"><!-- --></A><H3>
+st_cache_hit</H3>
+<PRE>
+public int <B>st_cache_hit</B></PRE>
+<DL>
+<DD>Requested pages found in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cache_miss"><!-- --></A><H3>
+st_cache_miss</H3>
+<PRE>
+public int <B>st_cache_miss</B></PRE>
+<DL>
+<DD>Requested pages not found in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_create"><!-- --></A><H3>
+st_page_create</H3>
+<PRE>
+public int <B>st_page_create</B></PRE>
+<DL>
+<DD>Pages created in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_in"><!-- --></A><H3>
+st_page_in</H3>
+<PRE>
+public int <B>st_page_in</B></PRE>
+<DL>
+<DD>Pages read into the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_out"><!-- --></A><H3>
+st_page_out</H3>
+<PRE>
+public int <B>st_page_out</B></PRE>
+<DL>
+<DD>Pages written from the cache to the backing file.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbMpoolFStat()"><!-- --></A><H3>
+DbMpoolFStat</H3>
+<PRE>
+public <B>DbMpoolFStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolFStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMpoolFile.html b/db/docs/java/com/sleepycat/db/DbMpoolFile.html
new file mode 100644
index 000000000..2330841c6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMpoolFile.html
@@ -0,0 +1,489 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMpoolFile (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMpoolFile,DbMpoolFile class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMpoolFile (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolFile.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFile.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMpoolFile</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbMpoolFile</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMpoolFile</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The memory pool interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle. The <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> memory pool methods and the DbMpoolFile class provide general-purpose, page-oriented buffer management of files. Although designed to work with the other <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> classes, they are also useful for more general purposes. The memory pools are referred to in this document as simply <i>pools</i>.</p> <p>In the Berkeley DB Java API, the DbMpoolFile class provides a very limited set of operations. It is only intended to modify settings for a <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> object using the <A HREF="../../../com/sleepycat/db/Db.html#get_mpf()"><CODE>Db.get_mpf</CODE></A> method.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getFlags()"><CODE>getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#get_maxsize()">get_maxsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><CODE>getMaxsize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#get_priority()">get_priority</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getPriority()"><CODE>getPriority()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getFlags method returns the flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getMaxsize()">getMaxsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getMaxsize method returns the size of the cache in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getPriority()">getPriority</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getPriority method returns the cache priority.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#set_flags(int, boolean)">set_flags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>setFlags(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#set_maxsize(long)">set_maxsize</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><CODE>setMaxsize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#set_priority(int)">set_priority</A></B>(int&nbsp;priority)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>setPriority(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)">setFlags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a file in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)">setMaxsize</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum size for the file to be <b>bytes</b> bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)">setPriority</A></B>(int&nbsp;priority)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the cache priority for pages from the specified file.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="get_priority()"><!-- --></A><H3>
+get_priority</H3>
+<PRE>
+public int <B>get_priority</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getPriority()"><CODE>getPriority()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPriority()"><!-- --></A><H3>
+getPriority</H3>
+<PRE>
+public int <B>getPriority</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbMpoolFile.getPriority method returns the cache priority.</p> <p>The DbMpoolFile.getPriority method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbMpoolFile.getPriority method returns the cache priority.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_priority(int)"><!-- --></A><H3>
+set_priority</H3>
+<PRE>
+public void <B>set_priority</B>(int&nbsp;priority)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>setPriority(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPriority(int)"><!-- --></A><H3>
+setPriority</H3>
+<PRE>
+public void <B>setPriority</B>(int&nbsp;priority)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the cache priority for pages from the specified file. The priority of a page biases the replacement algorithm to be more or less likely to discard a page when space is needed in the buffer pool. The bias is temporary, and pages will eventually be discarded if they are not referenced again. The DbMpoolFile.setPriority method is only advisory, and does not guarantee pages will be treated in a specific way.</p> <p>To set the priority for the pages belonging to a particular database, call the DbMpoolFile.setPriority method using the <A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><CODE>DbMpoolFile</CODE></A> handle returned by calling the <A HREF="../../../com/sleepycat/db/Db.html#get_mpf()"><CODE>Db.get_mpf</CODE></A> method.</p> <p>The DbMpoolFile.setPriority method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>priority</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_VERY_LOW"><CODE>Db.DB_PRIORITY_VERY_LOW</CODE></A><p>The lowest priority: pages are the most likely to be discarded. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_LOW"><CODE>Db.DB_PRIORITY_LOW</CODE></A><p>The next lowest priority. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_DEFAULT"><CODE>Db.DB_PRIORITY_DEFAULT</CODE></A><p>The default priority. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_HIGH"><CODE>Db.DB_PRIORITY_HIGH</CODE></A><p>The next highest priority. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PRIORITY_VERY_HIGH"><CODE>Db.DB_PRIORITY_VERY_HIGH</CODE></A><p>The highest priority: pages are the least likely to be discarded. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_flags()"><!-- --></A><H3>
+get_flags</H3>
+<PRE>
+public int <B>get_flags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getFlags()"><CODE>getFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFlags()"><!-- --></A><H3>
+getFlags</H3>
+<PRE>
+public int <B>getFlags</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbMpoolFile.getFlags method returns the flags.</p> <p>The DbMpoolFile.getFlags method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbMpoolFile.getFlags method returns the flags.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_flags(int, boolean)"><!-- --></A><H3>
+set_flags</H3>
+<PRE>
+public void <B>set_flags</B>(int&nbsp;flags,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>setFlags(int,boolean)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFlags(int, boolean)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int&nbsp;flags,
+ boolean&nbsp;onoff)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Configure a file in the cache.</p> <p>To set the flags for a particular database, call the DbMpoolFile.setFlags method using the <A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><CODE>DbMpoolFile</CODE></A> handle stored in the <b>mpf</b> field of the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MPOOL_NOFILE"><CODE>Db.DB_MPOOL_NOFILE</CODE></A><p>If set, no backing temporary file will be opened for in-memory databases, even if they expand to fill the entire cache. Attempts to create new file pages after the cache has been filled will fail. <p>The <code>Db.DB_MPOOL_NOFILE</code> flag may be used to configure Berkeley DB at any time during the life of the application.</p> </li></ul><DD><CODE>onoff</CODE> - If <b>onoff</b> is false, the specified flags are cleared; otherwise they are set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_maxsize()"><!-- --></A><H3>
+get_maxsize</H3>
+<PRE>
+public long <B>get_maxsize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><CODE>getMaxsize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMaxsize()"><!-- --></A><H3>
+getMaxsize</H3>
+<PRE>
+public long <B>getMaxsize</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbMpoolFile.getMaxsize method returns the size of the cache in bytes.</p> <p>The DbMpoolFile.getMaxsize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbMpoolFile.getMaxsize method returns the size of the cache in bytes.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_maxsize(long)"><!-- --></A><H3>
+set_maxsize</H3>
+<PRE>
+public void <B>set_maxsize</B>(long&nbsp;bytes)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><CODE>setMaxsize(long)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMaxsize(long)"><!-- --></A><H3>
+setMaxsize</H3>
+<PRE>
+public void <B>setMaxsize</B>(long&nbsp;bytes)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>Set the maximum size for the file to be <b>bytes</b> bytes. Attempts to allocate new pages in the file after the limit has been reached will fail.</p> <p>To set the maximum file size for a particular database, call the DbMpoolFile.setMaxsize method using the <A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><CODE>DbMpoolFile</CODE></A> handle stored in the <b>mpf</b> field of the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle. Attempts to insert new items into the database after the limit has been reached may fail.</p> <p>The DbMpoolFile.setMaxsize method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bytes</CODE> - The maximum size of the files in bytes.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolFile.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFile.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMpoolStat.html b/db/docs/java/com/sleepycat/db/DbMpoolStat.html
new file mode 100644
index 000000000..79de5d522
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMpoolStat.html
@@ -0,0 +1,897 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMpoolStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMpoolStat,DbMpoolStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMpoolStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMpoolStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbMpoolStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMpoolStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbMpoolStat object is used to return memory pool statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_alloc">st_alloc</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of page allocations.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_alloc_buckets">st_alloc_buckets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of hash buckets checked during allocation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_alloc_max_buckets">st_alloc_max_buckets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum number of hash buckets checked during an allocation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_alloc_max_pages">st_alloc_max_pages</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum number of pages checked during an allocation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_alloc_pages">st_alloc_pages</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of pages checked during allocation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_bytes">st_bytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bytes of cache (total cache size is st_gbytes + st_bytes).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_cache_hit">st_cache_hit</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages found in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_cache_miss">st_cache_miss</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages not found in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_gbytes">st_gbytes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gigabytes of cache (total cache size is st_gbytes + st_bytes).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_buckets">st_hash_buckets</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of hash buckets in buffer hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_examined">st_hash_examined</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total number of hash elements traversed during hash table lookups.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_longest">st_hash_longest</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The longest chain ever encountered in buffer hash table lookups.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_max_wait">st_hash_max_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of times any hash bucket lock was waited for by a thread of control.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_nowait">st_hash_nowait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was able to obtain a hash bucket lock without waiting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_searches">st_hash_searches</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Total number of buffer hash table lookups.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_hash_wait">st_hash_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was forced to wait before obtaining a hash bucket lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_map">st_map</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requested pages mapped into the process' address space (there is no available information about whether or not this request caused disk I/O, although examining the application page fault rate may be helpful).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_ncache">st_ncache</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of caches.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_clean">st_page_clean</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clean pages currently in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_create">st_page_create</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages created in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_dirty">st_page_dirty</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dirty pages currently in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_in">st_page_in</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages read into the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_out">st_page_out</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages written from the cache to the backing file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_page_trickle">st_page_trickle</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dirty pages written using the <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle</CODE></A> method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_pages">st_pages</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_region_nowait">st_region_nowait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was able to obtain a region lock without waiting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_region_wait">st_region_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was forced to wait before obtaining a region lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_regsize">st_regsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Individual cache size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_ro_evict">st_ro_evict</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clean pages forced from the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#st_rw_evict">st_rw_evict</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dirty pages forced from the cache.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#DbMpoolStat()">DbMpoolStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMpoolStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="st_gbytes"><!-- --></A><H3>
+st_gbytes</H3>
+<PRE>
+public int <B>st_gbytes</B></PRE>
+<DL>
+<DD>Gigabytes of cache (total cache size is st_gbytes + st_bytes).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_bytes"><!-- --></A><H3>
+st_bytes</H3>
+<PRE>
+public int <B>st_bytes</B></PRE>
+<DL>
+<DD>Bytes of cache (total cache size is st_gbytes + st_bytes).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_ncache"><!-- --></A><H3>
+st_ncache</H3>
+<PRE>
+public int <B>st_ncache</B></PRE>
+<DL>
+<DD>Number of caches.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_regsize"><!-- --></A><H3>
+st_regsize</H3>
+<PRE>
+public int <B>st_regsize</B></PRE>
+<DL>
+<DD>Individual cache size.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_map"><!-- --></A><H3>
+st_map</H3>
+<PRE>
+public int <B>st_map</B></PRE>
+<DL>
+<DD>Requested pages mapped into the process' address space (there is no available information about whether or not this request caused disk I/O, although examining the application page fault rate may be helpful).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cache_hit"><!-- --></A><H3>
+st_cache_hit</H3>
+<PRE>
+public int <B>st_cache_hit</B></PRE>
+<DL>
+<DD>Requested pages found in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_cache_miss"><!-- --></A><H3>
+st_cache_miss</H3>
+<PRE>
+public int <B>st_cache_miss</B></PRE>
+<DL>
+<DD>Requested pages not found in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_create"><!-- --></A><H3>
+st_page_create</H3>
+<PRE>
+public int <B>st_page_create</B></PRE>
+<DL>
+<DD>Pages created in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_in"><!-- --></A><H3>
+st_page_in</H3>
+<PRE>
+public int <B>st_page_in</B></PRE>
+<DL>
+<DD>Pages read into the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_out"><!-- --></A><H3>
+st_page_out</H3>
+<PRE>
+public int <B>st_page_out</B></PRE>
+<DL>
+<DD>Pages written from the cache to the backing file.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_ro_evict"><!-- --></A><H3>
+st_ro_evict</H3>
+<PRE>
+public int <B>st_ro_evict</B></PRE>
+<DL>
+<DD>Clean pages forced from the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_rw_evict"><!-- --></A><H3>
+st_rw_evict</H3>
+<PRE>
+public int <B>st_rw_evict</B></PRE>
+<DL>
+<DD>Dirty pages forced from the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_trickle"><!-- --></A><H3>
+st_page_trickle</H3>
+<PRE>
+public int <B>st_page_trickle</B></PRE>
+<DL>
+<DD>Dirty pages written using the <A HREF="../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle</CODE></A> method.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_pages"><!-- --></A><H3>
+st_pages</H3>
+<PRE>
+public int <B>st_pages</B></PRE>
+<DL>
+<DD>Pages in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_clean"><!-- --></A><H3>
+st_page_clean</H3>
+<PRE>
+public int <B>st_page_clean</B></PRE>
+<DL>
+<DD>Clean pages currently in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_page_dirty"><!-- --></A><H3>
+st_page_dirty</H3>
+<PRE>
+public int <B>st_page_dirty</B></PRE>
+<DL>
+<DD>Dirty pages currently in the cache.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_buckets"><!-- --></A><H3>
+st_hash_buckets</H3>
+<PRE>
+public int <B>st_hash_buckets</B></PRE>
+<DL>
+<DD>Number of hash buckets in buffer hash table.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_searches"><!-- --></A><H3>
+st_hash_searches</H3>
+<PRE>
+public int <B>st_hash_searches</B></PRE>
+<DL>
+<DD>Total number of buffer hash table lookups.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_longest"><!-- --></A><H3>
+st_hash_longest</H3>
+<PRE>
+public int <B>st_hash_longest</B></PRE>
+<DL>
+<DD>The longest chain ever encountered in buffer hash table lookups.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_examined"><!-- --></A><H3>
+st_hash_examined</H3>
+<PRE>
+public int <B>st_hash_examined</B></PRE>
+<DL>
+<DD>Total number of hash elements traversed during hash table lookups.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_nowait"><!-- --></A><H3>
+st_hash_nowait</H3>
+<PRE>
+public int <B>st_hash_nowait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain a hash bucket lock without waiting.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_wait"><!-- --></A><H3>
+st_hash_wait</H3>
+<PRE>
+public int <B>st_hash_wait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before obtaining a hash bucket lock.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_hash_max_wait"><!-- --></A><H3>
+st_hash_max_wait</H3>
+<PRE>
+public int <B>st_hash_max_wait</B></PRE>
+<DL>
+<DD>The maximum number of times any hash bucket lock was waited for by a thread of control.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_nowait"><!-- --></A><H3>
+st_region_nowait</H3>
+<PRE>
+public int <B>st_region_nowait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain a region lock without waiting.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_wait"><!-- --></A><H3>
+st_region_wait</H3>
+<PRE>
+public int <B>st_region_wait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before obtaining a region lock.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_alloc"><!-- --></A><H3>
+st_alloc</H3>
+<PRE>
+public int <B>st_alloc</B></PRE>
+<DL>
+<DD>Number of page allocations.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_alloc_buckets"><!-- --></A><H3>
+st_alloc_buckets</H3>
+<PRE>
+public int <B>st_alloc_buckets</B></PRE>
+<DL>
+<DD>Number of hash buckets checked during allocation.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_alloc_max_buckets"><!-- --></A><H3>
+st_alloc_max_buckets</H3>
+<PRE>
+public int <B>st_alloc_max_buckets</B></PRE>
+<DL>
+<DD>Maximum number of hash buckets checked during an allocation.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_alloc_pages"><!-- --></A><H3>
+st_alloc_pages</H3>
+<PRE>
+public int <B>st_alloc_pages</B></PRE>
+<DL>
+<DD>Number of pages checked during allocation.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_alloc_max_pages"><!-- --></A><H3>
+st_alloc_max_pages</H3>
+<PRE>
+public int <B>st_alloc_max_pages</B></PRE>
+<DL>
+<DD>Maximum number of pages checked during an allocation.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbMpoolStat()"><!-- --></A><H3>
+DbMpoolStat</H3>
+<PRE>
+public <B>DbMpoolStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMpoolStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMultipleDataIterator.html b/db/docs/java/com/sleepycat/db/DbMultipleDataIterator.html
new file mode 100644
index 000000000..e8d6d7148
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMultipleDataIterator.html
@@ -0,0 +1,253 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMultipleDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMultipleDataIterator,DbMultipleDataIterator class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMultipleDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMultipleDataIterator</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--com.sleepycat.db.DbMultipleIterator
+ |
+ +--<B>com.sleepycat.db.DbMultipleDataIterator</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMultipleDataIterator</B><DT>extends com.sleepycat.db.DbMultipleIterator</DL>
+
+<P>
+The DbMultipleDataIterator class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag from a database belonging to any access method.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html#DbMultipleDataIterator(com.sleepycat.db.Dbt)">DbMultipleDataIterator</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html#next(com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleDataIterator.next method takes a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> that will be filled in with a reference to a buffer, a size, and an offset that together yield the next data item in the original bulk retrieval buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbMultipleDataIterator(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+DbMultipleDataIterator</H3>
+<PRE>
+public <B>DbMultipleDataIterator</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</PRE>
+<DL>
+<DD>The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>dbt</CODE> - a data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</PRE>
+<DL>
+<DD>The DbMultipleDataIterator.next method takes a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> that will be filled in with a reference to a buffer, a size, and an offset that together yield the next data item in the original bulk retrieval buffer.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> that will be filled in with a reference to a buffer, a size, and an offset that together yield the next data item in the original bulk retrieval buffer.
+<DT><B>Returns:</B><DD>The DbMultipleDataIterator.next method returns false if no more data are available, and true otherwise.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMpoolStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMultipleKeyDataIterator.html b/db/docs/java/com/sleepycat/db/DbMultipleKeyDataIterator.html
new file mode 100644
index 000000000..8a434ccaa
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMultipleKeyDataIterator.html
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMultipleKeyDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMultipleKeyDataIterator,DbMultipleKeyDataIterator class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMultipleKeyDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleKeyDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleKeyDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMultipleKeyDataIterator</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--com.sleepycat.db.DbMultipleIterator
+ |
+ +--<B>com.sleepycat.db.DbMultipleKeyDataIterator</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMultipleKeyDataIterator</B><DT>extends com.sleepycat.db.DbMultipleIterator</DL>
+
+<P>
+The DbMultipleKeyDataIterator class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Btree or Hash access methods.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html#DbMultipleKeyDataIterator(com.sleepycat.db.Dbt)">DbMultipleKeyDataIterator</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleKeyDataIterator.next method takes two <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbMultipleKeyDataIterator(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+DbMultipleKeyDataIterator</H3>
+<PRE>
+public <B>DbMultipleKeyDataIterator</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</PRE>
+<DL>
+<DD>The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>dbt</CODE> - a data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</PRE>
+<DL>
+<DD>The DbMultipleKeyDataIterator.next method takes two <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer. The DbMultipleKeyDataIterator.next method returns false if no more data are available, and true otherwise.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - The <b>key</b> parameter will be filled in with a reference to a buffer, a size, and an offset that yields the next key item in the original bulk retrieval buffer.<DD><CODE>data</CODE> - The <b>data</b> parameter will be filled in with a reference to a buffer, a size, and an offset that yields the next data item in the original bulk retrieval buffer.
+<DT><B>Returns:</B><DD>The DbMultipleKeyDataIterator.next method returns false if no more data are available, and true otherwise.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleKeyDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleKeyDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbMultipleRecnoDataIterator.html b/db/docs/java/com/sleepycat/db/DbMultipleRecnoDataIterator.html
new file mode 100644
index 000000000..f18957462
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbMultipleRecnoDataIterator.html
@@ -0,0 +1,255 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbMultipleRecnoDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbMultipleRecnoDataIterator,DbMultipleRecnoDataIterator class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbMultipleRecnoDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleRecnoDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleRecnoDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbMultipleRecnoDataIterator</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--com.sleepycat.db.DbMultipleIterator
+ |
+ +--<B>com.sleepycat.db.DbMultipleRecnoDataIterator</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbMultipleRecnoDataIterator</B><DT>extends com.sleepycat.db.DbMultipleIterator</DL>
+
+<P>
+This class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Recno or Queue access methods.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html#DbMultipleRecnoDataIterator(com.sleepycat.db.Dbt)">DbMultipleRecnoDataIterator</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleRecnoDataIterator.next method takes two <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbMultipleRecnoDataIterator(com.sleepycat.db.Dbt)"><!-- --></A><H3>
+DbMultipleRecnoDataIterator</H3>
+<PRE>
+public <B>DbMultipleRecnoDataIterator</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</PRE>
+<DL>
+<DD>The constructor takes the data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>dbt</CODE> - a data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+next</H3>
+<PRE>
+public boolean <B>next</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</PRE>
+<DL>
+<DD>The DbMultipleRecnoDataIterator.next method takes two <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer. The record number contained in the key item should be accessed using the <A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>Dbt.getRecordNumber</CODE></A> method.
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>key</CODE> - The <b>key</b> parameter will be filled in with a reference to a buffer, a size, and an offset that yields the next key item in the original bulk retrieval buffer. The record number contained in the key item should be accessed using the <A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>Dbt.getRecordNumber</CODE></A> method.<DD><CODE>data</CODE> - The <b>data</b> parameter will be filled in with a reference to a buffer, a size, and an offset that yields the next data item in the original bulk retrieval buffer.
+<DT><B>Returns:</B><DD>The DbMultipleRecnoDataIterator.next method returns false if no more data are available, and true otherwise.</p></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbMultipleRecnoDataIterator.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleRecnoDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbPanicHandler.html b/db/docs/java/com/sleepycat/db/DbPanicHandler.html
new file mode 100644
index 000000000..bee7662c6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbPanicHandler.html
@@ -0,0 +1,209 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbPanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbPanicHandler,DbPanicHandler interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbPanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbPanicHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHash.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepTransport.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPanicHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbPanicHandler</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbPanicHandler</B></DL>
+
+<P>
+An interface specifying a function to handle database environment panics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbPanicHandler.html#panic(com.sleepycat.db.DbEnv, com.sleepycat.db.DbException)">panic</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbPanicHandler interface is used by the DbEnv.setPanicHandler method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="panic(com.sleepycat.db.DbEnv, com.sleepycat.db.DbException)"><!-- --></A><H3>
+panic</H3>
+<PRE>
+public void <B>panic</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A>&nbsp;e)</PRE>
+<DL>
+<DD>The DbPanicHandler interface is used by the DbEnv.setPanicHandler method. This interface defines the application-specific function to be called when the database environment panics.</p> <p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbenv</CODE> - the enclosing database environment handle.<DD><CODE>e</CODE> - the DbException that would have been thrown to the calling method.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbPanicHandler.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbHash.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepTransport.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPanicHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbPreplist.html b/db/docs/java/com/sleepycat/db/DbPreplist.html
new file mode 100644
index 000000000..e91487790
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbPreplist.html
@@ -0,0 +1,242 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbPreplist (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbPreplist,DbPreplist class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbPreplist (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbPreplist.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbQueueStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPreplist.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbPreplist</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbPreplist</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbPreplist</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbPreplist object is used to encapsulate a single prepared, but not yet resolved, transaction.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbPreplist.html#gid">gid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The global transaction ID for the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbPreplist.html#txn">txn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The transaction handle for the transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="gid"><!-- --></A><H3>
+gid</H3>
+<PRE>
+public byte[] <B>gid</B></PRE>
+<DL>
+<DD>The global transaction ID for the transaction. The global transaction ID is the one specified when the transaction was prepared. The application is responsible for ensuring uniqueness among global transaction IDs.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="txn"><!-- --></A><H3>
+txn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxn.html">DbTxn</A> <B>txn</B></PRE>
+<DL>
+<DD>The transaction handle for the transaction.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbPreplist.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbQueueStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPreplist.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbQueueStat.html b/db/docs/java/com/sleepycat/db/DbQueueStat.html
new file mode 100644
index 000000000..e96622517
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbQueueStat.html
@@ -0,0 +1,537 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbQueueStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbQueueStat,DbQueueStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbQueueStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbQueueStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbQueueStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbQueueStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbQueueStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbQueueStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbQueueStat object is used to return Queue database statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_cur_recno">qs_cur_recno</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next available record number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_extentsize">qs_extentsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Underlying database extent size, in pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_first_recno">qs_first_recno</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First undeleted record in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_magic">qs_magic</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Magic number that identifies the file as a Queue file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_metaflags">qs_metaflags</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_ndata">qs_ndata</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of records in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_nkeys">qs_nkeys</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of records in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_pages">qs_pages</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of pages in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_pagesize">qs_pagesize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Underlying database page size, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_pgfree">qs_pgfree</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of bytes free in database pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_re_len">qs_re_len</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The length of the records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_re_pad">qs_re_pad</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The padding byte value for the records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#qs_version">qs_version</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The version of the Queue file type.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#DbQueueStat()">DbQueueStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbQueueStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="qs_magic"><!-- --></A><H3>
+qs_magic</H3>
+<PRE>
+public int <B>qs_magic</B></PRE>
+<DL>
+<DD>Magic number that identifies the file as a Queue file. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_version"><!-- --></A><H3>
+qs_version</H3>
+<PRE>
+public int <B>qs_version</B></PRE>
+<DL>
+<DD>The version of the Queue file type. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_metaflags"><!-- --></A><H3>
+qs_metaflags</H3>
+<PRE>
+public int <B>qs_metaflags</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_nkeys"><!-- --></A><H3>
+qs_nkeys</H3>
+<PRE>
+public int <B>qs_nkeys</B></PRE>
+<DL>
+<DD>The number of records in the database. If Db.DB_FAST_STAT was specified the count will be the last saved value unless it has never been calculated, in which case it will be 0. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_ndata"><!-- --></A><H3>
+qs_ndata</H3>
+<PRE>
+public int <B>qs_ndata</B></PRE>
+<DL>
+<DD>The number of records in the database. If Db.DB_FAST_STAT was specified the count will be the last saved value unless it has never been calculated, in which case it will be 0. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_pagesize"><!-- --></A><H3>
+qs_pagesize</H3>
+<PRE>
+public int <B>qs_pagesize</B></PRE>
+<DL>
+<DD>Underlying database page size, in bytes. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_extentsize"><!-- --></A><H3>
+qs_extentsize</H3>
+<PRE>
+public int <B>qs_extentsize</B></PRE>
+<DL>
+<DD>Underlying database extent size, in pages. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_pages"><!-- --></A><H3>
+qs_pages</H3>
+<PRE>
+public int <B>qs_pages</B></PRE>
+<DL>
+<DD>Number of pages in the database.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_re_len"><!-- --></A><H3>
+qs_re_len</H3>
+<PRE>
+public int <B>qs_re_len</B></PRE>
+<DL>
+<DD>The length of the records. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_re_pad"><!-- --></A><H3>
+qs_re_pad</H3>
+<PRE>
+public int <B>qs_re_pad</B></PRE>
+<DL>
+<DD>The padding byte value for the records. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_pgfree"><!-- --></A><H3>
+qs_pgfree</H3>
+<PRE>
+public int <B>qs_pgfree</B></PRE>
+<DL>
+<DD>Number of bytes free in database pages.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_first_recno"><!-- --></A><H3>
+qs_first_recno</H3>
+<PRE>
+public int <B>qs_first_recno</B></PRE>
+<DL>
+<DD>First undeleted record in the database. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="qs_cur_recno"><!-- --></A><H3>
+qs_cur_recno</H3>
+<PRE>
+public int <B>qs_cur_recno</B></PRE>
+<DL>
+<DD>Next available record number. Returned if Db.DB_FAST_STAT is set.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbQueueStat()"><!-- --></A><H3>
+DbQueueStat</H3>
+<PRE>
+public <B>DbQueueStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbQueueStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPreplist.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbQueueStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbRepStat.html b/db/docs/java/com/sleepycat/db/DbRepStat.html
new file mode 100644
index 000000000..68bc4987a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbRepStat.html
@@ -0,0 +1,1023 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbRepStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbRepStat,DbRepStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbRepStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRepStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbQueueStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbRepStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbRepStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbRepStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbRepStat object is used to return replication subsystem statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_dupmasters">st_dupmasters</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of duplicate master conditions detected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_cur_winner">st_election_cur_winner</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The election winner.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_gen">st_election_gen</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The election generation number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_lsn">st_election_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum LSN of election winner.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_nsites">st_election_nsites</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number sites expected to participate in elections.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_priority">st_election_priority</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The election priority.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_status">st_election_status</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current election phase (0 if no election is in progress).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_tiebreaker">st_election_tiebreaker</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The election tiebreaker value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_election_votes">st_election_votes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The votes received this election round.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_elections">st_elections</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of elections held.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_elections_won">st_elections_won</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of elections won.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_env_id">st_env_id</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current environment ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_env_priority">st_env_priority</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current environment priority.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_gen">st_gen</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current generation number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_in_recovery">st_in_recovery</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The site is currently in client recovery.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_duplicated">st_log_duplicated</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of duplicate log records received.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_queued">st_log_queued</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of log records currently queued.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_queued_max">st_log_queued_max</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of log records ever queued at once.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_queued_total">st_log_queued_total</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The total number of log records queued.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_records">st_log_records</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of log records received and appended to the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_log_requested">st_log_requested</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of log records missed and requested.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_master">st_master</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current master environment ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_master_changes">st_master_changes</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times the master has changed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_msgs_badgen">st_msgs_badgen</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of messages received with a bad generation number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_msgs_processed">st_msgs_processed</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of messages received and processed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_msgs_recover">st_msgs_recover</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of messages ignored due to pending recovery.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_msgs_send_failures">st_msgs_send_failures</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of failed message sends.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_msgs_sent">st_msgs_sent</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of messages sent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_newsites">st_newsites</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of new site messages received.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_next_lsn">st_next_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In replication environments configured as masters, the next LSN expected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_nsites">st_nsites</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of sites believed to be in the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_nthrottles">st_nthrottles</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transmission limited.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_outdated">st_outdated</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of outdated conditions detected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_status">st_status</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current replication mode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_txns_applied">st_txns_applied</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions applied.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#st_waiting_lsn">st_waiting_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The LSN of the first log record we have after missing log records being waited for, or 0 if no log records are currently missing.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#DbRepStat()">DbRepStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="st_status"><!-- --></A><H3>
+st_status</H3>
+<PRE>
+public int <B>st_status</B></PRE>
+<DL>
+<DD>The current replication mode. Set to <A HREF="../../../com/sleepycat/db/Db.html#DB_REP_MASTER"><CODE>Db.DB_REP_MASTER</CODE></A> if the environment is a replication master, <A HREF="../../../com/sleepycat/db/Db.html#DB_REP_CLIENT"><CODE>Db.DB_REP_CLIENT</CODE></A> if the environment is a replication client, <A HREF="../../../com/sleepycat/db/Db.html#DB_REP_LOGSONLY"><CODE>Db.DB_REP_LOGSONLY</CODE></A> if the environment is a log-files-only replica, or 0 if replication is not configured.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_next_lsn"><!-- --></A><H3>
+st_next_lsn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A> <B>st_next_lsn</B></PRE>
+<DL>
+<DD>In replication environments configured as masters, the next LSN expected. In replication environments configured as clients, the next LSN to be used.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_waiting_lsn"><!-- --></A><H3>
+st_waiting_lsn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A> <B>st_waiting_lsn</B></PRE>
+<DL>
+<DD>The LSN of the first log record we have after missing log records being waited for, or 0 if no log records are currently missing.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_dupmasters"><!-- --></A><H3>
+st_dupmasters</H3>
+<PRE>
+public int <B>st_dupmasters</B></PRE>
+<DL>
+<DD>The number of duplicate master conditions detected.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_env_id"><!-- --></A><H3>
+st_env_id</H3>
+<PRE>
+public int <B>st_env_id</B></PRE>
+<DL>
+<DD>The current environment ID.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_env_priority"><!-- --></A><H3>
+st_env_priority</H3>
+<PRE>
+public int <B>st_env_priority</B></PRE>
+<DL>
+<DD>The current environment priority.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_gen"><!-- --></A><H3>
+st_gen</H3>
+<PRE>
+public int <B>st_gen</B></PRE>
+<DL>
+<DD>The current generation number.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_in_recovery"><!-- --></A><H3>
+st_in_recovery</H3>
+<PRE>
+public int <B>st_in_recovery</B></PRE>
+<DL>
+<DD>The site is currently in client recovery. When this field is set, LSN values are not authoritative.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_duplicated"><!-- --></A><H3>
+st_log_duplicated</H3>
+<PRE>
+public int <B>st_log_duplicated</B></PRE>
+<DL>
+<DD>The number of duplicate log records received.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_queued"><!-- --></A><H3>
+st_log_queued</H3>
+<PRE>
+public int <B>st_log_queued</B></PRE>
+<DL>
+<DD>The number of log records currently queued.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_queued_max"><!-- --></A><H3>
+st_log_queued_max</H3>
+<PRE>
+public int <B>st_log_queued_max</B></PRE>
+<DL>
+<DD>The maximum number of log records ever queued at once.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_queued_total"><!-- --></A><H3>
+st_log_queued_total</H3>
+<PRE>
+public int <B>st_log_queued_total</B></PRE>
+<DL>
+<DD>The total number of log records queued.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_records"><!-- --></A><H3>
+st_log_records</H3>
+<PRE>
+public int <B>st_log_records</B></PRE>
+<DL>
+<DD>The number of log records received and appended to the log.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_log_requested"><!-- --></A><H3>
+st_log_requested</H3>
+<PRE>
+public int <B>st_log_requested</B></PRE>
+<DL>
+<DD>The number of log records missed and requested.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_master"><!-- --></A><H3>
+st_master</H3>
+<PRE>
+public int <B>st_master</B></PRE>
+<DL>
+<DD>The current master environment ID.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_master_changes"><!-- --></A><H3>
+st_master_changes</H3>
+<PRE>
+public int <B>st_master_changes</B></PRE>
+<DL>
+<DD>The number of times the master has changed.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_msgs_badgen"><!-- --></A><H3>
+st_msgs_badgen</H3>
+<PRE>
+public int <B>st_msgs_badgen</B></PRE>
+<DL>
+<DD>The number of messages received with a bad generation number.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_msgs_processed"><!-- --></A><H3>
+st_msgs_processed</H3>
+<PRE>
+public int <B>st_msgs_processed</B></PRE>
+<DL>
+<DD>The number of messages received and processed.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_msgs_recover"><!-- --></A><H3>
+st_msgs_recover</H3>
+<PRE>
+public int <B>st_msgs_recover</B></PRE>
+<DL>
+<DD>The number of messages ignored due to pending recovery.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_msgs_send_failures"><!-- --></A><H3>
+st_msgs_send_failures</H3>
+<PRE>
+public int <B>st_msgs_send_failures</B></PRE>
+<DL>
+<DD>The number of failed message sends.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_msgs_sent"><!-- --></A><H3>
+st_msgs_sent</H3>
+<PRE>
+public int <B>st_msgs_sent</B></PRE>
+<DL>
+<DD>The number of messages sent.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_newsites"><!-- --></A><H3>
+st_newsites</H3>
+<PRE>
+public int <B>st_newsites</B></PRE>
+<DL>
+<DD>The number of new site messages received.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nsites"><!-- --></A><H3>
+st_nsites</H3>
+<PRE>
+public int <B>st_nsites</B></PRE>
+<DL>
+<DD>The number of sites believed to be in the replication group.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nthrottles"><!-- --></A><H3>
+st_nthrottles</H3>
+<PRE>
+public int <B>st_nthrottles</B></PRE>
+<DL>
+<DD>Transmission limited. This indicates the number of times that data transmission was stopped to limit the amount of data sent in response to a single call to <A HREF="../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A>.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_outdated"><!-- --></A><H3>
+st_outdated</H3>
+<PRE>
+public int <B>st_outdated</B></PRE>
+<DL>
+<DD>The number of outdated conditions detected.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_txns_applied"><!-- --></A><H3>
+st_txns_applied</H3>
+<PRE>
+public int <B>st_txns_applied</B></PRE>
+<DL>
+<DD>The number of transactions applied.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_elections"><!-- --></A><H3>
+st_elections</H3>
+<PRE>
+public int <B>st_elections</B></PRE>
+<DL>
+<DD>The number of elections held.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_elections_won"><!-- --></A><H3>
+st_elections_won</H3>
+<PRE>
+public int <B>st_elections_won</B></PRE>
+<DL>
+<DD>The number of elections won.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_cur_winner"><!-- --></A><H3>
+st_election_cur_winner</H3>
+<PRE>
+public int <B>st_election_cur_winner</B></PRE>
+<DL>
+<DD>The election winner.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_gen"><!-- --></A><H3>
+st_election_gen</H3>
+<PRE>
+public int <B>st_election_gen</B></PRE>
+<DL>
+<DD>The election generation number.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_lsn"><!-- --></A><H3>
+st_election_lsn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A> <B>st_election_lsn</B></PRE>
+<DL>
+<DD>The maximum LSN of election winner.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_nsites"><!-- --></A><H3>
+st_election_nsites</H3>
+<PRE>
+public int <B>st_election_nsites</B></PRE>
+<DL>
+<DD>The number sites expected to participate in elections.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_priority"><!-- --></A><H3>
+st_election_priority</H3>
+<PRE>
+public int <B>st_election_priority</B></PRE>
+<DL>
+<DD>The election priority.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_status"><!-- --></A><H3>
+st_election_status</H3>
+<PRE>
+public int <B>st_election_status</B></PRE>
+<DL>
+<DD>The current election phase (0 if no election is in progress).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_tiebreaker"><!-- --></A><H3>
+st_election_tiebreaker</H3>
+<PRE>
+public int <B>st_election_tiebreaker</B></PRE>
+<DL>
+<DD>The election tiebreaker value.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_election_votes"><!-- --></A><H3>
+st_election_votes</H3>
+<PRE>
+public int <B>st_election_votes</B></PRE>
+<DL>
+<DD>The votes received this election round.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbRepStat()"><!-- --></A><H3>
+DbRepStat</H3>
+<PRE>
+public <B>DbRepStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRepStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbQueueStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbRepTransport.html b/db/docs/java/com/sleepycat/db/DbRepTransport.html
new file mode 100644
index 000000000..295895577
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbRepTransport.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbRepTransport (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbRepTransport,DbRepTransport interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbRepTransport (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRepTransport.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPanicHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepTransport.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbRepTransport</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbRepTransport</B></DL>
+
+<P>
+An interface specifying a replication transmit function, which sends information to other members of the replication group.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)"><!-- --></A><H3>
+send</H3>
+<PRE>
+public int <B>send</B>(<A HREF="../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbRepTransport interface is used by the DbEnv.setReplicationTransport method. This interface defines the application-specific function to be called during transaction abort and recovery.</p> It may sometimes be useful to pass application-specific data to the <b>send</b> function; see <a href="../../../../ref/env/faq.html">Environment FAQ</a> for a discussion on how to do this.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dbenv</CODE> - the enclosing database environment handle.<DD><CODE>control</CODE> - the first of the two data elements to be transmitted by the <b>send</b> function.<DD><CODE>rec</CODE> - the second of the two data elements to be transmitted by the <b>send</b> function.<DD><CODE>lsn</CODE> - If the type of message to be sent has an LSN associated with it, then the <b>lsn</b> parameter contains the LSN of the record being sent. This LSN can be used to determine that certain records have been processed successfully by clients.<DD><CODE>envid</CODE> - a positive integer identifier that specifies the replication environment to which the message should be sent (see <a href="../../../../ref/rep/id.html">Replication environment IDs</a> for more information). <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_EID_BROADCAST"><CODE>Db.DB_EID_BROADCAST</CODE></A><p>The special identifier <code>Db.DB_EID_BROADCAST</code> indicates that a message should be broadcast to every environment in the replication group. The application may use a true broadcast protocol or may send the message in sequence to each machine with which it is in communication. In both cases, the sending site should not be asked to process the message.</p> </li></ul><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_NOBUFFER"><CODE>Db.DB_REP_NOBUFFER</CODE></A><p>The record being sent should be transmitted immediately and not buffered or delayed. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_REP_PERMANENT"><CODE>Db.DB_REP_PERMANENT</CODE></A><p>The record being sent is critical for maintaining database integrity (for example, the message includes a transaction commit). The application should take appropriate action to enforce the reliability guarantees it has chosen, such as waiting for acknowledgement from one or more clients. </li></ul>
+<DT><B>Returns:</B><DD>The <b>send</b> function should not call back down into Berkeley DB. The <b>send</b> function must return 0 on success and non-zero on failure. If the <b>send</b> function fails, the message being sent is necessary to maintain database integrity, and the local log is not configured for synchronous flushing, the local log will be flushed; otherwise, any error from the <b>send</b> function will be ignored.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRepTransport.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbPanicHandler.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepTransport.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbRunRecoveryException.html b/db/docs/java/com/sleepycat/db/DbRunRecoveryException.html
new file mode 100644
index 000000000..ab88ee897
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbRunRecoveryException.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:11 EST 2003 -->
+<TITLE>
+DbRunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbRunRecoveryException,DbRunRecoveryException class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbRunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRunRecoveryException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMemoryException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRunRecoveryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_com.sleepycat.db.DbException">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbRunRecoveryException</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">java.lang.Throwable</A>
+ |
+ +--<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html">java.lang.Exception</A>
+ |
+ +--<A HREF="../../../com/sleepycat/db/DbException.html">com.sleepycat.db.DbException</A>
+ |
+ +--<B>com.sleepycat.db.DbRunRecoveryException</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>DbRunRecoveryException</B><DT>extends <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></DL>
+
+<P>
+This information describes the DbRunRecoveryException class and how it is used by the various Berkeley DB classes.</p> <p>Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory). When a fatal error occurs in Berkeley DB, methods will throw a DbRunRecoveryException, at which point all subsequent database calls will also fail in the same way. When this occurs, recovery should be performed.</p>
+<P>
+
+<P>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../serialized-form.html" TARGET="com.sleepycat.db.DbRunRecoveryException">Serialized Form</A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="methods_inherited_from_class_com.sleepycat.db.DbException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../com/sleepycat/db/DbException.html#get_errno()">get_errno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A>, <A HREF="../../../com/sleepycat/db/DbException.html#getErrno()">getErrno</A>, <A HREF="../../../com/sleepycat/db/DbException.html#toString()">toString</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#fillInStackTrace()">fillInStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getCause()">getCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getLocalizedMessage()">getLocalizedMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getMessage()">getMessage</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#getStackTrace()">getStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#initCause(java.lang.Throwable)">initCause</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace()">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintWriter)">printStackTrace</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html#setStackTrace(java.lang.StackTraceElement[])">setStackTrace</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbRunRecoveryException.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbMemoryException.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRunRecoveryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_com.sleepycat.db.DbException">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbSecondaryKeyCreate.html b/db/docs/java/com/sleepycat/db/DbSecondaryKeyCreate.html
new file mode 100644
index 000000000..230423ae4
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbSecondaryKeyCreate.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:09 EST 2003 -->
+<TITLE>
+DbSecondaryKeyCreate (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbSecondaryKeyCreate,DbSecondaryKeyCreate interface">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbSecondaryKeyCreate (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbSecondaryKeyCreate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepTransport.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbSecondaryKeyCreate.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Interface DbSecondaryKeyCreate</H2>
+<HR>
+<DL>
+<DT>public interface <B>DbSecondaryKeyCreate</B></DL>
+
+<P>
+An interface specifying a function which constructs secondary keys from primary key and data items.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><!-- --></A><H3>
+secondaryKeyCreate</H3>
+<PRE>
+public int <B>secondaryKeyCreate</B>(<A HREF="../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The secondaryKeyCreate interface is used by the Db.associate method. This interface defines the application-specific function to be called to construct secondary keys from primary key and data items.</p> </p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>secondary</CODE> - the database handle for the secondary.<DD><CODE>key</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> referencing the primary key.<DD><CODE>data</CODE> - a <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> referencing the primary data item.<DD><CODE>result</CODE> - a zeroed <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> in which the callback function should fill in <b>data</b> and <b>size</b> fields that describe the secondary key.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DONOTINDEX"><CODE>DB_DONOTINDEX</CODE></A><p>If any key/data pair in the primary yields a null secondary key and should be left out of the secondary index, the callback function may optionally return <code>Db.DB_DONOTINDEX</code>. Otherwise, the callback function should return 0 in case of success or an error outside of the Berkeley DB name space in case of failure; the error code will be returned from the Berkeley DB call that initiated the callback.</p> <p>If the callback function returns <code>Db.DB_DONOTINDEX</code> for any key/data pairs in the primary database, the secondary index will not contain any reference to those key/data pairs, and such operations as cursor iterations and range queries will reflect only the corresponding subset of the database. If this is not desirable, the application should ensure that the callback function is well-defined for all possible values and never returns <code>Db.DB_DONOTINDEX</code>.</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbSecondaryKeyCreate.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepTransport.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbSecondaryKeyCreate.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbTxn.html b/db/docs/java/com/sleepycat/db/DbTxn.html
new file mode 100644
index 000000000..5ef1c92d7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbTxn.html
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbTxn (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbTxn,DbTxn class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbTxn (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxn.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbTxn</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbTxn</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbTxn</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbTxn object is the handle for a transaction. Methods off the DbTxn handle are used to configure, abort and commit the transaction. DbTxn handles are provided to <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> methods in order to transactionally protect those database operations.</p> <p>DbTxn handles are not free-threaded; transactions handles may be used by multiple threads, but only serially, that is, the application must serialize access to the DbTxn handle. Once the <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A> or <A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit</CODE></A> methods are called, the handle may not be accessed again, regardless of the method's return. In addition, parent transactions may not issue any Berkeley DB operations while they have active child transactions (child transactions that have not yet been committed or aborted) except for <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A>, <A HREF="../../../com/sleepycat/db/DbTxn.html#abort()"><CODE>DbTxn.abort</CODE></A> and <A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)"><CODE>DbTxn.commit</CODE></A>.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#abort()">abort</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.abort method causes an abnormal termination of the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#commit(int)">commit</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.commit method ends the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#discard(int)">discard</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.discard method frees up all the per-process resources associated with the specified <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle, neither committing nor aborting the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#equals(java.lang.Object)">equals</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#hashCode()">hashCode</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#id()">id</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.id method returns the unique transaction id associated with the specified transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#prepare(byte[])">prepare</A></B>(byte[]&nbsp;gid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.prepare method initiates the beginning of a two-phase commit.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#set_timeout(long, int)">set_timeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>setTimeout(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)">setTimeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.setTimeout method sets timeout values for locks or transactions for the specified transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="abort()"><!-- --></A><H3>
+abort</H3>
+<PRE>
+public void <B>abort</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.abort method causes an abnormal termination of the transaction. The log is played backward, and any necessary undo operations are done through the <b>tx_recover</b> function specified to <A HREF="../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch</CODE></A>. Before DbTxn.abort returns, any locks held by the transaction will have been released.</p> <p>In the case of nested transactions, aborting a parent transaction causes all children (unresolved or not) of the parent transaction to be aborted.</p> <p>All cursors opened within the transaction must be closed before the transaction is aborted.</p> <p>After DbTxn.abort has been called, regardless of its return, the <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle may not be accessed again.</p>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="commit(int)"><!-- --></A><H3>
+commit</H3>
+<PRE>
+public void <B>commit</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.commit method ends the transaction.</p> <p>In the case of nested transactions, if the transaction is a parent transaction, committing the parent transaction causes all unresolved children of the parent to be committed. In the case of nested transactions, if the transaction is a child transaction, its locks are not released, but are acquired by its parent. Although the commit of the child transaction will succeed, the actual resolution of the child transaction is postponed until the parent transaction is committed or aborted; that is, if its parent transaction commits, it will be committed; and if its parent transaction aborts, it will be aborted.</p> <p>All cursors opened within the transaction must be closed before the transaction is committed.</p> <p>After DbTxn.commit has been called, regardless of its return, the <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle may not be accessed again. If DbTxn.commit encounters an error, the transaction and all child transactions of the transaction are aborted.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><CODE>Db.DB_TXN_NOSYNC</CODE></A><p>Do not synchronously flush the log. This means the transaction will exhibit the ACI (atomicity, consistency, and isolation) properties, but not D (durability); that is, database integrity will be maintained, but it is possible that this transaction may be undone during recovery. <p>This behavior may be set for a Berkeley DB environment using the <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags</CODE></A> method or for a single transaction using the <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A> method. Any value specified to this method overrides both of those settings.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_SYNC"><CODE>Db.DB_TXN_SYNC</CODE></A><p>Synchronously flush the log. This means the transaction will exhibit all of the ACID (atomicity, consistency, isolation, and durability) properties. <p>This behavior is the default for Berkeley DB environments unless the <A HREF="../../../com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><CODE><code>Db.DB_TXN_NOSYNC</code></CODE></A> flag was specified to the <A HREF="../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags</CODE></A> method. This behavior may also be set for a single transaction using the <A HREF="../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin</CODE></A> method. Any value specified to this method overrides both of those settings.</p> </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="discard(int)"><!-- --></A><H3>
+discard</H3>
+<PRE>
+public void <B>discard</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.discard method frees up all the per-process resources associated with the specified <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle, neither committing nor aborting the transaction. This call may be used only after calls to <A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover</CODE></A> when there are multiple global transaction managers recovering transactions in a single Berkeley DB environment. Any transactions returned by <A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover</CODE></A> that are not handled by the current global transaction manager should be discarded using DbTxn.discard.</p> After DbTxn.discard has been called, regardless of its return, the <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle may not be accessed again.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbTxn.discard method will fail and throw a IllegalArgumentException exception if the transaction handle does not refer to a transaction that was recovered into a prepared but not yet completed state; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="equals(java.lang.Object)"><!-- --></A><H3>
+equals</H3>
+<PRE>
+public boolean <B>equals</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;obj)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="hashCode()"><!-- --></A><H3>
+hashCode</H3>
+<PRE>
+public int <B>hashCode</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="id()"><!-- --></A><H3>
+id</H3>
+<PRE>
+public int <B>id</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.id method returns the unique transaction id associated with the specified transaction. Locking calls made on behalf of this transaction should use the value returned from DbTxn.id as the locker parameter to the <A HREF="../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> or <A HREF="../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> calls.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The DbTxn.id method returns the unique transaction id associated with the specified transaction.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="prepare(byte[])"><!-- --></A><H3>
+prepare</H3>
+<PRE>
+public void <B>prepare</B>(byte[]&nbsp;gid)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.prepare method initiates the beginning of a two-phase commit.</p> <p>In a distributed transaction environment, Berkeley DB can be used as a local transaction manager. In this case, the distributed transaction manager must send <i>prepare</i> messages to each local manager. The local manager must then issue a DbTxn.prepare and await its successful return before responding to the distributed transaction manager. Only after the distributed transaction manager receives successful responses from all of its <i>prepare</i> messages should it issue any <i>commit</i> messages.</p> <p>In the case of nested transactions, preparing the parent causes all unresolved children of the parent transaction to be committed. Child transactions should never be explicitly prepared. Their fate will be resolved along with their parent's during global recovery.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>gid</CODE> - specifies the global transaction ID by which this transaction will be known. This global transaction ID will be returned in calls to <A HREF="../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover</CODE></A>, telling the application which global transactions must be resolved. <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_XIDDATASIZE"><CODE>Db.DB_XIDDATASIZE</CODE></A><p>must be sized at least <code>Db.DB_XIDDATASIZE</code> (currently 128) bytes; only the first <code>Db.DB_XIDDATASIZE</code> bytes are used. </li></ul>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - Signals that an exception of some sort has occurred.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_timeout(long, int)"><!-- --></A><H3>
+set_timeout</H3>
+<PRE>
+public void <B>set_timeout</B>(long&nbsp;timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>setTimeout(long,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTimeout(long, int)"><!-- --></A><H3>
+setTimeout</H3>
+<PRE>
+public void <B>setTimeout</B>(long&nbsp;timeout,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The DbTxn.setTimeout method sets timeout values for locks or transactions for the specified transaction.</p> <p>Timeouts are checked whenever a thread of control blocks on a lock or when deadlock detection is performed. (In the case of Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly through the Lock subsystem interfaces. In the case of Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of a transaction. In either case, it may be a lock requested by the database access methods underlying the application.) As timeouts are only checked when the lock request first blocks or when deadlock detection is performed, the accuracy of the timeout depends on how often deadlock detection is performed.</p> <p>Timeout values may be specified for the database environment as a whole. See <A HREF="../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout</CODE></A> and for more information.</p> <p>The DbTxn.setTimeout method configures operations performed on the underlying transaction, not only operations performed using the specified <A HREF="../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle.</p> <p>The DbTxn.setTimeout method may be called at any time during the life of the application.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_LOCK_TIMEOUT"><CODE>Db.DB_SET_LOCK_TIMEOUT</CODE></A><p>Set the timeout value for locks in this transaction. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_TXN_TIMEOUT"><CODE>Db.DB_SET_TXN_TIMEOUT</CODE></A><p>Set the timeout value for this transaction. </li></ul><DD><CODE>timeout</CODE> - specified as an unsigned 32-bit number of microseconds, limiting the maximum timeout to roughly 71 minutes. A value of 0 disables timeouts for the transaction.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The DbTxn.setTimeout method will fail and throw a IllegalArgumentException exception if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxn.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/Dbt.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbTxnStat.Active.html b/db/docs/java/com/sleepycat/db/DbTxnStat.Active.html
new file mode 100644
index 000000000..b93e3b5e3
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbTxnStat.Active.html
@@ -0,0 +1,371 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbTxnStat.Active (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbTxnStat.Active,DbTxnStat.Active class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbTxnStat.Active (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxnStat.Active.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.Active.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbTxnStat.Active</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbTxnStat.Active</B>
+</PRE>
+<DL>
+<DT><B>Enclosing class:</B><DD><A HREF="../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public static class <B>DbTxnStat.Active</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#lsn">lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current log sequence number when the transaction was begun.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#parentid">parentid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The transaction ID of the parent transaction (or 0, if no parent).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#txnid">txnid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The transaction ID of the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#xa_status">xa_status</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the transaction is an XA transaction, the status of the transaction, otherwise 0.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#xid">xid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If the transaction is an XA transaction, the transaction's XA ID.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#DbTxnStat.Active()">DbTxnStat.Active</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="txnid"><!-- --></A><H3>
+txnid</H3>
+<PRE>
+public int <B>txnid</B></PRE>
+<DL>
+<DD>The transaction ID of the transaction.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="parentid"><!-- --></A><H3>
+parentid</H3>
+<PRE>
+public int <B>parentid</B></PRE>
+<DL>
+<DD>The transaction ID of the parent transaction (or 0, if no parent).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="lsn"><!-- --></A><H3>
+lsn</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A> <B>lsn</B></PRE>
+<DL>
+<DD>The current log sequence number when the transaction was begun.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="xa_status"><!-- --></A><H3>
+xa_status</H3>
+<PRE>
+public int <B>xa_status</B></PRE>
+<DL>
+<DD>If the transaction is an XA transaction, the status of the transaction, otherwise 0.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="xid"><!-- --></A><H3>
+xid</H3>
+<PRE>
+public byte[] <B>xid</B></PRE>
+<DL>
+<DD>If the transaction is an XA transaction, the transaction's XA ID.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbTxnStat.Active()"><!-- --></A><H3>
+DbTxnStat.Active</H3>
+<PRE>
+public <B>DbTxnStat.Active</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxnStat.Active.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.Active.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/DbTxnStat.html b/db/docs/java/com/sleepycat/db/DbTxnStat.html
new file mode 100644
index 000000000..e13ada98b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/DbTxnStat.html
@@ -0,0 +1,573 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+DbTxnStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.DbTxnStat,DbTxnStat class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="DbTxnStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxnStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class DbTxnStat</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.DbTxnStat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>DbTxnStat</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The DbTxnStat object is used to return transaction subsystem statistics.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+<A NAME="nested_class_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Nested Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_last_ckp">st_last_ckp</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The LSN of the last checkpoint.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_last_txnid">st_last_txnid</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The last transaction ID allocated.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_maxnactive">st_maxnactive</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of active transactions at any one time.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_maxtxns">st_maxtxns</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum number of active transactions configured.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_naborts">st_naborts</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that have aborted.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_nactive">st_nactive</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that are currently active.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_nbegins">st_nbegins</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that have begun.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_ncommits">st_ncommits</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that have committed.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_nrestores">st_nrestores</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of transactions that have been restored.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_region_nowait">st_region_nowait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was able to obtain the region lock without waiting.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_region_wait">st_region_wait</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of times that a thread of control was forced to wait before obtaining the region lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_regsize">st_regsize</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The size of the region.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_time_ckp">st_time_ckp</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The time the last completed checkpoint finished (as the number of seconds since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> function).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#st_txnarray">st_txnarray</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#DbTxnStat()">DbTxnStat</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/DbTxnStat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Provide a string representation of all the fields contained
+ within this class.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="st_last_ckp"><!-- --></A><H3>
+st_last_ckp</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbLsn.html">DbLsn</A> <B>st_last_ckp</B></PRE>
+<DL>
+<DD>The LSN of the last checkpoint.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_time_ckp"><!-- --></A><H3>
+st_time_ckp</H3>
+<PRE>
+public long <B>st_time_ckp</B></PRE>
+<DL>
+<DD>The time the last completed checkpoint finished (as the number of seconds since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> function).
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_last_txnid"><!-- --></A><H3>
+st_last_txnid</H3>
+<PRE>
+public int <B>st_last_txnid</B></PRE>
+<DL>
+<DD>The last transaction ID allocated.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxtxns"><!-- --></A><H3>
+st_maxtxns</H3>
+<PRE>
+public int <B>st_maxtxns</B></PRE>
+<DL>
+<DD>The maximum number of active transactions configured.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_naborts"><!-- --></A><H3>
+st_naborts</H3>
+<PRE>
+public int <B>st_naborts</B></PRE>
+<DL>
+<DD>The number of transactions that have aborted.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nbegins"><!-- --></A><H3>
+st_nbegins</H3>
+<PRE>
+public int <B>st_nbegins</B></PRE>
+<DL>
+<DD>The number of transactions that have begun.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_ncommits"><!-- --></A><H3>
+st_ncommits</H3>
+<PRE>
+public int <B>st_ncommits</B></PRE>
+<DL>
+<DD>The number of transactions that have committed.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nactive"><!-- --></A><H3>
+st_nactive</H3>
+<PRE>
+public int <B>st_nactive</B></PRE>
+<DL>
+<DD>The number of transactions that are currently active.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_nrestores"><!-- --></A><H3>
+st_nrestores</H3>
+<PRE>
+public int <B>st_nrestores</B></PRE>
+<DL>
+<DD>The number of transactions that have been restored.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_maxnactive"><!-- --></A><H3>
+st_maxnactive</H3>
+<PRE>
+public int <B>st_maxnactive</B></PRE>
+<DL>
+<DD>The maximum number of active transactions at any one time.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_txnarray"><!-- --></A><H3>
+st_txnarray</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>[] <B>st_txnarray</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_wait"><!-- --></A><H3>
+st_region_wait</H3>
+<PRE>
+public int <B>st_region_wait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_region_nowait"><!-- --></A><H3>
+st_region_nowait</H3>
+<PRE>
+public int <B>st_region_nowait</B></PRE>
+<DL>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<A NAME="st_regsize"><!-- --></A><H3>
+st_regsize</H3>
+<PRE>
+public int <B>st_regsize</B></PRE>
+<DL>
+<DD>The size of the region.
+</ul>
+<P>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="DbTxnStat()"><!-- --></A><H3>
+DbTxnStat</H3>
+<PRE>
+public <B>DbTxnStat</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>toString</B>()</PRE>
+<DL>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<P>
+<DD><DL>
+<DT><B>Overrides:</B><DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A></CODE> in class <CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>The string representation.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/DbTxnStat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Dbc.html b/db/docs/java/com/sleepycat/db/Dbc.html
new file mode 100644
index 000000000..5faba4700
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/Dbc.html
@@ -0,0 +1,459 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+Dbc (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.Dbc,Dbc class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Dbc (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Dbc.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class Dbc</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.Dbc</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>Dbc</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+The Dbc object is the handle for a cursor into a Berkeley DB database. The handle is not free-threaded. Cursor handles may be used by multiple threads, but only serially, that is, the application must serialize access to the Dbc handle.</p> <p>If the cursor is to be used to perform operations on behalf of a transaction, the cursor must be opened and closed within the context of that single transaction. Once <A HREF="../../../com/sleepycat/db/Dbc.html#close()"><CODE>Dbc.close</CODE></A> has been called, the handle may not be accessed again, regardless of the method's return.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.close method discards the cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#count(int)">count</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.count method returns a count of the number of data items for the key to which the cursor refers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#del(int)">del</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>delete(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)">delete</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.delete method deletes the key/data pair to which the cursor refers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#dup(int)">dup</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.dup method creates a new cursor that uses the same transaction and locker ID as the original cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.put method stores key/data pairs into the database.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="close()"><!-- --></A><H3>
+close</H3>
+<PRE>
+public void <B>close</B>()
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.close method discards the cursor.</p> <p>It is possible for the Dbc.close method to return <a href="../../../../ref/program/errorret.html#DB_LOCK_DEADLOCK">Db.DB_LOCK_DEADLOCK</a>, signaling that any enclosing transaction should be aborted. If the application is already intending to abort the transaction, this error should be ignored, and the application should proceed.</p> <p>After Dbc.close has been called, regardless of its return, the cursor handle may not be used again.</p>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Dbc.close method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Dbc.close method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.close method will fail and throw a IllegalArgumentException exception if the cursor is already closed; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+pget</H3>
+<PRE>
+public int <B>pget</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(Dbt,Dbt,Dbt,int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="count(int)"><!-- --></A><H3>
+count</H3>
+<PRE>
+public int <B>count</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.count method returns a count of the number of data items for the key to which the cursor refers.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Returns:</B><DD>The Dbc.count method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.count method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.count method will fail and throw a IllegalArgumentException exception if the cursor has not been initialized; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="del(int)"><!-- --></A><H3>
+del</H3>
+<PRE>
+public int <B>del</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>delete(int)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="delete(int)"><!-- --></A><H3>
+delete</H3>
+<PRE>
+public int <B>delete</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.delete method deletes the key/data pair to which the cursor refers.</p> <p>When called on a cursor opened on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the <A HREF="../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>Db.delete</CODE></A> method deletes the key/data pair from the primary database and all secondary indices.</p> <p>The cursor position is unchanged after a delete, and subsequent calls to cursor functions expecting the cursor to refer to an existing key will fail.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - currently unused, and must be set to 0.
+<DT><B>Returns:</B><DD><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Dbc.delete method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if the element has already been deleted. </li></ul>Unless otherwise specified, the Dbc.delete method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.delete method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: An attempt was made to modify a read-only database. <li>Write attempted on read-only cursor when the <A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_CDB"><CODE>Db.DB_INIT_CDB</CODE></A> flag was specified to <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A>.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Dbc.delete method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Dbc.delete method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.delete method will fail and throw a IllegalArgumentException exception if the cursor has not been initialized; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="dup(int)"><!-- --></A><H3>
+dup</H3>
+<PRE>
+public <A HREF="../../../com/sleepycat/db/Dbc.html">Dbc</A> <B>dup</B>(int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.dup method creates a new cursor that uses the same transaction and locker ID as the original cursor. This is useful when an application is using locking and requires two or more cursors in the same thread of control.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - must be set to 0 or by bitwise inclusively <b>OR</b>'ing together one or more of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_POSITION"><CODE>Db.DB_POSITION</CODE></A><p>The newly created cursor is initialized to refer to the same position in the database as the original cursor and hold the same locks. If the <code>Db.DB_POSITION</code> flag is not specified, then the created cursor is uninitialized and will behave like a cursor newly created using <A HREF="../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)"><CODE>Db.cursor</CODE></A>. </li></ul>
+<DT><B>Returns:</B><DD>The Dbc.dup method throws an exception that encapsulates a non-zero error value on failure. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.dup method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.dup method will fail and throw a IllegalArgumentException exception if the cursor has not been initialized; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.get method retrieves key/data pairs from the database. The byte array and length of the key are returned in the object to which <b>key</b> refers (except for the case of the Db.DB_SET flag, in which the <b>key</b> object is unchanged), and the byte array and length of the data are returned in the object to which <b>data</b> refers.</p> <p>When called on a cursor opened on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the Dbc.get and Dbc.get methods return the key from the secondary index and the data item from the primary database. In addition, the second method signature returns the key from the primary database. In databases that are not secondary indices, the second method signature will always fail.</p> <p>Modifications to the database during a sequential scan will be reflected in the scan; that is, records inserted behind a cursor will not be returned while records inserted in front of a cursor will be returned.</p> <p>In Queue and Recno databases, missing entries (that is, entries that were never explicitly created or that were created and then deleted) will be skipped during a sequential scan.</p> If Dbc.get fails for any reason, the state of the cursor will be unchanged.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CURRENT"><CODE>Db.DB_CURRENT</CODE></A><p>Return the key/data pair to which the cursor refers. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FIRST"><CODE>Db.DB_FIRST</CODE></A><p>The cursor is set to refer to the first key/data pair of the database, and that pair is returned. If the first key has duplicate values, the first data item in the set of duplicates is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_FIRST</code> flag will ignore any keys that exist but were never explicitly created by the application, or were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH"><CODE>Db.DB_GET_BOTH</CODE></A><p>The <code>Db.DB_GET_BOTH</code> flag is identical to the <code>Db.DB_SET</code> flag, except that both the key and the data parameters must be matched by the key and data item in the database. <p>When used with the second method signature version of this method on a secondary index handle, both the secondary and primary keys must be matched by the secondary and primary key item in the database. It is an error to use the <code>Db.DB_GET_BOTH</code> flag with the first method signature version of this method and a cursor that has been opened on a secondary index handle.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH_RANGE"><CODE>Db.DB_GET_BOTH_RANGE</CODE></A><p>The <code>Db.DB_GET_BOTH_RANGE</code> flag is identical to the <code>Db.DB_GET_BOTH</code> flag, except that, in the case of any database supporting sorted duplicate sets, the returned key/data pair is the smallest data item greater than or equal to the specified data item (as determined by the comparison function), permitting partial matches and range searches in duplicate data sets. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_RECNO"><CODE>Db.DB_GET_RECNO</CODE></A><p>Return the record number associated with the cursor. The record number will be returned in <b>data</b>, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. ignored. <p>For <code>Db.DB_GET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag.</p> <p>When called on a cursor opened on a database that has been made into a secondary index, the Dbc.get method returns the record number of the primary database in <b>data</b>. In addition, the second method signature returns the record number of the secondary index in <b>pkey</b>. If either underlying database is not of type Btree or is not created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag, the out-of-band record number of 0 is returned.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_JOIN_ITEM"><CODE>Db.DB_JOIN_ITEM</CODE></A><p>Do not use the data value found in all of the cursors as a lookup key for the primary database, but simply return it in the key parameter instead. The data parameter is left unchanged. <p>For <code>Db.DB_JOIN_ITEM</code> to be specified, the underlying cursor must have been returned from the <A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>Db.join</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LAST"><CODE>Db.DB_LAST</CODE></A><p>The cursor is set to refer to the last key/data pair of the database, and that pair is returned. If the last key has duplicate values, the last data item in the set of duplicates is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_LAST</code> flag will ignore any keys that exist but were never explicitly created by the application, or were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT"><CODE>Db.DB_NEXT</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_NEXT</code> is identical to <code>Db.DB_FIRST</code>. Otherwise, the cursor is moved to the next key/data pair of the database, and that pair is returned. In the presence of duplicate key values, the value of the key may not change. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_NEXT</code> flag will skip any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_DUP"><CODE>Db.DB_NEXT_DUP</CODE></A><p>If the next key/data pair of the database is a duplicate data record for the current key/data pair, the cursor is moved to the next key/data pair of the database, and that pair is returned. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_NODUP"><CODE>Db.DB_NEXT_NODUP</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_NEXT_NODUP</code> is identical to <code>Db.DB_FIRST</code>. Otherwise, the cursor is moved to the next non-duplicate key of the database, and that key/data pair is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_NEXT_NODUP</code> flag will ignore any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV"><CODE>Db.DB_PREV</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_PREV</code> is identical to <code>Db.DB_LAST</code>. Otherwise, the cursor is moved to the previous key/data pair of the database, and that pair is returned. In the presence of duplicate key values, the value of the key may not change. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_PREV</code> flag will skip any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV_NODUP"><CODE>Db.DB_PREV_NODUP</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_PREV_NODUP</code> is identical to <code>Db.DB_LAST</code>. Otherwise, the cursor is moved to the previous non-duplicate key of the database, and that key/data pair is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_PREV_NODUP</code> flag will ignore any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET"><CODE>Db.DB_SET</CODE></A><p>Move the cursor to the specified key/data pair of the database, and return the datum associated with the given key. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RANGE"><CODE>Db.DB_SET_RANGE</CODE></A><p>The <code>Db.DB_SET_RANGE</code> flag is identical to the <code>Db.DB_SET</code> flag, except that in the case of the Btree access method, the key is returned as well as the data item and the returned key/data pair is the smallest key greater than or equal to the specified key (as determined by the Btree comparison function), permitting partial key matches and range searches. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO"><CODE>Db.DB_SET_RECNO</CODE></A><p>Move the cursor to the specific numbered record of the database, and return the associated key/data pair. The <b>data</b> field of the specified <b>key</b> must be a byte array containing a record number, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. This determines the record to be retrieved. <p>For <code>Db.DB_SET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag.</p> </li></ul>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>Read modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A><p>Return multiple data items in the <b>data</b> parameter. <p>In the case of Btree or Hash databases, duplicate data items for the current key, starting at the current cursor position, are entered into the buffer. Subsequent calls with both the <code>Db.DB_NEXT_DUP</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional duplicate data items associated with the current key or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional duplicate data items to return. Subsequent calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional duplicate data items associated with the current key or if there are no additional duplicate data items will return the next key and its data items or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional keys in the database.</p> <p>In the case of Queue or Recno databases, data items starting at the current cursor position are entered into the buffer. The record number of the first record will be returned in the <b>key</b> parameter. The record number of each subsequent returned record must be calculated from this value. Subsequent calls with the <code>Db.DB_MULTIPLE</code> flag specified will return additional data items or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional data items to return.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The multiple data items can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><CODE>DbMultipleDataIterator</CODE></A> class.</p> <p>The <code>Db.DB_MULTIPLE</code> flag may only be used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>, <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>, <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>, <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>, <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A><p>Return multiple key and data pairs in the <b>data</b> parameter. <p>Key and data pairs, starting at the current cursor position, are entered into the buffer. Subsequent calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional key and data pairs or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional key and data items to return.</p> <p>In the case of Btree or Hash databases, the multiple key and data pairs can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><CODE>DbMultipleKeyDataIterator</CODE></A> class.</p> <p>In the case of Queue or Recno databases, the multiple record number and data pairs can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><CODE>DbMultipleRecnoDataIterator</CODE></A> class.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The <code>Db.DB_MULTIPLE_KEY</code> flag may only be used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>, <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>, <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>, <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>, <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE_KEY</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE>Db.DB_RMW</CODE></A><p>Acquire write locks instead of read locks when doing the retrieval. Setting this flag can eliminate deadlock during a read-modify-write cycle by acquiring the write lock during the read part of the cycle so that another thread of control acquiring a read lock for the same item, in its own read-modify-write cycle, will not result in deadlock. </li></ul><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.
+<DT><B>Returns:</B><DD>Unless otherwise specified, the Dbc.get method throws an exception that encapsulates a non-zero error value on failure. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_CURRENT</code> is set and the cursor key/data pair was deleted. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code> is set and the database is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code> is set and the database is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code> is set and the cursor is already on the last record in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_DUP</code> is set and the next key/data pair of the database is not a duplicate data record for the current key/data pair. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_NODUP</code> is set and no non-duplicate key/data pairs occur after the cursor position in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code> is set and the cursor is already on the first record in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV_NODUP</code> is set and no non-duplicate key/data pairs occur before the cursor position in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_SET</code> is set and no matching keys are found. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_SET</code> is set and the database is a Queue or Recno database, and the specified key exists, but was never explicitly created by the application or was later deleted. </li></ul>In the presence of duplicate key values, Dbc.get will return the first data item for the given key. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.get method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.get method will fail and throw a IllegalArgumentException exception if the Db.DB_CURRENT or Db.DB_NEXT_DUP flags were specified and the cursor has not been initialized; the second method signature was called with a cursor that does not refer to a secondary index; or if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the requested item could not be returned due to insufficient memory, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+get</H3>
+<PRE>
+public int <B>get</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.get method retrieves key/data pairs from the database. The byte array and length of the key are returned in the object to which <b>key</b> refers (except for the case of the Db.DB_SET flag, in which the <b>key</b> object is unchanged), and the byte array and length of the data are returned in the object to which <b>data</b> refers.</p> <p>When called on a cursor opened on a database that has been made into a secondary index using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method, the Dbc.get and Dbc.get methods return the key from the secondary index and the data item from the primary database. In addition, the second method signature returns the key from the primary database. In databases that are not secondary indices, the second method signature will always fail.</p> <p>Modifications to the database during a sequential scan will be reflected in the scan; that is, records inserted behind a cursor will not be returned while records inserted in front of a cursor will be returned.</p> <p>In Queue and Recno databases, missing entries (that is, entries that were never explicitly created or that were created and then deleted) will be skipped during a sequential scan.</p> If Dbc.get fails for any reason, the state of the cursor will be unchanged.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CURRENT"><CODE>Db.DB_CURRENT</CODE></A><p>Return the key/data pair to which the cursor refers. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_FIRST"><CODE>Db.DB_FIRST</CODE></A><p>The cursor is set to refer to the first key/data pair of the database, and that pair is returned. If the first key has duplicate values, the first data item in the set of duplicates is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_FIRST</code> flag will ignore any keys that exist but were never explicitly created by the application, or were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH"><CODE>Db.DB_GET_BOTH</CODE></A><p>The <code>Db.DB_GET_BOTH</code> flag is identical to the <code>Db.DB_SET</code> flag, except that both the key and the data parameters must be matched by the key and data item in the database. <p>When used with the second method signature version of this method on a secondary index handle, both the secondary and primary keys must be matched by the secondary and primary key item in the database. It is an error to use the <code>Db.DB_GET_BOTH</code> flag with the first method signature version of this method and a cursor that has been opened on a secondary index handle.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_BOTH_RANGE"><CODE>Db.DB_GET_BOTH_RANGE</CODE></A><p>The <code>Db.DB_GET_BOTH_RANGE</code> flag is identical to the <code>Db.DB_GET_BOTH</code> flag, except that, in the case of any database supporting sorted duplicate sets, the returned key/data pair is the smallest data item greater than or equal to the specified data item (as determined by the comparison function), permitting partial matches and range searches in duplicate data sets. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_GET_RECNO"><CODE>Db.DB_GET_RECNO</CODE></A><p>Return the record number associated with the cursor. The record number will be returned in <b>data</b>, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. ignored. <p>For <code>Db.DB_GET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag.</p> <p>When called on a cursor opened on a database that has been made into a secondary index, the Dbc.get method returns the record number of the primary database in <b>data</b>. In addition, the second method signature returns the record number of the secondary index in <b>pkey</b>. If either underlying database is not of type Btree or is not created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag, the out-of-band record number of 0 is returned.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_JOIN_ITEM"><CODE>Db.DB_JOIN_ITEM</CODE></A><p>Do not use the data value found in all of the cursors as a lookup key for the primary database, but simply return it in the key parameter instead. The data parameter is left unchanged. <p>For <code>Db.DB_JOIN_ITEM</code> to be specified, the underlying cursor must have been returned from the <A HREF="../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><CODE>Db.join</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_LAST"><CODE>Db.DB_LAST</CODE></A><p>The cursor is set to refer to the last key/data pair of the database, and that pair is returned. If the last key has duplicate values, the last data item in the set of duplicates is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_LAST</code> flag will ignore any keys that exist but were never explicitly created by the application, or were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT"><CODE>Db.DB_NEXT</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_NEXT</code> is identical to <code>Db.DB_FIRST</code>. Otherwise, the cursor is moved to the next key/data pair of the database, and that pair is returned. In the presence of duplicate key values, the value of the key may not change. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_NEXT</code> flag will skip any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_DUP"><CODE>Db.DB_NEXT_DUP</CODE></A><p>If the next key/data pair of the database is a duplicate data record for the current key/data pair, the cursor is moved to the next key/data pair of the database, and that pair is returned. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NEXT_NODUP"><CODE>Db.DB_NEXT_NODUP</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_NEXT_NODUP</code> is identical to <code>Db.DB_FIRST</code>. Otherwise, the cursor is moved to the next non-duplicate key of the database, and that key/data pair is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_NEXT_NODUP</code> flag will ignore any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV"><CODE>Db.DB_PREV</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_PREV</code> is identical to <code>Db.DB_LAST</code>. Otherwise, the cursor is moved to the previous key/data pair of the database, and that pair is returned. In the presence of duplicate key values, the value of the key may not change. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_PREV</code> flag will skip any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_PREV_NODUP"><CODE>Db.DB_PREV_NODUP</CODE></A><p>If the cursor is not yet initialized, <code>Db.DB_PREV_NODUP</code> is identical to <code>Db.DB_LAST</code>. Otherwise, the cursor is moved to the previous non-duplicate key of the database, and that key/data pair is returned. <p>If the database is a Queue or Recno database, Dbc.get using the <code>Db.DB_PREV_NODUP</code> flag will ignore any keys that exist but were never explicitly created by the application, or those that were created and later deleted.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET"><CODE>Db.DB_SET</CODE></A><p>Move the cursor to the specified key/data pair of the database, and return the datum associated with the given key. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RANGE"><CODE>Db.DB_SET_RANGE</CODE></A><p>The <code>Db.DB_SET_RANGE</code> flag is identical to the <code>Db.DB_SET</code> flag, except that in the case of the Btree access method, the key is returned as well as the data item and the returned key/data pair is the smallest key greater than or equal to the specified key (as determined by the Btree comparison function), permitting partial key matches and range searches. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_SET_RECNO"><CODE>Db.DB_SET_RECNO</CODE></A><p>Move the cursor to the specific numbered record of the database, and return the associated key/data pair. The <b>data</b> field of the specified <b>key</b> must be a byte array containing a record number, as described in <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>. This determines the record to be retrieved. <p>For <code>Db.DB_SET_RECNO</code> to be specified, the underlying database must be of type Btree, and it must have been created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RECNUM"><CODE><code>Db.DB_RECNUM</code></CODE></A> flag.</p> </li></ul>In addition, the following flags may be set by bitwise inclusively <b>OR</b>'ing them into the <b>flags</b> parameter: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE>Db.DB_DIRTY_READ</CODE></A><p>Read modified but not yet committed data. Silently ignored if the <A HREF="../../../com/sleepycat/db/Db.html#DB_DIRTY_READ"><CODE><code>Db.DB_DIRTY_READ</code></CODE></A> flag was not specified when the underlying database was opened. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A><p>Return multiple data items in the <b>data</b> parameter. <p>In the case of Btree or Hash databases, duplicate data items for the current key, starting at the current cursor position, are entered into the buffer. Subsequent calls with both the <code>Db.DB_NEXT_DUP</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional duplicate data items associated with the current key or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional duplicate data items to return. Subsequent calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional duplicate data items associated with the current key or if there are no additional duplicate data items will return the next key and its data items or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional keys in the database.</p> <p>In the case of Queue or Recno databases, data items starting at the current cursor position are entered into the buffer. The record number of the first record will be returned in the <b>key</b> parameter. The record number of each subsequent returned record must be calculated from this value. Subsequent calls with the <code>Db.DB_MULTIPLE</code> flag specified will return additional data items or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional data items to return.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The multiple data items can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><CODE>DbMultipleDataIterator</CODE></A> class.</p> <p>The <code>Db.DB_MULTIPLE</code> flag may only be used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>, <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>, <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>, <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>, <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A><p>Return multiple key and data pairs in the <b>data</b> parameter. <p>Key and data pairs, starting at the current cursor position, are entered into the buffer. Subsequent calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code> flags specified will return additional key and data pairs or <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if there are no additional key and data items to return.</p> <p>In the case of Btree or Hash databases, the multiple key and data pairs can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><CODE>DbMultipleKeyDataIterator</CODE></A> class.</p> <p>In the case of Queue or Recno databases, the multiple record number and data pairs can be iterated over using the <A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><CODE>DbMultipleRecnoDataIterator</CODE></A> class.</p> <p>The buffer to which the <b>data</b> parameter refers must be provided from user memory (see <A HREF="../../../com/sleepycat/db/Db.html#DB_DBT_USERMEM"><CODE><code>Db.DB_DBT_USERMEM</code></CODE></A>). The buffer must be at least as large as the page size of the underlying database, aligned for unsigned integer access, and be a multiple of 1024 bytes in size. If the buffer size is insufficient, then upon return from the call the size field of the <b>data</b> parameter will have been set to an estimated buffer size, and a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> is thrown. (The size is an estimate as the exact size needed may not be known until all entries are read. It is best to initially provide a relatively large buffer, but applications should be prepared to resize the buffer as necessary and repeatedly call the method.)</p> <p>The <code>Db.DB_MULTIPLE_KEY</code> flag may only be used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>, <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>, <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>, <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>, <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE_KEY</code> flag may not be used when accessing databases made into secondary indices using the <A HREF="../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><CODE>Db.associate</CODE></A> method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_RMW"><CODE>Db.DB_RMW</CODE></A><p>Acquire write locks instead of read locks when doing the retrieval. Setting this flag can eliminate deadlock during a read-modify-write cycle by acquiring the write lock during the read part of the cycle so that another thread of control acquiring a read lock for the same item, in its own read-modify-write cycle, will not result in deadlock. </li></ul><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>pkey</CODE> - The secondary index key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.
+<DT><B>Returns:</B><DD>Unless otherwise specified, the Dbc.get method throws an exception that encapsulates a non-zero error value on failure. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_CURRENT</code> is set and the cursor key/data pair was deleted. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code> is set and the database is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code> is set and the database is empty. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code> is set and the cursor is already on the last record in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_DUP</code> is set and the next key/data pair of the database is not a duplicate data record for the current key/data pair. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_NODUP</code> is set and no non-duplicate key/data pairs occur after the cursor position in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code> is set and the cursor is already on the first record in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV_NODUP</code> is set and no non-duplicate key/data pairs occur before the cursor position in the database. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_SET</code> is set and no matching keys are found. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEMPTY"><CODE>DB_KEYEMPTY</CODE></A><p>The Dbc.get method will return <a href="../../../../ref/program/errorret.html#DB_KEYEMPTY"><code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_SET</code> is set and the database is a Queue or Recno database, and the specified key exists, but was never explicitly created by the application or was later deleted. </li></ul>In the presence of duplicate key values, Dbc.get will return the first data item for the given key. </p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.get method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors:
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.get method will fail and throw a IllegalArgumentException exception if the Db.DB_CURRENT or Db.DB_NEXT_DUP flags were specified and the cursor has not been initialized; the second method signature was called with a cursor that does not refer to a secondary index; or if an invalid flag value or parameter was specified.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></CODE> - If the requested item could not be returned due to insufficient memory, the Dbc.get method will fail and throw a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A> exception.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><!-- --></A><H3>
+put</H3>
+<PRE>
+public int <B>put</B>(<A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)
+ throws <A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></PRE>
+<DL>
+<DD>The Dbc.put method stores key/data pairs into the database.</p> If Dbc.put fails for any reason, the state of the cursor will be unchanged. If Dbc.put succeeds and an item is inserted into the database, the cursor is always positioned to refer to the newly inserted item.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - The data <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.<DD><CODE>flags</CODE> - must be set to one of the following values: <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_AFTER"><CODE>Db.DB_AFTER</CODE></A><p>In the case of the Btree and Hash access methods, insert the data element as a duplicate element of the key to which the cursor refers. The new element appears immediately after the current cursor position. It is an error to specify <code>Db.DB_AFTER</code> if the underlying Btree or Hash database does not support duplicate data items. ignored. <p>In the case of the Recno access method, it is an error to specify <code>Db.DB_AFTER</code> if the underlying Recno database was not created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER"><CODE><code>Db.DB_RENUMBER</code></CODE></A> flag. If the <A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER"><CODE><code>Db.DB_RENUMBER</code></CODE></A> flag was specified, a new key is created, all records after the inserted item are automatically renumbered, and the key of the new record is returned in the structure to which the <b>key</b> parameter refers. The initial value of the <b>key</b> parameter is ignored. See <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> for more information.</p> <p>The <code>Db.DB_AFTER</code> flag may not be specified to the Queue access method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_BEFORE"><CODE>Db.DB_BEFORE</CODE></A><p>In the case of the Btree and Hash access methods, insert the data element as a duplicate element of the key to which the cursor refers. The new element appears immediately before the current cursor position. It is an error to specify <code>Db.DB_BEFORE</code> if the underlying Btree or Hash database does not support duplicate data items. ignored. <p>In the case of the Recno access method, it is an error to specify <code>Db.DB_BEFORE</code> if the underlying Recno database was not created with the <A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER"><CODE><code>Db.DB_RENUMBER</code></CODE></A> flag. If the <A HREF="../../../com/sleepycat/db/Db.html#DB_RENUMBER"><CODE><code>Db.DB_RENUMBER</code></CODE></A> flag was specified, a new key is created, the current record and all records after it are automatically renumbered, and the key of the new record is returned in the structure to which the <b>key</b> parameter refers. The initial value of the <b>key</b> parameter is ignored. See <A HREF="../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><CODE>Db.open</CODE></A> for more information.</p> <p>The <code>Db.DB_BEFORE</code> flag may not be specified to the Queue access method.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_CURRENT"><CODE>Db.DB_CURRENT</CODE></A><p>Overwrite the data of the key/data pair to which the cursor refers with the specified data item. ignored. </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYFIRST"><CODE>Db.DB_KEYFIRST</CODE></A><p>In the case of the Btree and Hash access methods, insert the specified key/data pair into the database. <p>If the underlying database supports duplicate data items, and if the key already exists in the database and a duplicate sort function has been specified, the inserted data item is added in its sorted location. If the key already exists in the database and no duplicate sort function has been specified, the inserted data item is added as the first of the data items for that key.</p> <p>The <code>Db.DB_KEYFIRST</code> flag may not be specified to the Queue or Recno access methods.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_KEYLAST"><CODE>Db.DB_KEYLAST</CODE></A><p>In the case of the Btree and Hash access methods, insert the specified key/data pair into the database. <p>If the underlying database supports duplicate data items, and if the key already exists in the database and a duplicate sort function has been specified, the inserted data item is added in its sorted location. If the key already exists in the database, and no duplicate sort function has been specified, the inserted data item is added as the last of the data items for that key.</p> <p>The <code>Db.DB_KEYLAST</code> flag may not be specified to the Queue or Recno access methods.</p> </li></ul><ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NODUPDATA"><CODE>Db.DB_NODUPDATA</CODE></A><p>In the case of the Btree and Hash access methods, insert the specified key/data pair into the database, unless a key/data pair comparing equally to it already exists in the database. If a matching key/data pair already exists in the database, <A HREF="../../../com/sleepycat/db/Db.html#DB_KEYEXIST"><CODE><code>Db.DB_KEYEXIST</code></CODE></A> is returned. The <code>Db.DB_NODUPDATA</code> flag may only be specified if the underlying database has been configured to support sorted duplicate data items. <p>The <code>Db.DB_NODUPDATA</code> flag may not be specified to the Queue or Recno access methods.</p> </li></ul><DD><CODE>key</CODE> - The key <A HREF="../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> operated on.
+<DT><B>Returns:</B><DD>Unless otherwise specified, the Dbc.put method throws an exception that encapsulates a non-zero error value on failure. </p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.put method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the current cursor record has already been deleted and the underlying access method is Hash. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.put method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the current cursor record has already been deleted and the underlying access method is Hash. </li></ul></p> <ul><li><A HREF="../../../com/sleepycat/db/Db.html#DB_NOTFOUND"><CODE>DB_NOTFOUND</CODE></A><p>The Dbc.put method will return <a href="../../../../ref/program/errorret.html#DB_NOTFOUND"><code>Db.DB_NOTFOUND</code></a> if the current cursor record has already been deleted and the underlying access method is Hash. </li></ul></p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbException.html">DbException</A></CODE> - The Dbc.put method may fail and throw <A HREF="../../../com/sleepycat/db/DbException.html"><CODE>DbException</CODE></A>, encapsulating one of the following non-zero errors: <li>An attempt was made to modify a read-only database. Write attempted on read-only cursor when the <A HREF="../../../com/sleepycat/db/Db.html#DB_INIT_CDB"><CODE>Db.DB_INIT_CDB</CODE></A> flag was specified to <A HREF="../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><CODE>DbEnv.open</CODE></A>.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></CODE> - If a transactional database environment operation was selected to resolve a deadlock, the Dbc.put method will fail and throw a <A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><CODE>DbDeadlockException</CODE></A> exception.
+<DD><CODE><A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></CODE> - If a Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time, the Dbc.put method will fail and throw a <A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><CODE>DbLockNotGrantedException</CODE></A> exception.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</A></CODE> - The Dbc.put method will fail and throw a IllegalArgumentException exception if the Db.DB_AFTER, Db.DB_BEFORE or Db.DB_CURRENT flags were specified and the cursor has not been initialized; the Db.DB_AFTER or Db.DB_BEFORE flags were specified and a duplicate sort function has been specified; the Db.DB_CURRENT flag was specified, a duplicate sort function has been specified, and the data item of the referenced key/data pair does not compare equally to the <b>data</b> parameter; the Db.DB_AFTER or Db.DB_BEFORE flags were specified, and the underlying access method is Queue; an attempt was made to add a record to a fixed-length database that was too large to fit; an attempt was made to add a record to a secondary index; or if an invalid flag value or parameter was specified.</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Dbc.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbBtreeStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbEnv.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/Dbt.html b/db/docs/java/com/sleepycat/db/Dbt.html
new file mode 100644
index 000000000..edd18f129
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/Dbt.html
@@ -0,0 +1,1082 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:10 EST 2003 -->
+<TITLE>
+Dbt (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db.Dbt,Dbt class">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Dbt (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Dbt.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbt.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+com.sleepycat.db</FONT>
+<BR>
+Class Dbt</H2>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">java.lang.Object</A>
+ |
+ +--<B>com.sleepycat.db.Dbt</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../com/sleepycat/bdb/DataThang.html">DataThang</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>Dbt</B><DT>extends <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></DL>
+
+<P>
+This information describes the specific details of the Dbt class, used to encode keys and data items in a database.</p> <h3>Key/Data Pairs</h3> <p>Storage and retrieval for the <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> access methods are based on key/data pairs. Both key and data items are represented by Dbt objects. Key and data byte strings may refer to strings of zero length up to strings of essentially unlimited length. See <a href="../../../../ref/am_misc/dbsizes.html">Database limits</a> for more information.</p> <p>The Dbt class provides simple access to an underlying data structure, whose elements can be examined or changed using the usual <b>set</b> or <b>get</b> methods. Dbt can be subclassed, providing a way to associate with it additional data or references to other structures.</p> <p>The constructors set all elements of the underlying structure to zero. The constructor with one parameter has the effect of setting all elements to zero except for the <b>data</b> and <b>size</b> elements. The constructor with three parameters has the effect of setting all elements to zero except for the <b>data</b>, <b>size</b> and <b>offset</b> elements.</p> <p>In the case where the <b>flags</b> structure element is set to 0, when being provided a key or data item by the application, the Berkeley DB package expects the <b>data</b> object to be set to a byte array of <b>size</b> bytes. When returning a key/data item to the application, the Berkeley DB package will store into the <b>data</b> object a byte array of <b>size</b> bytes. During a get operation, if none of the Db.DB_DBT_MALLOC, Db.DB_DBT_REALLOC or Db.DB_DBT_USERMEM flags are specified, the operation occurs as if Db.DB_DBT_MALLOC was used.</p> <p>Access to Dbt objects is not re-entrant. In particular, if multiple threads simultaneously access the same Dbt object using <A HREF="../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> API calls, the results are undefined, and may result in a crash. One easy way to avoid problems is to use Dbt objects that are created as local variables and not shared among threads.</p>
+<P>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#Dbt()">Dbt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct an empty Dbt.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#Dbt(byte[])">Dbt</A></B>(byte[]&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a Dbt where the data is the contents of the array and the Dbt's length is set to the length of the array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#Dbt(byte[], int, int)">Dbt</A></B>(byte[]&nbsp;data,
+ int&nbsp;off,
+ int&nbsp;len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a Dbt from <b>len</b> bytes from the array, starting at <b>off</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#Dbt(java.lang.Object)">Dbt</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Construct a Dbt where the data is the serialized form of the Object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_data()">get_data</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getData()"><CODE>getData()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_dlen()">get_dlen</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialLength()"><CODE>getPartialLength()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_doff()">get_doff</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialOffset()"><CODE>getPartialOffset()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getFlags()"><CODE>getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_object()">get_object</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB
+ 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getObject()"><CODE>getObject()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_offset()">get_offset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getOffset()"><CODE>getOffset()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_recno_key_data()">get_recno_key_data</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>getRecordNumber()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_size()">get_size</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getSize()"><CODE>getSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#get_ulen()">get_ulen</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getUserBufferLength()"><CODE>getUserBufferLength()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getData()">getData</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the object flag value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getObject()">getObject</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an object from the data array, encoding the object using the Java serialization API.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getOffset()">getOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the byte offset into the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getPartialLength()">getPartialLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the length of the partial record, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getPartialOffset()">getPartialOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the offset of the partial record, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()">getRecordNumber</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return an object from the data array, expecting that data to be a logical record number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getSize()">getSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the data array size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#getUserBufferLength()">getUserBufferLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the length in bytes of the user-specified buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_data(byte[])">set_data</A></B>(byte[]&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setData(byte[])"><CODE>setData(byte[])</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_dlen(int)">set_dlen</A></B>(int&nbsp;dlen)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialLength(int)"><CODE>setPartialLength(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_doff(int)">set_doff</A></B>(int&nbsp;doff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialOffset(int)"><CODE>setPartialOffset(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_flags(int)">set_flags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_object(java.lang.Object)">set_object</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced
+ by <A HREF="../../../com/sleepycat/db/Dbt.html#setObject(java.lang.Object)"><CODE>setObject(Object)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_offset(int)">set_offset</A></B>(int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setOffset(int)"><CODE>setOffset(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_recno_key_data(int)">set_recno_key_data</A></B>(int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setRecordNumber(int)"><CODE>setRecordNumber(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_size(int)">set_size</A></B>(int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setSize(int)"><CODE>setSize(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#set_ulen(int)">set_ulen</A></B>(int&nbsp;ulen)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setUserBufferLength(int)"><CODE>setUserBufferLength(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setData(byte[])">setData</A></B>(byte[]&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)">setFlags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the object flag value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setObject(java.lang.Object)">setObject</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initialize the data array from a serialized object, encoding the object using the Java serialization API.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setOffset(int)">setOffset</A></B>(int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte offset into the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setPartialLength(int)">setPartialLength</A></B>(int&nbsp;dlen)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte length of the partial record being read or written by the application, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setPartialOffset(int)">setPartialOffset</A></B>(int&nbsp;doff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the offset of the partial record being read or written by the application, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setRecordNumber(int)">setRecordNumber</A></B>(int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initialize the data array from a logical record number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setSize(int)">setSize</A></B>(int&nbsp;size)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte size of the data array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../com/sleepycat/db/Dbt.html#setUserBufferLength(int)">setUserBufferLength</A></B>(int&nbsp;ulen)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte size of the user-specified buffer.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals(java.lang.Object)">equals</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#getClass()">getClass</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notify()">notify</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#notifyAll()">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString()">toString</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait()">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long)">wait</A>, <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#wait(long, int)">wait</A></CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="Dbt()"><!-- --></A><H3>
+Dbt</H3>
+<PRE>
+public <B>Dbt</B>()</PRE>
+<DL>
+<DD>Construct an empty Dbt.</p>
+<P>
+</DL>
+<HR>
+
+<A NAME="Dbt(byte[])"><!-- --></A><H3>
+Dbt</H3>
+<PRE>
+public <B>Dbt</B>(byte[]&nbsp;data)</PRE>
+<DL>
+<DD>Construct a Dbt where the data is the contents of the array and the Dbt's length is set to the length of the array.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - the array to which the Dbt's data is set.</DL>
+<HR>
+
+<A NAME="Dbt(byte[], int, int)"><!-- --></A><H3>
+Dbt</H3>
+<PRE>
+public <B>Dbt</B>(byte[]&nbsp;data,
+ int&nbsp;off,
+ int&nbsp;len)</PRE>
+<DL>
+<DD>Construct a Dbt from <b>len</b> bytes from the array, starting at <b>off</b>.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - the array from which the Dbt's data is set.<DD><CODE>len</CODE> - the length of the data in bytes.<DD><CODE>off</CODE> - starting byte offset of the data in the array.</DL>
+<HR>
+
+<A NAME="Dbt(java.lang.Object)"><!-- --></A><H3>
+Dbt</H3>
+<PRE>
+public <B>Dbt</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Construct a Dbt where the data is the serialized form of the Object. The instanced passed must therefore implement the Serializable interface. The Dbt's length will be set to the length of the byte array required to store this serialized form.</p>
+<P>
+<DT><B>Parameters:</B><DD><CODE>serialobj</CODE> - the serialized form to which the Dbt's data is set.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - If there is an error while serializing the object.</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="setData(byte[])"><!-- --></A><H3>
+setData</H3>
+<PRE>
+public void <B>setData</B>(byte[]&nbsp;data)</PRE>
+<DL>
+<DD>Set the data array. Note that the array data is not copied immediately, but only when the Dbt is used.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>data</CODE> - an array of bytes to be used to set the content for the Dbt.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFlags(int)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int&nbsp;flags)</PRE>
+<DL>
+<DD>Set the object flag value.</p> The <b>flags</b> parameter must be set by bitwise inclusively <b>OR</b>'ing together one or more of the following values: If Db.DB_DBT_MALLOC or Db.DB_DBT_REALLOC is specified, Berkeley DB allocates a properly sized byte array to contain the data. This can be convenient if you know little about the nature of the data, specifically the size of data in the database. However, if your application makes repeated calls to retrieve keys or data, you may notice increased garbage collection due to this allocation. If you know the maximum size of data you are retrieving, you might decrease the memory burden and speed your application by allocating your own byte array and using Db.DB_DBT_USERMEM. Even if you don't know the maximum size, you can use this option and reallocate your array whenever your retrieval API call throws a <A HREF="../../../com/sleepycat/db/DbMemoryException.html"><CODE>DbMemoryException</CODE></A>.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - Dbt flag value.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setObject(java.lang.Object)"><!-- --></A><H3>
+setObject</H3>
+<PRE>
+public void <B>setObject</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD>Initialize the data array from a serialized object, encoding the object using the Java serialization API. This method uses <i>ObjectOutputStream</i> internally to manipulate an array of bytes representing an object (and any connected objects). All of the rules of Java Serialization apply. In particular, the object(s) must implement either the <i>Serializable</i> or <i>Externalizable</i> interface. The serialized encoding trades efficiency for convenience.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>serialobj</CODE> - the object to be serialized.
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - If there is an error while de-serializing the object.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setOffset(int)"><!-- --></A><H3>
+setOffset</H3>
+<PRE>
+public void <B>setOffset</B>(int&nbsp;offset)</PRE>
+<DL>
+<DD>Set the byte offset into the data array.</p> <p>The number of bytes offset into the <b>data</b> array determine the portion of the array actually used. This element is accessed using Dbt.getOffset and Dbt.setOffset. Although Java normally maintains proper alignment of byte arrays, the set_offset method can be used to specify unaligned addresses. Unaligned address accesses that are not supported by the underlying hardware may be reported as an exception, or may stop the running Java program.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>offset</CODE> - the byte offset into the data array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPartialLength(int)"><!-- --></A><H3>
+setPartialLength</H3>
+<PRE>
+public void <B>setPartialLength</B>(int&nbsp;dlen)</PRE>
+<DL>
+<DD>Set the byte length of the partial record being read or written by the application, in bytes. See the Db.DB_DBT_PARTIAL flag for more information.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>dlen</CODE> - the length of the partial record in bytes.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPartialOffset(int)"><!-- --></A><H3>
+setPartialOffset</H3>
+<PRE>
+public void <B>setPartialOffset</B>(int&nbsp;doff)</PRE>
+<DL>
+<DD>Set the offset of the partial record being read or written by the application, in bytes. See the Db.DB_DBT_PARTIAL flag for more information.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>doff</CODE> - the offset of the partial record.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRecordNumber(int)"><!-- --></A><H3>
+setRecordNumber</H3>
+<PRE>
+public void <B>setRecordNumber</B>(int&nbsp;recno)</PRE>
+<DL>
+<DD>Initialize the data array from a logical record number. Recno database records are ordered by integer keys starting at 1. When the Dbt.setRecordNumber method is called, the data, size and offset fields in the Dbt are implicitly set to hold a byte array representation of the integer key.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>recno</CODE> - The <b>recno</b> parameter logical record number used to initialize the data array.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSize(int)"><!-- --></A><H3>
+setSize</H3>
+<PRE>
+public void <B>setSize</B>(int&nbsp;size)</PRE>
+<DL>
+<DD>Set the byte size of the data array.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>size</CODE> - the size of the data array in bytes.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setUserBufferLength(int)"><!-- --></A><H3>
+setUserBufferLength</H3>
+<PRE>
+public void <B>setUserBufferLength</B>(int&nbsp;ulen)</PRE>
+<DL>
+<DD>Set the byte size of the user-specified buffer.</p> <p>Note that applications can determine the length of a record by setting the <b>ulen</b> to 0 and checking the return value found in <b>size</b>. See the Db.DB_DBT_USERMEM flag for more information.</p>
+<P>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>ulen</CODE> - The <b>ulen</b> parameter the size of the data array in bytes.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_data(byte[])"><!-- --></A><H3>
+set_data</H3>
+<PRE>
+public void <B>set_data</B>(byte[]&nbsp;data)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setData(byte[])"><CODE>setData(byte[])</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_dlen(int)"><!-- --></A><H3>
+set_dlen</H3>
+<PRE>
+public void <B>set_dlen</B>(int&nbsp;dlen)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialLength(int)"><CODE>setPartialLength(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_doff(int)"><!-- --></A><H3>
+set_doff</H3>
+<PRE>
+public void <B>set_doff</B>(int&nbsp;doff)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setPartialOffset(int)"><CODE>setPartialOffset(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_flags(int)"><!-- --></A><H3>
+set_flags</H3>
+<PRE>
+public void <B>set_flags</B>(int&nbsp;flags)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_object(java.lang.Object)"><!-- --></A><H3>
+set_object</H3>
+<PRE>
+public void <B>set_object</B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;serialobj)
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced
+ by <A HREF="../../../com/sleepycat/db/Dbt.html#setObject(java.lang.Object)"><CODE>setObject(Object)</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_offset(int)"><!-- --></A><H3>
+set_offset</H3>
+<PRE>
+public void <B>set_offset</B>(int&nbsp;offset)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setOffset(int)"><CODE>setOffset(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_recno_key_data(int)"><!-- --></A><H3>
+set_recno_key_data</H3>
+<PRE>
+public void <B>set_recno_key_data</B>(int&nbsp;recno)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setRecordNumber(int)"><CODE>setRecordNumber(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_size(int)"><!-- --></A><H3>
+set_size</H3>
+<PRE>
+public void <B>set_size</B>(int&nbsp;size)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setSize(int)"><CODE>setSize(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="set_ulen(int)"><!-- --></A><H3>
+set_ulen</H3>
+<PRE>
+public void <B>set_ulen</B>(int&nbsp;ulen)</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#setUserBufferLength(int)"><CODE>setUserBufferLength(int)</CODE></A></I>
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getData()"><!-- --></A><H3>
+getData</H3>
+<PRE>
+public byte[] <B>getData</B>()</PRE>
+<DL>
+<DD>Return the data array.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data array.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFlags()"><!-- --></A><H3>
+getFlags</H3>
+<PRE>
+public int <B>getFlags</B>()</PRE>
+<DL>
+<DD>Return the object flag value.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the object flag value.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getObject()"><!-- --></A><H3>
+getObject</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>getObject</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD>Return an object from the data array, encoding the object using the Java serialization API. This method uses <i>ObjectInputStream</i> internally to manipulate an array of bytes representing an object (and any connected objects). All of the rules of Java Serialization apply. In particular, the object(s) must implement either the <i>Serializable</i> or <i>Externalizable</i> interface. The serialized encoding trades efficiency for convenience.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an object from the data array, expecting that data to be a serialized object.</p>
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE> - If there is an error while de-serializing the object.
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE> - If the stream contains a class not found by the runtime while de-serializing.</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOffset()"><!-- --></A><H3>
+getOffset</H3>
+<PRE>
+public int <B>getOffset</B>()</PRE>
+<DL>
+<DD>Return the byte offset into the data array.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the byte offset into the data array.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPartialLength()"><!-- --></A><H3>
+getPartialLength</H3>
+<PRE>
+public int <B>getPartialLength</B>()</PRE>
+<DL>
+<DD>Return the length of the partial record, in bytes.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the length of the partial record, in bytes.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPartialOffset()"><!-- --></A><H3>
+getPartialOffset</H3>
+<PRE>
+public int <B>getPartialOffset</B>()</PRE>
+<DL>
+<DD>Return the offset of the partial record, in bytes.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the offset of the partial record, in bytes.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRecordNumber()"><!-- --></A><H3>
+getRecordNumber</H3>
+<PRE>
+public int <B>getRecordNumber</B>()</PRE>
+<DL>
+<DD>Return an object from the data array, expecting that data to be a logical record number.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>an object from the data array, expecting that data to be a logical record number.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSize()"><!-- --></A><H3>
+getSize</H3>
+<PRE>
+public int <B>getSize</B>()</PRE>
+<DL>
+<DD>Return the data array size.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the data array size.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getUserBufferLength()"><!-- --></A><H3>
+getUserBufferLength</H3>
+<PRE>
+public int <B>getUserBufferLength</B>()</PRE>
+<DL>
+<DD>Return the length in bytes of the user-specified buffer.</p>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the length in bytes of the user-specified buffer.</p></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_data()"><!-- --></A><H3>
+get_data</H3>
+<PRE>
+public byte[] <B>get_data</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getData()"><CODE>getData()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_dlen()"><!-- --></A><H3>
+get_dlen</H3>
+<PRE>
+public int <B>get_dlen</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialLength()"><CODE>getPartialLength()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_doff()"><!-- --></A><H3>
+get_doff</H3>
+<PRE>
+public int <B>get_doff</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getPartialOffset()"><CODE>getPartialOffset()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_flags()"><!-- --></A><H3>
+get_flags</H3>
+<PRE>
+public int <B>get_flags</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getFlags()"><CODE>getFlags()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_object()"><!-- --></A><H3>
+get_object</H3>
+<PRE>
+public <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A> <B>get_object</B>()
+ throws <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A>,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB
+ 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getObject()"><CODE>getObject()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the
+ Return Value
+<DT><B>Throws:</B>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html">IOException</A></CODE>
+<DD><CODE><A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException</A></CODE></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_offset()"><!-- --></A><H3>
+get_offset</H3>
+<PRE>
+public int <B>get_offset</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getOffset()"><CODE>getOffset()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_recno_key_data()"><!-- --></A><H3>
+get_recno_key_data</H3>
+<PRE>
+public int <B>get_recno_key_data</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>getRecordNumber()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_size()"><!-- --></A><H3>
+get_size</H3>
+<PRE>
+public int <B>get_size</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getSize()"><CODE>getSize()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="get_ulen()"><!-- --></A><H3>
+get_ulen</H3>
+<PRE>
+public int <B>get_ulen</B>()</PRE>
+<DL>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/Dbt.html#getUserBufferLength()"><CODE>getUserBufferLength()</CODE></A></I>
+<P>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>Description of the Return Value</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Dbt.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/db/DbRepStat.html"><B>PREV CLASS</B></A>&nbsp;
+&nbsp;<A HREF="../../../com/sleepycat/db/DbTxn.html"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbt.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Db.html b/db/docs/java/com/sleepycat/db/class-use/Db.html
new file mode 100644
index 000000000..05d233d4c
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/Db.html
@@ -0,0 +1,375 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.Db (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.Db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Db.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Db.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.Db</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Db.html">Db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Db.html">Db</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/db/Db.html">Db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Db.html">Db</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#getDb()">getDb</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the underlying database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Db.html">Db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)">ForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)">DataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;valueFormat,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)">DataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>&nbsp;keyFormat,
+ <A HREF="../../../../com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>&nbsp;keyExtractor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#DataDb(com.sleepycat.db.Db)">DataDb</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a database wrapper.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Db.html">Db</A> in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Db.html">Db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)">newDataStore</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Class.html">Class</A>&nbsp;baseClass,
+ <A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>&nbsp;keyAssigner)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a store from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataIndex.html">DataIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)">newDataIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an index from a previously opened Db object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></CODE></FONT></TD>
+<TD><CODE><B>TupleSerialDbFactory.</B><B><A HREF="../../../../com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)">newForeignKeyIndex</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;store,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;keyName,
+ boolean&nbsp;usePrimaryKey,
+ boolean&nbsp;useValue,
+ <A HREF="../../../../com/sleepycat/bdb/DataStore.html">DataStore</A>&nbsp;foreignStore,
+ int&nbsp;deleteAction)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a foreign key index from a previously opened Db object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Db.html">Db</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Db.html">Db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbSecondaryKeyCreate.</B><B><A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbHash.</B><B><A HREF="../../../../com/sleepycat/db/DbHash.html#hash(com.sleepycat.db.Db, byte[], int)">hash</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ byte[]&nbsp;data,
+ int&nbsp;len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbHash interface is used by the Db.setHash method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbFeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)">feedback</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbFeedbackHandler interface is used by the Db.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbFeedback.</B><B><A HREF="../../../../com/sleepycat/db/DbFeedback.html#feedback(com.sleepycat.db.Db, int, int)">feedback</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbDupCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbDupCompare.html#compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compareDuplicates</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreePrefix.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html#prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">prefix</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreePrefix interface is used by the Db.setBtreePrefix method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreeCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html#compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compare</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreeCompare interface is used by the Db.setBtreeCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbAppendRecno.</B><B><A HREF="../../../../com/sleepycat/db/DbAppendRecno.html#dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)">dbAppendRecno</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppendRecno interface is used by the Db.setAppendRecno method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)">associate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Db.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Db.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbAppDispatch.html b/db/docs/java/com/sleepycat/db/class-use/DbAppDispatch.html
new file mode 100644
index 000000000..1182816e9
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbAppDispatch.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbAppDispatch (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbAppDispatch (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbAppDispatch.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppDispatch.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbAppDispatch</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_app_dispatch(com.sleepycat.db.DbAppDispatch)">set_app_dispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)">setAppDispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbAppDispatch.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppDispatch.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbAppendRecno.html b/db/docs/java/com/sleepycat/db/class-use/DbAppendRecno.html
new file mode 100644
index 000000000..2ad304e4d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbAppendRecno.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbAppendRecno (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbAppendRecno (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbAppendRecno.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppendRecno.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbAppendRecno</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_append_recno(com.sleepycat.db.DbAppendRecno)">set_append_recno</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>Db.setAppendRecno(DbAppendRecno)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)">setAppendRecno</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbAppendRecno.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbAppendRecno.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbBtreeCompare.html b/db/docs/java/com/sleepycat/db/class-use/DbBtreeCompare.html
new file mode 100644
index 000000000..9fe0d7f65
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbBtreeCompare.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbBtreeCompare (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbBtreeCompare (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbBtreeCompare</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_compare(com.sleepycat.db.DbBtreeCompare)">set_bt_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>Db.setBtreeCompare(DbBtreeCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)">setBtreeCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbBtreePrefix.html b/db/docs/java/com/sleepycat/db/class-use/DbBtreePrefix.html
new file mode 100644
index 000000000..2e8785763
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbBtreePrefix.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbBtreePrefix (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbBtreePrefix (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreePrefix.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbBtreePrefix</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_prefix(com.sleepycat.db.DbBtreePrefix)">set_bt_prefix</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>Db.setBtreePrefix(DbBtreePrefix)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)">setBtreePrefix</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreePrefix.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbBtreeStat.html b/db/docs/java/com/sleepycat/db/class-use/DbBtreeStat.html
new file mode 100644
index 000000000..0affd5d04
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbBtreeStat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbBtreeStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbBtreeStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreeStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbBtreeStat</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbBtreeStat
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbBtreeStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbBtreeStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbClient.html b/db/docs/java/com/sleepycat/db/class-use/DbClient.html
new file mode 100644
index 000000000..58a1fc5f8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbClient.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbClient (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbClient (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbClient.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbClient.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbClient</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">set_rpc_server</A></B>(<A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">setRpcServer</A></B>(<A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Establishes a connection for this <b>dbenv</b> to a RPC server.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbClient.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbClient.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbDeadlockException.html b/db/docs/java/com/sleepycat/db/class-use/DbDeadlockException.html
new file mode 100644
index 000000000..2759a315a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbDeadlockException.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbDeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbDeadlockException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbDeadlockException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDeadlockException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbDeadlockException</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbremove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbRemove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbrename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbRename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)">open</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbDeadlockException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDeadlockException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbDupCompare.html b/db/docs/java/com/sleepycat/db/class-use/DbDupCompare.html
new file mode 100644
index 000000000..335fb08d6
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbDupCompare.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbDupCompare (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbDupCompare (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbDupCompare.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDupCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbDupCompare</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_dup_compare(com.sleepycat.db.DbDupCompare)">set_dup_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>Db.setDuplicateCompare(DbDupCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)">setDuplicateCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbDupCompare.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbDupCompare.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbEnv.RepProcessMessage.html b/db/docs/java/com/sleepycat/db/class-use/DbEnv.RepProcessMessage.html
new file mode 100644
index 000000000..fcf16004f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbEnv.RepProcessMessage.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbEnv.RepProcessMessage (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbEnv.RepProcessMessage (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.RepProcessMessage.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbEnv.RepProcessMessage</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.RepProcessMessage.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbEnv.html b/db/docs/java/com/sleepycat/db/class-use/DbEnv.html
new file mode 100644
index 000000000..fbeef2986
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbEnv.html
@@ -0,0 +1,356 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbEnv (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbEnv (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnv.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbEnv</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the environment for the store and index.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>DataStore.</B><B><A HREF="../../../../com/sleepycat/bdb/DataStore.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the environment associated with this store.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#getEnv()">getEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the underlying Berkeley DB environment.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#getInstance(com.sleepycat.db.DbEnv)">getInstance</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the CurrentTransaction accessor for a specified Berkeley DB
+ environment.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv)">TransactionRunner</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a transaction runner for a given Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv, int)">TransactionRunner</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;maxRetries)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a transaction runner for a given Berkeley DB environment and
+ with a given number of maximum retries.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.DbEnv, java.lang.String, java.lang.String, int)">StoredClassCatalog</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;openFlags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a catalog database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>DbException.</B><B><A HREF="../../../../com/sleepycat/db/DbException.html#getDbEnv()">getDbEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException.getDbEnv method returns the database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_env()">get_env</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getDbEnv()"><CODE>Db.getDbEnv()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getDbEnv()">getDbEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDbEnv method returns the handle for the database environment underlying the database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbRepTransport.</B><B><A HREF="../../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbPanicHandler.</B><B><A HREF="../../../../com/sleepycat/db/DbPanicHandler.html#panic(com.sleepycat.db.DbEnv, com.sleepycat.db.DbException)">panic</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbPanicHandler interface is used by the DbEnv.setPanicHandler method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnvFeedbackHandler.</B><B><A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)">feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnvFeedback.</B><B><A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html#feedback(com.sleepycat.db.DbEnv, int, int)">feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ int&nbsp;opcode,
+ int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbAppDispatch.</B><B><A HREF="../../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)">appDispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;log_rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppDispatch interface is used by the DbEnv.setAppDispatch method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbException.html#DbException(java.lang.String, int, com.sleepycat.db.DbEnv)">DbException</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;s,
+ int&nbsp;errno,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbException constructor returns an instance of the DbException class containing the string, the encapsulated errno, and the database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Db.html#Db(com.sleepycat.db.DbEnv, int)">Db</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor creates a Db object that is the handle for a Berkeley DB database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnv.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnv.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedback.html b/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedback.html
new file mode 100644
index 000000000..bbdde5193
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedback.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbEnvFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbEnvFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbEnvFeedback</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_feedback(com.sleepycat.db.DbEnvFeedback)">set_feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedbackHandler.html b/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedbackHandler.html
new file mode 100644
index 000000000..c59b14103
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbEnvFeedbackHandler.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbEnvFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbEnvFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbEnvFeedbackHandler</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbEnvFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbErrcall.html b/db/docs/java/com/sleepycat/db/class-use/DbErrcall.html
new file mode 100644
index 000000000..633ec5a5f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbErrcall.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbErrcall (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbErrcall (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbErrcall.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrcall.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbErrcall</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_errcall(com.sleepycat.db.DbErrcall)">set_errcall</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler(DbErrorHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_errcall(com.sleepycat.db.DbErrcall)">set_errcall</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>Db.setErrorHandler(DbErrorHandler)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbErrcall.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrcall.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbErrorHandler.html b/db/docs/java/com/sleepycat/db/class-use/DbErrorHandler.html
new file mode 100644
index 000000000..2eb05f990
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbErrorHandler.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbErrorHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbErrorHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrorHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbErrorHandler</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbErrorHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbErrorHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbException.html b/db/docs/java/com/sleepycat/db/class-use/DbException.html
new file mode 100644
index 000000000..2ce8a00c5
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbException.html
@@ -0,0 +1,3269 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbException</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that throw <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>TransactionRunner.</B><B><A HREF="../../../../com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)">run</A></B>(<A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>&nbsp;worker)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Calls the <A HREF="../../../../com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, begins and ends a transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>PrimaryKeyAssigner.</B><B><A HREF="../../../../com/sleepycat/bdb/PrimaryKeyAssigner.html#assignKey(com.sleepycat.bdb.bind.DataBuffer)">assignKey</A></B>(<A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>&nbsp;keyData)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assigns a new primary key value into the given data buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#valueSetView(java.lang.Object)">valueSetView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)">subView</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive,
+ <A HREF="../../../../com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>&nbsp;keyBinding)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a new value-set view for key range, optionally changing
+ the key binding.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#isEmpty()">isEmpty</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether no records are present in the view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#get(java.lang.Object, java.lang.Object, int, boolean, java.lang.Object[])">get</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ boolean&nbsp;lockForWrite,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#consume(int, java.lang.Object[], java.lang.Object[])">consume</A></B>(int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a database 'get and consume' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;primaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a database 'put' operation, optionally returning the old value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#addValue(com.sleepycat.bdb.DataThang, java.lang.Object, int)">addValue</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;primaryKeyThang,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a duplicate value for a specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#append(java.lang.Object, java.lang.Object[], java.lang.Object[])">append</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retPrimaryKey,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;retValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Appends a value and returns the new key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#clear(java.util.Collection)">clear</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>&nbsp;oldValues)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deletes all records in the current range, optionally returning the
+ values for the deleted records.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>[]&nbsp;indexViews,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;indexKeys,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ specified index key values.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A></CODE></FONT></TD>
+<TD><CODE><B>DataView.</B><B><A HREF="../../../../com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataCursor[], boolean)">join</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>[]&nbsp;indexCursors,
+ boolean&nbsp;presorted)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataStore.</B><B><A HREF="../../../../com/sleepycat/bdb/DataStore.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the store and all associated indices.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#delete(com.sleepycat.bdb.DataThang, int)">delete</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'delete' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#openCursor(boolean)">openCursor</A></B>(boolean&nbsp;writeCursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#dupCursor(com.sleepycat.db.Dbc, boolean, int)">dupCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ boolean&nbsp;writeCursor,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Duplicates a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#closeCursor(com.sleepycat.db.Dbc)">closeCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#getCurrentKey()">getCurrentKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the key object for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#getCurrentValue()">getCurrentValue</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value object for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#getCurrentRecordNumber()">getCurrentRecordNumber</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the record number for the last record read.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#get(java.lang.Object, java.lang.Object, int, boolean)">get</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ boolean&nbsp;lockForWrite)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a database 'get' using the given key and value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#find(java.lang.Object, boolean)">find</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ boolean&nbsp;findFirst)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Find the given value, using DB_GET_BOTH if possible, or a sequential
+ search otherwise.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#count()">count</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the number of duplicates for the current key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'put' operation, optionally returning
+ the previous value.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[], boolean)">put</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;key,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;value,
+ int&nbsp;flag,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>[]&nbsp;oldValue,
+ boolean&nbsp;useCurrentKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'put' operation, optionally using the
+ current key instead of the key parameter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataCursor.</B><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#delete()">delete</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform an arbitrary database 'delete' operation.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn()">beginTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn(boolean, boolean)">beginTxn</A></B>(boolean&nbsp;dirtyRead,
+ boolean&nbsp;noWait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#commitTxn()">commitTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commits the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#abortTxn()">abortTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aborts the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that throw <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.DbEnv, java.lang.String, java.lang.String, int)">StoredClassCatalog</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;env,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;openFlags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open a catalog database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;singleKey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and single key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object, boolean, java.lang.Object, boolean)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataView.html">DataView</A>&nbsp;view,
+ boolean&nbsp;writeAllowed,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;beginKey,
+ boolean&nbsp;beginInclusive,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A>&nbsp;endKey,
+ boolean&nbsp;endInclusive)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a cursor for a given view and key range.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataCursor)">DataCursor</A></B>(<A HREF="../../../../com/sleepycat/bdb/DataCursor.html">DataCursor</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clones a cursor preserving the current position.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbDeadlockException class and how it is used in the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbLockNotGrantedException class and how it is used by the various Db* classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbMemoryException.html">DbMemoryException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbMemoryException class and how it is used by the various Db* classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbRunRecoveryException class and how it is used by the various Berkeley DB classes.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbPanicHandler.</B><B><A HREF="../../../../com/sleepycat/db/DbPanicHandler.html#panic(com.sleepycat.db.DbEnv, com.sleepycat.db.DbException)">panic</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A>&nbsp;e)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbPanicHandler interface is used by the DbEnv.setPanicHandler method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#abort()">abort</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.abort method causes an abnormal termination of the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#commit(int)">commit</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.commit method ends the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#discard(int)">discard</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.discard method frees up all the per-process resources associated with the specified <A HREF="../../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle, neither committing nor aborting the transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#id()">id</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.id method returns the unique transaction id associated with the specified transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#prepare(byte[])">prepare</A></B>(byte[]&nbsp;gid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.prepare method initiates the beginning of a two-phase commit.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#set_timeout(long, int)">set_timeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbTxn.</B><B><A HREF="../../../../com/sleepycat/db/DbTxn.html#setTimeout(long, int)">setTimeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn.setTimeout method sets timeout values for locks or transactions for the specified transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbSecondaryKeyCreate.</B><B><A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbRepTransport.</B><B><A HREF="../../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#get_priority()">get_priority</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getPriority()"><CODE>DbMpoolFile.getPriority()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getPriority()">getPriority</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getPriority method returns the cache priority.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#set_priority(int)">set_priority</A></B>(int&nbsp;priority)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setPriority(int)">setPriority</A></B>(int&nbsp;priority)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the cache priority for pages from the specified file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getFlags()"><CODE>DbMpoolFile.getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getFlags method returns the flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#set_flags(int, boolean)">set_flags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>DbMpoolFile.setFlags(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)">setFlags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a file in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#get_maxsize()">get_maxsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><CODE>DbMpoolFile.getMaxsize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#getMaxsize()">getMaxsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFile.getMaxsize method returns the size of the cache in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#set_maxsize(long)">set_maxsize</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><CODE>DbMpoolFile.setMaxsize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbMpoolFile.</B><B><A HREF="../../../../com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)">setMaxsize</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum size for the file to be <b>bytes</b> bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLsn.</B><B><A HREF="../../../../com/sleepycat/db/DbLsn.html#get_file()">get_file</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLsn.html#getFile()"><CODE>DbLsn.getFile()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLsn.</B><B><A HREF="../../../../com/sleepycat/db/DbLsn.html#getFile()">getFile</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn.getFile method returns the DbLsn object's file number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLsn.</B><B><A HREF="../../../../com/sleepycat/db/DbLsn.html#get_offset()">get_offset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLsn.html#getOffset()"><CODE>DbLsn.getOffset()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLsn.</B><B><A HREF="../../../../com/sleepycat/db/DbLsn.html#getOffset()">getOffset</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn.getOffset method returns the DbLsn object's file number.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbLogc.</B><B><A HREF="../../../../com/sleepycat/db/DbLogc.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.close method discards the log cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLogc.</B><B><A HREF="../../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.get method returns records from the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.close method closes the Berkeley DB environment, freeing any allocated resources and closing any underlying subsystems.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lock_vec</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lockVector</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockVector method atomically obtains and releases one or more locks from the lock table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)">open</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.open method opens a Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;db_home,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.remove method destroys a Berkeley DB environment if it is not currently in use.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_cachesize(int, int, int)">set_cachesize</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_errcall(com.sleepycat.db.DbErrcall)">set_errcall</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrcall.html">DbErrcall</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler(DbErrorHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_feedback(com.sleepycat.db.DbEnvFeedback)">set_feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rep_limit(int, int)">set_rep_limit</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_tx_timestamp(java.util.Date)">set_tx_timestamp</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><CODE>DbEnv.setTxnTimestamp(java.util.Date)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)">setTxnTimestamp</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Date.html">Date</A>&nbsp;timestamp)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recover to the time specified by <b>timestamp</b> rather than to the most current possible date.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbremove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbRemove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbrename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbRename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_data_dirs()">get_data_dirs</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getDataDirs()"><CODE>DbEnv.getDataDirs()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getDataDirs()">getDataDirs</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getDataDirs method returns the array of directories.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_encrypt_flags()">get_encrypt_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getEncryptFlags()"><CODE>DbEnv.getEncryptFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getEncryptFlags()">getEncryptFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getEncryptFlags method returns the encryption flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getFlags()"><CODE>DbEnv.getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getFlags method returns the configuration flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_home()">get_home</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getDbEnvHome()"><CODE>DbEnv.getDbEnvHome()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getDbEnvHome()">getDbEnvHome</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getDbEnvHome method returns the database environment home directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_open_flags()">get_open_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getOpenFlags()"><CODE>DbEnv.getOpenFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getOpenFlags()">getOpenFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getOpenFlags method returns the open method flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_shm_key()">get_shm_key</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getSegmentId()"><CODE>DbEnv.getSegmentId()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getSegmentId()">getSegmentId</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getSegmentId method returns the base segment ID.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_tas_spins()">get_tas_spins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><CODE>DbEnv.getTestAndSetSpins()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getTestAndSetSpins()">getTestAndSetSpins</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTestAndSetSpins method returns the test-and-set spin count.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_tmp_dir()">get_tmp_dir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getTmpDir()"><CODE>DbEnv.getTmpDir()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getTmpDir()">getTmpDir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTmpDir method returns the database environment temporary file directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_verbose(int)">get_verbose</A></B>(int&nbsp;which)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getVerbose(int)"><CODE>DbEnv.getVerbose(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getVerbose(int)">getVerbose</A></B>(int&nbsp;which)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getVerbose method returns whether the specified <b>which</b> parameter is currently set or not.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_cachesize(long, int)">set_cachesize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setCacheSize(long, int)">setCacheSize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the shared memory buffer pool -- that is, the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_data_dir(java.lang.String)">set_data_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)">setDataDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the path of a directory to be used as the location of the access method database files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_encrypt(java.lang.String, int)">set_encrypt</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>DbEnv.setEncrypted(String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)">setEncrypted</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the password used by the Berkeley DB library to perform encryption and decryption.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_flags(int, boolean)">set_flags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setFlags(int, boolean)">setFlags</A></B>(int&nbsp;flags,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_mp_mmapsize(long)">set_mp_mmapsize</A></B>(long&nbsp;mp_mmapsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>DbEnv.setMemoryPoolMapSize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)">setMemoryPoolMapSize</A></B>(long&nbsp;mp_mmapsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Files that are opened read-only in the pool (and that satisfy a few other criteria) are, by default, mapped into the process address space instead of being copied into the local cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">set_rpc_server</A></B>(<A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">setRpcServer</A></B>(<A HREF="../../../../com/sleepycat/db/DbClient.html">DbClient</A>&nbsp;client,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;host,
+ long&nbsp;cl_timeout,
+ long&nbsp;sv_timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Establishes a connection for this <b>dbenv</b> to a RPC server.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_shm_key(long)">set_shm_key</A></B>(long&nbsp;shm_key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setSegmentId(long)"><CODE>DbEnv.setSegmentId(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setSegmentId(long)">setSegmentId</A></B>(long&nbsp;shm_key)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify a base segment ID for Berkeley DB environment shared memory regions created in system memory on VxWorks or systems supporting X/Open-style shared memory interfaces; for example, UNIX systems supporting <b>shmget</b>(2) and related System V IPC interfaces.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_tas_spins(int)">set_tas_spins</A></B>(int&nbsp;tas_spins)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><CODE>DbEnv.setTestAndSetSpins(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)">setTestAndSetSpins</A></B>(int&nbsp;tas_spins)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify that test-and-set mutexes should spin <b>tas_spins</b> times without blocking.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_timeout(long, int)">set_timeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setTimeout(long, int)">setTimeout</A></B>(long&nbsp;timeout,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setTimeout method sets timeout values for locks or transactions in the database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_tmp_dir(java.lang.String)">set_tmp_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><CODE>DbEnv.setTmpDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)">setTmpDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specify the path of a directory to be used as the location of temporary files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_tx_max(int)">set_tx_max</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setTxnMax(int)"><CODE>DbEnv.setTxnMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setTxnMax(int)">setTxnMax</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure the Berkeley DB database environment to support at least <b>max</b> active transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_app_dispatch(com.sleepycat.db.DbAppDispatch)">set_app_dispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)">setAppDispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>&nbsp;tx_recover)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_verbose(int, boolean)">set_verbose</A></B>(int&nbsp;which,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)">setVerbose</A></B>(int&nbsp;which,
+ boolean&nbsp;onoff)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setVerbose method turns specific additional informational and debugging messages in the Berkeley DB message output on and off.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[][]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lk_conflicts()">get_lk_conflicts</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockConflicts()"><CODE>DbEnv.getLockConflicts()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;byte[][]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockConflicts()">getLockConflicts</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockConflicts method returns the conflicts array.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lk_detect()">get_lk_detect</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockDetect()"><CODE>DbEnv.getLockDetect()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockDetect()">getLockDetect</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockDetect method returns the deadlock detector configuration.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lk_max_locks()">get_lk_max_locks</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><CODE>DbEnv.getLockMaxLocks()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxLocks()">getLockMaxLocks</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setLockMaxLocks method returns the maximum number of locks.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lk_max_lockers()">get_lk_max_lockers</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><CODE>DbEnv.getLockMaxLockers()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxLockers()">getLockMaxLockers</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockMaxLockers method returns the maximum number of lockers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lk_max_objects()">get_lk_max_objects</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><CODE>DbEnv.getLockMaxObjects()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLockMaxObjects()">getLockMaxObjects</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLockMaxObjects method returns the maximum number of locked objects.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_detect(int, int)">lock_detect</A></B>(int&nbsp;flags,
+ int&nbsp;atype)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockDetect(int, int)">lockDetect</A></B>(int&nbsp;flags,
+ int&nbsp;atype)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockDetect method runs one iteration of the deadlock detector.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)">lock_get</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)">lockGet</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_id()">lock_id</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockId()">lockId</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockId method returns a locker ID, which is guaranteed to be unique in the specified lock table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_id_free(int)">lock_id_free</A></B>(int&nbsp;id)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>DbEnv.lockIdFree(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockIdFree(int)">lockIdFree</A></B>(int&nbsp;id)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockIdFree method frees a locker ID allocated by the <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId</CODE></A> method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_put(com.sleepycat.db.DbLock)">lock_put</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>DbEnv.lockPut(DbLock)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)">lockPut</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockPut method releases <b>lock</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_stat(int)">lock_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>DbEnv.lockStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockStat(int)">lockStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockStat method returns the locking subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lk_conflicts(byte[][])">set_lk_conflicts</A></B>(byte[][]&nbsp;conflicts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>DbEnv.setLockConflicts(byte[][])</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])">setLockConflicts</A></B>(byte[][]&nbsp;conflicts)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the locking conflicts matrix.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lk_detect(int)">set_lk_detect</A></B>(int&nbsp;detect)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockDetect(int)">setLockDetect</A></B>(int&nbsp;detect)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set if the deadlock detector is to be run whenever a lock conflict occurs, and specify what lock request(s) should be rejected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lk_max_lockers(int)">set_lk_max_lockers</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><CODE>DbEnv.setLockMaxLockers(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)">setLockMaxLockers</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locking entities supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lk_max_locks(int)">set_lk_max_locks</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><CODE>DbEnv.setLockMaxLocks(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)">setLockMaxLocks</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locks supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lk_max_objects(int)">set_lk_max_objects</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><CODE>DbEnv.setLockMaxObjects(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)">setLockMaxObjects</A></B>(int&nbsp;max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum number of locked objects supported by the Berkeley DB environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lg_bsize()">get_lg_bsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogBufferSize()"><CODE>DbEnv.getLogBufferSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogBufferSize()">getLogBufferSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogBufferSize method returns the size of the log buffer, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lg_dir()">get_lg_dir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogDir()"><CODE>DbEnv.getLogDir()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogDir()">getLogDir</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogDir method returns the log directory.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lg_max()">get_lg_max</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogMax()"><CODE>DbEnv.getLogMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogMax()">getLogMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogMax method returns the maximum log file size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_lg_regionmax()">get_lg_regionmax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogRegionMax()"><CODE>DbEnv.getLogRegionMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getLogRegionMax()">getLogRegionMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getLogRegionMax method returns the size of the underlying logging subsystem region.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_archive(int)">log_archive</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logArchive(int)">logArchive</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logArchive method returns an array of log or database filenames.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_cursor(int)">log_cursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logCursor(int)">logCursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCursor method returns a created log cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_file(com.sleepycat.db.DbLsn)">log_file</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFile(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)">logFile</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFile method maps <A HREF="../../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to filenames, returning the name of the file containing the record named by <b>lsn</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_flush(com.sleepycat.db.DbLsn)">log_flush</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFlush(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)">logFlush</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFlush method writes log records to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">log_put</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logPut method appends records to the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_stat(int)">log_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>DbEnv.logStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logStat(int)">logStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logStat method returns the logging subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lg_bsize(int)">set_lg_bsize</A></B>(int&nbsp;lg_bsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>DbEnv.setLogBufferSize(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogBufferSize(int)">setLogBufferSize</A></B>(int&nbsp;lg_bsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the in-memory log buffer, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lg_dir(java.lang.String)">set_lg_dir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><CODE>DbEnv.setLogDir(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)">setLogDir</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;dir)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The path of a directory to be used as the location of logging files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lg_max(int)">set_lg_max</A></B>(int&nbsp;lg_max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>DbEnv.setLogMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogMax(int)">setLogMax</A></B>(int&nbsp;lg_max)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the maximum size of a single file in the log, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_lg_regionmax(int)">set_lg_regionmax</A></B>(int&nbsp;lg_regionmax)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><CODE>DbEnv.setLogRegionMax(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setLogRegionMax(int)">setLogRegionMax</A></B>(int&nbsp;lg_regionmax)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the underlying logging area of the Berkeley DB environment, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_cachesize()">get_cachesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getCacheSize()"><CODE>DbEnv.getCacheSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getCacheSize()">getCacheSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSize method returns the size of the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_cachesize_ncache()">get_cachesize_ncache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><CODE>DbEnv.getCacheSizeNcache()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getCacheSizeNcache()">getCacheSizeNcache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSizeNcache method returns the number of caches.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_mp_mmapsize()">get_mp_mmapsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><CODE>DbEnv.getMemoryPoolMapSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()">getMemoryPoolMapSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getMemoryPoolMapSize method returns the maximum file map size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memp_stat(int)">memp_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>DbEnv.memoryPoolStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)">memoryPoolStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolStat method returns the memory pool (that is, the buffer cache) subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memp_fstat(int)">memp_fstat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>DbEnv.memoryPoolFileStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)">memoryPoolFileStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolFileStat method creates an array of DbMpoolFStat objects containing statistics for individual files in the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memp_trickle(int)">memp_trickle</A></B>(int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)">memoryPoolTrickle</A></B>(int&nbsp;percent)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolTrickle method ensures that a specified percent of the pages in the shared memory pool are clean, by writing dirty pages to their backing files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_tx_max()">get_tx_max</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getTxnMax()"><CODE>DbEnv.getTxnMax()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getTxnMax()">getTxnMax</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTxnMax method returns the number of active transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_tx_timestamp()">get_tx_timestamp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><CODE>DbEnv.getTxnTimestamp()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getTxnTimestamp()">getTxnTimestamp</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTxnTimestamp method returns the recovery timestamp.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_timeout(int)">get_timeout</A></B>(int&nbsp;flag)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>DbEnv.getTimeout(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getTimeout(int)">getTimeout</A></B>(int&nbsp;flag)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getTimeout method returns a timeout value, in microseconds.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)">txn_begin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)">txnBegin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="../../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_checkpoint(int, int, int)">txn_checkpoint</A></B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint(int,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)">txnCheckpoint</A></B>(int&nbsp;kbyte,
+ int&nbsp;min,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnCheckpoint method flushes the underlying memory pool, writes a checkpoint record to the log, and then flushes the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_recover(int, int)">txn_recover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)">txnRecover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnRecover method returns a list of prepared but not yet resolved transactions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_stat(int)">txn_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>DbEnv.txnStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnStat(int)">txnStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnStat method returns the transaction subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#get_rep_limit()">get_rep_limit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#getReplicationLimit()"><CODE>DbEnv.getReplicationLimit()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#getReplicationLimit()">getReplicationLimit</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getReplicationLimit method returns the transmit limit in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_elect(int, int, int)">rep_elect</A></B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect(int,int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)">replicationElect</A></B>(int&nbsp;nsites,
+ int&nbsp;priority,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationElect method holds an election for the master of a replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_start(com.sleepycat.db.Dbt, int)">rep_start</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)">replicationStart</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStart method configures the database environment as a client or master in a group of replicated database environments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_stat(int)">rep_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>DbEnv.replicationStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStat(int)">replicationStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStat method returns the replication subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rep_limit(long)">set_rep_limit</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationLimit(long)">setReplicationLimit</A></B>(long&nbsp;bytes)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.setReplicationLimit method imposes a byte-count limit on the amount of data that will be transmitted from a site in a single call to <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A> method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rep_transport(int, com.sleepycat.db.DbRepTransport)">set_rep_transport</A></B>(int&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)">setReplicationTransport</A></B>(int&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#close()">close</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.close method discards the cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#count(int)">count</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.count method returns a count of the number of data items for the key to which the cursor refers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#del(int)">del</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#delete(int)">delete</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.delete method deletes the key/data pair to which the cursor refers.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#dup(int)">dup</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.dup method creates a new cursor that uses the same transaction and locker ID as the original cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.put method stores key/data pairs into the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbAppendRecno.</B><B><A HREF="../../../../com/sleepycat/db/DbAppendRecno.html#dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)">dbAppendRecno</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppendRecno interface is used by the Db.setAppendRecno method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#close(int)">close</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.close method flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_env()">get_env</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getDbEnv()"><CODE>Db.getDbEnv()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getDbEnv()">getDbEnv</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDbEnv method returns the handle for the database environment underlying the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#isEncrypted()">isEncrypted</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <A HREF="../../../../com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method returns false if the underlying database files are encrypted and true if they are not.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)">open</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#remove(java.lang.String, java.lang.String, int)">remove</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.remove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#rename(java.lang.String, java.lang.String, java.lang.String, int)">rename</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.rename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)">verify</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html">OutputStream</A>&nbsp;outfile,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.verify method verifies the integrity of all databases in the file specified by the <b>file</b> parameter, and optionally outputs the databases' key/data pairs to the file stream specified by the <b>outfile</b> parameter.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_cachesize(int, int, int)">set_cachesize</A></B>(int&nbsp;gbytes,
+ int&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>Db.setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)">setErrorHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>&nbsp;db_errcall_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When an error occurs in the Berkeley DB library, an exception is thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_feedback(com.sleepycat.db.DbFeedback)">set_feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>Db.setFeedbackHandler(DbFeedbackHandler)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)">associate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)">cursor</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.cursor method returns a created database cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">del</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>Db.delete(DbTxn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.delete method removes key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_byteswapped()">get_byteswapped</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#isByteSwapped()"><CODE>Db.isByteSwapped()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#isByteSwapped()">isByteSwapped</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.isByteSwapped method returns false if the underlying database files were created on an architecture of the same byte order as the current one, and true if they were not (that is, big-endian on a little-endian machine, or vice versa).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_cachesize()">get_cachesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getCacheSize()"><CODE>Db.getCacheSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;long</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getCacheSize()">getCacheSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getCacheSize method returns the size of the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_cachesize_ncache()">get_cachesize_ncache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getCacheSizeNcache()"><CODE>Db.getCacheSizeNcache()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getCacheSizeNcache()">getCacheSizeNcache</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.getCacheSizeNcache method returns the number of caches.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_filename()">get_filename</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getFileName()"><CODE>Db.getFileName()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getFileName()">getFileName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getFileName method returns the current filename.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_dbname()">get_dbname</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getDatabaseName()"><CODE>Db.getDatabaseName()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getDatabaseName()">getDatabaseName</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDatabaseName method returns the current database name.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_encrypt_flags()">get_encrypt_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getEncryptFlags()"><CODE>Db.getEncryptFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getEncryptFlags()">getEncryptFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getEncryptFlags method returns the encryption flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_flags()">get_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getFlags()"><CODE>Db.getFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getFlags method returns the current flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_lorder()">get_lorder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getByteOrder()"><CODE>Db.getByteOrder()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getByteOrder()">getByteOrder</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getByteOrder method returns the database byte order; a byte order of 4,321 indicates a big endian order, and a byte order of 1,234 indicates a little endian order.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_mpf()">get_mpf</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get_mpf method returns the handle for the cache file underlying the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_open_flags()">get_open_flags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getOpenFlags()"><CODE>Db.getOpenFlags()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getOpenFlags()">getOpenFlags</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getOpenFlags method returns the current open method flags.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_pagesize()">get_pagesize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getPageSize()"><CODE>Db.getPageSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getPageSize()">getPageSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getPageSize method returns the page size.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_bt_minkey()">get_bt_minkey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getBtreeMinKey()"><CODE>Db.getBtreeMinKey()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getBtreeMinKey()">getBtreeMinKey</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getBtreeMinKey method returns the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_h_ffactor()">get_h_ffactor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getHashFillFactor()"><CODE>Db.getHashFillFactor()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getHashFillFactor()">getHashFillFactor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getHashFillFactor method returns the hash table density.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_h_nelem()">get_h_nelem</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getHashNumElements()"><CODE>Db.getHashNumElements()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getHashNumElements()">getHashNumElements</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getHashNumElements method returns the estimate of the final size of the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_re_delim()">get_re_delim</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getRecordDelimiter()"><CODE>Db.getRecordDelimiter()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getRecordDelimiter()">getRecordDelimiter</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordDelimiter method returns the delimiting byte.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_re_len()">get_re_len</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getRecordLength()"><CODE>Db.getRecordLength()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getRecordLength()">getRecordLength</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordLength method returns the record length.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_re_pad()">get_re_pad</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getRecordPad()"><CODE>Db.getRecordPad()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getRecordPad()">getRecordPad</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordPad method returns the pad character.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_re_source()">get_re_source</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getRecordSource()"><CODE>Db.getRecordSource()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getRecordSource()">getRecordSource</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getRecordSource method returns the source file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_q_extentsize()">get_q_extentsize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getQueueExtentSize()"><CODE>Db.getQueueExtentSize()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getQueueExtentSize()">getQueueExtentSize</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getQueueExtentSize method returns the number of pages in an extent.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_flags_raw()">get_flags_raw</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_transactional()">get_transactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#isTransactional()"><CODE>Db.isTransactional()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#isTransactional()">isTransactional</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.isTransactional method returns true if the <A HREF="../../../../com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle has been opened in a transactional mode.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_type()">get_type</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#getDbType()"><CODE>Db.getDbType()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#getDbType()">getDbType</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.getDbType method returns the type of the underlying access method (and file format).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)">join</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>[]&nbsp;curslist,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">key_range</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>Db.keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">keyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.put method stores key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_append_recno(com.sleepycat.db.DbAppendRecno)">set_append_recno</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>Db.setAppendRecno(DbAppendRecno)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)">setAppendRecno</A></B>(<A HREF="../../../../com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>&nbsp;db_append_recno_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_compare(com.sleepycat.db.DbBtreeCompare)">set_bt_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>Db.setBtreeCompare(DbBtreeCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)">setBtreeCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>&nbsp;bt_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_maxkey(int)">set_bt_maxkey</A></B>(int&nbsp;maxkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_minkey(int)">set_bt_minkey</A></B>(int&nbsp;bt_minkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setBtreeMinKey(int)"><CODE>Db.setBtreeMinKey(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setBtreeMinKey(int)">setBtreeMinKey</A></B>(int&nbsp;bt_minkey)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the minimum number of key/data pairs intended to be stored on any single Btree leaf page.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_bt_prefix(com.sleepycat.db.DbBtreePrefix)">set_bt_prefix</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>Db.setBtreePrefix(DbBtreePrefix)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)">setBtreePrefix</A></B>(<A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>&nbsp;bt_prefix_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_cachesize(long, int)">set_cachesize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>Db.setCacheSize(long,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setCacheSize(long, int)">setCacheSize</A></B>(long&nbsp;bytes,
+ int&nbsp;ncache)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the shared memory buffer pool -- that is, the cache.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_dup_compare(com.sleepycat.db.DbDupCompare)">set_dup_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>Db.setDuplicateCompare(DbDupCompare)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)">setDuplicateCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>&nbsp;dup_compare_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_encrypt(java.lang.String, int)">set_encrypt</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>Db.setEncrypted(String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)">setEncrypted</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;passwd,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the password used by the Berkeley DB library to perform encryption and decryption.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_flags(int)">set_flags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setFlags(int)"><CODE>Db.setFlags(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setFlags(int)">setFlags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure a database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_h_ffactor(int)">set_h_ffactor</A></B>(int&nbsp;h_ffactor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>Db.setHashFillFactor(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setHashFillFactor(int)">setHashFillFactor</A></B>(int&nbsp;h_ffactor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the desired density within the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_h_hash(com.sleepycat.db.DbHash)">set_h_hash</A></B>(<A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>Db.setHash(DbHash)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)">setHash</A></B>(<A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_h_nelem(int)">set_h_nelem</A></B>(int&nbsp;h_nelem)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setHashNumElements(int)"><CODE>Db.setHashNumElements(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setHashNumElements(int)">setHashNumElements</A></B>(int&nbsp;h_nelem)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set an estimate of the final size of the hash table.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_lorder(int)">set_lorder</A></B>(int&nbsp;lorder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setByteOrder(int)"><CODE>Db.setByteOrder(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setByteOrder(int)">setByteOrder</A></B>(int&nbsp;lorder)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the byte order for integers in the stored database metadata.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_pagesize(long)">set_pagesize</A></B>(long&nbsp;pagesize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setPageSize(long)"><CODE>Db.setPageSize(long)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setPageSize(long)">setPageSize</A></B>(long&nbsp;pagesize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the pages used to hold items in the database, in bytes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_re_delim(int)">set_re_delim</A></B>(int&nbsp;re_delim)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>Db.setRecordDelimiter(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setRecordDelimiter(int)">setRecordDelimiter</A></B>(int&nbsp;re_delim)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the delimiting byte used to mark the end of a record in the backing source file for the Recno access method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_re_len(int)">set_re_len</A></B>(int&nbsp;re_len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setRecordLength(int)"><CODE>Db.setRecordLength(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setRecordLength(int)">setRecordLength</A></B>(int&nbsp;re_len)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For the Queue access method, specify that the records are of length <b>re_len</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_re_pad(int)">set_re_pad</A></B>(int&nbsp;re_pad)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>Db.setRecordPad(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setRecordPad(int)">setRecordPad</A></B>(int&nbsp;re_pad)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the padding character for short, fixed-length records for the Queue and Recno access methods.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_re_source(java.lang.String)">set_re_source</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><CODE>Db.setRecordSource(String)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setRecordSource(java.lang.String)">setRecordSource</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;source)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the underlying source file for the Recno access method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_q_extentsize(int)">set_q_extentsize</A></B>(int&nbsp;extentsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setQueueExtentSize(int)"><CODE>Db.setQueueExtentSize(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setQueueExtentSize(int)">setQueueExtentSize</A></B>(int&nbsp;extentsize)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the size of the extents used to hold pages in a Queue database, specified as a number of pages.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#stat(int)">stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.stat method creates a statistical structure and fills it with statistics for the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#sync(int)">sync</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.sync method flushes any cached information to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#truncate(com.sleepycat.db.DbTxn, int)">truncate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.truncate method empties the database, discarding all records it contains.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#upgrade(java.lang.String, int)">upgrade</A></B>(<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.upgrade method upgrades all of the databases included in the file <b>file</b>, if necessary.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DbException.html">DbException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLsn.html#DbLsn(int, int)">DbLsn</A></B>(int&nbsp;file,
+ int&nbsp;offset)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn constructor constructs a DbLsn with the specified file and offset.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#DbEnv(int)">DbEnv</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor creates the DbEnv object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/Db.html#Db(com.sleepycat.db.DbEnv, int)">Db</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor creates a Db object that is the handle for a Berkeley DB database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbFeedback.html b/db/docs/java/com/sleepycat/db/class-use/DbFeedback.html
new file mode 100644
index 000000000..85c73d226
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbFeedback.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbFeedback (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbFeedback.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbFeedback</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_feedback(com.sleepycat.db.DbFeedback)">set_feedback</A></B>(<A HREF="../../../../com/sleepycat/db/DbFeedback.html">DbFeedback</A>&nbsp;feedback)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>Db.setFeedbackHandler(DbFeedbackHandler)</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbFeedback.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedback.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbFeedbackHandler.html b/db/docs/java/com/sleepycat/db/class-use/DbFeedbackHandler.html
new file mode 100644
index 000000000..7e925fbbf
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbFeedbackHandler.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbFeedbackHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbFeedbackHandler</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)">setFeedbackHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>&nbsp;db_feedback_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbFeedbackHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbFeedbackHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbHash.html b/db/docs/java/com/sleepycat/db/class-use/DbHash.html
new file mode 100644
index 000000000..ca60dc566
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbHash.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbHash (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbHash (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbHash.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHash.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbHash</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#set_h_hash(com.sleepycat.db.DbHash)">set_h_hash</A></B>(<A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>Db.setHash(DbHash)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)">setHash</A></B>(<A HREF="../../../../com/sleepycat/db/DbHash.html">DbHash</A>&nbsp;h_hash_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbHash.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHash.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbHashStat.html b/db/docs/java/com/sleepycat/db/class-use/DbHashStat.html
new file mode 100644
index 000000000..0bdc498a0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbHashStat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbHashStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbHashStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbHashStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHashStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbHashStat</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbHashStat
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbHashStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbHashStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbKeyRange.html b/db/docs/java/com/sleepycat/db/class-use/DbKeyRange.html
new file mode 100644
index 000000000..4f3f4677d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbKeyRange.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbKeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbKeyRange (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbKeyRange.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbKeyRange.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbKeyRange</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">key_range</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>Db.keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">keyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbKeyRange.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbKeyRange.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLock.html b/db/docs/java/com/sleepycat/db/class-use/DbLock.html
new file mode 100644
index 000000000..bcacb4ce1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLock.html
@@ -0,0 +1,275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLock (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLock (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLock.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLock.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLock</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#getLock()">getLock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getLock method returns the lock reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#get_lock()">get_lock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockRequest.html#getLock()"><CODE>DbLockRequest.getLock()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockNotGrantedException.</B><B><A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#getLock()">getLock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getLock</b> method returns null when <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>lock</b> in the failed DbLockRequest when <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockNotGrantedException.</B><B><A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#get_lock()">get_lock</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><CODE>DbLockNotGrantedException.getLock()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)">lock_get</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)">lockGet</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)">setLock</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setLock method sets the lock reference.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#set_lock(com.sleepycat.db.DbLock)">set_lock</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><CODE>DbLockRequest.setLock(DbLock)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_put(com.sleepycat.db.DbLock)">lock_put</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>DbEnv.lockPut(DbLock)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)">lockPut</A></B>(<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockPut method releases <b>lock</b>.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode and lock, for the specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock, int)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode, lock and timeout for the specified object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLock.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLock.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLockNotGrantedException.html b/db/docs/java/com/sleepycat/db/class-use/DbLockNotGrantedException.html
new file mode 100644
index 000000000..48dd695a2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLockNotGrantedException.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLockNotGrantedException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockNotGrantedException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLockNotGrantedException</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that throw <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbremove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbRemove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbrename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbRename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)">open</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockNotGrantedException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLockRequest.html b/db/docs/java/com/sleepycat/db/class-use/DbLockRequest.html
new file mode 100644
index 000000000..d78bb24c7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLockRequest.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLockRequest (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockRequest.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockRequest.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLockRequest</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lock_vec</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)">lockVector</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>[]&nbsp;list,
+ int&nbsp;offset,
+ int&nbsp;count)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockVector method atomically obtains and releases one or more locks from the lock table.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockRequest.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockRequest.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLockStat.html b/db/docs/java/com/sleepycat/db/class-use/DbLockStat.html
new file mode 100644
index 000000000..b35ab2518
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLockStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLockStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLockStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLockStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_stat(int)">lock_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>DbEnv.lockStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLockStat.html">DbLockStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockStat(int)">lockStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockStat method returns the locking subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLockStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLockStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLogStat.html b/db/docs/java/com/sleepycat/db/class-use/DbLogStat.html
new file mode 100644
index 000000000..eb446057a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLogStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLogStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLogStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLogStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLogStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_stat(int)">log_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>DbEnv.logStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogStat.html">DbLogStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logStat(int)">logStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logStat method returns the logging subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLogStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLogc.html b/db/docs/java/com/sleepycat/db/class-use/DbLogc.html
new file mode 100644
index 000000000..ad204ac63
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLogc.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLogc (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLogc (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLogc.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLogc</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_cursor(int)">log_cursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLogc.html">DbLogc</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logCursor(int)">logCursor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCursor method returns a created log cursor.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLogc.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLogc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbLsn.html b/db/docs/java/com/sleepycat/db/class-use/DbLsn.html
new file mode 100644
index 000000000..f1241d74a
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbLsn.html
@@ -0,0 +1,346 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbLsn (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbLsn (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLsn.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLsn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbLsn</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B>DbTxnStat.</B><B><A HREF="../../../../com/sleepycat/db/DbTxnStat.html#st_last_ckp">st_last_ckp</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The LSN of the last checkpoint.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B>DbTxnStat.Active.</B><B><A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html#lsn">lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The current log sequence number when the transaction was begun.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B>DbRepStat.</B><B><A HREF="../../../../com/sleepycat/db/DbRepStat.html#st_next_lsn">st_next_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In replication environments configured as masters, the next LSN expected.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B>DbRepStat.</B><B><A HREF="../../../../com/sleepycat/db/DbRepStat.html#st_waiting_lsn">st_waiting_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The LSN of the first log record we have after missing log records being waited for, or 0 if no log records are currently missing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></CODE></FONT></TD>
+<TD><CODE><B>DbRepStat.</B><B><A HREF="../../../../com/sleepycat/db/DbRepStat.html#st_election_lsn">st_election_lsn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The maximum LSN of election winner.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbRepTransport.</B><B><A HREF="../../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLogc.</B><B><A HREF="../../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.get method returns records from the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">log_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>DbEnv.logCompare(DbLsn,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">log_compare</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>DbEnv.logCompare(DbLsn,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">logCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCompare method allows the caller to compare two <A HREF="../../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects, returning 0 if they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">logCompare</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn0,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn1)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logCompare method allows the caller to compare two <A HREF="../../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects, returning 0 if they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_file(com.sleepycat.db.DbLsn)">log_file</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFile(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)">logFile</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFile method maps <A HREF="../../../../com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to filenames, returning the name of the file containing the record named by <b>lsn</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_flush(com.sleepycat.db.DbLsn)">log_flush</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFlush(DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)">logFlush</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logFlush method writes log records to disk.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">log_put</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logPut method appends records to the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbAppDispatch.</B><B><A HREF="../../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)">appDispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;log_rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppDispatch interface is used by the DbEnv.setAppDispatch method.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbLsn.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbLsn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMemoryException.html b/db/docs/java/com/sleepycat/db/class-use/DbMemoryException.html
new file mode 100644
index 000000000..0f43d9e00
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMemoryException.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMemoryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMemoryException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMemoryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMemoryException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbMemoryException
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMemoryException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMemoryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMpoolFStat.html b/db/docs/java/com/sleepycat/db/class-use/DbMpoolFStat.html
new file mode 100644
index 000000000..1214f2b17
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMpoolFStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMpoolFStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMpoolFStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMpoolFStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memp_fstat(int)">memp_fstat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>DbEnv.memoryPoolFileStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)">memoryPoolFileStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolFileStat method creates an array of DbMpoolFStat objects containing statistics for individual files in the cache.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolFStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMpoolFile.html b/db/docs/java/com/sleepycat/db/class-use/DbMpoolFile.html
new file mode 100644
index 000000000..51ef941f2
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMpoolFile.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMpoolFile (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMpoolFile (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFile.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMpoolFile</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get_mpf()">get_mpf</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get_mpf method returns the handle for the cache file underlying the database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolFile.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolFile.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMpoolStat.html b/db/docs/java/com/sleepycat/db/class-use/DbMpoolStat.html
new file mode 100644
index 000000000..09c0c4f8f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMpoolStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMpoolStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMpoolStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMpoolStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memp_stat(int)">memp_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>DbEnv.memoryPoolStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#memoryPoolStat(int)">memoryPoolStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.memoryPoolStat method returns the memory pool (that is, the buffer cache) subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMpoolStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMpoolStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMultipleDataIterator.html b/db/docs/java/com/sleepycat/db/class-use/DbMultipleDataIterator.html
new file mode 100644
index 000000000..0f172c7ab
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMultipleDataIterator.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMultipleDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMultipleDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMultipleDataIterator</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbMultipleDataIterator
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMultipleKeyDataIterator.html b/db/docs/java/com/sleepycat/db/class-use/DbMultipleKeyDataIterator.html
new file mode 100644
index 000000000..3341f312d
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMultipleKeyDataIterator.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMultipleKeyDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMultipleKeyDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleKeyDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMultipleKeyDataIterator</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbMultipleKeyDataIterator
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleKeyDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbMultipleRecnoDataIterator.html b/db/docs/java/com/sleepycat/db/class-use/DbMultipleRecnoDataIterator.html
new file mode 100644
index 000000000..40b301815
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbMultipleRecnoDataIterator.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbMultipleRecnoDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbMultipleRecnoDataIterator (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleRecnoDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbMultipleRecnoDataIterator</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbMultipleRecnoDataIterator
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbMultipleRecnoDataIterator.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbPanicHandler.html b/db/docs/java/com/sleepycat/db/class-use/DbPanicHandler.html
new file mode 100644
index 000000000..1f6831b08
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbPanicHandler.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbPanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbPanicHandler (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbPanicHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPanicHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbPanicHandler</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)">setPanicHandler</A></B>(<A HREF="../../../../com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>&nbsp;db_panic_fcn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory).</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbPanicHandler.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPanicHandler.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbPreplist.html b/db/docs/java/com/sleepycat/db/class-use/DbPreplist.html
new file mode 100644
index 000000000..446fd943e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbPreplist.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbPreplist (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbPreplist (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbPreplist.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPreplist.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbPreplist</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_recover(int, int)">txn_recover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbPreplist.html">DbPreplist</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnRecover(int, int)">txnRecover</A></B>(int&nbsp;count,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnRecover method returns a list of prepared but not yet resolved transactions.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbPreplist.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbPreplist.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbQueueStat.html b/db/docs/java/com/sleepycat/db/class-use/DbQueueStat.html
new file mode 100644
index 000000000..d33834c6f
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbQueueStat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbQueueStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbQueueStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbQueueStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbQueueStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbQueueStat</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbQueueStat
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbQueueStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbQueueStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbRepStat.html b/db/docs/java/com/sleepycat/db/class-use/DbRepStat.html
new file mode 100644
index 000000000..b77159d60
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbRepStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbRepStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbRepStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRepStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbRepStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_stat(int)">rep_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>DbEnv.replicationStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbRepStat.html">DbRepStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStat(int)">replicationStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStat method returns the replication subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRepStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbRepTransport.html b/db/docs/java/com/sleepycat/db/class-use/DbRepTransport.html
new file mode 100644
index 000000000..376d5dd3e
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbRepTransport.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbRepTransport (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbRepTransport (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRepTransport.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepTransport.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbRepTransport</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#set_rep_transport(int, com.sleepycat.db.DbRepTransport)">set_rep_transport</A></B>(int&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)">setReplicationTransport</A></B>(int&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>&nbsp;send)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRepTransport.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRepTransport.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbRunRecoveryException.html b/db/docs/java/com/sleepycat/db/class-use/DbRunRecoveryException.html
new file mode 100644
index 000000000..633b5b3e0
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbRunRecoveryException.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbRunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbRunRecoveryException (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRunRecoveryException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRunRecoveryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbRunRecoveryException</B></H2>
+</CENTER>
+No usage of com.sleepycat.db.DbRunRecoveryException
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbRunRecoveryException.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbRunRecoveryException.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbSecondaryKeyCreate.html b/db/docs/java/com/sleepycat/db/class-use/DbSecondaryKeyCreate.html
new file mode 100644
index 000000000..2dbe96fc7
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbSecondaryKeyCreate.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Interface com.sleepycat.db.DbSecondaryKeyCreate (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Interface com.sleepycat.db.DbSecondaryKeyCreate (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbSecondaryKeyCreate.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Interface<br>com.sleepycat.db.DbSecondaryKeyCreate</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)">associate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbSecondaryKeyCreate.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbTxn.html b/db/docs/java/com/sleepycat/db/class-use/DbTxn.html
new file mode 100644
index 000000000..45307d77b
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbTxn.html
@@ -0,0 +1,460 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbTxn (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbTxn (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxn.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbTxn</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#getTxn()">getTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the transaction associated with the current thread for this
+ environment, or null if no transaction is active.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn()">beginTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#beginTxn(boolean, boolean)">beginTxn</A></B>(boolean&nbsp;dirtyRead,
+ boolean&nbsp;noWait)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Begins a new transaction for this environment and associates it with
+ the current thread.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#commitTxn()">commitTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commits the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>CurrentTransaction.</B><B><A HREF="../../../../com/sleepycat/bdb/CurrentTransaction.html#abortTxn()">abortTxn</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aborts the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbPreplist.</B><B><A HREF="../../../../com/sleepycat/db/DbPreplist.html#txn">txn</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The transaction handle for the transaction.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)">txn_begin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)">txnBegin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="../../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbremove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">dbRemove</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbrename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">dbRename</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;newname,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)">txn_begin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)">txnBegin</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;parent,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="../../../../com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)">open</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;file,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A>&nbsp;database,
+ int&nbsp;type,
+ int&nbsp;flags,
+ int&nbsp;mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)">associate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>&nbsp;callback,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)">cursor</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.cursor method returns a created database cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">del</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>Db.delete(DbTxn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.delete method removes key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">key_range</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>Db.keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">keyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.put method stores key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#truncate(com.sleepycat.db.DbTxn, int)">truncate</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.truncate method empties the database, discarding all records it contains.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxn.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxn.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.Active.html b/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.Active.html
new file mode 100644
index 000000000..048bd01d1
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.Active.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbTxnStat.Active (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbTxnStat.Active (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.Active.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbTxnStat.Active</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Fields in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> declared as <A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>[]</CODE></FONT></TD>
+<TD><CODE><B>DbTxnStat.</B><B><A HREF="../../../../com/sleepycat/db/DbTxnStat.html#st_txnarray">st_txnarray</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxnStat.Active.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.Active.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.html b/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.html
new file mode 100644
index 000000000..664d7a451
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/DbTxnStat.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.DbTxnStat (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.DbTxnStat (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxnStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.DbTxnStat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txn_stat(int)">txn_stat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>DbEnv.txnStat(int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbTxnStat.html">DbTxnStat</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#txnStat(int)">txnStat</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.txnStat method returns the transaction subsystem statistics.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/DbTxnStat.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="DbTxnStat.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Dbc.html b/db/docs/java/com/sleepycat/db/class-use/Dbc.html
new file mode 100644
index 000000000..fe0f40b95
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/Dbc.html
@@ -0,0 +1,285 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.Dbc (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.Dbc (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Dbc.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.Dbc</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> that return <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#openCursor(boolean)">openCursor</A></B>(boolean&nbsp;writeCursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Opens a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#dupCursor(com.sleepycat.db.Dbc, boolean, int)">dupCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ boolean&nbsp;writeCursor,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Duplicates a cursor for this database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;val,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'get' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Performs a general database 'put' operation via a cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#dupCursor(com.sleepycat.db.Dbc, boolean, int)">dupCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor,
+ boolean&nbsp;writeCursor,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Duplicates a cursor for this database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataDb.</B><B><A HREF="../../../../com/sleepycat/bdb/DataDb.html#closeCursor(com.sleepycat.db.Dbc)">closeCursor</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>&nbsp;cursor)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Closes a cursor for this database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#dup(int)">dup</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.dup method creates a new cursor that uses the same transaction and locker ID as the original cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)">cursor</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.cursor method returns a created database cursor.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)">join</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>[]&nbsp;curslist,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A></CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)">join</A></B>(<A HREF="../../../../com/sleepycat/db/Dbc.html">Dbc</A>[]&nbsp;curslist,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Dbc.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/class-use/Dbt.html b/db/docs/java/com/sleepycat/db/class-use/Dbt.html
new file mode 100644
index 000000000..871ead714
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/class-use/Dbt.html
@@ -0,0 +1,909 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:03 EST 2003 -->
+<TITLE>
+Uses of Class com.sleepycat.db.Dbt (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Class com.sleepycat.db.Dbt (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Dbt.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbt.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>com.sleepycat.db.Dbt</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A> in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html">DataThang</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="../../../../com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DataThang.</B><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#compareTo(com.sleepycat.db.Dbt)">compareTo</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns -1 if the byte array of this thang is less than that of the
+ given thang, 0 if they are equal, or 1 if greater.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DataThang.</B><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#equals(com.sleepycat.db.Dbt)">equals</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;other)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns whether the byte array of this thang is equal to that of the
+ given thang.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DataThang.</B><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#dump(com.sleepycat.db.Dbt, java.io.PrintStream)">dump</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt,
+ <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/PrintStream.html">PrintStream</A>&nbsp;out)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prints the byte array of the given thing to the given stream using
+ toString() to convert the bytes to a string.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A></CODE></FONT></TD>
+<TD><CODE><B>DataThang.</B><B><A HREF="../../../../com/sleepycat/bdb/DataThang.html#toString(com.sleepycat.db.Dbt)">toString</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A> in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> that return <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbMemoryException.</B><B><A HREF="../../../../com/sleepycat/db/DbMemoryException.html#getDbt()">getDbt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getDbt</b> method returns the <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> with insufficient memory to complete the operation, causing the DbMemoryException to be thrown.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbMemoryException.</B><B><A HREF="../../../../com/sleepycat/db/DbMemoryException.html#get_dbt()">get_dbt</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbMemoryException.html#getDbt()"><CODE>DbMemoryException.getDbt()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#getObj()">getObj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.getObj method returns the object protected by this lock.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#get_obj()">get_obj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockRequest.html#getObj()"><CODE>DbLockRequest.getObj()</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockNotGrantedException.</B><B><A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#getObj()">getObj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The <b>getObj</b> method returns the <b>mode</b> parameter when returns the <b>object</b> parameter when <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>object</b> for the failed DbLockRequest when <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></CODE></FONT></TD>
+<TD><CODE><B>DbLockNotGrantedException.</B><B><A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#get_obj()">get_obj</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><CODE>DbLockNotGrantedException.getObj()</CODE></A></I></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbSecondaryKeyCreate.</B><B><A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbSecondaryKeyCreate.</B><B><A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbSecondaryKeyCreate.</B><B><A HREF="../../../../com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">secondaryKeyCreate</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;secondary,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;result)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The secondaryKeyCreate interface is used by the Db.associate method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbRepTransport.</B><B><A HREF="../../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbRepTransport.</B><B><A HREF="../../../../com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)">send</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;flags,
+ int&nbsp;envid)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbMultipleRecnoDataIterator.</B><B><A HREF="../../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleRecnoDataIterator.next method takes two <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbMultipleRecnoDataIterator.</B><B><A HREF="../../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleRecnoDataIterator.next method takes two <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbMultipleKeyDataIterator.</B><B><A HREF="../../../../com/sleepycat/db/DbMultipleKeyDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleKeyDataIterator.next method takes two <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbMultipleKeyDataIterator.</B><B><A HREF="../../../../com/sleepycat/db/DbMultipleKeyDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleKeyDataIterator.next method takes two <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;boolean</CODE></FONT></TD>
+<TD><CODE><B>DbMultipleDataIterator.</B><B><A HREF="../../../../com/sleepycat/db/DbMultipleDataIterator.html#next(com.sleepycat.db.Dbt)">next</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMultipleDataIterator.next method takes a <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> that will be filled in with a reference to a buffer, a size, and an offset that together yield the next data item in the original bulk retrieval buffer.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbLogc.</B><B><A HREF="../../../../com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc.get method returns records from the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)">setObj</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest.setObj method sets the lock object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbLockRequest.</B><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#set_obj(com.sleepycat.db.Dbt)">set_obj</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><CODE>DbLockRequest.setObj(Dbt)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)">lock_get</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A></CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)">lockGet</A></B>(int&nbsp;locker,
+ int&nbsp;flags,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;object,
+ int&nbsp;lock_mode)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">log_put</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">logPut</A></B>(<A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.logPut method appends records to the log.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">rep_process_message</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">replicationProcessMessage</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;control,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;rec,
+ <A HREF="../../../../com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>&nbsp;envid,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;ret_lsn)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#rep_start(com.sleepycat.db.Dbt, int)">rep_start</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbEnv.</B><B><A HREF="../../../../com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)">replicationStart</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;cdata,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv.replicationStart method configures the database environment as a client or master in a group of replicated database environments.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbDupCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbDupCompare.html#compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compareDuplicates</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbDupCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbDupCompare.html#compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compareDuplicates</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.put method stores key/data pairs into the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Dbc.</B><B><A HREF="../../../../com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc.put method stores key/data pairs into the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreePrefix.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html#prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">prefix</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreePrefix interface is used by the Db.setBtreePrefix method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreePrefix.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreePrefix.html#prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">prefix</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreePrefix interface is used by the Db.setBtreePrefix method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreeCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html#compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compare</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreeCompare interface is used by the Db.setBtreeCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbBtreeCompare.</B><B><A HREF="../../../../com/sleepycat/db/DbBtreeCompare.html#compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)">compare</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt1,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt2)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbBtreeCompare interface is used by the Db.setBtreeCompare method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>DbAppendRecno.</B><B><A HREF="../../../../com/sleepycat/db/DbAppendRecno.html#dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)">dbAppendRecno</A></B>(<A HREF="../../../../com/sleepycat/db/Db.html">Db</A>&nbsp;db,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;recno)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppendRecno interface is used by the Db.setAppendRecno method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>DbAppDispatch.</B><B><A HREF="../../../../com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)">appDispatch</A></B>(<A HREF="../../../../com/sleepycat/db/DbEnv.html">DbEnv</A>&nbsp;dbenv,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;log_rec,
+ <A HREF="../../../../com/sleepycat/db/DbLsn.html">DbLsn</A>&nbsp;lsn,
+ int&nbsp;op)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbAppDispatch interface is used by the DbEnv.setAppDispatch method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">pget</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">del</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>Db.delete(DbTxn,Dbt,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">delete</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.delete method removes key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">key_range</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>Db.keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">keyRange</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>&nbsp;key_range,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">get</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;pkey,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.get method retrieves key/data pairs from the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.put method stores key/data pairs in the database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;int</CODE></FONT></TD>
+<TD><CODE><B>Db.</B><B><A HREF="../../../../com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">put</A></B>(<A HREF="../../../../com/sleepycat/db/DbTxn.html">DbTxn</A>&nbsp;txnid,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;key,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;data,
+ int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db.put method stores key/data pairs in the database.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> with parameters of type <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html#DbMultipleRecnoDataIterator(com.sleepycat.db.Dbt)">DbMultipleRecnoDataIterator</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbMultipleKeyDataIterator.html#DbMultipleKeyDataIterator(com.sleepycat.db.Dbt)">DbMultipleKeyDataIterator</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbMultipleDataIterator.html#DbMultipleDataIterator(com.sleepycat.db.Dbt)">DbMultipleDataIterator</A></B>(<A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;dbt)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The constructor takes the data <A HREF="../../../../com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="../../../../com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="../../../../com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="../../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode and lock, for the specified object.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock, int)">DbLockRequest</A></B>(int&nbsp;op,
+ int&nbsp;mode,
+ <A HREF="../../../../com/sleepycat/db/Dbt.html">Dbt</A>&nbsp;obj,
+ <A HREF="../../../../com/sleepycat/db/DbLock.html">DbLock</A>&nbsp;lock,
+ int&nbsp;timeout)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode, lock and timeout for the specified object.</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/sleepycat/db/Dbt.html"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="Dbt.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/package-frame.html b/db/docs/java/com/sleepycat/db/package-frame.html
new file mode 100644
index 000000000..cca61cc96
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/package-frame.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../com/sleepycat/db/package-summary.html" TARGET="classFrame">com.sleepycat.db</A></FONT>
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Interfaces</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="DbAppDispatch.html" TARGET="classFrame"><I>DbAppDispatch</I></A>
+<BR>
+<A HREF="DbAppendRecno.html" TARGET="classFrame"><I>DbAppendRecno</I></A>
+<BR>
+<A HREF="DbBtreeCompare.html" TARGET="classFrame"><I>DbBtreeCompare</I></A>
+<BR>
+<A HREF="DbBtreePrefix.html" TARGET="classFrame"><I>DbBtreePrefix</I></A>
+<BR>
+<A HREF="DbClient.html" TARGET="classFrame"><I>DbClient</I></A>
+<BR>
+<A HREF="DbDupCompare.html" TARGET="classFrame"><I>DbDupCompare</I></A>
+<BR>
+<A HREF="DbEnvFeedback.html" TARGET="classFrame"><I>DbEnvFeedback</I></A>
+<BR>
+<A HREF="DbEnvFeedbackHandler.html" TARGET="classFrame"><I>DbEnvFeedbackHandler</I></A>
+<BR>
+<A HREF="DbErrcall.html" TARGET="classFrame"><I>DbErrcall</I></A>
+<BR>
+<A HREF="DbErrorHandler.html" TARGET="classFrame"><I>DbErrorHandler</I></A>
+<BR>
+<A HREF="DbFeedback.html" TARGET="classFrame"><I>DbFeedback</I></A>
+<BR>
+<A HREF="DbFeedbackHandler.html" TARGET="classFrame"><I>DbFeedbackHandler</I></A>
+<BR>
+<A HREF="DbHash.html" TARGET="classFrame"><I>DbHash</I></A>
+<BR>
+<A HREF="DbPanicHandler.html" TARGET="classFrame"><I>DbPanicHandler</I></A>
+<BR>
+<A HREF="DbRepTransport.html" TARGET="classFrame"><I>DbRepTransport</I></A>
+<BR>
+<A HREF="DbSecondaryKeyCreate.html" TARGET="classFrame"><I>DbSecondaryKeyCreate</I></A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="Db.html" TARGET="classFrame">Db</A>
+<BR>
+<A HREF="DbBtreeStat.html" TARGET="classFrame">DbBtreeStat</A>
+<BR>
+<A HREF="Dbc.html" TARGET="classFrame">Dbc</A>
+<BR>
+<A HREF="DbEnv.html" TARGET="classFrame">DbEnv</A>
+<BR>
+<A HREF="DbEnv.RepProcessMessage.html" TARGET="classFrame">DbEnv.RepProcessMessage</A>
+<BR>
+<A HREF="DbHashStat.html" TARGET="classFrame">DbHashStat</A>
+<BR>
+<A HREF="DbKeyRange.html" TARGET="classFrame">DbKeyRange</A>
+<BR>
+<A HREF="DbLock.html" TARGET="classFrame">DbLock</A>
+<BR>
+<A HREF="DbLockRequest.html" TARGET="classFrame">DbLockRequest</A>
+<BR>
+<A HREF="DbLockStat.html" TARGET="classFrame">DbLockStat</A>
+<BR>
+<A HREF="DbLogc.html" TARGET="classFrame">DbLogc</A>
+<BR>
+<A HREF="DbLogStat.html" TARGET="classFrame">DbLogStat</A>
+<BR>
+<A HREF="DbLsn.html" TARGET="classFrame">DbLsn</A>
+<BR>
+<A HREF="DbMpoolFile.html" TARGET="classFrame">DbMpoolFile</A>
+<BR>
+<A HREF="DbMpoolFStat.html" TARGET="classFrame">DbMpoolFStat</A>
+<BR>
+<A HREF="DbMpoolStat.html" TARGET="classFrame">DbMpoolStat</A>
+<BR>
+<A HREF="DbMultipleDataIterator.html" TARGET="classFrame">DbMultipleDataIterator</A>
+<BR>
+<A HREF="DbMultipleKeyDataIterator.html" TARGET="classFrame">DbMultipleKeyDataIterator</A>
+<BR>
+<A HREF="DbMultipleRecnoDataIterator.html" TARGET="classFrame">DbMultipleRecnoDataIterator</A>
+<BR>
+<A HREF="DbPreplist.html" TARGET="classFrame">DbPreplist</A>
+<BR>
+<A HREF="DbQueueStat.html" TARGET="classFrame">DbQueueStat</A>
+<BR>
+<A HREF="DbRepStat.html" TARGET="classFrame">DbRepStat</A>
+<BR>
+<A HREF="Dbt.html" TARGET="classFrame">Dbt</A>
+<BR>
+<A HREF="DbTxn.html" TARGET="classFrame">DbTxn</A>
+<BR>
+<A HREF="DbTxnStat.html" TARGET="classFrame">DbTxnStat</A>
+<BR>
+<A HREF="DbTxnStat.Active.html" TARGET="classFrame">DbTxnStat.Active</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Exceptions</FONT>&nbsp;
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="DbDeadlockException.html" TARGET="classFrame">DbDeadlockException</A>
+<BR>
+<A HREF="DbException.html" TARGET="classFrame">DbException</A>
+<BR>
+<A HREF="DbLockNotGrantedException.html" TARGET="classFrame">DbLockNotGrantedException</A>
+<BR>
+<A HREF="DbMemoryException.html" TARGET="classFrame">DbMemoryException</A>
+<BR>
+<A HREF="DbRunRecoveryException.html" TARGET="classFrame">DbRunRecoveryException</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/package-summary.html b/db/docs/java/com/sleepycat/db/package-summary.html
new file mode 100644
index 000000000..6bc01a6d4
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/package-summary.html
@@ -0,0 +1,358 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="com.sleepycat.db package">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/util/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<H2>
+Package com.sleepycat.db
+</H2>
+Java API programming notes<br>
+<a href="../../../../ref/java/program.html" target="_top">[reference guide]</a>
+<P>
+<B>See:</B>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#package_description"><B>Description</B></A>
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Interface Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbAppDispatch.html"><I>DbAppDispatch</I></A></B></TD>
+<TD>An interface specifying a recovery function, which recovers application-specific actions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbAppendRecno.html"><I>DbAppendRecno</I></A></B></TD>
+<TD>An interface specifying a callback function that modifies stored data based on a generated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbBtreeCompare.html"><I>DbBtreeCompare</I></A></B></TD>
+<TD>An interface specifying a comparison function, which imposes a total ordering on the keys in a Btree database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbBtreePrefix.html"><I>DbBtreePrefix</I></A></B></TD>
+<TD>An interface specifying a comparison function, which specifies the number of bytes needed to differentiate Btree keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbClient.html"><I>DbClient</I></A></B></TD>
+<TD>The DbClient object is used to encapsulate a reference to an RPC client.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbDupCompare.html"><I>DbDupCompare</I></A></B></TD>
+<TD>An interface specifying a comparison function, which imposes a total ordering on the duplicate data items in a Btree database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbEnvFeedback.html"><I>DbEnvFeedback</I></A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><CODE>DbEnvFeedbackHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbEnvFeedbackHandler.html"><I>DbEnvFeedbackHandler</I></A></B></TD>
+<TD>The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbErrcall.html"><I>DbErrcall</I></A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><CODE>DbErrorHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbErrorHandler.html"><I>DbErrorHandler</I></A></B></TD>
+<TD>An interface specifying a application-specific error reporting function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbFeedback.html"><I>DbFeedback</I></A></B></TD>
+<TD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><CODE>DbFeedbackHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbFeedbackHandler.html"><I>DbFeedbackHandler</I></A></B></TD>
+<TD>The DbFeedbackHandler interface is used by the Db.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbHash.html"><I>DbHash</I></A></B></TD>
+<TD>An interface specifying a hashing function, which imposes a total ordering on the Hash database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbPanicHandler.html"><I>DbPanicHandler</I></A></B></TD>
+<TD>An interface specifying a function to handle database environment panics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbRepTransport.html"><I>DbRepTransport</I></A></B></TD>
+<TD>An interface specifying a replication transmit function, which sends information to other members of the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbSecondaryKeyCreate.html"><I>DbSecondaryKeyCreate</I></A></B></TD>
+<TD>An interface specifying a function which constructs secondary keys from primary key and data items.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="Db.html">Db</A></B></TD>
+<TD>The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbBtreeStat.html">DbBtreeStat</A></B></TD>
+<TD>The DbBtreeStat object is used to return Btree or Recno database statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="Dbc.html">Dbc</A></B></TD>
+<TD>The Dbc object is the handle for a cursor into a Berkeley DB database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbEnv.html">DbEnv</A></B></TD>
+<TD>The DbEnv object is the handle for a Berkeley DB environment -- a collection including support for some or all of caching, locking, logging and transaction subsystems, as well as databases and log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A></B></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbHashStat.html">DbHashStat</A></B></TD>
+<TD>The DbHashStat object is used to return Hash database statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbKeyRange.html">DbKeyRange</A></B></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLock.html">DbLock</A></B></TD>
+<TD>The locking interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLockRequest.html">DbLockRequest</A></B></TD>
+<TD>The DbLockRequest object is used to encapsulate a single lock request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLockStat.html">DbLockStat</A></B></TD>
+<TD>The DbLockStat object is used to return lock region statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLogc.html">DbLogc</A></B></TD>
+<TD>The DbLogc object is the handle for a cursor into the log files, supporting sequential access to the records stored in log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLogStat.html">DbLogStat</A></B></TD>
+<TD>The DbLogStat object is used to return logging subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLsn.html">DbLsn</A></B></TD>
+<TD>The DbLsn object is a <b>log sequence number</b> which specifies a unique location in a log file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMpoolFile.html">DbMpoolFile</A></B></TD>
+<TD>The memory pool interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMpoolFStat.html">DbMpoolFStat</A></B></TD>
+<TD>The DbMpoolFStat object is used to return memory pool per-file statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMpoolStat.html">DbMpoolStat</A></B></TD>
+<TD>The DbMpoolStat object is used to return memory pool statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMultipleDataIterator.html">DbMultipleDataIterator</A></B></TD>
+<TD>The DbMultipleDataIterator class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag from a database belonging to any access method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMultipleKeyDataIterator.html">DbMultipleKeyDataIterator</A></B></TD>
+<TD>The DbMultipleKeyDataIterator class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Btree or Hash access methods.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMultipleRecnoDataIterator.html">DbMultipleRecnoDataIterator</A></B></TD>
+<TD>This class is used to iterate through data returned using the <A HREF="../../../com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Recno or Queue access methods.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbPreplist.html">DbPreplist</A></B></TD>
+<TD>The DbPreplist object is used to encapsulate a single prepared, but not yet resolved, transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbQueueStat.html">DbQueueStat</A></B></TD>
+<TD>The DbQueueStat object is used to return Queue database statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbRepStat.html">DbRepStat</A></B></TD>
+<TD>The DbRepStat object is used to return replication subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="Dbt.html">Dbt</A></B></TD>
+<TD>This information describes the specific details of the Dbt class, used to encode keys and data items in a database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbTxn.html">DbTxn</A></B></TD>
+<TD>The DbTxn object is the handle for a transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbTxnStat.html">DbTxnStat</A></B></TD>
+<TD>The DbTxnStat object is used to return transaction subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbTxnStat.Active.html">DbTxnStat.Active</A></B></TD>
+<TD>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Exception Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbDeadlockException.html">DbDeadlockException</A></B></TD>
+<TD>This information describes the DbDeadlockException class and how it is used in the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbException.html">DbException</A></B></TD>
+<TD>This information describes the DbException class and how it is used by the various Berkeley DB classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbLockNotGrantedException.html">DbLockNotGrantedException</A></B></TD>
+<TD>This information describes the DbLockNotGrantedException class and how it is used by the various Db* classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbMemoryException.html">DbMemoryException</A></B></TD>
+<TD>This information describes the DbMemoryException class and how it is used by the various Db* classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="DbRunRecoveryException.html">DbRunRecoveryException</A></B></TD>
+<TD>This information describes the DbRunRecoveryException class and how it is used by the various Berkeley DB classes.</TD>
+</TR>
+</TABLE>
+&nbsp;
+
+<P>
+<A NAME="package_description"><!-- --></A><H2>
+Package com.sleepycat.db Description
+</H2>
+
+<P>
+<p>Java API programming notes<br>
+<a href="../../../../ref/java/program.html" target="_top">[reference guide]</a>
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/util/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
+&nbsp;NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/package-tree.html b/db/docs/java/com/sleepycat/db/package-tree.html
new file mode 100644
index 000000000..3900389bc
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/package-tree.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:06 EST 2003 -->
+<TITLE>
+com.sleepycat.db Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="com.sleepycat.db Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/util/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package com.sleepycat.db
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Db.html"><B>Db</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbBtreeStat.html"><B>DbBtreeStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Dbc.html"><B>Dbc</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbEnv.html"><B>DbEnv</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>DbEnv.RepProcessMessage</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbHashStat.html"><B>DbHashStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbKeyRange.html"><B>DbKeyRange</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLock.html"><B>DbLock</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLockRequest.html"><B>DbLockRequest</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLockStat.html"><B>DbLockStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLogc.html"><B>DbLogc</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLogStat.html"><B>DbLogStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLsn.html"><B>DbLsn</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMpoolFile.html"><B>DbMpoolFile</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMpoolFStat.html"><B>DbMpoolFStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMpoolStat.html"><B>DbMpoolStat</B></A><LI TYPE="circle">class com.sleepycat.db.DbMultipleIterator<UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMultipleDataIterator.html"><B>DbMultipleDataIterator</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>DbMultipleKeyDataIterator</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>DbMultipleRecnoDataIterator</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbPreplist.html"><B>DbPreplist</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbQueueStat.html"><B>DbQueueStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbRepStat.html"><B>DbRepStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/Dbt.html"><B>Dbt</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbTxn.html"><B>DbTxn</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbTxnStat.html"><B>DbTxnStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbTxnStat.Active.html"><B>DbTxnStat.Active</B></A><LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A>)
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html"><B>Exception</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbException.html"><B>DbException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbDeadlockException.html"><B>DbDeadlockException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbLockNotGrantedException.html"><B>DbLockNotGrantedException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbMemoryException.html"><B>DbMemoryException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbRunRecoveryException.html"><B>DbRunRecoveryException</B></A></UL>
+</UL>
+</UL>
+</UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbAppDispatch.html"><B>DbAppDispatch</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbAppendRecno.html"><B>DbAppendRecno</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbBtreeCompare.html"><B>DbBtreeCompare</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbBtreePrefix.html"><B>DbBtreePrefix</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbClient.html"><B>DbClient</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbDupCompare.html"><B>DbDupCompare</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbEnvFeedback.html"><B>DbEnvFeedback</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><B>DbEnvFeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbErrcall.html"><B>DbErrcall</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><B>DbErrorHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbFeedback.html"><B>DbFeedback</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><B>DbFeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbHash.html"><B>DbHash</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbPanicHandler.html"><B>DbPanicHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbRepTransport.html"><B>DbRepTransport</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="../../../com/sleepycat/db/DbSecondaryKeyCreate.html"><B>DbSecondaryKeyCreate</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;<A HREF="../../../com/sleepycat/bdb/util/package-tree.html"><B>PREV</B></A>&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/com/sleepycat/db/package-use.html b/db/docs/java/com/sleepycat/db/package-use.html
new file mode 100644
index 000000000..03d2c5cb8
--- /dev/null
+++ b/db/docs/java/com/sleepycat/db/package-use.html
@@ -0,0 +1,449 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:04 EST 2003 -->
+<TITLE>
+Uses of Package com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Uses of Package com.sleepycat.db (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>com.sleepycat.db</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb"><B>com.sleepycat.bdb</B></A></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../../../../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.bdb.factory"><B>com.sleepycat.bdb.factory</B></A></TD>
+<TD>Factory classes&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#com.sleepycat.db"><B>com.sleepycat.db</B></A></TD>
+<TD>Java API programming notes<br>
+<a href="../../../../ref/java/program.html" target="_top">[reference guide]</a>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> used by <A HREF="../../../com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Db.html#com.sleepycat.bdb"><B>Db</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Dbc.html#com.sleepycat.bdb"><B>Dbc</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc object is the handle for a cursor into a Berkeley DB database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbEnv.html#com.sleepycat.bdb"><B>DbEnv</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv object is the handle for a Berkeley DB environment -- a collection including support for some or all of caching, locking, logging and transaction subsystems, as well as databases and log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbException.html#com.sleepycat.bdb"><B>DbException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbException class and how it is used by the various Berkeley DB classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Dbt.html#com.sleepycat.bdb"><B>Dbt</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the specific details of the Dbt class, used to encode keys and data items in a database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbTxn.html#com.sleepycat.bdb"><B>DbTxn</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn object is the handle for a transaction.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.bdb.factory"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> used by <A HREF="../../../com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Db.html#com.sleepycat.bdb.factory"><B>Db</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<A NAME="com.sleepycat.db"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A> used by <A HREF="../../../com/sleepycat/db/package-summary.html">com.sleepycat.db</A><TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Db.html#com.sleepycat.db"><B>Db</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbAppDispatch.html#com.sleepycat.db"><B>DbAppDispatch</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a recovery function, which recovers application-specific actions.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbAppendRecno.html#com.sleepycat.db"><B>DbAppendRecno</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a callback function that modifies stored data based on a generated key.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbBtreeCompare.html#com.sleepycat.db"><B>DbBtreeCompare</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a comparison function, which imposes a total ordering on the keys in a Btree database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbBtreePrefix.html#com.sleepycat.db"><B>DbBtreePrefix</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a comparison function, which specifies the number of bytes needed to differentiate Btree keys.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Dbc.html#com.sleepycat.db"><B>Dbc</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Dbc object is the handle for a cursor into a Berkeley DB database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbClient.html#com.sleepycat.db"><B>DbClient</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbClient object is used to encapsulate a reference to an RPC client.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbDeadlockException.html#com.sleepycat.db"><B>DbDeadlockException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbDeadlockException class and how it is used in the Berkeley DB library.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbDupCompare.html#com.sleepycat.db"><B>DbDupCompare</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a comparison function, which imposes a total ordering on the duplicate data items in a Btree database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbEnv.html#com.sleepycat.db"><B>DbEnv</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnv object is the handle for a Berkeley DB environment -- a collection including support for some or all of caching, locking, logging and transaction subsystems, as well as databases and log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbEnv.RepProcessMessage.html#com.sleepycat.db"><B>DbEnv.RepProcessMessage</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbEnvFeedback.html#com.sleepycat.db"><B>DbEnvFeedback</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbEnvFeedbackHandler.html"><CODE>DbEnvFeedbackHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbEnvFeedbackHandler.html#com.sleepycat.db"><B>DbEnvFeedbackHandler</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbErrcall.html#com.sleepycat.db"><B>DbErrcall</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbErrorHandler.html"><CODE>DbErrorHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbErrorHandler.html#com.sleepycat.db"><B>DbErrorHandler</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a application-specific error reporting function.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbException.html#com.sleepycat.db"><B>DbException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbException class and how it is used by the various Berkeley DB classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbFeedback.html#com.sleepycat.db"><B>DbFeedback</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="../../../com/sleepycat/db/DbFeedbackHandler.html"><CODE>DbFeedbackHandler</CODE></A></I></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbFeedbackHandler.html#com.sleepycat.db"><B>DbFeedbackHandler</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbFeedbackHandler interface is used by the Db.setFeedback method.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbHash.html#com.sleepycat.db"><B>DbHash</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a hashing function, which imposes a total ordering on the Hash database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbKeyRange.html#com.sleepycat.db"><B>DbKeyRange</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLock.html#com.sleepycat.db"><B>DbLock</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The locking interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLockNotGrantedException.html#com.sleepycat.db"><B>DbLockNotGrantedException</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the DbLockNotGrantedException class and how it is used by the various Db* classes.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLockRequest.html#com.sleepycat.db"><B>DbLockRequest</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockRequest object is used to encapsulate a single lock request.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLockStat.html#com.sleepycat.db"><B>DbLockStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLockStat object is used to return lock region statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLogc.html#com.sleepycat.db"><B>DbLogc</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogc object is the handle for a cursor into the log files, supporting sequential access to the records stored in log files.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLogStat.html#com.sleepycat.db"><B>DbLogStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLogStat object is used to return logging subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbLsn.html#com.sleepycat.db"><B>DbLsn</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbLsn object is a <b>log sequence number</b> which specifies a unique location in a log file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbMpoolFile.html#com.sleepycat.db"><B>DbMpoolFile</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The memory pool interfaces for the Berkeley DB database environment are methods of the <A HREF="../../../com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbMpoolFStat.html#com.sleepycat.db"><B>DbMpoolFStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolFStat object is used to return memory pool per-file statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbMpoolStat.html#com.sleepycat.db"><B>DbMpoolStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbMpoolStat object is used to return memory pool statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbPanicHandler.html#com.sleepycat.db"><B>DbPanicHandler</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a function to handle database environment panics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbPreplist.html#com.sleepycat.db"><B>DbPreplist</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbPreplist object is used to encapsulate a single prepared, but not yet resolved, transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbRepStat.html#com.sleepycat.db"><B>DbRepStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbRepStat object is used to return replication subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbRepTransport.html#com.sleepycat.db"><B>DbRepTransport</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a replication transmit function, which sends information to other members of the replication group.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbSecondaryKeyCreate.html#com.sleepycat.db"><B>DbSecondaryKeyCreate</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;An interface specifying a function which constructs secondary keys from primary key and data items.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/Dbt.html#com.sleepycat.db"><B>Dbt</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This information describes the specific details of the Dbt class, used to encode keys and data items in a database.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbTxn.html#com.sleepycat.db"><B>DbTxn</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxn object is the handle for a transaction.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbTxnStat.html#com.sleepycat.db"><B>DbTxnStat</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The DbTxnStat object is used to return transaction subsystem statistics.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../com/sleepycat/db/class-use/DbTxnStat.Active.html#com.sleepycat.db"><B>DbTxnStat.Active</B></A></B>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="package-use.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../../../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/constant-values.html b/db/docs/java/constant-values.html
new file mode 100644
index 000000000..4bcc19550
--- /dev/null
+++ b/db/docs/java/constant-values.html
@@ -0,0 +1,527 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:00 EST 2003 -->
+<TITLE>
+Constant Field Values (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Constant Field Values (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="constant-values.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H1>
+Constant Field Values</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+<LI><A HREF="#com.sleepycat">com.sleepycat.*</A>
+</UL>
+
+<A NAME="com.sleepycat"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD ALIGN="left"><FONT SIZE="+2">
+<B>com.sleepycat.*</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.DataDb.EINVAL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/DataDb.html#EINVAL">EINVAL</A></CODE></TD>
+<TD ALIGN="right"><CODE>22</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.DataDb.ENOMEM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/DataDb.html#ENOMEM">ENOMEM</A></CODE></TD>
+<TD ALIGN="right"><CODE>12</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.DataDb.FLAGS_MOD_MASK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/DataDb.html#FLAGS_MOD_MASK">FLAGS_MOD_MASK</A></CODE></TD>
+<TD ALIGN="right"><CODE>-256</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.DataDb.FLAGS_POS_MASK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/DataDb.html#FLAGS_POS_MASK">FLAGS_POS_MASK</A></CODE></TD>
+<TD ALIGN="right"><CODE>255</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_ABORT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_ABORT">ON_DELETE_ABORT</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_CASCADE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CASCADE">ON_DELETE_CASCADE</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.ForeignKeyIndex.ON_DELETE_CLEAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR">ON_DELETE_CLEAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.BINARY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#BINARY">BINARY</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.DATETIME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#DATETIME">DATETIME</A></CODE></TD>
+<TD ALIGN="right"><CODE>7</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.DOUBLE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#DOUBLE">DOUBLE</A></CODE></TD>
+<TD ALIGN="right"><CODE>6</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.FLOAT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#FLOAT">FLOAT</A></CODE></TD>
+<TD ALIGN="right"><CODE>5</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.INT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#INT">INT</A></CODE></TD>
+<TD ALIGN="right"><CODE>3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.LONG"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#LONG">LONG</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.NONE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#NONE">NONE</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.bind.DataType.STRING"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/bind/DataType.html#STRING">STRING</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.FastOutputStream.DEFAULT_BUMP_SIZE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_BUMP_SIZE">DEFAULT_BUMP_SIZE</A></CODE></TD>
+<TD ALIGN="right"><CODE>100</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.FastOutputStream.DEFAULT_INIT_SIZE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_INIT_SIZE">DEFAULT_INIT_SIZE</A></CODE></TD>
+<TD ALIGN="right"><CODE>100</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.TimeUnits.ONE_DAY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;long</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_DAY">ONE_DAY</A></CODE></TD>
+<TD ALIGN="right"><CODE>86400000l</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.TimeUnits.ONE_HOUR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_HOUR">ONE_HOUR</A></CODE></TD>
+<TD ALIGN="right"><CODE>3600000</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.TimeUnits.ONE_MINUTE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_MINUTE">ONE_MINUTE</A></CODE></TD>
+<TD ALIGN="right"><CODE>60000</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.TimeUnits.ONE_SECOND"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_SECOND">ONE_SECOND</A></CODE></TD>
+<TD ALIGN="right"><CODE>1000</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.bdb.util.TimeUnits.ONE_WEEK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;long</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_WEEK">ONE_WEEK</A></CODE></TD>
+<TD ALIGN="right"><CODE>604800000l</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_BTREE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_BTREE">DB_BTREE</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_DONOTINDEX"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_DONOTINDEX">DB_DONOTINDEX</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30999</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_FILEOPEN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_FILEOPEN">DB_FILEOPEN</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30998</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_HASH"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_HASH">DB_HASH</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_KEYEMPTY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_KEYEMPTY">DB_KEYEMPTY</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30997</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_KEYEXIST"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_KEYEXIST">DB_KEYEXIST</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30996</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_LOCK_DEADLOCK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30995</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_LOCK_NOTGRANTED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30994</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_NOSERVER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER">DB_NOSERVER</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30993</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_NOSERVER_HOME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER_HOME">DB_NOSERVER_HOME</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30992</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_NOSERVER_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER_ID">DB_NOSERVER_ID</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30991</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_NOTFOUND"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_NOTFOUND">DB_NOTFOUND</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30990</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_OLD_VERSION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_OLD_VERSION">DB_OLD_VERSION</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30989</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_PAGE_NOTFOUND"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30988</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_QUEUE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_QUEUE">DB_QUEUE</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_RECNO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_RECNO">DB_RECNO</A></CODE></TD>
+<TD ALIGN="right"><CODE>3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_DUPMASTER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30987</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_HANDLE_DEAD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_HANDLE_DEAD">DB_REP_HANDLE_DEAD</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30986</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_HOLDELECTION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30985</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_NEWMASTER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30983</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_NEWSITE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_NEWSITE">DB_REP_NEWSITE</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30982</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_REP_OUTDATED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_REP_OUTDATED">DB_REP_OUTDATED</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30980</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_RUNRECOVERY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_RUNRECOVERY">DB_RUNRECOVERY</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30978</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_SECONDARY_BAD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_SECONDARY_BAD">DB_SECONDARY_BAD</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30977</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_TXN_ABORT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_TXN_ABORT">DB_TXN_ABORT</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_TXN_APPLY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_TXN_APPLY">DB_TXN_APPLY</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_TXN_BACKWARD_ROLL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</A></CODE></TD>
+<TD ALIGN="right"><CODE>3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_TXN_FORWARD_ROLL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_TXN_PRINT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_TXN_PRINT">DB_TXN_PRINT</A></CODE></TD>
+<TD ALIGN="right"><CODE>8</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_UNKNOWN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_UNKNOWN">DB_UNKNOWN</A></CODE></TD>
+<TD ALIGN="right"><CODE>5</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="com.sleepycat.db.Db.DB_VERIFY_BAD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="com/sleepycat/db/Db.html#DB_VERIFY_BAD">DB_VERIFY_BAD</A></CODE></TD>
+<TD ALIGN="right"><CODE>-30976</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="constant-values.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/deprecated-list.html b/db/docs/java/deprecated-list.html
new file mode 100644
index 000000000..05e3f368f
--- /dev/null
+++ b/db/docs/java/deprecated-list.html
@@ -0,0 +1,1073 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+Deprecated List (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Deprecated List (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Deprecated API</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Deprecated Interfaces</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnvFeedback.html">com.sleepycat.db.DbEnvFeedback</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html"><CODE>DbEnvFeedbackHandler</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbErrcall.html">com.sleepycat.db.DbErrcall</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbErrorHandler.html"><CODE>DbErrorHandler</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbFeedback.html">com.sleepycat.db.DbFeedback</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbFeedbackHandler.html"><CODE>DbFeedbackHandler</CODE></A></I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Deprecated Methods</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)">com.sleepycat.db.DbEnv.dbremove(DbTxn, String, String, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)">com.sleepycat.db.DbEnv.dbrename(DbTxn, String, String, String, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)">com.sleepycat.db.Db.del(DbTxn, Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbc.html#del(int)">com.sleepycat.db.Dbc.del(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbErrcall.html#errcall(java.lang.String, java.lang.String)">com.sleepycat.db.DbErrcall.errcall(String, String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)"><CODE>DbErrorHandler.error(String,String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnvFeedback.html#feedback(com.sleepycat.db.DbEnv, int, int)">com.sleepycat.db.DbEnvFeedback.feedback(DbEnv, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbFeedback.html#feedback(com.sleepycat.db.Db, int, int)">com.sleepycat.db.DbFeedback.feedback(Db, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_bt_minkey()">com.sleepycat.db.Db.get_bt_minkey()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getBtreeMinKey()"><CODE>getBtreeMinKey()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_byteswapped()">com.sleepycat.db.Db.get_byteswapped()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#isByteSwapped()"><CODE>isByteSwapped()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_cachesize_ncache()">com.sleepycat.db.DbEnv.get_cachesize_ncache()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><CODE>DbEnv.getCacheSizeNcache()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_cachesize_ncache()">com.sleepycat.db.Db.get_cachesize_ncache()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_cachesize()">com.sleepycat.db.DbEnv.get_cachesize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getCacheSize()"><CODE>DbEnv.getCacheSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_cachesize()">com.sleepycat.db.Db.get_cachesize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_data_dirs()">com.sleepycat.db.DbEnv.get_data_dirs()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getDataDirs()"><CODE>DbEnv.getDataDirs()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_data()">com.sleepycat.db.Dbt.get_data()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getData()"><CODE>Dbt.getData()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_dbname()">com.sleepycat.db.Db.get_dbname()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDatabaseName()"><CODE>getDatabaseName()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMemoryException.html#get_dbt()">com.sleepycat.db.DbMemoryException.get_dbt()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMemoryException.html#getDbt()"><CODE>DbMemoryException.getDbt()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_dlen()">com.sleepycat.db.Dbt.get_dlen()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getPartialLength()"><CODE>Dbt.getPartialLength()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_doff()">com.sleepycat.db.Dbt.get_doff()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getPartialOffset()"><CODE>Dbt.getPartialOffset()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_encrypt_flags()">com.sleepycat.db.DbEnv.get_encrypt_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getEncryptFlags()"><CODE>DbEnv.getEncryptFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_encrypt_flags()">com.sleepycat.db.Db.get_encrypt_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_env()">com.sleepycat.db.Db.get_env()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDbEnv()"><CODE>getDbEnv()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbException.html#get_errno()">com.sleepycat.db.DbException.get_errno()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbException.html#getErrno()"><CODE>DbException.getErrno()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_errpfx()">com.sleepycat.db.DbEnv.get_errpfx()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getErrorPrefix()"><CODE>DbEnv.getErrorPrefix()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_errpfx()">com.sleepycat.db.Db.get_errpfx()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLsn.html#get_file()">com.sleepycat.db.DbLsn.get_file()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLsn.html#getFile()"><CODE>DbLsn.getFile()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_filename()">com.sleepycat.db.Db.get_filename()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getFileName()"><CODE>getFileName()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_flags()">com.sleepycat.db.Dbt.get_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getFlags()"><CODE>Dbt.getFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#get_flags()">com.sleepycat.db.DbMpoolFile.get_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getFlags()"><CODE>DbMpoolFile.getFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_flags()">com.sleepycat.db.DbEnv.get_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getFlags()"><CODE>DbEnv.getFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_flags()">com.sleepycat.db.Db.get_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getFlags()"><CODE>getFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_h_ffactor()">com.sleepycat.db.Db.get_h_ffactor()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getHashFillFactor()"><CODE>getHashFillFactor()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_h_nelem()">com.sleepycat.db.Db.get_h_nelem()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getHashNumElements()"><CODE>getHashNumElements()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_home()">com.sleepycat.db.DbEnv.get_home()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getDbEnvHome()"><CODE>DbEnv.getDbEnvHome()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_index()">com.sleepycat.db.DbLockNotGrantedException.get_index()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getIndex()"><CODE>DbLockNotGrantedException.getIndex()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lg_bsize()">com.sleepycat.db.DbEnv.get_lg_bsize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogBufferSize()"><CODE>DbEnv.getLogBufferSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lg_dir()">com.sleepycat.db.DbEnv.get_lg_dir()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogDir()"><CODE>DbEnv.getLogDir()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lg_max()">com.sleepycat.db.DbEnv.get_lg_max()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogMax()"><CODE>DbEnv.getLogMax()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lg_regionmax()">com.sleepycat.db.DbEnv.get_lg_regionmax()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogRegionMax()"><CODE>DbEnv.getLogRegionMax()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lk_conflicts()">com.sleepycat.db.DbEnv.get_lk_conflicts()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockConflicts()"><CODE>DbEnv.getLockConflicts()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lk_detect()">com.sleepycat.db.DbEnv.get_lk_detect()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockDetect()"><CODE>DbEnv.getLockDetect()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_lockers()">com.sleepycat.db.DbEnv.get_lk_max_lockers()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><CODE>DbEnv.getLockMaxLockers()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_locks()">com.sleepycat.db.DbEnv.get_lk_max_locks()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><CODE>DbEnv.getLockMaxLocks()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_objects()">com.sleepycat.db.DbEnv.get_lk_max_objects()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><CODE>DbEnv.getLockMaxObjects()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#get_lock()">com.sleepycat.db.DbLockRequest.get_lock()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getLock()"><CODE>DbLockRequest.getLock()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_lock()">com.sleepycat.db.DbLockNotGrantedException.get_lock()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><CODE>DbLockNotGrantedException.getLock()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_lorder()">com.sleepycat.db.Db.get_lorder()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getByteOrder()"><CODE>getByteOrder()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#get_maxsize()">com.sleepycat.db.DbMpoolFile.get_maxsize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><CODE>DbMpoolFile.getMaxsize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#get_mode()">com.sleepycat.db.DbLockRequest.get_mode()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getMode()"><CODE>DbLockRequest.getMode()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_mode()">com.sleepycat.db.DbLockNotGrantedException.get_mode()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getMode()"><CODE>DbLockNotGrantedException.getMode()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_mp_mmapsize()">com.sleepycat.db.DbEnv.get_mp_mmapsize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><CODE>DbEnv.getMemoryPoolMapSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#get_obj()">com.sleepycat.db.DbLockRequest.get_obj()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getObj()"><CODE>DbLockRequest.getObj()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_obj()">com.sleepycat.db.DbLockNotGrantedException.get_obj()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><CODE>DbLockNotGrantedException.getObj()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_object()">com.sleepycat.db.Dbt.get_object()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB
+ 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getObject()"><CODE>Dbt.getObject()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_offset()">com.sleepycat.db.Dbt.get_offset()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getOffset()"><CODE>Dbt.getOffset()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLsn.html#get_offset()">com.sleepycat.db.DbLsn.get_offset()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLsn.html#getOffset()"><CODE>DbLsn.getOffset()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#get_op()">com.sleepycat.db.DbLockRequest.get_op()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getOp()"><CODE>DbLockRequest.getOp()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_op()">com.sleepycat.db.DbLockNotGrantedException.get_op()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getOp()"><CODE>DbLockNotGrantedException.getOp()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_open_flags()">com.sleepycat.db.DbEnv.get_open_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getOpenFlags()"><CODE>DbEnv.getOpenFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_open_flags()">com.sleepycat.db.Db.get_open_flags()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_pagesize()">com.sleepycat.db.Db.get_pagesize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getPageSize()"><CODE>getPageSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#get_priority()">com.sleepycat.db.DbMpoolFile.get_priority()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getPriority()"><CODE>DbMpoolFile.getPriority()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_q_extentsize()">com.sleepycat.db.Db.get_q_extentsize()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getQueueExtentSize()"><CODE>getQueueExtentSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_re_delim()">com.sleepycat.db.Db.get_re_delim()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordDelimiter()"><CODE>getRecordDelimiter()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_re_len()">com.sleepycat.db.Db.get_re_len()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordLength()"><CODE>getRecordLength()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_re_pad()">com.sleepycat.db.Db.get_re_pad()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordPad()"><CODE>getRecordPad()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_re_source()">com.sleepycat.db.Db.get_re_source()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordSource()"><CODE>getRecordSource()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_recno_key_data()">com.sleepycat.db.Dbt.get_recno_key_data()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>Dbt.getRecordNumber()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_rep_limit()">com.sleepycat.db.DbEnv.get_rep_limit()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getReplicationLimit()"><CODE>DbEnv.getReplicationLimit()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_shm_key()">com.sleepycat.db.DbEnv.get_shm_key()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getSegmentId()"><CODE>DbEnv.getSegmentId()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_size()">com.sleepycat.db.Dbt.get_size()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getSize()"><CODE>Dbt.getSize()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_tas_spins()">com.sleepycat.db.DbEnv.get_tas_spins()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><CODE>DbEnv.getTestAndSetSpins()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_timeout(int)">com.sleepycat.db.DbEnv.get_timeout(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>DbEnv.getTimeout(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_tmp_dir()">com.sleepycat.db.DbEnv.get_tmp_dir()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTmpDir()"><CODE>DbEnv.getTmpDir()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_transactional()">com.sleepycat.db.Db.get_transactional()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#isTransactional()"><CODE>isTransactional()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_tx_max()">com.sleepycat.db.DbEnv.get_tx_max()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTxnMax()"><CODE>DbEnv.getTxnMax()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_tx_timestamp()">com.sleepycat.db.DbEnv.get_tx_timestamp()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><CODE>DbEnv.getTxnTimestamp()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#get_type()">com.sleepycat.db.Db.get_type()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDbType()"><CODE>getDbType()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#get_ulen()">com.sleepycat.db.Dbt.get_ulen()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getUserBufferLength()"><CODE>Dbt.getUserBufferLength()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_verbose(int)">com.sleepycat.db.DbEnv.get_verbose(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVerbose(int)"><CODE>DbEnv.getVerbose(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_version_major()">com.sleepycat.db.DbEnv.get_version_major()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionMajor()"><CODE>DbEnv.getVersionMajor()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_version_minor()">com.sleepycat.db.DbEnv.get_version_minor()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionMinor()"><CODE>DbEnv.getVersionMinor()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_version_patch()">com.sleepycat.db.DbEnv.get_version_patch()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionPatch()"><CODE>DbEnv.getVersionPatch()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#get_version_string()">com.sleepycat.db.DbEnv.get_version_string()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionString()"><CODE>DbEnv.getVersionString()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)">com.sleepycat.db.Db.key_range(DbTxn, Dbt, DbKeyRange, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_detect(int, int)">com.sleepycat.db.DbEnv.lock_detect(int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)">com.sleepycat.db.DbEnv.lock_get(int, int, Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_id_free(int)">com.sleepycat.db.DbEnv.lock_id_free(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>DbEnv.lockIdFree(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_id()">com.sleepycat.db.DbEnv.lock_id()</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId()</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_put(com.sleepycat.db.DbLock)">com.sleepycat.db.DbEnv.lock_put(DbLock)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>DbEnv.lockPut(DbLock)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_stat(int)">com.sleepycat.db.DbEnv.lock_stat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>DbEnv.lockStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)">com.sleepycat.db.DbEnv.lock_vec(int, int, DbLockRequest[], int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_archive(int)">com.sleepycat.db.DbEnv.log_archive(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)">com.sleepycat.db.DbEnv.log_compare(DbLsn, DbLsn)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>DbEnv.logCompare(DbLsn,DbLsn)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_cursor(int)">com.sleepycat.db.DbEnv.log_cursor(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_file(com.sleepycat.db.DbLsn)">com.sleepycat.db.DbEnv.log_file(DbLsn)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFile(DbLsn)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_flush(com.sleepycat.db.DbLsn)">com.sleepycat.db.DbEnv.log_flush(DbLsn)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFlush(DbLsn)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)">com.sleepycat.db.DbEnv.log_put(DbLsn, Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#log_stat(int)">com.sleepycat.db.DbEnv.log_stat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>DbEnv.logStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#memp_fstat(int)">com.sleepycat.db.DbEnv.memp_fstat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>DbEnv.memoryPoolFileStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#memp_stat(int)">com.sleepycat.db.DbEnv.memp_stat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>DbEnv.memoryPoolStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#memp_trickle(int)">com.sleepycat.db.DbEnv.memp_trickle(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">com.sleepycat.db.Dbc.pget(Dbt, Dbt, Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)">com.sleepycat.db.Db.pget(DbTxn, Dbt, Dbt, Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#rep_elect(int, int, int)">com.sleepycat.db.DbEnv.rep_elect(int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect(int,int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)">com.sleepycat.db.DbEnv.rep_process_message(Dbt, Dbt, DbEnv.RepProcessMessage, DbLsn)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#rep_start(com.sleepycat.db.Dbt, int)">com.sleepycat.db.DbEnv.rep_start(Dbt, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#rep_stat(int)">com.sleepycat.db.DbEnv.rep_stat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>DbEnv.replicationStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_app_dispatch(com.sleepycat.db.DbAppDispatch)">com.sleepycat.db.DbEnv.set_app_dispatch(DbAppDispatch)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_append_recno(com.sleepycat.db.DbAppendRecno)">com.sleepycat.db.Db.set_append_recno(DbAppendRecno)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>setAppendRecno(DbAppendRecno)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_bt_compare(com.sleepycat.db.DbBtreeCompare)">com.sleepycat.db.Db.set_bt_compare(DbBtreeCompare)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>setBtreeCompare(DbBtreeCompare)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_bt_minkey(int)">com.sleepycat.db.Db.set_bt_minkey(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreeMinKey(int)"><CODE>setBtreeMinKey(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_bt_prefix(com.sleepycat.db.DbBtreePrefix)">com.sleepycat.db.Db.set_bt_prefix(DbBtreePrefix)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>setBtreePrefix(DbBtreePrefix)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_cachesize(int, int, int)">com.sleepycat.db.DbEnv.set_cachesize(int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_cachesize(int, int, int)">com.sleepycat.db.Db.set_cachesize(int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_cachesize(long, int)">com.sleepycat.db.DbEnv.set_cachesize(long, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_cachesize(long, int)">com.sleepycat.db.Db.set_cachesize(long, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_data_dir(java.lang.String)">com.sleepycat.db.DbEnv.set_data_dir(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_data(byte[])">com.sleepycat.db.Dbt.set_data(byte[])</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setData(byte[])"><CODE>Dbt.setData(byte[])</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_dlen(int)">com.sleepycat.db.Dbt.set_dlen(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setPartialLength(int)"><CODE>Dbt.setPartialLength(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_doff(int)">com.sleepycat.db.Dbt.set_doff(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setPartialOffset(int)"><CODE>Dbt.setPartialOffset(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_dup_compare(com.sleepycat.db.DbDupCompare)">com.sleepycat.db.Db.set_dup_compare(DbDupCompare)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>setDuplicateCompare(DbDupCompare)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_encrypt(java.lang.String, int)">com.sleepycat.db.DbEnv.set_encrypt(String, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>DbEnv.setEncrypted(String,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_encrypt(java.lang.String, int)">com.sleepycat.db.Db.set_encrypt(String, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_errcall(com.sleepycat.db.DbErrcall)">com.sleepycat.db.DbEnv.set_errcall(DbErrcall)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler(DbErrorHandler)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_errcall(com.sleepycat.db.DbErrcall)">com.sleepycat.db.Db.set_errcall(DbErrcall)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_error_stream(java.io.OutputStream)">com.sleepycat.db.DbEnv.set_error_stream(OutputStream)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream(java.io.OutputStream)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_error_stream(java.io.OutputStream)">com.sleepycat.db.Db.set_error_stream(OutputStream)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_errpfx(java.lang.String)">com.sleepycat.db.DbEnv.set_errpfx(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_errpfx(java.lang.String)">com.sleepycat.db.Db.set_errpfx(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_feedback(com.sleepycat.db.DbEnvFeedback)">com.sleepycat.db.DbEnv.set_feedback(DbEnvFeedback)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_feedback(com.sleepycat.db.DbFeedback)">com.sleepycat.db.Db.set_feedback(DbFeedback)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_flags(int)">com.sleepycat.db.Dbt.set_flags(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_flags(int)">com.sleepycat.db.Db.set_flags(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#set_flags(int, boolean)">com.sleepycat.db.DbMpoolFile.set_flags(int, boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>DbMpoolFile.setFlags(int,boolean)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_flags(int, boolean)">com.sleepycat.db.DbEnv.set_flags(int, boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_h_ffactor(int)">com.sleepycat.db.Db.set_h_ffactor(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>setHashFillFactor(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_h_hash(com.sleepycat.db.DbHash)">com.sleepycat.db.Db.set_h_hash(DbHash)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>setHash(DbHash)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_h_nelem(int)">com.sleepycat.db.Db.set_h_nelem(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHashNumElements(int)"><CODE>setHashNumElements(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lg_bsize(int)">com.sleepycat.db.DbEnv.set_lg_bsize(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>DbEnv.setLogBufferSize(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lg_dir(java.lang.String)">com.sleepycat.db.DbEnv.set_lg_dir(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><CODE>DbEnv.setLogDir(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lg_max(int)">com.sleepycat.db.DbEnv.set_lg_max(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>DbEnv.setLogMax(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lg_regionmax(int)">com.sleepycat.db.DbEnv.set_lg_regionmax(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><CODE>DbEnv.setLogRegionMax(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lk_conflicts(byte[][])">com.sleepycat.db.DbEnv.set_lk_conflicts(byte[][])</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>DbEnv.setLockConflicts(byte[][])</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lk_detect(int)">com.sleepycat.db.DbEnv.set_lk_detect(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_lockers(int)">com.sleepycat.db.DbEnv.set_lk_max_lockers(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><CODE>DbEnv.setLockMaxLockers(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_locks(int)">com.sleepycat.db.DbEnv.set_lk_max_locks(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><CODE>DbEnv.setLockMaxLocks(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_objects(int)">com.sleepycat.db.DbEnv.set_lk_max_objects(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><CODE>DbEnv.setLockMaxObjects(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#set_lock(com.sleepycat.db.DbLock)">com.sleepycat.db.DbLockRequest.set_lock(DbLock)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><CODE>DbLockRequest.setLock(DbLock)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_lorder(int)">com.sleepycat.db.Db.set_lorder(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setByteOrder(int)"><CODE>setByteOrder(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#set_maxsize(long)">com.sleepycat.db.DbMpoolFile.set_maxsize(long)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><CODE>DbMpoolFile.setMaxsize(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#set_mode(int)">com.sleepycat.db.DbLockRequest.set_mode(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setMode(int)"><CODE>DbLockRequest.setMode(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_mp_mmapsize(long)">com.sleepycat.db.DbEnv.set_mp_mmapsize(long)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>DbEnv.setMemoryPoolMapSize(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#set_obj(com.sleepycat.db.Dbt)">com.sleepycat.db.DbLockRequest.set_obj(Dbt)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><CODE>DbLockRequest.setObj(Dbt)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_object(java.lang.Object)">com.sleepycat.db.Dbt.set_object(Object)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced
+ by <A HREF="com/sleepycat/db/Dbt.html#setObject(java.lang.Object)"><CODE>Dbt.setObject(Object)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_offset(int)">com.sleepycat.db.Dbt.set_offset(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setOffset(int)"><CODE>Dbt.setOffset(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbLockRequest.html#set_op(int)">com.sleepycat.db.DbLockRequest.set_op(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setOp(int)"><CODE>DbLockRequest.setOp(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_pagesize(long)">com.sleepycat.db.Db.set_pagesize(long)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setPageSize(long)"><CODE>setPageSize(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbMpoolFile.html#set_priority(int)">com.sleepycat.db.DbMpoolFile.set_priority(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_q_extentsize(int)">com.sleepycat.db.Db.set_q_extentsize(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setQueueExtentSize(int)"><CODE>setQueueExtentSize(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_re_delim(int)">com.sleepycat.db.Db.set_re_delim(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>setRecordDelimiter(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_re_len(int)">com.sleepycat.db.Db.set_re_len(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordLength(int)"><CODE>setRecordLength(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_re_pad(int)">com.sleepycat.db.Db.set_re_pad(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>setRecordPad(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Db.html#set_re_source(java.lang.String)">com.sleepycat.db.Db.set_re_source(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><CODE>setRecordSource(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_recno_key_data(int)">com.sleepycat.db.Dbt.set_recno_key_data(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setRecordNumber(int)"><CODE>Dbt.setRecordNumber(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_rep_limit(int, int)">com.sleepycat.db.DbEnv.set_rep_limit(int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_rep_limit(long)">com.sleepycat.db.DbEnv.set_rep_limit(long)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_rep_transport(int, com.sleepycat.db.DbRepTransport)">com.sleepycat.db.DbEnv.set_rep_transport(int, DbRepTransport)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)">com.sleepycat.db.DbEnv.set_rpc_server(DbClient, String, long, long, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_shm_key(long)">com.sleepycat.db.DbEnv.set_shm_key(long)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setSegmentId(long)"><CODE>DbEnv.setSegmentId(long)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_size(int)">com.sleepycat.db.Dbt.set_size(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setSize(int)"><CODE>Dbt.setSize(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_tas_spins(int)">com.sleepycat.db.DbEnv.set_tas_spins(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><CODE>DbEnv.setTestAndSetSpins(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbTxn.html#set_timeout(long, int)">com.sleepycat.db.DbTxn.set_timeout(long, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_timeout(long, int)">com.sleepycat.db.DbEnv.set_timeout(long, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout(long,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_tmp_dir(java.lang.String)">com.sleepycat.db.DbEnv.set_tmp_dir(String)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><CODE>DbEnv.setTmpDir(String)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_tx_max(int)">com.sleepycat.db.DbEnv.set_tx_max(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTxnMax(int)"><CODE>DbEnv.setTxnMax(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_tx_timestamp(java.util.Date)">com.sleepycat.db.DbEnv.set_tx_timestamp(Date)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><CODE>DbEnv.setTxnTimestamp(java.util.Date)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/Dbt.html#set_ulen(int)">com.sleepycat.db.Dbt.set_ulen(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setUserBufferLength(int)"><CODE>Dbt.setUserBufferLength(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#set_verbose(int, boolean)">com.sleepycat.db.DbEnv.set_verbose(int, boolean)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)">com.sleepycat.db.DbEnv.txn_begin(DbTxn, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#txn_checkpoint(int, int, int)">com.sleepycat.db.DbEnv.txn_checkpoint(int, int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint(int,int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#txn_recover(int, int)">com.sleepycat.db.DbEnv.txn_recover(int, int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></I>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="com/sleepycat/db/DbEnv.html#txn_stat(int)">com.sleepycat.db.DbEnv.txn_stat(int)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>DbEnv.txnStat(int)</CODE></A></I>&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="deprecated-list.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/help-doc.html b/db/docs/java/help-doc.html
new file mode 100644
index 000000000..b6693b36b
--- /dev/null
+++ b/db/docs/java/help-doc.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:11 EST 2003 -->
+<TITLE>
+API Help (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="API Help (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H1>
+How This API Document Is Organized</H1>
+</CENTER>
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
+Overview</H3>
+<BLOCKQUOTE>
+
+<P>
+The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
+<H3>
+Package</H3>
+<BLOCKQUOTE>
+
+<P>
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
+<LI>Interfaces (italic)<LI>Classes<LI>Exceptions<LI>Errors</UL>
+</BLOCKQUOTE>
+<H3>
+Class/Interface</H3>
+<BLOCKQUOTE>
+
+<P>
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
+<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
+<P>
+<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
+<P>
+<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
+<H3>
+Use</H3>
+<BLOCKQUOTE>
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</BLOCKQUOTE>
+<H3>
+Tree (Class Hierarchy)</H3>
+<BLOCKQUOTE>
+There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
+<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
+</BLOCKQUOTE>
+<H3>
+Deprecated API</H3>
+<BLOCKQUOTE>
+The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
+<H3>
+Index</H3>
+<BLOCKQUOTE>
+The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
+<H3>
+Prev/Next</H3>
+These links take you to the next or previous class, interface, package, or related page.<H3>
+Frames/No Frames</H3>
+These links show and hide the HTML frames. All pages are available with or without frames.
+<P>
+<H3>
+Serialized Form</H3>
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+<P>
+<FONT SIZE="-1">
+<EM>
+This help file applies to API documentation generated using the standard doclet.</EM>
+</FONT>
+<BR>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="help-doc.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/index-all.html b/db/docs/java/index-all.html
new file mode 100644
index 000000000..747427269
--- /dev/null
+++ b/db/docs/java/index-all.html
@@ -0,0 +1,4659 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+Index (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Index (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_Q_">Q</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <A HREF="#_X_">X</A> <HR>
+<A NAME="_A_"><!-- --></A><H2>
+<B>A</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbTxn.html#abort()"><B>abort()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.abort method causes an abnormal termination of the transaction.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#abortTxn()"><B>abortTxn()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Aborts the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#add(int, java.lang.Object)"><B>add(int, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Inserts the specified element at the specified position in this list
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Adds the specified entity to this set if it is not already present
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Appends the specified element to the end of this list (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>
+<DD>Adds the specified key to this set if it is not already present
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Inserts the specified element into the list or inserts a duplicate into
+ other types of collections (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html#add(java.lang.Object)"><B>add(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>
+<DD>Adds the specified element to this set if it is not already present
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#addAll(java.util.Collection)"><B>addAll(Collection)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Adds all of the elements in the specified collection to this collection
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#addAll(int, java.util.Collection)"><B>addAll(int, Collection)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Inserts all of the elements in the specified collection into this list
+ at the specified position (optional operation).
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#addSize(int)"><B>addSize(int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Skip the given number of bytes in the buffer.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#addValue(com.sleepycat.bdb.DataThang, java.lang.Object, int)"><B>addValue(DataThang, Object, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Adds a duplicate value for a specified key.
+<DT><A HREF="com/sleepycat/db/DbAppDispatch.html#appDispatch(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int)"><B>appDispatch(DbEnv, Dbt, DbLsn, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>
+<DD>The DbAppDispatch interface is used by the DbEnv.setAppDispatch method.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)"><B>append(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Appends a given value returning the newly assigned key.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#append(java.lang.Object)"><B>append(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Appends a given value returning the newly assigned index.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#append(java.lang.Object, java.lang.Object[], java.lang.Object[])"><B>append(Object, Object[], Object[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Appends a value and returns the new key.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#areDuplicatesAllowed()"><B>areDuplicatesAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether duplicates are allowed for the index or store.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#areDuplicatesAllowed()"><B>areDuplicatesAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether duplicates are allowed for the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesAllowed()"><B>areDuplicatesAllowed()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether duplicate keys are allowed in this container.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#areDuplicatesOrdered()"><B>areDuplicatesOrdered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether duplicates are ordered for the index or store.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#areDuplicatesOrdered()"><B>areDuplicatesOrdered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether duplicates are ordered for the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#areDuplicatesOrdered()"><B>areDuplicatesOrdered()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether duplicate keys are allowed and sorted by element value.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#areKeysRenumbered()"><B>areKeysRenumbered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether keys (record numbers) are renumbered for the index or
+ store.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#areKeysRenumbered()"><B>areKeysRenumbered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether keys (record numbers) are renumbered for the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#areKeysRenumbered()"><B>areKeysRenumbered()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether keys are renumbered when insertions and deletions occur.
+<DT><A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html#assignKey(com.sleepycat.bdb.bind.DataBuffer)"><B>assignKey(DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>
+<DD>Assigns a new primary key value into the given data buffer.
+<DT><A HREF="com/sleepycat/db/Db.html#associate(com.sleepycat.db.DbTxn, com.sleepycat.db.Db, com.sleepycat.db.DbSecondaryKeyCreate, int)"><B>associate(DbTxn, Db, DbSecondaryKeyCreate, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitCollection(java.util.Collection)"><B>autoCommitCollection(Collection)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit collection from a given stored collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitList(java.util.List)"><B>autoCommitList(List)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit list from a given stored list.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitMap(java.util.Map)"><B>autoCommitMap(Map)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit map from a given stored map.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSet(java.util.Set)"><B>autoCommitSet(Set)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit set from a given stored set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSortedMap(java.util.SortedMap)"><B>autoCommitSortedMap(SortedMap)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit sorted map from a given stored sorted map.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#autoCommitSortedSet(java.util.SortedSet)"><B>autoCommitSortedSet(SortedSet)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a auto-commit sorted set from a given stored sorted set.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#autoCommitView(boolean)"><B>autoCommitView(boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns a new view with a specified autoCommit setting.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#available()"><B>available()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+</DL>
+<HR>
+<A NAME="_B_"><!-- --></A><H2>
+<B>B</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#beginTxn()"><B>beginTxn()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Begins a new transaction for this environment and associates it with
+ the current thread.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#beginTxn(boolean, boolean)"><B>beginTxn(boolean, boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Begins a new transaction for this environment and associates it with
+ the current thread.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#BINARY"><B>BINARY</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>byte[]</code> data type.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_dup_pg"><B>bt_dup_pg</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of database duplicate pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_dup_pgfree"><B>bt_dup_pgfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of bytes free in database duplicate pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_free"><B>bt_free</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of pages on the free list.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_int_pg"><B>bt_int_pg</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of database internal pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_int_pgfree"><B>bt_int_pgfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of bytes free in database internal pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_leaf_pg"><B>bt_leaf_pg</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of database leaf pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_leaf_pgfree"><B>bt_leaf_pgfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of bytes free in database leaf pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_levels"><B>bt_levels</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of levels in the database.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_magic"><B>bt_magic</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Magic number that identifies the file as a Btree database.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_maxkey"><B>bt_maxkey</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_metaflags"><B>bt_metaflags</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_minkey"><B>bt_minkey</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>The minimum keys per page.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_ndata"><B>bt_ndata</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>For the Btree Access Method, the number of key/data pairs in the database.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_nkeys"><B>bt_nkeys</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>For the Btree Access Method, the number of unique keys in the database.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_over_pg"><B>bt_over_pg</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of database overflow pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_over_pgfree"><B>bt_over_pgfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Number of bytes free in database overflow pages.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_pagesize"><B>bt_pagesize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Underlying database page size, in bytes.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_re_len"><B>bt_re_len</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>The length of fixed-length records.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_re_pad"><B>bt_re_pad</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>The padding byte value for fixed-length records.
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#bt_version"><B>bt_version</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>The version of the Btree database.
+<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html"><B>ByteArrayBinding</B></A> - class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>.<DD>A transparent binding where the data byte array is used as the object.<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html#ByteArrayBinding(com.sleepycat.bdb.bind.ByteArrayFormat)"><B>ByteArrayBinding(ByteArrayFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>
+<DD>Creates a byte array binding.
+<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>ByteArrayFormat</B></A> - class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>.<DD>The format for data stored as a byte array.<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html#ByteArrayFormat()"><B>ByteArrayFormat()</B></A> -
+Constructor for class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html">ByteArrayFormat</A>
+<DD>Creates a byte array format.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#bytesToChars(byte[], int, char[], int, int, boolean)"><B>bytesToChars(byte[], int, char[], int, int, boolean)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Converts byte arrays into character arrays.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#bytesToString(byte[], int, int)"><B>bytesToString(byte[], int, int)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Converts byte arrays into strings.
+</DL>
+<HR>
+<A NAME="_C_"><!-- --></A><H2>
+<B>C</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/DataView.html#canDeriveKeyFromValue()"><B>canDeriveKeyFromValue()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether data keys can be derived from the value/entity binding
+ of this view, which determines whether a value/entity object alone is
+ sufficient for operations that require keys.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#charsToBytes(char[], int, byte[], int, int)"><B>charsToBytes(char[], int, byte[], int, int)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Converts character arrays into byte arrays.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html"><B>ClassCatalog</B></A> - interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>.<DD>Represents a catalog of class information for use in object serialization so
+ that class descriptions can be stored separately from serialized objects.<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#clear()"><B>clear()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Removes all mappings or elements from this map or collection (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/DataView.html#clear(java.util.Collection)"><B>clear(Collection)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Deletes all records in the current range, optionally returning the
+ values for the deleted records.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#clearDataFormation()"><B>clearDataFormation()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#clearDataFormation()"><B>clearDataFormation()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#clearDataFormation()"><B>clearDataFormation()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Sets the formation associated with the data in this buffer to null.
+<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><B>clearIndexKey(DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>
+<DD>Clears the index key in a value buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><B>clearIndexKey(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><B>clearIndexKey(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.DataBuffer)"><B>clearIndexKey(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#clearIndexKey(java.lang.Object)"><B>clearIndexKey(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#clearIndexKey(java.lang.Object)"><B>clearIndexKey(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>Clears the index key in the deserialized value data.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey(java.lang.Object)"><B>clearIndexKey(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>Clears the index key in a value data object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#clearIndexKey(java.lang.String)"><B>clearIndexKey(String)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html">MarshalledTupleKeyEntity</A>
+<DD>Clears the entity's index key value for the given key name.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>clearIndexKey(TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#clearIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>clearIndexKey(TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>Clears the index key in the tuple value data.
+<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Closes the store and all associated indices.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Closes the database.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Closes a cursor.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html#close()"><B>close()</B></A> -
+Method in interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>
+<DD>Close a catalog database and release any cached resources.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Closes this iterator.
+<DT><A HREF="com/sleepycat/db/Dbc.html#close()"><B>close()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.close method discards the cursor.
+<DT><A HREF="com/sleepycat/db/DbLogc.html#close(int)"><B>close(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogc.html">DbLogc</A>
+<DD>The DbLogc.close method discards the log cursor.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#close(int)"><B>close(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.close method closes the Berkeley DB environment, freeing any allocated resources and closing any underlying subsystems.
+<DT><A HREF="com/sleepycat/db/Db.html#close(int)"><B>close(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.close method flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)"><B>close(Iterator)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Closes the given iterator using <A HREF="com/sleepycat/bdb/collection/StoredIterator.html#close()"><CODE>StoredIterator.close()</CODE></A> if it is a <A HREF="com/sleepycat/bdb/collection/StoredIterator.html"><CODE>StoredIterator</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#closeCursor(com.sleepycat.db.Dbc)"><B>closeCursor(Dbc)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Closes a cursor for this database.
+<DT><A HREF="com/sleepycat/bdb/package-summary.html"><B>com.sleepycat.bdb</B></A> - package com.sleepycat.bdb<DD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a><DT><A HREF="com/sleepycat/bdb/bind/package-summary.html"><B>com.sleepycat.bdb.bind</B></A> - package com.sleepycat.bdb.bind<DD>Interfaces for defining data formats and data-to-object bindings
+<a href="../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a><DT><A HREF="com/sleepycat/bdb/bind/serial/package-summary.html"><B>com.sleepycat.bdb.bind.serial</B></A> - package com.sleepycat.bdb.bind.serial<DD>Formats and bindings that use Java serialization<DT><A HREF="com/sleepycat/bdb/bind/tuple/package-summary.html"><B>com.sleepycat.bdb.bind.tuple</B></A> - package com.sleepycat.bdb.bind.tuple<DD>Formats and bindings that use sequences of primitive data items or tuples<DT><A HREF="com/sleepycat/bdb/collection/package-summary.html"><B>com.sleepycat.bdb.collection</B></A> - package com.sleepycat.bdb.collection<DD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a><DT><A HREF="com/sleepycat/bdb/factory/package-summary.html"><B>com.sleepycat.bdb.factory</B></A> - package com.sleepycat.bdb.factory<DD>Factory classes<DT><A HREF="com/sleepycat/bdb/util/package-summary.html"><B>com.sleepycat.bdb.util</B></A> - package com.sleepycat.bdb.util<DD>General utilities used throughout DB<br>
+<a href="../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a><DT><A HREF="com/sleepycat/db/package-summary.html"><B>com.sleepycat.db</B></A> - package com.sleepycat.db<DD>Java API programming notes<br>
+<a href="../ref/java/program.html" target="_top">[reference guide]</a><DT><A HREF="com/sleepycat/db/DbTxn.html#commit(int)"><B>commit(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.commit method ends the transaction.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#commitTxn()"><B>commitTxn()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Commits the transaction that is active for the current thread for this
+ environment and makes the parent transaction (if any) the current
+ transaction.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns null since comparators are not supported.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns null since comparators are not supported.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns null since comparators are not supported.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#comparator()"><B>comparator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns null since comparators are not supported.
+<DT><A HREF="com/sleepycat/db/DbBtreeCompare.html#compare(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>compare(Db, Dbt, Dbt)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>
+<DD>The DbBtreeCompare interface is used by the Db.setBtreeCompare method.
+<DT><A HREF="com/sleepycat/db/DbDupCompare.html#compareDuplicates(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>compareDuplicates(Db, Dbt, Dbt)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>
+<DD>The DbDupCompare interface is used by the Db.setDuplicatelicateCompare method.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#compareTo(com.sleepycat.db.Dbt)"><B>compareTo(Dbt)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Returns -1 if the byte array of this thang is less than that of the
+ given thang, 0 if they are equal, or 1 if greater.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#consume(int, java.lang.Object[], java.lang.Object[])"><B>consume(int, Object[], Object[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Performs a database 'get and consume' operation.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Returns true if this set contains the specified element.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns true if this list contains the specified element.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>
+<DD>Returns true if this set contains the specified key.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html#contains(java.lang.Object)"><B>contains(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>
+<DD>Returns true if this set contains the specified element.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#containsAll(java.util.Collection)"><B>containsAll(Collection)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns true if this collection contains all of the elements in the
+ specified collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#containsKey(java.lang.Object)"><B>containsKey(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns true if this map contains the specified key.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#containsValue(java.lang.Object)"><B>containsValue(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns true if this map contains the specified value.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#copy(com.sleepycat.bdb.DataThang)"><B>copy(DataThang)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Copies the data from the given thang to this thang..
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#count()"><B>count()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Return the number of duplicates for the current key.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#count()"><B>count()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the number of elements having the same key value as the key
+ value of the element last returned by next() or previous().
+<DT><A HREF="com/sleepycat/db/Dbc.html#count(int)"><B>count(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.count method returns a count of the number of data items for the key to which the cursor refers.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html"><B>CurrentTransaction</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>.<DD>Provides access to the current transaction for the current thread within the
+ context of a Berkeley DB environment.<DT><A HREF="com/sleepycat/db/Db.html#cursor(com.sleepycat.db.DbTxn, int)"><B>cursor(DbTxn, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.cursor method returns a created database cursor.
+</DL>
+<HR>
+<A NAME="_D_"><!-- --></A><H2>
+<B>D</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/bind/DataBinding.html"><B>DataBinding</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>.<DD>The interface implemented by all data-to-object bindings.<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html"><B>DataBuffer</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>.<DD>The interface used in bindings to access the data as a byte array.<DT><A HREF="com/sleepycat/bdb/DataCursor.html"><B>DataCursor</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>.<DD>(<em>internal</em>) Represents a Berkeley DB cursor and adds support for
+ indices, bindings and key ranges.<DT><A HREF="com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataCursor)"><B>DataCursor(DataCursor)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Clones a cursor preserving the current position.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean)"><B>DataCursor(DataView, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Creates a cursor for a given view.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object)"><B>DataCursor(DataView, boolean, Object)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Creates a cursor for a given view and single key range.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#DataCursor(com.sleepycat.bdb.DataView, boolean, java.lang.Object, boolean, java.lang.Object, boolean)"><B>DataCursor(DataView, boolean, Object, boolean, Object, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Creates a cursor for a given view and key range.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html"><B>DataDb</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>.<DD>(<em>internal</em>) Wraps a Berkeley DB database (Db) object and adds
+ normalization of certain flags and environment modes.<DT><A HREF="com/sleepycat/bdb/DataDb.html#DataDb(com.sleepycat.db.Db)"><B>DataDb(Db)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Creates a database wrapper.
+<DT><A HREF="com/sleepycat/bdb/bind/DataFormat.html"><B>DataFormat</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>.<DD>The tag interface implemented by all data formats.<DT><A HREF="com/sleepycat/bdb/DataIndex.html"><B>DataIndex</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>.<DD>Represents a Berkeley DB secondary index.<DT><A HREF="com/sleepycat/bdb/DataIndex.html#DataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.KeyExtractor)"><B>DataIndex(DataStore, Db, DataFormat, KeyExtractor)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>
+<DD>Creates an index from a previously opened Db object.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html"><B>DataStore</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>.<DD>Represents a Berkeley DB database in the role of a primary data store.<DT><A HREF="com/sleepycat/bdb/DataStore.html#DataStore(com.sleepycat.db.Db, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.bind.DataFormat, com.sleepycat.bdb.PrimaryKeyAssigner)"><B>DataStore(Db, DataFormat, DataFormat, PrimaryKeyAssigner)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Creates a store from a previously opened Db object.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html"><B>DataThang</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>.<DD>(<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ the <A HREF="com/sleepycat/bdb/bind/DataBuffer.html"><CODE>DataBuffer</CODE></A> interface for bindings and other added utilities.<DT><A HREF="com/sleepycat/bdb/DataThang.html#DataThang()"><B>DataThang()</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Creates a thang with no data.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#DataThang(byte[])"><B>DataThang(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Creates a thang containing the given data data.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#DataThang(com.sleepycat.bdb.DataThang)"><B>DataThang(DataThang)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Creates a thang with a copy of the data from the given thang.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html#dataToInput(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToInput(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>
+<DD>Utility method to create a new tuple input object for reading the data
+ from a given buffer.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>
+<DD>Converts a data buffer into an Object.
+<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>
+<DD>Utility method for use by bindings to deserialize an object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer, DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>
+<DD>Converts key and value data buffers into an entity Object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>dataToObject(DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#dataToObject(java.lang.Object)"><B>dataToObject(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>Can be overridden to convert the deserialized data object to another
+ object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#dataToObject(java.lang.Object, java.lang.Object)"><B>dataToObject(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>Constructs an entity object from deserialized key and value data
+ objects.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)"><B>dataToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput)"><B>dataToObject(TupleInput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>Constructs a key or value object from <A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> data.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)"><B>dataToObject(TupleInput, Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object)"><B>dataToObject(TupleInput, Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>Constructs an entity object from <A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key data and
+ deserialized value data objects.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)"><B>dataToObject(TupleInput, TupleInput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#dataToObject(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput)"><B>dataToObject(TupleInput, TupleInput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>Constructs an entity object from <A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A> key and value data
+ objects.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberFormat.html#dataToRecordNumber(com.sleepycat.bdb.bind.DataBuffer)"><B>dataToRecordNumber(DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>
+<DD>Utility method for use by bindings to translate a data buffer to an
+ record number integer.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html"><B>DataType</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>.<DD>Primitive data type constants.<DT><A HREF="com/sleepycat/bdb/DataView.html"><B>DataView</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>.<DD>(<em>internal</em>) Represents a Berkeley DB database and adds support
+ for indices, bindings and key ranges.<DT><A HREF="com/sleepycat/bdb/DataView.html#DataView(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>DataView(DataStore, DataIndex, DataBinding, DataBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Creates a view for a given store/index and bindings.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#DATETIME"><B>DATETIME</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>Date</code> data type.
+<DT><A HREF="com/sleepycat/db/Db.html"><B>Db</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>.<DD>The Db handle is the handle for a Berkeley DB database, which may or may not be part of a database environment.<DT><A HREF="com/sleepycat/db/Db.html#DB_AFTER"><B>DB_AFTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_AGGRESSIVE"><B>DB_AGGRESSIVE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_APPEND"><B>DB_APPEND</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ARCH_ABS"><B>DB_ARCH_ABS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ARCH_DATA"><B>DB_ARCH_DATA</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ARCH_LOG"><B>DB_ARCH_LOG</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ARCH_REMOVE"><B>DB_ARCH_REMOVE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_AUTO_COMMIT"><B>DB_AUTO_COMMIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_BEFORE"><B>DB_BEFORE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_BTREE"><B>DB_BTREE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CACHED_COUNTS"><B>DB_CACHED_COUNTS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CDB_ALLDB"><B>DB_CDB_ALLDB</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CHKSUM"><B>DB_CHKSUM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CONSUME"><B>DB_CONSUME</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CONSUME_WAIT"><B>DB_CONSUME_WAIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CREATE"><B>DB_CREATE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CURRENT"><B>DB_CURRENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_CXX_NO_EXCEPTIONS"><B>DB_CXX_NO_EXCEPTIONS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DBT_MALLOC"><B>DB_DBT_MALLOC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DBT_PARTIAL"><B>DB_DBT_PARTIAL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DBT_REALLOC"><B>DB_DBT_REALLOC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DBT_USERMEM"><B>DB_DBT_USERMEM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DIRECT_DB"><B>DB_DIRECT_DB</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DIRECT_LOG"><B>DB_DIRECT_LOG</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DIRTY_READ"><B>DB_DIRTY_READ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DONOTINDEX"><B>DB_DONOTINDEX</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DUP"><B>DB_DUP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_DUPSORT"><B>DB_DUPSORT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_EID_BROADCAST"><B>DB_EID_BROADCAST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_EID_INVALID"><B>DB_EID_INVALID</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ENCRYPT"><B>DB_ENCRYPT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ENCRYPT_AES"><B>DB_ENCRYPT_AES</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_EXCL"><B>DB_EXCL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_FAST_STAT"><B>DB_FAST_STAT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_FILEOPEN"><B>DB_FILEOPEN</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_FIRST"><B>DB_FIRST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_FLUSH"><B>DB_FLUSH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_FORCE"><B>DB_FORCE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_GET_BOTH"><B>DB_GET_BOTH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_GET_BOTH_RANGE"><B>DB_GET_BOTH_RANGE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_GET_RECNO"><B>DB_GET_RECNO</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_HASH"><B>DB_HASH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_CDB"><B>DB_INIT_CDB</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_LOCK"><B>DB_INIT_LOCK</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_LOG"><B>DB_INIT_LOG</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_MPOOL"><B>DB_INIT_MPOOL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_REP"><B>DB_INIT_REP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_INIT_TXN"><B>DB_INIT_TXN</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_JOIN_ITEM"><B>DB_JOIN_ITEM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_JOIN_NOSORT"><B>DB_JOIN_NOSORT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_JOINENV"><B>DB_JOINENV</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_KEYEMPTY"><B>DB_KEYEMPTY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_KEYEXIST"><B>DB_KEYEXIST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_KEYFIRST"><B>DB_KEYFIRST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_KEYLAST"><B>DB_KEYLAST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LAST"><B>DB_LAST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_DEADLOCK"><B>DB_LOCK_DEADLOCK</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_DEFAULT"><B>DB_LOCK_DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_EXPIRE"><B>DB_LOCK_EXPIRE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_GET"><B>DB_LOCK_GET</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_GET_TIMEOUT"><B>DB_LOCK_GET_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_IREAD"><B>DB_LOCK_IREAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_IWR"><B>DB_LOCK_IWR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_IWRITE"><B>DB_LOCK_IWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_MAXLOCKS"><B>DB_LOCK_MAXLOCKS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_MINLOCKS"><B>DB_LOCK_MINLOCKS</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_MINWRITE"><B>DB_LOCK_MINWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_NOTGRANTED"><B>DB_LOCK_NOTGRANTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><B>DB_LOCK_NOWAIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_OLDEST"><B>DB_LOCK_OLDEST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_PUT"><B>DB_LOCK_PUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_PUT_ALL"><B>DB_LOCK_PUT_ALL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_PUT_OBJ"><B>DB_LOCK_PUT_OBJ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_RANDOM"><B>DB_LOCK_RANDOM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_READ"><B>DB_LOCK_READ</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_TIMEOUT"><B>DB_LOCK_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_WRITE"><B>DB_LOCK_WRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCK_YOUNGEST"><B>DB_LOCK_YOUNGEST</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOCKDOWN"><B>DB_LOCKDOWN</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_LOG_AUTOREMOVE"><B>DB_LOG_AUTOREMOVE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_MPOOL_NOFILE"><B>DB_MPOOL_NOFILE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE"><B>DB_MULTIPLE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><B>DB_MULTIPLE_KEY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NEXT"><B>DB_NEXT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NEXT_DUP"><B>DB_NEXT_DUP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NEXT_NODUP"><B>DB_NEXT_NODUP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NODUPDATA"><B>DB_NODUPDATA</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOLOCKING"><B>DB_NOLOCKING</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOMMAP"><B>DB_NOMMAP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOORDERCHK"><B>DB_NOORDERCHK</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOOVERWRITE"><B>DB_NOOVERWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOPANIC"><B>DB_NOPANIC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER"><B>DB_NOSERVER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER_HOME"><B>DB_NOSERVER_HOME</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOSERVER_ID"><B>DB_NOSERVER_ID</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOSYNC"><B>DB_NOSYNC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_NOTFOUND"><B>DB_NOTFOUND</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_OLD_VERSION"><B>DB_OLD_VERSION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_ORDERCHKONLY"><B>DB_ORDERCHKONLY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_OVERWRITE"><B>DB_OVERWRITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PAGE_NOTFOUND"><B>DB_PAGE_NOTFOUND</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PANIC_ENVIRONMENT"><B>DB_PANIC_ENVIRONMENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_POSITION"><B>DB_POSITION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PREV"><B>DB_PREV</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PREV_NODUP"><B>DB_PREV_NODUP</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRINTABLE"><B>DB_PRINTABLE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIORITY_DEFAULT"><B>DB_PRIORITY_DEFAULT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIORITY_HIGH"><B>DB_PRIORITY_HIGH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIORITY_LOW"><B>DB_PRIORITY_LOW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIORITY_VERY_HIGH"><B>DB_PRIORITY_VERY_HIGH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIORITY_VERY_LOW"><B>DB_PRIORITY_VERY_LOW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_PRIVATE"><B>DB_PRIVATE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_QUEUE"><B>DB_QUEUE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RDONLY"><B>DB_RDONLY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RECNO"><B>DB_RECNO</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RECNUM"><B>DB_RECNUM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RECORDCOUNT"><B>DB_RECORDCOUNT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RECOVER"><B>DB_RECOVER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RECOVER_FATAL"><B>DB_RECOVER_FATAL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REGION_INIT"><B>DB_REGION_INIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RENUMBER"><B>DB_RENUMBER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_CLIENT"><B>DB_REP_CLIENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_DUPMASTER"><B>DB_REP_DUPMASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_HANDLE_DEAD"><B>DB_REP_HANDLE_DEAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_HOLDELECTION"><B>DB_REP_HOLDELECTION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_ISPERM"><B>DB_REP_ISPERM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_LOGSONLY"><B>DB_REP_LOGSONLY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_MASTER"><B>DB_REP_MASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_NEWMASTER"><B>DB_REP_NEWMASTER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_NEWSITE"><B>DB_REP_NEWSITE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_NOBUFFER"><B>DB_REP_NOBUFFER</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_NOTPERM"><B>DB_REP_NOTPERM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_OUTDATED"><B>DB_REP_OUTDATED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_PERMANENT"><B>DB_REP_PERMANENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REP_UNAVAIL"><B>DB_REP_UNAVAIL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_REVSPLITOFF"><B>DB_REVSPLITOFF</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RMW"><B>DB_RMW</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RPCCLIENT"><B>DB_RPCCLIENT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_RUNRECOVERY"><B>DB_RUNRECOVERY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SALVAGE"><B>DB_SALVAGE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SECONDARY_BAD"><B>DB_SECONDARY_BAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SET"><B>DB_SET</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SET_LOCK_TIMEOUT"><B>DB_SET_LOCK_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SET_RANGE"><B>DB_SET_RANGE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SET_RECNO"><B>DB_SET_RECNO</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SET_TXN_TIMEOUT"><B>DB_SET_TXN_TIMEOUT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SNAPSHOT"><B>DB_SNAPSHOT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_STAT_CLEAR"><B>DB_STAT_CLEAR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_SYSTEM_MEM"><B>DB_SYSTEM_MEM</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_THREAD"><B>DB_THREAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TIME_NOTGRANTED"><B>DB_TIME_NOTGRANTED</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TRUNCATE"><B>DB_TRUNCATE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_ABORT"><B>DB_TXN_ABORT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_APPLY"><B>DB_TXN_APPLY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_BACKWARD_ROLL"><B>DB_TXN_BACKWARD_ROLL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_FORWARD_ROLL"><B>DB_TXN_FORWARD_ROLL</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_NOSYNC"><B>DB_TXN_NOSYNC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_NOT_DURABLE"><B>DB_TXN_NOT_DURABLE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_NOWAIT"><B>DB_TXN_NOWAIT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_PRINT"><B>DB_TXN_PRINT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_SYNC"><B>DB_TXN_SYNC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_TXN_WRITE_NOSYNC"><B>DB_TXN_WRITE_NOSYNC</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_UNKNOWN"><B>DB_UNKNOWN</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_UPGRADE"><B>DB_UPGRADE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_USE_ENVIRON"><B>DB_USE_ENVIRON</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_USE_ENVIRON_ROOT"><B>DB_USE_ENVIRON_ROOT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERB_CHKPOINT"><B>DB_VERB_CHKPOINT</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERB_DEADLOCK"><B>DB_VERB_DEADLOCK</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERB_RECOVERY"><B>DB_VERB_RECOVERY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERB_REPLICATION"><B>DB_VERB_REPLICATION</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERB_WAITSFOR"><B>DB_VERB_WAITSFOR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERIFY"><B>DB_VERIFY</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERIFY_BAD"><B>DB_VERIFY_BAD</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERSION_MAJOR"><B>DB_VERSION_MAJOR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERSION_MINOR"><B>DB_VERSION_MINOR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_VERSION_PATCH"><B>DB_VERSION_PATCH</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#DB_WRITECURSOR"><B>DB_WRITECURSOR</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_XA_CREATE"><B>DB_XA_CREATE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_XIDDATASIZE"><B>DB_XIDDATASIZE</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#DB_YIELDCPU"><B>DB_YIELDCPU</B></A> -
+Static variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>A constant used to configure the system.
+<DT><A HREF="com/sleepycat/db/Db.html#Db(com.sleepycat.db.DbEnv, int)"><B>Db(DbEnv, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The constructor creates a Db object that is the handle for a Berkeley DB database.
+<DT><A HREF="com/sleepycat/db/DbAppDispatch.html"><B>DbAppDispatch</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppDispatch.html">DbAppDispatch</A>.<DD>An interface specifying a recovery function, which recovers application-specific actions.<DT><A HREF="com/sleepycat/db/DbAppendRecno.html"><B>DbAppendRecno</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>.<DD>An interface specifying a callback function that modifies stored data based on a generated key.<DT><A HREF="com/sleepycat/db/DbAppendRecno.html#dbAppendRecno(com.sleepycat.db.Db, com.sleepycat.db.Dbt, int)"><B>dbAppendRecno(Db, Dbt, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppendRecno.html">DbAppendRecno</A>
+<DD>The DbAppendRecno interface is used by the Db.setAppendRecno method.
+<DT><A HREF="com/sleepycat/db/DbBtreeCompare.html"><B>DbBtreeCompare</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeCompare.html">DbBtreeCompare</A>.<DD>An interface specifying a comparison function, which imposes a total ordering on the keys in a Btree database.<DT><A HREF="com/sleepycat/db/DbBtreePrefix.html"><B>DbBtreePrefix</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>.<DD>An interface specifying a comparison function, which specifies the number of bytes needed to differentiate Btree keys.<DT><A HREF="com/sleepycat/db/DbBtreeStat.html"><B>DbBtreeStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>.<DD>The DbBtreeStat object is used to return Btree or Recno database statistics.<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#DbBtreeStat()"><B>DbBtreeStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Dbc.html"><B>Dbc</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>.<DD>The Dbc object is the handle for a cursor into a Berkeley DB database.<DT><A HREF="com/sleepycat/db/DbClient.html"><B>DbClient</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbClient.html">DbClient</A>.<DD>The DbClient object is used to encapsulate a reference to an RPC client.<DT><A HREF="com/sleepycat/db/DbDeadlockException.html"><B>DbDeadlockException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</A>.<DD>This information describes the DbDeadlockException class and how it is used in the Berkeley DB library.<DT><A HREF="com/sleepycat/db/DbDupCompare.html"><B>DbDupCompare</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbDupCompare.html">DbDupCompare</A>.<DD>An interface specifying a comparison function, which imposes a total ordering on the duplicate data items in a Btree database.<DT><A HREF="com/sleepycat/db/DbEnv.html"><B>DbEnv</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>.<DD>The DbEnv object is the handle for a Berkeley DB environment -- a collection including support for some or all of caching, locking, logging and transaction subsystems, as well as databases and log files.<DT><A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>DbEnv.RepProcessMessage</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>.<DD>&nbsp;<DT><A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html#DbEnv.RepProcessMessage()"><B>DbEnv.RepProcessMessage()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#DbEnv(int)"><B>DbEnv(int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The constructor creates the DbEnv object.
+<DT><A HREF="com/sleepycat/db/DbEnvFeedback.html"><B>DbEnvFeedback</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>.<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html"><CODE>DbEnvFeedbackHandler</CODE></A></I><DT><A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html"><B>DbEnvFeedbackHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>.<DD>The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.<DT><A HREF="com/sleepycat/db/DbErrcall.html"><B>DbErrcall</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrcall.html">DbErrcall</A>.<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbErrorHandler.html"><CODE>DbErrorHandler</CODE></A></I><DT><A HREF="com/sleepycat/db/DbErrorHandler.html"><B>DbErrorHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>.<DD>An interface specifying a application-specific error reporting function.<DT><A HREF="com/sleepycat/db/DbException.html"><B>DbException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>.<DD>This information describes the DbException class and how it is used by the various Berkeley DB classes.<DT><A HREF="com/sleepycat/db/DbException.html#DbException(java.lang.String)"><B>DbException(String)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>The DbException constructor returns an instance of the DbException class containing the string.
+<DT><A HREF="com/sleepycat/db/DbException.html#DbException(java.lang.String, int)"><B>DbException(String, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>The DbException constructor returns an instance of the DbException class containing the string and the encapsulated errno.
+<DT><A HREF="com/sleepycat/db/DbException.html#DbException(java.lang.String, int, com.sleepycat.db.DbEnv)"><B>DbException(String, int, DbEnv)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>The DbException constructor returns an instance of the DbException class containing the string, the encapsulated errno, and the database environment.
+<DT><A HREF="com/sleepycat/db/DbFeedback.html"><B>DbFeedback</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedback.html">DbFeedback</A>.<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbFeedbackHandler.html"><CODE>DbFeedbackHandler</CODE></A></I><DT><A HREF="com/sleepycat/db/DbFeedbackHandler.html"><B>DbFeedbackHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>.<DD>The DbFeedbackHandler interface is used by the Db.setFeedback method.<DT><A HREF="com/sleepycat/db/DbHash.html"><B>DbHash</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbHash.html">DbHash</A>.<DD>An interface specifying a hashing function, which imposes a total ordering on the Hash database.<DT><A HREF="com/sleepycat/db/DbHashStat.html"><B>DbHashStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>.<DD>The DbHashStat object is used to return Hash database statistics.<DT><A HREF="com/sleepycat/db/DbHashStat.html#DbHashStat()"><B>DbHashStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbKeyRange.html"><B>DbKeyRange</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>.<DD>&nbsp;<DT><A HREF="com/sleepycat/db/DbKeyRange.html#DbKeyRange()"><B>DbKeyRange()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbLock.html"><B>DbLock</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLock.html">DbLock</A>.<DD>The locking interfaces for the Berkeley DB database environment are methods of the <A HREF="com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html"><B>DbLockNotGrantedException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>.<DD>This information describes the DbLockNotGrantedException class and how it is used by the various Db* classes.<DT><A HREF="com/sleepycat/db/DbLockRequest.html"><B>DbLockRequest</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>.<DD>The DbLockRequest object is used to encapsulate a single lock request.<DT><A HREF="com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock)"><B>DbLockRequest(int, int, Dbt, DbLock)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode and lock, for the specified object.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#DbLockRequest(int, int, com.sleepycat.db.Dbt, com.sleepycat.db.DbLock, int)"><B>DbLockRequest(int, int, Dbt, DbLock, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest constructor constructs a DbLockRequest with the specified operation, mode, lock and timeout for the specified object.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html"><B>DbLockStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>.<DD>The DbLockStat object is used to return lock region statistics.<DT><A HREF="com/sleepycat/db/DbLockStat.html#DbLockStat()"><B>DbLockStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbLogc.html"><B>DbLogc</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogc.html">DbLogc</A>.<DD>The DbLogc object is the handle for a cursor into the log files, supporting sequential access to the records stored in log files.<DT><A HREF="com/sleepycat/db/DbLogStat.html"><B>DbLogStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>.<DD>The DbLogStat object is used to return logging subsystem statistics.<DT><A HREF="com/sleepycat/db/DbLogStat.html#DbLogStat()"><B>DbLogStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbLsn.html"><B>DbLsn</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>.<DD>The DbLsn object is a <b>log sequence number</b> which specifies a unique location in a log file.<DT><A HREF="com/sleepycat/db/DbLsn.html#DbLsn(int, int)"><B>DbLsn(int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>
+<DD>The DbLsn constructor constructs a DbLsn with the specified file and offset.
+<DT><A HREF="com/sleepycat/db/DbMemoryException.html"><B>DbMemoryException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DbMemoryException.html">DbMemoryException</A>.<DD>This information describes the DbMemoryException class and how it is used by the various Db* classes.<DT><A HREF="com/sleepycat/db/DbMpoolFile.html"><B>DbMpoolFile</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>.<DD>The memory pool interfaces for the Berkeley DB database environment are methods of the <A HREF="com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A> handle.<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html"><B>DbMpoolFStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>.<DD>The DbMpoolFStat object is used to return memory pool per-file statistics.<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#DbMpoolFStat()"><B>DbMpoolFStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html"><B>DbMpoolStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>.<DD>The DbMpoolStat object is used to return memory pool statistics.<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#DbMpoolStat()"><B>DbMpoolStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbMultipleDataIterator.html"><B>DbMultipleDataIterator</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleDataIterator.html">DbMultipleDataIterator</A>.<DD>The DbMultipleDataIterator class is used to iterate through data returned using the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag from a database belonging to any access method.<DT><A HREF="com/sleepycat/db/DbMultipleDataIterator.html#DbMultipleDataIterator(com.sleepycat.db.Dbt)"><B>DbMultipleDataIterator(Dbt)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleDataIterator.html">DbMultipleDataIterator</A>
+<DD>The constructor takes the data <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE"><CODE>Db.DB_MULTIPLE</CODE></A> flag.
+<DT><A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>DbMultipleKeyDataIterator</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html">DbMultipleKeyDataIterator</A>.<DD>The DbMultipleKeyDataIterator class is used to iterate through data returned using the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Btree or Hash access methods.<DT><A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html#DbMultipleKeyDataIterator(com.sleepycat.db.Dbt)"><B>DbMultipleKeyDataIterator(Dbt)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html">DbMultipleKeyDataIterator</A>
+<DD>The constructor takes the data <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.
+<DT><A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>DbMultipleRecnoDataIterator</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html">DbMultipleRecnoDataIterator</A>.<DD>This class is used to iterate through data returned using the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag from a database belonging to the Recno or Queue access methods.<DT><A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html#DbMultipleRecnoDataIterator(com.sleepycat.db.Dbt)"><B>DbMultipleRecnoDataIterator(Dbt)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html">DbMultipleRecnoDataIterator</A>
+<DD>The constructor takes the data <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> returned by the call to <A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Db.get</CODE></A> or <A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get</CODE></A> that used the <A HREF="com/sleepycat/db/Db.html#DB_MULTIPLE_KEY"><CODE>Db.DB_MULTIPLE_KEY</CODE></A> flag.
+<DT><A HREF="com/sleepycat/db/DbPanicHandler.html"><B>DbPanicHandler</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>.<DD>An interface specifying a function to handle database environment panics.<DT><A HREF="com/sleepycat/db/DbPreplist.html"><B>DbPreplist</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbPreplist.html">DbPreplist</A>.<DD>The DbPreplist object is used to encapsulate a single prepared, but not yet resolved, transaction.<DT><A HREF="com/sleepycat/db/DbQueueStat.html"><B>DbQueueStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>.<DD>The DbQueueStat object is used to return Queue database statistics.<DT><A HREF="com/sleepycat/db/DbQueueStat.html#DbQueueStat()"><B>DbQueueStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#dbremove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><B>dbremove(DbTxn, String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRemove(DbTxn,String,String,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#dbRemove(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int)"><B>dbRemove(DbTxn, String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.dbRemove method removes the database specified by the <b>file</b> and <b>database</b> parameters.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#dbrename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><B>dbrename(DbTxn, String, String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><CODE>DbEnv.dbRename(DbTxn,String,String,String,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#dbRename(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, java.lang.String, int)"><B>dbRename(DbTxn, String, String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.dbRename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html"><B>DbRepStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>.<DD>The DbRepStat object is used to return replication subsystem statistics.<DT><A HREF="com/sleepycat/db/DbRepStat.html#DbRepStat()"><B>DbRepStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbRepTransport.html"><B>DbRepTransport</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>.<DD>An interface specifying a replication transmit function, which sends information to other members of the replication group.<DT><A HREF="com/sleepycat/db/DbRunRecoveryException.html"><B>DbRunRecoveryException</B></A> - exception com.sleepycat.db.<A HREF="com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</A>.<DD>This information describes the DbRunRecoveryException class and how it is used by the various Berkeley DB classes.<DT><A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html"><B>DbSecondaryKeyCreate</B></A> - interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>.<DD>An interface specifying a function which constructs secondary keys from primary key and data items.<DT><A HREF="com/sleepycat/db/Dbt.html"><B>Dbt</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>.<DD>This information describes the specific details of the Dbt class, used to encode keys and data items in a database.<DT><A HREF="com/sleepycat/db/Dbt.html#Dbt()"><B>Dbt()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Construct an empty Dbt.
+<DT><A HREF="com/sleepycat/db/Dbt.html#Dbt(byte[])"><B>Dbt(byte[])</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Construct a Dbt where the data is the contents of the array and the Dbt's length is set to the length of the array.
+<DT><A HREF="com/sleepycat/db/Dbt.html#Dbt(byte[], int, int)"><B>Dbt(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Construct a Dbt from <b>len</b> bytes from the array, starting at <b>off</b>.
+<DT><A HREF="com/sleepycat/db/Dbt.html#Dbt(java.lang.Object)"><B>Dbt(Object)</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Construct a Dbt where the data is the serialized form of the Object.
+<DT><A HREF="com/sleepycat/db/DbTxn.html"><B>DbTxn</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>.<DD>The DbTxn object is the handle for a transaction.<DT><A HREF="com/sleepycat/db/DbTxnStat.html"><B>DbTxnStat</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>.<DD>The DbTxnStat object is used to return transaction subsystem statistics.<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html"><B>DbTxnStat.Active</B></A> - class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>.<DD>&nbsp;<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#DbTxnStat.Active()"><B>DbTxnStat.Active()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#DbTxnStat()"><B>DbTxnStat()</B></A> -
+Constructor for class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_BUMP_SIZE"><B>DEFAULT_BUMP_SIZE</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#DEFAULT_INIT_SIZE"><B>DEFAULT_INIT_SIZE</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#del(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><B>del(DbTxn, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><CODE>delete(DbTxn,Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbc.html#del(int)"><B>del(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbc.html#delete(int)"><CODE>Dbc.delete(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#delete()"><B>delete()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Perform an arbitrary database 'delete' operation.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#delete(com.sleepycat.bdb.DataThang, int)"><B>delete(DataThang, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Performs a general database 'delete' operation.
+<DT><A HREF="com/sleepycat/db/Db.html#delete(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, int)"><B>delete(DbTxn, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.delete method removes key/data pairs from the database.
+<DT><A HREF="com/sleepycat/db/Dbc.html#delete(int)"><B>delete(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.delete method deletes the key/data pair to which the cursor refers.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadCollection(java.util.Collection)"><B>dirtyReadCollection(Collection)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read collection from a given stored collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadList(java.util.List)"><B>dirtyReadList(List)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read list from a given stored list.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadMap(java.util.Map)"><B>dirtyReadMap(Map)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read map from a given stored map.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSet(java.util.Set)"><B>dirtyReadSet(Set)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read set from a given stored set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSortedMap(java.util.SortedMap)"><B>dirtyReadSortedMap(SortedMap)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read sorted map from a given stored sorted map.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#dirtyReadSortedSet(java.util.SortedSet)"><B>dirtyReadSortedSet(SortedSet)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Creates a dirty-read sorted set from a given stored sorted set.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#dirtyReadView(boolean)"><B>dirtyReadView(boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns a new view with a specified dirtyRead setting.
+<DT><A HREF="com/sleepycat/db/DbTxn.html#discard(int)"><B>discard(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.discard method frees up all the per-process resources associated with the specified <A HREF="com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> handle, neither committing nor aborting the transaction.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#DOUBLE"><B>DOUBLE</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>Double</code> data type.
+<DT><A HREF="com/sleepycat/bdb/TransactionWorker.html#doWork()"><B>doWork()</B></A> -
+Method in interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>
+<DD>Perform the work for a single transaction.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#dump(com.sleepycat.db.Dbt, java.io.PrintStream)"><B>dump(Dbt, PrintStream)</B></A> -
+Static method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Prints the byte array of the given thing to the given stream using
+ toString() to convert the bytes to a string.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#dump(java.io.PrintStream)"><B>dump(PrintStream)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Prints the byte array of this thing to the given stream using toString()
+ to convert the bytes to a string.
+<DT><A HREF="com/sleepycat/db/Dbc.html#dup(int)"><B>dup(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.dup method creates a new cursor that uses the same transaction and locker ID as the original cursor.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#dupCursor(com.sleepycat.db.Dbc, boolean, int)"><B>dupCursor(Dbc, boolean, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Duplicates a cursor for this database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#duplicates(java.lang.Object)"><B>duplicates(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns a new collection containing the values mapped to the given
+ key in this map.
+</DL>
+<HR>
+<A NAME="_E_"><!-- --></A><H2>
+<B>E</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#EINVAL"><B>EINVAL</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#ENOMEM"><B>ENOMEM</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html"><B>EntityBinding</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>.<DD>The interface implemented by all entity or key/data-to-object bindings.<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#entrySet()"><B>entrySet()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns a set view of the mappings contained in this map.
+<DT><A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html#envid"><B>envid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html">DbEnv.RepProcessMessage</A>
+<DD>The <b>envid</b> field contains the local identifier of the environment returned by the DbEnv.replicationProcessMessage method.
+<DT><A HREF="com/sleepycat/db/DbKeyRange.html#equal"><B>equal</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>
+<DD>A value between 0 and 1, the proportion of keys equal to the
+ specified key.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#equals(com.sleepycat.db.Dbt)"><B>equals(Dbt)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Returns whether the byte array of this thang is equal to that of the
+ given thang.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberFormat.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>
+<DD>Test for equality.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Compares the specified object with this map for equality.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Compares the specified object with this list for equality.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Compares the specified object with this collection for equality.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Compares this entry to a given entry as specified by <CODE>Map.Entry.equals(java.lang.Object)</CODE>.
+<DT><A HREF="com/sleepycat/db/DbTxn.html#equals(java.lang.Object)"><B>equals(Object)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><B>err(int, String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.err, DbEnv.errx, <A HREF="com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> and <A HREF="com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods provide error-messaging functionality for applications written using the Berkeley DB library.
+<DT><A HREF="com/sleepycat/db/Db.html#err(int, java.lang.String)"><B>err(int, String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The <A HREF="com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A>, <A HREF="com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A>, Db.err and Db.errx methods provide error-messaging functionality for applications written using the Berkeley DB library.
+<DT><A HREF="com/sleepycat/db/DbErrcall.html#errcall(java.lang.String, java.lang.String)"><B>errcall(String, String)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrcall.html">DbErrcall</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)"><CODE>DbErrorHandler.error(String,String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbErrorHandler.html#error(java.lang.String, java.lang.String)"><B>error(String, String)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrorHandler.html">DbErrorHandler</A>
+<DD>In some cases, when an error occurs, Berkeley DB will call the DbErrorHandler interface with additional error information.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><B>errx(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.errx and <A HREF="com/sleepycat/db/Db.html#errx(java.lang.String)"><CODE>Db.errx</CODE></A> methods perform identically to the DbEnv.err and <A HREF="com/sleepycat/db/Db.html#err(int, java.lang.String)"><CODE>Db.err</CODE></A> methods, except that they do not append the final separator characters and standard error string to the error message.
+<DT><A HREF="com/sleepycat/db/Db.html#errx(java.lang.String)"><B>errx(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The <A HREF="com/sleepycat/db/DbEnv.html#errx(java.lang.String)"><CODE>DbEnv.errx</CODE></A> and Db.errx methods perform identically to the <A HREF="com/sleepycat/db/DbEnv.html#err(int, java.lang.String)"><CODE>DbEnv.err</CODE></A> and Db.err methods, except that they do not append the final separator characters and standard error string to the error message.
+<DT><A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html"><B>ExceptionUnwrapper</B></A> - class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html">ExceptionUnwrapper</A>.<DD>Unwraps nested exceptions by calling the <A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()"><CODE>ExceptionWrapper.getDetail()</CODE></A> method for exceptions that implement the
+ <A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html"><CODE>ExceptionWrapper</CODE></A> interface.<DT><A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html#ExceptionUnwrapper()"><B>ExceptionUnwrapper()</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html">ExceptionUnwrapper</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html"><B>ExceptionWrapper</B></A> - interface com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>.<DD>Interface implemented by exceptions that can contain nested exceptions.<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>extractIndexKey(DataBuffer, DataBuffer, DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>
+<DD>Extracts the index key data from primary key and value buffers.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>extractIndexKey(DataBuffer, DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>extractIndexKey(DataBuffer, DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer, com.sleepycat.bdb.bind.DataBuffer)"><B>extractIndexKey(DataBuffer, DataBuffer, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey(java.lang.Object, java.lang.Object)"><B>extractIndexKey(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>Extracts the index key data object from primary key and value data
+ objects.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>extractIndexKey(TupleInput, Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>extractIndexKey(TupleInput, Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>Extracts the index key data from primary key tuple data and deserialized
+ value data.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>extractIndexKey(TupleInput, TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#extractIndexKey(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>extractIndexKey(TupleInput, TupleInput, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>Extracts the index key data from primary
+ key tuple and value tuple data.
+</DL>
+<HR>
+<A NAME="_F_"><!-- --></A><H2>
+<B>F</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html"><B>FastInputStream</B></A> - class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>.<DD>A replacement for ByteArrayInputStream that does not synchronize every
+ byte read.<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#FastInputStream(byte[])"><B>FastInputStream(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>Creates an input stream.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#FastInputStream(byte[], int, int)"><B>FastInputStream(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>Creates an input stream.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html"><B>FastOutputStream</B></A> - class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>.<DD>A replacement for ByteArrayOutputStream that does not synchronize every
+ byte read.<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream()"><B>FastOutputStream()</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Creates an output stream with default sizes.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(byte[])"><B>FastOutputStream(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Creates an output stream with a given initial buffer and a default
+ bump size.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(byte[], int)"><B>FastOutputStream(byte[], int)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Creates an output stream with a given initial buffer and a given
+ bump size.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(int)"><B>FastOutputStream(int)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Creates an output stream with a default bump size and a given initial
+ size.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#FastOutputStream(int, int)"><B>FastOutputStream(int, int)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Creates an output stream with a given bump size and initial size.
+<DT><A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><B>feedback(DbEnv, int, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html">DbEnvFeedbackHandler</A>
+<DD>The DbEnvFeedbackHandler interface is used by the DbEnv.setFeedback method.
+<DT><A HREF="com/sleepycat/db/DbEnvFeedback.html#feedback(com.sleepycat.db.DbEnv, int, int)"><B>feedback(DbEnv, int, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedback.html">DbEnvFeedback</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html#feedback(com.sleepycat.db.DbEnv, int, int)"><CODE>DbEnvFeedbackHandler.feedback(DbEnv,int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><B>feedback(Db, int, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedbackHandler.html">DbFeedbackHandler</A>
+<DD>The DbFeedbackHandler interface is used by the Db.setFeedback method.
+<DT><A HREF="com/sleepycat/db/DbFeedback.html#feedback(com.sleepycat.db.Db, int, int)"><B>feedback(Db, int, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedback.html">DbFeedback</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbFeedbackHandler.html#feedback(com.sleepycat.db.Db, int, int)"><CODE>DbFeedbackHandler.feedback(Db,int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#file_name"><B>file_name</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>The name of the file.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#find(java.lang.Object, boolean)"><B>find(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Find the given value, using DB_GET_BOTH if possible, or a sequential
+ search otherwise.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns the first (lowest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns the first (lowest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#first()"><B>first()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns the first (lowest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#firstKey()"><B>firstKey()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns the first (lowest) key currently in this sorted map.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#FLAGS_MOD_MASK"><B>FLAGS_MOD_MASK</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#FLAGS_POS_MASK"><B>FLAGS_POS_MASK</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#FLOAT"><B>FLOAT</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>Float</code> data type.
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html"><B>ForeignKeyIndex</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>.<DD>Represents a Berkeley DB secondary index where the index key is the primary
+ key of another data store.<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, com.sleepycat.bdb.bind.KeyExtractor, com.sleepycat.bdb.DataStore, int)"><B>ForeignKeyIndex(DataStore, Db, KeyExtractor, DataStore, int)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>Creates a foreign key index from a previously opened Db object.
+</DL>
+<HR>
+<A NAME="_G_"><!-- --></A><H2>
+<B>G</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/Db.html#get_bt_minkey()"><B>get_bt_minkey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getBtreeMinKey()"><CODE>getBtreeMinKey()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_byteswapped()"><B>get_byteswapped()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#isByteSwapped()"><CODE>isByteSwapped()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_cachesize_ncache()"><B>get_cachesize_ncache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><CODE>DbEnv.getCacheSizeNcache()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_cachesize_ncache()"><B>get_cachesize_ncache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getCacheSizeNcache()"><CODE>getCacheSizeNcache()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_cachesize()"><B>get_cachesize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getCacheSize()"><CODE>DbEnv.getCacheSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_cachesize()"><B>get_cachesize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getCacheSize()"><CODE>getCacheSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_data_dirs()"><B>get_data_dirs()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getDataDirs()"><CODE>DbEnv.getDataDirs()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_data()"><B>get_data()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getData()"><CODE>Dbt.getData()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_dbname()"><B>get_dbname()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDatabaseName()"><CODE>getDatabaseName()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMemoryException.html#get_dbt()"><B>get_dbt()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMemoryException.html">DbMemoryException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMemoryException.html#getDbt()"><CODE>DbMemoryException.getDbt()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_dlen()"><B>get_dlen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getPartialLength()"><CODE>Dbt.getPartialLength()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_doff()"><B>get_doff()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getPartialOffset()"><CODE>Dbt.getPartialOffset()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_encrypt_flags()"><B>get_encrypt_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getEncryptFlags()"><CODE>DbEnv.getEncryptFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_encrypt_flags()"><B>get_encrypt_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getEncryptFlags()"><CODE>getEncryptFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_env()"><B>get_env()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDbEnv()"><CODE>getDbEnv()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbException.html#get_errno()"><B>get_errno()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbException.html#getErrno()"><CODE>DbException.getErrno()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_errpfx()"><B>get_errpfx()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getErrorPrefix()"><CODE>DbEnv.getErrorPrefix()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_errpfx()"><B>get_errpfx()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getErrorPrefix()"><CODE>getErrorPrefix()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLsn.html#get_file()"><B>get_file()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLsn.html#getFile()"><CODE>DbLsn.getFile()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_filename()"><B>get_filename()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getFileName()"><CODE>getFileName()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_flags_raw()"><B>get_flags_raw()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_flags()"><B>get_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getFlags()"><CODE>Dbt.getFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#get_flags()"><B>get_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getFlags()"><CODE>DbMpoolFile.getFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_flags()"><B>get_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getFlags()"><CODE>DbEnv.getFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_flags()"><B>get_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getFlags()"><CODE>getFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_h_ffactor()"><B>get_h_ffactor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getHashFillFactor()"><CODE>getHashFillFactor()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_h_nelem()"><B>get_h_nelem()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getHashNumElements()"><CODE>getHashNumElements()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_home()"><B>get_home()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getDbEnvHome()"><CODE>DbEnv.getDbEnvHome()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_index()"><B>get_index()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getIndex()"><CODE>DbLockNotGrantedException.getIndex()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lg_bsize()"><B>get_lg_bsize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogBufferSize()"><CODE>DbEnv.getLogBufferSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lg_dir()"><B>get_lg_dir()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogDir()"><CODE>DbEnv.getLogDir()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lg_max()"><B>get_lg_max()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogMax()"><CODE>DbEnv.getLogMax()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lg_regionmax()"><B>get_lg_regionmax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLogRegionMax()"><CODE>DbEnv.getLogRegionMax()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lk_conflicts()"><B>get_lk_conflicts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockConflicts()"><CODE>DbEnv.getLockConflicts()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lk_detect()"><B>get_lk_detect()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockDetect()"><CODE>DbEnv.getLockDetect()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_lockers()"><B>get_lk_max_lockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><CODE>DbEnv.getLockMaxLockers()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_locks()"><B>get_lk_max_locks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><CODE>DbEnv.getLockMaxLocks()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_lk_max_objects()"><B>get_lk_max_objects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><CODE>DbEnv.getLockMaxObjects()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#get_lock()"><B>get_lock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getLock()"><CODE>DbLockRequest.getLock()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_lock()"><B>get_lock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><CODE>DbLockNotGrantedException.getLock()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_lorder()"><B>get_lorder()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getByteOrder()"><CODE>getByteOrder()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#get_maxsize()"><B>get_maxsize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><CODE>DbMpoolFile.getMaxsize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#get_mode()"><B>get_mode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getMode()"><CODE>DbLockRequest.getMode()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_mode()"><B>get_mode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getMode()"><CODE>DbLockNotGrantedException.getMode()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_mp_mmapsize()"><B>get_mp_mmapsize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><CODE>DbEnv.getMemoryPoolMapSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_mpf()"><B>get_mpf()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.get_mpf method returns the handle for the cache file underlying the database.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#get_obj()"><B>get_obj()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getObj()"><CODE>DbLockRequest.getObj()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_obj()"><B>get_obj()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><CODE>DbLockNotGrantedException.getObj()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_object()"><B>get_object()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB
+ 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getObject()"><CODE>Dbt.getObject()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_offset()"><B>get_offset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getOffset()"><CODE>Dbt.getOffset()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLsn.html#get_offset()"><B>get_offset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLsn.html#getOffset()"><CODE>DbLsn.getOffset()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#get_op()"><B>get_op()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#getOp()"><CODE>DbLockRequest.getOp()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#get_op()"><B>get_op()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getOp()"><CODE>DbLockNotGrantedException.getOp()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_open_flags()"><B>get_open_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getOpenFlags()"><CODE>DbEnv.getOpenFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_open_flags()"><B>get_open_flags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getOpenFlags()"><CODE>getOpenFlags()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_pagesize()"><B>get_pagesize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getPageSize()"><CODE>getPageSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#get_priority()"><B>get_priority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#getPriority()"><CODE>DbMpoolFile.getPriority()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_q_extentsize()"><B>get_q_extentsize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getQueueExtentSize()"><CODE>getQueueExtentSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_re_delim()"><B>get_re_delim()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordDelimiter()"><CODE>getRecordDelimiter()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_re_len()"><B>get_re_len()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordLength()"><CODE>getRecordLength()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_re_pad()"><B>get_re_pad()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordPad()"><CODE>getRecordPad()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_re_source()"><B>get_re_source()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getRecordSource()"><CODE>getRecordSource()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_recno_key_data()"><B>get_recno_key_data()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getRecordNumber()"><CODE>Dbt.getRecordNumber()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_rep_limit()"><B>get_rep_limit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getReplicationLimit()"><CODE>DbEnv.getReplicationLimit()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_shm_key()"><B>get_shm_key()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getSegmentId()"><CODE>DbEnv.getSegmentId()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_size()"><B>get_size()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getSize()"><CODE>Dbt.getSize()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_tas_spins()"><B>get_tas_spins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><CODE>DbEnv.getTestAndSetSpins()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_timeout(int)"><B>get_timeout(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTimeout(int)"><CODE>DbEnv.getTimeout(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_tmp_dir()"><B>get_tmp_dir()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTmpDir()"><CODE>DbEnv.getTmpDir()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_transactional()"><B>get_transactional()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#isTransactional()"><CODE>isTransactional()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_tx_max()"><B>get_tx_max()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTxnMax()"><CODE>DbEnv.getTxnMax()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_tx_timestamp()"><B>get_tx_timestamp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><CODE>DbEnv.getTxnTimestamp()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#get_type()"><B>get_type()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#getDbType()"><CODE>getDbType()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#get_ulen()"><B>get_ulen()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#getUserBufferLength()"><CODE>Dbt.getUserBufferLength()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_verbose(int)"><B>get_verbose(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVerbose(int)"><CODE>DbEnv.getVerbose(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_version_major()"><B>get_version_major()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionMajor()"><CODE>DbEnv.getVersionMajor()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_version_minor()"><B>get_version_minor()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionMinor()"><CODE>DbEnv.getVersionMinor()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_version_patch()"><B>get_version_patch()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionPatch()"><CODE>DbEnv.getVersionPatch()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#get_version_string()"><B>get_version_string()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#getVersionString()"><CODE>DbEnv.getVersionString()</CODE></A></I>
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#get(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><B>get(DataThang, DataThang, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Performs a general database 'get' operation.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#get(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><B>get(Dbc, DataThang, DataThang, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Performs a general database 'get' operation via a cursor.
+<DT><A HREF="com/sleepycat/db/DbLogc.html#get(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><B>get(DbLsn, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogc.html">DbLogc</A>
+<DD>The DbLogc.get method returns records from the log.
+<DT><A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>get(Dbt, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.get method retrieves key/data pairs from the database.
+<DT><A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>get(Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.get method retrieves key/data pairs from the database.
+<DT><A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>get(DbTxn, Dbt, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.get method retrieves key/data pairs from the database.
+<DT><A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>get(DbTxn, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.get method retrieves key/data pairs from the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#get(int)"><B>get(int)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns the element at the specified position in this list.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#get(java.lang.Object)"><B>get(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns the value to which this map maps the specified key.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#get(java.lang.Object, java.lang.Object, int, boolean)"><B>get(Object, Object, int, boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Perform a database 'get' using the given key and value.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#get(java.lang.Object, java.lang.Object, int, boolean, java.lang.Object[])"><B>get(Object, Object, int, boolean, Object[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Performs a general database 'get' operation.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html#getBaseClass()"><B>getBaseClass()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>
+<DD>Returns the base class for this format.
+<DT><A HREF="com/sleepycat/db/Db.html#getBtreeMinKey()"><B>getBtreeMinKey()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getBtreeMinKey method returns the minimum number of key/data pairs intended to be stored on any single Btree leaf page.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Returns the buffer owned by this object.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#getBufferBytes()"><B>getBufferBytes()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>Returns the underlying data being read.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Returns the length used in the internal buffer, that is, the offset at
+ which data will be written next.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#getBufferLength()"><B>getBufferLength()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>Returns the end of the buffer being read.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Returns the offset of the internal buffer.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#getBufferOffset()"><B>getBufferOffset()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>Returns the offset at which data is being read from the buffer.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#getByteLength(char[])"><B>getByteLength(char[])</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#getByteLength(char[], int, int)"><B>getByteLength(char[], int, int)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Returns the byte length of the UTF string that would be created by
+ converting the given characters to UTF.
+<DT><A HREF="com/sleepycat/db/Db.html#getByteOrder()"><B>getByteOrder()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getByteOrder method returns the database byte order; a byte order of 4,321 indicates a big endian order, and a byte order of 1,234 indicates a little endian order.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getBytes()"><B>getBytes()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Returns the data for this thang.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getByteStream()"><B>getByteStream()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Returns the data for this thang as a byte array input stream..
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getCacheSize method returns the size of the cache.
+<DT><A HREF="com/sleepycat/db/Db.html#getCacheSize()"><B>getCacheSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getCacheSize method returns the size of the cache.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getCacheSizeNcache()"><B>getCacheSizeNcache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getCacheSizeNcache method returns the number of caches.
+<DT><A HREF="com/sleepycat/db/Db.html#getCacheSizeNcache()"><B>getCacheSizeNcache()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The DbEnv.getCacheSizeNcache method returns the number of caches.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#getCatalog()"><B>getCatalog()</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Returns the class catalog associated with this factory.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#getCharLength(byte[])"><B>getCharLength(byte[])</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Returns the number of characters represented by the given UTF string.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#getCharLength(byte[], int, int)"><B>getCharLength(byte[], int, int)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Returns the number of characters represented by the given UTF string.
+<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(byte[])"><B>getClassFormat(byte[])</B></A> -
+Method in interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>
+<DD>Return the ObjectStreamClass for the given class ID.
+<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html#getClassFormat(java.lang.String)"><B>getClassFormat(String)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassFormat(java.lang.String)"><B>getClassFormat(String)</B></A> -
+Method in interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>
+<DD>Return the ObjectStreamClass for the given class name.
+<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html#getClassID(java.lang.String)"><B>getClassID(String)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html#getClassID(java.lang.String)"><B>getClassID(String)</B></A> -
+Method in interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>
+<DD>Return the class ID for the current version of the given class name.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#getCollection()"><B>getCollection()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the collection associated with this iterator.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#getCurrentKey()"><B>getCurrentKey()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns the key object for the last record read.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#getCurrentRecordNumber()"><B>getCurrentRecordNumber()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns the record number for the last record read.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getCurrentTxn()"><B>getCurrentTxn()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the current transaction for the view or null if the environment
+ is non-transactional.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#getCurrentValue()"><B>getCurrentValue()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns the value object for the last record read.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getData()"><B>getData()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the data array.
+<DT><A HREF="com/sleepycat/db/Db.html#getDatabaseName()"><B>getDatabaseName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getDatabaseName method returns the current database name.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getDataBytes()"><B>getDataBytes()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#getDataBytes()"><B>getDataBytes()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#getDataBytes()"><B>getDataBytes()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Returns the byte array of the data buffer.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getDataDirs()"><B>getDataDirs()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getDataDirs method returns the array of directories.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>
+<DD>Returns the format used for the data of this binding.
+<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#getDataFormat()"><B>getDataFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getDataFormation()"><B>getDataFormation()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#getDataFormation()"><B>getDataFormation()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#getDataFormation()"><B>getDataFormation()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Returns the formation associated with the data in this buffer.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getDataLength()"><B>getDataLength()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#getDataLength()"><B>getDataLength()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#getDataLength()"><B>getDataLength()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Returns the byte length of the data in the array.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#getDataOffset()"><B>getDataOffset()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#getDataOffset()"><B>getDataOffset()</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#getDataOffset()"><B>getDataOffset()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Returns the byte offset of the data in the array.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getDb()"><B>getDb()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the database for the index, if one is used, or store, if no
+ index is used.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#getDb()"><B>getDb()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns the underlying database.
+<DT><A HREF="com/sleepycat/db/DbException.html#getDbEnv()"><B>getDbEnv()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>The DbException.getDbEnv method returns the database environment.
+<DT><A HREF="com/sleepycat/db/Db.html#getDbEnv()"><B>getDbEnv()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getDbEnv method returns the handle for the database environment underlying the database.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getDbEnvHome()"><B>getDbEnvHome()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getDbEnvHome method returns the database environment home directory.
+<DT><A HREF="com/sleepycat/db/DbMemoryException.html#getDbt()"><B>getDbt()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMemoryException.html">DbMemoryException</A>
+<DD>The <b>getDbt</b> method returns the <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> with insufficient memory to complete the operation, causing the DbMemoryException to be thrown.
+<DT><A HREF="com/sleepycat/db/Db.html#getDbType()"><B>getDbType()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getDbType method returns the type of the underlying access method (and file format).
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#getDeleteAction()"><B>getDeleteAction()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>Returns a value indicating what action occurs when the foreign key
+ is deleted.
+<DT><A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html">IOExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html#getDetail()"><B>getDetail()</B></A> -
+Method in interface com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>
+<DD>Returns the nested exception or null if none is present.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#getDirtyRead()"><B>getDirtyRead()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Returns whether transactions will read data that is modified by another
+ transaction but not committed.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getEncryptFlags()"><B>getEncryptFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getEncryptFlags method returns the encryption flags.
+<DT><A HREF="com/sleepycat/db/Db.html#getEncryptFlags()"><B>getEncryptFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getEncryptFlags method returns the encryption flags.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getEnv()"><B>getEnv()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the environment for the store and index.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#getEnv()"><B>getEnv()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns the environment associated with this store.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#getEnv()"><B>getEnv()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns the environment.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#getEnv()"><B>getEnv()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Returns the underlying Berkeley DB environment.
+<DT><A HREF="com/sleepycat/db/DbException.html#getErrno()"><B>getErrno()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>The DbException.getErrno method returns the error value.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getErrorPrefix method returns the error prefix.
+<DT><A HREF="com/sleepycat/db/Db.html#getErrorPrefix()"><B>getErrorPrefix()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getErrorPrefix method returns the error prefix.
+<DT><A HREF="com/sleepycat/db/DbLsn.html#getFile()"><B>getFile()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>
+<DD>The DbLsn.getFile method returns the DbLsn object's file number.
+<DT><A HREF="com/sleepycat/db/Db.html#getFileName()"><B>getFileName()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getFileName method returns the current filename.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getFlags()"><B>getFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the object flag value.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#getFlags()"><B>getFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>The DbMpoolFile.getFlags method returns the flags.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getFlags()"><B>getFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getFlags method returns the configuration flags.
+<DT><A HREF="com/sleepycat/db/Db.html#getFlags()"><B>getFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getFlags method returns the current flags.
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#getForeignStore()"><B>getForeignStore()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>Returns the foreign store which has the primary key which matches the
+ index key of this store.
+<DT><A HREF="com/sleepycat/db/Db.html#getHashFillFactor()"><B>getHashFillFactor()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getHashFillFactor method returns the hash table density.
+<DT><A HREF="com/sleepycat/db/Db.html#getHashNumElements()"><B>getHashNumElements()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getHashNumElements method returns the estimate of the final size of the hash table.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getIndex()"><B>getIndex()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the index, as specified to the constructor.
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getIndex()"><B>getIndex()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD>The <b>getIndex</b> method returns -1 when <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the index of the failed DbLockRequest when <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.
+<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html#getIndexKeyFormat()"><B>getIndexKeyFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>
+<DD>Returns the format of the index key data.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getIndexKeyFormat()"><B>getIndexKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getIndexKeyFormat()"><B>getIndexKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getIndexKeyFormat()"><B>getIndexKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#getIndices()"><B>getIndices()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns the indices associated with this store.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#getInstance(com.sleepycat.db.DbEnv)"><B>getInstance(DbEnv)</B></A> -
+Static method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Gets the CurrentTransaction accessor for a specified Berkeley DB
+ environment.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#getKey()"><B>getKey()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Returns the key of this entry.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#getKeyAssigner()"><B>getKeyAssigner()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns the key assigner associated with this store.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getKeyBinding()"><B>getKeyBinding()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the key binding that is used.
+<DT><A HREF="com/sleepycat/bdb/DataIndex.html#getKeyExtractor()"><B>getKeyExtractor()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>
+<DD>Returns the key extractor associated with this index.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns the key format associated with this store.
+<DT><A HREF="com/sleepycat/bdb/DataIndex.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>
+<DD>Returns the key format associated with this index.
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>
+<DD>Returns the format used for the key data of this binding.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getKeyFormat()"><B>getKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#getLock()"><B>getLock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.getLock method returns the lock reference.
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getLock()"><B>getLock()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD>The <b>getLock</b> method returns null when <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>lock</b> in the failed DbLockRequest when <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLockConflicts()"><B>getLockConflicts()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLockConflicts method returns the conflicts array.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLockDetect()"><B>getLockDetect()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLockDetect method returns the deadlock detector configuration.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#getLockForWrite()"><B>getLockForWrite()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns whether write-locks will be obtained when reading with this
+ cursor.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLockers()"><B>getLockMaxLockers()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLockMaxLockers method returns the maximum number of lockers.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLockMaxLocks()"><B>getLockMaxLocks()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.setLockMaxLocks method returns the maximum number of locks.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLockMaxObjects()"><B>getLockMaxObjects()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLockMaxObjects method returns the maximum number of locked objects.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLogBufferSize()"><B>getLogBufferSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLogBufferSize method returns the size of the log buffer, in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLogDir()"><B>getLogDir()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLogDir method returns the log directory.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLogMax()"><B>getLogMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLogMax method returns the maximum log file size.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getLogRegionMax()"><B>getLogRegionMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getLogRegionMax method returns the size of the underlying logging subsystem region.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#getMaxRetries()"><B>getMaxRetries()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Returns the maximum number of retries that will be performed when
+ deadlocks are detected.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#getMaxsize()"><B>getMaxsize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>The DbMpoolFile.getMaxsize method returns the size of the cache in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getMemoryPoolMapSize()"><B>getMemoryPoolMapSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getMemoryPoolMapSize method returns the maximum file map size.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.getMode method returns the lock mode.
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getMode()"><B>getMode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD>The <b>getMode</b> method returns the <b>mode</b> parameter when <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>mode</b> for the failed DbLockRequest when <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#getNoWait()"><B>getNoWait()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Returns whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#getObj()"><B>getObj()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.getObj method returns the object protected by this lock.
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getObj()"><B>getObj()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD>The <b>getObj</b> method returns the <b>mode</b> parameter when returns the <b>object</b> parameter when <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>object</b> for the failed DbLockRequest when <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getObject()"><B>getObject()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return an object from the data array, encoding the object using the Java serialization API.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getOffset()"><B>getOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the byte offset into the data array.
+<DT><A HREF="com/sleepycat/db/DbLsn.html#getOffset()"><B>getOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html">DbLsn</A>
+<DD>The DbLsn.getOffset method returns the DbLsn object's file number.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#getOp()"><B>getOp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.getOp method returns the operation.
+<DT><A HREF="com/sleepycat/db/DbLockNotGrantedException.html#getOp()"><B>getOp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html">DbLockNotGrantedException</A>
+<DD>The <b>getOp</b> method returns 0 when <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet</CODE></A> was called, and returns the <b>op</b> for the failed DbLockRequest when <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector</CODE></A> was called.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getOpenFlags()"><B>getOpenFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getOpenFlags method returns the open method flags.
+<DT><A HREF="com/sleepycat/db/Db.html#getOpenFlags()"><B>getOpenFlags()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getOpenFlags method returns the current open method flags.
+<DT><A HREF="com/sleepycat/db/Db.html#getPageSize()"><B>getPageSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getPageSize method returns the page size.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getPartialLength()"><B>getPartialLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the length of the partial record, in bytes.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getPartialOffset()"><B>getPartialOffset()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the offset of the partial record, in bytes.
+<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html#getPrimaryKeyFormat()"><B>getPrimaryKeyFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>
+<DD>Returns the format of the primary key data or null if the index key data
+ is not derived from the primary key data.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getPrimaryKeyFormat()"><B>getPrimaryKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getPrimaryKeyFormat()"><B>getPrimaryKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getPrimaryKeyFormat()"><B>getPrimaryKeyFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding(java.lang.Class, com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>getPrimitiveBinding(Class, TupleFormat)</B></A> -
+Static method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>Creates a tuple binding for a primitive Java class.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#getPriority()"><B>getPriority()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>The DbMpoolFile.getPriority method returns the cache priority.
+<DT><A HREF="com/sleepycat/db/Db.html#getQueueExtentSize()"><B>getQueueExtentSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getQueueExtentSize method returns the number of pages in an extent.
+<DT><A HREF="com/sleepycat/db/Db.html#getRecordDelimiter()"><B>getRecordDelimiter()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getRecordDelimiter method returns the delimiting byte.
+<DT><A HREF="com/sleepycat/db/Db.html#getRecordLength()"><B>getRecordLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getRecordLength method returns the record length.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getRecordNumber()"><B>getRecordNumber()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return an object from the data array, expecting that data to be a logical record number.
+<DT><A HREF="com/sleepycat/db/Db.html#getRecordPad()"><B>getRecordPad()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getRecordPad method returns the pad character.
+<DT><A HREF="com/sleepycat/db/Db.html#getRecordSource()"><B>getRecordSource()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.getRecordSource method returns the source file.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getReplicationLimit()"><B>getReplicationLimit()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getReplicationLimit method returns the transmit limit in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getSegmentId()"><B>getSegmentId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getSegmentId method returns the base segment ID.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getSingleKeyThang()"><B>getSingleKeyThang()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the key thang for a single key range, or null if a single key
+ range is not used.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getSize()"><B>getSize()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the data array size.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getStore()"><B>getStore()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the store, as specified to the constructor.
+<DT><A HREF="com/sleepycat/bdb/DataIndex.html#getStore()"><B>getStore()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>
+<DD>Returns the store associated with this index.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html#getStreamHeader()"><B>getStreamHeader()</B></A> -
+Static method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html">SerialOutput</A>
+<DD>Returns the fixed stream header used for all serialized streams in
+ PROTOCOL_VERSION_2 format.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getTestAndSetSpins()"><B>getTestAndSetSpins()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getTestAndSetSpins method returns the test-and-set spin count.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#getTimeout()"><B>getTimeout()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.getTimeout method returns the lock timeout value.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getTimeout(int)"><B>getTimeout(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getTimeout method returns a timeout value, in microseconds.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getTmpDir()"><B>getTmpDir()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getTmpDir method returns the database environment temporary file directory.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#getTxn()"><B>getTxn()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Returns the transaction associated with the current thread for this
+ environment, or null if no transaction is active.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getTxnMax()"><B>getTxnMax()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getTxnMax method returns the number of active transactions.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getTxnTimestamp()"><B>getTxnTimestamp()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getTxnTimestamp method returns the recovery timestamp.
+<DT><A HREF="com/sleepycat/db/Dbt.html#getUserBufferLength()"><B>getUserBufferLength()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Return the length in bytes of the user-specified buffer.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#getValue()"><B>getValue()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Returns the value of this entry.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getValueBinding()"><B>getValueBinding()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the value binding that is used.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#getValueEntityBinding()"><B>getValueEntityBinding()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns the entity binding that is used.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns the value format associated with this store.
+<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>
+<DD>Returns the format of the value data or null if the index key data is
+ not derived from the value data.
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>
+<DD>Returns the format used for the value data of this binding.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#getValueFormat()"><B>getValueFormat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getVerbose(int)"><B>getVerbose(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getVerbose method returns whether the specified <b>which</b> parameter is currently set or not.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getVersionMajor()"><B>getVersionMajor()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getVersionMajor method returns the release major number.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getVersionMinor()"><B>getVersionMinor()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getVersionMinor method returns the release minor number.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getVersionPatch()"><B>getVersionPatch()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getVersionPatch method returns the release patch number.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#getVersionString()"><B>getVersionString()</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.getVersionString method returns the release verbose version information, suitable for display.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#getView()"><B>getView()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns the view for this cursor, as specified to the constructor.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#getZeroTerminatedByteLength(byte[], int)"><B>getZeroTerminatedByteLength(byte[], int)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Returns the byte length of a null terminated UTF string, not including
+ the terminator.
+<DT><A HREF="com/sleepycat/db/DbPreplist.html#gid"><B>gid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbPreplist.html">DbPreplist</A>
+<DD>The global transaction ID for the transaction.
+<DT><A HREF="com/sleepycat/db/DbKeyRange.html#greater"><B>greater</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>
+<DD>A value between 0 and 1, the proportion of keys greater than
+ the specified key.
+</DL>
+<HR>
+<A NAME="_H_"><!-- --></A><H2>
+<B>H</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_bfree"><B>hash_bfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of bytes free on bucket pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_big_bfree"><B>hash_big_bfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of bytes free on big item pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_bigpages"><B>hash_bigpages</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of big key/data pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_buckets"><B>hash_buckets</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of hash buckets.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_dup"><B>hash_dup</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of duplicate pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_dup_free"><B>hash_dup_free</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of bytes free on duplicate pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_ffactor"><B>hash_ffactor</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The desired fill factor (number of items per bucket) specified at database-creation time.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_free"><B>hash_free</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of pages on the free list.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_magic"><B>hash_magic</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>Magic number that identifies the file as a Hash file.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_metaflags"><B>hash_metaflags</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_ndata"><B>hash_ndata</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of key/data pairs in the database.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_nkeys"><B>hash_nkeys</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of unique keys in the database.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_overflows"><B>hash_overflows</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of overflow pages (overflow pages are pages that contain items that did not fit in the main bucket page).
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_ovfl_free"><B>hash_ovfl_free</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The number of bytes free on overflow pages.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_pagesize"><B>hash_pagesize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The underlying Hash database page (and bucket) size, in bytes.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#hash_version"><B>hash_version</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>The version of the Hash database.
+<DT><A HREF="com/sleepycat/db/DbHash.html#hash(com.sleepycat.db.Db, byte[], int)"><B>hash(Db, byte[], int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbHash.html">DbHash</A>
+<DD>The DbHash interface is used by the Db.setHash method.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Computes a hash code as specified by <CODE>Map.Entry.hashCode()</CODE>.
+<DT><A HREF="com/sleepycat/db/DbTxn.html#hashCode()"><B>hashCode()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#hasNext()"><B>hasNext()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns true if this iterator has more elements when traversing in the
+ forward direction.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#hasPrevious()"><B>hasPrevious()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns true if this iterator has more elements when traversing in the
+ reverse direction.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#hasRecNumAccess()"><B>hasRecNumAccess()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether record number access is allowed.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#hasRecNumAccess()"><B>hasRecNumAccess()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns whether record number access is allowed.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#headMap(java.lang.Object)"><B>headMap(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted set whose keys are
+ strictly less than toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#headMap(java.lang.Object, boolean)"><B>headMap(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly less than toKey, optionally including toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#headSet(java.lang.Object)"><B>headSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toValue, optionally including toValue.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toKey, optionally including toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#headSet(java.lang.Object, boolean)"><B>headSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly less than toMapEntry, optionally including toMapEntry.
+</DL>
+<HR>
+<A NAME="_I_"><!-- --></A><H2>
+<B>I</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbTxn.html#id()"><B>id()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.id method returns the unique transaction id associated with the specified transaction.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#increment()"><B>increment()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Increments the data value for this thang, treating the byte array as
+ a Java BigInteger where the bytes are in MSB-first order.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#indexOf(java.lang.Object)"><B>indexOf(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns the index in this list of the first occurrence of the specified
+ element, or -1 if this list does not contain this element.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html#inputToData(com.sleepycat.bdb.bind.tuple.TupleInput, com.sleepycat.bdb.bind.DataBuffer)"><B>inputToData(TupleInput, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>
+<DD>Utility method to set the data in a data buffer to the data in a tuple
+ input object.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#INT"><B>INT</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>Integer</code> data type.
+<DT><A HREF="com/sleepycat/bdb/IntegrityConstraintException.html"><B>IntegrityConstraintException</B></A> - exception com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/IntegrityConstraintException.html">IntegrityConstraintException</A>.<DD>Thrown when an integrity constraint violation occurs.<DT><A HREF="com/sleepycat/bdb/IntegrityConstraintException.html#IntegrityConstraintException(java.lang.String)"><B>IntegrityConstraintException(String)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/IntegrityConstraintException.html">IntegrityConstraintException</A>
+<DD>Creates an integrity constraint exception.
+<DT><A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html"><B>IOExceptionWrapper</B></A> - exception com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html">IOExceptionWrapper</A>.<DD>An IOException that can contain nested exceptions.<DT><A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html#IOExceptionWrapper(java.lang.Throwable)"><B>IOExceptionWrapper(Throwable)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html">IOExceptionWrapper</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isAutoCommit()"><B>isAutoCommit()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether auto-commit is set for this view or for the
+ transactional environment of the store and index.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#isAutoCommit()"><B>isAutoCommit()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Returns whether AUTO_COMMIT will be used for all non-cursor write
+ operations when no transaction is active.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isAutoCommit()"><B>isAutoCommit()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether auto-commit is enabled for this container or for its
+ associated <A HREF="com/sleepycat/db/DbEnv.html"><CODE>DbEnv</CODE></A>.
+<DT><A HREF="com/sleepycat/db/Db.html#isByteSwapped()"><B>isByteSwapped()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.isByteSwapped method returns false if the underlying database files were created on an architecture of the same byte order as the current one, and true if they were not (that is, big-endian on a little-endian machine, or vice versa).
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#isDirtyRead()"><B>isDirtyRead()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Returns whether dirty-read is used for the current transaction.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isDirtyReadAllowed()"><B>isDirtyReadAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether DIRTY_READ was specified for both the Store and Index.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#isDirtyReadAllowed()"><B>isDirtyReadAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether dirty-read is allowed for the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadAllowed()"><B>isDirtyReadAllowed()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether dirty-read is allowed for this container.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isDirtyReadEnabled()"><B>isDirtyReadEnabled()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether DIRTY_READ will be used for all read operations.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isDirtyReadEnabled()"><B>isDirtyReadEnabled()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether dirty-read is enabled for this container.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether no records are present in the view.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isEmpty()"><B>isEmpty()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns true if this map or collection contains no mappings or elements.
+<DT><A HREF="com/sleepycat/db/Db.html#isEncrypted()"><B>isEncrypted()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The <A HREF="com/sleepycat/db/Db.html#isEncrypted()"><CODE>Db.isEncrypted</CODE></A> method returns false if the underlying database files are encrypted and true if they are not.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isIndexed()"><B>isIndexed()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether this container is a view on a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A> rather
+ than directly on a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/CurrentTransaction.html#isNoWait()"><B>isNoWait()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</A>
+<DD>Returns whether no-wait is used for the current transaction.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isOrdered()"><B>isOrdered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether keys are ordered for the index or store.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#isOrdered()"><B>isOrdered()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether keys are ordered for the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isOrdered()"><B>isOrdered()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether keys are ordered in this container.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isTransactional()"><B>isTransactional()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether the store and index are transactional.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#isTransactional()"><B>isTransactional()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns whether the database was opened in a transaction and therefore
+ must be written in a transaction.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isTransactional()"><B>isTransactional()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns whether the databases underlying this container are
+ transactional.
+<DT><A HREF="com/sleepycat/db/Db.html#isTransactional()"><B>isTransactional()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.isTransactional method returns true if the <A HREF="com/sleepycat/db/Db.html"><CODE>Db</CODE></A> handle has been opened in a transactional mode.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#isWriteAllowed()"><B>isWriteAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns whether write operations are allowed.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#isWriteAllowed()"><B>isWriteAllowed()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Returns whether write is allowed for this cursor, as specified to the
+ constructor.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#isWriteAllowed()"><B>isWriteAllowed()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Returns true if this is a read-write container or false if this is a
+ read-only container.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#iterator()"><B>iterator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns an iterator over the elements in this collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)"><B>iterator(boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns a read or read-write iterator over the elements in this
+ collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html#iterator(java.util.Iterator)"><B>iterator(Iterator)</B></A> -
+Static method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>
+<DD>Clones a stored iterator preserving its current position.
+</DL>
+<HR>
+<A NAME="_J_"><!-- --></A><H2>
+<B>J</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataCursor[], boolean)"><B>join(DataCursor[], boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns a cursor for this view that reads only records having the
+ index key values at the specified cursors.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#join(com.sleepycat.bdb.DataView[], java.lang.Object[], boolean)"><B>join(DataView[], Object[], boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Returns a cursor for this view that reads only records having the
+ specified index key values.
+<DT><A HREF="com/sleepycat/db/Db.html#join(com.sleepycat.db.Dbc[], int)"><B>join(Dbc[], int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.join method creates a specialized join cursor for use in performing equality or natural joins on secondary indices.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[])"><B>join(StoredContainer[], Object[])</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns an iterator representing an equality join of the indices and
+ index key values specified.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#join(com.sleepycat.bdb.collection.StoredContainer[], java.lang.Object[], boolean)"><B>join(StoredContainer[], Object[], boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns an iterator representing an equality join of the indices and
+ index key values specified.
+</DL>
+<HR>
+<A NAME="_K_"><!-- --></A><H2>
+<B>K</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/Db.html#key_range(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><B>key_range(DbTxn, Dbt, DbKeyRange, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><CODE>keyRange(DbTxn,Dbt,DbKeyRange,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/bdb/bind/KeyExtractor.html"><B>KeyExtractor</B></A> - interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>.<DD>The interface implemented for extracting the index key from primary key
+ and/or value buffers, and for clearing the index key in a value buffer.<DT><A HREF="com/sleepycat/db/Db.html#keyRange(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.DbKeyRange, int)"><B>keyRange(DbTxn, Dbt, DbKeyRange, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.keyRange method returns an estimate of the proportion of keys that are less than, equal to, and greater than the specified key.
+<DT><A HREF="com/sleepycat/bdb/KeyRangeException.html"><B>KeyRangeException</B></A> - exception com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A>.<DD>(<em>internal</em>) An exception thrown when a key is out of range.<DT><A HREF="com/sleepycat/bdb/KeyRangeException.html#KeyRangeException(java.lang.String)"><B>KeyRangeException(String)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/KeyRangeException.html">KeyRangeException</A>
+<DD>Creates a key range exception.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#keySet()"><B>keySet()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns a set view of the keys contained in this map.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#keySetView()"><B>keySetView()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Return a new key-set view derived from this view by setting the
+ entity and value binding to null.
+</DL>
+<HR>
+<A NAME="_L_"><!-- --></A><H2>
+<B>L</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns the last (highest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns the last (highest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#last()"><B>last()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns the last (highest) element currently in this sorted set.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#lastIndexOf(java.lang.Object)"><B>lastIndexOf(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns the index in this list of the last occurrence of the specified
+ element, or -1 if this list does not contain this element.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#lastKey()"><B>lastKey()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns the last (highest) element currently in this sorted map.
+<DT><A HREF="com/sleepycat/db/DbKeyRange.html#less"><B>less</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html">DbKeyRange</A>
+<DD>A value between 0 and 1, the proportion of keys less than the
+ specified key.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#listIterator()"><B>listIterator()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns a list iterator of the elements in this list (in proper
+ sequence).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#listIterator(int)"><B>listIterator(int)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns a list iterator of the elements in this list (in proper
+ sequence), starting at the specified position in this list.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_detect(int, int)"><B>lock_detect(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><CODE>DbEnv.lockDetect(int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_get(int, int, com.sleepycat.db.Dbt, int)"><B>lock_get(int, int, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.lockGet(int,int,Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_id_free(int)"><B>lock_id_free(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockIdFree(int)"><CODE>DbEnv.lockIdFree(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_id()"><B>lock_id()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId()</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_put(com.sleepycat.db.DbLock)"><B>lock_put(DbLock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><CODE>DbEnv.lockPut(DbLock)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_stat(int)"><B>lock_stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockStat(int)"><CODE>DbEnv.lockStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lock_vec(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><B>lock_vec(int, int, DbLockRequest[], int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><CODE>DbEnv.lockVector(int,int,DbLockRequest[],int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockDetect(int, int)"><B>lockDetect(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockDetect method runs one iteration of the deadlock detector.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockGet(int, int, com.sleepycat.db.Dbt, int)"><B>lockGet(int, int, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockGet method acquires a lock from the lock table, returning information about it in a DbLock object.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockId()"><B>lockId()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockId method returns a locker ID, which is guaranteed to be unique in the specified lock table.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockIdFree(int)"><B>lockIdFree(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockIdFree method frees a locker ID allocated by the <A HREF="com/sleepycat/db/DbEnv.html#lockId()"><CODE>DbEnv.lockId</CODE></A> method.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockPut(com.sleepycat.db.DbLock)"><B>lockPut(DbLock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockPut method releases <b>lock</b>.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockStat(int)"><B>lockStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockStat method returns the locking subsystem statistics.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#lockVector(int, int, com.sleepycat.db.DbLockRequest[], int, int)"><B>lockVector(int, int, DbLockRequest[], int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.lockVector method atomically obtains and releases one or more locks from the lock table.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_archive(int)"><B>log_archive(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logArchive(int)"><CODE>DbEnv.logArchive(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_compare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><B>log_compare(DbLsn, DbLsn)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><CODE>DbEnv.logCompare(DbLsn,DbLsn)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_cursor(int)"><B>log_cursor(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logCursor(int)"><CODE>DbEnv.logCursor(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_file(com.sleepycat.db.DbLsn)"><B>log_file(DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFile(DbLsn)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_flush(com.sleepycat.db.DbLsn)"><B>log_flush(DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><CODE>DbEnv.logFlush(DbLsn)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_put(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><B>log_put(DbLsn, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><CODE>DbEnv.logPut(DbLsn,Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#log_stat(int)"><B>log_stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#logStat(int)"><CODE>DbEnv.logStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logArchive(int)"><B>logArchive(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logArchive method returns an array of log or database filenames.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logCompare(com.sleepycat.db.DbLsn, com.sleepycat.db.DbLsn)"><B>logCompare(DbLsn, DbLsn)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logCompare method allows the caller to compare two <A HREF="com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects, returning 0 if they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b>, and -1 if <b>lsn0</b> is less than <b>lsn1</b>.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logCursor(int)"><B>logCursor(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logCursor method returns a created log cursor.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logFile(com.sleepycat.db.DbLsn)"><B>logFile(DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logFile method maps <A HREF="com/sleepycat/db/DbLsn.html"><CODE>DbLsn</CODE></A> objects to filenames, returning the name of the file containing the record named by <b>lsn</b>.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logFlush(com.sleepycat.db.DbLsn)"><B>logFlush(DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logFlush method writes log records to disk.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logPut(com.sleepycat.db.DbLsn, com.sleepycat.db.Dbt, int)"><B>logPut(DbLsn, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logPut method appends records to the log.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#logStat(int)"><B>logStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.logStat method returns the logging subsystem statistics.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#LONG"><B>LONG</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>Long</code> data type.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#lsn"><B>lsn</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>The current log sequence number when the transaction was begun.
+</DL>
+<HR>
+<A NAME="_M_"><!-- --></A><H2>
+<B>M</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#makeSpace(int)"><B>makeSpace(int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Ensure that at least the given number of bytes are available in the
+ internal buffer.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html"><B>MapEntry</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>.<DD>A simple Map.Entry implementation.<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#MapEntry(java.lang.Object, java.lang.Object)"><B>MapEntry(Object, Object)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Creates a map entry with a given key and value.
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#mark(int)"><B>mark(int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#markSupported()"><B>markSupported()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#marshalData(com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>marshalData(TupleOutput)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html">MarshalledTupleData</A>
+<DD>Construct the key or value tuple data from the key or value object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalIndexKey(java.lang.String, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>marshalIndexKey(String, TupleOutput)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html">MarshalledTupleKeyEntity</A>
+<DD>Extracts the entity's index key and writes it to the key output.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><B>MarshalledTupleData</B></A> - interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html">MarshalledTupleData</A>.<DD>A marshalling interface implemented by key, value or entity classes that
+ have tuple data.<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><B>MarshalledTupleKeyEntity</B></A> - interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html">MarshalledTupleKeyEntity</A>.<DD>A marshalling interface implemented by entity classes that have tuple data
+ keys.<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#marshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>marshalPrimaryKey(TupleOutput)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html">MarshalledTupleKeyEntity</A>
+<DD>Extracts the entity's primary key and writes it to the key output.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><B>memoryPoolFileStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.memoryPoolFileStat method creates an array of DbMpoolFStat objects containing statistics for individual files in the cache.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><B>memoryPoolStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.memoryPoolStat method returns the memory pool (that is, the buffer cache) subsystem statistics.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><B>memoryPoolTrickle(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.memoryPoolTrickle method ensures that a specified percent of the pages in the shared memory pool are clean, by writing dirty pages to their backing files.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memp_fstat(int)"><B>memp_fstat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolFileStat(int)"><CODE>DbEnv.memoryPoolFileStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memp_stat(int)"><B>memp_stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolStat(int)"><CODE>DbEnv.memoryPoolStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#memp_trickle(int)"><B>memp_trickle(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle(int)</CODE></A></I>
+</DL>
+<HR>
+<A NAME="_N_"><!-- --></A><H2>
+<B>N</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean)"><B>newDataIndex(DataStore, Db, String, boolean, boolean)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates an index from a previously opened Db object.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newDataStore(com.sleepycat.db.Db, java.lang.Class, com.sleepycat.bdb.PrimaryKeyAssigner)"><B>newDataStore(Db, Class, PrimaryKeyAssigner)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a store from a previously opened Db object.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newForeignKeyIndex(com.sleepycat.bdb.DataStore, com.sleepycat.db.Db, java.lang.String, boolean, boolean, com.sleepycat.bdb.DataStore, int)"><B>newForeignKeyIndex(DataStore, Db, String, boolean, boolean, DataStore, int)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a foreign key index from a previously opened Db object.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)"><B>newMap(DataIndex, Class, boolean)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a map for a given index that was obtained from this factory.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)"><B>newMap(DataStore, Class, boolean)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a map for a given store that was obtained from this factory.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html#newOutput()"><B>newOutput()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>
+<DD>Utility method for use by bindings to create a tuple output object.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataIndex, java.lang.Class, boolean)"><B>newSortedMap(DataIndex, Class, boolean)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a sorted map for a given index that was obtained from this
+ factory.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#newSortedMap(com.sleepycat.bdb.DataStore, java.lang.Class, boolean)"><B>newSortedMap(DataStore, Class, boolean)</B></A> -
+Method in class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a sorted map for a given store that was obtained from this
+ factory.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#next()"><B>next()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the next element in the interation.
+<DT><A HREF="com/sleepycat/db/DbMultipleDataIterator.html#next(com.sleepycat.db.Dbt)"><B>next(Dbt)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleDataIterator.html">DbMultipleDataIterator</A>
+<DD>The DbMultipleDataIterator.next method takes a <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A> that will be filled in with a reference to a buffer, a size, and an offset that together yield the next data item in the original bulk retrieval buffer.
+<DT><A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>next(Dbt, Dbt)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html">DbMultipleRecnoDataIterator</A>
+<DD>The DbMultipleRecnoDataIterator.next method takes two <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.
+<DT><A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html#next(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>next(Dbt, Dbt)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html">DbMultipleKeyDataIterator</A>
+<DD>The DbMultipleKeyDataIterator.next method takes two <A HREF="com/sleepycat/db/Dbt.html"><CODE>Dbt</CODE></A>s, one for a key and one for a data item, that will each be filled in with a reference to a buffer, a size, and an offset that together yield the next key and data item in the original bulk retrieval buffer.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#nextIndex()"><B>nextIndex()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the index of the element that would be returned by a subsequent
+ call to next.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#NONE"><B>NONE</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD>Undefined data type.
+</DL>
+<HR>
+<A NAME="_O_"><!-- --></A><H2>
+<B>O</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object)"><B>objectToData(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>Can be overridden to convert the object to a deserialized data object.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>
+<DD>Converts an Object into a data buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html">ByteArrayBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>
+<DD>Utility method for use by bindings to serialize an object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToData(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#objectToData(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToData(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>Converts a key or value object to a tuple data.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object)"><B>objectToKey(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>Extracts a key object from an entity object.
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToKey(Object, DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>
+<DD>Extracts the key data from an entity Object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToKey(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToKey(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToKey(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>Extracts a key tuple from an entity object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToKey(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToKey(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>Extracts a key tuple from an entity object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#objectToValue(java.lang.Object)"><B>objectToValue(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object)"><B>objectToValue(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>Extracts a value object from an entity object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object)"><B>objectToValue(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>Extracts a value object from an entity object.
+<DT><A HREF="com/sleepycat/bdb/bind/EntityBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToValue(Object, DataBuffer)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>
+<DD>Extracts the value data from an entity Object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToValue(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToValue(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.DataBuffer)"><B>objectToValue(Object, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToValue(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#objectToValue(java.lang.Object, com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>objectToValue(Object, TupleOutput)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>Extracts a key tuple from an entity object.
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_ABORT"><B>ON_DELETE_ABORT</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>When the foreign key is deleted, throw an exception.
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CASCADE"><B>ON_DELETE_CASCADE</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>When the foreign key is deleted, delete the index key.
+<DT><A HREF="com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR"><B>ON_DELETE_CLEAR</B></A> -
+Static variable in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</A>
+<DD>When the foreign key is deleted, clear the index key.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_DAY"><B>ONE_DAY</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>One day in milliseconds.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_HOUR"><B>ONE_HOUR</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>One hour in milliseconds.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_MINUTE"><B>ONE_MINUTE</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>One minute in milliseconds.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_SECOND"><B>ONE_SECOND</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>One second in milliseconds.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#ONE_WEEK"><B>ONE_WEEK</B></A> -
+Static variable in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>One week in milliseconds.
+<DT><A HREF="com/sleepycat/db/Db.html#open(com.sleepycat.db.DbTxn, java.lang.String, java.lang.String, int, int, int)"><B>open(DbTxn, String, String, int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.open method opens the database represented by the <b>file</b> and <b>database</b> parameters for both reading and writing.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#open(java.lang.String, int, int)"><B>open(String, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.open method opens a Berkeley DB environment.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#openCursor(boolean)"><B>openCursor(boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Opens a cursor for this database.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html#outputToData(com.sleepycat.bdb.bind.tuple.TupleOutput, com.sleepycat.bdb.bind.DataBuffer)"><B>outputToData(TupleOutput, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>
+<DD>Utility method to set the data in a data buffer to the data in a tuple
+ output object.
+</DL>
+<HR>
+<A NAME="_P_"><!-- --></A><H2>
+<B>P</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbPanicHandler.html#panic(com.sleepycat.db.DbEnv, com.sleepycat.db.DbException)"><B>panic(DbEnv, DbException)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbPanicHandler.html">DbPanicHandler</A>
+<DD>The DbPanicHandler interface is used by the DbEnv.setPanicHandler method.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#parentid"><B>parentid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>The transaction ID of the parent transaction (or 0, if no parent).
+<DT><A HREF="com/sleepycat/db/Dbc.html#pget(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>pget(Dbt, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Dbc.html#get(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>Dbc.get(Dbt,Dbt,Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#pget(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>pget(DbTxn, Dbt, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#get(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><CODE>get(DbTxn,Dbt,Dbt,Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbBtreePrefix.html#prefix(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>prefix(Db, Dbt, Dbt)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreePrefix.html">DbBtreePrefix</A>
+<DD>The DbBtreePrefix interface is used by the Db.setBtreePrefix method.
+<DT><A HREF="com/sleepycat/db/DbTxn.html#prepare(byte[])"><B>prepare(byte[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.prepare method initiates the beginning of a two-phase commit.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#previous()"><B>previous()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the next element in the interation.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#previousIndex()"><B>previousIndex()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Returns the index of the element that would be returned by a subsequent
+ call to previous.
+<DT><A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html"><B>PrimaryKeyAssigner</B></A> - interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</A>.<DD>An interface implemented to assign new primary key values.<DT><A HREF="com/sleepycat/bdb/DataDb.html#put(com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><B>put(DataThang, DataThang, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Performs a general database 'put' operation.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#put(com.sleepycat.db.Dbc, com.sleepycat.bdb.DataThang, com.sleepycat.bdb.DataThang, int)"><B>put(Dbc, DataThang, DataThang, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Performs a general database 'put' operation via a cursor.
+<DT><A HREF="com/sleepycat/db/Dbc.html#put(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>put(Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html">Dbc</A>
+<DD>The Dbc.put method stores key/data pairs into the database.
+<DT><A HREF="com/sleepycat/db/Db.html#put(com.sleepycat.db.DbTxn, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, int)"><B>put(DbTxn, Dbt, Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.put method stores key/data pairs in the database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#put(java.lang.Object, java.lang.Object)"><B>put(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Associates the specified value with the specified key in this map
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/DataView.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])"><B>put(Object, Object, int, Object[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Performs a database 'put' operation, optionally returning the old value.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[])"><B>put(Object, Object, int, Object[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Perform an arbitrary database 'put' operation, optionally returning
+ the previous value.
+<DT><A HREF="com/sleepycat/bdb/DataCursor.html#put(java.lang.Object, java.lang.Object, int, java.lang.Object[], boolean)"><B>put(Object, Object, int, Object[], boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html">DataCursor</A>
+<DD>Perform an arbitrary database 'put' operation, optionally using the
+ current key instead of the key parameter.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#putAll(java.util.Map)"><B>putAll(Map)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Copies all of the mappings from the specified map to this map (optional
+ operation).
+</DL>
+<HR>
+<A NAME="_Q_"><!-- --></A><H2>
+<B>Q</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_cur_recno"><B>qs_cur_recno</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Next available record number.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_extentsize"><B>qs_extentsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Underlying database extent size, in pages.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_first_recno"><B>qs_first_recno</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>First undeleted record in the database.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_magic"><B>qs_magic</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Magic number that identifies the file as a Queue file.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_metaflags"><B>qs_metaflags</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_ndata"><B>qs_ndata</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>The number of records in the database.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_nkeys"><B>qs_nkeys</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>The number of records in the database.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_pages"><B>qs_pages</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Number of pages in the database.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_pagesize"><B>qs_pagesize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Underlying database page size, in bytes.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_pgfree"><B>qs_pgfree</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Number of bytes free in database pages.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_re_len"><B>qs_re_len</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>The length of the records.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_re_pad"><B>qs_re_pad</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>The padding byte value for the records.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#qs_version"><B>qs_version</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>The version of the Queue file type.
+</DL>
+<HR>
+<A NAME="_R_"><!-- --></A><H2>
+<B>R</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#read()"><B>read()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#read(byte[])"><B>read(byte[])</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#read(byte[], int, int)"><B>read(byte[], int, int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readBoolean()"><B>readBoolean()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a boolean (one byte) unsigned value from the buffer and returns
+ true if it is non-zero and false if it is zero.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readByte()"><B>readByte()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed byte (one byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(char[])"><B>readBytes(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting array.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readBytes(int)"><B>readBytes(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of bytes from the buffer, converting each
+ unsigned byte value to a character of the resulting string.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readChar()"><B>readChar()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a char (two byte) unsigned value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(char[])"><B>readChars(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting array.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readChars(int)"><B>readChars(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of characters from the buffer, converting
+ each two byte unsigned value to a character of the resulting string.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readDouble()"><B>readDouble()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed double (eight byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readFloat()"><B>readFloat()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed float (four byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readInt()"><B>readInt()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed int (four byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readLong()"><B>readLong()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed long (eight byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readShort()"><B>readShort()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a signed short (two byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readString()"><B>readString()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads a null-terminated UTF string from the data buffer and converts
+ the data from UTF to Unicode.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(char[])"><B>readString(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readString(int)"><B>readString(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads the specified number of UTF characters string from the data
+ buffer and converts the data from UTF to Unicode.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedByte()"><B>readUnsignedByte()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads an unsigned byte (one byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedInt()"><B>readUnsignedInt()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads an unsigned int (four byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#readUnsignedShort()"><B>readUnsignedShort()</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Reads an unsigned short (two byte) value from the buffer.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberBinding.html"><B>RecordNumberBinding</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>.<DD>A concrete binding for record number keys.<DT><A HREF="com/sleepycat/bdb/RecordNumberBinding.html#RecordNumberBinding(com.sleepycat.bdb.RecordNumberFormat)"><B>RecordNumberBinding(RecordNumberFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</A>
+<DD>Creates a byte array binding.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberFormat.html"><B>RecordNumberFormat</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>.<DD>The data format for record number keys.<DT><A HREF="com/sleepycat/bdb/RecordNumberFormat.html#RecordNumberFormat()"><B>RecordNumberFormat()</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>
+<DD>Creates a record number format.
+<DT><A HREF="com/sleepycat/bdb/RecordNumberFormat.html#recordNumberToData(long, com.sleepycat.bdb.bind.DataBuffer)"><B>recordNumberToData(long, DataBuffer)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</A>
+<DD>Utility method for use by bindings to translate a record number integer
+ to a data buffer.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#remove()"><B>remove()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Removes the last element that was returned by next or previous (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#remove(int)"><B>remove(int)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Removes the element at the specified position in this list (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Removes the specified value from this set if it is present (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Removes the mapping for this key from this map if present (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Removes the first occurrence in this list of the specified element
+ (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>
+<DD>Removes the specified key from this set if it is present (optional
+ operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html#remove(java.lang.Object)"><B>remove(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>
+<DD>Removes the specified element from this set if it is present (optional
+ operation).
+<DT><A HREF="com/sleepycat/db/DbEnv.html#remove(java.lang.String, int)"><B>remove(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.remove method destroys a Berkeley DB environment if it is not currently in use.
+<DT><A HREF="com/sleepycat/db/Db.html#remove(java.lang.String, java.lang.String, int)"><B>remove(String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.remove method removes the database specified by the <b>file</b> and <b>database</b> parameters.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#removeAll(java.util.Collection)"><B>removeAll(Collection)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Removes all this collection's elements that are also contained in the
+ specified collection (optional operation).
+<DT><A HREF="com/sleepycat/db/Db.html#rename(java.lang.String, java.lang.String, java.lang.String, int)"><B>rename(String, String, String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.rename method renames the database specified by the <b>file</b> and <b>database</b> parameters to <b>newname</b>.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#rep_elect(int, int, int)"><B>rep_elect(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><CODE>DbEnv.replicationElect(int,int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#rep_process_message(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><B>rep_process_message(Dbt, Dbt, DbEnv.RepProcessMessage, DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#rep_start(com.sleepycat.db.Dbt, int)"><B>rep_start(Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><CODE>DbEnv.replicationStart(Dbt,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#rep_stat(int)"><B>rep_stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#replicationStat(int)"><CODE>DbEnv.replicationStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#replicationElect(int, int, int)"><B>replicationElect(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.replicationElect method holds an election for the master of a replication group.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><B>replicationProcessMessage(Dbt, Dbt, DbEnv.RepProcessMessage, DbLsn)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.replicationProcessMessage method processes an incoming replication message sent by a member of the replication group to the local database environment.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#replicationStart(com.sleepycat.db.Dbt, int)"><B>replicationStart(Dbt, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.replicationStart method configures the database environment as a client or master in a group of replicated database environments.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#replicationStat(int)"><B>replicationStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.replicationStat method returns the replication subsystem statistics.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#reset()"><B>reset()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#reset()"><B>reset()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#retainAll(java.util.Collection)"><B>retainAll(Collection)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Retains only the elements in this collection that are contained in the
+ specified collection (optional operation).
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)"><B>run(TransactionWorker)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Calls the <A HREF="com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A> method and, for transactional
+ environments, begins and ends a transaction.
+<DT><A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><B>RuntimeExceptionWrapper</B></A> - exception com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A>.<DD>A RuntimeException that can contain nested exceptions.<DT><A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html#RuntimeExceptionWrapper(java.lang.Throwable)"><B>RuntimeExceptionWrapper(Throwable)</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</A>
+<DD>&nbsp;
+</DL>
+<HR>
+<A NAME="_S_"><!-- --></A><H2>
+<B>S</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html#secondaryKeyCreate(com.sleepycat.db.Db, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt)"><B>secondaryKeyCreate(Db, Dbt, Dbt, Dbt)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html">DbSecondaryKeyCreate</A>
+<DD>The secondaryKeyCreate interface is used by the Db.associate method.
+<DT><A HREF="com/sleepycat/db/DbRepTransport.html#send(com.sleepycat.db.DbEnv, com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbLsn, int, int)"><B>send(DbEnv, Dbt, Dbt, DbLsn, int, int)</B></A> -
+Method in interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepTransport.html">DbRepTransport</A>
+<DD>The DbRepTransport interface is used by the DbEnv.setReplicationTransport method.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html"><B>SerialBinding</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>.<DD>A concrete serial binding for keys or values.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html#SerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat)"><B>SerialBinding(SerialFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</A>
+<DD>Creates a serial binding.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>SerialFormat</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>.<DD>The format for serialized data.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html#SerialFormat(com.sleepycat.bdb.bind.serial.ClassCatalog, java.lang.Class)"><B>SerialFormat(ClassCatalog, Class)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</A>
+<DD>Creates a serial format.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html"><B>SerialInput</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html">SerialInput</A>.<DD>Used instead of an <A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><CODE>ObjectInputStream</CODE></A>, which it extends, to read an
+ object stream written by the <A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html"><CODE>SerialOutput</CODE></A> class.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html#SerialInput(java.io.InputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)"><B>SerialInput(InputStream, ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html">SerialInput</A>
+<DD>Creates a serial input stream.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>SerialOutput</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html">SerialOutput</A>.<DD>Used instead of an ObjectOutputStream, which it extends, to write a compact
+ object stream.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html#SerialOutput(java.io.OutputStream, com.sleepycat.bdb.bind.serial.ClassCatalog)"><B>SerialOutput(OutputStream, ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html">SerialOutput</A>
+<DD>Creates a serial output stream.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>SerialSerialBinding</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>.<DD>An abstract entity binding that uses a serial key and a serial value.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html#SerialSerialBinding(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><B>SerialSerialBinding(SerialFormat, SerialFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</A>
+<DD>Creates a serial-serial entity binding.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>SerialSerialKeyExtractor</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>.<DD>A abstract key extractor that uses a serial key and a serial value.<DT><A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#SerialSerialKeyExtractor(com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><B>SerialSerialKeyExtractor(SerialFormat, SerialFormat, SerialFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</A>
+<DD>Creates a serial-serial entity binding.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_app_dispatch(com.sleepycat.db.DbAppDispatch)"><B>set_app_dispatch(DbAppDispatch)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><CODE>DbEnv.setAppDispatch(DbAppDispatch)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_append_recno(com.sleepycat.db.DbAppendRecno)"><B>set_append_recno(DbAppendRecno)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><CODE>setAppendRecno(DbAppendRecno)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_bt_compare(com.sleepycat.db.DbBtreeCompare)"><B>set_bt_compare(DbBtreeCompare)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><CODE>setBtreeCompare(DbBtreeCompare)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_bt_maxkey(int)"><B>set_bt_maxkey(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#set_bt_minkey(int)"><B>set_bt_minkey(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreeMinKey(int)"><CODE>setBtreeMinKey(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_bt_prefix(com.sleepycat.db.DbBtreePrefix)"><B>set_bt_prefix(DbBtreePrefix)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><CODE>setBtreePrefix(DbBtreePrefix)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_cachesize(int, int, int)"><B>set_cachesize(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_cachesize(int, int, int)"><B>set_cachesize(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_cachesize(long, int)"><B>set_cachesize(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><CODE>DbEnv.setCacheSize(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_cachesize(long, int)"><B>set_cachesize(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setCacheSize(long, int)"><CODE>setCacheSize(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_data_dir(java.lang.String)"><B>set_data_dir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><CODE>DbEnv.setDataDir(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_data(byte[])"><B>set_data(byte[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setData(byte[])"><CODE>Dbt.setData(byte[])</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_dlen(int)"><B>set_dlen(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setPartialLength(int)"><CODE>Dbt.setPartialLength(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_doff(int)"><B>set_doff(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setPartialOffset(int)"><CODE>Dbt.setPartialOffset(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_dup_compare(com.sleepycat.db.DbDupCompare)"><B>set_dup_compare(DbDupCompare)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><CODE>setDuplicateCompare(DbDupCompare)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_encrypt(java.lang.String, int)"><B>set_encrypt(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><CODE>DbEnv.setEncrypted(String,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_encrypt(java.lang.String, int)"><B>set_encrypt(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><CODE>setEncrypted(String,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_errcall(com.sleepycat.db.DbErrcall)"><B>set_errcall(DbErrcall)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>DbEnv.setErrorHandler(DbErrorHandler)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_errcall(com.sleepycat.db.DbErrcall)"><B>set_errcall(DbErrcall)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><CODE>setErrorHandler(DbErrorHandler)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_error_stream(java.io.OutputStream)"><B>set_error_stream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><CODE>DbEnv.setErrorStream(java.io.OutputStream)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_error_stream(java.io.OutputStream)"><B>set_error_stream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><CODE>setErrorStream(java.io.OutputStream)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_errpfx(java.lang.String)"><B>set_errpfx(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><CODE>DbEnv.setErrorPrefix(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_errpfx(java.lang.String)"><B>set_errpfx(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><CODE>setErrorPrefix(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_feedback(com.sleepycat.db.DbEnvFeedback)"><B>set_feedback(DbEnvFeedback)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><CODE>DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_feedback(com.sleepycat.db.DbFeedback)"><B>set_feedback(DbFeedback)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><CODE>setFeedbackHandler(DbFeedbackHandler)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_flags(int)"><B>set_flags(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setFlags(int)"><CODE>Dbt.setFlags(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_flags(int)"><B>set_flags(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setFlags(int)"><CODE>setFlags(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#set_flags(int, boolean)"><B>set_flags(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><CODE>DbMpoolFile.setFlags(int,boolean)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_flags(int, boolean)"><B>set_flags(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><CODE>DbEnv.setFlags(int,boolean)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_h_ffactor(int)"><B>set_h_ffactor(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHashFillFactor(int)"><CODE>setHashFillFactor(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_h_hash(com.sleepycat.db.DbHash)"><B>set_h_hash(DbHash)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><CODE>setHash(DbHash)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_h_nelem(int)"><B>set_h_nelem(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setHashNumElements(int)"><CODE>setHashNumElements(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lg_bsize(int)"><B>set_lg_bsize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><CODE>DbEnv.setLogBufferSize(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lg_dir(java.lang.String)"><B>set_lg_dir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><CODE>DbEnv.setLogDir(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lg_max(int)"><B>set_lg_max(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogMax(int)"><CODE>DbEnv.setLogMax(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lg_regionmax(int)"><B>set_lg_regionmax(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><CODE>DbEnv.setLogRegionMax(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lk_conflicts(byte[][])"><B>set_lk_conflicts(byte[][])</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><CODE>DbEnv.setLockConflicts(byte[][])</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lk_detect(int)"><B>set_lk_detect(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockDetect(int)"><CODE>DbEnv.setLockDetect(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_lockers(int)"><B>set_lk_max_lockers(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><CODE>DbEnv.setLockMaxLockers(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_locks(int)"><B>set_lk_max_locks(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><CODE>DbEnv.setLockMaxLocks(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_lk_max_objects(int)"><B>set_lk_max_objects(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><CODE>DbEnv.setLockMaxObjects(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#set_lock(com.sleepycat.db.DbLock)"><B>set_lock(DbLock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><CODE>DbLockRequest.setLock(DbLock)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_lorder(int)"><B>set_lorder(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setByteOrder(int)"><CODE>setByteOrder(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#set_maxsize(long)"><B>set_maxsize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><CODE>DbMpoolFile.setMaxsize(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#set_mode(int)"><B>set_mode(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setMode(int)"><CODE>DbLockRequest.setMode(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_mp_mmapsize(long)"><B>set_mp_mmapsize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><CODE>DbEnv.setMemoryPoolMapSize(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#set_obj(com.sleepycat.db.Dbt)"><B>set_obj(Dbt)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><CODE>DbLockRequest.setObj(Dbt)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_object(java.lang.Object)"><B>set_object(Object)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced
+ by <A HREF="com/sleepycat/db/Dbt.html#setObject(java.lang.Object)"><CODE>Dbt.setObject(Object)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_offset(int)"><B>set_offset(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setOffset(int)"><CODE>Dbt.setOffset(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#set_op(int)"><B>set_op(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbLockRequest.html#setOp(int)"><CODE>DbLockRequest.setOp(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_pagesize(long)"><B>set_pagesize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setPageSize(long)"><CODE>setPageSize(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#set_priority(int)"><B>set_priority(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><CODE>DbMpoolFile.setPriority(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_q_extentsize(int)"><B>set_q_extentsize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setQueueExtentSize(int)"><CODE>setQueueExtentSize(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_re_delim(int)"><B>set_re_delim(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordDelimiter(int)"><CODE>setRecordDelimiter(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_re_len(int)"><B>set_re_len(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordLength(int)"><CODE>setRecordLength(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_re_pad(int)"><B>set_re_pad(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordPad(int)"><CODE>setRecordPad(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Db.html#set_re_source(java.lang.String)"><B>set_re_source(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><CODE>setRecordSource(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_recno_key_data(int)"><B>set_recno_key_data(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setRecordNumber(int)"><CODE>Dbt.setRecordNumber(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_rep_limit(int, int)"><B>set_rep_limit(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>Replaced in Berkeley DB 4.2 by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_rep_limit(long)"><B>set_rep_limit(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><CODE>DbEnv.setReplicationLimit(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_rep_transport(int, com.sleepycat.db.DbRepTransport)"><B>set_rep_transport(int, DbRepTransport)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><CODE>DbEnv.setReplicationTransport(int,DbRepTransport)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_rpc_server(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><B>set_rpc_server(DbClient, String, long, long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><CODE>DbEnv.setRpcServer(DbClient,String,long,long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_shm_key(long)"><B>set_shm_key(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setSegmentId(long)"><CODE>DbEnv.setSegmentId(long)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_size(int)"><B>set_size(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setSize(int)"><CODE>Dbt.setSize(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_tas_spins(int)"><B>set_tas_spins(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><CODE>DbEnv.setTestAndSetSpins(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbTxn.html#set_timeout(long, int)"><B>set_timeout(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><CODE>DbTxn.setTimeout(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_timeout(long, int)"><B>set_timeout(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><CODE>DbEnv.setTimeout(long,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_tmp_dir(java.lang.String)"><B>set_tmp_dir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><CODE>DbEnv.setTmpDir(String)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_tx_max(int)"><B>set_tx_max(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTxnMax(int)"><CODE>DbEnv.setTxnMax(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_tx_timestamp(java.util.Date)"><B>set_tx_timestamp(Date)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><CODE>DbEnv.setTxnTimestamp(java.util.Date)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/Dbt.html#set_ulen(int)"><B>set_ulen(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/Dbt.html#setUserBufferLength(int)"><CODE>Dbt.setUserBufferLength(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#set_verbose(int, boolean)"><B>set_verbose(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><CODE>DbEnv.setVerbose(int,boolean)</CODE></A></I>
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#set(int, java.lang.Object)"><B>set(int, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Replaces the element at the specified position in this list with the
+ specified element (optional operation).
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#set(java.lang.Object)"><B>set(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Replaces the last element returned by next or previous with the
+ specified element (optional operation).
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setAppDispatch(com.sleepycat.db.DbAppDispatch)"><B>setAppDispatch(DbAppDispatch)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setAppendRecno(com.sleepycat.db.DbAppendRecno)"><B>setAppendRecno(DbAppendRecno)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setBtreeCompare(com.sleepycat.db.DbBtreeCompare)"><B>setBtreeCompare(DbBtreeCompare)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setBtreeMinKey(int)"><B>setBtreeMinKey(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the minimum number of key/data pairs intended to be stored on any single Btree leaf page.
+<DT><A HREF="com/sleepycat/db/Db.html#setBtreePrefix(com.sleepycat.db.DbBtreePrefix)"><B>setBtreePrefix(DbBtreePrefix)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setByteOrder(int)"><B>setByteOrder(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the byte order for integers in the stored database metadata.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#setBytes(byte[])"><B>setBytes(byte[])</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Sets the data for this thang.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#setBytes(byte[], int, int)"><B>setBytes(byte[], int, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Sets the data for this thang.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setCacheSize(long, int)"><B>setCacheSize(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the size of the shared memory buffer pool -- that is, the cache.
+<DT><A HREF="com/sleepycat/db/Db.html#setCacheSize(long, int)"><B>setCacheSize(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the size of the shared memory buffer pool -- that is, the cache.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setData(byte[])"><B>setData(byte[])</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the data array.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#setData(byte[], int, int)"><B>setData(byte[], int, int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#setData(byte[], int, int)"><B>setData(byte[], int, int)</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#setData(byte[], int, int)"><B>setData(byte[], int, int)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Sets the data in this buffer to the given value.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setDataDir(java.lang.String)"><B>setDataDir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the path of a directory to be used as the location of the access method database files.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#setDataFormation(java.lang.Object)"><B>setDataFormation(Object)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#setDataFormation(java.lang.Object)"><B>setDataFormation(Object)</B></A> -
+Method in class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/DataBuffer.html#setDataFormation(java.lang.Object)"><B>setDataFormation(Object)</B></A> -
+Method in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>
+<DD>Sets the formation associated with the data in this buffer.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#setDirtyRead(boolean)"><B>setDirtyRead(boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Changes whether transactions will read data that is modified by another
+ transaction but not committed.
+<DT><A HREF="com/sleepycat/db/Db.html#setDuplicateCompare(com.sleepycat.db.DbDupCompare)"><B>setDuplicateCompare(DbDupCompare)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setEncrypted(java.lang.String, int)"><B>setEncrypted(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the password used by the Berkeley DB library to perform encryption and decryption.
+<DT><A HREF="com/sleepycat/db/Db.html#setEncrypted(java.lang.String, int)"><B>setEncrypted(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the password used by the Berkeley DB library to perform encryption and decryption.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><B>setErrorHandler(DbErrorHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown.
+<DT><A HREF="com/sleepycat/db/Db.html#setErrorHandler(com.sleepycat.db.DbErrorHandler)"><B>setErrorHandler(DbErrorHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the prefix string that appears before error messages issued by Berkeley DB.
+<DT><A HREF="com/sleepycat/db/Db.html#setErrorPrefix(java.lang.String)"><B>setErrorPrefix(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the prefix string that appears before error messages issued by Berkeley DB.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown.
+<DT><A HREF="com/sleepycat/db/Db.html#setErrorStream(java.io.OutputStream)"><B>setErrorStream(OutputStream)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>When an error occurs in the Berkeley DB library, an exception is thrown.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setFeedbackHandler(com.sleepycat.db.DbEnvFeedbackHandler)"><B>setFeedbackHandler(DbEnvFeedbackHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setFeedbackHandler(com.sleepycat.db.DbFeedbackHandler)"><B>setFeedbackHandler(DbFeedbackHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Dbt.html#setFlags(int)"><B>setFlags(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the object flag value.
+<DT><A HREF="com/sleepycat/db/Db.html#setFlags(int)"><B>setFlags(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Configure a database.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#setFlags(int, boolean)"><B>setFlags(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>Configure a file in the cache.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setFlags(int, boolean)"><B>setFlags(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Configure a database environment.
+<DT><A HREF="com/sleepycat/db/Db.html#setHash(com.sleepycat.db.DbHash)"><B>setHash(DbHash)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setHashFillFactor(int)"><B>setHashFillFactor(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the desired density within the hash table.
+<DT><A HREF="com/sleepycat/db/Db.html#setHashNumElements(int)"><B>setHashNumElements(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set an estimate of the final size of the hash table.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#setLock(com.sleepycat.db.DbLock)"><B>setLock(DbLock)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.setLock method sets the lock reference.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLockConflicts(byte[][])"><B>setLockConflicts(byte[][])</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the locking conflicts matrix.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLockDetect(int)"><B>setLockDetect(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set if the deadlock detector is to be run whenever a lock conflict occurs, and specify what lock request(s) should be rejected.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html#setLockForWrite(boolean)"><B>setLockForWrite(boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>
+<DD>Changes whether write-locks will be obtained when reading with this
+ cursor.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLockers(int)"><B>setLockMaxLockers(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the maximum number of locking entities supported by the Berkeley DB environment.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLockMaxLocks(int)"><B>setLockMaxLocks(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the maximum number of locks supported by the Berkeley DB environment.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLockMaxObjects(int)"><B>setLockMaxObjects(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the maximum number of locked objects supported by the Berkeley DB environment.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLogBufferSize(int)"><B>setLogBufferSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the size of the in-memory log buffer, in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLogDir(java.lang.String)"><B>setLogDir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The path of a directory to be used as the location of logging files.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLogMax(int)"><B>setLogMax(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the maximum size of a single file in the log, in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setLogRegionMax(int)"><B>setLogRegionMax(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Set the size of the underlying logging area of the Berkeley DB environment, in bytes.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#setMaxRetries(int)"><B>setMaxRetries(int)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Changes the maximum number of retries that will be performed when
+ deadlocks are detected.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#setMaxsize(long)"><B>setMaxsize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>Set the maximum size for the file to be <b>bytes</b> bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setMemoryPoolMapSize(long)"><B>setMemoryPoolMapSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Files that are opened read-only in the pool (and that satisfy a few other criteria) are, by default, mapped into the process address space instead of being copied into the local cache.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#setMode(int)"><B>setMode(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.setMode method sets the lock mode.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#setNoWait(boolean)"><B>setNoWait(boolean)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Changes whether transactions will throw DbLockNotGrantedException
+ instead of blocking when trying to access data that is locked by another
+ transaction.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#setObj(com.sleepycat.db.Dbt)"><B>setObj(Dbt)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.setObj method sets the lock object.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setObject(java.lang.Object)"><B>setObject(Object)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Initialize the data array from a serialized object, encoding the object using the Java serialization API.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setOffset(int)"><B>setOffset(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the byte offset into the data array.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#setOp(int)"><B>setOp(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.setOp method sets the operation.
+<DT><A HREF="com/sleepycat/db/Db.html#setPageSize(long)"><B>setPageSize(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the size of the pages used to hold items in the database, in bytes.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)"><B>setPanicHandler(DbPanicHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/Db.html#setPanicHandler(com.sleepycat.db.DbPanicHandler)"><B>setPanicHandler(DbPanicHandler)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Errors can occur in the Berkeley DB library where the only solution is to shut down the application and run recovery (for example, if Berkeley DB is unable to allocate heap memory).
+<DT><A HREF="com/sleepycat/db/Dbt.html#setPartialLength(int)"><B>setPartialLength(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the byte length of the partial record being read or written by the application, in bytes.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setPartialOffset(int)"><B>setPartialOffset(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the offset of the partial record being read or written by the application, in bytes.
+<DT><A HREF="com/sleepycat/db/DbMpoolFile.html#setPriority(int)"><B>setPriority(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html">DbMpoolFile</A>
+<DD>Set the cache priority for pages from the specified file.
+<DT><A HREF="com/sleepycat/db/Db.html#setQueueExtentSize(int)"><B>setQueueExtentSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the size of the extents used to hold pages in a Queue database, specified as a number of pages.
+<DT><A HREF="com/sleepycat/db/Db.html#setRecordDelimiter(int)"><B>setRecordDelimiter(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the delimiting byte used to mark the end of a record in the backing source file for the Recno access method.
+<DT><A HREF="com/sleepycat/db/Db.html#setRecordLength(int)"><B>setRecordLength(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>For the Queue access method, specify that the records are of length <b>re_len</b>.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setRecordNumber(int)"><B>setRecordNumber(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Initialize the data array from a logical record number.
+<DT><A HREF="com/sleepycat/db/Db.html#setRecordPad(int)"><B>setRecordPad(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the padding character for short, fixed-length records for the Queue and Recno access methods.
+<DT><A HREF="com/sleepycat/db/Db.html#setRecordSource(java.lang.String)"><B>setRecordSource(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>Set the underlying source file for the Recno access method.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setReplicationLimit(long)"><B>setReplicationLimit(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.setReplicationLimit method imposes a byte-count limit on the amount of data that will be transmitted from a site in a single call to <A HREF="com/sleepycat/db/DbEnv.html#replicationProcessMessage(com.sleepycat.db.Dbt, com.sleepycat.db.Dbt, com.sleepycat.db.DbEnv.RepProcessMessage, com.sleepycat.db.DbLsn)"><CODE>DbEnv.replicationProcessMessage</CODE></A> method.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setReplicationTransport(int, com.sleepycat.db.DbRepTransport)"><B>setReplicationTransport(int, DbRepTransport)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setRpcServer(com.sleepycat.db.DbClient, java.lang.String, long, long, int)"><B>setRpcServer(DbClient, String, long, long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Establishes a connection for this <b>dbenv</b> to a RPC server.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setSegmentId(long)"><B>setSegmentId(long)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Specify a base segment ID for Berkeley DB environment shared memory regions created in system memory on VxWorks or systems supporting X/Open-style shared memory interfaces; for example, UNIX systems supporting <b>shmget</b>(2) and related System V IPC interfaces.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setSize(int)"><B>setSize(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the byte size of the data array.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setTestAndSetSpins(int)"><B>setTestAndSetSpins(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Specify that test-and-set mutexes should spin <b>tas_spins</b> times without blocking.
+<DT><A HREF="com/sleepycat/db/DbLockRequest.html#setTimeout(int)"><B>setTimeout(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html">DbLockRequest</A>
+<DD>The DbLockRequest.setTimeout method sets the lock timeout value.
+<DT><A HREF="com/sleepycat/db/DbTxn.html#setTimeout(long, int)"><B>setTimeout(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html">DbTxn</A>
+<DD>The DbTxn.setTimeout method sets timeout values for locks or transactions for the specified transaction.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setTimeout(long, int)"><B>setTimeout(long, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.setTimeout method sets timeout values for locks or transactions in the database environment.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setTmpDir(java.lang.String)"><B>setTmpDir(String)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Specify the path of a directory to be used as the location of temporary files.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setTxnMax(int)"><B>setTxnMax(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Configure the Berkeley DB database environment to support at least <b>max</b> active transactions.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setTxnTimestamp(java.util.Date)"><B>setTxnTimestamp(Date)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>Recover to the time specified by <b>timestamp</b> rather than to the most current possible date.
+<DT><A HREF="com/sleepycat/db/Dbt.html#setUserBufferLength(int)"><B>setUserBufferLength(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html">Dbt</A>
+<DD>Set the byte size of the user-specified buffer.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#setValue(java.lang.Object)"><B>setValue(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Changes the value of this entry.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#setVerbose(int, boolean)"><B>setVerbose(int, boolean)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.setVerbose method turns specific additional informational and debugging messages in the Berkeley DB message output on and off.
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html"><B>SimpleBuffer</B></A> - class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>.<DD>A simple data buffer implementation that allows using bindings for arbitrary
+ data outside the context of a database.<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer()"><B>SimpleBuffer()</B></A> -
+Constructor for class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>Creates a simple buffer with null data, an offset of zero and a length
+ of zero.
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer(byte[])"><B>SimpleBuffer(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>Creates a simple buffer with the given data with an offset of zero and a
+ length equal to the length of the data array.
+<DT><A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html#SimpleBuffer(byte[], int, int)"><B>SimpleBuffer(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</A>
+<DD>Creates a simple buffer with the given data, offset and length.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>
+<DD>Always throws UnsupportedOperationException.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#size()"><B>size()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastInputStream.html#skip(long)"><B>skip(long)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html">FastInputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_alloc"><B>st_alloc</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Number of page allocations.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_alloc_buckets"><B>st_alloc_buckets</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Number of hash buckets checked during allocation.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_alloc_max_buckets"><B>st_alloc_max_buckets</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Maximum number of hash buckets checked during an allocation.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_alloc_max_pages"><B>st_alloc_max_pages</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Maximum number of pages checked during an allocation.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_alloc_pages"><B>st_alloc_pages</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Number of pages checked during allocation.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_bytes"><B>st_bytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Bytes of cache (total cache size is st_gbytes + st_bytes).
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_cache_hit"><B>st_cache_hit</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Requested pages found in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_cache_hit"><B>st_cache_hit</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Requested pages found in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_cache_miss"><B>st_cache_miss</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Requested pages not found in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_cache_miss"><B>st_cache_miss</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Requested pages not found in the cache.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_cur_file"><B>st_cur_file</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The current log file number.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_cur_maxid"><B>st_cur_maxid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The current maximum unused locker ID.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_cur_offset"><B>st_cur_offset</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The byte offset in the current log file.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_disk_file"><B>st_disk_file</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The log file number of the last record known to be on disk.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_disk_offset"><B>st_disk_offset</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The byte offset of the last record known to be on disk.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_dupmasters"><B>st_dupmasters</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of duplicate master conditions detected.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_cur_winner"><B>st_election_cur_winner</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The election winner.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_gen"><B>st_election_gen</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The election generation number.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_lsn"><B>st_election_lsn</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The maximum LSN of election winner.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_nsites"><B>st_election_nsites</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number sites expected to participate in elections.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_priority"><B>st_election_priority</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The election priority.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_status"><B>st_election_status</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current election phase (0 if no election is in progress).
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_tiebreaker"><B>st_election_tiebreaker</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The election tiebreaker value.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_election_votes"><B>st_election_votes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The votes received this election round.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_elections"><B>st_elections</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of elections held.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_elections_won"><B>st_elections_won</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of elections won.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_env_id"><B>st_env_id</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current environment ID.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_env_priority"><B>st_env_priority</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current environment priority.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_gbytes"><B>st_gbytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Gigabytes of cache (total cache size is st_gbytes + st_bytes).
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_gen"><B>st_gen</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current generation number.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_buckets"><B>st_hash_buckets</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Number of hash buckets in buffer hash table.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_examined"><B>st_hash_examined</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Total number of hash elements traversed during hash table lookups.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_longest"><B>st_hash_longest</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The longest chain ever encountered in buffer hash table lookups.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_max_wait"><B>st_hash_max_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The maximum number of times any hash bucket lock was waited for by a thread of control.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_nowait"><B>st_hash_nowait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The number of times that a thread of control was able to obtain a hash bucket lock without waiting.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_searches"><B>st_hash_searches</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Total number of buffer hash table lookups.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_hash_wait"><B>st_hash_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The number of times that a thread of control was forced to wait before obtaining a hash bucket lock.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_id"><B>st_id</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The last allocated locker ID.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_in_recovery"><B>st_in_recovery</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The site is currently in client recovery.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_last_ckp"><B>st_last_ckp</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The LSN of the last checkpoint.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_last_txnid"><B>st_last_txnid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The last transaction ID allocated.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_lg_bsize"><B>st_lg_bsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The in-memory log record cache size.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_lg_size"><B>st_lg_size</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The current log file size.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_locktimeout"><B>st_locktimeout</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>Lock timeout value.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_duplicated"><B>st_log_duplicated</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of duplicate log records received.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_queued"><B>st_log_queued</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of log records currently queued.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_queued_max"><B>st_log_queued_max</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The maximum number of log records ever queued at once.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_queued_total"><B>st_log_queued_total</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The total number of log records queued.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_records"><B>st_log_records</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of log records received and appended to the log.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_log_requested"><B>st_log_requested</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of log records missed and requested.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_magic"><B>st_magic</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The magic number that identifies a file as a log file.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_map"><B>st_map</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Requested pages mapped into the process' address space (there is no available information about whether or not this request caused disk I/O, although examining the application page fault rate may be helpful).
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_map"><B>st_map</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Requested pages mapped into the process' address space.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_master"><B>st_master</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current master environment ID.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_master_changes"><B>st_master_changes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of times the master has changed.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_maxcommitperflush"><B>st_maxcommitperflush</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The maximum number of commits contained in a single log flush.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxlockers"><B>st_maxlockers</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of lockers possible.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxlocks"><B>st_maxlocks</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of locks possible.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_maxnactive"><B>st_maxnactive</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The maximum number of active transactions at any one time.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxnlockers"><B>st_maxnlockers</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of lockers at any one time.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxnlocks"><B>st_maxnlocks</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of locks at any one time.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxnobjects"><B>st_maxnobjects</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of lock objects at any one time.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_maxobjects"><B>st_maxobjects</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The maximum number of lock objects possible.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_maxtxns"><B>st_maxtxns</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The maximum number of active transactions configured.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_mincommitperflush"><B>st_mincommitperflush</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The minimum number of commits contained in a single log flush that contained a commit.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_mode"><B>st_mode</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The mode of any created log files.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_msgs_badgen"><B>st_msgs_badgen</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of messages received with a bad generation number.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_msgs_processed"><B>st_msgs_processed</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of messages received and processed.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_msgs_recover"><B>st_msgs_recover</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of messages ignored due to pending recovery.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_msgs_send_failures"><B>st_msgs_send_failures</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of failed message sends.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_msgs_sent"><B>st_msgs_sent</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of messages sent.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_naborts"><B>st_naborts</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of transactions that have aborted.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_nactive"><B>st_nactive</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of transactions that are currently active.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_nbegins"><B>st_nbegins</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of transactions that have begun.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_ncache"><B>st_ncache</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Number of caches.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_ncommits"><B>st_ncommits</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of transactions that have committed.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nconflicts"><B>st_nconflicts</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The total number of locks not immediately available due to conflicts.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_ndeadlocks"><B>st_ndeadlocks</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of deadlocks.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_newsites"><B>st_newsites</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of new site messages received.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_next_lsn"><B>st_next_lsn</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>In replication environments configured as masters, the next LSN expected.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nlockers"><B>st_nlockers</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of current lockers.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nlocks"><B>st_nlocks</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of current locks.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nlocktimeouts"><B>st_nlocktimeouts</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of lock requests that have timed out.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nmodes"><B>st_nmodes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of lock modes.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nnowaits"><B>st_nnowaits</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The total number of lock requests failing because <A HREF="com/sleepycat/db/Db.html#DB_LOCK_NOWAIT"><CODE>Db.DB_LOCK_NOWAIT</CODE></A> was set.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nobjects"><B>st_nobjects</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of current lock objects.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nreleases"><B>st_nreleases</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The total number of locks released.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_nrequests"><B>st_nrequests</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The total number of locks requested.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_nrestores"><B>st_nrestores</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of transactions that have been restored.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_nsites"><B>st_nsites</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of sites believed to be in the replication group.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_nthrottles"><B>st_nthrottles</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>Transmission limited.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_ntxntimeouts"><B>st_ntxntimeouts</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of transactions that have timed out.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_outdated"><B>st_outdated</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of outdated conditions detected.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_clean"><B>st_page_clean</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Clean pages currently in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_create"><B>st_page_create</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Pages created in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_page_create"><B>st_page_create</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Pages created in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_dirty"><B>st_page_dirty</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Dirty pages currently in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_in"><B>st_page_in</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Pages read into the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_page_in"><B>st_page_in</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Pages read into the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_out"><B>st_page_out</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Pages written from the cache to the backing file.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_page_out"><B>st_page_out</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Pages written from the cache to the backing file.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_page_trickle"><B>st_page_trickle</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Dirty pages written using the <A HREF="com/sleepycat/db/DbEnv.html#memoryPoolTrickle(int)"><CODE>DbEnv.memoryPoolTrickle</CODE></A> method.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_pages"><B>st_pages</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Pages in the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#st_pagesize"><B>st_pagesize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Page size in bytes.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_region_nowait"><B>st_region_nowait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_region_nowait"><B>st_region_nowait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The number of times that a thread of control was able to obtain a region lock without waiting.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_region_nowait"><B>st_region_nowait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_region_nowait"><B>st_region_nowait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of times that a thread of control was able to obtain the region lock without waiting.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_region_wait"><B>st_region_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_region_wait"><B>st_region_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>The number of times that a thread of control was forced to wait before obtaining a region lock.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_region_wait"><B>st_region_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_region_wait"><B>st_region_wait</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The number of times that a thread of control was forced to wait before obtaining the region lock.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_regsize"><B>st_regsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The size of the region.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_regsize"><B>st_regsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Individual cache size.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_regsize"><B>st_regsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The size of the region.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_regsize"><B>st_regsize</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>The size of the lock region.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_ro_evict"><B>st_ro_evict</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Clean pages forced from the cache.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#st_rw_evict"><B>st_rw_evict</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Dirty pages forced from the cache.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_scount"><B>st_scount</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of times the log has been flushed to disk.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_status"><B>st_status</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The current replication mode.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_time_ckp"><B>st_time_ckp</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>The time the last completed checkpoint finished (as the number of seconds since the Epoch, returned by the IEEE/ANSI Std 1003.1 (POSIX) <b>time</b> function).
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#st_txnarray"><B>st_txnarray</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_txns_applied"><B>st_txns_applied</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The number of transactions applied.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#st_txntimeout"><B>st_txntimeout</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>Transaction timeout value.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_version"><B>st_version</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The version of the log file type.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_w_bytes"><B>st_w_bytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of bytes over and above <b>st_w_mbytes</b> written to this log.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_w_mbytes"><B>st_w_mbytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of megabytes written to this log.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#st_waiting_lsn"><B>st_waiting_lsn</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>The LSN of the first log record we have after missing log records being waited for, or 0 if no log records are currently missing.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_wc_bytes"><B>st_wc_bytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of bytes over and above <b>st_wc_mbytes</b> written to this log since the last checkpoint.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_wc_mbytes"><B>st_wc_mbytes</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of megabytes written to this log since the last checkpoint.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_wcount"><B>st_wcount</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of times the log has been written to disk.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#st_wcount_fill"><B>st_wcount_fill</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>The number of times the log has been written to disk because the in-memory log record cache filled up.
+<DT><A HREF="com/sleepycat/db/Db.html#stat(int)"><B>stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.stat method creates a statistical structure and fills it with statistics for the database.
+<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html"><B>StoredClassCatalog</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>.<DD>Java serialization catalog used for compact storage of database objects.<DT><A HREF="com/sleepycat/bdb/StoredClassCatalog.html#StoredClassCatalog(com.sleepycat.db.DbEnv, java.lang.String, java.lang.String, int)"><B>StoredClassCatalog(DbEnv, String, String, int)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</A>
+<DD>Open a catalog database.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html"><B>StoredCollection</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>.<DD>A abstract base class for all stored collections.<DT><A HREF="com/sleepycat/bdb/collection/StoredCollections.html"><B>StoredCollections</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</A>.<DD>This class consists exclusively of static methods that operate on or return
+ stored collections.<DT><A HREF="com/sleepycat/bdb/collection/StoredContainer.html"><B>StoredContainer</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html">StoredContainer</A>.<DD>A abstract base class for all stored collections and maps.<DT><A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html"><B>StoredEntrySet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>.<DD>The Set returned by Map.entrySet().<DT><A HREF="com/sleepycat/bdb/collection/StoredIterator.html"><B>StoredIterator</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</A>.<DD>The Iterator returned by all stored collections.<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html"><B>StoredKeySet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>.<DD>The Set returned by Map.keySet() and which can also be constructed directly
+ if a Map is not needed.<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredKeySet(DataIndex, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>
+<DD>Creates a key set view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredKeySet.html#StoredKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredKeySet(DataStore, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html">StoredKeySet</A>
+<DD>Creates a key set view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html"><B>StoredList</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>.<DD>A List view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredList(DataIndex, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Creates a list view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredList(DataIndex, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Creates a list entity view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredList(DataStore, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Creates a list view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#StoredList(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredList(DataStore, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Creates a list entity view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html"><B>StoredMap</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>.<DD>A Map view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredMap(DataIndex, DataBinding, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Creates a map view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredMap(DataIndex, DataBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Creates a map entity view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredMap(DataStore, DataBinding, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Creates a map view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#StoredMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredMap(DataStore, DataBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Creates a map entity view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>StoredSortedEntrySet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>.<DD>The SortedSet returned by Map.entrySet().<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>StoredSortedKeySet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>.<DD>The SortedSet returned by Map.keySet() and which can also be constructed
+ directly if a Map is not needed.<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredSortedKeySet(DataIndex, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Creates a sorted key set view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#StoredSortedKeySet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredSortedKeySet(DataStore, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Creates a sorted key set view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html"><B>StoredSortedMap</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>.<DD>A SortedMap view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A> or <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredSortedMap(DataIndex, DataBinding, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Creates a sorted map view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredSortedMap(DataIndex, DataBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Creates a sorted map entity view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredSortedMap(DataStore, DataBinding, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Creates a sorted map view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#StoredSortedMap(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredSortedMap(DataStore, DataBinding, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Creates a sorted map entity view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>StoredSortedValueSet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>.<DD>The SortedSet returned by Map.values() and which can also be constructed
+ directly if a Map is not needed.<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredSortedValueSet(DataIndex, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Creates a sorted value set view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredSortedValueSet(DataIndex, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Creates a sorted value set entity view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#StoredSortedValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredSortedValueSet(DataStore, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Creates a sorted value set entity view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html"><B>StoredValueSet</B></A> - class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>.<DD>The Set returned by Map.values() and Map.duplicates(), and which can also be
+ constructed directly if a Map is not needed.<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredValueSet(DataIndex, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Creates a value set view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataIndex, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredValueSet(DataIndex, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Creates a value set entity view of a <A HREF="com/sleepycat/bdb/DataIndex.html"><CODE>DataIndex</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.DataBinding, boolean)"><B>StoredValueSet(DataStore, DataBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Creates a value set view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredValueSet.html#StoredValueSet(com.sleepycat.bdb.DataStore, com.sleepycat.bdb.bind.EntityBinding, boolean)"><B>StoredValueSet(DataStore, EntityBinding, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</A>
+<DD>Creates a value set entity view of a <A HREF="com/sleepycat/bdb/DataStore.html"><CODE>DataStore</CODE></A>.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#strerror(int)"><B>strerror(int)</B></A> -
+Static method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.strerror method returns an error message string corresponding to the error number <b>error</b> parameter.
+<DT><A HREF="com/sleepycat/bdb/bind/DataType.html#STRING"><B>STRING</B></A> -
+Static variable in interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html">DataType</A>
+<DD><code>String</code> data type.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#stringToBytes(java.lang.String)"><B>stringToBytes(String)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>Converts strings to byte arrays.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredList.html#subList(int, int)"><B>subList(int, int)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html">StoredList</A>
+<DD>Returns a view of the portion of this list between the specified
+ fromIndex, inclusive, and toIndex, exclusive.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#subMap(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subMap(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#subMap(java.lang.Object, java.lang.Object)"><B>subMap(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted map whose elements range
+ from fromKey, inclusive, to toKey, exclusive.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue and strictly less than toValue,
+ optionally including fromValue and toValue.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey and strictly less than toKey,
+ optionally including fromKey and toKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#subSet(java.lang.Object, boolean, java.lang.Object, boolean)"><B>subSet(Object, boolean, Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry and strictly less than toMapEntry,
+ optionally including fromMapEntry and toMapEntry.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromValue, inclusive, to toValue, exclusive.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromKey, inclusive, to toKey, exclusive.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#subSet(java.lang.Object, java.lang.Object)"><B>subSet(Object, Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements range
+ from fromMapEntry, inclusive, to toMapEntry, exclusive.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#subView(java.lang.Object, boolean, java.lang.Object, boolean, com.sleepycat.bdb.bind.DataBinding)"><B>subView(Object, boolean, Object, boolean, DataBinding)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Return a new value-set view for key range, optionally changing
+ the key binding.
+<DT><A HREF="com/sleepycat/db/Db.html#sync(int)"><B>sync(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.sync method flushes any cached information to disk.
+</DL>
+<HR>
+<A NAME="_T_"><!-- --></A><H2>
+<B>T</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#tailMap(java.lang.Object)"><B>tailMap(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ greater than or equal to fromKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html#tailMap(java.lang.Object, boolean)"><B>tailMap(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</A>
+<DD>Returns a view of the portion of this sorted map whose elements are
+ strictly greater than fromKey, optionally including fromKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromValue.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#tailSet(java.lang.Object)"><B>tailSet(Object)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ greater than or equal to fromMapEntry.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromValue, optionally including fromValue.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromKey, optionally including fromKey.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html#tailSet(java.lang.Object, boolean)"><B>tailSet(Object, boolean)</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</A>
+<DD>Returns a view of the portion of this sorted set whose elements are
+ strictly greater than fromMapEntry, optionally including fromMapEntry.
+<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html"><B>TimeUnits</B></A> - class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>.<DD>Common time unit definitions.<DT><A HREF="com/sleepycat/bdb/util/TimeUnits.html#TimeUnits()"><B>TimeUnits()</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html">TimeUnits</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#toArray()"><B>toArray()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns an array of all the elements in this collection.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#toArray(java.lang.Object[])"><B>toArray(Object[])</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns an array of all the elements in this collection whose runtime
+ type is that of the specified array.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#toByteArray()"><B>toByteArray()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#toByteArray(byte[], int)"><B>toByteArray(byte[], int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>Copy the buffered data to the given array.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#toList()"><B>toList()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Returns a copy of this collection as an ArrayList.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.
+<DT><A HREF="com/sleepycat/bdb/DataStore.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html">DataStore</A>
+<DD>Returns a printable string identifying the filename and datbase name
+ of the store.
+<DT><A HREF="com/sleepycat/bdb/DataIndex.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html">DataIndex</A>
+<DD>Returns a printable string identifying the file and database name
+ of the index.
+<DT><A HREF="com/sleepycat/bdb/DataDb.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html">DataDb</A>
+<DD>Returns a debugging string containing the database name.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Converts the map to a string representation for debugging.
+<DT><A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html">StoredEntrySet</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/collection/StoredCollection.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html">StoredCollection</A>
+<DD>Converts the collection to a string representation for debugging.
+<DT><A HREF="com/sleepycat/bdb/collection/MapEntry.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html">MapEntry</A>
+<DD>Converts the entry to a string representation for debugging.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbTxnStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html">DbTxnStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbRepStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html">DbRepStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbQueueStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html">DbQueueStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbMpoolStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html">DbMpoolStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbMpoolFStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html">DbMpoolFStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbMemoryException.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMemoryException.html">DbMemoryException</A>
+<DD>Override of DbException.toString(): the extra verbage that
+ comes from DbEnv.strerror(ENOMEM) is not helpful.
+<DT><A HREF="com/sleepycat/db/DbLogStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html">DbLogStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbLockStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html">DbLockStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbHashStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html">DbHashStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/db/DbException.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html">DbException</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/db/DbBtreeStat.html#toString()"><B>toString()</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html">DbBtreeStat</A>
+<DD>Provide a string representation of all the fields contained
+ within this class.
+<DT><A HREF="com/sleepycat/bdb/DataThang.html#toString(com.sleepycat.db.Dbt)"><B>toString(Dbt)</B></A> -
+Static method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html">DataThang</A>
+<DD>Converts the byte array of this thang to space-separated integers,
+ and suffixed by the record number if applicable.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#toString(java.lang.String)"><B>toString(String)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html"><B>TransactionRunner</B></A> - class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>.<DD>Starts a transaction, calls <A HREF="com/sleepycat/bdb/TransactionWorker.html#doWork()"><CODE>TransactionWorker.doWork()</CODE></A>, and handles
+ transaction retry and exceptions.<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv)"><B>TransactionRunner(DbEnv)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Creates a transaction runner for a given Berkeley DB environment.
+<DT><A HREF="com/sleepycat/bdb/TransactionRunner.html#TransactionRunner(com.sleepycat.db.DbEnv, int)"><B>TransactionRunner(DbEnv, int)</B></A> -
+Constructor for class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</A>
+<DD>Creates a transaction runner for a given Berkeley DB environment and
+ with a given number of maximum retries.
+<DT><A HREF="com/sleepycat/bdb/TransactionWorker.html"><B>TransactionWorker</B></A> - interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</A>.<DD>The interface implemented to perform the work within a transaction.<DT><A HREF="com/sleepycat/db/Db.html#truncate(com.sleepycat.db.DbTxn, int)"><B>truncate(DbTxn, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.truncate method empties the database, discarding all records it contains.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html"><B>TupleBinding</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>.<DD>An abstract tuple binding for tuple keys or values.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html#TupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>TupleBinding(TupleFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</A>
+<DD>Creates a tuple binding.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>TupleFormat</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>.<DD>The format for tuple data.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html#TupleFormat()"><B>TupleFormat()</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</A>
+<DD>Creates a tuple format.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>TupleInput</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>.<DD>Used by tuple bindings to read tuple data.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(byte[])"><B>TupleInput(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Creates a tuple input object for reading a byte array of tuple data.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(byte[], int, int)"><B>TupleInput(byte[], int, int)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Creates a tuple input object for reading a byte array of tuple data at
+ a given offset for a given length.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html#TupleInput(com.sleepycat.bdb.bind.tuple.TupleOutput)"><B>TupleInput(TupleOutput)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</A>
+<DD>Creates a tuple input object from the data contained in a tuple output
+ object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>TupleInputBinding</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A>.<DD>A concrete tuple binding for keys or values which are <A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><CODE>TupleInput</CODE></A>
+ objects.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html#TupleInputBinding(com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>TupleInputBinding(TupleFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html">TupleInputBinding</A>
+<DD>Creates a tuple input binding.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>TupleMarshalledBinding</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A>.<DD>A concrete key or value binding that uses the <A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A>
+ interface.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html#TupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)"><B>TupleMarshalledBinding(TupleFormat, Class)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</A>
+<DD>Creates a tuple marshalled binding object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>TupleOutput</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>.<DD>Used by tuple bindings to write tuple data.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#TupleOutput()"><B>TupleOutput()</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Creates a tuple output object for writing a byte array of tuple data.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#TupleOutput(byte[])"><B>TupleOutput(byte[])</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Creates a tuple output object for writing a byte array of tuple data,
+ using a given buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>TupleSerialBinding</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>.<DD>A abstract entity binding that uses a tuple key and a serial value.<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#TupleSerialBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><B>TupleSerialBinding(TupleFormat, SerialFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</A>
+<DD>Creates a tuple-serial entity binding.
+<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html"><B>TupleSerialDbFactory</B></A> - class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>.<DD>Creates stored collections having tuple keys and serialized entity values.<DT><A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html#TupleSerialDbFactory(com.sleepycat.bdb.bind.serial.ClassCatalog)"><B>TupleSerialDbFactory(ClassCatalog)</B></A> -
+Constructor for class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html">TupleSerialDbFactory</A>
+<DD>Creates a tuple-serial factory for given environment and class catalog.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>TupleSerialKeyExtractor</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>.<DD>A abstract key extractor that uses a tuple key and a serial value.<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html#TupleSerialKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>TupleSerialKeyExtractor(TupleFormat, SerialFormat, TupleFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</A>
+<DD>Creates a tuple-serial key extractor.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>TupleSerialMarshalledBinding</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>.<DD>A concrete entity binding that uses the <A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A>
+ interface.<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html#TupleSerialMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.serial.SerialFormat)"><B>TupleSerialMarshalledBinding(TupleFormat, SerialFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html">TupleSerialMarshalledBinding</A>
+<DD>Creates a tuple-serial marshalled binding object.
+<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><B>TupleSerialMarshalledKeyExtractor</B></A> - class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A>.<DD>A concrete key extractor that works in conjunction with a <A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><CODE>TupleSerialMarshalledBinding</CODE></A>.<DT><A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html#TupleSerialMarshalledKeyExtractor(com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)"><B>TupleSerialMarshalledKeyExtractor(TupleSerialMarshalledBinding, TupleFormat, String, boolean, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html">TupleSerialMarshalledKeyExtractor</A>
+<DD>Creates a tuple-serial marshalled key extractor.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>TupleTupleBinding</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>.<DD>An abstract entity binding that uses a tuple key and a tuple value.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html#TupleTupleBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>TupleTupleBinding(TupleFormat, TupleFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html">TupleTupleBinding</A>
+<DD>Creates a tuple-tuple entity binding.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>TupleTupleKeyExtractor</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>.<DD>An abstract key extractor that uses a tuple key and a tuple value.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html#TupleTupleKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat)"><B>TupleTupleKeyExtractor(TupleFormat, TupleFormat, TupleFormat)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html">TupleTupleKeyExtractor</A>
+<DD>Creates a tuple-tuple key extractor.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>TupleTupleMarshalledBinding</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>.<DD>A concrete entity binding that uses the <A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><CODE>MarshalledTupleData</CODE></A> and the
+ <A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><CODE>MarshalledTupleKeyEntity</CODE></A> interfaces.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html#TupleTupleMarshalledBinding(com.sleepycat.bdb.bind.tuple.TupleFormat, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.Class)"><B>TupleTupleMarshalledBinding(TupleFormat, TupleFormat, Class)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html">TupleTupleMarshalledBinding</A>
+<DD>Creates a tuple-tuple marshalled binding object.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><B>TupleTupleMarshalledKeyExtractor</B></A> - class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A>.<DD>A concrete key extractor that works in conjunction with a <A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><CODE>TupleTupleMarshalledBinding</CODE></A>.<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html#TupleTupleMarshalledKeyExtractor(com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding, com.sleepycat.bdb.bind.tuple.TupleFormat, java.lang.String, boolean, boolean)"><B>TupleTupleMarshalledKeyExtractor(TupleTupleMarshalledBinding, TupleFormat, String, boolean, boolean)</B></A> -
+Constructor for class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html">TupleTupleMarshalledKeyExtractor</A>
+<DD>Creates a tuple-tuple marshalled key extractor.
+<DT><A HREF="com/sleepycat/db/DbPreplist.html#txn"><B>txn</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbPreplist.html">DbPreplist</A>
+<DD>The transaction handle for the transaction.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txn_begin(com.sleepycat.db.DbTxn, int)"><B>txn_begin(DbTxn, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><CODE>DbEnv.txnBegin(DbTxn,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txn_checkpoint(int, int, int)"><B>txn_checkpoint(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><CODE>DbEnv.txnCheckpoint(int,int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txn_recover(int, int)"><B>txn_recover(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><CODE>DbEnv.txnRecover(int,int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txn_stat(int)"><B>txn_stat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD><B>Deprecated.</B>&nbsp;<I>As of Berkeley DB 4.2, replaced by <A HREF="com/sleepycat/db/DbEnv.html#txnStat(int)"><CODE>DbEnv.txnStat(int)</CODE></A></I>
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txnBegin(com.sleepycat.db.DbTxn, int)"><B>txnBegin(DbTxn, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.txnBegin method creates a new transaction in the environment and returns a <A HREF="com/sleepycat/db/DbTxn.html"><CODE>DbTxn</CODE></A> that uniquely identifies it.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txnCheckpoint(int, int, int)"><B>txnCheckpoint(int, int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.txnCheckpoint method flushes the underlying memory pool, writes a checkpoint record to the log, and then flushes the log.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#txnid"><B>txnid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>The transaction ID of the transaction.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txnRecover(int, int)"><B>txnRecover(int, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.txnRecover method returns a list of prepared but not yet resolved transactions.
+<DT><A HREF="com/sleepycat/db/DbEnv.html#txnStat(int)"><B>txnStat(int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A>
+<DD>The DbEnv.txnStat method returns the transaction subsystem statistics.
+</DL>
+<HR>
+<A NAME="_U_"><!-- --></A><H2>
+<B>U</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html#unmarshalData(com.sleepycat.bdb.bind.tuple.TupleInput)"><B>unmarshalData(TupleInput)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html">MarshalledTupleData</A>
+<DD>Construct the key or value object from the key or value tuple data.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html#unmarshalPrimaryKey(com.sleepycat.bdb.bind.tuple.TupleInput)"><B>unmarshalPrimaryKey(TupleInput)</B></A> -
+Method in interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html">MarshalledTupleKeyEntity</A>
+<DD>Completes construction of the entity by setting its primary key from the
+ stored primary key.
+<DT><A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrap(java.lang.Exception)"><B>unwrap(Exception)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html">ExceptionUnwrapper</A>
+<DD>Unwraps an Exception and returns the underlying Exception, or throws an
+ Error if the underlying Throwable is an Error.
+<DT><A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrapAny(java.lang.Throwable)"><B>unwrapAny(Throwable)</B></A> -
+Static method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html">ExceptionUnwrapper</A>
+<DD>Unwraps an Exception and returns the underlying Throwable.
+<DT><A HREF="com/sleepycat/db/Db.html#upgrade(java.lang.String, int)"><B>upgrade(String, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.upgrade method upgrades all of the databases included in the file <b>file</b>, if necessary.
+<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html"><B>UtfOps</B></A> - class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>.<DD>UTF operations with more flexibility than is provided by DataInput and
+ DataOutput.<DT><A HREF="com/sleepycat/bdb/util/UtfOps.html#UtfOps()"><B>UtfOps()</B></A> -
+Constructor for class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html">UtfOps</A>
+<DD>&nbsp;
+</DL>
+<HR>
+<A NAME="_V_"><!-- --></A><H2>
+<B>V</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/collection/StoredMap.html#values()"><B>values()</B></A> -
+Method in class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html">StoredMap</A>
+<DD>Returns a collection view of the values contained in this map.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#valueSetView()"><B>valueSetView()</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Return a new value-set view derived from this view by setting the
+ key binding to null.
+<DT><A HREF="com/sleepycat/bdb/DataView.html#valueSetView(java.lang.Object)"><B>valueSetView(Object)</B></A> -
+Method in class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html">DataView</A>
+<DD>Return a new value-set view for single key range.
+<DT><A HREF="com/sleepycat/db/Db.html#verify(java.lang.String, java.lang.String, java.io.OutputStream, int)"><B>verify(String, String, OutputStream, int)</B></A> -
+Method in class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html">Db</A>
+<DD>The Db.verify method verifies the integrity of all databases in the file specified by the <b>file</b> parameter, and optionally outputs the databases' key/data pairs to the file stream specified by the <b>outfile</b> parameter.
+</DL>
+<HR>
+<A NAME="_W_"><!-- --></A><H2>
+<B>W</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#write(byte[])"><B>write(byte[])</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#write(byte[], int, int)"><B>write(byte[], int, int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#write(int)"><B>write(int)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBoolean(boolean)"><B>writeBoolean(boolean)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes a boolean (one byte) unsigned value to the buffer, writing one
+ if the value is true and zero if it is false.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeByte(int)"><B>writeByte(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed byte (one byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(char[])"><B>writeBytes(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeBytes(java.lang.String)"><B>writeBytes(String)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified bytes to the buffer, converting each character to
+ an unsigned byte value.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChar(int)"><B>writeChar(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes a char (two byte) unsigned value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(char[])"><B>writeChars(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeChars(java.lang.String)"><B>writeChars(String)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified characters to the buffer, converting each character
+ to a two byte unsigned value.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeDouble(double)"><B>writeDouble(double)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed double (eight byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeFloat(float)"><B>writeFloat(float)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed float (four byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeInt(int)"><B>writeInt(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed int (four byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeLong(long)"><B>writeLong(long)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed long (eight byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeShort(int)"><B>writeShort(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an signed short (two byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(char[])"><B>writeString(char[])</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified characters to the buffer, converting each character
+ to UTF format.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString(java.lang.String)"><B>writeString(String)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes the specified characters to the buffer, converting each character
+ to UTF format, and adding a null terminator byte.
+<DT><A HREF="com/sleepycat/bdb/util/FastOutputStream.html#writeTo(java.io.OutputStream)"><B>writeTo(OutputStream)</B></A> -
+Method in class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html">FastOutputStream</A>
+<DD>&nbsp;
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedByte(int)"><B>writeUnsignedByte(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an unsigned byte (one byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedInt(long)"><B>writeUnsignedInt(long)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an unsigned int (four byte) value to the buffer.
+<DT><A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeUnsignedShort(int)"><B>writeUnsignedShort(int)</B></A> -
+Method in class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</A>
+<DD>Writes an unsigned short (two byte) value to the buffer.
+</DL>
+<HR>
+<A NAME="_X_"><!-- --></A><H2>
+<B>X</B></H2>
+<DL>
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#xa_status"><B>xa_status</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>If the transaction is an XA transaction, the status of the transaction, otherwise 0.
+<DT><A HREF="com/sleepycat/db/DbTxnStat.Active.html#xid"><B>xid</B></A> -
+Variable in class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html">DbTxnStat.Active</A>
+<DD>If the transaction is an XA transaction, the transaction's XA ID.
+</DL>
+<HR>
+<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_H_">H</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_K_">K</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_Q_">Q</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <A HREF="#_W_">W</A> <A HREF="#_X_">X</A>
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="index-all.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/index.html b/db/docs/java/index.html
new file mode 100644
index 000000000..1e7c4970a
--- /dev/null
+++ b/db/docs/java/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003-->
+<TITLE>
+Sleepycat Software, Inc. - Berkeley DB Java API
+</TITLE>
+</HEAD>
+<FRAMESET cols="20%,80%">
+<FRAMESET rows="30%,70%">
+<FRAME src="overview-frame.html" name="packageListFrame">
+<FRAME src="allclasses-frame.html" name="packageFrame">
+</FRAMESET>
+<FRAME src="overview-summary.html" name="classFrame">
+</FRAMESET>
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to<A HREF="overview-summary.html">Non-frame version.</A></NOFRAMES>
+</HTML>
diff --git a/db/docs/java/overview-frame.html b/db/docs/java/overview-frame.html
new file mode 100644
index 000000000..64a3982f7
--- /dev/null
+++ b/db/docs/java/overview-frame.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="Overview">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Overview (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
+<B><b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></B></FONT></TD>
+</TR>
+</TABLE>
+
+<TABLE BORDER="0" WIDTH="100%">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" TARGET="packageFrame">All Classes</A></FONT>
+<P>
+<FONT size="+1" CLASS="FrameHeadingFont">
+Packages</FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/bind/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.bind</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/bind/serial/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.bind.serial</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/bind/tuple/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.bind.tuple</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/collection/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.collection</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/factory/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.factory</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/bdb/util/package-frame.html" TARGET="packageFrame">com.sleepycat.bdb.util</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="com/sleepycat/db/package-frame.html" TARGET="packageFrame">com.sleepycat.db</A></FONT>
+<BR>
+</TD>
+</TR>
+</TABLE>
+
+<P>
+&nbsp;
+</BODY>
+</HTML>
diff --git a/db/docs/java/overview-summary.html b/db/docs/java/overview-summary.html
new file mode 100644
index 000000000..e85089d34
--- /dev/null
+++ b/db/docs/java/overview-summary.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+Overview (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<META NAME="keywords" CONTENT="Overview">
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Overview (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>BerkeleyDB Core Package</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/db/package-summary.html">com.sleepycat.db</A></B></TD>
+<TD>Java API programming notes<br>
+<a href="../ref/java/program.html" target="_top">[reference guide]</a></TD>
+</TR>
+</TABLE>
+
+<P>
+&nbsp;
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>BerkeleyDB Collections Packages</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/package-summary.html">com.sleepycat.bdb</A></B></TD>
+<TD>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/bind/package-summary.html">com.sleepycat.bdb.bind</A></B></TD>
+<TD>Interfaces for defining data formats and data-to-object bindings
+<a href="../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/bind/serial/package-summary.html">com.sleepycat.bdb.bind.serial</A></B></TD>
+<TD>Formats and bindings that use Java serialization</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/bind/tuple/package-summary.html">com.sleepycat.bdb.bind.tuple</A></B></TD>
+<TD>Formats and bindings that use sequences of primitive data items or tuples</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/collection/package-summary.html">com.sleepycat.bdb.collection</A></B></TD>
+<TD>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/factory/package-summary.html">com.sleepycat.bdb.factory</A></B></TD>
+<TD>Factory classes</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="com/sleepycat/bdb/util/package-summary.html">com.sleepycat.bdb.util</A></B></TD>
+<TD>General utilities used throughout DB<br>
+<a href="../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a></TD>
+</TR>
+</TABLE>
+
+<P>
+&nbsp;<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-summary.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="./../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/overview-tree.html b/db/docs/java/overview-tree.html
new file mode 100644
index 000000000..edb6f74fd
--- /dev/null
+++ b/db/docs/java/overview-tree.html
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Class Hierarchy (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For All Packages</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="com/sleepycat/bdb/package-tree.html">com.sleepycat.bdb</A>, <A HREF="com/sleepycat/bdb/bind/package-tree.html">com.sleepycat.bdb.bind</A>, <A HREF="com/sleepycat/bdb/bind/serial/package-tree.html">com.sleepycat.bdb.bind.serial</A>, <A HREF="com/sleepycat/bdb/bind/tuple/package-tree.html">com.sleepycat.bdb.bind.tuple</A>, <A HREF="com/sleepycat/bdb/collection/package-tree.html">com.sleepycat.bdb.collection</A>, <A HREF="com/sleepycat/bdb/factory/package-tree.html">com.sleepycat.bdb.factory</A>, <A HREF="com/sleepycat/bdb/util/package-tree.html">com.sleepycat.bdb.util</A>, <A HREF="com/sleepycat/db/package-tree.html">com.sleepycat.db</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html"><B>Object</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayBinding.html"><B>ByteArrayBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/ByteArrayFormat.html"><B>ByteArrayFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/CurrentTransaction.html"><B>CurrentTransaction</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataCursor.html"><B>DataCursor</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataDb.html"><B>DataDb</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataIndex.html"><B>DataIndex</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/ForeignKeyIndex.html"><B>ForeignKeyIndex</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataStore.html"><B>DataStore</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataView.html"><B>DataView</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>)
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Db.html"><B>Db</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeStat.html"><B>DbBtreeStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbc.html"><B>Dbc</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.html"><B>DbEnv</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnv.RepProcessMessage.html"><B>DbEnv.RepProcessMessage</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbHashStat.html"><B>DbHashStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbKeyRange.html"><B>DbKeyRange</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLock.html"><B>DbLock</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockRequest.html"><B>DbLockRequest</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockStat.html"><B>DbLockStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogc.html"><B>DbLogc</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLogStat.html"><B>DbLogStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLsn.html"><B>DbLsn</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFile.html"><B>DbMpoolFile</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolFStat.html"><B>DbMpoolFStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMpoolStat.html"><B>DbMpoolStat</B></A><LI TYPE="circle">class com.sleepycat.db.DbMultipleIterator<UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleDataIterator.html"><B>DbMultipleDataIterator</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleKeyDataIterator.html"><B>DbMultipleKeyDataIterator</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMultipleRecnoDataIterator.html"><B>DbMultipleRecnoDataIterator</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbPreplist.html"><B>DbPreplist</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbQueueStat.html"><B>DbQueueStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepStat.html"><B>DbRepStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/Dbt.html"><B>Dbt</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/DataThang.html"><B>DataThang</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxn.html"><B>DbTxn</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.html"><B>DbTxnStat</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbTxnStat.Active.html"><B>DbTxnStat.Active</B></A><LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionUnwrapper.html"><B>ExceptionUnwrapper</B></A><LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/InputStream.html"><B>InputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastInputStream.html"><B>FastInputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInput.html"><B>TupleInput</B></A></UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInputStream.html"><B>ObjectInputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectInput.html">ObjectInput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialInput.html"><B>SerialInput</B></A></UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/MapEntry.html"><B>MapEntry</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</A>)
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/OutputStream.html"><B>OutputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/FastOutputStream.html"><B>FastOutputStream</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleOutput.html"><B>TupleOutput</B></A></UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutputStream.html"><B>ObjectOutputStream</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectOutput.html">ObjectOutput</A>, java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/ObjectStreamConstants.html">ObjectStreamConstants</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialOutput.html"><B>SerialOutput</B></A></UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberBinding.html"><B>RecordNumberBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/RecordNumberFormat.html"><B>RecordNumberFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialBinding.html"><B>SerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialFormat.html"><B>SerialFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialBinding.html"><B>SerialSerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html"><B>SerialSerialKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/SimpleBuffer.html"><B>SimpleBuffer</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html">DataBuffer</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/StoredClassCatalog.html"><B>StoredClassCatalog</B></A> (implements com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html">ClassCatalog</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollections.html"><B>StoredCollections</B></A><LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredContainer.html"><B>StoredContainer</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredCollection.html"><B>StoredCollection</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredEntrySet.html"><B>StoredEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedEntrySet.html"><B>StoredSortedEntrySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredKeySet.html"><B>StoredKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedKeySet.html"><B>StoredSortedKeySet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredList.html"><B>StoredList</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredValueSet.html"><B>StoredValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedValueSet.html"><B>StoredSortedValueSet</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</A>)
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredMap.html"><B>StoredMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredSortedMap.html"><B>StoredSortedMap</B></A> (implements java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</A>)
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.collection.<A HREF="com/sleepycat/bdb/collection/StoredIterator.html"><B>StoredIterator</B></A> (implements java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Cloneable.html">Cloneable</A>, java.util.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</A>)
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html"><B>Throwable</B></A> (implements java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</A>)
+<UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Exception.html"><B>Exception</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbException.html"><B>DbException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbDeadlockException.html"><B>DbDeadlockException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbLockNotGrantedException.html"><B>DbLockNotGrantedException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbMemoryException.html"><B>DbMemoryException</B></A><LI TYPE="circle">class com.sleepycat.db.<A HREF="com/sleepycat/db/DbRunRecoveryException.html"><B>DbRunRecoveryException</B></A></UL>
+<LI TYPE="circle">class java.io.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/io/IOException.html"><B>IOException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html"><B>IOExceptionWrapper</B></A> (implements com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>)
+</UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/RuntimeException.html"><B>RuntimeException</B></A><UL>
+<LI TYPE="circle">class java.lang.<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html"><B>IllegalArgumentException</B></A><UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/KeyRangeException.html"><B>KeyRangeException</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/IntegrityConstraintException.html"><B>IntegrityConstraintException</B></A><LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html"><B>RuntimeExceptionWrapper</B></A> (implements com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html">ExceptionWrapper</A>)
+</UL>
+</UL>
+</UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/TimeUnits.html"><B>TimeUnits</B></A><LI TYPE="circle">class com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionRunner.html"><B>TransactionRunner</B></A><LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleBinding.html"><B>TupleBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html"><B>TupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleFormat.html"><B>TupleFormat</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html">DataFormat</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleInputBinding.html"><B>TupleInputBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html">DataBinding</A>)
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialBinding.html"><B>TupleSerialBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.html"><B>TupleSerialMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.factory.<A HREF="com/sleepycat/bdb/factory/TupleSerialDbFactory.html"><B>TupleSerialDbFactory</B></A><LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html"><B>TupleSerialKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.html"><B>TupleSerialMarshalledKeyExtractor</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleBinding.html"><B>TupleTupleBinding</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.html"><B>TupleTupleMarshalledBinding</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.html"><B>TupleTupleKeyExtractor</B></A> (implements com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</A>)
+<UL>
+<LI TYPE="circle">class com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.html"><B>TupleTupleMarshalledKeyExtractor</B></A></UL>
+<LI TYPE="circle">class com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/UtfOps.html"><B>UtfOps</B></A></UL>
+</UL>
+<H2>
+Interface Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">interface com.sleepycat.bdb.bind.serial.<A HREF="com/sleepycat/bdb/bind/serial/ClassCatalog.html"><B>ClassCatalog</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBinding.html"><B>DataBinding</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataBuffer.html"><B>DataBuffer</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataFormat.html"><B>DataFormat</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/DataType.html"><B>DataType</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppDispatch.html"><B>DbAppDispatch</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbAppendRecno.html"><B>DbAppendRecno</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreeCompare.html"><B>DbBtreeCompare</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbBtreePrefix.html"><B>DbBtreePrefix</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbClient.html"><B>DbClient</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbDupCompare.html"><B>DbDupCompare</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedback.html"><B>DbEnvFeedback</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbEnvFeedbackHandler.html"><B>DbEnvFeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrcall.html"><B>DbErrcall</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbErrorHandler.html"><B>DbErrorHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedback.html"><B>DbFeedback</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbFeedbackHandler.html"><B>DbFeedbackHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbHash.html"><B>DbHash</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbPanicHandler.html"><B>DbPanicHandler</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbRepTransport.html"><B>DbRepTransport</B></A><LI TYPE="circle">interface com.sleepycat.db.<A HREF="com/sleepycat/db/DbSecondaryKeyCreate.html"><B>DbSecondaryKeyCreate</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/EntityBinding.html"><B>EntityBinding</B></A><LI TYPE="circle">interface com.sleepycat.bdb.util.<A HREF="com/sleepycat/bdb/util/ExceptionWrapper.html"><B>ExceptionWrapper</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.<A HREF="com/sleepycat/bdb/bind/KeyExtractor.html"><B>KeyExtractor</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html"><B>MarshalledTupleData</B></A><LI TYPE="circle">interface com.sleepycat.bdb.bind.tuple.<A HREF="com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.html"><B>MarshalledTupleKeyEntity</B></A><LI TYPE="circle">interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/PrimaryKeyAssigner.html"><B>PrimaryKeyAssigner</B></A><LI TYPE="circle">interface com.sleepycat.bdb.<A HREF="com/sleepycat/bdb/TransactionWorker.html"><B>TransactionWorker</B></A></UL>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="overview-tree.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/package-list b/db/docs/java/package-list
new file mode 100644
index 000000000..9705f5836
--- /dev/null
+++ b/db/docs/java/package-list
@@ -0,0 +1,8 @@
+com.sleepycat.bdb
+com.sleepycat.bdb.bind
+com.sleepycat.bdb.bind.serial
+com.sleepycat.bdb.bind.tuple
+com.sleepycat.bdb.collection
+com.sleepycat.bdb.factory
+com.sleepycat.bdb.util
+com.sleepycat.db
diff --git a/db/docs/java/packages.html b/db/docs/java/packages.html
new file mode 100644
index 000000000..43c2e6881
--- /dev/null
+++ b/db/docs/java/packages.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:05 EST 2003 -->
+<TITLE>
+ (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title=" (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<BR>
+
+<BR>
+
+<BR>
+<CENTER>
+The front page has been relocated.Please see:
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="index.html">Frame version</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="overview-summary.html">Non-frame version.</A></CENTER>
+
+</BODY>
+</HTML>
diff --git a/db/docs/java/serialized-form.html b/db/docs/java/serialized-form.html
new file mode 100644
index 000000000..c7c1e845b
--- /dev/null
+++ b/db/docs/java/serialized-form.html
@@ -0,0 +1,392 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Wed Dec 03 16:22:11 EST 2003 -->
+<TITLE>
+Serialized Form (Sleepycat Software, Inc. - Berkeley DB Java API)
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="style.css" TITLE="Style">
+</HEAD>
+<SCRIPT>
+function asd()
+{
+parent.document.title="Serialized Form (Sleepycat Software, Inc. - Berkeley DB Java API)";
+}
+</SCRIPT>
+<BODY BGCOLOR="white" onload="asd();">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<CENTER>
+<H1>
+Serialized Form</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.sleepycat.bdb</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="com.sleepycat.bdb.IntegrityConstraintException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/bdb/IntegrityConstraintException.html">com.sleepycat.bdb.IntegrityConstraintException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.bdb.KeyRangeException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/bdb/KeyRangeException.html">com.sleepycat.bdb.KeyRangeException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR SIZE="4" NOSHADE>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.sleepycat.bdb.util</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="com.sleepycat.bdb.util.IOExceptionWrapper"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/bdb/util/IOExceptionWrapper.html">com.sleepycat.bdb.util.IOExceptionWrapper</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serializedForm"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TD>
+</TR>
+</TABLE>
+
+<H3>
+e</H3>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>e</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.sleepycat.bdb.util.RuntimeExceptionWrapper"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">com.sleepycat.bdb.util.RuntimeExceptionWrapper</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serializedForm"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TD>
+</TR>
+</TABLE>
+
+<H3>
+e</H3>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/Throwable.html">Throwable</A> <B>e</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<P>
+<HR SIZE="4" NOSHADE>
+
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD ALIGN="center"><FONT SIZE="+2">
+<B>Package</B> <B>com.sleepycat.db</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="com.sleepycat.db.DbDeadlockException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DbDeadlockException.html">com.sleepycat.db.DbDeadlockException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<A NAME="com.sleepycat.db.DbException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DbException.html">com.sleepycat.db.DbException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serializedForm"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TD>
+</TR>
+</TABLE>
+
+<H3>
+dbenv_</H3>
+<PRE>
+<A HREF="com/sleepycat/db/DbEnv.html">DbEnv</A> <B>dbenv_</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+errno_</H3>
+<PRE>
+int <B>errno_</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.sleepycat.db.DbLockNotGrantedException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DbLockNotGrantedException.html">com.sleepycat.db.DbLockNotGrantedException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serializedForm"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TD>
+</TR>
+</TABLE>
+
+<H3>
+index</H3>
+<PRE>
+int <B>index</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+lock</H3>
+<PRE>
+<A HREF="com/sleepycat/db/DbLock.html">DbLock</A> <B>lock</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+mode</H3>
+<PRE>
+int <B>mode</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+obj</H3>
+<PRE>
+<A HREF="com/sleepycat/db/Dbt.html">Dbt</A> <B>obj</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+op</H3>
+<PRE>
+int <B>op</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.sleepycat.db.DbMemoryException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DbMemoryException.html">com.sleepycat.db.DbMemoryException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+<A NAME="serializedForm"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Serialized Fields</B></FONT></TD>
+</TR>
+</TABLE>
+
+<H3>
+dbt</H3>
+<PRE>
+<A HREF="com/sleepycat/db/Dbt.html">Dbt</A> <B>dbt</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+<HR>
+
+<H3>
+message</H3>
+<PRE>
+<A HREF="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</A> <B>message</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<P>
+<A NAME="com.sleepycat.db.DbRunRecoveryException"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class <A HREF="com/sleepycat/db/DbRunRecoveryException.html">com.sleepycat.db.DbRunRecoveryException</A> implements Serializable</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Use</FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+<b>Berkeley DB</b><br><font size="-1"> version 4.2.52</font></EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV&nbsp;
+&nbsp;NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="serialized-form.html" TARGET="_top"><B>NO FRAMES</B></A> &nbsp;
+&nbsp;
+<SCRIPT>
+ <!--
+ if(window==top) {
+ document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
+ }
+ //-->
+</SCRIPT>
+<NOSCRIPT>
+<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>
+</NOSCRIPT>
+</FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</BODY>
+</HTML>
diff --git a/db/docs/java/style.css b/db/docs/java/style.css
new file mode 100644
index 000000000..5847df9c4
--- /dev/null
+++ b/db/docs/java/style.css
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF }
+
+/* Table colors */
+.TableHeadingColor { background: #D94E4E } /* Dark mauve */
+.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */
+.TableRowColor { background: #FFFFFF } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
+.FrameHeadingFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
+.FrameItemFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif }
+
+/* Example of smaller, sans-serif font in frames */
+/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
+
+/* Navigation bar fonts and colors */
+.NavBarCell1 { background-color:#B44040;}/* Red */
+.NavBarCell1Rev { background-color:#D94E4E;}/* Light red */
+.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
diff --git a/db/docs/ref/am/close.html b/db/docs/ref/am/close.html
index 04b8beacb..e4d62bbbe 100644
--- a/db/docs/ref/am/close.html
+++ b/db/docs/ref/am/close.html
@@ -1,24 +1,25 @@
-<!--$Id: close.so,v 10.15 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: close.so,v 10.18 2003/10/18 19:15:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Closing a database</title>
+<title>Berkeley DB Reference Guide: Database close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/second.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Closing a database</h1>
-<p>The <a href="../../api_c/db_close.html">DB-&gt;close</a> function is the standard interface for closing the database.
-By default, <a href="../../api_c/db_close.html">DB-&gt;close</a> also flushes all modified records from the
-database cache to disk.
-<p>There is one flag that you can set to customize <a href="../../api_c/db_close.html">DB-&gt;close</a>:
+<h3 align=center>Database close</h3>
+<p>The <a href="../../api_c/db_close.html">DB-&gt;close</a> method closes the <a href="../../api_c/db_class.html">DB</a> database handle. By
+default, <a href="../../api_c/db_close.html">DB-&gt;close</a> also flushes all modified records from the
+database cache to disk.</p>
+<p>There is one flag that you can set to customize <a href="../../api_c/db_close.html">DB-&gt;close</a>:</p>
<p><dl compact>
<p><dt><a href="../../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a><dd>Do not flush cached information to disk.
</dl>
@@ -27,17 +28,17 @@ to disk only minimizes the window of opportunity for corrupted data, it
does not eliminate the possibility.</b>
<p>While unlikely, it is possible for database corruption to happen if a
system or application crash occurs while writing data to the database. To
-ensure that database corruption never occurs, applications must either:
-<ul type=disc>
+ensure that database corruption never occurs, applications must either:</p>
+<p><ul type=disc>
<li>Use transactions and logging with automatic recovery.
<li>Use logging and application-specific recovery.
<li>Edit a copy of the database, and, once all applications
using the database have successfully called <a href="../../api_c/db_close.html">DB-&gt;close</a>, use
-system operations (e.g., the POSIX rename system call) to atomically
-replace the original database with the updated copy.
+system operations (for example, the POSIX rename system call) to
+atomically replace the original database with the updated copy.
</ul>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/second.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/count.html b/db/docs/ref/am/count.html
index 92282641b..71d1e6900 100644
--- a/db/docs/ref/am/count.html
+++ b/db/docs/ref/am/count.html
@@ -1,28 +1,29 @@
-<!--$Id: count.so,v 1.3 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: count.so,v 1.4 2001/05/05 01:49:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Data item count</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curclose.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curclose.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Data item count</h1>
-<p>Once a cursor has been initialized to reference a particular key in the
+<h3 align=center>Data item count</h3>
+<p>Once a cursor has been initialized to refer to a particular key in the
database, it can be used to determine the number of data items that are
stored for any particular key. The <a href="../../api_c/dbc_count.html">DBcursor-&gt;c_count</a> method returns
this number of data items. The returned value is always one, unless
the database supports duplicate data items, in which case it may be any
-number of items.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curclose.html"><img src="../../images/next.gif" alt="Next"></a>
+number of items.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curclose.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curclose.html b/db/docs/ref/am/curclose.html
index 52ccfeb8c..a0461fe52 100644
--- a/db/docs/ref/am/curclose.html
+++ b/db/docs/ref/am/curclose.html
@@ -1,28 +1,29 @@
-<!--$Id: curclose.so,v 10.12 2000/12/13 16:48:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: curclose.so,v 10.15 2003/10/18 19:15:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Closing a cursor</title>
+<title>Berkeley DB Reference Guide: Cursor close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/count.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/stability.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/count.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/align.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Closing a cursor</h1>
-<p>The <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a> function is the standard interface for closing a cursor,
-after which the cursor may no longer be used. Although cursors are
-implicitly closed when the database they point to are closed, it is good
-programming practice to explicitly close cursors. In addition, in
-transactional systems, cursors may not exist outside of a transaction and
-so must be explicitly closed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/count.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/stability.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Cursor close</h3>
+<p>The <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a> method closes the <a href="../../api_c/dbc_class.html">DBC</a> cursor, after which the
+cursor may no longer be used. Although cursors are implicitly closed
+when the database they point to are closed, it is good programming
+practice to explicitly close cursors. In addition, in transactional
+systems, cursors may not exist outside of a transaction and so must be
+explicitly closed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/count.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/align.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curdel.html b/db/docs/ref/am/curdel.html
index b0fe8f957..a4e463292 100644
--- a/db/docs/ref/am/curdel.html
+++ b/db/docs/ref/am/curdel.html
@@ -1,26 +1,27 @@
-<!--$Id: curdel.so,v 10.11 2000/03/18 21:43:07 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: curdel.so,v 10.15 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Deleting records with a cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/curput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curdup.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/curput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curdup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deleting records with a cursor</h1>
-<p>The <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a> function is the standard interface for deleting records from
-the database using a cursor. The <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a> function deletes the record
-currently referenced by the cursor. In all cases, the cursor position is
-unchanged after a delete.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/curput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curdup.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Deleting records with a cursor</h3>
+<p>The <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a> method deletes records from the database using a cursor.
+The <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a> method deletes the record to which the cursor currently
+refers. In all cases, the cursor position is unchanged after a
+delete.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/curput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curdup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curdup.html b/db/docs/ref/am/curdup.html
index 6c609b2e5..6a10fede6 100644
--- a/db/docs/ref/am/curdup.html
+++ b/db/docs/ref/am/curdup.html
@@ -1,34 +1,35 @@
-<!--$Id: curdup.so,v 11.5 2000/12/19 14:45:39 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: curdup.so,v 11.6 2001/03/01 15:57:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Duplicating a cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/curdel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/join.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/curdel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/join.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Duplicating a cursor</h1>
-<p>Once a cursor has been initialized (e.g., by a call to <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>),
-it can be thought of as identifying a particular location in a database.
-The <a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a> function permits an application to create a new cursor that
-has the same locking and transactional information as the cursor from
-which it is copied, and which optionally refers to the same position in
-the database.
+<h3 align=center>Duplicating a cursor</h3>
+<p>Once a cursor has been initialized (for example, by a call to
+<a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>), it can be thought of as identifying a particular
+location in a database. The <a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a> method permits an application to
+create a new cursor that has the same locking and transactional
+information as the cursor from which it is copied, and which optionally
+refers to the same position in the database.</p>
<p>In order to maintain a cursor position when an application is using
locking, locks are maintained on behalf of the cursor until the cursor is
closed. In cases when an application is using locking without
transactions, cursor duplication is often required to avoid
self-deadlocks. For further details, refer to
-<a href="../../ref/lock/am_conv.html">Access method locking conventions</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/curdel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/join.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../ref/lock/am_conv.html">Access method locking conventions</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/curdel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/join.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curget.html b/db/docs/ref/am/curget.html
index 129fa272b..1e2316f1b 100644
--- a/db/docs/ref/am/curget.html
+++ b/db/docs/ref/am/curget.html
@@ -1,27 +1,28 @@
-<!--$Id: curget.so,v 10.14 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: curget.so,v 10.20 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Retrieving records with a cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curput.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curput.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieving records with a cursor</h1>
-<p>The <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> function is the standard interface for retrieving records from
-the database with a cursor. The <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> function takes a flag which
-controls how the cursor is positioned within the database and returns the
-key/data item associated with that positioning. Similar to
-<a href="../../api_c/db_get.html">DB-&gt;get</a>, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> may also take a supplied key and retrieve
-the data associated with that key from the database. There are several
-flags that you can set to customize retrieval.
+<h3 align=center>Retrieving records with a cursor</h3>
+<p>The <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method retrieves records from the database using a cursor.
+The <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method takes a flag which controls how the cursor is
+positioned within the database and returns the key/data item associated
+with that positioning. Similar to <a href="../../api_c/db_get.html">DB-&gt;get</a>, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> may
+also take a supplied key and retrieve the data associated with that key
+from the database. There are several flags that you can set to
+customize retrieval.</p>
<h3>Cursor position flags</h3>
<p><dl compact>
<p><dt><a href="../../api_c/dbc_get.html#DB_FIRST">DB_FIRST</a>, <a href="../../api_c/dbc_get.html#DB_LAST">DB_LAST</a><dd>Return the first (last) record in the database.
@@ -30,8 +31,7 @@ flags that you can set to customize retrieval.
for the current key.
<p><dt><a href="../../api_c/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a>, <a href="../../api_c/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a><dd>Return the next (previous) record in the database that is not a
duplicate data item for the current key.
-<p><dt><a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a><dd>Return the record from the database currently referenced by the
-cursor.
+<p><dt><a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a><dd>Return the record from the database to which the cursor currently refers.
</dl>
<h3>Retrieving specific key/data pairs</h3>
<p><dl compact>
@@ -47,6 +47,8 @@ and data items. This is particularly useful when there are large
numbers of duplicate records for a key, as it allows the cursor to
easily be positioned at the correct place for traversal of some part of
a large set of duplicate records.
+<p><dt><a href="../../api_c/db_get.html#DB_GET_BOTH_RANGE">DB_GET_BOTH_RANGE</a><dd>Return the smallest record in the database greater than or equal to the
+supplied key and data items.
</dl>
<h3>Retrieving based on record numbers</h3>
<p><dl compact>
@@ -55,7 +57,7 @@ possible to search it by logical record number, retrieve a specific
record based on a record number argument.
<p><dt><a href="../../api_c/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a><dd>If the underlying database is a Btree, and was configured so that it is
possible to search it by logical record number, return the record number
-for the record referenced by the cursor.
+for the record to which the cursor refers.
</dl>
<h3>Special-purpose flags</h3>
<p><dl compact>
@@ -66,9 +68,68 @@ retrieval. This can enhance performance in threaded applications by
reducing the chance of deadlock.
</dl>
<p>In all cases, the cursor is repositioned by a <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> operation
-to point to the newly-returned key/data pair in the database.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curput.html"><img src="../../images/next.gif" alt="Next"></a>
+to point to the newly-returned key/data pair in the database.</p>
+<p>The following is a code example showing a cursor walking through a
+database and displaying the records it contains to the standard
+output:</p>
+<blockquote><pre>int
+display(database)
+ char *database;
+{
+ DB *dbp;
+ DBC *dbcp;
+ DBT key, data;
+ int close_db, close_dbc, ret;
+<p>
+ close_db = close_dbc = 0;
+<p>
+ /* Open the database. */
+ if ((ret = db_create(&dbp, NULL, 0)) != 0) {
+ fprintf(stderr,
+ "%s: db_create: %s\n", progname, db_strerror(ret));
+ return (1);
+ }
+<p>
+ /* Turn on additional error output. */
+ dbp-&gt;set_errfile(dbp, stderr);
+ dbp-&gt;set_errpfx(dbp, progname);
+<p>
+ /* Open the database. */
+ if ((ret =
+ dbp-&gt;open(dbp, NULL, database, NULL, DB_UNKNOWN, DB_RDONLY, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, "%s: DB-&gt;open", database);
+ goto err;
+ }
+<p>
+ /* Acquire a cursor for the database. */
+ if ((ret = dbp-&gt;cursor(dbp, NULL, &dbcp, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+ goto err;
+ }
+<p>
+ /* Initialize the key/data return pair. */
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+<p>
+ /* Walk through the database and print out the key/data pairs. */
+ while ((ret = dbcp-&gt;c_get(dbcp, &key, &data, DB_NEXT)) == 0)
+ printf("%.*s : %.*s\n",
+ (int)key.size, (char *)key.data,
+ (int)data.size, (char *)data.data);
+ if (ret != DB_NOTFOUND) {
+ dbp-&gt;err(dbp, ret, "DBcursor-&gt;get");
+ goto err;
+ }
+<p>
+err: if (close_dbc && (ret = dbcp-&gt;c_close(dbcp)) != 0)
+ dbp-&gt;err(dbp, ret, "DBcursor-&gt;close");
+ if (close_db && (ret = dbp-&gt;close(dbp, 0)) != 0)
+ fprintf(stderr,
+ "%s: DB-&gt;close: %s\n", progname, db_strerror(ret));
+ return (0);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curput.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/curput.html b/db/docs/ref/am/curput.html
index 0d5ef2725..327fe379c 100644
--- a/db/docs/ref/am/curput.html
+++ b/db/docs/ref/am/curput.html
@@ -1,40 +1,90 @@
-<!--$Id: curput.so,v 10.12 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: curput.so,v 10.18 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Storing records with a cursor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/curget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curdel.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/curget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curdel.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Storing records with a cursor</h1>
-<p>The <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> function is the standard interface for storing records into
-the database with a cursor. In general, <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> takes a key and
-inserts the associated data into the database, at a location controlled
-by a specified flag.
-<p>There are several flags that you can set to customize storage:
+<h3 align=center>Storing records with a cursor</h3>
+<p>The <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> method stores records into the database using a cursor. In
+general, <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> takes a key and inserts the associated data
+into the database, at a location controlled by a specified flag.</p>
+<p>There are several flags that you can set to customize storage:</p>
<p><dl compact>
-<p><dt><a href="../../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a><dd>Create a new record, immediately after the record currently referenced by
-the cursor.
-<p><dt><a href="../../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a><dd>Create a new record, immediately before the record currently referenced by
-the cursor.
-<p><dt><a href="../../api_c/dbc_put.html#DB_CURRENT_PUT">DB_CURRENT</a><dd>Replace the data part of the record currently referenced by the cursor.
+<p><dt><a href="../../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a><dd>Create a new record, immediately after the record to which the cursor
+refers.
+<p><dt><a href="../../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a><dd>Create a new record, immediately before the record to which the cursor
+refers.
+<p><dt><a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a><dd>Replace the data part of the record to which the cursor refers.
<p><dt><a href="../../api_c/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a><dd>Create a new record as the first of the duplicate records for the
supplied key.
<p><dt><a href="../../api_c/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a><dd>Create a new record, as the last of the duplicate records for the supplied
key.
</dl>
<p>In all cases, the cursor is repositioned by a <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> operation
-to point to the newly inserted key/data pair in the database.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/curget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curdel.html"><img src="../../images/next.gif" alt="Next"></a>
+to point to the newly inserted key/data pair in the database.</p>
+<p>The following is a code example showing a cursor storing two data items
+in a database that supports duplicate data items:</p>
+<blockquote><pre>int
+store(dbp)
+ DB *dbp;
+{
+ DBC *dbcp;
+ DBT key, data;
+ int ret;
+<p>
+ /*
+ * The DB handle for a Btree database supporting duplicate data
+ * items is the argument; acquire a cursor for the database.
+ */
+ if ((ret = dbp-&gt;cursor(dbp, NULL, &dbcp, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+ goto err;
+ }
+<p>
+ /* Initialize the key. */
+ memset(&key, 0, sizeof(key));
+ key.data = "new key";
+ key.size = strlen(key.data) + 1;
+<p>
+ /* Initialize the data to be the first of two duplicate records. */
+ memset(&data, 0, sizeof(data));
+ data.data = "new key's data: entry #1";
+ data.size = strlen(data.data) + 1;
+<p>
+ /* Store the first of the two duplicate records. */
+ if ((ret = dbcp-&gt;c_put(dbcp, &key, &data, DB_KEYFIRST)) != 0)
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+<p>
+ /* Initialize the data to be the second of two duplicate records. */
+ data.data = "new key's data: entry #2";
+ data.size = strlen(data.data) + 1;
+<p>
+ /*
+ * Store the second of the two duplicate records. No duplicate
+ * record sort function has been specified, so we explicitly
+ * store the record as the last of the duplicate set.
+ */
+ if ((ret = dbcp-&gt;c_put(dbcp, &key, &data, DB_KEYLAST)) != 0)
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+<p>
+err: if ((ret = dbcp-&gt;c_close(dbcp)) != 0)
+ dbp-&gt;err(dbp, ret, "DBcursor-&gt;close");
+<p>
+ return (0);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/curget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curdel.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/cursor.html b/db/docs/ref/am/cursor.html
index 529285b4a..647f48904 100644
--- a/db/docs/ref/am/cursor.html
+++ b/db/docs/ref/am/cursor.html
@@ -1,41 +1,51 @@
-<!--$Id: cursor.so,v 10.15 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: cursor.so,v 10.21 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Database cursors</title>
+<title>Berkeley DB Reference Guide: Cursor operations</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curget.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/second.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curget.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database cursors</h1>
-<p>A database cursor is a reference to a single key/data pair in the
-database. It supports traversal of the database and is the only way to
-access individual duplicate data items. Cursors are used for operating
-on collections of records, for iterating over a database, and for saving
+<h3 align=center>Cursor operations</h3>
+<p>A database cursor refers to a single key/data pair in the database. It
+supports traversal of the database and is the only way to access
+individual duplicate data items. Cursors are used for operating on
+collections of records, for iterating over a database, and for saving
handles to individual records, so that they can be modified after they
-have been read.
-<p>The <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> function is the standard interface for opening a cursor
-into a database. Upon return the cursor is uninitialized, positioning
-occurs as part of the first cursor operation.
-<p>Once a database cursor has been opened, there are a set of access method
-operations that can be performed. Each of these operations is performed
-using a method referenced from the returned cursor handle.
-<p><dl compact>
-<dt><a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a><dd>Close the cursor
-<dt><a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a><dd>Delete a record
-<dt><a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a><dd>Duplicate a cursor
-<dt><a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a><dd>Retrieve a record
-<dt><a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a><dd>Store a record
-</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/curget.html"><img src="../../images/next.gif" alt="Next"></a>
+have been read.</p>
+<p>The <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> method opens a cursor into a database. Upon return the
+cursor is uninitialized, cursor positioning occurs as part of the first
+cursor operation.</p>
+<p>Once a database cursor has been opened, records may be retrieved
+(<a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>), stored (<a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a>), and deleted
+(<a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a>).</p>
+<p>Additional operations supported by the cursor handle include duplication
+(<a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a>), equality join (<a href="../../api_c/db_join.html">DB-&gt;join</a>), and a count of
+duplicate data items (<a href="../../api_c/dbc_count.html">DBcursor-&gt;c_count</a>). Cursors are eventually closed
+using <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a>.</p>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:49 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Database Cursors and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<tr><td><a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a></td><td>Close a cursor</td></tr>
+<tr><td><a href="../../api_c/dbc_count.html">DBcursor-&gt;c_count</a></td><td>Return count of duplicates</td></tr>
+<tr><td><a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a></td><td>Delete by cursor</td></tr>
+<tr><td><a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a></td><td>Duplicate a cursor</td></tr>
+<tr><td><a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a></td><td>Retrieve by cursor</td></tr>
+<tr><td><a href="../../api_c/dbc_get.html">DBcursor-&gt;c_pget</a></td><td>Retrieve by cursor</td></tr>
+<tr><td><a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a></td><td>Store by cursor</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/second.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/curget.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/delete.html b/db/docs/ref/am/delete.html
index 8ab612fa4..8a8d2ed52 100644
--- a/db/docs/ref/am/delete.html
+++ b/db/docs/ref/am/delete.html
@@ -1,28 +1,29 @@
-<!--$Id: delete.so,v 10.14 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: delete.so,v 10.16 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Deleting records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/sync.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deleting records</h1>
-<p>The <a href="../../api_c/db_del.html">DB-&gt;del</a> function is the standard interface for deleting records from
-the database. In general, <a href="../../api_c/db_del.html">DB-&gt;del</a> takes a key and deletes the
-data item associated with it from the database.
+<h3 align=center>Deleting records</h3>
+<p>The <a href="../../api_c/db_del.html">DB-&gt;del</a> method deletes records from the database. In general,
+<a href="../../api_c/db_del.html">DB-&gt;del</a> takes a key and deletes the data item associated with
+it from the database.</p>
<p>If the database has been configured to support duplicate records, the
-<a href="../../api_c/db_del.html">DB-&gt;del</a> function will remove all of the duplicate records. To remove
-individual duplicate records, you must use a Berkeley DB cursor interface.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/sync.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_del.html">DB-&gt;del</a> method will remove all of the duplicate records. To remove
+individual duplicate records, you must use a Berkeley DB cursor interface.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/get.html b/db/docs/ref/am/get.html
index fda7a8eb2..f541740fd 100644
--- a/db/docs/ref/am/get.html
+++ b/db/docs/ref/am/get.html
@@ -1,27 +1,28 @@
-<!--$Id: get.so,v 10.15 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: get.so,v 10.18 2003/10/18 19:15:52 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Retrieving records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/upgrade.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/put.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/opensub.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieving records</h1>
-<p>The <a href="../../api_c/db_get.html">DB-&gt;get</a> function is the standard interface for retrieving records from
-the database. In general, <a href="../../api_c/db_get.html">DB-&gt;get</a> takes a key and returns the
-associated data from the database.
-<p>There are a few flags that you can set to customize retrieval:
+<h3 align=center>Retrieving records</h3>
+<p>The <a href="../../api_c/db_get.html">DB-&gt;get</a> method retrieves records from the database. In general,
+<a href="../../api_c/db_get.html">DB-&gt;get</a> takes a key and returns the associated data from the
+database.</p>
+<p>There are a few flags that you can set to customize retrieval:</p>
<p><dl compact>
-<p><dt><a href="../../api_c/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a><dd>Search for a matching key and data item, i.e., only return success if both
-the key and the data items match those stored in the database.
+<p><dt><a href="../../api_c/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a><dd>Search for a matching key and data item, that is, only return success
+if both the key and the data items match those stored in the database.
<p><dt><a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a><dd>Read-modify-write: acquire write locks instead of read locks during
retrieval. This can enhance performance in threaded applications by
reducing the chance of deadlock.
@@ -31,9 +32,9 @@ record.
</dl>
<p>If the database has been configured to support duplicate records,
<a href="../../api_c/db_get.html">DB-&gt;get</a> will always return the first data item in the duplicate
-set.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/upgrade.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/put.html"><img src="../../images/next.gif" alt="Next"></a>
+set.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/opensub.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/join.html b/db/docs/ref/am/join.html
index 9d4dcdd09..aa1157e1c 100644
--- a/db/docs/ref/am/join.html
+++ b/db/docs/ref/am/join.html
@@ -1,119 +1,126 @@
-<!--$Id: join.so,v 10.21 2000/12/18 21:05:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: join.so,v 10.30 2003/10/24 22:27:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Logical join</title>
+<title>Berkeley DB Reference Guide: Equality Join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a><a name="4"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/curdup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/count.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/curdup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/count.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Logical join</h1>
-<p>A logical join is a method of retrieving data from a primary database
-using criteria stored in a set of secondary indexes. A logical join
-requires that your data be organized as a primary database which
-contains the primary key and primary data field, and a set of secondary
-indexes. Each of the secondary indexes is indexed by a different
-secondary key, and, for each key in a secondary index, there is a set
-of duplicate data items that match the primary keys in the primary
-database.
+<h3 align=center>Equality Join</h3>
+<p>Berkeley DB supports "equality" (also known as "natural"), joins on secondary
+indices. An equality join is a method of retrieving data from a primary
+database using criteria stored in a set of secondary indices. It
+requires the data be organized as a primary database which contains the
+primary key and primary data field, and a set of secondary indices.
+Each of the secondary indices is indexed by a different secondary key,
+and, for each key in a secondary index, there is a set of duplicate data
+items that match the primary keys in the primary database.</p>
<p>For example, let's assume the need for an application that will return
the names of stores in which one can buy fruit of a given color. We
would first construct a primary database that lists types of fruit as
-the key item, and the store where you can buy them as the data item:
-<p><blockquote><pre><b>Primary key:</b> <b>Primary data:</b>
-apple Convenience Store
-blueberry Farmer's Market
-peach Shopway
-pear Farmer's Market
-raspberry Shopway
-strawberry Farmer's Market</pre></blockquote>
+the key item, and the store where you can buy them as the data item:</p>
+<blockquote><table border=1>
+<tr><th>Primary key:</th><th>Primary data:</th></tr>
+<tr> <td align=left>apple</td> <td align=left>Convenience Store</td> </tr>
+<tr> <td align=left>blueberry</td> <td align=left>Farmer's Market</td> </tr>
+<tr> <td align=left>peach</td> <td align=left>Shopway</td> </tr>
+<tr> <td align=left>pear</td> <td align=left>Farmer's Market</td> </tr>
+<tr> <td align=left>raspberry</td> <td align=left>Shopway</td> </tr>
+<tr> <td align=left>strawberry</td> <td align=left>Farmer's Market</td> </tr>
+</table></blockquote>
<p>We would then create a secondary index with the key <b>color</b>, and,
-as the data items, the names of fruits of different colors.
-<p><blockquote><pre><b>Secondary key:</b> <b>Secondary data:</b>
-blue blueberry
-red apple
-red raspberry
-red strawberry
-yellow peach
-yellow pear</pre></blockquote>
+as the data items, the names of fruits of different colors.</p>
+<blockquote><table border=1>
+<tr><th>Secondary key:</th><th>Secondary data:</th></tr>
+<tr> <td align=left>blue</td> <td align=left>blueberry</td> </tr>
+<tr> <td align=left>red</td> <td align=left>apple</td> </tr>
+<tr> <td align=left>red</td> <td align=left>raspberry</td> </tr>
+<tr> <td align=left>red</td> <td align=left>strawberry</td> </tr>
+<tr> <td align=left>yellow</td> <td align=left>peach</td> </tr>
+<tr> <td align=left>yellow</td> <td align=left>pear</td> </tr>
+</table></blockquote>
<p>This secondary index would allow an application to look up a color, and
then use the data items to look up the stores where the colored fruit
could be purchased. For example, by first looking up <b>blue</b>,
the data item <b>blueberry</b> could be used as the lookup key in the
-primary database, returning <b>Farmer's Market</b>.
+primary database, returning <b>Farmer's Market</b>.</p>
<p>Your data must be organized in the following manner in order to use the
-<a href="../../api_c/db_join.html">DB-&gt;join</a> function:
-<p><ol>
+<a href="../../api_c/db_join.html">DB-&gt;join</a> method:</p>
+<ol>
<p><li>The actual data should be stored in the database represented by the
-DB object used to invoke this function. Generally, this
-DB object is called the <i>primary</i>.
-<p><li>Secondary indexes should be stored in separate databases, whose keys
-are the values of the secondary indexes and whose data items are the
+<a href="../../api_c/db_class.html">DB</a> object used to invoke this method. Generally, this
+<a href="../../api_c/db_class.html">DB</a> object is called the <i>primary</i>.
+<p><li>Secondary indices should be stored in separate databases, whose keys
+are the values of the secondary indices and whose data items are the
primary keys corresponding to the records having the designated
secondary key value. It is acceptable (and expected) that there may be
-duplicate entries in the secondary indexes.
+duplicate entries in the secondary indices.
<p>These duplicate entries should be sorted for performance reasons, although
it is not required. For more information see the <a href="../../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag
-to the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function.
+to the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method.</p>
</ol>
-<p>What the <a href="../../api_c/db_join.html">DB-&gt;join</a> function does is review a list of secondary keys, and,
+<p>What the <a href="../../api_c/db_join.html">DB-&gt;join</a> method does is review a list of secondary keys, and,
when it finds a data item that appears as a data item for all of the
secondary keys, it uses that data items as a lookup into the primary
-database, and returns the associated data item.
+database, and returns the associated data item.</p>
<p>If there were a another secondary index that had as its key the
<b>cost</b> of the fruit, a similar lookup could be done on stores
-where inexpensive fruit could be purchased:
-<p><blockquote><pre><b>Secondary key:</b> <b>Secondary data:</b>
-expensive blueberry
-expensive peach
-expensive pear
-expensive strawberry
-inexpensive apple
-inexpensive pear
-inexpensive raspberry</pre></blockquote>
-<p>The <a href="../../api_c/db_join.html">DB-&gt;join</a> function provides logical join functionality. While not
+where inexpensive fruit could be purchased:</p>
+<blockquote><table border=1>
+<tr><th>Secondary key:</th><th>Secondary data:</th></tr>
+<tr> <td align=left>expensive</td> <td align=left>blueberry</td> </tr>
+<tr> <td align=left>expensive</td> <td align=left>peach</td> </tr>
+<tr> <td align=left>expensive</td> <td align=left>pear</td> </tr>
+<tr> <td align=left>expensive</td> <td align=left>strawberry</td> </tr>
+<tr> <td align=left>inexpensive</td> <td align=left>apple</td> </tr>
+<tr> <td align=left>inexpensive</td> <td align=left>pear</td> </tr>
+<tr> <td align=left>inexpensive</td> <td align=left>raspberry</td> </tr>
+</table></blockquote>
+<p>The <a href="../../api_c/db_join.html">DB-&gt;join</a> method provides equality join functionality. While not
strictly cursor functionality, in that it is not a method off a cursor
handle, it is more closely related to the cursor operations than to the
-standard DB operations.
+standard <a href="../../api_c/db_class.html">DB</a> operations.</p>
<p>It is also possible to do lookups based on multiple criteria in a single
-operation, e.g., it is possible to look up fruits that are both red and
-expensive in a single operation. If the same fruit appeared as a data
-item in both the color and expense indexes, then that fruit name would
-be used as the key for retrieval from the primary index, and would then
-return the store where expensive, red fruit could be purchased.
+operation. For example, it is possible to look up fruits that are both
+red and expensive in a single operation. If the same fruit appeared as
+a data item in both the color and expense indices, then that fruit name
+would be used as the key for retrieval from the primary index, and would
+then return the store where expensive, red fruit could be purchased.</p>
<h3>Example</h3>
-<p>Consider the following three databases:
+<p>Consider the following three databases:</p>
<p><dl compact>
-<p><dt>personnel<dd><ul type=disc>
+<p><dt>personnel<dd><p><ul type=disc>
<li>key = SSN
<li>data = record containing name, address, phone number, job title
</ul>
-<p><dt>lastname<dd><ul type=disc>
+<p><dt>lastname<dd><p><ul type=disc>
<li>key = lastname
<li>data = SSN
</ul>
-<p><dt>jobs<dd><ul type=disc>
+<p><dt>jobs<dd><p><ul type=disc>
<li>key = job title
<li>data = SSN
</ul>
</dl>
-<p>Consider the following query:
-<p><blockquote><pre>Return the personnel records of all people named smith with the job
+<p>Consider the following query:</p>
+<blockquote><pre>Return the personnel records of all people named smith with the job
title manager.</pre></blockquote>
<p>This query finds are all the records in the primary database (personnel)
for whom the criteria <b>lastname=smith and job title=manager</b> is
-true.
-<p>Assume that all databases have been properly opened and have the handles:
-pers_db, name_db, job_db. We also assume that we have an active
-transaction referenced by the handle txn.
-<p><blockquote><pre>DBC *name_curs, *job_curs, *join_curs;
+true.</p>
+<p>Assume that all databases have been properly opened and have the
+handles: pers_db, name_db, job_db. We also assume that we have an
+active transaction to which the handle txn refers.</p>
+<blockquote><pre>DBC *name_curs, *job_curs, *join_curs;
DBC *carray[3];
DBT key, data;
int ret, tret;
@@ -124,7 +131,7 @@ memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
<p>
if ((ret =
- name_db-&gt;cursor(name_db, txn, &name_curs)) != 0)
+ name_db-&gt;cursor(name_db, txn, &name_curs, 0)) != 0)
goto err;
key.data = "smith";
key.size = sizeof("smith");
@@ -132,7 +139,7 @@ if ((ret =
name_curs-&gt;c_get(name_curs, &key, &data, DB_SET)) != 0)
goto err;
<p>
-if ((ret = job_db-&gt;cursor(job_db, txn, &job_curs)) != 0)
+if ((ret = job_db-&gt;cursor(job_db, txn, &job_curs, 0)) != 0)
goto err;
key.data = "manager";
key.size = sizeof("manager");
@@ -175,10 +182,10 @@ return (ret);
<p>The name cursor is positioned at the beginning of the duplicate list
for <b>smith</b> and the job cursor is placed at the beginning of
the duplicate list for <b>manager</b>. The join cursor is returned
-from the logical join call. This code then loops over the join cursor
-getting the personnel records of each one until there are no more.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/curdup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/count.html"><img src="../../images/next.gif" alt="Next"></a>
+from the join method. This code then loops over the join cursor getting
+the personnel records of each one until there are no more.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/curdup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/count.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/open.html b/db/docs/ref/am/open.html
index 01c45339e..079f7cc50 100644
--- a/db/docs/ref/am/open.html
+++ b/db/docs/ref/am/open.html
@@ -1,22 +1,22 @@
-<!--$Id: open.so,v 10.15 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: open.so,v 10.18 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Opening a database</title>
+<title>Berkeley DB Reference Guide: Database open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/ops.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/opensub.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/ops.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/opensub.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening a database</h1>
-<p>The <a href="../../api_c/db_open.html">DB-&gt;open</a> function is the standard interface for opening a database,
-and takes five arguments:
+<h3 align=center>Database open</h3>
+<p>The <a href="../../api_c/db_open.html">DB-&gt;open</a> method opens a database, and takes five arguments:</p>
<p><dl compact>
<p><dt>file<dd>The name of the file to be opened.
<p><dt>database<dd>An optional database name.
@@ -26,11 +26,11 @@ special value DB_UNKNOWN, which allows you to open an existing file
without knowing its type.
<p><dt>mode<dd>The permissions to give to any created file.
</dl>
-<p>There are a few flags that you can set to customize open:
+<p>There are a few flags that you can set to customize open:</p>
<p><dl compact>
<p><dt><a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a><dd>Create the underlying database and any necessary physical files.
-<p><dt><a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory.
-<p><dt><a href="../../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a><dd>Treat the data base as readonly.
+<p><dt><a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a><dd>Do not map this database into process memory.
+<p><dt><a href="../../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a><dd>Treat the data base as read-only.
<p><dt><a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a><dd>The returned handle is free-threaded, that is, it can be used
simultaneously by multiple threads within the process.
<p><dt><a href="../../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a><dd>Physically truncate the underlying database file, discarding all
@@ -40,8 +40,8 @@ physical file and cannot be used to discard individual databases from
within physical files.
<p><dt><a href="../../api_c/db_set_feedback.html#DB_UPGRADE">DB_UPGRADE</a><dd>Upgrade the database format as necessary.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/ops.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/opensub.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/ops.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/opensub.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/opensub.html b/db/docs/ref/am/opensub.html
index 066ca4b79..bf7aae61d 100644
--- a/db/docs/ref/am/opensub.html
+++ b/db/docs/ref/am/opensub.html
@@ -1,19 +1,20 @@
-<!--$Id: opensub.so,v 10.6 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: opensub.so,v 10.15 2003/04/15 16:47:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Opening multiple databases in a single file</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/get.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening multiple databases in a single file</h1>
+<h3 align=center>Opening multiple databases in a single file</h3>
<p>Applications may create multiple databases within a single physical
file. This is useful when the databases are both numerous and
reasonably small, in order to avoid creating a large number of
@@ -22,43 +23,59 @@ databases in the same file as the primary index database. Multiple
databases are an administrative convenience and using them is unlikely
to effect database performance. To open or create a file that will
include more than a single database, specify a database name when
-calling the <a href="../../api_c/db_open.html">DB-&gt;open</a> method.
+calling the <a href="../../api_c/db_open.html">DB-&gt;open</a> method.</p>
<p>Physical files do not need to be comprised of a single type of database,
-and databases in a file may be of any type (e.g., Btree, Hash or Recno),
-except for Queue databases. Queue databases must be created one per file
-and cannot share a file with any other database type. There is no limit
-on the number of databases that may be created in a single file other than
-the standard Berkeley DB file size and disk space limitations.
+and databases in a file may be of any mixture of types, except for Queue
+databases. Queue databases must be created one per file and cannot
+share a file with any other database type. There is no limit on the
+number of databases that may be created in a single file other than the
+standard Berkeley DB file size and disk space limitations.</p>
<p>It is an error to attempt to open a second database in a file that was
not initially created using a database name, that is, the file must
initially be specified as capable of containing multiple databases for a
-second database to be created in it.
+second database to be created in it.</p>
<p>It is not an error to open a file that contains multiple databases without
specifying a database name, however the database type should be specified
as DB_UNKNOWN and the database must be opened read-only. The handle that
is returned from such a call is a handle on a database whose key values
are the names of the databases stored in the database file and whose data
values are opaque objects. No keys or data values may be modified or
-stored using this database handle.
-<p>Storing multiple databases in a single file is almost identical to
-storing each database in its own separate file. The one crucial
-difference is how locking and the underlying memory pool services must
-to be configured. As an example, consider two databases instantiated
-in two different physical files. If access to each separate database
-is single-threaded, there is no reason to perform any locking of any
-kind, and the two databases may be read and written simultaneously.
-Further, there would be no requirement to create a shared database
-environment in which to open the databases. Because multiple databases
-in a file exist in a single physical file, opening two databases in the
-same file requires that locking be enabled, unless access to the
-databases is known to be single-threaded, that is, only one of the
-databases is ever accessed at a time. (As the locks for the two
-databases can only conflict during page allocation, this additional
-locking is unlikely to effect performance.) Further, the databases must
+stored using this database handle.</p>
+<p>Storing multiple databases in a single file is identical to storing each
+database in a separate file with the exception of some configuration
+information and the likely need for locking and a shared underlying
+memory pool.</p>
+<p>There are four types of configuration information which must be specified
+consistently for all databases in a file, rather than differing on a
+per-database basis. They are: byte order, checksum and encryption
+behavior, and page size. When creating additional databases in a file,
+any of these configuration values specified must be consistent with the
+existing databases in the file or an error will be returned.</p>
+<p>
+An additional difference is how locking and the underlying memory pool
+services must to be configured. As an example, consider two databases
+instantiated in two different physical files. If access to each
+separate database is single-threaded, there is no reason to perform any
+locking of any kind, and the two databases may be read and written
+simultaneously. Further, there would be no requirement to create a
+shared database environment in which to open the databases.</p>
+<p>Because multiple databases in a file exist in a single physical file,
+opening two databases in the same file requires locking be enabled
+(unless access to the databases is known to be single-threaded, that
+is, only one of the databases is ever read or written at a time).
+As the locks for the two databases can only conflict during page
+allocation, this additional locking is unlikely to effect performance.</p>
+<p>Also, because multiple databases in a file exist in a single physical
+file, opening two databases in the same file requires the databases
share an underlying memory pool so that per-physical-file information
-is updated correctly.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
+common between the two databases is updated correctly.</p>
+<p>In summary, programmers writing applications that open multiple databases
+in a single file will almost certainly need to create a shared database
+environment in the application as well. For more information on
+database environments, see <a href="../../ref/env/intro.html">Database
+environment introduction.</a></p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/get.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/ops.html b/db/docs/ref/am/ops.html
index 5daaddd74..dc1b2c431 100644
--- a/db/docs/ref/am/ops.html
+++ b/db/docs/ref/am/ops.html
@@ -1,36 +1,88 @@
-<!--$Id: ops.so,v 10.16 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: ops.so,v 10.22 2002/08/30 20:01:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Access method operations</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Access method operations</h1>
-<p>Once a database handle has been created using <a href="../../api_c/db_create.html">db_create</a>, there
+<h3 align=center>Access method operations</h3>
+<p>Once a database handle has been created using <a href="../../api_c/db_class.html">db_create</a>, there
are several standard access method operations. Each of these operations
-is performed using a method that is referenced from the returned handle.
-The operations are as follows:
-<p><dl compact>
-<p><dt><a href="../../api_c/db_close.html">DB-&gt;close</a><dd>Close the database
-<dt><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a><dd>Open a cursor into the database
-<dt><a href="../../api_c/db_del.html">DB-&gt;del</a><dd>Delete a record
-<dt><a href="../../api_c/db_get.html">DB-&gt;get</a><dd>Retrieve a record
-<dt><a href="../../api_c/db_open.html">DB-&gt;open</a><dd>Open a database
-<dt><a href="../../api_c/db_put.html">DB-&gt;put</a><dd>Store a record
-<dt><a href="../../api_c/db_stat.html">DB-&gt;stat</a><dd>Return statistics about the database
-<dt><a href="../../api_c/db_sync.html">DB-&gt;sync</a><dd>Flush the underlying cache
-<dt><a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a><dd>Upgrade a database
-</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/open.html"><img src="../../images/next.gif" alt="Next"></a>
+is performed using a method referred to by the returned handle.
+Generally, the database will be opened using <a href="../../api_c/db_open.html">DB-&gt;open</a>. If the
+database is from an old release of Berkeley DB, it may need to be upgraded to
+the current release before it is opened using <a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a>.</p>
+<p>Once a database has been opened, records may be retrieved (<a href="../../api_c/db_get.html">DB-&gt;get</a>),
+stored (<a href="../../api_c/db_put.html">DB-&gt;put</a>), and deleted (<a href="../../api_c/db_del.html">DB-&gt;del</a>).</p>
+<p>Additional operations supported by the database handle include
+statistics (<a href="../../api_c/db_stat.html">DB-&gt;stat</a>), truncation (<a href="../../api_c/db_truncate.html">DB-&gt;truncate</a>),
+version upgrade (<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a>), verification and salvage
+(<a href="../../api_c/db_verify.html">DB-&gt;verify</a>), flushing to a backing file (<a href="../../api_c/db_sync.html">DB-&gt;sync</a>),
+and association of secondary indices (<a href="../../api_c/db_associate.html">DB-&gt;associate</a>). Database
+handles are eventually closed using <a href="../../api_c/db_close.html">DB-&gt;close</a>.</p>
+<!--$Id: m4.methods,v 1.3 2003/05/09 20:14:02 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Databases and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/db_class.html">db_create</a></td><td>Create a database handle</td></tr>
+<tr><td><a href="../../api_c/db_associate.html">DB-&gt;associate</a></td><td>Associate a secondary index</td></tr>
+<tr><td><a href="../../api_c/db_close.html">DB-&gt;close</a></td><td>Close a database</td></tr>
+<tr><td><a href="../../api_c/db_cursor.html">DB-&gt;cursor</a></td><td>Create a cursor handle</td></tr>
+<tr><td><a href="../../api_c/db_del.html">DB-&gt;del</a></td><td>Delete items from a database</td></tr>
+<tr><td><a href="../../api_c/db_err.html">DB-&gt;err</a></td><td>Error message with error string</td></tr>
+<tr><td><a href="../../api_c/db_err.html">DB-&gt;errx</a></td><td>Error message</td></tr>
+<tr><td><a href="../../api_c/db_fd.html">DB-&gt;fd</a></td><td>Return a file descriptor from a database</td></tr>
+<tr><td><a href="../../api_c/db_get.html">DB-&gt;get</a></td><td>Get items from a database</td></tr>
+<tr><td><a href="../../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a></td><td>Return if the underlying database is in host order</td></tr>
+<tr><td><a href="../../api_c/db_getenv.html">DB-&gt;get_env</a></td><td>Return a handle for the underlying database environment</td></tr>
+<tr><td><a href="../../api_c/db_get_type.html">DB-&gt;get_type</a></td><td>Return the database type</td></tr>
+<tr><td><a href="../../api_c/db_join.html">DB-&gt;join</a></td><td>Perform a database join on cursors</td></tr>
+<tr><td><a href="../../api_c/db_key_range.html">DB-&gt;key_range</a></td><td>Return estimate of key location</td></tr>
+<tr><td><a href="../../api_c/db_open.html">DB-&gt;open</a></td><td>Open a database</td></tr>
+<tr><td><a href="../../api_c/db_get.html">DB-&gt;pget</a></td><td>Get items from a database</td></tr>
+<tr><td><a href="../../api_c/db_put.html">DB-&gt;put</a></td><td>Store items into a database</td></tr>
+<tr><td><a href="../../api_c/db_remove.html">DB-&gt;remove</a></td><td>Remove a database</td></tr>
+<tr><td><a href="../../api_c/db_rename.html">DB-&gt;rename</a></td><td>Rename a database</td></tr>
+<tr><td><a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a></td><td>Set local space allocation functions</td></tr>
+<tr><td><a href="../../api_c/db_set_append_recno.html">DB-&gt;set_append_recno</a></td><td>Set record append callback</td></tr>
+<tr><td><a href="../../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a></td><td>Set a Btree comparison function</td></tr>
+<tr><td><a href="../../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a></td><td>Set the minimum number of keys per Btree page</td></tr>
+<tr><td><a href="../../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a></td><td>Set a Btree prefix comparison function</td></tr>
+<tr><td><a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a></td><td>Set the database cache size</td></tr>
+<tr><td><a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a></td><td>Set a duplicate comparison function</td></tr>
+<tr><td><a href="../../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a></td><td>Set the database cryptographic key</td></tr>
+<tr><td><a href="../../api_c/db_set_errcall.html">DB-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
+<tr><td><a href="../../api_c/db_set_errfile.html">DB-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
+<tr><td><a href="../../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<tr><td><a href="../../api_c/db_set_feedback.html">DB-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
+<tr><td><a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a></td><td>General database configuration</td></tr>
+<tr><td><a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a></td><td>Set the Hash table density</td></tr>
+<tr><td><a href="../../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a></td><td>Set a hashing function</td></tr>
+<tr><td><a href="../../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a></td><td>Set the Hash table size</td></tr>
+<tr><td><a href="../../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td><td>Set the database byte order</td></tr>
+<tr><td><a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a></td><td>Set the underlying database page size</td></tr>
+<tr><td><a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<tr><td><a href="../../api_c/db_set_q_extentsize.html">DB-&gt;set_q_extentsize</a></td><td>Set Queue database extent size</td></tr>
+<tr><td><a href="../../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a></td><td>Set the variable-length record delimiter</td></tr>
+<tr><td><a href="../../api_c/db_set_re_len.html">DB-&gt;set_re_len</a></td><td>Set the fixed-length record length</td></tr>
+<tr><td><a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a></td><td>Set the fixed-length record pad byte</td></tr>
+<tr><td><a href="../../api_c/db_set_re_source.html">DB-&gt;set_re_source</a></td><td>Set the backing Recno text file</td></tr>
+<tr><td><a href="../../api_c/db_stat.html">DB-&gt;stat</a></td><td>Return database statistics</td></tr>
+<tr><td><a href="../../api_c/db_sync.html">DB-&gt;sync</a></td><td>Flush a database to stable storage</td></tr>
+<tr><td><a href="../../api_c/db_truncate.html">DB-&gt;truncate</a></td><td>Empty a database</td></tr>
+<tr><td><a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a></td><td>Upgrade a database</td></tr>
+<tr><td><a href="../../api_c/db_verify.html">DB-&gt;verify</a></td><td>Verify/salvage a database</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/put.html b/db/docs/ref/am/put.html
index 993dcbeb0..d9156bd98 100644
--- a/db/docs/ref/am/put.html
+++ b/db/docs/ref/am/put.html
@@ -1,24 +1,25 @@
-<!--$Id: put.so,v 10.14 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: put.so,v 10.15 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Storing records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/delete.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/delete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Storing records</h1>
-<p>The <a href="../../api_c/db_put.html">DB-&gt;put</a> function is the standard interface for storing records into
-the database. In general, <a href="../../api_c/db_put.html">DB-&gt;put</a> takes a key and stores the
-associated data into the database.
-<p>There are a few flags that you can set to customize storage:
+<h3 align=center>Storing records</h3>
+<p>The <a href="../../api_c/db_put.html">DB-&gt;put</a> method stores records into the database. In general,
+<a href="../../api_c/db_put.html">DB-&gt;put</a> takes a key and stores the associated data into the
+database.</p>
+<p>There are a few flags that you can set to customize storage:</p>
<p><dl compact>
<p><dt><a href="../../api_c/db_put.html#DB_APPEND">DB_APPEND</a><dd>Simply append the data to the end of the database, treating the database
much like a simple log. This flag is only valid for the Queue and Recno
@@ -26,11 +27,11 @@ access methods.
<p><dt><a href="../../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a><dd>Only store the data item if the key does not already appear in the database.
</dl>
<p>If the database has been configured to support duplicate records, the
-<a href="../../api_c/db_put.html">DB-&gt;put</a> function will add the new data value at the end of the duplicate
+<a href="../../api_c/db_put.html">DB-&gt;put</a> method will add the new data value at the end of the duplicate
set. If the database supports sorted duplicates, the new data value is
-inserted at the correct sorted location.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/delete.html"><img src="../../images/next.gif" alt="Next"></a>
+inserted at the correct sorted location.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/delete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/second.html b/db/docs/ref/am/second.html
index aa024c48e..850144b76 100644
--- a/db/docs/ref/am/second.html
+++ b/db/docs/ref/am/second.html
@@ -1,42 +1,43 @@
-<!--Id: second.so,v 10.5 2001/05/07 19:28:36 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: second.so,v 10.11 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Secondary indices</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Secondary indices</h1>
+<h3 align=center>Secondary indices</h3>
<p>A secondary index, put simply, is a way to efficiently access records
in a database (the primary) by means of some piece of information other
than the usual (primary) key. In Berkeley DB, this index is simply another
database whose keys are these pieces of information (the secondary
keys), and whose data are the primary keys. Secondary indices can be
-(and often are) created manually by the application; there is no
-disadvantage, other than complexity, to doing so. However, when the
-secondary key can be mechanically derived from the primary key and datum
-that it points to, as is frequently the case, Berkeley DB can automatically
-and transparently manage secondary indices.
+created manually by the application; there is no disadvantage, other
+than complexity, to doing so. However, when the secondary key can be
+mechanically derived from the primary key and datum that it points to,
+as is frequently the case, Berkeley DB can automatically and transparently
+manage secondary indices.</p>
<p>As an example of how secondary indices might be used, consider a
database containing a list of students at a college, each of whom has
a unique student ID number. A typical database would use the student
ID number as the key; however, one might also reasonably want to be
able to look up students by last name. To do this, one would construct
-a secondary index in which the secondary key was this last name.
-<p>In SQL, this would be done by executing something like the following:
-<p><blockquote><pre>CREATE TABLE students(student_id CHAR(4) NOT NULL,
+a secondary index in which the secondary key was this last name.</p>
+<p>In SQL, this would be done by executing something like the following:</p>
+<blockquote><pre>CREATE TABLE students(student_id CHAR(4) NOT NULL,
lastname CHAR(15), firstname CHAR(15), PRIMARY KEY(student_id));
CREATE INDEX lname ON students(lastname);</pre></blockquote>
-<p>In Berkeley DB, this would work as follows:
-<pre><p><blockquote>struct student_record {
+<p>In Berkeley DB, this would work as follows:</p>
+<pre><blockquote>struct student_record {
char student_id[4];
char last_name[15];
char first_name[15];
@@ -45,36 +46,36 @@ CREATE INDEX lname ON students(lastname);</pre></blockquote>
void
second()
{
-<p><blockquote>DB *dbp, *sdbp;
-int ret;
-<p>
-/* Open/create primary */
-if ((ret = db_create(&dbp, dbenv, 0)) != 0)
- handle_error();
-if ((ret = dbp-&gt;open(dbp,
- "students.db", NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
- handle_error();
-<p>
-/*
- * Open/create secondary. Note that it supports duplicate data
- * items, since last names might not be unique.
- */
-if ((ret = db_create(&sdbp, dbenv, 0)) != 0)
- handle_error();
-if ((ret = dbp-&gt;set_flags(dbp, DB_DUP | DB_DUPSORT)) != 0)
- handle_error();
-if ((ret = dbp-&gt;open(dbp,
- "lastname.db", NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
- handle_error();
-<p>
-/* Associate the secondary with the primary. */
-if ((ret = dbp-&gt;associate(dbp, sdbp, getname, 0)) != 0)
- handle_error();</blockquote>
+ DB *dbp, *sdbp;
+ int ret;
+ <p>
+ /* Open/create primary */
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ handle_error(ret);
+ if ((ret = dbp-&gt;open(dbp, NULL,
+ "students.db", NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
+ handle_error(ret);
+ <p>
+ /*
+ * Open/create secondary. Note that it supports duplicate data
+ * items, since last names might not be unique.
+ */
+ if ((ret = db_create(&sdbp, dbenv, 0)) != 0)
+ handle_error(ret);
+ if ((ret = sdbp-&gt;set_flags(sdbp, DB_DUP | DB_DUPSORT)) != 0)
+ handle_error(ret);
+ if ((ret = sdbp-&gt;open(sdbp, NULL,
+ "lastname.db", NULL, DB_BTREE, DB_CREATE, 0600)) != 0)
+ handle_error(ret);
+ <p>
+ /* Associate the secondary with the primary. */
+ if ((ret = dbp-&gt;associate(dbp, NULL, sdbp, getname, 0)) != 0)
+ handle_error(ret);
}
<p>
-/*
- * getname -- extracts a secondary key (the last name) from a primary
- * key/data pair
+/*
+ * getname -- extracts a secondary key (the last name) from a primary
+ * key/data pair
*/
int
getname(dbp, pkey, pdata, skey)
@@ -83,7 +84,7 @@ getname(dbp, pkey, pdata, skey)
DBT *skey;
{
/*
- * Since the secondary key is a simple structure member of the
+ * Since the secondary key is a simple structure member of the
* record, we don't have to do anything fancy to return it. If
* we have composite keys that need to be constructed from the
* record, rather than simply pointing into it, then the user's
@@ -99,11 +100,11 @@ getname(dbp, pkey, pdata, skey)
<p>From the application's perspective, putting things into the database
works exactly as it does without a secondary index; one can simply
insert records into the primary database. In SQL one would do the
-following:
-<p><blockquote><pre>INSERT INTO student
+following:</p>
+<blockquote><pre>INSERT INTO student
VALUES ("WC42", "Churchill ", "Winston ");</pre></blockquote>
-<p>and in Berkeley DB, one does:
-<p><blockquote><pre>struct student_record s;
+<p>and in Berkeley DB, one does:</p>
+<blockquote><pre>struct student_record s;
DBT data, key;
<p>
memset(&key, 0, sizeof(DBT));
@@ -117,42 +118,42 @@ memcpy(&s.first_name, "Winston ", sizeof(s.first_name));
data.data = &s;
data.size = sizeof(s);
if ((ret = dbp-&gt;put(dbp, txn, &key, &data, 0)) != 0)
- handle_error();</pre></blockquote>
+ handle_error(ret);</pre></blockquote>
<p>Internally, a record with secondary key "Churchill" is inserted into
the secondary database (in addition to the insertion of "WC42" into the
-primary, of course).
-<p>Deletes are similar. The SQL clause:
-<p><blockquote><pre>DELETE FROM student WHERE (student_id = "WC42");</pre></blockquote>
-<p>looks like:
-<p><blockquote><pre>DBT key;
+primary, of course).</p>
+<p>Deletes are similar. The SQL clause:</p>
+<blockquote><pre>DELETE FROM student WHERE (student_id = "WC42");</pre></blockquote>
+<p>looks like:</p>
+<blockquote><pre>DBT key;
<p>
memset(&key, 0, sizeof(DBT));
key.data = "WC42";
key.size = 4;
if ((ret = dbp-&gt;del(dbp, txn, &key, 0)) != 0)
- handle_error();</pre></blockquote>
+ handle_error(ret);</pre></blockquote>
<p>Deletes can also be performed on the secondary index directly; a delete
done this way will delete the "real" record in the primary as well. If
the secondary supports duplicates and there are duplicate occurrences of
the secondary key, then all records with that secondary key are removed
from both the secondary index and the primary database. In
-SQL:
-<p><blockquote><pre>DELETE FROM lname WHERE (lastname = "Churchill ");</pre></blockquote>
-<p>In Berkeley DB:
-<p><blockquote><pre>DBT skey;
+SQL:</p>
+<blockquote><pre>DELETE FROM lname WHERE (lastname = "Churchill ");</pre></blockquote>
+<p>In Berkeley DB:</p>
+<blockquote><pre>DBT skey;
<p>
memset(&skey, 0, sizeof(DBT));
skey.data = "Churchill ";
skey.size = 15;
if ((ret = sdbp-&gt;del(sdbp, txn, &skey, 0)) != 0)
- handle_error();</pre></blockquote>
+ handle_error(ret);</pre></blockquote>
<p>Gets on a secondary automatically return the primary datum. If
<a href="../../api_c/db_get.html">DB-&gt;pget</a> or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_pget</a> is used in lieu of <a href="../../api_c/db_get.html">DB-&gt;get</a>
or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>, the primary key is returned as well. Thus, the
-equivalent of:
-<p><blockquote><pre>SELECT * from lname WHERE (lastname = "Churchill ");</pre></blockquote>
-<p>would be:
-<p><blockquote><pre>DBT data, pkey, skey;
+equivalent of:</p>
+<blockquote><pre>SELECT * from lname WHERE (lastname = "Churchill ");</pre></blockquote>
+<p>would be:</p>
+<blockquote><pre>DBT data, pkey, skey;
<p>
memset(&skey, 0, sizeof(DBT));
memset(&pkey, 0, sizeof(DBT));
@@ -160,41 +161,40 @@ memset(&data, 0, sizeof(DBT));
skey.data = "Churchill ";
skey.size = 15;
if ((ret = sdbp-&gt;pget(sdbp, txn, &skey, &pkey, &data, 0)) != 0)
- handle_error();
+ handle_error(ret);
/*
* Now pkey contains "WC42" and data contains Winston's record.
*/</pre></blockquote>
<p>To create a secondary index to a Berkeley DB database, open the database that
is to become a secondary index normally, then pass it as the "secondary"
-argument to the <a href="../../api_c/db_associate.html">DB-&gt;associate</a> interface for some primary database.
-<p>From the time a <a href="../../api_c/db_associate.html">DB-&gt;associate</a> call is made until the secondary
-database handle is closed, secondary indices become, as their name
-implies, alternate interfaces to the primary database. All updates to
-the primary will be automatically reflected in each secondary index that
-has been associated with it. All get operations using the
-<a href="../../api_c/db_get.html">DB-&gt;get</a> or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> interfaces on the secondary index
-return the primary datum associated with the specified (or otherwise
-current, in the case of cursor operations) secondary key. The
-<a href="../../api_c/db_get.html">DB-&gt;pget</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_pget</a> interfaces also become usable;
-these behave just like <a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>, but return
-the primary key in addition to the primary datum, for those applications
-that need it as well.
+argument to the <a href="../../api_c/db_associate.html">DB-&gt;associate</a> method for some primary database.</p>
+<p>After a <a href="../../api_c/db_associate.html">DB-&gt;associate</a> call is made, the secondary indices become
+alternate interfaces to the primary database. All updates to the
+primary will be automatically reflected in each secondary index that has
+been associated with it. All get operations using the <a href="../../api_c/db_get.html">DB-&gt;get</a>
+or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods on the secondary index return the primary datum
+associated with the specified (or otherwise current, in the case of
+cursor operations) secondary key. The <a href="../../api_c/db_get.html">DB-&gt;pget</a> and
+<a href="../../api_c/dbc_get.html">DBcursor-&gt;c_pget</a> methods also become usable; these behave just like
+<a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>, but return the primary key in
+addition to the primary datum, for those applications that need it as
+well.</p>
<p>Cursor get operations on a secondary index perform as expected; although
the data returned will by default be those of the primary database, a
position in the secondary index is maintained normally, and records will
appear in the order determined by the secondary key and the comparison
-function or other structure of the secondary database.
+function or other structure of the secondary database.</p>
<p>Delete operations on a secondary index delete the item from the primary
-database and all relevant secondaries, including the current one.
+database and all relevant secondaries, including the current one.</p>
<p>Put operations of any kind are forbidden on secondary indices, as there
is no way to specify a primary key for a newly put item. Instead, the
application should use the <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> or <a href="../../api_c/db_put.html">DB-&gt;put</a> methods
-on the primary database.
+on the primary database.</p>
<p>Any number of secondary indices may be associated with a given primary
database, up to limitations on available memory and the number of open
-file descriptors.
+file descriptors.</p>
<p>Note that although Berkeley DB guarantees that updates made using any
-DB handle with an associated secondary will be reflected in the
+<a href="../../api_c/db_class.html">DB</a> handle with an associated secondary will be reflected in the
that secondary, associating each primary handle with all the appropriate
secondaries is the responsibility of the application and is not enforced
by Berkeley DB. It is generally unsafe, but not forbidden by Berkeley DB, to modify
@@ -202,22 +202,17 @@ a database that has secondary indices without having those indices open
and associated. Similarly, it is generally unsafe, but not forbidden,
to modify a secondary index directly. Applications that violate these
rules face the possibility of outdated or incorrect results if the
-secondary indices are later used.
-<p>If for any reason a secondary index gets outdated, the correct course
-of action is to discard it using the <a href="../../api_c/db_remove.html">DB-&gt;remove</a> method
-and create a new one using the
-<a href="../../api_c/db_associate.html">DB-&gt;associate</a> method.
-<p>Note that there is also no way to disassociate a secondary index from
-a primary database. If a secondary index is no longer needed, all of
-its handles should be closed using the <a href="../../api_c/db_close.html">DB-&gt;close</a> method., and
-then the database should be removed (if desired) using a new database
-handle and the <a href="../../api_c/db_remove.html">DB-&gt;remove</a> method.
-<p>Closing a primary database handle automatically closes all secondary
-database handles associated with it; continuing to use a secondary
-database handle after the primary database has been closed may result
-in application crashes or other unexpected behavior.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+secondary indices are later used.</p>
+<p>If a secondary index becomes outdated for any reason, it should be
+discarded using the <a href="../../api_c/db_remove.html">DB-&gt;remove</a> method and a new one created
+using the <a href="../../api_c/db_associate.html">DB-&gt;associate</a> method. If a secondary index is no
+longer needed, all of its handles should be closed using the
+<a href="../../api_c/db_close.html">DB-&gt;close</a> method, and then the database should be removed using
+a new database handle and the <a href="../../api_c/db_remove.html">DB-&gt;remove</a> method.</p>
+<p>Closing a primary database handle automatically dis-associates all
+secondary database handles associated with it.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/stat.html b/db/docs/ref/am/stat.html
index 3042ccfee..2a655278a 100644
--- a/db/docs/ref/am/stat.html
+++ b/db/docs/ref/am/stat.html
@@ -1,36 +1,31 @@
-<!--$Id: stat.so,v 10.17 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: stat.so,v 10.21 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Database statistics</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/delete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/truncate.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database statistics</h1>
-<p>The <a href="../../api_c/db_stat.html">DB-&gt;stat</a> function is the standard interface for obtaining database
-statistics. Generally, <a href="../../api_c/db_stat.html">DB-&gt;stat</a> returns a set of statistics
-about the underlying database, e.g., the number of key/data pairs in
-the database, how the database was originally configured, and so on.
-<p>There are two flags that you can set to customize the returned statistics:
+<h3 align=center>Database statistics</h3>
+<p>The <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method returns a set of statistics about the underlying
+database, for example, the number of key/data pairs in the database, how
+the database was originally configured, and so on.</p>
+<p>There is one flag you can set to customize the returned statistics:</p>
<p><dl compact>
-<p><dt><a href="../../api_c/db_stat.html#DB_CACHED_COUNTS">DB_CACHED_COUNTS</a><dd>Request an approximate key and key/data pair count. As obtaining an
-exact count can be very performance intensive for large databases,
-it is possible to request a previously cached count. Obviously, the
-cached count is only an approximate count, and may be out-of-date.
-<p><dt><a href="../../api_c/db_stat.html#DB_RECORDCOUNT">DB_RECORDCOUNT</a><dd>If the database is a Queue or Recno database, or a Btree database that
-was configured so that it is possible to search it by logical record
-number, return only a count of the records in the database.
+<p><dt><a href="../../api_c/db_stat.html#DB_FAST_STAT">DB_FAST_STAT</a><dd>Return only information that can be acquired without traversing the
+entire database.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/delete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/truncate.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/sync.html b/db/docs/ref/am/sync.html
index 3d1d61e62..b36c7f2d3 100644
--- a/db/docs/ref/am/sync.html
+++ b/db/docs/ref/am/sync.html
@@ -1,38 +1,39 @@
-<!--$Id: sync.so,v 10.15 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: sync.so,v 10.18 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Flushing the database cache</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/delete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/verify.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Flushing the database cache</h1>
-<p>The <a href="../../api_c/db_sync.html">DB-&gt;sync</a> function is the standard interface for flushing all modified
-records from the database cache to disk.
+<h3 align=center>Flushing the database cache</h3>
+<p>The <a href="../../api_c/db_sync.html">DB-&gt;sync</a> method flushes all modified records from the database
+cache to disk.</p>
<p><b>It is important to understand that flushing cached information
to disk only minimizes the window of opportunity for corrupted data, it
-does not eliminate the possibility.</b>
+does not eliminate the possibility.</b></p>
<p>While unlikely, it is possible for database corruption to happen if a
system or application crash occurs while writing data to the database. To
-ensure that database corruption never occurs, applications must either:
-<ul type=disc>
+ensure that database corruption never occurs, applications must either:</p>
+<p><ul type=disc>
<li>Use transactions and logging with automatic recovery.
<li>Use logging and application-specific recovery.
<li>Edit a copy of the database, and, once all applications
using the database have successfully called <a href="../../api_c/db_close.html">DB-&gt;close</a>, use
-system operations (e.g., the POSIX rename system call) to atomically
-replace the original database with the updated copy.
+system operations (for example, the POSIX rename system call) to
+atomically replace the original database with the updated copy.
</ul>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/delete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/verify.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/truncate.html b/db/docs/ref/am/truncate.html
index 043123910..fe4eecd77 100644
--- a/db/docs/ref/am/truncate.html
+++ b/db/docs/ref/am/truncate.html
@@ -1,24 +1,24 @@
-<!--Id: truncate.so,v 10.4 2001/03/10 19:05:22 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: truncate.so,v 10.5 2003/10/18 19:15:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Database truncation</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database truncation</h1>
-<p>The <a href="../../api_c/db_truncate.html">DB-&gt;truncate</a> function is the standard interface for emptying a
-database of all records.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Database truncation</h3>
+<p>The <a href="../../api_c/db_truncate.html">DB-&gt;truncate</a> method empties a database of all records.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/upgrade.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/upgrade.html b/db/docs/ref/am/upgrade.html
index 21fa87a1e..37da05527 100644
--- a/db/docs/ref/am/upgrade.html
+++ b/db/docs/ref/am/upgrade.html
@@ -1,20 +1,21 @@
-<!--$Id: upgrade.so,v 10.14 2000/12/21 18:37:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: upgrade.so,v 10.17 2001/03/10 19:05:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Upgrading databases</title>
+<title>Berkeley DB Reference Guide: Database upgrade</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Method Operations</dl></h3></td>
-<td width="1%"><a href="../../ref/am/opensub.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/get.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
+<td align=right><a href="../am/truncate.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/verify.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Upgrading databases</h1>
+<h3 align=center>Database upgrade</h3>
<p>When upgrading to a new release of Berkeley DB, it may be necessary to upgrade
the on-disk format of already-created database files. <b>Berkeley DB
database upgrades are done in place, and so are potentially
@@ -27,10 +28,10 @@ should be carefully followed. If you are not performing catastrophic
archival as part of your application upgrade process, you should at
least copy your database to archival media, verify that your archival
media is error-free and readable, and that copies of your backups are
-stored off-site!
+stored offsite!</p>
<p>The actual database upgrade is done using the <a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a>
method, or by dumping the database using the old version of the Berkeley DB
-software and reloading it using the current version.
+software and reloading it using the current version.</p>
<p>After an upgrade, Berkeley DB applications must be recompiled to use the new
Berkeley DB library before they can access an upgraded database.
<b>There is no guarantee that applications compiled against
@@ -42,9 +43,9 @@ using a current Berkeley DB software release and the <a href="../../api_c/db_upg
method, and there is no need to step-wise upgrade the database using
intermediate releases of Berkeley DB. Sites should consider archiving
appropriate copies of their application or application sources if they
-may need to access archived databases without first upgrading them.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/opensub.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/get.html"><img src="../../images/next.gif" alt="Next"></a>
+may need to access archived databases without first upgrading them.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/truncate.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/verify.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am/verify.html b/db/docs/ref/am/verify.html
index 5c975dd8c..ab467affb 100644
--- a/db/docs/ref/am/verify.html
+++ b/db/docs/ref/am/verify.html
@@ -1,26 +1,27 @@
-<!--$Id: verify.so,v 10.3 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: verify.so,v 10.10 2003/10/18 19:15:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Database verification and salvage</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a> <a name="4"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a><a name="4"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/upgrade.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/sync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database verification and salvage</h1>
-<p>The <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method is the standard interface for verifying
-that a file, and any databases it may contain, are uncorrupted. In
-addition, the method may optionally be called with a file stream
-argument to which all key/data pairs found in the database are output.
-There are two modes for finding key/data pairs to be output:
-<p><ol>
+<h3 align=center>Database verification and salvage</h3>
+<p>The <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method verifies that a file, and any databases it may
+contain, are uncorrupted. In addition, the method may optionally be
+called with a file stream argument to which all key/data pairs found in
+the database are output. There are two modes for finding key/data pairs
+to be output:</p>
+<ol>
<p><li>If the <a href="../../api_c/db_verify.html#DB_SALVAGE">DB_SALVAGE</a> flag is specified, the key/data pairs in the
database are output. When run in this mode, the database is assumed to
be largely uncorrupted. For example, the <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method will
@@ -32,19 +33,19 @@ page structures are generally trusted in this mode.
specified, all possible key/data pairs are output. When run in this mode,
the database is assumed to be seriously corrupted. For example, key/data
pairs that have been deleted will re-appear in the output. In addition,
-because pages may have been subsequently re-used and modified during
+because pages may have been subsequently reused and modified during
normal database operations after the key/data pairs were deleted, it is
not uncommon for apparently corrupted key/data pairs to be output in this
mode, even when there is no corruption in the underlying database. The
output will almost always have to be edited by hand or other means before
-the data is ready for re-load into another database. We recommend that
+the data is ready for reload into another database. We recommend that
<a href="../../api_c/db_verify.html#DB_SALVAGE">DB_SALVAGE</a> be tried first, and <a href="../../api_c/db_verify.html#DB_AGGRESSIVE">DB_AGGRESSIVE</a> only tried
if the output from that first attempt is obviously missing data items or
the data is sufficiently valuable that human review of the output is
preferable to any kind of data loss.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/upgrade.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/sync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/bt_compare.html b/db/docs/ref/am_conf/bt_compare.html
index bf824ca35..0f9453f8b 100644
--- a/db/docs/ref/am_conf/bt_compare.html
+++ b/db/docs/ref/am_conf/bt_compare.html
@@ -1,33 +1,34 @@
-<!--$Id: bt_compare.so,v 10.20 2000/09/10 13:42:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: bt_compare.so,v 10.24 2002/06/24 14:50:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Btree comparison</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/malloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_prefix.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/malloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_prefix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Btree comparison</h1>
+<h3 align=center>Btree comparison</h3>
<p>The Btree data structure is a sorted, balanced tree structure storing
associated key/data pairs. By default, the sort order is lexicographical,
with shorter keys collating before longer keys. The user can specify the
-sort order for the Btree by using the <a href="../../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a> function.
+sort order for the Btree by using the <a href="../../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a> method.</p>
<p>Sort routines are passed pointers to keys as arguments. The keys are
-represented as <a href="../../api_c/dbt.html">DBT</a> structures. The routine must return an integer
+represented as <a href="../../api_c/dbt_class.html">DBT</a> structures. The routine must return an integer
less than, equal to, or greater than zero if the first argument is
considered to be respectively less than, equal to, or greater than the
second argument. The only fields that the routines may examine in the
-<a href="../../api_c/dbt.html">DBT</a> structures are <b>data</b> and <b>size</b> fields.
+<a href="../../api_c/dbt_class.html">DBT</a> structures are <b>data</b> and <b>size</b> fields.</p>
<p>An example routine that might be used to sort integer keys in the database
-is as follows:
-<p><blockquote><pre>int
+is as follows:</p>
+<blockquote><pre>int
compare_int(dbp, a, b)
DB *dbp;
const DBT *a, *b;
@@ -43,21 +44,21 @@ compare_int(dbp, a, b)
memcpy(&ai, a-&gt;data, sizeof(int));
memcpy(&bi, b-&gt;data, sizeof(int));
return (ai - bi);
-}
-</pre></blockquote>
+}</pre></blockquote>
<p>Note that the data must first be copied into memory that is appropriately
aligned, as Berkeley DB does not guarantee any kind of alignment of the
underlying data, including for comparison routines. When writing
comparison routines, remember that databases created on machines of
different architectures may have different integer byte orders, for which
-your code may need to compensate.
+your code may need to compensate.</p>
<p>An example routine that might be used to sort keys based on the first
-five bytes of the key (ignoring any subsequent bytes) is as follows:
-<p><blockquote><pre>int
+five bytes of the key (ignoring any subsequent bytes) is as follows:</p>
+<blockquote><pre>int
compare_dbt(dbp, a, b)
DB *dbp;
const DBT *a, *b;
{
+ int len;
u_char *p1, *p2;
<p>
/*
@@ -77,9 +78,17 @@ that the key relations must be transitive, that is, if key A is less
than key B, and key B is less than key C, then the comparison routine
must also return that key A is less than key C. In addition, comparisons
will only be able to return 0 when comparing full length keys; partial
-key comparisons must always return a result less than or greater than 0.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/malloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_prefix.html"><img src="../../images/next.gif" alt="Next"></a>
+key comparisons must always return a result less than or greater than 0.</p>
+<p>It is reasonable for a comparison function to not examine an entire key
+in some applications, which implies that partial keys may be specified
+to the Berkeley DB interfaces. When partial keys are specified to Berkeley DB,
+interfaces which retrieve data items based on a user-specified key (for
+example, <a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> with the <a href="../../api_c/dbc_get.html#DB_SET">DB_SET</a>
+flag), will not modify the user-specified key by returning the actual
+key stored in the database. The actual key can be retrieved by calling
+the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method with the <a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a> flag.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/malloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_prefix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/bt_minkey.html b/db/docs/ref/am_conf/bt_minkey.html
index f80ecf1df..1ad0d403f 100644
--- a/db/docs/ref/am_conf/bt_minkey.html
+++ b/db/docs/ref/am_conf/bt_minkey.html
@@ -1,53 +1,54 @@
<!--$Id: bt_minkey.so,v 10.14 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Minimum keys per page</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/bt_prefix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_recnum.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/bt_prefix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_recnum.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Minimum keys per page</h1>
+<h3 align=center>Minimum keys per page</h3>
<p>The number of keys stored on each page affects the size of a Btree and
how it is maintained. Therefore, it also affects the retrieval and search
performance of the tree. For each Btree, Berkeley DB computes a maximum key
and data size. This size is a function of the page size and the fact that
at least two key/data pairs must fit on any Btree page. Whenever key or
data items exceed the calculated size, they are stored on overflow pages
-instead of in the standard Btree leaf pages.
-<p>Applications may use the <a href="../../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a> function to change the minimum
+instead of in the standard Btree leaf pages.</p>
+<p>Applications may use the <a href="../../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a> method to change the minimum
number of keys that must fit on a Btree page from two to another value.
Altering this value in turn alters the on-page maximum size, and can be
used to force key and data items which would normally be stored in the
-Btree leaf pages onto overflow pages.
+Btree leaf pages onto overflow pages.</p>
<p>Some data sets can benefit from this tuning. For example, consider an
application using large page sizes, with a data set almost entirely
consisting of small key and data items, but with a few large items. By
setting the minimum number of keys that must fit on a page, the
application can force the outsized items to be stored on overflow pages.
That in turn can potentially keep the tree more compact, that is, with
-fewer internal levels to traverse during searches.
+fewer internal levels to traverse during searches.</p>
<p>The following calculation is similar to the one performed by the Btree
implementation. (The <b>minimum_keys</b> value is multiplied by 2
-because each key/data pair requires 2 slots on a Btree page.)
-<p><blockquote><pre>maximum_size = page_size / (minimum_keys * 2)</pre></blockquote>
+because each key/data pair requires 2 slots on a Btree page.)</p>
+<blockquote><pre>maximum_size = page_size / (minimum_keys * 2)</pre></blockquote>
<p>Using this calculation, if the page size is 8KB and the default
<b>minimum_keys</b> value of 2 is used, then any key or data items
larger than 2KB will be forced to an overflow page. If an application
were to specify a <b>minimum_key</b> value of 100, then any key or data
-items larger than roughly 40 bytes would be forced to overflow pages.
+items larger than roughly 40 bytes would be forced to overflow pages.</p>
<p>It is important to remember that accesses to overflow pages do not perform
as well as accesses to the standard Btree leaf pages, and so setting the
value incorrectly can result in overusing overflow pages and decreasing
-the application's overall performance.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/bt_prefix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_recnum.html"><img src="../../images/next.gif" alt="Next"></a>
+the application's overall performance.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/bt_prefix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_recnum.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/bt_prefix.html b/db/docs/ref/am_conf/bt_prefix.html
index 621de75fa..7d5ec1f74 100644
--- a/db/docs/ref/am_conf/bt_prefix.html
+++ b/db/docs/ref/am_conf/bt_prefix.html
@@ -1,39 +1,41 @@
-<!--$Id: bt_prefix.so,v 10.17 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: bt_prefix.so,v 10.21 2002/06/24 14:50:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Btree prefix comparison</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/bt_compare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_minkey.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/bt_compare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_minkey.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Btree prefix comparison</h1>
+<h3 align=center>Btree prefix comparison</h3>
<p>The Berkeley DB Btree implementation maximizes the number of keys that can be
stored on an internal page by storing only as many bytes of each key as
-are necessary to distinguish it from adjacent keys. The prefix comparison
-routine is what determines this minimum number of bytes (i.e., the length
-of the unique prefix), that must be stored. A prefix comparison function
-for the Btree can be specified by calling <a href="../../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>.
+are necessary to distinguish it from adjacent keys. The prefix
+comparison routine is what determines this minimum number of bytes (that
+is, the length of the unique prefix), that must be stored. A prefix
+comparison function for the Btree can be specified by calling
+<a href="../../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>.</p>
<p>The prefix comparison routine must be compatible with the overall
comparison function of the Btree, since what distinguishes any two keys
depends entirely on the function used to compare them. This means that
if a prefix comparison routine is specified by the application, a
-compatible overall comparison routine must also have been specified.
+compatible overall comparison routine must also have been specified.</p>
<p>Prefix comparison routines are passed pointers to keys as arguments. The
-keys are represented as <a href="../../api_c/dbt.html">DBT</a> structures. The prefix comparison
+keys are represented as <a href="../../api_c/dbt_class.html">DBT</a> structures. The prefix comparison
function must return the number of bytes of the second key argument that
are necessary to determine if it is greater than the first key argument.
If the keys are equal, the length of the second key should be returned.
-The only fields that the routines may examine in the <a href="../../api_c/dbt.html">DBT</a>
-structures are <b>data</b> and <b>size</b> fields.
-<p>An example prefix comparison routine follows:
-<p><blockquote><pre>u_int32_t
+The only fields that the routines may examine in the <a href="../../api_c/dbt_class.html">DBT</a>
+structures are <b>data</b> and <b>size</b> fields.</p>
+<p>An example prefix comparison routine follows:</p>
+<blockquote><pre>u_int32_t
compare_prefix(dbp, a, b)
DB *dbp;
const DBT *a, *b;
@@ -57,10 +59,10 @@ compare_prefix(dbp, a, b)
return (b-&gt;size + 1);
return (b-&gt;size);
}</pre></blockquote>
-<p>The usefulness of this functionality is data dependent, but in some data
-sets can produce significantly reduced tree sizes and faster search times.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/bt_compare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_minkey.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>The usefulness of this functionality is data-dependent, but in some data
+sets can produce significantly reduced tree sizes and faster search times.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/bt_compare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_minkey.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/bt_recnum.html b/db/docs/ref/am_conf/bt_recnum.html
index cdf8970e5..f1953b923 100644
--- a/db/docs/ref/am_conf/bt_recnum.html
+++ b/db/docs/ref/am_conf/bt_recnum.html
@@ -1,34 +1,106 @@
-<!--$Id: bt_recnum.so,v 10.18 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: bt_recnum.so,v 10.23 2002/06/24 14:50:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Retrieving Btree records by number</title>
+<title>Berkeley DB Reference Guide: Retrieving Btree records by logical record number</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/bt_minkey.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_ffactor.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/bt_minkey.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_ffactor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieving Btree records by number</h1>
+<h3 align=center>Retrieving Btree records by logical record number</h3>
<p>The Btree access method optionally supports retrieval by logical record
-numbers). To configure a Btree to support record numbers, call the
-<a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function with the <a href="../../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag.
+numbers. To configure a Btree to support record numbers, call the
+<a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method with the <a href="../../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag.</p>
<p>Configuring a Btree for record numbers should not be done lightly.
-While often useful, it requires that storing items into the database
-be single-threaded, which can severely impact application throughput.
-Generally it should be avoided in trees with a need for high write
-concurrency.
-<p>To determine a key's record number, use the <a href="../../api_c/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a> flag
-to the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> function.
+While often useful, it may significantly slow down the speed at which
+items can be stored into the database, and can severely impact
+application throughput. Generally it should be avoided in trees with
+a need for high write concurrency.</p>
<p>To retrieve by record number, use the <a href="../../api_c/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a> flag to the
-<a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> functions.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/bt_minkey.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_ffactor.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods. The following is an example of
+a routine that displays the data item for a Btree database created with
+the <a href="../../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> option.</p>
+<blockquote><pre>int
+rec_display(dbp, recno)
+ DB *dbp;
+ db_recno_t recno;
+{
+ DBT key, data;
+ int ret;
+<p>
+ memset(&key, 0, sizeof(key));
+ key.data = &recno;
+ key.size = sizeof(recno);
+ memset(&data, 0, sizeof(data));
+<p>
+ if ((ret = dbp-&gt;get(dbp, NULL, &key, &data, DB_SET_RECNO)) != 0)
+ return (ret);
+ printf("data for %lu: %.*s\n",
+ (u_long)recno, (int)data.size, (char *)data.data);
+ return (0);
+}</pre></blockquote>
+<p>To determine a key's record number, use the <a href="../../api_c/dbc_get.html#DB_GET_RECNO">DB_GET_RECNO</a> flag
+to the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method. The following is an example of a routine that
+displays the record number associated with a specific key.</p>
+<blockquote><pre>int
+recno_display(dbp, keyvalue)
+ DB *dbp;
+ char *keyvalue;
+{
+ DBC *dbcp;
+ DBT key, data;
+ db_recno_t recno;
+ int ret, t_ret;
+<p>
+ /* Acquire a cursor for the database. */
+ if ((ret = dbp-&gt;cursor(dbp, NULL, &dbcp, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+ goto err;
+ }
+<p>
+ /* Position the cursor. */
+ memset(&key, 0, sizeof(key));
+ key.data = keyvalue;
+ key.size = strlen(keyvalue);
+ memset(&data, 0, sizeof(data));
+ if ((ret = dbcp-&gt;c_get(dbcp, &key, &data, DB_SET)) != 0) {
+ dbp-&gt;err(dbp, ret, "DBC-&gt;c_get(DB_SET): %s", keyvalue);
+ goto err;
+ }
+<p>
+ /*
+ * Request the record number, and store it into appropriately
+ * sized and aligned local memory.
+ */
+ memset(&data, 0, sizeof(data));
+ data.data = &recno;
+ data.ulen = sizeof(recno);
+ data.flags = DB_DBT_USERMEM;
+ if ((ret = dbcp-&gt;c_get(dbcp, &key, &data, DB_GET_RECNO)) != 0) {
+ dbp-&gt;err(dbp, ret, "DBC-&gt;c_get(DB_GET_RECNO)");
+ goto err;
+ }
+<p>
+ printf("key for requested key was %lu\n", (u_long)recno);
+<p>
+err: /* Close the cursor. */
+ if ((t_ret = dbcp-&gt;c_close(dbcp)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ dbp-&gt;err(dbp, ret, "DBC-&gt;close");
+ }
+ return (ret);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/bt_minkey.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_ffactor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/byteorder.html b/db/docs/ref/am_conf/byteorder.html
index e0eef8a45..bb305f7a3 100644
--- a/db/docs/ref/am_conf/byteorder.html
+++ b/db/docs/ref/am_conf/byteorder.html
@@ -1,38 +1,38 @@
-<!--$Id: byteorder.so,v 10.16 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: byteorder.so,v 10.17 2001/02/15 22:21:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Selecting a byte order</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/cachesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/dup.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/cachesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/dup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Selecting a byte order</h1>
-<p>The database files created by Berkeley DB can be created in either little- or
-big-endian formats.
-<p>The byte order used for the underlying database can be specified by
-calling the <a href="../../api_c/db_set_lorder.html">DB-&gt;set_lorder</a> function. If no order is selected, the
-native format of the machine on which the database is created will be
-used.
+<h3 align=center>Selecting a byte order</h3>
+<p>Database files created by Berkeley DB can be created in either little- or
+big-endian formats. The byte order used for the underlying database
+is specified by calling the <a href="../../api_c/db_set_lorder.html">DB-&gt;set_lorder</a> method. If no order
+is selected, the native format of the machine on which the database is
+created will be used.</p>
<p>Berkeley DB databases are architecture independent, and any format database can
be used on a machine with a different native format. In this case, as
each page that is read into or written from the cache must be converted
to or from the host format, and databases with non-native formats will
-incur a performance penalty for the run-time conversion.
+incur a performance penalty for the run-time conversion.</p>
<p><b>It is important to note that the Berkeley DB access methods do no data
conversion for application specified data. Key/data pairs written on a
little-endian format architecture will be returned to the application
exactly as they were written when retrieved on a big-endian format
-architecture.</b>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/cachesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/dup.html"><img src="../../images/next.gif" alt="Next"></a>
+architecture.</b></p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/cachesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/dup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/cachesize.html b/db/docs/ref/am_conf/cachesize.html
index d0534767f..c24e04337 100644
--- a/db/docs/ref/am_conf/cachesize.html
+++ b/db/docs/ref/am_conf/cachesize.html
@@ -1,40 +1,40 @@
-<!--$Id: cachesize.so,v 10.18 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: cachesize.so,v 10.20 2003/02/19 17:41:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Selecting a cache size</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/pagesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/byteorder.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/pagesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/byteorder.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Selecting a cache size</h1>
+<h3 align=center>Selecting a cache size</h3>
<p>The size of the cache used for the underlying database can be specified
-by calling the <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> function.
+by calling the <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> method.
Choosing a cache size is, unfortunately, an art. Your cache must be at
least large enough for your working set plus some overlap for unexpected
-situations.
+situations.</p>
<p>When using the Btree access method, you must have a cache big enough for
the minimum working set for a single access. This will include a root
page, one or more internal pages (depending on the depth of your tree),
and a leaf page. If your cache is any smaller than that, each new page
will force out the least-recently-used page, and Berkeley DB will re-read the
-root page of the tree anew on each database request.
+root page of the tree anew on each database request.</p>
<p>If your keys are of moderate size (a few tens of bytes) and your pages
-are on the order of 4K to 8K, most Btree applications
-will be only three levels. For
-example, using 20 byte keys with 20 bytes of data associated with each
-key, a 8KB page can hold roughly 400 keys and 200 key/data pairs, so a
-fully populated three-level Btree will hold 32 million key/data pairs,
-and a tree with only a 50% page-fill factor will still hold 16 million
-key/data pairs. We rarely expect trees to exceed five levels, although
-Berkeley DB will support trees up to 255 levels.
+are on the order of 4KB to 8KB, most Btree applications will be only
+three levels. For example, using 20 byte keys with 20 bytes of data
+associated with each key, a 8KB page can hold roughly 400 keys (or 200
+key/data pairs), so a fully populated three-level Btree will hold 32
+million key/data pairs, and a tree with only a 50% page-fill factor will
+still hold 16 million key/data pairs. We rarely expect trees to exceed
+five levels, although Berkeley DB will support trees up to 255 levels.</p>
<p>The rule-of-thumb is that cache is good, and more cache is better.
Generally, applications benefit from increasing the cache size up to a
point, at which the performance will stop improving as the cache size
@@ -44,7 +44,7 @@ having to retrieve information from disk, or, your application is doing
truly random accesses, and therefore increasing size of the cache doesn't
significantly increase the odds of finding the next requested information
in the cache. The latter is fairly rare -- almost all applications show
-some form of locality of reference.
+some form of locality of reference.</p>
<p>That said, it is important not to increase your cache size beyond the
capabilities of your system, as that will result in reduced performance.
Under many operating systems, tying down enough virtual memory will cause
@@ -52,16 +52,16 @@ your memory and potentially your program to be swapped. This is
especially likely on systems without unified OS buffer caches and virtual
memory spaces, as the buffer cache was allocated at boot time and so
cannot be adjusted based on application requests for large amounts of
-virtual memory.
+virtual memory.</p>
<p>For example, even if accesses are truly random within a Btree, your
access pattern will favor internal pages to leaf pages, so your cache
should be large enough to hold all internal pages. In the steady state,
this requires at most one I/O per operation to retrieve the appropriate
-leaf page.
+leaf page.</p>
<p>You can use the <a href="../../utility/db_stat.html">db_stat</a> utility to monitor the effectiveness of
your cache. The following output is excerpted from the output of that
-utility's <b>-m</b> option:
-<p><blockquote><pre>prompt: db_stat -m
+utility's <b>-m</b> option:</p>
+<blockquote><pre>prompt: db_stat -m
131072 Cache size (128K).
4273 Requested pages found in the cache (97%).
134 Requested pages not found in the cache.
@@ -78,9 +78,9 @@ utility's <b>-m</b> option:
the cache, and only 116 of those requests required an I/O from disk. This
means that the cache is working well, yielding a 97% cache hit rate. The
<a href="../../utility/db_stat.html">db_stat</a> utility will present these statistics both for the cache
-as a whole and for each file within the cache separately.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/pagesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/byteorder.html"><img src="../../images/next.gif" alt="Next"></a>
+as a whole and for each file within the cache separately.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/pagesize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/byteorder.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/dup.html b/db/docs/ref/am_conf/dup.html
index eec5302cb..ec6ffd7a5 100644
--- a/db/docs/ref/am_conf/dup.html
+++ b/db/docs/ref/am_conf/dup.html
@@ -1,71 +1,75 @@
-<!--$Id: dup.so,v 10.21 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dup.so,v 10.28 2003/10/18 19:15:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Duplicate data items</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/byteorder.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/malloc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/byteorder.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/malloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Duplicate data items</h1>
+<h3 align=center>Duplicate data items</h3>
<p>The Btree and Hash access methods support the creation of multiple data
items for a single key item. By default, multiple data items are not
permitted, and each database store operation will overwrite any previous
-data item for that key. To configure Berkeley DB for duplicate data items, call
-the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function with the <a href="../../api_c/db_set_flags.html#DB_DUP">DB_DUP</a> flag.
+data item for that key. To configure Berkeley DB for duplicate data items,
+call the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method with the <a href="../../api_c/db_set_flags.html#DB_DUP">DB_DUP</a> flag. Only one
+copy of the key will be stored for each set of duplicate data items.
+If the Btree access method comparison routine returns that two keys
+compare equally, it is undefined which of the two keys will be stored
+and returned from future database operations.</p>
<p>By default, Berkeley DB stores duplicates in the order in which they were added,
that is, each new duplicate data item will be stored after any already
existing data items. This default behavior can be overridden by using
-the <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> function and one of the <a href="../../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a>, <a href="../../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a>
+the <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> method and one of the <a href="../../api_c/dbc_put.html#DB_AFTER">DB_AFTER</a>, <a href="../../api_c/dbc_put.html#DB_BEFORE">DB_BEFORE</a>
<a href="../../api_c/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a> or <a href="../../api_c/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a> flags. Alternatively, Berkeley DB
-may be configured to sort duplicate data items as described below.
+may be configured to sort duplicate data items.</p>
<p>When stepping through the database sequentially, duplicate data items will
be returned individually, as a key/data pair, where the key item only
changes after the last duplicate data item has been returned. For this
reason, duplicate data items cannot be accessed using the
-<a href="../../api_c/db_get.html">DB-&gt;get</a> function, as it always returns the first of the duplicate data
-items. Duplicate data items should be retrieved using the Berkeley DB cursor
-interface, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>.
-<p>There is an interface flag that permits applications to request the
-following data item only if it <b>is</b> a duplicate data item of the
-current entry, see <a href="../../api_c/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a> for more information. There is an
-interface flag that permits applications to request the following data
-item only if it <b>is not</b> a duplicate data item of the current
-entry, see <a href="../../api_c/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a> and <a href="../../api_c/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a> for more
-information.
+<a href="../../api_c/db_get.html">DB-&gt;get</a> method, as it always returns the first of the duplicate data
+items. Duplicate data items should be retrieved using a Berkeley DB cursor
+interface such as the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method.</p>
+<p>There is a flag that permits applications to request the following data
+item only if it <b>is</b> a duplicate data item of the current entry,
+see <a href="../../api_c/dbc_get.html#DB_NEXT_DUP">DB_NEXT_DUP</a> for more information. There is a flag that
+permits applications to request the following data item only if it
+<b>is not</b> a duplicate data item of the current entry, see
+<a href="../../api_c/dbc_get.html#DB_NEXT_NODUP">DB_NEXT_NODUP</a> and <a href="../../api_c/dbc_get.html#DB_PREV_NODUP">DB_PREV_NODUP</a> for more information.</p>
<p>It is also possible to maintain duplicate records in sorted order. Sorting
duplicates will significantly increase performance when searching them
-and performing logical joins, common operations when creating secondary
-indexes. To configure Berkeley DB to sort duplicate data items, the application
-must call the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function with the <a href="../../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag (in
-addition to the <a href="../../api_c/db_set_flags.html#DB_DUP">DB_DUP</a> flag). In addition, a custom sorting
-function may be specified using the <a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> function. If the
+and performing equality joins, common operations when using secondary
+indices. To configure Berkeley DB to sort duplicate data items, the application
+must call the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method with the <a href="../../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag (in
+addition to the <a href="../../api_c/db_set_flags.html#DB_DUP">DB_DUP</a> flag). In addition, a custom comparison
+function may be specified using the <a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> method. If the
<a href="../../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag is given, but no comparison routine is specified,
then Berkeley DB defaults to the same lexicographical sorting used for Btree
-keys, with shorter items collating before longer items.
+keys, with shorter items collating before longer items.</p>
<p>If the duplicate data items are unsorted, applications may store identical
duplicate data items, or, for those that just like the way it sounds,
-<i>duplicate duplicates</i>.
+<i>duplicate duplicates</i>.</p>
<p><b>In this release it is an error to attempt to store identical
duplicate data items when duplicates are being stored in a sorted order.</b>
-This restriction is expected to be lifted in a future release. There is
-an interface flag that permits applications to disallow storing duplicate
-data items when the database has been configured for sorted duplicates,
-see <a href="../../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a> for more information. Applications not wanting
-to permit duplicate duplicates in databases configured for sorted
-duplicates should begin using the <a href="../../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a> flag immediately.
+This restriction is expected to be lifted in a future release. There
+is a flag that permits applications to disallow storing duplicate data
+items when the database has been configured for sorted duplicates, see
+<a href="../../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a> for more information. Applications not wanting to
+permit duplicate duplicates in databases configured for sorted
+duplicates should begin using the <a href="../../api_c/db_put.html#DB_NODUPDATA">DB_NODUPDATA</a> flag immediately.</p>
<p>For further information on how searching and insertion behaves in the
presence of duplicates (sorted or not), see the <a href="../../api_c/db_get.html">DB-&gt;get</a>,
-<a href="../../api_c/db_put.html">DB-&gt;put</a>, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> and <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> documentation.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/byteorder.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/malloc.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_put.html">DB-&gt;put</a>, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> and <a href="../../api_c/dbc_put.html">DBcursor-&gt;c_put</a> documentation.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/byteorder.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/malloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/extentsize.html b/db/docs/ref/am_conf/extentsize.html
index 15d940c15..595e27ad2 100644
--- a/db/docs/ref/am_conf/extentsize.html
+++ b/db/docs/ref/am_conf/extentsize.html
@@ -1,27 +1,33 @@
-<!--$Id: extentsize.so,v 1.2 2000/11/20 21:45:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: extentsize.so,v 1.3 2001/05/02 15:53:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Selecting a Queue extent size</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/recno.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/re_source.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/recno.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/re_source.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Selecting a Queue extent size</h1>
+<h3 align=center>Selecting a Queue extent size</h3>
<p>In Queue databases, records are allocated sequentially and directly
mapped to an offset within the file storage for the database. As
records are deleted from the Queue, pages will become empty and will
not be reused in normal queue operations. To facilitate the reclamation
of disk space a Queue may be partitioned into extents. Each extent is
-kept in a separate physical file. Extent files are automatically
-created as needed and destroyed when they are emptied of records.
+kept in a separate physical file.</p>
+<p>Extent files are automatically created as needed and marked for deletion
+when the head of the queue moves off the extent. The extent will not
+be deleted until all processes close the extent. In addition, Berkeley DB
+caches a small number of extents that have been recently used; this may
+delay when an extent will be deleted. The number of extents left open
+depends on queue activity.</p>
<p>The extent size specifies the number of pages that make up each extent.
By default, if no extent size is specified, the Queue resides in a
single file and disk space is not reclaimed. In choosing an extent size
@@ -30,9 +36,9 @@ overhead of creating and deleting files. If the extent size is too
small, the system will pay a performance penalty, creating and deleting
files frequently. In addition, if the active part of the queue spans
many files, all those files will need to be open at the same time,
-consuming system and process file resources.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/recno.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/re_source.html"><img src="../../images/next.gif" alt="Next"></a>
+consuming system and process file resources.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/recno.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/re_source.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/h_ffactor.html b/db/docs/ref/am_conf/h_ffactor.html
index 6c30f0fc3..f8720544f 100644
--- a/db/docs/ref/am_conf/h_ffactor.html
+++ b/db/docs/ref/am_conf/h_ffactor.html
@@ -1,31 +1,32 @@
-<!--$Id: h_ffactor.so,v 10.11 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: h_ffactor.so,v 10.12 2001/04/18 13:44:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Page fill factor</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/bt_recnum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_hash.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/bt_recnum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_hash.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Page fill factor</h1>
+<h3 align=center>Page fill factor</h3>
<p>The density, or page fill factor, is an approximation of the number of
keys allowed to accumulate in any one bucket, determining when the hash
table grows or shrinks. If you know the average sizes of the keys and
-data in your dataset, setting the fill factor can enhance performance.
-A reasonable rule to use to compute fill factor is:
-<p><blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
+data in your data set, setting the fill factor can enhance performance.
+A reasonable rule to use to compute fill factor is:</p>
+<blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre></blockquote>
<p>The desired density within the hash table can be specified by calling
-the <a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> function. If no density is specified, one will
-be selected dynamically as pages are filled.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/bt_recnum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_hash.html"><img src="../../images/next.gif" alt="Next"></a>
+the <a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> method. If no density is specified, one will
+be selected dynamically as pages are filled.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/bt_recnum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_hash.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/h_hash.html b/db/docs/ref/am_conf/h_hash.html
index d42edee1c..b0ee1f639 100644
--- a/db/docs/ref/am_conf/h_hash.html
+++ b/db/docs/ref/am_conf/h_hash.html
@@ -1,39 +1,40 @@
<!--$Id: h_hash.so,v 10.12 2000/07/04 18:28:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Specifying a database hash</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/h_ffactor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/h_ffactor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Specifying a database hash</h1>
+<h3 align=center>Specifying a database hash</h3>
<p>The database hash determines in which bucket a particular key will reside.
The goal of hashing keys is to distribute keys equally across the database
pages, therefore it is important that the hash function work well with
the specified keys so that the resulting bucket usage is relatively
uniform. A hash function that does not work well can effectively turn
-into a sequential list.
+into a sequential list.</p>
<p>No hash performs equally well on all possible data sets. It is possible
that applications may find that the default hash function performs poorly
with a particular set of keys. The distribution resulting from the hash
function can be checked using <a href="../../utility/db_stat.html">db_stat</a> utility. By comparing the
number of hash buckets and the number of keys, one can decide if the entries
-are hashing in a well-distributed manner.
+are hashing in a well-distributed manner.</p>
<p>The hash function for the hash table can be specified by calling the
-<a href="../../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a> function. If no hash function is specified, a default
+<a href="../../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a> method. If no hash function is specified, a default
function will be used. Any application-specified hash function must
-take a reference to a DB object, a pointer to a byte string and
-its length, as arguments and return an unsigned, 32-bit hash value.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/h_ffactor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/h_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
+take a reference to a <a href="../../api_c/db_class.html">DB</a> object, a pointer to a byte string and
+its length, as arguments and return an unsigned, 32-bit hash value.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/h_ffactor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/h_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/h_nelem.html b/db/docs/ref/am_conf/h_nelem.html
index 8c510d6db..0b6346c27 100644
--- a/db/docs/ref/am_conf/h_nelem.html
+++ b/db/docs/ref/am_conf/h_nelem.html
@@ -1,32 +1,33 @@
<!--$Id: h_nelem.so,v 10.12 2000/03/18 21:43:08 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Hash table size</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/h_hash.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/recno.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/h_hash.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/recno.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Hash table size</h1>
+<h3 align=center>Hash table size</h3>
<p>When setting up the hash database, knowing the expected number of elements
that will be stored in the hash table is useful. This value can be used
by the Hash access method implementation to more accurately construct the
-necessary number of buckets that the database will eventually require.
+necessary number of buckets that the database will eventually require.</p>
<p>The anticipated number of elements in the hash table can be specified by
-calling the <a href="../../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a> function. If not specified, or set too low,
+calling the <a href="../../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a> method. If not specified, or set too low,
hash tables will expand gracefully as keys are entered, although a slight
performance degradation may be noticed. In order for the estimated number
-of elements to be a useful value to Berkeley DB, the <a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> function
-must also be called to set the page fill factor.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/h_hash.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/recno.html"><img src="../../images/next.gif" alt="Next"></a>
+of elements to be a useful value to Berkeley DB, the <a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a> method
+must also be called to set the page fill factor.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/h_hash.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/recno.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/intro.html b/db/docs/ref/am_conf/intro.html
index 15fed60f6..5e34912c0 100644
--- a/db/docs/ref/am_conf/intro.html
+++ b/db/docs/ref/am_conf/intro.html
@@ -1,21 +1,22 @@
-<!--$Id: intro.so,v 10.22 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.24 2001/10/13 20:21:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: What are the available access methods?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/select.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/select.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>What are the available access methods?</h1>
-<p>Berkeley DB currently offers four access methods: Btree, Hash, Queue and Recno.
+<h3 align=center>What are the available access methods?</h3>
+<p>Berkeley DB currently offers four access methods: Btree, Hash, Queue and Recno.</p>
<h3>Btree</h3>
<p>The Btree access method is an implementation of a sorted, balanced tree
structure. Searches, insertions, and deletions in the tree all take O(log
@@ -23,23 +24,23 @@ base_b N) time, where base_b is the average number of keys per page, and
N is the total number of keys stored. Often, inserting ordered data into
Btree implementations results in pages that are only half-full. Berkeley DB
makes ordered (or inverse ordered) insertion the best case, resulting in
-nearly full-page space utilization.
+nearly full-page space utilization.</p>
<h3>Hash</h3>
<p>The Hash access method data structure is an implementation of Extended
Linear Hashing, as described in "Linear Hashing: A New Tool for File and
Table Addressing", Witold Litwin, <i>Proceedings of the 6th
-International Conference on Very Large Databases (VLDB)</i>, 1980.
+International Conference on Very Large Databases (VLDB)</i>, 1980.</p>
<h3>Queue</h3>
<p>The Queue access method stores fixed-length records with logical record
numbers as keys. It is designed for fast inserts at the tail and has a
special cursor consume operation that deletes and returns a record from
-the head of the queue. The Queue access method uses record level locking.
+the head of the queue. The Queue access method uses record level locking.</p>
<h3>Recno</h3>
<p>The Recno access method stores both fixed and variable-length records with
logical record numbers as keys, optionally backed by a flat text (byte
-stream) file.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/select.html"><img src="../../images/next.gif" alt="Next"></a>
+stream) file.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/select.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/logrec.html b/db/docs/ref/am_conf/logrec.html
index fd9fb0141..c1ca82a5d 100644
--- a/db/docs/ref/am_conf/logrec.html
+++ b/db/docs/ref/am_conf/logrec.html
@@ -1,45 +1,123 @@
-<!--$Id: logrec.so,v 10.23 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: logrec.so,v 10.30 2003/10/18 19:15:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Logical record numbers</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/select.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/select.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Logical record numbers</h1>
+<h3 align=center>Logical record numbers</h3>
<p>The Berkeley DB Btree, Queue and Recno access methods can operate on logical
-record numbers. In all cases for the Queue and Recno access methods,
-and in some cases with the Btree access method, a record number is
-specified to reference a specific key/data pair. In the case of Btree
-supporting duplicate data items, the logical record number refers to a
-key and all of its data items.
-<p>Record numbers are 32-bit unsigned types, which limits the number of
-logical records in a database to 4,294,967,296. The first record in the
-database is record number 1.
+record numbers. Record numbers are 1-based, not 0-based, that is, the
+first record in a database is record number 1.</p>
+<p>In all cases for the Queue and Recno access methods, and when calling
+the Btree access method using the <a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods
+with the <a href="../../api_c/db_get.html#DB_SET_RECNO">DB_SET_RECNO</a> flag specified, the <b>data</b> field of
+the key <a href="../../api_c/dbt_class.html">DBT</a> must be a pointer to a memory location of type
+<b>db_recno_t</b>, as typedef'd in the standard Berkeley DB include file.
+The <b>size</b> field of the key <a href="../../api_c/dbt_class.html">DBT</a> should be the size of that
+type (for example, "sizeof(db_recno_t)" in the C programming language).
+The <b>db_recno_t</b> type is a 32-bit unsigned type, which limits the
+number of logical records in a Queue or Recno database, and the maximum
+logical record which may be directly retrieved from a Btree database,
+to 4,294,967,295.</p>
+<p>Record numbers in Queue databases wrap around. When the tail of the
+queue reaches the maximum record number, the next record appended will
+be given record number 1. If the head of the queue ever catches up to
+the tail of the queue, the Berkeley DB methods will return the system error
+EFBIG.</p>
<p>Record numbers in Recno databases can be configured to run in either
mutable or fixed mode: mutable, where logical record numbers change as
records are deleted or inserted, and fixed, where record numbers never
-change regardless of the database operation. Record numbers in Btree
-databases are always mutable, and as records are deleted or inserted, the
-logical record number for other records in the database can change. See
-<a href="../../ref/am_conf/renumber.html">Logically renumbering records</a> for
-more information.
-<p>Record numbers in Queue databases are always fixed, and never change
-regardless of the database operation.
+change regardless of the database operation. Record numbers in Queue
+databases are always fixed, and never change regardless of the database
+operation. Record numbers in Btree databases are always mutable, and
+as records are deleted or inserted, the logical record number for other
+records in the database can change. See
+<a href="../../ref/am_conf/renumber.html">Logically renumbering records</a>
+for more information.</p>
<p>Configuring Btree databases to support record numbers can severely limit
the throughput of applications with multiple concurrent threads writing
the database, because locations used to store record counts often become
-hot spots that many different threads all need to update.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/select.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
+hot spots that many different threads all need to update. In the case
+of a Btree supporting duplicate data items, the logical record number
+refers to a key and all of its data items, as duplicate data items are
+not individually numbered.</p>
+<p>The following is an example function that reads records from standard
+input and stores them into a Recno database. The function then uses a
+cursor to step through the database and display the stored records.</p>
+<blockquote><pre>int
+recno_build(dbp)
+ DB *dbp;
+{
+ DBC *dbcp;
+ DBT key, data;
+ db_recno_t recno;
+ u_int32_t len;
+ int ret;
+ char buf[1024];
+<p>
+ /* Insert records into the database. */
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+ for (recno = 1;; ++recno) {
+ printf("record #%lu&gt; ", (u_long)recno);
+ fflush(stdout);
+ if (fgets(buf, sizeof(buf), stdin) == NULL)
+ break;
+ if ((len = strlen(buf)) &lt;= 1)
+ continue;
+<p>
+ key.data = &recno;
+ key.size = sizeof(recno);
+ data.data = buf;
+ data.size = len - 1;
+<p>
+ switch (ret = dbp-&gt;put(dbp, NULL, &key, &data, 0)) {
+ case 0:
+ break;
+ default:
+ dbp-&gt;err(dbp, ret, "DB-&gt;put");
+ break;
+ }
+ }
+ printf("\n");
+<p>
+ /* Acquire a cursor for the database. */
+ if ((ret = dbp-&gt;cursor(dbp, NULL, &dbcp, 0)) != 0) {
+ dbp-&gt;err(dbp, ret, "DB-&gt;cursor");
+ return (1);
+ }
+<p>
+ /* Re-initialize the key/data pair. */
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+<p>
+ /* Walk through the database and print out the key/data pairs. */
+ while ((ret = dbcp-&gt;c_get(dbcp, &key, &data, DB_NEXT)) == 0)
+ printf("%lu : %.*s\n",
+ *(u_long *)key.data, (int)data.size, (char *)data.data);
+ if (ret != DB_NOTFOUND)
+ dbp-&gt;err(dbp, ret, "DBcursor-&gt;get");
+<p>
+ /* Close the cursor. */
+ if ((ret = dbcp-&gt;c_close(dbcp)) != 0) {
+ dbp-&gt;err(dbp, ret, "DBcursor-&gt;close");
+ return (1);
+ }
+ return (0);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/select.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/pagesize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/malloc.html b/db/docs/ref/am_conf/malloc.html
index 12e57383c..8f1aed123 100644
--- a/db/docs/ref/am_conf/malloc.html
+++ b/db/docs/ref/am_conf/malloc.html
@@ -1,31 +1,33 @@
-<!--$Id: malloc.so,v 10.19 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: malloc.so,v 10.20 2001/04/03 16:27:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Non-local memory allocation</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_compare.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_compare.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Non-local memory allocation</h1>
-<p>Berkeley DB can allocate memory for returned key/data pairs which then becomes
-the responsibility of the application. See <a href="../../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a> or
-<a href="../../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> for further information.
-<p>On systems where there may be multiple library versions of malloc (notably
-Windows NT), the Berkeley DB library could allocate memory from a different heap
-than the application will use to free it. To avoid this problem, the
-allocation routine to be used for allocating such key/data items can be
-specified by calling the <a href="../../api_c/db_set_malloc.html">DB-&gt;set_malloc</a> or
-<a href="../../api_c/db_set_realloc.html">DB-&gt;set_realloc</a> functions. If no allocation function is specified, the
-underlying C library functions are used.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/bt_compare.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Non-local memory allocation</h3>
+<p>Berkeley DB allocates memory for returning key/data pairs and statistical
+information which becomes the responsibility of the application.
+There are also interfaces where an application will allocate memory
+which becomes the responsibility of Berkeley DB.</p>
+<p>On systems in which there may be multiple library versions of the
+standard allocation routines (notably Windows NT), transferring memory
+between the library and the application will fail because the Berkeley DB
+library allocates memory from a different heap than the application
+uses to free it, or vice versa. To avoid this problem, the
+<a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> and <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a> methods can be used to
+give Berkeley DB references to the application's allocation routines.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/bt_compare.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/pagesize.html b/db/docs/ref/am_conf/pagesize.html
index 41cab5ec4..1a6002c25 100644
--- a/db/docs/ref/am_conf/pagesize.html
+++ b/db/docs/ref/am_conf/pagesize.html
@@ -1,29 +1,30 @@
-<!--$Id: pagesize.so,v 10.20 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: pagesize.so,v 10.22 2002/02/11 14:55:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Selecting a page size</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/logrec.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/cachesize.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/logrec.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/cachesize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Selecting a page size</h1>
+<h3 align=center>Selecting a page size</h3>
<p>The size of the pages used in the underlying database can be specified by
-calling the <a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a> function. The minimum page size is 512 bytes
+calling the <a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a> method. The minimum page size is 512 bytes
and the maximum page size is 64K bytes, and must be a power of two. If
no page size is specified by the application, a page size is selected
based on the underlying filesystem I/O block size. (A page size selected
in this way has a lower limit of 512 bytes and an upper limit of 16K
-bytes.)
-<p>There are four issues to consider when selecting a pagesize: overflow
-record sizes, locking, I/O efficiency, and recoverability.
+bytes.)</p>
+<p>There are several issues to consider when selecting a pagesize: overflow
+record sizes, locking, I/O efficiency, and recoverability.</p>
<p>First, the page size implicitly sets the size of an overflow record.
Overflow records are key or data items that are too large to fit on a
normal database page because of their size, and are therefore stored in
@@ -32,35 +33,46 @@ database structure. For this reason, there is often a significant
performance penalty associated with retrieving or modifying overflow
records. Selecting a page size that is too small, and which forces the
creation of large numbers of overflow pages, can seriously impact the
-performance of an application.
-<p>Second, in the Btree, Hash and Recno Access Methods, the finest-grained
-lock that Berkeley DB acquires is for a page. (The Queue Access Method
+performance of an application.</p>
+<p>Second, in the Btree, Hash and Recno access methods, the finest-grained
+lock that Berkeley DB acquires is for a page. (The Queue access method
generally acquires record-level locks rather than page-level locks.)
Selecting a page size that is too large, and which causes threads or
processes to wait because other threads of control are accessing or
modifying records on the same page, can impact the performance of your
-application.
+application.</p>
<p>Third, the page size specifies the granularity of I/O from the database
to the operating system. Berkeley DB will give a page-sized unit of bytes to
-the operating system to be scheduled for writing to the disk. For many
-operating systems, there is an internal <b>block size</b> which is used
-as the granularity of I/O from the operating system to the disk. If the
-page size is smaller than the block size, the operating system may be
-forced to read a block from the disk, copy the page into the buffer it
-read, and then write out the block to disk. Obviously, it will be much
-more efficient for Berkeley DB to write filesystem-sized blocks to the operating
-system and for the operating system to write those same blocks to the
-disk. Selecting a page size that is too small, and which causes the
-operating system to coalesce or otherwise manipulate Berkeley DB pages, can
-impact the performance of your application. Alternatively, selecting a
-page size that is too large may cause Berkeley DB and the operating system to
-write more data than is strictly necessary.
+the operating system to be scheduled for reading/writing from/to the
+disk. For many operating systems, there is an internal <b>block
+size</b> which is used as the granularity of I/O from the operating system
+to the disk. Generally, it will be more efficient for Berkeley DB to write
+filesystem-sized blocks to the operating system and for the operating
+system to write those same blocks to the disk.</p>
+<p>Selecting a database page size smaller than the filesystem block size
+may cause the operating system to coalesce or otherwise manipulate Berkeley DB
+pages and can impact the performance of your application. When the page
+size is smaller than the filesystem block size and a page written by
+Berkeley DB is not found in the operating system's cache, the operating system
+may be forced to read a block from the disk, copy the page into the
+block it read, and then write out the block to disk, rather than simply
+writing the page to disk. Additionally, as the operating system is
+reading more data into its buffer cache than is strictly necessary to
+satisfy each Berkeley DB request for a page, the operating system buffer cache
+may be wasting memory.</p>
+<p>Alternatively, selecting a page size larger than the filesystem block
+size may cause the operating system to read more data than necessary.
+On some systems, reading filesystem blocks sequentially may cause the
+operating system to begin performing read-ahead. If requesting a single
+database page implies reading enough filesystem blocks to satisfy the
+operating system's criteria for read-ahead, the operating system may do
+more I/O than is required.</p>
<p>Fourth, when using the Berkeley DB Transactional Data Store product, the page size may affect the errors
from which your database can recover See
<a href="../../ref/transapp/reclimit.html">Berkeley DB Recoverability</a> for more
-information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/logrec.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/cachesize.html"><img src="../../images/next.gif" alt="Next"></a>
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/logrec.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/cachesize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/re_source.html b/db/docs/ref/am_conf/re_source.html
index 2095a9698..7d525e5de 100644
--- a/db/docs/ref/am_conf/re_source.html
+++ b/db/docs/ref/am_conf/re_source.html
@@ -1,62 +1,63 @@
-<!--$Id: re_source.so,v 10.14 2000/11/20 21:45:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: re_source.so,v 10.16 2003/10/18 19:15:55 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Flat-text backing files</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/extentsize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/extentsize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Flat-text backing files</h1>
+<h3 align=center>Flat-text backing files</h3>
<p>It is possible to back any Recno database (either fixed or variable
length) with a flat-text source file. This provides fast read (and
potentially write) access to databases that are normally created and
stored as flat-text files. The backing source file may be specified by
-calling the <a href="../../api_c/db_set_re_source.html">DB-&gt;set_re_source</a> function.
+calling the <a href="../../api_c/db_set_re_source.html">DB-&gt;set_re_source</a> method.</p>
<p>The backing source file will be read to initialize the database. In the
case of variable length records, the records are assumed to be separated
-as described for the <a href="../../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a> function interface. For example,
-standard UNIX byte stream files can be interpreted as a sequence of
-variable length records separated by ASCII newline characters. This is
-the default.
-<p>When cached data would normally be written back to the underlying database
-file (e.g., <a href="../../api_c/db_close.html">DB-&gt;close</a> or <a href="../../api_c/db_sync.html">DB-&gt;sync</a> functions are called), the
-in-memory copy of the database will be written back to the backing source
-file.
+as described for the <a href="../../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a> method. For example, standard
+UNIX byte stream files can be interpreted as a sequence of variable
+length records separated by ASCII newline characters. This is the
+default.</p>
+<p>When cached data would normally be written back to the underlying
+database file (for example, when the <a href="../../api_c/db_close.html">DB-&gt;close</a> or
+<a href="../../api_c/db_sync.html">DB-&gt;sync</a> methods are called), the in-memory copy of the database will
+be written back to the backing source file.</p>
<p>The backing source file must already exist (but may be zero-length) when
<a href="../../api_c/db_open.html">DB-&gt;open</a> is called. By default, the backing source file is read
-lazily, i.e., records are not read from the backing source file until they
-are requested by the application. If multiple processes (not threads) are
-accessing a Recno database concurrently and either inserting or deleting
-records, the backing source file must be read in its entirety before more
-than a single process accesses the database, and only that process should
-specify the backing source file as part of the <a href="../../api_c/db_open.html">DB-&gt;open</a> call.
-This can be accomplished by calling the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function with the
-<a href="../../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a> flag.
+lazily, that is, records are not read from the backing source file until
+they are requested by the application. If multiple processes (not
+threads) are accessing a Recno database concurrently and either
+inserting or deleting records, the backing source file must be read in
+its entirety before more than a single process accesses the database,
+and only that process should specify the backing source file as part of
+the <a href="../../api_c/db_open.html">DB-&gt;open</a> call. This can be accomplished by calling the
+<a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method with the <a href="../../api_c/db_set_flags.html#DB_SNAPSHOT">DB_SNAPSHOT</a> flag.</p>
<p>Reading and writing the backing source file cannot be transactionally
protected because it involves filesystem operations that are not part of
the Berkeley DB transaction methodology. For this reason, if a temporary
database is used to hold the records (a NULL was specified as the file
argument to <a href="../../api_c/db_open.html">DB-&gt;open</a>), <b>it is possible to lose the
contents of the backing source file if the system crashes at the right
-instant</b>. If a permanent file is used to hold the database (a file name
+instant</b>. If a permanent file is used to hold the database (a filename
was specified as the file argument to <a href="../../api_c/db_open.html">DB-&gt;open</a>), normal database
recovery on that file can be used to prevent information loss. It is
still possible that the contents of the backing source file itself will
-be corrupted or lost if the system crashes.
+be corrupted or lost if the system crashes.</p>
<p>For all of the above reasons, the backing source file is generally used
to specify databases that are read-only for Berkeley DB applications, and that
are either generated on the fly by software tools, or modified using a
-different mechanism such as a text editor.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/extentsize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
+different mechanism such as a text editor.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/extentsize.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/recno.html b/db/docs/ref/am_conf/recno.html
index 1a7128e0e..d2281a9a4 100644
--- a/db/docs/ref/am_conf/recno.html
+++ b/db/docs/ref/am_conf/recno.html
@@ -1,26 +1,27 @@
-<!--$Id: recno.so,v 11.10 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: recno.so,v 11.11 2003/10/18 19:15:55 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Managing record-based databases</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/h_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/extentsize.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/h_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/extentsize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Managing record-based databases</h1>
+<h3 align=center>Managing record-based databases</h3>
<p>When using fixed- or variable-length record-based databases, particularly
with flat-text backing files, there are several items that the user can
control. The Recno access method can be used to store either variable-
or fixed-length data items. By default, the Recno access method stores
variable-length data items. The Queue access method can only store
-fixed-length data items.
+fixed-length data items.</p>
<h3>Record Delimiters</h3>
<p>When using the Recno access method to store variable-length records,
records read from any backing source file are separated by a specific
@@ -30,40 +31,40 @@ a backing source file, that is, records may be stored into the database
that include the delimiter byte. However, if such records are written
out to the backing source file and the backing source file is
subsequently read into a database, the records will be split where
-delimiting bytes were found.
+delimiting bytes were found.</p>
<p>For example, UNIX text files can usually be interpreted as a sequence of
variable-length records separated by ASCII newline characters. This byte
value (ASCII 0x0a) is the default delimiter. Applications may specify a
-different delimiting byte using the <a href="../../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a> interface.
-If no backing source file is being used, there is no reason to set the
-delimiting byte value.
+different delimiting byte using the <a href="../../api_c/db_set_re_delim.html">DB-&gt;set_re_delim</a> method. If no
+backing source file is being used, there is no reason to set the
+delimiting byte value.</p>
<h3>Record Length</h3>
<p>When using the Recno or Queue access methods to store fixed-length
records, the record length must be specified. Since the Queue access
method always uses fixed-length records, the user must always set the
record length prior to creating the database. Setting the record length
is what causes the Recno access method to store fixed-length, not
-variable-length, records.
+variable-length, records.</p>
<p>The length of the records is specified by calling the
-<a href="../../api_c/db_set_re_len.html">DB-&gt;set_re_len</a> function. The default length of the records is 0 bytes.
+<a href="../../api_c/db_set_re_len.html">DB-&gt;set_re_len</a> method. The default length of the records is 0 bytes.
Any record read from a backing source file or otherwise stored in the
database that is shorter than the declared length will automatically be
-padded as described for the <a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a> function. Any record stored
+padded as described for the <a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a> method. Any record stored
that is longer than the declared length results in an error. For
further information on backing source files, see
-<a href="../../ref/am_conf/re_source.html">Flat-text backing files</a>.
+<a href="../../ref/am_conf/re_source.html">Flat-text backing files</a>.</p>
<h3>Record Padding Byte Value</h3>
<p>When storing fixed-length records in a Queue or Recno database, a pad
-character may be specified by calling the <a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a> function. Any
+character may be specified by calling the <a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a> method. Any
record read from the backing source file or otherwise stored in the
database that is shorter than the expected length will automatically be
padded with this byte value. If fixed-length records are specified but
no pad value is specified, a space character (0x20 in the ASCII
character set) will be used. For further information on backing source
files, see <a href="../../ref/am_conf/re_source.html">Flat-text backing
-files</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/h_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/extentsize.html"><img src="../../images/next.gif" alt="Next"></a>
+files</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/h_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/extentsize.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/renumber.html b/db/docs/ref/am_conf/renumber.html
index 7c3594dff..82c307581 100644
--- a/db/docs/ref/am_conf/renumber.html
+++ b/db/docs/ref/am_conf/renumber.html
@@ -1,23 +1,24 @@
-<!--$Id: renumber.so,v 10.23 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: renumber.so,v 10.26 2003/10/18 19:15:55 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Logically renumbering records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/re_source.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/ops.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/re_source.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/ops.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Logically renumbering records</h1>
+<h3 align=center>Logically renumbering records</h3>
<p>Records stored in the Queue and Recno access methods are accessed by
logical record number. In all cases in Btree databases, and optionally
-in Recno databases (see the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function and the
+in Recno databases (see the <a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method and the
<a href="../../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag for more information), record numbers are
mutable. This means that the record numbers may change as records are
added to and deleted from the database. The deletion of record number
@@ -28,7 +29,7 @@ cases in Queue databases, and by default in Recno databases, record
numbers are not mutable, and the addition or deletion of records to the
database will not cause already-existing record numbers to change. For
this reason, new records cannot be inserted between already-existing
-records in databases with immutable record numbers.
+records in databases with immutable record numbers.</p>
<p>Cursors pointing into a Btree database or a Recno database with mutable
record numbers maintain a reference to a specific record, rather than
a record number, that is, the record they reference does not change as
@@ -38,22 +39,22 @@ three records with the record numbers 1, 2, and 3, and the data items
will cause the record "C" to be renumbered downward to record number 2.
A cursor positioned at record number 3 ("C") will be adjusted and
continue to point to "C" after the deletion. Similarly, a cursor
-previously referencing the now deleted record number 2 will be
+previously referring to the now deleted record number 2 will be
positioned between the new record numbers 1 and 2, and an insertion
using that cursor will appear between those records. In this manner
records can be added and deleted to a database without disrupting the
-sequential traversal of the database by a cursor.
-<p>Only cursors created using a single DB handle can adjust each
-other's position in this way, however. If multiple DB handles
+sequential traversal of the database by a cursor.</p>
+<p>Only cursors created using a single <a href="../../api_c/db_class.html">DB</a> handle can adjust each
+other's position in this way, however. If multiple <a href="../../api_c/db_class.html">DB</a> handles
have a renumbering Recno database open simultaneously (as when multiple
processes share a single database environment), a record referred to by
one cursor could change underfoot if a cursor created using another
-DB handle inserts or deletes records into the database. For
+<a href="../../api_c/db_class.html">DB</a> handle inserts or deletes records into the database. For
this reason, applications using Recno databases with mutable record
numbers will usually make all accesses to the database using a single
-DB handle and cursors created from that handle, or will
-otherwise single-thread access to the database, e.g., by using the
-Berkeley DB Concurrent Data Store product.
+<a href="../../api_c/db_class.html">DB</a> handle and cursors created from that handle, or will
+otherwise single-thread access to the database, for example, by using
+the Berkeley DB Concurrent Data Store product.</p>
<p>In any Queue or Recno databases, creating new records will cause the
creation of multiple records if the record number being created is more
than one greater than the largest record currently in the database. For
@@ -62,19 +63,19 @@ last record in the database, will implicitly create records 26 and 27
as well as 28. All first, last, next and previous cursor operations
will automatically skip over these implicitly created records. So, if
record number 5 is the only record the application has created,
-implicitly creating records 1 through 4, the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> interface
-with the <a href="../../api_c/dbc_get.html#DB_FIRST">DB_FIRST</a> flag will return record number 5, not record
-number 1. Attempts to explicitly retrieve implicitly created records
-by their record number will result in a special error return,
-<a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.
+implicitly creating records 1 through 4, the <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method with the
+<a href="../../api_c/dbc_get.html#DB_FIRST">DB_FIRST</a> flag will return record number 5, not record number 1.
+Attempts to explicitly retrieve implicitly created records by their
+record number will result in a special error return,
+<a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>.</p>
<p>In any Berkeley DB database, attempting to retrieve a deleted record, using
a cursor positioned on the record, results in a special error return,
<a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>. In addition, when using Queue databases or Recno
databases with immutable record numbers, attempting to retrieve a deleted
record by its record number will also result in the <a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>
-return.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/re_source.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am/ops.html"><img src="../../images/next.gif" alt="Next"></a>
+return.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/re_source.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am/ops.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_conf/select.html b/db/docs/ref/am_conf/select.html
index 3838b3467..4eb01fb4f 100644
--- a/db/docs/ref/am_conf/select.html
+++ b/db/docs/ref/am_conf/select.html
@@ -1,40 +1,41 @@
-<!--$Id: select.so,v 10.23 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: select.so,v 10.25 2001/03/31 17:06:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Selecting an access method</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td width="1%"><a href="../../ref/am_conf/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/logrec.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_conf/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/logrec.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Selecting an access method</h1>
+<h3 align=center>Selecting an access method</h3>
<p>The Berkeley DB access method implementation unavoidably interacts with each
application's data set, locking requirements and data access patterns.
For this reason, one access method may result in dramatically better
performance for an application than another one. Applications whose data
-could be stored in more than one access method may want to benchmark their
-performance using the different candidates.
+could be stored using more than one access method may want to benchmark
+their performance using the different candidates.</p>
<p>One of the strengths of Berkeley DB is that it provides multiple access methods
-with almost identical interfaces to the different access methods. This
+with nearly identical interfaces to the different access methods. This
means that it is simple to modify an application to use a different access
method. Applications can easily benchmark the different Berkeley DB access
-methods against each other for their particular data set and access pattern.
+methods against each other for their particular data set and access pattern.</p>
<p>Most applications choose between using the Btree or Hash access methods
or between using the Queue and Recno access methods, because each of the
-two pairs offer similar functionality.
+two pairs offer similar functionality.</p>
<h3>Hash or Btree?</h3>
<p>The Hash and Btree access methods should be used when logical record
numbers are not the primary key used for data access. (If logical record
numbers are a secondary key used for data access, the Btree access method
is a possible choice, as it supports simultaneous access by a key and a
-record number.)
+record number.)</p>
<p>Keys in Btrees are stored in sorted order and the relationship between
them is defined by that sort order. For this reason, the Btree access
method should be used when there is any locality of reference among keys.
@@ -45,24 +46,25 @@ example, if keys are timestamps, and it is likely that a request for an
8AM timestamp will be followed by a request for a 9AM timestamp, the
Btree access method is generally the right choice. Or, for example, if
the keys are names, and the application will want to review all entries
-with the same last name, the Btree access method is again a good choice.
+with the same last name, the Btree access method is again a good choice.</p>
<p>There is little difference in performance between the Hash and Btree
access methods on small data sets, where all, or most of, the data set
fits into the cache. However, when a data set is large enough that
-significant numbers of data pages no longer fit into the cache, then the
-Btree locality of reference described above becomes important for
-performance reasons. For example, there is no locality of reference for
-the Hash access method, and so key "AAAAA" is as likely to be stored on
-the same data page with key "ZZZZZ" as with key "AAAAB". In the Btree
-access method, because items are sorted, key "AAAAA" is far more likely
-to be near key "AAAAB" than key "ZZZZZ". So, if the application exhibits
-locality of reference in its data requests, then the Btree page read into
-the cache to satisfy a request for key "AAAAA" is much more likely to be
-useful to satisfy subsequent requests from the application than the Hash
-page read into the cache to satisfy the same request. This means that
-for applications with locality of reference, the cache is generally much
-"hotter" for the Btree access method than the Hash access method, and
-the Btree access method will make many fewer I/O calls.
+significant numbers of data pages no longer fit into the cache, then
+the Btree locality of reference described previously becomes important
+for performance reasons. For example, there is no locality of reference
+for the Hash access method, and so key "AAAAA" is as likely to be stored
+on the same database page with key "ZZZZZ" as with key "AAAAB". In the
+Btree access method, because items are sorted, key "AAAAA" is far more
+likely to be near key "AAAAB" than key "ZZZZZ". So, if the application
+exhibits locality of reference in its data requests, then the Btree page
+read into the cache to satisfy a request for key "AAAAA" is much more
+likely to be useful to satisfy subsequent requests from the application
+than the Hash page read into the cache to satisfy the same request.
+This means that for applications with locality of reference, the cache
+is generally much more effective for the Btree access method than the
+Hash access method, and the Btree access method will make many fewer
+I/O calls.</p>
<p>However, when a data set becomes even larger, the Hash access method can
outperform the Btree access method. The reason for this is that Btrees
contain more metadata pages than Hash databases. The data set can grow
@@ -75,18 +77,18 @@ presence of large data sets. In addition, once the data set is so large
that both the Btree and Hash access methods are almost certainly doing
an I/O for each random data request, the fact that Hash does not have to
walk several internal pages as part of a key search becomes a performance
-advantage for the Hash access method as well.
+advantage for the Hash access method as well.</p>
<p>Application data access patterns strongly affect all of these behaviors,
for example, accessing the data by walking a cursor through the database
will greatly mitigate the large data set behavior describe above because
each I/O into the cache will satisfy a fairly large number of subsequent
-data requests.
+data requests.</p>
<p>In the absence of information on application data and data access
patterns, for small data sets either the Btree or Hash access methods
will suffice. For data sets larger than the cache, we normally recommend
using the Btree access method. If you have truly large data, then the
Hash access method may be a better choice. The <a href="../../utility/db_stat.html">db_stat</a> utility
-is a useful tool for monitoring how well your cache is performing.
+is a useful tool for monitoring how well your cache is performing.</p>
<h3>Queue or Recno?</h3>
<p>The Queue or Recno access methods should be used when logical record
numbers are the primary key used for data access. The advantage of the
@@ -95,7 +97,7 @@ reason supports significantly higher levels of concurrency than the Recno
access method. The advantage of the Recno access method is that it
supports a number of additional features beyond those supported by the
Queue access method, such as variable-length records and support for
-backing flat-text files.
+backing flat-text files.</p>
<p>Logical record numbers can be mutable or fixed: mutable, where logical
record numbers can change as records are deleted or inserted, and fixed,
where record numbers never change regardless of the database operation.
@@ -105,12 +107,12 @@ always mutable, and as records are deleted or inserted, the logical record
number for other records in the database will change. The Queue access
method always runs in fixed mode, and logical record numbers never change
regardless of the database operation. The Recno access method can be
-configured to run in either mutable or fixed mode.
+configured to run in either mutable or fixed mode.</p>
<p>In addition, the Recno access method provides support for databases whose
permanent storage is a flat text file and the database is used as a fast,
-temporary storage area while the data is being read or modified.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am_conf/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/logrec.html"><img src="../../images/next.gif" alt="Next"></a>
+temporary storage area while the data is being read or modified.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_conf/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/logrec.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/align.html b/db/docs/ref/am_misc/align.html
index abe18acc1..7daceaac6 100644
--- a/db/docs/ref/am_misc/align.html
+++ b/db/docs/ref/am_misc/align.html
@@ -1,28 +1,29 @@
-<!--Id: align.so,v 1.3 2001/03/10 19:59:24 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: align.so,v 1.4 2001/05/28 00:30:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Data alignment</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am/curclose.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am/curclose.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/get_bulk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Data alignment</h1>
+<h3 align=center>Data alignment</h3>
<p>The Berkeley DB access methods provide no guarantees about byte alignment for
-returned key/data pairs, or callback functions which take <a href="../../api_c/dbt.html">DBT</a>
+returned key/data pairs, or callback functions which take <a href="../../api_c/dbt_class.html">DBT</a>
references as arguments, and applications are responsible for arranging
-any necessary alignment. The <a href="../../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
-<a href="../../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> and <a href="../../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags may be used to
-store returned items in memory of arbitrary alignment.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am/curclose.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
+any necessary alignment. The <a href="../../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>,
+<a href="../../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> and <a href="../../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flags may be used to
+store returned items in memory of arbitrary alignment.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am/curclose.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/get_bulk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/dbsizes.html b/db/docs/ref/am_misc/dbsizes.html
index 25210e5be..732535f4c 100644
--- a/db/docs/ref/am_misc/dbsizes.html
+++ b/db/docs/ref/am_misc/dbsizes.html
@@ -1,31 +1,32 @@
-<!--Id: dbsizes.so,v 10.25 2001/03/10 19:59:24 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: dbsizes.so,v 10.25 2001/03/10 19:59:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Database limits</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/stability.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/diskspace.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/stability.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/diskspace.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database limits</h1>
+<h3 align=center>Database limits</h3>
<p>The largest database file that Berkeley DB can handle depends on the page size
selected by the application. Berkeley DB stores database file page numbers as
unsigned 32-bit numbers and database file page sizes as unsigned 16-bit
numbers. Using the maximum database page size of 65536, this results in
a maximum database file size of 2<sup>48</sup> (256 terabytes). The
minimum database page size is 512 bytes, which results in a minimum
-maximum database size of 2<sup>41</sup> (2 terabytes).
+maximum database size of 2<sup>41</sup> (2 terabytes).</p>
<p>The largest database file Berkeley DB can support is potentially further limited
if the host system does not have filesystem support for files larger than
2<sup>32</sup>, including the ability to seek to absolute offsets within
-those files.
+those files.</p>
<p>The largest key or data item that Berkeley DB can support is largely limited
by available memory. Specifically, while key and data byte strings may
be of essentially unlimited length, any one of them must fit into
@@ -36,10 +37,10 @@ into memory. Further, as the access methods may need to compare key and
data items with other key and data items, it may be a requirement that
any two key or two data items fit into available memory. Finally, when
writing applications supporting transactions, it may be necessary to have
-an additional copy of any data item in memory for logging purposes.
-<p>The maximum Btree depth is 255.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/stability.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/diskspace.html"><img src="../../images/next.gif" alt="Next"></a>
+an additional copy of any data item in memory for logging purposes.</p>
+<p>The maximum Btree depth is 255.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/stability.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/diskspace.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/diskspace.html b/db/docs/ref/am_misc/diskspace.html
index 81666fcda..6c9d693d0 100644
--- a/db/docs/ref/am_misc/diskspace.html
+++ b/db/docs/ref/am_misc/diskspace.html
@@ -1,38 +1,39 @@
-<!--Id: diskspace.so,v 10.15 2001/04/21 18:55:01 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: diskspace.so,v 10.17 2002/08/09 13:43:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Disk space requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/dbsizes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/tune.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/dbsizes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/tune.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Disk space requirements</h1>
+<h3 align=center>Disk space requirements</h3>
<p>It is possible to estimate the total database size based on the size of
the data. The following calculations are an estimate of how many bytes
you will need to hold a set of data and then how many pages it will take
-to actually store it on disk.
+to actually store it on disk.</p>
<p>Space freed by deleting key/data pairs from a Btree or Hash database is
never returned to the filesystem, although it is reused where possible.
This means that the Btree and Hash databases are grow-only. If enough
keys are deleted from a database that shrinking the underlying file is
desirable, you should create a new database and copy the records from
-the old one into it.
+the old one into it.</p>
<p>These are rough estimates at best. For example, they do not take into
account overflow records, filesystem metadata information, large sets
of duplicate data items (where the key is only stored once), or
real-life situations where the sizes of key and data items are wildly
-variable, and the page-fill factor changes over time.
+variable, and the page-fill factor changes over time.</p>
<h3>Btree</h3>
-<p>The formulas for the Btree access method are as follows:
-<p><blockquote><pre>useful-bytes-per-page = (page-size - page-overhead) * page-fill-factor
+<p>The formulas for the Btree access method are as follows:</p>
+<blockquote><pre>useful-bytes-per-page = (page-size - page-overhead) * page-fill-factor
<p>
bytes-of-data = n-records *
(bytes-per-entry + page-overhead-for-two-entries)
@@ -51,27 +52,29 @@ to almost 100% if the entries in the database were inserted in sorted
order. Obviously, the <b>page-fill-factor</b> can drastically alter
the amount of disk space required to hold any particular data set. The
page-fill factor of any existing database can be displayed using the
-<a href="../../utility/db_stat.html">db_stat</a> utility.
-<p>As an example, using an 8K page size, with an 85% page-fill factor, there
-are 6941 bytes of useful space on each page:
-<p><blockquote><pre>6941 = (8192 - 26) * .85</pre></blockquote>
-<p>The total <b>bytes-of-data</b> is an easy calculation: It is the number
-of key/data pairs plus the overhead required to store each pair on a page.
-The overhead to store a single item on a Btree page is 5 bytes. So,
-assuming 60,000,000 key/data pairs, each of which is 8 bytes long, there
-are 1440000000 bytes, or roughly 1.34GB of total data:
-<p><blockquote><pre>1560000000 = 60000000 * ((8 * 2) + (5 * 2))</pre></blockquote>
+<a href="../../utility/db_stat.html">db_stat</a> utility.</p>
+<p>The page-overhead for Btree databases is 26 bytes. As an example, using
+an 8K page size, with an 85% page-fill factor, there are 6941 bytes of
+useful space on each page:</p>
+<blockquote><pre>6941 = (8192 - 26) * .85</pre></blockquote>
+<p>The total <b>bytes-of-data</b> is an easy calculation: It is the
+number of key or data items plus the overhead required to store each
+item on a page. The overhead to store a key or data item on a Btree
+page is 5 bytes. So, it would take 1560000000 bytes, or roughly 1.34GB
+of total data to store 60,000,000 key/data pairs, assuming each key or
+data item was 8 bytes long:</p>
+<blockquote><pre>1560000000 = 60000000 * ((8 + 5) * 2)</pre></blockquote>
<p>The total pages of data, <b>n-pages-of-data</b>, is the
<b>bytes-of-data</b> divided by the <b>useful-bytes-per-page</b>. In
-the example, there are 224751 pages of data.
-<p><blockquote><pre>224751 = 1560000000 / 6941</pre></blockquote>
+the example, there are 224751 pages of data.</p>
+<blockquote><pre>224751 = 1560000000 / 6941</pre></blockquote>
<p>The total bytes of disk space for the database is <b>n-pages-of-data</b>
multiplied by the <b>page-size</b>. In the example, the result is
-1841160192 bytes, or roughly 1.71GB.
-<p><blockquote><pre>1841160192 = 224751 * 8192</pre></blockquote>
+1841160192 bytes, or roughly 1.71GB.</p>
+<blockquote><pre>1841160192 = 224751 * 8192</pre></blockquote>
<h3>Hash</h3>
-<p>The formulas for the Hash access method are as follows:
-<p><blockquote><pre>useful-bytes-per-page = (page-size - page-overhead)
+<p>The formulas for the Hash access method are as follows:</p>
+<blockquote><pre>useful-bytes-per-page = (page-size - page-overhead)
<p>
bytes-of-data = n-records *
(bytes-per-entry + page-overhead-for-two-entries)
@@ -86,44 +89,44 @@ number of bytes on the page that are available to hold application data.
If the application has explicitly set a page-fill factor, pages will
not necessarily be kept full. For databases with a preset fill factor,
see the calculation below. The page-overhead for Hash databases is 26
-bytes and the page-overhead-for-two-entries is 6 bytes.
+bytes and the page-overhead-for-two-entries is 6 bytes.</p>
<p>As an example, using an 8K page size, there are 8166 bytes of useful space
-on each page:
-<p><blockquote><pre>8166 = (8192 - 26)</pre></blockquote>
+on each page:</p>
+<blockquote><pre>8166 = (8192 - 26)</pre></blockquote>
<p>The total <b>bytes-of-data</b> is an easy calculation: it is the number
of key/data pairs plus the overhead required to store each pair on a page.
In this case that's 6 bytes per pair. So, assuming 60,000,000 key/data
pairs, each of which is 8 bytes long, there are 1320000000 bytes, or
-roughly 1.23GB of total data:
-<p><blockquote><pre>1320000000 = 60000000 * (16 + 6)</pre></blockquote>
+roughly 1.23GB of total data:</p>
+<blockquote><pre>1320000000 = 60000000 * (16 + 6)</pre></blockquote>
<p>The total pages of data, <b>n-pages-of-data</b>, is the
<b>bytes-of-data</b> divided by the <b>useful-bytes-per-page</b>. In
-this example, there are 161646 pages of data.
-<p><blockquote><pre>161646 = 1320000000 / 8166</pre></blockquote>
+this example, there are 161646 pages of data.</p>
+<blockquote><pre>161646 = 1320000000 / 8166</pre></blockquote>
<p>The total bytes of disk space for the database is <b>n-pages-of-data</b>
multiplied by the <b>page-size</b>. In the example, the result is
-1324204032 bytes, or roughly 1.23GB.
-<p><blockquote><pre>1324204032 = 161646 * 8192</pre></blockquote>
+1324204032 bytes, or roughly 1.23GB.</p>
+<blockquote><pre>1324204032 = 161646 * 8192</pre></blockquote>
<p>Now, let's assume that the application specified a fill factor explicitly.
The fill factor indicates the target number of items to place on a single
page (a fill factor might reduce the utilization of each page, but it can
be useful in avoiding splits and preventing buckets from becoming too
large). Using our estimates above, each item is 22 bytes (16 + 6), and
there are 8166 useful bytes on a page (8192 - 26). That means that, on
-average, you can fit 371 pairs per page.
-<p><blockquote><pre>371 = 8166 / 22</pre></blockquote>
+average, you can fit 371 pairs per page.</p>
+<blockquote><pre>371 = 8166 / 22</pre></blockquote>
<p>However, let's assume that the application designer knows that although
most items are 8 bytes, they can sometimes be as large as 10, and it's
very important to avoid overflowing buckets and splitting. Then, the
-application might specify a fill factor of 314.
-<p><blockquote><pre>314 = 8166 / 26</pre></blockquote>
+application might specify a fill factor of 314.</p>
+<blockquote><pre>314 = 8166 / 26</pre></blockquote>
<p>With a fill factor of 314, then the formula for computing database size
-is
-<p><blockquote><pre>n-pages-of-data = npairs / pairs-per-page</pre></blockquote>
-<p>or 191082.
-<p><blockquote><pre>191082 = 60000000 / 314</pre></blockquote>
-<p>At 191082 pages, the total database size would be 1565343744, or 1.46GB.
-<p><blockquote><pre>1565343744 = 191082 * 8192</pre></blockquote>
+is</p>
+<blockquote><pre>n-pages-of-data = npairs / pairs-per-page</pre></blockquote>
+<p>or 191082.</p>
+<blockquote><pre>191082 = 60000000 / 314</pre></blockquote>
+<p>At 191082 pages, the total database size would be 1565343744, or 1.46GB.</p>
+<blockquote><pre>1565343744 = 191082 * 8192</pre></blockquote>
<p>There are a few additional caveats with respect to Hash databases. This
discussion assumes that the hash function does a good job of evenly
distributing keys among hash buckets. If the function does not do this,
@@ -138,9 +141,9 @@ space may be sparsely allocated in the file system, but the files will
appear to be their full size. Finally, because of this need for
contiguous allocation, overflow pages and duplicate pages can be allocated
only at specific points in the file, and this too can lead to sparse hash
-tables.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/dbsizes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/tune.html"><img src="../../images/next.gif" alt="Next"></a>
+tables.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/dbsizes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/tune.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/error.html b/db/docs/ref/am_misc/error.html
index 86d14ad71..d92d4766c 100644
--- a/db/docs/ref/am_misc/error.html
+++ b/db/docs/ref/am_misc/error.html
@@ -1,50 +1,51 @@
-<!--Id: error.so,v 10.20 2001/05/07 19:28:38 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: error.so,v 10.22 2003/10/18 19:15:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Error support</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/perm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/stability.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/perm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/stability.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Error support</h1>
-<p>Berkeley DB offers programmatic support for displaying error return values.
-<p>The <a href="../../api_c/env_strerror.html">db_strerror</a> interface returns a pointer to the error
+<h3 align=center>Error support</h3>
+<p>Berkeley DB offers programmatic support for displaying error return values.</p>
+<p>The <a href="../../api_c/env_strerror.html">db_strerror</a> function returns a pointer to the error
message corresponding to any Berkeley DB error return, similar to the ANSI C
-strerror interface, but is able to handle both system error returns and
-Berkeley DB specific return values.
-<p>For example:
-<p><blockquote><pre>int ret;
+strerror function, but is able to handle both system error returns and
+Berkeley DB specific return values.</p>
+<p>For example:</p>
+<blockquote><pre>int ret;
if ((ret = dbp-&gt;put(dbp, NULL, &key, &data, 0)) != 0) {
fprintf(stderr, "put failed: %s\n", db_strerror(ret));
return (1);
}</pre></blockquote>
-<p>There are also two additional error interfaces, <a href="../../api_c/db_err.html">DB-&gt;err</a> and
-<a href="../../api_c/db_err.html">DB-&gt;errx</a>. These interfaces work like the ANSI C X3.159-1989 (ANSI C) printf
-interface, taking a printf-style format string and argument list, and
-writing a message constructed from the format string and arguments.
-<p>The <a href="../../api_c/db_err.html">DB-&gt;err</a> function appends the standard error string to the constructed
-message; the <a href="../../api_c/db_err.html">DB-&gt;errx</a> function does not. These interfaces provide simpler
-ways of displaying Berkeley DB error messages. For example, if your application
-tracks session IDs in a variable called session_id, it can include that
-information in its error messages:
+<p>There are also two additional error methods, <a href="../../api_c/db_err.html">DB-&gt;err</a> and
+<a href="../../api_c/db_err.html">DB-&gt;errx</a>. These methods work like the ANSI C X3.159-1989 (ANSI C) printf
+function, taking a printf-style format string and argument list, and
+writing a message constructed from the format string and arguments.</p>
+<p>The <a href="../../api_c/db_err.html">DB-&gt;err</a> method appends the standard error string to the
+constructed message; the <a href="../../api_c/db_err.html">DB-&gt;errx</a> method does not. These methods
+provide simpler ways of displaying Berkeley DB error messages. For example,
+if your application tracks session IDs in a variable called session_id,
+it can include that information in its error messages:</p>
<p>Error messages can additionally be configured to always include a prefix
-(for example, the program name) using the <a href="../../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> interface.
-<p><blockquote><pre>#define DATABASE "access.db"
+(for example, the program name) using the <a href="../../api_c/db_set_errpfx.html">DB-&gt;set_errpfx</a> method.</p>
+<blockquote><pre>#define DATABASE "access.db"
<p>
int ret;
<p>
(void)dbp-&gt;set_errpfx(dbp, program_name);
<p>
-if ((ret =
- dbp-&gt;open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
dbp-&gt;errx(dbp,
"contact your system administrator: session ID was %d",
@@ -52,11 +53,11 @@ if ((ret =
return (1);
}</pre></blockquote>
<p>For example, if the program were called my_app and the open call returned
-an EACCESS system error, the error messages shown would appear as follows:
-<p><blockquote><pre>my_app: access.db: Permission denied.
+an EACCESS system error, the error messages shown would appear as follows:</p>
+<blockquote><pre>my_app: access.db: Permission denied.
my_app: contact your system administrator: session ID was 14</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/perm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/stability.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/perm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/stability.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/faq.html b/db/docs/ref/am_misc/faq.html
index e8e2103bf..760aca14c 100644
--- a/db/docs/ref/am_misc/faq.html
+++ b/db/docs/ref/am_misc/faq.html
@@ -1,48 +1,93 @@
-<!--Id: faq.so,v 10.6 2001/05/04 14:38:42 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.22 2003/09/03 18:34:32 gburd Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Access method FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/bigpic.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Access method FAQ</h1>
-<p><ol>
+<h3 align=center>Access method FAQ</h3>
+<ol>
+<p><li><b>Is a Berkeley DB database the same as a "table"?</b>
+<p>Yes; "tables" are databases, "rows" are key/data pairs, and "columns"
+are application-encapsulated fields within a data item (to which Berkeley DB
+does not directly provide access).</p>
+<p><li><b>I'm getting an error return in my application, but I can't
+figure out what the library is complaining about.</b>
+<p>See <a href="../../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>, <a href="../../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a> and
+<a href="../../api_c/db_set_errfile.html">DB-&gt;set_errfile</a> for ways to get additional information about
+error returns from Berkeley DB.</p>
+<p><li><b>Are Berkeley DB databases portable between architectures?</b>
+<p>Yes. See <a href="../../ref/am_conf/byteorder.html">Selecting a byte
+order</a> for more information.</p>
<p><li><b>I'm seeing database corruption when creating multiple databases
in a single physical file.</b>
-<p>This problem is usually the result of DB handles not sharing an
-underlying database environment. See <a href="../../ref/am/opensub.html">Opening multiple databases in a single file</a> for more information.
- <a name="3"><!--meow--></a> <a name="4"><!--meow--></a>
+<p>This problem is usually the result of <a href="../../api_c/db_class.html">DB</a> handles not sharing an
+underlying database environment. See <a href="../../ref/am/opensub.html">Opening multiple databases in a single file</a> for more information.</p>
+<a name="3"><!--meow--></a><a name="4"><!--meow--></a>
<p><li><b>Is there any way to compact databases, or return unused
database pages to the filesystem?</b>
<p>When Berkeley DB database pages are emptied, they are made available for other
uses, that is, new pages will not be allocated from the underlying
-filesystems as long as there are unused pages available. However, you
-cannot return those pages to the filesystem without dumping and
-reloading the database.
- <a name="5"><!--meow--></a>
+filesystem as long as there are unused pages available. However, the
+pages cannot be returned to the filesystem without dumping the database,
+removing the physical file, and reloading the database. The one
+exception to this rule is Queue access method extent files. Queue
+extent files are removed when they are emptied, and their pages returned
+to the underlying filesystem.</p>
+<p><li><b>I'm using integers as keys for a Btree database, and even
+though the key/data pairs are entered in sorted order, the page-fill
+factor is low.</b>
+<p>This is usually the result of using integer keys on little-endian
+architectures such as the x86. Berkeley DB sorts keys as byte strings, and
+little-endian integers don't sort well when viewed as byte strings.
+For example, take the numbers 254 through 257. Their byte patterns on
+a little-endian system are:</p>
+<blockquote><pre>254 fe 0 0 0
+255 ff 0 0 0
+256 0 1 0 0
+257 1 1 0 0</pre></blockquote>
+<p>If you treat them as strings, then they sort badly:</p>
+<blockquote><pre>256
+257
+254
+255</pre></blockquote>
+<p>On a big-endian system, their byte patterns are:</p>
+<blockquote><pre>254 0 0 0 fe
+255 0 0 0 ff
+256 0 0 1 1
+257 0 0 1 1</pre></blockquote>
+<p>and so, if you treat them as strings they sort nicely. Which means, if
+you use steadily increasing integers as keys on a big-endian system
+Berkeley DB behaves well and you get compact trees, but on a little-endian
+system Berkeley DB produces much less compact trees. To avoid this problem,
+you may want to convert the keys to flat text or big-endian
+representations, or provide your own
+<a href="../../ref/am_conf/bt_compare.html">Btree comparison function.</a></p>
+<a name="5"><!--meow--></a>
<p><li><b>Is there any way to avoid double buffering in the Berkeley DB system?</b>
-<p>While you cannot avoid double buffering entirely, there are three
-different tuning knobs you can work with to address this issue:
+<p>While you cannot avoid double buffering entirely, there are a few things
+you can do to address this issue:</p>
<p>First, the Berkeley DB cache size can be explicitly set. Rather than allocate
additional space in the Berkeley DB cache to cover unexpectedly heavy load or
large table sizes, double buffering may suggest you size the cache to
function well under normal conditions, and then depend on the file
buffer cache to cover abnormal conditions. Obviously, this is a
trade-off, as Berkeley DB may not then perform as well as usual under abnormal
-conditions.
+conditions.</p>
<p>Second, depending on the underlying operating system you're using, you
may be able to alter the amount of physical memory devoted to the file
buffer cache. Running as the system super-user makes a difference for
-some UNIX or UNIX-like operating systems as well.
+some UNIX or UNIX-like operating systems as well.</p>
<p>Third, changing the size of the Berkeley DB environment regions can change
the amount of space the operating system makes available for the file
buffer cache, and it's often worth considering exactly how the operating
@@ -50,10 +95,37 @@ system is dividing up its available memory. Further, moving the Berkeley DB
database environment regions from filesystem backed memory into system
memory (or heap memory), can often make additional system memory
available for the file buffer cache, especially on systems without a
-unified buffer cache and VM system.
+unified buffer cache and VM system.</p>
+<p>Finally, for operating systems that allow buffering to be turned off,
+specifying the <a href="../../api_c/env_set_flags.html#DB_DIRECT_DB">DB_DIRECT_DB</a> and <a href="../../api_c/env_set_flags.html#DB_DIRECT_LOG">DB_DIRECT_LOG</a> flags
+will attempt to do so.</p>
+<p><li><b>I'm seeing database corruption when I run out of disk space.</b>
+<p>Berkeley DB can continue to run when when out-of-disk-space errors occur, but
+it requires the application to be transaction protected. Applications
+which do not enclose update operations in transactions cannot recover
+from out-of-disk-space errors, and the result of running out of disk
+space may be database corruption.</p>
+<p><li><b>How can I associate application information with a <a href="../../api_c/db_class.html">DB</a>
+or <a href="../../api_c/env_class.html">DB_ENV</a> handle?</b>
+<p>In the C API, the <a href="../../api_c/db_class.html">DB</a> and <a href="../../api_c/env_class.html">DB_ENV</a> structures each contain
+an "app_private" field intended to be used to reference
+application-specific information. See the <a href="../../api_c/db_class.html">db_create</a> and
+<a href="../../api_c/env_class.html">db_env_create</a> documentation for more information.</p>
+<p>In the C++ or Java APIs, the easiest way to associate
+application-specific data with a handle is to subclass the <a href="../../api_cxx/db_class.html">Db</a>
+or <a href="../../api_cxx/env_class.html">DbEnv</a>, for example subclassing <a href="../../api_cxx/db_class.html">Db</a> to get MyDb.
+Objects of type MyDb will still have the Berkeley DB API methods available on
+them, and you can put any extra data or methods you want into the MyDb
+class. If you are using "callback" APIs that take <a href="../../api_cxx/db_class.html">Db</a> or
+<a href="../../api_cxx/env_class.html">DbEnv</a> arguments (for example, <a href="../../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>)
+these will always be called with the <a href="../../api_cxx/db_class.html">Db</a> or <a href="../../api_cxx/env_class.html">DbEnv</a>
+objects you create. So if you always use MyDb objects, you will be able
+to take the first argument to the callback function and cast it to a
+MyDb (in C++, cast it to (MyDb*)). That will allow you to access your
+data members or methods.</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/bigpic.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/get_bulk.html b/db/docs/ref/am_misc/get_bulk.html
index 5bac2ed84..434cea707 100644
--- a/db/docs/ref/am_misc/get_bulk.html
+++ b/db/docs/ref/am_misc/get_bulk.html
@@ -1,21 +1,21 @@
-<!--Id: get_bulk.so,v 10.3 2002/06/24 14:50:33 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: get_bulk.so,v 10.5 2003/11/20 22:29:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Retrieving records in bulk</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieving records in bulk</h1>
+<h3 align=center>Retrieving records in bulk</h3>
<p>When retrieving large numbers of records from the database, the number
of method calls can often dominate performance. Berkeley DB offers bulk get
interfaces which can significantly increase performance for some
@@ -28,29 +28,32 @@ the Berkeley DB C++ and Java APIs, the actions are similar, although there
are API-specific methods to set the <a href="../../api_c/dbt_class.html">DBT</a> values. Then, the
<a href="../../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> or <a href="../../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flags are specified to
the <a href="../../api_c/db_get.html">DB-&gt;get</a> or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> methods, which cause multiple records
-to be returned in the specified buffer.
+to be returned in the specified buffer.</p>
<p>The difference between <a href="../../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> and <a href="../../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a>
is as follows: <a href="../../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> returns multiple data items for a
single key. For example, the <a href="../../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> flag would be used to
retrieve all of the duplicate data items for a single key in a single
call. The <a href="../../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flag is used to retrieve multiple
key/data pairs, where each returned key may or may not have duplicate
-data items.
+data items.</p>
<p>Once the <a href="../../api_c/db_get.html">DB-&gt;get</a> or <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method has returned, the
application will walk through the buffer handling the returned records.
This is implemented for the C and C++ APIs using four macros:
<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a>, <a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a>,
<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a>, and <a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a>. For
the Java API, this is implemented as three iterator classes:
-<a href="../../api_java/dbt_bulk_class.html">DbMultipleDataIterator</a>,
-<a href="../../api_java/dbt_bulk_class.html">DbMultipleKeyDataIterator</a>, and
-<a href="../../api_java/dbt_bulk_class.html">DbMultipleRecnoDataIterator</a>.
+<a href="../../java/com/sleepycat/db/DbMultipleDataIterator.html">DbMultipleDataIterator</a>
+,
+<a href="../../java/com/sleepycat/db/DbMultipleKeyDataIterator.html">DbMultipleKeyDataIterator</a>
+, and
+<a href="../../java/com/sleepycat/db/DbMultipleRecnoDataIterator.html">DbMultipleRecnoDataIterator</a>
+.</p>
<p>The <a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_INIT">DB_MULTIPLE_INIT</a> macro is always called first. It
initializes a local application variable and the <b>data</b>
<a href="../../api_c/dbt_class.html">DBT</a> for stepping through the set of returned records. Then,
the application calls one of the remaining three macros:
<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a>, <a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a>, and
-<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a>.
+<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a>.</p>
<p>If the <a href="../../api_c/dbc_get.html#DB_MULTIPLE">DB_MULTIPLE</a> flag was specified to the <a href="../../api_c/db_get.html">DB-&gt;get</a> or
<a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a> method, the application will always call the
<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_NEXT">DB_MULTIPLE_NEXT</a> macro. If the <a href="../../api_c/dbc_get.html#DB_MULTIPLE_KEY">DB_MULTIPLE_KEY</a> flag
@@ -64,10 +67,10 @@ database, the application will always call the
<a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_KEY_NEXT">DB_MULTIPLE_KEY_NEXT</a>, and <a href="../../api_c/dbt_bulk.html#DB_MULTIPLE_RECNO_NEXT">DB_MULTIPLE_RECNO_NEXT</a> macros
are called repeatedly, until the end of the returned records is reached.
The end of the returned records is detected by the application's local
-pointer variable being set to NULL.
+pointer variable being set to NULL.</p>
<p>The following is an example of a routine that displays the contents of
-a Btree database using the bulk return interfaces.
-<p><blockquote><pre>int
+a Btree database using the bulk return interfaces.</p>
+<blockquote><pre>int
rec_display(dbp)
DB *dbp;
{
@@ -129,8 +132,8 @@ rec_display(dbp)
<p>
return (ret);
}</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/partial.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/partial.html b/db/docs/ref/am_misc/partial.html
index 0842519ee..d8c8896ba 100644
--- a/db/docs/ref/am_misc/partial.html
+++ b/db/docs/ref/am_misc/partial.html
@@ -1,39 +1,39 @@
-<!--Id: partial.so,v 10.21 2001/03/10 19:59:24 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: partial.so,v 10.25 2003/10/18 19:15:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Partial record storage and retrieval</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/perm.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/get_bulk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/struct.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Partial record storage and retrieval</h1>
+<h3 align=center>Partial record storage and retrieval</h3>
<p>It is possible to both store and retrieve parts of data items in all
Berkeley DB access methods. This is done by setting the
-<a href="../../api_c/dbt.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag in the <a href="../../api_c/dbt.html">DBT</a> structure passed to the
-Berkeley DB interface.
-<p>The <a href="../../api_c/dbt.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag is based on the values of two fields
-of the <a href="../../api_c/dbt.html">DBT</a> structure: <b>dlen</b> and <b>doff</b>. The value
+<a href="../../api_c/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag in the <a href="../../api_c/dbt_class.html">DBT</a> structure passed to the
+Berkeley DB method.</p>
+<p>The <a href="../../api_c/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag is based on the values of two fields
+of the <a href="../../api_c/dbt_class.html">DBT</a> structure: <b>dlen</b> and <b>doff</b>. The value
of <b>dlen</b> is the number of bytes of the record in which the
application is interested. The value of <b>doff</b> is the offset from
-the beginning of the data item where those bytes start.
+the beginning of the data item where those bytes start.</p>
<p>For example, if the data item were <b>ABCDEFGHIJKL</b>, a <b>doff</b>
value of 3 would indicate that the bytes of interest started at
<b>D</b>, and a <b>dlen</b> value of 4 would indicate that the bytes
-of interest were <b>DEFG</b>.
+of interest were <b>DEFG</b>.</p>
<p>When retrieving a data item from a database, the <b>dlen</b> bytes
starting <b>doff</b> bytes from the beginning of the record are
returned, as if they comprised the entire record. If any or all of the
specified bytes do not exist in the record, the retrieval is still
-successful, and any existing bytes (and nul bytes for any non-existent
-bytes) are returned.
+successful and any existing bytes are returned.</p>
<p>When storing a data item into the database, the <b>dlen</b> bytes
starting <b>doff</b> bytes from the beginning of the specified key's
data record are replaced by the data specified by the <b>data</b> and
@@ -41,13 +41,13 @@ data record are replaced by the data specified by the <b>data</b> and
record will grow, and if <b>dlen</b> is larger than <b>size</b>, the
record will shrink. If the specified bytes do not exist, the record will
be extended using nul bytes as necessary, and the store call will still
-succeed.
+succeed.</p>
<p>The following are various examples of the put case for the
-<a href="../../api_c/dbt.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag. In all examples, the initial data item is 20
-bytes in length:
-<p><b>ABCDEFGHIJ0123456789</b>
-<p><ol>
-<p><li><p><blockquote><pre>size = 20
+<a href="../../api_c/dbt_class.html#DB_DBT_PARTIAL">DB_DBT_PARTIAL</a> flag. In all examples, the initial data item is 20
+bytes in length:</p>
+<p><b>ABCDEFGHIJ0123456789</b></p>
+<ol>
+<p><li><blockquote><pre>size = 20
doff = 0
dlen = 20
data = abcdefghijabcdefghij
@@ -57,7 +57,7 @@ that is, the entire record is replaced.
<p>
ABCDEFGHIJ0123456789 -&gt; abcdefghijabcdefghij
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 20
dlen = 0
data = abcdefghij
@@ -67,7 +67,7 @@ that is, the record is extended by 10 bytes.
<p>
ABCDEFGHIJ0123456789 -&gt; ABCDEFGHIJ0123456789abcdefghij
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 10
dlen = 5
data = abcdefghij
@@ -76,7 +76,7 @@ Result: The 5 bytes at offset 10 are replaced by the 10 bytes of data.
<p>
ABCDEFGHIJ0123456789 -&gt; ABCDEFGHIJabcdefghij56789
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 10
dlen = 0
data = abcdefghij
@@ -86,7 +86,7 @@ that is, 10 bytes are inserted into the record.
<p>
ABCDEFGHIJ0123456789 -&gt; ABCDEFGHIJabcdefghij0123456789
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 2
dlen = 15
data = abcdefghij
@@ -95,7 +95,7 @@ Result: The 15 bytes at offset 2 are replaced by the 10 bytes of data.
<p>
ABCDEFGHIJ0123456789 -&gt; ABabcdefghij789
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 0
dlen = 0
data = abcdefghij
@@ -105,7 +105,7 @@ that is, the 10 bytes are inserted at the beginning of the record.
<p>
ABCDEFGHIJ0123456789 -&gt; abcdefghijABCDEFGHIJ0123456789
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 0
+<p><li><blockquote><pre>size = 0
doff = 0
dlen = 10
data = ""
@@ -115,7 +115,7 @@ that is, the first 10 bytes of the record are discarded.
<p>
ABCDEFGHIJ0123456789 -&gt; 0123456789
</pre></blockquote>
-<p><li><p><blockquote><pre>size = 10
+<p><li><blockquote><pre>size = 10
doff = 25
dlen = 0
data = abcdefghij
@@ -127,8 +127,8 @@ current data (\0 represents a nul byte).
ABCDEFGHIJ0123456789 -&gt; ABCDEFGHIJ0123456789\0\0\0\0\0abcdefghij
</pre></blockquote>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/align.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/perm.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/get_bulk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/struct.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/perm.html b/db/docs/ref/am_misc/perm.html
index e4b1e617e..e713c1abd 100644
--- a/db/docs/ref/am_misc/perm.html
+++ b/db/docs/ref/am_misc/perm.html
@@ -1,36 +1,37 @@
-<!--Id: perm.so,v 1.3 2001/05/05 01:49:22 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: perm.so,v 1.4 2002/06/20 12:53:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Retrieved key/data permanence for C/C++</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/struct.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieved key/data permanence for C/C++</h1>
+<h3 align=center>Retrieved key/data permanence for C/C++</h3>
<p>When using the non-cursor Berkeley DB calls to retrieve key/data items under
the C/C++ APIs (for example, <a href="../../api_c/db_get.html">DB-&gt;get</a>), the memory to which the
-pointer stored into the <a href="../../api_c/dbt.html">DBT</a> refers is only valid until the next
-call to Berkeley DB using the DB handle. (This includes <b>any</b>
-use of the returned DB handle, including by another thread of
+pointer stored into the <a href="../../api_c/dbt_class.html">DBT</a> refers is only valid until the next
+call to Berkeley DB using the <a href="../../api_c/db_class.html">DB</a> handle. (This includes <b>any</b>
+use of the returned <a href="../../api_c/db_class.html">DB</a> handle, including by another thread of
control within the process. For this reason, when multiple threads are
-using the returned DB handle concurrently, one of the
-<a href="../../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or <a href="../../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>
-flags must be specified with any non-cursor <a href="../../api_c/dbt.html">DBT</a> used for key or
-data retrieval.)
+using the returned <a href="../../api_c/db_class.html">DB</a> handle concurrently, one of the
+<a href="../../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or <a href="../../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>
+flags must be specified with any non-cursor <a href="../../api_c/dbt_class.html">DBT</a> used for key or
+data retrieval.)</p>
<p>When using the cursor Berkeley DB calls to retrieve key/data items under the
C/C++ APIs (for example, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>), the memory to which the
-pointer stored into the <a href="../../api_c/dbt.html">DBT</a> refers is only valid until the next
-call to Berkeley DB using the DBC handle returned by <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
+pointer stored into the <a href="../../api_c/dbt_class.html">DBT</a> refers is only valid until the next
+call to Berkeley DB using the <a href="../../api_c/dbc_class.html">DBC</a> handle returned by <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/struct.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/stability.html b/db/docs/ref/am_misc/stability.html
index 2570f8cc4..e2a7fafe1 100644
--- a/db/docs/ref/am_misc/stability.html
+++ b/db/docs/ref/am_misc/stability.html
@@ -1,20 +1,21 @@
-<!--Id: stability.so,v 10.28 2001/04/04 22:32:29 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: stability.so,v 10.28 2001/04/04 22:32:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Cursor stability</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/dbsizes.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/dbsizes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Cursor stability</h1>
+<h3 align=center>Cursor stability</h3>
<p>In the absence of locking, no guarantees are made about the stability
of cursors in different threads of control. However, the Btree, Queue
and Recno access methods guarantee that cursor operations, interspersed
@@ -22,13 +23,13 @@ with any other operation in the same thread of control will always
return keys in order and will return each non-deleted key/data pair
exactly once. Because the Hash access method uses a dynamic hashing
algorithm, it cannot guarantee any form of stability in the presence of
-inserts and deletes unless transactional locking is performed.
+inserts and deletes unless transactional locking is performed.</p>
<p>If locking was specified when the Berkeley DB environment was opened, but
transactions are not in effect, the access methods provide repeatable
reads with respect to the cursor. That is, a <a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a> call
on the cursor is guaranteed to return the same record as was returned
-on the last call to the cursor.
- <a name="4"><!--meow--></a> <a name="5"><!--meow--></a>
+on the last call to the cursor.</p>
+<a name="4"><!--meow--></a><a name="5"><!--meow--></a>
<p>In the presence of transactions, the Btree, Hash and Recno access
methods provide degree 3 isolation (serializable transactions). The
Queue access method provides degree 3 isolation with the exception that
@@ -40,15 +41,15 @@ readers not enclosed in transactions, all access method calls provide
degree 2 isolation, that is, reads are not repeatable. Finally, Berkeley DB
provides degree 1 isolation when the <a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag is
specified; that is, reads may see data modified in transactions which
-have not yet committed.
+have not yet committed.</p>
<p>For all access methods, a cursor scan of the database performed within
the context of a transaction is guaranteed to return each key/data pair
once and only once, except in the following case. If, while performing
a cursor scan using the Hash access method, the transaction performing
the scan inserts a new pair into the database, it is possible that
-duplicate key/data pairs will be returned.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/dbsizes.html"><img src="../../images/next.gif" alt="Next"></a>
+duplicate key/data pairs will be returned.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/dbsizes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/struct.html b/db/docs/ref/am_misc/struct.html
index 3a2b3e9d4..74881ede9 100644
--- a/db/docs/ref/am_misc/struct.html
+++ b/db/docs/ref/am_misc/struct.html
@@ -1,27 +1,27 @@
-<!--Id: struct.so,v 10.5 2002/06/21 03:04:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: struct.so,v 10.8 2002/12/22 20:42:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Storing C/C++ structures/objects</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/perm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Storing C/C++ structures/objects</h1>
+<h3 align=center>Storing C/C++ structures/objects</h3>
<p>Berkeley DB can store any kind of data, that is, it is entirely 8-bit clean.
How you use this depends, to some extent, on the application language
you are using. In the C/C++ languages, there are a couple of different
-ways to store structures and objects.
+ways to store structures and objects.</p>
<p>First, you can do some form of run-length encoding and copy your
-structure into another piece of memory before storing it:
-<p><blockquote><pre>struct {
+structure into another piece of memory before storing it:</p>
+<blockquote><pre>struct {
char *data1;
u_int32_t data2;
...
@@ -42,8 +42,8 @@ p += sizeof(info.data2);
the byte array. If you want more examples, see the Berkeley DB logging
routines (for example, btree/btree_auto.c:__bam_split_log()). This
technique is generally known as "marshalling". If you use this
-technique, you must then un-marshall the data when you read it back:
-<p><blockquote><pre>struct {
+technique, you must then un-marshall the data when you read it back:</p>
+<blockquote><pre>struct {
char *data1;
u_int32_t data2;
...
@@ -54,35 +54,35 @@ u_int8_t *p;
p = &data_buffer[0];
memcpy(&len, p, sizeof(len));
p += sizeof(len);
-info.data = malloc(len);
+info.data1 = malloc(len);
memcpy(info.data1, p, len);
p += len;
memcpy(&info.data2, p, sizeof(info.data2));
p += sizeof(info.data2);
...</pre></blockquote>
-<p>and so on.
+<p>and so on.</p>
<p>The second way to solve this problem only works if you have just one
variable length field in the structure. In that case, you can declare
-the structure as follows:
-<p><blockquote><pre>struct {
+the structure as follows:</p>
+<blockquote><pre>struct {
int a, b, c;
u_int8_t buf[1];
} info;</pre></blockquote>
<p>Then, let's say you have a string you want to store in this structure.
-When you allocate the structure, you allocate it as:
-<p><blockquote><pre>malloc(sizeof(struct info) + strlen(string));</pre></blockquote>
+When you allocate the structure, you allocate it as:</p>
+<blockquote><pre>malloc(sizeof(struct info) + strlen(string));</pre></blockquote>
<p>Since the allocated memory is contiguous, you can the initialize the
-structure as:
-<p><blockquote><pre>info.a = 1;
+structure as:</p>
+<blockquote><pre>info.a = 1;
info.b = 2;
info.c = 3;
-memcpy(&info.buf[0], string, strlen(string));</pre></blockquote>
-<p>and give it to Berkeley DB to store, with a length of:
-<p><blockquote><pre>sizeof(struct info) + strlen(string);</pre></blockquote>
+memcpy(&info.buf[0], string, strlen(string) + 1);</pre></blockquote>
+<p>and give it to Berkeley DB to store, with a length of:</p>
+<blockquote><pre>sizeof(struct info) + strlen(string);</pre></blockquote>
<p>In this case, the structure can be copied out of the database and used
-without any additional work.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/error.html"><img src="../../images/next.gif" alt="Next"></a>
+without any additional work.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/partial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/perm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/am_misc/tune.html b/db/docs/ref/am_misc/tune.html
index f4aa16b6c..b8b828787 100644
--- a/db/docs/ref/am_misc/tune.html
+++ b/db/docs/ref/am_misc/tune.html
@@ -1,22 +1,23 @@
-<!--Id: tune.so,v 10.6 2001/03/10 19:59:24 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: tune.so,v 10.8 2003/04/14 17:55:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Access method tuning</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Access Methods</dl></h3></td>
-<td align=right><a href="../../ref/am_misc/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../am_misc/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Access method tuning</h1>
+<h3 align=center>Access method tuning</h3>
<p>There are a few different issues to consider when tuning the performance
-of Berkeley DB access method applications.
+of Berkeley DB access method applications.</p>
<p><dl compact>
<p><dt>access method<dd>An application's choice of a database access method can significantly
affect performance. Applications using fixed-length records and integer
@@ -56,8 +57,10 @@ this reason, dirtying pages in the Berkeley DB cache may cause intense
filesystem activity, typically when the filesystem sync thread or
process is run. In some cases, this can dramatically affect application
throughput. The workaround to this problem is to create the shared
-regions in system shared memory (<a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a>) or in
-application private memory (<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>).
+regions in system shared memory (<a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a>) or application
+private memory (<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>), or, in cases where this behavior
+is configurable, to turn off the operating system's flushing of
+memory-mapped pages.
<p><dt>large key/data items<dd>Storing large key/data items in a database can alter the performance
characteristics of Btree, Hash and Recno databases. The first parameter
to consider is the database page size. When a key/data item is too
@@ -68,17 +71,52 @@ be too large). Accessing these overflow pages requires at least one
additional page reference over a normal access, so it is usually better
to increase the page size than to create a database with a large number
of overflow pages. Use the <a href="../../utility/db_stat.html">db_stat</a> utility (or the statistics
-returned by the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> function) to review the number of overflow
+returned by the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method) to review the number of overflow
pages in the database.
<p>The second issue is using large key/data items instead of duplicate data
items. While this can offer performance gains to some applications
(because it is possible to retrieve several data items in a single get
call), once the key/data items are large enough to be pushed off-page,
they will slow the application down. Using duplicate data items is
-usually the better choice in the long run.
+usually the better choice in the long run.</p>
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/am_misc/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_misc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>A common question when tuning Berkeley DB applications is scalability. For
+example, people will ask why, when adding additional threads or
+processes to an application, the overall database throughput decreases,
+even when all of the operations are read-only queries.</p>
+<p>First, while read-only operations are logically concurrent, they still
+have to acquire mutexes on internal Berkeley DB data structures. For example,
+when searching a linked list and looking for a database page, the linked
+list has to be locked against other threads of control attempting to add
+or remove pages from the linked list. The more threads of control you
+add, the more contention there will be for those shared data structure
+resources.</p>
+<p>Second, once contention starts happening, applications will also start
+to see threads of control convoy behind locks (especially on
+architectures supporting only test-and-set spin mutexes, rather than
+blocking mutexes). On test-and-set architectures, threads of control
+waiting for locks must attempt to acquire the mutex, sleep, check the
+mutex again, and so on. Each failed check of the mutex and subsequent
+sleep wastes CPU and decreases the overall throughput of the system.</p>
+<p>Third, every time a thread acquires a shared mutex, it has to shoot down
+other references to that memory in every other CPU on the system. Many
+modern snoopy cache architectures have slow shoot down characteristics.</p>
+<p>Fourth, schedulers don't care what application-specific mutexes a thread
+of control might hold when de-schedule a thread. If a thread of control
+is descheduled while holding a shared data structure mutex, other threads
+of control will be blocked until the scheduler decides to run the blocking
+thread of control again. The more threads of control that are running,
+the smaller their quanta of CPU time, and the more likely they will be
+descheduled while holding a Berkeley DB mutex.</p>
+<p>The results of adding new threads of control to an application, on the
+application's throughput, is application and hardware specific and
+almost entirely dependent on the application's data access pattern and
+hardware. In general, using operating systems that support blocking
+mutexes will often make a tremendous difference, and limiting threads
+of control to to some small multiple of the number of CPUs is usually
+the right choice to make.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_misc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/auto.html b/db/docs/ref/apprec/auto.html
index 9a885ec67..743ce6bd2 100644
--- a/db/docs/ref/apprec/auto.html
+++ b/db/docs/ref/apprec/auto.html
@@ -1,24 +1,24 @@
-<!--Id: auto.so,v 10.3 2002/03/15 16:19:10 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: auto.so,v 10.3 2002/03/15 16:19:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Automatically generated functions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Application Specific Logging and Recovery</dl></h3></td>
-<td align=right><a href="../../ref/apprec/def.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../apprec/def.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Automatically generated functions</h1>
+<h3 align=center>Automatically generated functions</h3>
<p>The XXX.src file is processed using the gen_rec.awk script included in
the dist directory of the Berkeley DB distribution. This is an awk script
-that is executed from with the following command line:
-<p><blockquote><pre>awk -f gen_rec.awk \
+that is executed from with the following command line:</p>
+<blockquote><pre>awk -f gen_rec.awk \
-v source_file=<i>C_FILE</i> \
-v header_file=<i>H_FILE</i> \
-v template_file=<i>TMP_FILE</i> &lt; XXX.src</pre></blockquote>
@@ -26,13 +26,13 @@ that is executed from with the following command line:
automatically generated C code, <i>H_FILE</i> is the name of the
file into which to place the automatically generated data structures
and declarations, and <i>TMP_FILE</i> is the name of the file into
-which to place a template for the recovery routines.
+which to place a template for the recovery routines.</p>
<p>Because the gen_rec.awk script uses sources files located relative to
the Berkeley DB dist directory, it must be run from the dist directory. For
example, in building the Berkeley DB logging and recovery routines for
ex_apprec, the following script is used to rebuild the automatically
-generated files:
-<p><blockquote><pre>E=../examples_c/ex_apprec
+generated files:</p>
+<blockquote><pre>E=../examples_c/ex_apprec
<p>
cd ../../dist
awk -f gen_rec.awk \
@@ -41,8 +41,8 @@ awk -f gen_rec.awk \
-v template_file=$E/ex_apprec_template &lt; $E/ex_apprec.src</pre></blockquote>
<p>For each log record description found in the XXX.src file, the following
structure declarations and #defines will be created in the file
-<i>header_file</i>:
-<p><blockquote><pre>#define DB_PREFIX_RECORD_TYPE /* Integer ID number */
+<i>header_file</i>:</p>
+<blockquote><pre>#define DB_PREFIX_RECORD_TYPE /* Integer ID number */
<p>
typedef struct _PREFIX_RECORD_TYPE_args {
/*
@@ -67,8 +67,8 @@ typedef struct _PREFIX_RECORD_TYPE_args {
* the entries in the record statement.
*/
};</pre></blockquote>
-<p>Thus, the auto-generated ex_apprec_mkdir_args structure looks as follows:
-<p><blockquote><pre>typedef struct _ex_apprec_mkdir_args {
+<p>Thus, the auto-generated ex_apprec_mkdir_args structure looks as follows:</p>
+<blockquote><pre>typedef struct _ex_apprec_mkdir_args {
u_int32_t type;
DB_TXN *txnid;
DB_LSN prev_lsn;
@@ -85,12 +85,12 @@ template assumes that the record is manipulating the internals of a
Berkeley DB database and sets up database handles, page structures, and such
for convenience. Many application-specific log records will not need
these, and may simply delete much of the template. See
-ex_apprec_template and ex_apprec_rec.c for an example.)
+ex_apprec_template and ex_apprec_rec.c for an example.)</p>
<p>The template file should be copied to a source file in the application
(but not the automatically generated source_file, as that will get
overwritten each time gen_rec.awk is run) and fully developed there.
-The recovery function takes the following parameters:
-<p><blockquote><p><dl compact>
+The recovery function takes the following parameters:</p>
+<blockquote><p><dl compact>
<p><dt>dbenv<dd>The environment in which recovery is running.
<p><dt>rec<dd>The record being recovered.
<p><dt>lsn<dd>The log sequence number of the record being recovered. The
@@ -110,11 +110,11 @@ ignore this field.
</dl></blockquote>
<p>In addition to the header_file and template_file, a source_file is
created, containing a log, read, recovery, and print function for each
-record type.
+record type.</p>
<p>The log function marshalls the parameters into a buffer, and calls
<a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a> on that buffer returning 0 on success and non-zero on
-failure. The log function takes the following parameters:
-<p><blockquote><p><dl compact>
+failure. The log function takes the following parameters:</p>
+<blockquote><p><dl compact>
<p><dt>dbenv<dd>The environment in which recovery is running.
<p><dt>txnid<dd>The transaction identifier for the transaction handle returned by
<a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>.
@@ -129,8 +129,8 @@ in the XXX.src file, in order.
structure of the appropriate type. It returns 0 on success and non-zero
on error. After the fields of the structure have been used, the pointer
returned from the read function should be freed. The read function
-takes the following parameters:
-<p><blockquote><p><dl compact>
+takes the following parameters:</p>
+<blockquote><p><dl compact>
<p><dt>dbenv<dd>The environment in which recovery is running.
<p><dt>recbuf<dd>A buffer.
<p><dt>argp<dd>A pointer to a structure of the appropriate type.
@@ -140,8 +140,8 @@ function takes the same parameters as the recovery function described
previously. Although some of the parameters are unused by the print
function, taking the same parameters allows a single dispatch loop to
dispatch to a variety of functions. The print function takes the
-following parameters:
-<p><blockquote><p><dl compact>
+following parameters:</p>
+<blockquote><p><dl compact>
<p><dt>dbenv<dd>The environment in which recovery is running.
<p><dt>rec<dd>The record being recovered.
<p><dt>lsn<dd>The log sequence number of the record being recovered.
@@ -151,9 +151,9 @@ following parameters:
<p>Finally, the source file will contain a function (named XXX_init_print,
where XXX is replaced by the prefix) which should be added to the
initialization part of the standalone <a href="../../utility/db_printlog.html">db_printlog</a> utility code
-so that utility can be used to display application-specific log records.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/apprec/def.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/config.html"><img src="../../images/next.gif" alt="Next"></a>
+so that utility can be used to display application-specific log records.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../apprec/def.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/config.html b/db/docs/ref/apprec/config.html
index 0d9498e1c..76579c60c 100644
--- a/db/docs/ref/apprec/config.html
+++ b/db/docs/ref/apprec/config.html
@@ -1,28 +1,28 @@
-<!--Id: config.so,v 10.4 2002/06/05 21:09:14 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.4 2002/06/05 21:09:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Application configuration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Application Specific Logging and Recovery</dl></h3></td>
-<td align=right><a href="../../ref/apprec/auto.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../apprec/auto.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Application configuration</h1>
+<h3 align=center>Application configuration</h3>
<p>The application should include a dispatch function that dispatches to
appropriate printing and/or recovery functions based on the log record
type and the operation code. The dispatch function should take the same
arguments as the recovery function, and should call the appropriate
recovery and/or printing functions based on the log record type and the
operation code. For example, the ex_apprec dispatch function is as
-follows:
-<p><blockquote><pre>int
+follows:</p>
+<blockquote><pre>int
apprec_dispatch(dbenv, dbt, lsn, op)
DB_ENV *dbenv;
DBT *dbt;
@@ -46,8 +46,8 @@ apprec_dispatch(dbenv, dbt, lsn, op)
}
</pre></blockquote>
<p>Applications use this dispatch function and the automatically generated
-functions as follows:
-<p><ol>
+functions as follows:</p>
+<ol>
<p><li>When the application starts, call the <a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a>
with your dispatch function.
<p><li>Issue a <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> call before any operations you want to be
@@ -59,8 +59,8 @@ to the appropriate log function.
<p><li>Call <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> to save all the changes, or call <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a>
to cancel all of the modifications.
</ol>
-<p>The recovery functions are called in the three following cases:
-<p><ol>
+<p>The recovery functions are called in the three following cases:</p>
+<ol>
<p><li>During recovery after application or system failure, with op set to
<a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> or <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a>.
<p><li>During transaction abort, with op set to <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_ABORT">DB_TXN_ABORT</a>.
@@ -70,13 +70,13 @@ to cancel all of the modifications.
<p>For each log record type you declare, you must write the appropriate
function to undo and redo the modifications. The shell of these
functions will be generated for you automatically, but you must fill in
-the details.
+the details.</p>
<p>Your code must be able to detect whether the described modifications
have been applied to the data. The function will be called with the
"op" parameter set to <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_ABORT">DB_TXN_ABORT</a> when a transaction that wrote
the log record aborts, with <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> and
<a href="../../api_c/env_set_app_dispatch.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a> during recovery, and with <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a>
-on a replicated client.
+on a replicated client.</p>
<p>The actions for <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_ABORT">DB_TXN_ABORT</a> and <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_BACKWARD_ROLL">DB_TXN_BACKWARD_ROLL</a>
should generally be the same, and the actions for
<a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> and <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a> should generally
@@ -88,13 +88,13 @@ operations. In this case, the recovery function may encounter deadlocks
when issuing locking calls. The application should run with the
deadlock detector, and the recovery function should simply return
<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> if a deadlock is detected and a locking
-operation fails with that error.
+operation fails with that error.</p>
<p>The <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_PRINT">DB_TXN_PRINT</a> operation should print the log record,
typically using the auto-generated print function; it is not used in
the Berkeley DB library, but may be useful for debugging, as in the
<a href="../../utility/db_printlog.html">db_printlog</a> utility. Applications may safely ignore this
operation code, they may handle printing from the recovery function, or
-they may dispatch directly to the auto-generated print function.
+they may dispatch directly to the auto-generated print function.</p>
<p>One common way to determine whether operations need to be undone or
redone is the use of log sequence numbers (LSNs). For example, each
access method database page contains the LSN of the most recent log
@@ -103,7 +103,7 @@ method changes a page, it writes a log record describing the change and
including the LSN that was on the page before the change. This LSN is
referred to as the previous LSN. The recovery functions read the page
described by a log record, and compare the LSN on the page to the LSN
-they were passed.
+they were passed.</p>
<p>If the page LSN is less than the passed LSN and the operation is an
undo, no action is necessary (because the modifications have not been
written to the page). If the page LSN is the same as the previous LSN
@@ -113,16 +113,16 @@ an undo, the actions are removed from the page; if the page LSN is
greater than the passed LSN and the operation is a redo, no further
action is necessary. If the action is a redo and the LSN on the page
is less than the previous LSN in the log record, it is an error because
-it could happen only if some previous log record was not processed.
+it could happen only if some previous log record was not processed.</p>
<p>Examples of other recovery functions can be found in the Berkeley DB library
recovery functions (found in files named XXX_rec.c) and in the
-application-specific recovery example (specifically, ex_apprec_rec.c).
+application-specific recovery example (specifically, ex_apprec_rec.c).</p>
<p>Finally, applications need to ensure that any data modifications they
have made, that were part of a committed transaction, must be written
-to stable storage before calling the <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> function. This is
-to allow the periodic removal of database environment log files.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/apprec/auto.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
+to stable storage before calling the <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> method. This is
+to allow the periodic removal of database environment log files.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../apprec/auto.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/def.html b/db/docs/ref/apprec/def.html
index c9bc0ad41..c85a4eddc 100644
--- a/db/docs/ref/apprec/def.html
+++ b/db/docs/ref/apprec/def.html
@@ -1,40 +1,40 @@
-<!--Id: def.so,v 10.3 2002/03/06 20:49:57 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: def.so,v 10.3 2002/03/06 20:49:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Defining application-specific log records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Application Specific Logging and Recovery</dl></h3></td>
-<td align=right><a href="../../ref/apprec/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/auto.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../apprec/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/auto.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Defining application-specific log records</h1>
+<h3 align=center>Defining application-specific log records</h3>
<p>By convention, log records are described in files named <b>XXX.src</b>,
where "XXX" is typically a descriptive name for a subsystem or other
logical group of logging functions. These files contain interface
definition language descriptions for each type of log record that is
-used by the subsystem.
+used by the subsystem.</p>
<p>All blank lines and lines beginning with a hash ("#") character in
-the XXX.src files are ignored.
+the XXX.src files are ignored.</p>
<p>The first non-comment line in the file should begin with the keyword
PREFIX, followed by a string that will be prepended to every generated
function name. Frequently, the PREFIX is either identical or similar
to the name of the <b>XXX.src</b> file. For example, the Berkeley DB
application-specific recovery example uses the file
-<b>ex_apprec.src</b>, which begins with the following PREFIX line:
-<p><blockquote><pre>PREFIX ex_apprec</pre></blockquote>
+<b>ex_apprec.src</b>, which begins with the following PREFIX line:</p>
+<blockquote><pre>PREFIX ex_apprec</pre></blockquote>
<p>Following the PREFIX line are the include files required by the
automatically generated functions. The include files should be listed
in order, prefixed by the keyword INCLUDE. For example, the Berkeley DB
application-specific recovery example lists the following include
-files:
-<p><blockquote><pre>INCLUDE #include &lt;ctype.h&gt;
+files:</p>
+<blockquote><pre>INCLUDE #include &lt;ctype.h&gt;
INCLUDE #include &lt;errno.h&gt;
INCLUDE #include &lt;stdlib.h&gt;
INCLUDE #include &lt;string.h&gt;
@@ -43,13 +43,13 @@ INCLUDE #include &lt;db.h&gt;
INCLUDE
INCLUDE #include "ex_apprec.h"</pre></blockquote>
<p>The rest of the XXX.src file consists of log record descriptions. Each
-log record description begins with the line:
-<p><blockquote><pre>BEGIN <i>RECORD_NAME</i> <i>RECORD_NUMBER</i></pre></blockquote>
-<p>and ends with the line:
-<p><blockquote><pre>END</pre></blockquote>
+log record description begins with the line:</p>
+<blockquote><pre>BEGIN <i>RECORD_NAME</i> <i>RECORD_NUMBER</i></pre></blockquote>
+<p>and ends with the line:</p>
+<blockquote><pre>END</pre></blockquote>
<p>The <i>RECORD_NAME</i> variable should be replaced with a record
name for this log record. The <i>RECORD_NUMBER</i> variable should
-be replaced with a record number.
+be replaced with a record number.</p>
<p>The combination of PREFIX name and <i>RECORD_NAME</i>, and the
<i>RECORD_NUMBER</i> must be unique for the application, that is,
values for application-specific and Berkeley DB log records may not overlap.
@@ -59,18 +59,18 @@ the record numbers or log record format or should be handled as
described in the <a href="../../ref/upgrade/process.html">Upgrading Berkeley DB
installations</a> section on log format changes. The record number space
below 10,000 is reserved for Berkeley DB itself; applications should choose
-record number values equal to or greater than 10,000.
+record number values equal to or greater than 10,000.</p>
<p>Between the BEGIN and END keywords there should be one line for each
data item logged as part of this log record. The format of these lines
-is as follows:
-<p><blockquote><pre>ARG | DBT | POINTER <i>variable_name</i> <i>variable_type</i> <i>printf_format</i></pre></blockquote>
+is as follows:</p>
+<blockquote><pre>ARG | DBT | POINTER <i>variable_name</i> <i>variable_type</i> <i>printf_format</i></pre></blockquote>
<p>The keyword ARG indicates that the argument is a simple parameter of
-the type specified. For example, a file ID might be logged as:
-<p><blockquote><pre>ARG fileID int d</pre></blockquote>
+the type specified. For example, a file ID might be logged as:</p>
+<blockquote><pre>ARG fileID int d</pre></blockquote>
<p>The keyword DBT indicates that the argument is a Berkeley DB DBT structure,
containing a length and pointer to a byte string. The keyword POINTER
indicates that the argument is a pointer to the data type specified (of
-course the data type, not the pointer, is what is logged).
+course the data type, not the pointer, is what is logged).</p>
<p>The <i>variable_name</i> is the field name within the structure that
will be used to refer to this item. The <i>variable_type</i> is
the C-language type of the variable, and the printf format is the
@@ -78,19 +78,19 @@ C-language format string, without the leading percent ("%") character,
that should be used to display the contents of the field (for example,
"s" for string, "d" for signed integral type, "u" for unsigned integral
type, "ld" for signed long integral type, "lu" for long unsigned
-integral type, and so on).
+integral type, and so on).</p>
<p>For example, ex_apprec.src defines a single log record type, used to
-log a directory name that has been stored in a DBT:
-<p><blockquote><pre>BEGIN mkdir 10000
+log a directory name that has been stored in a DBT:</p>
+<blockquote><pre>BEGIN mkdir 10000
DBT dirname DBT s
END</pre></blockquote>
<p>As the name suggests, this example of an application-defined log record
will be used to log the creation of a directory. There are many more
examples of XXX.src files in the Berkeley DB distribution. For example, the
file btree/btree.src contains the definitions for the log records
-supported by the Berkeley DB Btree access method.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/apprec/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/auto.html"><img src="../../images/next.gif" alt="Next"></a>
+supported by the Berkeley DB Btree access method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../apprec/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/auto.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/apprec/intro.html b/db/docs/ref/apprec/intro.html
index 037beb9da..7318bb7b7 100644
--- a/db/docs/ref/apprec/intro.html
+++ b/db/docs/ref/apprec/intro.html
@@ -1,31 +1,31 @@
-<!--Id: intro.so,v 10.47 2002/04/04 03:56:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.47 2002/04/04 03:56:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Application Specific Logging and Recovery</dl></h3></td>
-<td align=right><a href="../../ref/xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/def.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/def.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
+<h3 align=center>Introduction</h3>
<p>It is possible to use the Locking, Logging and Transaction subsystems
of Berkeley DB to provide transaction semantics on objects other than those
described by the Berkeley DB access methods. In these cases, the application
-will need application-specific logging and recovery functions.
+will need application-specific logging and recovery functions.</p>
<p>For example, consider an application that provides transaction semantics
on data stored in plain text files accessed using the POSIX read and
write system calls. The read and write operations for which transaction
protection is desired will be bracketed by calls to the standard Berkeley DB
transactional interfaces, <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> and <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>, and
the transaction's locker ID will be used to acquire relevant read and
-write locks.
+write locks.</p>
<p>Before data is accessed, the application must make a call to the lock
manager, <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a>, for a lock of the appropriate type (for
example, read) on the object being locked. The object might be a page
@@ -36,26 +36,26 @@ object by making an appropriate call to the lock manager,
<a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a>. Then, the application should make a call to the log
manager, <a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a>, to record enough information to redo the
operation in case of failure after commit and to undo the operation in
-case of abort.
+case of abort.</p>
<p>When designing applications that will use the log subsystem, it is
important to remember that the application is responsible for providing
any necessary structure to the log record. For example, the application
must understand what part of the log record is an operation code, what
part identifies the file being modified, what part is redo information,
-and what part is undo information.
+and what part is undo information.</p>
<p>After the log message is written, the application may issue the write
system call. After all requests are issued, the application may call
<a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>. When <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> returns, the caller is
-guaranteed that all necessary log writes have been written to disk.
+guaranteed that all necessary log writes have been written to disk.</p>
<p>At any time before issuing a <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>,
the application may call <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a>, which will
result in restoration of the database to a consistent pretransaction
state. (The application may specify its own recovery function for this
-purpose using the <a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a> function. The recovery
+purpose using the <a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a> method. The recovery
function must be able to either reapply or undo the update depending on
-the context, for each different type of log record.)
+the context, for each different type of log record.)</p>
<p>If the application crashes, the recovery process uses the log to restore
-the database to a consistent state.
+the database to a consistent state.</p>
<p>Berkeley DB includes tools to assist in the development of application-specific
logging and recovery. Specifically, given a description of information
to be logged in a family of log records, these tools will automatically
@@ -67,11 +67,11 @@ map into the arguments written to the log), log-printing functions
templates for recovery functions (functions that review log records
during transaction abort or recovery). The tools and generated code
are C-language and POSIX-system based, but the generated code should be
-usable on any system, not just POSIX systems.
+usable on any system, not just POSIX systems.</p>
<p>A sample application that does application-specific recovery is included
-in the Berkeley DB distribution, in the directory <b>examples_c/ex_apprec</b>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/apprec/def.html"><img src="../../images/next.gif" alt="Next"></a>
+in the Berkeley DB distribution, in the directory <b>examples_c/ex_apprec</b>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/def.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/apis.html b/db/docs/ref/arch/apis.html
index d1ae91b5a..7813c495a 100644
--- a/db/docs/ref/arch/apis.html
+++ b/db/docs/ref/arch/apis.html
@@ -1,74 +1,77 @@
-<!--$Id: apis.so,v 10.26 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: apis.so,v 10.29 2003/10/18 19:15:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Programmatic APIs</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Architecture</dl></h3></td>
-<td width="1%"><a href="../../ref/arch/progmodel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/script.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../arch/progmodel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/script.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Programmatic APIs</h1>
+<h3 align=center>Programmatic APIs</h3>
<p>The Berkeley DB subsystems can be accessed through interfaces from multiple
-languages. The standard library interface is ANSI C. Applications can
-also use Berkeley DB via C++ or Java, as well as from scripting languages.
-Environments can be shared among applications written using any of theses
-APIs. For example, you might have a local server written in C or C++, a
-script for an administrator written in Perl or Tcl, and a web based user
-interface written in Java, all sharing a single database environment.
+languages. Applications can use Berkeley DB via C, C++ or Java, as well as a
+variety of scripting languages such as Perl, Python, Ruby or Tcl.
+Environments can be shared among applications written by using any of
+these interfaces. For example, you might have a local server written
+in C or C++, a script for an administrator written in Perl or Tcl, and
+a Web-based user interface written in Java -- all sharing a single
+database environment.</p>
<h3>C</h3>
<p>The Berkeley DB library is written entirely in ANSI C. C applications use a
-single include file:
-<p><blockquote><pre>#include &lt;db.h&gt;</pre></blockquote>
+single include file:</p>
+<blockquote><pre>#include &lt;db.h&gt;</pre></blockquote>
<h3>C++</h3>
<p>The C++ classes provide a thin wrapper around the C API, with the major
advantages being improved encapsulation and an optional exception
-mechanism for errors. C++ applications use a single include file:
-<p><blockquote><pre>#include &lt;db_cxx.h&gt;</pre></blockquote>
+mechanism for errors. C++ applications use a single include file:</p>
+<blockquote><pre>#include &lt;db_cxx.h&gt;</pre></blockquote>
<p>The classes and methods are named in a fashion that directly corresponds
to structures and functions in the C interface. Likewise, arguments to
methods appear in the same order as the C interface, except to remove the
explicit <b>this</b> pointer. The #defines used for flags are identical
-between the C and C++ interfaces.
+between the C and C++ interfaces.</p>
<p>As a rule, each C++ object has exactly one structure from the underlying
C API associated with it. The C structure is allocated with each
constructor call and deallocated with each destructor call. Thus, the
rules the user needs to follow in allocating and deallocating structures
-are the same between the C and C++ interfaces.
-<p>To ensure portability to many platforms, both new and old, Berkeley DB makes as
-few assumptions as possible about the C++ compiler and library. For
-example, it does not expect STL, templates or namespaces to be available.
-The newest C++ feature used is exceptions, which are used liberally to
-transmit error information. Even the use of exceptions can be disabled
-at runtime.
-<h3>JAVA</h3>
+are the same between the C and C++ interfaces.</p>
+<p>To ensure portability to many platforms, both new and old, Berkeley DB makes
+as few assumptions as possible about the C++ compiler and library. For
+example, it does not expect STL, templates, or namespaces to be
+available. The newest C++ feature used is exceptions, which are used
+liberally to transmit error information. Even the use of exceptions
+can be disabled at runtime.</p>
+<h3>Java</h3>
<p>The Java classes provide a layer around the C API that is almost identical
to the C++ layer. The classes and methods are, for the most part
-identical to the C++ layer. Db constants and #defines are represented as
+identical to the C++ layer. Berkeley DB constants and #defines are represented as
"static final int" values. Error conditions are communicated as Java
-exceptions.
+exceptions.</p>
<p>As in C++, each Java object has exactly one structure from the underlying
C API associated with it. The Java structure is allocated with each
constructor or open call, but is deallocated only by the Java garbage
collector. Because the timing of garbage collection is not predictable,
applications should take care to do a close when finished with any object
-that has a close method.
+that has a close method.</p>
<h3>Dbm/Ndbm, Hsearch</h3>
-<p>Berkeley DB supports the standard UNIX interfaces <a href="../../api_c/dbm.html">dbm</a> (or its
-<a href="../../api_c/dbm.html">ndbm</a> variant) and <a href="../../api_c/hsearch.html">hsearch</a>. After including a new header
-file and recompiling, <a href="../../api_c/dbm.html">dbm</a> programs will run orders of magnitude
-faster and their underlying databases can grow as large as necessary.
-Historic <a href="../../api_c/dbm.html">dbm</a> applications fail when some number of entries were
-inserted into the database, where the number depends on the effectiveness
-of the hashing function on the particular data set.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/arch/progmodel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/script.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>Berkeley DB supports the standard UNIX <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a>, and
+<a href="../../api_c/hsearch.html">hsearch</a> interfaces. After including a new header file and
+recompiling, programs will run orders of magnitude faster, and
+underlying databases can grow as large as necessary. Also, historic
+<a href="../../api_c/dbm.html">dbm</a> and <a href="../../api_c/dbm.html">ndbm</a> applications can fail once some number of
+entries are inserted into the database, in which the number depends on
+the effectiveness of the internal hashing function on the particular
+data set. This is not a problem with Berkeley DB.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../arch/progmodel.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/script.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/bigpic.html b/db/docs/ref/arch/bigpic.html
index 6c945744e..54673406f 100644
--- a/db/docs/ref/arch/bigpic.html
+++ b/db/docs/ref/arch/bigpic.html
@@ -1,27 +1,29 @@
-<!--$Id: bigpic.so,v 8.21 2000/12/18 21:05:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: bigpic.so,v 8.32 2003/11/27 18:25:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: The big picture</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Architecture</dl></h3></td>
-<td width="1%"><a href="../../ref/am/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/progmodel.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../java/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/progmodel.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>The big picture</h1>
-<p>The previous chapters in this Reference Guide have described applications
-that use the Berkeley DB Access Methods for fast data storage and retrieval.
-The applications we describe here and in subsequent chapters are similar
-in nature to the Access Method applications, but they are also fully
-recoverable in the face of application or system failure.
-<p>Application code that only uses the Berkeley DB Access Methods might appear as
-follows:
-<p><blockquote><pre>switch (ret = dbp-&gt;put(dbp, NULL, &key, &data, 0)) {
+<h3 align=center>The big picture</h3>
+<p>The previous chapters in this Reference Guide have described
+applications that use the Berkeley DB access methods for fast data storage
+and retrieval. The applications described in the following chapters
+are similar in nature to the access method applications, but they are
+also threaded and/or recoverable in the face of application or system
+failure.</p>
+<p>Application code that uses only the Berkeley DB access methods might appear
+as follows:</p>
+<blockquote><pre>switch (ret = dbp-&gt;put(dbp, NULL, &key, &data, 0)) {
case 0:
printf("db: %s: key stored.\n", (char *)key.data);
break;
@@ -29,86 +31,95 @@ default:
dbp-&gt;err(dbp, ret, "dbp-&gt;put");
exit (1);
}</pre></blockquote>
-<p>The underlying Berkeley DB architecture that supports this is:
+<p>The underlying Berkeley DB architecture that supports this is</p>
<p align=center><img src="smallpic.gif" alt="small">
<p>As you can see from this diagram, the application makes calls into the
-Access Methods, and the Access Methods use the underlying shared memory
-buffer cache to hold recently used file pages in main memory.
-<p>When applications require recoverability, then their calls to the Access
+access methods, and the access methods use the underlying shared memory
+buffer cache to hold recently used file pages in main memory.</p>
+<p>When applications require recoverability, their calls to the Access
Methods must be wrapped in calls to the transaction subsystem. The
application must inform Berkeley DB where to begin and end transactions, and
must be prepared for the possibility that an operation may fail at any
-particular time, causing the transaction to abort.
-<p>An example of transaction protected code might appear as follows:
-<p><blockquote><pre>retry: if ((ret = txn_begin(dbenv, NULL, &tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_begin");
+particular time, causing the transaction to abort.</p>
+<p>An example of transaction-protected code might appear as follows:</p>
+<blockquote><pre>for (fail = 0;;) {
+ /* Begin the transaction. */
+ if ((ret = dbenv-&gt;txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "dbenv-&gt;txn_begin");
exit (1);
}
<p>
+ /* Store the key. */
switch (ret = dbp-&gt;put(dbp, tid, &key, &data, 0)) {
- case DB_LOCK_DEADLOCK:
- (void)txn_abort(tid);
- goto retry;
case 0:
+ /* Success: commit the change. */
printf("db: %s: key stored.\n", (char *)key.data);
- break;
+ if ((ret = tid-&gt;commit(tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_TXN-&gt;commit");
+ exit (1);
+ }
+ return (0);
+ case DB_LOCK_DEADLOCK:
default:
- dbenv-&gt;err(dbenv, ret, "dbp-&gt;put");
- exit (1);
+ /* Failure: retry the operation. */
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
+ exit (1);
+ }
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
+ continue;
}
-<p>
- if ((ret = txn_commit(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_commit");
- exit (1);
- }</pre></blockquote>
-<p>In this example, the same operation is being done as before, however, it
-is wrapped in transaction calls. The transaction is started with
-<a href="../../api_c/txn_begin.html">txn_begin</a>, and finished with <a href="../../api_c/txn_commit.html">txn_commit</a>. If the operation
-fails due to a deadlock, then the transaction is aborted using
-<a href="../../api_c/txn_abort.html">txn_abort</a>, after which the operation may be retried.
-<p>There are actually five major subsystems in Berkeley DB, as follows:
+}</pre></blockquote>
+<p>In this example, the same operation is being done as before; however,
+it is wrapped in transaction calls. The transaction is started with
+<a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> and finished with <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>. If the
+operation fails due to a deadlock, the transaction is aborted using
+<a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a>, after which the operation may be retried.</p>
+<p>There are actually five major subsystems in Berkeley DB, as follows:</p>
<p><dl compact>
-<p><dt>The Access Methods<dd>The Access Method subsystem provides general-purpose support for creating
-and accessing database files formatted as Btrees, Hashed files, and
-Fixed- and Variable-length records. These modules are useful in the
-absence of transactions for applications that need fast, formatted file
-support. See <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> for more
+<p><dt>Access Methods<dd>The access methods subsystem provides general-purpose support for
+creating and accessing database files formatted as Btrees, Hashed files,
+and Fixed- and Variable-length records. These modules are useful in
+the absence of transactions for applications that need fast formatted
+file support. See <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> for more
information. These functions were already discussed in detail in the
previous chapters.
-<p><dt>The Memory Pool<dd>The memory pool subsystem is the general-purpose shared memory buffer pool
+<p><dt>Memory Pool<dd>The Memory Pool subsystem is the general-purpose shared memory buffer pool
used by Berkeley DB. This is the shared memory cache that allows multiple
processes and threads within processes to share access to databases. This
module is useful outside of the Berkeley DB package for processes that require
portable, page-oriented, cached, shared file access.
-<p><dt>Transactions<dd>The transaction subsystem allows a group of database changes to be
-treated as an atomic unit so that either all of the changes are done, or
-none of the changes are done. The transaction subsystem implements the
-Berkeley DB transaction model. This module is useful outside of the Berkeley DB
-package for processes that want to transaction protect their own data
+<p><dt>Transaction<dd>The Transaction subsystem allows a group of database changes to be
+treated as an atomic unit so that either all of the changes are done,
+or none of the changes are done. The transaction subsystem implements
+the Berkeley DB transaction model. This module is useful outside of the Berkeley DB
+package for processes that want to transaction-protect their own data
modifications.
-<p><dt>Locking<dd>The locking subsystem is the general-purpose lock manager used by Berkeley DB.
+<p><dt>Locking<dd>The Locking subsystem is the general-purpose lock manager used by Berkeley DB.
This module is useful outside of the Berkeley DB package for processes that
require a portable, fast, configurable lock manager.
-<p><dt>Logging<dd>The logging subsystem is the write-ahead logging used to support the Berkeley DB
-transaction model. It is largely specific to the Berkeley DB package, and
-unlikely to be useful elsewhere except as a supporting module for the
-Berkeley DB transaction subsystem.
+<p><dt>Logging<dd>The Logging subsystem is the write-ahead logging used to support the
+Berkeley DB transaction model. It is largely specific to the Berkeley DB package,
+and unlikely to be useful elsewhere except as a supporting module for
+the Berkeley DB transaction subsystem.
</dl>
-<p>Here is a more complete picture of the Berkeley DB library:
+<p>Here is a more complete picture of the Berkeley DB library:</p>
<p align=center><img src="bigpic.gif" alt="large">
-<p>In this example, the application makes calls to the Access Methods and to
-the transaction subsystem. The Access Methods and transaction subsystem
-in turn make calls into the Buffer Pool, Locking and Logging subsystems
-on behalf of the application.
-<p>While the underlying subsystems can each be called independently. For
-example, the Buffer Pool subsystem can be used apart from the rest of
-Berkeley DB by applications simply wanting a shared memory buffer pool, or
+<p>In this model, the application makes calls to the access methods and to
+the Transaction subsystem. The access methods and Transaction subsystems
+in turn make calls into the Memory Pool, Locking and Logging subsystems
+on behalf of the application.</p>
+<p>The underlying subsystems can be used independently by applications.
+For example, the Memory Pool subsystem can be used apart from the rest
+of Berkeley DB by applications simply wanting a shared memory buffer pool, or
the Locking subsystem may be called directly by applications that are
-doing their own locking outside of Berkeley DB. However, this usage is fairly
-rare, and most applications will either use only the Access Methods, or
-the Access Methods wrapped in calls to the transaction interfaces.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/am/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/progmodel.html"><img src="../../images/next.gif" alt="Next"></a>
+doing their own locking outside of Berkeley DB. However, this usage is not
+common, and most applications will either use only the access methods
+subsystem, or the access methods subsystem wrapped in calls to the Berkeley DB
+transaction interfaces.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../java/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/progmodel.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/progmodel.html b/db/docs/ref/arch/progmodel.html
index 04284f4f3..aad85ae76 100644
--- a/db/docs/ref/arch/progmodel.html
+++ b/db/docs/ref/arch/progmodel.html
@@ -1,41 +1,44 @@
-<!--$Id: progmodel.so,v 10.25 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: progmodel.so,v 10.27 2001/03/01 15:57:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Programming model</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Architecture</dl></h3></td>
-<td width="1%"><a href="../../ref/arch/bigpic.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/apis.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../arch/bigpic.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/apis.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Programming model</h1>
-<p>The Berkeley DB distribution is a database library, where the library is linked
-into the address space of the code which uses it. The code using Berkeley DB
-may be an application or it may be a server providing functionality to a
-number of clients via some form of inter-process or remote-process
-communication (IPC/RPC).
-<p>In the application model, one or more applications link the Berkeley DB library
-directly into their address spaces. There may be many threads of control
-in this model, as Berkeley DB supports locking for both multiple processes and
-for multiple threads within a process. This model provides significantly
-faster access to the database functionality, but implies trust among all
-threads of control sharing the database environment as they will have the
-ability to read, write and potentially corrupt each other's data.
-<p>In the client-server model, developers write a database server application
-that accepts requests via some form of IPC and issues calls to the Berkeley DB
-interfaces based on those requests. In this model, the database server
-is the only application linking the Berkeley DB library into its address space.
-The client-server model trades performance for protection, as it does not
-require that the applications share a protection domain with the server,
-but IPC/RPC is slower than a function call. Of course, in addition, this
-model greatly simplifies the creation of network client-server applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/arch/bigpic.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/apis.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Programming model</h3>
+<p>Berkeley DB is a database library, in which the library is linked into the
+address space of the application using it. The code using Berkeley DB may be
+a standalone application or it may be a server providing functionality
+to many clients via inter-process or remote-process communication
+(IPC/RPC).</p>
+<p>In the standalone application model, one or more applications link the
+Berkeley DB library directly into their address spaces. There may be many
+threads of control in this model because Berkeley DB supports locking for both
+multiple processes and for multiple threads within a process. This
+model provides significantly faster access to the database
+functionality, but implies trust among all threads of control sharing
+the database environment because they will have the ability to read,
+write and potentially corrupt each other's data.</p>
+<p>In the client-server model, developers write a database server
+application that accepts requests via some form of IPC/RPC, and issues
+calls to the Berkeley DB interfaces based on those requests. In this model,
+the database server is the only application linking the Berkeley DB library
+into its address space. The client-server model trades performance for
+protection because it does not require that the applications share a
+protection domain with the server, but IPC/RPC is slower than a function
+call. Of course, this model also greatly simplifies the creation of
+network client-server applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../arch/bigpic.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/apis.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/script.html b/db/docs/ref/arch/script.html
index 411cff460..4a5e3823f 100644
--- a/db/docs/ref/arch/script.html
+++ b/db/docs/ref/arch/script.html
@@ -1,29 +1,32 @@
-<!--$Id: script.so,v 10.12 2000/03/18 21:43:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: script.so,v 10.13 2001/10/27 17:01:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Scripting languages</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Architecture</dl></h3></td>
-<td width="1%"><a href="../../ref/arch/apis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/utilities.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../arch/apis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/utilities.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Scripting languages</h1>
+<h3 align=center>Scripting languages</h3>
<h3>Perl</h3>
-<p>Two Perl APIs are distributed with the Berkeley DB release. The Perl interface
-to Berkeley DB version 1.85 is called DB_File. The Perl interface to Berkeley DB
-version 2 is called BerkeleyDB. See <a href="../../ref/perl/intro.html">Using Berkeley DB with Perl</a> for more information.
+<p>Two Perl APIs are distributed with the Berkeley DB release. The Perl
+interface to Berkeley DB version 1.85 is called DB_File. The Perl interface
+to Berkeley DB version 2 and later is called BerkeleyDB. See
+<a href="../../ref/perl/intro.html">Using Berkeley DB with Perl</a> for more
+information.</p>
<h3>Tcl</h3>
<p>A Tcl API is distributed with the Berkeley DB release. See
<a href="../../ref/tcl/intro.html">Using Berkeley DB with Tcl</a> for more
-information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/arch/apis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/arch/utilities.html"><img src="../../images/next.gif" alt="Next"></a>
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../arch/apis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/utilities.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/arch/utilities.html b/db/docs/ref/arch/utilities.html
index 72bfe52b2..7d32fadc5 100644
--- a/db/docs/ref/arch/utilities.html
+++ b/db/docs/ref/arch/utilities.html
@@ -1,29 +1,31 @@
-<!--$Id: utilities.so,v 10.23 2000/05/23 20:57:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: utilities.so,v 10.25 2001/03/05 19:15:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Supporting utilities</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Architecture</dl></h3></td>
-<td width="1%"><a href="../../ref/arch/script.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../arch/script.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Supporting utilities</h1>
-<p>There are several stand-alone utilities that provide supporting
-functionality for the Berkeley DB environment:
+<h3 align=center>Supporting utilities</h3>
+<p>The following are the standalone utilities that provide supporting
+functionality for the Berkeley DB environment:</p>
<p><dl compact>
-<p><dt><a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a><dd>The <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> utility is the Berkeley DB RPC server, providing
-standard server functionality for client. applications.
-<p><dt><a href="../../utility/db_archive.html">db_archive</a><dd>The <a href="../../utility/db_archive.html">db_archive</a> utility supports database backup, archival and log
-file administration. It facilitates log reclamation and the creation of
-database snapshots. Generally, some form of log archival must be done if
-a database environment has been configured for logging or transactions.
+<p><dt><a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a><dd>The <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> utility is the Berkeley DB RPC server that
+provides standard server functionality for client applications.
+<p><dt><a href="../../utility/db_archive.html">db_archive</a><dd>The <a href="../../utility/db_archive.html">db_archive</a> utility supports database backup and archival,
+and log file administration. It facilitates log reclamation and the
+creation of database snapshots. Generally, some form of log archival
+must be done if a database environment has been configured for logging
+or transactions.
<p><dt><a href="../../utility/db_checkpoint.html">db_checkpoint</a><dd>The <a href="../../utility/db_checkpoint.html">db_checkpoint</a> utility runs as a daemon process, monitoring
the database log and periodically issuing checkpoints. It facilitates
log reclamation and the creation of database snapshots. Generally, some
@@ -38,7 +40,7 @@ file in a portable format.
<p><dt><a href="../../utility/db_load.html">db_load</a><dd>The <a href="../../utility/db_load.html">db_load</a> utility reads the flat-text file produced by
<a href="../../utility/db_dump.html">db_dump</a> and loads it into a database file.
<p><dt><a href="../../utility/db_printlog.html">db_printlog</a><dd>The <a href="../../utility/db_printlog.html">db_printlog</a> utility displays the contents of Berkeley DB log files
-in a human-readable and parseable format.
+in a human-readable and parsable format.
<p><dt><a href="../../utility/db_recover.html">db_recover</a><dd>The <a href="../../utility/db_recover.html">db_recover</a> utility runs after an unexpected Berkeley DB or system
failure to restore the database to a consistent state. Generally, some
form of database recovery must be done if databases are being modified.
@@ -54,9 +56,9 @@ as part of the standard Berkeley DB API. This means that threaded applications
can easily create a thread that calls the same Berkeley DB functions as do the
utilities. This often simplifies an application environment by removing
the necessity for multiple processes to negotiate database and database
-environment creation and shutdown.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/arch/script.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+environment creation and shut down.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../arch/script.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/bdb/bdb_fig_1.gif b/db/docs/ref/bdb/bdb_fig_1.gif
new file mode 100644
index 000000000..25369a3e4
--- /dev/null
+++ b/db/docs/ref/bdb/bdb_fig_1.gif
Binary files differ
diff --git a/db/docs/ref/bdb/bind_fig_1.gif b/db/docs/ref/bdb/bind_fig_1.gif
new file mode 100644
index 000000000..e73150c19
--- /dev/null
+++ b/db/docs/ref/bdb/bind_fig_1.gif
Binary files differ
diff --git a/db/docs/ref/bdb/collection_fig_1.gif b/db/docs/ref/bdb/collection_fig_1.gif
new file mode 100644
index 000000000..db448a5a4
--- /dev/null
+++ b/db/docs/ref/bdb/collection_fig_1.gif
Binary files differ
diff --git a/db/docs/ref/bdb/cs_bdb.html b/db/docs/ref/bdb/cs_bdb.html
new file mode 100644
index 000000000..3ac9a7fd1
--- /dev/null
+++ b/db/docs/ref/bdb/cs_bdb.html
@@ -0,0 +1,247 @@
+<!--$Id: cs_bdb.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Access Methods and Transaction Options</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb/cs_bdb_bind.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_collection.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Access Methods and Transaction Options</h3>
+<p align=center><img src="bdb_fig_1.gif" alt="bdb_fig_1">
+<h3>Using Java API</h3>
+<p>A
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+ manages the resources for
+one or more data stores.</p>
+<p>A
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ objects represent a single
+database and are created with a reference to the environment. An access
+method must be chosen for each database.</p>
+<p>
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ and
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ objects are created to wrap the
+database objects for use as a primary store or index. Data stores and data
+indices are then used to create collection views, as described in the
+<a href="cs_bdb_collection.html">com.sleepycat.bdb.collection</a>
+ package.</p>
+<h3>Using Transactions</h3>
+<p>Once you have an environment, one or more data stores and data
+indices, and one or more collection views, you are ready to access (read
+and write) stored data. For a transactional environment, a transaction
+must be started before accessing data, and must be committed or aborted
+after access is complete. Java API provides several ways of managing
+transactions.</p>
+<p>The recommended technique is to use the
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ class along with
+your own implementation of the
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</a>
+ interface.
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ will call your
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</a>
+ implementation
+class to perform the data access or work of the transaction. This
+technique has the following benefits:</p>
+<p><ul type=disc>
+<li>Transaction exceptions will be handled transparently and retries will be
+performed when deadlocks are detected.
+<li>The transaction will automatically be committed if your
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork()">TransactionWorker.doWork()</a>
+ method
+returns normally, or will be aborted if doWork() throws an exception.
+<li>TransactionRunner can be used for non-transactional environments
+as well, allowing you to write your application independently of the
+environment.
+</ul>
+<p>If you don't want to use
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+, the alternative is
+to use the class
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</a>
+.</p>
+<ol>
+<p><li>Obtain a CurrentTransaction instance by calling the
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#getInstance(com.sleepycat.db.DbEnv)">CurrentTransaction.getInstance(com.sleepycat.db.DbEnv)</a>
+ method. The instance returned can be
+used by all threads in a program.
+<p><li>Use
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#beginTxn()">CurrentTransaction.beginTxn()</a>
+,
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#commitTxn()">CurrentTransaction.commitTxn()</a>
+ and
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#abortTxn()">CurrentTransaction.abortTxn()</a>
+to directly begin, commit and abort transactions.
+</ol>
+<p>If you choose to use CurrentTransaction directly you must handle the
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+ exception and
+perform retries yourself. Also note that CurrentTransaction may only
+be used in a transactional environment.</p>
+<p>The Java API supports nested transactions. If
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)">TransactionRunner.run(com.sleepycat.bdb.TransactionWorker)</a>
+ or
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#beginTxn()">CurrentTransaction.beginTxn()</a>
+is called while another transaction is active, a child transaction will be
+created. When
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run(com.sleepycat.bdb.TransactionWorker)">TransactionRunner.run(com.sleepycat.bdb.TransactionWorker)</a>
+ returns, or when
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#commitTxn()">CurrentTransaction.commitTxn()</a>
+ or
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html#abortTxn()">CurrentTransaction.abortTxn()</a>
+is called, the parent transaction becomes active again. Note that because only
+one transaction is active per-thread, it is impossible to accidentally use a
+parent transaction while a child transaction is active.</p>
+<p>The Java API also supports transaction auto-commit and dirty-read via
+the
+<a href="../../java/com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</a>
+ class.</p>
+<p>If auto-commit is enabled for a collection or for the entire
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+, a transaction will be started
+and committed automatically for each write operation if no transaction
+is already active. See
+<a href="../../java/com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</a>
+ for how to create an auto-commit collection and
+<a href="../../java/com/sleepycat/db/DbEnv.html#setFlags">DbEnv.setFlags</a>
+ for how to set
+auto-commit for an entire environment.</p>
+<p>When dirty-read is enabled for a collection, data will be read that has
+been modified by another transaction but not committed. Using dirty-read can
+improve concurrency since reading will not wait for other transactions to
+complete. For a non-transactional container, dirty-read has no effect. See
+<a href="../../java/com/sleepycat/bdb/collection/StoredCollections.html">StoredCollections</a>
+ for how to
+create a dirty-read collection.</p>
+<h3>Transaction Rollback</h3>
+<p>When a transaction is aborted (or rolled back) the application is
+responsible for discarding references to any data objects that were modified
+during the transaction. Since Java API treats data by value, not by
+reference, neither the data objects nor Java API objects contain status
+information indicating whether the data objects are 1- in sync with the
+database, 2- dirty (contain changes that have not been written to the
+database), 3- stale (were read previously but have become out of sync with
+changes made to the database), or 4- contain changes that cannot be committed
+because of an aborted transaction.</p>
+<p>For example, a given data object will reflect the current state of the
+database after reading it within a transaction. If the object is then modified
+it will be out of sync with the database. When the modified object is written
+to the database it will then be in sync again. But if the transaction is
+aborted the object will then be out of sync with the database. References to
+such objects should no longer be used. When these objects are needed later
+they should be read fresh from the database.</p>
+<p>When an existing stored object is to be updated, special care should be
+taken to read the data, then modify it, and then write it to the
+database, all within a single transaction. If a stale data object (an
+object that was read previously but has since been changed in the
+database) is modified and then written to the database, database changes
+may be overwritten unintentionally.</p>
+<p>When an application enforces rules about concurrent access to specific
+data objects or all data objects, the rules described here can be
+relaxed. For example, if the application knows that a certain object
+is only modified in one place, it may be able to reliably keep a current
+copy of that object. In that case, it is not necessary to reread the
+object before updating it. That said, if arbitrary concurrent access
+is to be supported, the safest approach is to always read data before
+modifying it within a single transaction.</p>
+<p>Similar concerns apply to using data that may have become stale. If the
+application depends on current data, it should be read fresh from the database
+just before it is used.</p>
+<h3>Selecting Access Methods</h3>
+<p>For each data store and secondary index you must choose from one of the
+access methods in the table below.</p>
+<p>The access method determines not only whether sorted keys or duplicate
+keys are supported, but also what types of collection views may be used
+and what restrictions are imposed on the collection views.</p>
+<table border=1 align=center>
+<tr><th>Access Method</th><th>Ordered</th><th>Duplicates</th><th>Record Numbers</th><th>Berkeley DB Type</th><th>Berkeley DB Flags</th></tr>
+<tr><td>BTREE-UNIQUE</td><td>Yes</td><td>No</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+</td><td>None</td></tr>
+<tr><td>BTREE-DUP</td><td>Yes</td><td>Yes, Unsorted</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUP">Db.DB_DUP</a>
+</td></tr>
+<tr><td>BTREE-DUPSORT</td><td>Yes</td><td>Yes, Sorted</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUPSORT">Db.DB_DUPSORT</a>
+</td></tr>
+<tr><td>BTREE-RECNUM</td><td>Yes</td><td>No</td><td>Yes, Renumbered</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECNUM">Db.DB_RECNUM</a>
+</td></tr>
+<tr><td>HASH-UNIQUE</td><td>No</td><td>No</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+</td><td>None</td></tr>
+<tr><td>HASH-DUP</td><td>No</td><td>Yes, Unsorted</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUP">Db.DB_DUP</a>
+</td></tr>
+<tr><td>HASH-DUPSORT</td><td>No</td><td>Yes, Sorted</td><td>No</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUPSORT">Db.DB_DUPSORT</a>
+</td></tr>
+<tr><td>QUEUE</td><td>Yes</td><td>No</td><td>Yes, Fixed</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_QUEUE">Db.DB_QUEUE</a>
+</td><td>None</td></tr>
+<tr><td>RECNO</td><td>Yes</td><td>No</td><td>Yes, Fixed</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECNO">Db.DB_RECNO</a>
+</td><td>None</td></tr>
+<tr><td>RECNO-RENUMBER</td><td>Yes</td><td>No</td><td>Yes, Renumbered</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECNO">Db.DB_RECNO</a>
+</td><td>
+<a href="../../java/com/sleepycat/db/Db.html#DB_RENUMBER">Db.DB_RENUMBER</a>
+</td></tr>
+</table>
+<p>Please see <a href="../../ref/am_conf/intro.html">Available Access Methods</a>
+for more information on access method configuration.</p>
+<h3>Access Method Restrictions</h3>
+<p>The restrictions imposed by the access method on the database model are:</p>
+<p><ul type=disc>
+<li>If keys are ordered then data may be enumerated in key order and key
+ranges may be used to form subsets of a data store. The SortedMap and
+SortedSet interfaces are supported for collections with ordered keys.
+<li>If duplicate keys are allowed then more than one value may be associated
+with the same key. This means that the data store cannot be strictly
+considered a map--it is really a multi-map. See
+<a href="cs_bdb_collection.html">com.sleepycat.bdb.collection</a>
+ for implications on the use
+of the collection interfaces.
+<li>If duplicate keys are allowed for a data store then the data store may not
+have secondary indices.
+<li>For secondary indices with duplicates, the duplicates must be sorted. This
+restriction is imposed by Java API.
+<li>If duplicates are sorted, then all values for the same key must be distinct.
+This restriction is imposed by Java API.
+<li>If duplicates are unsorted, then values for the same key may be repeated
+("duplicate duplicates").
+<li>If record number keys are used then the number of records is limited to
+the maximum value of an unsigned 32-bit integer.
+<li>If record number keys are renumbered, then standard List add/remove
+behavior is supported but concurrency/performance is reduced.
+</ul>
+<p>See the
+<a href="cs_bdb_collection.html">com.sleepycat.bdb.collection</a>
+ package for more
+information on how access methods impact the use of stored collections.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/cs_bdb_bind.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_collection.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb/cs_bdb_bind.html b/db/docs/ref/bdb/cs_bdb_bind.html
new file mode 100644
index 000000000..3551398e7
--- /dev/null
+++ b/db/docs/ref/bdb/cs_bdb_bind.html
@@ -0,0 +1,246 @@
+<!--$Id: cs_bdb_bind.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Using Data Formats and Bindings</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb/overview.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Using Data Formats and Bindings</h3>
+<p align=center><img src="bind_fig_1.gif" alt="bind_fig_1">
+<h3>Interfaces for defining data formats and data-to-object
+bindings.</h3>
+<p>Data formats determine how keys and values are represented as
+stored data (byte arrays) in the database. Data bindings determine
+how stored data is converted to and from Java objects.</p>
+<p>The selection of data formats and bindings is, in general,
+independent of the selection of access methods and collection views.
+In other words, any format and binding can be used with any access
+method or collection, with one exception described under Record Numbers.</p>
+<p><b>Note:</b> In this document formats and bindings are described
+in the context of their use for stored data in a database. However,
+formats and bindings may also be used independently of a database. Using
+the
+<a href="../../java/com/sleepycat/bdb/bind/SimpleBuffer.html">SimpleBuffer</a>
+ class, bindings may be
+used to operate on an arbitrary byte array. This allows using bindings
+when data is to be written to a file or sent over a network, for example.
+The
+<a href="cs_bdb_bind.html">com.sleepycat.bdb.bind</a>
+ package has no dependencies on the
+<a href="cs_bdb.html">com.sleepycat.bdb</a>
+ package.</p>
+<h3>Selecting Data Formats</h3>
+<p>For the key and value of each data store, and for the key of each
+data index, you may select one of the following formats.</p>
+<table border=1 align=center>
+<tr><th>Format</th><th>Ordered</th><th>Description</th></tr>
+<tr><td>
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+</td><td>No</td><td>The data is stored using a compact form of Java serialization, where the
+class descriptions are stored separately in a catalog data store. Arbitrary
+Java objects are supported.</td></tr>
+<tr><td>
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</a>
+</td><td>Yes</td><td>The data is stored using a series of fixed length primitive values or zero terminated character arrays (strings). Class/type evolution is not supported.</td></tr>
+<tr><td>
+<a href="../../java/com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</a>
+</td><td>Yes</td><td>The data is a 32-bit integer stored in a platform-dependent format.</td></tr>
+<tr><td>Custom format</td><td>User-defined</td><td>The data storage format and ordering is determined by the custom
+implementation.</td></tr>
+</table>
+<p>As shown in the table above, the tuple format supports ordering
+while the serial format does not. This means that tuples should be
+used instead of serial data for keys in an ordered database.</p>
+<p>The tuple format uses less space and its bindings execute faster
+than the serial format. But once a tuple is written to a database, the
+order of fields in the tuple may not be changed and fields may not be
+deleted. The only type evolution allowed is the addition of fields at
+the end of the tuple, and this must be explicitly supported by the
+bindings.</p>
+<p>The serial format supports the full generality of Java serialization
+including type evolution. But serialized data can only be accessed by Java
+applications, its size is larger, and its bindings are slower to execute.</p>
+<h3>Record Number Format</h3>
+<p>Any use of an access method with record number keys, and therefore
+any use of a stored List view, requires using
+<a href="../../java/com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</a>
+ for the key
+format. Since Berkeley DB stores record number keys using a platform-dependent
+byte order,
+<a href="../../java/com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</a>
+ is needed
+to store record numbers properly.
+<a href="../../java/com/sleepycat/bdb/RecordNumberBinding.html">RecordNumberBinding</a>
+ should also normally
+be used, although it is possible to implement your own binding for
+record numbers. See <a href="../../ref/am_conf/logrec.html">logical record
+numbers</a> for more information on Berkeley DB record numbers.</p>
+<p><b>Warning:</b> You may not use
+<a href="../../java/com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</a>
+ except with record
+number keys, as determined by the access method. Using
+<a href="../../java/com/sleepycat/bdb/RecordNumberFormat.html">RecordNumberFormat</a>
+ in other cases will
+create a database that is not portable between platforms. Java API will
+throw an
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</a>
+ in such cases,
+when constructing the
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ or
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+.</p>
+<h3>Custom Data Formats</h3>
+<p>To create a custom format, simply provide a class that implements
+the
+<a href="../../java/com/sleepycat/bdb/bind/DataFormat.html">DataFormat</a>
+ interface, and then
+create bindings that use this format. The Java API imposes no restrictions
+on data formats. It is up to the application to ensure that formats are
+platform-independent when portability is a requirement.</p>
+<h3>Using Data Formats</h3>
+<p>Data formats are objects which implement the
+<a href="../../java/com/sleepycat/bdb/bind/DataFormat.html">DataFormat</a>
+ interface, which is a tag
+interface with no methods. Format objects are used primarily to identify
+a format, not to operate on the data. Bindings, which are described
+later, operate on the data.</p>
+<p>To create a format, construct a format class such as
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+ or
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</a>
+. Format objects are
+specified when creating bindings, stores and indices.</p>
+<p>An application should create a format for each unique data
+representation. The Java API can then perform checks to ensure that stores,
+indices, bindings and key extractors all use formats consistently. This
+can help uncover bugs before data is written to the database.</p>
+<p>Formats are determined to be equal by calling their equals() method,
+not by comparing their classes. This allows an application to create two
+tuple formats of the same class, for example, for a Part number and a
+Supplier number. Even though the physical format of the keys in this case
+may be the same, they are considered to be two distinct formats.</p>
+<p>For example, an application may create two data stores, Parts and
+Suppliers, specifying two different tuple formats for their keys, and two
+different serial formats for their values. When bindings are created for
+these, specific formats are associated with each binding. When creating a
+data store or data index, specific formats are also specified. The Java API
+compares data formats that should be equal and throws
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</a>
+ when they are not equal.
+For example, the key format of a data store must be equal to the key format
+of a binding used with that date store.</p>
+<h3>Selecting Data Bindings</h3>
+<p>There are two types of binding interfaces. Simple data bindings
+implement the
+<a href="../../java/com/sleepycat/bdb/bind/DataBinding.html">DataBinding</a>
+ interface
+and can be used for key or value objects. Entity bindings implement the
+<a href="../../java/com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</a>
+ interface and are used for
+combined key and value objects called entities.</p>
+<p>Simple data bindings map between the key or value data stored by
+Berkeley DB and a key or value object. This is a simple one-to-one mapping
+and a single data format is used for each binding.</p>
+<p>Simple data bindings are easy to implement and in some cases require
+no coding. For example, a
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</a>
+ can be used for
+keys or values without writing any additional code.</p>
+<p>Entity bindings must divide an entity object into its key and
+value data, and then combine the key and value data to re-create the
+entity object. This is a two-to-one mapping and two data formats are
+used for each binding.</p>
+<p>Entity bindings are useful when a stored application object naturally
+has its primary key as a property, which is very common. For example, an
+Employee object would naturally have an EmployeeNumber property (its
+primary key) and an entity binding would then be needed. Of course, entity
+bindings are more complex to implement, especially because their key and
+data formats may be different.</p>
+<p>Note that even when an entity binding is used a key binding is also
+usually needed. The key binding is used, for example, to define key objects
+that are passed to the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.get().html">Map.get()</a>
+ method. A key
+object is passed to this method even though it may return an entity that
+also contains the key.</p>
+<h3>Implementing Data Bindings</h3>
+<p>There are two ways to implement bindings. The first way is to create
+a binding class that implements one of the two binding interfaces,
+<a href="../../java/com/sleepycat/bdb/bind/DataBinding.html">DataBinding</a>
+ or
+<a href="../../java/com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</a>
+. For each built-in data
+format there are a number of abstract classes that make
+this easier. For example, you can extend
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</a>
+ to implement a simple
+binding for a tuple key or value. Abstract classes are also provided for
+entity bindings and are named after the format names of the key and value.
+For example, you can extend
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</a>
+ to
+implement an entity binding with a tuple key and serial value.</p>
+<p>Another way to implement bindings is with marshalling interfaces.
+These are interfaces which perform the binding operations and are implemented
+by the key, value or entity classes themselves. With marshalling you use
+a binding which calls the marshalling interface and you implement the
+marshalling interface for each key, value or entity class. For example, you
+can use
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.html">TupleMarshalledBinding</a>
+along with key or value classes that implement the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.html">MarshalledTupleData</a>
+ interface.</p>
+<h3>Using Data Bindings</h3>
+<p>Bindings are specified whenever a stored collection is created. A
+key binding must be specified for map, key set and entry set views. A value
+binding or entity binding must be specified for map, list, value set and
+entry set views.</p>
+<p>Any number of bindings may be created for the same stored data. This
+allows multiple views over the same data. For example, a tuple might be
+bound to an array of values or to a class with properties for each object.</p>
+<p>It is important to be careful of bindings that only use a subset of the
+stored data. This can be useful to simplify a view or to hide information
+that should not be accessible. However, if you write information using these
+bindings you may create stored data that is invalid from the application's
+point of view. It is up to the application to guard against this by creating
+a read-only collection when such bindings are used.</p>
+<h3>Key Extractors</h3>
+<p>Key extractors are needed whenever database indices are used. For
+each database index (
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+) or
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ a key extractor is
+used to derive index key data from key/value data. Key extractors are
+objects whose classes implement the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ interface.</p>
+<p>Like bindings, key extractors may be implemented using a separate key
+extractor class or using a marshalling interface. Abstract key extractor
+classes and marshalling interfaces are provided in the
+com.sleepycat.bdb.bind.tuple and com.sleepycat.bdb.bind.serial packages.</p>
+<p>Unlike bindings, key extractors fundamentally operate on key and
+value data, not necessarily on the objects derived from data by bindings.
+In this sense key extractors are a part of a database definition, and may
+be independent of the various bindings that may be used to view data in a
+database. However, key extractors are not prohibited from using higher
+level objects produced by bindings, and doing so may be convenient for some
+applications. For example, marshalling interfaces, which are defined for
+objects produced by bindings, are a convenient way to define key
+extractors.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/overview.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb/cs_bdb_collection.html b/db/docs/ref/bdb/cs_bdb_collection.html
new file mode 100644
index 000000000..a9569993d
--- /dev/null
+++ b/db/docs/ref/bdb/cs_bdb_collection.html
@@ -0,0 +1,436 @@
+<!--$Id: cs_bdb_collection.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Using Stored Collections</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb/cs_bdb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_serial.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Using Stored Collections</h3>
+<p align=center><img src="collection_fig_1.gif" alt="collection_fig_1">
+<h3>The implementation of stored collections and related
+transactional access methods.</h3>
+<p>When a stored collection is created it is based on either a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ or a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+. When a data store is used,
+the primary key of the data store is used as the collection key. When a
+data index is used, the index key is used as the collection key. Indexed
+collections can be used for reading elements and removing elements but not
+for adding or updating elements.</p>
+<h3>Stored Collection and Access Methods</h3>
+<p>The access method of the data store or index restricts the use of
+the stored collection in certain respects. Most of these restrictions have to
+do with
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</a>
+ interfaces; for
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</a>
+ interfaces, most all access modes are fully
+supported since the Berkeley DB model is map-like.</p>
+<p><ul type=disc>
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</a>
+interfaces may only be used if keys are ordered. This means ordered keys are
+required for creating a
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedEntrySet.html">StoredSortedEntrySet</a>
+,
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedKeySet.html">StoredSortedKeySet</a>
+,
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</a>
+, or
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</a>
+.
+<li>All iterators for stored collections implement the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</a>
+ interface as well as the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</a>
+ interface.
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#hasPrevious()">ListIterator.hasPrevious()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previous()">ListIterator.previous()</a>
+ work for all access
+methods. However, the following
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</a>
+method behavior is dependent on the access method.
+ <p><ul type=disc>
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#nextIndex()">ListIterator.nextIndex()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previousIndex()">ListIterator.previousIndex()</a>
+ only work when
+ record number keys are used, and throw
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+ otherwise.
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ inserts before the
+ current position and renumbers following keys if the RECNO-RENUMBER
+ access method is used.
+ <li> For all access methods other than RECNO-RENUMBER:
+ <p><ul type=disc>
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ throws
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+ if duplicates
+ are not allowed.
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ inserts a duplicate
+ before the current position if duplicates are unsorted.
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ inserts a duplicate in
+ sorted order if duplicates are sorted.
+ </ul>
+ <li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#set()">ListIterator.set()</a>
+ throws
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+ if duplicates are
+ sorted, since updating with sorted duplicates would change the iterator
+ position.
+ </ul>
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#setValue()">Map.Entry.setValue()</a>
+ throws
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+ if duplicates are
+sorted.
+<li>Only the access methods that use a record number key may be used with a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html">List</a>
+ view.
+<li>To create a stored List that supports the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add()">List.add()</a>
+ method, only the RECNO-RENUMBER
+access method may be used.
+<li>For List access methods that do not support
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add()">List.add()</a>
+ (RECNO, QUEUE, and BTREE-RECNUM):
+<p><ul type=disc>
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add()">List.add()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ always throw
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#remove()">List.remove()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#remove()">ListIterator.remove()</a>
+ do not cause list
+indices to be renumbered. However, iterators will skip the removed
+values.
+</ul>
+<p>For these access methods, stored Lists are most useful as read-only
+collections where indices are not required to be sequential.</p>
+<li>When the access method allows duplicate keys the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+ interfaces are modified in several
+ways as described in the next section.
+</ul>
+<h3>Differences between Stored Collections and Standard Java
+Collections</h3>
+<p>Stored collections have the following differences with the standard
+Java collection interfaces. Some of these are interface contract
+violations.</p>
+<p>The Java collections interface does not support duplicate keys
+(multi-maps or multi-sets). When the access method allows duplicate keys,
+the collection interfaces are defined as follows.</p>
+<p><ul type=disc>
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet()">Map.entrySet()</a>
+ may contain multiple
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</a>
+ objects with the same key.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#keySet()">Map.keySet()</a>
+ always contains unique keys, it
+does not contain duplicates.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values()">Map.values()</a>
+ contains all values including
+the values associated with duplicate keys.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put()">Map.put()</a>
+ appends a duplicate if the key
+already exists rather than replacing the existing value, and always
+returns null.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#remove()">Map.remove()</a>
+ removes all duplicates for
+the specified key.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get()">Map.get()</a>
+ returns the first duplicate for
+the specified key.
+<li>
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#duplicates(Object)">StoredMap.duplicates(Object)</a>
+is an additional method for returning the values for a given key as a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+.
+</ul>
+<p>Other differences are:</p>
+<p><ul type=disc>
+<li>All iterators for stored collections must be explicitly closed with
+<a href="../../java/com/sleepycat/bdb/collection/StoredIterator.html#close()">StoredIterator.close()</a>
+.
+The static method
+<a href="../../java/com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)">StoredIterator.close(java.util.Iterator)</a>
+allows calling close for all iterators without harm to iterators that are
+not from stored collections, and also avoids casting. If a stored iterator
+is not closed, unpredictable behavior including process death may result.
+<li>Collection.size() and Map.size() always throws
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+. This is because
+the number of records in a database cannot be determined reliably or
+cheaply.
+<li>Because the size() method cannot be used, the bulk operation methods of
+standard Java collections cannot be passed stored collections as
+parameters, since the implementations rely on size(). However, the bulk
+operation methods of stored collections can be passed standard Java
+collections as parameters.
+<p>
+<code>storedCollection.addAll(standardCollection);</code> is allowed while
+<code>standardCollection.addAll(storedCollection);</code> is <b>not</b>
+allowed.
+<p>This restriction applies to the standard collection constructors that
+take a Collection parameter (copy constructors), the Map.putAll()
+method, and the following Collection methods: addAll(), containsAll(),
+removeAll() and retainAll().</p>
+<li>The ListIterator.nextIndex() method returns Integer.MAX_VALUE for stored
+lists when positioned at the end of the list, rather than returning the list
+size as specified by the ListIterator interface. Again, this is because the
+database size is not available.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</a>
+ objects cannot be used and the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#comparator()">SortedMap.comparator()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html#comparator()">SortedSet.comparator()</a>
+ methods always
+return null. Comparators are not supported in Java API because of the impact
+on performance -- with a stored collection, keys and values would have to
+be converted from byte arrays to objects each time two data items are
+compared.
+<li>The natural ordering of a stored collection is data byte order, whether the
+data classes implement the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html">Comparable</a>
+ interface or
+not. The
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Comparable.html">Comparable</a>
+ interface is not supported for
+the same reason that the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Comparator.html">Comparator</a>
+ interface is
+not supported.
+<li>The
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#equals()">Object.equals()</a>
+ method is not used to
+determine whether a key or value is contained in a collection, to locate
+a value by key, etc. Instead the byte array representation of the keys
+and values are used. However, the equals() method <b>is</b> called
+for each key and value when comparing two collections for equality. It
+is the responsibility of the application to make sure that the equals()
+method returns true if and only if the byte array representations of the
+two objects are equal. Normally this occurs naturally since the byte array
+representation is derived from the object's fields.
+</ul>
+<h3>Other Stored Collection Characteristics</h3>
+<p>The following characteristics of stored collections are extensions
+of the definitions in the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/package-summary.html">java.util</a>
+ package. These
+differences do not violate the Java collections interface contract.</p>
+<p><ul type=disc>
+<li>All stored collections are thread safe (can be used by multiple threads
+concurrently) except for iterators, whenever the Berkeley DB Concurrent Data
+Store or Transactional Data Store environment is used. Locking is handled
+by the Berkeley DB environment. To access a collection from multiple threads,
+creation of synchronized collections using the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collections.html">Collections</a>
+ class is not necessary except when
+using the Data Store environment. Iterators, however, should always be
+used only by a single thread.
+<li>All stored collections may be read-only if desired by passing false for the
+writeAllowed parameter of their constructor. Creation of immutable collections
+using the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collections.html">Collections</a>
+ class is not necessary.
+<li>A stored collection is partially read-only if an index is used.
+Specifically, values may not be added or updated. The following methods will
+throw
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+ when an index
+is used:
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put()">Map.put()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add()">Collection.add()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#set()">List.set()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#set()">ListIterator.set()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#setValue()">Map.Entry.setValue()</a>
+. However, removing values
+via an index is allowed.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#entrySet()">SortedMap.entrySet()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#keySet()">SortedMap.keySet()</a>
+ return a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+, not just a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</a>
+ as specified in Java collections interface.
+This allows using the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+ methods on the
+returned collection.
+<li>
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html#values()">SortedMap.values()</a>
+ returns a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+, not just a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+, whenever the keys of the map can be
+derived from the values using an entity binding. Note that the sorted set
+returned is not really a set if duplicates are allowed, since it is
+technically a collection; however, the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+methods (for example, subSet()), can still be used.
+<li>For
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</a>
+ views, additional subSet() and subMap()
+methods are provided that allow control over whether keys are treated as
+inclusive or exclusive values in the key range.
+<li>Keys and values are stored by value, not by reference. This is because
+objects that are added to collections are converted to byte arrays (by
+bindings) and stored in the database. When they are retrieved from the
+collection they are read from the database and converted from byte arrays to
+objects. Therefore, the object reference added to a collection will not be
+the same as the reference later retrieved from the collection.
+<li>A runtime exception,
+<a href="../../java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</a>
+, is thrown
+whenever database exceptions occur which are not runtime exceptions. The
+<a href="../../java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html#getCause()">RuntimeExceptionWrapper.getCause()</a>
+method can be called to get the underlying exception.
+<li>All iterators for stored collections implement the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html">ListIterator</a>
+ interface as well as the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</a>
+ interface. This is to allow use of the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#hasPrevious()">ListIterator.hasPrevious()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#previous()">ListIterator.previous()</a>
+ methods, which work
+for all collections since Berkeley DB provides bidirectional cursors.
+<li>All stored collections have a
+<a href="../../java/com/sleepycat/bdb/collection/StoredCollection.html#iterator(boolean)">StoredCollection.iterator(boolean)</a>
+method that allows creating a read-only iterator for a writable collection.
+For the standard
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#iterator()">Collection.iterator()</a>
+ method,
+the iterator is read-only only when the collection is read-only. Read-only
+iterators are important for using the Berkeley DB Concurrent Data Store
+environment, since only one write cursors may be open at one time.
+<li>Iterator stability for stored collections is greater than the iterator
+stability defined by the Java collections interfaces. Stored iterator
+stability is the same as the cursor stability defined by Berkeley DB.
+<li>When an entity binding is used, updating (setting) a value is not allowed
+if the key in the entity is not equal to the original key. For example,
+calling
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put()">Map.put()</a>
+ is not allowed when the
+key parameter is not equal to the key of the entity parameter.
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put()">Map.put()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#set()">List.set()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#set()">ListIterator.set()</a>
+, and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html#setValue()">Map.Entry.setValue()</a>
+ will throw
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</a>
+ in this situation.
+<li>Adding and removing items from stored lists is not allowed for sublists.
+This is simply an unimplemented feature and may be changed in the future.
+Currently for sublists the following methods throw
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/UnsupportedOperationException.html">UnsupportedOperationException</a>
+:
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#add()">List.add()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/List.html#remove()">List.remove()</a>
+,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#add()">ListIterator.add()</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/ListIterator.html#remove()">ListIterator.remove()</a>
+.
+<li>Two extension methods allow adding a new record with an automatically assigned
+key:
+<a href="../../java/com/sleepycat/bdb/collection/StoredList.html#append(java.lang.Object)">StoredList.append(java.lang.Object)</a>
+ and
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#append(java.lang.Object)">StoredMap.append(java.lang.Object)</a>
+.
+Record number assignment by the database itself is supported for QUEUE, RECNO
+and RECNO-RENUMBER databases. An application-defined
+<a href="../../java/com/sleepycat/bdb/PrimaryKeyAssigner.html">PrimaryKeyAssigner</a>
+ may also be used.
+</ul>
+<h3>Why Java Collections for Berkeley DB?</h3>
+<p>The Java collections interface was chosen as the best Java API for
+Berkeley DB given these requirements:</p>
+<ol>
+<p><li>provide the Java developer with an API that is as familiar and easy to use
+as possible
+<p><li>provide access to all, or a large majority, of the features of the
+underlying Berkeley DB storage system
+<p><li>compared to the Berkeley DB API, provide a higher-level API that is
+oriented toward Java developers
+<p><li>for ease of use, support object-to-data bindings, per-thread transactions,
+and some traditional database features such as foreign keys
+<p><li>provide a thin layer that can be thoroughly tested and which does not
+significantly impact the reliability and performance of Berkeley DB
+</ol>
+<p>Admittedly there are several things about the Java Collections API
+that don't quite fit with Berkeley DB or with any transactional database, and
+therefore there are some new rules for applying the Java Collections API.
+In addition, the Java API data store, index and foreign key APIs are outside
+the scope of the Java Collections API and are therefore somewhat disjoint.
+However, these disadvantages are considered to be smaller than the
+disadvantages of the alternatives:</p>
+<p><ul type=disc>
+<li>A new API not based on the Java Collections API could have been designed
+that maps well to Berkeley DB but is higher-level. However, this would require
+designing an entirely new model. The exceptions for using the Java Collections
+API are considered easier to learn than a whole new model. A new model would
+also require a long design stabilization period before being as complete and
+understandable as either the Java Collections API or the Berkeley DB API.
+<li>The ODMG API or another object persistence API could have been implemented
+on top of Berkeley DB. However, an object persistence implementation would add
+much code and require a long stabilization period. And while it may work well
+for applications that require object persistence, it would probably never
+perform well enough for many other applications.
+</ul>
+<p>In fact both of these alternatives were started and then abandoned
+for the reasons given.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/cs_bdb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_serial.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb/cs_bdb_serial.html b/db/docs/ref/bdb/cs_bdb_serial.html
new file mode 100644
index 000000000..73d026847
--- /dev/null
+++ b/db/docs/ref/bdb/cs_bdb_serial.html
@@ -0,0 +1,40 @@
+<!--$Id: cs_bdb_serial.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Serialized Object Storage</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb/cs_bdb_collection.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Serialized Object Storage</h3>
+<h3>Storage of Serialized Objects</h3>
+<p>Serialization of an object graph includes class information as well as
+instance information. If more than one instance of the same class is
+serialized as separate serialization operations then the class
+information exists more than once. To eliminate this inefficiency the
+<a href="../../java/com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</a>
+ class will
+store the class format for all database records of format
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+. The
+StoredClassCatalog must be opened within the environment before the
+SerialFormat instances. Remember that if your databases will be running
+within transactions you must open them within a transaction. Refer to
+the <code>shipment</code> sample code for examples (the class
+<code>SampleDatabase</code> in
+<code>examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleDatabase.java</code>
+is a good place to start understanding how to setup this type of
+environment).</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/cs_bdb_collection.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb/faq.html b/db/docs/ref/bdb/faq.html
new file mode 100644
index 000000000..57e1fea56
--- /dev/null
+++ b/db/docs/ref/bdb/faq.html
@@ -0,0 +1,44 @@
+<!--$Id: faq.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Java API FAQ</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb/cs_bdb_serial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Java API FAQ</h3>
+<ol>
+<p><li><b>How does the Java API relate to the J2EE standard? Does it
+implement any part of that standard? Does it implement any other
+Java standard?</b>
+<p>The Java API does not currently implement any part of the J2EE standard.
+That said, it does implement the implicit standard for Java
+<a href="http://java.sun.com/j2se/1.3/docs/guide/collections/">Java Collections</a>. The concept of a transaction exists in several
+Java packages (J2EE, XA, JINI to name a few). Support for these APIs
+will be added based on demand in future versions of Berkeley DB.</p>
+<p><li><b>Will Java API function properly when using Java version 1.4?</b>
+<p>The minimum required version is J2SE 1.3. Sun claims, and it has been
+our experience, that for the most part 1.4.1 is backwards compatible with
+1.3.1. It is highly likely it will, we recommend that you run the
+supplied test suites against the specific Java VM on the specific platform
+on which you plan to ship your product to ensure compatibility.</p>
+<p><li><b>On what platforms is Java API supported?</b>
+<p>All platforms supported by Berkeley DB that have a J2SE 1.3.1 compliant JVM.</p>
+<p><li><b>Can I use Java API from within a EJB, a Servlet or a JSP page?</b>
+<p>Yes. The Java API can be used from within all the popular J2EE application
+servers in many different ways.</p>
+</ol>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/cs_bdb_serial.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb/overview.html b/db/docs/ref/bdb/overview.html
new file mode 100644
index 000000000..dedc30ecd
--- /dev/null
+++ b/db/docs/ref/bdb/overview.html
@@ -0,0 +1,185 @@
+<!--$Id: overview.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Overview of the Java API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../bdb_tut/summary.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_bind.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Overview of the Java API</h3>
+<p>The Java API is a Java framework that extends the well known
+<a href="http://java.sun.com/j2se/1.3/docs/guide/collections/">Java Collections</a> design pattern such that collections can now be
+stored, updated and queried in a transactional manner. The Java API is
+a layer on top of Berkeley DB.</p>
+<p>Together the Java API and Berkeley DB provide an embedded data management
+solution with all the benefits of a full transactional storage and the
+simplicity of a well known Java API. Java programmers who need fast,
+scalable, transactional data management for their projects can quickly
+adopt and deploy the Java API with confidence.</p>
+<p>This framework was first known as
+<a href="http://greybird-db.sourceforge.net/">Greybird DB</a> written
+by Mark Hayes. Sleepycat Software has collaborated with Mark to
+permanently incorporate his excellent work into our distribution and
+support it as an ongoing part of Berkeley DB. The repository of source code
+that remains at Sourceforge at version 0.9.0 is considered the last
+version before incorporation and will remain intact but will not be
+updated to reflect changes made as part of Berkeley DB.</p>
+<h3>What does The Java API add to Berkeley DB?</h3>
+<p>Berkeley DB has always provided a Java API which can be roughly
+described as a map and cursor interface, where the keys and values
+are represented as byte arrays. This API is a Java (JNI) interface to
+the C API and it closely modeled the Berkeley DB C API's interface. The Java API
+is a layer on top of that thin JNI mapping of the C API to Berkeley DB that adds
+significant new functionality in several ways.</p>
+<p><ul type=disc>
+<li>An implementation of the Java Collections interfaces (Map, Set, List and
+Iterator) is provided.
+<li>Transactions are supported using the conventional Java
+transaction-per-thread model, where the current transaction is implicitly
+associated with the current thread.
+<li>Transaction runner utilities are provided that automatically perform
+transaction retry and exception handling.
+<li>Keys and values are represented as Java objects rather than byte arrays.
+Bindings are used to map between Java objects and the stored byte
+arrays.
+<li>The tuple data format is provided as the simplest data representation,
+and is useful for keys as well as simple compact values.
+<li>The serial data format is provided for storing arbitrary Java objects
+without writing custom binding code. Java serialization is extended to
+store the class descriptions separately, making the data records much
+more compact than with standard Java serialization.
+<li>Custom data formats and bindings can be easily added. XML data format
+and XML bindings could easily be created using this feature.
+<li>In addition to secondary indices, foreign key indices are provided with
+integrity constraints.
+<li>The Java API API insulates the application from minor differences in the
+use of the Berkeley DB Data Store, Concurrent Data Store and Transactional Data
+Store products. This allows for development with one and deployment with
+another without significant changes to code.
+</ul>
+<p>Note that the Java API does not support caching of programming
+language objects nor keep track of their stored status. This is in
+contrast to "persistent object" approaches such as those defined by
+<a href="http://www.odmg.org/">ODMG</a> and JDO
+(<a href="http://www.jcp.org/en/jsr/detail?id=12">JSR 12</a>).
+Such approaches have benefits but also require sophisticated object
+caching. For simplicity the Java API treats data objects by value, not
+by reference, and does not perform object caching of any kind. Since
+the Java API is a thin layer, its reliability and performance
+characteristics are roughly equivalent to those of Berkeley DB, and database
+tuning is accomplished in the same way as for any Berkeley DB database.</p>
+<h3>Choices to make</h3>
+<p>There are several important choices to make when developing an
+application using Java API.</p>
+<ol>
+<p><li>Choose the Berkeley DB Environment
+<p>Depending on your application's concurrency and transactional
+requirements you may choose one of the three Berkeley DB Environments:
+Data Store, Concurrent Data Store, or Transactional Data Store. For
+details on creating and configuring the environment see
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+.</p>
+<p><li>Choose the Berkeley DB Access Method
+<p>For each Berkeley DB datastore, or data store as it is called within
+the Java API, you may choose from any of the four Berkeley DB access methods --
+BTREE, HASH, RECNO or QUEUE (
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+,
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+,
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECNO">Db.DB_RECNO</a>
+ or
+<a href="../../java/com/sleepycat/db/Db.html#DB_QUEUE">Db.DB_QUEUE</a>
+) -- and a number of other
+database options.
+Your choice depends on several factors such as whether you need ordered
+keys, unique keys, record number access, etc. For more information on
+access methods see the
+<a href="cs_bdb.html">com.sleepycat.bdb</a>
+ package
+description.</p>
+<p><li>Choose the Data Format for Keys and Values
+<p>For each database you may choose a data format for the keys and
+values. For example, the tuple data format is useful for keys because it
+has a deterministic sort order. The serial format is useful for values
+if you want to store arbitrary Java objects. In some cases a custom data
+format may be appropriate. For details on choosing a data format see the
+<a href="cs_bdb_bind.html">com.sleepycat.bdb.bind</a>
+ package description.</p>
+<p><li>Choose the Binding for Keys and Values
+<p>With the serial data format you do not have to create a binding for
+each Java class that is stored since Java serialization is used. But for
+other formats a binding must be defined that translates between stored
+byte arrays and Java objects. For details see the
+<a href="cs_bdb_bind.html">com.sleepycat.bdb.bind</a>
+ package description.</p>
+<p><li>Choose Secondary Indices and Foreign Key Indices
+<p>Any data store that has unique keys may have any number of indices.
+An index has keys that are derived from data values in the primary data
+store. This allows lookup and iteration of objects in the data store by
+its index keys. A foreign key index is a special type of index where
+the index keys are also the primary keys of another data store. For each
+index you must define how the index keys are derived from the data values
+using a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+. For details see
+the
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+,
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ and
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ classes.</p>
+<p><li>Choose the Collection Interface for each Data Store
+<p>The standard Java Collection interfaces are used for accessing data
+stores and data indices. The Map and Set interfaces may be used for any
+type of data store, while the List interface may only be used for data
+stores with record number access. The Iterator interface is used through
+the Map, Set and List interfaces. For more information on collection
+interfaces see the
+<a href="cs_bdb_collection.html">com.sleepycat.bdb.collection</a>
+ package.</p>
+</ol>
+<h3>Things to keep in mind</h3>
+<p>A single
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ object should
+be created for each database, and all data stores in an application should
+normally be used with a single
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+object.</p>
+<p>However, any number of bindings and collections may be created for
+the same data store. This allows multiple views of the same stored data.
+For example, a data store may be viewed as a Map of keys to values, a Set
+of keys, a Collection of values, or a List of values. String values, for
+example, may be used with the built-in binding to the String class, or
+with a custom binding to another class that represents the string values
+differently.</p>
+<p>It is sometimes desirable to use a Java class that encapsulates both a
+data key and a data value. For example, a Part object might contain both
+the part number (key) and the part name (value). Using the Java API this type
+of object is called an "entity". An entity binding is used to translate
+between the Java object and the stored data key and value. Entity bindings
+may be used with all Collection types.</p>
+<p>Please be aware the Java API collection classes provided do not conform
+completely to the interface contracts defined in the
+<code>java.util</code> package. For example, all iterators must be
+explicitly closed and the <code>size()</code> method is not available.
+The differences between Java API collections and standard Java collections
+are documented in the
+<a href="cs_bdb_collection.html">com.sleepycat.bdb.collection</a>
+ package description.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tut/summary.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/cs_bdb_bind.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/catalog.html b/db/docs/ref/bdb_basic/catalog.html
new file mode 100644
index 000000000..98a1d371a
--- /dev/null
+++ b/db/docs/ref/bdb_basic/catalog.html
@@ -0,0 +1,87 @@
+<!--$Id: catalog.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Opening and closing the class catalog</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/stores.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Opening and closing the class catalog</h3>
+<p>This section describes how to open and close the Java class catalog. The
+class catalog is a specialized database store that contains the Java class
+descriptions of the serialized objects that are stored in the database. The
+class descriptions are stored in the catalog rather than storing them
+redundantly in each database record. A single class catalog per environment
+must be opened whenever serialized objects will be stored in the database.</p>
+<hr size=1 noshade>
+<p>The <b>SampleDatabase</b> class is extended to open and close the
+class catalog. The following additional imports and class members are
+needed.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.StoredClassCatalog;
+</b>...
+public class SampleDatabase
+{
+<b> private static final String CLASS_CATALOG = "java_class_catalog";
+</b> ...
+<b> private StoredClassCatalog javaCatalog;
+</b> ...
+}
+</pre></blockquote>
+<p>While the class catalog is a database store, it contains metadata for
+other stores and is therefore treated specially by the Java API. The
+<a href="../../java/com/sleepycat/bdb/StoredClassCatalog.html">StoredClassCatalog</a>
+ class encapsulates the
+catalog store and implements this special behavior.</p>
+<hr size=1 noshade>
+<p>The following statements open the class catalog by creating a
+StoredClassCatalog object. The catalog file is created if it doesn't already
+exist.</p>
+<blockquote><pre>
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+<b> int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+</b> }
+</pre></blockquote>
+<p>The environment parameter is specified when opening any store, since a
+store always operates within a single environment.</p>
+<p>The two String parameters are also used when opening any store. They
+specify the filename and database (sub-file) name, of the store. The database
+(sub-file) name is optional, and is null in the example.</p>
+<p>The <b>flags</b> variable is initialized with
+<a href="../../java/com/sleepycat/db/Db.html#DB_CREATE">Db.DB_CREATE</a>
+ to create the file if it
+doesn't exist and with
+<a href="../../java/com/sleepycat/db/Db.html#DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a>
+ to
+create the store within an implicit transaction. These flags are used for
+opening all stores in the example.</p>
+<hr size=1 noshade>
+<p>The following statement closes the class catalog.</p>
+<blockquote><pre>
+ public void close()
+ throws DbException, IOException
+ {
+<b> javaCatalog.close();
+</b> env.close(0);
+ }
+</pre></blockquote>
+<p>The catalog store, and all other stores, must be closed before closing
+the environment.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/stores.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/env.html b/db/docs/ref/bdb_basic/env.html
new file mode 100644
index 000000000..25f3e4c39
--- /dev/null
+++ b/db/docs/ref/bdb_basic/env.html
@@ -0,0 +1,148 @@
+<!--$Id: env.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Opening and closing the database environment</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/keyvalue.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/catalog.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Opening and closing the database environment</h3>
+<p>This section of the tutorial describes how to open and close the
+database environment. The database environment manages resources (for
+example, memory) and transactions for any number of database stores. A
+single environment instance is normally used for all stores, although
+some advanced applications may use multiple environments.</p>
+<hr size=1 noshade>
+<p>The <b>SampleDatabase</b> class is used to open and close the database
+environment. It will also be used in following sections to open and close the
+class catalog and database stores. Its constructor is used to open the
+database and its <b>close()</b> method is used to close the database. The
+skeleton for the <b>SampleDatabase</b> class follows.</p>
+<blockquote><pre><b>import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbEnv;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+<p>
+public class SampleDatabase
+{
+ private DbEnv env;
+<p>
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ }
+<p>
+ public void close()
+ throws DbException, IOException
+ {
+ }
+}
+</b></pre></blockquote>
+<p>The first thing to notice is that the DbEnv class is in the
+com.sleepycat.db package, not the com.sleepycat.bdb package. The
+db package contains all
+core Berkeley DB functionality and is the same across all supported
+programming languages. The bdb package contains extended functionality
+that is Java-specific and based on the Java Collections API. The bdb
+package is layered on top of the db package. Both packages are needed
+to create a complete application based on the Java API.</p>
+<hr size=1 noshade>
+<p>The following statements create a
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+object and call its
+<a href="../../java/com/sleepycat/db/DbEnv.html#open">DbEnv.open</a>
+ method.</p>
+<blockquote><pre>
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+<b> int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+</b> }
+</pre></blockquote>
+<p>Notice that flags are used to specify options for the environment when it
+is opened. Flags are used in many places in the Berkeley DB API. To specify more
+than one flag, OR them together with the '|' operator as shown.</p>
+<p>The first three environment flags used --
+<a href="../../java/com/sleepycat/db/Db.html#DB_INIT_TXN">Db.DB_INIT_TXN</a>
+,
+<a href="../../java/com/sleepycat/db/Db.html#DB_INIT_LOCK">Db.DB_INIT_LOCK</a>
+, and
+<a href="../../java/com/sleepycat/db/Db.html#DB_INIT_MPOOL">Db.DB_INIT_MPOOL</a>
+ --
+must always be specified when opening a transactional environment. While
+non-transactional environments can also be created, the examples in this
+tutorial use a transactional environment.</p>
+<p>The
+<a href="../../java/com/sleepycat/db/Db.html#DB_CREATE">Db.DB_CREATE</a>
+ flag specifies that
+the environment's files (database, log and shared memory pool files) will be
+created if they don't already exist. If this flag is not specified, an
+exception will be thrown if the environment does not already exist. The same
+flag will be used later to cause database stores to be created if they don't
+exist.</p>
+<p>The
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECOVER">Db.DB_RECOVER</a>
+ flag causes database
+recovery to be performed, if recovery is necessary because of an error that
+occurred previously. In general, it is safe to run recovery unconditionally if
+the current process is known to be the only one attempting to access the
+database. The <b>runRecovery</b> parameter in the example is used to
+control this behavior so that recovery can be coordinated among multiple
+processes. This will be explained further when the example's main() method is
+described.</p>
+<p>When the
+<a href="../../java/com/sleepycat/db/DbEnv.html#open">DbEnv.open</a>
+ method is called,
+a home directory, a flags parameter, and a file open mode are specified. The
+home directory is the location of the environment files and is the default
+parent directory for database store files. The flags are those described
+above. The open mode is used for creating files on UNIX systems, where zero
+means to use a reasonable default.</p>
+<hr size=1 noshade>
+<p>The following statement closes the environment. The environment should
+always be closed when database work is completed to free allocated resources
+and to prevent having to run recovery later. Closing the environment does not
+automatically close database stores, so stores must be closed explicitly before
+closing the environment.</p>
+<blockquote><pre>
+ public void close()
+ throws DbException, IOException
+ {
+<b> env.close(0);
+</b> }
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The following getter method returns the environment for use by other
+classes in the example program. The environment is used for running
+transactions, among other things.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+<b> public final DbEnv getEnvironment()
+ {
+ return env;
+ }
+</b> ...
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/keyvalue.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/catalog.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/except.html b/db/docs/ref/bdb_basic/except.html
new file mode 100644
index 000000000..16a283fba
--- /dev/null
+++ b/db/docs/ref/bdb_basic/except.html
@@ -0,0 +1,108 @@
+<!--$Id: except.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Handling exceptions</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Handling exceptions</h3>
+<p>Exception handling was illustrated in the previous sections <a href="main.html">Implementing the main program</a> and <a href="transact.html">Using transactions</a>. This
+section examines exception handling in a Java API application in more detail.</p>
+<p>There are two exceptions that must be treated specially:
+<a href="../../java/com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</a>
+ and
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+.</p>
+<p>
+<a href="../../java/com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</a>
+ is thrown
+when the only solution is to shut down the application and run recovery. All
+applications must catch this exception and follow the recovery procedure.</p>
+<p>When
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+ is thrown, the
+application should normally retry the operation. If a deadlock continues to
+occur for some maximum number of retries, the application should give up and
+try again later or take other corrective actions. The Java API provides two APIs
+for transaction execution.</p>
+<p><ul type=disc>
+<li>When using the
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</a>
+class directly, the application must catch
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+ and follow the procedure described previously.
+<li>When using the
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+class, retries are performed automatically and the application need only handle
+the case where the maximum number of retries has been reached. In that case,
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+ will throw
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+.
+</ul>
+<p>When using the
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ class
+there are two other considerations.</p>
+<p><ul type=disc>
+<li>First, if the application-defined
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork">TransactionWorker.doWork</a>
+ method throws an exception the transaction will
+automatically be aborted, and otherwise the transaction will automatically be
+committed. Applications should design their transaction processing with this
+in mind.
+<li>Second, please be aware that
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+ unwraps exceptions in order to discover whether a
+nested exception is a
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+.
+This is particularly important since all Berkeley DB exceptions that occur while
+calling a stored collection method are wrapped with a
+<a href="../../java/com/sleepycat/bdb/util/RuntimeExceptionWrapper.html">RuntimeExceptionWrapper</a>
+. This wrapping is
+necessary because Berkeley DB exceptions are checked exceptions, and the Java
+collections API does not allow such exceptions to be thrown.
+</ul>
+<p>When calling
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+,
+the unwrapped (nested) exception will be unwrapped and thrown automatically.
+If you are not using
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ or
+if you are handling exceptions directly for some other reason, use the
+<a href="../../java/com/sleepycat/bdb/util/ExceptionUnwrapper.html#unwrap">ExceptionUnwrapper.unwrap</a>
+ method to get
+the nested exception. For example, this can be used to discover that an
+exception is a
+<a href="../../java/com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</a>
+ as
+shown below.</p>
+<blockquote><pre><b>
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+...
+ catch (Exception e)
+ {
+ e = ExceptionUnwrapper.unwrap(e);
+ if (e instanceof DbRunRecoveryException)
+ {
+ // follow recovery procedure
+ }
+ }
+</b></pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/intro.html b/db/docs/ref/bdb_basic/intro.html
new file mode 100644
index 000000000..c3881e390
--- /dev/null
+++ b/db/docs/ref/bdb_basic/intro.html
@@ -0,0 +1,41 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Basic - The shipment program</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/keyvalue.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Basic - The shipment program</h3>
+<p>The Basic example is a minimal implementation of the shipment program.
+It writes and reads the part, supplier and shipment stores. The example
+program illustrates:</p>
+<p><ul type=disc>
+<li><a href="keyvalue.html">Defining serialized key and value classes</a>
+<li><a href="env.html">Opening and closing the database environment</a>
+<li><a href="catalog.html">Opening and closing the class catalog</a>
+<li><a href="stores.html">Opening and closing database stores</a>
+<li><a href="views.html">Creating bindings and collections</a>
+<li><a href="main.html">Implementing the main program</a>
+<li><a href="transact.html">Using transactions</a>
+<li><a href="write.html">Adding database items</a>
+<li><a href="read.html">Retrieving database items</a>
+<li><a href="except.html">Handling exceptions</a>
+</ul>
+<p>The complete source
+of the final version of the example program is included in the Berkeley DB
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/keyvalue.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/keyvalue.html b/db/docs/ref/bdb_basic/keyvalue.html
new file mode 100644
index 000000000..5d5c044c4
--- /dev/null
+++ b/db/docs/ref/bdb_basic/keyvalue.html
@@ -0,0 +1,290 @@
+<!--$Id: keyvalue.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Defining serialized key and value classes</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/env.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Defining serialized key and value classes</h3>
+<p>The key and value classes for each type of shipment record -- Parts,
+Suppliers and Shipments -- are defined as ordinary Java classes. In this
+example the serialized form of the key and value objects is stored directly in
+the database. Therefore these classes must implement the standard Java
+java.io.Serializable interface. A compact form of Java serialization is used
+that does not duplicate the class description in each record. Instead the
+class descriptions are stored in the class catalog store, which is described in
+the next section. But in all other respects, standard Java serialization is
+used.</p>
+<p>An important point is that instances of these classes are passed and
+returned by value, not by reference, when they are stored and retrieved from
+the database. This means that changing a key or value object does not
+automatically change the database. The object must be explicitly stored in the
+database after changing it. To emphasize this point the key and value
+classes defined here have no field setter methods. Setter methods can be
+defined, but it is important to remember that calling a setter method will not
+cause the change to be stored in the database. How to store and retrieve
+objects in the database will be described later.</p>
+<p>Each key and value class contains a toString method that is used to
+output the contents of the object in the example program. This is meant for
+illustration only and is not required for database objects in general.</p>
+<p>Notice that the key and value classes defined below do not contain any
+references to <b>com.sleepycat</b> packages. An important characteristic of
+these classes is that they are independent of the database. Therefore, they
+may be easily used in other contexts and may be defined in a way that is
+compatible with other tools and libraries.</p>
+<hr size=1 noshade>
+<p>The <b>PartKey</b> class contains only the Part's Number field.</p>
+<p>Note that <b>PartKey</b> (as well as <b>SupplierKey</b> below)
+contain only a single String field. Instead of defining a specific class for
+each type of key, the String class by itself could have been used. Specific
+key classes were used to illustrate strong typing and for consistency in the
+example. The use of a plain String as an index key is illustrated in the next
+example program. It is up to the developer to use either primitive Java
+classes such as String and Integer, or strongly typed classes instead. When
+there is the possibility that fields will be added later to a key or value,
+a specific class should be used.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class PartKey implements Serializable
+{
+ private String number;
+<p>
+ public PartKey(String number) {
+ this.number = number;
+ }
+<p>
+ public final String getNumber() {
+ return number;
+ }
+<p>
+ public String toString() {
+ return "[PartKey: number=" + number + ']';
+ }
+}
+</b></pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>PartValue</b> class contains the Part's Name, Color, Weight and
+City fields.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class PartValue implements Serializable
+{
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+<p>
+ public PartValue(String name, String color, Weight weight, String city)
+ {
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final String getColor()
+ {
+ return color;
+ }
+<p>
+ public final Weight getWeight()
+ {
+ return weight;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "[PartValue: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
+</b></pre></blockquote>
+<p>The <b>Weight</b> class is also defined here, and is used as the type
+of the Part's Weight field. Just as in standard Java serialization, nothing
+special is needed to store nested objects as long as they are all
+Serializable.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class Weight implements Serializable
+{
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+<p>
+ private double amount;
+ private String units;
+<p>
+ public Weight(double amount, String units)
+ {
+ this.amount = amount;
+ this.units = units;
+ }
+<p>
+ public final double getAmount()
+ {
+ return amount;
+ }
+<p>
+ public final String getUnits()
+ {
+ return units;
+ }
+<p>
+ public String toString()
+ {
+ return "[" + amount + ' ' + units + ']';
+ }
+}
+</b></pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>SupplierKey</b> class contains the Supplier's Number field.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class SupplierKey implements Serializable
+{
+ private String number;
+<p>
+ public SupplierKey(String number)
+ {
+ this.number = number;
+ }
+<p>
+ public final String getNumber()
+ {
+ return number;
+ }
+<p>
+ public String toString()
+ {
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
+</b></pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>SupplierValue</b> class contains the Supplier's Name, Status and
+City fields.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class SupplierValue implements Serializable
+{
+ private String name;
+ private int status;
+ private String city;
+<p>
+ public SupplierValue(String name, int status, String city)
+ {
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final int getStatus()
+ {
+ return status;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "[SupplierValue: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
+</b></pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>ShipmentKey</b> class contains the keys of both the Part and
+Supplier.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class ShipmentKey implements Serializable
+{
+ private String partNumber;
+ private String supplierNumber;
+<p>
+ public ShipmentKey(String partNumber, String supplierNumber)
+ {
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+<p>
+ public final String getPartNumber()
+ {
+ return partNumber;
+ }
+<p>
+ public final String getSupplierNumber()
+ {
+ return supplierNumber;
+ }
+<p>
+ public String toString()
+ {
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
+</b></pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>ShipmentValue</b> class contains only the Shipment's Quantity
+field. Like <b>PartKey</b> and <b>SupplierKey</b>,
+<b>ShipmentValue</b> contains only a single primitive field. Therefore the
+the Integer class could have been used instead of defining a specific value
+class.</p>
+<blockquote><pre><b>import java.io.Serializable;
+<p>
+public class ShipmentValue implements Serializable
+{
+ private int quantity;
+<p>
+ public ShipmentValue(int quantity)
+ {
+ this.quantity = quantity;
+ }
+<p>
+ public final int getQuantity()
+ {
+ return quantity;
+ }
+<p>
+ public String toString()
+ {
+ return "[ShipmentValue: quantity=" + quantity + ']';
+ }
+}
+</b></pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/env.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/main.html b/db/docs/ref/bdb_basic/main.html
new file mode 100644
index 000000000..9d9229efe
--- /dev/null
+++ b/db/docs/ref/bdb_basic/main.html
@@ -0,0 +1,185 @@
+<!--$Id: main.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Implementing the main program</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/transact.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Implementing the main program</h3>
+<p>The main program opens the database, stores and retrieves objects within
+a transaction, and closes the database. This section describes the main
+program shell, and the next section describes how to run transactions for
+storing and retrieving objects.</p>
+<hr size=1 noshade>
+<p>The <b>Sample</b> class contains the main program. The skeleton for
+the <b>Sample</b> class follows.</p>
+<blockquote><pre><b>import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+<p>
+public class Sample
+{
+ private SampleDatabase db;
+ private SampleViews views;
+<p>
+ public static void main(String args)
+ {
+ }
+<p>
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ }
+<p>
+ private void close()
+ throws DbException, IOException
+ {
+ }
+<p>
+ private void run()
+ throws Exception
+ {
+ }
+}
+</b></pre></blockquote>
+<p>The main program uses the <b>SampleDatabase</b> and
+<b>SampleViews</b> classes that were described in the preceding sections.
+The <b>main</b> method will create an instance of the <b>Sample</b> class,
+and call its <b>run</b> and <b>close</b> methods.</p>
+<hr size=1 noshade>
+<p>The following statements parse the program's command line arguments.</p>
+<blockquote><pre>
+ public static void main(String[] args)
+ {
+<b> System.out.println("\nRunning sample: " + Sample.class);
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i &lt; args.length; i += 1)
+ {
+ String arg = args[i];
+ if (args[i].equals("-h") && i &lt; args.length - 1)
+ {
+ i += 1;
+ homeDir = args[i];
+ }
+ else if (args[i].equals("-multiprocess"))
+ {
+ runRecovery = false;
+ }
+ else
+ {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h &lt;home-directory&gt;] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+</b> }
+</pre></blockquote>
+<p>The usage command is:</p>
+<blockquote><pre><b>java com.sleepycat.examples.bdb.shipment.basic.Sample
+ [-h &lt;home-directory&gt; ] [-multiprocess]
+</b></pre></blockquote>
+<p>The <b>-h</b> command is used to set the <b>homeDir</b> variable,
+which will later be passed to the <b>SampleDatabase</b> constructor.
+Normally all Berkeley DB programs should provide a way to configure their database
+environment home directory.</p>
+<p>The default for the home directory is <b>./tmp</b> -- the tmp
+subdirectory of the current directory where the sample is run. The home
+directory must exist before running the sample. To re-create the sample
+database from scratch, delete all files in the home directory before running
+the sample.</p>
+<p>The home directory was described previously in the <a href="env.html">Opening
+and closing the database environment</a> section.</p>
+<p>Also described in that section was the <b>runRecovery</b> parameter of
+the <b>SampleDatabase</b> constructor. The <b>-multiprocess</b> command
+is used here to set the <b>runRecovery</b> value. If the processing model
+is single-process, then Berkeley DB recovery is always run when the environment is
+opened. If a multiprocess model is needed, a monitor process should be used
+to handle recovery.</p>
+<p>Of course, the command line arguments shown are only examples and a
+real-life application may use different techniques for configuring these
+options.</p>
+<hr size=1 noshade>
+<p>The following statements create an instance of the <b>Sample</b> class
+and call its <b>run</b> and <b>close</b> methods.</p>
+<blockquote><pre>
+ public static void main(String args)
+ {
+ ...
+<b> Sample sample = null;
+ try
+ {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ if (sample != null)
+ {
+ try
+ {
+ sample.close();
+ }
+ catch (Exception e)
+ {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+</b> }
+</pre></blockquote>
+<p>The <b>Sample</b> constructor will open the database and the
+<b>run</b> method will run transactions for storing and retrieving objects.
+If either of these throws an exception, then the program was unable to run and
+should normally terminate. (Transaction retries are handled at a lower level
+and will be described later.) The first <b>catch</b> statement handles such
+exceptions.</p>
+<p>The <b>finally</b> statement is used to call the <b>close</b>
+method since an attempt should always be made to close the database cleanly.
+If an exception is thrown during close and a prior exception occurred above,
+then the exception during close is likely a side effect of the prior
+exception.</p>
+<hr size=1 noshade>
+<p>The <b>Sample</b> constructor creates the <b>SampleDatabase</b> and
+<b>SampleViews</b> objects.</p>
+<blockquote><pre>
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+<b> db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+</b> }
+</pre></blockquote>
+<p>Recall that creating the <b>SampleDatabase</b> object will open the
+environment and all database stores.</p>
+<hr size=1 noshade>
+<p>To close the database the <b>Sample.close</b> method simply calls
+<b>SampleDatabase.close</b>.</p>
+<blockquote><pre>
+ private void close()
+ throws DbException, IOException
+ {
+<b> db.close();
+</b> }
+</pre></blockquote>
+<p>The <b>run</b> method is described in the next section.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/transact.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/read.html b/db/docs/ref/bdb_basic/read.html
new file mode 100644
index 000000000..91ce495a9
--- /dev/null
+++ b/db/docs/ref/bdb_basic/read.html
@@ -0,0 +1,174 @@
+<!--$Id: read.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Retrieving database items</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/write.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/except.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Retrieving database items</h3>
+<p>Retrieving information from the database is accomplished via the standard
+Java collections API. In the example, the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#iterator">Set.iterator</a>
+ method is used to iterate all
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</a>
+objects for each store. All standard Java methods for retrieving objects
+from a collection may be used with the Java API.</p>
+<hr size=1 noshade>
+<p>The <b>PrintDatabase.doWork</b> method calls <b>printEntries</b> to
+print the map entries for each database store. It is called via the
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ class and was outlined in
+the previous section.</p>
+<blockquote><pre>
+import com.sleepycat.bdb.collection.StoredIterator;
+import java.util.Iterator;
+...
+public class Sample
+{
+ ...
+ private SampleViews views;
+ ...
+ private class PrintDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+<b> printEntries("Parts",
+ views.getPartEntrySet().iterator());
+ printEntries("Suppliers",
+ views.getSupplierEntrySet().iterator());
+ printEntries("Shipments",
+ views.getShipmentEntrySet().iterator());
+</b> }
+ }
+<p>
+<b> private void printEntries(String label, Iterator iterator)
+ {
+ }
+</b>}
+</pre></blockquote>
+<p>The
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</a>
+ of
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</a>
+ objects for each store is obtained from the <b>SampleViews</b>
+object. This set can also be obtained by calling the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet">Map.entrySet</a>
+ method of a stored map.</p>
+<hr size=1 noshade>
+<p>The <b>printEntries</b> prints the map entries for any stored map.
+The
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#toString">Object.toString</a>
+ method of each key and value
+is called to obtain a printable representation of each object.</p>
+<blockquote><pre>
+ private void printEntries(String label, Iterator iterator)
+ {
+<b> System.out.println("\n--- " + label + " ---");
+ try
+ {
+ while (iterator.hasNext())
+ {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ System.out.println(entry.getKey().toString());
+ System.out.println(entry.getValue().toString());
+ }
+ }
+ finally
+ {
+ StoredIterator.close(iterator);
+ }
+</b> }
+</pre></blockquote>
+<p>It is very important that all iterators for stored collections are
+explicitly closed. To ensure they are closed, a <b>finally</b> clause should
+be used as shown above. If the iterator is not closed, the underlying Berkeley DB
+cursor is not closed either and the store may become unusable.</p>
+<p>If the iterator is cast to
+<a href="../../java/com/sleepycat/bdb/collection/StoredIterator.html">StoredIterator</a>
+ then its
+<a href="../../java/com/sleepycat/bdb/collection/StoredIterator.html#close()">StoredIterator.close()</a>
+ method can be called. Or, as shown above, the static
+<a href="../../java/com/sleepycat/bdb/collection/StoredIterator.html#close(java.util.Iterator)">StoredIterator.close(java.util.Iterator)</a>
+ method can be called to avoid casting. The static
+form of this method can be called safely for any
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</a>
+. If an iterator for a non-stored collection is passed, it is simply
+ignored.</p>
+<p>This is one of a small number of behavioral differences between standard
+Java collections and stored collections. For a complete list see
+<a href="../bdb/cs_bdb_collection.html">Using Stored Collections</a>.</p>
+<hr size=1 noshade>
+<p>The output of the example program is shown below.</p>
+<blockquote><pre>
+Adding Suppliers
+Adding Parts
+Adding Shipments
+<p>
+--- Parts ---
+PartKey: number=P1
+PartValue: name=Nut color=Red weight=[12.0 grams] city=London
+PartKey: number=P2
+PartValue: name=Bolt color=Green weight=[17.0 grams] city=Paris
+PartKey: number=P3
+PartValue: name=Screw color=Blue weight=[17.0 grams] city=Rome
+PartKey: number=P4
+PartValue: name=Screw color=Red weight=[14.0 grams] city=London
+PartKey: number=P5
+PartValue: name=Cam color=Blue weight=[12.0 grams] city=Paris
+PartKey: number=P6
+PartValue: name=Cog color=Red weight=[19.0 grams] city=London
+<p>
+--- Suppliers ---
+SupplierKey: number=S1
+SupplierValue: name=Smith status=20 city=London
+SupplierKey: number=S2
+SupplierValue: name=Jones status=10 city=Paris
+SupplierKey: number=S3
+SupplierValue: name=Blake status=30 city=Paris
+SupplierKey: number=S4
+SupplierValue: name=Clark status=20 city=London
+SupplierKey: number=S5
+SupplierValue: name=Adams status=30 city=Athens
+<p>
+--- Shipments ---
+ShipmentKey: supplier=S1 part=P1
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S2 part=P1
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S1 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S2 part=P2
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S3 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S4 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S1 part=P3
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S1 part=P4
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S4 part=P4
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S1 part=P5
+ShipmentValue: quantity=100
+ShipmentKey: supplier=S4 part=P5
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S1 part=P6
+ShipmentValue: quantity=100
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/write.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/except.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/stores.html b/db/docs/ref/bdb_basic/stores.html
new file mode 100644
index 000000000..bd60ea894
--- /dev/null
+++ b/db/docs/ref/bdb_basic/stores.html
@@ -0,0 +1,251 @@
+<!--$Id: stores.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Opening and closing the database stores</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/catalog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Opening and closing the database stores</h3>
+<p>This section describes how to open and close the Part, Supplier and
+Shipment stores. A Java API <i>store</i> is a collection of records, each of
+which has a key and a value. The keys and values are assigned a
+<i>format</i>, which defines the syntax of the stored data. Two examples
+of formats are Java serialization format and tuple format. In a given store,
+all keys have the same format and all values have the same format.</p>
+<p>Two central classes in the Berkeley DB and Java API are introduced here:
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ and
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+. Both are needed to create a store in the Java API. The differences
+between the two classes are:</p>
+<p><ul type=disc>
+<li>The Db class is part of the com.sleepycat.db
+package, while the DataStore class is part of the
+com.sleepycat.bdb package.
+<li>A DataStore object is a wrapper around the Db object, and adds
+functionality to it. For every DataStore object there is a single Db object
+underlying it.
+<li>Keys and values in a Db are always treated as byte arrays, while
+keys and values in a DataStore have a defined format.
+<li>A Db is used to represent a primary store or a secondary index,
+while a DataStore always represents a primary store. Secondary indices are
+introduced in the Index program tutorial.
+</ul>
+<hr size=1 noshade>
+<p>The <b>SampleDatabase</b> class is extended to open and close the
+three stores. The following additional imports and class members are needed.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.DataStore;
+</b>...
+public class SampleDatabase
+{
+ ...
+<b> private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+</b> ...
+<b> private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private SerialFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private SerialFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private SerialFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+</b> ...
+}
+</pre></blockquote>
+<p>For each store there is a filename constant and a DataStore
+object. A
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+object represents the Java serialization format for the key and value
+of each store.</p>
+<hr size=1 noshade>
+<p>The following statements create the format objects.</p>
+<blockquote><pre>
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+<b> partKeyFormat = new SerialFormat(javaCatalog, PartKey.class);
+ partValueFormat = new SerialFormat(javaCatalog, PartValue.class);
+ supplierKeyFormat = new SerialFormat(javaCatalog, SupplierKey.class);
+ supplierValueFormat = new SerialFormat(javaCatalog, SupplierValue.class);
+ shipmentKeyFormat = new SerialFormat(javaCatalog, ShipmentKey.class);
+ shipmentValueFormat = new SerialFormat(javaCatalog, ShipmentValue.class);
+</b> }
+</pre></blockquote>
+<p>The first parameter of the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+ constructor is the class catalog, and is used to store the class
+descriptions of the serialized objects.</p>
+<p>The second parameter is the base class for the serialized objects and is
+used for type checking of the stored objects. If <b>null</b> or
+<b>Object.class</b> is specified, then any Java class is allowed.
+Otherwise, all objects stored in that format must be instances of the specified
+class or derived from the specified class. In the example, specific classes
+are used to enable strong type checking.</p>
+<hr size=1 noshade>
+<p>The following statements open the three stores using the Db and DataStore
+classes. The files are created if they don't already exist. For each store, a
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ object is created, its
+<a href="../../java/com/sleepycat/db/Db.html#open">Db.open</a>
+ method is called, and then a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ object is created.</p>
+<blockquote><pre>
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+ ...
+<b> Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat, partValueFormat, null);
+<p>
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat, supplierValueFormat, null);
+<p>
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat, shipmentValueFormat, null);
+</b> }
+</pre></blockquote>
+<p>The first parameter of the
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+constructor is the environment in which the store will operate. The second
+parameter contains flags and is not used in the example.</p>
+<p>The first parameter of the
+<a href="../../java/com/sleepycat/db/Db.html#open">Db.open</a>
+method is a transaction object. It is null in the example because the
+<a href="../../java/com/sleepycat/db/Db.html#DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a>
+ flag is used to create the
+store within an implicit transaction.</p>
+<p>NOTE: An important point to remember is that either the
+<a href="../../java/com/sleepycat/db/Db.html#DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a>
+ flag or the transaction
+parameter must be specified in order to open a transactional store.</p>
+<p>The second and third String parameters specify the filename and
+database (sub-file) name of the store. The database (sub-file) name is
+optional, and is null in the example.</p>
+<p>The fourth parameter is the store's type, and determines which of the
+database <a href="../am_conf/intro.html">Access Methods</a> is used. In general, the
+store's type determines the characteristics of its keys. The
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+ type provides ordered keys and
+optimal performance for most applications. The
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+ type can provide better
+performance for very large database, but does not provide ordered keys.
+Although DB_BTREE is used here, the ordering of keys is not meaningful because
+the key values are serialized Java objects. In a later example the tuple
+format will be used to provide a meaningful key ordering. Other types are
+<a href="../../java/com/sleepycat/db/Db.html#DB_QUEUE">Db.DB_QUEUE</a>
+ and
+<a href="../../java/com/sleepycat/db/Db.html#DB_RECNO">Db.DB_RECNO</a>
+. A store's type cannot be
+changed once the store has been created.</p>
+<p>The fifth parameter contains flags and is initialized with
+<a href="../../java/com/sleepycat/db/Db.html#DB_CREATE">Db.DB_CREATE</a>
+ to create the file if it
+doesn't exist and with
+<a href="../../java/com/sleepycat/db/Db.html#DB_AUTO_COMMIT">Db.DB_AUTO_COMMIT</a>
+(described previously).</p>
+<p>The last parameter is the UNIX file creation mode. Zero is specified in
+the example to use a reasonable default.</p>
+<p>Finally, the
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ object is
+created from the Db object, a key format, and a value format. The last
+parameter of the DataStore constructor is a primary key assigner, and is not
+used in the example.</p>
+<hr size=1 noshade>
+<p>The following statements close the three stores.</p>
+<blockquote><pre>
+ public void close()
+ throws DbException, IOException
+ {
+<b> partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+</b> javaCatalog.close();
+ env.close(0);
+ }
+</pre></blockquote>
+<p>All stores, including the catalog store, must be closed before closing
+the environment.</p>
+<hr size=1 noshade>
+<p>The following getter methods return the formats and stores for use by
+other classes in the example program. The formats are used for creating
+bindings, and the stores are used for creating Java collections.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+<b> public final SerialFormat getPartKeyFormat()
+ {
+ return partKeyFormat;
+ }
+<p>
+ public final SerialFormat getPartValueFormat()
+ {
+ return partValueFormat;
+ }
+<p>
+ public final SerialFormat getSupplierKeyFormat()
+ {
+ return supplierKeyFormat;
+ }
+<p>
+ public final SerialFormat getSupplierValueFormat()
+ {
+ return supplierValueFormat;
+ }
+<p>
+ public final SerialFormat getShipmentKeyFormat()
+ {
+ return shipmentKeyFormat;
+ }
+<p>
+ public final SerialFormat getShipmentValueFormat()
+ {
+ return shipmentValueFormat;
+ }
+<p>
+ public final DataStore getPartStore()
+ {
+ return partStore;
+ }
+<p>
+ public final DataStore getSupplierStore()
+ {
+ return supplierStore;
+ }
+<p>
+ public final DataStore getShipmentStore()
+ {
+ return shipmentStore;
+ }
+</b> ...
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/catalog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/transact.html b/db/docs/ref/bdb_basic/transact.html
new file mode 100644
index 000000000..c513b13a6
--- /dev/null
+++ b/db/docs/ref/bdb_basic/transact.html
@@ -0,0 +1,150 @@
+<!--$Id: transact.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Using transactions</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/main.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/write.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Using transactions</h3>
+<p><a href="../transapp/intro.html">Berkeley DB Transactional Data Store
+applications</a> have standard transactional characteristics: recoverability,
+atomicity and integrity. The Java API provides these transactional capabilities
+using a <i>transaction-per-thread</i> model. Once a transaction is begun,
+it is implicitly associated with the current thread until it is committed or
+aborted. This model is used for the following reasons.</p>
+<p><ul type=disc>
+<li>The transaction-per-thread model is commonly used in other Java APIs
+such as J2EE.
+<li>Since the Java collections API is used for data access, there is no
+way to pass a transaction object on each call to methods such as
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put">Map.put</a>
+.
+</ul>
+<p>The Java API provides two transaction APIs. The lower-level API is the
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</a>
+ class. It provides a way
+to get the transaction for the current thread, and to begin, commit and abort
+transactions. It also provides access to the Berkeley DB core API
+<a href="../../java/com/sleepycat/db/DbTxn.html">DbTxn</a>
+ object. With
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</a>
+, just as in the core API,
+the application is responsible for beginning, committing and aborting
+transactions, and for handling deadlock exceptions and retrying operations.
+This API may be needed for some applications, but it is not used in the
+example.</p>
+<p>The example uses the higher-level
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ and
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</a>
+APIs, which are build on top of
+<a href="../../java/com/sleepycat/bdb/CurrentTransaction.html">CurrentTransaction</a>
+.
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+automatically begins a transaction and then calls the
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork">TransactionWorker.doWork</a>
+ method, which is
+implemented by the application.</p>
+<p>The
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+ method
+automatically detects deadlock exceptions and performs retries by repeatedly
+calling the
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork">TransactionWorker.doWork</a>
+ method
+until the operation succeeds or the maximum retry count is reached. If
+the maximum retry count is reached or if another exception (other than
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+) is thrown by
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork">TransactionWorker.doWork</a>
+, then the
+transaction will be automatically aborted. Otherwise, the transaction
+will be automatically committed.</p>
+<p>Using this high-level API, if
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+ throws an exception, the application can assume that
+the operation failed and the transaction was aborted; otherwise, when an
+exception is not thrown, the application can assume the operation succeeded and
+the transaction was committed.</p>
+<hr size=1 noshade>
+<p>The <b>Sample.run</b> method creates a
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ object and calls its
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+ method.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+</b>...
+public class Sample
+{
+ private SampleDatabase db;
+ ...
+<b> private void run()
+ throws Exception
+ {
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+<p>
+ private class PopulateDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+ }
+ }
+<p>
+ private class PrintDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+ }
+ }
+</b>}
+</pre></blockquote>
+<p>The <b>run</b> method is called by <b>main</b> and was outlined in
+the previous section. It first creates a
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+, passing the database environment to its constructor.</p>
+<p>It then calls
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+to execute two transactions, passing instances of the application-defined
+<b>PopulateDatabase</b> and <b>PrintDatabase</b> inner classes. These
+classes implement the
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html#doWork">TransactionWorker.doWork</a>
+ method and will be fully described in the next two sections.</p>
+<p>For each call to
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html#run">TransactionRunner.run</a>
+, a separate transaction will be performed. The use of two transactions in
+the example -- one for populating the database and another for printing its
+contents -- is arbitrary. A real-life application should be designed to create
+transactions for each group of operations that should have recoverability,
+atomicity and integrity, while also taking into account the impact of
+transactions on performance.</p>
+<p>The advantage of using
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ is that deadlock retries and transaction begin, commit and
+abort are handled automatically. However, a
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</a>
+ class must be implemented for each type of transaction. If
+desired, anonymous inner classes can be used to implement the
+<a href="../../java/com/sleepycat/bdb/TransactionWorker.html">TransactionWorker</a>
+ interface.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/main.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/write.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/views.html b/db/docs/ref/bdb_basic/views.html
new file mode 100644
index 000000000..7294d6e35
--- /dev/null
+++ b/db/docs/ref/bdb_basic/views.html
@@ -0,0 +1,183 @@
+<!--$Id: views.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Creating bindings and collections</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/stores.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/main.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Creating bindings and collections</h3>
+<p><i>Bindings</i> convert between stored records and Java objects. In
+this example, Java serialization bindings are used. Serial bindings are the
+simplest type of bindings because no mapping of fields or type conversion is
+needed. Tuple bindings, which are more difficult to create than serial
+bindings but have some advantages, will be introduced later in the Tuple
+example program.</p>
+<p>Standard Java <i>collections</i> are used to access records in a
+database store. Stored collections use bindings transparently to convert
+the records to objects when they are retrieved from the collection, and to
+convert the objects to records when they are stored in the collection.</p>
+<p>An important characteristic of stored collections is that they do
+<i>not</i> perform object caching. Every time an object is accessed via a
+collection it will be added to or retrieved from the store, and the bindings
+will be invoked to convert the data. Objects are therefore always passed and
+returned by value, not by reference. Because Berkeley DB is an embedded database,
+efficient caching of stored records is performed by the database library.</p>
+<hr size=1 noshade>
+<p>The <b>SampleViews</b> class is used to create the bindings and
+collections. This class is separate from the <b>SampleDatabase</b> class to
+illustrate the idea that a single set of stored data can be accessed via
+multiple bindings and collections, or <i>views</i>. The skeleton for the
+<b>SampleViews</b> class follows.</p>
+<blockquote><pre><b>import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.collection.StoredEntrySet;
+import com.sleepycat.bdb.collection.StoredMap;
+<p>
+public class SampleViews
+{
+ private StoredMap partMap;
+ private StoredMap supplierMap;
+ private StoredMap shipmentMap;
+<p>
+ public SampleViews(SampleDatabase db)
+ {
+ }
+}
+</b></pre></blockquote>
+<p>A
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+ field is used
+for each store. The StoredMap class implements the standard Java
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</a>
+ interface, which has methods for obtaining a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</a>
+ of keys, a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+ of values, or a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html">Set</a>
+ of
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</a>
+ key/value pairs.
+Because stores contain key/value pairs, any Berkeley DB store may be represented as a
+Java map.</p>
+<hr size=1 noshade>
+<p>The following statements create the bindings using the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</a>
+ class.</p>
+<blockquote><pre>
+ public SampleViews(SampleDatabase db)
+ {
+<b> DataBinding partKeyBinding = new SerialBinding(db.getPartKeyFormat());
+ DataBinding partValueBinding = new SerialBinding(db.getPartValueFormat());
+ DataBinding supplierKeyBinding = new SerialBinding(db.getSupplierKeyFormat());
+ DataBinding supplierValueBinding = new SerialBinding(db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding = new SerialBinding(db.getShipmentKeyFormat());
+ DataBinding shipmentValueBinding = new SerialBinding(db.getShipmentValueFormat());
+</b> }
+</pre></blockquote>
+<p>A serial binding is created from a serial format. The reader may wonder
+why a binding is needed at all, since the format contains all the information
+needed to perform Java serialization. In fact, the serial bindings used here
+add very little value to the serial format.</p>
+<p>Bindings are distinct from formats because a single format can be used
+with multiple bindings. With serial bindings, an example is a specialized
+binding that extracts a single field from the stored object and returns that
+field only. Another example is a binding that converts the stored object to an
+instance of a different class. These are examples of how bindings can provide
+multiple views of the same data.</p>
+<hr size=1 noshade>
+<p>The following statements create standard Java maps using the
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+ class.</p>
+<blockquote><pre>
+ public SampleViews(SampleDatabase db)
+ {
+<b> partMap =
+ new StoredMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+</b> }
+</pre></blockquote>
+<p>The first parameter of the
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+ constructor is the store. Creating a map from a store will use the
+store keys (the primary keys) as the map keys. The Index example shows how
+to use index keys as map keys.</p>
+<p>The second and third parameters are the key and value bindings to use
+when storing and retrieving objects via the map.</p>
+<p>The fourth and last parameter specifies whether changes will be allowed
+via the collection. If false is passed, the collection will be read-only.</p>
+<hr size=1 noshade>
+<p>The following getter methods return the stored maps for use by other
+classes in the example program. Convenience methods for returning entry sets
+are also included.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+<b> public final StoredMap getPartMap()
+ {
+ return partMap;
+ }
+<p>
+ public final StoredMap getSupplierMap()
+ {
+ return supplierMap;
+ }
+<p>
+ public final StoredMap getShipmentMap()
+ {
+ return shipmentMap;
+ }
+<p>
+ public final StoredEntrySet getPartEntrySet()
+ {
+ return (StoredEntrySet) partMap.entrySet();
+ }
+<p>
+ public final StoredEntrySet getSupplierEntrySet()
+ {
+ return (StoredEntrySet) supplierMap.entrySet();
+ }
+<p>
+ public final StoredEntrySet getShipmentEntrySet()
+ {
+ return (StoredEntrySet) shipmentMap.entrySet();
+ }
+</b> ...
+}
+</pre></blockquote>
+<p>Note that StoredMap and StoredEntrySet are returned rather than just
+returning Map and Set. Since StoredMap implements the Map interface and
+StoredEntrySet implements the Set interface, you may ask why Map and Set were
+not returned directly.</p>
+<p>StoredMap, StoredEntrySet, and other stored collection classes have a
+small number of extra methods beyond those in the Java collection interfaces.
+The stored collection types are therefore returned to avoid casting when using
+the extended methods. Normally, however, only a Map or Set is needed, and may
+be used as follows.</p>
+<blockquote><pre>
+<b> SampleViews views = ...
+ Map partMap = views.getPartMap();
+ Set supplierEntries = views.getSupplierEntrySet();
+</b></pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/stores.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/main.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_basic/write.html b/db/docs/ref/bdb_basic/write.html
new file mode 100644
index 000000000..9fb17a0fa
--- /dev/null
+++ b/db/docs/ref/bdb_basic/write.html
@@ -0,0 +1,168 @@
+<!--$Id: write.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Adding database items</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Basic</dl></h3></td>
+<td align=right><a href="../bdb_basic/transact.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Adding database items</h3>
+<p>Adding (as well as updating, removing, and deleting) information in the
+database is accomplished via the standard Java collections API. In the
+example, the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put">Map.put</a>
+ method is used to add objects.
+All standard Java methods for modifying a collection may be used with the
+Java API.</p>
+<hr size=1 noshade>
+<p>The <b>PopulateDatabase.doWork</b> method calls private methods for
+adding objects to each of the three database stores. It is called via the
+<a href="../../java/com/sleepycat/bdb/TransactionRunner.html">TransactionRunner</a>
+ class and was outlined in
+the previous section.</p>
+<blockquote><pre>
+import java.util.Map;
+...
+public class Sample
+{
+ ...
+ private SampleViews views;
+ ...
+ private class PopulateDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+<b> addSuppliers();
+ addParts();
+ addShipments();
+</b> }
+ }
+<p>
+<b> private void addSuppliers()
+ {
+ }
+<p>
+ private void addParts()
+ {
+ }
+<p>
+ private void addShipments()
+ {
+ }
+</b>}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The <b>addSuppliers</b>, <b>addParts</b> and <b>addShipments</b>
+methods add objects to the Suppliers, Parts and Shipments stores. The
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</a>
+ for each store is obtained from the
+<b>SampleViews</b> object.</p>
+<blockquote><pre>
+ private void addSuppliers()
+ {
+<b> Map suppliers = views.getSupplierMap();
+ if (suppliers.isEmpty())
+ {
+ System.out.println("Adding Suppliers");
+ suppliers.put(new SupplierKey("S1"),
+ new SupplierValue("Smith", 20, "London"));
+ suppliers.put(new SupplierKey("S2"),
+ new SupplierValue("Jones", 10, "Paris"));
+ suppliers.put(new SupplierKey("S3"),
+ new SupplierValue("Blake", 30, "Paris"));
+ suppliers.put(new SupplierKey("S4"),
+ new SupplierValue("Clark", 20, "London"));
+ suppliers.put(new SupplierKey("S5"),
+ new SupplierValue("Adams", 30, "Athens"));
+ }
+</b> }
+<p>
+ private void addParts()
+ {
+<b> Map parts = views.getPartMap();
+ if (parts.isEmpty())
+ {
+ System.out.println("Adding Parts");
+ parts.put(new PartKey("P1"),
+ new PartValue("Nut", "Red",
+ new Weight(12.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P2"),
+ new PartValue("Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P3"),
+ new PartValue("Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS),
+ "Rome"));
+ parts.put(new PartKey("P4"),
+ new PartValue("Screw", "Red",
+ new Weight(14.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P5"),
+ new PartValue("Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P6"),
+ new PartValue("Cog", "Red",
+ new Weight(19.0, Weight.GRAMS),
+ "London"));
+ }
+</b> }
+<p>
+ private void addShipments()
+ {
+<b> Map shipments = views.getShipmentMap();
+ if (shipments.isEmpty())
+ {
+ System.out.println("Adding Shipments");
+ shipments.put(new ShipmentKey("P1", "S1"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P3", "S1"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P4", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P5", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P6", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P1", "S2"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S2"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P2", "S3"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P2", "S4"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P4", "S4"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P5", "S4"),
+ new ShipmentValue(400));
+ }
+</b> }
+</pre></blockquote>
+<p>The key and value classes used above were defined in the
+<a href="keyvalue.html">Defining serialized key and value classes</a> section.</p>
+<p>In each method above, objects are added only if the map is not empty.
+This is a simple way of allowing the example program to be run repeatedly. In
+real-life applications another technique -- checking the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#containsKey">Map.containsKey</a>
+ method, for example -- might be
+used.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/transact.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_entity/bindings.html b/db/docs/ref/bdb_entity/bindings.html
new file mode 100644
index 000000000..28d1da38a
--- /dev/null
+++ b/db/docs/ref/bdb_entity/bindings.html
@@ -0,0 +1,211 @@
+<!--$Id: bindings.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Creating entity bindings</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Entity</dl></h3></td>
+<td align=right><a href="../bdb_entity/classes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Creating entity bindings</h3>
+<p><i>Entity bindings</i> are similar to ordinary bindings in that they
+convert between Java objects and the stored data format of keys and values. In
+addition, entity bindings map between key/value pairs and entity objects. An
+ordinary binding is a one-to-one mapping, while an entity binding is a
+two-to-one mapping.</p>
+<hr size=1 noshade>
+<p>The <b>partValueBinding</b>, <b>supplierValueBinding</b> and
+<b>shipmentValueBinding</b> bindings are created below as entity bindings
+rather than (in the prior examples) serial bindings.</p>
+<blockquote><pre>
+import com.sleepycat.bdb.bind.DataBinding;
+<b>import com.sleepycat.bdb.bind.EntityBinding;
+</b>import com.sleepycat.bdb.bind.serial.SerialBinding;
+<b>import com.sleepycat.bdb.bind.serial.SerialSerialBinding;
+</b><p>
+public class SampleViews
+{
+ ...
+ public SampleViews(SampleDatabase db)
+ {
+ DataBinding partKeyBinding =
+ new SerialBinding(db.getPartKeyFormat());
+<b> EntityBinding partValueBinding =
+ new PartBinding(db.getPartKeyFormat(), db.getPartValueFormat());
+</b> DataBinding supplierKeyBinding =
+ new SerialBinding(db.getSupplierKeyFormat());
+<b> EntityBinding supplierValueBinding =
+ new SupplierBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat());
+</b> DataBinding shipmentKeyBinding =
+ new SerialBinding(db.getShipmentKeyFormat());
+<b> EntityBinding shipmentValueBinding =
+ new ShipmentBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat());
+</b> DataBinding cityKeyBinding =
+ new SerialBinding(db.getCityKeyFormat());
+ ...
+ }
+}
+</pre></blockquote>
+<p>The entity bindings will be used in the next section to construct stored
+map objects.</p>
+<hr size=1 noshade>
+<p>The <b>PartBinding</b> class is defined below.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+<b> private static class PartBinding extends SerialSerialBinding
+ {
+ private PartBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException
+ {
+ PartKey key = (PartKey) keyInput;
+ PartValue value = (PartValue) valueInput;
+ return new Part(key.getNumber(), value.getName(), value.getColor(),
+ value.getWeight(), value.getCity());
+ }
+<p>
+ public Object objectToKey(Object object)
+ throws IOException
+ {
+ Part part = (Part) object;
+ return new PartKey(part.getNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Part part = (Part) object;
+ return new PartValue(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+</b>}
+</pre></blockquote>
+<p>In general, an entity binding is any class that implements the
+<a href="../../java/com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</a>
+ interface, just as an
+ordinary binding is any class that implements the
+<a href="../../java/com/sleepycat/bdb/bind/DataBinding.html">DataBinding</a>
+ interface. In the prior
+examples the built-in
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</a>
+ class (which implements
+<a href="../../java/com/sleepycat/bdb/bind/DataBinding.html">DataBinding</a>
+) was used and
+no application-defined binding classes were needed.</p>
+<p>In this example, application-defined binding classes are used that extend
+the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</a>
+ abstract base
+class. This base class implements
+<a href="../../java/com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</a>
+and provides the conversions between key/value bytes and key/value objects,
+just as the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</a>
+class does. The application-defined entity class implements the abstract
+methods defined in the base class that map between key/value objects and
+entity objects.</p>
+<p>Three abstract methods are implemented for each entity binding. The
+<b>dataToObject</b> method takes as input the key and value objects, which
+have been deserialized automatically by the base class. As output, it returns
+the combined <b>Part</b> entity.</p>
+<p>The <b>objectToKey</b> and <b>objectToValue</b> methods take an
+entity object as input. As output they return the part key or value object
+that is extracted from the entity object. The key or value will then be
+serialized automatically by the base class.</p>
+<hr size=1 noshade>
+<p>The <b>SupplierBinding</b> and <b>ShipmentBinding</b> classes are
+very similar to the <b>PartBinding</b> class.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+<b> private static class SupplierBinding extends SerialSerialBinding
+ {
+ private SupplierBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException
+ {
+ SupplierKey key = (SupplierKey) keyInput;
+ SupplierValue value = (SupplierValue) valueInput;
+ return new Supplier(key.getNumber(), value.getName(),
+ value.getStatus(), value.getCity());
+ }
+<p>
+ public Object objectToKey(Object object)
+ throws IOException
+ {
+ Supplier supplier = (Supplier) object;
+ return new SupplierKey(supplier.getNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Supplier supplier = (Supplier) object;
+ return new SupplierValue(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+<p>
+ private static class ShipmentBinding extends SerialSerialBinding
+ {
+ private ShipmentBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException
+ {
+ ShipmentKey key = (ShipmentKey) keyInput;
+ ShipmentValue value = (ShipmentValue) valueInput;
+ return new Shipment(key.getPartNumber(), key.getSupplierNumber(),
+ value.getQuantity());
+ }
+<p>
+ public Object objectToKey(Object object)
+ throws IOException
+ {
+ Shipment shipment = (Shipment) object;
+ return new ShipmentKey(shipment.getPartNumber(),
+ shipment.getSupplierNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Shipment shipment = (Shipment) object;
+ return new ShipmentValue(shipment.getQuantity());
+ }
+ }
+</b>}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_entity/classes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_entity/classes.html b/db/docs/ref/bdb_entity/classes.html
new file mode 100644
index 000000000..736b20d55
--- /dev/null
+++ b/db/docs/ref/bdb_entity/classes.html
@@ -0,0 +1,178 @@
+<!--$Id: classes.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Defining entity classes</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Entity</dl></h3></td>
+<td align=right><a href="../bdb_entity/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/bindings.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Defining entity classes</h3>
+<p>As described in the prior section, <i>entity classes</i> are combined
+key/value classes that are managed by entity bindings. In this example the
+<b>Part</b>, <b>Supplier</b> and <b>Shipment</b> classes are entity
+classes. These classes contain fields that are a union of the fields of the
+key and value classes that were defined earlier for each store.</p>
+<p>In general, entity classes may be defined in any way desired by the
+application. The entity binding, which is also defined by the application, is
+responsible for mapping between key/value objects and entity objects.</p>
+<hr size=1 noshade>
+<p>The <b>Part</b>, <b>Supplier</b> and <b>Shipment</b> classes are
+defined below.</p>
+<p>An important difference between the entity classes defined here and the
+key and value classes defined earlier is that the entity classes are not
+serializable (do not implement the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</a>
+interface). This is because the entity classes are not directly stored. The
+entity binding decomposes an entity object into key and value objects, and
+only the key and value objects are serialized for storage.</p>
+<p>One advantage of using entities can already be seen in the
+<b>toString</b> method of the classes below. These return debugging output
+for the combined key and value, and will be used later to create a listing of
+the database that is more readable than in the prior examples.</p>
+<blockquote><pre><b>public class Part
+{
+ private String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+<p>
+ public Part(String number, String name, String color, Weight weight,
+ String city)
+ {
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+<p>
+ public final String getNumber()
+ {
+ return number;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final String getColor()
+ {
+ return color;
+ }
+<p>
+ public final Weight getWeight()
+ {
+ return weight;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + '';
+ }
+}
+</b></pre></blockquote>
+<blockquote><pre><b>public class Supplier
+{
+ private String number;
+ private String name;
+ private int status;
+ private String city;
+<p>
+ public Supplier(String number, String name, int status, String city)
+ {
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+<p>
+ public final String getNumber()
+ {
+ return number;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final int getStatus()
+ {
+ return status;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + '';
+ }
+}
+</b></pre></blockquote>
+<blockquote><pre><b>public class Shipment
+{
+ private String partNumber;
+ private String supplierNumber;
+ private int quantity;
+<p>
+ public Shipment(String partNumber, String supplierNumber, int quantity)
+ {
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+<p>
+ public final String getPartNumber()
+ {
+ return partNumber;
+ }
+<p>
+ public final String getSupplierNumber()
+ {
+ return supplierNumber;
+ }
+<p>
+ public final int getQuantity()
+ {
+ return quantity;
+ }
+<p>
+ public String toString()
+ {
+ return "Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + '';
+ }
+}
+</b></pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_entity/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/bindings.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_entity/intro.html b/db/docs/ref/bdb_entity/intro.html
new file mode 100644
index 000000000..69fe51d32
--- /dev/null
+++ b/db/docs/ref/bdb_entity/intro.html
@@ -0,0 +1,77 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Entity - Combining the key and value in a single object</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Entity</dl></h3></td>
+<td align=right><a href="../bdb_index/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/classes.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Entity - Combining the key and value in a single object</h3>
+<p>In the prior examples, the keys and values of each store were
+represented using separate classes. For example, a <b>PartKey</b>
+and a <b>PartValue</b> class were used. Many times it is desirable
+to have a single class representing both the key and the value, for
+example, a <b>Part</b> class.</p>
+<p>Such a combined key and value class is called an <i>entity class</i>
+and is used along with an <i>entity binding</i>. Entity bindings combine a
+key and a value into an entity when reading a record from a collection, and
+split an entity into a key and a value when writing a record to a
+collection. Entity bindings are used in place of value bindings, and entity
+objects are used with collections in place of value objects.</p>
+<p>The example program illustrates:</p>
+<p><ul type=disc>
+<li><a href="classes.html">Defining entity classes</a>
+<li><a href="bindings.html">Creating entity bindings</a>
+<li><a href="views.html">Creating collections with entity bindings</a>
+<li><a href="read.html">Using entities with collections</a>
+</ul>
+<p>Some reasons for using entities are:</p>
+<p><ul type=disc>
+<li>When the key is a property of an entity object representing the
+record as a whole, the object's identity and concept are often clearer than
+with key and value objects that are disjoint.
+<li>A single entity object per record is often more convenient to use
+than two objects.
+</ul>
+<p>Of course, instead of using an entity binding, you could simply create
+the entity yourself after reading the key and value from a collection, and
+split the entity into a key and value yourself before writing it to a
+collection. But this would detract from the convenience of the using the
+Java collections API. It is convenient to obtain a <b>Part</b> object
+directly from
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get">Map.get</a>
+ and to add a <b>Part</b>
+object using
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add">Set.add</a>
+. Collections having entity
+bindings can be used naturally without combining and splitting objects each
+time a collection method is called; however, an entity binding class must be
+defined by the application.</p>
+<p>In addition to showing how to use entity bindings, this example
+illustrates a key feature of all bindings: Bindings are independent of
+database storage parameters and formats. Compare this example to the prior
+Index example and you'll see that the <b>Sample</b> and
+<b>SampleViews</b> classes have been changed to use entity bindings, but the
+<b>SampleDatabase</b> class was not changed at all. In fact, the Entity
+program and the Index program can be used interchangeably to access the same
+physical database files. This demonstrates that bindings are only a "view"
+onto the physical stored data. Note that formats are managed by the
+<b>SampleDatabase</b> class because they define the physical syntax of the
+stored data.</p>
+<p>The complete source
+of the final version of the example program is included in the Berkeley DB
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_index/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/classes.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_entity/read.html b/db/docs/ref/bdb_entity/read.html
new file mode 100644
index 000000000..ef03054c8
--- /dev/null
+++ b/db/docs/ref/bdb_entity/read.html
@@ -0,0 +1,193 @@
+<!--$Id: read.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Using entities with collections</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Entity</dl></h3></td>
+<td align=right><a href="../bdb_entity/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Using entities with collections</h3>
+<p>In this example entity objects, rather than key and value objects, are
+used for adding and enumerating the records in a collection. Because fewer
+classes and objects are involved, adding and enumerating is done more
+conveniently and more simply than in the prior examples.</p>
+<p>For adding and iterating entities, the collection of entities returned by
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values">Map.values</a>
+ is used. In general, when using an
+entity binding, all Java collection methods that are passed or returned a value
+object will be passed or returned an entity object instead.</p>
+<hr size=1 noshade>
+<p>The <b>Sample</b> class has been changed in this example to add
+objects using the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add">Set.add</a>
+ method rather than the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put">Map.put</a>
+ method that was used in the prior examples.
+Entity objects are constructed and passed to
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Set.html#add">Set.add</a>
+.</p>
+<blockquote><pre>
+public class Sample
+{
+ ...
+ private void addSuppliers()
+ {
+<b> Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty())
+ {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+</b> }
+<p>
+ private void addParts()
+ {
+<b> Set parts = views.getPartSet();
+ if (parts.isEmpty())
+ {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+</b> }
+<p>
+ private void addShipments()
+ {
+<b> Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty())
+ {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+</b> }
+</pre></blockquote>
+<hr size=1 noshade>
+<p>Instead of printing the key/value pairs by iterating over the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet">Map.entrySet</a>
+ as done in the prior example, this
+example iterates over the entities in the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values">Map.values</a>
+ collection.</p>
+<blockquote><pre>
+import com.sleepycat.bdb.collection.StoredIterator;
+import java.util.Iterator;
+import java.util.Set;
+...
+public class Sample
+{
+ ...
+ private class PrintDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+<b> printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+</b> printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+<b> printValues("Shipments",
+ views.getShipmentSet().iterator());
+</b> printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The output of the example program is shown below.</p>
+<blockquote><pre>
+Adding Suppliers
+Adding Parts
+Adding Shipments
+<p>
+--- Parts ---
+Part: number=P1 name=Nut color=Red weight=[12.0 grams] city=London
+Part: number=P2 name=Bolt color=Green weight=[17.0 grams] city=Paris
+Part: number=P3 name=Screw color=Blue weight=[17.0 grams] city=Rome
+Part: number=P4 name=Screw color=Red weight=[14.0 grams] city=London
+Part: number=P5 name=Cam color=Blue weight=[12.0 grams] city=Paris
+Part: number=P6 name=Cog color=Red weight=[19.0 grams] city=London
+<p>
+--- Suppliers ---
+Supplier: number=S1 name=Smith status=20 city=London
+Supplier: number=S2 name=Jones status=10 city=Paris
+Supplier: number=S3 name=Blake status=30 city=Paris
+Supplier: number=S4 name=Clark status=20 city=London
+Supplier: number=S5 name=Adams status=30 city=Athens
+<p>
+--- Suppliers for City Paris ---
+Supplier: number=S2 name=Jones status=10 city=Paris
+Supplier: number=S3 name=Blake status=30 city=Paris
+<p>
+--- Shipments ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P1 supplier=S2 quantity=300
+Shipment: part=P2 supplier=S1 quantity=200
+Shipment: part=P2 supplier=S2 quantity=400
+Shipment: part=P2 supplier=S3 quantity=200
+Shipment: part=P2 supplier=S4 quantity=200
+Shipment: part=P3 supplier=S1 quantity=400
+Shipment: part=P4 supplier=S1 quantity=200
+Shipment: part=P4 supplier=S4 quantity=300
+Shipment: part=P5 supplier=S1 quantity=100
+Shipment: part=P5 supplier=S4 quantity=400
+Shipment: part=P6 supplier=S1 quantity=100
+<p>
+--- Shipments for Part P1 ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P1 supplier=S2 quantity=300
+<p>
+--- Shipments for Supplier S1 ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P2 supplier=S1 quantity=200
+Shipment: part=P3 supplier=S1 quantity=400
+Shipment: part=P4 supplier=S1 quantity=200
+Shipment: part=P5 supplier=S1 quantity=100
+Shipment: part=P6 supplier=S1 quantity=100
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_entity/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_entity/views.html b/db/docs/ref/bdb_entity/views.html
new file mode 100644
index 000000000..38455cbc6
--- /dev/null
+++ b/db/docs/ref/bdb_entity/views.html
@@ -0,0 +1,104 @@
+<!--$Id: views.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Creating collections with entity bindings</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Entity</dl></h3></td>
+<td align=right><a href="../bdb_entity/bindings.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Creating collections with entity bindings</h3>
+<p>Stored map objects are created in this example in the same way as in
+prior examples, but using entity bindings in place of value bindings. All
+value objects passed and returned to the Java collections API are then actually
+entity objects (<b>Part</b>, <b>Supplier</b> and <b>Shipment</b>).
+The application no longer deals directly with plain value objects
+(<b>PartValue</b>, <b>SupplierValue</b> and <b>ShipmentValue</b>).</p>
+<hr size=1 noshade>
+<p>Since the <b>partValueBinding</b>, <b>supplierValueBinding</b> and
+<b>shipmentValueBinding</b> were defined as entity bindings in the prior
+section, there are no source code changes necessary for creating the stored map
+objects.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+ public SampleViews(SampleDatabase db)
+ {
+ ...
+ partMap =
+ new StoredMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ }
+</pre></blockquote>
+<p>Specifying an
+<a href="../../java/com/sleepycat/bdb/bind/EntityBinding.html">EntityBinding</a>
+will select a different
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+constructor, but the syntax is the same. In general, an entity binding may be
+used anywhere that a value binding is used.</p>
+<hr size=1 noshade>
+<p>The following getter methods are defined for use by other classes in the
+example program. Instead of returning the map's entry set
+(
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet">Map.entrySet</a>
+), the map's value set
+(
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values">Map.values</a>
+) is returned. The entry set was
+convenient in prior examples because it allowed enumerating all key/value pairs
+in the collection. Since an entity contains the key and the value, enumerating
+the value set can now be used more conveniently for the same purpose.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+<b> public StoredValueSet getPartSet()
+ {
+ return (StoredValueSet) partMap.values();
+ }
+<p>
+ public StoredValueSet getSupplierSet()
+ {
+ return (StoredValueSet) supplierMap.values();
+ }
+<p>
+ public StoredValueSet getShipmentSet()
+ {
+ return (StoredValueSet) shipmentMap.values();
+ }
+</b> ...
+}
+</pre></blockquote>
+<p>Notice that the collection returned by the
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#values">StoredMap.values</a>
+ method is
+actually a
+<a href="../../java/com/sleepycat/bdb/collection/StoredValueSet.html">StoredValueSet</a>
+ and not
+just a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+ as defined by the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#values">Map.values</a>
+ interface. As long as duplicate keys
+are not allowed, this collection will behave as a true set and will disallow
+the addition of duplicates, etc.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_entity/bindings.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_index/foreign.html b/db/docs/ref/bdb_index/foreign.html
new file mode 100644
index 000000000..e0b6e75b0
--- /dev/null
+++ b/db/docs/ref/bdb_index/foreign.html
@@ -0,0 +1,259 @@
+<!--$Id: foreign.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Opening foreign key indices</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Index</dl></h3></td>
+<td align=right><a href="../bdb_index/second.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Opening foreign key indices</h3>
+<p>This section builds on the prior section describing secondary key
+indices to show how to open foreign key indices. A <i>foreign key
+index</i> is a secondary key index that also provides integrity constraints. When
+the primary key of a record in one store is embedded in the value of a record
+in another store, integrity constraints ensure that the record in the first
+store exists, i.e, that there are no "dangling pointers". In this example the
+Shipment's PartNumber and SupplierNumber fields will be used as foreign keys.</p>
+<p>When a foreign key index is defined, an "on delete" parameter is
+specified. This parameter determines what action is taken by the Java API when
+the record is deleted to which a foreign key refers. For example, consider
+what happens to a Shipment record when a Part or Supplier record that is
+referred to by that Shipment is deleted. There are three possibilities.</p>
+<p><ul type=disc>
+<li>
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_ABORT">ForeignKeyIndex.ON_DELETE_ABORT</a>
+specifies that the transaction should be aborted by throwing an exception. The
+effect is that deleting a Part or Supplier that is referred to by one or more
+Shipments will not be possible. The Java API will automatically throw an
+<a href="../../java/com/sleepycat/bdb/IntegrityConstraintException.html">IntegrityConstraintException</a>
+, which will
+cause the transaction to be aborted during exception processing. This option
+may only be specified when transactions are used.
+<li>
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR">ForeignKeyIndex.ON_DELETE_CLEAR</a>
+specifies that the Part or Supplier Number field in the Shipment record should
+be cleared, or set to a null or empty value. The effect is that the deleted
+Part or Supplier will no longer be referenced by any Shipment record. This
+option applies when the foreign key field is optional, i.e, when the
+applications allows it to be set to a null or empty value. When using this
+option, the application must implement the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html#clearIndexKey">KeyExtractor.clearIndexKey</a>
+ method
+such that after it is called the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html#extractIndexKey">KeyExtractor.extractIndexKey</a>
+ method
+will return null.
+<li>
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CASCADE">ForeignKeyIndex.ON_DELETE_CASCADE</a>
+ specifies that the Shipment record should be deleted also.
+The effect is that deleting a Part or Supplier will delete all Shipments for
+that Part or Supplier. This option applies when the deleted record
+is considered the "parent" or "owner" of the record containing the
+foreign key, and is used in this example. Since deleting the Shipment
+record could cause other deletions if other records contain the foreign
+key of the Shipment, and so on, the term "cascade" is used to describe
+the effect.
+</ul>
+<hr size=1 noshade>
+<p>The <b>SampleDatabase</b> class is extended to open the
+Shipment-by-Part and Shipment-by-Supplier secondary key indices. The following
+additional imports and class members are needed.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor;
+import com.sleepycat.bdb.ForeignKeyIndex;
+</b>...
+public class SampleDatabase
+{
+ ...
+<b> private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX = "shipment_supplier_index";
+ ...
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ ...
+</b> public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+ ...
+<b> KeyExtractor partExtractor = new ShipmentByPartExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat);
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+<p>
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+<p>
+ KeyExtractor supplierExtractor = new ShipmentBySupplierExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat);
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+<p>
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+</b> }
+}
+</pre></blockquote>
+<p>Opening a foreign key index requires creating a
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+, a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+, a
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ and a
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+. In the example two
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ objects are created, <b>shipmentByPartIndex</b> and
+<b>shipmentBySupplierIndex</b>.</p>
+<p>If you compare these statements for opening foreign key indices to the
+statements used in the previous section for opening a secondary index,
+you'll notice that the only significant differences are the parameters of the
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ constructor, as compared to
+the
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ constructor. The first three
+parameters are the same. The last two
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ parameters are used for enforcing integrity constraints. The
+fourth parameter is the foreign store that contains the records to which the
+foreign keys refer. The fifth and last parameter is the "on delete" action.</p>
+<hr size=1 noshade>
+<p>The application-defined <b>ShipmentByPartExtractor</b> and
+<b>ShipmentBySupplierExtractor</b> classes are shown below. They were used
+above to create the <b>partExtractor</b> and <b>supplierExtractor</b>
+objects.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+<b> private static class ShipmentByPartExtractor
+ extends SerialSerialKeyExtractor
+ {
+ private ShipmentByPartExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException
+ {
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new PartKey(shipmentKey.getPartNumber());
+ }
+<p>
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+<p>
+ private static class ShipmentBySupplierExtractor
+ extends SerialSerialKeyExtractor
+ {
+ private ShipmentBySupplierExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException
+ {
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new SupplierKey(shipmentKey.getSupplierNumber());
+ }
+<p>
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+</b>}
+</pre></blockquote>
+<p>The key extractor classes above are almost identical to the one defined
+in the previous section for use with a secondary index. The index key fields
+are different, of course, but the interesting difference is that the index keys
+are extracted from the key, not the value, of the Shipment record. This
+illustrates that an index key may be derived from the store record key, value,
+or both.</p>
+<p>Note that the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey">SerialSerialKeyExtractor.clearIndexKey</a>
+ methods above always throw an
+exception, just like in the key extractor class in the previous section. This
+is because
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR">ForeignKeyIndex.ON_DELETE_CLEAR</a>
+was not used when creating the
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ objects. If it were used, these methods would need to set the
+part number and supplier number to null in the Shipment key. But record keys
+cannot be changed! And in fact, the Shipment key is not passed to the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey">SerialSerialKeyExtractor.clearIndexKey</a>
+ method, only the Shipment value is passed. Therefore, if a
+foreign index key is derived from the store record key,
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html#ON_DELETE_CLEAR">ForeignKeyIndex.ON_DELETE_CLEAR</a>
+ may not be
+used.</p>
+<hr size=1 noshade>
+<p>The following getter methods return the index objects for use by other
+classes in the example program. The index objects are used to create Java
+collections for accessing records via their foreign keys.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+<b> public final ForeignKeyIndex getShipmentByPartIndex()
+ {
+ return shipmentByPartIndex;
+ }
+<p>
+ public final ForeignKeyIndex getShipmentBySupplierIndex()
+ {
+ return shipmentBySupplierIndex;
+ }
+</b>}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+ objects, just like
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ objects, are closed automatically
+when their associated
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ is closed.
+There is no way to close an index explicitly without closing the store.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_index/second.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/views.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_index/intro.html b/db/docs/ref/bdb_index/intro.html
new file mode 100644
index 000000000..a97aa333d
--- /dev/null
+++ b/db/docs/ref/bdb_index/intro.html
@@ -0,0 +1,35 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Index - Indices and foreign keys</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Index</dl></h3></td>
+<td align=right><a href="../bdb_basic/except.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/second.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Index - Indices and foreign keys</h3>
+<p>In the Basic example, each store has a single <i>primary key</i>. The
+Index example extends the Basic example to add the use of <i>secondary
+keys</i> and <i>foreign keys</i>. The example program illustrates:</p>
+<p><ul type=disc>
+<li><a href="second.html">Opening secondary key indices</a>
+<li><a href="foreign.html">Opening foreign key indices</a>
+<li><a href="views.html">Creating indexed collections</a>
+<li><a href="read.html">Retrieving items by index key</a>
+</ul>
+<p>The complete source
+of the final version of the example program is included in the Berkeley DB
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_basic/except.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/second.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_index/read.html b/db/docs/ref/bdb_index/read.html
new file mode 100644
index 000000000..323ac5971
--- /dev/null
+++ b/db/docs/ref/bdb_index/read.html
@@ -0,0 +1,220 @@
+<!--$Id: read.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Retrieving items by index key</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Index</dl></h3></td>
+<td align=right><a href="../bdb_index/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Retrieving items by index key</h3>
+<p>Retrieving information via database index keys can be accomplished using
+the standard Java collections API, using a collection created from a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ rather than a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+. However, the standard Java API
+does not support <i>duplicate keys</i>: more than one element in a
+collection having the same key. All three indices created in the prior section
+have duplicate keys because of the nature of the city, part number and supplier
+number index keys. More than one supplier may be in the same city, and more
+than one shipment may have the same part number or supplier number. This
+section describes how to use extended methods for stored collections to return
+all values for a given key.</p>
+<p>Using the standard Java collections API, the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get">Map.get</a>
+ method for a stored collection with duplicate keys will return only
+the first value for a given key. To obtain all values for a given key, the
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#duplicates">StoredMap.duplicates</a>
+ method may
+be called. This returns a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+ of values for
+the given key. If duplicate keys are not allowed, the returned collection will
+have at most one value. If the key is not present in the map, an empty
+collection is returned.</p>
+<hr size=1 noshade>
+<p>The <b>Sample</b> class is extended to retrieve duplicates for
+specific index keys that are present in the database.</p>
+<blockquote><pre>
+import com.sleepycat.bdb.collection.StoredIterator;
+import java.util.Iterator;
+...
+public class Sample
+{
+ ...
+ private SampleViews views;
+ ...
+ private class PrintDatabase implements TransactionWorker
+ {
+ public void doWork()
+ throws Exception
+ {
+ printEntries("Parts",
+ views.getPartEntrySet().iterator());
+ printEntries("Suppliers",
+ views.getSupplierEntrySet().iterator());
+<b> printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+</b> printEntries("Shipments",
+ views.getShipmentEntrySet().iterator());
+<b> printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+</b> }
+ }
+<p>
+<b> private void printValues(String label, Iterator iterator)
+ {
+ System.out.println("\n--- " + label + " ---");
+ try
+ {
+ while (iterator.hasNext())
+ {
+ System.out.println(iterator.next().toString());
+ }
+ }
+ finally
+ {
+ StoredIterator.close(iterator);
+ }
+ }
+</b>}
+</pre></blockquote>
+<p>The
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#duplicates">StoredMap.duplicates</a>
+method is called passing the desired key. The returned value is a standard
+Java
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html">Collection</a>
+ containing the values for the
+specified key. A standard Java
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Iterator.html">Iterator</a>
+ is then
+obtained for this collection and all values returned by that iterator are
+printed.</p>
+<p>Another technique for retrieving duplicates is to use the collection
+returned by
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#entrySet">Map.entrySet</a>
+. When duplicate keys are
+present, a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.Entry.html">Map.Entry</a>
+ object will be present in this
+collection for each duplicate. This collection can then be iterated or a
+subset can be created from it, all using the standard Java collection API.</p>
+<hr size=1 noshade>
+<p>Note that we did not discuss how duplicates keys can be explicitly added
+or removed in a collection. For index keys, the addition and deletion of
+duplicate keys happens automatically when records containing the index key
+are added, updated, or removed.</p>
+<p>While not shown in the example program, it is also possible to create a
+store with duplicate keys in the same way as an index with duplicate keys--by
+calling
+<a href="../../java/com/sleepycat/db/Db.html#setFlags">Db.setFlags</a>
+ with the
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUPSORT">Db.DB_DUPSORT</a>
+ flag. In that case, calling
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#put">Map.put</a>
+ will add duplicate keys. To remove all
+duplicate keys, call
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#remove">Map.remove</a>
+. To remove a
+specific duplicate key, call
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html#duplicates">StoredMap.duplicates</a>
+ and then call
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#remove">Collection.remove</a>
+ using the returned collection. Duplicate values may also be added to
+this collection using
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Collection.html#add">Collection.add</a>
+.</p>
+<hr size=1 noshade>
+<p>The output of the example program is shown below.</p>
+<blockquote><pre>
+Adding Suppliers
+Adding Parts
+Adding Shipments
+<p>
+--- Parts ---
+PartKey: number=P1
+PartValue: name=Nut color=Red weight=[12.0 grams] city=London
+PartKey: number=P2
+PartValue: name=Bolt color=Green weight=[17.0 grams] city=Paris
+PartKey: number=P3
+PartValue: name=Screw color=Blue weight=[17.0 grams] city=Rome
+PartKey: number=P4
+PartValue: name=Screw color=Red weight=[14.0 grams] city=London
+PartKey: number=P5
+PartValue: name=Cam color=Blue weight=[12.0 grams] city=Paris
+PartKey: number=P6
+PartValue: name=Cog color=Red weight=[19.0 grams] city=London
+<p>
+--- Suppliers ---
+SupplierKey: number=S1
+SupplierValue: name=Smith status=20 city=London
+SupplierKey: number=S2
+SupplierValue: name=Jones status=10 city=Paris
+SupplierKey: number=S3
+SupplierValue: name=Blake status=30 city=Paris
+SupplierKey: number=S4
+SupplierValue: name=Clark status=20 city=London
+SupplierKey: number=S5
+SupplierValue: name=Adams status=30 city=Athens
+<p>
+<b>--- Suppliers for City Paris ---
+SupplierValue: name=Jones status=10 city=Paris
+SupplierValue: name=Blake status=30 city=Paris
+</b><p>
+--- Shipments ---
+ShipmentKey: supplier=S1 part=P1
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S2 part=P1
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S1 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S2 part=P2
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S3 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S4 part=P2
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S1 part=P3
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S1 part=P4
+ShipmentValue: quantity=200
+ShipmentKey: supplier=S4 part=P4
+ShipmentValue: quantity=300
+ShipmentKey: supplier=S1 part=P5
+ShipmentValue: quantity=100
+ShipmentKey: supplier=S4 part=P5
+ShipmentValue: quantity=400
+ShipmentKey: supplier=S1 part=P6
+ShipmentValue: quantity=100
+<b><p>
+--- Shipments for Part P1 ---
+ShipmentValue: quantity=300
+ShipmentValue: quantity=300
+<p>
+--- Shipments for Supplier S1 ---
+ShipmentValue: quantity=300
+ShipmentValue: quantity=200
+ShipmentValue: quantity=400
+ShipmentValue: quantity=200
+ShipmentValue: quantity=100
+ShipmentValue: quantity=100
+</b></pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_index/views.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_entity/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_index/second.html b/db/docs/ref/bdb_index/second.html
new file mode 100644
index 000000000..e82d7a555
--- /dev/null
+++ b/db/docs/ref/bdb_index/second.html
@@ -0,0 +1,266 @@
+<!--$Id: second.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Opening secondary key indices</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Index</dl></h3></td>
+<td align=right><a href="../bdb_index/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/foreign.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Opening secondary key indices</h3>
+<p><i>Secondary key indices</i> are used to access a store by a key
+other than the primary key. Recall that the Supplier Number field is the
+primary key of the Supplier store. In this section, the Supplier City
+field will be used as a secondary lookup key. Given a city value, we would
+like to be able to find the Suppliers in that city. Note that more than one
+Supplier may be in the same city.</p>
+<p>Both stores and indices are database files containing key-value records.
+The key of an index record is the secondary key, and its value is the key of
+the associated record in the store. When lookups by secondary key are
+performed, the associated record in the store is transparently retrieved by
+its primary key and returned to the caller.</p>
+<p>Secondary indices are maintained automatically when index key fields (the
+City field in this case) are added, modified or removed in the records of the
+store. However, the application must implement a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ that extracts the index key
+from the store record.</p>
+<p>It is useful to contrast opening an index with opening a store (as
+described earlier in <a href="../bdb_basic/stores.html">Opening and closing database
+stores</a>).</p>
+<p><ul type=disc>
+<li>A store may be associated with one or more indices. An index is
+always associated with exactly one store.
+<li>For an index, a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+must be implemented by the application to extract the index key from the record
+of its associated store.
+<li>Both a store and an index use a
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+object to store records in a database file.
+<li>For stores a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ object is
+created which wraps the
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ object. For
+indices a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ object is created which
+wraps the
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ object and associates it with
+a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ and a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+.
+</ul>
+<hr size=1 noshade>
+<p>The <b>SampleDatabase</b> class is extended to open the
+Supplier-by-City secondary key index. The following additional imports and
+class members are needed.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor;
+import com.sleepycat.bdb.DataIndex;
+</b>...
+public class SampleDatabase
+{
+ ...
+<b> private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+ ...
+ private DataIndex supplierByCityIndex;
+ private SerialFormat cityKeyFormat;
+ ...
+</b> public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+ ...
+<b> cityKeyFormat = new SerialFormat(javaCatalog, String.class);
+<p>
+ KeyExtractor cityExtractor = new SupplierByCityExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat);
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+<p>
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+</b> }
+}
+</pre></blockquote>
+<p>Opening a secondary key index requires creating a
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+, a
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+, a
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ and a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+.</p>
+<p>Like the formats created earlier for keys and values, the
+<b>cityKeyFormat</b> is a
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+. Unlike the formats created earlier, it is an example of
+creating a format for a Java primitive class,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</a>
+, instead of an application-defined class. Any serializable class may
+be used.</p>
+<p>The <b>cityExtractor</b> is an instance of the application class
+<b>SupplierByCityExtractor</b>. This class implements the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ interface and will be defined
+below. Recall that <b>supplierKeyFormat</b> and
+<b>supplierValueFormat</b>, two of the parameters to its constructor, were
+created earlier in <a href="../bdb_basic/stores.html">Opening and closing database
+stores</a>.</p>
+<p>The <b>cityIndexDb</b>
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ object is
+created and opened next. If you compare these statements for opening an index
+to the statements we used previously for opening a store, you'll notice only
+one difference: For an index the
+<a href="../../java/com/sleepycat/db/Db.html#setFlags">Db.setFlags</a>
+ method is called, while for a store it is not. The
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUPSORT">Db.DB_DUPSORT</a>
+ flag is specified to allow
+duplicate index keys. This is how more than one Supplier may be in the same
+City. If this flag is not specified, the default is that the index keys of all
+records must be unique.</p>
+<p>For a store, duplicate keys are not normally used since a store with
+duplicate keys may not have any associated indices. If store keys are not
+unique, there is no way for a secondary key to reference a specific record in
+the store.</p>
+<p>Note that
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUPSORT">Db.DB_DUPSORT</a>
+ and not
+<a href="../../java/com/sleepycat/db/Db.html#DB_DUP">Db.DB_DUP</a>
+ was specified. Sorted duplicates
+are always used for indices rather than unsorted duplicates, since sorting
+enables optimized equality joins.</p>
+<p>Finally, the <b>supplierByCityIndex</b>
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ object is created from the
+supplier store, index Db, index key format, and key extractor. How to use the
+index to access records will be shown in a later section.</p>
+<hr size=1 noshade>
+<p>The application-defined <b>SupplierByCityExtractor</b> class is shown
+below. It was used above to create the <b>cityExtractor</b> object.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+<b> private static class SupplierByCityExtractor
+ extends SerialSerialKeyExtractor
+ {
+ private SupplierByCityExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException
+ {
+ SupplierValue supplierValue = (SupplierValue) valueInput;
+ return supplierValue.getCity();
+ }
+<p>
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+</b>}
+</pre></blockquote>
+<p>In general, a key extractor class must implement the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ interface. This interface
+has methods that operate on the record data as raw bytes. In practice, it is
+easiest to use an abstract base class that performs the conversion of record
+data to and from the format defined for the store's key and value. The base
+class implements the
+<a href="../../java/com/sleepycat/bdb/bind/KeyExtractor.html">KeyExtractor</a>
+ interface
+and has abstract methods that must be implemented in turn by the application.</p>
+<p>In this example the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</a>
+ base class is used because the store record uses the
+serial format for both its key and its value. The abstract methods of this
+class have key and value parameters of type
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</a>
+which are automatically converted to and from the raw record data by the base
+class.</p>
+<p>To perform the conversions properly, the key extractor must be aware of
+all three formats involved: the key format of the store record, the value
+format of the store record, and the key format of the index record. The
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</a>
+ constructor
+is given these three formats as parameters.</p>
+<p>The
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#extractIndexKey">SerialSerialKeyExtractor.extractIndexKey</a>
+ method is given the key and value of the store record as
+parameters, and it returns the key of the index record. In this example, the
+index key is a field in the store record value. Since the record value is
+known to be a <b>SupplierValue</b> object, it is cast to that class and the
+city field is returned.</p>
+<p>Note that the <b>primaryKeyInput</b> parameter is not used in the
+example. This parameter is needed only when an index key is derived from the
+key of the store record. Normally an index key is derived only from the store
+record value, but it may be derived from the key, value or both.</p>
+<p>The
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html#clearIndexKey">SerialSerialKeyExtractor.clearIndexKey</a>
+ method is implemented only for foreign keys under certain
+conditions and will be described in the next section. In the
+<b>SupplierByCityExtractor</b> class this method always throws an
+exception since it should never be called.</p>
+<hr size=1 noshade>
+<p>The following getter methods return the index key format and index object
+for use by other classes in the example program. The format is used for
+creating bindings to the index key. The index object is used to create Java
+collections for accessing records via their secondary keys.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+<b> public final SerialFormat getCityKeyFormat()
+ {
+ return cityKeyFormat;
+ }
+<p>
+ public final DataIndex getSupplierByCityIndex()
+ {
+ return supplierByCityIndex;
+ }
+</b>}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>If you're wondering why this section does not include an example of how
+to close a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+, that is because
+indices are closed automatically when their associated
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+ is closed. There is no way to
+close an index explicitly without closing the store.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_index/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/foreign.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_index/views.html b/db/docs/ref/bdb_index/views.html
new file mode 100644
index 000000000..5fdbed2d8
--- /dev/null
+++ b/db/docs/ref/bdb_index/views.html
@@ -0,0 +1,144 @@
+<!--$Id: views.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Creating indexed collections</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Index</dl></h3></td>
+<td align=right><a href="../bdb_index/foreign.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Creating indexed collections</h3>
+<p>In the prior Basic example, bindings and Java collections were created
+for accessing stores via their primary keys. In this example, bindings and
+collections are added for accessing the same stores via their index keys. As
+in the prior example, serial bindings and the Java
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html">Map</a>
+ class are used.</p>
+<p>When a map is created from a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+or a
+<a href="../../java/com/sleepycat/bdb/ForeignKeyIndex.html">ForeignKeyIndex</a>
+, the keys of the map
+will be the index keys. However, the values of the map will be the values of
+the store associated with the index. This is how index keys can be used to
+access the values in a store.</p>
+<p>For example, the Supplier's City field is an index key that can be used
+to access the Supplier store. When a map is created using the
+<b>supplierByCityIndex</b>, the key to the map will be the City field, a
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</a>
+ object. When
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/Map.html#get">Map.get</a>
+ is called passing the City as the key parameter, a <b>SupplierValue</b>
+object will be returned.</p>
+<hr size=1 noshade>
+<p>The <b>SampleViews</b> class is extended to create an index key
+binding for the Supplier's City field and three Java maps based on the three
+indices created in the prior section.</p>
+<blockquote><pre>
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.collection.StoredEntrySet;
+import com.sleepycat.bdb.collection.StoredMap;
+<p>
+public class SampleViews
+{
+ ...
+<b> private StoredMap supplierByCityMap;
+ private StoredMap shipmentByPartMap;
+ private StoredMap shipmentBySupplierMap;
+</b><p>
+ public SampleViews(SampleDatabase db)
+ {
+<b> ...
+ DataBinding cityKeyBinding =
+ new SerialBinding(db.getCityKeyFormat());
+ ...
+ supplierByCityMap =
+ new StoredMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ shipmentByPartMap =
+ new StoredMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+</b>
+ }
+}
+</pre></blockquote>
+<p>In general, the indexed maps are created here in the same way as the
+unindexed maps were created in the Basic example. The differences are:</p>
+<p><ul type=disc>
+<li>The first parameter of the
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+ constructor is a
+<a href="../../java/com/sleepycat/bdb/DataIndex.html">DataIndex</a>
+ rather than a
+<a href="../../java/com/sleepycat/bdb/DataStore.html">DataStore</a>
+.
+<li>The second parameter is the index key binding rather than the
+primary key binding.
+</ul>
+<p>For the <b>supplierByCityMap</b>, the <b>cityKeyBinding</b> must
+first be created. This binding was not created in the Basic example because
+the City field is not a primary key.</p>
+<p>For the <b>shipmentByPartMap</b> and <b>shipmentBySupplierMap</b>,
+the <b>partKeyBinding</b> and <b>supplierKeyBinding</b> are used. These
+were created in the Basic example and used as the primary key bindings for the
+<b>partMap</b> and <b>supplierMap</b>.</p>
+<p>The value bindings--<b>supplierValueBinding</b> and
+<b>shipmentValueBinding</b>--were also created in the Basic example.</p>
+<p>This illustrates that bindings and formats may and should be reused where
+appropriate for creating maps and other collections.</p>
+<hr size=1 noshade>
+<p>The following getter methods return the stored maps for use by other
+classes in the example program. Convenience methods for returning entry sets
+are also included.</p>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+<b> public final StoredMap getShipmentByPartMap()
+ {
+ return shipmentByPartMap;
+ }
+<p>
+ public final StoredMap getShipmentBySupplierMap()
+ {
+ return shipmentBySupplierMap;
+ }
+<p>
+ public final StoredMap getSupplierByCityMap()
+ {
+ return supplierByCityMap;
+ }
+<p>
+ public final StoredEntrySet getShipmentByPartEntrySet()
+ {
+ return (StoredEntrySet) shipmentByPartMap.entrySet();
+ }
+<p>
+ public final StoredEntrySet getShipmentBySupplierEntrySet()
+ {
+ return (StoredEntrySet) shipmentBySupplierMap.entrySet();
+ }
+<p>
+ public final StoredEntrySet getSupplierByCityEntrySet()
+ {
+ return (StoredEntrySet) supplierByCityMap.entrySet();
+ }
+</b>}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_index/foreign.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_index/read.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_sentity/binding.html b/db/docs/ref/bdb_sentity/binding.html
new file mode 100644
index 000000000..8fd1a9623
--- /dev/null
+++ b/db/docs/ref/bdb_sentity/binding.html
@@ -0,0 +1,134 @@
+<!--$Id: binding.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Serializable Entity - Using transient fields in an entity binding</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Serializable Entity</dl></h3></td>
+<td align=right><a href="../bdb_sentity/class.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/remove.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Serializable Entity - Using transient fields in an entity binding</h3>
+<p>The entity bindings from the prior example have been changed in this
+example to use the entity object both as a value object and an entity object.</p>
+<p>Before, the <b>dataToObject</b> method combined the deserialized value
+object with the key fields to create a new entity object. Now, this method
+uses the deserialized object directly as an entity, and initializes its key
+using the fields read from the key tuple.</p>
+<p>Before, the <b>objectToValue</b> method constructed a new value
+object using information in the entity. Now it simply returns the entity.
+Nothing needs to be changed in the entity, since the transient key fields won't
+be serialized.</p>
+<hr size=1 noshade>
+<blockquote><pre>
+public class SampleViews
+{
+ ...
+ private static class PartBinding extends TupleSerialBinding
+ {
+ private PartBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException
+ {
+ String number = keyInput.readString();
+<b> Part part = (Part) valueInput;
+ part.setKey(number);
+ return part;
+</b> }
+<p>
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException
+ {
+ Part part = (Part) object;
+ output.writeString(part.getNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+<b> return object;
+</b> }
+ }
+<p>
+ private static class SupplierBinding extends TupleSerialBinding
+ {
+ private SupplierBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException
+ {
+ String number = keyInput.readString();
+<b> Supplier supplier = (Supplier) valueInput;
+ supplier.setKey(number);
+ return supplier;
+</b> }
+<p>
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException
+ {
+ Supplier supplier = (Supplier) object;
+ output.writeString(supplier.getNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+<b> return object;
+</b> }
+ }
+<p>
+ private static class ShipmentBinding extends TupleSerialBinding
+ {
+ private ShipmentBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException
+ {
+ String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+<b> Shipment shipment = (Shipment) valueInput;
+ shipment.setKey(partNumber, supplierNumber);
+ return shipment;
+</b> }
+<p>
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException
+ {
+ Shipment shipment = (Shipment) object;
+ output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+ }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+<b> return object;
+</b> }
+ }
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_sentity/class.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/remove.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_sentity/class.html b/db/docs/ref/bdb_sentity/class.html
new file mode 100644
index 000000000..347cf0eb4
--- /dev/null
+++ b/db/docs/ref/bdb_sentity/class.html
@@ -0,0 +1,189 @@
+<!--$Id: class.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Serializable Entity - Using transient fields in an entity class</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Serializable Entity</dl></h3></td>
+<td align=right><a href="../bdb_sentity/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/binding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Serializable Entity - Using transient fields in an entity class</h3>
+<p>The entity classes in this example are redefined such that they can be
+used both as serializable value classes and as entity classes. Compared to the
+prior example there are three changes to the <b>Part</b>, <b>Supplier</b>
+and <b>Shipment</b> entity classes:</p>
+<p><ul type=disc>
+<li>Each class now implements the <b>Serializable</b> interface.
+<li>The key fields in each class are declared as <b>transient</b>.
+<li>A package-private <b>setKey</b> method is added to each class
+for initializing the transient key fields. This method will be called from
+the entity bindings.
+</ul>
+<hr size=1 noshade>
+<blockquote><pre>
+<b>import java.io.Serializable;
+...
+</b>public class Part <b>implements Serializable</b>
+{
+ private <b>transient</b> String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+<p>
+ public Part(String number, String name, String color, Weight weight,
+ String city)
+ {
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+<p>
+<b> final void setKey(String number)
+ {
+ this.number = number;
+ }
+</b>
+<p>
+ public final String getNumber()
+ {
+ return number;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final String getColor()
+ {
+ return color;
+ }
+<p>
+ public final Weight getWeight()
+ {
+ return weight;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + '';
+ }
+}
+...
+public class Supplier <b>implements Serializable</b>
+{
+ private <b>transient</b> String number;
+ private String name;
+ private int status;
+ private String city;
+<p>
+ public Supplier(String number, String name, int status, String city)
+ {
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+<p>
+<b> void setKey(String number)
+ {
+ this.number = number;
+ }
+</b>
+<p>
+ public final String getNumber()
+ {
+ return number;
+ }
+<p>
+ public final String getName()
+ {
+ return name;
+ }
+<p>
+ public final int getStatus()
+ {
+ return status;
+ }
+<p>
+ public final String getCity()
+ {
+ return city;
+ }
+<p>
+ public String toString()
+ {
+ return "Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + '';
+ }
+}
+...
+public class Shipment <b>implements Serializable</b>
+{
+ private <b>transient</b> String partNumber;
+ private <b>transient</b> String supplierNumber;
+ private int quantity;
+<p>
+ public Shipment(String partNumber, String supplierNumber, int quantity)
+ {
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+<p>
+<b> void setKey(String partNumber, String supplierNumber)
+ {
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+</b><p>
+ public final String getPartNumber()
+ {
+ return partNumber;
+ }
+<p>
+ public final String getSupplierNumber()
+ {
+ return supplierNumber;
+ }
+<p>
+ public final int getQuantity()
+ {
+ return quantity;
+ }
+<p>
+ public String toString()
+ {
+ return "Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + '';
+ }
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_sentity/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/binding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_sentity/intro.html b/db/docs/ref/bdb_sentity/intro.html
new file mode 100644
index 000000000..4d8e3de0b
--- /dev/null
+++ b/db/docs/ref/bdb_sentity/intro.html
@@ -0,0 +1,63 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Serializable Entity - One serializable class for entities and values</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Serializable Entity</dl></h3></td>
+<td align=right><a href="../bdb_tuple/sorted.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/class.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Serializable Entity - One serializable class for entities and values</h3>
+<p>In the prior examples that used entities (Entity and Tuple) you may have
+noticed the redundancy between the serializable value classes and the entity
+classes. An entity class by definition contains all properties of the value
+class as well as all properties of the key class.</p>
+<p>When using serializable values it is possible to remove this redundancy
+by changing the entity class in two ways:</p>
+<p><ul type=disc>
+<li>Make the entity class serializable, so it can be used in place of
+the value class.
+<li>Make the key fields transient, so they are not redundantly stored in
+the record.
+</ul>
+<p>The modified entity class can then serve double-duty: It can be
+serialized and stored as the record value, and it can be used as the entity
+class as usual along with the Java collections API. The <b>PartValue</b>,
+<b>SupplierValue</b> and <b>ShipmentValue</b> classes can then be
+removed.</p>
+<p>The example program illustrates:</p>
+<p><ul type=disc>
+<li><a href="class.html">Using transient fields in an entity class</a>
+<li><a href="binding.html">Using transient fields in an entity binding</a>
+<li><a href="remove.html">Removing the redundant value classes</a>
+</ul>
+<p>Transient fields are defined in Java as fields that are not stored in
+the serialized form of an object. Therefore, when an object is deserialized
+the transient fields must be explicitly initialized. Since the entity binding
+is responsible for creating entity objects, it is the natural place to
+initialize the transient key fields.</p>
+<p>Note that it is not strictly necessary to make the key fields of a
+serializable entity class transient. If this is not done, the key will simply
+be stored redundantly in the record's value. This extra storage may or may not
+be acceptable to an application. But since we are using tuple keys and an
+entity binding class must be implemented anyway to extract the key from the
+entity, it is sensible to use transient key fields to reduce the record size.
+Of course there may be a reason that transient fields are not desired; for
+example, if an application wants to serialize the entity objects for other
+purposes, then using transient fields should be avoided.</p>
+<p>The complete source
+of the final version of the example program is included in the Berkeley DB
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/sorted.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/class.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_sentity/remove.html b/db/docs/ref/bdb_sentity/remove.html
new file mode 100644
index 000000000..3373e02db
--- /dev/null
+++ b/db/docs/ref/bdb_sentity/remove.html
@@ -0,0 +1,82 @@
+<!--$Id: remove.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Serializable Entity - Removing the redundant value classes</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Serializable Entity</dl></h3></td>
+<td align=right><a href="../bdb_sentity/binding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tut/summary.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Serializable Entity - Removing the redundant value classes</h3>
+<p>The <b>PartValue</b>, <b>SupplierValue</b> and
+<b>ShipmentValue</b> classes have been removed in this example, and the
+<b>Part</b>, <b>Supplier</b> and <b>Shipment</b> entity classes are
+used in their place.</p>
+<hr size=1 noshade>
+<p>The serial formats are created with the entity classes.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+ ...
+ partKeyFormat = new TupleFormat();
+ partValueFormat = new SerialFormat(javaCatalog, <b>Part</b>.class);
+ supplierKeyFormat = new TupleFormat();
+ supplierValueFormat = new SerialFormat(javaCatalog, <b>Supplier</b>.class);
+ shipmentKeyFormat = new TupleFormat();
+ shipmentValueFormat = new SerialFormat(javaCatalog, <b>Shipment</b>.class);
+ cityKeyFormat = new TupleFormat();
+ ...
+ }
+}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The index key extractor uses the entity class as well.</p>
+<blockquote><pre>
+public class SampleDatabase
+{
+ ...
+ private static class SupplierByCityExtractor
+ extends TupleSerialKeyExtractor
+ {
+ private SupplierByCityExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException
+ {
+ <b>Supplier</b> supplierValue = (<b>Supplier</b>) valueInput;
+ indexKeyOutput.writeString(supplierValue.getCity());
+ }
+<p>
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+<p>
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_sentity/binding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tut/summary.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/extract.html b/db/docs/ref/bdb_tuple/extract.html
new file mode 100644
index 000000000..72e644e4f
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/extract.html
@@ -0,0 +1,154 @@
+<!--$Id: extract.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Using tuples with key extractors</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_tuple/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/tbinding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Using tuples with key extractors</h3>
+<p>Key extractors were used in prior examples to extract index keys from
+value objects. The keys were returned as deserialized key objects, since the
+serial format was used for keys. In this example, the tuple format is used for
+keys and the key extractors return keys by writing information to a tuple. The
+differences between this example and the prior example are:</p>
+<p><ul type=disc>
+<li>The
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.html">TupleSerialKeyExtractor</a>
+base class is used instead of the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.html">SerialSerialKeyExtractor</a>
+base class.
+<li>For all keys, the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</a>
+class is used instead of the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+class.
+<li>For all key input and output parameters, the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</a>
+ and
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</a>
+classes are used instead of
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</a>
+ (representing a deserialized object).
+<li>Instead of returning a key output object, these methods call tuple
+write methods such as
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleOutput.html#writeString">TupleOutput.writeString</a>
+.
+</ul>
+<p>In addition to writing key tuples, the <b>ShipmentByPartExtractor</b>
+and <b>ShipmentBySupplierExtractor</b> classes also read the key tuple of
+the primary key. This is because they extract the index key from fields in the
+Shipment's primary key. Instead of calling getter methods on the
+<b>ShipmentKey</b> object, as in prior examples, these methods call
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleInput.html#readString">TupleInput.readString</a>
+. The
+<b>ShipmentKey</b> consists of two string fields that are read in
+sequence.</p>
+<hr size=1 noshade>
+<p>The modified key extractors are shown below:
+<b>SupplierByCityExtractor</b>,
+<b>ShipmentByPartExtractor</b> and
+<b>ShipmentBySupplierExtractor</b>.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+...
+</b>public class SampleDatabase
+{
+ private static class SupplierByCityExtractor
+<b> extends TupleSerialKeyExtractor
+</b> {
+ private SupplierByCityExtractor(<b>TupleFormat</b> primaryKeyFormat,
+ SerialFormat valueFormat,
+ <b>TupleFormat</b> indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public void extractIndexKey(<b>TupleInput</b> primaryKeyInput,
+ Object valueInput,
+ <b>TupleOutput</b> indexKeyOutput)
+ throws IOException
+ {
+ SupplierValue supplierValue = (SupplierValue) valueInput;
+<b> indexKeyOutput.writeString(supplierValue.getCity());
+</b> }
+<p>
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+<p>
+ private static class ShipmentByPartExtractor
+<b> extends TupleSerialKeyExtractor
+</b> {
+ private ShipmentByPartExtractor(<b>TupleFormat</b> primaryKeyFormat,
+ SerialFormat valueFormat,
+ <b>TupleFormat</b> indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public void extractIndexKey(<b>TupleInput</b> primaryKeyInput,
+ Object valueInput,
+ <b>TupleOutput</b> indexKeyOutput)
+ throws IOException
+ {
+<b> String partNumber = primaryKeyInput.readString();
+ // don't bother reading the supplierNumber
+ indexKeyOutput.writeString(partNumber);
+</b> }
+<p>
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+<p>
+ private static class ShipmentBySupplierExtractor
+<b> extends TupleSerialKeyExtractor
+</b> {
+ private ShipmentBySupplierExtractor(<b>TupleFormat</b> primaryKeyFormat,
+ SerialFormat valueFormat,
+ <b>TupleFormat</b> indexKeyFormat)
+ {
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+<p>
+ public void extractIndexKey(<b>TupleInput</b> primaryKeyInput,
+ Object valueInput,
+ <b>TupleOutput</b> indexKeyOutput)
+ throws IOException
+ {
+<b> primaryKeyInput.readString(); // skip the partNumber
+ String supplierNumber = primaryKeyInput.readString();
+ indexKeyOutput.writeString(supplierNumber);
+</b> }
+<p>
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/tbinding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/format.html b/db/docs/ref/bdb_tuple/format.html
new file mode 100644
index 000000000..b82c93bb6
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/format.html
@@ -0,0 +1,101 @@
+<!--$Id: format.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Using the tuple format</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_tuple/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/extract.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Using the tuple format</h3>
+<p>Tuples are sequences of primitive Java values that can be written to, and
+read from, the raw data bytes of a stored record. The primitive values are
+written or read one at a time in sequence, using the Java API
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</a>
+ and
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</a>
+ classes. These classes
+are very similar to the standard Java
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/io/DataInput.html">DataInput</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/io/DataOutput.html">DataOutput</a>
+ interfaces. The primary difference is the
+binary format of the data, which is designed for sorting in the case of
+tuples.</p>
+<p>For example, to read and write a tuple containing two string values, the
+following code snippets could be used.</p>
+<blockquote><pre><b>import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+...
+TupleInput input;
+TupleOutput output;
+...
+String partNumber = input.readString();
+String supplierNumber = input.readString();
+...
+output.writeString(partNumber);
+output.writeString(supplierNumber);
+</b></pre></blockquote>
+<p>Since a tuple is defined as an ordered sequence, reading and writing
+order must match. If the wrong data type is read (an integer instead of
+string, for example), an exception may be thrown or at minimum invalid data
+will be read.</p>
+<p>When the tuple format is used, bindings and key extractors must read and
+write tuples using the tuple API as shown above. This will be illustrated in
+the next two sections.</p>
+<hr size=1 noshade>
+<p>First, the tuple format objects must be created as shown below in the
+modified <b>SampleDatabase</b> class.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+...
+</b>public class SampleDatabase
+{
+<b> ...
+ private TupleFormat partKeyFormat;
+</b> private SerialFormat partValueFormat;
+<b> private TupleFormat supplierKeyFormat;
+</b> private SerialFormat supplierValueFormat;
+<b> private TupleFormat shipmentKeyFormat;
+</b> private SerialFormat shipmentValueFormat;
+<b> private TupleFormat cityKeyFormat;
+ ...
+</b> public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException
+ {
+<b> ...
+ partKeyFormat = new TupleFormat();
+</b> partValueFormat = new SerialFormat(javaCatalog, PartValue.class);
+<b> supplierKeyFormat = new TupleFormat();
+</b> supplierValueFormat = new SerialFormat(javaCatalog, SupplierValue.class);
+<b> shipmentKeyFormat = new TupleFormat();
+</b> shipmentValueFormat = new SerialFormat(javaCatalog, ShipmentValue.class);
+<b> cityKeyFormat = new TupleFormat();
+ ...
+</b> }
+}
+</pre></blockquote>
+<p>For each key, a
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</a>
+object is used instead of the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialFormat.html">SerialFormat</a>
+ used in the prior examples. The
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleFormat.html">TupleFormat</a>
+ constructor has no
+parameters.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/extract.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/intro.html b/db/docs/ref/bdb_tuple/intro.html
new file mode 100644
index 000000000..30fd53f7b
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/intro.html
@@ -0,0 +1,59 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Compact ordered keys</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_entity/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/format.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Compact ordered keys</h3>
+<p>Java API <i>tuples</i> are sequences of primitive Java data types,
+for example, integers and strings. The <i>tuple format</i> is a
+binary format for tuples that can be used to store keys and/or values.</p>
+<p>Tuples are useful as keys because they have a meaningful sort order,
+while serialized objects do not. This is because the binary data for a tuple
+is written in such a way that its raw byte ordering provides a useful sort
+order. For example, strings in tuples are written with a null terminator
+rather than with a leading length.</p>
+<p>Tuples are useful as keys <i>or</i> values when reducing the record
+size to a minimum is important. A tuple is significantly smaller than an
+equivalent serialized object. However, unlike serialized objects, tuples
+cannot contain complex data types and are not easily extended except by adding
+fields at the end of the tuple.</p>
+<p>Whenever a tuple format is used, except when the key or value class is a
+Java primitive class, a <i>tuple binding</i> class must be implemented to
+map between the Java object and the tuple fields. Because of this extra
+requirement, and because tuples are not easily extended, a useful technique
+shown in this example is to use tuples for keys and serialized objects for
+values. This provides compact ordered keys but still allows arbitrary Java
+objects as values, and avoids implementing a tuple binding for each value
+class.</p>
+<p>The example program illustrates:</p>
+<p><ul type=disc>
+<li><a href="format.html">Using the tuple format</a>
+<li><a href="extract.html">Using tuples with key extractors</a>
+<li><a href="tbinding.html">Creating tuple key bindings</a>
+<li><a href="tsbinding.html">Creating tuple-serial entity bindings</a>
+<li><a href="sorted.html">Using sorted collections</a>
+</ul>
+<p>Compare this example to the prior Entity example and you'll see that the
+<b>Sample</b> class has not changed. When changing a database format, while
+new bindings are needed to map key and value objects to the new format, the
+application using the objects often does not need to be modified.</p>
+<p>The complete source
+of the final version of the example program is included in the Berkeley DB
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_entity/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/format.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/sorted.html b/db/docs/ref/bdb_tuple/sorted.html
new file mode 100644
index 000000000..82d1f2696
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/sorted.html
@@ -0,0 +1,197 @@
+<!--$Id: sorted.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Using sorted collections</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_tuple/tsbinding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Using sorted collections</h3>
+<p>In general, no changes to the prior example are necessary to use
+collections having tuple keys. Iteration of elements in a stored collection
+will be ordered by the sort order of the tuples. In addition to using the
+tuple format, the
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+ access method
+must be used when creating the database.
+<a href="../../java/com/sleepycat/db/Db.html#DB_BTREE">Db.DB_BTREE</a>
+is used for the databases in all examples. The
+<a href="../../java/com/sleepycat/db/Db.html#DB_HASH">Db.DB_HASH</a>
+ access method does not support
+sorted keys.</p>
+<p>Although not shown in the example, all methods of the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedMap.html">SortedMap</a>
+ and
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/util/SortedSet.html">SortedSet</a>
+interfaces may be used with sorted collections. For example, submaps and
+subsets may be created.</p>
+<hr size=1 noshade>
+<p>To create a sorted collection, the
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</a>
+ class is
+used instead of
+<a href="../../java/com/sleepycat/bdb/collection/StoredMap.html">StoredMap</a>
+.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.collection.StoredSortedMap;
+...
+</b>public class SampleViews
+{
+ private <b>StoredSortedMap</b> partMap;
+ private <b>StoredSortedMap</b> supplierMap;
+ private <b>StoredSortedMap</b> shipmentMap;
+ private <b>StoredSortedMap</b> shipmentByPartMap;
+ private <b>StoredSortedMap</b> shipmentBySupplierMap;
+ private <b>StoredSortedMap</b> supplierByCityMap;
+ ...
+ public SampleViews(SampleDatabase db)
+ {
+ ...
+ partMap =
+ new <b>StoredSortedMap</b>(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new <b>StoredSortedMap</b>(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new <b>StoredSortedMap</b>(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new <b>StoredSortedMap</b>(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new <b>StoredSortedMap</b>(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new <b>StoredSortedMap</b>(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The getter methods of <b>SampleViews</b> also return
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedMap.html">StoredSortedMap</a>
+and, as a convenience,
+<a href="../../java/com/sleepycat/bdb/collection/StoredSortedValueSet.html">StoredSortedValueSet</a>
+.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+...
+</b>public class SampleViews
+{
+ ...
+ public <b>StoredSortedMap</b> getPartMap()
+ {
+ return partMap;
+ }
+<p>
+ public <b>StoredSortedMap</b> getSupplierMap()
+ {
+ return supplierMap;
+ }
+<p>
+ public <b>StoredSortedMap</b> getShipmentMap()
+ {
+ return shipmentMap;
+ }
+<p>
+ public <b>StoredSortedValueSet</b> getPartSet()
+ {
+ return (<b>StoredSortedValueSet</b>) partMap.values();
+ }
+<p>
+ public <b>StoredSortedValueSet</b> getSupplierSet()
+ {
+ return (<b>StoredSortedValueSet</b>) supplierMap.values();
+ }
+<p>
+ public <b>StoredSortedValueSet</b> getShipmentSet()
+ {
+ return (<b>StoredSortedValueSet</b>) shipmentMap.values();
+ }
+<p>
+ public <b>StoredSortedMap</b> getShipmentByPartMap()
+ {
+ return shipmentByPartMap;
+ }
+<p>
+ public <b>StoredSortedMap</b> getShipmentBySupplierMap()
+ {
+ return shipmentBySupplierMap;
+ }
+<p>
+ public final <b>StoredSortedMap</b> getSupplierByCityMap()
+ {
+ return supplierByCityMap;
+ }
+ ...
+}
+</pre></blockquote>
+<hr size=1 noshade>
+<p>The output of the example program shows that records are sorted by key
+value.</p>
+<blockquote><pre>
+Adding Suppliers
+Adding Parts
+Adding Shipments
+<p>
+--- Parts ---
+Part: number=P1 name=Nut color=Red weight=[12.0 grams] city=London
+Part: number=P2 name=Bolt color=Green weight=[17.0 grams] city=Paris
+Part: number=P3 name=Screw color=Blue weight=[17.0 grams] city=Rome
+Part: number=P4 name=Screw color=Red weight=[14.0 grams] city=London
+Part: number=P5 name=Cam color=Blue weight=[12.0 grams] city=Paris
+Part: number=P6 name=Cog color=Red weight=[19.0 grams] city=London
+<p>
+--- Suppliers ---
+Supplier: number=S1 name=Smith status=20 city=London
+Supplier: number=S2 name=Jones status=10 city=Paris
+Supplier: number=S3 name=Blake status=30 city=Paris
+Supplier: number=S4 name=Clark status=20 city=London
+Supplier: number=S5 name=Adams status=30 city=Athens
+<p>
+--- Suppliers for City Paris ---
+Supplier: number=S2 name=Jones status=10 city=Paris
+Supplier: number=S3 name=Blake status=30 city=Paris
+<p>
+--- Shipments ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P1 supplier=S2 quantity=300
+Shipment: part=P2 supplier=S1 quantity=200
+Shipment: part=P2 supplier=S2 quantity=400
+Shipment: part=P2 supplier=S3 quantity=200
+Shipment: part=P2 supplier=S4 quantity=200
+Shipment: part=P3 supplier=S1 quantity=400
+Shipment: part=P4 supplier=S1 quantity=200
+Shipment: part=P4 supplier=S4 quantity=300
+Shipment: part=P5 supplier=S1 quantity=100
+Shipment: part=P5 supplier=S4 quantity=400
+Shipment: part=P6 supplier=S1 quantity=100
+<p>
+--- Shipments for Part P1 ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P1 supplier=S2 quantity=300
+<p>
+--- Shipments for Supplier S1 ---
+Shipment: part=P1 supplier=S1 quantity=300
+Shipment: part=P2 supplier=S1 quantity=200
+Shipment: part=P3 supplier=S1 quantity=400
+Shipment: part=P4 supplier=S1 quantity=200
+Shipment: part=P5 supplier=S1 quantity=100
+Shipment: part=P6 supplier=S1 quantity=100
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/tsbinding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_sentity/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/tbinding.html b/db/docs/ref/bdb_tuple/tbinding.html
new file mode 100644
index 000000000..15331651e
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/tbinding.html
@@ -0,0 +1,174 @@
+<!--$Id: tbinding.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Creating tuple key bindings</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_tuple/extract.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/tsbinding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Creating tuple key bindings</h3>
+<p>Serial bindings were used in prior examples as key bindings, and keys
+were stored as serialized objects. In this example, a tuple binding is used
+for each key since keys will be stored as tuples. Because keys are no
+longer stored as serialized objects, the <b>PartKey</b>,
+<b>SupplierKey</b> and <b>ShipmentKey</b> classes no longer implement the
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/io/Serializable.html">Serializable</a>
+ interface (this was the only change to
+these classes and is not shown below).</p>
+<hr size=1 noshade>
+<p>For the Part key, Supplier key, and Shipment key, the
+<b>SampleViews</b> class was changed in this example to create a custom
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</a>
+ instead of a
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialBinding.html">SerialBinding</a>
+. The custom
+tuple key binding classes are defined further below.</p>
+<blockquote><pre>
+<b>import com.sleepycat.bdb.bind.tuple.TupleBinding;
+...
+</b>public class SampleViews
+{
+ ...
+ public SampleViews(SampleDatabase db)
+ {
+ DataBinding partKeyBinding =
+<b> new PartKeyBinding(db.getPartKeyFormat());
+</b> EntityBinding partValueBinding =
+ new PartBinding(db.getPartKeyFormat(), db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+<b> new SupplierKeyBinding(db.getSupplierKeyFormat());
+</b> EntityBinding supplierValueBinding =
+ new SupplierBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+<b> new ShipmentKeyBinding(db.getShipmentKeyFormat());
+</b> EntityBinding shipmentValueBinding =
+ new ShipmentBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat());
+ DataBinding cityKeyBinding =
+<b> TupleBinding.getPrimitiveBinding(String.class,
+ db.getCityKeyFormat());
+ ...
+</b> }
+}
+</pre></blockquote>
+<p>For the City key, however, a custom binding class is not needed because
+the key class is a primitive Java type,
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html">String</a>
+.
+For any primitive Java type, a tuple binding may be created using the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleBinding.html#getPrimitiveBinding">TupleBinding.getPrimitiveBinding</a>
+static method.</p>
+<hr size=1 noshade>
+<p>The custom key binding classes, <b>PartKeyBinding</b>,
+<b>SupplierKeyBinding</b> and <b>ShipmentKeyBinding</b>, are defined by
+extending the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</a>
+ class.
+The
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleBinding.html">TupleBinding</a>
+ abstract class
+implements the
+<a href="../../java/com/sleepycat/bdb/bind/DataBinding.html">DataBinding</a>
+ interface, and
+is used for one-to-one bindings between tuples and objects. Each binding
+class implements two methods for converting between tuples and objects. Tuple
+fields are read using the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</a>
+parameter and written using the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</a>
+ parameter.</p>
+<blockquote><pre>
+<b>
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+...
+</b>public class SampleViews
+{
+ ...
+<b>
+ private static class PartKeyBinding extends TupleBinding
+ {
+ private PartKeyBinding(TupleFormat format)
+ {
+ super(format);
+ }
+<p>
+ public Object dataToObject(TupleInput input)
+ throws IOException
+ {
+ String number = input.readString();
+ return new PartKey(number);
+ }
+<p>
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException
+ {
+ PartKey key = (PartKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+ ...
+ private static class SupplierKeyBinding extends TupleBinding
+ {
+ private SupplierKeyBinding(TupleFormat format)
+ {
+ super(format);
+ }
+<p>
+ public Object dataToObject(TupleInput input)
+ throws IOException
+ {
+ String number = input.readString();
+ return new SupplierKey(number);
+ }
+<p>
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException
+ {
+ SupplierKey key = (SupplierKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+ ...
+ private static class ShipmentKeyBinding extends TupleBinding
+ {
+ private ShipmentKeyBinding(TupleFormat format)
+ {
+ super(format);
+ }
+<p>
+ public Object dataToObject(TupleInput input)
+ throws IOException
+ {
+ String partNumber = input.readString();
+ String supplierNumber = input.readString();
+ return new ShipmentKey(partNumber, supplierNumber);
+ }
+<p>
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException
+ {
+ ShipmentKey key = (ShipmentKey) object;
+ output.writeString(key.getPartNumber());
+ output.writeString(key.getSupplierNumber());
+ }
+ }
+</b>}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/extract.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/tsbinding.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tuple/tsbinding.html b/db/docs/ref/bdb_tuple/tsbinding.html
new file mode 100644
index 000000000..4be7dd2fd
--- /dev/null
+++ b/db/docs/ref/bdb_tuple/tsbinding.html
@@ -0,0 +1,158 @@
+<!--$Id: tsbinding.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Tuple - Creating tuple-serial entity bindings</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial - Tuple</dl></h3></td>
+<td align=right><a href="../bdb_tuple/tbinding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/sorted.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Tuple - Creating tuple-serial entity bindings</h3>
+<p>In the prior example serial keys and serial values were used, and the
+<a href="../../java/com/sleepycat/bdb/bind/serial/SerialSerialBinding.html">SerialSerialBinding</a>
+ base class was
+used for entity bindings. In this example, tuple keys and serial values are
+used and therefore the
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html">TupleSerialBinding</a>
+ base class is used for entity bindings.</p>
+<p>As with any entity binding, a key and value is converted to an entity in
+the
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#dataToObject">TupleSerialBinding.dataToObject</a>
+method, and from an entity to a key and value in the
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToKey">TupleSerialBinding.objectToKey</a>
+ and
+<a href="../../java/com/sleepycat/bdb/bind/serial/TupleSerialBinding.html#objectToValue">TupleSerialBinding.objectToValue</a>
+methods. But since keys are stored as tuples, not as serialized objects, key
+fields are read and written using the
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleInput.html">TupleInput</a>
+ and
+<a href="../../java/com/sleepycat/bdb/bind/tuple/TupleOutput.html">TupleOutput</a>
+parameters.</p>
+<hr size=1 noshade>
+<p>The <b>SampleViews</b> class contains the modified entity binding
+classes that were defined in the prior example: <b>PartBinding</b>,
+<b>SupplierBinding</b> and <b>ShipmentBinding</b>.</p>
+<blockquote><pre>
+<b>
+import com.sleepycat.bdb.bind.serial.TupleSerialBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+...
+</b>public class SampleViews
+{
+ ...
+ private static class PartBinding extends <b>TupleSerialBinding</b>
+ {
+ private PartBinding(<b>TupleFormat</b> keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(<b>TupleInput</b> keyInput, Object valueInput)
+ throws IOException
+ {
+<b> String number = keyInput.readString();
+</b> PartValue value = (PartValue) valueInput;
+ return new Part(<b>number</b>, value.getName(), value.getColor(),
+ value.getWeight(), value.getCity());
+ }
+<p>
+ public void objectToKey(Object object, <b>TupleOutput</b> output)
+ throws IOException
+ {
+ Part part = (Part) object;
+<b> output.writeString(part.getNumber());
+</b> }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Part part = (Part) object;
+ return new PartValue(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+<p>
+ private static class SupplierBinding extends <b>TupleSerialBinding</b>
+ {
+ private SupplierBinding(<b>TupleFormat</b> keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(<b>TupleInput</b> keyInput, Object valueInput)
+ throws IOException
+ {
+<b> String number = keyInput.readString();
+</b> SupplierValue value = (SupplierValue) valueInput;
+ return new Supplier(<b>number</b>, value.getName(),
+ value.getStatus(), value.getCity());
+ }
+<p>
+ public void objectToKey(Object object, <b>TupleOutput</b> output)
+ throws IOException
+ {
+ Supplier supplier = (Supplier) object;
+<b> output.writeString(supplier.getNumber());
+</b> }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Supplier supplier = (Supplier) object;
+ return new SupplierValue(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+<p>
+ private static class ShipmentBinding extends <b>TupleSerialBinding</b>
+ {
+ private ShipmentBinding(<b>TupleFormat</b> keyFormat,
+ SerialFormat valueFormat)
+ {
+ super(keyFormat, valueFormat);
+ }
+<p>
+ public Object dataToObject(<b>TupleInput</b> keyInput, Object valueInput)
+ throws IOException
+ {
+<b> String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+</b> ShipmentValue value = (ShipmentValue) valueInput;
+ return new Shipment(<b>partNumber</b>, <b>supplierNumber</b>,
+ value.getQuantity());
+ }
+<p>
+ public void objectToKey(Object object, <b>TupleOutput</b> output)
+ throws IOException
+ {
+ Shipment shipment = (Shipment) object;
+<b> output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+</b> }
+<p>
+ public Object objectToValue(Object object)
+ throws IOException
+ {
+ Shipment shipment = (Shipment) object;
+ return new ShipmentValue(shipment.getQuantity());
+ }
+ }
+}
+</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_tuple/tbinding.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_tuple/sorted.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tut/intro.html b/db/docs/ref/bdb_tut/intro.html
new file mode 100644
index 000000000..1ac1221be
--- /dev/null
+++ b/db/docs/ref/bdb_tut/intro.html
@@ -0,0 +1,108 @@
+<!--$Id: intro.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Introduction to the Java API tutorial</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial</dl></h3></td>
+<td align=right><a href="../am_misc/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Introduction to the Java API tutorial</h3>
+<p>The Java API is a Java persistence framework based on the standard Java
+collections API. This tutorial illustrates the use of the Java API with a
+shipment database, a familiar example from classic database texts.</p>
+<p>The examples illustrate the following concepts of the Java API:</p>
+<p><ul type=disc>
+<li>Record <i>bindings</i> and <i>formats</i>
+<li>The database <i>environment</i>
+<li>Database <i>stores</i> that contain key/value records
+<li>Database <i>indices</i> that contain secondary keys and foreign
+keys
+<li>Java <i>collections</i> for accessing stores and indices
+<li><i>Transactions</i> used to commit or undo database changes
+</ul>
+<p>The examples build on each other, but at the same time the source code
+for each example stands alone.</p>
+<p><ul type=disc>
+<li><a href="../bdb_basic/intro.html">Basic</a> -
+The shipment program
+<li><a href="../bdb_index/intro.html">Index</a> -
+Indices and foreign keys
+<li><a href="../bdb_entity/intro.html">Entity</a> -
+Combining the key and value in a single object
+<li><a href="../bdb_tuple/intro.html">Tuple</a> -
+Compact ordered keys
+<li><a href="../bdb_sentity/intro.html">Serializable Entity</a> -
+One serializable class for entities and values
+</ul>
+<p>The shipment database consists of three database stores: the part store,
+the supplier store, and the shipment store. Each store contains a number of
+records, and each record consists of a key and a value.</p>
+<table border=1>
+<tr><th>Store</th><th>Key</th><th>Value</th></tr>
+<tr><td>Part</td><td>Part Number</td><td>Name, Color, Weight, City</td></tr>
+<tr><td>Supplier</td><td>Supplier Number</td><td>Name, Status, City</td></tr>
+<tr><td>Shipment</td><td>Part Number, Supplier Number</td><td>Quantity</td></tr>
+</table>
+<p>In the example programs, Java classes containing the fields above are
+defined for the key and value of each store: <b>PartKey</b>,
+<b>PartValue</b>, <b>SupplierKey</b>, <b>SupplierValue</b>,
+<b>ShipmentKey</b> and <b>ShipmentValue</b>. In addition, because the
+Part's Weight field is itself composed of two fields -- the weight value and
+the unit of measure -- it is represented by a separate <b>Weight</b> class.
+These classes will be defined in the first example program.</p>
+<p>In general the Java API uses formats and bindings to describe how Java
+objects are stored. A format defines the stored data syntax, and a binding
+defines the mapping between a Java object and the stored data. The example
+programs show how to create different types of formats and bindings, and
+explains the characteristics of each type.</p>
+<p>The following tables contain the record values that are used in all the
+example programs in the tutorial.</p>
+<h3>Part Records</h3>
+<table border=1>
+<tr><th>Number</th><th>Name</th><th>Color</th><th>Weight</th><th>City</th></tr>
+<tr><td>P1</td><td>Nut</td><td>Red</td><td>12.0 grams</td><td>London</td></tr>
+<tr><td>P2</td><td>Bolt</td><td>Green</td><td>17.0 grams</td><td>Paris</td></tr>
+<tr><td>P3</td><td>Screw</td><td>Blue</td><td>17.0 grams</td><td>Rome</td></tr>
+<tr><td>P4</td><td>Screw</td><td>Red</td><td>14.0 grams</td><td>London</td></tr>
+<tr><td>P5</td><td>Cam</td><td>Blue</td><td>12.0 grams</td><td>Paris</td></tr>
+<tr><td>P6</td><td>Cog</td><td>Red</td><td>19.0 grams</td><td>London</td></tr>
+</table>
+<h3>Supplier Records</h3>
+<table border=1>
+<tr><th>Number</th><th>Name</th><th>Status</th><th>City</th></tr>
+<tr><td>S1</td><td>Smith</td><td>20</td><td>London</td></tr>
+<tr><td>S2</td><td>Jones</td><td>10</td><td>Paris</td></tr>
+<tr><td>S3</td><td>Blake</td><td>30</td><td>Paris</td></tr>
+<tr><td>S4</td><td>Clark</td><td>20</td><td>London</td></tr>
+<tr><td>S5</td><td>Adams</td><td>30</td><td>Athens</td></tr>
+</table>
+<h3>Shipment Records</h3>
+<table border=1>
+<tr><th>Part Number</th><th>Supplier Number</th><th>Quantity</th></tr>
+<tr><td>P1</td><td>S1</td><td>300</td></tr>
+<tr><td>P1</td><td>S2</td><td>300</td></tr>
+<tr><td>P2</td><td>S1</td><td>200</td></tr>
+<tr><td>P2</td><td>S2</td><td>400</td></tr>
+<tr><td>P2</td><td>S3</td><td>200</td></tr>
+<tr><td>P2</td><td>S4</td><td>200</td></tr>
+<tr><td>P3</td><td>S1</td><td>400</td></tr>
+<tr><td>P4</td><td>S1</td><td>200</td></tr>
+<tr><td>P4</td><td>S4</td><td>300</td></tr>
+<tr><td>P5</td><td>S1</td><td>100</td></tr>
+<tr><td>P5</td><td>S4</td><td>400</td></tr>
+<tr><td>P6</td><td>S1</td><td>100</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../am_misc/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb_basic/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/bdb_tut/summary.html b/db/docs/ref/bdb_tut/summary.html
new file mode 100644
index 000000000..10a8e42ba
--- /dev/null
+++ b/db/docs/ref/bdb_tut/summary.html
@@ -0,0 +1,62 @@
+<!--$Id: summary.html,v 1.1 2003/12/15 21:43:45 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Summary and next steps</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API Tutorial</dl></h3></td>
+<td align=right><a href="../bdb_sentity/remove.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/overview.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Summary and next steps</h3>
+<p>In summary, the Java API tutorial has demonstrated how to create different
+types of formats and bindings, as well as how to use the basic facilities of
+the Java API: the database environment, stores, indices, collections, and
+transactions. The final approach illustrated by the last example program,
+Serializable Entity, uses tuple keys and serial entity values. Hopefully it is
+clear that any type of object-to-data binding may be implemented by an
+application and used along with standard Java collections.</p>
+<p>The following table summarizes the differences between the examples in
+the tutorial.</p>
+<table border=1>
+<tr><th>Example</th><th>Key</th><th>Value</th><th>Entity</th><th>Comments</th></tr>
+<tr><td><a href="../bdb_basic/intro.html">Basic</a></td><td>Serial</td><td>Serial</td><td>No</td><td>The shipment program</td></tr>
+<tr><td><a href="../bdb_index/intro.html">Index</a></td><td>Serial</td><td>Serial</td><td>No</td><td>Indices and foreign keys</td></tr>
+<tr><td><a href="../bdb_entity/intro.html">Entity</a></td><td>Serial</td><td>Serial</td><td>Yes</td><td>Combining the key and value in a single object</td></tr>
+<tr><td><a href="../bdb_tuple/intro.html">Tuple</a></td><td>Tuple</td><td>Serial</td><td>Yes</td><td>Compact ordered keys</td></tr>
+<tr><td><a href="../bdb_sentity/intro.html">Serializable Entity</a></td><td>Tuple</td><td>Serial</td><td>Yes</td><td>One serializable class for entities and values</td></tr>
+</table>
+<h3>Next Steps</h3>
+<p>There are two directions to go from here. The first direction is toward
+a deeper understanding of the Java API and the underlying Berkeley DB capabilities.
+The next section, <a href="../bdb/overview.html">Overview of the Java API</a>, along
+with the other material in the Reference Guide, will take you there.</p>
+<p>The second direction is toward understanding how other types of bindings
+might be implemented. The bindings shown in this tutorial are all
+<i>external bindings</i>, meaning that the data classes themselves contain
+none of the binding implementation. It is also possible to implement
+<i>internal bindings</i>, where the data classes implement the binding.</p>
+<p>Internal bindings are called <i>marshalled bindings</i> in the
+Java API, and in this model each data class implements a marshalling interface.
+A single external binding class that understands the marshalling interface is
+used to call the internal bindings of each data object, and therefore the
+overall model and API is unchanged. To learn about marshalled bindings, see
+the
+<a href="../../../examples_java/src/com/sleepycat/examples/bdb/shipment/marshal">Marshal</a> and
+<a href="../../../examples_java/src/com/sleepycat/examples/bdb/shipment/factory">Factory</a> example programs.
+These examples continue building on the example programs used in the tutorial.
+The Marshal program is the next program following the Serializable Entity
+program, and the Factory program follows the Marshal program. The source code
+comments in these examples explain their differences.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb_sentity/remove.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../bdb/overview.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/build_unix/aix.html b/db/docs/ref/build_unix/aix.html
index 102e1a01f..d280c896c 100644
--- a/db/docs/ref/build_unix/aix.html
+++ b/db/docs/ref/build_unix/aix.html
@@ -1,60 +1,83 @@
-<!--$Id: aix.so,v 11.11 2000/05/04 17:11:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: aix.so,v 11.25 2003/04/25 15:12:18 dda Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: AIX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>AIX</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>AIX</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
-applications on AIX. If you are compiling a threaded application,
-you must compile with the _THREAD_SAFE flag and load with specific
-libraries, e.g., "-lc_r". Specifying the compiler name with a
-trailing "_r" usually performs the right actions for the system.
-<p><blockquote><pre>xlc_r ...
+applications on AIX. If you are compiling a threaded application, you
+must compile with the _THREAD_SAFE flag and load with specific
+libraries; for example, "-lc_r". Specifying the compiler name with a
+trailing "_r" usually performs the right actions for the system.</p>
+<blockquote><pre>xlc_r ...
cc -D_THREAD_SAFE -lc_r ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+<p>The Berkeley DB library will automatically build with the correct options.</p>
<hr size=1 noshade>
<p><li><b>I can't run using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> option to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a>.</b>
-<p>AIX 4.1 only allows applications to map 10 system shared memory segments.
-In AIX 4.3 this has been raised to 256K segments, but only if you set the
-environment variable "export EXTSHM=ON".
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>.</b>
+<p>AIX 4.1 allows applications to map only 10 system shared memory
+segments. In AIX 4.3, this has been raised to 256K segments, but only
+if you set the environment variable "export EXTSHM=ON".</p>
+<hr size=1 noshade>
+<p><li><b>On AIX 4.3.2 (or before) I see duplicate symbol warnings when
+building the C++ shared library and when linking applications.</b>
+<p>We are aware of some duplicate symbol warnings with this platform,
+but they do not appear to affect the correct operation of applications.</p>
+<hr size=1 noshade>
+<p><li><b>On AIX 4.3.3 I see undefined symbols for DbEnv::set_error_stream,
+Db::set_error_stream or DbEnv::verify when linking C++ applications.
+(These undefined symbols also appear when building the Berkeley DB C++ example
+applications).</b>
+<p>By default, Berkeley DB is built with _LARGE_FILES set to 1 to support the
+creation of "large" database files. However, this also affects how
+standard classes, like iostream, are named internally. When building
+your application, use a "-D_LARGE_FILES=1" compilation option, or insert
+"#define _LARGE_FILES 1" before any #include statements.</p>
<hr size=1 noshade>
<p><li><b>I can't create database files larger than 1GB on AIX.</b>
-<p>Berkeley DB does not include large-file support for AIX systems by default.
-Sleepycat Software has been told that the following changes will add
-large-file support on the AIX 4.2 and later releases, but we have not
-tested them ourselves.
-<p>Add the following lines to the <b>db_config.h</b> file in your build
-directory:
-<p><blockquote><pre>#ifdef HAVE_FILE_OFFSET_BITS
-#define _LARGE_FILES /* AIX specific. */
-#endif</pre></blockquote>
-<p>Change the source code for <b>os/os_open.c</b> to always specify the
-<b>O_LARGEFILE</b> flag to the <b>open</b>(2) system call.
-<p>Recompile Berkeley DB from scratch.
-<p>Note that the documentation for the IBM Visual Age compiler states that
-it does not not support the 64-bit filesystem APIs necessary for creating
-large files, and that the ibmcxx product must be used instead. We have
-not heard if the GNU gcc compiler supports the 64-bit APIs or not.
+<p>If you're running on AIX 4.1 or earlier, try changing the source code
+for <b>os/os_open.c</b> to always specify the <b>O_LARGEFILE</b>
+flag to the <b>open</b>(2) system call, and recompile Berkeley DB from
+scratch.</p>
+<p>Also, the documentation for the IBM Visual Age compiler states that it
+does not not support the 64-bit filesystem APIs necessary for creating
+large files; the ibmcxx product must be used instead. We have not heard
+whether the GNU gcc compiler supports the 64-bit APIs or not.</p>
<p>Finally, to create large files under AIX, the filesystem has to be
-configured to support large files and the system wide user hard-limit for
-file sizes has to be greater than 1GB.
+configured to support large files and the system wide user hard-limit
+for file sizes has to be greater than 1GB.</p>
+<hr size=1 noshade>
+<p><li><b>I see errors about "open64" when building Berkeley DB applications.</b>
+<p>System include files (most commonly fcntl.h) in some releases of AIX,
+HP-UX and Solaris redefine "open" when large-file support is enabled for
+applications. This causes problems when compiling applications because
+"open" is a method in the Berkeley DB APIs. To work around this problem:
+<ol>
+<p><li>Avoid including the problematical system include files in source code
+files which also include Berkeley DB include files and call into the Berkeley DB
+API.
+<li>Before building Berkeley DB, modify the generated include file db.h to itself
+include the problematical system include files.
+<li>Turn off Berkeley DB large-file support by specifying the
+<a href="../../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a> configuration option and rebuilding.
+</ol></p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/conf.html b/db/docs/ref/build_unix/conf.html
index 289e9559e..2b8ee79b4 100644
--- a/db/docs/ref/build_unix/conf.html
+++ b/db/docs/ref/build_unix/conf.html
@@ -1,143 +1,192 @@
-<!--$Id: conf.so,v 10.33 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: conf.so,v 10.58 2003/09/08 19:49:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring Berkeley DB</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/flags.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/small.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring Berkeley DB</h1>
-<p>There are several options that you can specify when configuring Berkeley DB.
-While only the Berkeley DB specific ones are described here, most of the
-standard GNU autoconf options are available and supported. To see a
-complete list of the options, specify the --help flag to the configure
-program.
-<p>The Berkeley DB specific options are as follows:
+<h3 align=center>Configuring Berkeley DB</h3>
+<p>There are several arguments you can specify when configuring Berkeley DB.
+Although only the Berkeley DB-specific ones are described here, most of the
+standard GNU autoconf arguments are available and supported. To see a
+complete list of possible arguments, specify the --help flag to the
+configure program.</p>
+<p>The Berkeley DB specific arguments are as follows:</p>
<p><dl compact>
- <a name="4"><!--meow--></a>
-<p><dt><a name="--disable-bigfile">--disable-bigfile</a><dd>Some systems, notably versions of HP/UX and Solaris, require special
+<a name="4"><!--meow--></a>
+<p><dt><a name="--disable-largefile">--disable-largefile</a><dd>Some systems, notably versions of HP/UX and Solaris, require special
compile-time options in order to create files larger than 2^32 bytes.
-These options are automatically enabled when Berkeley DB is compiled. For this
-reason, binaries built on current versions of these systems may not run
-on earlier versions of the system, as the library and system calls
-necessary for large files are not available. To disable building with
-these compile-time options, enter --disable-bigfile as an argument to
-configure.
- <a name="5"><!--meow--></a>
+These options are automatically enabled when Berkeley DB is compiled. For
+this reason, binaries built on current versions of these systems may
+not run on earlier versions of the system because the library and system
+calls necessary for large files are not available. To disable building
+with these compile-time options, enter --disable-largefile as an argument
+to configure.
+<a name="5"><!--meow--></a><a name="6"><!--meow--></a>
+<p><dt><a name="--disable-shared">--disable-shared</a>, <a name="--disable-static">--disable-static</a><dd>On systems supporting shared libraries, Berkeley DB builds both static and
+shared libraries by default. (Shared libraries are built using
+<a href="http://www.gnu.org/software/libtool/libtool.html">the GNU
+Project's Libtool</a> distribution, which supports shared library builds
+on many (although not all) systems.) To not build shared libraries,
+configure using the --disable-shared argument. To not build static
+libraries, configure using the --disable-static argument.
+<a name="7"><!--meow--></a>
<p><dt><a name="--enable-compat185">--enable-compat185</a><dd>To compile or load Berkeley DB 1.85 applications against this release of the
Berkeley DB library, enter --enable-compat185 as an argument to configure.
This will include Berkeley DB 1.85 API compatibility code in the library.
- <a name="6"><!--meow--></a>
+<a name="8"><!--meow--></a>
<p><dt><a name="--enable-cxx">--enable-cxx</a><dd>To build the Berkeley DB C++ API, enter --enable-cxx as an argument to
configure.
-<p><dt><a name="--enable-debug">--enable-debug</a><dd>To build Berkeley DB with <b>-g</b> as a compiler flag and with <b>DEBUG</b>
-#defined during compilation, enter --enable-debug as an argument to
-configure. This will create a Berkeley DB library with debugging symbols, as
-well as load various routines that can be called from a debugger to
-display pages, cursor queues and so forth. This option should not be
-specified when configuring to build production binaries, although there
-shouldn't be any significant performance degradation.
+<p><dt><a name="--enable-debug">--enable-debug</a><dd>To build Berkeley DB with <b>-g</b> as a compiler flag and with
+<b>DEBUG</b> #defined during compilation, enter --enable-debug as an
+argument to configure. This will create a Berkeley DB library and utilities
+with debugging symbols, as well as load various routines that can be
+called from a debugger to display pages, cursor queues, and so forth.
+If installed, the utilities will not be stripped. This argument should
+not be specified when configuring to build production binaries.
<p><dt><a name="--enable-debug_rop">--enable-debug_rop</a><dd>To build Berkeley DB to output log records for read operations, enter
---enable-debug_rop as an argument to configure. This option should not
-be specified when configuring to build production binaries, as you will
-lose a significant amount of performance.
+--enable-debug_rop as an argument to configure. This argument should not
+be specified when configuring to build production binaries.
<p><dt><a name="--enable-debug_wop">--enable-debug_wop</a><dd>To build Berkeley DB to output log records for write operations, enter
---enable-debug_wop as an argument to configure. This option should not
-be specified when configuring to build production binaries, as you will
-lose a significant amount of performance.
-<p><dt><a name="--enable-diagnostic">--enable-diagnostic</a><dd>To build Berkeley DB with debugging run-time sanity checks, enter
---enable-diagnostic as an argument to configure. This will cause a
-number of special checks to be performed when Berkeley DB is running. This
-option should not be specified when configuring to build production
-binaries, as you will lose a significant amount of performance.
- <a name="7"><!--meow--></a>
+--enable-debug_wop as an argument to configure. This argument should not
+be specified when configuring to build production binaries.
+<p><dt><a name="--enable-diagnostic">--enable-diagnostic</a><dd>To build Berkeley DB with run-time debugging checks, enter --enable-diagnostic
+as an argument to configure. This will cause a number of special checks
+to be performed when Berkeley DB is running. Applications built using this
+argument should not share database environments with applications built
+without this argument. This argument should not be specified when
+configuring to build production binaries.
+<a name="9"><!--meow--></a>
<p><dt><a name="--enable-dump185">--enable-dump185</a><dd>To convert Berkeley DB 1.85 (or earlier) databases to this release of Berkeley DB,
enter --enable-dump185 as an argument to configure. This will build the
-<a href="../../utility/db_dump.html">db_dump185</a> utility which can dump Berkeley DB 1.85 and 1.86 databases
+<a href="../../utility/db_dump.html">db_dump185</a> utility, which can dump Berkeley DB 1.85 and 1.86 databases
in a format readable by the Berkeley DB <a href="../../utility/db_load.html">db_load</a> utility.
<p>The system libraries with which you are loading the <a href="../../utility/db_dump.html">db_dump185</a>
-utility must already contain the Berkeley DB 1.85 library routines for this to
-work, as the Berkeley DB distribution does not include them. If you are using
-a non-standard library for the Berkeley DB 1.85 library routines, you will have
-to change the Makefile that the configuration step creates to load the
-<a href="../../utility/db_dump.html">db_dump185</a> utility with that library.
- <a name="8"><!--meow--></a>
- <a name="9"><!--meow--></a>
-<p><dt><a name="--enable-dynamic">--enable-dynamic</a><dd>To build a dynamic shared library version of Berkeley DB, instead of the default
-static library, specify --enable-dynamic. Dynamic libraries are built
-using <a href="http://www.gnu.org/software/libtool/libtool.html">the
-GNU Project's Libtool</a> distribution, which supports shared library builds
-on many, although not all, systems.
-<p>Berkeley DB can be configured to build either a static or a dynamic library,
-but not both at once. You should not attempt to build both library
-types in the same directory, as they have incompatible object file
-formats. To build both static and dynamic libraries, create two
-separate build directories, and configure and build them separately.
- <a name="10"><!--meow--></a>
+utility must already contain the Berkeley DB 1.85 library routines for this
+to work because the Berkeley DB distribution does not include them. If you
+are using a non-standard library for the Berkeley DB 1.85 library routines,
+you will have to change the Makefile that the configuration step creates
+to load the <a href="../../utility/db_dump.html">db_dump185</a> utility with that library.</p>
+<a name="10"><!--meow--></a>
<p><dt><a name="--enable-java">--enable-java</a><dd>To build the Berkeley DB Java API, enter --enable-java as an argument to
-configure. To build Java, you must also configure the option
---enable-dynamic. Before configuring, you must set your PATH environment
-variable to include javac. Note, it is not sufficient to include a
-symbolic link to javac in your PATH, because the configuration process
-uses the location of javac to determine the location of the Java include
-files (e.g., jni.h). On some systems additional include directories may
-be needed to process jni.h, see <a href="flags.html">Changing compile or load
-options</a> for more information.
+configure. To build Java, you must also build with shared libraries.
+Before configuring, you must set your PATH environment variable to
+include javac. Note that it is not sufficient to include a symbolic
+link to javac in your PATH because the configuration process uses the
+location of javac to determine the location of the Java include files
+(for example, jni.h). On some systems, additional include directories
+may be needed to process jni.h; see <a href="flags.html">Changing compile or
+load options</a> for more information.
<p><dt><a name="--enable-posixmutexes">--enable-posixmutexes</a><dd>To force Berkeley DB to use the POSIX pthread mutex interfaces for underlying
mutex support, enter --enable-posixmutexes as an argument to configure.
-The Berkeley DB library requires that the POSIX pthread implementation support
-mutexes shared between multiple processes, as described for the
-pthread_condattr_setpshared and pthread_mutexattr_setpshared interfaces.
-In addition, this configuration option requires that Berkeley DB be linked with
-the -lpthread library. On systems where POSIX mutexes are the preferred
-mutex support (e.g., HP-UX), they will be selected automatically.
- <a name="11"><!--meow--></a>
+This is rarely necessary: POSIX mutexes will be selected automatically
+on systems where they are the preferred implementation.
+<p>The --enable-posixmutexes configuration argument is normally used in
+two ways: First, when there are multiple mutex implementations available
+and the POSIX mutex implementation is not the preferred one (for
+example, on Solaris where the LWP mutexes are used by default). Second,
+by default the Berkeley DB library will only select the POSIX mutex
+implementation if it supports mutexes shared between multiple processes,
+as described for the pthread_condattr_setpshared and
+pthread_mutexattr_setpshared interfaces. The --enable-posixmutexes
+configuration argument can be used to force the selection of POSIX
+mutexes in this case, which can improve application performance
+significantly when the alternative mutex implementation is a
+non-blocking one (for example test-and-set assembly instructions).
+However, configuring to use POSIX mutexes when the implementation does
+not have inter-process support will only allow the creation of private
+database environments, that is, environments where the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag is specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method.</p>
+<p>Specifying the --enable-posixmutexes configuration argument may require
+that Berkeley DB be linked with the -lpthread library.</p>
+<a name="11"><!--meow--></a>
<p><dt><a name="--enable-rpc">--enable-rpc</a><dd>To build the Berkeley DB RPC client code and server utility, enter --enable-rpc
-as an argument to configure. The --enable-rpc option requires that RPC
+as an argument to configure. The --enable-rpc argument requires that RPC
libraries already be installed on your system.
-<p><dt><a name="--enable-shared">--enable-shared</a><dd>The --enable-shared configure argument is an alias for --enable-dynamic.
- <a name="12"><!--meow--></a>
+<a name="12"><!--meow--></a>
+<p><dt><a name="--enable-smallbuild">--enable-smallbuild</a><dd>To build a small memory footprint version of the Berkeley DB library, enter
+--enable-smallbuild as an argument to configure. The
+--enable-smallbuild argument is equivalent to individually specifying
+--disable-cryptography, --disable-hash, --disable-queue,
+--disable-replication, and --disable-verify, turning off cryptography
+support, the Hash and Queue access methods, database environment
+replication support and database verification support. See
+<a href="../../ref/build_unix/small.html">Building a small memory footprint
+library</a> for more information.
+<a name="13"><!--meow--></a>
<p><dt><a name="--enable-tcl">--enable-tcl</a><dd>To build the Berkeley DB Tcl API, enter --enable-tcl as an argument to
-configure. This configuration option expects to find Tcl's tclConfig.sh
+configure. This configuration argument expects to find Tcl's tclConfig.sh
file in the <b>/usr/local/lib</b> directory. See the --with-tcl
-option for instructions on specifying a non-standard location for the
+argument for instructions on specifying a non-standard location for the
Tcl installation. See <a href="../../ref/tcl/intro.html">Loading Berkeley DB
with Tcl</a> for information on sites from which you can download Tcl and
-which Tcl versions are compatible with Berkeley DB. To configure the Berkeley DB
-Tcl API, you must also specify the --enable-dynamic option.
- <a name="13"><!--meow--></a>
+which Tcl versions are compatible with Berkeley DB. To build Tcl, you must
+also build with shared libraries.
+<a name="14"><!--meow--></a>
<p><dt><a name="--enable-test">--enable-test</a><dd>To build the Berkeley DB test suite, enter --enable-test as an argument to
-configure. To run the Berkeley DB test suite, you must also specify the
---enable-dynamic and --enable-tcl options.
+configure. To run the Berkeley DB test suite, you must also build the Tcl
+API. This argument should not be specified when configuring to build
+production binaries.
<p><dt><a name="--enable-uimutexes">--enable-uimutexes</a><dd>To force Berkeley DB to use the UNIX International (UI) mutex interfaces for
underlying mutex support, enter --enable-uimutexes as an argument to
-configure. This configuration option requires that Berkeley DB be linked with
-the -lthread library. On systems where UI mutexes are the preferred mutex
-support, (e.g., SCO's UnixWare 2), they will be selected automatically.
+configure. This is rarely necessary: UI mutexes will be selected
+automatically on systems where they are the preferred implementation.
+<p>The --enable-uimutexes configuration argument is normally used when
+there are multiple mutex implementations available and the UI mutex
+implementation is not the preferred one (for example, on Solaris where
+the LWP mutexes are used by default).</p>
+<p>Specifying the --enable-uimutexes configuration argument may require
+that Berkeley DB be linked with the -lthread library.</p>
<p><dt><a name="--enable-umrw">--enable-umrw</a><dd>Rational Software's Purify product and other run-time tools complain
about uninitialized reads/writes of structure fields whose only purpose
is padding, as well as when heap memory that was never initialized is
-written to disk. Specify the --enable-umrw option during configuration
-to mask these errors. This option should not be specified when
-configuring to build production binaries, as you will lose a significant
-amount of performance.
+written to disk. Specify the --enable-umrw argument during
+configuration to mask these errors. This argument should not be
+specified when configuring to build production binaries.
+<p><dt><a name="--with-mutex=MUTEX">--with-mutex=MUTEX</a><dd>To force Berkeley DB to use a specific mutex implementation, configure with
+--with-mutex=MUTEX, where MUTEX is the mutex implementation you want.
+For example, --with-mutex=x86/gcc-assembly will configure Berkeley DB to use
+the x86 GNU gcc compiler based test-and-set assembly mutexes. This is
+rarely necessary and should be done only when the default configuration
+selects the wrong mutex implementation. A list of available mutex
+implementations can be found in the distribution file
+<b>dist/aclocal/mutex.ac</b>.
+<p><dt><a name="--with-mutexalign=ALIGNMENT">--with-mutexalign=ALIGNMENT</a><dd>To force Berkeley DB to use a specific mutex byte alignment, configure with
+--with-mutexalignment=ALIGNMENT. For example, --with-mutexalignment=64
+will configure Berkeley DB to align mutexes at 64-byte alignments, ensuring
+no two mutexes use the same cache line on machines with 64-byte cache
+alignment. This is only useful when performance tuning Berkeley DB for large
+multiprocessor systems.
+<p><dt><a name="--with-rpm=ARCHIVE">--with-rpm=ARCHIVE</a><dd>To build Berkeley DB as an RPM software package, configure with --with-rpm=ARCHIVE,
+where ARCHIVE is the path of gzipped tar archive Berkeley DB distribution file.
+This configuration argument will create an RPM specification file from
+which the RPM software package can be built, using the "make" command.
<p><dt><a name="--with-tcl=DIR">--with-tcl=DIR</a><dd>To build the Berkeley DB Tcl API, enter --with-tcl=DIR, replacing DIR with
the directory in which the Tcl tclConfig.sh file may be found. See
<a href="../../ref/tcl/intro.html">Loading Berkeley DB with Tcl</a> for information
on sites from which you can download Tcl and which Tcl versions are
-compatible with Berkeley DB. To configure the Berkeley DB Tcl API, you must also
-specify the --enable-dynamic option.
+compatible with Berkeley DB. To build Tcl, you must also build with shared
+libraries.
+<p><dt><a name="--with-uniquename=NAME">--with-uniquename=NAME</a><dd>To build Berkeley DB with unique symbol names (in order to avoid conflicts
+with other application modules or libraries), enter --with-uniquename=NAME,
+replacing NAME with a string that to be appended to every Berkeley DB symbol.
+If "=NAME" is not specified, a default value of "_MAJORMINOR" is used,
+where MAJORMINOR is the major and minor release numbers of the Berkeley DB
+release. See <a href="../../ref/install/multiple.html">Building with
+multiple versions of Berkeley DB</a> for more information.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/flags.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/small.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/embedix.html b/db/docs/ref/build_unix/embedix.html
deleted file mode 100644
index 342cf0f3d..000000000
--- a/db/docs/ref/build_unix/embedix.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--Id: embedix.so,v 11.1 2001/04/04 18:14:17 sue Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB Reference Guide: Embedix</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table width="100%"><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td align=right><a href="../../ref/build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
-</td></tr></table>
-<p>
-<h1 align=center>Embedix</h1>
-<p><ol>
-<p><li><b>How do I make Embedix aware of Berkeley DB?</b>
-<p>In order to make Embedix aware of a software component, two items are
-needed, an Embedix Component Descriptor file and a source RPM file
-for that component. After Berkeley DB has been configured for RPM and
-Embedix using the configuration options described in <a href="conf.html">Configuring
-Berkeley DB</a>, the RPM should be built using:
-<p><blockquote><pre>make</pre></blockquote>
-After the RPM is built, as root, the files need to be installed
-in the Embedix installation area, using:
-<p><blockquote><pre>make install</pre></blockquote>
-After installation, start up the
-Embedix target wizard and Berkeley DB will appear in the component list.
-</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/freebsd.html"><img src="../../images/next.gif" alt="Next"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/ref/build_unix/flags.html b/db/docs/ref/build_unix/flags.html
index 5b70b3d8d..422e4b393 100644
--- a/db/docs/ref/build_unix/flags.html
+++ b/db/docs/ref/build_unix/flags.html
@@ -1,60 +1,62 @@
-<!--$Id: flags.so,v 10.6 2000/12/01 00:19:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: flags.so,v 10.12 2003/11/08 19:17:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Changing compile or load options</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/install.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/small.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/install.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Changing compile or load options</h1>
+<h3 align=center>Changing compile or load options</h3>
<p>You can specify compiler and/or compile and load time flags by using
-environment variables during Berkeley DB configuration. For example, if you
-want to use a specific compiler, specify the CC environment variable
-before running configure:
-<p><blockquote><pre>prompt: env CC=gcc ../dist/configure</pre></blockquote>
+environment variables during Berkeley DB configuration. For
+example, if you want to use a specific compiler, specify the CC
+environment variable before running configure:</p>
+<blockquote><pre>prompt: env CC=gcc ../dist/configure</pre></blockquote>
<p>Using anything other than the native compiler will almost certainly mean
that you'll want to check the flags specified to the compiler and
-loader, too.
+loader, too.</p>
<p>To specify debugging and optimization options for the C compiler,
-use the CFLAGS environment variable:
-<p><blockquote><pre>prompt: env CFLAGS=-O2 ../dist/configure</pre></blockquote>
+use the CFLAGS environment variable:</p>
+<blockquote><pre>prompt: env CFLAGS=-O2 ../dist/configure</pre></blockquote>
<p>To specify header file search directories and other miscellaneous options
-for the C preprocessor and compiler, use the CPPFLAGS environment variable:
-<p><blockquote><pre>prompt: env CPPFLAGS=-I/usr/contrib/include ../dist/configure</pre></blockquote>
+for the C preprocessor and compiler, use the CPPFLAGS environment variable:</p>
+<blockquote><pre>prompt: env CPPFLAGS=-I/usr/contrib/include ../dist/configure</pre></blockquote>
<p>To specify debugging and optimization options for the C++ compiler,
-use the CXXFLAGS environment variable:
-<p><blockquote><pre>prompt: env CXXFLAGS=-Woverloaded-virtual ../dist/configure</pre></blockquote>
+use the CXXFLAGS environment variable:</p>
+<blockquote><pre>prompt: env CXXFLAGS=-Woverloaded-virtual ../dist/configure</pre></blockquote>
<p>To specify miscellaneous options or additional library directories for
-the linker, use the LDFLAGS environment variable:
-<p><blockquote><pre>prompt: env LDFLAGS="-N32 -L/usr/local/lib" ../dist/configure</pre></blockquote>
+the linker, use the LDFLAGS environment variable:</p>
+<blockquote><pre>prompt: env LDFLAGS="-N32 -L/usr/local/lib" ../dist/configure</pre></blockquote>
<p>If you want to specify additional libraries, set the LIBS environment
-variable before running configure. For example:
-<p><blockquote><pre>prompt: env LIBS="-lposix -lsocket" ../dist/configure</pre></blockquote>
-<p>would specify two additional libraries to load, "posix" and "socket".
+variable before running configure. For example, the following would
+specify two additional libraries to load, "posix" and "socket":</p>
+<blockquote><pre>prompt: env LIBS="-lposix -lsocket" ../dist/configure</pre></blockquote>
<p>Make sure that you prepend -L to any library directory names and that you
prepend -I to any include file directory names! Also, if the arguments
you specify contain blank or tab characters, be sure to quote them as
-shown above, i.e. with single or double quotes around the values you're
-specifying for LIBS.
-<p>The env command is available on most systems, and simply sets one or more
-environment variables before running a command. If the env command is
-not available to you, you can set the environment variables in your shell
-before running configure. For example, in sh or ksh, you could do:
-<p><blockquote><pre>prompt: LIBS="-lposix -lsocket" ../dist/configure</pre></blockquote>
-<p>and in csh or tcsh, you could do:
-<p><blockquote><pre>prompt: setenv LIBS "-lposix -lsocket"
+shown previously; that is with single or double quotes around the values
+you are specifying for LIBS.</p>
+<p>The env command, which is available on most systems, simply sets one or
+more environment variables before running a command. If the env command
+is not available to you, you can set the environment variables in your
+shell before running configure. For example, in sh or ksh, you could
+do the following:</p>
+<blockquote><pre>prompt: LIBS="-lposix -lsocket" ../dist/configure</pre></blockquote>
+<p>In csh or tcsh, you could do the following:</p>
+<blockquote><pre>prompt: setenv LIBS "-lposix -lsocket"
prompt: ../dist/configure</pre></blockquote>
-<p>See your command shell's manual page for further information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/install.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>See your command shell's manual page for further information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/small.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/install.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/freebsd.html b/db/docs/ref/build_unix/freebsd.html
index 3d3ff8116..f8a01d2d2 100644
--- a/db/docs/ref/build_unix/freebsd.html
+++ b/db/docs/ref/build_unix/freebsd.html
@@ -1,35 +1,37 @@
-<!--$Id: freebsd.so,v 11.12 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: freebsd.so,v 11.18 2003/04/01 17:21:45 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: FreeBSD</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/hpux.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/hpux.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>FreeBSD</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>FreeBSD</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
applications on FreeBSD. If you are compiling a threaded application,
-you must compile with the _THREAD_SAFE and -pthread flags:
-<p><blockquote><pre>cc -D_THREAD_SAFE -pthread ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+you must compile with the _THREAD_SAFE and -pthread flags:</p>
+<blockquote><pre>cc -D_THREAD_SAFE -pthread ...</pre></blockquote>
+<p>The Berkeley DB library will automatically build with the correct options.</p>
<hr size=1 noshade>
-<p><li><b>I get occasional failures when running RPC-based programs under FreeBSD clients.</b>
-<p>There is a known bug in the XDR implementation in the FreeBSD C library,
-from Version 2.2 up to version 4.0-RELEASE, that causes certain sized
+<p><li><b>I get occasional failures when running RPC-based programs under
+FreeBSD clients.</b>
+<p>There is a known bug in the XDR implementation in the FreeBSD C library
+from version 2.2 up to version 4.0-RELEASE, that causes certain-sized
messages to fail and return a zero-filled reply to the client. A bug
report (#16028) has been filed with FreeBSD. The following patch is the
-FreeBSD fix:
-<p><blockquote><pre>*** /usr/src/lib/libc/xdr/xdr_rec.c.orig Mon Jan 10 10:20:42 2000
+FreeBSD fix:</p>
+<blockquote><pre>*** /usr/src/lib/libc/xdr/xdr_rec.c.orig Mon Jan 10 10:20:42 2000
--- /usr/src/lib/libc/xdr/xdr_rec.c Wed Jan 19 10:53:45 2000
***************
*** 558,564 ****
@@ -49,9 +51,16 @@ FreeBSD fix:
rstrm-&gt;fbtbc = header & (~LAST_FRAG);
return (TRUE);
</pre></blockquote>
+<hr size=1 noshade>
+<p><li><b>I see fsync and close system call failures when accessing
+databases or log files on NFS-mounted filesystems.</b>
+<p>Some FreeBSD releases are known to return ENOLCK from fsync and close
+calls on NFS-mounted filesystems, even though the call has succeeded.
+The Berkeley DB code should be modified to ignore ENOLCK errors, or no Berkeley DB
+files should be placed on NFS-mounted filesystems on these systems.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/hpux.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/aix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/hpux.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/hpux.html b/db/docs/ref/build_unix/hpux.html
index 3fc50d73c..a77b3e490 100644
--- a/db/docs/ref/build_unix/hpux.html
+++ b/db/docs/ref/build_unix/hpux.html
@@ -1,89 +1,96 @@
-<!--$Id: hpux.so,v 11.11 2000/12/14 17:04:02 krinsky Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: hpux.so,v 11.16 2003/03/24 13:46:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: HP-UX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/freebsd.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/irix.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/freebsd.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/irix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>HP-UX</h1>
-<p><ol>
-<p><li><b>I can't specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.</b>
+<h3 align=center>HP-UX</h3>
+<ol>
+<p><li><b>I can't specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>.</b>
<p>The <b>shmget</b>(2) interfaces are not always used on HP-UX, even
-though they exist, as anonymous memory allocated using <b>shmget</b>(2)
+though they exist, because anonymous memory allocated using <b>shmget</b>(2)
cannot be used to store the standard HP-UX msemaphore semaphores. For
this reason, it may not be possible to specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a>
-flag on some versions of HP-UX. (We have only seen this problem on HP-UX
-10.XX, so the simplest workaround may be to upgrade your HP-UX release.)
+flag on some versions of HP-UX. (We have seen this problem only on HP-UX
+10.XX, so the simplest workaround may be to upgrade your HP-UX release.)</p>
<hr size=1 noshade>
<p><li><b>I can't specify both the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> and <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a>
-flags to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.</b>
+flags to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>.</b>
<p>It is not possible to store the standard HP-UX msemaphore semaphores in
memory returned by <b>malloc</b>(3) in some versions of HP-UX. For
-this reason, it may not be possible to specify both the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>
-and <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flags on some versions of HP-UX. (We have only seen
-this problem on HP-UX 10.XX, so the simplest workaround may be to upgrade
-your HP-UX release.)
+this reason, it may not be possible to specify both the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> and <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flags on some versions of
+HP-UX. (We have seen this problem only on HP-UX 10.XX, so the simplest
+workaround may be to upgrade your HP-UX release.)</p>
<hr size=1 noshade>
-<p><li><b>During configuration I see a message that large file support has
-been turned off.</b>
-<p>Some HP-UX system include files redefine "open" when big-file support (the
-HAVE_FILE_OFFSET_BITS and _FILE_OFFSET_BITS #defines) is enabled. This
-causes problems when compiling for C++, where "open" is a legal
-identifier, used in the Berkeley DB C++ API. For this reason, we automatically
-turn off big-file support when Berkeley DB is configured with a C++ API. This
-should not be a problem for applications unless there is a need to create
-databases larger than 2GB.
-<hr size=1 noshade>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
applications on HP-UX. If you are compiling a threaded application, you
-must compile with the _REENTRANT flag:
-<p><blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+must compile with the _REENTRANT flag:</p>
+<blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
+<p>The Berkeley DB library will automatically build with the correct options.</p>
<hr size=1 noshade>
-<p><li><b>An ENOMEM error is returned from <a href="../../api_c/env_open.html">DBENV-&gt;open</a> or
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a>.</b>
+<p><li><b>An ENOMEM error is returned from <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> or
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a>.</b>
<p>Due to the constraints of the PA-RISC memory architecture, HP-UX does not
allow a process to map a file into its address space multiple times.
For this reason, each Berkeley DB environment may be opened only once by a
-process on HP-UX, i.e., calls to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> will fail if the
-specified Berkeley DB environment has been opened and not subsequently closed.
+process on HP-UX; that is, calls to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> will fail if the
+specified Berkeley DB environment has been opened and not subsequently closed.</p>
<hr size=1 noshade>
<p><li><b>When compiling with gcc, I see the following error:
-<p><blockquote><pre>#error "Large Files (ILP32) not supported in strict ANSI mode."</pre></blockquote></b>
+<blockquote><pre>#error "Large Files (ILP32) not supported in strict ANSI mode."</pre></blockquote></b>
<p>We believe this is an error in the HP-UX include files, but we don't
really understand it. The only workaround we have found is to add
--D__STDC_EXT__ to the C preprocessor defines as part of compilation.
+-D__STDC_EXT__ to the C preprocessor defines as part of compilation.</p>
<hr size=1 noshade>
-<p><li><b>When using the Tcl or Perl APIs (including running the test suite) I
-see the error "Can't shl_load() a library containing Thread Local Storage".</b>
+<p><li><b>When using the Tcl or Perl APIs (including running the test
+suite), I see the error "Can't shl_load() a library containing Thread
+Local Storage".</b>
<p>This problem happens when HP-UX has been configured to use pthread mutex
-locking and an attempt is made to call Berkeley DB using the Tcl or Perl APIs. We
-have never found any way to fix this problem as part of the Berkeley DB build
-process. To work around the problem, rebuild tclsh or perl and modify its build
-process to explicitly link it against the HP-UX pthread library (currently
-/usr/lib/libpthread.a).
+locking, and an attempt is made to call Berkeley DB using the Tcl or Perl APIs.
+We have never found any way to fix this problem as part of the Berkeley DB
+build process. To work around the problem, rebuild tclsh or Perl, and
+modify its build process to explicitly link it against the HP-UX pthread
+library (currently /usr/lib/libpthread.a).</p>
+<hr size=1 noshade>
+<p><li><b>When running an executable that has been dynamically linked
+against the Berkeley DB library, I see the error "Can't find path for shared
+library" even though I correctly set the SHLIB_PATH environment variable.</b>
+<p>By default, some versions of HP-UX ignore the dynamic library search
+path specified by the SHLIB_PATH environment variable. To work around
+this, specify the "+s" flag to ld when linking, or run the following
+command on the executable that is not working:</p>
+<blockquote><pre>chatr +s enable -l /full/path/to/libdb-3.2.sl ...</pre></blockquote>
<hr size=1 noshade>
-<p><li><b>When running an executable that has been dynamically linked
-against the Berkeley DB library, I see the error "Can't find path for shared library"
-even though I've correctly set the SHLIB_PATH environment variable.</b>
-<p>By default, some versions of HP-UX ignore the dynamic library search path
-specified by the SHLIB_PATH environment variable. To work around this, specify
-the "+s" flag to ld when linking, or run
-<p><blockquote><pre>chatr +s enable -l /full/path/to/libdb-3.2.sl ...</pre></blockquote>
-<p>on the executable that is not working.
+<p><li><b>I see errors about "open64" when building Berkeley DB applications.</b>
+<p>System include files (most commonly fcntl.h) in some releases of AIX,
+HP-UX and Solaris redefine "open" when large-file support is enabled for
+applications. This causes problems when compiling applications because
+"open" is a method in the Berkeley DB APIs. To work around this problem:
+<ol>
+<p><li>Avoid including the problematical system include files in source code
+files which also include Berkeley DB include files and call into the Berkeley DB
+API.
+<li>Before building Berkeley DB, modify the generated include file db.h to itself
+include the problematical system include files.
+<li>Turn off Berkeley DB large-file support by specifying the
+<a href="../../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a> configuration option and rebuilding.
+</ol></p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/freebsd.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/irix.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/freebsd.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/irix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/install.html b/db/docs/ref/build_unix/install.html
index 7beb6f705..95fc34a91 100644
--- a/db/docs/ref/build_unix/install.html
+++ b/db/docs/ref/build_unix/install.html
@@ -1,23 +1,24 @@
-<!--$Id: install.so,v 10.12 2000/12/01 00:19:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: install.so,v 10.17 2003/11/08 19:17:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Installing Berkeley DB</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/shlib.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/shlib.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Installing Berkeley DB</h1>
-<p>Berkeley DB installs the following files into the following locations, with the
-following default values:
-<p><table border=1 align=center>
+<h3 align=center>Installing Berkeley DB</h3>
+<p>Berkeley DB installs the following files into the following locations,
+with the following default values:</p>
+<table border=1 align=center>
<tr><th>Configuration Variables</th><th>Default value</th></tr>
<tr><td>--prefix</td><td>/usr/local/BerkeleyDB.<b>Major</b>.<b>Minor</b></td></tr>
<tr><td>--exec_prefix</td><td>$(prefix)</td></tr>
@@ -32,29 +33,34 @@ following default values:
<tr><td>documentation</td><td>$(docdir)</td></tr>
</table>
<p>With one exception, this follows the GNU Autoconf and GNU Coding
-Standards installation guidelines, please see that documentation for
-more information and rationale.
-<p>The single exception is the Berkeley DB documentation. The Berkeley DB
-documentation is provided in HTML format, not in UNIX-style man or GNU
-info format. For this reason, Berkeley DB configuration does not support
-<b>--infodir</b> or <b>--mandir</b>. To change the default
-installation location for the Berkeley DB documentation, modify the Makefile
-variable, <b>docdir</b>.
+Standards installation guidelines; please see that documentation for
+more information and rationale.</p>
+<p>The single exception is the Berkeley DB documentation. The
+Berkeley DB documentation is provided in HTML format, not in
+UNIX-style man or GNU info format. For this reason, Berkeley DB
+configuration does not support <b>--infodir</b> or <b>--mandir</b>.
+To change the default installation location for the Berkeley DB
+documentation, modify the Makefile variable, <b>docdir</b>.</p>
+<p>When installing Berkeley DB on filesystems shared by machines of
+different architectures, please note that although Berkeley DB
+include files are installed based on the value of $(prefix), rather than
+$(exec_prefix), the Berkeley DB include files are not always
+architecture independent.</p>
<p>To move the entire installation tree to somewhere besides
-<b>/usr/local</b>, change the value of <b>prefix</b>.
+<b>/usr/local</b>, change the value of <b>prefix</b>.</p>
<p>To move the binaries and libraries to a different location, change the
value of <b>exec_prefix</b>. The values of <b>includedir</b> and
-<b>libdir</b> may be similarly changed.
-<p>Any of these values except for <b>docdir</b> may be set as part
-of configuration:
-<p><blockquote><pre>prompt: ../dist/configure --bindir=/usr/local/bin</pre></blockquote>
+<b>libdir</b> may be similarly changed.</p>
+<p>Any of these values except for <b>docdir</b> may be set as part of
+the configuration:</p>
+<blockquote><pre>prompt: ../dist/configure --bindir=/usr/local/bin</pre></blockquote>
<p>Any of these values, including <b>docdir</b>, may be changed when doing
-the install itself:
-<p><blockquote><pre>prompt: make prefix=/usr/contrib/bdb install</pre></blockquote>
-<p>The Berkeley DB installation process will attempt to create any directories that
-do not already exist on the system.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/shlib.html"><img src="../../images/next.gif" alt="Next"></a>
+the install itself:</p>
+<blockquote><pre>prompt: make prefix=/usr/contrib/bdb install</pre></blockquote>
+<p>The Berkeley DB installation process will attempt to create any
+directories that do not already exist on the system.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/shlib.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/intro.html b/db/docs/ref/build_unix/intro.html
index b2c0d613b..897943816 100644
--- a/db/docs/ref/build_unix/intro.html
+++ b/db/docs/ref/build_unix/intro.html
@@ -1,60 +1,62 @@
-<!--$Id: intro.so,v 10.18 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.29 2003/03/24 13:46:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Building for UNIX</title>
+<title>Berkeley DB Reference Guide: Building for UNIX/POSIX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/debug/common.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a><a name="4"><!--meow--></a><a name="5"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../debug/common.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/conf.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building for UNIX</h1>
-<p>The Berkeley DB distribution builds up to four separate libraries: the base C
-API Berkeley DB library and the optional C++, Java and Tcl API libraries. For
-portability reasons each library is standalone and contains the full Berkeley DB
-support necessary to build applications, that is, the C++ API Berkeley DB
-library does not require any other Berkeley DB libraries to build and run C++
-applications.
+<h3 align=center>Building for UNIX/POSIX</h3>
+<p>The Berkeley DB distribution builds up to four separate libraries: the base
+C API Berkeley DB library and the optional C++, Java, and Tcl API libraries.
+For portability reasons, each library is standalone and contains the
+full Berkeley DB support necessary to build applications; that is, the C++
+API Berkeley DB library does not require any other Berkeley DB libraries to build
+and run C++ applications.</p>
+<p>Building for Linux, Mac OS X and the QNX Neutrino release is the same
+as building for a conventional UNIX platform.</p>
<p>The Berkeley DB distribution uses the Free Software Foundation's
-<a href="http://sourceware.cygnus.com/autoconf">autoconf</a> and
-<a href="http://www.gnu.org/software/libtool/libtool.html">libtool</a>
-tools to build on UNIX platforms. In general, the standard configuration
-and installation options for these tools apply to the Berkeley DB distribution.
-<p>To perform the default UNIX build of Berkeley DB, first change to the
-<b>build_unix</b> directory, and then enter the following two commands:
-<p><blockquote><pre>../dist/configure
+<a href="http://www.gnu.org/software/autoconf/autoconf.html">autoconf</a>
+and <a href="http://www.gnu.org/software/libtool/libtool.html">libtool</a> tools to build on UNIX platforms. In general, the standard
+configuration and installation options for these tools apply to the
+Berkeley DB distribution.</p>
+<p>To do a standard UNIX build of Berkeley DB, change to the <b>build_unix</b>
+directory and then enter the following two commands:</p>
+<blockquote><pre>../dist/configure
make</pre></blockquote>
-<p>This will build the Berkeley DB library.
-<p>To install the Berkeley DB library, enter:
-<p><blockquote><pre>make install</pre></blockquote>
-<p>To rebuild Berkeley DB, enter:
-<p><blockquote><pre>make clean
+<p>This will build the Berkeley DB library.</p>
+<p>To install the Berkeley DB library, enter the following command:</p>
+<blockquote><pre>make install</pre></blockquote>
+<p>To rebuild Berkeley DB, enter:</p>
+<blockquote><pre>make clean
make</pre></blockquote>
-<p>If you change your mind about how Berkeley DB is to be configured, you must start
-from scratch by entering:
-<p><blockquote><pre>make realclean
+<p>If you change your mind about how Berkeley DB is to be configured, you must
+start from scratch by entering the following command:</p>
+<blockquote><pre>make realclean
../dist/configure
make</pre></blockquote>
-<p>To build multiple UNIX versions of Berkeley DB in the same source tree, create a
-new directory at the same level as the build_unix directory, and then
-configure and build in that directory:
-<p><blockquote><pre>mkdir build_bsdos3.0
-cd build_bsdos3.0
-../dist/configure
-make</pre></blockquote>
-<p>If you have trouble with any of these commands, please send email to the
-addresses found in the Sleepycat Software contact information. In that
-email, please provide a complete copy of the commands that you entered
-and any output, along with a copy of any <b>config.log</b> or
-<b>config.cache</b> files created during configuration.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/debug/common.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>To build multiple UNIX versions of Berkeley DB in the same source tree, create
+a new directory at the same level as the build_unix directory, and then
+configure and build in that directory as described previously.</p>
+<p>If you have trouble with any of these commands, please send email to
+the support addresses found in the Sleepycat Software contact
+information. In that email, please include the following information:</p>
+<p><ul type=disc>
+<li>A screen snapshot of the commands you entered to do configuration and
+compilation, and any output they produced.
+<li>A copy of the <b>config.log</b> file created during configuration.
+</ul>
+<table width="100%"><tr><td><br></td><td align=right><a href="../debug/common.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/conf.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/irix.html b/db/docs/ref/build_unix/irix.html
index af31b6e68..0e929b277 100644
--- a/db/docs/ref/build_unix/irix.html
+++ b/db/docs/ref/build_unix/irix.html
@@ -1,30 +1,31 @@
-<!--$Id: irix.so,v 11.4 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: irix.so,v 11.6 2003/03/24 13:46:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: IRIX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/hpux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/linux.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/hpux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/linux.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>IRIX</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>IRIX</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
applications on IRIX. If you are compiling a threaded application, you
-must compile with the _SGI_MP_SOURCE flag:
-<p><blockquote><pre>cc -D_SGI_MP_SOURCE ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+must compile with the _SGI_MP_SOURCE flag:</p>
+<blockquote><pre>cc -D_SGI_MP_SOURCE ...</pre></blockquote>
+<p>The Berkeley DB library will automatically build with the correct options.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/hpux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/linux.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/hpux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/linux.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/linux.html b/db/docs/ref/build_unix/linux.html
index b6e2b93fb..df0a4992f 100644
--- a/db/docs/ref/build_unix/linux.html
+++ b/db/docs/ref/build_unix/linux.html
@@ -1,30 +1,43 @@
-<!--$Id: linux.so,v 11.4 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: linux.so,v 11.12 2003/04/01 22:51:35 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Linux</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/irix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/irix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/macosx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Linux</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>Linux</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
applications on Linux. If you are compiling a threaded application, you
-must compile with the _REENTRANT flag:
-<p><blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+must compile with the _REENTRANT flag:</p>
+<blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
+<p>The Berkeley DB library will automatically build with the correct options.</p>
+<p><li><b>I see database corruption when accessing databases on
+NFS-mounted filesystems.</b>
+<p>Some Linux filesystems are known to not support complete semantics for
+the POSIX fsync call on NFS-mounted filesystems. No Berkeley DB files should
+be placed on NFS-mounted filesystems on these systems.</p>
+<p><li><b>I see database corruption when accessing databases.</b>
+<p>Some Linux filesystems do not support POSIX filesystem semantics.
+Specifically, ext2 and early releases of ReiserFS, and ext3 in some
+configurations, do not support "ordered data mode" and may insert random
+data into database or log files when systems crash. Berkeley DB files should
+not be placed on a filesystem that does not support, or is not
+configured to support, POSIX semantics.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/irix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/irix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/macosx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/macosx.html b/db/docs/ref/build_unix/macosx.html
index 1c31dee4a..94cd2d331 100644
--- a/db/docs/ref/build_unix/macosx.html
+++ b/db/docs/ref/build_unix/macosx.html
@@ -1,42 +1,35 @@
-<!--Id: macosx.so,v 11.7 2002/09/05 15:59:10 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: macosx.so,v 11.10 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Mac OS X</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td align=right><a href="../../ref/build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Mac OS X</h1>
-<p><ol>
+<h3 align=center>Mac OS X</h3>
+<ol>
<p><li><b>I cannot use the Java API on Mac OS X.</b>
<p>The Berkeley DB configuration and build procedure is unable to dynamically
load some libraries on Mac OS X. This restriction is expected to be
-removed in future Berkeley DB releases.
+removed in future Berkeley DB releases.</p>
<p>There is a workaround for Java. Mac OS X normally requires Java
loadable libraries to end with a .jnilib extension. Libtool, used by
our build procedure, does not support this extension. To work around
this, you must add a -D option to your Java command line to specify the
-complete pathname of the installed library:
-<p><blockquote><pre>% java -Dsleepycat.db.libfile=/full/path/to/libdb_java-VERSION.so</pre></blockquote>
-<p><li><b>I cannot run the test suite on Mac OS X.</b>
-<p>The Mac OS X 10.1 and 10.2 Developer Tools installer will optionally
-install one additional package called simply, "BSD SDK". That package
-contains the additional parts of the TCL distribution required to
-configure, compile and run the Berkeley DB test suite. The Berkeley DB configuration
-step will need the flag "--with-tcl=/System/Library/Tcl/8.3" added to
-the arguments in order to locate the now installed TCL distribution.
+complete pathname of the installed library:</p>
+<blockquote><pre>% java -Dsleepycat.db.libfile=/full/path/to/libdb_java-VERSION.so</pre></blockquote>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/osf1.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/notes.html b/db/docs/ref/build_unix/notes.html
index dcb975e3c..7f9cdb167 100644
--- a/db/docs/ref/build_unix/notes.html
+++ b/db/docs/ref/build_unix/notes.html
@@ -1,138 +1,153 @@
-<!--$Id: notes.so,v 10.42 2001/01/09 18:49:53 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: notes.so,v 10.51 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Architecture independent FAQs</title>
+<title>Berkeley DB Reference Guide: Architecture independent FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/aix.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/aix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Architecture independent FAQs</h1>
-<p><ol>
-<p><li><b>When compiling with gcc, I get unreferenced symbols, e.g.,:
-<p><blockquote><pre>symbol __muldi3: referenced symbol not found
+<h3 align=center>Architecture independent FAQ</h3>
+<ol>
+<p><li><b>When compiling with gcc, I get unreferenced symbols; for example
+the following:
+<blockquote><pre>symbol __muldi3: referenced symbol not found
symbol __cmpdi2: referenced symbol not found</pre></blockquote></b>
-<p>On systems where they're available (e.g., HP-UX, Solaris), Berkeley DB uses
-64-bit integral types. As far as we can tell, some versions of gcc
-don't support these types. The simplest workaround is to reconfigure
-Berkeley DB using the --disable-bigfile configuration option, and then rebuild.
+<p>Berkeley DB often uses 64-bit integral types on systems supporting large
+files, and gcc performs operations on those types by calling library
+functions. These unreferenced symbol errors are usually caused by
+linking an application by calling "ld" rather than by calling "gcc":
+gcc will link in libgcc.a and will resolve the symbols. If that does
+not help, another possible workaround is to reconfigure Berkeley DB using the
+<a href="../../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a> configuration option and then rebuild.</p>
<hr size=1 noshade>
<p><li><b>My C++ program traps during a failure in a DB call on my
gcc-based system.</b>
-<p>We believe there are some severe bugs in the implementation of exceptions
-for some gcc compilers. Exceptions require some interaction between
-compiler, assembler, runtime libraries, and we're not sure exactly what
-is at fault, but one failing combination is gcc 2.7.2.3 running on SuSE
-Linux 6.0. The problem on this system can be seen with a rather simple
-test case of an exception thrown from a shared library and caught in the
-main program.
+<p>We believe there are some severe bugs in the implementation of
+exceptions for some gcc compilers. Exceptions require some interaction
+between compiler, assembler, and runtime libraries. We're not sure
+exactly what is at fault, but one failing combination is gcc 2.7.2.3
+running on SuSE Linux 6.0. The problem on this system can be seen with
+a rather simple test case of an exception thrown from a shared library
+and caught in the main program.</p>
<p>A variation of this problem seems to occur on AIX, although we believe it
-does not necessarily involve shared libraries on that platform.
-<p>If you see a trap that occurs when an exception might be thrown by the DB
-runtime, we suggest that you use static libraries instead of dynamic
-(shared) libraries. See the documentation for configuration. If this
-doesn't work, and you have a choice of compilers, try using a more recent
-gcc or a non-gcc based compiler to build Berkeley DB.
+does not necessarily involve shared libraries on that platform.</p>
+<p>If you see a trap that occurs when an exception might be thrown by the
+Berkeley DB runtime, we suggest that you use static libraries instead of
+shared libraries. See the documentation for configuration. If this
+doesn't work and you have a choice of compilers, try using a more recent
+gcc- or a non-gcc based compiler to build Berkeley DB.</p>
<p>Finally, you can disable the use of exceptions in the C++ runtime for
-Berkeley DB by using the <a href="../../api_c/db_create.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a> flag with
-<a href="../../api_c/env_create.html">db_env_create</a> or <a href="../../api_c/db_create.html">db_create</a>. When this flag is on, all
-C++ methods fail by returning an error code rather than throwing an
-exception.
+Berkeley DB by using the <a href="../../api_cxx/env_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a> flag with the
+<a href="../../api_cxx/env_class.html">DbEnv</a> or <a href="../../api_cxx/db_class.html">Db</a> constructors. When this flag is on,
+all C++ methods fail by returning an error code rather than throwing an
+exception.</p>
<hr size=1 noshade>
<p><li><b>I get unexpected results and database corruption when running
threaded programs.</b>
-<p><b>I get error messages that mutex (e.g., pthread_mutex_XXX or
-mutex_XXX) functions are undefined when linking applications with Berkeley DB.</b>
+<p><b>I get error messages that mutex (for example, pthread_mutex_XXX or
+mutex_XXX) functions are undefined when linking applications with Berkeley DB.</b></p>
<p>On some architectures, the Berkeley DB library uses the ISO POSIX standard
pthreads and UNIX International (UI) threads interfaces for underlying
-mutex support, e.g., Solaris and HP-UX. You can specify compilers,
-compiler flags or link with the appropriate thread library when loading
-your application, to resolve the undefined references:
-<p><blockquote><pre>cc ... -lpthread ...
+mutex support; for example, Solaris and HP-UX. You can specify
+compilers or compiler flags, or link with the appropriate thread library
+when loading your application to resolve the undefined references:</p>
+<blockquote><pre>cc ... -lpthread ...
cc ... -lthread ...
xlc_r ...
cc ... -mt ...</pre></blockquote>
<p>See the appropriate architecture-specific Reference Guide pages for more
-information.
+information.</p>
<p>On systems where more than one type of mutex is available, it may be
necessary for applications to use the same threads package from which
-Berkeley DB draws its mutexes, e.g., if Berkeley DB was built to use the POSIX
-pthreads mutex calls for mutex support, the application may need to be
-written to use the POSIX pthreads interfaces for its threading model.
-While this is only conjecture at this time and we know of no systems that
-actually have this requirement, it's not unlikely that some exist.
+Berkeley DB draws its mutexes. For example, if Berkeley DB was built to use the
+POSIX pthreads mutex calls for mutex support, the application may need
+to be written to use the POSIX pthreads interfaces for its threading
+model. This is only conjecture at this time, and although we know of
+no systems that actually have this requirement, it's not unlikely that
+some exist.</p>
<p>In a few cases, Berkeley DB can be configured to use specific underlying mutex
interfaces. You can use the <a href="../../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a> and
<a href="../../ref/build_unix/conf.html#--enable-uimutexes">--enable-uimutexes</a> configuration options to specify the POSIX and Unix
International (UI) threads packages. This should not, however, be
-necessary in most cases.
-<p>In some cases, it is vitally important to make sure that you load
-the correct library. For example, on Solaris systems, there are POSIX
-pthread interfaces in the C library, and so applications can link Berkeley DB
-using only C library and not see any undefined symbols. However, the C
-library POSIX pthread mutex support is insufficient for Berkeley DB and Berkeley DB
-cannot detect that fact. Similar errors can arise when applications
-(e.g., tclsh) use dlopen to dynamically load Berkeley DB as a library.
-<p>If you are seeing problems in this area after you've confirmed that you're
+necessary in most cases.</p>
+<p>In some cases, it is vitally important to make sure that you load the
+correct library. For example, on Solaris systems, there are POSIX
+pthread interfaces in the C library, so applications can link Berkeley DB
+using only C library and not see any undefined symbols. However, the
+C library POSIX pthread mutex support is insufficient for Berkeley DB, and
+Berkeley DB cannot detect that fact. Similar errors can arise when
+applications (for example, tclsh) use dlopen to dynamically load Berkeley DB
+as a library.</p>
+<p>If you are seeing problems in this area after you confirm that you're
linking with the correct libraries, there are two other things you can
-try. First, if your platform supports inter-library dependencies, we
+try. First, if your platform supports interlibrary dependencies, we
recommend that you change the Berkeley DB Makefile to specify the appropriate
-threads library when creating the Berkeley DB dynamic library, as an
-inter-library dependency. Second, if your application is using dlopen to
-dynamically load Berkeley DB, specify the appropriate thread library on the link
-line when you load the application itself.
+threads library when creating the Berkeley DB shared library, as an
+interlibrary dependency. Second, if your application is using dlopen
+to dynamically load Berkeley DB, specify the appropriate thread library on
+the link line when you load the application itself.</p>
<hr size=1 noshade>
<p><li><b>I get core dumps when running programs that fork children.</b>
<p>Berkeley DB handles should not be shared across process forks, each forked
-child should acquire its own Berkeley DB handles.
+child should acquire its own Berkeley DB handles.</p>
<hr size=1 noshade>
<p><li><b>I get reports of uninitialized memory reads and writes when
-running software analysis tools (e.g., Rational Software Corp.'s Purify
-tool).</b>
+running software analysis tools (for example, Rational Software Corp.'s
+Purify tool).</b>
<p>For performance reasons, Berkeley DB does not write the unused portions of
database pages or fill in unused structure fields. To turn off these
errors when running software analysis tools, build with the
---enable-umrw configuration option.
+--enable-umrw configuration option.</p>
<hr size=1 noshade>
<p><li><b>Berkeley DB programs or the test suite fail unexpectedly.</b>
-<p>The Berkeley DB architecture does not support placing the shared memory regions
-on remote filesystems, e.g., the Network File System (NFS) or the Andrew
-File System (AFS). For this reason, the shared memory regions (normally
-located in the database home directory) must reside on a local filesystem.
-See <a href="../../ref/env/region.html">Shared Memory Regions</a> for more
-information.
+<p>The Berkeley DB architecture does not support placing the shared memory
+regions on remote filesystems -- for example, the Network File System
+(NFS) or the Andrew File System (AFS). For this reason, the shared
+memory regions (normally located in the database home directory) must
+reside on a local filesystem. See <a href="../../ref/env/region.html">Shared Memory Regions</a> for more information.</p>
<p>With respect to running the test suite, always check to make sure that
-TESTDIR is not on a remote mounted filesystem.
+TESTDIR is not on a remote mounted filesystem.</p>
<hr size=1 noshade>
<p><li><b>The <a href="../../utility/db_dump.html">db_dump185</a> utility fails to build.</b>
-<p>The <a href="../../utility/db_dump.html">db_dump185</a> utility is the utility that supports conversion
-of Berkeley DB 1.85 and earlier databases to current database formats. If
-the errors look something like:
-<p><blockquote><pre>cc -o db_dump185 db_dump185.o
+<p>The <a href="../../utility/db_dump.html">db_dump185</a> utility is the utility that supports the
+conversion of Berkeley DB 1.85 and earlier databases to current database
+formats. If the build errors look something like the following, it
+means the db.h include file being loaded is not a Berkeley DB 1.85 version
+include file:</p>
+<blockquote><pre>db_dump185.c: In function `main':
+db_dump185.c:210: warning: assignment makes pointer from integer without a cast
+db_dump185.c:212: warning: assignment makes pointer from integer without a cast
+db_dump185.c:227: structure has no member named `seq'
+db_dump185.c:227: `R_NEXT' undeclared (first use in this function)</pre></blockquote>
+<p>If the build errors look something like the following, it means that
+the Berkeley DB 1.85 code was not found in the standard libraries:</p>
+<blockquote><pre>cc -o db_dump185 db_dump185.o
ld:
Unresolved:
dbopen</pre></blockquote>
-<p>it means that the Berkeley DB 1.85 code was not found in the standard
-libraries. To build <a href="../../utility/db_dump.html">db_dump185</a>, the Berkeley DB version 1.85 code
-must have already been built and installed on the system. If the Berkeley DB
-1.85 header file is not found in a standard place, or the library is
-not part of the standard libraries used for loading, you will need to
-edit your Makefile, and change the lines:
-<p><blockquote><pre>DB185INC=
+<p>To build <a href="../../utility/db_dump.html">db_dump185</a>, the Berkeley DB version 1.85 code must already
+been built and available on the system. If the Berkeley DB 1.85 header file
+is not found in a standard place, or if the library is not part of the
+standard libraries used for loading, you will need to edit your
+Makefile, and change the following lines:</p>
+<blockquote><pre>DB185INC=
DB185LIB=</pre></blockquote>
-<p>So that the system Berkeley DB 1.85 header file and library are found, e.g.,
-<p><blockquote><pre>DB185INC=/usr/local/include
+<p>So that the system Berkeley DB 1.85 header file and library are found; for
+example:</p>
+<blockquote><pre>DB185INC=/usr/local/include
DB185LIB=-ldb185</pre></blockquote>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/aix.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/aix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/osf1.html b/db/docs/ref/build_unix/osf1.html
index 42ac8e767..1a7646f17 100644
--- a/db/docs/ref/build_unix/osf1.html
+++ b/db/docs/ref/build_unix/osf1.html
@@ -1,30 +1,31 @@
-<!--$Id: osf1.so,v 11.6 2000/10/30 20:46:06 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: osf1.so,v 11.9 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: OSF/1</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/qnx.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/macosx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/qnx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>OSF/1</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>OSF/1</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags are required when compiling threaded
applications on OSF/1. If you are compiling a threaded application, you
-must compile with the _REENTRANT flag:
-<p><blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+must compile with the _REENTRANT flag:</p>
+<blockquote><pre>cc -D_REENTRANT ...</pre></blockquote>
+<p>The Berkeley DB library will automatically build with the correct options.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/linux.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/qnx.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/macosx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/qnx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/qnx.html b/db/docs/ref/build_unix/qnx.html
index 29c90dc98..3cfbec511 100644
--- a/db/docs/ref/build_unix/qnx.html
+++ b/db/docs/ref/build_unix/qnx.html
@@ -1,58 +1,77 @@
-<!--$Id: qnx.so,v 11.5 2000/11/29 15:03:24 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: qnx.so,v 11.10 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: QNX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/osf1.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sco.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/osf1.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/sco.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>QNX</h1>
-<p><ol>
+<h3 align=center>QNX</h3>
+<ol>
<p><li><b>To what versions of QNX has DB been ported?</b>
<p>Berkeley DB has been ported to the QNX Neutrino technology which is commonly
referred to as QNX RTP (Real-Time Platform). Berkeley DB has not been
-ported to earlier versions of QNX, such as QNX 4.25.
+ported to earlier versions of QNX, such as QNX 4.25.</p>
+<p><li><b>Are there any QNX filesystem issues?</b>
+<p>Berkeley DB generates temporary files for use in transactionally
+protected file system operations. Due to the filename length limit of
+48 characters in the QNX filesystem, applications that are using
+transactions should specify a database name that is at most 43 characters.</p>
<p><li><b>What is the impact of QNX's use of <b>shm_open</b>(2) for
shared memory regions?</b>
<p>QNX requires the use of the POSIX <b>shm_open</b>(2) and
<b>shm_unlink</b>(2) calls for shared memory regions that will later
be mapped into memory using <b>mmap</b>(2). QNX's implementation
of the shared memory functions requires that the name given must begin
-with a slash, and that no other slash may appear in the name.
+with a slash, and that no other slash may appear in the name.</p>
<p>In order to comply with those requirements and allow relative pathnames
to find the same environment, Berkeley DB uses only the last component of the
home directory path and the name of the shared memory file, separated
by a colon, as the name specified to the shared memory functions. For
example, if an application specifies a home directory of
<b>/home/db/DB_DIR</b>, Berkeley DB will use <b>/DB_DIR:__db.001</b> as
-the name for the shared memory area argument to <b>shm_open</b>(2).
+the name for the shared memory area argument to <b>shm_open</b>(2).</p>
<p>The impact of this decision is that the last component of all
environment home directory pathnames on QNX must be unique with respect
to each other. Additionally, Berkeley DB requires that environments use home
directories for QNX in order to generate a reasonable entry in the
-shared memory area.
+shared memory area.</p>
<p><li><b>What are the implications of QNX's requirement to use
<b>shm_open</b>(2) in order to use <b>mmap</b>(2)?</b>
<p>QNX requires that files mapped with <b>mmap</b>(2) be opened using
<b>shm_open</b>(2). There are other places in addition to the
environment shared memory regions, where Berkeley DB tries to memory map files
-if it can.
+if it can.</p>
<p>The memory pool subsystem normally attempts to use <b>mmap</b>(2)
even when using private memory, as indicated by the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>
-flag to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>. In the case of QNX, if an application is
+flag to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>. In the case of QNX, if an application is
using private memory, Berkeley DB will not attempt to map the memory and will
-instead use the local cache.
+instead use the local cache.</p>
+<p><li><b>What are the implications of QNX's mutex implementation using
+microkernel resources?</b>
+<p>On QNX, the primitives implementing mutexes consume system resources.
+Therefore, if an application unexpectedly fails, those resources could
+leak. Berkeley DB solves this problem by always allocating mutexes in the
+persistent shared memory regions. Then, if an application fails,
+running recovery or explicitly removing the database environment by
+calling the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method will allow Berkeley DB to release those
+previously held mutex resources. If an application specifies the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag (choosing not to use persistent shared memory),
+and then fails, mutexes allocated in that private memory may leak their
+underlying system resources. Therefore, the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag
+should be used with caution on QNX.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/osf1.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sco.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/osf1.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/sco.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/sco.html b/db/docs/ref/build_unix/sco.html
index dda8e6d1d..9d237e73d 100644
--- a/db/docs/ref/build_unix/sco.html
+++ b/db/docs/ref/build_unix/sco.html
@@ -1,29 +1,30 @@
-<!--$Id: sco.so,v 11.7 2000/10/30 20:46:06 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: sco.so,v 11.9 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: SCO</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/qnx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/solaris.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/qnx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/solaris.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>SCO</h1>
-<p><ol>
-<p><li><b>If I build with gcc, programs like db_dump, db_stat core dump immediately
-when invoked.</b>
+<h3 align=center>SCO</h3>
+<ol>
+<p><li><b>If I build with gcc, programs such as db_dump and db_stat core dump
+immediately when invoked.</b>
<p>We suspect gcc or the runtime loader may have a bug, but we haven't
tracked it down. If you want to use gcc, we suggest building static
-libraries.
+libraries.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/qnx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/solaris.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/qnx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/solaris.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/shlib.html b/db/docs/ref/build_unix/shlib.html
index 2819651cd..7f02f5a8d 100644
--- a/db/docs/ref/build_unix/shlib.html
+++ b/db/docs/ref/build_unix/shlib.html
@@ -1,94 +1,104 @@
-<!--$Id: shlib.so,v 10.9 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: shlib.so,v 10.16 2003/11/08 19:17:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Dynamic shared libraries</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/install.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/test.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/install.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/test.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Dynamic shared libraries</h1>
+<h3 align=center>Dynamic shared libraries</h3>
<p><b>Warning</b>: the following information is intended to be generic and
is likely to be correct for most UNIX systems. Unfortunately, dynamic
shared libraries are not standard between UNIX systems, so there may be
information here that is not correct for your system. If you have
-problems, consult your compiler and linker manual pages or your system
-administrator.
+problems, consult your compiler and linker manual pages, or your system
+administrator.</p>
<p>The Berkeley DB dynamic shared libraries are created with the name
-libdb-<b>major</b>.<b>minor</b>.so, where <b>major</b> is the major
-version number and <b>minor</b> is the minor version number. Other
-shared libraries are created if Java and Tcl support are enabled,
-specifically libdb_java-<b>major</b>.<b>minor</b>.so and
-libdb_tcl-<b>major</b>.<b>minor</b>.so.
+libdb-<b>major</b>.<b>minor</b>.so, where <b>major</b> is
+the major version number and <b>minor</b> is the minor version number.
+Other shared libraries are created if Java and Tcl support are enabled:
+specifically, libdb_java-<b>major</b>.<b>minor</b>.so
+and libdb_tcl-<b>major</b>.<b>minor</b>.so.</p>
<p>On most UNIX systems, when any shared library is created, the linker
-stamps it with a "SONAME". In the case of Berkeley DB, the SONAME is
-libdb-<b>major</b>.<b>minor</b>.so. It is important to realize that
-applications linked against a shared library remember the SONAMEs of the
-libraries they use and not the underlying names in the filesystem.
-<p>When the Berkeley DB shared library is installed, links are created in the
-install lib directory so that libdb-<b>major</b>.<b>minor</b>.so,
-libdb-<b>major</b>.so and libdb.so all reference the same library. This
-library will have an SONAME of libdb-<b>major</b>.<b>minor</b>.so.
-<p>Any previous versions of the Berkeley DB libraries that are present in the
-install directory (such as libdb-2.7.so or libdb-2.so) are left unchanged.
-(Removing or moving old shared libraries is one drastic way to identify
-applications that have been linked against those vintage releases.)
-<p>Once you have installed the Berkeley DB libraries, unless they are installed in
-a directory where the linker normally looks for shared libraries, you will
-need to specify the installation directory as part of compiling and
-linking against Berkeley DB. Consult your system manuals or system
-administrator for ways to specify a shared library directory when
-compiling and linking applications with the Berkeley DB libraries. Many systems
-support environment variables (e.g., LD_LIBRARY_PATH, LD_RUN_PATH) ), or
-system configuration files (e.g., /etc/ld.so.conf) for this purpose.
+stamps it with a "SONAME". In the case of Berkeley DB, the SONAME
+is libdb-<b>major</b>.<b>minor</b>.so. It is important to
+realize that applications linked against a shared library remember the
+SONAMEs of the libraries they use and not the underlying names in the
+filesystem.</p>
+<p>When the Berkeley DB shared library is installed, links are
+created in the install lib directory so that
+libdb-<b>major</b>.<b>minor</b>.so,
+libdb-<b>major</b>.so, and libdb.so all refer to the
+same library. This library will have an SONAME of
+libdb-<b>major</b>.<b>minor</b>.so.</p>
+<p>Any previous versions of the Berkeley DB libraries that are
+present in the install directory (such as libdb-2.7.so or
+libdb-2.so) are left unchanged. (Removing or moving old shared
+libraries is one drastic way to identify applications that have been
+linked against those vintage releases.)</p>
+<p>Once you have installed the Berkeley DB libraries, unless they are
+installed in a directory where the linker normally looks for shared
+libraries, you will need to specify the installation directory as part
+of compiling and linking against Berkeley DB. Consult your system
+manuals or system administrator for ways to specify a shared library
+directory when compiling and linking applications with the
+Berkeley DB libraries. Many systems support environment variables
+(for example, LD_LIBRARY_PATH or LD_RUN_PATH), or system configuration
+files (for example, /etc/ld.so.conf) for this purpose.</p>
<p><b>Warning</b>: some UNIX installations may have an already existing
<b>/usr/lib/libdb.so</b>, and this library may be an incompatible
-version of Berkeley DB.
-<p>We recommend that applications link against libdb.so (e.g., using -ldb).
-Even though the linker uses the file named libdb.so, the executable file
-for the application remembers the library's SONAME
-(libdb-<b>major</b>.<b>minor</b>.so). This has the effect of marking
-the applications with the versions they need at link time. Because
-applications locate their needed SONAMEs when they are executed, all
-previously linked applications will continue to run using the library they
-were linked with, even when a new version of Berkeley DB is installed and the
-file <b>libdb.so</b> is replaced with a new version.
+version of Berkeley DB.</p>
+<p>We recommend that applications link against libdb.so (for example,
+using -ldb). Even though the linker uses the file named
+libdb.so, the executable file for the application remembers the
+library's SONAME (libdb-<b>major</b>.<b>minor</b>.so). This
+has the effect of marking the applications with the versions they need
+at link time. Because applications locate their needed SONAMEs when
+they are executed, all previously linked applications will continue to
+run using the library they were linked with, even when a new version of
+Berkeley DB is installed and the file <b>libdb.so</b>
+is replaced with a new version.</p>
<p>Applications that know they are using features specific to a particular
-Berkeley DB release can be linked to that release. For example, an application
-wanting to link to Berkeley DB major release "3" can link using -ldb-3, and
-applications that know about a particular minor release number can specify
-both major and minor release numbers, for example, -ldb-3.5.
-<p>If you want to link with Berkeley DB before performing library installation,
-the "make" command will have created a shared library object in the
-<b>.libs</b> subdirectory of the build directory, such as
-<b>build_unix/.libs/libdb-major.minor.so</b>. If you want to link a
-file against this library, with, for example, a major number of "3" and
-a minor number of "5", you should be able to do something like:
-<p><blockquote><pre>cc -L BUILD_DIRECTORY/.libs -o testprog testprog.o -ldb-3.5
+Berkeley DB release can be linked to that release. For example, an
+application wanting to link to Berkeley DB major release "3" can link
+using -ldb-3, and applications that know about a particular
+minor release number can specify both major and minor release numbers;
+for example, -ldb-3.5.</p>
+<p>If you want to link with Berkeley DB before performing library
+installation, the "make" command will have created a shared library
+object in the <b>.libs</b> subdirectory of the build directory, such
+as <b>build_unix/.libs/libdb-major.minor.so</b>. If you want
+to link a file against this library, with, for example, a major number
+of "3" and a minor number of "5", you should be able to do something
+like the following:</p>
+<blockquote><pre>cc -L BUILD_DIRECTORY/.libs -o testprog testprog.o -ldb-3.5
env LD_LIBRARY_PATH="BUILD_DIRECTORY/.libs:$LD_LIBRARY_PATH" ./testprog</pre></blockquote>
<p>where <b>BUILD_DIRECTORY</b> is the full directory path to the directory
-where you built Berkeley DB.
-<p>The libtool program (which is configured in the build_unix directory) can
-be used to set the shared library path and run a program. For example,
-<p><blockquote><pre>libtool gdb db_dump</pre></blockquote>
-<p>runs the gdb debugger on the db_dump utility after setting the appropriate
-paths. Libtool may not know what to do with arbitrary commands (it is
-hardwired to recognize "gdb" and some other commands). If it complains
-the mode argument will usually resolve the problem:
-<p><blockquote><pre>libtool --mode=execute my_debugger db_dump</pre></blockquote>
+where you built Berkeley DB.</p>
+<p>The libtool program (which is configured in the build directory) can be
+used to set the shared library path and run a program. For example,
+the following runs the gdb debugger on the db_dump utility after setting
+the appropriate paths:</p>
+<blockquote><pre>libtool gdb db_dump</pre></blockquote>
+<p>Libtool may not know what to do with arbitrary commands (it is hardwired
+to recognize "gdb" and some other commands). If it complains the mode
+argument will usually resolve the problem:</p>
+<blockquote><pre>libtool --mode=execute my_debugger db_dump</pre></blockquote>
<p>On most systems, using libtool in this way is exactly equivalent to
setting the LD_LIBRARY_PATH environment variable and then executing the
program. On other systems, using libtool has the virtue of knowing about
-any other details on systems that don't behave in this typical way.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/install.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/test.html"><img src="../../images/next.gif" alt="Next"></a>
+any other details on systems that don't behave in this typical way.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/install.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/test.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/small.html b/db/docs/ref/build_unix/small.html
new file mode 100644
index 000000000..ca2beab54
--- /dev/null
+++ b/db/docs/ref/build_unix/small.html
@@ -0,0 +1,59 @@
+<!--$Id: small.so,v 10.4 2003/05/09 17:49:05 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Building a small memory footprint library</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/flags.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Building a small memory footprint library</h3>
+<p>There are a set of configuration options to assist you in building a
+small memory footprint library. These configuration options turn off
+specific functionality in the Berkeley DB library, reducing the code size.
+These configuration options include:</p>
+<p><dl compact>
+<p><dt><a name="--disable-cryptography">--disable-cryptography</a><dd>To build Berkeley DB without support for cryptography, enter
+--disable-cryptography as an argument to configure.
+<p><dt><a name="--disable-hash">--disable-hash</a><dd>To build Berkeley DB without support for the Hash access method, enter
+--disable-hash as an argument to configure.
+<p><dt><a name="--disable-queue">--disable-queue</a><dd>To build Berkeley DB without support for the Queue access method, enter
+--disable-queue as an argument to configure.
+<p><dt><a name="--disable-replication">--disable-replication</a><dd>To build Berkeley DB without support for the database environment replication,
+enter --disable-replication as an argument to configure.
+<p><dt><a name="--disable-verify">--disable-verify</a><dd>To build Berkeley DB without support for database verification, enter
+--disable-verify as an argument to configure.
+<p><dt><a name="--enable-smallbuild">--enable-smallbuild</a><dd>Equivalent to individually specifying --disable-cryptography,
+--disable-hash, --disable-queue, --disable-replication, and
+--disable-verify
+</dl>
+<p>The following configuration options will increase the size of the Berkeley DB
+library dramatically and are only useful when debugging applications:</p>
+<p><dl compact>
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-debug">--enable-debug</a><dd>Build Berkeley DB with symbols for debugging.
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-debug_rop">--enable-debug_rop</a><dd>Build Berkeley DB with read-operation logging.
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-debug_wop">--enable-debug_wop</a><dd>Build Berkeley DB with write-operation logging.
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a><dd>Build Berkeley DB with run-time debugging checks.
+</dl>
+<p>In addition, static libraries are usually smaller than shared libraries.
+By default Berkeley DB will build both shared and static libraries. To build
+only a static library, configure Berkeley DB with the
+<a href="../../ref/build_unix/conf.html">--disable-shared</a> option.</p>
+<p>While the size of the Berkeley DB library will vary depending on your
+compiler, system, and configuration options, the minimum size is
+expected to be around 350KB, and the maximum size to be around 600KB.</p>
+<p>For assistance in further reducing the size of the Berkeley DB library, or in
+building small memory footprint libraries on other systems, please contact
+Sleepycat Software support.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/flags.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/build_unix/solaris.html b/db/docs/ref/build_unix/solaris.html
index 8239537a8..8ab696dc7 100644
--- a/db/docs/ref/build_unix/solaris.html
+++ b/db/docs/ref/build_unix/solaris.html
@@ -1,67 +1,68 @@
-<!--$Id: solaris.so,v 11.14 2000/09/13 17:22:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: solaris.so,v 11.25 2003/03/24 13:46:23 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Solaris</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Solaris</h1>
-<p><ol>
-<p><li><b>I can't compile and run multi-threaded applications.</b>
+<h3 align=center>Solaris</h3>
+<ol>
+<p><li><b>I can't compile and run multithreaded applications.</b>
<p>Special compile-time flags and additional libraries are required when
compiling threaded applications on Solaris. If you are compiling a
threaded application, you must compile with the D_REENTRANT flag and link
-with the libpthread.a or libthread.a libraries:
-<p><blockquote><pre>cc -mt ...
+with the libpthread.a or libthread.a libraries:</p>
+<blockquote><pre>cc -mt ...
cc -D_REENTRANT ... -lthread
cc -D_REENTRANT ... -lpthread</pre></blockquote>
-<p>The Berkeley DB library will automatically build with the correct options.
+<p>The Berkeley DB library will automatically build with the correct options.</p>
<hr size=1 noshade>
<p><li><b>I've installed gcc on my Solaris system, but configuration
fails because the compiler doesn't work.</b>
<p>On some versions of Solaris, there is a cc executable in the user's path,
-but all it does is display an error message and fail:
-<p><blockquote><pre>% which cc
+but all it does is display an error message and fail:</p>
+<blockquote><pre>% which cc
/usr/ucb/cc
% cc
/usr/ucb/cc: language optional software package not installed</pre></blockquote>
-<p>As Berkeley DB always uses the native compiler in preference to gcc, this is a
-fatal error. If the error message you're seeing is:
-<p><blockquote><pre>checking whether the C compiler (cc -O ) works... no
+<p>Because Berkeley DB always uses the native compiler in preference to gcc, this
+is a fatal error. If the error message you are seeing is the following,
+then this may be the problem:</p>
+<blockquote><pre>checking whether the C compiler (cc -O) works... no
configure: error: installation or configuration problem: C compiler cannot create executables.</pre></blockquote>
-<p>then this may be the problem you're seeing. The simplest workaround is
-to set your CC environment variable to the system compiler, e.g.:
-<p><blockquote><pre>env CC=gcc ../dist/configure</pre></blockquote>
-<p>and reconfigure.
+<p>The simplest workaround is to set your CC environment variable to the
+system compiler and reconfigure; for example:</p>
+<blockquote><pre>env CC=gcc ../dist/configure</pre></blockquote>
<p>If you are using the --configure-cxx option, you may also want to specify
-a C++ compiler, e.g.:
-<p><blockquote><pre>env CC=gcc CCC=g++ ../dist/configure</pre></blockquote>
+a C++ compiler, for example the following:</p>
+<blockquote><pre>env CC=gcc CCC=g++ ../dist/configure</pre></blockquote>
<hr size=1 noshade>
-<p><li><b>I get the error
+<p><li><b>I see the error
"libc internal error: _rmutex_unlock: rmutex not held", followed by a core
-dump, when running threaded or JAVA programs.</b>
-<p>This is a known bug in Solaris 2.5 and it is fixed by Sun patch 103187-25.
+dump when running threaded or JAVA programs.</b>
+<p>This is a known bug in Solaris 2.5 and it is fixed by Sun patch 103187-25.</p>
<hr size=1 noshade>
-<p><li><b>I get error reports of non-existent files, corrupted metadata
+<p><li><b>I see error reports of nonexistent files, corrupted metadata
pages and core dumps.</b>
-<p>Solaris 7 contains a bug in the threading libraries (-lpthread, -lthread)
-which causes the wrong version of the pwrite routine to be linked into
-the application if the thread library is linked in after the the C
-library. The result will be that the pwrite function is called rather
-than the pwrite64. To work around the problem, use an explicit link order
-when creating your application.
+<p>Solaris 7 contains a bug in the threading libraries (-lpthread,
+-lthread), which causes the wrong version of the pwrite routine to be
+linked into the application if the thread library is linked in after
+the C library. The result will be that the pwrite function is called
+rather than the pwrite64. To work around the problem, use an explicit
+link order when creating your application.</p>
<p>Sun Microsystems is tracking this problem with Bug Id's 4291109 and 4267207,
-and patch 106980-09 to Solaris 7 fixes the problem.
-<p><blockquote><pre>Bug Id: 4291109
+and patch 106980-09 to Solaris 7 fixes the problem:</p>
+<blockquote><pre>Bug Id: 4291109
Duplicate of: 4267207
Category: library
Subcategory: libthread
@@ -73,18 +74,43 @@ libthread that gets "wired into" libc via _libc_threads_interface().
The table in libthread is wrong in both Solaris 7 and on28_35 for the
TI_PWRITE64 row (see near the end).</pre></blockquote>
<hr size=1 noshade>
-<p><li><b>During configuration I see a message that large file support has
-been turned off.</b>
-<p>The Solaris 8 system include files redefine "open" when big-file support (the
-HAVE_FILE_OFFSET_BITS and _FILE_OFFSET_BITS #defines) is enabled. This
-causes problems when compiling for C++, where "open" is a legal
-identifier, used in the Berkeley DB C++ API. For this reason, we automatically
-turn off big-file support when Berkeley DB is configured with a C++ API. This
-should not be a problem for applications unless there is a need to create
-databases larger than 2GB.
+<p><li><b>I see corrupted databases when doing hot backups or creating
+a hot failover archive.</b>
+<p>The Solaris cp utility is implemented using the mmap system call, and
+so writes are not blocked when it reads database pages. See
+<a href="../../ref/transapp/reclimit.html">Berkeley DB recoverability</a> for more
+information.</p>
+<hr size=1 noshade>
+<p><li><b>Performance is slow and the application is doing a lot of I/O
+to the disk on which the database environment's files are stored.</b>
+<p>By default, Solaris periodically flushes dirty blocks from memory-mapped
+files to the backing filesystem. This includes the Berkeley DB database
+environment's shared memory regions and can affect Berkeley DB performance.
+Workarounds include creating the shared regions in system shared memory
+(<a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a>) or application private memory
+(<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>), or, configuring Solaris to not flush memory-mapped
+pages. For more information, see the
+<a href="http://docs.sun.com/db/doc/806-4015/6jd4gh8en?a=view">Solaris Tunable Parameters Reference Manual: fsflush and Related Tunables</a>.
+</p>
+<hr size=1 noshade>
+<p><li><b>I see errors about "open64" when building Berkeley DB applications.</b>
+<p>System include files (most commonly fcntl.h) in some releases of AIX,
+HP-UX and Solaris redefine "open" when large-file support is enabled
+for applications. This causes problems when compiling applications
+because "open" is a method in the Berkeley DB APIs. To work around this
+problem:
+<ol>
+<p><li>Avoid including the problematical system include files in source code
+files which also include Berkeley DB include files and call into the Berkeley DB
+API.
+<li>Before building Berkeley DB, modify the generated include file db.h to itself
+include the problematical system include files.
+<li>Turn off Berkeley DB large-file support by specifying the
+<a href="../../ref/build_unix/conf.html#--disable-largefile">--disable-largefile</a> configuration option and rebuilding.
+</ol></p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/sco.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/sunos.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/sunos.html b/db/docs/ref/build_unix/sunos.html
index cecccaefb..469d0b5fe 100644
--- a/db/docs/ref/build_unix/sunos.html
+++ b/db/docs/ref/build_unix/sunos.html
@@ -1,30 +1,31 @@
-<!--$Id: sunos.so,v 11.4 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: sunos.so,v 11.6 2003/03/24 13:46:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: SunOS</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/solaris.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/ultrix.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/solaris.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/ultrix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>SunOS</h1>
-<p><ol>
-<p><li><b>I can't specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.</b>
+<h3 align=center>SunOS</h3>
+<ol>
+<p><li><b>I can't specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>.</b>
<p>The <b>shmget</b>(2) interfaces are not used on SunOS releases prior
-to 5.0, even though they apparently exist, as the distributed include
-files did not allow them to be compiled. For this reason, it will not be
-possible to specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag those versions of
-SunOS.
+to 5.0, even though they apparently exist, because the distributed
+include files did not allow them to be compiled. For this reason, it
+will not be possible to specify the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag those
+versions of SunOS.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/solaris.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/ultrix.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/solaris.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/ultrix.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/test.html b/db/docs/ref/build_unix/test.html
index 9ae398980..13151129d 100644
--- a/db/docs/ref/build_unix/test.html
+++ b/db/docs/ref/build_unix/test.html
@@ -1,49 +1,56 @@
-<!--$Id: test.so,v 10.19 2000/06/28 14:33:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: test.so,v 10.32 2003/11/08 19:17:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Running the test suite under UNIX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/shlib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/shlib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Running the test suite under UNIX</h1>
-<p>The Berkeley DB test suite is built if you specify --enable-test as an
-argument when configuring Berkeley DB.
+<h3 align=center>Running the test suite under UNIX</h3>
+<p>The Berkeley DB test suite is built if you specify
+<a href="../../ref/build_unix/conf.html#--enable-test">--enable-test</a>
+as an argument when configuring Berkeley DB. The test suite also
+requires that you configure and build the Tcl interface to the
+library.</p>
<p>Before running the tests for the first time, you may need to edit the
-<b>include.tcl</b> file in your build directory. The Berkeley DB
-configuration assumes you intend to use the version of the tclsh utility
-included in the Tcl installation with which Berkeley DB was configured to run
-the test suite, and further assumes that the test suite will be run with
-the libraries pre-built in the Berkeley DB build directory. If either of these
-assumptions are incorrect, you will need to edit the <b>include.tcl</b>
-file and change the line that reads:
-<p><blockquote><pre>set tclsh_path ...</pre></blockquote>
-<p>to correctly specify the full path to the version of tclsh with which you
-are going to run the test suite. You may also need to change the line
-that reads:
-<p><blockquote><pre>set test_path ...</pre></blockquote>
-<p>to correctly specify the path from the directory where you are running
-the test suite to the location of the Berkeley DB Tcl API library you built.
-It may not be necessary that this be a full path if you have configured
-your system's dynamic shared library mechanisms to search the directory
-where you built or installed the Tcl library.
-<p>All Berkeley DB tests are run from within <b>tclsh</b>. After starting tclsh,
-you must source the file <b>test.tcl</b> in the test directory. For
-example, if you built in the <b>build_unix</b> directory of the
-distribution, this would be done using the command:
-<p><blockquote><pre>% source ../test/test.tcl</pre></blockquote>
-<p>Once you have executed that command and the "%" prompt has returned
-without errors, you are ready to run tests in the test suite.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/shlib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>include.tcl</b> file in your build directory. The
+Berkeley DB configuration assumes that you intend to use the
+version of the tclsh utility included in the Tcl installation with which
+Berkeley DB was configured to run the test suite, and further
+assumes that the test suite will be run with the libraries prebuilt in
+the Berkeley DB build directory. If either of these assumptions
+are incorrect, you will need to edit the <b>include.tcl</b> file and
+change the following line to correctly specify the full path to the
+version of tclsh with which you are going to run the test suite:</p>
+<blockquote><pre>set tclsh_path ...</pre></blockquote>
+<p>You may also need to change the following line to correctly specify the
+path from the directory where you are running the test suite to the
+location of the Berkeley DB Tcl library you built:</p>
+<blockquote><pre>set test_path ...</pre></blockquote>
+<p>It may not be necessary that this be a full path if you have configured
+your system's shared library mechanisms to search the directory where
+you built or installed the Tcl library.</p>
+<p>All Berkeley DB tests are run from within <b>tclsh</b>. After
+starting tclsh, you must source the file <b>test.tcl</b> in the test
+directory. For example, if you built in the <b>build_unix</b>
+directory of the distribution, this would be done using the following
+command:</p>
+<blockquote><pre>% source ../test/test.tcl</pre></blockquote>
+<p>If no errors occur, you should get a "%" prompt.</p>
+<p>You are now ready to run tests in the test suite; see
+<a href="../../ref/test/run.html">Running the test suite</a> for more
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/shlib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_unix/ultrix.html b/db/docs/ref/build_unix/ultrix.html
index e71946c88..18cddf6cd 100644
--- a/db/docs/ref/build_unix/ultrix.html
+++ b/db/docs/ref/build_unix/ultrix.html
@@ -1,27 +1,28 @@
-<!--$Id: ultrix.so,v 11.4 2000/03/18 21:43:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: ultrix.so,v 11.6 2003/03/24 13:46:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Ultrix</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/sunos.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for UNIX/POSIX systems</dl></h3></td>
+<td align=right><a href="../build_unix/sunos.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Ultrix</h1>
-<p><ol>
+<h3 align=center>Ultrix</h3>
+<ol>
<p><li><b>Configuration complains that mmap(2) interfaces aren't being used.</b>
<p>The <b>mmap</b>(2) interfaces are not used on Ultrix, even though
-they exist, as they are known to not work correctly.
+they exist, because they are known to not work correctly.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/sunos.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/sunos.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_vxworks/faq.html b/db/docs/ref/build_vxworks/faq.html
index cea733d7f..f9cea42a2 100644
--- a/db/docs/ref/build_vxworks/faq.html
+++ b/db/docs/ref/build_vxworks/faq.html
@@ -1,85 +1,135 @@
-<!--$Id: faq.so,v 1.12 2000/12/21 18:33:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.29 2003/11/27 18:25:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: VxWorks FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for VxWorks systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_vxworks/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_vxworks/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade/version.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>VxWorks FAQ</h1>
-<p><ol>
+<h3 align=center>VxWorks FAQ</h3>
+<ol>
+<p><li><b>I get the error "Workspace open failed: This project workspace is an
+older format.", when trying to open the supplied workspace on Tornado 2.0
+under Windows.</b>
+<p>This error will occur if the files were extracted in a manner that adds
+a CR/LF to lines in the file. Make sure that you download the Berkeley DB
+".zip" version of the Berkeley DB distribution, and, when extracting the Berkeley DB
+sources, that you use an unzipper program that will not do any
+conversion.</p>
+<p><li><b>I sometimes see spurious output errors about temporary directories.</b>
+<p>These messages are coming from the <b>stat</b>(2) function call
+in VxWorks. Unlike other systems, there may not be a well known
+temporary directory on the target. Therefore, we highly recommend that
+all applications use <a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a> to
+specify a temporary directory for the application.</p>
+<p><li><b>How can I build Berkeley DB without using Tornado?</b>
+<p>The simplest way to build Berkeley DB without using Tornado is to configure
+Berkeley DB on a UNIX system, and then use the Makefile and include files
+generated by that configuration as the starting point for your build.
+The Makefile and include files are created during configuration, in the
+current directory, based on your configuration decisions (for example,
+debugging vs. non-debugging builds), so you'll need to configure the
+system for the way you want Berkeley DB to be built.</p>
+<p>Additionally, you'll need to account for the slight difference between
+the set of source files used in a UNIX build and the set used in a
+VxWorks build. You can use the following command to create a list of
+the Berkeley DB VxWorks files. The commands assume you are in the build_vxworks
+directory of the Berkeley DB distribution:</p>
+<blockquote><pre>% cat &gt; /tmp/files.sed
+s/&lt;BEGIN&gt; FILE_//
+s/_objects//
+^D
+% grep FILE_ BerkeleyDB.wpj | grep _objects | sed -f /tmp/files.sed &gt; /tmp/db.files</pre></blockquote>
+<p>You will then have a template Makefile and include files, and a list of
+VxWorks-specific source files. You will need to convert this Makefile
+and list of files into a form that is acceptable to your specific build
+environment.</p>
+<p><li><b>Does Berkeley DB use floating point registers?</b>
+<p>Yes, there are a few places in Berkeley DB where floating point computations
+are performed. As a result, all applications that call
+<i>taskSpawn</i> should specify the <b>VX_FP_TASK</b> option.</p>
<p><li><b>Can I run the test suite under VxWorks?</b>
<p>The test suite requires the Berkeley DB Tcl library. In turn, this library
-requires Tcl 8.1 or greater. In order to run the test suite, you would
-need to port Tcl 8.1 or greater to VxWorks. The Tcl shell included in
+requires Tcl 8.4 or greater. In order to run the test suite, you would
+need to port Tcl 8.4 or greater to VxWorks. The Tcl shell included in
<i>windsh</i> is not adequate for two reasons. First, it is based on
Tcl 8.0. Second, it does not include the necessary Tcl components for
-adding a Tcl extension.
+adding a Tcl extension.</p>
<p><li><b>Are all Berkeley DB features available for VxWorks?</b>
<p>All Berkeley DB features are available for VxWorks with the exception of the
<a href="../../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a> flag for <a href="../../api_c/db_open.html">DB-&gt;open</a>. The underlying mechanism
needed for that flag is not available consistently across different file
-systems for VxWorks.
-<p><li><b>Are there any constraints using particular file system drivers?</b>
-<p>There are constraints using the dosFs file systems with Berkeley DB. Namely,
-you must configure your dosFs file system to support long file names if
+systems for VxWorks.</p>
+<p><li><b>Are there any constraints using particular filesystem drivers?</b>
+<p>There are constraints using the dosFs filesystems with Berkeley DB. Namely,
+you must configure your dosFs filesystem to support long filenames if
you are using Berkeley DB logging in your application. The VxWorks' dosFs
-1.0 file system, by default, uses the old MS-DOS 8.3 file naming
-constraints, restricting to 8 character file names with a 3 character
+1.0 filesystem, by default, uses the old MS-DOS 8.3 file-naming
+constraints, restricting to 8 character filenames with a 3 character
extension. If you have configured with VxWorks' dosFs 2.0 you should
be compatible with Windows FAT32 filesystems which supports long
-filenames.
-<p><li><b>Are there any dependencies on particular file system drivers?</b>
-<p>There is one dependency on specifics of file system drivers in the port
+filenames.</p>
+<p><li><b>Are there any dependencies on particular filesystem drivers?</b>
+<p>There is one dependency on specifics of filesystem drivers in the port
of Berkeley DB to VxWorks. Berkeley DB synchronizes data using the FIOSYNC function
to ioctl() (another option would have been to use the FIOFLUSH function
instead). The FIOSYNC function was chosen because the NFS client driver,
nfsDrv, only supports it and doesn't support FIOFLUSH. All local file
-systems, as of VxWorks 5.4, support FIOSYNC with the exception of
+systems, as of VxWorks 5.4, support FIOSYNC -- with the exception of
rt11fsLib, which only supports FIOFLUSH. To use rt11fsLib, you will need
to modify the os/os_fsync.c file to use the FIOFLUSH function; note that
-rt11fsLib cannot work with NFS clients.
-<p><li><b>Are there any known file system problems?</b>
-<p>During the course of our internal testing we came across two problems
-with the dosFs 2.0 file system that warranted patches from Wind River Systems.
-You should ask Wind River Systems for the patches to these
-problems if you encounter them.
+rt11fsLib cannot work with NFS clients.</p>
+<p><li><b>Are there any known filesystem problems?</b>
+<p>During the course of our internal testing, we came across three problems
+with the dosFs 2.0 filesystem that warranted patches from Wind River Systems.
+We strongly recommend you upgrade to dosFs 2.2, <b>SPR 79795 (x86)</b>
+and <b>SPR 79569 (PPC)</b> which fixes all of these problems and
+many more. You should ask Wind River Systems for the patches to these
+problems if you encounter them and are unable to upgrade to dosFs 2.2.</p>
<p>The first problem is that files will seem to disappear. You should
look at <b>SPR 31480</b> in the Wind River Systems' Support pages for
-a more detailed description of this problem.
-<p>The second problem is a semaphore deadlock within the dosFs file system
+a more detailed description of this problem.</p>
+<p>The second problem is a semaphore deadlock within the dosFs filesystem
code. Looking at a stack trace via CrossWind, you will see two or more of
your application's tasks waiting in semaphore code within dosFs. The patch
for this problem is under <b>SPR 33221</b> at Wind River Systems.
-<p><li><b>Are there any file systems I cannot use?</b>
+There are several SPR numbers at Wind River Systems that refer to this
+particular problem.</p>
+<p>The third problem is that all tasks will hang on a dosFs semaphore. You should
+look at <b>SPR 72063</b> in the Wind River Systems' Support pages for
+a more detailed description of this problem.</p>
+<p><li><b>Are there any filesystems I cannot use?</b>
<p>The Target Server File System (TSFS) uses the netDrv driver. This driver
-does not support any ioctl that allows flushing to the disk and therefore
-cannot be used with Berkeley DB.
-<p><li><b>Why aren't the utility programs part of the project?</b>
-<p>The utility programs, in their Unix-style form, are not ported to VxWorks.
-The reasoning is the utility programs are essentially wrappers for the
-specific Berkeley DB interface they call. Their interface and generic model
-are not the appropriate paradigm for VxWorks. It is most likely that
-specific applications will want to spawn tasks that call the appropriate
-Berkeley DB function to perform the actions of some utility programs, using
-VxWorks native functions. For example, an application that spawns several
-tasks that all may operate on the same database would also want to spawn
-a task that calls <a href="../../api_c/lock_detect.html">lock_detect</a> for deadlock detection, but specific
-to the environment used for that application.
+does not support any ioctl that allows flushing to the disk, and therefore
+cannot be used with Berkeley DB.</p>
<p><li><b>What VxWorks primitives are used for mutual exclusion in Berkeley DB?</b>
<p>Mutexes inside of Berkeley DB use the basic binary semaphores in VxWorks. The
-mutexes are created using the FIFO queue type.
+mutexes are created using the FIFO queue type.</p>
+<p><li><b>What are the implications of VxWorks' mutex implementation
+using microkernel resources?</b>
+<p>On VxWorks, the semaphore primitives implementing mutexes consume system
+resources. Therefore, if an application unexpectedly fails, those
+resources could leak. Berkeley DB solves this problem by always allocating
+mutexes in the persistent shared memory regions. Then, if an
+application fails, running recovery or explicitly removing the database
+environment by calling the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method will allow Berkeley DB to
+release those previously held mutex resources. If an application
+specifies the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag (choosing not to use persistent
+shared memory), and then fails, mutexes allocated in that private memory
+may leak their underlying system resources. Therefore, the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag should be used with caution on VxWorks.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_vxworks/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_vxworks/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade/version.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_vxworks/intro.html b/db/docs/ref/build_vxworks/intro.html
index 593b8a1e6..76d479d57 100644
--- a/db/docs/ref/build_vxworks/intro.html
+++ b/db/docs/ref/build_vxworks/intro.html
@@ -1,86 +1,105 @@
-<!--$Id: intro.so,v 1.7 2000/08/10 17:54:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.21 2002/10/01 19:38:33 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building for VxWorks</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for VxWorks systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_win/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_win/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/introae.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building for VxWorks</h1>
+<h3 align=center>Building for VxWorks</h3>
<p>The build_vxworks directory in the Berkeley DB distribution contains a workspace
-and project files for Tornado 2.0.
-<p><table border=1 align=center>
+and project files for Tornado 2.0/VxWorks 5.4, Tornado 2.2/VxWorks 5.5
+and component files for Tornado 3.1/VxWorks AE. See
+<a href="../../ref/build_vxworks/introae.html">Building for VxWorks AE</a> for
+information about VxWorks AE.</p>
+<table border=1 align=center>
<tr><th>File</th><th>Description</th></tr>
-<tr> <td align=center>Berkeley DB.wsp</td> <td align=center>Berkeley DB Workspace file</td> </tr>
-<tr> <td align=center>Berkeley DB.wpj</td> <td align=center>Berkeley DB Project file</td> </tr>
-<tr> <td align=center>ex_*/*.wpj</td> <td align=center>Example programs project files</td> </tr>
+<tr> <td align=left>BerkeleyDB20.wsp</td> <td align=left>Berkeley DB Workspace file for Tornado 2.0</td> </tr>
+<tr> <td align=left>BerkeleyDB20.wpj</td> <td align=left>Berkeley DB Project file for Tornado 2.0</td> </tr>
+<tr> <td align=left>BerkeleyDB22.wsp</td> <td align=left>Berkeley DB Workspace file for Tornado 2.2</td> </tr>
+<tr> <td align=left>BerkeleyDB22.wpj</td> <td align=left>Berkeley DB Project file for Tornado 2.2</td> </tr>
+<tr> <td align=left>dbdemo/dbdemo20.wpj</td> <td align=left><a href="../../ref/build_vxworks/notes.html">Demo program</a> project file for Tornado 2.0</td> </tr>
+<tr> <td align=left>dbdemo/dbdemo22.wpj</td> <td align=left><a href="../../ref/build_vxworks/notes.html">Demo program</a> project file for Tornado 2.2</td> </tr>
+<tr> <td align=left>db_*/*20.wpj</td> <td align=left><a href="../../ref/build_vxworks/notes.html">Support utilities</a> project files for Tornado 2.0</td> </tr>
+<tr> <td align=left>db_*/*22.wpj</td> <td align=left><a href="../../ref/build_vxworks/notes.html">Support utilities</a> project files for Tornado 2.2</td> </tr>
</table>
-<h3>Building With Tornado 2.0</h3>
-<p>Open the workspace <b>Berkeley DB.wsp</b>. The list of projects
-in this workspace will be shown. These projects were created for
-the x86 BSP for VxWorks.
-<p>The remainder of this document assumes you already have a
-VxWorks target and a target server, both up and running.
-<p>First, you'll need to set the include directories.
-To do this, go to the <i>Builds</i> tab for the workspace.
-Open up <i>Berkeley DB Builds</i>. You will see several different
-builds, containing different configurations. All of the projects
-in the Berkeley DB workspace are created to be downloadable applications.
-<p><table border=1 align=center>
+<h3>Building With Tornado 2.0 or Tornado 2.2</h3>
+<p>Open the workspace <b>BerkeleyDB20.wsp</b> or <b>BerkeleyDB22.wsp</b>.
+The list of projects in this workspace will be shown. These projects
+were created for the x86 BSP for VxWorks.</p>
+<p>The remainder of this document assumes that you already have a
+VxWorks target and a target server, both up and running. It also
+assumes that your VxWorks image is configured properly for your
+needs. It also assumes that you
+have an acceptable file system already available. See
+<a href="../../ref/build_vxworks/faq.html">VxWorks FAQ</a> for more
+information about file system requirements.</p>
+<p>First, you need to set the include directories. To do this, go to the
+<i>Builds</i> tab for the workspace. Open up <i>Berkeley DB
+Builds</i>. You will see several different builds, containing different
+configurations. All of the projects in the Berkeley DB workspace are created
+to be downloadable applications.</p>
+<table border=1 align=center>
<tr><th>Build</th><th>Description</th></tr>
-<tr> <td align=left>PENTIUM_RPCdebug</td> <td align=left>x86 BSP with RPC and debugging</td> </tr>
-<tr> <td align=left>PENTIUM_RPCnodebug</td> <td align=left>x86 BSP with RPC no debugging</td> </tr>
-<tr> <td align=left>PENTIUM_debug</td> <td align=left>x86 BSP no RPC with debugging</td> </tr>
-<tr> <td align=left>PENTIUM_nodebug</td> <td align=left>x86 BSP no RPC no debugging</td> </tr>
-<tr> <td align=left>SIMSPARCSOLARISgnu</td> <td align=left>VxSim BSP no RPC with debugging</td> </tr>
+<tr> <td align=left>PENTIUM_debug</td> <td align=left>x86 BSP with debugging</td> </tr>
+<tr> <td align=left>PENTIUM_release</td> <td align=left>x86 BSP no debugging</td> </tr>
</table>
-<p>You will have to add a new build specification if you are using a
-different BSP or wish to customize further. For instance, if you have
-the Power PC (PPC) BSP, you will need to add a new build for the PPC tool
-chain. To do so, select the "Builds" tab and then select the Berkeley DB
-project name and right click. Choose the <i>New Build...</i>
-selection and create the new build target. For your new build target,
-you will need to decide if you want it configured to support RPC and
-whether it should be built for debugging. See the properties of the
-Pentium builds for how to configure for each case. After you have added
-this build you still need to correctly configure the include directories
-as described below.
-<p>Select the build you are interested in and right click. Choose the
-<i>Properties...</i> selection. At this point, a tabbed dialogue
+<p>You have to add a new build specification if you use a
+different BSP, want to add a build for the simulator or
+want to customize further. For instance, if you have the Power PC (PPC)
+BSP, you need to add a new build for the PPC tool chain. To do so,
+select the "Builds" tab, select the Berkeley DB project name, and right-click.
+Choose the <i>New Build...</i> selection and create the new build
+target. For your new build target, you need to decide whether
+it should be built for
+debugging. See the properties of the Pentium builds for ways to
+configure for each case. After you add this build you, you still need
+to configure correctly the include directories, as described in the
+sections that follow.</p>
+<p>If you are running with a different
+BSP, you should remove the build specifications that do not apply to
+your hardware. We recommend that you do this after you configure any
+new build specifications first. The Tornado tools will get confused if
+you have a PENTIUMgnu build specification for a PPC BSP,
+for instance.</p>
+<p>Select the build you are interested in, and right-click. Choose the
+<i>Properties...</i> selection. At this point, a tabbed dialog
should appear. In this new window, choose the <i>C/C++ compiler</i>
tab. In the edit box, you need to modify the full pathname of the
<i>build_vxworks</i> subdirectory of Berkeley DB, followed by the full
-pathname of the <i>include</i> subdirectory of Berkeley DB. Then click
-OK.
-<p>If the architecture for this new build has the most significant byte
-first, you will also need to edit the <i>db_config.h</i> file in
-the build directory and define <b>WORDS_BIGENDIAN</b>.
+pathname of Berkeley DB. Then, click OK.
+Note that some versions of Tornado (such as the version for Windows)
+do not correctly handle relative pathnames in the include paths.</p>
<p>To build and download the Berkeley DB downloadable application for the first time
-requires several steps:
-<p><ol>
-<p><li>Select the build you are interested in and right click.
-Choose the <i>Set ... as Active Build</i> selection.
-<p><li>Select the build you are interested in and right click.
-Choose the <i>Dependencies ...</i> selection.
-Run dependencies over all files in the Berkeley DB project.
-<p><li>Select the build you are interested in and right click.
-Choose the <i>Rebuild All (Berkeley DB.out)</i> selection.
-<p><li>Select the Berkeley DB project name and right click.
-Choose the <i>Download 'Berkeley DB.out'</i> selection.
+requires several steps: </p>
+<ol>
+<p><li>Select the build you are interested in, and right-click. Choose the
+<i>Set... as Active Build</i> selection.
+<p><li>Select the build you are interested in, and right-click. Choose the
+<i>Dependencies...</i> selection. Run dependencies over all files
+in the Berkeley DB project.
+<p><li>Select the build you are interested in, and right-click. Choose the
+<i>Rebuild All (Berkeley DB.out)</i> selection.
+<p><li>Select the Berkeley DB project name, and right-click. Choose the
+<i>Download "Berkeley DB.out"</i> selection.
</ol>
-<p>You will need to repeat this procedure for
-all builds you are interested in building, as well as for
-all of the example project builds you wish to run.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_win/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>Note that the output file listed about will really be listed as
+<i>BerkeleyDB20.out</i> or <i>BerkeleyDB22.out</i>
+depending on which version of Tornado you are running.
+You need to repeat this procedure for all builds you are interested in
+building, as well as for all of the utility project builds you want to
+run.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_win/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/introae.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_vxworks/introae.html b/db/docs/ref/build_vxworks/introae.html
index b0a8b8b70..f1ddb5ad9 100644
--- a/db/docs/ref/build_vxworks/introae.html
+++ b/db/docs/ref/build_vxworks/introae.html
@@ -1,29 +1,29 @@
-<!--Id: introae.so,v 1.6 2002/03/26 15:20:29 sue Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: introae.so,v 1.8 2002/10/01 19:38:33 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building for VxWorks AE</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for VxWorks systems</dl></h3></td>
-<td align=right><a href="../../ref/build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building for VxWorks AE</h1>
+<h3 align=center>Building for VxWorks AE</h3>
<p>The build_vxworks directory in the Berkeley DB distribution contains component
files for Tornado 3.1. The Berkeley DB distribution also contains workspace
-and project files for Tornado 2.0. See
+and project files for Tornado 2.X. See
<a href="../../ref/build_vxworks/intro.html">Building for VxWorks</a> for
-information about Tornado 2.0/VxWorks 5.4.
+information about Tornado 2.0/VxWorks 5.4 and Tornado 2.2/VxWorks 5.5.</p>
The VxWorks AE component files are all within subdirectories, and
all component files are named <i>component.wpj</i>.
-<p><table border=1 align=center>
+<table border=1 align=center>
<tr><th>File</th><th>Description</th></tr>
<tr> <td align=left>Berkeley DB/</td> <td align=left>Berkeley DB component directory</td> </tr>
<tr> <td align=left>dbdemo/dbdemo</td> <td align=left><a href="../../ref/build_vxworks/notes.html">Demo program</a> component directory</td> </tr>
@@ -32,7 +32,7 @@ all component files are named <i>component.wpj</i>.
<h3>Building With Tornado 3.1</h3>
<p>This document assumes you already have a workspace set up and you
want to add Berkeley DB as a component in that workspace. You may include
-this component in any domain deemed appropriate for your application.
+this component in any domain deemed appropriate for your application.</p>
<p>To add the Berkeley DB component into your workspace, right-click on the
"Components" and choose <i>Add existing...</i>. Enter
the pathname to your Berkeley DB distribution in the form
@@ -40,7 +40,7 @@ the pathname to your Berkeley DB distribution in the form
<b>/build_vxworks/Berkeley DB/</b>.
You will see <b>component.wpj</b> listed under the "Files".
Choose that filename and click "Ok". You will now have
-a Berkeley DB component in your workspace.
+a Berkeley DB component in your workspace.</p>
<p>There are essentially three options regarding protection
domains and the Berkeley DB component. The first option is to add
the Berkeley DB component directly into your application domain. You may
@@ -48,12 +48,12 @@ choose to do this by downloading Berkeley DB into that domain on your
target, or by adding the component to the domain itself and it will
be built when the application domain is built. The disadvantage
of this option is that no other application domain will have access to
-the Berkeley DB interfaces.
+the Berkeley DB interfaces. </p>
<p>The second option is to add the Berkeley DB component directly into your
<i>vxKernel</i> domain. The advantage is that any application
using the Berkeley DB interface would have access to them and no changes
would be necessary to the linkage path. The disadvantage is that
-all Berkeley DB code would run with system privileges.
+all Berkeley DB code would run with system privileges. </p>
<p>The third option is to add a Berkeley DB shared library domain to your
system. Then add or download the Berkeley DB component to that shared
library domain. The advantage is that all application domains
@@ -62,26 +62,26 @@ running in user mode. The disadvantages are that one must
remember to add the Berkeley DB shared library domain to the linkage
path of every application domain using Berkeley DB and that shared library
domains may not link against one another, a consideration if the
-application using Berkeley DB is itself a shared library.
+application using Berkeley DB is itself a shared library.</p>
<p>We believe the options outlined above are the most common methods
that the Berkeley DB component will be used. We believe that the third
option, creating a shared library domain, is the most useful option.
Ultimately, the responsibility of choosing the correct mechanism
for including the Berkeley DB component into the appropriate domain falls
-to the application developer.
+to the application developer.</p>
<p>The remainder of this document assumes that you already have a
VxWorks AE target and a target server, both up and running. It also
assumes that your VxWorks AE image is configured properly for your
needs. It also assumes that you
have an acceptable file system already available. See
<a href="../../ref/build_vxworks/faq.html">VxWorks FAQ</a> for more
-information about file system requirements.
+information about file system requirements.</p>
<p>To build Berkeley DB, first, you need to set the build selection. To do
this, right-click on the Berkeley DB component name and choose the
<i>Build settings...</i> selection. If you look at the
<i>Active Build Specification</i> drop down list, you will see
-several different builds, containing different configurations.
-<p><table border=1 align=center>
+several different builds, containing different configurations. </p>
+<table border=1 align=center>
<tr><th>Build</th><th>Description</th></tr>
<tr> <td align=left>PENTIUM2gnu.debug</td> <td align=left>PII BSP with debugging</td> </tr>
<tr> <td align=left>PENTIUM2gnu.release</td> <td align=left>PII BSP no debugging</td> </tr>
@@ -98,26 +98,25 @@ debugging. See the <i>C/C++ compiler</i> tab of the Pentium
builds for ways to
configure for each case. After you add this build, you still need
to configure the include directories correctly, as described in the
-sections that follow.
+sections that follow.</p>
<p>If you are running with a different
BSP, you should remove the build specifications that do not apply to
your hardware. We recommend that you do this after you configure any
-new build specifications first.
+new build specifications first. </p>
<p>If you are adding a new build you must set the include directories
correctly. After you have added the new build in the "Build Settings"
window, click on the <i>C/C++ compiler</i> tab.
In the edit box, you need to add the pathname of the
<i>build_vxworks</i> subdirectory of Berkeley DB, followed by the
-pathname of the <i>include</i> and <i>include_auto</i>
-subdirectories of Berkeley DB. You should add these directories
+pathname of Berkeley DB. You should add these directories
relative to the project directory, using the <b>PRJ_DIR</b>
macro, which is the Berkeley DB subdirectory of <i>build_vxworks</i>.
Then, click OK. The typical addition of include
-directories will look like:
-<p><blockquote><pre>-I$(PRJ_DIR)/.. -I$(PRJ_DIR)/../../include -I$(PRJ_DIR)/../../include_auto</pre></blockquote>
+directories will look like:</p>
+<blockquote><pre>-I$(PRJ_DIR)/.. -I$(PRJ_DIR)/../..</pre></blockquote>
<p>To build and download the Berkeley DB downloadable application for the first time
-requires several steps:
-<p><ol>
+requires several steps: </p>
+<ol>
<p><li>Select the build you are interested in using the <i>Build Settings</i>
window. Click OK when done.
<p><li>Select the Berkeley DB component and right-click. Choose the
@@ -127,9 +126,9 @@ window. Click OK when done.
</ol>
<p>You need to repeat this procedure for all builds you are interested in
building, as well as for all of the utility project builds you want to
-run.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+run.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_vxworks/notes.html b/db/docs/ref/build_vxworks/notes.html
index 83de25511..e30859af1 100644
--- a/db/docs/ref/build_vxworks/notes.html
+++ b/db/docs/ref/build_vxworks/notes.html
@@ -1,56 +1,69 @@
-<!--$Id: notes.so,v 1.6 2000/08/09 15:45:52 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: notes.so,v 1.18 2003/06/02 20:33:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: VxWorks notes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for VxWorks systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_vxworks/introae.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>VxWorks notes</h1>
-<p>Berkeley DB currently disallows the DB_TRUNC flag to <a href="../../api_c/db_open.html">DB-&gt;open</a>.
-The operations this flag represent are not fully supported under
-VxWorks 5.4.
-<p>The memory on VxWorks is always resident and fully shared among all tasks
-running on the target. For this reason, the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag
-is implied for any application that does not specify the
-<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag. Additionally, applications must use a
-segment ID to ensure different applications do not overwrite each other's
-database environments.
-See the <a href="../../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a> function for more information.
-Also, the <a href="../../api_c/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a> flag has no effect.
-<p>The <a href="../../api_c/db_sync.html">DB-&gt;sync</a> function is implemented using an ioctl call into the
-file system driver with the FIOSYNC command. Most, but not all, file
-system drivers support this call. Berkeley DB requires the use of a file system
-supporting FIOSYNC.
-<h3>Building and Running the Example Programs</h3>
-<p>Each example program can be downloaded and run by calling the function
-equivalent to the example's name. You may have to edit the pathname to
-the environments and database names in the examples' sources. The
-examples included are:
-<p><table border=1 align=center>
-<tr><th>Name</th><th>Description</th></tr>
-<tr> <td align=left>ex_access</td> <td align=left>Simple access method example.</td> </tr>
-<tr> <td align=left>ex_btrec</td> <td align=left>Example using Btree and record numbers.</td> </tr>
-<tr> <td align=left>ex_dbclient</td> <td align=left>Example running an RPC client. Takes a hostname as an argument, e.g.,
-<i>ex_dbclient "myhost"</i>.</td> </tr>
-<tr> <td align=left>ex_env</td> <td align=left>Example using an environment.</td> </tr>
-<tr> <td align=left>ex_mpool</td> <td align=left>Example using mpools.</td> </tr>
-<tr> <td align=left>ex_tpcb</td> <td align=left>Example using transactions. This example requires two invocations both
-taking an integer identifier as an argument. This identifier allows for
-multiple sets of databases to be used within the same environment. The
-first is to initialize the databases, e.g., <i>ex_tpcb_init 1</i>. The
-second is to run the program on those databases, e.g., <i>ex_tpcb 1</i>.</td> </tr>
-</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_vxworks/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>VxWorks notes</h3>
+<p>Berkeley DB currently disallows the DB_TRUNC flag to <a href="../../api_c/db_open.html">DB-&gt;open</a>. The
+operations that this flag represents are not fully supported under
+VxWorks.</p>
+<p>The <a href="../../api_c/db_sync.html">DB-&gt;sync</a> function is implemented using an ioctl call into
+the file system driver with the FIOSYNC command. Most, but not all file
+system drivers support this call. Berkeley DB requires the use of a file
+system supporting FIOSYNC.</p>
+<h3>Building and Running the Demo Program</h3>
+<p>The demo program should be built in a manner very similar to
+building Berkeley DB. If you want different or additional BSP
+build specifications you should add them by following the
+directions indicated in <a href="../../ref/build_vxworks/intro.html">Building
+with Tornado 2.0 or Tornado 2.2</a> or
+<a href="../../ref/build_vxworks/introae.html">Building with Tornado 3.1</a>.</p>
+<p>The demo program can be downloaded and run by calling the entry function
+<b>dbdemo</b> with the pathname of a database to use. The demo
+program will ask for some input keys. It creates a database and adds
+those keys into the database, using the reverse of the key as the data
+value. When complete you can either enter EOF (control-D) or
+<b>quit</b> and the demo program will display all of the key/data
+items in the database.</p>
+<h3>Building and Running the Utility Programs</h3>
+<p>The Berkeley DB <a href="../../utility/index.html">utility programs</a>
+can be downloaded and run by calling the
+function equivalent to the utility's name. The utility functions take
+a string containing all the supported arguments. The program will then
+decompose that string into a traditional argc/argv used internally.
+For example, to execute <a href="../../utility/db_stat.html">db_stat</a> on a database within an
+environment you would execute the following from the windsh prompt.
+Obviously you would change the pathname and database name to reflect
+your system.</p>
+<blockquote><pre>-&gt; db_stat "-h /tmp/myenvhome -d mydatabase.db"</pre></blockquote>
+<h3>Notes for VxWorks 5.4/5.5</h3>
+<p>The memory on VxWorks is always resident and fully shared among all
+tasks running on the target. For this reason, the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a>
+flag is implied for any application that does not specify the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag. Additionally, applications must use a segment
+ID to ensure that different applications do not overwrite each other's
+database environments. See the <a href="../../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a> method for more
+information. Also, the <a href="../../api_c/env_open.html#DB_LOCKDOWN">DB_LOCKDOWN</a> flag has no effect.</p>
+<h3>Notes for VxWorks AE 1.1</h3>
+<p>All tasks wanting to access a particular environment must run in the
+same application domain. The memory regions used by the environment are
+only accessible to the application domain. If more than one application
+domain attempts to access an environment simultaneously, the results are
+undefined but will likely lead to corruption.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_vxworks/introae.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_win/faq.html b/db/docs/ref/build_win/faq.html
index 2c185b6da..ba7410a98 100644
--- a/db/docs/ref/build_win/faq.html
+++ b/db/docs/ref/build_win/faq.html
@@ -1,49 +1,80 @@
-<!--$Id: faq.so,v 10.20 2000/06/28 15:43:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.30 2003/07/23 21:35:38 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Windows FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Windows systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_win/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_win/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Windows FAQ</h1>
-<p><ol>
+<h3 align=center>Windows FAQ</h3>
+<ol>
+<p><li><b>Why do I have db_load.dll - where is db_load.exe?</b>
+<p>Microsoft Visual C++ .NET has some bugs related to converting project
+files from VC++ 6.0 format and incorrectly converts the db_load project.
+For more information, see <a href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q321274&">Microsoft's article about this bug</a>.</p>
+<p>The workaround is simply to switch the <b>db_load</b> project back to
+generating an EXE after converting to VC++ .NET. To do this, right
+click on db_load -&gt; Properties and change "Configuration Type" from
+"Dynamic Library (.dll)" to "Application (.exe)".</p>
<p><li><b>My Win* C/C++ application crashes in the Berkeley DB library when Berkeley DB calls
fprintf (or some other standard C library function).</b>
<p>You should be using the "Debug Multithreaded DLL" compiler option in
your application when you link with the
-build_win32/Debug/libdb32d.lib library (this .lib file
-is actually a stub for libdb32d.DLL). To check this
-setting in Visual C++, choose the "Project/Settings" menu item, and
-under the tab marked "C/C++", select "Code Generation" and see the box
-marked "Use runtime library". This should be set to "Debug
-Multithreaded DLL". If your application is linked against the static
-library, build_win32/Debug/libdb32sd.lib, then you
-will want to set "Use runtime library" to "Debug Multithreaded".
+build_win32/Debug/libdb42d.lib library (this .lib file
+is actually a stub for libdb42d.DLL). To check this
+setting in Visual C++, choose the <i>Project/Settings</i> menu
+item and select <i>Code Generation</i> under the tab marked
+<i>C/C++</i>; and see the box marked <i>Use runtime
+library</i>. This should be set to <i>Debug Multithreaded DLL</i>.
+If your application is linked against the static library,
+build_win32/Debug/libdb42sd.lib; then, you will want
+to set <i>Use runtime library</i> to <i>Debug Multithreaded</i>.</p>
<p>Setting this option incorrectly can cause multiple versions of the
standard libraries to be linked into your application (one on behalf
of your application, and one on behalf of the Berkeley DB library). That
-violates assumptions made by these libraries, and traps can result.
+violates assumptions made by these libraries, and traps can result.</p>
<p><li><b>Why are the build options for DB_DLL marked as "Use MFC in a Shared DLL"?
Does Berkeley DB use MFC?</b>
-<p>Berkeley DB does not use MFC at all. It does however, call malloc and free and
-other facilities provided by the Microsoft C runtime library. We've found
-in our work that many applications and libraries are built assuming MFC,
-and specifying this for Berkeley DB solves various interoperation issues, and
-guarantees that the right runtime libraries are selected. Note that since
-we do not use MFC facilities, the MFC library DLL is not marked as a
-dependency for libdb.dll, but the appropriate Microsoft C runtime is.
+<p>Berkeley DB does not use MFC at all. It does however, call malloc and free
+and other facilities provided by the Microsoft C runtime library. We
+found in our work that many applications and libraries are built
+assuming MFC, and specifying this for Berkeley DB solves various
+interoperation issues, and guarantees that the right runtime libraries
+are selected. Note that because we do not use MFC facilities, the MFC
+library DLL is not marked as a dependency for libdb.dll, but the
+appropriate Microsoft C runtime is.</p>
+<p><li><b>How do I enable diagnostic mode on Windows?</b>
+<p>You will need to edit <b>build_win32/db_config.h</b> and change this line:
+<blockquote><pre>/* #undef HAVE_DIAGNOSTIC */</pre></blockquote>
+to this:
+<blockquote><pre>#define HAVE_DIAGNOSTIC 1</pre></blockquote></p>
+<p>Then add this line to the end of <b>build_win32/libdb.def</b>:
+<blockquote><pre>__db_assert @123</pre></blockquote>
+Change the '123' above to the last entry in the file plus one.</p>
+<a name="4"><!--meow--></a>
+<p><li><b>How can I build Berkeley DB for <a href="http://www.mingw.org">MinGW</a>?</b>
+<p>Follow the instructions in <a href="../../ref/build_unix/intro.html">Building for UNIX/POSIX</a>, and specify the --enable-mingw option to the
+configuration script. This configuration option currently only builds
+static versions of the library, it does not yet build a DLL version of
+the library.</p>
+<p><li><b>The test suite hangs under Windows.</b>
+<p>There are bugs in some versions of Tcl that may cause the test suite to
+hang on Windows (specifically, we've seen hangs on Windows/NT 4.0). If
+you want to run the test suite against a Debug version of Berkeley DB, you
+need to build a Debug version of Tcl, which requires building Tcl from
+source.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_win/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_vxworks/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_win/notes.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_vxworks/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_win/intro.html b/db/docs/ref/build_win/intro.html
index 6f5e0d4bb..bbc6f7387 100644
--- a/db/docs/ref/build_win/intro.html
+++ b/db/docs/ref/build_win/intro.html
@@ -1,143 +1,238 @@
<!--"@(#)intro.so 10.26 (Sleepycat) 11/18/99"-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building for Win32</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Win32 platforms</dl></h3></td>
-<td width="1%"><a href="../../ref/build_unix/ultrix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/test.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Windows systems</dl></h3></td>
+<td align=right><a href="../build_unix/ultrix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/small.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building for Win32</h1>
-<p>The build_win32 directory in the Berkeley DB distribution contains project files
-for both MSVC 5.0 and 6.0:
-<p><table border=1 align=center>
+<h3 align=center>Building for Win32</h3>
+<p>The <b>build_win32</b> directory in the Berkeley DB distribution contains
+project files for Microsoft Visual C++:</p>
+<table border=1 align=center>
<tr><th>Project File</th><th>Description</th></tr>
-<tr> <td align=center>Berkeley_DB.dsw</td> <td align=center>Visual C++ 5.0 project (compatible with 6.0)</td> </tr>
-<tr> <td align=center>*.dsp</td> <td align=center>Visual C++ 5.0 subprojects (compatible with 6.0
-)</td> </tr>
+<tr> <td align=center>Berkeley_DB.dsw</td> <td align=center>Visual C++ 6.0 workspace</td> </tr>
+<tr> <td align=center>*.dsp</td> <td align=center>Visual C++ 6.0 projects</td> </tr>
</table>
<p>These project files can be used to build Berkeley DB for any Win32 platform:
-Windows 2000, Windows NT, Windows 98 and Windows 95.
-<h3>Building With Visual C++ 6.0</h3>
-<p>Open the file <b>Berkeley_DB.dsw</b>. You will be told that the project
-was generated by a previous version of Developer Studio, and asked if you
-want to convert the project. Select Yes, and all projects will be
-converted. Then continue on with the instructions for building with
-Visual C++ 5.0.
-<p>Note that when you build a release version, you may receive a warning
-about an unknown compiler option <i>/Ob2</i>. This is apparently a
-flaw in the project conversion for Visual C++ and can be ignored.
+Windows/XP, Windows/2000, Windows/NT, Windows/98 and Windows/95.</p>
+<h3>Building Berkeley DB with Visual C++ .NET</h3>
+<ol>
+<p><li>Choose <i>File -&gt; Open Solution</i>. Look in the
+<b>build_win32</b> directory for compatible workspace files, select
+<b>Berkeley_DB.dsw</b>, and press Open.
+<p><li>You will be prompted to convert the project files to Visual C++ 7.0
+project format. Select "Yes to All".
+<p><li>Set your include directories. Choose <i>Tools -&gt; Options
+-&gt; Projects -&gt; VC++ Directories</i>. Under the "Show
+directories for" pulldown, select "Include files". Add the full
+pathnames for the <b>build_win32</b> subdirectory of Berkeley DB.
+Then click OK.
+<p><li>Choose the project configuration from the drop-down menu on the .NET
+tool bar (Debug, Release, Debug Static or Release Static).
+<p><li>To build, right-click on build_all and select Build. The results of
+your build will be placed in a subdirectory of <b>build_win32</b>
+named after the configuration you chose (for examples,
+<b>build_win32/Release</b> or <b>build_win32/Debug</b>).
+</ol>
+<h3>Building Berkeley DB with Visual C++ 6.0</h3>
+<ol>
+<p><li>Choose <i>File -&gt; Open Workspace</i>. Look in the
+<b>build_win32</b> directory for Workspaces, select
+<b>Berkeley_DB.dsw</b>, and press Open.
+<p><li>Set your include directories. <i>Choose Tools -&gt; Options
+-&gt; Directories</i>. Under the "Show directories for" pulldown,
+select "Include files". Add the full pathnames for the
+<b>build_win32</b> subdirectory of Berkeley DB. Then click OK.
+<p><li>Choose the desired project configuration by going to <i>Build
+-&gt; Set Active Configuration</i> and select the appropriate option
+to the build_all project (Debug, Release, Debug Static or Release
+Static). Then click OK.
+<p><li>To build, select <i>Build -&gt; Build build_all.exe</i>. The
+results of your build will be placed in a subdirectory of
+<b>build_win32</b> named after the configuration you chose (for
+examples, <b>build_win32/Release</b> or
+<b>build_win32/Debug</b>).
+</ol>
+<p>When building your application, you should normally use compile
+options "Debug Multithreaded DLL" and link against
+<b>build_win32/Debug/libdb42d.lib</b>. If you
+want to link against a static (non-DLL) version of the library, use
+the "Debug Multithreaded" compile options and link against
+<b>build_win32/Debug_static/libdb42sd.lib</b>.
+You can also build using a release version of the libraries and tools,
+which will be placed in
+<b>build_win32/Release/libdb42.lib</b>. The
+static version will be in
+<b>build_win32/Release_static/libdb42s.lib</b>.
+You will also need to add the <b>build_win32</b> directory to the
+list of include directories of your application's project.</p>
<p>Each release of Berkeley DB is built and tested with this procedure using
-Microsoft Visual C++ 6.0, Standard Edition.
-<h3>Building With Visual C++ 5.0</h3>
-<p>Open the file <b>Berkeley_DB.dsw</b>. This workspace includes a number
-of subprojects needed to build Berkeley DB.
-<p>First, you'll need to set the include directories. To do this, select
-<i>Options...</i> from the <i>Tools</i> pull-down menu. At this
-point, a tabbed dialogue should appear. In this new window, choose the
-<i>Directories</i> tab. For the <i>Platform</i>, select
-<i>Win32</i> and for <i>Show directories for</i> select
-<i>Include files</i>. Below these options in the list of directories,
-you should add two directories: the full pathname of the
-<i>build_win32</i> subdirectory of Berkeley DB, followed by the full
-pathname of the <i>include</i> subdirectory of Berkeley DB. Then click OK.
-<p>Then, select <i>Active Project Configuration</i> under the
-<i>Build</i> pull-down menu. For a debug version of the libraries,
-tools and examples, select <i>db_buildall - Win32 Debug</i>.
-Results from this build are put into <b>build_win32/Debug</b>.
-For a release version, select <i>db_buildall - Win32 Release</i>;
-results are put into <b>build_win32/Release</b>.
-For a debug version that has all tools and examples built with
-static libraries, select <i>db_buildall - Win32 Debug Static</i>;
-results are put into <b>build_win32/Debug_static</b>.
-For a release version of the same,
-select <i>db_buildall - Win32 Release Static</i>;
-results are put into <b>build_win32/Release_static</b>.
-Finally, to build, select <i>Build db_buildall.exe</i> under the
-<i>Build</i> pull-down menu.
-<p>When building your application, you should normally use compile options
-"debug multithreaded dll" and link against
-<b>build_win32/Debug/libdb32d.lib</b>. If you want
-to link against a static (non-DLL) version of the library, use the
-"debug multithreaded" compile options and link against
-<b>build_win32/Debug_static/libdb32sd.lib</b>. You can
-also build using a release version of the libraries and tools, which will be
-placed in <b>build_win32/Release/libdb32.lib</b>.
-The static version will be in
-<b>build_win32/Release_static/libdb32s.lib</b>.
-<p>Each release of Berkeley DB is maintained, built and tested using Microsoft
-Visual C++ 5.0 and 6.0.
-<h3>Including the C++ API</h3>
-<p>C++ support is built automatically on Win32.
-<h3>Including the Java API</h3>
+Microsoft Visual C++ 6.0, Standard Version and Microsoft Visual C++
+.NET, Standard Version.</p>
+<h3>Building Berkeley DB with Cygwin</h3>
+<p>To build Berkeley DB with Cygwin, follow the instructions in
+<a href="../../ref/build_unix/intro.html">Building for UNIX</a>.</p>
+<h3>Building the C++ API</h3>
+<p>C++ support is built automatically on Win32.</p>
+<h3>Building the Java API</h3>
<p>Java support is not built automatically. The following instructions
-assume you have installed the Sun Java Development Kit in
-<b>d:/java</b>. Of course, if you've installed elsewhere, or have
+assume that you have installed the Sun Java Development Kit in
+<b>d:/java</b>. Of course, if you installed elsewhere or have
different Java software, you will need to adjust the pathnames
-accordingly. First, use the instructions above for Visual C++ 5.0 or 6.0
-to open the Tools/Options tabbed dialog for adding include directories.
-In addition to the directories specified above, add
-<b>d:/java/include</b> and <b>d:/java/include/win32</b>. These are
-the directories needed when including <b>jni.h</b>. Now, before
-clicking OK, under <i>Show directories for</i>, choose
-<i>Executable files</i>. Add <b>d:/java/bin</b>. That directory
-is needed to find javac. Now select OK.
-<p>Select <i>Active Project Configuration</i> under the
-<i>Build</i> pull-down menu. Choose <i>db_java - Win32
-Release</i>. To build, select <i>Build
-libdb_java32.dll</i> under the <i>Build</i> pull-down
-menu. This builds the Java support library for Berkeley DB and compiles all
-the java files, placing the class files in the <b>java/classes</b>
-subdirectory of Berkeley DB. Set your environment variable CLASSPATH to
-include this directory, your environment variable PATH to include the
-<b>build_win32/Release</b> subdirectory, and as a test, try running
-the command:
-<p><blockquote><pre>java com.sleepycat.examples.AccessExample</pre></blockquote>
-<h3>Including the Tcl API</h3>
+accordingly.</p>
+<h4>Building Java with Visual C++ .NET</h4>
+<ol>
+<p><li>Set your include directories. Choose <i>Tools -&gt; Options
+-&gt; Projects -&gt; VC++ Directories</i>. Under the "Show
+directories for" pulldown, select "Include files". Add the full
+pathnames for the <b>java/include</b> and
+<b>java/include/win32</b> directories. Then click OK. These are
+the directories needed when including jni.h.
+<p><li>Set the executable files directories. Choose <i>Tools -&gt;
+Options -&gt; Projects -&gt; VC++ Directories</i>. Under the "Show
+directories for" pulldown, select "Executable files". Add the full
+pathname for the <b>java/bin</b> directory, then click OK. This is
+the directory needed to find javac.
+<p><li>Set the build type to Release or Debug in the drop-down on the .NET
+tool bar.
+<p><li>To build, right-click on db_java and select Build. This builds the
+Java support library for Berkeley DB and compiles all the java files,
+placing the resulting <b>db.jar</b> and <b>dbexamples.jar</b>
+files in the <b>build_win32/Release</b> or
+<b>build_win32/Debug</b> subdirectory of Berkeley DB.
+</ol>
+<h4>Building Java with Visual C++ 6.0</h4>
+<ol>
+<p><li>Set the include directories. Choose <i>Tools -&gt; Options
+-&gt; Directories</i>. Under the "Show directories for" pulldown,
+select "Include files". Add the full pathnames for the
+<b>java/include</b> and <b>java/include/win32</b> directories.
+These are the directories needed when including <b>jni.h</b>.
+<p><li>Set the executable files directories. Choose <i>Tools -&gt;
+Options -&gt; Directories</i>. Under the "Show directories for"
+pulldown, select "Executable files". Add the full pathname for the
+<b>java/bin</b> directory. This is the directory needed to find
+javac.
+<p><li>Go to <i>Build -&gt; Set Active Configuration</i> and select
+either the Debug or Release version of the db_java project. Then
+press OK.
+<p><li>To build, select <i>Build -&gt; Build
+libdb_java42.dll</i>. This builds the Java support
+library for Berkeley DB and compiles all the java files, placing the
+resulting <b>db.jar</b> and <b>dbexamples.jar</b> files in the
+<b>build_win32/Release</b> or <b>build_win32/Debug</b>
+subdirectory of Berkeley DB.
+</ol>
+<p>To run Java code, set your environment variable <b>CLASSPATH</b>
+to include the full pathname of these jar files, and your environment
+variable <b>PATH</b> to include the <b>build_win32/Release</b>
+subdirectory. On Windows, remember that files or directories in the
+<b>CLASSPATH</b> and <b>PATH</b> variables must be separated
+by semicolons (unlike UNIX). Then, try running the following command
+as a test:</p>
+<blockquote><pre>java com.sleepycat.examples.db.AccessExample</pre></blockquote>
+<p>If you want to run Java code using a Debug build, substitute 'Debug'
+for 'Release' in the instructions above. Make sure you use the Debug
+JAR file with the Debug DLL and the Release JAR with the Release
+DLL.</p>
+<h3>Building the Tcl API</h3>
<p>Tcl support is not built automatically. See
-<a href="../../ref/tcl/intro.html">Loading Berkeley DB with Tcl</a> for information
-on sites from which you can download Tcl and which Tcl versions are
-compatible with Berkeley DB.
+<a href="../../ref/tcl/intro.html">Loading Berkeley DB with Tcl</a> for
+information on sites from which you can download Tcl and which Tcl
+versions are compatible with Berkeley DB. These notes assume that Tcl is
+installed as <b>d:/tcl</b>, but you can change that if you want.</p>
<p>The Tcl library must be built as the same build type as the Berkeley DB
-library (both Release or both Debug). We have found that the binary
-release of Tcl can be used with the Release configuration of Berkeley DB, but
-for the Debug configuration, you will need to need to build Tcl from
-sources. Before building Tcl, you will need to modify its makefile to
-make sure you are building a debug version, including thread support.
-This is because the set of DLLs linked into the Tcl executable must
-match the corresponding set of DLLs used by Berkeley DB.
-<p>These notes assume Tcl is installed as <b>d:/tcl</b>, but you can
-change that if you wish. If you run using a different version of Tcl
-than the one currently being used by Sleepycat Software, you will need
-to change the name of the Tcl library used in the build (e.g.,
-tcl83d.lib) to the appropriate name. See
-Projects-&gt;Settings-&gt;Link in the db_tcl subproject.
-<p>Use the instructions above for
-Visual C++ 5.0 or 6.0 to open the <i>Tools/Options</i> tabbed dialog
-for adding include directories. In addition to the directories specified
-above, add <b>d:/tcl/include</b>. This is the directory that contains
-<b>tcl.h</b>.
-Then, in that same dialog, show directories for "Library Files".
-Add <b>d:/tcl/lib</b> (or whatever directory contains
-<b>tcl83d.lib</b> in your distribution) to the list. Now select OK.
-<p>Select <i>Active Project Configuration</i> under the
-<i>Build</i> pull-down menu. Choose <i>db_tcl - Win32
-Release</i>. To build, select <i>Build
-libdb_tcl32.dll</i> under the <i>Build</i> pull-down
-menu. This builds the Tcl support library for Berkeley DB, placing the result
-into <b>build_win32/Release/libdb_tcl32.dll</b>.
-Selecting an Active Configuration of <i>db_tcl - Win32 Debug</i>
-will build a debug version, placing the result into
-<b>build_win32/Debug/libdb_tcl32d.dll</b>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_unix/ultrix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/test.html"><img src="../../images/next.gif" alt="Next"></a>
+library (both Release or both Debug). We found that the binary
+release of Tcl can be used with the Release configuration of Berkeley DB,
+but you will need to build Tcl from sources for the Debug
+configuration. Before building Tcl, you will need to modify its
+makefile to make sure that you are building a debug version, including
+thread support. This is because the set of DLLs linked into the Tcl
+executable must match the corresponding set of DLLs used by Berkeley DB.</p>
+<h4>Building Tcl with Visual C++ .NET</h4>
+<ol>
+<p><li>Set the include directories. Choose <i>Tools -&gt; Options
+-&gt; Projects -&gt; VC++ Directories</i>. Under the "Show
+directories for" pulldown, select "Include files". Add the full
+pathname for <b>tcl/include</b>, then click OK. This is the
+directory that contains <b>tcl.h</b>.
+<p><li>Set the library files directory. Choose <i>Tools -&gt;
+Options -&gt; Projects -&gt; VC++ Directories</i>. Under the "Show
+directories for" pulldown, select "Library files". Add the full
+pathname for the <b>tcl/lib</b> directory, then click OK. This is
+the directory needed to find
+<b>tcl84g.lib</b> (or whatever the
+library is named in your distribution).
+<p><li>Set the build type to Release or Debug in the drop-down on the .NET
+tool bar.
+<p><li>To build, right-click on db_tcl and select Build. This builds the Tcl
+support library for Berkeley DB, placing the result into
+<b>build_win32/Debug/libdb_tcl4M4MINORd.dll</b> or
+<b>build_win32/Release/libdb_tcl42.dll</b>.
+</ol>
+<p>If you use a version different from Tcl 8.4.x you will
+need to change the name of the Tcl library used in the build (for
+example, <b>tcl84g.lib</b>) to the
+appropriate name. To do this, right click on <i>db_tcl</i>, go to
+<i>Properties -&gt; Linker -&gt; Input -&gt; Additional
+dependencies</i> and change
+<b>tcl84g.lib</b> to match the Tcl
+version you are using.</p>
+<h4>Building Tcl with Visual C++ 6.0</h4>
+<ol>
+<p><li>Set the include directories. Choose <i>Tools -&gt; Options
+-&gt; Directories</i>. Under the "Show directories for" pulldown,
+select "Include files". Add the full pathname for
+<b>tcl/include</b>, then click OK. This is the directory that
+contains <b>tcl.h</b>.
+<p><li>Set the library files directory. Choose <i>Tools -&gt;
+Options -&gt; Directories</i>. Under the "Show directories for"
+pulldown, select "Library files". Add the full pathname for the
+<b>tcl/lib</b> directory, then click OK. This is the directory
+needed to find <b>tcl84g.lib</b> (or
+whatever the library is named in your distribution).
+<p><li>Go to <i>Build -&gt; Set Active Configuration</i> and select
+either the Debug or Release version of the db_tcl project. Then press
+OK.
+<p><li>To build, select <i>Build -&gt; Build
+libdb_tcl42.dll</i>. This builds the Tcl support
+library for Berkeley DB, placing the result into
+<b>build_win32/Debug/libdb_tcl4M4MINORd.dll</b> or
+<b>build_win32/Release/libdb_tcl42.dll</b>.
+</ol>
+<p>If you use a version different from Tcl 8.4.x you will
+need to change the name of the Tcl library used in the build (for
+example, <b>tcl84g.lib</b>) to the
+appropriate name. To do this, right click on <i>db_tcl</i>, go to
+<i>Settings -&gt; Link -&gt; Object / library modules</i>
+and change <b>tcl84g.lib</b> to match the
+Tcl version you are using.</p>
+<h3>Distributing DLLs</h3>
+<p>When distributing applications linked against the DLL (not static)
+version of the library, the DLL files you need will be found in the
+<b>build_win32/Release</b> subdirectory, or
+<b>build_win32/Debug</b> if you distribute a debug version. You may
+also need to redistribute DLL files needed for the compiler's runtime.
+For Visual C++ 6.0, these files are <b>msvcrt.dll</b> and
+<b>msvcp60.dll</b> if you built with a Release configuration, or
+<b>msvcrtd.dll</b> and <b>msvcp60d.dll</b> if you are using a
+Debug configuration. Generally, these runtime DLL files can be
+installed in the same directory that will contain your installed Berkeley DB
+DLLs. This directory may need to be added to your System PATH
+environment variable. Check your compiler's license and documentation
+for specifics on redistributing runtime DLLs.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_unix/ultrix.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/small.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_win/notes.html b/db/docs/ref/build_win/notes.html
index 483b101ec..9feb6cec9 100644
--- a/db/docs/ref/build_win/notes.html
+++ b/db/docs/ref/build_win/notes.html
@@ -1,56 +1,62 @@
-<!--$Id: notes.so,v 10.17 2000/11/02 16:46:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: notes.so,v 10.25 2003/10/18 19:15:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Windows notes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Windows systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_win/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_win/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Windows notes</h1>
-<ul type=disc>
-<li>Various Berkeley DB interfaces take a <b>mode</b> argument, intended to specify
-the underlying file permissions for created files. Berkeley DB currently ignores
-this argument on Windows systems.
+<h3 align=center>Windows notes</h3>
+<ol>
+<p><li>Various Berkeley DB methods take a <b>mode</b> argument, which is intended
+to specify the underlying file permissions for created files. Berkeley DB
+currently ignores this argument on Windows systems.
<p>It would be possible to construct a set of security attributes to pass to
<b>CreateFile</b> that accurately represents the mode. In the worst
-case, this would involve looking up user and all group names and creating
+case, this would involve looking up user and all group names, and creating
an entry for each. Alternatively, we could call the <b>_chmod</b>
(partial emulation) function after file creation, although this leaves us
-with an obvious race.
+with an obvious race.</p>
<p>Practically speaking, however, these efforts would be largely meaningless
-on FAT, the most common file system, which only has a "readable" and
-"writeable" flag, applying to all users.
-<li>When using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag, Berkeley DB shared regions are
-created without ACLs, which means that the regions are only accessible
-to a single user. If wider sharing is appropriate (e.g., both user
-applications and Windows/NT service applications need to access the
-Berkeley DB regions), the Berkeley DB code will need to be modified to create the
-shared regions with the correct ACLs. Alternatively, by not specifying
-the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag, file-system backed regions will be
-created instead, and the permissions on those files may be directly
-specified through the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> interface.
-<li>On Windows/9X, files opened by multiple processes do not share data
+on a FAT file system, which only has a "readable" and "writable" flag,
+applying to all users.</p>
+<p><li>On Windows/9X, files opened by multiple processes do not share data
correctly. For this reason, the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag is implied
for any application that does not specify the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag,
-causing the system paging file to be used for sharing data. However,
-paging file memory is freed on last close, implying that multiple
-processes sharing an environment must arrange for at least one process
-to always have the environment open, or, alternatively, that any process
-joining the environment be prepared to re-create it. If a shared
-environment is closed by all processes, a subsequent open without
-specifying the <a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a> flag will result in the return of a
-system EAGAIN error code.
-</ul>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_win/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+causing the system paging file to be used for sharing data.
+<p><li>On all Windows platforms, system paging file memory is freed on last
+close. For this reason, multiple processes sharing a database
+environment created using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag must arrange
+for at least one process to always have the environment open, or
+alternatively that any process joining the environment be prepared to
+re-create it.
+<p>If a system memory environment is closed by all processes, subsequent
+attempts to open it will return an error. To successfully open a
+transactional environment in this state, recovery must be run by the
+next process to open the environment. For non-transactional
+environments, applications must first remove the environment and then
+reopen with the <a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a> flag.</p>
+<p><li>When using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag, Berkeley DB shared regions are
+created without ACLs, which means that the regions are only accessible
+to a single user. If wider sharing is appropriate (for example, both
+user applications and Windows/NT service applications need to access
+the Berkeley DB regions), the Berkeley DB code will need to be modified to create
+the shared regions with the correct ACLs. Alternatively, by not
+specifying the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag, filesystem-backed regions
+will be created instead, and the permissions on those files may be
+directly specified through the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method.
+</ol>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_win/test.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/build_win/small.html b/db/docs/ref/build_win/small.html
new file mode 100644
index 000000000..fa2ffd47b
--- /dev/null
+++ b/db/docs/ref/build_win/small.html
@@ -0,0 +1,45 @@
+<!--$Id: small.so,v 10.1 2003/03/24 10:35:24 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Building a small memory footprint library on Windows</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Windows systems</dl></h3></td>
+<td align=right><a href="../build_win/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/test.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Building a small memory footprint library on Windows</h3>
+<p>For applications that don't require all of the functionality of the full
+Berkeley DB library, an option is provided to build a static library with
+certain functionality disabled. In particular, cryptography, hash and
+queue access methods, replication and verification are all turned off.
+This can reduce the memory footprint of Berkeley DB significantly.</p>
+<p>In general on Win32 systems, you will want to evaluate the size of the
+final application, not the library build. The Microsoft LIB file format
+(like UNIX archives) includes copies of all of the object files and
+additional information. The linker rearranges symbols and strips out
+the overhead, and the resulting application is much smaller than the
+library. There is also a Visual C++ optimization to "Minimize size"
+that will reduce the library size by a few percent.</p>
+<p>A Visual C++ project file called <b>db_small.dsp</b> is provided for
+this small memory configuration, but is not included in the workspace
+by default. To build, open Visual Studio and go to the <i>File</i>
+menu. Choose <i>Open Workspace</i>, change <i>Files of Type</i>
+to <i>Projects (.dsp)</i> and open <i>db_small.dsp</i>.</p>
+<p>The project supports two configurations - <i>Release Static</i> and
+<i>Debug Static</i>. During a build (F7), libraries are created
+in <b>Release_small</b> or <b>Debug_small</b>, respectively.</p>
+<p>For assistance in further reducing the size of the Berkeley DB library, or in
+building small memory footprint libraries on other systems, please contact
+Sleepycat Software support.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_win/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/test.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/build_win/test.html b/db/docs/ref/build_win/test.html
index e3230ca84..de817f9c6 100644
--- a/db/docs/ref/build_win/test.html
+++ b/db/docs/ref/build_win/test.html
@@ -1,77 +1,77 @@
-<!--$Id: test.so,v 10.29 2001/01/17 14:42:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: test.so,v 10.43 2003/11/27 18:25:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Running the test suite under Windows</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Building Berkeley DB for Windows systems</dl></h3></td>
-<td width="1%"><a href="../../ref/build_win/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_win/small.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Running the test suite under Windows</h1>
-<p>To build the test suite on Win32 platforms you will need to configure
-Tcl support. You will also need sufficient main memory and disk.
-Something around 100MB of disk will be sufficient. For memory, 32MB is
-too small, we recommend at least 64MB.
+<h3 align=center>Running the test suite under Windows</h3>
+<p>To build the test suite on Win32 platforms, you will need to configure
+Tcl support. You will also need sufficient main memory (at least 64MB),
+and disk (around 250MB of disk will be sufficient).</p>
<h3>Building the software needed by the tests</h3>
-<p>There exist bugs in some versions of Tcl that may cause the test suite
-to hang on Windows/NT 4.0. Tcl version 8.4 (currently available as an
-alpha release) has fixed the problem, or there are patches available
-for Tcl 8.3.2 (see bug #119188 in the Tcl SourceForge database). Note
-that if you want to run the test suite against a Debug version of Berkeley DB,
-you need to build a debug version of Tcl. This involves building Tcl
-from its source.
-<p>To build, perform the following steps. Note that steps #1, #4 and #5
-are part of the normal build process for building Berkeley DB; #2, #3 are part
-of including the Tcl API.
-<p><ol>
-<p><li>Open the <b>build_win32/Berkeley_DB.dsw</b> workspace.
-<p><li>Add the pathname for the Tcl include subdirectory to your
-include path. To do this, under the "Tools" menu item, select "Options".
-In the dialog, select the "Directories" tab, and choose directories
-for "Include Files". Add <b>d:/tcl/include</b> (or whatever directory
-contains <b>tcl.h</b> in your distribution) to the list.
-<p><li>Add the pathname for the Tcl library subdirectory to your
-library path. To do this, under the "Tools" menu item, select "Options".
-In the dialog, select the "Directories" tab, and choose directories for
-"Library Files". Add <b>d:/tcl/lib</b> (or whatever directory contains
-<b>tcl83d.lib</b> in your distribution) to the list.
-<p><li>Set the active configuration to db_test -- Debug. To set an
-active configuration, under the "Build" menu item in the IDE, select "Set
-Active Configuration". Then choose "db_test -- Debug".
-<p><li>Build. The IDE menu for this is called "build dbkill.exe",
-even though dbkill is just one of the things that is built.
-This step builds the base Berkeley DB .dll, tcl support,
-and various tools that are needed by the test suite.
+<p>To build for testing, perform the following steps:</p>
+<ol>
+<p><li>The test suite must be run against a Debug version of
+Berkeley DB, so you will need a Debug version of the Tcl
+libraries. This involves building Tcl from its source. See the Tcl
+sources for more information.
+<p><li>Open the Berkeley DB workspace.
+<p><li>Build the Tcl API (see
+<a href="../../ref/build_win/intro.html">Building the Tcl API</a> for details).
+<p><li>In Visual C++ 6.0, set the active configuration to db_test --
+Debug. To set an active configuration, under the <i>Build</i> menu,
+select <i>Set Active Configuration</i>. Then choose
+<i>db_test -- Debug</i>. In Visual C++ .NET, just make sure
+<i>Debug</i> is selected in the drop down list on the tool bar.
+<p><li>Build. In Visual C++ 6.0, the IDE menu item for this is
+called "build dbkill.exe", even though dbkill is just one of the things
+that is built. In Visual C++ .NET, right-click on the
+<i>db_test</i> project and select <i>Build</i>. This step makes
+sure that the base Berkeley DB .dll, tcl support, and various tools that
+are needed by the test suite are all built.
</ol>
<h3>Running the test suite under Windows</h3>
<p>Before running the tests for the first time, you must edit the file
<b>include.tcl</b> in your build directory and change the line
-that reads:
-<p><blockquote><pre>set tclsh_path SET_YOUR_TCLSH_PATH</pre></blockquote>
-<p>You will want to use the location of the <b>tclsh</b> program. For
-example, if Tcl is installed as <b>d:/tcl</b>, this line should be:
-<p><blockquote><pre>set tclsh_path d:/tcl/bin/tclsh83d.exe</pre></blockquote>
-<p>Then, in a shell of your choice enter the following commands:
-<p><ol>
+that reads:</p>
+<blockquote><pre>set tclsh_path SET_YOUR_TCLSH_PATH</pre></blockquote>
+<p>You will want to use the location of the <b>tclsh</b> program (be
+sure to include the name of the executable). For example, if Tcl is
+installed in <b>d:/tcl</b>, this line should be the following:</p>
+<blockquote><pre>set tclsh_path d:/tcl/bin/tclsh83d.exe</pre></blockquote>
+<p>If your path includes spaces be sure to enclose it in quotes:</p>
+<blockquote><pre>set tclsh_path "c:/Program Files/tcl/bin/tclsh83d.exe"</pre></blockquote>
+<p>Make sure that the path to Berkeley DB's tcl library is in your
+current path. On Windows NT/2000/XP, edit your PATH using the My
+Computer -&gt; Properties -&gt; Advanced -&gt; Environment
+Variables dialog. On earlier versions of Windows, you may find it
+convenient to add a line to c:\AUTOEXEC.BAT:</p>
+<blockquote><pre>SET PATH=%PATH%;c:\db\build_win32\Debug</pre></blockquote>
+<p>Then, in a shell of your choice enter the following commands:</p>
+<ol>
<p><li>cd build_win32
<p><li>run <b>d:/tcl/bin/tclsh83d.exe</b>, or the equivalent name of
-the Tcl shell for your distribution.
-<p>You should get a "%" prompt.
-<p><li>% source ../test/test.tcl.
-<p>You should get a "%" prompt with no errors.
+the Tcl shell for your system.
+<p>You should get a "%" prompt.</p>
+<p><li>% source ../test/test.tcl
+<p>If no errors occur, you should get a "%" prompt.</p>
</ol>
-<p>You are now ready to run tests in the test suite, see
+<p>You are now ready to run tests in the test suite; see
<a href="../../ref/test/run.html">Running the test suite</a> for more
-information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_win/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_win/notes.html"><img src="../../images/next.gif" alt="Next"></a>
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_win/small.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_win/notes.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/cam/intro.html b/db/docs/ref/cam/intro.html
index 7a02ea87f..1b5f26b9a 100644
--- a/db/docs/ref/cam/intro.html
+++ b/db/docs/ref/cam/intro.html
@@ -1,72 +1,108 @@
-<!--$Id: intro.so,v 10.21 2001/01/18 19:50:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.27 2003/10/18 19:15:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Building Berkeley DB Concurrent Data Store applications</title>
+<title>Berkeley DB Reference Guide: Berkeley DB Concurrent Data Store applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Concurrent Data Store Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building Berkeley DB Concurrent Data Store applications</h1>
+<h3 align=center>Berkeley DB Concurrent Data Store applications</h3>
<p>It is often desirable to have concurrent read-write access to a database
when there is no need for full recoverability or transaction semantics.
-For this class of applications, Berkeley DB provides an interface supporting
-deadlock free, multiple-reader/single writer access to the database.
-This means that, at any instant in time, there may be either multiple
+For this class of applications, Berkeley DB provides interfaces supporting
+deadlock-free, multiple-reader/single writer access to the database.
+This means that at any instant in time, there may be either multiple
readers accessing data or a single writer modifying data. The
application is entirely unaware of which is happening, and Berkeley DB
-implements the necessary locking and blocking to ensure this behavior.
-<p>In order to create Berkeley DB Concurrent Data Store applications, you must first initialize an
-environment by calling <a href="../../api_c/env_open.html">DBENV-&gt;open</a>. You must specify the
-<a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> and <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> flags to that interface.
-It is an error to specify any of the other <a href="../../api_c/env_open.html">DBENV-&gt;open</a> subsystem
-or recovery configuration flags, e.g., <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>,
-<a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> or <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a>.
-<p>All databases must, of course, be created in this environment, by using
-the <a href="../../api_c/db_create.html">db_create</a> interface and specifying the correct environment
-as an argument.
-<p>The Berkeley DB access method calls used to support concurrent access are
-unchanged from the normal access method calls, with one exception: the
-<a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> interface. In Berkeley DB Concurrent Data Store, each cursor must encapsulate
-the idea of being used for read-only access or for read-write access.
-There may only be one read-write cursor active at any one time. When your
-application creates a cursor, if that cursor will ever be used for
-writing, the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag must be specified when the cursor
-is created.
-<p>No deadlock detector needs to be run in a Berkeley DB Concurrent Data Store database environment.
-<p>Only a single thread of control may write the database at a time. For
-this reason care must be taken to ensure that applications do not
-inadvertently block themselves causing the application to hang, unable
-to proceed. Some common mistakes include:
-<p><ol>
-<p><li>Leaving a cursor open while issuing a <a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/db_del.html">DB-&gt;del</a>
+implements the necessary locking and blocking to ensure this behavior.</p>
+<p>To create Berkeley DB Concurrent Data Store applications, you must first initialize an environment
+by calling <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>. You must specify the <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a>
+and <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> flags to that method. It is an error to
+specify any of the other <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> subsystem or recovery
+configuration flags, for example, <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>,
+<a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a>, or <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a>. All databases must, of
+course, be created in this environment by using the <a href="../../api_c/db_class.html">db_create</a>
+function or <a href="../../api_cxx/db_class.html">Db</a> constructor, and specifying the environment
+as an argument.</p>
+<p>Berkeley DB performs appropriate locking so that safe enforcement of the
+deadlock-free, multiple-reader/single-writer semantic is transparent to
+the application. However, a basic understanding of Berkeley DB Concurrent Data Store locking
+behavior is helpful when writing Berkeley DB Concurrent Data Store applications.</p>
+<p>Berkeley DB Concurrent Data Store
+avoids deadlocks without the need for a deadlock detector by performing
+all locking on an entire database at once (or on an entire environment
+in the case of the <a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a> flag), and by ensuring that at
+any given time only one thread of control is allowed to simultaneously
+hold a read (shared) lock and attempt to acquire a write (exclusive)
+lock.</p>
+<p>All open Berkeley DB cursors hold a read lock, which serves as a guarantee
+that the database will not change beneath them; likewise, all
+non-cursor <a href="../../api_c/db_get.html">DB-&gt;get</a> operations temporarily acquire and release
+a read lock that is held during the actual traversal of the database.
+Because read locks will not conflict with each other, any number of
+cursors in any number of threads of control may be open simultaneously,
+and any number of <a href="../../api_c/db_get.html">DB-&gt;get</a> operations may be concurrently in
+progress.</p>
+<p>To enforce the rule that only one thread of control at a time can
+attempt to upgrade a read lock to a write lock, however, Berkeley DB must
+forbid multiple cursors from attempting to write concurrently. This is
+done using the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag to the <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> method.
+This is the only difference between access method calls in Berkeley DB Concurrent Data Store and
+in the other Berkeley DB products. The <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag causes the
+newly created cursor to be a "write" cursor; that is, a cursor capable
+of performing writes as well as reads. Only cursors thus created are
+permitted to perform write operations (either deletes or puts), and only
+one such cursor can exist at any given time.</p>
+<p>Any attempt to create a second write cursor or to perform a non-cursor
+write operation while a write cursor is open will block until that write
+cursor is closed. Read cursors may open and perform reads without blocking
+while a write cursor is extant. However, any attempts to actually perform
+a write, either using the write cursor or directly using the
+<a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/db_del.html">DB-&gt;del</a> methods, will block until all read cursors
+are closed. This is how the multiple-reader/single-writer semantic is
+enforced, and prevents reads from seeing an inconsistent database state
+that may be an intermediate stage of a write operation.</p>
+<p>With these behaviors, Berkeley DB can guarantee deadlock-free concurrent
+database access, so that multiple threads of control are free to perform
+reads and writes without needing to handle synchronization themselves
+or having to run a deadlock detector. Because Berkeley DB has no knowledge
+of which cursors belong to which threads, however, some care must be
+taken to ensure that applications do not inadvertently block themselves,
+causing the application to hang and be unable to proceed. Some common
+mistakes include the following:</p>
+<ol>
+<p><li>Keeping a cursor open while issuing a <a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/db_del.html">DB-&gt;del</a>
access method call.
-<p><li>Attempting to open a cursor for read-write access while already holding
-a cursor open for read-write access.
-<p><li>Not testing Berkeley DB error return codes (if any cursor operation returns an
-unexpected error, that cursor should be closed).
+<p><li>Attempting to open a write cursor while a write cursor is already being
+held open by the same thread of control. Note that it is correct
+operation for one thread of control to attempt to open a write cursor
+or to perform a non-cursor write (<a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/db_del.html">DB-&gt;del</a>)
+while a write cursor is already active in another thread. It is only
+a problem if these things are done within a single thread of control --
+in which case that thread will block and never be able to release the
+lock that is blocking it.
+<p><li>Keeping a write cursor open for an extended period of time.
+<p><li>Not testing Berkeley DB error return codes (if any cursor operation returns
+an unexpected error, that cursor must still be closed).
<p><li>By default, Berkeley DB Concurrent Data Store does locking on a per-database basis. For this reason,
accessing multiple databases in different orders in different threads
or processes, or leaving cursors open on one database while accessing
another database, can cause an application to hang. If this behavior
-is a requirement for the application, Berkeley DB can be configured to do
-locking on an environment wide basis. See the <a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a> flag
-of the <a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> function for more information.
+is a requirement for the application, Berkeley DB should be configured to do
+locking on an environment-wide basis. See the <a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a> flag
+of the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> function for more information.
</ol>
-<p>Note that it is correct operation for two different threads of control
-(actual threads or processes) to have multiple read-write cursors open,
-or for one thread to issue a <a href="../../api_c/db_put.html">DB-&gt;put</a> call while another thread
-has a read-write cursor open, and it is only a problem if these things
-are done within a single thread of control.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/common.html b/db/docs/ref/debug/common.html
index 6374307f1..4ce650e50 100644
--- a/db/docs/ref/debug/common.html
+++ b/db/docs/ref/debug/common.html
@@ -1,109 +1,141 @@
-<!--$Id: common.so,v 10.13 2000/12/05 18:04:26 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: common.so,v 10.25 2003/05/24 22:18:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Common errors</title>
+<title>Berkeley DB Reference Guide: Troubleshooting common Berkeley DB problems</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/debug/printlog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../debug/printlog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Common errors</h1>
-<p>This page outlines some of the most common problems that people encounter
-and some suggested courses of action.
-<p><dl compact>
-<p><dt><b>Symptom:</b><dd>Core dumps or garbage returns from random Berkeley DB operations.
-<p><dt>Possible Cause:<dd>Failure to zero out DBT structure before issuing request.
-<p><dt>Fix:<dd>Before using a <a href="../../api_c/dbt.html">DBT</a>, you must initialize all its elements
-to 0 and then set the ones you are using explicitly.
-<p><dt><b>Symptom:</b><dd>Random crashes and/or database corruption.
-<p><dt>Possible Cause:<dd>Running multiple threads, but did not specify <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a>
-to <a href="../../api_c/db_open.html">DB-&gt;open</a> or <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.
-<p><dt>Fix:<dd>Any time you are sharing a handle across multiple threads, you must
-specify <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> when you open that handle.
-<p><dt><b>Symptom:</b><dd><a href="../../api_c/env_open.html">DBENV-&gt;open</a> returns EINVAL.
-<p><dt>Possible Cause:<dd>The environment home directory is a remote mounted filesystem.
-<p><dt>Fix:<dd>Use a locally mounted filesystem instead.
-<p><dt><b>Symptom:</b><dd><a href="../../api_c/db_get.html">DB-&gt;get</a> calls are returning EINVAL.
-<p><dt>Possible Cause:<dd>The application is running with threads, but did not specify the
-<a href="../../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a> or <a href="../../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a>
-flags in the <a href="../../api_c/dbt.html">DBT</a> structures used in the call.
-<p><dt>Fix:<dd>When running with threaded handles (i.e., specifying <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a>
-to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> or <a href="../../api_c/db_open.html">DB-&gt;open</a>), you must specify one of those
-flags for all <a href="../../api_c/dbt.html">DBT</a> structures in which Berkeley DB is returning data.
-<p><dt><b>Symptom:</b><dd>Running multiple threads or processes, and the database appears to be
-getting corrupted.
-<p><dt>Possible Cause:<dd>Locking is not enabled.
-<p><dt>Fix:<dd>Make sure that you are acquiring locks in your access methods. You
-must specify <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> to your <a href="../../api_c/env_open.html">DBENV-&gt;open</a> call and then
-pass that environment to <a href="../../api_c/db_open.html">DB-&gt;open</a>.
-<p><dt><b>Symptom:</b><dd>Locks are accumulating or threads and/or processes are
-deadlocking even though there is no concurrent access to the database.
-<p><dt>Possible Cause:<dd>Failure to close a cursor.
-<p><dt>Fix:<dd>Cursors retain locks between calls. Everywhere the application uses
-a cursor, the cursor should be explicitly closed as soon as possible after
-it is used.
-<p><dt><b>Symptom:</b><dd>The system locks up.
-<p><dt>Possible Cause:<dd>Application not checking for <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>.
-<p><dt>Fix:<dd>Unless you are using the Concurrent Data Store product, whenever you
-have multiple threads and/or processes and at least one of them is
-writing, you have the potential for deadlock. As a result, you must
-test for the <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> return on every Berkeley DB call. In
-general, updates should take place in a transaction or you might leave
-the database in an inconsistent state. Reads may take place outside
-the context of a transaction under common conditions.
-<p>Whenever you get a <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> return, you should:
-<p><ol>
-<p><li>If you are running in a transaction, abort the transaction, first closing
-any cursors opened in the transaction.
-<p><li>If you are not running in a transaction, simply close the cursor that got
-the <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> (if it was a cursor operation) and retry.
-</ol>
-<p>See <a href="../../ref/transapp/put.html">Recoverability and deadlock
-avoidance</a> for further information.
-<p><dt><b>Symptom:</b><dd>An inordinately high number of deadlocks.
-<p><dt>Possible Cause:<dd>Read-Modify-Write pattern without using the RMW flag.
-<p><dt>Fix:<dd>If you frequently read a piece of data, modify it and then write
+<h3 align=center>Troubleshooting common Berkeley DB problems</h3>
+<p>The following are some common problems that applications encounter.
+For the answers to more Frequently Asked Questions, see the
+Berkeley DB Reference Guide FAQ sections, typically located at the end
+of each chapter.</p>
+<ol>
+<p><li><b>A Berkeley DB method is returning "argument invalid" (EINVAL) or other general
+error value, or throwing a general exception, and the cause is not
+obvious. Or, a Berkeley DB method is returning an out-of-memory (ENOMEM)
+error and there is plenty of disk and heap space available.</b>
+<p>The application is calling the Berkeley DB API incorrectly or configuring the
+database environment with insufficient resources.</p>
+<p>The Berkeley DB library optionally outputs a verbose error message whenever
+it is about to return a general-purpose error, or throw a non-specific
+exception. Whenever it is not clear why an application call into Berkeley DB
+is failing, the first step is always to turn on verbose error messages,
+which will almost always explain the problem. See the
+<a href="../../ref/debug/runtime.html">Run-time error information</a>
+section of the Reference Guide for more information.</p>
+<hr size=1 noshade>
+<p><li><b>Multiple databases are being created in a single physical file and there
+is random database corruption.</b>
+<p>The databases do not share an underlying database cache. Databases that
+share a single physical file must almost always share an underlying
+database cache as well. See the <a href="../../ref/am/opensub.html">Opening multiple databases in a single file</a> section of the Reference
+Guide for more information.</p>
+<hr size=1 noshade>
+<p><li><b>There are random failures when creating a database environment, often
+associated with creating or initializing the shared memory regions that
+back the database environment.</b>
+<p>The filesystem in which the database environment is being created is an
+NFS or other remote filesystem. Database environments should not be
+created in NFS filesystems. See the <a href="../../ref/env/remote.html">Remote filesystem</a> section of the Reference Guide for more
+information.</p>
+<hr size=1 noshade>
+<p><li><b>There are core dumps or garbage returns from random Berkeley DB operations.</b>
+<p>The application is failing to zero out <a href="../../api_c/dbt_class.html">DBT</a> objects before
+calling Berkeley DB. Before using a <a href="../../api_c/dbt_class.html">DBT</a>, you must initialize all its
+elements to 0 and then set the ones you are using explicitly.</p>
+<p>Another reason for this symptom is the application may be using Berkeley DB
+handles in a free-threaded manner, without specifying the
+<a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag to the <a href="../../api_c/db_open.html">DB-&gt;open</a> or <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> methods.
+Any time you are sharing a handle across multiple threads, you must
+specify <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> when you open that handle.</p>
+<p>Another reason for this symptom is the application is concurrently
+accessing the database, but not acquiring locks. The Berkeley DB Data Store product does
+no locking at all; the application must do its own serialization of
+access to the database to avoid corruption. The Berkeley DB Concurrent Data Store and Berkeley DB Transactional Data Store
+products do lock the database, but still require that locking be
+configured.</p>
+<hr size=1 noshade>
+<p><li><b>A transactional database environment locks up, and no threads of
+control are making progress.</b>
+<p>The most common cause of this failure is a thread of control exiting
+unexpectedly, while holding a Berkeley DB mutex or a read/write logical
+database lock. If a thread of control exits holding a data structure
+mutex, other threads of control will likely lock up fairly quickly,
+queued behind the mutex. If a thread of control exits holding a logical
+database lock, other threads of control may lock up over a long period
+of time, as they will not be blocked until they attempt to acquire the
+specific page for which a lock is not available. See the
+<a href="../../ref/lock/deaddbg.html">Deadlock debugging</a> section of the
+Reference Guide for more information on debugging deadlocks.</p>
+<p>Whenever a thread of control exits Berkeley DB holding a mutex or logical
+lock, all threads of control must exit the database environment, and
+database recovery must be performed. See the
+<a href="../../ref/transapp/app.html">Application structure</a> section of
+the Reference Guide for more information.</p>
+<p>Finally, the Berkeley DB API is not re-entrant, and it is usually unsafe for
+signal handlers to call the Berkeley DB API. See the
+<a href="../../ref/program/appsignals.html">Signal handling</a> section of
+the Reference Guide for more information.</p>
+<hr size=1 noshade>
+<p><li><b>Locks are accumulating, or threads and/or processes are deadlocking in
+a transactional environment, even though there is no concurrent access
+to the database.</b>
+<p>The application may have failed to close a cursor. Cursors retain locks
+between calls. Everywhere the application uses a cursor, the cursor
+should be explicitly closed as soon as possible after it is used.</p>
+<p>Another reason for this symptom is the application is not checking for
+<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> errors (or <a href="../../api_cxx/deadlock_class.html">DbDeadlockException</a>
+exceptions). Unless you are using the Berkeley DB Concurrent Data Store product, whenever there
+are multiple threads and/or processes concurrently accessing a database
+and at least one of them is writing the database, there is potential for
+deadlock.</p>
+<p>If deadlock can occur, applications must test for deadlock failures and
+abort the enclosing transaction, or locks will be left. See the
+<a href="../../ref/transapp/put.html">Recoverability and deadlock
+handling</a> section of the Reference Guide for more information.</p>
+<hr size=1 noshade>
+<p><li><b>A transactional database environment cannot be recovered or normal
+database operations fail with messages that "LSN" values are past
+the end of the log.</b>
+<p>The application may have removed all of its log files without also
+dumping and reloading all of its databases. Log files should never be
+removed unless explicitly authorized by the <a href="../../utility/db_archive.html">db_archive</a> utility
+or the <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a> method. Note that those interfaces will never
+authorize removal of all existing log files.</p>
+<p>Another reason for this symptom is the application may have created a
+database file in one transactional environment and then moved it into
+another transactional environment. While it is possible to create
+databases in non-transactional environments (for example, when doing
+bulk database loads) and then move them into transactional environments,
+once a database has been used in a transactional environment, it cannot
+be moved to another environment without first being dumped and
+reloaded.</p>
+<hr size=1 noshade>
+<p><li><b>A transactional application is seeing an inordinately high number of
+deadlocks.</b>
+<p>The application may be acquiring database objects in inconsistent
+orders; having threads of control always acquire objects in the
+same order will reduce the frequency of deadlocks.</p>
+<p>If you frequently read a piece of data, modify it and then write
it, you may be inadvertently causing a large number of deadlocks. Try
-specifying the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag on your get calls.
+specifying the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag on your get calls.</p>
<p>Or, if the application is doing a large number of updates in a small
database, turning off Btree splits may help (see <a href="../../api_c/db_set_flags.html#DB_REVSPLITOFF">DB_REVSPLITOFF</a>
-for more information.)
-<p><dt><b>Symptom:</b><dd>I run recovery and it exits cleanly, but my database changes are missing.
-<p><dt>Possible Cause:<dd>Failure to enable logging and transactions in the database environment,
-failure to specify DB_ENV handle when creating DB handle,
-transaction handle not passed to Berkeley DB interface, failure to commit
-transaction.
-<p><dt>Fix:<dd>Make sure that the environment and database handles are properly
-created, and that the application passes the transaction handle returned
-by <a href="../../api_c/txn_begin.html">txn_begin</a> to the appropriate Berkeley DB interfaces, and that each
-transaction is eventually committed.
-<p><dt><b>Symptom:</b><dd>Recovery fails.
-<p><dt>Possible Cause:<dd>A database was updated in a transactional environment both with and
-without transactional handles.
-<p><dt>Fix:<dd>If any database write operation is done using a transaction handle,
-every write operation must be done in the context of a transaction.
-<p><dt><b>Symptom:</b><dd>A database environment locks up, sometimes gradually.
-<p><dt>Possible Cause:<dd>A thread of control exited unexpectedly, holding Berkeley DB resources.
-<p><dt>Fix:<dd>Whenever a thread of control exits holding Berkeley DB resources, all threads
-of control must exit the database environment, and recovery must be run.
-<p><dt><b>Symptom:</b><dd>A database environment locks up, sometimes gradually.
-<p><dt>Possible Cause:<dd>Cursors are not being closed before transaction abort.
-<p><dt>Fix:<dd>Before an application aborts a transaction, any cursors opened within
-the context of that transaction must be closed.
-<p><dt><b>Symptom:</b><dd>Transaction abort or recovery fail, or database corruption occurs.
-<p><dt>Possible Cause:<dd>Log files were removed before it was safe.
-<p><dt>Fix:<dd>Do not remove any log files from a database environment until Berkeley DB
-declares it safe.
-</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/debug/printlog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/build_unix/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+for more information.)</p>
+</ol>
+<table width="100%"><tr><td><br></td><td align=right><a href="../debug/printlog.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../build_unix/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/compile.html b/db/docs/ref/debug/compile.html
index 504d5d3ec..99eea3924 100644
--- a/db/docs/ref/debug/compile.html
+++ b/db/docs/ref/debug/compile.html
@@ -1,43 +1,45 @@
-<!--$Id: compile.so,v 10.10 2000/12/01 20:15:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: compile.so,v 10.12 2001/03/13 20:39:46 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Compile-time configuration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging</dl></h3></td>
-<td width="1%"><a href="../../ref/debug/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging Applications</dl></h3></td>
+<td align=right><a href="../debug/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Compile-time configuration</h1>
-<p>There are two compile-time configuration options that assist in debugging
-Berkeley DB and Berkeley DB applications.
+<h3 align=center>Compile-time configuration</h3>
+<p>There are three compile-time configuration options that assist in
+debugging Berkeley DB and Berkeley DB applications:</p>
<p><dl compact>
-<p><dt>--enable-debug<dd>If you want to build Berkeley DB with <b>-g</b> as the C and C++ compiler
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-debug">--enable-debug</a><dd>If you want to build Berkeley DB with <b>-g</b> as the C and C++ compiler
flag, enter --enable-debug as an argument to configure. This will create
Berkeley DB with debugging symbols, as well as load various Berkeley DB routines
that can be called directly from a debugger to display database page
-content, cursor queues and so forth. (Note that the <b>-O</b>
+content, cursor queues, and so forth. (Note that the <b>-O</b>
optimization flag will still be specified. To compile with only the
<b>-g</b>, explicitly set the <b>CFLAGS</b> environment variable
before configuring.)
-<p><dt>--enable-diagnostic<dd>If you want to build Berkeley DB with debugging run-time sanity checks and with
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a><dd>If you want to build Berkeley DB with debugging run-time sanity checks and with
DIAGNOSTIC #defined during compilation, enter --enable-diagnostic as an
argument to configure. This will cause a number of special checks to be
performed when Berkeley DB is running. This flag should not be defined when
-configuring to build production binaries, as it degrades performance.
-<p>In addition, when compiling Berkeley DB for use in run-time memory consistency
-checkers, in particular, programs that look for reads and writes of
-uninitialized memory, use --enable-diagnostic as an argument to configure.
-This guarantees that Berkeley DB will completely initialize allocated pages
-rather than only initializing the minimum necessary amount.
+configuring to build production binaries because it degrades performance.
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-umrw">--enable-umrw</a><dd>When compiling Berkeley DB for use in run-time memory consistency checkers
+(in particular, programs that look for reads and writes of uninitialized
+memory), use --enable-umrw as an argument to configure. This
+guarantees, among other things, that Berkeley DB will completely initialize
+allocated pages rather than initializing only the minimum necessary
+amount.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/debug/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../debug/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/intro.html b/db/docs/ref/debug/intro.html
index 0ea0afcfb..dfb988492 100644
--- a/db/docs/ref/debug/intro.html
+++ b/db/docs/ref/debug/intro.html
@@ -1,32 +1,33 @@
-<!--$Id: intro.so,v 10.15 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.19 2001/10/13 20:21:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/compile.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../install/rpm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/compile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
-<p>As Berkeley DB is an embedded library, debugging applications that use Berkeley DB
-is both harder and easier than debugging a separate server. Debugging
-can be harder, because, when a problem arises, it is not always readily
-apparent whether the problem is in the application, in the database
-library, or is a result of an unexpected interaction between the two.
-Debugging can be easier, as it is easier to track down a problem when
-you can review a stack trace rather than deciphering inter-process
-communication messages. This chapter is intended to assist you in
-debugging applications and in reporting bugs to us in a manner such that
-we can provide you with the correct answer or fix as quickly as
-possible.
+<h3 align=center>Introduction</h3>
+<p>Because Berkeley DB is an embedded library, debugging applications that use
+Berkeley DB is both harder and easier than debugging a separate server.
+Debugging can be harder because when a problem arises, it is not always
+readily apparent whether the problem is in the application, is in the
+database library, or is a result of an unexpected interaction between
+the two. Debugging can be easier because it is easier to track down a
+problem when you can review a stack trace rather than deciphering
+interprocess communication messages. This chapter is intended to assist
+you with debugging applications and reporting bugs to us so that we can
+provide you with the correct answer or fix as quickly as possible.</p>
<p>When you encounter a problem, there are a few general actions you can
-take:
+take:</p>
<p><dl compact>
<p><dt>Review the Berkeley DB error output<dd>If an error output mechanism has been configured in the Berkeley DB
environment, additional run-time error messages are made available to
@@ -35,24 +36,24 @@ modifying your application to create one so that you can get more
detailed error messages. See <a href="runtime.html">Run-time error
information</a> for more information on configuring Berkeley DB to output these
error messages.
-<p><dt>Review <a href="../../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a><dd>Check the list of flags for the <a href="../../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a> function, and
+<p><dt>Review <a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a><dd>Check the list of flags for the <a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a> function, and
see if any of them will produce additional information that might help
understand the problem.
-<p><dt>Add run-time diagnostics<dd>You can configure and build Berkeley DB to perform run-time diagnostics.
-(These checks are not done by default as they can seriously impact
-performance. See <a href="compile.html">Compile-time configuration</a> for more
+<p><dt>Add run-time diagnostics<dd>You can configure and build Berkeley DB to perform run-time diagnostics. (By
+default, these checks are not done because they can seriously impact
+performance.) See <a href="compile.html">Compile-time configuration</a> for more
information.
<p><dt>Apply all available patches<dd>Before reporting a problem to Sleepycat Software, please upgrade to the
latest Sleepycat Software release of Berkeley DB, if possible, or at least
make sure you have applied any updates available for your release from
the <a href="http://www.sleepycat.com/update/index.html">Sleepycat
Software web site</a>.
-<p><dt>Run the test suite<dd>If you are seeing repeated failures, or failures of simple test cases,
-run the Berkeley DB test suite to determine if the distribution of Berkeley DB you
-are using was built and configured correctly.
+<p><dt>Run the test suite<dd>If you see repeated failures or failures of simple test cases, run the
+Berkeley DB test suite to determine whether the distribution of Berkeley DB you are
+using was built and configured correctly.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/compile.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../install/rpm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/compile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/printlog.html b/db/docs/ref/debug/printlog.html
index e533a88d2..7f882fbd3 100644
--- a/db/docs/ref/debug/printlog.html
+++ b/db/docs/ref/debug/printlog.html
@@ -1,160 +1,159 @@
-<!--$Id: printlog.so,v 10.20 2000/12/01 20:15:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: printlog.so,v 10.42 2003/09/25 15:05:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Reviewing Berkeley DB log files</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/debug/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/common.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../debug/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/common.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Reviewing Berkeley DB log files</h1>
+<h3 align=center>Reviewing Berkeley DB log files</h3>
<p>If you are running with transactions and logging, the <a href="../../utility/db_printlog.html">db_printlog</a>
utility can be a useful debugging aid. The <a href="../../utility/db_printlog.html">db_printlog</a> utility
will display the contents of your log files in a human readable (and
-machine-processable) format.
+machine-readable) format.</p>
<p>The <a href="../../utility/db_printlog.html">db_printlog</a> utility will attempt to display any and all
-logfiles present in a designated db_home directory. For each log record,
-<a href="../../utility/db_printlog.html">db_printlog</a> will display a line of the form:
-<p><blockquote><pre>[22][28]db_big: rec: 43 txnid 80000963 prevlsn [21][10483281]</pre></blockquote>
-<p>The opening numbers in square brackets are the log sequence number (LSN)
-of the log record being displayed. The first number indicates the log
-file in which the record appears, and the second number indicates the
-offset in that file of the record.
+log files present in a designated db_home directory. For each log record,
+<a href="../../utility/db_printlog.html">db_printlog</a> will display a line of the form:</p>
+<blockquote><pre>[22][28]db_big: rec: 43 txnid 80000963 prevlsn [21][10483281]</pre></blockquote>
+<p>The opening numbers in square brackets are the <i>log sequence
+number</i> (<i>LSN</i>) of the log record being displayed. The first
+number indicates the log file in which the record appears, and the
+second number indicates the offset in that file of the record.</p>
<p>The first character string identifies the particular log operation being
reported. The log records corresponding to particular operations are
-described below. The rest of the line consists of name/value pairs.
+described following. The rest of the line consists of name/value pairs.</p>
<p>The rec field indicates the record type (this is used to dispatch records
-in the log to appropriate recovery functions).
+in the log to appropriate recovery functions).</p>
<p>The txnid field identifies the transaction for which this record was
written. A txnid of 0 means that the record was written outside the
context of any transaction. You will see these most frequently for
-checkpoints.
+checkpoints.</p>
<p>Finally, the prevlsn contains the LSN of the last record for this
transaction. By following prevlsn fields, you can accumulate all the
updates for a particular transaction. During normal abort processing,
this field is used to quickly access all the records for a particular
-transaction.
+transaction.</p>
<p>After the initial line identifying the record type, each field of the log
record is displayed, one item per line. There are several fields that
appear in many different records and a few fields that appear only in
-some records.
-<p>The list below presents each log record type currently produced with a brief
-description of the operation they describe.
+some records.</p>
+<p>The following table presents each currently written log record type with
+a brief description of the operation it describes. Any of these
+record types may have the string "_debug" appended if they
+were written because <a href="../../api_c/env_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a> was specified and the
+system was configured with <a href="../../ref/build_unix/conf.html#--enable-diagnostic">--enable-diagnostic</a>.</p>
<!--START LOG RECORD TYPES-->
-<p><table border=1>
+<table border=1>
<tr><th>Log Record Type</th><th>Description</th></tr>
<tr><td>bam_adj</td><td>Used when we insert/remove an index into/from the page header of a Btree page.</td></tr>
<tr><td>bam_cadjust</td><td>Keeps track of record counts in a Btree or Recno database.</td></tr>
<tr><td>bam_cdel</td><td>Used to mark a record on a page as deleted.</td></tr>
<tr><td>bam_curadj</td><td>Used to adjust a cursor location when a nearby record changes in a Btree database.</td></tr>
-<tr><td>bam_pg_alloc</td><td>Indicates that we allocated a page to a Btree.</td></tr>
-<tr><td>bam_pg_free</td><td>Indicates that we freed a page in the Btree (freed pages are added to a freelist and reused).</td></tr>
<tr><td>bam_rcuradj</td><td>Used to adjust a cursor location when a nearby record changes in a Recno database.</td></tr>
<tr><td>bam_repl</td><td>Describes a replace operation on a record.</td></tr>
<tr><td>bam_root</td><td>Describes an assignment of a root page.</td></tr>
<tr><td>bam_rsplit</td><td>Describes a reverse page split.</td></tr>
<tr><td>bam_split</td><td>Describes a page split.</td></tr>
-<tr><td>crdel_delete</td><td>Describes the removal of a Berkeley DB file.</td></tr>
-<tr><td>crdel_fileopen</td><td>Describes a Berkeley DB file create attempt.</td></tr>
-<tr><td>crdel_metapage</td><td>Describes the creation of a meta-data page for a new file.</td></tr>
-<tr><td>crdel_metasub</td><td>Describes the creation of a meta data page for a subdatabase.</td></tr>
-<tr><td>crdel_rename</td><td>Describes a file rename operation.</td></tr>
+<tr><td>crdel_metasub</td><td>Describes the creation of a metadata page for a subdatabase.</td></tr>
<tr><td>db_addrem</td><td>Add or remove an item from a page of duplicates.</td></tr>
-<tr><td>db_big</td><td>Add an item to an overflow page (overflow pages contain items too large to place on the main page)</td></tr>
+<tr><td>db_big</td><td>Add an item to an overflow page (<i>overflow pages</i> contain items too large to place on the main page)</td></tr>
+<tr><td>db_cksum</td><td>Unable to checksum a page.</td></tr>
<tr><td>db_debug</td><td>Log debugging message.</td></tr>
<tr><td>db_noop</td><td>This marks an operation that did nothing but update the LSN on a page.</td></tr>
<tr><td>db_ovref</td><td>Increment or decrement the reference count for a big item.</td></tr>
+<tr><td>db_pg_alloc</td><td>Indicates we allocated a page to a Btree.</td></tr>
+<tr><td>db_pg_free</td><td>Indicates we freed a page (freed pages are added to a freelist and reused).</td></tr>
+<tr><td>db_pg_freedata</td><td>Indicates we freed a page that still contained data entries (freed pages are added to a freelist and reused.)</td></tr>
+<tr><td>db_pg_new</td><td>Indicates that a page was allocated and put on the free list.</td></tr>
+<tr><td>db_pg_prepare</td><td>Indicates a new page was allocated during a child transaction of a prepared transaction.</td></tr>
<tr><td>db_relink</td><td>Fix prev/next chains on duplicate pages because a page was added or removed.</td></tr>
+<tr><td>dbreg_register</td><td>Records an open of a file (mapping the filename to a log-id that is used in subsequent log operations).</td></tr>
<tr><td>ham_chgpg</td><td>Used to adjust a cursor location when a Hash page is removed, and its elements are moved to a different Hash page.</td></tr>
<tr><td>ham_copypage</td><td>Used when we empty a bucket page, but there are overflow pages for the bucket; one needs to be copied back into the actual bucket.</td></tr>
<tr><td>ham_curadj</td><td>Used to adjust a cursor location when a nearby record changes in a Hash database.</td></tr>
<tr><td>ham_groupalloc</td><td>Allocate some number of contiguous pages to the Hash database.</td></tr>
-<tr><td>ham_insdel</td><td>Insert/Delete an item on a Hash page.</td></tr>
+<tr><td>ham_insdel</td><td>Insert/delete an item on a Hash page.</td></tr>
<tr><td>ham_metagroup</td><td>Update the metadata page to reflect the allocation of a sequence of contiguous pages.</td></tr>
<tr><td>ham_newpage</td><td>Adds or removes overflow pages from a Hash bucket.</td></tr>
<tr><td>ham_replace</td><td>Handle updates to records that are on the main page.</td></tr>
<tr><td>ham_splitdata</td><td>Record the page data for a split.</td></tr>
-<tr><td>log_register</td><td>Records an open of a file (mapping the file name to a log-id that is used in subsequent log operations).</td></tr>
<tr><td>qam_add</td><td>Describes the actual addition of a new record to a Queue.</td></tr>
<tr><td>qam_del</td><td>Delete a record in a Queue.</td></tr>
-<tr><td>qam_delete</td><td>Remove a Queue extent file.</td></tr>
-<tr><td>qam_inc</td><td>Increments the maximum record number allocated in a Queue indicating that we've allocated another space in the file.</td></tr>
+<tr><td>qam_delext</td><td>Delete a record in a Queue with extents.</td></tr>
<tr><td>qam_incfirst</td><td>Increments the record number that refers to the first record in the database.</td></tr>
-<tr><td>qam_mvptr</td><td>Indicates that we changed the reference to either or both of the first and current records in the file.</td></tr>
-<tr><td>qam_rename</td><td>Rename a Queue extent file.</td></tr>
+<tr><td>qam_mvptr</td><td>Indicates we changed the reference to either or both of the first and current records in the file.</td></tr>
<tr><td>txn_child</td><td>Commit a child transaction.</td></tr>
<tr><td>txn_ckp</td><td>Transaction checkpoint.</td></tr>
+<tr><td>txn_recycle</td><td>Transaction IDs wrapped.</td></tr>
<tr><td>txn_regop</td><td>Logs a regular (non-child) transaction commit.</td></tr>
<tr><td>txn_xa_regop</td><td>Logs a prepare message.</td></tr>
</table>
<!--END LOG RECORD TYPES-->
<h3>Augmenting the Log for Debugging</h3>
-<p>When debugging applications, it is sometimes useful to log, not only the
+<p>When debugging applications, it is sometimes useful to log not only the
actual operations that modify pages, but also the underlying Berkeley DB
functions being executed. This form of logging can add significant bulk
to your log, but can permit debugging application errors that are almost
impossible to find any other way. To turn on these log messages, specify
the --enable-debug_rop and --enable-debug_wop configuration options when
configuring Berkeley DB. See <a href="../../ref/build_unix/conf.html">Configuring
-Berkeley DB</a> for more information.
+Berkeley DB</a> for more information.</p>
<h3>Extracting Committed Transactions and Transaction Status</h3>
-<p>Sometimes it is useful to use the human-readable log output to determine
-which transactions committed and aborted. The awk script, commit.awk,
-found in the db_printlog directory of the Berkeley DB distribution allows you
-to do just that. The command:
-<p><blockquote><pre>awk -f commit.awk log_output</pre></blockquote>
-where log_output is the output of db_printlog will display a list of
-the transaction IDs of all committed transactions found in the log.
+<p>Sometimes, it is helpful to use the human-readable log output to
+determine which transactions committed and aborted. The awk script,
+commit.awk, (found in the db_printlog directory of the Berkeley DB
+distribution) allows you to do just that. The following command,
+where log_output is the output of db_printlog, will display a list of
+the transaction IDs of all committed transactions found in the log:</p>
+<blockquote><pre>awk -f commit.awk log_output</pre></blockquote>
<p>If you need a complete list of both committed and aborted transactions,
-then the script status.awk will produce that. The syntax is:
-<p><blockquote><pre>awk -f status.awk log_output</pre></blockquote>
+then the script status.awk will produce it. The syntax is as follows:</p>
+<blockquote><pre>awk -f status.awk log_output</pre></blockquote>
<h3>Extracting Transaction Histories</h3>
<p>Another useful debugging aid is to print out the complete history of a
-transaction. The awk script txn.awk, allows you to do that. The
-command line:
-<p><blockquote><pre>awk -f txn.awk TXN=txnlist log_output</pre></blockquote>
-where log_output is the output of <a href="../../utility/db_printlog.html">db_printlog</a> and txnlist is
-a comma-separated list of transaction IDs, will display all log records
-associated with the designated transaction ids.
+transaction. The awk script txn.awk allows you to do that. The
+following command line, where log_output is the output of
+<a href="../../utility/db_printlog.html">db_printlog</a> and txnlist is a comma-separated list of transaction
+IDs, will display all log records associated with the designated
+transaction ids:</p>
+<blockquote><pre>awk -f txn.awk TXN=txnlist log_output</pre></blockquote>
<h3>Extracting File Histories</h3>
-<p>The awk script fileid.awk, allows you to extract all log records that
-affect particular files. The syntax for the fileid.awk script is:
-<p><blockquote><pre>awk -f fileid.awk PGNO=fids log_output</pre></blockquote>
-<p>where log_output is the output of db_printlog and fids is a
-comma-separated list of fileids. The script will output all log
-records that reference the designated file.
+<p>The awk script fileid.awk allows you to extract all log records that
+refer to a designated file. The syntax for the fileid.awk script is
+the following, where log_output is the output of db_printlog and fids
+is a comma-separated list of fileids:</p>
+<blockquote><pre>awk -f fileid.awk PGNO=fids log_output</pre></blockquote>
<h3>Extracting Page Histories</h3>
-<p>The awk script pgno.awk, allows you to extract all log records that
-affect particular pages. As currently designed, however, it will
-extract records of all files with the designated page number, so this
-script is most useful in conjunction with the fileid script. The syntax
-for the pgno.awk script is:
-<p><blockquote><pre>awk -f pgno.awk PGNO=pgnolist log_output</pre></blockquote>
-<p>where log_output is the output of db_printlog and pgnolist is a
-comma-separated list of page numbers. The script will output all log
-records that reference the designated page numbers.
+<p>The awk script pgno.awk allows you to extract all log records that refer
+to designated page numbers. However, because this script will extract
+records with the designated page numbers for all files, it is most
+useful in conjunction with the fileid script. The syntax for the
+pgno.awk script is the following, where log_output is the output of
+db_printlog and pgnolist is a comma-separated list of page numbers:</p>
+<blockquote><pre>awk -f pgno.awk PGNO=pgnolist log_output</pre></blockquote>
<h3>Other log processing tools</h3>
-<p>The awk script count.awk will print out the number of log records
-encountered that belonged to some transaction (that is the number of log
-records excluding those for checkpoints and non-transaction protected
-operations).
+<p>The awk script count.awk prints out the number of log records
+encountered that belonged to some transaction (that is, the number of
+log records excluding those for checkpoints and
+non-transaction-protected operations).</p>
<p>The script range.awk will extract a subset of a log. This is useful
when the output of <a href="../../utility/db_printlog.html">db_printlog</a> is too large to be reasonably
-manipulated with an editor or other tool.
-<p>The syntax for range.awk is:
-<p><blockquote><pre>awk -f range.awk START_FILE=sf START_OFFSET=so END_FILE=ef END_OFFSET=eo log_output</pre></blockquote>
-<p>where the <b>sf</b> and <b>so</b> represent the log sequence number
-(LSN) of the beginning of the sublog you wish to extract and <b>ef</b>
-and <b>eo</b> represent the LSN of the end of the sublog you wish to
-extract.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/debug/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/common.html"><img src="../../images/next.gif" alt="Next"></a>
+manipulated with an editor or other tool. The syntax for range.awk is
+the following, where <b>sf</b> and <b>so</b> represent the LSN
+of the beginning of the sublog you want to extract, and <b>ef</b> and
+<b>eo</b> represent the LSN of the end of the sublog you want to
+extract:</p>
+<blockquote><pre>awk -f range.awk START_FILE=sf START_OFFSET=so END_FILE=ef END_OFFSET=eo log_output</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../debug/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/common.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/debug/runtime.html b/db/docs/ref/debug/runtime.html
index 40fec7e82..02705396f 100644
--- a/db/docs/ref/debug/runtime.html
+++ b/db/docs/ref/debug/runtime.html
@@ -1,47 +1,48 @@
-<!--$Id: runtime.so,v 10.16 2000/12/01 20:15:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: runtime.so,v 10.20 2003/10/18 19:15:59 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Run-time error information</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging</dl></h3></td>
-<td width="1%"><a href="../../ref/debug/compile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/printlog.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Debugging Applications</dl></h3></td>
+<td align=right><a href="../debug/compile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/printlog.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Run-time error information</h1>
+<h3 align=center>Run-time error information</h3>
<p>Normally, when an error occurs in the Berkeley DB library, an integer value
-(either a Berkeley DB specific value, or a system <b>errno</b> value) is
-returned by the function. In some cases, however, this value may be
+(either a Berkeley DB specific value or a system <b>errno</b> value) is
+returned by Berkeley DB. In some cases, however, this value may be
insufficient to completely describe the cause of the error, especially
-during initial application debugging.
-<p>There are four interfaces intended to provide applications with
-additional run-time error information. They are
-<a href="../../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>, <a href="../../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a>,
-<a href="../../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> and <a href="../../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>.
-<p>If the environment is configured with these interfaces, many Berkeley DB errors
+during initial application debugging.</p>
+<p>There are four methods intended to provide applications with additional
+run-time error information:
+<a href="../../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>, <a href="../../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a>,
+<a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a>, and <a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a>.</p>
+<p>If the environment is configured with these methods, many Berkeley DB errors
will result in additional information being written to a file or passed
-as an argument to an application function.
-<p>The Berkeley DB error reporting facilities do not slow performance or
+as an argument to an application function.</p>
+<p>The Berkeley DB error-reporting facilities do not slow performance or
significantly increase application size, and may be run during normal
-operation as well as during debugging. Where possible, we recommend that
-these options always be configured and the output saved in the filesystem.
-We have found that that this often saves time when debugging installation
-or other system integration problems.
-<p>In addition, there are three routines to assist applications in
+operation as well as during debugging. Where possible, we recommend
+that these options always be configured and the output saved in the
+filesystem. We have found that this often saves time when debugging
+installation or other system-integration problems.</p>
+<p>In addition, there are three methods to assist applications in
displaying their own error messages: <a href="../../api_c/env_strerror.html">db_strerror</a>,
-<a href="../../api_c/db_err.html">DBENV-&gt;err</a> and <a href="../../api_c/db_err.html">DBENV-&gt;errx</a>. The first is a superset of
-the ANSI C strerror interface, and returns a descriptive string for
-any error return from the Berkeley DB library. The <a href="../../api_c/db_err.html">DBENV-&gt;err</a> and
-<a href="../../api_c/db_err.html">DBENV-&gt;errx</a> functions use the error message configuration options
-described above to format and display error messages to appropriate
-output devices.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/debug/compile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/printlog.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_err.html">DB_ENV-&gt;err</a>, and <a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a>. The first is a superset of
+the ANSI C strerror function, and returns a descriptive string for any
+error return from the Berkeley DB library. The <a href="../../api_c/env_err.html">DB_ENV-&gt;err</a> and
+<a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a> methods use the error message configuration options
+described previously to format and display error messages to appropriate
+output devices.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../debug/compile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/printlog.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/distrib/layout.html b/db/docs/ref/distrib/layout.html
index b851f62a0..3269139f3 100644
--- a/db/docs/ref/distrib/layout.html
+++ b/db/docs/ref/distrib/layout.html
@@ -1,74 +1,80 @@
-<!--$Id: layout.so,v 10.25 2000/12/22 15:35:32 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: layout.so,v 10.36 2003/10/18 19:16:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Source code layout</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distribution</dl></h3></td>
-<td width="1%"><a href="../../ref/test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/refs/refs.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../distrib/port.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../refs/refs.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Source code layout</h1>
-<p><table border=1 align=center>
+<h3 align=center>Source code layout</h3>
+<table border=1 align=center>
<tr><th>Directory</th><th>Description</th></tr>
<tr><td>LICENSE</td><td>Berkeley DB Copyright</td></tr>
-<tr><td>btree</td><td>Btree access method source code.</td></tr>
-<tr><td>build_unix</td><td>UNIX build directory.</td></tr>
+<tr><td>btree</td><td>Btree access method source code</td></tr>
+<tr><td>build_unix</td><td>UNIX build directory</td></tr>
<tr><td>build_vxworks</td><td>VxWorks build directory.</td></tr>
<tr><td>build_win32</td><td>Windows build directory.</td></tr>
-<tr><td>clib</td><td>C library replacement functions.</td></tr>
-<tr><td>common</td><td>Common Berkeley DB functions.</td></tr>
-<tr><td>cxx</td><td>C++ API.</td></tr>
-<tr><td>db</td><td>Berkeley DB database interfaces.</td></tr>
+<tr><td>clib</td><td>C library replacement functions</td></tr>
+<tr><td>common</td><td>Common Berkeley DB functions</td></tr>
+<tr><td>crypto</td><td>Cryptographic support</td></tr>
+<tr><td>cxx</td><td>C++ API</td></tr>
+<tr><td>db</td><td>Berkeley DB database support</td></tr>
<tr><td>db185</td><td>Berkeley DB version 1.85 compatibility API</td></tr>
-<tr><td>db_archive</td><td>The db_archive utility.</td></tr>
-<tr><td>db_checkpoint</td><td>The db_checkpoint utility.</td></tr>
-<tr><td>db_deadlock</td><td>The db_deadlock utility.</td></tr>
-<tr><td>db_dump</td><td>The db_dump utility.</td></tr>
-<tr><td>db_dump185</td><td>The db_dump185 utility.</td></tr>
-<tr><td>db_load</td><td>The db_load utility.</td></tr>
-<tr><td>db_printlog</td><td>The db_printlog debugging utility.</td></tr>
-<tr><td>db_recover</td><td>The db_recover utility.</td></tr>
-<tr><td>db_stat</td><td>The db_stat utility.</td></tr>
-<tr><td>db_upgrade</td><td>The db_upgrade utility.</td></tr>
-<tr><td>db_verify</td><td>The db_verify utility.</td></tr>
-<tr><td>dbm</td><td>The dbm/ndbm compatibility APIs.</td></tr>
-<tr><td>dist</td><td>Berkeley DB administration/distribution tools.</td></tr>
-<tr><td>docs</td><td>Documentation.</td></tr>
-<tr><td>env</td><td>Berkeley DB environment interfaces.</td></tr>
-<tr><td>examples_c</td><td>C API example programs.</td></tr>
-<tr><td>examples_cxx</td><td>C++ API example programs.</td></tr>
-<tr><td>examples_java</td><td>Java API example programs.</td></tr>
-<tr><td>hash</td><td>Hash access method.</td></tr>
-<tr><td>hsearch</td><td>The hsearch compatibility API.</td></tr>
-<tr><td>include</td><td>Include files.</td></tr>
-<tr><td>java</td><td>Java API.</td></tr>
-<tr><td>libdb_java</td><td>The libdb_java shared library.</td></tr>
-<tr><td>lock</td><td>Lock manager.</td></tr>
-<tr><td>log</td><td>Log manager.</td></tr>
-<tr><td>mp</td><td>Shared memory buffer pool.</td></tr>
-<tr><td>mutex</td><td>Mutexes.</td></tr>
-<tr><td>os</td><td>POSIX 1003.1 operating-system specific functionality.</td></tr>
-<tr><td>os_vxworks</td><td>VxWorks operating-system specific functionality.</td></tr>
-<tr><td>os_win32</td><td>Windows operating-system specific functionality.</td></tr>
-<tr><td>perl.BerkeleyDB</td><td>BerkeleyDB Perl module.</td></tr>
-<tr><td>perl.DB_File</td><td>DB_File Perl module.</td></tr>
-<tr><td>qam</td><td>Queue access method source code.</td></tr>
-<tr><td>rpc_client</td><td>RPC client interface.</td></tr>
-<tr><td>rpc_server</td><td>RPC server utility.</td></tr>
-<tr><td>tcl</td><td>Tcl API.</td></tr>
-<tr><td>test</td><td>Test suite.</td></tr>
-<tr><td>txn</td><td>Transaction manager.</td></tr>
-<tr><td>xa</td><td>X/Open Distributed Transaction Processing XA interface.</td></tr>
+<tr><td>db_archive</td><td>The db_archive utility</td></tr>
+<tr><td>db_checkpoint</td><td>The db_checkpoint utility</td></tr>
+<tr><td>db_deadlock</td><td>The db_deadlock utility</td></tr>
+<tr><td>db_dump</td><td>The db_dump utility</td></tr>
+<tr><td>db_dump185</td><td>The db_dump185 utility</td></tr>
+<tr><td>db_load</td><td>The db_load utility</td></tr>
+<tr><td>db_printlog</td><td>The db_printlog debugging utility</td></tr>
+<tr><td>db_recover</td><td>The db_recover utility</td></tr>
+<tr><td>db_stat</td><td>The db_stat utility</td></tr>
+<tr><td>db_upgrade</td><td>The db_upgrade utility</td></tr>
+<tr><td>db_verify</td><td>The db_verify utility</td></tr>
+<tr><td>dbinc</td><td>C language include files</td></tr>
+<tr><td>dbinc_auto</td><td>Automatically generated C language include files</td></tr>
+<tr><td>dbm</td><td>The dbm/ndbm compatibility APIs</td></tr>
+<tr><td>dbreg</td><td>Berkeley DB database handle logging support</td></tr>
+<tr><td>dist</td><td>Berkeley DB administration/distribution tools</td></tr>
+<tr><td>docs</td><td>Documentation</td></tr>
+<tr><td>env</td><td>Berkeley DB environment support</td></tr>
+<tr><td>examples_c</td><td>C API example programs</td></tr>
+<tr><td>examples_cxx</td><td>C++ API example programs</td></tr>
+<tr><td>examples_java</td><td>Java API example programs</td></tr>
+<tr><td>fileops</td><td>File object operation support</td></tr>
+<tr><td>hash</td><td>Hash access method</td></tr>
+<tr><td>hmac</td><td>Checksum support</td></tr>
+<tr><td>hsearch</td><td>The hsearch compatibility API</td></tr>
+<tr><td>java</td><td>Java API</td></tr>
+<tr><td>libdb_java</td><td>The libdb_java shared library</td></tr>
+<tr><td>lock</td><td>Lock manager</td></tr>
+<tr><td>log</td><td>Log manager</td></tr>
+<tr><td>mp</td><td>Shared memory buffer pool</td></tr>
+<tr><td>mutex</td><td>Mutexes</td></tr>
+<tr><td>os</td><td>POSIX 1003.1 operating-system specific functionality</td></tr>
+<tr><td>os_vxworks</td><td>VxWorks operating-system specific functionality</td></tr>
+<tr><td>os_win32</td><td>Windows operating-system specific functionality</td></tr>
+<tr><td>perl</td><td>DB_File and BerkeleyDB Perl modules</td></tr>
+<tr><td>qam</td><td>Queue access method source code</td></tr>
+<tr><td>rep</td><td>Replication source code</td></tr>
+<tr><td>rpc_client</td><td>RPC client support</td></tr>
+<tr><td>rpc_server</td><td>RPC server utility</td></tr>
+<tr><td>tcl</td><td>Tcl API</td></tr>
+<tr><td>test</td><td>Test suite</td></tr>
+<tr><td>txn</td><td>Transaction manager</td></tr>
+<tr><td>xa</td><td>X/Open Distributed Transaction Processing XA support</td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/refs/refs.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../distrib/port.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../refs/refs.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/distrib/port.html b/db/docs/ref/distrib/port.html
index d453973e9..b9aa39426 100644
--- a/db/docs/ref/distrib/port.html
+++ b/db/docs/ref/distrib/port.html
@@ -1,27 +1,27 @@
-<!--Id: port.so,v 10.3 2002/08/30 19:57:07 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: port.so,v 10.3 2002/08/30 19:57:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Porting Berkeley DB to new architectures</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distribution</dl></h3></td>
-<td align=right><a href="../../ref/test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Porting Berkeley DB to new architectures</h1>
+<h3 align=center>Porting Berkeley DB to new architectures</h3>
<p>Berkeley DB is generally easy to port to new architectures. Berkeley DB was
designed to be as portable as possible, and has been ported to a wide
variety of systems, from Wind River's Tornado system, to VMS, to
Windows/NT and Windows/95, and most existing UNIX platforms. It runs
on 16, 32 and 64-bit machines, little or big-endian. The difficulty of
a port depends on how much of the ANSI C and POSIX 1003.1 standards the
-new architecture offers.
+new architecture offers.</p>
<p>An abstraction layer separates the main Berkeley DB code from the operating
system and architecture specific components. This layer is comprised
of approximately 2500 lines of C language code, found in the <b>os</b>
@@ -30,8 +30,8 @@ include functionality that may need to be modified or implemented in
order to support a new architecture. Within each file, there is usually
one, but sometimes several functions (for example, the
<b>os_alloc.c</b> file contains the malloc, calloc, realloc, free,
-and strdup functions).
-<p><table border=1 align=center>
+and strdup functions).</p>
+<table border=1 align=center>
<tr><th>Source file</th><th>Description</th></tr>
<tr><td>os_abs.c</td><td>Return if a filename is an absolute pathname</td></tr>
<tr><td>os_alloc.c</td><td>ANSI C malloc, calloc, realloc, strdup, free front-ends</td></tr>
@@ -66,7 +66,7 @@ distribution. Where different code is required, the code is either
conditionally compiled or an entirely different version is written. For
example, VxWorks versions of some of these files can be found in the
distribution directory os_vxworks, and Win32 versions can be found in
-os_win32.
+os_win32.</p>
<p>Historically, there are only two difficult questions to answer for each
new port. The first question is how to handle shared memory. In order
to write multiprocess database applications (not multithreaded, but
@@ -79,14 +79,14 @@ address space, you should be able to use the code in
<b>os_vxworks/os_map.c</b> as a starting point for the port. If you
are not intending to write multiprocess database applications, then
this won't be necessary, as Berkeley DB can simply allocate memory from the
-heap if all threads of control will live in a single address space.
+heap if all threads of control will live in a single address space.</p>
<p>The second question is mutex support. Berkeley DB requires some form of
<b>self-blocking</b> mutual exclusion mutex. Blocking mutexes are
preferred as they tend to be less CPU-expensive and less likely to cause
thrashing. If blocking mutexes are not available, however, test-and-set
will work as well. The code for mutexes is in two places in the system:
the include file <b>dbinc/mutex.h</b>, and the distribution directory
-<b>mutex</b>.
+<b>mutex</b>.</p>
<p>Berkeley DB uses the GNU autoconf tools for configuration on almost all of
the platforms it supports. Specifically, the include file
<b>db_config.h</b> configures the Berkeley DB build. The simplest way to
@@ -98,13 +98,13 @@ the GNU autoconf toolset, we don't recommend you take the time to
integrate your changes back into the Berkeley DB autoconfiguration framework.
Instead, send Sleepycat Software context diffs of your changes and any
new source files you created, and we'll integrate the changes into our
-source tree.
+source tree.</p>
<p>Finally, we're happy to work with you on the port, or potentially, do
the port ourselves, if that is of interest to you. Regardless, if you
have any porting questions, just let us know, and we will be happy to
-answer them.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
+answer them.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../test/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/format.html b/db/docs/ref/dumpload/format.html
index fd52e530a..68fe67f00 100644
--- a/db/docs/ref/dumpload/format.html
+++ b/db/docs/ref/dumpload/format.html
@@ -1,41 +1,42 @@
-<!--$Id: format.so,v 10.14 2000/03/22 21:56:11 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: format.so,v 10.16 2001/03/13 20:39:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Dump output formats</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Dumping and Reloading</dl></h3></td>
-<td width="1%"><a href="../../ref/dumpload/utility.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/text.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../dumpload/utility.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/text.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Dump output formats</h1>
-<p>There are two output formats used by <a href="../../utility/db_dump.html">db_dump</a> and <a href="../../utility/db_dump.html">db_dump185</a>.
+<h3 align=center>Dump output formats</h3>
+<p>There are two output formats used by <a href="../../utility/db_dump.html">db_dump</a> and <a href="../../utility/db_dump.html">db_dump185</a>.</p>
<p>In both output formats, the first few lines of the output contain header
-information describing the underlying access method, filesystem page size
-and other bookkeeping information.
-<p>The header information starts with a single line VERSION=N, where N is
-the version number of the dump output format.
+information describing the underlying access method, filesystem page size,
+and other bookkeeping information.</p>
+<p>The header information starts with a single line, VERSION=N, where N is
+the version number of the dump output format.</p>
<p>The header information is then output in name=value pairs, where name may
be any of the keywords listed in the <a href="../../utility/db_load.html">db_load</a> manual page, and
-value will be its value. While this header information can be manually
+value will be its value. Although this header information can be manually
edited before the database is reloaded, there is rarely any reason to do
-so, as all of this information can also be specified or overridden by
-command-line arguments to <a href="../../utility/db_load.html">db_load</a>.
-<p>The header information ends with single line HEADER=END.
-<p>Following the header information are the key/data pairs from the database.
-If the database being dumped is of type Btree or Hash, or if the
-<b>-k</b> option as been specified, the output will be paired lines of
-text, where the first line of the pair is the key item, and the second
+so because all of this information can also be specified or overridden by
+command-line arguments to <a href="../../utility/db_load.html">db_load</a>.</p>
+<p>The header information ends with single line HEADER=END.</p>
+<p>Following the header information are the key/data pairs from the
+database. If the database being dumped is a Btree or Hash database, or
+if the <b>-k</b> option was specified, the output will be paired lines
+of text where the first line of the pair is the key item, and the second
line of the pair is its corresponding data item. If the database being
-dumped is of type Queue or Recno and the <b>-k</b> has not been
-specified, the output will be lines of text, where each line is the next
-data item for the database. Each of these lines will be preceded by a
-single space.
+dumped is a Queue or Recno database, and the <b>-k</b> option was not
+specified, the output will be lines of text where each line is the next
+data item for the database. Each of these lines is preceded by a single
+space.</p>
<p>If the <b>-p</b> option to <a href="../../utility/db_dump.html">db_dump</a> or <a href="../../utility/db_dump.html">db_dump185</a> was
specified, the key/data lines will consist of single characters
representing any characters from the database that are <i>printing
@@ -45,25 +46,25 @@ one of two things: if the backslash character precedes another backslash
character, it means that a literal backslash character occurred in the
key or data item. If the backslash character precedes any other
character, the next two characters must be interpreted as hexadecimal
-specification of a single character, e.g., <b>\0a</b> is
-a newline character in the ASCII character set.
+specification of a single character; for example, <b>\0a</b>
+is a newline character in the ASCII character set.</p>
<p>Although some care should be exercised, it is perfectly reasonable to use
standard text editors and tools to edit databases dumped using the
-<b>-p</b> option before re-loading them using the <a href="../../utility/db_load.html">db_load</a>
-utility.
+<b>-p</b> option before reloading them using the <a href="../../utility/db_load.html">db_load</a>
+utility.</p>
<p>Note that the definition of a printing character may vary from system to
-system, and so database representations created using the <b>-p</b>
-option may be less portable than those created without it.
+system, so database representations created using the <b>-p</b>
+option may be less portable than those created without it.</p>
<p>If the <b>-p</b> option to <a href="../../utility/db_dump.html">db_dump</a> or <a href="../../utility/db_dump.html">db_dump185</a> is
-not specified, each output line will consist of paired hexadecimal values,
-e.g., the line <b>726f6f74</b> is the string <b>root</b> in the ASCII
-character set.
+not specified, each output line will consist of paired hexadecimal values;
+for example, the line <b>726f6f74</b> is the string <b>root</b> in
+the ASCII character set.</p>
<p>In all output formats, the key and data items are ended by a single line
-DATA=END.
+DATA=END.</p>
<p>Where multiple databases have been dumped from a file, the overall output
-will repeat, i.e., a new set of headers and a new set of data items.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/dumpload/utility.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/text.html"><img src="../../images/next.gif" alt="Next"></a>
+will repeat; that is, a new set of headers and a new set of data items.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../dumpload/utility.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/text.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/text.html b/db/docs/ref/dumpload/text.html
index 569980a19..806f3bd08 100644
--- a/db/docs/ref/dumpload/text.html
+++ b/db/docs/ref/dumpload/text.html
@@ -1,32 +1,33 @@
-<!--$Id: text.so,v 10.14 2000/12/04 20:49:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: text.so,v 10.15 2001/03/13 20:39:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Loading text into databases</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Dumping and Reloading</dl></h3></td>
-<td width="1%"><a href="../../ref/dumpload/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/install/file.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../dumpload/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/file.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Loading text into databases</h1>
+<h3 align=center>Loading text into databases</h3>
<p>The <a href="../../utility/db_load.html">db_load</a> utility can be used to load text into databases.
-The <b>-T</b> option permits non-database applications to create
+The <b>-T</b> option permits nondatabase applications to create
flat-text files that are then loaded into databases for fast,
highly-concurrent access. For example, the following command loads the
standard UNIX <b>/etc/passwd</b> file into a database, with the login
-name as the key item and the entire password entry as the data item:
-<p><blockquote><pre>awk -F: '{print $1; print $0}' &lt; /etc/passwd |\
+name as the key item and the entire password entry as the data item:</p>
+<blockquote><pre>awk -F: '{print $1; print $0}' &lt; /etc/passwd |\
sed 's/\\/\\\\/g' | db_load -T -t hash passwd.db</pre></blockquote>
<p>Note that backslash characters naturally occurring in the text are escaped
-to avoid interpretation as escape characters by <a href="../../utility/db_load.html">db_load</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/dumpload/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/install/file.html"><img src="../../images/next.gif" alt="Next"></a>
+to avoid interpretation as escape characters by <a href="../../utility/db_load.html">db_load</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../dumpload/format.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/file.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/dumpload/utility.html b/db/docs/ref/dumpload/utility.html
index f9cb51c11..803110d1a 100644
--- a/db/docs/ref/dumpload/utility.html
+++ b/db/docs/ref/dumpload/utility.html
@@ -1,45 +1,46 @@
-<!--$Id: utility.so,v 10.15 2000/12/04 20:49:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: utility.so,v 10.17 2003/03/08 18:49:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: The db_dump and db_load utilities</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Dumping and Reloading</dl></h3></td>
-<td width="1%"><a href="../../ref/sendmail/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/format.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../tcl/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/format.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>The db_dump and db_load utilities</h1>
+<h3 align=center>The db_dump and db_load utilities</h3>
<p>There are three utilities used for dumping and loading Berkeley DB
-databases: <a href="../../utility/db_dump.html">db_dump</a>, <a href="../../utility/db_dump.html">db_dump185</a> and <a href="../../utility/db_load.html">db_load</a>.
+databases: <a href="../../utility/db_dump.html">db_dump</a>, <a href="../../utility/db_dump.html">db_dump185</a>, and <a href="../../utility/db_load.html">db_load</a>.</p>
<p>The <a href="../../utility/db_dump.html">db_dump</a> and <a href="../../utility/db_dump.html">db_dump185</a> utilities dump Berkeley DB
-databases into a flat-text representation of the data that can
-be read by <a href="../../utility/db_load.html">db_load</a>. The only difference between them
-is that <a href="../../utility/db_dump.html">db_dump</a> reads Berkeley DB version 2 and greater
-database formats, while <a href="../../utility/db_dump.html">db_dump185</a> reads Berkeley DB version
-1.85 and 1.86 database formats.
+databases into a flat-text representation of the data that can be read
+by <a href="../../utility/db_load.html">db_load</a>. The only difference between them is that
+<a href="../../utility/db_dump.html">db_dump</a> reads Berkeley DB version 2 and greater database formats,
+whereas <a href="../../utility/db_dump.html">db_dump185</a> reads Berkeley DB version 1.85 and 1.86 database
+formats.</p>
<p>The <a href="../../utility/db_load.html">db_load</a> utility reads either the output format used
-by the dump utilities or, optionally, a flat-text representation
-created using other tools, and stores it into a Berkeley DB database.
+by the dump utilities or (optionally) a flat-text representation
+created using other tools, and stores it into a Berkeley DB database.</p>
<p>Dumping and reloading Hash databases that use user-defined hash functions
-will result in new databases that use the default hash function. While
+will result in new databases that use the default hash function. Although
using the default hash function may not be optimal for the new database,
-it will continue to work correctly.
+it will continue to work correctly.</p>
<p>Dumping and reloading Btree databases that use user-defined prefix or
comparison functions will result in new databases that use the default
-prefix and comparison functions. In which case it is quite likely that
-applications will be unable to retrieve records, and possible that the
-load process itself will fail.
+prefix and comparison functions. In this case, it is quite likely that
+applications will be unable to retrieve records, and it is possible that
+the load process itself will fail.</p>
<p>The only available workaround for either Hash or Btree databases is to
modify the sources for the <a href="../../utility/db_load.html">db_load</a> utility to load the database
-using the correct hash, prefix and comparison functions.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/sendmail/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/format.html"><img src="../../images/next.gif" alt="Next"></a>
+using the correct hash, prefix, and comparison functions.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../tcl/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/format.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/create.html b/db/docs/ref/env/create.html
index 374c7a6e0..fb8975dd8 100644
--- a/db/docs/ref/env/create.html
+++ b/db/docs/ref/env/create.html
@@ -1,73 +1,130 @@
-<!--$Id: create.so,v 10.23 2000/12/04 18:05:41 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: create.so,v 10.29 2002/06/24 14:50:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Creating an Environment</title>
+<title>Berkeley DB Reference Guide: Creating a database environment</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Creating an Environment</h1>
-<p>The <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function is the standard function for creating or
-joining a database environment. Transaction-protected or multi-process
-applications should call <a href="../../api_c/env_open.html">DBENV-&gt;open</a> before making any other calls
-to the Berkeley DB library. Applications must obtain an environment handle from
-the <a href="../../api_c/env_create.html">db_env_create</a> function before calling <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.
-There are a large number of options that you can set to customize
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> for your environment. These options fall into four
-broad categories:
+<h3 align=center>Creating a database environment</h3>
+<p>The Berkeley DB environment is created and described by the <a href="../../api_c/env_class.html">db_env_create</a>
+and <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> interfaces. In situations where customization is
+desired, such as storing log files on a separate disk drive or selection
+of a particular cache size, applications must describe the customization
+by either creating an environment configuration file in the environment
+home directory or by arguments passed to other <a href="../../api_c/env_class.html">DB_ENV</a> handle methods.</p>
+<p>Once an environment has been created, database files specified using
+relative pathnames will be named relative to the home directory. Using
+pathnames relative to the home directory allows the entire environment
+to be easily moved, simplifying restoration and recovery of a database
+in a different directory or on a different system.</p>
+<p>Applications first obtain an environment handle using the
+<a href="../../api_c/env_class.html">db_env_create</a> method, then call the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method which creates
+or joins the database environment. There are a number of options you
+can set to customize <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> for your environment. These
+options fall into four broad categories:</p>
<p><dl compact>
<p><dt>Subsystem Initialization:<dd>These flags indicate which Berkeley DB subsystems will be initialized for the
-environment, and, what operations will happen automatically when
+environment, and what operations will happen automatically when
databases are accessed within the environment. The flags include
<a href="../../api_c/env_open.html#DB_JOINENV">DB_JOINENV</a>, <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a>, <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>,
-<a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a>, <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> and <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a>.
+<a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a>, <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>, and <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a>.
The <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag does initialization for Berkeley DB Concurrent Data Store
-applications, see <a href="../../ref/cam/intro.html">Building Berkeley DB Concurrent Data Store
-applications</a> for more information. The rest of the flags initialize
-a single subsystem, e.g., when <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> is specified,
+applications. (See <a href="../../ref/cam/intro.html">Building Berkeley DB Concurrent Data Store
+applications</a> for more information.) The rest of the flags initialize
+a single subsystem; that is, when <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> is specified,
applications reading and writing databases opened in this environment
will be using locking to ensure that they do not overwrite each other's
changes.
-<p><dt>Recovery options:<dd>These flags indicate what recovery is to be performed on the environment
-before it is opened for normal use, and include <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> and
-<a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a>.
-<p><dt>Naming options:<dd>These flags modify how file naming happens in the environment, and include
-<a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> and <a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a>.
-<p><dt>Miscellaneous:<dd>Finally, there are a number of miscellaneous flags such as <a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a>
-which causes underlying files to be created as necessary. See the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> manual pages for further information.
+<p><dt>Recovery options:<dd>These flags, which include <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> and
+<a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a>, indicate what recovery is to be performed on
+the environment before it is opened for normal use.
+<p><dt>Naming options:<dd>These flags, which include <a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> and
+<a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a>, modify how file naming happens in the
+environment.
+<p><dt>Miscellaneous:<dd>Finally, there are a number of miscellaneous flags, for example,
+<a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a> which causes underlying files to be created as
+necessary. See the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> manual pages for further
+information.
</dl>
<p>Most applications either specify only the <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> flag or
they specify all four subsystem initialization flags
-(<a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>, <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>, <a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a> and
+(<a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>, <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>, <a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a>, and
<a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a>). The former configuration is for applications that
simply want to use the basic Access Method interfaces with a shared
underlying buffer pool, but don't care about recoverability after
application or system failure. The latter is for applications that need
-recoverability. There are situations where other combinations of the
-initialization flags make sense, but they are rare.
+recoverability. There are situations in which other combinations of
+the initialization flags make sense, but they are rare.</p>
<p>The <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> flag is specified by applications that want to
-perform any necessary database recovery when they start running, i.e., if
-there was a system or application failure the last time they ran, they
-want the databases to be made consistent before they start running again.
-It is not an error to specify this flag when no recovery needs to be
-done.
+perform any necessary database recovery when they start running. That
+is, if there was a system or application failure the last time they ran,
+they want the databases to be made consistent before they start running
+again. It is not an error to specify this flag when no recovery needs
+to be done.</p>
<p>The <a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a> flag is more special-purpose. It performs
catastrophic database recovery, and normally requires that some initial
-arrangements be made, i.e., archived log files be brought back into the
-filesystem. Applications should not normally specify this flag. Instead,
-under these rare conditions, the <a href="../../utility/db_recover.html">db_recover</a> utility should be
-used.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
+arrangements be made; that is, archived log files be brought back into
+the filesystem. Applications should not normally specify this flag.
+Instead, under these rare conditions, the <a href="../../utility/db_recover.html">db_recover</a> utility
+should be used.</p>
+<p>The following is a simple example of a function that opens a database
+environment for a transactional program.</p>
+<blockquote><pre>DB_ENV *
+db_setup(home, data_dir, errfp, progname)
+ char *home, *data_dir, *progname;
+ FILE *errfp;
+{
+ DB_ENV *dbenv;
+ int ret;
+<p>
+ /*
+ * Create an environment and initialize it for additional error
+ * reporting.
+ */
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
+ return (NULL);
+ }
+ dbenv-&gt;set_errfile(dbenv, errfp);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+<p>
+ /*
+ * Specify the shared memory buffer pool cachesize: 5MB.
+ * Databases are in a subdirectory of the environment home.
+ */
+ if ((ret = dbenv-&gt;set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "set_cachesize");
+ goto err;
+ }
+ if ((ret = dbenv-&gt;set_data_dir(dbenv, data_dir)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "set_data_dir: %s", data_dir);
+ goto err;
+ }
+<p>
+ /* Open the environment with full transactional support. */
+ if ((ret = dbenv-&gt;open(dbenv, home, DB_CREATE |
+ DB_INIT_LOG | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_TXN, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "environment open: %s", home);
+ goto err;
+ }
+<p>
+ return (dbenv);
+<p>
+err: (void)dbenv-&gt;close(dbenv, 0);
+ return (NULL);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/db_config.html b/db/docs/ref/env/db_config.html
index bfb2afce2..1935840df 100644
--- a/db/docs/ref/env/db_config.html
+++ b/db/docs/ref/env/db_config.html
@@ -1,21 +1,21 @@
-<!--Id: db_config.so,v 10.1 2002/09/03 20:09:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: db_config.so,v 10.1 2002/09/03 20:09:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: DB_CONFIG configuration file</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td align=right><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>DB_CONFIG configuration file</h1>
+<h3 align=center>DB_CONFIG configuration file</h3>
<p>Most of the configuration information that can be specified to
<a href="../../api_c/env_class.html">DB_ENV</a> methods can also be specified using a configuration file.
If an environment home directory has been specified (either by the
@@ -24,7 +24,7 @@ application specifying a non-NULL <b>db_home</b> argument to
<a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> or <a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags and the
<a href="../../ref/env/naming.html#DB_HOME">DB_HOME</a> environment variable being set), any file named
DB_CONFIG in the database home directory will be read for lines
-of the format <b>NAME VALUE</b>.
+of the format <b>NAME VALUE</b>.</p>
<p>One or more whitespace characters are used to delimit the two parts of
the line, and trailing whitespace characters are discarded. All empty
lines or lines whose first character is a whitespace or hash
@@ -33,7 +33,7 @@ the NAME and the VALUE of the pair. The specific NAME VALUE pairs are
documented in the manual for the corresponding methods (for example,
the <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> documentation includes NAME VALUE pair
information Berkeley DB administrators can use to configure locations for
-database files).
+database files).</p>
<p>The DB_CONFIG configuration file is intended to allow database
environment administrators to customize environments independent of
applications using the environment. For example, a database
@@ -43,9 +43,9 @@ DB_CONFIG file is read when the database environment is opened,
it can be used to overrule application configuration done before that
time. For example a database administrator could override the
compiled-in application cache size to a size more appropriate for a
-specific machine.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
+specific machine.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/naming.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/encrypt.html b/db/docs/ref/env/encrypt.html
index 41ccfe23b..0d370d675 100644
--- a/db/docs/ref/env/encrypt.html
+++ b/db/docs/ref/env/encrypt.html
@@ -1,39 +1,28 @@
-<!--Id: encrypt.so,v 11.5 2002/04/18 19:23:24 sue Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: encrypt.so,v 11.11 2003/09/15 18:32:55 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Encryption</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td align=right><a href="../../ref/env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Encryption</h1>
-<p>Berkeley DB releases optionally include strong cryptography support. To
-determine if you have a Berkeley DB release that includes cryptography, check
-for a top-level directory named <b>crypto</b> in the distribution.
-Only releases including cryptography support will have a directory by
-that name. <b>Note that export/import and/or use of cryptography
-software, or even communicating technical details about cryptography
-software, is illegal in some parts of the world. You are strongly
-advised to pay close attention to any export/import and/or use laws
-which apply to you when you import release of Berkeley DB including
-cryptography to your country or re-distribute source code from it in
-any way.</b>
-<p>Berkeley DB supports encryption using the Rijndael/AES (also known as the
-Advanced Encryption Standard and Federal Information Processing Standard
-(FIPS) 197) algorithm for encryption or decryption. The algorithm is
-configured to use a 128-bit key. Berkeley DB uses a 16-byte initialization
-vector generated using the Mersenne Twister. All encrypted information
-is additionally checksummed using the SHA1 Secure Hash Algorithm, using
-a 160-bit message digest.
+<h3 align=center>Encryption</h3>
+<p>Berkeley DB optionally supports encryption using the Rijndael/AES (also known
+as the Advanced Encryption Standard and Federal Information Processing
+Standard (FIPS) 197) algorithm for encryption or decryption. The
+algorithm is configured to use a 128-bit key. Berkeley DB uses a 16-byte
+initialization vector generated using the Mersenne Twister. All
+encrypted information is additionally checksummed using the SHA1 Secure
+Hash Algorithm, using a 160-bit message digest.</p>
<p>The encryption support provided with Berkeley DB is intended to protect
applications from an attacker obtaining physical access to the media on
which a Berkeley DB database is stored, or an attacker compromising a system
@@ -41,20 +30,22 @@ on which Berkeley DB is running but who is unable to read system or process
memory on that system.
<b>The encryption support provided with Berkeley DB will not protect applications
from attackers able to read system memory on the system where Berkeley DB is
-running.</b>
+running.</b></p>
<p>Encryption is not the default for created databases, even in database
environments configured for encryption. In addition to configuring for
encryption by calling the <a href="../../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a> or
-<a href="../../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a> functions, applications must specify the
+<a href="../../api_c/db_set_encrypt.html">DB-&gt;set_encrypt</a> methods, applications must specify the
<a href="../../api_c/db_set_flags.html#DB_ENCRYPT">DB_ENCRYPT</a> flag before creating the database in order for the
database to be encrypted. Further, databases cannot be converted to an
encrypted format after they have been created without dumping and
-re-creating them.
+re-creating them. Finally, encrypted databases cannot be read
+on systems with a different endianness than the system that created
+the encrypted database.</p>
<p>Each encrypted database environment (including all its encrypted
databases) is encrypted using a single password and a single algorithm.
Applications wanting to provide a finer granularity of database access
must either use multiple database environments or implement additional
-access controls outside of Berkeley DB.
+access controls outside of Berkeley DB.</p>
<p>The only encrypted parts of a database environment are its databases
and its log files. Specifically, the <a href="../../ref/env/region.html">Shared memory regions</a> supporting the database environment are not
encrypted. For this reason, it may be possible for an attacker to read
@@ -62,7 +53,7 @@ some or all of an encrypted database by reading the on-disk files that
back these shared memory regions. To prevent such attacks, applications
may want to use in-memory filesystem support (on systems that support
it), or the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> or <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flags to the
-<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> function, to place the shared memory regions in memory that
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method, to place the shared memory regions in memory that
is never written to a disk. As some systems page system memory to a
backing disk, it is important to consider the specific operating system
running on the machine as well. Finally, when backing database
@@ -71,19 +62,19 @@ to overwrite the shared regions before removing them by specifying the
<a href="../../api_c/env_set_flags.html#DB_OVERWRITE">DB_OVERWRITE</a> flag. This option is only effective in the
presence of fixed-block filesystems, journaling or logging filesystems
will require operating system support and probably modification of the
-Berkeley DB sources.
+Berkeley DB sources.</p>
<p>While all user data is encrypted, parts of the databases and log files
in an encrypted environment are maintained in an unencrypted state.
Specifically, log record headers are not encrypted, only the actual log
records. Additionally, database internal page header fields are not
encrypted. These page header fields includes information such as the
-page's <a href="../../api_c/db_lsn.html">DB_LSN</a>, number, and position in the database's sort
-order.
+page's <a href="../../api_c/lsn_class.html">DB_LSN</a>, number, and position in the database's sort
+order.</p>
<p>Log records distributed by replication master to replicated clients are
transmitted to the clients in unencrypted form. If encryption is
desired in a replicated application, the use of a secure transport
-is strongly suggested.
-<p>Sleepycat Software gratefully acknowledges:
+is strongly suggested.</p>
+<p>Sleepycat Software gratefully acknowledges:</p>
<p><ul type=disc>
<li>Vincent Rijmen, Antoon Bosselaers and Paulo Barreto for writing the
Rijndael/AES code used in Berkeley DB.
@@ -94,8 +85,8 @@ code used in Berkeley DB.
<li>Adam Stubblefield for integrating the Rijndael/AES, SHA1 checksum and
Mersenne Twister code into Berkeley DB.
</ul>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/error.html b/db/docs/ref/env/error.html
index 1a79d8fe5..18dc0fc99 100644
--- a/db/docs/ref/env/error.html
+++ b/db/docs/ref/env/error.html
@@ -1,43 +1,44 @@
-<!--$Id: error.so,v 10.13 2001/01/11 15:23:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: error.so,v 10.20 2003/10/18 19:16:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Error support</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/db_config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Error support</h1>
+<h3 align=center>Error support</h3>
<p>Berkeley DB offers programmatic support for displaying error return values.
-The <a href="../../api_c/env_strerror.html">db_strerror</a> interface returns a pointer to the error
-message corresponding to any Berkeley DB error return, similar to the ANSI C
-strerror interface, but able to handle both system error returns and
-Berkeley DB specific return values.
-<p>For example:
-<p><blockquote><pre>int ret;
-if ((ret = dbenv-&gt;set_cachesize(dbenv, 0, 32 * 1024)) != 0) {
+The <a href="../../api_c/env_strerror.html">db_strerror</a> function returns a pointer to the error
+message corresponding to any Berkeley DB error return. This is similar to the
+ANSI C strerror interface, but can handle both system error returns and
+Berkeley DB-specific return values.</p>
+<p>For example:</p>
+<blockquote><pre>int ret;
+if ((ret = dbenv-&gt;set_cachesize(dbenv, 0, 32 * 1024, 1)) != 0) {
fprintf(stderr, "set_cachesize failed: %s\n", db_strerror(ret));
return (1);
}</pre></blockquote>
-<p>There are also two additional error functions, <a href="../../api_c/db_err.html">DBENV-&gt;err</a> and
-<a href="../../api_c/db_err.html">DBENV-&gt;errx</a>. These functions work like the ANSI C printf
-interface, taking a printf-style format string and argument list, and
-writing a message constructed from the format string and arguments.
-<p>The <a href="../../api_c/db_err.html">DBENV-&gt;err</a> function appends the standard error string to the
-constructed message and the <a href="../../api_c/db_err.html">DBENV-&gt;errx</a> function does not.
-<p>Error messages can be configured always to include a prefix (e.g., the
-program name) using the <a href="../../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> interface.
-<p>These functions provide simpler ways of displaying Berkeley DB error messages:
-<p><blockquote><pre>int ret;
-dbenv-&gt;set_errpfx(dbenv, argv0);
-if ((ret = dbenv-&gt;open(dbenv, home, NULL,
- DB_CREATE | DB_INIT_LOG | DB_INIT_TXN | DB_USE_ENVIRON))
+<p>There are also two additional error methods: <a href="../../api_c/env_err.html">DB_ENV-&gt;err</a> and
+<a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a>. These methods work like the ANSI C printf function,
+taking a printf-style format string and argument list, and writing a
+message constructed from the format string and arguments.</p>
+<p>The <a href="../../api_c/env_err.html">DB_ENV-&gt;err</a> function appends the standard error string to the
+constructed message; the <a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a> function does not.</p>
+<p>Error messages can be configured always to include a prefix (for
+example, the program name) using the <a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> method.</p>
+<p>These functions provide simpler ways of displaying Berkeley DB error messages:</p>
+<blockquote><pre>int ret;
+dbenv-&gt;set_errpfx(dbenv, program_name);
+if ((ret = dbenv-&gt;open(dbenv, home,
+ DB_CREATE | DB_INIT_LOG | DB_INIT_TXN | DB_USE_ENVIRON, 0))
!= 0) {
dbenv-&gt;err(dbenv, ret, "open: %s", home);
dbenv-&gt;errx(dbenv,
@@ -45,13 +46,13 @@ if ((ret = dbenv-&gt;open(dbenv, home, NULL,
session_id);
return (1);
}</pre></blockquote>
-<p>For example, if the program was called "my_app", attempting to open an
-environment home directory in "/tmp/home", and the open call returned a
-permission error, the error messages shown would look like:
-<p><blockquote><pre>my_app: open: /tmp/home: Permission denied.
+<p>For example, if the program was called "my_app", and it tried to open
+an environment home directory in "/tmp/home" and the open call returned
+a permission error, the error messages shown would look like this:</p>
+<blockquote><pre>my_app: open: /tmp/home: Permission denied.
my_app: contact your system administrator: session ID was 2</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/db_config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/faq.html b/db/docs/ref/env/faq.html
index b6d572210..a6d1efa5d 100644
--- a/db/docs/ref/env/faq.html
+++ b/db/docs/ref/env/faq.html
@@ -1,21 +1,22 @@
-<!--Id: faq.so,v 10.1 2001/04/25 15:10:45 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.5 2002/02/04 17:52:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Environment FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td align=right><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/remote.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Environment FAQ</h1>
-<p><ol>
+<h3 align=center>Environment FAQ</h3>
+<ol>
<p><li><b>I'm using multiple processes to access an Berkeley DB database
environment; is there any way to ensure that two processes don't run
recovery at the same time, or that all processes have exited the
@@ -26,16 +27,34 @@ are other processes running recovery or using an existing database
environment. It would be great if Berkeley DB could solve this, but it
requires a way to single-thread execution on a system, and there's
rarely anything Berkeley DB can use for that purpose -- let alone a portable
-method.
+method.</p>
<p>Most application suites solve this problem by writing a tiny watch
program that recovers the database environment and then runs the
processes that actually use the database environment to perform work.
The watcher program then monitors the working processes, and if any of
them exit badly for any reason, the watcher kills any remaining
-processes and restarts the cycle.
+processes and restarts the cycle.</p>
+<p><li><b>How can I associate application information with a <a href="../../api_c/db_class.html">DB</a>
+or <a href="../../api_c/env_class.html">DB_ENV</a> handle?</b>
+<p>In the C API, the <a href="../../api_c/db_class.html">DB</a> and <a href="../../api_c/env_class.html">DB_ENV</a> structures each contain
+an "app_private" field intended to be used to reference
+application-specific information. See the <a href="../../api_c/db_class.html">db_create</a> and
+<a href="../../api_c/env_class.html">db_env_create</a> documentation for more information.</p>
+<p>In the C++ or Java APIs, the easiest way to associate
+application-specific data with a handle is to subclass the <a href="../../api_cxx/db_class.html">Db</a>
+or <a href="../../api_cxx/env_class.html">DbEnv</a>, for example subclassing <a href="../../api_cxx/db_class.html">Db</a> to get MyDb.
+Objects of type MyDb will still have the Berkeley DB API methods available on
+them, and you can put any extra data or methods you want into the MyDb
+class. If you are using "callback" APIs that take <a href="../../api_cxx/db_class.html">Db</a> or
+<a href="../../api_cxx/env_class.html">DbEnv</a> arguments (for example, <a href="../../api_cxx/db_set_bt_compare.html">Db::set_bt_compare</a>)
+these will always be called with the <a href="../../api_cxx/db_class.html">Db</a> or <a href="../../api_cxx/env_class.html">DbEnv</a>
+objects you create. So if you always use MyDb objects, you will be able
+to take the first argument to the callback function and cast it to a
+MyDb (in C++, cast it to (MyDb*)). That will allow you to access your
+data members or methods.</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/env/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/remote.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../cam/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/intro.html b/db/docs/ref/env/intro.html
index a555c2f0f..7a86ed745 100644
--- a/db/docs/ref/env/intro.html
+++ b/db/docs/ref/env/intro.html
@@ -1,56 +1,120 @@
-<!--$Id: intro.so,v 10.25 2000/03/18 21:43:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.32 2003/04/15 16:48:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Introduction</title>
+<title>Berkeley DB Reference Guide: Database environment introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/arch/utilities.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/create.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../arch/utilities.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/create.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
+<h3 align=center>Database environment introduction</h3>
<p>A Berkeley DB environment is an encapsulation of one or more databases, log
-files and shared information about the database environment such as shared
-memory buffer cache pages.
+files and region files. Region files are the shared memory areas that
+contain information about the database environment such as memory pool
+cache pages. Only databases are byte-order independent and only
+database files can be moved between machines of different byte orders.
+Log files can be moved between machines of the same byte order. Region
+files are usually unique to a specific machine and potentially to a
+specific operating system release.</p>
<p>The simplest way to administer a Berkeley DB application environment is to
create a single <b>home</b> directory that stores the files for the
applications that will share the environment. The environment home
directory must be created before any Berkeley DB applications are run. Berkeley DB
itself never creates the environment home directory. The environment can
-then be identified by the name of that directory.
-<p>An environment may be shared by any number of applications as well as by
-any number of threads within the applications. It is possible for an
+then be identified by the name of that directory.</p>
+<p>An environment may be shared by any number of processes, as well as by
+any number of threads within those processes. It is possible for an
environment to include resources from other directories on the system,
-and applications often choose to distribute resources to other directories
-or disks for performance or other reasons. However, by default, the
-databases, shared regions (the locking, logging, memory pool, and
-transaction shared memory areas) and log files will be stored in a single
-directory hierarchy.
+and applications often choose to distribute resources to other
+directories or disks for performance or other reasons. However, by
+default, the databases, shared regions (the locking, logging, memory
+pool, and transaction shared memory areas) and log files will be stored
+in a single directory hierarchy.</p>
<p>It is important to realize that all applications sharing a database
-environment implicitly trust each other. They have access to each other's
-data as it resides in the shared regions and they will share resources
-such as buffer space and locks. At the same time, any applications using
-the same databases <b>must</b> share an environment if consistency is
-to be maintained between them.
-<p>The Berkeley DB environment is created and described by the <a href="../../api_c/env_create.html">db_env_create</a>
-and <a href="../../api_c/env_open.html">DBENV-&gt;open</a> interfaces. In situations where customization is
-desired, such as storing log files on a separate disk drive, applications
-must describe the customization by either creating an environment
-configuration file in the environment home directory or by arguments
-passed to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> interface. See the documentation on that
-function for details on this procedure.
-<p>Once an environment has been created, database files specified using
-relative pathnames will be named relative to the home directory. Using
-pathnames relative to the home directory allows the entire environment
-to be easily moved to facilitate restoring and recovering a database in
-a different directory or on a different system.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/arch/utilities.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/create.html"><img src="../../images/next.gif" alt="Next"></a>
+environment implicitly trust each other. They have access to each
+other's data as it resides in the shared regions, and they will share
+resources such as buffer space and locks. At the same time, any
+applications using the same databases <b>must</b> share an environment
+if consistency is to be maintained between them.</p>
+<!--$Id: m4.methods,v 10.2 2003/10/18 19:15:47 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Database Environments and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/env_class.html">db_env_create</a></td><td>Create an environment handle</td></tr>
+<tr><td><a href="../../api_c/env_close.html">DB_ENV-&gt;close</a></td><td>Close an environment</td></tr>
+<tr><td><a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a></td><td>Remove a database</td></tr>
+<tr><td><a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a></td><td>Rename a database</td></tr>
+<tr><td><a href="../../api_c/env_err.html">DB_ENV-&gt;err</a></td><td>Error message with error string</td></tr>
+<tr><td><a href="../../api_c/env_err.html">DB_ENV-&gt;errx</a></td><td>Error message</td></tr>
+<tr><td><a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a></td><td>Perform deadlock detection</td></tr>
+<tr><td><a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a></td><td>Acquire a lock</td></tr>
+<tr><td><a href="../../api_c/lock_id.html">DB_ENV-&gt;lock_id</a></td><td>Acquire a locker ID</td></tr>
+<tr><td><a href="../../api_c/lock_id_free.html">DB_ENV-&gt;lock_id_free</a></td><td>Release a locker ID</td></tr>
+<tr><td><a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a></td><td>Release a lock</td></tr>
+<tr><td><a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
+<tr><td><a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
+<tr><td><a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
+<tr><td><a href="../../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a></td><td>Create a log cursor handle</td></tr>
+<tr><td><a href="../../api_c/log_file.html">DB_ENV-&gt;log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
+<tr><td><a href="../../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<tr><td><a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
+<tr><td><a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
+<tr><td><a href="../../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Open a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_register.html">DB_ENV-&gt;memp_register</a></td><td>Register input/output functions for a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
+<tr><td><a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
+<tr><td><a href="../../api_c/env_open.html">DB_ENV-&gt;open</a></td><td>Open an environment</td></tr>
+<tr><td><a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a></td><td>Remove an environment</td></tr>
+<tr><td><a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
+<tr><td><a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></td><td>Process a replication message</td></tr>
+<tr><td><a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
+<tr><td><a href="../../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
+<tr><td><a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a></td><td>Set local space allocation functions</td></tr>
+<tr><td><a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a></td><td>Configure application recovery</td></tr>
+<tr><td><a href="../../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
+<tr><td><a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a></td><td>Set the environment data directory</td></tr>
+<tr><td><a href="../../api_c/env_set_encrypt.html">DB_ENV-&gt;set_encrypt</a></td><td>Set the environment cryptographic key</td></tr>
+<tr><td><a href="../../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a></td><td>Set error message callback</td></tr>
+<tr><td><a href="../../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a></td><td>Set error message FILE</td></tr>
+<tr><td><a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td><td>Set error message prefix</td></tr>
+<tr><td><a href="../../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a></td><td>Set feedback callback</td></tr>
+<tr><td><a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a></td><td>Environment configuration</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a></td><td>Set log buffer size</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a></td><td>Set log file size</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a></td><td>Set logging region size</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
+<tr><td><a href="../../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
+<tr><td><a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td><td>Set panic callback</td></tr>
+<tr><td><a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a></td><td>Limit data sent in response to a single message</td></tr>
+<tr><td><a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
+<tr><td><a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a></td><td>Establish an RPC server connection</td></tr>
+<tr><td><a href="../../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a></td><td>Set system memory shared segment ID</td></tr>
+<tr><td><a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a></td><td>Set the number of test-and-set spins</td></tr>
+<tr><td><a href="../../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
+<tr><td><a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a></td><td>Set the environment temporary file directory</td></tr>
+<tr><td><a href="../../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
+<tr><td><a href="../../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
+<tr><td><a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a></td><td>Set verbose messages</td></tr>
+<tr><td><a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a></td><td>Begin a transaction</td></tr>
+<tr><td><a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
+<tr><td><a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a></td><td>Distributed transaction recovery</td></tr>
+<tr><td><a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../arch/utilities.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/create.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/naming.html b/db/docs/ref/env/naming.html
index fd5753962..e6234befd 100644
--- a/db/docs/ref/env/naming.html
+++ b/db/docs/ref/env/naming.html
@@ -1,145 +1,127 @@
-<!--$Id: naming.so,v 10.36 2001/01/09 15:36:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: naming.so,v 10.49 2003/10/24 22:27:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: File naming</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/create.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/security.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/db_config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/region.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>File naming</h1>
-<p>The most important task of the environment is to structure file naming
-within Berkeley DB.
-<p>Each of the locking, logging, memory pool and transaction subsystems of
-Berkeley DB require shared memory regions, backed by the filesystem. Further,
-cooperating applications (or multiple invocations of the same application)
-must agree on the location of the shared memory regions and other files
-used by the Berkeley DB subsystems, the log files used by the logging subsystem,
-and, of course, the data files. Although it is possible to specify full
-pathnames to all Berkeley DB functions, this is cumbersome and requires
-that applications be recompiled when database files are moved.
-<p>Applications are normally expected to specify a single directory home for
-their database. This can be done easily in the call to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>
-by specifying a value for the <b>db_home</b> argument. There are more
-complex configurations where it may be desirable to override
-<b>db_home</b> or provide supplementary path information.
+<h3 align=center>File naming</h3>
+<p>One of the most important tasks of the database environment is to
+structure file naming within Berkeley DB. Cooperating applications (or
+multiple invocations of the same application) must agree on the location
+of the database environment, log files and other files used by the Berkeley DB
+subsystems, and, of course, the database files. Although it is possible
+to specify full pathnames to all Berkeley DB methods, this is cumbersome and
+requires applications be recompiled when database files are moved.</p>
+<p>Applications are normally expected to specify a single directory home
+for the database environment. This can be done easily in the call to
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> by specifying a value for the <b>db_home</b>
+argument. There are more complex configurations in which it may be
+desirable to override <b>db_home</b> or provide supplementary path
+information.</p>
<h3>Specifying file naming to Berkeley DB</h3>
-<p>The following describes the possible ways in which file naming information
-may be specified to the Berkeley DB library. The specific circumstances and
-order in which these ways are applied are described in a subsequent
-paragraph.
+<p>The following list describes the possible ways in which file naming
+information may be specified to the Berkeley DB library. The specific
+circumstances and order in which these ways are applied are described
+in a subsequent paragraph.</p>
<p><dl compact>
-<p><dt><b><a name="db_home">db_home</a></b><dd>If the <b>db_home</b> argument to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> is non-NULL, its
-value may be used as the database home, and files named relative to its
-path.
-<p><dt><a name="DB_HOME">DB_HOME</a><dd>If the DB_HOME environment variable is set when <a href="../../api_c/env_open.html">DBENV-&gt;open</a> is
+<p><dt><a name="db_home">db_home</a><dd>If the <b>db_home</b> argument to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> is non-NULL,
+its value may be used as the database home, and files named relative to
+its path.
+<p><dt><a name="DB_HOME">DB_HOME</a><dd>If the DB_HOME environment variable is set when <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> is
called, its value may be used as the database home, and files named
relative to its path.
<p>The DB_HOME environment variable is intended to permit users and system
-administrators to override application and installation defaults, e.g.:
-<p><blockquote><pre>env DB_HOME=/database/my_home application</pre></blockquote>
+administrators to override application and installation defaults. For
+example::</p>
+<blockquote><pre>env DB_HOME=/database/my_home application</pre></blockquote>
<p>Application writers are encouraged to support the <b>-h</b> option
found in the supporting Berkeley DB utilities to let users specify a database
-home.
-<p><dt>DB_ENV methods<dd>There are three DB_ENV methods that affect file naming. The
-<a href="../../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a> function specifies a directory to search for database
-files. The <a href="../../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a> function specifies a directory in which to
-create logging files. The <a href="../../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a> function specifies a
-directory in which to create backing temporary files. These methods are
-intended to permit applications to customize file location for a database.
-For example, an application writer can place data files and log files in
-different directories, or instantiate a new log directory each time the
-application runs.
-<p><dt><a name="DB_CONFIG">DB_CONFIG</a><dd>The same information specified to the above DB_ENV methods may also
-be specified using a configuration file. If an environment home directory
-has been specified (either by the application specifying a non-NULL
-<b>db_home</b> argument to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, or by the application
-setting the DB_USE_ENVIRON or DB_USE_ENVIRON_ROOT flags and the DB_HOME
-environment variable being set), any file named <b>DB_CONFIG</b> in the
-database home directory will be read for lines of the format <b>NAME
-VALUE</b>.
-<p>The characters delimiting the two parts of the entry may be one or more
-whitespace characters, and trailing whitespace characters are discarded.
-All empty lines or lines whose first character is a whitespace or hash
-(<b>#</b>) character will be ignored. Each line must specify both
-the NAME and the VALUE of the pair. The specific NAME VALUE pairs are
-documented in the manual <a href="../../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a>,
-<a href="../../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a> and <a href="../../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a> pages.
-<p>The DB_CONFIG configuration file is intended to permit systems to
-customize file location for an environment independent of applications
-using that database. For example, a database administrator can move the
-database log and data files to a different location without application
-recompilation.
+home.</p>
+<p><dt><a href="../../api_c/env_class.html">DB_ENV</a> methods<dd>There are three <a href="../../api_c/env_class.html">DB_ENV</a> methods that affect file naming. The
+<a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> method specifies a directory to search for database
+files. The <a href="../../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a> method specifies a directory in which to
+create logging files. The <a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a> method specifies a
+directory in which to create backing temporary files. These methods
+are intended to permit applications to customize a file location for a
+database. For example, an application writer can place data files and
+log files in different directories or instantiate a new log directory
+each time the application runs.
+<p><dt><a href="../../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a><dd>The same information specified to the <a href="../../api_c/env_class.html">DB_ENV</a> methods may also be
+specified using the <a href="../../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> configuration file.
</dl>
-<h3>File name resolution in Berkeley DB</h3>
-<p>The following describes the specific circumstances and order in which the
-different ways of specifying file naming information are applied. Berkeley DB
-file name processing proceeds sequentially through the following steps:
+<h3>Filename resolution in Berkeley DB</h3>
+<p>The following list describes the specific circumstances and order in
+which the different ways of specifying file naming information are
+applied. Berkeley DB filename processing proceeds sequentially through the
+following steps:</p>
<p><dl compact>
-<p><dt>absolute pathnames<dd>If the file name specified to a Berkeley DB function is an absolute pathname,
-that file name is used without modification by Berkeley DB.
+<p><dt>absolute pathnames<dd>If the filename specified to a Berkeley DB function is an <i>absolute
+pathname</i>, that filename is used without modification by Berkeley DB.
<p>On UNIX systems, an absolute pathname is defined as any pathname that
-begins with a leading slash (<b>/</b>).
+begins with a leading slash (<b>/</b>).</p>
<p>On Windows systems, an absolute pathname is any pathname that begins with
-a leading slash or leading backslash (<b>\</b>), or any
+a leading slash or leading backslash (<b>\</b>); or any
pathname beginning with a single alphabetic character, a colon and a
-leading slash or backslash, e.g., <b>C:/tmp</b>.
-<p><dt>DB_ENV methods, DB_CONFIG<dd>If a relevant configuration string (e.g., set_data_dir), is specified
-either by calling a DB_ENV method or as a line in the DB_CONFIG
-configuration file, the VALUE from the <b>NAME VALUE</b> pair is
-prepended to the current file name. If the resulting file name is an
-absolute pathname, the file name is used without further modification by
-Berkeley DB.
-<p><dt><b>db_home</b><dd>If the application specified a non-NULL <b>db_home</b> argument to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> its value is prepended to the current file name. If
-the resulting file name is an absolute pathname, the file name is used
+leading slash or backslash (for example, <b>C:/tmp</b>).</p>
+<p><dt><a href="../../api_c/env_class.html">DB_ENV</a> methods, DB_CONFIG<dd>If a relevant configuration string (for example, set_data_dir), is
+specified either by calling a <a href="../../api_c/env_class.html">DB_ENV</a> method or as a line in the
+DB_CONFIG configuration file, the value is prepended to the filename.
+If the resulting filename is an absolute pathname, the filename is used
without further modification by Berkeley DB.
-<p><dt>DB_HOME<dd>If the <b>db_home</b> argument is null, the DB_HOME environment variable
-was set and the application has set the appropriate DB_USE_ENVIRON or
-DB_USE_ENVIRON_ROOT environment variable, its value is prepended to the
-current file name. If the resulting file name is an absolute pathname,
-the file name is used without further modification by Berkeley DB.
-<p><dt>(nothing)<dd>Finally, all file names are interpreted relative to the current working
+<p><dt>db_home<dd>If the application specified a non-NULL <b>db_home</b> argument to
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, its value is prepended to the filename. If the
+resulting filename is an absolute pathname, the filename is used without
+further modification by Berkeley DB.
+<p><dt>DB_HOME<dd>If the <b>db_home</b> argument is NULL, the DB_HOME environment
+variable was set, and the application has set the appropriate
+<a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> or <a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags, its value
+is prepended to the filename. If the resulting filename is an absolute
+pathname, the filename is used without further modification by Berkeley DB.
+<p><dt>default<dd>Finally, all filenames are interpreted relative to the current working
directory of the process.
</dl>
-<p>The common model for a Berkeley DB environment is one where only the DB_HOME
-environment variable, or the <b>db_home</b> argument, is specified. In
-this case, all data file names are relative to that directory, and all
-files created by the Berkeley DB subsystems will be created in that directory.
-<p>The more complex model for a transaction environment might be one where
-a database home is specified, using either the DB_HOME environment
-variable or the <b>db_home</b> argument to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, and then
-the data directory and logging directory are set to the relative path
-names of directories underneath the environment home.
+<p>The common model for a Berkeley DB environment is one in which only the DB_HOME
+environment variable, or the <b>db_home</b> argument is specified. In
+this case, all data filenames are relative to that directory, and all
+files created by the Berkeley DB subsystems will be created in that directory.</p>
+<p>The more complex model for a transaction environment might be one in
+which a database home is specified, using either the DB_HOME environment
+variable or the <b>db_home</b> argument to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>; and then
+the data directory and logging directory are set to the relative
+pathnames of directories underneath the environment home.</p>
<h3>Examples</h3>
-Store all files in the directory <b>/a/database</b>:
-<p><blockquote><pre>DBENV-&gt;open(DBENV, "/a/database", ...);</pre></blockquote>
-Create temporary backing files in <b>/b/temporary</b>, and all other files
-in <b>/a/database</b>:
-<p><blockquote><pre>DBENV-&gt;set_tmp_dir(DBENV, "/b/temporary");
-DBENV-&gt;open(DBENV, "/a/database", ...);</pre></blockquote>
-Store data files in <b>/a/database/datadir</b>, log files in
+<p>Store all files in the directory <b>/a/database</b>:</p>
+<blockquote><pre>dbenv-&gt;open(dbenv, "/a/database", flags, mode);</pre></blockquote>
+<p>Create temporary backing files in <b>/b/temporary</b>, and all other files
+in <b>/a/database</b>:</p>
+<blockquote><pre>dbenv-&gt;set_tmp_dir(dbenv, "/b/temporary");
+dbenv-&gt;open(dbenv, "/a/database", flags, mode);</pre></blockquote>
+<p>Store data files in <b>/a/database/datadir</b>, log files in
<b>/a/database/logdir</b>, and all other files in the directory
-<b>/a/database</b>:
-<p><blockquote><pre>DBENV-&gt;set_lg_dir("logdir");
-DBENV-&gt;set_data_dir("datadir");
-DBENV-&gt;open(DBENV, "/a/database", ...);</pre></blockquote>
+<b>/a/database</b>:</p>
+<blockquote><pre>dbenv-&gt;set_lg_dir(dbenv, "logdir");
+dbenv-&gt;set_data_dir(dbenv, "datadir");
+dbenv-&gt;open(dbenv, "/a/database", flags, mode);</pre></blockquote>
<p>Store data files in <b>/a/database/data1</b> and <b>/b/data2</b>, and
all other files in the directory <b>/a/database</b>. Any data files
-that are created will be created in <b>/b/data2</b>, because it is the
-first DB_DATA_DIR directory specified:
-<p><blockquote><pre>DBENV-&gt;set_data_dir(DBENV, "/b/data2");
-DBENV-&gt;set_data_dir(DBENV, "data1");
-DBENV-&gt;open(DBENV, "/a/database", ...);</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/create.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/security.html"><img src="../../images/next.gif" alt="Next"></a>
+that are created will be created in <b>/b/data2</b>, because it is
+the first data file directory specified:</p>
+<blockquote><pre>dbenv-&gt;set_data_dir(dbenv, "/b/data2");
+dbenv-&gt;set_data_dir(dbenv, "data1");
+dbenv-&gt;open(dbenv, "/a/database", flags, mode);</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/db_config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/region.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/open.html b/db/docs/ref/env/open.html
index f13675c73..32f3a93d5 100644
--- a/db/docs/ref/env/open.html
+++ b/db/docs/ref/env/open.html
@@ -1,30 +1,90 @@
-<!--$Id: open.so,v 10.14 2000/03/18 21:43:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: open.so,v 10.19 2003/10/18 19:16:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Opening databases within the environment</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/remote.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/create.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening databases within the environment</h1>
+<h3 align=center>Opening databases within the environment</h3>
<p>Once the environment has been created, database handles may be created
and then opened within the environment. This is done by calling the
-<a href="../../api_c/db_create.html">db_create</a> interface and specifying the appropriate environment
-as an argument.
-<p>File naming, database operations and error handling will all be done as
-specified for the environment, e.g., if the <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> or
-<a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flags were specified when the environment was created
-or joined, database operations will automatically perform all necessary
-locking operations for the application.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/remote.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_class.html">db_create</a> function and specifying the appropriate environment
+as an argument.</p>
+<p>File naming, database operations, and error handling will all be done as
+specified for the environment. For example, if the <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>
+or <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flags were specified when the environment was
+created or joined, database operations will automatically perform all
+necessary locking operations for the application.</p>
+<p>The following is a simple example of opening two databases within a
+database environment:</p>
+<blockquote><pre> DB_ENV *dbenv;
+ DB *dbp1, *dbp2;
+ int ret;
+<p>
+ dbenv = NULL;
+ dbp1 = dbp2 = NULL;
+<p>
+ /*
+ * Create an environment and initialize it for additional error
+ * reporting.
+ */
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
+ return (ret);
+ }
+<p>
+ dbenv-&gt;set_errfile(dbenv, errfp);
+ dbenv-&gt;set_errpfx(dbenv, progname);
+<p>
+ /* Open an environment with just a memory pool. */
+ if ((ret =
+ dbenv-&gt;open(dbenv, home, DB_CREATE | DB_INIT_MPOOL, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "environment open: %s", home);
+ goto err;
+ }
+<p>
+ /* Open database #1. */
+ if ((ret = db_create(&dbp1, dbenv, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "database create");
+ goto err;
+ }
+ if ((ret = dbp1-&gt;open(dbp1,
+ NULL, DATABASE1, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB-&gt;open: %s", DATABASE1);
+ goto err;
+ }
+<p>
+ /* Open database #2. */
+ if ((ret = db_create(&dbp2, dbenv, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "database create");
+ goto err;
+ }
+ if ((ret = dbp2-&gt;open(dbp2,
+ NULL, DATABASE2, NULL, DB_HASH, DB_CREATE, 0664)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB-&gt;open: %s", DATABASE2);
+ goto err;
+ }
+<p>
+ return (0);
+<p>
+err: if (dbp2 != NULL)
+ (void)dbp2-&gt;close(dbp2, 0);
+ if (dbp1 != NULL)
+ (void)dbp2-&gt;close(dbp1, 0);
+ (void)dbenv-&gt;close(dbenv, 0);
+ return (1);
+}</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/create.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/region.html b/db/docs/ref/env/region.html
index 0dfa19672..6bcf7c02b 100644
--- a/db/docs/ref/env/region.html
+++ b/db/docs/ref/env/region.html
@@ -1,66 +1,75 @@
-<!--$Id: region.so,v 10.23 2000/08/09 15:45:52 sue Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: region.so,v 10.30 2003/08/18 21:21:31 ubell Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Shared Memory Regions</title>
+<title>Berkeley DB Reference Guide: Shared memory regions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/naming.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/security.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Shared Memory Regions</h1>
+<h3 align=center>Shared memory regions</h3>
<p>Each of the Berkeley DB subsystems within an environment is described by one or
more regions. The regions contain all of the per-process and per-thread
shared information, including mutexes, that comprise a Berkeley DB environment.
These regions are created in one of three areas, depending on the flags
-specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function:
-<p><ol>
-<p><li>If the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag is specified to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, regions
-are created in per-process heap memory, i.e., memory returned by
-<b>malloc</b>(3). In this case, the Berkeley DB environment may only be
-accessed by a single process, although that process may be
-multi-threaded.
-<p><li>If the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag is specified to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>,
-regions are created in system memory. When regions are created in system
-memory, the Berkeley DB environment may be accessed by both multiple processes
-and multiple threads within processes.
+specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> function:</p>
+<ol>
+<p><li>If the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag is specified to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>,
+regions are created in per-process heap memory; that is, memory returned
+by <b>malloc</b>(3). In this case, the Berkeley DB environment may only
+be accessed by a single process, although that process may be
+multithreaded.
+<p><li>If the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag is specified to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>,
+shared regions are created in system memory rather than files. This is
+an alternative mechanism for sharing the Berkeley DB environment among
+multiple processes and multiple threads within processes.
<p>The system memory used by Berkeley DB is potentially useful past the lifetime
-of any particular process. Therefore, additional cleanup may be necessary
-after an application fails, as there may be no way for Berkeley DB to ensure
-that system resources backing the shared memory regions are returned to
-the system.
+of any particular process. Therefore, additional cleanup may be
+necessary after an application fails because there may be no way for
+Berkeley DB to ensure that system resources backing the shared memory regions
+are returned to the system.</p>
<p>The system memory that is used is architecture-dependent. For example,
-on systems supporting X/Open-style shared memory interfaces, e.g., UNIX
-systems, the <b>shmget</b>(2) and related System V IPC interfaces are
-used. Additionally, VxWorks systems use system memory.
+on systems supporting X/Open-style shared memory interfaces, such as
+UNIX systems, the <b>shmget</b>(2) and related System V IPC
+interfaces are used. Additionally, VxWorks systems use system memory.
In these cases, an initial segment ID must be specified by the
application to ensure that applications do not overwrite each other's
-database environments, and so that the number of segments created does
-not grow without bound. See the <a href="../../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a> function for more
-information.
-<p><li>If no memory-related flags are specified to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, then
-memory backed by the filesystem is used to store the regions. On UNIX
-systems, the Berkeley DB library will use the POSIX mmap interface. If mmap is
-not available, the UNIX shmget interfaces will be used, assuming they are
-available.
+database environments, so that the number of segments created does not
+grow without bounds. See the <a href="../../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a> method for more
+information.</p>
+<p>On Windows platforms, the use of the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag is
+problematic because the operating system uses reference counting to
+clean up shared objects in the paging file automatically. In addition,
+the default access permissions for shared objects are different to
+files, which may cause problems when an environment is accessed by
+multiple processes running as different users. See
+<a href="../../ref/build_win/notes.html">Windows Notes</a> for more
+information.</p>
+<p><li>If no memory-related flags are specified to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, memory
+backed by the filesystem is used to store the regions. On UNIX systems,
+the Berkeley DB library will use the POSIX mmap interface. If mmap is not available,
+the UNIX shmget interfaces may be used instead, if they are available.
</ol>
+<a name="2"><!--meow--></a>
<p>Any files created in the filesystem to back the regions are created in
-the environment home directory specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> call.
-These files are named __db.###, e.g., __db.001, __db.002 and so on.
-When region files are backed by the filesystem, one file per region is
-created. When region files are backed by system memory, a single file
-will still be created, as there must be a well-known name in the
-filesystem so that multiple processes can locate the system shared memory
-that is being used by the environment.
+the environment home directory specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> call.
+These files are named __db.### (for example, __db.001, __db.002 and
+so on). When region files are backed by the filesystem, one file per
+region is created. When region files are backed by system memory, a
+single file will still be created because there must be a well-known
+name in the filesystem so that multiple processes can locate the system
+shared memory that is being used by the environment.</p>
<p>Statistics about the shared memory regions in the environment can be
-displayed using the <b>-e</b> option to the <a href="../../utility/db_stat.html">db_stat</a> utility.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/security.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/remote.html"><img src="../../images/next.gif" alt="Next"></a>
+displayed using the <b>-e</b> option to the <a href="../../utility/db_stat.html">db_stat</a> utility.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/naming.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/security.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/remote.html b/db/docs/ref/env/remote.html
index 3cd44a539..acad323c2 100644
--- a/db/docs/ref/env/remote.html
+++ b/db/docs/ref/env/remote.html
@@ -1,48 +1,54 @@
-<!--$Id: remote.so,v 11.5 2000/03/18 21:43:12 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: remote.so,v 11.10 2003/05/15 15:05:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Remote filesystems</title>
+<title>Berkeley DB Reference Guide: Remote filesystem</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/region.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/encrypt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Remote filesystems</h1>
+<h3 align=center>Remote filesystem</h3>
<p>When regions are backed by the filesystem, it is a common error to attempt
-to create Berkeley DB environments backed by remote file systems such as the
+to create Berkeley DB environments backed by remote filesystems such as the
Network File System (NFS) or the Andrew File System (AFS). Remote
filesystems rarely support mapping files into process memory, and even
more rarely support correct semantics for mutexes after the attempt
succeeds. For this reason, we strongly recommend that the database
-environment directory reside in a local filesystem.
-<p>For remote file systems that do allow system files to be mapped into
-process memory, home directories accessed via remote file systems cannot
+environment directory reside in a local filesystem.</p>
+<p>For remote filesystems that do allow system files to be mapped into
+process memory, home directories accessed via remote filesystems cannot
be used simultaneously from multiple clients. None of the commercial
-remote file systems available today implement coherent, distributed shared
-memory for remote-mounted files. As a result, different machines will
-see different versions of these shared regions and the system behavior is
-undefined.
-<p>Databases, log files and temporary files may be placed on remote
+remote filesystems available today implement coherent, distributed
+shared memory for remote-mounted files. As a result, different machines
+will see different versions of these shared regions, and the system
+behavior is undefined.</p>
+<p>Databases, log files, and temporary files may be placed on remote
filesystems, <b>as long as the remote filesystem fully supports
-standard POSIX filesystem semantics</b>, although the application may incur
-a performance penalty for doing so. Obviously, NFS-mounted databases
-cannot be accessed from more than one Berkeley DB environment (and therefore
-from more than one system), at a time since no Berkeley DB database may be
-accessed from more than one Berkeley DB environment at a time.
+standard POSIX filesystem semantics</b> (although the application may
+incur a performance penalty for doing so). Obviously, NFS-mounted
+databases cannot be accessed from more than one Berkeley DB environment at a
+time (and therefore from more than one system), because no Berkeley DB
+database may be accessed from more than one Berkeley DB environment at a
+time.</p>
<p><dl compact>
+<p><dt>FreeBSD note:<dd>Some FreeBSD releases are known to return ENOLCK from fsync and close
+calls on NFS-mounted filesystems, even though the call has succeeded.
+The Berkeley DB code should be modified to ignore ENOLCK errors, or no Berkeley DB
+files should be placed on NFS-mounted filesystems on these systems.
<p><dt>Linux note:<dd>Some Linux releases are known to not support complete semantics for the
POSIX fsync call on NFS-mounted filesystems. No Berkeley DB files should be
placed on NFS-mounted filesystems on these systems.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/region.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/encrypt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/env/security.html b/db/docs/ref/env/security.html
index 84dab59b2..46dcd6ff3 100644
--- a/db/docs/ref/env/security.html
+++ b/db/docs/ref/env/security.html
@@ -1,54 +1,56 @@
-<!--$Id: security.so,v 10.15 2000/05/23 21:12:06 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: security.so,v 10.17 2002/02/04 17:52:38 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Security</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Environment</dl></h3></td>
-<td width="1%"><a href="../../ref/env/naming.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/region.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../env/region.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/encrypt.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Security</h1>
+<h3 align=center>Security</h3>
<p>The following are security issues that should be considered when writing
-Berkeley DB applications:
+Berkeley DB applications:</p>
<p><dl compact>
<p><dt>Database environment permissions<dd>The directory used as the Berkeley DB database environment should have its
permissions set to ensure that files in the environment are not accessible
-to users without appropriate permissions. Applications which add to the
-user's permissions (e.g., UNIX setuid or setgid applications), must be
-carefully checked to not permit illegal use of those permissions such
-as general file access in the environment directory.
+to users without appropriate permissions. Applications that add to the
+user's permissions (for example, UNIX setuid or setgid applications),
+must be carefully checked to not permit illegal use of those permissions
+such as general file access in the environment directory.
<p><dt>Environment variables<dd>Setting the <a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> and <a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags
and allowing the use of environment variables during file naming can be
dangerous. Setting those flags in Berkeley DB applications with additional
-permissions (e.g., UNIX setuid or setgid applications) could potentially
-allow users to read and write databases to which they would not normally
-have access.
-<p><dt>File permissions<dd>By default, Berkeley DB always creates files readable and writeable by the owner
-and the group (i.e., S_IRUSR, S_IWUSR, S_IRGRP and S_IWGRP, or octal mode
+permissions (for example, UNIX setuid or setgid applications) could
+potentially allow users to read and write databases to which they would
+not normally have access.
+<p><dt>File permissions<dd>By default, Berkeley DB always creates files readable and writable by the owner
+and the group (that is, S_IRUSR, S_IWUSR, S_IRGRP and S_IWGRP; or octal mode
0660 on historic UNIX systems). The group ownership of created files is
based on the system and directory defaults, and is not further specified
by Berkeley DB.
-<p><dt>Temporary backing files<dd>If an unnamed database is created and the cache is too small to hold the
-database in memory, Berkeley DB will create a temporary physical file to enable
-it to page the database to disk as needed. In this case, environment
-variables such as <b>TMPDIR</b> may be used to specify the location of
-that temporary file. While temporary backing files are created readable
-and writeable by the owner only (i.e., S_IRUSR and S_IWUSR, or octal mode
-0600 on historic UNIX systems), some filesystems may not sufficiently
-protect temporary files created in random directories from improper
-access. Applications storing sensitive data in unnamed databases should
-use the <a href="../../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a> method to specify a temporary directory
-with known permissions, to be absolutely safe.
+<p><dt>Temporary backing files<dd>If an unnamed database is created and the cache is too small to hold
+the database in memory, Berkeley DB will create a temporary physical file to
+enable it to page the database to disk as needed. In this case,
+environment variables such as <b>TMPDIR</b> may be used to specify
+the location of that temporary file. Although temporary backing files
+are created readable and writable by the owner only (S_IRUSR and
+S_IWUSR, or octal mode 0600 on historic UNIX systems), some filesystems
+may not sufficiently protect temporary files created in random
+directories from improper access. To be absolutely safe, applications
+storing sensitive data in unnamed databases should use the
+<a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a> method to specify a temporary directory with
+known permissions.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/env/naming.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/env/region.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../env/region.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../env/encrypt.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/install/file.html b/db/docs/ref/install/file.html
index 2ecb240e2..208993243 100644
--- a/db/docs/ref/install/file.html
+++ b/db/docs/ref/install/file.html
@@ -1,37 +1,38 @@
-<!--$Id: file.so,v 10.16 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: file.so,v 10.19 2001/04/10 20:44:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: File utility /etc/magic information</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>System Installation Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/dumpload/text.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../dumpload/text.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/multiple.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>File utility /etc/magic information</h1>
+<h3 align=center>File utility /etc/magic information</h3>
<p>The <b>file</b>(1) utility is a UNIX utility that examines and
classifies files, based on information found in its database of file
types, the /etc/magic file. The following information may be added
to your system's /etc/magic file to enable <b>file</b>(1) to
-correctly identify Berkeley DB database files.
+correctly identify Berkeley DB database files.</p>
<p>The <b>file</b>(1) utility <b>magic</b>(5) information for the
standard System V UNIX implementation of the <b>file</b>(1) utility
is included in the Berkeley DB distribution for both
-<a href="magic.s5.be.txt">big-endian</a> (e.g., Sparc) and
-<a href="magic.s5.le.txt">little-endian</a> (e.g., x86) architectures.
+<a href="magic.s5.be.txt">big-endian</a> (for example, Sparc) and
+<a href="magic.s5.le.txt">little-endian</a> (for example, x86) architectures.</p>
<p>The <b>file</b>(1) utility <b>magic</b>(5) information for
Release 3.X of Ian Darwin's implementation of the file utility (as
distributed by FreeBSD and most Linux distributions) is included in the
Berkeley DB distribution. This <a href="magic.txt">magic.txt</a> information
-is correct for both big-endian and little-endian architectures.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/dumpload/text.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+is correct for both big-endian and little-endian architectures.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../dumpload/text.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/multiple.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/install/multiple.html b/db/docs/ref/install/multiple.html
index c72a3fd4e..370493995 100644
--- a/db/docs/ref/install/multiple.html
+++ b/db/docs/ref/install/multiple.html
@@ -1,26 +1,27 @@
-<!--Id: multiple.so,v 10.3 2001/04/16 17:47:13 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: multiple.so,v 10.3 2001/04/16 17:47:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building with multiple versions of Berkeley DB</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>System Installation Notes</dl></h3></td>
-<td align=right><a href="../../ref/install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/install/rpm.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/rpm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building with multiple versions of Berkeley DB</h1>
+<h3 align=center>Building with multiple versions of Berkeley DB</h3>
<p>In some cases it may be necessary to build applications which include
multiple versions of Berkeley DB. Examples include applications which include
software from other vendors, or applications running on a system where
the system C library itself uses Berkeley DB. In such cases, the two versions
of Berkeley DB may be incompatible, that is, they may have different external
and internal interfaces, and may even have different underlying database
-formats.
+formats.</p>
<p>To create a Berkeley DB library whose symbols won't collide with other Berkeley DB
libraries (or other application or library modules, for that matter),
configure Berkeley DB using the <a href="../../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename=NAME</a> configuration option,
@@ -30,13 +31,13 @@ loading multiple versions of the C++ or Java APIs will require
additional work.) The modified symbol names are hidden from the
application in the Berkeley DB header files, that is, there is no need for
the application to be aware that it is using a special library build as
-long as it includes the appropriate Berkeley DB header file.
+long as it includes the appropriate Berkeley DB header file.</p>
<p>If "NAME" is not specified when configuring with
<a href="../../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename</a>, a default value built from the major and minor
numbers of the Berkeley DB release will be used. It is rarely necessary to
specify NAME; using the major and minor release numbers will ensure that
only one copy of the library will be loaded into the application unless
-two distinct versions really are necessary.
+two distinct versions really are necessary.</p>
<p>When distributing any library software that uses Berkeley DB, or any software
which will be recompiled by users for their systems, we recommend two
things: First, include the Berkeley DB release as part of your release. This
@@ -46,9 +47,9 @@ version of the Berkeley DB API instead of adapting at compile time to whatever
version of Berkeley DB happens to be installed on the target system. Second,
use <a href="../../ref/build_unix/conf.html#--with-uniquename=NAME">--with-uniquename</a> when configuring Berkeley DB, because that will insure that
you do not unexpectedly collide with other application code or a library
-already installed on the target system.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/install/rpm.html"><img src="../../images/next.gif" alt="Next"></a>
+already installed on the target system.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../install/file.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../install/rpm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/install/rpm.html b/db/docs/ref/install/rpm.html
index fed9524e5..7eaec2233 100644
--- a/db/docs/ref/install/rpm.html
+++ b/db/docs/ref/install/rpm.html
@@ -1,28 +1,32 @@
-<!--Id: rpm.so,v 1.3 2001/04/10 20:44:04 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: rpm.so,v 1.4 2003/01/08 18:30:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building RPM distribution packages</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>System Installation Notes</dl></h3></td>
-<td align=right><a href="../../ref/install/multiple.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../install/multiple.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building RPM distribution packages</h1>
+<h3 align=center>Building RPM distribution packages</h3>
<p>If you would like to distribute your configuration and build of Berkeley DB
as an RPM software package, first configure Berkeley DB using the
<a href="../../ref/build_unix/conf.html#--with-rpm">--with-rpm</a>
-configuration option, and then build Berkeley DB as follows:
-<p><blockquote><pre>../dist/configure --with-rpm=DIR
+configuration option, and then build Berkeley DB as follows:</p>
+<blockquote><pre>../dist/configure --with-rpm=ARCHIVE
make</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/install/multiple.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>where "ARCHIVE" is the path to the Berkeley DB archive, for example:</p>
+<blockquote><pre>../dist/configure --with-rpm=/usr/downloads/db-4.2.52.tar.gz
+make</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../install/multiple.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../debug/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/data.html b/db/docs/ref/intro/data.html
index e9d6ead06..15cf282d6 100644
--- a/db/docs/ref/intro/data.html
+++ b/db/docs/ref/intro/data.html
@@ -1,32 +1,33 @@
<!--$Id: data.so,v 10.1 2000/09/22 18:23:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: An introduction to data management</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/terrain.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/terrain.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>An introduction to data management</h1>
+<h3 align=center>An introduction to data management</h3>
<p>Cheap, powerful computing and networking have created countless new
applications that could not have existed a decade ago. The advent of
the World-Wide Web, and its influence in driving the Internet into homes
and businesses, is one obvious example. Equally important, though, is
the from large, general-purpose desktop and server computers
toward smaller, special-purpose devices with built-in processing and
-communications services.
+communications services.</p>
<p>As computer hardware has spread into virtually every corner of our
lives, of course, software has followed. Software developers today are
building applications not just for conventional desktop and server
environments, but also for handheld computers, home appliances,
networking hardware, cars and trucks, factory floor automation systems,
-and more.
+and more.</p>
<p>While these operating environments are diverse, the problems that
software engineers must solve in them are often strikingly similar. Most
systems must deal with the outside world, whether that means
@@ -35,20 +36,20 @@ need some sort of I/O system. Even a simple, single-function system
generally needs to handle multiple tasks, and so needs some kind of
operating system to schedule and manage control threads. Also, many
computer systems must store and retrieve data to track history, record
-configuration settings, or manage access.
+configuration settings, or manage access.</p>
<p>Data management can be very simple. In some cases, just recording
configuration in a flat text file is enough. More often, though,
programs need to store and search a large amount of data, or
structurally complex data. Database management systems are tools that
programmers can use to do this work quickly and efficiently using
-off-the-shelf software.
+off-the-shelf software.</p>
<p>Of course, database management systems have been around for a long time.
Data storage is a problem dating back to the earliest days of computing.
Software developers can choose from hundreds of good,
commercially-available database systems. The problem is selecting the
-one that best solves the problems that their applications face.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/terrain.html"><img src="../../images/next.gif" alt="Next"></a>
+one that best solves the problems that their applications face.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/terrain.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/dbis.html b/db/docs/ref/intro/dbis.html
index 10c4abd95..427751089 100644
--- a/db/docs/ref/intro/dbis.html
+++ b/db/docs/ref/intro/dbis.html
@@ -1,27 +1,28 @@
-<!--$Id: dbis.so,v 10.5 2001/01/19 17:30:29 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbis.so,v 10.9 2002/07/05 17:49:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: What is Berkeley DB?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/terrain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/dbisnot.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/terrain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/dbisnot.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>What is Berkeley DB?</h1>
+<h3 align=center>What is Berkeley DB?</h3>
<p>So far, we've discussed database systems in general terms. It's time
now to consider Berkeley DB in particular and see how it fits into the
framework we have introduced. The key question is, what kinds of
-applications should use Berkeley DB?
+applications should use Berkeley DB?</p>
<p>Berkeley DB is an open source embedded database library that provides
scalable, high-performance, transaction-protected data management
services to applications. Berkeley DB provides a simple function-call API
-for data access and management.
+for data access and management.</p>
<p>By "open source," we mean that Berkeley DB is distributed under a license that
conforms to the <a href="http://www.opensource.org/osd.html">Open
Source Definition</a>. This license guarantees that Berkeley DB is freely
@@ -29,7 +30,7 @@ available for use and redistribution in other open source products.
<a href="http://www.sleepycat.com">Sleepycat Software</a> sells
commercial licenses for redistribution in proprietary applications, but
in all cases the complete source code for Berkeley DB is freely available for
-download and use.
+download and use.</p>
<p>Berkeley DB is embedded because it links directly into the application. It
runs in the same address space as the application. As a result, no
inter-process communication, either over the network or between
@@ -40,7 +41,7 @@ database operations happen inside the library. Multiple processes, or
multiple threads in a single process, can all use the database at the
same time as each uses the Berkeley DB library. Low-level services like
locking, transaction logging, shared buffer management, memory
-management, and so on are all handled transparently by the library.
+management, and so on are all handled transparently by the library.</p>
<p>The library is extremely portable. It runs under almost all UNIX and
Linux variants, Windows, and a number of embedded real-time operating
systems. It runs on both 32-bit and 64-bit systems.
@@ -48,14 +49,14 @@ It has been deployed on high-end
Internet servers, desktop machines, and on palmtop computers, set-top
boxes, in network switches, and elsewhere. Once Berkeley DB is linked into
the application, the end user generally does not know that there's a
-database present at all.
+database present at all.</p>
<p>Berkeley DB is scalable in a number of respects. The database library itself
is quite compact (under 300 kilobytes of text space on common
architectures), but it can manage databases up to 256 terabytes in size.
It also supports high concurrency, with thousands of users operating on
the same database at the same time. Berkeley DB is small enough to run in
tightly constrained embedded systems, but can take advantage of
-gigabytes of memory and terabytes of disk on high-end server machines.
+gigabytes of memory and terabytes of disk on high-end server machines.</p>
<p>Berkeley DB generally outperforms relational and object-oriented database
systems in embedded applications for a couple of reasons. First, because
the library runs in the same address space, no inter-process
@@ -64,67 +65,66 @@ communicating between processes on a single machine, or among machines
on a network, is much higher than the cost of making a function call.
Second, because Berkeley DB uses a simple function-call interface for all
operations, there is no query language to parse, and no execution plan
-to produce.
+to produce.</p>
<h3>Data Access Services</h3>
<p>Berkeley DB applications can choose the storage structure that best suits the
-application. Berkeley DB supports hash tables, B-trees, simple
+application. Berkeley DB supports hash tables, Btrees, simple
record-number-based storage, and persistent queues. Programmers can
create tables using any of these storage structures, and can mix
-operations on different kinds of tables in a single application.
+operations on different kinds of tables in a single application.</p>
<p>Hash tables are generally good for very large databases that need
predictable search and update times for random-access records. Hash
tables allow users to ask, "Does this key exist?" or to fetch a record
with a known key. Hash tables do not allow users to ask for records
-with keys that are close to a known key.
-<p>B-trees are better for range-based searches, as when the application
+with keys that are close to a known key.</p>
+<p>Btrees are better for range-based searches, as when the application
needs to find all records with keys between some starting and ending
-value. B-trees also do a better job of exploiting <i>locality
+value. Btrees also do a better job of exploiting <i>locality
of reference</i>. If the application is likely to touch keys near each
-other at the same time, the B-trees work well. The tree structure keeps
+other at the same time, the Btrees work well. The tree structure keeps
keys that are close together near one another in storage, so fetching
-nearby values usually doesn't require a disk access.
-<p>Record-number-based storage is natural for applications that need
-to store and fetch records, but that do not have a simple way to
-generate keys of their own. In a record number table, the record
-number is the key for the record. Berkeley DB will can generate these
-record numbers automatically.
+nearby values usually doesn't require a disk access.</p>
+<p>Record-number-based storage is natural for applications that need to
+store and fetch records, but that do not have a simple way to generate
+keys of their own. In a record number table, the record number is the
+key for the record. Berkeley DB will generate these record numbers
+automatically.</p>
<p>Queues are well-suited for applications that create records, and then
must deal with those records in creation order. A good example is
on-line purchasing systems. Orders can enter the system at any time,
-but should generally be filled in the order in which they were placed.
+but should generally be filled in the order in which they were placed.</p>
<h3>Data management services</h3>
<p>Berkeley DB offers important data management services, including concurrency,
transactions, and recovery. All of these services work on all of the
-storage structures.
+storage structures.</p>
<p>Many users can work on the same database concurrently. Berkeley DB handles
locking transparently, ensuring that two users working on the same
-record do not interfere with one another.
-<p>The library provides strict ACID transaction semantics. Some systems
-allow the user to relax, for example, the isolation guarantees that the
-database system makes. Berkeley DB ensures that all applications can see only
-committed updates.
+record do not interfere with one another.</p>
+<p>The library provides strict ACID transaction semantics, by default.
+However, applications are allowed to relax the isolation guarantees
+the database system makes.</p>
<p>Multiple operations can be grouped into a single transaction, and can
be committed or rolled back atomically. Berkeley DB uses a technique called
<i>two-phase locking</i> to be sure that concurrent transactions
are isolated from one another, and a technique called
<i>write-ahead logging</i> to guarantee that committed changes
-survive application, system, or hardware failures.
+survive application, system, or hardware failures.</p>
<p>When an application starts up, it can ask Berkeley DB to run recovery.
Recovery restores the database to a clean state, with all committed
changes present, even after a crash. The database is guaranteed to be
consistent and all committed changes are guaranteed to be present when
-recovery completes.
+recovery completes.</p>
<p>An application can specify, when it starts up, which data management
-services it will use. Some applications need fast,
-single-user, non-transactional B-tree data storage. In that case, the
-application can disable the locking and transaction systems, and will
-not incur the overhead of locking or logging. If an application needs
-to support multiple concurrent users, but doesn't need transactions, it
-can turn on locking without transactions. Applications that need
-concurrent, transaction-protected database access can enable all of the
-subsystems.
+services it will use. Some applications need fast, single-user,
+non-transactional Btree data storage. In that case, the application can
+disable the locking and transaction systems, and will not incur the
+overhead of locking or logging. If an application needs to support
+multiple concurrent users, but doesn't need transactions, it can turn
+on locking without transactions. Applications that need concurrent,
+transaction-protected database access can enable all of the
+subsystems.</p>
<p>In all these cases, the application uses the same function-call API to
-fetch and update records.
+fetch and update records.</p>
<h3>Design</h3>
<p>Berkeley DB was designed to provide industrial-strength database services to
application developers, without requiring them to become database
@@ -137,7 +137,7 @@ use of threads is not required). Just as importantly, Berkeley DB allows
developers to balance performance against the need for crash recovery
and concurrent use. An application can use the storage structure that
provides the fastest access to its data and can request only the degree
-of logging and locking that it needs.
+of logging and locking that it needs.</p>
<p>Because of the tool-based approach and separate interfaces for each
Berkeley DB subsystem, you can support a complete transaction environment for
other system operations. Berkeley DB even allows you to wrap transactions
@@ -145,15 +145,16 @@ around the standard UNIX file read and write operations! Further, Berkeley DB
was designed to interact correctly with the native system's toolset, a
feature no other database package offers. For example, Berkeley DB supports
hot backups (database backups while the database is in use), using
-standard UNIX system utilities, e.g., dump, tar, cpio, pax or even cp.
+standard UNIX system utilities, for example, dump, tar, cpio, pax or
+even cp.</p>
<p>Finally, because scripting language interfaces are available for Berkeley DB
(notably Tcl and Perl), application writers can build incredibly powerful
database engines with little effort. You can build transaction-protected
database applications using your favorite scripting languages, an
increasingly important feature in a world using CGI scripts to deliver
-HTML.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/terrain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/dbisnot.html"><img src="../../images/next.gif" alt="Next"></a>
+HTML.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/terrain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/dbisnot.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/dbisnot.html b/db/docs/ref/intro/dbisnot.html
index a55fa7176..e49284394 100644
--- a/db/docs/ref/intro/dbisnot.html
+++ b/db/docs/ref/intro/dbisnot.html
@@ -1,24 +1,25 @@
-<!--$Id: dbisnot.so,v 10.3 2000/12/14 20:52:03 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbisnot.so,v 10.8 2002/08/23 20:36:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: What is Berkeley DB not?</title>
+<title>Berkeley DB Reference Guide: What Berkeley DB is not</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/dbis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/need.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/dbis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/need.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>What is Berkeley DB not?</h1>
+<h3 align=center>What Berkeley DB is not</h3>
<p>In contrast to most other database systems, Berkeley DB provides relatively
-simple data access services.
+simple data access services.</p>
<p>Records in Berkeley DB are (<i>key</i>, <i>value</i>) pairs. Berkeley DB
-supports only a few logical operations on records. They are:
-<ul type=disc>
+supports only a few logical operations on records. They are:</p>
+<p><ul type=disc>
<li>Insert a record in a table.
<li>Delete a record from a table.
<li>Find a record in a table by looking up its key.
@@ -27,13 +28,13 @@ supports only a few logical operations on records. They are:
<p>Notice that Berkeley DB never operates on the value part of a record.
Values are simply payload, to be
stored with keys and reliably delivered back to the application on
-demand.
-<p>Both keys and values can be arbitrary bit strings, either fixed-length
+demand.</p>
+<p>Both keys and values can be arbitrary byte strings, either fixed-length
or variable-length. As a result, programmers can put native programming
language data structures into the database without converting them to
a foreign record format first. Storage and retrieval are very simple,
but the application needs to know what the structure of a key and a
-value is in advance. It cannot ask Berkeley DB, because Berkeley DB doesn't know.
+value is in advance. It cannot ask Berkeley DB, because Berkeley DB doesn't know.</p>
<p>This is an important feature of Berkeley DB, and one worth considering more
carefully. On the one hand, Berkeley DB cannot provide the programmer with
any information on the contents or structure of the values that it
@@ -42,54 +43,48 @@ uses. On the other hand, there is literally no limit to the data types
that can be store in a Berkeley DB database. The application never needs to
convert its own program data into the data types that Berkeley DB supports.
Berkeley DB is able to operate on any data type the application uses, no
-matter how complex.
+matter how complex.</p>
<p>Because both keys and values can be up to four gigabytes in length, a
single record can store images, audio streams, or other large data
values. Large values are not treated specially in Berkeley DB. They are
simply broken into page-sized chunks, and reassembled on demand when
the application needs them. Unlike some other database systems, Berkeley DB
-offers no special support for binary large objects (BLOBs).
+offers no special support for binary large objects (BLOBs).</p>
<h3>Not a relational database</h3>
-<p>Berkeley DB is not a relational database.
+<p>Berkeley DB is not a relational database.</p>
<p>First, Berkeley DB does not support SQL queries. All access to data is through
the Berkeley DB API. Developers must learn a new set of interfaces in order
to work with Berkeley DB. Although the interfaces are fairly simple, they are
-non-standard.
+non-standard.</p>
<p>SQL support is a double-edged sword. One big advantage of relational
databases is that they allow users to write simple declarative queries
in a high-level language. The database system knows everything about
the data and can carry out the command. This means that it's simple to
search for data in new ways, and to ask new questions of the database.
-No programming is required.
+No programming is required.</p>
<p>On the other hand, if a programmer can predict in advance how an
application will access data, then writing a low-level program to get
and store records can be faster. It eliminates the overhead of query
parsing, optimization, and execution. The programmer must understand
the data representation, and must write the code to do the work, but
-once that's done, the application can be very fast.
-<p>Second, Berkeley DB has no notion of <i>schema</i> in the way that
-relational systems do. Schema is the structure of records in tables,
-and the relationships among the tables in the database. For example, in
-a relational system the programmer can create a record from a fixed menu
-of data types. Because the record types are declared to the system, the
-relational engine can reach inside records and examine individual values
-in them. In addition, programmers can use SQL to declare relationships
-among tables, and to create indexes on tables. Relational engines
-usually maintain these relationships and indexes automatically.
-<p>In Berkeley DB, the key and value in a record are opaque
-to Berkeley DB. They may have a rich
-internal structure, but the library is unaware of it. As a result, Berkeley DB
-cannot decompose the value part of a record into its constituent parts,
-and cannot use those parts to find values of interest. Only the
-application, which knows the data structure, can do that.
-<p>Berkeley DB does allow programmers to create indexes on tables, and to use
-those indexes to speed up searches. However, the programmer has no way
-to tell the library how different tables and indexes are related. The
-application needs to make sure that they all stay consistent. In the
-case of indexes in particular, if the application puts a new record into
-a table, it must also put a new record in the index for it. It's
-generally simple to write a single function to make the required
-updates, but it is work that relational systems do automatically.
+once that's done, the application can be very fast.</p>
+<p>Second, Berkeley DB has no notion of <i>schema</i> and data types in
+the way that relational systems do. Schema is the structure of records
+in tables, and the relationships among the tables in the database. For
+example, in a relational system the programmer can create a record from
+a fixed menu of data types. Because the record types are declared to
+the system, the relational engine can reach inside records and examine
+individual values in them. In addition, programmers can use SQL to
+declare relationships among tables, and to create indices on tables.
+Relational engines usually maintain these relationships and indices
+automatically.</p>
+<p>In Berkeley DB, the key and value in a record are opaque to Berkeley DB. They may
+have a rich internal structure, but the library is unaware of it. As a
+result, Berkeley DB cannot decompose the value part of a record into its
+constituent parts, and cannot use those parts to find values of
+interest. Only the application, which knows the data structure, can do
+that. Berkeley DB does support indices on tables and automatically maintain
+those indices as their associated tables are modified.</p>
<p>Berkeley DB is not a relational system. Relational database systems are
semantically rich and offer high-level database access. Compared to such
systems, Berkeley DB is a high-performance, transactional library for record
@@ -97,7 +92,7 @@ storage. It's possible to build a relational system on top of Berkeley DB. In
fact, the popular MySQL relational system uses Berkeley DB for
transaction-protected table management, and takes care of all the SQL
parsing and execution. It uses Berkeley DB for the storage level, and provides
-the semantics and access tools.
+the semantics and access tools.</p>
<h3>Not an object-oriented database</h3>
<p>Object-oriented databases are designed for very tight integration with
object-oriented programming languages. Berkeley DB is written entirely in the
@@ -107,24 +102,24 @@ objects created in any object-oriented application. Berkeley DB never makes
method calls on any application object. It has no idea what methods are
defined on user objects, and cannot see the public or private members
of any instance. The key and value part of all records are opaque to
-Berkeley DB.
-<p>Berkeley DB cannot automatically page in referenced objects, as some
+Berkeley DB.</p>
+<p>Berkeley DB cannot automatically page in objects as they are accessed, as some
object-oriented databases do. The object-oriented application programmer
must decide what records are required, and must fetch them by making
-method calls on Berkeley DB objects.
+method calls on Berkeley DB objects.</p>
<h3>Not a network database</h3>
<p>Berkeley DB does not support network-style navigation among records, as
network databases do. Records in a Berkeley DB table may move around over
time, as new records are added to the table and old ones are deleted.
Berkeley DB is able to do fast searches for records based on keys, but there
is no way to create a persistent physical pointer to a record.
-Applications can only refer to records by key, not by address.
+Applications can only refer to records by key, not by address.</p>
<h3>Not a database server</h3>
<p>Berkeley DB is not a standalone database server. It is a library, and runs in
the address space of the application that uses it. If more than one
application links in Berkeley DB, then all can use the same database at the
same time; the library handles coordination among the applications, and
-guarantees that they do not interfere with one another.
+guarantees that they do not interfere with one another.</p>
<p>Recent releases of Berkeley DB allow programmers to compile the library as a
standalone process, and to use RPC stubs to connect to it and to carry
out operations. However, there are some important limitations to this
@@ -132,15 +127,15 @@ feature. The RPC stubs provide exactly the same API that the library
itself does. There is no higher-level access provided by the standalone
process. Tuning the standalone process is difficult, since Berkeley DB does
no threading in the library (applications can be threaded, but the
-library never creates a thread on its own).
+library never creates a thread on its own).</p>
<p>It is possible to build a server application that uses Berkeley DB for data
management. For example, many commercial and open source Lightweight
Directory Access Protocol (LDAP) servers use Berkeley DB for record storage.
LDAP clients connect to these servers over the network. Individual
servers make calls through the Berkeley DB API to find records and return them
-to clients. On its own, however, Berkeley DB is not a server.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/dbis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/need.html"><img src="../../images/next.gif" alt="Next"></a>
+to clients. On its own, however, Berkeley DB is not a server.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/dbis.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/need.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/distrib.html b/db/docs/ref/intro/distrib.html
index a5ff52263..9c370d99d 100644
--- a/db/docs/ref/intro/distrib.html
+++ b/db/docs/ref/intro/distrib.html
@@ -1,28 +1,29 @@
-<!--$Id: distrib.so,v 10.16 2000/09/22 18:23:58 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: distrib.so,v 10.17 2001/03/23 21:15:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: What does the Berkeley DB distribution include?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/what.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/where.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/what.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/where.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>What does the Berkeley DB distribution include?</h1>
+<h3 align=center>What does the Berkeley DB distribution include?</h3>
<p>The Berkeley DB distribution includes complete source code for the Berkeley DB
library, including all three Berkeley DB products and their supporting
-utilities, as well as complete documentation in HTML format.
-<p>The distribution does not include pre-built binaries or libraries, or
-hard-copy documentation. Pre-built libraries and binaries for some
+utilities, as well as complete documentation in HTML format.</p>
+<p>The distribution does not include prebuilt binaries or libraries, or
+hard-copy documentation. Prebuilt libraries and binaries for some
architecture/compiler combinations are available as part of Sleepycat
-Software's Berkeley DB support services.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/what.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/where.html"><img src="../../images/next.gif" alt="Next"></a>
+Software's Berkeley DB support services.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/what.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/where.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/need.html b/db/docs/ref/intro/need.html
index 771dd9890..9857ff13a 100644
--- a/db/docs/ref/intro/need.html
+++ b/db/docs/ref/intro/need.html
@@ -1,32 +1,33 @@
<!--$Id: need.so,v 10.2 2000/12/08 23:59:06 mao Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Do you need Berkeley DB?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/dbisnot.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/what.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/dbisnot.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/what.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Do you need Berkeley DB?</h1>
+<h3 align=center>Do you need Berkeley DB?</h3>
<p>Berkeley DB is an ideal database system for applications that need fast,
scalable, and reliable embedded database management. For applications
-that need different services, however, it can be a poor choice.
+that need different services, however, it can be a poor choice.</p>
<p>First, do you need the ability to access your data in ways you cannot
predict in advance? If your users want to be able to enter SQL
queries to perform
complicated searches that you cannot program into your application to
begin with, then you should consider a relational engine instead. Berkeley DB
-requires a programmer to write code in order to run a new kind of query.
+requires a programmer to write code in order to run a new kind of query.</p>
<p>On the other hand, if you can predict your data access patterns up front
-- and in particular if you need fairly simple key/value lookups -- then
Berkeley DB is a good choice. The queries can be coded up once, and will then
-run very quickly because there is no SQL to parse and execute.
+run very quickly because there is no SQL to parse and execute.</p>
<p>Second, are there political arguments for or against a standalone
relational server? If you're building an application for your own use
and have a relational system installed with administrative support
@@ -34,14 +35,14 @@ already, it may be simpler to use that than to build and learn Berkeley DB.
On the other hand, if you'll be shipping many copies of your application
to customers, and don't want your customers to have to buy, install,
and manage a separate database system, then Berkeley DB may be a better
-choice.
+choice.</p>
<p>Third, are there any technical advantages to an embedded database? If
you're building an application that will run unattended for long periods
of time, or for end users who are not sophisticated administrators, then
a separate server process may be too big a burden. It will require
separate installation and management, and if it creates new ways for
the application to fail, or new complexities to master in the field,
-then Berkeley DB may be a better choice.
+then Berkeley DB may be a better choice.</p>
<p>The fundamental question is, how closely do your requirements match the
Berkeley DB design? Berkeley DB was conceived and built to provide fast, reliable,
transaction-protected record storage. The library itself was never
@@ -52,9 +53,9 @@ keeping the library small and simple, we create fewer opportunities for
bugs to creep in, and we guarantee that the database system stays fast,
because there is very little code to execute. If your application needs
that set of features, then Berkeley DB is almost certainly the best choice
-for you.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/dbisnot.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/what.html"><img src="../../images/next.gif" alt="Next"></a>
+for you.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/dbisnot.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/what.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/products.html b/db/docs/ref/intro/products.html
index ce04135f0..16709854a 100644
--- a/db/docs/ref/intro/products.html
+++ b/db/docs/ref/intro/products.html
@@ -1,69 +1,70 @@
-<!--$Id: products.so,v 10.13 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: products.so,v 10.16 2002/02/07 15:26:45 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Sleepycat Software's Berkeley DB products</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/where.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/where.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Sleepycat Software's Berkeley DB products</h1>
-<p>Sleepycat Software licenses three different products that use the Berkeley DB
+<h3 align=center>Sleepycat Software's Berkeley DB products</h3>
+<p>Sleepycat Software licenses four different products that use the Berkeley DB
technology. Each product offers a distinct level of database support.
It is not possible to mix-and-match products, that is, each application
-or group of applications must use the same Berkeley DB product.
-<p>All three products are included in the single Open Source distribution of
-Berkeley DB from Sleepycat Software, and building that distribution
-automatically builds all three products. Each product adds services, and
-new interfaces, to the product that precedes it in the list. As a result,
-developers can download Berkeley DB and build an application that does only
-single-user, read-only database access, and later add support for more
-users and more complex database access patterns.
+or group of applications must use the same Berkeley DB product.</p>
+<p>All four products are included in the single Open Source distribution
+of Berkeley DB from Sleepycat Software, and building that distribution
+automatically builds all four products. Each product adds new
+interfaces and services to the product that precedes it in the list.
+As a result, developers can download Berkeley DB and build an application that
+does only single-user, read-only database access, and easily add support
+later for more users and more complex database access patterns.</p>
<p>Users who distribute Berkeley DB must ensure that they are licensed for the
-Berkeley DB interfaces they use. Information on licensing is available directly
-from Sleepycat Software.
+Berkeley DB interfaces they use. Information on licensing is available
+directly from Sleepycat Software.</p>
<h3>Berkeley DB Data Store</h3>
<p>The Berkeley DB Data Store product is an embeddable, high-performance data store. It
supports multiple concurrent threads of control to read information
managed by Berkeley DB. When updates are required, only a single process may
-be using the database. That process may be multi-threaded, but only one
+be using the database. That process may be multithreaded, but only one
thread of control should be allowed to update the database at any time.
The Berkeley DB Data Store does no locking, and so provides no guarantees of correct
behavior if more than one thread of control is updating the database at
-a time.
-<p>The Berkeley DB Data Store product includes the <a href="../../api_c/db_create.html">db_create</a> interface, the
-DB handle methods, and the methods returned by <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>.
-<p>The Berkeley DB Data Store is intended for use in single-user or read-only applications
-that can guarantee that no more than one thread of control will ever
-update the database at any time.
+a time. The Berkeley DB Data Store is intended for use in single-user or read-only
+applications that can guarantee that no more than one thread of control
+will ever update the database at any time.</p>
<h3>Berkeley DB Concurrent Data Store</h3>
<p>The Berkeley DB Concurrent Data Store product adds multiple-reader, single writer capabilities to
the Berkeley DB Data Store product, supporting applications that need concurrent updates
-and do not want to implement their own locking protocols. The additional
-interfaces included with the Berkeley DB Concurrent Data Store product are <a href="../../api_c/env_create.html">db_env_create</a>, the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> method (using the <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> flag), and the
-<a href="../../api_c/env_close.html">DBENV-&gt;close</a> method.
-<p>Berkeley DB Concurrent Data Store is intended for applications that require occasional write access
-to a database that is largely used for reading.
+and do not want to implement their own locking protocols. Berkeley DB Concurrent Data Store is
+intended for applications that require occasional write access to a
+database that is largely used for reading.</p>
<h3>Berkeley DB Transactional Data Store</h3>
<p>The Berkeley DB Transactional Data Store product adds full transactional support and recoverability
-to the Berkeley DB Data Store product. This product includes all of the interfaces
-in the Berkeley DB library.
-<p>Berkeley DB Transactional Data Store is intended for applications that require industrial-strength
-database services, including good performance under high-concurrency
-workloads with a mixture of readers and writers, the ability to commit
-or roll back multiple changes to the database at a single instant, and
-the guarantee that even in the event of a catastrophic system or hardware
-failure, any committed database changes will be preserved.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/where.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+to the Berkeley DB Data Store product. Berkeley DB Transactional Data Store is intended for applications that require
+industrial-strength database services, including excellent performance
+under high-concurrency workloads with a mixture of readers and writers,
+the ability to commit or roll back multiple changes to the database at
+a single instant, and the guarantee that even in the event of a
+catastrophic system or hardware failure, any committed database changes
+will be preserved.</p>
+<h3>Berkeley DB High Availability</h3>
+<p>The Berkeley DB High Availability product support for data replication. A single master system
+handles all updates, and distributes them to as many replicas as the
+application requires. All replicas can handle read requests during
+normal processing. If the master system fails for any reason, one of
+the replicas takes over as the new master system, and distributes
+updates to the remaining replicas.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/where.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/terrain.html b/db/docs/ref/intro/terrain.html
index f2a708913..4913e1861 100644
--- a/db/docs/ref/intro/terrain.html
+++ b/db/docs/ref/intro/terrain.html
@@ -1,42 +1,43 @@
-<!--$Id: terrain.so,v 10.3 2000/12/14 20:52:03 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: terrain.so,v 10.4 2001/05/05 01:49:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Mapping the terrain: theory and practice</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/data.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/dbis.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/data.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/dbis.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Mapping the terrain: theory and practice</h1>
+<h3 align=center>Mapping the terrain: theory and practice</h3>
<p>The first step in selecting a database system is figuring out what the
choices are. Decades of research and real-world deployment have produced
countless systems. We need to organize them somehow to reduce the number
-of options.
+of options.</p>
<p>One obvious way to group systems is to use the common labels that
vendors apply to them. The buzzwords here include "network,"
"relational," "object-oriented," and "embedded," with some
cross-fertilization like "object-relational" and "embedded network".
Understanding the buzzwords is important. Each has some grounding in
theory, but has also evolved into a practical label for categorizing
-systems that work in a certain way.
+systems that work in a certain way.</p>
<p>All database systems, regardless of the buzzwords that apply to them,
provide a few common services. All of them store data, for example.
We'll begin by exploring the common services that all systems provide,
-and then examine the differences among the different kinds of systems.
+and then examine the differences among the different kinds of systems.</p>
<h3>Data access and data management</h3>
-<p>Fundamentally, database systems provide two services.
+<p>Fundamentally, database systems provide two services.</p>
<p>The first service is <i>data access</i>. Data access means adding
new data to the database (inserting), finding data of interest
(searching), changing data already stored (updating), and removing data
from the database (deleting). All databases provide these services. How
they work varies from category to category, and depends on the record
-structure that the database supports.
+structure that the database supports.</p>
<p>Each record in a database is a collection of values. For example, the
record for a Web site customer might include a name, email address,
shipping address, and payment information. Records are usually stored
@@ -45,8 +46,8 @@ in tables. Each table holds records of the same kind. For example, the
customer records for every person who shopped at the site. Often,
database records have a different structure from the structures or
instances supported by the programming language in which an application
-is written. As a result, working with records can mean:
-<ul type=disc>
+is written. As a result, working with records can mean:</p>
+<p><ul type=disc>
<li>using database operations like searches and updates on records; and
<li>converting between programming language structures and database record
types in the application.
@@ -55,7 +56,7 @@ types in the application.
more complicated than data access. Providing good data management
services is the hard part of building a database system. When you
choose a database system to use in an application you build, making sure
-it supports the data management services you need is critical.
+it supports the data management services you need is critical.</p>
<p>Data management services include allowing multiple users to work on the
database simultaneously (concurrency), allowing multiple records to be
changed instantaneously (transactions), and surviving application and
@@ -63,11 +64,11 @@ system crashes (recovery). Different database systems offer different
data management services. Data management services are entirely
independent of the data access services listed above. For example,
nothing about relational database theory requires that the system
-support transactions, but most commercial relational systems do.
+support transactions, but most commercial relational systems do.</p>
<p>Concurrency means that multiple users can operate on the database at
the same time. Support for concurrency ranges from none (single-user
access only) to complete (many readers and writers working
-simultaneously).
+simultaneously).</p>
<p>Transactions permit users to make multiple changes appear at once. For
example, a transfer of funds between bank accounts needs to be a
transaction because the balance in one account is reduced and the
@@ -75,7 +76,7 @@ balance in the other increases. If the reduction happened before the
increase, than a poorly-timed system crash could leave the customer
poorer; if the bank used the opposite order, then the same system crash
could make the customer richer. Obviously, both the customer and the
-bank are best served if both operations happen at the same instant.
+bank are best served if both operations happen at the same instant.</p>
<p>Transactions have well-defined properties in database systems. They are
<i>atomic</i>, so that the changes happen all at once or not at all.
They are <i>consistent</i>, so that the database is in a legal state
@@ -86,12 +87,12 @@ cannot interfere with them while they are in progress. And they are
a transaction finishes, the changes are not lost. Together, the
properties of <i>atomicity</i>, <i>consistency</i>,
<i>isolation</i>, and <i>durability</i> are known as the ACID
-properties.
+properties.</p>
<p>As is the case for concurrency, support for transactions varies among
databases. Some offer atomicity without making guarantees about
durability. Some ignore isolatability, especially in single-user
systems; there's no need to isolate other users from the effects of
-changes when there are no other users.
+changes when there are no other users.</p>
<p>Another important data management service is recovery. Strictly
speaking, recovery is a procedure that the system carries out when it
starts up. The purpose of recovery is to guarantee that the database is
@@ -101,7 +102,7 @@ process guarantees that the internal structure of the database is good.
Recovery usually means that any completed transactions are checked, and
any lost changes are reapplied to the database. At the end of the
recovery process, applications can use the database as if there had been
-no interruption in service.
+no interruption in service.</p>
<p>Finally, there are a number of data management services that permit
copying of data. For example, most database systems are able to import
data from other sources, and to export it for use elsewhere. Also, most
@@ -109,19 +110,19 @@ systems provide some way to back up databases and to restore in the
event of a system failure that damages the database. Many commercial
systems allow <i>hot backups</i>, so that users can back up
databases while they are in use. Many applications must run without
-interruption, and cannot be shut down for backups.
+interruption, and cannot be shut down for backups.</p>
<p>A particular database system may provide other data management services.
Some provide browsers that show database structure and contents. Some
include tools that enforce data integrity rules, such as the rule that
no employee can have a negative salary. These data management services
are not common to all systems, however. Concurrency, recovery, and
transactions are the data management services that most database vendors
-support.
+support.</p>
<p>Deciding what kind of database to use means understanding the data
access and data management services that your application needs. Berkeley DB
is an embedded database that supports fairly simple data access with a
rich set of data management services. To highlight its strengths and
-weaknesses, we can compare it to other database system categories.
+weaknesses, we can compare it to other database system categories.</p>
<h3>Relational databases</h3>
<p>Relational databases are probably the best-known database variant,
because of the success of companies like Oracle. Relational databases
@@ -132,16 +133,16 @@ early relational systems was to insulate the programmer from the
physical organization of the database. Rather than walking through
arrays of records or traversing pointers, programmers make statements
about tables in a high-level language, and the system executes those
-statements.
+statements.</p>
<p>Relational databases operate on <i>tuples</i>, or records, composed
of values of several different data types, including integers, character
strings, and others. Operations include searching for records whose
-values satisfy some criteria, updating records, and so on.
+values satisfy some criteria, updating records, and so on.</p>
<p>Virtually all relational databases use the Structured Query Language,
or SQL. This language permits people and computer programs to work with
the database by writing simple statements. The database engine reads
those statements and determines how to satisfy them on the tables in
-the database.
+the database.</p>
<p>SQL is the main practical advantage of relational database systems.
Rather than writing a computer program to find records of interest, the
relational system user can just type a query in a simple syntax, and
@@ -150,7 +151,7 @@ do not need to decide in advance what kind of searches they want to do,
and they do not need expensive programmers to find the data they need.
Learning SQL requires some effort, but it's much simpler than a
full-blown high-level programming language for most purposes. And there
-are a lot of programmers who have already learned SQL.
+are a lot of programmers who have already learned SQL.</p>
<h3>Object-oriented databases</h3>
<p>Object-oriented databases are less common than relational systems, but
are still fairly widespread. Most object-oriented databases were
@@ -158,7 +159,7 @@ originally conceived as persistent storage systems closely wedded to
particular high-level programming languages like C++. With the spread
of Java, most now support more than one programming language, but
object-oriented database systems fundamentally provide the same class
-and method abstractions as do object-oriented programming languages.
+and method abstractions as do object-oriented programming languages.</p>
<p>Many object-oriented systems allow applications to operate on objects
uniformly, whether they are in memory or on disk. These systems create
the illusion that all objects are in memory all the time. The advantage
@@ -167,31 +168,31 @@ retrieval is clear. They need never be aware of whether an object is in
memory or not. The application simply uses objects, and the database
system moves them between disk and memory transparently. All of the
operations on an object, and all its behavior, are determined by the
-programming language.
+programming language.</p>
<p>Object-oriented databases aren't nearly as widely deployed as relational
systems. In order to attract developers who understand relational
systems, many of the object-oriented systems have added support for
query languages very much like SQL. In practice, though, object-oriented
databases are mostly used for persistent storage of objects in C++ and
-Java programs.
+Java programs.</p>
<h3>Network databases</h3>
<p>The "network model" is a fairly old technique for managing and
navigating application data. Network databases are designed to make
pointer traversal very fast. Every record stored in a network database
is allowed to contain pointers to other records. These pointers are
-generally physical addresses, so fetching the referenced record just
-means reading it from disk by its disk address.
+generally physical addresses, so fetching the record to which it refers
+just means reading it from disk by its disk address.</p>
<p>Network database systems generally permit records to contain integers,
floating point numbers, and character strings, as well as references to
other records. An application can search for records of interest. After
-retrieving a record, the application can fetch any referenced record
-quickly.
+retrieving a record, the application can fetch any record to which it
+refers, quickly.</p>
<p>Pointer traversal is fast because most network systems use physical disk
addresses as pointers. When the application wants to fetch a record,
the database system uses the address to fetch exactly the right string
of bytes from the disk. This requires only a single disk access in all
cases. Other systems, by contrast, often must do more than one disk read
-to find a particular record.
+to find a particular record.</p>
<p>The key advantage of the network model is also its main drawback. The
fact that pointer traversal is so fast means that applications that do
it will run well. On the other hand, storing pointers all over the
@@ -205,7 +206,7 @@ reorganization very expensive. Reorganization is often necessary in
databases, since adding and deleting records over time will consume
space that cannot be reclaimed without reorganizing. Without periodic
reorganization to compact network databases, they can end up with a
-considerable amount of wasted space.
+considerable amount of wasted space.</p>
<h3>Clients and servers</h3>
<p>Database vendors have two choices for system architecture. They can
build a server to which remote clients connect, and do all the database
@@ -214,25 +215,25 @@ that links directly into the application, and does all database
management locally. In either case, the application developer needs
some way of communicating with the database (generally, an Application
Programming Interface (API) that does work in the process or that
-communicates with a server to get work done).
+communicates with a server to get work done).</p>
<p>Almost all commercial database products are implemented as servers, and
applications connect to them as clients. Servers have several features
-that make them attractive.
+that make them attractive.</p>
<p>First, because all of the data is managed by a separate process, and
possibly on a separate machine, it's easy to isolate the database server
-from bugs and crashes in the application.
+from bugs and crashes in the application.</p>
<p>Second, because some database products (particularly relational engines)
are quite large, splitting them off as separate server processes keeps
applications small, which uses less disk space and memory. Relational
engines include code to parse SQL statements, to analyze them and
produce plans for execution, to optimize the plans, and to execute
-them.
+them.</p>
<p>Finally, by storing all the data in one place and managing it with a
single server, it's easier for organizations to back up, protect, and
set policies on their databases. The enterprise databases for large
companies often have several full-time administrators caring for them,
making certain that applications run quickly, granting and denying
-access to users, and making backups.
+access to users, and making backups.</p>
<p>However, centralized administration can be a disadvantage in some cases.
In particular, if a programmer wants to build an application that uses
a database for storage of important information, then shipping and
@@ -240,9 +241,9 @@ supporting the application is much harder. The end user needs to install
and administer a separate database server, and the programmer must
support not just one product, but two. Adding a server process to the
application creates new opportunity for installation mistakes and
-run-time problems.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/data.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/dbis.html"><img src="../../images/next.gif" alt="Next"></a>
+run-time problems.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/data.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/dbis.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/what.html b/db/docs/ref/intro/what.html
index c8d12069a..fd0d38028 100644
--- a/db/docs/ref/intro/what.html
+++ b/db/docs/ref/intro/what.html
@@ -1,21 +1,22 @@
-<!--$Id: what.so,v 10.22 2000/09/22 18:23:59 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: what.so,v 10.23 2001/03/01 15:58:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: What other services does Berkeley DB provide?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/need.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/distrib.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/need.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/distrib.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>What other services does Berkeley DB provide?</h1>
+<h3 align=center>What other services does Berkeley DB provide?</h3>
<p>Berkeley DB also provides core database services to developers. These
-services include:
+services include:</p>
<p><dl compact>
<p><dt>Page cache management:<dd>The page cache provides fast access to a cache of database pages,
handling the I/O associated with the cache to ensure that dirty pages
@@ -38,16 +39,16 @@ Berkeley DB locking subsystem to support their own locking needs.
Berkeley DB provides the same services found in much larger, more complex and
more expensive database systems. Berkeley DB supports multiple simultaneous
readers and writers and guarantees that all changes are recoverable, even
-in the case of a catastrophic hardware failure during a database update.
+in the case of a catastrophic hardware failure during a database update.</p>
<p>Developers may select some or all of the core database services for any
access method or database. Therefore, it is possible to choose the
appropriate storage structure and the right degrees of concurrency and
-recoverability for any application. In addition, some of the systems
-(e.g., the locking subsystem) can be called separately from the Berkeley DB
-access method. As a result, developers can integrate non-database
-objects into their transactional applications using Berkeley DB.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/need.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/distrib.html"><img src="../../images/next.gif" alt="Next"></a>
+recoverability for any application. In addition, some of the subsystems
+(for example, the Locking subsystem) can be called separately from the
+Berkeley DB access method. As a result, developers can integrate non-database
+objects into their transactional applications using Berkeley DB.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/need.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/distrib.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/intro/where.html b/db/docs/ref/intro/where.html
index 45d0dc3ae..86e2fe9c5 100644
--- a/db/docs/ref/intro/where.html
+++ b/db/docs/ref/intro/where.html
@@ -1,39 +1,45 @@
-<!--$Id: where.so,v 10.27 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: where.so,v 10.32 2003/05/26 16:04:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Where does Berkeley DB run?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Introduction</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/distrib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/products.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/distrib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/products.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Where does Berkeley DB run?</h1>
+<h3 align=center>Where does Berkeley DB run?</h3>
<p>Berkeley DB requires only underlying IEEE/ANSI Std 1003.1 (POSIX) system calls and can be
ported easily to new architectures by adding stub routines to connect
the native system interfaces to the Berkeley DB POSIX-style system calls.
-<p>Berkeley DB will autoconfigure and run on almost any modern UNIX system, and
-even on most historical UNIX platforms. See
+See <a href="../../ref/distrib/port.html">Porting Berkeley DB to new
+architectures</a> for more information.</p>
+<p>Berkeley DB will autoconfigure and run on almost any modern UNIX, POSIX or
+Linux systems, and on most historical UNIX platforms. Berkeley DB will
+autoconfigure and run on almost any GNU gcc toolchain-based embedded
+platform, including Cygwin, OpenLinux and others. See
<a href="../../ref/build_unix/intro.html">Building for UNIX systems</a> for
-more information.
+more information.</p>
<p>The Berkeley DB distribution includes support for QNX Neutrino. See
<a href="../../ref/build_unix/intro.html">Building for UNIX systems</a> for
-more information.
+more information.</p>
<p>The Berkeley DB distribution includes support for VxWorks, via a workspace
and project files for Tornado 2.0. See
<a href="../../ref/build_vxworks/intro.html">Building for VxWorks</a> for more
-information.
+information.</p>
<p>The Berkeley DB distribution includes support for Windows/95, Windows/98,
-Windows/NT and Windows/2000, via the MSVC 5 and 6 development
-environments. See <a href="../../ref/build_win/intro.html">Building for
-Windows systems</a> for more information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/distrib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/intro/products.html"><img src="../../images/next.gif" alt="Next"></a>
+Windows/NT, Windows/2000 and Windows/XP, via the Microsoft Visual C++
+6.0 and .NET development environments. See
+<a href="../../ref/build_win/intro.html">Building for Windows systems</a>
+for more information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/distrib.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../intro/products.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/compat.html b/db/docs/ref/java/compat.html
index 4619ec557..1443c8d9f 100644
--- a/db/docs/ref/java/compat.html
+++ b/db/docs/ref/java/compat.html
@@ -1,34 +1,35 @@
-<!--$Id: compat.so,v 10.11 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: compat.so,v 10.14 2003/02/10 14:32:10 gburd Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Compatibility</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
-<td width="1%"><a href="../../ref/java/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/program.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../java/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/program.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Compatibility</h1>
+<h3 align=center>Compatibility</h3>
<p>The Berkeley DB Java API has been tested with the
<a href="http://www.javasoft.com">Sun Microsystems JDK 1.1.3</a> on SunOS
-5.5, and Sun's JDK 1.1.7, JDK 1.2.2 and JDK 1.3.0 on Linux and
-Windows/NT. It should work with any JDK 1.1, 1.2 or 1.3 (the latter
-two are known as Java 2) compatible environment. IBM's VM 1.3.0 has
-also been tested on Linux.
+5.5; and Sun's JDK 1.1.7, JDK 1.2.2, JDK 1.3.0 and JDK 1.3.1 on Linux and
+Windows/NT. It should work with any JDK 1.1-, 1.2-, or 1.3-compatible
+environment (the latter three are known as Java 2). IBM's VM 1.3.0 has
+also been tested on Linux.</p>
<p>The primary requirement of the Berkeley DB Java API is that the target Java
-environment supports JNI (Java Native Interface), rather than another
+environment must support JNI (Java Native Interface) rather than another
method for allowing native C/C++ code to interface to Java. The JNI was
-new in JDK 1.1, but is the most likely interface to be implemented across
-multiple platforms. However, using the JNI means that Berkeley DB will not be
-compatible with Microsoft Visual J++.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/java/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/program.html"><img src="../../images/next.gif" alt="Next"></a>
+new in JDK 1.1, but is the most likely interface to be implemented
+across multiple platforms. However, using the JNI means that Berkeley DB will
+not be compatible with Microsoft Visual J++.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../java/conf.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/program.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/conf.html b/db/docs/ref/java/conf.html
index b7eedcaed..226a096b5 100644
--- a/db/docs/ref/java/conf.html
+++ b/db/docs/ref/java/conf.html
@@ -1,82 +1,105 @@
-<!--$Id: conf.so,v 10.16 2000/12/04 21:21:51 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: conf.so,v 10.27 2003/12/02 03:01:50 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Configuration</title>
+<title>Berkeley DB Reference Guide: Java configuration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
-<td width="1%"><a href="../../ref/rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/compat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../bdb/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/compat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuration</h1>
+<h3 align=center>Java configuration</h3>
<p>Building the Berkeley DB java classes, the examples and the native support
library is integrated into the normal build process. See
<a href="../../ref/build_unix/conf.html#--enable-java">Configuring
-Berkeley DB</a> and <a href="../../ref/build_win/intro.html">Building for Windows</a>
-for more information.
-<p>We expect that you've already installed the Java JDK or equivalent on
-your system. For the sake of discussion, we'll assume it is in a
-directory called db-VERSION, e.g., you extracted Berkeley DB version 2.3.12
-and you did not change the top-level directory name. The files related
-to Java are in two subdirectories of db-VERSION: java, the java source
-files, and libdb_java, the C++ files that provide the "glue" between
-java and Berkeley DB. The directory tree looks like this:
-<p><blockquote><pre> db-VERSION
- / \
- java libdb_java
- | |
- src ...
- |
- com
- |
- sleepycat
- / \
- db examples
- | |
- ... ...
+Berkeley DB</a> and <a href="../../ref/build_win/intro.html">Building for Win32</a>
+for more information.</p>
+<p>We expect that you already installed the Java JDK or equivalent on your
+system. For the sake of discussion, we assume that it is in a directory
+called db-VERSION; for example, you downloaded a Berkeley DB archive, and you
+did not change the top-level directory name. The files related to Java
+are in three subdirectories of db-VERSION: java (the java source files),
+libdb_java (the C++ files that provide the "glue" between java and
+Berkeley DB) and examples_java (containing all examples code). The directory
+tree looks like this:</p>
+<blockquote><pre>db-VERSION
+|-- java
+| `-- src
+| `-- com
+| `-- sleepycat
+| |-- bdb
+| | |-- ...
+| | |-- bind
+| | | `-- ...
+| | `-- util
+| | `-- ...
+| `-- db
+|-- examples_java
+| `-- src
+| `-- com
+| `-- sleepycat
+| `-- examples
+| |-- bdb
+| | `-- ...
+| `-- db
+| `-- ...
+`-- libdb_java
+ `-- ...
</pre></blockquote>
-<p>This naming conforms to the emerging standard for naming java packages.
-When the java code is built, it is placed into a <b>classes</b>
-subdirectory that is parallel to the <b>src</b> subdirectory.
+<p>This naming conforms to the de facto standard for naming java packages.
+When the java code is built, it is placed into two jar files:
+<b>db.jar</b>, containing the db package,
+and <b>dbexamples.jar</b>, containing the examples.</p>
<p>For your application to use Berkeley DB successfully, you must set your
-CLASSPATH environment variable to include db-VERSION/java/classes as
-well as the classes in your java distribution. On UNIX, CLASSPATH is
-a colon separated list of directories; on Windows it is separated by
-semicolons. Alternatively, you can set your CLASSPATH to include
-db-VERSION/java/classes/db.jar which is created as a result of the
-build. The db.jar file contains the classes in com.sleepycat.db, it
-does not contain any classes in com.sleepycat.examples.
-<p>On Windows, you will want to set your PATH variable to include:
-<p><blockquote><pre>db-VERSION\build_win32\Release</pre></blockquote>
-<p>On UNIX, you will want to set the LD_LIBRARY_PATH environment variable
+<b>CLASSPATH</b> environment variable to include the full pathname of
+the db jar files as well as the classes in your java distribution.
+On UNIX, <b>CLASSPATH</b> is a colon-separated
+list of directories and jar files;
+on Windows, it is separated by semicolons.
+On UNIX, the jar files are put in your build directory, and when
+you do the make install step, they are copied to the lib directory
+of your installation tree. On Windows, the jar files are placed
+in the Release or Debug subdirectory with your other objects.</p>
+<p>The Berkeley DB Java classes are mostly implemented in native
+methods. Before you can use them, you need to make sure that the
+DLL or shared library containing the native methods can be found
+by your Java runtime. On Windows, you should set your PATH variable
+to include:</p>
+<blockquote><pre><b>db-VERSION\build_win32\Release</b></pre></blockquote>
+<p>On UNIX, you should set the
+<b>LD_LIBRARY_PATH</b> environment variable or local equivalent
to include the Berkeley DB library installation directory. Of course, the
-standard install directory may have been changed for your site, see your
-system administrator for details. Regardless, if you get a:
-<p><blockquote><pre>java.lang.UnsatisfiedLinkError</pre></blockquote>
-<p>exception when you run, chances are you do not have the library search
-path configured correctly. Different Java interpreters provide
-different error messages if the CLASSPATH value is incorrect, a typical
-error is:
-<p><blockquote><pre>java.lang.NoClassDefFoundError</pre></blockquote>
+standard install directory may have been changed for your site; see your
+system administrator for details.</p>
+<p>On other platforms, the path can be set on the command line as follows
+(assuming the shared library is in <b>/usr/local/BerkeleyDB/lib</b>:)</p>
+<blockquote><pre>% java -Djava.library.path=/usr/local/BerkeleyDB/lib ...</pre></blockquote>
+<p>Regardless, if you get the following exception when you run, you
+probably do not have the library search path configured correctly:</p>
+<blockquote><pre>java.lang.UnsatisfiedLinkError</pre></blockquote>
+<p>Different Java interpreters provide different error messages if the
+<b>CLASSPATH</b> value is incorrect, a typical error is the following:</p>
+<blockquote><pre>java.lang.NoClassDefFoundError</pre></blockquote>
<p>To ensure that everything is running correctly, you may want to try a
-simple test from the example programs in:
-<p><blockquote><pre>db-VERSION/java/src/com/sleepycat/examples</pre></blockquote>
-<p>For example, the sample program:
-<p><blockquote><pre>% java com.sleepycat.examples.AccessExample</pre></blockquote>
-<p>will prompt for text input lines which are then stored in a Btree
-database named "access.db" in your current directory. Try giving it a
-few lines of input text and then end-of-file. Before it exits, you
-should see a list of the lines you entered display with data items.
-This is a simple check to make sure the fundamental configuration is
-working correctly.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/compat.html"><img src="../../images/next.gif" alt="Next"></a>
+simple test from the example programs in</p>
+<blockquote><pre><b>db-VERSION/examples_java/src/com/sleepycat/examples/db</b></pre></blockquote>
+<p>For example, the following sample program will prompt for text input
+lines, which are then stored in a Btree database named <b>access.db</b> in
+your current directory:</p>
+<blockquote><pre>% java com.sleepycat.examples.db.AccessExample</pre></blockquote>
+<p>Try giving it a few lines of input text and then end-of-file. Before
+it exits, you should see a list of the lines you entered display with
+data items. This is a simple check to make sure the fundamental
+configuration is working correctly.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../bdb/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/compat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/faq.html b/db/docs/ref/java/faq.html
index 75b9e9f3b..7f336cfee 100644
--- a/db/docs/ref/java/faq.html
+++ b/db/docs/ref/java/faq.html
@@ -1,31 +1,52 @@
-<!--$Id: faq.so,v 1.2 2001/01/09 20:55:54 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.9 2003/11/27 18:25:59 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Frequently Asked Questions</title>
+<title>Berkeley DB Reference Guide: Java FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
-<td width="1%"><a href="../../ref/java/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/perl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../java/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/bigpic.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Frequently Asked Questions</h1>
-<p><ol>
+<h3 align=center>Java FAQ</h3>
+<ol>
<p><li><b>During one of the first calls to the Berkeley DB Java API, a
DbException is thrown with a "Bad file number" or "Bad file descriptor"
message.</b>
<p>There are known large-file support bugs under JNI in various releases
of the JDK. Please upgrade to the latest release of the JDK, and, if
-that does not help, disable big file support using the --disable-bigfile
-configuration option.
+that does not solve the problem, disable big file support using the
+--disable-largefile configuration option.</p>
+<p><li><b>How can I use native methods from a debug build of the
+Java library?</b>
+<p>The Berkeley DB Java code checks a system property for the library name
+before defaulting to the released library. On Windows, run as
+follows (note the 'd' at the end):</p>
+<blockquote><pre>% java -Dsleepycat.db.libname=libdb_java-VERSIONd</pre></blockquote>
+<p>On UNIX, try:</p>
+<blockquote><pre>% java -Dsleepycat.db.libname=db_java_g-VERSION</pre></blockquote>
+<p><li><b>How should I incorporate db.jar and the db native library
+into a Tomcat or other J2EE application servers?</b>
+<p>Tomcat and other J2EE application servers have the ability to
+rebuild and reload code automatically. When using Tomcat this
+is the case when "reloadable" is set to "true". If your WAR
+file includes the db.jar it too will be reloaded each time
+your code is reloaded. This causes exceptions as the native
+library can't be loaded more than once and there is no way to
+unload native code. The solution is to place the db.jar in
+$TOMCAT_HOME/common/lib and let Tomcat load that library once
+at start time rather than putting it into the WAR that
+gets reloaded over and over.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/java/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/perl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../java/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../arch/bigpic.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/java/program.html b/db/docs/ref/java/program.html
index c454a0910..e0571b8a6 100644
--- a/db/docs/ref/java/program.html
+++ b/db/docs/ref/java/program.html
@@ -1,72 +1,116 @@
-<!--$Id: program.so,v 10.21 2001/01/09 18:57:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: program.so,v 10.31 2003/11/21 02:11:37 gburd Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Java Programming Notes</title>
+<title>Berkeley DB Reference Guide: Java programming notes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/java/compat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Java API</dl></h3></td>
+<td align=right><a href="../java/compat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Java Programming Notes</h1>
-<p>The Java API closely parallels the Berkeley DB C++ and C interfaces. If you
-are currently using either of those APIs, there will be very little to
-surprise you in the Java API. We have even taken care to make the names
-of classes, constants, methods and arguments identical, where possible,
-across all three APIs.
-<p><ol>
+<h3 align=center>Java programming notes</h3>
+<p>Although the Java API parallels the Berkeley DB C++/C interface in many ways,
+it differs where the Java language requires. For example, the handle
+method names are camel-cased and conform to Java naming patterns. (The
+C++/C method names are currently provided, but are deprecated.)</p>
+<ol>
<p><li>The Java runtime does not automatically close Berkeley DB objects on
-finalization. There are a couple reasons for this. One is that
-finalization is generally run only when garbage collection occurs and
+finalization. There are several reasons for this. One is that
+finalization is generally run only when garbage collection occurs, and
there is no guarantee that this occurs at all, even on exit. Allowing
specific Berkeley DB actions to occur in ways that cannot be replicated seems
-wrong. Secondly, finalization of objects may happen in an arbitrary
-order, so we would have to do extra bookkeeping to make sure everything
-was closed in the proper order. The best word of advice is to always
-do a close() for any matching open() call. Specifically, the Berkeley DB
-package requires that you explicitly call close on each individual
-<a href="../../api_java/db_class.html">Db</a> and <a href="../../api_java/dbc_class.html">Dbc</a> object that you opened. Your database
+wrong. Second, finalization of objects may happen in an arbitrary
+order, so we would have to do extra bookkeeping to make sure that
+everything was closed in the proper order. The best word of advice is
+to always do a close() for any matching open() call. Specifically, the
+Berkeley DB package requires that you explicitly call close on each individual
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+ and
+<a href="../../java/com/sleepycat/db/Dbc.html">Dbc</a>
+ object that you opened. Your database
activity may not be synchronized to disk unless you do so.
<p><li>Some methods in the Java API have no return type, and throw a
-<a href="../../api_java/except_class.html">DbException</a> when an severe error arises. There are some notable
+<a href="../../java/com/sleepycat/db/DbException.html">DbException</a>
+ when an severe error
+arises. There are some notable
methods that do have a return value, and can also throw an exception.
-<a href="../../api_java/db_get.html">Db.get</a> and <a href="../../api_java/dbc_get.html">Dbc.get</a> both return 0 when a get succeeds,
-<a href="../../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a> when the key is not found, and throw an error when
-there is a severe error. This approach allows the programmer to check
-for typical data driven errors by watching return values without special
-casing exceptions.
-<p>An object of type <a href="../../api_java/deadlock_class.html">DbDeadlockException</a> is thrown when a deadlock
-would occur.
-<p>An object of type <a href="../../api_java/mem_class.html">DbMemoryException</a> is thrown when the system
-cannot provide enough memory to complete the operation (the ENOMEM
-system error on UNIX).
-<p>An object of type <a href="../../api_java/runrec_class.html">DbRunRecoveryException</a>, a subclass of
-<a href="../../api_java/except_class.html">DbException</a>, is thrown when there is an error that requires a
-recovery of the database, using <a href="../../utility/db_recover.html">db_recover</a>.
-<p><li>There is no class corresponding to the C++ DbMpoolFile class in the Berkeley DB
-Java API. There is a subset of the memp_XXX methods in the <a href="../../api_java/dbenv_class.html">DbEnv</a>
-class. This has been provided to allow you to perform certain
-administrative actions on underlying memory pools opened as a consequence
-of <a href="../../api_java/env_open.html">DbEnv.open</a>. Direct access to other memory pool functionality
-is not appropriate for the Java environment.
-<p><li>Berkeley DB always turns on the <a href="../../api_java/env_open.html#DB_THREAD">Db.DB_THREAD</a> flag since threads
-are expected in Java.
+<a href="../../java/com/sleepycat/db/Db.html#get">Db.get</a>
+ and
+<a href="../../java/com/sleepycat/db/Dbc.html#get">Dbc.get</a>
+ both return 0 when a get succeeds,
+return <a href="../../ref/program/errorret.html#DB_NOTFOUND">Db.DB_NOTFOUND</a> when the key is not found, and throw an error
+when there is a severe error. This approach allows the programmer to
+check for typical data-driven errors by watching return values without
+special casing exceptions.
+<p>An object of type
+<a href="../../java/com/sleepycat/db/DbDeadlockException.html">DbDeadlockException</a>
+ is
+thrown when a deadlock would occur.</p>
+<p>An object of type
+<a href="../../java/com/sleepycat/db/DbMemoryException.html">DbMemoryException</a>
+ is
+thrown when the system cannot provide enough memory to complete the
+operation (the ENOMEM system error on UNIX).</p>
+<p>An object of type
+<a href="../../java/com/sleepycat/db/DbRunRecoveryException.html">DbRunRecoveryException</a>
+,
+a subclass of
+<a href="../../java/com/sleepycat/db/DbException.html">DbException</a>
+, is thrown when
+there is an error that requires a
+recovery of the database using <a href="../../utility/db_recover.html">db_recover</a>.</p>
+<p>An object of type
+<a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException</a>
+a standard Java Language exception, is thrown when there is an error in
+method arguments.</p>
+<p><li>Berkeley DB always turns on the
+<a href="../../java/com/sleepycat/db/Db.html#DB_THREAD">Db.DB_THREAD</a>
+flag because threads are expected in Java.
+<p><li>Callbacks in Java manufacture
+<a href="../../java/com/sleepycat/db/Dbt.html">Dbt</a>
+ objects
+from internal data. For efficiency, the <b>data</b> field in such Dbts is
+not set in the Java object until a
+<a href="../../java/com/sleepycat/db/Dbt.html#getData">Dbt.getData</a>
+ method call. This avoids the
+creation of a potentially large Java byte array if it isn't needed. If
+callback code can be written to defer calling
+<a href="../../java/com/sleepycat/db/Dbt.html#getData">Dbt.getData</a>
+performance may be increased. For example, a bt_compare method might
+compare values returned by
+<a href="../../java/com/sleepycat/db/Dbt.html#getSize">Dbt.getSize</a>
+before deciding whether a call to
+<a href="../../java/com/sleepycat/db/Dbt.html#getData">Dbt.getData</a>
+ is needed.
<p><li>If there are embedded null strings in the <b>curslist</b> argument for
-<a href="../../api_java/db_join.html">Db.join</a>, they will be treated as the end of the list of
-cursors, even though you may have allocated a longer array. Fill in
-all the strings in your array unless you intend to cut it short.
-<p><li>The callback installed for <a href="../../api_java/env_set_errcall.html">DbEnv.set_errcall</a> will run in the same
-thread as the caller to <a href="../../api_java/env_set_errcall.html">DbEnv.set_errcall</a>. Make sure that thread
-remains running until your application exits or <a href="../../api_java/env_close.html">DbEnv.close</a> is
-called.
+<a href="../../java/com/sleepycat/db/Db.html#join">Db.join</a>
+, they will be treated as the
+end of the list of
+cursors, even if you may have allocated a longer array. Fill in all
+the strings in your array unless you intend to cut it short.
+<p><li>The callback installed for
+<a href="../../java/com/sleepycat/db/DbEnv.html#setErrorHandler">DbEnv.setErrorHandler</a>
+ will run in the same
+thread as the caller to
+<a href="../../java/com/sleepycat/db/DbEnv.html#setErrorHandler">DbEnv.setErrorHandler</a>
+. Make sure that
+thread remains running until your application exits or until
+<a href="../../java/com/sleepycat/db/DbEnv.html#close">DbEnv.close</a>
+is called.
+<p><li>If you are using custom class loaders in your application, make sure
+that the Berkeley DB classes are loaded by the system class loader, not a
+custom class loader. This is due to a JVM bug that can cause an access
+violation during finalization (see the bug 4238486 in Sun Microsystem's
+Java Bug Database).
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/java/compat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../java/compat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../java/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/am_conv.html b/db/docs/ref/lock/am_conv.html
index 7dbe3e73d..3f59e39fb 100644
--- a/db/docs/ref/lock/am_conv.html
+++ b/db/docs/ref/lock/am_conv.html
@@ -1,129 +1,124 @@
-<!--$Id: am_conv.so,v 10.16 2000/03/18 21:43:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: am_conv.so,v 10.24 2003/04/02 16:15:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Access method locking conventions</title>
+<title>Berkeley DB Reference Guide: Berkeley DB Transactional Data Store locking conventions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/twopl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/cam_conv.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/cam_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/nondb.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Access method locking conventions</h1>
-<p>All the Berkeley DB access methods follow the same conventions for locking
+<h3 align=center>Berkeley DB Transactional Data Store locking conventions</h3>
+<p>All Berkeley DB access methods follow the same conventions for locking
database objects. Applications that do their own locking and also do
locking via the access methods must be careful to adhere to these
-conventions.
-<p>Whenever a Berkeley DB database is opened, the DB handle is
-assigned a unique locker ID. Unless transactions are specified,
-that ID is used as the locker for all calls that the Berkeley DB methods
-make to the lock subsystem. In order to lock a file, pages in
-the file, or records in the file, we must create a unique ID that
-can be used as the object to be locked in calls to the lock manager.
-Under normal operation, that object is a 28-byte value, created by
-the concatenation of a unique file identifier, a page or record number,
-and an object type (page or record).
+conventions.</p>
+<p>Whenever a Berkeley DB database is opened, the <a href="../../api_c/db_class.html">DB</a> handle is assigned
+a unique locker ID. Unless transactions are specified, that ID is used
+as the locker for all calls that the Berkeley DB methods make to the lock
+subsystem. In order to lock a file, pages in the file, or records in
+the file, we must create a unique ID that can be used as the object to
+be locked in calls to the lock manager. Under normal operation, that
+object is a 28-byte value created by the concatenation of a unique file
+identifier, a page or record number, and an object type (page or record).</p>
<p>In a transaction-protected environment, database create and delete
-operations are recoverable and single-threaded. This single-threading is
-achieved using a single lock for the entire environment that must be
+operations are recoverable and single-threaded. This single-threading
+is achieved using a single lock for the entire environment that must be
acquired before beginning a create or delete operation. In this case,
-the object on which Berkeley DB will lock is a 32-bit unsigned integer with a
-value of 0.
-<p>If applications are using the lock subsystem directly while they are also
-using locking via the access methods, they must take care not to
-inadvertently lock objects that happen to be equal to the unique file IDs
-used to lock files. This is most easily accomplished by using a locker
-ID of a different length than the values used by Berkeley DB.
-<p>All of the access methods other than Queue use a simple
-multiple-reader/single writer page locking scheme. The standard
-read/write locks (<b>DB_LOCK_READ</b> and <b>DB_LOCK_WRITE</b>) and
-conflict matrix, as described in <a href="../../ref/lock/stdmode.html">Standard lock modes</a> are used. An operation that returns data (e.g.,
-<a href="../../api_c/db_get.html">DB-&gt;get</a>, <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>) obtains a read lock on all the pages
-accessed while locating the requested record. When an update operation
-is requested (e.g., <a href="../../api_c/db_put.html">DB-&gt;put</a>, <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a>), the page containing
-the updated (or new) data is write locked. As read-modify-write cycles
-are quite common and are deadlock prone under normal circumstances, the
-Berkeley DB interfaces allow the application to specify the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag,
-which causes operations to immediately obtain a writelock, even though
-they are only reading the data. While this may reduce concurrency
-somewhat, it reduces the probability of deadlock.
-<p>The Queue access method does not hold long term page locks.
-Instead, page locks are held only long enough to locate records or to change
-metadata on a page, and record locks are held for the appropriate duration.
-In the presence of transactions, record locks are held until transaction
-commit.
-For Berkeley DB operations, record locks are held until operation
-completion and for DBC operations, record locks are held until
-subsequent records are returned or the cursor is closed.
-<p>Under non-transaction operation, the access methods do not normally hold
-locks across calls to the Berkeley DB interfaces. The one exception to this
-rule is when cursors are used. As cursors maintain a position in a file,
-they must hold locks across calls and will, in fact, hold locks until the
-cursor is closed. Furthermore, each cursor is assigned its own unique
-locker ID when it is created, so cursor operations can conflict with one
-another. (Each cursor is assigned its own locker ID because Berkeley DB handles
-may be shared by multiple threads of control. The Berkeley DB library cannot
-identify which operations are performed by which threads of control, and
-it must ensure that two different threads of control are not
+the object on which Berkeley DB will lock is a 4-byte unsigned integer with
+a value of 0.</p>
+<p>If applications are using the lock subsystem directly while they are
+also using locking via the access methods, they must take care not to
+inadvertently lock objects that happen to be equal to the unique file
+IDs used to lock files. This is most easily accomplished by using a
+lock object with a length different from the values used by Berkeley DB.</p>
+<p>All the access methods other than Queue use standard read/write locks
+in a simple multiple-reader/single writer page-locking scheme. An
+operation that returns data (for example, <a href="../../api_c/db_get.html">DB-&gt;get</a> or
+<a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>) obtains a read lock on all the pages accessed while
+locating the requested record. When an update operation is requested
+(for example, <a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/dbc_del.html">DBcursor-&gt;c_del</a>), the page containing
+the updated (or new) data is write-locked. As read-modify-write cycles
+are quite common and are deadlock-prone under normal circumstances, the
+Berkeley DB interfaces allow the application to specify the <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a>
+flag, which causes operations to immediately obtain a write lock, even
+though they are only reading the data. Although this may reduce
+concurrency somewhat, it reduces the probability of deadlock. In the
+presence of transactions, page locks are held until transaction commit.</p>
+<p>The Queue access method does not hold long-term page locks. Instead,
+page locks are held only long enough to locate records or to change
+metadata on a page, and record locks are held for the appropriate
+duration. In the presence of transactions, record locks are held until
+transaction commit. For Berkeley DB operations, record locks are held until
+operation completion; for <a href="../../api_c/dbc_class.html">DBC</a> operations, record locks are held
+until subsequent records are returned or the cursor is closed.</p>
+<p>Under non-transaction operations, the access methods do not normally
+hold locks across calls to the Berkeley DB interfaces. The one exception to
+this rule is when cursors are used. Because cursors maintain a position
+in a file, they must hold locks across calls; in fact, they will hold
+a lock until the cursor is closed.</p>
+<p>In this mode, the assignment of locker IDs to <a href="../../api_c/db_class.html">DB</a> and cursor
+handles is complicated. If the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> option was specified
+when the <a href="../../api_c/db_class.html">DB</a> handle was opened, each use of a <a href="../../api_c/db_class.html">DB</a> has its
+own unique locker ID, and each cursor is assigned its own unique locker
+ID when it is created, so <a href="../../api_c/db_class.html">DB</a> handle and cursor operations can
+all conflict with one another. (This is because when Berkeley DB handles
+may be shared by multiple threads of control the Berkeley DB library cannot
+identify which operations are performed by which threads of control,
+and it must ensure that two different threads of control are not
simultaneously modifying the same data structure. By assigning each
-cursor its own locker, two threads of control sharing a handle cannot
-inadvertently interfere with each other.
-<p>This has important implications. If a single thread of control opens two
+<a href="../../api_c/db_class.html">DB</a> handle and cursor its own locker, two threads of control
+sharing a handle cannot inadvertently interfere with each other.)</p>
+<p>This has important implications. If a single thread of control opens
+two cursors, uses a combination of cursor and non-cursor operations, or
+begins two separate transactions, the operations are performed on behalf
+of different lockers. Conflicts that arise between these different
+lockers may not cause actual deadlocks, but can, in fact, permanently
+block the thread of control. For example, assume that an application
+creates a cursor and uses it to read record A. Now, assume a second
+cursor is opened, and the application attempts to write record A using
+the second cursor. Unfortunately, the first cursor has a read lock, so
+the second cursor cannot obtain its write lock. However, that read lock
+is held by the same thread of control, so the read lock can never be
+released if we block waiting for the write lock. This might appear to
+be a deadlock from the application's perspective, but Berkeley DB cannot
+identify it as such because it has no knowledge of which lockers belong
+to which threads of control. For this reason, application designers
+are encouraged to close cursors as soon as they are done with them.</p>
+<p>If the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> option was not specified when the <a href="../../api_c/db_class.html">DB</a>
+handle was opened, all uses of the <a href="../../api_c/db_class.html">DB</a> handle and all cursors
+created using that handle will use the same locker ID for all
+operations. In this case, if a single thread of control opens two
cursors or uses a combination of cursor and non-cursor operations, these
-operations are performed on behalf of different lockers. Conflicts that
-arise between these different lockers may not cause actual deadlocks, but
-can, in fact, permanently block the thread of control. For example,
-assume that an application creates a cursor and uses it to read record A.
-Now assume a second cursor is opened and the application attempts to write
-record A using the second cursor. Unfortunately, the first cursor has a
-read lock so the second cursor cannot obtain its write lock. However,
-that read lock is held by the same thread of control, so if we block
-waiting for the write lock, the read lock can never be released. This
-might appear to be a deadlock from the application's perspective, but
-Berkeley DB cannot identify it as such because it has no knowledge of which
-lockers belong to which threads of control. For this reason, application
-designers are encouraged to close cursors as soon as they are done with
-them.
-<p>Complicated operations that require multiple cursors (or combinations of
-cursor and non-cursor operations) can be performed in two ways. First,
-they may be performed within a transaction, in which case all operations
-lock on behalf of the designated locker ID. Alternatively, the
-<a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a> function duplicates a cursor, using the same locker ID as
-the originating cursor. There is no way to achieve this duplication
-functionality through the DB handle calls, but any DB call can be
-implemented by one or more calls through a cursor.
+operations are performed on behalf of the same locker, and so cannot
+deadlock or block the thread of control.</p>
+<p>Complicated operations that require multiple cursors (or combinations
+of cursor and non-cursor operations) can be performed in two ways.
+First, they may be performed within a transaction, in which case all
+operations lock on behalf of the designated transaction. Second, they
+may be performed using a local <a href="../../api_c/db_class.html">DB</a> handle, although, as
+<a href="../../api_c/db_open.html">DB-&gt;open</a> operations are relatively slow, this may not be a good
+idea. Finally, the <a href="../../api_c/dbc_dup.html">DBcursor-&gt;c_dup</a> function duplicates a cursor, using
+the same locker ID as the originating cursor. There is no way to
+achieve this duplication functionality through the <a href="../../api_c/db_class.html">DB</a> handle
+calls, but any <a href="../../api_c/db_class.html">DB</a> call can be implemented by one or more calls
+through a cursor.</p>
<p>When the access methods use transactions, many of these problems disappear.
The transaction ID is used as the locker ID for all operations performed
on behalf of the transaction. This means that the application may open
multiple cursors on behalf of the same transaction and these cursors will
all share a common locker ID. This is safe because transactions cannot
span threads of control, so the library knows that two cursors in the same
-transaction cannot modify the database concurrently.
-<p>As mentioned earlier, most of the Berkeley DB access methods use page level
-locking. During Btree traversal, lock-coupling is used to traverse the
-tree. Note that the tree traversal that occurs during an update operation
-can also use lock-coupling; it is not necessary to retain locks on
-internal Btree pages even if the item finally referenced will be updated.
-Even in the presence of transactions, locks obtained on internal pages of
-the Btree may be safely released as the traversal proceeds. This greatly
-improves concurrency. The only time internal locks become crucial is when
-internal pages are split or merged. When traversing duplicate data items
-for a key, the lock on the key value also acts as a lock on all duplicates
-of that key. Therefore, two conflicting threads of control cannot access
-the same duplicate set simultaneously.
-<p>The Recno access method uses a Btree as its underlying data
-representation and follows similar locking conventions. However, as the
-Recno access method must keep track of the number of children for all
-internal pages, it must obtain write locks on all internal pages during
-read and write operations. In the presence of transactions, these locks
-are not released until transaction commit.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/twopl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/cam_conv.html"><img src="../../images/next.gif" alt="Next"></a>
+transaction cannot modify the database concurrently.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/cam_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/nondb.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/cam_conv.html b/db/docs/ref/lock/cam_conv.html
index b37914890..0f16a12c7 100644
--- a/db/docs/ref/lock/cam_conv.html
+++ b/db/docs/ref/lock/cam_conv.html
@@ -1,53 +1,54 @@
-<!--$Id: cam_conv.so,v 10.10 2000/03/18 21:43:13 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: cam_conv.so,v 10.14 2003/10/18 19:16:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB Concurrent Data Store locking conventions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/am_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/dead.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/twopl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/am_conv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB Concurrent Data Store locking conventions</h1>
-<p>The Berkeley DB Concurrent Data Store product has a different set of conventions for locking. It
-provides multiple reader/single writer semantics, but not per-page locking
-or transaction recoverability. As such, it does its locking entirely at
-the interface to the access methods.
+<h3 align=center>Berkeley DB Concurrent Data Store locking conventions</h3>
+<p>The Berkeley DB Concurrent Data Store product has a simple set of conventions for locking. It
+provides multiple-reader/single-writer semantics, but not per-page
+locking or transaction recoverability. As such, it does its locking
+entirely in the Berkeley DB interface layer.</p>
<p>The object it locks is the file, identified by its unique file number.
The locking matrix is not one of the two standard lock modes, instead,
-we use a four-lock set, consisting of:
+we use a four-lock set, consisting of the following:</p>
<p><dl compact>
<p><dt>DB_LOCK_NG<dd>not granted (always 0)
<dt>DB_LOCK_READ<dd>read (shared)
<dt>DB_LOCK_WRITE<dd>write (exclusive)
<dt>DB_LOCK_IWRITE<dd>intention-to-write (shared with NG and READ, but conflicts with WRITE and IWRITE)
</dl>
-<p>The IWRITE lock is used for cursors that will be used for updating (IWRITE
-locks are implicitly obtained for write operations through the Berkeley DB
-handles, e.g., <a href="../../api_c/db_put.html">DB-&gt;put</a>, <a href="../../api_c/db_del.html">DB-&gt;del</a>). While the cursor is
-reading, the IWRITE lock is held, but as soon as the cursor is about to
-modify the database, the IWRITE is upgraded to a WRITE lock. This upgrade
-blocks until all readers have exited the database. Because only one
-IWRITE lock is allowed at any one time, no two cursors can ever try to
-upgrade to a WRITE lock at the same time, and therefore deadlocks are
-prevented, which is essential as Berkeley DB Concurrent Data Store does not include deadlock
-detection and recovery.
+<p>The IWRITE lock is used for cursors that will be used for updating
+(IWRITE locks are implicitly obtained for write operations through the
+Berkeley DB handles, for example, <a href="../../api_c/db_put.html">DB-&gt;put</a> or <a href="../../api_c/db_del.html">DB-&gt;del</a>). While
+the cursor is reading, the IWRITE lock is held; but as soon as the
+cursor is about to modify the database, the IWRITE is upgraded to a
+WRITE lock. This upgrade blocks until all readers have exited the
+database. Because only one IWRITE lock is allowed at any one time, no
+two cursors can ever try to upgrade to a WRITE lock at the same time,
+and therefore deadlocks are prevented, which is essential because Berkeley DB Concurrent Data Store
+does not include deadlock detection and recovery.</p>
<p>Applications that need to lock compatibly with Berkeley DB Concurrent Data Store must obey the
-following rules:
-<p><ol>
+following rules:</p>
+<ol>
<p><li>Use only lock modes DB_LOCK_NG, DB_LOCK_READ, DB_LOCK_WRITE,
DB_LOCK_IWRITE.
<p><li>Never attempt to acquire a WRITE lock on an object that is
already locked with a READ lock.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/am_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/dead.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/twopl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/am_conv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/config.html b/db/docs/ref/lock/config.html
index cc0b52481..d03ecedae 100644
--- a/db/docs/ref/lock/config.html
+++ b/db/docs/ref/lock/config.html
@@ -1,46 +1,44 @@
-<!--$Id: config.so,v 10.15 2000/12/08 20:43:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.21 2003/10/18 19:16:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring locking</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/max.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/max.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring locking</h1>
-<p>The <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a> function specifies that the deadlock detector
-should be run whenever a lock blocks. This option provides for rapid
-detection of deadlocks at the expense of potentially frequent
+<h3 align=center>Configuring locking</h3>
+<p>The <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> method specifies that the deadlock detector
+should be run whenever a lock is about to block. This option provides
+for rapid detection of deadlocks at the expense of potentially frequent
invocations of the deadlock detector. On a fast processor with a highly
-contentious application, where response time is critical, this is a good
-choice. An argument to the <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a> function indicates which
-transaction to abort when a deadlock is detected. It can take on any
-one of the following values:
-<p><dl compact>
-<p><dt><a href="../../api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a><dd>Abort the most recently started transaction.
-<dt><a href="../../api_c/env_set_lk_detect.html#DB_LOCK_OLDEST">DB_LOCK_OLDEST</a><dd>Abort the longest lived transaction.
-<dt><a href="../../api_c/env_set_lk_detect.html#DB_LOCK_RANDOM">DB_LOCK_RANDOM</a><dd>Abort whatever transaction the deadlock detector happens to find first.
-<dt><a href="../../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a><dd>Use the default policy (currently DB_RANDOM).
-</dl>
-<p>In general, <a href="../../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a> is probably the correct choice. If
-an application has long-running transactions, then
-<a href="../../api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a> will guarantee that transactions eventually
-complete, but it may do so at the expense of a large number of aborts.
-<p>The alternative to using the <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a> interface is
-to run the deadlock detector manually, using the Berkeley DB
-<a href="../../api_c/lock_detect.html">lock_detect</a> interface.
-<p>The <a href="../../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a> function allows you to specify your own locking
-conflicts matrix. This is an advanced configuration option, and rarely
-necessary.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/max.html"><img src="../../images/next.gif" alt="Next"></a>
+contentious application where response time is critical, this is a good
+choice. An option argument to the <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> method
+indicates which lock requests should be rejected.</p>
+<p>In general, when applications are not specifying lock and transaction
+timeout values, the <a href="../../api_c/env_set_lk_detect.html#DB_LOCK_DEFAULT">DB_LOCK_DEFAULT</a> option is probably the
+correct first choice, and other options should only be selected based
+on evidence that they improve transaction throughput. If an application
+has long-running transactions, <a href="../../api_c/env_set_lk_detect.html#DB_LOCK_YOUNGEST">DB_LOCK_YOUNGEST</a> will guarantee
+that transactions eventually complete, but it may do so at the expense
+of a large number of lock request rejections (and therefore, transaction
+aborts).</p>
+<p>The alternative to using the <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> method is to
+explicitly perform deadlock detection using the Berkeley DB
+<a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> method.</p>
+<p>The <a href="../../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a> method allows you to specify your own
+locking conflicts matrix. This is an advanced configuration option,
+and is almost never necessary.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/max.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/dead.html b/db/docs/ref/lock/dead.html
index bb77e9822..ad9df2199 100644
--- a/db/docs/ref/lock/dead.html
+++ b/db/docs/ref/lock/dead.html
@@ -1,93 +1,84 @@
-<!--$Id: dead.so,v 10.13 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dead.so,v 10.20 2003/10/18 19:16:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Deadlocks and deadlock avoidance</title>
+<title>Berkeley DB Reference Guide: Deadlock detection</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/cam_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/stdmode.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/timeout.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deadlocks and deadlock avoidance</h1>
-<p>Practically any application that uses locking may deadlock.
-In nearly all cases, in order to recover from a deadlock, transactions
-must be used, so that an operation that deadlocks mid-way through can
-be undone, leaving the database in a consistent state.
-As the access methods may perform updates on multiple pages during a
-single API call, transactions are necessary even when the application
-makes only single update calls into the database.
-The only exception to this rule is when all the threads accessing
-the database are doing so read-only or when the Concurrent Data Store
-product is used; this product guarantees deadlock-free operation at the
-expense of reduced concurrency.
-Since deadlocks cannot be prevented, Berkeley DB provides the ability to detect
-deadlocks and recover from them gracefully.
-<p>Deadlocks occur when two or more threads of control are blocked waiting
-on each other's forward progress. Consider two transactions, each of
-which wants to modify items A and B. Assume that transaction 1 modifies
-first A and then B, but transaction 2 modifies B then A. Now, assume
-that transaction 1 obtains its writelock on A, but before it obtains its
-writelock on B, it is descheduled and transaction 2 runs. Transaction 2
-successfully acquires its writelock on B, but then blocks when it tries
-to obtain its writelock on A, because transaction 1 already holds a
-writelock on it. This is a deadlock. Transaction 1 cannot make forward
-progress until Transaction 2 releases its lock on B, but Transaction 2
-cannot make forward progress until Transaction 1 releases its lock on A.
-<p>The <a href="../../api_c/lock_detect.html">lock_detect</a> function runs an instance of the Berkeley DB deadlock
-detector. The <a href="../../utility/db_deadlock.html">db_deadlock</a> utility performs deadlock detection by
-calling <a href="../../api_c/lock_detect.html">lock_detect</a> at regular intervals. When a deadlock exists
-in the system, all of the threads of control involved in the deadlock are,
-by definition, waiting on a lock. The deadlock detector examines the
-state of the lock manager and identifies a deadlock, and selects one of
-the participants to abort. (See <a href="../../ref/lock/config.html">Configuring locking</a> for a discussion of how a participant is selected).
-The lock on which the selected participant is waiting is identified such
-that the <a href="../../api_c/lock_get.html">lock_get</a> (or <a href="../../api_c/lock_vec.html">lock_vec</a>) call in which that lock
-was requested will receive an error return of <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>.
-In the access methods, this error return is propagated back through the
-Berkeley DB interface as DB_LOCK_DEADLOCK.
-<p>When an application receives an DB_LOCK_DEADLOCK, the correct action is
-to abort the current transaction, and optionally retry it. Transaction
-support is necessary for recovery from deadlocks. When a deadlock occurs,
-the database may be left in an inconsistent or corrupted state, and any
-database changes already accomplished must be undone before the
-application can proceed further.
-<p>The deadlock detector identifies deadlocks by looking for a cycle in what
-is commonly referred to as its "waits-for" graph. More precisely, the
-deadlock detector reads through the lock table, and finds each object
-currently locked. Each object has a list of transactions or operations
-(hereafter called lockers) that currently hold locks on the object and
-possibly a list of waiting lockers, waiting on the lockers holding it.
-Each object creates one or more partial orderings of lockers. That is,
-for a particular object, every waiting locker comes after every holding
-locker, because that holding locker must release its lock before the
-waiting locker can make forward progress. Conceptually, after each object
-has been examined, the partial orderings are topologically sorted (see
-tsort). If this topological sort reveals any cycles, then the lockers
-forming the cycle are involved in a deadlock. One of the lockers is
-selected for abortion.
-<p>It is possible that aborting a single transaction involved in a deadlock
-is not enough to allow other transactions to make forward progress.
-In this case, the deadlock detector will be called repeatedly.
-Unfortunately, at the time a transaction is selected for abortion,
-there is not enough information available to determine if aborting
-that single transaction will allow forward progress or not. Since
+<h3 align=center>Deadlock detection</h3>
+<p>Practically any application that uses locking may deadlock. The
+exceptions to this rule are when all the threads of control accessing
+the database are read-only or when the Berkeley DB Concurrent Data Store product is used; the
+Berkeley DB Concurrent Data Store product guarantees deadlock-free operation at the expense of
+reduced concurrency. While there are data access patterns that are
+deadlock free (for example, an application doing nothing but overwriting
+fixed-length records in an already existing database), they are
+extremely rare.</p>
+<p>When a deadlock exists in the system, all the threads of control
+involved in the deadlock are, by definition, waiting on a lock. The
+deadlock detector examines the state of the lock manager and identifies
+a deadlock, and selects one of the lock requests to reject. (See
+<a href="../../ref/lock/config.html">Configuring locking</a> for a
+discussion of how a participant is selected). The <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> or
+<a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> call for which the selected participant is waiting then
+returns a <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> error. When using the Berkeley DB access
+methods, this error return is propagated back through the Berkeley DB database
+handle method to the calling application.</p>
+<p>The deadlock detector identifies deadlocks by looking for a cycle in
+what is commonly referred to as its "waits-for" graph. More precisely,
+the deadlock detector reads through the lock table, and reviews each
+lock object currently locked. Each object has lockers that currently
+hold locks on the object and possibly a list of lockers waiting for a
+lock on the object. Each object's list of waiting lockers defines a
+partial ordering. That is, for a particular object, every waiting
+locker comes after every holding locker because that holding locker must
+release its lock before the waiting locker can make forward progress.
+Conceptually, after each object has been examined, the partial orderings
+are topologically sorted. If this topological sort reveals any cycles,
+the lockers forming the cycle are involved in a deadlock. One of the
+lockers is selected for rejection.</p>
+<p>It is possible that rejecting a single lock request involved in a
+deadlock is not enough to allow other lockers to make forward progress.
+Unfortunately, at the time a lock request is selected for rejection,
+there is not enough information available to determine whether rejecting
+that single lock request will allow forward progress or not. Because
most applications have few deadlocks, Berkeley DB takes the conservative
-approach, aborting as few transactions as may be necessary to resolve
-the existing deadlocks. In particular, for each unique cycle found
-in the waits-for graph described in the previous paragraph, only one
-transaction is selected for abortion. However, if there are multiple
-cycles, then one transaction from each cycle is selected for abortion.
-Only after the aborting transactions have received the deadlock return
-and aborted their transactions, can it be determined if it is necessary
-to abort other transactions in order to allow forward progress.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/cam_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/config.html"><img src="../../images/next.gif" alt="Next"></a>
+approach, rejecting as few requests as may be necessary to resolve the
+existing deadlocks. In particular, for each unique cycle found in the
+waits-for graph described in the previous paragraph, only one lock
+request is selected for rejection. However, if there are multiple
+cycles, one lock request from each cycle is selected for rejection.
+Only after the enclosing transactions have received the lock request
+rejection return and aborted their transactions can it be determined
+whether it is necessary to reject additional lock requests in order to
+allow forward progress.</p>
+<p>The <a href="../../utility/db_deadlock.html">db_deadlock</a> utility performs deadlock detection by calling
+the underlying Berkeley DB <a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> method at regular intervals
+(<a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> runs a single iteration of the Berkeley DB deadlock
+detector). Alternatively, applications can create their own deadlock
+utility or thread by calling the <a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> method directly, or by
+using the <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> method to configure Berkeley DB to
+automatically run the deadlock detector whenever there is a conflict
+over a lock. The tradeoffs between using the <a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> and
+<a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> methods is that automatic deadlock detection will
+resolve deadlocks more quickly (because as the deadlock detector runs
+as soon as the lock request blocks), however, automatic deadlock
+detection often runs the deadlock detector when there is no need for
+it, and for applications with large numbers of locks and/or where many
+operations block temporarily on locks but are soon able to proceed,
+automatic detection can decrease performance.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/stdmode.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/timeout.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/deaddbg.html b/db/docs/ref/lock/deaddbg.html
index 749f7ba1f..273e509c1 100644
--- a/db/docs/ref/lock/deaddbg.html
+++ b/db/docs/ref/lock/deaddbg.html
@@ -1,36 +1,36 @@
-<!--Id: deaddbg.so,v 10.3 2002/06/19 19:23:05 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: deaddbg.so,v 10.4 2003/03/06 21:22:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Deadlock debugging</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td align=right><a href="../../ref/lock/timeout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/timeout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deadlock debugging</h1>
+<h3 align=center>Deadlock debugging</h3>
<p>An occasional debugging problem in Berkeley DB applications is unresolvable
deadlock. The output of the <b>-Co</b> flags of the <a href="../../utility/db_stat.html">db_stat</a>
utility can be used to detect and debug these problems. The following
-is a typical example of the output of this utility:
-<p><blockquote><pre>Locks grouped by object
+is a typical example of the output of this utility:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
1 READ 1 HELD a.db handle 0
80000004 WRITE 1 HELD a.db page 3</pre></blockquote>
<p>In this example, we have opened a database and stored a single key/data
pair in it. Because we have a database handle open, we have a read lock
on that database handle. The database handle lock is the read lock
-labelled <i>handle</i>. (We can normally ignore handle locks for
+labeled <i>handle</i>. (We can normally ignore handle locks for
the purposes of database debugging, as they will only conflict with
other handle operations, for example, an attempt to remove the database
will block because we are holding the handle locked, but reading and
-writing the database will not conflict with the handle lock.)
+writing the database will not conflict with the handle lock.)</p>
<p>It is important to note that locker IDs are 32-bit unsigned integers,
and are divided into two name spaces. Locker IDs with the high bit set
(that is, values 80000000 or higher), are locker IDs associated with
@@ -38,25 +38,25 @@ transactions. Locker IDs without the high bit set are locker IDs that
are not associated with a transaction. Locker IDs associated with
transactions map one-to-one with the transaction, that is, a transaction
never has more than a single locker ID, and all of the locks acquired
-by the transaction will be acquired on behalf of the same locker ID.
+by the transaction will be acquired on behalf of the same locker ID.</p>
<p>We also hold a write lock on the database page where we stored the new
key/data pair. The page lock is labeled <i>page</i> and is on page
number 3. If we were to put an additional key/data pair in the
-database, we would see the following output:
-<p><blockquote><pre>Locks grouped by object
+database, we would see the following output:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
80000004 WRITE 2 HELD a.db page 3
1 READ 1 HELD a.db handle 0</pre></blockquote>
<p>That is, we have acquired a second reference count to page number 3, but
have not acquired any new locks. If we add an entry to a different page
-in the database, we would acquire additional locks:
-<p><blockquote><pre>Locks grouped by object
+in the database, we would acquire additional locks:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
1 READ 1 HELD a.db handle 0
80000004 WRITE 2 HELD a.db page 3
80000004 WRITE 1 HELD a.db page 2</pre></blockquote>
-<p>Here's a simple example of one lock blocking another one:
-<p><blockquote><pre>Locks grouped by object
+<p>Here's a simple example of one lock blocking another one:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
80000004 WRITE 1 HELD a.db page 2
80000005 WRITE 1 WAIT a.db page 2
@@ -69,7 +69,7 @@ deadlock, because locker 80000004 is not blocked on anything.
Presumably, the thread of control using locker 80000004 will proceed,
eventually release its write lock on page 2, at which point the thread
of control using locker 80000005 can also proceed, acquiring a write
-lock on page 2.
+lock on page 2.</p>
<p>If lockers 80000004 and 80000005 are not in different threads of
control, the result would be <i>self deadlock</i>. Self deadlock
is not a true deadlock, and won't be detected by the Berkeley DB deadlock
@@ -78,18 +78,18 @@ be done on behalf of locker 80000004, then the lock would eventually be
released, and locker 80000005 could acquire the lock and itself proceed.
So, the key element is that the thread of control holding the lock
cannot proceed because it the same thread as is blocked waiting on the
-lock.
+lock.</p>
<p>Here's an example of three transactions reaching true deadlock. First,
three different threads of control opened the database, acquiring three
-database handle read locks.
-<p><blockquote><pre>Locks grouped by object
+database handle read locks.</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
1 READ 1 HELD a.db handle 0
3 READ 1 HELD a.db handle 0
5 READ 1 HELD a.db handle 0</pre></blockquote>
<p>The three threads then each began a transaction, and put a key/data pair
-on a different page:
-<p><blockquote><pre>Locks grouped by object
+on a different page:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
80000008 WRITE 1 HELD a.db page 4
1 READ 1 HELD a.db handle 0
@@ -104,12 +104,12 @@ Locker Mode Count Status ----------- Object ----------
thread using locker 80000007, on page 3, and the thread using locker
80000008 on page 4. Because the database is a 2-level Btree, the tree
was searched, and so each transaction acquired a read lock on the Btree
-root page (page 1) as part of this operation.
+root page (page 1) as part of this operation.</p>
<p>The three threads then each attempted to put a second key/data pair on
a page currently locked by another thread. The thread using locker
80000006 tried to put a key/data pair on page 3, the thread using locker
-80000007 on page 4, and the thread using locker 80000008 on page 2:
-<p><blockquote><pre>Locks grouped by object
+80000007 on page 4, and the thread using locker 80000008 on page 2:</p>
+<blockquote><pre>Locks grouped by object
Locker Mode Count Status ----------- Object ----------
80000008 WRITE 1 HELD a.db page 4
80000007 WRITE 1 WAIT a.db page 4
@@ -133,9 +133,9 @@ And the thread using locker 80000006 is blocked by
the thread using locker 80000007, due to the lock on page 3.
Since none of the threads of control can make
progress, one of them will have to be killed in order to resolve the
-deadlock.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/lock/timeout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
+deadlock.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/timeout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/intro.html b/db/docs/ref/lock/intro.html
index b5c85af05..46f938a81 100644
--- a/db/docs/ref/lock/intro.html
+++ b/db/docs/ref/lock/intro.html
@@ -1,89 +1,107 @@
-<!--$Id: intro.so,v 10.16 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.26 2003/10/18 19:16:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB and locking</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB and locking</h1>
-<p>The lock subsystem provides interprocess and intraprocess concurrency
-control mechanisms. While the locking system is used extensively by the
-Berkeley DB access methods and transaction system, it may also be used as a
-stand-alone subsystem to provide concurrency control to any set of
-designated resources.
-<p>The lock subsystem is created, initialized, and opened by calls to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> with the <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> or <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a>
-flags specified.
-<p>The <a href="../../api_c/lock_detect.html">lock_detect</a> function provides the programmatic interface to
-the Berkeley DB deadlock detector. Whenever two threads of control issue lock
-requests that are not carefully ordered or that require upgrading locks
-(obtaining write locks on objects that are already read-locked), the
-possibility for deadlock arises. A deadlock occurs when two or more
-threads of control are blocked, waiting for actions that another one of
-these blocked threads must take. For example, assume that threads one
-and two have each obtained read locks on object A. Now suppose that both
-threads wish to obtain write locks on object A. Neither thread can be
-granted its writelock (because of the other thread's readlock). Both
-threads block and will never unblock because the event for which they are
-waiting can never happen.
-<p>The deadlock detector examines all the locks held in the environment and
-identifies situations where no thread can make forward progress. It then
-selects one of the participants in the deadlock (according to the argument
-that was specified to <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>) and forces it to return
-the value DB_LOCK_DEADLOCK, which indicates that a deadlock occurred.
-The thread receiving such an error should abort its current transaction,
-or simply release all its locks if it is not running in a transaction,
-and retry the operation.
-<p>The <a href="../../api_c/lock_vec.html">lock_vec</a> interface is used to acquire and release locks.
-<p>Two additional interfaces, <a href="../../api_c/lock_get.html">lock_get</a> and <a href="../../api_c/lock_put.html">lock_put</a>, are
-provided. These interfaces are simpler front-ends to the <a href="../../api_c/lock_vec.html">lock_vec</a>
-functionality, where <a href="../../api_c/lock_get.html">lock_get</a> acquires a lock, and
-<a href="../../api_c/lock_put.html">lock_put</a> releases a lock that was acquired using <a href="../../api_c/lock_get.html">lock_get</a>
-or <a href="../../api_c/lock_vec.html">lock_vec</a>.
-<p>It is up to the application to specify lockers and objects appropriately.
-When used with the Berkeley DB access methods, these lockers and objects are
-handled completely internally, but an application using the lock manager
+<h3 align=center>Berkeley DB and locking</h3>
+<p>The locking subsystem provides interprocess and intraprocess concurrency
+control mechanisms. Although the lock system is used extensively by
+the Berkeley DB access methods and transaction system, it may also be used as
+a standalone subsystem to provide concurrency control to any set of
+designated resources.</p>
+<p>The Lock subsystem is created, initialized, and opened by calls to
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> with the <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> or <a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a>
+flags specified.</p>
+<p>The <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> method is used to acquire and release locks. The
+<a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> method performs any number of lock operations atomically. It
+also provides the capability to release all locks held by a particular
+locker and release all the locks on a particular object. (Performing
+multiple lock operations atomically is useful in performing Btree
+traversals -- you want to acquire a lock on a child page and once
+acquired, immediately release the lock on its parent. This is
+traditionally referred to as <i>lock-coupling</i>). Two additional
+methods, <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> and <a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a>, are provided. These
+methods are simpler front-ends to the <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> functionality,
+where <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> acquires a lock, and <a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> releases a
+lock that was acquired using <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> or <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a>. All
+locks explicitly requested by an application should be released via
+calls to <a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> or <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a>. Using <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a>
+instead of separate calls to <a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> and <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> also
+reduces the synchronization overhead between multiple threads or
+processes. The three methods are fully compatible, and may be used
+interchangeably.</p>
+<p>Applications must specify lockers and lock objects appropriately. When
+used with the Berkeley DB access methods, lockers and objects are handled
+completely internally, but an application using the lock manager
directly must either use the same conventions as the access methods or
-define its own convention to which it adheres. If the application is
-using the access methods with locking at the same time that it is calling
-the lock manager directly, the application must follow a convention that
-is compatible with the access methods' use of the locking subsystem. See
-<a href="../../ref/lock/am_conv.html">Access method locking conventions</a>
-for more information.
-<p>The <a href="../../api_c/lock_id.html">lock_id</a> function returns a unique ID which may safely be used
-as the locker parameter to the <a href="../../api_c/lock_vec.html">lock_vec</a> interface. The access
-methods use <a href="../../api_c/lock_id.html">lock_id</a> to generate unique lockers for the cursors
-associated with a database.
-<p>The <a href="../../api_c/lock_vec.html">lock_vec</a> function performs any number of lock operations
-atomically. It also provides the ability to release all locks held by a
-particular locker and release all the locks on a particular object.
-Performing multiple lock operations atomically is useful in performing
-Btree traversals where you want to acquire a lock on a child page and once
-acquired, immediately release the lock on its parent (this is
-traditionally referred to as "lock-coupling"). Using <a href="../../api_c/lock_vec.html">lock_vec</a>
-instead of separate calls to <a href="../../api_c/lock_put.html">lock_put</a> and <a href="../../api_c/lock_get.html">lock_get</a> reduces
-the synchronization overhead between multiple threads or processes.
-<p>The three interfaces, <a href="../../api_c/lock_get.html">lock_get</a>, <a href="../../api_c/lock_put.html">lock_put</a> and <a href="../../api_c/lock_vec.html">lock_vec</a>,
-are fully compatible, and may be used interchangeably.
-<p>All locks explicitly requested by an application should be released via
-calls to <a href="../../api_c/lock_put.html">lock_put</a> or <a href="../../api_c/lock_vec.html">lock_vec</a>.
-<p>The <a href="../../api_c/lock_stat.html">lock_stat</a> function returns information about the status of
+define its own convention to which it adheres. If an application is
+using the access methods with locking at the same time that it is
+calling the lock manager directly, the application must follow a
+convention that is compatible with the access methods' use of the
+locking subsystem. See <a href="../../ref/lock/am_conv.html">Access
+method locking conventions</a> for more information.</p>
+<p>The <a href="../../api_c/lock_id.html">DB_ENV-&gt;lock_id</a> function returns a unique ID that may safely be used
+as the locker parameter to the <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> method. The access methods
+use <a href="../../api_c/lock_id.html">DB_ENV-&gt;lock_id</a> to generate unique lockers for the cursors
+associated with a database.</p>
+<p>The <a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> function provides the programmatic interface to
+the Berkeley DB deadlock detector. Whenever two threads of control issue lock
+requests concurrently, the possibility for deadlock arises. A deadlock
+occurs when two or more threads of control are blocked, waiting for
+actions that another one of the blocked threads must take. For example,
+assume that threads A and B have each obtained read locks on object X.
+Now suppose that both threads want to obtain write locks on object X.
+Neither thread can be granted its write lock (because of the other
+thread's read lock). Both threads block and will never unblock because
+the event for which they are waiting can never happen.</p>
+<p>The deadlock detector examines all the locks held in the environment,
+and identifies situations where no thread can make forward progress.
+It then selects one of the participants in the deadlock (according to
+the argument that was specified to <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a>), and
+forces it to return the value <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, which indicates
+that a deadlock occurred. The thread receiving such an error must
+release all of its locks and undo any incomplete modifications to the
+locked resource. Locks are typically released, and modifications
+undone, by closing any cursors involved in the operation and aborting
+any transaction enclosing the operation. The operation may optionally
+be retried.</p>
+<p>The <a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a> function returns information about the status of
the lock subsystem. It is the programmatic interface used by the
-<a href="../../utility/db_stat.html">db_stat</a> utility.
-<p>The locking subsystem is closed by the call to <a href="../../api_c/env_close.html">DBENV-&gt;close</a>.
+<a href="../../utility/db_stat.html">db_stat</a> utility.</p>
+<p>The locking subsystem is closed by the call to <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a>.</p>
<p>Finally, the entire locking subsystem may be discarded using the
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> interface.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/page.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method.</p>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:00:52 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Locking Subsystem and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td><td>Set lock conflicts matrix</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a></td><td>Set automatic deadlock detection</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a></td><td>Set maximum number of lockers</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a></td><td>Set maximum number of locks</td></tr>
+<tr><td><a href="../../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a></td><td>Set maximum number of lock objects</td></tr>
+<tr><td><a href="../../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a></td><td>Set lock and transaction timeout</td></tr>
+<tr><td><a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a></td><td>Perform deadlock detection</td></tr>
+<tr><td><a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a></td><td>Acquire a lock</td></tr>
+<tr><td><a href="../../api_c/lock_id.html">DB_ENV-&gt;lock_id</a></td><td>Acquire a locker ID</td></tr>
+<tr><td><a href="../../api_c/lock_id_free.html">DB_ENV-&gt;lock_id_free</a></td><td>Release a locker ID</td></tr>
+<tr><td><a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a></td><td>Release a lock</td></tr>
+<tr><td><a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a></td><td>Return lock subsystem statistics</td></tr>
+<tr><td><a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a></td><td>Acquire/release locks</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/max.html b/db/docs/ref/lock/max.html
index 236229090..fe414de65 100644
--- a/db/docs/ref/lock/max.html
+++ b/db/docs/ref/lock/max.html
@@ -1,88 +1,95 @@
-<!--$Id: max.so,v 10.2 2000/12/21 19:11:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: max.so,v 10.7 2003/10/30 19:38:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring locking: sizing the system</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/nondb.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/stdmode.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring locking: sizing the system</h1>
-<p>The lock system is sized using the following three functions:
-<p><blockquote><pre><a href="../../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>
-<a href="../../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>
-<a href="../../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a></pre></blockquote>
-<p>The <a href="../../api_c/env_set_lk_max_locks.html">DBENV-&gt;set_lk_max_locks</a>, <a href="../../api_c/env_set_lk_max_lockers.html">DBENV-&gt;set_lk_max_lockers</a>
-and <a href="../../api_c/env_set_lk_max_objects.html">DBENV-&gt;set_lk_max_objects</a> functions specify, respectively, the
-maximum number of locks, lockers and locked objects supported by the
-lock subsystem. The maximum number of locks is the number of locks that
+<h3 align=center>Configuring locking: sizing the system</h3>
+<p>The lock system is sized using the following three methods:</p>
+<blockquote><pre><a href="../../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a>
+<a href="../../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a>
+<a href="../../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a></pre></blockquote>
+<p>The <a href="../../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a>, <a href="../../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a>,
+and <a href="../../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a> methods specify the maximum number of
+locks, lockers, and locked objects supported by the lock subsystem,
+respectively. The maximum number of locks is the number of locks that
can be simultaneously requested in the system. The maximum number of
lockers is the number of lockers that can simultaneously request locks
in the system. The maximum number of lock objects is the number of
objects that can simultaneously be locked in the system. Selecting
appropriate values requires an understanding of your application and
-its databases. If the values are too small, then requests for locks in
-an application will fail. If the values are too large, then the locking
+its databases. If the values are too small, requests for locks in an
+application will fail. If the values are too large, the locking
subsystem will consume more resources than is necessary. It is better
-to err in the direction of allocating too many locks, lockers and
-objects as increasing the number of locks does not require large amounts
-of additional resources.
+to err in the direction of allocating too many locks, lockers, and
+objects because increasing the number of locks does not require large
+amounts of additional resources.</p>
<p>The recommended algorithm for selecting the maximum number of locks,
-lockers and lock objects, is to run the application under stressful
+lockers, and lock objects is to run the application under stressful
conditions and then review the lock system's statistics to determine
-the maximum number of locks, lockers and lock objects that were used.
+the maximum number of locks, lockers, and lock objects that were used.
Then, double these values for safety. However, in some large
applications, finer granularity of control is necessary in order to
-minimize the size of the lock subsystem.
-<p>The maximum number of lockers can be estimated as follows:
-<ul type=disc>
-<li>If the
-database environment is configured to use transactions, then the maximum
-number of lockers needed is the number of simultaneously active
+minimize the size of the Lock subsystem.</p>
+<p>The maximum number of lockers can be estimated as follows:</p>
+<p><ul type=disc>
+<li>If the database environment is configured to use transactions, the
+maximum number of lockers needed is the number of simultaneously active
transactions and child transactions (where a child transaction is active
until its parent commits or aborts, not until it commits or aborts).
-<li>If the database environment is not configured to use transactions, then
-the maximum number of lockers needed is the number of simultaneous
+<li>If the database environment is not configured to use transactions, the
+maximum number of lockers needed is the number of simultaneous
non-cursor operations plus an additional locker for every simultaneously
-open cursor.
+open cursor or database handle.
</ul>
-<p>The maximum number of lock objects needed can be estimated as follows:
-<ul type=disc>
-<li>For Btree and Recno access methods, you will need, at a minimum, one
-lock object per level of the database tree. (Unless keys are quite
-large with respect to the page size, neither Recno nor Btree database
-trees should ever be deeper than five levels.) Then, you will need one
-lock object for each leaf page of the database tree that will be
+<p>The maximum number of lock objects needed for a single database
+operation can be estimated as follows:</p>
+<p><ul type=disc>
+<li>For Btree and Recno access methods, you will need one lock object per
+level of the database tree, at a minimum. (Unless keys are quite large
+with respect to the page size, neither Recno nor Btree database trees
+should ever be deeper than five levels.) Then, you will need one lock
+object for each leaf page of the database tree that will be
simultaneously accessed.
-<li>For the Queue access method you will need one lock object per record
+<li>For the Queue access method, you will need one lock object per record
that is simultaneously accessed. To this, add one lock object per page
-that will be simultaneously accessed. (Since the Queue access method
-uses fixed-length records, and the database page size is known, it is
-possible to calculate the number of pages and therefore, lock objects,
-required.) Deleted records skipped by a <a href="../../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a> or
+that will be simultaneously accessed. (Because the Queue access method
+uses fixed-length records and the database page size is known, it is
+possible to calculate the number of pages -- and, therefore, the lock
+objects -- required.) Deleted records skipped by a <a href="../../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a> or
<a href="../../api_c/dbc_get.html#DB_PREV">DB_PREV</a> operation do not require a separate lock object.
-Further, if your application is using transactions, then no database
+Further, if your application is using transactions, no database
operation will ever use more than three lock objects at any time.
-<li>For the Hash access method you only need a single lock object.
+<li>For the Hash access method, you only need a single lock object.
</ul>
<p>For all access methods, you should then add an additional lock object
-per database, for the database's metadata page.
+per database for the database's metadata page.</p>
+<p>Note that transactions accumulate locks over the transaction lifetime,
+and the lock objects required by a single transaction is the total lock
+objects required by all of the database operations in the transaction.
+However, a database page (or record, in the case of the Queue access
+method), that is accessed multiple times within a transaction only
+requires a single lock object for the entire transaction.</p>
<p>The maximum number of locks required by an application cannot be easily
estimated. It is possible to calculate a maximum number of locks by
multiplying the maximum number of lockers, times the maximum number of
lock objects, times two (two for the two possible lock modes for each
object, read and write). However, this is a pessimal value, and real
-applications are unlikely to actually need that many locks. Review of
-the lock subsystem statistics is the best way to determine this value.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/nondb.html"><img src="../../images/next.gif" alt="Next"></a>
+applications are unlikely to actually need that many locks. Reviewing
+the Lock subsystem statistics is the best way to determine this value.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/stdmode.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/nondb.html b/db/docs/ref/lock/nondb.html
index 4fb37d6d7..26d06e311 100644
--- a/db/docs/ref/lock/nondb.html
+++ b/db/docs/ref/lock/nondb.html
@@ -1,50 +1,51 @@
-<!--$Id: nondb.so,v 10.10 2000/12/08 20:43:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: nondb.so,v 10.15 2001/05/22 19:39:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Locking and non-Berkeley DB applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/am_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Locking and non-Berkeley DB applications</h1>
-<p>The locking subsystem is useful outside the context of Berkeley DB. It can be
-used to manage concurrent access to any collection of either ephemeral or
-persistent objects. That is, the lock region can persist across
+<h3 align=center>Locking and non-Berkeley DB applications</h3>
+<p>The Lock subsystem is useful outside the context of Berkeley DB. It can be
+used to manage concurrent access to any collection of either ephemeral
+or persistent objects. That is, the lock region can persist across
invocations of an application, so it can be used to provide long-term
-locking (e.g., conference room scheduling).
+locking (for example, conference room scheduling).</p>
<p>In order to use the locking subsystem in such a general way, the
-applications must adhere to a convention for naming objects and lockers.
-Consider the conference room scheduling problem described above. Assume
-there are three conference rooms and that we wish to schedule them in
-half-hour intervals.
-<p>The scheduling application must then select a way to identify each
+applications must adhere to a convention for identifying objects and
+lockers. Consider a conference room scheduling problem, in which there
+are three conference rooms scheduled in half-hour intervals. The
+scheduling application must then select a way to identify each
conference room/time slot combination. In this case, we could describe
-the objects being locker as bytestrings consisting of the conference room
-name, the date on which it is needed, and the beginning of the appropriate
-half-hour slot.
-<p>Lockers are 32-bit numbers, so we might choose to use the User ID of the
-individual running the scheduling program. To schedule half-hour slots,
-all the application need do is issue a <a href="../../api_c/lock_get.html">lock_get</a> call for the
-appropriate locker/object pair. To schedule a longer slot, the
-application would issue a <a href="../../api_c/lock_vec.html">lock_vec</a> call with one <a href="../../api_c/lock_get.html">lock_get</a>
-operation per half-hour up to the total length. If the <a href="../../api_c/lock_vec.html">lock_vec</a>
-call fails, the application would have to release the parts of the time
-slot that were obtained.
+the objects being locked as bytestrings consisting of the conference
+room name, the date when it is needed, and the beginning of the
+appropriate half-hour slot.</p>
+<p>Lockers are 32-bit numbers, so we might choose to use the User ID of
+the individual running the scheduling program. To schedule half-hour
+slots, all the application needs to do is issue a <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> call
+for the appropriate locker/object pair. To schedule a longer slot, the
+application needs to issue a <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> call, with one
+<a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> operation per half-hour -- up to the total length. If
+the <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> call fails, the application would have to release
+the parts of the time slot that were obtained.</p>
<p>To cancel a reservation, the application would make the appropriate
-<a href="../../api_c/lock_put.html">lock_put</a> calls. To reschedule a reservation, the <a href="../../api_c/lock_get.html">lock_get</a>
-and <a href="../../api_c/lock_put.html">lock_put</a> calls could all be made inside of a single
-<a href="../../api_c/lock_vec.html">lock_vec</a> call. The output of <a href="../../api_c/lock_stat.html">lock_stat</a> could be
-post-processed into a human-readable schedule of conference room use.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> calls. To reschedule a reservation, the
+<a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> and <a href="../../api_c/lock_put.html">DB_ENV-&gt;lock_put</a> calls could all be made inside of
+a single <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> call. The output of <a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a> could
+be post-processed into a human-readable schedule of conference room
+use.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/am_conv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/notxn.html b/db/docs/ref/lock/notxn.html
index 16b00cf66..ad6e843a2 100644
--- a/db/docs/ref/lock/notxn.html
+++ b/db/docs/ref/lock/notxn.html
@@ -1,46 +1,47 @@
-<!--$Id: notxn.so,v 10.10 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: notxn.so,v 10.15 2001/05/22 19:39:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Locking without transactions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/stdmode.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/twopl.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/page.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/twopl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Locking without transactions</h1>
-<p>If an application runs with locking specified, but not transactions (e.g.,
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> is called with <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> or
+<h3 align=center>Locking without transactions</h3>
+<p>If an application runs with locking specified, but not transactions (for
+example, <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> is called with <a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a> or
<a href="../../api_c/env_open.html#DB_INIT_CDB">DB_INIT_CDB</a> specified, but not <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a>), locks are
normally acquired during each Berkeley DB operation and released before the
operation returns to the caller. The only exception is in the case of
-cursor operations. As cursors identify a particular position in a file,
-a cursor must retain a read-lock across cursor calls to make sure that
-that position is uniquely identifiable during the next cursor call,
-because an operation using <a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a> must reference the same
-record as the previous cursor call. Such cursor locks cannot be released
-until either the cursor is reset using the <a href="../../api_c/db_get.html#DB_GET_BOTH">DB_GET_BOTH</a>,
-<a href="../../api_c/dbc_get.html#DB_SET">DB_SET</a>, <a href="../../api_c/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a>, <a href="../../api_c/dbc_put.html#DB_KEYFIRST">DB_KEYFIRST</a>, or
-<a href="../../api_c/dbc_put.html#DB_KEYLAST">DB_KEYLAST</a> functionality, in which case a new cursor lock is
-established, or the cursor is closed. As a result, application designers
-are encouraged to close cursors as soon as possible.
+cursor operations. Cursors identify a particular position in a file.
+For this reason, cursors must retain read locks across cursor calls to
+make sure that the position is uniquely identifiable during a subsequent
+cursor call, and so that an operation using <a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a> will
+always refer to the same record as a previous cursor call. These cursor
+locks cannot be released until the cursor is either repositioned and a
+new cursor lock established (for example, using the <a href="../../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a>
+or <a href="../../api_c/dbc_get.html#DB_SET">DB_SET</a> flags), or the cursor is closed. As a result,
+application writers are encouraged to close cursors as soon as
+possible.</p>
<p>It is important to realize that concurrent applications that use locking
-must ensure that two concurrent threads do not interfere with each other.
-However, as Btree and Hash access method page splits can occur at any
-time, there is virtually no way to guarantee that an application which
-writes the database cannot deadlock. Applications running without the
-protection of transactions may deadlock, and when they do so, can leave
-the database in an inconsistent state. Applications that need concurrent
-access, but not transactions, are more safely implemented using the Berkeley DB Concurrent Data Store
-Product.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/stdmode.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/twopl.html"><img src="../../images/next.gif" alt="Next"></a>
+must ensure that two concurrent threads do not block each other.
+However, because Btree and Hash access method page splits can occur at
+any time, there is virtually no way to guarantee that an application
+that writes the database cannot deadlock. Applications running without
+the protection of transactions may deadlock, and can leave the database
+in an inconsistent state when they do so. Applications that need
+concurrent access, but not transactions, are more safely implemented
+using the Berkeley DB Concurrent Data Store Product.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/page.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/twopl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/page.html b/db/docs/ref/lock/page.html
index a7e43b3af..e02894f31 100644
--- a/db/docs/ref/lock/page.html
+++ b/db/docs/ref/lock/page.html
@@ -1,62 +1,72 @@
-<!--$Id: page.so,v 10.12 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: page.so,v 10.19 2002/06/01 23:42:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Page locks</title>
+<title>Berkeley DB Reference Guide: Locking granularity</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/stdmode.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/deaddbg.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/notxn.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Page locks</h1>
-<p>Under normal operation, the access methods use page locking. The pagesize
-of a database is set when the database is created and may be specified by
-calling the <a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a> function. If not specified, the Berkeley DB
-package tries to select a pagesize that will provide the best I/O
-performance by setting the page size equal to the block size of the
-underlying file system.
+<h3 align=center>Locking granularity</h3>
+<p>With the exception of the Queue access method, the Berkeley DB access methods
+do page-level locking. The size of pages in a database may be set when
+the database is created by calling the <a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a> method. If
+not specified by the application, Berkeley DB selects a page size that will
+provide the best I/O performance by setting the page size equal to the
+block size of the underlying file system. Selecting a smaller page size
+can result in increased concurrency for some applications.</p>
<p>In the Btree access method, Berkeley DB uses a technique called lock coupling
-to improve concurrency. The traversal of a Btree requires reading a page,
-searching that page to determine which page to search next and then
-repeating this process on the next page. Once a page has been searched,
-it will never be accessed again for this operation, unless a page split
-is required. To improve concurrency in the tree, once the next page to
-read/search has been determined, that page is locked, and then atomically
-(i.e., without relinquishing control of the lock manager) the original
-page lock is released.
-<p>As the Recno access method is built upon Btree, it too uses lock coupling
-for read operations. However, as the Recno access method must maintain
-a count of records on its internal pages, it cannot lock couple during
-write operations. Instead, it retains write locks on all internal pages
-during every update operation. For this reason, it is not possible to
-have high concurrency in the Recno access method in the presence of write
-operations.
-<p>The Queue access method only uses short term page locks. That is, a page
+to improve concurrency. The traversal of a Btree requires reading a
+page, searching that page to determine which page to search next, and
+then repeating this process on the next page. Once a page has been
+searched, it will never be accessed again for this operation, unless a
+page split is required. To improve concurrency in the tree, once the
+next page to read/search has been determined, that page is locked and
+then the original page lock is released atomically (that is, without
+relinquishing control of the lock manager). When page splits become
+necessary, write locks are reacquired.</p>
+<p>Because the Recno access method is built upon Btree, it also uses lock
+coupling for read operations. However, because the Recno access method
+must maintain a count of records on its internal pages, it cannot
+lock-couple during write operations. Instead, it retains write locks
+on all internal pages during every update operation. For this reason,
+it is not possible to have high concurrency in the Recno access method
+in the presence of write operations.</p>
+<p>The Queue access method uses only short-term page locks. That is, a page
lock is released prior to requesting another page lock. Record locks are
used for transaction isolation. The provides a high degree of concurrency
for write operations. A metadata page is used to keep track of the head
and tail of the queue. This page is never locked during other locking or
-I/O operations.
-<p>The Hash access method does not have such traversal issues, but because
-it implements dynamic hashing, it must always refer to its metadata while
-computing a hash function. This metadata is stored on a special page in
-the hash database. This page must therefore be read locked on every
-operation. Fortunately, it need only be write locked when new pages are
-allocated to the file, which happens in three cases: 1) a hash bucket
-becomes full and needs to split, 2) a key or data item is too large to
-fit on a normal page, and 3) the number of duplicate items for a fixed
-key becomes sufficiently large that they are moved to an auxiliary page.
-In this case, the access method must obtain a write lock on the metadata
+I/O operations.</p>
+<p>The Hash access method does not have such traversal issues, but it must
+always refer to its metadata while computing a hash function because it
+implements dynamic hashing. This metadata is stored on a special page
+in the hash database. This page must therefore be read-locked on every
+operation. Fortunately, it needs to be write-locked only when new pages
+are allocated to the file, which happens in three cases:</p>
+<p><ul type=disc>
+<li>a hash bucket becomes full and needs to split
+<li>a key or data item is too large to fit on a normal page
+<li>the number of duplicate items for a fixed key becomes so large that they
+are moved to an auxiliary page
+</ul>
+<p>In this case, the access method must obtain a write lock on the metadata
page, thus requiring that all readers be blocked from entering the tree
-until the update completes.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/stdmode.html"><img src="../../images/next.gif" alt="Next"></a>
+until the update completes.</p>
+<p>Finally, when traversing duplicate data items for a key, the lock on
+the key value also acts as a lock on all duplicates of that key.
+Therefore, two conflicting threads of control cannot access the same
+duplicate set simultaneously.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/deaddbg.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/notxn.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/stdmode.html b/db/docs/ref/lock/stdmode.html
index ca1cd6b0b..ae004ed20 100644
--- a/db/docs/ref/lock/stdmode.html
+++ b/db/docs/ref/lock/stdmode.html
@@ -1,52 +1,50 @@
-<!--$Id: stdmode.so,v 10.20 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: stdmode.so,v 10.26 2001/05/22 19:39:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Standard lock modes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/page.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/notxn.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/dead.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Standard lock modes</h1>
-<p>The Berkeley DB locking protocol is described by a conflict matrix. A conflict
-matrix is an n x n array where n is the number of different lock modes
-supported, and the (i, j)th entry of the array indicates whether a lock of
-mode i conflicts with a lock of mode j.
-<p>The Berkeley DB include files declare two commonly used conflict arrays:
-<p><dl compact>
-<p><dt>const u_int8_t db_rw_conflicts[ ];<dd>This is a conflict matrix for a simple scheme using shared and exclusive
-lock modes.
-<p><dt>const u_int8_t db_riw_conflicts[ ];<dd>This is a conflict matrix that involves various intent lock modes (e.g.,
-intent shared) that are used for multigranularity locking.
-</dl>
-<p>The number of modes associated with each matrix are DB_LOCK_RW_N and
-DB_LOCK_RIW_N, respectively.
-<p>In addition, the Berkeley DB include file defines the type <b>db_lockmode_t</b>,
-which is the type of the lock modes used with the standard tables above:
+<h3 align=center>Standard lock modes</h3>
+<p>The Berkeley DB locking protocol is described by a conflict matrix. A
+conflict matrix is an NxN array in which N is the number of different
+lock modes supported, and the (i, j)th entry of the array indicates
+whether a lock of mode i conflicts with a lock of mode j. In addition,
+Berkeley DB defines the type <b>db_lockmode_t</b>, which is the type of a
+lock mode within a conflict matrix.</p>
+<p>The following is an example of a conflict matrix. The actual conflict
+matrix used by Berkeley DB to support the underlying access methods is more
+complicated, but this matrix shows the lock mode relationships available
+to applications using the Berkeley DB Locking subsystem interfaces directly.</p>
<p><dl compact>
<p><dt>DB_LOCK_NG<dd>not granted (always 0)
-<p><dt>DB_LOCK_READ<dd>read (shared)
-<p><dt>DB_LOCK_WRITE<dd>write (exclusive)
+<dt>DB_LOCK_READ<dd>read (shared)
+<dt>DB_LOCK_WRITE<dd>write (exclusive)
+<dt>DB_LOCK_IWRITE<dd>intention to write (shared)
+<dt>DB_LOCK_IREAD<dd>intention to read (shared)
+<dt>DB_LOCK_IWR<dd>intention to read and write (shared)
</dl>
-<p>As an example, consider the basic multiple-reader/single writer conflict
-matrix described by <b>db_rw_conflicts</b>. In the following
-example (and in the appropriate file), a 1 represents a conflict (i.e.,
-do not grant the lock if the indicated lock is held) and a 0 indicates
-that it is OK to grant the lock.
-<p>The rows indicate the lock that is held and the columns indicate the lock
-that is requested.
-<p><blockquote><pre> Notheld Read Write
-Notheld 0 0 0
-Read* 0 0 1
-Write** 0 1 1
-</pre></blockquote>
+<p>In a conflict matrix, the rows indicate the lock that is held, and the
+columns indicate the lock that is requested. A 1 represents a conflict
+(that is, do not grant the lock if the indicated lock is held), and a
+0 indicates that it is OK to grant the lock.</p>
+<blockquote><pre> Notheld Read Write IWrite IRead IRW
+Notheld 0 0 0 0 0 0
+Read* 0 0 1 1 0 1
+Write** 0 1 1 1 1 1
+Intent Write 0 1 1 0 0 0
+Intent Read 0 0 1 0 0 0
+Intent RW 0 1 1 0 0 0</pre></blockquote>
<p><dl compact>
<p><dt>*<dd>In this case, suppose that there is a read lock held on an object. A new
request for a read lock would be granted, but a request for a write lock
@@ -54,8 +52,8 @@ would not.
<p><dt>**<dd>In this case, suppose that there is a write lock held on an object. A
new request for either a read or write lock would be denied.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/page.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/notxn.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/dead.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/timeout.html b/db/docs/ref/lock/timeout.html
index bebc07e09..53606fbe1 100644
--- a/db/docs/ref/lock/timeout.html
+++ b/db/docs/ref/lock/timeout.html
@@ -1,46 +1,53 @@
-<!--Id: timeout.so,v 1.2 2002/06/01 23:42:12 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: timeout.so,v 1.7 2003/09/11 18:45:37 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Deadlock detection using timers</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td align=right><a href="../../ref/lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/deaddbg.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/deaddbg.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deadlock detection using timers</h1>
+<h3 align=center>Deadlock detection using timers</h3>
<p>Lock and transaction timeouts may be used in place of, or in addition
to, regular deadlock detection. If lock timeouts are set, lock requests
-will return <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> from a lock call when it is
+will return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> from a lock call when it is
detected that the locks timeouts has expired, that is, the lock request
has blocked, waiting, longer than the specified timeout. If transaction
-timeouts are set, lock requests will return <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>
+timeouts are set, lock requests will return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>
from a lock call when it has been detected that the transaction has been
-active longer than the specified timeout.
+active longer than the specified timeout.</p>
+<p>If lock or transaction timeouts have been set, database operations will
+return <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> when the lock timeout has expired or the
+transaction has been active longer than the specified timeout.
+Applications wanting to distinguish between true deadlock and timeout
+can use the <a href="../../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> configuration flag, which causes
+database operations to instead return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> in the
+case of timeout.</p>
<p>As lock and transaction timeouts are only checked when lock requests
first block or when deadlock detection is performed, the accuracy of
the timeout depends on how often deadlock detection is performed. More
specifically, transactions will continue to run after their timeout has
-expired if they do not block on a lock request after that time.
+expired if they do not block on a lock request after that time.</p>
<p>If the database environment deadlock detector has been configured with
the <a href="../../api_c/env_set_lk_detect.html#DB_LOCK_EXPIRE">DB_LOCK_EXPIRE</a> option, timeouts are the only mechanism by
which deadlocks will be broken. If the deadlock detector has been
configured with a different option, then regular deadlock detection will
be performed, and in addition, if timeouts have also been specified,
-lock requests and transactions will time out as well.
+lock requests and transactions will time out as well.</p>
<p>Lock and transaction timeouts may be specified on a database environment
wide basis using the <a href="../../api_c/env_set_timeout.html">DB_ENV-&gt;set_timeout</a> method. Lock timeouts may be
-specified on a per-lock request basis using the <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> method.
-Transaction timeouts may be specified on a per-transaction basis using
-the <a href="../../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a> method. Per-lock and per-transaction timeouts
-supersede environment wide timeouts.
+specified on a per-lock request basis using the <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> method. Lock
+and transaction timeouts may be specified on a per-transaction basis
+using the <a href="../../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a> method. Per-lock and per-transaction
+timeouts supersede environment wide timeouts.</p>
<p>For example, consider that the environment wide transaction timeout has
been set to 20ms, the environment wide lock timeout has been set to
10ms, a transaction has been created in this environment and its timeout
@@ -51,9 +58,9 @@ for a lock after 20ms. The specific transaction described will be timed
out if it blocks waiting for a lock after 8ms. By default, any lock
request in this system will be timed out if it blocks longer than 10ms,
and the specific lock described will be timed out if it blocks longer
-than 4ms.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/deaddbg.html"><img src="../../images/next.gif" alt="Next"></a>
+than 4ms.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/dead.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/deaddbg.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/lock/twopl.html b/db/docs/ref/lock/twopl.html
index 6cf112c09..b1382464d 100644
--- a/db/docs/ref/lock/twopl.html
+++ b/db/docs/ref/lock/twopl.html
@@ -1,50 +1,51 @@
-<!--$Id: twopl.so,v 10.7 2000/03/18 21:43:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: twopl.so,v 10.11 2001/05/22 19:39:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Locking with transactions: two-phase locking</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Locking Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/notxn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/am_conv.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/notxn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/cam_conv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Locking with transactions: two-phase locking</h1>
-<p>Berkeley DB uses a locking protocol called two-phase locking. This is the
-traditional protocol used in conjunction with lock-based transaction
-systems.
-<p>In a two-phase locking (2PL) system, transactions are broken up into two
+<h3 align=center>Locking with transactions: two-phase locking</h3>
+<p>Berkeley DB uses a locking protocol called <i>two-phase locking (2PL)</i>. This
+is the traditional protocol used in conjunction with lock-based transaction
+systems.</p>
+<p>In a two-phase locking system, transactions are divided into two
distinct phases. During the first phase, the transaction only acquires
-locks. During the second phase, the transaction only releases locks.
-More formally, once a transaction releases a lock, it may not acquire any
-additional locks. Practically, this translates into a system where locks
-are acquired as they are needed throughout a transaction and retained
-until the transaction ends, either by committing or aborting. In Berkeley DB,
-locks are released during <a href="../../api_c/txn_abort.html">txn_abort</a> or <a href="../../api_c/txn_commit.html">txn_commit</a>. The
-only exception to this protocol occurs when we use lock-coupling to
-traverse a data structure. If the locks are held only for traversal
-purposes, then the locks may be released before transaction commit or
-abort.
+locks; during the second phase, the transaction only releases locks.
+More formally, once a transaction releases a lock, it may not acquire
+any additional locks. Practically, this translates into a system in
+which locks are acquired as they are needed throughout a transaction
+and retained until the transaction ends, either by committing or
+aborting. In Berkeley DB, locks are released during <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> or
+<a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>. The only exception to this protocol occurs when we
+use lock-coupling to traverse a data structure. If the locks are held
+only for traversal purposes, it is safe to release locks before
+transactions commit or abort.</p>
<p>For applications, the implications of 2PL are that long-running
transactions will hold locks for a long time. When designing
applications, lock contention should be considered. In order to reduce
the probability of deadlock and achieve the best level of concurrency
-possible, the following guidelines are helpful.
-<p><ol>
-<p><li>When accessing multiple databases, design all transactions so
-that they access the files in the same order.
-<p><li>If possible, access your most hotly contested resources last
-(so that their locks are held for the shortest time possible).
-<p><li>If possible, use nested transactions to protect the parts of
-your transaction most likely to deadlock.
+possible, the following guidelines are helpful.</p>
+<ol>
+<p><li>When accessing multiple databases, design all transactions so that they
+access the files in the same order.
+<p><li>If possible, access your most hotly contested resources last (so that
+their locks are held for the shortest time possible).
+<p><li>If possible, use nested transactions to protect the parts of your
+transaction most likely to deadlock.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/notxn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/am_conv.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/notxn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/cam_conv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/config.html b/db/docs/ref/log/config.html
index f3c948893..68de05486 100644
--- a/db/docs/ref/log/config.html
+++ b/db/docs/ref/log/config.html
@@ -1,40 +1,47 @@
-<!--$Id: config.so,v 10.16 2001/01/18 20:31:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.19 2003/10/18 19:16:03 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring logging</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Logging Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/log/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/limits.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../log/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/limits.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring logging</h1>
-<p>The two aspects of logging that may be configured are the size of log
-files on disk and the size of the log buffer in memory. The
-<a href="../../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a> interface specifies the individual log file
-size for all of the applications sharing the Berkeley DB environment. Setting
-the log file size is largely a matter of convenience, and a reflection
-of the application's preferences in backup media and frequency.
-However, setting the log file size too low can potentially cause
-problems as it would be possible to run out of log sequence numbers,
-which requires a full archival and application restart to reset. See
-the <a href="../../ref/log/limits.html">Log file limits</a> section for more
-information.
-<p>The <a href="../../api_c/env_set_lg_bsize.html">DBENV-&gt;set_lg_bsize</a> interface specifies the size of the
-in-memory log buffer, in bytes. Log information is stored in memory
-until the buffer fills up or transaction commit forces the buffer to be
-written to disk. Larger buffer sizes can significantly increase
-throughput in the presence of long running transactions, highly
-concurrent applications, or transactions producing large amounts of
-data. By default, the buffer is 32KB.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/log/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/limits.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Configuring logging</h3>
+<p>The aspects of logging that may be configured are the size of the
+logging subsystem's region, the size of the log files on disk and the
+size of the log buffer in memory. The <a href="../../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a> method
+specifies the size of the logging subsystem's region, in bytes. The
+logging subsystem's default size is 60KB. This value may need to be
+increased if a large number of files are registered with the Berkeley DB log
+manager, for example, by opening a large number of Berkeley DB database files
+in a transactional application.</p>
+<p>The <a href="../../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a> method specifies the individual log file size for
+all the applications sharing the Berkeley DB environment. Setting the log
+file size is largely a matter of convenience and a reflection of the
+application's preferences in backup media and frequency. However,
+setting the log file size too low can potentially cause problems because
+it would be possible to run out of log sequence numbers, which requires
+a full archival and application restart to reset. See
+<a href="../../ref/log/limits.html">Log file limits</a> for more
+information.</p>
+<p>The <a href="../../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a> method specifies the size of the in-memory log
+buffer, in bytes. Log information is stored in memory until the buffer
+fills up or transaction commit forces the buffer to be written to disk.
+Larger buffer sizes can significantly increase throughput in the
+presence of long-running transactions, highly concurrent applications,
+or transactions producing large amounts of data. By default, the buffer
+is 32KB.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../log/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/limits.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/intro.html b/db/docs/ref/log/intro.html
index 0c41c17ef..00642046a 100644
--- a/db/docs/ref/log/intro.html
+++ b/db/docs/ref/log/intro.html
@@ -1,58 +1,69 @@
-<!--$Id: intro.so,v 10.16 2001/01/18 20:31:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.24 2003/10/18 19:16:03 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB and logging</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Logging Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/lock/nondb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../lock/nondb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB and logging</h1>
-<p>The logging subsystem is the logging facility used by Berkeley DB. It is
-largely Berkeley DB specific, although it is potentially useful outside of
+<h3 align=center>Berkeley DB and logging</h3>
+<p>The Logging subsystem is the logging facility used by Berkeley DB. It is
+largely Berkeley DB-specific, although it is potentially useful outside of
the Berkeley DB package for applications wanting write-ahead logging support.
Applications wanting to use the log for purposes other than logging file
modifications based on a set of open file descriptors will almost
certainly need to make source code modifications to the Berkeley DB code
-base.
+base.</p>
<p>A log can be shared by any number of threads of control. The
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> interface is used to open a log. When the log is no
-longer in use, it should be closed, using the <a href="../../api_c/env_close.html">DBENV-&gt;close</a>
-interface.
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method is used to open a log. When the log is no longer
+in use, it should be closed using the <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method.</p>
<p>Individual log entries are identified by log sequence numbers. Log
-sequence numbers are stored in an opaque object, a <a href="../../api_c/db_lsn.html">DB_LSN</a>.
-<p>The <a href="../../api_c/log_put.html">log_put</a> interface is used to append new log records to the
-log. Optionally, the <a href="../../api_c/log_put.html#DB_CHECKPOINT">DB_CHECKPOINT</a> flag can be used to output
-a checkpoint log record (indicating that the log is consistent to that
-point and recoverable after a system or application failure), as well
-as open-file information. The <a href="../../api_c/log_get.html">log_get</a> interface is used to
-retrieve log records from the log.
-<p>There are additional interfaces for integrating the log subsystem with a
-transaction processing system:
+sequence numbers are stored in an opaque object, a <a href="../../api_c/lsn_class.html">DB_LSN</a>.</p>
+<p>The <a href="../../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a> method is used to allocate a log cursor. Log cursors
+have two methods: <a href="../../api_c/logc_get.html">DB_LOGC-&gt;get</a> method to retrieve log records from the
+log, and <a href="../../api_c/logc_close.html">DB_LOGC-&gt;close</a> method to destroy the cursor.</p>
+<p>There are additional methods for integrating the log subsystem with a
+transaction processing system:</p>
<p><dl compact>
-<p><dt><a href="../../api_c/log_register.html">log_register</a> and <a href="../../api_c/log_unregister.html">log_unregister</a><dd>These interfaces associate files with identification numbers. These
-identification numbers are logged so that transactional recovery
-correctly associates log records with the appropriate files.
-<p><dt><a href="../../api_c/log_flush.html">log_flush</a><dd>Flushes the log up to a particular log sequence number.
+<p><dt><a href="../../api_c/log_flush.html">DB_ENV-&gt;log_flush</a><dd>Flushes the log up to a particular log sequence number.
<p><dt><a href="../../api_c/log_compare.html">log_compare</a><dd>Allows applications to compare any two log sequence numbers.
-<p><dt><a href="../../api_c/log_file.html">log_file</a> <dd>Maps a log sequence number to the specific log file which contains it.
-<p><dt><a href="../../api_c/log_archive.html">log_archive</a><dd>Returns various sets of log file names. These interfaces are used for
-database administration, e.g., to determine if log files may safely be
-removed from the system.
-<p><dt><a href="../../api_c/log_stat.html">log_stat</a> <dd>The display <a href="../../utility/db_stat.html">db_stat</a> utility uses the <a href="../../api_c/log_stat.html">log_stat</a> interface
-to display statistics about the log.
-<p><dt><a href="../../api_c/env_remove.html">DBENV-&gt;remove</a><dd>The log meta-information (but not the log files themselves) may be
-removed using the <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> interface.
+<p><dt><a href="../../api_c/log_file.html">DB_ENV-&gt;log_file</a> <dd>Maps a log sequence number to the specific log file that contains it.
+<p><dt><a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a><dd>Returns various sets of log filenames. These methods are used for
+database administration; for example, to determine if log files may
+safely be removed from the system.
+<p><dt><a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a> <dd>The display <a href="../../utility/db_stat.html">db_stat</a> utility uses the <a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a> method to
+display statistics about the log.
+<p><dt><a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a><dd>The log meta-information (but not the log files themselves) may be
+removed using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/lock/nondb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/log/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:00 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Logging Subsystem and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td><td>List log and database files</td></tr>
+<tr><td><a href="../../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a></td><td>Create a log cursor handle</td></tr>
+<tr><td><a href="../../api_c/log_file.html">DB_ENV-&gt;log_file</a></td><td>Map Log Sequence Numbers to log files</td></tr>
+<tr><td><a href="../../api_c/log_flush.html">DB_ENV-&gt;log_flush</a></td><td>Flush log records</td></tr>
+<tr><td><a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a></td><td>Write a log record</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_bsize.html">DB_ENV-&gt;set_lg_bsize</a></td><td>Set log buffer size</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a></td><td>Set the environment logging directory</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a></td><td>Set log file size</td></tr>
+<tr><td><a href="../../api_c/env_set_lg_regionmax.html">DB_ENV-&gt;set_lg_regionmax</a></td><td>Set logging region size</td></tr>
+<tr><td><a href="../../api_c/log_compare.html">log_compare</a></td><td>Compare two Log Sequence Numbers</td></tr>
+<tr><td><a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a></td><td>Return log subsystem statistics</td></tr>
+<tr><td><a href="../../api_c/logc_close.html">DB_LOGC-&gt;close</a></td><td>Close a log cursor</td></tr>
+<tr><td><a href="../../api_c/logc_get.html">DB_LOGC-&gt;get</a></td><td>Retrieve a log record</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../lock/nondb.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../log/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/log/limits.html b/db/docs/ref/log/limits.html
index d34e5a813..3568f75ca 100644
--- a/db/docs/ref/log/limits.html
+++ b/db/docs/ref/log/limits.html
@@ -1,47 +1,49 @@
-<!--$Id: limits.so,v 10.23 2001/01/18 20:31:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: limits.so,v 10.25 2001/03/13 18:48:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Log file limits</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Logging Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/log/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/mp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../log/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../mp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Log file limits</h1>
-<p>Log file names and sizes impose a limit on how long databases may be
+<h3 align=center>Log file limits</h3>
+<p>Log filenames and sizes impose a limit on how long databases may be
used in a Berkeley DB database environment. It is quite unlikely that an
-application will reach this limit, however, if the limit is reached,
-the Berkeley DB environment's databases must be dumped and reloaded.
-<p>The log file name consists of <b>log.</b> followed by 10 digits, with
+application will reach this limit; however, if the limit is reached,
+the Berkeley DB environment's databases must be dumped and reloaded.</p>
+<p>The log filename consists of <b>log.</b> followed by 10 digits, with
a maximum of 2,000,000,000 log files. Consider an application performing
-6000 transactions per second, for 24 hours a day, logged into 10MB log
-files, where each transaction is logging approximately 500 bytes of data.
-The calculation:
-<p><blockquote><pre>(10 * 2^20 * 2000000000) / (6000 * 500 * 365 * 60 * 60 * 24) = ~221</pre></blockquote>
-<p>indicates that the system will run out of log file names in roughly 221
-years.
-<p>There is no way to reset the log file name space in Berkeley DB. If your
-application is reaching the end of its log file name space, you must:
-<p><ol>
+6000 transactions per second for 24 hours a day, logged into 10MB log
+files, in which each transaction is logging approximately 500 bytes of data.
+The following calculation:</p>
+<blockquote><pre>(10 * 2^20 * 2000000000) / (6000 * 500 * 365 * 60 * 60 * 24) = ~221</pre></blockquote>
+<p>indicates that the system will run out of log filenames in roughly 221
+years.</p>
+<p>There is no way to reset the log filename space in Berkeley DB. If your
+application is reaching the end of its log filename space, you must do
+the following:</p>
+<ol>
<p><li>Archive your databases as if to prepare for catastrophic failure (see
<a href="../../utility/db_archive.html">db_archive</a> for more information).
-<p><li>Dump and re-load all your databases (see <a href="../../utility/db_dump.html">db_dump</a> and
+<p><li>Dump and reload all your databases (see <a href="../../utility/db_dump.html">db_dump</a> and
<a href="../../utility/db_load.html">db_load</a> for more information).
-<p><li>Remove all of the log files from the database environment. Note, this
-is the only situation where all of the log files are removed from an
-environment, in all other cases at least a single log file is
+<p><li>Remove all of the log files from the database environment. Note: This
+is the only situation in which all the log files are removed from an
+environment; in all other cases, at least a single log file is
retained.
<p><li>Restart your application.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/log/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/mp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../log/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../mp/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/mp/config.html b/db/docs/ref/mp/config.html
index cf311516d..0daa7f19e 100644
--- a/db/docs/ref/mp/config.html
+++ b/db/docs/ref/mp/config.html
@@ -1,55 +1,53 @@
-<!--$Id: config.so,v 10.17 2000/10/03 17:17:35 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.20 2003/10/18 19:16:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring the memory pool</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Memory Pool Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/mp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../mp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring the memory pool</h1>
-<p>There are two interfaces used for configuring the memory pool.
-<p>The most important tuning parameter for almost all applications, including
-Berkeley DB applications, is the size of the pool. There are two ways to
-specify the pool size. First, calling the <a href="../../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a> function
+<h3 align=center>Configuring the memory pool</h3>
+<p>There are two issues to consider when configuring the memory pool.</p>
+<p>The first issue, the most important tuning parameter for Berkeley DB
+applications, is the size of the memory pool. There are two ways to
+specify the pool size. First, calling the <a href="../../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a> method
specifies the pool size for all of the applications sharing the Berkeley DB
-environment. Second, by calling the <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> function. The
-latter only specifies a pool size for the specific database. Note, it is
-meaningless to call <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> for a database opened inside
-of a Berkeley DB environment, since the environment pool size will override any
-pool size specified for a single database. For information on tuning the
+environment. Second, the <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> method only specifies a
+pool size for the specific database. Note: It is meaningless to call
+<a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> for a database opened inside of a Berkeley DB
+environment because the environment pool size will override any pool
+size specified for a single database. For information on tuning the
Berkeley DB cache size, see <a href="../../ref/am_conf/cachesize.html">Selecting
-a cache size</a>.
-<p>The second memory pool configuration interface specifies the maximum size
-of backing files to map into the process address space instead of copying
-pages through the local cache. Only read-only database files can be
-mapped into process memory. Because of the requirements of the Berkeley DB
-transactional implementation, log records describing database changes must
-be written to disk before the actual database changes. As mapping
-read-write database files into process memory would permit the underlying
-operating system to write modified database changes at will, it is not
-supported.
-<p>Mapping files into the process address space can result in
-better-than-usual performance, as available virtual memory is normally
-much larger than the local cache, and page faults are faster than page
-copying on many systems. However, in the presence of limited virtual
-memory it can cause resource starvation, and in the presence of large
-databases, it can result in immense process sizes.
-<p>To specify that no files are to be mapped into the process address space,
-specify the <a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a> flag to the <a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> interface.
-To specify that any individual file should not be mapped into the process
-address space, specify the <a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a> flag to the
-<a href="../../api_c/memp_fopen.html">memp_fopen</a> interface. To limit the size of files mapped into the
-process address space, use the <a href="../../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a> function.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/mp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+a cache size</a>.</p>
+<p>The second memory pool configuration issue is the maximum size an
+underlying file can be and still be mapped into the process address
+space (instead of reading the file's pages into the cache). Mapping
+files into the process address space can result in better performance
+because available virtual memory is often much larger than the local
+cache, and page faults are faster than page copying on many systems.
+However, in the presence of limited virtual memory, it can cause
+resource starvation; and in the presence of large databases, it can
+result in immense process sizes. In addition, because of the
+requirements of the Berkeley DB transactional implementation, only read-only
+files can be mapped into process memory.</p>
+<p>To specify that no files are to be mapped into the process address
+space, specify the <a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a> flag to the
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. To specify that any individual file should
+not be mapped into the process address space, specify the
+<a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a> flag to the <a href="../../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> interface. To limit
+the size of files mapped into the process address space, use the
+<a href="../../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a> method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../mp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/mp/intro.html b/db/docs/ref/mp/intro.html
index 2b52a5775..2b04bab86 100644
--- a/db/docs/ref/mp/intro.html
+++ b/db/docs/ref/mp/intro.html
@@ -1,59 +1,97 @@
-<!--$Id: intro.so,v 10.15 2001/01/18 20:31:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.23 2002/08/30 20:02:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB and the memory pool</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a><a name="4"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Memory Pool Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/log/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/mp/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../log/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../mp/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB and the memory pool</h1>
-<p>The memory pool subsystem is the general-purpose shared memory buffer pool
-used by Berkeley DB. This module is useful outside of the Berkeley DB package for
-processes that require page-oriented, cached, shared file access.
-<p>A memory pool is a shared memory cache shared by any number of processes
-and threads within processes. The <a href="../../api_c/env_open.html">DBENV-&gt;open</a> interface opens, and
-optionally creates, a memory pool. When that pool is no longer in use,
-it should be closed, using the <a href="../../api_c/env_close.html">DBENV-&gt;close</a> interface.
-<p>The <a href="../../api_c/memp_fopen.html">memp_fopen</a> interface opens an underlying file within the
-memory pool. When that file is no longer in use, it should be closed,
-using the <a href="../../api_c/memp_fclose.html">memp_fclose</a> interface. The <a href="../../api_c/memp_fget.html">memp_fget</a> interface
-is used to retrieve pages from files in the pool. All retrieved pages
-must be subsequently returned using the <a href="../../api_c/memp_fput.html">memp_fput</a> interface. At
-the time that pages are returned, they may be marked <b>dirty</b>, which
-causes them to be written to the backing disk file before being discarded
-from the pool. If there is insufficient room to bring a new page in the
-pool, a page is selected to be discarded from the pool. If that page is
-dirty, it is first written to the backing file. The page is selected
-using a somewhat modified least-recently-used algorithm. Pages in files
-may also be explicitly marked clean or dirty using the <a href="../../api_c/memp_fset.html">memp_fset</a>
-interface. All dirty pages in the pool from any underlying file may also
-be flushed as a group using the <a href="../../api_c/memp_fsync.html">memp_fsync</a> interface.
-<p>There are additional interfaces for manipulating the entire memory pool:
-<ul type=disc>
+<h3 align=center>Berkeley DB and the memory pool</h3>
+<p>The Memory Pool subsystem is the general-purpose shared memory buffer
+pool used by Berkeley DB. This module is useful outside of the Berkeley DB package
+for processes that require page-oriented, shared and cached file access.</p>
+<p>A <i>memory pool</i> is a memory cache shared among any number of
+threads of control. The <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> flag to the
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method opens and optionally creates a memory pool. When
+that pool is no longer in use, it should be closed using the
+<a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method.</p>
+<p>The <a href="../../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a> method returns a <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle on an
+underlying file within the memory pool. The file may be opened using
+the <a href="../../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method. The <a href="../../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a> method is used to retrieve
+pages from files in the pool. All retrieved pages must be subsequently
+returned using the <a href="../../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a> method. At the time pages are returned,
+they may be marked <b>dirty</b>, which causes them to be written to
+the underlying file before being discarded from the pool. If there is
+insufficient room to bring a new page in the pool, a page is selected
+to be discarded from the pool using a least-recently-used algorithm.
+Pages in files may also be explicitly marked clean or dirty using the
+<a href="../../api_c/memp_fset.html">DB_MPOOLFILE-&gt;set</a> method. All dirty pages in the pool from the file may be
+flushed using the <a href="../../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a> method. When the file handle is no
+longer in use, it should be closed using the <a href="../../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method.</p>
+<p>There are additional configuration interfaces that apply when opening
+a new file in the memory pool:</p>
+<p><ul type=disc>
+<li>The <a href="../../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a> method specifies the number of bytes to clear
+when creating a new page in the memory pool.
+<li>The <a href="../../api_c/memp_set_fileid.html">DB_MPOOLFILE-&gt;set_fileid</a> method specifies a unique ID associated with the file.
+<li>The <a href="../../api_c/memp_set_ftype.html">DB_MPOOLFILE-&gt;set_ftype</a> method specifies the type of file for the purposes of
+page input and output processing.
+<li>The <a href="../../api_c/memp_set_lsn_offset.html">DB_MPOOLFILE-&gt;set_lsn_offset</a> method specifies the byte offset of each page's
+log sequence number (<a href="../../api_c/lsn_class.html">DB_LSN</a>) for the purposes of transaction
+checkpoints.
+<li>The <a href="../../api_c/memp_set_pgcookie.html">DB_MPOOLFILE-&gt;set_pgcookie</a> method specifies an application provided argument
+for the purposes of page input and output processing.
+</ul>
+<p>There are additional interfaces for the memory pool as a whole:</p>
+<p><ul type=disc>
<li>It is possible to gradually flush buffers from the pool in order to
-maintain a consistent percentage of clean buffers in the pool using the
-<a href="../../api_c/memp_trickle.html">memp_trickle</a> interface.
-<li>The <a href="../../utility/db_stat.html">db_stat</a> utility uses the <a href="../../api_c/memp_stat.html">memp_stat</a> interface to
-display statistics about the efficiency of the pool.
-<li>As some conversion may be necessary when pages are read or written the
-<a href="../../api_c/memp_register.html">memp_register</a> function allows applications to specify automatic
+maintain a consistent percentage of clean buffers in the pool using
+the <a href="../../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a> method.
+<li>Because special-purpose processing may be necessary when pages are read
+or written (for example, compression or endian conversion), the
+<a href="../../api_c/memp_register.html">DB_ENV-&gt;memp_register</a> function allows applications to specify automatic
input and output processing in these cases.
-<li>There is one additional interface that is intended for manipulating the
-memory pool, but which is specific to database systems. The
-<a href="../../api_c/memp_sync.html">memp_sync</a> interface flushes dirty pages from all files held in
-the pool up to a specified database log sequence number.
-<li>Finally, the entire pool may be discarded using the <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a>
-interface.
+<li>The <a href="../../utility/db_stat.html">db_stat</a> utility uses the <a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a> method to display
+statistics about the efficiency of the pool.
+<li>All dirty pages in the pool may be flushed using the <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> method.
+In addition, <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> takes an argument that is specific to
+database systems, and which allows the memory pool to be flushed up to
+a specified log sequence number (<a href="../../api_c/lsn_class.html">DB_LSN</a>).
+<li>The entire pool may be discarded using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method.
</ul>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/log/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/mp/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:01:28 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Memory Pools and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a></td><td>Set the environment cache size</td></tr>
+<tr><td><a href="../../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a></td><td>Set maximum mapped-in database file size</td></tr>
+<tr><td><a href="../../api_c/memp_register.html">DB_ENV-&gt;memp_register</a></td><td>Register input/output functions for a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td><td>Return memory pool statistics</td></tr>
+<tr><td><a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a></td><td>Flush pages from a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a></td><td>Trickle flush pages from a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a></td><td>Open a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a></td><td>Close a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fget.html">DB_MPOOLFILE-&gt;get</a></td><td>Get page from a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a></td><td>Open a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fput.html">DB_MPOOLFILE-&gt;put</a></td><td>Return a page to a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_fset.html">DB_MPOOLFILE-&gt;set</a></td><td>Set memory pool page status</td></tr>
+<tr><td><a href="../../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a></td><td>Flush pages from a file in a memory pool</td></tr>
+<tr><td><a href="../../api_c/memp_set_clear_len.html">DB_MPOOLFILE-&gt;set_clear_len</a></td><td>Set file page bytes to be cleared</td></tr>
+<tr><td><a href="../../api_c/memp_set_fileid.html">DB_MPOOLFILE-&gt;set_fileid</a></td><td>Set file unique identifier</td></tr>
+<tr><td><a href="../../api_c/memp_set_ftype.html">DB_MPOOLFILE-&gt;set_ftype</a></td><td>Set file type</td></tr>
+<tr><td><a href="../../api_c/memp_set_lsn_offset.html">DB_MPOOLFILE-&gt;set_lsn_offset</a></td><td>Set file log-sequence-number offset</td></tr>
+<tr><td><a href="../../api_c/memp_set_pgcookie.html">DB_MPOOLFILE-&gt;set_pgcookie</a></td><td>Set file cookie for pgin/pgout</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../log/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../mp/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/perl/intro.html b/db/docs/ref/perl/intro.html
index da5d93a6a..015a77890 100644
--- a/db/docs/ref/perl/intro.html
+++ b/db/docs/ref/perl/intro.html
@@ -1,42 +1,43 @@
-<!--$Id: intro.so,v 10.24 2001/01/09 18:57:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.26 2003/07/30 13:11:14 mhayes Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Using Berkeley DB with Perl</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Perl</dl></h3></td>
-<td width="1%"><a href="../../ref/java/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rpc/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Using Berkeley DB with Perl</h1>
+<h3 align=center>Using Berkeley DB with Perl</h3>
<p>The original Perl module for Berkeley DB was DB_File, which was written to
interface to Berkeley DB version 1.85. The newer Perl module for Berkeley DB is
BerkeleyDB, which was written to interface to version 2.0 and subsequent
releases. Because Berkeley DB version 2.X has a compatibility API for version
1.85, you can (and should!) build DB_File using version 2.X of Berkeley DB,
-although DB_File will still only support the 1.85 functionality.
+although DB_File will still only support the 1.85 functionality.</p>
<p>DB_File is distributed with the standard Perl source distribution (look
in the directory "ext/DB_File"). You can find both DB_File and BerkeleyDB
on CPAN, the Comprehensive Perl Archive Network of mirrored FTP sites.
The master CPAN site is
-<a href="ftp://ftp.funet.fi/">ftp://ftp.funet.fi/</a>.
+<a href="ftp://ftp.funet.fi/">ftp://ftp.funet.fi/</a>.</p>
<p>Versions of both BerkeleyDB and DB_File that are known to work correctly
with each release of Berkeley DB are included in the distributed Berkeley DB source
tree, in the subdirectories <b>perl.BerkeleyDB</b> and
<b>perl.DB_File</b>. Each of those directories contains a
<b>README</b> file with instructions on installing and using those
-modules.
+modules.</p>
<p>The Perl interface is not maintained by Sleepycat Software. Questions
about the DB_File and BerkeleyDB modules are best asked on the Usenet
-newsgroup comp.lang.perl.modules.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/java/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+newsgroup comp.lang.perl.modules.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rpc/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/pindex.src b/db/docs/ref/pindex.src
index 0e122ceb2..92e992d6c 100644
--- a/db/docs/ref/pindex.src
+++ b/db/docs/ref/pindex.src
@@ -1,212 +1,24 @@
-__APIREL__/ref/am/close.html#2 @closing a database
-__APIREL__/ref/am/count.html#2 @counting data items for a key
-__APIREL__/ref/am/curclose.html#2 @closing a cursor
-__APIREL__/ref/am/curclose.html#3 closing a @cursor
-__APIREL__/ref/am/curdel.html#2 @deleting records with a cursor
-__APIREL__/ref/am/curdel.html#3 deleting records with a @cursor
-__APIREL__/ref/am/curdup.html#2 @duplicating a cursor
-__APIREL__/ref/am/curdup.html#3 duplicating a @cursor
-__APIREL__/ref/am/curget.html#2 @retrieving records with a cursor
-__APIREL__/ref/am/curget.html#3 retrieving records with a @cursor
-__APIREL__/ref/am/curput.html#2 @storing records with a cursor
-__APIREL__/ref/am/curput.html#3 storing records with a @cursor
-__APIREL__/ref/am/cursor.html#2 database @cursors
-__APIREL__/ref/am/delete.html#2 @deleting records
-__APIREL__/ref/am/error.html#2 @error handling
-__APIREL__/ref/am/get.html#2 @retrieving records
-__APIREL__/ref/am/join.html#2 logical @join
-__APIREL__/ref/am/open.html#2 @opening a database
-__APIREL__/ref/am/partial.html#2 @partial record storage and retrieval
-__APIREL__/ref/am/put.html#2 @storing records
-__APIREL__/ref/am/stability.html#2 @cursor stability
-__APIREL__/ref/am/stability.html#3 cursor @stability
-__APIREL__/ref/am/stat.html#2 database @statistics
-__APIREL__/ref/am/sync.html#2 flushing the database @cache
-__APIREL__/ref/am/upgrade.html#2 @upgrading databases
-__APIREL__/ref/am/verify.html#2 database @verification
-__APIREL__/ref/am/verify.html#3 database @salvage
-__APIREL__/ref/am/verify.html#4 recovering @corrupted databases
-__APIREL__/ref/am_conf/bt_compare.html#2 specifying a Btree @comparison function
-__APIREL__/ref/am_conf/bt_recnum.html#2 retrieving Btree records by @number
-__APIREL__/ref/am_conf/byteorder.html#2 selecting a @byte order
-__APIREL__/ref/am_conf/cachesize.html#2 selecting a @cache size
-__APIREL__/ref/am_conf/dup.html#2 @duplicate data items
-__APIREL__/ref/am_conf/extentsize.html#2 selecting a Queue @extent size
-__APIREL__/ref/am_conf/h_ffactor.html#2 page @fill factor
-__APIREL__/ref/am_conf/h_hash.html#2 specifying a database @hash
-__APIREL__/ref/am_conf/h_nelem.html#2 @hash table size
-__APIREL__/ref/am_conf/intro.html#2 @access methods
-__APIREL__/ref/am_conf/logrec.html#2 logical @record numbers
-__APIREL__/ref/am_conf/pagesize.html#2 selecting a @page size
-__APIREL__/ref/am_conf/re_source.html#2 @text backing files
-__APIREL__/ref/am_conf/recno.html#2 managing @record-based databases
-__APIREL__/ref/am_conf/renumber.html#2 logically renumbering @records
-__APIREL__/ref/am_conf/select.html#2 selecting an @access method
-__APIREL__/ref/arch/apis.html#2 programmatic @APIs
-__APIREL__/ref/arch/utilities.html#2 @utilities
-__APIREL__/ref/build_unix/aix.html#2 @AIX
-__APIREL__/ref/build_unix/conf.html#2 @configuring Berkeley DB for UNIX systems
-__APIREL__/ref/build_unix/conf.html#3 configuring Berkeley DB for @UNIX systems
-__APIREL__/ref/build_unix/conf.html#4 configuring without large @file support
-__APIREL__/ref/build_unix/conf.html#--disable-bigfile Configuring Berkeley DB@--disable-bigfile
-__APIREL__/ref/build_unix/conf.html#5 configuring Berkeley DB @1.85 API compatibility
-__APIREL__/ref/build_unix/conf.html#--enable-compat185 Configuring Berkeley DB@--enable-compat185
-__APIREL__/ref/build_unix/conf.html#6 configuring the @C++ API
-__APIREL__/ref/build_unix/conf.html#--enable-cxx Configuring Berkeley DB@--enable-cxx
-__APIREL__/ref/build_unix/conf.html#--enable-debug Configuring Berkeley DB@--enable-debug
-__APIREL__/ref/build_unix/conf.html#--enable-debug_rop Configuring Berkeley DB@--enable-debug_rop
-__APIREL__/ref/build_unix/conf.html#--enable-debug_wop Configuring Berkeley DB@--enable-debug_wop
-__APIREL__/ref/build_unix/conf.html#--enable-diagnostic Configuring Berkeley DB@--enable-diagnostic
-__APIREL__/ref/build_unix/conf.html#7 building a utility to dump Berkeley DB @1.85 databases
-__APIREL__/ref/build_unix/conf.html#--enable-dump185 Configuring Berkeley DB@--enable-dump185
-__APIREL__/ref/build_unix/conf.html#8 configuring @shared libraries
-__APIREL__/ref/build_unix/conf.html#9 configuring @dynamic shared libraries
-__APIREL__/ref/build_unix/conf.html#--enable-dynamic Configuring Berkeley DB@--enable-dynamic
-__APIREL__/ref/build_unix/conf.html#10 configuring the @Java API
-__APIREL__/ref/build_unix/conf.html#--enable-java Configuring Berkeley DB@--enable-java
-__APIREL__/ref/build_unix/conf.html#--enable-posixmutexes Configuring Berkeley DB@--enable-posixmutexes
-__APIREL__/ref/build_unix/conf.html#11 configuring a @RPC client/server
-__APIREL__/ref/build_unix/conf.html#--enable-rpc Configuring Berkeley DB@--enable-rpc
-__APIREL__/ref/build_unix/conf.html#--enable-shared Configuring Berkeley DB@--enable-shared
-__APIREL__/ref/build_unix/conf.html#12 configuring the @Tcl API
-__APIREL__/ref/build_unix/conf.html#--enable-tcl Configuring Berkeley DB@--enable-tcl
-__APIREL__/ref/build_unix/conf.html#13 configuring the @test suite
-__APIREL__/ref/build_unix/conf.html#--enable-test Configuring Berkeley DB@--enable-test
-__APIREL__/ref/build_unix/conf.html#--enable-uimutexes Configuring Berkeley DB@--enable-uimutexes
-__APIREL__/ref/build_unix/conf.html#--enable-umrw Configuring Berkeley DB@--enable-umrw
-__APIREL__/ref/build_unix/conf.html#--with-tcl=DIR Configuring Berkeley DB@--with-tcl=DIR
-__APIREL__/ref/build_unix/flags.html#2 changing @compile or load options
-__APIREL__/ref/build_unix/flags.html#3 changing compile or @load options
-__APIREL__/ref/build_unix/freebsd.html#2 @FreeBSD
-__APIREL__/ref/build_unix/hpux.html#2 @HP-UX
-__APIREL__/ref/build_unix/install.html#2 @installing Berkeley DB for UNIX systems
-__APIREL__/ref/build_unix/intro.html#2 @building for UNIX
-__APIREL__/ref/build_unix/irix.html#2 @IRIX
-__APIREL__/ref/build_unix/linux.html#2 @Linux
-__APIREL__/ref/build_unix/notes.html#2 @building for UNIX FAQ
-__APIREL__/ref/build_unix/notes.html#3 building for @UNIX FAQ
-__APIREL__/ref/build_unix/osf1.html#2 @OSF/1
-__APIREL__/ref/build_unix/qnx.html#2 @QNX
-__APIREL__/ref/build_unix/sco.html#2 @SCO
-__APIREL__/ref/build_unix/shlib.html#2 @shared libraries
-__APIREL__/ref/build_unix/solaris.html#2 @Solaris
-__APIREL__/ref/build_unix/sunos.html#2 @SunOS
-__APIREL__/ref/build_unix/test.html#2 running the @test suite under UNIX
-__APIREL__/ref/build_unix/ultrix.html#2 @Ultrix
-__APIREL__/ref/build_vxworks/faq.html#2 @building for VxWorks FAQ
-__APIREL__/ref/build_vxworks/faq.html#3 building for @VxWorks FAQ
-__APIREL__/ref/build_vxworks/intro.html#2 @building for VxWorks
-__APIREL__/ref/build_vxworks/notes.html#2 @VxWorks notes
-__APIREL__/ref/build_win/faq.html#2 @building for Windows FAQ
-__APIREL__/ref/build_win/faq.html#3 building for @Windows FAQ
-__APIREL__/ref/build_win/intro.html#2 @building for Win32
-__APIREL__/ref/build_win/notes.html#2 @Windows notes
-__APIREL__/ref/build_win/test.html#2 running the @test suite under Windows
-__APIREL__/ref/build_win/test.html#3 running the test suite under @Windows
-__APIREL__/ref/cam/intro.html#2 @Concurrent Data Store
-__APIREL__/ref/debug/common.html#2 @debugging applications
-__APIREL__/ref/distrib/layout.html#2 @source code layout
-__APIREL__/ref/dumpload/text.html#2 loading @text into databases
-__APIREL__/ref/dumpload/utility.html#2 dumping/loading @text to/from databases
-__APIREL__/ref/env/create.html#2 database @environment
-__APIREL__/ref/env/naming.html#2 file @naming
-__APIREL__/ref/env/naming.html#db_home File naming@db_home
-__APIREL__/ref/env/naming.html#DB_HOME File naming@DB_HOME
-__APIREL__/ref/env/naming.html#DB_CONFIG File naming@DB_CONFIG
-__APIREL__/ref/env/remote.html#2 remote @filesystems
-__APIREL__/ref/env/security.html#2 @security
-__APIREL__/ref/intro/products.html#2 Sleepycat Software's Berkeley DB @products
-__APIREL__/ref/install/file.html#2 @/etc/magic
-__APIREL__/ref/install/file.html#3 @file utility
-__APIREL__/ref/java/compat.html#2 @Java compatibility
-__APIREL__/ref/java/conf.html#2 @Java configuration
-__APIREL__/ref/java/faq.html#2 Java @FAQ
-__APIREL__/ref/java/faq.html#3 @Java FAQ
-__APIREL__/ref/lock/am_conv.html#2 @locking conventions
-__APIREL__/ref/lock/cam_conv.html#2 Berkeley DB Concurrent Data Store @locking conventions
-__APIREL__/ref/lock/config.html#2 @locking configuration
-__APIREL__/ref/lock/dead.html#2 @deadlocks
-__APIREL__/ref/lock/intro.html#2 @locking introduction
-__APIREL__/ref/lock/max.html#2 sizing the @locking subsystem
-__APIREL__/ref/lock/nondb.html#2 @locking and non-Berkeley DB applications
-__APIREL__/ref/lock/notxn.html#2 @locking without transactions
-__APIREL__/ref/lock/page.html#2 page-level @locking
-__APIREL__/ref/lock/stdmode.html#2 standard @lock modes
-__APIREL__/ref/lock/twopl.html#2 two-phase @locking
-__APIREL__/ref/log/config.html#2 @logging configuration
-__APIREL__/ref/log/intro.html#2 @logging introduction
-__APIREL__/ref/log/limits.html#2 @log file limits
-__APIREL__/ref/mp/config.html#2 @memory pool configuration
-__APIREL__/ref/perl/intro.html#2 @Perl
-__APIREL__/ref/program/appsignals.html#2 application @signal handling
-__APIREL__/ref/program/byteorder.html#2 @byte ordering
-__APIREL__/ref/program/byteorder.html#3 byte @endian
-__APIREL__/ref/program/compatible.html#2 @interface compatibility
-__APIREL__/ref/program/dbsizes.html#2 database @limits
-__APIREL__/ref/program/diskspace.html#2 @disk space requirements
-__APIREL__/ref/program/environ.html#2 @environment variables
-__APIREL__/ref/program/errorret.html#2 @error returns
-__APIREL__/ref/program/errorret.html#3 @error name space
-__APIREL__/ref/program/errorret.html#DB_NOTFOUND Error returns to applications@DB_NOTFOUND
-__APIREL__/ref/program/errorret.html#DB_KEYEMPTY Error returns to applications@DB_KEYEMPTY
-__APIREL__/ref/program/errorret.html#DB_LOCK_DEADLOCK Error returns to applications@DB_LOCK_DEADLOCK
-__APIREL__/ref/program/errorret.html#DB_LOCK_NOTGRANTED Error returns to applications@DB_LOCK_NOTGRANTED
-__APIREL__/ref/program/errorret.html#DB_RUNRECOVERY Error returns to applications@DB_RUNRECOVERY
-__APIREL__/ref/program/mt.html#2 building @threaded applications
-__APIREL__/ref/program/namespace.html#2 Berkeley DB library @name spaces
-__APIREL__/ref/program/scope.html#2 Berkeley DB handle @scope
-__APIREL__/ref/program/scope.html#3 Berkeley DB @free-threaded handles
-__APIREL__/ref/rpc/client.html#2 @RPC client
-__APIREL__/ref/rpc/server.html#2 @RPC server
-__APIREL__/ref/sendmail/intro.html#2 @Sendmail
-__APIREL__/ref/tcl/intro.html#2 loading Berkeley DB with @Tcl
-__APIREL__/ref/tcl/faq.html#2 Tcl @FAQ
-__APIREL__/ref/tcl/faq.html#3 @Tcl FAQ
-__APIREL__/ref/tcl/program.html#2 @Tcl API programming notes
-__APIREL__/ref/tcl/using.html#2 using Berkeley DB with @Tcl
-__APIREL__/ref/test/run.html#2 running the @test suite
-__APIREL__/ref/transapp/admin.html#2 administering @transaction protected applications
-__APIREL__/ref/transapp/archival.html#2 archival in @transaction protected applications
-__APIREL__/ref/transapp/archival.html#3 @catastrophic recovery
-__APIREL__/ref/transapp/checkpoint.html#2 checkpoints in @transaction protected applications
-__APIREL__/ref/transapp/deadlock.html#2 deadlock detection in @transaction protected applications
-__APIREL__/ref/transapp/filesys.html#2 recovery and @filesystem operations
-__APIREL__/ref/transapp/intro.html#2 @Transactional Data Store
-__APIREL__/ref/transapp/logfile.html#2 @log file removal
-__APIREL__/ref/transapp/reclimit.html#2 Berkeley DB @recoverability
-__APIREL__/ref/transapp/recovery.html#2 recovery in @transaction protected applications
-__APIREL__/ref/transapp/throughput.html#2 @transaction throughput
-__APIREL__/ref/txn/config.html#2 @transaction configuration
-__APIREL__/ref/txn/intro.html#2 Berkeley DB and @transactions
-__APIREL__/ref/txn/limits.html#2 @transaction limits
-__APIREL__/ref/txn/nested.html#2 nested @transactions
-__APIREL__/ref/upgrade.2.0/intro.html#2 Upgrading to release @2.0
-__APIREL__/ref/upgrade.3.0/intro.html#2 Upgrading to release @3.0
-__APIREL__/ref/upgrade.3.1/intro.html#2 Upgrading to release @3.1
-__APIREL__/ref/upgrade.3.2/intro.html#2 Upgrading to release @3.2
-__APIREL__/ref/xa/config.html#2 configuring Berkeley DB with the @Tuxedo System
-__APIREL__/ref/xa/intro.html#2 @XA Resource Manager
-__APIREL__/utility/berkeley_db_svc.html#2 @berkeley_db_svc
-__APIREL__/utility/berkeley_db_svc.html#3 utility to support @RPC client/server
-__APIREL__/utility/db_archive.html#2 @db_archive
-__APIREL__/utility/db_archive.html#3 utility to @archive log files
-__APIREL__/utility/db_checkpoint.html#2 @db_checkpoint
-__APIREL__/utility/db_checkpoint.html#3 utility to take @checkpoints
-__APIREL__/utility/db_deadlock.html#2 @db_deadlock
-__APIREL__/utility/db_deadlock.html#3 utility to detect @deadlocks
-__APIREL__/utility/db_dump.html#2 @db_dump
-__APIREL__/utility/db_dump.html#3 utility to @dump databases as text files
-__APIREL__/utility/db_load.html#2 @db_load
-__APIREL__/utility/db_load.html#3 utility to @load text files into databases
-__APIREL__/utility/db_printlog.html#2 @db_printlog
-__APIREL__/utility/db_printlog.html#3 utility to display @log files as text
-__APIREL__/utility/db_recover.html#2 @db_recover
-__APIREL__/utility/db_recover.html#3 utility to @recover database environments
-__APIREL__/utility/db_stat.html#2 @db_stat
-__APIREL__/utility/db_stat.html#3 utility to display database and environment @statistics
-__APIREL__/utility/db_upgrade.html#2 @db_upgrade
-__APIREL__/utility/db_upgrade.html#3 utility to upgrade @database files
-__APIREL__/utility/db_upgrade.html#4 utility to @upgrade database files
-__APIREL__/utility/db_verify.html#2 @db_verify
-__APIREL__/utility/db_verify.html#3 utility to verify @database files
-__APIREL__/utility/db_verify.html#4 utility to @verify database files
+__APIREL__/utility/berkeley_db_svc.html__OCT__2 @berkeley_db_svc
+__APIREL__/utility/berkeley_db_svc.html__OCT__3 utility to support @RPC client/server
+__APIREL__/utility/db_archive.html__OCT__2 @db_archive
+__APIREL__/utility/db_archive.html__OCT__3 utility to @archive log files
+__APIREL__/utility/db_checkpoint.html__OCT__2 @db_checkpoint
+__APIREL__/utility/db_checkpoint.html__OCT__3 utility to take @checkpoints
+__APIREL__/utility/db_deadlock.html__OCT__2 @db_deadlock
+__APIREL__/utility/db_deadlock.html__OCT__3 utility to detect @deadlocks
+__APIREL__/utility/db_dump.html__OCT__2 @db_dump
+__APIREL__/utility/db_dump.html__OCT__3 utility to @dump databases as text files
+__APIREL__/utility/db_load.html__OCT__2 @db_load
+__APIREL__/utility/db_load.html__OCT__3 utility to @load text files into databases
+__APIREL__/utility/db_printlog.html__OCT__2 @db_printlog
+__APIREL__/utility/db_printlog.html__OCT__3 utility to display @log files as text
+__APIREL__/utility/db_recover.html__OCT__2 @db_recover
+__APIREL__/utility/db_recover.html__OCT__3 utility to @recover database environments
+__APIREL__/utility/db_stat.html__OCT__2 @db_stat
+__APIREL__/utility/db_stat.html__OCT__3 utility to display database and environment @statistics
+__APIREL__/utility/db_upgrade.html__OCT__2 @db_upgrade
+__APIREL__/utility/db_upgrade.html__OCT__3 utility to upgrade @database files
+__APIREL__/utility/db_upgrade.html__OCT__4 utility to @upgrade database files
+__APIREL__/utility/db_verify.html__OCT__2 @db_verify
+__APIREL__/utility/db_verify.html__OCT__3 utility to verify @database files
+__APIREL__/utility/db_verify.html__OCT__4 utility to @verify database files
diff --git a/db/docs/ref/program/appsignals.html b/db/docs/ref/program/appsignals.html
index 2b1d99bd6..cc0f9b8e0 100644
--- a/db/docs/ref/program/appsignals.html
+++ b/db/docs/ref/program/appsignals.html
@@ -1,35 +1,39 @@
-<!--$Id: appsignals.so,v 10.25 2000/07/15 15:49:07 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: appsignals.so,v 10.28 2002/02/23 20:05:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Application signal handling</title>
+<title>Berkeley DB Reference Guide: Signal handling</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/errorret.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../apprec/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/errorret.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Application signal handling</h1>
+<h3 align=center>Signal handling</h3>
<p>When applications using Berkeley DB receive signals, it is important that they
exit gracefully, discarding any Berkeley DB locks that they may hold. This is
-normally done by setting a flag when a signal arrives, and then checking
-for that flag periodically within the application. As Berkeley DB is not
-reentrant, the signal handler should not attempt to release locks and/or
-close the database handles itself. Reentering Berkeley DB is not guaranteed to
-work correctly and the results are undefined.
+normally done by setting a flag when a signal arrives and then checking
+for that flag periodically within the application. Because Berkeley DB is not
+re-entrant, the signal handler should not attempt to release locks and/or
+close the database handles itself. Re-entering Berkeley DB is not guaranteed to
+work correctly, and the results are undefined.</p>
<p>If an application exits holding a lock, the situation is no different
than if the application crashed, and all applications participating in
-the database environment must be shutdown, and then recovery must be
+the database environment must be shut down, and then recovery must be
performed. If this is not done, databases may be left in an
-inconsistent state or locks the application held may cause unresolvable
-deadlocks inside the environment, causing applications to hang.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/xa/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/errorret.html"><img src="../../images/next.gif" alt="Next"></a>
+inconsistent state, or locks the application held may cause unresolvable
+deadlocks inside the environment, causing applications to hang.</p>
+<p>Berkeley DB restarts all system calls interrupted by signals, that is, any
+underlying system calls that return failure with errno set to EINTR will
+be restarted rather than failing.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../apprec/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/errorret.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/cache.html b/db/docs/ref/program/cache.html
index 4f109a8bf..862c625a5 100644
--- a/db/docs/ref/program/cache.html
+++ b/db/docs/ref/program/cache.html
@@ -1,20 +1,20 @@
-<!--Id: cache.so,v 10.2 2002/05/15 15:36:14 margo Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: cache.so,v 10.3 2002/09/26 01:38:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Disk drive caches</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td align=right><a href="../../ref/program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/ram.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Disk drive caches</h1>
+<h3 align=center>Disk drive caches</h3>
<p>Many disk drives contain onboard caches. Some of these drives include
battery-backup or other functionality that guarantees that all cached
data will be completely written if the power fails. These drives can
@@ -22,14 +22,14 @@ offer substantial performance improvements over drives without caching
support. However, some caching drives rely on capacitors or other
mechanisms that guarantee only that the write of the current sector
will complete. These drives can endanger your database and potentially
-cause corruption of your data.
+cause corruption of your data.</p>
<p>To avoid losing your data, make sure the caching on your disk drives is
properly configured so the drive will never report that data has been written
unless the data is guaranteed to be written in the face of a power failure.
Many times, this means that write-caching on the disk drive must
-be disabled.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
+be disabled.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/ram.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/compatible.html b/db/docs/ref/program/compatible.html
index 72db97a5c..c296d7e8d 100644
--- a/db/docs/ref/program/compatible.html
+++ b/db/docs/ref/program/compatible.html
@@ -1,32 +1,33 @@
-<!--$Id: compatible.so,v 10.29 2000/07/25 16:31:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: compatible.so,v 10.34 2002/02/23 20:05:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Compatibility with historic interfaces</title>
+<title>Berkeley DB Reference Guide: Compatibility with historic UNIX interfaces</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/recimp.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/copy.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Compatibility with historic interfaces</h1>
-<p>The Berkeley DB version 2 library provides backward compatible interfaces for
-the historic UNIX <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a> and <a href="../../api_c/hsearch.html">hsearch</a>
-interfaces. It also provides a backward compatible interface for the
-historic Berkeley DB 1.85 release.
+<h3 align=center>Compatibility with historic UNIX interfaces</h3>
+<p>The Berkeley DB version 2 library provides backward-compatible interfaces for
+the historic UNIX <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a>, and <a href="../../api_c/hsearch.html">hsearch</a>
+interfaces. It also provides a backward-compatible interface for the
+historic Berkeley DB 1.85 release.</p>
<p>Berkeley DB version 2 does not provide database compatibility for any of the
-above interfaces, and existing databases must be converted manually. To
-convert existing databases from the Berkeley DB 1.85 format to the Berkeley DB version
-2 format, review the <a href="../../utility/db_dump.html">db_dump185</a> and <a href="../../utility/db_load.html">db_load</a> information.
-No utilities are provided to convert UNIX <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a> or
-<a href="../../api_c/hsearch.html">hsearch</a> databases.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/diskspace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/recimp.html"><img src="../../images/next.gif" alt="Next"></a>
+previous interfaces, and existing databases must be converted manually.
+To convert existing databases from the Berkeley DB 1.85 format to the Berkeley DB
+version 2 format, review the <a href="../../utility/db_dump.html">db_dump185</a> and <a href="../../utility/db_load.html">db_load</a>
+information. No utilities are provided to convert UNIX <a href="../../api_c/dbm.html">dbm</a>,
+<a href="../../api_c/dbm.html">ndbm</a>, or <a href="../../api_c/hsearch.html">hsearch</a> databases.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/copy.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/runtime.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/copy.html b/db/docs/ref/program/copy.html
index 80b6f942a..ebffa1ce1 100644
--- a/db/docs/ref/program/copy.html
+++ b/db/docs/ref/program/copy.html
@@ -1,63 +1,67 @@
-<!--$Id: copy.so,v 10.4 2000/03/18 21:43:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: copy.so,v 10.12 2003/10/18 19:16:05 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Copying databases</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/version.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/cache.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/compatible.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Copying databases</h1>
-<p>Because file identification cookies (e.g., file names, device and inode
-numbers, volume and file IDs, etc.) are not necessarily unique or
-maintained across system reboots, each Berkeley DB database file contains a
-20-byte file identification bytestring that is stored in the first page
-of the database at a page byte offset of 36 bytes. When multiple
-processes or threads open the same database file in Berkeley DB, it is this
-bytestring that is used to ensure that the same underlying pages are
-updated in the shared memory buffer pool no matter which Berkeley DB handle is
-used for the operation.
+<h3 align=center>Copying databases</h3>
+<p>Because file identification cookies (for example, filenames, device and
+inode numbers, volume and file IDs, and so on) are not necessarily
+unique or maintained across system reboots, each Berkeley DB database file
+contains a 20-byte file identification bytestring that is stored in the
+first page of the database, starting with the 53rd byte on the page.
+When multiple processes or threads open the same database file in Berkeley DB,
+it is this bytestring that is used to ensure that the same underlying
+pages are updated in the shared memory buffer pool, no matter which
+Berkeley DB handle is used for the operation.</p>
<p>It is usually a bad idea to physically copy a database to a new name. In
-the few cases where copying is the best solution for your application,
-you must guarantee there are never two different databases with the same
-file identification bytestring in the memory pool at the same time.
-Copying databases is further complicated by the fact that the shared
-memory buffer pool does not discard all cached copies of pages for a
-database when the database is logically closed, that is, when
-<a href="../../api_c/db_close.html">DB-&gt;close</a> is called. Nor is there a Berkeley DB interface to explicitly
-discard pages from the shared memory buffer pool for any particular
-database.
+the few cases in which copying is the best solution for your application,
+you must guarantee that there are never two different databases with
+the same file identification bytestring in the memory pool at the same
+time. Copying databases is further complicated by the fact that the
+shared memory buffer pool does not discard all cached copies of pages
+for a database when the database is logically closed; that is, when
+<a href="../../api_c/db_close.html">DB-&gt;close</a> is called. Nor is there a Berkeley DB interface to
+explicitly discard pages from the shared memory buffer pool for any
+particular database.</p>
<p>Before copying a database, you must ensure that all modified pages have
been written from the memory pool cache to the backing database file.
-This is done using the <a href="../../api_c/db_sync.html">DB-&gt;sync</a> or <a href="../../api_c/db_close.html">DB-&gt;close</a> interfaces.
+This is done using the <a href="../../api_c/db_sync.html">DB-&gt;sync</a> or <a href="../../api_c/db_close.html">DB-&gt;close</a> methods.</p>
<p>Before using a copy of a database from Berkeley DB, you must ensure that all
pages from any database with the same bytestring have been removed from
the memory pool cache. If the environment in which you intend to open
the copy of the database potentially has pages from files with identical
bytestrings to the copied database (which is likely to be the case), there
-are a few possible solutions:
-<p><ol>
-<p><li>Remove the environment, either explicitly or by calling <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a>.
-Note, this will not allow you to access both the original and copy of the
-database at the same time.
-<p><li>Overwrite the bytestring in the copied database with a new bytestring.
-This allows you to access both the original and copy of the database at
-the same time.
-<p><li>Create a new file that will have a new bytestring. The simplest
-way to create a new file that will have a new bytestring is to call the
-<a href="../../utility/db_dump.html">db_dump</a> utility to dump out the contents of the database, and then
-use the <a href="../../utility/db_load.html">db_load</a> utility to load the dumped output into a new file
-name. This allows you to access both the original and copy of the
-database at the same time.
+are a few possible solutions:</p>
+<ol>
+<p><li>Remove the environment, either explicitly or by calling <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a>.
+Note that this will not allow you to access both the original and copy
+of the database at the same time.
+<p><li>Create a new file that will have a new bytestring. The simplest way to
+create a new file that will have a new bytestring is to call the
+<a href="../../utility/db_dump.html">db_dump</a> utility to dump out the contents of the database and
+then use the <a href="../../utility/db_load.html">db_load</a> utility to load the dumped output into a
+new file. This allows you to access both the original and copy of
+the database at the same time.
+<p><li>If your database is too large to be copied, overwrite the bytestring in
+the copied database with a new bytestring. This allows you to access
+both the original and copy of the database at the same time.
+If there are multiple databases in a single physical file,
+the bytestring found in the first page of each database needs to
+be overwritten, not just the first page of the physical file.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/version.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/cache.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/compatible.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/environ.html b/db/docs/ref/program/environ.html
index 7f56109b5..462b6750a 100644
--- a/db/docs/ref/program/environ.html
+++ b/db/docs/ref/program/environ.html
@@ -1,33 +1,34 @@
-<!--$Id: environ.so,v 10.17 2000/03/18 21:43:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: environ.so,v 10.21 2001/04/16 17:11:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Environment variables</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/errorret.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/mt.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/errorret.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/mt.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Environment variables</h1>
-<p>The Berkeley DB library uses the following environment variables:
+<h3 align=center>Environment variables</h3>
+<p>The Berkeley DB library uses the following environment variables:</p>
<p><dl compact>
<p><dt>DB_HOME<dd>If the environment variable DB_HOME is set, it is used as part of
<a href="../../ref/env/naming.html">File Naming</a>.
-Note, for the DB_HOME variable to take effect, either the
+Note: For the DB_HOME variable to take effect, either the
<a href="../../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> or <a href="../../api_c/env_open.html#DB_USE_ENVIRON_ROOT">DB_USE_ENVIRON_ROOT</a> flags must be
-specified to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>.
-<p><dt>TMPDIR, TEMP, TMP, TempFolder<dd>The TMPDIR, TEMP, TMP and TempFolder environment variables are all
+specified to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>.
+<p><dt>TMPDIR, TEMP, TMP, TempFolder<dd>The TMPDIR, TEMP, TMP, and TempFolder environment variables are all
checked as locations in which to create temporary files. See
-<a href="../../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a> for more information.
+<a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a> for more information.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/errorret.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/mt.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/errorret.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/mt.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/errorret.html b/db/docs/ref/program/errorret.html
index fc6ad650d..f5e8f793a 100644
--- a/db/docs/ref/program/errorret.html
+++ b/db/docs/ref/program/errorret.html
@@ -1,37 +1,38 @@
-<!--$Id: errorret.so,v 10.34 2000/12/31 19:26:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: errorret.so,v 10.46 2003/09/23 18:25:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Error returns to applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/appsignals.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/environ.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/appsignals.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/environ.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Error returns to applications</h1>
-<p>Except for the historic <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a> and <a href="../../api_c/hsearch.html">hsearch</a>
+<h3 align=center>Error returns to applications</h3>
+<p>Except for the historic <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a>, and <a href="../../api_c/hsearch.html">hsearch</a>
interfaces, Berkeley DB does not use the global variable <b>errno</b> to
return error values. The return values for all Berkeley DB functions are
-grouped into three categories:
+grouped into the following three categories:</p>
<p><dl compact>
<p><dt>0<dd>A return value of 0 indicates that the operation was successful.
<p><dt>&gt; 0<dd>A return value that is greater than 0 indicates that there was a system
error. The <b>errno</b> value returned by the system is returned by
-the function, e.g., when a Berkeley DB function is unable to allocate memory,
-the return value from the function will be ENOMEM.
+the function; for example, when a Berkeley DB function is unable to allocate
+memory, the return value from the function will be ENOMEM.
<p><dt>&lt; 0<dd>A return value that is less than 0 indicates a condition that was not
a system failure, but was not an unqualified success, either. For
example, a routine to retrieve a key/data pair from the database may
return DB_NOTFOUND when the key/data pair does not appear in
-the database, as opposed to the value of 0, which would be returned if
+the database; as opposed to the value of 0, which would be returned if
the key/data pair were found in the database.
-<p> <a name="3"><!--meow--></a>
+<p><a name="3"><!--meow--></a>
All values returned by Berkeley DB functions are less than 0 in order to avoid
conflict with possible values of <b>errno</b>. Specifically, Berkeley DB
reserves all values from -30,800 to -30,999 to itself as possible error
@@ -39,70 +40,74 @@ values. There are a few Berkeley DB interfaces where it is possible for an
application function to be called by a Berkeley DB function and subsequently
fail with an application-specific return. Such failure returns will be
passed back to the function that originally called a Berkeley DB interface.
-To avoid ambiguity as to the cause of the error, error values separate
-from the Berkeley DB error name space should be used.
+To avoid ambiguity about the cause of the error, error values separate
+from the Berkeley DB error name space should be used.</p>
</dl>
-While possible error returns are specified by each individual function's
-manual page, there are a few error returns that deserve special mention:
+<p>Although possible error returns are specified by each individual function's
+manual page, there are a few error returns that deserve general mention:</p>
<h3><a name="DB_NOTFOUND">DB_NOTFOUND</a> and <a name="DB_KEYEMPTY">DB_KEYEMPTY</a></h3>
-<p>There are two special return values that are similar in meaning, and that
+<p>There are two special return values that are similar in meaning and that
are returned in similar situations, and therefore might be confused:
-DB_NOTFOUND and DB_KEYEMPTY.
+DB_NOTFOUND and DB_KEYEMPTY.</p>
<p>The DB_NOTFOUND error return indicates that the requested key/data
-pair did not exist in the database or that start- or end-of-file has been
-reached.
-<p>The DB_KEYEMPTY error return indicates that the requested key/data
-pair logically exists but was never explicitly created by the application
-(the Recno and Queue access methods will automatically create key/data
-pairs under some circumstances; see <a href="../../api_c/db_open.html">DB-&gt;open</a> for more
-information), or that the requested key/data pair was deleted and never
-re-created. In addition, the Queue access method will return
-DB_KEYEMPTY for records which were created as part of a
-transaction which was later aborted, and never re-created.
+pair did not exist in the database or that start-of- or end-of-file has
+been reached by a cursor.</p>
+<p>The DB_KEYEMPTY error return indicates that the requested
+key/data pair logically exists but was never explicitly created by the
+application (the Recno and Queue access methods will automatically
+create key/data pairs under some circumstances; see <a href="../../api_c/db_open.html">DB-&gt;open</a>
+for more information), or that the requested key/data pair was deleted
+and never re-created. In addition, the Queue access method will return
+DB_KEYEMPTY for records that were created as part of a
+transaction that was later aborted and never re-created.</p>
+<h3><a name="DB_KEYEXIST">DB_KEYEXIST</a></h3>
+<p>The DB_KEYEXIST error return indicates the <a href="../../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a>
+option was specified to the <a href="../../api_c/db_put.html">DB-&gt;put</a> method and the key already exists
+in the database.</p>
+<a name="4"><!--meow--></a>
<h3><a name="DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a></h3>
<p>When multiple threads of control are modifying the database, there is
normally the potential for deadlock. In Berkeley DB, deadlock is signified by
an error return from the Berkeley DB function of the value
DB_LOCK_DEADLOCK. Whenever a Berkeley DB function returns
-DB_LOCK_DEADLOCK, the enclosing transaction should be aborted.
+DB_LOCK_DEADLOCK, the enclosing transaction should be aborted.</p>
<p>Any Berkeley DB function that attempts to acquire locks can potentially return
DB_LOCK_DEADLOCK. Practically speaking, the safest way to deal
-with applications that can deadlock is to handle an
-DB_LOCK_DEADLOCK return from any Berkeley DB access method call.
+with applications that can deadlock is to handle a
+DB_LOCK_DEADLOCK return from any Berkeley DB access method call.</p>
<h3><a name="DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a></h3>
-<p>When multiple threads of control are modifying the database, there is
-normally the potential for deadlock. In order to avoid deadlock,
-applications may specify, on a per-transaction basis, that if a lock is
-unavailable, the Berkeley DB operation should return immediately instead of
-waiting on the lock. The error return in this case will be
-DB_LOCK_NOTGRANTED. Whenever a Berkeley DB function returns
-DB_LOCK_NOTGRANTED, the enclosing transaction should be aborted.
+<p>If a lock is requested from the <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> or <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> methods
+with the <a href="../../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> flag specified, the method will return
+DB_LOCK_NOTGRANTED if the lock is not immediately available.</p>
+<p>If the <a href="../../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag is specified to the
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method, database calls timing out based on lock or
+transaction timeout values will return DB_LOCK_NOTGRANTED
+instead of DB_LOCK_DEADLOCK.</p>
<h3><a name="DB_RUNRECOVERY">DB_RUNRECOVERY</a></h3>
<p>There exists a class of errors that Berkeley DB considers fatal to an entire
Berkeley DB environment. An example of this type of error is a corrupted
-database, or a log write failure because the disk is out of free space.
-The only way to recover from these failures is to have all threads of
-control exit the Berkeley DB environment, run recovery of the environment, and
-re-enter Berkeley DB. (It is not strictly necessary that the processes exit,
-although that is the only way to recover system resources, such as file
-descriptors and memory, allocated by Berkeley DB.)
+database page. The only way to recover from these failures is to have
+all threads of control exit the Berkeley DB environment, run recovery of the
+environment, and re-enter Berkeley DB. (It is not strictly necessary that the
+processes exit, although that is the only way to recover system
+resources, such as file descriptors and memory, allocated by Berkeley DB.)</p>
<p>When this type of error is encountered, the error value
DB_RUNRECOVERY is returned. This error can be returned by any
Berkeley DB interface. Once DB_RUNRECOVERY is returned by any
interface, it will be returned from all subsequent Berkeley DB calls made by
-any threads or processes participating in the environment.
+any threads of control participating in the environment.</p>
<p>Optionally, applications may also specify a fatal-error callback function
-using the <a href="../../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a> function. This callback function will be
-called with two arguments: a reference to the DB_ENV structure associated
-with the environment, and the <b>errno</b> value associated with the
-underlying error that caused the problem.
+using the <a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a> method. This callback function will be
+called with two arguments: a reference to the <a href="../../api_c/env_class.html">DB_ENV</a> structure
+associated with the environment and the <b>errno</b> value
+associated with the underlying error that caused the problem.</p>
<p>Applications can handle such fatal errors in one of two ways: by checking
for DB_RUNRECOVERY as part of their normal Berkeley DB error return
-checking, similarly to DB_LOCK_DEADLOCK or any other error, or,
-in applications that have no cleanup processing of their own, by simply
-exiting the application when the callback function is called.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/appsignals.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/environ.html"><img src="../../images/next.gif" alt="Next"></a>
+checking, similarly to DB_LOCK_DEADLOCK or any other error, or
+by simply exiting the application when the callback function is called
+in applications that have no cleanup processing of their own.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/appsignals.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/environ.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/faq.html b/db/docs/ref/program/faq.html
index f0b079b6d..3e644d64f 100644
--- a/db/docs/ref/program/faq.html
+++ b/db/docs/ref/program/faq.html
@@ -1,31 +1,43 @@
-<!--Id: faq.so,v 10.2 2002/05/17 02:47:36 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.3 2002/12/10 23:41:42 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Programmer notes FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td align=right><a href="../../ref/program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Programmer notes FAQ</h1>
-<p><ol>
+<h3 align=center>Programmer notes FAQ</h3>
+<ol>
<a name="2"><!--meow--></a>
<p><li><b>What priorities should threads/tasks executing Berkeley DB functions
be given?</b>
<p>Tasks executing Berkeley DB functions should have the same, or roughly
equivalent, system priorities. For example, it can be dangerous to give
tasks of control performing checkpoints a lower priority than tasks of
-control doing database lookups, and starvation can sometimes result.
+control doing database lookups, and starvation can sometimes result.</p>
+<p><li><b>Why isn't the C++ API exception safe?</b>
+<p>The Berkeley DB C++ API is a thin wrapper around the C API that maps most
+return values to exceptions, and gives the C++ handles the same
+lifecycles as their C counterparts. One consequence is that if an
+exception occurs while a cursor or transaction handle is open, the
+application must explicitly close the cursor or abort the transaction.</p>
+<p>Applications can be simplified and bugs avoided by creating wrapper
+classes around <a href="../../api_c/dbc_class.html">DBC</a> and <a href="../../api_c/txn_class.html">DB_TXN</a> that call the appropriate
+cleanup method in the wrapper's destructor. By creating an instance
+of the wrappers on the stack, C++ scoping rules will ensure that the
+destructor is called before exception handling unrolls the block that
+contains the wrapper object.</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/runtime.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/mt.html b/db/docs/ref/program/mt.html
index 31110920a..713fe89aa 100644
--- a/db/docs/ref/program/mt.html
+++ b/db/docs/ref/program/mt.html
@@ -1,95 +1,78 @@
-<!--$Id: mt.so,v 10.37 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: mt.so,v 10.47 2003/05/09 20:14:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Building multi-threaded applications</title>
+<title>Berkeley DB Reference Guide: Multithreaded applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/environ.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/scope.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/environ.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/scope.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building multi-threaded applications</h1>
-<p>The Berkeley DB library is not itself multi-threaded. The library was
-deliberately architected to not use threads internally because of the
-portability problems that using threads within the library would
-introduce.
-<p>Berkeley DB supports multi-threaded applications with the caveat that it loads
-and calls functions that are commonly available in C language environments.
-Other than this usage, Berkeley DB has no static data and maintains no local
-context between calls to Berkeley DB functions.
-<p>Environment and database object handles returned from Berkeley DB library
-functions are free-threaded. No other object handles returned from
-the Berkeley DB library are free-threaded.
-<p>The following rules should be observed when using threads to
-access the Berkeley DB library:
-<p><ol>
-<p><li>The <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag must be specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a>
-and <a href="../../api_c/db_open.html">DB-&gt;open</a> functions if the Berkeley DB handles returned by those interfaces
+<h3 align=center>Multithreaded applications</h3>
+<p>Berkeley DB fully supports multithreaded applications. The Berkeley DB library is
+not itself multithreaded, and was deliberately architected to not use
+threads internally because of the portability problems that would
+introduce. Database environment and database object handles returned
+from Berkeley DB library functions are free-threaded. No other object handles
+returned from the Berkeley DB library are free-threaded. The following rules
+should be observed when using threads to access the Berkeley DB library:</p>
+<ol>
+<p><li>The <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag must be specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>
+and <a href="../../api_c/db_open.html">DB-&gt;open</a> methods if the Berkeley DB handles returned by those interfaces
will be used in the context of more than one thread. Setting the
<a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag inconsistently may result in database corruption.
-<p>Threading is assumed in the Java API, so no special flags are required,
+<p>Threading is assumed in the Java API, so no special flags are required;
and Berkeley DB functions will always behave as if the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag
-was specified.
-<p>Only a single thread may call the <a href="../../api_c/env_close.html">DBENV-&gt;close</a> or <a href="../../api_c/db_close.html">DB-&gt;close</a> functions
-for a returned environment or database handle.
-<p>No other Berkeley DB handles are free-threaded, for example, cursors and
-transactions may not span threads as their returned handles are not
-free-threaded.
-<p><li>When using the non-cursor Berkeley DB calls to retrieve key/data items (e.g.,
-<a href="../../api_c/db_get.html">DB-&gt;get</a>), the memory referenced by the pointer stored into the
-Dbt is only valid until the next call to Berkeley DB using the DB handle
-returned by <a href="../../api_c/db_open.html">DB-&gt;open</a>. This includes any use of the returned
-DB handle, including by another thread of control within the
+was specified.</p>
+<p>Only a single thread may call the <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> or <a href="../../api_c/db_close.html">DB-&gt;close</a> methods
+for a returned environment or database handle.</p>
+<p>No other Berkeley DB handles are free-threaded.</p>
+<p><li>When using the non-cursor Berkeley DB calls to retrieve key/data items (for
+example, <a href="../../api_c/db_get.html">DB-&gt;get</a>), the memory to which the pointer stored into
+the Dbt refers is valid only until the next call using the <a href="../../api_c/db_class.html">DB</a>
+handle returned by <a href="../../api_c/db_open.html">DB-&gt;open</a>. This includes <b>any</b> use of
+the returned <a href="../../api_c/db_class.html">DB</a> handle, including by another thread within the
process.
<p>For this reason, if the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> handle was specified to the
-<a href="../../api_c/db_open.html">DB-&gt;open</a> function, either <a href="../../api_c/dbt.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../../api_c/dbt.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a>
-or <a href="../../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> must be specified in the <a href="../../api_c/dbt.html">DBT</a> when
-performing any non-cursor key or data retrieval.
-<p><li>The <a href="../../api_c/dbc_get.html#DB_CURRENT">DB_CURRENT</a>, <a href="../../api_c/dbc_get.html#DB_NEXT">DB_NEXT</a> and <a href="../../api_c/dbc_get.html#DB_PREV">DB_PREV</a> flags to the
-<a href="../../api_c/log_get.html">log_get</a> function may not be used by a free-threaded handle. If
-such calls are necessary, a thread should explicitly create a unique
-environment handle by separately calling <a href="../../api_c/env_open.html">DBENV-&gt;open</a> without
-specifying <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a>.
-<p><li>Each database operation (i.e., any call to a function underlying the
-handles returned by <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>) is normally
-performed on behalf of a unique locker. If, within a single thread of
-control, multiple calls on behalf of the same locker are desired, then
-transactions must be used. For example, consider the case where a
-cursor scan locates a record, and then based on that record, accesses
-some other item in the database. If these operations are done using
-the default lockers for the handle, they may conflict. If the
-application wishes to guarantee that the operations do not conflict,
-locks must be obtained on behalf of a transaction, instead of the
-default locker ID, and a transaction must be specified to subsequent
-<a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> and other Berkeley DB calls.
-<p><li>Transactions may not span threads. Each transaction must begin and end
-in the same thread, and each transaction may only be used by a single
-thread.
-<p>Cursors may not span transactions or threads. Each cursor must be
-allocated and de-allocated within the same transaction and within
-the same thread.
+<a href="../../api_c/db_open.html">DB-&gt;open</a> method, either <a href="../../api_c/dbt_class.html#DB_DBT_MALLOC">DB_DBT_MALLOC</a>, <a href="../../api_c/dbt_class.html#DB_DBT_REALLOC">DB_DBT_REALLOC</a>,
+or <a href="../../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> must be specified in the <a href="../../api_c/dbt_class.html">DBT</a> when
+performing any non-cursor key or data retrieval.</p>
+<p><li>Cursors may not span transactions. Each cursor must be
+allocated and deallocated within the same transaction.
+<p>Transactions and cursors may span threads, but only serially, that is,
+the application must serialize access to the <a href="../../api_c/txn_class.html">DB_TXN</a> and
+<a href="../../api_c/dbc_class.html">DBC</a> handles. In the case of nested transactions, since all
+child transactions are part of the same parent transaction, they must observe
+the same constraints. That is, children may execute in different threads
+only if each child executes serially.</p>
<p><li>User-level synchronization mutexes must have been implemented for the
compiler/architecture combination. Attempting to specify the DB_THREAD
flag will fail if fast mutexes are not available.
-<p>If blocking mutexes are available, for example POSIX pthreads, they will
-be used. Otherwise, the Berkeley DB library will make a system call to pause
-for some amount of time when it is necessary to wait on a lock. This may
-not be optimal, especially in a thread-only environment where it will be
-more efficient to explicitly yield the processor to another thread.
+<p>If blocking mutexes are available (for example POSIX pthreads), they
+will be used. Otherwise, the Berkeley DB library will make a system call to
+pause for some amount of time when it is necessary to wait on a lock.
+This may not be optimal, especially in a thread-only environment, in
+which it is usually more efficient to explicitly yield the processor to
+another thread.</p>
<p>It is possible to specify a yield function on an per-application basis.
-See <a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a> for more information.
+See <a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a> for more information.</p>
<p>It is possible to specify the number of attempts that will be made to
-acquire the mutex before waiting. Se <a href="../../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a> for
-more information.
+acquire the mutex before waiting. See <a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a> for
+more information.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/environ.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/scope.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>When creating multiple databases in a single physical file, multithreaded
+programs may have additional requirements. For more information, see
+<a href="../../ref/am/opensub.html">Opening multiple databases in a single
+file.</a></p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/environ.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/scope.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/namespace.html b/db/docs/ref/program/namespace.html
index 519f5f61c..26151e180 100644
--- a/db/docs/ref/program/namespace.html
+++ b/db/docs/ref/program/namespace.html
@@ -1,44 +1,48 @@
-<!--$Id: namespace.so,v 10.14 2000/08/01 21:51:23 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: namespace.so,v 10.20 2002/09/26 01:38:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Name spaces</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/scope.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/scope.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/ram.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Name spaces</h1>
+<h3 align=center>Name spaces</h3>
+<h3>C Language Name Space</h3>
<p>The Berkeley DB library is careful to avoid C language programmer name spaces,
but there are a few potential areas for concern, mostly in the Berkeley DB
include file db.h. The db.h include file defines a number of types and
strings. Where possible, all of these types and strings are prefixed with
-"DB_" or "db_". There are a few notable exceptions.
+"DB_" or "db_". There are a few notable exceptions.</p>
<p>The Berkeley DB library uses a macro named "__P" to configure for systems that
do not provide ANSI C function prototypes. This could potentially collide
-with other systems using a "__P" macro for similar or different purposes.
+with other systems using a "__P" macro for similar or different purposes.</p>
<p>The Berkeley DB library needs information about specifically sized types for
each architecture. If they are not provided by the system, they are
-typedef'd in the db.h include file. The types which may be typedef'd
+typedef'd in the db.h include file. The types that may be typedef'd
by db.h include the following: u_int8_t, int16_t, u_int16_t, int32_t,
-u_int32_t, u_char, u_short, u_int and u_long.
-<p>The Berkeley DB library declares a number of external routines. All of these
+u_int32_t, u_char, u_short, u_int, and u_long.</p>
+<p>The Berkeley DB library declares a number of external routines. All these
routines are prefixed with the strings "db_", "lock_", "log_", "memp_"
or "txn_". All internal routines are prefixed with the strings "__db_",
-"__lock_," "__log_", "__memp_" or "__txn_".
-<p>Berkeley DB environments create or use some number of files in environment home
-directories. These files are named <a href="../../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a>, "log.NNNNNNNNNN"
-(e.g., log.0000000003), or with the string prefix "__db" (e.g., __db.001).
-Database files that match these names should not be created in the
-environment directory.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/scope.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/copy.html"><img src="../../images/next.gif" alt="Next"></a>
+"__lock_", "__log_", "__memp_", or "__txn_".</p>
+<h3>Filesystem Name Space</h3>
+<p>Berkeley DB environments create or use some number of files in environment
+home directories. These files are named <a href="../../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a>, "log.NNNNN"
+(for example, log.0000000003, where the number of digits following the
+dot is unspecified), or with the string prefix "__db" (for example,
+__db.001). Database files that match these names should not be created
+in the environment directory.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/scope.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/ram.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/ram.html b/db/docs/ref/program/ram.html
new file mode 100644
index 000000000..40761f455
--- /dev/null
+++ b/db/docs/ref/program/ram.html
@@ -0,0 +1,53 @@
+<!--$Id: ram.so,v 10.1 2002/09/26 01:38:32 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: RAM-only configurations</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
+<td align=right><a href="../program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/cache.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>RAM-only configurations</h3>
+<p>Berkeley DB supports RAM-only configurations, however, Berkeley DB does not
+guarantee writes will never be attempted to disk.</p>
+<p>You can configure RAM-only databases by not specifying a physical file
+name to the <a href="../../api_c/db_open.html">DB-&gt;open</a> method. Databases created in this way will never
+be written to disk unless Berkeley DB runs out of cache space. Running out
+of cache space happens when the application attempts to create a new
+database page and there is no spare room in the cache, nor is there a
+clean page which can simply be evicted from the cache, and a dirty page
+must be written from the cache to disk to make room to create the new
+page. When Berkeley DB runs out of cache space, it will attempt to create a
+temporary backing file to make new room in the cache, which is not what
+you want.</p>
+<p>You can create RAM-only database environments (in which you can work
+with both RAM-only and disk-backed databases) in two different types of
+memory: in heap memory or in system shared memory. To create the
+database environment in heap memory, specify the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag
+to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method. Database environments created in heap
+memory are only accessible to the threads of a single process, however.
+To create the database environment in system shared memory, specify the
+<a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> flag to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method. Database
+environments created in system memory are accessible to multiple
+processes. However, database environments created in system shared
+memory do create a small (roughly 8 byte) file in the file system read
+by the processes to identify the system shared memory segments to use.</p>
+<p>Finally, if your database environment is intended to be transactionally
+protected or recoverable after application or system failure (that is,
+if you configure either the locking or transaction subsystems in the
+database environment), both the databases and database environment log
+files must be written to disk. There is currently no way in the Berkeley DB
+database environment to support transactions without writing log files
+to disk.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/namespace.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/cache.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/program/runtime.html b/db/docs/ref/program/runtime.html
index a6f860bca..2a8dc2b8e 100644
--- a/db/docs/ref/program/runtime.html
+++ b/db/docs/ref/program/runtime.html
@@ -1,23 +1,26 @@
-<!--$Id: runtime.so,v 10.23 2000/12/04 18:05:42 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: runtime.so,v 10.33 2003/04/09 16:38:59 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Run-time configuration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/extending.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/compatible.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Run-time configuration</h1>
-<p>There are a few interfaces that support run-time configuration of Berkeley DB.
-First is a group of interfaces that allow applications to intercept
-Berkeley DB requests for underlying library or system call functionality:
-<p><blockquote><pre><a href="../../api_c/set_func_close.html">db_env_set_func_close</a>
+<h3 align=center>Run-time configuration</h3>
+<p>It is possible to configure Berkeley DB at run-time so applications can
+redirect all Berkeley DB calls to underlying library or system call
+functionality. For example, an application might want Berkeley DB to call
+debugging memory allocation routines rather than the standard C library
+interfaces. The following interfaces support this functionality:</p>
+<blockquote><pre><a href="../../api_c/set_func_close.html">db_env_set_func_close</a>
<a href="../../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a>
<a href="../../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a>
<a href="../../api_c/set_func_exists.html">db_env_set_func_exists</a>
@@ -29,29 +32,25 @@ Berkeley DB requests for underlying library or system call functionality:
<a href="../../api_c/set_func_open.html">db_env_set_func_open</a>
<a href="../../api_c/set_func_read.html">db_env_set_func_read</a>
<a href="../../api_c/set_func_realloc.html">db_env_set_func_realloc</a>
+<a href="../../api_c/set_func_rename.html">db_env_set_func_rename</a>
<a href="../../api_c/set_func_seek.html">db_env_set_func_seek</a>
<a href="../../api_c/set_func_sleep.html">db_env_set_func_sleep</a>
<a href="../../api_c/set_func_unlink.html">db_env_set_func_unlink</a>
<a href="../../api_c/set_func_unmap.html">db_env_set_func_unmap</a>
<a href="../../api_c/set_func_write.html">db_env_set_func_write</a>
<a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a></pre></blockquote>
-<p>These interfaces are only available from the Berkeley DB C language API.
-<p>In addition, there are a few interfaces that allow applications to
-re-configure, on an application-wide basis, Berkeley DB behaviors.
-<p><blockquote><pre><a href="../../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>
-<a href="../../api_c/env_set_pageyield.html">db_env_set_pageyield</a>
-<a href="../../api_c/env_set_panicstate.html">db_env_set_panicstate</a>
-<a href="../../api_c/env_set_region_init.html">db_env_set_region_init</a>
-<a href="../../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a></pre></blockquote>
-<p>These interfaces are available from all of the Berkeley DB programmatic APIs.
+<p>These interfaces are available only from the Berkeley DB C language API, and
+are not available from all of the operating systems Berkeley DB supports.</p>
<p>A not-uncommon problem for applications is the new API in Solaris 2.6
-for manipulating large files. As this API was not part of Solaris 2.5,
-it is difficult to create a single binary that takes advantage of the
-large file functionality in Solaris 2.6 but which still runs on Solaris
+for manipulating large files. Because this API was not part of Solaris
+2.5, it is difficult to create a single binary that takes advantage of
+the large file functionality in Solaris 2.6, but still runs on Solaris
2.5. <a href="solaris.txt">Example code</a> that supports this is
-included in the Berkeley DB distribution.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/extending.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/lock/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+included in the Berkeley DB distribution, however, the example code was
+written using previous versions of the Berkeley DB APIs, and is only useful
+as an example.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/compatible.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/program/scope.html b/db/docs/ref/program/scope.html
index 198147932..782bb5ede 100644
--- a/db/docs/ref/program/scope.html
+++ b/db/docs/ref/program/scope.html
@@ -1,71 +1,79 @@
-<!--$Id: scope.so,v 10.3 2000/08/10 17:54:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: scope.so,v 10.11 2003/10/24 22:27:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB handles</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Programmer Notes</dl></h3></td>
-<td width="1%"><a href="../../ref/program/mt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/namespace.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../program/mt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/namespace.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB handles</h1>
- <a name="3"><!--meow--></a>
+<h3 align=center>Berkeley DB handles</h3>
<p>The Berkeley DB library has a number of object handles. The following table
-lists those handles, their scope, and if they are free-threaded, that
-is, if multiple threads within a process can share them.
+lists those handles, their scope, and whether they are free-threaded
+(that is, whether multiple threads within a process can share them).</p>
<p><dl compact>
-<p><dt>DB_ENV<dd>The DB_ENV handle is created by the <a href="../../api_c/env_create.html">db_env_create</a> function and
-references a Berkeley DB database environment, a collection of
-databases and Berkeley DB subsystems. DB_ENV handles are free-threaded
-if the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function
-when the environment is opened. The handle should not be closed while
-any other handle remains open that is using it as a reference
-(e.g., DB or DB_TXN). Once either the <a href="../../api_c/env_close.html">DBENV-&gt;close</a> or
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> functions are called, the handle may not be accessed again,
-regardless of the function's return.
-<p><dt>DB_TXN<dd>The DB_TXN handle is created by the <a href="../../api_c/txn_begin.html">txn_begin</a> function and
-references a single transaction. The handle is not free-threaded, and
-transactions may not span threads nor may transactions be used by more
-than a single thread.
-Once the
-<a href="../../api_c/txn_abort.html">txn_abort</a> or <a href="../../api_c/txn_commit.html">txn_commit</a> functions are called, the handle may
-not be accessed again, regardless of the function's return.
-In addition, parent transactions may not issue
-any Berkeley DB operations, except for <a href="../../api_c/txn_begin.html">txn_begin</a>, <a href="../../api_c/txn_abort.html">txn_abort</a>
-and <a href="../../api_c/txn_commit.html">txn_commit</a>, while it has active child transactions (child
-transactions that have not yet been committed or aborted).
-<p><dt>DB_MPOOLFILE<dd>The DB_MPOOLFILE handle references an open file in the shared
+<p><dt><a href="../../api_c/env_class.html">DB_ENV</a><dd>The <a href="../../api_c/env_class.html">DB_ENV</a> handle, created by the <a href="../../api_c/env_class.html">db_env_create</a> method, refers
+to a Berkeley DB database environment -- a collection of Berkeley DB subsystems,
+log files and databases. <a href="../../api_c/env_class.html">DB_ENV</a> handles are free-threaded if
+the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method when
+the environment is opened. The handle should not be closed while any
+other handle remains open that is using it as a reference (for example,
+<a href="../../api_c/db_class.html">DB</a> or <a href="../../api_c/txn_class.html">DB_TXN</a>). Once either the <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> or
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> methods are called, the handle may not be accessed again,
+regardless of the method's return.
+<p><dt><a href="../../api_c/txn_class.html">DB_TXN</a><dd>The <a href="../../api_c/txn_class.html">DB_TXN</a> handle, created by the <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> method, refers to
+a single transaction. The handle is not free-threaded. Transactions
+may span threads, but only serially, that is, the application must
+serialize access to the <a href="../../api_c/txn_class.html">DB_TXN</a> handles. In the case of nested
+transactions, since all child transactions are part of the same parent
+transaction, they must observe the same constraints. That is, children
+may execute in different threads only if each child executes serially.
+<p>Once the <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> or <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> methods are called, the
+handle may not be accessed again, regardless of the method's return.
+In addition, parent transactions may not issue any Berkeley DB operations
+while they have active child transactions (child transactions that
+have not yet been committed or aborted) except for <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>,
+<a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> and <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>.</p>
+<p><dt><a href="../../api_c/logc_class.html">DB_LOGC</a><dd>The <a href="../../api_c/logc_class.html">DB_LOGC</a> handle refers to a cursor into the log files. The
+handle is not free-threaded. Once the <a href="../../api_c/logc_close.html">DB_LOGC-&gt;close</a> method is called,
+the handle may not be accessed again, regardless of the method's
+return.
+<p><dt><a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a><dd>The <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle refers to an open file in the shared
memory buffer pool of the database environment. The handle is not
-free-threaded. Once the <a href="../../api_c/memp_fclose.html">memp_fclose</a> function is called, the handle may
-not be accessed again, regardless of the function's return.
-<p><dt>DB<dd>The DB handle is created by the <a href="../../api_c/db_create.html">db_create</a> function and
-references a single Berkeley DB database, which may or may not be part of a
-database environment. DB handles are free-threaded if the
-<a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is specified to the <a href="../../api_c/db_open.html">DB-&gt;open</a> function when the
-database is opened, or if the database environment in which the database
+free-threaded. Once the <a href="../../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method is called, the handle may
+not be accessed again, regardless of the method's return.
+<p><dt><a href="../../api_c/db_class.html">DB</a><dd>The <a href="../../api_c/db_class.html">DB</a> handle, created by the <a href="../../api_c/db_class.html">db_create</a> method, refers to a
+single Berkeley DB database, which may or may not be part of a database
+environment. <a href="../../api_c/db_class.html">DB</a> handles are free-threaded if the
+<a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag is specified to the <a href="../../api_c/db_open.html">DB-&gt;open</a> method when the
+database is opened or if the database environment in which the database
is opened is free-threaded. The handle should not be closed while any
-other handle that references the database is in use, e.g., database
-handles must not be closed while cursor handles into the database remain
-open, or transactions which include operations on the database have not
-yet been committed or aborted. Once the <a href="../../api_c/db_close.html">DB-&gt;close</a>,
-<a href="../../api_c/db_remove.html">DB-&gt;remove</a> or <a href="../../api_c/db_rename.html">DB-&gt;rename</a> functions are called, the handle may
-not be accessed again, regardless of the function's return.
-<p><dt>DBC<dd>The DBC handle references a cursor into a Berkeley DB database. The
-handle is not free-threaded and cursors may not span threads nor may
-cursors be used by more than a single thread. If the cursor is to be
-used to perform operations on behalf of a transaction, the cursor must
-be opened and closed within the context of that single transaction.
-Once <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a> has been called, the handle may not be accessed
-again, regardless of the function's return.
+other handle that refers to the database is in use; for example,
+database handles must not be closed while cursor handles into the
+database remain open, or transactions that include operations on the
+database have not yet been committed or aborted. Once the
+<a href="../../api_c/db_close.html">DB-&gt;close</a>, <a href="../../api_c/db_remove.html">DB-&gt;remove</a>, or <a href="../../api_c/db_rename.html">DB-&gt;rename</a> methods are
+called, the handle may not be accessed again, regardless of the
+method's return.
+<p><dt><a href="../../api_c/dbc_class.html">DBC</a><dd>The <a href="../../api_c/dbc_class.html">DBC</a> handle refers to a cursor into a Berkeley DB database. The
+handle is not free-threaded. Cursors may span threads, but only
+serially, that is, the application must serialize access to the
+<a href="../../api_c/dbc_class.html">DBC</a> handles. If the cursor is to be used to perform operations
+on behalf of a transaction, the cursor must be opened and closed within
+the context of that single transaction. Once <a href="../../api_c/dbc_close.html">DBcursor-&gt;c_close</a> has been
+called, the handle may not be accessed again, regardless of the
+method's return.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/program/mt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/namespace.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../program/mt.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../program/namespace.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/refs/refs.html b/db/docs/ref/refs/refs.html
index 9e321b938..9902f1d2a 100644
--- a/db/docs/ref/refs/refs.html
+++ b/db/docs/ref/refs/refs.html
@@ -1,26 +1,27 @@
-<!--$Id: refs.so,v 10.24 2000/12/19 18:54:17 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: refs.so,v 10.25 2001/03/31 17:06:30 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Additional references</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Additional References</dl></h3></td>
-<td width="1%"><a href="../../ref/distrib/layout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<td align=right><a href="../distrib/layout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<p>
-<h1 align=center>Additional references</h1>
-<p>For more information on Berkeley DB, or on database systems theory in general,
-we recommend the sources listed below.
+<h3 align=center>Additional references</h3>
+<p>For more information on Berkeley DB or on database systems theory in general,
+we recommend the following sources:</p>
<h3>Technical Papers on Berkeley DB</h3>
<p>These papers have appeared in refereed conference proceedings, and are
subject to copyrights held by the conference organizers and the authors
of the papers. Sleepycat Software makes them available here as a courtesy
-with the permission of the copyright holders.
+with the permission of the copyright holders.</p>
<p><dl compact>
<p><dt><i>Berkeley DB</i> (<a href="bdb_usenix.html">HTML</a>, <a href="bdb_usenix.ps">Postscript</a>)<dd>Michael Olson, Keith Bostic, and Margo Seltzer, Proceedings of the 1999
Summer Usenix Technical Conference, Monterey, California, June 1999. This
@@ -41,8 +42,8 @@ for Berkeley DB.
This paper describes the Extended Linear Hashing techniques used by Berkeley DB.
</dl>
<h3>Background on Berkeley DB Features</h3>
-<p>These papers, while not specific to Berkeley DB, give a good overview of how
-different Berkeley DB features were implemented.
+<p>These papers, although not specific to Berkeley DB, give a good overview of the
+way different Berkeley DB features were implemented.</p>
<p><dl compact>
<p><dt><i>Operating System Support for Database Management</i><dd>Michael Stonebraker, Communications of the ACM 24(7), 1981, pp. 412-418.
<p><dt><i>Dynamic Hash Tables</i><dd>Per-Ake Larson, Communications of the ACM, April 1988.
@@ -58,7 +59,7 @@ Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982.
<h3>Database Systems Theory</h3>
<p>These publications are standard reference works on the design and
implementation of database systems. Berkeley DB uses many of the ideas they
-describe.
+describe.</p>
<p><dl compact>
<p><dt><i>Transaction Processing Concepts and Techniques</i><dd>by Jim Gray and Andreas Reuter, Morgan Kaufmann Publishers.
We recommend chapters 1, 4 (skip 4.6, 4.7, 4.9, 4.10 and 4.11),
@@ -68,8 +69,8 @@ In the 5th Edition, we recommend chapters 1, 2, 3, 16 and 17.
<p><dt><i>Concurrency Control and Recovery in Database Systems</i><dd>by Bernstein, Goodman, Hadzilaco. Currently out of print, but available
from <a href="http://research.microsoft.com/pubs/ccontrol/">http://research.microsoft.com/pubs/ccontrol/</a>.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/distrib/layout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../distrib/layout.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/refs/witold.html b/db/docs/ref/refs/witold.html
index d81065e66..9bd511c37 100644
--- a/db/docs/ref/refs/witold.html
+++ b/db/docs/ref/refs/witold.html
@@ -1,16 +1,24 @@
-<!--$Id: witold.so,v 10.4 1999/11/19 17:21:03 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: witold.so,v 10.5 2001/06/09 14:34:45 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Witold Litwin</title>
+<title>Berkeley DB Reference Guide: Witold Litwin</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Witold Litwin</h1>
-Witold is a hell of a guy to take you on a late-night high-speed car
-chase up the mountains of Austria in search of very green wine.
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Additional References</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Witold Litwin</h3>
+<p>Witold is a hell of a guy to take you on a late-night high-speed car
+chase up the mountains of Austria in search of very green wine.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/app.html b/db/docs/ref/rep/app.html
index 5ab61eb18..5a652ad59 100644
--- a/db/docs/ref/rep/app.html
+++ b/db/docs/ref/rep/app.html
@@ -1,27 +1,27 @@
-<!--Id: app.so,v 1.6 2002/08/21 21:02:15 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: app.so,v 1.16 2003/11/19 20:06:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building replicated applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/pri.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/comm.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/pri.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/comm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building replicated applications</h1>
+<h3 align=center>Building replicated applications</h3>
<p>The simplest way to build a replicated Berkeley DB application is to first
build (and debug!) the transactional version of the same application.
Then, add a thin replication layer to the application. All highly available
applications use the following additional four Berkeley DB methods:
<a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>, <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>, <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> and
<a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> and may also use the configuration method
-<a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a>:
+<a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a>:</p>
<p><dl compact>
<p><dt><a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a><dd>The <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method configures the replication system's
communications infrastructure.
@@ -33,26 +33,38 @@ for accepting log records and updating the local databases based on
messages from the master. For both the master and the clients, it is
responsible for handling administrative functions (for example, the
protocol for dealing with lost messages), and permitting new clients to
-join an active replication group.
+join an active replication group. This method should only be called
+after the environment has been configured as a replication master or
+client via <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>.
<p><dt><a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a><dd>The <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method causes the replication group to elect a new
-master; it is called whenever contact with the master is lost.
-<p><dt><a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a><dd>The <a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a> imposes an upper bound on the amount of data
+master; it is called whenever contact with the master is lost and the
+application wants the remaining sites to select a new master.
+<p><dt><a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a><dd>The <a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a> method imposes an upper bound on the amount of data
that will be sent in response to a single call to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.
+During client recovery, that is, when a replica site is trying to
+synchronize with the master, clients may ask the master for a large
+number of log records. If it is going to harm an application for the
+master message loop to remain busy for an extended period transmitting
+records to the replica, then the application will want to use <a href="../../api_c/rep_limit.html">DB_ENV-&gt;set_rep_limit</a>
+to limit the amount of data the master will send before relinquishing
+control and accepting other messages.
</dl>
<p>To add replication to a Berkeley DB application, application initialization
must be changed and the application's communications infrastructure must
be written. The application initialization changes are relatively
-simple, but the communications infrastructure code can be complex.
-<p>During application initialization, the application performs two
-additional tasks: first, it must provide Berkeley DB information about its
-communications infrastructure, and second, it must start the Berkeley DB
-replication system. Generally, a replicated application will do normal
-Berkeley DB recovery and configuration, exactly like any other transactional
-application. Then, once the database environment has been opened, it
-will call the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method to configure Berkeley DB for replication,
-and then will call the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method to join or create the
-replication group.
-<p>When calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>, the application has two choices:
+simple, but the communications infrastructure code can be complex.</p>
+<p>During application initialization, the application performs three
+additional tasks: first, it must specify the <a href="../../api_c/env_open.html#DB_INIT_REP">DB_INIT_REP</a> flag
+when opening its database environment; second, it must provide Berkeley DB
+information about its communications infrastructure; and third, it must
+start the Berkeley DB replication system. Generally, a replicated application
+will do normal Berkeley DB recovery and configuration, exactly like any other
+transactional application. Then, once the database environment has been
+opened, it will call the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method to configure Berkeley DB for
+replication, and then will call the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method to join or create
+the replication group.</p>
+<p>When calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> at application startup,
+the application has two choices:
specifically configure the master for the replication group, or,
alternatively, configure all group members as clients and then call an
election, letting the clients select the master from among themselves.
@@ -60,10 +72,10 @@ Either is correct, and the choice is entirely up to the application.
The result of calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> is usually the discovery of a
master, or the declaration of the local environment as the master. If
a master has not been discovered after a reasonable amount of time, the
-application should call <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> to call for an election.
-<p>In the case of multiple processes accessing a replicated environment,
-all of the threads of control expecting to modify databases in the
-environment or process replication messages must call the
+application should call <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> to call for an election.</p>
+<p>In the case of multiple processes or threads accessing a replicated
+environment, any environment handle that modifies databases in the
+environment or processes replication messages must call the
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method. Note that not all processes running in replicated
environments need to call <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> or <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>.
Read-only processes running in a master environment do not need to be
@@ -74,23 +86,16 @@ may become masters, it is usually simplest to configure for replication
on process startup rather than trying to reconfigure when the client
becomes a master). Obviously, at least one thread of control on each
client must be configured for replication as messages must be passed
-between the master and the client.
-<p>Databases are generally opened read-write on both clients and masters
-in order to simplify upgrading replication clients to be masters. (If
-databases are opened read-only on clients, and the client is then
-upgraded to be the master, the client would have to close and reopen
-all of its databases in order to support database update queries.)
-However, even though the database is opened read-write on the client,
-any attempt to update it will result in an error until the client is
-reconfigured as a master. No databases can be opened on clients before
-calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>, and attempting to do so will result in an
-error.
-<p>There are no additional interface calls required to shut down a database
-environment participating in a replication group. The application
-should shut down the environment in the usual manner, by calling the
-<a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/pri.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/comm.html"><img src="../../images/next.gif" alt="Next"></a>
+between the master and the client.</p>
+<p>For implementation reasons, all incoming replication messages must be
+processed using the same <a href="../../api_c/env_class.html">DB_ENV</a> handle. It is not required that
+a single thread of control process all messages, only that all threads
+of control processing messages use the same handle.</p>
+<p>No additional calls are required to shut down a database environment
+participating in a replication group. The application should shut down
+the environment in the usual manner, by calling the <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/pri.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/comm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/comm.html b/db/docs/ref/rep/comm.html
index 00f4f2b45..9c5cadd16 100644
--- a/db/docs/ref/rep/comm.html
+++ b/db/docs/ref/rep/comm.html
@@ -1,49 +1,56 @@
-<!--Id: comm.so,v 1.5 2002/09/05 01:46:30 margo Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: comm.so,v 1.11 2003/10/18 19:16:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building the communications infrastructure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/newsite.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/newsite.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building the communications infrastructure</h1>
+<h3 align=center>Building the communications infrastructure</h3>
<p>The replication support in an application is typically written with one
or more threads of control looping on one or more communication
channels, receiving and sending messages. These threads accept messages
from remote environments for the local database environment, and accept
messages from the local environment for remote environments. Messages
from remote environments are passed to the local database environment
-using the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method. Messages from the local environment
-are passed to the application for transmission using the callback
-interface specified to the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method.
+using the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method. Messages from the local environment are
+passed to the application for transmission using the callback function
+specified to the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method.</p>
<p>Processes establish communication channels by calling the
<a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method, regardless of whether they are running in client
or server environments. This method specifies the <b>send</b>
-interface, a callback interface used by Berkeley DB for sending messages to
+function, a callback function used by Berkeley DB for sending messages to
other database environments in the replication group. The <b>send</b>
-interface takes an environment ID and two opaque data objects. It is
-the responsibility of the <b>send</b> interface to transmit the
-information in the two data objects to the database environment
-corresponding to the ID, with the receiving application then calling
-the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method to process the message.
+function takes an environment ID and two opaque data objects. It is the
+responsibility of the <b>send</b> function to transmit the information
+in the two data objects to the database environment corresponding to the
+ID, with the receiving application then calling the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method
+to process the message.</p>
<p>The details of the transport mechanism are left entirely to the
application; the only requirement is that the data buffer and size of
each of the control and rec <a href="../../api_c/dbt_class.html">DBT</a>s passed to the <b>send</b>
function on the sending site be faithfully copied and delivered to the
receiving site by means of a call to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> with
-corresponding arguments. The <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method is free-threaded; it
-is safe to deliver any number of messages simultaneously, and from any
-arbitrary thread or process in the Berkeley DB environment.
+corresponding arguments. Messages that are broadcast (whether by
+broadcast media or when directed by setting the <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method's
+envid parameter DB_EID_BROADCAST), should not be processed by the
+message sender. In all cases, the application's transport media or
+software must ensure that <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> is never called with a
+message intended for a different database environment or a broadcast
+message sent from the same environment on which <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> will
+be called. The <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method is free-threaded; it is safe to
+deliver any number of messages simultaneously, and from any arbitrary
+thread or process in the Berkeley DB environment.</p>
<p>There are a number of informational returns from the
-<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method:
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method:</p>
<p><dl compact>
<p><dt><a href="../../api_c/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a>, it means that
another database environment in the replication group also believes
@@ -54,6 +61,12 @@ calling the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method
<p><dt><a href="../../api_c/rep_message.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a>, it means
that another database environment in the replication group has called
for an election. The application should call the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method.
+<p><dt><a href="../../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a>, it means a
+permanent record, perhaps a message previously returned as
+<a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a> was successfully
+written to disk. This record may have filled a gap in the log record that
+allowed additional records to be written. The <b>ret_lsnp</b>
+contains the maximum LSN of the permanent records written.
<p><dt><a href="../../api_c/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a>, it means that
a new master has been elected. The call will also return the local
environment's ID for that master. If the ID of the master has changed,
@@ -66,14 +79,22 @@ replication master.
a message from a previously unknown member of the replication group has
been received. The application should reconfigure itself as necessary
so it is able to send messages to this site.
+<p><dt><a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a>, it means a
+message marked as <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> was processed successfully
+but was not written to disk. This is normally an indication that one
+or more messages, which should have arrived before this message, have
+not yet arrived. This operation will be written to disk when the
+missing messages arrive. The <b>ret_lsnp</b> argument will contain
+the LSN of this record. The application should take whatever action
+is deemed necessary to retain its recoverability characteristics.
<p><dt><a href="../../api_c/rep_message.html#DB_REP_OUTDATED">DB_REP_OUTDATED</a><dd>When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_OUTDATED">DB_REP_OUTDATED</a>, it means that
the environment has been partitioned from the master for too long a
time, and the master no longer has the necessary log files to update
the local client. The application should shut down, and the client
should be reinitialized (see <a href="../../ref/rep/init.html">Initializing a new site</a> for more information).
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/newsite.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/newsite.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/elect.html b/db/docs/ref/rep/elect.html
index f4b39fdd9..c7b690afc 100644
--- a/db/docs/ref/rep/elect.html
+++ b/db/docs/ref/rep/elect.html
@@ -1,38 +1,53 @@
-<!--Id: elect.so,v 1.7 2002/09/11 19:25:03 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: elect.so,v 1.16 2003/06/18 01:44:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Elections</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/init.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/logonly.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/init.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/logonly.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Elections</h1>
-<p>Berkeley DB never initiates elections, that is the responsibility of the
-application. It is not dangerous to hold an election, as the Berkeley DB
-election process ensures there is never more than a single master
-environment. Clients should initiate an election whenever they lose
-contact with the master environment, whenever they see a return of
+<h3 align=center>Elections</h3>
+<p>It is the responsibility of the application to initiate elections. It
+is never dangerous to hold an election, as the Berkeley DB election process
+ensures there is never more than a single master database environment.
+Clients should initiate an election whenever they lose contact with the
+master environment, whenever they see a return of
<a href="../../api_c/rep_message.html#DB_REP_HOLDELECTION">DB_REP_HOLDELECTION</a> from the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method, or when, for
whatever reason, they do not know who the master is. It is not
necessary for applications to immediately hold elections when they
-start, as any existing master will be quickly discovered after calling
+start, as any existing master will be discovered after calling
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>. If no master has been found after a short wait
-period, then the application should call for an election.
-<p>For a client to become the master, the client must win an election. To
-win an election, the replication group must currently have no master,
-the client must have the highest priority of the database environments
-participating in the election, and at least (N / 2 + 1) of the members
-of the replication group must participate in the election. In the case
-of multiple database environments with equal priorities, the environment
-with the most recent log records will win.
+period, then the application should call for an election.</p>
+<p>For a client to win an election, the replication group must currently
+have no master, and the client must have the most recent log records.
+In the case of clients having equivalent log records, the priority of
+the database environments participating in the election will determine
+the winner. At least ((N/2) + 1) of the members of the replication
+group must participate in the election for a winner to be declared.</p>
+<p>If an application's policy for what site should win an election can be
+parameterized in terms the database environment's information (that is,
+the number of sites, available log records and a relative priority are
+all that matter), then Berkeley DB can handle all elections transparently.
+However, there are cases where the application has more complete
+knowledge and needs to affect the outcome of elections. For example,
+applications may choose to handle master selection, explicitly
+designating master and client sites. Applications in these cases may
+never need to call for an election. Alternatively, applications may
+choose to use <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>'s arguments to force the correct outcome
+to an election. That is, if an application has three sites, A, B, and
+C, and after a failure of C determines that A must become the winner,
+the application can guarantee an election's outcome by specifying
+priorities appropriately after an election:</p>
+<blockquote><pre>on A: priority 100, nsites 2
+on B: priority 0, nsites 2</pre></blockquote>
<p>It is dangerous to configure more than one master environment using the
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method, and applications should be careful not to do so.
Applications should only configure themselves as the master environment
@@ -41,19 +56,20 @@ An application can only know it has won an election if the
<a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method returns success and the local database environment's
ID as the new master environment ID, or if the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method
returns <a href="../../api_c/rep_message.html#DB_REP_NEWMASTER">DB_REP_NEWMASTER</a> and the local database environment's
-ID as the new master environment ID.
+ID as the new master environment ID.</p>
<p>To add a database environment to the replication group with the intent
of it becoming the master, first add it as a client. Since it may be
out-of-date with respect to the current master, allow it to update
itself from the current master. Then, shut the current master down.
Presumably, the added client will win the subsequent election. If the
client does not win the election, it is likely that it was not given
-sufficient time to update itself with respect to the current master.
+sufficient time to update itself with respect to the current master.</p>
<p>If a client is unable to find a master or win an election, it means that
the network has been partitioned and there are not enough environments
-participating in the election for one of the participants to win. In
-this case, the application should repeatedly call <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> and
-<a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>, alternating between attempting to discover an
+participating in the election for one of the participants to win (or,
+there were only two sites in the replication group and one crashed).
+In this case, the application should repeatedly call <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>
+and <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>, alternating between attempting to discover an
existing master, and holding an election to declare a new one. In
desperate circumstances, an application could simply declare itself the
master by calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>, or by reducing the number of
@@ -62,7 +78,9 @@ Neither of these solutions is recommended: in the case of a network
partition, either of these choices can result in there being two masters
in one replication group, and the databases in the environment might
irretrievably diverge as they are modified in different ways by the
-masters.
+masters. In the case of a two-system replication group, the application
+may want to require access to a remote network site, or some other
+external tie-breaker to allow a system to declare itself master.</p>
<p>It is possible for a less-preferred database environment to win an
election if a number of systems crash at the same time. Because an
election winner is declared as soon as enough environments participate
@@ -73,25 +91,23 @@ the same time (for example, a set of replicated servers in a single
machine room), applications should bring the database environments on
line as clients initially (which will allow them to process read queries
immediately), and then hold an election after sufficient time has passed
-for the slower booting machines to catch up.
+for the slower booting machines to catch up.</p>
<p>If, for any reason, a less-preferred database environment becomes the
-master, it is possible to switch masters in a replicated environment,
-although it is not a simple operation. For example, the preferred
-master crashes, and one of the replication group clients becomes the
-group master. In order to restore the preferred master to master
-status, take the following steps:
-<p><ol>
+master, it is possible to switch masters in a replicated environment.
+For example, the preferred master crashes, and one of the replication
+group clients becomes the group master. In order to restore the
+preferred master to master status, take the following steps:</p>
+<ol>
<p><li>The preferred master should reboot and re-join the replication group
as a client.
<li>Once the preferred master has caught up with the replication group, the
-application on the current master should complete all active
-transactions, close all open database handles, and reconfigure itself
-as a client using the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method.
+application on the current master should complete all active transactions
+and reconfigure itself as a client using the <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method.
<li>Then, the current or preferred master should call for an election using
the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method.
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/init.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/logonly.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/init.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/logonly.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/ex.html b/db/docs/ref/rep/ex.html
index b9f89921c..d502e1242 100644
--- a/db/docs/ref/rep/ex.html
+++ b/db/docs/ref/rep/ex.html
@@ -1,35 +1,35 @@
-<!--Id: ex.so,v 1.4 2002/06/24 14:50:47 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: ex.so,v 1.5 2003/02/06 03:19:11 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Ex_repquote: a replication example</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex_comm.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex_comm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Ex_repquote: a replication example</h1>
+<h3 align=center>Ex_repquote: a replication example</h3>
<p>Ex_repquote, found in the <b>examples_c/ex_repquote</b> subdirectory
of the Berkeley DB distribution, is a simple but complete demonstration of a
replicated application. The application is a mock stock ticker. The
master accepts a stock symbol and an integer value as input, stores this
information into a replicated database; the clients display the contents
-of the database every few seconds.
+of the database every few seconds.</p>
<p>The ex_repquote application's communication infrastructure is based on
TCP/IP sockets, and uses POSIX 1003.1 style networking/socket support.
As a result, it is not as portable as the Berkeley DB library itself. The
Makefile created by the standard UNIX configuration will build the
ex_repquote application on most platforms. Enter "make ex_repquote" to
-attempt to build it.
-<p>The synopsis for ex_repquote is as follows:
+attempt to build it.</p>
+<p>The synopsis for ex_repquote is as follows:</p>
<pre>ex_repquote [<b>-MC</b>] [<b>-h home</b>] [<b>-m host:port</b>] [<b>-o host:port</b>] [<b>-n sites</b>] [<b>-p priority</b>]</pre>
-<p>The options to ex_repquote are as follows:
+<p>The options to ex_repquote are as follows:</p>
<p><dl compact>
<p><dt><b>-M</b><dd>Configure this process as a master.
<p><dt><b>-C</b><dd>Configure this process as a client.
@@ -46,20 +46,20 @@ group.
information.
</dl>
<p>A typical ex_repquote session begins with a command such as the
-following, to start a master:
-<p><blockquote><pre>ex_repquote -M -p 100 -n 4 -h DIR1 -m localhost:5000</pre></blockquote>
-<p>and several clients:
-<p><blockquote><pre>ex_repquote -C -p 50 -n 4 -h DIR2 -m localhost:5001 -o localhost:5000
-ex_repquote -C -p 10 -n 4 -h DIR3 -m localhost:5002 -o localhost:5000
-ex_repquote -C -p 0 -n 4 -h DIR4 -m localhost:5003 -o localhost:5000</pre></blockquote>
+following, to start a master:</p>
+<blockquote><pre>ex_repquote -M -p 100 -n 4 -h DIR1 -m localhost:6000</pre></blockquote>
+<p>and several clients:</p>
+<blockquote><pre>ex_repquote -C -p 50 -n 4 -h DIR2 -m localhost:6001 -o localhost:6000
+ex_repquote -C -p 10 -n 4 -h DIR3 -m localhost:6002 -o localhost:6000
+ex_repquote -C -p 0 -n 4 -h DIR4 -m localhost:6003 -o localhost:6000</pre></blockquote>
<p>In this example, the client with home directory DIR4 can never become
a master (its priority is 0). Both of the other clients can become
masters, but the one with home directory DIR2 is preferred. Priorities
are assigned by the application and should reflect the desirability of
having particular clients take over as master in the case that the
-master fails.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex_comm.html"><img src="../../images/next.gif" alt="Next"></a>
+master fails.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex_comm.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/ex_comm.html b/db/docs/ref/rep/ex_comm.html
index e0a56003d..7214a11c2 100644
--- a/db/docs/ref/rep/ex_comm.html
+++ b/db/docs/ref/rep/ex_comm.html
@@ -1,20 +1,20 @@
-<!--Id: ex_comm.so,v 1.6 2002/06/24 14:50:48 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: ex_comm.so,v 1.6 2002/06/24 14:50:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Ex_repquote: a TCP/IP based communication infrastructure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/ex.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex_rq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/ex.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex_rq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Ex_repquote: a TCP/IP based communication infrastructure</h1>
+<h3 align=center>Ex_repquote: a TCP/IP based communication infrastructure</h3>
<p>All Berkeley DB replication applications must implement a communication
infrastructure. The communication infrastructure consists of three
parts: a way to map environment IDs to particular sites, the functions
@@ -23,7 +23,7 @@ supports the particular communication infrastructure used (for example,
individual threads per communicating site, a shared message handler for
all sites, a hybrid solution). The communication infrastructure is
implemented in the file <b>ex_repquote/ex_rq_net.c</b>, and each part
-of that infrastructure is described as follows.
+of that infrastructure is described as follows.</p>
<p>Ex_repquote maintains a table of environment ID to TCP/IP port mappings.
This table is stored in the app_private field of the <a href="../../api_c/env_class.html">DB_ENV</a>
object so it can be accessed by any function that has the database
@@ -31,8 +31,8 @@ environment handle. The table is represented by a machtab_t structure
which contains a reference to a linked list of member_t's, both of which
are defined in <b>ex_repquote/ex_rq_net.c</b>. Each member_t contains
the host and port identification, the environment ID, and a file
-descriptor. The table is maintained by the following interfaces:
-<p><blockquote><pre>int machtab_add(machtab_t *machtab, int fd, u_int32_t hostaddr, int port, int *eidp);
+descriptor. The table is maintained by the following interfaces:</p>
+<blockquote><pre>int machtab_add(machtab_t *machtab, int fd, u_int32_t hostaddr, int port, int *eidp);
int machtab_init(machtab_t **machtabp, int priority, int nsites);
int machtab_getinfo(machtab_t *machtab, int eid, u_int32_t *hostp, int *portp);
void machtab_parm(machtab_t *machtab, int *nump, int *priorityp, u_int32_t *timeoutp);
@@ -48,26 +48,27 @@ when given the special environment ID <a href="../../api_c/rep_transport.html#DB
function can send messages to all the machines in the group. Third,
upon receipt of an incoming message, the receive function can correctly
identify the sender and pass the appropriate environment ID to the
-<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method.
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method.</p>
<p>Mapping a particular environment ID to a specific port is accomplished
by looping through the linked list until the desired environment ID is
found. Broadcast communication is implemented by looping through the
linked list and sending to each member found. Since each port
communicates with only a single other environment, receipt of a message
-on a particular port precisely identifies the sender.
+on a particular port precisely identifies the sender.</p>
<p>The example provided is merely one way to satisfy these requirements,
and there are alternative implementations as well. For instance,
instead of associating separate socket connections with each remote
environment, an application might instead label each message with a
sender identifier; instead of looping through a table and sending a
copy of a message to each member of the replication group, the
-application could send a single message using a broadcast protocol.
+application could send a single message using a broadcast protocol.</p>
<p>In ex_repquote's case, the send function (slightly simplified) is as
-follows:
-<pre><p><blockquote>int
-quote_send(dbenv, control, rec, eid, flags)
+follows:</p>
+<pre><blockquote>int
+quote_send(dbenv, control, rec, lsn, eid, flags)
DB_ENV *dbenv;
const DBT *control, *rec;
+ const DB_LSN *lsn;
int eid;
u_int32_t flags;
{
@@ -139,7 +140,7 @@ quote_send_broadcast(machtab, rec, control, flags)
<p>The quote_send_one function has been omitted as it simply writes the
data requested over the file descriptor that it is passed. It contains
nothing specific to Berkeley DB or this communication infrastructure. The
-complete code can be found in <b>ex_repquote/ex_rq_net.c</b>.
+complete code can be found in <b>ex_repquote/ex_rq_net.c</b>.</p>
<p>The quote_send function is passed as the callback to <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a>;
Berkeley DB automatically sends messages as needed for replication. The
receive function is a mirror to the quote_send_one function. It is not
@@ -149,7 +150,7 @@ the sample application, all messages transmitted are Berkeley DB messages that
get handled by <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>, however, this is not always going
to be the case. The application may want to pass its own messages
across the same channels, distinguish between its own messages and those
-of Berkeley DB, and then pass only the Berkeley DB ones to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.
+of Berkeley DB, and then pass only the Berkeley DB ones to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a>.</p>
<p>The final component of the communication infrastructure is the process
model used to communicate with all the sites in the replication group.
Each site creates a thread of control that listens on its designated
@@ -158,8 +159,8 @@ then creates a new channel for each site that contacts it. In addition,
each site explicitly connects to the sites specified in the
<b>-o</b> command line argument. This is a fairly standard TCP/IP
process architecture and is implemented by the following functions (all
-in <b>ex_repquote/ex_rq_net.c</b>).
-<p><blockquote><pre>int get_connected_socket(machtab_t *machtab, char *progname, char *remotehost,
+in <b>ex_repquote/ex_rq_net.c</b>).</p>
+<blockquote><pre>int get_connected_socket(machtab_t *machtab, char *progname, char *remotehost,
int port, int *is_open, int *eidp): Connect to the specified host/port, add the
site to the machtab, and return a file descriptor for communication with this
site.
@@ -170,8 +171,8 @@ listening on a particular part.
int listen_socket_accept(machtab_t *machtab, char *progname, int socket,
int *eidp): Accept a connection on a socket and add it to the machtab.
int listen_socket_connect</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/ex.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex_rq.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/ex.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex_rq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/ex_rq.html b/db/docs/ref/rep/ex_rq.html
index 6d83e98aa..60fb51444 100644
--- a/db/docs/ref/rep/ex_rq.html
+++ b/db/docs/ref/rep/ex_rq.html
@@ -1,31 +1,31 @@
-<!--Id: ex_rq.so,v 1.4 2002/06/24 14:50:48 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: ex_rq.so,v 1.4 2002/06/24 14:50:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Ex_repquote: putting it all together</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/ex_comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/ex_comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Ex_repquote: putting it all together</h1>
+<h3 align=center>Ex_repquote: putting it all together</h3>
<p>A replicated application must initialize a replicated environment, set
up its communication infrastructure, and then make sure that incoming
-messages are received and processed.
+messages are received and processed.</p>
<p>To initialize replication, ex_repquote creates a Berkeley DB environment and
calls <a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> to establish a send function. The following
code fragment (from the env_init function, found in
<b>ex_repquote/ex_rq_main.c</b>) demonstrates this. Prior to calling
this function, the application has called machtab_init to initialize
its environment ID to port mapping structure and passed this structure
-into env_init.
-<pre><p><blockquote>if ((ret = db_env_create(&dbenv, 0)) != 0) {
+into env_init.</p>
+<pre><blockquote>if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr, "%s: env create failed: %s\n",
progname, db_strerror(ret));
return (ret);
@@ -49,12 +49,12 @@ ex_repquote creates a user-level thread to listen on its socket, plus
a thread to loop and handle messages on each socket, in addition to the
threads needed to manage the user interface, update the database on the
master, and read from the database on the client (in other words, in
-addition to the normal functionality of any database application).
+addition to the normal functionality of any database application).</p>
<p>Once the initial threads have all been started and the communications
infrastructure is initialized, the application signals that it is ready
for replication and joins a replication group by calling
-<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>:
-<pre><p><blockquote>if (whoami == MASTER) {
+<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>:</p>
+<pre><blockquote>if (whoami == MASTER) {
if ((ret = dbenv-&gt;rep_start(dbenv, NULL, DB_REP_MASTER)) != 0) {
/* Complain and exit on error. */
}
@@ -79,7 +79,7 @@ without knowing the location of all its members; the new client will
be contacted by the members it does not know about, who will receive
the new client's contact information that was specified in "myaddr."
See <a href="../../ref/rep/newsite.html">Connecting to a new site</a> for more
-information.
+information.</p>
<p>The final piece of a replicated application is the code that loops,
receives, and processes messages from a given remote environment.
ex_repquote runs one of these loops in a parallel thread for each socket
@@ -89,8 +89,8 @@ either look up the correct environment ID for each or encapsulate the
ID in the communications protocol. The details may thus vary from
application to application, but in ex_repquote the message-handling loop
is as follows (code fragment from the hm_loop function, found in
-<b>ex_repquote/ex_rq_util.c</b>):
-<pre><p><blockquote>DB_ENV *dbenv;
+<b>ex_repquote/ex_rq_util.c</b>):</p>
+<pre><blockquote>DB_ENV *dbenv;
DBT rec, control; /* Structures encapsulating a received message. */
elect_args *ea; /* Parameters to the elect thread. */
machtab_t *tab; /* The environment ID to fd mapping table. */
@@ -160,7 +160,7 @@ for (ret = 0; ret == 0;) {
<p>
tmpid = eid;
switch(r = dbenv-&gt;rep_process_message(dbenv,
- &control, &rec, &tmpid)) {
+ &control, &rec, &tmpid, NULL)) {
case DB_REP_NEWSITE:
/*
* Check if we got sent connect information and if we
@@ -229,8 +229,8 @@ for (ret = 0; ret == 0;) {
break;
}
}</blockquote></pre>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/ex_comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/ex_comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/faq.html b/db/docs/ref/rep/faq.html
index bd0e421a3..f825f3233 100644
--- a/db/docs/ref/rep/faq.html
+++ b/db/docs/ref/rep/faq.html
@@ -1,21 +1,21 @@
-<!--Id: faq.so,v 1.6 2002/05/09 20:38:15 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.8 2003/05/17 19:07:59 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Replication FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/partition.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/partition.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Replication FAQ</h1>
-<p><ol>
+<h3 align=center>Replication FAQ</h3>
+<ol>
<p><li><b>Does Berkeley DB provide support for forwarding write queries from
clients to masters?</b>
<p>No, it does not. The Berkeley DB RPC server code could be modified to support
@@ -23,11 +23,16 @@ this functionality, but in general this protocol is left entirely to
the application. Note, there is no reason not to use the communications
channels the application establishes for replication support to forward
database update messages to the master, Berkeley DB does not require that
-those channels be used exclusively for replication messages.
+those channels be used exclusively for replication messages.</p>
<p><li><b>Can I use replication to partition my environment across
multiple sites?</b>
<p>No, this is not possible. All replicated databases must be equally
-shared by all environments in the replication group.
+shared by all environments in the replication group.</p>
+<p><li><b>I'm running with replication but I don't see my databases
+on the client.</b>
+<p>This problem may be the result of the application using absolute path
+names for its databases, and the pathnames are not valid on the client
+system.</p>
<p><li><b>How can I distinguish Berkeley DB messages from application messages?</b>
<p>There is no way to distinguish Berkeley DB messages from application-specific
messages, nor does Berkeley DB offer any way to wrap application messages
@@ -38,7 +43,7 @@ The one exception to this rule is connection information for new sites;
Berkeley DB offers a simple method for sites joining replication groups to
send connection information to the other database environments in the
group (see <a href="../../ref/rep/newsite.html">Connecting to a new site</a>
-for more information).
+for more information).</p>
<p><li><b>How should I build my <b>send</b> function?</b>
<p>This depends on the specifics of the application. One common way is to
write the <b>rec</b> and <b>control</b> arguments' sizes and data to
@@ -49,7 +54,7 @@ message, with header information specifying the intended recipient(s)
for the message. This will likely require a global numbering scheme,
however, as the Berkeley DB library has to be able to send specific log
records to clients apart from the general broadcast of new log records
-intended for all members of a replication group.
+intended for all members of a replication group.</p>
<p><li><b>Does every one of my threads of control on the master have to
set up its own connection to every client? And, does every one of my
threads of control on the client have to set up its own connection to
@@ -59,7 +64,7 @@ thread of control which modifies a database in the master environment
must be prepared to send a message to the client environments, and any
thread of control which delivers a message to a client environment must
be prepared to send a message to the master. There are many ways in
-which these requirements can be satisfied.
+which these requirements can be satisfied.</p>
<p>The simplest case is probably a single, multithreaded process running
on the master and clients. The process running on the master would
require a single write connection to each client and a single read
@@ -67,7 +72,7 @@ connection from each client. A process running on each client would
require a single read connection from the master and a single write
connection to the master. Threads running in these processes on the
master and clients would use the same network connections to pass
-messages back and forth.
+messages back and forth.</p>
<p>A common complication is when there are multiple processes running on
the master and clients. A straight-forward solution is to increase the
numbers of connections on the master -- each process running on the
@@ -81,7 +86,7 @@ still only requires a single thread of control that receives master
messages and forwards them into the database, and which also takes
database messages and forwards them back to the master. This model
requires the networking infrastructure support many-to-one
-writers-to-readers, of course.
+writers-to-readers, of course.</p>
<p>If the number of network connections is a problem in the multiprocess
model, and inter-process communication on the system is inexpensive
enough, an alternative is have a single process which communicates
@@ -90,16 +95,16 @@ between the master the each client, and whenever a process'
communications process which is responsible for forwarding the message
to the appropriate client. Alternatively, a broadcast mechanism will
simplify the entire networking infrastructure, as processes will likely
-no longer have to maintain their own specific network connections.
+no longer have to maintain their own specific network connections.</p>
<p><li><b>Can I use replication to replicate just the database
environment's log files?</b>
<p>Yes. If the <a href="../../api_c/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a> flag is specified to
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>, the client site acts as a repository for logfiles
(see <a href="../../ref/rep/logonly.html">Log file only clients</a> for more
-information).
+information).</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/partition.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/ex.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/partition.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/ex.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/id.html b/db/docs/ref/rep/id.html
index c728f5a00..091e6aea6 100644
--- a/db/docs/ref/rep/id.html
+++ b/db/docs/ref/rep/id.html
@@ -1,20 +1,20 @@
-<!--Id: id.so,v 1.6 2002/05/09 20:38:15 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: id.so,v 1.7 2003/10/18 19:16:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Replication environment IDs</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/pri.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/pri.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Replication environment IDs</h1>
+<h3 align=center>Replication environment IDs</h3>
<p>Each database environment included in a replication group must have a
unique identifier for itself and for the other members of the
replication group. The identifiers do not need to be global, that is,
@@ -23,14 +23,14 @@ the replication group as it encounters them. For example, given three
sites: A, B and C, site A might assign the identifiers 1 and 2 to sites
B and C respectively, while site B might assign the identifiers 301 and
302 to sites A and C respectively. Note that it is not wrong to have
-global identifiers, it is just not a requirement.
+global identifiers, it is just not a requirement.</p>
<p>It is the responsibility of the application to label each incoming
replication message passed to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method with the appropriate
identifier. Subsequently, Berkeley DB will label outgoing messages to the
-<b>send</b> interface with those same identifiers.
+<b>send</b> function with those same identifiers.</p>
<p>Negative identifiers are reserved for use by Berkeley DB, and should never be
assigned to environments by the application. Two of these reserved
-identifiers are intended for application use, as follows:
+identifiers are intended for application use, as follows:</p>
<p><dl compact>
<p><dt><a href="../../api_c/rep_transport.html#DB_EID_BROADCAST">DB_EID_BROADCAST</a><dd>The <a href="../../api_c/rep_transport.html#DB_EID_BROADCAST">DB_EID_BROADCAST</a> identifier indicates a message should be
broadcast to all members of a replication group.
@@ -38,8 +38,8 @@ broadcast to all members of a replication group.
may be used to initialize environment ID variables that are subsequently
checked for validity.
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/pri.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/pri.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/init.html b/db/docs/ref/rep/init.html
index 0155e8fbc..b093a2b84 100644
--- a/db/docs/ref/rep/init.html
+++ b/db/docs/ref/rep/init.html
@@ -1,23 +1,23 @@
-<!--Id: init.so,v 1.2 2001/11/05 17:24:27 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: init.so,v 1.2 2001/11/05 17:24:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Initializing a new site</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/newsite.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/elect.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/newsite.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/elect.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Initializing a new site</h1>
+<h3 align=center>Initializing a new site</h3>
<p>Perform the following steps to add a new site to the replication
-group:
-<p><ol>
+group:</p>
+<ol>
<p><li>Do an archival backup of the master's environment, as described in
<a href="../../ref/transapp/archival.html">Database and log file
archival</a>. The backup can either be a conventional backup or a hot
@@ -34,14 +34,14 @@ frequency with which log files are reclaimed using the
<a href="../../utility/db_archive.html">db_archive</a> utility or the <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a> method, it may be
necessary to suppress log reclamation until the newly restarted client
has "caught up" and applied all log records generated during its
-downtime.
+downtime.</p>
<p>As with any Berkeley DB application, the database environment must be in a
consistent state at application startup. This is most easily assured
by running recovery at startup time in one thread or process; it is
harmless to do this on both clients and masters even when not strictly
-necessary.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/newsite.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/elect.html"><img src="../../images/next.gif" alt="Next"></a>
+necessary.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/newsite.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/elect.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/intro.html b/db/docs/ref/rep/intro.html
index 538c68e2f..65f25d410 100644
--- a/db/docs/ref/rep/intro.html
+++ b/db/docs/ref/rep/intro.html
@@ -1,21 +1,21 @@
-<!--Id: intro.so,v 1.6 2002/08/30 20:02:24 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.8 2003/04/16 20:28:05 margo Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/transapp/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/id.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/id.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
+<h3 align=center>Introduction</h3>
<p>Berkeley DB includes support for building highly available applications based
on replication. Berkeley DB replication groups consist of some number of
independently configured database environments. There is a single
@@ -25,22 +25,25 @@ and writes; client environments support only database reads. If the
master environment fails, applications may upgrade a client to be the
new master. The database environments might be on separate computers,
on separate hardware partitions in a non-uniform memory access (NUMA)
-system, or on separate disks in a single server. As always with Berkeley DB
+system, or on separate disks in a single server. The only constraint
+is that all the participants in a replication group all be on machines
+of the same endianness. (We expect this constraint to be removed
+in a future release.) As always with Berkeley DB
environments, any number of concurrent processes or threads may access
a database environment. In the case of a master environment, any number
of threads of control may read and write the environment, and in the
case of a client environment, any number of threads of control may read
-the environment.
+the environment.</p>
<p>Applications may be written to provide various degrees of consistency
between the master and clients. The system can be run synchronously
such that replicas are guaranteed to be up-to-date with all committed
transactions, but doing so may incur a significant performance penalty.
Higher performance solutions sacrifice total consistency, allowing the
-clients to be out of date for an application-controlled amount of time.
+clients to be out of date for an application-controlled amount of time.</p>
<p>While Berkeley DB includes the database infrastructure necessary to construct
highly available database environments, applications must still provide
-some critical components:
-<p><ol>
+some critical components:</p>
+<ol>
<p><li>The application is responsible for providing the communication
infrastructure. Applications may use whatever wire protocol is
appropriate for their application (for example, RPC, TCP/IP, UDP, VI or
@@ -56,8 +59,14 @@ For example, the application may choose to encrypt data, use a secure
socket layer, or do nothing at all. The level of security is left to
the sole discretion of the application.
</ol>
-<!--Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp -->
-<p><table border=1 align=center>
+<p>Finally, the Berkeley DB replication implementation has one other additional
+feature to increase application reliability. Replication in Berkeley DB is
+implemented to perform database updates using a different code path than
+the standard ones. This means operations that manage to crash the
+replication master due to a software bug will not necessarily also crash
+replication clients.</p>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:36 bostic Exp $-->
+<table border=1 align=center>
<tr><th>Replication and Related Methods</th><th>Description</th></tr>
<tr><td><a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a></td><td>Configure replication transport</td></tr>
<tr><td><a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a></td><td>Hold a replication election</td></tr>
@@ -66,8 +75,8 @@ the sole discretion of the application.
<tr><td><a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a></td><td>Configure an environment for replication</td></tr>
<tr><td><a href="../../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a></td><td>Replication statistics</td></tr>
</table>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/id.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/id.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/logonly.html b/db/docs/ref/rep/logonly.html
index 2aca1b8cf..297420b3f 100644
--- a/db/docs/ref/rep/logonly.html
+++ b/db/docs/ref/rep/logonly.html
@@ -1,29 +1,29 @@
-<!--Id: logonly.so,v 1.6 2002/08/08 15:46:02 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: logonly.html,v 1.5 2003/12/15 21:43:57 jbj Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Log file only clients</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/elect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/trans.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/elect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/trans.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Log file only clients</h1>
+<h3 align=center>Log file only clients</h3>
<p>Applications wanting to use replication to support recovery after
catastrophic failure of the master may want to configure a site as a
logs-file-only replica. Such clients cannot respond to read (or write)
-queries but they still receive a complete copy the log files, so that in the
-event of master failure, a copy of the logs is available.
-<p>Log file only clients are configured like other client sites, except
+queries but they still receive a complete copy of the log files, so that in the
+event of master failure, a copy of the logs is available.</p>
+<p>Log-file-only clients are configured like other client sites, except
they should specify the <a href="../../api_c/rep_start.html#DB_REP_LOGSONLY">DB_REP_LOGSONLY</a> flag to the
<a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a> method and should specify a priority of 0 to the
-<a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method.
+<a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method.</p>
<p>There are two ways to recover using a log-file-only replica.
The simplest way is to copy the log files from the log-file-only
replica onto another site (either master or replica) and run catastrophic
@@ -41,18 +41,18 @@ on the log-file-only replica), once the site returns to being a log-file-only
replica, the database files on the log-file-only replica should be removed,
and if the log files do not begin with log file number 1,
a new set of archival databases should be created from
-the current master.
+the current master.</p>
<p>More specifically, the log files accumulating on the log-file-only
replica can take the place of the log files described in
<i>catastrophic recovery</i> section of the
<a href="../../ref/transapp/recovery.html">Recovery procedures</a> Berkeley DB
-Reference Guide.
+Reference Guide.</p>
<p>In all other ways, a log-file-only site behaves as other replication
-clients do. It should have a thread or process receiving messages and
-passing them to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> and must respond to all returns
-described for that interface.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/elect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/trans.html"><img src="../../images/next.gif" alt="Next"></a>
+clients do. It should have at least one thread or process receiving
+messages and passing them to <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> and must respond to all
+returns described for that method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/elect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/trans.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/newsite.html b/db/docs/ref/rep/newsite.html
index 850d8967d..3a2dc0d06 100644
--- a/db/docs/ref/rep/newsite.html
+++ b/db/docs/ref/rep/newsite.html
@@ -1,20 +1,20 @@
-<!--Id: newsite.so,v 1.2 2001/10/25 14:58:49 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: newsite.so,v 1.2 2001/10/25 14:58:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Connecting to a new site</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/init.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/init.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Connecting to a new site</h1>
+<h3 align=center>Connecting to a new site</h3>
<p>Connecting to a new site in the replication group happens whenever the
<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method returns <a href="../../api_c/rep_message.html#DB_REP_NEWSITE">DB_REP_NEWSITE</a>. The application
should assign the new site a local environment ID number, and all future
@@ -23,7 +23,7 @@ environment ID number. It is possible, of course, for the application
to be aware of a new site before the return of <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> (for
example, applications using connection-oriented protocols are likely to
detect new sites immediately, while applications using broadcast
-protocols may not).
+protocols may not).</p>
<p>Regardless, in applications supporting the dynamic addition of database
environments to replication groups, environments joining an existing
replication group may need to provide contact information. (For
@@ -36,9 +36,9 @@ the group using the <b>rec</b> parameter returned by <a href="../../api_c/rep_me
If no additional information was provided for Berkeley DB to forward to the
existing members of the group, the <b>data</b> field of the <b>rec</b>
parameter passed to the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method will be NULL after
-<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_NEWSITE">DB_REP_NEWSITE</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/init.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> returns <a href="../../api_c/rep_message.html#DB_REP_NEWSITE">DB_REP_NEWSITE</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/comm.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/init.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/partition.html b/db/docs/ref/rep/partition.html
index 4e12fe7c9..326f17845 100644
--- a/db/docs/ref/rep/partition.html
+++ b/db/docs/ref/rep/partition.html
@@ -1,22 +1,22 @@
-<!--Id: partition.so,v 1.1 2001/10/25 20:05:34 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: partition.so,v 1.1 2001/10/25 20:05:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Network partitions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/trans.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/trans.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Network partitions</h1>
+<h3 align=center>Network partitions</h3>
<p>The Berkeley DB replication implementation can be affected by network
-partitioning problems.
+partitioning problems.</p>
<p>For example, consider a replication group with N members. The network
partitions with the master on one side and more than N/2 of the sites
on the other side. The sites on the side with the master will continue
@@ -26,7 +26,7 @@ realizing they no longer have a master, will hold an election. The
election will succeed as there are more than N/2 of the total sites
participating, and there will then be two masters for the replication
group. Since both masters are potentially accepting write queries, the
-databases could diverge in incompatible ways.
+databases could diverge in incompatible ways.</p>
<p>If multiple masters are ever found to exist in a replication group, a
master detecting the problem will return <a href="../../api_c/rep_message.html#DB_REP_DUPMASTER">DB_REP_DUPMASTER</a>. If
the application sees this return, it should reconfigure itself as a
@@ -34,7 +34,7 @@ client (by calling <a href="../../api_c/rep_start.html">DB_ENV-&gt;rep_start</a>
(by calling <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a>). The site that wins the election may be
one of the two previous masters, or it may be another site entirely.
Regardless, the winning system will bring all of the other systems into
-conformance.
+conformance.</p>
<p>As another example, consider a replication group with a master
environment and two clients A and B, where client A may upgrade to
master status and client B cannot. Then, assume client A is partitioned
@@ -44,19 +44,19 @@ not come back on-line. Subsequently, the network partition is restored,
and clients A and B hold an election. As client B cannot win the
election, client A will win by default, and in order to get back into
sync with client B, possibly committed transactions on client B will be
-unrolled until the two sites can once again move forward together.
+unrolled until the two sites can once again move forward together.</p>
<p>In both of these examples, there is a phase where a newly elected master
brings the members of a replication group into conformance with itself
so that it can start sending new information to them. This can result
in the loss of information as previously committed transactions are
-unrolled.
+unrolled.</p>
<p>In architectures where network partitions are an issue, applications
may want to implement a heart-beat protocol to minimize the consequences
of a bad network partition. As long as a master is able to contact at
least half of the sites in the replication group, it is impossible for
there to be two masters. If the master can no longer contact a
sufficient number of systems, it should reconfigure itself as a client,
-and hold an election.
+and hold an election.</p>
<p>There is another tool applications can use to minimize the damage in
the case of a network partition. By specifying a <b>nsites</b>
argument to <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> that is larger than the actual number of
@@ -66,7 +66,7 @@ a large percentage of the sites in the system. For example, if there
are 20 database environments in the replication group, and an argument
of 30 is specified to the <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> method, then a system will have
to be able to talk to at least 16 of the sites to declare itself the
-master.
+master.</p>
<p>Specifying a <b>nsites</b> argument to <a href="../../api_c/rep_elect.html">DB_ENV-&gt;rep_elect</a> that is
smaller than the actual number of database environments in the
replication group has its uses as well. For example, consider a
@@ -77,14 +77,14 @@ the master. A reasonable alternative would be to specify a
argument of 1 to the other. That way, one of the systems could win
elections even when partitioned, while the other one could not. This
would allow at one of the systems to continue accepting write queries
-after the partition.
+after the partition.</p>
<p>These scenarios stress the importance of good network infrastructure in
Berkeley DB replicated environments. When replicating database environments
over sufficiently lossy networking, the best solution may well be to
pick a single master, and only hold elections when human intervention
-has determined the selected master is unable to recover at all.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/trans.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+has determined the selected master is unable to recover at all.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/trans.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/pri.html b/db/docs/ref/rep/pri.html
index e3d7a8f9d..0428611c4 100644
--- a/db/docs/ref/rep/pri.html
+++ b/db/docs/ref/rep/pri.html
@@ -1,25 +1,25 @@
-<!--Id: pri.so,v 1.3 2001/11/05 17:24:27 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: pri.so,v 1.6 2003/04/04 18:27:19 sue Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Replication environment priorities</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/id.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/app.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/id.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/app.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Replication environment priorities</h1>
-<p>Each database environment included in a replication group must have a
-priority, which specifies a relative ordering among the different
-environments in a replication group. This ordering determines which
-environment will be selected as a new master in case the existing master
-fails.
+<h3 align=center>Replication environment priorities</h3>
+<p>Each database environment included in a replication group must have
+a priority, which specifies a relative ordering among the different
+environments in a replication group. This ordering is a factor in
+determining which environment will be selected as a new master in
+case the existing master fails.</p>
<p>Priorities must be a non-negative integer, but do not need to be unique
throughout the replication group. A priority of 0 means the system can
never become a master, regardless. Otherwise, larger valued priorities
@@ -27,9 +27,13 @@ indicate a more desirable master. For example, if a replication group
consists of three database environments, two of which are connected by
an OC3 and the third of which is connected by a T1, the third database
environment should be assigned a priority value which is lower than
-either of the other two.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/id.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/app.html"><img src="../../images/next.gif" alt="Next"></a>
+either of the other two.</p>
+<p>Desirability of the master is first determined by the client having
+the most recent log records. Ties in log records are broken with
+the client priority. If both sites have the same number of log
+records and the same priority, one is selected at random.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/id.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/app.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rep/trans.html b/db/docs/ref/rep/trans.html
index 4f9021ad9..f72f3648c 100644
--- a/db/docs/ref/rep/trans.html
+++ b/db/docs/ref/rep/trans.html
@@ -1,20 +1,20 @@
-<!--Id: trans.so,v 1.6 2002/05/11 18:00:23 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: trans.so,v 1.14 2003/10/18 19:16:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transactional guarantees</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Replication</dl></h3></td>
-<td align=right><a href="../../ref/rep/logonly.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/partition.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rep/logonly.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/partition.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transactional guarantees</h1>
+<h3 align=center>Transactional guarantees</h3>
<p>It is important to consider replication in the context of the overall
database environment's transactional guarantees. To briefly review,
transactional guarantees in a non-replicated application are based on
@@ -23,82 +23,218 @@ drive. If the application or system then fails, the Berkeley DB logging
information is reviewed during recovery, and the databases are updated
so that all changes made as part of committed transactions appear, and
all changes made as part of uncommitted transactions do not appear. In
-this case, no information will have been lost.
-<p>If a database environment does not require that the log be flushed to
+this case, no information will have been lost.</p>
+<p>If a database environment does not require the log be flushed to
stable storage on transaction commit (using the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>
flag to increase performance at the cost of sacrificing transactional
durability), Berkeley DB recovery will only be able to restore the system to
the state of the last commit found on stable storage. In this case,
information may have been lost (for example, the changes made by some
-committed transactions may not appear in the databases after recovery).
+committed transactions may not appear in the databases after recovery).</p>
<p>Further, if there is database or log file loss or corruption (for
example, if a disk drive fails), then catastrophic recovery is
necessary, and Berkeley DB recovery will only be able to restore the system
to the state of the last archived log file. In this case, information
-may also have been lost.
+may also have been lost.</p>
<p>Replicating the database environment extends this model, by adding a
new component to "stable storage": the client's replicated information.
If a database environment is replicated, there is no lost information
in the case of database or log file loss, because the replicated system
can be configured to contain a complete set of databases and log records
up to the point of failure. A database environment that loses a disk
-drive can have the drive replaced, and it can rejoin the replication
-group as a client.
+drive can have the drive replaced, and it can then rejoin the
+replication group.</p>
<p>Because of this new component of stable storage, specifying
<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> in a replicated environment no longer sacrifices
durability, as long as one or more clients have acknowledged receipt of
the messages sent by the master. Since network connections are often
-faster than local disk writes, replication becomes a way for
-applications to significantly improve their performance as well as their
-reliability.
-<p>The return status from the <b>send</b> interface specified to the
-<a href="../../api_c/rep_transport.html">DB_ENV-&gt;set_rep_transport</a> method must be set by the application to ensure the
-transactional guarantees the application wants to provide. The effect
-of the <b>send</b> interface returning failure is to flush the local
-database environment's log as necessary to ensure that any information
-critical to database integrity is not lost. Because this flush is an
-expensive operation in terms of database performance, applications will
-want to avoid returning an error from the <b>send</b> interface, if at
-all possible:
-<p>First, there is no reason for the <b>send</b> interface to ever return
-failure unless the <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag is specified. Messages
-without that flag do not make visible changes to databases, and
-therefore the application's <b>send</b> interface can return success
-to Berkeley DB for such messages as soon as the message has been sent or even
-just copied to local memory.
-<p>Further, unless the master's database environment has been configured
-to not synchronously flush the log on transaction commit, there is no
-reason for the <b>send</b> interface to ever return failure, as any
-information critical to database integrity has already been flushed to
-the local log before <b>send</b> was called. Again, the <b>send</b>
-interface should return success to Berkeley DB as soon as possible. However,
-in this case, in order to avoid potential loss of information after the
-master database environment fails, the master database environment
-should be recovered before holding an election, as only the master
-database environment is guaranteed to have the most up-to-date logs.
-<p>To sum up, the only reason for the <b>send</b> interface to return
+faster than local synchronous disk writes, replication becomes a way
+for applications to significantly improve their performance as well as
+their reliability.</p>
+<p>The return status from the application's <b>send</b> function must be
+set by the application to ensure the transactional guarantees the
+application wants to provide. Whenever the <b>send</b> function
+returns failure, the local database environment's log is flushed as
+necessary to ensure that any information critical to database integrity
+is not lost. Because this flush is an expensive operation in terms of
+database performance, applications should avoid returning an error from
+the <b>send</b> function, if at all possible.</p>
+<p>The only interesting message type for replication transactional
+guarantees is when the application's <b>send</b> function was called
+with the <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag specified. There is no reason
+for the <b>send</b> function to ever return failure unless the
+<a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag was specified -- messages without the
+<a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag do not make visible changes to databases,
+and the <b>send</b> function can return success to Berkeley DB as soon as
+the message has been sent to the client(s) or even just copied to local
+application memory in preparation for being sent.</p>
+<p>When a client receives a <a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> message, the client
+will flush its log to stable storage before returning (unless the client
+environment has been configured with the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> option).
+If the client is unable to flush a complete transactional record to disk
+for any reason (for example, there is a missing log record before the
+flagged message), the call to the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method on the client
+will return <a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a> and return the LSN of this record
+to the application in the <b>ret_lsnp</b> parameter.
+The application's client or master
+message handling loops should take proper action to ensure the correct
+transactional guarantees in this case. When missing records arrive
+and allow subsequent processing of previously stored permanent
+records, the call to the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method on the client will
+return <a href="../../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a> and return the largest LSN of the
+permanent records that were flushed to disk. Client applications
+can use these LSNs to know definitively if any particular LSN is
+permanently stored or not.</p>
+<p>An application relying on a client's ability to become a master and
+guarantee that no data has been lost will need to write the <b>send</b>
+function to return an error whenever it cannot guarantee the site that
+will win the next election has the record. Applications not requiring
+this level of transactional guarantees need not have the <b>send</b>
+function return failure (unless the master's database environment has
+been configured with <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>), as any information critical
+to database integrity has already been flushed to the local log before
+<b>send</b> was called.</p>
+<p>To sum up, the only reason for the <b>send</b> function to return
failure is when the master database environment has been configured to
-not synchronously flush the log on transaction commit, the
+not synchronously flush the log on transaction commit (that is,
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> was configured on the master), the
<a href="../../api_c/rep_transport.html#DB_REP_PERMANENT">DB_REP_PERMANENT</a> flag is specified for the message, and the
-<b>send</b> interface was unable to determine that some number of
+<b>send</b> function was unable to determine that some number of
clients have received the current message (and all messages preceding
-the current message). How many clients should receive the message
-before the <b>send</b> interface can return success is an application
+the current message). How many clients need to receive the message
+before the <b>send</b> function can return success is an application
choice (and may not depend as much on a specific number of clients
-reporting success as one or more geographically distributed clients).
+reporting success as one or more geographically distributed clients).</p>
+<p>If, however, the application does require on-disk durability on the master,
+the master should be configured to synchronously flush the log on commit.
+If clients are not configured to synchronously flush the log,
+that is, if a client is running with <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> configured,
+then it is up to the application to reconfigure that client
+appropriately when it becomes a master. That is, the
+application must explicitly call <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> to
+disable asynchronous log flushing as part of re-configuring
+the client as the new master.</p>
<p>Of course, it is important to ensure that the replicated master and
client environments are truly independent of each other. For example,
it does not help matters that a client has acknowledged receipt of a
message if both master and clients are on the same power supply, as the
-failure of the power supply will still potentially lose information.
-<p>Finally, the Berkeley DB replication implementation has one other additional
-feature to increase application reliability. Replication in Berkeley DB is
-implemented to perform database updates using a different code path than
-the standard ones. This means operations which manage to crash the
-replication master due to a software bug will not necessarily also crash
-replication clients.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rep/logonly.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/partition.html"><img src="../../images/next.gif" alt="Next"></a>
+failure of the power supply will still potentially lose information.</p>
+<p>Configuring your replication-based application to achieve the proper
+mix of performance and transactional guarantees can be complex. In
+brief, there are a few controls an application can set to configure the
+guarantees it makes: specification of <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> for the
+master environment, specification of <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> for the
+client environment, the priorities of different sites participating in
+an election, and the behavior of the application's <b>send</b>
+function.</p>
+<p>First, it is rarely useful to write and synchronously flush the log when
+a transaction commits on a replication client. It may be useful where
+systems share resources and multiple systems commonly fail at the same
+time. By default, all Berkeley DB database environments, whether master or
+client, synchronously flush the log on transaction commit or prepare.
+Generally, replication masters and clients turn log flush off for
+transaction commit using the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag.</p>
+<p>Consider two systems connected by a network interface. One acts as the
+master, the other as a read-only client. The client takes over as
+master if the master crashes and the master rejoins the replication
+group after such a failure. Both master and client are configured to
+not synchronously flush the log on transaction commit (that is,
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> was configured on both systems). The
+application's <b>send</b> function never returns failure to the Berkeley DB
+library, simply forwarding messages to the client (perhaps over a
+broadcast mechanism), and always returning success. On the client, any
+<a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a> returns from the client's <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method
+are ignored, as well. This system configuration has excellent
+performance, but may lose data in some failure modes.</p>
+<p>If both the master and the client crash at once, it is possible to lose
+committed transactions, that is, transactional durability is not being
+maintained. Reliability can be increased by providing separate power
+supplies for the systems and placing them in separate physical locations.</p>
+<p>If the connection between the two machines fails (or just some number
+of messages are lost), and subsequently the master crashes, it is
+possible to lose committed transactions. Again, because transactional
+durability is not being maintained. Reliability can be improved in a
+couple of ways:</p>
+<ol>
+<p><li>Use a reliable network protocol (for example, TCP/IP instead of UDP).
+<p><li>Increase the number of clients and network paths to make it less likely
+that a message will be lost. In this case, it is important to also make
+sure a client that did receive the message wins any subsequent election.
+If a client that did not receive the message wins a subsequent election,
+data can still be lost.
+</ol>
+<p>Further, systems may want to guarantee message delivery to the client(s)
+(for example, to prevent a network connection from simply discarding
+messages). Some systems may want to ensure clients never return
+out-of-date information, that is, once a transaction commit returns
+success on the master, no client will return old information to a
+read-only query. Some of the following changes may be used to address
+these issues:</p>
+<ol>
+<p><li>Write the application's <b>send</b> function to not return to Berkeley DB
+until one or more clients have acknowledged receipt of the message.
+The number of clients chosen will be dependent on the application: you
+will want to consider likely network partitions (ensure that a client
+at each physical site receives the message) and geographical diversity
+(ensure that a client on each coast receives the message).
+<p><li>Write the client's message processing loop to not acknowledge receipt
+of the message until a call to the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method has returned
+success. Messages resulting in a return of <a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a> from
+the <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method mean the message could not be flushed to the
+client's disk. If the client does not acknowledge receipt of such
+messages to the master until a subsequent call to the
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method returns <a href="../../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a> and the LSN
+returned is at least as large as this message's LSN, then the master's
+<b>send</b> function will not return success to the Berkeley DB library.
+This means the thread committing the transaction on the master will not
+be allowed to proceed based on the transaction having committed until
+the selected set of clients have received the message and consider it
+complete.
+<p>Alternatively, the client's message processing loop could acknowledge
+the message to the master, but with an error code indicating that the
+application's <b>send</b> function should not return to the Berkeley DB
+library until a subsequent acknowledgement from the same client
+indicates success.</p>
+<p>The application send callback function invoked by Berkeley DB contains
+an LSN of the record being sent (if appropriate for that record).
+When <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method returns indicators that a permanent
+record has been written then it also returns the maximum LSN of the
+permanent record written.</p>
+</ol>
+<p>There is one final pair of failure scenarios to consider. First, it is
+not possible to abort transactions after the application's <b>send</b>
+function has been called, as the master may have already written the
+commit log records to disk, and so abort is no longer an option.
+Second, a related problem is that even though the master will attempt
+to flush the local log if the <b>send</b> function returns failure,
+that flush may fail (for example, when the local disk is full). Again,
+the transaction cannot be aborted as one or more clients may have
+committed the transaction even if <b>send</b> returns failure. Rare
+applications may not be able to tolerate these unlikely failure modes.
+In that case the application may want to:</p>
+<ol>
+<p><li>Configure the master to do always local synchronous commits (turning
+off the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> configuration). This will decrease
+performance significantly, of course (one of the reasons to use
+replication is to avoid local disk writes.) In this configuration,
+failure to write the local log will cause the transaction to abort in
+all cases.
+<p><li>Do not return from the application's <b>send</b> function under any
+conditions, until the selected set of clients has acknowledged the
+message. Until the <b>send</b> function returns to the Berkeley DB library,
+the thread committing the transaction on the master will wait, and so
+no application will be able to act on the knowledge that the transaction
+has committed.
+</ol>
+<p>The final alternative for applications concerned about these types of
+failure is to use distributed transactions as an alternative means of
+replication, guaranteeing full consistency at the cost of implementing
+a Global Transaction Manager and performing two-phase commit across
+multiple Berkeley DB database environments. More information on this topic
+can be found in the <a href="../../ref/xa/intro.html">Distributed
+Transactions</a> chapter.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/logonly.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/partition.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/client.html b/db/docs/ref/rpc/client.html
index e8eb90dcf..f351d558a 100644
--- a/db/docs/ref/rpc/client.html
+++ b/db/docs/ref/rpc/client.html
@@ -1,75 +1,84 @@
-<!--$Id: client.so,v 1.6 2000/03/18 21:43:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: client.so,v 1.12 2003/10/18 19:16:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Client program</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>RPC Client/Server</dl></h3></td>
-<td width="1%"><a href="../../ref/rpc/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rpc/server.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rpc/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/server.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Client program</h1>
+<h3 align=center>Client program</h3>
<p>Changing a Berkeley DB application to remotely call a server program requires
-only a few changes on the client side:
-<p><ol>
-<p><li>The client application must create and use a Berkeley DB environment,
-that is, it cannot simply call the <a href="../../api_c/db_create.html">db_create</a> interface, but must
-first call the <a href="../../api_c/env_create.html">db_env_create</a> interface to create an environment in
-which the database will live.
-<p><li>The client application must call <a href="../../api_c/env_create.html">db_env_create</a> using the
-<a href="../../api_c/env_create.html#DB_CLIENT">DB_CLIENT</a> flag.
-<p><li>The client application must call the additional DB_ENV
-method <a href="../../api_c/env_set_server.html">DBENV-&gt;set_server</a> to specify the database server. This call
-must be made before opening the environment with the <a href="../../api_c/env_open.html">DBENV-&gt;open</a>
+only a few changes on the client side:</p>
+<ol>
+<p><li>The client application must create and use a Berkeley DB environment; that
+is, it cannot simply call the <a href="../../api_c/db_class.html">db_create</a> function, but must
+first call the <a href="../../api_c/env_class.html">db_env_create</a> function to create an environment
+in which the database will live.
+<p><li>The client application must call <a href="../../api_c/env_class.html">db_env_create</a> using the
+<a href="../../api_c/env_class.html#DB_RPCCLIENT">DB_RPCCLIENT</a> flag.
+<p><li>The client application must call the additional <a href="../../api_c/env_class.html">DB_ENV</a> method
+<a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> to specify the database server. This call must
+be made before opening the environment with the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>
call.
</ol>
-<p>The client application provides three pieces of information to Berkeley DB as
-part of the <a href="../../api_c/env_set_server.html">DBENV-&gt;set_server</a> call:
-<p><ol>
-<p><li>The hostname of the server. The hostname format is not
-specified by Berkeley DB, but must be in a format acceptable to the local
-network support, specifically, the RPC clnt_create interface.
-<p><li>The client timeout. This is the number of seconds the client
-will wait for the server to respond to its requests. A default is used
-if this value is zero.
-<p><li>The server timeout. This is the number of seconds the server
-will allow client resources to remain idle before releasing those
-resources. The resources this applies to are transactions and cursors,
-as those objects hold locks and if a client dies, the server needs to
-release those resources in a timely manner. This value
-is really a hint to the server, as the server may choose to override this
-value with its own.
+<p>The client application provides a few pieces of information to Berkeley DB as
+part of the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> call:</p>
+<ol>
+<p><li>A client structure. Applications wanting to control their own client
+structures can pass one in, and Berkeley DB will use it to connect to the
+server. Most applications will not make use of this argument and should pass
+in NULL. If this argument is used, the hostname and client timeout
+arguments are ignored. Applications using this mechanism must
+create their client structures using DB_RPC_SERVERPROG as the program
+number and DB_RPC_SERVERVERS as the version number.
+<p><li>The hostname of the server. The hostname format is not specified by
+Berkeley DB, but must be in a format acceptable to the local network support
+-- specifically, the RPC clnt_create interface.
+<p><li>The client
+timeout. This is the number of seconds the client will wait for the
+server to respond to its requests. A default is used if this value is
+zero.
+<p><li>The server timeout. This is the number of seconds the server will allow
+client resources to remain idle before releasing those resources. The
+resources this applies to are transactions and cursors because those
+objects hold locks; and if a client dies, the server needs to release
+those resources in a timely manner. This value is really a hint to the
+server because the server may choose to override this value with its
+own.
</ol>
<p>The only other item of interest to the client is the home directory
-that is given to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> call.
+that is given to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> call.
The server is started with a list of allowed home directories.
The client must use one of those names (where a name is the last
component of the home directory). This allows the pathname structure
on the server to change without client applications needing to be
-aware of it.
-<p>Once the <a href="../../api_c/env_set_server.html">DBENV-&gt;set_server</a> call has been made, the client is
-connected to the server and all subsequent Berkeley DB
+aware of it.</p>
+<p>Once the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> call has been made, the client is
+connected to the server, and all subsequent Berkeley DB
operations will be forwarded to the server. The client does not need to
be otherwise aware that it is using a database server rather than
-accessing the database locally.
+accessing the database locally.</p>
<p>It is important to realize that the client portion of the Berkeley DB library
acts as a simple conduit, forwarding Berkeley DB interface arguments to the
server without interpretation. This has two important implications.
First, all pathnames must be specified relative to the server. For
-example, the home directory and other configuration information passed by
-the application when creating its environment or databases must be
-pathnames for the server, not the client system. In addition, as there
-is no logical bundling of operations at the server, performance is usually
-significantly less than when Berkeley DB is embedded within the client's address
-space, even if the RPC is to a local address.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/rpc/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rpc/server.html"><img src="../../images/next.gif" alt="Next"></a>
+example, the home directory and other configuration information passed
+by the application when creating its environment or databases must be
+pathnames for the server, not the client system. In addition, because
+there is no logical bundling of operations at the server, performance
+is usually significantly less than when Berkeley DB is embedded within the
+client's address space, even if the RPC is to a local address.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rpc/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/server.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/faq.html b/db/docs/ref/rpc/faq.html
index 7274ed244..58149d0e1 100644
--- a/db/docs/ref/rpc/faq.html
+++ b/db/docs/ref/rpc/faq.html
@@ -1,32 +1,32 @@
-<!--Id: faq.so,v 1.1 2002/06/17 18:38:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 1.2 2003/07/30 13:11:15 mhayes Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: RPC FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>RPC Client/Server</dl></h3></td>
-<td align=right><a href="../../ref/rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../perl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>RPC FAQ</h1>
-<p><ol>
+<h3 align=center>RPC FAQ</h3>
+<ol>
<p><li><b>I get the <a href="../../api_c/env_set_rpc_server.html#DB_NOSERVER">DB_NOSERVER</a> error back from a
<a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> call that is using the default client
timeout value.</b>
<p>Some systems have a default RPC client timeout value that is too small,
and the client times out the request before the server has a chance to
process and reply. If you get this error, try explicitly setting the
-client timeout value.
+client timeout value.</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rpc/server.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../perl/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/intro.html b/db/docs/ref/rpc/intro.html
index 25e4f4aea..b6d6d862d 100644
--- a/db/docs/ref/rpc/intro.html
+++ b/db/docs/ref/rpc/intro.html
@@ -1,62 +1,79 @@
-<!--$Id: intro.so,v 1.6 2000/12/04 21:51:04 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.16 2003/10/18 19:16:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>RPC Client/Server</dl></h3></td>
-<td width="1%"><a href="../../ref/txn/other.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rpc/client.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../txn/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/client.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
-<p>Berkeley DB includes a basic implementation of a client-server protocol, using
-Sun Microsystem's Remote Procedure Call Protocol. RPC support is only
-available for UNIX systems, and is not included in the Berkeley DB library by
+<h3 align=center>Introduction</h3>
+<p>Berkeley DB includes an implementation of a client-server protocol using Sun
+Microsystem's Remote Procedure Call Protocol. RPC support is
+available only for UNIX systems, and is not included in the Berkeley DB library by
default, but must be enabled during configuration. See
<a href="../../ref/build_unix/conf.html">Configuring Berkeley DB</a> for more
information. For more information on RPC itself, see your UNIX system
documentation or <i>RPC: Remote Procedure Call Protocol
-Specification, RFC1832, Sun Microsystems, Inc., USC-ISI</i>.
+Specification, RFC1831, Sun Microsystems, Inc., USC-ISI</i>.</p>
<p>Only some of the complete Berkeley DB functionality is available when using RPC.
-The following functionality is available:
-<p><ol>
-<li>The <a href="../../api_c/env_create.html">db_env_create</a> interface and the DB_ENV
-handle methods.
-<li>The <a href="../../api_c/db_create.html">db_create</a> interface and the DB handle
+The following functionality is available:</p>
+<ol>
+<li>The <a href="../../api_c/env_class.html">db_env_create</a> function and the <a href="../../api_c/env_class.html">DB_ENV</a> handle
methods.
-<li>The <a href="../../api_c/txn_begin.html">txn_begin</a>, <a href="../../api_c/txn_commit.html">txn_commit</a> and
-<a href="../../api_c/txn_abort.html">txn_abort</a> interfaces.
+<li>The <a href="../../api_c/db_class.html">db_create</a> function and the <a href="../../api_c/db_class.html">DB</a> handle methods.
+<li>The <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>, <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>, and <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> methods.
</ol>
+<p>The <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> and <a href="../../api_c/db_open.html">DB-&gt;open</a> methods
+may not be specified, that is, <a href="../../api_c/env_class.html">DB_ENV</a> and <a href="../../api_c/db_class.html">DB</a> handles used
+in RPC clients are not free-threaded.</p>
<p>The RPC client/server code does not support any of the user-defined
-comparison or allocation functions, e.g., an application using the RPC
-support may not specify its own Btree comparison function. If your
-application only requires those portions of Berkeley DB, then using RPC is
-fairly simple. If your application requires other Berkeley DB functionality,
-such as direct access to locking, logging or shared memory buffer memory
-pools, then your application cannot use the RPC support.
+comparison or allocation functions; for example, an application using
+the RPC support may not specify its own Btree comparison function. If
+your application requires only those portions of Berkeley DB, then using RPC
+is fairly simple. If your application requires other Berkeley DB
+functionality, such as direct access to locking, logging or shared
+memory buffer memory pools, then your application cannot use the RPC
+support.</p>
+<p>Although a client cannot specify a callback, Berkeley DB does support the
+<a href="../../api_c/db_associate.html">DB-&gt;associate</a> call in a limited manner. A client program
+wanting to use a secondary index may do so only in a read-only fashion.
+The primary and secondary databases must have been created locally on
+the server machine. Client programs must then open both the primary
+and secondary databases with the <a href="../../api_c/db_open.html#DB_RDONLY">DB_RDONLY</a> flag set. The client
+must also specify a NULL callback for the <a href="../../api_c/db_associate.html">DB-&gt;associate</a> call.</p>
+<p>The Berkeley DB RPC code requires that the client and server programs be
+running the exact same version numbers.
+The Berkeley DB RPC protocol version number is tied to the Berkeley DB major
+and minor release numbers.
+As such, the server program will reject requests from clients
+using a different version number.</p>
<p><b>The Berkeley DB RPC support does not provide any security or authentication of
any kind.</b> Sites needing any kind of data security measures must modify
the client and server code to provide whatever level of security they
-require.
+require.</p>
<p>One particularly interesting use of the RPC support is for debugging Berkeley DB
applications. The seamless nature of the interface means that with very
minor application code changes, an application can run outside of the
Berkeley DB address space, making it far easier to track down many types of
-errors such as memory misuse.
-<p>Using the RPC mechanisms in Berkeley DB involves two basic steps:
-<p><ol>
-<p><li>Modify your Berkeley DB application to act as a client and call the
-RPC server.
-<li>Run the <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> server program on the system
-where the database resides.
+errors -- such as memory misuse.</p>
+<p>Using the RPC mechanisms in Berkeley DB involves two basic steps:</p>
+<ol>
+<p><li>Modify your Berkeley DB application to act as a client and call the RPC
+server.
+<li>Run the <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> server program on the system where the
+database resides.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/txn/other.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rpc/client.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../txn/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/client.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/rpc/server.html b/db/docs/ref/rpc/server.html
index 64572a90d..58b09901a 100644
--- a/db/docs/ref/rpc/server.html
+++ b/db/docs/ref/rpc/server.html
@@ -1,27 +1,28 @@
-<!--$Id: server.so,v 1.6 2000/03/18 21:43:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: server.so,v 1.8 2002/06/17 18:38:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Server program</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>RPC Client/Server</dl></h3></td>
-<td width="1%"><a href="../../ref/rpc/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../rpc/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Server program</h1>
-<p>The Berkeley DB server utility, <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a>, handles all of the
-client application requests.
+<h3 align=center>Server program</h3>
+<p>The Berkeley DB server utility, <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a>, handles all the
+client application requests.</p>
<p>Currently, the <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> utility is single-threaded,
-limiting the number of requests that it can handle. Modifying the server
-implementation to run in multi-thread or multi-process mode will require
-modification of the server code automatically generated by the rpcgen
-program.
+limiting the number of requests that it can handle. Modifying the
+server implementation to run in multithread or multiprocess mode
+requires modification of the server code automatically generated by the
+rpcgen program.</p>
<p>There are two different types of timeouts used by <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a>.
The first timeout (which can be modified within some constraints by the
client application), is the resource timeout. When clients use
@@ -31,24 +32,24 @@ the server while holding those resources, it prevents any other client
from acquiring them. Therefore, it is important to detect that a client
has not used a resource for some period of time and release them. In the
case of transactions, the server aborts the transaction. In the case of
-cursors, the server closes the cursor.
+cursors, the server closes the cursor.</p>
<p>The second timeout is an idle timeout. A client application may remain
idle with an open handle to an environment and a database. Doing so
-simply consumes some memory, it does not hold locks. However, the Berkeley DB
+simply consumes some memory; it does not hold locks. However, the Berkeley DB
server may want to eventually reclaim resources if a client dies or
remains disconnected for a long period of time, so there is a separate
-idle timeout for open Berkeley DB handles.
-<p>The list of home directories specified to <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> are the
-only ones client applications are allowed to use. When
+idle timeout for open Berkeley DB handles.</p>
+<p>The list of home directories specified to <a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> are
+the only ones client applications are allowed to use. When
<a href="../../utility/berkeley_db_svc.html">berkeley_db_svc</a> is started, it is given a list of pathnames.
Clients are expected to specify the name of the home directory (defined
as the last component in the directory pathname) as the database
-environment they are opening. In this manner, clients need only know the
-name of their home environment, and not its full pathname on the server
-machine. This means, of course, that only one environment of a particular
-name is allowed on the server at any given time.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/rpc/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/java/conf.html"><img src="../../images/next.gif" alt="Next"></a>
+environment they are opening. In this manner, clients need to know only
+the name of their home environment; not its full pathname on the server
+machine. This means, of course, that only one environment of a
+particular name is allowed on the server at any given time.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rpc/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/sendmail/intro.html b/db/docs/ref/sendmail/intro.html
deleted file mode 100644
index 9dc1b4a14..000000000
--- a/db/docs/ref/sendmail/intro.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--$Id: intro.so,v 10.20 2001/01/09 18:48:06 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
-<!--All rights reserved.-->
-<html>
-<head>
-<title>Berkeley DB Reference Guide: Using Berkeley DB with Sendmail</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Sendmail</dl></h3></td>
-<td width="1%"><a href="../../ref/tcl/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/utility.html"><img src="../../images/next.gif" alt="Next"></a>
-</td></tr></table>
-<p>
-<h1 align=center>Using Berkeley DB with Sendmail</h1>
-<p>If you are attempting to use Berkeley DB with Sendmail 8.8.X, you must use
-Berkeley DB version 1.85 (see the Sleepycat Software web site's
-<a href="http://www.sleepycat.com/historic.html">historic releases</a>
-of Berkeley DB page for more information.
-<p>Berkeley DB versions 2.0 and later are only supported by Sendmail versions 8.9.X
-and later.
-<p>Berkeley DB versions 3.0 and later are only supported by Sendmail versions
-8.10.X and later.
-<p>We strongly recommend that you not use Berkeley DB version 1.85. It is no longer
-maintained or supported and has known bugs that can cause Sendmail to
-fail. Instead, please upgrade to Sendmail version 8.9.X or later and use
-a later version of Berkeley DB. For more information on using Berkeley DB with
-Sendmail, please review the README and src/README files in the Sendmail
-distribution.
-<p>To load sendmail against Berkeley DB, add the following lines to
-BuildTools/Site/site.config.m4:
-<p><blockquote><pre>APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB/include')
-APPENDDEF(`confLIBDIRS', `-L/usr/local/BerkeleyDB/lib')</pre></blockquote>
-<p>where those are the paths to #include &lt;db.h&gt; and libdb.a respectively.
-Then, run "Build -c" from the src directory.
-<p>Note that this Build script will use -DNEWDB on the compiles
-and -L/path/to/libdb/directory -ldb on the link if it can find libdb.a;
-the search path is $LIBDIRS:/lib:/usr/lib:/usr/shlib. $LIBDIRS is
-NULL by default for most systems, but some set it in BuildTools/OS/foo.
-Anyone can append to it as above (confLIBDIRS is the m4 variable name;
-LIBDIRS is the shell-script variable name).
-<p>To download Sendmail, or to obtain more information on Sendmail, see the
-<a href="http://www.sendmail.org">Sendmail home page</a>, which includes
-FAQ pages and problem addresses.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/tcl/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/dumpload/utility.html"><img src="../../images/next.gif" alt="Next"></a>
-</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
-</body>
-</html>
diff --git a/db/docs/ref/simple_tut/close.html b/db/docs/ref/simple_tut/close.html
index a268a591c..76c610da0 100644
--- a/db/docs/ref/simple_tut/close.html
+++ b/db/docs/ref/simple_tut/close.html
@@ -1,37 +1,40 @@
-<!--$Id: close.so,v 10.22 2000/12/18 21:05:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: close.so,v 10.25 2003/10/18 19:16:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Closing a database</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Closing a database</h1>
+<h3 align=center>Closing a database</h3>
<p>The only other operation that we need for our simple example is closing
-the database, and cleaning up the DB handle.
+the database, and cleaning up the DB handle.</p>
<p>It is necessary that the database be closed. The most important reason
for this is that Berkeley DB runs on top of an underlying buffer cache. If
the modified database pages are never explicitly flushed to disk and
the database is never closed, changes made to the database may never
make it out to disk, because they are held in the Berkeley DB cache. As the
default behavior of the close function is to flush the Berkeley DB cache,
-closing the database will update the on-disk information.
-<p>The <a href="../../api_c/db_close.html">DB-&gt;close</a> interface takes two arguments:
+closing the database will update the on-disk information.</p>
+<p>The <a href="../../api_c/db_close.html">DB-&gt;close</a> method takes two arguments:</p>
<p><dl compact>
-<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_create.html">db_create</a>.
-<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_close.html">DB-&gt;close</a>
-interface.
+<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_class.html">db_create</a>.
+<p><dt>flags<dd>Optional flags modifying the underlying behavior of the
+<a href="../../api_c/db_close.html">DB-&gt;close</a> method.
</dl>
-<p>Here's what the code to call <a href="../../api_c/db_close.html">DB-&gt;close</a> looks like:
-<p><blockquote><pre>#include &lt;sys/types.h&gt;
+<p>Here's what the code to call <a href="../../api_c/db_close.html">DB-&gt;close</a> looks like:</p>
+<blockquote><pre>#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;stdlib.h&gt;
#include &lt;db.h&gt;
<p>
#define DATABASE "access.db"
@@ -47,8 +50,8 @@ main()
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
- if ((ret = dbp-&gt;open(
- dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
goto err;
}
@@ -91,12 +94,11 @@ main()
ret = t_ret; </b>
<p>
exit(ret);
-}
-</pre></blockquote>
+}</pre></blockquote>
<p>Note that we do not necessarily overwrite the <b>ret</b> variable, as it
-may contain error return information from a previous Berkeley DB call.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/am_conf/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+may contain error return information from a previous Berkeley DB call.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../am_conf/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/del.html b/db/docs/ref/simple_tut/del.html
index ac4d41260..5e7499193 100644
--- a/db/docs/ref/simple_tut/del.html
+++ b/db/docs/ref/simple_tut/del.html
@@ -1,40 +1,43 @@
-<!--$Id: del.so,v 10.20 2000/03/18 21:43:17 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: del.so,v 10.25 2003/10/18 19:16:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Removing elements from a database</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Removing elements from a database</h1>
-<p>The simplest way to remove elements from a database is the <a href="../../api_c/db_del.html">DB-&gt;del</a>
-interface.
-<p>The <a href="../../api_c/db_del.html">DB-&gt;del</a> interface takes four of the same five arguments that
-the <a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/db_put.html">DB-&gt;put</a> interfaces take. The difference
-is that there is no need to specify a data item, as the delete operation
-is only interested in the key that you want to remove.
+<h3 align=center>Removing elements from a database</h3>
+<p>The simplest way to remove elements from a database is the
+<a href="../../api_c/db_del.html">DB-&gt;del</a> method.</p>
+<p>The <a href="../../api_c/db_del.html">DB-&gt;del</a> method takes four of the same five arguments the
+<a href="../../api_c/db_get.html">DB-&gt;get</a> and <a href="../../api_c/db_put.html">DB-&gt;put</a> methods take. The difference is there is
+no need to specify a data item, as the delete operation is only
+interested in the key that you want to remove.</p>
<p><dl compact>
-<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_create.html">db_create</a>.
+<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_class.html">db_create</a>.
<p><dt>txnid<dd>A transaction ID.
In our simple case, we aren't expecting to recover the database after
application or system crash, so we aren't using transactions, and will
leave this argument unspecified.
<p><dt>key<dd>The key item for the key/data pair that we want to delete from the
database.
-<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_del.html">DB-&gt;del</a>
-interface. There are currently no available flags for this interface,
-so the flags argument should always be set to 0.
+<p><dt>flags<dd>Optional flags modifying the underlying behavior of the
+<a href="../../api_c/db_del.html">DB-&gt;del</a> method. There are currently no available flags for this
+method, so the flags argument should always be set to 0.
</dl>
-<p>Here's what the code to call <a href="../../api_c/db_del.html">DB-&gt;del</a> looks like:
-<p><blockquote><pre>#include &lt;sys/types.h&gt;
+<p>Here's what the code to call <a href="../../api_c/db_del.html">DB-&gt;del</a> looks like:</p>
+<blockquote><pre>#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
#include &lt;db.h&gt;
<p>
#define DATABASE "access.db"
@@ -50,8 +53,8 @@ main()
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
- if ((ret = dbp-&gt;open(
- dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
goto err;
}
@@ -84,10 +87,10 @@ main()
goto err;
}
</b></pre></blockquote>
-<p>After the <a href="../../api_c/db_del.html">DB-&gt;del</a> call returns, the entry referenced by the key
-fruit has been removed from the database.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>After the <a href="../../api_c/db_del.html">DB-&gt;del</a> call returns, the entry to which the key
+<b>fruit</b> refers has been removed from the database.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/get.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/errors.html b/db/docs/ref/simple_tut/errors.html
index bb7e8a671..01868601b 100644
--- a/db/docs/ref/simple_tut/errors.html
+++ b/db/docs/ref/simple_tut/errors.html
@@ -1,46 +1,47 @@
-<!--$Id: errors.so,v 10.19 2000/12/14 21:42:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: errors.so,v 10.21 2003/10/18 19:16:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Error returns</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/handles.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/handles.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Error returns</h1>
+<h3 align=center>Error returns</h3>
<p>The Berkeley DB interfaces always return a value of 0 on success. If the
operation does not succeed for any reason, the return value will be
-non-zero.
-<p>If a system error occurred (e.g., Berkeley DB ran out of disk space, or
-permission to access a file was denied, or an illegal argument was
+non-zero.</p>
+<p>If a system error occurred (for example, Berkeley DB ran out of disk space,
+or permission to access a file was denied, or an illegal argument was
specified to one of the interfaces), Berkeley DB returns an <b>errno</b>
value. All of the possible values of <b>errno</b> are greater than
-0.
+0.</p>
<p>If the operation didn't fail due to a system error, but wasn't
successful either, Berkeley DB returns a special error value. For example,
if you tried to retrieve the data item associated with the key
<b>fruit</b>, and there was no such key/data pair in the database,
Berkeley DB would return <a href="../../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>, a special error value that means
the requested key does not appear in the database. All of the possible
-special error values are less than 0.
+special error values are less than 0.</p>
<p>Berkeley DB also offers programmatic support for displaying error return values.
-First, the <a href="../../api_c/env_strerror.html">db_strerror</a> interface returns a pointer to the error
+First, the <a href="../../api_c/env_strerror.html">db_strerror</a> function returns a pointer to the error
message corresponding to any Berkeley DB error return, similar to the ANSI C
-strerror interface, but is able to handle both system error returns and
-Berkeley DB-specific return values.
+strerror function, but is able to handle both system error returns and
+Berkeley DB-specific return values.</p>
<p>Second, there are two error functions, <a href="../../api_c/db_err.html">DB-&gt;err</a> and <a href="../../api_c/db_err.html">DB-&gt;errx</a>.
-These functions work like the ANSI C printf interface, taking a
+These functions work like the ANSI C printf function, taking a
printf-style format string and argument list, and optionally appending
-the standard error string to a message constructed from the format string
-and other arguments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/handles.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/open.html"><img src="../../images/next.gif" alt="Next"></a>
+the standard error string to a message constructed from the format
+string and other arguments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/handles.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/get.html b/db/docs/ref/simple_tut/get.html
index 697aa8f51..d9052d6db 100644
--- a/db/docs/ref/simple_tut/get.html
+++ b/db/docs/ref/simple_tut/get.html
@@ -1,25 +1,26 @@
-<!--$Id: get.so,v 10.23 2000/12/14 21:42:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: get.so,v 10.26 2003/10/18 19:16:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Retrieving elements from a database</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/del.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/del.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Retrieving elements from a database</h1>
+<h3 align=center>Retrieving elements from a database</h3>
<p>The simplest way to retrieve elements from a database is the
-<a href="../../api_c/db_get.html">DB-&gt;get</a> interface.
-<p>The <a href="../../api_c/db_get.html">DB-&gt;get</a> interface takes the same five arguments that the
-<a href="../../api_c/db_put.html">DB-&gt;put</a> interface takes:
+<a href="../../api_c/db_get.html">DB-&gt;get</a> method.</p>
+<p>The <a href="../../api_c/db_get.html">DB-&gt;get</a> method takes the same five arguments that the
+<a href="../../api_c/db_put.html">DB-&gt;put</a> interface takes:</p>
<p><dl compact>
-<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_create.html">db_create</a>.
+<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_class.html">db_create</a>.
<p><dt>txnid<dd>A transaction ID. In our simple case, we aren't expecting to recover
the database after application or system crash, so we aren't using
transactions, and will leave this argument NULL.
@@ -27,12 +28,13 @@ transactions, and will leave this argument NULL.
database.
<p><dt>data<dd>The data item for the key/data pair that we want to retrieve from the
database.
-<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_get.html">DB-&gt;get</a>
-interface.
+<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_get.html">DB-&gt;get</a> method.
</dl>
-<p>Here's what the code to call <a href="../../api_c/db_get.html">DB-&gt;get</a> looks like:
-<p><blockquote><pre>#include &lt;sys/types.h&gt;
+<p>Here's what the code to call <a href="../../api_c/db_get.html">DB-&gt;get</a> looks like:</p>
+<blockquote><pre>#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
#include &lt;db.h&gt;
<p>
#define DATABASE "access.db"
@@ -48,8 +50,8 @@ main()
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
- if ((ret = dbp-&gt;open(
- dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
goto err;
}
@@ -75,14 +77,14 @@ main()
goto err;
}
</b></pre></blockquote>
-<p>It is not usually necessary to clear the <a href="../../api_c/dbt.html">DBT</a> structures passed
+<p>It is not usually necessary to clear the <a href="../../api_c/dbt_class.html">DBT</a> structures passed
to the Berkeley DB functions between calls. This is not always true, when
-some of the less commonly used flags for <a href="../../api_c/dbt.html">DBT</a> structures are
-used. The <a href="../../api_c/dbt.html">DBT</a> manual page specified the details of those cases.
+some of the less commonly used flags for <a href="../../api_c/dbt_class.html">DBT</a> structures are
+used. The <a href="../../api_c/dbt_class.html">DBT</a> manual page specified the details of those cases.</p>
<p>It is possible, of course, to distinguish between system errors and the
key/data pair simply not existing in the database. There are three
-standard returns from <a href="../../api_c/db_get.html">DB-&gt;get</a>:
-<p><ol>
+standard returns from <a href="../../api_c/db_get.html">DB-&gt;get</a>:</p>
+<ol>
<p><li>The call might be successful and the key found, in which case the return
value will be 0.
<li>The call might be successful, but the key not found, in which case the
@@ -90,8 +92,8 @@ return value will be <a href="../../ref/program/errorret.html#DB_NOTFOUND">DB_NO
<li>The call might not be successful, in which case the return value will
be a system error.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/del.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/del.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/handles.html b/db/docs/ref/simple_tut/handles.html
index 2396a224e..204540b8d 100644
--- a/db/docs/ref/simple_tut/handles.html
+++ b/db/docs/ref/simple_tut/handles.html
@@ -1,29 +1,30 @@
-<!--$Id: handles.so,v 10.8 2000/03/18 21:43:17 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: handles.so,v 10.10 2001/02/25 21:45:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Handles</title>
+<title>Berkeley DB Reference Guide: Object handles</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/keydata.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/errors.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/keydata.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/errors.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Handles</h1>
+<h3 align=center>Object handles</h3>
<p>With a few minor exceptions, Berkeley DB functionality is accessed by creating
a structure and then calling functions that are fields in that structure.
This is, of course, similar to object-oriented concepts, of instances and
methods on them. For simplicity, we will often refer to these structure
-fields as methods of the handle.
+fields as methods of the handle.</p>
<p>The manual pages will show these methods as C structure references. For
example, the open-a-database method for a database handle is represented
-as <a href="../../api_c/db_open.html">DB-&gt;open</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/keydata.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/errors.html"><img src="../../images/next.gif" alt="Next"></a>
+as <a href="../../api_c/db_open.html">DB-&gt;open</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/keydata.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/errors.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/intro.html b/db/docs/ref/simple_tut/intro.html
index a9b6f648c..f0fc1ae85 100644
--- a/db/docs/ref/simple_tut/intro.html
+++ b/db/docs/ref/simple_tut/intro.html
@@ -1,29 +1,31 @@
-<!--$Id: intro.so,v 10.20 2000/12/04 18:05:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.22 2001/10/13 20:21:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/intro/products.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/keydata.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../intro/products.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/keydata.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
+<h3 align=center>Introduction</h3>
<p>As an introduction to Berkeley DB, we will present a few Berkeley DB programming
-concepts, and then a simple database application.
-<p>The programming concepts are:
-<ul type=disc>
+concepts, and then a simple database application.</p>
+<p>The programming concepts are:</p>
+<p><ul type=disc>
<li><a href="keydata.html">Key/data pairs</a>
<li><a href="handles.html">Object handles</a>
<li><a href="errors.html">Error returns</a>
</ul>
-<p>This database application will:
-<ul type=disc>
+<p>This database application will:</p>
+<p><ul type=disc>
<li><a href="open.html">Create a simple database</a>
<li><a href="put.html">Store items</a>
<li><a href="get.html">Retrieve items</a>
@@ -31,10 +33,10 @@ concepts, and then a simple database application.
<li><a href="close.html">Close the database</a>
</ul>
<p>The introduction will be presented using the programming language C. The
-<a href="example.txt">complete source</a> of the final version of the
-example program is included in the Berkeley DB distribution.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/intro/products.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/keydata.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="example.cs">complete source</a> of the final version of the
+example program is included in the Berkeley DB distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../intro/products.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/keydata.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/keydata.html b/db/docs/ref/simple_tut/keydata.html
index 38d34aebc..99e8cfb95 100644
--- a/db/docs/ref/simple_tut/keydata.html
+++ b/db/docs/ref/simple_tut/keydata.html
@@ -1,25 +1,26 @@
<!--$Id: keydata.so,v 10.19 2000/12/14 21:42:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Key/data pairs</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/handles.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/handles.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Key/data pairs</h1>
+<h3 align=center>Key/data pairs</h3>
<p>Berkeley DB uses key/data pairs to identify elements in the database.
That is, in the general case, whenever you call a Berkeley DB interface,
you present a key to identify the key/data pair on which you intend
-to operate.
-<p>For example, you might store some key/data pairs as follows:
-<p><table border=1>
+to operate.</p>
+<p>For example, you might store some key/data pairs as follows:</p>
+<table border=1>
<tr><th>Key:</th><th>Data:</th></tr>
<tr><td>fruit</td><td>apple</td></tr>
<tr><td>sport</td><td>cricket</td></tr>
@@ -32,17 +33,17 @@ the key, and <b>apple</b> as the data. At some future time, you could
then retrieve the data item associated with <b>fruit</b>, and the Berkeley DB
retrieval interface would return <b>apple</b> to you. While there are
many variations and some subtleties, all accesses to data in Berkeley DB come
-down to key/data pairs.
+down to key/data pairs.</p>
<p>Both key and data items are stored in simple structures (called
-<a href="../../api_c/dbt.html">DBT</a>s) that contain a reference to memory and a length, counted
-in bytes. (The name <a href="../../api_c/dbt.html">DBT</a> is an acronym for <i>database
+<a href="../../api_c/dbt_class.html">DBT</a>s) that contain a reference to memory and a length, counted
+in bytes. (The name <a href="../../api_c/dbt_class.html">DBT</a> is an acronym for <i>database
thang</i>, chosen because nobody could think of a sensible name that wasn't
already in use somewhere else.) Key and data items can be arbitrary
binary data of practically any length, including 0 bytes. There is a
single data item for each key item, by default, but databases can be
-configured to support multiple data items for each key item.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/handles.html"><img src="../../images/next.gif" alt="Next"></a>
+configured to support multiple data items for each key item.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/handles.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/open.html b/db/docs/ref/simple_tut/open.html
index 24df8a8e1..467b23c24 100644
--- a/db/docs/ref/simple_tut/open.html
+++ b/db/docs/ref/simple_tut/open.html
@@ -1,31 +1,34 @@
-<!--$Id: open.so,v 10.27 2000/12/14 21:42:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: open.so,v 10.32 2003/10/18 19:16:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Opening a database</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/errors.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/put.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/errors.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening a database</h1>
-<p>Opening a database is done in two steps: first, a DB handle is
-created using the Berkeley DB <a href="../../api_c/db_create.html">db_create</a> interface, and then the
-actual database is opened using the <a href="../../api_c/db_open.html">DB-&gt;open</a> function.
-<p>The <a href="../../api_c/db_create.html">db_create</a> interface takes three arguments:
+<h3 align=center>Opening a database</h3>
+<p>Opening a database is done in two steps: first, a <a href="../../api_c/db_class.html">DB</a> handle is
+created using the Berkeley DB <a href="../../api_c/db_class.html">db_create</a> function, and then the
+actual database is opened using the <a href="../../api_c/db_open.html">DB-&gt;open</a> function.</p>
+<p>The <a href="../../api_c/db_class.html">db_create</a> function takes three arguments:</p>
<p><dl compact>
<p><dt>dbp<dd>A location to store a reference to the created structure.
<p><dt>environment<dd>A location to specify an enclosing Berkeley DB environment, not used in our
example.
<p><dt>flags<dd>A placeholder for flags, not used in our example.
</dl>
-<p>The <a href="../../api_c/db_open.html">DB-&gt;open</a> interface takes five arguments:
+<p>The <a href="../../api_c/db_open.html">DB-&gt;open</a> function takes several arguments:</p>
<p><dl compact>
+<p><dt>txnid<dd>A transaction in which to enclose the open operation, not used in this
+example.
<p><dt>file<dd>The name of the database file to be opened.
<p><dt>database<dd>The optional database name, not used in this example.
<p><dt>type<dd>The type of database to open. This value will be one of the four access
@@ -43,9 +46,10 @@ system call, and specifies file read, write and execute permissions.
Of course, only the read and write permissions are relevant to Berkeley DB.
</dl>
<p>Here's what the code to create the handle and then call <a href="../../api_c/db_open.html">DB-&gt;open</a>
-looks like:
-<p><blockquote><pre><b>#include &lt;sys/types.h&gt;
+looks like:</p>
+<blockquote><pre><b>#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
#include &lt;db.h&gt;
<p>
#define DATABASE "access.db"
@@ -60,31 +64,31 @@ main()
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
- if ((ret = dbp-&gt;open(
- dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
goto err;
}</b>
</pre></blockquote>
-<p>If the call to <a href="../../api_c/db_create.html">db_create</a> is successful, the variable <b>dbp</b>
+<p>If the call to <a href="../../api_c/db_class.html">db_create</a> is successful, the variable <b>dbp</b>
will contain a database handle that will be used to configure and access
-an underlying database.
+an underlying database.</p>
<p>As you see, the program opens a database named <b>access.db</b>. The
underlying database is a Btree. Because the <a href="../../api_c/env_open.html#DB_CREATE">DB_CREATE</a> flag was
specified, the file will be created if it does not already exist. The
-mode of any created files will be 0664 (i.e., readable and writeable by
-the owner and the group, and readable by everyone else).
+mode of any created files will be 0664 (that is, readable and writable by
+the owner and the group, and readable by everyone else).</p>
<p>One additional function call is used in this code sample, <a href="../../api_c/db_err.html">DB-&gt;err</a>.
-This method works like the ANSI C printf interface. The second argument
+This method works like the ANSI C printf function. The second argument
is the error return from a Berkeley DB function, and the rest of the arguments
are a printf-style format string and argument list. The error message
associated with the error return will be appended to a message constructed
from the format string and other arguments. In the above code, if the
<a href="../../api_c/db_open.html">DB-&gt;open</a> call were to fail, the message it would display would be
-something like
-<p><blockquote><pre>access.db: Operation not permitted</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/errors.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/put.html"><img src="../../images/next.gif" alt="Next"></a>
+something like</p>
+<blockquote><pre>access.db: Operation not permitted</pre></blockquote>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/errors.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/simple_tut/put.html b/db/docs/ref/simple_tut/put.html
index 8ecdfa6ca..befd0bd6d 100644
--- a/db/docs/ref/simple_tut/put.html
+++ b/db/docs/ref/simple_tut/put.html
@@ -1,35 +1,36 @@
-<!--$Id: put.so,v 10.31 2000/12/18 21:05:15 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: put.so,v 10.36 2003/10/18 19:16:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Adding elements to a database</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Simple Tutorial</dl></h3></td>
-<td width="1%"><a href="../../ref/simple_tut/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/get.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../simple_tut/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/get.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Adding elements to a database</h1>
-<p>The simplest way to add elements to a database is the <a href="../../api_c/db_put.html">DB-&gt;put</a>
-interface.
-<p>The <a href="../../api_c/db_put.html">DB-&gt;put</a> interface takes five arguments:
+<h3 align=center>Adding elements to a database</h3>
+<p>The simplest way to add elements to a database is the <a href="../../api_c/db_put.html">DB-&gt;put</a> method.</p>
+<p>The <a href="../../api_c/db_put.html">DB-&gt;put</a> method takes five arguments:</p>
<p><dl compact>
-<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_create.html">db_create</a>.
+<p><dt>db<dd>The database handle returned by <a href="../../api_c/db_class.html">db_create</a>.
<p><dt>txnid<dd>A transaction handle. In our simple case, we aren't expecting to
recover the database after application or system crash, so we aren't
using transactions, and will leave this argument NULL.
<p><dt>key<dd>The key item for the key/data pair that we want to add to the database.
<p><dt>data<dd>The data item for the key/data pair that we want to add to the database.
-<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_put.html">DB-&gt;put</a>
-interface.
+<p><dt>flags<dd>Optional flags modifying the underlying behavior of the <a href="../../api_c/db_put.html">DB-&gt;put</a> method.
</dl>
-<p>Here's what the code to call <a href="../../api_c/db_put.html">DB-&gt;put</a> looks like:
-<p><blockquote><pre>#include &lt;sys/types.h&gt;
+<p>Here's what the code to call <a href="../../api_c/db_put.html">DB-&gt;put</a> looks like:</p>
+<blockquote><pre>#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;
+#include &lt;stdlib.h&gt;
+#include &lt;string.h&gt;
#include &lt;db.h&gt;
<p>
#define DATABASE "access.db"
@@ -45,8 +46,8 @@ main()
fprintf(stderr, "db_create: %s\n", db_strerror(ret));
exit (1);
}
- if ((ret = dbp-&gt;open(
- dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp-&gt;open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp-&gt;err(dbp, ret, "%s", DATABASE);
goto err;
}
@@ -65,7 +66,7 @@ main()
}
</b></pre></blockquote>
<p>The first thing to notice about this new code is that we clear the
-<a href="../../api_c/dbt.html">DBT</a> structures that we're about to pass as arguments to Berkeley DB
+<a href="../../api_c/dbt_class.html">DBT</a> structures that we're about to pass as arguments to Berkeley DB
functions. This is very important, and being careful to do so will
result in fewer errors in your programs. All Berkeley DB structures
instantiated in the application and handed to Berkeley DB should be cleared
@@ -73,22 +74,22 @@ before use, without exception. This is necessary so that future
versions of Berkeley DB may add additional fields to the structures. If
applications clear the structures before use, it will be possible for
Berkeley DB to change those structures without requiring that the applications
-be rewritten to be aware of the changes.
+be rewritten to be aware of the changes.</p>
<p>Notice also that we're storing the trailing nul byte found in the C
strings <b>"fruit"</b> and <b>"apple"</b> in both the key and data
items, that is, the trailing nul byte is part of the stored key, and
therefore has to be specified in order to access the data item. There is
no requirement to store the trailing nul byte, it simply makes it easier
for us to display strings that we've stored in programming languages that
-use nul bytes to terminate strings.
-<p>In many applications, it is important not to overwrite existing
-data. For example, we might not want to store the key/data pair
-<b>fruit/apple</b> if it already existed, e.g., if someone had
-previously stored the key/data pair <b>fruit/cherry</b> into the
-database.
+use nul bytes to terminate strings.</p>
+<p>In many applications, it is important not to overwrite existing data.
+For example, we might not want to store the key/data pair
+<b>fruit/apple</b> if it already existed, for example, if the key/data
+pair <b>fruit/cherry</b> had been previously stored into the
+database.</p>
<p>This is easily accomplished by adding the <a href="../../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a> flag to
-the <a href="../../api_c/db_put.html">DB-&gt;put</a> call:
-<p><blockquote><pre><b>if ((ret =
+the <a href="../../api_c/db_put.html">DB-&gt;put</a> call:</p>
+<blockquote><pre><b>if ((ret =
dbp-&gt;put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) == 0)
printf("db: %s: key stored.\n", (char *)key.data);
else {
@@ -99,15 +100,15 @@ else {
previously existing key/data pair. (Note that the value of the previously
existing data doesn't matter in this case. The only question is if a
key/data pair already exists where the key matches the key that we are
-trying to store.)
+trying to store.)</p>
<p>Specifying <a href="../../api_c/db_put.html#DB_NOOVERWRITE">DB_NOOVERWRITE</a> opens up the possibility of a new
Berkeley DB return value from the <a href="../../api_c/db_put.html">DB-&gt;put</a> function, <a href="../../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a>,
which means we were unable to add the key/data pair to the database
because the key already existed in the database. While the above sample
-code simply displays a message in this case:
-<p><blockquote><pre>DB-&gt;put: DB_KEYEXIST: Key/data pair already exists</pre></blockquote>
-<p>The following code shows an explicit check for this possibility:
-<p><blockquote><pre><b>switch (ret =
+code simply displays a message in this case:</p>
+<blockquote><pre>DB-&gt;put: DB_KEYEXIST: Key/data pair already exists</pre></blockquote>
+<p>The following code shows an explicit check for this possibility:</p>
+<blockquote><pre><b>switch (ret =
dbp-&gt;put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {
case 0:
printf("db: %s: key stored.\n", (char *)key.data);
@@ -120,8 +121,8 @@ default:
dbp-&gt;err(dbp, ret, "DB-&gt;put");
goto err;
}</b></pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/simple_tut/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/simple_tut/get.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../simple_tut/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../simple_tut/get.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/error.html b/db/docs/ref/tcl/error.html
index 3d1de037d..4c18ad73d 100644
--- a/db/docs/ref/tcl/error.html
+++ b/db/docs/ref/tcl/error.html
@@ -1,31 +1,33 @@
-<!--$Id: error.so,v 11.13 2001/01/09 18:48:06 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: error.so,v 11.17 2001/06/19 19:45:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Tcl error handling</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl</dl></h3></td>
-<td width="1%"><a href="../../ref/tcl/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl API</dl></h3></td>
+<td align=right><a href="../tcl/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Tcl error handling</h1>
+<h3 align=center>Tcl error handling</h3>
<p>The Tcl interfaces to Berkeley DB generally return TCL_OK on success and throw
a Tcl error on failure, using the appropriate Tcl interfaces to provide
the user with an informative error message. There are some "expected"
failures, however, for which no Tcl error will be thrown and for which
-Tcl commands will return TCL_OK. These failures include when a
+Tcl commands will return TCL_OK. These failures include times when a
searched-for key is not found, a requested key/data pair was previously
deleted, or a key/data pair cannot be written because the key already
-exists.
+exists.</p>
<p>These failures can be detected by searching the Berkeley DB error message that
-is returned. For example, to detect that an attempt to put a record into
-the database failed because the key already existed:
-<p><blockquote><pre>% berkdb open -create -btree a.db
+is returned. For example, use the following to detect that an attempt
+to put a record into the database failed because the key already
+existed:</p>
+<blockquote><pre>% berkdb open -create -btree a.db
db0
% db0 put dog cat
0
@@ -39,31 +41,31 @@ This was an error; the key existed
0
% exit</pre></blockquote>
<p>To simplify parsing, it is recommended that the initial Berkeley DB error name
-be checked, e.g., DB_KEYEXIST in the above example. These values will
-not change in future releases of Berkeley DB to ensure that Tcl scripts are not
-broken by upgrading to new releases of Berkeley DB. There are currently only
-three such "expected" error returns. They are:
-<p><blockquote><pre>DB_NOTFOUND: No matching key/data pair found
-DB_KEYEMPTY: Non-existent key/data pair
+be checked; for example, <a href="../../api_c/dbc_put.html#DB_KEYEXIST">DB_KEYEXIST</a> in the previous example.
+To ensure that Tcl scripts are not broken by upgrading to new releases
+of Berkeley DB, these values will not change in future releases of Berkeley DB.
+There are currently only three such "expected" error returns:</p>
+<blockquote><pre>DB_NOTFOUND: No matching key/data pair found
+DB_KEYEMPTY: Nonexistent key/data pair
DB_KEYEXIST: Key/data pair already exists</pre></blockquote>
-<p>Finally, in some cases, when a Berkeley DB error occurs Berkeley DB will output
-additional error information. By default, all Berkeley DB error messages will
-be prefixed with the created command in whose context the error occurred
-(e.g., "env0", "db2", etc.). There are several ways to capture and
-access this information.
+<p>Finally, sometimes Berkeley DB will output additional error information when
+a Berkeley DB error occurs. By default, all Berkeley DB error messages will be
+prefixed with the created command in whose context the error occurred
+(for example, "env0", "db2", and so on). There are several ways to
+capture and access this information.</p>
<p>First, if Berkeley DB invokes the error callback function, the additional
-information will be placed in the error result returned from the
-command and in the errorInfo backtrace variable in Tcl.
-<p>Also the two calls to open an environment and
-open a database take an option, <b>-errfile filename</b>, which sets an
-output file to which these additional error messages should be written.
-<p>Additionally the two calls to open an environment and
-open a database take an option, <b>-errpfx string</b>, which sets the
-error prefix to the given string. This option may be useful
-in circumstances where a more descriptive prefix is desired or
-where a constant prefix indicating an error is desired.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/tcl/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+information will be placed in the error result returned from the command
+and in the errorInfo backtrace variable in Tcl.</p>
+<p>Also, the two calls to open an environment and open a database take an
+option, <b>-errfile filename</b>, which sets an output file to which
+these additional error messages should be written.</p>
+<p>Additionally, the two calls to open an environment and open a database
+take an option, <b>-errpfx string</b>, which sets the error prefix to
+the given string. This option may be useful in circumstances where a
+more descriptive prefix is desired or where a constant prefix indicating
+an error is desired.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../tcl/program.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/faq.html b/db/docs/ref/tcl/faq.html
index 29f63b423..ad0a59e1f 100644
--- a/db/docs/ref/tcl/faq.html
+++ b/db/docs/ref/tcl/faq.html
@@ -1,60 +1,58 @@
-<!--$Id: faq.so,v 11.2 2001/01/15 17:50:48 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 11.9 2003/03/19 20:20:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Frequently Asked Questions</title>
+<title>Berkeley DB Reference Guide: Tcl FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl API</dl></h3></td>
-<td width="1%"><a href="../../ref/tcl/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/sendmail/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../tcl/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/utility.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Frequently Asked Questions</h1>
-<p><ol>
+<h3 align=center>Tcl FAQ</h3>
+<ol>
<p><li><b>I have several versions of Tcl installed. How do I configure
Berkeley DB to use a particular version?</b>
<p>To compile the Tcl interface with a particular version of Tcl, use the
---with-tcl option to specify the Tcl installation directory that contains
-the tclConfig.sh file.
-<p>See <a href="../../ref/build_unix/flags.html">Changing compile or load options</a>
-for more information.
+--with-tcl option to specify the Tcl installation directory that
+contains the tclConfig.sh file. See
+<a href="../../ref/build_unix/flags.html">Changing compile or load
+options</a> for more information.</p>
<hr size=1 noshade>
<p><li><b>Berkeley DB was configured using --enable-tcl or --with-tcl and fails
to build.</b>
-<p>The Berkeley DB Tcl interface requires Tcl version 8.1 or greater. You can
-download a copy of Tcl from the
-<a href="http://www.ajubasolutions.com/home.html">Ajuba Solutions</a>
-corporate web site.
+<p>The Berkeley DB Tcl interface requires Tcl version 8.4 or greater.</p>
<hr size=1 noshade>
<p><li><b>Berkeley DB was configured using --enable-tcl or --with-tcl and fails
to build.</b>
<p>If the Tcl installation was moved after it was configured and installed,
-try re-configuring and re-installing Tcl.
+try reconfiguring and reinstalling Tcl.</p>
<p>Also, some systems do not search for shared libraries by default, or do
not search for shared libraries named the way the Tcl installation names
them, or are searching for a different kind of library than those in
your Tcl installation. For example, Linux systems often require linking
-"libtcl.a" to "libtcl#.#.a", while AIX systems often require adding the
+"libtcl.a" to "libtcl#.#.a", whereas AIX systems often require adding the
"-brtl" flag to the linker. A simpler solution that almost always works
on all systems is to create a link from "libtcl.#.#.a" or "libtcl.so"
-(or whatever you happen to have) to "libtcl.a" and reconfigure.
+(or whatever you happen to have) to "libtcl.a" and reconfigure.</p>
<hr size=1 noshade>
<p><li><b>Loading the Berkeley DB library into Tcl on AIX causes a core dump.</b>
<p>In some versions of Tcl, the "tclConfig.sh" autoconfiguration script
-created by the Tcl installation does not work properly under AIX. To
-build a working Berkeley DB Tcl API when this happens, use the "--enable-tcl"
-flag to configure Berkeley DB (rather than "--with-tcl"). In addition, you
-will have to specify any necessary include and library paths and linker
-flags needed to build with Tcl by setting the CPPFLAGS, LIBS and LDFLAGS
-environment variables before running configure.
+created by the Tcl installation does not work properly under AIX, and
+you may have to modify values in the tclConfig.sh file to in order to
+load the Berkeley DB library into Tcl. Specifically, the TCL_LIB_SPEC
+variable should contain sufficient linker flags to find and link against
+the installed libtcl library. In some circumstances, the tclConfig.sh
+file built by Tcl does not.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/tcl/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/sendmail/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../tcl/error.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../dumpload/utility.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/intro.html b/db/docs/ref/tcl/intro.html
index 6484eaac6..a895bd6cd 100644
--- a/db/docs/ref/tcl/intro.html
+++ b/db/docs/ref/tcl/intro.html
@@ -1,70 +1,67 @@
-<!--$Id: intro.so,v 11.14 2000/12/04 20:49:18 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 11.22 2003/03/25 00:27:08 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Loading Berkeley DB with Tcl</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl</dl></h3></td>
-<td width="1%"><a href="../../ref/perl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/using.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl API</dl></h3></td>
+<td align=right><a href="../perl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/using.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Loading Berkeley DB with Tcl</h1>
-<p>Berkeley DB includes a dynamically loadable Tcl API. The Tcl API requires that
-Tcl/Tk 8.1 or later already be installed on your system. We recommend
-that you install later releases of Tcl/Tk than 8.1, if possible,
-especially on Windows platforms, as we found that we had to make local
-fixes to the 8.1 release in a few cases. You can download a copy of
-Tcl from the <a href="http://www.ajubasolutions.com/home.html">Ajuba
-Solutions</a> corporate web site.
-<p>This document assumes that you have already configured Berkeley DB for Tcl
-support and you have built and installed everything where you want it
+<h3 align=center>Loading Berkeley DB with Tcl</h3>
+<p>Berkeley DB includes a dynamically loadable Tcl API, which requires that
+Tcl/Tk 8.4 or later already be installed on your system. You can
+download a copy of Tcl from the <a href="http://dev.scriptics.com/">Tcl Developer Xchange</a> Web site.</p>
+<p>This document assumes that you already configured Berkeley DB for Tcl
+support, and you have built and installed everything where you want it
to be. If you have not done so, see
<a href="../../ref/build_unix/conf.html">Configuring Berkeley DB</a> or
<a href="../../ref/build_win/intro.html">Building for Win32</a> for more
-information.
+information.</p>
<h3>Installing as a Tcl Package</h3>
<p>Once enabled, the Berkeley DB shared library for Tcl is automatically installed
-as part of the standard installation process. However, if you wish to be
-able to dynamically load it as a Tcl package into your script there are
-several steps that must be performed:
-<p><ol>
-<p><li>Run the Tcl shell in the install directory
-<li>Append this directory to your auto_path variable
-<li>Run the pkg_mkIndex proc giving the name of the Berkeley DB Tcl library
+as part of the standard installation process. However, if you want to be
+able to dynamically load it as a Tcl package into your script, there are
+several steps that must be performed:</p>
+<ol>
+<p><li>Run the Tcl shell in the install directory.
+<li>Append this directory to your auto_path variable.
+<li>Run the pkg_mkIndex proc, giving the name of the Berkeley DB Tcl library.
</ol>
-<p>For example:
-<p><blockquote><pre># tclsh8.1
-% lappend auto_path /usr/local/BerkeleyDB/lib
-% pkg_mkIndex /usr/local/BerkeleyDB/lib libdb_tcl-3.2.so libdb-3.2.so</pre></blockquote>
-<p>Note that your Tcl and Berkeley DB version numbers may differ from the example,
-and so your tclsh and and library names may be different.
+<p>For example:</p>
+<blockquote><pre># tclsh8.4
+% lappend auto_path /usr/local/BerkeleyDB.4.2/lib
+% pkg_mkIndex /usr/local/BerkeleyDB.4.2/lib libdb_tcl-4.2.so</pre></blockquote>
+<p>Note that your Tcl and Berkeley DB version numbers may differ from the
+example, and so your tclsh and library names may be different.</p>
<h3>Loading Berkeley DB with Tcl</h3>
<p>The Berkeley DB package may be loaded into the user's interactive Tcl script
-(or wish session) via the "load" command. For example:
-<p><blockquote><pre>load /usr/local/BerkeleyDB/lib/libdb_tcl-3.2.so</pre></blockquote>
+(or wish session) via the <b>load</b> command. For example:</p>
+<blockquote><pre>load /usr/local/BerkeleyDB.4.2/lib/libdb_tcl-4.2.so</pre></blockquote>
<p>Note that your Berkeley DB version numbers may differ from the example, and so
-the library name may be different.
+the library name may be different.</p>
<p>If you installed your library to run as a Tcl package, Tcl application
-scripts should use the "package" command to indicate to the Tcl
+scripts should use the <b>package</b> command to indicate to the Tcl
interpreter that it needs the Berkeley DB package and where to find it. For
-example:
-<p><blockquote><pre>lappend auto_path "/usr/local/BerkeleyDB/lib"
+example:</p>
+<blockquote><pre>lappend auto_path "/usr/local/BerkeleyDB.4.2/lib"
package require Db_tcl</pre></blockquote>
<p>No matter which way the library gets loaded, it creates a command named
-<b>berkdb</b>. All of the Berkeley DB functionality is accessed via this
+<b>berkdb</b>. All the Berkeley DB functionality is accessed via this
command and additional commands it creates on behalf of the application.
-A simple test to determine if everything is loaded and ready is to ask
-for the version:
-<p><blockquote><pre>berkdb version -string</pre></blockquote>
-<p>This should return you the Berkeley DB version in a string format.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/perl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/using.html"><img src="../../images/next.gif" alt="Next"></a>
+A simple test to determine whether everything is loaded and ready is to
+display the library version, as follows:</p>
+<blockquote><pre>berkdb version -string</pre></blockquote>
+<p>This should return you the Berkeley DB version in a string format.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../perl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/using.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/program.html b/db/docs/ref/tcl/program.html
index 881c8848b..2c94036aa 100644
--- a/db/docs/ref/tcl/program.html
+++ b/db/docs/ref/tcl/program.html
@@ -1,33 +1,31 @@
-<!--$Id: program.so,v 11.9 2000/12/04 18:05:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: program.so,v 11.12 2001/03/13 20:39:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Tcl API programming notes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl</dl></h3></td>
-<td width="1%"><a href="../../ref/tcl/using.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl API</dl></h3></td>
+<td align=right><a href="../tcl/using.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Tcl API programming notes</h1>
+<h3 align=center>Tcl API programming notes</h3>
<p>The Tcl API closely parallels the Berkeley DB programmatic interfaces. If you
-are already familiar with one of those interfaces there will not be many
-surprises in the Tcl API.
+are already familiar with one of those interfaces, there will not be many
+surprises in the Tcl API.</p>
<p>Several pieces of Berkeley DB functionality are not available in the Tcl API.
Any of the functions that require a user-provided function are not
supported via the Tcl API. For example, there is no equivalent to the
-<a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> or the <a href="../../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a>
-methods.
-<p>The Berkeley DB Tcl API always turns on the DB_THREAD flag for environments and
-databases making no assumptions about the existence or lack thereof of
-threads support in current or future releases of Tcl.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/tcl/using.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/error.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> or the <a href="../../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a>
+methods.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../tcl/using.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/error.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/tcl/using.html b/db/docs/ref/tcl/using.html
index 6c927477c..6698d9aac 100644
--- a/db/docs/ref/tcl/using.html
+++ b/db/docs/ref/tcl/using.html
@@ -1,36 +1,38 @@
-<!--$Id: using.so,v 11.6 2000/03/18 21:43:17 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: using.so,v 11.8 2001/03/13 20:39:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Using Berkeley DB with Tcl</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl</dl></h3></td>
-<td width="1%"><a href="../../ref/tcl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/program.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Tcl API</dl></h3></td>
+<td align=right><a href="../tcl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/program.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Using Berkeley DB with Tcl</h1>
-<p>All commands in the Berkeley DB Tcl interface are of the form:
-<p><blockquote><pre>command_handle operation options</pre></blockquote>
+<h3 align=center>Using Berkeley DB with Tcl</h3>
+<p>All commands in the Berkeley DB Tcl interface are in the following form:</p>
+<blockquote><pre>command_handle operation options</pre></blockquote>
<p>The <i>command handle</i> is <b>berkdb</b> or one of the additional
commands that may be created. The <i>operation</i> is what you want
-to do to that handle and the <i>options</i> apply to the operation.
+to do to that handle, and the <i>options</i> apply to the operation.
Commands that get created on behalf of the application have their own sets
-of operations. Generally any calls in DB that result in new object
-handles will translate into a new command handle in Tcl. Then the user
-can access the operations of the handle via the new Tcl command handle.
-<p>Newly created commands are named with an abbreviated form of their objects
-followed by a number. Some created commands are subcommands of other
-created commands and will be the first command, followed by a period, '.'
-followed by the new subcommand. For example, suppose you have a database
-already existing called my_data.db. The following example shows the
-commands created when you open the database, and when you open a cursor:
-<p><blockquote><pre># First open the database and get a database command handle
+of operations. Generally, any calls in DB that result in new object
+handles will translate into a new command handle in Tcl. Then, the user
+can access the operations of the handle via the new Tcl command handle.</p>
+<p>Newly created commands are named with an abbreviated form of their
+objects, followed by a number. Some created commands are subcommands of
+other created commands and will be the first command, followed by a
+period (.), and then followed by the new subcommand. For example,
+suppose that you have a database already existing called my_data.db.
+The following example shows the commands created when you open the
+database and when you open a cursor:</p>
+<blockquote><pre># First open the database and get a database command handle
% berkdb open my_data.db
db0
#Get some data from that database
@@ -43,11 +45,11 @@ db0.c0
% db0.c0 get -first
{{first_key first_data}}</pre></blockquote>
<p>All commands in the library support a special option <b>-?</b> that will
-list the correct operations for a command or the correct options.
+list the correct operations for a command or the correct options.</p>
<p>A list of commands and operations can be found in the
-<a href="../../api_tcl/tcl_index.html">Tcl Interface</a> documentation.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/tcl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/tcl/program.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_tcl/tcl_index.html">Tcl Interface</a> documentation.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../tcl/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../tcl/program.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/test/faq.html b/db/docs/ref/test/faq.html
index ec5d2d3f0..890a64584 100644
--- a/db/docs/ref/test/faq.html
+++ b/db/docs/ref/test/faq.html
@@ -1,32 +1,29 @@
-<!--$Id: faq.so,v 10.2 2000/08/10 17:54:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.5 2003/03/19 20:20:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Test suite FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Test Suite</dl></h3></td>
-<td width="1%"><a href="../../ref/test/run.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../test/run.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../distrib/port.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Test suite FAQ</h1>
-<p><ol>
+<h3 align=center>Test suite FAQ</h3>
+<ol>
<p><li><b>The test suite has been running for over a day. What's wrong?</b>
-<p>The test suite an take anywhere from some number of hours to several
+<p>The test suite can take anywhere from some number of hours to several
days to run, depending on your hardware configuration. As long as the
run is making forward progress and new lines are being written to the
-<b>ALL.OUT</b> file, everything is probably fine.
-<p><li><b>The test suite hangs.</b>
-<p>The test suite requires Tcl 8.1 or greater, preferably at least Tcl 8.3.
-If you are using an earlier version of Tcl, the test suite may simply
-hang at some point.
+<b>ALL.OUT</b> files, everything is probably fine.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/test/run.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/distrib/layout.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../test/run.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../distrib/port.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/test/run.html b/db/docs/ref/test/run.html
index 078951a05..964e3cd90 100644
--- a/db/docs/ref/test/run.html
+++ b/db/docs/ref/test/run.html
@@ -1,78 +1,61 @@
-<!--$Id: run.so,v 10.34 2000/11/28 21:27:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: run.so,v 10.44 2003/11/27 18:26:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Running the test suite</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Test Suite</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Running the test suite</h1>
-<p>Once you have started tclsh and have loaded the test.tcl source file (see
-<a href="../../ref/build_unix/test.html">Running the test suite under UNIX</a>
-and <a href="../../ref/build_win/test.html">Running the test suite under
-Windows</a> for more information), you are ready to run the test suite. At
-the tclsh prompt, to run the entire test suite, enter:
-<p><blockquote><pre>% run_all</pre></blockquote>
-<p>Running all the tests can take from several hours to a few days to
-complete, depending on your hardware. For this reason, the output from
-this command is re-directed to a file in the current directory named
+<h3 align=center>Running the test suite</h3>
+<p>Once you have started tclsh and have loaded the test.tcl source file
+(see <a href="../../ref/build_unix/test.html">Running the test suite under
+UNIX</a> and <a href="../../ref/build_win/test.html">Running the test suite
+under Windows</a> for more information), you are ready to run the test
+suite. At the tclsh prompt, to run the standard test suite, enter the
+following:</p>
+<blockquote><pre>% run_std</pre></blockquote>
+<p>A more exhaustive version of the test suite runs all the tests several
+more times, testing encryption, replication, and different page sizes.
+After you have a clean run for run_std, you may choose to run this
+lengthier set of tests. At the tclsh prompt, enter:</p>
+<blockquote><pre>% run_all</pre></blockquote>
+<p>Running the standard tests can take from several hours to a few days to
+complete, depending on your hardware, and running all the tests will
+take at least twice as long. For this reason, the output from these
+commands are redirected to a file in the current directory named
<b>ALL.OUT</b>. Periodically, a line will be written to the standard
-output indicating what test is being run. When the suite has finished,
-a single message indicating that the test suite completed successfully or
-that it failed will be written. If the run failed, you should review the
-file ALL.OUT to determine which tests failed. Any errors will appear in
-that file as output lines beginning with the string: FAIL.
-<p>It is also possible to run specific tests or tests for a particular
-subsystem:
-<p><blockquote><pre>% r archive
-% r btree
-% r env
-% r frecno
-% r hash
-% r join
-% r join
-% r lock
-% r log
-% r mpool
-% r mutex
-% r queue
-% r rbtree
-% r recno
-% r rrecno
-% r subdb
-% r txn</pre></blockquote>
-<p>Or to run a single, individual test:
-<p><blockquote><pre>% test001 btree</pre></blockquote>
-<p>It is also possible to modify the test run based on arguments on the
-command line. For example, the command:
-<p><blockquote><pre>% test001 btree 10</pre></blockquote>
-<p>will run a greatly abbreviated form of test001, doing 10 operations
-instead of 10,000.
-<p>In all cases, when not running the entire test suite as described above,
-a successful test run will return you to the tclsh prompt (%). On
-failure, a message is displayed indicating what failed.
-<p>Tests are run, by default, in the directory <b>TESTDIR</b>. However,
-the test files are often very large. To use a different directory for
-the test directory, edit the file include.tcl in your build directory,
-and change the line:
-<p><blockquote><pre>set testdir ./TESTDIR</pre></blockquote>
-<p>to a more appropriate value for your system, e.g.:
-<p><blockquote><pre>set testdir /var/tmp/db.test</pre></blockquote>
-<p>Alternatively, you can create a symbolic link named TESTDIR in your build
-directory to an appropriate location for running the tests. Regardless
-of where you run the tests, the TESTDIR directory should be on a local
-filesystem, using a remote filesystem (e.g., NFS) will almost certainly
-cause spurious test failures.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+output, indicating what test is being run. When the test suite has
+finished, a final message will be written indicating the test suite has
+completed successfully or that it has failed. If the run failed, you
+should review the <b>ALL.OUT</b> file to determine which tests failed.
+Errors will appear in that file as output lines, beginning with the
+string "FAIL".</p>
+<p>Tests are run in the directory <b>TESTDIR</b>, by default. However,
+the test files are often large, and you should use a filesystem with at
+least several hundred megabytes of free space. To use a different
+directory for the test directory, edit the file include.tcl in your
+build directory, and change the following line to a more appropriate
+value for your system:</p>
+<blockquote><pre>set testdir ./TESTDIR</pre></blockquote>
+<p>For example, you might change it to the following:</p>
+<blockquote><pre>set testdir /var/tmp/db.test</pre></blockquote>
+<p>Alternatively, you can create a symbolic link named TESTDIR in your
+build directory to an appropriate location for running the tests.
+Regardless of where you run the tests, the TESTDIR directory should be
+on a local filesystem. Using a remote filesystem (for example, an NFS
+mounted filesystem) will almost certainly cause spurious test
+failures.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../test/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/admin.html b/db/docs/ref/transapp/admin.html
index c908a7a33..2bc019447 100644
--- a/db/docs/ref/transapp/admin.html
+++ b/db/docs/ref/transapp/admin.html
@@ -1,47 +1,48 @@
-<!--$Id: admin.so,v 10.14 2000/08/16 17:50:39 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: admin.so,v 10.17 2001/03/02 21:01:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Environment infrastructure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/nested.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Environment infrastructure</h1>
+<h3 align=center>Environment infrastructure</h3>
<p>When building transactional applications, it is usually necessary to
build an administrative infrastructure around the database environment.
There are five components to this infrastructure, and each is
supported by the Berkeley DB package in two different ways: a standalone
-utility and one or more library interfaces.
-<ul type=disc>
+utility and one or more library interfaces.</p>
+<p><ul type=disc>
<li>Deadlock detection: <a href="../../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../../api_c/lock_detect.html">lock_detect</a>, <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a>
-<li>Checkpoints: <a href="../../utility/db_checkpoint.html">db_checkpoint</a>, <a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a>
+<a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a>, <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a>
+<li>Checkpoints: <a href="../../utility/db_checkpoint.html">db_checkpoint</a>, <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a>
<li>Database and log file archival:
-<a href="../../utility/db_archive.html">db_archive</a>, <a href="../../api_c/log_archive.html">log_archive</a>
-<li>Log file removal: <a href="../../utility/db_archive.html">db_archive</a>, <a href="../../api_c/log_archive.html">log_archive</a>
-<li>Recovery procedures: <a href="../../utility/db_recover.html">db_recover</a>, <a href="../../api_c/env_open.html">DBENV-&gt;open</a>
+<a href="../../utility/db_archive.html">db_archive</a>, <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>
+<li>Log file removal: <a href="../../utility/db_archive.html">db_archive</a>, <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>
+<li>Recovery procedures: <a href="../../utility/db_recover.html">db_recover</a>, <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>
</ul>
-<p>When writing multi-threaded server applications and/or applications
-intended for download from the web, it is usually simpler to create
+<p>When writing multithreaded server applications and/or applications
+intended for download from the Web, it is usually simpler to create
local threads that are responsible for administration of the database
environment as scheduling is often simpler in a single-process model,
and only a single binary need be installed and run. However, the
supplied utilities can be generally useful tools even when the
-application is responsible for doing its own administration, as
+application is responsible for doing its own administration because
applications rarely offer external interfaces to database
administration. The utilities are required when programming to a Berkeley DB
-scripting interface, as the scripting APIs do not always offer
-interfaces to the administrative functionality.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
+scripting interface because the scripting APIs do not always offer
+interfaces to the administrative functionality.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/nested.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/app.html b/db/docs/ref/transapp/app.html
index 3c946989b..7896b5be0 100644
--- a/db/docs/ref/transapp/app.html
+++ b/db/docs/ref/transapp/app.html
@@ -1,38 +1,39 @@
-<!--$Id: app.so,v 10.4 2000/07/25 16:31:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: app.so,v 10.8 2003/01/07 20:02:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Application structure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/term.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/env_open.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/term.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/env_open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Application structure</h1>
+<h3 align=center>Application structure</h3>
<p>When building transactionally protected applications, there are some
-special issues that must be considered. The most important one is that,
+special issues that must be considered. The most important one is that
if any thread of control exits for any reason while holding Berkeley DB
-resources, recovery must be performed to:
-<ul type=disc>
-<li>recover the Berkeley DB resources,
-<li>release any locks or mutexes that may have been held to avoid starvation
+resources, recovery must be performed to do the following:</p>
+<p><ul type=disc>
+<li>Recover the Berkeley DB resources.
+<li>Release any locks or mutexes that may have been held to avoid starvation
as the remaining threads of control convoy behind the failed thread's
-locks, and
-<li>clean up any partially completed operations that may have left a
+locks.
+<li>Clean up any partially completed operations that may have left a
database in an inconsistent or corrupted state.
</ul>
<p>Complicating this problem is the fact that the Berkeley DB library itself
-cannot determine if recovery is required, the application itself
+cannot determine whether recovery is required; the application itself
<b>must</b> make that decision. A further complication is that
-recovery must be single-threaded, that is, one thread of control or
+recovery must be single-threaded; that is, one thread of control or
process must perform recovery before any other thread of control or
-processes attempts to create or join the Berkeley DB environment.
-<p>There are two approaches to handling this problem:
+processes attempts to create or join the Berkeley DB environment.</p>
+<p>There are two approaches to handling this problem:</p>
<p><dl compact>
<p><dt>The hard way:<dd>An application can track its own state carefully enough that it knows
when recovery needs to be performed. Specifically, the rule to use is
@@ -40,78 +41,90 @@ that recovery must be performed before using a Berkeley DB environment any
time the threads of control previously using the Berkeley DB environment did
not shut the environment down cleanly before exiting the environment
for any reason (including application or system failure).
-<p>Requirements for shutting down the environment cleanly differ depending
+<p>Requirements for shutting down the environment cleanly differ, depending
on the type of environment created. If the environment is public and
-persistent (i.e., the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag was not specified to the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> function), recovery must be performed if any transaction was
-not committed or aborted, or <a href="../../api_c/env_close.html">DBENV-&gt;close</a> function was not called for
-any open DB_ENV handle.
-<p>If the environment is private and temporary (i.e., the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a>
-flag was specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function), recovery must be performed
-if any transaction was not committed or aborted, or <a href="../../api_c/env_close.html">DBENV-&gt;close</a> function
-was not called for any open DB_ENV handle. In addition, at least
-one transaction checkpoint must be performed after all existing
-transactions have been committed or aborted.
+persistent (that is, the <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag was not specified to
+the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method), recovery must be performed if any transaction
+was not committed or aborted, or <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method was not called
+for any open <a href="../../api_c/env_class.html">DB_ENV</a> handle.</p>
+<p>If the environment is private and temporary (that is, the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag was specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method),
+recovery must be performed if any transaction was not committed or
+aborted, or <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method was not called for any open
+<a href="../../api_c/env_class.html">DB_ENV</a> handle. In addition, at least one transaction checkpoint
+must be performed after all existing transactions have been committed
+or aborted.</p>
<p><dt>The easy way:<dd>It greatly simplifies matters that recovery may be performed regardless
-of whether recovery strictly needs to be performed, that is, it is not
-an error to run recovery on a database where no recovery is necessary.
-Because of this fact, it is almost invariably simpler to ignore the
-above rules about shutting an application down cleanly, and simply run
-recovery each time a thread of control accessing a database environment
-fails for any reason, as well as before accessing any database
-environment after system reboot.
+of whether recovery strictly needs to be performed; that is, it is not
+an error to run recovery on a database for which no recovery is
+necessary. Because of this fact, it is almost invariably simpler to
+ignore the previous rules about shutting an application down cleanly,
+and simply run recovery each time a thread of control accessing a
+database environment fails for any reason, as well as before accessing
+any database environment after system reboot.
</dl>
<p>There are two common ways to build transactionally protected Berkeley DB
applications. The most common way is as a single, usually
-multi-threaded, process. This architecture is simplest because it
+multithreaded, process. This architecture is simplest because it
requires no monitoring of other threads of control. When the
application starts, it opens and potentially creates the environment,
runs recovery (whether it was needed or not), and then opens its
databases. From then on, the application can create new threads of
control as it chooses. All threads of control share the open Berkeley DB
-DB_ENV and DB handles. In this model, databases are
+<a href="../../api_c/env_class.html">DB_ENV</a> and <a href="../../api_c/db_class.html">DB</a> handles. In this model, databases are
rarely opened or closed when more than a single thread of control is
-running, that is, they are opened when only a single thread is running,
+running; that is, they are opened when only a single thread is running,
and closed after all threads but one have exited. The last thread of
-control to exit closes the databases and the environment.
+control to exit closes the databases and the environment.</p>
<p>An alternative way to build Berkeley DB applications is as a set of
-cooperating processes, which may or may not be multi-threaded. This
-architecture is more complicated.
+cooperating processes, which may or may not be multithreaded. This
+architecture is more complicated.</p>
<p>First, this architecture requires that the order in which threads of
control are created and subsequently access the Berkeley DB environment be
-controlled, because recovery must be single-threaded. The first thread
+controlled because recovery must be single-threaded. The first thread
of control to access the environment must run recovery, and no other
thread should attempt to access the environment until recovery is
complete. (Note that this ordering requirement does not apply to
environment creation without recovery. If multiple threads attempt to
create a Berkeley DB environment, only one will perform the creation and the
-others will join the already existing environment.)
+others will join the already existing environment.)</p>
<p>Second, this architecture requires that threads of control be monitored.
-If any thread of control that owns Berkeley DB resources exits, without first
+If any thread of control that owns Berkeley DB resources exits without first
cleanly discarding those resources, recovery is usually necessary.
Before running recovery, all threads using the Berkeley DB environment must
relinquish all of their Berkeley DB resources (it does not matter if they do
-so gracefully or because they are forced to exit). Then recovery can
-be run and the threads of control continued or re-started.
+so gracefully or because they are forced to exit). Then, recovery can
+be run and the threads of control continued or restarted.</p>
<p>We have found that the safest way to structure groups of cooperating
processes is to first create a single process (often a shell script)
-that opens/creates the Berkeley DB environment and runs recovery, and which
+that opens/creates the Berkeley DB environment and runs recovery, and that
then creates the processes or threads that will actually perform work.
The initial thread has no further responsibilities other than to monitor
the threads of control it has created, to ensure that none of them
unexpectedly exits. If one exits, the initial process then forces all
of the threads of control using the Berkeley DB environment to exit, runs
-recovery, and restarts the working threads of control.
+recovery, and restarts the working threads of control.</p>
<p>If it is not practical to have a single parent for the processes sharing
a Berkeley DB environment, each process sharing the environment should log
-their connection to and exit from the environment in some fashion that
-permits a monitoring process to detect if a thread of control may have
-potentially acquired Berkeley DB resources and never released them.
+their connection to and exit from the environment in a way that allows
+a monitoring process to detect if a thread of control might have
+acquired Berkeley DB resources and never released them. In this model, an
+initial "watcher" process opens/creates the Berkeley DB environment and runs
+recovery, and then creates a sentinel file. Any other process wanting
+to use the Berkeley DB environment checks for the sentinel file; if the
+sentinel file exists, the other process registers its process ID with
+the watcher and joins the database environment. When the other process
+finishes with the environment, it unregisters its process ID with the
+watcher. The watcher periodically checks to ensure that no process has
+failed while using the environment. If a process does fail while using
+the environment, the watcher removes the sentinel file, kills all
+processes currently using the environment, runs recovery, and re-creates
+the sentinel file.</p>
<p>Obviously, it is important that the monitoring process in either case
-be as simple and well-tested as possible as there is no recourse should
-it fail.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/term.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/env_open.html"><img src="../../images/next.gif" alt="Next"></a>
+be as simple and well-tested as possible because there is no recourse
+if it fails.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/term.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/env_open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/archival.html b/db/docs/ref/transapp/archival.html
index 2e8815850..88fbf6e8f 100644
--- a/db/docs/ref/transapp/archival.html
+++ b/db/docs/ref/transapp/archival.html
@@ -1,127 +1,138 @@
-<!--$Id: archival.so,v 10.41 2000/12/05 20:36:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: archival.so,v 10.53 2003/09/25 15:28:00 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Database and log file archival</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/logfile.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/logfile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Database and log file archival</h1>
- <a name="3"><!--meow--></a>
+<h3 align=center>Database and log file archival</h3>
<p>The third component of the administrative infrastructure, archival for
catastrophic recovery, concerns the recoverability of the database in
the face of catastrophic failure. Recovery after catastrophic failure
is intended to minimize data loss when physical hardware has been
-destroyed, for example, loss of a disk that contains databases or log
-files. While the application may still experience data loss in this
-case, it is possible to minimize it.
-<p>First, you may want to periodically create snapshots (i.e., backups) of
-your databases to make it possible to recover from catastrophic failure.
-These snapshots are either a standard backup which creates a consistent
-picture of the databases as of a single instant in time, or an on-line
-backup (also known as a <i>hot</i> backup), which creates a
-consistent picture of the databases as of an unspecified instant during
-the period of time when the snapshot was made. The advantage of a hot
-backup is that applications may continue to read and write the databases
-while the snapshot is being taken. The disadvantage of a hot backup is
-that more information must be archived, and recovery based on a hot
-backup is to an unspecified time between the start of the backup and
-when the backup is completed.
+destroyed -- for example, loss of a disk that contains databases or log
+files. Although the application may still experience data loss in this
+case, it is possible to minimize it.</p>
+<p>First, you may want to periodically create snapshots (that is, backups)
+of your databases to make it possible to recover from catastrophic
+failure. These snapshots are either a standard backup, which creates a
+consistent picture of the databases as of a single instant in time; or
+an on-line backup (also known as a <i>hot</i> backup), which creates
+a consistent picture of the databases as of an unspecified instant
+during the period of time when the snapshot was made. The advantage of
+a hot backup is that applications may continue to read and write the
+databases while the snapshot is being taken. The disadvantage of a hot
+backup is that more information must be archived, and recovery based on
+a hot backup is to an unspecified time between the start of the backup
+and when the backup is completed.</p>
<p>Second, after taking a snapshot, you should periodically archive the
log files being created in the environment. It is often helpful to
think of database archival in terms of full and incremental filesystem
-backups. A snapshot is a full backup, while the periodic archival of
-the current log files is an incremental. For example, it might be
-reasonable to take a full snapshot of a database environment weekly or
-monthly, and then archive additional log files daily. Using both the
+backups. A snapshot is a full backup, whereas the periodic archival of
+the current log files is an incremental backup. For example, it might
+be reasonable to take a full snapshot of a database environment weekly
+or monthly, and archive additional log files daily. Using both the
snapshot and the log files, a catastrophic crash at any time can be
-recovered to the time of the most recent log archival, a time long after
-the original snapshot.
+recovered to the time of the most recent log archival; a time long after
+the original snapshot.</p>
<p>To create a standard backup of your database that can be used to recover
-from catastrophic failure, take the following steps:
-<p><ol>
-<p><li>Commit or abort all on-going transactions.
-<p><li>Force an environment checkpoint (see <a href="../../utility/db_checkpoint.html">db_checkpoint</a> for more
-information).
+from catastrophic failure, take the following steps:</p>
+<ol>
+<p><li>Commit or abort all ongoing transactions.
<p><li>Stop writing your databases until the backup has completed. Read-only
operations are permitted, but no write operations and no filesystem
-operations may be performed, e.g., the <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> and
-<a href="../../api_c/db_open.html">DB-&gt;open</a> functions may not be called).
-<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-s</b> to identify all of the database data
-files, and copy them to a backup device, such as CDROM, alternate disk,
-or tape. Obviously, the reliability of your archive media will affect
-the safety of your data.
+operations may be performed (for example, the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> and
+<a href="../../api_c/db_open.html">DB-&gt;open</a> methods may not be called).
+<p><li>Force an environment checkpoint (see <a href="../../utility/db_checkpoint.html">db_checkpoint</a> for more
+information).
+<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-s</b> to identify all the database data
+files, and copy them to a backup device such as CD-ROM, alternate disk,
+or tape.
<p>If the database files are stored in a separate directory from the other
Berkeley DB files, it may be simpler to archive the directory itself instead
-of the individual files (see <a href="../../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a> for additional
-information). If you are performing a hot backup, the utility you use
-to copy the files must read database pages atomically (as described by
-<a href="../../ref/transapp/reclimit.html">Berkeley DB recoverability</a>).
-<p><b>Note: if any of the database files did not have an open DB
-handle during the lifetime of the current log files, <a href="../../utility/db_archive.html">db_archive</a>
-will not list them in its output!</b> For this reason, it may be simpler
-to use a separate database file directory, and archive the entire
-directory instead of only the files listed by <a href="../../utility/db_archive.html">db_archive</a>.
+of the individual files (see <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> for additional
+information). <b>Note: if any of the database files did not have
+an open <a href="../../api_c/db_class.html">DB</a> handle during the lifetime of the current log files,
+<a href="../../utility/db_archive.html">db_archive</a> will not list them in its output!</b> This is another
+reason it may be simpler to use a separate database file directory and
+archive the entire directory instead of archiving only the files listed
+by <a href="../../utility/db_archive.html">db_archive</a>.</p>
+<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-l</b> to identify all the log files,
+and copy the last one (that is, the one with the highest number) to a
+backup device such as CD-ROM, alternate disk, or tape.
</ol>
+<a name="4"><!--meow--></a>
<p>To create a <i>hot</i> backup of your database that can be used to
-recover from catastrophic failure, take the following steps:
-<p><ol>
-<p><li>Archive your databases as described in Step #4 above. You
-do not have to halt on-going transactions or force a checkpoint.
-<p><li>When performing a hot backup, you must additionally archive the active
-log files. Note that the order of these two operations is required,
+recover from catastrophic failure, take the following steps:</p>
+<ol>
+<p><li>Run db_archive to identify those log files which are not
+in use. These log files are not part of this hot backup and can
+be discarded after the hot backup is successful. They can be used
+with the previous hot backup to bring the databases forward to
+this point.
+<p><li>Archive your databases, as described in the previous step #4.
+You do not have to halt ongoing transactions or force a
+checkpoint. In the case of a hot backup, the utility you use to copy
+the databases must read database pages atomically (as described by
+<a href="../../ref/transapp/reclimit.html">Berkeley DB recoverability</a>).
+<p><li>When performing a hot backup, you must additionally archive all of the
+log files not identified in step #1.
+Note that the order of these two operations is required,
and the database files must be archived before the log files. This
means that if the database files and log files are in the same
-directory, you cannot simply archive the directory, you must make sure
+directory, you cannot simply archive the directory; you must make sure
that the correct order of archival is maintained.
-<p>To archive your log files, run the <a href="../../utility/db_archive.html">db_archive</a> utility, using
-the <b>-l</b> option, to identify all of the database log files, and
+<p>To archive your log files, run the <a href="../../utility/db_archive.html">db_archive</a> utility using
+the <b>-l</b> option to identify all the database log files, and
copy them to your backup media. If the database log files are stored
in a separate directory from the other database files, it may be simpler
to archive the directory itself instead of the individual files (see
-the <a href="../../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a> function for more information).
+the <a href="../../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a> method for more information).</p>
</ol>
<p>Once these steps are completed, your database can be recovered from
catastrophic failure (see <a href="recovery.html">Recovery procedures</a> for
-more information).
+more information).</p>
<p>To update your snapshot so that recovery from catastrophic failure is
-possible up to a new point in time, repeat step #2 under the hot backup
-instructions, copying all existing log files to a backup device. This
-is applicable to both standard and hot backups, that is, you can update
-snapshots made in either way. Each time both the database and log files
+possible up to a new point in time, repeat step 2 under the hot backup
+instructions -- copying all existing log files to a backup device. This
+is applicable to both standard and hot backups; that is, you can update
+snapshots made either way. Each time both the database and log files
are copied to backup media, you may discard all previous database
snapshots and saved log files. Archiving additional log files does not
-allow you to discard either previous database snapshots or log files.
+allow you to discard either previous database snapshots or log files.</p>
<p>The time to restore from catastrophic failure is a function of the
number of log records that have been written since the snapshot was
originally created. Perhaps more importantly, the more separate pieces
-of backup media you use, the more likely that you will have a problem
-reading from one of them. For these reasons, it is often best to make
-snapshots on a regular basis.
-<p><b>For archival safety, ensure that you have multiple copies of your
-database backups, verify that your archival media is error-free and
-readable, and that copies of your backups are stored off-site!</b>
+of backup media you use, the more likely it is that you will have a
+problem reading from one of them. For these reasons, it is often best
+to make snapshots on a regular basis.</p>
+<p><b>Obviously, the reliability of your archive media will affect the safety
+of your data. For archival safety, ensure that you have multiple copies
+of your database backups, verify that your archival media is error-free
+and readable, and that copies of your backups are stored offsite!</b></p>
<p>The functionality provided by the <a href="../../utility/db_archive.html">db_archive</a> utility is also
available directly from the Berkeley DB library. The following code fragment
-prints out a list of log and database files that need to be archived.
-<p><blockquote><pre>void
+prints out a list of log and database files that need to be archived:</p>
+<blockquote><pre>void
log_archlist(DB_ENV *dbenv)
{
int ret;
char **begin, **list;
<p>
/* Get the list of database files. */
- if ((ret = log_archive(dbenv,
- &list, DB_ARCH_ABS | DB_ARCH_DATA, NULL)) != 0) {
- dbenv-&gt;err(dbenv, ret, "log_archive: DB_ARCH_DATA");
+ if ((ret = dbenv-&gt;log_archive(dbenv,
+ &list, DB_ARCH_ABS | DB_ARCH_DATA)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_ENV-&gt;log_archive: DB_ARCH_DATA");
exit (1);
}
if (list != NULL) {
@@ -131,9 +142,9 @@ log_archlist(DB_ENV *dbenv)
}
<p>
/* Get the list of log files. */
- if ((ret = log_archive(dbenv,
- &list, DB_ARCH_ABS | DB_ARCH_LOG, NULL)) != 0) {
- dbenv-&gt;err(dbenv, ret, "log_archive: DB_ARCH_LOG");
+ if ((ret = dbenv-&gt;log_archive(dbenv,
+ &list, DB_ARCH_ABS | DB_ARCH_LOG)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_ENV-&gt;log_archive: DB_ARCH_LOG");
exit (1);
}
if (list != NULL) {
@@ -142,8 +153,8 @@ log_archlist(DB_ENV *dbenv)
free (begin);
}
}</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/logfile.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/logfile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/atomicity.html b/db/docs/ref/transapp/atomicity.html
index 24ad1eb7b..a508d871f 100644
--- a/db/docs/ref/transapp/atomicity.html
+++ b/db/docs/ref/transapp/atomicity.html
@@ -1,20 +1,20 @@
-<!--Id: atomicity.so,v 10.3 2002/05/17 15:48:41 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: atomicity.so,v 10.3 2002/05/17 15:48:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Atomicity</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
-<td align=right><a href="../../ref/transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Atomicity</h1>
+<h3 align=center>Atomicity</h3>
<p>The second reason listed for using transactions was <i>atomicity</i>.
Atomicity means that multiple operations can be grouped into a single
logical entity, that is, other threads of control accessing the database
@@ -22,7 +22,7 @@ will either see all of the changes or none of the changes. Atomicity
is important for applications wanting to update two related databases
(for example, a primary database and secondary index) in a single
logical action. Or, for an application wanting to update multiple
-records in one database in a single logical action.
+records in one database in a single logical action.</p>
<p>Any number of operations on any number of databases can be included in
a single transaction to ensure the atomicity of the operations. There
is, however, a trade-off between the number of operations included in
@@ -38,7 +38,7 @@ can increase overall throughput. (There is one exception to this: the
transactions to exhibit the ACI (atomicity, consistency and isolation)
properties, but not D (durability); avoiding the write and/or
synchronous disk I/O on transaction commit greatly increases transaction
-throughput for some applications.)
+throughput for some applications.)</p>
<p>When applications do create complex transactions, they often avoid
having more than one complex transaction at a time because simple
operations like a single <a href="../../api_c/db_put.html">DB-&gt;put</a> are unlikely to deadlock with
@@ -50,14 +50,14 @@ of those sets may be encapsulated in a nested transaction. Because
nested transactions may be individually aborted and retried without
causing the entire transaction to be aborted, this allows complex
transactions to proceed even in the face of heavy contention, repeatedly
-trying the suboperations until they succeed.
+trying the suboperations until they succeed.</p>
<p>It is also helpful to order operations within a transaction; that is,
access the databases and items within the databases in the same order,
to the extent possible, in all transactions. Accessing databases and
items in different orders greatly increases the likelihood of operations
-being blocked and failing due to deadlocks.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
+being blocked and failing due to deadlocks.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/checkpoint.html b/db/docs/ref/transapp/checkpoint.html
index b9bd81a3e..8ef3697b4 100644
--- a/db/docs/ref/transapp/checkpoint.html
+++ b/db/docs/ref/transapp/checkpoint.html
@@ -1,45 +1,45 @@
-<!--$Id: checkpoint.so,v 10.13 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: checkpoint.so,v 10.20 2002/06/24 14:51:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Checkpoints</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/archival.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/archival.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Checkpoints</h1>
+<h3 align=center>Checkpoints</h3>
<p>The second component of the infrastructure is performing checkpoints of
the log files. As transactions commit, change records are written into
the log files, but the actual changes to the database are not
necessarily written to disk. When a checkpoint is performed, the
changes to the database that are part of committed transactions are
-written into the backing database file.
+written into the backing database file.</p>
<p>Performing checkpoints is necessary for two reasons. First, you can
-only remove the Berkeley DB log files from your system after a checkpoint.
+remove the Berkeley DB log files from your system only after a checkpoint.
Second, the frequency of your checkpoints is inversely proportional to
the amount of time it takes to run database recovery after a system or
-application failure.
+application failure.</p>
<p>Once the database pages are written, log files can be archived and removed
from the system because they will never be needed for anything other than
catastrophic failure. In addition, recovery after system or application
-failure only has to redo or undo changes since the last checkpoint, since
-changes before the checkpoint have all been flushed to the filesystem.
+failure has to redo or undo changes only since the last checkpoint since
+changes before the checkpoint have all been flushed to the filesystem.</p>
<p>Berkeley DB provides a separate utility, <a href="../../utility/db_checkpoint.html">db_checkpoint</a>, which can be
used to perform checkpoints. Alternatively, applications can write
-their own checkpoint utility using the underlying <a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a>
+their own checkpoint utility using the underlying <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a>
function. The following code fragment checkpoints the database
-environment every 60 seconds:
-<p><blockquote><pre>int
+environment every 60 seconds:</p>
+<blockquote><pre>int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
@@ -75,7 +75,7 @@ main(int argc, char *argv)
<p>
/*
* Open database:
- * Key is a name; Data is: company name, address, cat breeds.
+ * Key is a name; Data is: company name, cat breeds.
*/
db_open(dbenv, &db_cats, "cats", 1);
<p>
@@ -87,7 +87,6 @@ main(int argc, char *argv)
add_cat(dbenv, db_cats,
"Amy Adams",
"Sleepycat Software",
- "394 E. Riding Dr., Carlisle, MA 01741, USA",
"abyssinian",
"bengal",
"chartreaux",
@@ -107,21 +106,18 @@ checkpoint_thread(void *arg)
<p>
/* Checkpoint once a minute. */
for (;; sleep(60))
- switch (ret = txn_checkpoint(dbenv, 0, 0, 0)) {
- case 0:
- case DB_INCOMPLETE:
- break;
- default:
+ if ((ret = dbenv-&gt;txn_checkpoint(dbenv, 0, 0, 0)) != 0) {
dbenv-&gt;err(dbenv, ret, "checkpoint thread");
exit (1);
}
<p>
/* NOTREACHED */
}</b></pre></blockquote>
-<p>As checkpoints can be quite expensive, choosing how often to perform a
-checkpoint is a common tuning parameter for Berkeley DB applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/archival.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>Because checkpoints can be quite expensive, choosing how often to
+perform a checkpoint is a common tuning parameter for Berkeley DB
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/archival.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/cursor.html b/db/docs/ref/transapp/cursor.html
index bb1aff98a..0a72b55a2 100644
--- a/db/docs/ref/transapp/cursor.html
+++ b/db/docs/ref/transapp/cursor.html
@@ -1,39 +1,38 @@
-<!--$Id: cursor.so,v 1.2 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: cursor.so,v 1.11 2002/06/24 14:51:05 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transactional cursors</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/nested.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transactional cursors</h1>
-<p>Berkeley DB cursors may be used inside a transaction, exactly like any other
-DB method. The enclosing transaction ID must be specified when
+<h3 align=center>Transactional cursors</h3>
+<p>Berkeley DB cursors may be used inside a transaction, exactly as any other
+<a href="../../api_c/db_class.html">DB</a> method. The enclosing transaction ID must be specified when
the cursor is created, but it does not then need to be further specified
on operations performed using the cursor. One important point to
remember is that a cursor <b>must be closed</b> before the enclosing
-transaction is committed or aborted.
+transaction is committed or aborted.</p>
<p>The following code fragment uses a cursor to store a new key in the cats
database with four associated data items. The key is a name. The data
items are a company name, an address, and a list of the breeds of cat
owned. Each of the data entries is stored as a duplicate data item.
In this example, transactions are necessary to ensure that either all or none
-of the data items appear in case of system or application failure.
-<p><blockquote><pre>int
+of the data items appear in case of system or application failure.</p>
+<blockquote><pre>int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
- pthread_t ptid;
int ch;
<p>
while ((ch = getopt(argc, argv, "")) != EOF)
@@ -56,7 +55,7 @@ main(int argc, char *argv)
<p>
/*
* Open database:
- * Key is a name; Data is: company name, address, cat breeds.
+ * Key is a name; Data is: company name, cat breeds.
*/
db_open(dbenv, &db_cats, "cats", 1);
<p>
@@ -68,7 +67,6 @@ main(int argc, char *argv)
<b> add_cat(dbenv, db_cats,
"Amy Adams",
"Sleepycat Software",
- "394 E. Riding Dr., Carlisle, MA 01741, USA",
"abyssinian",
"bengal",
"chartreaux",
@@ -77,25 +75,27 @@ main(int argc, char *argv)
return (0);
}
<p>
-<b>void
+<b>int
add_cat(DB_ENV *dbenv, DB *db, char *name, ...)
{
va_list ap;
DBC *dbc;
DBT key, data;
DB_TXN *tid;
- int ret;
+ int fail, ret, t_ret;
char *s;
<p>
/* Initialization. */
+ fail = 0;
+<p>
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
key.data = name;
key.size = strlen(name);
<p>
retry: /* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv-&gt;txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_ENV-&gt;txn_begin");
exit (1);
}
<p>
@@ -105,15 +105,15 @@ retry: /* Begin the transaction. */
case DB_NOTFOUND:
break;
case DB_LOCK_DEADLOCK:
- /* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_abort");
+ default:
+ /* Retry the operation. */
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
exit (1);
}
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
goto retry;
- default:
- dbenv-&gt;err(dbenv, ret, "db-&gt;del: %s", name);
- exit (1);
}
<p>
/* Create a cursor. */
@@ -131,23 +131,22 @@ retry: /* Begin the transaction. */
case 0:
break;
case DB_LOCK_DEADLOCK:
+ default:
va_end(ap);
<p>
- /* Deadlock: retry the operation. */
- if ((ret = dbc-&gt;c_close(dbc)) != 0) {
+ /* Retry the operation. */
+ if ((t_ret = dbc-&gt;c_close(dbc)) != 0) {
dbenv-&gt;err(
- dbenv, ret, "dbc-&gt;c_close");
+ dbenv, t_ret, "dbc-&gt;c_close");
exit (1);
}
- if ((ret = txn_abort(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_abort");
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
exit (1);
}
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
goto retry;
- default:
- /* Error: run recovery. */
- dbenv-&gt;err(dbenv, ret, "dbc-&gt;put: %s/%s", name, s);
- exit (1);
}
}
va_end(ap);
@@ -157,13 +156,14 @@ retry: /* Begin the transaction. */
dbenv-&gt;err(dbenv, ret, "dbc-&gt;c_close");
exit (1);
}
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_commit");
+ if ((ret = tid-&gt;commit(tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_TXN-&gt;commit");
exit (1);
}
+ return (0);
}</b></pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/read.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/nested.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/data_open.html b/db/docs/ref/transapp/data_open.html
index 904778c35..0f930e616 100644
--- a/db/docs/ref/transapp/data_open.html
+++ b/db/docs/ref/transapp/data_open.html
@@ -1,31 +1,30 @@
-<!--$Id: data_open.so,v 1.3 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: data_open.so,v 1.12 2002/06/24 14:51:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Opening the databases</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/env_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/put.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/env_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening the databases</h1>
+<h3 align=center>Opening the databases</h3>
<p>Next, we open three databases ("color" and "fruit" and "cats"), in the
-database environment. Again, our DB database handles are
+database environment. Again, our <a href="../../api_c/db_class.html">DB</a> database handles are
declared to be free-threaded using the <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag, and so
-may be used by any number of threads we subsequently create.
-<p><blockquote><pre>int
+may be used by any number of threads we subsequently create.</p>
+<blockquote><pre>int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
- pthread_t ptid;
int ch;
<p>
while ((ch = getopt(argc, argv, "")) != EOF)
@@ -41,21 +40,24 @@ main(int argc, char *argv)
env_open(&dbenv);
<p>
<b> /* Open database: Key is fruit class; Data is specific type. */
- db_open(dbenv, &db_fruit, "fruit", 0);
+ if (db_open(dbenv, &db_fruit, "fruit", 0))
+ return (1);
<p>
/* Open database: Key is a color; Data is an integer. */
- db_open(dbenv, &db_color, "color", 0);
+ if (db_open(dbenv, &db_color, "color", 0))
+ return (1);
<p>
/*
* Open database:
- * Key is a name; Data is: company name, address, cat breeds.
+ * Key is a name; Data is: company name, cat breeds.
*/
- db_open(dbenv, &db_cats, "cats", 1);</b>
+ if (db_open(dbenv, &db_cats, "cats", 1))
+ return (1);</b>
<p>
return (0);
}
<p>
-<b>void
+<b>int
db_open(DB_ENV *dbenv, DB **dbp, char *name, int dups)
{
DB *db;
@@ -64,13 +66,14 @@ db_open(DB_ENV *dbenv, DB **dbp, char *name, int dups)
/* Create the database handle. */
if ((ret = db_create(&db, dbenv, 0)) != 0) {
dbenv-&gt;err(dbenv, ret, "db_create");
- exit (1);
+ return (1);
}
<p>
/* Optionally, turn on duplicate data items. */
if (dups && (ret = db-&gt;set_flags(db, DB_DUP)) != 0) {
+ (void)db-&gt;close(db, 0);
dbenv-&gt;err(dbenv, ret, "db-&gt;set_flags: DB_DUP");
- exit (1);
+ return (1);
}
<p>
/*
@@ -79,22 +82,19 @@ db_open(DB_ENV *dbenv, DB **dbp, char *name, int dups)
* free-threaded handle
* read/write owner only
*/
- if ((ret = db-&gt;open(db, name, NULL,
- DB_BTREE, DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR)) != 0) {
+ if ((ret = db-&gt;open(db, NULL, name, NULL, DB_BTREE,
+ DB_AUTO_COMMIT | DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR)) != 0) {
+ (void)db-&gt;close(db, 0);
dbenv-&gt;err(dbenv, ret, "db-&gt;open: %s", name);
- exit (1);
+ return (1);
}
<p>
*dbp = db;
+ return (0);
}</b></pre></blockquote>
-<p>There is no reason to wrap database opens inside of transactions. All
-database opens are transaction protected internally to Berkeley DB, and
-applications using transaction-protected environments can simply rely on
-files either being successfully re-created in a recovered environment,
-or not appearing at all.
-<p>After running this initial code, we can use the <a href="../../utility/db_stat.html">db_stat</a> utility
-to display information about a database we have created:
-<p><blockquote><pre>prompt&gt; db_stat -h TXNAPP -d color
+<p>After opening the database, we can use the <a href="../../utility/db_stat.html">db_stat</a> utility to
+display information about a database we have created:</p>
+<blockquote><pre>prompt&gt; db_stat -h TXNAPP -d color
53162 Btree magic number.
8 Btree version number.
Flags:
@@ -112,8 +112,31 @@ Flags:
0 Number of tree overflow pages.
0 Number of bytes free in tree overflow pages (0% ff).
0 Number of pages on the free list.</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/env_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/put.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>The database open must be enclosed within a transaction in order to be
+recoverable. The transaction will ensure that created files are
+re-created in recovered environments (or do not appear at all).
+Additional database operations or operations on other databases can be
+included in the same transaction, of course. In the simple case, where
+the open is the only operation in the transaction, an application can
+set the <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag instead of creating and managing
+its own transaction handle. The <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag will
+internally wrap the operation in a transaction, simplifying application
+code.</p>
+<p>The previous example is the simplest case of transaction protection for
+database open. Obviously, additional database operations can be done
+in the scope of the same transaction. For example, an application
+maintaining a list of the databases in a database environment in a
+well-known file might include an update of the list in the same
+transaction in which the database is created. Or, an application might
+create both a primary and secondary database in a single transaction.</p>
+<p><a href="../../api_c/db_class.html">DB</a> handles that will later be used for transactionally protected
+operations must be opened within a transaction. Specifying a
+transaction handle to operations using handles not opened within a
+transaction will return an error. Similarly, not specifying a
+transaction handle to operations using handles that were opened within
+a transaction will also return an error.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/env_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/deadlock.html b/db/docs/ref/transapp/deadlock.html
index 65765ec59..6167999aa 100644
--- a/db/docs/ref/transapp/deadlock.html
+++ b/db/docs/ref/transapp/deadlock.html
@@ -1,49 +1,66 @@
-<!--$Id: deadlock.so,v 10.15 2000/08/10 17:54:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: deadlock.so,v 10.20 2002/06/24 14:51:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Deadlock detection</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/admin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/admin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Deadlock detection</h1>
-<p>The first component of the infrastructure, deadlock detection, is not
-so much a requirement specific to transaction protected applications,
-but rather is necessary for almost all applications where more than a
-single thread of control will be accessing the database at one time.
-While Berkeley DB automatically handles database locking, it is normally
-possible for deadlock to occur. It is not required by all transactional
-applications, but exceptions are rare.
+<h3 align=center>Deadlock detection</h3>
+<p>The first component of the infrastructure, <i>deadlock
+detection</i>, is not so much a requirement specific to
+transaction-protected applications, but instead is necessary for almost
+all applications in which more than a single thread of control will be
+accessing the database at one time. Even when Berkeley DB automatically
+handles database locking, it is normally possible for deadlock to occur.
+Because the underlying database access methods may update multiple pages
+during a single Berkeley DB API call, deadlock is possible even when threads
+of control are making only single update calls into the database. The
+exception to this rule is when all the threads of control accessing the
+database are read-only or when the Berkeley DB Concurrent Data Store product is used; the Berkeley DB Concurrent Data Store
+product guarantees deadlock-free operation at the expense of reduced
+concurrency.</p>
<p>When the deadlock occurs, two (or more) threads of control each request
-additional locks which can never be granted because one of the threads
-of control waiting holds the requested resource.
-<p>For example, consider two processes A and B. Let's say that A obtains
-an exclusive lock on item X, and B obtains an exclusive lock on item Y.
-Then, A requests a lock on Y and B requests a lock on X. A will wait
-until resource Y becomes available and B will wait until resource X
-becomes available. Unfortunately, since both A and B are waiting,
-neither will release the locks they hold and neither will ever obtain
-the resource on which it is waiting. In order to detect that deadlock
-has happened, a separate process or thread must review the locks
-currently held in the database. If deadlock has occurred, a victim must
-be selected, and that victim will then return the error
-<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> from whatever Berkeley DB call it was making.
-<p>Berkeley DB provides a separate UNIX-style utility which can be used to
-perform this deadlock detection, named <a href="../../utility/db_deadlock.html">db_deadlock</a>.
+additional locks that can never be granted because one of the threads
+of control waiting holds the requested resource. For example, consider
+two processes: A and B. Let's say that A obtains a write lock on item
+X, and B obtains a write lock on item Y. Then, A requests a lock on Y,
+and B requests a lock on X. A will wait until resource Y becomes
+available and B will wait until resource X becomes available.
+Unfortunately, because both A and B are waiting, neither will release
+the locks they hold and neither will ever obtain the resource on which
+it is waiting. For another example, consider two transactions, A and
+B, each of which may want to modify item X. Assume that transaction A
+obtains a read lock on X and confirms that a modification is needed.
+Then it is descheduled and the thread containing transaction B runs.
+At that time, transaction B obtains a read lock on X and confirms that
+it also wants to make a modification. Both transactions A and B will
+block when they attempt to upgrade their read locks to write locks
+because the other already holds a read lock. This is a deadlock.
+Transaction A cannot make forward progress until Transaction B releases
+its read lock on X, but Transaction B cannot make forward progress until
+Transaction A releases its read lock on X.</p>
+<p>In order to detect that deadlock has happened, a separate process or
+thread must review the locks currently held in the database. If
+deadlock has occurred, a victim must be selected, and that victim will
+then return the error <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> from whatever Berkeley DB call
+it was making. Berkeley DB provides a separate UNIX-style utility that can
+be used to perform this deadlock detection, named <a href="../../utility/db_deadlock.html">db_deadlock</a>.
Alternatively, applications can create their own deadlock utility or
-thread using the underlying <a href="../../api_c/lock_detect.html">lock_detect</a> function, or specify
+thread using the underlying <a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> function, or specify
that Berkeley DB run the deadlock detector internally whenever there is a
-conflict over a lock (see <a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a> for more
-information). The following code fragment does the latter:
-<p><blockquote><pre>void
+conflict over a lock (see <a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a> for more
+information). The following code fragment does the latter:</p>
+<blockquote><pre>void
env_open(DB_ENV **dbenvp)
{
DB_ENV *dbenv;
@@ -58,6 +75,7 @@ env_open(DB_ENV **dbenvp)
<p>
/* Set up error handling. */
dbenv-&gt;set_errpfx(dbenv, "txnapp");
+ dbenv-&gt;set_errfile(dbenv, stderr);
<p>
<b> /* Do deadlock detection internally. */
if ((ret = dbenv-&gt;set_lk_detect(dbenv, DB_LOCK_DEFAULT)) != 0) {
@@ -84,9 +102,9 @@ env_open(DB_ENV **dbenvp)
}</pre></blockquote>
<p>Deciding how often to run the deadlock detector and which of the
deadlocked transactions will be forced to abort when the deadlock is
-detected is a common tuning parameter for Berkeley DB applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/admin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
+detected is a common tuning parameter for Berkeley DB applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/admin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/env_open.html b/db/docs/ref/transapp/env_open.html
index 7209a3fef..6aa958e43 100644
--- a/db/docs/ref/transapp/env_open.html
+++ b/db/docs/ref/transapp/env_open.html
@@ -1,48 +1,49 @@
-<!--$Id: env_open.so,v 1.1 2000/07/25 17:56:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env_open.so,v 1.4 2002/06/24 14:51:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Opening the environment</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/data_open.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/data_open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Opening the environment</h1>
+<h3 align=center>Opening the environment</h3>
<p>Creating transaction-protected applications using the Berkeley DB library is
-quite easy. Applications first use <a href="../../api_c/env_open.html">DBENV-&gt;open</a> to initialize
+quite easy. Applications first use <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> to initialize
the database environment. Transaction-protected applications normally
require all four Berkeley DB subsystems, so the <a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>,
-<a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>, <a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a> and <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flags
-should be specified.
-<p>Once the application has called <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, it opens its
+<a href="../../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>, <a href="../../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a>, and <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flags
+should be specified.</p>
+<p>Once the application has called <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, it opens its
databases within the environment. Once the databases are opened, the
application makes changes to the databases inside of transactions. Each
-set of changes that entail a unit of work should be surrounded by the
-appropriate <a href="../../api_c/txn_begin.html">txn_begin</a>, <a href="../../api_c/txn_commit.html">txn_commit</a> and <a href="../../api_c/txn_abort.html">txn_abort</a>
+set of changes that entails a unit of work should be surrounded by the
+appropriate <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>, <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>, and <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a>
calls. The Berkeley DB access methods will make the appropriate calls into
-the lock, log and memory pool subsystems in order to guarantee
+the Lock, Log and Memory Pool subsystems in order to guarantee
transaction semantics. When the application is ready to exit, all
-outstanding transactions should have been committed or aborted.
+outstanding transactions should have been committed or aborted.</p>
<p>Databases accessed by a transaction must not be closed during the
transaction. Once all outstanding transactions are finished, all open
Berkeley DB files should be closed. When the Berkeley DB database files have been
-closed, the environment should be closed by calling <a href="../../api_c/env_close.html">DBENV-&gt;close</a>.
-<p>The following code fragment creates the database environment directory,
-then opens the environment, running recovery. Our DB_ENV
+closed, the environment should be closed by calling
+<a href="../../api_c/env_close.html">DB_ENV-&gt;close</a>.</p>
+<p>The following code fragment creates the database environment directory
+then opens the environment, running recovery. Our <a href="../../api_c/env_class.html">DB_ENV</a>
database environment handle is declared to be free-threaded using the
<a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a> flag, and so may be used by any number of threads that
-we may subsequently create.
-<p><blockquote><pre>#include &lt;sys/types.h&gt;
+we may subsequently create.</p>
+<blockquote><pre>#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
<p>
#include &lt;errno.h&gt;
-#include &lt;pthread.h&gt;
#include &lt;stdarg.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
@@ -58,11 +59,9 @@ void env_open(DB_ENV **);
int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
- pthread_t ptid;
int ch;
<p>
while ((ch = getopt(argc, argv, "")) != EOF)
@@ -116,6 +115,7 @@ env_open(DB_ENV **dbenvp)
<p>
/* Set up error handling. */
dbenv-&gt;set_errpfx(dbenv, "txnapp");
+ dbenv-&gt;set_errfile(dbenv, stderr);
<p>
/*
* Open a transactional environment:
@@ -128,15 +128,17 @@ env_open(DB_ENV **dbenvp)
DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG |
DB_INIT_MPOOL | DB_INIT_TXN | DB_RECOVER | DB_THREAD,
S_IRUSR | S_IWUSR)) != 0) {
- dbenv-&gt;err(dbenv, ret, "dbenv-&gt;open: %s", ENV_DIRECTORY);
+ (void)dbenv-&gt;close(dbenv, 0);
+ fprintf(stderr, "dbenv-&gt;open: %s: %s\n",
+ ENV_DIRECTORY, db_strerror(ret));
exit (1);
}
<p>
*dbenvp = dbenv;
}</pre></blockquote>
<p>After running this initial program, we can use the <a href="../../utility/db_stat.html">db_stat</a>
-utility to display the contents of the environment directory:
-<p><blockquote><pre>prompt&gt; db_stat -e -h TXNAPP
+utility to display the contents of the environment directory:</p>
+<blockquote><pre>prompt&gt; db_stat -e -h TXNAPP
3.2.1 Environment version.
120897 Magic number.
0 Panic value.
@@ -167,8 +169,8 @@ Txn Region: 5.
-1 Segment ID.
1 Locks granted without waiting.
0 Locks granted after waiting.</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/data_open.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/app.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/data_open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/faq.html b/db/docs/ref/transapp/faq.html
index d296ca164..6996e6e4a 100644
--- a/db/docs/ref/transapp/faq.html
+++ b/db/docs/ref/transapp/faq.html
@@ -1,22 +1,22 @@
-<!--Id: faq.so,v 10.6 2002/09/09 14:52:40 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.6 2002/09/09 14:52:40 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transaction FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
-<td align=right><a href="../../ref/transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transaction FAQ</h1>
-<p><ol>
+<h3 align=center>Transaction FAQ</h3>
+<ol>
<p><li><b>What should a transactional program do when an error occurs?</b>
<p>Any time an error occurs, such that a transactionally protected set of
operations cannot complete successfully, the transaction must be
@@ -36,7 +36,7 @@ which likely indicates that the filesystem has no available disk space.
Applications must immediately call <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> when these returns
occur, as it is not possible to proceed otherwise. The only
unrecoverable error is <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, which indicates that the
-system must stop and recovery must be run.
+system must stop and recovery must be run.</p>
<p><li><b>How can hot backups work? Can't you get an inconsistent picture
of the database when you copy it?</b>
<p>First, Berkeley DB is based on the technique of "write-ahead logging", which
@@ -47,7 +47,7 @@ storage (that is, disk) before the database page where the change was
made is written to stable storage. Because of this guarantee, we know
that any change made to a database will appear either in just a log
file, or both the database and a log file, but never in just the
-database.
+database.</p>
<p>Second, you can always create a consistent and correct database based
on the log files and the databases from a database environment. So,
during a hot backup, we first make a copy of the databases and then a
@@ -66,7 +66,7 @@ write-ahead logging guarantees, we know that any page written to the
database will first be referenced in the log. If we copy the database
first, then we can also know that any inconsistency in the database will
be described in the log files, and so we know that we can fix everything
-up during recovery.
+up during recovery.</p>
<p><li><b>How can I move a database from one transactional environment
into another?</b>
<p>Because database pages contain references to log records, databases
@@ -74,7 +74,7 @@ cannot be simply moved into different database environments. To move
a database into a different environment, dump and reload the database
before moving it. If the database is too large to dump and reload, the
database may be prepared in place by setting the first eight bytes of
-each database page in the file to 0.
+each database page in the file to 0.</p>
<p><li><b>I'm seeing the error "log_flush: LSN past current end-of-log",
what does that mean?</b>
<p>The most common cause of this error is that a system administrator has
@@ -86,10 +86,10 @@ to dump and reload, the database may be repaired in place by setting
the first eight bytes of each database page in the file to 0, but if
you do that, you must verify your databases before using them again.
(It is possible for the databases to be corrupted when this happens,
-and the longer the application runs, the worse it can get.)
+and the longer the application runs, the worse it can get.)</p>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/rep/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rep/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/filesys.html b/db/docs/ref/transapp/filesys.html
index fc68089e9..7f91bc74e 100644
--- a/db/docs/ref/transapp/filesys.html
+++ b/db/docs/ref/transapp/filesys.html
@@ -1,62 +1,66 @@
-<!--$Id: filesys.so,v 10.30 2000/07/25 16:31:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: filesys.so,v 10.35 2002/02/05 18:34:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Recovery and filesystem operations</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/reclimit.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/hotfail.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/reclimit.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Recovery and filesystem operations</h1>
-<p>When running in a transaction-protected environment, database creation
-and deletion are logged as stand-alone transactions internal to Berkeley DB.
-That is, for each such operation a new transaction is begun and aborted
-or committed internally, so that they will be recovered during recovery.
-<p>The Berkeley DB API supports removing and renaming files. Renaming files is
-supported by the <a href="../../api_c/db_rename.html">DB-&gt;rename</a> method, and removing files by the
-<a href="../../api_c/db_remove.html">DB-&gt;remove</a> method. Berkeley DB does not permit specifying the
-<a href="../../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a> flag when opening a file in a transaction protected
-environment. This is an implicit file deletion, but one that does not
-always require the same operating system file permissions as does deleting
-and creating a file.
-<p>If you have changed the name of a file or deleted it outside of the Berkeley DB
-library (e.g., you explicitly removed a file using your normal operating
-system utilities), then it is possible that recovery will not be able to
-find a database referenced in the log. In this case, <a href="../../utility/db_recover.html">db_recover</a>
-will produce a warning message saying it was unable to locate a file it
-expected to find. This message is only a warning, as the file may have
-been subsequently deleted as part of normal database operations before
-the failure occurred, and so is not necessarily a problem.
-<p>Generally, any filesystem operations that are performed outside the Berkeley DB
-interface should be performed at the same time as making a snapshot of
-the database. To perform filesystem operations correctly:
-<p><ol>
-<p><li>Cleanly shutdown database operations.
-<p>To shutdown database operations cleanly, all applications accessing the
-database environment must be shutdown and a transaction checkpoint must
-be taken. If the applications are not implemented such that they can be
-shutdown gracefully (i.e., closing all references to the database
-environment), recovery must be performed after all applications have been
-killed to ensure that the underlying databases are consistent on disk.
-<p><li>Perform the filesystem operations, e.g., remove or rename one
-or more files.
+<h3 align=center>Recovery and filesystem operations</h3>
+<p>The Berkeley DB API supports creating, removing and renaming files. Creating
+files is supported by the <a href="../../api_c/db_open.html">DB-&gt;open</a> method. Removing files is
+supported by the <a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a> and <a href="../../api_c/db_remove.html">DB-&gt;remove</a> methods.
+Renaming files is supported by the <a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a> and
+<a href="../../api_c/db_rename.html">DB-&gt;rename</a> methods. (There are two methods for removing and renaming
+files because one of the methods is transactionally protected and one
+is not.)</p>
+<p>Berkeley DB does not permit specifying the <a href="../../api_c/db_open.html#DB_TRUNCATE">DB_TRUNCATE</a> flag when
+opening a file in a transaction-protected environment. This is an
+implicit file deletion, but one that does not always require the same
+operating system file permissions as deleting and creating a file do.</p>
+<p>If you have changed the name of a file or deleted it outside of the
+Berkeley DB library (for example, you explicitly removed a file using your
+normal operating system utilities), then it is possible that recovery
+will not be able to find a database to which the log refers. In this
+case, <a href="../../utility/db_recover.html">db_recover</a> will produce a warning message, saying it was
+unable to locate a file it expected to find. This message is only a
+warning because the file may have been subsequently deleted as part of
+normal database operations before the failure occurred, so is not
+necessarily a problem.</p>
+<p>Generally, any filesystem operations that are performed outside the
+Berkeley DB interface should be performed at the same time as making a
+snapshot of the database. To perform filesystem operations correctly,
+do the following:</p>
+<ol>
+<p><li>Cleanly shut down database operations.
+<p>To shut down database operations cleanly, all applications accessing
+the database environment must be shut down and a transaction checkpoint
+must be taken. If the applications are not implemented so they can be
+shut down gracefully (that is, closing all references to the database
+environment), recovery must be performed after all applications have
+been killed to ensure that the underlying databases are consistent on
+disk.</p>
+<p><li>Perform the filesystem operations; for example, remove or rename one or
+more files.
<p><li>Make an archival snapshot of the database.
-<p>While this step is not strictly necessary, it is strongly recommended.
-If this step is not performed, recovery from catastrophic failure will
-require that recovery first be performed up to the time of the
-filesystem operations, the filesystem operations be redone, and then
-recovery be performed from the filesystem operations forward.
+<p>Although this step is not strictly necessary, it is strongly
+recommended. If this step is not performed, recovery from catastrophic
+failure will require that recovery first be performed up to the time of
+the filesystem operations, the filesystem operations be redone, and then
+recovery be performed from the filesystem operations forward.</p>
<p><li>Restart the database applications.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/reclimit.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/hotfail.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/reclimit.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/hotfail.html b/db/docs/ref/transapp/hotfail.html
index 6a973be58..65c4c5b06 100644
--- a/db/docs/ref/transapp/hotfail.html
+++ b/db/docs/ref/transapp/hotfail.html
@@ -1,40 +1,40 @@
-<!--Id: hotfail.so,v 10.2 2001/07/28 01:45:07 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: hotfail.so,v 10.3 2003/11/23 02:06:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Hot failover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
-<td align=right><a href="../../ref/transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Hot failover</h1>
+<h3 align=center>Hot failover</h3>
<p>For some applications, it may be useful to periodically snapshot the
database environment for use as a hot failover should the primary system
fail. The following steps can be taken to keep a backup environment in
close synchrony with an active environment. The active environment is
entirely unaffected by these procedures, and both read and write
-operations are allowed during all steps described here.
-<p><ol>
+operations are allowed during all steps described here.</p>
+<ol>
<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-s</b> in the active environment to
identify all of the active environment's database files, and copy them
to the backup directory.
<p>If the database files are stored in a separate directory from the other
-Berkeley DB files, it may be simpler to copy the directory itself instead of
-the individual files (see <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a> for additional
-information). <b>Note: if any of the database files did not have
-an open <a href="../../api_c/db_class.html">DB</a> handle during the lifetime of the current log files,
-<a href="../../utility/db_archive.html">db_archive</a> will not list them in its output!</b> This is another
-reason it may be simpler to use a separate database file directory and
-copy the entire directory instead of archiving only the files listed by
-<a href="../../utility/db_archive.html">db_archive</a>.
+Berkeley DB files, it will be simpler (and much faster!) to copy the directory
+itself instead of the individual files (see <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a>
+for additional information). <b>Note: if any of the database
+files did not have an open <a href="../../api_c/db_class.html">DB</a> handle during the lifetime of the
+current log files, <a href="../../utility/db_archive.html">db_archive</a> will not list them in its
+output!</b> This is another reason it may be simpler to use a separate
+database file directory and copy the entire directory instead of
+archiving only the files listed by <a href="../../utility/db_archive.html">db_archive</a>.</p>
<p><li>Remove all existing log files from the backup directory.
<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-l</b> in the active environment to
identify all of the active environment's log files, and copy them to
@@ -45,7 +45,7 @@ catastrophically recover the copied environment.
<p>Steps 2, 3 and 4 may be repeated as often as you like. If Step 1 (the
initial copy of the database files) is repeated, then Steps 2, 3 and 4
<b>must</b> be performed at least once in order to ensure a consistent
-database environment snapshot.
+database environment snapshot.</p>
<p>These procedures must be integrated with your other archival procedures,
of course. If you are periodically removing log files from your active
environment, you must be sure to copy them to the backup directory
@@ -56,8 +56,8 @@ simple way to ensure this never happens is to archive the log files in
Step 2 as you remove them from the backup directory, and move inactive
log files from your active environment into your backup directory
(rather than copying them), in Step 3. The following steps describe
-this procedure in more detail:
-<p><ol>
+this procedure in more detail:</p>
+<ol>
<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> <b>-s</b> in the active environment to
identify all of the active environment's database files, and copy them
to the backup directory.
@@ -75,9 +75,9 @@ catastrophically recover the copied environment.
<p>As before, steps 2, 3, 4 and 5 may be repeated as often as you like.
If Step 1 (the initial copy of the database files) is repeated, then
Steps 2 through 5 <b>must</b> be performed at least once in order to
-ensure a consistent database environment snapshot.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
+ensure a consistent database environment snapshot.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/recovery.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/inc.html b/db/docs/ref/transapp/inc.html
index 35cf67d7e..1b3a5574b 100644
--- a/db/docs/ref/transapp/inc.html
+++ b/db/docs/ref/transapp/inc.html
@@ -1,55 +1,54 @@
-<!--$Id: inc.so,v 1.6 2000/08/08 19:58:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: inc.so,v 1.16 2003/11/20 02:19:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Atomicity</title>
+<title>Berkeley DB Reference Guide: Isolation</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/read.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/atomicity.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/read.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Atomicity</h1>
-<p>The third reason listed for using transactions was atomicity. Consider
-an application suite where multiple threads of control (multiple
-processes or threads in one or more processes) are changing the values
-associated with a key in one or more databases. Specifically, they are
-taking the current value, incrementing it, and then storing it back into
-the database.
-<p>Such an application requires atomicity. Since we want to change a value
-in the database, we must make sure that once we read it, no other thread
+<h3 align=center>Isolation</h3>
+<p>The third reason listed for using transactions was <i>isolation</i>.
+Consider an application suite in which multiple threads of control
+(multiple processes or threads in one or more processes) are changing
+the values associated with a key in one or more databases. Specifically,
+they are taking the current value, incrementing it, and then storing it
+back into the database.</p>
+<p>Such an application requires isolation. Because we want to change a value
+in the database, we must make sure that after we read it, no other thread
of control modifies it. For example, assume that both thread #1 and
thread #2 are doing similar operations in the database, where thread #1
is incrementing records by 3, and thread #2 is incrementing records by
5. We want to increment the record by a total of 8. If the operations
interleave in the right (well, wrong) order, that is not what will
-happen:
-<p><blockquote><pre>thread #1 <b>read</b> record: the value is 2
+happen:</p>
+<blockquote><pre>thread #1 <b>read</b> record: the value is 2
thread #2 <b>read</b> record: the value is 2
thread #2 <b>write</b> record + 5 back into the database (new value 7)
thread #1 <b>write</b> record + 3 back into the database (new value 5)</pre></blockquote>
<p>As you can see, instead of incrementing the record by a total of 8,
-we've only incremented it by 3, because thread #1 overwrote thread #2's
+we've incremented it only by 3 because thread #1 overwrote thread #2's
change. By wrapping the operations in transactions, we ensure that this
cannot happen. In a transaction, when the first thread reads the
record, locks are acquired that will not be released until the
transaction finishes, guaranteeing that all other readers and writers
will block, waiting for the first thread's transaction to complete (or
-to be aborted).
+to be aborted).</p>
<p>Here is an example function that does transaction-protected increments
-on database records to ensure atomicity.
-<p><blockquote><pre>int
+on database records to ensure isolation:</p>
+<blockquote><pre>int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
- pthread_t ptid;
int ch;
<p>
while ((ch = getopt(argc, argv, "")) != EOF)
@@ -72,7 +71,7 @@ main(int argc, char *argv)
<p>
/*
* Open database:
- * Key is a name; Data is: company name, address, cat breeds.
+ * Key is a name; Data is: company name, cat breeds.
*/
db_open(dbenv, &db_cats, "cats", 1);
<p>
@@ -84,12 +83,12 @@ main(int argc, char *argv)
return (0);
}
<p>
-<b>void
+<b>int
add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
{
DBT key, data;
DB_TXN *tid;
- int original, ret;
+ int fail, original, ret, t_ret;
char buf64;
<p>
/* Initialization. */
@@ -99,10 +98,10 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
memset(&data, 0, sizeof(data));
data.flags = DB_DBT_MALLOC;
<p>
- for (;;) {
+ for (fail = 0;;) {
/* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv-&gt;txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_ENV-&gt;txn_begin");
exit (1);
}
<p>
@@ -110,25 +109,23 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
* Get the key. If it exists, we increment the value. If it
* doesn't exist, we create it.
*/
- switch (ret = dbp-&gt;get(dbp, tid, &key, &data, 0)) {
+ switch (ret = dbp-&gt;get(dbp, tid, &key, &data, DB_RMW)) {
case 0:
original = atoi(data.data);
break;
case DB_LOCK_DEADLOCK:
- /* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_abort");
+ default:
+ /* Retry the operation. */
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
exit (1);
}
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
continue;
case DB_NOTFOUND:
original = 0;
break;
- default:
- /* Error: run recovery. */
- dbenv-&gt;err(
- dbenv, ret, "dbc-&gt;get: %s/%d", color, increment);
- exit (1);
}
if (data.data != NULL)
free(data.data);
@@ -142,60 +139,32 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
switch (ret = dbp-&gt;put(dbp, tid, &key, &data, 0)) {
case 0:
/* Success: commit the change. */
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_commit");
+ if ((ret = tid-&gt;commit(tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_TXN-&gt;commit");
exit (1);
}
- return;
+ return (0);
case DB_LOCK_DEADLOCK:
- /* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_abort");
+ default:
+ /* Retry the operation. */
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
exit (1);
}
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
break;
- default:
- /* Error: run recovery. */
- dbenv-&gt;err(
- dbenv, ret, "dbc-&gt;put: %s/%d", color, increment);
- exit (1);
}
}
}</b></pre></blockquote>
-<p>Any number of operations, on any number of databases, can be included
-in a single transaction to ensure atomicity of the operations. There
-is, however, a trade-off between the number of operations included in
-a single transaction and both throughput and the possibility of
-deadlock. The reason for this is because transactions acquire locks
-throughout their lifetime, and do not release them until transaction
-commit or abort. So, the more operations included in a transaction,
-the more likely that a transaction will block other operations and that
-deadlock will occur. However, each transaction commit requires a
-synchronous disk I/O, so grouping multiple operations into a transaction
-can increase overall throughput. (There is one exception to this. The
-<a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> option causes transactions to exhibit the ACI
-(atomicity, consistency and isolation) properties, but not D
-(durability), avoiding the synchronous disk I/O on transaction commit
-and greatly increasing transaction throughput for some applications.
-<p>When applications do create complex transactions, they often avoid
-having more than one complex transaction at a time, as simple operations
-like a single <a href="../../api_c/db_put.html">DB-&gt;put</a> are unlikely to deadlock with each other
-or the complex transaction, while multiple complex transactions are
-likely to deadlock with each other as they will both acquire many locks
-over their lifetime. Alternatively, complex transactions can be broken
-up into smaller sets of operations, and each of those sets may be
-encapsulated in a nested transaction. Because nested transactions may
-be individually aborted and retried without causing the entire
-transaction to be aborted, this allows complex transactions to proceed
-even in the face of heavy contention, repeatedly trying the
-sub-operations until they succeed.
-<p>It is also helpful to order operations within a transaction, that is,
-access the databases and items within the databases in the same order,
-to the extent possible, in all transactions. Accessing databases and
-items in different orders greatly increases the likelihood of operations
-being blocked and failing due to deadlocks.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/read.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>The <a href="../../api_c/dbc_get.html#DB_RMW">DB_RMW</a> flag in the <a href="../../api_c/db_get.html">DB-&gt;get</a> call specifies a write lock
+should be acquired on the key/data pair, instead of the more obvious read
+lock. We do this because the application expects to write the key/data
+pair in a subsequent operation, and the transaction is much more likely to
+deadlock if we first obtain a read lock and subsequently a write lock, than
+if we obtain the write lock initially.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/atomicity.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/read.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/intro.html b/db/docs/ref/transapp/intro.html
index 758169e85..80462c422 100644
--- a/db/docs/ref/transapp/intro.html
+++ b/db/docs/ref/transapp/intro.html
@@ -1,42 +1,42 @@
-<!--$Id: intro.so,v 10.35 2000/12/04 18:05:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.38 2001/05/08 15:03:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Building transaction protected applications</title>
+<title>Berkeley DB Reference Guide: Berkeley DB Transactional Data Store applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/cam/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/why.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../cam/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/why.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building transaction protected applications</h1>
+<h3 align=center>Berkeley DB Transactional Data Store applications</h3>
<p>It is difficult to write a useful transactional tutorial and still keep
-within reasonable bounds of documentation, that is, without writing a
+within reasonable bounds of documentation; that is, without writing a
book on transactional programming. We have two goals in this section:
to familiarize readers with the transactional interfaces of Berkeley DB and
-to provide code building blocks that will be useful in creating
-applications.
+to provide code building blocks that will be useful for creating
+applications.</p>
<p>We have not attempted to present this information using a real-world
application. First, transactional applications are often complex and
-time consuming to explain. Also, one of our goals is to give you an
+time-consuming to explain. Also, one of our goals is to give you an
understanding of the wide variety of tools Berkeley DB makes available to you,
and no single application would use most of the interfaces included in
the Berkeley DB library. For these reasons, we have chosen to simply present
the Berkeley DB data structures and programming solutions, using examples that
-differ from page to page. All of the examples are included in a
-standalone program you can examine, modify and run, and from which you
-will be able to extract code blocks for your own applications.
-Fragments of the program will be presented throughout this chapter, and
-the complete text of the <a href="transapp.txt">example program</a>
-for IEEE/ANSI Std 1003.1 (POSIX) standard systems is included in the Berkeley DB
-distribution.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/cam/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/why.html"><img src="../../images/next.gif" alt="Next"></a>
+differ from page to page. All the examples are included in a standalone
+program you can examine, modify, and run; and from which you will be able
+to extract code blocks for your own applications. Fragments of the
+program will be presented throughout this chapter, and the complete text
+of the <a href="transapp.cs">example program</a> for IEEE/ANSI Std 1003.1 (POSIX)
+standard systems is included in the Berkeley DB distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../cam/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/why.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/logfile.html b/db/docs/ref/transapp/logfile.html
index 64d8a9647..b27e359c9 100644
--- a/db/docs/ref/transapp/logfile.html
+++ b/db/docs/ref/transapp/logfile.html
@@ -1,104 +1,58 @@
-<!--$Id: logfile.so,v 11.1 2000/07/25 16:31:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: logfile.so,v 11.9 2002/11/13 21:49:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Log file removal</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/archival.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/recovery.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/archival.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/recovery.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Log file removal</h1>
+<h3 align=center>Log file removal</h3>
<p>The fourth component of the infrastructure, log file removal, concerns
the ongoing disk consumption of the database log files. Depending on
the rate at which the application writes to the databases and the
available disk space, the number of log files may increase quickly
-enough that disk space will be a resource problem. For this reason,
+enough so that disk space will be a resource problem. For this reason,
you will periodically want to remove log files in order to conserve disk
space. This procedure is distinct from database and log file archival
for catastrophic recovery, and you cannot remove the current log files
simply because you have created a database snapshot or copied log files
-to archival media.
-<p>Log files may be removed at any time, as long as:
-<ul type=disc>
-<li>the log file is not involved in an active transaction
-<li>at least two checkpoints have been written subsequent to the
-log file's creation, and
+to archival media.</p>
+<p>Log files may be removed at any time, as long as:</p>
+<p><ul type=disc>
+<li>the log file is not involved in an active transaction.
+<li>a checkpoint has been written subsequent to the log file's
+creation.
<li>the log file is not the only log file in the environment.
</ul>
-<p>Obviously, if you are preparing for catastrophic failure, you will want
-to copy the log files to archival media before you remove them.
-<p>To remove log files, take the following steps:
-<p><ol>
-<p><li>If you are concerned with catastrophic failure, first copy the log files
-to backup media as described in <a href="archival.html">Archival for
-catastrophic recovery</a>.
-<p><li>Run <a href="../../utility/db_archive.html">db_archive</a> without options to identify all of the log files
-that are no longer in use (e.g., no longer involved in an active
-transaction).
-<p><li>Remove those log files from the system.
+<p>If you are preparing for catastrophic failure, you will want to copy
+the log files to archival media before you remove them as described in
+<a href="archival.html">Database and log file archival</a>.</p>
+<p>If you are not preparing for catastrophic failure, any one of the
+following methods can be used to remove log files:</p>
+<ol>
+<p><li>Run the standalone <a href="../../utility/db_archive.html">db_archive</a> utility with the <b>-d</b>
+option, to remove any log files that are no longer needed at the time
+the command is executed.
+<p><li>Call the <a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a> method from the application, with the
+<a href="../../api_c/log_archive.html#DB_ARCH_REMOVE">DB_ARCH_REMOVE</a> flag, to remove any log files that are no longer
+needed at the time the call is made.
+<p><li>Call the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method from the application, with the
+<a href="../../api_c/env_set_flags.html#DB_LOG_AUTOREMOVE">DB_LOG_AUTOREMOVE</a> flag, to remove any log files that are no
+longer needed on an ongoing basis. With this configuration, Berkeley DB will
+automatically remove log files, and the application will not have an
+opportunity to copy the log files to backup media.
</ol>
-<p>The functionality provided by the <a href="../../utility/db_archive.html">db_archive</a> utility is also
-available directly from the Berkeley DB library. The following code fragment
-removes log files that are no longer needed by the database
-environment.
-<p><blockquote><pre>int
-main(int argc, char *argv)
-{
- ...
-<p>
-<b> /* Start a logfile removal thread. */
- if ((errno = pthread_create(
- &ptid, NULL, logfile_thread, (void *)dbenv)) != 0) {
- fprintf(stderr,
- "txnapp: failed spawning log file removal thread: %s\n",
- strerror(errno));
- exit (1);
- }</b>
-<p>
- ...
-}
-<p>
-<b>void *
-logfile_thread(void *arg)
-{
- DB_ENV *dbenv;
- int ret;
- char **begin, **list;
-<p>
- dbenv = arg;
- dbenv-&gt;errx(dbenv,
- "Log file removal thread: %lu", (u_long)pthread_self());
-<p>
- /* Check once every 5 minutes. */
- for (;; sleep(300)) {
- /* Get the list of log files. */
- if ((ret = log_archive(dbenv, &list, DB_ARCH_ABS, NULL)) != 0) {
- dbenv-&gt;err(dbenv, ret, "log_archive");
- exit (1);
- }
-<p>
- /* Remove the log files. */
- if (list != NULL) {
- for (begin = list; *list != NULL; ++list)
- if ((ret = remove(*list)) != 0) {
- dbenv-&gt;err(dbenv,
- ret, "remove %s", *list);
- exit (1);
- }
- free (begin);
- }
- }
- /* NOTREACHED */
-}</b></pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/archival.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/recovery.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/archival.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/recovery.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/nested.html b/db/docs/ref/transapp/nested.html
index 902f57ed3..49eda8dbf 100644
--- a/db/docs/ref/transapp/nested.html
+++ b/db/docs/ref/transapp/nested.html
@@ -1,53 +1,53 @@
-<!--Id: nested.so,v 10.22 2001/03/02 21:01:22 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: nested.so,v 10.23 2003/01/24 18:01:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Nested transactions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
-<td align=right><a href="../../ref/transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Nested transactions</h1>
+<h3 align=center>Nested transactions</h3>
<p>Berkeley DB provides support for nested transactions. Nested transactions
allow an application to decompose a large or long-running transaction
-into smaller units that may be independently aborted.
+into smaller units that may be independently aborted.</p>
<p>Normally, when beginning a transaction, the application will pass a NULL
-value for the parent argument to <a href="../../api_c/txn_begin.html">txn_begin</a>. If, however, the
-parent argument is a DB_TXN handle, the newly created transaction
+value for the parent argument to <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>. If, however, the
+parent argument is a <a href="../../api_c/txn_class.html">DB_TXN</a> handle, the newly created transaction
will be treated as a nested transaction within the parent. Transactions
may nest arbitrarily deeply. For the purposes of this discussion,
transactions created with a parent identifier will be called
-<i>child transactions</i>.
+<i>child transactions</i>.</p>
<p>Once a transaction becomes a parent, as long as any of its child
transactions are unresolved (that is, they have neither committed nor
aborted), the parent may not issue any Berkeley DB calls except to begin more
child transactions, or to commit or abort. For example, it may not
issue any access method or cursor calls. After all of a parent's
children have committed or aborted, the parent may again request
-operations on its own behalf.
+operations on its own behalf.</p>
<p>The semantics of nested transactions are as follows. When a child
transaction is begun, it inherits all the locks of its parent. This
means that the child will never block waiting on a lock held by its
parent. Further, locks held by two children of the same parent will
also conflict. To make this concrete, consider the following set of
-transactions and lock acquisitions.
+transactions and lock acquisitions.</p>
<p>Transaction T1 is the parent transaction. It acquires a write lock on
-item A and then begins two child transactions: C1 and C2. C1 also
-wishes to acquire a write lock on A; this succeeds. If C2 attempts to
-acquire a write lock on A, it will block until C1 releases the lock, at
-which point it will succeed. Now, let's say that C1 acquires a write
-lock on B. If C2 now attempts to obtain a lock on B, it will block.
-However, let's now assume that C1 commits. Its locks are
-anti-inherited, which means they are given to T1, so T1 will now hold
-a lock on B. At this point, C2 would be unblocked and would then
-acquire a lock on B.
+item A and then begins two child transactions: C1 and C2. C1 also wants
+to acquire a write lock on A; this succeeds. If C2 attempts to acquire
+a write lock on A, it will block until C1 releases the lock, at which
+point it will succeed. Now, let's say that C1 acquires a write lock on
+B. If C2 now attempts to obtain a lock on B, it will block. However,
+let's now assume that C1 commits. Its locks are anti-inherited, which
+means they are given to T1, so T1 will now hold a lock on B. At this
+point, C2 would be unblocked and would then acquire a lock on B.</p>
<p>Child transactions are entirely subservient to their parent transaction.
They may abort, undoing their operations regardless of the eventual fate
of the parent. However, even if a child transaction commits, if its
@@ -57,9 +57,9 @@ transactions that are not yet resolved when the parent commits or aborts
are resolved based on the parent's resolution -- committing if the
parent commits and aborting if the parent aborts. Any child
transactions that are not yet resolved when the parent prepares are also
-prepared.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
+prepared.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/cursor.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/admin.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/put.html b/db/docs/ref/transapp/put.html
index e04a04f70..9a5b7bd41 100644
--- a/db/docs/ref/transapp/put.html
+++ b/db/docs/ref/transapp/put.html
@@ -1,53 +1,52 @@
-<!--$Id: put.so,v 1.3 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: put.so,v 1.16 2003/11/05 19:05:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Recoverability and deadlock avoidance</title>
+<title>Berkeley DB Reference Guide: Recoverability and deadlock handling</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/data_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/data_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/atomicity.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Recoverability and deadlock avoidance</h1>
+<h3 align=center>Recoverability and deadlock handling</h3>
<p>The first reason listed for using transactions was recoverability. Any
logical change to a database may require multiple changes to underlying
data structures. For example, modifying a record in a Btree may require
-leaf and internal pages to split, and so a single <a href="../../api_c/db_put.html">DB-&gt;put</a> method
+leaf and internal pages to split, so a single <a href="../../api_c/db_put.html">DB-&gt;put</a> method
call can potentially require that multiple physical database pages be
written. If only some of those pages are written and then the system
or application fails, the database is left inconsistent and cannot be
-used until it has been recovered, that is, until the partially completed
-changes have been undone.
-<p>Write-ahead-logging is the term that describes the underlying
+used until it has been recovered; that is, until the partially completed
+changes have been undone.</p>
+<p><i>Write-ahead-logging</i> is the term that describes the underlying
implementation that Berkeley DB uses to ensure recoverability. What it means
is that before any change is made to a database, information about the
change is written to a database log. During recovery, the log is read,
and databases are checked to ensure that changes described in the log
for committed transactions appear in the database. Changes that appear
in the database but are related to aborted or unfinished transactions
-in the log are undone from the database.
+in the log are undone from the database.</p>
<p>For recoverability after application or system failure, operations that
modify the database must be protected by transactions. More
specifically, operations are not recoverable unless a transaction is
begun and each operation is associated with the transaction via the
Berkeley DB interfaces, and then the transaction successfully committed. This
-is true even if logging is turned on in the database environment.
+is true even if logging is turned on in the database environment.</p>
<p>Here is an example function that updates a record in a database in a
transactionally protected manner. The function takes a key and data
-items as arguments, and then attempts to store them into the database.
-<p><blockquote><pre>int
+items as arguments and then attempts to store them into the database.</p>
+<blockquote><pre>int
main(int argc, char *argv)
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
- pthread_t ptid;
int ch;
<p>
while ((ch = getopt(argc, argv, "")) != EOF)
@@ -70,7 +69,7 @@ main(int argc, char *argv)
<p>
/*
* Open database:
- * Key is a name; Data is: company name, address, cat breeds.
+ * Key is a name; Data is: company name, cat breeds.
*/
db_open(dbenv, &db_cats, "cats", 1);
<p>
@@ -79,12 +78,12 @@ main(int argc, char *argv)
return (0);
}
<p>
-<b>void
+<b>int
add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name)
{
DBT key, data;
DB_TXN *tid;
- int ret;
+ int fail, ret, t_ret;
<p>
/* Initialization. */
memset(&key, 0, sizeof(key));
@@ -94,10 +93,10 @@ add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name)
data.data = name;
data.size = strlen(name);
<p>
- for (;;) {
+ for (fail = 0;;) {
/* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv-&gt;txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_ENV-&gt;txn_begin");
exit (1);
}
<p>
@@ -105,47 +104,100 @@ add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name)
switch (ret = db-&gt;put(db, tid, &key, &data, 0)) {
case 0:
/* Success: commit the change. */
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_commit");
+ if ((ret = tid-&gt;commit(tid, 0)) != 0) {
+ dbenv-&gt;err(dbenv, ret, "DB_TXN-&gt;commit");
exit (1);
}
- return;
+ return (0);
case DB_LOCK_DEADLOCK:
- /* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv-&gt;err(dbenv, ret, "txn_abort");
+ default:
+ /* Retry the operation. */
+ if ((t_ret = tid-&gt;abort(tid)) != 0) {
+ dbenv-&gt;err(dbenv, t_ret, "DB_TXN-&gt;abort");
exit (1);
}
+ if (fail++ == MAXIMUM_RETRY)
+ return (ret);
break;
- default:
- /* Error: run recovery. */
- dbenv-&gt;err(dbenv, ret, "dbc-&gt;put: %s/%s", fruit, name);
- exit (1);
}
}
}</b></pre></blockquote>
-<p>The second reason listed for using transactions was deadlock avoidance.
-There is a new error return in this function that you may not have seen
+<p>Berkeley DB also uses transactions to recover from deadlock. Database
+operations (that is, any call to a function underlying the handles
+returned by <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>) are usually
+performed on behalf of a unique locker. Transactions can be used to
+perform multiple calls on behalf of the same locker within a single
+thread of control. For example, consider the case in which a cursor
+scan locates a record and then accesses some other item in the database,
+based on that record. If these operations are done using the handle's
+default locker IDs, they may conflict. If the locks are obtained on
+behalf of a transaction, using the transaction's locker ID instead of
+the handle's locker ID, the operations will not conflict.</p>
+<p>There is a new error return in this function that you may not have seen
before. In transactional (not Concurrent Data Store) applications
-supporting both readers and writers or just multiple writers, Berkeley DB
+supporting both readers and writers, or just multiple writers, Berkeley DB
functions have an additional possible error return:
-<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>. This return means that our thread of control
-deadlocked with another thread of control, and our thread was selected
-to discard all of its Berkeley DB resources in order to resolve the problem.
-In the sample code, any time the <a href="../../api_c/db_put.html">DB-&gt;put</a> function returns
-<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, the transaction is aborted (by calling
-<a href="../../api_c/txn_abort.html">txn_abort</a>, which releases the transaction's Berkeley DB resources and
-undoes any partial changes to the databases), and then the transaction
-is retried from the beginning.
+<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>. This means two threads of control deadlocked,
+and the thread receiving the <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> error return has
+been selected to discard its locks in order to resolve the problem.
+When an application receives a <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> return, the
+correct action is to close any cursors involved in the operation and
+abort any enclosing transaction. In the sample code, any time the
+<a href="../../api_c/db_put.html">DB-&gt;put</a> method returns <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> is
+called (which releases the transaction's Berkeley DB resources and undoes any
+partial changes to the databases), and then the transaction is retried
+from the beginning.</p>
<p>There is no requirement that the transaction be attempted again, but
that is a common course of action for applications. Applications may
-want to set an upper boundary on the number of times an operation will
-be retried, as some operations on some data sets may simply be unable
-to succeed. For example, updating all of the pages on a large web site
+want to set an upper bound on the number of times an operation will be
+retried because some operations on some data sets may simply be unable
+to succeed. For example, updating all of the pages on a large Web site
during prime business hours may simply be impossible because of the high
-access rate to the database.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/data_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/inc.html"><img src="../../images/next.gif" alt="Next"></a>
+access rate to the database.</p>
+<p>The <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> method is called in error cases other than deadlock.
+Any time an error occurs, such that a transactionally protected set of
+operations cannot complete successfully, the transaction must be
+aborted. While deadlock is by far the most common of these errors,
+there are other possibilities; for example, running out of disk space
+for the filesystem. In Berkeley DB transactional applications, there are
+three classes of error returns: "expected" errors, "unexpected but
+recoverable" errors, and a single "unrecoverable" error. Expected
+errors are errors like <a href="../../ref/program/errorret.html#DB_NOTFOUND">DB_NOTFOUND</a>, which indicates that a
+searched-for key item is not present in the database. Applications may
+want to explicitly test for and handle this error, or, in the case where
+the absence of a key implies the enclosing transaction should fail,
+simply call <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a>. Unexpected but recoverable errors are
+errors like <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>, which indicates that an operation
+has been selected to resolve a deadlock, or a system error such as EIO,
+which likely indicates that the filesystem has no available disk space.
+Applications must immediately call <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> when these returns
+occur, as it is not possible to proceed otherwise. The only
+unrecoverable error is <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>, which indicates that the
+system must stop and recovery must be run.</p>
+<p>It is possible to simplify the above code in the case of a transaction
+comprised entirely of a single database put or delete operation. The
+<a href="../../api_c/db_put.html">DB-&gt;put</a> and <a href="../../api_c/db_del.html">DB-&gt;del</a> method (and other) calls support the
+<a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag that allows applications to implicitly wrap
+the operation in a transaction. For example, with the
+<a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag, the above code could be more simply written
+as:</p>
+<blockquote><pre><b> for (fail = 0; fail++ &lt;= MAXIMUM_RETRY && (ret =
+ db-&gt;put(db, NULL, &key, &data, DB_AUTO_COMMIT)) == DB_LOCK_DEADLOCK;)
+ ;
+ return (ret == 0 ? 0 : 1);</b></pre></blockquote>
+<p>Programmers should not attempt to enumerate all possible error returns
+in their software. Instead, they should explicitly handle expected
+returns and default to aborting the transaction for the rest. It is
+entirely the choice of the programmer whether to check for
+<a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> explicitly or not -- attempting new Berkeley DB
+operations after <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a> is returned does not worsen the
+situation. Alternatively, using the <a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a> method to
+handle an unrecoverable error and simply doing some number of
+abort-and-retry cycles for any unexpected Berkeley DB or system error in the
+mainline code often results in the simplest and cleanest application
+code.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/data_open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/atomicity.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/read.html b/db/docs/ref/transapp/read.html
index 912401e87..354358dad 100644
--- a/db/docs/ref/transapp/read.html
+++ b/db/docs/ref/transapp/read.html
@@ -1,40 +1,56 @@
-<!--$Id: read.so,v 1.1 2000/07/25 17:56:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: read.so,v 1.7 2002/05/17 15:48:42 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Repeatable reads</title>
+<title>Berkeley DB Reference Guide: Degrees of isolation</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/inc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/inc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Repeatable reads</h1>
-<p>The fourth reason listed for using transactions was repeatable reads.
-Generally, most applications do not need to place reads inside a
-transaction for performance reasons. The problem is that a
-transactionally protected cursor, reading each key/data pair in a
-database, will acquire a read lock on most of the pages in the database
-and so will gradually block all write operations on the databases until
-the transaction commits or aborts. Note, however, if there are update
-transactions present in the application, the reading transactions must
-still use locking, and should be prepared to repeat any operation
-(possibly closing and reopening a cursor) which fails with a return
-value of <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>.
-<p>The exceptions to this rule are when the application is doing a
-read-modify-write operation and so requires atomicity, and when an
-application requires the ability to repeatedly access a data item
-knowing that it will not have changed. A repeatable read simply means
-that, for the life of the transaction, every time a request is made by
-any thread of control to read a data item, it will be unchanged from
-its previous value, that is, that the value will not change until the
-transaction commits or aborts.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/inc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Degrees of isolation</h3>
+<a name="2"><!--meow--></a>
+<p>Transactions can be isolated from each other to different degrees.
+<i>Repeatable reads</i> provide the most isolation, and mean that,
+for the life of the transaction, every time a thread of control reads
+a data item, it will be unchanged from its previous value (assuming, of
+course, the thread of control does not itself modify the item). Berkeley DB
+enforces repeatable reads whenever database reads are wrapped in
+transactions.</p>
+<p>Most applications do not need to enclose reads in transactions, and when
+possible, transactionally protected reads should be avoided as they can
+cause performance problems. For example, a transactionally protected
+cursor sequentially reading each key/data pair in a database, will
+acquire a read lock on most of the pages in the database and so will
+gradually block all write operations on the databases until the
+transaction commits or aborts. Note, however, that if there are update
+transactions present in the application, the read operations must still
+use locking, and must be prepared to repeat any operation (possibly
+closing and reopening a cursor) that fails with a return value of
+<a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a>. Applications that need repeatable reads are
+ones that require the ability to repeatedly access a data item knowing
+that it will not have changed (for example, an operation modifying a
+data item based on its existing value).</p>
+<a name="3"><!--meow--></a>
+<a name="4"><!--meow--></a>
+<p>Berkeley DB optionally supports reading uncommitted data; that is, read
+operations may request data which has been modified but not yet
+committed by another transaction. This is done by first specifying the
+<a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag when opening the underlying database, and
+then specifying the <a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag when beginning a
+transaction, opening a cursor, or performing a read operation. The
+advantage of using <a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> is that read operations will
+not block when another transaction holds a write lock on the requested
+data; the disadvantage is that read operations may return data that will
+disappear should the transaction holding the write lock abort.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/inc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/cursor.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/reclimit.html b/db/docs/ref/transapp/reclimit.html
index 559f8ed11..8b7587619 100644
--- a/db/docs/ref/transapp/reclimit.html
+++ b/db/docs/ref/transapp/reclimit.html
@@ -1,38 +1,39 @@
-<!--$Id: reclimit.so,v 11.19 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: reclimit.so,v 11.30 2003/11/20 15:14:04 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB recoverability</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/filesys.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/filesys.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/tune.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB recoverability</h1>
-<p>Berkeley DB recovery is based on write-ahead logging. What this means is that,
+<h3 align=center>Berkeley DB recoverability</h3>
+<p>Berkeley DB recovery is based on write-ahead logging. This means that
when a change is made to a database page, a description of the change is
written into a log file. This description in the log file is guaranteed
to be written to stable storage before the database pages that were
changed are written to stable storage. This is the fundamental feature
-of the logging system that makes durability and rollback work.
-<p>If the application or system crashes, the log is reviewed during recovery.
-Any database changes described in the log that were part of committed
-transactions, and that were never written to the actual database itself,
-are written to the database as part of recovery. Any database changes
-described in the log that were never committed, and that were written to
-the actual database itself, are backed-out of the the database as part of
-recovery. This design allows the database to be written lazily, and only
-blocks from the log file have to be forced to disk as part of transaction
-commit.
+of the logging system that makes durability and rollback work.</p>
+<p>If the application or system crashes, the log is reviewed during
+recovery. Any database changes described in the log that were part of
+committed transactions and that were never written to the actual
+database itself are written to the database as part of recovery. Any
+database changes described in the log that were never committed and that
+were written to the actual database itself are backed-out of the
+database as part of recovery. This design allows the database to be
+written lazily, and only blocks from the log file have to be forced to
+disk as part of transaction commit.</p>
<p>There are two interfaces that are a concern when considering Berkeley DB
-recoverability:
-<p><ol>
+recoverability:</p>
+<ol>
<p><li>The interface between Berkeley DB and the operating system/filesystem.
<li>The interface between the operating system/filesystem and the
underlying stable storage hardware.
@@ -40,67 +41,110 @@ underlying stable storage hardware.
<p>Berkeley DB uses the operating system interfaces and its underlying filesystem
when writing its files. This means that Berkeley DB can fail if the underlying
filesystem fails in some unrecoverable way. Otherwise, the interface
-requirements here are simple: the system call that Berkeley DB uses to flush
+requirements here are simple: The system call that Berkeley DB uses to flush
data to disk (normally <b>fsync</b>(2)), must guarantee that all the
information necessary for a file's recoverability has been written to
stable storage before it returns to Berkeley DB, and that no possible
-application or system crash can cause that file to be unrecoverable.
+application or system crash can cause that file to be unrecoverable.</p>
<p>In addition, Berkeley DB implicitly uses the interface between the operating
system and the underlying hardware. The interface requirements here are
-not as simple.
+not as simple.</p>
<p>First, it is necessary to consider the underlying page size of the Berkeley DB
-databases. The Berkeley DB library performs all database writes using the page
-size specified by the application. These pages are not checksummed and
-Berkeley DB assumes that they are written atomically. This means that if the
-operating system performs filesystem I/O in different sized blocks than
-the database page size, it may increase the possibility for database
-corruption. For example, assume that Berkeley DB is writing 32KB pages for a
-database and the operating system does filesystem I/O in 16KB blocks. If
-the operating system writes the first 16KB of the database page
-successfully, but crashes before being able to write the second 16KB of
-the database, the database has been corrupted and this corruption will
-not be detected during recovery. For this reason, it may be important
-to select database page sizes that will be written as single block
-transfers by the underlying operating system.
-<p>Second, it is necessary to consider the behavior of the system's underlying
-stable storage hardware. For example, consider a SCSI controller that
-has been configured to cache data and return to the operating system that
-the data has been written to stable storage, when, in fact, it has only
-been written into the controller RAM cache. If power is lost before the
-controller is able to flush its cache to disk, and the controller cache
-is not stable (i.e., the writes will not be flushed to disk when power
-returns), the writes will be lost. If the writes include database blocks,
-there is no loss as recovery will correctly update the database. If the
-writes include log file blocks, it is possible that transactions that were
-already committed may not appear in the recovered database, although the
-recovered database will be coherent after a crash.
-<p>If the underlying hardware can fail in any way such that only part of the
-block was written, the failure conditions are the same as those described
-above for an operating system failure that only writes part of a logical
-database block.
-<p>For these reasons, it is important to select hardware that does not do
-partial writes and does not cache data writes (or does not return that
-the data has been written to stable storage until it either has been
-written to stable storage or the actual writing of all of the data is
-guaranteed barring catastrophic hardware failure, e.g., your disk drive
-exploding). You should also be aware that Berkeley DB does not protect against
-all cases of stable storage hardware failure, nor does it protect against
-hardware misbehavior.
+databases. The Berkeley DB library performs all database writes using the
+page size specified by the application, and Berkeley DB assumes pages are
+written atomically. This means that if the operating system performs
+filesystem I/O in blocks of different sizes than the database page size,
+it may increase the possibility for database corruption. For example,
+assume that Berkeley DB is writing 32KB pages for a database, and the
+operating system does filesystem I/O in 16KB blocks. If the operating
+system writes the first 16KB of the database page successfully, but
+crashes before being able to write the second 16KB of the database, the
+database has been corrupted and this corruption may or may not be
+detected during recovery. For this reason, it may be important to
+select database page sizes that will be written as single block
+transfers by the underlying operating system. If you do not select a
+page size that the underlying operating system will write as a single
+block, you may want to configure the database to use checksums (see the
+<a href="../../api_c/db_set_flags.html#DB_CHKSUM">DB_CHKSUM</a> flag for more information). By configuring checksums,
+you guarantee this kind of corruption will be detected at the expense
+of the CPU required to generate the checksums. When such an error is
+detected, the only course of recovery is to perform catastrophic
+recovery to restore the database.</p>
+<p>Second, if you are copying database files (either as part of doing a
+hot backup or creation of a hot failover area), there is an additional
+question related to the page size of the Berkeley DB databases. You must copy
+databases atomically, in units of the database page size. In other
+words, the reads made by the copy program must not be interleaved with
+writes by other threads of control, and the copy program must read the
+databases in multiples of the underlying database page size. Generally,
+this is not a problem, as operating systems already make this guarantee
+and system utilities normally read in power-of-2 sized chunks, which
+are larger than the largest possible Berkeley DB database page size.</p>
+<p>One problem we have seen in this area was in some releases of Solaris
+where the cp utility was implemented using the mmap system call rather
+than the read system call. Because the Solaris' mmap system call did
+not make the same guarantee of read atomicity as the read system call,
+using the cp utility could create corrupted copies of the databases.
+Another problem we have seen is implementations of the tar utility doing
+10KB block reads by default, and even when an output block size was
+specified to that utility, not reading from the underlying databases in
+multiples of the block size. Using the dd utility instead of the cp or
+tar utilities (and specifying an appropriate block size), fixes these
+problems. If you plan to use a system utility to copy database files,
+you may want to use a system call trace utility (for example, ktrace or
+truss) to check for an I/O size smaller than or not a multiple of the
+database page size and system calls other than read.</p>
+<p>Third, it is necessary to consider the behavior of the system's
+underlying stable storage hardware. For example, consider a SCSI
+controller that has been configured to cache data and return to the
+operating system that the data has been written to stable storage, when,
+in fact, it has only been written into the controller RAM cache. If
+power is lost before the controller is able to flush its cache to disk,
+and the controller cache is not stable (that is, the writes will not be
+flushed to disk when power returns), the writes will be lost. If the
+writes include database blocks, there is no loss because recovery will
+correctly update the database. If the writes include log file blocks,
+it is possible that transactions that were already committed may not
+appear in the recovered database, although the recovered database will
+be coherent after a crash.</p>
+<p>If the underlying hardware can fail in any way so that only part of the
+block was written, the failure conditions are the same as those
+described previously for an operating system failure that writes only
+part of a logical database block. In such cases, configuring the
+database for checksums will ensure the corruption is detected.</p>
+<p>For these reasons, it may be important to select hardware that does not
+do partial writes and does not cache data writes (or does not return
+that the data has been written to stable storage until it has either
+been written to stable storage or the actual writing of all of the data
+is guaranteed, barring catastrophic hardware failure -- that is, your
+disk drive exploding).</p>
<p>If the disk drive on which you are storing your databases explodes, you
-can perform normal Berkeley DB catastrophic recovery, as that requires only a
-snapshot of your databases plus all of the log files you have archived
-since those snapshots were taken. In this case, you will lose no database
-changes at all. If the disk drive on which you are storing your log files
-explodes, you can still perform catastrophic recovery, but you will lose
-any database changes that were part of transactions committed since your
-last archival of the log files. For this reason, storing your databases
-and log files on different disks should be considered a safety measure as
-well as a performance enhancement.
-<p>Finally, if your hardware misbehaves, for example, a SCSI controller
-writes incorrect data to the disk, Berkeley DB will not detect this and your
-data may be corrupted.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/filesys.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
+can perform normal Berkeley DB catastrophic recovery, because it requires only
+a snapshot of your databases plus the log files you have archived since
+those snapshots were taken. In this case, you should lose no database
+changes at all.</p>
+<p>If the disk drive on which you are storing your log files explodes, you
+can also perform catastrophic recovery, but you will lose any database
+changes made as part of transactions committed since your last archival
+of the log files. Alternatively, if your database environment and
+databases are still available after you lose the log file disk, you
+should be able to dump your databases. However, you may see an
+inconsistent snapshot of your data after doing the dump, because
+changes that were part of transactions that were not yet committed
+may appear in the database dump. Depending on the value of the data,
+a reasonable alternative may be to perform both the database dump and
+the catastrophic recovery and then compare the databases created by
+the two methods.</p>
+<p>Regardless, for these reasons, storing your databases and log files on
+different disks should be considered a safety measure as well as a
+performance enhancement.</p>
+<p>Finally, you should be aware that Berkeley DB does not protect against all
+cases of stable storage hardware failure, nor does it protect against
+simple hardware misbehavior (for example, a disk controller writing
+incorrect data to the disk). However, configuring the database for
+checksums will ensure that any such corruption is detected.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/filesys.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/tune.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/recovery.html b/db/docs/ref/transapp/recovery.html
index 5be94bf41..512e76dd1 100644
--- a/db/docs/ref/transapp/recovery.html
+++ b/db/docs/ref/transapp/recovery.html
@@ -1,91 +1,97 @@
-<!--$Id: recovery.so,v 10.26 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: recovery.so,v 10.33 2003/07/08 20:16:16 ubell Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Recovery procedures</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/logfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/logfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/hotfail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Recovery procedures</h1>
+<h3 align=center>Recovery procedures</h3>
<p>The fifth component of the infrastructure, recovery procedures, concerns
the recoverability of the database. After any application or system
-failure, there are two possible approaches to database recovery:
-<p><ol>
-<p><li>There is no need for recoverability and all databases can be recreated
-from scratch. While these applications may still need transaction
+failure, there are two possible approaches to database recovery:</p>
+<ol>
+<p><li>There is no need for recoverability, and all databases can be re-created
+from scratch. Although these applications may still need transaction
protection for other reasons, recovery usually consists of removing the
Berkeley DB environment home directory and all files it contains, and then
restarting the application.
+Such an application may use the <a href="../../api_c/env_set_flags.html#DB_TXN_NOT_DURABLE">DB_TXN_NOT_DURABLE</a> flag to avoid
+writing log records.
<p><li>It is necessary to recover information after system or application
failure. In this case, recovery processing must be performed on any
database environments that were active at the time of the failure.
Recovery processing involves running the <a href="../../utility/db_recover.html">db_recover</a> utility or
-calling the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function with the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> or
+calling the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method with the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> or
<a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a> flags.
<p>During recovery processing, all database changes made by aborted or
-unfinished transactions are undone and all database changes made by
+unfinished transactions are undone, and all database changes made by
committed transactions are redone, as necessary. Database applications
must not be restarted until recovery completes. After recovery
finishes, the environment is properly initialized so that applications
-may be restarted.
+may be restarted.</p>
</ol>
-<p>If you intend to do recovery, there are two possible types of recovery
-processing:
-<p><ol>
-<p><li><i>catastrophic</i> recovery. A failure that requires catastrophic
-recovery is a failure where either the database or log files have been
-destroyed or corrupted. For example, catastrophic failure includes the
-case where the disk drive on which either the database or logs are
-stored has been physically destroyed, or when the system's normal
-filesystem recovery on startup is unable to bring the database and log
-files to a consistent state. This is often difficult to detect, and
-perhaps the most common sign of the need for catastrophic recovery is
-when the normal recovery procedures fail.
-<p>To restore your database environment after catastrophic failure, take
-the following steps:
-<p><ol>
+<p>If performing recovery, there are two types of recovery processing:
+<i>normal</i> and <i>catastrophic</i>. Which you choose depends
+on the source for the database and log files you are using to recover.</p>
+<p>If up-to-the-minute database and log files are accessible on a stable
+filesystem, normal recovery is usually sufficient. Run the
+<a href="../../utility/db_recover.html">db_recover</a> utility or call the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method specifying
+the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> flag. Note this case never includes recovery
+using archival snapshots of the database environment. For example, you
+cannot archive databases and log files, restore the backup and then run
+normal recovery -- you must always run catastrophic recovery when using
+archived files.</p>
+<p>If the database or log files have been destroyed or corrupted, or normal
+recovery fails, catastrophic recovery is required. For example,
+catastrophic failure includes the case where the disk drive on which
+the database or log files are stored has been physically destroyed, or
+when the underlying filesystem is corrupted and the operating system's
+normal filesystem checking procedures cannot bring that filesystem to
+a consistent state. This is often difficult to detect, and a common
+sign of the need for catastrophic recovery is when normal Berkeley DB recovery
+procedures fail, or when checksum errors are displayed during normal
+database procedures. When catastrophic recovery is necessary, take the
+following steps:</p>
+<ol>
<p><li>Restore the most recent snapshots of the database and log files from
-the backup media into the system directory where recovery will be
-performed.
+the backup media into the directory where recovery will be performed.
<p><li>If any log files were archived since the last snapshot was made, they
-should be restored into the Berkeley DB environment directory where recovery
-will be performed. Make sure you restore them in the order in which
-they were written. The order is important because it's possible that
-the same log file appears on multiple backups and you want to run
-recovery using the most recent version of each log file.
-<p><li>Run the <a href="../../utility/db_recover.html">db_recover</a> utility, specifying its <b>-c</b> option,
-or call the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function specifying the <a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a>
+should be restored into the directory where recovery will be performed.
+<p>If any log files are available from the database environment that failed
+(for example, the disk holding the database files crashed, but the disk
+holding the log files is fine), those log files should be copied into
+the directory where recovery will be performed.</p>
+<p>Be sure to restore all log files in the order they were written. The
+order is important because it's possible the same log file appears on
+multiple backups, and you want to run recovery using the most recent
+version of each log file.</p>
+<p><li>Run the <a href="../../utility/db_recover.html">db_recover</a> utility, specifying its <b>-c</b> option;
+or call the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method, specifying the <a href="../../api_c/env_open.html#DB_RECOVER_FATAL">DB_RECOVER_FATAL</a>
flag. The catastrophic recovery process will review the logs and
database files to bring the environment databases to a consistent state
as of the time of the last uncorrupted log file that is found. It is
important to realize that only transactions committed before that date
will appear in the databases.
-<p>It is possible to recreate the database in a location different than
-the original, by specifying appropriate pathnames to the <b>-h</b>
+<p>It is possible to re-create the database in a location different from
+the original by specifying appropriate pathnames to the <b>-h</b>
option of the <a href="../../utility/db_recover.html">db_recover</a> utility. In order for this to work
-properly, it is important that your application reference files by
-names relative to the database home directory or the pathname(s) specified
-in calls to <a href="../../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a>, instead of using full path names.
+properly, it is important that your application refer to files by names
+relative to the database home directory or the pathname(s) specified in
+calls to <a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a>, instead of using full
+pathnames.</p>
</ol>
-<p><li><i>non-catastrophic</i> or <i>normal</i> recovery. If the
-failure is non-catastrophic and the database files and log are both
-accessible on a stable filesystem, run the <a href="../../utility/db_recover.html">db_recover</a> utility
-without the <b>-c</b> option or call the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function
-specifying the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> flag. The normal recovery process
-will review the logs and database files to ensure that all changes
-associated with committed transactions appear in the databases and that
-all uncommitted transactions do not.
-</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/logfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/filesys.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/logfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/hotfail.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/term.html b/db/docs/ref/transapp/term.html
index d6d54a44d..4f0e83422 100644
--- a/db/docs/ref/transapp/term.html
+++ b/db/docs/ref/transapp/term.html
@@ -1,60 +1,65 @@
-<!--$Id: term.so,v 10.16 2000/08/16 17:50:40 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: term.so,v 10.18 2001/03/13 19:45:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Terminology</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/why.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/app.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/why.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/app.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Terminology</h1>
+<h3 align=center>Terminology</h3>
<p>Here are some definitions that will be helpful in understanding
-transactions:
+transactions:</p>
<p><dl compact>
<p><dt>Thread of control<dd>Berkeley DB is indifferent to the type or style of threads being used by the
-application, or, for that matter, if threads are being used at all, as
-Berkeley DB supports multi-process access. In the Berkeley DB documentation, any
-time we refer to a "thread of control", that can be read as a true
-thread (one of many in an application's address space), or, a process.
+application; or, for that matter, if threads are being used at all --
+because Berkeley DB supports multiprocess access. In the Berkeley DB documentation,
+any time we refer to a <i>thread of control</i>, it can be read as
+a true thread (one of many in an application's address space) or a
+process.
<p><dt>Free-threaded<dd>A Berkeley DB handle that can be used by multiple threads simultaneously
-without any application-level synchronization is called free-threaded.
-<p><dt>Transaction<dd>A transaction is a one or more operations on one or more databases, that
-should be treated as a single unit of work. For example, changes to a
-set of databases, where either all of the changes must be applied to
-the database(s) or none of them should. Applications specify when each
-transaction starts, what database operations are included in it, and
-when it ends.
+without any application-level synchronization is called
+<i>free-threaded</i>.
+<p><dt>Transaction<dd>A <i>transaction</i> is a one or more operations on one or more
+databases that should be treated as a single unit of work. For example,
+changes to a set of databases, in which either all of the changes must be
+applied to the database(s) or none of them should. Applications specify
+when each transaction starts, what database operations are included in
+it, and when it ends.
<p><dt>Transaction abort/commit<dd>Every transaction ends by <i>committing</i> or <i>aborting</i>.
-If a transaction commits, then Berkeley DB guarantees that any database
-changes included in the transaction will never be lost, even after
-system or application failure. If a transaction aborts, or is
-uncommitted when the system or application fails, then the changes
-involved will never appear in the database.
-<p><dt>System or application failure<dd>This is the phrase that we will use to describe when something bad
-happens near your data. It can be an application dumping core, being
-interrupted by a signal, the disk filling up, or the entire system
-crashing. In any case, for whatever reason, the application can no
-longer make forward progress, and its databases were left in an unknown
-state.
-<p><dt>Recovery<dd>Whenever system or application failure occurs, the application must run
-recovery. Recovery is what makes the database consistent, that is, the
-recovery process includes review of log files and databases to ensure
-that the changes from each committed transaction appear in the database,
-and that no changes from an unfinished (or aborted) transaction do.
-<p><dt>Deadlock<dd>Deadlock, in its simplest form, happens when one thread of control owns
-resource A, but needs resource B, while another thread of control owns
-resource B, but needs resource A. Neither thread of control can make
-progress, and so one has to give up and release all of its resources,
-at which time the remaining thread of control can make forward progress.
+If a transaction commits, Berkeley DB guarantees that any database changes
+included in the transaction will never be lost, even after system or
+application failure. If a transaction aborts, or is uncommitted when
+the system or application fails, then the changes involved will never
+appear in the database.
+<p><dt>System or application failure<dd><i>System or application failure</i> is the phrase we use to
+describe something bad happening near your data. It can be an
+application dumping core, being interrupted by a signal, the disk
+filling up, or the entire system crashing. In any case, for whatever
+reason, the application can no longer make forward progress, and its
+databases are left in an unknown state.
+<p><dt>Recovery<dd><i>Recovery</i> is what makes the database consistent after a system
+or application failure. The recovery process includes review of log
+files and databases to ensure that the changes from each committed
+transaction appear in the database, and that no changes from an
+unfinished (or aborted) transaction do. Whenever system or application
+failure occurs, applications must usually run recovery.
+<p><dt>Deadlock<dd><i>Deadlock</i>, in its simplest form, happens when one thread of
+control owns resource A, but needs resource B; while another thread of
+control owns resource B, but needs resource A. Neither thread of
+control can make progress, and so one has to give up and release all
+its resources, at which time the remaining thread of control can make
+forward progress.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/why.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/app.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/why.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/app.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/throughput.html b/db/docs/ref/transapp/throughput.html
index 734f3c7f9..03261c6af 100644
--- a/db/docs/ref/transapp/throughput.html
+++ b/db/docs/ref/transapp/throughput.html
@@ -1,117 +1,125 @@
-<!--$Id: throughput.so,v 10.24 2000/12/04 18:05:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: throughput.so,v 10.31 2002/04/02 17:07:05 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transaction throughput</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transaction throughput</h1>
-<p>Generally, the speed of a database system is measured by the transaction
-throughput, expressed as the number of transactions per second. The two
-gating factors for Berkeley DB performance in a transactional system are usually
-the underlying database files and the log file. Both are factors because
-they require disk I/O, which is slow relative to other system resources
-like CPU.
-<p>In the worst case scenario:
-<ul type=disc>
-<li>Database access is truly random and the database is too large to fit into
-the cache, resulting in a single I/O per requested key/data pair.
+<h3 align=center>Transaction throughput</h3>
+<p>Generally, the speed of a database system is measured by the
+<i>transaction throughput</i>, expressed as a number of
+transactions per second. The two gating factors for Berkeley DB performance
+in a transactional system are usually the underlying database files and
+the log file. Both are factors because they require disk I/O, which is
+slow relative to other system resources such as CPU.</p>
+<p>In the worst-case scenario:</p>
+<p><ul type=disc>
+<li>Database access is truly random and the database is too large for any
+significant percentage of it to fit into the cache, resulting in a
+single I/O per requested key/data pair.
<li>Both the database and the log are on a single disk.
</ul>
<p>This means that for each transaction, Berkeley DB is potentially performing
-several filesystem operations:
-<ul type=disc>
-<li>Disk seek to database file.
-<li>Database file read.
-<li>Disk seek to log file.
-<li>Log file write.
-<li>Flush log file information to disk.
-<li>Disk seek to update log file metadata (e.g., inode).
-<li>Log metadata write.
-<li>Flush log file metadata to disk.
+several filesystem operations:</p>
+<p><ul type=disc>
+<li>Disk seek to database file
+<li>Database file read
+<li>Disk seek to log file
+<li>Log file write
+<li>Flush log file information to disk
+<li>Disk seek to update log file metadata (for example, inode information)
+<li>Log metadata write
+<li>Flush log file metadata to disk
</ul>
<p>There are a number of ways to increase transactional throughput, all of
which attempt to decrease the number of filesystem operations per
-transaction:
-<ul type=disc>
+transaction. First, the Berkeley DB software includes support for
+<i>group commit</i>. Group commit simply means that when the
+information about one transaction is flushed to disk, the information
+for any other waiting transactions will be flushed to disk at the same
+time, potentially amortizing a single log write over a large number of
+transactions. There are additional tuning parameters which may be
+useful to application writers:</p>
+<p><ul type=disc>
<li>Tune the size of the database cache. If the Berkeley DB key/data pairs used
during the transaction are found in the database cache, the seek and read
from the database are no longer necessary, resulting in two fewer
-filesystem operations per transaction. To determine if your cache size
-is too small, see <a href="../../ref/am_conf/cachesize.html">Selecting a
-cache size</a>.
+filesystem operations per transaction. To determine whether your cache
+size is too small, see <a href="../../ref/am_conf/cachesize.html">Selecting
+a cache size</a>.
<li>Put the database and the log files on different disks. This allows reads
and writes to the log files and the database files to be performed
concurrently.
-<li>Set the filesystem configuration so that file access and modification
-times are not updated. Note, although the file access and modification
-times are not used by Berkeley DB, this may affect other programs, so be
-careful.
+<li>Set the filesystem configuration so that file access and modification times
+are not updated. Note that although the file access and modification times
+are not used by Berkeley DB, this may affect other programs -- so be careful.
<li>Upgrade your hardware. When considering the hardware on which to run your
application, however, it is important to consider the entire system. The
controller and bus can have as much to do with the disk performance as
the disk itself. It is also important to remember that throughput is
rarely the limiting factor, and that disk seek times are normally the true
performance issue for Berkeley DB.
-<li>Turn on the <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag. This changes the Berkeley DB behavior
-so that the log files are not flushed when transactions are committed.
-While this change will greatly increase your transaction throughput, it
-means that transactions will exhibit the ACI (atomicity, consistency and
+<li>Turn on the <a href="../../api_c/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a> or <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flags.
+This changes the Berkeley DB behavior so that the log files are not written
+and/or flushed when transactions are committed. Although this change
+will greatly increase your transaction throughput, it means that
+transactions will exhibit the ACI (atomicity, consistency, and
isolation) properties, but not D (durability). Database integrity will
-be maintained but it is possible that some number of the most recently
+be maintained, but it is possible that some number of the most recently
committed transactions may be undone during recovery instead of being
redone.
</ul>
<p>If you are bottlenecked on logging, the following test will help you
confirm that the number of transactions per second that your application
does is reasonable for the hardware on which you're running. Your test
-program should repeatedly perform the following operations:
-<ul type=disc>
-<li>Seek to the beginning of a file.
-<li>Write to the file.
-<li>Flush the file write to disk.
+program should repeatedly perform the following operations:</p>
+<p><ul type=disc>
+<li>Seek to the beginning of a file
+<li>Write to the file
+<li>Flush the file write to disk
</ul>
-<p>The number of times that you can perform these three operations per second
-is a rough measure of the number of transactions per second of which the
-hardware is capable. This test simulates the operations applied to the
-log file. (As a simplifying assumption in this experiment, we assume that
-the database files are either on a separate disk, or that they fit, with
-some few exceptions, into the database cache.) We do not have to directly
-simulate updating the log file directory information, as it will normally
-be updated and flushed to disk as a result of flushing the log file write
-to disk.
-<p>Running this test program, where we write 256 bytes, for 1000 operations,
+<p>The number of times that you can perform these three operations per
+second is a rough measure of the minimum number of transactions per
+second of which the hardware is capable. This test simulates the
+operations applied to the log file. (As a simplifying assumption in this
+experiment, we assume that the database files are either on a separate
+disk; or that they fit, with some few exceptions, into the database
+cache.) We do not have to directly simulate updating the log file
+directory information because it will normally be updated and flushed
+to disk as a result of flushing the log file write to disk.</p>
+<p>Running this test program, in which we write 256 bytes for 1000 operations
on reasonably standard commodity hardware (Pentium II CPU, SCSI disk),
-returned the following results:
-<p><blockquote><pre>% testfile -b256 -o1000
+returned the following results:</p>
+<blockquote><pre>% testfile -b256 -o1000
running: 1000 ops
Elapsed time: 16.641934 seconds
1000 ops: 60.09 ops per second</pre></blockquote>
<p>Note that the number of bytes being written to the log as part of each
transaction can dramatically affect the transaction throughput. The
-above test run used 256, which is a reasonable size log write. Your
-log writes may be different. To determine your average log write size,
-use the <a href="../../utility/db_stat.html">db_stat</a> utility to display your log statistics.
-<p>As a quick sanity check, for this particular disk, the average seek time
-is 9.4 msec, and the average latency is 4.17 msec. That results in a
-minimum requirement for a data transfer to the disk of 13.57 msec, or a
-maximum of 74 transfers per second. This is close enough to the above 60
-operations per second (which wasn't done on a quiescent disk) that the
-number is believable.
-<p>An implementation of the above <a href="writetest.txt">example test
+test run used 256, which is a reasonable size log write. Your log
+writes may be different. To determine your average log write size, use
+the <a href="../../utility/db_stat.html">db_stat</a> utility to display your log statistics.</p>
+<p>As a quick sanity check, the average seek time is 9.4 msec for this
+particular disk, and the average latency is 4.17 msec. That results in
+a minimum requirement for a data transfer to the disk of 13.57 msec, or
+a maximum of 74 transfers per second. This is close enough to the
+previous 60 operations per second (which wasn't done on a quiescent
+disk) that the number is believable.</p>
+<p>An implementation of the previous <a href="writetest.cs">example test
program</a> for IEEE/ANSI Std 1003.1 (POSIX) standard systems is included in the Berkeley DB
-distribution.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+distribution.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/tune.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/transapp.cs b/db/docs/ref/transapp/transapp.cs
index 82e4fb42f..e4f37d77b 100644
--- a/db/docs/ref/transapp/transapp.cs
+++ b/db/docs/ref/transapp/transapp.cs
@@ -26,7 +26,6 @@ void usage(void);
int
main(int argc, char *argv[])
{
- extern char *optarg;
extern int optind;
DB *db_cats, *db_color, *db_fruit;
DB_ENV *dbenv;
@@ -128,9 +127,10 @@ env_open(DB_ENV **dbenvp)
/* Set up error handling. */
dbenv->set_errpfx(dbenv, "txnapp");
+ dbenv->set_errfile(dbenv, stderr);
/* Do deadlock detection internally. */
- if ((ret = dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT)) != 0) {
+ if ((ret = dbenv->set_lk_detect(dbenv, DB_LOCK_DEFAULT)) != 0) {
dbenv->err(dbenv, ret, "set_lk_detect: DB_LOCK_DEFAULT");
exit (1);
}
@@ -164,11 +164,7 @@ checkpoint_thread(void *arg)
/* Checkpoint once a minute. */
for (;; sleep(60))
- switch (ret = txn_checkpoint(dbenv, 0, 0, 0)) {
- case 0:
- case DB_INCOMPLETE:
- break;
- default:
+ if ((ret = dbenv->txn_checkpoint(dbenv, 0, 0, 0)) != 0) {
dbenv->err(dbenv, ret, "checkpoint thread");
exit (1);
}
@@ -190,8 +186,9 @@ logfile_thread(void *arg)
/* Check once every 5 minutes. */
for (;; sleep(300)) {
/* Get the list of log files. */
- if ((ret = log_archive(dbenv, &list, DB_ARCH_ABS)) != 0) {
- dbenv->err(dbenv, ret, "log_archive");
+ if ((ret =
+ dbenv->log_archive(dbenv, &list, DB_ARCH_ABS)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive");
exit (1);
}
@@ -216,9 +213,9 @@ log_archlist(DB_ENV *dbenv)
char **begin, **list;
/* Get the list of database files. */
- if ((ret = log_archive(dbenv,
+ if ((ret = dbenv->log_archive(dbenv,
&list, DB_ARCH_ABS | DB_ARCH_DATA)) != 0) {
- dbenv->err(dbenv, ret, "log_archive: DB_ARCH_DATA");
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive: DB_ARCH_DATA");
exit (1);
}
if (list != NULL) {
@@ -228,9 +225,9 @@ log_archlist(DB_ENV *dbenv)
}
/* Get the list of log files. */
- if ((ret = log_archive(dbenv,
+ if ((ret = dbenv->log_archive(dbenv,
&list, DB_ARCH_ABS | DB_ARCH_LOG)) != 0) {
- dbenv->err(dbenv, ret, "log_archive: DB_ARCH_LOG");
+ dbenv->err(dbenv, ret, "DB_ENV->log_archive: DB_ARCH_LOG");
exit (1);
}
if (list != NULL) {
@@ -264,8 +261,9 @@ db_open(DB_ENV *dbenv, DB **dbp, char *name, int dups)
* free-threaded handle
* read/write owner only
*/
- if ((ret = db->open(db, name, NULL,
- DB_BTREE, DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR)) != 0) {
+ if ((ret = db->open(db, NULL, name, NULL, DB_BTREE,
+ DB_AUTO_COMMIT | DB_CREATE | DB_THREAD, S_IRUSR | S_IWUSR)) != 0) {
+ (void)db->close(db, 0);
dbenv->err(dbenv, ret, "db->open: %s", name);
exit (1);
}
@@ -290,8 +288,8 @@ add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name)
for (;;) {
/* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv->txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->txn_begin");
exit (1);
}
@@ -299,15 +297,15 @@ add_fruit(DB_ENV *dbenv, DB *db, char *fruit, char *name)
switch (ret = db->put(db, tid, &key, &data, 0)) {
case 0:
/* Success: commit the change. */
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_commit");
+ if ((ret = tid->commit(tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->commit");
exit (1);
}
return;
case DB_LOCK_DEADLOCK:
/* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv->err(dbenv, ret, "txn_abort");
+ if ((ret = tid->abort(tid)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->abort");
exit (1);
}
break;
@@ -336,8 +334,8 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
for (;;) {
/* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv->txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->txn_begin");
exit (1);
}
@@ -351,8 +349,8 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
break;
case DB_LOCK_DEADLOCK:
/* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv->err(dbenv, ret, "txn_abort");
+ if ((ret = tid->abort(tid)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->abort");
exit (1);
}
continue;
@@ -377,15 +375,15 @@ add_color(DB_ENV *dbenv, DB *dbp, char *color, int increment)
switch (ret = dbp->put(dbp, tid, &key, &data, 0)) {
case 0:
/* Success: commit the change. */
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_commit");
+ if ((ret = tid->commit(tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->commit");
exit (1);
}
return;
case DB_LOCK_DEADLOCK:
/* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv->err(dbenv, ret, "txn_abort");
+ if ((ret = tid->abort(tid)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->abort");
exit (1);
}
break;
@@ -415,8 +413,8 @@ add_cat(DB_ENV *dbenv, DB *db, char *name, ...)
key.size = strlen(name);
retry: /* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_begin");
+ if ((ret = dbenv->txn_begin(dbenv, NULL, &tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->txn_begin");
exit (1);
}
@@ -427,8 +425,8 @@ retry: /* Begin the transaction. */
break;
case DB_LOCK_DEADLOCK:
/* Deadlock: retry the operation. */
- if ((ret = txn_abort(tid)) != 0) {
- dbenv->err(dbenv, ret, "txn_abort");
+ if ((ret = tid->abort(tid)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->abort");
exit (1);
}
goto retry;
@@ -460,8 +458,8 @@ retry: /* Begin the transaction. */
dbenv, ret, "dbc->c_close");
exit (1);
}
- if ((ret = txn_abort(tid)) != 0) {
- dbenv->err(dbenv, ret, "txn_abort");
+ if ((ret = tid->abort(tid)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->abort");
exit (1);
}
goto retry;
@@ -478,8 +476,8 @@ retry: /* Begin the transaction. */
dbenv->err(dbenv, ret, "dbc->c_close");
exit (1);
}
- if ((ret = txn_commit(tid, 0)) != 0) {
- dbenv->err(dbenv, ret, "txn_commit");
+ if ((ret = tid->commit(tid, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_TXN->commit");
exit (1);
}
}
diff --git a/db/docs/ref/transapp/tune.html b/db/docs/ref/transapp/tune.html
index a8bf1b66c..34a4b36f8 100644
--- a/db/docs/ref/transapp/tune.html
+++ b/db/docs/ref/transapp/tune.html
@@ -1,26 +1,27 @@
-<!--Id: tune.so,v 11.8 2001/04/04 22:32:29 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: tune.so,v 11.19 2003/10/18 19:16:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transaction tuning</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
-<td align=right><a href="../../ref/transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transaction tuning</h1>
+<h3 align=center>Transaction tuning</h3>
<p>There are a few different issues to consider when tuning the performance
of Berkeley DB transactional applications. First, you should review
<a href="../../ref/am_misc/tune.html">Access method tuning</a>, as the
tuning issues for access method applications are applicable to
transactional applications as well. The following are additional tuning
-issues for Berkeley DB transactional applications:
+issues for Berkeley DB transactional applications:</p>
<p><dl compact>
<p><dt>access method<dd>Highly concurrent applications should use the Queue access method, where
possible, as it provides finer-granularity of locking than the other
@@ -46,6 +47,9 @@ operations outside of transactions can often significantly increase
application throughput. In addition, limiting the lifetime of
non-transactional cursors will reduce the length of times locks are
held, thereby improving concurrency.
+<p><dt><a href="../../api_c/env_set_flags.html#DB_DIRECT_DB">DB_DIRECT_DB</a>, <a href="../../api_c/env_set_flags.html#DB_DIRECT_LOG">DB_DIRECT_LOG</a><dd>Consider using the <a href="../../api_c/env_set_flags.html#DB_DIRECT_DB">DB_DIRECT_DB</a> and <a href="../../api_c/env_set_flags.html#DB_DIRECT_LOG">DB_DIRECT_LOG</a> flags.
+On some systems, avoiding caching in the operating system can improve
+write throughput and allow the creation of larger Berkeley DB caches.
<p><dt><a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a><dd>Consider using the <a href="../../api_c/db_open.html#DB_DIRTY_READ">DB_DIRTY_READ</a> flag for transactions, cursors
or individual read operations. This flag allows read operations to
potentially return data which has been modified but not yet committed,
@@ -56,13 +60,20 @@ when reading data items that will subsequently be modified. Although
this flag may increase contention (because write locks are held longer
than they would otherwise be), it may decrease the number of deadlocks
that occur.
-<p><dt><a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>By default, transactional commit in Berkeley DB implies durability, that is,
-all committed operations will be present in the database after
-recovery from any application or system failure. For applications not
-requiring that level of certainty, specifying the <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>
-flag will often provide a significant performance improvement. In this
-case, the database will still be fully recoverable, but some number of
-committed transactions might be lost after system failure.
+<p><dt><a href="../../api_c/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a>, <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a><dd>By default, transactional commit in Berkeley DB implies durability, that is,
+all committed operations will be present in the database after recovery
+from any application or system failure. For applications not requiring
+that level of certainty, specifying the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag will
+often provide a significant performance improvement. In this case, the
+database will still be fully recoverable, but some number of committed
+transactions might be lost after application or system failure.
+<p><dt>access databases in order<dd>When modifying multiple databases in a single transaction, always access
+physical files and databases within physical files, in the same order
+where possible. In addition, avoid returning to a physical file or
+database, that is, avoid accessing a database, moving on to another
+database and then returning to the first database. This can
+significantly reduce the chance of deadlock between threads of
+control.
<p><dt>large key/data items<dd>Transactional protections in Berkeley DB are guaranteed by before and after
physical image logging. This means applications modifying large
key/data items also write large log records, and, in the case of the
@@ -70,23 +81,55 @@ default transaction commit, threads of control must wait until those
log records have been flushed to disk. Applications supporting
concurrent access should try and keep key/data items small wherever
possible.
+<p><dt>mutex selection<dd>During configuration, Berkeley DB selects a mutex implementation for the
+architecture. Berkeley DB normally prefers blocking-mutex implementations over
+non-blocking ones. For example, Berkeley DB will select POSIX pthread mutex
+interfaces rather than assembly-code test-and-set spin mutexes because
+pthread mutexes are usually more efficient and less likely to waste CPU
+cycles spinning without getting any work accomplished.
+<p>For some applications and systems (generally highly concurrent
+applications on large multiprocessor systems), Berkeley DB makes the wrong
+choice. In some cases, better performance can be achieved by
+configuring with the
+<a href="../../ref/build_unix/conf.html#--with-mutex">--with-mutex</a>
+argument and selecting a different mutex implementation than the one
+selected by Berkeley DB. When a test-and-set spin mutex implementation is
+selected, it is often useful to tune the number of spins made before
+yielding the processor and sleeping. For more information, see the
+<a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a> method.</p>
+<p>Finally, Berkeley DB may put multiple mutexes on individual cache lines. When
+tuning Berkeley DB for large multiprocessor systems, it may be useful to tune
+mutex alignment using the
+<a href="../../ref/build_unix/conf.html#--with-mutexalign">--with-mutexalign</a>
+configuration argument.</p>
+<p><dt><a href="../../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a><dd>By default, the Berkeley DB library will only select the POSIX pthread mutex
+implementation if it supports mutexes shared between multiple processes.
+If your application does not share its database environment between
+processes and your system's POSIX mutex support was not selected because
+it did not support inter-process mutexes, you may be able to increase
+performance and transactional throughput by configuring with the
+<a href="../../ref/build_unix/conf.html#--enable-posixmutexes">--enable-posixmutexes</a> argument.
<p><dt>log buffer size<dd>Berkeley DB internally maintains a buffer of log writes. The buffer is
written to disk at transaction commit, by default, or, whenever it
is filled. If it is consistently being filled before transaction
commit, it will be written multiple times per transaction, costing
application performance. In these cases, increasing the size of the
log buffer can increase application throughput.
+<p><dt>log file location<dd>If the database environment's log files are on the same disk as the
+databases, the disk arms will have to seek back-and-forth between the
+two. Placing the log files and the databases on different disk arms
+can often increase application throughput.
<p><dt>trickle write<dd>In some applications, the cache is sufficiently active and dirty that
readers frequently need to write a dirty page in order to have space in
which to read a new page from the backing database file. You can use
the <a href="../../utility/db_stat.html">db_stat</a> utility (or the statistics returned by the
-<a href="../../api_c/memp_stat.html">memp_stat</a> function) to see how often this is happening in your
+<a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a> method) to see how often this is happening in your
application's cache. In this case, using a separate thread of control
-and the <a href="../../api_c/memp_trickle.html">memp_trickle</a> interface to trickle-write pages can often
-increase the overall throughput of the application.
+and the <a href="../../api_c/memp_trickle.html">DB_ENV-&gt;memp_trickle</a> method to trickle-write pages can often increase
+the overall throughput of the application.
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/reclimit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/throughput.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/why.html b/db/docs/ref/transapp/why.html
index 8fee13082..ecdf60fe6 100644
--- a/db/docs/ref/transapp/why.html
+++ b/db/docs/ref/transapp/why.html
@@ -1,49 +1,40 @@
-<!--$Id: why.so,v 1.1 2000/07/25 17:56:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: why.so,v 1.7 2003/11/04 14:53:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Why transactions?</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Protected Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/term.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Berkeley DB Transactional Data Store Applications</dl></h3></td>
+<td align=right><a href="../transapp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/term.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Why transactions?</h1>
+<h3 align=center>Why transactions?</h3>
<p>Perhaps the first question to answer is "Why transactions?" There are
-a number of reasons for including transactional support in your
-applications. The most common ones are:
+a number of reasons to include transactional support in your applications.
+The most common ones are the following:</p>
<p><dl compact>
-<p><dt>Recoverability<dd>Applications often need to ensure that, no matter how the system or
+<p><dt>Recoverability<dd>Applications often need to ensure that no matter how the system or
application fails, previously saved data is available the next time the
-application runs.
-<p><dt>Deadlock avoidance<dd>When multiple threads of control change the database at the same time,
-there is usually the possibility of deadlock, that is, where each of
-the threads of control owns a resource another thread wants, and so no
-thread is able to make forward progress, all waiting for a resource.
-Deadlocks are resolved by having one of the operations involved release
-the resources it controls so the other operations can proceed. (The
-operation releasing its resources usually just tries again later.)
-Transactions are necessary so that any changes that were already made
-to the database can be undone as part of releasing the held resources.
-<p><dt>Atomicity<dd>Applications often need to make multiple changes to one or more
-databases, but want to ensure that either all of the changes happen, or
-none of them happen. Transactions guarantee that a group of changes
-are atomic, that is, if the application or system fails, either all of
-the changes to the databases will appear when the application next runs,
-or none of them.
-<p><dt>Repeatable reads<dd>Applications sometimes need to ensure that, while doing a group of
-operations on a database, the value returned as a result of a database
-retrieval doesn't change, that is, if you retrieve the same key more
-than once, the data item will be the same each time. Transactions
-guarantee this behavior.
+application runs. This is often called Durability.
+<p><dt>Atomicity<dd>Applications may need to make multiple changes to one or more databases,
+but ensure that either all of the changes happen, or none of them
+happens. Transactions guarantee that a group of changes are atomic;
+that is, if the application or system fails, either all of the changes
+to the databases will appear when the application next runs, or none of
+them.
+<p><dt>Isolation<dd>Applications may need to make changes in isolation, that is, ensure that
+only a single thread of control is modifying a key/data pair at a time.
+Transactions ensure each thread of control sees all records as if all
+other transactions either completed before or after its transaction.
</dl>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/transapp/term.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../transapp/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../transapp/term.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/transapp/writetest.cs b/db/docs/ref/transapp/writetest.cs
index bde092cb6..0d00cbe44 100644
--- a/db/docs/ref/transapp/writetest.cs
+++ b/db/docs/ref/transapp/writetest.cs
@@ -1,16 +1,16 @@
/*
* writetest --
*
- * Id: writetest.cs,v 10.3 1999/11/19 17:21:06 bostic Exp
+ * $Id: writetest.cs,v 10.7 2003/02/27 19:08:37 bostic Exp $
*/
#include <sys/types.h>
+#include <sys/time.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <time.h>
#include <unistd.h>
void usage __P((void));
@@ -21,7 +21,8 @@ main(argc, argv)
char *argv[];
{
struct timeval start_time, end_time;
- long usecs;
+ double usecs;
+ long val;
int bytes, ch, cnt, fd, ops;
char *fname, buf[100 * 1024];
@@ -61,7 +62,7 @@ main(argc, argv)
memset(buf, 0, bytes);
- printf("running: %d ops\n", ops);
+ printf("Running: %d ops\n", ops);
(void)gettimeofday(&start_time, NULL);
for (cnt = 0; cnt < ops; ++cnt) {
@@ -80,12 +81,29 @@ main(argc, argv)
}
(void)gettimeofday(&end_time, NULL);
- usecs = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
- end_time.tv_usec - start_time.tv_usec;
- printf("Elapsed time: %ld.%06ld seconds\n",
- usecs / 1000000, usecs % 1000000);
- printf("%d ops: %7.2f ops per second\n",
- ops, (float)1000000 * ops/usecs);
+ /*
+ * Guarantee end_time fields are greater than or equal to start_time
+ * fields.
+ */
+ if (end_time.tv_sec > start_time.tv_sec) {
+ --end_time.tv_sec;
+ end_time.tv_usec += 1000000;
+ }
+
+ /* Display elapsed time. */
+ val = end_time.tv_sec - start_time.tv_sec;
+ printf("Elapsed time: %ld:", val / (60 * 60));
+ val %= 60 * 60;
+ printf("%ld:", val / 60);
+ val %= 60;
+ printf("%ld.%ld\n", val, end_time.tv_usec - start_time.tv_usec);
+
+ /* Display operations per second. */
+ usecs =
+ (end_time.tv_sec - start_time.tv_sec) * 1000000 +
+ (end_time.tv_usec - start_time.tv_usec);
+ printf("%d operations: %7.2f operations per second\n",
+ ops, (ops / usecs) * 1000000);
(void)unlink(fname);
exit (0);
diff --git a/db/docs/ref/txn/config.html b/db/docs/ref/txn/config.html
index beb73859f..af33e1af1 100644
--- a/db/docs/ref/txn/config.html
+++ b/db/docs/ref/txn/config.html
@@ -1,37 +1,41 @@
-<!--$Id: config.so,v 10.14 2000/10/03 17:17:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 10.19 2002/07/22 05:11:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring transactions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/txn/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/other.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../txn/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/limits.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring transactions</h1>
-<p>There is only a single parameter used in configuring transactions, the
-<a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag. Setting the <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag to
-<a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> when opening a transaction region changes the
-behavior of transactions not to synchronously flush the log during
-transaction commit.
-<p>This change will significantly increase application transactional
-throughput. However, it means that while transactions will continue to
-exhibit the ACI (atomicity, consistency and isolation) properties, they
-will not have D (durability). Database integrity will be maintained but
-it is possible that some number of the most recently committed
-transactions may be undone during recovery instead of being redone.
-<p>The application may also limit the number of simultaneous outstanding
-transactions supported by the environment by calling the
-<a href="../../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a> function. When this number is met, additional calls to
-<a href="../../api_c/txn_begin.html">txn_begin</a> will fail until some active transactions complete.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/txn/limits.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/other.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Configuring transactions</h3>
+<p>The application may change the number of simultaneous outstanding
+transactions supported by the Berkeley DB environment by calling the
+<a href="../../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a> method. This will also set the size of the
+underlying transaction subsystem's region. When the number of
+outstanding transactions is reached, additional calls to
+<a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> will fail until some active transactions complete.</p>
+<p>There is an additional parameter used in configuring transactions; the
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag. Setting the <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag to
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> when opening a transaction region changes the
+behavior of transactions to not write or synchronously flush the log
+during transaction commit.</p>
+<p>This change may significantly increase application transactional
+throughput. However, it means that although transactions will continue
+to exhibit the ACI (atomicity, consistency, and isolation) properties,
+they will not have D (durability). Database integrity will be
+maintained, but it is possible that some number of the most recently
+committed transactions may be undone during recovery instead of being
+redone.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../txn/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/limits.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/txn/intro.html b/db/docs/ref/txn/intro.html
index 557481509..0c3e99935 100644
--- a/db/docs/ref/txn/intro.html
+++ b/db/docs/ref/txn/intro.html
@@ -1,86 +1,96 @@
-<!--$Id: intro.so,v 10.14 2000/03/18 21:43:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.25 2003/10/18 19:16:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Berkeley DB and transactions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/mp/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/nested.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../mp/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Berkeley DB and transactions</h1>
-<p>The transaction subsystem makes operations atomic, consistent, isolated,
+<h3 align=center>Berkeley DB and transactions</h3>
+<p>The Transaction subsystem makes operations atomic, consistent, isolated,
and durable in the face of system and application failures. The subsystem
requires that the data be properly logged and locked in order to attain
these properties. Berkeley DB contains all the components necessary to
-transaction-protect the Berkeley DB access methods and other forms of data may
-be protected if they are logged and locked appropriately.
-<p>The transaction subsystem is created, initialized, and opened by calls to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> with the <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flag specified. Note that
-enabling transactions automatically enables logging, but does not enable
-locking, as a single thread of control that needed atomicity and
-recoverability would not require it.
-<p>The <a href="../../api_c/txn_begin.html">txn_begin</a> function starts a transaction, returning an opaque
-handle to a transaction. If the parent parameter to <a href="../../api_c/txn_begin.html">txn_begin</a> is
-non-NULL, then the new transaction is a child of the designated parent
-transaction.
-<p>The <a href="../../api_c/txn_abort.html">txn_abort</a> function ends the designated transaction and causes
+transaction-protect the Berkeley DB access methods, and other forms of data may
+be protected if they are logged and locked appropriately.</p>
+<p>The Transaction subsystem is created, initialized, and opened by calls to
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> with the <a href="../../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> flag specified. Note
+that enabling transactions automatically enables logging, but does not
+enable locking because a single thread of control that needed atomicity
+and recoverability would not require it.</p>
+<p>The <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> function starts a transaction, returning an opaque
+handle to a transaction. If the parent parameter to <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> is
+non-NULL, the new transaction is a child of the designated parent
+transaction.</p>
+<p>The <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> function ends the designated transaction and causes
all updates performed by the transaction to be undone. The end result is
that the database is left in a state identical to the state that existed
-prior to the <a href="../../api_c/txn_begin.html">txn_begin</a>. If the aborting transaction has any child
+prior to the <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>. If the aborting transaction has any child
transactions associated with it (even ones that have already been
committed), they are also aborted. Any transactions that are unresolved
-(i.e., neither committed nor aborted) when the application or system fails
-are aborted during recovery.
-<p>The <a href="../../api_c/txn_commit.html">txn_commit</a> function ends the designated transaction and makes
+(neither committed nor aborted) when the application or system fails
+are aborted during recovery.</p>
+<p>The <a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> function ends the designated transaction and makes
all the updates performed by the transaction permanent, even in the face
of application or system failure. If this is a parent transaction
-committing, then all child transactions that individually committed or
-had not been resolved are also committed.
+committing, all child transactions that individually committed or
+had not been resolved are also committed.</p>
<p>Transactions are identified by 32-bit unsigned integers. The ID
-associated with any transaction can be obtained using the <a href="../../api_c/txn_id.html">txn_id</a>
+associated with any transaction can be obtained using the <a href="../../api_c/txn_id.html">DB_TXN-&gt;id</a>
function. If an application is maintaining information outside of Berkeley DB
-that it wishes to transaction-protect, it should use this transaction ID
-as the locking ID.
-<p>The <a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a> function causes a transaction checkpoint. A
-checkpoint is performed relative to a specific log sequence number (LSN),
+it wants to transaction-protect, it should use this transaction ID as
+the locking ID.</p>
+<p>The <a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> function causes a transaction checkpoint. A
+checkpoint is performed using to a specific log sequence number (LSN),
referred to as the checkpoint LSN. When a checkpoint completes
successfully, it means that all data buffers whose updates are described
by LSNs less than the checkpoint LSN have been written to disk. This, in
turn, means that the log records less than the checkpoint LSN are no
longer necessary for normal recovery (although they would be required for
-catastrophic recovery should the database files be lost) and all log files
+catastrophic recovery if the database files were lost), and all log files
containing only records prior to the checkpoint LSN may be safely archived
-and removed.
-<p>It is possible that in order to complete a transaction checkpoint, it will
-be necessary to write a buffer that is currently in use (i.e., is actively
-being read or written by some transaction). In this case,
-<a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a> will not be able to write the buffer, as doing so
-might cause an inconsistent version of the page to be written to disk,
-and instead of completing successfully will return with an error code of
-<a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a>. In such cases, the checkpoint can simply be
-retried after a short delay.
-<p>The interval between successive checkpoints is directly proportional to
-the length of time required to run normal recovery. If the interval
-between checkpoints is long, then a large number of updates that are
-recorded in the log may not yet be written to disk and recovery may take
-longer to run. If the interval is short, then data is being written to
-disk more frequently, but the recovery time will be shorter. Often, the
-checkpoint interval will be tuned for each specific application.
-<p>The <a href="../../api_c/txn_stat.html">txn_stat</a> function returns information about the status of
-the transaction subsystem. It is the programmatic interface used by the
-<a href="../../utility/db_stat.html">db_stat</a> utility.
-<p>The transaction system is closed by a call to <a href="../../api_c/env_close.html">DBENV-&gt;close</a>.
+and removed.</p>
+<p>The time required to run normal recovery is proportional to the amount
+of work done between checkpoints. If a large number of modifications
+happen between checkpoints, many updates recorded in the log may
+not have been written to disk when failure occurred, and recovery may
+take longer to run. Generally, if the interval between checkpoints is
+short, data may be being written to disk more frequently, but the
+recovery time will be shorter. Often, the checkpoint interval is tuned
+for each specific application.</p>
+<p>The <a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a> method returns information about the status of the
+transaction subsystem. It is the programmatic interface used by the
+<a href="../../utility/db_stat.html">db_stat</a> utility.</p>
+<p>The transaction system is closed by a call to <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a>.</p>
<p>Finally, the entire transaction system may be removed using the
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> interface.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/mp/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/nested.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method.</p>
+<!--$Id: m4.methods,v 1.1 2002/08/30 20:02:41 bostic Exp $-->
+<table border=1 align=center>
+<tr><th>Transaction Subsystem and Related Methods</th><th>Description</th></tr>
+<tr><td><a href="../../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a></td><td>Set maximum number of transactions</td></tr>
+<tr><td><a href="../../api_c/env_set_tx_timestamp.html">DB_ENV-&gt;set_tx_timestamp</a></td><td>Set recovery timestamp</td></tr>
+<tr><td><a href="../../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a></td><td>Checkpoint the transaction subsystem</td></tr>
+<tr><td><a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a></td><td>Distributed transaction recovery</td></tr>
+<tr><td><a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a></td><td>Return transaction subsystem statistics</td></tr>
+<tr><td><a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a></td><td>Begin a transaction</td></tr>
+<tr><td><a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a></td><td>Abort a transaction</td></tr>
+<tr><td><a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a></td><td>Commit a transaction</td></tr>
+<tr><td><a href="../../api_c/txn_discard.html">DB_TXN-&gt;discard</a></td><td>Discard a prepared but not resolved transaction handle</td></tr>
+<tr><td><a href="../../api_c/txn_id.html">DB_TXN-&gt;id</a></td><td>Return a transaction's ID</td></tr>
+<tr><td><a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a></td><td>Prepare a transaction for commit</td></tr>
+<tr><td><a href="../../api_c/txn_set_timeout.html">DB_TXN-&gt;set_timeout</a></td><td>Set transaction timeout</td></tr>
+</table>
+<table width="100%"><tr><td><br></td><td align=right><a href="../mp/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../txn/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/txn/limits.html b/db/docs/ref/txn/limits.html
index 0ed978066..a72ad4a0b 100644
--- a/db/docs/ref/txn/limits.html
+++ b/db/docs/ref/txn/limits.html
@@ -1,66 +1,56 @@
-<!--$Id: limits.so,v 10.29 2001/01/10 17:33:53 margo Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: limits.so,v 10.37 2002/02/23 20:05:26 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Transaction limits</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Transaction Subsystem</dl></h3></td>
-<td width="1%"><a href="../../ref/txn/nested.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../txn/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Transaction limits</h1>
+<h3 align=center>Transaction limits</h3>
<h3>Transaction IDs</h3>
-<p>Transactions are identified uniquely by 32-bit unsigned integers. The
-high-order bit of the transaction ID is reserved (and defined to be 1)
-resulting in just over two billion unique transaction IDs. Each time
-that recovery is run, the beginning transaction ID is reset with new
-transactions being numbered starting from 1. This means that recovery
-must be run at least once every two billion transactions.
-<p>It is possible that some environments may need to be aware of this
-limitation. Consider an application performing 600 transactions a second
-for 15 hours a day. The transaction ID space will run out in roughly 66
-days:
-<p><blockquote><pre>2^31 / (600 * 15 * 60 * 60) = 66</pre></blockquote>
-<p>Doing only 100 transactions a second exhausts the transaction ID space
-in roughly one year.
-<p>The transaction ID name space is initialized each time
-a database environment is created or recovered. If you
-reach the end of the transaction ID name space, it must
-be handled as if an application or system failure had
-occurred. The most recently allocated transaction ID
-is the <b>st_last_txnid</b> value in the transaction
-statistics information, and is displayed by the
-<a href="../../utility/db_stat.html">db_stat</a> utility.
+<p>Transactions are identified by 31-bit unsigned integers, which means
+there are just over two billion unique transaction IDs. When a database
+environment is initially created or recovery is run, the transaction ID
+name space is reset, and new transactions are numbered starting from
+0x80000000 (2,147,483,648). The IDs will wrap if the maximum
+transaction ID is reached, starting again from 0x80000000. The most
+recently allocated transaction ID is the <b>st_last_txnid</b> value in
+the transaction statistics information, and can be displayed by the
+<a href="../../utility/db_stat.html">db_stat</a> utility.</p>
<h3>Cursors</h3>
<p>When using transactions, cursors are localized to a single transaction.
-That is, a cursor may not span transactions and must be opened and
+That is, a cursor may not span transactions, and must be opened and
closed within a single transaction. In addition, intermingling
transaction-protected cursor operations and non-transaction-protected
cursor operations on the same database in a single thread of control is
-practically guaranteed to deadlock as the locks obtained for transactions
-and non-transactions can conflict.
+practically guaranteed to deadlock because the locks obtained for
+transactions and non-transactions can conflict.</p>
<h3>Multiple Threads of Control</h3>
-<p>Since transactions must hold all their locks until commit, a single
+<p>Because transactions must hold all their locks until commit, a single
transaction may accumulate a large number of long-term locks during its
-lifetime. As a result, when two concurrently running transactions access
-the same database, there is strong potential for conflict. While Berkeley
-DB allows an application to have multiple outstanding transactions active
-within a single thread of control, great care must be taken to ensure that
-the transactions do not interfere with each other (e.g., attempt to obtain
-conflicting locks on the same data). If two concurrently active
-transactions in the same thread of control do encounter a lock conflict,
-the thread of control will deadlock in such a manner that the deadlock
-detector will be unable to resolve the problem. In this case, there is
-no true deadlock, but because the transaction on which a transaction is
-waiting is in the same thread of control, no forward progress can be made.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/txn/nested.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/txn/config.html"><img src="../../images/next.gif" alt="Next"></a>
+lifetime. As a result, when two concurrently running transactions
+access the same database, there is strong potential for conflict.
+Although Berkeley DB allows an application to have multiple outstanding
+transactions active within a single thread of control, great care must
+be taken to ensure that the transactions do not block each other (for
+example, attempt to obtain conflicting locks on the same data). If two
+concurrently active transactions in the same thread of control do
+encounter a lock conflict, the thread of control will deadlock so that
+the deadlock detector cannot detect the problem. In this case, there
+is no true deadlock, but because the transaction on which a transaction
+is waiting is in the same thread of control, no forward progress can be
+made.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../txn/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../rpc/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.2.0/convert.html b/db/docs/ref/upgrade.2.0/convert.html
index ad5685368..0c55bb3da 100644
--- a/db/docs/ref/upgrade.2.0/convert.html
+++ b/db/docs/ref/upgrade.2.0/convert.html
@@ -1,27 +1,28 @@
<!--$Id: convert.so,v 11.6 2000/03/18 21:43:19 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 2.0: converting applications</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.2.0/system.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.2.0/system.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 2.0: converting applications</h1>
+<h3 align=center>Release 2.0: converting applications</h3>
<p>Mapping the Berkeley DB 1.85 functionality into Berkeley DB version 2 is almost always
simple. The manual page <a href="../../api_c/db_open.html">DB-&gt;open</a> replaces the Berkeley DB 1.85 manual
pages <b>dbopen</b>(3), <b>btree</b>(3), <b>hash</b>(3) and
<b>recno</b>(3). You should be able to convert each 1.85 function
call into a Berkeley DB version 2 function call using just the <a href="../../api_c/db_open.html">DB-&gt;open</a>
-documentation.
-<p>Some guidelines and things to watch out for:
-<p><ol>
+documentation.</p>
+<p>Some guidelines and things to watch out for:</p>
+<ol>
<p><li>Most access method functions have exactly the same semantics as in Berkeley DB
1.85, although the arguments to the functions have changed in some cases.
To get your code to compile, the most common change is to add the
@@ -44,7 +45,7 @@ the creation of an extra object (the DBC object), which is then used to
access the database.
<p>Specifically, the partial key match and range search functionality of the
R_CURSOR flag in DB-&gt;seq has been replaced by the
-<a href="../../api_c/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a> flag in <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>.
+<a href="../../api_c/dbc_get.html#DB_SET_RANGE">DB_SET_RANGE</a> flag in <a href="../../api_c/dbc_get.html">DBcursor-&gt;c_get</a>.</p>
<p><li>In version 2 of the Berkeley DB library, additions or deletions into Recno
(fixed and variable-length record) databases no longer automatically
logically renumber all records after the add/delete point, by default.
@@ -52,7 +53,7 @@ The default behavior is that deleting records does not cause subsequent
records to be renumbered, and it is an error to attempt to add new records
between records already in the database. Applications wanting the
historic Recno access method semantics should call the
-<a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> function with the <a href="../../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag.
+<a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a> method with the <a href="../../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag.
<p><li>Opening a database in Berkeley DB version 2 is a much heavier-weight operation
than it was in Berkeley DB 1.85. Therefore, if your historic applications were
written to open a database, perform a single operation, and close the
@@ -66,9 +67,9 @@ using a persistent environment across invocations.
function calls will work, we recommend that you eventually reconsider your
application's interface to the Berkeley DB database library in light of the
additional functionality supplied by Berkeley DB version 2, as it is likely to
-result in enhanced application performance.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.2.0/system.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+result in enhanced application performance.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.2.0/system.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.2.0/disk.html b/db/docs/ref/upgrade.2.0/disk.html
index 8e7aeabc7..b3e16695e 100644
--- a/db/docs/ref/upgrade.2.0/disk.html
+++ b/db/docs/ref/upgrade.2.0/disk.html
@@ -1,27 +1,28 @@
<!--$Id: disk.so,v 11.6 2000/12/05 20:36:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 2.0: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.2.0/convert.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.2.0/convert.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 2.0: upgrade requirements</h1>
+<h3 align=center>Release 2.0: upgrade requirements</h3>
<p>You will need to upgrade your on-disk databases, as all access method
database formats changed in the Berkeley DB 2.0 release. For information on
converting databases from Berkeley DB 1.85 to Berkeley DB 2.0, see the
<a href="../../utility/db_dump.html">db_dump185</a> and <a href="../../utility/db_load.html">db_load</a> documentation. As database
environments did not exist prior to the 2.0 release, there is no
-question of upgrading existing database environments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.2.0/convert.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+question of upgrading existing database environments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.2.0/convert.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.2.0/intro.html b/db/docs/ref/upgrade.2.0/intro.html
index 1bebc81cb..491565eae 100644
--- a/db/docs/ref/upgrade.2.0/intro.html
+++ b/db/docs/ref/upgrade.2.0/intro.html
@@ -1,32 +1,33 @@
<!--$Id: intro.so,v 11.8 2000/12/21 18:33:44 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 2.0: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade/process.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/system.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade/process.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/system.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 2.0: introduction</h1>
+<h3 align=center>Release 2.0: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 1.85 and 1.86 release interfaces to the Berkeley DB 2.0 release
interfaces. They do not describe how to upgrade to the current Berkeley DB
-release interfaces.
+release interfaces.</p>
<p>It is not difficult to upgrade Berkeley DB 1.85 applications to use the Berkeley DB
version 2 library. The Berkeley DB version 2 library has a Berkeley DB 1.85
compatibility API, which you can use by either recompiling your
application's source code or by relinking its object files against the
version 2 library. The underlying databases must be converted, however,
-as the Berkeley DB version 2 library has a different underlying database format.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade/process.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/system.html"><img src="../../images/next.gif" alt="Next"></a>
+as the Berkeley DB version 2 library has a different underlying database format.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade/process.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/system.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.2.0/system.html b/db/docs/ref/upgrade.2.0/system.html
index 60a11c9bd..28660c58f 100644
--- a/db/docs/ref/upgrade.2.0/system.html
+++ b/db/docs/ref/upgrade.2.0/system.html
@@ -1,20 +1,21 @@
<!--$Id: system.so,v 11.5 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 2.0: system integration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.2.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/convert.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.2.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/convert.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 2.0: system integration</h1>
-<p><ol>
+<h3 align=center>Release 2.0: system integration</h3>
+<ol>
<p><li>It is possible to maintain both the Berkeley DB 1.85 and Berkeley DB version 2
libraries on your system. However, the <b>db.h</b> include file that
was distributed with Berkeley DB 1.85 is not compatible with the <b>db.h</b>
@@ -25,7 +26,7 @@ version 2 libraries are named <b>libdb.a</b>.
Makefile, there's no way to know exactly where it was installed on the
system. In addition, many vendors included it in the C library instead
of as a separate library, and so it may actually be part of libc and the
-<b>db.h</b> include file may be installed in <b>/usr/include</b>.
+<b>db.h</b> include file may be installed in <b>/usr/include</b>.</p>
<p>For these reasons, the simplest way to maintain both libraries is to
install Berkeley DB version 2 in a completely separate area of your system.
The Berkeley DB version 2 installation process allows you to install into a
@@ -33,7 +34,7 @@ standalone directory hierarchy on your system. See the
<a href="../../ref/build_unix/intro.html">Building for UNIX systems</a>
documentation for more information and instructions on how to install the
Berkeley DB version 2 library, include files and documentation into specific
-locations.
+locations.</p>
<p><li>Alternatively, you can replace Berkeley DB 1.85 on your system with Berkeley DB
version 2. In this case, you'll probably want to install Berkeley DB version
2 in the normal place on your system, wherever that may be, and delete
@@ -44,17 +45,17 @@ to include Berkeley DB 1.85 interface compatibility code. Whether converting
your applications to use the version 2 interface or using the version 1.85
compatibility API, you will need to recompile or relink your 1.85
applications, and you must convert any persistent application databases
-to the Berkeley DB version 2 database formats.
+to the Berkeley DB version 2 database formats.</p>
<p>If you want to recompile your Berkeley DB 1.85 applications, you will have to
change them to include the file <b>db_185.h</b> instead of
<b>db.h</b>. (The <b>db_185.h</b> file is automatically installed
during the Berkeley DB version 2 installation process.) You can then recompile
-the applications, linking them against the Berkeley DB version 2 library.
+the applications, linking them against the Berkeley DB version 2 library.</p>
<p>For more information on compiling the Berkeley DB 1.85 compatibility code into
-the Berkeley DB version 2 library, see <a href="../../ref/build_unix/intro.html">Building for UNIX platforms</a>.
+the Berkeley DB version 2 library, see <a href="../../ref/build_unix/intro.html">Building for UNIX platforms</a>.</p>
<p>For more information on converting databases from the Berkeley DB 1.85 formats
to the Berkeley DB version 2 formats, see the <a href="../../utility/db_dump.html">db_dump185</a> and
-<a href="../../utility/db_load.html">db_load</a> documentation.
+<a href="../../utility/db_load.html">db_load</a> documentation.</p>
<p><li>Finally, although we certainly do not recommend it, it is possible to
load both Berkeley DB 1.85 and Berkeley DB version 2 into the same library.
Similarly, it is possible to use both Berkeley DB 1.85 and Berkeley DB version 2
@@ -65,7 +66,7 @@ Berkeley DB versions, notably version 1.85, for portability and consistency
reasons. The only name collisions in the two libraries are the names used
by the historic <a href="../../api_c/dbm.html">dbm</a>, <a href="../../api_c/dbm.html">ndbm</a> and <a href="../../api_c/hsearch.html">hsearch</a> interfaces,
and the Berkeley DB 1.85 compatibility interfaces in the Berkeley DB version 2
-library.
+library.</p>
<p>If you are loading both Berkeley DB 1.85 and Berkeley DB version 2 into a single
library, remove the historic interfaces from one of the two library
builds, and configure the Berkeley DB version 2 build to not include the Berkeley DB
@@ -75,10 +76,10 @@ reconfiguring and rebuilding the Berkeley DB version 2 library. Obviously, if
you use the historic interfaces, you will get the version in the library
from which you did not remove them. Similarly, you will not be able to
access Berkeley DB version 2 files using the Berkeley DB 1.85 compatibility interface,
-since you have removed that from the library as well.
+since you have removed that from the library as well.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.2.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/convert.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.2.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/convert.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.2.0/toc.html b/db/docs/ref/upgrade.2.0/toc.html
index 68502be59..e6b475fa1 100644
--- a/db/docs/ref/upgrade.2.0/toc.html
+++ b/db/docs/ref/upgrade.2.0/toc.html
@@ -1,20 +1,28 @@
-<!--$Id: toc.so,v 11.2 2000/12/05 20:36:25 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 11.3 2001/06/09 14:34:45 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Upgrading Berkeley DB 1.XX applications to Berkeley DB 2.0</title>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 1.XX applications to Berkeley DB 2.0</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Upgrading Berkeley DB 1.XX applications to Berkeley DB 2.0</h1>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 1.XX applications to Berkeley DB 2.0</h3>
<ol>
-<li><a href="intro.html">Release 2.0: introduction</a>
+<p><li><a href="intro.html">Release 2.0: introduction</a>
<li><a href="system.html">Release 2.0: system integration</a>
<li><a href="convert.html">Release 2.0: converting applications</a>
<li><a href="disk.html">Release 2.0: upgrade requirements</a>
</ol>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/close.html b/db/docs/ref/upgrade.3.0/close.html
index 620e4babb..71b74bc4b 100644
--- a/db/docs/ref/upgrade.3.0/close.html
+++ b/db/docs/ref/upgrade.3.0/close.html
@@ -1,34 +1,35 @@
-<!--$Id: close.so,v 11.9 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: close.so,v 11.10 2002/03/06 15:51:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: DB-&gt;sync and DB-&gt;close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_put.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: DB-&gt;sync and DB-&gt;close</h1>
-<p>In previous Berkeley DB releases, the <a href="../../api_c/db_close.html">DB-&gt;close</a> and <a href="../../api_c/db_sync.html">DB-&gt;sync</a> functions
-discarded any return of <a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> from the underlying buffer
+<h3 align=center>Release 3.0: DB-&gt;sync and DB-&gt;close</h3>
+<p>In previous Berkeley DB releases, the <a href="../../api_c/db_close.html">DB-&gt;close</a> and <a href="../../api_c/db_sync.html">DB-&gt;sync</a> methods
+discarded any return of DB_INCOMPLETE from the underlying buffer
pool interfaces, and returned success to its caller. (The
-<a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> error will be returned if the buffer pool functions
+DB_INCOMPLETE error will be returned if the buffer pool functions
are unable to flush all of the database's dirty blocks from the pool.
This often happens if another thread is reading or writing the database's
-pages in the pool.)
+pages in the pool.)</p>
<p>In the 3.X release, <a href="../../api_c/db_sync.html">DB-&gt;sync</a> and <a href="../../api_c/db_close.html">DB-&gt;close</a> will return
-<a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> to the application. The best solution is to not
+DB_INCOMPLETE to the application. The best solution is to not
call <a href="../../api_c/db_sync.html">DB-&gt;sync</a> and specify the <a href="../../api_c/db_close.html#DB_NOSYNC">DB_NOSYNC</a> flag to the
-<a href="../../api_c/db_close.html">DB-&gt;close</a> function when multiple threads are expected to be accessing the
+<a href="../../api_c/db_close.html">DB-&gt;close</a> method when multiple threads are expected to be accessing the
database. Alternatively, the caller can ignore any error return of
-<a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_put.html"><img src="../../images/next.gif" alt="Next"></a>
+DB_INCOMPLETE.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/cxx.html b/db/docs/ref/upgrade.3.0/cxx.html
index 7f6c1ab7e..9850ec94e 100644
--- a/db/docs/ref/upgrade.3.0/cxx.html
+++ b/db/docs/ref/upgrade.3.0/cxx.html
@@ -1,31 +1,32 @@
<!--$Id: cxx.so,v 11.5 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: additional C++ changes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/db_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/db_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: additional C++ changes</h1>
+<h3 align=center>Release 3.0: additional C++ changes</h3>
<p>The Db::set_error_model method is gone. The way to change the C++ API to
return errors rather than throw exceptions is via a flag on the DbEnv or
-Db constructor. For example:
-<p><blockquote><pre>int dberr;
+Db constructor. For example:</p>
+<blockquote><pre>int dberr;
DbEnv *dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS);</pre></blockquote>
<p>creates an environment that will never throw exceptions, and method
-returns should be checked instead.
+returns should be checked instead.</p>
<p>There are a number of smaller changes to the API that bring the C, C++
and Java APIs much closer in terms of functionality and usage. Please
-refer to the pages for upgrading C applications for further details.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/db_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
+refer to the pages for upgrading C applications for further details.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/db_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/db.html b/db/docs/ref/upgrade.3.0/db.html
index a086b589e..ffbdc0b97 100644
--- a/db/docs/ref/upgrade.3.0/db.html
+++ b/db/docs/ref/upgrade.3.0/db.html
@@ -1,39 +1,40 @@
<!--$Id: db.so,v 11.9 2000/12/01 17:57:34 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: the DB structure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/xa.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbinfo.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/xa.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbinfo.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: the DB structure</h1>
-<p>The DB structure is now opaque for applications in the Berkeley DB 3.0
+<h3 align=center>Release 3.0: the DB structure</h3>
+<p>The <a href="../../api_c/db_class.html">DB</a> structure is now opaque for applications in the Berkeley DB 3.0
release. Accesses to any fields within that structure by the application
should be replaced with method calls. The following example illustrates
this using the historic type structure field. In the Berkeley DB 2.X releases,
applications could find the type of an underlying database using code
-similar to the following:
-<p><blockquote><pre>DB *db;
+similar to the following:</p>
+<blockquote><pre>DB *db;
DB_TYPE type;
<p>
type = db-&gt;type;</pre></blockquote>
<p>in the Berkeley DB 3.X releases, this should be done using the
-<a href="../../api_c/db_get_type.html">DB-&gt;get_type</a> method, as follows:
-<p><blockquote><pre>DB *db;
+<a href="../../api_c/db_get_type.html">DB-&gt;get_type</a> method, as follows:</p>
+<blockquote><pre>DB *db;
DB_TYPE type;
<p>
type = db-&gt;get_type(db);</pre></blockquote>
-<p>The following table lists the DB fields previously used by
-applications and the methods that should now be used to get or set them.
-<p><table border=1 align=center>
-<tr><th>DB field</th><th>Berkeley DB 3.X method</th></tr>
+<p>The following table lists the <a href="../../api_c/db_class.html">DB</a> fields previously used by
+applications and the methods that should now be used to get or set them.</p>
+<table border=1 align=center>
+<tr><th><a href="../../api_c/db_class.html">DB</a> field</th><th>Berkeley DB 3.X method</th></tr>
<tr><td>byteswapped</td><td><a href="../../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a></td></tr>
<tr><td>db_errcall</td><td><a href="../../api_c/db_set_errcall.html">DB-&gt;set_errcall</a></td></tr>
<tr><td>db_errfile</td><td><a href="../../api_c/db_set_errfile.html">DB-&gt;set_errfile</a></td></tr>
@@ -41,8 +42,8 @@ applications and the methods that should now be used to get or set them.
<tr><td>db_paniccall</td><td><a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a></td></tr>
<tr><td>type</td><td><a href="../../api_c/db_get_type.html">DB-&gt;get_type</a></td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/xa.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbinfo.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/xa.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbinfo.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/db_cxx.html b/db/docs/ref/upgrade.3.0/db_cxx.html
index e3a794e38..81e757dbc 100644
--- a/db/docs/ref/upgrade.3.0/db_cxx.html
+++ b/db/docs/ref/upgrade.3.0/db_cxx.html
@@ -1,19 +1,20 @@
<!--$Id: db_cxx.so,v 11.9 2000/03/22 22:02:14 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: the Db class for C++ and Java</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/dbenv_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/dbenv_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: the Db class for C++ and Java</h1>
+<h3 align=center>Release 3.0: the Db class for C++ and Java</h3>
<p>The static Db::open method and the DbInfo class have been removed in the
Berkeley DB 3.0 release. The way to open a database file is to use the new Db
constructor with two arguments, followed by set_XXX methods to configure
@@ -22,26 +23,26 @@ comparing the Berkeley DB 3.0 release open method with the 2.X static open
method, the second argument is new. It is a database name, which can
be null. The DbEnv argument has been removed, as the environment is now
specified in the constructor. The open method no longer returns a Db,
-since it operates on one.
-<p>Here's a C++ example opening a Berkeley DB database using the 2.X interface:
-<p><blockquote><pre>// Note: by default, errors are thrown as exceptions
+since it operates on one.</p>
+<p>Here's a C++ example opening a Berkeley DB database using the 2.X interface:</p>
+<blockquote><pre>// Note: by default, errors are thrown as exceptions
Db *table;
Db::open("lookup.db", DB_BTREE, DB_CREATE, 0644, dbenv, 0, &table);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>// Note: by default, errors are thrown as exceptions
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>// Note: by default, errors are thrown as exceptions
Db *table = new Db(dbenv, 0);
table-&gt;open("lookup.db", NULL, DB_BTREE, DB_CREATE, 0644);</pre></blockquote>
-<p>Here's a Java example opening a Berkeley DB database using the 2.X interface:
-<p><blockquote><pre>// Note: errors are thrown as exceptions
+<p>Here's a Java example opening a Berkeley DB database using the 2.X interface:</p>
+<blockquote><pre>// Note: errors are thrown as exceptions
Db table = Db.open("lookup.db", Db.DB_BTREE, Db.DB_CREATE, 0644, dbenv, 0);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>// Note: errors are thrown as exceptions
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>// Note: errors are thrown as exceptions
Db table = new Db(dbenv, 0);
table.open("lookup.db", null, Db.DB_BTREE, Db.DB_CREATE, 0644);</pre></blockquote>
<p>Note that if the dbenv argument is null, the database will not exist
-within an environment.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/dbenv_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+within an environment.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/dbenv_cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/dbenv.html b/db/docs/ref/upgrade.3.0/dbenv.html
index 08b6ec149..6ba4de5ef 100644
--- a/db/docs/ref/upgrade.3.0/dbenv.html
+++ b/db/docs/ref/upgrade.3.0/dbenv.html
@@ -1,68 +1,69 @@
-<!--$Id: dbenv.so,v 11.9 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbenv.so,v 11.12 2002/02/23 20:05:27 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: the DB_ENV structure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/func.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/func.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: the DB_ENV structure</h1>
-<p>The DB_ENV structure is now opaque for applications in the Berkeley DB
+<h3 align=center>Release 3.0: the DB_ENV structure</h3>
+<p>The <a href="../../api_c/env_class.html">DB_ENV</a> structure is now opaque for applications in the Berkeley DB
3.0 release. Accesses to any fields within that structure by the
application should be replaced with method calls. The following example
illustrates this using the historic errpfx structure field. In the Berkeley DB
2.X releases, applications set error prefixes using code similar to the
-following:
-<p><blockquote><pre>DB_ENV *dbenv;
+following:</p>
+<blockquote><pre>DB_ENV *dbenv;
<p>
dbenv-&gt;errpfx = "my prefix";</pre></blockquote>
<p>in the Berkeley DB 3.X releases, this should be done using the
-<a href="../../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a> method, as follows:
-<p><blockquote><pre>DB_ENV *dbenv;
+<a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a> method, as follows:</p>
+<blockquote><pre>DB_ENV *dbenv;
<p>
dbenv-&gt;set_errpfx(dbenv, "my prefix");</pre></blockquote>
-<p>The following table lists the DB_ENV fields previously used by
-applications and the methods that should now be used to set them.
-<p><table border=1 align=center>
-<tr><th>DB_ENV field</th><th>Berkeley DB 3.X method</th></tr>
-<tr><td>db_errcall</td><td><a href="../../api_c/env_set_errcall.html">DBENV-&gt;set_errcall</a></td></tr>
-<tr><td>db_errfile</td><td><a href="../../api_c/env_set_errfile.html">DBENV-&gt;set_errfile</a></td></tr>
-<tr><td>db_errpfx</td><td><a href="../../api_c/env_set_errpfx.html">DBENV-&gt;set_errpfx</a></td></tr>
-<tr><td>db_lorder</td><td>This field was removed from the DB_ENV structure in the Berkeley DB
+<p>The following table lists the <a href="../../api_c/env_class.html">DB_ENV</a> fields previously used by
+applications and the methods that should now be used to set them.</p>
+<table border=1 align=center>
+<tr><th><a href="../../api_c/env_class.html">DB_ENV</a> field</th><th>Berkeley DB 3.X method</th></tr>
+<tr><td>db_errcall</td><td><a href="../../api_c/env_set_errcall.html">DB_ENV-&gt;set_errcall</a></td></tr>
+<tr><td>db_errfile</td><td><a href="../../api_c/env_set_errfile.html">DB_ENV-&gt;set_errfile</a></td></tr>
+<tr><td>db_errpfx</td><td><a href="../../api_c/env_set_errpfx.html">DB_ENV-&gt;set_errpfx</a></td></tr>
+<tr><td>db_lorder</td><td>This field was removed from the <a href="../../api_c/env_class.html">DB_ENV</a> structure in the Berkeley DB
3.0 release as no application should have ever used it. Any code using
it should be evaluated for potential bugs.</td></tr>
-<tr><td>db_paniccall</td><td><a href="../../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a></td></tr>
-<tr><td>db_verbose</td><td><a href="../../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a>
+<tr><td>db_paniccall</td><td><a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a></td></tr>
+<tr><td>db_verbose</td><td><a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a>
<p>Note: the db_verbose field was a simple boolean toggle, the
-<a href="../../api_c/env_set_verbose.html">DBENV-&gt;set_verbose</a> method takes arguments that specify exactly
-which verbose messages are desired.</td></tr>
-<tr><td>lg_max</td><td><a href="../../api_c/env_set_lg_max.html">DBENV-&gt;set_lg_max</a></td></tr>
-<tr><td>lk_conflicts</td><td><a href="../../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a></td></tr>
-<tr><td>lk_detect</td><td><a href="../../api_c/env_set_lk_detect.html">DBENV-&gt;set_lk_detect</a></td></tr>
-<tr><td>lk_max</td><td><a href="../../api_c/env_set_lk_max.html">DBENV-&gt;set_lk_max</a></td></tr>
-<tr><td>lk_modes</td><td><a href="../../api_c/env_set_lk_conflicts.html">DBENV-&gt;set_lk_conflicts</a></td></tr>
-<tr><td>mp_mmapsize</td><td><a href="../../api_c/env_set_mp_mmapsize.html">DBENV-&gt;set_mp_mmapsize</a></td></tr>
-<tr><td>mp_size</td><td><a href="../../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a>
-<p>Note: the <a href="../../api_c/env_set_cachesize.html">DBENV-&gt;set_cachesize</a> function takes additional arguments.
+<a href="../../api_c/env_set_verbose.html">DB_ENV-&gt;set_verbose</a> method takes arguments that specify exactly
+which verbose messages are desired.</p></td></tr>
+<tr><td>lg_max</td><td><a href="../../api_c/env_set_lg_max.html">DB_ENV-&gt;set_lg_max</a></td></tr>
+<tr><td>lk_conflicts</td><td><a href="../../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td></tr>
+<tr><td>lk_detect</td><td><a href="../../api_c/env_set_lk_detect.html">DB_ENV-&gt;set_lk_detect</a></td></tr>
+<tr><td>lk_max</td><td>dbenv-&gt;set_lk_max</td></tr>
+<tr><td>lk_modes</td><td><a href="../../api_c/env_set_lk_conflicts.html">DB_ENV-&gt;set_lk_conflicts</a></td></tr>
+<tr><td>mp_mmapsize</td><td><a href="../../api_c/env_set_mp_mmapsize.html">DB_ENV-&gt;set_mp_mmapsize</a></td></tr>
+<tr><td>mp_size</td><td><a href="../../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a>
+<p>Note: the <a href="../../api_c/env_set_cachesize.html">DB_ENV-&gt;set_cachesize</a> function takes additional arguments.
Setting both the second argument (the number of GB in the pool) and the
last argument (the number of memory pools to create) to 0 will result in
-behavior that is backward compatible with previous Berkeley DB releases.</td></tr>
+behavior that is backward-compatible with previous Berkeley DB releases.</p></td></tr>
<tr><td>tx_info</td><td>This field was used by applications as an argument to the transaction
subsystem functions. As those functions take references to a
-DB_ENV structure as arguments in the Berkeley DB 3.0 release, it should
+<a href="../../api_c/env_class.html">DB_ENV</a> structure as arguments in the Berkeley DB 3.0 release, it should
no longer be used by any application.</td></tr>
-<tr><td>tx_max</td><td><a href="../../api_c/env_set_tx_max.html">DBENV-&gt;set_tx_max</a></td></tr>
-<tr><td>tx_recover</td><td><a href="../../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a></td></tr>
+<tr><td>tx_max</td><td><a href="../../api_c/env_set_tx_max.html">DB_ENV-&gt;set_tx_max</a></td></tr>
+<tr><td>tx_recover</td><td>dbenv-&gt;set_tx_recover</td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/func.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/open.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/func.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/open.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/dbenv_cxx.html b/db/docs/ref/upgrade.3.0/dbenv_cxx.html
index 8839d6408..dffe11908 100644
--- a/db/docs/ref/upgrade.3.0/dbenv_cxx.html
+++ b/db/docs/ref/upgrade.3.0/dbenv_cxx.html
@@ -1,27 +1,28 @@
<!--$Id: dbenv_cxx.so,v 11.10 2000/12/01 17:59:32 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: the DbEnv class for C++ and Java</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/value_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/db_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/value_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/db_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: the DbEnv class for C++ and Java</h1>
+<h3 align=center>Release 3.0: the DbEnv class for C++ and Java</h3>
<p>The DbEnv::appinit() method and two constructors for the DbEnv class are
gone. There is now a single way to create and initialize the environment.
The way to create an environment is to use the new DbEnv constructor with
one argument. After this call, the DbEnv can be configured with various
set_XXX methods. Finally, a call to DbEnv::open is made to initialize
-the environment.
-<p>Here's a C++ example creating a Berkeley DB environment using the 2.X interface
-<p><blockquote><pre>int dberr;
+the environment.</p>
+<p>Here's a C++ example creating a Berkeley DB environment using the 2.X interface</p>
+<blockquote><pre>int dberr;
DbEnv *dbenv = new DbEnv();
<p>
dbenv-&gt;set_error_stream(&cerr);
@@ -32,8 +33,8 @@ if ((dberr = dbenv-&gt;appinit("/database/home",
cerr &lt;&lt; "failure: " &lt;&lt; strerror(dberr);
exit (1);
}</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>int dberr;
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>int dberr;
DbEnv *dbenv = new DbEnv(0);
<p>
dbenv-&gt;set_error_stream(&cerr);
@@ -44,8 +45,8 @@ if ((dberr = dbenv-&gt;open("/database/home",
cerr &lt;&lt; "failure: " &lt;&lt; dbenv-&gt;strerror(dberr);
exit (1);
}</pre></blockquote>
-<p>Here's a Java example creating a Berkeley DB environment using the 2.X interface:
-<p><blockquote><pre>int dberr;
+<p>Here's a Java example creating a Berkeley DB environment using the 2.X interface:</p>
+<blockquote><pre>int dberr;
DbEnv dbenv = new DbEnv();
<p>
dbenv.set_error_stream(System.err);
@@ -53,8 +54,8 @@ dbenv.set_errpfx("myprog");
<p>
dbenv.appinit("/database/home",
null, Db.DB_CREATE | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>int dberr;
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>int dberr;
DbEnv dbenv = new DbEnv(0);
<p>
dbenv.set_error_stream(System.err);
@@ -64,9 +65,9 @@ dbenv.open("/database/home",
null, Db.DB_CREATE | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL, 0);</pre></blockquote>
<p>In the Berkeley DB 2.X release, DbEnv had accessors to obtain "managers" of type
DbTxnMgr, DbMpool, DbLog, DbTxnMgr. If you used any of these managers,
-all their methods are now found directly in the DbEnv class.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/value_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/db_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+all their methods are now found directly in the DbEnv class.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/value_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/db_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/dbinfo.html b/db/docs/ref/upgrade.3.0/dbinfo.html
index da1f8460d..c381b83d4 100644
--- a/db/docs/ref/upgrade.3.0/dbinfo.html
+++ b/db/docs/ref/upgrade.3.0/dbinfo.html
@@ -1,44 +1,45 @@
-<!--$Id: dbinfo.so,v 11.8 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: dbinfo.so,v 11.10 2001/04/03 19:39:02 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: the DBINFO structure</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/db.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/join.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/db.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/join.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: the DBINFO structure</h1>
+<h3 align=center>Release 3.0: the DBINFO structure</h3>
<p>The DB_INFO structure has been removed from the Berkeley DB 3.0 release.
Accesses to any fields within that structure by the application should be
-replaced with method calls on the DB handle. The following
+replaced with method calls on the <a href="../../api_c/db_class.html">DB</a> handle. The following
example illustrates this using the historic db_cachesize structure field.
In the Berkeley DB 2.X releases, applications could set the size of an
-underlying database cache using code similar to the following:
-<p><blockquote><pre>DB_INFO dbinfo;
+underlying database cache using code similar to the following:</p>
+<blockquote><pre>DB_INFO dbinfo;
<p>
memset(dbinfo, 0, sizeof(dbinfo));
dbinfo.db_cachesize = 1024 * 1024;</pre></blockquote>
<p>in the Berkeley DB 3.X releases, this should be done using the
-<a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> method, as follows:
-<p><blockquote><pre>DB *db;
+<a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> method, as follows:</p>
+<blockquote><pre>DB *db;
int ret;
<p>
ret = db-&gt;set_cachesize(db, 0, 1024 * 1024, 0);</pre></blockquote>
<p>The DB_INFO structure is no longer used in any way by the Berkeley DB 3.0
-release, and should be removed from the application.
+release, and should be removed from the application.</p>
<p>The following table lists the DB_INFO fields previously used by
applications and the methods that should now be used to set
them. Because these calls provide configuration for the
database open, they must precede the call to <a href="../../api_c/db_open.html">DB-&gt;open</a>.
Calling them after the call to <a href="../../api_c/db_open.html">DB-&gt;open</a> will return an
-error.
-<p><table border=1 align=center>
+error.</p>
+<table border=1 align=center>
<tr><th>DB_INFO field</th><th>Berkeley DB 3.X method</th></tr>
<tr><td>bt_compare</td><td><a href="../../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a></td></tr>
<tr><td>bt_minkey</td><td><a href="../../api_c/db_set_bt_minkey.html">DB-&gt;set_bt_minkey</a></td></tr>
@@ -47,16 +48,16 @@ error.
<p>Note: the <a href="../../api_c/db_set_cachesize.html">DB-&gt;set_cachesize</a> function takes additional arguments.
Setting both the second argument (the number of GB in the pool) and the
last argument (the number of memory pools to create) to 0 will result in
-behavior that is backward compatible with previous Berkeley DB releases.</td></tr>
+behavior that is backward-compatible with previous Berkeley DB releases.</p></td></tr>
<tr><td>db_lorder</td><td><a href="../../api_c/db_set_lorder.html">DB-&gt;set_lorder</a></td></tr>
-<tr><td>db_malloc</td><td><a href="../../api_c/db_set_malloc.html">DB-&gt;set_malloc</a></td></tr>
+<tr><td>db_malloc</td><td>DB-&gt;set_malloc</td></tr>
<tr><td>db_pagesize</td><td><a href="../../api_c/db_set_pagesize.html">DB-&gt;set_pagesize</a></td></tr>
<tr><td>dup_compare</td><td><a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a></td></tr>
<tr><td>flags</td><td><a href="../../api_c/db_set_flags.html">DB-&gt;set_flags</a>
<p>Note: the DB_DELIMITER, DB_FIXEDLEN and DB_PAD flags no longer need to be
-set as there are specific methods off the DB handle that set the
+set as there are specific methods off the <a href="../../api_c/db_class.html">DB</a> handle that set the
file delimiter, the length of fixed-length records and the fixed-length
-record pad character. They should simply be discarded from the application.</td></tr>
+record pad character. They should simply be discarded from the application.</p></td></tr>
<tr><td>h_ffactor</td><td><a href="../../api_c/db_set_h_ffactor.html">DB-&gt;set_h_ffactor</a></td></tr>
<tr><td>h_hash</td><td><a href="../../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a></td></tr>
<tr><td>h_nelem</td><td><a href="../../api_c/db_set_h_nelem.html">DB-&gt;set_h_nelem</a></td></tr>
@@ -65,8 +66,8 @@ record pad character. They should simply be discarded from the application.</td
<tr><td>re_pad</td><td><a href="../../api_c/db_set_re_pad.html">DB-&gt;set_re_pad</a></td></tr>
<tr><td>re_source</td><td><a href="../../api_c/db_set_re_source.html">DB-&gt;set_re_source</a></td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/db.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/join.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/db.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/join.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/disk.html b/db/docs/ref/upgrade.3.0/disk.html
index f6ea2799b..127326dd2 100644
--- a/db/docs/ref/upgrade.3.0/disk.html
+++ b/db/docs/ref/upgrade.3.0/disk.html
@@ -1,30 +1,31 @@
<!--$Id: disk.so,v 11.15 2000/12/21 18:37:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: upgrade requirements</h1>
+<h3 align=center>Release 3.0: upgrade requirements</h3>
<p>Log file formats and the Btree, Recno and Hash Access Method database
formats changed in the Berkeley DB 3.0 release. (The on-disk Btree/Recno
format changed from version 6 to version 7. The on-disk Hash format
changed from version 5 to version 6.) Until the underlying databases
-are upgraded, the <a href="../../api_c/db_open.html">DB-&gt;open</a> function will return a <a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a>
-error.
+are upgraded, the <a href="../../api_c/db_open.html">DB-&gt;open</a> method will return a <a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a>
+error.</p>
<p>For further information on upgrading Berkeley DB installations, see
<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB
-installations</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/eacces.html b/db/docs/ref/upgrade.3.0/eacces.html
index b7fb3e859..f6417e9d9 100644
--- a/db/docs/ref/upgrade.3.0/eacces.html
+++ b/db/docs/ref/upgrade.3.0/eacces.html
@@ -1,28 +1,29 @@
-<!--$Id: eacces.so,v 11.7 2000/12/01 17:58:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: eacces.so,v 11.8 2001/07/26 18:35:50 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: EACCES</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/eagain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/jump_set.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/eagain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/jump_set.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: EACCES</h1>
+<h3 align=center>Release 3.0: EACCES</h3>
<p>There was an error in previous releases of the Berkeley DB documentation that
-said that the <a href="../../api_c/lock_put.html">lock_put</a> and <a href="../../api_c/lock_vec.html">lock_vec</a> interfaces could
-return EACCES as an error to indicate that a lock could not be released
-because it was held by another locker. The application should be
-searched for any occurrences of EACCES. For each of these, any that are
-checking for an error return from <a href="../../api_c/lock_put.html">lock_put</a> or <a href="../../api_c/lock_vec.html">lock_vec</a>
-should have the test and any error handling removed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/eagain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/jump_set.html"><img src="../../images/next.gif" alt="Next"></a>
+said that the lock_put and lock_vec interfaces could return EACCES as
+an error to indicate that a lock could not be released because it was
+held by another locker. The application should be searched for any
+occurrences of EACCES. For each of these, any that are checking for an
+error return from lock_put or lock_vec should have the test and any
+error handling removed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/eagain.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/jump_set.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/eagain.html b/db/docs/ref/upgrade.3.0/eagain.html
index e998c1b43..e2fa93e37 100644
--- a/db/docs/ref/upgrade.3.0/eagain.html
+++ b/db/docs/ref/upgrade.3.0/eagain.html
@@ -1,34 +1,35 @@
-<!--$Id: eagain.so,v 11.5 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: eagain.so,v 11.6 2001/07/10 13:16:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: EAGAIN</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/eacces.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/lock_notheld.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/eacces.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: EAGAIN</h1>
+<h3 align=center>Release 3.0: EAGAIN</h3>
<p>Historically, the Berkeley DB interfaces have returned the POSIX error value
EAGAIN to indicate a deadlock. This has been removed from the Berkeley DB 3.0
release in order to make it possible for applications to distinguish
between EAGAIN errors returned by the system and returns from Berkeley DB
-indicating deadlock.
+indicating deadlock.</p>
<p>The application should be searched for any occurrences of EAGAIN. For
each of these, any that are checking for a deadlock return from Berkeley DB
-should be changed to check for the DB_LOCK_DEADLOCK return value.
+should be changed to check for the DB_LOCK_DEADLOCK return value.</p>
<p>If, for any reason, this is a difficult change for the application to
make, the <b>include/db.src</b> distribution file should be modified to
translate all returns of DB_LOCK_DEADLOCK to EAGAIN. Search for the
string EAGAIN in that file, there is a comment that describes how to make
-the change.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/eacces.html"><img src="../../images/next.gif" alt="Next"></a>
+the change.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/lock_notheld.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/eacces.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/envopen.html b/db/docs/ref/upgrade.3.0/envopen.html
index 3c20a0e9e..b0befd650 100644
--- a/db/docs/ref/upgrade.3.0/envopen.html
+++ b/db/docs/ref/upgrade.3.0/envopen.html
@@ -1,56 +1,56 @@
-<!--$Id: envopen.so,v 11.12 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: envopen.so,v 11.14 2003/10/18 19:16:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: environment open/close/unlink</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/func.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/func.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: environment open/close/unlink</h1>
+<h3 align=center>Release 3.0: environment open/close/unlink</h3>
<p>The hardest part of upgrading your application from a 2.X code base to
the 3.0 release is translating the Berkeley DB environment open, close and
-remove calls.
+remove calls.</p>
<p>There were two logical changes in this part of the Berkeley DB interface.
First, in Berkeley DB 3.0, there are no longer separate structures that
-represent each subsystem (e.g., DB_LOCKTAB or DB_TXNMGR) and an overall
-DB_ENV environment structure. Instead there is only the
-DB_ENV structure. This means that DB_ENV references should
-be passed around by your application instead of passing around DB_LOCKTAB
-or DB_TXNMGR references. This is likely to be a simple change for most
-applications as few applications use the lock_XXX, log_XXX,
-memp_XXX or txn_XXX interfaces to create Berkeley DB environments.
+represent each subsystem (for example, DB_LOCKTAB or DB_TXNMGR) and an
+overall <a href="../../api_c/env_class.html">DB_ENV</a> environment structure. Instead there is only the
+<a href="../../api_c/env_class.html">DB_ENV</a> structure. This means that <a href="../../api_c/env_class.html">DB_ENV</a> references
+should be passed around by your application instead of passing around
+DB_LOCKTAB or DB_TXNMGR references. This is likely to be a simple
+change for most applications as few applications use the lock_XXX,
+log_XXX, memp_XXX or txn_XXX interfaces to create Berkeley DB environments.</p>
<p>The second change is that there are no longer separate open, close, and
-unlink interfaces to the
-Berkeley DB subsystems, e.g., in previous releases, it was possible to open a
-lock subsystem either using db_appinit or using the lock_open call. In
-the 3.0 release the XXX_open interfaces to the subsystems have been
-removed, and subsystems must now be opened using the 3.0 replacement for the
-db_appinit call.
+unlink interfaces to the Berkeley DB subsystems. For example, in previous
+releases, it was possible to open a lock subsystem either using
+db_appinit or using the lock_open call. In the 3.0 release the XXX_open
+interfaces to the subsystems have been removed, and subsystems must now
+be opened using the 3.0 replacement for the db_appinit call.</p>
<p>To upgrade your application, first find each place your application opens,
-closes and/or removes a Berkeley DB environment. This will be code of the form:
-<p><blockquote><pre>db_appinit, db_appexit
+closes and/or removes a Berkeley DB environment. This will be code of the form:</p>
+<blockquote><pre>db_appinit, db_appexit
lock_open, lock_close, lock_unlink
log_open, log_close, log_unlink
memp_open, memp_close, memp_unlink
txn_open, txn_close, txn_unlink</pre></blockquote>
-<p>Each of these groups of calls should be replaced with calls to:
-<p><blockquote><pre><a href="../../api_c/env_create.html">db_env_create</a>, <a href="../../api_c/env_open.html">DBENV-&gt;open</a>, <a href="../../api_c/env_close.html">DBENV-&gt;close</a>,
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a></pre></blockquote>
-<p>The <a href="../../api_c/env_create.html">db_env_create</a> call and the call to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a>
+<p>Each of these groups of calls should be replaced with calls to:</p>
+<blockquote><pre><a href="../../api_c/env_class.html">db_env_create</a>, <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a>,
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a></pre></blockquote>
+<p>The <a href="../../api_c/env_class.html">db_env_create</a> call and the call to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>
method replace the db_appinit, lock_open, log_open, memp_open and txn_open
-calls. The <a href="../../api_c/env_close.html">DBENV-&gt;close</a> method replaces the db_appexit,
+calls. The <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> method replaces the db_appexit,
lock_close, log_close, memp_close and txn_close calls. The
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> call replaces the lock_unlink, log_unlink,
-memp_unlink and txn_unlink calls.
-<p>Here's an example creating a Berkeley DB environment using the 2.X interface:
-<p><blockquote><pre>/*
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> call replaces the lock_unlink, log_unlink,
+memp_unlink and txn_unlink calls.</p>
+<p>Here's an example creating a Berkeley DB environment using the 2.X interface:</p>
+<blockquote><pre>/*
* db_init --
* Initialize the environment.
*/
@@ -71,8 +71,8 @@ db_init(home)
free(dbenv);
return (NULL);
}</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>/*
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>/*
* db_init --
* Initialize the environment.
*/
@@ -97,18 +97,18 @@ db_init(home, dbenvp)
(void)dbenv-&gt;close(dbenv, 0);
return (ret);
}</pre></blockquote>
-<p>As you can see, the arguments to db_appinit and to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> are
+<p>As you can see, the arguments to db_appinit and to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> are
largely the same. There is some minor re-organization: the mapping is
that arguments #1, 2, 3, and 4 to db_appinit become arguments #2, 3, 1
-and 4 to <a href="../../api_c/env_open.html">DBENV-&gt;open</a>. There is one additional argument to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a>, argument #5. For backward compatibility with the 2.X
-Berkeley DB releases, simply set that argument to 0.
+and 4 to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>. There is one additional argument to
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, argument #5. For backward compatibility with the 2.X
+Berkeley DB releases, simply set that argument to 0.</p>
<p>It is only slightly more complex to translate calls to XXX_open to the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> method. Here's an example of creating a lock region
-using the 2.X interface:
-<p><blockquote><pre>lock_open(dir, DB_CREATE, 0664, dbenv, &regionp);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>if ((ret = db_env_create(&dbenv, 0)) != 0)
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method. Here's an example of creating a lock region
+using the 2.X interface:</p>
+<blockquote><pre>lock_open(dir, DB_CREATE, 0664, dbenv, &regionp);</pre></blockquote>
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>if ((ret = db_env_create(&dbenv, 0)) != 0)
return (ret);
<p>
if ((ret = dbenv-&gt;open(dbenv,
@@ -117,40 +117,40 @@ if ((ret = dbenv-&gt;open(dbenv,
return (0);
}</pre></blockquote>
<p>Note that in this example, you no longer need the DB_LOCKTAB structure
-reference that was required in Berkeley DB 2.X releases.
+reference that was required in Berkeley DB 2.X releases.</p>
<p>The final issue with upgrading the db_appinit call is the DB_MPOOL_PRIVATE
-option previously provided for the db_appinit interface. If your
-application is using this flag, it should almost certainly use the new
-<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> interface. Regardless,
-you should carefully consider this change before converting to use the
-<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag.
-<p>Translating db_appexit or XXX_close calls to <a href="../../api_c/env_close.html">DBENV-&gt;close</a> is equally
+option previously provided for the db_appinit call. If your application
+is using this flag, it should almost certainly use the new
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method. Regardless, you
+should carefully consider this change before converting to use the
+<a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flag.</p>
+<p>Translating db_appexit or XXX_close calls to <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a> is equally
simple. Instead of taking a reference to a per-subsystem structure such
-as DB_LOCKTAB or DB_TXNMGR, all calls take a reference to a DB_ENV
+as DB_LOCKTAB or DB_TXNMGR, all calls take a reference to a <a href="../../api_c/env_class.html">DB_ENV</a>
structure. The calling sequence is otherwise unchanged. Note that as
the application no longer allocates the memory for the DB_ENV structure,
application code to discard it after the call to db_appexit() is no longer
-needed.
-<p>Translating XXX_unlink calls to <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> is slightly more complex.
-As with <a href="../../api_c/env_close.html">DBENV-&gt;close</a>, the call takes a reference to a DB_ENV
+needed.</p>
+<p>Translating XXX_unlink calls to <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> is slightly more complex.
+As with <a href="../../api_c/env_close.html">DB_ENV-&gt;close</a>, the call takes a reference to a <a href="../../api_c/env_class.html">DB_ENV</a>
structure instead of a per-subsystem structure. The calling sequence is
slightly different, however. Here is an example of removing a lock region
-using the 2.X interface:
-<p><blockquote><pre>DB_ENV *dbenv;
+using the 2.X interface:</p>
+<blockquote><pre>DB_ENV *dbenv;
<p>
ret = lock_unlink(dir, 1, dbenv);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code fragment would be written as:
-<p><blockquote><pre>DB_ENV *dbenv;
+<p>In the Berkeley DB 3.0 release, this code fragment would be written as:</p>
+<blockquote><pre>DB_ENV *dbenv;
<p>
ret = dbenv-&gt;remove(dbenv, dir, NULL, DB_FORCE);</pre></blockquote>
-<p>The additional argument to the <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> function is a
+<p>The additional argument to the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> function is a
configuration argument similar to that previously taken by db_appinit and
-now taken by the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> method. For backward compatibility
+now taken by the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method. For backward compatibility
this new argument should simply be set to NULL. The force argument to
XXX_unlink is now a flag value that is set by bitwise inclusively <b>OR</b>'ing it the
-<a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> flag argument.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/func.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> flag argument.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/func.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/func.html b/db/docs/ref/upgrade.3.0/func.html
index b6f7d816b..40f7fd847 100644
--- a/db/docs/ref/upgrade.3.0/func.html
+++ b/db/docs/ref/upgrade.3.0/func.html
@@ -1,44 +1,45 @@
-<!--$Id: func.so,v 11.8 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: func.so,v 11.9 2001/03/01 15:58:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: function arguments</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/envopen.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbenv.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/envopen.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbenv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: function arguments</h1>
-<p>In Berkeley DB 3.0, there are no longer separate structures that
-represent each subsystem (e.g., DB_LOCKTAB or DB_TXNMGR), and an overall
-DB_ENV environment structure. Instead there is only the
-DB_ENV structure. This means that DB_ENV references should
-be passed around by your application instead of passing around DB_LOCKTAB
-or DB_TXNMGR references.
-<p>Each of the following functions:
-<p><blockquote><pre>lock_detect
+<h3 align=center>Release 3.0: function arguments</h3>
+<p>In Berkeley DB 3.0, there are no longer separate structures that represent
+each subsystem (for example, DB_LOCKTAB or DB_TXNMGR), and an overall
+<a href="../../api_c/env_class.html">DB_ENV</a> environment structure. Instead there is only the
+<a href="../../api_c/env_class.html">DB_ENV</a> structure. This means that <a href="../../api_c/env_class.html">DB_ENV</a> references
+should be passed around by your application instead of passing around
+DB_LOCKTAB or DB_TXNMGR references.</p>
+<p>Each of the following functions:</p>
+<blockquote><pre>lock_detect
lock_get
lock_id
lock_put
lock_stat
lock_vec</pre></blockquote>
<p>should have its first argument, a reference to the DB_LOCKTAB structure,
-replaced with a reference to the enclosing DB_ENV structure. For
-example, the following line of code from a Berkeley DB 2.X application:
-<p><blockquote><pre>DB_LOCKTAB *lt;
+replaced with a reference to the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> structure. For
+example, the following line of code from a Berkeley DB 2.X application:</p>
+<blockquote><pre>DB_LOCKTAB *lt;
DB_LOCK lock;
ret = lock_put(lt, lock);</pre></blockquote>
-<p>should now be written as follows:
-<p><blockquote><pre>DB_ENV *dbenv;
+<p>should now be written as follows:</p>
+<blockquote><pre>DB_ENV *dbenv;
DB_LOCK *lock;
ret = lock_put(dbenv, lock);</pre></blockquote>
-<p>Similarly, all of the functions:
-<p><blockquote><pre>log_archive
+<p>Similarly, all of the functions:</p>
+<blockquote><pre>log_archive
log_compare
log_file
log_flush
@@ -48,22 +49,22 @@ log_register
log_stat
log_unregister</pre></blockquote>
<p>should have their DB_LOG argument replaced with a reference to a
-DB_ENV structure, and the functions:
-<p><blockquote><pre>memp_fopen
+<a href="../../api_c/env_class.html">DB_ENV</a> structure, and the functions:</p>
+<blockquote><pre>memp_fopen
memp_register
memp_stat
memp_sync
memp_trickle</pre></blockquote>
<p>should have their DB_MPOOL argument replaced with a reference to a
-DB_ENV structure.
+<a href="../../api_c/env_class.html">DB_ENV</a> structure.</p>
<p>You should remove all references to DB_LOCKTAB, DB_LOG, DB_MPOOL, and
DB_TXNMGR structures from your application, they are no longer useful
in any way. In fact, a simple way to identify all of the places that
need to be upgraded is to remove all such structures and variables
they declare, and then compile. You will see a warning message from
-your compiler in each case that needs to be upgraded.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/envopen.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbenv.html"><img src="../../images/next.gif" alt="Next"></a>
+your compiler in each case that needs to be upgraded.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/envopen.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbenv.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/intro.html b/db/docs/ref/upgrade.3.0/intro.html
index a74e40f4e..7bc747313 100644
--- a/db/docs/ref/upgrade.3.0/intro.html
+++ b/db/docs/ref/upgrade.3.0/intro.html
@@ -1,26 +1,27 @@
<!--$Id: intro.so,v 11.6 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.2.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/envopen.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.2.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/envopen.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: introduction</h1>
+<h3 align=center>Release 3.0: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 2.X release interfaces to the Berkeley DB 3.0 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.2.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/envopen.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.2.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/envopen.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/java.html b/db/docs/ref/upgrade.3.0/java.html
index 3997095bc..8b34dcce1 100644
--- a/db/docs/ref/upgrade.3.0/java.html
+++ b/db/docs/ref/upgrade.3.0/java.html
@@ -1,34 +1,39 @@
-<!--$Id: java.so,v 11.8 2000/12/01 18:33:56 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 11.9 2003/11/21 01:59:11 gburd Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: additional Java changes</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: additional Java changes</h1>
+<h3 align=center>Release 3.0: additional Java changes</h3>
<p>There are several additional types of exceptions thrown in the Berkeley DB 3.0
-Java API.
+Java API.</p>
<p>DbMemoryException and DbDeadlockException can be caught independently of
DbException if you want to do special handling for these kinds of errors.
Since they are subclassed from DbException, a try block that catches
DbException will catch these also, so code is not required to change.
The catch clause for these new exceptions should appear before the catch
-clause for DbException.
+clause for DbException.</p>
<p>You will need to add a catch clause for java.io.FileNotFoundException,
-since that can be thrown by the <a href="../../api_java/db_open.html">Db.open</a> and <a href="../../api_java/env_open.html">DbEnv.open</a> functions.
+since that can be thrown by the
+<a href="../../java/com/sleepycat/db/Db.html#open">Db.open</a>
+and
+<a href="../../java/com/sleepycat/db/DbEnv.html#open">DbEnv.open</a>
+s.</p>
<p>There are a number of smaller changes to the API that bring the C, C++
and Java APIs much closer in terms of functionality and usage. Please
-refer to the pages for upgrading C applications for further details.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+refer to the pages for upgrading C applications for further details.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/join.html b/db/docs/ref/upgrade.3.0/join.html
index 82c9019fa..8592d542f 100644
--- a/db/docs/ref/upgrade.3.0/join.html
+++ b/db/docs/ref/upgrade.3.0/join.html
@@ -1,28 +1,29 @@
-<!--$Id: join.so,v 11.9 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: join.so,v 11.10 2003/10/18 19:16:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: DB-&gt;join</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/dbinfo.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/dbinfo.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: DB-&gt;join</h1>
-<p>Historically, the last two arguments to the Berkeley DB <a href="../../api_c/db_join.html">DB-&gt;join</a>
-interface were a flags value followed by a reference to a memory location
-to store the returned cursor object. In the Berkeley DB 3.0 release, the
-order of those two arguments has been swapped for consistency with other
-Berkeley DB interfaces.
+<h3 align=center>Release 3.0: DB-&gt;join</h3>
+<p>Historically, the last two arguments to the <a href="../../api_c/db_join.html">DB-&gt;join</a> method were a
+flags value followed by a reference to a memory location to store the
+returned cursor object. In the Berkeley DB 3.0 release, the order of those
+two arguments has been swapped for consistency with other Berkeley DB
+interfaces.</p>
<p>The application should be searched for any occurrences of <a href="../../api_c/db_join.html">DB-&gt;join</a>.
-For each of these, the order of the last two arguments should be swapped.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/dbinfo.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/stat.html"><img src="../../images/next.gif" alt="Next"></a>
+For each of these, the order of the last two arguments should be swapped.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/dbinfo.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/jump_set.html b/db/docs/ref/upgrade.3.0/jump_set.html
index c93e7270e..a5f7392f6 100644
--- a/db/docs/ref/upgrade.3.0/jump_set.html
+++ b/db/docs/ref/upgrade.3.0/jump_set.html
@@ -1,24 +1,25 @@
<!--$Id: jump_set.so,v 11.6 2000/03/18 21:43:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: db_jump_set</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/eacces.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/value_set.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/eacces.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/value_set.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: db_jump_set</h1>
+<h3 align=center>Release 3.0: db_jump_set</h3>
<p>The db_jump_set interface has been removed from the Berkeley DB 3.0 release,
-replaced by method calls on the DB_ENV handle.
+replaced by method calls on the <a href="../../api_c/env_class.html">DB_ENV</a> handle.</p>
<p>The following table lists the db_jump_set arguments previously used by
-applications and the methods that should now be used instead.
-<p><table border=1 align=center>
+applications and the methods that should now be used instead.</p>
+<table border=1 align=center>
<tr><th>db_jump_set argument</th><th>Berkeley DB 3.X method</th></tr>
<tr><td>DB_FUNC_CLOSE</td><td><a href="../../api_c/set_func_close.html">db_env_set_func_close</a></td></tr>
<tr><td>DB_FUNC_DIRFREE</td><td><a href="../../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a></td></tr>
@@ -41,8 +42,8 @@ applications and the methods that should now be used instead.
<tr><td>DB_FUNC_WRITE</td><td><a href="../../api_c/set_func_write.html">db_env_set_func_write</a></td></tr>
<tr><td>DB_FUNC_YIELD</td><td><a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a></td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/eacces.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/value_set.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/eacces.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/value_set.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/lock_detect.html b/db/docs/ref/upgrade.3.0/lock_detect.html
index 4ff00a8a6..b61e26133 100644
--- a/db/docs/ref/upgrade.3.0/lock_detect.html
+++ b/db/docs/ref/upgrade.3.0/lock_detect.html
@@ -1,24 +1,25 @@
-<!--$Id: lock_detect.so,v 11.8 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_detect.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: lock_detect</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/lock_put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/lock_put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: lock_detect</h1>
-<p>An additional argument has been added to the <a href="../../api_c/lock_detect.html">lock_detect</a> interface.
-<p>The application should be searched for any occurrences of <a href="../../api_c/lock_detect.html">lock_detect</a>.
-For each one, a NULL argument should be appended to the current arguments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/lock_put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: lock_detect</h3>
+<p>An additional argument has been added to the lock_detect function.</p>
+<p>The application should be searched for any occurrences of lock_detect.
+For each one, a NULL argument should be appended to the current arguments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/lock_put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/lock_notheld.html b/db/docs/ref/upgrade.3.0/lock_notheld.html
index 3f1173856..eff12096f 100644
--- a/db/docs/ref/upgrade.3.0/lock_notheld.html
+++ b/db/docs/ref/upgrade.3.0/lock_notheld.html
@@ -1,27 +1,28 @@
-<!--$Id: lock_notheld.so,v 11.7 2000/12/01 17:58:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_notheld.so,v 11.8 2001/07/26 18:35:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: DB_LOCK_NOTHELD</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/rmw.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/eagain.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/rmw.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/eagain.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: DB_LOCK_NOTHELD</h1>
-<p>Historically, the Berkeley DB <a href="../../api_c/lock_put.html">lock_put</a> and <a href="../../api_c/lock_vec.html">lock_vec</a> interfaces
-could return the DB_LOCK_NOTHELD error to indicate that a lock could
-not be released as it was held by another locker. This error can no
-longer be returned under any circumstances. The application should be
-searched for any occurrences of DB_LOCK_NOTHELD. For each of these,
-the test and any error processing should be removed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/rmw.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/eagain.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: DB_LOCK_NOTHELD</h3>
+<p>Historically, the Berkeley DB lock_put and lock_vec interfaces could return
+the DB_LOCK_NOTHELD error to indicate that a lock could not be released
+as it was held by another locker. This error can no longer be returned
+under any circumstances. The application should be searched for any
+occurrences of DB_LOCK_NOTHELD. For each of these, the test and any
+error processing should be removed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/rmw.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/eagain.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/lock_put.html b/db/docs/ref/upgrade.3.0/lock_put.html
index d6057f8e2..761c99ecc 100644
--- a/db/docs/ref/upgrade.3.0/lock_put.html
+++ b/db/docs/ref/upgrade.3.0/lock_put.html
@@ -1,25 +1,26 @@
-<!--$Id: lock_put.so,v 11.8 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_put.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: lock_put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_detect.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_detect.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: lock_put</h1>
-<p>An argument change has been made in the <a href="../../api_c/lock_put.html">lock_put</a> interface.
-<p>The application should be searched for any occurrences of <a href="../../api_c/lock_put.html">lock_put</a>.
+<h3 align=center>Release 3.0: lock_put</h3>
+<p>An argument change has been made in the lock_put function.</p>
+<p>The application should be searched for any occurrences of lock_put.
For each one, instead of passing a DB_LOCK variable as the last argument
-to the function, the address of the DB_LOCK variable should be passed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_detect.html"><img src="../../images/next.gif" alt="Next"></a>
+to the function, the address of the DB_LOCK variable should be passed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/close.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_detect.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/lock_stat.html b/db/docs/ref/upgrade.3.0/lock_stat.html
index 80504db3b..9fc3b78a4 100644
--- a/db/docs/ref/upgrade.3.0/lock_stat.html
+++ b/db/docs/ref/upgrade.3.0/lock_stat.html
@@ -1,24 +1,25 @@
-<!--$Id: lock_stat.so,v 11.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: lock_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: lock_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/lock_detect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/lock_detect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: lock_stat</h1>
+<h3 align=center>Release 3.0: lock_stat</h3>
<p>The <b>st_magic</b>, <b>st_version</b>, <b>st_numobjs</b> and
-<b>st_refcnt</b> fields returned from the <a href="../../api_c/lock_stat.html">lock_stat</a> interface
-have been removed, and this information is no longer available.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/lock_detect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>st_refcnt</b> fields returned from the lock_stat function
+have been removed, and this information is no longer available.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/lock_detect.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/log_register.html b/db/docs/ref/upgrade.3.0/log_register.html
index 3a856275f..e66068ca6 100644
--- a/db/docs/ref/upgrade.3.0/log_register.html
+++ b/db/docs/ref/upgrade.3.0/log_register.html
@@ -1,25 +1,26 @@
-<!--$Id: log_register.so,v 11.8 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_register.so,v 11.10 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: log_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/lock_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/lock_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: log_register</h1>
-<p>An argument has been removed from the <a href="../../api_c/log_register.html">log_register</a> interface.
-The application should be searched for any occurrences of
-<a href="../../api_c/log_register.html">log_register</a>. In each of these, the DBTYPE argument (it is the
-fourth argument) should be removed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/lock_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: log_register</h3>
+<p>An argument has been removed from the log_register function. The
+application should be searched for any occurrences of log_register. In
+each of these, the DBTYPE argument (it is the fourth argument) should
+be removed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/lock_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/log_stat.html b/db/docs/ref/upgrade.3.0/log_stat.html
index 8c023bfe2..ea0856601 100644
--- a/db/docs/ref/upgrade.3.0/log_stat.html
+++ b/db/docs/ref/upgrade.3.0/log_stat.html
@@ -1,23 +1,24 @@
-<!--$Id: log_stat.so,v 11.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: log_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/memp_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/memp_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: log_stat</h1>
-<p>The <b>st_refcnt</b> field returned from the <a href="../../api_c/log_stat.html">log_stat</a> interface
-has been removed, and this information is no longer available.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/memp_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: log_stat</h3>
+<p>The <b>st_refcnt</b> field returned from the log_stat function
+has been removed, and this information is no longer available.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/memp_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/memp_stat.html b/db/docs/ref/upgrade.3.0/memp_stat.html
index ff61fa745..d4c9ba9db 100644
--- a/db/docs/ref/upgrade.3.0/memp_stat.html
+++ b/db/docs/ref/upgrade.3.0/memp_stat.html
@@ -1,26 +1,27 @@
-<!--$Id: memp_stat.so,v 11.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_stat.so,v 11.5 2003/10/18 19:16:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: memp_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_begin.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_begin.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: memp_stat</h1>
-<p>The <b>st_refcnt</b> field returned from the <a href="../../api_c/memp_stat.html">memp_stat</a> interface
-has been removed, and this information is no longer available.
-<p>The <b>st_cachesize</b> field returned from the <a href="../../api_c/memp_stat.html">memp_stat</a>
-interface has been replaced with two new fields, <b>st_gbytes</b> and
-<b>st_bytes</b>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_begin.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: memp_stat</h3>
+<p>The <b>st_refcnt</b> field returned from the memp_stat function
+has been removed, and this information is no longer available.</p>
+<p>The <b>st_cachesize</b> field returned from the memp_stat function
+has been replaced with two new fields, <b>st_gbytes</b> and
+<b>st_bytes</b>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_begin.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/open.html b/db/docs/ref/upgrade.3.0/open.html
index 3730ab474..e57888e36 100644
--- a/db/docs/ref/upgrade.3.0/open.html
+++ b/db/docs/ref/upgrade.3.0/open.html
@@ -1,34 +1,35 @@
-<!--$Id: open.so,v 11.10 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: open.so,v 11.11 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: database open/close</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/dbenv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/xa.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/dbenv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/xa.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: database open/close</h1>
+<h3 align=center>Release 3.0: database open/close</h3>
<p>Database opens were changed in the Berkeley DB 3.0 release in a similar way to
-environment opens.
+environment opens.</p>
<p>To upgrade your application, first find each place your application opens
a database, that is, calls the db_open function. Each of these calls
-should be replaced with calls to <a href="../../api_c/db_create.html">db_create</a> and <a href="../../api_c/db_open.html">DB-&gt;open</a>.
-<p>Here's an example creating a Berkeley DB database using the 2.X interface:
-<p><blockquote><pre>DB *dbp;
+should be replaced with calls to <a href="../../api_c/db_class.html">db_create</a> and <a href="../../api_c/db_open.html">DB-&gt;open</a>.</p>
+<p>Here's an example creating a Berkeley DB database using the 2.X interface:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
if ((ret = db_open(DATABASE,
DB_BTREE, DB_CREATE, 0664, dbenv, NULL, &dbp)) != 0)
return (ret);</pre></blockquote>
-<p>In the Berkeley DB 3.0 release, this code would be written as:
-<p><blockquote><pre>DB *dbp;
+<p>In the Berkeley DB 3.0 release, this code would be written as:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -42,24 +43,24 @@ if ((ret = dbp-&gt;open(dbp,
}</pre></blockquote>
<p>As you can see, the arguments to db_open and to <a href="../../api_c/db_open.html">DB-&gt;open</a> are
largely the same. There is some re-organization, and note that the
-enclosing DB_ENV structure is specified when the DB object
-is created using the <a href="../../api_c/db_create.html">db_create</a> interface. There is one
+enclosing <a href="../../api_c/env_class.html">DB_ENV</a> structure is specified when the <a href="../../api_c/db_class.html">DB</a> object
+is created using the <a href="../../api_c/db_class.html">db_create</a> function. There is one
additional argument to <a href="../../api_c/db_open.html">DB-&gt;open</a>, argument #3. For backward
compatibility with the 2.X Berkeley DB releases, simply set that argument to
-NULL.
-<p>There are two additional issues with the db_open call.
+NULL.</p>
+<p>There are two additional issues with the db_open call.</p>
<p>First, it was possible in the 2.X releases for an application to provide
an environment that did not contain a shared memory buffer pool as the
database environment, and Berkeley DB would create a private one automatically.
This functionality is no longer available, applications must specify the
<a href="../../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a> flag if databases are going to be opened in the
-environment.
+environment.</p>
<p>The final issue with upgrading the db_open call is that the DB_INFO
structure is no longer used, having been replaced by individual methods
-on the DB handle. That change is discussed in detail later in
-this chapter.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/dbenv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/xa.html"><img src="../../images/next.gif" alt="Next"></a>
+on the <a href="../../api_c/db_class.html">DB</a> handle. That change is discussed in detail later in
+this chapter.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/dbenv.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/xa.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/rmw.html b/db/docs/ref/upgrade.3.0/rmw.html
index a1a30da5e..ab7e32aa3 100644
--- a/db/docs/ref/upgrade.3.0/rmw.html
+++ b/db/docs/ref/upgrade.3.0/rmw.html
@@ -1,31 +1,32 @@
-<!--$Id: rmw.so,v 11.9 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: rmw.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: DB_RMW</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/txn_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_notheld.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/txn_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_notheld.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: DB_RMW</h1>
+<h3 align=center>Release 3.0: DB_RMW</h3>
<p>The following change applies only to applications using the
Berkeley DB Concurrent Data Store product. If your application is not using that product,
-you can ignore this change.
-<p>Historically, the Berkeley DB <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> interface took the DB_RMW flag
-to indicate that the created cursor would be used for write operations on
-the database. This flag has been renamed to the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a>
-flag.
+you can ignore this change.</p>
+<p>Historically, the <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> method took the DB_RMW flag to indicate
+that the created cursor would be used for write operations on the
+database. This flag has been renamed to the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a>
+flag.</p>
<p>The application should be searched for any occurrences of DB_RMW. For
each of these, any that are arguments to the <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a> function
-should be changed to pass in the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag instead.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/txn_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/lock_notheld.html"><img src="../../images/next.gif" alt="Next"></a>
+should be changed to pass in the <a href="../../api_c/db_cursor.html#DB_WRITECURSOR">DB_WRITECURSOR</a> flag instead.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/txn_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/lock_notheld.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/stat.html b/db/docs/ref/upgrade.3.0/stat.html
index 735e235d9..98c915b55 100644
--- a/db/docs/ref/upgrade.3.0/stat.html
+++ b/db/docs/ref/upgrade.3.0/stat.html
@@ -1,24 +1,25 @@
-<!--$Id: stat.so,v 11.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: stat.so,v 11.4 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: DB-&gt;stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: DB-&gt;stat</h1>
-<p>The <b>bt_flags</b> field returned from the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> interface
-for Btree and Recno databases has been removed, and this information is
-no longer available.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/close.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: DB-&gt;stat</h3>
+<p>The <b>bt_flags</b> field returned from the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method for Btree
+and Recno databases has been removed, and this information is no longer
+available.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/join.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/close.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/toc.html b/db/docs/ref/upgrade.3.0/toc.html
index 189d7c0a6..96d55df38 100644
--- a/db/docs/ref/upgrade.3.0/toc.html
+++ b/db/docs/ref/upgrade.3.0/toc.html
@@ -1,16 +1,22 @@
-<!--$Id: toc.so,v 11.2 2000/12/05 20:36:26 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 11.3 2001/06/09 14:34:46 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0</title>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0</h1>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0</h3>
<ol>
-<li><a href="intro.html">Release 3.0: introduction</a>
+<p><li><a href="intro.html">Release 3.0: introduction</a>
<li><a href="envopen.html">Release 3.0: environment open/close/unlink</a>
<li><a href="func.html">Release 3.0: function arguments</a>
<li><a href="dbenv.html">Release 3.0: the DB_ENV structure</a>
@@ -42,6 +48,8 @@
<li><a href="java.html">Release 3.0: additional Java changes</a>
<li><a href="disk.html">Release 3.0: upgrade requirements</a>
</ol>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/txn_begin.html b/db/docs/ref/upgrade.3.0/txn_begin.html
index 3fb9a6527..56935358a 100644
--- a/db/docs/ref/upgrade.3.0/txn_begin.html
+++ b/db/docs/ref/upgrade.3.0/txn_begin.html
@@ -1,25 +1,26 @@
-<!--$Id: txn_begin.so,v 11.7 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_begin.so,v 11.9 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: txn_begin</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/memp_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/memp_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_commit.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: txn_begin</h1>
-<p>An additional argument has been added to the <a href="../../api_c/txn_begin.html">txn_begin</a> interface.
-<p>The application should be searched for any occurrences of
-<a href="../../api_c/txn_begin.html">txn_begin</a>. For each one, an argument of 0 should be appended to
-the current arguments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/memp_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: txn_begin</h3>
+<p>An additional argument has been added to the txn_begin function.</p>
+<p>The application should be searched for any occurrences of txn_begin.
+For each one, an argument of 0 should be appended to the current
+arguments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/memp_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_commit.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/txn_commit.html b/db/docs/ref/upgrade.3.0/txn_commit.html
index 8090b1e3b..409524981 100644
--- a/db/docs/ref/upgrade.3.0/txn_commit.html
+++ b/db/docs/ref/upgrade.3.0/txn_commit.html
@@ -1,25 +1,26 @@
-<!--$Id: txn_commit.so,v 11.8 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_commit.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: txn_commit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/txn_begin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/txn_begin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: txn_commit</h1>
-<p>An additional argument has been added to the <a href="../../api_c/txn_commit.html">txn_commit</a> interface.
-<p>The application should be searched for any occurrences of
-<a href="../../api_c/txn_commit.html">txn_commit</a>. For each one, an argument of 0 should be appended to
-the current arguments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/txn_begin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/txn_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: txn_commit</h3>
+<p>An additional argument has been added to the txn_commit function.</p>
+<p>The application should be searched for any occurrences of txn_commit.
+For each one, an argument of 0 should be appended to the current
+arguments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/txn_begin.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/txn_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/txn_stat.html b/db/docs/ref/upgrade.3.0/txn_stat.html
index d965494d5..88bb7b49c 100644
--- a/db/docs/ref/upgrade.3.0/txn_stat.html
+++ b/db/docs/ref/upgrade.3.0/txn_stat.html
@@ -1,23 +1,24 @@
-<!--$Id: txn_stat.so,v 11.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_stat.so,v 11.5 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: txn_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/rmw.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/rmw.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: txn_stat</h1>
-<p>The <b>st_refcnt</b> field returned from the <a href="../../api_c/txn_stat.html">txn_stat</a> interface
-has been removed, and this information is no longer available.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/rmw.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.0: txn_stat</h3>
+<p>The <b>st_refcnt</b> field returned from the txn_stat function
+has been removed, and this information is no longer available.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/txn_commit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/rmw.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/value_set.html b/db/docs/ref/upgrade.3.0/value_set.html
index 66070b09f..0336434c8 100644
--- a/db/docs/ref/upgrade.3.0/value_set.html
+++ b/db/docs/ref/upgrade.3.0/value_set.html
@@ -1,41 +1,42 @@
-<!--$Id: value_set.so,v 11.6 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: value_set.so,v 11.10 2003/10/18 19:16:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: db_value_set</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/jump_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbenv_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/jump_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbenv_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: db_value_set</h1>
-<p>The db_value_set interface has been removed from the Berkeley DB 3.0 release,
-replaced by method calls on the DB_ENV handle.
+<h3 align=center>Release 3.0: db_value_set</h3>
+<p>The db_value_set function has been removed from the Berkeley DB 3.0 release,
+replaced by method calls on the <a href="../../api_c/env_class.html">DB_ENV</a> handle.</p>
<p>The following table lists the db_value_set arguments previously used by
-applications and the methods that should now be used instead.
-<p><table border=1 align=center>
+applications and the function that should now be used instead.</p>
+<table border=1 align=center>
<tr><th>db_value_set argument</th><th>Berkeley DB 3.X method</th></tr>
-<tr><td>DB_MUTEX_LOCKS</td><td><a href="../../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a></td></tr>
+<tr><td>DB_MUTEX_LOCKS</td><td>dbenv_set_mutexlocks</td></tr>
<tr><td>DB_REGION_ANON</td><td>The DB_REGION_ANON functionality has
been replaced by the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> and <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flags
-to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function. A direct translation is not
-available, please review the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> manual page for more
+to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> function. A direct translation is not
+available, please review the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> manual page for more
information.</td></tr>
-<tr><td>DB_REGION_INIT</td><td><a href="../../api_c/env_set_region_init.html">db_env_set_region_init</a></td></tr>
+<tr><td>DB_REGION_INIT</td><td>dbenv_set_region_init</td></tr>
<tr><td>DB_REGION_NAME</td><td>The DB_REGION_NAME functionality has
been replaced by the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> and <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> flags
-to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function. A direct translation is not
-available, please review the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> manual page for more
+to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> function. A direct translation is not
+available, please review the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> manual page for more
information.</td></tr>
-<tr><td>DB_TSL_SPINS</td><td><a href="../../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a></td></tr>
+<tr><td>DB_TSL_SPINS</td><td>dbenv_set_tas_spins</td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/jump_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/dbenv_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/jump_set.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/dbenv_cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.0/xa.html b/db/docs/ref/upgrade.3.0/xa.html
index 41f5a993d..4529e4044 100644
--- a/db/docs/ref/upgrade.3.0/xa.html
+++ b/db/docs/ref/upgrade.3.0/xa.html
@@ -1,33 +1,34 @@
<!--$Id: xa.so,v 11.7 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.0: db_xa_open</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/db.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/db.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.0: db_xa_open</h1>
+<h3 align=center>Release 3.0: db_xa_open</h3>
<p>The following change applies only to applications using Berkeley DB as an XA
Resource Manager. If your application is not using Berkeley DB in this way,
-you can ignore this change.
-<p>The db_xa_open function has been replaced with the <a href="../../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a>
-flag to the <a href="../../api_c/db_create.html">db_create</a> function. All calls to db_xa_open should
-be replaced with calls to <a href="../../api_c/db_create.html">db_create</a> with the <a href="../../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a>
-flag set, followed by a call to the <a href="../../api_c/db_open.html">DB-&gt;open</a> function.
+you can ignore this change.</p>
+<p>The db_xa_open function has been replaced with the <a href="../../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a>
+flag to the <a href="../../api_c/db_class.html">db_create</a> function. All calls to db_xa_open should
+be replaced with calls to <a href="../../api_c/db_class.html">db_create</a> with the <a href="../../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a>
+flag set, followed by a call to the <a href="../../api_c/db_open.html">DB-&gt;open</a> function.</p>
<p>A similar change has been made for the C++ API, where the
-<a href="../../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a> flag should be specified to the Db constructor. All
+<a href="../../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a> flag should be specified to the Db constructor. All
calls to the Db::xa_open method should be replaced with the
-<a href="../../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a> flag to the Db constructor, followed by a call to
-the DB::open method.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.0/db.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a> flag to the Db constructor, followed by a call to
+the DB::open method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/open.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.0/db.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/btstat.html b/db/docs/ref/upgrade.3.1/btstat.html
index e5d7c4bb5..d419b3674 100644
--- a/db/docs/ref/upgrade.3.1/btstat.html
+++ b/db/docs/ref/upgrade.3.1/btstat.html
@@ -1,20 +1,21 @@
-<!--$Id: btstat.so,v 1.11 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: btstat.so,v 1.12 2003/10/18 19:16:15 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: DB-&gt;stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/sysmem.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/sysmem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DB-&gt;stat</h1>
-<p>For Btree database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> interface field
+<h3 align=center>Release 3.1: DB-&gt;stat</h3>
+<p>For Btree database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method field
<b>bt_nrecs</b> has been removed, replaced by two fields:
<b>bt_nkeys</b> and <b>bt_ndata</b>. The <b>bt_nkeys</b> field returns
a count of the unique keys in the database. The <b>bt_ndata</b> field
@@ -24,17 +25,17 @@ a count of keys in the database, but, in the case of Btree databases,
could overcount as it sometimes counted duplicate data items as unique
keys. The application should be searched for any uses of the
<b>bt_nrecs</b> field and the field should be changed to be either
-<b>bt_nkeys</b> or <b>bt_ndata</b>, whichever is more appropriate.
-<p>For Hash database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> interface field
+<b>bt_nkeys</b> or <b>bt_ndata</b>, whichever is more appropriate.</p>
+<p>For Hash database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method field
<b>hash_nrecs</b> has been removed, replaced by two fields:
<b>hash_nkeys</b> and <b>hash_ndata</b>. The <b>hash_nkeys</b> field
returns a count of the unique keys in the database. The
<b>hash_ndata</b> field returns a count of the key/data pairs in the
database. The new <b>hash_nkeys</b> field exactly matches the previous
-value of the <b>hash_nrecs</b> field. The application should be searched
-for any uses of the <b>hash_nrecs</b> field, and the field should be
-changed to be <b>hash_nkeys</b>.
-<p>For Queue database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> interface field
+value of the <b>hash_nrecs</b> field. The application should be
+searched for any uses of the <b>hash_nrecs</b> field, and the field
+should be changed to be <b>hash_nkeys</b>.</p>
+<p>For Queue database statistics, the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method field
<b>qs_nrecs</b> has been removed, replaced by two fields:
<b>qs_nkeys</b> and <b>qs_ndata</b>. The <b>qs_nkeys</b> field returns
a count of the unique keys in the database. The <b>qs_ndata</b> field
@@ -42,9 +43,9 @@ returns a count of the key/data pairs in the database. The new
<b>qs_nkeys</b> field exactly matches the previous value of the
<b>qs_nrecs</b> field. The application should be searched for any uses
of the <b>qs_nrecs</b> field, and the field should be changed to be
-<b>qs_nkeys</b>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/sysmem.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>qs_nkeys</b>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/dup.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/sysmem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/config.html b/db/docs/ref/upgrade.3.1/config.html
index 29a53363e..440c74b80 100644
--- a/db/docs/ref/upgrade.3.1/config.html
+++ b/db/docs/ref/upgrade.3.1/config.html
@@ -1,35 +1,36 @@
-<!--$Id: config.so,v 1.3 2000/07/25 16:59:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: config.so,v 1.4 2001/05/15 14:44:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.1: DBENV-&gt;open, DBENV-&gt;remove</title>
+<title>Berkeley DB Reference Guide: Release 3.1: DB_ENV-&gt;open, DB_ENV-&gt;remove</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DBENV-&gt;open, DBENV-&gt;remove</h1>
+<h3 align=center>Release 3.1: DB_ENV-&gt;open, DB_ENV-&gt;remove</h3>
<p>In the Berkeley DB 3.1 release, the <b>config</b> argument to the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a>, <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> methods has been removed,
-replaced by additional methods on the DB_ENV handle. If your
-application calls <a href="../../api_c/env_open.html">DBENV-&gt;open</a> or <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> with a NULL
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>, <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> methods has been removed,
+replaced by additional methods on the <a href="../../api_c/env_class.html">DB_ENV</a> handle. If your
+application calls <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> or <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> with a NULL
<b>config</b> argument, find those functions and remove the config
argument from the call. If your application has non-NULL <b>config</b>
argument, the strings values in that argument are replaced with calls to
-DB_ENV methods as follows:
-<p><table border=1 align=center>
+<a href="../../api_c/env_class.html">DB_ENV</a> methods as follows:</p>
+<table border=1 align=center>
<tr><th>Previous config string</th><th>Berkeley DB 3.1 version method</th></tr>
-<tr><td>DB_DATA_DIR</td><td><a href="../../api_c/env_set_data_dir.html">DBENV-&gt;set_data_dir</a></td></tr>
-<tr><td>DB_LOG_DIR</td><td><a href="../../api_c/env_set_lg_dir.html">DBENV-&gt;set_lg_dir</a></td></tr>
-<tr><td>DB_TMP_DIR</td><td><a href="../../api_c/env_set_tmp_dir.html">DBENV-&gt;set_tmp_dir</a></td></tr>
+<tr><td>DB_DATA_DIR</td><td><a href="../../api_c/env_set_data_dir.html">DB_ENV-&gt;set_data_dir</a></td></tr>
+<tr><td>DB_LOG_DIR</td><td><a href="../../api_c/env_set_lg_dir.html">DB_ENV-&gt;set_lg_dir</a></td></tr>
+<tr><td>DB_TMP_DIR</td><td><a href="../../api_c/env_set_tmp_dir.html">DB_ENV-&gt;set_tmp_dir</a></td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/disk.html b/db/docs/ref/upgrade.3.1/disk.html
index cbaa3342b..986acaba7 100644
--- a/db/docs/ref/upgrade.3.1/disk.html
+++ b/db/docs/ref/upgrade.3.1/disk.html
@@ -1,34 +1,35 @@
<!--$Id: disk.so,v 1.9 2000/12/21 18:37:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/logalloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/logalloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: upgrade requirements</h1>
+<h3 align=center>Release 3.1: upgrade requirements</h3>
<p>Log file formats and the Btree, Queue, Recno and Hash Access Method
database formats changed in the Berkeley DB 3.1 release. (The on-disk
Btree/Recno format changed from version 7 to version 8. The on-disk
Hash format changed from version 6 to version 7. The on-disk Queue
format changed from version 1 to version 2.) Until the underlying
-databases are upgraded, the <a href="../../api_c/db_open.html">DB-&gt;open</a> function will return a
-<a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a> error.
+databases are upgraded, the <a href="../../api_c/db_open.html">DB-&gt;open</a> method will return a
+<a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a> error.</p>
<p>An additional flag, <a href="../../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a>, has been added to the
-<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a> function for this upgrade. Please review the
-<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a> documentation for further information.
+<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a> method for this upgrade. Please review the
+<a href="../../api_c/db_upgrade.html">DB-&gt;upgrade</a> documentation for further information.</p>
<p>For further information on upgrading Berkeley DB installations, see
<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB
-installations</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/logalloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/logalloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/dup.html b/db/docs/ref/upgrade.3.1/dup.html
index 33f71ebb4..724465224 100644
--- a/db/docs/ref/upgrade.3.1/dup.html
+++ b/db/docs/ref/upgrade.3.1/dup.html
@@ -1,31 +1,32 @@
<!--$Id: dup.so,v 1.1 2000/05/31 18:53:28 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: identical duplicate data items</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/btstat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/btstat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: identical duplicate data items</h1>
+<h3 align=center>Release 3.1: identical duplicate data items</h3>
<p>In previous releases of Berkeley DB, it was not an error to store identical
duplicate data items, or, for those that just like the way it sounds,
duplicate duplicates. However, there were implementation bugs where
-storing duplicate duplicates could cause database corruption.
+storing duplicate duplicates could cause database corruption.</p>
<p>In this release, applications may store identical duplicate data items
as long as the data items are unsorted. It is an error to attempt to
store identical duplicate data items when duplicates are being stored
in a sorted order. This restriction is expected to be lifted in a future
release. See <a href="../../ref/am_conf/dup.html">Duplicate data items</a>
-for more information.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/btstat.html"><img src="../../images/next.gif" alt="Next"></a>
+for more information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/put.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/btstat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/env.html b/db/docs/ref/upgrade.3.1/env.html
index 6e1b8ccde..c74764191 100644
--- a/db/docs/ref/upgrade.3.1/env.html
+++ b/db/docs/ref/upgrade.3.1/env.html
@@ -1,53 +1,54 @@
-<!--$Id: env.so,v 1.1 2000/05/31 15:10:03 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: env.so,v 1.6 2001/08/07 01:42:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: environment configuration</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/txn_check.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/txn_check.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: environment configuration</h1>
-<p>A set of DB_ENV configuration methods which were not environment
+<h3 align=center>Release 3.1: environment configuration</h3>
+<p>A set of <a href="../../api_c/env_class.html">DB_ENV</a> configuration methods which were not environment
specific, but which instead affected the entire application space, have
-been removed from the DB_ENV object and replaced by static
-functions. The following table lists the DB_ENV methods previously
+been removed from the <a href="../../api_c/env_class.html">DB_ENV</a> object and replaced by static
+functions. The following table lists the <a href="../../api_c/env_class.html">DB_ENV</a> methods previously
available to applications and the static functions that should now be used
-instead.
-<p><table border=1 align=center>
-<tr><th>DB_ENV method</th><th>Berkeley DB 3.1 function</th></tr>
-<tr><td>DBENV-&gt;set_func_close</td><td><a href="../../api_c/set_func_close.html">db_env_set_func_close</a></td></tr>
-<tr><td>DBENV-&gt;set_func_dirfree</td><td><a href="../../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a></td></tr>
-<tr><td>DBENV-&gt;set_func_dirlist</td><td><a href="../../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a></td></tr>
-<tr><td>DBENV-&gt;set_func_exists</td><td><a href="../../api_c/set_func_exists.html">db_env_set_func_exists</a></td></tr>
-<tr><td>DBENV-&gt;set_func_free</td><td><a href="../../api_c/set_func_free.html">db_env_set_func_free</a></td></tr>
-<tr><td>DBENV-&gt;set_func_fsync</td><td><a href="../../api_c/set_func_fsync.html">db_env_set_func_fsync</a></td></tr>
-<tr><td>DBENV-&gt;set_func_ioinfo</td><td><a href="../../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a></td></tr>
-<tr><td>DBENV-&gt;set_func_malloc</td><td><a href="../../api_c/set_func_malloc.html">db_env_set_func_malloc</a></td></tr>
-<tr><td>DBENV-&gt;set_func_map</td><td><a href="../../api_c/set_func_map.html">db_env_set_func_map</a></td></tr>
-<tr><td>DBENV-&gt;set_func_open</td><td><a href="../../api_c/set_func_open.html">db_env_set_func_open</a></td></tr>
-<tr><td>DBENV-&gt;set_func_read</td><td><a href="../../api_c/set_func_read.html">db_env_set_func_read</a></td></tr>
-<tr><td>DBENV-&gt;set_func_realloc</td><td><a href="../../api_c/set_func_realloc.html">db_env_set_func_realloc</a></td></tr>
-<tr><td>DBENV-&gt;set_func_rename</td><td><a href="../../api_c/set_func_rename.html">db_env_set_func_rename</a></td></tr>
-<tr><td>DBENV-&gt;set_func_seek</td><td><a href="../../api_c/set_func_seek.html">db_env_set_func_seek</a></td></tr>
-<tr><td>DBENV-&gt;set_func_sleep</td><td><a href="../../api_c/set_func_sleep.html">db_env_set_func_sleep</a></td></tr>
-<tr><td>DBENV-&gt;set_func_unlink</td><td><a href="../../api_c/set_func_unlink.html">db_env_set_func_unlink</a></td></tr>
-<tr><td>DBENV-&gt;set_func_unmap</td><td><a href="../../api_c/set_func_unmap.html">db_env_set_func_unmap</a></td></tr>
-<tr><td>DBENV-&gt;set_func_write</td><td><a href="../../api_c/set_func_write.html">db_env_set_func_write</a></td></tr>
-<tr><td>DBENV-&gt;set_func_yield</td><td><a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a></td></tr>
-<tr><td>DBENV-&gt;set_pageyield</td><td><a href="../../api_c/env_set_pageyield.html">db_env_set_pageyield</a></td></tr>
-<tr><td>DBENV-&gt;set_region_init</td><td><a href="../../api_c/env_set_region_init.html">db_env_set_region_init</a></td></tr>
-<tr><td>DBENV-&gt;set_mutexlocks</td><td><a href="../../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a></td></tr>
-<tr><td>DBENV-&gt;set_tas_spins</td><td><a href="../../api_c/env_set_tas_spins.html">db_env_set_tas_spins</a></td></tr>
+instead.</p>
+<table border=1 align=center>
+<tr><th><a href="../../api_c/env_class.html">DB_ENV</a> method</th><th>Berkeley DB 3.1 function</th></tr>
+<tr><td>DB_ENV-&gt;set_func_close</td><td><a href="../../api_c/set_func_close.html">db_env_set_func_close</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_dirfree</td><td><a href="../../api_c/set_func_dirfree.html">db_env_set_func_dirfree</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_dirlist</td><td><a href="../../api_c/set_func_dirlist.html">db_env_set_func_dirlist</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_exists</td><td><a href="../../api_c/set_func_exists.html">db_env_set_func_exists</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_free</td><td><a href="../../api_c/set_func_free.html">db_env_set_func_free</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_fsync</td><td><a href="../../api_c/set_func_fsync.html">db_env_set_func_fsync</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_ioinfo</td><td><a href="../../api_c/set_func_ioinfo.html">db_env_set_func_ioinfo</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_malloc</td><td><a href="../../api_c/set_func_malloc.html">db_env_set_func_malloc</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_map</td><td><a href="../../api_c/set_func_map.html">db_env_set_func_map</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_open</td><td><a href="../../api_c/set_func_open.html">db_env_set_func_open</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_read</td><td><a href="../../api_c/set_func_read.html">db_env_set_func_read</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_realloc</td><td><a href="../../api_c/set_func_realloc.html">db_env_set_func_realloc</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_rename</td><td><a href="../../api_c/set_func_rename.html">db_env_set_func_rename</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_seek</td><td><a href="../../api_c/set_func_seek.html">db_env_set_func_seek</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_sleep</td><td><a href="../../api_c/set_func_sleep.html">db_env_set_func_sleep</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_unlink</td><td><a href="../../api_c/set_func_unlink.html">db_env_set_func_unlink</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_unmap</td><td><a href="../../api_c/set_func_unmap.html">db_env_set_func_unmap</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_write</td><td><a href="../../api_c/set_func_write.html">db_env_set_func_write</a></td></tr>
+<tr><td>DB_ENV-&gt;set_func_yield</td><td><a href="../../api_c/set_func_yield.html">db_env_set_func_yield</a></td></tr>
+<tr><td>DB_ENV-&gt;set_pageyield</td><td>dbenv_set_pageyield</td></tr>
+<tr><td>DB_ENV-&gt;set_region_init</td><td>dbenv_set_region_init</td></tr>
+<tr><td>DB_ENV-&gt;set_mutexlocks</td><td>dbenv_set_mutexlocks</td></tr>
+<tr><td>DB_ENV-&gt;set_tas_spins</td><td>dbenv_set_tas_spins</td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/txn_check.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/txn_check.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/intro.html b/db/docs/ref/upgrade.3.1/intro.html
index 9c5d95291..f41a03300 100644
--- a/db/docs/ref/upgrade.3.1/intro.html
+++ b/db/docs/ref/upgrade.3.1/intro.html
@@ -1,26 +1,27 @@
<!--$Id: intro.so,v 1.4 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: introduction</h1>
+<h3 align=center>Release 3.1: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 3.0 release interfaces to the Berkeley DB 3.1 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/config.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/log_register.html b/db/docs/ref/upgrade.3.1/log_register.html
index 8823d6439..dea09de1c 100644
--- a/db/docs/ref/upgrade.3.1/log_register.html
+++ b/db/docs/ref/upgrade.3.1/log_register.html
@@ -1,28 +1,29 @@
-<!--$Id: log_register.so,v 1.3 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: log_register.so,v 1.4 2001/07/26 19:53:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: log_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/sysmem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/memp_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/sysmem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/memp_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: log_register</h1>
-<p>The arguments to the <a href="../../api_c/log_register.html">log_register</a> and <a href="../../api_c/log_unregister.html">log_unregister</a>
-interfaces have changed. Instead of returning (and passing in) a logging
-file ID, a reference to the DB structure being registered (or
-unregistered) is passed. The application should be searched for any
-occurrences of <a href="../../api_c/log_register.html">log_register</a> and <a href="../../api_c/log_unregister.html">log_unregister</a>. For each
-one, change the arguments to be a reference to the DB structure
-being registered or unregistered.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/sysmem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/memp_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.1: log_register</h3>
+<p>The arguments to the log_register and log_unregister interfaces have
+changed. Instead of returning (and passing in) a logging file ID, a
+reference to the <a href="../../api_c/db_class.html">DB</a> structure being registered (or unregistered)
+is passed. The application should be searched for any occurrences of
+log_register and log_unregister. For each one, change the arguments to
+be a reference to the <a href="../../api_c/db_class.html">DB</a> structure being registered or
+unregistered.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/sysmem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/memp_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/logalloc.html b/db/docs/ref/upgrade.3.1/logalloc.html
index acafbf6ee..1444a522d 100644
--- a/db/docs/ref/upgrade.3.1/logalloc.html
+++ b/db/docs/ref/upgrade.3.1/logalloc.html
@@ -1,27 +1,28 @@
<!--$Id: logalloc.so,v 1.1 2000/06/02 23:32:48 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: log file pre-allocation</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/tmp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/tmp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: log file pre-allocation</h1>
-<p>This change only affects Win/32 applications.
+<h3 align=center>Release 3.1: log file pre-allocation</h3>
+<p>This change only affects Win/32 applications.</p>
<p>On Win/32 platforms Berkeley DB no longer pre-allocates log files. The problem
was a noticeable performance spike as each log file was created. To turn
this feature back on, search for the flag DB_OSO_LOG in the source file
<b>log/log_put.c</b> and make the change described there, or contact
-Sleepycat Software for assistance.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/tmp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+Sleepycat Software for assistance.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/tmp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/memp_register.html b/db/docs/ref/upgrade.3.1/memp_register.html
index e8a667031..565efacbd 100644
--- a/db/docs/ref/upgrade.3.1/memp_register.html
+++ b/db/docs/ref/upgrade.3.1/memp_register.html
@@ -1,30 +1,31 @@
-<!--$Id: memp_register.so,v 1.3 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: memp_register.so,v 1.5 2003/10/18 19:16:15 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: memp_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/txn_check.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/txn_check.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: memp_register</h1>
+<h3 align=center>Release 3.1: memp_register</h3>
<p>An additional argument has been added to the <b>pgin</b> and
-<b>pgout</b> functions provided to the <a href="../../api_c/memp_register.html">memp_register</a> interface.
+<b>pgout</b> functions provided to the memp_register function.
The application should be searched for any occurrences of
-<a href="../../api_c/memp_register.html">memp_register</a>. For each one, if <b>pgin</b> or <b>pgout</b>
+memp_register. For each one, if <b>pgin</b> or <b>pgout</b>
functions are specified, the <b>pgin</b> and <b>pgout</b> functions
should be modified to take an initial argument of a <b>DB_ENV *</b>.
This argument is intended to support better error reporting for
applications, and may be entirely ignored by the <b>pgin</b> and
-<b>pgout</b> functions themselves.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/txn_check.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>pgout</b> functions themselves.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/txn_check.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/put.html b/db/docs/ref/upgrade.3.1/put.html
index 5252b3ac0..28509a665 100644
--- a/db/docs/ref/upgrade.3.1/put.html
+++ b/db/docs/ref/upgrade.3.1/put.html
@@ -1,35 +1,37 @@
-<!--$Id: put.so,v 1.8 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: put.so,v 1.11 2003/10/18 19:16:15 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: DB-&gt;put</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/set_paniccall.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/dup.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/set_paniccall.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/dup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DB-&gt;put</h1>
+<h3 align=center>Release 3.1: DB-&gt;put</h3>
<p>For the Queue and Recno access methods, when the <a href="../../api_c/db_put.html#DB_APPEND">DB_APPEND</a> flag
-is specified to the <a href="../../api_c/db_put.html">DB-&gt;put</a> interface, the allocated record number
-is returned to the application in the <b>key</b> <a href="../../api_c/dbt.html">DBT</a> argument.
-In previous releases of Berkeley DB, this <a href="../../api_c/dbt.html">DBT</a> structure did not follow
-the usual <a href="../../api_c/dbt.html">DBT</a> conventions, e.g., it was not possible to cause
-Berkeley DB to allocate space for the returned record number. Rather, it was
-always assumed that the <b>data</b> field of the <b>key</b> structure
-referenced memory that could be used as storage for a db_recno_t type.
+is specified to the <a href="../../api_c/db_put.html">DB-&gt;put</a> method, the allocated record number is
+returned to the application in the <b>key</b> <a href="../../api_c/dbt_class.html">DBT</a> argument. In
+previous releases of Berkeley DB, this <a href="../../api_c/dbt_class.html">DBT</a> structure did not follow
+the usual <a href="../../api_c/dbt_class.html">DBT</a> conventions. For example, it was not possible to
+cause Berkeley DB to allocate space for the returned record number. Rather,
+it was always assumed that the <b>data</b> field of the <b>key</b>
+structure referred to memory that could be used as storage for a
+db_recno_t type.</p>
<p>As of the Berkeley DB 3.1.0 release, the <b>key</b> structure behaves as
-described in the <a href="../../api_c/dbt.html">DBT</a> C++/Java class or C structure documentation.
+described in the <a href="../../api_c/dbt_class.html">DBT</a> C++/Java class or C structure documentation.</p>
<p>Applications which are using the <a href="../../api_c/db_put.html#DB_APPEND">DB_APPEND</a> flag for Queue and
Recno access method databases will require a change to upgrade to the
Berkeley DB 3.1 releases. The simplest change is likely to be to add the
-<a href="../../api_c/dbt.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flag to the <b>key</b> structure. For example,
-code that appears as follows:
-<p><blockquote><pre>DBT key;
+<a href="../../api_c/dbt_class.html#DB_DBT_USERMEM">DB_DBT_USERMEM</a> flag to the <b>key</b> structure. For example,
+code that appears as follows:</p>
+<blockquote><pre>DBT key;
db_recno_t recno;
<p>
memset(&key, 0, sizeof(DBT));
@@ -37,8 +39,8 @@ key.data = &recno;
key.size = sizeof(recno);
DB-&gt;put(DB, NULL, &key, &data, DB_APPEND);
printf("new record number is %lu\n", (u_long)recno);</pre></blockquote>
-<p>would be changed to:
-<p><blockquote><pre>DBT key;
+<p>would be changed to:</p>
+<blockquote><pre>DBT key;
db_recno_t recno;
<p>
memset(&key, 0, sizeof(DBT));
@@ -48,16 +50,16 @@ key.flags = DB_DBT_USERMEM;
DB-&gt;put(DB, NULL, &key, &data, DB_APPEND);
printf("new record number is %lu\n", (u_long)recno);</pre></blockquote>
<p>Note that the <b>ulen</b> field is now set as well as the flag value.
-An alternative change would be:
-<p><blockquote><pre>DBT key;
+An alternative change would be:</p>
+<blockquote><pre>DBT key;
db_recno_t recno;
<p>
memset(&key, 0, sizeof(DBT));
DB-&gt;put(DB, NULL, &key, &data, DB_APPEND);
recno = *(db_recno_t *)key-&gt;data;
printf("new record number is %lu\n", (u_long)recno);</pre></blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/set_paniccall.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/dup.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/set_paniccall.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/dup.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/set_feedback.html b/db/docs/ref/upgrade.3.1/set_feedback.html
index c7b7864b9..9abffdc57 100644
--- a/db/docs/ref/upgrade.3.1/set_feedback.html
+++ b/db/docs/ref/upgrade.3.1/set_feedback.html
@@ -1,27 +1,28 @@
-<!--$Id: set_feedback.so,v 1.3 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_feedback.so,v 1.4 2001/05/15 14:44:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.1: DBENV-&gt;set_feedback, DB-&gt;set_feedback</title>
+<title>Berkeley DB Reference Guide: Release 3.1: DB_ENV-&gt;set_feedback, DB-&gt;set_feedback</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/set_tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/set_tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DBENV-&gt;set_feedback, DB-&gt;set_feedback</h1>
-<p>Starting with the 3.1 release of Berkeley DB, the <a href="../../api_c/env_set_feedback.html">DBENV-&gt;set_feedback</a>
-and <a href="../../api_c/db_set_feedback.html">DB-&gt;set_feedback</a> functions may return an error value, that is, they
+<h3 align=center>Release 3.1: DB_ENV-&gt;set_feedback, DB-&gt;set_feedback</h3>
+<p>Starting with the 3.1 release of Berkeley DB, the <a href="../../api_c/env_set_feedback.html">DB_ENV-&gt;set_feedback</a>
+and <a href="../../api_c/db_set_feedback.html">DB-&gt;set_feedback</a> methods may return an error value, that is, they
are no longer declared as returning no value, instead they return an int
-or throw an exception as appropriate when an error occurs.
+or throw an exception as appropriate when an error occurs.</p>
<p>If your application calls these functions, you may want to check for a
-possible error on return.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/set_tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
+possible error on return.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/set_tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_paniccall.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/set_paniccall.html b/db/docs/ref/upgrade.3.1/set_paniccall.html
index 8aa554cf0..bd05e58b2 100644
--- a/db/docs/ref/upgrade.3.1/set_paniccall.html
+++ b/db/docs/ref/upgrade.3.1/set_paniccall.html
@@ -1,27 +1,28 @@
-<!--$Id: set_paniccall.so,v 1.4 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_paniccall.so,v 1.5 2001/05/15 14:44:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.1: DBENV-&gt;set_paniccall, DB-&gt;set_paniccall</title>
+<title>Berkeley DB Reference Guide: Release 3.1: DB_ENV-&gt;set_paniccall, DB-&gt;set_paniccall</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/set_feedback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/put.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/set_feedback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DBENV-&gt;set_paniccall, DB-&gt;set_paniccall</h1>
-<p>Starting with the 3.1 release of Berkeley DB, the <a href="../../api_c/env_set_paniccall.html">DBENV-&gt;set_paniccall</a>
-and <a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a> functions may return an error value, that is, they
+<h3 align=center>Release 3.1: DB_ENV-&gt;set_paniccall, DB-&gt;set_paniccall</h3>
+<p>Starting with the 3.1 release of Berkeley DB, the <a href="../../api_c/env_set_paniccall.html">DB_ENV-&gt;set_paniccall</a>
+and <a href="../../api_c/db_set_paniccall.html">DB-&gt;set_paniccall</a> methods may return an error value, that is, they
are no longer declared as returning no value, instead they return an int
-or throw an exception as appropriate when an error occurs.
+or throw an exception as appropriate when an error occurs.</p>
<p>If your application calls these functions, you may want to check for a
-possible error on return.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/set_feedback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/put.html"><img src="../../images/next.gif" alt="Next"></a>
+possible error on return.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/set_feedback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/put.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/set_tx_recover.html b/db/docs/ref/upgrade.3.1/set_tx_recover.html
index 9943845e8..d7d1ab21d 100644
--- a/db/docs/ref/upgrade.3.1/set_tx_recover.html
+++ b/db/docs/ref/upgrade.3.1/set_tx_recover.html
@@ -1,27 +1,28 @@
-<!--$Id: set_tx_recover.so,v 1.9 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_tx_recover.so,v 1.12 2002/02/23 20:05:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.1: DBENV-&gt;set_tx_recover</title>
+<title>Berkeley DB Reference Guide: Release 3.1: DB_ENV-&gt;set_tx_recover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_feedback.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_feedback.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DBENV-&gt;set_tx_recover</h1>
-<p>The redo parameter of the function passed to <a href="../../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>
+<h3 align=center>Release 3.1: DB_ENV-&gt;set_tx_recover</h3>
+<p>The redo parameter of the function passed to DB_ENV-&gt;set_tx_recover
used to be an integer set to any one of a number of #defined values. In
the 3.1 release of Berkeley DB, the redo parameter has been replaced by the op
-parameter which is an enumerated type of type db_recops.
-<p>If your application calls <a href="../../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>, then find the
-function referenced in the call. Replace the flag values in that function
-as follows:
-<p><table border=1 align=center>
+parameter which is an enumerated type of type db_recops.</p>
+<p>If your application calls DB_ENV-&gt;set_tx_recover, then find the
+function referred to by the call. Replace the flag values in that
+function as follows:</p>
+<table border=1 align=center>
<tr><th>Previous flag</th><th>Berkeley DB 3.1 version flag</th></tr>
<tr><td>TXN_BACKWARD_ROLL</td><td>DB_TXN_BACKWARD_ROLL</td></tr>
<tr><td>TXN_FORWARD_ROLL</td><td>DB_TXN_FORWARD_ROLL</td></tr>
@@ -29,8 +30,8 @@ as follows:
<tr><td>TXN_REDO</td><td>DB_TXN_FORWARD_ROLL</td></tr>
<tr><td>TXN_UNDO</td><td>DB_TXN_ABORT</td></tr>
</table>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/set_feedback.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/set_feedback.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/sysmem.html b/db/docs/ref/upgrade.3.1/sysmem.html
index 7e21a565e..de89a81c1 100644
--- a/db/docs/ref/upgrade.3.1/sysmem.html
+++ b/db/docs/ref/upgrade.3.1/sysmem.html
@@ -1,25 +1,26 @@
-<!--$Id: sysmem.so,v 1.3 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: sysmem.so,v 1.4 2003/10/18 19:16:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: DB_SYSTEM_MEM</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/btstat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/btstat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DB_SYSTEM_MEM</h1>
+<h3 align=center>Release 3.1: DB_SYSTEM_MEM</h3>
<p>Using the <a href="../../api_c/env_open.html#DB_SYSTEM_MEM">DB_SYSTEM_MEM</a> option on UNIX systems now requires the
specification of a base system memory segment ID, using the
-<a href="../../api_c/env_set_shm_key.html">DBENV-&gt;set_shm_key</a> function. Any valid segment ID may be specified, for
-example, one returned by the UNIX <b>ftok</b>(3) interface.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/btstat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_set_shm_key.html">DB_ENV-&gt;set_shm_key</a> method. Any valid segment ID may be specified, for
+example, one returned by the UNIX <b>ftok</b>(3) function.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/btstat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/tcl.html b/db/docs/ref/upgrade.3.1/tcl.html
index 0f964abb3..852652f36 100644
--- a/db/docs/ref/upgrade.3.1/tcl.html
+++ b/db/docs/ref/upgrade.3.1/tcl.html
@@ -1,30 +1,32 @@
-<!--$Id: tcl.so,v 1.5 2000/06/02 14:50:20 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: tcl.so,v 1.6 2001/03/01 15:58:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: Tcl API</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/tmp.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/tmp.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: Tcl API</h1>
+<h3 align=center>Release 3.1: Tcl API</h3>
<p>The Berkeley DB Tcl API has been modified so that the <b>-mpool</b> option to
the <b>berkdb env</b> command is now the default behavior. The Tcl API
has also been modified so that the <b>-txn</b> option to the
<b>berkdb env</b> command implies the <b>-lock</b> and <b>-log</b>
options. Tcl scripts should be updated to remove the <b>-mpool</b>,
-<b>-lock</b> and <b>-log</b> options.
-<p>The Berkeley DB Tcl API has been modified to follow the Tcl standard rules for
-integer conversion, e.g., if the first two characters of a record number
-are "0x", the record number is expected to be in hexadecimal form.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/tmp.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>-lock</b> and <b>-log</b> options.</p>
+<p>The Berkeley DB Tcl API has been modified to follow the Tcl standard rules
+for integer conversion, for example, if the first two characters of a
+record number are "0x", the record number is expected to be in
+hexadecimal form.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/tmp.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/tmp.html b/db/docs/ref/upgrade.3.1/tmp.html
index 72034803b..9f144e555 100644
--- a/db/docs/ref/upgrade.3.1/tmp.html
+++ b/db/docs/ref/upgrade.3.1/tmp.html
@@ -1,34 +1,35 @@
<!--$Id: tmp.so,v 1.7 2000/05/22 20:26:35 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: DB_TMP_DIR</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/logalloc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/logalloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: DB_TMP_DIR</h1>
+<h3 align=center>Release 3.1: DB_TMP_DIR</h3>
<p>This change only affects Win/32 applications that create in-memory
-databases.
+databases.</p>
<p>On Win/32 platforms an additional test has been added when searching for
the appropriate directory in which to create the temporary files that are
used to back in-memory databases. Berkeley DB now uses any return value from
the GetTempPath interface as the temporary file directory name before
-resorting to the static list of compiled-in pathnames.
+resorting to the static list of compiled-in pathnames.</p>
<p>If the system registry does not return the same directory as Berkeley DB has
been using previously, this change could cause temporary backing files to
move to a new directory when applications are upgraded to the 3.1 release.
In extreme cases, this could create (or fix) security problems if the file
protection modes for the system registry directory are different from
-those on the directory previously used by Berkeley DB.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/logalloc.html"><img src="../../images/next.gif" alt="Next"></a>
+those on the directory previously used by Berkeley DB.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/logalloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/toc.html b/db/docs/ref/upgrade.3.1/toc.html
index 091318810..e3ec409e3 100644
--- a/db/docs/ref/upgrade.3.1/toc.html
+++ b/db/docs/ref/upgrade.3.1/toc.html
@@ -1,20 +1,26 @@
-<!--$Id: toc.so,v 1.2 2000/12/05 20:36:27 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 1.4 2001/06/09 14:34:46 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Upgrading Berkeley DB 3.0.X applications to Berkeley DB 3.1</title>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 3.0.X applications to Berkeley DB 3.1</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Upgrading Berkeley DB 3.0.X applications to Berkeley DB 3.1</h1>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 3.0.X applications to Berkeley DB 3.1</h3>
<ol>
-<li><a href="intro.html">Release 3.1: introduction</a>
-<li><a href="config.html">Release 3.1: DBENV-&gt;open, DBENV-&gt;remove</a>
-<li><a href="set_tx_recover.html">Release 3.1: DBENV-&gt;set_tx_recover</a>
-<li><a href="set_feedback.html">Release 3.1: DBENV-&gt;set_feedback, DB-&gt;set_feedback</a>
-<li><a href="set_paniccall.html">Release 3.1: DBENV-&gt;set_paniccall, DB-&gt;set_paniccall</a>
+<p><li><a href="intro.html">Release 3.1: introduction</a>
+<li><a href="config.html">Release 3.1: DB_ENV-&gt;open, DB_ENV-&gt;remove</a>
+<li><a href="set_tx_recover.html">Release 3.1: DB_ENV-&gt;set_tx_recover</a>
+<li><a href="set_feedback.html">Release 3.1: DB_ENV-&gt;set_feedback, DB-&gt;set_feedback</a>
+<li><a href="set_paniccall.html">Release 3.1: DB_ENV-&gt;set_paniccall, DB-&gt;set_paniccall</a>
<li><a href="put.html">Release 3.1: DB-&gt;put</a>
<li><a href="dup.html">Release 3.1: identical duplicate data items</a>
<li><a href="btstat.html">Release 3.1: DB-&gt;stat</a>
@@ -28,6 +34,8 @@
<li><a href="logalloc.html">Release 3.1: log file pre-allocation</a>
<li><a href="disk.html">Release 3.1: upgrade requirements</a>
</ol>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.1/txn_check.html b/db/docs/ref/upgrade.3.1/txn_check.html
index 27dc3851f..035235b04 100644
--- a/db/docs/ref/upgrade.3.1/txn_check.html
+++ b/db/docs/ref/upgrade.3.1/txn_check.html
@@ -1,26 +1,26 @@
-<!--$Id: txn_check.so,v 1.6 2000/07/25 16:59:37 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: txn_check.so,v 1.8 2003/10/18 19:16:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.1: txn_checkpoint</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/memp_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/env.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/memp_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/env.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.1: txn_checkpoint</h1>
-<p>An additional argument has been added to the <a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a>
-interface.
+<h3 align=center>Release 3.1: txn_checkpoint</h3>
+<p>An additional argument has been added to the txn_checkpoint function.</p>
<p>The application should be searched for any occurrences of
-<a href="../../api_c/txn_checkpoint.html">txn_checkpoint</a>. For each one, an argument of 0 should be appended
-to the current arguments.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/memp_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.1/env.html"><img src="../../images/next.gif" alt="Next"></a>
+txn_checkpoint. For each one, an argument of 0 should be appended to
+the current arguments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/memp_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.1/env.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/callback.html b/db/docs/ref/upgrade.3.2/callback.html
index f60a81d5c..14c02b852 100644
--- a/db/docs/ref/upgrade.3.2/callback.html
+++ b/db/docs/ref/upgrade.3.2/callback.html
@@ -1,39 +1,40 @@
<!--$Id: callback.so,v 1.5 2000/10/26 15:20:40 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: DB callback functions, app_private field</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/set_flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/set_flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: DB callback functions, app_private field</h1>
+<h3 align=center>Release 3.2: DB callback functions, app_private field</h3>
<p>In the Berkeley DB 3.2 release, four application callback functions (the
callback functions set by <a href="../../api_c/db_set_bt_compare.html">DB-&gt;set_bt_compare</a>,
<a href="../../api_c/db_set_bt_prefix.html">DB-&gt;set_bt_prefix</a>, <a href="../../api_c/db_set_dup_compare.html">DB-&gt;set_dup_compare</a> and
<a href="../../api_c/db_set_h_hash.html">DB-&gt;set_h_hash</a>) were modified to take a reference to a
-DB object as their first argument. This change allows the Berkeley DB
+<a href="../../api_c/db_class.html">DB</a> object as their first argument. This change allows the Berkeley DB
Java API to reasonably support these interfaces. There is currently no
need for the callback functions to do anything with this additional
-argument.
+argument.</p>
<p>C and C++ applications that specify their own Btree key comparison,
Btree prefix comparison, duplicate data item comparison or Hash
functions should modify these functions to take a reference to a
-DB structure as their first argument. No further change is
-required.
-<p>The app_private field of the <a href="../../api_c/dbt.html">DBT</a> structure (accessible only from
+<a href="../../api_c/db_class.html">DB</a> structure as their first argument. No further change is
+required.</p>
+<p>The app_private field of the <a href="../../api_c/dbt_class.html">DBT</a> structure (accessible only from
the Berkeley DB C API) has been removed in the 3.2 release. It was replaced
-with app_private fields in the DB_ENV and DB handles.
+with app_private fields in the <a href="../../api_c/env_class.html">DB_ENV</a> and <a href="../../api_c/db_class.html">DB</a> handles.
Applications using this field will have to convert to using one of the
-replacement fields.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/set_flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
+replacement fields.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/set_flags.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/renumber.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/db_dump.html b/db/docs/ref/upgrade.3.2/db_dump.html
index 87d909086..660bc9dd1 100644
--- a/db/docs/ref/upgrade.3.2/db_dump.html
+++ b/db/docs/ref/upgrade.3.2/db_dump.html
@@ -1,19 +1,20 @@
<!--$Id: db_dump.so,v 1.3 2000/11/28 21:27:49 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: db_dump</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/notfound.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/notfound.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: db_dump</h1>
+<h3 align=center>Release 3.2: db_dump</h3>
<p>In previous releases of Berkeley DB, the <a href="../../utility/db_dump.html">db_dump</a> utility dumped Recno
access method database keys as numeric strings. For consistency, the
<a href="../../utility/db_dump.html">db_dump</a> utility has been changed in the 3.2 release to dump
@@ -21,9 +22,9 @@ record numbers as hex pairs when the data items are being dumped as hex
pairs. (See the <b>-k</b> and <b>-p</b> options to the
<a href="../../utility/db_dump.html">db_dump</a> utility for more information.) Any applications or
scripts post-processing the <a href="../../utility/db_dump.html">db_dump</a> output of Recno databases
-under these conditions may require modification.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/notfound.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+under these conditions may require modification.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/notfound.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/disk.html b/db/docs/ref/upgrade.3.2/disk.html
index 8cebb9319..193e45b2c 100644
--- a/db/docs/ref/upgrade.3.2/disk.html
+++ b/db/docs/ref/upgrade.3.2/disk.html
@@ -1,28 +1,29 @@
-<!--$Id: disk.so,v 1.4 2000/12/21 18:37:09 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: disk.so,v 1.5 2001/03/28 13:55:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/db_dump.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/db_dump.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: upgrade requirements</h1>
+<h3 align=center>Release 3.2: upgrade requirements</h3>
<p>Log file formats and the Queue Access Method database formats changed
in the Berkeley DB 3.2 release. (The on-disk Queue format changed from
version 2 to version 3.) Until the underlying databases are upgraded,
-the <a href="../../api_c/db_open.html">DB-&gt;open</a> function will return a <a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a> error.
+the <a href="../../api_c/db_open.html">DB-&gt;open</a> method will return a <a href="../../api_c/db_open.html#DB_OLD_VERSION">DB_OLD_VERSION</a> error.</p>
<p>For further information on upgrading Berkeley DB installations, see
<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB
-installations</a>.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/db_dump.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/db_dump.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/handle.html b/db/docs/ref/upgrade.3.2/handle.html
index 86f86a03a..9dd9de9be 100644
--- a/db/docs/ref/upgrade.3.2/handle.html
+++ b/db/docs/ref/upgrade.3.2/handle.html
@@ -1,27 +1,31 @@
-<!--$Id: handle.so,v 1.2 2000/11/17 19:56:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: handle.so,v 1.5 2003/11/20 22:31:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.2: Java and C++ object re-use</title>
+<title>Berkeley DB Reference Guide: Release 3.2: Java and C++ object reuse</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/mutexlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/notfound.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/mutexlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/notfound.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: Java and C++ object re-use</h1>
-<p>In previous releases of Berkeley DB, Java <a href="../../api_java/dbenv_class.html">DbEnv</a> and <a href="../../api_java/db_class.html">Db</a>
-objects, and C++ <a href="../../api_cxx/dbenv_class.html">DbEnv</a> and <a href="../../api_cxx/db_class.html">Db</a> objects could be
-re-used after they were closed, by calling open on them again. This is
+<h3 align=center>Release 3.2: Java and C++ object reuse</h3>
+<p>In previous releases of Berkeley DB, Java
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+ and
+<a href="../../java/com/sleepycat/db/Db.html">Db</a>
+objects, and C++ <a href="../../api_cxx/env_class.html">DbEnv</a> and <a href="../../api_cxx/db_class.html">Db</a> objects could be
+reused after they were closed, by calling open on them again. This is
no longer permitted, and these objects no longer allow any operations
-after a close. Applications re-using these objects should be modified
-to create new objects instead.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/mutexlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/notfound.html"><img src="../../images/next.gif" alt="Next"></a>
+after a close. Applications reusing these objects should be modified
+to create new objects instead.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/mutexlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/notfound.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/incomplete.html b/db/docs/ref/upgrade.3.2/incomplete.html
index 5aeb77559..5ec3832d2 100644
--- a/db/docs/ref/upgrade.3.2/incomplete.html
+++ b/db/docs/ref/upgrade.3.2/incomplete.html
@@ -1,19 +1,20 @@
-<!--$Id: incomplete.so,v 1.4 2000/12/07 15:59:23 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: incomplete.so,v 1.8 2003/11/20 22:31:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: DB_INCOMPLETE</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: DB_INCOMPLETE</h1>
+<h3 align=center>Release 3.2: DB_INCOMPLETE</h3>
<p>There are a number of functions that flush pages from the Berkeley DB shared
memory buffer pool to disk. Most of those functions can potentially
fail because a page that needs to be flushed is not currently available.
@@ -21,19 +22,24 @@ However, this is not a hard failure and is rarely cause for concern.
In the Berkeley DB 3.2 release, the C++ API (if that API is configured to
throw exceptions) and the Java API have been changed so that this
failure does not throw an exception, but rather returns a non-zero error
-code of <a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a>.
-<p>The following C++ methods will return <a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> rather than throw
-an exception: <a href="../../api_cxx/db_close.html">Db::close</a>, <a href="../../api_cxx/db_sync.html">Db::sync</a>, <a href="../../api_cxx/memp_sync.html">DbEnv::memp_sync</a>,
-<a href="../../api_cxx/txn_checkpoint.html">DbEnv::txn_checkpoint</a>, <a href="../../api_cxx/memp_fsync.html">DbMpoolFile::sync</a>.
+code of DB_INCOMPLETE.</p>
+<p>The following C++ methods will return DB_INCOMPLETE rather than throw
+an exception: <a href="../../api_cxx/db_close.html">Db::close</a>, <a href="../../api_cxx/db_sync.html">Db::sync</a>, DbEnv::memp_sync,
+DbEnv::txn_checkpoint, DbMpoolFile::memp_fsync.</p>
<p>The following Java methods are now declared "public int" rather than
-"public void", and will return <a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">Db.DB_INCOMPLETE</a> rather than
-throw an exception: <a href="../../api_java/db_close.html">Db.close</a>, <a href="../../api_java/db_sync.html">Db.sync</a>,
-<a href="../../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a>.
+"public void", and will return Db.DB_INCOMPLETE rather than
+throw an exception:
+<a href="../../java/com/sleepycat/db/Db.html#close">Db.close</a>
+,
+<a href="../../java/com/sleepycat/db/Db.html#sync">Db.sync</a>
+,
+<a href="../../java/com/sleepycat/db/DbEnv.html#checkpoint">DbEnv.checkpoint</a>
+.</p>
<p>It is likely that the only change required by any application will be
-those currently checking for a <a href="../../api_c/memp_fsync.html#DB_INCOMPLETE">DB_INCOMPLETE</a> return that has
-been encapsulated in an exception.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
+those currently checking for a DB_INCOMPLETE return that has
+been encapsulated in an exception.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/renumber.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/tx_recover.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/intro.html b/db/docs/ref/upgrade.3.2/intro.html
index df4d573a0..c38d70859 100644
--- a/db/docs/ref/upgrade.3.2/intro.html
+++ b/db/docs/ref/upgrade.3.2/intro.html
@@ -1,26 +1,27 @@
<!--$Id: intro.so,v 1.3 2000/10/03 17:17:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/set_flags.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/set_flags.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: introduction</h1>
+<h3 align=center>Release 3.2: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 3.1 release interfaces to the Berkeley DB 3.2 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/set_flags.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/set_flags.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/mutexlock.html b/db/docs/ref/upgrade.3.2/mutexlock.html
index fb1b87ca9..b0ac59894 100644
--- a/db/docs/ref/upgrade.3.2/mutexlock.html
+++ b/db/docs/ref/upgrade.3.2/mutexlock.html
@@ -1,28 +1,29 @@
-<!--$Id: mutexlock.so,v 1.1 2000/11/17 19:56:16 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: mutexlock.so,v 1.4 2003/10/18 19:16:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.2: DBENV-&gt;set_mutexlocks</title>
+<title>Berkeley DB Reference Guide: Release 3.2: DB_ENV-&gt;set_mutexlocks</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/handle.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/handle.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: DBENV-&gt;set_mutexlocks</h1>
-<p>Previous Berkeley DB releases included the db_env_set_mutexlocks interface,
+<h3 align=center>Release 3.2: DB_ENV-&gt;set_mutexlocks</h3>
+<p>Previous Berkeley DB releases included the db_env_set_mutexlocks function,
intended for debugging, that allows applications to always obtain
requested mutual exclusion mutexes without regard for their
-availability. This interface has been replaced with
-<a href="../../api_c/env_set_mutexlocks.html">DBENV-&gt;set_mutexlocks</a>, which provides the same functionality on
-a per-database environment basis. Applications using the old interface
-should be updated to use the new one.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/handle.html"><img src="../../images/next.gif" alt="Next"></a>
+availability. This function has been replaced with
+dbenv_set_mutexlocks, which provides the same functionality on a
+per-database environment basis. Applications using the old function
+should be updated to use the new one.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/tx_recover.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/handle.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/notfound.html b/db/docs/ref/upgrade.3.2/notfound.html
index cb40beaae..472dad9e9 100644
--- a/db/docs/ref/upgrade.3.2/notfound.html
+++ b/db/docs/ref/upgrade.3.2/notfound.html
@@ -1,25 +1,31 @@
-<!--$Id: notfound.so,v 1.1 2000/10/25 14:27:30 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: notfound.so,v 1.3 2003/11/20 22:31:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: Java java.io.FileNotFoundException</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/handle.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/db_dump.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/handle.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/db_dump.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: Java java.io.FileNotFoundException</h1>
-<p>The Java <a href="../../api_java/env_remove.html">DbEnv.remove</a>, <a href="../../api_java/db_remove.html">Db.remove</a> and
-<a href="../../api_java/db_rename.html">Db.rename</a> methods now throw java.io.FileNotFoundException
+<h3 align=center>Release 3.2: Java java.io.FileNotFoundException</h3>
+<p>The Java
+<a href="../../java/com/sleepycat/db/DbEnv.html#remove">DbEnv.remove</a>
+,
+<a href="../../java/com/sleepycat/db/Db.html#remove">Db.remove</a>
+ and
+<a href="../../java/com/sleepycat/db/Db.html#rename">Db.rename</a>
+methods now throw java.io.FileNotFoundException
in the case where the named file does not exist. Applications should
-be modified to catch this exception where appropriate.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/handle.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/db_dump.html"><img src="../../images/next.gif" alt="Next"></a>
+be modified to catch this exception where appropriate.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/handle.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/db_dump.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/renumber.html b/db/docs/ref/upgrade.3.2/renumber.html
index 619fa07ff..947b7bb3c 100644
--- a/db/docs/ref/upgrade.3.2/renumber.html
+++ b/db/docs/ref/upgrade.3.2/renumber.html
@@ -1,39 +1,40 @@
-<!--$Id: renumber.so,v 1.3 2000/12/01 18:33:57 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: renumber.so,v 1.4 2001/05/05 01:49:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.2: Logically renumbering records</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/callback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/callback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: Logically renumbering records</h1>
+<h3 align=center>Release 3.2: Logically renumbering records</h3>
<p>In the Berkeley DB 3.2 release, cursor adjustment semantics changed for Recno
databases with mutable record numbers. Before the 3.2 release, cursors
were adjusted to point to the previous or next record at the time the
-record referenced by the cursor was deleted. This could lead to
-unexpected behaviors. For example, two cursors referencing sequential
+record to which the cursor referred was deleted. This could lead to
+unexpected behaviors. For example, two cursors referring to sequential
records that were both deleted would lose their relationship to each
-other and would reference the same position in the database instead of
+other and would refer to the same position in the database instead of
their original sequential relationship. There were also command
sequences that would have unexpected results. For example, DB_AFTER
and DB_BEFORE cursor put operations, using a cursor previously used to
delete an item, would perform the put relative to the cursor's adjusted
-position and not its original position.
+position and not its original position.</p>
<p>In the Berkeley DB 3.2 release, cursors maintain their position in the tree
regardless of deletion operations using the cursor. Applications that
perform database operations, using cursors previously used to delete
entries in Recno databases with mutable record numbers, should be
evaluated to ensure that the new semantics do not cause application
-failure.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/callback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
+failure.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/callback.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/set_flags.html b/db/docs/ref/upgrade.3.2/set_flags.html
index b1bbe906b..a221add63 100644
--- a/db/docs/ref/upgrade.3.2/set_flags.html
+++ b/db/docs/ref/upgrade.3.2/set_flags.html
@@ -1,35 +1,36 @@
-<!--$Id: set_flags.so,v 1.1 2000/10/03 17:17:36 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: set_flags.so,v 1.3 2003/10/18 19:16:16 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.2: DBENV-&gt;set_flags</title>
+<title>Berkeley DB Reference Guide: Release 3.2: DB_ENV-&gt;set_flags</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/callback.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/callback.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: DBENV-&gt;set_flags</h1>
+<h3 align=center>Release 3.2: DB_ENV-&gt;set_flags</h3>
<p>A new method has been added to the Berkeley DB environment handle,
-<a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a>. This interface currently takes three flags:
-<a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a>, <a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a> and <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>. The
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a>. This method currently takes three flags:
+<a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a>, <a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a> and <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>. The
first of these flags, <a href="../../api_c/env_set_flags.html#DB_CDB_ALLDB">DB_CDB_ALLDB</a>, provides new functionality,
-allowing Berkeley DB Concurrent Data Store applications to do locking across multiple databases.
-<p>The other two flags, <a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a> and <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>, were
-specified to the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> method in previous releases. In
-the 3.2 release, they have been moved to the <a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> function
+allowing Berkeley DB Concurrent Data Store applications to do locking across multiple databases.</p>
+<p>The other two flags, <a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a> and <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a>, were
+specified to the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method in previous releases. In
+the 3.2 release, they have been moved to the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method
because this allows the database environment's value to be toggled
during the life of the application as well as because it is a more
appropriate place for them. Applications specifying either the
-<a href="../../api_c/env_open.html#DB_NOMMAP">DB_NOMMAP</a> or <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flags to the
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a> function should replace those flags with calls to the
-<a href="../../api_c/env_set_flags.html">DBENV-&gt;set_flags</a> function.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/callback.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_set_flags.html#DB_NOMMAP">DB_NOMMAP</a> or <a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flags to the
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method should replace those flags with calls to the
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/callback.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/toc.html b/db/docs/ref/upgrade.3.2/toc.html
index 8a466d1b4..4061b87a3 100644
--- a/db/docs/ref/upgrade.3.2/toc.html
+++ b/db/docs/ref/upgrade.3.2/toc.html
@@ -1,27 +1,35 @@
-<!--$Id: toc.so,v 1.7 2000/12/07 15:59:23 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 1.10 2001/06/09 14:34:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Upgrading Berkeley DB 3.1.X applications to Berkeley DB 3.2</title>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 3.1.X applications to Berkeley DB 3.2</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Upgrading Berkeley DB 3.1.X applications to Berkeley DB 3.2</h1>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 3.1.X applications to Berkeley DB 3.2</h3>
<ol>
-<li><a href="intro.html">Release 3.2: introduction</a>
-<li><a href="set_flags.html">Release 3.2: DBENV-&gt;set_flags</a>
+<p><li><a href="intro.html">Release 3.2: introduction</a>
+<li><a href="set_flags.html">Release 3.2: DB_ENV-&gt;set_flags</a>
<li><a href="callback.html">Release 3.2: DB callback functions, app_private field</a>
<li><a href="renumber.html">Release 3.2: logically renumbering records</a>
<li><a href="incomplete.html">Release 3.2: DB_INCOMPLETE</a>
-<li><a href="tx_recover.html">Release 3.2: DBENV-&gt;set_tx_recover</a>
-<li><a href="mutexlock.html">Release 3.2: DBENV-&gt;set_mutexlocks</a>
-<li><a href="handle.html">Release 3.2: Java and C++ object re-use</a>
+<li><a href="tx_recover.html">Release 3.2: DB_ENV-&gt;set_tx_recover</a>
+<li><a href="mutexlock.html">Release 3.2: DB_ENV-&gt;set_mutexlocks</a>
+<li><a href="handle.html">Release 3.2: Java and C++ object reuse</a>
<li><a href="notfound.html">Release 3.2: Java java.io.FileNotFoundException</a>
<li><a href="db_dump.html">Release 3.2: db_dump</a>
<li><a href="disk.html">Release 3.2: upgrade requirements</a>
</ol>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.2/tx_recover.html b/db/docs/ref/upgrade.3.2/tx_recover.html
index c5cf18ebc..6d1c2dee0 100644
--- a/db/docs/ref/upgrade.3.2/tx_recover.html
+++ b/db/docs/ref/upgrade.3.2/tx_recover.html
@@ -1,32 +1,33 @@
-<!--$Id: tx_recover.so,v 1.11 2000/12/07 15:59:23 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: tx_recover.so,v 1.14 2002/02/23 20:05:28 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.2: DBENV-&gt;set_tx_recover</title>
+<title>Berkeley DB Reference Guide: Release 3.2: DB_ENV-&gt;set_tx_recover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/upgrade.3.2/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/mutexlock.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/mutexlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.2: DBENV-&gt;set_tx_recover</h1>
+<h3 align=center>Release 3.2: DB_ENV-&gt;set_tx_recover</h3>
<p>The <b>info</b> parameter of the function passed to
-<a href="../../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a> is no longer needed. If your application
-calls <a href="../../api_c/env_set_tx_recover.html">DBENV-&gt;set_tx_recover</a>, find the callback function referenced
-in that call and remove the <b>info</b> parameter.
+DB_ENV-&gt;set_tx_recover is no longer needed. If your application
+calls DB_ENV-&gt;set_tx_recover, find the callback function referred
+to by that call and remove the <b>info</b> parameter.</p>
<p>In addition, the called function no longer needs to handle Berkeley DB log
records, Berkeley DB will handle them internally as well as call the
application-specified function. Any handling of Berkeley DB log records in the
-application's callback function may be removed.
+application's callback function may be removed.</p>
<p>In addition, the callback function will no longer be called with the
-<a href="../../api_c/env_set_tx_recover.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> flag specified unless the transaction
-enclosing the operation successfully committed.
-<table><tr><td><br></td><td width="1%"><a href="../../ref/upgrade.3.2/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.2/mutexlock.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> flag specified unless the transaction
+enclosing the operation successfully committed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.2/mutexlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/alloc.html b/db/docs/ref/upgrade.3.3/alloc.html
index c01fc4de7..679d235c6 100644
--- a/db/docs/ref/upgrade.3.3/alloc.html
+++ b/db/docs/ref/upgrade.3.3/alloc.html
@@ -1,62 +1,66 @@
-<!--Id: alloc.so,v 1.3 2001/04/19 01:35:04 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: alloc.so,v 1.11 2003/10/18 19:16:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: DB-&gt;set_malloc, DB-&gt;set_realloc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/getswap.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/conflict.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: DB-&gt;set_malloc, DB-&gt;set_realloc</h1>
-<p>There are two new interfaces in the Berkeley DB 3.3 release:
-<a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a> and <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>. These functions
+<h3 align=center>Release 3.3: DB-&gt;set_malloc, DB-&gt;set_realloc</h3>
+<p>There are two new methods in the Berkeley DB 3.3 release:
+<a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a> and <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>. These functions
allow applications to specify a set of allocation functions for the
Berkeley DB library to use when allocating memory to be owned by the
-application and when freeing memory that was originally allocated by
-the application.
-<p>The new interfaces affect or replace the following historic
-interfaces:
+application and when freeing memory that was originally allocated by the
+application.</p>
+<p>The new methods affect or replace the following historic methods:</p>
<p><dl compact>
-<p><dt>DB-&gt;set_malloc<dd>The DB-&gt;set_malloc interface has been replaced in its entirety.
-Applications using this interface should replace the call with a call
+<p><dt>DB-&gt;set_malloc<dd>The DB-&gt;set_malloc method has been replaced in its entirety.
+Applications using this method should replace the call with a call
to <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>.
-<p><dt>DB-&gt;set_realloc<dd>The DB-&gt;set_realloc interface has been replaced in its entirety.
-Applications using this interface should replace the call with a call
+<p><dt>DB-&gt;set_realloc<dd>The DB-&gt;set_realloc method has been replaced in its entirety.
+Applications using this method should replace the call with a call
to <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/db_stat.html">DB-&gt;stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> function has
-been replaced. Applications using this interface should do as follows:
+<p><dt><a href="../../api_c/db_stat.html">DB-&gt;stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method has
+been replaced. Applications using this method should do as follows:
if the argument is NULL, it should simply be removed. If non-NULL,
it should be replaced with a call to <a href="../../api_c/db_set_alloc.html">DB-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/lock_stat.html">lock_stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/lock_stat.html">lock_stat</a> function has
-been replaced. Applications using this interface should do as follows:
+<p><dt>lock_stat<dd>The historic <b>db_malloc</b> argument to the lock_stat function has
+been replaced. Applications using this function should do as follows:
if the argument is NULL, it should simply be removed. If
-non-NULL, it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/log_archive.html">log_archive</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/log_archive.html">log_archive</a> function has
-been replaced. Applications using this interface should do as follows:
+non-NULL, it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>.
+<p><dt>log_archive<dd>The historic <b>db_malloc</b> argument to the log_archive function has
+been replaced. Applications using this function should do as follows:
if the argument is NULL, it should simply be removed. If non-NULL,
-it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/log_stat.html">log_stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/log_stat.html">log_stat</a> function has
-been replaced. Applications using this interface should do as follows:
+it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>.
+<p><dt>log_stat<dd>The historic <b>db_malloc</b> argument to the log_stat function has
+been replaced. Applications using this function should do as follows:
if the argument is NULL, it should simply be removed. If non-NULL,
-it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/memp_stat.html">memp_stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/memp_stat.html">memp_stat</a> function has
-been replaced. Applications using this interface should do as follows:
+it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>.
+<p><dt>memp_stat<dd>The historic <b>db_malloc</b> argument to the memp_stat function has
+been replaced. Applications using this function should do as follows:
if the argument is NULL, it should simply be removed. If non-NULL,
-it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>.
-<p><dt><a href="../../api_c/txn_stat.html">txn_stat</a><dd>The historic <b>db_malloc</b> argument to the <a href="../../api_c/txn_stat.html">txn_stat</a> function has
-been replaced. Applications using this interface should do as follows:
+it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>.
+<p><dt>txn_stat<dd>The historic <b>db_malloc</b> argument to the txn_stat function has
+been replaced. Applications using this function should do as follows:
if the argument is NULL, it should simply be removed. If non-NULL,
-it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DBENV-&gt;set_alloc</a>.
+it should be replaced with a call to <a href="../../api_c/env_set_alloc.html">DB_ENV-&gt;set_alloc</a>.
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>One potential incompatibility for historic applications is that the
+allocation functions for a database environment must now be set before
+the environment is opened. Historically, Berkeley DB applications could open
+the environment first, and subsequently call the DB-&gt;set_malloc
+and DB-&gt;set_realloc methods; that use is no longer supported.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/getswap.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/conflict.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/bigfile.html b/db/docs/ref/upgrade.3.3/bigfile.html
index 29b018ed5..d4d0fe4d2 100644
--- a/db/docs/ref/upgrade.3.3/bigfile.html
+++ b/db/docs/ref/upgrade.3.3/bigfile.html
@@ -1,29 +1,29 @@
-<!--Id: bigfile.so,v 1.2 2001/06/07 19:03:21 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: bigfile.so,v 1.2 2001/06/07 19:03:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: --disable-bigfile</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/shared.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/shared.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: --disable-bigfile</h1>
+<h3 align=center>Release 3.3: --disable-bigfile</h3>
<p>In previous releases, Berkeley DB UNIX used the --disable-bigfile configuration
option for systems that could not, for whatever reason, include large
file support in a particular Berkeley DB configuration. However, large file
support has been integrated into the autoconf configuration tool as of
version 2.50. For that reason, Berkeley DB configuration no longer supports
--disable-bigfile, the autoconf standard --disable-largefile should be
-used instead.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/shared.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+used instead.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/shared.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/conflict.html b/db/docs/ref/upgrade.3.3/conflict.html
index c56d90508..74b12396b 100644
--- a/db/docs/ref/upgrade.3.3/conflict.html
+++ b/db/docs/ref/upgrade.3.3/conflict.html
@@ -1,24 +1,25 @@
-<!--Id: conflict.so,v 1.3 2001/04/24 16:27:53 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: conflict.so,v 1.6 2003/10/18 19:16:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: DB_LOCK_CONFLICT</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/memp_fget.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/alloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/memp_fget.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: DB_LOCK_CONFLICT</h1>
-<p>The DB_LOCK_CONFLICT flag has been removed from the <a href="../../api_c/lock_detect.html">lock_detect</a> function.
+<h3 align=center>Release 3.3: DB_LOCK_CONFLICT</h3>
+<p>The DB_LOCK_CONFLICT flag has been removed from the lock_detect function.
Applications specifying the DB_LOCK_CONFLICT flag should simply replace
-it with a flags argument of 0.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/memp_fget.html"><img src="../../images/next.gif" alt="Next"></a>
+it with a flags argument of 0.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/alloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/memp_fget.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/disk.html b/db/docs/ref/upgrade.3.3/disk.html
index 7ac191798..08fb29936 100644
--- a/db/docs/ref/upgrade.3.3/disk.html
+++ b/db/docs/ref/upgrade.3.3/disk.html
@@ -1,24 +1,25 @@
-<!--Id: disk.so,v 1.1 2001/03/28 13:55:10 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: disk.so,v 1.3 2001/07/18 02:28:22 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/bigfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: upgrade requirements</h1>
-<p>No database formats or log file formats changed in the Berkeley DB 3.3 release.
+<h3 align=center>Release 3.3: upgrade requirements</h3>
+<p>No database formats or log file formats changed in the Berkeley DB 3.3 release.</p>
<p>For further information on upgrading Berkeley DB installations, see
-<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/bigfile.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/getswap.html b/db/docs/ref/upgrade.3.3/getswap.html
index ac0f2880a..ebba0ae11 100644
--- a/db/docs/ref/upgrade.3.3/getswap.html
+++ b/db/docs/ref/upgrade.3.3/getswap.html
@@ -1,29 +1,29 @@
-<!--Id: getswap.so,v 1.1 2001/06/07 19:00:21 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: getswap.so,v 1.1 2001/06/07 19:00:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: DB-&gt;get_byteswapped</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/gettype.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/gettype.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: DB-&gt;get_byteswapped</h1>
+<h3 align=center>Release 3.3: DB-&gt;get_byteswapped</h3>
<p>The <a href="../../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a> method method can return an error in the Berkeley DB
3.3 release, and so requires an interface change. C and C++
applications calling <a href="../../api_c/db_get_byteswapped.html">DB-&gt;get_byteswapped</a> should be changed to
treat the method's return as an error code, and to pass an additional
second argument of type <b>int *</b> to the method. The additional
argument is used as a memory location in which to store the requested
-information.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/gettype.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/gettype.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/gettype.html b/db/docs/ref/upgrade.3.3/gettype.html
index 8776d3fe2..589300ffb 100644
--- a/db/docs/ref/upgrade.3.3/gettype.html
+++ b/db/docs/ref/upgrade.3.3/gettype.html
@@ -1,28 +1,28 @@
-<!--Id: gettype.so,v 1.1 2001/06/07 19:00:21 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: gettype.so,v 1.1 2001/06/07 19:00:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: DB-&gt;get_type</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/getswap.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/getswap.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: DB-&gt;get_type</h1>
+<h3 align=center>Release 3.3: DB-&gt;get_type</h3>
<p>The <a href="../../api_c/db_get_type.html">DB-&gt;get_type</a> method method can return an error in the Berkeley DB 3.3
release, and so requires an interface change. C and C++ applications
calling <a href="../../api_c/db_get_type.html">DB-&gt;get_type</a> should be changed to treat the method's
return as an error code, and to pass an additional second argument of
type <b>DBTYPE *</b> to the method. The additional argument is used
-as a memory location in which to store the requested information.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/getswap.html"><img src="../../images/next.gif" alt="Next"></a>
+as a memory location in which to store the requested information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/getswap.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/intro.html b/db/docs/ref/upgrade.3.3/intro.html
index a7c8272e0..c71738917 100644
--- a/db/docs/ref/upgrade.3.3/intro.html
+++ b/db/docs/ref/upgrade.3.3/intro.html
@@ -1,26 +1,27 @@
-<!--Id: intro.so,v 1.2 2001/04/03 16:27:59 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.3 2001/06/06 18:35:58 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: introduction</h1>
+<h3 align=center>Release 3.3: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 3.2 release interfaces to the Berkeley DB 3.3 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.2/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/memp_fget.html b/db/docs/ref/upgrade.3.3/memp_fget.html
index 9931745eb..0ca1622a8 100644
--- a/db/docs/ref/upgrade.3.3/memp_fget.html
+++ b/db/docs/ref/upgrade.3.3/memp_fget.html
@@ -1,36 +1,37 @@
-<!--Id: memp_fget.so,v 1.3 2001/04/29 15:51:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: memp_fget.so,v 1.5 2003/10/18 19:16:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: memp_fget, EIO</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/conflict.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/conflict.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/txn_prepare.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: memp_fget, EIO</h1>
+<h3 align=center>Release 3.3: memp_fget, EIO</h3>
<p>Previous releases of Berkeley DB returned the system error EIO when the
-<a href="../../api_c/memp_fget.html">memp_fget</a> interface was called to retrieve a page, the page did
-not exist, and the <a href="../../api_c/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a> flag was not set. In the
-3.3 release, the error <a href="../../api_c/memp_fget.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</a> is returned instead, to
+memp_fget function was called to retrieve a page, the page did not
+exist, and the <a href="../../api_c/memp_fget.html#DB_MPOOL_CREATE">DB_MPOOL_CREATE</a> flag was not set. In the 3.3
+release, the error <a href="../../api_c/memp_fget.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</a> is returned instead, to
allow applications to distinguish between recoverable and
-non-recoverable errors. Applications calling the <a href="../../api_c/memp_fget.html">memp_fget</a>
-interface and checking for a return of EIO should check for
-<a href="../../api_c/memp_fget.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</a> instead.
+non-recoverable errors. Applications calling the memp_fget function
+and checking for a return of EIO should check for
+<a href="../../api_c/memp_fget.html#DB_PAGE_NOTFOUND">DB_PAGE_NOTFOUND</a> instead.</p>
<p>Previous releases of Berkeley DB treated filesystem I/O failure (the most
common of which the filesystem running out of space), as a fatal error,
returning <a href="../../ref/program/errorret.html#DB_RUNRECOVERY">DB_RUNRECOVERY</a>. When a filesystem failure happens in
the 3.3 release Berkeley DB returns the underlying system error (usually EIO),
but can continue to run. Applications should abort any enclosing
transaction when a recoverable system error occurs in order to recover
-from the error.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/conflict.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/next.gif" alt="Next"></a>
+from the error.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/conflict.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/txn_prepare.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/rpc.html b/db/docs/ref/upgrade.3.3/rpc.html
index 23c2fee10..6e3a1b7eb 100644
--- a/db/docs/ref/upgrade.3.3/rpc.html
+++ b/db/docs/ref/upgrade.3.3/rpc.html
@@ -1,28 +1,29 @@
-<!--Id: rpc.so,v 1.1 2001/04/21 19:36:10 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: rpc.so,v 1.4 2003/10/18 19:16:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Release 3.3: DBENV-&gt;set_server</title>
+<title>Berkeley DB Reference Guide: Release 3.3: DB_ENV-&gt;set_server</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/conflict.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/gettype.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: DBENV-&gt;set_server</h1>
-<p>The DBENV-&gt;set_server interface has been deprecated and replaced
-with the <a href="../../api_c/env_set_rpc_server.html">DBENV-&gt;set_rpc_server</a> function. The DBENV-&gt;set_server
-interface will be removed in a future release, and so applications using
-it should convert. The DBENV-&gt;set_server interface can be easily
-converted to the <a href="../../api_c/env_set_rpc_server.html">DBENV-&gt;set_rpc_server</a> function by changing the name,
+<h3 align=center>Release 3.3: DB_ENV-&gt;set_server</h3>
+<p>The DB_ENV-&gt;set_server method has been deprecated and replaced
+with the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method. The DB_ENV-&gt;set_server
+method will be removed in a future release, and so applications using
+it should convert. The DB_ENV-&gt;set_server method can be easily
+converted to the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method by changing the name,
and specifying a NULL for the added argument, second in the argument
-list.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/alloc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/conflict.html"><img src="../../images/next.gif" alt="Next"></a>
+list.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/gettype.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/shared.html b/db/docs/ref/upgrade.3.3/shared.html
index 48fc16a9c..662598f80 100644
--- a/db/docs/ref/upgrade.3.3/shared.html
+++ b/db/docs/ref/upgrade.3.3/shared.html
@@ -1,20 +1,20 @@
-<!--Id: shared.so,v 1.2 2001/07/10 13:16:34 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: shared.so,v 1.2 2001/07/10 13:16:34 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: --enable-dynamic, --enable-shared</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/bigfile.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/bigfile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: --enable-dynamic, --enable-shared</h1>
+<h3 align=center>Release 3.3: --enable-dynamic, --enable-shared</h3>
<p>In previous releases, Berkeley DB required separate configuration and builds
to create both static and shared libraries. This has changed in the
3.3 release, and Berkeley DB now builds and installs both shared and static
@@ -23,9 +23,9 @@ Berkeley DB upgrading to release 1.4 of the GNU Project's Libtool distribution.
For this reason, Berkeley DB no longer supports the previous --enable-dynamic
and --enable-shared configuration options. Instead, as Berkeley DB now builds
both static and shared libraries by default, the useful options are
-Libtool's --disable-shared and --disable-static options.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/bigfile.html"><img src="../../images/next.gif" alt="Next"></a>
+Libtool's --disable-shared and --disable-static options.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/txn_prepare.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/bigfile.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/toc.html b/db/docs/ref/upgrade.3.3/toc.html
index ecb874732..6329c4837 100644
--- a/db/docs/ref/upgrade.3.3/toc.html
+++ b/db/docs/ref/upgrade.3.3/toc.html
@@ -1,23 +1,35 @@
-<!--Id: toc.so,v 1.6 2001/04/29 15:51:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 1.11 2001/06/09 14:34:48 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB: Upgrading Berkeley DB 3.2.X applications to Berkeley DB 3.3</title>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 3.2.X applications to Berkeley DB 3.3</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Upgrading Berkeley DB 3.2.X applications to Berkeley DB 3.3</h1>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 3.2.X applications to Berkeley DB 3.3</h3>
<ol>
-<li><a href="intro.html">Release 3.3: introduction</a>
+<p><li><a href="intro.html">Release 3.3: introduction</a>
+<li><a href="rpc.html">Release 3.3: DB_ENV-&gt;set_server</a>
+<li><a href="gettype.html">Release 3.3: DB-&gt;get_type</a>
+<li><a href="getswap.html">Release 3.3: DB-&gt;get_byteswapped</a>
<li><a href="alloc.html">Release 3.3: DB-&gt;set_malloc, DB-&gt;set_realloc</a>
-<li><a href="rpc.html">Release 3.3: DBENV-&gt;set_server</a>
<li><a href="conflict.html">Release 3.3: DB_LOCK_CONFLICT</a>
<li><a href="memp_fget.html">Release 3.3: memp_fget, EIO</a>
<li><a href="txn_prepare.html">Release 3.3: txn_prepare</a>
+<li><a href="shared.html">Release 3.3: --enable-dynamic, --enable-shared</a>
+<li><a href="bigfile.html">Release 3.3: --disable-bigfile</a>
<li><a href="disk.html">Release 3.3: upgrade requirements</a>
</ol>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.3.3/txn_prepare.html b/db/docs/ref/upgrade.3.3/txn_prepare.html
index 5fe3cd07e..fa6bfe4e7 100644
--- a/db/docs/ref/upgrade.3.3/txn_prepare.html
+++ b/db/docs/ref/upgrade.3.3/txn_prepare.html
@@ -1,26 +1,27 @@
-<!--Id: txn_prepare.so,v 1.5 2001/04/24 16:27:54 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: txn_prepare.so,v 1.9 2003/10/18 19:16:18 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 3.3: txn_prepare</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/memp_fget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/memp_fget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/shared.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 3.3: txn_prepare</h1>
-<p>An additional argument has been added to the <a href="../../api_c/txn_prepare.html">txn_prepare</a> function. If
-your application calls the <a href="../../api_c/txn_prepare.html">txn_prepare</a> interface (that is, is
-performing two-phase commit using Berkeley DB as a local resource manager),
-see <a href="../../ref/xa/intro.html">Distributed Transactions</a> for more
-information.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/memp_fget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 3.3: txn_prepare</h3>
+<p>An additional argument has been added to the txn_prepare function. If
+your application calls txn_prepare (that is, is performing two-phase
+commit using Berkeley DB as a local resource manager), see
+<a href="../../ref/xa/intro.html">Distributed Transactions</a> for more
+information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/memp_fget.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.3.3/shared.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/asr.html b/db/docs/ref/upgrade.4.0/asr.html
index 78db8a1e4..2e230f151 100644
--- a/db/docs/ref/upgrade.4.0/asr.html
+++ b/db/docs/ref/upgrade.4.0/asr.html
@@ -1,40 +1,40 @@
-<!--Id: asr.so,v 1.2 2001/11/14 02:27:11 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: asr.so,v 1.2 2001/11/14 02:27:11 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: application-specific recovery</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: application-specific recovery</h1>
+<h3 align=center>Release 4.0: application-specific recovery</h3>
<p>If you have created your own logging and recovery routines, you may need
-to upgrade them to the Berkeley DB 4.0 release.
+to upgrade them to the Berkeley DB 4.0 release.</p>
<p>First, you should regenerate your logging, print, read and the other
automatically generated routines, using the dist/gen_rec.awk tool
-included in the Berkeley DB distribution.
+included in the Berkeley DB distribution.</p>
<p>Next, compare the template file code generated by the gen_rec.awk tool
against the code generated by the last release in which you built a
template file. Any changes in the templates should be incorporated into
-the recovery routines you have written.
+the recovery routines you have written.</p>
<p>Third, if your recovery functions refer to <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a>
(that is, your code checks for that particular operation code), you
should replace it with DB_REDO(op) which compares the operation code to
both <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_FORWARD_ROLL">DB_TXN_FORWARD_ROLL</a> and <a href="../../api_c/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a>.
(<a href="../../api_c/env_set_app_dispatch.html#DB_TXN_APPLY">DB_TXN_APPLY</a> is a potential value for the operation code as of
-the 4.0 release.)
+the 4.0 release.)</p>
<p>Finally, if you have created your own logging and recovery routines, we
recommend that you contact Sleepycat support and ask us to review those
-routines for you.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+routines for you.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/cxx.html b/db/docs/ref/upgrade.4.0/cxx.html
index d077cf8d1..3ca038d8e 100644
--- a/db/docs/ref/upgrade.4.0/cxx.html
+++ b/db/docs/ref/upgrade.4.0/cxx.html
@@ -1,40 +1,40 @@
-<!--Id: cxx.so,v 1.2 2001/11/16 16:49:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: cxx.so,v 1.2 2001/11/16 16:49:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: C++ ostream objects</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/asr.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/asr.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: C++ ostream objects</h1>
+<h3 align=center>Release 4.0: C++ ostream objects</h3>
<p>In the 4.0 release, the Berkeley DB C++ API has been changed to use the ISO
standard C++ API in preference to the older, less portable interfaces,
where available. This means the Berkeley DB methods that used to take an
ostream object as a parameter now expect a std::ostream. Specifically,
-the following methods have changed:
-<p><blockquote><pre>DbEnv::set_error_stream
+the following methods have changed:</p>
+<blockquote><pre>DbEnv::set_error_stream
Db::set_error_stream
Db::verify</pre></blockquote>
<p>On many platforms, the old and the new C++ styles are interchangeable;
on some platforms (notably Win32), they are incompatible. If your code
uses these methods and you have trouble with the 4.0 release, you should
-update code that looks like this:
-<p><blockquote><pre>#include &lt;iostream.h&gt;
+update code that looks like this:</p>
+<blockquote><pre>#include &lt;iostream.h&gt;
#include &lt;db_cxx.h&gt;
<p>
void foo(Db db) {
db.set_error_stream(&cerr);
}</pre></blockquote>
-<p>to look like this:
-<p><blockquote><pre>#include &lt;iostream&gt;
+<p>to look like this:</p>
+<blockquote><pre>#include &lt;iostream&gt;
#include &lt;db_cxx.h&gt;
<p>
using std::cerr;
@@ -42,8 +42,8 @@ using std::cerr;
void foo(Db db) {
db.set_error_stream(&cerr);
}</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/asr.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/asr.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/deadlock.html b/db/docs/ref/upgrade.4.0/deadlock.html
index 2c12a9a77..8df9c1c5d 100644
--- a/db/docs/ref/upgrade.4.0/deadlock.html
+++ b/db/docs/ref/upgrade.4.0/deadlock.html
@@ -1,26 +1,26 @@
-<!--Id: deadlock.so,v 1.1 2001/09/07 16:55:56 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: deadlock.so,v 1.1 2001/09/07 16:55:56 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: db_deadlock</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/lock.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/lock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: db_deadlock</h1>
+<h3 align=center>Release 4.0: db_deadlock</h3>
<p>The <b>-w</b> option to the <a href="../../utility/db_deadlock.html">db_deadlock</a> utility has been
deprecated. Applications can get the functionality of the <b>-w</b>
option by using the <b>-t</b> option with an argument of
-<b>.100000</b>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/lock.html"><img src="../../images/next.gif" alt="Next"></a>
+<b>.100000</b>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/lock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/disk.html b/db/docs/ref/upgrade.4.0/disk.html
index eba0d30cb..5ab14f49c 100644
--- a/db/docs/ref/upgrade.4.0/disk.html
+++ b/db/docs/ref/upgrade.4.0/disk.html
@@ -1,26 +1,26 @@
-<!--Id: disk.so,v 1.11 2001/12/10 15:14:06 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: disk.so,v 1.11 2001/12/10 15:14:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/asr.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/asr.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: upgrade requirements</h1>
+<h3 align=center>Release 4.0: upgrade requirements</h3>
<p>The log file format changed in the Berkeley DB 4.0 release. No database
-formats changed in the Berkeley DB 4.0 release.
+formats changed in the Berkeley DB 4.0 release.</p>
<p>For further information on upgrading Berkeley DB installations, see
-<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/asr.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/asr.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/env.html b/db/docs/ref/upgrade.4.0/env.html
index 0eea01495..c887aba3b 100644
--- a/db/docs/ref/upgrade.4.0/env.html
+++ b/db/docs/ref/upgrade.4.0/env.html
@@ -1,82 +1,80 @@
-<!--Id: env.so,v 1.5 2001/08/07 01:42:35 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: env.so,v 1.6 2003/10/18 19:16:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: db_env_set_XXX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/txn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/txn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: db_env_set_XXX</h1>
-<p>The db_env_set_region_init interface was removed in the 4.0 release and
+<h3 align=center>Release 4.0: db_env_set_XXX</h3>
+<p>The db_env_set_region_init function was removed in the 4.0 release and
replaced with the <a href="../../api_c/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a> flag to the
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> interface. This is an interface change:
-historically, the db_env_set_region_init interface operated on the
-entire Berkeley DB library, not a single environment. The new interface only
-operates on a single <a href="../../api_c/env_class.html">DB_ENV</a> handle (and any handles created in
-the scope of that handle). Applications calling the
-db_env_set_region_init interface should update their calls: calls to
-the historic routine with an argument of 1 (0) are equivalent to calling
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> with the <a href="../../api_c/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a> flag and an
-argument of 1 (0).
-<p>The db_env_set_tas_spins interface was removed in the 4.0 release and
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. This is an interface change: historically,
+the db_env_set_region_init function operated on the entire Berkeley DB
+library, not a single environment. The new method only operates on
+a single <a href="../../api_c/env_class.html">DB_ENV</a> handle (and any handles created in the scope of
+that handle). Applications calling the db_env_set_region_init function
+should update their calls: calls to the historic routine with an
+argument of 1 (0) are equivalent to calling <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> with
+the <a href="../../api_c/env_set_flags.html#DB_REGION_INIT">DB_REGION_INIT</a> flag and an argument of 1 (0).</p>
+<p>The db_env_set_tas_spins function was removed in the 4.0 release and
replaced with the <a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a> method. This is an interface
-change: historically, the db_env_set_tas_spins interface operated on
-the entire Berkeley DB library, not a single environment. The new interface
+change: historically, the db_env_set_tas_spins function operated on
+the entire Berkeley DB library, not a single environment. The new method
only operates on a single <a href="../../api_c/env_class.html">DB_ENV</a> handle (and any handles created
in the scope of that handle). Applications calling the
-db_env_set_tas_spins interface should update their calls: calls to the
+db_env_set_tas_spins function should update their calls: calls to the
historic routine are equivalent to calling <a href="../../api_c/env_set_tas_spins.html">DB_ENV-&gt;set_tas_spins</a> method
with the same argument. In addition, for consistent behavior, all
<a href="../../api_c/env_class.html">DB_ENV</a> handles opened by the application should make the same
configuration call, or the value will need to be entered into the
-environment's <b>DB_CONFIG</b> file.
+environment's <b>DB_CONFIG</b> file.</p>
<p>Also, three of the standard Berkeley DB debugging interfaces changed in the
4.0 release. It is quite unlikely that Berkeley DB applications use these
-interfaces.
-<p>The DB_ENV-&gt;set_mutexlocks interface was removed in the 4.0 release
+interfaces.</p>
+<p>The DB_ENV-&gt;set_mutexlocks method was removed in the 4.0 release
and replaced with the <a href="../../api_c/env_set_flags.html#DB_NOLOCKING">DB_NOLOCKING</a> flag to the
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> interface. Applications calling the
-DB_ENV-&gt;set_mutexlocks interface should update their calls: calls
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. Applications calling the
+DB_ENV-&gt;set_mutexlocks method should update their calls: calls
to the historic routine with an argument of 1 (0) are equivalent to
calling <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> with the <a href="../../api_c/env_set_flags.html#DB_NOLOCKING">DB_NOLOCKING</a> flag and
-an argument of 1 (0).
-<p>The db_env_set_pageyield interface was removed in the 4.0 release and
+an argument of 1 (0).</p>
+<p>The db_env_set_pageyield function was removed in the 4.0 release and
replaced with the <a href="../../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a> flag to the
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> interface. This is an interface change:
-historically, the db_env_set_pageyield interface operated on the entire
-Berkeley DB library, not a single environment. The new interface only
-operates on a single <a href="../../api_c/env_class.html">DB_ENV</a> handle (and any handles created in
-the scope of that handle). Applications calling the
-db_env_set_pageyield interface should update their calls: calls to the
-historic routine with an argument of 1 (0) are equivalent to calling
-<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> with the <a href="../../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a> flag and an
-argument of 1 (0). In addition, all <a href="../../api_c/env_class.html">DB_ENV</a> handles opened by
-the application will need to make the same call, or the
-<a href="../../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a> flag will need to be entered into the environment's
-<b>DB_CONFIG</b> file.
-<p>The db_env_set_panicstate interface was removed in the 4.0 release,
+<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. This is an interface change: historically,
+the db_env_set_pageyield function operated on the entire Berkeley DB library,
+not a single environment. The new method only operates on a single
+<a href="../../api_c/env_class.html">DB_ENV</a> handle (and any handles created in the scope of that
+handle). Applications calling the db_env_set_pageyield function should
+update their calls: calls to the historic routine with an argument of 1
+(0) are equivalent to calling <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> with the
+<a href="../../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a> flag and an argument of 1 (0). In addition, all
+<a href="../../api_c/env_class.html">DB_ENV</a> handles opened by the application will need to make the
+same call, or the <a href="../../api_c/env_set_flags.html#DB_YIELDCPU">DB_YIELDCPU</a> flag will need to be entered into
+the environment's <b>DB_CONFIG</b> file.</p>
+<p>The db_env_set_panicstate function was removed in the 4.0 release,
replaced with the <a href="../../api_c/env_set_flags.html#DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a> and <a href="../../api_c/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a>
-flags to the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> interface. (The
+flags to the <a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> method. (The
<a href="../../api_c/env_set_flags.html#DB_PANIC_ENVIRONMENT">DB_PANIC_ENVIRONMENT</a> flag will cause an environment to panic,
affecting all threads of control using that environment. The
<a href="../../api_c/env_set_flags.html#DB_NOPANIC">DB_NOPANIC</a> flag will cause a single <a href="../../api_c/env_class.html">DB_ENV</a> handle to
ignore the current panic state of the environment.) This is an
-interface change: historically the db_env_set_panicstate interface
+interface change: historically the db_env_set_panicstate function
operated on the entire Berkeley DB library, not a single environment.
-Applications calling the db_env_set_panicstate interface should update
+Applications calling the db_env_set_panicstate function should update
their calls, replacing the historic call with a call to
<a href="../../api_c/env_set_flags.html">DB_ENV-&gt;set_flags</a> and the appropriate flag, depending on their
-usage of the historic interface.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/txn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
+usage of the historic interface.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/txn.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/rpc.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/intro.html b/db/docs/ref/upgrade.4.0/intro.html
index edd2bf9bb..434f65b7c 100644
--- a/db/docs/ref/upgrade.4.0/intro.html
+++ b/db/docs/ref/upgrade.4.0/intro.html
@@ -1,27 +1,27 @@
-<!--Id: intro.so,v 1.5 2001/09/28 15:10:29 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.5 2001/09/28 15:10:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.3.3/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: introduction</h1>
+<h3 align=center>Release 4.0: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 3.3 release interfaces to the Berkeley DB 4.0 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.3.3/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.3.3/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/deadlock.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/java.html b/db/docs/ref/upgrade.4.0/java.html
index 74ec217fd..45bf27d84 100644
--- a/db/docs/ref/upgrade.4.0/java.html
+++ b/db/docs/ref/upgrade.4.0/java.html
@@ -1,33 +1,33 @@
-<!--Id: java.so,v 1.6 2001/11/14 02:27:12 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 1.6 2001/11/14 02:27:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: Java CLASSPATH environment variable</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/lock_id_free.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/lock_id_free.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: Java CLASSPATH environment variable</h1>
+<h3 align=center>Release 4.0: Java CLASSPATH environment variable</h3>
<p>The Berkeley DB Java class files are now packaged as jar files. In the 4.0
release, the <b>CLASSPATH</b> environment variable must change to
include at least the <b>db.jar</b> file. It can optionally include
the <b>dbexamples.jar</b> file if you want to run the examples. For
-example, on UNIX:
-<p><blockquote><pre>export CLASSPATH="/usr/local/BerkeleyDB.4.1/lib/db.jar:/usr/local/BerkeleyDB.4.1/lib/dbexamples.jar"</pre></blockquote>
-<p>For example, on Windows:
-<p><blockquote><pre>set CLASSPATH="D:\db\build_win32\Release\db.jar;D:\db\build_win32\Release\dbexamples.jar"</pre></blockquote>
+example, on UNIX:</p>
+<blockquote><pre>export CLASSPATH="/usr/local/BerkeleyDB.4.2/lib/db.jar:/usr/local/BerkeleyDB.4.2/lib/dbexamples.jar"</pre></blockquote>
+<p>For example, on Windows:</p>
+<blockquote><pre>set CLASSPATH="D:\db\build_win32\Release\db.jar;D:\db\build_win32\Release\dbexamples.jar"</pre></blockquote>
<p>For more information on Java configuration, please see
<a href="../../ref/java/conf.html">Java configuration</a> and
-<a href="../../ref/build_win/intro.html">Building for Win32</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/lock_id_free.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../ref/build_win/intro.html">Building for Win32</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/lock_id_free.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/lock.html b/db/docs/ref/upgrade.4.0/lock.html
index 3394f3784..26b431fc1 100644
--- a/db/docs/ref/upgrade.4.0/lock.html
+++ b/db/docs/ref/upgrade.4.0/lock.html
@@ -1,23 +1,23 @@
-<!--Id: lock.so,v 1.6 2001/09/27 02:25:51 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock.so,v 1.6 2001/09/27 02:25:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: lock_XXX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/log.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/log.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: lock_XXX</h1>
+<h3 align=center>Release 4.0: lock_XXX</h3>
<p>The C API for the Berkeley DB Locking subsystem was reworked in the 4.0
-release as follows:
-<p><table border=1 align=center>
+release as follows:</p>
+<table border=1 align=center>
<tr><th>Historic functional interface</th><th>Berkeley DB 4.X method</th></tr>
<tr><td>lock_detect</td><td><a href="../../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a></td></tr>
<tr><td>lock_get</td><td><a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a></td></tr>
@@ -28,19 +28,19 @@ release as follows:
</table>
<p>Applications calling any of these functions should update their calls
to use the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> handle's method (easily done as the
-first argument to the existing call is the correct handle to use).
+first argument to the existing call is the correct handle to use).</p>
<p>In addition, the <a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a> call has been changed in the 4.0
release to take a flags argument. To leave their historic behavior
unchanged, applications should add a final argument of 0 to any calls
-made to <a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a>.
+made to <a href="../../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a>.</p>
<p>The C++ and Java APIs for the DbLock::put (DbLock.put) method was
reworked in the 4.0 release to make the lock put interface a method of
the <a href="../../api_c/env_class.html">DB_ENV</a> handle rather than the DbLock handle. Applications
calling the DbLock::put or DbLock.put method should update their calls
to use the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> handle's method (easily done as the
-first argument to the existing call is the correct handle to use).
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/log.html"><img src="../../images/next.gif" alt="Next"></a>
+first argument to the existing call is the correct handle to use).</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/deadlock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/log.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/lock_id_free.html b/db/docs/ref/upgrade.4.0/lock_id_free.html
index fd2dfb4ad..f792d72fa 100644
--- a/db/docs/ref/upgrade.4.0/lock_id_free.html
+++ b/db/docs/ref/upgrade.4.0/lock_id_free.html
@@ -1,26 +1,26 @@
-<!--Id: lock_id_free.so,v 1.1 2001/09/25 21:05:24 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: lock_id_free.so,v 1.1 2001/09/25 21:05:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: DB_ENV-&gt;lock_id_free</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/set_lk_max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/set_lk_max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: DB_ENV-&gt;lock_id_free</h1>
+<h3 align=center>Release 4.0: DB_ENV-&gt;lock_id_free</h3>
<p>A new locker ID related API, the <a href="../../api_c/lock_id_free.html">DB_ENV-&gt;lock_id_free</a> method, was added to
Berkeley DB 4.0 release. Applications using the <a href="../../api_c/lock_id.html">DB_ENV-&gt;lock_id</a> method to allocate
locker IDs may want to update their applications to free the locker ID
-when it is no longer needed.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/set_lk_max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
+when it is no longer needed.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/set_lk_max.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/log.html b/db/docs/ref/upgrade.4.0/log.html
index dea35d811..596b5cda9 100644
--- a/db/docs/ref/upgrade.4.0/log.html
+++ b/db/docs/ref/upgrade.4.0/log.html
@@ -1,23 +1,23 @@
-<!--Id: log.so,v 1.4 2001/12/31 21:07:00 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log.so,v 1.5 2003/10/18 19:16:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: log_XXX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/lock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/mp.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/lock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/mp.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: log_XXX</h1>
+<h3 align=center>Release 4.0: log_XXX</h3>
<p>The C API for the Berkeley DB Logging subsystem was reworked in the 4.0
-release as follows:
-<p><table border=1 align=center>
+release as follows:</p>
+<table border=1 align=center>
<tr><th>Historic functional interface</th><th>Berkeley DB 4.X method</th></tr>
<tr><td>log_archive</td><td><a href="../../api_c/log_archive.html">DB_ENV-&gt;log_archive</a></td></tr>
<tr><td>log_file</td><td><a href="../../api_c/log_file.html">DB_ENV-&gt;log_file</a></td></tr>
@@ -31,8 +31,8 @@ release as follows:
<p>Applications calling any of these functions should update their calls
to use the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> handle's method (in all cases other
than the log_get call, this is easily done as the first argument to the
-existing call is the correct handle to use).
-<p>Application calls to the historic log_get interface must be replaced
+existing call is the correct handle to use).</p>
+<p>Application calls to the historic log_get function must be replaced
with the creation of a log file cursor (a <a href="../../api_c/logc_class.html">DB_LOGC</a> object), using
the <a href="../../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a> method, calls to the <a href="../../api_c/logc_get.html">DB_LOGC-&gt;get</a> method to retrieve log
records and calls to the <a href="../../api_c/logc_close.html">DB_LOGC-&gt;close</a> method to destroy the cursor. It
@@ -44,13 +44,13 @@ had to create an additional, unique environment handle by separately
calling <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> without specifying <a href="../../api_c/env_open.html#DB_THREAD">DB_THREAD</a>. This
is no longer an issue in the log cursor interface, and applications may
be able to remove the now unnecessary creation of the additional
-<a href="../../api_c/env_class.html">DB_ENV</a> object.
+<a href="../../api_c/env_class.html">DB_ENV</a> object.</p>
<p>Finally, the <a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a> call has been changed in the 4.0 release
to take a flags argument. To leave their historic behavior unchanged,
applications should add a final argument of 0 to any calls made to
-<a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/lock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/mp.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/lock.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/mp.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/mp.html b/db/docs/ref/upgrade.4.0/mp.html
index 01d09b3f4..093f3e6e5 100644
--- a/db/docs/ref/upgrade.4.0/mp.html
+++ b/db/docs/ref/upgrade.4.0/mp.html
@@ -1,23 +1,23 @@
-<!--Id: mp.so,v 1.2 2001/09/27 02:25:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: mp.so,v 1.3 2003/10/18 19:16:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: memp_XXX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/log.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/txn.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/log.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/txn.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: memp_XXX</h1>
+<h3 align=center>Release 4.0: memp_XXX</h3>
<p>The C API for the Berkeley DB Memory Pool subsystem was reworked in the 4.0
-release as follows:
-<p><table border=1 align=center>
+release as follows:</p>
+<table border=1 align=center>
<tr><th>Historic functional interface</th><th>Berkeley DB 4.X method</th></tr>
<tr><td>memp_register</td><td><a href="../../api_c/memp_register.html">DB_ENV-&gt;memp_register</a></td></tr>
<tr><td>memp_stat</td><td><a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a></td></tr>
@@ -36,31 +36,31 @@ release as follows:
<tr><td>memp_fsync</td><td><a href="../../api_c/memp_fsync.html">DB_MPOOLFILE-&gt;sync</a></td></tr>
</table>
<p>Applications calling any of the memp_register, memp_stat, memp_sync or
-memp_trickle interfaces should update those calls to use the enclosing
+memp_trickle functions should update those calls to use the enclosing
<a href="../../api_c/env_class.html">DB_ENV</a> handle's method (easily done as the first argument to the
-existing call is the correct <a href="../../api_c/env_class.html">DB_ENV</a> handle).
+existing call is the correct <a href="../../api_c/env_class.html">DB_ENV</a> handle).</p>
<p>In addition, the <a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a> call has been changed in the 4.0
release to take a flags argument. To leave their historic behavior
unchanged, applications should add a final argument of 0 to any calls
-made to <a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a>.
-<p>Applications calling the memp_fopen interface should update those calls
+made to <a href="../../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a>.</p>
+<p>Applications calling the memp_fopen function should update those calls
as follows: First, acquire a <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle using the
<a href="../../api_c/memp_fcreate.html">DB_ENV-&gt;memp_fcreate</a> method. Second, if the DB_MPOOL_FINFO structure
-reference passed to the memp_fopen interface was non-NULL, call the
+reference passed to the memp_fopen function was non-NULL, call the
<a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> method corresponding to each initialized field in
the DB_MPOOL_FINFO structure. Third, call the <a href="../../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method
method to open the underlying file. If the <a href="../../api_c/memp_fopen.html">DB_MPOOLFILE-&gt;open</a> method call
fails, then <a href="../../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method must be called to destroy the allocated
-handle.
+handle.</p>
<p>Applications calling the memp_fopen, memp_fclose, memp_fput, memp_fset,
-or memp_fsync interfaces should update those calls to use the enclosing
+or memp_fsync functions should update those calls to use the enclosing
<a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> handle's method. Again, this is easily done as the
first argument to the existing call is the correct <a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a>
-handle. With one exception, the calling conventions of the old a new
+handle. With one exception, the calling conventions of the old and new
interfaces are identical; the one exception is the <a href="../../api_c/memp_fclose.html">DB_MPOOLFILE-&gt;close</a> method,
-which requires an additional flag parameter that should be set to 0.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/log.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/txn.html"><img src="../../images/next.gif" alt="Next"></a>
+which requires an additional flag parameter that should be set to 0.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/log.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/txn.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/rpc.html b/db/docs/ref/upgrade.4.0/rpc.html
index 09facdc18..0f27cc0ca 100644
--- a/db/docs/ref/upgrade.4.0/rpc.html
+++ b/db/docs/ref/upgrade.4.0/rpc.html
@@ -1,27 +1,27 @@
-<!--Id: rpc.so,v 1.5 2001/07/27 23:18:47 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: rpc.so,v 1.6 2003/10/18 19:16:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: DB_ENV-&gt;set_server</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/set_lk_max.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/set_lk_max.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: DB_ENV-&gt;set_server</h1>
-<p>The DB_ENV-&gt;set_server interface has been replaced with the
-<a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method. The DB_ENV-&gt;set_server interface
-can be easily converted to the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method by changing
-the name, and specifying a NULL for the added argument, second in
-the argument list.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/set_lk_max.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Release 4.0: DB_ENV-&gt;set_server</h3>
+<p>The DB_ENV-&gt;set_server method has been replaced with the
+<a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method. The DB_ENV-&gt;set_server method can
+be easily converted to the <a href="../../api_c/env_set_rpc_server.html">DB_ENV-&gt;set_rpc_server</a> method by changing the
+name, and specifying a NULL for the added argument, second in the
+argument list.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/env.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/set_lk_max.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/set_lk_max.html b/db/docs/ref/upgrade.4.0/set_lk_max.html
index ba08ed694..961b407b9 100644
--- a/db/docs/ref/upgrade.4.0/set_lk_max.html
+++ b/db/docs/ref/upgrade.4.0/set_lk_max.html
@@ -1,27 +1,27 @@
-<!--Id: set_lk_max.so,v 1.3 2001/09/25 21:05:25 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: set_lk_max.so,v 1.4 2003/10/18 19:16:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: DB_ENV-&gt;set_lk_max</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/lock_id_free.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/lock_id_free.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: DB_ENV-&gt;set_lk_max</h1>
-<p>The DB_ENV-&gt;set_lk_max interface has been deprecated in favor of
+<h3 align=center>Release 4.0: DB_ENV-&gt;set_lk_max</h3>
+<p>The DB_ENV-&gt;set_lk_max method has been deprecated in favor of
the <a href="../../api_c/env_set_lk_max_locks.html">DB_ENV-&gt;set_lk_max_locks</a>, <a href="../../api_c/env_set_lk_max_lockers.html">DB_ENV-&gt;set_lk_max_lockers</a>,
and <a href="../../api_c/env_set_lk_max_objects.html">DB_ENV-&gt;set_lk_max_objects</a> methods. The DB_ENV-&gt;set_lk_max
-interface continues to be available, but is no longer documented and
-is expected to be removed in a future release.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/lock_id_free.html"><img src="../../images/next.gif" alt="Next"></a>
+method continues to be available, but is no longer documented and
+is expected to be removed in a future release.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/rpc.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/lock_id_free.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/toc.html b/db/docs/ref/upgrade.4.0/toc.html
index f0c3138ea..93e53eb21 100644
--- a/db/docs/ref/upgrade.4.0/toc.html
+++ b/db/docs/ref/upgrade.4.0/toc.html
@@ -1,21 +1,21 @@
-<!--Id: toc.so,v 1.15 2001/11/14 02:27:12 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 1.15 2001/11/14 02:27:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 3.3.X applications to Berkeley DB 4.0</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<p>
-<h1 align=center>Upgrading Berkeley DB 3.3.X applications to Berkeley DB 4.0</h1>
-<p><ol>
+<h3 align=center>Upgrading Berkeley DB 3.3.X applications to Berkeley DB 4.0</h3>
+<ol>
<p><li><a href="intro.html">Release 4.0: introduction</a>
<li><a href="deadlock.html">Release 4.0: db_deadlock</a>
<li><a href="lock.html">Release 4.0: lock_XXX</a>
@@ -31,8 +31,8 @@
<li><a href="asr.html">Release 4.0: application-specific recovery</a>
<li><a href="disk.html">Release 4.0: upgrade requirements</a>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.0/txn.html b/db/docs/ref/upgrade.4.0/txn.html
index ce06e4c52..a22b6559e 100644
--- a/db/docs/ref/upgrade.4.0/txn.html
+++ b/db/docs/ref/upgrade.4.0/txn.html
@@ -1,23 +1,23 @@
-<!--Id: txn.so,v 1.5 2001/09/27 02:25:52 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: txn.so,v 1.6 2003/10/18 19:16:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.0: txn_XXX</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/mp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/env.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/mp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/env.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.0: txn_XXX</h1>
+<h3 align=center>Release 4.0: txn_XXX</h3>
<p>The C API for the Berkeley DB Transaction subsystem was reworked in the 4.0
-release as follows:
-<p><table border=1 align=center>
+release as follows:</p>
+<table border=1 align=center>
<tr><th>Historic functional interface</th><th>Berkeley DB 4.X method</th></tr>
<tr><td>txn_abort</td><td><a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a></td></tr>
<tr><td>txn_begin</td><td><a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a></td></tr>
@@ -32,16 +32,16 @@ release as follows:
<p>Applications calling any of these functions should update their calls
to use the enclosing <a href="../../api_c/env_class.html">DB_ENV</a> or <a href="../../api_c/txn_class.html">DB_TXN</a> handle's method
(easily done as the first argument to the existing call is the correct
-handle to use).
+handle to use).</p>
<p>As a special case, since applications might potentially have many calls
-to the txn_abort, txn_begin and txn_commit functions, those interfaces
-continue to work unchanged in the Berkeley DB 4.0 release.
+to the txn_abort, txn_begin and txn_commit functions, those functions
+continue to work unchanged in the Berkeley DB 4.0 release.</p>
<p>In addition, the <a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a> call has been changed in the 4.0
release to take a flags argument. To leave their historic behavior
unchanged, applications should add a final argument of 0 to any calls
-made to <a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/mp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.0/env.html"><img src="../../images/next.gif" alt="Next"></a>
+made to <a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/mp.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.0/env.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/app_dispatch.html b/db/docs/ref/upgrade.4.1/app_dispatch.html
index e71a6b11a..5644f7be7 100644
--- a/db/docs/ref/upgrade.4.1/app_dispatch.html
+++ b/db/docs/ref/upgrade.4.1/app_dispatch.html
@@ -1,20 +1,20 @@
-<!--Id: app_dispatch.so,v 1.4 2002/04/04 03:53:10 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: app_dispatch.so,v 1.6 2002/08/26 23:05:28 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: Application-specific logging and recovery</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: Application-specific logging and recovery</h1>
+<h3 align=center>Release 4.1: Application-specific logging and recovery</h3>
<p>The application-specific logging and recovery tools and interfaces have
been reworked in the 4.1 release to make it simpler for applications to
use Berkeley DB to support their own logging and recovery of non-Berkeley DB
@@ -24,9 +24,9 @@ DB_ENV-&gt;set_tx_recover interfaces have been removed, replaced by
removed interfaces should be updated to call
<a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a>. For more information see
<a href="../../ref/apprec/intro.html">"Application-specific logging and
-recovery"</a> and the <a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a> documentation.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+recovery"</a> and the <a href="../../api_c/env_set_app_dispatch.html">DB_ENV-&gt;set_app_dispatch</a> documentation.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/cxx.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/disk.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/checkpoint.html b/db/docs/ref/upgrade.4.1/checkpoint.html
index 4a80ad729..cbd89b9d8 100644
--- a/db/docs/ref/upgrade.4.1/checkpoint.html
+++ b/db/docs/ref/upgrade.4.1/checkpoint.html
@@ -1,30 +1,30 @@
-<!--Id: checkpoint.so,v 1.4 2002/08/12 21:12:06 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: checkpoint.so,v 1.4 2002/08/12 21:12:06 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB_CHECKPOINT, DB_CURLSN</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB_CHECKPOINT, DB_CURLSN</h1>
+<h3 align=center>Release 4.1: DB_CHECKPOINT, DB_CURLSN</h3>
<p>The DB_CHECKPOINT flag has been removed from the <a href="../../api_c/logc_get.html">DB_LOGC-&gt;get</a> and
-<a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a> functions. It is very unlikely application programs used this
+<a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a> methods. It is very unlikely application programs used this
flag. If your application used this flag, please contact Sleepycat
-Software support for help in upgrading.
-<p>The DB_CURLSN flag has been removed from the <a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a> function. It is
+Software support for help in upgrading.</p>
+<p>The DB_CURLSN flag has been removed from the <a href="../../api_c/log_put.html">DB_ENV-&gt;log_put</a> method. It is
very unlikely application programs used this flag. If your application
used this flag, please contact Sleepycat Software support for help in
-upgrading.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
+upgrading.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/log_stat.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/incomplete.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/cxx.html b/db/docs/ref/upgrade.4.1/cxx.html
index 0e6958823..9efc6655d 100644
--- a/db/docs/ref/upgrade.4.1/cxx.html
+++ b/db/docs/ref/upgrade.4.1/cxx.html
@@ -1,36 +1,36 @@
-<!--Id: cxx.so,v 1.3 2002/08/27 02:28:31 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: cxx.so,v 1.3 2002/08/27 02:28:31 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: C++ exceptions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: C++ exceptions</h1>
+<h3 align=center>Release 4.1: C++ exceptions</h3>
<p>With default flags, the C++ <a href="../../api_cxx/env_class.html">DbEnv</a> and <a href="../../api_cxx/db_class.html">Db</a> classes
can throw exceptions from their constructors. For example, this can
happen if invalid parameters are passed in or the underlying C
structures could not be created. If the objects are created in an
environment that is not configured for exceptions (that is, the
<a href="../../api_c/env_class.html#DB_CXX_NO_EXCEPTIONS">DB_CXX_NO_EXCEPTIONS</a> flag is specified), errors from the
-constructor will be returned when the handle's open method is called.
+constructor will be returned when the handle's open method is called.</p>
<p>In addition, the behavior of the <a href="../../api_cxx/env_class.html">DbEnv</a> and <a href="../../api_cxx/db_class.html">Db</a>
destructors has changed to simplify exception handling in applications.
The destructors will now close the handle if the handle's close method
was not called prior to the object being destroyed. The return value
of the call is discarded, and no exceptions will be thrown.
Applications should call the close method in normal situations so any
-errors while closing can be handled by the application.
-<p>This change allows applications to be structured as follows:
-<p><blockquote><pre>try {
+errors while closing can be handled by the application.</p>
+<p>This change allows applications to be structured as follows:</p>
+<blockquote><pre>try {
DbEnv env(0);
env.open(/* ... */);
Db db(&env, 0);
@@ -41,8 +41,8 @@ errors while closing can be handled by the application.
} catch (DbException &dbe) {
// Handle the exception, the handles have already been closed.
}</pre></blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/disk.html b/db/docs/ref/upgrade.4.1/disk.html
index 19289acba..9ef311f4c 100644
--- a/db/docs/ref/upgrade.4.1/disk.html
+++ b/db/docs/ref/upgrade.4.1/disk.html
@@ -1,31 +1,31 @@
-<!--Id: disk.so,v 1.6 2002/05/09 20:36:22 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: disk.so,v 1.7 2002/11/26 04:53:59 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: upgrade requirements</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/app_dispatch.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: upgrade requirements</h1>
+<h3 align=center>Release 4.1: upgrade requirements</h3>
<p>All of the access method database formats changed in the Berkeley DB 4.1
release (Btree/Recno: version 8 to version 9, Hash: version 7 to version
8, and Queue: version 3 to version 4). <b>The format changes are
entirely backward-compatible, and no database upgrades are needed.</b>
Note, however, that databases created using the 4.1 release may not be
-usable with earlier Berkeley DB releases.
-<p>The log file format changed in the Berkeley DB 4.1 release.
+usable with earlier Berkeley DB releases.</p>
+<p>The log file format changed in the Berkeley DB 4.1 release.</p>
<p>For further information on upgrading Berkeley DB installations, see
-<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/app_dispatch.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/excl.html b/db/docs/ref/upgrade.4.1/excl.html
index db0821353..ebdda2c9b 100644
--- a/db/docs/ref/upgrade.4.1/excl.html
+++ b/db/docs/ref/upgrade.4.1/excl.html
@@ -1,26 +1,26 @@
-<!--Id: excl.so,v 1.1 2002/01/16 20:12:08 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: excl.so,v 1.1 2002/01/16 20:12:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB_EXCL</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/fop.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/fop.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB_EXCL</h1>
+<h3 align=center>Release 4.1: DB_EXCL</h3>
<p>The <a href="../../api_c/db_open.html#DB_EXCL">DB_EXCL</a> flag to the <a href="../../api_c/db_open.html">DB-&gt;open</a> method now works for
subdatabases as well as physical files, and it is now possible to use
the <a href="../../api_c/db_open.html#DB_EXCL">DB_EXCL</a> flag to check for the previous existence of
-subdatabases.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/fop.html"><img src="../../images/next.gif" alt="Next"></a>
+subdatabases.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/fop.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/fop.html b/db/docs/ref/upgrade.4.1/fop.html
index 631cbf4ca..c5c85b842 100644
--- a/db/docs/ref/upgrade.4.1/fop.html
+++ b/db/docs/ref/upgrade.4.1/fop.html
@@ -1,23 +1,23 @@
-<!--Id: fop.so,v 1.7 2002/05/09 20:34:20 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: fop.so,v 1.7 2002/05/09 20:34:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB-&gt;associate, DB-&gt;open, DB-&gt;remove, DB-&gt;rename</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/excl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/excl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB-&gt;associate, DB-&gt;open, DB-&gt;remove, DB-&gt;rename</h1>
+<h3 align=center>Release 4.1: DB-&gt;associate, DB-&gt;open, DB-&gt;remove, DB-&gt;rename</h3>
<p>Historic releases of Berkeley DB transaction-protected the <a href="../../api_c/db_open.html">DB-&gt;open</a>,
-<a href="../../api_c/db_remove.html">DB-&gt;remove</a> and <a href="../../api_c/db_rename.html">DB-&gt;rename</a> functions, but did it in an implicit
-way, that is, applications did not specify the <a href="../../api_c/txn_begin.html">DB_TXN</a> handles
+<a href="../../api_c/db_remove.html">DB-&gt;remove</a> and <a href="../../api_c/db_rename.html">DB-&gt;rename</a> methods, but did it in an implicit
+way, that is, applications did not specify the <a href="../../api_c/txn_class.html">DB_TXN</a> handles
associated with the operations. This approach had a number of problems,
the most significant of which was there was no way to group operations
that included database creation, removal or rename. For example,
@@ -28,30 +28,30 @@ was no way to guarantee the list of databases was correct for the
environment after system or application failure. Another example might
be the creation of both a primary database and a database intended to
serve as a secondary index, where again there was no way to group the
-creation of both databases in a single atomic operation.
+creation of both databases in a single atomic operation.</p>
<p>In the 4.1 release of Berkeley DB, this is no longer the case. The
-<a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_associate.html">DB-&gt;associate</a> functions now take a <a href="../../api_c/txn_begin.html">DB_TXN</a>
+<a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_associate.html">DB-&gt;associate</a> methods now take a <a href="../../api_c/txn_class.html">DB_TXN</a>
handle returned by <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> as an optional argument. New
-<a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a> and <a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a> functions taking a
-<a href="../../api_c/txn_begin.html">DB_TXN</a> handle as an optional argument have been added.
-<p>To upgrade, applications must add a <a href="../../api_c/txn_begin.html">DB_TXN</a> parameter in the
-appropriate location for the <a href="../../api_c/db_open.html">DB-&gt;open</a> function calls, and the
-<a href="../../api_c/db_associate.html">DB-&gt;associate</a> function calls (in both cases, the second argument for
-the C API, the first for the C++ or Java APIs).
+<a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a> and <a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a> methods taking a
+<a href="../../api_c/txn_class.html">DB_TXN</a> handle as an optional argument have been added.</p>
+<p>To upgrade, applications must add a <a href="../../api_c/txn_class.html">DB_TXN</a> parameter in the
+appropriate location for the <a href="../../api_c/db_open.html">DB-&gt;open</a> method calls, and the
+<a href="../../api_c/db_associate.html">DB-&gt;associate</a> method calls (in both cases, the second argument for
+the C API, the first for the C++ or Java APIs).</p>
<p>Applications wanting to transaction-protect their <a href="../../api_c/db_open.html">DB-&gt;open</a> and
-<a href="../../api_c/db_associate.html">DB-&gt;associate</a> method calls can add a NULL <a href="../../api_c/txn_begin.html">DB_TXN</a>
+<a href="../../api_c/db_associate.html">DB-&gt;associate</a> method calls can add a NULL <a href="../../api_c/txn_class.html">DB_TXN</a>
argument and specify the <a href="../../api_c/env_set_flags.html#DB_AUTO_COMMIT">DB_AUTO_COMMIT</a> flag to the two calls,
which wraps the operation in an internal Berkeley DB transaction.
Applications wanting to transaction-protect the remove and rename
operations must rewrite their calls to the <a href="../../api_c/db_remove.html">DB-&gt;remove</a> and
-<a href="../../api_c/db_rename.html">DB-&gt;rename</a> functions to be, instead, calls to the new
-<a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a> and <a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a> functions. Applications not
+<a href="../../api_c/db_rename.html">DB-&gt;rename</a> methods to be, instead, calls to the new
+<a href="../../api_c/env_dbremove.html">DB_ENV-&gt;dbremove</a> and <a href="../../api_c/env_dbrename.html">DB_ENV-&gt;dbrename</a> methods. Applications not
wanting to transaction-protect any of the operations can add a NULL
-argument to their <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_associate.html">DB-&gt;associate</a> function calls and
-require no further changes.
+argument to their <a href="../../api_c/db_open.html">DB-&gt;open</a> and <a href="../../api_c/db_associate.html">DB-&gt;associate</a> method calls and
+require no further changes.</p>
<p>For example, an application currently opening and closing a database as
-follows:
-<p><blockquote><pre>DB *dbp;
+follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -62,8 +62,8 @@ if ((ret = dbp-&gt;open(dbp, "file", NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
(void)dbp-&gt;close(dbp);
goto err_handler;
}</pre></blockquote>
-<p>could transaction-protect the <a href="../../api_c/db_open.html">DB-&gt;open</a> call as follows:
-<p><blockquote><pre>DB *dbp;
+<p>could transaction-protect the <a href="../../api_c/db_open.html">DB-&gt;open</a> call as follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -75,8 +75,8 @@ if ((ret = dbp-&gt;open(dbp,
(void)dbp-&gt;close(dbp);
goto err_handler;
}</pre></blockquote>
-<p>An application currently removing a database as follows:
-<p><blockquote><pre>DB *dbp;
+<p>An application currently removing a database as follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -85,16 +85,16 @@ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
<p>
if ((ret = dbp-&gt;remove(dbp, "file", NULL, 0)) != 0)
goto err_handler;</pre></blockquote>
-<p>could transaction-protect the database removal as follows:
-<p><blockquote><pre>DB *dbp;
+<p>could transaction-protect the database removal as follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
if ((ret =
dbenv-&gt;dbremove(dbenv, NULL, "file", NULL, DB_AUTO_COMMIT)) != 0)
goto err_handler;</pre></blockquote>
-<p>An application currently renaming a database as follows:
-<p><blockquote><pre>DB *dbp;
+<p>An application currently renaming a database as follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -103,8 +103,8 @@ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
<p>
if ((ret = dbp-&gt;rename(dbp, "file", NULL, "newname", 0)) != 0)
goto err_handler;</pre></blockquote>
-<p>could transaction-protect the database renaming as follows:
-<p><blockquote><pre>DB *dbp;
+<p>could transaction-protect the database renaming as follows:</p>
+<blockquote><pre>DB *dbp;
DB_ENV *dbenv;
int ret;
<p>
@@ -113,16 +113,16 @@ if ((ret = dbenv-&gt;dbrename(
goto err_handler;</pre></blockquote>
<p>These examples are the simplest possible translation, and will result in
behavior matching that of previous releases. For further discussion on
-how to transaction-protect <a href="../../api_c/db_open.html">DB-&gt;open</a> function calls, see
-<a href="../../ref/transapp/data_open.html">Opening the databases</a>.
-<p><a href="../../api_c/db_create.html">DB</a> handles that will later be used for transaction-protected
+how to transaction-protect <a href="../../api_c/db_open.html">DB-&gt;open</a> method calls, see
+<a href="../../ref/transapp/data_open.html">Opening the databases</a>.</p>
+<p><a href="../../api_c/db_class.html">DB</a> handles that will later be used for transaction-protected
operations must be opened within a transaction. Specifying a
transaction handle to operations using handles not opened within a
transaction will return an error. Similarly, not specifying a
transaction handle to operations using handles that were opened within
-a transaction will also return an error.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/excl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
+a transaction will also return an error.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/excl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/log_register.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/hash_nelem.html b/db/docs/ref/upgrade.4.1/hash_nelem.html
index 1da26083d..b84bf4806 100644
--- a/db/docs/ref/upgrade.4.1/hash_nelem.html
+++ b/db/docs/ref/upgrade.4.1/hash_nelem.html
@@ -1,25 +1,25 @@
-<!--Id: hash_nelem.so,v 1.2 2002/08/26 23:05:29 mjc Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: hash_nelem.so,v 1.2 2002/08/26 23:05:29 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB-&gt;stat.hash_nelem</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/java.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB-&gt;stat.hash_nelem</h1>
+<h3 align=center>Release 4.1: DB-&gt;stat.hash_nelem</h3>
<p>The <b>hash_nelem</b> field of the <a href="../../api_c/db_stat.html">DB-&gt;stat</a> method for Hash
databases has been removed from the 4.1 release, this information is no
-longer available to applications.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/java.html"><img src="../../images/next.gif" alt="Next"></a>
+longer available to applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/memp_sync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/java.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/incomplete.html b/db/docs/ref/upgrade.4.1/incomplete.html
index d15006137..bccac9e19 100644
--- a/db/docs/ref/upgrade.4.1/incomplete.html
+++ b/db/docs/ref/upgrade.4.1/incomplete.html
@@ -1,30 +1,33 @@
-<!--Id: incomplete.so,v 1.5 2002/07/05 12:31:23 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: incomplete.so,v 1.7 2003/11/20 22:31:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB_INCOMPLETE</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/memp_sync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB_INCOMPLETE</h1>
+<h3 align=center>Release 4.1: DB_INCOMPLETE</h3>
<p>The DB_INCOMPLETE error has been removed from the 4.1 release, and is
no longer returned by the Berkeley DB library. Applications no longer need
to check for this error return, as the underlying Berkeley DB interfaces that
could historically fail to checkpoint or flush the cache and return this
error can no longer fail for that reason. Applications should remove
-all uses of DB_INCOMPLETE.
-<p>Additionally, the <a href="../../api_java/txn_checkpoint.html">DbEnv.txn_checkpoint</a> and <a href="../../api_java/db_sync.html">Db.sync</a>
-methods have been changed from returning int to returning void.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/memp_sync.html"><img src="../../images/next.gif" alt="Next"></a>
+all uses of DB_INCOMPLETE.</p>
+<p>Additionally, the
+<a href="../../java/com/sleepycat/db/DbEnv.html#checkpoint">DbEnv.checkpoint</a>
+and
+<a href="../../java/com/sleepycat/db/Db.html#sync">Db.sync</a>
+methods have been changed from returning int to returning void.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/checkpoint.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/memp_sync.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/intro.html b/db/docs/ref/upgrade.4.1/intro.html
index 141a5e49f..521afa080 100644
--- a/db/docs/ref/upgrade.4.1/intro.html
+++ b/db/docs/ref/upgrade.4.1/intro.html
@@ -1,27 +1,27 @@
-<!--Id: intro.so,v 1.2 2002/01/16 20:12:09 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 1.2 2002/01/16 20:12:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/excl.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/excl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: introduction</h1>
+<h3 align=center>Release 4.1: introduction</h3>
<p>The following pages describe how to upgrade applications coded against
the Berkeley DB 4.0 release interfaces to the Berkeley DB 4.1 release interfaces.
This information does not describe how to upgrade Berkeley DB 1.85 release
-applications.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/excl.html"><img src="../../images/next.gif" alt="Next"></a>
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.0/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/excl.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/java.html b/db/docs/ref/upgrade.4.1/java.html
index ac1f17654..6cba3606b 100644
--- a/db/docs/ref/upgrade.4.1/java.html
+++ b/db/docs/ref/upgrade.4.1/java.html
@@ -1,29 +1,35 @@
-<!--Id: java.so,v 1.2 2002/08/27 01:11:08 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: java.so,v 1.4 2003/11/20 22:31:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: Java exceptions</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/hash_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/hash_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: Java exceptions</h1>
-<p>The Java <a href="../../api_java/env_class.html">DbEnv</a> constructor is now marked with "throws
-DbException". This means applications must construct <a href="../../api_java/env_class.html">DbEnv</a>
-objects in a context where <a href="../../api_java/except_class.html">DbException</a> throwables are
+<h3 align=center>Release 4.1: Java exceptions</h3>
+<p>The Java
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+ constructor is now
+marked with "throws DbException". This means applications must
+construct
+<a href="../../java/com/sleepycat/db/DbEnv.html">DbEnv</a>
+objects in a context where
+<a href="../../java/com/sleepycat/db/DbException.html">DbException</a>
+throwables are
handled (either in a try/catch block or in a method that propagates the
exception up the stack). Note that previous versions of the Berkeley DB Java
API could throw this exception from the constructor but it was not
-marked.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/hash_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
+marked.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/hash_nelem.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/cxx.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/log_register.html b/db/docs/ref/upgrade.4.1/log_register.html
index 6beeb14f1..94c6b4646 100644
--- a/db/docs/ref/upgrade.4.1/log_register.html
+++ b/db/docs/ref/upgrade.4.1/log_register.html
@@ -1,27 +1,27 @@
-<!--Id: log_register.so,v 1.3 2002/01/16 20:12:09 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_register.so,v 1.3 2002/01/16 20:12:09 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB_ENV-&gt;log_register</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/fop.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/fop.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB_ENV-&gt;log_register</h1>
+<h3 align=center>Release 4.1: DB_ENV-&gt;log_register</h3>
<p>The DB_ENV-&gt;log_register and DB_ENV-&gt;log_unregister interfaces
were removed from the Berkeley DB 4.1 release. It is very unlikely
application programs used these interfaces. If your application used
these interfaces, please contact Sleepycat Software support for help in
-upgrading.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/fop.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
+upgrading.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/fop.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/log_stat.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/log_stat.html b/db/docs/ref/upgrade.4.1/log_stat.html
index 2e1cfde6e..e4f43e0de 100644
--- a/db/docs/ref/upgrade.4.1/log_stat.html
+++ b/db/docs/ref/upgrade.4.1/log_stat.html
@@ -1,26 +1,26 @@
-<!--Id: log_stat.so,v 1.1 2002/01/11 16:33:12 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: log_stat.so,v 1.1 2002/01/11 16:33:12 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: st_flushcommit</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: st_flushcommit</h1>
+<h3 align=center>Release 4.1: st_flushcommit</h3>
<p>The DB_ENV-&gt;log_stat "st_flushcommits" statistic has been removed
from Berkeley DB, as it is now the same as the "st_scount" statistic. Any
application using the "st_flushcommits" statistic should remove it, or
-replace it with the "st_count" statistic.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
+replace it with the "st_count" statistic.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/log_register.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/checkpoint.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/memp_sync.html b/db/docs/ref/upgrade.4.1/memp_sync.html
index 0d164e815..1008d24ed 100644
--- a/db/docs/ref/upgrade.4.1/memp_sync.html
+++ b/db/docs/ref/upgrade.4.1/memp_sync.html
@@ -1,31 +1,31 @@
-<!--Id: memp_sync.so,v 1.3 2002/03/26 22:57:17 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: memp_sync.so,v 1.5 2003/10/18 19:16:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Release 4.1: DB_ENV-&gt;memp_sync</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/upgrade.4.1/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade.4.1/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/hash_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Release 4.1: DB_ENV-&gt;memp_sync</h1>
-<p>Historical documentation for the <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> interface stated:
-<p><blockquote><pre>In addition, if <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> returns success, the value of
+<h3 align=center>Release 4.1: DB_ENV-&gt;memp_sync</h3>
+<p>Historical documentation for the <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> method stated:</p>
+<blockquote><pre>In addition, if <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> returns success, the value of
<b>lsn</b> will be overwritten with the largest log sequence number
from any page that was written by <a href="../../api_c/memp_sync.html">DB_ENV-&gt;memp_sync</a> to satisfy this
request.</pre></blockquote>
<p>This functionality was never correctly implemented, and has been removed
in the Berkeley DB 4.1 release. It is very unlikely application programs used
this information. If your application used this information, please
-contact Sleepycat Software support for help in upgrading.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/upgrade.4.1/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.4.1/app_dispatch.html"><img src="../../images/next.gif" alt="Next"></a>
+contact Sleepycat Software support for help in upgrading.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/incomplete.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.1/hash_nelem.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.1/toc.html b/db/docs/ref/upgrade.4.1/toc.html
index 0ec9d7b24..3d477bced 100644
--- a/db/docs/ref/upgrade.4.1/toc.html
+++ b/db/docs/ref/upgrade.4.1/toc.html
@@ -1,21 +1,21 @@
-<!--Id: toc.so,v 1.13 2002/08/12 21:12:06 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: toc.so,v 1.15 2002/08/26 23:05:29 mjc Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 4.0.X applications to Berkeley DB 4.1</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<p>
-<h1 align=center>Upgrading Berkeley DB 4.0.X applications to Berkeley DB 4.1</h1>
-<p><ol>
+<h3 align=center>Upgrading Berkeley DB 4.0.X applications to Berkeley DB 4.1</h3>
+<ol>
<p><li><a href="intro.html">Release 4.1: introduction</a>
<li><a href="excl.html">Release 4.1: DB_EXCL</a>
<li><a href="fop.html">Release 4.1: DB-&gt;associate, DB-&gt;open, DB-&gt;remove, DB-&gt;rename</a>
@@ -24,11 +24,14 @@
<li><a href="checkpoint.html">Release 4.1: DB_CHECKPOINT, DB_CURLSN</a>
<li><a href="incomplete.html">Release 4.1: DB_INCOMPLETE</a>
<li><a href="memp_sync.html">Release 4.1: DB_ENV-&gt;memp_sync</a>
+<li><a href="hash_nelem.html">Release 4.1: DB-&gt;stat.hash_nelem</a>
+<li><a href="java.html">Release 4.1: Java exceptions</a>
+<li><a href="cxx.html">Release 4.1: C++ exceptions</a>
<li><a href="app_dispatch.html">Release 4.1: Application-specific logging and recovery</a>
<li><a href="disk.html">Release 4.1: upgrade requirements</a>
</ol>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade.4.2/cksum.html b/db/docs/ref/upgrade.4.2/cksum.html
new file mode 100644
index 000000000..1451277be
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/cksum.html
@@ -0,0 +1,30 @@
+<!--$Id: cksum.so,v 1.3 2003/09/04 14:03:13 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB_CHKSUM_SHA1</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/queue.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/client.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB_CHKSUM_SHA1</h3>
+<p>The flag to enable checksumming of Berkeley DB databases pages was renamed
+from DB_CHKSUM_SHA1 to <a href="../../api_c/db_set_flags.html#DB_CHKSUM">DB_CHKSUM</a>, as Berkeley DB uses an internal
+function to generate hash values for unencrypted database pages, not
+the SHA1 Secure Hash Algorithm. Berkeley DB continues to use the SHA1 Secure
+Hash Algorithm to generate hashes for encrypted database pages.
+Applications using the DB_CHKSUM_SHA1 flag should change that use to
+<a href="../../api_c/db_set_flags.html#DB_CHKSUM">DB_CHKSUM</a>; no other change is required.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/queue.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/client.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/client.html b/db/docs/ref/upgrade.4.2/client.html
new file mode 100644
index 000000000..8f295c3c9
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/client.html
@@ -0,0 +1,28 @@
+<!--$Id: client.so,v 1.1 2003/05/17 19:29:39 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB_CLIENT</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/cksum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/del.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB_CLIENT</h3>
+<p>The flag to create a client to connect to a RPC server was renamed from
+DB_CLIENT to <a href="../../api_c/env_class.html#DB_RPCCLIENT">DB_RPCCLIENT</a>, in order to avoid confusion between
+RPC clients and replication clients. Applications using the DB_CLIENT
+flag should change that use to <a href="../../api_c/env_class.html#DB_RPCCLIENT">DB_RPCCLIENT</a>; no other change is
+required.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/cksum.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/del.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/del.html b/db/docs/ref/upgrade.4.2/del.html
new file mode 100644
index 000000000..d48973311
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/del.html
@@ -0,0 +1,37 @@
+<!--$Id: del.so,v 1.9 2003/11/20 22:31:20 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB-&gt;del</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/priority.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB-&gt;del</h3>
+<p>In previous releases, the C++ <a href="../../api_cxx/db_del.html">Db::del</a> and Java
+<a href="../../java/com/sleepycat/db/Db.html#delete">Db.delete</a>
+ methods threw exceptions
+encapsulating the
+<a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> error in some cases when called on Queue and Recno
+databases. Unfortunately, this was undocumented behavior.</p>
+<p>For consistency with the other Berkeley DB methods that handle
+<a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>, this is no longer the case. Applications calling
+the <a href="../../api_cxx/db_del.html">Db::del</a> or
+<a href="../../java/com/sleepycat/db/Db.html#delete">Db.delete</a>
+methods on Queue or Recno
+databases, and handling the <a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a> exception specially,
+should be modified to check for a return value of <a href="../../ref/program/errorret.html#DB_KEYEMPTY">DB_KEYEMPTY</a>
+instead.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/client.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/priority.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/disk.html b/db/docs/ref/upgrade.4.2/disk.html
new file mode 100644
index 000000000..294cf4a66
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/disk.html
@@ -0,0 +1,26 @@
+<!--$Id: disk.so,v 1.4 2003/03/19 20:20:44 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: upgrade requirements</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: upgrade requirements</h3>
+<p>The log file format changed in the Berkeley DB 4.2 release. No database
+formats changed in the Berkeley DB 4.2 release.</p>
+<p>For further information on upgrading Berkeley DB installations, see
+<a href="../../ref/upgrade/process.html">Upgrading Berkeley DB installations</a>.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/tcl.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../test/run.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/intro.html b/db/docs/ref/upgrade.4.2/intro.html
new file mode 100644
index 000000000..21b538105
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/intro.html
@@ -0,0 +1,27 @@
+<!--$Id: intro.so,v 1.2 2002/12/09 15:38:47 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: introduction</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/java.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: introduction</h3>
+<p>The following pages describe how to upgrade applications coded against
+the Berkeley DB 4.1 release interfaces to the Berkeley DB 4.2 release interfaces.
+This information does not describe how to upgrade Berkeley DB 1.85 release
+applications.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.1/disk.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/java.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/java.html b/db/docs/ref/upgrade.4.2/java.html
new file mode 100644
index 000000000..38a6a83fc
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/java.html
@@ -0,0 +1,100 @@
+<!--$Id: java.so,v 1.18 2003/11/20 22:31:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: Java</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/queue.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: Java</h3>
+<p>There are a number of major changes to the Java support in Berkeley DB in this
+release. Despite that we have tried to make this a bridge release, a
+release where we don't require you to change anything. We've done this
+using the standard approach to deprecation in Java. If you do not
+compile with deprecation warnings on, your existing sources should work
+with this new release with only minor changes despite the large number
+of changes. Expect that in a future release we will remove all the
+deprecated API and only support the new API names.</p>
+<p>This is a list of areas where we have broken compatibility with the
+4.1 release. In most cases it is a name change in an interface class.
+</p>
+<p><ul type=disc>
+<li><b>DbAppDispatch.app_dispatch(DbEnv,Dbt,DbLsn,int)</b><p>is now:
+<b>DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)</b></p>
+<li><b>DbAppendRecno.db_append_recno(Db,Dbt,int)</b><p>is now:
+<b>DbAppendRecno.dbAppendRecno(Db,Dbt,int)</b></p>
+<li><b>DbBtreeCompare.bt_compare(Db,Dbt,Dbt)</b><p>is now:
+<b>DbBtreeCompare.compare(Db,Dbt,Dbt)</b></p>
+<li><b>DbBtreeCompare.dup_compare(Db,Dbt,Dbt)</b><p>is now:
+<b>DbBtreeCompare.compareDuplicates(Db,Dbt,Dbt)</b></p>
+<li><b>DbBtreePrefix.bt_prefix(Db,Dbt,Dbt)</b><p>is now:
+<b>DbBtreePrefix.prefix(Db,Dbt,Dbt)</b></p>
+<li><b>DbSecondaryKeyCreate.secondary_key_create(Db,Dbt,Dbt,Dbt)</b><p>is now:
+<b>DbSecondaryKeyCreate.secondaryKeyCreate(Db,Dbt,Dbt,Dbt)</b></p>
+</ul>
+<p>The 4.2 release of Berkeley DB requires at minimum a J2SE 1.3.1 certified Java
+virtual machine and associated classes to properly build and execute.
+To determine what version virtual machine you are running, enter:</p>
+<blockquote><pre>java -version</pre></blockquote>
+<p>at a command line and look for the version number. If you need to
+deploy to a version 1.1 or 1.0 Java environment, it may be possible to
+do so by not including the classes in the com.sleepycat.bdb package
+in the Java build process (however, that workaround has not been
+tested by Sleepycat Software).</p>
+<p>A few inconsistent methods have been cleaned up (for example,
+<a href="../../java/com/sleepycat/db/Db.html#close">Db.close</a>
+ now returns void; previously,
+it returned an int
+which was always zero). The synchronized attributed has been toggled
+on some methods -- this is an attempt to prevent multithreaded
+applications from calling close or similar methods concurrently from
+multiple threads.</p>
+<p>The Berkeley DB API has up until now been consistent across all language APIs.
+Although consistency has is benefits, it made our Java API look strange to
+Java programmers. Many methods have been renamed in this release of the
+Java API to conform with Java naming conventions. Sometimes this renaming
+was simply "camel casing", sometimes it required rewording. The mapping
+file for these name changes is in <b>dist/camel.pm</b>. The Perl script
+we use to convert code to the new names is called
+<b>dist/camelize.pl</b>, and may help with updating Java applications
+written for earlier versions of Berkeley DB.</p>
+<p>Berkeley DB has a number of places where as a C library it uses function pointers
+to move into custom code for the purpose of notification of some event. In
+Java the best parallel is the registration of some class which implements
+an interface. In this version of Berkeley DB we have made an effort to make those
+interfaces more uniform and predictable. Specifically, DbEnvFeedback is now
+DbEnvFeedbackHandler, DbErrcall is DbErrorHandler and DbFeedback is
+DbFeedbackHandler. In every case we have kept the older interfaces and the
+older registration methods so as to allow for backward compatibility in this
+release. Expect them to be removed in future releases.
+</p>
+<p>As you upgrade to this release of Berkeley DB you will notice that we have added
+an entirely new layer inside the package com.sleepycat.bdb. This was
+formerly the Greybird project by Mark Hayes. Sleepycat and Mark worked
+together to incorporate his work. We have done this in hopes of reducing
+the learning curve when using Berkeley DB in a Java project. When you upgrade
+you should consider switching to this layer as over time the historical
+classes and the new bdb package classes will be more and more integrated
+providing a simple yet powerful interface from Java into the Berkeley DB library.</p>
+<p>Berkeley DB's Java API is now generated with <a href="http://www.swig.org">SWIG</a>.
+The new Java API is significantly faster for many operations.</p>
+<p>Some internal methods and constructors that were previously public have
+been hidden or removed.</p>
+<p>Packages found under com.sleepycat are considered different APIs into
+the Berkeley DB system. These include the core db api (com.sleepycat.db), the
+collections style access layer (com.sleepycat.bdb) and the now relocated XA
+system (com.sleepycat.xa).</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/queue.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/lockng.html b/db/docs/ref/upgrade.4.2/lockng.html
new file mode 100644
index 000000000..ab78113f5
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/lockng.html
@@ -0,0 +1,51 @@
+<!--$Id: lockng.so,v 1.5 2003/09/09 19:04:14 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB_LOCK_NOTGRANTED</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/verify.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/repinit.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB_LOCK_NOTGRANTED</h3>
+<p>In previous releases, configuring lock or transaction timeout values or
+calling the <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a> method with the <a href="../../api_c/txn_begin.html#DB_TXN_NOWAIT">DB_TXN_NOWAIT</a> flag
+caused database operation methods to return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>,
+or throw a <a href="../../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception. This
+required applications to unnecessarily handle multiple errors or
+exception types.</p>
+<p>In the Berkeley DB 4.2 release, with one exception, database operations will
+no longer return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or throw a
+<a href="../../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception. Instead, database
+operations will return <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> or throw a
+<a href="../../api_cxx/deadlock_class.html">DbDeadlockException</a> exception. This change should require
+no application changes, as applications must already be dealing with the
+possible <a href="../../ref/program/errorret.html#DB_LOCK_DEADLOCK">DB_LOCK_DEADLOCK</a> error return or
+<a href="../../api_cxx/deadlock_class.html">DbDeadlockException</a> exception from database operations.</p>
+<p>The one exception to this rule is the <a href="../../api_c/db_get.html">DB-&gt;get</a> method using the
+<a href="../../api_c/db_get.html#DB_CONSUME_WAIT">DB_CONSUME_WAIT</a> flag to consume records from a Queue. If lock
+or transaction timeouts are set, this method and flag combination may
+return <a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or throw a
+<a href="../../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception.</p>
+<p>Applications wanting to distinguish between true deadlocks and timeouts
+can configure database operation methods to return
+<a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a> or throw a
+<a href="../../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception using the
+<a href="../../api_c/env_set_flags.html#DB_TIME_NOTGRANTED">DB_TIME_NOTGRANTED</a> flag.</p>
+<p>The <a href="../../api_c/lock_get.html">DB_ENV-&gt;lock_get</a> and <a href="../../api_c/lock_vec.html">DB_ENV-&gt;lock_vec</a> methods will continue to return
+<a href="../../ref/program/errorret.html#DB_LOCK_NOTGRANTED">DB_LOCK_NOTGRANTED</a>, or throw a
+<a href="../../api_cxx/lockng_class.html">DbLockNotGrantedException</a> exception as they have previously
+done.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/verify.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/repinit.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/nosync.html b/db/docs/ref/upgrade.4.2/nosync.html
new file mode 100644
index 000000000..f4cc53206
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/nosync.html
@@ -0,0 +1,37 @@
+<!--$Id: nosync.so,v 1.6 2003/05/16 15:45:36 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: Client replication environments</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/repinit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: Client replication environments</h3>
+<p>In previous Berkeley DB releases, replication clients always behaved as if
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> behavior was configured, that is, clients would
+not write or synchronously flush their log when receiving a transaction
+commit or prepare message. However, applications needing a high level
+of transactional guarantee may need a write and synchronous flush on
+the client. By default in the Berkeley DB 4.2 release, client database
+environments write and synchronously flush their logs when receiving a
+transaction commit or prepare message. Applications not needing such
+a high level of transactional guarantee should use the environment's
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag to configure their client database
+environments to not do the write or flush on transaction commit, as this
+will increase their performance. Regardless of the setting of the
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> flag, clients will always write and flush on
+transaction prepare.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/repinit.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/tcl.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/priority.html b/db/docs/ref/upgrade.4.2/priority.html
new file mode 100644
index 000000000..261c35b81
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/priority.html
@@ -0,0 +1,31 @@
+<!--$Id: priority.so,v 1.1 2003/03/03 20:32:43 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB-&gt;set_cache_priority</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/verify.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB-&gt;set_cache_priority</h3>
+<p>In previous releases, applications set the priority of a database's
+pages in the Berkeley DB buffer cache with the DB-&gt;set_cache_priority
+method. This method is no longer available. Applications wanting to
+set database page priorities in the buffer cache should use the
+<a href="../../api_c/memp_set_priority.html">DB_MPOOLFILE-&gt;set_priority</a> method instead. The new call takes the same
+arguments and behaves identically to the old call, except that a
+<a href="../../api_c/mempfile_class.html">DB_MPOOLFILE</a> buffer cache file handle is used instead of the
+<a href="../../api_c/db_class.html">DB</a> database handle.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/del.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/verify.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/queue.html b/db/docs/ref/upgrade.4.2/queue.html
new file mode 100644
index 000000000..4ee29e6bc
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/queue.html
@@ -0,0 +1,36 @@
+<!--$Id: queue.so,v 1.3 2003/09/25 15:28:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: Queue access method</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/cksum.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: Queue access method</h3>
+<p>We have discovered a problem where applications that specify Berkeley DB's
+encryption or data checksum features on Queue databases with extent
+files, the database data will not be protected. This is obviously a
+security problem, and we encourage you to upgrade these applications to
+the 4.2 release as soon as possible.</p>
+<p>The Queue databases must be dumped and reloaded in order to fix this
+problem. First build the Berkeley DB 4.2 release, then use your previous
+release to dump the database, and the 4.2 release to reload the
+database. For example:</p>
+<blockquote><pre>db-4.1.25/db_dump -P password -k database | db-4.2.xx/db_load -P password new_database</pre></blockquote>
+<p>Note this is <b>only</b> necessary for Queue access method databases,
+where extent files were configured along with either encryption or
+checksums.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/java.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/cksum.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/repinit.html b/db/docs/ref/upgrade.4.2/repinit.html
new file mode 100644
index 000000000..8a857a8a4
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/repinit.html
@@ -0,0 +1,46 @@
+<!--$Id: repinit.so,v 1.10 2003/11/19 03:41:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: Replication</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/lockng.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/nosync.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: Replication</h3>
+<h3>Replication initialization</h3>
+<p>In the Berkeley DB 4.2 release, replication environments must be specifically
+initialized by any process that will ever do anything other than open
+databases in read-only mode (that is, any process which might call any
+of the Berkeley DB replication interfaces or modify databases). This
+initialization is done when the replication database environment handle
+is opened, by specifying the <a href="../../api_c/env_open.html#DB_INIT_REP">DB_INIT_REP</a> flag to the
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method.</p>
+<h3>Database methods and replication clients</h3>
+<p>All of the <a href="../../api_c/db_class.html">DB</a> object methods may now return
+<a href="../../api_c/db_put.html#DB_REP_HANDLE_DEAD">DB_REP_HANDLE_DEAD</a> when a replication client changes masters.
+When this happens the <a href="../../api_c/db_class.html">DB</a> handle is no longer able to be used and
+the application must close the handle using the <a href="../../api_c/db_close.html">DB-&gt;close</a> method and
+open a new handle. This new return value is returned when a client
+unrolls a transaction in order to synchronize with the new master.
+Otherwise, if the application was permitted to use the original handle,
+it's possible the handle might attempt to access nonexistent resources.</p>
+<h3><a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a></h3>
+<p>The <a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method has new return values and an log sequence
+number (LSN) associated with those return values. The new argument is
+<b>ret_lsnp</b>, which is the returned LSN when the
+<a href="../../api_c/rep_message.html">DB_ENV-&gt;rep_process_message</a> method returns <a href="../../api_c/rep_message.html#DB_REP_ISPERM">DB_REP_ISPERM</a> or
+<a href="../../api_c/rep_message.html#DB_REP_NOTPERM">DB_REP_NOTPERM</a>. See <a href="../../ref/rep/trans.html">Transactional guarantees</a> for more information.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/lockng.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/nosync.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/tcl.html b/db/docs/ref/upgrade.4.2/tcl.html
new file mode 100644
index 000000000..df24f7cd2
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/tcl.html
@@ -0,0 +1,24 @@
+<!--$Id: tcl.so,v 1.2 2003/05/09 20:01:41 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: Tcl API</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/nosync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: Tcl API</h3>
+<p>The Tcl API included in the Berkeley DB 4.2 release requires Tcl release 8.4
+or later.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/nosync.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/disk.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/toc.html b/db/docs/ref/upgrade.4.2/toc.html
new file mode 100644
index 000000000..33ecb67b0
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/toc.html
@@ -0,0 +1,37 @@
+<!--$Id: toc.so,v 1.12 2003/11/16 20:25:19 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Upgrading Berkeley DB 4.1.X applications to Berkeley DB 4.2</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Upgrading Berkeley DB 4.1.X applications to Berkeley DB 4.2</h3>
+<ol>
+<li><a href="intro.html">Release 4.2: introduction</a>
+<li><a href="java.html">Release 4.2: Java</a>
+<li><a href="queue.html">Release 4.2: Queue</a>
+<li><a href="cksum.html">Release 4.2: DB_CHKSUM_SHA1</a>
+<li><a href="client.html">Release 4.2: DB_CLIENT</a>
+<li><a href="del.html">Release 4.2: DB-&gt;del</a>
+<li><a href="priority.html">Release 4.2: DB-&gt;set_cache_priority</a>
+<li><a href="verify.html">Release 4.2: DB-&gt;verify</a>
+<li><a href="lockng.html">Release 4.2: DB_LOCK_NOTGRANTED</a>
+<li><a href="repinit.html">Release 4.2: Replication</a>
+<li><a href="nosync.html">Release 4.2: Client replication environments</a>
+<li><a href="tcl.html">Release 4.2: Tcl API</a>
+<li><a href="disk.html">Release 4.2: upgrade requirements</a>
+</ol>
+<table width="100%"><tr><td><br></td><td align=right><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade.4.2/verify.html b/db/docs/ref/upgrade.4.2/verify.html
new file mode 100644
index 000000000..b516b2682
--- /dev/null
+++ b/db/docs/ref/upgrade.4.2/verify.html
@@ -0,0 +1,34 @@
+<!--$Id: verify.so,v 1.4 2003/05/17 16:43:10 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
+<html>
+<head>
+<title>Berkeley DB Reference Guide: Release 4.2: DB-&gt;verify</title>
+<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
+</head>
+<body bgcolor=white>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
+<td align=right><a href="../upgrade.4.2/priority.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/lockng.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p>
+<h3 align=center>Release 4.2: DB-&gt;verify</h3>
+<p>In previous releases, applications calling the <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method had
+to explicitly discard the <a href="../../api_c/db_class.html">DB</a> handle by calling the
+<a href="../../api_c/db_close.html">DB-&gt;close</a> method. Further, using the <a href="../../api_c/db_class.html">DB</a> handle in other ways
+after calling the <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method was not prohibited by the
+documentation, although such use was likely to lead to problems.</p>
+<p>For consistency with other Berkeley DB methods, <a href="../../api_c/db_verify.html">DB-&gt;verify</a> method has been
+documented in the current release as a <a href="../../api_c/db_class.html">DB</a> handle destructor.
+Applications using the <a href="../../api_c/db_class.html">DB</a> handle in any way (including calling
+the <a href="../../api_c/db_close.html">DB-&gt;close</a> method) after calling <a href="../../api_c/db_verify.html">DB-&gt;verify</a> should be
+updated to make no further use of any kind of the <a href="../../api_c/db_class.html">DB</a> handle
+after <a href="../../api_c/db_verify.html">DB-&gt;verify</a> returns.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade.4.2/priority.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.4.2/lockng.html"><img src="../../images/next.gif" alt="Next"></a>
+</td></tr></table>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
+</body>
+</html>
diff --git a/db/docs/ref/upgrade/process.html b/db/docs/ref/upgrade/process.html
index 40be3c8e8..c5e1bb6b7 100644
--- a/db/docs/ref/upgrade/process.html
+++ b/db/docs/ref/upgrade/process.html
@@ -1,108 +1,151 @@
-<!--$Id: process.so,v 1.1 2000/12/05 20:39:10 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: process.so,v 1.11 2003/11/26 14:31:29 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Upgrading Berkeley DB installations</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
+<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td width="1%"><a href="../../ref/build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../upgrade/version.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Upgrading Berkeley DB installations</h1>
+<h3 align=center>Upgrading Berkeley DB installations</h3>
<p>The following information describes the general process of upgrading
-Berkeley DB installations. There are three issues to be considered when
-upgrading Berkeley DB applications and database environments. They are the
-application API, the underlying database formats, and, in the case of
-transactional database environments, the log files.
-<p>An application must always be re-compiled to use a new Berkeley DB release.
-Internal Berkeley DB interfaces may change at any time and in any release,
-without warning. This means the application and library must be entirely
-recompiled and reinstalled when upgrading to new releases of the
-library, as there is no guarantee that modules from one version of the
-library will interact correctly with modules from another release.
-<p>A Berkeley DB patch release will never modify the Berkeley DB API, log file or
-database formats in non-backward compatible ways. Berkeley DB minor and major
-releases may optionally include changes to the Berkeley DB application API,
-log files and database formats that are not backward compatible. Note,
-that there are several underlying Berkeley DB database formats. As all of
-them do not necessarily change at the same time, changes to one database
-format in a release may not affect any particular application.
-<p>Each Berkeley DB minor or major release has an upgrading section in this
-chapter of the Berkeley DB Reference Guide. The section describes any API
-changes that were made in the release. Application maintainers must
-review the API changes, update their applications as necessary, and then
-re-compile using the new release. In addition, each section includes
-a page specifying if the log file format or database formats changed in
-non-backward compatible ways as part of the release.
-<p>If the application does not have a Berkeley DB transactional environment, the
-re-compiled application may be installed in the field using the
-following steps:
-<p><ol>
+Berkeley DB installations. There are four areas to be considered when
+upgrading Berkeley DB applications and database environments: the application
+API, the database environment's region files, the underlying database
+formats, and, in the case of transactional database environments, the
+log files. The upgrade procedures required depend on whether or not
+the release is a major or minor release (in which either the major or
+minor number of the version changed), or a patch release (in which only
+the patch number in the version changed). Berkeley DB major and minor
+releases may optionally include changes in all four areas, that is, the
+application API, region files, database formats, and log files may not
+be backward-compatible with previous releases.</p>
+<p>Each Berkeley DB major or minor release has information in this chapter of
+the Reference Guide, describing how to upgrade to the new release. The
+section describes any API changes made in the release. Application
+maintainers should review the API changes and update their applications
+as necessary before recompiling with the new release. In addition, each
+section includes a page specifying whether the log file format or
+database formats changed in non-backward-compatible ways as part of the
+release. Because there are several underlying Berkeley DB database formats,
+and they do not all necessarily change in the same release, changes to
+a database format in a release may not affect any particular
+application. Further, database and log file formats may have changed
+but be entirely backward-compatible, in which case no upgrade will be
+necessary.</p>
+<p>A Berkeley DB patch release will never modify the API, regions, log files, or
+database formats in incompatible ways, and so applications need only be
+relinked (or, in the case of a shared library, pointed at the new
+version of the shared library) to upgrade to a new release. Note that
+internal Berkeley DB interfaces may change at any time and in any release
+(including patch releases) without warning. This means the library must
+be entirely recompiled and reinstalled when upgrading to new releases
+of the library because there is no guarantee that modules from one
+version of the library will interact correctly with modules from another
+release. We recommend using the same compiler release when building
+patch releases as was used to build the original release; in the default
+configuration, the Berkeley DB library shares data structures from underlying
+shared memory between threads of control, and should the compiler
+re-order fields or otherwise change those data structures between the
+two builds, errors may result.</p>
+<p>If the release is a patch release, do the following:</p>
+<ol>
<p><li>Shut down the old version of the application.
-<p><li>Remove any Berkeley DB environment, using the <a href="../../api_c/env_remove.html">DBENV-&gt;remove</a> function or an
+<li>Install the new version of the application by relinking or installing
+a new version of the Berkeley DB shared library.
+<li>Restart the application.
+</ol>
+<p>Otherwise, if the application <b>does not</b> have a Berkeley DB
+transactional environment, the application may be installed in the field
+using the following steps:</p>
+<ol>
+<p><li>Shut down the old version of the application.
+<li>Remove any Berkeley DB environment using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method or an
appropriate system utility.
-<p><li>Install the new version of the application.
-<p><li>If the database format has changed, upgrade the application's databases.
-See <a href="../../ref/am/upgrade.html">Upgrading databases</a> for more
+<li>Recompile and install the new version of the application.
+<li>If necessary, upgrade the application's databases. See
+<a href="../../ref/am/upgrade.html">Upgrading databases</a> for more
information.
-<p><li>Re-start the application.
+<li>Restart the application.
</ol>
-<p>If the application has a Berkeley DB transactional environment, but neither
-the log file or database formats have changed, the re-compiled
-application may be installed in the field using the following steps:
-<p><ol>
+<p>Otherwise, if the application has a Berkeley DB transactional environment,
+but neither the log file nor database formats need upgrading, the
+application may be installed in the field using the following steps:</p>
+<ol>
<p><li>Shut down the old version of the application.
-<p><li>Run recovery on the database environment, using the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function
+<li>Run recovery on the database environment using the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method
or the <a href="../../utility/db_recover.html">db_recover</a> utility.
-<p><li>Install the new version of the application.
-<p><li>Re-start the application.
+<li>Remove any Berkeley DB environment using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method or an
+appropriate system utility.
+<li>Recompile and install the new version of the application.
+<li>Restart the application.
</ol>
<p>If the application has a Berkeley DB transactional environment, and the log
-file format has changed but the database formats have not, the
-re-compiled application may be installed in the field using the
-following steps:
-<p><ol>
+files need upgrading but the databases do not, the application may be
+installed in the field using the following steps:</p>
+<ol>
<p><li>Shut down the old version of the application.
-<p><li>Run recovery on the database environment, using the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function
+<li>Run recovery on the database environment using the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method
or the <a href="../../utility/db_recover.html">db_recover</a> utility.
-<p><li>Archive the database environment for catastrophic recovery. See
+<li>Remove any Berkeley DB environment using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method or an
+appropriate system utility.
+<li>Archive the database environment for catastrophic recovery. See
<a href="../../ref/transapp/archival.html">Archival procedures</a> for more
information.
-<p><li>Install the new version of the application.
-<p><li>Re-start the application.
+<li>Recompile and install the new version of the application.
+<li>Restart the application.
</ol>
-<p>If the application has a Berkeley DB transactional environment and the
-database format has changed, the re-compiled application may be
-installed in the field using the following steps:
-<p><ol>
+<p>Otherwise, if the application has a Berkeley DB transactional environment and
+the databases need upgrading, the application may be installed in the
+field using the following steps:</p>
+<ol>
<p><li>Shut down the old version of the application.
-<p><li>Run recovery on the database environment, using the <a href="../../api_c/env_open.html">DBENV-&gt;open</a> function
+<li>Run recovery on the database environment using the <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> method
or the <a href="../../utility/db_recover.html">db_recover</a> utility.
-<p><li>Archive the database environment for catastrophic recovery. See
+<li>Remove any Berkeley DB environment using the <a href="../../api_c/env_remove.html">DB_ENV-&gt;remove</a> method or an
+appropriate system utility.
+<li>Archive the database environment for catastrophic recovery. See
<a href="../../ref/transapp/archival.html">Archival procedures</a> for more
information.
-<p><li>Install the new version of the application.
-<p><li>Upgrade the application's databases. See
+<li>Recompile and install the new version of the application.
+<li>Upgrade the application's databases. See
<a href="../../ref/am/upgrade.html">Upgrading databases</a> for more
information.
-<p><li>Archive the database for catastrophic recovery again (using different
-media than before, of course).
-<p>This archival is not strictly necessary. However, if you have to perform
-catastrophic recovery after restarting your applications, that recovery
-must be done based on the last archive you have made. If you make this
-archive, you can use it as the basis of your catastrophic recovery. If
-you do not make this archive, you will have to use the archive you made
-in step #2 as the basis of your recovery, and you will have to upgrade it
-as described in step #3 before you can apply your log files to it.
-<p><li>Re-start the application.
+<li>Archive the database for catastrophic recovery again (using different
+media than before, of course). Note: This archival is not strictly
+necessary. However, if you have to perform catastrophic recovery after
+restarting the application, that recovery must be done based on the
+last archive you have made. If you make this second archive, you can
+use it as the basis of that catastrophic recovery. If you do not make
+this second archive, you have to use the archive you made in step 4 as
+the basis of your recovery, and you have to do a full upgrade on it
+before you can apply log files created after the upgrade to it.
+<li>Restart the application.
+</ol>
+<p>Finally, upgrading a Berkeley DB replication group requires a few additional
+steps. To upgrade a replication group, you must:</p>
+<ol>
+<p><li>Bring all clients up to date with the master (that is, all
+clients must be brought up to the most current log record as measured
+by the master's log sequence number (LSN)).
+<li>Perform the upgrade procedures described previously on each
+of the individual database environments that are part of the replication
+group.
+<li>Restart the replication group.
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade.2.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<p>Alternatively, it may be simpler to discard the contents of all of the
+client database environments, upgrade the master database environment,
+and then re-add all of the clients to the replication group using the
+standard replication procedures for new sites.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../upgrade/version.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade.2.0/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/upgrade/version.html b/db/docs/ref/upgrade/version.html
index 53c09b559..3185c2021 100644
--- a/db/docs/ref/upgrade/version.html
+++ b/db/docs/ref/upgrade/version.html
@@ -1,47 +1,47 @@
-<!--Id: version.so,v 10.19 2001/06/25 13:29:43 bostic Exp -->
-<!--Copyright 1997-2002 by Sleepycat Software, Inc.-->
+<!--$Id: version.so,v 10.24 2003/11/27 18:26:01 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Library version information</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Upgrading Berkeley DB Applications</dl></h3></td>
-<td align=right><a href="../../ref/build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Library version information</h1>
+<h3 align=center>Library version information</h3>
<p>Each release of the Berkeley DB library has a major version number, a minor
-version number, and a patch number.
+version number, and a patch number.</p>
<p>The major version number changes only when major portions of the Berkeley DB
functionality have been changed. In this case, it may be necessary to
significantly modify applications in order to upgrade them to use the new
-version of the library.
+version of the library.</p>
<p>The minor version number changes when Berkeley DB interfaces have changed,
and the new release is not entirely backward-compatible with previous
releases. To upgrade applications to the new version, they must be
recompiled and potentially, minor modifications made (for example, the
-order of arguments to a function might have changed).
+order of arguments to a function might have changed).</p>
<p>The patch number changes on each release. If only the patch number has
changed in a release, applications do not need to be recompiled, and
they can be upgraded to the new version by installing the new version
of a shared library or by relinking the application to the new version
-of a static library.
+of a static library.</p>
<p>Internal Berkeley DB interfaces may change at any time and during any release,
without warning. This means that the library must be entirely recompiled
and reinstalled when upgrading to new releases of the library because
there is no guarantee that modules from the current version of the
-library will interact correctly with modules from a previous release.
+library will interact correctly with modules from a previous release.</p>
<p>To retrieve the Berkeley DB version information, applications should use the
-<a href="../../api_c/env_version.html">db_version</a> interface. In addition to the previous
-information, the <a href="../../api_c/env_version.html">db_version</a> interface returns a string
-encapsulating the version information, suitable for display to a user.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
+<a href="../../api_c/env_version.html">db_version</a> function. In addition to the previous
+information, the <a href="../../api_c/env_version.html">db_version</a> function returns a string
+encapsulating the version information, suitable for display to a user.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../build_vxworks/faq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../upgrade/process.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/build.html b/db/docs/ref/xa/build.html
index 4ceb54385..12499ff82 100644
--- a/db/docs/ref/xa/build.html
+++ b/db/docs/ref/xa/build.html
@@ -1,24 +1,25 @@
-<!--Id: build.so,v 10.7 2001/05/03 14:22:07 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: build.so,v 10.11 2003/10/18 19:16:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Building a Global Transaction Manager</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distributed Transactions</dl></h3></td>
-<td align=right><a href="../../ref/xa/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/xa_intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../xa/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/xa_intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Building a Global Transaction Manager</h1>
+<h3 align=center>Building a Global Transaction Manager</h3>
<p>Managing distributed transactions and using the two-phase commit
protocol of Berkeley DB from an application requires the application provide
the functionality of a global transaction manager (GTM). The GTM is
-responsible for the following:
+responsible for the following:</p>
<p><ul type=disc>
<li>Communicating with the multiple environments (potentially on separate
systems).
@@ -39,7 +40,7 @@ may use its own messaging capability, translating messages on the remote
machine into calls into the Berkeley DB library (including the recovery
calls). For some applications, it might be sufficient to use Tcl's
remote invocation to remote copies of the tclsh utility into which the
-Berkeley DB library has been dynamically loaded.
+Berkeley DB library has been dynamically loaded.</p>
<h3>Managing the Global Transaction ID (GID) name space</h3>
<p>A global transaction is a transaction that spans multiple environments.
Each global transaction must have a unique transaction ID. This unique
@@ -50,7 +51,7 @@ global transaction manager to assign GIDs, guarantee their uniqueness,
and manage the mapping of local transactions to GID. That is, for each
GID, the GTM should know which local transactions managers participated.
The Berkeley DB logging system or a Berkeley DB table could be used to record this
-information.
+information.</p>
<h3>Maintaining state for each distributed transaction.</h3>
<p>In addition to knowing which local environments participate in each
global transaction, the GTM must also know the state of each active
@@ -59,28 +60,29 @@ is, a second environment participates), the GTM must record the
existence of the global transaction and all participants (whether this
must reside on stable storage or not depends on the exact configuration
of the system). As new environments participate, the GTM must keep this
-information up to date.
+information up to date.</p>
<p>When the GTM is ready to begin commit processing, it should issue
-<a href="../../api_c/txn_prepare.html">txn_prepare</a> calls to each participating environment, indicating
+<a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a> calls to each participating environment, indicating
the GID of the global transaction. Once all the participants have
successfully prepared, then the GTM must record that the global
transaction will be committed. This record should go to stable
storage. Once written to stable storage, the GTM can send
-<a href="../../api_c/txn_commit.html">txn_commit</a> requests to each participating environment. Once
+<a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a> requests to each participating environment. Once
all environments have successfully completed the commit, the GTM can
either record the successful commit or can somehow "forget" the global
-transaction.
+transaction.</p>
<p>If nested transactions are used (that is, the <b>parent</b> parameter
-is specified to <a href="../../api_c/txn_begin.html">txn_begin</a>), no <a href="../../api_c/txn_prepare.html">txn_prepare</a> call should
+is specified to <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>), no <a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a> call should
be made on behalf of any child transaction. Only the ultimate parent
-should even issue a <a href="../../api_c/txn_prepare.html">txn_prepare</a>.
+should even issue a <a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a>.
+</p>
<p>Should any participant fail to prepare, then the GTM must abort the
global transaction. The fact that the transaction is going to be
aborted should be written to stable storage. Once written, the GTM can
-then issue <a href="../../api_c/txn_abort.html">txn_abort</a> requests to each environment. When all
+then issue <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> requests to each environment. When all
aborts have returned successfully, the GTM can either record the
-successful abort or "forget" the global transaction.
-<p>In summary, for each transaction, the GTM must maintain the following:
+successful abort or "forget" the global transaction.</p>
+<p>In summary, for each transaction, the GTM must maintain the following:</p>
<p><ul type=disc>
<li>A list of participating environments
<li>The current state of each transaction (pre-prepare, preparing,
@@ -90,69 +92,77 @@ committing, aborting, done)
<p>If a single environment fails, there is no need to bring down or recover
other environments (the only exception to this is if all environments
are managed in the same application address space and there is a risk
-that the failure of the environment corrupted other environments).
-Instead, once the failing environment comes back up, it should be
-recovered (that is, conventional recovery, via <a href="../../utility/db_recover.html">db_recover</a> or by
-specifying the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> flag to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> should be
-run).
-If the <a href="../../utility/db_recover.html">db_recover</a> utility is used, then the -e option must be
-specified. In this case, the application will almost certainly want
-to specify environmental parameters via a DB_CONFIG file in the
-environment's home directory, so that <a href="../../utility/db_recover.html">db_recover</a> can create
-an appropriately configured environment.
-The GTM should then issue a <a href="../../api_c/txn_recover.html">txn_recover</a> call to the environment.
-This call will return a list of prepared, but not yet committed or
-aborted transactions. For each transaction, the GTM should look up the
-GID in its local store to determine if the transaction should commit or
-abort.
-If the GTM is running in a system with multiple GTMs, it is possible that
-some of the transactions returned via <a href="../../api_c/txn_recover.html">txn_recover</a> do not belong
-to the current environment. The GTM should detect this and call
-<a href="../../api_c/txn_discard.html">txn_discard</a> on each such transaction handle.
-Furthermore, it is important to note that the environment does not
-retain information about which GTM has issued <a href="../../api_c/txn_recover.html">txn_recover</a>
-operations. Therefore, each GTM should issue all its <a href="../../api_c/txn_recover.html">txn_recover</a>
-calls, before another GTM issues its calls. If the calls are interleaved,
-each GTM may not get a complete and consistent set of transactions.
-The simplest way to enforce this is for each GTM to make sure it can
-receive all its outstanding transactions in a single <a href="../../api_c/txn_recover.html">txn_recover</a>
-call. The maximum number of possible outstanding transactions is bounded
-by the maximum number of active transactions in the environment. This
-number can be obtained by using the <a href="../../api_c/txn_stat.html">txn_stat</a> interface or the
-<a href="../../utility/db_stat.html">db_stat</a> utility.
+the failure of the environment corrupted other environments). Instead,
+once the failing environment comes back up, it should be recovered (that
+is, conventional recovery, via <a href="../../utility/db_recover.html">db_recover</a> or by specifying the
+<a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> flag to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> should be run). If the
+<a href="../../utility/db_recover.html">db_recover</a> utility is used, then the -e option must be
+specified. In this case, the application will almost certainly want to
+specify environmental parameters via a DB_CONFIG file in the
+environment's home directory, so that <a href="../../utility/db_recover.html">db_recover</a> can create an
+appropriately configured environment. If the <a href="../../utility/db_recover.html">db_recover</a> utility
+is not used, then <a href="../../api_c/env_open.html#DB_PRIVATE">DB_PRIVATE</a> should not be specified, unless
+all processing including recovery, calls to <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a>, and
+calls to finish prepared, but not yet complete transactions take place
+using the same database environment handle. The GTM should then issue
+a <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> call to the environment. This call will return
+a list of prepared, but not yet committed or aborted transactions. For
+each transaction, the GTM should look up the GID in its local store to
+determine if the transaction should commit or abort.</p>
+<p>If the GTM is running in a system with multiple GTMs, it is possible
+that some of the transactions returned via <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> do not
+belong to the current environment. The GTM should detect this and call
+<a href="../../api_c/txn_discard.html">DB_TXN-&gt;discard</a> on each such transaction handle. Furthermore, it
+is important to note the environment does not retain information about
+which GTM has issued <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> operations. Therefore, each
+GTM should issue all its <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> calls, before another GTM
+issues its calls. If the calls are interleaved, each GTM may not get
+a complete and consistent set of transactions. The simplest way to
+enforce this is for each GTM to make sure it can receive all its
+outstanding transactions in a single <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> call. The
+maximum number of possible outstanding transactions is roughly the
+maximum number of active transactions in the environment (which value
+can be obtained using the <a href="../../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a> method or the <a href="../../utility/db_stat.html">db_stat</a>
+utility). To simplify this procedure, the caller should allocate an
+array large enough to be certain to hold the list of transactions (for
+example, allocate an array able to hold three times the maximum number
+of transactions). If that's not possible, callers should check that the
+array was not completely filled in when <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> returns.
+If the array was completely filled in, each transaction should be
+explicitly discarded, and the call repeated with a larger array.</p>
<p>The newly recovered environment will forbid any new transactions from
being started until the prepared but not yet committed/aborted
transactions have been resolved. In the multiple GTM case, this means
-that all GTMs must recover before any GTM can begin issuing new transactions.
+that all GTMs must recover before any GTM can begin issuing new transactions.</p>
<p>Because Berkeley DB flushed both commit and abort records to disk for
two-phase transaction, once the global transaction has either committed
or aborted, no action will be necessary in any environment. If local
-environments are running with the <a href="../../api_c/env_open.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> option (that
-is, is not writing the log synchronously at commit time), then it is
-possible that a commit or abort operation may not have been written in
-the environment. In this case, the GTM must always have a record of
-completed transactions to determine if prepared transactions should be
-committed or aborted.
+environments are running with the <a href="../../api_c/env_set_flags.html#DB_TXN_WRITE_NOSYNC">DB_TXN_WRITE_NOSYNC</a> or
+<a href="../../api_c/env_set_flags.html#DB_TXN_NOSYNC">DB_TXN_NOSYNC</a> options (that is, is not writing and/or flushing
+the log synchronously at commit time), then it is possible that a commit
+or abort operation may not have been written in the environment. In
+this case, the GTM must always have a record of completed transactions
+to determine if prepared transactions should be committed or aborted.</p>
<h3>Recovering from GTM failure</h3>
<p>If the GTM fails, it must first recover its local state. Assuming the
GTM uses Berkeley DB tables to maintain state, it should run
<a href="../../utility/db_recover.html">db_recover</a> (or the <a href="../../api_c/env_open.html#DB_RECOVER">DB_RECOVER</a> option to
-<a href="../../api_c/env_open.html">DBENV-&gt;open</a>) upon startup. Once the GTM is back up and running,
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a>) upon startup. Once the GTM is back up and running,
it needs to review all its outstanding global transactions, that is all
-transaction which are recorded, but not yet committed or aborted.
+transaction which are recorded, but not yet committed or aborted.</p>
<p>Any global transactions which have not yet reached the prepare phase
should be aborted. If these transactions were on remote systems, the
remote systems should eventually time them out and abort them. If these
transactions are on the local system, we assume they crashed and were
-aborted as part of GTM startup.
+aborted as part of GTM startup.</p>
<p>The GTM must then identify all environments which need to have their
-<a href="../../api_c/txn_recover.html">txn_recover</a> interface called. This includes all environments
-that participate in any transaction that is in the preparing, aborting,
-or committing state. For each environment, the GTM should issue a
-<a href="../../api_c/txn_recover.html">txn_recover</a> call. Once each environment has responded, the GTM
+<a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> methods called. This includes all environments that
+participated in any transaction that is in the preparing, aborting, or
+committing state. For each environment, the GTM should issue a
+<a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> call. Once each environment has responded, the GTM
can determine the fate of each transaction. The correct behavior is
defined depending on the state of the global transaction according to
-the table below.
+the table below.</p>
<p><dl compact>
<p><dt>preparing<dd>if all participating environments return the transaction in the prepared
but not yet committed/aborted state, then the GTM should commit the
@@ -165,8 +175,8 @@ transactions.
transaction in its list of prepared but not yet committed/aborted
transactions.
</dl>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/xa/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/xa_intro.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../xa/intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/xa_intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/faq.html b/db/docs/ref/xa/faq.html
index db1e26a0b..614f2256c 100644
--- a/db/docs/ref/xa/faq.html
+++ b/db/docs/ref/xa/faq.html
@@ -1,55 +1,66 @@
-<!--$Id: faq.so,v 10.11 2000/03/18 21:43:21 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: faq.so,v 10.20 2003/10/18 19:16:21 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
-<title>Berkeley DB Reference Guide: Frequently Asked Questions</title>
+<title>Berkeley DB Reference Guide: XA FAQ</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>XA Resource Manager</dl></h3></td>
-<td width="1%"><a href="../../ref/xa/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distributed Transactions</dl></h3></td>
+<td align=right><a href="../xa/xa_config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Frequently Asked Questions</h1>
-<p><ol>
+<h3 align=center>XA FAQ</h3>
+<ol>
+<p><li><b>Is it possible to mix XA and non-XA transactions?</b>
+<p>Yes. It is also possible for XA and non-XA transactions to coexist in
+the same Berkeley DB environment. To do this, specify the same environment
+to the non-XA <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> calls as was specified in the Tuxedo
+configuration file.</p>
+<hr size=1 noshade>
<p><li><b>Does converting an application to run within XA change any of
the already existing C/C++ API calls it does?</b>
<p>When converting an application to run under XA, the application's Berkeley DB
-calls are unchanged, with two exceptions:
-<p><ol>
-<p><li>The application must use specify the <a href="../../api_c/db_create.html#DB_XA_CREATE">DB_XA_CREATE</a> flag
-to the <a href="../../api_c/db_create.html">db_create</a> interface.
-<p><li>The application should never explicitly call <a href="../../api_c/txn_commit.html">txn_commit</a>,
-<a href="../../api_c/txn_abort.html">txn_abort</a> or <a href="../../api_c/txn_begin.html">txn_begin</a>, as those calls are replaced by
-calls into the Tuxedo transaction manager. For the same reason, the
-application will always specify a transaction argument of NULL to the
-Berkeley DB functions that take transaction arguments (e.g., <a href="../../api_c/db_put.html">DB-&gt;put</a> or
-<a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>).
+calls are unchanged, with three exceptions:</p>
+<ol>
+<p><li>The application must specify the <a href="../../api_c/db_class.html#DB_XA_CREATE">DB_XA_CREATE</a> flag to
+the <a href="../../api_c/db_class.html">db_create</a> function.
+<p><li>Unless the application is performing an operation for a non-XA
+transaction, the application should never explicitly call
+<a href="../../api_c/txn_commit.html">DB_TXN-&gt;commit</a>, <a href="../../api_c/txn_abort.html">DB_TXN-&gt;abort</a> or <a href="../../api_c/txn_begin.html">DB_ENV-&gt;txn_begin</a>, and those
+calls should be replaced by calls into the Tuxedo transaction manager.
+<p><li>Unless the application is performing an operation for a non-XA
+transaction, the application should specify a transaction argument of NULL
+to Berkeley DB methods taking transaction arguments (for example, <a href="../../api_c/db_put.html">DB-&gt;put</a>
+or <a href="../../api_c/db_cursor.html">DB-&gt;cursor</a>).
</ol>
-<p>Otherwise, your application should be unchanged.
-<hr size=1 noshade>
-<p><li><b>Is it possible to mix XA and non-XA transactions?</b>
-<p>Yes. It is also possible for XA and non-XA transactions to co-exist in
-the same Berkeley DB environment. To do this, specify the same environment to
-the non-XA <a href="../../api_c/env_open.html">DBENV-&gt;open</a> calls as was specified in the Tuxedo
-configuration file.
+<p>Otherwise, the application should be unchanged.</p>
<hr size=1 noshade>
-<p><li><b>How does Berkeley DB recovery interact with recovery by the transaction
-manager?</b>
-<p>When the Tuxedo recovery calls the Berkeley DB recovery functions, the standard
-Berkeley DB recovery procedures occur, for all operations that are represented
-in the Berkeley DB log files. This includes any non-XA transactions that were
-performed in the environment. Of course, this means that you can't use
-the standard Berkeley DB utilities (e.g., <a href="../../utility/db_recover.html">db_recover</a>) to perform
-recovery.
-<p>Also, standard log file archival and catastrophic recovery procedures
-should occur independently of XA operation.
+<p><li><b>How does Berkeley DB recovery interact with recovery by the Tuxedo
+transaction manager?</b>
+<p>Recovery is completed in two steps. First, each resource manager should
+recover its environment(s). This can be done via a program that calls
+<a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> or by calling the <a href="../../utility/db_recover.html">db_recover</a> utility. If
+using the <a href="../../utility/db_recover.html">db_recover</a> utility, then the <b>-e</b> option
+should be specified so that the regions that are recovered persist after
+the utility exits. Any transactions that were prepared, but neither
+completed nor aborted, are restored to their prepared state so that they
+may be aborted or committed via the Tuxedo recovery mechanisms. After
+each resource manager has recovered, then Tuxedo recovery may begin.
+Tuxedo will interact with each resource manager via the __db_xa_recover
+function which returns the list of prepared, but not yet completed
+transactions. It should issue a commit or abort for each one, and only
+after having completed each transaction will normal processing resume.</p>
+<p>Finally, standard log file archival and catastrophic recovery procedures
+should occur independently of XA operation.</p>
</ol>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/xa/config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/program/appsignals.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../xa/xa_config.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../apprec/intro.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/intro.html b/db/docs/ref/xa/intro.html
index 7643ee420..338c13a56 100644
--- a/db/docs/ref/xa/intro.html
+++ b/db/docs/ref/xa/intro.html
@@ -1,61 +1,53 @@
-<!--$Id: intro.so,v 10.19 2000/12/04 18:05:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: intro.so,v 10.6 2001/11/17 16:59:33 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
-<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>XA Resource Manager</dl></h3></td>
-<td width="1%"><a href="../../ref/transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
+<table width="100%"><tr valign=top>
+<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distributed Transactions</dl></h3></td>
+<td align=right><a href="../rep/ex_rq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/build.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Introduction</h1>
-<p>Berkeley DB can be used as an XA-compliant resource manager. The XA
-implementation is known to work with the Tuxedo(tm) transaction
-manager.
-<p>The XA support is encapsulated in the resource manager switch
-db_xa_switch, which defines the following functions:
-<p><blockquote><pre>__db_xa_close Close the resource manager.
-__db_xa_commit Commit the specified transaction.
-__db_xa_complete Wait for asynchronous operations to
- complete.
-__db_xa_end Disassociate the application from a
- transaction.
-__db_xa_forget Forget about a transaction that was heuristically
- completed. (Berkeley DB does not support heuristic
- completion.)
-__db_xa_open Open the resource manager.
-__db_xa_prepare Prepare the specified transaction.
-__db_xa_recover Return a list of prepared, but not yet
- committed transactions.
-__db_xa_rollback Abort the specified transaction.
-__db_xa_start Associate the application with a
- transaction.
-</pre></blockquote>
-<p>The Berkeley DB resource manager does not support the following optional
-XA features:
-<ul type=disc>
-<li>Asynchronous operations.
-<li>Transaction migration.
-</ul>
-<p>The Tuxedo System is available from <a href="http://www.beasys.com">BEA Systems, Inc.</a>
-<p>For additional information on Tuxedo, see:
-<p><blockquote><i>Building Client/Server Applications Using Tuxedo</i>,
-by Hall, John Wiley & Sons, Inc. Publishers.</blockquote>
-<p>For additional information on XA Resource Managers, see:
-<p><blockquote>X/Open CAE Specification
-<i>Distributed Transaction Processing: The XA Specification</i>,
-X/Open Document Number: XO/CAE/91/300.</blockquote>
-<p>For additional information on The Tuxedo System, see:
-<p><blockquote><i>The Tuxedo System</i>,
-by Andrade, Carges, Dwyer and Felts, Addison Wesley Longman Publishers.</blockquote>
-<table><tr><td><br></td><td width="1%"><a href="../../ref/transapp/throughput.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../ref/toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/config.html"><img src="../../images/next.gif" alt="Next"></a>
+<h3 align=center>Introduction</h3>
+<p>Berkeley DB provides support for distributed transactions using a two-phase
+commit protocol via its <a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a> and <a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a>
+interfaces. The <a href="../../api_c/txn_prepare.html">DB_TXN-&gt;prepare</a> method performs the first phase of a
+two-phase commit, flushing the log to disk, and associating a global
+transaction ID with the underlying Berkeley DB transaction. This global
+transaction ID should be used by the global transaction manager to
+identify the Berkeley DB transaction, and will be returned by the
+<a href="../../api_c/txn_recover.html">DB_ENV-&gt;txn_recover</a> method when it is called during recovery.</p>
+<p>Distributed transactions are necessary whenever an application wants to
+transaction-protect data in multiple Berkeley DB environments, even if those
+environments are on the same machine. However, Berkeley DB does not perform
+distributed deadlock detection, therefore it is the responsibility of
+the application to ensure that accesses in different environments cannot
+deadlock (this can be accomplished through careful ordering of
+operations to the multiple environments), or by using the
+<a href="../../api_c/lock_vec.html#DB_LOCK_NOWAIT">DB_LOCK_NOWAIT</a> option and eventually abort transactions that
+have been waiting "too long" (where "too long" is determined by an
+application-specific timeout).</p>
+<p>In order to use the two-phase commit feature of Berkeley DB, an application
+must either implement its own global transaction manager or use an
+XA-compliant transaction manager (as Berkeley DB can act as an XA-compliant
+resource manager).</p>
+<p>When using distributed transactions, there is no way to perform
+hot backups of multiple environments and guarantee that the backups
+are global-transaction-consistent across these multiple environments.
+If backups are desired, then all write transactions should be suspended;
+that is, active write transactions must be allowed to complete and no
+new write transactions should be begun. Once there are no active write
+transactions, the logs may be copied for backup purposes and the backup
+will be consistent across the multiple environments.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../rep/ex_rq.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/build.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/xa_config.html b/db/docs/ref/xa/xa_config.html
index 94b46a21c..4e2368181 100644
--- a/db/docs/ref/xa/xa_config.html
+++ b/db/docs/ref/xa/xa_config.html
@@ -1,80 +1,80 @@
-<!--Id: xa_config.so,v 10.21 2001/03/30 20:34:54 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: xa_config.so,v 10.23 2003/06/27 17:38:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: Configuring Berkeley DB with the Tuxedo System</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
+<a name="2"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distributed Transactions</dl></h3></td>
-<td align=right><a href="../../ref/xa/xa_intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../xa/xa_intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>Configuring Berkeley DB with the Tuxedo System</h1>
+<h3 align=center>Configuring Berkeley DB with the Tuxedo System</h3>
<p>This information assumes that you have already installed the Berkeley DB
-library.
+library.</p>
<p>First, you must update the resource manager file in Tuxedo. For the
-purposes of this discussion, assume that the Tuxedo home directory is in
-<p><blockquote><pre>/home/tuxedo</pre></blockquote>
+purposes of this discussion, assume that the Tuxedo home directory is in</p>
+<blockquote><pre>/home/tuxedo</pre></blockquote>
In that case, the resource manager file will be located in
-<p><blockquote><pre>/home/tuxedo/udataobj/RM</pre></blockquote>
+<blockquote><pre>/home/tuxedo/udataobj/RM</pre></blockquote>
Edit the resource manager file, adding the line
-<p><blockquote><pre>BERKELEY-DB:db_xa_switch:-L${DB_INSTALL}/lib -ldb \
+<blockquote><pre>BERKELEY-DB:db_xa_switch:-L${DB_INSTALL}/lib -ldb \
-lsocket -ldl -lm</pre></blockquote>
<p>where ${DB_INSTALLHOME} is the directory into which you installed the Berkeley DB
-library.
+library.</p>
<p><b>Note that the previous load options are for a Sun Microsystems
Solaris 5.6 Sparc installation of Tuxedo, and may not be correct for
-your system.</b>
+your system.</b></p>
<p>Next, you must build the transaction manager server. To do this, use the
Tuxedo <b>buildtms</b>(1) utility. The buildtms utility will create
the Berkeley-DB resource manager in the directory from which it was run.
-The parameters to buildtms should be
-<p><blockquote><pre>buildtms -v -o DBRM -r BERKELEY-DB</pre></blockquote>
+The parameters to buildtms should be</p>
+<blockquote><pre>buildtms -v -o DBRM -r BERKELEY-DB</pre></blockquote>
<p>This will create an executable transaction manager server, DBRM, which is
-called by Tuxedo to process begins, commits, and aborts.
+called by Tuxedo to process begins, commits, and aborts.</p>
<p>Finally, you must make sure that your TUXCONFIG environment variable
identifies an ubbconfig file that properly identifies your resource
managers. In the GROUPS section of the ubb file, you should identify the
group's LMID and GRPNO, as well as the transaction manager server name
"TMSNAME=DBRM." You must also specify the OPENINFO parameter, setting it
-equal to the string
-<p><blockquote><pre>rm_name:dir</pre></blockquote>
+equal to the string</p>
+<blockquote><pre>rm_name:dir</pre></blockquote>
<p>where rm_name is the resource name specified in the RM file (that is,
BERKELEY-DB) and dir is the directory for the Berkeley DB home environment
-(see <a href="../../api_c/env_open.html">DBENV-&gt;open</a> for a discussion of Berkeley DB environments).
+(see <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> for a discussion of Berkeley DB environments).</p>
<p>Because Tuxedo resource manager startup accepts only a single string
for configuration, any environment customization that might have been
-done via the config parameter to <a href="../../api_c/env_open.html">DBENV-&gt;open</a> must instead be done
-by placing a <a href="../../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a> file in the Berkeley DB environment directory.
+done via the config parameter to <a href="../../api_c/env_open.html">DB_ENV-&gt;open</a> must instead be done
+by placing a <a href="../../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> file in the Berkeley DB environment directory.
See <a href="../../ref/env/naming.html">Berkeley DB File Naming</a> for further
-information.
+information.</p>
<p>Consider the following configuration. We have built a transaction
manager server, as described previously. We want the Berkeley DB environment
to be <b>/home/dbhome</b>, our database files to be maintained in
<b>/home/datafiles</b>, our log files to be maintained in
-<b>/home/log</b>, and we want a duplexed server.
-<p>The GROUPS section of the ubb file might look like the following
-<p><blockquote><pre>group_tm LMID=myname GRPNO=1 TMSNAME=DBRM TMSCOUNT=2 \
+<b>/home/log</b>, and we want a duplexed server.</p>
+<p>The GROUPS section of the ubb file might look like the following</p>
+<blockquote><pre>group_tm LMID=myname GRPNO=1 TMSNAME=DBRM TMSCOUNT=2 \
OPENINFO="BERKELEY-DB:/home/dbhome"</pre></blockquote>
-<p>There would be a <a href="../../ref/env/naming.html#DB_CONFIG">DB_CONFIG</a> configuration file in the directory
-<b>/home/dbhome</b> that contained the following two lines:
-<p><blockquote><pre>DB_DATA_DIR /home/datafiles
-DB_LOG_DIR /home/log
-</pre></blockquote>
+<p>There would be a <a href="../../ref/env/db_config.html#DB_CONFIG">DB_CONFIG</a> configuration file in the directory
+<b>/home/dbhome</b> that contained the following two lines:</p>
+<blockquote><pre>set_data_dir /home/datafiles
+set_lg_dir /home/log</pre></blockquote>
<p>Finally, the ubb file must be translated into a binary version using
Tuxedo's <b>tmloadcf</b>(1) utility, and then the pathname of that
-binary file must be specified as your TUXCONFIG environment variable.
+binary file must be specified as your TUXCONFIG environment variable.</p>
<p>At this point, your system is properly initialized to use the Berkeley DB
-resource manager.
-<p>See <a href="../../api_c/db_create.html">db_create</a> for further information on accessing data files
-using XA.
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/xa/xa_intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/faq.html"><img src="../../images/next.gif" alt="Next"></a>
+resource manager.</p>
+<p>See <a href="../../api_c/db_class.html">db_create</a> for further information on accessing data files
+using XA.</p>
+<table width="100%"><tr><td><br></td><td align=right><a href="../xa/xa_intro.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/faq.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/ref/xa/xa_intro.html b/db/docs/ref/xa/xa_intro.html
index 553a6e260..60f526420 100644
--- a/db/docs/ref/xa/xa_intro.html
+++ b/db/docs/ref/xa/xa_intro.html
@@ -1,26 +1,27 @@
-<!--Id: xa_intro.so,v 10.22 2001/03/30 20:34:54 bostic Exp -->
-<!--Copyright 1997-2001 by Sleepycat Software, Inc.-->
+<!--$Id: xa_intro.so,v 10.22 2001/03/30 20:34:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB Reference Guide: XA Introduction</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a> <a name="3"><!--meow--></a>
+<a name="2"><!--meow--></a><a name="3"><!--meow--></a>
<table width="100%"><tr valign=top>
<td><h3><dl><dt>Berkeley DB Reference Guide:<dd>Distributed Transactions</dl></h3></td>
-<td align=right><a href="../../ref/xa/build.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/xa_config.html"><img src="../../images/next.gif" alt="Next"></a>
+<td align=right><a href="../xa/build.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/xa_config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
<p>
-<h1 align=center>XA Introduction</h1>
+<h3 align=center>XA Introduction</h3>
<p>Berkeley DB can be used as an XA-compliant resource manager. The XA
implementation is known to work with the Tuxedo(tm) transaction
-manager.
+manager.</p>
<p>The XA support is encapsulated in the resource manager switch
-db_xa_switch, which defines the following functions:
-<p><blockquote><pre>__db_xa_close Close the resource manager.
+db_xa_switch, which defines the following functions:</p>
+<blockquote><pre>__db_xa_close Close the resource manager.
__db_xa_commit Commit the specified transaction.
__db_xa_complete Wait for asynchronous operations to
complete.
@@ -38,24 +39,24 @@ __db_xa_start Associate the application with a
transaction.
</pre></blockquote>
<p>The Berkeley DB resource manager does not support the following optional
-XA features:
+XA features:</p>
<p><ul type=disc>
<li>Asynchronous operations
<li>Transaction migration
</ul>
-<p>The Tuxedo System is available from <a href="http://www.beasys.com">BEA Systems, Inc.</a>
-<p>For additional information on Tuxedo, see
-<p><blockquote><i>Building Client/Server Applications Using Tuxedo</i>,
+<p>The Tuxedo System is available from <a href="http://www.beasys.com">BEA Systems, Inc.</a></p>
+<p>For additional information on Tuxedo, see</p>
+<blockquote><i>Building Client/Server Applications Using Tuxedo</i>,
by Hall (John Wiley & Sons, Inc.).</blockquote>
-<p>For additional information on XA Resource Managers, see
-<p><blockquote>X/Open CAE Specification
+<p>For additional information on XA Resource Managers, see</p>
+<blockquote>X/Open CAE Specification
<i>Distributed Transaction Processing: The XA Specification</i>,
X/Open Document Number: XO/CAE/91/300.</blockquote>
-<p>For additional information on The Tuxedo System, see
-<p><blockquote><i>The Tuxedo System</i>,
+<p>For additional information on The Tuxedo System, see</p>
+<blockquote><i>The Tuxedo System</i>,
by Andrade, Carges, Dwyer and Felts (Addison Wesley Longman).</blockquote>
-<table width="100%"><tr><td><br></td><td align=right><a href="../../ref/xa/build.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../../reftoc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../../ref/xa/xa_config.html"><img src="../../images/next.gif" alt="Next"></a>
+<table width="100%"><tr><td><br></td><td align=right><a href="../xa/build.html"><img src="../../images/prev.gif" alt="Prev"></a><a href="../toc.html"><img src="../../images/ref.gif" alt="Ref"></a><a href="../xa/xa_config.html"><img src="../../images/next.gif" alt="Next"></a>
</td></tr></table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/reftoc.html b/db/docs/reftoc.html
deleted file mode 100644
index e56bba80b..000000000
--- a/db/docs/reftoc.html
+++ /dev/null
@@ -1,335 +0,0 @@
-<!--Id: reftoc.html,v 10.186 2001/04/26 20:59:15 bostic Exp -->
-<html>
-<head>
-<title>Berkeley DB Tutorial and Reference Guide (Version: 3.3.4)</title>
-<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
-</head>
-<body bgcolor=white>
-
-<center>
-<h1>Berkeley DB Tutorial and Reference Guide (Version: 3.3.4)</h1>
-</center>
-
-<ol>
-<font size="+1"><li><a name="intro">Introduction</a></font>
- <ol>
- <li><a href="ref/intro/data.html">An introduction to data management</a>
- <li><a href="ref/intro/terrain.html">Mapping the terrain: theory and practice</a>
- <li><a href="ref/intro/dbis.html">What is Berkeley DB?</a>
- <li><a href="ref/intro/dbisnot.html">What is Berkeley DB not?</a>
- <li><a href="ref/intro/need.html">Do you need Berkeley DB?</a>
- <li><a href="ref/intro/what.html">What other services does Berkeley DB provide?</a>
- <li><a href="ref/intro/distrib.html">What does the Berkeley DB distribution include?</a>
- <li><a href="ref/intro/where.html">Where does Berkeley DB run?</a>
- <li><a href="ref/intro/products.html">Sleepycat Software's Berkeley DB products</a>
- </ol>
-<font size="+1"><li><a name="simple_tut">A Simple Access Method Tutorial</a></font>
- <ol>
- <li><a href="ref/simple_tut/intro.html">Introduction</a>
- <li><a href="ref/simple_tut/keydata.html">Key/data pairs</a>
- <li><a href="ref/simple_tut/handles.html">Object handles</a>
- <li><a href="ref/simple_tut/errors.html">Error returns</a>
- <li><a href="ref/simple_tut/open.html">Opening a database</a>
- <li><a href="ref/simple_tut/put.html">Adding elements to a database</a>
- <li><a href="ref/simple_tut/get.html">Retrieving elements from a database</a>
- <li><a href="ref/simple_tut/del.html">Removing elements from a database</a>
- <li><a href="ref/simple_tut/close.html">Closing a database</a>
- </ol>
-<font size="+1"><li><a name="am_conf">Access Method Configuration</a></font>
- <ol>
- <li><a href="ref/am_conf/intro.html">What are the available access methods?</a>
- <li><a href="ref/am_conf/select.html">Selecting an access method</a>
- <li><a href="ref/am_conf/logrec.html">Logical record numbers</a>
- <li>General access method configuration
- <ol>
- <li><a href="ref/am_conf/pagesize.html">Selecting a page size</a>
- <li><a href="ref/am_conf/cachesize.html">Selecting a cache size</a>
- <li><a href="ref/am_conf/byteorder.html">Selecting a byte order</a>
- <li><a href="ref/am_conf/dup.html">Duplicate data items</a>
- <li><a href="ref/am_conf/malloc.html">Non-local memory allocation</a>
- </ol>
- <li>Btree access method specific configuration
- <ol>
- <li><a href="ref/am_conf/bt_compare.html">Btree comparison</a>
- <li><a href="ref/am_conf/bt_prefix.html">Btree prefix comparison</a>
- <li><a href="ref/am_conf/bt_minkey.html">Minimum keys per page</a>
- <li><a href="ref/am_conf/bt_recnum.html">
- Retrieving Btree records by logical record number</a>
- </ol>
- <li>Hash access method specific configuration
- <ol>
- <li><a href="ref/am_conf/h_ffactor.html">Page fill factor</a>
- <li><a href="ref/am_conf/h_hash.html">Specifying a database hash</a>
- <li><a href="ref/am_conf/h_nelem.html">Hash table size</a>
- </ol>
- <li>Queue and Recno access method specific configuration
- <ol>
- <li><a href="ref/am_conf/recno.html">Managing record-based databases</a>
- <li><a href="ref/am_conf/extentsize.html">Selecting a Queue extent size</a>
- <li><a href="ref/am_conf/re_source.html">Flat-text backing files</a>
- <li><a href="ref/am_conf/renumber.html">Logically renumbering records</a>
- </ol>
- </ol>
-<font size="+1"><li><a name="am">Access Method Operations</a></font>
- <ol>
- <li><a href="ref/am/ops.html">Access method operations</a>
- <li><a href="ref/am/open.html">Database open</a>
- <li><a href="ref/am/opensub.html">Opening multiple databases in a single file</a>
- <li><a href="ref/am/get.html">Retrieving records</a>
- <li><a href="ref/am/put.html">Storing records</a>
- <li><a href="ref/am/delete.html">Deleting records</a>
- <li><a href="ref/am/stat.html">Database statistics</a>
- <li><a href="ref/am/truncate.html">Database truncation</a>
- <li><a href="ref/am/upgrade.html">Database upgrade</a>
- <li><a href="ref/am/verify.html">Database verification and salvage</a>
- <li><a href="ref/am/sync.html">Flushing the database cache</a>
- <li><a href="ref/am/close.html">Database close</a>
- <li><a href="ref/am/second.html">Secondary indices</a>
- <li><a href="ref/am/cursor.html">Cursor operations</a>
- <ol>
- <li><a href="ref/am/curget.html">Retrieving records with a cursor</a>
- <li><a href="ref/am/curput.html">Storing records with a cursor</a>
- <li><a href="ref/am/curdel.html">Deleting records with a cursor</a>
- <li><a href="ref/am/curdup.html">Duplicating a cursor</a>
- <li><a href="ref/am/join.html">Logical join</a>
- <li><a href="ref/am/count.html">Data item count</a>
- <li><a href="ref/am/curclose.html">Cursor close</a>
- </ol>
- </ol>
-<font size="+1"><li><a name="am_misc">Access Method Wrapup</a></font>
- <ol>
- <li><a href="ref/am_misc/align.html">Data alignment</a>
- <li><a href="ref/am_misc/partial.html">Partial record storage and retrieval</a>
- <li><a href="ref/am_misc/perm.html">Retrieved key/data permanence for C/C++</a>
- <li><a href="ref/am_misc/error.html">Error support</a>
- <li><a href="ref/am_misc/stability.html">Cursor stability</a>
- <li><a href="ref/am_misc/dbsizes.html">Database limits</a>
- <li><a href="ref/am_misc/diskspace.html">Disk space requirements</a>
- <li><a href="ref/am_misc/tune.html">Access method tuning</a>
- <li><a href="ref/am_misc/faq.html">Access method FAQ</a>
- </ol>
-<font size="+1"><li><a name="arch">Berkeley DB Architecture</a></font>
- <ol>
- <li><a href="ref/arch/bigpic.html">The big picture</a>
- <li><a href="ref/arch/progmodel.html">Programming model</a>
- <li><a href="ref/arch/apis.html">Programmatic APIs</a>
- <li><a href="ref/arch/script.html">Scripting languages</a>
- <li><a href="ref/arch/utilities.html">Supporting utilities</a>
- </ol>
-<font size="+1"><li><a name="env">The Berkeley DB Environment</a></font>
- <ol>
- <li><a href="ref/env/intro.html">Introduction</a>
- <li><a href="ref/env/create.html">Creating a database environment</a>
- <li><a href="ref/env/naming.html">File naming</a>
- <li><a href="ref/env/security.html">Security</a>
- <li><a href="ref/env/region.html">Shared memory regions</a>
- <li><a href="ref/env/remote.html">Remote filesystems</a>
- <li><a href="ref/env/open.html">Opening databases within the environment</a>
- <li><a href="ref/env/error.html">Error support</a>
- <li><a href="ref/env/faq.html">Environment FAQ</a>
- </ol>
-<font size="+1"><li><a name="cam">Berkeley DB Concurrent Data Store Applications</a></font>
- <ol>
- <li><a href="ref/cam/intro.html">Berkeley DB Concurrent Data Store applications</a>
- </ol>
-<font size="+1"><li><a name="transapp">Berkeley DB Transactional Data Store Applications</a></font>
- <ol>
- <li><a href="ref/transapp/intro.html">Berkeley DB Transactional Data Store applications</a>
- <li><a href="ref/transapp/why.html">Why transactions?</a>
- <li><a href="ref/transapp/term.html">Terminology</a>
- <li><a href="ref/transapp/app.html">Application structure</a>
- <li><a href="ref/transapp/env_open.html">Opening the environment</a>
- <li><a href="ref/transapp/data_open.html">Opening the databases</a>
- <li><a href="ref/transapp/put.html">Recoverability and deadlock avoidance</a>
- <li><a href="ref/transapp/inc.html">Atomicity</a>
- <li><a href="ref/transapp/read.html">Repeatable reads</a>
- <li><a href="ref/transapp/cursor.html">Transactional cursors</a>
- <li><a href="ref/transapp/nested.html">Nested transactions</a>
- <li><a href="ref/transapp/admin.html">Environment infrastructure</a>
- <li><a href="ref/transapp/deadlock.html">Deadlock detection</a>
- <li><a href="ref/transapp/checkpoint.html">Checkpoints</a>
- <li><a href="ref/transapp/archival.html">Database and log file archival</a>
- <li><a href="ref/transapp/logfile.html">Log file removal</a>
- <li><a href="ref/transapp/recovery.html">Recovery procedures</a>
- <li><a href="ref/transapp/filesys.html">Recovery and filesystem operations</a>
- <li><a href="ref/transapp/reclimit.html">Berkeley DB recoverability</a>
- <li><a href="ref/transapp/tune.html">Transaction tuning</a>
- <li><a href="ref/transapp/throughput.html">Transaction throughput</a>
- </ol>
-<font size="+1"><li><a name="xa">Distributed Transactions</a></font>
- <ol>
- <li><a href="ref/xa/intro.html">Introduction</a>
- <li><a href="ref/xa/build.html">Building a Global Transaction Manager</a>
- <li><a href="ref/xa/xa_intro.html">XA Introduction</a>
- <li><a href="ref/xa/xa_config.html">Configuring Berkeley DB with the Tuxedo System</a>
- <li><a href="ref/xa/faq.html">Frequently Asked Questions</a>
- </ol>
-<font size="+1"><li><a name="program">Programmer Notes</a></font>
- <ol>
- <li><a href="ref/program/appsignals.html">Application signal handling</a>
- <li><a href="ref/program/errorret.html">Error returns to applications</a>
- <li><a href="ref/program/environ.html">Environmental variables</a>
- <li><a href="ref/program/mt.html">Multithreaded applications</a>
- <li><a href="ref/program/scope.html">Berkeley DB handles</a>
- <li><a href="ref/program/namespace.html">Name spaces</a>
- <li><a href="ref/program/copy.html">Copying databases</a>
- <li><a href="ref/program/version.html">Library version information</a>
- <li><a href="ref/program/compatible.html">Compatibility with historic UNIX interfaces</a>
- <li><a href="ref/program/recimp.html">Recovery implementation</a>
- <li><a href="ref/program/extending.html">Application-specific logging and recovery</a>
- <li><a href="ref/program/runtime.html">Run-time configuration</a>
- </ol>
-<font size="+1"><li><a name="lock">The Locking Subsystem</a></font>
- <ol>
- <li><a href="ref/lock/intro.html">Berkeley DB and locking</a>
- <li><a href="ref/lock/page.html">Page locks</a>
- <ol>
- <li><a href="ref/lock/stdmode.html">Standard lock modes</a>
- <li><a href="ref/lock/notxn.html">Locking without transactions</a>
- <li><a href="ref/lock/twopl.html">Locking with transactions: two-phase locking</a>
- </ol>
- <li><a href="ref/lock/am_conv.html">Access method locking conventions</a>
- <li><a href="ref/lock/cam_conv.html">Berkeley DB Concurrent Data Store locking conventions</a>
- <li><a href="ref/lock/dead.html">Deadlocks and deadlock avoidance</a>
- <li><a href="ref/lock/config.html">Configuring locking</a>
- <li><a href="ref/lock/max.html">Configuring locking: sizing the system</a>
- <li><a href="ref/lock/nondb.html">Locking and non-Berkeley DB applications</a>
- </ol>
-<font size="+1"><li><a name="log">The Logging Subsystem</a></font>
- <ol>
- <li><a href="ref/log/intro.html">Berkeley DB and logging</a>
- <li><a href="ref/log/config.html">Configuring logging</a>
- <li><a href="ref/log/limits.html">Log file limits</a>
- </ol>
-<font size="+1"><li><a name="mp">The Memory Pool Subsystem</a></font>
- <ol>
- <li><a href="ref/mp/intro.html">Berkeley DB and the memory pool</a>
- <li><a href="ref/mp/config.html">Configuring the memory pool</a>
- </ol>
-<font size="+1"><li><a name="txn">The Transaction Subsystem</a></font>
- <ol>
- <li><a href="ref/txn/intro.html">Berkeley DB and transactions</a>
- <li><a href="ref/txn/limits.html">Transaction limits</a>
- <li><a href="ref/txn/config.html">Configuring transactions</a>
- <li><a href="ref/txn/other.html">Transactions and non-Berkeley DB applications</a>
- </ol>
-<font size="+1"><li><a name="rpc">RPC Client/Server</a></font>
- <ol>
- <li><a href="ref/rpc/intro.html">Introduction</a>
- <li><a href="ref/rpc/client.html">Client program</a>
- <li><a href="ref/rpc/server.html">Server program</a>
- </ol>
-<font size="+1"><li><a name="java">Java API</a></font>
- <ol>
- <li><a href="ref/java/conf.html">Configuration</a>
- <li><a href="ref/java/compat.html">Compatibility</a>
- <li><a href="ref/java/program.html">Java programming notes</a>
- <li><a href="ref/java/faq.html">Java FAQ</a>
- </ol>
-<font size="+1"><li><a name="perl">Perl API</a></font>
- <ol>
- <li><a href="ref/perl/intro.html">Using Berkeley DB with Perl</a>
- </ol>
-<font size="+1"><li><a name="tcl">Tcl API</a></font>
- <ol>
- <li><a href="ref/tcl/intro.html">Loading Berkeley DB with Tcl</a>
- <li><a href="ref/tcl/using.html">Using Berkeley DB with Tcl</a>
- <li><a href="ref/tcl/program.html">Tcl API programming notes</a>
- <li><a href="ref/tcl/error.html">Tcl error handling</a>
- <li><a href="ref/tcl/faq.html">Tcl FAQ</a>
- </ol>
-<font size="+1"><li><a name="sendmail">Sendmail</a></font>
- <ol>
- <li><a href="ref/sendmail/intro.html">Using Berkeley DB with Sendmail</a>
- </ol>
-<font size="+1"><li><a name="dumpload">Dumping and Reloading Databases</a></font>
- <ol>
- <li><a href="ref/dumpload/utility.html">The db_dump and db_load utilities</a>
- <li><a href="ref/dumpload/format.html">Dump output formats</a>
- <li><a href="ref/dumpload/text.html">Loading text into databases</a>
- </ol>
-<font size="+1"><li><a name="install">System Installation Notes</a></font>
- <ol>
- <li><a href="ref/install/file.html">File utility /etc/magic information</a>
- <li><a href="ref/install/multiple.html">Building with multiple versions of Berkeley DB</a>
- <li><a href="ref/install/rpm.html">Building RPM distribution packages</a>
- </ol>
-<font size="+1"><li><a name="debug">Debugging Applications</a></font>
- <ol>
- <li><a href="ref/debug/intro.html">Introduction</a>
- <li><a href="ref/debug/compile.html">Compile-time configuration</a>
- <li><a href="ref/debug/runtime.html">Run-time error information</a>
- <li><a href="ref/debug/printlog.html">Reviewing Berkeley DB log files</a>
- <li><a href="ref/debug/common.html">Common errors</a>
- </ol>
-<font size="+1"><li><a name="build_unix">Berkeley DB for UNIX and QNX systems</a></font>
- <ol>
- <li><a href="ref/build_unix/intro.html">Building for UNIX</a>
- <li><a href="ref/build_unix/conf.html">Configuring Berkeley DB</a>
- <li><a href="ref/build_unix/flags.html">Changing compile or load options</a>
- <li><a href="ref/build_unix/install.html">Installing Berkeley DB</a>
- <li><a href="ref/build_unix/shlib.html">Dynamic shared libraries</a>
- <li><a href="ref/build_unix/test.html">Running the test suite under UNIX</a>
- <li><a href="ref/build_unix/notes.html">Architecture independent FAQ</a>
- <li>Architecture specific FAQs
- <ol>
- <li><a href="ref/build_unix/aix.html">AIX</a>
- <li><a href="ref/build_unix/embedix.html">Embedix</a>
- <li><a href="ref/build_unix/freebsd.html">FreeBSD</a>
- <li><a href="ref/build_unix/hpux.html">HP-UX</a>
- <li><a href="ref/build_unix/irix.html">IRIX</a>
- <li><a href="ref/build_unix/linux.html">Linux</a>
- <li><a href="ref/build_unix/osf1.html">OSF/1</a>
- <li><a href="ref/build_unix/qnx.html">QNX</a>
- <li><a href="ref/build_unix/sco.html">SCO</a>
- <li><a href="ref/build_unix/solaris.html">Solaris</a>
- <li><a href="ref/build_unix/sunos.html">SunOS</a>
- <li><a href="ref/build_unix/ultrix.html">Ultrix</a>
- </ol>
- </ol>
-<font size="+1"><li><a name="build_win">Berkeley DB for Win32 platforms</a></font>
- <ol>
- <li><a href="ref/build_win/intro.html">Building for Win32</a>
- <li><a href="ref/build_win/test.html">Running the test suite under Windows</a>
- <li><a href="ref/build_win/notes.html">Windows notes</a>
- <li><a href="ref/build_win/faq.html">Windows FAQ</a>
- </ol>
-<font size="+1"><li><a name="build_vxworks">Berkeley DB for VxWorks systems</a></font>
- <ol>
- <li><a href="ref/build_vxworks/intro.html">Building for VxWorks</a>
- <li><a href="ref/build_vxworks/notes.html">VxWorks notes</a>
- <li><a href="ref/build_vxworks/faq.html">VxWorks FAQ</a>
- </ol>
-<font size="+1"><li><a name="upgrade">Upgrading Berkeley DB Applications</a></font>
- <ol>
- <li><a href="ref/upgrade/process.html">
- Upgrading Berkeley DB installations</a>
- <li><a href="ref/upgrade.2.0/toc.html">
- Upgrading Berkeley DB 1.XX applications to Berkeley DB 2.0</a>
- <li><a href="ref/upgrade.3.0/toc.html">
- Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0</a>
- <li><a href="ref/upgrade.3.1/toc.html">
- Upgrading Berkeley DB 3.0.X applications to Berkeley DB 3.1</a>
- <li><a href="ref/upgrade.3.2/toc.html">
- Upgrading Berkeley DB 3.1.X applications to Berkeley DB 3.2</a>
- <li><a href="ref/upgrade.3.3/toc.html">
- Upgrading Berkeley DB 3.2.X applications to Berkeley DB 3.3</a>
- </ol>
-<font size="+1"><li><a name="test">Test Suite</a></font>
- <ol>
- <li><a href="ref/test/run.html">Running the test suite</a>
- <li><a href="ref/test/faq.html">Test suite FAQ</a>
- </ol>
-<font size="+1"><li><a name="distrib">Distribution</a></font>
- <ol>
- <li><a href="ref/distrib/layout.html">Source code layout</a>
- </ol>
-<font size="+1"><li><a name="refs">Additional References</a></font>
- <ol>
- <li><a href="ref/refs/refs.html">Additional references</a>
- </ol>
-</ol>
-
-</body>
-</html>
diff --git a/db/docs/sleepycat/contact.html b/db/docs/sleepycat/contact.html
index c2d1e7f0a..d514114d3 100644
--- a/db/docs/sleepycat/contact.html
+++ b/db/docs/sleepycat/contact.html
@@ -1,107 +1,44 @@
-<!--$Id: contact.html,v 10.8 2000/02/19 20:57:58 bostic Exp $-->
+<!--$Id: contact.html,v 10.15 2003/11/07 19:21:40 bostic Exp $-->
<html>
<head>
<title>The Sleepycat Software Contact Page</title>
<meta name="description" content="DB: A database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
<p align=center>
<img src="../images/sleepycat.gif" alt="Sleepycat Software Inc.">
-<p>
-
-<table>
-<tr>
-
-<td valign=top>
-<b>
-General:
-</b>
-</td><td>
-<a href="mailto:db@sleepycat.com">db@sleepycat.com</a>
-</td>
-
-</tr><tr>
-<td><br></td>
-</tr><tr>
-
-<td valign=top>
-<b>
-Sales and Marketing:
-</b>
-</td><td>
-<a href="mailto:sales@sleepycat.com">sales@sleepycat.com</a><br>
-+1-510-526-3972<br>
-+1-877-SLEEPYCAT (USA only, toll-free)<br>
-</td>
-
-</tr><tr>
-<td><br></td>
-</tr><tr>
-
-<td valign=top>
-<b>
-Technical Support:
-</b>
-</td><td>
-<a href="mailto:support@sleepycat.com">support@sleepycat.com</a>
-</td>
-</tr><tr>
-<td><br></td>
-</tr><tr>
+<blockquote>
-<td valign=top>
-<b>
-Web Site:
-</b>
-</td><td>
-<a href="mailto:webmaster@sleepycat.com">webmaster@sleepycat.com</a>
-</td>
-
-</tr><tr>
-<td><br></td>
-</tr><tr>
+<p>
+<b>Corporate Headquarters:</b><br>
+118 Tower Rd.<br>
+Lincoln, MA 01773-4403<br>
+USA<br>
-<td valign=top>
-<b>
-Press Inquiries:
-</b>
-</td><td>
-Michael Olson, VP Marketing<br>
-Sleepycat Software, Inc.<br>
-<a href="mailto:mao@sleepycat.com">mao@sleepycat.com</a>
-</td>
+<p>
+<b>California Office:</b><br>
+5858 Horton Street, Suite 265<br>
+Emeryville, CA 94608<br>
+USA<br>
-</tr><tr>
-<td><br></td>
-</tr><tr>
+<p>
+<b>Sales:</b><br>
+Voice: +1-617-876-0858<br>
+Toll-free: +1-877-SLEEPYCAT<br>
+Email: <a href="mailto:sales@sleepycat.com">sales@sleepycat.com</a><br>
-<td valign=top>
-<b>
-Postal Mail:
-</b>
-</td><td bgcolor="#EEEEEE">
-<b>Massachussetts Corporate Office</b><br>
-<br>
-Sleepycat Software Inc.<br>
-394 E. Riding Dr.<br>
-Carlisle, MA 01741-1601<br>
-</td>
+<p>
+<b>Support:</b><br>
+Email: <a href="mailto:support@sleepycat.com">support@sleepycat.com</a><br>
-</tr><tr>
+<p>
+<b>General Information:</b><br>
+Email: <a href="mailto:info@sleepycat.com">info@sleepycat.com</a><br>
-<td valign=top>
-</td><td bgcolor="#EEEEEE">
-<b>West Coast Sales Office</b><br>
-<br>
-Sleepycat Software Inc.<br>
-1509 McGee St.<br>
-Berkeley CA 94703<br>
-</td>
-</tr>
-</table>
+</blockquote>
</body>
</html>
diff --git a/db/docs/sleepycat/legal.html b/db/docs/sleepycat/legal.html
index 1945b3976..41ce98378 100644
--- a/db/docs/sleepycat/legal.html
+++ b/db/docs/sleepycat/legal.html
@@ -1,45 +1,54 @@
-<!--$Id: legal.so,v 10.7 2000/03/20 15:02:43 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: legal.so,v 10.18 2003/05/26 16:04:07 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Sleepycat Software Legal Notices</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Sleepycat Software Legal Notices</h1>
-<p>Copyright (c) 1990-2000 Sleepycat Software, Inc., 394 E. Riding Dr.,
-Carlisle, MA 01741-1601 U.S.A. All Rights Reserved.
+<p align=center>
+<img src="../images/sleepycat.gif" alt="Sleepycat Software Inc."></p>
+<h3 align=center>Sleepycat Software Legal Notices</h3>
+<p>Copyright (c) 1990-2003 Sleepycat Software, Inc., 118 Tower Rd.,
+Lincoln, MA 01773, U.S.A. All Rights Reserved.</p>
<p>This product and publication is protected by copyright and distributed
under licenses restricting its use, copying and distribution. Permission
to use this publication or portions of this publication is granted by
Sleepycat Software provided that the above copyright notice appears in
all copies and that use of such publications is for non-commercial use
-only and no modifications of the publication is made.
+only and no modifications of the publication is made.</p>
<p>RESTRICTED RIGHTS: Use, duplication, or disclosure by the U.S. Government
is subject to restrictions of FAR 52.227-14(g)(2)(6/87) and FAR
-52.227-19(6/87), or DFAR 252.227-7015(b)(6/95) and DFAR 227.7202-3(a).
+52.227-19(6/87), or DFAR 252.227-7015(b)(6/95) and DFAR 227.7202-3(a).</p>
<p>Sleepycat and the names of Sleepycat Software products referenced herein
-are either trademarks and/or service marks or registered trademarks and/or
-service marks of Sleepycat Software Inc.
-<p>Sun Microsystems, SunOS and Solaris are trademarks or registered
-trademarks of Sun Microsystems, Inc.
-<p>Hewlett-Packard and HP-UX are trademarks or registered trademarks of
-Hewlett-Packard Company.
-<p>DIGITAL and ULTRIX are trademarks or registered trademarks of Digital
-Equipment Corporation.
-<p>Microsoft, Windows and Windows NT are trademarks or registered trademarks
-of Microsoft Corporation.
-<p>TUXEDO is a trademark or registered trademark of BEA Systems, Inc.
+are trademarks, registered trademarks or service marks of Sleepycat
+Software, Inc.</p>
+<p>DIGITAL and ULTRIX are trademarks, registered trademarks or service
+marks of Compaq Corporation.</p>
+<p>Hewlett-Packard and HP-UX are trademarks, registered trademarks or
+service marks of Hewlett-Packard Company.</p>
+<p>Microsoft, Windows, Windows NT, Windows 2000 and Windows XP are
+trademarks, registered trademarks or service marks of Microsoft
+Corporation.</p>
+<p>QNX and Neutrino are trademarks, registered trademarks or service marks
+QNX Software Systems Ltd.</p>
+<p>Sun Microsystems, SunOS and Solaris are trademarks, registered
+trademarks or service marks of Sun Microsystems, Inc.</p>
+<p>TUXEDO is a trademarks, registered trademark or service mark of BEA
+Systems, Inc.</p>
+<p>VxWorks and Tornado are trademarks, registered trademarks or service
+marks of Wind River Systems Inc.</p>
<p>All other brand, company and product names referenced in this publication
may be trademarks, registered trademarks or service marks of their
-respective holders and are used here for informational purposes only.
+respective holders and are used here for informational purposes only.</p>
<p>WARNING: There is a non-zero chance that, through a process know as
"tunneling," this product may spontaneously disappear from its present
location and reappear at any random place in the universe. Sleepycat
Software will not be responsible for damages or inconvenience that may
-result.
+result.</p>
<p><b>THIS PRODUCT IS PROVIDED BY SLEEPYCAT SOFTWARE "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT,
@@ -50,7 +59,7 @@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.</b>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+SUCH DAMAGE.</b></p>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/sleepycat/license.html b/db/docs/sleepycat/license.html
index 1407eed05..c76dd77ab 100644
--- a/db/docs/sleepycat/license.html
+++ b/db/docs/sleepycat/license.html
@@ -1,20 +1,23 @@
-<!--$Id: license.so,v 10.3 2000/12/04 18:05:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: license.so,v 10.8 2003/11/07 14:36:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Sleepycat Software Product License</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Sleepycat Software Product License</h1>
+<p align=center>
+<img src="../images/sleepycat.gif" alt="Sleepycat Software Inc."></p>
+<h3 align=center>Sleepycat Software Product License</h3>
<p>The following is the license that applies to this copy of the Berkeley DB
software. For a license to use the Berkeley DB software under conditions
-other than those described here, or to purchase support for this software,
-please <a href="contact.html">contact Sleepycat Software</a>.
-<p><blockquote><pre>/*
- * Copyright (c) 1990-2000
+other than those described here, or to purchase support for this
+software, please <a href="contact.html">contact Sleepycat Software</a>.</p>
+<blockquote><pre>/*
+ * Copyright (c) 1990-2003
* Sleepycat Software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -103,7 +106,8 @@ please <a href="contact.html">contact Sleepycat Software</a>.
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- */</pre></blockquote>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+ */
+</pre></blockquote>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/berkeley_db_svc.html b/db/docs/utility/berkeley_db_svc.html
index 9e9c7bb4e..7900ae5ed 100644
--- a/db/docs/utility/berkeley_db_svc.html
+++ b/db/docs/utility/berkeley_db_svc.html
@@ -1,88 +1,72 @@
-<!--$Id: berkeley_db_svc.so,v 10.11 2000/04/15 16:57:38 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: berkeley_db_svc.so,v 10.15 2002/08/24 18:24:49 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: berkeley_db_svc</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>berkeley_db_svc</h1>
+<h3>berkeley_db_svc</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>berkeley_db_svc [<b>-Vv</b>] [<b>-h home</b>]
[<b>-I seconds</b>] [<b>-L file</b>] [<b>-t seconds</b>] [<b>-T seconds</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
-<p>The berkeley_db_svc utility is the Berkeley DB RPC server.
-<p>The options are as follows:
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
+<p>The berkeley_db_svc utility is the Berkeley DB RPC server.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-h</b><dd>Add the specified home directory to the list of allowed home directories
that can be specified by the client. The home directory should be an
absolute pathname. The last component of each home directory specified
-must be unique, as that is how clients specify which database environment
-they wish to join.
+must be unique because that is how clients specify which database environment
+they want to join.
<p>Recovery will be run on each specified environment before the server
begins accepting requests from clients. For this reason, only one copy
-of the server program should ever be run at any time, as recovery must
-always be single-threaded.
+of the server program should ever be run at any time because recovery
+must always be single-threaded.</p>
<p><dt><b>-I</b><dd>Set the default idle timeout for client environments to the specified
number of seconds. The default timeout is 24 hours.
<p><dt><b>-L</b><dd>Log the execution of the berkeley_db_svc utility to the specified file in the
following format, where <i>###</i> is the process ID, and the date
is the time the utility was started.
-<p><blockquote><pre>berkeley_db_svc: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
+<blockquote><pre>berkeley_db_svc: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
This file will be removed if the berkeley_db_svc utility exits gracefully.
<p><dt><b>-t</b><dd>Set the default timeout for client resources (idle transactions and
-cursors) to the
-specified number of seconds. When the timeout expires, if the
-resource is a transaction, it is aborted, if the resource is
-a cursor, it is closed.
-The default timeout is 5 minutes.
-<p><dt><b>-T</b><dd>Set the maximum timeout allowed for client resources.
-The default timeout is 20 minutes.
-If a client application requests a server timeout
-greater than the maximum timeout set for this server, then the client's
-timeout will be capped at the maximum timeout value.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+cursors) to the specified number of seconds. When the timeout expires,
+if the resource is a transaction, it is aborted; if the resource is a
+cursor, it is closed. The default timeout is 5 minutes.
+<p><dt><b>-T</b><dd>Set the maximum timeout allowed for client resources. The default
+timeout is 20 minutes. If a client application requests a server
+timeout greater than the maximum timeout set for this server, the
+client's timeout will be capped at the maximum timeout value.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
<p><dt><b>-v</b><dd>Run in verbose mode.
</dl>
<p>The berkeley_db_svc utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, berkeley_db_svc should always be given the chance to detach from
-the environment and exit gracefully. To cause berkeley_db_svc to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The berkeley_db_svc utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, berkeley_db_svc should always be given the chance to
+detach from the environment and exit gracefully. To cause berkeley_db_svc
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The berkeley_db_svc utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-berkeley_db_svc,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_archive.html b/db/docs/utility/db_archive.html
index 5cc56a428..f1fd08bdc 100644
--- a/db/docs/utility/db_archive.html
+++ b/db/docs/utility/db_archive.html
@@ -1,85 +1,96 @@
-<!--$Id: db_archive.so,v 10.19 2000/04/03 20:10:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_archive.so,v 10.28 2002/11/13 21:49:24 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_archive</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_archive</h1>
+<h3>db_archive</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_archive [<b>-alsVv</b>] [<b>-h home</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
-<p>The db_archive utility writes the pathnames of log files that are
-no longer in use (e.g., no longer involved in active transactions), to
-the standard output, one pathname per line. These log files should be
-written to backup media to provide for recovery in the case of
-catastrophic failure (which also requires a snapshot of the database
-files), but they may then be deleted from the system to reclaim disk
-space.
-<p>The options are as follows:
+<h3><pre>db_archive [<b>-adlsVv</b>] [<b>-h home</b>] [<b>-P password</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
+<p>The db_archive utility writes the pathnames of log files that
+are no longer in use (for example, no longer involved in active
+transactions), to the standard output, one pathname per line. These
+log files should be written to backup media to provide for recovery in
+the case of catastrophic failure (which also requires a snapshot of the
+database files), but they may then be deleted from the system to reclaim
+disk space.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt><b>-a</b><dd>Write all pathnames as absolute pathnames,
-instead of relative to the database home directories.
+<p><dt><b>-a</b><dd>Write all pathnames as absolute pathnames, instead of relative to the
+database home directories.
+<p><dt><b>-d</b><dd>Remove log files that are no longer needed; no filenames are written.
+Automatic log file removal is likely to make catastrophic recovery
+impossible.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
-<p><dt><b>-l</b><dd>Write out the pathnames of all of the database log files,
-whether or not they are involved in active transactions.
-<p><dt><b>-s</b><dd>Write the pathnames of all of the database files that need to be archived
-in order to recover the database from catastrophic failure.
-If any of the database files have not been accessed during the lifetime of
-the current log files, db_archive will
-not include them in this
+<p><dt><b>-l</b><dd>Write out the pathnames of all the database log files, whether or not
+they are involved in active transactions.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
+<p><dt><b>-s</b><dd>Write the pathnames of all the database files that need to be archived
+in order to recover the database from catastrophic failure. If any of
+the database files have not been accessed during the lifetime of the
+current log files, db_archive will not include them in this
output.
-<p>It is possible that some of the files referenced in the log have since
-been deleted from the system.
-In this case, db_archive will ignore them.
-When <a href="../utility/db_recover.html">db_recover</a> is run, any files referenced in the log that
-are not present during recovery are assumed to have been deleted and will
-not be recovered.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p>It is possible that some of the files to which the log refers have since
+been deleted from the system. In this case, db_archive will
+ignore them. When <a href="../utility/db_recover.html">db_recover</a> is run, any files to which the
+log refers that are not present during recovery are assumed to have been
+deleted and will not be recovered.</p>
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
<p><dt><b>-v</b><dd>Run in verbose mode, listing the checkpoints in the log files as they
are reviewed.
</dl>
+<p>Log cursor handles (returned by the <a href="../api_c/log_cursor.html">DB_ENV-&gt;log_cursor</a> method) may have open
+file descriptors for log files in the database environment. Also, the
+Berkeley DB interfaces to the database environment logging subsystem (for
+example, <a href="../api_c/log_put.html">DB_ENV-&gt;log_put</a> and <a href="../api_c/txn_abort.html">DB_TXN-&gt;abort</a>) may allocate log cursors
+and have open file descriptors for log files as well. On operating
+systems where filesystem related system calls (for example, rename and
+unlink on Windows/NT) can fail if a process has an open file descriptor
+for the affected file, attempting to move or remove the log files listed
+by db_archive may fail. All Berkeley DB internal use of log cursors
+operates on active log files only and furthermore, is short-lived in
+nature. So, an application seeing such a failure should be restructured
+to close any open log cursors it may have, and otherwise to retry the
+operation until it succeeds. (Although the latter is not likely to be
+necessary; it is hard to imagine a reason to move or rename a log file
+in which transactions are being logged or aborted.)</p>
<p>The db_archive utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_archive should always be given the chance to detach from
-the environment and exit gracefully. To cause db_archive to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_archive utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_archive should always be given the chance to
+detach from the environment and exit gracefully. To cause db_archive
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The <a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a> method is the underlying method used by the db_archive utility.
+See the db_archive utility source code for an example of using <a href="../api_c/log_archive.html">DB_ENV-&gt;log_archive</a>
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<p>The db_archive utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-db_archive,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_checkpoint.html b/db/docs/utility/db_checkpoint.html
index dc49d03d8..5250662d6 100644
--- a/db/docs/utility/db_checkpoint.html
+++ b/db/docs/utility/db_checkpoint.html
@@ -1,33 +1,33 @@
-<!--$Id: db_checkpoint.so,v 10.22 2000/04/03 20:10:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_checkpoint.so,v 10.26 2002/08/24 18:24:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_checkpoint</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_checkpoint</h1>
+<h3>db_checkpoint</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_checkpoint [<b>-1Vv</b>]
- [<b>-h home</b>] [<b>-k kbytes</b>] [<b>-L file</b>] [<b>-p min</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
+<h3><pre>db_checkpoint [<b>-1Vv</b>] [<b>-h home</b>]
+ [<b>-k kbytes</b>] [<b>-L file</b>] [<b>-P password</b>] [<b>-p min</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
<p>The db_checkpoint utility is a daemon process that monitors the
-database log and periodically calls <a href="../api_c/txn_checkpoint.html">txn_checkpoint</a> to checkpoint it.
-<p>The options are as follows:
+database log, and periodically calls <a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> to checkpoint
+it.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt><b>-1</b><dd>Checkpoint the log once, regardless of whether or not there has
-been activity since the last checkpoint, and then exit.
+<p><dt><b>-1</b><dd>Checkpoint the log once, regardless of whether or not there has been
+activity since the last checkpoint and then exit.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
<p><dt><b>-k</b><dd>Checkpoint the database at least as often as every <b>kbytes</b> of log
@@ -35,48 +35,43 @@ file are written.
<p><dt><b>-L</b><dd>Log the execution of the db_checkpoint utility to the specified file in the
following format, where <i>###</i> is the process ID, and the date
is the time the utility was started.
-<p><blockquote><pre>db_checkpoint: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
+<blockquote><pre>db_checkpoint: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
This file will be removed if the db_checkpoint utility exits gracefully.
-<p><dt><b>-p</b><dd>Checkpoint the database at least every <b>min</b> minutes if
-there has been any activity since the last checkpoint.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
-<p><dt><b>-v</b><dd>Write the time of each checkpoint attempt to the standard
-output.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
+<p><dt><b>-p</b><dd>Checkpoint the database at least every <b>min</b> minutes if there has
+been any activity since the last checkpoint.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
+<p><dt><b>-v</b><dd>Write the time of each checkpoint attempt to the standard output.
</dl>
-<p>At least one of the <b>-1</b>, <b>-k</b> and <b>-p</b> options must
-be specified.
+<p>At least one of the <b>-1</b>, <b>-k</b>, and <b>-p</b> options
+must be specified.</p>
<p>The db_checkpoint utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_checkpoint should always be given the chance to detach from
-the environment and exit gracefully. To cause db_checkpoint to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_checkpoint should always be given the chance to
+detach from the environment and exit gracefully. To cause db_checkpoint
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
<p>The db_checkpoint utility does not attempt to create the Berkeley DB
shared memory regions if they do not already exist. The application
-which creates the region should be started first, and then, once the
-region is created, the db_checkpoint utility should be started.
-<p>The db_checkpoint utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+that creates the region should be started first, and once the region is
+created, the db_checkpoint utility should be started.</p>
+<p>The <a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a> method is the underlying method used by the db_checkpoint utility.
+See the db_checkpoint utility source code for an example of using <a href="../api_c/txn_checkpoint.html">DB_ENV-&gt;txn_checkpoint</a>
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<p>The db_checkpoint utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-db_checkpoint,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_deadlock.html b/db/docs/utility/db_deadlock.html
index dfd23a903..2fadd6b16 100644
--- a/db/docs/utility/db_deadlock.html
+++ b/db/docs/utility/db_deadlock.html
@@ -1,85 +1,87 @@
-<!--$Id: db_deadlock.so,v 10.22 2000/11/29 16:52:38 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_deadlock.so,v 10.30 2002/08/24 18:24:51 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_deadlock</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_deadlock</h1>
+<h3>db_deadlock</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_deadlock [<b>-Vvw</b>]
- [<b>-a o | y</b>] [<b>-h home</b>] [<b>-L file</b>] [<b>-t sec</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
-<p>The db_deadlock utility traverses the database lock structures
-and aborts a lock request each time it detects a deadlock. By default,
-a random lock request is chosen to be aborted. This utility should be
-run as a background daemon, or the underlying Berkeley DB deadlock detection
-interfaces should be called in some other way, whenever there are
-multiple threads or processes accessing a database and at least one of
-them is modifying it.
-<p>The options are as follows:
+<h3><pre>db_deadlock [<b>-Vv</b>]
+ [<b>-a e | m | n | o | w | y</b>] [<b>-h home</b>] [<b>-L file</b>] [<b>-t sec.usec</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
+<p>The db_deadlock utility traverses the database environment lock
+region, and aborts a lock request each time it detects a deadlock or a
+lock request that has timed out. By default, in the case of a deadlock,
+a random lock request is chosen to be aborted.</p>
+<p>This utility should be run as a background daemon, or the underlying
+Berkeley DB deadlock detection interfaces should be called in some other way,
+whenever there are multiple threads or processes accessing a database
+and at least one of them is modifying it.</p>
+<p>The options are as follows:</p>
<p><dl compact>
-<p><dt><b>-a</b><dd>When a deadlock is detected, abort the oldest (o) lock request or the
-youngest (y) lock request.
+<p><dt><b>-a</b><dd>When a deadlock is detected, abort the locker:
+<p><dl compact>
+<p><dt>m<dd>with the greatest number of locks
+<dt>n<dd>with the fewest number of locks
+<dt>o<dd>with the oldest locker ID
+<dt>w<dd>with the fewest number of write locks
+<dt>y<dd>with the youngest locker ID
+</dl>
+<p>When lock or transaction timeouts have been specified:
+<p><dl compact>
+<p><dt>e<dd>abort any lock request that has timed out
+</dl></p>
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
<p><dt><b>-L</b><dd>Log the execution of the db_deadlock utility to the specified file in the
following format, where <i>###</i> is the process ID, and the date
is the time the utility was started.
-<p><blockquote><pre>db_deadlock: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
+<blockquote><pre>db_deadlock: ### Wed Jun 15 01:23:45 EDT 1995</pre></blockquote>
This file will be removed if the db_deadlock utility exits gracefully.
-<p><dt><b>-t</b><dd>Initiate a pass over the database locks at least every <b>sec</b>
-seconds.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p><dt><b>-t</b><dd>Check the database environment every <b>sec</b> seconds plus
+<b>usec</b> microseconds to see if a process has been forced to wait
+for a lock; if one has, review the database environment lock
+structures.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
<p><dt><b>-v</b><dd>Run in verbose mode, generating messages each time the detector runs.
-<p><dt><b>-w</b><dd>Make a single pass over the database locks every time a process is
-forced to wait for a lock.
</dl>
-<p>At least one of the <b>-t</b> and <b>-w</b> options must be specified.
+<p>If the <b>-t</b> option is not specified, db_deadlock will
+run once and exit.</p>
<p>The db_deadlock utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_deadlock should always be given the chance to detach from
-the environment and exit gracefully. To cause db_deadlock to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_deadlock should always be given the chance to
+detach from the environment and exit gracefully. To cause db_deadlock
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
<p>The db_deadlock utility does not attempt to create the Berkeley DB
shared memory regions if they do not already exist. The application
which creates the region should be started first, and then, once the
-region is created, the db_deadlock utility should be started.
-<p>The db_deadlock utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+region is created, the db_deadlock utility should be started.</p>
+<p>The <a href="../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a> method is the underlying method used by the db_deadlock utility.
+See the db_deadlock utility source code for an example of using <a href="../api_c/lock_detect.html">DB_ENV-&gt;lock_detect</a>
+in a IEEE/ANSI Std 1003.1 (POSIX) environment.</p>
+<p>The db_deadlock utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-db_deadlock,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_dump.html b/db/docs/utility/db_dump.html
index bd97b307c..3217d2358 100644
--- a/db/docs/utility/db_dump.html
+++ b/db/docs/utility/db_dump.html
@@ -1,36 +1,35 @@
-<!--$Id: db_dump.so,v 10.26 2000/09/04 16:00:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_dump.so,v 10.33 2003/09/25 15:28:17 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_dump</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_dump</h1>
+<h3>db_dump</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db_dump [<b>-klNpRrV</b>] [<b>-d ahr</b>]
- [<b>-f output</b>] [<b>-h home</b>] [<b>-s database</b>] file
+ [<b>-f output</b>] [<b>-h home</b>] [<b>-P password</b>] [<b>-s database</b>] file
db_dump185 [<b>-p</b>] [<b>-f output</b>] file</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
<p>The db_dump utility reads the database file <b>file</b> and
writes it to the standard output using a portable flat-text format
-understood by the <a href="../utility/db_load.html">db_load</a> utility. The argument <b>file</b>
-must be a file produced using the Berkeley DB library functions.
-<p>The <a href="../utility/db_dump.html">db_dump185</a> utility is similar to the db_dump utility
+understood by the <a href="../utility/db_load.html">db_load</a> utility. The <b>file</b> argument
+must be a file produced using the Berkeley DB library functions.</p>
+<p>The <a href="../utility/db_dump.html">db_dump185</a> utility is similar to the db_dump utility,
except that it reads databases in the format used by Berkeley DB versions 1.85
-and 1.86.
-<p>The options are as follows:
+and 1.86.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-d</b><dd>Dump the specified database in a format helpful for debugging the Berkeley DB
library routines.
@@ -41,88 +40,83 @@ library routines.
mode is used by the recovery tests.
</dl>
<p><b>The output format of the <b>-d</b> option is not standard and may change,
-without notice, between releases of the Berkeley DB library.</b>
+without notice, between releases of the Berkeley DB library.</b></p>
<p><dt><b>-f</b><dd>Write to the specified <b>file</b> instead of to the standard output.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
<p><dt><b>-k</b><dd>Dump record numbers from Queue and Recno databases as keys.
<p><dt><b>-l</b><dd>List the databases stored in the file.
-<p><dt><b>-N</b><dd>Do not acquire shared region locks while running. Other problems such as
-potentially fatal errors in Berkeley DB will be ignored as well. This option
-is intended only for debugging errors and should not be used under any
-other circumstances.
+<p><dt><b>-N</b><dd>Do not acquire shared region mutexes while running. Other problems,
+such as potentially fatal errors in Berkeley DB, will be ignored as well.
+This option is intended only for debugging errors, and should not be
+used under any other circumstances.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
<p><dt><b>-p</b><dd>If characters in either the key or data items are printing characters (as
defined by <b>isprint</b>(3)), use printing characters in <b>file</b>
to represent them. This option permits users to use standard text editors
and tools to modify the contents of databases.
-<p>Note, different systems may have different notions as to what characters
+<p>Note: different systems may have different notions about what characters
are considered <i>printing characters</i>, and databases dumped in
-this manner may be less portable to external systems.
+this manner may be less portable to external systems.</p>
<p><dt><b>-R</b><dd>Aggressively salvage data from a possibly corrupt file. The <b>-R</b>
flag differs from the <b>-r</b> option in that it will return all
possible data from the file at the risk of also returning already deleted
or otherwise nonsensical items. Data dumped in this fashion will almost
certainly have to be edited by hand or other means before the data is
-ready for re-load into another database
+ready for reload into another database
<p><dt><b>-r</b><dd>Salvage data from a possibly corrupt file. When used on a uncorrupted
database, this option should return equivalent data to a normal dump, but
most likely in a different order.
<p><dt><b>-s</b><dd>Specify a single database to dump. If no database is specified, all
databases in the database file are dumped.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
</dl>
-<p>Dumping and reloading Hash databases that use user-defined hash functions
-will result in new databases that use the default hash function.
-While using the default hash function may not be optimal for the new database,
-it will continue to work correctly.
+<p>Dumping and reloading Hash databases that use user-defined hash
+functions will result in new databases that use the default hash
+function. Although using the default hash function may not be optimal
+for the new database, it will continue to work correctly.</p>
<p>Dumping and reloading Btree databases that use user-defined prefix or
comparison functions will result in new databases that use the default
prefix and comparison functions.
<b>In this case, it is quite likely that the database will be damaged
-beyond repair permitting neither record storage or retrieval.</b>
+beyond repair permitting neither record storage or retrieval.</b></p>
<p>The only available workaround for either case is to modify the sources
for the <a href="../utility/db_load.html">db_load</a> utility to load the database using the correct
-hash, prefix and comparison functions.
-<p>The <a href="../utility/db_dump.html">db_dump185</a> utility may not be available on your system as it
-is not always built when the Berkeley DB libraries and utilities are installed.
-If you are unable to find it, see your system administrator for further
-information.
+hash, prefix, and comparison functions.</p>
+<p>The <a href="../utility/db_dump.html">db_dump185</a> utility may not be available on your system
+because it is not always built when the Berkeley DB libraries and utilities
+are installed. If you are unable to find it, see your system
+administrator for further information.</p>
<p>The db_dump and <a href="../utility/db_dump.html">db_dump185</a> utility output formats are
documented in the <a href="../ref/dumpload/format.html">Dump Output
-Formats</a> section of the Reference Guide.
+Formats</a> section of the Berkeley DB Reference Guide.</p>
<p>The db_dump utility may be used with a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_dump should always be given the chance to detach from
-the environment and exit gracefully. To cause db_dump to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>When using an Berkeley DB database environment, the db_dump utility
-does not configure for any kind of database locking and so should not
-be used with active Berkeley DB environments. If db_dump is used in
-an active database environment, corruption may result.
-<p>The db_dump utility exits 0 on success, and &gt;0 if an error occurs.
-<p>The <a href="../utility/db_dump.html">db_dump185</a> utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_dump should always be given the chance to
+detach from the environment and exit gracefully. To cause db_dump
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>Even when using a Berkeley DB database environment, the db_dump
+utility does not use any kind of database locking if it is invoked with
+the <b>-d</b>, <b>-R</b>, or <b>-r</b> arguments. If used with
+one of these arguments, the db_dump utility may only be safely
+run on databases that are not being modified by any other process;
+otherwise, the output may be corrupt.</p>
+<p>The db_dump utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<p>The <a href="../utility/db_dump.html">db_dump185</a> utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-db_dump,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_load.html b/db/docs/utility/db_load.html
index 41084f09c..71c1f3088 100644
--- a/db/docs/utility/db_load.html
+++ b/db/docs/utility/db_load.html
@@ -1,54 +1,58 @@
-<!--$Id: db_load.so,v 10.29 2000/12/04 18:05:45 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_load.so,v 10.38 2002/08/24 18:24:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_load</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_load</h1>
+<h3>db_load</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
<h3><pre>db_load [<b>-nTV</b>] [<b>-c name=value</b>] [<b>-f file</b>]
- [<b>-h home</b>] [<b>-t btree | hash | queue | recno</b>] file</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
+ [<b>-h home</b>] [<b>-P password</b>] [<b>-t btree | hash | queue | recno</b>] file</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
<p>The db_load utility reads from the standard input and loads it
into the database <b>file</b>. The database <b>file</b> is created if
-it does not already exist.
+it does not already exist.</p>
<p>The input to db_load must be in the output format specified by the
<a href="../utility/db_dump.html">db_dump</a> utility, utilities, or as specified for the <b>-T</b>
-below.
-<p>The options are as follows:
+below.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-c</b><dd>Specify configuration options ignoring any value they may have based on
-the input. The command-line format is <b>name=value</b>. See
-<a href="db_load.html#Supported Keywords">Supported Keywords</a> for a
-list of supported words for the <b>-c</b> option.
+the input. The command-line format is <b>name=value</b>. See the
+Supported Keywords section below for a list of keywords supported by
+the <b>-c</b> option.
<p><dt><b>-f</b><dd>Read from the specified <b>input</b> file instead of from the standard
input.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment.
-<p>If a home directory is specified, the database environment is opened using
-the <a href="../api_c/env_open.html#DB_INIT_LOCK">DB_INIT_LOCK</a>, <a href="../api_c/env_open.html#DB_INIT_LOG">DB_INIT_LOG</a>, <a href="../api_c/env_open.html#DB_INIT_MPOOL">DB_INIT_MPOOL</a>,
-<a href="../api_c/env_open.html#DB_INIT_TXN">DB_INIT_TXN</a> and <a href="../api_c/env_open.html#DB_USE_ENVIRON">DB_USE_ENVIRON</a> flags to
-<a href="../api_c/env_open.html">DBENV-&gt;open</a>. (This means that db_load can be used to load
-data into databases while they are in use by other processes.) If the
-<a href="../api_c/env_open.html">DBENV-&gt;open</a> call fails, or if no home directory is specified, the
-database is still updated, but the environment is ignored, e.g., no
-locking is done.
+<p>If a home directory is specified, the database environment is opened
+using the <a href="../api_c/env_open.html#DB_INIT_LOCK">Db.DB_INIT_LOCK</a>, <a href="../api_c/env_open.html#DB_INIT_LOG">Db.DB_INIT_LOG</a>,
+<a href="../api_c/env_open.html#DB_INIT_MPOOL">Db.DB_INIT_MPOOL</a>, <a href="../api_c/env_open.html#DB_INIT_TXN">Db.DB_INIT_TXN</a>, and <a href="../api_c/env_open.html#DB_USE_ENVIRON">Db.DB_USE_ENVIRON</a>
+flags to <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>. (This means that db_load can be
+used to load data into databases while they are in use by other
+processes.) If the <a href="../api_c/env_open.html">DB_ENV-&gt;open</a> call fails, or if no home
+directory is specified, the database is still updated, but the
+environment is ignored; for example, no locking is done.</p>
<p><dt><b>-n</b><dd>Do not overwrite existing keys in the database when loading into an
already existing database. If a key/data pair cannot be loaded into the
database for this reason, a warning message is displayed on the standard
-error output and the key/data pair are skipped.
+error output, and the key/data pair are skipped.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
<p><dt><b>-T</b><dd>The <b>-T</b> option allows non-Berkeley DB applications to easily load text
files into databases.
<p>If the database to be created is of type Btree or Hash, or the keyword
@@ -57,95 +61,87 @@ where the first line of the pair is the key item, and the second line of
the pair is its corresponding data item. If the database to be created
is of type Queue or Recno and the keywork <b>keys</b> is not set, the
input must be lines of text, where each line is a new data item for the
-database.
+database.</p>
<p>A simple escape mechanism, where newline and backslash (\)
characters are special, is applied to the text input. Newline characters
are interpreted as record separators. Backslash characters in the text
-will be interpreted in one of two ways: if the backslash character
+will be interpreted in one of two ways: If the backslash character
precedes another backslash character, the pair will be interpreted as a
literal backslash. If the backslash character precedes any other
character, the two characters following the backslash will be interpreted
-as hexadecimal specification of a single character, e.g., \0a
-is a newline character in the ASCII character set.
+as a hexadecimal specification of a single character; for example,
+\0a is a newline character in the ASCII character set.</p>
<p>For this reason, any backslash or newline characters that naturally
occur in the text input must be escaped to avoid misinterpretation by
-db_load.
+db_load.</p>
<p>If the <b>-T</b> option is specified, the underlying access method type
-must be specified using the <b>-t</b> option.
+must be specified using the <b>-t</b> option.</p>
<p><dt><b>-t</b><dd>Specify the underlying access method. If no <b>-t</b> option is
specified, the database will be loaded into a database of the same type
-as was dumped, e.g., a Hash database will be created if a Hash database
-was dumped.
+as was dumped; for example, a Hash database will be created if a Hash
+database was dumped.
<p>Btree and Hash databases may be converted from one to the other. Queue
and Recno databases may be converted from one to the other. If the
<b>-k</b> option was specified on the call to <a href="../utility/db_dump.html">db_dump</a> then Queue
and Recno databases may be converted to Btree or Hash, with the key being
-the integer record number.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+the integer record number.</p>
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
</dl>
<p>The db_load utility may be used with a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_load should always be given the chance to detach from
-the environment and exit gracefully. To cause db_load to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_load should always be given the chance to
+detach from the environment and exit gracefully. To cause db_load
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
<p>The db_load utility exits 0 on success, 1 if one or more key/data
pairs were not loaded into the database because the key already existed,
-and &gt;1 if an error occurs.
+and &gt;1 if an error occurs.</p>
<h3>Examples</h3>
<p>The db_load utility can be used to load text files into databases.
For example, the following command loads the standard UNIX
<i>/etc/passwd</i> file into a database, with the login name as the
-key item and the entire password entry as the data item:
-<p><blockquote><pre>awk -F: '{print $1; print $0}' &lt; /etc/passwd |
+key item and the entire password entry as the data item:</p>
+<blockquote><pre>awk -F: '{print $1; print $0}' &lt; /etc/passwd |
sed 's/\\/\\\\/g' | db_load -T -t hash passwd.db</pre></blockquote>
<p>Note that backslash characters naturally occurring in the text are escaped
-to avoid interpretation as escape characters by db_load.
-<h1>Environment Variables</h1>
+to avoid interpretation as escape characters by db_load.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
<h3>Supported Keywords</h3>
The following keywords are supported for the <b>-c</b> command-line
option to the db_load utility. See <a href="../api_c/db_open.html">DB-&gt;open</a> for further
discussion of these keywords and what values should be specified.
<p>The parenthetical listing specifies how the value part of the
-<b>name=value</b> pair is interpreted. Items listed as (boolean) expect
-value to be <b>1</b> (set) or <b>0</b> (unset). Items listed as
-(number) convert value to a number. Items listed as (string) use the
-string value without modification.
+<b>name=value</b> pair is interpreted. Items listed as (boolean)
+expect value to be <b>1</b> (set) or <b>0</b> (unset). Items listed
+as (number) convert value to a number. Items listed as (string) use
+the string value without modification.</p>
<p><dl compact>
<dt>bt_minkey (number)<dd>The minimum number of keys per page.
+<dt>chksum (boolean)<dd>Enable page checksums.
<dt>database (string)<dd>The database to load.
<dt>db_lorder (number)<dd>The byte order for integers in the stored database metadata.
-<dt>db_pagesize (number)<dd>The size of pages used for nodes in the tree, in bytes.
-<dt>duplicates (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_DUP">DB_DUP</a> flag.
-<dt>dupsort (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_DUPSORT">DB_DUPSORT</a> flag.
+<dt>db_pagesize (number)<dd>The size of database pages, in bytes.
+<dt>duplicates (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_DUP">Db.DB_DUP</a> flag.
+<dt>dupsort (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_DUPSORT">Db.DB_DUPSORT</a> flag.
+<dt>extentsize (number)<dd>The size of database extents, in pages, for Queue databases configured
+to use extents.
<dt>h_ffactor (number)<dd>The density within the Hash database.
<dt>h_nelem (number)<dd>The size of the Hash database.
-<dt>keys (boolean)<dd>Specify if keys are present for Queue or Recno databases.
+<dt>keys (boolean)<dd>Specify whether keys are present for Queue or Recno databases.
<dt>re_len (number)<dd>Specify fixed-length records of the specified length.
<dt>re_pad (string)<dd>Specify the fixed-length record pad character.
-<dt>recnum (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_RECNUM">DB_RECNUM</a> flag.
-<dt>renumber (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_RENUMBER">DB_RENUMBER</a> flag.
+<dt>recnum (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_RECNUM">Db.DB_RECNUM</a> flag.
+<dt>renumber (boolean)<dd>The value of the <a href="../api_c/db_set_flags.html#DB_RENUMBER">Db.DB_RENUMBER</a> flag.
+<dt>subdatabase (string)<dd>The subdatabase to load.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-db_load,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_printlog.html b/db/docs/utility/db_printlog.html
index 10033e094..f08a72fac 100644
--- a/db/docs/utility/db_printlog.html
+++ b/db/docs/utility/db_printlog.html
@@ -1,69 +1,62 @@
-<!--$Id: db_printlog.so,v 10.10 2000/04/03 20:10:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_printlog.so,v 10.14 2002/08/24 18:24:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_printlog</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_printlog</h1>
+<h3>db_printlog</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_printlog [<b>-NV</b>] [<b>-h home</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
+<h3><pre>db_printlog [<b>-NrV</b>] [<b>-h home</b>] [<b>-P password</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
<p>The db_printlog utility is a debugging utility that dumps Berkeley DB
-log files in a human-readable format.
-<p>The options are as follows:
+log files in a human-readable format.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
-<p><dt><b>-N</b><dd>Do not acquire shared region locks while running. Other problems such as
-potentially fatal errors in Berkeley DB will be ignored as well. This option
-is intended only for debugging errors and should not be used under any
-other circumstances.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p><dt><b>-N</b><dd>Do not acquire shared region mutexes while running. Other problems,
+such as potentially fatal errors in Berkeley DB, will be ignored as well.
+This option is intended only for debugging errors, and should not be
+used under any other circumstances.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
+<p><dt><b>-r</b><dd>Read the log files in reverse order.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
</dl>
<p>For more information on the db_printlog output and using it to
debug applications, see <a href="../ref/debug/printlog.html">Reviewing
-Berkeley DB log files</a>.
+Berkeley DB log files</a>.</p>
<p>The db_printlog utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_printlog should always be given the chance to detach from
-the environment and exit gracefully. To cause db_printlog to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_printlog utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_printlog should always be given the chance to
+detach from the environment and exit gracefully. To cause db_printlog
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_printlog utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_recover.html b/db/docs/utility/db_recover.html
index 80341597c..c32b5b6c7 100644
--- a/db/docs/utility/db_recover.html
+++ b/db/docs/utility/db_recover.html
@@ -1,35 +1,43 @@
-<!--$Id: db_recover.so,v 10.22 2000/05/10 17:56:02 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_recover.so,v 10.27 2002/08/24 18:24:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_recover</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_recover</h1>
+<h3>db_recover</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_recover [<b>-cVv</b>] [<b>-h home</b>] [<b>-t [[CC]YY]MMDDhhmm[.SS]]</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
+<h3><pre>db_recover [<b>-ceVv</b>] [<b>-h home</b>] [<b>-P password</b>] [<b>-t [[CC]YY]MMDDhhmm[.SS]]</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
<p>The db_recover utility must be run after an unexpected application,
Berkeley DB, or system failure to restore the database to a consistent state.
All committed transactions are guaranteed to appear after db_recover
-has run, and all uncommitted transactions will be completely undone.
-<p>The options are as follows:
+has run, and all uncommitted transactions will be completely undone.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-c</b><dd>Perform catastrophic recovery instead of normal recovery.
+<p><dt><b>-e</b><dd>Retain the environment after running recovery. This option
+will rarely be used unless a DB_CONFIG file is present in the home
+directory. If a DB_CONFIG file is not present, then the regions will be
+created with default parameter values.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
<p><dt><b>-t</b><dd>Recover to the time specified rather than to the most current possible
date. The timestamp argument should be in the form
[[CC]YY]MMDDhhmm[.SS] where each pair of
@@ -47,51 +55,39 @@ a "YY" value of 20 is used.
</dl>
<p>If the "CC" and "YY" letter pairs are not specified, the values default
to the current year. If the "SS" letter pair is not specified, the value
-defaults to 0.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+defaults to 0.</p>
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
<p><dt><b>-v</b><dd>Run in verbose mode.
</dl>
-<p>In the case of catastrophic recovery, an archival copy, or
-<i>snapshot</i> of all database files must be restored along with all
-of the log files written since the database file snapshot was made. (If
-disk space is a problem, log files may be referenced by symbolic links).
-For further information on creating a database snapshot, see
-<a href="../ref/transapp/archival.html">Archival Procedures</a>.
-For further information on performing recovery, see
-<a href="../ref/transapp/recovery.html">Recovery Procedures</a>.
+<p>In the case of catastrophic recovery, an archival copy -- or
+<i>snapshot</i> -- of all database files must be restored along with
+all of the log files written since the database file snapshot was made.
+(If disk space is a problem, log files may be referenced by symbolic
+links). For further information on creating a database snapshot, see
+<a href="../ref/transapp/archival.html">Archival Procedures</a>. For
+further information on performing recovery, see
+<a href="../ref/transapp/recovery.html">Recovery Procedures</a>.</p>
<p>If the failure was not catastrophic, the files present on the system at the
-time of failure are sufficient to perform recovery.
+time of failure are sufficient to perform recovery.</p>
<p>If log files are missing, db_recover will identify the missing
log file(s) and fail, in which case the missing log files need to be
-restored and recovery performed again.
+restored and recovery performed again.</p>
<p>The db_recover utility uses a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_recover should always be given the chance to detach from
-the environment and exit gracefully. To cause db_recover to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_recover utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_recover should always be given the chance to
+detach from the environment and exit gracefully. To cause db_recover
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_recover utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-db_recover,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_stat.html b/db/docs/utility/db_stat.html
index ba9263e32..c0533d280 100644
--- a/db/docs/utility/db_stat.html
+++ b/db/docs/utility/db_stat.html
@@ -1,29 +1,28 @@
-<!--$Id: db_stat.so,v 10.27 2000/04/03 20:10:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_stat.so,v 10.40 2002/08/24 18:24:53 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_stat</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_stat</h1>
+<h3>db_stat</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_stat [<b>-celmNtV</b>]
- [<b>-C Acfhlmo</b>] [<b>-d file [<b>-s database</b>]</b>] [<b>-h home</b>] [<b>-M Ahlm</b>]</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a>
-<p>The db_stat utility displays statistics for Berkeley DB environments.
-<p>The options are as follows:
+<h3><pre>db_stat <b>-d</b> <b>file</b> [<b>-fN</b>] [<b>-h home</b>] [<b>-P password</b>] [<b>-s database</b>]
+db_stat [<b>-celmNrtVZ</b>] [<b>-C Aclmop</b>] [<b>-h home</b>] [<b>-M Ahm</b>] [<b>-P password</b>]</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a>
+<p>The db_stat utility displays statistics for Berkeley DB environments.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-C</b><dd>Display internal information about the lock region. (The output from this
option is often both voluminous and meaningless, and is intended only for
@@ -31,74 +30,72 @@ debugging.)
<p><dl compact>
<p><dt>A<dd>Display all information.
<dt>c<dd>Display lock conflict matrix.
-<dt>f<dd>Display lock and object free lists.
<dt>l<dd>Display lockers within hash chains.
<dt>m<dd>Display region memory information.
<dt>o<dd>Display objects within hash chains.
+<dt>p<dd>Display lock region parameters.
</dl>
-<p><dt><b>-c</b><dd>Display lock region statistics as described in <a href="../api_c/lock_stat.html">lock_stat</a>.
+<p><dt><b>-c</b><dd>Display lock region statistics, as described in <a href="../api_c/lock_stat.html">DB_ENV-&gt;lock_stat</a>.
<p><dt><b>-d</b><dd>Display database statistics for the specified file, as described in
<a href="../api_c/db_stat.html">DB-&gt;stat</a>.
<p>If the database contains multiple databases and the <b>-s</b> flag is
not specified, the statistics are for the internal database that describes
-the other databases the file contains, and not for the file as a whole.
+the other databases the file contains, and not for the file as a whole.</p>
<p><dt><b>-e</b><dd>Display current environment statistics.
+<p><dt><b>-f</b><dd>Display only those database statistics that can be
+acquired without traversing the database.
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
-<p><dt><b>-l</b><dd>Display log region statistics as described in <a href="../api_c/log_stat.html">log_stat</a>.
+<p><dt><b>-l</b><dd>Display log region statistics, as described in <a href="../api_c/log_stat.html">DB_ENV-&gt;log_stat</a>.
<p><dt><b>-M</b><dd>Display internal information about the shared memory buffer pool. (The
output from this option is often both voluminous and meaningless, and is
intended only for debugging.)
<p><dl compact>
<p><dt>A<dd>Display all information.
<dt>h<dd>Display buffers within hash chains.
-<dt>l<dd>Display buffers within LRU chains.
<dt>m<dd>Display region memory information.
</dl>
-<p><dt><b>-m</b><dd>Display shared memory buffer pool statistics as described in
-<a href="../api_c/memp_stat.html">memp_stat</a>.
-<p><dt><b>-N</b><dd>Do not acquire shared region locks while running. Other problems such as
-potentially fatal errors in Berkeley DB will be ignored as well. This option
-is intended only for debugging errors and should not be used under any
-other circumstances.
+<p><dt><b>-m</b><dd>Display shared memory buffer pool statistics, as described in
+<a href="../api_c/memp_stat.html">DB_ENV-&gt;memp_stat</a>.
+<p><dt><b>-N</b><dd>Do not acquire shared region mutexes while running. Other problems,
+such as potentially fatal errors in Berkeley DB, will be ignored as well.
+This option is intended only for debugging errors, and should not be
+used under any other circumstances.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
+<p><dt><b>-r</b><dd>Display replication statistics, as described in <a href="../api_c/rep_stat.html">DB_ENV-&gt;rep_stat</a>.
<p><dt><b>-s</b><dd>Display statistics for the specified database contained in the file
specified with the <b>-d</b> flag.
-<p><dt><b>-t</b><dd>Display transaction region statistics as described in <a href="../api_c/txn_stat.html">txn_stat</a>.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p><dt><b>-t</b><dd>Display transaction region statistics, as described in <a href="../api_c/txn_stat.html">DB_ENV-&gt;txn_stat</a>.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
+<p><dt><b>-Z</b><dd>Reset the statistics after reporting them; valid only with the
+<b>-c</b>, <b>-e</b>, <b>-l</b>, <b>-m</b>, and <b>-t</b>
+options.
</dl>
-<p>Only one set of statistics is displayed for each run, and the last option
-specifying a set of statistics takes precedence.
-<p>Values smaller than 10 million are generally displayed without any special
-notation. Values larger than 10 million are normally displayed as
-<b>&lt;number&gt;M</b>.
+<p>Values normally displayed in quantities of bytes are displayed as a
+combination of gigabytes (GB), megabytes (MB), kilobytes (KB), and bytes
+(B). Otherwise, values smaller than 10 million are displayed without
+any special notation, and values larger than 10 million are displayed
+as a number followed by "M".</p>
<p>The db_stat utility may be used with a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_stat should always be given the chance to detach from
-the environment and exit gracefully. To cause db_stat to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_stat utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_stat should always be given the chance to
+detach from the environment and exit gracefully. To cause db_stat
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_stat utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-db_stat,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_upgrade.html b/db/docs/utility/db_upgrade.html
index 6375f380e..735051546 100644
--- a/db/docs/utility/db_upgrade.html
+++ b/db/docs/utility/db_upgrade.html
@@ -1,93 +1,85 @@
-<!--$Id: db_upgrade.so,v 1.4 2000/08/10 17:54:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_upgrade.so,v 1.8 2002/08/24 18:24:54 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_upgrade</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_upgrade</h1>
+<h3>db_upgrade</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_upgrade [<b>-NsV</b>] [<b>-h home</b>] file ...</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a> <a name="4"><!--meow--></a>
+<h3><pre>db_upgrade [<b>-NsV</b>] [<b>-h home</b>] [<b>-P password</b>] file ...</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a><a name="4"><!--meow--></a>
<p>The db_upgrade utility upgrades the Berkeley DB version of one or more
-files and the databases they contain to the current release version.
-<p>The options are as follows:
+files and the databases they contain to the current release version.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
-<p><dt><b>-N</b><dd>Do not acquire shared region locks while running. Other problems such as
-potentially fatal errors in Berkeley DB will be ignored as well. This option
-is intended only for debugging errors and should not be used under any
-other circumstances.
-<p><dt><b>-s</b><dd>This flag is only meaningful when upgrading databases from releases before the
-Berkeley DB 3.1 release.
-<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release, the
-on-disk format of duplicate data items changed. To correctly upgrade the
-format requires applications specify if duplicate data items in the
-database are sorted or not. Specifying the <b>-s</b> flag means that
-the duplicates are sorted, otherwise they are assumed to be unsorted.
-Incorrectly specifying the value of this flag may lead to database
-corruption.
-<p>Because the db_upgrade utility upgrades a physical file (including
-all of the databases it contains), it is not possible to use
+<p><dt><b>-N</b><dd>Do not acquire shared region mutexes while running. Other problems,
+such as potentially fatal errors in Berkeley DB, will be ignored as well.
+This option is intended only for debugging errors, and should not be
+used under any other circumstances.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
+<p><dt><b>-s</b><dd>This flag is only meaningful when upgrading databases from releases
+before the Berkeley DB 3.1 release.
+<p>As part of the upgrade from the Berkeley DB 3.0 release to the 3.1 release,
+the on-disk format of duplicate data items changed. To correctly upgrade
+the format requires that applications specify whether duplicate data
+items in the database are sorted or not. Specifying the <b>-s</b>
+flag means that the duplicates are sorted; otherwise, they are assumed
+to be unsorted. Incorrectly specifying the value of this flag may lead
+to database corruption.</p>
+<p>Because the db_upgrade utility upgrades a physical file
+(including all the databases it contains), it is not possible to use
db_upgrade to upgrade files where some of the databases it
-includes have sorted duplicate data items and some of the databases it
+includes have sorted duplicate data items, and some of the databases it
includes have unsorted duplicate data items. If the file does not have
-more than a single database, or the databases do not support duplicate
-data items, or all of the databases that support duplicate data items
+more than a single database, if the databases do not support duplicate
+data items, or if all the databases that support duplicate data items
support the same style of duplicates (either sorted or unsorted),
-db_upgrade will work correctly as long as the <b>-s</b> flag is
-correctly specified. Otherwise, the file cannot be upgraded using
-db_upgrade, and must be upgraded manually using the <a href="../utility/db_dump.html">db_dump</a>
-and <a href="../utility/db_load.html">db_load</a> utilities.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+db_upgrade will work correctly as long as the <b>-s</b> flag
+is correctly specified. Otherwise, the file cannot be upgraded using
+db_upgrade, and must be upgraded manually using the
+<a href="../utility/db_dump.html">db_dump</a> and <a href="../utility/db_load.html">db_load</a> utilities.</p>
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
</dl>
<p><b>It is important to realize that Berkeley DB database upgrades are done
in place, and so are potentially destructive.</b> This means that if the
system crashes during the upgrade procedure, or if the upgrade procedure
runs out of disk space, the databases may be left in an inconsistent and
unrecoverable state. See <a href="../ref/am/upgrade.html">Upgrading
-databases</a> for more information.
+databases</a> for more information.</p>
<p>The db_upgrade utility may be used with a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_upgrade should always be given the chance to detach from
-the environment and exit gracefully. To cause db_upgrade to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_upgrade utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_upgrade should always be given the chance to
+detach from the environment and exit gracefully. To cause db_upgrade
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_upgrade utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-db_upgrade,
-and
-<a href="../utility/db_verify.html">db_verify</a>.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/db_verify.html b/db/docs/utility/db_verify.html
index 610e857a9..358e11424 100644
--- a/db/docs/utility/db_verify.html
+++ b/db/docs/utility/db_verify.html
@@ -1,73 +1,74 @@
-<!--$Id: db_verify.so,v 10.3 2000/07/13 16:41:50 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: db_verify.so,v 10.10 2003/10/24 22:27:57 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: db_verify</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
- <a name="2"><!--meow--></a>
-<table><tr valign=top>
+<a name="2"><!--meow--></a>
+<table width="100%"><tr valign=top>
<td>
-<h1>db_verify</h1>
+<h3>db_verify</h3>
</td>
-<td width="1%">
-<a href="../api_c/c_index.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
</td></tr></table>
<hr size=1 noshade>
<tt>
-<h3><pre>db_verify [<b>-NqV</b>] [<b>-h home</b>] file ...</pre></h3>
-<h1>Description</h1>
- <a name="3"><!--meow--></a> <a name="4"><!--meow--></a>
+<h3><pre>db_verify [<b>-NoqV</b>] [<b>-h home</b>] [<b>-P password</b>] file ...</pre></h3>
+<h3>Description</h3>
+<a name="3"><!--meow--></a><a name="4"><!--meow--></a>
<p>The db_verify utility verifies the structure of one or more
-files and the databases they contain.
-<p>The options are as follows:
+files and the databases they contain.</p>
+<p>The options are as follows:</p>
<p><dl compact>
<p><dt><b>-h</b><dd>Specify a home directory for the database environment; by
default, the current working directory is used.
-<p><dt><b>-N</b><dd>Do not acquire shared region locks while running. Other problems such as
-potentially fatal errors in Berkeley DB will be ignored as well. This option
-is intended only for debugging errors and should not be used under any
-other circumstances.
+<p><dt><b>-o</b><dd>Skip the database checks for btree and duplicate sort order and for
+hashing.
+<p>If the file being verified contains databases with non-default
+comparison or hashing configurations, calling the db_verify
+utility without the <b>-o</b> flag will usually return failure. The
+<b>-o</b> flag causes db_verify to ignore database sort or
+hash ordering and allows db_verify to be used on these files.
+To fully verify these files, verify them explicitly using the
+<a href="../api_c/db_verify.html">DB-&gt;verify</a> method, after configuring the correct comparison or hashing
+functions.</p>
+<p><dt><b>-N</b><dd>Do not acquire shared region mutexes while running. Other problems,
+such as potentially fatal errors in Berkeley DB, will be ignored as well.
+This option is intended only for debugging errors, and should not be
+used under any other circumstances.
+<p><dt><b>-P</b><dd>Specify an environment password. Although Berkeley DB utilities overwrite
+password strings as soon as possible, be aware there may be a window of
+vulnerability on systems where unprivileged users can see command-line
+arguments or where utilities are not able to overwrite the memory
+containing the command-line arguments.
<p><dt><b>-q</b><dd>Suppress the printing of any error descriptions, simply exit success or
failure.
-<p><dt><b>-V</b><dd>Write the version number to the standard output and exit.
+<p><dt><b>-V</b><dd>Write the library version number to the standard output, and exit.
</dl>
-<p>If the file being verified contains databases using non-default
-comparison or hashing functions, the db_verify utility may
-not be used for verification, as it will likely always return failure.
-Such files must be verified explicitly, using the <a href="../api_c/db_verify.html">DB-&gt;verify</a> function,
-after setting the correct comparison or hashing functions.
+<p><b>The db_verify utility does not perform any locking, even in
+Berkeley DB environments that are configured with a locking subsystem. As
+such, it should only be used on files that are not being modified by
+another thread of control.</b></p>
<p>The db_verify utility may be used with a Berkeley DB environment (as described for the
-<b>-h</b> option, the environment variable <b>DB_HOME</b>, or,
+<b>-h</b> option, the environment variable <b>DB_HOME</b>, or
because the utility was run in a directory containing a Berkeley DB
-environment). In order to avoid environment corruption when using a Berkeley DB
-environment, db_verify should always be given the chance to detach from
-the environment and exit gracefully. To cause db_verify to release all
-environment resources and exit cleanly, send it an interrupt signal
-(SIGINT).
-<p>The db_verify utility exits 0 on success, and &gt;0 if an error occurs.
-<h1>Environment Variables</h1>
+environment). In order to avoid environment corruption when using a
+Berkeley DB environment, db_verify should always be given the chance to
+detach from the environment and exit gracefully. To cause db_verify
+to release all environment resources and exit cleanly, send it an
+interrupt signal (SIGINT).</p>
+<p>The db_verify utility exits 0 on success, and &gt;0 if an error occurs.</p>
+<h3>Environment Variables</h3>
<p><dl compact>
<p><dt>DB_HOME<dd>If the <b>-h</b> option is not specified and the environment variable
DB_HOME is set, it is used as the path of the database home, as described
-in <a href="../api_c/env_open.html">DBENV-&gt;open</a>.
+in <a href="../api_c/env_open.html">DB_ENV-&gt;open</a>.
</dl>
-<h1>See Also</h1>
-<a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a>,
-<a href="../utility/db_archive.html">db_archive</a>,
-<a href="../utility/db_checkpoint.html">db_checkpoint</a>,
-<a href="../utility/db_deadlock.html">db_deadlock</a>,
-<a href="../utility/db_dump.html">db_dump</a>,
-<a href="../utility/db_load.html">db_load</a>,
-<a href="../utility/db_recover.html">db_recover</a>,
-<a href="../utility/db_stat.html">db_stat</a>,
-<a href="../utility/db_upgrade.html">db_upgrade</a>,
-and
-db_verify.
</tt>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/docs/utility/index.html b/db/docs/utility/index.html
index 3f0c430ab..3daca8c2d 100644
--- a/db/docs/utility/index.html
+++ b/db/docs/utility/index.html
@@ -1,15 +1,16 @@
-<!--$Id: index.so,v 10.10 2000/04/03 20:10:39 bostic Exp $-->
-<!--Copyright 1997, 1998, 1999, 2000 by Sleepycat Software, Inc.-->
+<!--$Id: index.so,v 10.13 2003/11/27 18:26:08 bostic Exp $-->
+<!--Copyright 1997-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
+<!--See the file LICENSE for redistribution information.-->
<html>
<head>
<title>Berkeley DB: Berkeley DB Supporting Utilities</title>
<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
-<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,java,C,C++">
+<meta name="keywords" content="embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
</head>
<body bgcolor=white>
-<h1 align=center>Berkeley DB Supporting Utilities</h1>
-<p><table border=1 align=center>
+<h3 align=center>Berkeley DB Supporting Utilities</h3>
+<table border=1 align=center>
<tr><th>Utility</th><th>Description</th></tr>
<tr><td><a href="../utility/berkeley_db_svc.html">berkeley_db_svc</a></td><td>RPC server utility</td></tr>
<tr><td><a href="../utility/db_archive.html">db_archive</a></td><td>Archival utility</td></tr>
@@ -23,6 +24,6 @@
<tr><td><a href="../utility/db_upgrade.html">db_upgrade</a></td><td>Database upgrade utility</td></tr>
<tr><td><a href="../utility/db_verify.html">db_verify</a></td><td>Verification utility</td></tr>
</table>
-<p><font size=1><a href="http://www.sleepycat.com">Copyright Sleepycat Software</a></font>
+<p><font size=1><a href="../sleepycat/legal.html">Copyright (c) 1996-2003</a> <a href="http://www.sleepycat.com">Sleepycat Software, Inc.</a> - All rights reserved.</font>
</body>
</html>
diff --git a/db/env/db_salloc.c b/db/env/db_salloc.c
index 0961ac420..3fe9adaa7 100644
--- a/db/env/db_salloc.c
+++ b/db/env/db_salloc.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_salloc.c,v 11.16 2002/08/24 20:27:25 bostic Exp ";
+static const char revid[] = "$Id: db_salloc.c,v 11.17 2003/01/08 04:42:01 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -60,7 +60,7 @@ __db_shalloc_init(area, size)
/*
* __db_shalloc_size --
- * Return size of the shared region, including alignment.
+ * Return the space needed for an allocation, including alignment.
*
* PUBLIC: int __db_shalloc_size __P((size_t, size_t));
*/
diff --git a/db/env/db_shash.c b/db/env/db_shash.c
index 1c33b3830..6c8e2dc42 100644
--- a/db/env/db_shash.c
+++ b/db/env/db_shash.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: db_shash.c,v 11.3 2000/02/14 02:59:49 bostic Exp $";
+static const char revid[] = "$Id: db_shash.c,v 11.7 2003/01/08 04:42:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -30,6 +30,7 @@ static const struct {
u_int32_t power;
u_int32_t prime;
} list[] = {
+ { 32, 37}, /* 2^5 */
{ 64, 67}, /* 2^6 */
{ 128, 131}, /* 2^7 */
{ 256, 257}, /* 2^8 */
@@ -89,8 +90,8 @@ __db_tablesize(n_buckets)
*
* Ref: Sedgewick, Algorithms in C, "Hash Functions"
*/
- if (n_buckets < 64)
- n_buckets = 64;
+ if (n_buckets < 32)
+ n_buckets = 32;
for (i = 0;; ++i) {
if (list[i].power == 0) {
diff --git a/db/env/env_file.c b/db/env/env_file.c
index c7b0fd2e0..6bcfad72b 100644
--- a/db/env/env_file.c
+++ b/db/env/env_file.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002
+ * Copyright (c) 2002-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: env_file.c,v 1.5 2002/03/08 17:47:18 sue Exp ";
+static const char revid[] = "$Id: env_file.c,v 1.8 2003/05/24 14:57:52 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,7 +20,7 @@ static const char revid[] = "Id: env_file.c,v 1.5 2002/03/08 17:47:18 sue Exp ";
#include "db_int.h"
static int __db_overwrite_pass __P((DB_ENV *,
- const char *, DB_FH *, u_int32_t, u_int32_t, u_int32_t));
+ const char *, DB_FH *, u_int32_t, u_int32_t, int));
/*
* __db_fileinit --
@@ -98,12 +98,11 @@ __db_overwrite(dbenv, path)
DB_ENV *dbenv;
const char *path;
{
- DB_FH fh, *fhp;
+ DB_FH *fhp;
u_int32_t mbytes, bytes;
int ret;
- fhp = &fh;
- if ((ret = __os_open(dbenv, path, DB_OSO_REGION, 0, fhp)) == 0 &&
+ if ((ret = __os_open(dbenv, path, DB_OSO_REGION, 0, &fhp)) == 0 &&
(ret = __os_ioinfo(dbenv, path, fhp, &mbytes, &bytes, NULL)) == 0) {
/*
* !!!
@@ -112,19 +111,19 @@ __db_overwrite(dbenv, path)
* or logging filesystems will require operating system support.
*/
if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 0xff)) != 0)
+ dbenv, path, fhp, mbytes, bytes, 255)) != 0)
goto err;
if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 0x00)) != 0)
+ dbenv, path, fhp, mbytes, bytes, 0)) != 0)
goto err;
if ((ret = __db_overwrite_pass(
- dbenv, path, fhp, mbytes, bytes, 0xff)) != 0)
+ dbenv, path, fhp, mbytes, bytes, 255)) != 0)
goto err;
} else
__db_err(dbenv, "%s: %s", path, db_strerror(ret));
-err: if (F_ISSET(fhp, DB_FH_VALID))
- __os_closehandle(dbenv, fhp);
+err: if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
return (ret);
}
@@ -137,7 +136,8 @@ __db_overwrite_pass(dbenv, path, fhp, mbytes, bytes, pattern)
DB_ENV *dbenv;
const char *path;
DB_FH *fhp;
- u_int32_t mbytes, bytes, pattern;
+ int pattern;
+ u_int32_t mbytes, bytes;
{
size_t len, nw;
int i, ret;
diff --git a/db/env/env_method.c b/db/env/env_method.c
index c5f45df71..ac0136920 100644
--- a/db/env/env_method.c
+++ b/db/env/env_method.c
@@ -1,24 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: env_method.c,v 11.31 2000/11/30 00:58:35 ubell Exp $";
+static const char revid[] = "$Id: env_method.c,v 11.113 2003/09/11 17:36:41 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <string.h>
+#ifdef HAVE_RPC
+#include <rpc/rpc.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
+#include <string.h>
#endif
/*
@@ -29,39 +29,43 @@ static const char revid[] = "$Id: env_method.c,v 11.31 2000/11/30 00:58:35 ubell
#define DB_INITIALIZE_DB_GLOBALS 1
#include "db_int.h"
-#include "db_shash.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "lock.h"
-#include "log.h"
-#include "mp.h"
-#include "txn.h"
+#include "dbinc/crypto.h"
+#include "dbinc/hmac.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
#endif
+static int __dbenv_init __P((DB_ENV *));
static void __dbenv_err __P((const DB_ENV *, int, const char *, ...));
static void __dbenv_errx __P((const DB_ENV *, const char *, ...));
-static int __dbenv_set_data_dir __P((DB_ENV *, const char *));
-static void __dbenv_set_errcall __P((DB_ENV *, void (*)(const char *, char *)));
-static void __dbenv_set_errfile __P((DB_ENV *, FILE *));
-static void __dbenv_set_errpfx __P((DB_ENV *, const char *));
+static int __dbenv_get_home __P((DB_ENV *, const char **));
+static int __dbenv_set_app_dispatch __P((DB_ENV *,
+ int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
+static int __dbenv_get_data_dirs __P((DB_ENV *, const char ***));
static int __dbenv_set_feedback __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
-static int __dbenv_set_flags __P((DB_ENV *, u_int32_t, int));
-static int __dbenv_set_mutexlocks __P((DB_ENV *, int));
-static int __dbenv_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
-static int __dbenv_set_recovery_init __P((DB_ENV *, int (*)(DB_ENV *)));
-static int __dbenv_set_server_noclnt
- __P((DB_ENV *, char *, long, long, u_int32_t));
-static int __dbenv_set_shm_key __P((DB_ENV *, long));
-static int __dbenv_set_tmp_dir __P((DB_ENV *, const char *));
-static int __dbenv_set_verbose __P((DB_ENV *, u_int32_t, int));
+static void __dbenv_map_flags __P((DB_ENV *, u_int32_t *, u_int32_t *));
+static int __dbenv_get_flags __P((DB_ENV *, u_int32_t *));
+static int __dbenv_set_rpc_server_noclnt
+ __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
+static int __dbenv_get_shm_key __P((DB_ENV *, long *));
+static int __dbenv_get_tas_spins __P((DB_ENV *, u_int32_t *));
+static int __dbenv_get_tmp_dir __P((DB_ENV *, const char **));
+static int __dbenv_get_verbose __P((DB_ENV *, u_int32_t, int *));
/*
* db_env_create --
* DB_ENV constructor.
+ *
+ * EXTERN: int db_env_create __P((DB_ENV **, u_int32_t));
*/
int
db_env_create(dbenvpp, flags)
@@ -73,23 +77,25 @@ db_env_create(dbenvpp, flags)
/*
* !!!
+ * Our caller has not yet had the opportunity to reset the panic
+ * state or turn off mutex locking, and so we can neither check
+ * the panic state or acquire a mutex in the DB_ENV create path.
+ *
+ * !!!
* We can't call the flags-checking routines, we don't have an
* environment yet.
*/
- if (flags != 0 && flags != DB_CLIENT)
+ if (flags != 0 && !LF_ISSET(DB_RPCCLIENT))
return (EINVAL);
-
if ((ret = __os_calloc(NULL, 1, sizeof(*dbenv), &dbenv)) != 0)
return (ret);
#ifdef HAVE_RPC
- if (LF_ISSET(DB_CLIENT))
+ if (LF_ISSET(DB_RPCCLIENT))
F_SET(dbenv, DB_ENV_RPCCLIENT);
#endif
- ret = __dbenv_init(dbenv);
-
- if (ret != 0) {
- __os_free(dbenv, sizeof(*dbenv));
+ if ((ret = __dbenv_init(dbenv)) != 0) {
+ __os_free(NULL, dbenv);
return (ret);
}
@@ -100,61 +106,100 @@ db_env_create(dbenvpp, flags)
/*
* __dbenv_init --
* Initialize a DB_ENV structure.
- *
- * PUBLIC: int __dbenv_init __P((DB_ENV *));
*/
-int
+static int
__dbenv_init(dbenv)
DB_ENV *dbenv;
{
+ int ret;
+
/*
+ * !!!
+ * Our caller has not yet had the opportunity to reset the panic
+ * state or turn off mutex locking, and so we can neither check
+ * the panic state or acquire a mutex in the DB_ENV create path.
+ *
* Set up methods that are the same in both normal and RPC
*/
dbenv->err = __dbenv_err;
dbenv->errx = __dbenv_errx;
dbenv->set_errcall = __dbenv_set_errcall;
+ dbenv->get_errfile = __dbenv_get_errfile;
dbenv->set_errfile = __dbenv_set_errfile;
+ dbenv->get_errpfx = __dbenv_get_errpfx;
dbenv->set_errpfx = __dbenv_set_errpfx;
#ifdef HAVE_RPC
if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- dbenv->close = __dbcl_env_close;
- dbenv->open = __dbcl_env_open;
+ dbenv->close = __dbcl_env_close_wrap;
+ dbenv->dbremove = __dbcl_env_dbremove;
+ dbenv->dbrename = __dbcl_env_dbrename;
+ dbenv->get_home = __dbcl_env_get_home;
+ dbenv->get_open_flags = __dbcl_env_get_open_flags;
+ dbenv->open = __dbcl_env_open_wrap;
dbenv->remove = __dbcl_env_remove;
+ dbenv->set_alloc = __dbcl_env_alloc;
+ dbenv->set_app_dispatch = __dbcl_set_app_dispatch;
+ dbenv->get_data_dirs = __dbcl_get_data_dirs;
dbenv->set_data_dir = __dbcl_set_data_dir;
+ dbenv->get_encrypt_flags = __dbcl_env_get_encrypt_flags;
+ dbenv->set_encrypt = __dbcl_env_encrypt;
dbenv->set_feedback = __dbcl_env_set_feedback;
+ dbenv->get_flags = __dbcl_env_get_flags;
dbenv->set_flags = __dbcl_env_flags;
- dbenv->set_mutexlocks = __dbcl_set_mutex_locks;
dbenv->set_paniccall = __dbcl_env_paniccall;
- dbenv->set_recovery_init = __dbcl_set_recovery_init;
- dbenv->set_server = __dbcl_envserver;
+ dbenv->set_rpc_server = __dbcl_envrpcserver;
+ dbenv->get_shm_key = __dbcl_get_shm_key;
dbenv->set_shm_key = __dbcl_set_shm_key;
+ dbenv->get_tas_spins = __dbcl_get_tas_spins;
+ dbenv->set_tas_spins = __dbcl_set_tas_spins;
+ dbenv->get_timeout = __dbcl_get_timeout;
+ dbenv->set_timeout = __dbcl_set_timeout;
+ dbenv->get_tmp_dir = __dbcl_get_tmp_dir;
dbenv->set_tmp_dir = __dbcl_set_tmp_dir;
+ dbenv->get_verbose = __dbcl_get_verbose;
dbenv->set_verbose = __dbcl_set_verbose;
} else {
#endif
- dbenv->close = __dbenv_close;
+ dbenv->close = __dbenv_close_pp;
+ dbenv->dbremove = __dbenv_dbremove_pp;
+ dbenv->dbrename = __dbenv_dbrename_pp;
dbenv->open = __dbenv_open;
dbenv->remove = __dbenv_remove;
+ dbenv->get_home = __dbenv_get_home;
+ dbenv->get_open_flags = __dbenv_get_open_flags;
+ dbenv->set_alloc = __dbenv_set_alloc;
+ dbenv->set_app_dispatch = __dbenv_set_app_dispatch;
+ dbenv->get_data_dirs = __dbenv_get_data_dirs;
dbenv->set_data_dir = __dbenv_set_data_dir;
+ dbenv->get_encrypt_flags = __dbenv_get_encrypt_flags;
+ dbenv->set_encrypt = __dbenv_set_encrypt;
dbenv->set_feedback = __dbenv_set_feedback;
+ dbenv->get_flags = __dbenv_get_flags;
dbenv->set_flags = __dbenv_set_flags;
- dbenv->set_mutexlocks = __dbenv_set_mutexlocks;
dbenv->set_paniccall = __dbenv_set_paniccall;
- dbenv->set_recovery_init = __dbenv_set_recovery_init;
- dbenv->set_server = __dbenv_set_server_noclnt;
+ dbenv->set_rpc_server = __dbenv_set_rpc_server_noclnt;
+ dbenv->get_shm_key = __dbenv_get_shm_key;
dbenv->set_shm_key = __dbenv_set_shm_key;
+ dbenv->get_tas_spins = __dbenv_get_tas_spins;
+ dbenv->set_tas_spins = __dbenv_set_tas_spins;
+ dbenv->get_tmp_dir = __dbenv_get_tmp_dir;
dbenv->set_tmp_dir = __dbenv_set_tmp_dir;
+ dbenv->get_verbose = __dbenv_get_verbose;
dbenv->set_verbose = __dbenv_set_verbose;
#ifdef HAVE_RPC
}
#endif
dbenv->shm_key = INVALID_REGION_SEGID;
- dbenv->db_mutexlocks = 1;
+ dbenv->db_ref = 0;
+
+ __os_spin(dbenv);
__log_dbenv_create(dbenv); /* Subsystem specific. */
__lock_dbenv_create(dbenv);
__memp_dbenv_create(dbenv);
+ if ((ret = __rep_dbenv_create(dbenv)) != 0)
+ return (ret);
__txn_dbenv_create(dbenv);
return (0);
@@ -165,7 +210,7 @@ __dbenv_init(dbenv)
* Error message, including the standard error string.
*/
static void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__dbenv_err(const DB_ENV *dbenv, int error, const char *fmt, ...)
#else
__dbenv_err(dbenv, error, fmt, va_alist)
@@ -175,16 +220,7 @@ __dbenv_err(dbenv, error, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
-
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- __db_real_err(dbenv, error, 1, 1, fmt, ap);
-
- va_end(ap);
+ DB_REAL_ERR(dbenv, error, 1, 1, fmt);
}
/*
@@ -192,7 +228,7 @@ __dbenv_err(dbenv, error, fmt, va_alist)
* Error message.
*/
static void
-#ifdef __STDC__
+#ifdef STDC_HEADERS
__dbenv_errx(const DB_ENV *dbenv, const char *fmt, ...)
#else
__dbenv_errx(dbenv, fmt, va_alist)
@@ -201,76 +237,397 @@ __dbenv_errx(dbenv, fmt, va_alist)
va_dcl
#endif
{
- va_list ap;
+ DB_REAL_ERR(dbenv, 0, 0, 1, fmt);
+}
+
+static int
+__dbenv_get_home(dbenv, homep)
+ DB_ENV *dbenv;
+ const char **homep;
+{
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->get_home");
+ *homep = dbenv->db_home;
+ return (0);
+}
+
+/*
+ * __dbenv_set_alloc --
+ * {DB_ENV,DB}->set_alloc.
+ *
+ * PUBLIC: int __dbenv_set_alloc __P((DB_ENV *, void *(*)(size_t),
+ * PUBLIC: void *(*)(void *, size_t), void (*)(void *)));
+ */
+int
+__dbenv_set_alloc(dbenv, mal_func, real_func, free_func)
+ DB_ENV *dbenv;
+ void *(*mal_func) __P((size_t));
+ void *(*real_func) __P((void *, size_t));
+ void (*free_func) __P((void *));
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_alloc");
+
+ dbenv->db_malloc = mal_func;
+ dbenv->db_realloc = real_func;
+ dbenv->db_free = free_func;
+ return (0);
+}
+
+/*
+ * __dbenv_set_app_dispatch --
+ * Set the transaction abort recover function.
+ */
+static int
+__dbenv_set_app_dispatch(dbenv, app_dispatch)
+ DB_ENV *dbenv;
+ int (*app_dispatch) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_app_dispatch");
+
+ dbenv->app_dispatch = app_dispatch;
+ return (0);
+}
+
+/*
+ * __dbenv_get_encrypt_flags --
+ * {DB_ENV,DB}->get_encrypt_flags.
+ *
+ * PUBLIC: int __dbenv_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbenv_get_encrypt_flags(dbenv, flagsp)
+ DB_ENV *dbenv;
+ u_int32_t *flagsp;
+{
+#ifdef HAVE_CRYPTO
+ DB_CIPHER *db_cipher;
+
+ db_cipher = dbenv->crypto_handle;
+ if (db_cipher != NULL && db_cipher->alg == CIPHER_AES)
+ *flagsp = DB_ENCRYPT_AES;
+ else
+ *flagsp = 0;
+ return (0);
+#else
+ COMPQUIET(flagsp, 0);
+ __db_err(dbenv,
+ "library build did not include support for cryptography");
+ return (DB_OPNOTSUP);
+#endif
+}
+
+/*
+ * __dbenv_set_encrypt --
+ * DB_ENV->set_encrypt.
+ *
+ * PUBLIC: int __dbenv_set_encrypt __P((DB_ENV *, const char *, u_int32_t));
+ */
+int
+__dbenv_set_encrypt(dbenv, passwd, flags)
+ DB_ENV *dbenv;
+ const char *passwd;
+ u_int32_t flags;
+{
+#ifdef HAVE_CRYPTO
+ DB_CIPHER *db_cipher;
+ int ret;
+
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_encrypt");
+#define OK_CRYPTO_FLAGS (DB_ENCRYPT_AES)
-#ifdef __STDC__
- va_start(ap, fmt);
+ if (flags != 0 && LF_ISSET(~OK_CRYPTO_FLAGS))
+ return (__db_ferr(dbenv, "DB_ENV->set_encrypt", 0));
+
+ if (passwd == NULL || strlen(passwd) == 0) {
+ __db_err(dbenv, "Empty password specified to set_encrypt");
+ return (EINVAL);
+ }
+ if (!CRYPTO_ON(dbenv)) {
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_CIPHER), &db_cipher))
+ != 0)
+ goto err;
+ dbenv->crypto_handle = db_cipher;
+ } else
+ db_cipher = (DB_CIPHER *)dbenv->crypto_handle;
+
+ if (dbenv->passwd != NULL)
+ __os_free(dbenv, dbenv->passwd);
+ if ((ret = __os_strdup(dbenv, passwd, &dbenv->passwd)) != 0) {
+ __os_free(dbenv, db_cipher);
+ goto err;
+ }
+ /*
+ * We're going to need this often enough to keep around
+ */
+ dbenv->passwd_len = strlen(dbenv->passwd) + 1;
+ /*
+ * The MAC key is for checksumming, and is separate from
+ * the algorithm. So initialize it here, even if they
+ * are using CIPHER_ANY.
+ */
+ __db_derive_mac((u_int8_t *)dbenv->passwd,
+ dbenv->passwd_len, db_cipher->mac_key);
+ switch (flags) {
+ case 0:
+ F_SET(db_cipher, CIPHER_ANY);
+ break;
+ case DB_ENCRYPT_AES:
+ if ((ret = __crypto_algsetup(dbenv, db_cipher, CIPHER_AES, 0))
+ != 0)
+ goto err1;
+ break;
+ default: /* Impossible. */
+ break;
+ }
+ return (0);
+
+err1:
+ __os_free(dbenv, dbenv->passwd);
+ __os_free(dbenv, db_cipher);
+ dbenv->crypto_handle = NULL;
+err:
+ return (ret);
#else
- va_start(ap);
+ COMPQUIET(passwd, NULL);
+ COMPQUIET(flags, 0);
+
+ __db_err(dbenv,
+ "library build did not include support for cryptography");
+ return (DB_OPNOTSUP);
#endif
- __db_real_err(dbenv, 0, 0, 1, fmt, ap);
+}
+
+static void
+__dbenv_map_flags(dbenv, inflagsp, outflagsp)
+ DB_ENV *dbenv;
+ u_int32_t *inflagsp, *outflagsp;
+{
+ COMPQUIET(dbenv, NULL);
- va_end(ap);
+ if (FLD_ISSET(*inflagsp, DB_AUTO_COMMIT)) {
+ FLD_SET(*outflagsp, DB_ENV_AUTO_COMMIT);
+ FLD_CLR(*inflagsp, DB_AUTO_COMMIT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_CDB_ALLDB)) {
+ FLD_SET(*outflagsp, DB_ENV_CDB_ALLDB);
+ FLD_CLR(*inflagsp, DB_CDB_ALLDB);
+ }
+ if (FLD_ISSET(*inflagsp, DB_DIRECT_DB)) {
+ FLD_SET(*outflagsp, DB_ENV_DIRECT_DB);
+ FLD_CLR(*inflagsp, DB_DIRECT_DB);
+ }
+ if (FLD_ISSET(*inflagsp, DB_DIRECT_LOG)) {
+ FLD_SET(*outflagsp, DB_ENV_DIRECT_LOG);
+ FLD_CLR(*inflagsp, DB_DIRECT_LOG);
+ }
+ if (FLD_ISSET(*inflagsp, DB_LOG_AUTOREMOVE)) {
+ FLD_SET(*outflagsp, DB_ENV_LOG_AUTOREMOVE);
+ FLD_CLR(*inflagsp, DB_LOG_AUTOREMOVE);
+ }
+ if (FLD_ISSET(*inflagsp, DB_NOLOCKING)) {
+ FLD_SET(*outflagsp, DB_ENV_NOLOCKING);
+ FLD_CLR(*inflagsp, DB_NOLOCKING);
+ }
+ if (FLD_ISSET(*inflagsp, DB_NOMMAP)) {
+ FLD_SET(*outflagsp, DB_ENV_NOMMAP);
+ FLD_CLR(*inflagsp, DB_NOMMAP);
+ }
+ if (FLD_ISSET(*inflagsp, DB_NOPANIC)) {
+ FLD_SET(*outflagsp, DB_ENV_NOPANIC);
+ FLD_CLR(*inflagsp, DB_NOPANIC);
+ }
+ if (FLD_ISSET(*inflagsp, DB_OVERWRITE)) {
+ FLD_SET(*outflagsp, DB_ENV_OVERWRITE);
+ FLD_CLR(*inflagsp, DB_OVERWRITE);
+ }
+ if (FLD_ISSET(*inflagsp, DB_REGION_INIT)) {
+ FLD_SET(*outflagsp, DB_ENV_REGION_INIT);
+ FLD_CLR(*inflagsp, DB_REGION_INIT);
+ }
+ if (FLD_ISSET(*inflagsp, DB_TIME_NOTGRANTED)) {
+ FLD_SET(*outflagsp, DB_ENV_TIME_NOTGRANTED);
+ FLD_CLR(*inflagsp, DB_TIME_NOTGRANTED);
+ }
+ if (FLD_ISSET(*inflagsp, DB_TXN_NOSYNC)) {
+ FLD_SET(*outflagsp, DB_ENV_TXN_NOSYNC);
+ FLD_CLR(*inflagsp, DB_TXN_NOSYNC);
+ }
+ if (FLD_ISSET(*inflagsp, DB_TXN_NOT_DURABLE)) {
+ FLD_SET(*outflagsp, DB_ENV_TXN_NOT_DURABLE);
+ FLD_CLR(*inflagsp, DB_TXN_NOT_DURABLE);
+ }
+ if (FLD_ISSET(*inflagsp, DB_TXN_WRITE_NOSYNC)) {
+ FLD_SET(*outflagsp, DB_ENV_TXN_WRITE_NOSYNC);
+ FLD_CLR(*inflagsp, DB_TXN_WRITE_NOSYNC);
+ }
+ if (FLD_ISSET(*inflagsp, DB_YIELDCPU)) {
+ FLD_SET(*outflagsp, DB_ENV_YIELDCPU);
+ FLD_CLR(*inflagsp, DB_YIELDCPU);
+ }
}
static int
-__dbenv_set_flags(dbenv, flags, onoff)
+__dbenv_get_flags(dbenv, flagsp)
+ DB_ENV *dbenv;
+ u_int32_t *flagsp;
+{
+ static const u_int32_t env_flags[] = {
+ DB_AUTO_COMMIT,
+ DB_CDB_ALLDB,
+ DB_DIRECT_DB,
+ DB_DIRECT_LOG,
+ DB_LOG_AUTOREMOVE,
+ DB_NOLOCKING,
+ DB_NOMMAP,
+ DB_NOPANIC,
+ DB_OVERWRITE,
+ DB_REGION_INIT,
+ DB_TIME_NOTGRANTED,
+ DB_TXN_NOSYNC,
+ DB_TXN_NOT_DURABLE,
+ DB_TXN_WRITE_NOSYNC,
+ DB_YIELDCPU,
+ 0
+ };
+ u_int32_t f, flags, mapped_flag;
+ int i;
+
+ flags = 0;
+ for (i = 0; (f = env_flags[i]) != 0; i++) {
+ mapped_flag = 0;
+ __dbenv_map_flags(dbenv, &f, &mapped_flag);
+ DB_ASSERT(f == 0);
+ if (F_ISSET(dbenv, mapped_flag) == mapped_flag)
+ LF_SET(env_flags[i]);
+ }
+
+ /* Special cases */
+ if (dbenv->reginfo != NULL &&
+ ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->envpanic != 0) {
+ LF_SET(DB_PANIC_ENVIRONMENT);
+ }
+
+ *flagsp = flags;
+ return (0);
+}
+
+/*
+ * __dbenv_set_flags --
+ * DB_ENV->set_flags.
+ *
+ * PUBLIC: int __dbenv_set_flags __P((DB_ENV *, u_int32_t, int));
+ */
+int
+__dbenv_set_flags(dbenv, flags, on)
DB_ENV *dbenv;
u_int32_t flags;
- int onoff;
+ int on;
{
-#define OK_FLAGS (DB_CDB_ALLDB | DB_NOMMAP | DB_TXN_NOSYNC)
+ u_int32_t mapped_flags;
+ int ret;
- if (LF_ISSET(~OK_FLAGS))
- return (__db_ferr(dbenv, "DBENV->set_flags", 0));
+#define OK_FLAGS \
+ (DB_AUTO_COMMIT | DB_CDB_ALLDB | DB_DIRECT_DB | DB_DIRECT_LOG | \
+ DB_LOG_AUTOREMOVE | DB_NOLOCKING | DB_NOMMAP | DB_NOPANIC | \
+ DB_OVERWRITE | DB_PANIC_ENVIRONMENT | DB_REGION_INIT | \
+ DB_TIME_NOTGRANTED | DB_TXN_NOSYNC | DB_TXN_NOT_DURABLE | \
+ DB_TXN_WRITE_NOSYNC | DB_YIELDCPU)
- if (LF_ISSET(DB_CDB_ALLDB)) {
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_flags: DB_CDB_ALLDB");
- if (onoff)
- F_SET(dbenv, DB_ENV_CDB_ALLDB);
- else
- F_CLR(dbenv, DB_ENV_CDB_ALLDB);
- }
- if (LF_ISSET(DB_NOMMAP)) {
- if (onoff)
- F_SET(dbenv, DB_ENV_NOMMAP);
- else
- F_CLR(dbenv, DB_ENV_NOMMAP);
+ if (LF_ISSET(~OK_FLAGS))
+ return (__db_ferr(dbenv, "DB_ENV->set_flags", 0));
+ if (on) {
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags",
+ flags, DB_TXN_NOSYNC, DB_TXN_NOT_DURABLE)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags",
+ flags, DB_TXN_NOSYNC, DB_TXN_WRITE_NOSYNC)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags",
+ flags, DB_TXN_NOT_DURABLE, DB_TXN_WRITE_NOSYNC)) != 0)
+ return (ret);
+ if (LF_ISSET(DB_DIRECT_DB |
+ DB_DIRECT_LOG) && __os_have_direct() == 0) {
+ __db_err(dbenv,
+ "DB_ENV->set_flags: direct I/O is not supported by this platform");
+ return (EINVAL);
+ }
}
- if (LF_ISSET(DB_TXN_NOSYNC)) {
- if (onoff)
- F_SET(dbenv, DB_ENV_TXN_NOSYNC);
- else
- F_CLR(dbenv, DB_ENV_TXN_NOSYNC);
+
+ if (LF_ISSET(DB_CDB_ALLDB))
+ ENV_ILLEGAL_AFTER_OPEN(dbenv,
+ "DB_ENV->set_flags: DB_CDB_ALLDB");
+ if (LF_ISSET(DB_PANIC_ENVIRONMENT)) {
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv,
+ "DB_ENV->set_flags: DB_PANIC_ENVIRONMENT");
+ PANIC_SET(dbenv, on);
}
+ if (LF_ISSET(DB_REGION_INIT))
+ ENV_ILLEGAL_AFTER_OPEN(dbenv,
+ "DB_ENV->set_flags: DB_REGION_INIT");
+
+ mapped_flags = 0;
+ __dbenv_map_flags(dbenv, &flags, &mapped_flags);
+ if (on)
+ F_SET(dbenv, mapped_flags);
+ else
+ F_CLR(dbenv, mapped_flags);
return (0);
}
static int
+__dbenv_get_data_dirs(dbenv, dirpp)
+ DB_ENV *dbenv;
+ const char ***dirpp;
+{
+ *dirpp = (const char **)dbenv->db_data_dir;
+ return (0);
+}
+
+/*
+ * __dbenv_set_data_dir --
+ * DB_ENV->set_dta_dir.
+ *
+ * PUBLIC: int __dbenv_set_data_dir __P((DB_ENV *, const char *));
+ */
+int
__dbenv_set_data_dir(dbenv, dir)
DB_ENV *dbenv;
const char *dir;
{
int ret;
+ /*
+ * The array is NULL-terminated so it can be returned by get_data_dirs
+ * without a length.
+ */
+
#define DATA_INIT_CNT 20 /* Start with 20 data slots. */
if (dbenv->db_data_dir == NULL) {
if ((ret = __os_calloc(dbenv, DATA_INIT_CNT,
sizeof(char **), &dbenv->db_data_dir)) != 0)
return (ret);
dbenv->data_cnt = DATA_INIT_CNT;
- } else if (dbenv->data_next == dbenv->data_cnt - 1) {
+ } else if (dbenv->data_next == dbenv->data_cnt - 2) {
dbenv->data_cnt *= 2;
if ((ret = __os_realloc(dbenv,
- dbenv->data_cnt * sizeof(char **),
- NULL, &dbenv->db_data_dir)) != 0)
+ (u_int)dbenv->data_cnt * sizeof(char **),
+ &dbenv->db_data_dir)) != 0)
return (ret);
}
- return (__os_strdup(dbenv,
- dir, &dbenv->db_data_dir[dbenv->data_next++]));
+
+ ret = __os_strdup(dbenv,
+ dir, &dbenv->db_data_dir[dbenv->data_next++]);
+ dbenv->db_data_dir[dbenv->data_next] = NULL;
+ return (ret);
}
-static void
+/*
+ * __dbenv_set_errcall --
+ * {DB_ENV,DB}->set_errcall.
+ *
+ * PUBLIC: void __dbenv_set_errcall
+ * PUBLIC: __P((DB_ENV *, void (*)(const char *, char *)));
+ */
+void
__dbenv_set_errcall(dbenv, errcall)
DB_ENV *dbenv;
void (*errcall) __P((const char *, char *));
@@ -278,7 +635,27 @@ __dbenv_set_errcall(dbenv, errcall)
dbenv->db_errcall = errcall;
}
-static void
+/*
+ * __dbenv_get_errfile --
+ * {DB_ENV,DB}->get_errfile.
+ *
+ * PUBLIC: void __dbenv_get_errfile __P((DB_ENV *, FILE **));
+ */
+void
+__dbenv_get_errfile(dbenv, errfilep)
+ DB_ENV *dbenv;
+ FILE **errfilep;
+{
+ *errfilep = dbenv->db_errfile;
+}
+
+/*
+ * __dbenv_set_errfile --
+ * {DB_ENV,DB}->set_errfile.
+ *
+ * PUBLIC: void __dbenv_set_errfile __P((DB_ENV *, FILE *));
+ */
+void
__dbenv_set_errfile(dbenv, errfile)
DB_ENV *dbenv;
FILE *errfile;
@@ -286,7 +663,27 @@ __dbenv_set_errfile(dbenv, errfile)
dbenv->db_errfile = errfile;
}
-static void
+/*
+ * __dbenv_get_errpfx --
+ * {DB_ENV,DB}->get_errpfx.
+ *
+ * PUBLIC: void __dbenv_get_errpfx __P((DB_ENV *, const char **));
+ */
+void
+__dbenv_get_errpfx(dbenv, errpfxp)
+ DB_ENV *dbenv;
+ const char **errpfxp;
+{
+ *errpfxp = dbenv->db_errpfx;
+}
+
+/*
+ * __dbenv_set_errpfx --
+ * {DB_ENV,DB}->set_errpfx.
+ *
+ * PUBLIC: void __dbenv_set_errpfx __P((DB_ENV *, const char *));
+ */
+void
__dbenv_set_errpfx(dbenv, errpfx)
DB_ENV *dbenv;
const char *errpfx;
@@ -303,69 +700,135 @@ __dbenv_set_feedback(dbenv, feedback)
return (0);
}
-static int
-__dbenv_set_mutexlocks(dbenv, onoff)
+/*
+ * __dbenv_set_paniccall --
+ * {DB_ENV,DB}->set_paniccall.
+ *
+ * PUBLIC: int __dbenv_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
+ */
+int
+__dbenv_set_paniccall(dbenv, paniccall)
DB_ENV *dbenv;
- int onoff;
+ void (*paniccall) __P((DB_ENV *, int));
{
- dbenv->db_mutexlocks = onoff;
+ dbenv->db_paniccall = paniccall;
return (0);
}
static int
-__dbenv_set_paniccall(dbenv, paniccall)
+__dbenv_get_shm_key(dbenv, shm_keyp)
DB_ENV *dbenv;
- void (*paniccall) __P((DB_ENV *, int));
+ long *shm_keyp; /* !!!: really a key_t *. */
{
- dbenv->db_paniccall = paniccall;
+ *shm_keyp = dbenv->shm_key;
return (0);
}
-static int
-__dbenv_set_recovery_init(dbenv, recovery_init)
+/*
+ * __dbenv_set_shm_key --
+ * DB_ENV->set_shm_key.
+ *
+ * PUBLIC: int __dbenv_set_shm_key __P((DB_ENV *, long));
+ */
+int
+__dbenv_set_shm_key(dbenv, shm_key)
DB_ENV *dbenv;
- int (*recovery_init) __P((DB_ENV *));
+ long shm_key; /* !!!: really a key_t. */
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_recovery_init");
-
- dbenv->db_recovery_init = recovery_init;
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_shm_key");
+ dbenv->shm_key = shm_key;
return (0);
}
static int
-__dbenv_set_shm_key(dbenv, shm_key)
+__dbenv_get_tas_spins(dbenv, tas_spinsp)
DB_ENV *dbenv;
- long shm_key; /* !!!: really a key_t. */
+ u_int32_t *tas_spinsp;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_shm_key");
+ *tas_spinsp = dbenv->tas_spins;
+ return (0);
+}
- dbenv->shm_key = shm_key;
+/*
+ * __dbenv_set_tas_spins --
+ * DB_ENV->set_tas_spins.
+ *
+ * PUBLIC: int __dbenv_set_tas_spins __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbenv_set_tas_spins(dbenv, tas_spins)
+ DB_ENV *dbenv;
+ u_int32_t tas_spins;
+{
+ dbenv->tas_spins = tas_spins;
return (0);
}
static int
+__dbenv_get_tmp_dir(dbenv, dirp)
+ DB_ENV *dbenv;
+ const char **dirp;
+{
+ *dirp = dbenv->db_tmp_dir;
+ return (0);
+}
+
+/*
+ * __dbenv_set_tmp_dir --
+ * DB_ENV->set_tmp_dir.
+ *
+ * PUBLIC: int __dbenv_set_tmp_dir __P((DB_ENV *, const char *));
+ */
+int
__dbenv_set_tmp_dir(dbenv, dir)
DB_ENV *dbenv;
const char *dir;
{
if (dbenv->db_tmp_dir != NULL)
- __os_freestr(dbenv->db_tmp_dir);
+ __os_free(dbenv, dbenv->db_tmp_dir);
return (__os_strdup(dbenv, dir, &dbenv->db_tmp_dir));
}
static int
-__dbenv_set_verbose(dbenv, which, onoff)
+__dbenv_get_verbose(dbenv, which, onoffp)
DB_ENV *dbenv;
u_int32_t which;
- int onoff;
+ int *onoffp;
{
switch (which) {
case DB_VERB_CHKPOINT:
case DB_VERB_DEADLOCK:
case DB_VERB_RECOVERY:
+ case DB_VERB_REPLICATION:
case DB_VERB_WAITSFOR:
- if (onoff)
+ *onoffp = FLD_ISSET(dbenv->verbose, which) ? 1 : 0;
+ break;
+ default:
+ return (EINVAL);
+ }
+ return (0);
+}
+
+/*
+ * __dbenv_set_verbose --
+ * DB_ENV->set_verbose.
+ *
+ * PUBLIC: int __dbenv_set_verbose __P((DB_ENV *, u_int32_t, int));
+ */
+int
+__dbenv_set_verbose(dbenv, which, on)
+ DB_ENV *dbenv;
+ u_int32_t which;
+ int on;
+{
+ switch (which) {
+ case DB_VERB_CHKPOINT:
+ case DB_VERB_DEADLOCK:
+ case DB_VERB_RECOVERY:
+ case DB_VERB_REPLICATION:
+ case DB_VERB_WAITSFOR:
+ if (on)
FLD_SET(dbenv->verbose, which);
else
FLD_CLR(dbenv->verbose, which);
@@ -387,7 +850,7 @@ __db_mi_env(dbenv, name)
DB_ENV *dbenv;
const char *name;
{
- __db_err(dbenv, "%s: method meaningless in shared environment", name);
+ __db_err(dbenv, "%s: method not permitted in shared environment", name);
return (EINVAL);
}
@@ -403,59 +866,66 @@ __db_mi_open(dbenv, name, after)
const char *name;
int after;
{
- __db_err(dbenv,
- "%s: method meaningless %s open", name, after ? "after" : "before");
+ __db_err(dbenv, "%s: method not permitted %s handle's open method",
+ name, after ? "after" : "before");
return (EINVAL);
}
/*
* __db_env_config --
- * Method or function called without subsystem being configured.
+ * Method or function called without required configuration.
*
- * PUBLIC: int __db_env_config __P((DB_ENV *, int));
+ * PUBLIC: int __db_env_config __P((DB_ENV *, char *, u_int32_t));
*/
int
-__db_env_config(dbenv, subsystem)
+__db_env_config(dbenv, i, flags)
DB_ENV *dbenv;
- int subsystem;
+ char *i;
+ u_int32_t flags;
{
- const char *name;
+ char *sub;
- switch (subsystem) {
+ switch (flags) {
case DB_INIT_LOCK:
- name = "lock";
+ sub = "locking";
break;
case DB_INIT_LOG:
- name = "log";
+ sub = "logging";
break;
case DB_INIT_MPOOL:
- name = "mpool";
+ sub = "memory pool";
+ break;
+ case DB_INIT_REP:
+ sub = "replication";
break;
case DB_INIT_TXN:
- name = "txn";
+ sub = "transaction";
break;
default:
- name = "unknown";
+ sub = "<unspecified>";
break;
}
__db_err(dbenv,
- "%s interface called with environment not configured for that subsystem",
- name);
+ "%s interface requires an environment configured for the %s subsystem",
+ i, sub);
return (EINVAL);
}
static int
-__dbenv_set_server_noclnt(dbenv, host, tsec, ssec, flags)
+__dbenv_set_rpc_server_noclnt(dbenv, cl, host, tsec, ssec, flags)
DB_ENV *dbenv;
- char *host;
+ void *cl;
+ const char *host;
long tsec, ssec;
u_int32_t flags;
{
COMPQUIET(host, NULL);
+ COMPQUIET(cl, NULL);
COMPQUIET(tsec, 0);
COMPQUIET(ssec, 0);
COMPQUIET(flags, 0);
- __db_err(dbenv, "set_server method meaningless in non-RPC enviroment");
- return (__db_eopnotsup(dbenv));
+ __db_err(dbenv,
+ "set_rpc_server method not permitted in non-RPC environment");
+ return (DB_OPNOTSUP);
}
diff --git a/db/env/env_open.c b/db/env/env_open.c
index 2007b4266..d4d2313ed 100644
--- a/db/env/env_open.c
+++ b/db/env/env_open.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: env_open.c,v 11.34 2000/12/21 19:20:00 bostic Exp $";
+static const char revid[] = "$Id: env_open.c,v 11.144 2003/09/13 18:39:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,30 +17,32 @@ static const char revid[] = "$Id: env_open.c,v 11.34 2000/12/21 19:20:00 bostic
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "qam.h"
-#include "lock.h"
-#include "log.h"
-#include "mp.h"
-#include "txn.h"
-#include "clib_ext.h"
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/fop.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
-static int __dbenv_config __P((DB_ENV *, const char *, u_int32_t));
-static int __dbenv_refresh __P((DB_ENV *));
-static int __db_home __P((DB_ENV *, const char *, u_int32_t));
static int __db_parse __P((DB_ENV *, char *));
-static int __db_tmp_open __P((DB_ENV *, u_int32_t, char *, DB_FH *));
+static int __db_tmp_open __P((DB_ENV *, u_int32_t, char *, DB_FH **));
+static int __dbenv_config __P((DB_ENV *, const char *, u_int32_t));
+static int __dbenv_refresh __P((DB_ENV *, u_int32_t, int));
+static int __dbenv_remove_int __P((DB_ENV *, const char *, u_int32_t));
/*
* db_version --
* Return version information.
+ *
+ * EXTERN: char *db_version __P((int *, int *, int *));
*/
char *
db_version(majverp, minverp, patchp)
@@ -57,7 +59,7 @@ db_version(majverp, minverp, patchp)
/*
* __dbenv_open --
- * Initialize an environment.
+ * DB_ENV->open.
*
* PUBLIC: int __dbenv_open __P((DB_ENV *, const char *, u_int32_t, int));
*/
@@ -68,45 +70,79 @@ __dbenv_open(dbenv, db_home, flags, mode)
u_int32_t flags;
int mode;
{
- DB_ENV *rm_dbenv;
- int ret;
- u_int32_t init_flags;
+ DB_MPOOL *dbmp;
+ u_int32_t init_flags, orig_flags;
+ int rep_check, ret;
+
+ orig_flags = dbenv->flags;
+ rep_check = 0;
#undef OKFLAGS
#define OKFLAGS \
- DB_CREATE | DB_INIT_CDB | DB_INIT_LOCK | DB_INIT_LOG | \
- DB_INIT_MPOOL | DB_INIT_TXN | DB_JOINENV | DB_LOCKDOWN | \
- DB_PRIVATE | DB_RECOVER | DB_RECOVER_FATAL | DB_SYSTEM_MEM | \
- DB_THREAD | DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT
+ (DB_CREATE | DB_INIT_CDB | DB_INIT_LOCK | DB_INIT_LOG | \
+ DB_INIT_MPOOL | DB_INIT_REP | DB_INIT_TXN | DB_JOINENV | \
+ DB_LOCKDOWN | DB_PRIVATE | DB_RECOVER | DB_RECOVER_FATAL | \
+ DB_SYSTEM_MEM | DB_THREAD | DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT)
#undef OKFLAGS_CDB
#define OKFLAGS_CDB \
- DB_CREATE | DB_INIT_CDB | DB_INIT_MPOOL | DB_LOCKDOWN | \
+ (DB_CREATE | DB_INIT_CDB | DB_INIT_MPOOL | DB_LOCKDOWN | \
DB_PRIVATE | DB_SYSTEM_MEM | DB_THREAD | \
- DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT
+ DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT)
/*
* Flags saved in the init_flags field of the environment, representing
- * flags to DBENV->set_flags and DBENV->open that need to be set.
+ * flags to DB_ENV->set_flags and DB_ENV->open that need to be set.
*/
#define DB_INITENV_CDB 0x0001 /* DB_INIT_CDB */
#define DB_INITENV_CDB_ALLDB 0x0002 /* DB_INIT_CDB_ALLDB */
#define DB_INITENV_LOCK 0x0004 /* DB_INIT_LOCK */
#define DB_INITENV_LOG 0x0008 /* DB_INIT_LOG */
#define DB_INITENV_MPOOL 0x0010 /* DB_INIT_MPOOL */
-#define DB_INITENV_TXN 0x0020 /* DB_INIT_TXN */
+#define DB_INITENV_REP 0x0020 /* DB_INIT_REP */
+#define DB_INITENV_TXN 0x0040 /* DB_INIT_TXN */
- if ((ret = __db_fchk(dbenv, "DBENV->open", flags, OKFLAGS)) != 0)
+ if ((ret = __db_fchk(dbenv, "DB_ENV->open", flags, OKFLAGS)) != 0)
return (ret);
if (LF_ISSET(DB_INIT_CDB) &&
- (ret = __db_fchk(dbenv, "DBENV->open", flags, OKFLAGS_CDB)) != 0)
+ (ret = __db_fchk(dbenv, "DB_ENV->open", flags, OKFLAGS_CDB)) != 0)
return (ret);
if ((ret = __db_fcchk(dbenv,
- "DBENV->open", flags, DB_PRIVATE, DB_SYSTEM_MEM)) != 0)
+ "DB_ENV->open", flags, DB_PRIVATE, DB_SYSTEM_MEM)) != 0)
return (ret);
- if ((ret = __db_fcchk(dbenv, "DBENV->open", flags, DB_JOINENV,
+ if ((ret = __db_fcchk(dbenv,
+ "DB_ENV->open", flags, DB_RECOVER, DB_RECOVER_FATAL)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->open", flags, DB_JOINENV,
DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
- DB_INIT_TXN | DB_PRIVATE)) != 0)
+ DB_INIT_REP | DB_INIT_TXN |
+ DB_PRIVATE | DB_RECOVER | DB_RECOVER_FATAL)) != 0)
return (ret);
+ if (LF_ISSET(DB_INIT_REP) && !LF_ISSET(DB_INIT_TXN)) {
+ __db_err(dbenv, "Replication must be used with transactions");
+ return (EINVAL);
+ }
+ if (LF_ISSET(DB_INIT_REP) && !LF_ISSET(DB_INIT_LOCK)) {
+ __db_err(dbenv, "Replication must be used with locking");
+ return (EINVAL);
+ }
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && !LF_ISSET(DB_INIT_TXN)) {
+ __db_err(dbenv,
+ "Setting non-durability only valid with transactions");
+ return (EINVAL);
+ }
+
+ /*
+ * Currently we support one kind of mutex that is intra-process only,
+ * POSIX 1003.1 pthreads, because a variety of systems don't support
+ * the full pthreads API, and our only alternative is test-and-set.
+ */
+#ifdef HAVE_MUTEX_THREAD_ONLY
+ if (!LF_ISSET(DB_PRIVATE)) {
+ __db_err(dbenv,
+ "Berkeley DB library configured to support only DB_PRIVATE environments");
+ return (EINVAL);
+ }
+#endif
/*
* If we're doing recovery, destroy the environment so that we create
@@ -126,24 +162,24 @@ __dbenv_open(dbenv, db_home, flags, mode)
* not, we just want to nail any files that are left-over for whatever
* reason, from whatever session.
*/
- if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL)) {
- if ((ret = db_env_create(&rm_dbenv, 0)) != 0)
- return (ret);
- if ((ret = dbenv->remove(rm_dbenv, db_home, DB_FORCE)) != 0)
+ if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL))
+ if ((ret = __dbenv_remove_int(dbenv, db_home, DB_FORCE)) != 0 ||
+ (ret = __dbenv_refresh(dbenv, orig_flags, 0)) != 0)
return (ret);
- }
/* Initialize the DB_ENV structure. */
if ((ret = __dbenv_config(dbenv, db_home, flags)) != 0)
goto err;
- /* Convert the DBENV->open flags to internal flags. */
+ /* Convert the DB_ENV->open flags to internal flags. */
if (LF_ISSET(DB_CREATE))
F_SET(dbenv, DB_ENV_CREATE);
if (LF_ISSET(DB_LOCKDOWN))
F_SET(dbenv, DB_ENV_LOCKDOWN);
if (LF_ISSET(DB_PRIVATE))
F_SET(dbenv, DB_ENV_PRIVATE);
+ if (LF_ISSET(DB_RECOVER_FATAL))
+ F_SET(dbenv, DB_ENV_FATAL);
if (LF_ISSET(DB_SYSTEM_MEM))
F_SET(dbenv, DB_ENV_SYSTEM_MEM);
if (LF_ISSET(DB_THREAD))
@@ -156,13 +192,14 @@ __dbenv_open(dbenv, db_home, flags, mode)
* Create/join the environment. We pass in the flags that
* will be of interest to an environment joining later; if
* we're not the ones to do the create, we
- * pull out whatever has been stored, if we don't do a create.
+ * pull out whatever has been stored.
*/
init_flags = 0;
init_flags |= (LF_ISSET(DB_INIT_CDB) ? DB_INITENV_CDB : 0);
init_flags |= (LF_ISSET(DB_INIT_LOCK) ? DB_INITENV_LOCK : 0);
init_flags |= (LF_ISSET(DB_INIT_LOG) ? DB_INITENV_LOG : 0);
init_flags |= (LF_ISSET(DB_INIT_MPOOL) ? DB_INITENV_MPOOL : 0);
+ init_flags |= (LF_ISSET(DB_INIT_REP) ? DB_INITENV_REP : 0);
init_flags |= (LF_ISSET(DB_INIT_TXN) ? DB_INITENV_TXN : 0);
init_flags |=
(F_ISSET(dbenv, DB_ENV_CDB_ALLDB) ? DB_INITENV_CDB_ALLDB : 0);
@@ -181,10 +218,11 @@ __dbenv_open(dbenv, db_home, flags, mode)
LF_SET((init_flags & DB_INITENV_LOCK) ? DB_INIT_LOCK : 0);
LF_SET((init_flags & DB_INITENV_LOG) ? DB_INIT_LOG : 0);
LF_SET((init_flags & DB_INITENV_MPOOL) ? DB_INIT_MPOOL : 0);
+ LF_SET((init_flags & DB_INITENV_REP) ? DB_INIT_REP : 0);
LF_SET((init_flags & DB_INITENV_TXN) ? DB_INIT_TXN : 0);
if (LF_ISSET(DB_INITENV_CDB_ALLDB) &&
- (ret = dbenv->set_flags(dbenv, DB_CDB_ALLDB, 1)) != 0)
+ (ret = __dbenv_set_flags(dbenv, DB_CDB_ALLDB, 1)) != 0)
goto err;
}
@@ -193,37 +231,58 @@ __dbenv_open(dbenv, db_home, flags, mode)
LF_SET(DB_INIT_LOCK);
F_SET(dbenv, DB_ENV_CDB);
}
-
- /* Initialize the DB list, and its mutex if appropriate. */
- LIST_INIT(&dbenv->dblist);
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- if ((ret = __db_mutex_alloc(dbenv,
- dbenv->reginfo, (MUTEX **)&dbenv->dblist_mutexp)) != 0)
- return (ret);
- if ((ret = __db_mutex_init(dbenv,
- dbenv->dblist_mutexp, 0, MUTEX_THREAD)) != 0) {
- __db_mutex_free(dbenv, dbenv->reginfo,
- dbenv->dblist_mutexp);
- return (ret);
- }
+ if (LF_ISSET(DB_RECOVER |
+ DB_RECOVER_FATAL) && !LF_ISSET(DB_INIT_TXN)) {
+ __db_err(dbenv,
+ "DB_RECOVER and DB_RECOVER_FATAL require DB_TXN_INIT in DB_ENV->open");
+ ret = EINVAL;
+ goto err;
}
+ /* Save the flags passed to DB_ENV->open. */
+ dbenv->open_flags = flags;
/*
- * Initialize the subsystems. Transactions imply logging but do not
- * imply locking. While almost all applications want both locking
- * and logging, it would not be unreasonable for a single threaded
- * process to want transactions for atomicity guarantees, but not
- * necessarily need concurrency.
+ * Initialize the subsystems.
+ *
+ * Initialize the replication area first, so that we can lock out this
+ * call if we're currently running recovery for replication.
*/
+ if (LF_ISSET(DB_INIT_REP)) {
+ if ((ret = __rep_open(dbenv)) != 0)
+ goto err;
+ }
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+
if (LF_ISSET(DB_INIT_MPOOL))
if ((ret = __memp_open(dbenv)) != 0)
goto err;
+ /*
+ * Initialize the ciphering area prior to any running of recovery so
+ * that we can initialize the keys, etc. before recovery.
+ *
+ * !!!
+ * This must be after the mpool init, but before the log initialization
+ * because log_open may attempt to run log_recover during its open.
+ */
+ if ((ret = __crypto_region_init(dbenv)) != 0)
+ goto err;
+
+ /*
+ * Transactions imply logging but do not imply locking. While almost
+ * all applications want both locking and logging, it would not be
+ * unreasonable for a single threaded process to want transactions for
+ * atomicity guarantees, but not necessarily need concurrency.
+ */
if (LF_ISSET(DB_INIT_LOG | DB_INIT_TXN))
if ((ret = __log_open(dbenv)) != 0)
goto err;
if (LF_ISSET(DB_INIT_LOCK))
if ((ret = __lock_open(dbenv)) != 0)
goto err;
+
if (LF_ISSET(DB_INIT_TXN)) {
if ((ret = __txn_open(dbenv)) != 0)
goto err;
@@ -232,44 +291,105 @@ __dbenv_open(dbenv, db_home, flags, mode)
* If the application is running with transactions, initialize
* the function tables.
*/
- if ((ret = __bam_init_recover(dbenv)) != 0)
+ if ((ret = __bam_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __crdel_init_recover(dbenv)) != 0)
+ if ((ret = __crdel_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __db_init_recover(dbenv)) != 0)
+ if ((ret = __db_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __ham_init_recover(dbenv)) != 0)
+ if ((ret = __dbreg_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __log_init_recover(dbenv)) != 0)
+ if ((ret = __fop_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __qam_init_recover(dbenv)) != 0)
+ if ((ret = __ham_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
- if ((ret = __txn_init_recover(dbenv)) != 0)
+ if ((ret = __qam_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
-
- /*
- * If the application specified their own recovery
- * initialization function, call it.
- */
- if (dbenv->db_recovery_init != NULL &&
- (ret = dbenv->db_recovery_init(dbenv)) != 0)
+ if ((ret = __txn_init_recover(dbenv, &dbenv->recover_dtab,
+ &dbenv->recover_dtab_size)) != 0)
goto err;
/* Perform recovery for any previous run. */
if (LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL) &&
- (ret = __db_apprec(dbenv,
+ (ret = __db_apprec(dbenv, NULL, NULL, 1,
LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL))) != 0)
goto err;
}
+
+ /*
+ * Initialize the DB list, and its mutex as necessary. If the env
+ * handle isn't free-threaded we don't need a mutex because there
+ * will never be more than a single DB handle on the list. If the
+ * mpool wasn't initialized, then we can't ever open a DB handle.
+ *
+ * We also need to initialize the MT mutex as necessary, so do them
+ * both. If we error, __dbenv_refresh() will clean up.
+ *
+ * !!!
+ * This must come after the __memp_open call above because if we are
+ * recording mutexes for system resources, we will do it in the mpool
+ * region for environments and db handles. So, the mpool region must
+ * already be initialized.
+ */
+ LIST_INIT(&dbenv->dblist);
+ if (F_ISSET(dbenv, DB_ENV_THREAD) && LF_ISSET(DB_INIT_MPOOL)) {
+ dbmp = dbenv->mp_handle;
+ if ((ret = __db_mutex_setup(
+ dbenv, dbmp->reginfo, &dbenv->dblist_mutexp,
+ MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ goto err;
+ if ((ret = __db_mutex_setup(
+ dbenv, dbmp->reginfo, &dbenv->mt_mutexp,
+ MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ goto err;
+ }
+
+ /*
+ * If we've created the regions, are running with transactions, and did
+ * not just run recovery, we need to log the fact that the transaction
+ * IDs got reset.
+ *
+ * If we ran recovery, there may be prepared-but-not-yet-committed
+ * transactions that need to be resolved. Recovery resets the minimum
+ * transaction ID and logs the reset if that's appropriate, so we
+ * don't need to do anything here in the recover case.
+ */
+ if (TXN_ON(dbenv) &&
+ F_ISSET((REGINFO *)dbenv->reginfo, REGION_CREATE) &&
+ !LF_ISSET(DB_RECOVER | DB_RECOVER_FATAL) &&
+ (ret = __txn_reset(dbenv)) != 0)
+ goto err;
+
+ if (rep_check)
+ __env_rep_exit(dbenv);
+
return (0);
-err: (void)__dbenv_refresh(dbenv);
+err: /* If we fail after creating the regions, remove them. */
+ if (dbenv->reginfo != NULL &&
+ F_ISSET((REGINFO *)dbenv->reginfo, REGION_CREATE)) {
+ ret = __db_panic(dbenv, ret);
+
+ /* Refresh the DB_ENV so we can use it to call remove. */
+ (void)__dbenv_refresh(dbenv, orig_flags, rep_check);
+ (void)__dbenv_remove_int(dbenv, db_home, DB_FORCE);
+ (void)__dbenv_refresh(dbenv, orig_flags, 0);
+ } else
+ (void)__dbenv_refresh(dbenv, orig_flags, rep_check);
+
return (ret);
}
/*
* __dbenv_remove --
- * Discard an environment.
+ * DB_ENV->remove.
*
* PUBLIC: int __dbenv_remove __P((DB_ENV *, const char *, u_int32_t));
*/
@@ -283,43 +403,45 @@ __dbenv_remove(dbenv, db_home, flags)
#undef OKFLAGS
#define OKFLAGS \
- DB_FORCE | DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT
+ (DB_FORCE | DB_USE_ENVIRON | DB_USE_ENVIRON_ROOT)
/* Validate arguments. */
- if ((ret = __db_fchk(dbenv, "DBENV->remove", flags, OKFLAGS)) != 0)
- goto err;
+ if ((ret = __db_fchk(dbenv, "DB_ENV->remove", flags, OKFLAGS)) != 0)
+ return (ret);
- /*
- * A hard-to-debug error is calling DBENV->remove after open. That's
- * not legal. You have to close the original, already opened handle
- * and then allocate a new DBENV handle to use for DBENV->remove.
- */
- if (F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
- __db_err(dbenv,
- "DBENV handle opened, not usable for remove method.");
- return (EINVAL);
- }
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->remove");
- /* Initialize the DB_ENV structure. */
- if ((ret = __dbenv_config(dbenv, db_home, flags)) != 0)
- goto err;
+ ret = __dbenv_remove_int(dbenv, db_home, flags);
- /* Remove the environment. */
- ret = __db_e_remove(dbenv, LF_ISSET(DB_FORCE) ? 1 : 0);
-
- /* Discard any resources we've acquired. */
-err: if ((t_ret = __dbenv_refresh(dbenv)) != 0 && ret == 0)
+ if ((t_ret = __dbenv_close(dbenv, 0)) != 0 && ret == 0)
ret = t_ret;
- memset(dbenv, CLEAR_BYTE, sizeof(DB_ENV));
- __os_free(dbenv, sizeof(DB_ENV));
-
return (ret);
}
/*
+ * __dbenv_remove_int --
+ * Discard an environment, internal version.
+ */
+static int
+__dbenv_remove_int(dbenv, db_home, flags)
+ DB_ENV *dbenv;
+ const char *db_home;
+ u_int32_t flags;
+{
+ int ret;
+
+ /* Initialize the DB_ENV structure. */
+ if ((ret = __dbenv_config(dbenv, db_home, flags)) != 0)
+ return (ret);
+
+ /* Remove the environment. */
+ return (__db_e_remove(dbenv, flags));
+}
+
+/*
* __dbenv_config --
- * Initialize the DB_ENV structure.
+ * Minor initialization of the DB_ENV structure, read the DB_CONFIG file.
*/
static int
__dbenv_config(dbenv, db_home, flags)
@@ -329,148 +451,269 @@ __dbenv_config(dbenv, db_home, flags)
{
FILE *fp;
int ret;
- char *lp, buf[MAXPATHLEN * 2];
+ char *p, buf[256];
- /* Set the database home. */
+ /*
+ * Set the database home. Do this before calling __db_appname,
+ * it uses the home directory.
+ */
if ((ret = __db_home(dbenv, db_home, flags)) != 0)
return (ret);
- /*
- * Parse the config file.
- *
- * !!!
- * Don't use sprintf(3)/snprintf(3) -- the former is dangerous, and
- * the latter isn't standard, and we're manipulating strings handed
- * us by the application.
- */
- if (dbenv->db_home != NULL) {
-#define CONFIG_NAME "/DB_CONFIG"
- if (strlen(dbenv->db_home) +
- strlen(CONFIG_NAME) + 1 > sizeof(buf)) {
- ret = ENAMETOOLONG;
- return (ret);
- }
- (void)strcpy(buf, dbenv->db_home);
- (void)strcat(buf, CONFIG_NAME);
- if ((fp = fopen(buf, "r")) != NULL) {
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- if ((lp = strchr(buf, '\n')) == NULL) {
- __db_err(dbenv,
- "%s: line too long", CONFIG_NAME);
- (void)fclose(fp);
- ret = EINVAL;
- return (ret);
- }
- *lp = '\0';
- if (buf[0] == '\0' ||
- buf[0] == '#' || isspace((int)buf[0]))
- continue;
-
- if ((ret = __db_parse(dbenv, buf)) != 0) {
- (void)fclose(fp);
- return (ret);
- }
+ /* Parse the config file. */
+ if ((ret =
+ __db_appname(dbenv, DB_APP_NONE, "DB_CONFIG", 0, NULL, &p)) != 0)
+ return (ret);
+
+ fp = fopen(p, "r");
+ __os_free(dbenv, p);
+
+ if (fp != NULL) {
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ if ((p = strchr(buf, '\n')) != NULL)
+ *p = '\0';
+ else if (strlen(buf) + 1 == sizeof(buf)) {
+ __db_err(dbenv, "DB_CONFIG: line too long");
+ (void)fclose(fp);
+ return (EINVAL);
+ }
+ if (buf[0] == '\0' ||
+ buf[0] == '#' || isspace((int)buf[0]))
+ continue;
+
+ if ((ret = __db_parse(dbenv, buf)) != 0) {
+ (void)fclose(fp);
+ return (ret);
}
- (void)fclose(fp);
}
+ (void)fclose(fp);
}
- /* Set up the tmp directory path. */
- if (dbenv->db_tmp_dir == NULL && (ret = __os_tmpdir(dbenv, flags)) != 0)
- return (ret);
-
/*
- * The locking file descriptor is rarely on. Set the fd to -1, not
- * because it's ever tested, but to make sure we catch mistakes.
+ * If no temporary directory path was specified in the config file,
+ * choose one.
*/
- if ((ret =
- __os_calloc(dbenv,
- 1, sizeof(*dbenv->lockfhp), &dbenv->lockfhp)) != 0)
+ if (dbenv->db_tmp_dir == NULL && (ret = __os_tmpdir(dbenv, flags)) != 0)
return (ret);
- dbenv->lockfhp->fd = -1;
- /*
- * Flag that the DB_ENV structure has been initialized. Note, this
- * must be set before calling into the subsystems as it's used during
- * file naming.
- */
+ /* Flag that the DB_ENV structure has been initialized. */
F_SET(dbenv, DB_ENV_OPEN_CALLED);
return (0);
}
/*
- * __dbenv_close --
- * DB_ENV destructor.
+ * __dbenv_close_pp --
+ * DB_ENV->close pre/post processor.
*
- * PUBLIC: int __dbenv_close __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __dbenv_close_pp __P((DB_ENV *, u_int32_t));
*/
int
-__dbenv_close(dbenv, flags)
+__dbenv_close_pp(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
- int ret;
+ int rep_check, ret, t_ret;
- COMPQUIET(flags, 0);
+ ret = 0;
PANIC_CHECK(dbenv);
- ret = __dbenv_refresh(dbenv);
+ /*
+ * Validate arguments, but as a DB_ENV handle destructor, we can't
+ * fail.
+ */
+ if (flags != 0 &&
+ (t_ret = __db_ferr(dbenv, "DB_ENV->close", 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+
+ if ((t_ret = __dbenv_close(dbenv, rep_check)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
- /* Discard the structure if we allocated it. */
- if (!F_ISSET(dbenv, DB_ENV_USER_ALLOC)) {
- memset(dbenv, CLEAR_BYTE, sizeof(DB_ENV));
- __os_free(dbenv, sizeof(DB_ENV));
+/*
+ * __dbenv_close --
+ * DB_ENV->close.
+ *
+ * PUBLIC: int __dbenv_close __P((DB_ENV *, int));
+ */
+int
+__dbenv_close(dbenv, rep_check)
+ DB_ENV *dbenv;
+ int rep_check;
+{
+ int ret, t_ret;
+ char **p;
+
+ ret = 0;
+
+ /*
+ * Before checking the reference count, we have to see if we were in
+ * the middle of restoring transactions and need to close the open
+ * files.
+ */
+ if (TXN_ON(dbenv) && (t_ret = __txn_preclose(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (REP_ON(dbenv) &&
+ (t_ret = __rep_preclose(dbenv, 1)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (dbenv->db_ref != 0) {
+ __db_err(dbenv,
+ "Database handles open during environment close");
+ if (ret == 0)
+ ret = EINVAL;
+ }
+
+ /*
+ * Detach from the regions and undo the allocations done by
+ * DB_ENV->open.
+ */
+ if ((t_ret = __dbenv_refresh(dbenv, 0, rep_check)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /* Do per-subsystem destruction. */
+ __lock_dbenv_close(dbenv);
+
+ if ((t_ret = __rep_dbenv_close(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+#ifdef HAVE_CRYPTO
+ /*
+ * Crypto comes last, because higher level close functions needs
+ * cryptography.
+ */
+ if ((t_ret = __crypto_dbenv_close(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+#endif
+
+ /* Release any string-based configuration parameters we've copied. */
+ if (dbenv->db_log_dir != NULL)
+ __os_free(dbenv, dbenv->db_log_dir);
+ if (dbenv->db_tmp_dir != NULL)
+ __os_free(dbenv, dbenv->db_tmp_dir);
+ if (dbenv->db_data_dir != NULL) {
+ for (p = dbenv->db_data_dir; *p != NULL; ++p)
+ __os_free(dbenv, *p);
+ __os_free(dbenv, dbenv->db_data_dir);
}
+ /* Discard the structure. */
+ memset(dbenv, CLEAR_BYTE, sizeof(DB_ENV));
+ __os_free(NULL, dbenv);
+
return (ret);
}
/*
* __dbenv_refresh --
- * Refresh the DB_ENV structure, releasing any allocated resources.
+ * Refresh the DB_ENV structure, releasing resources allocated by
+ * DB_ENV->open, and returning it to the state it was in just before
+ * open was called. (Note that this means that any state set by
+ * pre-open configuration functions must be preserved.)
*/
static int
-__dbenv_refresh(dbenv)
+__dbenv_refresh(dbenv, orig_flags, rep_check)
DB_ENV *dbenv;
+ u_int32_t orig_flags;
+ int rep_check;
{
+ DB_MPOOL *dbmp;
int ret, t_ret;
- char **p;
ret = 0;
/*
* Close subsystems, in the reverse order they were opened (txn
* must be first, it may want to discard locks and flush the log).
+ *
+ * !!!
+ * Note that these functions, like all of __dbenv_refresh, only undo
+ * the effects of __dbenv_open. Functions that undo work done by
+ * db_env_create or by a configurator function should go in
+ * __dbenv_close.
*/
- if (TXN_ON(dbenv)) {
- if ((t_ret = __txn_close(dbenv)) != 0 && ret == 0)
- ret = t_ret;
- }
+ if (TXN_ON(dbenv) &&
+ (t_ret = __txn_dbenv_refresh(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
- if (LOCKING_ON(dbenv)) {
- if ((t_ret = __lock_close(dbenv)) != 0 && ret == 0)
- ret = t_ret;
- }
- __lock_dbenv_close(dbenv);
+ if (LOGGING_ON(dbenv) &&
+ (t_ret = __log_dbenv_refresh(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
- if (LOGGING_ON(dbenv)) {
- if ((t_ret = __log_close(dbenv)) != 0 && ret == 0)
- ret = t_ret;
+ /*
+ * Locking should come after logging, because closing log results
+ * in files closing which may require locks being released.
+ */
+ if (LOCKING_ON(dbenv) &&
+ (t_ret = __lock_dbenv_refresh(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
+
+ /*
+ * Discard DB list and its mutex.
+ * Discard the MT mutex.
+ *
+ * !!!
+ * This must be done before we close the mpool region because we
+ * may have allocated the DB handle mutex in the mpool region.
+ * It must be done *after* we close the log region, though, because
+ * we close databases and try to acquire the mutex when we close
+ * log file handles. Ick.
+ */
+ LIST_INIT(&dbenv->dblist);
+ if (dbenv->dblist_mutexp != NULL) {
+ dbmp = dbenv->mp_handle;
+ __db_mutex_free(dbenv, dbmp->reginfo, dbenv->dblist_mutexp);
+ }
+ if (dbenv->mt_mutexp != NULL) {
+ dbmp = dbenv->mp_handle;
+ __db_mutex_free(dbenv, dbmp->reginfo, dbenv->mt_mutexp);
+ }
+ if (dbenv->mt != NULL) {
+ __os_free(dbenv, dbenv->mt);
+ dbenv->mt = NULL;
}
if (MPOOL_ON(dbenv)) {
- if ((t_ret = __memp_close(dbenv)) != 0 && ret == 0)
+ /*
+ * If it's a private environment, flush the contents to disk.
+ * Recovery would have put everything back together, but it's
+ * faster and cleaner to flush instead.
+ */
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE) &&
+ (t_ret = __memp_sync(dbenv, NULL)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __memp_dbenv_refresh(dbenv)) != 0 && ret == 0)
ret = t_ret;
}
- /* Discard DB list and its mutex. */
- LIST_INIT(&dbenv->dblist);
- if (dbenv->dblist_mutexp != NULL)
- __db_mutex_free(dbenv, dbenv->reginfo, dbenv->dblist_mutexp);
+ /*
+ * If we're included in a shared replication handle count, this
+ * is our last chance to decrement that count.
+ *
+ * !!!
+ * We can't afford to do anything dangerous after we decrement the
+ * handle count, of course, as replication may be proceeding with
+ * client recovery. However, since we're discarding the regions
+ * as soon as we drop the handle count, there's little opportunity
+ * to do harm.
+ */
+ if (rep_check)
+ __env_rep_exit(dbenv);
/* Detach from the region. */
+ /*
+ * Must come after we call __env_rep_exit above.
+ */
+ __rep_dbenv_refresh(dbenv);
+
if (dbenv->reginfo != NULL) {
if ((t_ret = __db_e_detach(dbenv, 0)) != 0 && ret == 0)
ret = t_ret;
@@ -481,51 +724,22 @@ __dbenv_refresh(dbenv)
*/
}
- /* Clean up the structure. */
- dbenv->db_panic = 0;
-
+ /* Undo changes and allocations done by __dbenv_open. */
if (dbenv->db_home != NULL) {
- __os_freestr(dbenv->db_home);
+ __os_free(dbenv, dbenv->db_home);
dbenv->db_home = NULL;
}
- if (dbenv->db_log_dir != NULL) {
- __os_freestr(dbenv->db_log_dir);
- dbenv->db_log_dir = NULL;
- }
- if (dbenv->db_tmp_dir != NULL) {
- __os_freestr(dbenv->db_tmp_dir);
- dbenv->db_tmp_dir = NULL;
- }
- if (dbenv->db_data_dir != NULL) {
- for (p = dbenv->db_data_dir; *p != NULL; ++p)
- __os_freestr(*p);
- __os_free(dbenv->db_data_dir,
- dbenv->data_cnt * sizeof(char **));
- dbenv->db_data_dir = NULL;
- }
- dbenv->data_cnt = dbenv->data_next = 0;
+ dbenv->open_flags = 0;
dbenv->db_mode = 0;
- if (dbenv->lockfhp != NULL) {
- __os_free(dbenv->lockfhp, sizeof(*dbenv->lockfhp));
- dbenv->lockfhp = NULL;
+ if (dbenv->recover_dtab != NULL) {
+ __os_free(dbenv, dbenv->recover_dtab);
+ dbenv->recover_dtab = NULL;
+ dbenv->recover_dtab_size = 0;
}
- if (dbenv->dtab != NULL) {
- __os_free(dbenv->dtab,
- dbenv->dtab_size * sizeof(dbenv->dtab[0]));
- dbenv->dtab = NULL;
- dbenv->dtab_size = 0;
- }
-
- dbenv->mp_mmapsize = 0;
- dbenv->links.tqe_next = NULL;
- dbenv->links.tqe_prev = NULL;
- dbenv->xa_rmid = 0;
- dbenv->xa_txn = 0;
-
- F_CLR(dbenv, ~(DB_ENV_STANDALONE | DB_ENV_USER_ALLOC));
+ dbenv->flags = orig_flags;
return (ret);
}
@@ -548,156 +762,103 @@ __dbenv_refresh(dbenv)
}
/*
+ * __dbenv_get_open_flags
+ * Retrieve the flags passed to DB_ENV->open.
+ *
+ * PUBLIC: int __dbenv_get_open_flags __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbenv_get_open_flags(dbenv, flagsp)
+ DB_ENV *dbenv;
+ u_int32_t *flagsp;
+{
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->get_open_flags");
+
+ *flagsp = dbenv->open_flags;
+ return (0);
+}
+
+/*
* __db_appname --
* Given an optional DB environment, directory and file name and type
- * of call, build a path based on the DBENV->open rules, and return
+ * of call, build a path based on the DB_ENV->open rules, and return
* it in allocated space.
*
* PUBLIC: int __db_appname __P((DB_ENV *, APPNAME,
- * PUBLIC: const char *, const char *, u_int32_t, DB_FH *, char **));
+ * PUBLIC: const char *, u_int32_t, DB_FH **, char **));
*/
int
-__db_appname(dbenv, appname, dir, file, tmp_oflags, fhp, namep)
+__db_appname(dbenv, appname, file, tmp_oflags, fhpp, namep)
DB_ENV *dbenv;
APPNAME appname;
- const char *dir, *file;
+ const char *file;
u_int32_t tmp_oflags;
- DB_FH *fhp;
+ DB_FH **fhpp;
char **namep;
{
- DB_ENV etmp;
size_t len, str_len;
- int data_entry, ret, slash, tmp_create, tmp_free;
- const char *a, *b, *c;
+ int data_entry, ret, slash, tmp_create;
+ const char *a, *b;
char *p, *str;
- a = b = c = NULL;
+ a = b = NULL;
data_entry = -1;
- tmp_create = tmp_free = 0;
+ tmp_create = 0;
/*
- * We don't return a name when creating temporary files, just a
- * file handle. Default to an error now.
+ * We don't return a name when creating temporary files, just a file
+ * handle. Default to an error now.
*/
- if (fhp != NULL)
- F_CLR(fhp, DB_FH_VALID);
+ if (fhpp != NULL)
+ *fhpp = NULL;
if (namep != NULL)
*namep = NULL;
/*
* Absolute path names are never modified. If the file is an absolute
- * path, we're done. If the directory is, simply append the file and
- * return.
+ * path, we're done.
*/
if (file != NULL && __os_abspath(file))
return (__os_strdup(dbenv, file, namep));
- if (dir != NULL && __os_abspath(dir)) {
- a = dir;
- goto done;
- }
- /*
- * DB_ENV DIR APPNAME RESULT
- * -------------------------------------------
- * null null none <tmp>/file
- * null set none DIR/file
- * set null none DB_HOME/file
- * set set none DB_HOME/DIR/file
- *
- * DB_ENV FILE APPNAME RESULT
- * -------------------------------------------
- * null null DB_APP_DATA <tmp>/<create>
- * null set DB_APP_DATA ./file
- * set null DB_APP_DATA <tmp>/<create>
- * set set DB_APP_DATA DB_HOME/DB_DATA_DIR/file
- *
- * DB_ENV DIR APPNAME RESULT
- * -------------------------------------------
- * null null DB_APP_LOG <tmp>/file
- * null set DB_APP_LOG DIR/file
- * set null DB_APP_LOG DB_HOME/DB_LOG_DIR/file
- * set set DB_APP_LOG DB_HOME/DB_LOG_DIR/DIR/file
- *
- * DB_ENV APPNAME RESULT
- * -------------------------------------------
- * null DB_APP_TMP* <tmp>/<create>
- * set DB_APP_TMP* DB_HOME/DB_TMP_DIR/<create>
+ /* Everything else is relative to the environment home. */
+ if (dbenv != NULL)
+ a = dbenv->db_home;
+
+retry: /*
+ * DB_APP_NONE:
+ * DB_HOME/file
+ * DB_APP_DATA:
+ * DB_HOME/DB_DATA_DIR/file
+ * DB_APP_LOG:
+ * DB_HOME/DB_LOG_DIR/file
+ * DB_APP_TMP:
+ * DB_HOME/DB_TMP_DIR/<create>
*/
-retry: switch (appname) {
+ switch (appname) {
case DB_APP_NONE:
- if (dbenv == NULL || !F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
- if (dir == NULL)
- goto tmp;
- a = dir;
- } else {
- a = dbenv->db_home;
- b = dir;
- }
break;
case DB_APP_DATA:
- if (dir != NULL) {
- __db_err(dbenv,
- "DB_APP_DATA: illegal directory specification");
- return (EINVAL);
- }
-
- if (file == NULL) {
- tmp_create = 1;
- goto tmp;
- }
- if (dbenv != NULL && F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
- a = dbenv->db_home;
- if (dbenv->db_data_dir != NULL &&
- (b = dbenv->db_data_dir[++data_entry]) == NULL) {
- data_entry = -1;
- b = dbenv->db_data_dir[0];
- }
+ if (dbenv != NULL && dbenv->db_data_dir != NULL &&
+ (b = dbenv->db_data_dir[++data_entry]) == NULL) {
+ data_entry = -1;
+ b = dbenv->db_data_dir[0];
}
break;
case DB_APP_LOG:
- if (dbenv == NULL || !F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
- if (dir == NULL)
- goto tmp;
- a = dir;
- } else {
- a = dbenv->db_home;
+ if (dbenv != NULL)
b = dbenv->db_log_dir;
- c = dir;
- }
break;
case DB_APP_TMP:
- if (dir != NULL || file != NULL) {
- __db_err(dbenv,
- "DB_APP_TMP: illegal directory or file specification");
- return (EINVAL);
- }
-
- tmp_create = 1;
- if (dbenv == NULL || !F_ISSET(dbenv, DB_ENV_OPEN_CALLED))
- goto tmp;
- else {
- a = dbenv->db_home;
+ if (dbenv != NULL)
b = dbenv->db_tmp_dir;
- }
+ tmp_create = 1;
break;
}
- /* Reference a file from the appropriate temporary directory. */
- if (0) {
-tmp: if (dbenv == NULL || !F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
- memset(&etmp, 0, sizeof(etmp));
- if ((ret = __os_tmpdir(&etmp, DB_USE_ENVIRON)) != 0)
- return (ret);
- tmp_free = 1;
- a = etmp.db_tmp_dir;
- } else
- a = dbenv->db_tmp_dir;
- }
-
-done: len =
+ len =
(a == NULL ? 0 : strlen(a) + 1) +
(b == NULL ? 0 : strlen(b) + 1) +
- (c == NULL ? 0 : strlen(c) + 1) +
(file == NULL ? 0 : strlen(file) + 1);
/*
@@ -705,13 +866,10 @@ done: len =
* temporary space that we're going to need to create a temporary file
* name.
*/
-#define DB_TRAIL "BDBXXXXXX"
+#define DB_TRAIL "BDBXXXXX"
str_len = len + sizeof(DB_TRAIL) + 10;
- if ((ret = __os_malloc(dbenv, str_len, NULL, &str)) != 0) {
- if (tmp_free)
- __os_freestr(etmp.db_tmp_dir);
+ if ((ret = __os_malloc(dbenv, str_len, &str)) != 0)
return (ret);
- }
slash = 0;
p = str;
@@ -720,31 +878,25 @@ done: len =
DB_ADDSTR(file);
*p = '\0';
- /* Discard any space allocated to find the temp directory. */
- if (tmp_free) {
- __os_freestr(etmp.db_tmp_dir);
- tmp_free = 0;
- }
-
/*
* If we're opening a data file, see if it exists. If it does,
* return it, otherwise, try and find another one to open.
*/
- if (data_entry != -1 && __os_exists(str, NULL) != 0) {
- __os_free(str, str_len);
- a = b = c = NULL;
+ if (__os_exists(str, NULL) != 0 && data_entry != -1) {
+ __os_free(dbenv, str);
+ b = NULL;
goto retry;
}
/* Create the file if so requested. */
if (tmp_create &&
- (ret = __db_tmp_open(dbenv, tmp_oflags, str, fhp)) != 0) {
- __os_free(str, str_len);
+ (ret = __db_tmp_open(dbenv, tmp_oflags, str, fhpp)) != 0) {
+ __os_free(dbenv, str);
return (ret);
}
if (namep == NULL)
- __os_free(str, str_len);
+ __os_free(dbenv, str);
else
*namep = str;
return (0);
@@ -753,8 +905,10 @@ done: len =
/*
* __db_home --
* Find the database home.
+ *
+ * PUBLIC: int __db_home __P((DB_ENV *, const char *, u_int32_t));
*/
-static int
+int
__db_home(dbenv, db_home, flags)
DB_ENV *dbenv;
const char *db_home;
@@ -779,6 +933,13 @@ __db_home(dbenv, db_home, flags)
return (p == NULL ? 0 : __os_strdup(dbenv, p, &dbenv->db_home));
}
+#define __DB_OVFL(v, max) \
+ if (v > max) { \
+ __v = v; \
+ __max = max; \
+ goto toobig; \
+ }
+
/*
* __db_parse --
* Parse a single NAME VALUE pair.
@@ -788,16 +949,18 @@ __db_parse(dbenv, s)
DB_ENV *dbenv;
char *s;
{
- u_long v1, v2, v3;
+ u_long __max, __v, v1, v2, v3;
u_int32_t flags;
char *name, *p, *value, v4;
/*
* !!!
- * The value of 40 is hard-coded into format arguments to sscanf
+ * The constant 40 is hard-coded into format arguments to sscanf
* below, it can't be changed here without changing it there, too.
+ * The additional bytes are for a trailing nul byte and because we
+ * are reading user input -- I don't want to risk any off-by-ones.
*/
- char arg[40];
+ char arg[40 + 5];
/*
* Name/value pairs are parsed as two white-space separated strings.
@@ -831,47 +994,92 @@ illegal: __db_err(dbenv, "mis-formatted name-value pair: %s", s);
if (!strcasecmp(name, "set_cachesize")) {
if (sscanf(value, "%lu %lu %lu %c", &v1, &v2, &v3, &v4) != 3)
goto badarg;
- return (dbenv->set_cachesize(dbenv, v1, v2, v3));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ __DB_OVFL(v2, UINT32_T_MAX);
+ __DB_OVFL(v3, 10000);
+ return (__memp_set_cachesize(
+ dbenv, (u_int32_t)v1, (u_int32_t)v2, (int)v3));
}
if (!strcasecmp(name, "set_data_dir") ||
!strcasecmp(name, "db_data_dir")) /* Compatibility. */
- return (dbenv->set_data_dir(dbenv, value));
+ return (__dbenv_set_data_dir(dbenv, value));
if (!strcasecmp(name, "set_flags")) {
if (sscanf(value, "%40s %c", arg, &v4) != 1)
goto badarg;
+ if (!strcasecmp(value, "db_auto_commit"))
+ return (__dbenv_set_flags(dbenv, DB_AUTO_COMMIT, 1));
if (!strcasecmp(value, "db_cdb_alldb"))
- return (dbenv->set_flags(dbenv, DB_CDB_ALLDB, 1));
+ return (__dbenv_set_flags(dbenv, DB_CDB_ALLDB, 1));
+ if (!strcasecmp(value, "db_direct_db"))
+ return (__dbenv_set_flags(dbenv, DB_DIRECT_DB, 1));
+ if (!strcasecmp(value, "db_direct_log"))
+ return (__dbenv_set_flags(dbenv, DB_DIRECT_LOG, 1));
+ if (!strcasecmp(value, "db_log_autoremove"))
+ return (__dbenv_set_flags(dbenv, DB_LOG_AUTOREMOVE, 1));
+ if (!strcasecmp(value, "db_nolocking"))
+ return (__dbenv_set_flags(dbenv, DB_NOLOCKING, 1));
if (!strcasecmp(value, "db_nommap"))
- return (dbenv->set_flags(dbenv, DB_NOMMAP, 1));
+ return (__dbenv_set_flags(dbenv, DB_NOMMAP, 1));
+ if (!strcasecmp(value, "db_nopanic"))
+ return (__dbenv_set_flags(dbenv, DB_NOPANIC, 1));
+ if (!strcasecmp(value, "db_overwrite"))
+ return (__dbenv_set_flags(dbenv, DB_OVERWRITE, 1));
+ if (!strcasecmp(value, "db_region_init"))
+ return (__dbenv_set_flags(dbenv, DB_REGION_INIT, 1));
if (!strcasecmp(value, "db_txn_nosync"))
- return (dbenv->set_flags(dbenv, DB_TXN_NOSYNC, 1));
+ return (__dbenv_set_flags(dbenv, DB_TXN_NOSYNC, 1));
+ if (!strcasecmp(value, "db_txn_not_durable"))
+ return (
+ __dbenv_set_flags(dbenv, DB_TXN_NOT_DURABLE, 1));
+ if (!strcasecmp(value, "db_txn_write_nosync"))
+ return (
+ __dbenv_set_flags(dbenv, DB_TXN_WRITE_NOSYNC, 1));
+ if (!strcasecmp(value, "db_yieldcpu"))
+ return (__dbenv_set_flags(dbenv, DB_YIELDCPU, 1));
goto badarg;
}
if (!strcasecmp(name, "set_lg_bsize")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lg_bsize(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__log_set_lg_bsize(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_lg_max")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lg_max(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__log_set_lg_max(dbenv, (u_int32_t)v1));
+ }
+
+ if (!strcasecmp(name, "set_lg_regionmax")) {
+ if (sscanf(value, "%lu %c", &v1, &v4) != 1)
+ goto badarg;
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__log_set_lg_regionmax(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_lg_dir") ||
!strcasecmp(name, "db_log_dir")) /* Compatibility. */
- return (dbenv->set_lg_dir(dbenv, value));
+ return (__log_set_lg_dir(dbenv, value));
if (!strcasecmp(name, "set_lk_detect")) {
if (sscanf(value, "%40s %c", arg, &v4) != 1)
goto badarg;
if (!strcasecmp(value, "db_lock_default"))
flags = DB_LOCK_DEFAULT;
+ else if (!strcasecmp(value, "db_lock_expire"))
+ flags = DB_LOCK_EXPIRE;
+ else if (!strcasecmp(value, "db_lock_maxlocks"))
+ flags = DB_LOCK_MAXLOCKS;
+ else if (!strcasecmp(value, "db_lock_minlocks"))
+ flags = DB_LOCK_MINLOCKS;
+ else if (!strcasecmp(value, "db_lock_minwrite"))
+ flags = DB_LOCK_MINWRITE;
else if (!strcasecmp(value, "db_lock_oldest"))
flags = DB_LOCK_OLDEST;
else if (!strcasecmp(value, "db_lock_random"))
@@ -880,65 +1088,89 @@ illegal: __db_err(dbenv, "mis-formatted name-value pair: %s", s);
flags = DB_LOCK_YOUNGEST;
else
goto badarg;
- return (dbenv->set_lk_detect(dbenv, flags));
+ return (__lock_set_lk_detect(dbenv, flags));
}
if (!strcasecmp(name, "set_lk_max")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lk_max(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_lk_max(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_lk_max_locks")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lk_max_locks(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_lk_max_locks(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_lk_max_lockers")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lk_max_lockers(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_lk_max_lockers(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_lk_max_objects")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_lk_max_objects(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_lk_max_objects(dbenv, (u_int32_t)v1));
+ }
+
+ if (!strcasecmp(name, "set_lock_timeout")) {
+ if (sscanf(value, "%lu %c", &v1, &v4) != 1)
+ goto badarg;
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_env_timeout(
+ dbenv, (u_int32_t)v1, DB_SET_LOCK_TIMEOUT));
}
if (!strcasecmp(name, "set_mp_mmapsize")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_mp_mmapsize(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__memp_set_mp_mmapsize(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_region_init")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1 || v1 != 1)
goto badarg;
- return (db_env_set_region_init(v1));
+ return (__dbenv_set_flags(
+ dbenv, DB_REGION_INIT, v1 == 0 ? 0 : 1));
}
if (!strcasecmp(name, "set_shm_key")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_shm_key(dbenv, (long)v1));
+ return (__dbenv_set_shm_key(dbenv, (long)v1));
}
if (!strcasecmp(name, "set_tas_spins")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (db_env_set_tas_spins(v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__dbenv_set_tas_spins(dbenv, (u_int32_t)v1));
}
if (!strcasecmp(name, "set_tmp_dir") ||
!strcasecmp(name, "db_tmp_dir")) /* Compatibility.*/
- return (dbenv->set_tmp_dir(dbenv, value));
+ return (__dbenv_set_tmp_dir(dbenv, value));
if (!strcasecmp(name, "set_tx_max")) {
if (sscanf(value, "%lu %c", &v1, &v4) != 1)
goto badarg;
- return (dbenv->set_tx_max(dbenv, v1));
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__txn_set_tx_max(dbenv, (u_int32_t)v1));
+ }
+
+ if (!strcasecmp(name, "set_txn_timeout")) {
+ if (sscanf(value, "%lu %c", &v1, &v4) != 1)
+ goto badarg;
+ __DB_OVFL(v1, UINT32_T_MAX);
+ return (__lock_set_env_timeout(
+ dbenv, (u_int32_t)v1, DB_SET_TXN_TIMEOUT));
}
if (!strcasecmp(name, "set_verbose")) {
@@ -951,11 +1183,13 @@ illegal: __db_err(dbenv, "mis-formatted name-value pair: %s", s);
flags = DB_VERB_DEADLOCK;
else if (!strcasecmp(value, "db_verb_recovery"))
flags = DB_VERB_RECOVERY;
+ else if (!strcasecmp(value, "db_verb_replication"))
+ flags = DB_VERB_REPLICATION;
else if (!strcasecmp(value, "db_verb_waitsfor"))
flags = DB_VERB_WAITSFOR;
else
goto badarg;
- return (dbenv->set_verbose(dbenv, flags, 1));
+ return (__dbenv_set_verbose(dbenv, flags, 1));
}
__db_err(dbenv, "unrecognized name-value pair: %s", s);
@@ -963,6 +1197,10 @@ illegal: __db_err(dbenv, "mis-formatted name-value pair: %s", s);
badarg: __db_err(dbenv, "incorrect arguments for name-value pair: %s", s);
return (EINVAL);
+
+toobig: __db_err(dbenv,
+ "%s: %lu larger than maximum value %lu", s, __v, __max);
+ return (EINVAL);
}
/*
@@ -970,13 +1208,13 @@ badarg: __db_err(dbenv, "incorrect arguments for name-value pair: %s", s);
* Create a temporary file.
*/
static int
-__db_tmp_open(dbenv, tmp_oflags, path, fhp)
+__db_tmp_open(dbenv, tmp_oflags, path, fhpp)
DB_ENV *dbenv;
u_int32_t tmp_oflags;
char *path;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
- u_long pid;
+ u_int32_t id;
int mode, isdir, ret;
const char *p;
char *trv;
@@ -1001,12 +1239,9 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhp)
for (p = DB_TRAIL; (*++trv = *p) != '\0'; ++p)
;
- /*
- * Replace the X's with the process ID. Pid should be a pid_t,
- * but we use unsigned long for portability.
- */
- for (pid = getpid(); *--trv == 'X'; pid /= 10)
- switch (pid % 10) {
+ /* Replace the X's with the process ID. */
+ for (__os_id(&id); *--trv == 'X'; id /= 10)
+ switch (id % 10) {
case 0: *trv = '0'; break;
case 1: *trv = '1'; break;
case 2: *trv = '2'; break;
@@ -1017,6 +1252,8 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhp)
case 7: *trv = '7'; break;
case 8: *trv = '8'; break;
case 9: *trv = '9'; break;
+ default: /* Impossible. */
+ break;
}
++trv;
@@ -1026,7 +1263,8 @@ __db_tmp_open(dbenv, tmp_oflags, path, fhp)
/* Loop, trying to open a file. */
for (;;) {
if ((ret = __os_open(dbenv, path,
- tmp_oflags | DB_OSO_CREATE | DB_OSO_EXCL, mode, fhp)) == 0)
+ tmp_oflags | DB_OSO_CREATE | DB_OSO_EXCL | DB_OSO_TEMP,
+ mode, fhpp)) == 0)
return (0);
/*
diff --git a/db/env/env_recover.c b/db/env/env_recover.c
index bc5e47605..80de4c1c7 100644
--- a/db/env/env_recover.c
+++ b/db/env/env_recover.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,9 +9,9 @@
#ifndef lint
static const char copyright[] =
- "Copyright (c) 1996-2000\nSleepycat Software Inc. All rights reserved.\n";
+ "Copyright (c) 1996-2003\nSleepycat Software Inc. All rights reserved.\n";
static const char revid[] =
- "$Id: env_recover.c,v 11.33 2001/01/04 22:38:42 ubell Exp $";
+ "$Id: env_recover.c,v 11.112 2003/09/13 18:46:20 bostic Exp $";
#endif
#ifndef NO_SYSTEM_INCLUDES
@@ -32,37 +32,65 @@ static const char revid[] =
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "log.h"
-#include "txn.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+#include "dbinc/mp.h"
+#include "dbinc/db_am.h"
-static float __lsn_diff __P((DB_LSN *, DB_LSN *, DB_LSN *, u_int32_t, int));
-static int __log_earliest __P((DB_ENV *, int32_t *, DB_LSN *));
+static int __log_backup __P((DB_ENV *, DB_LOGC *, DB_LSN *, DB_LSN *));
+static int __log_earliest __P((DB_ENV *, DB_LOGC *, int32_t *, DB_LSN *));
+static double __lsn_diff __P((DB_LSN *, DB_LSN *, DB_LSN *, u_int32_t, int));
/*
* __db_apprec --
- * Perform recovery.
+ * Perform recovery. If max_lsn is non-NULL, then we are trying
+ * to synchronize this system up with another system that has a max
+ * LSN of max_lsn, so we need to roll back sufficiently far for that
+ * to work. See __log_backup for details.
*
- * PUBLIC: int __db_apprec __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __db_apprec __P((DB_ENV *, DB_LSN *, DB_LSN *, u_int32_t,
+ * PUBLIC: u_int32_t));
*/
int
-__db_apprec(dbenv, flags)
+__db_apprec(dbenv, max_lsn, trunclsn, update, flags)
DB_ENV *dbenv;
- u_int32_t flags;
+ DB_LSN *max_lsn, *trunclsn;
+ u_int32_t update, flags;
{
DBT data;
- DB_LSN ckp_lsn, first_lsn, last_lsn, lowlsn, lsn, open_lsn;
+ DB_LOGC *logc;
+ DB_LSN ckp_lsn, first_lsn, last_lsn, lowlsn, lsn, stop_lsn;
+ DB_REP *db_rep;
DB_TXNREGION *region;
+ REP *rep;
__txn_ckp_args *ckp_args;
time_t now, tlow;
- float nfiles;
- int32_t low;
- int is_thread, progress, ret;
+ int32_t log_size, low;
+ double nfiles;
+ int have_rec, is_thread, progress, ret, t_ret;
+ int (**dtab) __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ u_int32_t hi_txn, txnid;
+ char *p, *pass, t1[60], t2[60];
void *txninfo;
- COMPQUIET(nfiles, (float)0);
+ COMPQUIET(nfiles, (double)0);
+
+ logc = NULL;
+ ckp_args = NULL;
+ dtab = NULL;
+ hi_txn = TXN_MAXIMUM;
+ txninfo = NULL;
+ pass = "initial";
+
+ /*
+ * XXX
+ * Get the log size. No locking required because we're single-threaded
+ * during recovery.
+ */
+ log_size =
+ ((LOG *)(((DB_LOG *)dbenv->lg_handle)->reginfo.primary))->log_size;
/*
* Save the state of the thread flag -- we don't need it on at the
@@ -70,60 +98,93 @@ __db_apprec(dbenv, flags)
*/
is_thread = F_ISSET(dbenv, DB_ENV_THREAD) ? 1 : 0;
F_CLR(dbenv, DB_ENV_THREAD);
+
+ /*
+ * If we need to, update the env handle timestamp. The timestamp
+ * field can be updated here without acquiring the rep mutex
+ * because recovery is single-threaded, even in the case of
+ * replication.
+ */
+ if (update && (db_rep = dbenv->rep_handle) != NULL &&
+ (rep = db_rep->region) != NULL)
+ (void)time(&rep->timestamp);
+
+ /* Set in-recovery flags. */
F_SET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ region = ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary;
+ F_SET(region, TXN_IN_RECOVERY);
+
+ /* Allocate a cursor for the log. */
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
/*
- * If the user is specifying recover to a particular point in time,
- * verify that the logs present are sufficient to do this.
+ * If the user is specifying recovery to a particular point in time
+ * or to a particular LSN, find the point to start recovery from.
*/
ZERO_LSN(lowlsn);
- if (dbenv->tx_timestamp != 0) {
- if ((ret = __log_earliest(dbenv, &low, &lowlsn)) != 0)
- return (ret);
+ if (max_lsn != NULL) {
+ if ((ret = __log_backup(dbenv, logc, max_lsn, &lowlsn)) != 0)
+ goto err;
+ } else if (dbenv->tx_timestamp != 0) {
+ if ((ret = __log_earliest(dbenv, logc, &low, &lowlsn)) != 0)
+ goto err;
if ((int32_t)dbenv->tx_timestamp < low) {
- char t1[30], t2[30];
-
- strcpy(t1, ctime(&dbenv->tx_timestamp));
+ (void)snprintf(t1, sizeof(t1),
+ "%s", ctime(&dbenv->tx_timestamp));
+ if ((p = strchr(t1, '\n')) != NULL)
+ *p = '\0';
tlow = (time_t)low;
- strcpy(t2, ctime(&tlow));
+ (void)snprintf(t2, sizeof(t2), "%s", ctime(&tlow));
+ if ((p = strchr(t2, '\n')) != NULL)
+ *p = '\0';
__db_err(dbenv,
- "Invalid recovery timestamp %.*s; earliest time is %.*s",
- 24, t1, 24, t2);
- return (EINVAL);
+ "Invalid recovery timestamp %s; earliest time is %s",
+ t1, t2);
+ ret = EINVAL;
+ goto err;
}
}
- /* Initialize the transaction list. */
- if ((ret = __db_txnlist_init(dbenv, &txninfo)) != 0)
- return (ret);
-
/*
* Recovery is done in three passes:
* Pass #0:
- * We need to find the position from which we will open files
- * We need to open files beginning with the last to next
- * checkpoint because we might have crashed after writing the
- * last checkpoint record, but before having written out all
- * the open file information.
+ * We need to find the position from which we will open files.
+ * We need to open files beginning with the earlier of the
+ * most recent checkpoint LSN and a checkpoint LSN before the
+ * recovery timestamp, if specified. We need to be before the
+ * most recent checkpoint LSN because we are going to collect
+ * information about which transactions were begun before we
+ * start rolling forward. Those that were should never be undone
+ * because queue cannot use LSNs to determine what operations can
+ * safely be aborted and it cannot rollback operations in
+ * transactions for which there may be records not processed
+ * during recovery. We need to consider earlier points in time
+ * in case we are recovering to a particular timestamp.
*
* Pass #1:
- * Read forward through the log from the second to last checkpoint
- * opening and closing files so that at the end of the log we have
- * the "current" set of files open.
+ * Read forward through the log from the position found in pass 0
+ * opening and closing files, and recording transactions for which
+ * we've seen their first record (the transaction's prev_lsn is
+ * 0,0). At the end of this pass, we know all transactions for
+ * which we've seen begins and we have the "current" set of files
+ * open.
*
* Pass #2:
* Read backward through the log undoing any uncompleted TXNs.
- * There are three cases:
- * 1. If doing catastrophic recovery, we read to the beginning
- * of the log
+ * There are four cases:
+ * 1. If doing catastrophic recovery, we read to the
+ * beginning of the log
* 2. If we are doing normal reovery, then we have to roll
- * back to the most recent checkpoint that occurs
- * before the most recent checkpoint LSN, which is
- * returned by __log_findckp().
+ * back to the most recent checkpoint LSN.
* 3. If we are recovering to a point in time, then we have
* to roll back to the checkpoint whose ckp_lsn is earlier
* than the specified time. __log_earliest will figure
* this out for us.
+ * 4. If we are recovering back to a particular LSN, then
+ * we have to roll back to the checkpoint whose ckp_lsn
+ * is earlier than the max_lsn. __log_backup will figure
+ * that out for us.
* In case 2, "uncompleted TXNs" include all those who commited
* after the user's specified timestamp.
*
@@ -133,6 +194,14 @@ __db_apprec(dbenv, flags)
* specified rollback point). During this pass, checkpoint
* file information is ignored, and file openings and closings
* are redone.
+ *
+ * ckp_lsn -- lsn of the last checkpoint or the first in the log.
+ * first_lsn -- the lsn where the forward passes begin.
+ * last_lsn -- the last lsn in the log, used for feedback
+ * lowlsn -- the lsn we are rolling back to, if we are recovering
+ * to a point in time.
+ * lsn -- temporary use lsn.
+ * stop_lsn -- the point at which forward roll should stop
*/
/*
@@ -143,132 +212,193 @@ __db_apprec(dbenv, flags)
* same amount of time (a false assumption) and then use the %-age
* of the amount of log traversed to figure out how much of the
* pass we've accomplished.
+ *
+ * If we can't find any log records, we're kind of done.
*/
+#ifdef UMRW
+ ZERO_LSN(last_lsn);
+#endif
memset(&data, 0, sizeof(data));
- if (dbenv->db_feedback != NULL &&
- (ret = log_get(dbenv, &last_lsn, &data, DB_LAST)) != 0)
- goto out;
+ if ((ret = __log_c_get(logc, &last_lsn, &data, DB_LAST)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ else
+ __db_err(dbenv, "Last log record not found");
+ goto err;
+ }
+
+ do {
+ /* txnid is after rectype, which is a u_int32. */
+ memcpy(&txnid,
+ (u_int8_t *)data.data + sizeof(u_int32_t), sizeof(txnid));
+
+ if (txnid != 0)
+ break;
+ } while ((ret = __log_c_get(logc, &lsn, &data, DB_PREV)) == 0);
/*
- * Pass #0
- * Find the second to last checkpoint in the log. This is the point
- * from which we want to begin pass #1 (the open files pass).
+ * There are no transactions, so there is nothing to do unless
+ * we're recovering to an LSN. If we are, we need to proceed since
+ * we'll still need to do a vtruncate based on information we haven't
+ * yet collected.
*/
- ckp_args = NULL;
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ else if (ret != 0)
+ goto err;
- if (LF_ISSET(DB_RECOVER_FATAL)) {
- if ((ret = log_get(dbenv, &ckp_lsn, &data, DB_FIRST)) != 0) {
- if (ret == DB_NOTFOUND)
- ret = 0;
- else
- __db_err(dbenv, "First log record not found");
- goto out;
+ hi_txn = txnid;
+
+ /*
+ * Pass #0
+ * Find the LSN from which we begin OPENFILES.
+ *
+ * If this is a catastrophic recovery, or if no checkpoint exists
+ * in the log, the LSN is the first LSN in the log.
+ *
+ * Otherwise, it is the minimum of (1) the LSN in the last checkpoint
+ * and (2) the LSN in the checkpoint before any specified recovery
+ * timestamp or max_lsn.
+ */
+ /*
+ * Get the first LSN in the log; it's an initial default
+ * even if this is not a catastrophic recovery.
+ */
+ if ((ret = __log_c_get(logc, &ckp_lsn, &data, DB_FIRST)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ else
+ __db_err(dbenv, "First log record not found");
+ goto err;
+ }
+ first_lsn = ckp_lsn;
+ have_rec = 1;
+
+ if (!LF_ISSET(DB_RECOVER_FATAL)) {
+ if ((ret = __txn_getckp(dbenv, &ckp_lsn)) == 0 &&
+ (ret = __log_c_get(logc, &ckp_lsn, &data, DB_SET)) == 0) {
+ /* We have a recent checkpoint. This is LSN (1). */
+ if ((ret = __txn_ckp_read(dbenv,
+ data.data, &ckp_args)) != 0) {
+ __db_err(dbenv,
+ "Invalid checkpoint record at [%ld][%ld]",
+ (u_long)ckp_lsn.file,
+ (u_long)ckp_lsn.offset);
+ goto err;
+ }
+ first_lsn = ckp_args->ckp_lsn;
+ have_rec = 0;
}
- open_lsn = ckp_lsn;
- } else if ((ret =
- log_get(dbenv, &ckp_lsn, &data, DB_CHECKPOINT)) != 0) {
+
/*
- * If we don't find a checkpoint, start from the beginning.
- * If that fails, we're done. Note, we do not require that
- * there be log records if we're performing recovery.
+ * If LSN (2) exists, use it if it's before LSN (1).
+ * (If LSN (1) doesn't exist, first_lsn is the
+ * beginning of the log, so will "win" this check.)
+ *
+ * XXX
+ * In the recovery-to-a-timestamp case, lowlsn is chosen by
+ * __log_earliest, and is the checkpoint LSN of the
+ * *earliest* checkpoint in the unreclaimed log. I
+ * (krinsky) believe that we could optimize this by looking
+ * instead for the LSN of the *latest* checkpoint before
+ * the timestamp of interest, but I'm not sure that this
+ * is worth doing right now. (We have to look for lowlsn
+ * and low anyway, to make sure the requested timestamp is
+ * somewhere in the logs we have, and all that's required
+ * is that we pick *some* checkpoint after the beginning of
+ * the logs and before the timestamp.
*/
-first: if ((ret = log_get(dbenv, &ckp_lsn, &data, DB_FIRST)) != 0) {
- if (ret == DB_NOTFOUND)
- ret = 0;
- else
- __db_err(dbenv, "First log record not found");
- goto out;
+ if ((dbenv->tx_timestamp != 0 || max_lsn != NULL) &&
+ log_compare(&lowlsn, &first_lsn) < 0) {
+ DB_ASSERT(have_rec == 0);
+ first_lsn = lowlsn;
}
- open_lsn = ckp_lsn;
- } else if ((ret = __txn_ckp_read(dbenv, data.data, &ckp_args)) != 0) {
- __db_err(dbenv, "Invalid checkpoint record at [%ld][%ld]\n",
- (u_long)ckp_lsn.file, (u_long)ckp_lsn.offset);
- goto out;
- } else if (IS_ZERO_LSN(ckp_args->last_ckp) ||
- (ret = log_get(dbenv, &ckp_args->last_ckp, &data, DB_SET)) != 0)
- goto first;
- else
- open_lsn = ckp_args->last_ckp;
+ }
+
+ /* Get the record at first_lsn if we don't have it already. */
+ if (!have_rec &&
+ (ret = __log_c_get(logc, &first_lsn, &data, DB_SET)) != 0) {
+ __db_err(dbenv, "Checkpoint LSN record [%ld][%ld] not found",
+ (u_long)first_lsn.file, (u_long)first_lsn.offset);
+ goto err;
+ }
if (dbenv->db_feedback != NULL) {
- if (last_lsn.file == open_lsn.file)
- nfiles = (float)(last_lsn.offset - open_lsn.offset) /
- dbenv->lg_max;
+ if (last_lsn.file == first_lsn.file)
+ nfiles = (double)
+ (last_lsn.offset - first_lsn.offset) / log_size;
else
- nfiles = (float)(last_lsn.file - open_lsn.file) +
- (float)(dbenv->lg_max - open_lsn.offset +
- last_lsn.offset) / dbenv->lg_max;
+ nfiles = (double)(last_lsn.file - first_lsn.file) +
+ (double)(log_size - first_lsn.offset +
+ last_lsn.offset) / log_size;
/* We are going to divide by nfiles; make sure it isn't 0. */
if (nfiles == 0)
- nfiles = (float)0.001;
+ nfiles = (double)0.001;
}
+ /* Find a low txnid. */
+ ret = 0;
+ if (hi_txn != 0) do {
+ /* txnid is after rectype, which is a u_int32. */
+ memcpy(&txnid,
+ (u_int8_t *)data.data + sizeof(u_int32_t), sizeof(txnid));
+
+ if (txnid != 0)
+ break;
+ } while ((ret = __log_c_get(logc, &lsn, &data, DB_NEXT)) == 0);
+
+ /*
+ * There are no transactions and we're not recovering to an LSN (see
+ * above), so there is nothing to do.
+ */
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+
+ /* Reset to the first lsn. */
+ if (ret != 0 ||
+ (ret = __log_c_get(logc, &first_lsn, &data, DB_SET)) != 0)
+ goto err;
+
+ /* Initialize the transaction list. */
+ if ((ret =
+ __db_txnlist_init(dbenv, txnid, hi_txn, max_lsn, &txninfo)) != 0)
+ goto err;
+
/*
* Pass #1
- * Now, ckp_lsn is either the lsn of the last checkpoint
- * or the lsn of the first record in the log. Open_lsn is
- * the second to last checkpoint or the beinning of the log;
- * begin the open files pass from that lsn, and proceed to
- * the end of the log.
+ * Run forward through the log starting at the first relevant lsn.
*/
- lsn = open_lsn;
- for (;;) {
- if (dbenv->db_feedback != NULL) {
- progress = (int)(33 * (__lsn_diff(&open_lsn,
- &last_lsn, &lsn, dbenv->lg_max, 1) / nfiles));
- dbenv->db_feedback(dbenv, DB_RECOVER, progress);
- }
- ret = __db_dispatch(dbenv,
- &data, &lsn, DB_TXN_OPENFILES, txninfo);
- if (ret != 0 && ret != DB_TXN_CKP)
- goto msgerr;
- if ((ret = log_get(dbenv, &lsn, &data, DB_NEXT)) != 0) {
- if (ret == DB_NOTFOUND)
- break;
- goto out;
- }
- }
+ if ((ret = __env_openfiles(dbenv, logc,
+ txninfo, &data, &first_lsn, &last_lsn, nfiles, 1)) != 0)
+ goto err;
+
+ /* If there were no transactions, then we can bail out early. */
+ if (hi_txn == 0 && max_lsn == NULL)
+ goto done;
/*
* Pass #2.
*
- * Before we can begin pass #2, backward roll phase, we determine how
- * far back in the log to recover. If we are doing catastrophic
- * recovery, then we go as far back as we have files. If we are
- * doing normal recovery, we go as back to the most recent checkpoint
- * that occurs before the most recent checkpoint LSN. If we are
- * recovering to a point in time, then rollback to the checkpoint whose
- * ckp_lsn precedes the first log record (and then roll forward to
- * the appropriate timestamp in Pass #3).
+ * We used first_lsn to tell us how far back we need to recover,
+ * use it here.
*/
- if (LF_ISSET(DB_RECOVER_FATAL)) {
- ZERO_LSN(first_lsn);
- } else if (dbenv->tx_timestamp != 0)
- first_lsn = lowlsn;
- else
- if ((ret = __log_findckp(dbenv, &first_lsn)) == DB_NOTFOUND) {
- /*
- * We don't require that log files exist if recovery
- * was specified.
- */
- ret = 0;
- goto out;
- }
if (FLD_ISSET(dbenv->verbose, DB_VERB_RECOVERY))
__db_err(dbenv, "Recovery starting from [%lu][%lu]",
(u_long)first_lsn.file, (u_long)first_lsn.offset);
- for (ret = log_get(dbenv, &lsn, &data, DB_LAST);
- ret == 0 && log_compare(&lsn, &first_lsn) > 0;
- ret = log_get(dbenv, &lsn, &data, DB_PREV)) {
+ pass = "backward";
+ for (ret = __log_c_get(logc, &lsn, &data, DB_LAST);
+ ret == 0 && log_compare(&lsn, &first_lsn) >= 0;
+ ret = __log_c_get(logc, &lsn, &data, DB_PREV)) {
if (dbenv->db_feedback != NULL) {
- progress = 34 + (int)(33 * (__lsn_diff(&open_lsn,
- &last_lsn, &lsn, dbenv->lg_max, 0) / nfiles));
+ progress = 34 + (int)(33 * (__lsn_diff(&first_lsn,
+ &last_lsn, &lsn, log_size, 0) / nfiles));
dbenv->db_feedback(dbenv, DB_RECOVER, progress);
}
- ret = __db_dispatch(dbenv,
- &data, &lsn, DB_TXN_BACKWARD_ROLL, txninfo);
+ ret = __db_dispatch(dbenv, dbenv->recover_dtab,
+ dbenv->recover_dtab_size, &data, &lsn,
+ DB_TXN_BACKWARD_ROLL, txninfo);
if (ret != 0) {
if (ret != DB_TXN_CKP)
goto msgerr;
@@ -277,85 +407,184 @@ first: if ((ret = log_get(dbenv, &ckp_lsn, &data, DB_FIRST)) != 0) {
}
}
if (ret != 0 && ret != DB_NOTFOUND)
- goto out;
+ goto err;
/*
- * Pass #3.
+ * Pass #3. If we are recovering to a timestamp or to an LSN,
+ * we need to make sure that we don't roll-forward beyond that
+ * point because there may be non-transactional operations (e.g.,
+ * closes that would fail). The last_lsn variable is used for
+ * feedback calculations, but use it to set an initial stopping
+ * point for the forward pass, and then reset appropriately to
+ * derive a real stop_lsn that tells how far the forward pass
+ * should go.
*/
- for (ret = log_get(dbenv, &lsn, &data, DB_NEXT);
- ret == 0; ret = log_get(dbenv, &lsn, &data, DB_NEXT)) {
+ pass = "forward";
+ stop_lsn = last_lsn;
+ if (max_lsn != NULL || dbenv->tx_timestamp != 0)
+ stop_lsn = ((DB_TXNHEAD *)txninfo)->maxlsn;
+
+ for (ret = __log_c_get(logc, &lsn, &data, DB_NEXT);
+ ret == 0; ret = __log_c_get(logc, &lsn, &data, DB_NEXT)) {
+ /*
+ * If we are recovering to a timestamp or an LSN,
+ * we need to make sure that we don't try to roll
+ * forward beyond the soon-to-be end of log.
+ */
+ if (log_compare(&lsn, &stop_lsn) > 0)
+ break;
+
if (dbenv->db_feedback != NULL) {
- progress = 67 + (int)(33 * (__lsn_diff(&open_lsn,
- &last_lsn, &lsn, dbenv->lg_max, 1) / nfiles));
+ progress = 67 + (int)(33 * (__lsn_diff(&first_lsn,
+ &last_lsn, &lsn, log_size, 1) / nfiles));
dbenv->db_feedback(dbenv, DB_RECOVER, progress);
}
- ret = __db_dispatch(dbenv,
- &data, &lsn, DB_TXN_FORWARD_ROLL, txninfo);
+ ret = __db_dispatch(dbenv, dbenv->recover_dtab,
+ dbenv->recover_dtab_size, &data, &lsn,
+ DB_TXN_FORWARD_ROLL, txninfo);
if (ret != 0) {
if (ret != DB_TXN_CKP)
goto msgerr;
else
ret = 0;
}
+
}
- if (ret != DB_NOTFOUND)
- goto out;
+ if (ret != 0 && ret != DB_NOTFOUND)
+ goto err;
/*
- * Process any pages that were on the limbo list
- * and move them to the free list. Do this
- * before checkpointing the database.
+ * Process any pages that were on the limbo list and move them to
+ * the free list. Do this before checkpointing the database.
*/
- if ((ret = __db_do_the_limbo(dbenv, txninfo)) != 0)
- goto out;
+ if ((ret = __db_do_the_limbo(dbenv, NULL, NULL, txninfo,
+ dbenv->tx_timestamp != 0 ? LIMBO_TIMESTAMP : LIMBO_RECOVER)) != 0)
+ goto err;
- /*
- * Now set the last checkpoint lsn and the current time,
- * take a checkpoint, and reset the txnid.
- */
- (void)time(&now);
- region = ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary;
- region->last_txnid = ((DB_TXNHEAD *)txninfo)->maxid;
- region->last_ckp = ckp_lsn;
- region->time_ckp = (u_int32_t)now;
+ if (max_lsn == NULL)
+ region->last_txnid = ((DB_TXNHEAD *)txninfo)->maxid;
- /*
- * Take two checkpoints so that we don't re-recover any of the
- * work we've already done.
- */
- if ((ret = txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0)
- goto out;
+ if (dbenv->tx_timestamp != 0) {
+ /* We are going to truncate, so we'd best close the cursor. */
+ if (logc != NULL && (ret = __log_c_close(logc)) != 0)
+ goto err;
+ logc = NULL;
+ /* Flush everything to disk, we are losing the log. */
+ if ((ret = __memp_sync(dbenv, NULL)) != 0)
+ goto err;
+ region->last_ckp = ((DB_TXNHEAD *)txninfo)->ckplsn;
+ __log_vtruncate(dbenv, &((DB_TXNHEAD *)txninfo)->maxlsn,
+ &((DB_TXNHEAD *)txninfo)->ckplsn, trunclsn);
+ /*
+ * Generate logging compensation records.
+ * If we crash during/after vtruncate we may have
+ * pages missing from the free list since they
+ * if we roll things further back from here.
+ * These pages are only known in memory at this pont.
+ */
+ if ((ret = __db_do_the_limbo(dbenv,
+ NULL, NULL, txninfo, LIMBO_COMPENSATE)) != 0)
+ goto err;
+ }
- /* Now close all the db files that are open. */
- __log_close_files(dbenv);
+ /* Take a checkpoint here to force any dirty data pages to disk. */
+ if ((ret = __txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0)
+ goto err;
- if ((ret = txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0)
- goto out;
- region->last_txnid = TXN_MINIMUM;
+ /* Close all the db files that are open. */
+ if ((ret = __dbreg_close_files(dbenv)) != 0)
+ goto err;
+
+done:
+ if (max_lsn != NULL) {
+ region->last_ckp = ((DB_TXNHEAD *)txninfo)->ckplsn;
+
+ /* We are going to truncate, so we'd best close the cursor. */
+ if (logc != NULL && (ret = __log_c_close(logc)) != 0)
+ goto err;
+ __log_vtruncate(dbenv,
+ max_lsn, &((DB_TXNHEAD *)txninfo)->ckplsn, trunclsn);
+
+ /*
+ * Now we need to open files that should be open in order for
+ * client processing to continue. However, since we've
+ * truncated the log, we need to recompute from where the
+ * openfiles pass should begin.
+ */
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+ if ((ret =
+ __log_c_get(logc, &first_lsn, &data, DB_FIRST)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ else
+ __db_err(dbenv, "First log record not found");
+ goto err;
+ }
+ if ((ret = __txn_getckp(dbenv, &first_lsn)) == 0 &&
+ (ret = __log_c_get(logc, &first_lsn, &data, DB_SET)) == 0) {
+ /* We have a recent checkpoint. This is LSN (1). */
+ if ((ret = __txn_ckp_read(dbenv,
+ data.data, &ckp_args)) != 0) {
+ __db_err(dbenv,
+ "Invalid checkpoint record at [%ld][%ld]",
+ (u_long)first_lsn.file,
+ (u_long)first_lsn.offset);
+ goto err;
+ }
+ first_lsn = ckp_args->ckp_lsn;
+ }
+ if ((ret = __log_c_get(logc, &first_lsn, &data, DB_SET)) != 0)
+ goto err;
+ if ((ret = __env_openfiles(dbenv, logc,
+ txninfo, &data, &first_lsn, NULL, nfiles, 1)) != 0)
+ goto err;
+ } else if (region->stat.st_nrestores == 0)
+ /*
+ * If there are no prepared transactions that need resolution,
+ * we need to reset the transaction ID space and log this fact.
+ */
+ if ((ret = __txn_reset(dbenv)) != 0)
+ goto err;
if (FLD_ISSET(dbenv->verbose, DB_VERB_RECOVERY)) {
+ (void)time(&now);
__db_err(dbenv, "Recovery complete at %.24s", ctime(&now));
__db_err(dbenv, "%s %lx %s [%lu][%lu]",
"Maximum transaction ID",
- ((DB_TXNHEAD *)txninfo)->maxid,
+ (u_long)(txninfo == NULL ?
+ TXN_MINIMUM : ((DB_TXNHEAD *)txninfo)->maxid),
"Recovery checkpoint",
(u_long)region->last_ckp.file,
(u_long)region->last_ckp.offset);
}
if (0) {
-msgerr: __db_err(dbenv, "Recovery function for LSN %lu %lu failed",
- (u_long)lsn.file, (u_long)lsn.offset);
+msgerr: __db_err(dbenv,
+ "Recovery function for LSN %lu %lu failed on %s pass",
+ (u_long)lsn.file, (u_long)lsn.offset, pass);
}
-out: if (is_thread)
- F_SET(dbenv, DB_ENV_THREAD);
- __db_txnlist_end(dbenv, txninfo);
+err: if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (txninfo != NULL)
+ __db_txnlist_end(dbenv, txninfo);
+
+ if (dtab != NULL)
+ __os_free(dbenv, dtab);
+
if (ckp_args != NULL)
- __os_free(ckp_args, sizeof(*ckp_args));
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ __os_free(dbenv, ckp_args);
dbenv->tx_timestamp = 0;
+
+ /* Restore the state of the thread flag, clear in-recovery flags. */
+ if (is_thread)
+ F_SET(dbenv, DB_ENV_THREAD);
+ F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ F_CLR(region, TXN_IN_RECOVERY);
+
return (ret);
}
@@ -365,13 +594,13 @@ out: if (is_thread)
* we are moving backward, we are computing high - current. max is
* the number of bytes per logfile.
*/
-static float
+static double
__lsn_diff(low, high, current, max, is_forward)
DB_LSN *low, *high, *current;
u_int32_t max;
int is_forward;
{
- float nf;
+ double nf;
/*
* There are three cases in each direction. If you are in the
@@ -382,27 +611,78 @@ __lsn_diff(low, high, current, max, is_forward)
*/
if (is_forward) {
if (current->file == low->file)
- nf = (float)(current->offset - low->offset) / max;
+ nf = (double)(current->offset - low->offset) / max;
else if (current->offset < low->offset)
- nf = (float)(current->file - low->file - 1) +
- (float)(max - low->offset + current->offset) / max;
+ nf = (double)(current->file - low->file - 1) +
+ (double)(max - low->offset + current->offset) / max;
else
- nf = (float)(current->file - low->file) +
- (float)(current->offset - low->offset) / max;
+ nf = (double)(current->file - low->file) +
+ (double)(current->offset - low->offset) / max;
} else {
if (current->file == high->file)
- nf = (float)(high->offset - current->offset) / max;
+ nf = (double)(high->offset - current->offset) / max;
else if (current->offset > high->offset)
- nf = (float)(high->file - current->file - 1) +
- (float)(max - current->offset + high->offset) / max;
+ nf = (double)(high->file - current->file - 1) +
+ (double)
+ (max - current->offset + high->offset) / max;
else
- nf = (float)(high->file - current->file) +
- (float)(high->offset - current->offset) / max;
+ nf = (double)(high->file - current->file) +
+ (double)(high->offset - current->offset) / max;
}
return (nf);
}
/*
+ * __log_backup --
+ *
+ * This is used to find the earliest log record to process when a client
+ * is trying to sync up with a master whose max LSN is less than this
+ * client's max lsn; we want to roll back everything after that
+ *
+ * Find the latest checkpoint whose ckp_lsn is less than the max lsn.
+ */
+static int
+__log_backup(dbenv, logc, max_lsn, start_lsn)
+ DB_ENV *dbenv;
+ DB_LOGC *logc;
+ DB_LSN *max_lsn, *start_lsn;
+{
+ DB_LSN lsn;
+ DBT data;
+ __txn_ckp_args *ckp_args;
+ int ret;
+
+ memset(&data, 0, sizeof(data));
+ ckp_args = NULL;
+
+ /*
+ * Follow checkpoints through the log until we find one with
+ * a ckp_lsn less than max_lsn.
+ */
+ if ((ret = __txn_getckp(dbenv, &lsn)) != 0)
+ goto err;
+ while ((ret = __log_c_get(logc, &lsn, &data, DB_SET)) == 0) {
+ if ((ret = __txn_ckp_read(dbenv, data.data, &ckp_args)) != 0)
+ return (ret);
+ if (log_compare(&ckp_args->ckp_lsn, max_lsn) <= 0) {
+ *start_lsn = ckp_args->ckp_lsn;
+ break;
+ }
+
+ lsn = ckp_args->last_ckp;
+ if (IS_ZERO_LSN(lsn))
+ break;
+ __os_free(dbenv, ckp_args);
+ }
+
+ if (ckp_args != NULL)
+ __os_free(dbenv, ckp_args);
+err: if (IS_ZERO_LSN(*start_lsn) && (ret == 0 || ret == DB_NOTFOUND))
+ ret = __log_c_get(logc, start_lsn, &data, DB_FIRST);
+ return (ret);
+}
+
+/*
* __log_earliest --
*
* Return the earliest recovery point for the log files present. The
@@ -410,8 +690,9 @@ __lsn_diff(low, high, current, max, is_forward)
* whose checkpoint LSN is greater than the first LSN we process.
*/
static int
-__log_earliest(dbenv, lowtime, lowlsn)
+__log_earliest(dbenv, logc, lowtime, lowlsn)
DB_ENV *dbenv;
+ DB_LOGC *logc;
int32_t *lowtime;
DB_LSN *lowlsn;
{
@@ -427,19 +708,17 @@ __log_earliest(dbenv, lowtime, lowlsn)
* record whose ckp_lsn is greater than first_lsn.
*/
- for (ret = log_get(dbenv, &first_lsn, &data, DB_FIRST);
- ret == 0; ret = log_get(dbenv, &lsn, &data, DB_NEXT)) {
- if (ret != 0)
- break;
+ for (ret = __log_c_get(logc, &first_lsn, &data, DB_FIRST);
+ ret == 0; ret = __log_c_get(logc, &lsn, &data, DB_NEXT)) {
memcpy(&rectype, data.data, sizeof(rectype));
- if (rectype != DB_txn_ckp)
+ if (rectype != DB___txn_ckp)
continue;
if ((ret = __txn_ckp_read(dbenv, data.data, &ckpargs)) == 0) {
cmp = log_compare(&ckpargs->ckp_lsn, &first_lsn);
*lowlsn = ckpargs->ckp_lsn;
*lowtime = ckpargs->timestamp;
- __os_free(ckpargs, 0);
+ __os_free(dbenv, ckpargs);
if (cmp >= 0)
break;
}
@@ -447,3 +726,70 @@ __log_earliest(dbenv, lowtime, lowlsn)
return (ret);
}
+
+/*
+ * __env_openfiles --
+ * Perform the pass of recovery that opens files. This is used
+ * both during regular recovery and an initial call to txn_recover (since
+ * we need files open in order to abort prepared, but not yet committed
+ * transactions).
+ *
+ * See the comments in db_apprec for a detailed description of the
+ * various recovery passes.
+ *
+ * If we are not doing feedback processing (i.e., we are doing txn_recover
+ * processing and in_recovery is zero), then last_lsn can be NULL.
+ *
+ * PUBLIC: int __env_openfiles __P((DB_ENV *, DB_LOGC *,
+ * PUBLIC: void *, DBT *, DB_LSN *, DB_LSN *, double, int));
+ */
+int
+__env_openfiles(dbenv, logc, txninfo,
+ data, open_lsn, last_lsn, nfiles, in_recovery)
+ DB_ENV *dbenv;
+ DB_LOGC *logc;
+ void *txninfo;
+ DBT *data;
+ DB_LSN *open_lsn, *last_lsn;
+ int in_recovery;
+ double nfiles;
+{
+ DB_LSN lsn;
+ u_int32_t log_size;
+ int progress, ret;
+
+ /*
+ * XXX
+ * Get the log size. No locking required because we're single-threaded
+ * during recovery.
+ */
+ log_size =
+ ((LOG *)(((DB_LOG *)dbenv->lg_handle)->reginfo.primary))->log_size;
+
+ lsn = *open_lsn;
+ for (;;) {
+ if (in_recovery && dbenv->db_feedback != NULL) {
+ DB_ASSERT(last_lsn != NULL);
+ progress = (int)(33 * (__lsn_diff(open_lsn,
+ last_lsn, &lsn, log_size, 1) / nfiles));
+ dbenv->db_feedback(dbenv, DB_RECOVER, progress);
+ }
+ ret = __db_dispatch(dbenv,
+ dbenv->recover_dtab, dbenv->recover_dtab_size, data, &lsn,
+ in_recovery ? DB_TXN_OPENFILES : DB_TXN_POPENFILES,
+ txninfo);
+ if (ret != 0 && ret != DB_TXN_CKP) {
+ __db_err(dbenv,
+ "Recovery function for LSN %lu %lu failed",
+ (u_long)lsn.file, (u_long)lsn.offset);
+ break;
+ }
+ if ((ret = __log_c_get(logc, &lsn, data, DB_NEXT)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ break;
+ }
+ }
+
+ return (ret);
+}
diff --git a/db/env/env_region.c b/db/env/env_region.c
index f3df4bac1..2306407e7 100644
--- a/db/env/env_region.c
+++ b/db/env/env_region.c
@@ -1,39 +1,33 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: env_region.c,v 11.28 2000/12/12 17:36:10 bostic Exp $";
+static const char revid[] = "$Id: env_region.c,v 11.79 2003/10/31 01:56:10 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <ctype.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "lock_ext.h"
-#include "log.h"
-#include "log_ext.h"
-#include "mp.h"
-#include "mp_ext.h"
-#include "txn.h"
-#include "txn_ext.h"
-
-static int __db_des_destroy __P((DB_ENV *, REGION *));
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+
+static int __db_des_destroy __P((DB_ENV *, REGION *, int));
static int __db_des_get __P((DB_ENV *, REGINFO *, REGINFO *, REGION **));
static int __db_e_remfile __P((DB_ENV *));
-static int __db_faultmem __P((void *, size_t, int));
+static int __db_faultmem __P((DB_ENV *, void *, size_t, int));
static void __db_region_destroy __P((DB_ENV *, REGINFO *));
/*
@@ -110,13 +104,17 @@ loop: renv = NULL;
* If this is a public environment, we use the filesystem to ensure
* the creation of the environment file is single-threaded.
*/
- if (F_ISSET(dbenv, DB_ENV_PRIVATE))
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
+ if ((ret = __os_strdup(dbenv,
+ "process-private", &infop->name)) != 0)
+ goto err;
goto creation;
+ }
/* Build the region name. */
(void)snprintf(buf, sizeof(buf), "%s", DB_REGION_ENV);
if ((ret = __db_appname(dbenv,
- DB_APP_NONE, NULL, buf, 0, NULL, &infop->name)) != 0)
+ DB_APP_NONE, buf, 0, NULL, &infop->name)) != 0)
goto err;
/*
@@ -128,9 +126,9 @@ loop: renv = NULL;
* errno return value -- I sure hope they're right.
*/
if (F_ISSET(dbenv, DB_ENV_CREATE)) {
- if ((ret = __os_open(dbenv,
- infop->name, DB_OSO_REGION | DB_OSO_CREATE | DB_OSO_EXCL,
- dbenv->db_mode, dbenv->lockfhp)) == 0)
+ if ((ret = __os_open(dbenv, infop->name,
+ DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_EXCL | DB_OSO_REGION,
+ dbenv->db_mode, &dbenv->lockfhp)) == 0)
goto creation;
if (ret != EEXIST) {
__db_err(dbenv,
@@ -143,10 +141,13 @@ loop: renv = NULL;
* If we couldn't create the file, try and open it. (If that fails,
* we're done.)
*/
- if ((ret = __os_open(dbenv, infop->name,
- DB_OSO_REGION, dbenv->db_mode, dbenv->lockfhp)) != 0)
+ if ((ret = __os_open(dbenv, infop->name, DB_OSO_REGION | DB_OSO_DIRECT,
+ dbenv->db_mode, &dbenv->lockfhp)) != 0)
goto err;
+ /* The region exists, it's not okay to recreate it. */
+ F_CLR(infop, REGION_CREATE_OK);
+
/*
* !!!
* The region may be in system memory not backed by the filesystem
@@ -230,12 +231,13 @@ loop: renv = NULL;
* the better.
*/
#ifdef HAVE_MUTEX_THREADS
- __os_closehandle(dbenv->lockfhp);
+ (void)__os_closehandle(dbenv, dbenv->lockfhp);
+ dbenv->lockfhp = NULL;
#endif
/* Call the region join routine to acquire the region. */
memset(&tregion, 0, sizeof(tregion));
- tregion.size = size;
+ tregion.size = (roff_t)size;
tregion.segid = segid;
if ((ret = __os_r_attach(dbenv, infop, &tregion)) != 0)
goto err;
@@ -249,6 +251,19 @@ loop: renv = NULL;
*/
infop->primary = R_ADDR(infop, 0);
infop->addr = (u_int8_t *)infop->addr + sizeof(REGENV);
+ renv = infop->primary;
+
+ /* Make sure the region matches our build. */
+ if (renv->majver != DB_VERSION_MAJOR ||
+ renv->minver != DB_VERSION_MINOR) {
+ __db_err(dbenv,
+ "Program version %d.%d doesn't match environment version",
+ DB_VERSION_MAJOR, DB_VERSION_MINOR);
+#ifndef DIAGNOSTIC
+ ret = EINVAL;
+ goto err;
+#endif
+ }
/*
* Check if the environment has had a catastrophic failure.
@@ -264,36 +279,21 @@ loop: renv = NULL;
* I'd rather play permissions games using the underlying file, but I
* can't because Windows/NT filesystems won't open files mode 0.
*/
- renv = infop->primary;
- if (renv->panic) {
+ if (renv->envpanic && !F_ISSET(dbenv, DB_ENV_NOPANIC)) {
ret = __db_panic_msg(dbenv);
goto err;
}
if (renv->magic != DB_REGION_MAGIC)
goto retry;
- /* Make sure the region matches our build. */
- if (renv->majver != DB_VERSION_MAJOR ||
- renv->minver != DB_VERSION_MINOR ||
- renv->patch != DB_VERSION_PATCH) {
- __db_err(dbenv,
- "Program version %d.%d.%d doesn't match environment version %d.%d.%d",
- DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
- renv->majver, renv->minver, renv->patch);
-#ifndef DIAGNOSTIC
- ret = EINVAL;
- goto err;
-#endif
- }
-
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &renv->mutex);
/*
* Finally! We own the environment now. Repeat the panic check, it's
* possible that it was set while we waited for the lock.
*/
- if (renv->panic) {
+ if (renv->envpanic && !F_ISSET(dbenv, DB_ENV_NOPANIC)) {
ret = __db_panic_msg(dbenv);
goto err_unlock;
}
@@ -338,7 +338,7 @@ err_unlock: MUTEX_UNLOCK(dbenv, &renv->mutex);
* Fault the pages into memory. Note, do this AFTER releasing the
* lock, because we're only reading the pages, not writing them.
*/
- (void)__db_faultmem(infop->primary, rp->size, 0);
+ (void)__db_faultmem(dbenv, infop->primary, rp->size, 0);
/* Everything looks good, we're done. */
dbenv->reginfo = infop;
@@ -352,9 +352,12 @@ creation:
* Allocate room for 50 REGION structures plus overhead (we're going
* to use this space for last-ditch allocation requests), although we
* should never need anything close to that.
+ *
+ * Encryption passwds are stored in the env region. Add that in too.
*/
memset(&tregion, 0, sizeof(tregion));
- tregion.size = 50 * sizeof(REGION) + 50 * sizeof(MUTEX) + 2048;
+ tregion.size = (roff_t)(50 * sizeof(REGION) +
+ dbenv->passwd_len + 2048);
tregion.segid = INVALID_REGION_SEGID;
if ((ret = __os_r_attach(dbenv, infop, &tregion)) != 0)
goto err;
@@ -363,7 +366,7 @@ creation:
* Fault the pages into memory. Note, do this BEFORE we initialize
* anything, because we're writing the pages, not just reading them.
*/
- (void)__db_faultmem(infop->addr, tregion.size, 1);
+ (void)__db_faultmem(dbenv, infop->addr, tregion.size, 1);
/*
* The first object in the region is the REGENV structure. This is
@@ -392,10 +395,12 @@ creation:
* number which validates the file/environment.
*/
renv = infop->primary;
- renv->panic = 0;
+ renv->envpanic = 0;
db_version(&renv->majver, &renv->minver, &renv->patch);
SH_LIST_INIT(&renv->regionq);
renv->refcnt = 1;
+ renv->cipher_off = INVALID_ROFF;
+ renv->rep_off = INVALID_ROFF;
/*
* Initialize init_flags to store the flags that any other environment
@@ -412,15 +417,15 @@ creation:
* filesystem as the database home. But you knew that, I'm sure -- it
* probably wasn't even worth mentioning.)
*/
- if ((ret =
- __db_mutex_init(dbenv, &renv->mutex, DB_FCNTL_OFF_GEN, 0)) != 0) {
+ if ((ret = __db_mutex_setup(dbenv, infop, &renv->mutex,
+ MUTEX_NO_RECORD | MUTEX_NO_RLOCK)) != 0) {
__db_err(dbenv, "%s: unable to initialize environment lock: %s",
infop->name, db_strerror(ret));
goto err;
}
if (!F_ISSET(&renv->mutex, MUTEX_IGNORE) &&
- (ret = __db_mutex_lock(dbenv, &renv->mutex, dbenv->lockfhp)) != 0) {
+ (ret = __db_mutex_lock(dbenv, &renv->mutex)) != 0) {
__db_err(dbenv, "%s: unable to acquire environment lock: %s",
infop->name, db_strerror(ret));
goto err;
@@ -459,8 +464,8 @@ find_err: __db_err(dbenv,
if (tregion.segid != INVALID_REGION_SEGID) {
ref.size = tregion.size;
ref.segid = tregion.segid;
- if ((ret = __os_write(dbenv, dbenv->lockfhp,
- &ref, sizeof(ref), &nrw)) != 0 || nrw != sizeof(ref)) {
+ if ((ret = __os_write(
+ dbenv, dbenv->lockfhp, &ref, sizeof(ref), &nrw)) != 0) {
__db_err(dbenv,
"%s: unable to write out public environment ID: %s",
infop->name, db_strerror(ret));
@@ -475,8 +480,10 @@ find_err: __db_err(dbenv,
* the better.
*/
#if defined(HAVE_MUTEX_THREADS)
- if (F_ISSET(dbenv->lockfhp, DB_FH_VALID))
- __os_closehandle(dbenv->lockfhp);
+ if (dbenv->lockfhp != NULL) {
+ (void)__os_closehandle(dbenv, dbenv->lockfhp);
+ dbenv->lockfhp = NULL;
+ }
#endif
/* Validate the file. */
@@ -491,8 +498,10 @@ find_err: __db_err(dbenv,
err:
retry: /* Close any open file handle. */
- if (F_ISSET(dbenv->lockfhp, DB_FH_VALID))
- (void)__os_closehandle(dbenv->lockfhp);
+ if (dbenv->lockfhp != NULL) {
+ (void)__os_closehandle(dbenv, dbenv->lockfhp);
+ dbenv->lockfhp = NULL;
+ }
/*
* If we joined or created the region, detach from it. If we created
@@ -513,8 +522,8 @@ retry: /* Close any open file handle. */
/* Free the allocated name and/or REGINFO structure. */
if (infop->name != NULL)
- __os_freestr(infop->name);
- __os_free(infop, sizeof(REGINFO));
+ __os_free(dbenv, infop->name);
+ __os_free(dbenv, infop);
/* If we had a temporary error, wait awhile and try again. */
if (ret == 0) {
@@ -522,7 +531,7 @@ retry: /* Close any open file handle. */
__db_err(dbenv, "unable to join the environment");
ret = EAGAIN;
} else {
- __os_sleep(dbenv, retry_cnt * 3, 0);
+ (void)__os_sleep(dbenv, retry_cnt * 3, 0);
goto loop;
}
}
@@ -547,14 +556,16 @@ __db_e_detach(dbenv, destroy)
infop = dbenv->reginfo;
renv = infop->primary;
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE))
+ destroy = 1;
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &renv->mutex);
/* Decrement the reference count. */
if (renv->refcnt == 0) {
__db_err(dbenv,
"region %lu (environment): reference count went negative",
- infop->rp->id);
+ (u_long)infop->rp->id);
} else
--renv->refcnt;
@@ -562,34 +573,42 @@ __db_e_detach(dbenv, destroy)
MUTEX_UNLOCK(dbenv, &renv->mutex);
/* Close the locking file handle. */
- if (F_ISSET(dbenv->lockfhp, DB_FH_VALID))
- (void)__os_closehandle(dbenv->lockfhp);
+ if (dbenv->lockfhp != NULL) {
+ (void)__os_closehandle(dbenv, dbenv->lockfhp);
+ dbenv->lockfhp = NULL;
+ }
/* Reset the addr value that we "corrected" above. */
infop->addr = infop->primary;
/*
* If we are destroying the environment, we need to
- * destroy any system resources backing the mutex.
- * Do that now before we free the memory in __os_r_detach.
+ * destroy any system resources backing the mutex, as well
+ * as any system resources that the replication system may have
+ * acquired and put in the main region.
+ *
+ * Do these now before we free the memory in __os_r_detach.
*/
- if (destroy)
+ if (destroy) {
+ (void)__rep_region_destroy(dbenv);
__db_mutex_destroy(&renv->mutex);
+ __db_mutex_destroy(&infop->rp->mutex);
+ }
/*
* Release the region, and kill our reference.
*
- * We set the DBENV->reginfo field to NULL here and discard its memory.
- * DBENV->remove calls __dbenv_remove to do the region remove, and
+ * We set the DB_ENV->reginfo field to NULL here and discard its memory.
+ * DB_ENV->remove calls __dbenv_remove to do the region remove, and
* __dbenv_remove attached and then detaches from the region. We don't
- * want to return to DBENV->remove with a non-NULL DBENV->reginfo field
- * because it will attempt to detach again as part of its cleanup.
+ * want to return to DB_ENV->remove with a non-NULL DB_ENV->reginfo
+ * field because it will attempt to detach again as part of its cleanup.
*/
(void)__os_r_detach(dbenv, infop, destroy);
if (infop->name != NULL)
- __os_free(infop->name, 0);
- __os_free(dbenv->reginfo, sizeof(REGINFO));
+ __os_free(dbenv, infop->name);
+ __os_free(dbenv, dbenv->reginfo);
dbenv->reginfo = NULL;
return (0);
@@ -599,18 +618,20 @@ __db_e_detach(dbenv, destroy)
* __db_e_remove --
* Discard an environment if it's not in use.
*
- * PUBLIC: int __db_e_remove __P((DB_ENV *, int));
+ * PUBLIC: int __db_e_remove __P((DB_ENV *, u_int32_t));
*/
int
-__db_e_remove(dbenv, force)
+__db_e_remove(dbenv, flags)
DB_ENV *dbenv;
- int force;
+ u_int32_t flags;
{
REGENV *renv;
REGINFO *infop, reginfo;
REGION *rp;
- int ret;
+ u_int32_t db_env_reset;
+ int force, ret;
+ force = LF_ISSET(DB_FORCE) ? 1 : 0;
/*
* This routine has to walk a nasty line between not looking into
* the environment (which may be corrupted after an app or system
@@ -632,8 +653,10 @@ __db_e_remove(dbenv, force)
* If the force flag is set, we do not acquire any locks during this
* process.
*/
+ db_env_reset = F_ISSET(dbenv, DB_ENV_NOLOCKING | DB_ENV_NOPANIC);
if (force)
- dbenv->db_mutexlocks = 0;
+ F_SET(dbenv, DB_ENV_NOLOCKING);
+ F_SET(dbenv, DB_ENV_NOPANIC);
/* Join the environment. */
if ((ret = __db_e_attach(dbenv, NULL)) != 0) {
@@ -645,17 +668,21 @@ __db_e_remove(dbenv, force)
ret = 0;
if (force)
goto remfiles;
- goto err;
+ goto done;
}
infop = dbenv->reginfo;
renv = infop->primary;
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &renv->mutex);
- /* If it's in use, we're done. */
- if (renv->refcnt == 1 || force) {
+ /*
+ * If it's in use, we're done unless we're forcing the issue or the
+ * environment has panic'd. (Presumably, if the environment panic'd,
+ * the thread holding the reference count may not have cleaned up.)
+ */
+ if (renv->refcnt == 1 || renv->envpanic == 1 || force) {
/*
* Set the panic flag and overwrite the magic number.
*
@@ -663,7 +690,7 @@ __db_e_remove(dbenv, force)
* From this point on, there's no going back, we pretty
* much ignore errors, and just whack on whatever we can.
*/
- renv->panic = 1;
+ renv->envpanic = 1;
renv->magic = 0;
/*
@@ -683,37 +710,28 @@ __db_e_remove(dbenv, force)
* callers be prepared to create the region in order to join it.
*/
memset(&reginfo, 0, sizeof(reginfo));
-restart: for (rp = SH_LIST_FIRST(&renv->regionq, __db_region);
+ for (rp = SH_LIST_FIRST(&renv->regionq, __db_region);
rp != NULL; rp = SH_LIST_NEXT(rp, q, __db_region)) {
if (rp->type == REGION_TYPE_ENV)
continue;
+ /*
+ * If we get here and can't attach and/or detach to the
+ * region, it's a mess. Ignore errors, there's nothing
+ * we can do about them.
+ */
reginfo.id = rp->id;
reginfo.flags = REGION_CREATE_OK;
- if ((ret = __db_r_attach(dbenv, &reginfo, 0)) != 0) {
- __db_err(dbenv,
- "region %s attach: %s", db_strerror(ret));
- continue;
- }
- R_UNLOCK(dbenv, &reginfo);
- if ((ret = __db_r_detach(dbenv, &reginfo, 1)) != 0) {
- __db_err(dbenv,
- "region detach: %s", db_strerror(ret));
- continue;
+ if (__db_r_attach(dbenv, &reginfo, 0) == 0) {
+ R_UNLOCK(dbenv, &reginfo);
+ (void)__db_r_detach(dbenv, &reginfo, 1);
}
- /*
- * If we have an error, we continue so we eventually
- * reach the end of the list. If we succeed, restart
- * the list because it was relinked when we destroyed
- * the entry.
- */
- goto restart;
}
/* Destroy the environment's region. */
(void)__db_e_detach(dbenv, 1);
- /* Discard the physical files. */
+ /* Discard any remaining physical files. */
remfiles: (void)__db_e_remfile(dbenv);
} else {
/* Unlock the environment. */
@@ -725,7 +743,9 @@ remfiles: (void)__db_e_remfile(dbenv);
ret = EBUSY;
}
-err:
+done: F_CLR(dbenv, DB_ENV_NOLOCKING | DB_ENV_NOPANIC);
+ F_SET(dbenv, db_env_reset);
+
return (ret);
}
@@ -737,13 +757,6 @@ static int
__db_e_remfile(dbenv)
DB_ENV *dbenv;
{
- static char *old_region_names[] = {
- "__db_lock.share",
- "__db_log.share",
- "__db_mpool.share",
- "__db_txn.share",
- NULL,
- };
int cnt, fcnt, lastrm, ret;
u_int8_t saved_byte;
const char *dir;
@@ -751,8 +764,7 @@ __db_e_remfile(dbenv)
/* Get the full path of a file in the environment. */
(void)snprintf(buf, sizeof(buf), "%s", DB_REGION_ENV);
- if ((ret =
- __db_appname(dbenv, DB_APP_NONE, NULL, buf, 0, NULL, &path)) != 0)
+ if ((ret = __db_appname(dbenv, DB_APP_NONE, buf, 0, NULL, &path)) != 0)
return (ret);
/* Get the parent directory for the environment. */
@@ -769,61 +781,67 @@ __db_e_remfile(dbenv)
}
/* Get the list of file names. */
- ret = __os_dirlist(dbenv, dir, &names, &fcnt);
+ if ((ret = __os_dirlist(dbenv, dir, &names, &fcnt)) != 0)
+ __db_err(dbenv, "%s: %s", dir, db_strerror(ret));
/* Restore the path, and free it. */
*p = saved_byte;
- __os_freestr(path);
+ __os_free(dbenv, path);
- if (ret != 0) {
- __db_err(dbenv, "%s: %s", dir, db_strerror(ret));
+ if (ret != 0)
return (ret);
- }
/*
- * Search for valid region names, and remove them. We remove the
- * environment region last, because it's the key to this whole mess.
+ * Remove files from the region directory.
*/
for (lastrm = -1, cnt = fcnt; --cnt >= 0;) {
- if (strlen(names[cnt]) != DB_REGION_NAME_LENGTH ||
- memcmp(names[cnt], DB_REGION_FMT, DB_REGION_NAME_NUM) != 0)
+ /* Skip anything outside our name space. */
+ if (strncmp(names[cnt],
+ DB_REGION_PREFIX, sizeof(DB_REGION_PREFIX) - 1))
+ continue;
+
+ /* Skip queue extent files. */
+ if (strncmp(names[cnt], "__dbq.", 6) == 0)
continue;
+
+ /*
+ * Remove the primary environment region last, because it's
+ * the key to this whole mess.
+ */
if (strcmp(names[cnt], DB_REGION_ENV) == 0) {
lastrm = cnt;
continue;
}
- for (p = names[cnt] + DB_REGION_NAME_NUM;
- *p != '\0' && isdigit((int)*p); ++p)
- ;
- if (*p != '\0')
- continue;
+ /* Remove the file. */
if (__db_appname(dbenv,
- DB_APP_NONE, NULL, names[cnt], 0, NULL, &path) == 0) {
+ DB_APP_NONE, names[cnt], 0, NULL, &path) == 0) {
+ /*
+ * Overwrite region files. Temporary files would have
+ * been maintained in encrypted format, so there's no
+ * reason to overwrite them. This is not an exact
+ * check on the file being a region file, but it's
+ * not likely to be wrong, and the worst thing that can
+ * happen is we overwrite a file that didn't need to be
+ * overwritten.
+ */
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE) &&
+ strlen(names[cnt]) == DB_REGION_NAME_LENGTH)
+ (void)__db_overwrite(dbenv, path);
(void)__os_unlink(dbenv, path);
- __os_freestr(path);
+ __os_free(dbenv, path);
}
}
if (lastrm != -1)
if (__db_appname(dbenv,
- DB_APP_NONE, NULL, names[lastrm], 0, NULL, &path) == 0) {
+ DB_APP_NONE, names[lastrm], 0, NULL, &path) == 0) {
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
+ (void)__db_overwrite(dbenv, path);
(void)__os_unlink(dbenv, path);
- __os_freestr(path);
- }
- __os_dirfree(names, fcnt);
-
- /*
- * !!!
- * Backward compatibility -- remove region files from releases
- * before 2.8.XX.
- */
- for (names = (char **)old_region_names; *names != NULL; ++names)
- if (__db_appname(dbenv,
- DB_APP_NONE, NULL, *names, 0, NULL, &path) == 0) {
- (void)__os_unlink(dbenv, path);
- __os_freestr(path);
+ __os_free(dbenv, path);
}
+ __os_dirfree(dbenv, names, fcnt);
return (0);
}
@@ -832,33 +850,47 @@ __db_e_remfile(dbenv)
* __db_e_stat
* Statistics for the environment.
*
- * PUBLIC: int __db_e_stat __P((DB_ENV *, REGENV *, REGION *, int *));
+ * PUBLIC: int __db_e_stat __P((DB_ENV *,
+ * PUBLIC: REGENV *, REGION *, int *, u_int32_t));
*/
int
-__db_e_stat(dbenv, arg_renv, arg_regions, arg_regions_cnt)
+__db_e_stat(dbenv, arg_renv, arg_regions, arg_regions_cnt, flags)
DB_ENV *dbenv;
REGENV *arg_renv;
REGION *arg_regions;
int *arg_regions_cnt;
+ u_int32_t flags;
{
REGENV *renv;
REGINFO *infop;
REGION *rp;
- int n;
+ int n, ret;
infop = dbenv->reginfo;
renv = infop->primary;
rp = infop->rp;
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->stat", flags, DB_STAT_CLEAR)) != 0)
+ return (ret);
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &rp->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &rp->mutex);
*arg_renv = *renv;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ renv->mutex.mutex_set_nowait = 0;
+ renv->mutex.mutex_set_wait = 0;
+ }
for (n = 0, rp = SH_LIST_FIRST(&renv->regionq, __db_region);
n < *arg_regions_cnt && rp != NULL;
- ++n, rp = SH_LIST_NEXT(rp, q, __db_region))
+ ++n, rp = SH_LIST_NEXT(rp, q, __db_region)) {
arg_regions[n] = *rp;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ rp->mutex.mutex_set_nowait = 0;
+ rp->mutex.mutex_set_wait = 0;
+ }
+ }
/* Release the lock. */
rp = infop->rp;
@@ -887,12 +919,15 @@ __db_r_attach(dbenv, infop, size)
char buf[sizeof(DB_REGION_FMT) + 20];
renv = ((REGINFO *)dbenv->reginfo)->primary;
- F_CLR(infop, REGION_CREATE);
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &renv->mutex);
- /* Find or create a REGION structure for this region. */
+ /*
+ * Find or create a REGION structure for this region. If we create
+ * it, the REGION_CREATE flag will be set in the infop structure.
+ */
+ F_CLR(infop, REGION_CREATE);
if ((ret = __db_des_get(dbenv, dbenv->reginfo, infop, &rp)) != 0) {
MUTEX_UNLOCK(dbenv, &renv->mutex);
return (ret);
@@ -903,12 +938,12 @@ __db_r_attach(dbenv, infop, size)
/* If we're creating the region, set the desired size. */
if (F_ISSET(infop, REGION_CREATE))
- rp->size = size;
+ rp->size = (roff_t)size;
/* Join/create the underlying region. */
(void)snprintf(buf, sizeof(buf), DB_REGION_FMT, infop->id);
if ((ret = __db_appname(dbenv,
- DB_APP_NONE, NULL, buf, 0, NULL, &infop->name)) != 0)
+ DB_APP_NONE, buf, 0, NULL, &infop->name)) != 0)
goto err;
if ((ret = __os_r_attach(dbenv, infop, rp)) != 0)
goto err;
@@ -918,8 +953,8 @@ __db_r_attach(dbenv, infop, size)
* anything because we're writing pages in created regions, not just
* reading them.
*/
- (void)__db_faultmem(infop->addr,
- rp->size, F_ISSET(infop, REGION_CREATE));
+ (void)__db_faultmem(dbenv,
+ infop->addr, rp->size, F_ISSET(infop, REGION_CREATE));
/*
* !!!
@@ -929,18 +964,15 @@ __db_r_attach(dbenv, infop, size)
*
* If we created the region, initialize it for allocation.
*/
- if (F_ISSET(infop, REGION_CREATE)) {
- ((REGION *)(infop->addr))->magic = DB_REGION_MAGIC;
-
+ if (F_ISSET(infop, REGION_CREATE))
(void)__db_shalloc_init(infop->addr, rp->size);
- }
/*
* If the underlying REGION isn't the environment, acquire a lock
* for it and release our lock on the environment.
*/
if (infop->type != REGION_TYPE_ENV) {
- MUTEX_LOCK(dbenv, &rp->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &rp->mutex);
MUTEX_UNLOCK(dbenv, &renv->mutex);
}
@@ -954,8 +986,10 @@ err: if (infop->addr != NULL)
infop->id = INVALID_REGION_ID;
/* Discard the REGION structure if we created it. */
- if (F_ISSET(infop, REGION_CREATE))
- (void)__db_des_destroy(dbenv, rp);
+ if (F_ISSET(infop, REGION_CREATE)) {
+ (void)__db_des_destroy(dbenv, rp, 1);
+ F_CLR(infop, REGION_CREATE);
+ }
/* Release the environment lock. */
MUTEX_UNLOCK(dbenv, &renv->mutex);
@@ -981,12 +1015,14 @@ __db_r_detach(dbenv, infop, destroy)
renv = ((REGINFO *)dbenv->reginfo)->primary;
rp = infop->rp;
+ if (F_ISSET(dbenv, DB_ENV_PRIVATE))
+ destroy = 1;
/* Lock the environment. */
- MUTEX_LOCK(dbenv, &renv->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &renv->mutex);
/* Acquire the lock for the REGION. */
- MUTEX_LOCK(dbenv, &rp->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &rp->mutex);
/*
* We need to call destroy on per-subsystem info before
@@ -1001,9 +1037,15 @@ __db_r_detach(dbenv, infop, destroy)
/* Release the REGION lock. */
MUTEX_UNLOCK(dbenv, &rp->mutex);
- /* If we destroyed the region, discard the REGION structure. */
+ /*
+ * If we destroyed the region, discard the REGION structure. The only
+ * time this routine is called with the destroy flag set is when the
+ * environment is being removed, and it's likely that the only reason
+ * the environment is being removed is because we crashed. Don't do
+ * any unnecessary shared memory manipulation.
+ */
if (destroy &&
- ((t_ret = __db_des_destroy(dbenv, rp)) != 0) && ret == 0)
+ ((t_ret = __db_des_destroy(dbenv, rp, 0)) != 0) && ret == 0)
ret = t_ret;
/* Release the environment lock. */
@@ -1011,7 +1053,7 @@ __db_r_detach(dbenv, infop, destroy)
/* Destroy the structure. */
if (infop->name != NULL)
- __os_freestr(infop->name);
+ __os_free(dbenv, infop->name);
return (ret);
}
@@ -1089,9 +1131,8 @@ __db_des_get(dbenv, env_infop, infop, rpp)
/* Initialize the region. */
memset(rp, 0, sizeof(*rp));
- if ((ret = __db_mutex_init(dbenv, &rp->mutex,
- R_OFFSET(env_infop, &rp->mutex) + DB_FCNTL_OFF_GEN,
- 0)) != 0) {
+ if ((ret = __db_mutex_setup(dbenv, env_infop, &rp->mutex,
+ MUTEX_NO_RECORD | MUTEX_NO_RLOCK)) != 0) {
__db_shalloc_free(env_infop->addr, rp);
return (ret);
}
@@ -1117,9 +1158,10 @@ __db_des_get(dbenv, env_infop, infop, rpp)
* Destroy a reference to a REGION.
*/
static int
-__db_des_destroy(dbenv, rp)
+__db_des_destroy(dbenv, rp, shmem_safe)
DB_ENV *dbenv;
REGION *rp;
+ int shmem_safe;
{
REGINFO *infop;
@@ -1129,9 +1171,22 @@ __db_des_destroy(dbenv, rp)
*/
infop = dbenv->reginfo;
- SH_LIST_REMOVE(rp, q, __db_region);
+ /*
+ * If we're calling during recovery, it may not be safe to access the
+ * shared memory, as the shared memory may have been corrupted during
+ * the crash. If the shared memory is safe, remove the REGION entry
+ * from its linked list, destroy the mutex, and free the allocated
+ * memory. On systems that require system mutex support, we don't
+ * have a choice -- safe or not, we have to destroy the mutex or we'll
+ * leak memory.
+ */
+ if (shmem_safe)
+ SH_LIST_REMOVE(rp, q, __db_region);
+
__db_mutex_destroy(&rp->mutex);
- __db_shalloc_free(infop->addr, rp);
+
+ if (shmem_safe)
+ __db_shalloc_free(infop->addr, rp);
return (0);
}
@@ -1141,7 +1196,8 @@ __db_des_destroy(dbenv, rp)
* Fault the region into memory.
*/
static int
-__db_faultmem(addr, size, created)
+__db_faultmem(dbenv, addr, size, created)
+ DB_ENV *dbenv;
void *addr;
size_t size;
int created;
@@ -1162,7 +1218,7 @@ __db_faultmem(addr, size, created)
* that it doesn't figure out that we're never really using it.
*/
ret = 0;
- if (DB_GLOBAL(db_region_init)) {
+ if (F_ISSET(dbenv, DB_ENV_REGION_INIT)) {
if (created)
for (p = addr, t = (u_int8_t *)addr + size;
p < t; p += OS_VMPAGESIZE)
@@ -1190,13 +1246,17 @@ __db_region_destroy(dbenv, infop)
case REGION_TYPE_LOCK:
__lock_region_destroy(dbenv, infop);
break;
+ case REGION_TYPE_LOG:
+ __log_region_destroy(dbenv, infop);
+ break;
case REGION_TYPE_MPOOL:
__mpool_region_destroy(dbenv, infop);
break;
+ case REGION_TYPE_TXN:
+ __txn_region_destroy(dbenv, infop);
+ break;
case REGION_TYPE_ENV:
- case REGION_TYPE_LOG:
case REGION_TYPE_MUTEX:
- case REGION_TYPE_TXN:
break;
default:
DB_ASSERT(0);
diff --git a/db/examples_c/README b/db/examples_c/README
index f59ae00a6..d5475ba01 100644
--- a/db/examples_c/README
+++ b/db/examples_c/README
@@ -1,7 +1,9 @@
-# $Id: README,v 11.3 2000/12/13 06:32:29 krinsky Exp $
+# $Id: README,v 11.5 2002/02/26 16:22:45 krinsky Exp $
ex_access.c Using just the DB access methods.
+ex_apprec Application-specific recovery.
+
ex_btrec.c Using the BTREE access method with record numbers.
ex_env.c Setting up the DB environment.
@@ -10,6 +12,10 @@ ex_lock.c Locking.
ex_mpool.c Shared memory buffer pools.
+ex_repquote Replication. This creates a toy stock quote server
+ with DB's single-master, multiple-client replication,
+ with communication over TCP.
+
ex_tpcb.c TPC/B.
Ex_tpcb sets up a framework in which to run a TPC/B test.
Database initialization (the -i flag) and running the
diff --git a/db/examples_c/bench_001.c b/db/examples_c/bench_001.c
index 4d1f1a326..6754be195 100644
--- a/db/examples_c/bench_001.c
+++ b/db/examples_c/bench_001.c
@@ -1,8 +1,8 @@
/*-
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: bench_001.c,v 1.13 2002/08/15 02:45:39 bostic Exp
+ * $Id: bench_001.c,v 1.15 2003/01/08 04:43:48 bostic Exp $
*/
/*
@@ -39,6 +39,9 @@
#define DATABASE "bench_001.db"
+DB_ENV *db_init(char *, char *, int, int);
+int fill(DB_ENV *, DB *, int, int, int, int);
+int get(DB *,int, int, int, int, int, int *);
int main(int, char *[]);
void usage(void);
diff --git a/db/examples_c/ex_access.c b/db/examples_c/ex_access.c
index 3448daf43..1e4c0bdc1 100644
--- a/db/examples_c/ex_access.c
+++ b/db/examples_c/ex_access.c
@@ -1,87 +1,69 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_access.c,v 11.7 2000/05/22 15:17:03 sue Exp $
+ * $Id: ex_access.c,v 11.23 2003/01/08 04:43:53 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
#include <unistd.h>
#endif
#include <db.h>
-#ifdef HAVE_VXWORKS
-#include "stdio.h"
-#define DATABASE "/vxtmp/vxtmp/access.db"
-#define ERROR_RETURN ERROR
-#else
#define DATABASE "access.db"
-#define ERROR_RETURN 1
-int main __P((int, char *[]));
-void usage __P((char *));
-#endif
-
-int ex_access __P((void));
+int main __P((int, char *[]));
+int usage __P((void));
-#ifndef HAVE_VXWORKS
int
main(argc, argv)
int argc;
char *argv[];
{
- extern char *optarg;
extern int optind;
- int ch;
+ DB *dbp;
+ DBC *dbcp;
+ DBT key, data;
+ u_int32_t len;
+ int ch, ret, rflag;
+ char *database, *p, *t, buf[1024], rbuf[1024];
+ const char *progname = "ex_access"; /* Program name. */
- while ((ch = getopt(argc, argv, "")) != EOF)
+ rflag = 0;
+ while ((ch = getopt(argc, argv, "r")) != EOF)
switch (ch) {
+ case 'r':
+ rflag = 1;
+ break;
case '?':
default:
- usage(argv[0]);
+ return (usage());
}
argc -= optind;
argv += optind;
- return (ex_access());
-}
-
-void
-usage(progname)
- char *progname;
-{
- (void)fprintf(stderr, "usage: %s\n", progname);
- exit(1);
-}
-#endif
-
-int
-ex_access()
-{
- DB *dbp;
- DBC *dbcp;
- DBT key, data;
- u_int32_t len;
- int ret;
- char *p, *t, buf[1024], rbuf[1024];
- const char *progname = "ex_access"; /* Program name. */
+ /* Accept optional database name. */
+ database = *argv == NULL ? DATABASE : argv[0];
- /* Remove the previous database. */
- (void)unlink(DATABASE);
+ /* Optionally discard the database. */
+ if (rflag)
+ (void)remove(database);
/* Create and initialize database object, open the database. */
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr,
"%s: db_create: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (EXIT_FAILURE);
}
dbp->set_errfile(dbp, stderr);
dbp->set_errpfx(dbp, progname);
@@ -93,9 +75,9 @@ ex_access()
dbp->err(dbp, ret, "set_cachesize");
goto err1;
}
- if ((ret =
- dbp->open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
- dbp->err(dbp, ret, "%s: open", DATABASE);
+ if ((ret = dbp->open(dbp,
+ NULL, database, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ dbp->err(dbp, ret, "%s: open", database);
goto err1;
}
@@ -110,6 +92,8 @@ ex_access()
fflush(stdout);
if (fgets(buf, sizeof(buf), stdin) == NULL)
break;
+ if (strcmp(buf, "exit\n") == 0 || strcmp(buf, "quit\n") == 0)
+ break;
if ((len = strlen(buf)) <= 1)
continue;
for (t = rbuf, p = buf + (len - 2); p >= buf;)
@@ -161,11 +145,18 @@ ex_access()
if ((ret = dbp->close(dbp, 0)) != 0) {
fprintf(stderr,
"%s: DB->close: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (EXIT_FAILURE);
}
- return (0);
+ return (EXIT_SUCCESS);
err2: (void)dbcp->c_close(dbcp);
err1: (void)dbp->close(dbp, 0);
- return (ERROR_RETURN);
+ return (EXIT_FAILURE);
+}
+
+int
+usage()
+{
+ (void)fprintf(stderr, "usage: ex_access [-r] [database]\n");
+ return (EXIT_FAILURE);
}
diff --git a/db/examples_c/ex_apprec/ex_apprec.c b/db/examples_c/ex_apprec/ex_apprec.c
index 571388d4b..7167bf59a 100644
--- a/db/examples_c/ex_apprec/ex_apprec.c
+++ b/db/examples_c/ex_apprec/ex_apprec.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_apprec.c,v 1.2 2002/08/06 05:39:01 bostic Exp
+ * $Id: ex_apprec.c,v 1.4 2003/02/14 03:57:30 bostic Exp $
*/
#include <sys/types.h>
@@ -32,7 +32,6 @@ main(argc, argv)
char *argv[];
{
extern char *optarg;
- extern int optind;
DB_ENV *dbenv;
DB_LSN lsn;
DB_TXN *txn;
diff --git a/db/examples_c/ex_apprec/ex_apprec.h b/db/examples_c/ex_apprec/ex_apprec.h
index f4899de29..b8eb02544 100644
--- a/db/examples_c/ex_apprec/ex_apprec.h
+++ b/db/examples_c/ex_apprec/ex_apprec.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002
+ * Copyright (c) 2002-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_apprec.h,v 1.2 2002/08/08 15:47:00 bostic Exp
+ * $Id: ex_apprec.h,v 1.4 2003/01/08 04:45:12 bostic Exp $
*/
#ifndef _EX_APPREC_H_
@@ -20,5 +20,7 @@ int ex_apprec_mkdir_read
__P((DB_ENV *, void *, ex_apprec_mkdir_args **));
int ex_apprec_mkdir_recover
__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+int ex_apprec_init_print __P((DB_ENV *,
+ int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *), size_t *));
#endif /* !_EX_APPREC_H_ */
diff --git a/db/examples_c/ex_apprec/ex_apprec.src b/db/examples_c/ex_apprec/ex_apprec.src
index 986b57b68..3880ec756 100644
--- a/db/examples_c/ex_apprec/ex_apprec.src
+++ b/db/examples_c/ex_apprec/ex_apprec.src
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002
+ * Copyright (c) 2002-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_apprec.src,v 1.3 2002/08/08 15:47:00 bostic Exp
+ * $Id: ex_apprec.src,v 1.4 2003/01/08 04:45:15 bostic Exp $
*/
PREFIX ex_apprec
diff --git a/db/examples_c/ex_apprec/ex_apprec_auto.c b/db/examples_c/ex_apprec/ex_apprec_auto.c
index d8c27e762..cc9fc84d1 100644
--- a/db/examples_c/ex_apprec/ex_apprec_auto.c
+++ b/db/examples_c/ex_apprec/ex_apprec_auto.c
@@ -22,10 +22,10 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
{
DBT logrec;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int ret;
rectype = DB_ex_apprec_mkdir;
npad = 0;
@@ -44,7 +44,6 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
+ sizeof(u_int32_t) + (dirname == NULL ? 0 : dirname->size);
if ((logrec.data = malloc(logrec.size)) == NULL)
return (ENOMEM);
-
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -70,16 +69,17 @@ ex_apprec_mkdir_log(dbenv, txnid, ret_lsnp, flags,
bp += dirname->size;
}
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL && ret == 0)
+ ret = dbenv->log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
+ if (ret == 0 && txnid != NULL)
txnid->last_lsn = *ret_lsnp;
+
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)ex_apprec_mkdir_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
free(logrec.data);
+
return (ret);
}
@@ -106,9 +106,10 @@ ex_apprec_mkdir_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = ex_apprec_mkdir_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]ex_apprec_mkdir: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]ex_apprec_mkdir%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -121,6 +122,7 @@ ex_apprec_mkdir_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\n");
(void)printf("\n");
free(argp);
+
return (0);
}
@@ -141,7 +143,6 @@ ex_apprec_mkdir_read(dbenv, recbuf, argpp)
dbenv = NULL;
if ((argp = malloc(sizeof(ex_apprec_mkdir_args) + sizeof(DB_TXN))) == NULL)
return (ENOMEM);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
diff --git a/db/examples_c/ex_apprec/ex_apprec_rec.c b/db/examples_c/ex_apprec/ex_apprec_rec.c
index ea732c3e1..065a928b2 100644
--- a/db/examples_c/ex_apprec/ex_apprec_rec.c
+++ b/db/examples_c/ex_apprec/ex_apprec_rec.c
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_apprec_rec.c,v 1.2 2002/08/06 05:39:02 bostic Exp
+ * $Id: ex_apprec_rec.c,v 1.3 2003/01/08 04:45:19 bostic Exp $
*/
/*
diff --git a/db/examples_c/ex_btrec.c b/db/examples_c/ex_btrec.c
index b74f16b83..641b6eb7c 100644
--- a/db/examples_c/ex_btrec.c
+++ b/db/examples_c/ex_btrec.c
@@ -1,70 +1,32 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_btrec.c,v 11.8 2000/05/22 15:17:03 sue Exp $
+ * $Id: ex_btrec.c,v 11.19 2003/01/08 04:43:54 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
#include <db.h>
-#ifdef HAVE_VXWORKS
-#define DATABASE "/vxtmp/vxtmp/access.db"
-#define WORDLIST "/vxtmp/vxtmp/wordlist"
-#define ERROR_RETURN ERROR
-#else
#define DATABASE "access.db"
#define WORDLIST "../test/wordlist"
-#define ERROR_RETURN 1
-int main __P((int, char *[]));
-void usage __P((char *));
-#endif
+int main __P((void));
int ex_btrec __P((void));
-void show __P((char *, DBT *, DBT *));
+void show __P((const char *, DBT *, DBT *));
-#ifndef HAVE_VXWORKS
int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- extern char *optarg;
- extern int optind;
- int ch;
-
- while ((ch = getopt(argc, argv, "")) != EOF)
- switch (ch) {
- case '?':
- default:
- usage(argv[0]);
- }
- argc -= optind;
- argv += optind;
-
- return (ex_btrec());
-}
-
-void
-usage(progname)
- char *progname;
+main()
{
- (void)fprintf(stderr, "usage: %s\n", progname);
- exit(1);
+ return (ex_btrec() == 1 ? EXIT_FAILURE : EXIT_SUCCESS);
}
-#endif
int
ex_btrec()
@@ -84,32 +46,32 @@ ex_btrec()
if ((fp = fopen(WORDLIST, "r")) == NULL) {
fprintf(stderr, "%s: open %s: %s\n",
progname, WORDLIST, db_strerror(errno));
- return (ERROR_RETURN);
+ return (1);
}
/* Remove the previous database. */
- (void)unlink(DATABASE);
+ (void)remove(DATABASE);
/* Create and initialize database object, open the database. */
if ((ret = db_create(&dbp, NULL, 0)) != 0) {
fprintf(stderr,
"%s: db_create: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
dbp->set_errfile(dbp, stderr);
dbp->set_errpfx(dbp, progname); /* 1K page sizes. */
if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {
dbp->err(dbp, ret, "set_pagesize");
- return (ERROR_RETURN);
+ return (1);
} /* Record numbers. */
if ((ret = dbp->set_flags(dbp, DB_RECNUM)) != 0) {
dbp->err(dbp, ret, "set_flags: DB_RECNUM");
- return (ERROR_RETURN);
+ return (1);
}
- if ((ret =
- dbp->open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp->open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "open: %s", DATABASE);
- return (ERROR_RETURN);
+ return (1);
}
/*
@@ -144,7 +106,7 @@ ex_btrec()
(void)fclose(fp);
/* Print out the number of records in the database. */
- if ((ret = dbp->stat(dbp, &statp, NULL, 0)) != 0) {
+ if ((ret = dbp->stat(dbp, &statp, 0)) != 0) {
dbp->err(dbp, ret, "DB->stat");
goto err1;
}
@@ -215,7 +177,7 @@ get_err: dbp->err(dbp, ret, "DBcursor->get");
if ((ret = dbp->close(dbp, 0)) != 0) {
fprintf(stderr,
"%s: DB->close: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
return (0);
@@ -232,8 +194,8 @@ err1: (void)dbp->close(dbp, 0);
*/
void
show(msg, key, data)
+ const char *msg;
DBT *key, *data;
- char *msg;
{
printf("%s%.*s : %.*s\n", msg,
(int)key->size, (char *)key->data,
diff --git a/db/examples_c/ex_dbclient.c b/db/examples_c/ex_dbclient.c
index 27461a892..d92c1299e 100644
--- a/db/examples_c/ex_dbclient.c
+++ b/db/examples_c/ex_dbclient.c
@@ -1,22 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_dbclient.c,v 1.12 2000/10/26 14:13:05 bostic Exp $
+ * $Id: ex_dbclient.c,v 1.30 2003/05/16 15:06:20 sue Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#endif
#include <db.h>
@@ -24,52 +20,40 @@
#define DATABASE "access.db"
-int db_clientrun __P((DB_ENV *, char *));
-int ex_dbclient_run __P((char *, FILE *, char *, char *));
-#ifdef HAVE_VXWORKS
-int ex_dbclient __P((char *));
-#define ERROR_RETURN ERROR
-#define VXSHM_KEY 10
-#else
+int db_clientrun __P((DB_ENV *, const char *));
+int ex_dbclient_run __P((const char *, FILE *, const char *, const char *));
int main __P((int, char *[]));
-#define ERROR_RETURN 1
-#endif
/*
* An example of a program creating/configuring a Berkeley DB environment.
*/
-#ifndef HAVE_VXWORKS
int
main(argc, argv)
int argc;
char *argv[];
{
- char *home;
- int ret;
+ const char *home;
if (argc != 2) {
- fprintf(stderr, "Usage: %s hostname\n",argv[0]);
- exit(1);
+ fprintf(stderr, "Usage: %s hostname\n", argv[0]);
+ return (EXIT_FAILURE);
}
+
/*
* All of the shared database files live in DATABASE_HOME, but
* data files will live in CONFIG_DATA_DIR.
*/
home = DATABASE_HOME;
-
- if ((ret = ex_dbclient_run(home, stderr, argv[1], argv[0])) != 0)
- return (ret);
-
- return (0);
+ return (ex_dbclient_run(home,
+ stderr, argv[1], argv[0]) == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-#endif
int
ex_dbclient(host)
- char *host;
+ const char *host;
{
- char *home;
- char *progname = "ex_dbclient"; /* Program name. */
+ const char *home;
+ const char *progname = "ex_dbclient"; /* Program name. */
int ret;
/*
@@ -86,7 +70,7 @@ ex_dbclient(host)
int
ex_dbclient_run(home, errfp, host, progname)
- char *home, *host, *progname;
+ const char *home, *host, *progname;
FILE *errfp;
{
DB_ENV *dbenv;
@@ -96,37 +80,31 @@ ex_dbclient_run(home, errfp, host, progname)
* Create an environment object and initialize it for error
* reporting.
*/
- if ((ret = db_env_create(&dbenv, DB_CLIENT)) != 0) {
+ if ((ret = db_env_create(&dbenv, DB_RPCCLIENT)) != 0) {
fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
- }
-#ifdef HAVE_VXWORKS
- if ((ret = dbenv->set_shm_key(dbenv, VXSHM_KEY)) != 0) {
- fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
-#endif
retry = 0;
retry:
while (retry < 5) {
/*
* Set the server host we are talking to.
*/
- if ((ret =
- dbenv->set_server(dbenv, host, 10000, 10000, 0)) != 0) {
- fprintf(stderr, "Try %d: DBENV->set_server: %s\n",
+ if ((ret = dbenv->set_rpc_server(dbenv, NULL, host, 10000,
+ 10000, 0)) != 0) {
+ fprintf(stderr, "Try %d: DB_ENV->set_rpc_server: %s\n",
retry, db_strerror(ret));
retry++;
- if ((ret = __os_sleep(dbenv, 15, 0)) != 0)
- return (ret);
+ sleep(15);
} else
break;
}
if (retry >= 5) {
- fprintf(stderr, "DBENV->set_server: %s\n", db_strerror(ret));
+ fprintf(stderr,
+ "DB_ENV->set_rpc_server: %s\n", db_strerror(ret));
dbenv->close(dbenv, 0);
- return (ERROR_RETURN);
+ return (1);
}
/*
* We want to specify the shared memory buffer pool cachesize,
@@ -135,7 +113,7 @@ retry:
if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) {
dbenv->err(dbenv, ret, "set_cachesize");
dbenv->close(dbenv, 0);
- return (ERROR_RETURN);
+ return (1);
}
/*
* We have multiple processes reading/writing these files, so
@@ -143,12 +121,12 @@ retry:
* not logging or transactions.
*/
if ((ret = dbenv->open(dbenv, home,
- DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_INIT_TXN, 0)) != 0) {
+ DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL, 0)) != 0) {
dbenv->err(dbenv, ret, "environment open: %s", home);
dbenv->close(dbenv, 0);
if (ret == DB_NOSERVER)
goto retry;
- return (ERROR_RETURN);
+ return (1);
}
ret = db_clientrun(dbenv, progname);
@@ -158,8 +136,8 @@ retry:
/* Close the handle. */
if ((ret = dbenv->close(dbenv, 0)) != 0) {
- fprintf(stderr, "DBENV->close: %s\n", db_strerror(ret));
- return (ERROR_RETURN);
+ fprintf(stderr, "DB_ENV->close: %s\n", db_strerror(ret));
+ return (1);
}
return (0);
}
@@ -167,7 +145,7 @@ retry:
int
db_clientrun(dbenv, progname)
DB_ENV *dbenv;
- char *progname;
+ const char *progname;
{
DB *dbp;
DBT key, data;
@@ -187,8 +165,8 @@ db_clientrun(dbenv, progname)
dbp->err(dbp, ret, "set_pagesize");
goto err1;
}
- if ((ret =
- dbp->open(dbp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
+ if ((ret = dbp->open(dbp,
+ NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s: open", DATABASE);
goto err1;
}
diff --git a/db/examples_c/ex_env.c b/db/examples_c/ex_env.c
index 5490723a3..969941b0d 100644
--- a/db/examples_c/ex_env.c
+++ b/db/examples_c/ex_env.c
@@ -1,21 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_env.c,v 11.18 2000/10/27 20:32:00 dda Exp $
+ * $Id: ex_env.c,v 11.28 2003/01/08 04:43:57 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
-#endif
#include <db.h>
@@ -27,40 +23,23 @@
#define DATABASE_HOME "\\tmp\\database"
#define CONFIG_DATA_DIR "\\database\\files"
#else
-#ifdef HAVE_VXWORKS
-#define DATABASE_HOME "/ata0/vxtmp/database"
-#define CONFIG_DATA_DIR "/vxtmp/vxtmp/database/files"
-#else
#define DATABASE_HOME "/tmp/database"
#define CONFIG_DATA_DIR "/database/files"
#endif
#endif
-#endif
-int db_setup __P((char *, char *, FILE *, char *));
-int db_teardown __P((char *, char *, FILE *, char *));
-#ifdef HAVE_VXWORKS
-int ex_env __P((void));
-#define ERROR_RETURN ERROR
-#define VXSHM_KEY 11
-#else
+int db_setup __P((const char *, const char *, FILE *, const char *));
+int db_teardown __P((const char *, const char *, FILE *, const char *));
int main __P((void));
-#define ERROR_RETURN 1
-#endif
/*
* An example of a program creating/configuring a Berkeley DB environment.
*/
int
-#ifdef HAVE_VXWORKS
-ex_env()
-#else
main()
-#endif
{
- int ret;
- char *data_dir, *home;
- char *progname = "ex_env"; /* Program name. */
+ const char *data_dir, *home;
+ const char *progname = "ex_env"; /* Program name. */
/*
* All of the shared database files live in DATABASE_HOME, but
@@ -70,19 +49,19 @@ main()
data_dir = CONFIG_DATA_DIR;
printf("Setup env\n");
- if ((ret = db_setup(home, data_dir, stderr, progname)) != 0)
- return (ret);
+ if (db_setup(home, data_dir, stderr, progname) != 0)
+ return (EXIT_FAILURE);
printf("Teardown env\n");
- if ((ret = db_teardown(home, data_dir, stderr, progname)) != 0)
- return (ret);
+ if (db_teardown(home, data_dir, stderr, progname) != 0)
+ return (EXIT_FAILURE);
- return (0);
+ return (EXIT_SUCCESS);
}
int
db_setup(home, data_dir, errfp, progname)
- char *home, *data_dir, *progname;
+ const char *home, *data_dir, *progname;
FILE *errfp;
{
DB_ENV *dbenv;
@@ -94,19 +73,11 @@ db_setup(home, data_dir, errfp, progname)
*/
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
dbenv->set_errfile(dbenv, errfp);
dbenv->set_errpfx(dbenv, progname);
-#ifdef HAVE_VXWORKS
- /* VxWorks needs to specify a base segment ID. */
- if ((ret = dbenv->set_shm_key(dbenv, VXSHM_KEY)) != 0) {
- fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
- }
-#endif
-
/*
* We want to specify the shared memory buffer pool cachesize,
* but everything else is the default.
@@ -114,7 +85,7 @@ db_setup(home, data_dir, errfp, progname)
if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) {
dbenv->err(dbenv, ret, "set_cachesize");
dbenv->close(dbenv, 0);
- return (ERROR_RETURN);
+ return (1);
}
/* Databases are in a subdirectory. */
@@ -126,22 +97,22 @@ db_setup(home, data_dir, errfp, progname)
0)) != 0) {
dbenv->err(dbenv, ret, "environment open: %s", home);
dbenv->close(dbenv, 0);
- return (ERROR_RETURN);
+ return (1);
}
/* Do something interesting... */
/* Close the handle. */
if ((ret = dbenv->close(dbenv, 0)) != 0) {
- fprintf(stderr, "DBENV->close: %s\n", db_strerror(ret));
- return (ERROR_RETURN);
+ fprintf(stderr, "DB_ENV->close: %s\n", db_strerror(ret));
+ return (1);
}
return (0);
}
int
db_teardown(home, data_dir, errfp, progname)
- char *home, *data_dir, *progname;
+ const char *home, *data_dir, *progname;
FILE *errfp;
{
DB_ENV *dbenv;
@@ -150,21 +121,15 @@ db_teardown(home, data_dir, errfp, progname)
/* Remove the shared database regions. */
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
dbenv->set_errfile(dbenv, errfp);
dbenv->set_errpfx(dbenv, progname);
-#ifdef HAVE_VXWORKS
- if ((ret = dbenv->set_shm_key(dbenv, VXSHM_KEY)) != 0) {
- fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
- }
-#endif
(void)dbenv->set_data_dir(dbenv, data_dir);
if ((ret = dbenv->remove(dbenv, home, 0)) != 0) {
- fprintf(stderr, "DBENV->remove: %s\n", db_strerror(ret));
- return (ERROR_RETURN);
+ fprintf(stderr, "DB_ENV->remove: %s\n", db_strerror(ret));
+ return (1);
}
return (0);
}
diff --git a/db/examples_c/ex_lock.c b/db/examples_c/ex_lock.c
index e858be6b3..1e4c70cac 100644
--- a/db/examples_c/ex_lock.c
+++ b/db/examples_c/ex_lock.c
@@ -1,27 +1,28 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_lock.c,v 11.6 2001/01/04 14:23:29 dda Exp $
+ * $Id: ex_lock.c,v 11.19 2003/01/08 04:43:59 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
#include <unistd.h>
#endif
#include <db.h>
-void db_init __P((char *, u_int32_t, int));
-int main __P((int, char *[]));
-void usage __P((void));
+int db_init __P((const char *, u_int32_t, int));
+int main __P((int, char *[]));
+int usage __P((void));
DB_ENV *dbenv;
const char
@@ -41,7 +42,8 @@ main(argc, argv)
long held;
u_int32_t len, locker, maxlocks;
int ch, do_unlink, did_get, i, lockid, lockcount, ret;
- char *home, opbuf[16], objbuf[1024], lockbuf[16];
+ const char *home;
+ char opbuf[16], objbuf[1024], lockbuf[16];
home = "TESTDIR";
maxlocks = 0;
@@ -53,7 +55,7 @@ main(argc, argv)
break;
case 'm':
if ((i = atoi(optarg)) <= 0)
- usage();
+ return (usage());
maxlocks = (u_int32_t)i; /* XXX: possible overflow. */
break;
case 'u':
@@ -61,16 +63,17 @@ main(argc, argv)
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
if (argc != 0)
- usage();
+ return (usage());
/* Initialize the database environment. */
- db_init(home, maxlocks, do_unlink);
+ if ((ret = db_init(home, maxlocks, do_unlink)) != 0)
+ return (ret);
locks = 0;
lockcount = 0;
@@ -78,10 +81,10 @@ main(argc, argv)
/*
* Accept lock requests.
*/
- if ((ret = lock_id(dbenv, &locker)) != 0) {
+ if ((ret = dbenv->lock_id(dbenv, &locker)) != 0) {
dbenv->err(dbenv, ret, "unable to get locker id");
(void)dbenv->close(dbenv, 0);
- exit (1);
+ return (EXIT_FAILURE);
}
lockid = -1;
@@ -117,7 +120,7 @@ main(argc, argv)
lock_dbt.data = objbuf;
lock_dbt.size = strlen(objbuf);
- ret = lock_get(dbenv, locker,
+ ret = dbenv->lock_get(dbenv, locker,
DB_LOCK_NOWAIT, &lock_dbt, lock_type, &lock);
if (ret == 0) {
did_get = 1;
@@ -145,7 +148,7 @@ main(argc, argv)
continue;
}
lock = locks[lockid];
- ret = lock_put(dbenv, &lock);
+ ret = dbenv->lock_put(dbenv, &lock);
did_get = 0;
}
switch (ret) {
@@ -165,7 +168,7 @@ main(argc, argv)
dbenv->err(dbenv, ret,
"lock_%s", did_get ? "get" : "put");
(void)dbenv->close(dbenv, 0);
- exit (1);
+ return (EXIT_FAILURE);
}
}
@@ -177,18 +180,18 @@ main(argc, argv)
if ((ret = dbenv->close(dbenv, 0)) != 0) {
fprintf(stderr,
"%s: dbenv->close: %s\n", progname, db_strerror(ret));
- return (1);
+ return (EXIT_FAILURE);
}
- return (0);
+ return (EXIT_SUCCESS);
}
/*
* db_init --
* Initialize the environment.
*/
-void
+int
db_init(home, maxlocks, do_unlink)
- char *home;
+ const char *home;
u_int32_t maxlocks;
int do_unlink;
{
@@ -197,19 +200,19 @@ db_init(home, maxlocks, do_unlink)
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr, "%s: db_env_create: %s\n",
progname, db_strerror(ret));
- exit (1);
+ return (EXIT_FAILURE);
}
if (do_unlink) {
if ((ret = dbenv->remove(dbenv, home, DB_FORCE)) != 0) {
fprintf(stderr, "%s: dbenv->remove: %s\n",
progname, db_strerror(ret));
- exit (1);
+ return (EXIT_FAILURE);
}
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr, "%s: db_env_create: %s\n",
progname, db_strerror(ret));
- exit (1);
+ return (EXIT_FAILURE);
}
}
@@ -222,14 +225,15 @@ db_init(home, maxlocks, do_unlink)
dbenv->open(dbenv, home, DB_CREATE | DB_INIT_LOCK, 0)) != 0) {
dbenv->err(dbenv, ret, NULL);
(void)dbenv->close(dbenv, 0);
- exit(1);
+ return (EXIT_FAILURE);
}
+ return (0);
}
-void
+int
usage()
{
(void)fprintf(stderr,
"usage: %s [-u] [-h home] [-m maxlocks]\n", progname);
- exit(1);
+ return (EXIT_FAILURE);
}
diff --git a/db/examples_c/ex_mpool.c b/db/examples_c/ex_mpool.c
index 376c66478..96bd93b15 100644
--- a/db/examples_c/ex_mpool.c
+++ b/db/examples_c/ex_mpool.c
@@ -1,53 +1,34 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_mpool.c,v 11.13 2000/10/27 20:32:00 dda Exp $
+ * $Id: ex_mpool.c,v 11.29 2003/09/04 18:06:47 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#if TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
-
#include <errno.h>
-#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
#include <unistd.h>
#endif
#include <db.h>
-int init __P((char *, int, int, char *));
-int run __P((int, int, int, int, char *));
-int run_mpool __P((int, int, int, int, char *));
-#ifdef HAVE_VXWORKS
-int ex_mpool __P((void));
-#define MPOOL "/vxtmp/vxtmp/mpool" /* File. */
-#define ERROR_RETURN ERROR
-#define VXSHM_KEY 12
-#else
+int init __P((const char *, int, int, const char *));
+int run __P((int, int, int, int, const char *));
+int run_mpool __P((int, int, int, int, const char *));
int main __P((int, char *[]));
-void usage __P((char *));
+int usage __P((const char *));
#define MPOOL "mpool" /* File. */
-#define ERROR_RETURN 1
-#endif
-#ifndef HAVE_VXWORKS
int
main(argc, argv)
int argc;
@@ -67,59 +48,45 @@ main(argc, argv)
switch (ch) {
case 'c':
if ((cachesize = atoi(optarg)) < 20 * 1024)
- usage(progname);
+ return (usage(progname));
break;
case 'h':
if ((hits = atoi(optarg)) <= 0)
- usage(progname);
+ return (usage(progname));
break;
case 'n':
if ((npages = atoi(optarg)) <= 0)
- usage(progname);
+ return (usage(progname));
break;
case 'p':
if ((pagesize = atoi(optarg)) <= 0)
- usage(progname);
+ return (usage(progname));
break;
case '?':
default:
- usage(progname);
+ return (usage(progname));
}
argc -= optind;
argv += optind;
- return (run_mpool(pagesize, cachesize, hits, npages, progname));
+ return (run_mpool(pagesize, cachesize,
+ hits, npages, progname) == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
-void
+int
usage(progname)
- char *progname;
+ const char *progname;
{
(void)fprintf(stderr,
"usage: %s [-c cachesize] [-h hits] [-n npages] [-p pagesize]\n",
progname);
- exit(1);
+ return (EXIT_FAILURE);
}
-#else
-int
-ex_mpool()
-{
- char *progname = "ex_mpool"; /* Program name. */
- int cachesize, ch, hits, npages, pagesize;
-
- cachesize = 20 * 1024;
- hits = 1000;
- npages = 50;
- pagesize = 1024;
-
- return (run_mpool(pagesize, cachesize, hits, npages, progname));
-}
-#endif
int
run_mpool(pagesize, cachesize, hits, npages, progname)
int pagesize, cachesize, hits, npages;
- char *progname;
+ const char *progname;
{
int ret;
@@ -140,41 +107,44 @@ run_mpool(pagesize, cachesize, hits, npages, progname)
*/
int
init(file, pagesize, npages, progname)
- char *file, *progname;
+ const char *file, *progname;
int pagesize, npages;
{
- int cnt, flags, fd;
+ FILE *fp;
+ int cnt;
char *p;
/*
* Create a file with the right number of pages, and store a page
* number on each page.
*/
- flags = O_CREAT | O_RDWR | O_TRUNC;
-#ifdef DB_WIN32
- flags |= O_BINARY;
-#endif
- if ((fd = open(file, flags, 0666)) < 0) {
+ (void)remove(file);
+ if ((fp = fopen(file, "wb")) == NULL) {
fprintf(stderr,
"%s: %s: %s\n", progname, file, strerror(errno));
- return (ERROR_RETURN);
+ return (1);
}
if ((p = (char *)malloc(pagesize)) == NULL) {
fprintf(stderr, "%s: %s\n", progname, strerror(ENOMEM));
- return (ERROR_RETURN);
+ return (1);
}
- /* The pages are numbered from 0. */
- for (cnt = 0; cnt <= npages; ++cnt) {
- *(int *)p = cnt;
- if (write(fd, p, pagesize) != pagesize) {
+ /*
+ * The pages are numbered from 0, not 1.
+ *
+ * Write the index of the page at the beginning of the page in order
+ * to verify the retrieved page (see run()).
+ */
+ for (cnt = 0; cnt < npages; ++cnt) {
+ *(db_pgno_t *)p = cnt;
+ if (fwrite(p, pagesize, 1, fp) != 1) {
fprintf(stderr,
"%s: %s: %s\n", progname, file, strerror(errno));
- return (ERROR_RETURN);
+ return (1);
}
}
- (void)close(fd);
+ (void)fclose(fp);
free(p);
return (0);
}
@@ -186,14 +156,17 @@ init(file, pagesize, npages, progname)
int
run(hits, cachesize, pagesize, npages, progname)
int hits, cachesize, pagesize, npages;
- char *progname;
+ const char *progname;
{
DB_ENV *dbenv;
- DB_MPOOLFILE *dbmfp;
+ DB_MPOOLFILE *mfp;
db_pgno_t pageno;
int cnt, ret;
void *p;
+ dbenv = NULL;
+ mfp = NULL;
+
printf("%s: cachesize: %d; pagesize: %d; N pages: %d\n",
progname, cachesize, pagesize, npages);
@@ -204,77 +177,83 @@ run(hits, cachesize, pagesize, npages, progname)
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
#ifdef HAVE_VXWORKS
if ((ret = dbenv->set_shm_key(dbenv, VXSHM_KEY)) != 0) {
dbenv->err(dbenv, ret, "set_shm_key");
- return (ERROR_RETURN);
+ return (1);
}
#endif
/* Set the cachesize. */
if ((ret = dbenv->set_cachesize(dbenv, 0, cachesize, 0)) != 0) {
dbenv->err(dbenv, ret, "set_cachesize");
- goto err1;
+ goto err;
}
/* Open the environment. */
if ((ret = dbenv->open(
dbenv, NULL, DB_CREATE | DB_INIT_MPOOL, 0)) != 0) {
- dbenv->err(dbenv, ret, "open");
- goto err1;
+ dbenv->err(dbenv, ret, "DB_ENV->open");
+ goto err;
}
/* Open the file in the environment. */
- if ((ret =
- memp_fopen(dbenv, MPOOL, 0, 0, pagesize, NULL, &dbmfp)) != 0) {
- dbenv->err(dbenv, ret, "memp_fopen: %s", MPOOL);
- goto err1;
+ if ((ret = dbenv->memp_fcreate(dbenv, &mfp, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_ENV->memp_fcreate: %s", MPOOL);
+ goto err;
+ }
+ if ((ret = mfp->open(mfp, MPOOL, 0, 0, pagesize)) != 0) {
+ dbenv->err(dbenv, ret, "DB_MPOOLFILE->open: %s", MPOOL);
+ goto err;
}
printf("retrieve %d random pages... ", hits);
srand((u_int)time(NULL));
for (cnt = 0; cnt < hits; ++cnt) {
- pageno = (rand() % npages) + 1;
- if ((ret = memp_fget(dbmfp, &pageno, 0, &p)) != 0) {
+ pageno = rand() % npages;
+ if ((ret = mfp->get(mfp, &pageno, 0, &p)) != 0) {
dbenv->err(dbenv, ret,
"unable to retrieve page %lu", (u_long)pageno);
- goto err2;
+ goto err;
}
+ /* Verify the page's number that was written in init(). */
if (*(db_pgno_t *)p != pageno) {
dbenv->errx(dbenv,
"wrong page retrieved (%lu != %d)",
(u_long)pageno, *(int *)p);
- goto err2;
+ goto err;
}
- if ((ret = memp_fput(dbmfp, p, 0)) != 0) {
+ if ((ret = mfp->put(mfp, p, 0)) != 0) {
dbenv->err(dbenv, ret,
"unable to return page %lu", (u_long)pageno);
- goto err2;
+ goto err;
}
}
printf("successful.\n");
/* Close the file. */
- if ((ret = memp_fclose(dbmfp)) != 0) {
- dbenv->err(dbenv, ret, "memp_fclose");
- goto err1;
+ if ((ret = mfp->close(mfp, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB_MPOOLFILE->close");
+ goto err;
}
/* Close the pool. */
if ((ret = dbenv->close(dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
+ return (1);
}
return (0);
-err2: (void)memp_fclose(dbmfp);
-err1: (void)dbenv->close(dbenv, 0);
- return (ERROR_RETURN);
+err: if (mfp != NULL)
+ (void)mfp->close(mfp, 0);
+ if (dbenv != NULL)
+ (void)dbenv->close(dbenv, 0);
+ return (1);
}
diff --git a/db/examples_c/ex_repquote/ex_repquote.h b/db/examples_c/ex_repquote/ex_repquote.h
index 61457d049..1b87a481c 100644
--- a/db/examples_c/ex_repquote/ex_repquote.h
+++ b/db/examples_c/ex_repquote/ex_repquote.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_repquote.h,v 1.27 2002/04/23 04:27:50 krinsky Exp
+ * $Id: ex_repquote.h,v 1.34 2003/07/29 02:26:18 margo Exp $
*/
#ifndef _EX_REPQUOTE_H_
@@ -20,6 +20,7 @@ typedef struct {
/* Globals */
extern int master_eid;
extern char *myaddr;
+extern unsigned short myport;
struct __member; typedef struct __member member_t;
struct __machtab; typedef struct __machtab machtab_t;
@@ -45,25 +46,83 @@ typedef struct {
#define CACHESIZE (10 * 1024 * 1024)
#define DATABASE "quote.db"
+#define MAX_THREADS 25
#define SLEEPTIME 3
void *connect_all __P((void *args));
void *connect_thread __P((void *args));
-int doclient __P((DB_ENV *, const char *, machtab_t *));
-int domaster __P((DB_ENV *, const char *));
-int get_accepted_socket __P((const char *, int));
-int get_connected_socket __P((machtab_t *, const char *, const char *, int, int *, int *));
-int get_next_message __P((int, DBT *, DBT *));
-int listen_socket_init __P((const char *, int));
-int listen_socket_accept __P((machtab_t *, const char *, int, int *));
-int machtab_getinfo __P((machtab_t *, int, u_int32_t *, int *));
-int machtab_init __P((machtab_t **, int, int));
-void machtab_parm __P((machtab_t *, int *, int *, u_int32_t *));
-int machtab_rem __P((machtab_t *, int, int));
-int quote_send __P((DB_ENV *, const DBT *, const DBT *, int, u_int32_t));
+int doclient __P((DB_ENV *, const char *, machtab_t *));
+int domaster __P((DB_ENV *, const char *));
+int get_accepted_socket __P((const char *, int));
+int get_connected_socket
+ __P((machtab_t *, const char *, const char *, int, int *, int *));
+int get_next_message __P((int, DBT *, DBT *));
+int listen_socket_init __P((const char *, int));
+int listen_socket_accept __P((machtab_t *, const char *, int, int *));
+int machtab_getinfo __P((machtab_t *, int, u_int32_t *, int *));
+int machtab_init __P((machtab_t **, int, int));
+void machtab_parm __P((machtab_t *, int *, int *, u_int32_t *));
+int machtab_rem __P((machtab_t *, int, int));
+int quote_send __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t));
#ifndef COMPQUIET
#define COMPQUIET(x,y) x = (y)
#endif
+/* Portability macros for basic threading and networking */
+#ifdef _WIN32
+
+#include <windows.h>
+
+extern int getopt(int, char * const *, const char *);
+
+typedef HANDLE thread;
+#define thread_create(thrp, attr, func, arg) \
+ (((*(thrp) = CreateThread(NULL, 0, \
+ (LPTHREAD_START_ROUTINE)(func), (arg), 0, NULL)) == NULL) ? -1 : 0)
+#define thread_join(thr, statusp) \
+ ((WaitForSingleObject((thr), INFINITE) == WAIT_OBJECT_0) && \
+ GetExitCodeThread((thr), (LPDWORD)(statusp)) ? 0 : -1)
+
+typedef HANDLE mutex_t;
+#define mutex_init(m, attr) \
+ (((*(m) = CreateMutex(NULL, FALSE, NULL)) != NULL) ? 0 : -1)
+#define mutex_lock(m) \
+ ((WaitForSingleObject(*(m), INFINITE) == WAIT_OBJECT_0) ? 0 : -1)
+#define mutex_unlock(m) (ReleaseMutex(*(m)) ? 0 : -1)
+#define sleep(s) Sleep(1000 * (s))
+
+#define readsocket(s, buf, sz) recv((s), (buf), (sz), 0)
+#define writesocket(s, buf, sz) send((s), (buf), (sz), 0)
+#define net_errno WSAGetLastError()
+
+#else /* !_WIN32 */
+
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <netdb.h>
+#include <pthread.h>
+#include <signal.h>
+#include <unistd.h>
+
+typedef pthread_t thread;
+#define thread_create(thrp, attr, func, arg) \
+ pthread_create((thrp), (attr), (func), (arg))
+#define thread_join(thr, statusp) pthread_join((thr), (statusp))
+#define closesocket(fd) close(fd)
+
+typedef pthread_mutex_t mutex_t;
+#define mutex_init(m, attr) pthread_mutex_init((m), (attr))
+#define mutex_lock(m) pthread_mutex_lock(m)
+#define mutex_unlock(m) pthread_mutex_unlock(m)
+
+#define readsocket(s, buf, sz) read((s), (buf), (sz))
+#define writesocket(s, buf, sz) write((s), (buf), (sz))
+#define closesocket(fd) close(fd)
+#define net_errno errno
+
+#endif
+
#endif /* !_EX_REPQUOTE_H_ */
diff --git a/db/examples_c/ex_repquote/ex_rq_client.c b/db/examples_c/ex_repquote/ex_rq_client.c
index f8a291451..d14cd79a3 100644
--- a/db/examples_c/ex_repquote/ex_rq_client.c
+++ b/db/examples_c/ex_repquote/ex_rq_client.c
@@ -1,22 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_rq_client.c,v 1.29 2002/01/23 15:33:19 bostic Exp
+ * $Id: ex_rq_client.c,v 1.37 2003/09/05 00:05:34 bostic Exp $
*/
#include <sys/types.h>
-#include <sys/wait.h>
-
#include <errno.h>
-#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <db.h>
@@ -34,6 +30,7 @@ typedef struct {
typedef struct {
DB_ENV *dbenv;
machtab_t *machtab;
+ const char *progname;
} checkloop_args;
int
@@ -44,7 +41,7 @@ doclient(dbenv, progname, machtab)
{
checkloop_args cargs;
disploop_args dargs;
- pthread_t check_thr, disp_thr;
+ thread check_thr, disp_thr;
void *cstatus, *dstatus;
int rval, s;
@@ -52,23 +49,23 @@ doclient(dbenv, progname, machtab)
s = -1;
memset(&dargs, 0, sizeof(dargs));
- dstatus = (void *)EXIT_FAILURE;
dargs.progname = progname;
dargs.dbenv = dbenv;
- if (pthread_create(&disp_thr, NULL, display_loop, (void *)&dargs)) {
- dbenv->err(dbenv, errno, "display_loop pthread_create failed");
+ if (thread_create(&disp_thr, NULL, display_loop, (void *)&dargs)) {
+ dbenv->err(dbenv, errno, "display_loop thread creation failed");
goto err;
}
cargs.dbenv = dbenv;
cargs.machtab = machtab;
- if (pthread_create(&check_thr, NULL, check_loop, (void *)&cargs)) {
+ cargs.progname = progname;
+ if (thread_create(&check_thr, NULL, check_loop, (void *)&cargs)) {
dbenv->err(dbenv, errno, "check_thread pthread_create failed");
goto err;
}
- if (pthread_join(disp_thr, &dstatus) ||
- pthread_join(check_thr, &cstatus)) {
+ if (thread_join(disp_thr, &dstatus) ||
+ thread_join(check_thr, &cstatus)) {
dbenv->err(dbenv, errno, "pthread_join failed");
goto err;
}
@@ -92,6 +89,7 @@ check_loop(args)
{
DB_ENV *dbenv;
DBT dbt;
+ const char *progname;
checkloop_args *cargs;
int count, n, pri;
machtab_t *machtab;
@@ -100,6 +98,7 @@ check_loop(args)
cargs = (checkloop_args *)args;
dbenv = cargs->dbenv;
machtab = cargs->machtab;
+ progname = cargs->progname;
#define IDLE_INTERVAL 1
@@ -118,13 +117,19 @@ check_loop(args)
count = 1;
} else {
machtab_parm(machtab, &n, &pri, &timeout);
- (void)dbenv->rep_elect(dbenv,
- n, pri, timeout, &master_eid);
+ if (dbenv->rep_elect(dbenv,
+ n, pri, timeout, &master_eid) == 0)
+ break;
count = 0;
}
sleep(IDLE_INTERVAL);
}
+ /* Check if I won the election. */
+ if (master_eid == SELF_EID &&
+ dbenv->rep_start(dbenv, NULL, DB_REP_MASTER) == 0)
+ (void)domaster(dbenv, progname);
+
return ((void *)EXIT_SUCCESS);
}
@@ -137,7 +142,7 @@ display_loop(args)
DBC *dbc;
const char *progname;
disploop_args *dargs;
- int ret, rval;
+ int ret, rval, t_ret;
dargs = (disploop_args *)args;
progname = dargs->progname;
@@ -145,8 +150,9 @@ display_loop(args)
dbc = NULL;
dbp = NULL;
+ ret = 0;
- for (;;) {
+retry: for (;;) {
/* If we become master, shut this loop off. */
if (master_eid == SELF_EID)
break;
@@ -176,36 +182,54 @@ display_loop(args)
}
}
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0) {
+ if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
dbenv->err(dbenv, ret, "DB->cursor");
- goto err;
- }
+ else {
+ if ((ret = print_stocks(dbc)) != 0)
+ dbenv->err(dbenv, ret,
+ "database traversal failed");
- if ((ret = print_stocks(dbc)) != 0) {
- dbenv->err(dbenv, ret, "database traversal failed");
- goto err;
+ if ((t_ret = dbc->c_close(dbc)) != 0) {
+ dbenv->err(dbenv, ret, "DBC->c_close");
+
+ if (ret == 0)
+ ret = t_ret;
+ }
}
- if ((ret = dbc->c_close(dbc)) != 0) {
- dbenv->err(dbenv, ret, "DB->close");
+ if (ret == DB_REP_HANDLE_DEAD) {
+ dbp = NULL;
+ continue;
+ } else if (ret != 0)
goto err;
- }
dbc = NULL;
sleep(SLEEPTIME);
}
- rval = EXIT_SUCCESS;
-
- if (0) {
-err: rval = EXIT_FAILURE;
+err: rval = EXIT_SUCCESS;
+ switch (ret) {
+ case DB_LOCK_DEADLOCK:
+ if (dbc != NULL) {
+ (void)dbc->c_close(dbc);
+ dbc = NULL;
+ }
+ ret = 0;
+ goto retry;
+ case DB_REP_HANDLE_DEAD:
+ if (dbp != NULL) {
+ (void)dbp->close(dbp, DB_NOSYNC);
+ dbp = NULL;
+ }
+ ret = 0;
+ goto retry;
+ default:
+ break;
}
- if (dbc != NULL && (ret = dbc->c_close(dbc)) != 0) {
- dbenv->err(dbenv, ret, "DB->close");
+ if (ret != 0)
rval = EXIT_FAILURE;
- }
if (dbp != NULL && (ret = dbp->close(dbp, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->close");
diff --git a/db/examples_c/ex_repquote/ex_rq_main.c b/db/examples_c/ex_repquote/ex_rq_main.c
index 318da6cad..954d6d12f 100644
--- a/db/examples_c/ex_repquote/ex_rq_main.c
+++ b/db/examples_c/ex_repquote/ex_rq_main.c
@@ -1,30 +1,28 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_rq_main.c,v 1.23 2002/08/06 05:39:03 bostic Exp
+ * $Id: ex_rq_main.c,v 1.32 2003/07/29 02:26:18 margo Exp $
*/
#include <sys/types.h>
-#include <pthread.h>
-
#include <errno.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <db.h>
#include "ex_repquote.h"
/*
- * Process globals (we could put these in the machtab I suppose.
+ * Process globals (we could put these in the machtab I suppose).
*/
int master_eid;
char *myaddr;
+unsigned short myport;
static int env_init __P((const char *, const char *, DB_ENV **, machtab_t *,
u_int32_t));
@@ -36,20 +34,23 @@ main(argc, argv)
char *argv[];
{
extern char *optarg;
- extern int optind;
DB_ENV *dbenv;
DBT local;
enum { MASTER, CLIENT, UNKNOWN } whoami;
all_args aa;
connect_args ca;
machtab_t *machtab;
- pthread_t all_thr, conn_thr;
- repsite_t site, *sitep, self, *selfp;
+ thread all_thr, conn_thr;
+ void *astatus, *cstatus;
+#ifdef _WIN32
+ WSADATA wsaData;
+#else
struct sigaction sigact;
- int maxsites, nsites, ret, priority, totalsites;
+#endif
+ repsite_t site, *sitep, self, *selfp;
+ int maxsites, nsites, ret, priority, totalsites, verbose;
char *c, ch;
const char *home, *progname;
- void *astatus, *cstatus;
master_eid = DB_EID_INVALID;
@@ -57,12 +58,12 @@ main(argc, argv)
whoami = UNKNOWN;
machtab = NULL;
selfp = sitep = NULL;
- maxsites = nsites = ret = totalsites = 0;
+ maxsites = nsites = ret = totalsites = verbose = 0;
priority = 100;
home = "TESTDIR";
progname = "ex_repquote";
- while ((ch = getopt(argc, argv, "Ch:Mm:n:o:p:")) != EOF)
+ while ((ch = getopt(argc, argv, "Ch:Mm:n:o:p:v")) != EOF)
switch (ch) {
case 'M':
whoami = MASTER;
@@ -86,7 +87,7 @@ main(argc, argv)
fprintf(stderr, "Bad host specification.\n");
goto err;
}
- self.port = atoi(c);
+ myport = self.port = (unsigned short)atoi(c);
selfp = &self;
break;
case 'n':
@@ -114,6 +115,9 @@ main(argc, argv)
case 'p':
priority = atoi(optarg);
break;
+ case 'v':
+ verbose = 1;
+ break;
case '?':
default:
usage(progname);
@@ -131,6 +135,14 @@ main(argc, argv)
if (home == NULL)
usage(progname);
+#ifdef _WIN32
+ /* Initialize the Windows sockets DLL. */
+ if ((ret = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {
+ fprintf(stderr,
+ "Unable to initialize Windows sockets: %d\n", ret);
+ goto err;
+ }
+#else
/*
* Turn off SIGPIPE so that we don't kill processes when they
* happen to lose a connection at the wrong time.
@@ -142,6 +154,7 @@ main(argc, argv)
"Unable to turn off SIGPIPE: %s\n", strerror(ret));
goto err;
}
+#endif
/*
* We are hardcoding priorities here that all clients have the
@@ -153,12 +166,15 @@ main(argc, argv)
goto err;
/*
- * We can know open our environment, although we're not ready to
+ * We can now open our environment, although we're not ready to
* begin replicating. However, we want to have a dbenv around
* so that we can send it into any of our message handlers.
*/
if ((ret = env_init(progname, home, &dbenv, machtab, DB_RECOVER)) != 0)
goto err;
+ if (verbose &&
+ (ret = dbenv->set_verbose(dbenv, DB_VERB_REPLICATION, 1)) != 0)
+ goto err;
/*
* Now sets up comm infrastructure. There are two phases. First,
@@ -171,7 +187,7 @@ main(argc, argv)
ca.progname = progname;
ca.machtab = machtab;
ca.port = selfp->port;
- if ((ret = pthread_create(&conn_thr, NULL, connect_thread, &ca)) != 0)
+ if ((ret = thread_create(&conn_thr, NULL, connect_thread, &ca)) != 0)
goto err;
aa.dbenv = dbenv;
@@ -180,7 +196,7 @@ main(argc, argv)
aa.machtab = machtab;
aa.sites = sitep;
aa.nsites = nsites;
- if ((ret = pthread_create(&all_thr, NULL, connect_all, &aa)) != 0)
+ if ((ret = thread_create(&all_thr, NULL, connect_all, &aa)) != 0)
goto err;
/*
@@ -205,7 +221,7 @@ main(argc, argv)
dbenv->err(dbenv, ret, "dbenv->rep_start failed");
goto err;
}
- /* Sleep to give ourselves a minute to find a master. */
+ /* Sleep to give ourselves time to find a master. */
sleep(5);
if ((ret = doclient(dbenv, progname, machtab)) != 0) {
dbenv->err(dbenv, ret, "Client failed");
@@ -215,8 +231,8 @@ main(argc, argv)
}
/* Wait on the connection threads. */
- if (pthread_join(all_thr, &astatus) || pthread_join(conn_thr, &cstatus))
- ret = errno;
+ if (thread_join(all_thr, &astatus) || thread_join(conn_thr, &cstatus))
+ ret = -1;
if (ret == 0 &&
((int)astatus != EXIT_SUCCESS || (int)cstatus != EXIT_SUCCESS))
ret = -1;
@@ -225,6 +241,10 @@ err: if (machtab != NULL)
free(machtab);
if (dbenv != NULL)
(void)dbenv->close(dbenv, 0);
+#ifdef _WIN32
+ /* Shut down the Windows sockets DLL. */
+ (void)WSACleanup();
+#endif
return (ret);
}
@@ -286,14 +306,13 @@ env_init(progname, home, dbenvp, machtab, flags)
}
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, prefix);
- /* (void)dbenv->set_verbose(dbenv, DB_VERB_REPLICATION, 1); */
(void)dbenv->set_cachesize(dbenv, 0, CACHESIZE, 0);
/* (void)dbenv->set_flags(dbenv, DB_TXN_NOSYNC, 1); */
dbenv->app_private = machtab;
(void)dbenv->set_rep_transport(dbenv, SELF_EID, quote_send);
- flags |= DB_CREATE | DB_THREAD |
+ flags |= DB_CREATE | DB_THREAD | DB_INIT_REP |
DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN;
ret = dbenv->open(dbenv, home, flags, 0);
diff --git a/db/examples_c/ex_repquote/ex_rq_master.c b/db/examples_c/ex_repquote/ex_rq_master.c
index de7e81220..27557f872 100644
--- a/db/examples_c/ex_repquote/ex_rq_master.c
+++ b/db/examples_c/ex_repquote/ex_rq_master.c
@@ -1,21 +1,17 @@
/*-
- * #include <pthread.h>
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_rq_master.c,v 1.22 2002/08/06 05:39:03 bostic Exp
+ * $Id: ex_rq_master.c,v 1.26 2003/07/04 17:45:06 margo Exp $
*/
#include <sys/types.h>
-
#include <errno.h>
-#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <db.h>
@@ -30,24 +26,29 @@ domaster(dbenv, progname)
DB_ENV *dbenv;
const char *progname;
{
- int ret, t_ret;
- pthread_t interface_thr;
+ int ret;
+ thread interface_thr;
+#ifndef _WIN32
+ int t_ret;
pthread_attr_t attr;
- COMPQUIET(progname, NULL);
-
/* Spawn off a thread to handle the basic master interface. */
if ((ret = pthread_attr_init(&attr)) != 0 &&
(ret = pthread_attr_setdetachstate(&attr,
PTHREAD_CREATE_DETACHED)) != 0)
goto err;
+#endif
- if ((ret = pthread_create(&interface_thr,
+ if ((ret = thread_create(&interface_thr,
&attr, master_loop, (void *)dbenv)) != 0)
goto err;
-err: if ((t_ret = pthread_attr_destroy(&attr)) != 0 && ret == 0)
+err:
+#ifndef _WIN32
+ if ((t_ret = pthread_attr_destroy(&attr)) != 0 && ret == 0)
ret = t_ret;
+#endif
+ COMPQUIET(progname, NULL);
return (ret);
}
@@ -82,6 +83,9 @@ master_loop(dbenvv)
#endif
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
return ((void *)ret);
+ /* Set page size small so we can easily do page allocation. */
+ if ((ret = dbp->set_pagesize(dbp, 512)) != 0)
+ goto err;
if ((ret = dbenv->txn_begin(dbenv, NULL, &txn, 0)) != 0)
goto err;
diff --git a/db/examples_c/ex_repquote/ex_rq_net.c b/db/examples_c/ex_repquote/ex_rq_net.c
index 1816157af..02a1f164a 100644
--- a/db/examples_c/ex_repquote/ex_rq_net.c
+++ b/db/examples_c/ex_repquote/ex_rq_net.c
@@ -1,34 +1,35 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_rq_net.c,v 1.37 2002/08/06 05:39:04 bostic Exp
+ * $Id: ex_rq_net.c,v 1.46 2003/09/05 00:05:34 bostic Exp $
*/
#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <sys/wait.h>
-
#include <assert.h>
#include <errno.h>
-#include <netdb.h>
-#include <pthread.h>
-#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <db.h>
+#include "ex_repquote.h"
+#ifndef _SYS_QUEUE_H
+/*
+ * Some *BSD Unix variants include the Queue macros in their libraries and
+ * these might already have been included. In that case, it would be bad
+ * to include them again.
+ */
#include <dbinc/queue.h> /* !!!: for the LIST_XXX macros. */
+#endif
-#include "ex_repquote.h"
int machtab_add __P((machtab_t *, int, u_int32_t, int, int *));
+#ifdef DIAGNOSTIC
+void machtab_print __P((machtab_t *));
+#endif
ssize_t readn __P((int, void *, size_t));
/*
@@ -67,7 +68,7 @@ ssize_t readn __P((int, void *, size_t));
struct __machtab {
LIST_HEAD(__machlist, __member) machlist;
int nextid;
- pthread_mutex_t mtmutex;
+ mutex_t mtmutex;
u_int32_t timeout_time;
int current;
int max;
@@ -116,8 +117,7 @@ machtab_init(machtabp, pri, nsites)
machtab->priority = pri;
machtab->nsites = nsites;
- ret = pthread_mutex_init(&machtab->mtmutex, NULL);
-
+ ret = mutex_init(&machtab->mtmutex, NULL);
*machtabp = machtab;
return (ret);
@@ -138,6 +138,7 @@ machtab_add(machtab, fd, hostaddr, port, idp)
int ret;
member_t *m, *member;
+ ret = 0;
if ((member = malloc(sizeof(member_t))) == NULL)
return (ENOMEM);
@@ -145,7 +146,7 @@ machtab_add(machtab, fd, hostaddr, port, idp)
member->hostaddr = hostaddr;
member->port = port;
- if ((ret = pthread_mutex_lock(&machtab->mtmutex)) != 0)
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0)
return (ret);
for (m = LIST_FIRST(&machtab->machlist);
@@ -159,7 +160,7 @@ machtab_add(machtab, fd, hostaddr, port, idp)
} else
member->eid = m->eid;
- ret = pthread_mutex_unlock(&machtab->mtmutex);
+ ret = mutex_unlock(&machtab->mtmutex);
if (idp != NULL)
*idp = member->eid;
@@ -171,6 +172,10 @@ machtab_add(machtab, fd, hostaddr, port, idp)
free(member);
ret = EEXIST;
}
+#ifdef DIAGNOSTIC
+ printf("Exiting machtab_add\n");
+ machtab_print(machtab);
+#endif
return (ret);
}
@@ -188,7 +193,7 @@ machtab_getinfo(machtab, eid, hostp, portp)
int ret;
member_t *member;
- if ((ret = pthread_mutex_lock(&machtab->mtmutex)) != 0)
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0)
return (ret);
for (member = LIST_FIRST(&machtab->machlist);
@@ -200,7 +205,7 @@ machtab_getinfo(machtab, eid, hostp, portp)
break;
}
- if ((ret = pthread_mutex_unlock(&machtab->mtmutex)) != 0)
+ if ((ret = mutex_unlock(&machtab->mtmutex)) != 0)
return (ret);
return (member != NULL ? 0 : EINVAL);
@@ -222,7 +227,7 @@ machtab_rem(machtab, eid, lock)
member_t *member;
ret = 0;
- if (lock && (ret = pthread_mutex_lock(&machtab->mtmutex)) != 0)
+ if (lock && (ret = mutex_lock(&machtab->mtmutex)) != 0)
return (ret);
for (found = 0, member = LIST_FIRST(&machtab->machlist);
@@ -231,7 +236,7 @@ machtab_rem(machtab, eid, lock)
if (member->eid == eid) {
found = 1;
LIST_REMOVE(member, links);
- (void)close(member->fd);
+ (void)closesocket(member->fd);
free(member);
machtab->current--;
break;
@@ -241,8 +246,12 @@ machtab_rem(machtab, eid, lock)
machtab->nextid = 2;
if (lock)
- ret = pthread_mutex_unlock(&machtab->mtmutex);
+ ret = mutex_unlock(&machtab->mtmutex);
+#ifdef DIAGNOSTIC
+ printf("Exiting machtab_rem\n");
+ machtab_print(machtab);
+#endif
return (ret);
}
@@ -260,6 +269,26 @@ machtab_parm(machtab, nump, prip, timeoutp)
*timeoutp = machtab->timeout_time;
}
+#ifdef DIAGNOSTIC
+void
+machtab_print(machtab)
+ machtab_t *machtab;
+{
+ member_t *m;
+
+ (void)mutex_lock(&machtab->mtmutex);
+
+ for (m = LIST_FIRST(&machtab->machlist);
+ m != NULL; m = LIST_NEXT(m, links)) {
+
+ printf("IP: %lx Port: %6d EID: %2d FD: %3d\n",
+ (long)m->hostaddr, m->port, m->eid, m->fd);
+ }
+
+ (void)mutex_unlock(&machtab->mtmutex);
+
+}
+#endif
/*
* listen_socket_init --
* Initialize a socket for listening on the specified port. Returns
@@ -271,7 +300,7 @@ listen_socket_init(progname, port)
const char *progname;
int port;
{
- int s;
+ int s, sockopt;
struct protoent *proto;
struct sockaddr_in si;
@@ -284,7 +313,15 @@ listen_socket_init(progname, port)
memset(&si, 0, sizeof(si));
si.sin_family = AF_INET;
si.sin_addr.s_addr = htonl(INADDR_ANY);
- si.sin_port = htons(port);
+ si.sin_port = htons((unsigned short)port);
+
+ /*
+ * When using this example for testing, it's common to kill and restart
+ * regularly. On some systems, this causes bind to fail with "address
+ * in use" errors unless this option is set.
+ */
+ sockopt = 1;
+ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof (sockopt));
if (bind(s, (struct sockaddr *)&si, sizeof(si)) != 0)
goto err;
@@ -294,8 +331,8 @@ listen_socket_init(progname, port)
return (s);
-err: fprintf(stderr, "%s: %s", progname, strerror(errno));
- close (s);
+err: fprintf(stderr, "%s: %s", progname, strerror(net_errno));
+ closesocket(s);
return (-1);
}
@@ -312,7 +349,8 @@ listen_socket_accept(machtab, progname, s, eidp)
{
struct sockaddr_in si;
int si_len;
- int host, ns, port, ret;
+ int host, ns, ret;
+ u_int16_t port;
COMPQUIET(progname, NULL);
@@ -320,17 +358,26 @@ wait: memset(&si, 0, sizeof(si));
si_len = sizeof(si);
ns = accept(s, (struct sockaddr *)&si, &si_len);
host = ntohl(si.sin_addr.s_addr);
- port = ntohs(si.sin_port);
+
+ /*
+ * Sites send their listening port when connections are first
+ * established, as it will be different from the outgoing port
+ * for this connection.
+ */
+ if (readn(ns, &port, 2) != 2)
+ goto err;
+ port = ntohs(port);
+
ret = machtab_add(machtab, ns, host, port, eidp);
if (ret == EEXIST) {
- close(ns);
+ closesocket(ns);
goto wait;
} else if (ret != 0)
goto err;
-
+printf("Connected to host %x port %d, eid = %d\n", host, port, *eidp);
return (ns);
-err: close(ns);
+err: closesocket(ns);
return (-1);
}
@@ -358,7 +405,7 @@ get_accepted_socket(progname, port)
memset(&si, 0, sizeof(si));
si.sin_family = AF_INET;
si.sin_addr.s_addr = htonl(INADDR_ANY);
- si.sin_port = htons(port);
+ si.sin_port = htons((unsigned short)port);
if (bind(s, (struct sockaddr *)&si, sizeof(si)) != 0)
goto err;
@@ -372,8 +419,8 @@ get_accepted_socket(progname, port)
return (ns);
-err: fprintf(stderr, "%s: %s", progname, strerror(errno));
- close (s);
+err: fprintf(stderr, "%s: %s", progname, strerror(net_errno));
+ closesocket(s);
return (-1);
}
@@ -396,6 +443,7 @@ get_connected_socket(machtab, progname, remotehost, port, is_open, eidp)
struct protoent *proto;
struct sockaddr_in si;
u_int32_t addr;
+ u_int16_t nport;
*is_open = 0;
@@ -404,7 +452,7 @@ get_connected_socket(machtab, progname, remotehost, port, is_open, eidp)
if ((hp = gethostbyname(remotehost)) == NULL) {
fprintf(stderr, "%s: host not found: %s\n", progname,
- strerror(errno));
+ strerror(net_errno));
return (-1);
}
@@ -416,22 +464,30 @@ get_connected_socket(machtab, progname, remotehost, port, is_open, eidp)
ret = machtab_add(machtab, s, addr, port, eidp);
if (ret == EEXIST) {
*is_open = 1;
- close(s);
+ closesocket(s);
return (0);
} else if (ret != 0) {
- close (s);
+ closesocket(s);
return (-1);
}
si.sin_family = AF_INET;
- si.sin_port = htons(port);
+ si.sin_port = htons((unsigned short)port);
if (connect(s, (struct sockaddr *)&si, sizeof(si)) < 0) {
fprintf(stderr, "%s: connection failed: %s",
- progname, strerror(errno));
+ progname, strerror(net_errno));
(void)machtab_rem(machtab, *eidp, 1);
return (-1);
}
+ /*
+ * The first thing we send on the socket is our (listening) port
+ * so the site we are connecting to can register us correctly in
+ * its machtab.
+ */
+ nport = htons(myport);
+ writesocket(s, &nport, 2);
+
return (s);
}
@@ -521,12 +577,12 @@ readn(fd, vptr, n)
ptr = vptr;
nleft = n;
while (nleft > 0) {
- if ( (nread = read(fd, ptr, nleft)) < 0) {
+ if ((nread = readsocket(fd, ptr, nleft)) < 0) {
/*
* Call read() again on interrupted system call;
* on other errors, bail.
*/
- if (errno == EINTR)
+ if (net_errno == EINTR)
nread = 0;
else
return (-1);
@@ -545,9 +601,10 @@ readn(fd, vptr, n)
* The f_send function for DB_ENV->set_rep_transport.
*/
int
-quote_send(dbenv, control, rec, eid, flags)
+quote_send(dbenv, control, rec, lsnp, eid, flags)
DB_ENV *dbenv;
const DBT *control, *rec;
+ const DB_LSN *lsnp;
int eid;
u_int32_t flags;
{
@@ -555,6 +612,7 @@ quote_send(dbenv, control, rec, eid, flags)
machtab_t *machtab;
member_t *m;
+ COMPQUIET(lsnp, NULL);
machtab = (machtab_t *)dbenv->app_private;
if (eid == DB_EID_BROADCAST) {
@@ -569,7 +627,7 @@ quote_send(dbenv, control, rec, eid, flags)
return (0);
}
- if ((ret = pthread_mutex_lock(&machtab->mtmutex)) != 0)
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0)
return (ret);
fd = 0;
@@ -589,8 +647,7 @@ quote_send(dbenv, control, rec, eid, flags)
ret = quote_send_one(rec, control, fd, flags);
- if ((t_ret = (pthread_mutex_unlock(&machtab->mtmutex))) != 0 &&
- ret == 0)
+ if ((t_ret = mutex_unlock(&machtab->mtmutex)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -611,7 +668,7 @@ quote_send_broadcast(machtab, rec, control, flags)
int ret, sent;
member_t *m, *next;
- if ((ret = pthread_mutex_lock(&machtab->mtmutex)) != 0)
+ if ((ret = mutex_lock(&machtab->mtmutex)) != 0)
return (0);
sent = 0;
@@ -623,7 +680,7 @@ quote_send_broadcast(machtab, rec, control, flags)
sent++;
}
- if (pthread_mutex_unlock(&machtab->mtmutex) != 0)
+ if (mutex_unlock(&machtab->mtmutex) != 0)
return (-1);
return (sent);
@@ -656,12 +713,12 @@ quote_send_one(rec, control, fd, flags)
* The protocol is simply: write rec->size, write rec->data,
* write control->size, write control->data.
*/
- nw = write(fd, &rec->size, 4);
+ nw = writesocket(fd, (const char *)&rec->size, 4);
if (nw != 4)
return (DB_REP_UNAVAIL);
if (rec->size > 0) {
- nw = write(fd, rec->data, rec->size);
+ nw = writesocket(fd, rec->data, rec->size);
if (nw < 0)
return (DB_REP_UNAVAIL);
if (nw != (ssize_t)rec->size) {
@@ -669,7 +726,7 @@ quote_send_one(rec, control, fd, flags)
wp = (u_int8_t *)rec->data + nw;
bytes_left = rec->size - nw;
for (retry = 0; bytes_left > 0 && retry < 3; retry++) {
- nw = write(fd, wp, bytes_left);
+ nw = writesocket(fd, wp, bytes_left);
if (nw < 0)
return (DB_REP_UNAVAIL);
bytes_left -= nw;
@@ -680,11 +737,11 @@ quote_send_one(rec, control, fd, flags)
}
}
- nw = write(fd, &control->size, 4);
+ nw = writesocket(fd, (const char *)&control->size, 4);
if (nw != 4)
return (DB_REP_UNAVAIL);
if (control->size > 0) {
- nw = write(fd, control->data, control->size);
+ nw = writesocket(fd, control->data, control->size);
if (nw != (ssize_t)control->size)
return (DB_REP_UNAVAIL);
}
diff --git a/db/examples_c/ex_repquote/ex_rq_util.c b/db/examples_c/ex_repquote/ex_rq_util.c
index d2e16f460..3d492fda0 100644
--- a/db/examples_c/ex_repquote/ex_rq_util.c
+++ b/db/examples_c/ex_repquote/ex_rq_util.c
@@ -1,28 +1,27 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: ex_rq_util.c,v 1.20 2002/08/06 05:39:04 bostic Exp
+ * $Id: ex_rq_util.c,v 1.34 2003/07/14 21:30:24 mjc Exp $
*/
#include <sys/types.h>
-
#include <errno.h>
-#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <db.h>
#include "ex_repquote.h"
-static int connect_site __P((DB_ENV *, machtab_t *, const char *,
- repsite_t *, int *, int *));
-void * elect_thread __P((void *));
+static int connect_site __P((DB_ENV *,
+ machtab_t *, const char *, repsite_t *, int *, int *,
+ thread *));
+static void *elect_thread __P((void *));
+static void *hm_loop __P((void *));
typedef struct {
DB_ENV *dbenv;
@@ -43,24 +42,28 @@ typedef struct {
* master to accept messages from a client as well as by clients
* to communicate with other clients.
*/
-void *
+static void *
hm_loop(args)
void *args;
{
DB_ENV *dbenv;
+ DB_LSN permlsn;
DBT rec, control;
const char *c, *home, *progname;
- int fd, eid, n, newm;
+ int fd, eid, n, nsites, newm, nsites_allocd;
int open, pri, r, ret, t_ret, tmpid;
elect_args *ea;
hm_loop_args *ha;
machtab_t *tab;
- pthread_t elect_thr;
+ thread elect_thr, *site_thrs, *tmp;
repsite_t self;
u_int32_t timeout;
void *status;
ea = NULL;
+ site_thrs = NULL;
+ nsites_allocd = 0;
+ nsites = 0;
ha = (hm_loop_args *)args;
dbenv = ha->dbenv;
@@ -80,7 +83,7 @@ hm_loop(args)
* Close this connection; if it's the master call
* for an election.
*/
- close(fd);
+ closesocket(fd);
if ((ret = machtab_rem(tab, eid, 1)) != 0)
break;
@@ -116,8 +119,8 @@ hm_loop(args)
}
tmpid = eid;
- switch(r = dbenv->rep_process_message(dbenv,
- &control, &rec, &tmpid)) {
+ switch (r = dbenv->rep_process_message(dbenv,
+ &control, &rec, &tmpid, &permlsn)) {
case DB_REP_NEWSITE:
/*
* Check if we got sent connect information and if we
@@ -148,8 +151,18 @@ hm_loop(args)
* should be up if we got a message from it (even
* indirectly).
*/
- if ((ret = connect_site(dbenv,
- tab, progname, &self, &open, &eid)) != 0)
+ if (nsites == nsites_allocd) {
+ /* Need to allocate more space. */
+ if ((tmp = realloc(site_thrs,
+ (10 + nsites) * sizeof(thread))) == NULL) {
+ ret = errno;
+ goto out;
+ }
+ site_thrs = tmp;
+ nsites_allocd += 10;
+ }
+ if ((ret = connect_site(dbenv, tab, progname,
+ &self, &open, &tmpid, &site_thrs[nsites++])) != 0)
goto out;
break;
case DB_REP_HOLDELECTION:
@@ -157,7 +170,7 @@ hm_loop(args)
break;
/* Make sure that previous election has finished. */
if (ea != NULL) {
- (void)pthread_join(elect_thr, &status);
+ (void)thread_join(elect_thr, &status);
ea = NULL;
}
if ((ea = calloc(sizeof(elect_args), 1)) == NULL) {
@@ -166,7 +179,7 @@ hm_loop(args)
}
ea->dbenv = dbenv;
ea->machtab = tab;
- ret = pthread_create(&elect_thr,
+ ret = thread_create(&elect_thr,
NULL, elect_thread, (void *)ea);
break;
case DB_REP_NEWMASTER:
@@ -179,6 +192,8 @@ hm_loop(args)
ret = domaster(dbenv, progname);
}
break;
+ case DB_REP_ISPERM:
+ /* FALLTHROUGH */
case 0:
break;
default:
@@ -192,7 +207,11 @@ out: if ((t_ret = machtab_rem(tab, eid, 1)) != 0 && ret == 0)
/* Don't close the environment before any children exit. */
if (ea != NULL)
- (void)pthread_join(elect_thr, &status);
+ (void)thread_join(elect_thr, &status);
+
+ if (site_thrs != NULL)
+ while (--nsites >= 0)
+ (void)thread_join(site_thrs[nsites], &status);
return ((void *)ret);
}
@@ -208,13 +227,12 @@ connect_thread(args)
{
DB_ENV *dbenv;
const char *home, *progname;
- int fd, i, eid, ns, port, ret;
hm_loop_args *ha;
connect_args *cargs;
machtab_t *machtab;
-#define MAX_THREADS 25
- pthread_t hm_thrs[MAX_THREADS];
- pthread_attr_t attr;
+ thread hm_thrs[MAX_THREADS];
+ void *status;
+ int fd, i, eid, ns, port, ret;
ha = NULL;
cargs = (connect_args *)args;
@@ -224,13 +242,6 @@ connect_thread(args)
machtab = cargs->machtab;
port = cargs->port;
- if ((ret = pthread_attr_init(&attr)) != 0)
- return ((void *)EXIT_FAILURE);
-
- if ((ret =
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)) != 0)
- goto err;
-
/*
* Loop forever, accepting connections from new machines,
* and forking off a thread to handle each.
@@ -246,15 +257,17 @@ connect_thread(args)
ret = errno;
goto err;
}
- if ((ha = calloc(sizeof(hm_loop_args), 1)) == NULL)
+ if ((ha = calloc(sizeof(hm_loop_args), 1)) == NULL) {
+ ret = errno;
goto err;
+ }
ha->progname = progname;
ha->home = home;
ha->fd = ns;
ha->eid = eid;
ha->tab = machtab;
ha->dbenv = dbenv;
- if ((ret = pthread_create(&hm_thrs[i++], &attr,
+ if ((ret = thread_create(&hm_thrs[i++], NULL,
hm_loop, (void *)ha)) != 0)
goto err;
ha = NULL;
@@ -264,8 +277,11 @@ connect_thread(args)
dbenv->errx(dbenv, "Too many threads");
ret = ENOMEM;
-err: pthread_attr_destroy(&attr);
- return (ret == 0 ? (void *)EXIT_SUCCESS : (void *)EXIT_FAILURE);
+ /* Do not return until all threads have exited. */
+ while (--i >= 0)
+ (void)thread_join(hm_thrs[i], &status);
+
+err: return (ret == 0 ? (void *)EXIT_SUCCESS : (void *)EXIT_FAILURE);
}
/*
@@ -282,6 +298,7 @@ connect_all(args)
hm_loop_args *ha;
int failed, i, eid, nsites, open, ret, *success;
machtab_t *machtab;
+ thread *hm_thr;
repsite_t *sites;
ha = NULL;
@@ -294,6 +311,8 @@ connect_all(args)
sites = aa->sites;
ret = 0;
+ hm_thr = NULL;
+ success = NULL;
/* Some implementations of calloc are sad about alloc'ing 0 things. */
if ((success = calloc(nsites > 0 ? nsites : 1, sizeof(int))) == NULL) {
@@ -302,13 +321,19 @@ connect_all(args)
goto err;
}
+ if (nsites > 0 && (hm_thr = calloc(nsites, sizeof(int))) == NULL) {
+ dbenv->err(dbenv, errno, "connect_all");
+ ret = 1;
+ goto err;
+ }
+
for (failed = nsites; failed > 0;) {
for (i = 0; i < nsites; i++) {
if (success[i])
continue;
ret = connect_site(dbenv, machtab,
- progname, &sites[i], &open, &eid);
+ progname, &sites[i], &open, &eid, &hm_thr[i]);
/*
* If we couldn't make the connection, this isn't
@@ -332,22 +357,24 @@ connect_all(args)
sleep(1);
}
-err: free(success);
+err: if (success != NULL)
+ free(success);
+ if (hm_thr != NULL)
+ free(hm_thr);
return (ret ? (void *)EXIT_FAILURE : (void *)EXIT_SUCCESS);
}
int
-connect_site(dbenv, machtab, progname, site, is_open, eidp)
+connect_site(dbenv, machtab, progname, site, is_open, eidp, hm_thrp)
DB_ENV *dbenv;
machtab_t *machtab;
const char *progname;
repsite_t *site;
- int *is_open;
- int *eidp;
+ int *is_open, *eidp;
+ thread *hm_thrp;
{
int ret, s;
hm_loop_args *ha;
- pthread_t hm_thr;
if ((s = get_connected_socket(machtab, progname,
site->host, site->port, is_open, eidp)) < 0)
@@ -367,7 +394,7 @@ connect_site(dbenv, machtab, progname, site, is_open, eidp)
ha->tab = machtab;
ha->dbenv = dbenv;
- if ((ret = pthread_create(&hm_thr, NULL,
+ if ((ret = thread_create(hm_thrp, NULL,
hm_loop, (void *)ha)) != 0) {
dbenv->err(dbenv, ret, "connect site");
goto err1;
diff --git a/db/examples_c/ex_thread.c b/db/examples_c/ex_thread.c
index 93812ade7..db9d301f1 100644
--- a/db/examples_c/ex_thread.c
+++ b/db/examples_c/ex_thread.c
@@ -1,33 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_thread.c,v 11.9 2000/05/31 15:10:04 bostic Exp $
+ * $Id: ex_thread.c,v 11.35 2003/01/08 04:44:00 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-
-#if TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#if HAVE_SYS_TIME_H
#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
#include <errno.h>
#include <pthread.h>
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
+
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
#include <unistd.h>
#endif
@@ -39,18 +32,21 @@
*/
extern int sched_yield __P((void)); /* Pthread yield function. */
-DB_ENV *db_init __P((char *));
+int db_init __P((const char *));
void *deadlock __P((void *));
-void fatal __P((char *, int, int));
+void fatal __P((const char *, int, int));
+void onint __P((int));
int main __P((int, char *[]));
int reader __P((int));
void stats __P((void));
void *trickle __P((void *));
void *tstart __P((void *));
-void usage __P((void));
+int usage __P((void));
void word __P((void));
int writer __P((int));
+int quit; /* Interrupt handling flag. */
+
struct _statistics {
int aborted; /* Write. */
int aborts; /* Read/write. */
@@ -100,11 +96,13 @@ main(argc, argv)
{
extern char *optarg;
extern int errno, optind;
+ DB_TXN *txnp;
pthread_t *tids;
int ch, i, ret;
- char *home;
+ const char *home;
void *retp;
+ txnp = NULL;
nlist = 1000;
nreaders = nwriters = 4;
home = "TESTDIR";
@@ -130,7 +128,7 @@ main(argc, argv)
break;
case '?':
default:
- usage();
+ return (usage());
}
argc -= optind;
argv += optind;
@@ -138,29 +136,41 @@ main(argc, argv)
/* Initialize the random number generator. */
srand(getpid() | time(NULL));
+ /* Register the signal handler. */
+ (void)signal(SIGINT, onint);
+
/* Build the key list. */
word();
/* Remove the previous database. */
- (void)unlink(DATABASE);
+ (void)remove(DATABASE);
/* Initialize the database environment. */
- dbenv = db_init(home);
+ if ((ret = db_init(home)) != 0)
+ return (ret);
/* Initialize the database. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
(void)dbenv->close(dbenv, 0);
- return (1);
+ return (EXIT_FAILURE);
}
if ((ret = dbp->set_pagesize(dbp, 1024)) != 0) {
dbp->err(dbp, ret, "set_pagesize");
goto err;
}
- if ((ret = dbp->open(dbp,
+
+ if ((ret = dbenv->txn_begin(dbenv, NULL, &txnp, 0)) != 0)
+ fatal("txn_begin", ret, 1);
+ if ((ret = dbp->open(dbp, txnp,
DATABASE, NULL, DB_BTREE, DB_CREATE | DB_THREAD, 0664)) != 0) {
dbp->err(dbp, ret, "%s: open", DATABASE);
goto err;
+ } else {
+ ret = txnp->commit(txnp, 0);
+ txnp = NULL;
+ if (ret != 0)
+ goto err;
}
nthreads = nreaders + nwriters + 2;
@@ -177,8 +187,9 @@ main(argc, argv)
/* Create reader/writer threads. */
for (i = 0; i < nreaders + nwriters; ++i)
- if (pthread_create(&tids[i], NULL, tstart, (void *)i))
- fatal("pthread_create", errno, 1);
+ if ((ret =
+ pthread_create(&tids[i], NULL, tstart, (void *)i)) != 0)
+ fatal("pthread_create", ret > 0 ? ret : errno, 1);
/* Create buffer pool trickle thread. */
if (pthread_create(&tids[i], NULL, trickle, &i))
@@ -193,10 +204,15 @@ main(argc, argv)
for (i = 0; i < nthreads; ++i)
(void)pthread_join(tids[i], &retp);
-err: (void)dbp->close(dbp, 0);
+ printf("Exiting\n");
+ stats();
+
+err: if (txnp != NULL)
+ (void)txnp->abort(txnp);
+ (void)dbp->close(dbp, 0);
(void)dbenv->close(dbenv, 0);
- return (0);
+ return (EXIT_SUCCESS);
}
int
@@ -219,7 +235,7 @@ reader(id)
* Read-only threads do not require transaction protection, unless
* there's a need for repeatable reads.
*/
- for (;;) {
+ while (!quit) {
/* Pick a key at random, and look it up. */
n = rand() % nlist;
key.data = list[n];
@@ -273,7 +289,7 @@ writer(id)
data.ulen = sizeof(dbuf);
data.flags = DB_DBT_USERMEM;
- for (;;) {
+ while (!quit) {
/* Pick a random key. */
n = rand() % nlist;
key.data = list[n];
@@ -286,8 +302,8 @@ writer(id)
/* Abort and retry. */
if (0) {
-retry: if ((ret = txn_abort(tid)) != 0)
- fatal("txn_abort", ret, 1);
+retry: if ((ret = tid->abort(tid)) != 0)
+ fatal("DB_TXN->abort", ret, 1);
++perf[id].aborts;
++perf[id].aborted;
}
@@ -302,7 +318,7 @@ retry: if ((ret = txn_abort(tid)) != 0)
}
/* Begin the transaction. */
- if ((ret = txn_begin(dbenv, NULL, &tid, 0)) != 0)
+ if ((ret = dbenv->txn_begin(dbenv, NULL, &tid, 0)) != 0)
fatal("txn_begin", ret, 1);
/*
@@ -352,8 +368,8 @@ add: /* Add the key. 1 data item in 30 is an overflow item. */
}
commit: /* The transaction finished, commit it. */
- if ((ret = txn_commit(tid, 0)) != 0)
- fatal("txn_commit", ret, 1);
+ if ((ret = tid->commit(tid, 0)) != 0)
+ fatal("DB_TXN->commit", ret, 1);
/*
* Every time the thread completes 20 transactions, show
@@ -415,23 +431,22 @@ stats()
* db_init --
* Initialize the environment.
*/
-DB_ENV *
+int
db_init(home)
- char *home;
+ const char *home;
{
- DB_ENV *dbenv;
int ret;
- if (punish) {
- (void)db_env_set_pageyield(1);
- (void)db_env_set_func_yield(sched_yield);
- }
-
if ((ret = db_env_create(&dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_env_create: %s\n", progname, db_strerror(ret));
- exit (1);
+ return (EXIT_FAILURE);
+ }
+ if (punish) {
+ (void)dbenv->set_flags(dbenv, DB_YIELDCPU, 1);
+ (void)db_env_set_func_yield(sched_yield);
}
+
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, progname);
(void)dbenv->set_cachesize(dbenv, 0, 100 * 1024, 0);
@@ -442,9 +457,10 @@ db_init(home)
DB_INIT_MPOOL | DB_INIT_TXN | DB_THREAD, 0)) != 0) {
dbenv->err(dbenv, ret, NULL);
(void)dbenv->close(dbenv, 0);
- exit (1);
+ return (EXIT_FAILURE);
}
- return (dbenv);
+
+ return (0);
}
/*
@@ -478,7 +494,7 @@ tstart(arg)
/*
* deadlock --
- * Thread start function for lock_detect().
+ * Thread start function for DB_ENV->lock_detect.
*/
void *
deadlock(arg)
@@ -495,21 +511,19 @@ deadlock(arg)
t.tv_sec = 0;
t.tv_usec = 100000;
- for (;;) {
- (void)lock_detect(dbenv,
- DB_LOCK_CONFLICT, DB_LOCK_YOUNGEST, NULL);
+ while (!quit) {
+ (void)dbenv->lock_detect(dbenv, 0, DB_LOCK_YOUNGEST, NULL);
/* Check every 100ms. */
(void)select(0, NULL, NULL, NULL, &t);
}
- /* NOTREACHED */
return (NULL);
}
/*
* trickle --
- * Thread start function for memp_trickle().
+ * Thread start function for memp_trickle.
*/
void *
trickle(arg)
@@ -525,8 +539,8 @@ trickle(arg)
printf("trickle thread starting: tid: %lu\n", (u_long)tid);
fflush(stdout);
- for (;;) {
- (void)memp_trickle(dbenv, 10, &wrote);
+ while (!quit) {
+ (void)dbenv->memp_trickle(dbenv, 10, &wrote);
if (verbose) {
sprintf(buf, "trickle: wrote %d\n", wrote);
write(STDOUT_FILENO, buf, strlen(buf));
@@ -537,7 +551,6 @@ trickle(arg)
}
}
- /* NOTREACHED */
return (NULL);
}
@@ -573,7 +586,7 @@ word()
*/
void
fatal(msg, err, syserr)
- char *msg;
+ const char *msg;
int err, syserr;
{
fprintf(stderr, "%s: ", progname);
@@ -585,7 +598,7 @@ fatal(msg, err, syserr)
if (syserr)
fprintf(stderr, "%s", strerror(err));
fprintf(stderr, "\n");
- exit (1);
+ exit(EXIT_FAILURE);
/* NOTREACHED */
}
@@ -594,11 +607,23 @@ fatal(msg, err, syserr)
* usage --
* Usage message.
*/
-void
+int
usage()
{
(void)fprintf(stderr,
"usage: %s [-pv] [-h home] [-n words] [-r readers] [-w writers]\n",
progname);
- exit(1);
+ return (EXIT_FAILURE);
+}
+
+/*
+ * onint --
+ * Interrupt signal handler.
+ */
+void
+onint(signo)
+ int signo;
+{
+ signo = 0; /* Quiet compiler. */
+ quit = 1;
}
diff --git a/db/examples_c/ex_tpcb.c b/db/examples_c/ex_tpcb.c
index 2fd11510a..342834004 100644
--- a/db/examples_c/ex_tpcb.c
+++ b/db/examples_c/ex_tpcb.c
@@ -1,64 +1,41 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_tpcb.c,v 11.21 2000/10/27 20:32:00 dda Exp $
+ * $Id: ex_tpcb.c,v 11.44 2003/04/24 15:44:15 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#if TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
-
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
+#include <time.h>
-#ifdef DB_WIN32
-#include <sys/types.h>
-#include <sys/timeb.h>
+#ifdef _WIN32
+extern int getopt(int, char * const *, const char *);
+#else
+#include <unistd.h>
#endif
#include <db.h>
typedef enum { ACCOUNT, BRANCH, TELLER } FTYPE;
-DB_ENV *db_init __P((char *, char *, int, int, int));
+DB_ENV *db_init __P((const char *, const char *, int, int, u_int32_t));
int hpopulate __P((DB *, int, int, int, int));
-int populate __P((DB *, u_int32_t, u_int32_t, int, char *));
+int populate __P((DB *, u_int32_t, u_int32_t, int, const char *));
u_int32_t random_id __P((FTYPE, int, int, int));
u_int32_t random_int __P((u_int32_t, u_int32_t));
int tp_populate __P((DB_ENV *, int, int, int, int, int));
int tp_run __P((DB_ENV *, int, int, int, int, int));
int tp_txn __P((DB_ENV *, DB *, DB *, DB *, DB *, int, int, int, int));
-#ifdef HAVE_VXWORKS
-#define ERROR_RETURN ERROR
-#define HOME "/vxtmp/vxtmp/TESTDIR"
-#define VXSHM_KEY 13
-int ex_tpcb_init __P(());
-int ex_tpcb __P(());
-#else
-#define ERROR_RETURN 1
-void invarg __P((char *, int, char *));
+int invarg __P((const char *, int, const char *));
int main __P((int, char *[]));
-void usage __P((char *));
-#endif
+int usage __P((const char *));
/*
* This program implements a basic TPC/B driver program. To create the
@@ -125,77 +102,6 @@ typedef struct _histrec {
u_int8_t pad[RECLEN - 4 * sizeof(u_int32_t)];
} histrec;
-#ifdef HAVE_VXWORKS
-int
-ex_tpcb_init()
-{
- DB_ENV *dbenv;
- int accounts, branches, ret, seed, t_ret, tellers, history, verbose;
- char *home;
- char *progname = "ex_tpcb_init"; /* Program name. */
-
- verbose = 1;
- if ((dbenv = db_init(HOME, progname, 0, 1, 0)) == NULL)
- return (ERROR_RETURN);
-
- accounts = ACCOUNTS;
- branches = BRANCHES;
- tellers = TELLERS;
- history = HISTORY;
-
- if ((ret = tp_populate(dbenv, accounts, branches, history, tellers,
- verbose)) != OK)
- fprintf(stderr, "%s: %s\n", progname, db_strerror(ret));
- if ((t_ret = dbenv->close(dbenv, 0)) != 0) {
- fprintf(stderr, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
- }
-
- return (ret == 0 ? t_ret : ret);
-}
-
-int
-ex_tpcb()
-{
- DB_ENV *dbenv;
- int accounts, branches, seed, tellers, history;
- int ch, mpool, ntxns, ret, t_ret, txn_no_sync, verbose;
- char *progname = "ex_tpcb"; /* Program name. */
-
- accounts = ACCOUNTS;
- branches = BRANCHES;
- tellers = TELLERS;
- history = HISTORY;
-
- txn_no_sync = 0;
- mpool = 0;
- ntxns = 20;
- verbose = 1;
- seed = (int)((u_int)getpid() | time(NULL));
-
- srand((u_int)seed);
-
- /* Initialize the database environment. */
- if ((dbenv = db_init(HOME, progname, mpool, 0,
- txn_no_sync ? DB_TXN_NOSYNC : 0)) == NULL)
- return (ERROR_RETURN);
-
- if (verbose)
- printf("%ld Accounts, %ld Branches, %ld Tellers, %ld History\n",
- (long)accounts, (long)branches,
- (long)tellers, (long)history);
-
- if ((ret = tp_run(dbenv, ntxns, accounts, branches, tellers, verbose))
- != OK)
- fprintf(stderr, "tp_run failed\n");
-
- if ((t_ret = dbenv->close(dbenv, 0)) != 0) {
- fprintf(stderr, "%s: %s\n", progname, db_strerror(ret));
- return (ERROR_RETURN);
- }
- return (ret == 0 ? t_ret : ret);
-}
-#else
int
main(argc, argv)
int argc;
@@ -206,29 +112,27 @@ main(argc, argv)
DB_ENV *dbenv;
int accounts, branches, seed, tellers, history;
int ch, iflag, mpool, ntxns, ret, txn_no_sync, verbose;
- char *home, *progname;
+ const char *home, *progname;
home = "TESTDIR";
progname = "ex_tpcb";
accounts = branches = history = tellers = 0;
- txn_no_sync = 0;
- mpool = ntxns = 0;
- verbose = 0;
- iflag = 0;
- seed = (int)((u_int)getpid() | time(NULL));
+ iflag = mpool = ntxns = txn_no_sync = verbose = 0;
+ seed = (int)time(NULL);
+
while ((ch = getopt(argc, argv, "a:b:c:fh:in:S:s:t:v")) != EOF)
switch (ch) {
case 'a': /* Number of account records */
if ((accounts = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 'b': /* Number of branch records */
if ((branches = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 'c': /* Cachesize in bytes */
if ((mpool = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 'f': /* Fast mode: no txn sync. */
txn_no_sync = 1;
@@ -241,26 +145,26 @@ main(argc, argv)
break;
case 'n': /* Number of transactions */
if ((ntxns = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 'S': /* Random number seed. */
if ((seed = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 's': /* Number of history records */
if ((history = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 't': /* Number of teller records */
if ((tellers = atoi(optarg)) <= 0)
- invarg(progname, ch, optarg);
+ return (invarg(progname, ch, optarg));
break;
case 'v': /* Verbose option. */
verbose = 1;
break;
case '?':
default:
- usage(progname);
+ return (usage(progname));
}
argc -= optind;
argv += optind;
@@ -270,7 +174,7 @@ main(argc, argv)
/* Initialize the database environment. */
if ((dbenv = db_init(home,
progname, mpool, iflag, txn_no_sync ? DB_TXN_NOSYNC : 0)) == NULL)
- return (1);
+ return (EXIT_FAILURE);
accounts = accounts == 0 ? ACCOUNTS : accounts;
branches = branches == 0 ? BRANCHES : branches;
@@ -284,49 +188,48 @@ main(argc, argv)
if (iflag) {
if (ntxns != 0)
- usage(progname);
+ return (usage(progname));
tp_populate(dbenv,
accounts, branches, history, tellers, verbose);
} else {
if (ntxns == 0)
- usage(progname);
+ return (usage(progname));
tp_run(dbenv, ntxns, accounts, branches, tellers, verbose);
}
if ((ret = dbenv->close(dbenv, 0)) != 0) {
fprintf(stderr, "%s: dbenv->close failed: %s\n",
progname, db_strerror(ret));
- return (1);
+ return (EXIT_FAILURE);
}
- return (0);
+ return (EXIT_SUCCESS);
}
-void
+int
invarg(progname, arg, str)
- char *progname;
+ const char *progname;
int arg;
- char *str;
+ const char *str;
{
(void)fprintf(stderr,
"%s: invalid argument for -%c: %s\n", progname, arg, str);
- exit (1);
+ return (EXIT_FAILURE);
}
-void
+int
usage(progname)
- char *progname;
+ const char *progname;
{
- char *a1, *a2;
+ const char *a1, *a2;
a1 = "[-fv] [-a accounts] [-b branches]\n";
a2 = "\t[-c cache_size] [-h home] [-S seed] [-s history] [-t tellers]";
(void)fprintf(stderr, "usage: %s -i %s %s\n", progname, a1, a2);
(void)fprintf(stderr,
" %s -n transactions %s %s\n", progname, a1, a2);
- exit(1);
+ return (EXIT_FAILURE);
}
-#endif
/*
* db_init --
@@ -334,8 +237,9 @@ usage(progname)
*/
DB_ENV *
db_init(home, prefix, cachesize, initializing, flags)
- char *home, *prefix;
- int cachesize, initializing, flags;
+ const char *home, *prefix;
+ int cachesize, initializing;
+ u_int32_t flags;
{
DB_ENV *dbenv;
u_int32_t local_flags;
@@ -347,19 +251,17 @@ db_init(home, prefix, cachesize, initializing, flags)
}
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, prefix);
-#ifdef HAVE_VXWORKS
- if ((ret = dbenv->set_shm_key(dbenv, VXSHM_KEY)) != 0) {
- dbenv->err(dbenv, ret, "set_shm_key");
- return (NULL);
- }
-#endif
(void)dbenv->set_cachesize(dbenv, 0,
cachesize == 0 ? 4 * 1024 * 1024 : (u_int32_t)cachesize, 0);
+ if (flags & (DB_TXN_NOSYNC))
+ (void)dbenv->set_flags(dbenv, DB_TXN_NOSYNC, 1);
+ flags &= ~(DB_TXN_NOSYNC);
+
local_flags = flags | DB_CREATE | (initializing ? DB_INIT_MPOOL :
DB_INIT_TXN | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL);
if ((ret = dbenv->open(dbenv, home, local_flags, 0)) != 0) {
- dbenv->err(dbenv, ret, "DBENV->open: %s", home);
+ dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
(void)dbenv->close(dbenv, 0);
return (NULL);
}
@@ -376,7 +278,6 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
int accounts, branches, history, tellers, verbose;
{
DB *dbp;
- char dbname[100];
u_int32_t balance, idnum, oflags;
u_int32_t end_anum, end_bnum, end_tnum;
u_int32_t start_anum, start_bnum, start_tnum;
@@ -384,23 +285,18 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
idnum = BEGID;
balance = 500000;
-#ifdef HAVE_VXWORKS
- oflags = DB_CREATE;
-#else
oflags = DB_CREATE | DB_TRUNCATE;
-#endif
if ((ret = db_create(&dbp, env, 0)) != 0) {
env->err(env, ret, "db_create");
- return (ERROR_RETURN);
+ return (1);
}
(void)dbp->set_h_nelem(dbp, (u_int32_t)accounts);
- snprintf(dbname, sizeof(dbname), "account");
- if ((ret = dbp->open(dbp, dbname, NULL,
+ if ((ret = dbp->open(dbp, NULL, "account", NULL,
DB_HASH, oflags, 0644)) != 0) {
env->err(env, ret, "DB->open: account");
- return (ERROR_RETURN);
+ return (1);
}
start_anum = idnum;
@@ -409,7 +305,7 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
end_anum = idnum - 1;
if ((ret = dbp->close(dbp, 0)) != 0) {
env->err(env, ret, "DB->close: account");
- return (ERROR_RETURN);
+ return (1);
}
if (verbose)
printf("Populated accounts: %ld - %ld\n",
@@ -422,16 +318,15 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
*/
if ((ret = db_create(&dbp, env, 0)) != 0) {
env->err(env, ret, "db_create");
- return (ERROR_RETURN);
+ return (1);
}
(void)dbp->set_h_ffactor(dbp, 1);
(void)dbp->set_h_nelem(dbp, (u_int32_t)branches);
(void)dbp->set_pagesize(dbp, 512);
- snprintf(dbname, sizeof(dbname), "branch");
- if ((ret = dbp->open(dbp, dbname, NULL,
+ if ((ret = dbp->open(dbp, NULL, "branch", NULL,
DB_HASH, oflags, 0644)) != 0) {
env->err(env, ret, "DB->open: branch");
- return (ERROR_RETURN);
+ return (1);
}
start_bnum = idnum;
populate(dbp, idnum, balance, branches, "branch");
@@ -439,7 +334,7 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
end_bnum = idnum - 1;
if ((ret = dbp->close(dbp, 0)) != 0) {
env->err(env, ret, "DB->close: branch");
- return (ERROR_RETURN);
+ return (1);
}
if (verbose)
printf("Populated branches: %ld - %ld\n",
@@ -451,16 +346,15 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
*/
if ((ret = db_create(&dbp, env, 0)) != 0) {
env->err(env, ret, "db_create");
- return (ERROR_RETURN);
+ return (1);
}
(void)dbp->set_h_ffactor(dbp, 0);
(void)dbp->set_h_nelem(dbp, (u_int32_t)tellers);
(void)dbp->set_pagesize(dbp, 512);
- snprintf(dbname, sizeof(dbname), "teller");
- if ((ret = dbp->open(dbp, dbname, NULL,
+ if ((ret = dbp->open(dbp, NULL, "teller", NULL,
DB_HASH, oflags, 0644)) != 0) {
env->err(env, ret, "DB->open: teller");
- return (ERROR_RETURN);
+ return (1);
}
start_tnum = idnum;
@@ -469,7 +363,7 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
end_tnum = idnum - 1;
if ((ret = dbp->close(dbp, 0)) != 0) {
env->err(env, ret, "DB->close: teller");
- return (ERROR_RETURN);
+ return (1);
}
if (verbose)
printf("Populated tellers: %ld - %ld\n",
@@ -477,20 +371,19 @@ tp_populate(env, accounts, branches, history, tellers, verbose)
if ((ret = db_create(&dbp, env, 0)) != 0) {
env->err(env, ret, "db_create");
- return (ERROR_RETURN);
+ return (1);
}
(void)dbp->set_re_len(dbp, HISTORY_LEN);
- snprintf(dbname, sizeof(dbname), "history");
- if ((ret = dbp->open(dbp, dbname, NULL,
+ if ((ret = dbp->open(dbp, NULL, "history", NULL,
DB_RECNO, oflags, 0644)) != 0) {
env->err(env, ret, "DB->open: history");
- return (ERROR_RETURN);
+ return (1);
}
hpopulate(dbp, history, accounts, branches, tellers);
if ((ret = dbp->close(dbp, 0)) != 0) {
env->err(env, ret, "DB->close: history");
- return (ERROR_RETURN);
+ return (1);
}
return (0);
}
@@ -500,7 +393,7 @@ populate(dbp, start_id, balance, nrecs, msg)
DB *dbp;
u_int32_t start_id, balance;
int nrecs;
- char *msg;
+ const char *msg;
{
DBT kdbt, ddbt;
defrec drec;
@@ -521,7 +414,7 @@ populate(dbp, start_id, balance, nrecs, msg)
(dbp->put)(dbp, NULL, &kdbt, &ddbt, DB_NOOVERWRITE)) != 0) {
dbp->err(dbp,
ret, "Failure initializing %s file\n", msg);
- return (ERROR_RETURN);
+ return (1);
}
}
return (0);
@@ -552,7 +445,7 @@ hpopulate(dbp, history, accounts, branches, tellers)
hrec.tid = random_id(TELLER, accounts, branches, tellers);
if ((ret = dbp->put(dbp, NULL, &kdbt, &ddbt, DB_APPEND)) != 0) {
dbp->err(dbp, ret, "dbp->put");
- return (ERROR_RETURN);
+ return (1);
}
}
return (0);
@@ -584,7 +477,7 @@ random_id(type, accounts, branches, tellers)
max = min = BEGID;
num = accounts;
- switch(type) {
+ switch (type) {
case TELLER:
min += branches;
num = tellers;
@@ -606,67 +499,56 @@ tp_run(dbenv, n, accounts, branches, tellers, verbose)
int n, accounts, branches, tellers, verbose;
{
DB *adb, *bdb, *hdb, *tdb;
- char dbname[100];
double gtps, itps;
int failed, ifailed, ret, txns;
time_t starttime, curtime, lasttime;
-#ifndef DB_WIN32
- pid_t pid;
-
- pid = getpid();
-#else
- int pid;
- pid = 0;
-#endif
+ adb = bdb = hdb = tdb = NULL;
+ txns = failed = 0;
/*
* Open the database files.
*/
if ((ret = db_create(&adb, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
- return (ERROR_RETURN);
+ goto err;
}
- snprintf(dbname, sizeof(dbname), "account");
- if ((ret = adb->open(adb, dbname, NULL, DB_UNKNOWN, 0, 0)) != 0) {
+ if ((ret = adb->open(adb, NULL, "account", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open: account");
- return (ERROR_RETURN);
+ goto err;
}
-
if ((ret = db_create(&bdb, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
- return (ERROR_RETURN);
+ goto err;
}
- snprintf(dbname, sizeof(dbname), "branch");
- if ((ret = bdb->open(bdb, dbname, NULL, DB_UNKNOWN, 0, 0)) != 0) {
+ if ((ret = bdb->open(bdb, NULL, "branch", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
dbenv->err(dbenv, ret, "DB->open: branch");
- return (ERROR_RETURN);
+ goto err;
}
-
- if ((ret = db_create(&tdb, dbenv, 0)) != 0) {
+ if ((ret = db_create(&hdb, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
- return (ERROR_RETURN);
+ goto err;
}
- snprintf(dbname, sizeof(dbname), "teller");
- if ((ret = tdb->open(tdb, dbname, NULL, DB_UNKNOWN, 0, 0)) != 0) {
- dbenv->err(dbenv, ret, "DB->open: teller");
- return (ERROR_RETURN);
+ if ((ret = hdb->open(hdb, NULL, "history", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open: history");
+ goto err;
}
-
- if ((ret = db_create(&hdb, dbenv, 0)) != 0) {
+ if ((ret = db_create(&tdb, dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_create");
- return (ERROR_RETURN);
+ goto err;
}
- snprintf(dbname, sizeof(dbname), "history");
- if ((ret = hdb->open(hdb, dbname, NULL, DB_UNKNOWN, 0, 0)) != 0) {
- dbenv->err(dbenv, ret, "DB->open: history");
- return (ERROR_RETURN);
+ if ((ret = tdb->open(tdb, NULL, "teller", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ dbenv->err(dbenv, ret, "DB->open: teller");
+ goto err;
}
- txns = failed = ifailed = 0;
starttime = time(NULL);
lasttime = starttime;
- while (n-- > 0) {
+ for (ifailed = 0; n-- > 0;) {
txns++;
ret = tp_txn(dbenv, adb, bdb, tdb, hdb,
accounts, branches, tellers, verbose);
@@ -678,8 +560,7 @@ tp_run(dbenv, n, accounts, branches, tellers, verbose)
curtime = time(NULL);
gtps = (double)(txns - failed) / (curtime - starttime);
itps = (double)(5000 - ifailed) / (curtime - lasttime);
- printf("[%d] %d txns %d failed ", (int)pid,
- txns, failed);
+ printf("%d txns %d failed ", txns, failed);
printf("%6.2f TPS (gross) %6.2f TPS (interval)\n",
gtps, itps);
lasttime = curtime;
@@ -687,13 +568,17 @@ tp_run(dbenv, n, accounts, branches, tellers, verbose)
}
}
- (void)adb->close(adb, 0);
- (void)bdb->close(bdb, 0);
- (void)tdb->close(tdb, 0);
- (void)hdb->close(hdb, 0);
+err: if (adb != NULL)
+ (void)adb->close(adb, 0);
+ if (bdb != NULL)
+ (void)bdb->close(bdb, 0);
+ if (tdb != NULL)
+ (void)tdb->close(tdb, 0);
+ if (hdb != NULL)
+ (void)hdb->close(hdb, 0);
printf("%ld transactions begun %ld failed\n", (long)txns, (long)failed);
- return (0);
+ return (ret == 0 ? 0 : 1);
}
/*
@@ -711,7 +596,7 @@ tp_txn(dbenv, adb, bdb, tdb, hdb, accounts, branches, tellers, verbose)
db_recno_t key;
defrec rec;
histrec hrec;
- int account, branch, teller;
+ int account, branch, teller, ret;
t = NULL;
acurs = bcurs = tcurs = NULL;
@@ -746,7 +631,7 @@ tp_txn(dbenv, adb, bdb, tdb, hdb, accounts, branches, tellers, verbose)
d_histdbt.flags = DB_DBT_PARTIAL;
/* START TIMING */
- if (txn_begin(dbenv, NULL, &t, 0) != 0)
+ if (dbenv->txn_begin(dbenv, NULL, &t, 0) != 0)
goto err;
if (adb->cursor(adb, t, &acurs, 0) != 0 ||
@@ -789,7 +674,9 @@ tp_txn(dbenv, adb, bdb, tdb, hdb, accounts, branches, tellers, verbose)
tcurs->c_close(tcurs) != 0)
goto err;
- if (txn_commit(t, 0) != 0)
+ ret = t->commit(t, 0);
+ t = NULL;
+ if (ret != 0)
goto err;
/* END TIMING */
@@ -802,7 +689,7 @@ err: if (acurs != NULL)
if (tcurs != NULL)
(void)tcurs->c_close(tcurs);
if (t != NULL)
- (void)txn_abort(t);
+ (void)t->abort(t);
if (verbose)
printf("Transaction A=%ld B=%ld T=%ld failed\n",
diff --git a/db/examples_c/ex_tpcb.h b/db/examples_c/ex_tpcb.h
index ef90bc532..2a85c8c06 100644
--- a/db/examples_c/ex_tpcb.h
+++ b/db/examples_c/ex_tpcb.h
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: ex_tpcb.h,v 11.4 2000/05/17 19:21:02 bostic Exp $
+ * $Id: ex_tpcb.h,v 11.7 2003/01/08 04:44:03 bostic Exp $
*/
#ifndef _TPCB_H_
diff --git a/db/examples_cxx/AccessExample.cpp b/db/examples_cxx/AccessExample.cpp
index ae885aa83..14ddae578 100644
--- a/db/examples_cxx/AccessExample.cpp
+++ b/db/examples_cxx/AccessExample.cpp
@@ -1,50 +1,77 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: AccessExample.cpp,v 11.7 2000/12/06 18:58:23 bostic Exp $
+ * $Id: AccessExample.cpp,v 11.22 2003/01/08 04:46:49 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <iostream.h>
+#include <iostream>
+#include <iomanip>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#ifndef _MSC_VER
+
+#ifdef _WIN32
+extern "C" {
+ extern int getopt(int, char * const *, const char *);
+ extern int optind;
+}
+#else
#include <unistd.h>
#endif
-#endif
-#include <iomanip.h>
#include <db_cxx.h>
+#define DATABASE "access.db"
+
+using std::cin;
+using std::cout;
+using std::cerr;
+
class AccessExample
{
public:
AccessExample();
- void run();
+ void run(bool removeExistingDatabase, const char *fileName);
private:
- static const char FileName[];
-
// no need for copy and assignment
AccessExample(const AccessExample &);
void operator = (const AccessExample &);
};
-static void usage(); // forward
+int
+usage()
+{
+ (void)fprintf(stderr, "usage: AccessExample [-r] [database]\n");
+ return (EXIT_FAILURE);
+}
-int main(int argc, char *argv[])
+int
+main(int argc, char *argv[])
{
- if (argc > 1) {
- usage();
- }
+ int ch, rflag;
+ const char *database;
+
+ rflag = 0;
+ while ((ch = getopt(argc, argv, "r")) != EOF)
+ switch (ch) {
+ case 'r':
+ rflag = 1;
+ break;
+ case '?':
+ default:
+ return (usage());
+ }
+ argc -= optind;
+ argv += optind;
+
+ /* Accept optional database name. */
+ database = *argv == NULL ? DATABASE : argv[0];
// Use a try block just to report any errors.
// An alternate approach to using exceptions is to
@@ -53,31 +80,24 @@ int main(int argc, char *argv[])
//
try {
AccessExample app;
- app.run();
- return 0;
+ app.run((bool)(rflag == 1 ? true : false), database);
+ return (EXIT_SUCCESS);
}
catch (DbException &dbe) {
cerr << "AccessExample: " << dbe.what() << "\n";
- return 1;
+ return (EXIT_FAILURE);
}
}
-static void usage()
-{
- cerr << "usage: AccessExample\n";
- exit(1);
-}
-
-const char AccessExample::FileName[] = "access.db";
-
AccessExample::AccessExample()
{
}
-void AccessExample::run()
+void AccessExample::run(bool removeExistingDatabase, const char *fileName)
{
// Remove the previous database.
- (void)unlink(FileName);
+ if (removeExistingDatabase)
+ (void)remove(fileName);
// Create the database object.
// There is no environment for this simple example.
@@ -87,7 +107,7 @@ void AccessExample::run()
db.set_errpfx("AccessExample");
db.set_pagesize(1024); /* Page size: 1K. */
db.set_cachesize(0, 32 * 1024, 0);
- db.open(FileName, NULL, DB_BTREE, DB_CREATE, 0664);
+ db.open(NULL, fileName, NULL, DB_BTREE, DB_CREATE, 0664);
//
// Insert records into the database, where the key is the user
diff --git a/db/examples_cxx/BtRecExample.cpp b/db/examples_cxx/BtRecExample.cpp
index 98d9626b9..033bd8b24 100644
--- a/db/examples_cxx/BtRecExample.cpp
+++ b/db/examples_cxx/BtRecExample.cpp
@@ -1,35 +1,31 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: BtRecExample.cpp,v 11.6 2000/02/19 20:57:59 bostic Exp $
+ * $Id: BtRecExample.cpp,v 11.22 2003/01/08 04:46:52 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+
#include <errno.h>
-#include <iostream.h>
+#include <iostream>
+#include <iomanip>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
-#include <iomanip.h>
#include <db_cxx.h>
+using std::cout;
+using std::cerr;
+
#define DATABASE "access.db"
#define WORDLIST "../test/wordlist"
-void usage();
-extern "C" int getopt(int, char * const *, const char *);
-
-char *progname = "BtRecExample"; // Program name.
+const char *progname = "BtRecExample"; // Program name.
class BtRecExample
{
@@ -38,7 +34,7 @@ public:
~BtRecExample();
void run();
void stats();
- void show(char *msg, Dbt *key, Dbt *data);
+ void show(const char *msg, Dbt *key, Dbt *data);
private:
Db *dbp;
@@ -51,7 +47,7 @@ BtRecExample::BtRecExample(FILE *fp)
int ret;
// Remove the previous database.
- (void)unlink(DATABASE);
+ (void)remove(DATABASE);
dbp = new Db(NULL, 0);
@@ -60,7 +56,7 @@ BtRecExample::BtRecExample(FILE *fp)
dbp->set_pagesize(1024); // 1K page sizes.
dbp->set_flags(DB_RECNUM); // Record numbers.
- dbp->open(DATABASE, NULL, DB_BTREE, DB_CREATE, 0664);
+ dbp->open(NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664);
//
// Insert records into the database, where the key is the word
@@ -107,7 +103,7 @@ void BtRecExample::stats()
{
DB_BTREE_STAT *statp;
- dbp->stat(&statp, NULL, 0);
+ dbp->stat(&statp, 0);
cout << progname << ": database contains "
<< (u_long)statp->bt_ndata << " records\n";
@@ -191,34 +187,22 @@ void BtRecExample::run()
// show --
// Display a key/data pair.
//
-void BtRecExample::show(char *msg, Dbt *key, Dbt *data)
+void BtRecExample::show(const char *msg, Dbt *key, Dbt *data)
{
cout << msg << (char *)key->get_data()
<< " : " << (char *)data->get_data() << "\n";
}
int
-main(int argc, char *argv[])
+main()
{
- extern char *optarg;
- extern int optind;
FILE *fp;
- int ch;
-
- while ((ch = getopt(argc, argv, "")) != EOF)
- switch (ch) {
- case '?':
- default:
- usage();
- }
- argc -= optind;
- argv += optind;
// Open the word database.
if ((fp = fopen(WORDLIST, "r")) == NULL) {
fprintf(stderr, "%s: open %s: %s\n",
progname, WORDLIST, db_strerror(errno));
- exit (1);
+ return (EXIT_FAILURE);
}
try {
@@ -233,15 +217,8 @@ main(int argc, char *argv[])
}
catch (DbException &dbe) {
cerr << "Exception: " << dbe.what() << "\n";
- return dbe.get_errno();
+ return (EXIT_FAILURE);
}
- return (0);
-}
-
-void
-usage()
-{
- (void)fprintf(stderr, "usage: %s\n", progname);
- exit(1);
+ return (EXIT_SUCCESS);
}
diff --git a/db/examples_cxx/EnvExample.cpp b/db/examples_cxx/EnvExample.cpp
index bef1f3d1a..5794d8850 100644
--- a/db/examples_cxx/EnvExample.cpp
+++ b/db/examples_cxx/EnvExample.cpp
@@ -1,28 +1,27 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: EnvExample.cpp,v 11.12 2000/10/27 20:32:00 dda Exp $
+ * $Id: EnvExample.cpp,v 11.25 2003/01/08 04:46:55 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <errno.h>
-#include <iostream.h>
+#include <iostream>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
#include <db_cxx.h>
+using std::ostream;
+using std::cout;
+using std::cerr;
+
#ifdef macintosh
#define DATABASE_HOME ":database"
#define CONFIG_DATA_DIR ":database"
@@ -36,10 +35,10 @@
#endif
#endif
-void db_setup(char *, char *, ostream&);
-void db_teardown(char *, char *, ostream&);
+void db_setup(const char *, const char *, ostream&);
+void db_teardown(const char *, const char *, ostream&);
-char *progname = "EnvExample"; /* Program name. */
+const char *progname = "EnvExample"; /* Program name. */
//
// An example of a program creating/configuring a Berkeley DB environment.
@@ -54,7 +53,7 @@ main(int, char **)
// and check error returns from all methods.
//
try {
- char *data_dir, *home;
+ const char *data_dir, *home;
//
// All of the shared database files live in /home/database,
@@ -64,21 +63,21 @@ main(int, char **)
data_dir = CONFIG_DATA_DIR;
cout << "Setup env\n";
- db_setup(DATABASE_HOME, data_dir, cerr);
+ db_setup(home, data_dir, cerr);
cout << "Teardown env\n";
- db_teardown(DATABASE_HOME, data_dir, cerr);
- return 0;
+ db_teardown(home, data_dir, cerr);
+ return (EXIT_SUCCESS);
}
catch (DbException &dbe) {
- cerr << "AccessExample: " << dbe.what() << "\n";
- return 1;
+ cerr << "EnvExample: " << dbe.what() << "\n";
+ return (EXIT_FAILURE);
}
}
// Note that any of the db calls can throw DbException
void
-db_setup(char *home, char *data_dir, ostream& err_stream)
+db_setup(const char *home, const char *data_dir, ostream& err_stream)
{
//
// Create an environment object and initialize it for error
@@ -98,7 +97,7 @@ db_setup(char *home, char *data_dir, ostream& err_stream)
(void)dbenv->set_data_dir(data_dir);
// Open the environment with full transactional support.
- dbenv->open(DATABASE_HOME,
+ dbenv->open(home,
DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN, 0);
// Do something interesting...
@@ -108,7 +107,7 @@ db_setup(char *home, char *data_dir, ostream& err_stream)
}
void
-db_teardown(char *home, char *data_dir, ostream& err_stream)
+db_teardown(const char *home, const char *data_dir, ostream& err_stream)
{
// Remove the shared database regions.
DbEnv *dbenv = new DbEnv(0);
diff --git a/db/examples_cxx/LockExample.cpp b/db/examples_cxx/LockExample.cpp
index cfab28680..edfbfd19d 100644
--- a/db/examples_cxx/LockExample.cpp
+++ b/db/examples_cxx/LockExample.cpp
@@ -1,27 +1,26 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: LockExample.cpp,v 11.8 2001/01/04 14:23:30 dda Exp $
+ * $Id: LockExample.cpp,v 11.24 2003/04/24 15:46:04 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <errno.h>
-#include <iostream.h>
+#include <iostream>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
#include <db_cxx.h>
-char *progname = "LockExample"; // Program name.
+using std::cin;
+using std::cout;
+using std::cerr;
+
+const char *progname = "LockExample"; // Program name.
//
// An example of a program using DBLock and related classes.
@@ -30,18 +29,20 @@ class LockExample : public DbEnv
{
public:
void run();
+ int error_code() { return (ecode); }
LockExample(const char *home, u_int32_t maxlocks, int do_unlink);
private:
static const char FileName[];
+ int ecode;
// no need for copy and assignment
LockExample(const LockExample &);
void operator = (const LockExample &);
};
-static void usage(); // forward
+static int usage(); // forward
int
main(int argc, char *argv[])
@@ -57,44 +58,51 @@ main(int argc, char *argv[])
for (int argnum = 1; argnum < argc; ++argnum) {
if (strcmp(argv[argnum], "-h") == 0) {
if (++argnum >= argc)
- usage();
+ return (usage());
home = argv[argnum];
}
else if (strcmp(argv[argnum], "-m") == 0) {
if (++argnum >= argc)
- usage();
+ return (usage());
if ((i = atoi(argv[argnum])) <= 0)
- usage();
+ return (usage());
maxlocks = (u_int32_t)i; /* XXX: possible overflow. */
}
else if (strcmp(argv[argnum], "-u") == 0) {
do_unlink = 1;
}
else {
- usage();
+ return (usage());
}
}
try {
+ int ecode;
+
if (do_unlink) {
// Create an environment that immediately
// removes all files.
LockExample tmp(home, maxlocks, do_unlink);
+ if ((ecode = tmp.error_code()) != 0)
+ return (ecode);
}
LockExample app(home, maxlocks, do_unlink);
+ if ((ecode = app.error_code()) != 0)
+ return (ecode);
app.run();
app.close(0);
- return 0;
+ return (EXIT_SUCCESS);
}
catch (DbException &dbe) {
cerr << "LockExample: " << dbe.what() << "\n";
- return 1;
+ return (EXIT_FAILURE);
}
}
LockExample::LockExample(const char *home, u_int32_t maxlocks, int do_unlink)
: DbEnv(0)
+, ecode(0)
{
int ret;
@@ -102,7 +110,7 @@ LockExample::LockExample(const char *home, u_int32_t maxlocks, int do_unlink)
if ((ret = remove(home, DB_FORCE)) != 0) {
cerr << progname << ": DbEnv::remove: "
<< strerror(errno) << "\n";
- exit (1);
+ ecode = EXIT_FAILURE;
}
}
else {
@@ -176,7 +184,8 @@ void LockExample::run()
}
else {
DbLock *newlocks = new DbLock[lockcount];
- for (int lockno = 0; lockno < lockid; lockno++) {
+ for (int lockno = 0;
+ lockno < lockid; lockno++) {
newlocks[lockno] = locks[lockno];
}
delete locks;
@@ -198,7 +207,7 @@ void LockExample::run()
continue;
}
DbLock lock = locks[lockid];
- ret = lock.put(this);
+ ret = lock_put(&lock);
did_get = 0;
}
@@ -228,9 +237,9 @@ void LockExample::run()
delete locks;
}
-static void
+static int
usage()
{
cerr << "usage: LockExample [-u] [-h home] [-m maxlocks]\n";
- exit(1);
+ return (EXIT_FAILURE);
}
diff --git a/db/examples_cxx/MpoolExample.cpp b/db/examples_cxx/MpoolExample.cpp
index cf0f5f7e6..24c36a7b1 100644
--- a/db/examples_cxx/MpoolExample.cpp
+++ b/db/examples_cxx/MpoolExample.cpp
@@ -1,43 +1,44 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: MpoolExample.cpp,v 11.9 2000/10/27 20:32:01 dda Exp $
+ * $Id: MpoolExample.cpp,v 11.24 2003/01/08 04:47:01 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <errno.h>
#include <fcntl.h>
-#include <iostream.h>
+#include <iostream>
+#include <fstream>
#include <stdlib.h>
#include <string.h>
#include <time.h>
-#include <unistd.h>
-#endif
#include <db_cxx.h>
+using std::cout;
+using std::cerr;
+using std::ios;
+using std::ofstream;
+
#define MPOOL "mpool"
-void init(char *, int, int);
-void run(DB_ENV *, int, int, int);
+int init(const char *, int, int);
+int run(DB_ENV *, int, int, int);
-static void usage();
+static int usage();
-char *progname = "MpoolExample"; // Program name.
+const char *progname = "MpoolExample"; // Program name.
class MpoolExample : public DbEnv
{
public:
MpoolExample();
- void initdb(const char *home, int cachesize);
- void run(int hits, int pagesize, int npages);
+ int initdb(const char *home, int cachesize);
+ int run(int hits, int pagesize, int npages);
private:
static const char FileName[];
@@ -49,6 +50,7 @@ private:
int main(int argc, char *argv[])
{
+ int ret;
int cachesize = 20 * 1024;
int hits = 1000;
int npages = 50;
@@ -77,7 +79,8 @@ int main(int argc, char *argv[])
}
// Initialize the file.
- init(MPOOL, pagesize, npages);
+ if ((ret = init(MPOOL, pagesize, npages)) != 0)
+ return (ret);
try {
MpoolExample app;
@@ -87,14 +90,16 @@ int main(int argc, char *argv[])
<< "; pagesize: " << pagesize
<< "; N pages: " << npages << "\n";
- app.initdb(NULL, cachesize);
- app.run(hits, pagesize, npages);
+ if ((ret = app.initdb(NULL, cachesize)) != 0)
+ return (ret);
+ if ((ret = app.run(hits, pagesize, npages)) != 0)
+ return (ret);
cout << "MpoolExample: completed\n";
- return 0;
+ return (EXIT_SUCCESS);
}
catch (DbException &dbe) {
cerr << "MpoolExample: " << dbe.what() << "\n";
- return 1;
+ return (EXIT_FAILURE);
}
}
@@ -102,21 +107,16 @@ int main(int argc, char *argv[])
// init --
// Create a backing file.
//
-void
-init(char *file, int pagesize, int npages)
+int
+init(const char *file, int pagesize, int npages)
{
- //
// Create a file with the right number of pages, and store a page
// number on each page.
- //
- int fd;
- int flags = O_CREAT | O_RDWR | O_TRUNC;
-#ifdef DB_WIN32
- flags |= O_BINARY;
-#endif
- if ((fd = open(file, flags, 0666)) < 0) {
- cerr << "MpoolExample: " << file << ": " << strerror(errno) << "\n";
- exit(1);
+ ofstream of(file, ios::out | ios::binary);
+
+ if (of.fail()) {
+ cerr << "MpoolExample: " << file << ": open failed\n";
+ return (EXIT_FAILURE);
}
char *p = new char[pagesize];
memset(p, 0, pagesize);
@@ -124,21 +124,22 @@ init(char *file, int pagesize, int npages)
// The pages are numbered from 0.
for (int cnt = 0; cnt <= npages; ++cnt) {
*(db_pgno_t *)p = cnt;
- if (write(fd, p, pagesize) != pagesize) {
- cerr << "MpoolExample: " << file
- << ": " << strerror(errno) << "\n";
- exit(1);
+ of.write(p, pagesize);
+ if (of.fail()) {
+ cerr << "MpoolExample: " << file << ": write failed\n";
+ return (EXIT_FAILURE);
}
}
delete [] p;
+ return (EXIT_SUCCESS);
}
-static void
+static int
usage()
{
cerr << "usage: MpoolExample [-c cachesize] "
<< "[-h hits] [-n npages] [-p pagesize]\n";
- exit(1);
+ return (EXIT_FAILURE);
}
// Note: by using DB_CXX_NO_EXCEPTIONS, we get explicit error returns
@@ -150,61 +151,68 @@ MpoolExample::MpoolExample()
{
}
-void MpoolExample::initdb(const char *home, int cachesize)
+int MpoolExample::initdb(const char *home, int cachesize)
{
set_error_stream(&cerr);
set_errpfx("MpoolExample");
set_cachesize(0, cachesize, 0);
open(home, DB_CREATE | DB_INIT_MPOOL, 0);
+ return (EXIT_SUCCESS);
}
//
// run --
// Get a set of pages.
//
-void
+int
MpoolExample::run(int hits, int pagesize, int npages)
{
db_pgno_t pageno;
- int cnt;
+ int cnt, ret;
void *p;
- // Open the file in the pool.
- DbMpoolFile *dbmfp;
+ // Open the file in the environment.
+ DbMpoolFile *mfp;
- DbMpoolFile::open(this, MPOOL, 0, 0, pagesize, NULL, &dbmfp);
+ if ((ret = memp_fcreate(&mfp, 0)) != 0) {
+ cerr << "MpoolExample: memp_fcreate failed: "
+ << strerror(ret) << "\n";
+ return (EXIT_FAILURE);
+ }
+ mfp->open(MPOOL, 0, 0, pagesize);
cout << "retrieve " << hits << " random pages... ";
srand((unsigned int)time(NULL));
for (cnt = 0; cnt < hits; ++cnt) {
pageno = (rand() % npages) + 1;
- if ((errno = dbmfp->get(&pageno, 0, &p)) != 0) {
+ if ((ret = mfp->get(&pageno, 0, &p)) != 0) {
cerr << "MpoolExample: unable to retrieve page "
<< (unsigned long)pageno << ": "
- << strerror(errno) << "\n";
- exit(1);
+ << strerror(ret) << "\n";
+ return (EXIT_FAILURE);
}
if (*(db_pgno_t *)p != pageno) {
cerr << "MpoolExample: wrong page retrieved ("
<< (unsigned long)pageno << " != "
<< *(int *)p << ")\n";
- exit(1);
+ return (EXIT_FAILURE);
}
- if ((errno = dbmfp->put(p, 0)) != 0) {
+ if ((ret = mfp->put(p, 0)) != 0) {
cerr << "MpoolExample: unable to return page "
<< (unsigned long)pageno << ": "
- << strerror(errno) << "\n";
- exit(1);
+ << strerror(ret) << "\n";
+ return (EXIT_FAILURE);
}
}
cout << "successful.\n";
// Close the pool.
- if ((errno = close(0)) != 0) {
- cerr << "MpoolExample: " << strerror(errno) << "\n";
- exit(1);
+ if ((ret = close(0)) != 0) {
+ cerr << "MpoolExample: " << strerror(ret) << "\n";
+ return (EXIT_FAILURE);
}
+ return (EXIT_SUCCESS);
}
diff --git a/db/examples_cxx/TpcbExample.cpp b/db/examples_cxx/TpcbExample.cpp
index f4ca72df8..2ddcdb501 100644
--- a/db/examples_cxx/TpcbExample.cpp
+++ b/db/examples_cxx/TpcbExample.cpp
@@ -1,54 +1,35 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: TpcbExample.cpp,v 11.14 2000/10/27 20:32:01 dda Exp $
+ * $Id: TpcbExample.cpp,v 11.32 2003/04/24 15:46:05 bostic Exp $
*/
-#include "db_config.h"
-
-#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#if TIME_WITH_SYS_TIME
-#include <sys/time.h>
-#include <time.h>
-#else
-#if HAVE_SYS_TIME_H
-#include <sys/time.h>
-#else
-#include <time.h>
-#endif
-#endif
-
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
-#endif
-
-#ifdef DB_WIN32
-#include <sys/types.h>
-#include <sys/timeb.h>
-#endif
+#include <time.h>
-#include <iostream.h>
-#include <iomanip.h>
+#include <iostream>
+#include <iomanip>
#include <db_cxx.h>
-typedef enum { ACCOUNT, BRANCH, TELLER } FTYPE;
+using std::cout;
+using std::cerr;
-void errExit(int err, const char *); // show err as errno and exit
+typedef enum { ACCOUNT, BRANCH, TELLER } FTYPE;
-void invarg(int, char *);
+static int invarg(int, char *);
u_int32_t random_id(FTYPE, u_int32_t, u_int32_t, u_int32_t);
u_int32_t random_int(u_int32_t, u_int32_t);
-static void usage(void);
+static int usage(void);
int verbose;
-char *progname = "TpcbExample"; // Program name.
+const char *progname = "TpcbExample"; // Program name.
class TpcbExample : public DbEnv
{
@@ -58,7 +39,7 @@ public:
int txn(Db *, Db *, Db *, Db *,
int, int, int);
void populateHistory(Db *, int, u_int32_t, u_int32_t, u_int32_t);
- void populateTable(Db *, u_int32_t, u_int32_t, int, char *);
+ void populateTable(Db *, u_int32_t, u_int32_t, int, const char *);
// Note: the constructor creates a DbEnv(), which is
// not fully initialized until the DbEnv::open() method
@@ -139,7 +120,8 @@ main(int argc, char *argv[])
unsigned long seed;
int accounts, branches, tellers, history;
int iflag, mpool, ntxns, txn_no_sync;
- char *home, *endarg;
+ const char *home;
+ char *endarg;
home = "TESTDIR";
accounts = branches = history = tellers = 0;
@@ -147,24 +129,24 @@ main(int argc, char *argv[])
mpool = ntxns = 0;
verbose = 0;
iflag = 0;
- seed = (unsigned long)getpid();
+ seed = (unsigned long)time(NULL);
for (int i = 1; i < argc; ++i) {
if (strcmp(argv[i], "-a") == 0) {
// Number of account records
if ((accounts = atoi(argv[++i])) <= 0)
- invarg('a', argv[i]);
+ return (invarg('a', argv[i]));
}
else if (strcmp(argv[i], "-b") == 0) {
// Number of branch records
if ((branches = atoi(argv[++i])) <= 0)
- invarg('b', argv[i]);
+ return (invarg('b', argv[i]));
}
else if (strcmp(argv[i], "-c") == 0) {
// Cachesize in bytes
if ((mpool = atoi(argv[++i])) <= 0)
- invarg('c', argv[i]);
+ return (invarg('c', argv[i]));
}
else if (strcmp(argv[i], "-f") == 0) {
// Fast mode: no txn sync.
@@ -181,30 +163,30 @@ main(int argc, char *argv[])
else if (strcmp(argv[i], "-n") == 0) {
// Number of transactions
if ((ntxns = atoi(argv[++i])) <= 0)
- invarg('n', argv[i]);
+ return (invarg('n', argv[i]));
}
else if (strcmp(argv[i], "-S") == 0) {
// Random number seed.
seed = strtoul(argv[++i], &endarg, 0);
if (*endarg != '\0')
- invarg('S', argv[i]);
+ return (invarg('S', argv[i]));
}
else if (strcmp(argv[i], "-s") == 0) {
// Number of history records
if ((history = atoi(argv[++i])) <= 0)
- invarg('s', argv[i]);
+ return (invarg('s', argv[i]));
}
else if (strcmp(argv[i], "-t") == 0) {
// Number of teller records
if ((tellers = atoi(argv[++i])) <= 0)
- invarg('t', argv[i]);
+ return (invarg('t', argv[i]));
}
else if (strcmp(argv[i], "-v") == 0) {
// Verbose option.
verbose = 1;
}
else {
- usage();
+ return (usage());
}
}
@@ -216,9 +198,9 @@ main(int argc, char *argv[])
history = history == 0 ? HISTORY : history;
if (verbose)
- cout << (long)accounts << " Accounts "
- << (long)branches << " Branches "
- << (long)tellers << " Tellers "
+ cout << (long)accounts << " Accounts, "
+ << (long)branches << " Branches, "
+ << (long)tellers << " Tellers, "
<< (long)history << " History\n";
try {
@@ -226,43 +208,44 @@ main(int argc, char *argv[])
// Must be done in within a try block, unless you
// change the error model in the environment options.
//
- TpcbExample app(home, mpool, iflag, txn_no_sync ? DB_TXN_NOSYNC : 0);
+ TpcbExample app(home, mpool, iflag,
+ txn_no_sync ? DB_TXN_NOSYNC : 0);
if (iflag) {
if (ntxns != 0)
- usage();
+ return (usage());
app.populate(accounts, branches, history, tellers);
}
else {
if (ntxns == 0)
- usage();
+ return (usage());
app.run(ntxns, accounts, branches, tellers);
}
app.close(0);
- return 0;
+ return (EXIT_SUCCESS);
}
catch (DbException &dbe) {
cerr << "TpcbExample: " << dbe.what() << "\n";
- return 1;
+ return (EXIT_FAILURE);
}
}
-void
+static int
invarg(int arg, char *str)
{
cerr << "TpcbExample: invalid argument for -"
<< (char)arg << ": " << str << "\n";
- exit(1);
+ return (EXIT_FAILURE);
}
-static void
+static int
usage()
{
cerr << "usage: TpcbExample [-fiv] [-a accounts] [-b branches]\n"
<< " [-c cachesize] [-h home] [-n transactions ]\n"
<< " [-S seed] [-s history] [-t tellers]\n";
- exit(1);
+ return (EXIT_FAILURE);
}
TpcbExample::TpcbExample(const char *home, int cachesize,
@@ -276,6 +259,10 @@ TpcbExample::TpcbExample(const char *home, int cachesize,
(void)set_cachesize(0, cachesize == 0 ?
4 * 1024 * 1024 : (u_int32_t)cachesize, 0);
+ if (flags & (DB_TXN_NOSYNC))
+ set_flags(DB_TXN_NOSYNC, 1);
+ flags &= ~(DB_TXN_NOSYNC);
+
local_flags = flags | DB_CREATE | DB_INIT_MPOOL;
if (!initializing)
local_flags |= DB_INIT_TXN | DB_INIT_LOCK | DB_INIT_LOG;
@@ -302,9 +289,10 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp = new Db(this, 0);
dbp->set_h_nelem((unsigned int)accounts);
- if ((err = dbp->open("account", NULL, DB_HASH,
+ if ((err = dbp->open(NULL, "account", NULL, DB_HASH,
DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
- errExit(err, "Open of account file failed");
+ DbException except("Account file create failed", err);
+ throw except;
}
start_anum = idnum;
@@ -312,7 +300,8 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
idnum += accounts;
end_anum = idnum - 1;
if ((err = dbp->close(0)) != 0) {
- errExit(err, "Account file close failed");
+ DbException except("Account file close failed", err);
+ throw except;
}
delete dbp;
if (verbose)
@@ -329,16 +318,18 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp->set_h_nelem((unsigned int)branches);
dbp->set_pagesize(512);
- if ((err = dbp->open("branch", NULL, DB_HASH,
+ if ((err = dbp->open(NULL, "branch", NULL, DB_HASH,
DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
- errExit(err, "Branch file create failed");
+ DbException except("Branch file create failed", err);
+ throw except;
}
start_bnum = idnum;
populateTable(dbp, idnum, balance, branches, "branch");
idnum += branches;
end_bnum = idnum - 1;
if ((err = dbp->close(0)) != 0) {
- errExit(err, "Close of branch file failed");
+ DbException except("Close of branch file failed", err);
+ throw except;
}
delete dbp;
@@ -355,9 +346,10 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp->set_h_nelem((unsigned int)tellers);
dbp->set_pagesize(512);
- if ((err = dbp->open("teller", NULL, DB_HASH,
+ if ((err = dbp->open(NULL, "teller", NULL, DB_HASH,
DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
- errExit(err, "Teller file create failed");
+ DbException except("Teller file create failed", err);
+ throw except;
}
start_tnum = idnum;
@@ -365,7 +357,8 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
idnum += tellers;
end_tnum = idnum - 1;
if ((err = dbp->close(0)) != 0) {
- errExit(err, "Close of teller file failed");
+ DbException except("Close of teller file failed", err);
+ throw except;
}
delete dbp;
if (verbose)
@@ -374,14 +367,16 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
dbp = new Db(this, 0);
dbp->set_re_len(HISTORY_LEN);
- if ((err = dbp->open("history", NULL, DB_RECNO,
+ if ((err = dbp->open(NULL, "history", NULL, DB_RECNO,
DB_CREATE | DB_TRUNCATE, 0644)) != 0) {
- errExit(err, "Create of history file failed");
+ DbException except("Create of history file failed", err);
+ throw except;
}
populateHistory(dbp, history, accounts, branches, tellers);
if ((err = dbp->close(0)) != 0) {
- errExit(err, "Close of history file failed");
+ DbException except("Close of history file failed", err);
+ throw except;
}
delete dbp;
}
@@ -389,7 +384,7 @@ TpcbExample::populate(int accounts, int branches, int history, int tellers)
void
TpcbExample::populateTable(Db *dbp,
u_int32_t start_id, u_int32_t balance,
- int nrecs, char *msg)
+ int nrecs, const char *msg)
{
Defrec drec;
memset(&drec.pad[0], 1, sizeof(drec.pad));
@@ -405,14 +400,15 @@ TpcbExample::populateTable(Db *dbp,
dbp->put(NULL, &kdbt, &ddbt, DB_NOOVERWRITE)) != 0) {
cerr << "Failure initializing " << msg << " file: "
<< strerror(err) << "\n";
- exit(1);
+ DbException except("failure initializing file", err);
+ throw except;
}
}
}
void
-TpcbExample::populateHistory(Db *dbp, int nrecs,
- u_int32_t accounts, u_int32_t branches, u_int32_t tellers)
+TpcbExample::populateHistory(Db *dbp, int nrecs, u_int32_t accounts,
+ u_int32_t branches, u_int32_t tellers)
{
Histrec hrec;
memset(&hrec.pad[0], 1, sizeof(hrec.pad));
@@ -430,7 +426,9 @@ TpcbExample::populateHistory(Db *dbp, int nrecs,
int err;
key = (db_recno_t)i;
if ((err = dbp->put(NULL, &kdbt, &ddbt, DB_APPEND)) != 0) {
- errExit(err, "Failure initializing history file");
+ DbException except("failure initializing history file",
+ err);
+ throw except;
}
}
}
@@ -455,7 +453,7 @@ random_id(FTYPE type, u_int32_t accounts, u_int32_t branches, u_int32_t tellers)
max = min = BEGID;
num = accounts;
- switch(type) {
+ switch (type) {
case TELLER:
min += branches;
num = tellers;
@@ -478,15 +476,6 @@ TpcbExample::run(int n, int accounts, int branches, int tellers)
double gtps, itps;
int failed, ifailed, ret, txns;
time_t starttime, curtime, lasttime;
-#ifndef DB_WIN32
- pid_t pid;
-
- pid = getpid();
-#else
- int pid;
-
- pid = 0;
-#endif
//
// Open the database files.
@@ -494,20 +483,32 @@ TpcbExample::run(int n, int accounts, int branches, int tellers)
int err;
adb = new Db(this, 0);
- if ((err = adb->open("account", NULL, DB_UNKNOWN, 0, 0)) != 0)
- errExit(err, "Open of account file failed");
+ if ((err = adb->open(NULL, "account", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ DbException except("Open of account file failed", err);
+ throw except;
+ }
bdb = new Db(this, 0);
- if ((err = bdb->open("branch", NULL, DB_UNKNOWN, 0, 0)) != 0)
- errExit(err, "Open of branch file failed");
+ if ((err = bdb->open(NULL, "branch", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ DbException except("Open of branch file failed", err);
+ throw except;
+ }
tdb = new Db(this, 0);
- if ((err = tdb->open("teller", NULL, DB_UNKNOWN, 0, 0)) != 0)
- errExit(err, "Open of teller file failed");
+ if ((err = tdb->open(NULL, "teller", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ DbException except("Open of teller file failed", err);
+ throw except;
+ }
hdb = new Db(this, 0);
- if ((err = hdb->open("history", NULL, DB_UNKNOWN, 0, 0)) != 0)
- errExit(err, "Open of history file failed");
+ if ((err = hdb->open(NULL, "history", NULL, DB_UNKNOWN,
+ DB_AUTO_COMMIT, 0)) != 0) {
+ DbException except("Open of history file failed", err);
+ throw except;
+ }
txns = failed = ifailed = 0;
starttime = time(NULL);
@@ -527,10 +528,9 @@ TpcbExample::run(int n, int accounts, int branches, int tellers)
// We use printf because it provides much simpler
// formatting than iostreams.
//
- printf("[%d] %d txns %d failed ", (int)pid,
- txns, failed);
+ printf("%d txns %d failed ", txns, failed);
printf("%6.2f TPS (gross) %6.2f TPS (interval)\n",
- gtps, itps);
+ gtps, itps);
lasttime = curtime;
ifailed = 0;
}
@@ -560,7 +560,7 @@ TpcbExample::txn(Db *adb, Db *bdb, Db *tdb, Db *hdb,
db_recno_t key;
Defrec rec;
Histrec hrec;
- int account, branch, teller;
+ int account, branch, teller, ret;
Dbt d_dbt;
Dbt d_histdbt;
@@ -628,11 +628,12 @@ TpcbExample::txn(Db *adb, Db *bdb, Db *tdb, Db *hdb,
if (hdb->put(t, &k_histdbt, &d_histdbt, DB_APPEND) != 0)
goto err;
- if (acurs->close() != 0 || bcurs->close() != 0 ||
- tcurs->close() != 0)
+ if (acurs->close() != 0 || bcurs->close() != 0 || tcurs->close() != 0)
goto err;
- if (t->commit(0) != 0)
+ ret = t->commit(0);
+ t = NULL;
+ if (ret != 0)
goto err;
// END TIMING
@@ -654,13 +655,3 @@ err:
<< " T=" << (long)teller << " failed\n";
return (-1);
}
-
-void errExit(int err, const char *s)
-{
- cerr << progname << ": ";
- if (s != NULL) {
- cerr << s << ": ";
- }
- cerr << strerror(err) << "\n";
- exit(1);
-}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/access/AccessExample.java b/db/examples_java/src/com/sleepycat/examples/bdb/access/AccessExample.java
new file mode 100644
index 000000000..2b3e77c5d
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/access/AccessExample.java
@@ -0,0 +1,283 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: AccessExample.java,v 1.1 2003/12/15 21:44:09 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.access;
+
+import java.lang.*;
+import java.io.*;
+import java.util.*;
+import com.sleepycat.db.*;
+import com.sleepycat.bdb.*;
+import com.sleepycat.bdb.bind.*;
+import com.sleepycat.bdb.collection.*;
+
+/**
+ * AccesssExample mirrors the functionality of a class by the same name
+ * used to demonstrate the com.sleepycat.db Java API. This version makes
+ * use of the new com.sleepycat.bdb.* collections style classes to make
+ * life easier.
+ *
+ *@author Gregory Burd <gburd@sleepycat.com>
+ *@created October 22, 2002
+ */
+public class AccessExample
+ implements Runnable {
+
+ // Class Variables of AccessExample class
+ private static boolean create = true;
+ private static final int EXIT_SUCCESS = 0;
+ private static final int EXIT_FAILURE = 1;
+
+ public static void usage() {
+
+ System.out.println("usage: java " +
+ "com.sleepycat.examples.bdb.access.AccessExample [-r] [database]\n");
+ System.exit(EXIT_FAILURE);
+ }
+
+ /**
+ * The main program for the AccessExample class
+ *
+ *@param argv The command line arguments
+ */
+ public static void main(String[] argv) {
+
+ boolean removeExistingDatabase = false;
+ String databaseName = "access.db";
+
+ for (int i = 0; i < argv.length; i++) {
+ if (argv[i].equals("-r")) {
+ removeExistingDatabase = true;
+ } else if (argv[i].equals("-?")) {
+ usage();
+ } else if (argv[i].startsWith("-")) {
+ usage();
+ } else {
+ if ((argv.length - i) != 1)
+ usage();
+ databaseName = argv[i];
+ break;
+ }
+ }
+
+
+ try {
+ // Remove the previous database.
+ if (removeExistingDatabase)
+ new File(databaseName).delete();
+
+ // don't run recovery if we just deleteeted the database if it
+ // existed.
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL;
+ if (create) {
+ envFlags |= Db.DB_CREATE;
+ }
+ if (!removeExistingDatabase) {
+ envFlags |= Db.DB_RECOVER;
+ }
+ DbEnv env = new DbEnv(0);
+ env.open(".", envFlags, 0);
+
+ // create the app and run it
+ AccessExample app = new AccessExample(env, databaseName);
+ app.run();
+ } catch (DbException e) {
+ System.err.println("AccessExample: " + e.toString());
+ System.exit(1);
+ } catch (FileNotFoundException e) {
+ System.err.println("AccessExample: " + e.toString());
+ System.exit(1);
+ } catch (Exception e) {
+ System.err.println("AccessExample: " + e.toString());
+ System.exit(1);
+ }
+ System.exit(0);
+ }
+
+
+ private DataStore store;
+ private SortedMap map;
+ private DbEnv env;
+
+
+ /**
+ * Constructor for the AccessExample object
+ *
+ *@param env Description of the Parameter
+ *@exception Exception Description of the Exception
+ */
+ public AccessExample(DbEnv env, String databaseName)
+ throws Exception {
+
+ this.env = env;
+
+ //
+ // Lets mimic the com.sleepycat.db.AccessExample 100%
+ // and use plain old byte arrays to store the key strings.
+ //
+ ByteArrayFormat keyFormat = new ByteArrayFormat();
+ ByteArrayBinding keyBinding = new ByteArrayBinding(keyFormat);
+
+ //
+ // Lets mimic the com.sleepycat.db.AccessExample 100%
+ // and use plain old byte arrays to store the value strings.
+ //
+ ByteArrayFormat valueFormat = new ByteArrayFormat();
+ ByteArrayBinding valueBinding = new ByteArrayBinding(valueFormat);
+
+ //
+ // Open a BTREE (sorted) data store.
+ //
+ int dbFlags = Db.DB_AUTO_COMMIT;
+ if (create) {
+ dbFlags |= Db.DB_CREATE;
+ }
+ Db db = new Db(env, 0);
+ db.open(null, databaseName, null, Db.DB_BTREE, dbFlags, 0);
+ this.store = new DataStore(db, keyFormat, valueFormat, null);
+
+ //
+ // Now create a collection style map view of the data store
+ // so that it is easy to work with the data in the database.
+ //
+ this.map = new StoredSortedMap(store, keyBinding, valueBinding, true);
+ }
+
+
+ /**
+ * Main processing method for the AccessExample object
+ */
+ public void run() {
+ //
+ // Insert records into a Stored Sorted Map Database, where
+ // the key is the user input and the data is the user input
+ // in reverse order.
+ //
+ final InputStreamReader reader = new InputStreamReader(System.in);
+
+ for (; ; ) {
+ final String line = askForLine(reader, System.out, "input> ");
+ if (line == null) {
+ break;
+ }
+
+ final String reversed =
+ (new StringBuffer(line)).reverse().toString();
+
+ log("adding: \"" +
+ line + "\" : \"" +
+ reversed + "\"");
+
+ // Do the work to add the key/value to the HashMap here.
+ TransactionRunner tr = new TransactionRunner(env);
+ try {
+ tr.run(
+ new TransactionWorker() {
+ public void doWork() {
+ if (!map.containsKey(line.getBytes()))
+ map.put(line.getBytes(), reversed.getBytes());
+ else
+ System.out.println("Key " + line +
+ " already exists.");
+ }
+ });
+ } catch (com.sleepycat.db.DbException e) {
+ System.err.println("AccessExample: " + e.toString());
+ System.exit(1);
+ } catch (java.lang.Exception e) {
+ System.err.println("AccessExample: " + e.toString());
+ System.exit(1);
+ }
+ }
+ System.out.println("");
+
+ // Do the work to traverse and print the HashMap key/data
+ // pairs here get iterator over map entries.
+ Iterator iter = map.entrySet().iterator();
+ try {
+ System.out.println("Reading data");
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ log("found \"" +
+ new String((byte[]) entry.getKey()) +
+ "\" key with value \"" +
+ new String((byte[]) entry.getValue()) + "\"");
+ }
+ } finally {
+ // Ensure that all database iterators are closed. This is very
+ // important.
+ StoredIterator.close(iter);
+ }
+ }
+
+
+ /**
+ * Prompts for a line, and keeps prompting until a non blank line is
+ * returned. Returns null on error.
+ *
+ *@param reader stream from which to read user input
+ *@param out stream on which to prompt for user input
+ *@param prompt prompt to use to solicit input
+ *@return the string supplied by the user
+ */
+ String askForLine(InputStreamReader reader, PrintStream out,
+ String prompt) {
+
+ String result = "";
+ while (result != null && result.length() == 0) {
+ out.print(prompt);
+ out.flush();
+ result = getLine(reader);
+ }
+ return result;
+ }
+
+
+ /**
+ * Read a single line. Gets the line attribute of the AccessExample object
+ * Not terribly efficient, but does the job. Works for reading a line from
+ * stdin or a file.
+ *
+ *@param reader stream from which to read the line
+ *@return either a String or null on EOF, if EOF appears in the
+ * middle of a line, returns that line, then null on next call.
+ */
+ String getLine(InputStreamReader reader) {
+
+ StringBuffer b = new StringBuffer();
+ int c;
+ try {
+ while ((c = reader.read()) != -1 && c != '\n') {
+ if (c != '\r') {
+ b.append((char) c);
+ }
+ }
+ } catch (IOException ioe) {
+ c = -1;
+ }
+
+ if (c == -1 && b.length() == 0) {
+ return null;
+ } else {
+ return b.toString();
+ }
+ }
+
+
+ /**
+ * A simple log method.
+ *
+ *@param s The string to be logged.
+ */
+ private void log(String s) {
+
+ System.out.println(s);
+ System.out.flush();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/access/index.html b/db/examples_java/src/com/sleepycat/examples/bdb/access/index.html
new file mode 100644
index 000000000..deeb07347
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/access/index.html
@@ -0,0 +1,21 @@
+<!-- $Id: index.html,v 1.1 2003/12/15 21:44:09 jbj Exp $ -->
+<html>
+<head><title>Access Sample</title></head>
+<body>
+
+<h2>Access Sample</h2>
+
+<p>This sample demonstrates a minimal program that uses the BDB API of
+Berkeley DB.</p>
+
+<p>This example tries to mirror exactly the AccessExample using the old
+API and found implemented for each of the other APIs (C and C++). By
+taking a look at the differences between this implementation and the
+one found in <code>../../db/AccessExample.java</code> you can start to
+see some of the advantages of using the BDB API.
+
+<p>See <a href="../index.html">samples/db/index.html</a> for information
+on how to compile and run the samples.</p>
+
+</body>
+</html>
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/.cvsignore b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/.cvsignore
new file mode 100644
index 000000000..76d489046
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/.cvsignore
@@ -0,0 +1,2 @@
+HelloDatabaseWorld.class
+tmp
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/HelloDatabaseWorld.java b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/HelloDatabaseWorld.java
new file mode 100644
index 000000000..a19c82a47
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/HelloDatabaseWorld.java
@@ -0,0 +1,159 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: HelloDatabaseWorld.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.helloworld;
+
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.StoredClassCatalog;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.SortedMap;
+
+/**
+ * @author Mark Hayes
+ */
+public class HelloDatabaseWorld implements TransactionWorker {
+
+ private static final String[] INT_NAMES = {
+ "Hello", "Database", "World",
+ };
+ private static boolean create = true;
+
+ private DbEnv env;
+ private ClassCatalog catalog;
+ private DataStore store;
+ private SortedMap map;
+
+ /** Creates the environment and runs a transaction */
+ public static void main(String[] argv)
+ throws Exception {
+
+ String dir = "./tmp";
+
+ // environment is transactional
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL;
+ if (create)
+ envFlags |= Db.DB_CREATE;
+ DbEnv env = new DbEnv(0);
+ env.open(dir, envFlags, 0);
+
+ // create the application and run a transaction
+ HelloDatabaseWorld worker = new HelloDatabaseWorld(env);
+ TransactionRunner runner = new TransactionRunner(env);
+ try {
+ // open and access the database within a transaction
+ runner.run(worker);
+ } finally {
+ // close the database outside the transaction
+ worker.close();
+ }
+ }
+
+ /** Creates the data store for this application */
+ private HelloDatabaseWorld(DbEnv env)
+ throws Exception {
+
+ this.env = env;
+ open();
+ }
+
+ /** Performs work within a transaction. */
+ public void doWork()
+ throws Exception {
+
+ writeAndRead();
+ }
+
+ /** Opens the database and creates the Map. */
+ private void open()
+ throws Exception {
+
+ int dbFlags = Db.DB_AUTO_COMMIT;
+ if (create)
+ dbFlags |= Db.DB_CREATE;
+
+ // catalog is needed for serial data format (java serialization)
+ catalog = new StoredClassCatalog(env, "catalog.db", null, dbFlags);
+
+ // use Integer tuple format and binding for keys
+ TupleFormat keyFormat = new TupleFormat();
+ TupleBinding keyBinding =
+ TupleBinding.getPrimitiveBinding(Integer.class, keyFormat);
+
+ // use String serial format and binding for values
+ SerialFormat valueFormat =
+ new SerialFormat(catalog, String.class);
+ SerialBinding valueBinding = new SerialBinding(valueFormat);
+
+ // open a BTREE (sorted) data store
+ Db db = new Db(env, 0);
+ db.open(null, "data.db", null, Db.DB_BTREE, dbFlags, 0);
+ this.store = new DataStore(db, keyFormat, valueFormat, null);
+
+ // create a map view of the data store
+ this.map = new StoredSortedMap(store, keyBinding, valueBinding, true);
+ }
+
+ /** Closes the database. */
+ private void close()
+ throws Exception {
+
+ if (catalog != null) {
+ catalog.close();
+ catalog = null;
+ }
+ if (store != null) {
+ store.close();
+ store = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ }
+
+ /** Writes and reads the database via the Map. */
+ private void writeAndRead() {
+
+ // check for existing data
+ Integer key = new Integer(0);
+ String val = (String) map.get(key);
+ if (val == null) {
+ System.out.println("Writing data");
+ // write in reverse order to show that keys are sorted
+ for (int i = INT_NAMES.length - 1; i >= 0; i -= 1) {
+ map.put(new Integer(i), INT_NAMES[i]);
+ }
+ }
+ // get iterator over map entries
+ Iterator iter = map.entrySet().iterator();
+ try {
+ System.out.println("Reading data");
+ while (iter.hasNext()) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ System.out.println(entry.getKey().toString() + ' ' +
+ entry.getValue());
+ }
+ } finally {
+ // all database iterators must be closed!!
+ StoredIterator.close(iter);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/index.html b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/index.html
new file mode 100644
index 000000000..c5b4eec6e
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/helloworld/index.html
@@ -0,0 +1,37 @@
+<!-- $Id: index.html,v 1.1 2003/12/15 21:44:10 jbj Exp $ -->
+<html>
+<head><title>HelloDatabaseWorld Sample</title></head>
+<body>
+
+<h2>HelloDatabaseWorld Sample</h2>
+
+<p>This sample demonstrates a minimal program that uses the BDB API of
+Berkeley DB.</p>
+
+<p>See <a href="../index.html">samples/db/index.html</a> for information
+on how to compile and run the samples.</p>
+
+<p>In this example a single data store is created in a transactional
+environment using one form of the DataStore and DataEnvironment constructors.
+This is a good starting point, but as you need more control over
+the environment and data store you will probably want to create the Berkeley
+DB <code>Db</code> and <code>DbEnv</code> objects yourself and pass these to
+the DataStore and DataEnvironment constructors.</p>
+
+<p>A tuple format and binding are used for the record keys because tuples are
+very compact and are sorted deterministically. Numbers are sorted in
+ascending numerical order and strings are sorted in byte value (UTF byte)
+order. If you need a tuple key with more than one field, for example a key
+containing two integers or an integer and a string, then you will have to
+define the binding yourself by extending the TupleBinding class. Multi-field
+tuples are sorted by the first field, then the second field, and so on.</p>
+
+<p>A serial format and binding are used for the record values because serial
+bindings are very easy to use and they support arbitrary Java objects. If you
+are concerned about data size and your record values will always be strings or
+some other simple data format, or if you intend to read the database from
+programs implemented in languages other than Java, then you should use a tuple
+format instead of a serial format for the record values.</p>
+
+</body>
+</html>
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/index.html b/db/examples_java/src/com/sleepycat/examples/bdb/index.html
new file mode 100644
index 000000000..08fbc8609
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/index.html
@@ -0,0 +1,54 @@
+<!-- $Id: index.html,v 1.1 2003/12/15 21:44:09 jbj Exp $ -->
+<html>
+<head><title>Examples using the BDB API of Berkeley DB</title>
+</head>
+<body>
+
+<ul>
+<li>The <a href="helloworld/index.html">helloworld sample</a>
+demonstrates a minimal program that uses BDB API of Berkeley DB.</li>
+<li>The <a href="shipment/index.html">shipment sample programs</a>
+illustrate the use of BDB API of Berkeley DB with a shipment database, a familiar example
+from classic database texts.</li>
+</ul>
+
+<h2>Running the Sample Programs</h2>
+
+<p>To run a sample you must change to the sample directory containing the
+source files and your classpath must include the current directory (.),
+and db.jar. See the top-level reference guide for installation
+instructions.</p>
+
+<p>For example:<p/>
+
+<pre>
+$ cd samples/db/helloworld
+$ javac -g *.java
+$ mkdir tmp
+$ java HelloDatabaseWorld
+</pre>
+
+<p>If a compilation error or exception occurs, check your installation.</p>
+
+<p>The 'tmp' subdirectory is used to store the Berkeley DB environment and
+database files. If the database files are missing or empty then the sample
+program will write the sample data; otherwise, it will only read and print the
+existing data. To force the sample to write the data, delete the 'tmp'
+subdirectory before running the sample.</p>
+
+<p>If you are interested on examining the database files you can use the
+supplied standard db_* DB command line utility programs with the database
+files in the 'tmp' subdirectory.</p>
+
+<pre>
+$ cd samples/db/helloworld
+$ db_dump -h tmp data.db
+</pre>
+
+<p>Will dump the binary contents of the helloworld data store.</p>
+
+<p>For more information on each sample see the README.txt file in the sample
+directory and the sample source code.</p>
+
+</body>
+</html>
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartKey.java
new file mode 100644
index 000000000..655d904b8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is used both as the storage data for the key as
+ * well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements Serializable {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartValue.java
new file mode 100644
index 000000000..4952016e8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/PartValue.java
@@ -0,0 +1,65 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A PartValue serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartValue is used both as the storage data for the value
+ * as well as the object binding to the value. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartValue implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartValue(String name, String color, Weight weight, String city) {
+
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[PartValue: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Sample.java
new file mode 100644
index 000000000..dfcd683fa
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Sample.java
@@ -0,0 +1,278 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.basic.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. The home directory must exist
+ * before running the sample. To recreate the sample database from scratch,
+ * delete all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed.
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printEntries("Parts",
+ views.getPartEntrySet().iterator());
+ printEntries("Suppliers",
+ views.getSupplierEntrySet().iterator());
+ printEntries("Shipments",
+ views.getShipmentEntrySet().iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part map is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Map parts = views.getPartMap();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.put(new PartKey("P1"),
+ new PartValue("Nut", "Red",
+ new Weight(12.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P2"),
+ new PartValue("Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P3"),
+ new PartValue("Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS),
+ "Rome"));
+ parts.put(new PartKey("P4"),
+ new PartValue("Screw", "Red",
+ new Weight(14.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P5"),
+ new PartValue("Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P6"),
+ new PartValue("Cog", "Red",
+ new Weight(19.0, Weight.GRAMS),
+ "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier map is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Map suppliers = views.getSupplierMap();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.put(new SupplierKey("S1"),
+ new SupplierValue("Smith", 20, "London"));
+ suppliers.put(new SupplierKey("S2"),
+ new SupplierValue("Jones", 10, "Paris"));
+ suppliers.put(new SupplierKey("S3"),
+ new SupplierValue("Blake", 30, "Paris"));
+ suppliers.put(new SupplierKey("S4"),
+ new SupplierValue("Clark", 20, "London"));
+ suppliers.put(new SupplierKey("S5"),
+ new SupplierValue("Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment map
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Map shipments = views.getShipmentMap();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.put(new ShipmentKey("P1", "S1"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P3", "S1"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P4", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P5", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P6", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P1", "S2"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S2"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P2", "S3"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P2", "S4"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P4", "S4"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P5", "S4"),
+ new ShipmentValue(400));
+ }
+ }
+
+ /**
+ * Print the key/value objects returned by an iterator of Map.Entry
+ * objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printEntries(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ System.out.println(entry.getKey().toString());
+ System.out.println(entry.getValue().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleDatabase.java
new file mode 100644
index 000000000..2e22e61e7
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleDatabase.java
@@ -0,0 +1,199 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private StoredClassCatalog javaCatalog;
+ private SerialFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private SerialFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private SerialFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the Berkeley DB flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all formats are
+ // SerialFormat.
+ //
+ partKeyFormat = new SerialFormat(javaCatalog, PartKey.class);
+ partValueFormat = new SerialFormat(javaCatalog, PartValue.class);
+ supplierKeyFormat = new SerialFormat(javaCatalog, SupplierKey.class);
+ supplierValueFormat =
+ new SerialFormat(javaCatalog, SupplierValue.class);
+ shipmentKeyFormat = new SerialFormat(javaCatalog, ShipmentKey.class);
+ shipmentValueFormat =
+ new SerialFormat(javaCatalog, ShipmentValue.class);
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. Although the DB_BTREE method
+ // provides ordered keys, the ordering of serialized key objects
+ // is not very useful. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat, partValueFormat,
+ null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final SerialFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final SerialFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final SerialFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleViews.java
new file mode 100644
index 000000000..c370b13e2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SampleViews.java
@@ -0,0 +1,122 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.collection.StoredEntrySet;
+import com.sleepycat.bdb.collection.StoredMap;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredMap partMap;
+ private StoredMap supplierMap;
+ private StoredMap shipmentMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, the stored keys and values are used directly rather
+ // than mapping them to separate objects. Therefore, no binding classes
+ // are defined here and the SerialBinding class is used.
+ //
+ DataBinding partKeyBinding =
+ new SerialBinding(db.getPartKeyFormat());
+ DataBinding partValueBinding =
+ new SerialBinding(db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+ new SerialBinding(db.getSupplierKeyFormat());
+ DataBinding supplierValueBinding =
+ new SerialBinding(db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+ new SerialBinding(db.getShipmentKeyFormat());
+ DataBinding shipmentValueBinding =
+ new SerialBinding(db.getShipmentValueFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is not used since the stores and indices are
+ // ordered by serialized key objects, which do not provide a very
+ // useful ordering.
+ //
+ partMap =
+ new StoredMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredEntrySet
+ // classes, which provide additional methods. The entry sets could be
+ // obtained directly from the Map.entrySet() method, but convenience
+ // methods are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public final StoredMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public final StoredMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public final StoredMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entry set view of the part storage container.
+ */
+ public final StoredEntrySet getPartEntrySet() {
+
+ return (StoredEntrySet) partMap.entrySet();
+ }
+
+ /**
+ * Return an entry set view of the supplier storage container.
+ */
+ public final StoredEntrySet getSupplierEntrySet() {
+
+ return (StoredEntrySet) supplierMap.entrySet();
+ }
+
+ /**
+ * Return an entry set view of the shipment storage container.
+ */
+ public final StoredEntrySet getShipmentEntrySet() {
+
+ return (StoredEntrySet) shipmentMap.entrySet();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentKey.java
new file mode 100644
index 000000000..566285cf2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements Serializable {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentValue.java
new file mode 100644
index 000000000..6e1409d75
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/ShipmentValue.java
@@ -0,0 +1,42 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentValue serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentValue is used both as the storage data for the
+ * value as well as the object binding to the value. Because it is used
+ * directly as storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentValue implements Serializable {
+
+ private int quantity;
+
+ public ShipmentValue(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentValue: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierKey.java
new file mode 100644
index 000000000..0e6aee35a
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements Serializable {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierValue.java
new file mode 100644
index 000000000..ecc9c7d01
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/SupplierValue.java
@@ -0,0 +1,58 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierValue serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierValue is used both as the storage data for the
+ * value as well as the object binding to the value. Because it is used
+ * directly as storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierValue implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierValue(String name, int status, String city) {
+
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[SupplierValue: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Weight.java
new file mode 100644
index 000000000..26e79c477
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/basic/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.basic;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Serial serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Part.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Part.java
new file mode 100644
index 000000000..0c93b60a5
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Part.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Part.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+/**
+ * A Part represents the combined key/value pair for a part entity.
+ *
+ * <p> In this sample, Part is created from the stored key/value data using a
+ * SerialSerialBinding. See {@link SampleViews.PartBinding} for details. Since
+ * this class is not used directly for data storage, it does not need to be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Part {
+
+ private String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public Part(String number, String name, String color, Weight weight,
+ String city) {
+
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartKey.java
new file mode 100644
index 000000000..7a2f09ed7
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is used both as the storage data for the key as
+ * well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements Serializable {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartValue.java
new file mode 100644
index 000000000..cb9a76611
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/PartValue.java
@@ -0,0 +1,66 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A PartValue serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartValue is used only as the storage data for the
+ * value, while the Part object is used as the value's object representation.
+ * Because it is used directly as storage data using SerialFormat, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartValue implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartValue(String name, String color, Weight weight, String city) {
+
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[PartValue: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Sample.java
new file mode 100644
index 000000000..fa52ad5b2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Sample.java
@@ -0,0 +1,261 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.entity.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. The home directory must exist
+ * before running the sample. To recreate the sample database from scratch,
+ * delete all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+
+ public void doWork()
+ throws Exception {
+ printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printValues("Shipments",
+ views.getShipmentSet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part set is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Set parts = views.getPartSet();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier set is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment set
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of entity value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleDatabase.java
new file mode 100644
index 000000000..6c3d67a58
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleDatabase.java
@@ -0,0 +1,438 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private SerialFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private SerialFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private SerialFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+ private SerialFormat cityKeyFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all formats are
+ // SerialFormat.
+ //
+ partKeyFormat = new SerialFormat(javaCatalog,
+ PartKey.class);
+ partValueFormat = new SerialFormat(javaCatalog,
+ PartValue.class);
+ supplierKeyFormat = new SerialFormat(javaCatalog,
+ SupplierKey.class);
+ supplierValueFormat = new SerialFormat(javaCatalog,
+ SupplierValue.class);
+ shipmentKeyFormat = new SerialFormat(javaCatalog,
+ ShipmentKey.class);
+ shipmentValueFormat = new SerialFormat(javaCatalog,
+ ShipmentValue.class);
+ cityKeyFormat = new SerialFormat(javaCatalog,
+ String.class);
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. Although the DB_BTREE method
+ // provides ordered keys, the ordering of serialized key objects
+ // is not very useful. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat,
+ partValueFormat, null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+
+ // Create the KeyExtractor objects for the part and supplier
+ // indices of the shipment store. Each key extractor object defines
+ // its associated index, since it is responsible for mapping between
+ // the indexed value and the index key.
+ //
+ KeyExtractor cityExtractor = new SupplierByCityExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat);
+ KeyExtractor partExtractor = new ShipmentByPartExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat);
+ KeyExtractor supplierExtractor = new ShipmentBySupplierExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat);
+
+ // Open the Berkeley DB database, along with the associated
+ // ForeignKeyIndex, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with the DB_BTREE access
+ // method and sorted duplicate keys. Although the DB_BTREE method
+ // provides ordered keys, the ordering of serialized key objects
+ // is not very useful. Duplicate keys are allowed since more than one
+ // shipment may exist for the same supplier or part. For indices, if
+ // duplicates are allowed they should always be sorted to allow for
+ // efficient joins.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final SerialFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final SerialFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final SerialFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the city key.
+ */
+ public final SerialFormat getCityKeyFormat() {
+
+ return cityKeyFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+
+ /**
+ * The KeyExtractor for the SupplierByCity index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class SupplierByCityExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private SupplierByCityExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the city key from a supplier key/value pair. The city key
+ * is stored in the supplier value, so the supplier key is not used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ SupplierValue supplierValue = (SupplierValue) valueInput;
+ return supplierValue.getCity();
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentByPart index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class ShipmentByPartExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private ShipmentByPartExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the part key from a shipment key/value pair. The part key
+ * is stored in the shipment key, so the shipment value is not used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new PartKey(shipmentKey.getPartNumber());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentBySupplier index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class ShipmentBySupplierExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the supplier key format.
+ */
+ private ShipmentBySupplierExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the supplier key from a shipment key/value pair. The
+ * supplier key is stored in the shipment key, so the shipment value is
+ * not used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new SupplierKey(shipmentKey.getSupplierNumber());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleViews.java
new file mode 100644
index 000000000..fde71bc86
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SampleViews.java
@@ -0,0 +1,320 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.SerialSerialBinding;
+import com.sleepycat.bdb.collection.StoredMap;
+import com.sleepycat.bdb.collection.StoredValueSet;
+import java.io.IOException;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredMap partMap;
+ private StoredMap supplierMap;
+ private StoredMap shipmentMap;
+ private StoredMap shipmentByPartMap;
+ private StoredMap shipmentBySupplierMap;
+ private StoredMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, EntityBinding classes are used to bind the stored
+ // key/value data pair to a combined value object. For keys, however,
+ // the stored data is used directly via a SerialBinding and no
+ // special binding class is needed.
+ //
+ DataBinding partKeyBinding =
+ new SerialBinding(db.getPartKeyFormat());
+ EntityBinding partValueBinding =
+ new PartBinding(db.getPartKeyFormat(), db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+ new SerialBinding(db.getSupplierKeyFormat());
+ EntityBinding supplierValueBinding =
+ new SupplierBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+ new SerialBinding(db.getShipmentKeyFormat());
+ EntityBinding shipmentValueBinding =
+ new ShipmentBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat());
+ DataBinding cityKeyBinding =
+ new SerialBinding(db.getCityKeyFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is not used since the stores and indices are
+ // ordered by serialized key objects, which do not provide a very
+ // useful ordering.
+ //
+ partMap =
+ new StoredMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new StoredMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new StoredMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredValueSet
+ // classes, which provide additional methods. The entity sets could be
+ // obtained directly from the Map.values() method but convenience methods
+ // are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public StoredMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public StoredMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public StoredMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entity set view of the part storage container.
+ */
+ public StoredValueSet getPartSet() {
+
+ return (StoredValueSet) partMap.values();
+ }
+
+ /**
+ * Return an entity set view of the supplier storage container.
+ */
+ public StoredValueSet getSupplierSet() {
+
+ return (StoredValueSet) supplierMap.values();
+ }
+
+ /**
+ * Return an entity set view of the shipment storage container.
+ */
+ public StoredValueSet getShipmentSet() {
+
+ return (StoredValueSet) shipmentMap.values();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public StoredMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public StoredMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/value data pair for a part
+ * to a combined value object (entity).
+ */
+ private static class PartBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private PartBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException {
+
+ PartKey key = (PartKey) keyInput;
+ PartValue value = (PartValue) valueInput;
+ return new Part(key.getNumber(), value.getName(), value.getColor(),
+ value.getWeight(), value.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object)
+ throws IOException {
+
+ Part part = (Part) object;
+ return new PartKey(part.getNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Part part = (Part) object;
+ return new PartValue(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/value data pair for a part
+ * to a combined value object (entity).
+ */
+ private static class SupplierBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private SupplierBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException {
+
+ SupplierKey key = (SupplierKey) keyInput;
+ SupplierValue value = (SupplierValue) valueInput;
+ return new Supplier(key.getNumber(), value.getName(),
+ value.getStatus(), value.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object)
+ throws IOException {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierKey(supplier.getNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierValue(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/value data pair for a part
+ * to a combined value object (entity).
+ */
+ private static class ShipmentBinding extends SerialSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private ShipmentBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException {
+
+ ShipmentKey key = (ShipmentKey) keyInput;
+ ShipmentValue value = (ShipmentValue) valueInput;
+ return new Shipment(key.getPartNumber(), key.getSupplierNumber(),
+ value.getQuantity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public Object objectToKey(Object object)
+ throws IOException {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentKey(shipment.getPartNumber(),
+ shipment.getSupplierNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentValue(shipment.getQuantity());
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Shipment.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Shipment.java
new file mode 100644
index 000000000..abc71d4c8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Shipment.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Shipment.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+/**
+ * A Shipment represents the combined key/value pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/value data using
+ * a SerialSerialBinding. See {@link SampleViews.ShipmentBinding} for details.
+ * Since this class is not used directly for data storage, it does not need to
+ * be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Shipment {
+
+ private String partNumber;
+ private String supplierNumber;
+ private int quantity;
+
+ public Shipment(String partNumber, String supplierNumber, int quantity) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentKey.java
new file mode 100644
index 000000000..be4d52b64
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements Serializable {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentValue.java
new file mode 100644
index 000000000..d13aedaaf
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/ShipmentValue.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentValue serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentValue is used only as the storage data for the
+ * value, while the Shipment object is used as the value's object
+ * representation. Because it is used directly as storage data using
+ * SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentValue implements Serializable {
+
+ private int quantity;
+
+ public ShipmentValue(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentValue: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Supplier.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Supplier.java
new file mode 100644
index 000000000..31330d2d8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Supplier.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Supplier.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+/**
+ * A Supplier represents the combined key/value pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/value data using
+ * a SerialSerialBinding. See {@link SampleViews.SupplierBinding} for details.
+ * Since this class is not used directly for data storage, it does not need to
+ * be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Supplier {
+
+ private String number;
+ private String name;
+ private int status;
+ private String city;
+
+ public Supplier(String number, String name, int status, String city) {
+
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierKey.java
new file mode 100644
index 000000000..2dddf3845
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements Serializable {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierValue.java
new file mode 100644
index 000000000..89a62ceb1
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/SupplierValue.java
@@ -0,0 +1,59 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierValue serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierValue is used only as the storage data for the
+ * value, while the Supplier object is used as the value's object
+ * representation. Because it is used directly as storage data using
+ * SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierValue implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierValue(String name, int status, String city) {
+
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[SupplierValue: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Weight.java
new file mode 100644
index 000000000..fe2d94eff
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/entity/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.entity;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Serial serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Part.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Part.java
new file mode 100644
index 000000000..2f7346a65
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Part.java
@@ -0,0 +1,111 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Part.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Part represents the combined key/value pair for a part entity.
+ *
+ * <p> In this sample, Part is bound to the stored key/value data by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a PartValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Part implements Serializable, MarshalledTupleKeyEntity {
+
+ private transient String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public Part(String number, String name, String color, Weight weight,
+ String city) {
+
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+
+ // --- MarshalledTupleKeyEntity implementation ---
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/PartKey.java
new file mode 100644
index 000000000..ac47bdff2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/PartKey.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the stored key tuple data by
+ * implementing the MarshalledTupleData interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements MarshalledTupleData {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+
+ // --- MarshalledTupleData implementation ---
+
+ public PartKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalData(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalData(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Sample.java
new file mode 100644
index 000000000..4f75a4578
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Sample.java
@@ -0,0 +1,261 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.s07_simpler.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. To specify a different home
+ * directory, use the -home option. The home directory must exist before
+ * running the sample. To recreate the sample database from scratch, delete
+ * all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws Exception {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws Exception {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printValues("Shipments",
+ views.getShipmentSet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part set is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Set parts = views.getPartSet();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier set is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment set
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of entity value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleDatabase.java
new file mode 100644
index 000000000..3355c5fb9
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleDatabase.java
@@ -0,0 +1,209 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.factory.TupleSerialDbFactory;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private TupleSerialDbFactory factory;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws Exception {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Use the TupleSerialDbFactory for a Serial/Tuple-based database
+ // where marshalling interfaces are used. This opens the Serial
+ // class catalog automatically.
+ //
+ factory = new TupleSerialDbFactory(javaCatalog);
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened as sorted and no duplicate
+ // keys allowed. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = factory.newDataStore(partDb, Part.class, null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = factory.newDataStore(supplierDb, Supplier.class, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = factory.newDataStore(shipmentDb, Shipment.class, null);
+
+ // Open the ForeignKeyIndex, along with the associated the Berkeley
+ // DB database, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with sorted duplicate
+ // keys. Duplicate keys are allowed since more than one shipment
+ // may exist for the same supplier or part.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ supplierByCityIndex = factory.newDataIndex(supplierStore,
+ cityIndexDb, Supplier.CITY_KEY,
+ false, true);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentByPartIndex = factory.newForeignKeyIndex(shipmentStore,
+ partIndexDb, Shipment.PART_KEY,
+ false, true, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentBySupplierIndex = factory.newForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ Shipment.SUPPLIER_KEY,
+ false, true, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the simple db factory.
+ */
+ public final TupleSerialDbFactory getFactory() {
+
+ return factory;
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws Exception {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleViews.java
new file mode 100644
index 000000000..be7e9942e
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SampleViews.java
@@ -0,0 +1,140 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.factory.TupleSerialDbFactory;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredSortedMap partMap;
+ private StoredSortedMap supplierMap;
+ private StoredSortedMap shipmentMap;
+ private StoredSortedMap shipmentByPartMap;
+ private StoredSortedMap shipmentBySupplierMap;
+ private StoredSortedMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ TupleSerialDbFactory factory = db.getFactory();
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is used since the stores and indices are ordered
+ // (they use the DB_BTREE access method).
+ //
+ partMap =
+ factory.newSortedMap(db.getPartStore(),
+ PartKey.class, true);
+ supplierMap =
+ factory.newSortedMap(db.getSupplierStore(),
+ SupplierKey.class, true);
+ shipmentMap =
+ factory.newSortedMap(db.getShipmentStore(),
+ ShipmentKey.class, true);
+ shipmentByPartMap =
+ factory.newSortedMap(db.getShipmentByPartIndex(),
+ PartKey.class, true);
+ shipmentBySupplierMap =
+ factory.newSortedMap(db.getShipmentBySupplierIndex(),
+ SupplierKey.class, true);
+ supplierByCityMap =
+ factory.newSortedMap(db.getSupplierByCityIndex(),
+ String.class, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredValueSet
+ // classes, which provide additional methods. The entity sets could be
+ // obtained directly from the Map.values() method but convenience methods
+ // are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public StoredSortedMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public StoredSortedMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public StoredSortedMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entity set view of the part storage container.
+ */
+ public StoredSortedValueSet getPartSet() {
+
+ return (StoredSortedValueSet) partMap.values();
+ }
+
+ /**
+ * Return an entity set view of the supplier storage container.
+ */
+ public StoredSortedValueSet getSupplierSet() {
+
+ return (StoredSortedValueSet) supplierMap.values();
+ }
+
+ /**
+ * Return an entity set view of the shipment storage container.
+ */
+ public StoredSortedValueSet getShipmentSet() {
+
+ return (StoredSortedValueSet) shipmentMap.values();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public StoredSortedMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public StoredSortedMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredSortedMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Shipment.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Shipment.java
new file mode 100644
index 000000000..eb75da0b8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Shipment.java
@@ -0,0 +1,111 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Shipment.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Shipment represents the combined key/value pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is bound to the stored key/value data by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a ShipmentValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Shipment implements Serializable, MarshalledTupleKeyEntity {
+
+ static final String PART_KEY = "part";
+ static final String SUPPLIER_KEY = "supplier";
+
+ private transient String partNumber;
+ private transient String supplierNumber;
+ private int quantity;
+
+ public Shipment(String partNumber, String supplierNumber, int quantity) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + ']';
+ }
+
+ // --- MarshalledTupleKeyEntity implementation ---
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if (keyName.equals(PART_KEY)) {
+ keyOutput.writeString(this.partNumber);
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ keyOutput.writeString(this.supplierNumber);
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if (keyName.equals(PART_KEY)) {
+ this.partNumber = null;
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ this.supplierNumber = null;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/ShipmentKey.java
new file mode 100644
index 000000000..901b97b38
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/ShipmentKey.java
@@ -0,0 +1,74 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the stored key tuple data by
+ * implementing the MarshalledTupleData interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements MarshalledTupleData {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+
+ // --- MarshalledTupleData implementation ---
+
+ public ShipmentKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalData(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public void unmarshalData(TupleInput keyInput)
+ throws IOException {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Supplier.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Supplier.java
new file mode 100644
index 000000000..1282fb321
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Supplier.java
@@ -0,0 +1,112 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Supplier.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Supplier represents the combined key/value pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is bound to the stored key/value data by
+ * implementing the MarshalledTupleKeyEntity interface. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a SupplierValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Supplier implements Serializable, MarshalledTupleKeyEntity {
+
+ static final String CITY_KEY = "city";
+
+ private transient String number;
+ private String name;
+ private int status;
+ private String city;
+
+ public Supplier(String number, String name, int status, String city) {
+
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+
+ // --- MarshalledTupleKeyEntity implementation ---
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if (keyName.equals(CITY_KEY)) {
+ keyOutput.writeString(this.city);
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if (keyName.equals(CITY_KEY)) {
+ this.city = null;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SupplierKey.java
new file mode 100644
index 000000000..6585d4d00
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/SupplierKey.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the stored key tuple data by
+ * implementing the MarshalledTupleData interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements MarshalledTupleData {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+
+ // --- MarshalledTupleData implementation ---
+
+ public SupplierKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void marshalData(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void unmarshalData(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Weight.java
new file mode 100644
index 000000000..658173285
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/factory/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.factory;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Java serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index.html b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index.html
new file mode 100644
index 000000000..b31e1438d
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index.html
@@ -0,0 +1,51 @@
+<!-- $Id: index.html,v 1.1 2003/12/15 21:44:10 jbj Exp $ -->
+<html>
+<head><title>Shipment Samples</title></head>
+<body>
+
+<h2>Shipment Samples</h2>
+
+<p>The shipment sample programs illustrate the use of BDB API of Berkeley DB
+with a shipment database, a familiar example from classic database texts.</p>
+
+<p>See <a href="../index.html">samples/db/index.html</a> for information on
+how to compile and run the samples.</p>
+
+<p>Each shipment sample illustrates the use of different types of
+bindings and data formats. They build on each other, but at the same
+time each sample stands alone in terms of both code and comments.</p>
+
+<p>All samples use a modified form of Java serialization for the value
+bindings. Several samples use tuple format for key bindings since this
+provides a more compact key and deterministic sort order. Currently no
+samples show the use of tuples for value bindings although of course this
+is possible. The highest-level approach is illustrated by factory,
+which uses a built-in factory to create databases and collections.</p>
+
+<h3>Division of Responsibilities</h3>
+
+<p>The shipment samples illustrate a pattern for dividing responsibilities in
+applications that use BDB API.</p>
+<ol>
+<li>The SampleDatabase class defines the environment, data stores, data
+formats, and secondary indexes. KeyExtractor classes are implemented here to
+derive secondary index keys from data values.</li>
+<li>The SampleView class defines the bindings and collection views of the
+database. If bindings are not marshalled (i.e., if they are implemented
+externally to the key and value classes) then they are implemented here.</li>
+<li>The key, value and entity classes are the application classes that model
+the stored data objects. These may implement marshalling interfaces or be
+used by the external bindings in the SampleView class.</li>
+<li>The Sample class is the main program that uses the collection views to
+manage and query the stored objects.</li>
+</ol>
+
+<p>Separating the data store and secondary index definitions from the view
+definitions is very important. This division allows easily defining more than
+one set of views on the same stored data.</p>
+
+<p>For a larger program the division above may best be made along package
+lines rather than along class lines.</p>
+
+</body>
+</html>
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartKey.java
new file mode 100644
index 000000000..b10fc8ef8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is used both as the storage data for the key as
+ * well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements Serializable {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartValue.java
new file mode 100644
index 000000000..39d9e1507
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/PartValue.java
@@ -0,0 +1,65 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A PartValue serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartValue is used both as the storage data for the value
+ * as well as the object binding to the value. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartValue implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartValue(String name, String color, Weight weight, String city) {
+
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[PartValue: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Sample.java
new file mode 100644
index 000000000..887806e05
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Sample.java
@@ -0,0 +1,314 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.basic.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. The home directory must exist
+ * before running the sample. To recreate the sample database from scratch,
+ * delete all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printEntries("Parts",
+ views.getPartEntrySet().iterator());
+ printEntries("Suppliers",
+ views.getSupplierEntrySet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printEntries("Shipments",
+ views.getShipmentEntrySet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part map is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Map parts = views.getPartMap();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.put(new PartKey("P1"),
+ new PartValue("Nut", "Red",
+ new Weight(12.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P2"),
+ new PartValue("Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P3"),
+ new PartValue("Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS),
+ "Rome"));
+ parts.put(new PartKey("P4"),
+ new PartValue("Screw", "Red",
+ new Weight(14.0, Weight.GRAMS),
+ "London"));
+ parts.put(new PartKey("P5"),
+ new PartValue("Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS),
+ "Paris"));
+ parts.put(new PartKey("P6"),
+ new PartValue("Cog", "Red",
+ new Weight(19.0, Weight.GRAMS),
+ "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier map is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Map suppliers = views.getSupplierMap();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.put(new SupplierKey("S1"),
+ new SupplierValue("Smith", 20, "London"));
+ suppliers.put(new SupplierKey("S2"),
+ new SupplierValue("Jones", 10, "Paris"));
+ suppliers.put(new SupplierKey("S3"),
+ new SupplierValue("Blake", 30, "Paris"));
+ suppliers.put(new SupplierKey("S4"),
+ new SupplierValue("Clark", 20, "London"));
+ suppliers.put(new SupplierKey("S5"),
+ new SupplierValue("Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment map
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Map shipments = views.getShipmentMap();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.put(new ShipmentKey("P1", "S1"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P3", "S1"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P4", "S1"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P5", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P6", "S1"),
+ new ShipmentValue(100));
+ shipments.put(new ShipmentKey("P1", "S2"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P2", "S2"),
+ new ShipmentValue(400));
+ shipments.put(new ShipmentKey("P2", "S3"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P2", "S4"),
+ new ShipmentValue(200));
+ shipments.put(new ShipmentKey("P4", "S4"),
+ new ShipmentValue(300));
+ shipments.put(new ShipmentKey("P5", "S4"),
+ new ShipmentValue(400));
+ }
+ }
+
+ /**
+ * Print the key/value objects returned by an iterator of Map.Entry
+ * objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printEntries(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ System.out.println(entry.getKey().toString());
+ System.out.println(entry.getValue().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleDatabase.java
new file mode 100644
index 000000000..e06a6d4a4
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleDatabase.java
@@ -0,0 +1,432 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private SerialFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private SerialFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private SerialFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+ private SerialFormat cityKeyFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the Berkeley DB flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all formats are
+ // SerialFormat.
+ //
+ partKeyFormat = new SerialFormat(javaCatalog, PartKey.class);
+ partValueFormat = new SerialFormat(javaCatalog, PartValue.class);
+ supplierKeyFormat = new SerialFormat(javaCatalog, SupplierKey.class);
+ supplierValueFormat =
+ new SerialFormat(javaCatalog, SupplierValue.class);
+ shipmentKeyFormat = new SerialFormat(javaCatalog, ShipmentKey.class);
+ shipmentValueFormat =
+ new SerialFormat(javaCatalog, ShipmentValue.class);
+ cityKeyFormat = new SerialFormat(javaCatalog, String.class);
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. Although the DB_BTREE method
+ // provides ordered keys, the ordering of serialized key objects
+ // is not very useful. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat, partValueFormat,
+ null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+
+ // Create the KeyExtractor objects for the three indices.
+ // Each key extractor object defines its associated index, since it is
+ // responsible for mapping between the indexed value and the index key.
+ //
+ KeyExtractor cityExtractor = new SupplierByCityExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat);
+ KeyExtractor partExtractor = new ShipmentByPartExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat);
+ KeyExtractor supplierExtractor = new ShipmentBySupplierExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat);
+
+ // Open the Berkeley DB database, along with the associated
+ // ForeignKeyIndex, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with the DB_BTREE access
+ // method and sorted duplicate keys. Although the DB_BTREE method
+ // provides ordered keys, the ordering of serialized key objects
+ // is not very useful. Duplicate keys are allowed since more than one
+ // shipment may exist for the same supplier or part. For indices, if
+ // duplicates are allowed they should always be sorted to allow for
+ // efficient joins.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final SerialFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final SerialFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final SerialFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the city key.
+ */
+ public final SerialFormat getCityKeyFormat() {
+
+ return cityKeyFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+
+ /**
+ * The KeyExtractor for the SupplierByCity index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class SupplierByCityExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private SupplierByCityExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the city key from a supplier key/value pair. The city key
+ * is stored in the supplier value, so the supplier key is not used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ SupplierValue supplierValue = (SupplierValue) valueInput;
+ return supplierValue.getCity();
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentByPart index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class ShipmentByPartExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private ShipmentByPartExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the part key from a shipment key/value pair. The part key
+ * is stored in the shipment key, so the shipment value is not used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new PartKey(shipmentKey.getPartNumber());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentBySupplier index. This is an
+ * extension of the abstract class SerialSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys and value
+ * are all of the format SerialFormat.
+ */
+ private static class ShipmentBySupplierExtractor
+ extends SerialSerialKeyExtractor {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the supplier key format.
+ */
+ private ShipmentBySupplierExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the supplier key from a shipment key/value pair. The part
+ * key is stored in the shipment key, so the shipment value is not
+ * used.
+ */
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ ShipmentKey shipmentKey = (ShipmentKey) primaryKeyInput;
+ return new SupplierKey(shipmentKey.getSupplierNumber());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public Object clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleViews.java
new file mode 100644
index 000000000..0f4022e9c
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SampleViews.java
@@ -0,0 +1,184 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.collection.StoredEntrySet;
+import com.sleepycat.bdb.collection.StoredMap;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredMap partMap;
+ private StoredMap supplierMap;
+ private StoredMap shipmentMap;
+ private StoredMap shipmentByPartMap;
+ private StoredMap shipmentBySupplierMap;
+ private StoredMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, the stored keys and values are used directly rather
+ // than mapping them to separate objects. Therefore, no binding classes
+ // are defined here and the SerialBinding class is used.
+ //
+ DataBinding partKeyBinding =
+ new SerialBinding(db.getPartKeyFormat());
+ DataBinding partValueBinding =
+ new SerialBinding(db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+ new SerialBinding(db.getSupplierKeyFormat());
+ DataBinding supplierValueBinding =
+ new SerialBinding(db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+ new SerialBinding(db.getShipmentKeyFormat());
+ DataBinding shipmentValueBinding =
+ new SerialBinding(db.getShipmentValueFormat());
+ DataBinding cityKeyBinding =
+ new SerialBinding(db.getCityKeyFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is not used since the stores and indices are
+ // ordered by serialized key objects, which do not provide a very
+ // useful ordering.
+ //
+ partMap =
+ new StoredMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new StoredMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new StoredMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredEntrySet
+ // classes, which provide additional methods. The entry sets could be
+ // obtained directly from the Map.entrySet() method, but convenience
+ // methods are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public final StoredMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public final StoredMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public final StoredMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entry set view of the part storage container.
+ */
+ public final StoredEntrySet getPartEntrySet() {
+
+ return (StoredEntrySet) partMap.entrySet();
+ }
+
+ /**
+ * Return an entry set view of the supplier storage container.
+ */
+ public final StoredEntrySet getSupplierEntrySet() {
+
+ return (StoredEntrySet) supplierMap.entrySet();
+ }
+
+ /**
+ * Return an entry set view of the shipment storage container.
+ */
+ public final StoredEntrySet getShipmentEntrySet() {
+
+ return (StoredEntrySet) shipmentMap.entrySet();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public final StoredMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public final StoredMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+
+ /**
+ * Return an entry set view of the shipment-by-part index.
+ */
+ public final StoredEntrySet getShipmentByPartEntrySet() {
+
+ return (StoredEntrySet) shipmentByPartMap.entrySet();
+ }
+
+ /**
+ * Return an entry set view of the shipment-by-supplier index.
+ */
+ public final StoredEntrySet getShipmentBySupplierEntrySet() {
+
+ return (StoredEntrySet) shipmentBySupplierMap.entrySet();
+ }
+
+ /**
+ * Return entry set view of the supplier-by-city index.
+ */
+ public final StoredEntrySet getSupplierByCityEntrySet() {
+
+ return (StoredEntrySet) supplierByCityMap.entrySet();
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentKey.java
new file mode 100644
index 000000000..903346316
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentKey.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements Serializable {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentValue.java
new file mode 100644
index 000000000..360fab105
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/ShipmentValue.java
@@ -0,0 +1,42 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentValue serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentValue is used both as the storage data for the
+ * value as well as the object binding to the value. Because it is used
+ * directly as storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentValue implements Serializable {
+
+ private int quantity;
+
+ public ShipmentValue(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentValue: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierKey.java
new file mode 100644
index 000000000..5f88e5064
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierKey.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is used both as the storage data for the key
+ * as well as the object binding to the key. Because it is used directly as
+ * storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements Serializable {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierValue.java
new file mode 100644
index 000000000..12b4b4c8a
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/SupplierValue.java
@@ -0,0 +1,58 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierValue serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierValue is used both as the storage data for the
+ * value as well as the object binding to the value. Because it is used
+ * directly as storage data using SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierValue implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierValue(String name, int status, String city) {
+
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[SupplierValue: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Weight.java
new file mode 100644
index 000000000..525e710d2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/index/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.index;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Serial serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledEntity.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledEntity.java
new file mode 100644
index 000000000..33e8c56b7
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledEntity.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledEntity.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * MarshalledEntity is implemented by entity (combined key/value) objects and
+ * called by {@link SampleViews.MarshalledEntityBinding}. In this sample,
+ * MarshalledEntity is implemented by {@link Part}, {@link Supplier}, and
+ * {@link Shipment}. This interface is package-protected rather than public
+ * to hide the marshalling interface from other users of the data objects.
+ * Note that a MarshalledEntity must also have a no arguments contructor so
+ * that it can be instantiated by the binding.
+ *
+ * @author Mark Hayes
+ */
+interface MarshalledEntity {
+
+ /**
+ * Extracts the entity's primary key and writes it to the key output.
+ */
+ void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException;
+
+ /**
+ * Completes construction of the entity by setting its primary key from the
+ * stored primary key.
+ */
+ void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException;
+
+ /**
+ * Extracts the entity's index key and writes it to the key output.
+ */
+ void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException;
+
+ /**
+ * Clears the entity's index key value for the given key name.
+ *
+ * <p> This method is called when the entity for this foreign key is
+ * deleted, if ON_DELETE_CLEAR was specified when creating the index. </p>
+ */
+ void clearIndexKey(String keyName)
+ throws IOException;
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledKey.java
new file mode 100644
index 000000000..5b4ceaf09
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/MarshalledKey.java
@@ -0,0 +1,40 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * MarshalledKey is implemented by key objects and called by {@link
+ * SampleViews.MarshalledKeyBinding}. In this sample, MarshalledKey is
+ * implemented by {@link PartKey}, {@link SupplierKey}, and {@link
+ * ShipmentKey}. This interface is package-protected rather than public to
+ * hide the marshalling interface from other users of the data objects. Note
+ * that a MarshalledKey must also have a no arguments contructor so that it can
+ * be instantiated by the binding.
+ *
+ * @author Mark Hayes
+ */
+interface MarshalledKey {
+
+ /**
+ * Construct the key tuple data from the key object.
+ */
+ void marshalKey(TupleOutput keyOutput)
+ throws IOException;
+
+ /**
+ * Construct the key object from the key tuple data.
+ */
+ void unmarshalKey(TupleInput keyInput)
+ throws IOException;
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Part.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Part.java
new file mode 100644
index 000000000..45b329668
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Part.java
@@ -0,0 +1,126 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Part.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Part represents the combined key/value pair for a part entity.
+ *
+ * <p> In this sample, Part is bound to the stored key/value data by
+ * implementing the MarshalledEntity interface, which is called by {@link
+ * SampleViews.MarshalledEntityBinding}. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a PartValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Part implements Serializable, MarshalledEntity {
+
+ private transient String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public Part(String number, String name, String color, Weight weight,
+ String city) {
+
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ final void setKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+
+ // --- MarshalledEntity implementation ---
+
+ Part() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ throw new UnsupportedOperationException(keyName);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/PartKey.java
new file mode 100644
index 000000000..a6e1d2766
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/PartKey.java
@@ -0,0 +1,63 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the stored key tuple data by
+ * implementing the MarshalledKey interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey implements MarshalledKey {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+
+ // --- MarshalledKey implementation ---
+
+ PartKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Sample.java
new file mode 100644
index 000000000..7265733a9
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Sample.java
@@ -0,0 +1,261 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.marshal.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. To specify a different home
+ * directory, use the -home option. The home directory must exist before
+ * running the sample. To recreate the sample database from scratch, delete
+ * all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printValues("Shipments",
+ views.getShipmentSet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part set is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Set parts = views.getPartSet();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier set is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment set
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of entity value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleDatabase.java
new file mode 100644
index 000000000..dbfac4016
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleDatabase.java
@@ -0,0 +1,359 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private TupleFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private TupleFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private TupleFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+ private TupleFormat cityKeyFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all key formats are
+ // TupleFormat and all value formats are SerialFormat. Note that
+ // entity (combined key/value) classes are used for the value
+ // formats--for details see the bindings in the SampleViews class.
+ //
+ partKeyFormat = new TupleFormat();
+ partValueFormat = new SerialFormat(javaCatalog, Part.class);
+ supplierKeyFormat = new TupleFormat();
+ supplierValueFormat = new SerialFormat(javaCatalog, Supplier.class);
+ shipmentKeyFormat = new TupleFormat();
+ shipmentValueFormat = new SerialFormat(javaCatalog, Shipment.class);
+ cityKeyFormat = new TupleFormat();
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. The DB_BTREE method is used
+ // to provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat,
+ partValueFormat, null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+
+ // Create the KeyExtractor objects for the part and supplier
+ // indices of the shipment store. Each key extractor object defines
+ // its associated index, since it is responsible for mapping between
+ // the indexed value and the index key.
+ //
+ KeyExtractor cityExtractor = new MarshalledKeyExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat,
+ Supplier.CITY_KEY);
+ KeyExtractor partExtractor = new MarshalledKeyExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat,
+ Shipment.PART_KEY);
+ KeyExtractor supplierExtractor = new MarshalledKeyExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat,
+ Shipment.SUPPLIER_KEY);
+
+ // Open the Berkeley DB database, along with the associated
+ // ForeignKeyIndex, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with the DB_BTREE access
+ // method and sorted duplicate keys. The DB_BTREE method is used to
+ // provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are allowed since more than one
+ // shipment may exist for the same supplier or part. For indices, if
+ // duplicates are allowed they should always be sorted to allow for
+ // efficient joins.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final TupleFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final TupleFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final TupleFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the city key.
+ */
+ public final TupleFormat getCityKeyFormat() {
+
+ return cityKeyFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+
+ /**
+ * The KeyExtractor for MarshalledEntity objects. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class MarshalledKeyExtractor
+ extends TupleSerialKeyExtractor {
+
+ private String keyName;
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private MarshalledKeyExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat,
+ String keyName) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ this.keyName = keyName;
+ }
+
+ /**
+ * Extract the city key from a supplier key/value pair. The city key
+ * is stored in the supplier value, so the supplier key is not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ // the primary key is unmarshalled before marshalling the index
+ // key, to account for cases where the index key is composed of
+ // data elements from the primary key
+ MarshalledEntity entity = (MarshalledEntity) valueInput;
+ entity.unmarshalPrimaryKey(primaryKeyInput);
+ entity.marshalIndexKey(keyName, indexKeyOutput);
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ MarshalledEntity entity = (MarshalledEntity) valueInputOutput;
+ entity.clearIndexKey(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleViews.java
new file mode 100644
index 000000000..a61effcd4
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SampleViews.java
@@ -0,0 +1,300 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.TupleSerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredSortedMap partMap;
+ private StoredSortedMap supplierMap;
+ private StoredSortedMap shipmentMap;
+ private StoredSortedMap shipmentByPartMap;
+ private StoredSortedMap shipmentBySupplierMap;
+ private StoredSortedMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, EntityBinding classes are used to bind the stored
+ // key/value data pair to a combined value object; a "tricky" binding
+ // that uses transient fields is used--see PartBinding, etc, for
+ // details. For keys, a one-to-one binding is implemented with
+ // DataBinding classes to bind the stored tuple data to a key Object.
+ //
+ DataBinding partKeyBinding =
+ new MarshalledKeyBinding(db.getPartKeyFormat(), PartKey.class);
+ EntityBinding partValueBinding =
+ new MarshalledEntityBinding(db.getPartKeyFormat(),
+ db.getPartValueFormat(),
+ Part.class);
+ DataBinding supplierKeyBinding =
+ new MarshalledKeyBinding(db.getSupplierKeyFormat(),
+ SupplierKey.class);
+ EntityBinding supplierValueBinding =
+ new MarshalledEntityBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat(),
+ Supplier.class);
+ DataBinding shipmentKeyBinding =
+ new MarshalledKeyBinding(db.getShipmentKeyFormat(),
+ ShipmentKey.class);
+ EntityBinding shipmentValueBinding =
+ new MarshalledEntityBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat(),
+ Shipment.class);
+ DataBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class,
+ db.getCityKeyFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is used since the stores and indices are ordered
+ // (they use the DB_BTREE access method).
+ //
+ partMap =
+ new StoredSortedMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredValueSet
+ // classes, which provide additional methods. The entity sets could be
+ // obtained directly from the Map.values() method but convenience methods
+ // are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public StoredSortedMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public StoredSortedMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public StoredSortedMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entity set view of the part storage container.
+ */
+ public StoredSortedValueSet getPartSet() {
+
+ return (StoredSortedValueSet) partMap.values();
+ }
+
+ /**
+ * Return an entity set view of the supplier storage container.
+ */
+ public StoredSortedValueSet getSupplierSet() {
+
+ return (StoredSortedValueSet) supplierMap.values();
+ }
+
+ /**
+ * Return an entity set view of the shipment storage container.
+ */
+ public StoredSortedValueSet getShipmentSet() {
+
+ return (StoredSortedValueSet) shipmentMap.values();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public StoredSortedMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public StoredSortedMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredSortedMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+
+ /**
+ * MarshalledKeyBinding is used to bind the stored key tuple data to a key
+ * object representation. To do this, it calls the MarshalledKey interface
+ * implemented by the key class.
+ */
+ private static class MarshalledKeyBinding extends TupleBinding {
+
+ private Class keyClass;
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private MarshalledKeyBinding(TupleFormat format, Class keyClass) {
+
+ super(format);
+
+ // The key class will be used to instantiate the key object.
+ //
+ if (!MarshalledKey.class.isAssignableFrom(keyClass)) {
+ throw new IllegalArgumentException(keyClass.toString() +
+ " does not implement MarshalledKey");
+ }
+ this.keyClass = keyClass;
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ try {
+ MarshalledKey key = (MarshalledKey) keyClass.newInstance();
+ key.unmarshalKey(input);
+ return key;
+ } catch (IllegalAccessException e) {
+ throw new IOExceptionWrapper(e);
+ } catch (InstantiationException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ MarshalledKey key = (MarshalledKey) object;
+ key.marshalKey(output);
+ }
+ }
+
+ /**
+ * MarshalledEntityBinding is used to bind the stored key/value data pair
+ * to a combined to an entity object representation. To do this, it calls
+ * the MarshalledEntity interface implemented by the entity class.
+ *
+ * <p> The binding is "tricky" in that it uses the entity class for both the
+ * stored data value and the combined entity object. To do this, entity's
+ * key field(s) are transient and are set by the binding after the data
+ * object has been deserialized. This avoids the use of a "value" class
+ * completely. </p>
+ */
+ private static class MarshalledEntityBinding extends TupleSerialBinding {
+
+ private Class entityClass;
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private MarshalledEntityBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat,
+ Class entityClass) {
+
+ super(keyFormat, valueFormat);
+
+ // The entity class will be used to instantiate the entity object.
+ //
+ if (!MarshalledEntity.class.isAssignableFrom(entityClass)) {
+ throw new IllegalArgumentException(entityClass.toString() +
+ " does not implement MarshalledEntity");
+ }
+ this.entityClass = entityClass;
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ * This "tricky" binding returns the stored value as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object dataToObject(TupleInput tupleInput, Object javaInput)
+ throws IOException {
+
+ MarshalledEntity entity = (MarshalledEntity) javaInput;
+ entity.unmarshalPrimaryKey(tupleInput);
+ return entity;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ MarshalledEntity entity = (MarshalledEntity) object;
+ entity.marshalPrimaryKey(output);
+ }
+
+ /**
+ * Return the entity as the stored value. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ return object;
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Shipment.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Shipment.java
new file mode 100644
index 000000000..b437749b6
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Shipment.java
@@ -0,0 +1,127 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Shipment.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Shipment represents the combined key/value pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is bound to the stored key/value data by
+ * implementing the MarshalledEntity interface, which is called by {@link
+ * SampleViews.MarshalledEntityBinding}. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a ShipmentValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Shipment implements Serializable, MarshalledEntity {
+
+ static final String PART_KEY = "part";
+ static final String SUPPLIER_KEY = "supplier";
+
+ private transient String partNumber;
+ private transient String supplierNumber;
+ private int quantity;
+
+ public Shipment(String partNumber, String supplierNumber, int quantity) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ void setKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + ']';
+ }
+
+ // --- MarshalledEntity implementation ---
+
+ Shipment() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if (keyName.equals(PART_KEY)) {
+ keyOutput.writeString(this.partNumber);
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ keyOutput.writeString(this.supplierNumber);
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if (keyName.equals(PART_KEY)) {
+ this.partNumber = null;
+ } else if (keyName.equals(SUPPLIER_KEY)) {
+ this.supplierNumber = null;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/ShipmentKey.java
new file mode 100644
index 000000000..1f1b07175
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/ShipmentKey.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the stored key tuple data by
+ * implementing the MarshalledKey interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey implements MarshalledKey {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+
+ // --- MarshalledKey implementation ---
+
+ ShipmentKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalKey(TupleInput keyInput)
+ throws IOException {
+
+ this.partNumber = keyInput.readString();
+ this.supplierNumber = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.partNumber);
+ keyOutput.writeString(this.supplierNumber);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Supplier.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Supplier.java
new file mode 100644
index 000000000..e7e68a35b
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Supplier.java
@@ -0,0 +1,127 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Supplier.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * A Supplier represents the combined key/value pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is bound to the stored key/value data by
+ * implementing the MarshalledEntity interface, which is called by {@link
+ * SampleViews.MarshalledEntityBinding}. </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a SupplierValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Supplier implements Serializable, MarshalledEntity {
+
+ static final String CITY_KEY = "city";
+
+ private transient String number;
+ private String name;
+ private int status;
+ private String city;
+
+ public Supplier(String number, String name, int status, String city) {
+
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ void setKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+
+ // --- MarshalledEntity implementation ---
+
+ Supplier() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if (keyName.equals(CITY_KEY)) {
+ keyOutput.writeString(this.city);
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if (keyName.equals(CITY_KEY)) {
+ this.city = null;
+ } else {
+ throw new UnsupportedOperationException(keyName);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SupplierKey.java
new file mode 100644
index 000000000..bacc135fe
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/SupplierKey.java
@@ -0,0 +1,63 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the stored key tuple data by
+ * implementing the MarshalledKey interface, which is called by {@link
+ * SampleViews.MarshalledKeyBinding}. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey implements MarshalledKey {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+
+ // --- MarshalledKey implementation ---
+
+ SupplierKey() {
+
+ // A no-argument constructor is necessary only to allow the binding to
+ // instantiate objects of this class.
+ }
+
+ public void unmarshalKey(TupleInput keyInput)
+ throws IOException {
+
+ this.number = keyInput.readString();
+ }
+
+ public void marshalKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(this.number);
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Weight.java
new file mode 100644
index 000000000..74849e32d
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/marshal/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.marshal;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Java serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Part.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Part.java
new file mode 100644
index 000000000..f684f30a5
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Part.java
@@ -0,0 +1,91 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Part.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Part represents the combined key/value pair for a part entity.
+ *
+ * <p> In this sample, Part is created from the stored key/value data using a
+ * TupleSerialEntityBinding. See {@link SampleViews.PartBinding} for details.
+ * </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a PartValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Part implements Serializable {
+
+ private transient String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public Part(String number, String name, String color, Weight weight,
+ String city) {
+
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ final void setKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/PartKey.java
new file mode 100644
index 000000000..73868a01c
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/PartKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the key's tuple storage data using
+ * a TupleBinding. Because it is not used directly as storage data, it does
+ * not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Sample.java
new file mode 100644
index 000000000..1826d9080
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Sample.java
@@ -0,0 +1,261 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.sentity.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. To specify a different home
+ * directory, use the -home option. The home directory must exist before
+ * running the sample. To recreate the sample database from scratch, delete
+ * all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printValues("Shipments",
+ views.getShipmentSet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part set is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Set parts = views.getPartSet();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier set is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment set
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of entity value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleDatabase.java
new file mode 100644
index 000000000..181849eae
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleDatabase.java
@@ -0,0 +1,444 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private TupleFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private TupleFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private TupleFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+ private TupleFormat cityKeyFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all key formats are
+ // TupleFormat and all value formats are SerialFormat. Note that
+ // entity (combined key/value) classes are used for the value
+ // formats--for details see the bindings in the SampleViews class.
+ //
+ partKeyFormat = new TupleFormat();
+ partValueFormat = new SerialFormat(javaCatalog, Part.class);
+ supplierKeyFormat = new TupleFormat();
+ supplierValueFormat = new SerialFormat(javaCatalog, Supplier.class);
+ shipmentKeyFormat = new TupleFormat();
+ shipmentValueFormat = new SerialFormat(javaCatalog, Shipment.class);
+ cityKeyFormat = new TupleFormat();
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. The DB_BTREE method is used
+ // to provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat,
+ partValueFormat, null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+
+ // Create the KeyExtractor objects for the part and supplier
+ // indices of the shipment store. Each key extractor object defines
+ // its associated index, since it is responsible for mapping between
+ // the indexed value and the index key.
+ //
+ KeyExtractor cityExtractor = new SupplierByCityExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat);
+ KeyExtractor partExtractor = new ShipmentByPartExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat);
+ KeyExtractor supplierExtractor = new ShipmentBySupplierExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat);
+
+ // Open the Berkeley DB database, along with the associated
+ // ForeignKeyIndex, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with the DB_BTREE access
+ // method and sorted duplicate keys. The DB_BTREE method is used to
+ // provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are allowed since more than one
+ // shipment may exist for the same supplier or part. For indices, if
+ // duplicates are allowed they should always be sorted to allow for
+ // efficient joins.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null, Db.DB_BTREE,
+ flags, 0);
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final TupleFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final TupleFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final TupleFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the city key.
+ */
+ public final TupleFormat getCityKeyFormat() {
+
+ return cityKeyFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+
+ /**
+ * The KeyExtractor for the SupplierByCity index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class SupplierByCityExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private SupplierByCityExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the city key from a supplier key/value pair. The city key
+ * is stored in the supplier value, so the supplier key is not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ Supplier supplierValue = (Supplier) valueInput;
+ indexKeyOutput.writeString(supplierValue.getCity());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentByPart index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class ShipmentByPartExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private ShipmentByPartExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the part key from a shipment key/value pair. The part key
+ * is stored in the shipment key, so the shipment value is not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ String partNumber = primaryKeyInput.readString();
+ // don't bother reading the supplierNumber
+ indexKeyOutput.writeString(partNumber);
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentBySupplier index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class ShipmentBySupplierExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the supplier key format.
+ */
+ private ShipmentBySupplierExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the supplier key from a shipment key/value pair. The
+ * supplier key is stored in the shipment key, so the shipment value is
+ * not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ primaryKeyInput.readString(); // skip the partNumber
+ String supplierNumber = primaryKeyInput.readString();
+ indexKeyOutput.writeString(supplierNumber);
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleViews.java
new file mode 100644
index 000000000..c0064360a
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SampleViews.java
@@ -0,0 +1,454 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialBinding;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import java.io.IOException;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredSortedMap partMap;
+ private StoredSortedMap supplierMap;
+ private StoredSortedMap shipmentMap;
+ private StoredSortedMap shipmentByPartMap;
+ private StoredSortedMap shipmentBySupplierMap;
+ private StoredSortedMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, EntityBinding classes are used to bind the stored
+ // key/value data pair to a combined value object; a "tricky" binding
+ // that uses transient fields is used--see PartBinding, etc, for
+ // details. For keys, a one-to-one binding is implemented with
+ // DataBinding classes to bind the stored tuple data to a key Object.
+ //
+ DataBinding partKeyBinding =
+ new PartKeyBinding(db.getPartKeyFormat());
+ EntityBinding partValueBinding =
+ new PartBinding(db.getPartKeyFormat(), db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+ new SupplierKeyBinding(db.getSupplierKeyFormat());
+ EntityBinding supplierValueBinding =
+ new SupplierBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+ new ShipmentKeyBinding(db.getShipmentKeyFormat());
+ EntityBinding shipmentValueBinding =
+ new ShipmentBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat());
+ DataBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class,
+ db.getCityKeyFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is used since the stores and indices are ordered
+ // (they use the DB_BTREE access method).
+ //
+ partMap =
+ new StoredSortedMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredValueSet
+ // classes, which provide additional methods. The entity sets could be
+ // obtained directly from the Map.values() method but convenience methods
+ // are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public StoredSortedMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public StoredSortedMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public StoredSortedMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entity set view of the part storage container.
+ */
+ public StoredSortedValueSet getPartSet() {
+
+ return (StoredSortedValueSet) partMap.values();
+ }
+
+ /**
+ * Return an entity set view of the supplier storage container.
+ */
+ public StoredSortedValueSet getSupplierSet() {
+
+ return (StoredSortedValueSet) supplierMap.values();
+ }
+
+ /**
+ * Return an entity set view of the shipment storage container.
+ */
+ public StoredSortedValueSet getShipmentSet() {
+
+ return (StoredSortedValueSet) shipmentMap.values();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public StoredSortedMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public StoredSortedMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredSortedMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+
+ /**
+ * PartKeyBinding is used to bind the stored key tuple data for a part to
+ * a key object representation.
+ */
+ private static class PartKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private PartKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String number = input.readString();
+ return new PartKey(number);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ PartKey key = (PartKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/value data pair for a part
+ * to a combined value object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Part class for both the
+ * stored data value and the combined entity object. To do this, Part's
+ * key field(s) are transient and are set by the binding after the data
+ * object has been deserialized. This avoids the use of a PartValue class
+ * completely. </p>
+ */
+ private static class PartBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private PartBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ * This "tricky" binding returns the stored value as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String number = keyInput.readString();
+ Part part = (Part) valueInput;
+ part.setKey(number);
+ return part;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Part part = (Part) object;
+ output.writeString(part.getNumber());
+ }
+
+ /**
+ * Return the entity as the stored value. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ return object;
+ }
+ }
+
+ /**
+ * SupplierKeyBinding is used to bind the stored key tuple data for a
+ * supplier to a key object representation.
+ */
+ private static class SupplierKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private SupplierKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String number = input.readString();
+ return new SupplierKey(number);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ SupplierKey key = (SupplierKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * SupplierBinding is used to bind the stored key/value data pair for a
+ * supplier to a combined value object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Supplier class for both
+ * the stored data value and the combined entity object. To do this,
+ * Supplier's key field(s) are transient and are set by the binding after
+ * the data object has been deserialized. This avoids the use of a
+ * SupplierValue class completely. </p>
+ */
+ private static class SupplierBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private SupplierBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ * This "tricky" binding returns the stored value as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String number = keyInput.readString();
+ Supplier supplier = (Supplier) valueInput;
+ supplier.setKey(number);
+ return supplier;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Supplier supplier = (Supplier) object;
+ output.writeString(supplier.getNumber());
+ }
+
+ /**
+ * Return the entity as the stored value. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ return object;
+ }
+ }
+
+ /**
+ * ShipmentKeyBinding is used to bind the stored key tuple data for a
+ * shipment to a key object representation.
+ */
+ private static class ShipmentKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private ShipmentKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String partNumber = input.readString();
+ String supplierNumber = input.readString();
+ return new ShipmentKey(partNumber, supplierNumber);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ ShipmentKey key = (ShipmentKey) object;
+ output.writeString(key.getPartNumber());
+ output.writeString(key.getSupplierNumber());
+ }
+ }
+
+ /**
+ * ShipmentBinding is used to bind the stored key/value data pair for a
+ * shipment to a combined value object (entity).
+ *
+ * <p> The binding is "tricky" in that it uses the Shipment class for both
+ * the stored data value and the combined entity object. To do this,
+ * Shipment's key field(s) are transient and are set by the binding after
+ * the data object has been deserialized. This avoids the use of a
+ * ShipmentValue class completely. </p>
+ */
+ private static class ShipmentBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private ShipmentBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ * This "tricky" binding returns the stored value as the entity, but
+ * first it sets the transient key fields from the stored key.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+ Shipment shipment = (Shipment) valueInput;
+ shipment.setKey(partNumber, supplierNumber);
+ return shipment;
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Shipment shipment = (Shipment) object;
+ output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+ }
+
+ /**
+ * Return the entity as the stored value. There is nothing to do here
+ * since the entity's key fields are transient.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ return object;
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Shipment.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Shipment.java
new file mode 100644
index 000000000..a179aca6f
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Shipment.java
@@ -0,0 +1,75 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Shipment.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Shipment represents the combined key/value pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/value data using
+ * TupleSerialEntityBinding. See {@link SampleViews.PartBinding} for details.
+ * </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a ShipmentValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Shipment implements Serializable {
+
+ private transient String partNumber;
+ private transient String supplierNumber;
+ private int quantity;
+
+ public Shipment(String partNumber, String supplierNumber, int quantity) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ void setKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/ShipmentKey.java
new file mode 100644
index 000000000..dbc14d0cf
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/ShipmentKey.java
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the key's tuple storage data
+ * using a TupleBinding. Because it is not used directly as storage data, it
+ * does not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Supplier.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Supplier.java
new file mode 100644
index 000000000..1ecd64737
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Supplier.java
@@ -0,0 +1,82 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Supplier.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import java.io.Serializable;
+
+/**
+ * A Supplier represents the combined key/value pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/value data using
+ * TupleSerialEntityBinding. See {@link SampleViews.PartBinding} for details.
+ * </p>
+ *
+ * <p> The binding is "tricky" in that it uses this class for both the stored
+ * data value and the combined entity object. To do this, the key field(s) are
+ * transient and are set by the binding after the data object has been
+ * deserialized. This avoids the use of a SupplierValue class completely. </p>
+ *
+ * <p> Since this class is used directly for data storage, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Supplier implements Serializable {
+
+ private transient String number;
+ private String name;
+ private int status;
+ private String city;
+
+ public Supplier(String number, String name, int status, String city) {
+
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ /**
+ * Set the transient key fields after deserializing. This method is only
+ * called by data bindings.
+ */
+ void setKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SupplierKey.java
new file mode 100644
index 000000000..6c96a78b8
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/SupplierKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the key's tuple storage data
+ * using a TupleBinding. Because it is not used directly as storage data, it
+ * does not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Weight.java
new file mode 100644
index 000000000..76215e6f7
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/sentity/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.sentity;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Java serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Part.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Part.java
new file mode 100644
index 000000000..a742c67b3
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Part.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Part.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A Part represents the combined key/value pair for a part entity.
+ *
+ * <p> In this sample, Part is created from the stored key/value data using a
+ * SerialSerialBinding. See {@link SampleViews.PartBinding} for details. Since
+ * this class is not directly used for data storage, it does not need to be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Part {
+
+ private String number;
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public Part(String number, String name, String color, Weight weight,
+ String city) {
+
+ this.number = number;
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Part: number=" + number +
+ " name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartKey.java
new file mode 100644
index 000000000..fb791ee15
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A PartKey serves as the key in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartKey is bound to the key's tuple storage data using
+ * a TupleBinding. Because it is not used directly as storage data, it does
+ * not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartKey {
+
+ private String number;
+
+ public PartKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[PartKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartValue.java
new file mode 100644
index 000000000..a33e4b17f
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/PartValue.java
@@ -0,0 +1,66 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PartValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A PartValue serves as the value in the key/value pair for a part entity.
+ *
+ * <p> In this sample, PartValue is used only as the storage data for the
+ * value, while the Part object is used as the value's object representation.
+ * Because it is used directly as storage data using SerialFormat, it must be
+ * Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class PartValue implements Serializable {
+
+ private String name;
+ private String color;
+ private Weight weight;
+ private String city;
+
+ public PartValue(String name, String color, Weight weight, String city) {
+
+ this.name = name;
+ this.color = color;
+ this.weight = weight;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final String getColor() {
+
+ return color;
+ }
+
+ public final Weight getWeight() {
+
+ return weight;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[PartValue: name=" + name +
+ " color=" + color +
+ " weight=" + weight +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Sample.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Sample.java
new file mode 100644
index 000000000..ee2a71124
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Sample.java
@@ -0,0 +1,260 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Sample.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * Sample is the main entry point for the sample program and may be run as
+ * follows:
+ *
+ * <pre>
+ * java com.sleepycat.examples.bdb.shipment.tuple.Sample
+ * [-h <home-directory> ] [-multiprocess]
+ * </pre>
+ *
+ * <p> The default for the home directory is ./tmp -- the tmp subdirectory of
+ * the current directory where the sample is run. The home directory must exist
+ * before running the sample. To recreate the sample database from scratch,
+ * delete all files in the home directory before running the sample. </p>
+ *
+ * <p> The default processing model is single-process, in which Berkeley DB
+ * recovery is always run when the environment is opened. If a multi-process
+ * model is desired, use the -multiprocess option and implement a monitor
+ * process which handles recovery. If -multiprocess is specified, Berkeley DB
+ * recovery will not be run automatically when opening the environment. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Sample {
+
+ private SampleDatabase db;
+ private SampleViews views;
+
+ /**
+ * Run the sample program.
+ */
+ public static void main(String[] args) {
+
+ System.out.println("\nRunning sample: " + Sample.class);
+
+ // Parse the command line arguments.
+ //
+ boolean runRecovery = true;
+ String homeDir = "./tmp";
+ for (int i = 0; i < args.length; i += 1) {
+ String arg = args[i];
+ if (args[i].equals("-h") && i < args.length - 1) {
+ i += 1;
+ homeDir = args[i];
+ } else if (args[i].equals("-multiprocess")) {
+ runRecovery = false;
+ } else {
+ System.err.println("Usage:\n java " + Sample.class.getName() +
+ "\n [-h <home-directory>] [-multiprocess]");
+ System.exit(2);
+ }
+ }
+
+ // Run the sample.
+ //
+ Sample sample = null;
+ try {
+ sample = new Sample(homeDir, runRecovery);
+ sample.run();
+ } catch (Exception e) {
+ // If an exception reaches this point, the last transaction did not
+ // complete. If the exception is DbRunRecoveryException, follow
+ // the Berkeley DB recovery procedures before running again.
+ e.printStackTrace();
+ } finally {
+ if (sample != null) {
+ try {
+ // Always attempt to close the database cleanly.
+ sample.close();
+ } catch (Exception e) {
+ System.err.println("Exception during database close:");
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * Open the database and views.
+ */
+ private Sample(String homeDir, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ db = new SampleDatabase(homeDir, runRecovery);
+ views = new SampleViews(db);
+ }
+
+ /**
+ * Close the database cleanly.
+ */
+ private void close()
+ throws DbException, IOException {
+
+ db.close();
+ }
+
+ /**
+ * Run two transactions to populate and print the database. A
+ * TransactionRunner is used to ensure consistent handling of transactions,
+ * including deadlock retries. But the best transaction handling mechanism
+ * to use depends on the application.
+ */
+ private void run()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(db.getEnvironment());
+ runner.run(new PopulateDatabase());
+ runner.run(new PrintDatabase());
+ }
+
+ /**
+ * Populate the database in a single transaction.
+ */
+ private class PopulateDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ addSuppliers();
+ addParts();
+ addShipments();
+ }
+ }
+
+ /**
+ * Print the database in a single transaction. All entities are printed
+ * and the indices are used to print the entities for certain keys.
+ *
+ * <p> Note the use of special iterator() methods. These are used here
+ * with indices to find the shipments for certain keys. For details on
+ * database iterators see {@link StoredIterator}. </p>
+ */
+ private class PrintDatabase implements TransactionWorker {
+
+ public void doWork()
+ throws Exception {
+ printValues("Parts",
+ views.getPartSet().iterator());
+ printValues("Suppliers",
+ views.getSupplierSet().iterator());
+ printValues("Suppliers for City Paris",
+ views.getSupplierByCityMap().duplicates(
+ "Paris").iterator());
+ printValues("Shipments",
+ views.getShipmentSet().iterator());
+ printValues("Shipments for Part P1",
+ views.getShipmentByPartMap().duplicates(
+ new PartKey("P1")).iterator());
+ printValues("Shipments for Supplier S1",
+ views.getShipmentBySupplierMap().duplicates(
+ new SupplierKey("S1")).iterator());
+ }
+ }
+
+ /**
+ * Populate the part entities in the database. If the part set is not
+ * empty, assume that this has already been done.
+ */
+ private void addParts() {
+
+ Set parts = views.getPartSet();
+ if (parts.isEmpty()) {
+ System.out.println("Adding Parts");
+ parts.add(new Part("P1", "Nut", "Red",
+ new Weight(12.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P2", "Bolt", "Green",
+ new Weight(17.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P3", "Screw", "Blue",
+ new Weight(17.0, Weight.GRAMS), "Rome"));
+ parts.add(new Part("P4", "Screw", "Red",
+ new Weight(14.0, Weight.GRAMS), "London"));
+ parts.add(new Part("P5", "Cam", "Blue",
+ new Weight(12.0, Weight.GRAMS), "Paris"));
+ parts.add(new Part("P6", "Cog", "Red",
+ new Weight(19.0, Weight.GRAMS), "London"));
+ }
+ }
+
+ /**
+ * Populate the supplier entities in the database. If the supplier set is
+ * not empty, assume that this has already been done.
+ */
+ private void addSuppliers() {
+
+ Set suppliers = views.getSupplierSet();
+ if (suppliers.isEmpty()) {
+ System.out.println("Adding Suppliers");
+ suppliers.add(new Supplier("S1", "Smith", 20, "London"));
+ suppliers.add(new Supplier("S2", "Jones", 10, "Paris"));
+ suppliers.add(new Supplier("S3", "Blake", 30, "Paris"));
+ suppliers.add(new Supplier("S4", "Clark", 20, "London"));
+ suppliers.add(new Supplier("S5", "Adams", 30, "Athens"));
+ }
+ }
+
+ /**
+ * Populate the shipment entities in the database. If the shipment set
+ * is not empty, assume that this has already been done.
+ */
+ private void addShipments() {
+
+ Set shipments = views.getShipmentSet();
+ if (shipments.isEmpty()) {
+ System.out.println("Adding Shipments");
+ shipments.add(new Shipment("P1", "S1", 300));
+ shipments.add(new Shipment("P2", "S1", 200));
+ shipments.add(new Shipment("P3", "S1", 400));
+ shipments.add(new Shipment("P4", "S1", 200));
+ shipments.add(new Shipment("P5", "S1", 100));
+ shipments.add(new Shipment("P6", "S1", 100));
+ shipments.add(new Shipment("P1", "S2", 300));
+ shipments.add(new Shipment("P2", "S2", 400));
+ shipments.add(new Shipment("P2", "S3", 200));
+ shipments.add(new Shipment("P2", "S4", 200));
+ shipments.add(new Shipment("P4", "S4", 300));
+ shipments.add(new Shipment("P5", "S4", 400));
+ }
+ }
+
+ /**
+ * Print the objects returned by an iterator of entity value objects.
+ *
+ * <p><b> IMPORTANT: All database iterators must be closed to avoid
+ * serious database problems. If the iterator is not closed, the
+ * underlying Berkeley DB cursor is not closed either. </b></p>
+ */
+ private void printValues(String label, Iterator iterator) {
+
+ System.out.println("\n--- " + label + " ---");
+ try {
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next().toString());
+ }
+ } finally {
+ // IMPORTANT: Use StoredIterator to close all database
+ // iterators. If java.util.Iterator is in hand, you can safely
+ // close it by calling StoredIterator.close(Iterator).
+ StoredIterator.close(iterator);
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleDatabase.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleDatabase.java
new file mode 100644
index 000000000..1a0ac254e
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleDatabase.java
@@ -0,0 +1,444 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleDatabase.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialKeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * SampleDatabase defines the storage containers, indices and foreign keys
+ * for the sample database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleDatabase {
+
+ private static final String CLASS_CATALOG = "java_class_catalog";
+ private static final String SUPPLIER_STORE = "supplier_store";
+ private static final String PART_STORE = "part_store";
+ private static final String SHIPMENT_STORE = "shipment_store";
+ private static final String SHIPMENT_PART_INDEX = "shipment_part_index";
+ private static final String SHIPMENT_SUPPLIER_INDEX =
+ "shipment_supplier_index";
+ private static final String SUPPLIER_CITY_INDEX = "supplier_city_index";
+
+ private DbEnv env;
+ private DataStore supplierStore;
+ private DataStore partStore;
+ private DataStore shipmentStore;
+ private DataIndex supplierByCityIndex;
+ private ForeignKeyIndex shipmentByPartIndex;
+ private ForeignKeyIndex shipmentBySupplierIndex;
+ private StoredClassCatalog javaCatalog;
+ private TupleFormat partKeyFormat;
+ private SerialFormat partValueFormat;
+ private TupleFormat supplierKeyFormat;
+ private SerialFormat supplierValueFormat;
+ private TupleFormat shipmentKeyFormat;
+ private SerialFormat shipmentValueFormat;
+ private TupleFormat cityKeyFormat;
+
+ /**
+ * Open all storage containers, indices, and catalogs.
+ */
+ public SampleDatabase(String homeDirectory, boolean runRecovery)
+ throws DbException, FileNotFoundException {
+
+ // Open the Berkeley DB environment in transactional mode.
+ //
+ int envFlags = Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL |
+ Db.DB_CREATE;
+ if (runRecovery) envFlags |= Db.DB_RECOVER;
+ env = new DbEnv(0);
+ System.out.println("Opening environment in: " + homeDirectory);
+ env.open(homeDirectory, envFlags, 0);
+
+ // Set the flags for opening all stores and indices.
+ //
+ int flags = Db.DB_CREATE | Db.DB_AUTO_COMMIT;
+
+ // Create the Serial class catalog. This holds the serialized class
+ // format for all database records of format SerialFormat.
+ //
+ javaCatalog = new StoredClassCatalog(env, CLASS_CATALOG, null, flags);
+
+ // Create the data formats. In this example, all key formats are
+ // TupleFormat and all value formats are SerialFormat.
+ //
+ partKeyFormat = new TupleFormat();
+ partValueFormat = new SerialFormat(javaCatalog, PartValue.class);
+ supplierKeyFormat = new TupleFormat();
+ supplierValueFormat = new SerialFormat(javaCatalog,
+ SupplierValue.class);
+ shipmentKeyFormat = new TupleFormat();
+ shipmentValueFormat = new SerialFormat(javaCatalog,
+ ShipmentValue.class);
+ cityKeyFormat = new TupleFormat();
+
+ // Open the Berkeley DB database, along with the associated
+ // DataStore, for the part, supplier and shipment stores.
+ // In this sample, the stores are opened with the DB_BTREE access
+ // method and no duplicate keys allowed. The DB_BTREE method is used
+ // to provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are not allowed for any entity
+ // with indexes or foreign key relationships.
+ //
+ Db partDb = new Db(env, 0);
+ partDb.open(null, PART_STORE, null, Db.DB_BTREE, flags, 0);
+ partStore = new DataStore(partDb, partKeyFormat,
+ partValueFormat, null);
+
+ Db supplierDb = new Db(env, 0);
+ supplierDb.open(null, SUPPLIER_STORE, null, Db.DB_BTREE, flags, 0);
+ supplierStore = new DataStore(supplierDb, supplierKeyFormat,
+ supplierValueFormat, null);
+
+ Db shipmentDb = new Db(env, 0);
+ shipmentDb.open(null, SHIPMENT_STORE, null, Db.DB_BTREE, flags, 0);
+ shipmentStore = new DataStore(shipmentDb, shipmentKeyFormat,
+ shipmentValueFormat, null);
+
+ // Create the KeyExtractor objects for the part and supplier
+ // indices of the shipment store. Each key extractor object defines
+ // its associated index, since it is responsible for mapping between
+ // the indexed value and the index key.
+ //
+ KeyExtractor cityExtractor = new SupplierByCityExtractor(
+ supplierKeyFormat,
+ supplierValueFormat,
+ cityKeyFormat);
+ KeyExtractor partExtractor = new ShipmentByPartExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ partKeyFormat);
+ KeyExtractor supplierExtractor = new ShipmentBySupplierExtractor(
+ shipmentKeyFormat,
+ shipmentValueFormat,
+ supplierKeyFormat);
+
+ // Open the Berkeley DB database, along with the associated
+ // ForeignKeyIndex, for the part and supplier indices of the shipment
+ // store.
+ // In this sample, the indices are opened with the DB_BTREE access
+ // method and sorted duplicate keys. The DB_BTREE method is used to
+ // provide ordered keys, since ordering is meaningful when the tuple
+ // data format is used. Duplicate keys are allowed since more than one
+ // shipment may exist for the same supplier or part. For indices, if
+ // duplicates are allowed they should always be sorted to allow for
+ // efficient joins.
+ //
+ Db cityIndexDb = new Db(env, 0);
+ cityIndexDb.setFlags(Db.DB_DUPSORT);
+ cityIndexDb.open(null, SUPPLIER_CITY_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ supplierByCityIndex = new DataIndex(supplierStore, cityIndexDb,
+ cityKeyFormat, cityExtractor);
+
+ Db partIndexDb = new Db(env, 0);
+ partIndexDb.setFlags(Db.DB_DUPSORT);
+ partIndexDb.open(null, SHIPMENT_PART_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ shipmentByPartIndex = new ForeignKeyIndex(shipmentStore, partIndexDb,
+ partExtractor, partStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+
+ Db supplierIndexDb = new Db(env, 0);
+ supplierIndexDb.setFlags(Db.DB_DUPSORT);
+ supplierIndexDb.open(null, SHIPMENT_SUPPLIER_INDEX, null,
+ Db.DB_BTREE, flags, 0);
+ shipmentBySupplierIndex = new ForeignKeyIndex(shipmentStore,
+ supplierIndexDb,
+ supplierExtractor, supplierStore,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ /**
+ * Return the storage environment for the database.
+ */
+ public final DbEnv getEnvironment() {
+
+ return env;
+ }
+
+ /**
+ * Return the DataFormat of the part key.
+ */
+ public final TupleFormat getPartKeyFormat() {
+
+ return partKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the part value.
+ */
+ public final SerialFormat getPartValueFormat() {
+
+ return partValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier key.
+ */
+ public final TupleFormat getSupplierKeyFormat() {
+
+ return supplierKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the supplier value.
+ */
+ public final SerialFormat getSupplierValueFormat() {
+
+ return supplierValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment key.
+ */
+ public final TupleFormat getShipmentKeyFormat() {
+
+ return shipmentKeyFormat;
+ }
+
+ /**
+ * Return the DataFormat of the shipment value.
+ */
+ public final SerialFormat getShipmentValueFormat() {
+
+ return shipmentValueFormat;
+ }
+
+ /**
+ * Return the DataFormat of the city key.
+ */
+ public final TupleFormat getCityKeyFormat() {
+
+ return cityKeyFormat;
+ }
+
+ /**
+ * Return the part storage container.
+ */
+ public final DataStore getPartStore() {
+
+ return partStore;
+ }
+
+ /**
+ * Return the supplier storage container.
+ */
+ public final DataStore getSupplierStore() {
+
+ return supplierStore;
+ }
+
+ /**
+ * Return the shipment storage container.
+ */
+ public final DataStore getShipmentStore() {
+
+ return shipmentStore;
+ }
+
+ /**
+ * Return the shipment-by-part index.
+ */
+ public final ForeignKeyIndex getShipmentByPartIndex() {
+
+ return shipmentByPartIndex;
+ }
+
+ /**
+ * Return the shipment-by-supplier index.
+ */
+ public final ForeignKeyIndex getShipmentBySupplierIndex() {
+
+ return shipmentBySupplierIndex;
+ }
+
+ /**
+ * Return the supplier-by-city index.
+ */
+ public final DataIndex getSupplierByCityIndex() {
+
+ return supplierByCityIndex;
+ }
+
+ /**
+ * Close all stores (closing a store automatically closes its indices).
+ */
+ public void close()
+ throws DbException, IOException {
+
+ partStore.close();
+ supplierStore.close();
+ shipmentStore.close();
+ // And don't forget to close the catalog and the environment.
+ javaCatalog.close();
+ env.close(0);
+ }
+
+ /**
+ * The KeyExtractor for the SupplierByCity index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class SupplierByCityExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private SupplierByCityExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the city key from a supplier key/value pair. The city key
+ * is stored in the supplier value, so the supplier key is not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ SupplierValue supplierValue = (SupplierValue) valueInput;
+ indexKeyOutput.writeString(supplierValue.getCity());
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentByPart index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class ShipmentByPartExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the part key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the part key format.
+ */
+ private ShipmentByPartExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the part key from a shipment key/value pair. The part key
+ * is stored in the shipment key, so the shipment value is not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ String partNumber = primaryKeyInput.readString();
+ // don't bother reading the supplierNumber
+ indexKeyOutput.writeString(partNumber);
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ * The KeyExtractor for the ShipmentBySupplier index. This is an
+ * extension of the abstract class TupleSerialKeyExtractor, which
+ * implements KeyExtractor for the case where the data keys are of the
+ * format TupleFormat and the data values are of the format
+ * SerialFormat.
+ */
+ private static class ShipmentBySupplierExtractor
+ extends TupleSerialKeyExtractor {
+
+ /**
+ * Construct the supplier key extractor.
+ * @param primaryKeyFormat is the shipment key format.
+ * @param valueFormat is the shipment value format.
+ * @param indexKeyFormat is the supplier key format.
+ */
+ private ShipmentBySupplierExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ /**
+ * Extract the supplier key from a shipment key/value pair. The
+ * supplier key is stored in the shipment key, so the shipment value is
+ * not used.
+ */
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ primaryKeyInput.readString(); // skip the partNumber
+ String supplierNumber = primaryKeyInput.readString();
+ indexKeyOutput.writeString(supplierNumber);
+ }
+
+ /**
+ * This method will never be called since ON_DELETE_CLEAR was not
+ * specified when creating the index.
+ */
+ public void clearIndexKey(Object valueInputOutput)
+ throws IOException {
+
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleViews.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleViews.java
new file mode 100644
index 000000000..6efaed219
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SampleViews.java
@@ -0,0 +1,431 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SampleViews.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialBinding;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import java.io.IOException;
+
+/**
+ * SampleViews defines the data bindings and collection views for the sample
+ * database.
+ *
+ * @author Mark Hayes
+ */
+public class SampleViews {
+
+ private StoredSortedMap partMap;
+ private StoredSortedMap supplierMap;
+ private StoredSortedMap shipmentMap;
+ private StoredSortedMap shipmentByPartMap;
+ private StoredSortedMap shipmentBySupplierMap;
+ private StoredSortedMap supplierByCityMap;
+
+ /**
+ * Create the data bindings and collection views.
+ */
+ public SampleViews(SampleDatabase db) {
+
+ // Create the data bindings.
+ // In this sample, EntityBinding classes are used to bind the stored
+ // key/value data pair to a combined value object. For keys, a
+ // one-to-one binding is implemented with DataBinding classes to bind
+ // the stored tuple data to a key Object.
+ //
+ DataBinding partKeyBinding =
+ new PartKeyBinding(db.getPartKeyFormat());
+ EntityBinding partValueBinding =
+ new PartBinding(db.getPartKeyFormat(), db.getPartValueFormat());
+ DataBinding supplierKeyBinding =
+ new SupplierKeyBinding(db.getSupplierKeyFormat());
+ EntityBinding supplierValueBinding =
+ new SupplierBinding(db.getSupplierKeyFormat(),
+ db.getSupplierValueFormat());
+ DataBinding shipmentKeyBinding =
+ new ShipmentKeyBinding(db.getShipmentKeyFormat());
+ EntityBinding shipmentValueBinding =
+ new ShipmentBinding(db.getShipmentKeyFormat(),
+ db.getShipmentValueFormat());
+ DataBinding cityKeyBinding =
+ TupleBinding.getPrimitiveBinding(String.class,
+ db.getCityKeyFormat());
+
+ // Create map views for all stores and indices.
+ // StoredSortedMap is used since the stores and indices are ordered
+ // (they use the DB_BTREE access method).
+ //
+ partMap =
+ new StoredSortedMap(db.getPartStore(),
+ partKeyBinding, partValueBinding, true);
+ supplierMap =
+ new StoredSortedMap(db.getSupplierStore(),
+ supplierKeyBinding, supplierValueBinding, true);
+ shipmentMap =
+ new StoredSortedMap(db.getShipmentStore(),
+ shipmentKeyBinding, shipmentValueBinding, true);
+ shipmentByPartMap =
+ new StoredSortedMap(db.getShipmentByPartIndex(),
+ partKeyBinding, shipmentValueBinding, true);
+ shipmentBySupplierMap =
+ new StoredSortedMap(db.getShipmentBySupplierIndex(),
+ supplierKeyBinding, shipmentValueBinding, true);
+ supplierByCityMap =
+ new StoredSortedMap(db.getSupplierByCityIndex(),
+ cityKeyBinding, supplierValueBinding, true);
+ }
+
+ // The views returned below can be accessed using the java.util.Map or
+ // java.util.Set interfaces, or using the StoredMap and StoredValueSet
+ // classes, which provide additional methods. The entity sets could be
+ // obtained directly from the Map.values() method but convenience methods
+ // are provided here to return them in order to avoid down-casting
+ // elsewhere.
+
+ /**
+ * Return a map view of the part storage container.
+ */
+ public StoredSortedMap getPartMap() {
+
+ return partMap;
+ }
+
+ /**
+ * Return a map view of the supplier storage container.
+ */
+ public StoredSortedMap getSupplierMap() {
+
+ return supplierMap;
+ }
+
+ /**
+ * Return a map view of the shipment storage container.
+ */
+ public StoredSortedMap getShipmentMap() {
+
+ return shipmentMap;
+ }
+
+ /**
+ * Return an entity set view of the part storage container.
+ */
+ public StoredSortedValueSet getPartSet() {
+
+ return (StoredSortedValueSet) partMap.values();
+ }
+
+ /**
+ * Return an entity set view of the supplier storage container.
+ */
+ public StoredSortedValueSet getSupplierSet() {
+
+ return (StoredSortedValueSet) supplierMap.values();
+ }
+
+ /**
+ * Return an entity set view of the shipment storage container.
+ */
+ public StoredSortedValueSet getShipmentSet() {
+
+ return (StoredSortedValueSet) shipmentMap.values();
+ }
+
+ /**
+ * Return a map view of the shipment-by-part index.
+ */
+ public StoredSortedMap getShipmentByPartMap() {
+
+ return shipmentByPartMap;
+ }
+
+ /**
+ * Return a map view of the shipment-by-supplier index.
+ */
+ public StoredSortedMap getShipmentBySupplierMap() {
+
+ return shipmentBySupplierMap;
+ }
+
+ /**
+ * Return a map view of the supplier-by-city index.
+ */
+ public final StoredSortedMap getSupplierByCityMap() {
+
+ return supplierByCityMap;
+ }
+
+ /**
+ * PartKeyBinding is used to bind the stored key tuple data for a part to
+ * a key object representation.
+ */
+ private static class PartKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private PartKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String number = input.readString();
+ return new PartKey(number);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ PartKey key = (PartKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * PartBinding is used to bind the stored key/value data pair for a part
+ * to a combined value object (entity).
+ */
+ private static class PartBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private PartBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String number = keyInput.readString();
+ PartValue value = (PartValue) valueInput;
+ return new Part(number, value.getName(), value.getColor(),
+ value.getWeight(), value.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Part part = (Part) object;
+ output.writeString(part.getNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Part part = (Part) object;
+ return new PartValue(part.getName(), part.getColor(),
+ part.getWeight(), part.getCity());
+ }
+ }
+
+ /**
+ * SupplierKeyBinding is used to bind the stored key tuple data for a
+ * supplier to a key object representation.
+ */
+ private static class SupplierKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private SupplierKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String number = input.readString();
+ return new SupplierKey(number);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ SupplierKey key = (SupplierKey) object;
+ output.writeString(key.getNumber());
+ }
+ }
+
+ /**
+ * SupplierBinding is used to bind the stored key/value data pair for a
+ * supplier to a combined value object (entity).
+ */
+ private static class SupplierBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private SupplierBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String number = keyInput.readString();
+ SupplierValue value = (SupplierValue) valueInput;
+ return new Supplier(number, value.getName(),
+ value.getStatus(), value.getCity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Supplier supplier = (Supplier) object;
+ output.writeString(supplier.getNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Supplier supplier = (Supplier) object;
+ return new SupplierValue(supplier.getName(), supplier.getStatus(),
+ supplier.getCity());
+ }
+ }
+
+ /**
+ * ShipmentKeyBinding is used to bind the stored key tuple data for a
+ * shipment to a key object representation.
+ */
+ private static class ShipmentKeyBinding extends TupleBinding {
+
+ /**
+ * Construct the binding object with the key tuple data format.
+ */
+ private ShipmentKeyBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ /**
+ * Create the key object from the stored key tuple data.
+ */
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ String partNumber = input.readString();
+ String supplierNumber = input.readString();
+ return new ShipmentKey(partNumber, supplierNumber);
+ }
+
+ /**
+ * Create the stored key tuple data from the key object.
+ */
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ ShipmentKey key = (ShipmentKey) object;
+ output.writeString(key.getPartNumber());
+ output.writeString(key.getSupplierNumber());
+ }
+ }
+
+ /**
+ * ShipmentBinding is used to bind the stored key/value data pair for a
+ * shipment to a combined value object (entity).
+ */
+ private static class ShipmentBinding extends TupleSerialBinding {
+
+ /**
+ * Construct the binding object.
+ * @param keyFormat is the stored data key format.
+ * @param valueFormat is the stored data value format.
+ */
+ private ShipmentBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ /**
+ * Create the entity by combining the stored key and value.
+ */
+ public Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException {
+
+ String partNumber = keyInput.readString();
+ String supplierNumber = keyInput.readString();
+ ShipmentValue value = (ShipmentValue) valueInput;
+ return new Shipment(partNumber, supplierNumber,
+ value.getQuantity());
+ }
+
+ /**
+ * Create the stored key from the entity.
+ */
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ Shipment shipment = (Shipment) object;
+ output.writeString(shipment.getPartNumber());
+ output.writeString(shipment.getSupplierNumber());
+ }
+
+ /**
+ * Create the stored value from the entity.
+ */
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ Shipment shipment = (Shipment) object;
+ return new ShipmentValue(shipment.getQuantity());
+ }
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Shipment.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Shipment.java
new file mode 100644
index 000000000..d4f2dac47
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Shipment.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Shipment.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A Shipment represents the combined key/value pair for a shipment entity.
+ *
+ * <p> In this sample, Shipment is created from the stored key/value data using
+ * a SerialSerialBinding. See {@link SampleViews.ShipmentBinding} for details.
+ * Since this class is not used directly for data storage, it does not need to
+ * be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Shipment {
+
+ private String partNumber;
+ private String supplierNumber;
+ private int quantity;
+
+ public Shipment(String partNumber, String supplierNumber, int quantity) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ this.quantity = quantity;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[Shipment: part=" + partNumber +
+ " supplier=" + supplierNumber +
+ " quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentKey.java
new file mode 100644
index 000000000..50cedb2f6
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentKey.java
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A ShipmentKey serves as the key in the key/value pair for a shipment entity.
+ *
+ * <p> In this sample, ShipmentKey is bound to the key's tuple storage data
+ * using a TupleBinding. Because it is not used directly as storage data, it
+ * does not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentKey {
+
+ private String partNumber;
+ private String supplierNumber;
+
+ public ShipmentKey(String partNumber, String supplierNumber) {
+
+ this.partNumber = partNumber;
+ this.supplierNumber = supplierNumber;
+ }
+
+ public final String getPartNumber() {
+
+ return partNumber;
+ }
+
+ public final String getSupplierNumber() {
+
+ return supplierNumber;
+ }
+
+ public String toString() {
+
+ return "[ShipmentKey: supplier=" + supplierNumber +
+ " part=" + partNumber + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentValue.java
new file mode 100644
index 000000000..235b04da4
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/ShipmentValue.java
@@ -0,0 +1,43 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ShipmentValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A ShipmentValue serves as the value in the key/value pair for a shipment
+ * entity.
+ *
+ * <p> In this sample, ShipmentValue is used only as the storage data for the
+ * value, while the Shipment object is used as the value's object
+ * representation. Because it is used directly as storage data using
+ * SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class ShipmentValue implements Serializable {
+
+ private int quantity;
+
+ public ShipmentValue(int quantity) {
+
+ this.quantity = quantity;
+ }
+
+ public final int getQuantity() {
+
+ return quantity;
+ }
+
+ public String toString() {
+
+ return "[ShipmentValue: quantity=" + quantity + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Supplier.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Supplier.java
new file mode 100644
index 000000000..21dc92780
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Supplier.java
@@ -0,0 +1,64 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Supplier.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A Supplier represents the combined key/value pair for a supplier entity.
+ *
+ * <p> In this sample, Supplier is created from the stored key/value data using
+ * a SerialSerialBinding. See {@link SampleViews.SupplierBinding} for details.
+ * Since this class is not used directly for data storage, it does not need to
+ * be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Supplier {
+
+ private String number;
+ private String name;
+ private int status;
+ private String city;
+
+ public Supplier(String number, String name, int status, String city) {
+
+ this.number = number;
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[Supplier: number=" + number +
+ " name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierKey.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierKey.java
new file mode 100644
index 000000000..17af1c97d
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierKey.java
@@ -0,0 +1,39 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierKey.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+/**
+ * A SupplierKey serves as the key in the key/value pair for a supplier entity.
+ *
+ * <p> In this sample, SupplierKey is bound to the key's tuple storage data
+ * using a TupleBinding. Because it is not used directly as storage data, it
+ * does not need to be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierKey {
+
+ private String number;
+
+ public SupplierKey(String number) {
+
+ this.number = number;
+ }
+
+ public final String getNumber() {
+
+ return number;
+ }
+
+ public String toString() {
+
+ return "[SupplierKey: number=" + number + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierValue.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierValue.java
new file mode 100644
index 000000000..20eb69756
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/SupplierValue.java
@@ -0,0 +1,59 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SupplierValue.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import java.io.Serializable;
+
+/**
+ * A SupplierValue serves as the value in the key/value pair for a supplier
+ * entity.
+ *
+ * <p> In this sample, SupplierValue is used only as the storage data for the
+ * value, while the Supplier object is used as the value's object
+ * representation. Because it is used directly as storage data using
+ * SerialFormat, it must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class SupplierValue implements Serializable {
+
+ private String name;
+ private int status;
+ private String city;
+
+ public SupplierValue(String name, int status, String city) {
+
+ this.name = name;
+ this.status = status;
+ this.city = city;
+ }
+
+ public final String getName() {
+
+ return name;
+ }
+
+ public final int getStatus() {
+
+ return status;
+ }
+
+ public final String getCity() {
+
+ return city;
+ }
+
+ public String toString() {
+
+ return "[SupplierValue: name=" + name +
+ " status=" + status +
+ " city=" + city + ']';
+ }
+}
diff --git a/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Weight.java b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Weight.java
new file mode 100644
index 000000000..26ed0550e
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/bdb/shipment/tuple/Weight.java
@@ -0,0 +1,50 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Weight.java,v 1.1 2003/12/15 21:44:10 jbj Exp $
+ */
+
+package com.sleepycat.examples.bdb.shipment.tuple;
+
+import java.io.Serializable;
+
+/**
+ * Weight represents a weight amount and unit of measure.
+ *
+ * <p> In this sample, Weight is embedded in part data values which are stored
+ * as Java serialized objects; therefore Weight must be Serializable. </p>
+ *
+ * @author Mark Hayes
+ */
+public class Weight implements Serializable {
+
+ public final static String GRAMS = "grams";
+ public final static String OUNCES = "ounces";
+
+ private double amount;
+ private String units;
+
+ public Weight(double amount, String units) {
+
+ this.amount = amount;
+ this.units = units;
+ }
+
+ public final double getAmount() {
+
+ return amount;
+ }
+
+ public final String getUnits() {
+
+ return units;
+ }
+
+ public String toString() {
+
+ return "[" + amount + ' ' + units + ']';
+ }
+}
diff --git a/db/java/src/com/sleepycat/examples/AccessExample.java b/db/examples_java/src/com/sleepycat/examples/db/AccessExample.java
index f3a98c2c7..9e24cc153 100644
--- a/db/java/src/com/sleepycat/examples/AccessExample.java
+++ b/db/examples_java/src/com/sleepycat/examples/db/AccessExample.java
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: AccessExample.java,v 11.5 2000/12/13 07:09:42 krinsky Exp $
+ * $Id: AccessExample.java,v 11.17 2003/03/27 23:05:31 gburd Exp $
*/
-package com.sleepycat.examples;
+
+package com.sleepycat.examples.db;
import com.sleepycat.db.*;
import java.io.File;
@@ -18,40 +19,60 @@ import java.io.PrintStream;
class AccessExample
{
- private static final String FileName = "access.db";
+ private static final int EXIT_SUCCESS = 0;
+ private static final int EXIT_FAILURE = 1;
public AccessExample()
{
}
- private static void usage()
+ public static void usage()
{
- System.err.println("usage: AccessExample\n");
- System.exit(1);
+ System.out.println("usage: java " +
+ "com.sleepycat.examples.db.AccessExample [-r] [database]\n");
+ System.exit(EXIT_FAILURE);
}
public static void main(String argv[])
{
+ boolean removeExistingDatabase = false;
+ String databaseName = "access.db";
+
+ for (int i = 0; i < argv.length; i++) {
+ if (argv[i].equals("-r")) {
+ removeExistingDatabase = true;
+ } else if (argv[i].equals("-?")) {
+ usage();
+ } else if (argv[i].startsWith("-")) {
+ usage();
+ } else {
+ if ((argv.length - i) != 1)
+ usage();
+ databaseName = argv[i];
+ break;
+ }
+ }
+
try
{
AccessExample app = new AccessExample();
- app.run();
+ app.run(removeExistingDatabase, databaseName);
}
catch (DbException dbe)
{
System.err.println("AccessExample: " + dbe.toString());
- System.exit(1);
+ System.exit(EXIT_FAILURE);
}
catch (FileNotFoundException fnfe)
{
System.err.println("AccessExample: " + fnfe.toString());
- System.exit(1);
+ System.exit(EXIT_FAILURE);
}
- System.exit(0);
+ System.exit(EXIT_SUCCESS);
}
// Prompts for a line, and keeps prompting until a non blank
- // line is returned. Returns null on error.
+ // line is returned. Returns null on erroror.
//
static public String askForLine(InputStreamReader reader,
PrintStream out, String prompt)
@@ -65,7 +86,7 @@ class AccessExample
return result;
}
- // Not terribly efficient, but does the job.
+ // Not terroribly efficient, but does the job.
// Works for reading a line from stdin or a file.
// Returns null on EOF. If EOF appears in the middle
// of a line, returns that line, then null on next call.
@@ -90,18 +111,19 @@ class AccessExample
return b.toString();
}
- public void run()
+ public void run(boolean removeExistingDatabase, String databaseName)
throws DbException, FileNotFoundException
{
// Remove the previous database.
- new File(FileName).delete();
+ if (removeExistingDatabase)
+ new File(databaseName).delete();
// Create the database object.
// There is no environment for this simple example.
Db table = new Db(null, 0);
- table.set_error_stream(System.err);
- table.set_errpfx("AccessExample");
- table.open(FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
+ table.setErrorStream(System.err);
+ table.setErrorPrefix("AccessExample");
+ table.open(null, databaseName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
//
// Insert records into the database, where the key is the user
@@ -123,8 +145,8 @@ class AccessExample
try
{
- int err;
- if ((err = table.put(null,
+ int err = 0;
+ if ((err = table.put(null,
key, data, Db.DB_NOOVERWRITE)) == Db.DB_KEYEXIST) {
System.out.println("Key " + line + " already exists.");
}
@@ -133,7 +155,6 @@ class AccessExample
{
System.out.println(dbe.toString());
}
- System.out.println("");
}
// Acquire an iterator for the table.
@@ -163,24 +184,25 @@ class AccessExample
{
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
}
}
diff --git a/db/java/src/com/sleepycat/examples/BtRecExample.java b/db/examples_java/src/com/sleepycat/examples/db/BtRecExample.java
index 5101f676a..ae25b082c 100644
--- a/db/java/src/com/sleepycat/examples/BtRecExample.java
+++ b/db/examples_java/src/com/sleepycat/examples/db/BtRecExample.java
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: BtRecExample.java,v 11.6 2000/02/19 20:58:02 bostic Exp $
+ * $Id: BtRecExample.java,v 11.17 2003/10/20 20:12:31 mjc Exp $
*/
-package com.sleepycat.examples;
+
+package com.sleepycat.examples.db;
import com.sleepycat.db.*;
import java.io.BufferedReader;
@@ -36,12 +37,12 @@ public class BtRecExample
dbp = new Db(null, 0);
- dbp.set_error_stream(System.err);
- dbp.set_errpfx(progname);
- dbp.set_pagesize(1024); // 1K page sizes.
+ dbp.setErrorStream(System.err);
+ dbp.setErrorPrefix(progname);
+ dbp.setPageSize(1024); // 1K page sizes.
- dbp.set_flags(Db.DB_RECNUM); // Record numbers.
- dbp.open(database, null, Db.DB_BTREE, Db.DB_CREATE, 0664);
+ dbp.setFlags(Db.DB_RECNUM); // Record numbers.
+ dbp.open(null, database, null, Db.DB_BTREE, Db.DB_CREATE, 0664);
//
// Insert records into the database, where the key is the word
@@ -177,40 +178,30 @@ public class BtRecExample
// Open the word database.
FileReader freader = new FileReader(wordlist);
- BtRecExample app = new BtRecExample(new BufferedReader(freader));
+ BtRecExample app = new BtRecExample(new BufferedReader(freader));
- // Close the word database.
+ // Close the word database.
freader.close();
freader = null;
app.stats();
app.run();
- }
- catch (FileNotFoundException fnfe) {
+ } catch (FileNotFoundException fnfe) {
System.err.println(progname + ": unexpected open error " + fnfe);
System.exit (1);
- }
- catch (IOException ioe) {
+ } catch (IOException ioe) {
System.err.println(progname + ": open " + wordlist + ": " + ioe);
System.exit (1);
+ } catch (DbException dbe) {
+ System.err.println("Exception: " + dbe);
+ System.exit(dbe.getErrno());
}
- catch (DbException dbe) {
- System.err.println("Exception: " + dbe);
- System.exit(dbe.get_errno());
- }
- System.exit(0);
- }
-
- void
- usage()
- {
- System.err.println("usage: " + progname);
- System.exit(1);
+ System.exit(0);
}
// Prompts for a line, and keeps prompting until a non blank
- // line is returned. Returns null on error.
+ // line is returned. Returns null on erroror.
//
static public String askForLine(InputStreamReader reader,
PrintStream out, String prompt)
@@ -224,7 +215,7 @@ public class BtRecExample
return result;
}
- // Not terribly efficient, but does the job.
+ // Not terroribly efficient, but does the job.
// Works for reading a line from stdin or a file.
// Returns null on EOF. If EOF appears in the middle
// of a line, returns that line, then null on next call.
@@ -261,33 +252,34 @@ public class BtRecExample
{
StringDbt(byte[] arr)
{
- set_flags(Db.DB_DBT_USERMEM);
- set_data(arr);
- set_size(arr.length);
+ setFlags(Db.DB_DBT_USERMEM);
+ setData(arr);
+ setSize(arr.length);
}
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
// must set ulen because sometimes a string is returned
- set_ulen(value.length());
+ setUserBufferLength(data.length);
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
}
@@ -305,42 +297,43 @@ public class BtRecExample
RecnoStringDbt(int value, int maxsize)
{
- set_flags(Db.DB_DBT_USERMEM); // do not allocate on retrieval
+ setFlags(Db.DB_DBT_USERMEM); // do not allocate on retrieval
arr = new byte[maxsize];
- set_data(arr); // use our local array for data
- set_ulen(maxsize); // size of return storage
+ setData(arr); // use our local array for data
+ setUserBufferLength(maxsize); // size of return storage
setRecno(value);
}
RecnoStringDbt(String value, int maxsize)
{
- set_flags(Db.DB_DBT_USERMEM); // do not allocate on retrieval
+ setFlags(Db.DB_DBT_USERMEM); // do not allocate on retrieval
arr = new byte[maxsize];
- set_data(arr); // use our local array for data
- set_ulen(maxsize); // size of return storage
+ setData(arr); // use our local array for data
+ setUserBufferLength(maxsize); // size of return storage
setString(value);
}
void setRecno(int value)
{
- set_recno_key_data(value);
- set_size(arr.length);
+ setRecordNumber(value);
+ setSize(arr.length);
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
}
int getRecno()
{
- return get_recno_key_data();
+ return getRecordNumber();
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
byte arr[];
diff --git a/db/java/src/com/sleepycat/examples/BulkAccessExample.java b/db/examples_java/src/com/sleepycat/examples/db/BulkAccessExample.java
index 5986c5856..b3b1a75c2 100644
--- a/db/java/src/com/sleepycat/examples/BulkAccessExample.java
+++ b/db/examples_java/src/com/sleepycat/examples/db/BulkAccessExample.java
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2001
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: BulkAccessExample.java,v 1.1 2001/04/30 18:06:15 krinsky Exp
+ * $Id: BulkAccessExample.java,v 1.10 2003/03/27 23:05:31 gburd Exp $
*/
-package com.sleepycat.examples;
+
+package com.sleepycat.examples.db;
import com.sleepycat.db.*;
import java.io.File;
@@ -24,12 +25,6 @@ class BulkAccessExample
{
}
- private static void usage()
- {
- System.err.println("usage: BulkAccessExample\n");
- System.exit(1);
- }
-
public static void main(String argv[])
{
try
@@ -51,7 +46,7 @@ class BulkAccessExample
}
// Prompts for a line, and keeps prompting until a non blank
- // line is returned. Returns null on error.
+ // line is returned. Returns null on erroror.
//
static public String askForLine(InputStreamReader reader,
PrintStream out, String prompt)
@@ -65,7 +60,7 @@ class BulkAccessExample
return result;
}
- // Not terribly efficient, but does the job.
+ // Not terroribly efficient, but does the job.
// Works for reading a line from stdin or a file.
// Returns null on EOF. If EOF appears in the middle
// of a line, returns that line, then null on next call.
@@ -99,9 +94,9 @@ class BulkAccessExample
// Create the database object.
// There is no environment for this simple example.
Db table = new Db(null, 0);
- table.set_error_stream(System.err);
- table.set_errpfx("BulkAccessExample");
- table.open(FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
+ table.setErrorStream(System.err);
+ table.setErrorPrefix("BulkAccessExample");
+ table.open(null, FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
//
// Insert records into the database, where the key is the user
@@ -124,8 +119,8 @@ class BulkAccessExample
try
{
int err;
- if ((err = table.put(null,
- key, data, Db.DB_NOOVERWRITE)) == Db.DB_KEYEXIST) {
+ if ((err = table.put(null,
+ key, data, Db.DB_NOOVERWRITE)) == Db.DB_KEYEXIST) {
System.out.println("Key " + line + " already exists.");
}
}
@@ -137,37 +132,36 @@ class BulkAccessExample
}
// Acquire a cursor for the table and two Dbts.
- Dbc dbc = table.cursor(null, 0);
+ Dbc dbc = table.cursor(null, 0);
Dbt foo = new Dbt();
- foo.set_flags(Db.DB_DBT_MALLOC);
+ foo.setFlags(Db.DB_DBT_MALLOC);
Dbt bulk_data = new Dbt();
- // Set Db.DB_DBT_USERMEM on the data Dbt; Db.DB_MULTIPLE_KEY requires
- // it. Then allocate a byte array of a reasonable size; we'll
- // go through the database in chunks this big.
- bulk_data.set_flags(Db.DB_DBT_USERMEM);
- bulk_data.set_data(new byte[1000000]);
- bulk_data.set_ulen(1000000);
+ // Set Db.DB_DBT_USERMEM on the data Dbt; Db.DB_MULTIPLE_KEY requires
+ // it. Then allocate a byte array of a reasonable size; we'll
+ // go through the database in chunks this big.
+ bulk_data.setFlags(Db.DB_DBT_USERMEM);
+ bulk_data.setData(new byte[1000000]);
+ bulk_data.setUserBufferLength(1000000);
+
-
// Walk through the table, printing the key/data pairs.
//
while (dbc.get(foo, bulk_data, Db.DB_NEXT | Db.DB_MULTIPLE_KEY) == 0)
{
-
- DbMultipleKeyDataIterator iterator;
+ DbMultipleKeyDataIterator iterator;
iterator = new DbMultipleKeyDataIterator(bulk_data);
- StringDbt key, data;
- key = new StringDbt();
- data = new StringDbt();
+ StringDbt key, data;
+ key = new StringDbt();
+ data = new StringDbt();
- while (iterator.next(key, data)) {
- System.out.println(key.getString() + " : " + data.getString());
- }
+ while (iterator.next(key, data)) {
+ System.out.println(key.getString() + " : " + data.getString());
+ }
}
- dbc.close();
+ dbc.close();
table.close(0);
}
@@ -181,25 +175,25 @@ class BulkAccessExample
{
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_offset(0);
- set_size(value.length());
+ byte[] data = value.getBytes();
+ setData(data);
+ setSize(data.length);
}
String getString()
{
- return new String(get_data(), get_offset(), get_size());
+ return new String(getData(), getOffset(), getSize());
}
}
}
diff --git a/db/java/src/com/sleepycat/examples/EnvExample.java b/db/examples_java/src/com/sleepycat/examples/db/EnvExample.java
index f1b855836..8015212ef 100644
--- a/db/java/src/com/sleepycat/examples/EnvExample.java
+++ b/db/examples_java/src/com/sleepycat/examples/db/EnvExample.java
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: EnvExample.java,v 11.7 2000/09/25 13:16:51 dda Exp $
+ * $Id: EnvExample.java,v 11.13 2003/03/21 23:28:38 gburd Exp $
*/
-package com.sleepycat.examples;
+
+package com.sleepycat.examples.db;
import com.sleepycat.db.*;
import java.io.FileNotFoundException;
@@ -37,25 +38,25 @@ public class EnvExample
throws DbException, FileNotFoundException
{
//
- // Create an environment object and initialize it for error
+ // Create an environment object and initialize it for erroror
// reporting.
//
DbEnv dbenv = new DbEnv(0);
- dbenv.set_error_stream(errs);
- dbenv.set_errpfx(progname);
+ dbenv.setErrorStream(errs);
+ dbenv.setErrorPrefix(progname);
//
// We want to specify the shared memory buffer pool cachesize,
// but everything else is the default.
//
- dbenv.set_cachesize(0, 64 * 1024, 0);
+ dbenv.setCacheSize(64 * 1024, 0);
// Databases are in a subdirectory.
- dbenv.set_data_dir(data_dir);
+ dbenv.setDataDir(data_dir);
// Open the environment with full transactional support.
//
- // open() will throw a DbException if there is an error.
+ // open() will throw a DbException if there is an erroror.
//
// open is declared to throw a FileNotFoundException, which normally
// shouldn't occur with the DB_CREATE option.
@@ -74,7 +75,7 @@ public class EnvExample
// Close the environment. Doing this in the
// finally block ensures it is done, even if
- // an error is thrown.
+ // an erroror is thrown.
//
dbenv.close(0);
}
@@ -88,9 +89,9 @@ public class EnvExample
DbEnv dbenv = new DbEnv(0);
- dbenv.set_error_stream(errs);
- dbenv.set_errpfx(progname);
- dbenv.set_data_dir(data_dir);
+ dbenv.setErrorStream(errs);
+ dbenv.setErrorPrefix(progname);
+ dbenv.setDataDir(data_dir);
dbenv.remove(home, 0);
}
diff --git a/db/java/src/com/sleepycat/examples/LockExample.java b/db/examples_java/src/com/sleepycat/examples/db/LockExample.java
index 33b7d0538..8d40de5e4 100644
--- a/db/java/src/com/sleepycat/examples/LockExample.java
+++ b/db/examples_java/src/com/sleepycat/examples/db/LockExample.java
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: LockExample.java,v 11.5 2001/01/04 14:23:30 dda Exp $
+ * $Id: LockExample.java,v 11.12 2003/03/21 23:28:38 gburd Exp $
*/
-package com.sleepycat.examples;
+
+package com.sleepycat.examples.db;
import com.sleepycat.db.*;
import java.io.FileNotFoundException;
@@ -33,16 +34,16 @@ class LockExample extends DbEnv
remove(home, Db.DB_FORCE);
}
else {
- set_error_stream(System.err);
- set_errpfx("LockExample");
+ setErrorStream(System.err);
+ setErrorPrefix("LockExample");
if (maxlocks != 0)
- set_lk_max_locks(maxlocks);
+ setLockMaxLocks(maxlocks);
open(home, Db.DB_CREATE|Db.DB_INIT_LOCK, 0);
}
}
// Prompts for a line, and keeps prompting until a non blank
- // line is returned. Returns null on error.
+ // line is returned. Returns null on erroror.
//
static public String askForLine(InputStreamReader reader,
PrintStream out, String prompt)
@@ -56,7 +57,7 @@ class LockExample extends DbEnv
return result;
}
- // Not terribly efficient, but does the job.
+ // Not terroribly efficient, but does the job.
// Works for reading a line from stdin or a file.
// Returns null on EOF. If EOF appears in the middle
// of a line, returns that line, then null on next call.
@@ -95,7 +96,7 @@ class LockExample extends DbEnv
//
// Accept lock requests.
//
- locker = lock_id();
+ locker = lockId();
for (held = 0;;) {
String opbuf = askForLine(in, System.out,
"Operation get/release [get]> ");
@@ -131,7 +132,7 @@ class LockExample extends DbEnv
DbLock lock;
did_get = true;
- lock = lock_get(locker, Db.DB_LOCK_NOWAIT,
+ lock = lockGet(locker, Db.DB_LOCK_NOWAIT,
dbt, lock_type);
lockid = locks.size();
locks.addElement(lock);
@@ -150,25 +151,22 @@ class LockExample extends DbEnv
}
did_get = false;
DbLock lock = (DbLock)locks.elementAt(lockid);
- lock.put(this);
+ lockPut(lock);
}
System.out.println("Lock #" + lockid + " " +
(did_get ? "granted" : "released"));
held += did_get ? 1 : -1;
}
+ catch (DbLockNotGrantedException lnge) {
+ System.err.println("Lock not granted");
+ }
+ catch (DbDeadlockException de) {
+ System.err.println("LockExample: lock_" +
+ (did_get ? "get" : "put") +
+ ": returned DEADLOCK");
+ }
catch (DbException dbe) {
- switch (dbe.get_errno()) {
- case Db.DB_LOCK_NOTGRANTED:
- System.out.println("Lock not granted");
- break;
- case Db.DB_LOCK_DEADLOCK:
- System.err.println("LockExample: lock_" +
- (did_get ? "get" : "put") +
- ": returned DEADLOCK");
- break;
- default:
- System.err.println("LockExample: lock_get: " + dbe.toString());
- }
+ System.err.println("LockExample: lock_get: " + dbe.toString());
}
}
System.out.println();
diff --git a/db/examples_java/src/com/sleepycat/examples/db/TpcbExample.java b/db/examples_java/src/com/sleepycat/examples/db/TpcbExample.java
new file mode 100644
index 000000000..2d2aa80c2
--- /dev/null
+++ b/db/examples_java/src/com/sleepycat/examples/db/TpcbExample.java
@@ -0,0 +1,855 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TpcbExample.java,v 11.24 2003/10/20 20:12:32 mjc Exp $
+ */
+
+package com.sleepycat.examples.db;
+
+import com.sleepycat.db.*;
+import java.io.FileNotFoundException;
+import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Random;
+import java.util.GregorianCalendar;
+
+//
+// This program implements a basic TPC/B driver program. To create the
+// TPC/B database, run with the -i (init) flag. The number of records
+// with which to populate the account, history, branch, and teller tables
+// is specified by the a, s, b, and t flags respectively. To run a TPC/B
+// test, use the n flag to indicate a number of transactions to run in
+// each thread and -T to specify the number of threads.
+//
+class TpcbExample extends DbEnv
+{
+ public static final int TELLERS_PER_BRANCH = 10;
+ public static final int ACCOUNTS_PER_TELLER = 10000;
+ public static final int HISTORY_PER_BRANCH = 2592000;
+
+ //
+ // The default configuration that adheres to TPCB scaling rules requires
+ // nearly 3 GB of space. To avoid requiring that much space for testing,
+ // we set the parameters much lower. If you want to run a valid 10 TPS
+ // configuration, uncomment the VALID_SCALING configuration
+ //
+
+ // VALID_SCALING configuration
+ /*
+ public static final int ACCOUNTS = 1000000;
+ public static final int BRANCHES = 10;
+ public static final int TELLERS = 100;
+ public static final int HISTORY = 25920000;
+ */
+
+ // TINY configuration
+ /*
+ public static final int ACCOUNTS = 1000;
+ public static final int BRANCHES = 10;
+ public static final int TELLERS = 100;
+ public static final int HISTORY = 10000;
+ */
+
+ // Default configuration
+ public static final int ACCOUNTS = 100000;
+ public static final int BRANCHES = 10;
+ public static final int TELLERS = 100;
+ public static final int HISTORY = 259200;
+
+ public static final int HISTORY_LEN = 100;
+ public static final int RECLEN = 100;
+ public static final int BEGID = 1000000;
+
+ // used by random_id()
+ public static final int ACCOUNT = 0;
+ public static final int BRANCH = 1;
+ public static final int TELLER = 2;
+
+ public static boolean verbose = false;
+ public static final String progname = "TpcbExample"; // Program name.
+
+ int accounts, branches, tellers, history;
+
+ public TpcbExample(String home,
+ int accounts, int branches, int tellers, int history,
+ int cachesize, boolean initializing, int flags)
+ throws DbException, FileNotFoundException
+ {
+ super(0);
+ this.accounts = accounts;
+ this.branches = branches;
+ this.tellers = tellers;
+ this.history = history;
+ setErrorStream(System.err);
+ setErrorPrefix(progname);
+ setCacheSize(cachesize == 0 ? 4 * 1024 * 1024 : cachesize, 0);
+
+ if ((flags & (Db.DB_TXN_NOSYNC)) != 0)
+ setFlags(Db.DB_TXN_NOSYNC, true);
+ flags &= ~(Db.DB_TXN_NOSYNC);
+ setLockDetect(Db.DB_LOCK_DEFAULT);
+
+ int local_flags = flags | Db.DB_CREATE;
+ if (initializing)
+ local_flags |= Db.DB_INIT_MPOOL;
+ else
+ local_flags |= Db.DB_INIT_TXN | Db.DB_INIT_LOCK |
+ Db.DB_INIT_LOG | Db.DB_INIT_MPOOL;
+
+ open(home, local_flags, 0); // may throw DbException
+ }
+
+ //
+ // Initialize the database to the number of accounts, branches,
+ // history records, and tellers given to the constructor.
+ //
+ public void populate()
+ {
+ Db dbp = null;
+
+ int err;
+ int balance, idnum;
+ int end_anum, end_bnum, end_tnum;
+ int start_anum, start_bnum, start_tnum;
+ int h_nelem;
+
+ idnum = BEGID;
+ balance = 500000;
+
+ h_nelem = accounts;
+
+ try {
+ dbp = new Db(this, 0);
+ dbp.setHashNumElements(h_nelem);
+ dbp.open(null, "account", null, Db.DB_HASH,
+ Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
+ } catch (Exception e1) {
+ // can be DbException or FileNotFoundException
+ errExit(e1, "Open of account file failed");
+ }
+
+ start_anum = idnum;
+ populateTable(dbp, idnum, balance, h_nelem, "account");
+ idnum += h_nelem;
+ end_anum = idnum - 1;
+ try {
+ dbp.close(0);
+ } catch (DbException e2) {
+ errExit(e2, "Account file close failed");
+ }
+
+ if (verbose)
+ System.out.println("Populated accounts: " +
+ String.valueOf(start_anum) + " - " +
+ String.valueOf(end_anum));
+
+ //
+ // Since the number of branches is very small, we want to use very
+ // small pages and only 1 key per page. This is the poor-man's way
+ // of getting key locking instead of page locking.
+ //
+ h_nelem = (int)branches;
+
+ try {
+ dbp = new Db(this, 0);
+
+ dbp.setHashNumElements(h_nelem);
+ dbp.setHashFillFactor(1);
+ dbp.setPageSize(512);
+
+ dbp.open(null, "branch", null, Db.DB_HASH,
+ Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
+ } catch (Exception e3) {
+ // can be DbException or FileNotFoundException
+ errExit(e3, "Branch file create failed");
+ }
+ start_bnum = idnum;
+ populateTable(dbp, idnum, balance, h_nelem, "branch");
+ idnum += h_nelem;
+ end_bnum = idnum - 1;
+
+ try {
+ dbp.close(0);
+ } catch (DbException dbe4) {
+ errExit(dbe4, "Close of branch file failed");
+ }
+
+ if (verbose)
+ System.out.println("Populated branches: " +
+ String.valueOf(start_bnum) + " - " +
+ String.valueOf(end_bnum));
+
+ //
+ // In the case of tellers, we also want small pages, but we'll let
+ // the fill factor dynamically adjust itself.
+ //
+ h_nelem = (int)tellers;
+
+ try {
+
+ dbp = new Db(this, 0);
+
+ dbp.setHashNumElements(h_nelem);
+ dbp.setHashFillFactor(0);
+ dbp.setPageSize(512);
+
+ dbp.open(null, "teller", null, Db.DB_HASH,
+ Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
+ } catch (Exception e5) {
+ // can be DbException or FileNotFoundException
+ errExit(e5, "Teller file create failed");
+ }
+
+ start_tnum = idnum;
+ populateTable(dbp, idnum, balance, h_nelem, "teller");
+ idnum += h_nelem;
+ end_tnum = idnum - 1;
+
+ try {
+ dbp.close(0);
+ } catch (DbException e6) {
+ errExit(e6, "Close of teller file failed");
+ }
+
+ if (verbose)
+ System.out.println("Populated tellers: "
+ + String.valueOf(start_tnum) + " - " + String.valueOf(end_tnum));
+
+ try {
+ dbp = new Db(this, 0);
+ dbp.setRecordLength(HISTORY_LEN);
+ dbp.open(null, "history", null, Db.DB_RECNO,
+ Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
+ } catch (Exception e7) {
+ // can be DbException or FileNotFoundException
+ errExit(e7, "Create of history file failed");
+ }
+
+ populateHistory(dbp);
+
+ try {
+ dbp.close(0);
+ } catch (DbException e8) {
+ errExit(e8, "Close of history file failed");
+ }
+ }
+
+ public void populateTable(
+ Db dbp, int start_id, int balance, int nrecs, String msg)
+ {
+ Defrec drec = new Defrec();
+
+ Dbt kdbt = new Dbt(drec.data);
+ kdbt.setSize(4); // sizeof(int)
+ Dbt ddbt = new Dbt(drec.data);
+ ddbt.setSize(drec.data.length); // uses whole array
+
+ try {
+ for (int i = 0; i < nrecs; i++) {
+ kdbt.setRecordNumber(start_id + (int)i);
+ drec.set_balance(balance);
+ dbp.put(null, kdbt, ddbt, Db.DB_NOOVERWRITE);
+ }
+ } catch (DbException dbe) {
+ System.err.println("Failure initializing " + msg + " file: " +
+ dbe.toString());
+ System.exit(1);
+ }
+ }
+
+ public void populateHistory(Db dbp)
+ {
+ Histrec hrec = new Histrec();
+ hrec.set_amount(10);
+
+ byte arr[] = new byte[4]; // sizeof(int)
+ int i;
+ Dbt kdbt = new Dbt(arr);
+ kdbt.setSize(arr.length);
+ Dbt ddbt = new Dbt(hrec.data);
+ ddbt.setSize(hrec.data.length);
+
+ try {
+ for (i = 1; i <= history; i++) {
+ kdbt.setRecordNumber(i);
+
+ hrec.set_aid(random_id(ACCOUNT));
+ hrec.set_bid(random_id(BRANCH));
+ hrec.set_tid(random_id(TELLER));
+
+ dbp.put(null, kdbt, ddbt, Db.DB_APPEND);
+ }
+ } catch (DbException dbe) {
+ errExit(dbe, "Failure initializing history file");
+ }
+ }
+
+ static Random rand = new Random();
+ public int random_int(int lo, int hi)
+ {
+ int ret;
+ int t;
+
+ t = rand.nextInt();
+ if (t < 0)
+ t = -t;
+ ret = (int)(((double)t / ((double)(Integer.MAX_VALUE) + 1)) *
+ (hi - lo + 1));
+ ret += lo;
+ return (ret);
+ }
+
+ public int random_id(int type)
+ {
+ int min, max, num;
+
+ max = min = BEGID;
+ num = accounts;
+ switch(type) {
+ case TELLER:
+ min += branches;
+ num = tellers;
+ // Fallthrough
+ case BRANCH:
+ if (type == BRANCH)
+ num = branches;
+ min += accounts;
+ // Fallthrough
+ case ACCOUNT:
+ max = min + num - 1;
+ }
+ return (random_int(min, max));
+ }
+
+ // The byte order is our choice.
+ //
+ static long get_int_in_array(byte[] array, int offset)
+ {
+ return
+ ((0xff & array[offset+0]) << 0) |
+ ((0xff & array[offset+1]) << 8) |
+ ((0xff & array[offset+2]) << 16) |
+ ((0xff & array[offset+3]) << 24);
+ }
+
+ // Note: Value needs to be long to avoid sign extension
+ static void set_int_in_array(byte[] array, int offset, long value)
+ {
+ array[offset+0] = (byte)((value >> 0) & 0x0ff);
+ array[offset+1] = (byte)((value >> 8) & 0x0ff);
+ array[offset+2] = (byte)((value >> 16) & 0x0ff);
+ array[offset+3] = (byte)((value >> 24) & 0x0ff);
+ }
+
+ // round 'd' to 'scale' digits, and return result as string
+ static String showRounded(double d, int scale)
+ {
+ return new BigDecimal(d).
+ setScale(scale, BigDecimal.ROUND_HALF_DOWN).toString();
+ }
+
+ public void run(int ntxns, int threads)
+ {
+ double gtps;
+ int txns, failed;
+ long curtime, starttime;
+ TxnThread[] txnList = new TxnThread[threads];
+ for (int i = 0; i < threads; i++) {
+ txnList[i] = new TxnThread("Thread " + String.valueOf(i), ntxns);
+ }
+
+ starttime = (new Date()).getTime();
+ for (int i = 0; i < threads; i++)
+ txnList[i].start();
+ for (int i = 0; i < threads; i++) {
+ try {
+ txnList[i].join();
+ } catch (Exception e1) {
+ errExit(e1, "join failed");
+ }
+ }
+ curtime = (new Date()).getTime();
+ txns = failed = 0;
+ for (int i = 0; i < threads; i++) {
+ txns += txnList[i].txns;
+ failed += txnList[i].failed;
+ }
+ gtps = (double)(txns - failed) /
+ ((curtime - starttime) / 1000.0);
+ System.out.print("\nTotal: " +
+ String.valueOf(txns) + " txns " +
+ String.valueOf(failed) + " failed ");
+ System.out.println(showRounded(gtps, 2) + " TPS");
+ }
+
+ class TxnThread extends Thread
+ {
+ private int ntxns; /* Number of txns we were asked to run. */
+ public int txns, failed; /* Number that succeeded / failed. */
+ private Db adb, bdb, hdb, tdb;
+
+ public TxnThread(String name, int ntxns)
+ {
+ super(name);
+ this.ntxns = ntxns;
+ }
+
+ public void run()
+ {
+ double gtps, itps;
+ int n, ifailed, ret;
+ long starttime, curtime, lasttime;
+
+ //
+ // Open the database files.
+ //
+ int err;
+ try {
+ adb = new Db(TpcbExample.this, 0);
+ adb.open(null, "account", null, Db.DB_UNKNOWN,
+ Db.DB_AUTO_COMMIT, 0);
+ bdb = new Db(TpcbExample.this, 0);
+ bdb.open(null, "branch", null, Db.DB_UNKNOWN,
+ Db.DB_AUTO_COMMIT, 0);
+ tdb = new Db(TpcbExample.this, 0);
+ tdb.open(null, "teller", null, Db.DB_UNKNOWN,
+ Db.DB_AUTO_COMMIT, 0);
+ hdb = new Db(TpcbExample.this, 0);
+ hdb.open(null, "history", null, Db.DB_UNKNOWN,
+ Db.DB_AUTO_COMMIT, 0);
+ } catch (DbException dbe) {
+ TpcbExample.errExit(dbe, "Open of db files failed");
+ } catch (FileNotFoundException fnfe) {
+ TpcbExample.errExit(fnfe, "Open of db files failed, missing file");
+ }
+
+ ifailed = 0;
+ starttime = (new Date()).getTime();
+ lasttime = starttime;
+ n = ntxns;
+ while (n-- > 0) {
+ txns++;
+ ret = txn();
+ if (ret != 0) {
+ failed++;
+ ifailed++;
+ }
+ if (n % 5000 == 0) {
+ curtime = (new Date()).getTime();
+ gtps = (double)(txns - failed) /
+ ((curtime - starttime) / 1000.0);
+ itps = (double)(5000 - ifailed) /
+ ((curtime - lasttime) / 1000.0);
+ System.out.print(getName() + ": " +
+ String.valueOf(txns) + " txns " +
+ String.valueOf(failed) + " failed ");
+ System.out.println(TpcbExample.showRounded(gtps, 2) +
+ " TPS (gross) " +
+ TpcbExample.this.showRounded(itps, 2) +
+ " TPS (interval)");
+ lasttime = curtime;
+ ifailed = 0;
+ }
+ }
+
+ try {
+ adb.close(0);
+ bdb.close(0);
+ tdb.close(0);
+ hdb.close(0);
+ } catch (DbException dbe2) {
+ TpcbExample.errExit(dbe2, "Close of db files failed");
+ }
+
+ System.out.println(getName() + ": " +
+ (long)txns + " transactions begun "
+ + String.valueOf(failed) + " failed");
+
+ }
+
+ //
+ // XXX Figure out the appropriate way to pick out IDs.
+ //
+ int txn()
+ {
+ Dbc acurs = null;
+ Dbc bcurs = null;
+ Dbc hcurs = null;
+ Dbc tcurs = null;
+ DbTxn t = null;
+
+ Defrec rec = new Defrec();
+ Histrec hrec = new Histrec();
+ int account, branch, teller, ret;
+
+ Dbt d_dbt = new Dbt();
+ Dbt d_histdbt = new Dbt();
+ Dbt k_dbt = new Dbt();
+ Dbt k_histdbt = new Dbt();
+
+ account = TpcbExample.this.random_id(TpcbExample.ACCOUNT);
+ branch = TpcbExample.this.random_id(TpcbExample.BRANCH);
+ teller = TpcbExample.this.random_id(TpcbExample.TELLER);
+
+ // The history key will not actually be retrieved,
+ // but it does need to be set to something.
+ byte hist_key[] = new byte[4];
+ k_histdbt.setData(hist_key);
+ k_histdbt.setSize(4 /* == sizeof(int)*/);
+
+ byte key_bytes[] = new byte[4];
+ k_dbt.setData(key_bytes);
+ k_dbt.setSize(4 /* == sizeof(int)*/);
+
+ d_dbt.setFlags(Db.DB_DBT_USERMEM);
+ d_dbt.setData(rec.data);
+ d_dbt.setUserBufferLength(rec.length());
+
+ hrec.set_aid(account);
+ hrec.set_bid(branch);
+ hrec.set_tid(teller);
+ hrec.set_amount(10);
+ // Request 0 bytes since we're just positioning.
+ d_histdbt.setFlags(Db.DB_DBT_PARTIAL);
+
+ // START TIMING
+
+ try {
+ t = TpcbExample.this.txnBegin(null, 0);
+
+ acurs = adb.cursor(t, 0);
+ bcurs = bdb.cursor(t, 0);
+ tcurs = tdb.cursor(t, 0);
+ hcurs = hdb.cursor(t, 0);
+
+ // Account record
+ k_dbt.setRecordNumber(account);
+ if (acurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)
+ throw new TpcbException("acurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ acurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
+
+ // Branch record
+ k_dbt.setRecordNumber(branch);
+ if ((ret = bcurs.get(k_dbt, d_dbt, Db.DB_SET)) != 0)
+ throw new TpcbException("bcurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ bcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
+
+ // Teller record
+ k_dbt.setRecordNumber(teller);
+ if (tcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)
+ throw new TpcbException("ccurs get failed");
+ rec.set_balance(rec.get_balance() + 10);
+ tcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
+
+ // History record
+ d_histdbt.setFlags(0);
+ d_histdbt.setData(hrec.data);
+ d_histdbt.setUserBufferLength(hrec.length());
+ if (hdb.put(t, k_histdbt, d_histdbt, Db.DB_APPEND) != 0)
+ throw(new DbException("put failed"));
+
+ acurs.close();
+ acurs = null;
+ bcurs.close();
+ bcurs = null;
+ tcurs.close();
+ tcurs = null;
+ hcurs.close();
+ hcurs = null;
+
+ // null out t in advance; if the commit fails,
+ // we don't want to abort it in the catch clause.
+ DbTxn tmptxn = t;
+ t = null;
+ tmptxn.commit(0);
+
+ // END TIMING
+ return (0);
+ } catch (Exception e) {
+ try {
+ if (acurs != null)
+ acurs.close();
+ if (bcurs != null)
+ bcurs.close();
+ if (tcurs != null)
+ tcurs.close();
+ if (hcurs != null)
+ hcurs.close();
+ if (t != null)
+ t.abort();
+ } catch (DbException dbe) {
+ // not much we can do here.
+ }
+
+ if (TpcbExample.this.verbose) {
+ System.out.println("Transaction A=" + String.valueOf(account)
+ + " B=" + String.valueOf(branch)
+ + " T=" + String.valueOf(teller) + " failed");
+ System.out.println("Reason: " + e.toString());
+ }
+ return (-1);
+ }
+ }
+ }
+
+ private static void usage()
+ {
+ System.err.println(
+ "usage: TpcbExample [-fiv] [-a accounts] [-b branches]\n" +
+ " [-c cachesize] [-h home] [-n transactions]\n" +
+ " [-T threads] [-S seed] [-s history] [-t tellers]");
+ System.exit(1);
+ }
+
+ private static void invarg(String str)
+ {
+ System.err.println("TpcbExample: invalid argument: " + str);
+ System.exit(1);
+ }
+
+ public static void errExit(Exception err, String s)
+ {
+ System.err.print(progname + ": ");
+ if (s != null) {
+ System.err.print(s + ": ");
+ }
+ System.err.println(err.toString());
+ System.exit(1);
+ }
+
+ public static void main(String argv[]) throws java.io.IOException
+ {
+ String home = "TESTDIR";
+ int accounts = ACCOUNTS;
+ int branches = BRANCHES;
+ int tellers = TELLERS;
+ int history = HISTORY;
+ int threads = 1;
+ int mpool = 0;
+ int ntxns = 0;
+ boolean iflag = false;
+ boolean txn_no_sync = false;
+ long seed = (new GregorianCalendar()).get(Calendar.SECOND);
+
+ for (int i = 0; i < argv.length; ++i) {
+ if (argv[i].equals("-a")) {
+ // Number of account records
+ if ((accounts = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-b")) {
+ // Number of branch records
+ if ((branches = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-c")) {
+ // Cachesize in bytes
+ if ((mpool = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-f")) {
+ // Fast mode: no txn sync.
+ txn_no_sync = true;
+ } else if (argv[i].equals("-h")) {
+ // DB home.
+ home = argv[++i];
+ } else if (argv[i].equals("-i")) {
+ // Initialize the test.
+ iflag = true;
+ } else if (argv[i].equals("-n")) {
+ // Number of transactions
+ if ((ntxns = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-S")) {
+ // Random number seed.
+ seed = Long.parseLong(argv[++i]);
+ if (seed <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-s")) {
+ // Number of history records
+ if ((history = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-T")) {
+ // Number of threads
+ if ((threads = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-t")) {
+ // Number of teller records
+ if ((tellers = Integer.parseInt(argv[++i])) <= 0)
+ invarg(argv[i]);
+ } else if (argv[i].equals("-v")) {
+ // Verbose option.
+ verbose = true;
+ } else {
+ usage();
+ }
+ }
+
+ rand.setSeed((int)seed);
+
+ // Initialize the database environment.
+ // Must be done in within a try block.
+ //
+ TpcbExample app = null;
+ try {
+ app = new TpcbExample(home, accounts, branches, tellers, history,
+ mpool, iflag,
+ txn_no_sync ? Db.DB_TXN_NOSYNC : 0);
+ } catch (Exception e1) {
+ errExit(e1, "initializing environment failed");
+ }
+
+ if (verbose)
+ System.out.println((long)accounts + " Accounts, "
+ + String.valueOf(branches) + " Branches, "
+ + String.valueOf(tellers) + " Tellers, "
+ + String.valueOf(history) + " History");
+
+ if (iflag) {
+ if (ntxns != 0)
+ usage();
+ app.populate();
+ } else {
+ if (ntxns == 0)
+ usage();
+ app.run(ntxns, threads);
+ }
+
+ // Shut down the application.
+
+ try {
+ app.close(0);
+ } catch (DbException dbe2) {
+ errExit(dbe2, "appexit failed");
+ }
+
+ System.exit(0);
+ }
+};
+
+// Simulate the following C struct:
+// struct Defrec {
+// u_int32_t id;
+// u_int32_t balance;
+// u_int8_t pad[RECLEN - sizeof(int) - sizeof(int)];
+// };
+
+class Defrec
+{
+ public Defrec()
+ {
+ data = new byte[TpcbExample.RECLEN];
+ }
+
+ public int length()
+ {
+ return TpcbExample.RECLEN;
+ }
+
+ public long get_id()
+ {
+ return TpcbExample.get_int_in_array(data, 0);
+ }
+
+ public void set_id(long value)
+ {
+ TpcbExample.set_int_in_array(data, 0, value);
+ }
+
+ public long get_balance()
+ {
+ return TpcbExample.get_int_in_array(data, 4);
+ }
+
+ public void set_balance(long value)
+ {
+ TpcbExample.set_int_in_array(data, 4, value);
+ }
+
+ static {
+ Defrec d = new Defrec();
+ d.set_balance(500000);
+ }
+
+ public byte[] data;
+}
+
+// Simulate the following C struct:
+// struct Histrec {
+// u_int32_t aid;
+// u_int32_t bid;
+// u_int32_t tid;
+// u_int32_t amount;
+// u_int8_t pad[RECLEN - 4 * sizeof(u_int32_t)];
+// };
+
+class Histrec
+{
+ public Histrec()
+ {
+ data = new byte[TpcbExample.RECLEN];
+ }
+
+ public int length()
+ {
+ return TpcbExample.RECLEN;
+ }
+
+ public long get_aid()
+ {
+ return TpcbExample.get_int_in_array(data, 0);
+ }
+
+ public void set_aid(long value)
+ {
+ TpcbExample.set_int_in_array(data, 0, value);
+ }
+
+ public long get_bid()
+ {
+ return TpcbExample.get_int_in_array(data, 4);
+ }
+
+ public void set_bid(long value)
+ {
+ TpcbExample.set_int_in_array(data, 4, value);
+ }
+
+ public long get_tid()
+ {
+ return TpcbExample.get_int_in_array(data, 8);
+ }
+
+ public void set_tid(long value)
+ {
+ TpcbExample.set_int_in_array(data, 8, value);
+ }
+
+ public long get_amount()
+ {
+ return TpcbExample.get_int_in_array(data, 12);
+ }
+
+ public void set_amount(long value)
+ {
+ TpcbExample.set_int_in_array(data, 12, value);
+ }
+
+ public byte[] data;
+}
+
+class TpcbException extends Exception
+{
+ TpcbException()
+ {
+ super();
+ }
+
+ TpcbException(String s)
+ {
+ super(s);
+ }
+}
diff --git a/db/fileops/fileops.src b/db/fileops/fileops.src
index 67ce97929..9e79ee156 100644
--- a/db/fileops/fileops.src
+++ b/db/fileops/fileops.src
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: fileops.src,v 1.8 2002/04/06 18:25:55 bostic Exp
+ * $Id: fileops.src,v 1.11 2003/04/24 14:19:17 bostic Exp $
*/
PREFIX __fop
@@ -25,7 +25,6 @@ INCLUDE #include "dbinc/db_page.h"
INCLUDE #include "dbinc/db_dispatch.h"
INCLUDE #include "dbinc/db_am.h"
INCLUDE #include "dbinc/log.h"
-INCLUDE #include "dbinc/rep.h"
INCLUDE #include "dbinc/txn.h"
INCLUDE #include "dbinc/fop.h"
INCLUDE
@@ -60,7 +59,9 @@ END
*
* name: file containing the page.
* appname: indicates if the name needs to go through __db_appname
- * offset: offset in the file.
+ * pgsize: page size.
+ * pageno: page number in the file.
+ * offset: offset on the page.
* page: the actual meta-data page.
* flag: non-0 indicates that this is a tempfile, so we needn't undo
* these modifications (we'll toss the file).
@@ -68,6 +69,8 @@ END
BEGIN write 145
DBT name DBT s
ARG appname u_int32_t lu
+ARG pgsize u_int32_t lu
+ARG pageno db_pgno_t lu
ARG offset u_int32_t lu
PGDBT page DBT s
ARG flag u_int32_t lu
diff --git a/db/fileops/fileops_auto.c b/db/fileops/fileops_auto.c
index f38640b74..4ebd2b1d1 100644
--- a/db/fileops/fileops_auto.c
+++ b/db/fileops/fileops_auto.c
@@ -14,7 +14,6 @@
#include "dbinc/db_dispatch.h"
#include "dbinc/db_am.h"
#include "dbinc/log.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
#include "dbinc/fop.h"
@@ -34,16 +33,23 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t mode;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___fop_create;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -67,10 +73,28 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -105,19 +129,52 @@ __fop_create_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_create_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_create_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
@@ -150,6 +207,7 @@ __fop_create_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_create_print __P((DB_ENV *, DBT *, DB_LSN *,
@@ -174,9 +232,10 @@ __fop_create_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __fop_create_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_create: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__fop_create%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -191,6 +250,7 @@ __fop_create_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tmode: %o\n", argp->mode);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -211,7 +271,6 @@ __fop_create_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__fop_create_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -258,16 +317,23 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t appname;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___fop_remove;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -291,10 +357,28 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -336,19 +420,52 @@ __fop_remove_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_remove_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_remove_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
@@ -381,6 +498,7 @@ __fop_remove_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_remove_print __P((DB_ENV *, DBT *, DB_LSN *,
@@ -405,9 +523,10 @@ __fop_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __fop_remove_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_remove: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__fop_remove%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -427,6 +546,7 @@ __fop_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tappname: %lu\n", (u_long)argp->appname);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -447,7 +567,6 @@ __fop_remove_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__fop_remove_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -482,33 +601,43 @@ __fop_remove_read(dbenv, recbuf, argpp)
/*
* PUBLIC: int __fop_write_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
- * PUBLIC: u_int32_t, const DBT *, u_int32_t, u_int32_t, const DBT *,
- * PUBLIC: u_int32_t));
+ * PUBLIC: u_int32_t, const DBT *, u_int32_t, u_int32_t, db_pgno_t,
+ * PUBLIC: u_int32_t, const DBT *, u_int32_t));
*/
int
__fop_write_log(dbenv, txnid, ret_lsnp, flags,
- name, appname, offset, page, flag)
+ name, appname, pgsize, pageno, offset, page,
+ flag)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
const DBT *name;
u_int32_t appname;
+ u_int32_t pgsize;
+ db_pgno_t pageno;
u_int32_t offset;
const DBT *page;
u_int32_t flag;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___fop_write;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -526,6 +655,8 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
+ sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
+ sizeof(u_int32_t)
+ sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (page == NULL ? 0 : page->size)
+ sizeof(u_int32_t);
if (CRYPTO_ON(dbenv)) {
@@ -534,10 +665,28 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -567,6 +716,14 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
+ uinttmp = (u_int32_t)pgsize;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pageno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
uinttmp = (u_int32_t)offset;
memcpy(bp, &uinttmp, sizeof(uinttmp));
bp += sizeof(uinttmp);
@@ -587,19 +744,52 @@ __fop_write_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_write_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_write_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
@@ -632,6 +822,7 @@ __fop_write_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_write_print __P((DB_ENV *, DBT *, DB_LSN *,
@@ -656,9 +847,10 @@ __fop_write_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __fop_write_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_write: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__fop_write%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -670,6 +862,8 @@ __fop_write_print(dbenv, dbtp, lsnp, notused2, notused3)
}
(void)printf("\n");
(void)printf("\tappname: %lu\n", (u_long)argp->appname);
+ (void)printf("\tpgsize: %lu\n", (u_long)argp->pgsize);
+ (void)printf("\tpageno: %lu\n", (u_long)argp->pageno);
(void)printf("\toffset: %lu\n", (u_long)argp->offset);
(void)printf("\tpage: ");
for (i = 0; i < argp->page.size; i++) {
@@ -680,6 +874,7 @@ __fop_write_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tflag: %lu\n", (u_long)argp->flag);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -700,7 +895,6 @@ __fop_write_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__fop_write_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -724,6 +918,14 @@ __fop_write_read(dbenv, recbuf, argpp)
bp += sizeof(uinttmp);
memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgsize = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pageno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
argp->offset = (u_int32_t)uinttmp;
bp += sizeof(uinttmp);
@@ -758,16 +960,23 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t appname;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___fop_rename;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -792,10 +1001,28 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -848,19 +1075,52 @@ __fop_rename_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_rename_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_rename_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
* PUBLIC: db_recops, void *));
@@ -893,6 +1153,7 @@ __fop_rename_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_rename_print __P((DB_ENV *, DBT *, DB_LSN *,
@@ -917,9 +1178,10 @@ __fop_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __fop_rename_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_rename: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__fop_rename%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -945,6 +1207,7 @@ __fop_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tappname: %lu\n", (u_long)argp->appname);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -965,7 +1228,6 @@ __fop_rename_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__fop_rename_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -1023,16 +1285,23 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t child;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t uinttmp;
- u_int32_t npad, rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
rectype = DB___fop_file_remove;
npad = 0;
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
txn_num = 0;
null_lsn.file = 0;
@@ -1058,10 +1327,28 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
logrec.size += npad;
}
- if ((ret = __os_malloc(dbenv,
- logrec.size, &logrec.data)) != 0)
- return (ret);
-
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
if (npad > 0)
memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
@@ -1118,19 +1405,52 @@ __fop_file_remove_log(dbenv, txnid, ret_lsnp, flags,
bp += sizeof(uinttmp);
DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
- ret = dbenv->log_put(dbenv,
- ret_lsnp, (DBT *)&logrec, flags | DB_NOCOPY);
- if (txnid != NULL && ret == 0)
- txnid->last_lsn = *ret_lsnp;
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
#ifdef LOG_DIAGNOSTIC
if (ret != 0)
(void)__fop_file_remove_print(dbenv,
(DBT *)&logrec, ret_lsnp, NULL, NULL);
#endif
- __os_free(dbenv, logrec.data);
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_file_remove_getpgnos __P((DB_ENV *, DBT *,
* PUBLIC: DB_LSN *, db_recops, void *));
@@ -1163,6 +1483,7 @@ __fop_file_remove_getpgnos(dbenv, rec, lsnp, notused1, summary)
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_file_remove_print __P((DB_ENV *, DBT *,
@@ -1187,9 +1508,10 @@ __fop_file_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
if ((ret = __fop_file_remove_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
(void)printf(
- "[%lu][%lu]__fop_file_remove: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ "[%lu][%lu]__fop_file_remove%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
@@ -1216,6 +1538,7 @@ __fop_file_remove_print(dbenv, dbtp, lsnp, notused2, notused3)
(void)printf("\tchild: 0x%lx\n", (u_long)argp->child);
(void)printf("\n");
__os_free(dbenv, argp);
+
return (0);
}
@@ -1237,7 +1560,6 @@ __fop_file_remove_read(dbenv, recbuf, argpp)
if ((ret = __os_malloc(dbenv,
sizeof(__fop_file_remove_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
-
argp->txnid = (DB_TXN *)&argp[1];
bp = recbuf;
@@ -1310,6 +1632,7 @@ __fop_init_print(dbenv, dtabp, dtabsizep)
return (0);
}
+#ifdef HAVE_REPLICATION
/*
* PUBLIC: int __fop_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
* PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
@@ -1339,6 +1662,7 @@ __fop_init_getpgnos(dbenv, dtabp, dtabsizep)
return (ret);
return (0);
}
+#endif /* HAVE_REPLICATION */
/*
* PUBLIC: int __fop_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
diff --git a/db/fileops/fop_basic.c b/db/fileops/fop_basic.c
index db3dae45c..b560d9fb1 100644
--- a/db/fileops/fop_basic.c
+++ b/db/fileops/fop_basic.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: fop_basic.c,v 1.23 2002/08/11 02:11:23 margo Exp ";
+static const char revid[] = "$Id: fop_basic.c,v 1.30 2003/07/24 01:26:22 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,9 +17,11 @@ static const char revid[] = "Id: fop_basic.c,v 1.23 2002/08/11 02:11:23 margo Ex
#endif
#include "db_int.h"
-#include "dbinc/log.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/fop.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
#include "dbinc/db_am.h"
@@ -36,59 +38,53 @@ static const char revid[] = "Id: fop_basic.c,v 1.23 2002/08/11 02:11:23 margo Ex
* else you wish to store in a file system object.
*
* PUBLIC: int __fop_create __P((DB_ENV *,
- * PUBLIC: DB_TXN *, DB_FH *, const char *, APPNAME, int));
+ * PUBLIC: DB_TXN *, DB_FH **, const char *, APPNAME, int, u_int32_t));
*/
int
-__fop_create(dbenv, txn, fhp, name, appname, mode)
+__fop_create(dbenv, txn, fhpp, name, appname, mode, flags)
DB_ENV *dbenv;
DB_TXN *txn;
- DB_FH *fhp;
+ DB_FH **fhpp;
const char *name;
APPNAME appname;
int mode;
+ u_int32_t flags;
{
- DB_FH fh;
+ DB_FH *fhp;
DB_LSN lsn;
DBT data;
+ int ret;
char *real_name;
- int do_close, ret;
- ret = 0;
real_name = NULL;
- if (fhp != NULL)
- do_close = 0;
- else {
- fhp = &fh;
- memset(fhp, 0, sizeof(fh));
- do_close = 1;
- }
+ if ((ret =
+ __db_appname(dbenv, appname, name, 0, NULL, &real_name)) != 0)
+ return (ret);
if (mode == 0)
mode = __db_omode("rw----");
- if ((ret =
- __db_appname(dbenv, appname, name, 0, NULL, &real_name)) != 0)
- goto err;
-
if (DBENV_LOGGING(dbenv)) {
memset(&data, 0, sizeof(data));
data.data = (void *)name;
data.size = (u_int32_t)strlen(name) + 1;
- if ((ret = __fop_create_log(dbenv,
- txn, &lsn, DB_FLUSH, &data, (u_int32_t)appname, mode)) != 0)
+ if ((ret = __fop_create_log(dbenv, txn, &lsn,
+ flags | DB_FLUSH, &data, (u_int32_t)appname, mode)) != 0)
goto err;
}
DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_POSTLOG, ret, name);
- ret =
- __os_open(dbenv, real_name, DB_OSO_CREATE | DB_OSO_EXCL, mode, fhp);
+ if (fhpp == NULL)
+ fhpp = &fhp;
+ ret = __os_open(
+ dbenv, real_name, DB_OSO_CREATE | DB_OSO_EXCL, mode, fhpp);
err:
DB_TEST_RECOVERY_LABEL
- if (do_close && F_ISSET(fhp, DB_FH_VALID))
- __os_closehandle(dbenv, fhp);
+ if (fhpp == &fhp && fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
if (real_name != NULL)
__os_free(dbenv, real_name);
return (ret);
@@ -99,15 +95,16 @@ DB_TEST_RECOVERY_LABEL
* Remove a file system object.
*
* PUBLIC: int __fop_remove __P((DB_ENV *,
- * PUBLIC: DB_TXN *, u_int8_t *, const char *, APPNAME));
+ * PUBLIC: DB_TXN *, u_int8_t *, const char *, APPNAME, u_int32_t));
*/
int
-__fop_remove(dbenv, txn, fileid, name, appname)
+__fop_remove(dbenv, txn, fileid, name, appname, flags)
DB_ENV *dbenv;
DB_TXN *txn;
u_int8_t *fileid;
const char *name;
APPNAME appname;
+ u_int32_t flags;
{
DB_LSN lsn;
DBT fdbt, ndbt;
@@ -121,7 +118,7 @@ __fop_remove(dbenv, txn, fileid, name, appname)
goto err;
if (txn == NULL) {
- if (fileid != NULL && (ret = dbenv->memp_nameop(
+ if (fileid != NULL && (ret = __memp_nameop(
dbenv, fileid, NULL, real_name, NULL)) != 0)
goto err;
} else {
@@ -133,7 +130,7 @@ __fop_remove(dbenv, txn, fileid, name, appname)
ndbt.data = (void *)name;
ndbt.size = (u_int32_t)strlen(name) + 1;
if ((ret = __fop_remove_log(dbenv,
- txn, &lsn, 0, &ndbt, &fdbt, appname)) != 0)
+ txn, &lsn, flags, &ndbt, &fdbt, appname)) != 0)
goto err;
}
ret = __txn_remevent(dbenv, txn, real_name, fileid);
@@ -157,34 +154,38 @@ err: if (real_name != NULL)
* handling, then we'll have to zero out regions on abort (and possibly
* log the before image of the data in the log record).
*
- * PUBLIC: int __fop_write __P((DB_ENV *, DB_TXN *, const char *, APPNAME,
- * PUBLIC: DB_FH *, u_int32_t, u_int8_t *, u_int32_t, u_int32_t));
+ * PUBLIC: int __fop_write __P((DB_ENV *,
+ * PUBLIC: DB_TXN *, const char *, APPNAME, DB_FH *, u_int32_t, db_pgno_t,
+ * PUBLIC: u_int32_t, u_int8_t *, u_int32_t, u_int32_t, u_int32_t));
*/
int
-__fop_write(dbenv, txn, name, appname, fhp, off, buf, size, istmp)
+__fop_write(dbenv,
+ txn, name, appname, fhp, pgsize, pageno, off, buf, size, istmp, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *name;
APPNAME appname;
DB_FH *fhp;
+ u_int32_t pgsize;
+ db_pgno_t pageno;
u_int32_t off;
u_int8_t *buf;
- u_int32_t size, istmp;
+ u_int32_t size, istmp, flags;
{
- DB_FH fh;
DB_LSN lsn;
DBT data, namedbt;
- char *real_name;
- int ret, t_ret, we_opened;
size_t nbytes;
+ int local_open, ret, t_ret;
+ char *real_name;
+
+ DB_ASSERT(istmp != 0);
- ret = 0;
- we_opened = 0;
+ ret = local_open = 0;
real_name = NULL;
if ((ret =
__db_appname(dbenv, appname, name, 0, NULL, &real_name)) != 0)
- goto err;
+ return (ret);
if (DBENV_LOGGING(dbenv)) {
memset(&data, 0, sizeof(data));
@@ -193,30 +194,29 @@ __fop_write(dbenv, txn, name, appname, fhp, off, buf, size, istmp)
memset(&namedbt, 0, sizeof(namedbt));
namedbt.data = (void *)name;
namedbt.size = (u_int32_t)strlen(name) + 1;
- if ((ret = __fop_write_log(dbenv,
- txn, &lsn, 0, &namedbt, appname, off, &data, istmp)) != 0)
+ if ((ret = __fop_write_log(dbenv, txn, &lsn, flags,
+ &namedbt, appname, pgsize, pageno, off, &data, istmp)) != 0)
goto err;
}
if (fhp == NULL) {
/* File isn't open; we need to reopen it. */
- if ((ret = __os_open(dbenv, real_name, 0, 0, &fh)) != 0)
+ if ((ret = __os_open(dbenv, real_name, 0, 0, &fhp)) != 0)
goto err;
- fhp = &fh;
- we_opened = 1;
- } else
- we_opened = 0;
+ local_open = 1;
+ }
/* Seek to offset. */
- if ((ret = __os_seek(dbenv, fhp, 0, 0, off, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv,
+ fhp, pgsize, pageno, off, 0, DB_OS_SEEK_SET)) != 0)
goto err;
/* Now do the write. */
if ((ret = __os_write(dbenv, fhp, buf, size, &nbytes)) != 0)
goto err;
-err: if (we_opened)
- if ((t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+err: if (local_open &&
+ (t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
ret = t_ret;
if (real_name != NULL)
@@ -228,17 +228,18 @@ err: if (we_opened)
* __fop_rename --
* Change a file's name.
*
- * PUBLIC: int __fop_rename __P((DB_ENV *,
- * PUBLIC: DB_TXN *, const char *, const char *, u_int8_t *, APPNAME));
+ * PUBLIC: int __fop_rename __P((DB_ENV *, DB_TXN *,
+ * PUBLIC: const char *, const char *, u_int8_t *, APPNAME, u_int32_t));
*/
int
-__fop_rename(dbenv, txn, oldname, newname, fid, appname)
+__fop_rename(dbenv, txn, oldname, newname, fid, appname, flags)
DB_ENV *dbenv;
DB_TXN *txn;
const char *oldname;
const char *newname;
u_int8_t *fid;
APPNAME appname;
+ u_int32_t flags;
{
DB_LSN lsn;
DBT fiddbt, new, old;
@@ -260,12 +261,12 @@ __fop_rename(dbenv, txn, oldname, newname, fid, appname)
new.size = (u_int32_t)strlen(newname) + 1;
fiddbt.data = fid;
fiddbt.size = DB_FILE_ID_LEN;
- if ((ret = __fop_rename_log(dbenv, txn, &lsn,
- DB_FLUSH, &old, &new, &fiddbt, (u_int32_t)appname)) != 0)
+ if ((ret = __fop_rename_log(dbenv, txn, &lsn, flags | DB_FLUSH,
+ &old, &new, &fiddbt, (u_int32_t)appname)) != 0)
goto err;
}
- ret = dbenv->memp_nameop(dbenv, fid, newname, o, n);
+ ret = __memp_nameop(dbenv, fid, newname, o, n);
err: if (o != oldname)
__os_free(dbenv, o);
diff --git a/db/fileops/fop_rec.c b/db/fileops/fop_rec.c
index 766b74151..5d7c90247 100644
--- a/db/fileops/fop_rec.c
+++ b/db/fileops/fop_rec.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: fop_rec.c,v 1.18 2002/08/14 20:27:01 bostic Exp ";
+static const char revid[] = "$Id: fop_rec.c,v 1.27 2003/10/07 20:23:28 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,8 +19,10 @@ static const char revid[] = "Id: fop_rec.c,v 1.18 2002/08/14 20:27:01 bostic Exp
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/fop.h"
#include "dbinc/db_am.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
/*
@@ -38,7 +40,7 @@ __fop_create_recover(dbenv, dbtp, lsnp, op, info)
db_recops op;
void *info;
{
- DB_FH fh;
+ DB_FH *fhp;
__fop_create_args *argp;
char *real_name;
int ret;
@@ -54,10 +56,13 @@ __fop_create_recover(dbenv, dbtp, lsnp, op, info)
if (DB_UNDO(op))
(void)__os_unlink(dbenv, real_name);
- else if (DB_REDO(op))
+ else if (DB_REDO(op)) {
if ((ret = __os_open(dbenv, real_name,
- DB_OSO_CREATE | DB_OSO_EXCL, argp->mode, &fh)) == 0)
- __os_closehandle(dbenv, &fh);
+ DB_OSO_CREATE | DB_OSO_EXCL, argp->mode, &fhp)) == 0)
+ (void)__os_closehandle(dbenv, fhp);
+ else
+ goto out;
+ }
*lsnp = argp->prev_lsn;
@@ -95,9 +100,10 @@ __fop_remove_recover(dbenv, dbtp, lsnp, op, info)
(const char *)argp->name.data, 0, NULL, &real_name)) != 0)
goto out;
- if (DB_REDO(op) && (ret = dbenv->memp_nameop(dbenv,
- (u_int8_t *)argp->fid.data, NULL, real_name, NULL)) != 0)
- goto out;
+ /* Its ok if the file is not there. */
+ if (DB_REDO(op))
+ (void)__memp_nameop(dbenv,
+ (u_int8_t *)argp->fid.data, NULL, real_name, NULL);
*lsnp = argp->prev_lsn;
out: if (real_name != NULL)
@@ -127,14 +133,17 @@ __fop_write_recover(dbenv, dbtp, lsnp, op, info)
REC_PRINT(__fop_write_print);
REC_NOOP_INTRO(__fop_write_read);
+ ret = 0;
if (DB_UNDO(op))
DB_ASSERT(argp->flag != 0);
else if (DB_REDO(op))
ret = __fop_write(dbenv,
- argp->txnid, argp->name.data, argp->appname, NULL,
- argp->offset, argp->page.data, argp->page.size, argp->flag);
+ argp->txnid, argp->name.data, argp->appname,
+ NULL, argp->pgsize, argp->pageno, argp->offset,
+ argp->page.data, argp->page.size, argp->flag, 0);
- *lsnp = argp->prev_lsn;
+ if (ret == 0)
+ *lsnp = argp->prev_lsn;
REC_NOOP_CLOSE;
}
@@ -154,6 +163,7 @@ __fop_rename_recover(dbenv, dbtp, lsnp, op, info)
void *info;
{
__fop_rename_args *argp;
+ DB_FH *fhp;
DBMETA *meta;
char *real_new, *real_old, *src;
int ret;
@@ -162,6 +172,7 @@ __fop_rename_recover(dbenv, dbtp, lsnp, op, info)
real_new = NULL;
real_old = NULL;
ret = 0;
+ fhp = NULL;
meta = (DBMETA *)&mbuf[0];
COMPQUIET(info, NULL);
@@ -189,20 +200,24 @@ __fop_rename_recover(dbenv, dbtp, lsnp, op, info)
* way, shape or form, incorrect, so that we should not restore
* it.
*/
- if (__fop_read_meta(
- dbenv, src, mbuf, DBMETASIZE, NULL, 1, NULL, 0) != 0)
+ if (__os_open(dbenv, src, 0, 0, &fhp) != 0)
+ goto done;
+ if (__fop_read_meta(dbenv,
+ src, mbuf, DBMETASIZE, fhp, 1, NULL) != 0)
goto done;
if (__db_chk_meta(dbenv, NULL, meta, 1) != 0)
goto done;
if (memcmp(argp->fileid.data, meta->uid, DB_FILE_ID_LEN) != 0)
goto done;
+ (void)__os_closehandle(dbenv, fhp);
+ fhp = NULL;
}
if (DB_UNDO(op))
- (void)dbenv->memp_nameop(dbenv, fileid,
+ (void)__memp_nameop(dbenv, fileid,
(const char *)argp->oldname.data, real_new, real_old);
if (DB_REDO(op))
- (void)dbenv->memp_nameop(dbenv, fileid,
+ (void)__memp_nameop(dbenv, fileid,
(const char *)argp->newname.data, real_old, real_new);
done: *lsnp = argp->prev_lsn;
@@ -210,6 +225,8 @@ out: if (real_new != NULL)
__os_free(dbenv, real_new);
if (real_old != NULL)
__os_free(dbenv, real_old);
+ if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
REC_NOOP_CLOSE;
}
@@ -235,14 +252,16 @@ __fop_file_remove_recover(dbenv, dbtp, lsnp, op, info)
{
__fop_file_remove_args *argp;
DBMETA *meta;
+ DB_FH *fhp;
char *real_name;
int is_real, is_tmp, ret;
size_t len;
u_int8_t mbuf[DBMETASIZE];
u_int32_t cstat;
- real_name = NULL;
+ fhp = NULL;
is_real = is_tmp = 0;
+ real_name = NULL;
meta = (DBMETA *)&mbuf[0];
REC_PRINT(__fop_file_remove_print);
REC_NOOP_INTRO(__fop_file_remove_read);
@@ -260,8 +279,10 @@ __fop_file_remove_recover(dbenv, dbtp, lsnp, op, info)
goto out;
/* Verify that we are manipulating the correct file. */
- if ((ret = __fop_read_meta(dbenv,
- real_name, mbuf, DBMETASIZE, NULL, 1, &len, 0)) != 0) {
+ len = 0;
+ if (__os_open(dbenv, real_name, 0, 0, &fhp) != 0 ||
+ (ret = __fop_read_meta(dbenv, real_name,
+ mbuf, DBMETASIZE, fhp, 1, &len)) != 0) {
/*
* If len is non-zero, then the file exists and has something
* in it, but that something isn't a full meta-data page, so
@@ -290,20 +311,26 @@ __fop_file_remove_recover(dbenv, dbtp, lsnp, op, info)
/* File exists and is the one that we were removing. */
cstat = TXN_COMMIT;
}
+ if (fhp != NULL) {
+ (void)__os_closehandle(dbenv, fhp);
+ fhp = NULL;
+ }
if (DB_UNDO(op)) {
/* On the backward pass, we leave a note for the child txn. */
if ((ret = __db_txnlist_update(dbenv,
- info, argp->child, cstat, NULL)) == DB_NOTFOUND)
+ info, argp->child, cstat, NULL)) == TXN_NOTFOUND)
ret = __db_txnlist_add(dbenv,
info, argp->child, cstat, NULL);
+ if (ret != 0)
+ goto out;
} else if (DB_REDO(op)) {
/*
* On the forward pass, check if someone recreated the
* file while we weren't looking.
*/
if (cstat == TXN_COMMIT)
- (void)dbenv->memp_nameop(dbenv,
+ (void)__memp_nameop(dbenv,
is_real ? argp->real_fid.data : argp->tmp_fid.data,
NULL, real_name, NULL);
}
@@ -313,5 +340,7 @@ done: *lsnp = argp->prev_lsn;
out: if (real_name != NULL)
__os_free(dbenv, real_name);
+ if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
REC_NOOP_CLOSE;
}
diff --git a/db/fileops/fop_util.c b/db/fileops/fop_util.c
index a2c5107b8..516378b3a 100644
--- a/db/fileops/fop_util.c
+++ b/db/fileops/fop_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: fop_util.c,v 1.52 2002/09/10 02:41:42 bostic Exp ";
+static const char revid[] = "$Id: fop_util.c,v 1.83 2003/10/15 20:29:59 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -25,6 +25,7 @@ static const char revid[] = "Id: fop_util.c,v 1.52 2002/09/10 02:41:42 bostic Ex
#include "dbinc/db_am.h"
#include "dbinc/fop.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
#include "dbinc/log.h"
#include "dbinc/txn.h"
@@ -43,29 +44,31 @@ static int __fop_set_pgsize __P((DB *, DB_FH *, const char *));
__lockval = 1; \
__dbt.data = &__lockval; \
__dbt.size = sizeof(__lockval); \
- if ((ret = (ENV)->lock_get((ENV), (ID), \
+ if ((ret = __lock_get((ENV), (ID), \
0, &__dbt, DB_LOCK_WRITE, (L))) != 0) \
goto err; \
} \
} while (0)
#define REL_ENVLOCK(ENV, L) \
- (!LOCK_ISSET(*(L)) ? 0 : (ENV)->lock_put((ENV), (L)))
+ (!LOCK_ISSET(*(L)) ? 0 : __lock_put((ENV), (L)))
/*
- * If our caller is doing fcntl(2) locking, then we can't close it
- * because that would discard the caller's lock. Otherwise, close
- * the handle.
+ * If we open a file handle and our caller is doing fcntl(2) locking,
+ * we can't close the handle because that would discard the caller's
+ * lock. Save it until we close or refresh the DB handle.
*/
#define CLOSE_HANDLE(D, F) { \
- if (F_ISSET((F), DB_FH_VALID)) { \
+ if ((F) != NULL) { \
if (LF_ISSET(DB_FCNTL_LOCKING)) \
(D)->saved_open_fhp = (F); \
- else if ((t_ret = __os_closehandle((D)->dbenv,(F))) != 0) { \
+ else if ((t_ret = \
+ __os_closehandle((D)->dbenv, (F))) != 0) { \
if (ret == 0) \
ret = t_ret; \
goto err; \
} \
+ (F) = NULL; \
} \
}
@@ -94,7 +97,8 @@ __fop_lock_handle(dbenv, dbp, locker, mode, elock, flags)
DB_LOCK_ILOCK lock_desc;
int ret;
- if (!LOCKING_ON(dbenv) || F_ISSET(dbp, DB_AM_COMPENSATE))
+ if (!LOCKING_ON(dbenv) ||
+ F_ISSET(dbp, DB_AM_COMPENSATE | DB_AM_RECOVER))
return (0);
/*
@@ -116,7 +120,7 @@ __fop_lock_handle(dbenv, dbp, locker, mode, elock, flags)
fileobj.size = sizeof(lock_desc);
DB_TEST_SUBLOCKS(dbenv, flags);
if (elock == NULL)
- ret = dbenv->lock_get(dbenv, locker,
+ ret = __lock_get(dbenv, locker,
flags, &fileobj, mode, &dbp->handle_lock);
else {
reqs[0].op = DB_LOCK_PUT;
@@ -156,6 +160,30 @@ __fop_lock_handle(dbenv, dbp, locker, mode, elock, flags)
* buffer cache or obtaining a lock (we use this unique fileid to lock
* as well as to identify like files in the cache).
*
+ * There are a couple of idiosyncracies that this code must support, in
+ * particular, DB_TRUNCATE and DB_FCNTL_LOCKING. First, we disallow
+ * DB_TRUNCATE in the presence of transactions, since opening a file with
+ * O_TRUNC will result in data being lost in an unrecoverable fashion.
+ * We also disallow DB_TRUNCATE if locking is enabled, because even in
+ * the presence of locking, we cannot avoid race conditions, so allowing
+ * DB_TRUNCATE with locking would be misleading. See SR [#7345] for more
+ * details.
+ *
+ * However, if you are running with neither locking nor transactions, then
+ * you can specify DB_TRUNCATE, and if you do so, we will truncate the file
+ * regardless of its contents.
+ *
+ * FCNTL locking introduces another set of complications. First, the only
+ * reason we support the DB_FCNTL_LOCKING flag is for historic compatibility
+ * with programs like Sendmail and Postfix. In these cases, the caller may
+ * already have a lock on the file; we need to make sure that any file handles
+ * we open remain open, because if we were to close them, the lock held by the
+ * caller would go away. Furthermore, Sendmail and/or Postfix need the ability
+ * to create databases in empty files. So, when you're doing FCNTL locking,
+ * it's reasonable that you are trying to create a database into a 0-length
+ * file and we allow it, while under normal conditions, we do not create
+ * databases if the files already exist and are not Berkeley DB files.
+ *
* PUBLIC: int __fop_file_setup __P((DB *,
* PUBLIC: DB_TXN *, const char *, int, u_int32_t, u_int32_t *));
*/
@@ -168,40 +196,26 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
u_int32_t flags, *retidp;
{
DB_ENV *dbenv;
- DB_FH fh, *fhp;
- DB_LOCK elock, tmp_lock;
+ DB_FH *fhp;
+ DB_LOCK elock;
DB_TXN *stxn;
- char *real_name, *real_tmpname, *tmpname;
- db_lockmode_t lmode;
- int created_fhp, created_locker, ret, tmp_created, t_ret, truncating;
size_t len;
- u_int32_t locker, oflags;
+ u_int32_t dflags, locker, oflags;
u_int8_t mbuf[DBMETASIZE];
+ int created_locker, ret, t_ret, tmp_created, truncating;
+ char *real_name, *real_tmpname, *tmpname;
DB_ASSERT(name != NULL);
*retidp = TXN_INVALID;
dbenv = dbp->dbenv;
+ fhp = NULL;
LOCK_INIT(elock);
- LOCK_INIT(tmp_lock);
stxn = NULL;
- created_fhp = created_locker = 0;
+ created_locker = tmp_created = truncating = 0;
real_name = real_tmpname = tmpname = NULL;
- tmp_created = truncating = 0;
-
- /*
- * If we open a file handle and our caller is doing fcntl(2) locking,
- * we can't close it because that would discard the caller's lock.
- * Save it until we close or refresh the DB handle.
- */
- if (LF_ISSET(DB_FCNTL_LOCKING)) {
- if ((ret = __os_malloc(dbenv, sizeof(*fhp), &fhp)) != 0)
- return (ret);
- created_fhp = 1;
- } else
- fhp = &fh;
- memset(fhp, 0, sizeof(*fhp));
+ dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
/*
* Get a lockerid for this handle. There are paths through queue
@@ -214,6 +228,7 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
goto err;
created_locker = 1;
}
+ LOCK_INIT(dbp->handle_lock);
locker = txn == NULL ? dbp->lid : txn->txnid;
@@ -229,119 +244,122 @@ __fop_file_setup(dbp, txn, name, mode, flags, retidp)
oflags = 0;
if (LF_ISSET(DB_RDONLY))
oflags |= DB_OSO_RDONLY;
+ if (LF_ISSET(DB_TRUNCATE))
+ oflags |= DB_OSO_TRUNC;
retry: if (!F_ISSET(dbp, DB_AM_COMPENSATE))
GET_ENVLOCK(dbenv, locker, &elock);
if ((ret = __os_exists(real_name, NULL)) == 0) {
- if (LF_ISSET(DB_EXCL)) {
- ret = EEXIST;
+ /*
+ * If the file exists, there are 5 possible cases:
+ * 1. DB_EXCL was specified so this is an error, unless
+ * this is a file left around after a rename and we
+ * are in the same transaction. This gets decomposed
+ * into several subcases, because we check for various
+ * errors before we know we're in rename.
+ * 2. We are truncating, and it doesn't matter what kind
+ * of file it is, we should open/create it.
+ * 3. It is 0-length, we are not doing transactions (i.e.,
+ * we are sendmail), we should open/create into it.
+ * 4. Is it a Berkeley DB file and we should simply open it.
+ * 5. It is not a BDB file and we should return an error.
+ */
+
+ /* We have to open the file. */
+reopen: if ((ret = __os_open(dbenv, real_name, oflags, 0, &fhp)) != 0)
goto err;
+
+ /* Case 2: DB_TRUNCATE: we must do the creation in place. */
+ if (LF_ISSET(DB_TRUNCATE)) {
+ if (LF_ISSET(DB_EXCL)) {
+ /* Case 1a: DB_EXCL and DB_TRUNCATE. */
+ ret = EEXIST;
+ goto err;
+ }
+ tmpname = (char *)name;
+ goto creat2;
}
- /*
- * This is special handling for applications that
- * are locking outside of Berkeley DB (e.g., Sendmail,
- * Postfix). If we are relying on external FCNTL
- * locking and we're going to truncate the file, we
- * cannot first open the file to verify that it is
- * a DB file and then close/reopen to do the truncate
- * since that will lose the external FCNTL lock.
- * So, we special case it and leap right into the
- * truncate code.
- */
- if (LF_ISSET(DB_FCNTL_LOCKING) && LF_ISSET(DB_TRUNCATE))
- goto do_trunc;
+ /* Cases 1,3-5: we need to read the meta-data page. */
+ ret = __fop_read_meta(dbenv, real_name, mbuf, sizeof(mbuf), fhp,
+ LF_ISSET(DB_FCNTL_LOCKING) && txn == NULL ? 1 : 0, &len);
-reopen: ret = __fop_read_meta(dbenv, real_name,
- mbuf, sizeof(mbuf), fhp,
- LF_ISSET(DB_FCNTL_LOCKING) && txn == NULL ? 1 : 0,
- &len, oflags);
- /*
- * This is special handling for applications that are doing
- * file locking outside of Berkeley DB (e.g., Sendmail,
- * Postfix). So, if you're doing FCNTL_LOCKING and are non
- * transactional, we're going to treat 0-length files as a
- * special case and let you proceed.
- */
- if (ret != 0 &&
- LF_ISSET(DB_FCNTL_LOCKING) && txn == NULL && len == 0) {
- tmpname = (char *)real_name;
- real_name = NULL;
+ /* Case 3: 0-length, no txns. */
+ if (ret != 0 && len == 0 && txn == NULL) {
+ if (LF_ISSET(DB_EXCL)) {
+ /* Case 1b: DB_EXCL and 0-lenth file exists. */
+ ret = EEXIST;
+ goto err;
+ }
+ tmpname = (char *)name;
goto creat2;
}
+ /* Case 5: Invalid file. */
if (ret != 0)
goto err;
+ /* Case 4: This is a valid file. */
if ((ret = __db_meta_setup(dbenv,
dbp, real_name, (DBMETA *)mbuf, flags, 1)) != 0)
goto err;
/* Now, get our handle lock. */
- lmode = LF_ISSET(DB_TRUNCATE) ? DB_LOCK_WRITE : DB_LOCK_READ;
if ((ret = __fop_lock_handle(dbenv,
- dbp, locker, lmode, NULL, DB_LOCK_NOWAIT)) == 0) {
+ dbp, locker, DB_LOCK_READ, NULL, DB_LOCK_NOWAIT)) == 0) {
if ((ret = REL_ENVLOCK(dbenv, &elock)) != 0)
goto err;
- } else {
+ } else if (ret == DB_LOCK_NOTGRANTED) {
/*
- * If someone is doing FCNTL locking outside of us,
- * then we should never have a lock conflict and
- * should never get to here. We need to assert that
- * because we are about to close the fd which will
- * release the FCNTL locks.
+ * We were unable to acquire the handle lock without
+ * blocking. The fact that we are blocking might mean
+ * that someone else is trying to delete the file.
+ * Since some platforms cannot delete files while they
+ * are open (Windows), we are going to have to close
+ * the file. This would be a problem if we were doing
+ * FCNTL locking, because our closing the handle would
+ * release the FCNTL locks. Fortunately, if we are
+ * doing FCNTL locking, then we should never fail to
+ * acquire our handle lock, so we should never get here.
+ * We assert it here to make sure we aren't destroying
+ * any application level FCNTL semantics.
*/
DB_ASSERT(!LF_ISSET(DB_FCNTL_LOCKING));
if ((ret = __os_closehandle(dbenv, fhp)) != 0)
goto err;
+ fhp = NULL;
ret = __fop_lock_handle(dbenv,
- dbp, locker, lmode, &elock, 0);
+ dbp, locker, DB_LOCK_READ, &elock, 0);
if (ret == DB_LOCK_NOTEXIST)
goto retry;
if (ret != 0)
goto err;
/*
- * XXX I need to convince myself that I don't need
- * to re-read the metadata page here.
- * XXX If you do need to re-read it you'd better
- * decrypt it too...
+ * XXX
+ * I need to convince myself that I don't need to
+ * re-read the metadata page here. If you do need
+ * to re-read it you'd better decrypt it too...
*/
- if ((ret = __os_open(dbenv, real_name, 0, 0, fhp)) != 0)
+ if ((ret =
+ __os_open(dbenv, real_name, 0, 0, &fhp)) != 0)
goto err;
- }
+ } else
+ goto err;
- /*
- * Check for a truncate which needs to leap over to the
- * create case.
- */
- if (LF_ISSET(DB_TRUNCATE)) {
- /*
- * Sadly, we need to close and reopen the handle
- * in order to do the actual truncate. We couldn't
- * do the truncate on the initial open because we
- * needed to read the old file-id in order to lock.
- */
- if ((ret = __os_closehandle(dbenv, fhp)) != 0)
- goto err;
-do_trunc: if ((ret = __os_open(dbenv,
- real_name, DB_OSO_TRUNC, 0, fhp)) != 0)
- goto err;
- /*
- * This is not-transactional, so we'll do the
- * open/create in-place.
- */
- tmp_lock = dbp->handle_lock;
- truncating = 1;
- tmpname = (char *)name;
- goto creat2;
- }
+ /* If we got here, then we now have the handle lock. */
/*
- * Check for a file in the midst of a rename
+ * Check for a file in the midst of a rename. If we find that
+ * the file is in the midst of a rename, it must be the case
+ * that it is in our current transaction (else we would still
+ * be blocking), so we can continue along and create a new file
+ * with the same name. In that case, we have to close the file
+ * handle because we reuse it below.
*/
if (F_ISSET(dbp, DB_AM_IN_RENAME)) {
if (LF_ISSET(DB_CREATE)) {
- F_CLR(dbp, DB_AM_IN_RENAME);
+ if ((ret = __os_closehandle(dbenv, fhp)) != 0)
+ goto err;
goto create;
} else {
ret = ENOENT;
@@ -349,7 +367,20 @@ do_trunc: if ((ret = __os_open(dbenv,
}
}
- CLOSE_HANDLE(dbp, fhp);
+ /*
+ * Now, case 1: check for DB_EXCL, because the file that exists
+ * is not in the middle of a rename, so we have an error. This
+ * is a weird case, but we need to make sure that we don't
+ * continue to hold the handle lock, since technically, we
+ * should not have been allowed to open it.
+ */
+ if (LF_ISSET(DB_EXCL)) {
+ if (LOCK_ISSET(dbp->handle_lock))
+ __lock_put(dbenv, &dbp->handle_lock);
+ LOCK_INIT(dbp->handle_lock);
+ ret = EEXIST;
+ goto err;
+ }
goto done;
}
@@ -359,22 +390,39 @@ do_trunc: if ((ret = __os_open(dbenv,
ret = 0;
/*
- * Need to create file; we need to set up the file,
- * the fileid and the locks. Then we need to call
- * the appropriate routines to create meta-data pages.
+ * We need to create file, which means that we need to set up the file,
+ * the fileid and the locks. Then we need to call the appropriate
+ * routines to create meta-data pages.
*/
if ((ret = REL_ENVLOCK(dbenv, &elock)) != 0)
goto err;
-create: if ((ret = __db_backup_name(dbenv, name, txn, &tmpname)) != 0)
+create: if (txn != NULL && IS_REP_CLIENT(dbenv)) {
+ __db_err(dbenv,
+ "Transactional create on replication client disallowed");
+ ret = EINVAL;
+ goto err;
+ }
+ if ((ret = __db_backup_name(dbenv, name, txn, &tmpname)) != 0)
goto err;
if (TXN_ON(dbenv) && txn != NULL &&
- (ret = dbenv->txn_begin(dbenv, txn, &stxn, 0)) != 0)
+ (ret = __txn_begin(dbenv, txn, &stxn, 0)) != 0)
goto err;
if ((ret = __fop_create(dbenv,
- stxn, fhp, tmpname, DB_APP_DATA, mode)) != 0)
+ stxn, &fhp, tmpname, DB_APP_DATA, mode, dflags)) != 0) {
+ /*
+ * If we don't have transactions there is a race on
+ * creating the temp file.
+ */
+ if (!TXN_ON(dbenv) && ret == EEXIST) {
+ __os_free(dbenv, tmpname);
+ tmpname = NULL;
+ goto retry;
+ }
goto err;
+ }
tmp_created = 1;
+
creat2: if ((ret = __db_appname(dbenv,
DB_APP_DATA, tmpname, 0, NULL, &real_tmpname)) != 0)
goto err;
@@ -390,27 +438,38 @@ creat2: if ((ret = __db_appname(dbenv,
if ((ret = __db_new_file(dbp, stxn, fhp, tmpname)) != 0)
goto err;
+
+ /*
+ * We need to close the handle here on platforms where remove and
+ * rename fail if a handle is open (including Windows).
+ */
CLOSE_HANDLE(dbp, fhp);
- /* Now move the file into place. */
+ /*
+ * Now move the file into place unless we are creating in place (because
+ * we created a database in a file that started out 0-length).
+ */
if (!F_ISSET(dbp, DB_AM_COMPENSATE))
GET_ENVLOCK(dbenv, locker, &elock);
- if (!truncating && __os_exists(real_name, NULL) == 0) {
+
+ if (F_ISSET(dbp, DB_AM_IN_RENAME)) {
+ F_CLR(dbp, DB_AM_IN_RENAME);
+ __txn_remrem(dbenv, txn, real_name);
+ } else if (name == tmpname) {
+ /* We created it in place. */
+ } else if (__os_exists(real_name, NULL) == 0) {
/*
* Someone managed to create the file; remove our temp
* and try to open the file that now exists.
*/
(void)__fop_remove(dbenv,
- NULL, dbp->fileid, tmpname, DB_APP_DATA);
- if (LOCKING_ON(dbenv))
- dbenv->lock_put(dbenv, &dbp->handle_lock);
+ NULL, dbp->fileid, tmpname, DB_APP_DATA, dflags);
+ if (LOCK_ISSET(dbp->handle_lock))
+ __lock_put(dbenv, &dbp->handle_lock);
LOCK_INIT(dbp->handle_lock);
- /* If we have a saved handle; close it. */
- if (LF_ISSET(DB_FCNTL_LOCKING))
- (void)__os_closehandle(dbenv, fhp);
if (stxn != NULL) {
- ret = stxn->abort(stxn);
+ ret = __txn_abort(stxn);
stxn = NULL;
}
if (ret != 0)
@@ -418,21 +477,16 @@ creat2: if ((ret = __db_appname(dbenv,
goto reopen;
}
- /* We've successfully created, move the file into place. */
if ((ret = __fop_lock_handle(dbenv,
dbp, locker, DB_LOCK_WRITE, &elock, 0)) != 0)
goto err;
- if (!truncating && (ret = __fop_rename(dbenv,
- stxn, tmpname, name, dbp->fileid, DB_APP_DATA)) != 0)
- goto err;
-
- /* If this was a truncate; release lock on the old file. */
- if (LOCK_ISSET(tmp_lock) && (ret = __lock_put(dbenv, &tmp_lock)) != 0)
+ if (tmpname != name && (ret = __fop_rename(dbenv,
+ stxn, tmpname, name, dbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
if (stxn != NULL) {
*retidp = stxn->txnid;
- ret = stxn->commit(stxn, 0);
+ ret = __txn_commit(stxn, 0);
stxn = NULL;
} else
*retidp = TXN_INVALID;
@@ -445,15 +499,12 @@ creat2: if ((ret = __db_appname(dbenv,
if (0) {
errmsg: __db_err(dbenv, "%s: %s", name, db_strerror(ret));
-err: if (stxn != NULL)
- (void)stxn->abort(stxn);
+err: CLOSE_HANDLE(dbp, fhp);
+ if (stxn != NULL)
+ (void)__txn_abort(stxn);
if (tmp_created && txn == NULL)
(void)__fop_remove(dbenv,
- NULL, NULL, tmpname, DB_APP_DATA);
- if (F_ISSET(fhp, DB_FH_VALID))
- CLOSE_HANDLE(dbp, fhp);
- if (LOCK_ISSET(tmp_lock))
- __lock_put(dbenv, &tmp_lock);
+ NULL, NULL, tmpname, DB_APP_DATA, dflags);
if (LOCK_ISSET(dbp->handle_lock) && txn == NULL)
__lock_put(dbenv, &dbp->handle_lock);
if (LOCK_ISSET(elock))
@@ -462,8 +513,6 @@ err: if (stxn != NULL)
(void)__lock_id_free(dbenv, dbp->lid);
dbp->lid = DB_LOCK_INVALIDID;
}
- if (created_fhp && !F_ISSET(fhp, DB_FH_VALID))
- __os_free(dbenv, fhp);
}
done: /*
@@ -471,12 +520,13 @@ done: /*
* exact same string, so we need to make sure that we do not
* free twice.
*/
- if (!truncating && tmpname != NULL && tmpname != real_name)
+ if (!truncating && tmpname != NULL && tmpname != name)
__os_free(dbenv, tmpname);
if (real_name != NULL)
__os_free(dbenv, real_name);
if (real_tmpname != NULL)
__os_free(dbenv, real_tmpname);
+ CLOSE_HANDLE(dbp, fhp);
return (ret);
}
@@ -552,13 +602,20 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
{
DB *mdbp;
DB_ENV *dbenv;
- int do_remove, ret;
+ int ret, t_ret;
mdbp = NULL;
dbenv = dbp->dbenv;
if ((ret = __db_master_open(dbp, txn, mname, flags, mode, &mdbp)) != 0)
return (ret);
+ /*
+ * If we created this file, then we need to set the DISCARD flag so
+ * that if we fail in the middle of this routine, we discard from the
+ * mpool any pages that we just created.
+ */
+ if (F_ISSET(mdbp, DB_AM_CREATED))
+ F_SET(mdbp, DB_AM_DISCARD);
/*
* We are going to close this instance of the master, so we can
@@ -569,7 +626,7 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
mdbp->saved_open_fhp = NULL;
}
- /* Now copy the pagesize. */
+ /* Copy the pagesize and set the sub-database flag. */
dbp->pgsize = mdbp->pgsize;
F_SET(dbp, DB_AM_SUBDB);
@@ -602,8 +659,29 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
DB_LOCK_WRITE : DB_LOCK_READ, NULL, 0)) != 0)
goto err;
- if ((ret = __db_init_subdb(mdbp, dbp, name, txn)) != 0)
+ if ((ret = __db_init_subdb(mdbp, dbp, name, txn)) != 0) {
+ /*
+ * If there was no tranaction and we created this database,
+ * then we need to undo the update of the master database.
+ */
+ if (F_ISSET(dbp, DB_AM_CREATED) && txn != NULL)
+ (void)__db_master_update(mdbp, dbp, txn,
+ name, dbp->type, MU_REMOVE, NULL, 0);
+ F_CLR(dbp, DB_AM_CREATED);
goto err;
+ }
+
+ /*
+ * XXX
+ * This should have been done at the top of this routine. The problem
+ * is that __db_init_subdb() uses "standard" routines to process the
+ * meta-data page and set information in the DB handle based on it.
+ * Those routines have to deal with swapped pages and will normally set
+ * the DB_AM_SWAP flag. However, we use the master's metadata page and
+ * that has already been swapped, so they get the is-swapped test wrong.
+ */
+ F_CLR(dbp, DB_AM_SWAP);
+ F_SET(dbp, F_ISSET(mdbp, DB_AM_SWAP));
/*
* In the file create case, these happen in separate places so we have
@@ -622,6 +700,13 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
F_CLR(mdbp, DB_AM_DISCARD);
}
+ if (0) {
+err:
+DB_TEST_RECOVERY_LABEL
+ if (LOCK_ISSET(dbp->handle_lock) && txn == NULL)
+ __lock_put(dbenv, &dbp->handle_lock);
+ }
+
/*
* The master's handle lock is under the control of the
* subdb (it acquired the master's locker). We want to
@@ -632,36 +717,20 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
* before we register this event, we'd better remove any
* events that we've already registered for the master.
*/
-
if (!F_ISSET(dbp, DB_AM_RECOVER) && txn != NULL) {
/* Unregister old master events. */
__txn_remlock(dbenv,
txn, &mdbp->handle_lock, DB_LOCK_INVALIDID);
/* Now register the new event. */
- if ((ret = __txn_lockevent(dbenv,
- txn, dbp, &mdbp->handle_lock, dbp->lid)) != 0)
- goto err;
+ if ((t_ret = __txn_lockevent(dbenv, txn, dbp,
+ &mdbp->handle_lock, dbp->lid == DB_LOCK_INVALIDID ?
+ mdbp->lid : dbp->lid)) != 0 && ret == 0)
+ ret = t_ret;
}
LOCK_INIT(mdbp->handle_lock);
- return (__db_close_i(mdbp, txn, 0));
-
-err:
-DB_TEST_RECOVERY_LABEL
- if (LOCK_ISSET(dbp->handle_lock) && txn == NULL)
- __lock_put(dbenv, &dbp->handle_lock);
-
- /* If we created the master file then we need to remove it. */
- if (mdbp != NULL) {
- do_remove = F_ISSET(mdbp, DB_AM_CREATED) ? 1 : 0;
- if (do_remove)
- F_SET(mdbp, DB_AM_DISCARD);
- (void)__db_close_i(mdbp, txn, 0);
- if (do_remove) {
- (void)db_create(&mdbp, dbp->dbenv, 0);
- (void)__db_remove_i(mdbp, txn, mname, NULL);
- }
- }
+ if ((t_ret =__db_close(mdbp, txn, 0)) && ret == 0)
+ ret = t_ret;
return (ret);
}
@@ -683,7 +752,7 @@ __fop_remove_setup(dbp, txn, name, flags)
DB_FH *fhp;
DB_LOCK elock;
u_int8_t mbuf[DBMETASIZE];
- int ret;
+ int cnt, ret;
COMPQUIET(flags, 0);
dbenv = dbp->dbenv;
@@ -691,7 +760,7 @@ __fop_remove_setup(dbp, txn, name, flags)
LOCK_INIT(elock);
/* Create locker if necessary. */
- if (LOCKING_ON(dbenv)) {
+retry: if (LOCKING_ON(dbenv)) {
if (txn != NULL)
dbp->lid = txn->txnid;
else if (dbp->lid == DB_LOCK_INVALIDID) {
@@ -711,8 +780,7 @@ __fop_remove_setup(dbp, txn, name, flags)
* that we shouldn't close the handle.
*/
fhp = dbp->saved_open_fhp;
- DB_ASSERT(LF_ISSET(DB_FCNTL_LOCKING) ||
- fhp == NULL || !F_ISSET(fhp, DB_FH_VALID));
+ DB_ASSERT(LF_ISSET(DB_FCNTL_LOCKING) || fhp == NULL);
/*
* Lock environment to protect file open. That will enable us to
@@ -720,35 +788,87 @@ __fop_remove_setup(dbp, txn, name, flags)
* the handle.
*/
GET_ENVLOCK(dbenv, dbp->lid, &elock);
+ if (fhp == NULL &&
+ (ret = __os_open(dbenv, name, DB_OSO_RDONLY, 0, &fhp)) != 0)
+ goto err;
if ((ret = __fop_read_meta(dbenv,
- name, mbuf, sizeof(mbuf), fhp, 0, NULL, 0)) != 0)
+ name, mbuf, sizeof(mbuf), fhp, 0, NULL)) != 0)
goto err;
if ((ret =
__db_meta_setup(dbenv, dbp, name, (DBMETA *)mbuf, flags, 1)) != 0)
goto err;
- /* Now, release the environment and get the handle lock. */
+ /*
+ * Now, get the handle lock. We first try with NOWAIT, because if
+ * we have to wait, we're going to have to close the file and reopen
+ * it, so that if there is someone else removing it, our open doesn't
+ * prevent that.
+ */
if ((ret = __fop_lock_handle(dbenv,
- dbp, dbp->lid, DB_LOCK_WRITE, &elock, 0)) != 0)
+ dbp, dbp->lid, DB_LOCK_WRITE, NULL, DB_LOCK_NOWAIT)) != 0) {
+ /*
+ * Close the file, block on the lock, clean up the dbp, and
+ * then start all over again.
+ */
+ if (!LF_ISSET(DB_FCNTL_LOCKING)) {
+ (void)__os_closehandle(dbenv, fhp);
+ fhp = NULL;
+ }
+ if (ret == DB_LOCK_NOTEXIST) {
+ if ((ret = REL_ENVLOCK(dbenv, &elock)) != 0)
+ goto err;
+ } else if (ret != DB_LOCK_NOTGRANTED)
+ goto err;
+ else if ((ret = __fop_lock_handle(dbenv,
+ dbp, dbp->lid, DB_LOCK_WRITE, &elock, 0)) != 0 &&
+ ret != DB_LOCK_NOTEXIST)
+ goto err;
+
+ if (txn != NULL)
+ dbp->lid = DB_LOCK_INVALIDID;
+ (void)__db_refresh(dbp, txn, DB_NOSYNC, NULL);
+ goto retry;
+ } else if ((ret = REL_ENVLOCK(dbenv, &elock)) != 0)
goto err;
- return (0);
+ /* Check if the file is already open. */
+ if ((ret = __memp_get_refcnt(dbenv, dbp->fileid, &cnt)) != 0)
+ goto err;
+ /*
+ * Now, error check. If the file is already open (refcnt != 0), then
+ * we must have it open (since we got the lock) and we need to report
+ * the error. If the file isn't open, but it's in the midst of a rename
+ * then this file doesn't really exist.
+ */
+ if (cnt != 0)
+ ret = DB_FILEOPEN;
+ else if (F_ISSET(dbp, DB_AM_IN_RENAME))
+ ret = ENOENT;
-err: (void)REL_ENVLOCK(dbenv, &elock);
+ if (0) {
+err: (void)REL_ENVLOCK(dbenv, &elock);
+ }
+ if (fhp != NULL && !LF_ISSET(DB_FCNTL_LOCKING))
+ (void)__os_closehandle(dbenv, fhp);
+ /*
+ * If we are going to proceed with the removal, then we need to make
+ * sure that we don't leave any pages around in the mpool.
+ */
+ if (ret == 0)
+ F_SET(dbp, DB_AM_DISCARD);
return (ret);
}
/*
* __fop_read_meta --
- * Read the meta-data page from a file and return it in buf. The
- * open file handle is returned in fhp.
+ * Read the meta-data page from a file and return it in buf.
*
* PUBLIC: int __fop_read_meta __P((DB_ENV *, const char *,
- * PUBLIC: u_int8_t *, size_t, DB_FH *, int, size_t *, u_int32_t));
+ * PUBLIC: u_int8_t *, size_t, DB_FH *, int, size_t *));
*/
int
-__fop_read_meta(dbenv, name, buf, size, fhp, errok, nbytesp, flags)
+__fop_read_meta(dbenv, name, buf, size, fhp, errok, nbytesp)
DB_ENV *dbenv;
const char *name;
u_int8_t *buf;
@@ -756,20 +876,23 @@ __fop_read_meta(dbenv, name, buf, size, fhp, errok, nbytesp, flags)
DB_FH *fhp;
int errok;
size_t *nbytesp;
- u_int32_t flags;
{
- DB_FH fh, *lfhp;
size_t nr;
- int myfhp, ret;
+ int ret;
+
+ /*
+ * Our caller wants to know the number of bytes read, even if we
+ * return an error.
+ */
+ if (nbytesp != NULL)
+ *nbytesp = 0;
nr = 0;
- myfhp = 0;
- memset(&fh, 0, sizeof(fh));
- lfhp = fhp == NULL ? &fh : fhp;
- myfhp = F_ISSET(lfhp, DB_FH_VALID);
- if (!myfhp && (ret = __os_open(dbenv, name, flags, 0, lfhp)) != 0)
- goto err;
- if ((ret = __os_read(dbenv, lfhp, buf, size, &nr)) != 0) {
+ ret = __os_read(dbenv, fhp, buf, size, &nr);
+ if (nbytesp != NULL)
+ *nbytesp = nr;
+
+ if (ret != 0) {
if (!errok)
__db_err(dbenv, "%s: %s", name, db_strerror(ret));
goto err;
@@ -780,19 +903,9 @@ __fop_read_meta(dbenv, name, buf, size, fhp, errok, nbytesp, flags)
__db_err(dbenv,
"%s: unexpected file type or format", name);
ret = EINVAL;
- goto err;
}
-err: /*
- * On error, we would like to close the handle. However, if the
- * handle was opened in the caller, we cannot. If there is no error,
- * then we only close the handle if we opened it here.
- */
- if (!myfhp && F_ISSET((lfhp), DB_FH_VALID) && (ret != 0 || fhp == NULL))
- __os_closehandle(dbenv, lfhp);
-
- if (nbytesp != NULL)
- *nbytesp = nr;
+err:
return (ret);
}
@@ -812,8 +925,9 @@ __fop_dummy(dbp, txn, old, new, flags)
const char *old, *new;
u_int32_t flags;
{
- DB *tmpdbp;
+ DB *tmpdbp, *t2dbp;
DB_ENV *dbenv;
+ DB_FH *fhp;
DB_LOCK elock;
DB_LSN lsn;
DBT fiddbt, namedbt, tmpdbt;
@@ -821,8 +935,9 @@ __fop_dummy(dbp, txn, old, new, flags)
char *back;
char *realback, *realnew, *realold;
int ret, t_ret;
+ size_t len;
u_int8_t mbuf[DBMETASIZE];
- u_int32_t locker, stxnid;
+ u_int32_t dflags, locker, stxnid;
dbenv = dbp->dbenv;
LOCK_INIT(elock);
@@ -831,14 +946,15 @@ __fop_dummy(dbp, txn, old, new, flags)
realold = NULL;
back = NULL;
stxn = NULL;
- tmpdbp = NULL;
+ tmpdbp = t2dbp = NULL;
+ fhp = NULL;
+ dflags = F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0;
DB_ASSERT(txn != NULL);
locker = txn->txnid;
/* Begin sub transaction to encapsulate the rename. */
- if (TXN_ON(dbenv) &&
- (ret = dbenv->txn_begin(dbenv, txn, &stxn, 0)) != 0)
+ if (TXN_ON(dbenv) && (ret = __txn_begin(dbenv, txn, &stxn, 0)) != 0)
goto err;
/* We need to create a dummy file as a place holder. */
@@ -847,7 +963,8 @@ __fop_dummy(dbp, txn, old, new, flags)
if ((ret = __db_appname(dbenv,
DB_APP_DATA, back, flags, NULL, &realback)) != 0)
goto err;
- if ((ret = __fop_create(dbenv, stxn, NULL, back, DB_APP_DATA, 0)) != 0)
+ if ((ret = __fop_create(dbenv,
+ stxn, NULL, back, DB_APP_DATA, 0, dflags)) != 0)
goto err;
memset(mbuf, 0, sizeof(mbuf));
@@ -855,8 +972,8 @@ __fop_dummy(dbp, txn, old, new, flags)
__os_fileid(dbenv, realback, 1, ((DBMETA *)mbuf)->uid)) != 0)
goto err;
((DBMETA *)mbuf)->magic = DB_RENAMEMAGIC;
- if ((ret = __fop_write(dbenv,
- stxn, back, DB_APP_DATA, NULL, 0, mbuf, DBMETASIZE, 1)) != 0)
+ if ((ret = __fop_write(dbenv, stxn, back,
+ DB_APP_DATA, NULL, 0, 0, 0, mbuf, DBMETASIZE, 1, dflags)) != 0)
goto err;
/* Create a dummy dbp handle. */
@@ -870,8 +987,44 @@ __fop_dummy(dbp, txn, old, new, flags)
goto err;
GET_ENVLOCK(dbenv, locker, &elock);
if (__os_exists(realnew, NULL) == 0) {
- ret = EEXIST;
- goto err;
+ /*
+ * It is possible that the only reason this file exists is
+ * because we've done a previous rename of it and we have
+ * left a placeholder here. We need to check for that case
+ * and allow this rename to succeed if that's the case.
+ */
+ if ((ret = db_create(&t2dbp, dbenv, 0)) != 0)
+ goto err;
+ if ((ret = __os_open(dbenv, realnew, 0, 0, &fhp)) != 0)
+ goto err;
+ if ((ret = __fop_read_meta(dbenv,
+ realnew, mbuf, sizeof(mbuf), fhp, 0, &len)) != 0 ||
+ (ret = __db_meta_setup(dbenv,
+ t2dbp, realnew, (DBMETA *)mbuf, 0, 1)) != 0) {
+ ret = EEXIST;
+ goto err;
+ }
+
+ /*
+ * Now, try to acquire the handle lock. If it's from our txn,
+ * then we'll get the lock. If it's not, then someone else has
+ * it locked, and we need to report this as an error. If we
+ * know we can get the lock, we can immediately release it,
+ * which we need to do since this is a temporary handle.
+ */
+ if ((ret = __fop_lock_handle(dbenv,
+ t2dbp, locker, DB_LOCK_WRITE, NULL, DB_LOCK_NOWAIT)) != 0)
+ ret = EEXIST;
+ else {
+ (void)__lock_put(dbenv, &t2dbp->handle_lock);
+ if (!F_ISSET(t2dbp, DB_AM_IN_RENAME))
+ ret = EEXIST;
+ }
+ if ((t_ret = __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
+ fhp = NULL;
+ if (ret != 0)
+ goto err;
}
/*
@@ -879,10 +1032,10 @@ __fop_dummy(dbp, txn, old, new, flags)
* swap for the handle lock.
*/
if ((ret = __fop_rename(dbenv,
- stxn, old, new, dbp->fileid, DB_APP_DATA)) != 0)
+ stxn, old, new, dbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
if ((ret = __fop_rename(dbenv,
- stxn, back, old, tmpdbp->fileid, DB_APP_DATA)) != 0)
+ stxn, back, old, tmpdbp->fileid, DB_APP_DATA, dflags)) != 0)
goto err;
if ((ret = __fop_lock_handle(dbenv,
tmpdbp, locker, DB_LOCK_WRITE, &elock, 0)) != 0)
@@ -898,7 +1051,7 @@ __fop_dummy(dbp, txn, old, new, flags)
if (stxn != NULL) {
/* Commit the child. */
stxnid = stxn->txnid;
- ret = stxn->commit(stxn, 0);
+ ret = __txn_commit(stxn, 0);
stxn = NULL;
/* Now log the child information in the parent. */
@@ -926,10 +1079,15 @@ __fop_dummy(dbp, txn, old, new, flags)
err: (void)REL_ENVLOCK(dbenv, &elock);
if (stxn != NULL)
- (void)stxn->abort(stxn);
+ (void)__txn_abort(stxn);
if (tmpdbp != NULL &&
- (t_ret = __db_close_i(tmpdbp, NULL, 0)) != 0 && ret == 0)
+ (t_ret = __db_close(tmpdbp, NULL, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (t2dbp != NULL &&
+ (t_ret = __db_close(t2dbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
+ if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
if (realold != NULL)
__os_free(dbenv, realold);
if (realnew != NULL)
@@ -985,7 +1143,7 @@ __fop_dbrename(dbp, old, new)
DB_APP_DATA, old, 0, NULL, &real_old)) != 0)
goto err;
- ret = dbenv->memp_nameop(dbenv, dbp->fileid, new, real_old, real_new);
+ ret = __memp_nameop(dbenv, dbp->fileid, new, real_old, real_new);
err: if ((tret = REL_ENVLOCK(dbenv, &elock)) != 0 && ret == 0)
ret = tret;
diff --git a/db/hash/hash.c b/db/hash/hash.c
index e96fd4898..b1a2d8703 100644
--- a/db/hash/hash.c
+++ b/db/hash/hash.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash.c,v 11.94 2001/01/03 16:42:26 ubell Exp $";
+static const char revid[] = "$Id: hash.c,v 11.177 2003/10/04 01:31:58 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -54,446 +54,71 @@ static const char revid[] = "$Id: hash.c,v 11.94 2001/01/03 16:42:26 ubell Exp $
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "db_ext.h"
-#include "db_shash.h"
-#include "db_swap.h"
-#include "hash.h"
-#include "btree.h"
-#include "log.h"
-#include "lock.h"
-#include "txn.h"
-
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+
+static int __ham_bulk __P((DBC *, DBT *, u_int32_t));
static int __ham_c_close __P((DBC *, db_pgno_t, int *));
static int __ham_c_del __P((DBC *));
static int __ham_c_destroy __P((DBC *));
static int __ham_c_get __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
static int __ham_c_put __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
static int __ham_c_writelock __P((DBC *));
-static int __ham_del_dups __P((DBC *, DBT *));
-static int __ham_delete __P((DB *, DB_TXN *, DBT *, u_int32_t));
static int __ham_dup_return __P((DBC *, DBT *, u_int32_t));
static int __ham_expand_table __P((DBC *));
-static int __ham_init_htab __P((DBC *,
- const char *, db_pgno_t, u_int32_t, u_int32_t));
static int __ham_lookup __P((DBC *,
const DBT *, u_int32_t, db_lockmode_t, db_pgno_t *));
static int __ham_overwrite __P((DBC *, DBT *, u_int32_t));
/*
- * __ham_metachk --
+ * __ham_quick_delete --
+ * When performing a DB->del operation that does not involve secondary
+ * indices and is not removing an off-page duplicate tree, we can
+ * speed things up substantially by removing the entire duplicate
+ * set, if any is present, in one operation, rather than by conjuring
+ * up and deleting each of the items individually. (All are stored
+ * in one big HKEYDATA structure.) We don't bother to distinguish
+ * on-page duplicate sets from single, non-dup items; they're deleted
+ * in exactly the same way.
*
- * PUBLIC: int __ham_metachk __P((DB *, const char *, HMETA *));
- */
-int
-__ham_metachk(dbp, name, hashm)
- DB *dbp;
- const char *name;
- HMETA *hashm;
-{
- DB_ENV *dbenv;
- u_int32_t vers;
- int ret;
-
- dbenv = dbp->dbenv;
-
- /*
- * At this point, all we know is that the magic number is for a Hash.
- * Check the version, the database may be out of date.
- */
- vers = hashm->dbmeta.version;
- if (F_ISSET(dbp, DB_AM_SWAP))
- M_32_SWAP(vers);
- switch (vers) {
- case 4:
- case 5:
- case 6:
- __db_err(dbenv,
- "%s: hash version %lu requires a version upgrade",
- name, (u_long)vers);
- return (DB_OLD_VERSION);
- case 7:
- break;
- default:
- __db_err(dbenv,
- "%s: unsupported hash version: %lu", name, (u_long)vers);
- return (EINVAL);
- }
-
- /* Swap the page if we need to. */
- if (F_ISSET(dbp, DB_AM_SWAP) && (ret = __ham_mswap((PAGE *)hashm)) != 0)
- return (ret);
-
- /* Check the type. */
- if (dbp->type != DB_HASH && dbp->type != DB_UNKNOWN)
- return (EINVAL);
- dbp->type = DB_HASH;
- DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
-
- /*
- * Check application info against metadata info, and set info, flags,
- * and type based on metadata info.
- */
- if ((ret = __db_fchk(dbenv,
- "DB->open", hashm->dbmeta.flags,
- DB_HASH_DUP | DB_HASH_SUBDB | DB_HASH_DUPSORT)) != 0)
- return (ret);
-
- if (F_ISSET(&hashm->dbmeta, DB_HASH_DUP))
- F_SET(dbp, DB_AM_DUP);
- else
- if (F_ISSET(dbp, DB_AM_DUP)) {
- __db_err(dbenv,
- "%s: DB_DUP specified to open method but not set in database",
- name);
- return (EINVAL);
- }
-
- if (F_ISSET(&hashm->dbmeta, DB_HASH_SUBDB))
- F_SET(dbp, DB_AM_SUBDB);
- else
- if (F_ISSET(dbp, DB_AM_SUBDB)) {
- __db_err(dbenv,
- "%s: multiple databases specified but not supported in file",
- name);
- return (EINVAL);
- }
-
- if (F_ISSET(&hashm->dbmeta, DB_HASH_DUPSORT)) {
- if (dbp->dup_compare == NULL)
- dbp->dup_compare = __bam_defcmp;
- } else
- if (dbp->dup_compare != NULL) {
- __db_err(dbenv,
- "%s: duplicate sort function specified but not set in database",
- name);
- return (EINVAL);
- }
-
- /* Set the page size. */
- dbp->pgsize = hashm->dbmeta.pagesize;
-
- /* Copy the file's ID. */
- memcpy(dbp->fileid, hashm->dbmeta.uid, DB_FILE_ID_LEN);
-
- return (0);
-}
-
-/*
- * __ham_open --
+ * This function is called by __db_delete when the appropriate
+ * conditions are met, and it performs the delete in the optimized way.
*
- * PUBLIC: int __ham_open __P((DB *, const char *, db_pgno_t, u_int32_t));
+ * The cursor should be set to the first item in the duplicate
+ * set, or to the sole key/data pair when the key does not have a
+ * duplicate set, before the function is called.
+ *
+ * PUBLIC: int __ham_quick_delete __P((DBC *));
*/
int
-__ham_open(dbp, name, base_pgno, flags)
- DB *dbp;
- const char *name;
- db_pgno_t base_pgno;
- u_int32_t flags;
-{
- DB_ENV *dbenv;
+__ham_quick_delete(dbc)
DBC *dbc;
- HASH_CURSOR *hcp;
- HASH *hashp;
- int need_sync, ret, t_ret;
-
- dbc = NULL;
- dbenv = dbp->dbenv;
- need_sync = 0;
-
- /* Initialize the remaining fields/methods of the DB. */
- dbp->del = __ham_delete;
- dbp->stat = __ham_stat;
-
- /*
- * Get a cursor. If DB_CREATE is specified, we may be creating
- * pages, and to do that safely in CDB we need a write cursor.
- * In STD_LOCKING mode, we'll synchronize using the meta page
- * lock instead.
- */
- if ((ret = dbp->cursor(dbp,
- dbp->open_txn, &dbc, LF_ISSET(DB_CREATE) && CDB_LOCKING(dbenv) ?
- DB_WRITECURSOR : 0)) != 0)
- return (ret);
-
- hcp = (HASH_CURSOR *)dbc->internal;
- hashp = dbp->h_internal;
- hashp->meta_pgno = base_pgno;
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto err1;
-
- /*
- * If this is a new file, initialize it, and put it back dirty.
- *
- * Initialize the hdr structure.
- */
- if (hcp->hdr->dbmeta.magic == DB_HASHMAGIC) {
- /* File exists, verify the data in the header. */
- if (hashp->h_hash == NULL)
- hashp->h_hash = hcp->hdr->dbmeta.version < 5
- ? __ham_func4 : __ham_func5;
- if (!F_ISSET(dbp, DB_RDONLY) &&
- hashp->h_hash(dbp,
- CHARKEY, sizeof(CHARKEY)) != hcp->hdr->h_charkey) {
- __db_err(dbp->dbenv,
- "hash: incompatible hash function");
- ret = EINVAL;
- goto err2;
- }
- if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_DUP))
- F_SET(dbp, DB_AM_DUP);
- if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_DUPSORT))
- F_SET(dbp, DB_AM_DUPSORT);
- if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_SUBDB))
- F_SET(dbp, DB_AM_SUBDB);
- } else if (!IS_RECOVERING(dbenv)) {
- /*
- * File does not exist, we must initialize the header. If
- * locking is enabled that means getting a write lock first.
- * During recovery the meta page will be in the log.
- */
- dbc->lock.pgno = base_pgno;
-
- if (STD_LOCKING(dbc) &&
- ((ret = lock_put(dbenv, &hcp->hlock)) != 0 ||
- (ret = lock_get(dbenv, dbc->locker,
- DB_NONBLOCK(dbc) ? DB_LOCK_NOWAIT : 0,
- &dbc->lock_dbt, DB_LOCK_WRITE, &hcp->hlock)) != 0))
- goto err2;
- else if (CDB_LOCKING(dbp->dbenv)) {
- DB_ASSERT(LF_ISSET(DB_CREATE));
- if ((ret = lock_get(dbenv, dbc->locker,
- DB_LOCK_UPGRADE, &dbc->lock_dbt, DB_LOCK_WRITE,
- &dbc->mylock)) != 0)
- goto err2;
- }
- if ((ret = __ham_init_htab(dbc, name,
- base_pgno, hashp->h_nelem, hashp->h_ffactor)) != 0)
- goto err2;
-
- need_sync = 1;
- }
-
-err2: /* Release the meta data page */
- if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
- ret = t_ret;
-err1: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
- /* Sync the file so that we know that the meta data goes to disk. */
- if (ret == 0 && need_sync)
- ret = dbp->sync(dbp, 0);
-#if CONFIG_TEST
- if (ret == 0)
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTSYNC, ret, name);
-
-DB_TEST_RECOVERY_LABEL
-#endif
- if (ret != 0)
- (void)__ham_db_close(dbp);
-
- return (ret);
-}
-
-/************************** LOCAL CREATION ROUTINES **********************/
-/*
- * Returns 0 on No Error
- */
-static int
-__ham_init_htab(dbc, name, pgno, nelem, ffactor)
- DBC *dbc;
- const char *name;
- db_pgno_t pgno;
- u_int32_t nelem, ffactor;
-{
- DB *dbp;
- DB_LOCK metalock;
- DB_LSN orig_lsn;
- DBMETA *mmeta;
- HASH_CURSOR *hcp;
- HASH *hashp;
- PAGE *h;
- db_pgno_t mpgno;
- int32_t l2, nbuckets;
- int dirty_mmeta, i, ret, t_ret;
-
- hcp = (HASH_CURSOR *)dbc->internal;
- dbp = dbc->dbp;
- hashp = dbp->h_internal;
- mmeta = NULL;
- h = NULL;
- ret = 0;
- dirty_mmeta = 0;
- metalock.off = LOCK_INVALID;
-
- if (hashp->h_hash == NULL)
- hashp->h_hash = DB_HASHVERSION < 5 ? __ham_func4 : __ham_func5;
-
- if (nelem != 0 && ffactor != 0) {
- nelem = (nelem - 1) / ffactor + 1;
- l2 = __db_log2(nelem > 2 ? nelem : 2);
- } else
- l2 = 1;
- nbuckets = 1 << l2;
-
- orig_lsn = hcp->hdr->dbmeta.lsn;
- memset(hcp->hdr, 0, sizeof(HMETA));
- ZERO_LSN(hcp->hdr->dbmeta.lsn);
- hcp->hdr->dbmeta.pgno = pgno;
- hcp->hdr->dbmeta.magic = DB_HASHMAGIC;
- hcp->hdr->dbmeta.version = DB_HASHVERSION;
- hcp->hdr->dbmeta.pagesize = dbp->pgsize;
- hcp->hdr->dbmeta.type = P_HASHMETA;
- hcp->hdr->dbmeta.free = PGNO_INVALID;
- hcp->hdr->max_bucket = hcp->hdr->high_mask = nbuckets - 1;
- hcp->hdr->low_mask = (nbuckets >> 1) - 1;
- hcp->hdr->ffactor = ffactor;
- hcp->hdr->h_charkey = hashp->h_hash(dbp, CHARKEY, sizeof(CHARKEY));
- memcpy(hcp->hdr->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
-
- if (F_ISSET(dbp, DB_AM_DUP))
- F_SET(&hcp->hdr->dbmeta, DB_HASH_DUP);
- if (F_ISSET(dbp, DB_AM_SUBDB))
- F_SET(&hcp->hdr->dbmeta, DB_HASH_SUBDB);
- if (dbp->dup_compare != NULL)
- F_SET(&hcp->hdr->dbmeta, DB_HASH_DUPSORT);
-
- if ((ret = memp_fset(dbp->mpf, hcp->hdr, DB_MPOOL_DIRTY)) != 0)
- goto err;
-
- /*
- * Create the first and second buckets pages so that we have the
- * page numbers for them and we can store that page number
- * in the meta-data header (spares[0]).
- */
- hcp->hdr->spares[0] = nbuckets;
- if ((ret = memp_fget(dbp->mpf,
- &hcp->hdr->spares[0], DB_MPOOL_NEW_GROUP, &h)) != 0)
- goto err;
-
- P_INIT(h, dbp->pgsize, hcp->hdr->spares[0], PGNO_INVALID,
- PGNO_INVALID, 0, P_HASH);
-
- /* Fill in the last fields of the meta data page. */
- hcp->hdr->spares[0] -= (nbuckets - 1);
- for (i = 1; i <= l2; i++)
- hcp->hdr->spares[i] = hcp->hdr->spares[0];
- for (; i < NCACHED; i++)
- hcp->hdr->spares[i] = PGNO_INVALID;
-
- /*
- * Before we are about to put any dirty pages, we need to log
- * the meta-data page create.
- */
- ret = __db_log_page(dbp, name, &orig_lsn, pgno, (PAGE *)hcp->hdr);
-
- if (dbp->open_txn != NULL) {
- mmeta = (DBMETA *) hcp->hdr;
- if (F_ISSET(dbp, DB_AM_SUBDB)) {
-
- /*
- * If this is a subdatabase, then we need to
- * get the LSN off the master meta data page
- * because that's where free pages are linked
- * and during recovery we need to access
- * that page and roll it backward/forward
- * correctly with respect to LSN.
- */
- mpgno = PGNO_BASE_MD;
- if ((ret = __db_lget(dbc,
- 0, mpgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
- goto err;
- if ((ret = memp_fget(dbp->mpf,
- &mpgno, 0, (PAGE **)&mmeta)) != 0)
- goto err;
- }
- if ((t_ret = __ham_groupalloc_log(dbp->dbenv,
- dbp->open_txn, &LSN(mmeta), 0, dbp->log_fileid,
- &LSN(mmeta), hcp->hdr->spares[0],
- hcp->hdr->max_bucket + 1, mmeta->free)) != 0 && ret == 0)
- ret = t_ret;
- if (ret == 0) {
- /* need to update real LSN for buffer manager */
- dirty_mmeta = 1;
- }
-
- }
-
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTLOG, ret, name);
-
-DB_TEST_RECOVERY_LABEL
-err: if (h != NULL &&
- (t_ret = memp_fput(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0 && ret == 0)
- ret = t_ret;
-
- if (F_ISSET(dbp, DB_AM_SUBDB) && mmeta != NULL)
- if ((t_ret = memp_fput(dbp->mpf, mmeta,
- dirty_mmeta ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
- ret = t_ret;
- if (metalock.off != LOCK_INVALID)
- (void)__TLPUT(dbc, metalock);
-
- return (ret);
-}
-
-static int
-__ham_delete(dbp, txn, key, flags)
- DB *dbp;
- DB_TXN *txn;
- DBT *key;
- u_int32_t flags;
{
- DBC *dbc;
- HASH_CURSOR *hcp;
- db_pgno_t pgno;
int ret, t_ret;
- /*
- * This is the only access method routine called directly from
- * the dbp, so we have to do error checking.
- */
-
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->del");
- DB_CHECK_TXN(dbp, txn);
-
- if ((ret =
- __db_delchk(dbp, key, flags, F_ISSET(dbp, DB_AM_RDONLY))) != 0)
- return (ret);
-
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
+ if ((ret = __ham_get_meta(dbc)) != 0)
return (ret);
- DEBUG_LWRITE(dbc, txn, "ham_delete", key, NULL, flags);
+ /* Assert that we're not using secondary indices. */
+ DB_ASSERT(!F_ISSET(dbc->dbp, DB_AM_SECONDARY));
+ /*
+ * We should assert that we're not a primary either, but that
+ * would require grabbing the dbp's mutex, so we don't bother.
+ */
- hcp = (HASH_CURSOR *)dbc->internal;
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
+ /* Assert that we're set, but not to an off-page duplicate. */
+ DB_ASSERT(IS_INITIALIZED(dbc));
+ DB_ASSERT(((HASH_CURSOR *)dbc->internal)->opd == NULL);
- pgno = PGNO_INVALID;
- if ((ret = __ham_lookup(dbc, key, 0, DB_LOCK_WRITE, &pgno)) == 0) {
- if (F_ISSET(hcp, H_OK)) {
- if (pgno == PGNO_INVALID)
- ret = __ham_del_pair(dbc, 1);
- else {
- /* When we close the cursor in __ham_del_dups,
- * that will make the off-page dup tree go
- * go away as well as our current entry. When
- * it updates cursors, ours should get marked
- * as H_DELETED.
- */
- ret = __ham_del_dups(dbc, key);
- }
- } else
- ret = DB_NOTFOUND;
- }
+ ret = __ham_del_pair(dbc, 1);
if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
-out: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
return (ret);
}
@@ -517,18 +142,20 @@ __ham_c_init(dbc)
1, sizeof(struct cursor_t), &new_curs)) != 0)
return (ret);
if ((ret = __os_malloc(dbenv,
- dbc->dbp->pgsize, NULL, &new_curs->split_buf)) != 0) {
- __os_free(new_curs, sizeof(*new_curs));
+ dbc->dbp->pgsize, &new_curs->split_buf)) != 0) {
+ __os_free(dbenv, new_curs);
return (ret);
}
dbc->internal = (DBC_INTERNAL *) new_curs;
dbc->c_close = __db_c_close;
- dbc->c_count = __db_c_count;
- dbc->c_del = __db_c_del;
- dbc->c_dup = __db_c_dup;
- dbc->c_get = __db_c_get;
- dbc->c_put = __db_c_put;
+ dbc->c_count = __db_c_count_pp;
+ dbc->c_del = __db_c_del_pp;
+ dbc->c_dup = __db_c_dup_pp;
+ dbc->c_get = __db_c_get_pp;
+ dbc->c_pget = __db_c_pget_pp;
+ dbc->c_put = __db_c_put_pp;
+ dbc->c_am_bulk = __ham_bulk;
dbc->c_am_close = __ham_c_close;
dbc->c_am_del = __ham_c_del;
dbc->c_am_destroy = __ham_c_destroy;
@@ -551,12 +178,14 @@ __ham_c_close(dbc, root_pgno, rmroot)
db_pgno_t root_pgno;
int *rmroot;
{
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
HKEYDATA *dp;
int doroot, gotmeta, ret, t_ret;
u_int32_t dirty;
COMPQUIET(rmroot, 0);
+ mpf = dbc->dbp->mpf;
dirty = 0;
doroot = gotmeta = ret = 0;
hcp = (HASH_CURSOR *) dbc->internal;
@@ -568,9 +197,14 @@ __ham_c_close(dbc, root_pgno, rmroot)
gotmeta = 1;
if ((ret = __ham_get_cpage(dbc, DB_LOCK_READ)) != 0)
goto out;
- dp = (HKEYDATA *)H_PAIRDATA(hcp->page, hcp->indx);
- DB_ASSERT(HPAGE_PTYPE(dp) == H_OFFDUP);
- memcpy(&root_pgno, HOFFPAGE_PGNO(dp), sizeof(db_pgno_t));
+ dp = (HKEYDATA *)H_PAIRDATA(dbc->dbp, hcp->page, hcp->indx);
+
+ /* If its not a dup we aborted before we changed it. */
+ if (HPAGE_PTYPE(dp) == H_OFFDUP)
+ memcpy(&root_pgno,
+ HOFFPAGE_PGNO(dp), sizeof(db_pgno_t));
+ else
+ root_pgno = PGNO_INVALID;
if ((ret =
hcp->opd->c_am_close(hcp->opd, root_pgno, &doroot)) != 0)
@@ -583,7 +217,7 @@ __ham_c_close(dbc, root_pgno, rmroot)
}
out: if (hcp->page != NULL && (t_ret =
- memp_fput(dbc->dbp->mpf, hcp->page, dirty)) != 0 && ret == 0)
+ __memp_fput(mpf, hcp->page, dirty)) != 0 && ret == 0)
ret = t_ret;
if (gotmeta != 0 && (t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
@@ -605,8 +239,8 @@ __ham_c_destroy(dbc)
hcp = (HASH_CURSOR *)dbc->internal;
if (hcp->split_buf != NULL)
- __os_free(hcp->split_buf, dbc->dbp->pgsize);
- __os_free(hcp, sizeof(HASH_CURSOR));
+ __os_free(dbc->dbp->dbenv, hcp->split_buf);
+ __os_free(dbc->dbp->dbenv, hcp);
return (0);
}
@@ -623,6 +257,7 @@ __ham_c_count(dbc, recnop)
db_recno_t *recnop;
{
DB *dbp;
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
db_indx_t len;
db_recno_t recno;
@@ -630,22 +265,27 @@ __ham_c_count(dbc, recnop)
u_int8_t *p, *pend;
dbp = dbc->dbp;
- hcp = (HASH_CURSOR *) dbc->internal;
+ mpf = dbp->mpf;
+ hcp = (HASH_CURSOR *)dbc->internal;
recno = 0;
if ((ret = __ham_get_cpage(dbc, DB_LOCK_READ)) != 0)
return (ret);
+ if (hcp->indx >= NUM_ENT(hcp->page)) {
+ *recnop = 0;
+ goto err;
+ }
- switch (HPAGE_PTYPE(H_PAIRDATA(hcp->page, hcp->indx))) {
+ switch (HPAGE_PTYPE(H_PAIRDATA(dbp, hcp->page, hcp->indx))) {
case H_KEYDATA:
case H_OFFPAGE:
recno = 1;
break;
case H_DUPLICATE:
- p = HKEYDATA_DATA(H_PAIRDATA(hcp->page, hcp->indx));
+ p = HKEYDATA_DATA(H_PAIRDATA(dbp, hcp->page, hcp->indx));
pend = p +
- LEN_HDATA(hcp->page, dbp->pgsize, hcp->indx);
+ LEN_HDATA(dbp, hcp->page, dbp->pgsize, hcp->indx);
for (; p < pend; recno++) {
/* p may be odd, so copy rather than just dereffing */
memcpy(&len, p, sizeof(db_indx_t));
@@ -654,14 +294,13 @@ __ham_c_count(dbc, recnop)
break;
default:
- ret = __db_unknown_type(dbp->dbenv, "__ham_c_count",
- HPAGE_PTYPE(H_PAIRDATA(hcp->page, hcp->indx)));
+ ret = __db_pgfmt(dbp->dbenv, hcp->pgno);
goto err;
}
*recnop = recno;
-err: if ((t_ret = memp_fput(dbc->dbp->mpf, hcp->page, 0)) != 0 && ret == 0)
+err: if ((t_ret = __memp_fput(mpf, hcp->page, 0)) != 0 && ret == 0)
ret = t_ret;
hcp->page = NULL;
return (ret);
@@ -673,10 +312,12 @@ __ham_c_del(dbc)
{
DB *dbp;
DBT repldbt;
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
int ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
if (F_ISSET(hcp, H_DELETED))
@@ -689,12 +330,12 @@ __ham_c_del(dbc)
goto out;
/* Off-page duplicates. */
- if (HPAGE_TYPE(hcp->page, H_DATAINDEX(hcp->indx)) == H_OFFDUP)
+ if (HPAGE_TYPE(dbp, hcp->page, H_DATAINDEX(hcp->indx)) == H_OFFDUP)
goto out;
if (F_ISSET(hcp, H_ISDUP)) { /* On-page duplicate. */
if (hcp->dup_off == 0 &&
- DUP_SIZE(hcp->dup_len) == LEN_HDATA(hcp->page,
+ DUP_SIZE(hcp->dup_len) == LEN_HDATA(dbp, hcp->page,
hcp->hdr->dbmeta.pagesize, hcp->indx))
ret = __ham_del_pair(dbc, 1);
else {
@@ -703,21 +344,25 @@ __ham_c_del(dbc)
repldbt.doff = hcp->dup_off;
repldbt.dlen = DUP_SIZE(hcp->dup_len);
repldbt.size = 0;
- repldbt.data = HKEYDATA_DATA(H_PAIRDATA(hcp->page,
+ repldbt.data = HKEYDATA_DATA(H_PAIRDATA(dbp, hcp->page,
hcp->indx));
- ret = __ham_replpair(dbc, &repldbt, 0);
- hcp->dup_tlen -= DUP_SIZE(hcp->dup_len);
- F_SET(hcp, H_DELETED);
- ret = __ham_c_update(dbc, DUP_SIZE(hcp->dup_len), 0, 1);
+ if ((ret = __ham_replpair(dbc, &repldbt, 0)) == 0) {
+ hcp->dup_tlen -= DUP_SIZE(hcp->dup_len);
+ F_SET(hcp, H_DELETED);
+ ret = __ham_c_update(dbc,
+ DUP_SIZE(hcp->dup_len), 0, 1);
+ }
}
} else /* Not a duplicate */
ret = __ham_del_pair(dbc, 1);
-out: if (ret == 0 && hcp->page != NULL &&
- (t_ret = memp_fput(dbp->mpf, hcp->page, DB_MPOOL_DIRTY)) != 0)
- ret = t_ret;
- hcp->page = NULL;
+out: if (hcp->page != NULL) {
+ if ((t_ret = __memp_fput(mpf,
+ hcp->page, ret == 0 ? DB_MPOOL_DIRTY : 0)) && ret == 0)
+ ret = t_ret;
+ hcp->page = NULL;
+ }
if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -760,7 +405,7 @@ __ham_c_dup(orig_dbc, new_dbc)
* holds a lock of the correct type, so if we need a write lock and
* request it, we know that we'll get it.
*/
- if (orig->lock.off == LOCK_INVALID || orig_dbc->txn != NULL)
+ if (!LOCK_ISSET(orig->lock) || orig_dbc->txn != NULL)
return (0);
return (__ham_lock_bucket(new_dbc, DB_LOCK_READ));
@@ -775,12 +420,14 @@ __ham_c_get(dbc, key, data, flags, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
db_lockmode_t lock_type;
int get_key, ret, t_ret;
hcp = (HASH_CURSOR *)dbc->internal;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
/* Clear OR'd in additional bits so we can check for flag equality. */
if (F_ISSET(dbc, DBC_RMW))
@@ -827,6 +474,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
case DB_SET:
case DB_SET_RANGE:
case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
ret = __ham_lookup(dbc, key, 0, lock_type, pgnop);
get_key = 0;
break;
@@ -856,11 +504,11 @@ __ham_c_get(dbc, key, data, flags, pgnop)
goto err;
else if (F_ISSET(hcp, H_OK)) {
if (*pgnop == PGNO_INVALID)
- ret = __ham_dup_return (dbc, data, flags);
+ ret = __ham_dup_return(dbc, data, flags);
break;
} else if (!F_ISSET(hcp, H_NOMORE)) {
__db_err(dbp->dbenv,
- "H_NOMORE returned to __ham_c_get");
+ "H_NOMORE returned to __ham_c_get");
ret = EINVAL;
break;
}
@@ -872,7 +520,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
case DB_LAST:
case DB_PREV:
case DB_PREV_NODUP:
- ret = memp_fput(dbp->mpf, hcp->page, 0);
+ ret = __memp_fput(mpf, hcp->page, 0);
hcp->page = NULL;
if (hcp->bucket == 0) {
ret = DB_NOTFOUND;
@@ -890,7 +538,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
case DB_FIRST:
case DB_NEXT:
case DB_NEXT_NODUP:
- ret = memp_fput(dbp->mpf, hcp->page, 0);
+ ret = __memp_fput(mpf, hcp->page, 0);
hcp->page = NULL;
hcp->indx = NDX_INVALID;
hcp->bucket++;
@@ -907,6 +555,7 @@ __ham_c_get(dbc, key, data, flags, pgnop)
break;
case DB_GET_BOTH:
case DB_GET_BOTHC:
+ case DB_GET_BOTH_RANGE:
case DB_NEXT_DUP:
case DB_SET:
case DB_SET_RANGE:
@@ -940,6 +589,394 @@ err: if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
return (ret);
}
+/*
+ * __ham_bulk -- Return bulk data from a hash table.
+ */
+static int
+__ham_bulk(dbc, data, flags)
+ DBC *dbc;
+ DBT *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_MPOOLFILE *mpf;
+ HASH_CURSOR *cp;
+ PAGE *pg;
+ db_indx_t dup_len, dup_off, dup_tlen, indx, *inp;
+ db_lockmode_t lock_mode;
+ db_pgno_t pgno;
+ int32_t *endp, key_off, *offp, *saveoff;
+ u_int32_t key_size, size, space;
+ u_int8_t *dbuf, *dp, *hk, *np, *tmp;
+ int is_dup, is_key;
+ int need_pg, next_key, no_dup, pagesize, ret, t_ret;
+
+ ret = 0;
+ key_off = 0;
+ dup_len = dup_off = dup_tlen = 0;
+ size = 0;
+ dbp = dbc->dbp;
+ pagesize = dbp->pgsize;
+ mpf = dbp->mpf;
+ cp = (HASH_CURSOR *)dbc->internal;
+ is_key = LF_ISSET(DB_MULTIPLE_KEY) ? 1 : 0;
+ next_key = is_key && LF_ISSET(DB_OPFLAGS_MASK) != DB_NEXT_DUP;
+ no_dup = LF_ISSET(DB_OPFLAGS_MASK) == DB_NEXT_NODUP;
+ dbuf = data->data;
+ np = dp = dbuf;
+
+ /* Keep track of space that is left. There is an termination entry */
+ space = data->ulen;
+ space -= sizeof(*offp);
+
+ /* Build the offset/size table from the end up. */
+ endp = (int32_t *) ((u_int8_t *)dbuf + data->ulen);
+ endp--;
+ offp = endp;
+
+ key_size = 0;
+ lock_mode = F_ISSET(dbc, DBC_RMW) ? DB_LOCK_WRITE: DB_LOCK_READ;
+
+next_pg:
+ need_pg = 1;
+ indx = cp->indx;
+ pg = cp->page;
+ inp = P_INP(dbp, pg);
+
+ do {
+ if (is_key) {
+ hk = H_PAIRKEY(dbp, pg, indx);
+ if (HPAGE_PTYPE(hk) == H_OFFPAGE) {
+ memcpy(&key_size,
+ HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
+ memcpy(&pgno,
+ HOFFPAGE_PGNO(hk), sizeof(db_pgno_t));
+ size = key_size;
+ if (key_size > space)
+ goto get_key_space;
+ if ((ret = __bam_bulk_overflow(
+ dbc, key_size, pgno, np)) != 0)
+ return (ret);
+ space -= key_size;
+ key_off = (int32_t)(np - dbuf);
+ np += key_size;
+ } else {
+ if (need_pg) {
+ dp = np;
+ size = pagesize - HOFFSET(pg);
+ if (space < size) {
+get_key_space:
+ if (offp == endp) {
+ data->size =
+ ALIGN(size +
+ pagesize, 1024);
+ return (ENOMEM);
+ }
+ goto back_up;
+ }
+ memcpy(dp,
+ (u_int8_t *)pg + HOFFSET(pg), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+ key_size = LEN_HKEY(dbp, pg, pagesize, indx);
+ key_off = (int32_t)(inp[indx] - HOFFSET(pg)
+ + dp - dbuf + SSZA(HKEYDATA, data));
+ }
+ }
+
+ hk = H_PAIRDATA(dbp, pg, indx);
+ switch (HPAGE_PTYPE(hk)) {
+ case H_DUPLICATE:
+ case H_KEYDATA:
+ if (need_pg) {
+ dp = np;
+ size = pagesize - HOFFSET(pg);
+ if (space < size) {
+back_up:
+ if (indx != 0) {
+ indx -= 2;
+ /* XXX
+ * It's not clear that this is
+ * the right way to fix this,
+ * but here goes.
+ * If we are backing up onto a
+ * duplicate, then we need to
+ * position ourselves at the
+ * end of the duplicate set.
+ * We probably need to make
+ * this work for H_OFFDUP too.
+ * It might be worth making a
+ * dummy cursor and calling
+ * __ham_item_prev.
+ */
+ tmp = H_PAIRDATA(dbp, pg, indx);
+ if (HPAGE_PTYPE(tmp) ==
+ H_DUPLICATE) {
+ dup_off = dup_tlen =
+ LEN_HDATA(dbp, pg,
+ pagesize, indx + 1);
+ memcpy(&dup_len,
+ HKEYDATA_DATA(tmp),
+ sizeof(db_indx_t));
+ } else {
+ is_dup = 0;
+ dup_len = 0;
+ dup_off = 0;
+ dup_tlen = 0;
+ F_CLR(cp, H_ISDUP);
+ }
+ goto get_space;
+ }
+ /* indx == 0 */
+ cp->dup_len = dup_len;
+ cp->dup_off = dup_off;
+ cp->dup_tlen = dup_tlen;
+ if ((ret = __ham_item_prev(dbc,
+ lock_mode, &pgno)) != 0) {
+ if (ret != DB_NOTFOUND)
+ return (ret);
+ if ((ret = __memp_fput(mpf,
+ cp->page, 0)) != 0)
+ return (ret);
+ cp->page = NULL;
+ if (cp->bucket == 0) {
+ cp->indx = indx =
+ NDX_INVALID;
+ goto get_space;
+ }
+ if ((ret =
+ __ham_get_meta(dbc)) != 0)
+ return (ret);
+
+ cp->bucket--;
+ cp->pgno = BUCKET_TO_PAGE(cp,
+ cp->bucket);
+ cp->indx = NDX_INVALID;
+ if ((ret = __ham_release_meta(
+ dbc)) != 0)
+ return (ret);
+ if ((ret = __ham_item_prev(dbc,
+ lock_mode, &pgno)) != 0)
+ return (ret);
+ }
+ indx = cp->indx;
+get_space:
+ /*
+ * See if we put any data in the buffer.
+ */
+ if (offp >= endp ||
+ F_ISSET(dbc, DBC_TRANSIENT)) {
+ data->size = ALIGN(size +
+ data->ulen - space, 1024);
+ return (ENOMEM);
+ }
+ /*
+ * Don't continue; we're all out
+ * of space, even though we're
+ * returning success.
+ */
+ next_key = 0;
+ break;
+ }
+ memcpy(dp, (u_int8_t *)pg + HOFFSET(pg), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+
+ /*
+ * We're about to crack the offset(s) and length(s)
+ * out of an H_KEYDATA or H_DUPLICATE item.
+ * There are three cases:
+ * 1. We were moved into a duplicate set by
+ * the standard hash cursor code. Respect
+ * the dup_off and dup_tlen we were given.
+ * 2. We stumbled upon a duplicate set while
+ * walking the page on our own. We need to
+ * recognize it as a dup and set dup_off and
+ * dup_tlen.
+ * 3. The current item is not a dup.
+ */
+ if (F_ISSET(cp, H_ISDUP)) {
+ /* Case 1 */
+ is_dup = 1;
+ dup_len = cp->dup_len;
+ dup_off = cp->dup_off;
+ dup_tlen = cp->dup_tlen;
+ } else if (HPAGE_PTYPE(hk) == H_DUPLICATE) {
+ /* Case 2 */
+ is_dup = 1;
+ /*
+ * If we run out of memory and bail,
+ * make sure the fact we're in a dup set
+ * isn't ignored later.
+ */
+ F_SET(cp, H_ISDUP);
+ dup_off = 0;
+ memcpy(&dup_len,
+ HKEYDATA_DATA(hk), sizeof(db_indx_t));
+ dup_tlen = LEN_HDATA(dbp, pg, pagesize, indx);
+ } else {
+ /* Case 3 */
+ is_dup = 0;
+ dup_len = 0;
+ dup_off = 0;
+ dup_tlen = 0;
+ }
+
+ do {
+ space -= (is_key ? 4 : 2) * sizeof(*offp);
+ size += (is_key ? 4 : 2) * sizeof(*offp);
+ /*
+ * Since space is an unsigned, if we happen
+ * to wrap, then this comparison will turn out
+ * to be true. XXX Wouldn't it be better to
+ * simply check above that space is greater than
+ * the value we're about to subtract???
+ */
+ if (space > data->ulen) {
+ if (!is_dup || dup_off == 0)
+ goto back_up;
+ dup_off -= (db_indx_t)DUP_SIZE(offp[1]);
+ goto get_space;
+ }
+ if (is_key) {
+ *offp-- = key_off;
+ *offp-- = key_size;
+ }
+ if (is_dup) {
+ *offp-- = (int32_t)(
+ inp[indx + 1] - HOFFSET(pg) +
+ dp - dbuf + SSZA(HKEYDATA, data) +
+ dup_off + sizeof(db_indx_t));
+ memcpy(&dup_len,
+ HKEYDATA_DATA(hk) + dup_off,
+ sizeof(db_indx_t));
+ dup_off += DUP_SIZE(dup_len);
+ *offp-- = dup_len;
+ } else {
+ *offp-- = (int32_t)(
+ inp[indx + 1] - HOFFSET(pg) +
+ dp - dbuf + SSZA(HKEYDATA, data));
+ *offp-- = LEN_HDATA(dbp, pg,
+ pagesize, indx);
+ }
+ } while (is_dup && dup_off < dup_tlen && no_dup == 0);
+ F_CLR(cp, H_ISDUP);
+ break;
+ case H_OFFDUP:
+ memcpy(&pgno, HOFFPAGE_PGNO(hk), sizeof(db_pgno_t));
+ space -= 2 * sizeof(*offp);
+ if (space > data->ulen)
+ goto back_up;
+
+ if (is_key) {
+ space -= 2 * sizeof(*offp);
+ if (space > data->ulen)
+ goto back_up;
+ *offp-- = key_off;
+ *offp-- = key_size;
+ }
+ saveoff = offp;
+ if ((ret = __bam_bulk_duplicates(dbc,
+ pgno, dbuf, is_key ? offp + 2 : NULL,
+ &offp, &np, &space, no_dup)) != 0) {
+ if (ret == ENOMEM) {
+ size = space;
+ space = 0;
+ if (is_key && saveoff == offp) {
+ offp += 2;
+ goto back_up;
+ }
+ goto get_space;
+ }
+ return (ret);
+ }
+ break;
+ case H_OFFPAGE:
+ space -= (is_key ? 4 : 2) * sizeof(*offp);
+ if (space > data->ulen)
+ goto back_up;
+
+ memcpy(&size, HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
+ memcpy(&pgno, HOFFPAGE_PGNO(hk), sizeof(db_pgno_t));
+ if (size > space)
+ goto back_up;
+
+ if ((ret =
+ __bam_bulk_overflow(dbc, size, pgno, np)) != 0)
+ return (ret);
+
+ if (is_key) {
+ *offp-- = key_off;
+ *offp-- = key_size;
+ }
+
+ *offp-- = (int32_t)(np - dbuf);
+ *offp-- = size;
+
+ np += size;
+ space -= size;
+ break;
+ }
+ } while (next_key && (indx += 2) < NUM_ENT(pg));
+
+ cp->indx = indx;
+ cp->dup_len = dup_len;
+ cp->dup_off = dup_off;
+ cp->dup_tlen = dup_tlen;
+
+ /* If we are off the page then try to the next page. */
+ if (ret == 0 && next_key && indx >= NUM_ENT(pg)) {
+ if ((ret = __ham_item_next(dbc, lock_mode, &pgno)) == 0)
+ goto next_pg;
+ if (ret != DB_NOTFOUND)
+ return (ret);
+ if ((ret = __memp_fput(dbc->dbp->mpf, cp->page, 0)) != 0)
+ return (ret);
+ cp->page = NULL;
+ if ((ret = __ham_get_meta(dbc)) != 0)
+ return (ret);
+
+ cp->bucket++;
+ if (cp->bucket > cp->hdr->max_bucket) {
+ /*
+ * Restore cursor to its previous state. We're past
+ * the last item in the last bucket, so the next
+ * DBC->c_get(DB_NEXT) will return DB_NOTFOUND.
+ */
+ cp->bucket--;
+ ret = DB_NOTFOUND;
+ } else {
+ /*
+ * Start on the next bucket.
+ *
+ * Note that if this new bucket happens to be empty,
+ * but there's another non-empty bucket after it,
+ * we'll return early. This is a rare case, and we
+ * don't guarantee any particular number of keys
+ * returned on each call, so just let the next call
+ * to bulk get move forward by yet another bucket.
+ */
+ cp->pgno = BUCKET_TO_PAGE(cp, cp->bucket);
+ cp->indx = NDX_INVALID;
+ F_CLR(cp, H_ISDUP);
+ ret = __ham_item_next(dbc, lock_mode, &pgno);
+ }
+
+ if ((t_ret = __ham_release_meta(dbc)) != 0)
+ return (t_ret);
+ if (ret == 0)
+ goto next_pg;
+ if (ret != DB_NOTFOUND)
+ return (ret);
+ }
+ *offp = (u_int32_t) -1;
+ return (0);
+}
+
static int
__ham_c_put(dbc, key, data, flags, pgnop)
DBC *dbc;
@@ -949,6 +986,7 @@ __ham_c_put(dbc, key, data, flags, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
+ DB_MPOOLFILE *mpf;
DBT tmp_val, *myval;
HASH_CURSOR *hcp;
u_int32_t nbytes;
@@ -962,6 +1000,7 @@ __ham_c_put(dbc, key, data, flags, pgnop)
COMPQUIET(myval, NULL);
dbp = dbc->dbp;
+ mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
if (F_ISSET(hcp, H_DELETED) &&
@@ -984,8 +1023,7 @@ __ham_c_put(dbc, key, data, flags, pgnop)
ret = 0;
if (hcp->seek_found_page != PGNO_INVALID &&
hcp->seek_found_page != hcp->pgno) {
- if ((ret = memp_fput(dbp->mpf, hcp->page, 0))
- != 0)
+ if ((ret = __memp_fput(mpf, hcp->page, 0)) != 0)
goto err2;
hcp->page = NULL;
hcp->pgno = hcp->seek_found_page;
@@ -1000,9 +1038,10 @@ __ham_c_put(dbc, key, data, flags, pgnop)
* and then write the new bytes represented by
* val.
*/
- if ((ret = __ham_init_dbt(dbp->dbenv,
- &tmp_val, data->size + data->doff,
- &dbc->rdata.data, &dbc->rdata.ulen)) == 0) {
+ if ((ret = __ham_init_dbt(dbp->dbenv, &tmp_val,
+ data->size + data->doff,
+ &dbc->my_rdata.data,
+ &dbc->my_rdata.ulen)) == 0) {
memset(tmp_val.data, 0, data->doff);
memcpy((u_int8_t *)tmp_val.data +
data->doff, data->data, data->size);
@@ -1038,8 +1077,8 @@ done: if (ret == 0 && F_ISSET(hcp, H_EXPAND)) {
F_CLR(hcp, H_EXPAND);
}
- if (ret == 0 &&
- (t_ret = memp_fset(dbp->mpf, hcp->page, DB_MPOOL_DIRTY)) != 0)
+ if (hcp->page != NULL && (t_ret =
+ __memp_fset(mpf, hcp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
err2: if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
@@ -1058,17 +1097,30 @@ __ham_expand_table(dbc)
DBC *dbc;
{
DB *dbp;
- PAGE *h;
+ DB_LOCK metalock;
+ DB_LSN lsn;
+ DB_MPOOLFILE *mpf;
+ DBMETA *mmeta;
HASH_CURSOR *hcp;
- db_pgno_t pgno;
- u_int32_t old_bucket, new_bucket;
- int ret;
+ PAGE *h;
+ db_pgno_t pgno, mpgno;
+ u_int32_t newalloc, new_bucket, old_bucket;
+ int dirty_meta, got_meta, logn, new_double, ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
if ((ret = __ham_dirty_meta(dbc)) != 0)
return (ret);
+ LOCK_INIT(metalock);
+ mmeta = (DBMETA *) hcp->hdr;
+ mpgno = mmeta->pgno;
+ h = NULL;
+ dirty_meta = 0;
+ got_meta = 0;
+ newalloc = 0;
+
/*
* If the split point is about to increase, make sure that we
* have enough extra pages. The calculation here is weird.
@@ -1078,86 +1130,116 @@ __ham_expand_table(dbc)
* see what the log of one greater than that is; here we have to
* look at the log of max + 2. VERY NASTY STUFF.
*
- * It just got even nastier. With subdatabases, we have to request
- * a chunk of contiguous pages, so we do that here using an
- * undocumented feature of mpool (the MPOOL_NEW_GROUP flag) to
- * give us a number of contiguous pages. Ouch.
+ * We figure out what we need to do, then we log it, then request
+ * the pages from mpool. We don't want to fail after extending
+ * the file.
+ *
+ * If the page we are about to split into has already been allocated,
+ * then we simply need to get it to get its LSN. If it hasn't yet
+ * been allocated, then we know it's LSN (0,0).
*/
- if (hcp->hdr->max_bucket == hcp->hdr->high_mask) {
- /*
- * Ask mpool to give us a set of contiguous page numbers
- * large enough to contain the next doubling.
- *
- * Figure out how many new pages we need. This will return
- * us the last page. We calculate its page number, initialize
- * the page and then write it back to reserve all the pages
- * in between. It is possible that the allocation of new pages
- * has already been done, but the tranaction aborted. Since
- * we don't undo the allocation, check for a valid pgno before
- * doing the allocation.
- */
- pgno = hcp->hdr->max_bucket + 1;
- if (hcp->hdr->spares[__db_log2(pgno) + 1] == PGNO_INVALID)
- /* Allocate a group of pages. */
- ret = memp_fget(dbp->mpf,
- &pgno, DB_MPOOL_NEW_GROUP, &h);
- else {
- /* Just read in the last page of the batch */
- pgno = hcp->hdr->spares[__db_log2(pgno) + 1] +
- hcp->hdr->max_bucket + 1;
- /* Move to the last page of the group. */
- pgno += hcp->hdr->max_bucket;
- ret = memp_fget(dbp->mpf,
- &pgno, DB_MPOOL_CREATE, &h);
- }
- if (ret != 0)
- return (ret);
- P_INIT(h, dbp->pgsize, pgno,
- PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
- pgno -= hcp->hdr->max_bucket;
- } else {
- pgno = BUCKET_TO_PAGE(hcp, hcp->hdr->max_bucket + 1);
+ new_bucket = hcp->hdr->max_bucket + 1;
+ old_bucket = new_bucket & hcp->hdr->low_mask;
+
+ new_double = hcp->hdr->max_bucket == hcp->hdr->high_mask;
+ logn = __db_log2(new_bucket);
+
+ if (!new_double || hcp->hdr->spares[logn + 1] != PGNO_INVALID) {
+ /* Page exists; get it so we can get its LSN */
+ pgno = BUCKET_TO_PAGE(hcp, new_bucket);
if ((ret =
- memp_fget(dbp->mpf, &pgno, DB_MPOOL_CREATE, &h)) != 0)
- return (ret);
+ __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &h)) != 0)
+ goto err;
+ lsn = h->lsn;
+ } else {
+ /* Get the master meta-data page to do allocation. */
+ if (F_ISSET(dbp, DB_AM_SUBDB)) {
+ mpgno = PGNO_BASE_MD;
+ if ((ret = __db_lget(dbc,
+ 0, mpgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ goto err;
+ if ((ret = __memp_fget(mpf, &mpgno, 0, &mmeta)) != 0)
+ goto err;
+ got_meta = 1;
+ }
+ pgno = mmeta->last_pgno + 1;
+ ZERO_LSN(lsn);
+ newalloc = 1;
}
- /* Now we can log the meta-data split. */
- if (DB_LOGGING(dbc)) {
- if ((ret = __ham_metagroup_log(dbp->dbenv,
- dbc->txn, &h->lsn, 0, dbp->log_fileid,
- hcp->hdr->max_bucket, pgno, &hcp->hdr->dbmeta.lsn,
- &h->lsn)) != 0) {
- (void)memp_fput(dbp->mpf, h, DB_MPOOL_DIRTY);
- return (ret);
- }
+ /* Log the meta-data split first. */
+ if (DBC_LOGGING(dbc)) {
+ /*
+ * We always log the page number of the first page of
+ * the allocation group. However, the LSN that we log
+ * is either the LSN on the first page (if we did not
+ * do the actual allocation here) or the LSN on the last
+ * page of the unit (if we did do the allocation here).
+ */
+ if ((ret = __ham_metagroup_log(dbp, dbc->txn,
+ &lsn, 0, hcp->hdr->max_bucket, mpgno, &mmeta->lsn,
+ hcp->hdr->dbmeta.pgno, &hcp->hdr->dbmeta.lsn,
+ pgno, &lsn, newalloc)) != 0)
+ goto err;
+ } else
+ LSN_NOT_LOGGED(lsn);
- hcp->hdr->dbmeta.lsn = h->lsn;
- }
+ hcp->hdr->dbmeta.lsn = lsn;
- /* If we allocated some new pages, write out the last page. */
- if ((ret = memp_fput(dbp->mpf, h, DB_MPOOL_DIRTY)) != 0)
- return (ret);
+ if (new_double && hcp->hdr->spares[logn + 1] == PGNO_INVALID) {
+ /*
+ * We need to begin a new doubling and we have not allocated
+ * any pages yet. Read the last page in and initialize it to
+ * make the allocation contiguous. The pgno we calculated
+ * above is the first page allocated. The entry in spares is
+ * that page number minus any buckets already allocated (it
+ * simplifies bucket to page transaction). After we've set
+ * that, we calculate the last pgno.
+ */
+
+ hcp->hdr->spares[logn + 1] = pgno - new_bucket;
+ pgno += hcp->hdr->max_bucket;
+
+ if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &h)) != 0)
+ goto err;
- new_bucket = ++hcp->hdr->max_bucket;
- old_bucket = (hcp->hdr->max_bucket & hcp->hdr->low_mask);
+ mmeta->last_pgno = pgno;
+ mmeta->lsn = lsn;
+ dirty_meta = DB_MPOOL_DIRTY;
+
+ P_INIT(h, dbp->pgsize,
+ pgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
+ }
+
+ /* Write out whatever page we ended up modifying. */
+ h->lsn = lsn;
+ if ((ret = __memp_fput(mpf, h, DB_MPOOL_DIRTY)) != 0)
+ goto err;
+ h = NULL;
/*
- * If we started a new doubling, fill in the spares array with
- * the starting page number negatively offset by the bucket number.
+ * Update the meta-data page of this hash database.
*/
- if (new_bucket > hcp->hdr->high_mask) {
- /* Starting a new doubling */
+ hcp->hdr->max_bucket = new_bucket;
+ if (new_double) {
hcp->hdr->low_mask = hcp->hdr->high_mask;
hcp->hdr->high_mask = new_bucket | hcp->hdr->low_mask;
- if (hcp->hdr->spares[__db_log2(new_bucket) + 1] == PGNO_INVALID)
- hcp->hdr->spares[__db_log2(new_bucket) + 1] =
- pgno - new_bucket;
}
/* Relocate records to the new bucket */
- return (__ham_split_page(dbc, old_bucket, new_bucket));
+ ret = __ham_split_page(dbc, old_bucket, new_bucket);
+
+err: if (got_meta)
+ (void)__memp_fput(mpf, mmeta, dirty_meta);
+
+ if (LOCK_ISSET(metalock))
+ (void)__TLPUT(dbc, metalock);
+
+ if (h != NULL)
+ (void)__memp_fput(mpf, h, 0);
+
+ return (ret);
}
/*
@@ -1191,7 +1273,7 @@ __ham_call_hash(dbc, k, len)
* everything held by the cursor.
*/
static int
-__ham_dup_return (dbc, val, flags)
+__ham_dup_return(dbc, val, flags)
DBC *dbc;
DBT *val;
u_int32_t flags;
@@ -1211,7 +1293,7 @@ __ham_dup_return (dbc, val, flags)
dbp = dbc->dbp;
hcp = (HASH_CURSOR *)dbc->internal;
ndx = H_DATAINDEX(hcp->indx);
- type = HPAGE_TYPE(hcp->page, ndx);
+ type = HPAGE_TYPE(dbp, hcp->page, ndx);
pp = hcp->page;
myval = val;
@@ -1228,8 +1310,8 @@ __ham_dup_return (dbc, val, flags)
DB_ASSERT(type != H_OFFDUP);
/* Case 1 */
- if (type != H_DUPLICATE &&
- flags != DB_GET_BOTH && flags != DB_GET_BOTHC)
+ if (type != H_DUPLICATE && flags != DB_GET_BOTH &&
+ flags != DB_GET_BOTHC && flags != DB_GET_BOTH_RANGE)
return (0);
/*
@@ -1239,11 +1321,11 @@ __ham_dup_return (dbc, val, flags)
*/
if (!F_ISSET(hcp, H_ISDUP) && type == H_DUPLICATE) {
F_SET(hcp, H_ISDUP);
- hcp->dup_tlen = LEN_HDATA(hcp->page,
+ hcp->dup_tlen = LEN_HDATA(dbp, hcp->page,
hcp->hdr->dbmeta.pagesize, hcp->indx);
- hk = H_PAIRDATA(hcp->page, hcp->indx);
- if (flags == DB_LAST
- || flags == DB_PREV || flags == DB_PREV_NODUP) {
+ hk = H_PAIRDATA(dbp, hcp->page, hcp->indx);
+ if (flags == DB_LAST ||
+ flags == DB_PREV || flags == DB_PREV_NODUP) {
hcp->dup_off = 0;
do {
memcpy(&len,
@@ -1265,7 +1347,8 @@ __ham_dup_return (dbc, val, flags)
* may need to adjust the cursor before returning data.
* Case 4
*/
- if (flags == DB_GET_BOTH || flags == DB_GET_BOTHC) {
+ if (flags == DB_GET_BOTH ||
+ flags == DB_GET_BOTHC || flags == DB_GET_BOTH_RANGE) {
if (F_ISSET(hcp, H_ISDUP)) {
/*
* If we're doing a join, search forward from the
@@ -1274,7 +1357,7 @@ __ham_dup_return (dbc, val, flags)
if (flags == DB_GET_BOTHC)
F_SET(hcp, H_CONTINUE);
- __ham_dsearch(dbc, val, &off, &cmp);
+ __ham_dsearch(dbc, val, &off, &cmp, flags);
/*
* This flag is set nowhere else and is safe to
@@ -1283,7 +1366,7 @@ __ham_dup_return (dbc, val, flags)
F_CLR(hcp, H_CONTINUE);
hcp->dup_off = off;
} else {
- hk = H_PAIRDATA(hcp->page, hcp->indx);
+ hk = H_PAIRDATA(dbp, hcp->page, hcp->indx);
if (((HKEYDATA *)hk)->type == H_OFFPAGE) {
memcpy(&tlen,
HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
@@ -1298,7 +1381,7 @@ __ham_dup_return (dbc, val, flags)
* routines may only look at data and size.
*/
tmp_val.data = HKEYDATA_DATA(hk);
- tmp_val.size = LEN_HDATA(hcp->page,
+ tmp_val.size = LEN_HDATA(dbp, hcp->page,
dbp->pgsize, hcp->indx);
cmp = dbp->dup_compare == NULL ?
__bam_defcmp(dbp, &tmp_val, val) :
@@ -1311,6 +1394,18 @@ __ham_dup_return (dbc, val, flags)
}
/*
+ * If we're doing a bulk get, we don't want to actually return
+ * the data: __ham_bulk will take care of cracking out the
+ * duplicates appropriately.
+ *
+ * The rest of this function calculates partial offsets and
+ * handles the actual __db_ret, so just return if
+ * DB_MULTIPLE(_KEY) is set.
+ */
+ if (F_ISSET(dbc, DBC_MULTIPLE | DBC_MULTIPLE_KEY))
+ return (0);
+
+ /*
* Now, everything is initialized, grab a duplicate if
* necessary.
*/
@@ -1351,8 +1446,8 @@ __ham_dup_return (dbc, val, flags)
* Finally, if we had a duplicate, pp, ndx, and myval should be
* set appropriately.
*/
- if ((ret = __db_ret(dbp, pp, ndx, myval, &dbc->rdata.data,
- &dbc->rdata.ulen)) != 0)
+ if ((ret = __db_ret(dbp, pp, ndx, myval, &dbc->rdata->data,
+ &dbc->rdata->ulen)) != 0)
return (ret);
/*
@@ -1374,6 +1469,7 @@ __ham_overwrite(dbc, nval, flags)
u_int32_t flags;
{
DB *dbp;
+ DB_ENV *dbenv;
HASH_CURSOR *hcp;
DBT *myval, tmp_val, tmp_val2;
void *newrec;
@@ -1383,6 +1479,7 @@ __ham_overwrite(dbc, nval, flags)
int ret;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
hcp = (HASH_CURSOR *)dbc->internal;
if (F_ISSET(hcp, H_ISDUP)) {
/*
@@ -1399,7 +1496,7 @@ __ham_overwrite(dbc, nval, flags)
*/
memset(&tmp_val, 0, sizeof(tmp_val));
if ((ret =
- __ham_dup_return (dbc, &tmp_val, DB_CURRENT)) != 0)
+ __ham_dup_return(dbc, &tmp_val, DB_CURRENT)) != 0)
return (ret);
/* Figure out new size. */
@@ -1435,7 +1532,7 @@ __ham_overwrite(dbc, nval, flags)
}
if ((ret = __os_malloc(dbp->dbenv,
- DUP_SIZE(newsize), NULL, &newrec)) != 0)
+ DUP_SIZE(newsize), &newrec)) != 0)
return (ret);
memset(&tmp_val2, 0, sizeof(tmp_val2));
F_SET(&tmp_val2, DB_DBT_PARTIAL);
@@ -1483,8 +1580,7 @@ __ham_overwrite(dbc, nval, flags)
tmp_val2.size = newsize;
if (dbp->dup_compare(
dbp, &tmp_val, &tmp_val2) != 0) {
- (void)__os_free(newrec,
- DUP_SIZE(newsize));
+ (void)__os_free(dbenv, newrec);
return (__db_duperr(dbp, flags));
}
}
@@ -1495,7 +1591,7 @@ __ham_overwrite(dbc, nval, flags)
tmp_val2.dlen = DUP_SIZE(hcp->dup_len);
ret = __ham_replpair(dbc, &tmp_val2, 0);
- (void)__os_free(newrec, DUP_SIZE(newsize));
+ (void)__os_free(dbenv, newrec);
/* Update cursor */
if (ret != 0)
@@ -1505,7 +1601,7 @@ __ham_overwrite(dbc, nval, flags)
hcp->dup_tlen += (newsize - nondup_size);
else
hcp->dup_tlen -= (nondup_size - newsize);
- hcp->dup_len = DUP_SIZE(newsize);
+ hcp->dup_len = newsize;
return (0);
} else {
/* Check whether we need to convert to off page. */
@@ -1520,17 +1616,21 @@ __ham_overwrite(dbc, nval, flags)
/* Make sure we maintain sort order. */
if (dbp->dup_compare != NULL) {
tmp_val2.data =
- HKEYDATA_DATA(H_PAIRDATA(hcp->page,
+ HKEYDATA_DATA(H_PAIRDATA(dbp, hcp->page,
hcp->indx)) + hcp->dup_off +
sizeof(db_indx_t);
tmp_val2.size = hcp->dup_len;
- if (dbp->dup_compare(dbp, nval, &tmp_val2) != 0)
+ if (dbp->dup_compare(
+ dbp, nval, &tmp_val2) != 0) {
+ __db_err(dbenv,
+ "Existing data sorts differently from put data");
return (EINVAL);
+ }
}
/* Overwriting a complete duplicate. */
if ((ret =
- __ham_make_dup(dbp->dbenv, nval,
- &tmp_val, &dbc->rdata.data, &dbc->rdata.ulen)) != 0)
+ __ham_make_dup(dbp->dbenv, nval, &tmp_val,
+ &dbc->my_rdata.data, &dbc->my_rdata.ulen)) != 0)
return (ret);
/* Now fix what we are replacing. */
tmp_val.doff = hcp->dup_off;
@@ -1541,7 +1641,7 @@ __ham_overwrite(dbc, nval, flags)
hcp->dup_tlen += (nval->size - hcp->dup_len);
else
hcp->dup_tlen -= (hcp->dup_len - nval->size);
- hcp->dup_len = DUP_SIZE(nval->size);
+ hcp->dup_len = (db_indx_t)nval->size;
}
myval = &tmp_val;
} else if (!F_ISSET(nval, DB_DBT_PARTIAL)) {
@@ -1549,12 +1649,12 @@ __ham_overwrite(dbc, nval, flags)
memcpy(&tmp_val, nval, sizeof(*nval));
F_SET(&tmp_val, DB_DBT_PARTIAL);
tmp_val.doff = 0;
- hk = H_PAIRDATA(hcp->page, hcp->indx);
+ hk = H_PAIRDATA(dbp, hcp->page, hcp->indx);
if (HPAGE_PTYPE(hk) == H_OFFPAGE)
memcpy(&tmp_val.dlen,
HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
else
- tmp_val.dlen = LEN_HDATA(hcp->page,
+ tmp_val.dlen = LEN_HDATA(dbp, hcp->page,
hcp->hdr->dbmeta.pagesize, hcp->indx);
myval = &tmp_val;
} else
@@ -1601,7 +1701,7 @@ __ham_lookup(dbc, key, sought, mode, pgnop)
hcp->bucket = __ham_call_hash(dbc, (u_int8_t *)key->data, key->size);
hcp->pgno = BUCKET_TO_PAGE(hcp, hcp->bucket);
- while (1) {
+ for (;;) {
*pgnop = PGNO_INVALID;
if ((ret = __ham_item_next(dbc, mode, pgnop)) != 0)
return (ret);
@@ -1609,7 +1709,7 @@ __ham_lookup(dbc, key, sought, mode, pgnop)
if (F_ISSET(hcp, H_NOMORE))
break;
- hk = H_PAIRKEY(hcp->page, hcp->indx);
+ hk = H_PAIRKEY(dbp, hcp->page, hcp->indx);
switch (HPAGE_PTYPE(hk)) {
case H_OFFPAGE:
memcpy(&tlen, HOFFPAGE_TLEN(hk), sizeof(u_int32_t));
@@ -1625,12 +1725,12 @@ __ham_lookup(dbc, key, sought, mode, pgnop)
break;
case H_KEYDATA:
if (key->size ==
- LEN_HKEY(hcp->page, dbp->pgsize, hcp->indx) &&
+ LEN_HKEY(dbp, hcp->page, dbp->pgsize, hcp->indx) &&
memcmp(key->data,
HKEYDATA_DATA(hk), key->size) == 0) {
/* Found the key, check for data type. */
found_key: F_SET(hcp, H_OK);
- dk = H_PAIRDATA(hcp->page, hcp->indx);
+ dk = H_PAIRDATA(dbp, hcp->page, hcp->indx);
if (HPAGE_PTYPE(dk) == H_OFFDUP)
memcpy(pgnop, HOFFDUP_PGNO(dk),
sizeof(db_pgno_t));
@@ -1643,7 +1743,7 @@ found_key: F_SET(hcp, H_OK);
* These are errors because keys are never
* duplicated, only data items are.
*/
- return (__db_pgfmt(dbp, PGNO(hcp->page)));
+ return (__db_pgfmt(dbp->dbenv, PGNO(hcp->page)));
}
}
@@ -1677,7 +1777,7 @@ __ham_init_dbt(dbenv, dbt, size, bufp, sizep)
memset(dbt, 0, sizeof(*dbt));
if (*sizep < size) {
- if ((ret = __os_realloc(dbenv, size, NULL, bufp)) != 0) {
+ if ((ret = __os_realloc(dbenv, size, bufp)) != 0) {
*sizep = 0;
return (ret);
}
@@ -1732,8 +1832,8 @@ __ham_c_update(dbc, len, add, is_dup)
MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
/*
- * Calcuate the order of this deleted record.
- * This will be one grater than any cursor that is pointing
+ * Calculate the order of this deleted record.
+ * This will be one greater than any cursor that is pointing
* at this record and already marked as deleted.
*/
order = 0;
@@ -1749,11 +1849,11 @@ __ham_c_update(dbc, len, add, is_dup)
continue;
lcp = (HASH_CURSOR *)cp->internal;
if (F_ISSET(lcp, H_DELETED) &&
- hcp->pgno == lcp->pgno &&
- hcp->indx == lcp->indx &&
- order <= lcp->order &&
- (!is_dup || hcp->dup_off == lcp->dup_off))
- order = lcp->order +1;
+ hcp->pgno == lcp->pgno &&
+ hcp->indx == lcp->indx &&
+ order <= lcp->order &&
+ (!is_dup || hcp->dup_off == lcp->dup_off))
+ order = lcp->order + 1;
}
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
}
@@ -1788,8 +1888,8 @@ __ham_c_update(dbc, len, add, is_dup)
* We are "undeleting" so unmark all
* cursors with the same order.
*/
- if (lcp->indx == hcp->indx
- && F_ISSET(lcp, H_DELETED)) {
+ if (lcp->indx == hcp->indx &&
+ F_ISSET(lcp, H_DELETED)) {
if (lcp->order == hcp->order)
F_CLR(lcp, H_DELETED);
else if (lcp->order >
@@ -1815,12 +1915,13 @@ __ham_c_update(dbc, len, add, is_dup)
} else {
if (lcp->indx > hcp->indx) {
lcp->indx -= 2;
- if (lcp->indx == hcp->indx
- && F_ISSET(lcp, H_DELETED))
+ if (lcp->indx == hcp->indx &&
+ F_ISSET(lcp, H_DELETED))
lcp->order += order;
- } else if (lcp->indx == hcp->indx
- && !F_ISSET(lcp, H_DELETED)) {
+ } else if (lcp->indx == hcp->indx &&
+ !F_ISSET(lcp, H_DELETED)) {
F_SET(lcp, H_DELETED);
+ F_CLR(lcp, H_ISDUP);
lcp->order = order;
}
}
@@ -1833,10 +1934,10 @@ __ham_c_update(dbc, len, add, is_dup)
*/
if (add) {
lcp->dup_tlen += len;
- if (lcp->dup_off == hcp->dup_off
- && F_ISSET(hcp, H_DELETED)
- && F_ISSET(lcp, H_DELETED)) {
- /* Abort of a delete. */
+ if (lcp->dup_off == hcp->dup_off &&
+ F_ISSET(hcp, H_DELETED) &&
+ F_ISSET(lcp, H_DELETED)) {
+ /* Abort of a delete. */
if (lcp->order == hcp->order)
F_CLR(lcp, H_DELETED);
else if (lcp->order >
@@ -1851,8 +1952,9 @@ __ham_c_update(dbc, len, add, is_dup)
lcp->dup_tlen -= len;
if (lcp->dup_off > hcp->dup_off) {
lcp->dup_off -= len;
- if (lcp->dup_off == hcp->dup_off
- && F_ISSET(lcp, H_DELETED))
+ if (lcp->dup_off ==
+ hcp->dup_off &&
+ F_ISSET(lcp, H_DELETED))
lcp->order += order;
} else if (lcp->dup_off ==
hcp->dup_off &&
@@ -1867,10 +1969,9 @@ __ham_c_update(dbc, len, add, is_dup)
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
- if (found != 0 && DB_LOGGING(dbc)) {
- if ((ret = __ham_curadj_log(dbenv,
- my_txn, &lsn, 0, dbp->log_fileid, hcp->pgno,
- hcp->indx, len, hcp->dup_off, add, is_dup, order)) != 0)
+ if (found != 0 && DBC_LOGGING(dbc)) {
+ if ((ret = __ham_curadj_log(dbp, my_txn, &lsn, 0, hcp->pgno,
+ hcp->indx, len, hcp->dup_off, add, is_dup, order)) != 0)
return (ret);
}
@@ -1885,13 +1986,12 @@ __ham_c_update(dbc, len, add, is_dup)
* cursors on a split. The latter is so we can update cursors when we
* move items off page.
*
- * PUBLIC: int __ham_get_clist __P((DB *,
- * PUBLIC: db_pgno_t, u_int32_t, DBC ***));
+ * PUBLIC: int __ham_get_clist __P((DB *, db_pgno_t, u_int32_t, DBC ***));
*/
int
-__ham_get_clist(dbp, bucket, indx, listp)
+__ham_get_clist(dbp, pgno, indx, listp)
DB *dbp;
- db_pgno_t bucket;
+ db_pgno_t pgno;
u_int32_t indx;
DBC ***listp;
{
@@ -1915,18 +2015,20 @@ __ham_get_clist(dbp, bucket, indx, listp)
MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
for (cp = TAILQ_FIRST(&ldbp->active_queue); cp != NULL;
cp = TAILQ_NEXT(cp, links))
- if (cp->dbtype == DB_HASH &&
- ((indx == NDX_INVALID &&
- ((HASH_CURSOR *)(cp->internal))->bucket
- == bucket) || (indx != NDX_INVALID &&
- cp->internal->pgno == bucket &&
- cp->internal->indx == indx))) {
+ /*
+ * We match if cp->pgno matches the specified
+ * pgno, and if either the cp->indx matches
+ * or we weren't given an index.
+ */
+ if (cp->internal->pgno == pgno &&
+ (indx == NDX_INVALID ||
+ cp->internal->indx == indx)) {
if (nused >= nalloc) {
nalloc += 10;
if ((ret = __os_realloc(dbp->dbenv,
nalloc * sizeof(HASH_CURSOR *),
- NULL, listp)) != 0)
- return (ret);
+ listp)) != 0)
+ goto err;
}
(*listp)[nused++] = cp;
}
@@ -1939,74 +2041,25 @@ __ham_get_clist(dbp, bucket, indx, listp)
if (nused >= nalloc) {
nalloc++;
if ((ret = __os_realloc(dbp->dbenv,
- nalloc * sizeof(HASH_CURSOR *), NULL, listp)) != 0)
+ nalloc * sizeof(HASH_CURSOR *), listp)) != 0)
return (ret);
}
(*listp)[nused] = NULL;
}
return (0);
-}
-
-static int
-__ham_del_dups(orig_dbc, key)
- DBC *orig_dbc;
- DBT *key;
-{
- DBC *dbc;
- DBT data, lkey;
- int ret, t_ret;
-
- /* Allocate a cursor. */
- if ((ret = orig_dbc->c_dup(orig_dbc, &dbc, 0)) != 0)
- return (ret);
-
- /*
- * Walk a cursor through the key/data pairs, deleting as we go. Set
- * the DB_DBT_USERMEM flag, as this might be a threaded application
- * and the flags checking will catch us. We don't actually want the
- * keys or data, so request a partial of length 0.
- */
- memset(&lkey, 0, sizeof(lkey));
- F_SET(&lkey, DB_DBT_USERMEM | DB_DBT_PARTIAL);
- memset(&data, 0, sizeof(data));
- F_SET(&data, DB_DBT_USERMEM | DB_DBT_PARTIAL);
-
- /* Walk through the set of key/data pairs, deleting as we go. */
- if ((ret = dbc->c_get(dbc, key, &data, DB_SET)) != 0) {
- if (ret == DB_NOTFOUND)
- ret = 0;
- goto err;
- }
-
- for (;;) {
- if ((ret = dbc->c_del(dbc, 0)) != 0)
- goto err;
- if ((ret = dbc->c_get(dbc, &lkey, &data, DB_NEXT_DUP)) != 0) {
- if (ret == DB_NOTFOUND) {
- ret = 0;
- break;
- }
- goto err;
- }
- }
-
-err: /*
- * Discard the cursor. This will cause the underlying off-page dup
- * tree to go away as well as the actual entry on the page.
- */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
-
+err:
+ MUTEX_THREAD_UNLOCK(dbp->dbenv, dbp->mutexp);
+ MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
return (ret);
-
}
static int
__ham_c_writelock(dbc)
DBC *dbc;
{
- HASH_CURSOR *hcp;
+ DB_ENV *dbenv;
DB_LOCK tmp_lock;
+ HASH_CURSOR *hcp;
int ret;
/*
@@ -2017,79 +2070,13 @@ __ham_c_writelock(dbc)
return (0);
hcp = (HASH_CURSOR *)dbc->internal;
- if ((hcp->lock.off == LOCK_INVALID || hcp->lock_mode == DB_LOCK_READ)) {
+ if ((!LOCK_ISSET(hcp->lock) || hcp->lock_mode == DB_LOCK_READ)) {
tmp_lock = hcp->lock;
if ((ret = __ham_lock_bucket(dbc, DB_LOCK_WRITE)) != 0)
return (ret);
- if (tmp_lock.off != LOCK_INVALID &&
- (ret = lock_put(dbc->dbp->dbenv, &tmp_lock)) != 0)
- return (ret);
- }
- return (0);
-}
-
-/*
- * __ham_c_chgpg --
- *
- * Adjust the cursors after moving an item from one page to another.
- * If the old_index is NDX_INVALID, that means that we copied the
- * page wholesale and we're leaving indices intact and just changing
- * the page number.
- *
- * PUBLIC: int __ham_c_chgpg
- * PUBLIC: __P((DBC *, db_pgno_t, u_int32_t, db_pgno_t, u_int32_t));
- */
-int
-__ham_c_chgpg(dbc, old_pgno, old_index, new_pgno, new_index)
- DBC *dbc;
- db_pgno_t old_pgno, new_pgno;
- u_int32_t old_index, new_index;
-{
- DB *dbp, *ldbp;
- DB_ENV *dbenv;
- DB_LSN lsn;
- DB_TXN *my_txn;
- DBC *cp;
- HASH_CURSOR *hcp;
- int found, ret;
-
- dbp = dbc->dbp;
- dbenv = dbp->dbenv;
-
- my_txn = IS_SUBTRANSACTION(dbc->txn) ? dbc->txn : NULL;
- found = 0;
-
- MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
- for (ldbp = __dblist_get(dbenv, dbp->adj_fileid);
- ldbp != NULL && ldbp->adj_fileid == dbp->adj_fileid;
- ldbp = LIST_NEXT(ldbp, dblistlinks)) {
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- for (cp = TAILQ_FIRST(&ldbp->active_queue); cp != NULL;
- cp = TAILQ_NEXT(cp, links)) {
- if (cp == dbc || cp->dbtype != DB_HASH)
- continue;
-
- hcp = (HASH_CURSOR *)cp->internal;
- if (hcp->pgno == old_pgno) {
- if (old_index == NDX_INVALID) {
- hcp->pgno = new_pgno;
- } else if (hcp->indx == old_index) {
- hcp->pgno = new_pgno;
- hcp->indx = new_index;
- } else
- continue;
- if (my_txn != NULL && cp->txn != my_txn)
- found = 1;
- }
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
-
- if (found != 0 && DB_LOGGING(dbc)) {
- if ((ret = __ham_chgpg_log(dbenv,
- my_txn, &lsn, 0, dbp->log_fileid, DB_HAM_CHGPG,
- old_pgno, new_pgno, old_index, new_index)) != 0)
+ dbenv = dbc->dbp->dbenv;
+ if (LOCK_ISSET(tmp_lock) &&
+ (ret = __lock_put(dbenv, &tmp_lock)) != 0)
return (ret);
}
return (0);
diff --git a/db/hash/hash.src b/db/hash/hash.src
index e6ecd11c9..246ae847d 100644
--- a/db/hash/hash.src
+++ b/db/hash/hash.src
@@ -1,8 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
+ *
+ * $Id: hash.src,v 10.41 2003/11/14 05:32:37 ubell Exp $
*/
/*
* Copyright (c) 1995, 1996
@@ -38,44 +40,10 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
- * $Id: hash.src,v 10.24 2000/12/12 17:41:48 bostic Exp $
- */
-
-/*
- * This is the source file used to create the logging functions for the
- * hash package. Each access method (or set of routines wishing to register
- * record types with the transaction system) should have a file like this.
- * Each type of log record and its parameters is defined. The basic
- * format of a record definition is:
- *
- * BEGIN <RECORD_TYPE>
- * ARG|STRING|POINTER <variable name> <variable type> <printf format>
- * ...
- * END
- * ARG the argument is a simple parameter of the type * specified.
- * DBT the argument is a DBT (db.h) containing a length and pointer.
- * PTR the argument is a pointer to the data type specified; the entire
- * type should be logged.
- *
- * There are a set of shell scripts of the form xxx.sh that generate c
- * code and or h files to process these. (This is probably better done
- * in a single PERL script, but for now, this works.)
- *
- * The DB recovery system requires the following three fields appear in
- * every record, and will assign them to the per-record-type structures
- * as well as making them the first parameters to the appropriate logging
- * call.
- * rectype: record-type, identifies the structure and log/read call
- * txnid: transaction id, a DBT in this implementation
- * prev: the last LSN for this transaction
*/
-/*
- * Use the argument of PREFIX as the prefix for all record types,
- * routines, id numbers, etc.
- */
-PREFIX ham
+PREFIX __ham
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
@@ -83,16 +51,17 @@ INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "hash.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/hash.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
@@ -109,7 +78,7 @@ INCLUDE
*/
BEGIN insdel 21
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG ndx u_int32_t lu
POINTER pagelsn DB_LSN * lu
@@ -129,7 +98,7 @@ END
*/
BEGIN newpage 22
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG prev_pgno db_pgno_t lu
POINTER prevlsn DB_LSN * lu
ARG new_pgno db_pgno_t lu
@@ -139,36 +108,16 @@ POINTER nextlsn DB_LSN * lu
END
/*
- * DEPRECATED in 3.0.
- * Superceded by metagroup which allocates a group of new pages.
- *
- * Splitting requires two types of log messages. The first logs the
- * meta-data of the split.
- *
- * For the meta-data split
- * bucket: max_bucket in table before split
- * ovflpoint: overflow point before split.
- * spares: spares[ovflpoint] before split.
- */
-DEPRECATED splitmeta 23
-ARG fileid int32_t ld
-ARG bucket u_int32_t lu
-ARG ovflpoint u_int32_t lu
-ARG spares u_int32_t lu
-POINTER metalsn DB_LSN * lu
-END
-
-/*
* Splitting requires two types of log messages. The second logs the
* data on the original page. To redo the split, we have to visit the
* new page (pages) and add the items back on the page if they are not
* yet there.
*/
BEGIN splitdata 24
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG opcode u_int32_t lu
ARG pgno db_pgno_t lu
-DBT pageimage DBT s
+PGDBT pageimage DBT s
POINTER pagelsn DB_LSN * lu
END
@@ -185,7 +134,7 @@ END
* makedup - this was a replacement that made an item a duplicate.
*/
BEGIN replace 25
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG ndx u_int32_t lu
POINTER pagelsn DB_LSN * lu
@@ -196,52 +145,6 @@ ARG makedup u_int32_t lu
END
/*
- * DEPRECATED in 3.0.
- * Hash now uses the btree allocation and deletion page routines.
- *
- * HASH-newpgno: is used to record getting/deleting a new page number.
- * This doesn't require much data modification, just modifying the
- * meta-data.
- * pgno is the page being allocated/freed.
- * free_pgno is the next_pgno on the free list.
- * old_type was the type of a page being deallocated.
- * old_pgno was the next page number before the deallocation.
- */
-DEPRECATED newpgno 26
-ARG opcode u_int32_t lu
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-ARG free_pgno db_pgno_t lu
-ARG old_type u_int32_t lu
-ARG old_pgno db_pgno_t lu
-ARG new_type u_int32_t lu
-POINTER pagelsn DB_LSN * lu
-POINTER metalsn DB_LSN * lu
-END
-
-/*
- * DEPRECATED in 3.0.
- * Since we now pre-allocate the contiguous chunk of pages for a doubling,
- * there is no big benefit to pre-allocating a few extra pages. It used
- * to be that the file was only physically as large as the current bucket,
- * so if you were on a doubling of 16K, but were only on the first bucket
- * of that 16K, the file was much shorter than it would be at the end of
- * the doubling, so we didn't want to force overflow pages at the end of the
- * 16K pages. Since we now must allocate the 16K pages (because of sub
- * databases), it's not a big deal to tack extra pages on at the end.
- *
- * ovfl: initialize a set of overflow pages.
- */
-DEPRECATED ovfl 27
-ARG fileid int32_t ld
-ARG start_pgno db_pgno_t lu
-ARG npages u_int32_t lu
-ARG free_pgno db_pgno_t lu
-ARG ovflpoint u_int32_t lu
-POINTER metalsn DB_LSN * lu
-END
-
-/*
* Used when we empty the first page in a bucket and there are pages after
* it. The page after it gets copied into the bucket page (since bucket
* pages have to be in fixed locations).
@@ -252,33 +155,46 @@ END
* nnextlsn: the LSN of nnext_pgno.
*/
BEGIN copypage 28
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
POINTER pagelsn DB_LSN * lu
ARG next_pgno db_pgno_t lu
POINTER nextlsn DB_LSN * lu
ARG nnext_pgno db_pgno_t lu
POINTER nnextlsn DB_LSN * lu
-DBT page DBT s
+PGDBT page DBT s
END
/*
- * This replaces the old splitmeta operation. It behaves largely the same
- * way, but it has enough information so that we can record a group allocation
- * which we do now because of sub databases. The number of pages allocated is
- * always bucket + 1 pgno is the page number of the first newly allocated
- * bucket.
+ * This record logs the meta-data aspects of a split operation. It has enough
+ * information so that we can record both an individual page allocation as well
+ * as a group allocation which we do because in sub databases, the pages in
+ * a hash doubling, must be contiguous. If we do a group allocation, the
+ * number of pages allocated is bucket + 1, pgno is the page number of the
+ * first newly allocated bucket.
+ *
* bucket: Old maximum bucket number.
- * pgno: Page allocated to bucket + 1 (first newly allocated page)
+ * mmpgno: Master meta-data page number (0 if same as mpgno).
+ * mmetalsn: Lsn of the master meta-data page.
+ * mpgno: Meta-data page number.
* metalsn: Lsn of the meta-data page.
- * pagelsn: Lsn of the maximum page allocated.
+ * pgno: Page allocated to bucket + 1 (first newly allocated page)
+ * pagelsn: Lsn of either the first page allocated (if newalloc == 0) or
+ * the last page allocated (if newalloc == 1).
+ * newalloc: 1 indicates that this record did the actual allocation;
+ * 0 indicates that the pages were already allocated from a
+ * previous (failed) allocation.
*/
BEGIN metagroup 29
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG bucket u_int32_t lu
-ARG pgno db_pgno_t lu
+ARG mmpgno db_pgno_t lu
+POINTER mmetalsn DB_LSN * lu
+ARG mpgno db_pgno_t lu
POINTER metalsn DB_LSN * lu
+ARG pgno db_pgno_t lu
POINTER pagelsn DB_LSN * lu
+ARG newalloc u_int32_t lu
END
/*
@@ -293,26 +209,8 @@ END
* start_pgno: starting page number
* num: number of allocated pages
*/
-DEPRECATED groupalloc1 30
-ARG fileid int32_t ld
-ARG pgno db_pgno_t lu
-POINTER metalsn DB_LSN * lu
-POINTER mmetalsn DB_LSN * lu
-ARG start_pgno db_pgno_t lu
-ARG num u_int32_t lu
-END
-
-DEPRECATED groupalloc2 31
-ARG fileid int32_t ld
-POINTER meta_lsn DB_LSN * lu
-POINTER alloc_lsn DB_LSN * lu
-ARG start_pgno db_pgno_t lu
-ARG num u_int32_t lu
-ARG free db_pgno_t lu
-END
-
BEGIN groupalloc 32
-ARG fileid int32_t ld
+DB fileid int32_t ld
POINTER meta_lsn DB_LSN * lu
ARG start_pgno db_pgno_t lu
ARG num u_int32_t lu
@@ -329,7 +227,7 @@ END
* dup_off - if a dup its offset
* add - 1 if add 0 if delete
* is_dup - 1 if dup 0 otherwise.
- * order - order assinged to this deleted record or dup.
+ * order - order assigned to this deleted record or dup.
*
* chgpg - rmoved a page, move the records to a new page
* mode - CHGPG page was deleted or records move to new page.
@@ -338,9 +236,15 @@ END
* old_pgno, new_pgno - old and new page numbers.
* old_index, new_index - old and new index numbers, NDX_INVALID if
* it effects all records on the page.
+ * For three opcodes new in 3.3 (DB_HAM_DELFIRSTPG, DELMIDPG,
+ * and DELLASTPG), we overload old_indx and new_indx to avoid
+ * needing a new log record type: old_indx stores the only
+ * indx of interest to these records, and new_indx stores the
+ * order that's assigned to the lowest deleted record we're
+ * moving.
*/
BEGIN curadj 33
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
ARG len u_int32_t lu
@@ -351,7 +255,7 @@ ARG order u_int32_t lu
END
BEGIN chgpg 34
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG mode db_ham_mode ld
ARG old_pgno db_pgno_t lu
ARG new_pgno db_pgno_t lu
diff --git a/db/hash/hash_auto.c b/db/hash/hash_auto.c
index b6faf4f56..b8f217a79 100644
--- a/db/hash/hash_auto.c
+++ b/db/hash/hash_auto.c
@@ -5,27 +5,32 @@
#include <sys/types.h>
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "hash.h"
-#include "txn.h"
-
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/hash.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+
+/*
+ * PUBLIC: int __ham_insdel_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, u_int32_t, DB_LSN *,
+ * PUBLIC: const DBT *, const DBT *));
+ */
int
-__ham_insdel_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, pgno, ndx, pagelsn, key,
- data)
- DB_ENV *dbenv;
+__ham_insdel_log(dbp, txnid, ret_lsnp, flags,
+ opcode, pgno, ndx, pagelsn, key,
+ data)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_pgno_t pgno;
u_int32_t ndx;
DB_LSN * pagelsn;
@@ -33,54 +38,116 @@ __ham_insdel_log(dbenv, txnid, ret_lsnp, flags,
const DBT *data;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_insdel;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_insdel;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(ndx)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*pagelsn)
+ sizeof(u_int32_t) + (key == NULL ? 0 : key->size)
+ sizeof(u_int32_t) + (data == NULL ? 0 : data->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &ndx, sizeof(ndx));
- bp += sizeof(ndx);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)ndx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
+
if (key == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -91,6 +158,7 @@ __ham_insdel_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, key->data, key->size);
bp += key->size;
}
+
if (data == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -101,14 +169,92 @@ __ham_insdel_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, data->data, data->size);
bp += data->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_insdel_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_insdel_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__ham_insdel_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_insdel_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_insdel_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -119,52 +265,50 @@ __ham_insdel_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__ham_insdel_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_insdel_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_insdel: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_insdel%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tndx: %lu\n", (u_long)argp->ndx);
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tndx: %lu\n", (u_long)argp->ndx);
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\tkey: ");
+ (void)printf("\tkey: ");
for (i = 0; i < argp->key.size; i++) {
ch = ((u_int8_t *)argp->key.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tdata: ");
+ (void)printf("\n");
+ (void)printf("\tdata: ");
for (i = 0; i < argp->data.size; i++) {
ch = ((u_int8_t *)argp->data.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_insdel_read __P((DB_ENV *, void *, __ham_insdel_args **));
+ */
int
__ham_insdel_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -172,55 +316,74 @@ __ham_insdel_read(dbenv, recbuf, argpp)
__ham_insdel_args **argpp;
{
__ham_insdel_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_insdel_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_insdel_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->ndx, bp, sizeof(argp->ndx));
- bp += sizeof(argp->ndx);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->ndx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
+
memset(&argp->key, 0, sizeof(argp->key));
memcpy(&argp->key.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->key.data = bp;
bp += argp->key.size;
+
memset(&argp->data, 0, sizeof(argp->data));
memcpy(&argp->data.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->data.data = bp;
bp += argp->data.size;
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_newpage_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *,
+ * PUBLIC: db_pgno_t, DB_LSN *));
+ */
int
-__ham_newpage_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, prev_pgno, prevlsn, new_pgno, pagelsn,
- next_pgno, nextlsn)
- DB_ENV *dbenv;
+__ham_newpage_log(dbp, txnid, ret_lsnp, flags,
+ opcode, prev_pgno, prevlsn, new_pgno, pagelsn,
+ next_pgno, nextlsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_pgno_t prev_pgno;
DB_LSN * prevlsn;
db_pgno_t new_pgno;
@@ -229,74 +392,218 @@ __ham_newpage_log(dbenv, txnid, ret_lsnp, flags,
DB_LSN * nextlsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_newpage;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_newpage;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(prev_pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*prevlsn)
- + sizeof(new_pgno)
+ + sizeof(u_int32_t)
+ sizeof(*pagelsn)
- + sizeof(next_pgno)
+ + sizeof(u_int32_t)
+ sizeof(*nextlsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &prev_pgno, sizeof(prev_pgno));
- bp += sizeof(prev_pgno);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)prev_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (prevlsn != NULL)
memcpy(bp, prevlsn, sizeof(*prevlsn));
else
memset(bp, 0, sizeof(*prevlsn));
bp += sizeof(*prevlsn);
- memcpy(bp, &new_pgno, sizeof(new_pgno));
- bp += sizeof(new_pgno);
+
+ uinttmp = (u_int32_t)new_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- memcpy(bp, &next_pgno, sizeof(next_pgno));
- bp += sizeof(next_pgno);
+
+ uinttmp = (u_int32_t)next_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (nextlsn != NULL)
memcpy(bp, nextlsn, sizeof(*nextlsn));
else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_newpage_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_newpage_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__ham_newpage_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_newpage_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_newpage_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -306,40 +613,43 @@ __ham_newpage_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__ham_newpage_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_newpage_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_newpage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_newpage%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tprev_pgno: %lu\n", (u_long)argp->prev_pgno);
- printf("\tprevlsn: [%lu][%lu]\n",
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tprev_pgno: %lu\n", (u_long)argp->prev_pgno);
+ (void)printf("\tprevlsn: [%lu][%lu]\n",
(u_long)argp->prevlsn.file, (u_long)argp->prevlsn.offset);
- printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
- printf("\tnextlsn: [%lu][%lu]\n",
+ (void)printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
+ (void)printf("\tnextlsn: [%lu][%lu]\n",
(u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_newpage_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_newpage_args **));
+ */
int
__ham_newpage_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -347,168 +657,172 @@ __ham_newpage_read(dbenv, recbuf, argpp)
__ham_newpage_args **argpp;
{
__ham_newpage_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_newpage_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_newpage_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->prev_pgno, bp, sizeof(argp->prev_pgno));
- bp += sizeof(argp->prev_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->prev_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->prevlsn, bp, sizeof(argp->prevlsn));
bp += sizeof(argp->prevlsn);
- memcpy(&argp->new_pgno, bp, sizeof(argp->new_pgno));
- bp += sizeof(argp->new_pgno);
- memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
- bp += sizeof(argp->pagelsn);
- memcpy(&argp->next_pgno, bp, sizeof(argp->next_pgno));
- bp += sizeof(argp->next_pgno);
- memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
- bp += sizeof(argp->nextlsn);
- *argpp = argp;
- return (0);
-}
-int
-__ham_splitmeta_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __ham_splitmeta_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
+ bp += sizeof(argp->pagelsn);
- if ((ret = __ham_splitmeta_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]ham_splitmeta: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tbucket: %lu\n", (u_long)argp->bucket);
- printf("\tovflpoint: %lu\n", (u_long)argp->ovflpoint);
- printf("\tspares: %lu\n", (u_long)argp->spares);
- printf("\tmetalsn: [%lu][%lu]\n",
- (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
-int
-__ham_splitmeta_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __ham_splitmeta_args **argpp;
-{
- __ham_splitmeta_args *argp;
- u_int8_t *bp;
- int ret;
+ memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
+ bp += sizeof(argp->nextlsn);
- ret = __os_malloc(dbenv, sizeof(__ham_splitmeta_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->bucket, bp, sizeof(argp->bucket));
- bp += sizeof(argp->bucket);
- memcpy(&argp->ovflpoint, bp, sizeof(argp->ovflpoint));
- bp += sizeof(argp->ovflpoint);
- memcpy(&argp->spares, bp, sizeof(argp->spares));
- bp += sizeof(argp->spares);
- memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
- bp += sizeof(argp->metalsn);
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_splitdata_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, const DBT *, DB_LSN *));
+ */
int
-__ham_splitdata_log(dbenv, txnid, ret_lsnp, flags,
- fileid, opcode, pgno, pageimage, pagelsn)
- DB_ENV *dbenv;
+__ham_splitdata_log(dbp, txnid, ret_lsnp, flags, opcode, pgno, pageimage, pagelsn)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
u_int32_t opcode;
db_pgno_t pgno;
const DBT *pageimage;
DB_LSN * pagelsn;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_splitdata;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_splitdata;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(opcode)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (pageimage == NULL ? 0 : pageimage->size)
+ sizeof(*pagelsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pageimage == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -519,19 +833,98 @@ __ham_splitdata_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, pageimage->data, pageimage->size);
bp += pageimage->size;
}
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_splitdata_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_splitdata_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__ham_splitdata_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_splitdata_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_splitdata_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -542,42 +935,44 @@ __ham_splitdata_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__ham_splitdata_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_splitdata_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_splitdata: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_splitdata%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tpageimage: ");
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tpageimage: ");
for (i = 0; i < argp->pageimage.size; i++) {
ch = ((u_int8_t *)argp->pageimage.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\n");
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_splitdata_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_splitdata_args **));
+ */
int
__ham_splitdata_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -585,47 +980,62 @@ __ham_splitdata_read(dbenv, recbuf, argpp)
__ham_splitdata_args **argpp;
{
__ham_splitdata_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_splitdata_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_splitdata_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->pageimage, 0, sizeof(argp->pageimage));
memcpy(&argp->pageimage.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->pageimage.data = bp;
bp += argp->pageimage.size;
+
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_replace_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, u_int32_t, DB_LSN *, int32_t, const DBT *,
+ * PUBLIC: const DBT *, u_int32_t));
+ */
int
-__ham_replace_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, ndx, pagelsn, off, olditem,
- newitem, makedup)
- DB_ENV *dbenv;
+__ham_replace_log(dbp, txnid, ret_lsnp, flags, pgno, ndx, pagelsn, off, olditem,
+ newitem, makedup)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
u_int32_t ndx;
DB_LSN * pagelsn;
@@ -635,55 +1045,117 @@ __ham_replace_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t makedup;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_replace;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_replace;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(ndx)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*pagelsn)
- + sizeof(off)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (olditem == NULL ? 0 : olditem->size)
+ sizeof(u_int32_t) + (newitem == NULL ? 0 : newitem->size)
- + sizeof(makedup);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &ndx, sizeof(ndx));
- bp += sizeof(ndx);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)ndx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- memcpy(bp, &off, sizeof(off));
- bp += sizeof(off);
+
+ uinttmp = (u_int32_t)off;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (olditem == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -694,6 +1166,7 @@ __ham_replace_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, olditem->data, olditem->size);
bp += olditem->size;
}
+
if (newitem == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -704,16 +1177,96 @@ __ham_replace_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, newitem->data, newitem->size);
bp += newitem->size;
}
- memcpy(bp, &makedup, sizeof(makedup));
- bp += sizeof(makedup);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)makedup;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_replace_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_replace_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__ham_replace_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_replace_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_replace_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -724,53 +1277,52 @@ __ham_replace_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__ham_replace_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_replace_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_replace: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_replace%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tndx: %lu\n", (u_long)argp->ndx);
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tndx: %lu\n", (u_long)argp->ndx);
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\toff: %ld\n", (long)argp->off);
- printf("\tolditem: ");
+ (void)printf("\toff: %ld\n", (long)argp->off);
+ (void)printf("\tolditem: ");
for (i = 0; i < argp->olditem.size; i++) {
ch = ((u_int8_t *)argp->olditem.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tnewitem: ");
+ (void)printf("\n");
+ (void)printf("\tnewitem: ");
for (i = 0; i < argp->newitem.size; i++) {
ch = ((u_int8_t *)argp->newitem.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tmakedup: %lu\n", (u_long)argp->makedup);
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tmakedup: %lu\n", (u_long)argp->makedup);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_replace_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_replace_args **));
+ */
int
__ham_replace_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -778,220 +1330,76 @@ __ham_replace_read(dbenv, recbuf, argpp)
__ham_replace_args **argpp;
{
__ham_replace_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_replace_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_replace_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->ndx, bp, sizeof(argp->ndx));
- bp += sizeof(argp->ndx);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->ndx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
- memcpy(&argp->off, bp, sizeof(argp->off));
- bp += sizeof(argp->off);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->off = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->olditem, 0, sizeof(argp->olditem));
memcpy(&argp->olditem.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->olditem.data = bp;
bp += argp->olditem.size;
+
memset(&argp->newitem, 0, sizeof(argp->newitem));
memcpy(&argp->newitem.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->newitem.data = bp;
bp += argp->newitem.size;
- memcpy(&argp->makedup, bp, sizeof(argp->makedup));
- bp += sizeof(argp->makedup);
- *argpp = argp;
- return (0);
-}
-
-int
-__ham_newpgno_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __ham_newpgno_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __ham_newpgno_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]ham_newpgno: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tfree_pgno: %lu\n", (u_long)argp->free_pgno);
- printf("\told_type: %lu\n", (u_long)argp->old_type);
- printf("\told_pgno: %lu\n", (u_long)argp->old_pgno);
- printf("\tnew_type: %lu\n", (u_long)argp->new_type);
- printf("\tpagelsn: [%lu][%lu]\n",
- (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\tmetalsn: [%lu][%lu]\n",
- (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__ham_newpgno_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __ham_newpgno_args **argpp;
-{
- __ham_newpgno_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__ham_newpgno_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->free_pgno, bp, sizeof(argp->free_pgno));
- bp += sizeof(argp->free_pgno);
- memcpy(&argp->old_type, bp, sizeof(argp->old_type));
- bp += sizeof(argp->old_type);
- memcpy(&argp->old_pgno, bp, sizeof(argp->old_pgno));
- bp += sizeof(argp->old_pgno);
- memcpy(&argp->new_type, bp, sizeof(argp->new_type));
- bp += sizeof(argp->new_type);
- memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
- bp += sizeof(argp->pagelsn);
- memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
- bp += sizeof(argp->metalsn);
- *argpp = argp;
- return (0);
-}
-
-int
-__ham_ovfl_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __ham_ovfl_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->makedup = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- if ((ret = __ham_ovfl_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]ham_ovfl: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tstart_pgno: %lu\n", (u_long)argp->start_pgno);
- printf("\tnpages: %lu\n", (u_long)argp->npages);
- printf("\tfree_pgno: %lu\n", (u_long)argp->free_pgno);
- printf("\tovflpoint: %lu\n", (u_long)argp->ovflpoint);
- printf("\tmetalsn: [%lu][%lu]\n",
- (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__ham_ovfl_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __ham_ovfl_args **argpp;
-{
- __ham_ovfl_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__ham_ovfl_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->start_pgno, bp, sizeof(argp->start_pgno));
- bp += sizeof(argp->start_pgno);
- memcpy(&argp->npages, bp, sizeof(argp->npages));
- bp += sizeof(argp->npages);
- memcpy(&argp->free_pgno, bp, sizeof(argp->free_pgno));
- bp += sizeof(argp->free_pgno);
- memcpy(&argp->ovflpoint, bp, sizeof(argp->ovflpoint));
- bp += sizeof(argp->ovflpoint);
- memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
- bp += sizeof(argp->metalsn);
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_copypage_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *, db_pgno_t,
+ * PUBLIC: DB_LSN *, const DBT *));
+ */
int
-__ham_copypage_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, pagelsn, next_pgno, nextlsn, nnext_pgno,
- nnextlsn, page)
- DB_ENV *dbenv;
+__ham_copypage_log(dbp, txnid, ret_lsnp, flags, pgno, pagelsn, next_pgno, nextlsn, nnext_pgno,
+ nnextlsn, page)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
DB_LSN * pagelsn;
db_pgno_t next_pgno;
@@ -1001,65 +1409,129 @@ __ham_copypage_log(dbenv, txnid, ret_lsnp, flags,
const DBT *page;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_copypage;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_copypage;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(*pagelsn)
- + sizeof(next_pgno)
+ + sizeof(u_int32_t)
+ sizeof(*nextlsn)
- + sizeof(nnext_pgno)
+ + sizeof(u_int32_t)
+ sizeof(*nnextlsn)
+ sizeof(u_int32_t) + (page == NULL ? 0 : page->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- memcpy(bp, &next_pgno, sizeof(next_pgno));
- bp += sizeof(next_pgno);
+
+ uinttmp = (u_int32_t)next_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (nextlsn != NULL)
memcpy(bp, nextlsn, sizeof(*nextlsn));
else
memset(bp, 0, sizeof(*nextlsn));
bp += sizeof(*nextlsn);
- memcpy(bp, &nnext_pgno, sizeof(nnext_pgno));
- bp += sizeof(nnext_pgno);
+
+ uinttmp = (u_int32_t)nnext_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (nnextlsn != NULL)
memcpy(bp, nnextlsn, sizeof(*nnextlsn));
else
memset(bp, 0, sizeof(*nnextlsn));
bp += sizeof(*nnextlsn);
+
if (page == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -1070,14 +1542,92 @@ __ham_copypage_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, page->data, page->size);
bp += page->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_copypage_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_copypage_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__ham_copypage_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_copypage_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_copypage_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1088,47 +1638,49 @@ __ham_copypage_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__ham_copypage_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_copypage_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_copypage: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_copypage%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tpagelsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
(u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
- printf("\tnextlsn: [%lu][%lu]\n",
+ (void)printf("\tnext_pgno: %lu\n", (u_long)argp->next_pgno);
+ (void)printf("\tnextlsn: [%lu][%lu]\n",
(u_long)argp->nextlsn.file, (u_long)argp->nextlsn.offset);
- printf("\tnnext_pgno: %lu\n", (u_long)argp->nnext_pgno);
- printf("\tnnextlsn: [%lu][%lu]\n",
+ (void)printf("\tnnext_pgno: %lu\n", (u_long)argp->nnext_pgno);
+ (void)printf("\tnnextlsn: [%lu][%lu]\n",
(u_long)argp->nnextlsn.file, (u_long)argp->nnextlsn.offset);
- printf("\tpage: ");
+ (void)printf("\tpage: ");
for (i = 0; i < argp->page.size; i++) {
ch = ((u_int8_t *)argp->page.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_copypage_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_copypage_args **));
+ */
int
__ham_copypage_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1136,412 +1688,618 @@ __ham_copypage_read(dbenv, recbuf, argpp)
__ham_copypage_args **argpp;
{
__ham_copypage_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_copypage_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_copypage_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
bp += sizeof(argp->pagelsn);
- memcpy(&argp->next_pgno, bp, sizeof(argp->next_pgno));
- bp += sizeof(argp->next_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->next_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->nextlsn, bp, sizeof(argp->nextlsn));
bp += sizeof(argp->nextlsn);
- memcpy(&argp->nnext_pgno, bp, sizeof(argp->nnext_pgno));
- bp += sizeof(argp->nnext_pgno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->nnext_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->nnextlsn, bp, sizeof(argp->nnextlsn));
bp += sizeof(argp->nnextlsn);
+
memset(&argp->page, 0, sizeof(argp->page));
memcpy(&argp->page.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->page.data = bp;
bp += argp->page.size;
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_metagroup_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_pgno_t, DB_LSN *, db_pgno_t, DB_LSN *,
+ * PUBLIC: db_pgno_t, DB_LSN *, u_int32_t));
+ */
int
-__ham_metagroup_log(dbenv, txnid, ret_lsnp, flags,
- fileid, bucket, pgno, metalsn, pagelsn)
- DB_ENV *dbenv;
+__ham_metagroup_log(dbp, txnid, ret_lsnp, flags, bucket, mmpgno, mmetalsn, mpgno, metalsn,
+ pgno, pagelsn, newalloc)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
u_int32_t bucket;
- db_pgno_t pgno;
+ db_pgno_t mmpgno;
+ DB_LSN * mmetalsn;
+ db_pgno_t mpgno;
DB_LSN * metalsn;
+ db_pgno_t pgno;
DB_LSN * pagelsn;
+ u_int32_t newalloc;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_metagroup;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_metagroup;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(bucket)
- + sizeof(pgno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*mmetalsn)
+ + sizeof(u_int32_t)
+ sizeof(*metalsn)
- + sizeof(*pagelsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(*pagelsn)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &bucket, sizeof(bucket));
- bp += sizeof(bucket);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)bucket;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)mmpgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (mmetalsn != NULL)
+ memcpy(bp, mmetalsn, sizeof(*mmetalsn));
+ else
+ memset(bp, 0, sizeof(*mmetalsn));
+ bp += sizeof(*mmetalsn);
+
+ uinttmp = (u_int32_t)mpgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (metalsn != NULL)
memcpy(bp, metalsn, sizeof(*metalsn));
else
memset(bp, 0, sizeof(*metalsn));
bp += sizeof(*metalsn);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (pagelsn != NULL)
memcpy(bp, pagelsn, sizeof(*pagelsn));
else
memset(bp, 0, sizeof(*pagelsn));
bp += sizeof(*pagelsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)newalloc;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_metagroup_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_metagroup_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
int
-__ham_metagroup_print(dbenv, dbtp, lsnp, notused2, notused3)
+__ham_metagroup_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DBT *dbtp;
+ DBT *rec;
DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
+ db_recops notused1;
+ void *summary;
{
- __ham_metagroup_args *argp;
- u_int32_t i;
- u_int ch;
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ t = (TXN_RECS *)summary;
- if ((ret = __ham_metagroup_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- printf("[%lu][%lu]ham_metagroup: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tbucket: %lu\n", (u_long)argp->bucket);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tmetalsn: [%lu][%lu]\n",
- (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\tpagelsn: [%lu][%lu]\n",
- (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-int
-__ham_metagroup_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __ham_metagroup_args **argpp;
-{
- __ham_metagroup_args *argp;
- u_int8_t *bp;
- int ret;
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
- ret = __os_malloc(dbenv, sizeof(__ham_metagroup_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->bucket, bp, sizeof(argp->bucket));
- bp += sizeof(argp->bucket);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
- bp += sizeof(argp->metalsn);
- memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
- bp += sizeof(argp->pagelsn);
- *argpp = argp;
return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __ham_metagroup_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__ham_groupalloc1_print(dbenv, dbtp, lsnp, notused2, notused3)
+__ham_metagroup_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __ham_groupalloc1_args *argp;
- u_int32_t i;
- u_int ch;
+ __ham_metagroup_args *argp;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __ham_groupalloc1_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __ham_metagroup_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_groupalloc1: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_metagroup%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tmetalsn: [%lu][%lu]\n",
- (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\tmmetalsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tbucket: %lu\n", (u_long)argp->bucket);
+ (void)printf("\tmmpgno: %lu\n", (u_long)argp->mmpgno);
+ (void)printf("\tmmetalsn: [%lu][%lu]\n",
(u_long)argp->mmetalsn.file, (u_long)argp->mmetalsn.offset);
- printf("\tstart_pgno: %lu\n", (u_long)argp->start_pgno);
- printf("\tnum: %lu\n", (u_long)argp->num);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tmpgno: %lu\n", (u_long)argp->mpgno);
+ (void)printf("\tmetalsn: [%lu][%lu]\n",
+ (u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tpagelsn: [%lu][%lu]\n",
+ (u_long)argp->pagelsn.file, (u_long)argp->pagelsn.offset);
+ (void)printf("\tnewalloc: %lu\n", (u_long)argp->newalloc);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_metagroup_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_metagroup_args **));
+ */
int
-__ham_groupalloc1_read(dbenv, recbuf, argpp)
+__ham_metagroup_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __ham_groupalloc1_args **argpp;
+ __ham_metagroup_args **argpp;
{
- __ham_groupalloc1_args *argp;
+ __ham_metagroup_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_groupalloc1_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_metagroup_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
- bp += sizeof(argp->metalsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->bucket = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->mmpgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->mmetalsn, bp, sizeof(argp->mmetalsn));
bp += sizeof(argp->mmetalsn);
- memcpy(&argp->start_pgno, bp, sizeof(argp->start_pgno));
- bp += sizeof(argp->start_pgno);
- memcpy(&argp->num, bp, sizeof(argp->num));
- bp += sizeof(argp->num);
- *argpp = argp;
- return (0);
-}
-int
-__ham_groupalloc2_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __ham_groupalloc2_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->mpgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
+ bp += sizeof(argp->metalsn);
- if ((ret = __ham_groupalloc2_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]ham_groupalloc2: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmeta_lsn: [%lu][%lu]\n",
- (u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\talloc_lsn: [%lu][%lu]\n",
- (u_long)argp->alloc_lsn.file, (u_long)argp->alloc_lsn.offset);
- printf("\tstart_pgno: %lu\n", (u_long)argp->start_pgno);
- printf("\tnum: %lu\n", (u_long)argp->num);
- printf("\tfree: %lu\n", (u_long)argp->free);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
-int
-__ham_groupalloc2_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __ham_groupalloc2_args **argpp;
-{
- __ham_groupalloc2_args *argp;
- u_int8_t *bp;
- int ret;
+ memcpy(&argp->pagelsn, bp, sizeof(argp->pagelsn));
+ bp += sizeof(argp->pagelsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->newalloc = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- ret = __os_malloc(dbenv, sizeof(__ham_groupalloc2_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
- bp += sizeof(argp->meta_lsn);
- memcpy(&argp->alloc_lsn, bp, sizeof(argp->alloc_lsn));
- bp += sizeof(argp->alloc_lsn);
- memcpy(&argp->start_pgno, bp, sizeof(argp->start_pgno));
- bp += sizeof(argp->start_pgno);
- memcpy(&argp->num, bp, sizeof(argp->num));
- bp += sizeof(argp->num);
- memcpy(&argp->free, bp, sizeof(argp->free));
- bp += sizeof(argp->free);
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_groupalloc_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_pgno_t));
+ */
int
-__ham_groupalloc_log(dbenv, txnid, ret_lsnp, flags,
- fileid, meta_lsn, start_pgno, num, free)
- DB_ENV *dbenv;
+__ham_groupalloc_log(dbp, txnid, ret_lsnp, flags, meta_lsn, start_pgno, num, free)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
DB_LSN * meta_lsn;
db_pgno_t start_pgno;
u_int32_t num;
db_pgno_t free;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_groupalloc;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_groupalloc;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
+ + sizeof(u_int32_t)
+ sizeof(*meta_lsn)
- + sizeof(start_pgno)
- + sizeof(num)
- + sizeof(free);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (meta_lsn != NULL)
memcpy(bp, meta_lsn, sizeof(*meta_lsn));
else
memset(bp, 0, sizeof(*meta_lsn));
bp += sizeof(*meta_lsn);
- memcpy(bp, &start_pgno, sizeof(start_pgno));
- bp += sizeof(start_pgno);
- memcpy(bp, &num, sizeof(num));
- bp += sizeof(num);
- memcpy(bp, &free, sizeof(free));
- bp += sizeof(free);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)start_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)num;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)free;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_groupalloc_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_groupalloc_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__ham_groupalloc_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_groupalloc_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_groupalloc_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1551,35 +2309,38 @@ __ham_groupalloc_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__ham_groupalloc_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_groupalloc_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_groupalloc: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_groupalloc%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmeta_lsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmeta_lsn: [%lu][%lu]\n",
(u_long)argp->meta_lsn.file, (u_long)argp->meta_lsn.offset);
- printf("\tstart_pgno: %lu\n", (u_long)argp->start_pgno);
- printf("\tnum: %lu\n", (u_long)argp->num);
- printf("\tfree: %lu\n", (u_long)argp->free);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tstart_pgno: %lu\n", (u_long)argp->start_pgno);
+ (void)printf("\tnum: %lu\n", (u_long)argp->num);
+ (void)printf("\tfree: %lu\n", (u_long)argp->free);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_groupalloc_read __P((DB_ENV *, void *,
+ * PUBLIC: __ham_groupalloc_args **));
+ */
int
__ham_groupalloc_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1587,44 +2348,60 @@ __ham_groupalloc_read(dbenv, recbuf, argpp)
__ham_groupalloc_args **argpp;
{
__ham_groupalloc_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_groupalloc_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_groupalloc_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->meta_lsn, bp, sizeof(argp->meta_lsn));
bp += sizeof(argp->meta_lsn);
- memcpy(&argp->start_pgno, bp, sizeof(argp->start_pgno));
- bp += sizeof(argp->start_pgno);
- memcpy(&argp->num, bp, sizeof(argp->num));
- bp += sizeof(argp->num);
- memcpy(&argp->free, bp, sizeof(argp->free));
- bp += sizeof(argp->free);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->start_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->num = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->free = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_curadj_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_pgno_t, u_int32_t, u_int32_t, u_int32_t, int, int,
+ * PUBLIC: u_int32_t));
+ */
int
-__ham_curadj_log(dbenv, txnid, ret_lsnp, flags,
- fileid, pgno, indx, len, dup_off, add,
- is_dup, order)
- DB_ENV *dbenv;
+__ham_curadj_log(dbp, txnid, ret_lsnp, flags, pgno, indx, len, dup_off, add,
+ is_dup, order)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_pgno_t pgno;
u_int32_t indx;
u_int32_t len;
@@ -1634,65 +2411,212 @@ __ham_curadj_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t order;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_curadj;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_curadj;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(pgno)
- + sizeof(indx)
- + sizeof(len)
- + sizeof(dup_off)
- + sizeof(add)
- + sizeof(is_dup)
- + sizeof(order);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &len, sizeof(len));
- bp += sizeof(len);
- memcpy(bp, &dup_off, sizeof(dup_off));
- bp += sizeof(dup_off);
- memcpy(bp, &add, sizeof(add));
- bp += sizeof(add);
- memcpy(bp, &is_dup, sizeof(is_dup));
- bp += sizeof(is_dup);
- memcpy(bp, &order, sizeof(order));
- bp += sizeof(order);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)len;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)dup_off;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)add;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)is_dup;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)order;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_curadj_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_curadj_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__ham_curadj_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_curadj_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1702,37 +2626,39 @@ __ham_curadj_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__ham_curadj_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_curadj_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_curadj: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_curadj%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\tlen: %lu\n", (u_long)argp->len);
- printf("\tdup_off: %lu\n", (u_long)argp->dup_off);
- printf("\tadd: %ld\n", (long)argp->add);
- printf("\tis_dup: %ld\n", (long)argp->is_dup);
- printf("\torder: %lu\n", (u_long)argp->order);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\tlen: %lu\n", (u_long)argp->len);
+ (void)printf("\tdup_off: %lu\n", (u_long)argp->dup_off);
+ (void)printf("\tadd: %ld\n", (long)argp->add);
+ (void)printf("\tis_dup: %ld\n", (long)argp->is_dup);
+ (void)printf("\torder: %lu\n", (u_long)argp->order);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_curadj_read __P((DB_ENV *, void *, __ham_curadj_args **));
+ */
int
__ham_curadj_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1740,49 +2666,72 @@ __ham_curadj_read(dbenv, recbuf, argpp)
__ham_curadj_args **argpp;
{
__ham_curadj_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_curadj_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_curadj_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->len, bp, sizeof(argp->len));
- bp += sizeof(argp->len);
- memcpy(&argp->dup_off, bp, sizeof(argp->dup_off));
- bp += sizeof(argp->dup_off);
- memcpy(&argp->add, bp, sizeof(argp->add));
- bp += sizeof(argp->add);
- memcpy(&argp->is_dup, bp, sizeof(argp->is_dup));
- bp += sizeof(argp->is_dup);
- memcpy(&argp->order, bp, sizeof(argp->order));
- bp += sizeof(argp->order);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->len = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->dup_off = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->add = (int)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->is_dup = (int)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->order = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_chgpg_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_ham_mode, db_pgno_t, db_pgno_t, u_int32_t,
+ * PUBLIC: u_int32_t));
+ */
int
-__ham_chgpg_log(dbenv, txnid, ret_lsnp, flags,
- fileid, mode, old_pgno, new_pgno, old_indx, new_indx)
- DB_ENV *dbenv;
+__ham_chgpg_log(dbp, txnid, ret_lsnp, flags, mode, old_pgno, new_pgno, old_indx, new_indx)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
db_ham_mode mode;
db_pgno_t old_pgno;
db_pgno_t new_pgno;
@@ -1790,59 +2739,202 @@ __ham_chgpg_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t new_indx;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_ham_chgpg;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___ham_chgpg;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(mode)
- + sizeof(old_pgno)
- + sizeof(new_pgno)
- + sizeof(old_indx)
- + sizeof(new_indx);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &mode, sizeof(mode));
- bp += sizeof(mode);
- memcpy(bp, &old_pgno, sizeof(old_pgno));
- bp += sizeof(old_pgno);
- memcpy(bp, &new_pgno, sizeof(new_pgno));
- bp += sizeof(new_pgno);
- memcpy(bp, &old_indx, sizeof(old_indx));
- bp += sizeof(old_indx);
- memcpy(bp, &new_indx, sizeof(new_indx));
- bp += sizeof(new_indx);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)mode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)old_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)new_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)old_indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)new_indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__ham_chgpg_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_chgpg_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__ham_chgpg_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_chgpg_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__ham_chgpg_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1852,35 +2944,37 @@ __ham_chgpg_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__ham_chgpg_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __ham_chgpg_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]ham_chgpg: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__ham_chgpg%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tmode: %ld\n", (long)argp->mode);
- printf("\told_pgno: %lu\n", (u_long)argp->old_pgno);
- printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
- printf("\told_indx: %lu\n", (u_long)argp->old_indx);
- printf("\tnew_indx: %lu\n", (u_long)argp->new_indx);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tmode: %ld\n", (long)argp->mode);
+ (void)printf("\told_pgno: %lu\n", (u_long)argp->old_pgno);
+ (void)printf("\tnew_pgno: %lu\n", (u_long)argp->new_pgno);
+ (void)printf("\told_indx: %lu\n", (u_long)argp->old_indx);
+ (void)printf("\tnew_indx: %lu\n", (u_long)argp->new_indx);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __ham_chgpg_read __P((DB_ENV *, void *, __ham_chgpg_args **));
+ */
int
__ham_chgpg_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1888,136 +2982,177 @@ __ham_chgpg_read(dbenv, recbuf, argpp)
__ham_chgpg_args **argpp;
{
__ham_chgpg_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__ham_chgpg_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__ham_chgpg_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->mode, bp, sizeof(argp->mode));
- bp += sizeof(argp->mode);
- memcpy(&argp->old_pgno, bp, sizeof(argp->old_pgno));
- bp += sizeof(argp->old_pgno);
- memcpy(&argp->new_pgno, bp, sizeof(argp->new_pgno));
- bp += sizeof(argp->new_pgno);
- memcpy(&argp->old_indx, bp, sizeof(argp->old_indx));
- bp += sizeof(argp->old_indx);
- memcpy(&argp->new_indx, bp, sizeof(argp->new_indx));
- bp += sizeof(argp->new_indx);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->mode = (db_ham_mode)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->old_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->old_indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __ham_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__ham_init_print(dbenv)
+__ham_init_print(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __ham_insdel_print, DB_ham_insdel)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_newpage_print, DB_ham_newpage)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_splitmeta_print, DB_ham_splitmeta)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_splitdata_print, DB_ham_splitdata)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_replace_print, DB_ham_replace)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_newpgno_print, DB_ham_newpgno)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_insdel_print, DB___ham_insdel)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_ovfl_print, DB_ham_ovfl)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_newpage_print, DB___ham_newpage)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_copypage_print, DB_ham_copypage)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_splitdata_print, DB___ham_splitdata)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_metagroup_print, DB_ham_metagroup)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_replace_print, DB___ham_replace)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_groupalloc1_print, DB_ham_groupalloc1)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_copypage_print, DB___ham_copypage)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_groupalloc2_print, DB_ham_groupalloc2)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_metagroup_print, DB___ham_metagroup)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_groupalloc_print, DB_ham_groupalloc)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_groupalloc_print, DB___ham_groupalloc)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_curadj_print, DB_ham_curadj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_curadj_print, DB___ham_curadj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_chgpg_print, DB_ham_chgpg)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_chgpg_print, DB___ham_chgpg)) != 0)
return (ret);
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __ham_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__ham_init_recover(dbenv)
+__ham_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __ham_insdel_recover, DB_ham_insdel)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_insdel_getpgnos, DB___ham_insdel)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_newpage_recover, DB_ham_newpage)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_newpage_getpgnos, DB___ham_newpage)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_ham_splitmeta)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_splitdata_getpgnos, DB___ham_splitdata)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_splitdata_recover, DB_ham_splitdata)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_replace_getpgnos, DB___ham_replace)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_replace_recover, DB_ham_replace)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_copypage_getpgnos, DB___ham_copypage)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_ham_newpgno)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_metagroup_getpgnos, DB___ham_metagroup)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_ham_ovfl)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_groupalloc_getpgnos, DB___ham_groupalloc)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_copypage_recover, DB_ham_copypage)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_curadj_getpgnos, DB___ham_curadj)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_metagroup_recover, DB_ham_metagroup)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_chgpg_getpgnos, DB___ham_chgpg)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_ham_groupalloc1)) != 0)
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __ham_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__ham_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_insdel_recover, DB___ham_insdel)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_newpage_recover, DB___ham_newpage)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_splitdata_recover, DB___ham_splitdata)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_ham_groupalloc2)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_replace_recover, DB___ham_replace)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_groupalloc_recover, DB_ham_groupalloc)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_copypage_recover, DB___ham_copypage)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_curadj_recover, DB_ham_curadj)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_metagroup_recover, DB___ham_metagroup)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __ham_chgpg_recover, DB_ham_chgpg)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_groupalloc_recover, DB___ham_groupalloc)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_curadj_recover, DB___ham_curadj)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __ham_chgpg_recover, DB___ham_chgpg)) != 0)
return (ret);
return (0);
}
-
diff --git a/db/hash/hash_conv.c b/db/hash/hash_conv.c
index 30d17a616..751b87a59 100644
--- a/db/hash/hash_conv.c
+++ b/db/hash/hash_conv.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_conv.c,v 11.5 2000/03/31 00:30:32 ubell Exp $";
+static const char revid[] = "$Id: hash_conv.c,v 11.14 2003/01/08 05:03:21 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -15,20 +15,21 @@ static const char revid[] = "$Id: hash_conv.c,v 11.5 2000/03/31 00:30:32 ubell E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "hash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/hash.h"
/*
* __ham_pgin --
* Convert host-specific page layout from the host-independent format
* stored on disk.
*
- * PUBLIC: int __ham_pgin __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ * PUBLIC: int __ham_pgin __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
*/
int
-__ham_pgin(dbenv, pg, pp, cookie)
+__ham_pgin(dbenv, dummydbp, pg, pp, cookie)
DB_ENV *dbenv;
+ DB *dummydbp;
db_pgno_t pg;
void *pp;
DBT *cookie;
@@ -45,16 +46,16 @@ __ham_pgin(dbenv, pg, pp, cookie)
* initialize the rest of the page and return.
*/
if (h->type != P_HASHMETA && h->pgno == PGNO_INVALID) {
- P_INIT(pp, pginfo->db_pagesize,
+ P_INIT(pp, (db_indx_t)pginfo->db_pagesize,
pg, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
return (0);
}
- if (!pginfo->needswap)
+ if (!F_ISSET(pginfo, DB_AM_SWAP))
return (0);
return (h->type == P_HASHMETA ? __ham_mswap(pp) :
- __db_byteswap(dbenv, pg, pp, pginfo->db_pagesize, 1));
+ __db_byteswap(dbenv, dummydbp, pg, pp, pginfo->db_pagesize, 1));
}
/*
@@ -62,11 +63,12 @@ __ham_pgin(dbenv, pg, pp, cookie)
* Convert host-specific page layout to the host-independent format
* stored on disk.
*
- * PUBLIC: int __ham_pgout __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ * PUBLIC: int __ham_pgout __P((DB_ENV *, DB *, db_pgno_t, void *, DBT *));
*/
int
-__ham_pgout(dbenv, pg, pp, cookie)
+__ham_pgout(dbenv, dummydbp, pg, pp, cookie)
DB_ENV *dbenv;
+ DB *dummydbp;
db_pgno_t pg;
void *pp;
DBT *cookie;
@@ -75,12 +77,12 @@ __ham_pgout(dbenv, pg, pp, cookie)
PAGE *h;
pginfo = (DB_PGINFO *)cookie->data;
- if (!pginfo->needswap)
+ if (!F_ISSET(pginfo, DB_AM_SWAP))
return (0);
h = pp;
return (h->type == P_HASHMETA ? __ham_mswap(pp) :
- __db_byteswap(dbenv, pg, pp, pginfo->db_pagesize, 0));
+ __db_byteswap(dbenv, dummydbp, pg, pp, pginfo->db_pagesize, 0));
}
/*
@@ -108,5 +110,7 @@ __ham_mswap(pg)
SWAP32(p); /* h_charkey */
for (i = 0; i < NCACHED; ++i)
SWAP32(p); /* spares */
+ p += 59 * sizeof(u_int32_t); /* unusued */
+ SWAP32(p); /* crypto_magic */
return (0);
}
diff --git a/db/hash/hash_dup.c b/db/hash/hash_dup.c
index cb760148f..31ba9cc3d 100644
--- a/db/hash/hash_dup.c
+++ b/db/hash/hash_dup.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -38,7 +38,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: hash_dup.c,v 11.76 2002/08/06 05:34:40 bostic Exp ";
+static const char revid[] = "$Id: hash_dup.c,v 11.81 2003/06/30 17:20:11 bostic Exp $";
#endif /* not lint */
/*
@@ -56,8 +56,10 @@ static const char revid[] = "Id: hash_dup.c,v 11.76 2002/08/06 05:34:40 bostic E
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/hash.h"
#include "dbinc/btree.h"
+#include "dbinc/mp.h"
static int __ham_c_chgpg __P((DBC *,
db_pgno_t, u_int32_t, db_pgno_t, u_int32_t));
@@ -202,7 +204,7 @@ __ham_add_dup(dbc, nval, flags, pgnop)
/* Add the duplicate. */
ret = __ham_replpair(dbc, &tmp_val, 0);
if (ret == 0)
- ret = mpf->set(mpf, hcp->page, DB_MPOOL_DIRTY);
+ ret = __memp_fset(mpf, hcp->page, DB_MPOOL_DIRTY);
if (ret != 0)
return (ret);
@@ -213,9 +215,10 @@ __ham_add_dup(dbc, nval, flags, pgnop)
hcp->dup_len = nval->size;
hcp->dup_tlen += (db_indx_t)DUP_SIZE(nval->size);
break;
+ case DB_BEFORE:
case DB_KEYFIRST:
case DB_KEYLAST:
- case DB_BEFORE:
+ case DB_NODUPDATA:
hcp->dup_tlen += (db_indx_t)DUP_SIZE(nval->size);
hcp->dup_len = nval->size;
break;
@@ -302,7 +305,7 @@ __ham_dup_convert(dbc)
ret = __db_pitem(dbc, dp, 0, dbt.size, &dbt, NULL);
finish: if (ret == 0) {
- if ((ret = mpf->set(mpf, dp, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, dp, DB_MPOOL_DIRTY)) != 0)
break;
/* Update any other cursors. */
@@ -358,7 +361,7 @@ finish: if (ret == 0) {
}
break;
default:
- ret = __db_pgfmt(dbp->dbenv, (u_long)hcp->pgno);
+ ret = __db_pgfmt(dbp->dbenv, hcp->pgno);
break;
}
@@ -371,10 +374,10 @@ finish: if (ret == 0) {
(u_int32_t)H_DATAINDEX(hcp->indx), PGNO(dp));
err: if (ret == 0)
- ret = mpf->set(mpf, hcp->page, DB_MPOOL_DIRTY);
+ ret = __memp_fset(mpf, hcp->page, DB_MPOOL_DIRTY);
- if ((t_ret =
- mpf->put(mpf, dp, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(
+ mpf, dp, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
ret = t_ret;
if (ret == 0)
@@ -472,7 +475,8 @@ __ham_check_move(dbc, add_len)
if (HPAGE_PTYPE(hk) == H_OFFDUP || HPAGE_PTYPE(hk) == H_OFFPAGE)
return (0);
- old_len = LEN_HITEM(dbp, hcp->page, dbp->pgsize, H_DATAINDEX(hcp->indx));
+ old_len =
+ LEN_HITEM(dbp, hcp->page, dbp->pgsize, H_DATAINDEX(hcp->indx));
new_datalen = old_len - HKEYDATA_SIZE(0) + add_len;
if (HPAGE_PTYPE(hk) != H_DUPLICATE)
new_datalen += DUP_SIZE(0);
@@ -501,16 +505,17 @@ __ham_check_move(dbc, add_len)
new_datalen = ISBIG(hcp, new_datalen) ?
HOFFDUP_SIZE : HKEYDATA_SIZE(new_datalen);
- new_datalen += LEN_HITEM(dbp, hcp->page, dbp->pgsize, H_KEYINDEX(hcp->indx));
+ new_datalen +=
+ LEN_HITEM(dbp, hcp->page, dbp->pgsize, H_KEYINDEX(hcp->indx));
next_pagep = NULL;
for (next_pgno = NEXT_PGNO(hcp->page); next_pgno != PGNO_INVALID;
next_pgno = NEXT_PGNO(next_pagep)) {
if (next_pagep != NULL &&
- (ret = mpf->put(mpf, next_pagep, 0)) != 0)
+ (ret = __memp_fput(mpf, next_pagep, 0)) != 0)
return (ret);
- if ((ret = mpf->get(mpf,
+ if ((ret = __memp_fget(mpf,
&next_pgno, DB_MPOOL_CREATE, &next_pagep)) != 0)
return (ret);
@@ -526,7 +531,7 @@ __ham_check_move(dbc, add_len)
/* Add new page at the end of the chain. */
if (P_FREESPACE(dbp, next_pagep) < new_datalen && (ret =
__ham_add_ovflpage(dbc, next_pagep, 1, &next_pagep)) != 0) {
- (void)mpf->put(mpf, next_pagep, 0);
+ (void)__memp_fput(mpf, next_pagep, 0);
return (ret);
}
@@ -552,11 +557,11 @@ __ham_check_move(dbc, add_len)
d.data = H_PAIRDATA(dbp, hcp->page, hcp->indx);
d.size = HOFFPAGE_SIZE;
} else {
- if (HPAGE_PTYPE(H_PAIRDATA(dbp, hcp->page, hcp->indx))
- == H_DUPLICATE)
+ if (HPAGE_PTYPE(H_PAIRDATA(dbp,
+ hcp->page, hcp->indx)) == H_DUPLICATE)
rectype |= PAIR_DUPMASK;
- d.data =
- HKEYDATA_DATA(H_PAIRDATA(dbp, hcp->page, hcp->indx));
+ d.data = HKEYDATA_DATA(
+ H_PAIRDATA(dbp, hcp->page, hcp->indx));
d.size = LEN_HDATA(dbp, hcp->page,
dbp->pgsize, hcp->indx);
}
@@ -565,7 +570,7 @@ __ham_check_move(dbc, add_len)
dbc->txn, &new_lsn, 0, rectype, PGNO(next_pagep),
(u_int32_t)NUM_ENT(next_pagep), &LSN(next_pagep),
&k, &d)) != 0) {
- (void)mpf->put(mpf, next_pagep, 0);
+ (void)__memp_fput(mpf, next_pagep, 0);
return (ret);
}
} else
@@ -588,7 +593,7 @@ __ham_check_move(dbc, add_len)
* Note that __ham_del_pair should dirty the page we're moving
* the items from, so we need only dirty the new page ourselves.
*/
- if ((ret = mpf->set(mpf, next_pagep, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, next_pagep, DB_MPOOL_DIRTY)) != 0)
goto out;
/* Update all cursors that used to point to this item. */
@@ -613,7 +618,7 @@ __ham_check_move(dbc, add_len)
hcp->hdr->nelem++;
out:
- (void)mpf->put(mpf, hcp->page, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, hcp->page, DB_MPOOL_DIRTY);
hcp->page = next_pagep;
hcp->pgno = PGNO(hcp->page);
hcp->indx = NUM_ENT(hcp->page) - 2;
diff --git a/db/hash/hash_func.c b/db/hash/hash_func.c
index 22b4f08ee..cd4b5e7b7 100644
--- a/db/hash/hash_func.c
+++ b/db/hash/hash_func.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_func.c,v 11.7 2000/08/16 18:26:19 ubell Exp $";
+static const char revid[] = "$Id: hash_func.c,v 11.14 2003/01/08 05:03:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -51,8 +51,8 @@ static const char revid[] = "$Id: hash_func.c,v 11.7 2000/08/16 18:26:19 ubell E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "hash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
/*
* __ham_func2 --
@@ -230,6 +230,11 @@ __ham_func5(dbp, key, len)
return (h);
}
+/*
+ * __ham_test --
+ *
+ * PUBLIC: u_int32_t __ham_test __P((DB *, const void *, u_int32_t));
+ */
u_int32_t
__ham_test(dbp, key, len)
DB *dbp;
diff --git a/db/hash/hash_meta.c b/db/hash/hash_meta.c
index d96a6db32..247793bbf 100644
--- a/db/hash/hash_meta.c
+++ b/db/hash/hash_meta.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_meta.c,v 11.10 2000/12/21 21:54:35 margo Exp $";
+static const char revid[] = "$Id: hash_meta.c,v 11.24 2003/09/09 16:46:10 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,11 +16,11 @@ static const char revid[] = "$Id: hash_meta.c,v 11.10 2000/12/21 21:54:35 margo
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "hash.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "txn.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
/*
* Acquire the meta-data page.
@@ -31,30 +31,35 @@ int
__ham_get_meta(dbc)
DBC *dbc;
{
- HASH_CURSOR *hcp;
- HASH *hashp;
DB *dbp;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
+ HASH *hashp;
+ HASH_CURSOR *hcp;
int ret;
- hcp = (HASH_CURSOR *)dbc->internal;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
hashp = dbp->h_internal;
+ hcp = (HASH_CURSOR *)dbc->internal;
- if (dbp->dbenv != NULL &&
- STD_LOCKING(dbc) && !F_ISSET(dbc, DBC_RECOVER)) {
+ if (dbenv != NULL &&
+ STD_LOCKING(dbc) && !F_ISSET(dbc, DBC_RECOVER | DBC_COMPENSATE)) {
dbc->lock.pgno = hashp->meta_pgno;
- if ((ret = lock_get(dbp->dbenv, dbc->locker,
+ if ((ret = __lock_get(dbenv, dbc->locker,
DB_NONBLOCK(dbc) ? DB_LOCK_NOWAIT : 0,
&dbc->lock_dbt, DB_LOCK_READ, &hcp->hlock)) != 0)
- return (ret);
+ return ((ret == DB_LOCK_NOTGRANTED &&
+ !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ?
+ DB_LOCK_DEADLOCK : ret);
+
}
- if ((ret = memp_fget(dbc->dbp->mpf,
+ if ((ret = __memp_fget(mpf,
&hashp->meta_pgno, DB_MPOOL_CREATE, &(hcp->hdr))) != 0 &&
- hcp->hlock.off != LOCK_INVALID) {
- (void)lock_put(dbc->dbp->dbenv, &hcp->hlock);
- hcp->hlock.off = LOCK_INVALID;
- }
+ LOCK_ISSET(hcp->hlock))
+ (void)__lock_put(dbenv, &hcp->hlock);
return (ret);
}
@@ -68,18 +73,19 @@ int
__ham_release_meta(dbc)
DBC *dbc;
{
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
+ mpf = dbc->dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
if (hcp->hdr)
- (void)memp_fput(dbc->dbp->mpf, hcp->hdr,
+ (void)__memp_fput(mpf, hcp->hdr,
F_ISSET(hcp, H_DIRTY) ? DB_MPOOL_DIRTY : 0);
hcp->hdr = NULL;
- if (!F_ISSET(dbc, DBC_RECOVER) &&
- dbc->txn == NULL && hcp->hlock.off != LOCK_INVALID)
- (void)lock_put(dbc->dbp->dbenv, &hcp->hlock);
- hcp->hlock.off = LOCK_INVALID;
+ if (!F_ISSET(dbc, DBC_RECOVER | DBC_COMPENSATE) &&
+ dbc->txn == NULL && LOCK_ISSET(hcp->hlock))
+ (void)__lock_put(dbc->dbp->dbenv, &hcp->hlock);
F_CLR(hcp, H_DIRTY);
return (0);
@@ -95,6 +101,7 @@ __ham_dirty_meta(dbc)
DBC *dbc;
{
DB *dbp;
+ DB_ENV *dbenv;
DB_LOCK _tmp;
HASH *hashp;
HASH_CURSOR *hcp;
@@ -105,17 +112,20 @@ __ham_dirty_meta(dbc)
hcp = (HASH_CURSOR *)dbc->internal;
ret = 0;
- if (STD_LOCKING(dbc) && !F_ISSET(dbc, DBC_RECOVER)) {
+ dbenv = dbp->dbenv;
+ if (STD_LOCKING(dbc) && !F_ISSET(dbc, DBC_RECOVER | DBC_COMPENSATE)) {
dbc->lock.pgno = hashp->meta_pgno;
- if ((ret = lock_get(dbp->dbenv, dbc->locker,
+ if ((ret = __lock_get(dbenv, dbc->locker,
DB_NONBLOCK(dbc) ? DB_LOCK_NOWAIT : 0,
&dbc->lock_dbt, DB_LOCK_WRITE, &_tmp)) == 0) {
- ret = lock_put(dbp->dbenv, &hcp->hlock);
+ ret = __lock_put(dbenv, &hcp->hlock);
hcp->hlock = _tmp;
}
}
if (ret == 0)
F_SET(hcp, H_DIRTY);
- return (ret);
+ return ((ret == DB_LOCK_NOTGRANTED &&
+ !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ?
+ DB_LOCK_DEADLOCK : ret);
}
diff --git a/db/hash/hash_method.c b/db/hash/hash_method.c
index f8239993d..07508a3db 100644
--- a/db/hash/hash_method.c
+++ b/db/hash/hash_method.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_method.c,v 11.7 2000/07/04 18:28:23 bostic Exp $";
+static const char revid[] = "$Id: hash_method.c,v 11.15 2003/04/18 08:36:37 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,12 +16,14 @@ static const char revid[] = "$Id: hash_method.c,v 11.7 2000/07/04 18:28:23 bosti
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "hash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
+static int __ham_get_h_ffactor __P((DB *, u_int32_t *));
static int __ham_set_h_ffactor __P((DB *, u_int32_t));
static int __ham_set_h_hash
__P((DB *, u_int32_t(*)(DB *, const void *, u_int32_t)));
+static int __ham_get_h_nelem __P((DB *, u_int32_t *));
static int __ham_set_h_nelem __P((DB *, u_int32_t));
/*
@@ -38,7 +40,7 @@ __ham_db_create(dbp)
int ret;
if ((ret = __os_malloc(dbp->dbenv,
- sizeof(HASH), NULL, &dbp->h_internal)) != 0)
+ sizeof(HASH), &dbp->h_internal)) != 0)
return (ret);
hashp = dbp->h_internal;
@@ -47,8 +49,10 @@ __ham_db_create(dbp)
hashp->h_ffactor = 0;
hashp->h_hash = NULL;
+ dbp->get_h_ffactor = __ham_get_h_ffactor;
dbp->set_h_ffactor = __ham_set_h_ffactor;
dbp->set_h_hash = __ham_set_h_hash;
+ dbp->get_h_nelem = __ham_get_h_nelem;
dbp->set_h_nelem = __ham_set_h_nelem;
return (0);
@@ -63,12 +67,27 @@ __ham_db_close(dbp)
{
if (dbp->h_internal == NULL)
return (0);
- __os_free(dbp->h_internal, sizeof(HASH));
+ __os_free(dbp->dbenv, dbp->h_internal);
dbp->h_internal = NULL;
return (0);
}
/*
+ * __db_get_h_ffactor --
+ */
+static int
+__ham_get_h_ffactor(dbp, h_ffactorp)
+ DB *dbp;
+ u_int32_t *h_ffactorp;
+{
+ HASH *hashp;
+
+ hashp = dbp->h_internal;
+ *h_ffactorp = hashp->h_ffactor;
+ return (0);
+}
+
+/*
* __ham_set_h_ffactor --
* Set the fill factor.
*/
@@ -79,7 +98,7 @@ __ham_set_h_ffactor(dbp, h_ffactor)
{
HASH *hashp;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_ffactor");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_h_ffactor");
DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
hashp = dbp->h_internal;
@@ -98,7 +117,7 @@ __ham_set_h_hash(dbp, func)
{
HASH *hashp;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_hash");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_h_hash");
DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
hashp = dbp->h_internal;
@@ -107,6 +126,23 @@ __ham_set_h_hash(dbp, func)
}
/*
+ * __db_get_h_nelem --
+ */
+static int
+__ham_get_h_nelem(dbp, h_nelemp)
+ DB *dbp;
+ u_int32_t *h_nelemp;
+{
+ HASH *hashp;
+
+ DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
+
+ hashp = dbp->h_internal;
+ *h_nelemp = hashp->h_nelem;
+ return (0);
+}
+
+/*
* __ham_set_h_nelem --
* Set the table size.
*/
@@ -117,7 +153,7 @@ __ham_set_h_nelem(dbp, h_nelem)
{
HASH *hashp;
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_h_nelem");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_h_nelem");
DB_ILLEGAL_METHOD(dbp, DB_OK_HASH);
hashp = dbp->h_internal;
diff --git a/db/hash/hash_open.c b/db/hash/hash_open.c
index 2c90824d4..a5842fd18 100644
--- a/db/hash/hash_open.c
+++ b/db/hash/hash_open.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: hash_open.c,v 11.173 2002/08/06 05:34:44 bostic Exp ";
+static const char revid[] = "$Id: hash_open.c,v 11.185 2003/07/17 01:39:17 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -60,6 +60,7 @@ static const char revid[] = "Id: hash_open.c,v 11.173 2002/08/06 05:34:44 bostic
#include "dbinc/log.h"
#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
#include "dbinc/db_swap.h"
#include "dbinc/btree.h"
#include "dbinc/fop.h"
@@ -85,16 +86,11 @@ __ham_open(dbp, txn, name, base_pgno, flags)
DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
HASH *hashp;
- int need_sync, ret, t_ret;
+ int ret, t_ret;
- COMPQUIET(name, NULL);
- dbc = NULL;
dbenv = dbp->dbenv;
+ dbc = NULL;
mpf = dbp->mpf;
- need_sync = 0;
-
- /* Initialize the remaining fields/methods of the DB. */
- dbp->stat = __ham_stat;
/*
* Get a cursor. If DB_CREATE is specified, we may be creating
@@ -102,7 +98,7 @@ __ham_open(dbp, txn, name, base_pgno, flags)
* In STD_LOCKING mode, we'll synchronize using the meta page
* lock instead.
*/
- if ((ret = dbp->cursor(dbp,
+ if ((ret = __db_cursor(dbp,
txn, &dbc, LF_ISSET(DB_CREATE) && CDB_LOCKING(dbenv) ?
DB_WRITECURSOR : 0)) != 0)
return (ret);
@@ -134,20 +130,27 @@ __ham_open(dbp, txn, name, base_pgno, flags)
if (F_ISSET(&hcp->hdr->dbmeta, DB_HASH_SUBDB))
F_SET(dbp, DB_AM_SUBDB);
- /* We must initialize last_pgno, it could be stale. */
+ /*
+ * We must initialize last_pgno, it could be stale.
+ * We update this without holding the meta page write
+ * locked. This is ok since two threads in the code
+ * must be setting it to the same value. SR #7159.
+ */
if (!F_ISSET(dbp, DB_AM_RDONLY) &&
dbp->meta_pgno == PGNO_BASE_MD) {
- if ((ret = __ham_dirty_meta(dbc)) != 0)
- goto err2;
- mpf->last_pgno(mpf, &hcp->hdr->dbmeta.last_pgno);
+ __memp_last_pgno(mpf, &hcp->hdr->dbmeta.last_pgno);
+ F_SET(hcp, H_DIRTY);
}
- } else if (!IS_RECOVERING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER))
- DB_ASSERT(0);
+ } else if (!IS_RECOVERING(dbenv) && !F_ISSET(dbp, DB_AM_RECOVER)) {
+ __db_err(dbp->dbenv,
+ "%s: Invalid hash meta page %d", name, base_pgno);
+ ret = EINVAL;
+ }
err2: /* Release the meta data page */
if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
ret = t_ret;
-err1: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+err1: if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -342,8 +345,8 @@ __ham_init_meta(dbp, meta, pgno, lsnp)
* This code appears more complex than it is because of the two cases (named
* and unnamed). The way to read the code is that for each page being created,
* there are three parts: 1) a "get page" chunk (which either uses malloc'd
- * memory or calls mpf->get), 2) the initialization, and 3) the "put page"
- * chunk which either does a fop write or an mpf->put.
+ * memory or calls __memp_fget), 2) the initialization, and 3) the "put page"
+ * chunk which either does a fop write or an __memp_fput.
*
* PUBLIC: int __ham_new_file __P((DB *, DB_TXN *, DB_FH *, const char *));
*/
@@ -374,7 +377,7 @@ __ham_new_file(dbp, txn, fhp, name)
/* Build meta-data page. */
if (name == NULL) {
lpgno = PGNO_BASE_MD;
- ret = mpf->get(mpf, &lpgno, DB_MPOOL_CREATE, &meta);
+ ret = __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &meta);
} else {
pginfo.db_pagesize = dbp->pgsize;
pginfo.type = dbp->type;
@@ -388,17 +391,18 @@ __ham_new_file(dbp, txn, fhp, name)
if (ret != 0)
return (ret);
- INIT_LSN(lsn);
+ LSN_NOT_LOGGED(lsn);
lpgno = __ham_init_meta(dbp, meta, PGNO_BASE_MD, &lsn);
meta->dbmeta.last_pgno = lpgno;
if (name == NULL)
- ret = mpf->put(mpf, meta, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
else {
if ((ret = __db_pgout(dbenv, PGNO_BASE_MD, meta, &pdbt)) != 0)
goto err;
ret = __fop_write(dbenv, txn, name,
- DB_APP_DATA, fhp, 0, buf, dbp->pgsize, 1);
+ DB_APP_DATA, fhp, dbp->pgsize, 0, 0, buf, dbp->pgsize, 1,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
}
if (ret != 0)
goto err;
@@ -406,7 +410,8 @@ __ham_new_file(dbp, txn, fhp, name)
/* Now allocate the final hash bucket. */
if (name == NULL) {
- if ((ret = mpf->get(mpf, &lpgno, DB_MPOOL_CREATE, &page)) != 0)
+ if ((ret =
+ __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &page)) != 0)
goto err;
} else {
#ifdef DIAGNOSTIC
@@ -416,15 +421,16 @@ __ham_new_file(dbp, txn, fhp, name)
}
P_INIT(page, dbp->pgsize, lpgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
- INIT_LSN(page->lsn);
+ LSN_NOT_LOGGED(page->lsn);
if (name == NULL)
- ret = mpf->put(mpf, page, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, page, DB_MPOOL_DIRTY);
else {
if ((ret = __db_pgout(dbenv, lpgno, buf, &pdbt)) != 0)
goto err;
- ret = __fop_write(dbenv, txn, name,
- DB_APP_DATA, fhp, lpgno * dbp->pgsize, buf, dbp->pgsize, 1);
+ ret = __fop_write(dbenv, txn, name, DB_APP_DATA,
+ fhp, dbp->pgsize, lpgno, 0, buf, dbp->pgsize, 1,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
}
if (ret != 0)
goto err;
@@ -434,9 +440,9 @@ err: if (name != NULL)
__os_free(dbenv, buf);
else {
if (meta != NULL)
- (void)mpf->put(mpf, meta, 0);
+ (void)__memp_fput(mpf, meta, 0);
if (page != NULL)
- (void)mpf->put(mpf, page, 0);
+ (void)__memp_fput(mpf, page, 0);
}
return (ret);
}
@@ -471,7 +477,7 @@ __ham_new_subdb(mdbp, dbp, txn)
LOCK_INIT(metalock);
LOCK_INIT(mmlock);
- if ((ret = mdbp->cursor(mdbp, txn,
+ if ((ret = __db_cursor(mdbp, txn,
&dbc, CDB_LOCKING(dbenv) ? DB_WRITECURSOR : 0)) != 0)
return (ret);
@@ -479,7 +485,8 @@ __ham_new_subdb(mdbp, dbp, txn)
if ((ret = __db_lget(dbc,
0, dbp->meta_pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
goto err;
- if ((ret = mpf->get(mpf, &dbp->meta_pgno, DB_MPOOL_CREATE, &meta)) != 0)
+ if ((ret =
+ __memp_fget(mpf, &dbp->meta_pgno, DB_MPOOL_CREATE, &meta)) != 0)
goto err;
/* Initialize the new meta-data page. */
@@ -495,7 +502,7 @@ __ham_new_subdb(mdbp, dbp, txn)
mpgno = PGNO_BASE_MD;
if ((ret = __db_lget(dbc, 0, mpgno, DB_LOCK_WRITE, 0, &mmlock)) != 0)
goto err;
- if ((ret = mpf->get(mpf, &mpgno, 0, &mmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &mpgno, 0, &mmeta)) != 0)
goto err;
/*
@@ -519,41 +526,42 @@ __ham_new_subdb(mdbp, dbp, txn)
goto err;
/* Release the new meta-data page. */
- if ((ret = mpf->put(mpf, meta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
goto err;
meta = NULL;
- mmeta->last_pgno +=lpgno;
- lpgno = mmeta->last_pgno;
+ lpgno += mmeta->last_pgno;
/* Now allocate the final hash bucket. */
- if ((ret = mpf->get(mpf, &lpgno, DB_MPOOL_CREATE, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &lpgno, DB_MPOOL_CREATE, &h)) != 0)
goto err;
+
+ mmeta->last_pgno = lpgno;
P_INIT(h, dbp->pgsize, lpgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
LSN(h) = LSN(mmeta);
- if ((ret = mpf->put(mpf, h, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, h, DB_MPOOL_DIRTY)) != 0)
goto err;
/* Now put the master-metadata page back. */
- if ((ret = mpf->put(mpf, mmeta, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, mmeta, DB_MPOOL_DIRTY)) != 0)
goto err;
mmeta = NULL;
err:
if (mmeta != NULL)
- if ((t_ret = mpf->put(mpf, mmeta, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, mmeta, 0)) != 0 && ret == 0)
ret = t_ret;
if (LOCK_ISSET(mmlock))
if ((t_ret = __LPUT(dbc, mmlock)) != 0 && ret == 0)
ret = t_ret;
if (meta != NULL)
- if ((t_ret = mpf->put(mpf, meta, 0)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
ret = t_ret;
if (LOCK_ISSET(metalock))
if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
if (dbc != NULL)
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
diff --git a/db/hash/hash_page.c b/db/hash/hash_page.c
index a21fa035f..c52aa7967 100644
--- a/db/hash/hash_page.c
+++ b/db/hash/hash_page.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: hash_page.c,v 11.87 2002/08/15 02:46:20 bostic Exp ";
+static const char revid[] = "$Id: hash_page.c,v 11.93 2003/06/30 17:20:12 bostic Exp $";
#endif /* not lint */
/*
@@ -64,6 +64,7 @@ static const char revid[] = "Id: hash_page.c,v 11.87 2002/08/15 02:46:20 bostic
#include "dbinc/db_shash.h"
#include "dbinc/hash.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
static int __ham_c_delpg
__P((DBC *, db_pgno_t, db_pgno_t, u_int32_t, db_ham_mode, u_int32_t *));
@@ -157,7 +158,7 @@ __ham_item_reset(dbc)
ret = 0;
if (hcp->page != NULL)
- ret = mpf->put(mpf, hcp->page, 0);
+ ret = __memp_fput(mpf, hcp->page, 0);
__ham_item_init(dbc);
return (ret);
@@ -558,8 +559,8 @@ __ham_del_pair(dbc, reclaim_page)
n_pagep = p_pagep = nn_pagep = NULL;
ndx = hcp->indx;
- if (hcp->page == NULL &&
- (ret = mpf->get(mpf, &hcp->pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
+ if (hcp->page == NULL && (ret = __memp_fget(
+ mpf, &hcp->pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
return (ret);
p = hcp->page;
@@ -604,7 +605,8 @@ __ham_del_pair(dbc, reclaim_page)
key_dbt.data = P_ENTRY(dbp, p, H_KEYINDEX(ndx));
key_dbt.size = LEN_HITEM(dbp, p, dbp->pgsize, H_KEYINDEX(ndx));
data_dbt.data = P_ENTRY(dbp, p, H_DATAINDEX(ndx));
- data_dbt.size = LEN_HITEM(dbp, p, dbp->pgsize, H_DATAINDEX(ndx));
+ data_dbt.size =
+ LEN_HITEM(dbp, p, dbp->pgsize, H_DATAINDEX(ndx));
if ((ret = __ham_insdel_log(dbp,
dbc->txn, &new_lsn, 0, DELPAIR, PGNO(p), (u_int32_t)ndx,
@@ -657,18 +659,18 @@ __ham_del_pair(dbc, reclaim_page)
if (!reclaim_page ||
NUM_ENT(p) != 0 ||
(PREV_PGNO(p) == PGNO_INVALID && NEXT_PGNO(p) == PGNO_INVALID))
- return (mpf->set(mpf, p, DB_MPOOL_DIRTY));
+ return (__memp_fset(mpf, p, DB_MPOOL_DIRTY));
if (PREV_PGNO(p) == PGNO_INVALID) {
/*
* First page in chain is empty and we know that there
* are more pages in the chain.
*/
- if ((ret = mpf->get(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
return (ret);
if (NEXT_PGNO(n_pagep) != PGNO_INVALID && (ret =
- mpf->get(mpf, &NEXT_PGNO(n_pagep), 0, &nn_pagep)) != 0)
+ __memp_fget(mpf, &NEXT_PGNO(n_pagep), 0, &nn_pagep)) != 0)
goto err;
if (DBC_LOGGING(dbc)) {
@@ -693,7 +695,7 @@ __ham_del_pair(dbc, reclaim_page)
if (nn_pagep != NULL) {
PREV_PGNO(nn_pagep) = PGNO(p);
if ((ret =
- mpf->put(mpf, nn_pagep, DB_MPOOL_DIRTY)) != 0) {
+ __memp_fput(mpf, nn_pagep, DB_MPOOL_DIRTY)) != 0) {
nn_pagep = NULL;
goto err;
}
@@ -721,19 +723,19 @@ __ham_del_pair(dbc, reclaim_page)
hcp->pgno = PGNO(p);
hcp->order += order;
- if ((ret = mpf->set(mpf, p, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fset(mpf, p, DB_MPOOL_DIRTY)) != 0)
goto err;
if ((ret = __db_free(dbc, n_pagep)) != 0) {
n_pagep = NULL;
goto err;
}
} else {
- if ((ret = mpf->get(mpf, &PREV_PGNO(p), 0, &p_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &PREV_PGNO(p), 0, &p_pagep)) != 0)
goto err;
if (NEXT_PGNO(p) != PGNO_INVALID) {
if ((ret =
- mpf->get(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
+ __memp_fget(mpf, &NEXT_PGNO(p), 0, &n_pagep)) != 0)
goto err;
n_lsn = &LSN(n_pagep);
} else {
@@ -790,10 +792,10 @@ __ham_del_pair(dbc, reclaim_page)
chg_pgno = PGNO(p);
ret = __db_free(dbc, p);
if ((t_ret =
- mpf->put(mpf, p_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, p_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
if (n_pagep != NULL && (t_ret =
- mpf->put(mpf, n_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, n_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
return (ret);
@@ -806,11 +808,11 @@ __ham_del_pair(dbc, reclaim_page)
err: /* Clean up any pages. */
if (n_pagep != NULL)
- (void)mpf->put(mpf, n_pagep, 0);
+ (void)__memp_fput(mpf, n_pagep, 0);
if (nn_pagep != NULL)
- (void)mpf->put(mpf, nn_pagep, 0);
+ (void)__memp_fput(mpf, nn_pagep, 0);
if (p_pagep != NULL)
- (void)mpf->put(mpf, p_pagep, 0);
+ (void)__memp_fput(mpf, p_pagep, 0);
return (ret);
}
@@ -893,7 +895,7 @@ __ham_replpair(dbc, dbt, make_dup)
memset(&tmp, 0, sizeof(tmp));
if ((ret =
__db_ret(dbp, hcp->page, H_KEYINDEX(hcp->indx),
- &tmp, &dbc->rkey->data, &dbc->rkey->ulen)) != 0)
+ &tmp, &dbc->my_rkey.data, &dbc->my_rkey.ulen)) != 0)
return (ret);
/* Preserve duplicate info. */
@@ -1080,13 +1082,13 @@ __ham_split_page(dbc, obucket, nbucket)
if ((ret = __db_lget(dbc,
0, bucket_pgno, DB_LOCK_WRITE, 0, &block)) != 0)
goto err;
- if ((ret = mpf->get(mpf,
+ if ((ret = __memp_fget(mpf,
&bucket_pgno, DB_MPOOL_CREATE, &old_pagep)) != 0)
goto err;
/* Properly initialize the new bucket page. */
npgno = BUCKET_TO_PAGE(hcp, nbucket);
- if ((ret = mpf->get(mpf, &npgno, DB_MPOOL_CREATE, &new_pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &npgno, DB_MPOOL_CREATE, &new_pagep)) != 0)
goto err;
P_INIT(new_pagep,
dbp->pgsize, npgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
@@ -1191,7 +1193,7 @@ __ham_split_page(dbc, obucket, nbucket)
if (next_pgno == PGNO_INVALID)
temp_pagep = NULL;
- else if ((ret = mpf->get(
+ else if ((ret = __memp_fget(
mpf, &next_pgno, DB_MPOOL_CREATE, &temp_pagep)) != 0)
goto err;
@@ -1250,18 +1252,21 @@ __ham_split_page(dbc, obucket, nbucket)
LSN_NOT_LOGGED(LSN(new_pagep));
}
- ret = mpf->put(mpf, old_pagep, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, old_pagep, DB_MPOOL_DIRTY);
if ((t_ret =
- mpf->put(mpf, new_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
+ __memp_fput(mpf, new_pagep, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
if (0) {
err: if (old_pagep != NULL)
- (void)mpf->put(mpf, old_pagep, DB_MPOOL_DIRTY);
- if (new_pagep != NULL)
- (void)mpf->put(mpf, new_pagep, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, old_pagep, DB_MPOOL_DIRTY);
+ if (new_pagep != NULL) {
+ P_INIT(new_pagep, dbp->pgsize,
+ npgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
+ (void)__memp_fput(mpf, new_pagep, DB_MPOOL_DIRTY);
+ }
if (temp_pagep != NULL && PGNO(temp_pagep) != bucket_pgno)
- (void)mpf->put(mpf, temp_pagep, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, temp_pagep, DB_MPOOL_DIRTY);
}
if (LOCK_ISSET(block))
__TLPUT(dbc, block);
@@ -1305,7 +1310,7 @@ __ham_add_el(dbc, key, val, type)
pgno = hcp->seek_found_page != PGNO_INVALID ?
hcp->seek_found_page : hcp->pgno;
if (hcp->page == NULL &&
- (ret = mpf->get(mpf, &pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
+ (ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
return (ret);
key_size = HKEYDATA_PSIZE(key->size);
@@ -1470,8 +1475,8 @@ __ham_copy_item(dbp, src_page, src_ndx, dest_page)
/*
*
* Returns:
- * pointer on success
- * NULL on error
+ * 0 on success -- pp points to new page.
+ * errno on error -- pp not valid.
*
* PUBLIC: int __ham_add_ovflpage __P((DBC *, PAGE *, int, PAGE **));
*/
@@ -1496,9 +1501,11 @@ __ham_add_ovflpage(dbc, pagep, release, pp)
if (DBC_LOGGING(dbc)) {
if ((ret = __ham_newpage_log(dbp, dbc->txn, &new_lsn, 0,
- PUTOVFL, PGNO(pagep), &LSN(pagep),
- PGNO(new_pagep), &LSN(new_pagep), PGNO_INVALID, NULL)) != 0)
+ PUTOVFL, PGNO(pagep), &LSN(pagep), PGNO(new_pagep),
+ &LSN(new_pagep), PGNO_INVALID, NULL)) != 0) {
+ (void)__memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
return (ret);
+ }
} else
LSN_NOT_LOGGED(new_lsn);
@@ -1509,7 +1516,7 @@ __ham_add_ovflpage(dbc, pagep, release, pp)
PREV_PGNO(new_pagep) = PGNO(pagep);
if (release)
- ret = mpf->put(mpf, pagep, DB_MPOOL_DIRTY);
+ ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY);
*pp = new_pagep;
return (ret);
@@ -1570,8 +1577,7 @@ __ham_get_cpage(dbc, mode)
hcp->lbucket = hcp->bucket;
if (LOCK_ISSET(tmp_lock))
/* Case 3: release the original lock. */
- ret =
- dbp->dbenv->lock_put(dbp->dbenv, &tmp_lock);
+ ret = __lock_put(dbp->dbenv, &tmp_lock);
} else if (LOCK_ISSET(tmp_lock))
hcp->lock = tmp_lock;
}
@@ -1579,7 +1585,7 @@ __ham_get_cpage(dbc, mode)
if (ret == 0 && hcp->page == NULL) {
if (hcp->pgno == PGNO_INVALID)
hcp->pgno = BUCKET_TO_PAGE(hcp, hcp->bucket);
- if ((ret = mpf->get(mpf,
+ if ((ret = __memp_fget(mpf,
&hcp->pgno, DB_MPOOL_CREATE, &hcp->page)) != 0)
return (ret);
}
@@ -1610,12 +1616,12 @@ __ham_next_cpage(dbc, pgno, dirty)
mpf = dbp->mpf;
hcp = (HASH_CURSOR *)dbc->internal;
- if (hcp->page != NULL &&
- (ret = mpf->put(mpf, hcp->page, dirty ? DB_MPOOL_DIRTY : 0)) != 0)
+ if (hcp->page != NULL && (ret =
+ __memp_fput(mpf, hcp->page, dirty ? DB_MPOOL_DIRTY : 0)) != 0)
return (ret);
hcp->page = NULL;
- if ((ret = mpf->get(mpf, &pgno, DB_MPOOL_CREATE, &p)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &p)) != 0)
return (ret);
hcp->page = p;
diff --git a/db/hash/hash_rec.c b/db/hash/hash_rec.c
index ded58c281..b3701057e 100644
--- a/db/hash/hash_rec.c
+++ b/db/hash/hash_rec.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_rec.c,v 11.34 2001/01/11 18:19:52 bostic Exp $";
+static const char revid[] = "$Id: hash_rec.c,v 11.76 2003/07/04 17:45:07 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -53,15 +53,14 @@ static const char revid[] = "$Id: hash_rec.c,v 11.34 2001/01/11 18:19:52 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "lock.h"
-#include "log.h"
-#include "mp.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
-static int __ham_alloc_pages __P((DB *, __ham_groupalloc_args *));
+static int __ham_alloc_pages __P((DB *, __ham_groupalloc_args *, DB_LSN *));
/*
* __ham_insdel_recover --
@@ -82,16 +81,16 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- u_int32_t opcode;
- int cmp_n, cmp_p, flags, getmeta, ret, type;
+ u_int32_t flags, opcode;
+ int cmp_n, cmp_p, ret, type;
+ pagep = NULL;
COMPQUIET(info, NULL);
- getmeta = 0;
REC_PRINT(__ham_insdel_print);
REC_INTRO(__ham_insdel_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -100,15 +99,11 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
* don't bother creating a page.
*/
goto done;
- } else if ((ret = memp_fget(mpf, &argp->pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
- getmeta = 1;
-
cmp_n = log_compare(lsnp, &LSN(pagep));
cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
@@ -135,7 +130,7 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
*/
if (opcode != DELPAIR ||
argp->ndx == (u_int32_t)NUM_ENT(pagep)) {
- __ham_putitem(pagep, &argp->key,
+ __ham_putitem(file_dbp, pagep, &argp->key,
DB_UNDO(op) || PAIR_ISKEYBIG(argp->opcode) ?
H_OFFPAGE : H_KEYDATA);
@@ -145,31 +140,32 @@ __ham_insdel_recover(dbenv, dbtp, lsnp, op, info)
type = H_OFFPAGE;
else
type = H_KEYDATA;
- __ham_putitem(pagep, &argp->data, type);
+ __ham_putitem(file_dbp, pagep, &argp->data, type);
} else
- (void)__ham_reputpair(pagep, file_dbp->pgsize,
+ (void)__ham_reputpair(file_dbp, pagep,
argp->ndx, &argp->key, &argp->data);
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
flags = DB_MPOOL_DIRTY;
- } else if ((opcode == DELPAIR && cmp_p == 0 && DB_REDO(op))
- || (opcode == PUTPAIR && cmp_n == 0 && DB_UNDO(op))) {
+ } else if ((opcode == DELPAIR && cmp_p == 0 && DB_REDO(op)) ||
+ (opcode == PUTPAIR && cmp_n == 0 && DB_UNDO(op))) {
/* Need to undo a put or redo a delete. */
__ham_dpair(file_dbp, pagep, argp->ndx);
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
/* Return the previous LSN. */
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (getmeta)
- (void)__ham_release_meta(dbc);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
REC_CLOSE;
}
@@ -194,15 +190,16 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, flags, getmeta, ret;
+ u_int32_t flags;
+ int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
- getmeta = 0;
REC_PRINT(__ham_newpage_print);
REC_INTRO(__ham_newpage_read, 1);
- if ((ret = memp_fget(mpf, &argp->new_pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->new_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -212,15 +209,11 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
*/
ret = 0;
goto ppage;
- } else if ((ret = memp_fget(mpf, &argp->new_pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->new_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
- getmeta = 1;
-
/*
* There are potentially three pages we need to check: the one
* that we created/deleted, the one before it and the one after
@@ -250,12 +243,14 @@ __ham_newpage_recover(dbenv, dbtp, lsnp, op, info)
if (flags)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->pagelsn;
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
/* Now do the prev page. */
ppage: if (argp->prev_pgno != PGNO_INVALID) {
- if ((ret = memp_fget(mpf, &argp->prev_pgno, 0, &pagep)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &argp->prev_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist.
@@ -265,9 +260,8 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
*/
ret = 0;
goto npage;
- } else if ((ret =
- memp_fget(mpf, &argp->prev_pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->prev_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -281,7 +275,8 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
/* Redo a create new page or undo a delete new page. */
pagep->next_pgno = argp->new_pgno;
flags = DB_MPOOL_DIRTY;
- } else if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == DELOVFL) ||
+ } else if ((cmp_p == 0 &&
+ DB_REDO(op) && argp->opcode == DELOVFL) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == PUTOVFL)) {
/* Redo a delete or undo a create new page. */
pagep->next_pgno = argp->next_pgno;
@@ -291,13 +286,15 @@ ppage: if (argp->prev_pgno != PGNO_INVALID) {
if (flags)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->prevlsn;
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
}
/* Now time to do the next page */
npage: if (argp->next_pgno != PGNO_INVALID) {
- if ((ret = memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
+ if ((ret =
+ __memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist.
@@ -306,9 +303,8 @@ npage: if (argp->next_pgno != PGNO_INVALID) {
* this case, don't bother creating a page.
*/
goto done;
- } else if ((ret =
- memp_fget(mpf, &argp->next_pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->next_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -322,7 +318,8 @@ npage: if (argp->next_pgno != PGNO_INVALID) {
/* Redo a create new page or undo a delete new page. */
pagep->prev_pgno = argp->new_pgno;
flags = DB_MPOOL_DIRTY;
- } else if ((cmp_p == 0 && DB_REDO(op) && argp->opcode == DELOVFL) ||
+ } else if ((cmp_p == 0 &&
+ DB_REDO(op) && argp->opcode == DELOVFL) ||
(cmp_n == 0 && DB_UNDO(op) && argp->opcode == PUTOVFL)) {
/* Redo a delete or undo a create new page. */
pagep->prev_pgno = argp->prev_pgno;
@@ -332,14 +329,15 @@ npage: if (argp->next_pgno != PGNO_INVALID) {
if (flags)
LSN(pagep) = DB_REDO(op) ? *lsnp : argp->nextlsn;
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
}
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (getmeta)
- (void)__ham_release_meta(dbc);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
REC_CLOSE;
}
@@ -366,17 +364,18 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
DBT dbt;
PAGE *pagep;
+ u_int32_t flags;
int32_t grow;
- int cmp_n, cmp_p, flags, getmeta, ret;
+ int cmp_n, cmp_p, ret;
u_int8_t *hk;
+ pagep = NULL;
COMPQUIET(info, NULL);
- getmeta = 0;
REC_PRINT(__ham_replace_print);
REC_INTRO(__ham_replace_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -385,15 +384,11 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
* don't bother creating a page.
*/
goto done;
- } else if ((ret = memp_fget(mpf, &argp->pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
- getmeta = 1;
-
cmp_n = log_compare(lsnp, &LSN(pagep));
cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
@@ -419,10 +414,10 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
}
if (flags) {
- __ham_onpage_replace(pagep,
- file_dbp->pgsize, argp->ndx, argp->off, grow, &dbt);
+ __ham_onpage_replace(file_dbp, pagep,
+ argp->ndx, argp->off, grow, &dbt);
if (argp->makedup) {
- hk = P_ENTRY(pagep, argp->ndx);
+ hk = P_ENTRY(file_dbp, pagep, argp->ndx);
if (DB_REDO(op))
HPAGE_PTYPE(hk) = H_DUPLICATE;
else
@@ -430,14 +425,15 @@ __ham_replace_recover(dbenv, dbtp, lsnp, op, info)
}
}
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (getmeta)
- (void)__ham_release_meta(dbc);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
REC_CLOSE;
}
@@ -460,15 +456,16 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, flags, getmeta, ret;
+ u_int32_t flags;
+ int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
- getmeta = 0;
REC_PRINT(__ham_splitdata_print);
REC_INTRO(__ham_splitdata_read, 1);
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -477,15 +474,11 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
* don't bother creating a page.
*/
goto done;
- } else if ((ret = memp_fget(mpf, &argp->pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
- getmeta = 1;
-
cmp_n = log_compare(lsnp, &LSN(pagep));
cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
CHECK_LSN(op, cmp_p, &LSN(pagep), &argp->pagelsn);
@@ -519,14 +512,15 @@ __ham_splitdata_recover(dbenv, dbtp, lsnp, op, info)
LSN(pagep) = argp->pagelsn;
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(file_dbp->mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (getmeta)
- (void)__ham_release_meta(dbc);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
REC_CLOSE;
}
@@ -550,21 +544,19 @@ __ham_copypage_recover(dbenv, dbtp, lsnp, op, info)
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- int cmp_n, cmp_p, flags, getmeta, ret;
+ u_int32_t flags;
+ int cmp_n, cmp_p, ret;
+ pagep = NULL;
COMPQUIET(info, NULL);
- getmeta = 0;
REC_PRINT(__ham_copypage_print);
REC_INTRO(__ham_copypage_read, 1);
- if ((ret = __ham_get_meta(dbc)) != 0)
- goto out;
- getmeta = 1;
flags = 0;
/* This is the bucket page. */
- if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -574,8 +566,8 @@ __ham_copypage_recover(dbenv, dbtp, lsnp, op, info)
*/
ret = 0;
goto donext;
- } else if ((ret = memp_fget(mpf, &argp->pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -597,11 +589,12 @@ __ham_copypage_recover(dbenv, dbtp, lsnp, op, info)
LSN(pagep) = argp->pagelsn;
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
donext: /* Now fix up the "next" page. */
- if ((ret = memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->next_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -611,8 +604,8 @@ donext: /* Now fix up the "next" page. */
*/
ret = 0;
goto do_nn;
- } else if ((ret = memp_fget(mpf, &argp->next_pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->next_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -629,14 +622,15 @@ donext: /* Now fix up the "next" page. */
memcpy(pagep, argp->page.data, argp->page.size);
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
/* Now fix up the next's next page. */
do_nn: if (argp->nnext_pgno == PGNO_INVALID)
goto done;
- if ((ret = memp_fget(mpf, &argp->nnext_pgno, 0, &pagep)) != 0) {
+ if ((ret = __memp_fget(mpf, &argp->nnext_pgno, 0, &pagep)) != 0) {
if (DB_UNDO(op)) {
/*
* We are undoing and the page doesn't exist. That
@@ -645,8 +639,8 @@ do_nn: if (argp->nnext_pgno == PGNO_INVALID)
* don't bother creating a page.
*/
goto done;
- } else if ((ret = memp_fget(mpf, &argp->nnext_pgno,
- DB_MPOOL_CREATE, &pagep)) != 0)
+ } else if ((ret = __memp_fget(mpf,
+ &argp->nnext_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
}
@@ -666,14 +660,15 @@ do_nn: if (argp->nnext_pgno == PGNO_INVALID)
LSN(pagep) = argp->nnextlsn;
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+ pagep = NULL;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: if (getmeta)
- (void)__ham_release_meta(dbc);
+out: if (pagep != NULL)
+ (void)__memp_fput(mpf, pagep, 0);
REC_CLOSE;
}
@@ -695,13 +690,17 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
__ham_metagroup_args *argp;
HASH_CURSOR *hcp;
DB *file_dbp;
+ DBMETA *mmeta;
DBC *dbc;
DB_MPOOLFILE *mpf;
PAGE *pagep;
- db_pgno_t last_pgno;
- int cmp_n, cmp_p, flags, groupgrow, ret;
+ db_pgno_t pgno;
+ u_int32_t flags, mmeta_flags;
+ int cmp_n, cmp_p, did_recover, groupgrow, ret;
COMPQUIET(info, NULL);
+ mmeta_flags = 0;
+ mmeta = NULL;
REC_PRINT(__ham_metagroup_print);
REC_INTRO(__ham_metagroup_read, 1);
@@ -709,23 +708,30 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
* This logs the virtual create of pages pgno to pgno + bucket
* Since the mpool page-allocation is not really able to be
* transaction protected, we can never undo it. Even in an abort,
- * we have to allocate these pages to the hash table.
+ * we have to allocate these pages to the hash table if they
+ * were actually created. In particular, during disaster
+ * recovery the metapage may be before this point if we
+ * are rolling backward. If the file has not been extended
+ * then the metapage could not have been updated.
* The log record contains:
* bucket: new bucket being allocated.
* pgno: page number of the new bucket.
* if bucket is a power of 2, then we allocated a whole batch of
* pages; if it's not, then we simply allocated one new page.
*/
- groupgrow =
- (u_int32_t)(1 << __db_log2(argp->bucket + 1)) == argp->bucket + 1;
-
- last_pgno = argp->pgno;
- if (groupgrow)
- /* Read the last page. */
- last_pgno += argp->bucket;
-
- if ((ret = memp_fget(mpf, &last_pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
+ groupgrow = (u_int32_t)(1 << __db_log2(argp->bucket + 1)) ==
+ argp->bucket + 1;
+ pgno = argp->pgno;
+ if (argp->newalloc)
+ pgno += argp->bucket;
+
+ if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
+ if (ret != ENOSPC)
+ goto out;
+ pgno = 0;
+ groupgrow = 0;
+ goto do_meta;
+ }
cmp_n = log_compare(lsnp, &LSN(pagep));
cmp_p = log_compare(&LSN(pagep), &argp->pagelsn);
@@ -743,9 +749,10 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
pagep->lsn = argp->pagelsn;
flags = DB_MPOOL_DIRTY;
}
- if ((ret = memp_fput(mpf, pagep, flags)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, flags)) != 0)
goto out;
+do_meta:
/* Now we have to update the meta-data page. */
hcp = (HASH_CURSOR *)dbc->internal;
if ((ret = __ham_get_meta(dbc)) != 0)
@@ -753,39 +760,87 @@ __ham_metagroup_recover(dbenv, dbtp, lsnp, op, info)
cmp_n = log_compare(lsnp, &hcp->hdr->dbmeta.lsn);
cmp_p = log_compare(&hcp->hdr->dbmeta.lsn, &argp->metalsn);
CHECK_LSN(op, cmp_p, &hcp->hdr->dbmeta.lsn, &argp->metalsn);
- if ((cmp_p == 0 && DB_REDO(op)) || (cmp_n == 0 && DB_UNDO(op))) {
- if (DB_REDO(op)) {
- /* Redo the actual updating of bucket counts. */
- ++hcp->hdr->max_bucket;
- if (groupgrow) {
- hcp->hdr->low_mask = hcp->hdr->high_mask;
- hcp->hdr->high_mask =
- (argp->bucket + 1) | hcp->hdr->low_mask;
- }
- hcp->hdr->dbmeta.lsn = *lsnp;
- } else {
- /* Undo the actual updating of bucket counts. */
- --hcp->hdr->max_bucket;
- if (groupgrow) {
- hcp->hdr->high_mask = hcp->hdr->low_mask;
- hcp->hdr->low_mask = hcp->hdr->high_mask >> 1;
- }
- hcp->hdr->dbmeta.lsn = argp->metalsn;
+ did_recover = 0;
+ if (cmp_p == 0 && DB_REDO(op)) {
+ /* Redo the actual updating of bucket counts. */
+ ++hcp->hdr->max_bucket;
+ if (groupgrow) {
+ hcp->hdr->low_mask = hcp->hdr->high_mask;
+ hcp->hdr->high_mask =
+ (argp->bucket + 1) | hcp->hdr->low_mask;
}
- if (groupgrow &&
- hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] ==
- PGNO_INVALID)
- hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] =
- argp->pgno - argp->bucket - 1;
- F_SET(hcp, H_DIRTY);
+ hcp->hdr->dbmeta.lsn = *lsnp;
+ did_recover = 1;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ /* Undo the actual updating of bucket counts. */
+ --hcp->hdr->max_bucket;
+ if (groupgrow) {
+ hcp->hdr->high_mask = hcp->hdr->low_mask;
+ hcp->hdr->low_mask = hcp->hdr->high_mask >> 1;
+ }
+ hcp->hdr->dbmeta.lsn = argp->metalsn;
+ did_recover = 1;
}
- if ((ret = __ham_release_meta(dbc)) != 0)
+
+ /*
+ * Now we need to fix up the spares array. Each entry in the
+ * spares array indicates the beginning page number for the
+ * indicated doubling. We need to fill this in whenever the
+ * spares array is invalid, since we never reclaim pages from
+ * the spares array and we have to allocate the pages to the
+ * spares array in both the redo and undo cases.
+ */
+ if (groupgrow &&
+ hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] == PGNO_INVALID) {
+ hcp->hdr->spares[__db_log2(argp->bucket + 1) + 1] =
+ argp->pgno - argp->bucket - 1;
+ did_recover = 1;
+ }
+
+ /*
+ * Finally, we need to potentially fix up the last_pgno field
+ * in the master meta-data page (which may or may not be the
+ * same as the hash header page).
+ */
+ if (argp->mmpgno != argp->mpgno) {
+ if ((ret = __memp_fget(mpf, &argp->mmpgno, 0, &mmeta)) != 0)
+ goto out;
+ mmeta_flags = 0;
+ cmp_n = log_compare(lsnp, &mmeta->lsn);
+ cmp_p = log_compare(&mmeta->lsn, &argp->mmetalsn);
+ if (cmp_p == 0 && DB_REDO(op)) {
+ mmeta->lsn = *lsnp;
+ mmeta_flags = DB_MPOOL_DIRTY;
+ } else if (cmp_n == 0 && DB_UNDO(op)) {
+ mmeta->lsn = argp->mmetalsn;
+ mmeta_flags = DB_MPOOL_DIRTY;
+ }
+ } else
+ mmeta = (DBMETA *)hcp->hdr;
+
+ if (mmeta->last_pgno < pgno)
+ mmeta->last_pgno = pgno;
+ mmeta_flags = DB_MPOOL_DIRTY;
+
+ if (argp->mmpgno != argp->mpgno &&
+ (ret = __memp_fput(mpf, mmeta, mmeta_flags)) != 0)
goto out;
+ mmeta = NULL;
+
+ if (did_recover)
+ F_SET(hcp, H_DIRTY);
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
+out: if (mmeta != NULL)
+ (void)__memp_fput(mpf, mmeta, 0);
+ if (dbc != NULL)
+ (void)__ham_release_meta(dbc);
+ if (ret == ENOENT && op == DB_TXN_BACKWARD_ALLOC)
+ ret = 0;
+
+ REC_CLOSE;
}
/*
@@ -808,17 +863,20 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
DB_MPOOLFILE *mpf;
DB *file_dbp;
DBC *dbc;
+ PAGE *pagep;
db_pgno_t pgno;
- int cmp_n, cmp_p, flags, ret;
+ int cmp_n, cmp_p, modified, ret;
+ mmeta = NULL;
+ modified = 0;
REC_PRINT(__ham_groupalloc_print);
REC_INTRO(__ham_groupalloc_read, 0);
pgno = PGNO_BASE_MD;
- if ((ret = memp_fget(mpf, &pgno, 0, &mmeta)) != 0) {
+ if ((ret = __memp_fget(mpf, &pgno, 0, &mmeta)) != 0) {
if (DB_REDO(op)) {
/* Page should have existed. */
- (void)__db_pgerr(file_dbp, pgno);
+ ret = __db_pgerr(file_dbp, pgno, ret);
goto out;
} else {
ret = 0;
@@ -839,37 +897,58 @@ __ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info)
* that the pages were never allocated, so we'd better check for
* that and handle it here.
*/
-
- flags = 0;
+ pgno = argp->start_pgno + argp->num - 1;
if (DB_REDO(op)) {
- if ((ret = __ham_alloc_pages(file_dbp, argp)) != 0)
- goto out1;
+ if ((ret = __ham_alloc_pages(file_dbp, argp, lsnp)) != 0)
+ goto out;
if (cmp_p == 0) {
LSN(mmeta) = *lsnp;
- flags = DB_MPOOL_DIRTY;
+ modified = 1;
}
- }
+ } else if (DB_UNDO(op)) {
+ /*
+ * Reset the last page back to its preallocation state.
+ */
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) == 0) {
- /*
- * Always put the pages into the limbo list and free them later.
- */
- else if (DB_UNDO(op)) {
+ if (log_compare(&pagep->lsn, lsnp) == 0)
+ ZERO_LSN(pagep->lsn);
+
+ if ((ret =
+ __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
+ goto out;
+ } else if (ret != DB_PAGE_NOTFOUND)
+ goto out;
+ /*
+ * Always put the pages into the limbo list and free them later.
+ */
if ((ret = __db_add_limbo(dbenv,
info, argp->fileid, argp->start_pgno, argp->num)) != 0)
goto out;
if (cmp_n == 0) {
LSN(mmeta) = argp->meta_lsn;
- flags = DB_MPOOL_DIRTY;
+ modified = 1;
}
}
-out1: if ((ret = memp_fput(mpf, mmeta, flags)) != 0)
- goto out;
+ /*
+ * In both REDO and UNDO, we have grown the file and need to make
+ * sure that last_pgno is correct.
+ */
+ if (pgno > mmeta->last_pgno) {
+ mmeta->last_pgno = pgno;
+ modified = 1;
+ }
done: if (ret == 0)
*lsnp = argp->prev_lsn;
-out: REC_CLOSE;
+out: if (mmeta != NULL)
+ (void)__memp_fput(mpf, mmeta, modified ? DB_MPOOL_DIRTY : 0);
+
+ if (ret == ENOENT && op == DB_TXN_BACKWARD_ALLOC)
+ ret = 0;
+ REC_CLOSE;
}
/*
@@ -883,9 +962,10 @@ out: REC_CLOSE;
* Hash normally has holes in its files and handles them appropriately.
*/
static int
-__ham_alloc_pages(dbp, argp)
+__ham_alloc_pages(dbp, argp, lsnp)
DB *dbp;
__ham_groupalloc_args *argp;
+ DB_LSN *lsnp;
{
DB_MPOOLFILE *mpf;
PAGE *pagep;
@@ -898,38 +978,24 @@ __ham_alloc_pages(dbp, argp)
pgno = argp->start_pgno + argp->num - 1;
/* If the page exists, and it has been initialized, then we're done. */
- if ((ret = memp_fget(mpf, &pgno, 0, &pagep)) == 0) {
- if ((pagep->type == P_INVALID) && IS_ZERO_LSN(pagep->lsn))
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) == 0) {
+ if (NUM_ENT(pagep) == 0 && IS_ZERO_LSN(pagep->lsn))
goto reinit_page;
- if ((ret = memp_fput(mpf, pagep, 0)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, 0)) != 0)
return (ret);
return (0);
}
- /*
- * Had to create the page. On some systems (read "Windows"),
- * you can find random garbage on pages to which you haven't
- * yet written. So, we have an os layer that will do the
- * right thing for group allocations. We call that directly
- * to make sure all the pages are allocated and then continue
- * merrily on our way with normal recovery.
- */
- if ((ret = __os_fpinit(dbp->dbenv, &mpf->fh,
- argp->start_pgno, argp->num, dbp->pgsize)) != 0)
- return (ret);
-
- if ((ret = memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0) {
- (void)__db_pgerr(dbp, pgno);
- return (ret);
- }
+ /* Had to create the page. */
+ if ((ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ return (__db_pgerr(dbp, pgno, ret));
reinit_page:
/* Initialize the newly allocated page. */
- P_INIT(pagep,
- dbp->pgsize, pgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
- ZERO_LSN(pagep->lsn);
+ P_INIT(pagep, dbp->pgsize, pgno, PGNO_INVALID, PGNO_INVALID, 0, P_HASH);
+ pagep->lsn = *lsnp;
- if ((ret = memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
+ if ((ret = __memp_fput(mpf, pagep, DB_MPOOL_DIRTY)) != 0)
return (ret);
return (0);
@@ -942,7 +1008,6 @@ reinit_page:
* PUBLIC: int __ham_curadj_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
-
int
__ham_curadj_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
@@ -958,14 +1023,13 @@ __ham_curadj_recover(dbenv, dbtp, lsnp, op, info)
int ret;
HASH_CURSOR *hcp;
- REC_PRINT(__ham_groupalloc_print);
+ COMPQUIET(info, NULL);
+ REC_PRINT(__ham_curadj_print);
+ REC_INTRO(__ham_curadj_read, 0);
- ret = 0;
if (op != DB_TXN_ABORT)
goto done;
- REC_INTRO(__ham_curadj_read, 0);
- COMPQUIET(info, NULL);
/*
* Undo the adjustment by reinitializing the the cursor
* to look like the one that was used to do the adustment,
@@ -991,7 +1055,6 @@ out: REC_CLOSE;
* PUBLIC: int __ham_chgpg_recover
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
-
int
__ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
DB_ENV *dbenv;
@@ -1008,15 +1071,18 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
int ret;
DBC *cp;
HASH_CURSOR *lcp;
+ u_int32_t order, indx;
+ COMPQUIET(info, NULL);
REC_PRINT(__ham_chgpg_print);
+ REC_INTRO(__ham_chgpg_read, 0);
- ret = 0;
if (op != DB_TXN_ABORT)
- goto out;
- REC_INTRO(__ham_chgpg_read, 0);
+ goto done;
- COMPQUIET(info, NULL);
+ /* Overloaded fields for DB_HAM_DEL*PG */
+ indx = argp->old_indx;
+ order = argp->new_indx;
MUTEX_THREAD_LOCK(dbenv, dbenv->dblist_mutexp);
for (ldbp = __dblist_get(dbenv, file_dbp->adj_fileid);
@@ -1029,50 +1095,77 @@ __ham_chgpg_recover(dbenv, dbtp, lsnp, op, info)
lcp = (HASH_CURSOR *)cp->internal;
switch (argp->mode) {
- case DB_HAM_CHGPG:
+ case DB_HAM_DELFIRSTPG:
if (lcp->pgno != argp->new_pgno)
break;
-
- if (argp->old_indx == NDX_INVALID)
+ if (lcp->indx != indx ||
+ !F_ISSET(lcp, H_DELETED) ||
+ lcp->order >= order) {
lcp->pgno = argp->old_pgno;
- else if (lcp->indx == argp->new_indx) {
- lcp->indx = argp->old_indx;
+ if (lcp->indx == indx)
+ lcp->order -= order;
+ }
+ break;
+ case DB_HAM_DELMIDPG:
+ case DB_HAM_DELLASTPG:
+ if (lcp->pgno == argp->new_pgno &&
+ lcp->indx == indx &&
+ F_ISSET(lcp, H_DELETED) &&
+ lcp->order >= order) {
lcp->pgno = argp->old_pgno;
+ lcp->order -= order;
+ lcp->indx = 0;
}
break;
-
+ case DB_HAM_CHGPG:
+ /*
+ * If we're doing a CHGPG, we're undoing
+ * the move of a non-deleted item to a
+ * new page. Any cursors with the deleted
+ * flag set do not belong to this item;
+ * don't touch them.
+ */
+ if (F_ISSET(lcp, H_DELETED))
+ break;
+ /* FALLTHROUGH */
case DB_HAM_SPLIT:
- if (lcp->pgno == argp->new_pgno
- && lcp->indx == argp->new_indx) {
+ if (lcp->pgno == argp->new_pgno &&
+ lcp->indx == argp->new_indx) {
lcp->indx = argp->old_indx;
lcp->pgno = argp->old_pgno;
}
break;
-
case DB_HAM_DUP:
- if (lcp->opd != NULL) {
- opdcp =
- (BTREE_CURSOR *)lcp->opd->internal;
- if (opdcp->pgno == argp->new_pgno &&
- opdcp->indx == argp->new_indx) {
- if (F_ISSET(opdcp, C_DELETED))
- F_SET(lcp, H_DELETED);
- if ((ret =
- lcp->opd->c_close(
- lcp->opd)) != 0)
- goto out;
- lcp->opd = NULL;
- }
- }
+ if (lcp->opd == NULL)
+ break;
+ opdcp = (BTREE_CURSOR *)lcp->opd->internal;
+ if (opdcp->pgno != argp->new_pgno ||
+ opdcp->indx != argp->new_indx)
+ break;
+
+ if (F_ISSET(opdcp, C_DELETED))
+ F_SET(lcp, H_DELETED);
+ /*
+ * We can't close a cursor while we have the
+ * dbp mutex locked, since c_close reacquires
+ * it. It should be safe to drop the mutex
+ * here, though, since newly opened cursors
+ * are put only at the end of the tailq and
+ * the cursor we're adjusting can't be closed
+ * under us.
+ */
+ MUTEX_THREAD_UNLOCK(dbenv, file_dbp->mutexp);
+ if ((ret = __db_c_close(lcp->opd)) != 0)
+ goto out;
+ MUTEX_THREAD_LOCK(dbenv, file_dbp->mutexp);
+ lcp->opd = NULL;
break;
}
}
-
MUTEX_THREAD_UNLOCK(dbenv, file_dbp->mutexp);
}
MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);
done: *lsnp = argp->prev_lsn;
- ret = 0;
out: REC_CLOSE;
}
diff --git a/db/hash/hash_reclaim.c b/db/hash/hash_reclaim.c
index 8857c5406..c1a127153 100644
--- a/db/hash/hash_reclaim.c
+++ b/db/hash/hash_reclaim.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_reclaim.c,v 11.4 2000/11/30 00:58:37 ubell Exp $";
+static const char revid[] = "$Id: hash_reclaim.c,v 11.15 2003/06/30 17:20:13 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,10 +18,8 @@ static const char revid[] = "$Id: hash_reclaim.c,v 11.4 2000/11/30 00:58:37 ubel
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "hash.h"
-#include "lock.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
/*
* __ham_reclaim --
@@ -45,17 +43,17 @@ __ham_reclaim(dbp, txn)
int ret;
/* Open up a cursor that we'll use for traversing. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, txn, &dbc, 0)) != 0)
return (ret);
hcp = (HASH_CURSOR *)dbc->internal;
if ((ret = __ham_get_meta(dbc)) != 0)
goto err;
- if ((ret = __ham_traverse(dbp,
- dbc, DB_LOCK_WRITE, __db_reclaim_callback, dbc)) != 0)
+ if ((ret = __ham_traverse(dbc,
+ DB_LOCK_WRITE, __db_reclaim_callback, dbc, 1)) != 0)
goto err;
- if ((ret = dbc->c_close(dbc)) != 0)
+ if ((ret = __db_c_close(dbc)) != 0)
goto err;
if ((ret = __ham_release_meta(dbc)) != 0)
goto err;
@@ -63,6 +61,37 @@ __ham_reclaim(dbp, txn)
err: if (hcp->hdr != NULL)
(void)__ham_release_meta(dbc);
- (void)dbc->c_close(dbc);
+ (void)__db_c_close(dbc);
+ return (ret);
+}
+
+/*
+ * __ham_truncate --
+ * Reclaim the pages from a subdatabase and return them to the
+ * parent free list.
+ *
+ * PUBLIC: int __ham_truncate __P((DBC *, u_int32_t *));
+ */
+int
+__ham_truncate(dbc, countp)
+ DBC *dbc;
+ u_int32_t *countp;
+{
+ db_trunc_param trunc;
+ int ret, t_ret;
+
+ if ((ret = __ham_get_meta(dbc)) != 0)
+ return (ret);
+
+ trunc.count = 0;
+ trunc.dbc = dbc;
+
+ ret = __ham_traverse(dbc,
+ DB_LOCK_WRITE, __db_truncate_callback, &trunc, 1);
+
+ if ((t_ret = __ham_release_meta(dbc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ *countp = trunc.count;
return (ret);
}
diff --git a/db/hash/hash_stat.c b/db/hash/hash_stat.c
index ed64bbc68..2526f0f21 100644
--- a/db/hash/hash_stat.c
+++ b/db/hash/hash_stat.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_stat.c,v 11.24 2000/12/21 21:54:35 margo Exp $";
+static const char revid[] = "$Id: hash_stat.c,v 11.52 2003/06/30 17:20:13 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,11 +18,12 @@ static const char revid[] = "$Id: hash_stat.c,v 11.24 2000/12/21 21:54:35 margo
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "btree.h"
-#include "hash.h"
-#include "lock.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
static int __ham_stat_callback __P((DB *, PAGE *, void *, int *));
@@ -30,71 +31,68 @@ static int __ham_stat_callback __P((DB *, PAGE *, void *, int *));
* __ham_stat --
* Gather/print the hash statistics
*
- * PUBLIC: int __ham_stat __P((DB *, void *, void *(*)(size_t), u_int32_t));
+ * PUBLIC: int __ham_stat __P((DBC *, void *, u_int32_t));
*/
int
-__ham_stat(dbp, spp, db_malloc, flags)
- DB *dbp;
- void *spp, *(*db_malloc) __P((size_t));
+__ham_stat(dbc, spp, flags)
+ DBC *dbc;
+ void *spp;
u_int32_t flags;
{
+ DB *dbp;
+ DB_ENV *dbenv;
DB_HASH_STAT *sp;
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
- DBC *dbc;
PAGE *h;
db_pgno_t pgno;
int ret;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->stat");
+ dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
sp = NULL;
- /* Check for invalid flags. */
- if ((ret = __db_statchk(dbp, flags)) != 0)
- return (ret);
-
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
- return (ret);
hcp = (HASH_CURSOR *)dbc->internal;
if ((ret = __ham_get_meta(dbc)) != 0)
goto err;
/* Allocate and clear the structure. */
- if ((ret = __os_malloc(dbp->dbenv, sizeof(*sp), db_malloc, &sp)) != 0)
+ if ((ret = __os_umalloc(dbenv, sizeof(*sp), &sp)) != 0)
goto err;
memset(sp, 0, sizeof(*sp));
- if (flags == DB_CACHED_COUNTS) {
- sp->hash_nkeys = hcp->hdr->dbmeta.key_count;
- sp->hash_ndata = hcp->hdr->dbmeta.record_count;
- goto done;
- }
-
/* Copy the fields that we have. */
+ sp->hash_nkeys = hcp->hdr->dbmeta.key_count;
+ sp->hash_ndata = hcp->hdr->dbmeta.record_count;
sp->hash_pagesize = dbp->pgsize;
sp->hash_buckets = hcp->hdr->max_bucket + 1;
sp->hash_magic = hcp->hdr->dbmeta.magic;
sp->hash_version = hcp->hdr->dbmeta.version;
sp->hash_metaflags = hcp->hdr->dbmeta.flags;
- sp->hash_nelem = hcp->hdr->nelem;
sp->hash_ffactor = hcp->hdr->ffactor;
+ if (flags == DB_FAST_STAT || flags == DB_CACHED_COUNTS)
+ goto done;
+
/* Walk the free list, counting pages. */
for (sp->hash_free = 0, pgno = hcp->hdr->dbmeta.free;
pgno != PGNO_INVALID;) {
++sp->hash_free;
- if ((ret = memp_fget(dbp->mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
goto err;
pgno = h->next_pgno;
- (void)memp_fput(dbp->mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
}
/* Now traverse the rest of the table. */
- if ((ret = __ham_traverse(dbp,
- dbc, DB_LOCK_READ, __ham_stat_callback, sp)) != 0)
+ sp->hash_nkeys = 0;
+ sp->hash_ndata = 0;
+ if ((ret = __ham_traverse(dbc,
+ DB_LOCK_READ, __ham_stat_callback, sp, 0)) != 0)
goto err;
if (!F_ISSET(dbp, DB_AM_RDONLY)) {
@@ -104,22 +102,19 @@ __ham_stat(dbp, spp, db_malloc, flags)
hcp->hdr->dbmeta.record_count = sp->hash_ndata;
}
-done:
- if ((ret = __ham_release_meta(dbc)) != 0)
- goto err;
- if ((ret = dbc->c_close(dbc)) != 0)
+done: if ((ret = __ham_release_meta(dbc)) != 0)
goto err;
*(DB_HASH_STAT **)spp = sp;
return (0);
err: if (sp != NULL)
- __os_free(sp, sizeof(*sp));
+ __os_ufree(dbenv, sp);
+
if (hcp->hdr != NULL)
(void)__ham_release_meta(dbc);
- (void)dbc->c_close(dbc);
- return (ret);
+ return (ret);
}
/*
@@ -127,26 +122,30 @@ err: if (sp != NULL)
* Traverse an entire hash table. We use the callback so that we
* can use this both for stat collection and for deallocation.
*
- * PUBLIC: int __ham_traverse __P((DB *, DBC *, db_lockmode_t,
- * PUBLIC: int (*)(DB *, PAGE *, void *, int *), void *));
+ * PUBLIC: int __ham_traverse __P((DBC *, db_lockmode_t,
+ * PUBLIC: int (*)(DB *, PAGE *, void *, int *), void *, int));
*/
int
-__ham_traverse(dbp, dbc, mode, callback, cookie)
- DB *dbp;
+__ham_traverse(dbc, mode, callback, cookie, look_past_max)
DBC *dbc;
db_lockmode_t mode;
int (*callback) __P((DB *, PAGE *, void *, int *));
void *cookie;
+ int look_past_max;
{
+ DB *dbp;
+ DBC *opd;
+ DB_MPOOLFILE *mpf;
HASH_CURSOR *hcp;
HKEYDATA *hk;
- DBC *opd;
db_pgno_t pgno, opgno;
- u_int32_t bucket;
int did_put, i, ret, t_ret;
+ u_int32_t bucket, spares_entry;
- hcp = (HASH_CURSOR *)dbc->internal;
+ dbp = dbc->dbp;
opd = NULL;
+ mpf = dbp->mpf;
+ hcp = (HASH_CURSOR *)dbc->internal;
ret = 0;
/*
@@ -156,12 +155,47 @@ __ham_traverse(dbp, dbc, mode, callback, cookie)
* locking easy, makes this a pain in the butt. We have to traverse
* duplicate, overflow and big pages from the bucket so that we
* don't access anything that isn't properly locked.
+ *
*/
- for (bucket = 0; bucket <= hcp->hdr->max_bucket; bucket++) {
+ for (bucket = 0;; bucket++) {
+ /*
+ * We put the loop exit condition check here, because
+ * it made for a really vile extended ?: that made SCO's
+ * compiler drop core.
+ *
+ * If look_past_max is not set, we can stop at max_bucket;
+ * if it is set, we need to include pages that are part of
+ * the current doubling but beyond the highest bucket we've
+ * split into, as well as pages from a "future" doubling
+ * that may have been created within an aborted
+ * transaction. To do this, keep looping (and incrementing
+ * bucket) until the corresponding spares array entries
+ * cease to be defined.
+ */
+ if (look_past_max) {
+ spares_entry = __db_log2(bucket + 1);
+ if (spares_entry >= NCACHED ||
+ hcp->hdr->spares[spares_entry] == 0)
+ break;
+ } else {
+ if (bucket > hcp->hdr->max_bucket)
+ break;
+ }
+
hcp->bucket = bucket;
hcp->pgno = pgno = BUCKET_TO_PAGE(hcp, bucket);
for (ret = __ham_get_cpage(dbc, mode); ret == 0;
ret = __ham_next_cpage(dbc, pgno, 0)) {
+
+ /*
+ * If we are cleaning up pages past the max_bucket,
+ * then they may be on the free list and have their
+ * next pointers set, but they should be ignored. In
+ * fact, we really ought to just skip anybody who is
+ * not a valid page.
+ */
+ if (TYPE(hcp->page) == P_INVALID)
+ break;
pgno = NEXT_PGNO(hcp->page);
/*
@@ -171,20 +205,20 @@ __ham_traverse(dbp, dbc, mode, callback, cookie)
* case we have to count those pages).
*/
for (i = 0; i < NUM_ENT(hcp->page); i++) {
- hk = (HKEYDATA *)P_ENTRY(hcp->page, i);
+ hk = (HKEYDATA *)P_ENTRY(dbp, hcp->page, i);
switch (HPAGE_PTYPE(hk)) {
case H_OFFDUP:
memcpy(&opgno, HOFFDUP_PGNO(hk),
sizeof(db_pgno_t));
if ((ret = __db_c_newopd(dbc,
- opgno, &opd)) != 0)
+ opgno, NULL, &opd)) != 0)
return (ret);
if ((ret = __bam_traverse(opd,
DB_LOCK_READ, opgno,
- __ham_stat_callback, cookie))
+ callback, cookie))
!= 0)
goto err;
- if ((ret = opd->c_close(opd)) != 0)
+ if ((ret = __db_c_close(opd)) != 0)
return (ret);
opd = NULL;
break;
@@ -221,17 +255,17 @@ __ham_traverse(dbp, dbc, mode, callback, cookie)
goto err;
if (STD_LOCKING(dbc))
- (void)lock_put(dbp->dbenv, &hcp->lock);
+ (void)__lock_put(dbp->dbenv, &hcp->lock);
if (hcp->page != NULL) {
- if ((ret = memp_fput(dbc->dbp->mpf, hcp->page, 0)) != 0)
+ if ((ret = __memp_fput(mpf, hcp->page, 0)) != 0)
return (ret);
hcp->page = NULL;
}
}
err: if (opd != NULL &&
- (t_ret = opd->c_close(opd)) != 0 && ret == 0)
+ (t_ret = __db_c_close(opd)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
@@ -247,6 +281,7 @@ __ham_stat_callback(dbp, pagep, cookie, putp)
DB_BTREE_STAT bstat;
db_indx_t indx, len, off, tlen, top;
u_int8_t *hk;
+ int ret;
*putp = 0;
sp = cookie;
@@ -266,24 +301,24 @@ __ham_stat_callback(dbp, pagep, cookie, putp)
* is a bucket.
*/
if (PREV_PGNO(pagep) == PGNO_INVALID)
- sp->hash_bfree += P_FREESPACE(pagep);
+ sp->hash_bfree += P_FREESPACE(dbp, pagep);
else {
sp->hash_overflows++;
- sp->hash_ovfl_free += P_FREESPACE(pagep);
+ sp->hash_ovfl_free += P_FREESPACE(dbp, pagep);
}
top = NUM_ENT(pagep);
/* Correct for on-page duplicates and deleted items. */
for (indx = 0; indx < top; indx += P_INDX) {
- switch (*H_PAIRDATA(pagep, indx)) {
+ switch (*H_PAIRDATA(dbp, pagep, indx)) {
case H_OFFDUP:
- case H_OFFPAGE:
break;
+ case H_OFFPAGE:
case H_KEYDATA:
sp->hash_ndata++;
break;
case H_DUPLICATE:
- tlen = LEN_HDATA(pagep, 0, indx);
- hk = H_PAIRDATA(pagep, indx);
+ tlen = LEN_HDATA(dbp, pagep, 0, indx);
+ hk = H_PAIRDATA(dbp, pagep, indx);
for (off = 0; off < tlen;
off += len + 2 * sizeof (db_indx_t)) {
sp->hash_ndata++;
@@ -306,11 +341,8 @@ __ham_stat_callback(dbp, pagep, cookie, putp)
* fields into our stat structure.
*/
memset(&bstat, 0, sizeof(bstat));
- bstat.bt_dup_pgfree = 0;
- bstat.bt_int_pgfree = 0;
- bstat.bt_leaf_pgfree = 0;
- bstat.bt_ndata = 0;
- __bam_stat_callback(dbp, pagep, &bstat, putp);
+ if ((ret = __bam_stat_callback(dbp, pagep, &bstat, putp)) != 0)
+ return (ret);
sp->hash_dup++;
sp->hash_dup_free += bstat.bt_leaf_pgfree +
bstat.bt_dup_pgfree + bstat.bt_int_pgfree;
@@ -318,11 +350,10 @@ __ham_stat_callback(dbp, pagep, cookie, putp)
break;
case P_OVERFLOW:
sp->hash_bigpages++;
- sp->hash_big_bfree += P_OVFLSPACE(dbp->pgsize, pagep);
+ sp->hash_big_bfree += P_OVFLSPACE(dbp, dbp->pgsize, pagep);
break;
default:
- return (__db_unknown_type(dbp->dbenv,
- "__ham_stat_callback", pagep->type));
+ return (__db_pgfmt(dbp->dbenv, pagep->pgno));
}
return (0);
diff --git a/db/hash/hash_stub.c b/db/hash/hash_stub.c
new file mode 100644
index 000000000..906331990
--- /dev/null
+++ b/db/hash/hash_stub.c
@@ -0,0 +1,394 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: hash_stub.c,v 1.4 2003/07/01 19:47:14 bostic Exp $";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
+
+/*
+ * If the library wasn't compiled with the Hash access method, various
+ * routines aren't available. Stub them here, returning an appropriate
+ * error.
+ */
+
+/*
+ * __db_nohasham --
+ * Error when a Berkeley DB build doesn't include the access method.
+ *
+ * PUBLIC: int __db_no_hash_am __P((DB_ENV *));
+ */
+int
+__db_no_hash_am(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv,
+ "library build did not include support for the Hash access method");
+ return (DB_OPNOTSUP);
+}
+
+int
+__ham_30_hashmeta(dbp, real_name, obuf)
+ DB *dbp;
+ char *real_name;
+ u_int8_t *obuf;
+{
+ COMPQUIET(real_name, NULL);
+ COMPQUIET(obuf, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_30_sizefix(dbp, fhp, realname, metabuf)
+ DB *dbp;
+ DB_FH *fhp;
+ char *realname;
+ u_int8_t *metabuf;
+{
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(realname, NULL);
+ COMPQUIET(metabuf, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_31_hash(dbp, real_name, flags, fhp, h, dirtyp)
+ DB *dbp;
+ char *real_name;
+ u_int32_t flags;
+ DB_FH *fhp;
+ PAGE *h;
+ int *dirtyp;
+{
+ COMPQUIET(real_name, NULL);
+ COMPQUIET(flags, 0);
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(h, NULL);
+ COMPQUIET(dirtyp, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_31_hashmeta(dbp, real_name, flags, fhp, h, dirtyp)
+ DB *dbp;
+ char *real_name;
+ u_int32_t flags;
+ DB_FH *fhp;
+ PAGE *h;
+ int *dirtyp;
+{
+ COMPQUIET(real_name, NULL);
+ COMPQUIET(flags, 0);
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(h, NULL);
+ COMPQUIET(dirtyp, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_c_count(dbc, recnop)
+ DBC *dbc;
+ db_recno_t *recnop;
+{
+ COMPQUIET(recnop, NULL);
+ return (__db_no_hash_am(dbc->dbp->dbenv));
+}
+
+int
+__ham_c_dup(orig_dbc, new_dbc)
+ DBC *orig_dbc, *new_dbc;
+{
+ COMPQUIET(new_dbc, NULL);
+ return (__db_no_hash_am(orig_dbc->dbp->dbenv));
+}
+
+int
+__ham_c_init(dbc)
+ DBC *dbc;
+{
+ return (__db_no_hash_am(dbc->dbp->dbenv));
+}
+
+void
+__ham_cprint(dbc)
+ DBC *dbc;
+{
+ COMPQUIET(dbc, NULL);
+ return;
+}
+
+int
+__ham_db_close(dbp)
+ DB *dbp;
+{
+ COMPQUIET(dbp, NULL);
+ return (0);
+}
+
+int
+__ham_db_create(dbp)
+ DB *dbp;
+{
+ COMPQUIET(dbp, NULL);
+ return (0);
+}
+
+int
+__ham_init_getpgnos(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__ham_init_print(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__ham_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ HMETA *hmeta;
+ u_int32_t flags;
+ DB *pgset;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(hmeta, NULL);
+ COMPQUIET(flags, 0);
+ COMPQUIET(pgset, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_metachk(dbp, name, hashm)
+ DB *dbp;
+ const char *name;
+ HMETA *hashm;
+{
+ COMPQUIET(name, NULL);
+ COMPQUIET(hashm, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_new_file(dbp, txn, fhp, name)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_FH *fhp;
+ const char *name;
+{
+ COMPQUIET(txn, NULL);
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(name, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_new_subdb(mdbp, dbp, txn)
+ DB *mdbp, *dbp;
+ DB_TXN *txn;
+{
+ COMPQUIET(dbp, NULL);
+ COMPQUIET(txn, NULL);
+ return (__db_no_hash_am(mdbp->dbenv));
+}
+
+int
+__ham_open(dbp, txn, name, base_pgno, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+ db_pgno_t base_pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(txn, NULL);
+ COMPQUIET(name, NULL);
+ COMPQUIET(base_pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_pgin(dbenv, dummydbp, pg, pp, cookie)
+ DB_ENV *dbenv;
+ DB *dummydbp;
+ db_pgno_t pg;
+ void *pp;
+ DBT *cookie;
+{
+ COMPQUIET(dummydbp, NULL);
+ COMPQUIET(pg, 0);
+ COMPQUIET(pp, NULL);
+ COMPQUIET(cookie, NULL);
+ return (__db_no_hash_am(dbenv));
+}
+
+int
+__ham_pgout(dbenv, dummydbp, pg, pp, cookie)
+ DB_ENV *dbenv;
+ DB *dummydbp;
+ db_pgno_t pg;
+ void *pp;
+ DBT *cookie;
+{
+ COMPQUIET(dummydbp, NULL);
+ COMPQUIET(pg, 0);
+ COMPQUIET(pp, NULL);
+ COMPQUIET(cookie, NULL);
+ return (__db_no_hash_am(dbenv));
+}
+
+int
+__ham_quick_delete(dbc)
+ DBC *dbc;
+{
+ return (__db_no_hash_am(dbc->dbp->dbenv));
+}
+
+int
+__ham_reclaim(dbp, txn)
+ DB *dbp;
+ DB_TXN *txn;
+{
+ COMPQUIET(txn, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_salvage(dbp, vdp, pgno, h, handle, callback, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ PAGE *h;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(h, NULL);
+ COMPQUIET(handle, NULL);
+ COMPQUIET(callback, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_stat(dbc, spp, flags)
+ DBC *dbc;
+ void *spp;
+ u_int32_t flags;
+{
+ COMPQUIET(spp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbc->dbp->dbenv));
+}
+
+int
+__ham_truncate(dbc, countp)
+ DBC *dbc;
+ u_int32_t *countp;
+{
+ COMPQUIET(dbc, NULL);
+ COMPQUIET(countp, NULL);
+ return (__db_no_hash_am(dbc->dbp->dbenv));
+}
+
+int
+__ham_vrfy(dbp, vdp, h, pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ PAGE *h;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(h, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_vrfy_hashing(dbp, nentries, m, thisbucket, pgno, flags, hfunc)
+ DB *dbp;
+ u_int32_t nentries;
+ HMETA *m;
+ u_int32_t thisbucket;
+ db_pgno_t pgno;
+ u_int32_t flags;
+ u_int32_t (*hfunc) __P((DB *, const void *, u_int32_t));
+{
+ COMPQUIET(nentries, 0);
+ COMPQUIET(m, NULL);
+ COMPQUIET(thisbucket, 0);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(flags, 0);
+ COMPQUIET(hfunc, NULL);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_vrfy_meta(dbp, vdp, m, pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ HMETA *m;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(m, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbp->dbenv));
+}
+
+int
+__ham_vrfy_structure(dbp, vdp, meta_pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t meta_pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(meta_pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_hash_am(dbp->dbenv));
+}
diff --git a/db/hash/hash_upgrade.c b/db/hash/hash_upgrade.c
index c34381276..875d90f09 100644
--- a/db/hash/hash_upgrade.c
+++ b/db/hash/hash_upgrade.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hash_upgrade.c,v 11.25 2000/12/14 19:18:32 bostic Exp $";
+static const char revid[] = "$Id: hash_upgrade.c,v 11.33 2003/01/08 05:03:56 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,14 +18,13 @@ static const char revid[] = "$Id: hash_upgrade.c,v 11.25 2000/12/14 19:18:32 bos
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "hash.h"
-#include "db_upgrade.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
+#include "dbinc/db_upgrade.h"
/*
* __ham_30_hashmeta --
- * Upgrade the database from version 4/5 to version 6.
+ * Upgrade the database from version 4/5 to version 6.
*
* PUBLIC: int __ham_30_hashmeta __P((DB *, char *, u_int8_t *));
*/
@@ -163,10 +162,6 @@ __ham_30_sizefix(dbp, fhp, realname, metabuf)
return (ret);
if ((ret = __os_write(dbenv, fhp, buf, pagesize, &nw)) != 0)
return (ret);
- if (nw != pagesize) {
- __db_err(dbenv, "Short write during upgrade");
- return (EIO);
- }
}
return (0);
@@ -174,7 +169,7 @@ __ham_30_sizefix(dbp, fhp, realname, metabuf)
/*
* __ham_31_hashmeta --
- * Upgrade the database from version 6 to version 7.
+ * Upgrade the database from version 6 to version 7.
*
* PUBLIC: int __ham_31_hashmeta
* PUBLIC: __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
@@ -229,7 +224,7 @@ __ham_31_hashmeta(dbp, real_name, flags, fhp, h, dirtyp)
/*
* __ham_31_hash --
- * Upgrade the database hash leaf pages.
+ * Upgrade the database hash leaf pages.
*
* PUBLIC: int __ham_31_hash
* PUBLIC: __P((DB *, char *, u_int32_t, DB_FH *, PAGE *, int *));
@@ -252,7 +247,7 @@ __ham_31_hash(dbp, real_name, flags, fhp, h, dirtyp)
ret = 0;
for (indx = 0; indx < NUM_ENT(h); indx += 2) {
- hk = (HKEYDATA *)H_PAIRDATA(h, indx);
+ hk = (HKEYDATA *)H_PAIRDATA(dbp, h, indx);
if (HPAGE_PTYPE(hk) == H_OFFDUP) {
memcpy(&pgno, HOFFDUP_PGNO(hk), sizeof(db_pgno_t));
tpgno = pgno;
diff --git a/db/hash/hash_verify.c b/db/hash/hash_verify.c
index de1b9e9c5..1aa09454b 100644
--- a/db/hash/hash_verify.c
+++ b/db/hash/hash_verify.c
@@ -1,16 +1,16 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: hash_verify.c,v 1.53 2002/08/06 05:35:02 bostic Exp $
+ * $Id: hash_verify.c,v 1.58 2003/06/30 17:20:13 bostic Exp $
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: hash_verify.c,v 1.53 2002/08/06 05:35:02 bostic Exp ";
+static const char revid[] = "$Id: hash_verify.c,v 1.58 2003/06/30 17:20:13 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -21,9 +21,11 @@ static const char revid[] = "Id: hash_verify.c,v 1.53 2002/08/06 05:35:02 bostic
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/db_verify.h"
#include "dbinc/btree.h"
#include "dbinc/hash.h"
+#include "dbinc/mp.h"
static int __ham_dups_unsorted __P((DB *, u_int8_t *, u_int32_t));
static int __ham_vrfy_bucket __P((DB *, VRFY_DBINFO *, HMETA *, u_int32_t,
@@ -376,7 +378,7 @@ __ham_vrfy_item(dbp, vdp, pgno, h, i, flags)
break;
default:
EPRINT((dbp->dbenv,
- "Page %lu: item %i has bad type",
+ "Page %lu: item %lu has bad type",
(u_long)pip->pgno, (u_long)i));
ret = DB_VERIFY_BAD;
break;
@@ -428,7 +430,7 @@ __ham_vrfy_structure(dbp, vdp, meta_pgno, flags)
return (ret);
/* Get the meta page; we'll need it frequently. */
- if ((ret = mpf->get(mpf, &meta_pgno, 0, &m)) != 0)
+ if ((ret = __memp_fget(mpf, &meta_pgno, 0, &m)) != 0)
return (ret);
/* Loop through bucket by bucket. */
@@ -505,9 +507,9 @@ __ham_vrfy_structure(dbp, vdp, meta_pgno, flags)
goto err;
}
-err: if ((t_ret = mpf->put(mpf, m, 0)) != 0)
+err: if ((t_ret = __memp_fput(mpf, m, 0)) != 0)
return (t_ret);
- if (h != NULL && (t_ret = mpf->put(mpf, h, 0)) != 0)
+ if (h != NULL && (t_ret = __memp_fput(mpf, h, 0)) != 0)
return (t_ret);
return ((isbad == 1 && ret == 0) ? DB_VERIFY_BAD: ret);
}
@@ -631,7 +633,8 @@ __ham_vrfy_bucket(dbp, vdp, m, bucket, flags)
ret = __db_vrfy_ccnext(cc, &child))
if (child->type == V_OVERFLOW) {
if ((ret = __db_vrfy_ovfl_structure(dbp, vdp,
- child->pgno, child->tlen, flags)) != 0) {
+ child->pgno, child->tlen,
+ flags | ST_OVFL_LEAF)) != 0) {
if (ret == DB_VERIFY_BAD)
isbad = 1;
else
@@ -741,7 +744,7 @@ __ham_vrfy_hashing(dbp, nentries, m, thisbucket, pgno, flags, hfunc)
memset(&dbt, 0, sizeof(DBT));
F_SET(&dbt, DB_DBT_REALLOC);
- if ((ret = mpf->get(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
for (i = 0; i < nentries; i += 2) {
@@ -771,7 +774,7 @@ __ham_vrfy_hashing(dbp, nentries, m, thisbucket, pgno, flags, hfunc)
err: if (dbt.data != NULL)
__os_ufree(dbp->dbenv, dbt.data);
- if ((t_ret = mpf->put(mpf, h, 0)) != 0)
+ if ((t_ret = __memp_fput(mpf, h, 0)) != 0)
return (t_ret);
return ((ret == 0 && isbad == 1) ? DB_VERIFY_BAD : ret);
@@ -994,7 +997,7 @@ int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
* Safely walk the list of pages in this bucket.
*/
for (;;) {
- if ((ret = mpf->get(mpf, &pgno, 0, &h)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &h)) != 0)
return (ret);
if (TYPE(h) == P_HASH) {
@@ -1003,12 +1006,12 @@ int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
* pgset.
*/
if (++totpgs > vdp->last_pgno) {
- (void)mpf->put(mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
return (DB_VERIFY_BAD);
}
if ((ret =
__db_vrfy_pgset_inc(pgset, pgno)) != 0) {
- (void)mpf->put(mpf, h, 0);
+ (void)__memp_fput(mpf, h, 0);
return (ret);
}
@@ -1016,7 +1019,7 @@ int __ham_meta2pgset(dbp, vdp, hmeta, flags, pgset)
} else
pgno = PGNO_INVALID;
- if ((ret = mpf->put(mpf, h, 0)) != 0)
+ if ((ret = __memp_fput(mpf, h, 0)) != 0)
return (ret);
/* If the new pgno is wonky, go onto the next bucket. */
diff --git a/db/hmac/hmac.c b/db/hmac/hmac.c
index a4ac2bff3..fec91411f 100644
--- a/db/hmac/hmac.c
+++ b/db/hmac/hmac.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
* Some parts of this code originally written by Adam Stubblefield,
@@ -11,7 +11,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: hmac.c,v 1.24 2002/08/06 06:11:30 bostic Exp ";
+static const char revid[] = "$Id: hmac.c,v 1.26 2003/01/08 05:04:43 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -107,7 +107,7 @@ __db_chksum(data, data_len, mac_key, store)
memset(store, 0, sumlen);
if (mac_key == NULL) {
/* Just a hash, no MAC */
- hash4 = __ham_func4(NULL, data, data_len);
+ hash4 = __ham_func4(NULL, data, (u_int32_t)data_len);
memcpy(store, &hash4, sumlen);
} else {
memset(tmp, 0, DB_MAC_KEY);
@@ -196,7 +196,7 @@ __db_check_chksum(dbenv, db_cipher, chksum, data, data_len, is_hmac)
memset(chksum, 0, sum_len);
if (mac_key == NULL) {
/* Just a hash, no MAC */
- hash4 = __ham_func4(NULL, data, data_len);
+ hash4 = __ham_func4(NULL, data, (u_int32_t)data_len);
ret = memcmp((u_int32_t *)old, &hash4, sum_len) ? -1 : 0;
} else {
__db_hmac(mac_key, data, data_len, new);
diff --git a/db/hmac/sha1.c b/db/hmac/sha1.c
index 233f2672c..2f2c806a2 100644
--- a/db/hmac/sha1.c
+++ b/db/hmac/sha1.c
@@ -1,7 +1,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: sha1.c,v 1.13 2002/04/09 13:40:36 sue Exp ";
+static const char revid[] = "$Id: sha1.c,v 1.13 2002/04/09 13:40:36 sue Exp $";
#endif /* not lint */
/*
SHA-1 in C
diff --git a/db/hsearch/hsearch.c b/db/hsearch/hsearch.c
index c2869c4c4..edc9a23aa 100644
--- a/db/hsearch/hsearch.c
+++ b/db/hsearch/hsearch.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -43,7 +43,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: hsearch.c,v 11.5 2000/11/30 00:58:37 ubell Exp $";
+static const char revid[] = "$Id: hsearch.c,v 11.13 2003/01/08 05:05:10 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -58,6 +58,18 @@ static const char revid[] = "$Id: hsearch.c,v 11.5 2000/11/30 00:58:37 ubell Exp
static DB *dbp;
static ENTRY retval;
+/*
+ * Translate HSEARCH calls into DB calls so that DB doesn't step on the
+ * application's name space.
+ *
+ * EXTERN: #if DB_DBM_HSEARCH != 0
+ *
+ * EXTERN: int __db_hcreate __P((size_t));
+ * EXTERN: ENTRY *__db_hsearch __P((ENTRY, ACTION));
+ * EXTERN: void __db_hdestroy __P((void));
+ *
+ * EXTERN: #endif
+ */
int
__db_hcreate(nel)
size_t nel;
@@ -71,9 +83,9 @@ __db_hcreate(nel)
if ((ret = dbp->set_pagesize(dbp, 512)) != 0 ||
(ret = dbp->set_h_ffactor(dbp, 16)) != 0 ||
- (ret = dbp->set_h_nelem(dbp, nel)) != 0 ||
+ (ret = dbp->set_h_nelem(dbp, (u_int32_t)nel)) != 0 ||
(ret = dbp->open(dbp,
- NULL, NULL, DB_HASH, DB_CREATE, __db_omode("rw----"))) != 0)
+ NULL, NULL, NULL, DB_HASH, DB_CREATE, __db_omode("rw----"))) != 0)
__os_set_errno(ret);
/*
@@ -98,12 +110,12 @@ __db_hsearch(item, action)
memset(&key, 0, sizeof(key));
memset(&val, 0, sizeof(val));
key.data = item.key;
- key.size = strlen(item.key) + 1;
+ key.size = (u_int32_t)strlen(item.key) + 1;
switch (action) {
case ENTER:
val.data = item.data;
- val.size = strlen(item.data) + 1;
+ val.size = (u_int32_t)strlen(item.data) + 1;
/*
* Try and add the key to the database. If we fail because
diff --git a/db/java/src/com/sleepycat/bdb/CurrentTransaction.java b/db/java/src/com/sleepycat/bdb/CurrentTransaction.java
new file mode 100644
index 000000000..e3e5fc15c
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/CurrentTransaction.java
@@ -0,0 +1,238 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: CurrentTransaction.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.FileNotFoundException;
+import java.util.WeakHashMap;
+
+/**
+ * Provides access to the current transaction for the current thread within the
+ * context of a Berkeley DB environment. This class provides explicit
+ * transaction control beyond that provided by the {@link TransactionRunner}
+ * class. However, both methods of transaction control manage per-thread
+ * transactions.
+ *
+ * @author Mark Hayes
+ */
+public class CurrentTransaction {
+
+ private DbEnv dbEnv;
+ private ThreadLocal currentTrans = new ThreadLocal();
+
+ /**
+ * Gets the CurrentTransaction accessor for a specified Berkeley DB
+ * environment. This method always returns the same reference when called
+ * more than once with the same environment parameter.
+ *
+ * @param env is an open Berkeley DB environment.
+ *
+ * @return the CurrentTransaction accessor for the given environment, or
+ * null if the environment is not transactional.
+ */
+ public static CurrentTransaction getInstance(DbEnv env) {
+
+ DataEnvironment currentTxn = DataEnvironment.getEnvironment(env);
+ return currentTxn.isTxnMode() ? currentTxn : null;
+ }
+
+ CurrentTransaction(DbEnv dbEnv) {
+
+ this.dbEnv = dbEnv;
+ }
+
+ /**
+ * Returns the underlying Berkeley DB environment.
+ */
+ public final DbEnv getEnv() {
+
+ return dbEnv;
+ }
+
+ /**
+ * Returns whether AUTO_COMMIT will be used for all non-cursor write
+ * operations when no transaction is active.
+ */
+ public final boolean isAutoCommit() {
+
+ try {
+ return (dbEnv.getFlags() & Db.DB_AUTO_COMMIT) != 0;
+ } catch (DbException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Returns whether dirty-read is used for the current transaction.
+ */
+ public final boolean isDirtyRead() {
+
+ Trans trans = (Trans) currentTrans.get();
+ return (trans != null) ? trans.dirtyRead : false;
+ }
+
+ /**
+ * Returns whether no-wait is used for the current transaction.
+ */
+ public final boolean isNoWait() {
+
+ Trans trans = (Trans) currentTrans.get();
+ return (trans != null) ? trans.noWait : false;
+ }
+
+ /**
+ * Returns the transaction associated with the current thread for this
+ * environment, or null if no transaction is active.
+ */
+ public final DbTxn getTxn() {
+
+ Trans trans = (Trans) currentTrans.get();
+ return (trans != null) ? trans.txn : null;
+ }
+
+ /**
+ * Begins a new transaction for this environment and associates it with
+ * the current thread. If a transaction is already active for this
+ * environment and thread, a nested transaction will be created.
+ *
+ * @return the new transaction.
+ *
+ * @throws DbException if the transaction cannot be started, in which case
+ * any existing transaction is not affected.
+ */
+ public final DbTxn beginTxn()
+ throws DbException {
+
+ return beginTxn(false, false);
+ }
+
+ /**
+ * Begins a new transaction for this environment and associates it with
+ * the current thread. If a transaction is already active for this
+ * environment and thread, a nested transaction will be created.
+ *
+ * @param dirtyRead true if this transaction should read data that is
+ * modified by another transaction but not committed.
+ *
+ * @param noWait true if this transaction should throw
+ * DbLockNotGrantedException instead of blocking when trying to access data
+ * that is locked by another transaction.
+ *
+ * @return the new transaction.
+ *
+ * @throws DbException if the transaction cannot be started, in which case
+ * any existing transaction is not affected.
+ */
+ public final DbTxn beginTxn(boolean dirtyRead, boolean noWait)
+ throws DbException {
+
+ int flags = 0;
+ if (dirtyRead) flags |= Db.DB_DIRTY_READ;
+ if (noWait) flags |= Db.DB_TXN_NOWAIT;
+
+ Trans trans = (Trans) currentTrans.get();
+ if (trans != null) {
+ if (trans.txn != null) {
+ DbTxn parentTxn = trans.txn;
+ trans = new Trans(trans, dirtyRead, noWait);
+ trans.txn = dbEnv.txnBegin(parentTxn, flags);
+ currentTrans.set(trans);
+ } else {
+ trans.txn = dbEnv.txnBegin(null, flags);
+ }
+ } else {
+ trans = new Trans(null, dirtyRead, noWait);
+ trans.txn = dbEnv.txnBegin(null, flags);
+ currentTrans.set(trans);
+ }
+ return trans.txn;
+ }
+
+ /**
+ * Commits the transaction that is active for the current thread for this
+ * environment and makes the parent transaction (if any) the current
+ * transaction.
+ *
+ * @return the parent transaction or null if the committed transaction was
+ * not nested.
+ *
+ * @throws DbException if an error occurs commiting the transaction. The
+ * transaction will still be closed and the parent transaction will become
+ * the current transaction.
+ *
+ * @throws IllegalStateException if no transaction is active for the
+ * current thread for this environement.
+ */
+ public final DbTxn commitTxn()
+ throws DbException, IllegalStateException {
+
+ Trans trans = (Trans) currentTrans.get();
+ if (trans != null && trans.txn != null) {
+ DbTxn parent = closeTxn(trans);
+ trans.txn.commit(0);
+ return parent;
+ } else {
+ throw new IllegalStateException("No transaction is active");
+ }
+ }
+
+ /**
+ * Aborts the transaction that is active for the current thread for this
+ * environment and makes the parent transaction (if any) the current
+ * transaction.
+ *
+ * @return the parent transaction or null if the aborted transaction was
+ * not nested.
+ *
+ * @throws DbException if an error occurs aborting the transaction. The
+ * transaction will still be closed and the parent transaction will become
+ * the current transaction.
+ *
+ * @throws IllegalStateException if no transaction is active for the
+ * current thread for this environement.
+ */
+ public final DbTxn abortTxn()
+ throws DbException, IllegalStateException {
+
+ Trans trans = (Trans) currentTrans.get();
+ if (trans != null && trans.txn != null) {
+ DbTxn parent = closeTxn(trans);
+ trans.txn.abort();
+ return parent;
+ } else {
+ throw new IllegalStateException("No transaction is active");
+ }
+ }
+
+ private DbTxn closeTxn(Trans trans) {
+
+ currentTrans.set(trans.parent);
+ return (trans.parent != null) ? trans.parent.txn : null;
+ }
+
+ private static class Trans {
+
+ private DbTxn txn;
+ private Trans parent;
+ private boolean dirtyRead;
+ private boolean noWait;
+
+ private Trans(Trans parent, boolean dirtyRead, boolean noWait) {
+
+ this.parent = parent;
+ this.dirtyRead = dirtyRead;
+ this.noWait = noWait;
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataCursor.java b/db/java/src/com/sleepycat/bdb/DataCursor.java
new file mode 100644
index 000000000..1e254adba
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataCursor.java
@@ -0,0 +1,632 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataCursor.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.Dbt;
+import com.sleepycat.db.DbTxn;
+import java.io.IOException;
+
+/**
+ * (<em>internal</em>) Represents a Berkeley DB cursor and adds support for
+ * indices, bindings and key ranges.
+ *
+ * <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ * deleted in the future. It is public only so it may be used by
+ * subpackages.</p>
+ *
+ * <p>This class operates on a view and takes care of reading and updating
+ * indices, calling bindings, constraining access to a key range, etc.</p>
+ *
+ * @author Mark Hayes
+ */
+public final class DataCursor {
+
+ private Dbc cursor;
+ private DbTxn txn;
+ private DataView view;
+ private DataEnvironment env;
+ private DataDb db;
+ private KeyRange range;
+ private boolean writeAllowed;
+ private boolean dirtyRead;
+ private DataThang keyThang;
+ private DataThang valueThang;
+ private DataThang primaryKeyThang;
+ private DataThang otherThang;
+ private int cursorDbType;
+ private DataCursor[] indexCursorsToClose;
+ private boolean closeDirect;
+ private boolean isJoinCursor;
+
+ /**
+ * Creates a cursor for a given view.
+ *
+ * @param view the database view traversed by the cursor.
+ *
+ * @param writeAllowed whether the cursor can be used for writing.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor(DataView view, boolean writeAllowed)
+ throws DbException, IOException {
+
+ init(view, writeAllowed, null, null);
+ }
+
+ /**
+ * Creates a cursor for a given view and single key range.
+ *
+ * @param view the database view traversed by the cursor.
+ *
+ * @param writeAllowed whether the cursor can be used for writing.
+ *
+ * @param singleKey the single key value.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor(DataView view, boolean writeAllowed, Object singleKey)
+ throws DbException, IOException {
+
+ init(view, writeAllowed, view.subRange(singleKey), null);
+ }
+
+ /**
+ * Creates a cursor for a given view and key range.
+ *
+ * @param view the database view traversed by the cursor.
+ *
+ * @param writeAllowed whether the cursor can be used for writing.
+ *
+ * @param beginKey the lower bound.
+ *
+ * @param beginInclusive whether the lower bound is inclusive.
+ *
+ * @param endKey the upper bound.
+ *
+ * @param endInclusive whether the upper bound is inclusive.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor(DataView view, boolean writeAllowed,
+ Object beginKey, boolean beginInclusive,
+ Object endKey, boolean endInclusive)
+ throws DbException, IOException {
+
+ init(view, writeAllowed,
+ view.subRange(beginKey, beginInclusive, endKey, endInclusive),
+ null);
+ }
+
+ /**
+ * Clones a cursor preserving the current position.
+ *
+ * @param other the cursor to clone.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor(DataCursor other)
+ throws DbException, IOException {
+
+ this.view = other.view;
+ this.env = other.env;
+ this.db = other.db;
+ this.writeAllowed = other.writeAllowed;
+ this.dirtyRead = other.dirtyRead;
+
+ initThangs();
+
+ this.keyThang.copy(other.keyThang);
+ this.valueThang.copy(other.valueThang);
+ if (this.primaryKeyThang != this.keyThang) {
+ this.primaryKeyThang.copy(other.primaryKeyThang);
+ }
+ this.range = other.range;
+
+ this.cursor = db.dupCursor(other.cursor, writeAllowed, Db.DB_POSITION);
+
+ this.txn = other.txn;
+ this.closeDirect = false;
+ }
+
+ DataCursor(DataView view, DataCursor[] indexCursors,
+ boolean presorted, boolean closeIndexCursors)
+ throws DbException, IOException {
+
+ this.isJoinCursor = true;
+
+ if (view.index != null) {
+ throw new IllegalArgumentException(
+ "Primary view in join must not be indexed");
+ }
+ Dbc[] cursors = new Dbc[indexCursors.length];
+ for (int i = 0; i < cursors.length; i += 1) {
+ DataIndex index = indexCursors[i].view.index;
+ if (index == null || index.store != view.store) {
+ throw new IllegalArgumentException(
+ "Join cursor for view " + index +
+ " is not indexed on primary store " + view.store);
+ }
+ cursors[i] = indexCursors[i].cursor;
+ }
+ Dbc joinCursor = view.store.db.db.join(cursors,
+ presorted ? Db.DB_JOIN_NOSORT : 0);
+ init(view, false, null, joinCursor);
+ if (closeIndexCursors) {
+ this.indexCursorsToClose = indexCursors;
+ }
+ }
+
+ private void init(DataView view, boolean writeAllowed, KeyRange range,
+ Dbc cursor)
+ throws DbException, IOException {
+
+ this.view = view;
+ this.env = view.store.db.env;
+ this.range = (range != null) ? range : new KeyRange(view.range);
+ this.writeAllowed = writeAllowed && view.isWriteAllowed();
+ this.dirtyRead = view.dirtyRead;
+
+ initThangs();
+
+ if (view.index != null) {
+ this.db = view.index.db;
+ } else {
+ this.db = view.store.db;
+ }
+ this.cursorDbType = this.db.db.getDbType();
+
+ if (cursor != null) {
+ this.cursor = cursor;
+ this.closeDirect = true;
+ } else {
+ this.cursor = this.db.openCursor(this.writeAllowed);
+ this.closeDirect = false;
+ }
+ }
+
+ private void initThangs()
+ throws DbException, IOException {
+
+ this.keyThang = new DataThang();
+ this.primaryKeyThang = (view.index != null)
+ ? (new DataThang()) : keyThang;
+ this.valueThang = new DataThang();
+ }
+
+ /**
+ * Closes a cursor.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public void close()
+ throws DbException, IOException {
+
+ if (cursor != null) {
+ Dbc toClose = cursor;
+ cursor = null;
+ if (closeDirect) {
+ toClose.close();
+ } else {
+ db.closeCursor(toClose);
+ }
+ }
+ if (indexCursorsToClose != null) {
+ DataCursor[] toClose = indexCursorsToClose;
+ indexCursorsToClose = null;
+ for (int i = 0; i < toClose.length; i += 1) {
+ toClose[i].close();
+ }
+ }
+ }
+
+ /**
+ * Returns the view for this cursor, as specified to the constructor.
+ *
+ * @return the view.
+ */
+ public DataView getView() {
+
+ return view;
+ }
+
+ KeyRange getRange() {
+
+ return range;
+ }
+
+ /**
+ * Returns whether write is allowed for this cursor, as specified to the
+ * constructor.
+ *
+ * @return whether write is allowed.
+ */
+ public boolean isWriteAllowed() {
+
+ return writeAllowed;
+ }
+
+ /**
+ * Returns the key object for the last record read.
+ *
+ * @return the current key object.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public Object getCurrentKey()
+ throws DbException, IOException {
+
+ if (view.keyBinding == null) {
+ throw new UnsupportedOperationException(
+ "getCurrentKey requires keyBinding");
+ }
+ return view.makeKey(keyThang);
+ }
+
+ /**
+ * Returns the value object for the last record read.
+ *
+ * @return the current value object.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public Object getCurrentValue()
+ throws DbException, IOException {
+
+ return view.makeValue(primaryKeyThang, valueThang);
+ }
+
+ /**
+ * Returns whether record number access is allowed.
+ *
+ * @return whether record number access is allowed.
+ */
+ public boolean hasRecNumAccess() {
+
+ return db.hasRecNumAccess();
+ }
+
+ /**
+ * Returns the record number for the last record read.
+ *
+ * @return the last read record number.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int getCurrentRecordNumber()
+ throws DbException, IOException {
+
+ if (cursorDbType == Db.DB_BTREE) {
+ if (otherThang == null) {
+ otherThang = new DataThang();
+ }
+ Dbt discardThang = DataThang.getDiscardDataThang();
+ cursor.get(discardThang, otherThang, Db.DB_GET_RECNO);
+ return otherThang.get_recno_key_data();
+ } else {
+ // Assume QUEUE or RECNO database.
+ return keyThang.get_recno_key_data();
+ }
+ }
+
+ /**
+ * Perform a database 'get' using the given key and value.
+ *
+ * @param key the key or null if none is required by the flag.
+ *
+ * @param value the value or null if none is required by the flag.
+ *
+ * @param flag a single flag value appropriate for cursor get.
+ *
+ * @param lockForWrite whether to set the RMW flag.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int get(Object key, Object value, int flag, boolean lockForWrite)
+ throws DbException, IOException {
+
+ int err = 0;
+ if (view.btreeRecNumAccess && flag == Db.DB_SET) {
+ flag = Db.DB_SET_RECNO;
+ }
+ int indexCursorFlag = flag;
+ int indexPrimaryFlag = 0;
+ if (flag == Db.DB_GET_BOTH) {
+ view.useValue(value, valueThang, null);
+ err = view.useKey(key, value, keyThang, range);
+ indexCursorFlag = Db.DB_SET;
+ indexPrimaryFlag = flag;
+ } else if (flag == Db.DB_SET || flag == Db.DB_SET_RANGE ||
+ flag == Db.DB_SET_RECNO) {
+ err = view.useKey(key, value, keyThang, range);
+ } else if (flag == Db.DB_GET_RECNO || flag == Db.DB_JOIN_ITEM) {
+ throw new IllegalArgumentException("flag not supported: " + flag);
+ } else {
+ // NEXT,PREV,NEXT_DUP,NEXT_NODUP,PREV_NODUP,CURRENT,FIRST,LAST
+ if (key != null || value != null) {
+ throw new IllegalArgumentException(
+ "key and value must be null");
+ }
+ }
+ if (err == 0) {
+ err = lowLevelGet(flag, indexCursorFlag, indexPrimaryFlag,
+ lockForWrite);
+ }
+ return err;
+ }
+
+ /**
+ * Find the given value, using DB_GET_BOTH if possible, or a sequential
+ * search otherwise.
+ *
+ * @param value the value to search for among duplicates at the current
+ * position.
+ *
+ * @param findFirst whether to find the first or last value.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int find(Object value, boolean findFirst)
+ throws DbException, IOException {
+
+ if (isJoinCursor) throw new UnsupportedOperationException();
+ view.useValue(value, valueThang, null);
+ int err;
+ if (view.entityBinding != null && view.index == null &&
+ (findFirst || !view.areDuplicatesAllowed())) {
+ err = view.useKey(null, value, keyThang, range);
+ if (err == 0) {
+ err = lowLevelGet(Db.DB_GET_BOTH, Db.DB_SET,
+ Db.DB_GET_BOTH, false);
+ }
+ } else {
+ if (otherThang == null) {
+ otherThang = new DataThang();
+ }
+ otherThang.copy(valueThang);
+ int flag = (findFirst ? Db.DB_FIRST : Db.DB_LAST);
+ err = 0;
+ while (err == 0) {
+ err = get(null, null, flag, false);
+ if (err == 0 && valueThang.compareTo(otherThang) == 0) {
+ break;
+ } else {
+ flag = (findFirst ? Db.DB_NEXT : Db.DB_PREV);
+ }
+ }
+ }
+ return err;
+ }
+
+ /**
+ * Return the number of duplicates for the current key.
+ *
+ * @return the number of duplicates.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int count()
+ throws DbException, IOException {
+
+ if (isJoinCursor) throw new UnsupportedOperationException();
+ return cursor.count(0);
+ }
+
+ /**
+ * Perform an arbitrary database 'put' operation, optionally returning
+ * the previous value.
+ *
+ * @param key the key to put.
+ *
+ * @param value the value to put.
+ *
+ * @param flag a single flag value appropriate for cursor put.
+ *
+ * @param oldValue holds the old value, or null if the old value should
+ * not be returned.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int put(Object key, Object value, int flag, Object[] oldValue)
+ throws DbException, IOException {
+
+ return put(key, value, flag, oldValue, false);
+ }
+
+ /**
+ * Perform an arbitrary database 'put' operation, optionally using the
+ * current key instead of the key parameter.
+ *
+ * @param key the key to put.
+ *
+ * @param value the value to put.
+ *
+ * @param flag a single flag value appropriate for cursor put.
+ *
+ * @param oldValue holds the old value, or null if the old value should
+ * not be returned.
+ *
+ * @param useCurrentKey is true to use the current key rather than the
+ * key parameter.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int put(Object key, Object value, int flag, Object[] oldValue,
+ boolean useCurrentKey)
+ throws DbException, IOException {
+
+ if (isJoinCursor) throw new UnsupportedOperationException();
+ if (view.index != null) {
+ throw new UnsupportedOperationException(
+ "put with index not allowed");
+ }
+ boolean doUpdate = false; // update vs insert
+ int err = 0;
+ if (flag == Db.DB_CURRENT) {
+ doUpdate = true;
+ } else if (flag == Db.DB_AFTER || flag == Db.DB_BEFORE) {
+ // Do nothing.
+ } else {
+ if (!useCurrentKey) {
+ err = view.useKey(key, value, keyThang, range);
+ if (err != 0) {
+ throw new IllegalArgumentException("key out of range");
+ }
+ }
+ if (flag == 0) {
+ flag = view.areDuplicatesOrdered() ? Db.DB_NODUPDATA
+ : Db.DB_KEYFIRST;
+ }
+ if (flag == Db.DB_KEYFIRST || flag == Db.DB_KEYLAST) {
+ if (!view.areDuplicatesAllowed()) {
+ err = lowLevelGet(Db.DB_SET, 0, 0, true);
+ if (err == 0) {
+ doUpdate = true;
+ }
+ }
+ } else if (flag != Db.DB_NODUPDATA) {
+ throw new IllegalArgumentException("flag unknown: " + flag);
+ }
+ }
+ DataThang oldValueThang;
+ if (doUpdate) {
+ if (oldValue != null) {
+ oldValue[0] = getCurrentValue();
+ }
+ if (otherThang == null) {
+ otherThang = new DataThang();
+ }
+ otherThang.copy(valueThang);
+ oldValueThang = otherThang;
+ } else {
+ if (oldValue != null) {
+ oldValue[0] = null;
+ }
+ oldValueThang = null;
+ }
+ DataThang checkKeyThang = (flag == Db.DB_AFTER) ? null : keyThang;
+ view.useValue(value, valueThang, checkKeyThang);
+ err = db.put(cursor, keyThang, valueThang, flag);
+ if (err == 0) {
+ view.store.applyChange(primaryKeyThang, oldValueThang, valueThang);
+ }
+ return err;
+ }
+
+ /**
+ * Perform an arbitrary database 'delete' operation.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int delete()
+ throws DbException, IOException {
+
+ if (isJoinCursor || !writeAllowed) {
+ throw new UnsupportedOperationException();
+ }
+ int err;
+ if (view.index != null) {
+ err = view.store.db.delete(primaryKeyThang, 0);
+ } else {
+ err = cursor.delete(0);
+ }
+ if (err == 0) {
+ view.store.applyChange(primaryKeyThang, valueThang, null);
+ }
+ return err;
+ }
+
+ private int lowLevelGet(int flag, int indexCursorFlag,
+ int indexPrimaryFlag, boolean lockForWrite)
+ throws DbException {
+
+ int err;
+ int otherFlags = 0;
+ if (dirtyRead)
+ otherFlags |= Db.DB_DIRTY_READ;
+ // Don't use RMW with dirty-read, since RWM may cause blocking
+ if (lockForWrite && !dirtyRead && !env.isDirtyRead())
+ otherFlags |= env.getWriteLockFlag();
+
+ // Always clear the cached data formations to prevent inconsistencies.
+ keyThang.clearDataFormation();
+ primaryKeyThang.clearDataFormation();
+ valueThang.clearDataFormation();
+
+ if (view.index != null) {
+ if (isJoinCursor) throw new UnsupportedOperationException();
+ if (view.btreeRecNumAccess && indexCursorFlag == Db.DB_SET) {
+ indexCursorFlag = Db.DB_SET_RECNO;
+ }
+ err = range.get(db, cursor, keyThang, primaryKeyThang,
+ indexCursorFlag | otherFlags);
+ if (err == 0) {
+ err = view.store.db.get(primaryKeyThang, valueThang,
+ indexPrimaryFlag | otherFlags);
+ }
+ } else {
+ if (isJoinCursor) {
+ if (flag != Db.DB_FIRST &&
+ flag != Db.DB_NEXT &&
+ flag != Db.DB_NEXT_NODUP) {
+ throw new UnsupportedOperationException();
+ }
+ flag = 0;
+ otherFlags = 0;
+ }
+ if (view.btreeRecNumAccess && flag == Db.DB_SET) {
+ flag = Db.DB_SET_RECNO;
+ }
+ err = range.get(db, cursor, keyThang, valueThang,
+ flag | otherFlags);
+ }
+ return err;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataDb.java b/db/java/src/com/sleepycat/bdb/DataDb.java
new file mode 100644
index 000000000..6e0c5b319
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataDb.java
@@ -0,0 +1,548 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataDb.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.Dbt;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * (<em>internal</em>) Wraps a Berkeley DB database (Db) object and adds
+ * normalization of certain flags and environment modes.
+ *
+ * <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ * deleted in the future. It is public only so it may be used by
+ * subpackages.</p>
+ *
+ * @author Mark Hayes
+ */
+public class DataDb {
+
+ public static final int ENOMEM = 12; // from errorno.h
+ public static final int EINVAL = 22; // from errorno.h
+
+ public static final int FLAGS_POS_MASK = 0xff; // flags position
+ public static final int FLAGS_MOD_MASK = ~FLAGS_POS_MASK; // and modifiers
+
+ DataEnvironment env;
+ Db db;
+ int type;
+ boolean ordered;
+ private ThreadLocal cdbContext;
+ private String file;
+ private String database;
+ boolean recNumAccess;
+ boolean keysRenumbered;
+ boolean dupsAllowed;
+ boolean dupsOrdered;
+ boolean transactional;
+ boolean dirtyReadAllowed;
+
+ /**
+ * Creates a database wrapper.
+ *
+ * @param db is the underlying database.
+ */
+ public DataDb(Db db) {
+
+ try {
+ this.env = DataEnvironment.getEnvironment(db.getDbEnv());
+ this.file = db.getFileName();
+ this.database = db.getDatabaseName();
+ this.db = db;
+ this.type = db.getDbType();
+ this.ordered = (type == Db.DB_BTREE || type == Db.DB_QUEUE ||
+ type == Db.DB_RECNO);
+ this.recNumAccess = (type != Db.DB_HASH &&
+ (type != Db.DB_BTREE ||
+ (db.getFlags() & Db.DB_RECNUM) != 0));
+ this.keysRenumbered = (type == Db.DB_RECNO &&
+ (db.getFlags() & Db.DB_RENUMBER) != 0);
+ this.dupsOrdered = (db.getFlags() & Db.DB_DUPSORT) != 0;
+ this.dupsAllowed = (this.dupsOrdered ||
+ ((db.getFlags() & Db.DB_DUP) != 0));
+ this.dirtyReadAllowed = (db.getOpenFlags() & Db.DB_DIRTY_READ) != 0;
+ this.transactional = env.isTxnMode() && db.isTransactional();
+ if (env.isCdbMode()) {
+ this.cdbContext = new ThreadLocal();
+ this.cdbContext.set(new CdbThreadContext(this));
+ }
+ } catch (DbException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Closes the database.
+ */
+ public void close()
+ throws DbException {
+
+ db.close(0);
+ }
+
+ /**
+ * Returns the environment.
+ *
+ * @return the environment.
+ */
+ public final DataEnvironment getEnv() {
+
+ return env;
+ }
+
+ /**
+ * Returns the underlying database.
+ *
+ * @return the underlying database.
+ */
+ public final Db getDb() {
+
+ return db;
+ }
+
+ /**
+ * Returns whether keys are ordered for the database.
+ *
+ * @return whether keys are ordered.
+ */
+ public final boolean isOrdered() {
+
+ return ordered;
+ }
+
+ /**
+ * Returns whether duplicates are allowed for the database.
+ *
+ * @return whether duplicates are allowed.
+ */
+ public final boolean areDuplicatesAllowed() {
+
+ return dupsAllowed;
+ }
+
+ /**
+ * Returns whether duplicates are ordered for the database.
+ *
+ * @return whether duplicates are ordered.
+ */
+ public final boolean areDuplicatesOrdered() {
+
+ return dupsOrdered;
+ }
+
+ /**
+ * Returns whether keys (record numbers) are renumbered for the database.
+ *
+ * @return whether keys are renumbered.
+ */
+ public final boolean areKeysRenumbered() {
+
+ return keysRenumbered;
+ }
+
+ /**
+ * Returns whether record number access is allowed.
+ *
+ * @return whether record number access is allowed.
+ */
+ public final boolean hasRecNumAccess() {
+
+ return recNumAccess;
+ }
+
+ /**
+ * Returns whether the database was opened in a transaction and therefore
+ * must be written in a transaction.
+ *
+ * @return whether the database is transactional.
+ */
+ public final boolean isTransactional() {
+
+ return transactional;
+ }
+
+ /**
+ * Returns whether dirty-read is allowed for the database.
+ *
+ * @return whether dirty-read is allowed.
+ */
+ public final boolean isDirtyReadAllowed() {
+
+ return dirtyReadAllowed;
+ }
+
+ /**
+ * Performs a general database 'get' operation.
+ *
+ * @param key the key thang.
+ *
+ * @param data the data thang.
+ *
+ * @param flags the low-level get flags.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public int get(DataThang key, DataThang data, int flags)
+ throws DbException {
+
+ int pos = flags & DataDb.FLAGS_POS_MASK;
+ if (cdbContext != null) {
+ Dbc cursor = openCursor(flags == Db.DB_CONSUME ||
+ flags == Db.DB_CONSUME_WAIT);
+ try {
+ if (pos == 0)
+ flags |= Db.DB_SET;
+ return get(cursor, key, data, flags);
+ } finally {
+ closeCursor(cursor);
+ }
+ } else {
+ if (isRecnoKeyNonPositive(pos, key))
+ return Db.DB_NOTFOUND;
+ return db.get(currentTxn(), key, data, flags);
+ }
+ }
+
+ /**
+ * Performs a general database 'get' operation via a cursor.
+ *
+ * @param cursor the cursor to read.
+ *
+ * @param key the key thang.
+ *
+ * @param val the data thang.
+ *
+ * @param flags the low-level get flags.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public int get(Dbc cursor, DataThang key, DataThang val, int flags)
+ throws DbException {
+
+ int pos = flags & DataDb.FLAGS_POS_MASK;
+ if (isRecnoKeyNonPositive(pos, key))
+ return Db.DB_NOTFOUND;
+ int err = cursor.get(key, val, flags);
+ return err;
+ }
+
+ private boolean isRecnoKeyNonPositive(int pos, DataThang key) {
+
+ if ((pos == Db.DB_SET_RECNO) ||
+ ((type == Db.DB_RECNO ||
+ type == Db.DB_QUEUE) &&
+ (pos == Db.DB_SET ||
+ pos == Db.DB_SET_RANGE ||
+ pos == Db.DB_GET_BOTH))) {
+ if (key.get_recno_key_data() <= 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Performs a general database 'put' operation.
+ *
+ * @param key the key to put.
+ *
+ * @param data the data to put.
+ *
+ * @param flags the low-level put flags.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public int put(DataThang key, DataThang data, int flags)
+ throws DbException {
+
+ // Dbc.put() cannot be used with QUEUE/RECNO types
+ if (cdbContext != null && (type == Db.DB_HASH ||
+ type == Db.DB_BTREE)) {
+ Dbc cursor = openCursor(true);
+ try {
+ int pos = flags & DataDb.FLAGS_POS_MASK;
+ if (pos == Db.DB_NODUPDATA && !areDuplicatesOrdered()) {
+ if (areDuplicatesAllowed()) {
+ int err = get(cursor, key, data, Db.DB_GET_BOTH);
+ if (err == 0) return Db.DB_KEYEXIST;
+ pos = 0;
+ } else {
+ pos = Db.DB_NOOVERWRITE;
+ }
+ flags = pos | (flags & DataDb.FLAGS_MOD_MASK);
+ }
+ return put(cursor, key, data, flags);
+ } finally {
+ closeCursor(cursor);
+ }
+ } else {
+ if (cdbContext != null) { // QUEUE/RECNO
+ CdbThreadContext context = (CdbThreadContext) cdbContext.get();
+ if (context.writeCursors.size() > 0 ||
+ context.readCursors.size() > 0) {
+ throw new IllegalStateException(
+ "cannot put() with CDB write cursor open");
+ }
+ }
+ int pos = flags & DataDb.FLAGS_POS_MASK;
+ if (pos == Db.DB_NODUPDATA && !areDuplicatesOrdered()) {
+ if (areDuplicatesAllowed()) {
+ int err = get(key, data, Db.DB_GET_BOTH);
+ if (err == 0) return Db.DB_KEYEXIST;
+ pos = 0;
+ } else {
+ pos = Db.DB_NOOVERWRITE;
+ }
+ flags = pos | (flags & DataDb.FLAGS_MOD_MASK);
+ }
+ DbTxn txn = currentTxn();
+ if (txn != null || !transactional)
+ flags &= ~Db.DB_AUTO_COMMIT;
+ int err = db.put(txn, key, data, flags);
+ return err;
+ }
+ }
+
+ /**
+ * Performs a general database 'put' operation via a cursor.
+ * This method works for HASH/BTREE types and all flags, or with all types
+ * and DB_CURRENT only.
+ *
+ * @param cursor the cursor to write.
+ *
+ * @param key the key to put.
+ *
+ * @param data the data to put.
+ *
+ * @param flags the low-level put flags.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public int put(Dbc cursor, DataThang key, DataThang data, int flags)
+ throws DbException {
+
+ if (flags == Db.DB_CURRENT && areDuplicatesOrdered()) {
+ // Workaround for two Db issues: 1- with HASH type a put() with
+ // different data is allowed, contrary to docs, 2- with non-HASH
+ // types an erroror is printed to standard out.
+ DataThang temp = new DataThang();
+ cursor.get(key, temp, flags);
+ if (data.equals(temp)) {
+ return 0; // nothing to do, data is already as specified
+ } else {
+ throw new IllegalArgumentException(
+ "Current data differs from put data with sorted duplicates");
+ }
+ }
+ if (flags == Db.DB_NOOVERWRITE) {
+ int err = cursor.get(key, DataThang.getDiscardDataThang(),
+ Db.DB_SET | env.getWriteLockFlag());
+ if (err == 0) {
+ return Db.DB_KEYEXIST;
+ } else if (err != Db.DB_NOTFOUND) {
+ return err;
+ }
+ flags = 0;
+ }
+ if (flags == 0) {
+ if (areDuplicatesOrdered()) {
+ flags = Db.DB_NODUPDATA;
+ } else {
+ flags = Db.DB_KEYLAST;
+ }
+ }
+ int err = cursor.put(key, data, flags);
+ return err;
+ }
+
+ /**
+ * Performs a general database 'delete' operation.
+ *
+ * @param key the key to delete.
+ *
+ * @param flags the low-level delete flags.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public int delete(DataThang key, int flags)
+ throws DbException {
+
+ Dbc cursor = openCursor(true);
+ try {
+ int err = cursor.get(key, DataThang.getDiscardDataThang(),
+ Db.DB_SET | env.getWriteLockFlag());
+ if (err == 0) {
+ return cursor.delete(0);
+ } else {
+ return err;
+ }
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ /**
+ * Opens a cursor for this database.
+ *
+ * @param writeCursor true to open a write cursor in a CDB environment, and
+ * ignored for other environments.
+ *
+ * @return the open cursor.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public Dbc openCursor(boolean writeCursor)
+ throws DbException {
+
+ if (cdbContext != null) {
+ CdbThreadContext context = (CdbThreadContext) cdbContext.get();
+ List cursors;
+ int flags;
+
+ if (writeCursor) {
+ cursors = context.writeCursors;
+ flags = Db.DB_WRITECURSOR;
+
+ if (context.readCursors.size() > 0) {
+ // although CDB allows opening a write cursor when a read
+ // cursor is open, a self-deadlock will occur if a write is
+ // attempted for a record that is read-locked; we should
+ // avoid self-deadlocks at all costs
+ throw new IllegalStateException(
+ "cannot open CDB write cursor when read cursor is open");
+ }
+ } else {
+ cursors = context.readCursors;
+ flags = 0;
+ }
+
+ Dbc cursor;
+ if (cursors.size() > 0) {
+ Dbc other = ((Dbc) cursors.get(0));
+ cursor = other.dup(0);
+ } else {
+ cursor = db.cursor(null, flags);
+ }
+ cursors.add(cursor);
+ return cursor;
+ } else {
+ return db.cursor(currentTxn(), 0);
+ }
+ }
+
+ /**
+ * Duplicates a cursor for this database.
+ *
+ * @param writeCursor true to open a write cursor in a CDB environment, and
+ * ignored for other environments.
+ *
+ * @param flags the low-level dup() flags.
+ *
+ * @return the open cursor.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public Dbc dupCursor(Dbc cursor, boolean writeCursor, int flags)
+ throws DbException {
+
+ if (cdbContext != null) {
+ CdbThreadContext context = (CdbThreadContext) cdbContext.get();
+ List cursors = writeCursor ? context.writeCursors
+ : context.readCursors;
+ if (!cursors.contains(cursor))
+ throw new IllegalStateException("cursor to dup not tracked");
+ Dbc newCursor = cursor.dup(flags);
+ cursors.add(newCursor);
+ return newCursor;
+ } else {
+ return cursor.dup(flags);
+ }
+ }
+
+ /**
+ * Closes a cursor for this database.
+ *
+ * @param cursor the cursor to close.
+ *
+ * @throws DbException if a database problem occurs.
+ */
+ public void closeCursor(Dbc cursor)
+ throws DbException {
+
+ if (cursor == null) return;
+
+ if (cdbContext != null) {
+ CdbThreadContext context = (CdbThreadContext) cdbContext.get();
+
+ if (!context.readCursors.remove(cursor) &&
+ !context.writeCursors.remove(cursor)) {
+ throw new IllegalStateException(
+ "closing CDB cursor that was not known to be open");
+ }
+ }
+
+ cursor.close();
+ }
+
+ private final DbTxn currentTxn() {
+
+ return transactional ? env.getTxn() : null;
+ }
+
+ /**
+ * Returns a debugging string containing the database name.
+ *
+ * @return a debugging string.
+ */
+ public String toString() {
+
+ String val = file;
+ if (database != null) file += ' ' + database;
+ return toString(this, val);
+ }
+
+ static String toString(Object o, String val) {
+
+ String cls = null;
+ if (o != null) {
+ cls = o.getClass().getName();
+ int i = cls.lastIndexOf('.');
+ if (i >= 0) cls = cls.substring(i + 1);
+ }
+ return "[" + cls + ' ' + val + ']';
+ }
+
+ private static final class CdbThreadContext {
+
+ private DataDb db;
+ private List writeCursors = new ArrayList();
+ private List readCursors = new ArrayList();
+
+ CdbThreadContext(DataDb db) {
+ this.db = db;
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataEnvironment.java b/db/java/src/com/sleepycat/bdb/DataEnvironment.java
new file mode 100644
index 000000000..5e252a548
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataEnvironment.java
@@ -0,0 +1,98 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataEnvironment.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.FileNotFoundException;
+import java.util.WeakHashMap;
+
+/**
+ * The internal parent class of CurrentTransaction which also contains methods
+ * for non-transactional environments. Unlike {@link
+ * CurrentTransaction#getInstance}, {@link #getEnvironment} never returns null
+ * and is used by other classes in this package to return info for all types of
+ * environments.
+ *
+ * @author Mark Hayes
+ */
+class DataEnvironment extends CurrentTransaction {
+
+ private static WeakHashMap envMap = new WeakHashMap();
+
+ private int writeLockFlag;
+ private boolean cdbMode;
+ private boolean txnMode;
+ private ThreadLocal currentTrans = new ThreadLocal();
+
+ /**
+ * Gets the DataEnvironment accessor for a specified Berkeley DB
+ * environment.
+ *
+ * @param env is an open Berkeley DB environment.
+ *
+ * @param envFlags are the flags that were passed to env.open().
+ */
+ public static DataEnvironment getEnvironment(DbEnv env) {
+
+ synchronized (envMap) {
+ DataEnvironment myEnv =
+ (DataEnvironment) envMap.get(env);
+ if (myEnv == null) {
+ myEnv = new DataEnvironment(env);
+ envMap.put(env, myEnv);
+ }
+ return myEnv;
+ }
+ }
+
+ private DataEnvironment(DbEnv dbEnv) {
+
+ super(dbEnv);
+ try {
+ this.txnMode = (dbEnv.getOpenFlags() & Db.DB_INIT_TXN) != 0;
+ if (this.txnMode || ((dbEnv.getOpenFlags() & Db.DB_INIT_LOCK) != 0))
+ this.writeLockFlag = Db.DB_RMW;
+ this.cdbMode = (dbEnv.getOpenFlags() & Db.DB_INIT_CDB) != 0;
+ } catch (DbException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Returns whether this is a transactional environement.
+ */
+ public final boolean isTxnMode() {
+
+ return txnMode;
+ }
+
+ /**
+ * Returns whether this is a Concurrent Data Store environement.
+ */
+ public final boolean isCdbMode() {
+
+ return cdbMode;
+ }
+
+ /**
+ * Return the Db.DB_RMW flag or zero, depending on whether locking is
+ * enabled. Db.DB_RMW will cause an error if passed when locking is not
+ * enabled. Locking is enabled if Db.DB_INIT_LOCK or Db.DB_INIT_TXN were
+ * specified for this environment.
+ */
+ public final int getWriteLockFlag() {
+
+ return writeLockFlag;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataIndex.java b/db/java/src/com/sleepycat/bdb/DataIndex.java
new file mode 100644
index 000000000..e379771ad
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataIndex.java
@@ -0,0 +1,215 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataIndex.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * Represents a Berkeley DB secondary index. An index is always attached to a
+ * single {@link DataStore} when it is constructed. An index is typically
+ * accessed by passing it to the constructor of one of the collection classes
+ * in the {@link com.sleepycat.bdb.collection} package. For example:
+
+ * <pre>
+ * Db db = new Db(env, 0);
+ * db.setFlags(Db.DB_DUPSORT);
+ * db.open(null, "index.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ * DataIndex index = new DataIndex(store, db, keyFormat, keyExtractor);
+ * StoredMap map = new StoredMap(index, keyBinding, valueBinding, writeAllowed);
+ * </pre>
+ *
+ * <p>All access methods may be used with BDB. However, some access methods
+ * may only be used with certain types of collection views, and some access
+ * methods impose restrictions on the way collection views are used.</p>
+ *
+ * @author Mark Hayes
+ */
+public class DataIndex {
+
+ DataDb db;
+ DataStore store;
+ DataFormat keyFormat;
+ KeyExtractor keyExtractor;
+
+ /**
+ * Creates an index from a previously opened Db object.
+ *
+ * @param store the store to be indexed and also specifies the
+ * environment that was used to create the Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param keyFormat the data format for keys.
+ *
+ * @param keyExtractor an object for extracting the index key from primary
+ * key and/or value buffers, and for clearing the index key in a value
+ * buffer.
+ *
+ * @throws IllegalArgumentException if a format mismatch is detected
+ * between the index and the store, or if unsorted duplicates were
+ * specified for the index Db.
+ */
+ public DataIndex(DataStore store, Db db,
+ DataFormat keyFormat, KeyExtractor keyExtractor) {
+
+ this.store = store;
+ this.keyFormat = keyFormat;
+ this.keyExtractor = keyExtractor;
+
+ this.db = new DataDb(db);
+
+ if (store.db.isTransactional() != this.db.isTransactional()) {
+ throw new IllegalArgumentException(
+ this.db + " and " + store.db +
+ " must must both be transactional or non-transactional");
+ }
+
+ if (this.db.areDuplicatesAllowed() &&
+ !this.db.areDuplicatesOrdered()) {
+ throw new IllegalArgumentException(
+ this.db + " must use sorted duplicates for index");
+ }
+ if (!keyFormat.equals(keyExtractor.getIndexKeyFormat())) {
+ throw new IllegalArgumentException(
+ this.db + " extractor index key format mismatch");
+ }
+ if (keyExtractor.getPrimaryKeyFormat() != null &&
+ !store.keyFormat.equals(keyExtractor.getPrimaryKeyFormat())) {
+ throw new IllegalArgumentException(
+ this.db + " extractor primary key format mismatch");
+ }
+ if (keyExtractor.getValueFormat() != null &&
+ !store.valueFormat.equals(keyExtractor.getValueFormat())) {
+ throw new IllegalArgumentException(
+ this.db + " extractor value format mismatch");
+ }
+
+ if (keyFormat instanceof RecordNumberFormat &&
+ !this.db.hasRecNumAccess()) {
+ throw new IllegalArgumentException(
+ this.db + " RecordNumberFormat is only allowed when the" +
+ " access method has record number keys");
+ }
+
+ store.addIndex(this);
+ }
+
+ /**
+ * Returns the store associated with this index.
+ */
+ public final DataStore getStore() {
+
+ return store;
+ }
+
+ /**
+ * Returns the key format associated with this index.
+ */
+ public final DataFormat getKeyFormat() {
+
+ return keyFormat;
+ }
+
+ /**
+ * Returns the key extractor associated with this index.
+ */
+ public final KeyExtractor getKeyExtractor() {
+
+ return keyExtractor;
+ }
+
+ /**
+ * Returns a printable string identifying the file and database name
+ * of the index.
+ */
+ public String toString() {
+
+ return db.toString();
+ }
+
+ void applyChange(DataThang keyThang,
+ DataThang oldValueThang,
+ DataThang newValueThang)
+ throws DbException, IOException {
+
+ DataThang oldIndexKey = null;
+ if (oldValueThang != null) {
+ oldIndexKey = new DataThang();
+ keyExtractor.extractIndexKey(
+ (keyExtractor.getPrimaryKeyFormat() != null)
+ ? keyThang : null,
+ (keyExtractor.getValueFormat() != null)
+ ? oldValueThang : null,
+ oldIndexKey);
+ if (oldIndexKey.getDataLength() == 0) oldIndexKey = null;
+ }
+ DataThang newIndexKey = null;
+ if (newValueThang != null) {
+ newIndexKey = new DataThang();
+ keyExtractor.extractIndexKey(
+ (keyExtractor.getPrimaryKeyFormat() != null)
+ ? keyThang : null,
+ (keyExtractor.getValueFormat() != null)
+ ? newValueThang : null,
+ newIndexKey);
+ if (newIndexKey.getDataLength() == 0) newIndexKey = null;
+ }
+ if (oldIndexKey == null && newIndexKey == null) {
+ return;
+ }
+ if (oldIndexKey != null && newIndexKey != null &&
+ oldIndexKey.compareTo(newIndexKey) == 0) {
+ return;
+ }
+ if (oldIndexKey != null) {
+ // deleteete old index entry
+ applyIndexDelete(keyThang, oldIndexKey);
+ }
+ if (newIndexKey != null) {
+ // insert new index entry
+ applyIndexInsert(keyThang, newIndexKey);
+ }
+ }
+
+ void applyIndexDelete(DataThang keyThang, DataThang oldIndexKey)
+ throws DbException, IOException {
+
+ Dbc cursor = db.openCursor(true);
+ try {
+ int err = cursor.get(oldIndexKey, keyThang,
+ Db.DB_GET_BOTH |
+ store.db.env.getWriteLockFlag());
+ if (err == 0) {
+ cursor.delete(0);
+ } else {
+ throw new IntegrityConstraintException(
+ "Index entry not found");
+ }
+ } finally {
+ db.closeCursor(cursor);
+ }
+ }
+
+ void applyIndexInsert(DataThang keyThang, DataThang newIndexKey)
+ throws DbException, IOException {
+
+ int err = db.put(newIndexKey, keyThang, Db.DB_NODUPDATA);
+ if (err != 0) {
+ throw new IntegrityConstraintException(
+ "Index entry already exists");
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataStore.java b/db/java/src/com/sleepycat/bdb/DataStore.java
new file mode 100644
index 000000000..f3dd29046
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataStore.java
@@ -0,0 +1,231 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataStore.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * Represents a Berkeley DB database in the role of a primary data store. A
+ * store may be used by itself or along with one or more {@link DataIndex}
+ * objects. A store is typically accessed by passing it to the constructor of
+ * one of the collection classes in the {@link com.sleepycat.bdb.collection}
+ * package. For example:
+ *
+ * <pre>
+ * Db db = new Db(env, 0);
+ * db.open(null, "store.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ * DataStore store = new DataStore(db, keyFormat, valueFormat, keyAssigner);
+ * StoredMap map = new StoredMap(store, keyBinding, valueBinding, writeAllowed);
+ * </pre>
+ *
+ * <p>All access methods may be used with BDB. However, some access methods
+ * may only be used with certain types of collection views, and some access
+ * methods impose restrictions on the way collection views are used.</p>
+ *
+ * <p>A store is always associated with the environment of its underlying
+ * database, which is the first parameter to the {Db#Db} constructor. There
+ * are three types of environments in Berkeley DB.</p>
+ * <p>
+ * <table border="1">
+ * <tr>
+ * <th>Environment</th>
+ * <th>Access Mode</th>
+ * <th>Berkeley DB Flags</th>
+ * </tr>
+ * <tr>
+ * <td>Data Store</td>
+ * <td>single-threaded access</td>
+ * <td>Db.DB_INIT_MPOOL</td>
+ * </tr>
+ * <tr>
+ * <td>Concurrent Data Store</td>
+ * <td>single-writer multiple-reader access</td>
+ * <td>Db.DB_INIT_CDB | Db.DB_INIT_MPOOL</td>
+ * </tr>
+ * <tr>
+ * <td>Transactional Data Store</td>
+ * <td>transactional access for any number of readers and writers</td>
+ * <td>Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL</td>
+ * </tr>
+ * </table>
+ *
+ * <p>The flags shown are the minimum required for creating the Berkeley DB
+ * environment. Many other Berkeley DB options are also available. For details
+ * on creating and configuring the environment see the Berkeley DB
+ * documentation.</p>
+ *
+ * <p>All three environments may be used within BDB. However, the Concurrent
+ * Data Store Environment imposes the restriction that only one writable cursor
+ * may be open at a time. This means that if you have a writable iterator for
+ * a data store open, then you cannot obtain another writable iterator for the
+ * same data store and you cannot perform other write operations through a
+ * collection for that data store (since this also uses a write cursor).</p>
+ *
+ * @author Mark Hayes
+ */
+public class DataStore {
+
+ DataDb db;
+ DataFormat keyFormat;
+ DataFormat valueFormat;
+ PrimaryKeyAssigner keyAssigner;
+ ArrayList indices;
+ ArrayList inverseIndices;
+
+ /**
+ * Creates a store from a previously opened Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param keyFormat the data format for keys.
+ *
+ * @param valueFormat the data format for values.
+ *
+ * @param keyAssigner an object for assigning keys or null if no automatic
+ * key assignment is used.
+ */
+ public DataStore(Db db, DataFormat keyFormat, DataFormat valueFormat,
+ PrimaryKeyAssigner keyAssigner) {
+
+ this.db = new DataDb(db);
+ this.keyFormat = keyFormat;
+ this.valueFormat = valueFormat;
+ this.keyAssigner = keyAssigner;
+
+ if (keyFormat instanceof RecordNumberFormat &&
+ !this.db.hasRecNumAccess()) {
+ throw new IllegalArgumentException(this.db.toString() +
+ " RecordNumberFormat is only allowed when the" +
+ " access method has record number keys");
+ }
+
+ if (valueFormat instanceof RecordNumberFormat) {
+ throw new IllegalArgumentException(this.db.toString() +
+ " RecordNumberFormat is only allowed for keys");
+ }
+ }
+
+ /**
+ * Closes the store and all associated indices.
+ */
+ public void close()
+ throws DbException {
+
+ db.close();
+
+ if (indices != null) {
+ for (int i = 0; i < indices.size(); i++) {
+ DataIndex index = (DataIndex) indices.get(i);
+ index.db.close();
+ }
+ }
+ }
+
+ /**
+ * Returns the environment associated with this store.
+ */
+ public final DbEnv getEnv() {
+
+ return db.env.getEnv();
+ }
+
+ /**
+ * Returns the key format associated with this store.
+ */
+ public final DataFormat getKeyFormat() {
+
+ return keyFormat;
+ }
+
+ /**
+ * Returns the key assigner associated with this store.
+ */
+ public final PrimaryKeyAssigner getKeyAssigner() {
+
+ return keyAssigner;
+ }
+
+ /**
+ * Returns the value format associated with this store.
+ */
+ public final DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ /**
+ * Returns the indices associated with this store. Indices are associated
+ * with a store when they are constructed. All objects returned by the
+ * iterator will be of class {@link DataIndex} and may also be of class
+ * {@link ForeignKeyIndex}.
+ *
+ * @return an iterator of associated indices or null if there are none.
+ */
+ public final Iterator getIndices() {
+
+ return (indices != null) ? indices.iterator() : null;
+ }
+
+ /**
+ * Returns a printable string identifying the filename and datbase name
+ * of the store.
+ */
+ public String toString() {
+
+ return db.toString();
+ }
+
+ final void addIndex(DataIndex index) {
+
+ if (db.areDuplicatesAllowed()) {
+ throw new IllegalArgumentException(
+ "The primary store of an index must now allow duplicates");
+ }
+ if (indices == null) {
+ indices = new ArrayList();
+ }
+ indices.add(index);
+ }
+
+ final void addInverseIndex(ForeignKeyIndex inverseIndex) {
+
+ if (inverseIndices == null) {
+ inverseIndices = new ArrayList();
+ }
+ inverseIndices.add(inverseIndex);
+ }
+
+ void applyChange(DataThang keyThang, DataThang oldValueThang,
+ DataThang newValueThang)
+ throws DbException, IOException {
+
+ if (newValueThang == null && inverseIndices != null) {
+ for (int i = 0; i < inverseIndices.size(); i += 1) {
+ ForeignKeyIndex index =
+ (ForeignKeyIndex) inverseIndices.get(i);
+ index.applyForeignDelete(keyThang);
+ }
+ }
+
+ if (indices != null) {
+ for (int i = 0; i < indices.size(); i++) {
+ DataIndex index = (DataIndex) indices.get(i);
+ index.applyChange(keyThang, oldValueThang, newValueThang);
+ }
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataThang.java b/db/java/src/com/sleepycat/bdb/DataThang.java
new file mode 100644
index 000000000..7fe3708fd
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataThang.java
@@ -0,0 +1,340 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataThang.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbt;
+import java.io.ByteArrayInputStream;
+import java.io.PrintStream;
+
+/**
+ * (<em>internal</em>) An extension of a Berkeley DB thang (Dbt) that supports
+ * the {@link DataBuffer} interface for bindings and other added utilities.
+ *
+ * <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ * deleted in the future. It is public only so it may be used by
+ * subpackages.</p>
+ *
+ * @author Mark Hayes
+ */
+public final class DataThang extends Dbt implements DataBuffer {
+
+ private static DataThang discardDataThang;
+
+ static DataThang getDiscardDataThang() {
+
+ if (discardDataThang == null) {
+ discardDataThang = new DataThang();
+ discardDataThang.setFlags(Db.DB_DBT_USERMEM | Db.DB_DBT_PARTIAL);
+ discardDataThang.set_data(new byte[0]);
+ }
+ return discardDataThang;
+ }
+
+ private Object formation;
+
+ /**
+ * Creates a thang with no data.
+ */
+ public DataThang() {
+
+ setFlags(Db.DB_DBT_MALLOC);
+ }
+
+ /**
+ * Creates a thang containing the given data data.
+ *
+ * @param bytes the initial data.
+ */
+ public DataThang(byte[] bytes) {
+
+ this();
+ setBytes(bytes);
+ }
+
+ /**
+ * Creates a thang with a copy of the data from the given thang.
+ *
+ * @param copyFrom a data thang to clone.
+ */
+ public DataThang(DataThang copyFrom) {
+
+ this();
+ copy(copyFrom);
+ }
+
+ /**
+ * Copies the data from the given thang to this thang..
+ *
+ * @param copyFrom a data thang to clone.
+ */
+ public void copy(DataThang copyFrom) {
+
+ setBytes(copyFrom.getBytes());
+ }
+
+ /**
+ * Sets the data for this thang.
+ *
+ * @param bytes the new data.
+ */
+ public void setBytes(byte[] bytes) {
+
+ formation = null;
+
+ set_data(bytes);
+ set_offset(0);
+ set_size((bytes != null) ? bytes.length : 0);
+ }
+
+ /**
+ * Sets the data for this thang.
+ *
+ * @param bytes the new data.
+ *
+ * @param offset the new data offset.
+ *
+ * @param length the new data length.
+ */
+ public void setBytes(byte[] bytes, int offset, int length) {
+
+ formation = null;
+
+ set_data(bytes);
+ set_offset(offset);
+ set_size(length);
+ }
+
+ /**
+ * Returns the data for this thang.
+ *
+ * @return the data for this thang.
+ */
+ public byte[] getBytes() {
+
+ byte[] bytes = get_data();
+ if (bytes == null) return null;
+ int size = get_size();
+ byte[] data = new byte[size];
+ System.arraycopy(bytes, get_offset(), data, 0, size);
+ return data;
+ }
+
+ /**
+ * Returns the data for this thang as a byte array input stream..
+ *
+ * @return the data as a stream.
+ */
+ public ByteArrayInputStream getByteStream() {
+
+ return new ByteArrayInputStream(get_data(), get_offset(), get_size());
+ }
+
+ /**
+ * Increments the data value for this thang, treating the byte array as
+ * a Java BigInteger where the bytes are in MSB-first order. The byte
+ * array will be increased in size if necessary.
+ */
+ public void increment() {
+
+ formation = null;
+
+ byte[] data = get_data();
+ int offset = get_offset();
+ int size = get_size();
+
+ // allocate one extra byte, in case we need it below
+
+ byte[] newData = new byte[size + 1];
+ System.arraycopy(data, offset, newData, 0, size);
+
+ // find right-most non-0xFF byte and increment it
+
+ for (int i = offset + size - 1; i >= offset; i--) {
+ int val = 0xFF & data[i];
+ if (val != 0xFF) {
+ newData[i] = (byte) (val + 1);
+
+ // only use current size, not the extra zero byte
+
+ setBytes(newData, 0, size);
+ return;
+ }
+ }
+
+ // if filled with 0xFF, we have to include the
+ // extra zero byte at the end
+
+ setBytes(newData);
+ }
+
+ /**
+ * Returns -1 if the byte array of this thang is less than that of the
+ * given thang, 0 if they are equal, or 1 if greater. The comparison is
+ * performed by treating the bytes as unsigned integers to match the
+ * Berkeley DB default key comparison algorithm.
+ *
+ * @param key2 the key to compare.
+ *
+ * @return the comparison result.
+ */
+ public int compareTo(Dbt key2) {
+
+ byte[] d1 = this.get_data();
+ int o1 = this.get_offset();
+ int s1 = this.get_size();
+
+ byte[] d2 = key2.get_data();
+ int o2 = key2.get_offset();
+ int s2 = key2.get_size();
+
+ for (int i = 0; i < s1 && i < s2; i++) {
+
+ int b1 = 0xFF & d1[o1 + i];
+ int b2 = 0xFF & d2[o2 + i];
+ if (b1 < b2)
+ return -1;
+ else if (b1 > b2)
+ return 1;
+ }
+
+ if (s1 < s2)
+ return -1;
+ else if (s1 > s2)
+ return 1;
+ else
+ return 0;
+ }
+
+ /**
+ * Returns whether the byte array of this thang is equal to that of the
+ * given thang.
+ *
+ * @param other the thang to compare.
+ *
+ * @return whether their data is equal.
+ */
+ public boolean equals(Dbt other) {
+
+ return compareTo(other) == 0;
+ }
+
+ /**
+ * Prints the byte array of this thing to the given stream using toString()
+ * to convert the bytes to a string.
+ *
+ * @param out the stream to write to.
+ */
+ public void dump(PrintStream out) {
+
+ dump(this, out);
+ }
+
+ /**
+ * Prints the byte array of the given thing to the given stream using
+ * toString() to convert the bytes to a string.
+ *
+ * @param dbt the data thang to dump.
+ *
+ * @param out the stream to write to.
+ */
+ public static void dump(Dbt dbt, PrintStream out) {
+
+ out.print(' ');
+ out.print(toString(dbt));
+ out.println();
+ }
+
+ /**
+ * Converts the byte array of this thang to space-separated integers,
+ * and suffixed by the record number if applicable.
+ *
+ * @param dbt the thang to convert.
+ *
+ * @param the resulting string.
+ */
+ public static String toString(Dbt dbt) {
+
+ int len = dbt.get_offset() + dbt.get_size();
+ StringBuffer buf = new StringBuffer(len * 2);
+ byte[] data = dbt.get_data();
+ for (int i = dbt.get_offset(); i < len; i++) {
+ String num = Integer.toHexString(data[i]);
+ if (num.length() < 2) buf.append('0');
+ buf.append(Integer.toHexString(data[i]));
+ }
+ if (dbt.get_size() == 4) {
+ buf.append(" (recno ");
+ buf.append(dbt.get_recno_key_data());
+ buf.append(')');
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Converts the byte array of this thang to space-separated integers,
+ * and suffixed by the record number if applicable.
+ *
+ * @param the resulting string.
+ */
+ public String toString() {
+
+ return toString(this);
+ }
+
+ // ------- DataBuffer implementation
+
+ // javadoc is inherited
+ public void setData(byte[] data, int offset, int length) {
+
+ formation = null;
+
+ set_data(data);
+ set_offset(offset);
+ set_size(length);
+ }
+
+ // javadoc is inherited
+ public byte[] getDataBytes() {
+
+ return get_data();
+ }
+
+ // javadoc is inherited
+ public int getDataOffset() {
+
+ return get_offset();
+ }
+
+ // javadoc is inherited
+ public int getDataLength() {
+
+ return get_size();
+ }
+
+ // javadoc is inherited
+ public void setDataFormation(Object formation) {
+
+ this.formation = formation;
+ }
+
+ // javadoc is inherited
+ public Object getDataFormation() {
+
+ return formation;
+ }
+
+ // javadoc is inherited
+ public void clearDataFormation() {
+
+ formation = null;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/DataView.java b/db/java/src/com/sleepycat/bdb/DataView.java
new file mode 100644
index 000000000..e041b83a6
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/DataView.java
@@ -0,0 +1,1057 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataView.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * (<em>internal</em>) Represents a Berkeley DB database and adds support
+ * for indices, bindings and key ranges.
+ *
+ * <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ * deleted in the future. It is public only so it may be used by
+ * subpackages.</p>
+ *
+ * <p>This class defines a view and takes care of reading and updating indices,
+ * calling bindings, constraining access to a key range, etc.</p>
+ *
+ * @author Mark Hayes
+ */
+public final class DataView implements Cloneable {
+
+ private static final KeyRange NULL_RANGE = new KeyRange();
+
+ DataDb db;
+ DataStore store;
+ DataIndex index;
+ KeyRange range;
+ boolean writeAllowed;
+ boolean dirtyRead;
+ boolean transactional;
+ boolean dirtyReadAllowed;
+ boolean autoCommit;
+ DataBinding keyBinding;
+ DataBinding valueBinding;
+ EntityBinding entityBinding;
+ boolean recNumAccess;
+ boolean btreeRecNumAccess;
+
+ /**
+ * Creates a view for a given store/index and bindings. The key range of
+ * the view will be open.
+ *
+ * @param store is the store or is ignored if the index parameter is given.
+ *
+ * @param index is the index or null if no index is used.
+ *
+ * @param keyBinding is the key binding or null if keys will not be used.
+ *
+ * @param valueBinding is the value binding or null if an entityBinding is
+ * given or if values will not be used.
+ *
+ * @param entityBinding is the entity binding or null if an valueBinding
+ * is given or if values will not be used.
+ *
+ * @param writeAllowed is whether writing through this view is allowed.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ */
+ public DataView(DataStore store, DataIndex index,
+ DataBinding keyBinding, DataBinding valueBinding,
+ EntityBinding entityBinding, boolean writeAllowed)
+ throws IllegalArgumentException {
+
+ if (index != null) {
+ this.db = index.db;
+ this.index = index;
+ this.store = index.store;
+ } else {
+ if (store == null)
+ throw new IllegalArgumentException(
+ "both store and index are null");
+ this.db = store.db;
+ this.store = store;
+ }
+ this.writeAllowed = writeAllowed;
+ this.range = NULL_RANGE;
+ this.keyBinding = keyBinding;
+ this.valueBinding = valueBinding;
+ this.entityBinding = entityBinding;
+ this.transactional = db.isTransactional();
+ this.dirtyReadAllowed = transactional &&
+ (store == null || store.db.isDirtyReadAllowed()) &&
+ (index == null || index.db.isDirtyReadAllowed());
+
+ if (valueBinding != null && entityBinding != null)
+ throw new IllegalArgumentException(
+ "both valueBinding and entityBinding are non-null");
+
+ if (keyBinding != null &&
+ keyBinding.getDataFormat() instanceof RecordNumberFormat) {
+ if (!db.hasRecNumAccess()) {
+ throw new IllegalArgumentException(
+ "RecordNumberFormat requires DB_BTREE/DB_RECNUM, " +
+ "DB_RECNO, or DB_QUEUE");
+ }
+ recNumAccess = true;
+ if (db.type == Db.DB_BTREE) {
+ btreeRecNumAccess = true;
+ }
+ }
+
+ checkBindingFormats();
+ }
+
+ /**
+ * Clone the view.
+ */
+ private DataView cloneView() {
+
+ try {
+ return (DataView) super.clone();
+ }
+ catch (CloneNotSupportedException willNeverOccur) { return null; }
+ }
+
+ /**
+ * Return a new key-set view derived from this view by setting the
+ * entity and value binding to null.
+ *
+ * @return the derived view.
+ */
+ public DataView keySetView() {
+
+ if (keyBinding == null) {
+ throw new UnsupportedOperationException("must have keyBinding");
+ }
+ DataView view = cloneView();
+ view.valueBinding = null;
+ view.entityBinding = null;
+ return view;
+ }
+
+ /**
+ * Return a new value-set view derived from this view by setting the
+ * key binding to null.
+ *
+ * @return the derived view.
+ */
+ public DataView valueSetView() {
+
+ if (valueBinding == null && entityBinding == null) {
+ throw new UnsupportedOperationException(
+ "must have valueBinding or entityBinding");
+ }
+ DataView view = cloneView();
+ view.keyBinding = null;
+ return view;
+ }
+
+ /**
+ * Return a new value-set view for single key range.
+ *
+ * @param singleKey the single key value.
+ *
+ * @return the derived view.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ *
+ * @throws KeyRangeException if the specified range is not within the
+ * current range.
+ */
+ public DataView valueSetView(Object singleKey)
+ throws DbException, IOException, KeyRangeException {
+
+ // must do subRange before valueSetView since the latter clears the
+ // key binding needed for the former
+ KeyRange singleKeyRange = subRange(singleKey);
+ DataView view = valueSetView();
+ view.range = singleKeyRange;
+ return view;
+ }
+
+ /**
+ * Return a new value-set view for key range, optionally changing
+ * the key binding.
+ *
+ * @param beginKey the lower bound.
+ *
+ * @param beginInclusive whether the lower bound is inclusive.
+ *
+ * @param endKey the upper bound.
+ *
+ * @param endInclusive whether the upper bound is inclusive.
+ *
+ * @param keyBinding a key binding to use, or null to retain the base
+ * view's key binding.
+ *
+ * @return the derived view.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ *
+ * @throws KeyRangeException if the specified range is not within the
+ * current range.
+ */
+ public DataView subView(Object beginKey, boolean beginInclusive,
+ Object endKey, boolean endInclusive,
+ DataBinding keyBinding)
+ throws DbException, IOException, KeyRangeException {
+
+ DataView view = cloneView();
+ view.setRange(beginKey, beginInclusive, endKey, endInclusive);
+ if (keyBinding != null) view.keyBinding = keyBinding;
+ return view;
+ }
+
+ /**
+ * Returns a new view with a specified dirtyRead setting.
+ *
+ * @param enable whether to enable or disable dirty-read.
+ *
+ * @return the derived view.
+ */
+ public DataView dirtyReadView(boolean enable) {
+
+ if (!isDirtyReadAllowed())
+ return this;
+ DataView view = cloneView();
+ view.dirtyRead = enable;
+ return view;
+ }
+
+ /**
+ * Returns a new view with a specified autoCommit setting.
+ * Note that auto-commit is not implemented by the view, the view only
+ * holds the auto-commit property.
+ *
+ * @param enable whether to enable or disable auto-commit.
+ *
+ * @return the derived view.
+ */
+ public DataView autoCommitView(boolean enable) {
+
+ if (!isTransactional())
+ return this;
+ DataView view = cloneView();
+ view.autoCommit = enable;
+ return view;
+ }
+
+ /**
+ * Returns the current transaction for the view or null if the environment
+ * is non-transactional.
+ *
+ * @return the current transaction.
+ */
+ public CurrentTransaction getCurrentTxn() {
+
+ return isTransactional() ? db.env : null;
+ }
+
+ private void setRange(Object beginKey, boolean beginInclusive,
+ Object endKey, boolean endInclusive)
+ throws DbException, IOException, KeyRangeException {
+
+ range = subRange(beginKey, beginInclusive, endKey, endInclusive);
+ }
+
+ /**
+ * Returns the key thang for a single key range, or null if a single key
+ * range is not used.
+ *
+ * @return the key thang or null.
+ */
+ public DataThang getSingleKeyThang() {
+
+ return range.getSingleKey();
+ }
+
+ /**
+ * Returns the database for the index, if one is used, or store, if no
+ * index is used.
+ *
+ * @return the database of the index or, if none, the store.
+ */
+ public DataDb getDb() {
+
+ return db;
+ }
+
+ /**
+ * Returns the environment for the store and index.
+ *
+ * @return the environment.
+ */
+ public final DbEnv getEnv() {
+
+ return db.env.getEnv();
+ }
+
+ /**
+ * Returns whether auto-commit is set for this view or for the
+ * transactional environment of the store and index.
+ * Note that auto-commit is not implemented by the view, the view only
+ * holds the auto-commit property.
+ *
+ * @return the auto-commit setting.
+ */
+ public final boolean isAutoCommit() {
+
+ return autoCommit || db.env.isAutoCommit();
+ }
+
+ /**
+ * Returns the store, as specified to the constructor.
+ *
+ * @return the store.
+ */
+ public final DataStore getStore() {
+
+ return store;
+ }
+
+ /**
+ * Returns the index, as specified to the constructor.
+ *
+ * @return the index or null.
+ */
+ public final DataIndex getIndex() {
+
+ return index;
+ }
+
+ /**
+ * Returns the key binding that is used.
+ *
+ * @return the key binding or null.
+ */
+ public final DataBinding getKeyBinding() {
+
+ return keyBinding;
+ }
+
+ /**
+ * Returns the value binding that is used.
+ *
+ * @return the value binding or null.
+ */
+ public final DataBinding getValueBinding() {
+
+ return valueBinding;
+ }
+
+ /**
+ * Returns the entity binding that is used.
+ *
+ * @return the entity binding or null.
+ */
+ public final EntityBinding getValueEntityBinding() {
+
+ return entityBinding;
+ }
+
+ /**
+ * Returns whether duplicates are allowed for the index or store.
+ *
+ * @return whether duplicates are allowed.
+ */
+ public final boolean areDuplicatesAllowed() {
+
+ return db.areDuplicatesAllowed();
+ }
+
+ /**
+ * Returns whether duplicates are ordered for the index or store.
+ *
+ * @return whether duplicates are ordered.
+ */
+ public final boolean areDuplicatesOrdered() {
+
+ return db.areDuplicatesOrdered();
+ }
+
+ /**
+ * Returns whether keys (record numbers) are renumbered for the index or
+ * store.
+ *
+ * @return whether keys are renumbered.
+ */
+ public final boolean areKeysRenumbered() {
+
+ return btreeRecNumAccess || db.areKeysRenumbered();
+ }
+
+ /**
+ * Returns whether keys are ordered for the index or store.
+ *
+ * @return whether keys are ordered.
+ */
+ public final boolean isOrdered() {
+
+ return db.isOrdered();
+ }
+
+ /**
+ * Returns whether write operations are allowed.
+ *
+ * @return whether write operations are allowed.
+ */
+ public final boolean isWriteAllowed() {
+
+ return writeAllowed;
+ }
+
+ /**
+ * Returns whether DIRTY_READ was specified for both the Store and Index.
+ *
+ * @return whether dirty-read is allowed.
+ */
+ public final boolean isDirtyReadAllowed() {
+
+ return dirtyReadAllowed;
+ }
+
+ /**
+ * Returns whether DIRTY_READ will be used for all read operations.
+ *
+ * @return whether dirty-read is enabled.
+ */
+ public final boolean isDirtyReadEnabled() {
+
+ return dirtyRead;
+ }
+
+ /**
+ * Returns whether the store and index are transactional.
+ *
+ * @return whether the store and index are transactional.
+ */
+ public final boolean isTransactional() {
+
+ return transactional;
+ }
+
+ /**
+ * Returns whether no records are present in the view.
+ *
+ * @return whether the view is empty.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public boolean isEmpty()
+ throws DbException, IOException {
+
+ Dbc cursor = db.openCursor(false);
+ try {
+ // val is always unused (discarded) but key is needed for bounds
+ // checking if the range has a bound
+ DataThang val = DataThang.getDiscardDataThang();
+ DataThang key = (range.hasBound()) ? (new DataThang()) : val;
+ int flags = Db.DB_FIRST;
+ if (dirtyRead) flags |= Db.DB_DIRTY_READ;
+ int err = range.get(db, cursor, key, val, flags);
+ return (err != 0 && err != DataDb.ENOMEM);
+ } finally {
+ db.closeCursor(cursor);
+ }
+ }
+
+ /**
+ * Performs a general database 'get' operation.
+ *
+ * @param key used to find the value
+ *
+ * @param value used to find the value
+ *
+ * @param flags all flags except DB_SET and DB_GET_BOTH
+ * are legal, {@link com.sleepycat.db.Db#get(DbTxn,Dbt,Dbt,int)}.
+ *
+ * @param lockForWrite if true locks the cursor during the get.
+ *
+ * @param retValue used to store the result of the query
+ *
+ * @return 0 if mathing values are found, Db.DB_NOTFOUND if not.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int get(Object key, Object value, int flags, boolean lockForWrite,
+ Object[] retValue)
+ throws DbException, IOException {
+
+ // Only 0/SET/GET_BOTH flags are allowed.
+
+ if (flags == 0) {
+ flags = Db.DB_SET;
+ } else if (flags != Db.DB_SET && flags != Db.DB_GET_BOTH) {
+ throw new IllegalArgumentException("flag not allowed");
+ }
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(this, false);
+ int err = cursor.get(key, value, flags, lockForWrite);
+ if (err == 0 && retValue != null) {
+ retValue[0] = cursor.getCurrentValue();
+ }
+ return err;
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ /**
+ * Performs a database 'get and consume' operation.
+ *
+ * @param flags must be CONSUME or CONSUME_WAIT.
+ *
+ * @param retPrimaryKey used to store the resulting key.
+ *
+ * @param retValue used to store the resulting value.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int consume(int flags, Object[] retPrimaryKey, Object[] retValue)
+ throws DbException, IOException {
+
+ // Does not respect the range.
+ // Requires: write allowed
+ // Requires: if retPrimaryKey, primary key binding (no index).
+ // Requires: if retValue, value or entity binding
+
+ if (!writeAllowed) {
+ throw new UnsupportedOperationException("write not allowed");
+ }
+ if (flags != Db.DB_CONSUME && flags != Db.DB_CONSUME_WAIT) {
+ throw new IllegalArgumentException("flag not allowed");
+ }
+ DataThang keyThang = new DataThang();
+ DataThang valueThang = new DataThang();
+ int err = store.db.get(keyThang, valueThang, flags);
+ if (err == 0) {
+ store.applyChange(keyThang, valueThang, null);
+ returnPrimaryKeyAndValue(keyThang, valueThang,
+ retPrimaryKey, retValue);
+ }
+ return err;
+ }
+
+ /**
+ * Performs a database 'put' operation, optionally returning the old value.
+ *
+ * @param primaryKey key of new record.
+ *
+ * @param value value of new record.
+ *
+ * @param flags must be 0, NODUPDATA or NOOVERWRITE.
+ *
+ * @param oldValue used to store the old value, or null if none should be
+ * returned.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int put(Object primaryKey, Object value, int flags,
+ Object[] oldValue)
+ throws DbException, IOException {
+
+ // Returns old value if key already exists and no duplicates.
+ // Requires: write allowed
+ // Requires: if no index, key or entity binding with key or value
+ // Requires: if index, entity binding with value param and null key
+ // Requires: if value param, value or entity binding
+ // Requires: if oldValue param, value or entity binding
+
+ if (!writeAllowed) {
+ throw new UnsupportedOperationException("write not allowed");
+ }
+ if (flags != 0 && flags != Db.DB_NOOVERWRITE &&
+ flags != Db.DB_NODUPDATA) {
+ throw new IllegalArgumentException("flags not allowed: " + flags);
+ }
+ if (index != null) {
+ throw new UnsupportedOperationException("cannot put() with index");
+ }
+ if (oldValue != null) {
+ oldValue[0] = null;
+ }
+ DataThang keyThang = new DataThang();
+ DataThang valueThang = new DataThang();
+ DataThang oldValueThang = null;
+ int err = useKey(primaryKey, value, keyThang, range);
+ if (err != 0) {
+ throw new IllegalArgumentException("primaryKey out of range " +
+ keyThang + range);
+ }
+ if (flags == 0 && !areDuplicatesAllowed()) {
+ oldValueThang = new DataThang();
+ err = store.db.get(keyThang, oldValueThang,
+ db.env.getWriteLockFlag());
+ if (err == 0) {
+ if (oldValue != null) {
+ oldValue[0] = makeValue(keyThang, oldValueThang);
+ }
+ } else {
+ oldValueThang = null;
+ }
+ }
+ useValue(value, valueThang, null);
+ err = store.db.put(keyThang, valueThang, flags);
+ if (err == 0) {
+ store.applyChange(keyThang, oldValueThang, valueThang);
+ }
+ return err;
+ }
+
+ /**
+ * Adds a duplicate value for a specified key.
+ *
+ * @param primaryKeyThang key of new record.
+ *
+ * @param value value of new record.
+ *
+ * @param flags must be 0 or NODUPDATA or KEYFIRST or KEYLAST.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int addValue(DataThang primaryKeyThang, Object value, int flags)
+ throws DbException, IOException {
+
+ if (!writeAllowed) {
+ throw new UnsupportedOperationException("write not allowed");
+ }
+ if (!areDuplicatesAllowed()) {
+ throw new UnsupportedOperationException("duplicates required");
+ }
+ if (flags != 0 && flags != Db.DB_NODUPDATA &&
+ flags != Db.DB_KEYFIRST && flags != Db.DB_KEYLAST) {
+ throw new IllegalArgumentException("flags not allowed: " + flags);
+ }
+ DataThang valueThang = new DataThang();
+ if (!range.check(primaryKeyThang)) {
+ throw new IllegalArgumentException("primaryKey out of range");
+ }
+ useValue(value, valueThang, null);
+ int err = store.db.put(primaryKeyThang, valueThang, flags);
+ if (err == 0) {
+ store.applyChange(primaryKeyThang, null, valueThang);
+ }
+ return err;
+ }
+
+ /**
+ * Appends a value and returns the new key. If a key assigner is used
+ * it assigns the key, otherwise a QUEUE or RECNO database is required.
+ *
+ * @param value is the value to append.
+ *
+ * @param retPrimaryKey used to store the assigned key.
+ *
+ * @param retValue used to store the resulting entity, or null if none
+ * should be returned.
+ *
+ * @return an error or zero for success.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public int append(Object value, Object[] retPrimaryKey, Object[] retValue)
+ throws DbException, IOException {
+
+ // Flags will be NOOVERWRITE if used with assigner, or APPEND
+ // otherwise.
+ // Requires: if value param, value or entity binding
+ // Requires: if retPrimaryKey, primary key binding (no index).
+ // Requires: if retValue, value or entity binding
+
+ if (!writeAllowed) {
+ throw new UnsupportedOperationException("write not allowed");
+ }
+ DataThang keyThang = new DataThang();
+ DataThang valueThang = new DataThang();
+ int flags;
+ if (store.keyAssigner != null) {
+ store.keyAssigner.assignKey(keyThang);
+ if (!range.check(keyThang)) {
+ throw new IllegalArgumentException(
+ "assigned key out of range");
+ }
+ flags = Db.DB_NOOVERWRITE;
+ } else {
+ if (db.type != Db.DB_QUEUE && db.type != Db.DB_RECNO) {
+ throw new UnsupportedOperationException(
+ "DB_QUEUE or DB_RECNO type is required");
+ }
+ flags = Db.DB_APPEND; // assume RECNO access method
+ }
+ useValue(value, valueThang, null);
+ int err = store.db.put(keyThang, valueThang, flags);
+ if (err == 0) {
+ if (store.keyAssigner == null && !range.check(keyThang)) {
+ store.db.delete(keyThang, 0);
+ throw new IllegalArgumentException(
+ "appended record number out of range");
+ }
+ store.applyChange(keyThang, null, valueThang);
+ returnPrimaryKeyAndValue(keyThang, valueThang,
+ retPrimaryKey, retValue);
+ }
+ return err;
+ }
+
+ /**
+ * Deletes all records in the current range, optionally returning the
+ * values for the deleted records.
+ *
+ * @param oldValues is used to store the values that are cleared, or null
+ * if the old values should not be returned.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public void clear(Collection oldValues)
+ throws DbException, IOException {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(this, true);
+ int op = areKeysRenumbered() ? Db.DB_FIRST : Db.DB_NEXT;
+ int err = 0;
+ while (err == 0) {
+ err = cursor.get(null, null, op, true);
+ if (err == 0) {
+ if (oldValues != null) {
+ oldValues.add(cursor.getCurrentValue());
+ }
+ err = cursor.delete();
+ if (err != 0)
+ throw new DbException(
+ "Unexpected error on delete", err);
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ }
+
+ /**
+ * Returns a cursor for this view that reads only records having the
+ * specified index key values.
+ *
+ * @param indexViews are the views to be joined.
+ *
+ * @param indexKeys are the keys to join on for each view.
+ *
+ * @param presorted is whether the given views are presorted or should be
+ * sorted by number of values per key.
+ *
+ * @return the join cursor.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor join(DataView[] indexViews, Object[] indexKeys,
+ boolean presorted)
+ throws DbException, IOException {
+
+ DataCursor joinCursor = null;
+ DataCursor[] indexCursors = new DataCursor[indexViews.length];
+ try {
+ for (int i = 0; i < indexViews.length; i += 1) {
+ indexCursors[i] = new DataCursor(indexViews[i], false);
+ indexCursors[i].get(indexKeys[i], null, Db.DB_SET, false);
+ }
+ joinCursor = new DataCursor(this, indexCursors, presorted, true);
+ return joinCursor;
+ } finally {
+ if (joinCursor == null) {
+ // An exception is being thrown, so close cursors we opened.
+ for (int i = 0; i < indexCursors.length; i += 1) {
+ if (indexCursors[i] != null) {
+ try { indexCursors[i].close(); }
+ catch (Exception e) {}
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns a cursor for this view that reads only records having the
+ * index key values at the specified cursors.
+ *
+ * @param indexCursor are the cursors to be joined.
+ *
+ * @param presorted is whether the given cursors are presorted or should be
+ * sorted by number of values per key.
+ *
+ * @return the join cursor.
+ *
+ * @throws DbException if a database problem occurs.
+ *
+ * @throws IOException if an IO problem occurs.
+ */
+ public DataCursor join(DataCursor[] indexCursors, boolean presorted)
+ throws DbException, IOException {
+
+ return new DataCursor(this, indexCursors, presorted, false);
+ }
+
+ private void returnPrimaryKeyAndValue(DataThang keyThang,
+ DataThang valueThang,
+ Object[] retPrimaryKey,
+ Object[] retValue)
+ throws DbException, IOException {
+
+ // Requires: if retPrimaryKey, primary key binding (no index).
+ // Requires: if retValue, value or entity binding
+
+ if (retPrimaryKey != null) {
+ if (keyBinding == null) {
+ throw new IllegalArgumentException(
+ "returning key requires primary key binding");
+ } else if (index != null) {
+ throw new IllegalArgumentException(
+ "returning key requires unindexed view");
+ } else {
+ retPrimaryKey[0] = keyBinding.dataToObject(keyThang);
+ }
+ }
+ if (retValue != null) {
+ retValue[0] = makeValue(keyThang, valueThang);
+ }
+ }
+
+ int useKey(Object key, Object value, DataThang keyThang,
+ KeyRange checkRange)
+ throws DbException, IOException {
+
+ if (key != null) {
+ if (keyBinding == null) {
+ throw new IllegalArgumentException(
+ "non-null key with null key binding");
+ }
+ keyBinding.objectToData(key, keyThang);
+ } else if (value == null) {
+ throw new IllegalArgumentException(
+ "null key and null value");
+ } else if (index == null) {
+ if (entityBinding == null) {
+ throw new UnsupportedOperationException(
+ "null key, null index, and null entity binding");
+ }
+ entityBinding.objectToKey(value, keyThang);
+ } else {
+ KeyExtractor extractor = index.getKeyExtractor();
+ DataThang primaryKeyThang = null;
+ DataThang valueThang = null;
+ if (entityBinding != null) {
+ if (extractor.getPrimaryKeyFormat() != null) {
+ primaryKeyThang = new DataThang();
+ entityBinding.objectToKey(value, primaryKeyThang);
+ }
+ if (extractor.getValueFormat() != null) {
+ valueThang = new DataThang();
+ entityBinding.objectToValue(value, valueThang);
+ }
+ } else {
+ if (extractor.getPrimaryKeyFormat() != null) {
+ throw new IllegalStateException(
+ "primary key needed by index extractor");
+ }
+ if (extractor.getValueFormat() != null) {
+ valueThang = new DataThang();
+ valueBinding.objectToData(value, valueThang);
+ }
+ }
+ extractor.extractIndexKey(primaryKeyThang, valueThang, keyThang);
+ }
+ if (checkRange != null) {
+ return checkRange.check(keyThang) ? 0 : Db.DB_NOTFOUND;
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * Returns whether data keys can be derived from the value/entity binding
+ * of this view, which determines whether a value/entity object alone is
+ * sufficient for operations that require keys.
+ *
+ * @return whether data keys can be derived.
+ */
+ public boolean canDeriveKeyFromValue() {
+
+ if (index == null) {
+ return (entityBinding != null);
+ } else {
+ KeyExtractor extractor = index.getKeyExtractor();
+ if (extractor.getPrimaryKeyFormat() != null &&
+ entityBinding == null) {
+ return false;
+ } else if (extractor.getValueFormat() != null &&
+ entityBinding == null && valueBinding == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
+ void useValue(Object value, DataThang valueThang, DataThang checkKeyThang)
+ throws DbException, IOException {
+
+ if (value != null) {
+ if (valueBinding != null) {
+ valueBinding.objectToData(value, valueThang);
+ } else if (entityBinding != null) {
+ entityBinding.objectToValue(value, valueThang);
+ if (checkKeyThang != null) {
+ DataThang thang = new DataThang();
+ entityBinding.objectToKey(value, thang);
+ if (!thang.equals(checkKeyThang)) {
+ throw new IllegalArgumentException(
+ "cannot change primary key");
+ }
+ }
+ } else {
+ throw new IllegalArgumentException(
+ "non-null value with null value/entity binding");
+ }
+ } else {
+ valueThang.set_data(new byte[0]);
+ valueThang.set_offset(0);
+ valueThang.set_size(0);
+ }
+ }
+
+ Object makeKey(DataThang keyThang)
+ throws DbException, IOException {
+
+ if (keyThang.get_size() == 0) return null;
+ return keyBinding.dataToObject(keyThang);
+ }
+
+ Object makeValue(DataThang primaryKeyThang, DataThang valueThang)
+ throws DbException, IOException {
+
+ Object value;
+ if (valueBinding != null) {
+ value = valueBinding.dataToObject(valueThang);
+ } else if (entityBinding != null) {
+ value = entityBinding.dataToObject(primaryKeyThang,
+ valueThang);
+ } else {
+ throw new UnsupportedOperationException(
+ "requires valueBinding or entityBinding");
+ }
+ return value;
+ }
+
+ KeyRange subRange(Object singleKey)
+ throws DbException, IOException, KeyRangeException {
+
+ return range.subRange(makeRangeKey(singleKey));
+ }
+
+ KeyRange subRange(Object beginKey, boolean beginInclusive,
+ Object endKey, boolean endInclusive)
+ throws DbException, IOException, KeyRangeException {
+
+ if (beginKey == endKey && beginInclusive && endInclusive) {
+ return subRange(beginKey);
+ }
+ if (!isOrdered()) {
+ throw new UnsupportedOperationException(
+ "Cannot use key ranges on an unsorted database");
+ }
+ DataThang beginThang =
+ (beginKey != null) ? makeRangeKey(beginKey) : null;
+ DataThang endThang =
+ (endKey != null) ? makeRangeKey(endKey) : null;
+
+ return range.subRange(beginThang, beginInclusive,
+ endThang, endInclusive);
+ }
+
+ private void checkBindingFormats() {
+
+ if (keyBinding != null && !recNumAccess) {
+ DataFormat keyFormat = (index != null) ? index.keyFormat
+ : store.keyFormat;
+ if (!keyFormat.equals(keyBinding.getDataFormat())) {
+ throw new IllegalArgumentException(
+ db.toString() + " key binding format mismatch");
+ }
+ }
+ if (valueBinding != null) {
+ if (!store.valueFormat.equals(valueBinding.getDataFormat())) {
+ throw new IllegalArgumentException(
+ store.toString() + " value binding format mismatch");
+ }
+ }
+ if (entityBinding != null) {
+ if (!store.keyFormat.equals(entityBinding.getKeyFormat())) {
+ throw new IllegalArgumentException(store.toString() +
+ " value entity binding keyFormat mismatch");
+ }
+ if (!store.valueFormat.equals(entityBinding.getValueFormat())) {
+ throw new IllegalArgumentException(store.toString() +
+ " value entity binding valueFormat mismatch");
+ }
+ }
+ }
+
+ private DataThang makeRangeKey(Object key)
+ throws DbException, IOException {
+
+ DataThang thang = new DataThang();
+ if (keyBinding != null) {
+ useKey(key, null, thang, null);
+ } else {
+ useKey(null, key, thang, null);
+ }
+ return thang;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/ForeignKeyIndex.java b/db/java/src/com/sleepycat/bdb/ForeignKeyIndex.java
new file mode 100644
index 000000000..d2118043d
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/ForeignKeyIndex.java
@@ -0,0 +1,197 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ForeignKeyIndex.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.db.DbException;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * Represents a Berkeley DB secondary index where the index key is the primary
+ * key of another data store. An index is always attached to a single {@link
+ * DataStore} when it is constructed. An index is typically accessed by
+ * passing it to the constructor of one of the collection classes in the {@link
+ * com.sleepycat.bdb.collection} package. For example:
+ *
+ * <pre>
+ * Db db = new Db(env, 0);
+ * db.setFlags(Db.DB_DUPSORT);
+ * db.open(null, "index.db", null, Db.DB_BTREE, dbOpenFlags, 0);
+ * ForeignKeyIndex index = new ForeignKeyIndex(store, db, keyExtractor,
+ * foreignStore, deleteAction);
+ * StoredMap map = new StoredMap(index, keyBinding, valueBinding, writeAllowed);
+ * </pre>
+ *
+ * <p>All access methods may be used with BDB. However, some access methods
+ * may only be used with certain types of collection views, and some access
+ * methods impose restrictions on the way collection views are used.</p>
+ *
+ * @author Mark Hayes
+ */
+public class ForeignKeyIndex extends DataIndex {
+
+ /**
+ * When the foreign key is deleted, throw an exception.
+ */
+ public static final int ON_DELETE_ABORT = 0;
+
+ /**
+ * When the foreign key is deleted, delete the index key.
+ */
+ public static final int ON_DELETE_CASCADE = 1;
+
+ /**
+ * When the foreign key is deleted, clear the index key.
+ */
+ public static final int ON_DELETE_CLEAR = 2;
+
+ DataStore foreignStore;
+ int deleteAction;
+
+ /**
+ * Creates a foreign key index from a previously opened Db object.
+ *
+ * @param store the store to be indexed and also specifies the
+ * environment that was used to create the Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param keyExtractor an object for extracting the index key from primary
+ * key and/or value buffers, and for clearing the index key in a value
+ * buffer.
+ *
+ * @param foreignStore is the store in which the index key for this store
+ * is a primary key.
+ *
+ * @param deleteAction determines what action occurs when the foreign key
+ * is deleted. It must be one of the ON_DELETE_ constants.
+ *
+ * @throws IllegalArgumentException if a format mismatch is detected
+ * between the index and the store, or if unsorted duplicates were
+ * specified for the index Db.
+ */
+ public ForeignKeyIndex(DataStore store, Db db, KeyExtractor keyExtractor,
+ DataStore foreignStore, int deleteAction) {
+
+ super(store, db, foreignStore.keyFormat, keyExtractor);
+ this.foreignStore = foreignStore;
+ this.deleteAction = deleteAction;
+
+ foreignStore.addInverseIndex(this);
+
+ if (deleteAction == ON_DELETE_CLEAR &&
+ keyExtractor.getPrimaryKeyFormat() != null) {
+ throw new IllegalArgumentException(
+ "ON_DELETE_CLEAR cannot be used with key extractor that " +
+ "requires primary key");
+ }
+ }
+
+ /**
+ * Returns the foreign store which has the primary key which matches the
+ * index key of this store.
+ */
+ public final DataStore getForeignStore() {
+
+ return foreignStore;
+ }
+
+ /**
+ * Returns a value indicating what action occurs when the foreign key
+ * is deleted. It must be one of the ON_DELETE_ constants.
+ */
+ public final int getDeleteAction() {
+
+ return deleteAction;
+ }
+
+ final void applyIndexInsert(DataThang keyThang, DataThang newIndexKey)
+ throws DbException, IOException {
+
+ // check relative key (newIndexKey) existence
+
+ int err = foreignStore.db.get(newIndexKey,
+ DataThang.getDiscardDataThang(), 0);
+ if (err != 0) {
+ throw new IllegalArgumentException(
+ "Integrity error inserting in " +
+ db + ", index key not found in " +
+ foreignStore.db);
+ }
+
+ // must call super method to perform index insert
+
+ super.applyIndexInsert(keyThang, newIndexKey);
+ }
+
+ final void applyForeignDelete(DataThang foreignPrimaryKeyThang)
+ throws DbException, IOException {
+
+ DataEnvironment env = store.db.env;
+ DataThang primaryKeyThang = new DataThang();
+ int err = db.get(foreignPrimaryKeyThang, primaryKeyThang, 0);
+ if (err == 0) {
+ switch (deleteAction) {
+ case ON_DELETE_ABORT: {
+ throw new IntegrityConstraintException(
+ "ON_DELETE_ABORT: deletion not allowed");
+ }
+ case ON_DELETE_CASCADE: {
+ DataThang tempThang = new DataThang();
+ Dbc cursor = store.db.openCursor(true);
+ try {
+ err = cursor.get(primaryKeyThang, tempThang,
+ Db.DB_SET | env.getWriteLockFlag());
+ if (err == 0) {
+ cursor.delete(0);
+ store.applyChange(primaryKeyThang, tempThang,
+ null);
+ } else {
+ throw new IntegrityConstraintException(
+ "ON_DELETE_CASCADE: index entry not found");
+ }
+ } finally {
+ store.db.closeCursor(cursor);
+ }
+ break;
+ }
+ case ON_DELETE_CLEAR: {
+ DataThang valueThang = new DataThang();
+ Dbc cursor = store.db.openCursor(true);
+ try {
+ err = cursor.get(primaryKeyThang, valueThang,
+ Db.DB_SET | env.getWriteLockFlag());
+ if (err == 0) {
+ keyExtractor.clearIndexKey(
+ (keyExtractor.getValueFormat() != null)
+ ? valueThang : null);
+ cursor.put(primaryKeyThang, valueThang,
+ Db.DB_CURRENT);
+ } else {
+ throw new IntegrityConstraintException(
+ "ON_DELETE_CLEAR: index entry not found");
+ }
+ } finally {
+ store.db.closeCursor(cursor);
+ }
+ break;
+ }
+ default: {
+ throw new IllegalArgumentException(
+ "unknown delete action " + deleteAction);
+ }
+ }
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/IntegrityConstraintException.java b/db/java/src/com/sleepycat/bdb/IntegrityConstraintException.java
new file mode 100644
index 000000000..e4d8dc0ab
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/IntegrityConstraintException.java
@@ -0,0 +1,32 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: IntegrityConstraintException.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+/**
+ * Thrown when an integrity constraint violation occurs. This normally occurs
+ * when an attempt is made to delete a store element, and the primary key of
+ * that element is referenced by a foreign key index with a ON_DELETE_ABORT
+ * delete action. It may also occur when an internal index inconsistency is
+ * detected, in processing a ForeignKeyIndex or a DataIndex.
+ *
+ * @see ForeignKeyIndex
+ * @author Mark Hayes
+ */
+public class IntegrityConstraintException extends RuntimeException {
+
+ /**
+ * Creates an integrity constraint exception.
+ */
+ public IntegrityConstraintException(String msg) {
+
+ super(msg);
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/bdb/KeyRange.java b/db/java/src/com/sleepycat/bdb/KeyRange.java
new file mode 100644
index 000000000..089eacf03
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/KeyRange.java
@@ -0,0 +1,314 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: KeyRange.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.Dbt;
+
+/**
+ * @author Mark Hayes
+ */
+final class KeyRange {
+
+ private static final int EINVAL = 22;
+
+ private DataThang beginKey;
+ private DataThang endKey;
+ private boolean isSingleKey;
+ private boolean isCursorValid;
+
+ public KeyRange() {
+ }
+
+ public KeyRange(DataThang singleKey) {
+
+ this.beginKey = singleKey;
+ // defer creation of end key until needed in PREV processing below
+ isSingleKey = true;
+ }
+
+ public KeyRange(DataThang beginKey, boolean beginInclusive,
+ DataThang endKey, boolean endInclusive) {
+
+ if (beginKey != null) {
+ this.beginKey = beginKey;
+ if (!beginInclusive)
+ this.beginKey.increment();
+ }
+ if (endKey != null) {
+ this.endKey = endKey;
+ if (endInclusive)
+ this.endKey.increment();
+ }
+ }
+
+ /**
+ * Clone to reset the "is first call" state, which allows DB_NEXT to
+ * work as DB_FIRST, etc. A new range should be cloned for every new Dbc.
+ */
+ public KeyRange(KeyRange other) {
+
+ this.beginKey = other.beginKey;
+ this.endKey = other.endKey;
+ this.isSingleKey = other.isSingleKey;
+ }
+
+ public KeyRange subRange(DataThang singleKey)
+ throws KeyRangeException {
+
+ if (!check(singleKey)) {
+ throw new KeyRangeException("singleKey out of range");
+ }
+ return new KeyRange(singleKey);
+ }
+
+ public KeyRange subRange(DataThang beginKey, boolean beginInclusive,
+ DataThang endKey, boolean endInclusive)
+ throws KeyRangeException {
+
+ KeyRange range = new KeyRange(beginKey, beginInclusive,
+ endKey, endInclusive);
+ if (range.beginKey == null) {
+ range.beginKey = this.beginKey;
+ } else if (!check(range.beginKey)) {
+ throw new KeyRangeException("beginKey out of range");
+ }
+
+ if (range.endKey == null) {
+ range.endKey = this.endKey;
+ } else if (!checkRangeEnd(range.endKey)) {
+ throw new KeyRangeException("endKey out of range");
+ }
+
+ return range;
+ }
+
+ public final DataThang getSingleKey() {
+
+ return isSingleKey ? beginKey : null;
+ }
+
+ final boolean hasBound() {
+
+ return isSingleKey || endKey != null || beginKey != null;
+ }
+
+ public String toString() {
+
+ return "[KeyRange " + beginKey + ' ' + endKey +
+ (isSingleKey ? " single" : "");
+ }
+
+ public boolean check(DataThang key) {
+
+ if (isSingleKey)
+ return (key.compareTo(beginKey) == 0);
+
+ if ((beginKey != null) && (key.compareTo(beginKey) < 0))
+ return false;
+
+ if ((endKey != null) && (key.compareTo(endKey) >= 0))
+ return false;
+
+ return true;
+ }
+
+ // checkRangeEnd() is like check() but takes and endKey of another range,
+ // which is always exclusive so may be equal to this endKey
+ private boolean checkRangeEnd(DataThang key) {
+
+ if (isSingleKey)
+ return (key.compareTo(beginKey) == 0);
+
+ if ((beginKey != null) && (key.compareTo(beginKey) < 0))
+ return false;
+
+ if ((endKey != null) && (key.compareTo(endKey) > 0))
+ return false;
+
+ return true;
+ }
+
+ /*
+ public boolean check(DataThang key) {
+
+ return intersect(key) == key;
+ }
+
+ private DataThang intersect(DataThang key) {
+
+ if (isSingleKey) {
+ return (key.compareTo(beginKey) != 0) ? beginKey : key;
+ }
+ if ((beginKey != null) && (key.compareTo(beginKey) < 0)) {
+ return beginKey;
+ }
+ if ((endKey != null) && (key.compareTo(endKey) >= 0)) {
+ return endKey;
+ }
+ return key;
+ }
+ */
+
+ public int get(DataDb db, Dbc cursor, DataThang key,
+ DataThang data, int flags)
+ throws DbException {
+
+ if (beginKey == null && endKey == null) {
+ return db.get(cursor, key, data, flags);
+ }
+
+ int extraFlags = flags & DataDb.FLAGS_MOD_MASK;
+ int pos = flags & DataDb.FLAGS_POS_MASK;
+ int origPos = pos;
+ int err = 0;
+
+ boolean wasInvalid = !isCursorValid;
+
+ if (pos == Db.DB_CURRENT || pos == Db.DB_NEXT_DUP) {
+ // we may consider cursor invalid when Db does not
+ if (wasInvalid) throwInvalid(key, data);
+
+ err = db.get(cursor, key, data, pos | extraFlags);
+
+ } else if (pos == Db.DB_SET || pos == Db.DB_SET_RANGE ||
+ pos == Db.DB_SET_RECNO || pos == Db.DB_GET_BOTH) {
+ if (pos != Db.DB_SET_RANGE && !check(key)) {
+ err = setInvalid(key, data);
+ } else {
+ err = db.get(cursor, key, data, pos | extraFlags);
+
+ if (err == 0 && pos == Db.DB_SET_RANGE) {
+ if (!check(key)) err = setInvalid(key, data);
+ }
+ }
+
+ } else if (pos == Db.DB_FIRST || pos == Db.DB_NEXT ||
+ pos == Db.DB_NEXT_NODUP) {
+ if (wasInvalid) pos = Db.DB_FIRST;
+
+ if (isSingleKey) {
+ if (pos == Db.DB_NEXT_NODUP) {
+ err = Db.DB_NOTFOUND;
+ } else if (pos == Db.DB_FIRST) {
+ key.copy(beginKey);
+ err = db.get(cursor, key, data, Db.DB_SET | extraFlags);
+ //if (error != 0) error = setInvalid(key, data);
+ } else {
+ err = db.get(cursor, key, data,
+ Db.DB_NEXT_DUP | extraFlags);
+ }
+ } else {
+ if (beginKey == null) {
+ err = db.get(cursor, key, data, pos | extraFlags);
+ } else {
+ if (pos == Db.DB_FIRST) {
+ key.copy(beginKey);
+ err = db.get(cursor, key, data,
+ Db.DB_SET_RANGE | extraFlags);
+ } else {
+ err = db.get(cursor, key, data, pos | extraFlags);
+ }
+ }
+
+ if (err == 0 && !check(key)) {
+ if (pos == Db.DB_FIRST) {
+ err = setInvalid(key, data);
+ } else {
+ err = db.get(cursor, key, data,
+ (pos == Db.DB_NEXT_NODUP)
+ ? Db.DB_PREV_NODUP : Db.DB_PREV);
+ if (err != 0) {
+ throw new DbException("Range internal error", err);
+ }
+ err = Db.DB_NOTFOUND;
+ }
+ }
+ }
+ } else if (pos == Db.DB_LAST || pos == Db.DB_PREV ||
+ pos == Db.DB_PREV_NODUP) {
+ if (wasInvalid) pos = Db.DB_LAST;
+
+ if (isSingleKey) {
+ if (pos == Db.DB_PREV_NODUP) {
+ err = Db.DB_NOTFOUND;
+ } else if (endKey == null) {
+ // create end key now for use in PREV processing below
+ endKey = new DataThang(beginKey);
+ endKey.increment();
+ }
+ }
+
+ if (err != 0) {
+ } else if (endKey == null) {
+ err = db.get(cursor, key, data, pos | extraFlags);
+ } else {
+ if (pos == Db.DB_LAST) {
+ key.copy(endKey);
+ err = db.get(cursor, key, data,
+ Db.DB_SET_RANGE | extraFlags);
+ if (err == 0) {
+ err = db.get(cursor, key, data,
+ ((origPos == Db.DB_PREV_NODUP)
+ ? Db.DB_PREV_NODUP : Db.DB_PREV)
+ | extraFlags);
+ } else {
+ err = db.get(cursor, key, data,
+ Db.DB_LAST | extraFlags);
+ }
+ } else {
+ err = db.get(cursor, key, data, pos | extraFlags);
+ }
+ }
+
+ if (err == 0 && beginKey != null) {
+ int compare = key.compareTo(beginKey);
+ if (isSingleKey ? (compare != 0) : (compare < 0)) {
+ if (pos == Db.DB_LAST) {
+ err = setInvalid(key, data);
+ } else {
+ err = db.get(cursor, key, data,
+ (pos == Db.DB_PREV_NODUP)
+ ? Db.DB_NEXT_NODUP : Db.DB_NEXT);
+ if (err != 0) {
+ throw new DbException("Range internal error", err);
+ }
+ err = Db.DB_NOTFOUND;
+ }
+ }
+ }
+ } else if (pos == Db.DB_CONSUME) {
+ err = db.get(cursor, key, data, flags);
+ } else {
+ throw new DbException("Unsupported flag", EINVAL);
+ }
+
+ if (err == 0) isCursorValid = true;
+
+ return err;
+ }
+
+ private void throwInvalid(DataThang key, DataThang data)
+ throws DbException {
+
+ setInvalid(key, data);
+ throw new DbException("Cursor not initialized", EINVAL);
+ }
+
+ private int setInvalid(DataThang key, DataThang data) {
+
+ isCursorValid = false;
+ if (key != null) key.set_size(0);
+ if (data != null) data.set_size(0);
+ return Db.DB_NOTFOUND;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/KeyRangeException.java b/db/java/src/com/sleepycat/bdb/KeyRangeException.java
new file mode 100644
index 000000000..f212924a6
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/KeyRangeException.java
@@ -0,0 +1,31 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: KeyRangeException.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+/**
+ * (<em>internal</em>) An exception thrown when a key is out of range.
+ *
+ * <p><b>NOTE:</b> This classes is internal and may be changed incompatibly or
+ * deleted in the future. It is public only so it may be used by
+ * subpackages.</p>
+ *
+ * @author Mark Hayes
+ */
+public class KeyRangeException extends IllegalArgumentException {
+
+ /**
+ * Creates a key range exception.
+ */
+ public KeyRangeException(String msg) {
+
+ super(msg);
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/bdb/PrimaryKeyAssigner.java b/db/java/src/com/sleepycat/bdb/PrimaryKeyAssigner.java
new file mode 100644
index 000000000..7524c713d
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/PrimaryKeyAssigner.java
@@ -0,0 +1,33 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: PrimaryKeyAssigner.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.collection.StoredList;
+import com.sleepycat.bdb.collection.StoredMap;
+import java.io.IOException;
+
+/**
+ * An interface implemented to assign new primary key values.
+ * An implementation of this interface is passed to the {@link DataStore}
+ * constructor to assign primary keys for that store. Key assignment occurs
+ * when {@link StoredMap#append} or {@link StoredList#append} is called.
+ *
+ * @author Mark Hayes
+ */
+public interface PrimaryKeyAssigner {
+
+ /**
+ * Assigns a new primary key value into the given data buffer.
+ */
+ void assignKey(DataBuffer keyData)
+ throws DbException, IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/RecordNumberBinding.java b/db/java/src/com/sleepycat/bdb/RecordNumberBinding.java
new file mode 100644
index 000000000..d55c24d1c
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/RecordNumberBinding.java
@@ -0,0 +1,56 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: RecordNumberBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import java.io.IOException;
+
+/**
+ * A concrete binding for record number keys. Record numbers are returned
+ * as Long objects, although on input any Number object may be used.
+ *
+ * @author Mark Hayes
+ */
+public class RecordNumberBinding implements DataBinding {
+
+ private RecordNumberFormat format;
+
+ /**
+ * Creates a byte array binding.
+ *
+ * @param format is the format of the new binding.
+ */
+ public RecordNumberBinding(RecordNumberFormat format) {
+
+ this.format = format;
+ }
+
+ // javadoc is inherited
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ return new Long(format.dataToRecordNumber(data));
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ format.recordNumberToData(((Number) object).longValue(), data);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/RecordNumberFormat.java b/db/java/src/com/sleepycat/bdb/RecordNumberFormat.java
new file mode 100644
index 000000000..3c3d0973e
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/RecordNumberFormat.java
@@ -0,0 +1,73 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: RecordNumberFormat.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.db.Dbt;
+
+/**
+ * The data format for record number keys. This class must be used whenever a
+ * record number is used with a store, index, or binding. It is used to
+ * identify Berkeley DB record numbers as such and perform special processing
+ * required by Berkeley DB. Namely, the byte order of record numbers is not
+ * the same as the byte order for integers in Java, and is also platform
+ * dependent.
+ *
+ * @author Mark Hayes
+ */
+public class RecordNumberFormat implements DataFormat {
+
+ /**
+ * Creates a record number format.
+ */
+ public RecordNumberFormat() {
+ }
+
+ /**
+ * Utility method for use by bindings to translate a data buffer to an
+ * record number integer.
+ *
+ * @param data the data buffer.
+ *
+ * @return the record number.
+ */
+ public final long dataToRecordNumber(DataBuffer data) {
+
+ return ((Dbt) data).get_recno_key_data() & 0xFFFFFFFFL;
+ }
+
+ /**
+ * Utility method for use by bindings to translate a record number integer
+ * to a data buffer.
+ *
+ * @param recordNumber the record number.
+ *
+ * @param data the data buffer to hold the record number.
+ */
+ public final void recordNumberToData(long recordNumber, DataBuffer data) {
+
+ data.setData(new byte[4], 0, 4);
+ ((Dbt) data).set_recno_key_data((int) recordNumber);
+ }
+
+ /**
+ * Test for equality.
+ *
+ * @param o the object to check.
+ *
+ * @return true if the given object is a RecordNumberFormat instance,
+ * since all RecordNumberFormat instances are equivalent.
+ */
+ public boolean equals(Object o) {
+
+ return (o instanceof RecordNumberFormat);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/StoredClassCatalog.java b/db/java/src/com/sleepycat/bdb/StoredClassCatalog.java
new file mode 100644
index 000000000..08c754cf0
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/StoredClassCatalog.java
@@ -0,0 +1,432 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredClassCatalog.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import com.sleepycat.bdb.util.UtfOps;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.Dbc;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbTxn;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.HashMap;
+
+/**
+ * Java serialization catalog used for compact storage of database objects.
+ *
+ * @author Mark Hayes
+ */
+public class StoredClassCatalog implements ClassCatalog {
+
+ private static final byte REC_LAST_CLASS_ID = (byte) 0;
+ private static final byte REC_CLASS_FORMAT = (byte) 1;
+ private static final byte REC_CLASS_INFO = (byte) 2;
+
+ private static final byte[] LAST_CLASS_ID_KEY = {REC_LAST_CLASS_ID};
+
+ /*
+ Record types ([key] [data]):
+
+ [0] [next class ID]
+ [1 / class ID] [ObjectStreamClass (class format)]
+ [2 / class name] [ClassInfo (has 8 byte class ID)]
+ */
+
+ private DataEnvironment env;
+ private DataDb db;
+ private HashMap classMap;
+ private HashMap formatMap;
+
+ /**
+ * Open a catalog database. To save resources, only a single catalog object
+ * should be used for each unique catalog file.
+ *
+ * @param env is the environment in which to open the catalog.
+ *
+ * @param file is the name of the catalog file.
+ *
+ * @param database the database name to be used within the specified
+ * store. If null then the filename is the database name.
+ *
+ * @param openFlags Flags for calling Db.open such as Db.DB_CREATE and
+ * Db.DB_AUTO_COMMIT.
+ */
+ public StoredClassCatalog(DbEnv env, String file,
+ String database, int openFlags)
+ throws FileNotFoundException, DbException {
+
+ this.env = DataEnvironment.getEnvironment(env);
+
+ DbTxn txn = this.env.getTxn();
+ if (txn != null)
+ openFlags &= ~Db.DB_AUTO_COMMIT;
+
+ // open the catalog database
+
+ Db db = new Db(env, 0);
+ db.open(txn, file, database, Db.DB_BTREE, openFlags, 0);
+ this.db = new DataDb(db);
+
+ // create the class format and class info maps; note that these are not
+ // synchronized, and therefore the methods that use them are
+ // synchronized
+
+ classMap = new HashMap();
+ formatMap = new HashMap();
+ }
+
+ // javadoc is inherited
+ public synchronized void close()
+ throws IOException {
+
+ try {
+ if (db != null) {
+ db.close();
+ db = null;
+ }
+ } catch (DbException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ db = null;
+ formatMap = null;
+ classMap = null;
+ }
+
+ // javadoc is inherited
+ public synchronized byte[] getClassID(String className)
+ throws IOException, ClassNotFoundException {
+
+ try {
+ ClassInfo classInfo = getClassInfo(className);
+ return classInfo.getClassID();
+ } catch (DbException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ // javadoc is inherited
+ public synchronized ObjectStreamClass getClassFormat(String className)
+ throws IOException, ClassNotFoundException {
+
+ try {
+ ClassInfo classInfo = getClassInfo(className);
+ return classInfo.getClassFormat();
+ } catch (DbException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ // javadoc is inherited
+ public ObjectStreamClass getClassFormat(byte[] classID)
+ throws IOException, ClassNotFoundException {
+
+ try {
+ return getClassFormat(classID, newDbt());
+ } catch (DbException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Internal function for getting the class format. Allows passing the Dbt
+ * object for the data, so the bytes of the class format can be examined
+ * afterwards.
+ */
+ private synchronized ObjectStreamClass getClassFormat(byte[] classID,
+ DataThang data)
+ throws DbException, ClassNotFoundException, IOException {
+
+ // first check the map and, if found, add class info to the map
+
+ BigInteger classIDObj = new BigInteger(classID);
+ ObjectStreamClass classFormat =
+ (ObjectStreamClass) formatMap.get(classIDObj);
+ if (classFormat == null) {
+
+ // make the class format key
+
+ byte[] keyBytes = new byte[classID.length + 1];
+ keyBytes[0] = REC_CLASS_FORMAT;
+ System.arraycopy(classID, 0, keyBytes, 1, classID.length);
+ DataThang key = newDbt();
+ key.setBytes(keyBytes);
+
+ // read the class format
+
+ int err = db.get(key, data, 0);
+ if (err != 0) {
+ throw new ClassNotFoundException("Catalog class ID not found");
+ }
+ ObjectInputStream ois =
+ new ObjectInputStream(data.getByteStream());
+ classFormat = (ObjectStreamClass) ois.readObject();
+
+ // update the class format map
+
+ formatMap.put(classIDObj, classFormat);
+ }
+ return classFormat;
+ }
+
+ /**
+ * Get the ClassInfo for a given class name, adding it and its
+ * ObjectStreamClass to the database if they are not already present, and
+ * caching both of them using the class info and class format maps. When a
+ * class is first loaded from the database, the stored ObjectStreamClass is
+ * compared to the current ObjectStreamClass loaded by the Java class
+ * loader; if they are different, a new class ID is assigned for the
+ * current format.
+ */
+ private ClassInfo getClassInfo(String className)
+ throws IOException, ClassNotFoundException, DbException, DbException {
+
+ // first check for a cached copy of the class info, which if
+ // present always contains the class format object
+
+ ClassInfo classInfo = (ClassInfo) classMap.get(className);
+ if (classInfo != null) {
+ return classInfo;
+ } else {
+ // get currently loaded class format
+
+ Class cls = Class.forName(className);
+ ObjectStreamClass classFormat = ObjectStreamClass.lookup(cls);
+
+ // make class info key
+
+ char[] nameChars = className.toCharArray();
+ byte[] keyBytes = new byte[1 + UtfOps.getByteLength(nameChars)];
+ keyBytes[0] = REC_CLASS_INFO;
+ UtfOps.charsToBytes(nameChars, 0, keyBytes, 1, nameChars.length);
+ DataThang key = newDbt();
+ key.setBytes(keyBytes);
+
+ // read class info
+
+ DataThang data = newDbt();
+ int err = db.get(key, data, 0);
+ if (err != 0) {
+ // not found in the database; write class info and class format
+
+ classInfo = putClassInfo(new ClassInfo(), className, key,
+ classFormat);
+ } else {
+ // read class info to get the class format key, then read class
+ // format
+
+ classInfo = new ClassInfo(data);
+ DataThang formatData = newDbt();
+ ObjectStreamClass storedClassFormat =
+ getClassFormat(classInfo.getClassID(), formatData);
+
+ // compare the stored class format to the current class format,
+ // and if they are different then generate a new class ID
+
+ if (!areClassFormatsEqual(storedClassFormat,
+ formatData.getBytes(),
+ classFormat)) {
+ classInfo = putClassInfo(classInfo, className, key,
+ classFormat);
+ }
+
+ // update the class info map
+
+ classInfo.setClassFormat(classFormat);
+ classMap.put(className, classInfo);
+ }
+ }
+ return classInfo;
+ }
+
+ /**
+ * Assign a new class ID (increment the current ID record), write the
+ * ObjectStreamClass record for this new ID, and update the ClassInfo
+ * record with the new ID also. The ClassInfo passed as an argument is the
+ * one to be updated; however, a different ClassInfo may be returned if
+ * another process happens to update the catalog database before we do
+ * (this is a rare concurrency issue).
+ */
+ private ClassInfo putClassInfo(ClassInfo classInfo, String className,
+ DataThang classKey,
+ ObjectStreamClass classFormat)
+ throws DbException, ClassNotFoundException {
+
+ // an intent-to-write cursor is needed for CDB
+
+ Dbc cursor = db.openCursor(true);
+ try {
+ // get and lock the record containing the last assigned ID
+
+ DataThang key = newDbt();
+ key.setBytes(LAST_CLASS_ID_KEY);
+ DataThang data = newDbt();
+ int putFlag = Db.DB_CURRENT;
+ int err = cursor.get(key, data,
+ Db.DB_SET | env.getWriteLockFlag());
+ if (err != 0) {
+ // if this is a new database, set the initial ID record
+ data.setBytes(new byte[1]); // zero ID
+ putFlag = Db.DB_KEYLAST;
+ }
+ byte[] idBytes = data.getBytes();
+
+ // check one last time to see if another thread
+ // wrote the information before this thread
+
+ Object anotherClassInfo = classMap.get(className);
+ if (anotherClassInfo != null)
+ return (ClassInfo) anotherClassInfo;
+
+ // increment the ID by one and write the updated record
+
+ idBytes = incrementID(idBytes);
+ data.setBytes(idBytes);
+ cursor.put(key, data, putFlag);
+
+ // write the new class format record whose key is the ID just
+ // assigned
+
+ byte[] keyBytes = new byte[1 + idBytes.length];
+ keyBytes[0] = REC_CLASS_FORMAT;
+ System.arraycopy(idBytes, 0, keyBytes, 1, idBytes.length);
+ key.setBytes(keyBytes);
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos;
+ try {
+ oos = new ObjectOutputStream(baos);
+ oos.writeObject(classFormat);
+ }
+ catch (IOException e) {}
+ data.setBytes(baos.toByteArray());
+
+ db.put(key, data, 0);
+
+ // write the new class info record, using the key passed in; this
+ // is done last so that a reader who gets the class info record
+ // first will always find the corresponding class format record
+
+ classInfo.setClassID(idBytes);
+ classInfo.toDbt(data);
+
+ db.put(classKey, data, 0);
+
+ // update the maps before closing the cursor, so that the cursor
+ // lock prevents other writers from duplicating this entry
+
+ classInfo.setClassFormat(classFormat);
+ classMap.put(className, classInfo);
+ formatMap.put(new BigInteger(idBytes), classFormat);
+ return classInfo;
+ } finally {
+ db.closeCursor(cursor);
+ }
+ }
+
+ private static byte[] incrementID(byte[] key) {
+
+ BigInteger id = new BigInteger(key);
+ id = id.add(BigInteger.valueOf(1));
+ return id.toByteArray();
+ }
+
+ /**
+ * Holds the class format key for a class, maintains a reference to the
+ * ObjectStreamClass. Other fields can be added when we need to store more
+ * information per class.
+ */
+ private static class ClassInfo implements Serializable {
+
+ private byte[] classID;
+ private transient ObjectStreamClass classFormat;
+
+ ClassInfo() {
+ }
+
+ ClassInfo(DataThang dbt) {
+
+ byte[] data = dbt.getDataBytes();
+ int len = data[0];
+ classID = new byte[len];
+ System.arraycopy(data, 1, classID, 0, len);
+ }
+
+ void toDbt(DataThang dbt) {
+
+ byte[] data = new byte[1 + classID.length];
+ data[0] = (byte) classID.length;
+ System.arraycopy(classID, 0, data, 1, classID.length);
+ dbt.setData(data, 0, data.length);
+ }
+
+ void setClassID(byte[] classID) {
+
+ this.classID = classID;
+ }
+
+ byte[] getClassID() {
+
+ return classID;
+ }
+
+ ObjectStreamClass getClassFormat() {
+
+ return classFormat;
+ }
+
+ void setClassFormat(ObjectStreamClass classFormat) {
+
+ this.classFormat = classFormat;
+ }
+ }
+
+ /**
+ * Return whether two class formats are equal. This determines whether a
+ * new class format is needed for an object being serialized. Formats must
+ * be identical in all respects, or a new format is needed.
+ */
+ private static boolean areClassFormatsEqual(ObjectStreamClass format1,
+ byte[] format1Bytes,
+ ObjectStreamClass format2) {
+ try {
+ if (format1Bytes == null) { // using cached format1 object
+ format1Bytes = getObjectBytes(format1);
+ }
+ byte[] format2Bytes = getObjectBytes(format2);
+ return java.util.Arrays.equals(format2Bytes, format1Bytes);
+ } catch (IOException e) { return false; }
+ }
+
+ private static byte[] getObjectBytes(Object o)
+ throws IOException {
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(o);
+ return baos.toByteArray();
+ }
+
+ private DataThang newDbt() {
+
+ return new DataThang();
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/TransactionRunner.java b/db/java/src/com/sleepycat/bdb/TransactionRunner.java
new file mode 100644
index 000000000..a14fd2c0e
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/TransactionRunner.java
@@ -0,0 +1,185 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TransactionRunner.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbDeadlockException;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.CurrentTransaction;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+
+/**
+ * Starts a transaction, calls {@link TransactionWorker#doWork}, and handles
+ * transaction retry and exceptions.
+ *
+ * @author Mark Hayes
+ */
+public class TransactionRunner {
+
+ private static final int DEFAULT_MAX_RETRIES = 10;
+
+ private DbEnv env;
+ private CurrentTransaction currentTxn;
+ private int maxRetries;
+ private boolean dirtyRead;
+ private boolean noWait;
+
+ /**
+ * Creates a transaction runner for a given Berkeley DB environment.
+ * The default maximum number of retries (10) will be used.
+ *
+ * @param env is the environment for running transactions.
+ */
+ public TransactionRunner(DbEnv env) {
+
+ this(env, DEFAULT_MAX_RETRIES);
+ }
+
+ /**
+ * Creates a transaction runner for a given Berkeley DB environment and
+ * with a given number of maximum retries.
+ *
+ * @param env is the environment for running transactions.
+ *
+ * @param maxRetries is the maximum number of retries that will be performed
+ * when deadlocks are detected.
+ */
+ public TransactionRunner(DbEnv env, int maxRetries) {
+
+ this.env = env;
+ this.currentTxn = CurrentTransaction.getInstance(env);
+ this.maxRetries = maxRetries;
+ }
+
+ /**
+ * Returns the maximum number of retries that will be performed when
+ * deadlocks are detected.
+ */
+ public int getMaxRetries() {
+
+ return maxRetries;
+ }
+
+ /**
+ * Changes the maximum number of retries that will be performed when
+ * deadlocks are detected.
+ * Calling this method does not impact transactions already running.
+ */
+ public void setMaxRetries(int maxRetries) {
+
+ this.maxRetries = maxRetries;
+ }
+
+ /**
+ * Returns whether transactions will read data that is modified by another
+ * transaction but not committed.
+ */
+ public boolean getDirtyRead() {
+
+ return dirtyRead;
+ }
+
+ /**
+ * Changes whether transactions will read data that is modified by another
+ * transaction but not committed.
+ * Calling this method does not impact transaction already running.
+ */
+ public void setDirtyRead(boolean dirtyRead) {
+
+ this.dirtyRead = dirtyRead;
+ }
+
+ /**
+ * Returns whether transactions will throw DbLockNotGrantedException
+ * instead of blocking when trying to access data that is locked by another
+ * transaction.
+ */
+ public boolean getNoWait() {
+
+ return noWait;
+ }
+
+ /**
+ * Changes whether transactions will throw DbLockNotGrantedException
+ * instead of blocking when trying to access data that is locked by another
+ * transaction.
+ */
+ public void setNoWait(boolean noWait) {
+
+ this.noWait = noWait;
+ }
+
+ /**
+ * Calls the {@link TransactionWorker#doWork} method and, for transactional
+ * environments, begins and ends a transaction. If the environment given
+ * is non-transactional, a transaction will not be used but the doWork()
+ * method will still be called.
+ *
+ * <p> In a transactional environment, a new transaction is started before
+ * calling doWork(). This will start a nested transaction if one is
+ * already active. If DbDeadlockException is thrown by doWork(), the
+ * transaction will be aborted and the process will be repeated up to the
+ * maximum number of retries specified. If another exception is thrown by
+ * doWork() or the maximum number of retries has occurred, the transaction
+ * will be aborted and the exception will be rethrown by this method. If
+ * no exception is thrown by doWork(), the transaction will be committed.
+ * This method will not attempt to commit or abort a transaction if it has
+ * already been committed or aborted by doWork(). </p>
+ *
+ * @throws DbDeadlockException when it is thrown by doWork() and the
+ * maximum number of retries has occurred. The transaction will have been
+ * aborted by this method.
+ *
+ * @throws Exception when any other exception is thrown by doWork(). The
+ * exception will first be unwrapped by calling {@link
+ * ExceptionUnwrapper#unwrap}. The transaction will have been aborted by
+ * this method.
+ */
+ public void run(TransactionWorker worker)
+ throws DbException, Exception {
+
+ if (currentTxn != null) { // if environment is transactional
+ boolean dr = dirtyRead; // these values should not be changed
+ boolean nw = noWait; // until this method returns
+ for (int i = 0;; i += 1) {
+ DbTxn txn = null;
+ try {
+ txn = currentTxn.beginTxn(dr, nw);
+ worker.doWork();
+ if (txn != null && txn == currentTxn.getTxn())
+ currentTxn.commitTxn();
+ return;
+ } catch (Exception e) {
+ e = ExceptionUnwrapper.unwrap(e);
+ if (txn != null && txn == currentTxn.getTxn()) {
+ try {
+ currentTxn.abortTxn();
+ } catch (Exception e2) {
+ // If we cannot abort, better to throw e than e2
+ // since it contains more information about the
+ // real problem.
+ System.err.println(e2.toString());
+ throw e;
+ }
+ }
+ if (i >= maxRetries || !(e instanceof DbDeadlockException))
+ throw e;
+ }
+ }
+ } else {
+ try {
+ worker.doWork();
+ } catch (Exception e) {
+ throw ExceptionUnwrapper.unwrap(e);
+ }
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/TransactionWorker.java b/db/java/src/com/sleepycat/bdb/TransactionWorker.java
new file mode 100644
index 000000000..1f765e3f3
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/TransactionWorker.java
@@ -0,0 +1,28 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TransactionWorker.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb;
+
+/**
+ * The interface implemented to perform the work within a transaction.
+ * To run a transaction, an instance of this interface is passed to the
+ * {@link TransactionRunner#run} method.
+ *
+ * @author Mark Hayes
+ */
+public interface TransactionWorker {
+
+ /**
+ * Perform the work for a single transaction.
+ *
+ * @see TransactionRunner#run
+ */
+ void doWork()
+ throws Exception;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/ByteArrayBinding.java b/db/java/src/com/sleepycat/bdb/bind/ByteArrayBinding.java
new file mode 100644
index 000000000..b40e5eb99
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/ByteArrayBinding.java
@@ -0,0 +1,62 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ByteArrayBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+import java.io.IOException;
+
+/**
+ * A transparent binding where the data byte array is used as the object.
+ * The Object of the binding is of type <code>byte[]</code> and the data is
+ * nothing more than the byte array itself.
+ *
+ * @author Mark Hayes
+ */
+public class ByteArrayBinding implements DataBinding {
+
+ private ByteArrayFormat format;
+
+ /**
+ * Creates a byte array binding.
+ *
+ * @param format is the format of the new binding.
+ */
+ public ByteArrayBinding(ByteArrayFormat format) {
+
+ this.format = format;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ byte[] bytes = (byte[]) data.getDataFormation();
+ if (bytes == null) {
+ bytes = new byte[data.getDataLength()];
+ System.arraycopy(data.getDataBytes(), data.getDataOffset(),
+ bytes, 0, bytes.length);
+ data.setDataFormation(bytes);
+ }
+ return bytes;
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ byte[] bytes = (byte[]) object;
+ data.setData(bytes, 0, bytes.length);
+ }
+
+ // javadoc is inherited
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/ByteArrayFormat.java b/db/java/src/com/sleepycat/bdb/bind/ByteArrayFormat.java
new file mode 100644
index 000000000..07322f935
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/ByteArrayFormat.java
@@ -0,0 +1,24 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ByteArrayFormat.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+/**
+ * The format for data stored as a byte array.
+ *
+ * @author Mark Hayes
+ */
+public class ByteArrayFormat implements DataFormat {
+
+ /**
+ * Creates a byte array format.
+ */
+ public ByteArrayFormat() {
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/DataBinding.java b/db/java/src/com/sleepycat/bdb/bind/DataBinding.java
new file mode 100644
index 000000000..347b17ec1
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/DataBinding.java
@@ -0,0 +1,47 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+import java.io.IOException;
+
+/**
+ * The interface implemented by all data-to-object bindings.
+ *
+ * @author Mark Hayes
+ */
+public interface DataBinding {
+
+ /**
+ * Converts a data buffer into an Object.
+ *
+ * @param data is the source data buffer.
+ *
+ * @return the resulting Object.
+ */
+ Object dataToObject(DataBuffer data)
+ throws IOException;
+
+ /**
+ * Converts an Object into a data buffer.
+ *
+ * @param object is the source Object.
+ *
+ * @param data is the destination data buffer.
+ */
+ void objectToData(Object object, DataBuffer data)
+ throws IOException;
+
+ /**
+ * Returns the format used for the data of this binding.
+ *
+ * @return the data format.
+ */
+ DataFormat getDataFormat();
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/DataBuffer.java b/db/java/src/com/sleepycat/bdb/bind/DataBuffer.java
new file mode 100644
index 000000000..56ea51d68
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/DataBuffer.java
@@ -0,0 +1,80 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataBuffer.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+/**
+ * The interface used in bindings to access the data as a byte array.
+ *
+ * <p>Each data buffer may contain a formation Object that is associated with
+ * the data. The formation may be used by bindings to cache an internal
+ * representation of the data that is specific to the format but can be used by
+ * all bindings. The formation must be cleared whenever the data in the buffer
+ * is changed.</p>
+ *
+ * @author Mark Hayes
+ */
+public interface DataBuffer {
+
+ /**
+ * Sets the data in this buffer to the given value. The byte array given
+ * will be owned by this buffer object after this method is called and
+ * must not be modified thereafter. This method must clear the data
+ * formation for this buffer.
+ *
+ * @param data is the data array and must not be modified after this
+ * method is called.
+ *
+ * @param offset is the byte offset of the data in the array.
+ *
+ * @param length is the byte length of the data in the array.
+ */
+ void setData(byte[] data, int offset, int length);
+
+ /**
+ * Returns the byte array of the data buffer. This array is owned by
+ * the buffer object and should not be modified.
+ *
+ * @return the byte array of the data buffer.
+ */
+ byte[] getDataBytes();
+
+ /**
+ * Returns the byte offset of the data in the array.
+ *
+ * @return the byte offset of the data in the array.
+ */
+ int getDataOffset();
+
+ /**
+ * Returns the byte length of the data in the array.
+ *
+ * @return the byte length of the data in the array.
+ */
+ int getDataLength();
+
+ /**
+ * Sets the formation associated with the data in this buffer.
+ *
+ * @param formation is Object to set.
+ */
+ void setDataFormation(Object formation);
+
+ /**
+ * Returns the formation associated with the data in this buffer.
+ *
+ * @return formation Object.
+ */
+ Object getDataFormation();
+
+ /**
+ * Sets the formation associated with the data in this buffer to null.
+ */
+ void clearDataFormation();
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/DataFormat.java b/db/java/src/com/sleepycat/bdb/bind/DataFormat.java
new file mode 100644
index 000000000..c62ac7fb1
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/DataFormat.java
@@ -0,0 +1,18 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataFormat.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+/**
+ * The tag interface implemented by all data formats.
+ *
+ * @author Mark Hayes
+ */
+public interface DataFormat {
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/DataType.java b/db/java/src/com/sleepycat/bdb/bind/DataType.java
new file mode 100644
index 000000000..88a940374
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/DataType.java
@@ -0,0 +1,42 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DataType.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+/**
+ * Primitive data type constants.
+ *
+ * @author Mark Hayes
+ */
+public interface DataType {
+
+ /** Undefined data type. */
+ public static final int NONE = 0;
+
+ /** <code>String</code> data type. */
+ public static final int STRING = 1;
+
+ /** <code>byte[]</code> data type. */
+ public static final int BINARY = 2;
+
+ /** <code>Integer</code> data type. */
+ public static final int INT = 3;
+
+ /** <code>Long</code> data type. */
+ public static final int LONG = 4;
+
+ /** <code>Float</code> data type. */
+ public static final int FLOAT = 5;
+
+ /** <code>Double</code> data type. */
+ public static final int DOUBLE = 6;
+
+ /** <code>Date</code> data type. */
+ public static final int DATETIME = 7;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/EntityBinding.java b/db/java/src/com/sleepycat/bdb/bind/EntityBinding.java
new file mode 100644
index 000000000..876aed6d7
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/EntityBinding.java
@@ -0,0 +1,66 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: EntityBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+import java.io.IOException;
+
+/**
+ * The interface implemented by all entity or key/data-to-object bindings.
+ *
+ * @author Mark Hayes
+ */
+public interface EntityBinding {
+
+ /**
+ * Converts key and value data buffers into an entity Object.
+ *
+ * @param key is the source key data.
+ *
+ * @param value is the source value data.
+ *
+ * @return the resulting Object.
+ */
+ Object dataToObject(DataBuffer key, DataBuffer value)
+ throws IOException;
+
+ /**
+ * Extracts the key data from an entity Object.
+ *
+ * @param object is the source Object.
+ *
+ * @param key is the destination data buffer.
+ */
+ void objectToKey(Object object, DataBuffer key)
+ throws IOException;
+
+ /**
+ * Extracts the value data from an entity Object.
+ *
+ * @param object is the source Object.
+ *
+ * @param value is the destination data buffer.
+ */
+ void objectToValue(Object object, DataBuffer value)
+ throws IOException;
+
+ /**
+ * Returns the format used for the key data of this binding.
+ *
+ * @return the key data format.
+ */
+ DataFormat getKeyFormat();
+
+ /**
+ * Returns the format used for the value data of this binding.
+ *
+ * @return the value data format.
+ */
+ DataFormat getValueFormat();
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/KeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/KeyExtractor.java
new file mode 100644
index 000000000..e99721799
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/KeyExtractor.java
@@ -0,0 +1,91 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: KeyExtractor.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+import java.io.IOException;
+
+/**
+ * The interface implemented for extracting the index key from primary key
+ * and/or value buffers, and for clearing the index key in a value buffer. The
+ * implementation of this interface defines a specific index key for use in a
+ * database, and that is independent of any bindings that may be used.
+ *
+ * @author Mark Hayes
+ */
+public interface KeyExtractor {
+
+ /**
+ * Extracts the index key data from primary key and value buffers.
+ * The index key is extracted when saving the data record identified by the
+ * primary key and value buffers, in order to add or remove an index
+ * entry in the database for that data record.
+ *
+ * @param primaryKeyData is the source primary key data, or null if no
+ * primary key data is used to construct the index key, in which case
+ * {@link #getPrimaryKeyFormat} should also return null.
+ *
+ * @param valueData is the source value data, or null if no value data is
+ * used to construct the index key, in which case {@link #getValueFormat}
+ * should also return null.
+ *
+ * @param indexKeyData is the destination index key buffer. For index keys
+ * which are optionally present, the buffer's length should be set to zero
+ * to indicate that the key is not present or null.
+ */
+ void extractIndexKey(DataBuffer primaryKeyData, DataBuffer valueData,
+ DataBuffer indexKeyData)
+ throws IOException;
+
+ /**
+ * Clears the index key in a value buffer. The index key is cleared when
+ * the index is for a foreign key identifying a record that has been
+ * deleted. This method is called only if the {@link
+ * com.sleepycat.bdb.ForeignKeyIndex} is configured with {@link
+ * com.sleepycat.bdb.ForeignKeyIndex#ON_DELETE_CLEAR}. It is never called
+ * for index keys that are derived from primary key data, since in this
+ * case {@link com.sleepycat.bdb.ForeignKeyIndex#ON_DELETE_CLEAR} is not
+ * allowed.
+ *
+ * @param valueData is the source and destination value data. On entry
+ * this contains the index key to be cleared. It should be changed by this
+ * method such that {@link #extractIndexKey} will extract a null key (set
+ * the buffer length to zero). Other data in the buffer should remain
+ * unchanged.
+ */
+ void clearIndexKey(DataBuffer valueData)
+ throws IOException;
+
+ /**
+ * Returns the format of the primary key data or null if the index key data
+ * is not derived from the primary key data. If this method returns null,
+ * then null will be passed for the <code>primaryKeyData</code> parameter
+ * of {@link #extractIndexKey}.
+ *
+ * @return the format of the primary key data or null.
+ */
+ DataFormat getPrimaryKeyFormat();
+
+ /**
+ * Returns the format of the value data or null if the index key data is
+ * not derived from the value data. If this method returns null, then null
+ * will be passed for the <code>valueData</code> parameter of {@link
+ * #extractIndexKey}.
+ *
+ * @return the format of the value data or null.
+ */
+ DataFormat getValueFormat();
+
+ /**
+ * Returns the format of the index key data.
+ *
+ * @return the format of the index key data.
+ */
+ DataFormat getIndexKeyFormat();
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/SimpleBuffer.java b/db/java/src/com/sleepycat/bdb/bind/SimpleBuffer.java
new file mode 100644
index 000000000..81afd9556
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/SimpleBuffer.java
@@ -0,0 +1,103 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SimpleBuffer.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind;
+
+/**
+ * A simple data buffer implementation that allows using bindings for arbitrary
+ * data outside the context of a database.
+ *
+ * @author Mark Hayes
+ */
+public class SimpleBuffer implements DataBuffer {
+
+ private byte[] data;
+ private int offset;
+ private int length;
+ private Object formation;
+
+ /**
+ * Creates a simple buffer with null data, an offset of zero and a length
+ * of zero.
+ */
+ public SimpleBuffer() {
+ }
+
+ /**
+ * Creates a simple buffer with the given data with an offset of zero and a
+ * length equal to the length of the data array.
+ *
+ * @param data is the data array and must not be modified after this
+ * method is called.
+ */
+ public SimpleBuffer(byte[] data) {
+
+ setData(data, 0, data.length);
+ }
+
+ /**
+ * Creates a simple buffer with the given data, offset and length.
+ *
+ * @param data is the data array and must not be modified after this
+ * method is called.
+ *
+ * @param offset is the byte offset of the data in the array.
+ *
+ * @param length is the byte length of the data in the array.
+ */
+ public SimpleBuffer(byte[] data, int offset, int length) {
+
+ setData(data, offset, length);
+ }
+
+ // javadoc is inherited
+ public void setData(byte[] data, int offset, int length) {
+
+ formation = null;
+ this.data = data;
+ this.offset = offset;
+ this.length = length;
+ }
+
+ // javadoc is inherited
+ public byte[] getDataBytes() {
+
+ return data;
+ }
+
+ // javadoc is inherited
+ public int getDataOffset() {
+
+ return offset;
+ }
+
+ // javadoc is inherited
+ public int getDataLength() {
+
+ return length;
+ }
+
+ // javadoc is inherited
+ public void setDataFormation(Object formation) {
+
+ this.formation = formation;
+ }
+
+ // javadoc is inherited
+ public Object getDataFormation() {
+
+ return formation;
+ }
+
+ // javadoc is inherited
+ public void clearDataFormation() {
+
+ formation = null;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/package.html b/db/java/src/com/sleepycat/bdb/bind/package.html
new file mode 100644
index 000000000..8a1ba0870
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/package.html
@@ -0,0 +1,7 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:11 jbj Exp $ -->
+<html>
+<body>
+<p>Interfaces for defining data formats and data-to-object bindings
+<a href="{@docRoot}../ref/bdb/cs_bdb_bind.html" target="_top">[reference guide]</a>
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/ClassCatalog.java b/db/java/src/com/sleepycat/bdb/bind/serial/ClassCatalog.java
new file mode 100644
index 000000000..b87933029
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/ClassCatalog.java
@@ -0,0 +1,79 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ClassCatalog.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import java.io.IOException;
+import java.io.ObjectStreamClass;
+
+/**
+ * Represents a catalog of class information for use in object serialization so
+ * that class descriptions can be stored separately from serialized objects.
+ *
+ * <p>This information is used for serialization of class descriptors or
+ * java.io.ObjectStreamClass objects, each of which represents a unique class
+ * format. For each unique format, a unique class ID is assigned by the
+ * catalog. The class ID can then be used in the serialization stream in place
+ * of the full class information. When used with {@link SerialInput} and
+ * {@link SerialOutput} or any of the serial bindings, the use of the catalog
+ * is transparent to the application.</p>
+ *
+ * @author Mark Hayes
+ */
+public interface ClassCatalog {
+
+ /**
+ * Close a catalog database and release any cached resources.
+ */
+ public void close()
+ throws IOException;
+
+ /**
+ * Return the class ID for the current version of the given class name.
+ * This is used for storing in serialization streams in place of a full
+ * class descriptor, since it is much more compact. To get back the
+ * ObjectStreamClass for a class ID, call {@link #getClassFormat(byte[])}.
+ * This function causes a new class ID to be assigned if the class
+ * description has changed.
+ *
+ * @param className The fully qualified class name for which to return the
+ * class ID.
+ *
+ * @return The class ID for the current version of the class.
+ */
+ public byte[] getClassID(String className)
+ throws IOException, ClassNotFoundException;
+
+ /**
+ * Return the ObjectStreamClass for the given class name. This is always
+ * the current class format. Calling this method is equivalent to calling
+ * java.io.ObjectStreamClass.lookup, but this method causes a new class
+ * ID to be assigned if the class description has changed.
+ *
+ * @param className The fully qualified class name for which to return the
+ * class format.
+ *
+ * @return The class format for the current version of the class.
+ */
+ public ObjectStreamClass getClassFormat(String className)
+ throws IOException, ClassNotFoundException;
+
+ /**
+ * Return the ObjectStreamClass for the given class ID. This may or may not
+ * be the current class format, depending on whether the class has changed
+ * since the class ID was generated.
+ *
+ * @param classID The class ID for which to return the class format.
+ *
+ * @return The class format for the given class ID, which may or may not
+ * represent the current version of the class.
+ */
+ public ObjectStreamClass getClassFormat(byte[] classID)
+ throws IOException, ClassNotFoundException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialBinding.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialBinding.java
new file mode 100644
index 000000000..9a4b44c2e
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialBinding.java
@@ -0,0 +1,97 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import java.io.IOException;
+
+/**
+ * A concrete serial binding for keys or values. This binding stores objects
+ * in serial data format. If this class is used "as is" the deserialized
+ * objects are returned by the binding, and these objects must be serializable.
+ *
+ * <p>The class may also be extended to override the {@link
+ * #dataToObject(Object)} and {@link #objectToData(Object)} methods in order to
+ * map between the deserialized objects and other objects. In that case the
+ * objects returned by the binding do not have to be serializable. Note that
+ * both methods must be overridden.</p>
+ *
+ * @author Mark Hayes
+ */
+public class SerialBinding implements DataBinding {
+
+ protected SerialFormat format;
+
+ /**
+ * Creates a serial binding.
+ *
+ * @param format is the format of the new binding.
+ */
+ public SerialBinding(SerialFormat format) {
+
+ this.format = format;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ return dataToObject(format.dataToObject(data));
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ format.objectToData(objectToData(object), data);
+ }
+
+ // javadoc is inherited
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+
+ /**
+ * Can be overridden to convert the deserialized data object to another
+ * object. This method is called by {@link #dataToObject(DataBuffer)}
+ * after deserializing the data. The default implemention simply returns
+ * the data parameter.
+ *
+ * @param data is the deserialized data object (will always be
+ * serializable).
+ *
+ * @return the resulting object.
+ */
+ public Object dataToObject(Object data)
+ throws IOException {
+
+ return data;
+ }
+
+ /**
+ * Can be overridden to convert the object to a deserialized data object.
+ * This method is called by {@link #objectToData(Object,DataBuffer)}
+ * before serializing the object. The default implemention simply returns
+ * the object parameter.
+ *
+ * @param object is the source object.
+ *
+ * @return the resulting deserialized object (must be serializable)..
+ */
+ public Object objectToData(Object object)
+ throws IOException {
+
+ return object;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialFormat.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialFormat.java
new file mode 100644
index 000000000..828550cfb
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialFormat.java
@@ -0,0 +1,130 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialFormat.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.util.FastInputStream;
+import com.sleepycat.bdb.util.FastOutputStream;
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+
+/**
+ * The format for serialized data. In addition to identifying a serial format
+ * this class provides utility methods for use by bindings.
+ *
+ * @author Mark Hayes
+ */
+public class SerialFormat implements DataFormat {
+
+ private ClassCatalog classCatalog;
+ private Class baseClass;
+
+ /**
+ * Creates a serial format.
+ *
+ * @param classCatalog is the catalog to hold shared class information and
+ * for a database should be a {@link
+ * com.sleepycat.bdb.StoredClassCatalog}.
+ *
+ * @param baseClass is the base class for serialized objects stored using
+ * this format -- all objects using this format must be an instance of
+ * this class.
+ */
+ public SerialFormat(ClassCatalog classCatalog, Class baseClass) {
+
+ this.classCatalog = classCatalog;
+ this.baseClass = baseClass;
+ }
+
+ /**
+ * Returns the base class for this format.
+ *
+ * @return the base class for this format.
+ */
+ public final Class getBaseClass() {
+
+ return baseClass;
+ }
+
+ /**
+ * Utility method for use by bindings to deserialize an object. May only
+ * be called for data that was serialized using {@link #objectToData},
+ * since the fixed serialization header is assumed to not be included in
+ * the input data. {@link SerialInput} is used to deserialize the object.
+ * If a deserialized object is cached in the buffer's data formation
+ * property, it is returned directly.
+ *
+ * @param data is the input serialized data.
+ *
+ * @return the output deserialized object.
+ */
+ public final Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ Object object = data.getDataFormation();
+ if (object != null) return object;
+
+ int length = data.getDataLength();
+ byte[] hdr = SerialOutput.getStreamHeader();
+ byte[] bufWithHeader = new byte[length + hdr.length];
+
+ System.arraycopy(hdr, 0, bufWithHeader, 0, hdr.length);
+ System.arraycopy(data.getDataBytes(), data.getDataOffset(),
+ bufWithHeader, hdr.length, length);
+
+ SerialInput jin = new SerialInput(
+ new FastInputStream(bufWithHeader, 0, bufWithHeader.length),
+ classCatalog);
+
+ try {
+ object = jin.readObject();
+ } catch (ClassNotFoundException e) {
+ throw new IOExceptionWrapper(e);
+ }
+
+ data.setDataFormation(object);
+ return object;
+ }
+
+ /**
+ * Utility method for use by bindings to serialize an object. The fixed
+ * serialization header is not included in the output data to save space,
+ * and therefore to deserialize the data the complementary {@link
+ * #dataToObject} method must be used. {@link SerialOutput} is used to
+ * serialize the object. The deserialized object is cached in the buffer's
+ * data formation property.
+ *
+ * @param object is the input deserialized object.
+ *
+ * @param data is the output serialized data.
+ *
+ * @throws IllegalArgumentException if the object is not an instance of the
+ * base class for this format.
+ */
+ public final void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ if (baseClass != null && !baseClass.isInstance(object)) {
+ throw new IllegalArgumentException(
+ "Data object class (" + object.getClass() +
+ ") not an instance of format's base class (" +
+ baseClass + ')');
+ }
+ FastOutputStream fo = new FastOutputStream();
+ SerialOutput jos = new SerialOutput(fo, classCatalog);
+ jos.writeObject(object);
+
+ byte[] hdr = SerialOutput.getStreamHeader();
+ data.setData(fo.getBufferBytes(), hdr.length,
+ fo.getBufferLength() - hdr.length);
+ data.setDataFormation(object);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialInput.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialInput.java
new file mode 100644
index 000000000..3bf394a24
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialInput.java
@@ -0,0 +1,67 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialInput.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamClass;
+
+/**
+ * Used instead of an {@link ObjectInputStream}, which it extends, to read an
+ * object stream written by the {@link SerialOutput} class. For reading
+ * objects from a database normally {@link SerialFormat} or one of the serial
+ * binding classes is used. {@link SerialInput} is used when an {@link
+ * ObjectInputStream} is needed along with compact storage. A {@link
+ * ClassCatalog} must be supplied, however, to stored shared class
+ * descriptions.
+ *
+ * @author Mark Hayes
+ */
+public class SerialInput extends ObjectInputStream {
+
+ private ClassCatalog classCatalog;
+
+ /**
+ * Creates a serial input stream.
+ *
+ * @param in is the input stream from which compact serialized objects will
+ * be read.
+ *
+ * @param classCatalog is the catalog containing the class descriptions
+ * for the serialized objects.
+ */
+ public SerialInput(InputStream in, ClassCatalog classCatalog)
+ throws IOException {
+
+ super(in);
+
+ this.classCatalog = classCatalog;
+ }
+
+ // javadoc is inherited
+ protected ObjectStreamClass readClassDescriptor()
+ throws IOException, ClassNotFoundException {
+
+ try {
+ byte len = readByte();
+ byte[] id = new byte[len];
+ readFully(id);
+
+ return classCatalog.getClassFormat(id);
+ } catch (IOException e) {
+ // do not throw IOException from here since ObjectOutputStream
+ // will write the exception to the stream, which causes another
+ // call here, etc.
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialOutput.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialOutput.java
new file mode 100644
index 000000000..bbe4b1e20
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialOutput.java
@@ -0,0 +1,105 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialOutput.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.ObjectStreamConstants;
+import java.io.OutputStream;
+
+/**
+ * Used instead of an ObjectOutputStream, which it extends, to write a compact
+ * object stream. For writing objects to a database normally {@link
+ * SerialFormat} or one of the serial binding classes is used. {@link
+ * SerialOutput} is used when an {@link ObjectOutputStream} is needed along
+ * with compact storage. A {@link ClassCatalog} must be supplied, however, to
+ * stored shared class descriptions.
+ *
+ * <p>The {@link ClassCatalog} is used to store class definitions rather than
+ * embedding these into the stream. Instead, a class format identifier is
+ * embedded into the stream. This identifier is then used by {@link
+ * SerialInput} to load the class format to deserialize the object.</p>
+ *
+ * @author Mark Hayes
+ */
+public class SerialOutput extends ObjectOutputStream {
+
+ // serialization version constants; instead of hardcoding these
+ // we get them by creating a SerialOutput, which itself
+ // guarantees that we'll always use a PROTOCOL_VERSION_2 header
+
+ private final static byte[] STREAM_HEADER;
+ static {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ SerialOutput oos = new SerialOutput(baos, null);
+ }
+ catch (java.io.IOException e) { }
+ STREAM_HEADER = baos.toByteArray();
+ }
+
+ private ClassCatalog classCatalog;
+
+ /**
+ * Creates a serial output stream.
+ *
+ * @param out is the output stream to which the compact serialized objects
+ * will be written.
+ *
+ * @param classCatalog is the catalog to which the class descriptions for
+ * the serialized objects will be written.
+ */
+ public SerialOutput(OutputStream out, ClassCatalog classCatalog)
+ throws IOException {
+
+ super(out);
+ this.classCatalog = classCatalog;
+
+ // guarantee that we'll always use the same serialization format
+
+ useProtocolVersion(ObjectStreamConstants.PROTOCOL_VERSION_2);
+ }
+
+ // javadoc is inherited
+ protected void writeClassDescriptor(ObjectStreamClass classdesc)
+ throws IOException {
+
+ try {
+ byte[] id = classCatalog.getClassID(classdesc.getName());
+ writeByte(id.length);
+ write(id);
+ } catch (IOException e) {
+ // do not throw IOException from here since ObjectOutputStream
+ // will write the exception to the stream, which causes another
+ // call here, etc.
+ throw new RuntimeExceptionWrapper(e);
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+
+ /**
+ * Returns the fixed stream header used for all serialized streams in
+ * PROTOCOL_VERSION_2 format. To save space this header can be removed and
+ * serialized streams before storage and inserted before deserializing.
+ * {@link SerialOutput} always uses PROTOCOL_VERSION_2 serialization format
+ * to guarantee that this header is fixed. {@link SerialFormat} removes
+ * this header from serialized streams automatically.
+ *
+ * @return the fixed stream header.
+ */
+ public static byte[] getStreamHeader() {
+
+ return STREAM_HEADER;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialBinding.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialBinding.java
new file mode 100644
index 000000000..66611e343
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialBinding.java
@@ -0,0 +1,118 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialSerialBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import java.io.IOException;
+
+/**
+ * An abstract entity binding that uses a serial key and a serial value. This
+ * class takes care of serializing and deserializing the key and value data
+ * automatically. Its three abstract methods must be implemented by a concrete
+ * subclass to convert the deserialized objects to/from an entity object.
+ * <ul>
+ * <li> {@link #dataToObject(Object,Object)} </li>
+ * <li> {@link #objectToKey(Object)} </li>
+ * <li> {@link #objectToValue(Object)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class SerialSerialBinding implements EntityBinding {
+
+ protected SerialFormat keyFormat;
+ protected SerialFormat valueFormat;
+
+ /**
+ * Creates a serial-serial entity binding.
+ *
+ * @param keyFormat is the key format.
+ *
+ * @param valueFormat is the value format.
+ */
+ public SerialSerialBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ this.keyFormat = keyFormat;
+ this.valueFormat = valueFormat;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer key, DataBuffer value)
+ throws IOException {
+
+ return dataToObject(keyFormat.dataToObject(key),
+ valueFormat.dataToObject(value));
+ }
+
+ // javadoc is inherited
+ public void objectToKey(Object object, DataBuffer key)
+ throws IOException {
+
+ object = objectToKey(object);
+ keyFormat.objectToData(object, key);
+ }
+
+ // javadoc is inherited
+ public void objectToValue(Object object, DataBuffer value)
+ throws IOException {
+
+ object = objectToValue(object);
+ valueFormat.objectToData(object, value);
+ }
+
+ // javadoc is inherited
+ public DataFormat getKeyFormat() {
+
+ return keyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ /**
+ * Constructs an entity object from deserialized key and value data
+ * objects.
+ *
+ * @param keyInput is the deserialized key data object.
+ *
+ * @param valueInput is the deserialized value data object.
+ *
+ * @return the entity object constructed from the key and value.
+ */
+ public abstract Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException;
+
+ /**
+ * Extracts a key object from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @return the deserialized key data object.
+ */
+ public abstract Object objectToKey(Object object)
+ throws IOException;
+
+ /**
+ * Extracts a value object from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @return the deserialized value data object.
+ */
+ public abstract Object objectToValue(Object object)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.java
new file mode 100644
index 000000000..8a361d4d6
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/SerialSerialKeyExtractor.java
@@ -0,0 +1,131 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialSerialKeyExtractor.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import java.io.IOException;
+
+/**
+ * A abstract key extractor that uses a serial key and a serial value. This
+ * class takes care of serializing and deserializing the key and value data
+ * automatically. Its two abstract methods must be implemented by a concrete
+ * subclass to extract/clear the index key from the deserialized data objects.
+ * <ul>
+ * <li> {@link #extractIndexKey(Object,Object)} </li>
+ * <li> {@link #clearIndexKey(Object)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class SerialSerialKeyExtractor implements KeyExtractor {
+
+ protected SerialFormat primaryKeyFormat;
+ protected SerialFormat valueFormat;
+ protected SerialFormat indexKeyFormat;
+
+ /**
+ * Creates a serial-serial entity binding.
+ *
+ * @param primaryKeyFormat is the primary key format, or null if no
+ * primary key data is used to construct the index key.
+ *
+ * @param valueFormat is the value format, or null if no value data is
+ * used to construct the index key.
+ *
+ * @param indexKeyFormat is the index key format.
+ */
+ public SerialSerialKeyExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ this.primaryKeyFormat = primaryKeyFormat;
+ this.valueFormat = valueFormat;
+ this.indexKeyFormat = indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getPrimaryKeyFormat() {
+
+ return primaryKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getIndexKeyFormat() {
+
+ return indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public void extractIndexKey(DataBuffer primaryKeyData,
+ DataBuffer valueData,
+ DataBuffer indexKeyData)
+ throws IOException {
+
+ Object primaryKeyInput = ((primaryKeyFormat != null)
+ ? primaryKeyFormat.dataToObject(primaryKeyData)
+ : null);
+ Object valueInput = ((valueFormat != null)
+ ? valueFormat.dataToObject(valueData)
+ : null);
+ Object indexKey = extractIndexKey(primaryKeyInput, valueInput);
+ if (indexKey != null)
+ indexKeyFormat.objectToData(indexKey, indexKeyData);
+ else
+ indexKeyData.setData(null, 0, 0);
+ }
+
+ // javadoc is inherited
+ public void clearIndexKey(DataBuffer valueData)
+ throws IOException {
+
+ Object value = valueFormat.dataToObject(valueData);
+ value = clearIndexKey(value);
+ if (value != null)
+ valueFormat.objectToData(value, valueData);
+ }
+
+ /**
+ * Extracts the index key data object from primary key and value data
+ * objects.
+ *
+ * @param primaryKeyData is the deserialized source primary key data, or
+ * null if no primary key data is used to construct the index key.
+ *
+ * @param valueData is the deserialized source value data, or null if no
+ * value data is used to construct the index key.
+ *
+ * @return the destination index key data object, or null to indicate that
+ * the key is not present.
+ */
+ public abstract Object extractIndexKey(Object primaryKeyData,
+ Object valueData)
+ throws IOException;
+
+ /**
+ * Clears the index key in a value data object.
+ *
+ * @param valueData is the source and destination value data object.
+ *
+ * @return the destination value data object, or null to indicate that the
+ * key is not present and no change is necessary. The value returned may
+ * be the same object passed as the valueData parameter or a newly created
+ * object.
+ */
+ public abstract Object clearIndexKey(Object valueData)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialBinding.java b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialBinding.java
new file mode 100644
index 000000000..db173e99e
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialBinding.java
@@ -0,0 +1,130 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A abstract entity binding that uses a tuple key and a serial value. This
+ * class takes care of serializing and deserializing the value data,
+ * and converting the key data to/from {@link TupleInput} and {@link
+ * TupleOutput} objects. Its three abstract methods must be implemented by a
+ * concrete subclass to convert these objects to/from an entity object.
+ * <ul>
+ * <li> {@link #dataToObject(TupleInput,Object)} </li>
+ * <li> {@link #objectToKey(Object,TupleOutput)} </li>
+ * <li> {@link #objectToValue(Object)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class TupleSerialBinding implements EntityBinding {
+
+ protected TupleFormat keyFormat;
+ protected SerialFormat valueFormat;
+
+ /**
+ * Creates a tuple-serial entity binding.
+ *
+ * @param keyFormat is the key format.
+ *
+ * @param valueFormat is the value format.
+ */
+ public TupleSerialBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ this.keyFormat = keyFormat;
+ this.valueFormat = valueFormat;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer key, DataBuffer value)
+ throws IOException {
+
+ return dataToObject(keyFormat.dataToInput(key),
+ valueFormat.dataToObject(value));
+ }
+
+ // javadoc is inherited
+ public void objectToKey(Object object, DataBuffer key)
+ throws IOException {
+
+ TupleOutput output = keyFormat.newOutput();
+ objectToKey(object, output);
+ keyFormat.outputToData(output, key);
+ }
+
+ // javadoc is inherited
+ public void objectToValue(Object object, DataBuffer value)
+ throws IOException {
+
+ object = objectToValue(object);
+ valueFormat.objectToData(object, value);
+ }
+
+ // javadoc is inherited
+ public DataFormat getKeyFormat() {
+
+ return keyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ /**
+ * Constructs an entity object from {@link TupleInput} key data and
+ * deserialized value data objects.
+ *
+ * @param keyInput is the {@link TupleInput} key data object.
+ *
+ * @param valueInput is the deserialized value data object.
+ *
+ * @return the entity object constructed from the key and value.
+ *
+ * @throws IOException if data cannot be read or written.
+ */
+ public abstract Object dataToObject(TupleInput keyInput, Object valueInput)
+ throws IOException;
+
+ /**
+ * Extracts a key tuple from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @param output is the {@link TupleOutput} to which the key should be
+ * written.
+ *
+ * @throws IOException if data cannot be read or written.
+ */
+ public abstract void objectToKey(Object object, TupleOutput output)
+ throws IOException;
+
+ /**
+ * Extracts a value object from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @return the deserialized value data object.
+ *
+ * @throws IOException if data cannot be read or written.
+ */
+ public abstract Object objectToValue(Object object)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.java
new file mode 100644
index 000000000..9b8bde2d6
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialKeyExtractor.java
@@ -0,0 +1,133 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialKeyExtractor.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A abstract key extractor that uses a tuple key and a serial value. This
+ * class takes care of serializing and deserializing the value data, and
+ * converting the key data to/from {@link TupleInput} and {@link TupleOutput}
+ * objects. Its two abstract methods must be implemented by a concrete
+ * subclass to extract and clear the index key using these objects.
+ * <ul>
+ * <li> {@link #extractIndexKey(TupleInput,Object,TupleOutput)} </li>
+ * <li> {@link #clearIndexKey(Object)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class TupleSerialKeyExtractor implements KeyExtractor {
+
+ protected TupleFormat primaryKeyFormat;
+ protected SerialFormat valueFormat;
+ protected TupleFormat indexKeyFormat;
+
+ /**
+ * Creates a tuple-serial key extractor.
+ *
+ * @param primaryKeyFormat is the primary key format, or null if no
+ * primary key data is used to construct the index key.
+ *
+ * @param valueFormat is the value format, or null if no value data is
+ * used to construct the index key.
+ *
+ * @param indexKeyFormat is the index key format.
+ */
+ public TupleSerialKeyExtractor(TupleFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ this.primaryKeyFormat = primaryKeyFormat;
+ this.valueFormat = valueFormat;
+ this.indexKeyFormat = indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getPrimaryKeyFormat() {
+
+ return primaryKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getIndexKeyFormat() {
+
+ return indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public void extractIndexKey(DataBuffer primaryKeyData,
+ DataBuffer valueData,
+ DataBuffer indexKeyData)
+ throws IOException {
+
+ TupleOutput output = indexKeyFormat.newOutput();
+ TupleInput primaryKeyInput = ((primaryKeyFormat != null)
+ ? primaryKeyFormat.dataToInput(primaryKeyData)
+ : null);
+ Object valueInput = ((valueFormat != null)
+ ? valueFormat.dataToObject(valueData)
+ : null);
+ extractIndexKey(primaryKeyInput, valueInput, output);
+ indexKeyFormat.outputToData(output, indexKeyData);
+ }
+
+ // javadoc is inherited
+ public void clearIndexKey(DataBuffer valueData)
+ throws IOException {
+
+ Object value = valueFormat.dataToObject(valueData);
+ clearIndexKey(value);
+ valueFormat.objectToData(value, valueData);
+ }
+
+ /**
+ * Extracts the index key data from primary key tuple data and deserialized
+ * value data.
+ *
+ * @param primaryKeyInput is the {@link TupleInput} for the primary key
+ * data, or null if no primary key data is used to construct the index key.
+ *
+ * @param valueInput is the deserialized value data, or null if no value
+ * data is used to construct the index key.
+ *
+ * @param indexKeyOutput is the destination index key tuple. For index
+ * keys which are optionally present, no tuple data should be output to
+ * indicate that the key is not present or null.
+ */
+ public abstract void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException;
+
+ /**
+ * Clears the index key in the deserialized value data.
+ *
+ * @param valueInputOutput is the source and destination deserialized value
+ * data. On entry this contains the index key to be cleared. It should be
+ * changed by this method such that {@link #extractIndexKey} will extract a
+ * null key (not output any tuple data). Other data in the value object
+ * should remain unchanged.
+ */
+ public abstract void clearIndexKey(Object valueInputOutput)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.java b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.java
new file mode 100644
index 000000000..61d15fabf
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledBinding.java
@@ -0,0 +1,80 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialMarshalledBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A concrete entity binding that uses the {@link MarshalledTupleKeyEntity}
+ * interface. It works by calling the methods of the {@link
+ * MarshalledTupleKeyEntity} interface, which must be implemented by the entity
+ * class, to convert between the key/value data and entity object.
+ *
+ * <p> The binding is "tricky" in that it uses the entity class for both the
+ * stored data value and the combined entity object. To do this, the entity's
+ * key field(s) are transient and are set by the binding after the data object
+ * has been deserialized. This avoids the use of a "value" class completely.
+ * </p>
+ *
+ * @author Mark Hayes
+ * @see MarshalledTupleKeyEntity
+ */
+public class TupleSerialMarshalledBinding extends TupleSerialBinding {
+
+ /**
+ * Creates a tuple-serial marshalled binding object.
+ *
+ * @param keyFormat is the key data format.
+ *
+ * @param valueFormat is the value data format.
+ */
+ public TupleSerialMarshalledBinding(TupleFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(TupleInput tupleInput, Object javaInput)
+ throws IOException {
+
+ // Creates the entity by combining the stored key and value.
+ // This "tricky" binding returns the stored value as the entity, but
+ // first it sets the transient key fields from the stored key.
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) javaInput;
+
+ if (tupleInput != null) { // may be null if not used by key extractor
+ entity.unmarshalPrimaryKey(tupleInput);
+ }
+ return entity;
+ }
+
+ // javadoc is inherited
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ // Creates the stored key from the entity.
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) object;
+ entity.marshalPrimaryKey(output);
+ }
+
+ // javadoc is inherited
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ // Returns the entity as the stored value. There is nothing to do here
+ // since the entity's key fields are transient.
+ return object;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.java
new file mode 100644
index 000000000..8fb272d05
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/TupleSerialMarshalledKeyExtractor.java
@@ -0,0 +1,91 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialMarshalledKeyExtractor.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A concrete key extractor that works in conjunction with a {@link
+ * TupleSerialMarshalledBinding}. This key extractor works by calling the
+ * methods of the {@link MarshalledTupleKeyEntity} interface to extract and
+ * clear the index key data.
+ *
+ * @author Mark Hayes
+ */
+public class TupleSerialMarshalledKeyExtractor
+ extends TupleSerialKeyExtractor {
+
+ private TupleSerialMarshalledBinding binding;
+ private String keyName;
+
+ /**
+ * Creates a tuple-serial marshalled key extractor.
+ *
+ * @param binding is the binding used for the tuple-serial entity.
+ *
+ * @param indexKeyFormat is the index key format.
+ *
+ * @param keyName is the key name passed to the {@link
+ * MarshalledTupleKeyEntity#marshalIndexKey} method to identify the index
+ * key.
+ *
+ * @param usePrimaryKey is true if the primary key data is used to
+ * construct the index key.
+ *
+ * @param useValue is true if the value data is used to construct the index
+ * key.
+ */
+ public TupleSerialMarshalledKeyExtractor(
+ TupleSerialMarshalledBinding binding,
+ TupleFormat indexKeyFormat,
+ String keyName,
+ boolean usePrimaryKey,
+ boolean useValue) {
+
+ super(usePrimaryKey ? ((TupleFormat) binding.getKeyFormat()) : null,
+ useValue ? ((SerialFormat) binding.getValueFormat()) : null,
+ indexKeyFormat);
+ this.binding = binding;
+ this.keyName = keyName;
+
+ if (valueFormat == null)
+ throw new IllegalArgumentException("valueFormat may not be null");
+ }
+
+ // javadoc is inherited
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ Object valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity)
+ binding.dataToObject(primaryKeyInput, valueInput);
+
+ // the primary key is unmarshalled before marshalling the index key, to
+ // account for cases where the index key includes data taken from the
+ // primary key
+
+ entity.marshalIndexKey(keyName, indexKeyOutput);
+ }
+
+ // javadoc is inherited
+ public void clearIndexKey(Object valueInput)
+ throws IOException {
+
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity)
+ binding.dataToObject(null, valueInput);
+
+ entity.clearIndexKey(keyName);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/serial/package.html b/db/java/src/com/sleepycat/bdb/bind/serial/package.html
new file mode 100644
index 000000000..1dd4371e2
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/serial/package.html
@@ -0,0 +1,6 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:11 jbj Exp $ -->
+<html>
+<body>
+<p>Formats and bindings that use Java serialization
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.java b/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.java
new file mode 100644
index 000000000..9e1a4f1c1
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleData.java
@@ -0,0 +1,48 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledTupleData.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import java.io.IOException;
+
+/**
+ * A marshalling interface implemented by key, value or entity classes that
+ * have tuple data. Key classes implement this interface to marshal their key
+ * data. Value or entity classes implement this interface to marshal their
+ * value data. Implementations of this interface must have a public no
+ * arguments contructor so that they can be instantiated by a binding,
+ * prior to calling the {@link #unmarshalData} method.
+ *
+ * <p>Note that implementing this interface is not necessary when the data is a
+ * Java simple type, for example: String, Integer, etc. These types can be
+ * used with built-in bindings returned by {@link
+ * TupleBinding#getPrimitiveBinding}.</p>
+ *
+ * @author Mark Hayes
+ * @see TupleTupleMarshalledBinding
+ * @see TupleTupleMarshalledKeyExtractor
+ */
+public interface MarshalledTupleData {
+
+ /**
+ * Construct the key or value tuple data from the key or value object.
+ *
+ * @param dataOutput is the output tuple.
+ */
+ void marshalData(TupleOutput dataOutput)
+ throws IOException;
+
+ /**
+ * Construct the key or value object from the key or value tuple data.
+ *
+ * @param dataInput is the input tuple.
+ */
+ void unmarshalData(TupleInput dataInput)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.java b/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.java
new file mode 100644
index 000000000..a8329941f
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/MarshalledTupleKeyEntity.java
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledTupleKeyEntity.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import java.io.IOException;
+
+/**
+ * A marshalling interface implemented by entity classes that have tuple data
+ * keys. Since MarshalledTupleKeyEntity objects are instantiated by Java
+ * serialization, no particular contructor is required.
+ *
+ * <p>Note that a marshalled tuple key extractor is somewhat less efficient
+ * than a non-marshalled key tuple extractor because more conversions are
+ * needed. A marshalled key extractor must convert the data to an object in
+ * order to extract the key data, while an unmarshalled key extractor does
+ * not.</p>
+ *
+ * @author Mark Hayes
+ * @see TupleTupleMarshalledBinding
+ * @see TupleTupleMarshalledKeyExtractor
+ * @see com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding
+ * @see com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor
+ */
+public interface MarshalledTupleKeyEntity {
+
+ /**
+ * Extracts the entity's primary key and writes it to the key output.
+ *
+ * @param keyOutput is the output tuple.
+ */
+ void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException;
+
+ /**
+ * Completes construction of the entity by setting its primary key from the
+ * stored primary key.
+ *
+ * @param keyInput is the input tuple.
+ */
+ void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException;
+
+ /**
+ * Extracts the entity's index key and writes it to the key output.
+ *
+ * @param keyName identifies the index key.
+ *
+ * @param keyOutput is the output tuple.
+ */
+ void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException;
+
+ /**
+ * Clears the entity's index key value for the given key name.
+ * This method is called when the entity for this foreign key is
+ * deleted, if ON_DELETE_CLEAR was specified when creating the index.
+ *
+ * @param keyName identifies the index key.
+ */
+ void clearIndexKey(String keyName)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleBinding.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleBinding.java
new file mode 100644
index 000000000..63c91fb23
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleBinding.java
@@ -0,0 +1,312 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleBinding.java,v 1.1 2003/12/15 21:44:11 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * An abstract tuple binding for tuple keys or values. This class takes care of
+ * converting the data to/from {@link TupleInput} and {@link TupleOutput}
+ * objects. Its two abstract methods must be implemented by a concrete
+ * subclass to convert between tuples and key or value objects.
+ * <ul>
+ * <li> {@link #dataToObject(TupleInput)} </li>
+ * <li> {@link #objectToData(Object,TupleOutput)} </li>
+ * </ul>
+ *
+ * <p>For keys or values which are Java primitive classes (String, Integer,
+ * etc) {@link #getPrimitiveBinding} may be used to return a builtin tuple
+ * binding. A custom tuple binding for these types is not needed.</p>
+ *
+ * @author Mark Hayes
+ */
+public abstract class TupleBinding implements DataBinding {
+
+ protected TupleFormat format;
+
+ /**
+ * Creates a tuple binding.
+ *
+ * @param format is the format of the new binding.
+ */
+ public TupleBinding(TupleFormat format) {
+
+ this.format = format;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ return dataToObject(format.dataToInput(data));
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ TupleOutput output = format.newOutput();
+ objectToData(object, output);
+ format.outputToData(output, data);
+ }
+
+ // javadoc is inherited
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+
+ /**
+ * Constructs a key or value object from {@link TupleInput} data.
+ *
+ * @param input is the tuple key or value data.
+ *
+ * @return the key or value object constructed from the data.
+ */
+ public abstract Object dataToObject(TupleInput input)
+ throws IOException;
+
+ /**
+ * Converts a key or value object to a tuple data.
+ *
+ * @param object is the key or value object.
+ *
+ * @param output is the tuple data to which the key or value should be
+ * written.
+ */
+ public abstract void objectToData(Object object, TupleOutput output)
+ throws IOException;
+
+ /**
+ * Creates a tuple binding for a primitive Java class. The following
+ * Java classes are supported.
+ * <ul>
+ * <li><code>String</code></li>
+ * <li><code>Integer</code></li>
+ * </ul>
+ *
+ * @param cls is the primitive Java class.
+ *
+ * @param format is the tuple format for the new binding.
+ *
+ * @return a new building for the primitive class or null if the cls
+ * parameter is not one of the supported classes.
+ */
+ public static TupleBinding getPrimitiveBinding(Class cls,
+ TupleFormat format) {
+
+ if (cls == String.class)
+ return new StringBinding(format);
+ else if (cls == Character.class)
+ return new CharacterBinding(format);
+ else if (cls == Boolean.class)
+ return new BooleanBinding(format);
+ else if (cls == Byte.class)
+ return new ByteBinding(format);
+ else if (cls == Short.class)
+ return new ShortBinding(format);
+ else if (cls == Integer.class)
+ return new IntegerBinding(format);
+ else if (cls == Long.class)
+ return new LongBinding(format);
+ else if (cls == Float.class)
+ return new FloatBinding(format);
+ else if (cls == Double.class)
+ return new DoubleBinding(format);
+ else
+ return null;
+ }
+
+ private static class StringBinding extends TupleBinding {
+
+ public StringBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return input.readString();
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeString((String) object);
+ }
+ }
+
+ private static class CharacterBinding extends TupleBinding {
+
+ public CharacterBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Character(input.readChar());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeChar(((Character) object).charValue());
+ }
+ }
+
+ private static class BooleanBinding extends TupleBinding {
+
+ public BooleanBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Boolean(input.readBoolean());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeBoolean(((Boolean) object).booleanValue());
+ }
+ }
+
+ private static class ByteBinding extends TupleBinding {
+
+ public ByteBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Byte(input.readByte());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeByte(((Number) object).byteValue());
+ }
+ }
+
+ private static class ShortBinding extends TupleBinding {
+
+ public ShortBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Short(input.readShort());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeShort(((Number) object).shortValue());
+ }
+ }
+
+ private static class IntegerBinding extends TupleBinding {
+
+ public IntegerBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Integer(input.readInt());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeInt(((Number) object).intValue());
+ }
+ }
+
+ private static class LongBinding extends TupleBinding {
+
+ public LongBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Long(input.readLong());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeLong(((Number) object).longValue());
+ }
+ }
+
+ private static class FloatBinding extends TupleBinding {
+
+ public FloatBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Float(input.readFloat());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeFloat(((Number) object).floatValue());
+ }
+ }
+
+ private static class DoubleBinding extends TupleBinding {
+
+ public DoubleBinding(TupleFormat format) {
+
+ super(format);
+ }
+
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ return new Double(input.readDouble());
+ }
+
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ output.writeDouble(((Number) object).doubleValue());
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleFormat.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleFormat.java
new file mode 100644
index 000000000..056dd3749
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleFormat.java
@@ -0,0 +1,92 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleFormat.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import java.io.IOException;
+
+/**
+ * The format for tuple data. In addition to identifying a tuple format
+ * this class provides utility methods for use by bindings.
+ *
+ * @author Mark Hayes
+ */
+public class TupleFormat implements DataFormat {
+
+ /**
+ * Creates a tuple format.
+ */
+ public TupleFormat() {
+ }
+
+ /**
+ * Utility method for use by bindings to create a tuple output object.
+ *
+ * @return a new tuple output object.
+ */
+ public final TupleOutput newOutput() {
+
+ return new TupleOutput();
+ }
+
+ /**
+ * Utility method to set the data in a data buffer to the data in a tuple
+ * output object.
+ *
+ * @param output is the source tuple output object.
+ *
+ * @param data is the destination data buffer.
+ */
+ public final void outputToData(TupleOutput output, DataBuffer data) {
+
+ data.setData(output.getBufferBytes(), output.getBufferOffset(),
+ output.getBufferLength());
+ }
+
+ /**
+ * Utility method to set the data in a data buffer to the data in a tuple
+ * input object. The tuple input for a buffer is cached in the buffer's
+ * data formation property.
+ *
+ * @param input is the source tuple input object.
+ *
+ * @param data is the destination data buffer.
+ */
+ public final void inputToData(TupleInput input, DataBuffer data) {
+
+ data.setData(input.getBufferBytes(), input.getBufferOffset(),
+ input.getBufferLength());
+ data.setDataFormation(input);
+ }
+
+ /**
+ * Utility method to create a new tuple input object for reading the data
+ * from a given buffer. The tuple input for a buffer is cached in the
+ * buffer's data formation property. If an existing input is reused, it
+ * is reset before returning it.
+ *
+ * @param data is the source data buffer.
+ *
+ * @return the new tuple input object.
+ */
+ public final TupleInput dataToInput(DataBuffer data) {
+
+ TupleInput input = (TupleInput) data.getDataFormation();
+ if (input == null) {
+ input = new TupleInput(data.getDataBytes(), data.getDataOffset(),
+ data.getDataLength());
+ data.setDataFormation(input);
+ } else {
+ input.reset();
+ }
+ return input;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInput.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInput.java
new file mode 100644
index 000000000..86b5db434
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInput.java
@@ -0,0 +1,451 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleInput.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.util.UtfOps;
+import com.sleepycat.bdb.util.FastInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+
+/**
+ * Used by tuple bindings to read tuple data.
+ *
+ * <p>This class has many methods that have the same signatures as methods in
+ * the {@link java.io.DataInput} interface. The reason this class does not
+ * implement {@link java.io.DataInput} is because it would break the interface
+ * contract for those methods because of data format differences.</p>
+ *
+ * <p>Signed numbers are stored in the buffer in MSB (most significant byte
+ * first) order with their sign bit (high-order bit) inverted to cause negative
+ * numbers to be sorted first when comparing values as unsigned byte arrays,
+ * as done in a database. Unsigned numbers, including characters, are stored
+ * in MSB order with no change to their sign bit.</p>
+ *
+ * <p>Strings and character arrays are stored either as a fixed length array of
+ * unicode characters, where the length must be known by the application, or as
+ * a null-terminated UTF byte array.</p>
+ *
+ * <p>Floats and doubles are stored in standard integer-bit representation and
+ * are therefore not ordered by numeric value.</p>
+ *
+ * @author Mark Hayes
+ */
+public class TupleInput extends FastInputStream {
+
+ /**
+ * Creates a tuple input object for reading a byte array of tuple data. A
+ * reference to the byte array will be kept by this object (it will not be
+ * copied) and therefore the byte array should not be modified while this
+ * object is in use.
+ *
+ * @param buffer is the byte array to be read and should contain data in
+ * tuple format.
+ */
+ public TupleInput(byte[] buffer) {
+
+ super(buffer);
+ }
+
+ /**
+ * Creates a tuple input object for reading a byte array of tuple data at
+ * a given offset for a given length. A reference to the byte array will
+ * be kept by this object (it will not be copied) and therefore the byte
+ * array should not be modified while this object is in use.
+ *
+ * @param buffer is the byte array to be read and should contain data in
+ * tuple format.
+ *
+ * @param offset is the byte offset at which to begin reading.
+ *
+ * @param length is the number of bytes to be read.
+ */
+ public TupleInput(byte[] buffer, int offset, int length) {
+
+ super(buffer, offset, length);
+ }
+
+ /**
+ * Creates a tuple input object from the data contained in a tuple output
+ * object. A reference to the tuple output's byte array will be kept by
+ * this object (it will not be copied) and therefore the tuple output
+ * object should not be modified while this object is in use.
+ *
+ * @param output is the tuple output object containing the data to be read.
+ */
+ public TupleInput(TupleOutput output) {
+
+ super(output.getBufferBytes(), output.getBufferOffset(),
+ output.getBufferLength());
+ }
+
+ // --- begin DataInput compatible methods ---
+
+ /**
+ * Reads a null-terminated UTF string from the data buffer and converts
+ * the data from UTF to Unicode.
+ * Reads values that were written using {@link
+ * TupleOutput#writeString(String)}.
+ *
+ * @return the converted string.
+ *
+ * @throws IOException if no null terminating byte is found in the buffer
+ * or malformed UTF data is encountered.
+ */
+ public final String readString() throws IOException {
+
+ byte[] buf = getBufferBytes();
+ int off = getBufferOffset();
+ int byteLen = UtfOps.getZeroTerminatedByteLength(buf, off);
+ skip(byteLen + 1);
+ return UtfOps.bytesToString(buf, off, byteLen);
+ }
+
+ /**
+ * Reads a char (two byte) unsigned value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeChar}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final char readChar() throws IOException {
+
+ return (char) readUnsignedShort();
+ }
+
+ /**
+ * Reads a boolean (one byte) unsigned value from the buffer and returns
+ * true if it is non-zero and false if it is zero.
+ * Reads values that were written using {@link TupleOutput#writeBoolean}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final boolean readBoolean() throws IOException {
+
+ int c = read();
+ if (c < 0) {
+ throw new EOFException();
+ }
+ return (c != 0);
+ }
+
+ /**
+ * Reads a signed byte (one byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeByte}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final byte readByte() throws IOException {
+
+ byte val = (byte) readUnsignedByte();
+ if (val < 0)
+ val &= (byte) ~0x80;
+ else
+ val |= (byte) 0x80;
+ return val;
+ }
+
+ /**
+ * Reads a signed short (two byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeShort}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final short readShort() throws IOException {
+
+ short val = (short) readUnsignedShort();
+ if (val < 0)
+ val &= (short) ~0x8000;
+ else
+ val |= (short) 0x8000;
+ return val;
+ }
+
+ /**
+ * Reads a signed int (four byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeInt}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final int readInt() throws IOException {
+
+ int val = (int) readUnsignedInt();
+ if (val < 0)
+ val &= ~0x80000000;
+ else
+ val |= 0x80000000;
+ return val;
+ }
+
+ /**
+ * Reads a signed long (eight byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeLong}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final long readLong() throws IOException {
+
+ long val = readUnsignedLong();
+ if (val < 0)
+ val &= ~0x8000000000000000L;
+ else
+ val |= 0x8000000000000000L;
+ return val;
+ }
+
+ /**
+ * Reads a signed float (four byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeFloat}.
+ * <code>Float.intBitsToFloat</code> is used to convert the signed int
+ * value.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final float readFloat() throws IOException {
+
+ return Float.intBitsToFloat((int) readUnsignedInt());
+ }
+
+ /**
+ * Reads a signed double (eight byte) value from the buffer.
+ * Reads values that were written using {@link TupleOutput#writeDouble}.
+ * <code>Double.longBitsToDouble</code> is used to convert the signed long
+ * value.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final double readDouble() throws IOException {
+
+ return Double.longBitsToDouble(readUnsignedLong());
+ }
+
+ /**
+ * Reads an unsigned byte (one byte) value from the buffer.
+ * Reads values that were written using {@link
+ * TupleOutput#writeUnsignedByte}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final int readUnsignedByte() throws IOException {
+
+ int c = read();
+ if (c < 0) {
+ throw new EOFException();
+ }
+ return c;
+ }
+
+ /**
+ * Reads an unsigned short (two byte) value from the buffer.
+ * Reads values that were written using {@link
+ * TupleOutput#writeUnsignedShort}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final int readUnsignedShort() throws IOException {
+
+ int c1 = read();
+ int c2 = read();
+ if ((c1 | c2) < 0) {
+ throw new EOFException();
+ }
+ return ((c1 << 8) | c2);
+ }
+
+ // --- end DataInput compatible methods ---
+
+ /**
+ * Reads an unsigned int (four byte) value from the buffer.
+ * Reads values that were written using {@link
+ * TupleOutput#writeUnsignedInt}.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final long readUnsignedInt() throws IOException {
+
+ long c1 = read();
+ long c2 = read();
+ long c3 = read();
+ long c4 = read();
+ if ((c1 | c2 | c3 | c4) < 0) {
+ throw new EOFException();
+ }
+ return ((c1 << 24) | (c2 << 16) | (c3 << 8) | c4);
+ }
+
+ /**
+ * This method is private since an unsigned long cannot be treated as
+ * such in Java, nor converted to a BigInteger of the same value.
+ */
+ private final long readUnsignedLong() throws IOException {
+
+ long c1 = read();
+ long c2 = read();
+ long c3 = read();
+ long c4 = read();
+ long c5 = read();
+ long c6 = read();
+ long c7 = read();
+ long c8 = read();
+ if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) < 0) {
+ throw new EOFException();
+ }
+ return ((c1 << 56) | (c2 << 48) | (c3 << 40) | (c4 << 32) |
+ (c5 << 24) | (c6 << 16) | (c7 << 8) | c8);
+ }
+
+ /**
+ * Reads the specified number of bytes from the buffer, converting each
+ * unsigned byte value to a character of the resulting string.
+ * Reads values that were written using {@link TupleOutput#writeBytes}.
+ * Only characters with values below 0x100 may be read using this method.
+ *
+ * @param length is the number of bytes to be read.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final String readBytes(int length) throws IOException {
+
+ StringBuffer buf = new StringBuffer(length);
+ for (int i = 0; i < length; i++) {
+ int c = read();
+ if (c < 0) {
+ throw new EOFException();
+ }
+ buf.append((char) c);
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Reads the specified number of characters from the buffer, converting
+ * each two byte unsigned value to a character of the resulting string.
+ * Reads values that were written using {@link TupleOutput#writeChars}.
+ *
+ * @param length is the number of characters to be read.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final String readChars(int length) throws IOException {
+
+ StringBuffer buf = new StringBuffer(length);
+ for (int i = 0; i < length; i++) {
+ buf.append(readChar());
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Reads the specified number of bytes from the buffer, converting each
+ * unsigned byte value to a character of the resulting array.
+ * Reads values that were written using {@link TupleOutput#writeBytes}.
+ * Only characters with values below 0x100 may be read using this method.
+ *
+ * @param chars is the array to receive the data and whose length is used
+ * to determine the number of bytes to be read.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final void readBytes(char[] chars) throws IOException {
+
+ for (int i = 0; i < chars.length; i++) {
+ int c = read();
+ if (c < 0) {
+ throw new EOFException();
+ }
+ chars[i] = (char) c;
+ }
+ }
+
+ /**
+ * Reads the specified number of characters from the buffer, converting
+ * each two byte unsigned value to a character of the resulting array.
+ * Reads values that were written using {@link TupleOutput#writeChars}.
+ *
+ * @param chars is the array to receive the data and whose length is used
+ * to determine the number of characters to be read.
+ *
+ * @return the value read from the buffer.
+ *
+ * @throws IOException if not enough bytes are available in the buffer.
+ */
+ public final void readChars(char[] chars) throws IOException {
+
+ for (int i = 0; i < chars.length; i++) {
+ chars[i] = readChar();
+ }
+ }
+
+ /**
+ * Reads the specified number of UTF characters string from the data
+ * buffer and converts the data from UTF to Unicode.
+ * Reads values that were written using {@link
+ * TupleOutput#writeString(char[])}.
+ *
+ * @param length is the number of characters to be read.
+ *
+ * @return the converted string.
+ *
+ * @throws IOException if not enough bytes are available in the buffer
+ * or malformed UTF data is encountered.
+ */
+ public final String readString(int length) throws IOException {
+
+ char[] chars = new char[length];
+ readString(chars);
+ return new String(chars);
+ }
+
+ /**
+ * Reads the specified number of UTF characters string from the data
+ * buffer and converts the data from UTF to Unicode.
+ * Reads values that were written using {@link
+ * TupleOutput#writeString(char[])}.
+ *
+ * @param chars is the array to receive the data and whose length is used
+ * to determine the number of characters to be read.
+ *
+ * @return the converted string.
+ *
+ * @throws IOException if not enough bytes are available in the buffer
+ * or malformed UTF data is encountered.
+ */
+ public final void readString(char[] chars) throws IOException {
+
+ byte[] buf = getBufferBytes();
+ off = UtfOps.bytesToChars(buf, off, chars, 0, chars.length, false);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInputBinding.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInputBinding.java
new file mode 100644
index 000000000..d5d630d19
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleInputBinding.java
@@ -0,0 +1,62 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleInputBinding.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * A concrete tuple binding for keys or values which are {@link TupleInput}
+ * objects. This binding is used when tuples themselves are the data object,
+ * rather than using application defined objects. A {@link TupleInput} must
+ * always be used. To convert a {@link TupleOutput} to a {@link TupleInput},
+ * use the {@link TupleInput#TupleInput(TupleOutput)} constructor.
+ *
+ * @author Mark Hayes
+ */
+public class TupleInputBinding implements DataBinding {
+
+ protected TupleFormat format;
+
+ /**
+ * Creates a tuple input binding.
+ *
+ * @param format is the format of the new binding.
+ */
+ public TupleInputBinding(TupleFormat format) {
+
+ this.format = format;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ return format.dataToInput(data);
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ format.inputToData((TupleInput) object, data);
+ }
+
+ // javadoc is inherited
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.java
new file mode 100644
index 000000000..97e6bff59
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleMarshalledBinding.java
@@ -0,0 +1,76 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleMarshalledBinding.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+
+/**
+ * A concrete key or value binding that uses the {@link MarshalledTupleData}
+ * interface. It works by calling the methods of the {@link
+ * MarshalledTupleData} interface, which must be implemented by the key or
+ * value class, to convert between the key or value data and the object.
+ * use the {@link TupleInput#TupleInput(TupleOutput)} constructor.
+ *
+ * @author Mark Hayes
+ */
+public class TupleMarshalledBinding extends TupleBinding {
+
+ private Class cls;
+
+ /**
+ * Creates a tuple marshalled binding object.
+ *
+ * <p>The given class is used to instantiate key or value objects using
+ * {@link Class#forName}, and therefore must be a public class and have a
+ * public no-arguments constructor. It must also implement the {@link
+ * MarshalledTupleData} interface.</p>
+ *
+ * @param format is the format of the new binding.
+ *
+ * @param cls is the class of the key or value objects.
+ */
+ public TupleMarshalledBinding(TupleFormat format, Class cls) {
+
+ super(format);
+ this.cls = cls;
+
+ // The class will be used to instantiate the object.
+ //
+ if (!MarshalledTupleData.class.isAssignableFrom(cls)) {
+ throw new IllegalArgumentException(cls.toString() +
+ " does not implement MarshalledTupleData");
+ }
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(TupleInput input)
+ throws IOException {
+
+ try {
+ MarshalledTupleData obj =
+ (MarshalledTupleData) cls.newInstance();
+ obj.unmarshalData(input);
+ return obj;
+ } catch (IllegalAccessException e) {
+ throw new IOExceptionWrapper(e);
+ } catch (InstantiationException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ // javadoc is inherited
+ public void objectToData(Object object, TupleOutput output)
+ throws IOException {
+
+ MarshalledTupleData obj = (MarshalledTupleData) object;
+ obj.marshalData(output);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleOutput.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleOutput.java
new file mode 100644
index 000000000..2e9bac26a
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleOutput.java
@@ -0,0 +1,375 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleOutput.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.util.UtfOps;
+import com.sleepycat.bdb.util.FastOutputStream;
+import java.io.IOException;
+
+/**
+ * Used by tuple bindings to write tuple data.
+ *
+ * <p>This class has many methods that have the same signatures as methods in
+ * the {@link java.io.DataOutput} interface. The reason this class does not
+ * implement {@link java.io.DataOutput} is because it would break the interface
+ * contract for those methods because of data format differences.</p>
+ *
+ * <p>Signed numbers are stored in the buffer in MSB (most significant byte
+ * first) order with their sign bit (high-order bit) inverted to cause negative
+ * numbers to be sorted first when comparing values as unsigned byte arrays,
+ * as done in a database. Unsigned numbers, including characters, are stored
+ * in MSB order with no change to their sign bit.</p>
+ *
+ * <p>Strings and character arrays are stored either as a fixed length array of
+ * unicode characters, where the length must be known by the application, or as
+ * a null-terminated UTF byte array.</p>
+ *
+ * <p>Floats and doubles are stored in standard integer-bit representation and
+ * are therefore not ordered by numeric value.</p>
+ *
+ * @author Mark Hayes
+ */
+public class TupleOutput extends FastOutputStream {
+
+ /**
+ * Creates a tuple output object for writing a byte array of tuple data.
+ */
+ public TupleOutput() {
+
+ super();
+ }
+
+ /**
+ * Creates a tuple output object for writing a byte array of tuple data,
+ * using a given buffer. A new buffer will be allocated only if the number
+ * of bytes needed is greater than the length of this buffer. A reference
+ * to the byte array will be kept by this object and therefore the byte
+ * array should not be modified while this object is in use.
+ *
+ * @param buffer is the byte array to use as the buffer.
+ */
+ public TupleOutput(byte[] buffer) {
+
+ super(buffer);
+ }
+
+ // --- begin DataOutput compatible methods ---
+
+ /**
+ * Writes the specified bytes to the buffer, converting each character to
+ * an unsigned byte value.
+ * Writes values that can be read using {@link TupleInput#readBytes}.
+ * Only characters with values below 0x100 may be written using this
+ * method, since the high-order 8 bits of all characters are discarded.
+ *
+ * @param val is the string containing the values to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeBytes(String val) throws IOException {
+
+ writeBytes(val.toCharArray());
+ }
+
+ /**
+ * Writes the specified characters to the buffer, converting each character
+ * to a two byte unsigned value.
+ * Writes values that can be read using {@link TupleInput#readChars}.
+ *
+ * @param val is the string containing the characters to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeChars(String val) throws IOException {
+
+ writeChars(val.toCharArray());
+ }
+
+ /**
+ * Writes the specified characters to the buffer, converting each character
+ * to UTF format, and adding a null terminator byte.
+ * Writes values that can be read using {@link TupleInput#readString()}.
+ *
+ * @param val is the string containing the characters to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeString(String val) throws IOException {
+
+ if (val != null) writeString(val.toCharArray());
+ write(0);
+ }
+
+ /**
+ * Writes a char (two byte) unsigned value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readChar}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeChar(int val) throws IOException {
+
+ write((byte) (val >>> 8));
+ write((byte) val);
+ }
+
+ /**
+ * Writes a boolean (one byte) unsigned value to the buffer, writing one
+ * if the value is true and zero if it is false.
+ * Writes values that can be read using {@link TupleInput#readBoolean}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeBoolean(boolean val) throws IOException {
+
+ write(val ? (byte)1 : (byte)0);
+ }
+
+ /**
+ * Writes an signed byte (one byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readByte}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeByte(int val) throws IOException {
+
+ byte b = (byte) val;
+ if (b < 0)
+ b &= (byte) ~0x80;
+ else
+ b |= (byte) 0x80;
+ writeUnsignedByte(b);
+ }
+
+ /**
+ * Writes an signed short (two byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readShort}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeShort(int val) throws IOException {
+
+ short s = (short) val;
+ if (s < 0)
+ s &= (short) ~0x8000;
+ else
+ s |= (short) 0x8000;
+ writeUnsignedShort(s);
+ }
+
+ /**
+ * Writes an signed int (four byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readInt}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeInt(int val) throws IOException {
+
+ if (val < 0)
+ val &= ~0x80000000;
+ else
+ val |= 0x80000000;
+ writeUnsignedInt(val);
+ }
+
+ /**
+ * Writes an signed long (eight byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readLong}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeLong(long val) throws IOException {
+
+ if (val < 0)
+ val &= ~0x8000000000000000L;
+ else
+ val |= 0x8000000000000000L;
+ writeUnsignedLong(val);
+ }
+
+ /**
+ * Writes an signed float (four byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readFloat}.
+ * <code>Float.floatToIntBits</code> is used to convert the signed float
+ * value.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeFloat(float val) throws IOException {
+
+ writeUnsignedInt(Float.floatToIntBits(val));
+ }
+
+ /**
+ * Writes an signed double (eight byte) value to the buffer.
+ * Writes values that can be read using {@link TupleInput#readDouble}.
+ * <code>Double.doubleToLongBits</code> is used to convert the signed
+ * double value.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeDouble(double val) throws IOException {
+
+ writeUnsignedLong(Double.doubleToLongBits(val));
+ }
+
+ // --- end DataOutput compatible methods ---
+
+ /**
+ * Writes the specified bytes to the buffer, converting each character to
+ * an unsigned byte value.
+ * Writes values that can be read using {@link TupleInput#readBytes}.
+ * Only characters with values below 0x100 may be written using this
+ * method, since the high-order 8 bits of all characters are discarded.
+ *
+ * @param chars is the array of values to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeBytes(char[] chars) throws IOException {
+
+ for (int i = 0; i < chars.length; i++) {
+ write((byte) chars[i]);
+ }
+ }
+
+ /**
+ * Writes the specified characters to the buffer, converting each character
+ * to a two byte unsigned value.
+ * Writes values that can be read using {@link TupleInput#readChars}.
+ *
+ * @param chars is the array of characters to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeChars(char[] chars) throws IOException {
+
+ for (int i = 0; i < chars.length; i++) {
+ write((byte) (chars[i] >>> 8));
+ write((byte) chars[i]);
+ }
+ }
+
+ /**
+ * Writes the specified characters to the buffer, converting each character
+ * to UTF format.
+ * Writes values that can be read using {@link TupleInput#readString(int)}
+ * or {@link TupleInput#readString(char[])}.
+ *
+ * @param chars is the array of characters to be written.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeString(char[] chars) throws IOException {
+
+ if (chars.length == 0) return;
+
+ int utfLength = UtfOps.getByteLength(chars);
+
+ makeSpace(utfLength);
+ UtfOps.charsToBytes(chars, 0, getBufferBytes(), getBufferLength(),
+ chars.length);
+ addSize(utfLength);
+ }
+
+ /**
+ * Writes an unsigned byte (one byte) value to the buffer.
+ * Writes values that can be read using {@link
+ * TupleInput#readUnsignedByte}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeUnsignedByte(int val) throws IOException {
+
+ write(val);
+ }
+
+ /**
+ * Writes an unsigned short (two byte) value to the buffer.
+ * Writes values that can be read using {@link
+ * TupleInput#readUnsignedShort}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeUnsignedShort(int val) throws IOException {
+
+ write((byte) (val >>> 8));
+ write((byte) val);
+ }
+
+ /**
+ * Writes an unsigned int (four byte) value to the buffer.
+ * Writes values that can be read using {@link
+ * TupleInput#readUnsignedInt}.
+ *
+ * @param val is the value to write to the buffer.
+ *
+ * @throws IOException is never thrown but is declared for compatibility
+ * with {java.io.OutputStream#write}.
+ */
+ public final void writeUnsignedInt(long val) throws IOException {
+
+ write((byte) (val >>> 24));
+ write((byte) (val >>> 16));
+ write((byte) (val >>> 8));
+ write((byte) val);
+ }
+
+ /**
+ * This method is private since an unsigned long cannot be treated as
+ * such in Java, nor converted to a BigInteger of the same value.
+ */
+ private final void writeUnsignedLong(long val) throws IOException {
+
+ write((byte) (val >>> 56));
+ write((byte) (val >>> 48));
+ write((byte) (val >>> 40));
+ write((byte) (val >>> 32));
+ write((byte) (val >>> 24));
+ write((byte) (val >>> 16));
+ write((byte) (val >>> 8));
+ write((byte) val);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.java
new file mode 100644
index 000000000..030b48555
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleBinding.java
@@ -0,0 +1,128 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleTupleBinding.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * An abstract entity binding that uses a tuple key and a tuple value.
+ * This class takes care of converting the data to/from {@link TupleInput} and
+ * {@link TupleOutput} objects. Its three abstract methods must be implemented
+ * by a concrete subclass to convert between tuples and entity objects.
+ * <ul>
+ * <li> {@link #dataToObject(TupleInput,TupleInput)} </li>
+ * <li> {@link #objectToKey(Object,TupleOutput)} </li>
+ * <li> {@link #objectToValue(Object,TupleOutput)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class TupleTupleBinding implements EntityBinding {
+
+ protected TupleFormat keyFormat;
+ protected TupleFormat valueFormat;
+
+ /**
+ * Creates a tuple-tuple entity binding.
+ *
+ * @param keyFormat is the key format.
+ *
+ * @param valueFormat is the value format.
+ */
+ public TupleTupleBinding(TupleFormat keyFormat,
+ TupleFormat valueFormat) {
+
+ this.keyFormat = keyFormat;
+ this.valueFormat = valueFormat;
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(DataBuffer key, DataBuffer value)
+ throws IOException {
+
+ return dataToObject(keyFormat.dataToInput(key),
+ valueFormat.dataToInput(value));
+ }
+
+ // javadoc is inherited
+ public void objectToKey(Object object, DataBuffer key)
+ throws IOException {
+
+ TupleOutput output = keyFormat.newOutput();
+ objectToKey(object, output);
+ keyFormat.outputToData(output, key);
+ }
+
+ // javadoc is inherited
+ public void objectToValue(Object object, DataBuffer value)
+ throws IOException {
+
+ TupleOutput output = valueFormat.newOutput();
+ objectToValue(object, output);
+ valueFormat.outputToData(output, value);
+ }
+
+ // javadoc is inherited
+ public DataFormat getKeyFormat() {
+
+ return keyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ // abstract methods
+
+ /**
+ * Constructs an entity object from {@link TupleInput} key and value data
+ * objects.
+ *
+ * @param keyInput is the {@link TupleInput} key data object.
+ *
+ * @param valueInput is the {@link TupleInput} value data object.
+ *
+ * @return the entity object constructed from the key and value.
+ */
+ public abstract Object dataToObject(TupleInput keyInput,
+ TupleInput valueInput)
+ throws IOException;
+
+ /**
+ * Extracts a key tuple from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @param output is the {@link TupleOutput} to which the key should be
+ * written.
+ */
+ public abstract void objectToKey(Object object, TupleOutput output)
+ throws IOException;
+
+ /**
+ * Extracts a key tuple from an entity object.
+ *
+ * @param object is the entity object.
+ *
+ * @param output is the {@link TupleOutput} to which the value should be
+ * written.
+ */
+ public abstract void objectToValue(Object object, TupleOutput output)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.java
new file mode 100644
index 000000000..995990e89
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleKeyExtractor.java
@@ -0,0 +1,130 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleTupleKeyExtractor.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import java.io.IOException;
+
+/**
+ * An abstract key extractor that uses a tuple key and a tuple value. This
+ * class takes care of converting the key and value data to/from {@link
+ * TupleInput} and {@link TupleOutput} objects. Its two abstract methods must
+ * be implemented by a concrete subclass to extract and clear the index key
+ * using these objects.
+ * <ul>
+ * <li> {@link #extractIndexKey(TupleInput,TupleInput,TupleOutput)} </li>
+ * <li> {@link #clearIndexKey(TupleInput,TupleOutput)} </li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class TupleTupleKeyExtractor implements KeyExtractor {
+
+ protected TupleFormat primaryKeyFormat;
+ protected TupleFormat valueFormat;
+ protected TupleFormat indexKeyFormat;
+
+ /**
+ * Creates a tuple-tuple key extractor.
+ *
+ * @param primaryKeyFormat is the primary key format, or null if no
+ * primary key data is used to construct the index key.
+ *
+ * @param valueFormat is the value format, or null if no value data is
+ * used to construct the index key.
+ *
+ * @param indexKeyFormat is the index key format.
+ */
+ public TupleTupleKeyExtractor(TupleFormat primaryKeyFormat,
+ TupleFormat valueFormat,
+ TupleFormat indexKeyFormat) {
+
+ this.primaryKeyFormat = primaryKeyFormat;
+ this.valueFormat = valueFormat;
+ this.indexKeyFormat = indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getPrimaryKeyFormat() {
+
+ return primaryKeyFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getValueFormat() {
+
+ return valueFormat;
+ }
+
+ // javadoc is inherited
+ public DataFormat getIndexKeyFormat() {
+
+ return indexKeyFormat;
+ }
+
+ // javadoc is inherited
+ public void extractIndexKey(DataBuffer primaryKeyData,
+ DataBuffer valueData,
+ DataBuffer indexKeyData)
+ throws IOException {
+
+ TupleOutput output = indexKeyFormat.newOutput();
+ TupleInput primaryKeyInput = ((primaryKeyFormat != null)
+ ? primaryKeyFormat.dataToInput(primaryKeyData)
+ : null);
+ TupleInput valueInput = ((valueFormat != null)
+ ? valueFormat.dataToInput(valueData)
+ : null);
+ extractIndexKey(primaryKeyInput, valueInput, output);
+ indexKeyFormat.outputToData(output, indexKeyData);
+ }
+
+ // javadoc is inherited
+ public void clearIndexKey(DataBuffer valueData)
+ throws IOException {
+
+ TupleOutput output = valueFormat.newOutput();
+ clearIndexKey(valueFormat.dataToInput(valueData), output);
+ valueFormat.outputToData(output, valueData);
+ }
+
+ /**
+ * Extracts the index key data from primary
+ * key tuple and value tuple data.
+ *
+ * @param primaryKeyInput is the {@link TupleInput} for the primary key
+ * data, or null if no primary key data is used to construct the index key.
+ *
+ * @param valueInput is the {@link TupleInput} for the value data, or null
+ * if no value data is used to construct the index key.
+ *
+ * @param indexKeyOutput is the destination index key tuple. For index
+ * keys which are optionally present, no tuple data should be output to
+ * indicate that the key is not present or null.
+ */
+ public abstract void extractIndexKey(TupleInput primaryKeyInput,
+ TupleInput valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException;
+
+ /**
+ * Clears the index key in the tuple value data. The valueInput should be
+ * read and then written to the valueOutput, clearing the index key in the
+ *
+ * @param valueInput is the {@link TupleInput} for the value data.
+ *
+ * @param valueOutput is the destination {@link TupleOutput}.
+ */
+ public abstract void clearIndexKey(TupleInput valueInput,
+ TupleOutput valueOutput)
+ throws IOException;
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.java
new file mode 100644
index 000000000..8fe351b70
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledBinding.java
@@ -0,0 +1,102 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleTupleMarshalledBinding.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+
+/**
+ * A concrete entity binding that uses the {@link MarshalledTupleData} and the
+ * {@link MarshalledTupleKeyEntity} interfaces. It calls the methods of the
+ * {@link MarshalledTupleData} interface to convert between the value data and
+ * entity object. It calls the methods of the {@link MarshalledTupleKeyEntity}
+ * interface to convert between the key data and the entity object. These two
+ * interfaces must both be implemented by the entity class
+ *
+ * @author Mark Hayes
+ */
+public class TupleTupleMarshalledBinding extends TupleTupleBinding {
+
+ private Class cls;
+
+ /**
+ * Creates a tuple-tuple marshalled binding object.
+ *
+ * <p>The given class is used to instantiate entity objects using
+ * {@link Class#forName}, and therefore must be a public class and have a
+ * public no-arguments constructor. It must also implement the {@link
+ * MarshalledTupleData} and {@link MarshalledTupleKeyEntity}
+ * interfaces.</p>
+ *
+ * @param keyFormat is the stored data key format.
+ *
+ * @param valueFormat is the stored data value format.
+ *
+ * @param cls is the class of the entity objects.
+ */
+ public TupleTupleMarshalledBinding(TupleFormat keyFormat,
+ TupleFormat valueFormat,
+ Class cls) {
+
+ super(keyFormat, valueFormat);
+ this.cls = cls;
+
+ // The entity class will be used to instantiate the entity object.
+ //
+ if (!MarshalledTupleKeyEntity.class.isAssignableFrom(cls)) {
+ throw new IllegalArgumentException(cls.toString() +
+ " does not implement MarshalledTupleKeyEntity");
+ }
+ if (!MarshalledTupleData.class.isAssignableFrom(cls)) {
+ throw new IllegalArgumentException(cls.toString() +
+ " does not implement MarshalledTupleData");
+ }
+ }
+
+ // javadoc is inherited
+ public Object dataToObject(TupleInput keyInput, TupleInput valueInput)
+ throws IOException {
+
+ // This "tricky" binding returns the stored value as the entity, but
+ // first it sets the transient key fields from the stored key.
+ MarshalledTupleData obj;
+ try {
+ obj = (MarshalledTupleData) cls.newInstance();
+ } catch (IllegalAccessException e) {
+ throw new IOExceptionWrapper(e);
+ } catch (InstantiationException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ if (valueInput != null) { // may be null if used by key extractor
+ obj.unmarshalData(valueInput);
+ }
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) obj;
+ if (keyInput != null) { // may be null if used by key extractor
+ entity.unmarshalPrimaryKey(keyInput);
+ }
+ return entity;
+ }
+
+ // javadoc is inherited
+ public void objectToKey(Object object, TupleOutput output)
+ throws IOException {
+
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity) object;
+ entity.marshalPrimaryKey(output);
+ }
+
+ // javadoc is inherited
+ public void objectToValue(Object object, TupleOutput output)
+ throws IOException {
+
+ MarshalledTupleData entity = (MarshalledTupleData) object;
+ entity.marshalData(output);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.java b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.java
new file mode 100644
index 000000000..cfde0a871
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/TupleTupleMarshalledKeyExtractor.java
@@ -0,0 +1,90 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleTupleMarshalledKeyExtractor.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple;
+
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+
+/**
+ * A concrete key extractor that works in conjunction with a {@link
+ * TupleTupleMarshalledBinding}. This key extractor works by calling the
+ * methods of the {@link MarshalledTupleKeyEntity} interface to extract and
+ * clear the index key data.
+ *
+ * <p>Note that a marshalled tuple key extractor is somewhat less efficient
+ * than a non-marshalled key tuple extractor because more conversions are
+ * needed. A marshalled key extractor must convert the data to an object in
+ * order to extract the key data, while an unmarshalled key extractor does
+ * not.</p>
+ *
+ * @author Mark Hayes
+ */
+public class TupleTupleMarshalledKeyExtractor extends TupleTupleKeyExtractor {
+
+ private String keyName;
+ private TupleTupleMarshalledBinding binding;
+
+ /**
+ * Creates a tuple-tuple marshalled key extractor.
+ *
+ * @param binding is the binding used for the tuple-tuple entity.
+ *
+ * @param indexKeyFormat is the index key format.
+ *
+ * @param keyName is the key name passed to the {@link
+ * MarshalledTupleKeyEntity#marshalIndexKey} method to identify the index
+ * key.
+ *
+ * @param usePrimaryKey is true if the primary key data is used to
+ * construct the index key.
+ *
+ * @param useValue is true if the value data is used to construct the index
+ * key.
+ */
+ public TupleTupleMarshalledKeyExtractor(
+ TupleTupleMarshalledBinding binding,
+ TupleFormat indexKeyFormat,
+ String keyName,
+ boolean usePrimaryKey,
+ boolean useValue) {
+
+ super(usePrimaryKey ? ((TupleFormat) binding.getKeyFormat()) : null,
+ useValue ? ((TupleFormat) binding.getValueFormat()) : null,
+ indexKeyFormat);
+ this.binding = binding;
+ this.keyName = keyName;
+ }
+
+ // javadoc is inherited
+ public void extractIndexKey(TupleInput primaryKeyInput,
+ TupleInput valueInput,
+ TupleOutput indexKeyOutput)
+ throws IOException {
+
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity)
+ binding.dataToObject(primaryKeyInput, valueInput);
+
+ // the primary key is unmarshalled before marshalling the index key, to
+ // account for cases where the index key includes data taken from the
+ // primary key
+
+ entity.marshalIndexKey(keyName, indexKeyOutput);
+ }
+
+ // javadoc is inherited
+ public void clearIndexKey(TupleInput valueInput, TupleOutput valueOutput)
+ throws IOException {
+
+ MarshalledTupleKeyEntity entity = (MarshalledTupleKeyEntity)
+ binding.dataToObject(null, valueInput);
+ entity.clearIndexKey(keyName);
+ binding.objectToValue(entity, valueOutput);
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/bind/tuple/package.html b/db/java/src/com/sleepycat/bdb/bind/tuple/package.html
new file mode 100644
index 000000000..b9702967b
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/bind/tuple/package.html
@@ -0,0 +1,6 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:12 jbj Exp $ -->
+<html>
+<body>
+<p>Formats and bindings that use sequences of primitive data items or tuples
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/collection/MapEntry.java b/db/java/src/com/sleepycat/bdb/collection/MapEntry.java
new file mode 100644
index 000000000..b3f183aa3
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/MapEntry.java
@@ -0,0 +1,121 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MapEntry.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import java.util.Map;
+
+/**
+ * A simple Map.Entry implementation.
+ *
+ * <p><b>Warning:</b> Use of this interface violates the Java Collections
+ * interface contract since these state that Map.Entry objects should only be
+ * obtained from Map.entrySet() sets, while this class allows constructing them
+ * directly. However, it is useful for performing operations on an entry set
+ * such as add(), contains(), etc. For restrictions see {@link #getValue} and
+ * {@link #setValue}.</p>
+ *
+ * @author Mark Hayes
+ */
+public class MapEntry implements Map.Entry {
+
+ private Object key;
+ private Object value;
+
+ /**
+ * Creates a map entry with a given key and value.
+ *
+ * @param key is the key to use.
+ *
+ * @param value is the value to use.
+ */
+ public MapEntry(Object key, Object value) {
+
+ this.key = key;
+ this.value = value;
+ }
+
+ /**
+ * Computes a hash code as specified by {@link
+ * java.util.Map.Entry#hashCode}.
+ *
+ * @return the computed hash code.
+ */
+ public int hashCode() {
+
+ return ((key == null) ? 0 : key.hashCode()) ^
+ ((value == null) ? 0 : value.hashCode());
+ }
+
+ /**
+ * Compares this entry to a given entry as specified by {@link
+ * java.util.Map.Entry#equals}.
+ *
+ * @return the computed hash code.
+ */
+ public boolean equals(Object other) {
+
+ if (!(other instanceof Map.Entry)) {
+ return false;
+ }
+
+ Map.Entry e = (Map.Entry) other;
+
+ return ((key == null) ? (e.getKey() == null)
+ : key.equals(e.getKey())) &&
+ ((value == null) ? (e.getValue() == null)
+ : value.equals(e.getValue()));
+ }
+
+ /**
+ * Returns the key of this entry.
+ *
+ * @return the key of this entry.
+ */
+ public final Object getKey() {
+
+ return key;
+ }
+
+ /**
+ * Returns the value of this entry. Note that this will be the value
+ * passed to the constructor or the last value passed to {@link #setValue}.
+ * It will not reflect changes made to a Map.
+ *
+ * @return the value of this entry.
+ */
+ public final Object getValue() {
+
+ return value;
+ }
+
+ /**
+ * Changes the value of this entry. Note that this will change the value
+ * in this entry object but will not change the value in a Map.
+ *
+ * @return the value of this entry.
+ */
+ public Object setValue(Object newValue) {
+
+ Object oldValue = value;
+ value = newValue;
+ return oldValue;
+ }
+
+ /**
+ * Converts the entry to a string representation for debugging.
+ *
+ * @return the string representation.
+ */
+ public String toString() {
+
+ return "[key [" + key + "] value [" + value + ']';
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredCollection.java b/db/java/src/com/sleepycat/bdb/collection/StoredCollection.java
new file mode 100644
index 000000000..672e93e69
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredCollection.java
@@ -0,0 +1,453 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredCollection.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A abstract base class for all stored collections. This class, and its
+ * base class {@link StoredContainer}, provide implementations of most methods
+ * in the {@link Collection} interface. Other methods, such as {@link #add}
+ * and {@link #remove}, are provided by concrete classes that extend this
+ * class.
+ *
+ * <p>In addition, this class provides the following methods for stored
+ * collections only. Note that the use of these methods is not compatible with
+ * the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #iterator(boolean)}</li>
+ * <li>{@link #join(StoredContainer[], Object[])}</li>
+ * <li>{@link #join(StoredContainer[], Object[], boolean)}</li>
+ * <li>{@link #toList()}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class StoredCollection extends StoredContainer
+ implements Collection {
+
+ StoredCollection(DataView view) {
+
+ super(view);
+ }
+
+ final boolean add(Object key, Object value) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ int err = view.put(key, value, Db.DB_NODUPDATA, null);
+ commitAutoCommit(doAutoCommit);
+ return (err == 0);
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Returns an iterator over the elements in this collection.
+ * The iterator will be read-only if the collection is read-only.
+ * This method conforms to the {@link Collection#iterator} interface.
+ *
+ * @return a {@link StoredIterator} for this collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isWriteAllowed
+ */
+ public Iterator iterator() {
+
+ return iterator(isWriteAllowed());
+ }
+
+ /**
+ * Returns a read or read-write iterator over the elements in this
+ * collection.
+ * This method does not exist in the standard {@link Collection} interface.
+ *
+ * @param writeAllowed is true to open a read-write iterator or false to
+ * open a read-only iterator. If the collection is read-only the iterator
+ * will always be read-only.
+ *
+ * @return a {@link StoredIterator} for this collection.
+ *
+ * @throws IllegalStateException if writeAllowed is true but the collection
+ * is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isWriteAllowed
+ */
+ public StoredIterator iterator(boolean writeAllowed) {
+
+ try {
+ return new StoredIterator(this, writeAllowed && isWriteAllowed(),
+ null);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Returns an array of all the elements in this collection.
+ * This method conforms to the {@link Collection#toArray()} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object[] toArray() {
+
+ ArrayList list = new ArrayList();
+ Iterator i = iterator();
+ try {
+ while (i.hasNext()) {
+ list.add(i.next());
+ }
+ } finally {
+ StoredIterator.close(i);
+ }
+ return list.toArray();
+ }
+
+ /**
+ * Returns an array of all the elements in this collection whose runtime
+ * type is that of the specified array.
+ * This method conforms to the {@link Collection#toArray(Object[])}
+ * interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object[] toArray(Object[] a) {
+
+ int j = 0;
+ Iterator i = iterator();
+ try {
+ while (j < a.length && i.hasNext()) {
+ a[j++] = i.next();
+ }
+ if (j < a.length) {
+ a[j] = null;
+ } else if (i.hasNext()) {
+ ArrayList list = new ArrayList(Arrays.asList(a));
+ while (i.hasNext()) {
+ list.add(i.next());
+ }
+ a = list.toArray(a);
+ }
+ } finally {
+ StoredIterator.close(i);
+ }
+ return a;
+ }
+
+ /**
+ * Returns true if this collection contains all of the elements in the
+ * specified collection.
+ * This method conforms to the {@link Collection#containsAll} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean containsAll(Collection coll) {
+ Iterator i = coll.iterator();
+ try {
+ while (i.hasNext()) {
+ if (!contains(i.next())) {
+ return false;
+ }
+ }
+ } finally {
+ StoredIterator.close(i);
+ }
+ return true;
+ }
+
+ /**
+ * Adds all of the elements in the specified collection to this collection
+ * (optional operation).
+ * This method calls the {@link #add(Object)} method of the concrete
+ * collection class, which may or may not be supported.
+ * This method conforms to the {@link Collection#addAll} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only, or
+ * if the collection is indexed, or if the add method is not supported by
+ * the concrete collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean addAll(Collection coll) {
+ Iterator i = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ i = coll.iterator();
+ boolean changed = false;
+ while (i.hasNext()) {
+ if (add(i.next())) {
+ changed = true;
+ }
+ }
+ StoredIterator.close(i);
+ commitAutoCommit(doAutoCommit);
+ return changed;
+ } catch (Exception e) {
+ StoredIterator.close(i);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Removes all this collection's elements that are also contained in the
+ * specified collection (optional operation).
+ * This method conforms to the {@link Collection#removeAll} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean removeAll(Collection coll) {
+
+ return removeAll(coll, true);
+ }
+
+ /**
+ * Retains only the elements in this collection that are contained in the
+ * specified collection (optional operation).
+ * This method conforms to the {@link Collection#removeAll} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean retainAll(Collection coll) {
+
+ return removeAll(coll, false);
+ }
+
+ private boolean removeAll(Collection coll, boolean ifExistsInColl) {
+ Iterator i = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ boolean changed = false;
+ i = iterator();
+ while (i.hasNext()) {
+ if (ifExistsInColl == coll.contains(i.next())) {
+ i.remove();
+ changed = true;
+ }
+ }
+ StoredIterator.close(i);
+ commitAutoCommit(doAutoCommit);
+ return changed;
+ } catch (Exception e) {
+ StoredIterator.close(i);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Compares the specified object with this collection for equality.
+ * A value comparison is performed by this method and the stored values
+ * are compared rather than calling the equals() method of each element.
+ * This method conforms to the {@link Collection#equals} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean equals(Object other) {
+
+ if (other instanceof Collection) {
+ Collection otherColl = StoredCollection.copyCollection(other);
+ Iterator i = iterator();
+ try {
+ while (i.hasNext()) {
+ if (!otherColl.remove(i.next())) {
+ return false;
+ }
+ }
+ return otherColl.isEmpty();
+ } finally {
+ StoredIterator.close(i);
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Returns a copy of this collection as an ArrayList. This is the same as
+ * {@link #toArray()} but returns a collection instead of an array.
+ *
+ * @return an {@link ArrayList} containing a copy of all elements in this
+ * collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public List toList() {
+
+ ArrayList list = new ArrayList();
+ Iterator i = iterator();
+ try {
+ while (i.hasNext()) list.add(i.next());
+ return list;
+ } finally {
+ StoredIterator.close(i);
+ }
+ }
+
+ /**
+ * Converts the collection to a string representation for debugging.
+ * WARNING: All elements will be converted to strings and returned and
+ * therefore the returned string may be very large.
+ *
+ * @return the string representation.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("[");
+ Iterator i = iterator();
+ try {
+ while (i.hasNext()) {
+ if (buf.length() > 1) buf.append(',');
+ buf.append(i.next().toString());
+ }
+ buf.append(']');
+ return buf.toString();
+ } finally {
+ StoredIterator.close(i);
+ }
+ }
+
+ /**
+ * Returns an iterator representing an equality join of the indices and
+ * index key values specified.
+ * The indices will be sorted by least number of references, which is
+ * commonly the best optimization.
+ * This method does not exist in the standard {@link Collection} interface.
+ *
+ * <p>The returned iterator supports only the two methods: hasNext() and
+ * next(). All other methods will throw UnsupportedOperationException.</p>
+ *
+ * @param indices is an array of indices with elements corresponding to
+ * those in the indexKeys array.
+ *
+ * @param indexKeys is an array of index key values identifying the
+ * elements to be selected.
+ *
+ * @return an iterator over the elements in this collection that match
+ * all specified index key values.
+ *
+ * @throws IllegalArgumentException if this collection is indexed or if a
+ * given index does not have the same store as this collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredIterator join(StoredContainer[] indices, Object[] indexKeys) {
+
+ return join(indices, indexKeys, false);
+ }
+
+ /**
+ * Returns an iterator representing an equality join of the indices and
+ * index key values specified.
+ * The indices may be presorted to allow custom optimizations.
+ * This method does not exist in the standard {@link Collection} interface.
+ *
+ * <p>The returned iterator supports only the two methods: hasNext() and
+ * next(). All other methods will throw UnsupportedOperationException.</p>
+ *
+ * @param indices is an array of indices with elements corresponding to
+ * those in the indexKeys array.
+ *
+ * @param indexKeys is an array of index key values identifying the
+ * elements to be selected.
+ *
+ * @param presorted is true if the index order should not be changed, or
+ * false to use the default sorting by least number of references.
+ *
+ * @return an iterator over the elements in this collection that match
+ * all specified index key values.
+ *
+ * @throws IllegalArgumentException if this collection is indexed or if a
+ * given index does not have the same store as this collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredIterator join(StoredContainer[] indices, Object[] indexKeys,
+ boolean presorted) {
+
+ try {
+ DataView[] indexViews = new DataView[indices.length];
+ for (int i = 0; i < indices.length; i += 1) {
+ indexViews[i] = indices[i].view;
+ }
+ DataCursor cursor = view.join(indexViews, indexKeys, presorted);
+ return new StoredIterator(this, false, cursor);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ final Object getFirstOrLast(boolean doGetFirst) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.get(null, null,
+ doGetFirst ? Db.DB_FIRST : Db.DB_LAST,
+ false);
+ return (err == 0) ? makeIteratorData(null, cursor) : null;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ abstract Object makeIteratorData(StoredIterator iterator,
+ DataCursor cursor)
+ throws DbException, IOException;
+
+ abstract boolean hasValues();
+
+ boolean iterateDuplicates() {
+
+ return true;
+ }
+
+ void checkIterAddAllowed()
+ throws UnsupportedOperationException {
+
+ if (!areDuplicatesAllowed()) {
+ throw new UnsupportedOperationException("duplicates required");
+ }
+ }
+
+ int getIndexOffset() {
+
+ return 0;
+ }
+
+ private static Collection copyCollection(Object other) {
+
+ if (other instanceof StoredCollection) {
+ return ((StoredCollection) other).toList();
+ } else {
+ return new ArrayList((Collection) other);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredCollections.java b/db/java/src/com/sleepycat/bdb/collection/StoredCollections.java
new file mode 100644
index 000000000..3bbcf5a8f
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredCollections.java
@@ -0,0 +1,263 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredCollections.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.db.DbEnv;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ * This class consists exclusively of static methods that operate on or return
+ * stored collections. It contains methods for changing certain properties of a
+ * collection. Because collection properties are immutable, these methods
+ * always return a new collection reference. This allows stored collections to
+ * be used safely by multiple threads. Note that creating the new collection
+ * reference is not expensive and creates only two new objects.
+ *
+ * <p>When a collection is created with a particular property, all collections
+ * and iterators derieved from that collection will inherit the property. For
+ * example, if a dirty-read Map is created then calls to subMap(), values(),
+ * entrySet(), and keySet() will create dirty-read collections also.</p>
+ *
+ * <p><b>Dirty-Read</b> Methods names beginning with dirtyRead create a new
+ * dirty-read container from a given stored container. When dirty-read is
+ * enabled, data will be read that has been modified by another transaction but
+ * not committed. Using dirty-read can improve concurrency since reading will
+ * not wait for other transactions to complete. For a non-transactional
+ * container (when {@link StoredContainer#isTransactional} returns false),
+ * dirty-read has no effect. If {@link StoredContainer#isDirtyReadAllowed}
+ * returns false, dirty-read also has no effect. If dirty-ready is enabled
+ * (and allowed) for a container, {@link StoredContainer#isDirtyReadEnabled}
+ * will return true. Dirty-read is disabled by default for a container.</p>
+ *
+ * <p><b>Auto-Commit</b> Methods names beginning with autoCommit create a new
+ * auto-commit container from a given stored container. If auto-commit is
+ * enabled for a container (or for its {@link DbEnv}), a transaction will be
+ * started and committed automatically for each write operation when no
+ * transaction is already active. Auto-commit only applies to container
+ * methods. It does not apply to iterator methods and these always require an
+ * active transaction. For a non-transactional container (where {@link
+ * StoredContainer#isTransactional} returns false) auto-commit has no effect.
+ * If auto-commit is enabled for a transactional container or its environment,
+ * {@link StoredContainer#isAutoCommit} will return true. Auto-commit is
+ * disabled by default for a container but may be enabled for an entire
+ * environment using {@link DbEnv#setFlags}.</p>
+ */
+public class StoredCollections {
+
+ private StoredCollections() {}
+
+ /**
+ * Creates a dirty-read collection from a given stored collection.
+ *
+ * @param storedCollection the base collection.
+ *
+ * @return the dirty-read collection.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Collection dirtyReadCollection(Collection storedCollection) {
+
+ return (Collection)
+ ((StoredContainer) storedCollection).dirtyReadClone();
+ }
+
+ /**
+ * Creates a dirty-read list from a given stored list.
+ *
+ * @param storedList the base list.
+ *
+ * @return the dirty-read list.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static List dirtyReadList(List storedList) {
+
+ return (List) ((StoredContainer) storedList).dirtyReadClone();
+ }
+
+ /**
+ * Creates a dirty-read map from a given stored map.
+ *
+ * @param storedMap the base map.
+ *
+ * @return the dirty-read map.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Map dirtyReadMap(Map storedMap) {
+
+ return (Map) ((StoredContainer) storedMap).dirtyReadClone();
+ }
+
+ /**
+ * Creates a dirty-read set from a given stored set.
+ *
+ * @param storedSet the base set.
+ *
+ * @return the dirty-read set.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Set dirtyReadSet(Set storedSet) {
+
+ return (Set) ((StoredContainer) storedSet).dirtyReadClone();
+ }
+
+ /**
+ * Creates a dirty-read sorted map from a given stored sorted map.
+ *
+ * @param storedSortedMap the base map.
+ *
+ * @return the dirty-read map.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static SortedMap dirtyReadSortedMap(SortedMap storedSortedMap) {
+
+ return (SortedMap)
+ ((StoredContainer) storedSortedMap).dirtyReadClone();
+ }
+
+ /**
+ * Creates a dirty-read sorted set from a given stored sorted set.
+ *
+ * @param storedSortedSet the base set.
+ *
+ * @return the dirty-read set.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static SortedSet dirtyReadSortedSet(SortedSet storedSortedSet) {
+
+ return (SortedSet)
+ ((StoredContainer) storedSortedSet).dirtyReadClone();
+ }
+
+ /**
+ * Creates a auto-commit collection from a given stored collection.
+ *
+ * @param storedCollection the base collection.
+ *
+ * @return the auto-commit collection.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Collection autoCommitCollection(Collection
+ storedCollection) {
+ return (Collection)
+ ((StoredContainer) storedCollection).autoCommitClone();
+ }
+
+ /**
+ * Creates a auto-commit list from a given stored list.
+ *
+ * @param storedList the base list.
+ *
+ * @return the auto-commit list.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static List autoCommitList(List storedList) {
+
+ return (List) ((StoredContainer) storedList).autoCommitClone();
+ }
+
+ /**
+ * Creates a auto-commit map from a given stored map.
+ *
+ * @param storedMap the base map.
+ *
+ * @return the auto-commit map.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Map autoCommitMap(Map storedMap) {
+
+ return (Map) ((StoredContainer) storedMap).autoCommitClone();
+ }
+
+ /**
+ * Creates a auto-commit set from a given stored set.
+ *
+ * @param storedSet the base set.
+ *
+ * @return the auto-commit set.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static Set autoCommitSet(Set storedSet) {
+
+ return (Set) ((StoredContainer) storedSet).autoCommitClone();
+ }
+
+ /**
+ * Creates a auto-commit sorted map from a given stored sorted map.
+ *
+ * @param storedSortedMap the base map.
+ *
+ * @return the auto-commit map.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static SortedMap autoCommitSortedMap(SortedMap storedSortedMap) {
+
+ return (SortedMap)
+ ((StoredContainer) storedSortedMap).autoCommitClone();
+ }
+
+ /**
+ * Creates a auto-commit sorted set from a given stored sorted set.
+ *
+ * @param storedSortedSet the base set.
+ *
+ * @return the auto-commit set.
+ *
+ * @throws ClassCastException if the given container is not a
+ * StoredContainer.
+ */
+ public static SortedSet autoCommitSortedSet(SortedSet storedSortedSet) {
+
+ return (SortedSet)
+ ((StoredContainer) storedSortedSet).autoCommitClone();
+ }
+
+ /**
+ * Clones a stored iterator preserving its current position.
+ *
+ * @param storedIterator an iterator to clone.
+ *
+ * @return a new {@link StoredIterator} having the same position as the
+ * given iterator.
+ *
+ * @throws ClassCastException if the given iterator is not a
+ * StoredIterator.
+ */
+ public static Iterator iterator(Iterator storedIterator) {
+
+ return (Iterator) ((StoredIterator) storedIterator).clone();
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredContainer.java b/db/java/src/com/sleepycat/bdb/collection/StoredContainer.java
new file mode 100644
index 000000000..06732a761
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredContainer.java
@@ -0,0 +1,431 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredContainer.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.CurrentTransaction;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * A abstract base class for all stored collections and maps. This class
+ * provides implementations of methods that are common to the {@link
+ * Collection} and the {@link Map} interfaces, namely {@link #clear}, {@link
+ * #isEmpty} and {@link #size}.
+ *
+ * <p>In addition, this class provides the following methods for stored
+ * collections only. Note that the use of these methods is not compatible with
+ * the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #isWriteAllowed()}</li>
+ * <li>{@link #isIndexed()}</li>
+ * <li>{@link #isOrdered()}</li>
+ * <li>{@link #areDuplicatesAllowed()}</li>
+ * <li>{@link #areDuplicatesOrdered()}</li>
+ * <li>{@link #areKeysRenumbered()}</li>
+ * <li>{@link #isDirtyReadAllowed()}</li>
+ * <li>{@link #isDirtyReadEnabled()}</li>
+ * <li>{@link #isAutoCommit()}</li>
+ * <li>{@link #isTransactional()}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public abstract class StoredContainer implements Cloneable {
+
+ DataView view;
+
+ StoredContainer(DataView view) {
+
+ this.view = view;
+ }
+
+ /**
+ * Returns true if this is a read-write container or false if this is a
+ * read-only container.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether write is allowed.
+ */
+ public final boolean isWriteAllowed() {
+
+ return view.isWriteAllowed();
+ }
+
+ /**
+ * Returns whether dirty-read is allowed for this container.
+ * Dirty-read is allowed if Db.DB_DIRTY_READ was specified when opening the
+ * database of the underlying Store and Index (if any) for this container.
+ * Even when dirty-read is allowed it must specifically be enabled by
+ * calling one of the {@link StoredCollections} methods.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether dirty-read is allowed.
+ */
+ public final boolean isDirtyReadAllowed() {
+
+ return view.isDirtyReadAllowed();
+ }
+
+ /**
+ * Returns whether dirty-read is enabled for this container.
+ * If dirty-read is enabled, data will be read that is modified but not
+ * committed.
+ * Dirty-read is disabled by default.
+ * This method always returns false if {@link #isDirtyReadAllowed} returns
+ * false.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether dirty-read is enabled.
+ */
+ public final boolean isDirtyReadEnabled() {
+
+ return view.isDirtyReadEnabled();
+ }
+
+ /**
+ * Returns whether auto-commit is enabled for this container or for its
+ * associated {@link DbEnv}.
+ * If auto-commit is enabled, a transaction will be started and committed
+ * automatically for each write operation when no transaction is active.
+ * Auto-commit only applies to container methods. It does not apply to
+ * iterator methods and these always require an explict transaction.
+ * Auto-commit is disabled by default for a container but may be enabled
+ * for an entire environment using {@link DbEnv#setFlags}.
+ * This method always returns false if {@link #isTransactional} returns
+ * false.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether auto-commit is enabled.
+ */
+ public final boolean isAutoCommit() {
+
+ return view.isAutoCommit();
+ }
+
+ /**
+ * Returns whether the databases underlying this container are
+ * transactional.
+ * Even in a transactional environment, a database will be transactional
+ * only if it was opened within a transaction or if the auto-commit option
+ * was specified when it was opened.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether the database is transactional.
+ */
+ public final boolean isTransactional() {
+
+ return view.isTransactional();
+ }
+
+ final StoredContainer dirtyReadClone() {
+
+ if (!isDirtyReadAllowed())
+ return this;
+ try {
+ StoredContainer cont = (StoredContainer) clone();
+ cont.view = cont.view.dirtyReadView(true);
+ return cont;
+ } catch (CloneNotSupportedException willNeverOccur) { return null; }
+ }
+
+ final StoredContainer autoCommitClone() {
+
+ if (!isTransactional())
+ return this;
+ try {
+ StoredContainer cont = (StoredContainer) clone();
+ cont.view = cont.view.autoCommitView(true);
+ return cont;
+ } catch (CloneNotSupportedException willNeverOccur) { return null; }
+ }
+
+ /**
+ * Returns whether duplicate keys are allowed in this container.
+ * Duplicates are optionally allowed for HASH and BTREE databases.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether duplicates are allowed.
+ */
+ public final boolean areDuplicatesAllowed() {
+
+ return view.areDuplicatesAllowed();
+ }
+
+ /**
+ * Returns whether duplicate keys are allowed and sorted by element value.
+ * Duplicates are optionally sorted for HASH and BTREE databases.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether duplicates are ordered.
+ */
+ public final boolean areDuplicatesOrdered() {
+
+ return view.areDuplicatesOrdered();
+ }
+
+ /**
+ * Returns whether keys are renumbered when insertions and deletions occur.
+ * Keys are optionally renumbered for RECNO databases.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether keys are renumbered.
+ */
+ public final boolean areKeysRenumbered() {
+
+ return view.areKeysRenumbered();
+ }
+
+ /**
+ * Returns whether keys are ordered in this container.
+ * Keys are ordered for BTREE, RECNO and QUEUE database.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether keys are ordered.
+ */
+ public final boolean isOrdered() {
+
+ return view.isOrdered();
+ }
+
+ /**
+ * Returns whether this container is a view on a {@link DataIndex} rather
+ * than directly on a {@link DataStore}.
+ * This method does not exist in the standard {@link Map} or {@link
+ * Collection} interfaces.
+ *
+ * @return whether the view is indexed.
+ */
+ public final boolean isIndexed() {
+
+ return (view.getIndex() != null);
+ }
+
+ /**
+ * Always throws UnsupportedOperationException. The size of a database
+ * cannot be obtained reliably or inexpensively.
+ * This method therefore violates the {@link Collection#size} and {@link
+ * Map#size} interfaces.
+ *
+ * @return always throws an exception.
+ *
+ * @throws UnsupportedOperationException unconditionally.
+ */
+ public int size() {
+
+ throw new UnsupportedOperationException(
+ "collection size not available");
+ }
+
+ /**
+ * Returns true if this map or collection contains no mappings or elements.
+ * This method conforms to the {@link Collection#isEmpty} and {@link
+ * Map#isEmpty} interfaces.
+ *
+ * @return whether the container is empty.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean isEmpty() {
+
+ try {
+ return view.isEmpty();
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Removes all mappings or elements from this map or collection (optional
+ * operation).
+ * This method conforms to the {@link Collection#clear} and {@link
+ * Map#clear} interfaces.
+ *
+ * @throws UnsupportedOperationException if the container is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void clear() {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ view.clear(null);
+ commitAutoCommit(doAutoCommit);
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ Object get(Object key) {
+
+ try {
+ Object[] ret = new Object[1];
+ int err = view.get(key, null, Db.DB_SET, false, ret);
+ return (err == 0) ? ret[0] : null;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ Object put(final Object key, final Object value) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ Object[] oldValue = new Object[1];
+ view.put(key, value, 0, oldValue);
+ commitAutoCommit(doAutoCommit);
+ return oldValue[0];
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ final boolean removeKey(final Object key, final Object[] oldVal) {
+
+ DataCursor cursor = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ cursor = new DataCursor(view, true);
+ boolean found = false;
+ int err = cursor.get(key, null, Db.DB_SET, true);
+ while (err == 0) {
+ cursor.delete();
+ found = true;
+ if (oldVal != null && oldVal[0] == null)
+ oldVal[0] = cursor.getCurrentValue();
+ err = cursor.get(null, null, Db.DB_NEXT_DUP, true);
+ }
+ closeCursor(cursor);
+ commitAutoCommit(doAutoCommit);
+ return found;
+ } catch (Exception e) {
+ closeCursor(cursor);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ boolean containsKey(Object key) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.get(key, null, Db.DB_SET, false);
+ return (err == 0);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ final boolean removeValue(Object value) {
+
+ DataCursor cursor = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ cursor = new DataCursor(view, true);
+ int err = cursor.find(value, true);
+ if (err == 0) {
+ cursor.delete();
+ }
+ closeCursor(cursor);
+ commitAutoCommit(doAutoCommit);
+ return (err == 0);
+ } catch (Exception e) {
+ closeCursor(cursor);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ boolean containsValue(Object value) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.find(value, true);
+ return (err == 0);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ final void closeCursor(DataCursor cursor) {
+
+ if (cursor != null) {
+ try {
+ cursor.close();
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+ }
+
+ final boolean beginAutoCommit() {
+
+ if (isAutoCommit()) {
+ try {
+ CurrentTransaction currentTxn = view.getCurrentTxn();
+ if (currentTxn.getTxn() == null) {
+ currentTxn.beginTxn();
+ return true;
+ }
+ } catch (DbException e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+ return false;
+ }
+
+ final void commitAutoCommit(boolean doAutoCommit)
+ throws DbException {
+
+ if (doAutoCommit) view.getCurrentTxn().commitTxn();
+ }
+
+ final RuntimeException handleException(Exception e, boolean doAutoCommit) {
+
+ if (doAutoCommit) {
+ try {
+ view.getCurrentTxn().abortTxn();
+ } catch (DbException ignored) {
+ }
+ }
+ return StoredContainer.convertException(e);
+ }
+
+ static RuntimeException convertException(Exception e) {
+
+ if (e instanceof RuntimeException) {
+ return (RuntimeException) e;
+ } else {
+ return new RuntimeExceptionWrapper(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredEntrySet.java b/db/java/src/com/sleepycat/bdb/collection/StoredEntrySet.java
new file mode 100644
index 000000000..4b21984db
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredEntrySet.java
@@ -0,0 +1,167 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredEntrySet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The Set returned by Map.entrySet(). This class may not be instantiated
+ * directly. Contrary to what is stated by {@link Map#entrySet} this class
+ * does support the {@link #add} and {@link #addAll} methods.
+ *
+ * <p>The {@link java.util.Map.Entry#setValue} method of the Map.Entry objects
+ * that are returned by this class and its iterators behaves just as the {@link
+ * StoredIterator#set} method does.</p>
+ *
+ * @author Mark Hayes
+ */
+public class StoredEntrySet extends StoredCollection implements Set {
+
+ StoredEntrySet(DataView mapView) {
+
+ super(mapView);
+ }
+
+ /**
+ * Adds the specified element to this set if it is not already present
+ * (optional operation).
+ * This method conforms to the {@link Set#add} interface.
+ *
+ * @param mapEntry must be a {@link java.util.Map.Entry} instance.
+ *
+ * @return true if the key-value pair was added to the set (and was not
+ * previously present).
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws ClassCastException if the mapEntry is not a {@link
+ * java.util.Map.Entry} instance.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean add(Object mapEntry) {
+
+ Map.Entry entry = (Map.Entry) mapEntry; // allow ClassCastException
+ return add(entry.getKey(), entry.getValue());
+ }
+
+ /**
+ * Removes the specified element from this set if it is present (optional
+ * operation).
+ * This method conforms to the {@link Set#remove} interface.
+ *
+ * @param mapEntry is a {@link java.util.Map.Entry} instance to be removed.
+ *
+ * @return true if the key-value pair was removed from the set, or false if
+ * the mapEntry is not a {@link java.util.Map.Entry} instance or is not
+ * present in the set.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean remove(Object mapEntry) {
+
+ if (!(mapEntry instanceof Map.Entry)) {
+ return false;
+ }
+ Map.Entry entry = (Map.Entry) mapEntry;
+ DataCursor cursor = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ cursor = new DataCursor(view, true);
+ int err = cursor.get(entry.getKey(), entry.getValue(),
+ Db.DB_GET_BOTH, true);
+ if (err == 0) {
+ cursor.delete();
+ }
+ closeCursor(cursor);
+ commitAutoCommit(doAutoCommit);
+ return (err == 0);
+ } catch (Exception e) {
+ closeCursor(cursor);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Returns true if this set contains the specified element.
+ * This method conforms to the {@link Set#contains} interface.
+ *
+ * @param mapEntry is a {@link java.util.Map.Entry} instance to be checked.
+ *
+ * @return true if the key-value pair is present in the set, or false if
+ * the mapEntry is not a {@link java.util.Map.Entry} instance or is not
+ * present in the set.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean contains(Object mapEntry) {
+
+ if (!(mapEntry instanceof Map.Entry)) {
+ return false;
+ }
+ Map.Entry entry = (Map.Entry) mapEntry;
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.get(entry.getKey(), entry.getValue(),
+ Db.DB_GET_BOTH, false);
+ return (err == 0);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ // javadoc is inherited
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append("[");
+ Iterator i = iterator();
+ try {
+ while (i.hasNext()) {
+ Map.Entry entry = (Map.Entry) i.next();
+ if (buf.length() > 1) buf.append(',');
+ Object key = entry.getKey();
+ Object val = entry.getValue();
+ if (key != null) buf.append(key.toString());
+ buf.append('=');
+ if (val != null) buf.append(val.toString());
+ }
+ buf.append(']');
+ return buf.toString();
+ }
+ finally {
+ StoredIterator.close(i);
+ }
+ }
+
+ Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
+ throws DbException, IOException {
+
+ return new StoredMapEntry(cursor.getCurrentKey(),
+ cursor.getCurrentValue(),
+ this, iterator);
+ }
+
+ boolean hasValues() {
+
+ return true;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredIterator.java b/db/java/src/com/sleepycat/bdb/collection/StoredIterator.java
new file mode 100644
index 000000000..bff341990
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredIterator.java
@@ -0,0 +1,590 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredIterator.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.util.ExceptionWrapper;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbDeadlockException;
+import com.sleepycat.db.DbException;
+import com.sleepycat.db.DbMemoryException;
+import com.sleepycat.db.DbRunRecoveryException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+/**
+ * The Iterator returned by all stored collections.
+ *
+ * <p>While in general this class conforms to the {@link Iterator} interface,
+ * it is important to note that all iterators for stored collections must be
+ * explicitly closed with {@link #close()}. The static method {@link
+ * #close(java.util.Iterator)} allows calling close for all iterators without
+ * harm to iterators that are not from stored collections, and also avoids
+ * casting. If a stored iterator is not closed, unpredictable behavior
+ * including process death may result.</p>
+ *
+ * <p>This class implements the {@link Iterator} interface for all stored
+ * iterators. It also implements {@link ListIterator} because some list
+ * iterator methods apply to all stored iterators, for example, {@link
+ * #previous} and {@link #hasPrevious}. Other list iterator methods are always
+ * supports for lists, but for other types of collections are only supported
+ * under certain conditions. For example, {@link #nextIndex} and {@link
+ * #previousIndex} are only supported when record number keys are used, while
+ * {@link #add} and {@link #set} are supported only under certain other
+ * conditions. See the individual method descriptions for more
+ * information.</p>
+ *
+ * <p>In addition, this class provides the following methods for stored
+ * collection iterators only. Note that the use of these methods is not
+ * compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #close()}</li>
+ * <li>{@link #close(Iterator)}</li>
+ * <li>{@link #getCollection()}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredIterator implements ListIterator, Cloneable {
+
+ /**
+ * Closes the given iterator using {@link #close()} if it is a {@link
+ * StoredIterator}. If the given iterator is not a {@link StoredIterator},
+ * this method does nothing.
+ *
+ * @param i is the iterator to close.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public static void close(Iterator i) {
+
+ if (i instanceof StoredIterator) {
+ ((StoredIterator) i).close();
+ }
+ }
+
+ private boolean lockForWrite;
+ private StoredCollection coll;
+ private DataCursor cursor;
+ private int toNext;
+ private int toPrevious;
+ private int toCurrent;
+ private boolean writeAllowed;
+ private boolean setAndRemoveAllowed;
+ private Object currentData;
+ private final int NEXT_FLAG;
+ private final int PREV_FLAG;
+ private final boolean recNumAccess;
+
+ StoredIterator(StoredCollection coll, boolean writeAllowed,
+ DataCursor joinCursor) {
+
+ try {
+ this.coll = coll;
+ this.writeAllowed = writeAllowed;
+ if (joinCursor == null)
+ this.cursor = new DataCursor(coll.view, writeAllowed);
+ else
+ this.cursor = joinCursor;
+ this.recNumAccess = cursor.hasRecNumAccess();
+ if (coll.iterateDuplicates()) {
+ this.NEXT_FLAG = Db.DB_NEXT;
+ this.PREV_FLAG = Db.DB_PREV;
+ } else {
+ this.NEXT_FLAG = Db.DB_NEXT_NODUP;
+ this.PREV_FLAG = Db.DB_PREV_NODUP;
+ }
+ reset();
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Clones this iterator preserving its current position.
+ *
+ * @return a new {@link StoredIterator} having the same position as this
+ * iterator.
+ */
+ protected Object clone() {
+
+ try {
+ StoredIterator o = (StoredIterator) super.clone();
+ o.cursor = new DataCursor(cursor);
+ return o;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Returns whether write-locks will be obtained when reading with this
+ * cursor.
+ * Obtaining write-locks can prevent deadlocks when reading and then
+ * modifying data.
+ *
+ * @return the write-lock setting.
+ */
+ public final boolean getLockForWrite() {
+
+ return lockForWrite;
+ }
+
+ /**
+ * Changes whether write-locks will be obtained when reading with this
+ * cursor.
+ * Obtaining write-locks can prevent deadlocks when reading and then
+ * modifying data.
+ *
+ * @param lockForWrite the write-lock setting.
+ */
+ public void setLockForWrite(boolean lockForWrite) {
+
+ this.lockForWrite = lockForWrite;
+ }
+
+ // --- begin Iterator/ListIterator methods ---
+
+ /**
+ * Returns true if this iterator has more elements when traversing in the
+ * forward direction. False is returned if the iterator has been closed.
+ * This method conforms to the {@link Iterator#hasNext} interface.
+ *
+ * @return whether {@link #next()} will succeed.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean hasNext() {
+
+ if (cursor == null) {
+ return false;
+ }
+ try {
+ if (toNext != 0) {
+ int err = cursor.get(null, null, toNext, lockForWrite);
+ if (err == 0) {
+ toNext = 0;
+ toPrevious = PREV_FLAG;
+ toCurrent = PREV_FLAG;
+ }
+ }
+ return (toNext == 0);
+ }
+ catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Returns true if this iterator has more elements when traversing in the
+ * reverse direction. It returns false if the iterator has been closed.
+ * This method conforms to the {@link ListIterator#hasPrevious} interface.
+ *
+ * @return whether {@link #previous()} will succeed.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean hasPrevious() {
+
+ if (cursor == null) {
+ return false;
+ }
+ try {
+ if (toPrevious != 0) {
+ int err = cursor.get(null, null, toPrevious, lockForWrite);
+ if (err == 0) {
+ toPrevious = 0;
+ toNext = NEXT_FLAG;
+ toCurrent = NEXT_FLAG;
+ }
+ }
+ return (toPrevious == 0);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Returns the next element in the interation.
+ * This method conforms to the {@link Iterator#next} interface.
+ *
+ * @return the next element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object next() {
+
+ try {
+ if (toNext != 0) {
+ int err = cursor.get(null, null, toNext, lockForWrite);
+ if (err == 0) {
+ toNext = 0;
+ }
+ }
+ if (toNext == 0) {
+ currentData = coll.makeIteratorData(this, cursor);
+ toNext = NEXT_FLAG;
+ toPrevious = 0;
+ toCurrent = 0;
+ setAndRemoveAllowed = true;
+ return currentData;
+ }
+ // else throw NoSuchElementException below
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ throw new NoSuchElementException();
+ }
+
+ /**
+ * Returns the next element in the interation.
+ * This method conforms to the {@link ListIterator#previous} interface.
+ *
+ * @return the previous element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object previous() {
+
+ try {
+ if (toPrevious != 0) {
+ int err = cursor.get(null, null, toPrevious, lockForWrite);
+ if (err == 0) {
+ toPrevious = 0;
+ }
+ }
+ if (toPrevious == 0) {
+ currentData = coll.makeIteratorData(this, cursor);
+ toPrevious = PREV_FLAG;
+ toNext = 0;
+ toCurrent = 0;
+ setAndRemoveAllowed = true;
+ return currentData;
+ }
+ // else throw NoSuchElementException below
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ throw new NoSuchElementException();
+ }
+
+ /**
+ * Returns the index of the element that would be returned by a subsequent
+ * call to next.
+ * This method conforms to the {@link ListIterator#nextIndex} interface
+ * except that it returns Integer.MAX_VALUE for stored lists when
+ * positioned at the end of the list, rather than returning the list size
+ * as specified by the ListIterator interface. This is because the database
+ * size is not available.
+ *
+ * @return the next index.
+ *
+ * @throws UnsupportedOperationException if this iterator's collection does
+ * not use record number keys.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public int nextIndex() {
+
+ if (!recNumAccess) {
+ throw new UnsupportedOperationException(
+ "Record number access not supported");
+ }
+ try {
+ return hasNext() ? (cursor.getCurrentRecordNumber() -
+ coll.getIndexOffset())
+ : Integer.MAX_VALUE;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Returns the index of the element that would be returned by a subsequent
+ * call to previous.
+ * This method conforms to the {@link ListIterator#previousIndex}
+ * interface.
+ *
+ * @return the previous index.
+ *
+ * @throws UnsupportedOperationException if this iterator's collection does
+ * not use record number keys.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public int previousIndex() {
+
+ if (!recNumAccess) {
+ throw new UnsupportedOperationException(
+ "Record number access not supported");
+ }
+ try {
+ return hasPrevious() ? (cursor.getCurrentRecordNumber() -
+ coll.getIndexOffset())
+ : -1;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Replaces the last element returned by next or previous with the
+ * specified element (optional operation).
+ * This method conforms to the {@link ListIterator#set} interface.
+ *
+ * @param value the new value.
+ *
+ * @throws UnsupportedOperationException if the collection is a {@link
+ * StoredKeySet} (the set returned by {@link Map#keySet}), or if duplicates
+ * are sorted since this would change the iterator position, or if
+ * the collection is indexed, or if the collection is read-only.
+ *
+ * @throws IllegalArgumentException if an entity value binding is used and
+ * the primary key of the value given is different than the existing stored
+ * primary key.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void set(Object value) {
+
+ if (!coll.hasValues()) throw new UnsupportedOperationException();
+ if (!setAndRemoveAllowed) throw new IllegalStateException();
+ try {
+ moveToCurrent();
+ cursor.put(null, value, Db.DB_CURRENT, null);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Removes the last element that was returned by next or previous (optional
+ * operation).
+ * This method conforms to the {@link ListIterator#remove} interface except
+ * that when the collection is a list and the RECNO-RENUMBER access method
+ * is not used, list indices will not be renumbered.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void remove() {
+
+ if (!setAndRemoveAllowed) throw new IllegalStateException();
+ try {
+ moveToCurrent();
+ cursor.delete();
+ setAndRemoveAllowed = false;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Inserts the specified element into the list or inserts a duplicate into
+ * other types of collections (optional operation).
+ * This method conforms to the {@link ListIterator#add} interface when
+ * the collection is a list and the RECNO-RENUMBER access method is used.
+ * Otherwise, this method may only be called when duplicates are allowed.
+ * If duplicates are unsorted, the new value will be inserted in the same
+ * manner as list elements.
+ * If duplicates are sorted, the new value will be inserted in sort order.
+ *
+ * @param value the new value.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is indexed, or if the collection is read-only, or if
+ * the collection is a list and the RECNO-RENUMBER access method was not
+ * used, or if the collection is not a list and duplicates are not allowed.
+ *
+ * @throws IllegalStateException if the collection is empty and is not a
+ * list with RECNO-RENUMBER access.
+ *
+ * @throws IllegalArgumentException if a duplicate value is being added
+ * that already exists and duplicates are sorted.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void add(Object value) {
+
+ coll.checkIterAddAllowed();
+ try {
+ int err = 0;
+ if (toNext != 0 && toPrevious != 0) { // database is empty
+ if (coll.view.areKeysRenumbered()) { // recno-renumber database
+ // close cursor during append and then reopen to support
+ // CDB restriction that append may not be called with a
+ // cursor open; note the append will still fail if the
+ // application has another cursor open
+ close();
+ err = coll.view.append(value, null, null);
+ cursor = new DataCursor(coll.view, writeAllowed);
+ reset();
+ next(); // move past new record
+ } else { // hash/btree with duplicates
+ throw new IllegalStateException(
+ "Collection is empty, cannot add() duplicate");
+ }
+ } else { // database is not empty
+ int flags;
+ if (coll.view.areKeysRenumbered()) { // recno-renumber database
+ moveToCurrent();
+ flags = hasNext() ? Db.DB_BEFORE : Db.DB_AFTER;
+ } else { // hash/btree with duplicates
+ flags = coll.areDuplicatesOrdered()
+ ? Db.DB_NODUPDATA
+ : (toNext == 0) ? Db.DB_BEFORE : Db.DB_AFTER;
+ }
+ err = cursor.put(null, value, flags, null, true);
+ if (flags == Db.DB_BEFORE) {
+ toPrevious = 0;
+ toNext = NEXT_FLAG;
+ }
+ }
+ if (err == Db.DB_KEYEXIST)
+ throw new IllegalArgumentException("Duplicate value");
+ else if (err != 0)
+ throw new IllegalArgumentException("Could not insert: " + err);
+ setAndRemoveAllowed = false;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ // --- end Iterator/ListIterator methods ---
+
+ // hide for now
+ private void reset() {
+
+ toNext = Db.DB_FIRST;
+ toPrevious = PREV_FLAG;
+ toCurrent = 0;
+ currentData = null;
+ // initialize cursor at beginning to avoid "initial previous == last"
+ // behavior when cursor is uninitialized
+ hasNext();
+ }
+
+ /**
+ * Returns the number of elements having the same key value as the key
+ * value of the element last returned by next() or previous(). If no
+ * duplicates are allowed, 1 is always returned.
+ *
+ * @return the number of duplicates.
+ *
+ * @throws IllegalStateException if next() or previous() has not been
+ * called for this iterator, or if remove() or add() were called after
+ * the last call to next() or previous().
+ */
+ public int count() {
+
+ if (!setAndRemoveAllowed) throw new IllegalStateException();
+ try {
+ moveToCurrent();
+ return cursor.count();
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Closes this iterator.
+ * This method does not exist in the standard {@link Iterator} or {@link
+ * ListIterator} interfaces.
+ *
+ * <p>After being closed, only the {@link #hasNext} and {@link
+ * #hasPrevious} methods may be called and these will return false. {@link
+ * #close()} may also be called again and will do nothing. If other
+ * methods are called a <code>NullPointerException</code> will generally be
+ * thrown.</p>
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void close() {
+
+ if (cursor != null) {
+ coll.closeCursor(cursor);
+ cursor = null;
+ }
+ }
+
+ /**
+ * Returns the collection associated with this iterator.
+ * This method does not exist in the standard {@link Iterator} or {@link
+ * ListIterator} interfaces.
+ *
+ * @return the collection associated with this iterator.
+ */
+ public final StoredCollection getCollection() {
+
+ return coll;
+ }
+
+ /* hide for now
+ private final Object current() {
+
+ return currentData;
+ }
+ */
+
+ /* hide for now
+ private int currentIndex()
+ throws IllegalStateException {
+
+ if (!recNumAccess) {
+ throw new UnsupportedOperationException(
+ "Record number access not supported");
+ }
+ try {
+ // TODO: don't we need to moveToCurrent?
+ return cursor.getCurrentRecordNumber() - coll.getIndexOffset();
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+ */
+
+ /* hide for now
+ final DataCursor getCursor() {
+
+ return cursor;
+ }
+ */
+
+ final boolean isCurrentData(Object currentData) {
+
+ return (this.currentData == currentData);
+ }
+
+ final boolean moveToIndex(int index) {
+
+ try {
+ int err = cursor.get(new Integer(index), null, Db.DB_SET,
+ lockForWrite);
+ setAndRemoveAllowed = (err == 0);
+ return setAndRemoveAllowed;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ private void moveToCurrent()
+ throws DbException, IOException {
+
+ if (toCurrent != 0) {
+ cursor.get(null, null, toCurrent, lockForWrite);
+ toCurrent = 0;
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredKeySet.java b/db/java/src/com/sleepycat/bdb/collection/StoredKeySet.java
new file mode 100644
index 000000000..f249a7c9b
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredKeySet.java
@@ -0,0 +1,151 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredKeySet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Set;
+
+/**
+ * The Set returned by Map.keySet() and which can also be constructed directly
+ * if a Map is not needed.
+ * Since this collection is a set it only contains one element for each key,
+ * even when duplicates are allowed. Key set iterators are therefore
+ * particularly useful for enumerating the unique keys of a store or index that
+ * allows duplicates.
+ *
+ * @author Mark Hayes
+ */
+public class StoredKeySet extends StoredCollection implements Set {
+
+ /**
+ * Creates a key set view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredKeySet(DataStore store, DataBinding keyBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, null,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a key set view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredKeySet(DataIndex index, DataBinding keyBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, null,
+ null, writeAllowed));
+ }
+
+ StoredKeySet(DataView keySetView) {
+
+ super(keySetView);
+ }
+
+ /**
+ * Adds the specified key to this set if it is not already present
+ * (optional operation).
+ * When a key is added the value in the underlying data store will be
+ * empty.
+ * This method conforms to the {@link Set#add} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is indexed, or
+ * if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean add(Object key) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ int err = view.put(key, null, Db.DB_NOOVERWRITE, null);
+ commitAutoCommit(doAutoCommit);
+ return (err == 0);
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Removes the specified key from this set if it is present (optional
+ * operation).
+ * If duplicates are allowed, this method removes all duplicates for the
+ * given key.
+ * This method conforms to the {@link Set#remove} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean remove(Object key) {
+
+ return removeKey(key, null);
+ }
+
+ /**
+ * Returns true if this set contains the specified key.
+ * This method conforms to the {@link Set#contains} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean contains(Object key) {
+
+ return containsKey(key);
+ }
+
+ boolean hasValues() {
+
+ return false;
+ }
+
+ Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
+ throws DbException, IOException {
+
+ return cursor.getCurrentKey();
+ }
+
+ boolean iterateDuplicates() {
+
+ return false;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredList.java b/db/java/src/com/sleepycat/bdb/collection/StoredList.java
new file mode 100644
index 000000000..fed784064
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredList.java
@@ -0,0 +1,576 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredList.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.RecordNumberFormat;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.bdb.KeyRangeException;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A List view of a {@link DataStore} or {@link DataIndex}.
+ *
+ * <p>For all stored lists the keys of the underlying DataStore or DataIndex
+ * must have record number format, and therefore the store or index must be a
+ * RECNO, RECNO-RENUMBER, QUEUE, or BTREE-RECNUM database. Only RECNO-RENUMBER
+ * allows true list behavior where record numbers are renumbered following the
+ * position of an element that is added or removed. For the other access
+ * methods (RECNO, QUEUE, and BTREE-RECNUM), stored Lists are most useful as
+ * read-only collections where record numbers are not required to be
+ * sequential.</p>
+ *
+ * <p>In addition to the standard List methods, this class provides the
+ * following methods for stored lists only. Note that the use of these methods
+ * is not compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #append(Object)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredList extends StoredCollection implements List {
+
+ private static final DataBinding DEFAULT_KEY_BINDING =
+ new IndexKeyBinding(1);
+
+ private int baseIndex = 1;
+ private boolean isSubList;
+
+ /**
+ * Creates a list view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredList(DataStore store, DataBinding valueBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, DEFAULT_KEY_BINDING, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a list entity view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredList(DataStore store, EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, DEFAULT_KEY_BINDING, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ /**
+ * Creates a list view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredList(DataIndex index, DataBinding valueBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, DEFAULT_KEY_BINDING, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a list entity view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredList(DataIndex index, EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, DEFAULT_KEY_BINDING, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ private StoredList(DataView view, int baseIndex) {
+
+ super(view);
+ this.baseIndex = baseIndex;
+ this.isSubList = true;
+ }
+
+ /**
+ * Inserts the specified element at the specified position in this list
+ * (optional operation).
+ * This method conforms to the {@link List#add(int, Object)} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is indexed, or if the collection is read-only, or if
+ * the RECNO-RENUMBER access method was not used.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void add(int index, Object value) {
+
+ checkIterAddAllowed();
+ DataCursor cursor = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ cursor = new DataCursor(view, true);
+ int err = cursor.get(new Long(index), null, Db.DB_SET, false);
+ if (err == 0) {
+ cursor.put(null, value, Db.DB_BEFORE, null);
+ closeCursor(cursor);
+ } else {
+ closeCursor(cursor);
+ cursor = null;
+ view.append(value, null, null);
+ }
+ commitAutoCommit(doAutoCommit);
+ } catch (Exception e) {
+ closeCursor(cursor);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Appends the specified element to the end of this list (optional
+ * operation).
+ * This method conforms to the {@link List#add(Object)} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is indexed, or if the collection is read-only, or if
+ * the RECNO-RENUMBER access method was not used.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean add(Object value) {
+
+ checkIterAddAllowed();
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ view.append(value, null, null);
+ commitAutoCommit(doAutoCommit);
+ return true;
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Appends a given value returning the newly assigned index.
+ * If a {@link com.sleepycat.bdb.PrimaryKeyAssigner} is associated with
+ * Store for this list, it will be used to assigned the returned index.
+ * Otherwise the Store must be a QUEUE or RECNO database and the next
+ * available record number is assigned as the index.
+ * This method does not exist in the standard {@link List} interface.
+ *
+ * @param value the value to be appended.
+ *
+ * @return the assigned index.
+ *
+ * @throws UnsupportedOperationException if the collection is indexed, or
+ * if the collection is read-only, or if the Store has no {@link
+ * com.sleepycat.bdb.PrimaryKeyAssigner} and is not a QUEUE or RECNO
+ * database.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public int append(Object value) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ Object[] key = new Object[1];
+ view.append(value, key, null);
+ commitAutoCommit(doAutoCommit);
+ return ((Number) key[0]).intValue();
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ void checkIterAddAllowed()
+ throws UnsupportedOperationException {
+
+ if (isSubList) {
+ throw new UnsupportedOperationException("cannot add to subList");
+ }
+ if (!view.getDb().areKeysRenumbered()) { // checks for RECNO-RENUM
+ throw new UnsupportedOperationException(
+ "requires renumbered keys");
+ }
+ }
+
+ /**
+ * Inserts all of the elements in the specified collection into this list
+ * at the specified position (optional operation).
+ * This method conforms to the {@link List#addAll(int, Collection)}
+ * interface.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is indexed, or if the collection is read-only, or if
+ * the RECNO-RENUMBER access method was not used.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean addAll(int index, Collection coll) {
+
+ checkIterAddAllowed();
+ DataCursor cursor = null;
+ Iterator i = null;
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ i = coll.iterator();
+ if (!i.hasNext()) {
+ return false;
+ }
+ cursor = new DataCursor(view, true);
+ int err = cursor.get(new Long(index), null, Db.DB_SET, false);
+ if (err == 0) {
+ while (i.hasNext()) {
+ cursor.put(null, i.next(), Db.DB_BEFORE, null);
+ }
+ closeCursor(cursor);
+ } else {
+ closeCursor(cursor);
+ cursor = null;
+ while (i.hasNext()) {
+ view.append(i.next(), null, null);
+ }
+ }
+ StoredIterator.close(i);
+ commitAutoCommit(doAutoCommit);
+ return true;
+ } catch (Exception e) {
+ closeCursor(cursor);
+ StoredIterator.close(i);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Returns true if this list contains the specified element.
+ * This method conforms to the {@link List#contains} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean contains(Object value) {
+
+ return containsValue(value);
+ }
+
+ /**
+ * Returns the element at the specified position in this list.
+ * This method conforms to the {@link List#get} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object get(int index) {
+
+ return super.get(new Long(index));
+ }
+
+ /**
+ * Returns the index in this list of the first occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ * This method conforms to the {@link List#indexOf} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public int indexOf(Object value) {
+
+ return indexOf(value, true);
+ }
+
+ /**
+ * Returns the index in this list of the last occurrence of the specified
+ * element, or -1 if this list does not contain this element.
+ * This method conforms to the {@link List#lastIndexOf} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public int lastIndexOf(Object value) {
+
+ return indexOf(value, false);
+ }
+
+ private int indexOf(Object value, boolean findFirst) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.find(value, findFirst);
+ return (err == 0)
+ ? (cursor.getCurrentRecordNumber() - baseIndex)
+ : (-1);
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ int getIndexOffset() {
+
+ return baseIndex;
+ }
+
+ /**
+ * Returns a list iterator of the elements in this list (in proper
+ * sequence).
+ * The iterator will be read-only if the collection is read-only.
+ * This method conforms to the {@link List#listIterator()} interface.
+ *
+ * @return a {@link StoredIterator} for this collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isWriteAllowed
+ */
+ public ListIterator listIterator() {
+
+ return iterator(isWriteAllowed());
+ }
+
+ /**
+ * Returns a list iterator of the elements in this list (in proper
+ * sequence), starting at the specified position in this list.
+ * The iterator will be read-only if the collection is read-only.
+ * This method conforms to the {@link List#listIterator(int)} interface.
+ *
+ * @return a {@link StoredIterator} for this collection.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isWriteAllowed
+ */
+ public ListIterator listIterator(int index) {
+
+ StoredIterator i = iterator(isWriteAllowed());
+ if (i.moveToIndex(index)) {
+ return i;
+ } else {
+ i.close();
+ throw new IndexOutOfBoundsException(String.valueOf(index));
+ }
+ }
+
+ /**
+ * Removes the element at the specified position in this list (optional
+ * operation).
+ * This method conforms to the {@link List#remove(int)} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object remove(int index) {
+
+ try {
+ Object[] oldVal = new Object[1];
+ removeKey(new Long(index), oldVal);
+ return oldVal[0];
+ } catch (IllegalArgumentException e) {
+ throw new IndexOutOfBoundsException(e.getMessage());
+ }
+ }
+
+ /**
+ * Removes the first occurrence in this list of the specified element
+ * (optional operation).
+ * This method conforms to the {@link List#remove(Object)} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is a sublist, or
+ * if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean remove(Object value) {
+
+ return removeValue(value);
+ }
+
+ /**
+ * Replaces the element at the specified position in this list with the
+ * specified element (optional operation).
+ * This method conforms to the {@link List#set} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is indexed, or
+ * if the collection is read-only.
+ *
+ * @throws IllegalArgumentException if an entity value binding is used and
+ * the primary key of the value given is different than the existing stored
+ * primary key.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object set(int index, Object value) {
+
+ try {
+ return put(new Long(index), value);
+ } catch (IllegalArgumentException e) {
+ throw new IndexOutOfBoundsException(e.getMessage());
+ }
+ }
+
+ /**
+ * Returns a view of the portion of this list between the specified
+ * fromIndex, inclusive, and toIndex, exclusive.
+ * Note that add() and remove() may not be called for the returned sublist.
+ * This method conforms to the {@link List#subList} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public List subList(int fromIndex, int toIndex) {
+
+ if (fromIndex < 0 || fromIndex > toIndex) {
+ throw new IndexOutOfBoundsException(String.valueOf(fromIndex));
+ }
+ try {
+ int newBaseIndex = baseIndex + fromIndex;
+ return new StoredList(
+ view.subView(new Long(fromIndex), true,
+ new Long(toIndex), false,
+ new IndexKeyBinding(newBaseIndex)),
+ newBaseIndex);
+ } catch (KeyRangeException e) {
+ throw new IndexOutOfBoundsException(e.getMessage());
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Compares the specified object with this list for equality.
+ * A value comparison is performed by this method and the stored values
+ * are compared rather than calling the equals() method of each element.
+ * This method conforms to the {@link List#equals} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean equals(Object other) {
+
+ if (!(other instanceof List)) return false;
+ List otherList = (List) other;
+ ListIterator i1 = null;
+ ListIterator i2 = null;
+ try {
+ i1 = listIterator();
+ i2 = otherList.listIterator();
+ while (i1.hasNext()) {
+ if (!i2.hasNext()) return false;
+ if (i1.nextIndex() != i2.nextIndex()) return false;
+ Object o1 = i1.next();
+ Object o2 = i2.next();
+ if (o1 == null) {
+ if (o2 != null) return false;
+ } else {
+ if (!o1.equals(o2)) return false;
+ }
+ }
+ if (i2.hasNext()) return false;
+ return true;
+ } finally {
+ StoredIterator.close(i1);
+ StoredIterator.close(i2);
+ }
+ }
+
+ Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
+ throws DbException, IOException {
+
+ return cursor.getCurrentValue();
+ }
+
+ boolean hasValues() {
+
+ return true;
+ }
+
+ private static class IndexKeyBinding implements DataBinding {
+
+ private static RecordNumberFormat format = new RecordNumberFormat();
+ private int baseIndex;
+
+ private IndexKeyBinding(int baseIndex) {
+
+ this.baseIndex = baseIndex;
+ }
+
+ public DataFormat getDataFormat() {
+
+ return format;
+ }
+
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ return new Long(format.dataToRecordNumber(data) - baseIndex);
+ }
+
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ format.recordNumberToData(((Number) object).intValue() + baseIndex,
+ data);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredMap.java b/db/java/src/com/sleepycat/bdb/collection/StoredMap.java
new file mode 100644
index 000000000..fe0448702
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredMap.java
@@ -0,0 +1,473 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredMap.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.bdb.KeyRangeException;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+
+/**
+ * A Map view of a {@link DataStore} or {@link DataIndex}.
+ *
+ * <p>In addition to the standard Map methods, this class provides the
+ * following methods for stored maps only. Note that the use of these methods
+ * is not compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #duplicates(Object)}</li>
+ * <li>{@link #append(Object)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredMap extends StoredContainer implements Map {
+
+ private StoredKeySet keySet;
+ private StoredEntrySet entrySet;
+ private StoredValueSet valueSet;
+
+ /**
+ * Creates a map view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredMap(DataStore store, DataBinding keyBinding,
+ DataBinding valueBinding, boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, valueBinding,
+ null, writeAllowed));
+ }
+
+ protected Object clone()
+ throws CloneNotSupportedException {
+
+ // cached collections must be cleared and recreated with the new view
+ // of the map to inherit the new view's properties
+ StoredMap other = (StoredMap) super.clone();
+ other.keySet = null;
+ other.entrySet = null;
+ other.valueSet = null;
+ return other;
+ }
+
+ /**
+ * Creates a map entity view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredMap(DataStore store, DataBinding keyBinding,
+ EntityBinding valueEntityBinding, boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ /**
+ * Creates a map view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredMap(DataIndex index, DataBinding keyBinding,
+ DataBinding valueBinding, boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a map entity view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredMap(DataIndex index, DataBinding keyBinding,
+ EntityBinding valueEntityBinding, boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ StoredMap(DataView view) {
+
+ super(view);
+ }
+
+ /**
+ * Returns the value to which this map maps the specified key.
+ * If duplicates are allowed, this method returns the first duplicate, in
+ * the order in which duplicates are configured, that maps to the specified
+ * key.
+ * This method conforms to the {@link Map#get} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object get(Object key) {
+
+ return super.get(key);
+ }
+
+ /**
+ * Associates the specified value with the specified key in this map
+ * (optional operation).
+ * If duplicates are allowed and the specified key is already mapped to a
+ * value, this method appends the new duplicate after the existing
+ * duplicates.
+ * This method conforms to the {@link Map#put} interface.
+ *
+ * <p>The key parameter may be null if an entity binding is used and the
+ * key will be derived from the value (entity) parameter. If an entity
+ * binding is used and the key parameter is non-null, then the key
+ * parameter must be equal to the key derived from the value parameter.</p>
+ *
+ * @return the previous value associated with specified key, or null if
+ * there was no mapping for the key or if duplicates are allowed.
+ *
+ * @throws UnsupportedOperationException if the collection is indexed, or
+ * if the collection is read-only.
+ *
+ * @throws IllegalArgumentException if an entity value binding is used and
+ * the primary key of the value given is different than the existing stored
+ * primary key.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object put(Object key, Object value) {
+
+ return super.put(key, value);
+ }
+
+ /**
+ * Appends a given value returning the newly assigned key.
+ * If a {@link com.sleepycat.bdb.PrimaryKeyAssigner} is associated with
+ * Store for this map, it will be used to assigned the returned key.
+ * Otherwise the Store must be a QUEUE or RECNO database and the next
+ * available record number is assigned as the key.
+ * This method does not exist in the standard {@link Map} interface.
+ *
+ * @param value the value to be appended.
+ *
+ * @return the assigned key.
+ *
+ * @throws UnsupportedOperationException if the collection is indexed, or
+ * if the collection is read-only, or if the Store has no {@link
+ * com.sleepycat.bdb.PrimaryKeyAssigner} and is not a QUEUE or RECNO
+ * database.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object append(Object value) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ Object[] key = new Object[1];
+ view.append(value, key, null);
+ commitAutoCommit(doAutoCommit);
+ return key[0];
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Removes the mapping for this key from this map if present (optional
+ * operation).
+ * If duplicates are allowed, this method removes all duplicates for the
+ * given key.
+ * This method conforms to the {@link Map#remove} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object remove(Object key) {
+
+ Object[] oldVal = new Object[1];
+ removeKey(key, oldVal);
+ return oldVal[0];
+ }
+
+ /**
+ * Returns true if this map contains the specified key.
+ * This method conforms to the {@link Map#containsKey} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean containsKey(Object key) {
+
+ return super.containsKey(key);
+ }
+
+ /**
+ * Returns true if this map contains the specified value.
+ * When an entity binding is used, this method returns whether the map
+ * contains the primary key and value mapping of the entity.
+ * This method conforms to the {@link Map#containsValue} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean containsValue(Object value) {
+
+ return super.containsValue(value);
+ }
+
+ /**
+ * Copies all of the mappings from the specified map to this map (optional
+ * operation).
+ * When duplicates are allowed, the mappings in the specified map are
+ * effectively appended to the existing mappings in this map, that is no
+ * previously existing mappings in this map are replaced.
+ * This method conforms to the {@link Map#putAll} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only, or
+ * if the collection is indexed.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public void putAll(Map map) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ Iterator entries = null;
+ try {
+ entries = map.entrySet().iterator();
+ while (entries.hasNext()) {
+ Map.Entry entry = (Map.Entry) entries.next();
+ put(entry.getKey(), entry.getValue());
+ }
+ StoredIterator.close(entries);
+ commitAutoCommit(doAutoCommit);
+ } catch (Exception e) {
+ StoredIterator.close(entries);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+
+ /**
+ * Returns a set view of the keys contained in this map.
+ * A {@link SortedSet} is returned if the map is ordered.
+ * The returned collection will be read-only if the map is read-only.
+ * This method conforms to the {@link Map#keySet()} interface.
+ *
+ * @return a {@link StoredKeySet} or a {@link StoredSortedKeySet} for this
+ * map.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isOrdered
+ * @see #isWriteAllowed
+ */
+ public Set keySet() {
+
+ if (keySet == null) {
+ synchronized (this) {
+ if (keySet == null) {
+ DataView newView = view.keySetView();
+ if (isOrdered()) {
+ keySet = new StoredSortedKeySet(newView);
+ } else {
+ keySet = new StoredKeySet(newView);
+ }
+ }
+ }
+ }
+ return keySet;
+ }
+
+ /**
+ * Returns a set view of the mappings contained in this map.
+ * A {@link SortedSet} is returned if the map is ordered.
+ * The returned collection will be read-only if the map is read-only.
+ * This method conforms to the {@link Map#entrySet()} interface.
+ *
+ * @return a {@link StoredEntrySet} or a {@link StoredSortedEntrySet} for
+ * this map.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isOrdered
+ * @see #isWriteAllowed
+ */
+ public Set entrySet() {
+
+ if (entrySet == null) {
+ synchronized (this) {
+ if (entrySet == null) {
+ if (isOrdered()) {
+ entrySet = new StoredSortedEntrySet(view);
+ } else {
+ entrySet = new StoredEntrySet(view);
+ }
+ }
+ }
+ }
+ return entrySet;
+ }
+
+ /**
+ * Returns a collection view of the values contained in this map.
+ * A {@link SortedSet} is returned if the map is ordered and the
+ * value/entity binding can be used to derive the map's key from its
+ * value/entity object.
+ * The returned collection will be read-only if the map is read-only.
+ * This method conforms to the {@link Map#entrySet()} interface.
+ *
+ * @return a {@link StoredEntrySet} or a {@link StoredSortedEntrySet} for
+ * this map.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ *
+ * @see #isOrdered
+ * @see #isWriteAllowed
+ */
+ public Collection values() {
+
+ if (valueSet == null) {
+ synchronized (this) {
+ if (valueSet == null) {
+ DataView newView = view.valueSetView();
+ if (isOrdered() && newView.canDeriveKeyFromValue()) {
+ valueSet = new StoredSortedValueSet(newView);
+ } else {
+ valueSet = new StoredValueSet(newView);
+ }
+ }
+ }
+ }
+ return valueSet;
+ }
+
+ /**
+ * Returns a new collection containing the values mapped to the given
+ * key in this map. This collection's iterator() method is particularly
+ * useful for iterating over the duplicates for a given key, since this
+ * is not supported by the standard Map interface.
+ * This method does not exist in the standard {@link Map} interface.
+ *
+ * <p>If no mapping for the given key is present, an empty collection is
+ * returned. If duplicates are not allowed, at most a single value will be
+ * in the collection returned. If duplicates are allowed, the returned
+ * collection's add() method may be used to add values for the given
+ * key.</p>
+ *
+ * @param key is the key for which values are to be returned.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Collection duplicates(Object key) {
+
+ try {
+ DataView newView = view.valueSetView(key);
+ return new StoredValueSet(newView, true);
+ } catch (KeyRangeException e) {
+ return Collections.EMPTY_SET;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+
+ /**
+ * Compares the specified object with this map for equality.
+ * A value comparison is performed by this method and the stored values
+ * are compared rather than calling the equals() method of each element.
+ * This method conforms to the {@link Map#equals} interface.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean equals(Object other) {
+
+ if (other instanceof Map) {
+ return entrySet().equals(((Map) other).entrySet());
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Converts the map to a string representation for debugging.
+ * WARNING: All mappings will be converted to strings and returned and
+ * therefore the returned string may be very large.
+ *
+ * @return the string representation.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public String toString() {
+
+ return entrySet().toString();
+ }
+}
+
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredMapEntry.java b/db/java/src/com/sleepycat/bdb/collection/StoredMapEntry.java
new file mode 100644
index 000000000..6b4e67eba
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredMapEntry.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredMapEntry.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+/**
+ * @author Mark Hayes
+ */
+final class StoredMapEntry extends MapEntry {
+
+ private StoredIterator iter;
+ private StoredCollection coll;
+
+ StoredMapEntry(Object key, Object value, StoredCollection coll,
+ StoredIterator iter) {
+
+ super(key, value);
+ // Assert: coll, coll.keyBinding/valueBinding
+ this.coll = coll;
+ this.iter = iter;
+ }
+
+ public Object setValue(Object newValue) {
+
+ Object oldValue;
+ if (iter != null && iter.isCurrentData(this)) {
+ oldValue = getValue();
+ iter.set(newValue);
+ } else {
+ oldValue = coll.put(getKey(), newValue);
+ }
+ super.setValue(newValue);
+ return oldValue;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredSortedEntrySet.java b/db/java/src/com/sleepycat/bdb/collection/StoredSortedEntrySet.java
new file mode 100644
index 000000000..c7b229a91
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredSortedEntrySet.java
@@ -0,0 +1,203 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredSortedEntrySet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.DbException;
+import java.util.Comparator;
+import java.util.Map;
+import java.util.SortedSet;
+
+/**
+ * The SortedSet returned by Map.entrySet(). This class may not be
+ * instantiated directly. Contrary to what is stated by {@link Map#entrySet}
+ * this class does support the {@link #add} and {@link #addAll} methods.
+ *
+ * <p>The {@link java.util.Map.Entry#setValue} method of the Map.Entry objects
+ * that are returned by this class and its iterators behaves just as the {@link
+ * StoredIterator#set} method does.</p>
+ *
+ * <p>In addition to the standard SortedSet methods, this class provides the
+ * following methods for stored sorted sets only. Note that the use of these
+ * methods is not compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #headSet(Object, boolean)}</li>
+ * <li>{@link #tailSet(Object, boolean)}</li>
+ * <li>{@link #subSet(Object, boolean, Object, boolean)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredSortedEntrySet extends StoredEntrySet implements SortedSet {
+
+ StoredSortedEntrySet(DataView mapView) {
+
+ super(mapView);
+ }
+
+ /**
+ * Returns null since comparators are not supported. The natural ordering
+ * of a stored collection is data byte order, whether the data classes
+ * implement the {@link java.lang.Comparable} interface or not.
+ * This method does not conform to the {@link SortedSet#comparator}
+ * interface.
+ *
+ * @return null.
+ */
+ public Comparator comparator() {
+
+ return null;
+ }
+
+ /**
+ * Returns the first (lowest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#first} interface.
+ *
+ * @return the first element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object first() {
+
+ return getFirstOrLast(true);
+ }
+
+ /**
+ * Returns the last (highest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#last} interface.
+ *
+ * @return the last element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object last() {
+
+ return getFirstOrLast(false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toMapEntry.
+ * This method conforms to the {@link SortedSet#headSet} interface.
+ *
+ * @param toMapEntry the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toMapEntry) {
+
+ return subSet(null, false, toMapEntry, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toMapEntry, optionally including toMapEntry.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param toMapEntry is the upper bound.
+ *
+ * @param toInclusive is true to include toMapEntry.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toMapEntry, boolean toInclusive) {
+
+ return subSet(null, false, toMapEntry, toInclusive);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * greater than or equal to fromMapEntry.
+ * This method conforms to the {@link SortedSet#tailSet} interface.
+ *
+ * @param fromMapEntry is the lower bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromMapEntry) {
+
+ return subSet(fromMapEntry, true, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromMapEntry, optionally including fromMapEntry.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromMapEntry is the lower bound.
+ *
+ * @param fromInclusive is true to include fromMapEntry.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromMapEntry, boolean fromInclusive) {
+
+ return subSet(fromMapEntry, fromInclusive, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements range
+ * from fromMapEntry, inclusive, to toMapEntry, exclusive.
+ * This method conforms to the {@link SortedSet#subSet} interface.
+ *
+ * @param fromMapEntry is the lower bound.
+ *
+ * @param toMapEntry is the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromMapEntry, Object toMapEntry) {
+
+ return subSet(fromMapEntry, true, toMapEntry, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromMapEntry and strictly less than toMapEntry,
+ * optionally including fromMapEntry and toMapEntry.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromMapEntry is the lower bound.
+ *
+ * @param fromInclusive is true to include fromMapEntry.
+ *
+ * @param toMapEntry is the upper bound.
+ *
+ * @param toInclusive is true to include toMapEntry.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromMapEntry, boolean fromInclusive,
+ Object toMapEntry, boolean toInclusive) {
+
+ Object fromKey = (fromMapEntry != null) ?
+ ((Map.Entry) fromMapEntry).getKey() : null;
+ Object toKey = (toMapEntry != null) ?
+ ((Map.Entry) toMapEntry).getKey() : null;
+ try {
+ return new StoredSortedEntrySet(
+ view.subView(fromKey, fromInclusive, toKey, toInclusive, null));
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredSortedKeySet.java b/db/java/src/com/sleepycat/bdb/collection/StoredSortedKeySet.java
new file mode 100644
index 000000000..fb3443a0d
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredSortedKeySet.java
@@ -0,0 +1,246 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredSortedKeySet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.DbException;
+import java.util.Comparator;
+import java.util.SortedSet;
+
+/**
+ * The SortedSet returned by Map.keySet() and which can also be constructed
+ * directly if a Map is not needed.
+ * Since this collection is a set it only contains one element for each key,
+ * even when duplicates are allowed. Key set iterators are therefore
+ * particularly useful for enumerating the unique keys of a store or index that
+ * allows duplicates.
+ *
+ * <p>In addition to the standard SortedSet methods, this class provides the
+ * following methods for stored sorted sets only. Note that the use of these
+ * methods is not compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #headSet(Object, boolean)}</li>
+ * <li>{@link #tailSet(Object, boolean)}</li>
+ * <li>{@link #subSet(Object, boolean, Object, boolean)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredSortedKeySet extends StoredKeySet implements SortedSet {
+
+ /**
+ * Creates a sorted key set view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedKeySet(DataStore store, DataBinding keyBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, null,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a sorted key set view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedKeySet(DataIndex index, DataBinding keyBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, null,
+ null, writeAllowed));
+ }
+
+ StoredSortedKeySet(DataView keySetView) {
+
+ super(keySetView);
+ }
+
+ /**
+ * Returns null since comparators are not supported. The natural ordering
+ * of a stored collection is data byte order, whether the data classes
+ * implement the {@link java.lang.Comparable} interface or not.
+ * This method does not conform to the {@link SortedSet#comparator}
+ * interface.
+ *
+ * @return null.
+ */
+ public Comparator comparator() {
+
+ return null;
+ }
+
+ /**
+ * Returns the first (lowest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#first} interface.
+ *
+ * @return the first element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object first() {
+
+ return getFirstOrLast(true);
+ }
+
+ /**
+ * Returns the last (highest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#last} interface.
+ *
+ * @return the last element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object last() {
+
+ return getFirstOrLast(false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toKey.
+ * This method conforms to the {@link SortedSet#headSet} interface.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toKey) {
+
+ return subSet(null, false, toKey, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toKey, optionally including toKey.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @param toInclusive is true to include toKey.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toKey, boolean toInclusive) {
+
+ return subSet(null, false, toKey, toInclusive);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * greater than or equal to fromKey.
+ * This method conforms to the {@link SortedSet#tailSet} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromKey) {
+
+ return subSet(fromKey, true, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromKey, optionally including fromKey.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param fromInclusive is true to include fromKey.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromKey, boolean fromInclusive) {
+
+ return subSet(fromKey, fromInclusive, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements range
+ * from fromKey, inclusive, to toKey, exclusive.
+ * This method conforms to the {@link SortedSet#subSet} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromKey, Object toKey) {
+
+ return subSet(fromKey, true, toKey, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromKey and strictly less than toKey,
+ * optionally including fromKey and toKey.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param fromInclusive is true to include fromKey.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @param toInclusive is true to include toKey.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromKey, boolean fromInclusive,
+ Object toKey, boolean toInclusive) {
+
+ try {
+ return new StoredSortedKeySet(
+ view.subView(fromKey, fromInclusive, toKey, toInclusive, null));
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredSortedMap.java b/db/java/src/com/sleepycat/bdb/collection/StoredSortedMap.java
new file mode 100644
index 000000000..2aa32e886
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredSortedMap.java
@@ -0,0 +1,321 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredSortedMap.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.util.Comparator;
+import java.util.SortedMap;
+
+/**
+ * A SortedMap view of a {@link DataStore} or {@link DataIndex}.
+ *
+ * <p>In addition to the standard SortedMap methods, this class provides the
+ * following methods for stored sorted maps only. Note that the use of these
+ * methods is not compatible with the standard Java collections interface.</p>
+ * <ul>
+ * <li>{@link #duplicates(Object)}</li>
+ * <li>{@link #headMap(Object, boolean)}</li>
+ * <li>{@link #tailMap(Object, boolean)}</li>
+ * <li>{@link #subMap(Object, boolean, Object, boolean)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredSortedMap extends StoredMap implements SortedMap {
+
+ /**
+ * Creates a sorted map view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedMap(DataStore store, DataBinding keyBinding,
+ DataBinding valueBinding, boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a sorted map entity view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedMap(DataStore store, DataBinding keyBinding,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, keyBinding, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ /**
+ * Creates a sorted map view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedMap(DataIndex index, DataBinding keyBinding,
+ DataBinding valueBinding, boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a sorted map entity view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param keyBinding is the binding used to translate between key buffers
+ * and key objects.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedMap(DataIndex index, DataBinding keyBinding,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, keyBinding, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ StoredSortedMap(DataView mapView) {
+
+ super(mapView);
+ }
+
+ /**
+ * Returns null since comparators are not supported. The natural ordering
+ * of a stored collection is data byte order, whether the data classes
+ * implement the {@link java.lang.Comparable} interface or not.
+ * This method does not conform to the {@link SortedMap#comparator}
+ * interface.
+ *
+ * @return null.
+ */
+ public Comparator comparator() {
+
+ return null;
+ }
+
+ /**
+ * Returns the first (lowest) key currently in this sorted map.
+ * This method conforms to the {@link SortedMap#firstKey} interface.
+ *
+ * @return the first key.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object firstKey() {
+
+ return getFirstOrLastKey(true);
+ }
+
+ /**
+ * Returns the last (highest) element currently in this sorted map.
+ * This method conforms to the {@link SortedMap#lastKey} interface.
+ *
+ * @return the last key.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object lastKey() {
+
+ return getFirstOrLastKey(false);
+ }
+
+ private Object getFirstOrLastKey(boolean doGetFirst) {
+
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.get(null, null,
+ doGetFirst ? Db.DB_FIRST : Db.DB_LAST,
+ false);
+ return (err == 0) ? cursor.getCurrentKey() : null;
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose keys are
+ * strictly less than toKey.
+ * This method conforms to the {@link SortedMap#headMap} interface.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap headMap(Object toKey) {
+
+ return subMap(null, false, toKey, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted map whose elements are
+ * strictly less than toKey, optionally including toKey.
+ * This method does not exist in the standard {@link SortedMap} interface.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @param toInclusive is true to include toKey.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap headMap(Object toKey, boolean toInclusive) {
+
+ return subMap(null, false, toKey, toInclusive);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted map whose elements are
+ * greater than or equal to fromKey.
+ * This method conforms to the {@link SortedMap#tailMap} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap tailMap(Object fromKey) {
+
+ return subMap(fromKey, true, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted map whose elements are
+ * strictly greater than fromKey, optionally including fromKey.
+ * This method does not exist in the standard {@link SortedMap} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param fromInclusive is true to include fromKey.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap tailMap(Object fromKey, boolean fromInclusive) {
+
+ return subMap(fromKey, fromInclusive, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted map whose elements range
+ * from fromKey, inclusive, to toKey, exclusive.
+ * This method conforms to the {@link SortedMap#subMap} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap subMap(Object fromKey, Object toKey) {
+
+ return subMap(fromKey, true, toKey, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted map whose elements are
+ * strictly greater than fromKey and strictly less than toKey,
+ * optionally including fromKey and toKey.
+ * This method does not exist in the standard {@link SortedMap} interface.
+ *
+ * @param fromKey is the lower bound.
+ *
+ * @param fromInclusive is true to include fromKey.
+ *
+ * @param toKey is the upper bound.
+ *
+ * @param toInclusive is true to include toKey.
+ *
+ * @return the submap.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedMap subMap(Object fromKey, boolean fromInclusive,
+ Object toKey, boolean toInclusive) {
+
+ try {
+ return new StoredSortedMap(
+ view.subView(fromKey, fromInclusive, toKey, toInclusive, null));
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredSortedValueSet.java b/db/java/src/com/sleepycat/bdb/collection/StoredSortedValueSet.java
new file mode 100644
index 000000000..ab3770ef3
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredSortedValueSet.java
@@ -0,0 +1,286 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredSortedValueSet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.DbException;
+import java.util.Comparator;
+import java.util.SortedSet;
+
+/**
+ * The SortedSet returned by Map.values() and which can also be constructed
+ * directly if a Map is not needed.
+ * Although this collection is a set it may contain duplicate values. Only if
+ * an entity value binding is used are all elements guaranteed to be unique.
+ *
+ * <p>In addition to the standard SortedSet methods, this class provides the
+ * following methods for stored sorted value sets only. Note that the use of
+ * these methods is not compatible with the standard Java collections
+ * interface.</p>
+ * <ul>
+ * <li>{@link #headSet(Object, boolean)}</li>
+ * <li>{@link #tailSet(Object, boolean)}</li>
+ * <li>{@link #subSet(Object, boolean, Object, boolean)}</li>
+ * </ul>
+ *
+ * @author Mark Hayes
+ */
+public class StoredSortedValueSet extends StoredValueSet implements SortedSet {
+
+ // no non-indexed valueBinding ctor is possible since key cannot be derived
+
+ /**
+ * Creates a sorted value set entity view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedValueSet(DataStore store,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, null, null,
+ valueEntityBinding, writeAllowed));
+ checkKeyDerivation();
+ }
+
+ /**
+ * Creates a sorted value set view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedValueSet(DataIndex index,
+ DataBinding valueBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, null, valueBinding,
+ null, writeAllowed));
+ checkKeyDerivation();
+ }
+
+ /**
+ * Creates a sorted value set entity view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredSortedValueSet(DataIndex index,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, null, null,
+ valueEntityBinding, writeAllowed));
+ checkKeyDerivation();
+ }
+
+ StoredSortedValueSet(DataView valueSetView) {
+
+ super(valueSetView);
+ checkKeyDerivation();
+ }
+
+ private void checkKeyDerivation() {
+
+ if (!view.canDeriveKeyFromValue()) {
+ throw new IllegalArgumentException("Cannot derive key from value");
+ }
+ }
+
+ /**
+ * Returns null since comparators are not supported. The natural ordering
+ * of a stored collection is data byte order, whether the data classes
+ * implement the {@link java.lang.Comparable} interface or not.
+ * This method does not conform to the {@link SortedSet#comparator}
+ * interface.
+ *
+ * @return null.
+ */
+ public Comparator comparator() {
+
+ return null;
+ }
+
+ /**
+ * Returns the first (lowest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#first} interface.
+ *
+ * @return the first element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object first() {
+
+ return getFirstOrLast(true);
+ }
+
+ /**
+ * Returns the last (highest) element currently in this sorted set.
+ * This method conforms to the {@link SortedSet#last} interface.
+ *
+ * @return the last element.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public Object last() {
+
+ return getFirstOrLast(false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toValue.
+ * This method conforms to the {@link SortedSet#headSet} interface.
+ *
+ * @param toValue the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toValue) {
+
+ return subSet(null, false, toValue, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly less than toValue, optionally including toValue.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param toValue is the upper bound.
+ *
+ * @param toInclusive is true to include toValue.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet headSet(Object toValue, boolean toInclusive) {
+
+ return subSet(null, false, toValue, toInclusive);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * greater than or equal to fromValue.
+ * This method conforms to the {@link SortedSet#tailSet} interface.
+ *
+ * @param fromValue is the lower bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromValue) {
+
+ return subSet(fromValue, true, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromValue, optionally including fromValue.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromValue is the lower bound.
+ *
+ * @param fromInclusive is true to include fromValue.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet tailSet(Object fromValue, boolean fromInclusive) {
+
+ return subSet(fromValue, fromInclusive, null, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements range
+ * from fromValue, inclusive, to toValue, exclusive.
+ * This method conforms to the {@link SortedSet#subSet} interface.
+ *
+ * @param fromValue is the lower bound.
+ *
+ * @param toValue is the upper bound.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromValue, Object toValue) {
+
+ return subSet(fromValue, true, toValue, false);
+ }
+
+ /**
+ * Returns a view of the portion of this sorted set whose elements are
+ * strictly greater than fromValue and strictly less than toValue,
+ * optionally including fromValue and toValue.
+ * This method does not exist in the standard {@link SortedSet} interface.
+ *
+ * @param fromValue is the lower bound.
+ *
+ * @param fromInclusive is true to include fromValue.
+ *
+ * @param toValue is the upper bound.
+ *
+ * @param toInclusive is true to include toValue.
+ *
+ * @return the subset.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public SortedSet subSet(Object fromValue, boolean fromInclusive,
+ Object toValue, boolean toInclusive) {
+
+ try {
+ return new StoredSortedValueSet(
+ view.subView(fromValue, fromInclusive, toValue, toInclusive,
+ null));
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/StoredValueSet.java b/db/java/src/com/sleepycat/bdb/collection/StoredValueSet.java
new file mode 100644
index 000000000..3ad33872d
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/StoredValueSet.java
@@ -0,0 +1,269 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredValueSet.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.collection;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * The Set returned by Map.values() and Map.duplicates(), and which can also be
+ * constructed directly if a Map is not needed.
+ * Although this collection is a set it may contain duplicate values. Only if
+ * an entity value binding is used are all elements guaranteed to be unique.
+ *
+ * @author Mark Hayes
+ */
+public class StoredValueSet extends StoredCollection implements Set {
+
+ // This class is also used internally for the set returned by duplicates().
+
+ private boolean isSingleKey;
+
+ /**
+ * Creates a value set view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredValueSet(DataStore store,
+ DataBinding valueBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, null, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a value set entity view of a {@link DataStore}.
+ *
+ * @param store is the DataStore underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredValueSet(DataStore store,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(store, null, null, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ /**
+ * Creates a value set view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueBinding is the binding used to translate between value
+ * buffers and value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredValueSet(DataIndex index,
+ DataBinding valueBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, null, valueBinding,
+ null, writeAllowed));
+ }
+
+ /**
+ * Creates a value set entity view of a {@link DataIndex}.
+ *
+ * @param index is the DataIndex underlying the new collection.
+ *
+ * @param valueEntityBinding is the binding used to translate between
+ * key/value buffers and entity value objects.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ *
+ * @throws IllegalArgumentException if formats are not consistently
+ * defined or a parameter is invalid.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public StoredValueSet(DataIndex index,
+ EntityBinding valueEntityBinding,
+ boolean writeAllowed) {
+
+ super(new DataView(null, index, null, null,
+ valueEntityBinding, writeAllowed));
+ }
+
+ StoredValueSet(DataView valueSetView) {
+
+ super(valueSetView);
+ }
+
+ StoredValueSet(DataView valueSetView, boolean isSingleKey) {
+
+ super(valueSetView);
+ this.isSingleKey = isSingleKey;
+ }
+
+ /**
+ * Adds the specified entity to this set if it is not already present
+ * (optional operation).
+ * This method conforms to the {@link Set#add} interface.
+ *
+ * @param entity is the entity to be added.
+ *
+ * @return true if the entity was added, that is the key-value pair
+ * represented by the entity was not previously present in the collection.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only,
+ * if the collection is indexed, or if an entity binding is not used.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean add(Object entity) {
+
+ if (view.getIndex() != null) {
+ throw new UnsupportedOperationException(
+ "add() not allowed with index");
+ } else if (isSingleKey) {
+ // entity is actually just a value in this case
+ boolean doAutoCommit = beginAutoCommit();
+ try {
+ int err = view.addValue(view.getSingleKeyThang(), entity,
+ Db.DB_NODUPDATA);
+ commitAutoCommit(doAutoCommit);
+ return (err == 0);
+ } catch (Exception e) {
+ throw handleException(e, doAutoCommit);
+ }
+ } else if (view.getValueEntityBinding() == null) {
+ throw new UnsupportedOperationException(
+ "add() requires entity binding");
+ } else {
+ return add(null, entity);
+ }
+ }
+
+ /* hide for now, add() will suffice
+ public Object put(Object value) {
+
+ return super.put(null, value);
+ }
+
+ public void putAll(Collection coll) {
+
+ boolean doAutoCommit = beginAutoCommit();
+ Iterator i = null;
+ try {
+ i = coll.iterator();
+ while (i.hasNext()) {
+ put(i.next());
+ }
+ StoredIterator.close(i);
+ commitAutoCommit(doAutoCommit);
+ } catch (Exception e); {
+ StoredIterator.close(i);
+ throw handleException(e, doAutoCommit);
+ }
+ }
+ */
+
+ /**
+ * Returns true if this set contains the specified element.
+ * This method conforms to the {@link java.util.Set#contains(Object)}
+ * interface.
+ *
+ * @param value the value to check.
+ *
+ * @return whether the set contains the given value.
+ */
+ public boolean contains(Object value) {
+
+ return containsValue(value);
+ }
+
+ /**
+ * Removes the specified value from this set if it is present (optional
+ * operation).
+ * If an entity binding is used, the key-value pair represented by the
+ * given entity is removed. If an entity binding is used, the first
+ * occurance of a key-value pair with the given value is removed.
+ * This method conforms to the {@link Set#remove} interface.
+ *
+ * @throws UnsupportedOperationException if the collection is read-only.
+ *
+ * @throws RuntimeExceptionWrapper if a {@link DbException} is thrown.
+ */
+ public boolean remove(Object value) {
+
+ return removeValue(value);
+ }
+
+ // javadoc is inherited
+ public int size() {
+
+ if (!isSingleKey) return super.size();
+ DataCursor cursor = null;
+ try {
+ cursor = new DataCursor(view, false);
+ int err = cursor.get(null, null, Db.DB_FIRST, false);
+ if (err == 0) {
+ return cursor.count();
+ } else {
+ return 0;
+ }
+ } catch (Exception e) {
+ throw StoredContainer.convertException(e);
+ } finally {
+ closeCursor(cursor);
+ }
+ }
+
+ Object makeIteratorData(StoredIterator iterator, DataCursor cursor)
+ throws DbException, IOException {
+
+ return cursor.getCurrentValue();
+ }
+
+ boolean hasValues() {
+
+ return true;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/collection/package.html b/db/java/src/com/sleepycat/bdb/collection/package.html
new file mode 100644
index 000000000..c19af797b
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/collection/package.html
@@ -0,0 +1,7 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:12 jbj Exp $ -->
+<html>
+<body>
+<p>Collection classes providing Map, Set, List and Iterator views of a data store<br>
+<a href="{@docRoot}../ref/bdb/cs_bdb_collection.html" target="_top">[reference guide]</a>
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/factory/TupleSerialDbFactory.java b/db/java/src/com/sleepycat/bdb/factory/TupleSerialDbFactory.java
new file mode 100644
index 000000000..59d0b6821
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/factory/TupleSerialDbFactory.java
@@ -0,0 +1,275 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialDbFactory.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.factory;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.TupleSerialBinding;
+import com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor;
+import com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding;
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.PrimaryKeyAssigner;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.collection.StoredMap;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * Creates stored collections having tuple keys and serialized entity values.
+ * The entity classes must implement the java.io.Serializable and
+ * MarshalledTupleKeyEntity interfaces. The key classes must either implement
+ * the MarshalledTupleData interface or be one of the Java primitive type
+ * classes.
+ *
+ * <p> This factory object is used to create DataStore, DataIndex,
+ * ForeignKeyIndex and Map objects. The underlying DataFormat,
+ * DataBinding and KeyExtractor objects are created automatically. </p>
+ *
+ * @author Mark Hayes
+ */
+public class TupleSerialDbFactory {
+
+ private static final TupleFormat TUPLE_FORMAT = new TupleFormat();
+
+ private ClassCatalog catalog;
+
+ /**
+ * Creates a tuple-serial factory for given environment and class catalog.
+ */
+ public TupleSerialDbFactory(ClassCatalog catalog) {
+
+ this.catalog = catalog;
+ }
+
+ /**
+ * Returns the class catalog associated with this factory.
+ */
+ public final ClassCatalog getCatalog() {
+
+ return catalog;
+ }
+
+ /**
+ * Creates a store from a previously opened Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param baseClass the base class of the entity values for this store.
+ * It must implement the {@link MarshalledTupleKeyEntity} interface.
+ *
+ * @param keyAssigner an object for assigning keys or null if no automatic
+ * key assignment is used.
+ */
+ public DataStore newDataStore(Db db, Class baseClass,
+ PrimaryKeyAssigner keyAssigner) {
+
+ return new DataStore(db, TUPLE_FORMAT,
+ new SerialFormat(catalog, baseClass),
+ keyAssigner);
+ }
+
+ /**
+ * Creates an index from a previously opened Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param store the store to be indexed and also specifies the
+ * environment that was used to create the Db object.
+ *
+ * @param keyName is the key name passed to the {@link
+ * MarshalledTupleKeyEntity#marshalIndexKey} method to identify the index
+ * key.
+ *
+ * @param usePrimaryKey is true if the primary key data is used to
+ * construct the index key.
+ *
+ * @param useValue is true if the value data is used to construct the index
+ * key.
+ *
+ * @throws IllegalArgumentException if a format mismatch is detected
+ * between the index and the store, or if unsorted duplicates were
+ * specified for the index Db.
+ */
+ public DataIndex newDataIndex(DataStore store, Db db, String keyName,
+ boolean usePrimaryKey, boolean useValue) {
+
+ return new DataIndex(store, db, TUPLE_FORMAT,
+ getKeyExtractor(store, keyName,
+ usePrimaryKey, useValue));
+ }
+
+ /**
+ * Creates a foreign key index from a previously opened Db object.
+ *
+ * @param store the store to be indexed and also specifies the
+ * environment that was used to create the Db object.
+ *
+ * @param db the previously opened Db object.
+ *
+ * @param keyName is the key name passed to the {@link
+ * MarshalledTupleKeyEntity#marshalIndexKey} method to identify the index
+ * key.
+ *
+ * @param usePrimaryKey is true if the primary key data is used to
+ * construct the index key.
+ *
+ * @param useValue is true if the value data is used to construct the index
+ * key.
+ *
+ * @param foreignStore is the store in which the index key for this store
+ * is a primary key.
+ *
+ * @param deleteAction determines what action occurs when the foreign key
+ * is deleted. It must be one of the
+ * {@link com.sleepycat.bdb.ForeignKeyIndex ForeignKeyIndex} ON_DELETE_
+ * constants.
+ *
+ * @throws IllegalArgumentException if a format mismatch is detected
+ * between the index and the store, or if unsorted duplicates were
+ * specified for the index Db.
+ */
+ public ForeignKeyIndex newForeignKeyIndex(DataStore store, Db db,
+ String keyName,
+ boolean usePrimaryKey,
+ boolean useValue,
+ DataStore foreignStore,
+ int deleteAction) {
+
+ return new ForeignKeyIndex(store, db,
+ getKeyExtractor(store, keyName,
+ usePrimaryKey, useValue),
+ foreignStore, deleteAction);
+ }
+
+ /**
+ * Creates a map for a given store that was obtained from this factory.
+ *
+ * @param store a store obtained from this factory.
+ *
+ * @param keyClass is the class used for map keys. It must implement the
+ * {@link MarshalledTupleData} interface or be one of the Java primitive
+ * type classes.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ */
+ public StoredMap newMap(DataStore store, Class keyClass,
+ boolean writeAllowed) {
+
+ return new StoredMap(store,
+ getKeyBinding(keyClass),
+ getEntityBinding(store),
+ writeAllowed);
+ }
+
+ /**
+ * Creates a map for a given index that was obtained from this factory.
+ *
+ * @param index a index obtained from this factory.
+ *
+ * @param keyClass is the class used for map keys. It must implement the
+ * {@link MarshalledTupleData} interface or be one of the Java primitive
+ * type classes.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ */
+ public StoredMap newMap(DataIndex index, Class keyClass,
+ boolean writeAllowed) {
+
+ return new StoredMap(index,
+ getKeyBinding(keyClass),
+ getEntityBinding(index.getStore()),
+ writeAllowed);
+ }
+
+ /**
+ * Creates a sorted map for a given store that was obtained from this
+ * factory.
+ *
+ * @param store a store obtained from this factory.
+ *
+ * @param keyClass is the class used for map keys. It must implement the
+ * {@link MarshalledTupleData} interface or be one of the Java primitive
+ * type classes.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ */
+ public StoredSortedMap newSortedMap(DataStore store, Class keyClass,
+ boolean writeAllowed) {
+
+ return new StoredSortedMap(store,
+ getKeyBinding(keyClass),
+ getEntityBinding(store),
+ writeAllowed);
+ }
+
+ /**
+ * Creates a sorted map for a given index that was obtained from this
+ * factory.
+ *
+ * @param index an index obtained from this factory.
+ *
+ * @param keyClass is the class used for map keys. It must implement the
+ * {@link MarshalledTupleData} interface or be one of the Java primitive
+ * type classes.
+ *
+ * @param writeAllowed is true to create a read-write collection or false
+ * to create a read-only collection.
+ */
+ public StoredSortedMap newSortedMap(DataIndex index, Class keyClass,
+ boolean writeAllowed) {
+
+ return new StoredSortedMap(index,
+ getKeyBinding(keyClass),
+ getEntityBinding(index.getStore()),
+ writeAllowed);
+ }
+
+ private TupleSerialMarshalledKeyExtractor getKeyExtractor(
+ DataStore store, String keyName,
+ boolean usePrimaryKey, boolean useValue) {
+
+ return new TupleSerialMarshalledKeyExtractor(
+ getEntityBinding(store),
+ TUPLE_FORMAT, keyName,
+ usePrimaryKey, useValue);
+ }
+
+ private TupleSerialMarshalledBinding getEntityBinding(DataStore store) {
+
+ return new TupleSerialMarshalledBinding(
+ (TupleFormat) store.getKeyFormat(),
+ (SerialFormat) store.getValueFormat());
+ }
+
+ private DataBinding getKeyBinding(Class keyClass) {
+
+ DataBinding binding = TupleBinding.getPrimitiveBinding(keyClass,
+ TUPLE_FORMAT);
+ if (binding == null) {
+ binding = new TupleMarshalledBinding(TUPLE_FORMAT, keyClass);
+ }
+ return binding;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/factory/package.html b/db/java/src/com/sleepycat/bdb/factory/package.html
new file mode 100644
index 000000000..0506eb775
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/factory/package.html
@@ -0,0 +1,6 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:12 jbj Exp $ -->
+<html>
+<body>
+<p>Factory classes
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/package.html b/db/java/src/com/sleepycat/bdb/package.html
new file mode 100644
index 000000000..5dc277476
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/package.html
@@ -0,0 +1,7 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:11 jbj Exp $ -->
+<html>
+<body>
+<p>Core database classes for defining an environment, creating data stores, and running transactions</br>
+<a href="{@docRoot}../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/bdb/util/ExceptionUnwrapper.java b/db/java/src/com/sleepycat/bdb/util/ExceptionUnwrapper.java
new file mode 100644
index 000000000..f67084394
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/ExceptionUnwrapper.java
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ExceptionUnwrapper.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+/**
+ * Unwraps nested exceptions by calling the {@link
+ * ExceptionWrapper#getDetail()} method for exceptions that implement the
+ * {@link ExceptionWrapper} interface. Does not currently support the Java 1.4
+ * <code>Throwable.getDetail()</code> method.
+ *
+ * @author Mark Hayes
+ */
+public class ExceptionUnwrapper {
+
+ /**
+ * Unwraps an Exception and returns the underlying Exception, or throws an
+ * Error if the underlying Throwable is an Error.
+ *
+ * @param e is the Exception to unwrap.
+ *
+ * @return the underlying Exception.
+ *
+ * @throws Error if the underlying Throwable is an Error.
+ *
+ * @throws IllegalArgumentException if the underlying Throwable is not an
+ * Exception or an Error.
+ */
+ public static Exception unwrap(Exception e) {
+
+ Throwable t = unwrapAny(e);
+ if (t instanceof Exception) {
+ return (Exception) t;
+ } else if (t instanceof Error) {
+ throw (Error) t;
+ } else {
+ throw new IllegalArgumentException("Not Exception or Error: " + t);
+ }
+ }
+
+ /**
+ * Unwraps an Exception and returns the underlying Throwable.
+ *
+ * @param e is the Exception to unwrap.
+ *
+ * @return the underlying Throwable.
+ */
+ public static Throwable unwrapAny(Throwable e) {
+
+ while (true) {
+ if (e instanceof ExceptionWrapper) {
+ Throwable e2 = ((ExceptionWrapper) e).getDetail();
+ if (e2 == null) {
+ return e;
+ } else {
+ e = e2;
+ }
+ } else {
+ return e;
+ }
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/ExceptionWrapper.java b/db/java/src/com/sleepycat/bdb/util/ExceptionWrapper.java
new file mode 100644
index 000000000..c430c24d7
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/ExceptionWrapper.java
@@ -0,0 +1,25 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ExceptionWrapper.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+/**
+ * Interface implemented by exceptions that can contain nested exceptions.
+ *
+ * @author Mark Hayes
+ */
+public interface ExceptionWrapper {
+
+ /**
+ * Returns the nested exception or null if none is present.
+ *
+ * @return the nested exception or null if none is present.
+ */
+ Throwable getDetail();
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/FastInputStream.java b/db/java/src/com/sleepycat/bdb/util/FastInputStream.java
new file mode 100644
index 000000000..bbc571417
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/FastInputStream.java
@@ -0,0 +1,143 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: FastInputStream.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A replacement for ByteArrayInputStream that does not synchronize every
+ * byte read.
+ *
+ * @author Mark Hayes
+ */
+public class FastInputStream extends InputStream {
+
+ protected int len;
+ protected int off;
+ protected int mark;
+ protected byte[] buf;
+
+ /**
+ * Creates an input stream.
+ *
+ * @param buffer the data to read.
+ */
+ public FastInputStream(byte[] buffer) {
+
+ buf = buffer;
+ len = buffer.length;
+ }
+
+ /**
+ * Creates an input stream.
+ *
+ * @param buffer the data to read.
+ *
+ * @param offset the byte offset at which to begin reading.
+ *
+ * @param length the number of bytes to read.
+ */
+ public FastInputStream(byte[] buffer, int offset, int length) {
+
+ buf = buffer;
+ off = offset;
+ len = length;
+ }
+
+ // --- begin ByteArrayInputStream compatible methods ---
+
+ public int available() {
+
+ return len - off;
+ }
+
+ public boolean markSupported() {
+
+ return true;
+ }
+
+ public void mark(int pos) {
+
+ mark = pos;
+ }
+
+ public void reset() {
+
+ off = mark;
+ }
+
+ public long skip(long count) {
+
+ int myCount = (int) count;
+ if (myCount + off > len) {
+ myCount = len - off;
+ }
+ off += myCount;
+ return myCount;
+ }
+
+ public int read() throws IOException {
+
+ return (off < len) ? (buf[off++] & 0xff) : (-1);
+ }
+
+ public int read(byte[] toBuf) throws IOException {
+
+ return read(toBuf, 0, toBuf.length);
+ }
+
+ public int read(byte[] toBuf, int offset, int length) throws IOException {
+
+ int avail = len - off;
+ if (avail <= 0) {
+ return -1;
+ }
+ if (length > avail) {
+ length = avail;
+ }
+ for (int i = 0; i < length; i++) {
+ toBuf[offset++] = buf[off++];
+ }
+ return length;
+ }
+
+ // --- end ByteArrayInputStream compatible methods ---
+
+ /**
+ * Returns the underlying data being read.
+ *
+ * @return the underlying data.
+ */
+ public byte[] getBufferBytes() {
+
+ return buf;
+ }
+
+ /**
+ * Returns the offset at which data is being read from the buffer.
+ *
+ * @return the offset at which data is being read.
+ */
+ public int getBufferOffset() {
+
+ return off;
+ }
+
+ /**
+ * Returns the end of the buffer being read.
+ *
+ * @return the end of the buffer.
+ */
+ public int getBufferLength() {
+
+ return len;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/FastOutputStream.java b/db/java/src/com/sleepycat/bdb/util/FastOutputStream.java
new file mode 100644
index 000000000..d3d6cede2
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/FastOutputStream.java
@@ -0,0 +1,240 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: FastOutputStream.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * A replacement for ByteArrayOutputStream that does not synchronize every
+ * byte read.
+ *
+ * @author Mark Hayes
+ */
+public class FastOutputStream extends OutputStream {
+
+ public static final int DEFAULT_INIT_SIZE = 100;
+ public static final int DEFAULT_BUMP_SIZE = 100;
+
+ private int len;
+ private int bumpLen;
+ private byte[] buf;
+
+ /**
+ * Creates an output stream with default sizes.
+ */
+ public FastOutputStream() {
+
+ buf = new byte[DEFAULT_INIT_SIZE];
+ bumpLen = DEFAULT_BUMP_SIZE;
+ }
+
+ /**
+ * Creates an output stream with a default bump size and a given initial
+ * size.
+ *
+ * @param initialSize the initial size of the buffer.
+ */
+ public FastOutputStream(int initialSize) {
+
+ buf = new byte[initialSize];
+ bumpLen = DEFAULT_BUMP_SIZE;
+ }
+
+ /**
+ * Creates an output stream with a given bump size and initial size.
+ *
+ * @param initialSize the initial size of the buffer.
+ *
+ * @param bumpSize the amount to increment the buffer.
+ */
+ public FastOutputStream(int initialSize, int bumpSize) {
+
+ buf = new byte[initialSize];
+ bumpLen = bumpSize;
+ }
+
+ /**
+ * Creates an output stream with a given initial buffer and a default
+ * bump size.
+ *
+ * @param buffer the initial buffer; will be owned by this object.
+ */
+ public FastOutputStream(byte[] buffer) {
+
+ buf = buffer;
+ bumpLen = DEFAULT_BUMP_SIZE;
+ }
+
+ /**
+ * Creates an output stream with a given initial buffer and a given
+ * bump size.
+ *
+ * @param buffer the initial buffer; will be owned by this object.
+ *
+ * @param bumpSize the amount to increment the buffer.
+ */
+ public FastOutputStream(byte[] buffer, int bumpSize) {
+
+ buf = buffer;
+ bumpLen = bumpSize;
+ }
+
+ // --- begin ByteArrayOutputStream compatible methods ---
+
+ public int size() {
+
+ return len;
+ }
+
+ public void reset() {
+
+ len = 0;
+ }
+
+ public void write(int b) throws IOException {
+
+ if (len + 1 > buf.length)
+ bump(1);
+
+ buf[len++] = (byte) b;
+ }
+
+ public void write(byte[] fromBuf) throws IOException {
+
+ int needed = len + fromBuf.length - buf.length;
+ if (needed > 0)
+ bump(needed);
+
+ for (int i = 0; i < fromBuf.length; i++)
+ buf[len++] = fromBuf[i];
+ }
+
+ public void write(byte[] fromBuf, int offset, int length)
+ throws IOException {
+
+ int needed = len + length - buf.length;
+ if (needed > 0)
+ bump(needed);
+
+ int fromLen = offset + length;
+
+ for (int i = offset; i < fromLen; i++)
+ buf[len++] = fromBuf[i];
+ }
+
+ public synchronized void writeTo(OutputStream out) throws IOException {
+
+ out.write(buf, 0, len);
+ }
+
+ public String toString() {
+
+ return new String(buf, 0, len);
+ }
+
+ public String toString(String encoding)
+ throws UnsupportedEncodingException {
+
+ return new String(buf, 0, len, encoding);
+ }
+
+ public byte[] toByteArray() {
+
+ byte[] toBuf = new byte[len];
+
+ for (int i = 0; i < len; i++)
+ toBuf[i] = buf[i];
+
+ return toBuf;
+ }
+
+ // --- end ByteArrayOutputStream compatible methods ---
+
+ /**
+ * Copy the buffered data to the given array.
+ *
+ * @param toBuf the buffer to hold a copy of the data.
+ *
+ * @param offset the offset at which to start copying.
+ */
+ public void toByteArray(byte[] toBuf, int offset) {
+
+ int toLen = (toBuf.length > len) ? len : toBuf.length;
+
+ for (int i = offset; i < toLen; i++)
+ toBuf[i] = buf[i];
+ }
+
+ /**
+ * Returns the buffer owned by this object.
+ *
+ * @return the buffer.
+ */
+ public byte[] getBufferBytes() {
+
+ return buf;
+ }
+
+ /**
+ * Returns the offset of the internal buffer.
+ *
+ * @return always zero currently.
+ */
+ public int getBufferOffset() {
+
+ return 0;
+ }
+
+ /**
+ * Returns the length used in the internal buffer, that is, the offset at
+ * which data will be written next.
+ *
+ * @return the buffer length.
+ */
+ public int getBufferLength() {
+
+ return len;
+ }
+
+ /**
+ * Ensure that at least the given number of bytes are available in the
+ * internal buffer.
+ *
+ * @param sizeNeeded the number of bytes desired.
+ */
+ public void makeSpace(int sizeNeeded) {
+
+ int needed = len + sizeNeeded - buf.length;
+ if (needed > 0)
+ bump(needed);
+ }
+
+ /**
+ * Skip the given number of bytes in the buffer.
+ *
+ * @param sizeAdded number of bytes to skip.
+ */
+ public void addSize(int sizeAdded) {
+
+ len += sizeAdded;
+ }
+
+ private void bump(int needed) {
+
+ byte[] toBuf = new byte[buf.length + needed + bumpLen];
+
+ for (int i = 0; i < len; i++)
+ toBuf[i] = buf[i];
+
+ buf = toBuf;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/IOExceptionWrapper.java b/db/java/src/com/sleepycat/bdb/util/IOExceptionWrapper.java
new file mode 100644
index 000000000..9093cace1
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/IOExceptionWrapper.java
@@ -0,0 +1,34 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: IOExceptionWrapper.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+import java.io.IOException;
+
+/**
+ * An IOException that can contain nested exceptions.
+ *
+ * @author Mark Hayes
+ */
+public class IOExceptionWrapper
+ extends IOException implements ExceptionWrapper {
+
+ private Throwable e;
+
+ public IOExceptionWrapper(Throwable e) {
+
+ super(e.getMessage());
+ this.e = e;
+ }
+
+ public Throwable getDetail() {
+
+ return e;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/RuntimeExceptionWrapper.java b/db/java/src/com/sleepycat/bdb/util/RuntimeExceptionWrapper.java
new file mode 100644
index 000000000..0dd2631ae
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/RuntimeExceptionWrapper.java
@@ -0,0 +1,32 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: RuntimeExceptionWrapper.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+/**
+ * A RuntimeException that can contain nested exceptions.
+ *
+ * @author Mark Hayes
+ */
+public class RuntimeExceptionWrapper extends RuntimeException
+ implements ExceptionWrapper {
+
+ private Throwable e;
+
+ public RuntimeExceptionWrapper(Throwable e) {
+
+ super(e.getMessage());
+ this.e = e;
+ }
+
+ public Throwable getDetail() {
+
+ return e;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/TimeUnits.java b/db/java/src/com/sleepycat/bdb/util/TimeUnits.java
new file mode 100644
index 000000000..74f5fe9d4
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/TimeUnits.java
@@ -0,0 +1,32 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TimeUnits.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Common time unit definitions.
+ *
+ * @author Mark Hayes
+ */
+public class TimeUnits {
+
+ /** One second in milliseconds. */
+ public static final int ONE_SECOND = 1000;
+ /** One minute in milliseconds. */
+ public static final int ONE_MINUTE = 60 * ONE_SECOND;
+ /** One hour in milliseconds. */
+ public static final int ONE_HOUR = 60 * ONE_MINUTE;
+ /** One day in milliseconds. */
+ public static final long ONE_DAY = 24 * ONE_HOUR;
+ /** One week in milliseconds. */
+ public static final long ONE_WEEK = 7 * ONE_DAY;
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/UtfOps.java b/db/java/src/com/sleepycat/bdb/util/UtfOps.java
new file mode 100644
index 000000000..c794720a2
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/UtfOps.java
@@ -0,0 +1,294 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: UtfOps.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util;
+
+import java.io.EOFException;
+import java.io.UTFDataFormatException;
+
+/**
+ * UTF operations with more flexibility than is provided by DataInput and
+ * DataOutput.
+ *
+ * @author Mark Hayes
+ */
+public class UtfOps {
+
+ private static byte[] EMPTY_BYTES = {};
+ private static String EMPTY_STRING = "";
+
+ /**
+ * Returns the byte length of a null terminated UTF string, not including
+ * the terminator.
+ *
+ * @param bytes the data containing the UTF string.
+ *
+ * @param offset the beginning of the string the measure.
+ *
+ * @return the number of bytes.
+ */
+ public static int getZeroTerminatedByteLength(byte[] bytes, int offset)
+ throws EOFException {
+
+ try {
+ int len = 0;
+ while (bytes[offset++] != 0) {
+ len++;
+ }
+ return len;
+ } catch (IndexOutOfBoundsException e) {
+ throw new EOFException(e.toString());
+ }
+ }
+
+ /**
+ * Returns the byte length of the UTF string that would be created by
+ * converting the given characters to UTF.
+ *
+ * @param chars the characters that would be converted.
+ *
+ * @return the byte length of the equivalent UTF data.
+ */
+ public static int getByteLength(char[] chars) {
+
+ return getByteLength(chars, 0, chars.length);
+ }
+
+ /**
+ * Returns the byte length of the UTF string that would be created by
+ * converting the given characters to UTF.
+ *
+ * @param chars the characters that would be converted.
+ *
+ * @param offset the first character to be converted.
+ *
+ * @param length the number of characters to be converted.
+ *
+ * @return the byte length of the equivalent UTF data.
+ */
+ public static int getByteLength(char[] chars, int offset, int length) {
+
+ int len = 0;
+ length += offset;
+ for (int i = offset; i < length; i++) {
+ int c = chars[i];
+ if ((c >= 0x0001) && (c <= 0x007F)) {
+ len++;
+ } else if (c > 0x07FF) {
+ len += 3;
+ } else {
+ len += 2;
+ }
+ }
+ return len;
+ }
+
+ /**
+ * Returns the number of characters represented by the given UTF string.
+ *
+ * @param bytes the UTF string.
+ *
+ * @return the number of characters.
+ *
+ * @throws EOFException if a UTF character sequence at the end of the data
+ * is not complete.
+ *
+ * @throws UTFDataFormatException if an illegal UTF sequence is
+ * encountered.
+ */
+ public static int getCharLength(byte[] bytes)
+ throws UTFDataFormatException, EOFException {
+
+ return getCharLength(bytes, 0, bytes.length);
+ }
+
+ /**
+ * Returns the number of characters represented by the given UTF string.
+ *
+ * @param bytes the data containing the UTF string.
+ *
+ * @param offset the first byte to be converted.
+ *
+ * @param length the number of byte to be converted.
+ *
+ * @throws EOFException if a UTF character sequence at the end of the data
+ * is not complete.
+ *
+ * @throws UTFDataFormatException if an illegal UTF sequence is
+ * encountered.
+ */
+ public static int getCharLength(byte[] bytes, int offset, int length)
+ throws UTFDataFormatException, EOFException {
+
+ try {
+ int charCount = 0;
+ length += offset;
+ while (offset < length) {
+ switch ((bytes[offset] & 0xff) >> 4) {
+ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+ offset++;
+ break;
+ case 12: case 13:
+ offset += 2;
+ break;
+ case 14:
+ offset += 3;
+ break;
+ default:
+ throw new UTFDataFormatException();
+ }
+ charCount++;
+ }
+ return charCount;
+ } catch (IndexOutOfBoundsException e) {
+ throw new EOFException(e.toString());
+ }
+ }
+
+ /**
+ * Converts byte arrays into character arrays.
+ *
+ * @param bytes the source byte data to convert
+ *
+ * @param byteOffset the offset into the byte array at which
+ * to start the conversion
+ *
+ * @param chars the destination array
+ *
+ * @param charOffset the offset into chars at which to begin the copy
+ *
+ * @param len the amount of information to copy into chars
+ *
+ * @param isByteLen if true then len is a measure of bytes, otherwise
+ * len is a measure of characters
+ *
+ * @throws EOFException if a UTF character sequence at the end of the data
+ * is not complete.
+ *
+ * @throws UTFDataFormatException if an illegal UTF sequence is
+ * encountered.
+ */
+ public static int bytesToChars(byte[] bytes, int byteOffset,
+ char[] chars, int charOffset,
+ int len, boolean isByteLen)
+ throws UTFDataFormatException, EOFException {
+
+ try {
+ int char1, char2, char3;
+ len += isByteLen ? byteOffset : charOffset;
+ while ((isByteLen ? byteOffset : charOffset) < len) {
+ char1 = bytes[byteOffset++] & 0xff;
+ switch ((char1 & 0xff) >> 4) {
+ case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
+ chars[charOffset++] = (char) char1;
+ break;
+ case 12: case 13:
+ char2 = bytes[byteOffset++];
+ if ((char2 & 0xC0) != 0x80) {
+ throw new UTFDataFormatException();
+ }
+ chars[charOffset++] = (char)(((char1 & 0x1F) << 6) |
+ (char2 & 0x3F));
+ break;
+ case 14:
+ char2 = bytes[byteOffset++];
+ char3 = bytes[byteOffset++];
+ if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
+ throw new UTFDataFormatException();
+ chars[charOffset++] = (char)(((char1 & 0x0F) << 12) |
+ ((char2 & 0x3F) << 6) |
+ ((char3 & 0x3F) << 0));
+ break;
+ default:
+ throw new UTFDataFormatException();
+ }
+ }
+ return byteOffset;
+ } catch (IndexOutOfBoundsException e) {
+ throw new EOFException(e.toString());
+ }
+ }
+
+ /**
+ * Converts character arrays into byte arrays.
+ *
+ * @param chars the source character data to convert
+ *
+ * @param charOffset the offset into the character array at which
+ * to start the conversion
+ *
+ * @param bytes the destination array
+ *
+ * @param byteOffset the offset into bytes at which to begin the copy
+ *
+ * @param charLength the length of characters to copy into bytes
+ */
+ public static void charsToBytes(char[] chars, int charOffset,
+ byte[] bytes, int byteOffset,
+ int charLength) {
+ charLength += charOffset;
+ for (int i = charOffset; i < charLength; i++) {
+ int c = chars[i];
+ if ((c >= 0x0001) && (c <= 0x007F)) {
+ bytes[byteOffset++] = (byte) c;
+ } else if (c > 0x07FF) {
+ bytes[byteOffset++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
+ bytes[byteOffset++] = (byte) (0x80 | ((c >> 6) & 0x3F));
+ bytes[byteOffset++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+ } else {
+ bytes[byteOffset++] = (byte) (0xC0 | ((c >> 6) & 0x1F));
+ bytes[byteOffset++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+ }
+ }
+ }
+
+ /**
+ * Converts byte arrays into strings.
+ *
+ * @param bytes the source byte data to convert
+ *
+ * @param offset the offset into the byte array at which
+ * to start the conversion
+ *
+ * @param length the number of bytes to be converted.
+ *
+ * @return the string.
+ *
+ * @throws EOFException if a UTF character sequence at the end of the data
+ * is not complete.
+ *
+ * @throws UTFDataFormatException if an illegal UTF sequence is
+ * encountered.
+ */
+ public static String bytesToString(byte[] bytes, int offset, int length)
+ throws UTFDataFormatException, EOFException {
+
+ if (length == 0) return EMPTY_STRING;
+ int charLen = UtfOps.getCharLength(bytes, offset, length);
+ char[] chars = new char[charLen];
+ UtfOps.bytesToChars(bytes, offset, chars, 0, length, true);
+ return new String(chars, 0, charLen);
+ }
+
+ /**
+ * Converts strings to byte arrays.
+ *
+ * @param string the string to convert.
+ *
+ * @return the UTF byte array.
+ */
+ public static byte[] stringToBytes(String string) {
+
+ if (string.length() == 0) return EMPTY_BYTES;
+ char[] chars = string.toCharArray();
+ byte[] bytes = new byte[UtfOps.getByteLength(chars)];
+ UtfOps.charsToBytes(chars, 0, bytes, 0, chars.length);
+ return bytes;
+ }
+}
diff --git a/db/java/src/com/sleepycat/bdb/util/package.html b/db/java/src/com/sleepycat/bdb/util/package.html
new file mode 100644
index 000000000..7adbc3367
--- /dev/null
+++ b/db/java/src/com/sleepycat/bdb/util/package.html
@@ -0,0 +1,7 @@
+<!-- $Id: package.html,v 1.1 2003/12/15 21:44:12 jbj Exp $ -->
+<html>
+<body>
+<p>General utilities used throughout DB<br>
+<a href="{@docRoot}../ref/bdb/cs_bdb.html" target="_top">[reference guide]</a>
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/db/Db.java b/db/java/src/com/sleepycat/db/Db.java
index de11e2841..a0c6701a3 100644
--- a/db/java/src/com/sleepycat/db/Db.java
+++ b/db/java/src/com/sleepycat/db/Db.java
@@ -1,710 +1,6223 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: Db.java,v 11.38 2000/12/31 19:26:22 bostic Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
-import java.io.OutputStream;
-import java.io.FileNotFoundException;
-
/**
+ * The Db handle is the handle for a Berkeley DB database, which may
+ * or may not be part of a database environment.</p> <p>
*
- * @author Donald D. Anderson
+ * The handle should not be closed while any other handle that refers
+ * to the database is in use; for example, database handles must not
+ * be closed while cursor handles into the database remain open, or
+ * transactions that include operations on the database have not yet
+ * been committed or aborted. Once the {@link
+ * com.sleepycat.db.Db#close Db.close}, {@link
+ * com.sleepycat.db.Db#remove Db.remove}, or {@link
+ * com.sleepycat.db.Db#rename Db.rename} methods are called, the
+ * handle may not be accessed again, regardless of the method's
+ * return.</p>
*/
-public class Db
-{
- // All constant and flag values used with Db* classes are defined here.
-
- // Collectively, these constants are known by the name
- // "DBTYPE" in the documentation.
- //
- public static final int DB_BTREE = 1; // B+tree
- public static final int DB_HASH = 2; // Extended Linear Hashing.
- public static final int DB_RECNO = 3; // Fixed and variable-length records.
- public static final int DB_QUEUE = 4; // Queue
- public static final int DB_UNKNOWN = 5; // Figure it out on open.
-
- // Flags understood by DbEnv()
- //
- // Note: DB_CXX_NO_EXCEPTIONS will have no effect in Java.
- //
- public static final int DB_CXX_NO_EXCEPTIONS; // C++: return error values
- public static final int DB_CLIENT; // Open for a client environment.
-
- // Flags understood by Db()
- //
- public static final int DB_XA_CREATE; // Open in an XA environment.
-
- // Flags understood by Db.open(), DbEnv.open().
- //
- public static final int DB_CREATE; // O_CREAT: create file as necessary.
- public static final int DB_NOMMAP; // Don't mmap underlying file.
- public static final int DB_THREAD; // Free-thread DB package handles.
-
- // Flags understood by only DbEnv.open().
- //
- public static final int DB_LOCKDOWN; // Lock memory into physical core.
- public static final int DB_PRIVATE; // DB_ENV is process local.
-
- //
- // Flags understood by DbEnv.txn_begin().
- //
- public static final int DB_TXN_NOWAIT; // Do not wait for locks in this TXN.
- public static final int DB_TXN_SYNC; // Always sync log on commit.
-
- // Flags understood by DbEnv.set_flags().
- //
- public static final int DB_CDB_ALLDB; // In CDB, lock across environment.
-
- //
- // Flags understood by Db.open().
- //
- public static final int DB_EXCL; // Exclusive open (O_EXCL).
- public static final int DB_RDONLY; // Read-only (O_RDONLY).
- public static final int DB_TRUNCATE; // Discard existing DB.
- public static final int DB_UPGRADE; // Upgrade if necessary.
-
- //
- // DB (user visible) error return codes.
- //
- public static final int DB_INCOMPLETE = -30999; // Sync didn't finish.
- public static final int DB_KEYEMPTY = -30998; // The key/data pair was deleted or
- // was never created by the user.
- public static final int DB_KEYEXIST = -30997; // The key/data pair already exists.
- public static final int DB_LOCK_DEADLOCK = -30996; // Locker killed to resolve deadlock.
- public static final int DB_LOCK_NOTGRANTED = -30995; // Lock unavailable, no-wait set.
- public static final int DB_NOSERVER = -30994; // Server panic return.
- public static final int DB_NOSERVER_HOME = -30993; // Bad home sent to server.
- public static final int DB_NOSERVER_ID = -30992; // Bad ID sent to server.
- public static final int DB_NOTFOUND = -30991; // Key/data pair not found (EOF).
- public static final int DB_OLD_VERSION = -30990; // Out-of-date version.
- public static final int DB_RUNRECOVERY = -30989; // Panic return.
- public static final int DB_VERIFY_BAD = -30988; // Verify failed; bad format.
-
- //
- // Flags used by DbEnv.open and DbEnv.remove.
- //
- public static final int DB_FORCE; // Force (anything).
- public static final int DB_INIT_CDB; // Concurrent Access Methods.
- public static final int DB_INIT_LOCK; // Initialize locking.
- public static final int DB_INIT_LOG; // Initialize logging.
- public static final int DB_INIT_MPOOL; // Initialize mpool.
- public static final int DB_INIT_TXN; // Initialize transactions.
- public static final int DB_JOINENV; // Initialize all subsystems present.
- public static final int DB_RECOVER; // Run normal recovery.
- public static final int DB_RECOVER_FATAL; // Run catastrophic recovery.
- public static final int DB_SYSTEM_MEM; // Use system-backed memory.
- public static final int DB_TXN_NOSYNC; // Do not sync log on commit.
- public static final int DB_USE_ENVIRON; // Use the environment.
- public static final int DB_USE_ENVIRON_ROOT; // Use the environment if root.
-
- //
- // Operations values to the tx_recover() function.
- //
- public static final int DB_TXN_BACKWARD_ROLL = 1;
- public static final int DB_TXN_FORWARD_ROLL = 2;
- public static final int DB_TXN_OPENFILES = 3;
- public static final int DB_TXN_REDO = 4;
- public static final int DB_TXN_UNDO = 5;
-
- //
- // Verbose flags; used for DbEnv.set_verbose
- //
- public static final int DB_VERB_CHKPOINT; // List checkpoints.
- public static final int DB_VERB_DEADLOCK; // Deadlock detection information.
- public static final int DB_VERB_RECOVERY; // Recovery information.
- public static final int DB_VERB_WAITSFOR; // Dump waits-for table.
-
- //
- // Deadlock detector modes; used in the DBENV structure to configure the
- // locking subsystem.
- //
- public static final int DB_LOCK_NORUN;
- public static final int DB_LOCK_DEFAULT;
- public static final int DB_LOCK_OLDEST;
- public static final int DB_LOCK_RANDOM;
- public static final int DB_LOCK_YOUNGEST;
-
- //
- // Flags understood by only Db.set_flags.
- //
- public static final int DB_DUP; // Btree, Hash: duplicate keys.
- public static final int DB_DUPSORT; // Btree, Hash: duplicate keys.
- public static final int DB_RECNUM; // Btree: record numbers.
- public static final int DB_RENUMBER; // Recno: renumber on insert/delete.
- public static final int DB_REVSPLITOFF;// Btree: turn off reverse splits.
- public static final int DB_SNAPSHOT; // Recno: snapshot the input.
-
- //
- // Flags understood by only Db.join
- //
- public static final int DB_JOIN_NOSORT;// Don't try to optimize join.
-
- //
- // Flags understood by only Db.verify
- //
- public static final int DB_NOORDERCHK; // Skip order check; subdb w/ user func
- public static final int DB_ORDERCHKONLY;// Only perform an order check on subdb
- public static final int DB_SALVAGE; // Salvage what looks like data.
- public static final int DB_AGGRESSIVE; // Salvage anything which might be data.
-
- // Collectively, these constants are known by the name
- // "db_lockmode_t" in the documentation.
- //
- public static final int DB_LOCK_NG = 0; // Not granted.
- public static final int DB_LOCK_READ = 1; // Shared/read.
- public static final int DB_LOCK_WRITE = 2; // Exclusive/write.
- public static final int DB_LOCK_IWRITE = 3; // Intent exclusive/write.
- public static final int DB_LOCK_IREAD = 4; // Intent to share/read.
- public static final int DB_LOCK_IWR = 5; // Intent to read and write.
-
- // Collectively, these constants are known by the name
- // "db_lockop_t" in the documentation.
- //
- public static final int DB_LOCK_DUMP = 0; // Display held locks.
- public static final int DB_LOCK_GET = 1; // Get the lock.
- /* Not visible to API: DB_LOCK_INHERIT = 2 // Pass locks to parent. */
- public static final int DB_LOCK_PUT = 3; // Release the lock.
- public static final int DB_LOCK_PUT_ALL = 4;// Release locker's locks.
- public static final int DB_LOCK_PUT_OBJ = 5;// Release locker's locks on obj.
-
- // Flag values for DbLock.vec()
- public static final int DB_LOCK_NOWAIT; // Don't wait on unavailable lock.
-
- // Flag values for DbLock.detect()
- public static final int DB_LOCK_CONFLICT; // Run on any conflict.
-
- //
- // Flag values for DbLog.archive()
- //
- public static final int DB_ARCH_ABS; // Absolute pathnames.
- public static final int DB_ARCH_DATA; // Data files.
- public static final int DB_ARCH_LOG; // Log files.
-
- //
- // DB access method and cursor operation values.
- // Each value is an operation code to which
- // additional bit flags are added.
- //
- public static final int DB_AFTER; // Dbc.put()
- public static final int DB_APPEND; // Db.put()
- public static final int DB_BEFORE; // Dbc.put()
- public static final int DB_CACHED_COUNTS; // Db.stat()
- public static final int DB_CHECKPOINT; // DbLog.put(), DbLog.get()
- public static final int DB_CONSUME; // Db.get()
- public static final int DB_CONSUME_WAIT; // Db.get()
- public static final int DB_CURLSN; // DbLog.put()
- public static final int DB_CURRENT; // Dbc.get(), Dbc.put(), DbLog.get()
- public static final int DB_FIRST; // Dbc.get(), DbLog.get()
- public static final int DB_FLUSH; // DbLog.put()
- public static final int DB_GET_BOTH; // Db.get(), Dbc.get()
- public static final int DB_GET_RECNO; // Dbc.get()
- public static final int DB_JOIN_ITEM; // Dbc.get()
- public static final int DB_KEYFIRST; // Dbc.put()
- public static final int DB_KEYLAST; // Dbc.put()
- public static final int DB_LAST; // Dbc.get(), DbLog.get()
- public static final int DB_NEXT; // Dbc.get(), DbLog.get()
- public static final int DB_NEXT_DUP; // Dbc.get()
- public static final int DB_NEXT_NODUP; // Dbc.get()
- public static final int DB_NODUPDATA; // Don't permit duplicated data
- public static final int DB_NOOVERWRITE;// Db.put()
- public static final int DB_NOSYNC; // Db.close()
- public static final int DB_POSITION; // Dbc.dup()
- public static final int DB_PREV; // Dbc.get(), DbLog.get()
- public static final int DB_PREV_NODUP; // Dbc.get()
- public static final int DB_RECORDCOUNT;// Db.stat()
- public static final int DB_SET; // Dbc.get(), DbLog.get()
- public static final int DB_SET_RANGE; // Dbc.get()
- public static final int DB_SET_RECNO; // Dbc.get()
- public static final int DB_WRITECURSOR;// Db.cursor()
-
- // Other flags that can be added to an operation codes above.
- //
- public static final int DB_RMW; // Acquire write flag immediately.
-
- // Collectively, these values are used for Dbt flags
- //
- // Return in allocated memory.
- public static final int DB_DBT_MALLOC;
-
- // Partial put/get.
- public static final int DB_DBT_PARTIAL;
-
- // Return in realloc'd memory.
- public static final int DB_DBT_REALLOC;
-
- // Return in user's memory.
- public static final int DB_DBT_USERMEM;
-
- // Note: the env can be null
- //
- public Db(DbEnv env, int flags)
- throws DbException
- {
- constructor_env_ = env;
- _init(env, flags);
- if (env == null) {
- dbenv_ = new DbEnv(this);
- }
- else {
- dbenv_ = env;
+public class Db {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected Db(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+
+ protected Db() {
+ this(0, false);
+ }
+
+
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
}
- dbenv_._add_db(this);
- }
-
- //
- // Our parent DbEnv is notifying us that the environment is closing.
- //
- /*package*/ void _notify_dbenv_close()
- {
- dbenv_ = null;
- _notify_internal();
- }
-
- private native void _init(DbEnv env, int flags)
- throws DbException;
-
- private native void _notify_internal();
-
- // methods
- //
-
- public synchronized int close(int flags)
- throws DbException
- {
- int err;
-
- dbenv_._remove_db(this);
- err = _close(flags);
- if (constructor_env_ == null) {
- dbenv_._notify_db_close();
+ swigCPtr = 0;
+ }
+
+
+ protected static long getCPtr(Db obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+
+ final static int GIGABYTE = 1 << 30;
+ // Internally, the JNI layer creates a global reference to each Db,
+ // which can potentially be different to this. We keep a copy here so
+ // we can clean up after destructors.
+ private Object db_ref;
+ private DbEnv dbenv;
+ private boolean private_dbenv;
+ private DbAppendRecno append_recno_handler;
+ private DbBtreeCompare bt_compare_handler;
+ private DbBtreePrefix bt_prefix_handler;
+ private DbDupCompare dup_compare_handler;
+ private DbFeedbackHandler db_feedback_handler;
+ private DbHash h_hash_handler;
+ private DbSecondaryKeyCreate seckey_create_handler;
+
+
+ // Called by the Db constructor
+ private void initialize(DbEnv dbenv) {
+ if (dbenv == null) {
+ private_dbenv = true;
+ dbenv = db_java.getDbEnv0(this);
+ dbenv.initialize();
}
- return err;
+ this.dbenv = dbenv;
+ db_ref = db_java.initDbRef0(this, this);
}
- public native int _close(int flags)
- throws DbException;
- public native Dbc cursor(DbTxn txnid, int flags)
- throws DbException;
+ private void cleanup() {
+ swigCPtr = 0;
+ db_java.deleteRef0(db_ref);
+ db_ref = null;
+ if (private_dbenv) {
+ dbenv.cleanup();
+ }
+ dbenv = null;
+ }
- public native int del(DbTxn txnid, Dbt key, int flags)
- throws DbException;
- public native void err(int errcode, String message);
+ /**
+ * The Db.close method flushes any cached database information to
+ * disk, closes any open cursors, frees any allocated resources,
+ * and closes any underlying files.</p> <p>
+ *
+ * The {@link com.sleepycat.db.Db Db} handle should not be closed
+ * while any other handle that refers to it is not yet closed;
+ * for example, database handles must not be closed while cursor
+ * handles into the database remain open, or transactions that
+ * include operations on the database have not yet been committed
+ * or aborted. Specifically, this includes {@link
+ * com.sleepycat.db.Dbc Dbc} and {@link com.sleepycat.db.DbTxn
+ * DbTxn} handles.</p> <p>
+ *
+ * Because key/data pairs are cached in memory, failing to sync
+ * the file with the Db.close or {@link com.sleepycat.db.Db#sync
+ * Db.sync} method may result in inconsistent or lost
+ * information.</p> <p>
+ *
+ * When called on a database that is the primary database for a
+ * secondary index, the primary database should be closed only
+ * after all secondary indices which reference it have been
+ * closed.</p> <p>
+ *
+ * When multiple threads are using the {@link com.sleepycat.db.Db
+ * Db} concurrently, only a single thread may call the Db.close
+ * method.</p> <p>
+ *
+ * The {@link com.sleepycat.db.Db Db} handle may not be accessed
+ * again after Db.close is called, regardless of its return.</p>
+ *
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOSYNC Db.DB_NOSYNC}
+ * <p>
+ *
+ * Do not flush cached information to disk. The {@link
+ * com.sleepycat.db.Db#DB_NOSYNC <code>Db.DB_NOSYNC</code>}
+ * flag is a dangerous option. It should be set only if the
+ * application is doing logging (with transactions) so that
+ * the database is recoverable after a system or
+ * application crash, or if the database is always
+ * generated from scratch after any system or application
+ * crash. <p>
+ *
+ * <b>It is important to understand that flushing cached
+ * information to disk only minimizes the window of
+ * opportunity for corrupted data.</b> Although unlikely,
+ * it is possible for database corruption to happen if a
+ * system or application crash occurs while writing data to
+ * the database. To ensure that database corruption never
+ * occurs, applications must either: use transactions and
+ * logging with automatic recovery; use logging and
+ * application-specific recovery; or edit a copy of the
+ * database, and once all applications using the database
+ * have successfully called Db.close, atomically replace
+ * the original database with the updated copy.</p> </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The Db.close method will
+ * fail and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ */
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ cleanup();
+ }
+ }
+
- public native void errx(String message);
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDbEnv()}
+ */
+ public DbEnv get_env() throws DbException {
+ return getDbEnv();
+ }
- public native int fd()
- throws DbException;
- // overrides Object.finalize
- protected void finalize()
- throws Throwable
- {
- _finalize(dbenv_.errcall_, dbenv_.errpfx_);
+ /**
+ * The Db.getDbEnv method returns the handle for the database
+ * environment underlying the database.</p> <p>
+ *
+ * The Db.getDbEnv method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getDbEnv method returns the handle
+ * for the database environment underlying the database.</p>
+ */
+ public DbEnv getDbEnv() throws DbException {
+ return dbenv;
}
- protected native void _finalize(DbErrcall errcall, String errpfx)
- throws Throwable;
- // returns: 0, DB_NOTFOUND, or throws error
- public native int get(DbTxn txnid, Dbt key, Dbt data, int flags)
- throws DbException;
+ private final void handle_append_recno(Dbt data, int recno)
+ throws DbException {
+ append_recno_handler.dbAppendRecno(this, data, recno);
+ }
- public native boolean get_byteswapped();
- public native /*DBTYPE*/ int get_type();
+ private final int handle_bt_compare(Dbt dbt1, Dbt dbt2) {
+ return bt_compare_handler.compare(this, dbt1, dbt2);
+ }
+
- public native Dbc join(Dbc curslist[], int flags)
- throws DbException;
+ private final int handle_bt_prefix(Dbt dbt1, Dbt dbt2) {
+ return bt_prefix_handler.prefix(this, dbt1, dbt2);
+ }
- public native void key_range(DbTxn txn, Dbt key,
- DbKeyRange range, int flags)
- throws DbException;
- public synchronized void open(String file, String database,
- /*DBTYPE*/ int type,
- int flags, int mode)
- throws DbException, FileNotFoundException
- {
- _open(file, database, type, flags, mode);
+ private final void handle_db_feedback(int opcode, int percent) {
+ db_feedback_handler.feedback(this, opcode, percent);
}
-
- // (Internal)
- public native void _open(String file, String database,
- /*DBTYPE*/ int type,
- int flags, int mode)
- throws DbException, FileNotFoundException;
-
- // returns: 0, DB_KEYEXIST, or throws error
- public native int put(DbTxn txnid, Dbt key, Dbt data, int flags)
- throws DbException;
- public synchronized native void rename(String file, String database,
- String newname, int flags)
- throws DbException, FileNotFoundException;
+ private final int handle_dup_compare(Dbt dbt1, Dbt dbt2) {
+ return dup_compare_handler.compareDuplicates(this, dbt1, dbt2);
+ }
- public synchronized native void remove(String file, String database,
- int flags)
- throws DbException, FileNotFoundException;
- // Comparison function.
- public void set_append_recno(DbAppendRecno append_recno)
- throws DbException
- {
- append_recno_ = append_recno;
- append_recno_changed(append_recno);
+ private final int handle_h_hash(byte[] data, int len) {
+ return h_hash_handler.hash(this, data, len);
}
- // (Internal)
- private native void append_recno_changed(DbAppendRecno append_recno)
- throws DbException;
- // Comparison function.
- public void set_bt_compare(DbBtreeCompare bt_compare)
- throws DbException
- {
- bt_compare_ = bt_compare;
- bt_compare_changed(bt_compare);
+ private final int handle_seckey_create(Dbt key, Dbt data, Dbt result)
+ throws DbException {
+ return seckey_create_handler.secondaryKeyCreate(
+ this, key, data, result);
}
- // (Internal)
- private native void bt_compare_changed(DbBtreeCompare bt_compare)
- throws DbException;
- // Maximum keys per page.
- public native void set_bt_maxkey(int maxkey)
- throws DbException;
+ /**
+ * The {@link com.sleepycat.db.Db#isEncrypted Db.isEncrypted}
+ * method returns false if the underlying database files are
+ * encrypted and true if they are not.</p> <p>
+ *
+ * The {@link com.sleepycat.db.Db#isEncrypted Db.isEncrypted}
+ * method may not be called before the {@link
+ * com.sleepycat.db.Db#open Db.open} method has been called.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The {@link com.sleepycat.db.Db#isEncrypted
+ * Db.isEncrypted} method returns false if the underlying
+ * database files are encrypted and true if they are not.</p>
+ */
+ public boolean isEncrypted() throws DbException {
+ return (get_encrypt_flags() != 0);
+ }
+
- // Minimum keys per page.
- public native void set_bt_minkey(int minkey)
- throws DbException;
+ /**
+ * The Db.open method opens the database represented by the <b>
+ * file</b> and <b>database</b> parameters for both reading and
+ * writing.</p> <p>
+ *
+ * The currently supported Berkeley DB file formats (or <i>access
+ * methods</i> ) are Btree, Hash, Queue, and Recno. The Btree
+ * format is a representation of a sorted, balanced tree
+ * structure. The Hash format is an extensible, dynamic hashing
+ * scheme. The Queue format supports fast access to fixed-length
+ * records accessed sequentially or by logical record number. The
+ * Recno format supports fixed- or variable-length records,
+ * accessed sequentially or by logical record number, and
+ * optionally backed by a flat text file.</p> <p>
+ *
+ * Storage and retrieval for the Berkeley DB access methods are
+ * based on key/data pairs; see {@link com.sleepycat.db.Dbt Dbt}
+ * for more information.</p> <p>
+ *
+ * Calling Db.open is a relatively expensive operation, and
+ * maintaining a set of open databases will normally be
+ * preferable to repeatedly opening and closing the database for
+ * each new query.</p> <h3>Environment Variables</h3> <p>
+ *
+ * If the database was opened within a database environment, the
+ * environment variable <b>DB_HOME</b> may be used as the path of
+ * the database environment home.</p> <p>
+ *
+ * Db.open is affected by any database directory specified using
+ * the {@link com.sleepycat.db.DbEnv#setDataDir DbEnv.setDataDir}
+ * method, or by setting the "set_data_dir" string in the
+ * environment's <b>DB_CONFIG</b> file.</p> <p>
+ *
+ * If the <b>file</b> and <b>dbenv</b> parameters to Db.open are
+ * null, the environment variable <b>TMPDIR</b> may be used as a
+ * directory in which to create temporary backing files
+ *
+ * @param database optional, and allows
+ * applications to have multiple databases in a single file.
+ * Although no <b>database</b> parameter needs to be
+ * specified, it is an error to attempt to open a second
+ * database in a <b>file</b> that was not initially created
+ * using a <b>database</b> name. Further, the <b>database</b>
+ * parameter is not supported by the Queue format. Finally,
+ * when opening multiple databases in the same physical file,
+ * it is important to consider locking and memory cache
+ * issues; see <a href="{@docRoot}/../ref/am/opensub.html">
+ * Opening multiple databases in a single file</a> for more
+ * information. <p>
+ *
+ * In-memory databases never intended to be preserved on disk
+ * may be created by setting both the <b>file</b> and <b>
+ * database</b> parameters to null. Note that in-memory
+ * databases can only ever be shared by sharing the single
+ * database handle that created them, in circumstances where
+ * doing so is safe.</p>
+ * @param file used as the name of an
+ * underlying file that will be used to back the database.
+ * <p>
+ *
+ * In-memory databases never intended to be preserved on disk
+ * may be created by setting both the <b>file</b> and <b>
+ * database</b> parameters to null. Note that in-memory
+ * databases can only ever be shared by sharing the single
+ * database handle that created them, in circumstances where
+ * doing so is safe.</p>
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.open call within a transaction. If the
+ * call succeeds, the open operation will be recoverable.
+ * If the call fails, no database will have been created.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CREATE Db.DB_CREATE}
+ * <p>
+ *
+ * Create the database. If the database does not already
+ * exist and the <code>Db.DB_CREATE</code> flag is not
+ * specified, the Db.open will fail. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * Support dirty reads; that is, read operations on the
+ * database may request the return of modified but not yet
+ * committed data. This flag must be specified on all
+ * {@link com.sleepycat.db.Db Db} handles used to perform
+ * dirty reads or database updates, otherwise requests for
+ * dirty reads may not be honored and the read may block.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_EXCL Db.DB_EXCL}<p>
+ *
+ * Return an error if the database already exists. The
+ * <code>Db.DB_EXCL</code> flag is only meaningful when
+ * specified with the <code>Db.DB_CREATE</code> flag. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOMMAP Db.DB_NOMMAP}
+ * <p>
+ *
+ * Do not map this database into process memory (see the
+ * {@link com.sleepycat.db.DbEnv#setMemoryPoolMapSize
+ * DbEnv.setMemoryPoolMapSize} method for further
+ * information). </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RDONLY Db.DB_RDONLY}
+ * <p>
+ *
+ * Open the database for reading only. Any attempt to
+ * modify items in the database will fail, regardless of
+ * the actual permissions of any underlying files. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD}
+ * <p>
+ *
+ * Cause the {@link com.sleepycat.db.Db Db} handle returned
+ * by Db.open to be <i>free-threaded</i> ; that is, usable
+ * by multiple threads within a single address space. <p>
+ *
+ * Threading is always assumed in the Java API, so no
+ * special flags are required, and Berkeley DB functions
+ * will always behave as if the {@link
+ * com.sleepycat.db.Db#DB_THREAD <code>Db.DB_THREAD</code>}
+ * flag was specified.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TRUNCATE
+ * Db.DB_TRUNCATE}<p>
+ *
+ * Physically truncate the underlying file, discarding all
+ * previous databases it might have held. Underlying
+ * filesystem primitives are used to implement this flag.
+ * For this reason, it is applicable only to the file and
+ * cannot be used to discard databases within a file. <p>
+ *
+ * The <code>Db.DB_TRUNCATE</code> flag cannot be lock or
+ * transaction-protected, and it is an error to specify it
+ * in a locking or transaction-protected environment.</p>
+ * </li>
+ * </ul>
+ *
+ * @param mode On UNIX systems or in
+ * IEEE/ANSI Std 1003.1 (POSIX) environments, all files
+ * created by the database open are created with mode <b>mode
+ * </b> (as described in <b>chmod</b> (2)) and modified by
+ * the process' umask value at the time of creation (see <b>
+ * umask</b> (2)). If <b>mode</b> is 0, the database open
+ * will use a default mode of readable and writable by both
+ * owner and group. On Windows systems, the mode parameter is
+ * ignored. The group ownership of created files is based on
+ * the system and directory defaults, and is not further
+ * specified by Berkeley DB.
+ * @param txnid If the operation is to be
+ * transaction-protected, (other than by specifying the
+ * Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null. Note that transactionally protected
+ * operations on a {@link com.sleepycat.db.Db Db} handle
+ * requires the {@link com.sleepycat.db.Db Db} handle itself
+ * be transactionally protected during its open.
+ * @param type must be set to one of
+ * Db.DB_BTREE, Db.DB_HASH, Db.DB_QUEUE, Db.DB_RECNO, or
+ * Db.DB_UNKNOWN. If <b>type</b> is Db.DB_UNKNOWN, the
+ * database must already exist and Db.open will automatically
+ * determine its type. The {@link
+ * com.sleepycat.db.Db#getDbType Db.getDbType} method may be
+ * used to determine the underlying type of databases opened
+ * using Db.DB_UNKNOWN.
+ * @throws DbException The Db.open method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> The database cannot be opened without being first
+ * upgraded.
+ * <li> Db.DB_CREATE and Db.DB_EXCL were specified and the
+ * database exists.
+ * <li> A nonexistent <b>re_source</b> file was specified.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.open method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.open method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the Db.open method will fail and throw a
+ * FileNotFoundException exception.
+ * @throws IllegalArgumentException The Db.open method will
+ * fail and throw a IllegalArgumentException exception if an
+ * unknown database type, page size, hash function, pad byte,
+ * byte order, or a flag value or parameter that is
+ * incompatible with the specified database was specified;
+ * the {@link com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD}
+ * flag was specified and fast mutexes are not available for
+ * this architecture; the {@link
+ * com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD} flag was
+ * specified to Db.open, but was not specified to the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} call for the
+ * environment in which the {@link com.sleepycat.db.Db Db}
+ * handle was created; a backing flat text file was specified
+ * with either the {@link com.sleepycat.db.Db#DB_THREAD
+ * Db.DB_THREAD} flag or the provided database environment
+ * supports transaction processing; or if an invalid flag
+ * value or parameter was specified.
+ */
+ public void open(DbTxn txnid, String file, String database, int type, int flags, int mode) throws DbException, java.io.FileNotFoundException,
- // Prefix function.
- public void set_bt_prefix(DbBtreePrefix bt_prefix)
- throws DbException
- {
- bt_prefix_ = bt_prefix;
- bt_prefix_changed(bt_prefix);
+ DbDeadlockException, DbLockNotGrantedException {
+ /*
+ * Java is always threaded
+ */
+ flags |= Db.DB_THREAD;
+ open0(txnid, file, database, type, flags, mode);
}
-
- // (Internal)
- private native void bt_prefix_changed(DbBtreePrefix bt_prefix)
- throws DbException;
- // Set cache size
- public native void set_cachesize(int gbytes, int bytes, int ncaches)
- throws DbException;
- // Duplication resolution
- public void set_dup_compare(DbDupCompare dup_compare)
- throws DbException
- {
- dup_compare_ = dup_compare;
- dup_compare_changed(dup_compare);
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #get(DbTxn,Dbt,Dbt,Dbt,int)}
+ */
+ public int pget(DbTxn txnid, Dbt key, Dbt pkey, Dbt data, int flags) throws DbException {
+
+ return get(txnid, key, pkey, data, flags);
}
- // (Internal)
- private native void dup_compare_changed(DbDupCompare dup_compare)
- throws DbException;
- // Error message callback.
- public void set_errcall(DbErrcall errcall)
- {
- if (dbenv_ != null)
- dbenv_.set_errcall(errcall);
- }
-
- // Error stream.
- public void set_error_stream(OutputStream s)
- {
- DbOutputStreamErrcall errcall = new DbOutputStreamErrcall(s);
- set_errcall(errcall);
- }
-
- // Error message prefix.
- public void set_errpfx(String errpfx)
- {
- if (dbenv_ != null)
- dbenv_.set_errpfx(errpfx);
- }
-
-
- // Feedback
- public void set_feedback(DbFeedback feedback)
- throws DbException
- {
- feedback_ = feedback;
- feedback_changed(feedback);
- }
-
- // (Internal)
- private native void feedback_changed(DbFeedback feedback)
- throws DbException;
-
- // Flags.
- public native void set_flags(/*u_int32_t*/ int flags);
-
- // Fill factor.
- public native void set_h_ffactor(/*unsigned*/ int h_ffactor);
-
- // Hash function.
- public void set_h_hash(DbHash h_hash)
- throws DbException
- {
- h_hash_ = h_hash;
- hash_changed(h_hash);
- }
-
- // (Internal)
- private native void hash_changed(DbHash hash)
- throws DbException;
-
- // Number of elements.
- public native void set_h_nelem(/*unsigned*/ int h_nelem);
-
- // Byte order.
- public native void set_lorder(int lorder);
-
- // Underlying page size.
- public native void set_pagesize(/*size_t*/ long pagesize);
-
- // Variable-length delimiting byte.
- public native void set_re_delim(int re_delim);
-
- // Length for fixed-length records.
- public native void set_re_len(/*u_int32_t*/ int re_len);
-
- // Fixed-length padding byte.
- public native void set_re_pad(int re_pad);
-
- // Source file name.
- public native void set_re_source(String re_source);
-
- // Extent size of Queue
- public native void set_q_extentsize(/*u_int32_t*/ int extent_size);
-
- // returns a DbBtreeStat or DbHashStat
- public native Object stat(int flags)
- throws DbException;
-
- public native int sync(int flags)
- throws DbException;
-
- public native void upgrade(String name, int flags)
- throws DbException;
-
- public native void verify(String name, String subdb,
- OutputStream outstr, int flags)
- throws DbException;
-
- ////////////////////////////////////////////////////////////////
- //
- // private data
- //
- private long private_dbobj_ = 0;
- private long private_info_ = 0;
- private DbEnv dbenv_ = null;
- private DbEnv constructor_env_ = null;
- private DbFeedback feedback_ = null;
- private DbAppendRecno append_recno_ = null;
- private DbBtreeCompare bt_compare_ = null;
- private DbBtreePrefix bt_prefix_ = null;
- private DbDupCompare dup_compare_ = null;
- private DbHash h_hash_ = null;
+ /**
+ * The Db.remove method removes the database specified by the <b>
+ * file</b> and <b>database</b> parameters. If no <b>database</b>
+ * is specified, the underlying file represented by <b>file</b>
+ * is removed, incidentally removing all of the databases it
+ * contained.</p> <p>
+ *
+ * Applications should never remove databases with open {@link
+ * com.sleepycat.db.Db Db} handles, or in the case of removing a
+ * file, when any database in the file has an open handle. For
+ * example, some architectures do not permit the removal of files
+ * with open system handles. On these architectures, attempts to
+ * remove databases currently in use by any thread of control in
+ * the system will fail.</p> <p>
+ *
+ * The Db.remove method may not be called after calling the
+ * {@link com.sleepycat.db.Db#open Db.open} method on any {@link
+ * com.sleepycat.db.Db Db} handle. If the {@link
+ * com.sleepycat.db.Db#open Db.open} method has already been
+ * called on a {@link com.sleepycat.db.Db Db} handle, close the
+ * existing handle and create a new one before calling Db.remove.
+ * </p> <p>
+ *
+ * The {@link com.sleepycat.db.Db Db} handle may not be accessed
+ * again after Db.remove is called, regardless of its return.</p>
+ * <h3>Environment Variables</h3> <p>
+ *
+ * If the database was opened within a database environment, the
+ * environment variable <b>DB_HOME</b> may be used as the path of
+ * the database environment home.</p> <p>
+ *
+ * Db.remove is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param database the database to be removed.
+ * @param file the physical file which
+ * contains the database(s) to be removed.
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws DbException The Db.remove method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to remove the underlying file and
+ * a database in the file was currently open.
+ * @throws IllegalArgumentException The Db.remove method will
+ * fail and throw a IllegalArgumentException exception if
+ * Db.remove called after {@link com.sleepycat.db.Db#open
+ * Db.open} was called; or if an invalid flag value or
+ * parameter was specified.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the Db.remove method will fail and throw a
+ * FileNotFoundException exception.
+ */
+ public synchronized void remove(String file, String database, int flags) throws DbException, java.io.FileNotFoundException {
+
+ try {
+ remove0(file, database, flags);
+ } finally {
+ cleanup();
+ }
+ }
+
- ////////////////////////////////////////////////////////////////
- //
- // static methods and data that implement
- // loading the native library and doing any
- // extra sanity checks on startup.
- //
- private static boolean already_loaded_ = false;
+ /**
+ * The Db.rename method renames the database specified by the <b>
+ * file</b> and <b>database</b> parameters to <b>newname</b> . If
+ * no <b>database</b> is specified, the underlying file
+ * represented by <b>file</b> is renamed, incidentally renaming
+ * all of the databases it contained.</p> <p>
+ *
+ * Applications should not rename databases that are currently in
+ * use. If an underlying file is being renamed and logging is
+ * currently enabled in the database environment, no database in
+ * the file may be open when the Db.rename method is called. In
+ * particular, some architectures do not permit renaming files
+ * with open handles. On these architectures, attempts to rename
+ * databases that are currently in use by any thread of control
+ * in the system will fail.</p> <p>
+ *
+ * The Db.rename method may not be called after calling the
+ * {@link com.sleepycat.db.Db#open Db.open} method on any {@link
+ * com.sleepycat.db.Db Db} handle. If the {@link
+ * com.sleepycat.db.Db#open Db.open} method has already been
+ * called on a {@link com.sleepycat.db.Db Db} handle, close the
+ * existing handle and create a new one before calling Db.rename.
+ * </p> <p>
+ *
+ * The {@link com.sleepycat.db.Db Db} handle may not be accessed
+ * again after Db.rename is called, regardless of its return.</p>
+ * <h3>Environment Variables</h3> <p>
+ *
+ * If the database was opened within a database environment, the
+ * environment variable <b>DB_HOME</b> may be used as the path of
+ * the database environment home.</p> <p>
+ *
+ * Db.rename is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param database the database to be removed.
+ * @param file the physical file which
+ * contains the database(s) to be removed.
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @param newname the new name of the database
+ * or file.
+ * @throws DbException The Db.rename method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to rename the underlying file and
+ * a database in the file was currently open.
+ * @throws IllegalArgumentException The Db.rename method will
+ * fail and throw a IllegalArgumentException exception if
+ * Db.rename called after {@link com.sleepycat.db.Db#open
+ * Db.open} was called; or if an invalid flag value or
+ * parameter was specified.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the Db.rename method will fail and throw a
+ * FileNotFoundException exception.
+ */
+ public synchronized void rename(String file, String database, String newname, int flags) throws DbException, java.io.FileNotFoundException {
- public static void load_db()
- {
- if (already_loaded_)
- return;
-
- // An alternate library name can be specified via a property.
- //
- String overrideLibname = System.getProperty("sleepycat.db.libname");
- if (overrideLibname != null) {
- System.loadLibrary(overrideLibname);
+ try {
+ rename0(file, database, newname, flags);
+ } finally {
+ cleanup();
}
- else {
- String os = System.getProperty("os.name");
- if (os != null && os.startsWith("Windows")) {
- // library name is "libdb_java30.dll" (for example) on Win/*
- System.loadLibrary("libdb_java" +
- DbConstants.DB_VERSION_MAJOR +
- DbConstants.DB_VERSION_MINOR);
- }
- else {
- // library name is "libdb_java-3.0.so" (for example) on UNIX
- // Note: "db_java" isn't good enough;
- // some Unixes require us to use the explicit SONAME.
- System.loadLibrary("db_java-" +
- DbConstants.DB_VERSION_MAJOR + "." +
- DbConstants.DB_VERSION_MINOR);
- }
+ }
+
+
+ /**
+ * The Db.verify method verifies the integrity of all databases
+ * in the file specified by the <b>file</b> parameter, and
+ * optionally outputs the databases' key/data pairs to the file
+ * stream specified by the <b>outfile</b> parameter.</p> <p>
+ *
+ * <b>The Db.verify method does not perform any locking, even in
+ * Berkeley DB environments that are configured with a locking
+ * subsystem. As such, it should only be used on files that are
+ * not being modified by another thread of control.</b> </p> <p>
+ *
+ * The Db.verify method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. </p> <p>
+ *
+ * The {@link com.sleepycat.db.Db Db} handle may not be accessed
+ * again after Db.verify is called, regardless of its return.</p>
+ * <h3>Environment Variables</h3> <p>
+ *
+ * If the database was opened within a database environment, the
+ * environment variable <b>DB_HOME</b> may be used as the path of
+ * the database environment home.</p> <p>
+ *
+ * Db.verify is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param database the database in <b>file</b>
+ * on which the database checks for btree and duplicate sort
+ * order and for hashing are to be performed. See the
+ * Db.DB_ORDERCHKONLY flag for more information. <p>
+ *
+ * The database parameter must be set to null except when the
+ * Db.DB_ORDERCHKONLY flag is set.</p>
+ * @param file the physical file in which
+ * the databases to be verified are found.
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SALVAGE
+ * Db.DB_SALVAGE}<p>
+ *
+ * Write the key/data pairs from all databases in the file
+ * to the file stream named in the <b>outfile</b>
+ * parameter. The output format is the same as that
+ * specified for the <a href="{@docRoot}/../utility/db_dump.html">
+ * db_dump</a> utility, and can be used as input for the <a
+ * href="{@docRoot}/../utility/db_load.html">db_load</a>
+ * utility. <p>
+ *
+ * Because the key/data pairs are output in page order as
+ * opposed to the sort order used by <a
+ * href="{@docRoot}/../utility/db_dump.html">db_dump</a> ,
+ * using Db.verify to dump key/data pairs normally produces
+ * less than optimal loads for Btree databases.</p> </li>
+ *
+ * </ul>
+ * In addition, the following flags may be set by bitwise
+ * inclusively <b>OR</b> 'ing them into the <b>flags</b>
+ * parameter:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AGGRESSIVE
+ * Db.DB_AGGRESSIVE}<p>
+ *
+ * Output <b>all</b> the key/data pairs in the file that
+ * can be found. By default, Db.verify does not assume
+ * corruption. For example, if a key/data pair on a page is
+ * marked as deleted, it is not then written to the output
+ * file. When <code>Db.DB_AGGRESSIVE</code> is specified,
+ * corruption is assumed, and any key/data pair that can be
+ * found is written. In this case, key/data pairs that are
+ * corrupted or have been deleted may appear in the output
+ * (even if the file being salvaged is in no way corrupt),
+ * and the output will almost certainly require editing
+ * before being loaded into a database. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRINTABLE
+ * Db.DB_PRINTABLE}<p>
+ *
+ * When using the <code>Db.DB_SALVAGE</code> flag, if
+ * characters in either the key or data items are printing
+ * characters (as defined by <b>isprint</b> (3)), use
+ * printing characters to represent them. This flag permits
+ * users to use standard text editors and tools to modify
+ * the contents of databases or selectively remove data
+ * from salvager output. <p>
+ *
+ * Note: different systems may have different notions about
+ * what characters are considered <i>printing characters
+ * </i>, and databases dumped in this manner may be less
+ * portable to external systems.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOORDERCHK
+ * Db.DB_NOORDERCHK}<p>
+ *
+ * Skip the database checks for btree and duplicate sort
+ * order and for hashing. <p>
+ *
+ * The Db.verify method normally verifies that btree keys
+ * and duplicate items are correctly sorted, and hash keys
+ * are correctly hashed. If the file being verified
+ * contains multiple databases using differing sorting or
+ * hashing algorithms, some of them must necessarily fail
+ * database verification because only one sort order or
+ * hash function can be specified before Db.verify is
+ * called. To verify files with multiple databases having
+ * differing sorting orders or hashing functions, first
+ * perform verification of the file as a whole by using the
+ * <code>Db.DB_NOORDERCHK</code> flag, and then
+ * individually verify the sort order and hashing function
+ * for each database in the file using the <code>Db.DB_ORDERCHKONLY</code>
+ * flag.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ORDERCHKONLY
+ * Db.DB_ORDERCHKONLY}<p>
+ *
+ * Perform the database checks for btree and duplicate sort
+ * order and for hashing, skipped by <code>Db.DB_NOORDERCHK</code>
+ * . <p>
+ *
+ * When this flag is specified, a <b>database</b> parameter
+ * should also be specified, indicating the database in the
+ * physical file which is to be checked. This flag is only
+ * safe to use on databases that have already successfully
+ * been verified using Db.verify with the <code>Db.DB_NOORDERCHK</code>
+ * flag set.</p> </li>
+ * </ul>
+ *
+ * @param outfile an optional file stream to
+ * which the databases' key/data pairs are written.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the Db.verify method will fail and throw a
+ * FileNotFoundException exception.
+ * @throws IllegalArgumentException The Db.verify method will
+ * fail and throw a IllegalArgumentException exception if
+ * Db.verify was called after {@link com.sleepycat.db.Db#open
+ * Db.open}; or if an invalid flag value or parameter was
+ * specified.
+ */
+ public synchronized void verify(String file, String database, java.io.OutputStream outfile, int flags) throws DbException, java.io.FileNotFoundException {
+
+ try {
+ verify0(file, database, outfile, flags);
+ } finally {
+ cleanup();
}
+ }
+
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setCacheSize(long,int)}
+ */
+ public void set_cachesize(int gbytes, int bytes, int ncache) throws DbException {
- already_loaded_ = true;
+ set_cachesize((long) gbytes * Db.GIGABYTE + bytes, ncache);
}
- static private native void one_time_init();
- static private void check_constant(int c1, int c2)
- {
- if (c1 != c2) {
- System.err.println("Db: constant mismatch");
- System.exit(1);
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setErrorHandler(DbErrorHandler)}
+ */
+ public void set_errcall(DbErrcall db_errcall_fcn) {
+ final DbErrcall ferrcall = db_errcall_fcn;
+ try {
+ dbenv.setErrorHandler(
+ new DbErrorHandler() {
+ public void error(String prefix, String str) {
+ ferrcall.errcall(prefix, str);
+ }
+ });
+ } catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_errcall does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
}
+
}
- static {
- Db.load_db();
- // Note: constant values are stored in DbConstants, which
- // is automatically generated. Initializing constants in
- // static code insulates users from the possibility of
- // changing constants.
- //
- DB_CXX_NO_EXCEPTIONS = DbConstants.DB_CXX_NO_EXCEPTIONS;
- DB_CLIENT = DbConstants.DB_CLIENT;
- DB_XA_CREATE = DbConstants.DB_XA_CREATE;
+ /**
+ * When an error occurs in the Berkeley DB library, an exception
+ * is thrown. In some cases, however, the <b>errno</b> value may
+ * be insufficient to completely describe the cause of the error,
+ * especially during initial application debugging. <p>
+ *
+ * The {@link com.sleepycat.db.DbEnv#setErrorHandler
+ * DbEnv.setErrorHandler} and Db.setOnError methods are used to
+ * enhance the mechanism for reporting error messages to the
+ * application. The {@link com.sleepycat.db.DbEnv#setErrorHandler
+ * DbEnv.setErrorHandler} and Db.setOnError methods must be
+ * called with a single object parameter. The object's class must
+ * implement the DbErrorHandler interface.</p> <p>
+ *
+ * In some cases, when an error occurs, Berkeley DB will invoke
+ * the object's errcall() method with two parameters; the first
+ * is the prefix string (as previously set by {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} or
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}), the second will be an error message
+ * string. It is up to this method to display the message in an
+ * appropriate manner.</p> <p>
+ *
+ * Alternatively, you can use the {@link
+ * com.sleepycat.db.DbEnv#setErrorStream DbEnv.setErrorStream}
+ * and {@link com.sleepycat.db.Db#setErrorStream
+ * Db.setErrorStream} methods to display the additional
+ * information via an output stream. You should not mix these
+ * approaches.</p> <p>
+ *
+ * This error-logging enhancement does not slow performance or
+ * significantly increase application size, and may be run during
+ * normal operation as well as during application debugging.</p>
+ * <p>
+ *
+ * For {@link com.sleepycat.db.Db Db} handles opened inside of
+ * Berkeley DB environments, calling the Db.setOnError method
+ * affects the entire environment and is equivalent to calling
+ * the {@link com.sleepycat.db.DbEnv#setErrorHandler
+ * DbEnv.setErrorHandler} method.</p> <p>
+ *
+ * The Db.setOnError method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @param db_errcall_fcn the application-specified error
+ * reporting function. The function takes two parameters: <p>
+ *
+ * The <b>errpfx</b> parameter is the prefix string (as
+ * previously set by {@link com.sleepycat.db.Db#setErrorPrefix
+ * Db.setErrorPrefix} or {@link
+ * com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}). <p>
+ *
+ * The <b>msg</b> parameter is the error message string.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setErrorHandler(DbErrorHandler db_errcall_fcn) throws DbException {
+ dbenv.setErrorHandler(db_errcall_fcn);
+ }
- DB_CREATE = DbConstants.DB_CREATE;
- DB_NOMMAP = DbConstants.DB_NOMMAP;
- DB_THREAD = DbConstants.DB_THREAD;
- DB_LOCKDOWN = DbConstants.DB_LOCKDOWN;
- DB_PRIVATE = DbConstants.DB_PRIVATE;
- DB_TXN_NOWAIT = DbConstants.DB_TXN_NOWAIT;
- DB_TXN_SYNC = DbConstants.DB_TXN_SYNC;
- DB_CDB_ALLDB = DbConstants.DB_CDB_ALLDB;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getErrorPrefix()}
+ */
+ public String get_errpfx() {
+ return getErrorPrefix();
+ }
- DB_EXCL = DbConstants.DB_EXCL;
- DB_RDONLY = DbConstants.DB_RDONLY;
- DB_TRUNCATE = DbConstants.DB_TRUNCATE;
- DB_UPGRADE = DbConstants.DB_UPGRADE;
- // These constants are not assigned, but rather checked.
- // Having initialized constants for these values allows
- // them to be used as case values in switch statements.
- //
- check_constant(DB_INCOMPLETE, DbConstants.DB_INCOMPLETE);
- check_constant(DB_KEYEMPTY, DbConstants.DB_KEYEMPTY);
- check_constant(DB_KEYEXIST, DbConstants.DB_KEYEXIST);
- check_constant(DB_LOCK_DEADLOCK, DbConstants.DB_LOCK_DEADLOCK);
- check_constant(DB_LOCK_NOTGRANTED, DbConstants.DB_LOCK_NOTGRANTED);
- check_constant(DB_NOSERVER, DbConstants.DB_NOSERVER);
- check_constant(DB_NOSERVER_HOME, DbConstants.DB_NOSERVER_HOME);
- check_constant(DB_NOSERVER_ID, DbConstants.DB_NOSERVER_ID);
- check_constant(DB_NOTFOUND, DbConstants.DB_NOTFOUND);
- check_constant(DB_OLD_VERSION, DbConstants.DB_OLD_VERSION);
- check_constant(DB_RUNRECOVERY, DbConstants.DB_RUNRECOVERY);
- check_constant(DB_VERIFY_BAD, DbConstants.DB_VERIFY_BAD);
- check_constant(DB_TXN_BACKWARD_ROLL, DbConstants.DB_TXN_BACKWARD_ROLL);
- check_constant(DB_TXN_FORWARD_ROLL, DbConstants.DB_TXN_FORWARD_ROLL);
- check_constant(DB_TXN_OPENFILES, DbConstants.DB_TXN_OPENFILES);
- check_constant(DB_TXN_REDO, DbConstants.DB_TXN_REDO);
- check_constant(DB_TXN_UNDO, DbConstants.DB_TXN_UNDO);
+ /**
+ * The Db.getErrorPrefix method returns the error prefix.</p> <p>
+ *
+ * The Db.getErrorPrefix method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @return The Db.getErrorPrefix method returns the error
+ * prefix.</p>
+ */
+ public String getErrorPrefix() {
+ return dbenv.get_errpfx();
+ }
- DB_FORCE = DbConstants.DB_FORCE;
- DB_INIT_CDB = DbConstants.DB_INIT_CDB;
- DB_INIT_LOCK = DbConstants.DB_INIT_LOCK;
- DB_INIT_LOG = DbConstants.DB_INIT_LOG;
- DB_INIT_MPOOL = DbConstants.DB_INIT_MPOOL;
- DB_INIT_TXN = DbConstants.DB_INIT_TXN;
- DB_JOINENV = DbConstants.DB_JOINENV;
- DB_RECOVER = DbConstants.DB_RECOVER;
- DB_RECOVER_FATAL = DbConstants.DB_RECOVER_FATAL;
- DB_SYSTEM_MEM = DbConstants.DB_SYSTEM_MEM;
- DB_TXN_NOSYNC = DbConstants.DB_TXN_NOSYNC;
- DB_USE_ENVIRON = DbConstants.DB_USE_ENVIRON;
- DB_USE_ENVIRON_ROOT = DbConstants.DB_USE_ENVIRON_ROOT;
- DB_VERB_CHKPOINT = DbConstants.DB_VERB_CHKPOINT;
- DB_VERB_DEADLOCK = DbConstants.DB_VERB_DEADLOCK;
- DB_VERB_RECOVERY = DbConstants.DB_VERB_RECOVERY;
- DB_VERB_WAITSFOR = DbConstants.DB_VERB_WAITSFOR;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setErrorPrefix(String)}
+ */
+ public void set_errpfx(String errpfx) {
+ setErrorPrefix(errpfx);
+ }
- DB_LOCK_NORUN = DbConstants.DB_LOCK_NORUN;
- DB_LOCK_DEFAULT = DbConstants.DB_LOCK_DEFAULT;
- DB_LOCK_OLDEST = DbConstants.DB_LOCK_OLDEST;
- DB_LOCK_RANDOM = DbConstants.DB_LOCK_RANDOM;
- DB_LOCK_YOUNGEST = DbConstants.DB_LOCK_YOUNGEST;
- DB_DUP = DbConstants.DB_DUP;
- DB_DUPSORT = DbConstants.DB_DUPSORT;
- DB_RECNUM = DbConstants.DB_RECNUM;
- DB_RENUMBER = DbConstants.DB_RENUMBER;
- DB_REVSPLITOFF = DbConstants.DB_REVSPLITOFF;
- DB_SNAPSHOT = DbConstants.DB_SNAPSHOT;
+ /**
+ * Set the prefix string that appears before error messages
+ * issued by Berkeley DB.</p> <p>
+ *
+ * For {@link com.sleepycat.db.Db Db} handles opened inside of
+ * Berkeley DB environments, calling the Db.setErrorPrefix method
+ * affects the entire environment and is equivalent to calling
+ * the {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix} method.</p> <p>
+ *
+ * The Db.setErrorPrefix method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param errpfx the application-specified error prefix for
+ * additional error messages.
+ */
+ public void setErrorPrefix(String errpfx) {
+ dbenv.set_errpfx(errpfx);
+ }
- DB_JOIN_NOSORT = DbConstants.DB_JOIN_NOSORT;
- DB_NOORDERCHK = DbConstants.DB_NOORDERCHK;
- DB_ORDERCHKONLY = DbConstants.DB_ORDERCHKONLY;
- DB_SALVAGE = DbConstants.DB_SALVAGE;
- DB_AGGRESSIVE = DbConstants.DB_AGGRESSIVE;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setErrorStream(java.io.OutputStream)}
+ */
+ public void set_error_stream(java.io.OutputStream stream) {
+ setErrorStream(stream);
+ }
- DB_LOCK_NOWAIT = DbConstants.DB_LOCK_NOWAIT;
- DB_LOCK_CONFLICT = DbConstants.DB_LOCK_CONFLICT;
- DB_ARCH_ABS = DbConstants.DB_ARCH_ABS;
- DB_ARCH_DATA = DbConstants.DB_ARCH_DATA;
- DB_ARCH_LOG = DbConstants.DB_ARCH_LOG;
+ /**
+ * When an error occurs in the Berkeley DB library, an exception
+ * is thrown. In some cases, however, the error information known
+ * to the Java layer may be insufficient to completely describe
+ * the cause of the error, especially during initial application
+ * debugging.</p> <p>
+ *
+ * The {@link com.sleepycat.db.DbEnv#setErrorStream
+ * DbEnv.setErrorStream} and Db.setErrorStream methods are used
+ * to enhance the mechanism for reporting error messages to the
+ * application by setting a OutputStream to be used for
+ * displaying additional Berkeley DB error messages. In some
+ * cases, when an error occurs, Berkeley DB will output an
+ * additional error message to the specified stream.</p> <p>
+ *
+ * The error message will consist of the prefix string and a
+ * colon ("<b>:</b> ") (if a prefix string was previously
+ * specified using {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}), an error string, and a trailing
+ * &lt;newline&gt; character.</p> <p>
+ *
+ * Alternatively, you can use the {@link
+ * com.sleepycat.db.DbEnv#setErrorHandler DbEnv.setErrorHandler}
+ * method to capture the additional error information in a way
+ * that does not use output streams. You should not mix these
+ * approaches. </p> <p>
+ *
+ * This error-logging enhancement does not slow performance or
+ * significantly increase application size, and may be run during
+ * normal operation as well as during application debugging.</p>
+ * <p>
+ *
+ * For {@link com.sleepycat.db.Db Db} handles opened inside of
+ * Berkeley DB environments, calling the Db.setErrorStream method
+ * affects the entire environment and is equivalent to calling
+ * the {@link com.sleepycat.db.DbEnv#setErrorStream
+ * DbEnv.setErrorStream} method.</p>
+ *
+ * @param stream the application-specified output stream to be
+ * used for additional error information.
+ */
+ public void setErrorStream(java.io.OutputStream stream) {
+ dbenv.set_error_stream(stream);
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setFeedbackHandler(DbFeedbackHandler)}
+ */
+ public void set_feedback(DbFeedback feedback) throws DbException {
+ final DbFeedback ffeedback = feedback;
+ setFeedbackHandler(
+ new DbFeedbackHandler() {
+ public void feedback(Db db, int opcode, int percent) {
+ ffeedback.feedback(db, opcode, percent);
+ }
+ });
+ }
+
+
+ /**
+ * Errors can occur in the Berkeley DB library where the only
+ * solution is to shut down the application and run recovery (for
+ * example, if Berkeley DB is unable to allocate heap memory). In
+ * such cases, the Berkeley DB methods will throw a {@link
+ * com.sleepycat.db.DbRunRecoveryException
+ * DbRunRecoveryException}. It is often easier to simply exit the
+ * application when such errors occur rather than gracefully
+ * return up the stack. The Db.setPanic method specifies a
+ * function to be called when {@link
+ * com.sleepycat.db.DbRunRecoveryException
+ * DbRunRecoveryException} is about to be thrown from a Berkeley
+ * DB method.</p> <p>
+ *
+ * For {@link com.sleepycat.db.Db Db} handles opened inside of
+ * Berkeley DB environments, calling the Db.setPanic method
+ * affects the entire environment and is equivalent to calling
+ * the {@link com.sleepycat.db.DbEnv#setPanicHandler
+ * DbEnv.setPanicHandler} method.</p> <p>
+ *
+ * The Db.setPanic method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @param db_panic_fcn the application-specified function called
+ * in the case of a database environment panic. The function
+ * takes two arguments: <p>
+ *
+ * The <b>dbenv</b> parameter is the enclosing database
+ * environment handle. <p>
+ *
+ * The <b>e</b> parameter is the DbException that would have
+ * been thrown to the calling method.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setPanicHandler(DbPanicHandler db_panic_fcn) throws DbException {
+ dbenv.setPanicHandler(db_panic_fcn);
+ }
+
+
+ // Don't remove these - special comments used by s_java to add constants
+ // BEGIN-JAVA-SPECIAL-CONSTANTS
+ /*
+ * DO NOT EDIT: automatically built by dist/s_java_const.
+ */
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_BTREE = 1;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #associate(DbTxn,Db,DbSecondaryKeyCreate,int)
+ * associate(DbTxn,Db,DbSecondaryKeyCreate,int)}</li>
+ * <li> {@link com.sleepycat.db.DbSecondaryKeyCreate#secondaryKeyCreate(Db,Dbt,Dbt,Dbt)
+ * DbSecondaryKeyCreate.secondaryKeyCreate(Db,Dbt,Dbt,Dbt)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_DONOTINDEX = -30999;
+ public final static int DB_FILEOPEN = -30998;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_HASH = 2;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #delete(DbTxn,Dbt,int) delete(DbTxn,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#delete(int)
+ * Dbc.delete(int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_KEYEMPTY = -30997;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_KEYEXIST = -30996;
+ public final static int DB_LOCK_DEADLOCK = -30995;
+ public final static int DB_LOCK_NOTGRANTED = -30994;
+ public final static int DB_NOSERVER = -30993;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setRpcServer(DbClient,String,long,long,int)
+ * DbEnv.setRpcServer(DbClient,String,long,long,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_NOSERVER_HOME = -30992;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setRpcServer(DbClient,String,long,long,int)
+ * DbEnv.setRpcServer(DbClient,String,long,long,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_NOSERVER_ID = -30991;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #delete(DbTxn,Dbt,int) delete(DbTxn,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOTFOUND = -30990;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_OLD_VERSION = -30989;
+ public final static int DB_PAGE_NOTFOUND = -30988;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_QUEUE = 4;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RECNO = 3;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_DUPMASTER = -30987;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #associate(DbTxn,Db,DbSecondaryKeyCreate,int)
+ * associate(DbTxn,Db,DbSecondaryKeyCreate,int)}</li>
+ * <li> {@link #cursor(DbTxn,int) cursor(DbTxn,int)}</li>
+ * <li> {@link #delete(DbTxn,Dbt,int) delete(DbTxn,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * <li> {@link #keyRange(DbTxn,Dbt,DbKeyRange,int)
+ * keyRange(DbTxn,Dbt,DbKeyRange,int)}</li>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #stat(int) stat(int)}</li>
+ * <li> {@link #sync(int) sync(int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#count(int) Dbc.count(int)}
+ * </li>
+ * <li> {@link com.sleepycat.db.Dbc#delete(int)
+ * Dbc.delete(int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#dup(int) Dbc.dup(int)}</li>
+ *
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_HANDLE_DEAD = -30986;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_HOLDELECTION = -30985;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_NEWMASTER = -30983;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_NEWSITE = -30982;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_OUTDATED = -30980;
+ public final static int DB_RUNRECOVERY = -30978;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #delete(DbTxn,Dbt,int) delete(DbTxn,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#delete(int)
+ * Dbc.delete(int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SECONDARY_BAD = -30977;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setAppDispatch(DbAppDispatch)
+ * DbEnv.setAppDispatch(DbAppDispatch)}</li>
+ * <li> {@link com.sleepycat.db.DbAppDispatch#appDispatch(DbEnv,Dbt,DbLsn,int)
+ * DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_ABORT = 0;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setAppDispatch(DbAppDispatch)
+ * DbEnv.setAppDispatch(DbAppDispatch)}</li>
+ * <li> {@link com.sleepycat.db.DbAppDispatch#appDispatch(DbEnv,Dbt,DbLsn,int)
+ * DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_APPLY = 1;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setAppDispatch(DbAppDispatch)
+ * DbEnv.setAppDispatch(DbAppDispatch)}</li>
+ * <li> {@link com.sleepycat.db.DbAppDispatch#appDispatch(DbEnv,Dbt,DbLsn,int)
+ * DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_BACKWARD_ROLL = 3;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setAppDispatch(DbAppDispatch)
+ * DbEnv.setAppDispatch(DbAppDispatch)}</li>
+ * <li> {@link com.sleepycat.db.DbAppDispatch#appDispatch(DbEnv,Dbt,DbLsn,int)
+ * DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_FORWARD_ROLL = 4;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setAppDispatch(DbAppDispatch)
+ * DbEnv.setAppDispatch(DbAppDispatch)}</li>
+ * <li> {@link com.sleepycat.db.DbAppDispatch#appDispatch(DbEnv,Dbt,DbLsn,int)
+ * DbAppDispatch.appDispatch(DbEnv,Dbt,DbLsn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_PRINT = 8;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_UNKNOWN = 5;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERIFY_BAD = -30976;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_AFTER;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_AGGRESSIVE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_APPEND;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#logArchive(int)
+ * DbEnv.logArchive(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ARCH_ABS;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#logArchive(int)
+ * DbEnv.logArchive(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ARCH_DATA;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#logArchive(int)
+ * DbEnv.logArchive(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ARCH_LOG;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#logArchive(int)
+ * DbEnv.logArchive(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ARCH_REMOVE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #associate(DbTxn,Db,DbSecondaryKeyCreate,int)
+ * associate(DbTxn,Db,DbSecondaryKeyCreate,int)}</li>
+ * <li> {@link #delete(DbTxn,Dbt,int) delete(DbTxn,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #truncate(DbTxn,int) truncate(DbTxn,int)}</li>
+ *
+ * <li> {@link com.sleepycat.db.DbEnv#dbRemove(DbTxn,String,String,int)
+ * DbEnv.dbRemove(DbTxn,String,String,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#dbRename(DbTxn,String,String,String,int)
+ * DbEnv.dbRename(DbTxn,String,String,String,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_AUTO_COMMIT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_BEFORE;
+ public final static int DB_CACHED_COUNTS;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CDB_ALLDB;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CHKSUM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CONSUME;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CONSUME_WAIT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #associate(DbTxn,Db,DbSecondaryKeyCreate,int)
+ * associate(DbTxn,Db,DbSecondaryKeyCreate,int)}</li>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CREATE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_CURRENT;
+ public final static int DB_CXX_NO_EXCEPTIONS;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbt#setFlags(int)
+ * Dbt.setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DBT_MALLOC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbt#setFlags(int)
+ * Dbt.setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DBT_PARTIAL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbt#setFlags(int)
+ * Dbt.setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DBT_REALLOC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbt#setFlags(int)
+ * Dbt.setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DBT_USERMEM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DIRECT_DB;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DIRECT_LOG;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #cursor(DbTxn,int) cursor(DbTxn,int)}</li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnBegin(DbTxn,int)
+ * DbEnv.txnBegin(DbTxn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DIRTY_READ;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_DUP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * <li> {@link #upgrade(String,int) upgrade(String,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_DUPSORT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setReplicationTransport(int,DbRepTransport)
+ * DbEnv.setReplicationTransport(int,DbRepTransport)}</li>
+ * <li> {@link com.sleepycat.db.DbRepTransport#send(DbEnv,Dbt,Dbt,DbLsn,int,int)
+ * DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_EID_BROADCAST;
+ public final static int DB_EID_INVALID;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ENCRYPT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setEncrypted(String,int)
+ * setEncrypted(String,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#setEncrypted(String,int)
+ * DbEnv.setEncrypted(String,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ENCRYPT_AES;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_EXCL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #stat(int) stat(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_FAST_STAT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnRecover(int,int)
+ * DbEnv.txnRecover(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_FIRST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#logPut(DbLsn,Dbt,int)
+ * DbEnv.logPut(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_FLUSH;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#remove(String,int)
+ * DbEnv.remove(String,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnCheckpoint(int,int,int)
+ * DbEnv.txnCheckpoint(int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_FORCE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_GET_BOTH;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_GET_BOTH_RANGE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_GET_RECNO;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_CDB;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_LOCK;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_LOG;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_MPOOL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_REP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_INIT_TXN;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_JOINENV;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_JOIN_ITEM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_JOIN_NOSORT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_KEYFIRST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_KEYLAST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LAST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCKDOWN;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_DEFAULT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_EXPIRE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_GET;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_GET_TIMEOUT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_IREAD;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_IWR;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_IWRITE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_MAXLOCKS;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_MINLOCKS;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_MINWRITE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockGet(int,int,Dbt,int)
+ * DbEnv.lockGet(int,int,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_NOWAIT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_OLDEST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_PUT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_PUT_ALL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_PUT_OBJ;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_RANDOM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_READ;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_TIMEOUT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockVector(int,int,DbLockRequest[],int,int)
+ * DbEnv.lockVector(int,int,DbLockRequest[],int,int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_WRITE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setLockDetect(int)
+ * DbEnv.setLockDetect(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#lockDetect(int,int)
+ * DbEnv.lockDetect(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOCK_YOUNGEST;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_LOG_AUTOREMOVE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setFlags(int,boolean)
+ * DbMpoolFile.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_MPOOL_NOFILE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_MULTIPLE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_MULTIPLE_KEY;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnRecover(int,int)
+ * DbEnv.txnRecover(int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NEXT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NEXT_DUP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NEXT_NODUP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link com.sleepycat.db.Dbc#put(Dbt,Dbt,int)
+ * Dbc.put(Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NODUPDATA;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOLOCKING;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOMMAP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOORDERCHK;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #put(DbTxn,Dbt,Dbt,int) put(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOOVERWRITE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOPANIC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #close(int) close(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_NOSYNC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_ORDERCHKONLY;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_OVERWRITE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PANIC_ENVIRONMENT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#dup(int) Dbc.dup(int)}</li>
+ *
+ * </ul>
+ *
+ */
+ public final static int DB_POSITION;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PREV;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PREV_NODUP;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRINTABLE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setPriority(int)
+ * DbMpoolFile.setPriority(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIORITY_DEFAULT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setPriority(int)
+ * DbMpoolFile.setPriority(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIORITY_HIGH;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setPriority(int)
+ * DbMpoolFile.setPriority(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIORITY_LOW;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setPriority(int)
+ * DbMpoolFile.setPriority(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIORITY_VERY_HIGH;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbMpoolFile#setPriority(int)
+ * DbMpoolFile.setPriority(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIORITY_VERY_LOW;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_PRIVATE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RDONLY;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RECNUM;
+ public final static int DB_RECORDCOUNT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#setFeedbackHandler(DbEnvFeedbackHandler)
+ * DbEnv.setFeedbackHandler(DbEnvFeedbackHandler)}</li>
+ * <li> {@link com.sleepycat.db.DbEnvFeedbackHandler#feedback(DbEnv,int,int)
+ * DbEnvFeedbackHandler.feedback(DbEnv,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RECOVER;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RECOVER_FATAL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REGION_INIT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RENUMBER;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationStart(Dbt,int)
+ * DbEnv.replicationStart(Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_CLIENT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_ISPERM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationStart(Dbt,int)
+ * DbEnv.replicationStart(Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_LOGSONLY;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationStart(Dbt,int)
+ * DbEnv.replicationStart(Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_MASTER;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setReplicationTransport(int,DbRepTransport)
+ * DbEnv.setReplicationTransport(int,DbRepTransport)}</li>
+ * <li> {@link com.sleepycat.db.DbRepTransport#send(DbEnv,Dbt,Dbt,DbLsn,int,int)
+ * DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_NOBUFFER;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)
+ * DbEnv.replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_NOTPERM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setReplicationTransport(int,DbRepTransport)
+ * DbEnv.setReplicationTransport(int,DbRepTransport)}</li>
+ * <li> {@link com.sleepycat.db.DbRepTransport#send(DbEnv,Dbt,Dbt,DbLsn,int,int)
+ * DbRepTransport.send(DbEnv,Dbt,Dbt,DbLsn,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_PERMANENT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationElect(int,int,int)
+ * DbEnv.replicationElect(int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REP_UNAVAIL;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_REVSPLITOFF;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link #join(Dbc[],int) join(Dbc[],int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_RMW;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#DbEnv(int) DbEnv(int)}
+ * </li>
+ * </ul>
+ *
+ */
+ public final static int DB_RPCCLIENT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #verify(String,String,java.io.OutputStream,int)
+ * verify(String,String,java.io.OutputStream,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SALVAGE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.DbLogc#get(DbLsn,Dbt,int)
+ * DbLogc.get(DbLsn,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SET;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setTimeout(long,int)
+ * DbEnv.setTimeout(long,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#getTimeout(int)
+ * DbEnv.getTimeout(int)}</li>
+ * <li> {@link com.sleepycat.db.DbTxn#setTimeout(long,int)
+ * DbTxn.setTimeout(long,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SET_LOCK_TIMEOUT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SET_RANGE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,int) get(DbTxn,Dbt,Dbt,int)}
+ * </li>
+ * <li> {@link #get(DbTxn,Dbt,Dbt,Dbt,int)
+ * get(DbTxn,Dbt,Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,int)}</li>
+ * <li> {@link com.sleepycat.db.Dbc#get(Dbt,Dbt,Dbt,int)
+ * Dbc.get(Dbt,Dbt,Dbt,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SET_RECNO;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setTimeout(long,int)
+ * DbEnv.setTimeout(long,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#getTimeout(int)
+ * DbEnv.getTimeout(int)}</li>
+ * <li> {@link com.sleepycat.db.DbTxn#setTimeout(long,int)
+ * DbTxn.setTimeout(long,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SET_TXN_TIMEOUT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SNAPSHOT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#lockStat(int)
+ * DbEnv.lockStat(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#logStat(int)
+ * DbEnv.logStat(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#memoryPoolStat(int)
+ * DbEnv.memoryPoolStat(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#memoryPoolFileStat(int)
+ * DbEnv.memoryPoolFileStat(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#replicationStat(int)
+ * DbEnv.replicationStat(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnStat(int)
+ * DbEnv.txnStat(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_STAT_CLEAR;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_SYSTEM_MEM;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_THREAD;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TIME_NOTGRANTED;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #open(DbTxn,String,String,int,int,int)
+ * open(DbTxn,String,String,int,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TRUNCATE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#txnBegin(DbTxn,int)
+ * DbEnv.txnBegin(DbTxn,int)}</li>
+ * <li> {@link com.sleepycat.db.DbTxn#commit(int)
+ * DbTxn.commit(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_NOSYNC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFlags(int) setFlags(int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_NOT_DURABLE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#txnBegin(DbTxn,int)
+ * DbEnv.txnBegin(DbTxn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_NOWAIT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#txnBegin(DbTxn,int)
+ * DbEnv.txnBegin(DbTxn,int)}</li>
+ * <li> {@link com.sleepycat.db.DbTxn#commit(int)
+ * DbTxn.commit(int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_SYNC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_TXN_WRITE_NOSYNC;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFeedbackHandler(DbFeedbackHandler)
+ * setFeedbackHandler(DbFeedbackHandler)}</li>
+ * <li> {@link com.sleepycat.db.DbFeedbackHandler#feedback(Db,int,int)
+ * DbFeedbackHandler.feedback(Db,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_UPGRADE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#remove(String,int)
+ * DbEnv.remove(String,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_USE_ENVIRON;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#open(String,int,int)
+ * DbEnv.open(String,int,int)}</li>
+ * <li> {@link com.sleepycat.db.DbEnv#remove(String,int)
+ * DbEnv.remove(String,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_USE_ENVIRON_ROOT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setVerbose(int,boolean)
+ * DbEnv.setVerbose(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERB_CHKPOINT;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setVerbose(int,boolean)
+ * DbEnv.setVerbose(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERB_DEADLOCK;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setVerbose(int,boolean)
+ * DbEnv.setVerbose(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERB_RECOVERY;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setVerbose(int,boolean)
+ * DbEnv.setVerbose(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERB_REPLICATION;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setVerbose(int,boolean)
+ * DbEnv.setVerbose(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERB_WAITSFOR;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #setFeedbackHandler(DbFeedbackHandler)
+ * setFeedbackHandler(DbFeedbackHandler)}</li>
+ * <li> {@link com.sleepycat.db.DbFeedbackHandler#feedback(Db,int,int)
+ * DbFeedbackHandler.feedback(Db,int,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_VERIFY;
+ public final static int DB_VERSION_MAJOR;
+ public final static int DB_VERSION_MINOR;
+ public final static int DB_VERSION_PATCH;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #cursor(DbTxn,int) cursor(DbTxn,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_WRITECURSOR;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link #Db(DbEnv,int) Db(DbEnv,int)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_XA_CREATE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbTxn#prepare(byte[])
+ * DbTxn.prepare(byte[])}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_XIDDATASIZE;
+ /**
+ * A constant used to configure the system. It is used in the
+ * following locations:
+ * <ul>
+ * <li> {@link com.sleepycat.db.DbEnv#setFlags(int,boolean)
+ * DbEnv.setFlags(int,boolean)}</li>
+ * </ul>
+ *
+ */
+ public final static int DB_YIELDCPU;
+ // END-JAVA-SPECIAL-CONSTANTS
+
+ static {
+ // BEGIN-JAVA-CONSTANT-INITIALIZATION
+ /*
+ * DO NOT EDIT: automatically built by dist/s_java_const.
+ */
DB_AFTER = DbConstants.DB_AFTER;
+ DB_AGGRESSIVE = DbConstants.DB_AGGRESSIVE;
DB_APPEND = DbConstants.DB_APPEND;
+ DB_ARCH_ABS = DbConstants.DB_ARCH_ABS;
+ DB_ARCH_DATA = DbConstants.DB_ARCH_DATA;
+ DB_ARCH_LOG = DbConstants.DB_ARCH_LOG;
+ DB_ARCH_REMOVE = DbConstants.DB_ARCH_REMOVE;
+ DB_AUTO_COMMIT = DbConstants.DB_AUTO_COMMIT;
DB_BEFORE = DbConstants.DB_BEFORE;
DB_CACHED_COUNTS = DbConstants.DB_CACHED_COUNTS;
- DB_CHECKPOINT = DbConstants.DB_CHECKPOINT;
+ DB_CDB_ALLDB = DbConstants.DB_CDB_ALLDB;
+ DB_CHKSUM = DbConstants.DB_CHKSUM;
DB_CONSUME = DbConstants.DB_CONSUME;
DB_CONSUME_WAIT = DbConstants.DB_CONSUME_WAIT;
- DB_CURLSN = DbConstants.DB_CURLSN;
+ DB_CREATE = DbConstants.DB_CREATE;
DB_CURRENT = DbConstants.DB_CURRENT;
+ DB_CXX_NO_EXCEPTIONS = DbConstants.DB_CXX_NO_EXCEPTIONS;
+ DB_DBT_MALLOC = DbConstants.DB_DBT_MALLOC;
+ DB_DBT_PARTIAL = DbConstants.DB_DBT_PARTIAL;
+ DB_DBT_REALLOC = DbConstants.DB_DBT_REALLOC;
+ DB_DBT_USERMEM = DbConstants.DB_DBT_USERMEM;
+ DB_DIRECT_DB = DbConstants.DB_DIRECT_DB;
+ DB_DIRECT_LOG = DbConstants.DB_DIRECT_LOG;
+ DB_DIRTY_READ = DbConstants.DB_DIRTY_READ;
+ DB_DUP = DbConstants.DB_DUP;
+ DB_DUPSORT = DbConstants.DB_DUPSORT;
+ DB_EID_BROADCAST = DbConstants.DB_EID_BROADCAST;
+ DB_EID_INVALID = DbConstants.DB_EID_INVALID;
+ DB_ENCRYPT = DbConstants.DB_ENCRYPT;
+ DB_ENCRYPT_AES = DbConstants.DB_ENCRYPT_AES;
+ DB_EXCL = DbConstants.DB_EXCL;
+ DB_FAST_STAT = DbConstants.DB_FAST_STAT;
DB_FIRST = DbConstants.DB_FIRST;
DB_FLUSH = DbConstants.DB_FLUSH;
+ DB_FORCE = DbConstants.DB_FORCE;
DB_GET_BOTH = DbConstants.DB_GET_BOTH;
+ DB_GET_BOTH_RANGE = DbConstants.DB_GET_BOTH_RANGE;
DB_GET_RECNO = DbConstants.DB_GET_RECNO;
+ DB_INIT_CDB = DbConstants.DB_INIT_CDB;
+ DB_INIT_LOCK = DbConstants.DB_INIT_LOCK;
+ DB_INIT_LOG = DbConstants.DB_INIT_LOG;
+ DB_INIT_MPOOL = DbConstants.DB_INIT_MPOOL;
+ DB_INIT_REP = DbConstants.DB_INIT_REP;
+ DB_INIT_TXN = DbConstants.DB_INIT_TXN;
+ DB_JOINENV = DbConstants.DB_JOINENV;
DB_JOIN_ITEM = DbConstants.DB_JOIN_ITEM;
+ DB_JOIN_NOSORT = DbConstants.DB_JOIN_NOSORT;
DB_KEYFIRST = DbConstants.DB_KEYFIRST;
DB_KEYLAST = DbConstants.DB_KEYLAST;
DB_LAST = DbConstants.DB_LAST;
+ DB_LOCKDOWN = DbConstants.DB_LOCKDOWN;
+ DB_LOCK_DEFAULT = DbConstants.DB_LOCK_DEFAULT;
+ DB_LOCK_EXPIRE = DbConstants.DB_LOCK_EXPIRE;
+ DB_LOCK_GET = DbConstants.DB_LOCK_GET;
+ DB_LOCK_GET_TIMEOUT = DbConstants.DB_LOCK_GET_TIMEOUT;
+ DB_LOCK_IREAD = DbConstants.DB_LOCK_IREAD;
+ DB_LOCK_IWR = DbConstants.DB_LOCK_IWR;
+ DB_LOCK_IWRITE = DbConstants.DB_LOCK_IWRITE;
+ DB_LOCK_MAXLOCKS = DbConstants.DB_LOCK_MAXLOCKS;
+ DB_LOCK_MINLOCKS = DbConstants.DB_LOCK_MINLOCKS;
+ DB_LOCK_MINWRITE = DbConstants.DB_LOCK_MINWRITE;
+ DB_LOCK_NOWAIT = DbConstants.DB_LOCK_NOWAIT;
+ DB_LOCK_OLDEST = DbConstants.DB_LOCK_OLDEST;
+ DB_LOCK_PUT = DbConstants.DB_LOCK_PUT;
+ DB_LOCK_PUT_ALL = DbConstants.DB_LOCK_PUT_ALL;
+ DB_LOCK_PUT_OBJ = DbConstants.DB_LOCK_PUT_OBJ;
+ DB_LOCK_RANDOM = DbConstants.DB_LOCK_RANDOM;
+ DB_LOCK_READ = DbConstants.DB_LOCK_READ;
+ DB_LOCK_TIMEOUT = DbConstants.DB_LOCK_TIMEOUT;
+ DB_LOCK_WRITE = DbConstants.DB_LOCK_WRITE;
+ DB_LOCK_YOUNGEST = DbConstants.DB_LOCK_YOUNGEST;
+ DB_LOG_AUTOREMOVE = DbConstants.DB_LOG_AUTOREMOVE;
+ DB_MPOOL_NOFILE = DbConstants.DB_MPOOL_NOFILE;
+ DB_MULTIPLE = DbConstants.DB_MULTIPLE;
+ DB_MULTIPLE_KEY = DbConstants.DB_MULTIPLE_KEY;
DB_NEXT = DbConstants.DB_NEXT;
DB_NEXT_DUP = DbConstants.DB_NEXT_DUP;
DB_NEXT_NODUP = DbConstants.DB_NEXT_NODUP;
DB_NODUPDATA = DbConstants.DB_NODUPDATA;
+ DB_NOLOCKING = DbConstants.DB_NOLOCKING;
+ DB_NOMMAP = DbConstants.DB_NOMMAP;
+ DB_NOORDERCHK = DbConstants.DB_NOORDERCHK;
DB_NOOVERWRITE = DbConstants.DB_NOOVERWRITE;
+ DB_NOPANIC = DbConstants.DB_NOPANIC;
DB_NOSYNC = DbConstants.DB_NOSYNC;
+ DB_ORDERCHKONLY = DbConstants.DB_ORDERCHKONLY;
+ DB_OVERWRITE = DbConstants.DB_OVERWRITE;
+ DB_PANIC_ENVIRONMENT = DbConstants.DB_PANIC_ENVIRONMENT;
DB_POSITION = DbConstants.DB_POSITION;
DB_PREV = DbConstants.DB_PREV;
DB_PREV_NODUP = DbConstants.DB_PREV_NODUP;
+ DB_PRINTABLE = DbConstants.DB_PRINTABLE;
+ DB_PRIORITY_DEFAULT = DbConstants.DB_PRIORITY_DEFAULT;
+ DB_PRIORITY_HIGH = DbConstants.DB_PRIORITY_HIGH;
+ DB_PRIORITY_LOW = DbConstants.DB_PRIORITY_LOW;
+ DB_PRIORITY_VERY_HIGH = DbConstants.DB_PRIORITY_VERY_HIGH;
+ DB_PRIORITY_VERY_LOW = DbConstants.DB_PRIORITY_VERY_LOW;
+ DB_PRIVATE = DbConstants.DB_PRIVATE;
+ DB_RDONLY = DbConstants.DB_RDONLY;
+ DB_RECNUM = DbConstants.DB_RECNUM;
DB_RECORDCOUNT = DbConstants.DB_RECORDCOUNT;
+ DB_RECOVER = DbConstants.DB_RECOVER;
+ DB_RECOVER_FATAL = DbConstants.DB_RECOVER_FATAL;
+ DB_REGION_INIT = DbConstants.DB_REGION_INIT;
+ DB_RENUMBER = DbConstants.DB_RENUMBER;
+ DB_REP_CLIENT = DbConstants.DB_REP_CLIENT;
+ DB_REP_ISPERM = DbConstants.DB_REP_ISPERM;
+ DB_REP_LOGSONLY = DbConstants.DB_REP_LOGSONLY;
+ DB_REP_MASTER = DbConstants.DB_REP_MASTER;
+ DB_REP_NOBUFFER = DbConstants.DB_REP_NOBUFFER;
+ DB_REP_NOTPERM = DbConstants.DB_REP_NOTPERM;
+ DB_REP_PERMANENT = DbConstants.DB_REP_PERMANENT;
+ DB_REP_UNAVAIL = DbConstants.DB_REP_UNAVAIL;
+ DB_REVSPLITOFF = DbConstants.DB_REVSPLITOFF;
DB_RMW = DbConstants.DB_RMW;
+ DB_RPCCLIENT = DbConstants.DB_RPCCLIENT;
+ DB_SALVAGE = DbConstants.DB_SALVAGE;
DB_SET = DbConstants.DB_SET;
+ DB_SET_LOCK_TIMEOUT = DbConstants.DB_SET_LOCK_TIMEOUT;
DB_SET_RANGE = DbConstants.DB_SET_RANGE;
DB_SET_RECNO = DbConstants.DB_SET_RECNO;
+ DB_SET_TXN_TIMEOUT = DbConstants.DB_SET_TXN_TIMEOUT;
+ DB_SNAPSHOT = DbConstants.DB_SNAPSHOT;
+ DB_STAT_CLEAR = DbConstants.DB_STAT_CLEAR;
+ DB_SYSTEM_MEM = DbConstants.DB_SYSTEM_MEM;
+ DB_THREAD = DbConstants.DB_THREAD;
+ DB_TIME_NOTGRANTED = DbConstants.DB_TIME_NOTGRANTED;
+ DB_TRUNCATE = DbConstants.DB_TRUNCATE;
+ DB_TXN_NOSYNC = DbConstants.DB_TXN_NOSYNC;
+ DB_TXN_NOT_DURABLE = DbConstants.DB_TXN_NOT_DURABLE;
+ DB_TXN_NOWAIT = DbConstants.DB_TXN_NOWAIT;
+ DB_TXN_SYNC = DbConstants.DB_TXN_SYNC;
+ DB_TXN_WRITE_NOSYNC = DbConstants.DB_TXN_WRITE_NOSYNC;
+ DB_UPGRADE = DbConstants.DB_UPGRADE;
+ DB_USE_ENVIRON = DbConstants.DB_USE_ENVIRON;
+ DB_USE_ENVIRON_ROOT = DbConstants.DB_USE_ENVIRON_ROOT;
+ DB_VERB_CHKPOINT = DbConstants.DB_VERB_CHKPOINT;
+ DB_VERB_DEADLOCK = DbConstants.DB_VERB_DEADLOCK;
+ DB_VERB_RECOVERY = DbConstants.DB_VERB_RECOVERY;
+ DB_VERB_REPLICATION = DbConstants.DB_VERB_REPLICATION;
+ DB_VERB_WAITSFOR = DbConstants.DB_VERB_WAITSFOR;
+ DB_VERIFY = DbConstants.DB_VERIFY;
+ DB_VERSION_MAJOR = DbConstants.DB_VERSION_MAJOR;
+ DB_VERSION_MINOR = DbConstants.DB_VERSION_MINOR;
+ DB_VERSION_PATCH = DbConstants.DB_VERSION_PATCH;
DB_WRITECURSOR = DbConstants.DB_WRITECURSOR;
+ DB_XA_CREATE = DbConstants.DB_XA_CREATE;
+ DB_XIDDATASIZE = DbConstants.DB_XIDDATASIZE;
+ DB_YIELDCPU = DbConstants.DB_YIELDCPU;
+ // END-JAVA-CONSTANT-INITIALIZATION
+ }
- DB_DBT_MALLOC = DbConstants.DB_DBT_MALLOC;
- DB_DBT_PARTIAL = DbConstants.DB_DBT_PARTIAL;
- DB_DBT_REALLOC = DbConstants.DB_DBT_REALLOC;
- DB_DBT_USERMEM = DbConstants.DB_DBT_USERMEM;
- one_time_init();
+ /**
+ * The constructor creates a Db object that is the handle for a
+ * Berkeley DB database. The constructor allocates memory
+ * internally; calling the {@link com.sleepycat.db.Db#close
+ * Db.close}, {@link com.sleepycat.db.Db#remove Db.remove} or
+ * {@link com.sleepycat.db.Db#rename Db.rename} methods will free
+ * that memory.</p>
+ *
+ * @param dbenv If no <b>dbenv</b> value is specified,
+ * the database is standalone; that is, it is not part of any
+ * Berkeley DB environment. <p>
+ *
+ * If a <b>dbenv</b> value is specified, the database is
+ * created within the specified Berkeley DB environment. The
+ * database access methods automatically make calls to the
+ * other subsystems in Berkeley DB based on the enclosing
+ * environment. For example, if the environment has been
+ * configured to use locking, the access methods will
+ * automatically acquire the correct locks when reading and
+ * writing pages of the database.</p>
+ * @param flags must be set to 0 or by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_XA_CREATE
+ * Db.DB_XA_CREATE}<p>
+ *
+ * Instead of creating a standalone database, create a
+ * database intended to be accessed via applications
+ * running under a X/Open conformant Transaction Manager.
+ * The database will be opened in the environment specified
+ * by the OPENINFO parameter of the GROUPS section of the
+ * ubbconfig file. See the <a
+ * href="{@docRoot}/../ref/xa/intro.html">XA Resource
+ * Manager</a> chapter in the Reference Guide for more
+ * information. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public Db(DbEnv dbenv, int flags) throws DbException {
+ this(db_javaJNI.new_Db(DbEnv.getCPtr(dbenv), flags), true);
+ initialize(dbenv);
+ }
+
+
+ public void associate(DbTxn txnid, Db secondary, DbSecondaryKeyCreate callback, int flags) throws DbException {
+ db_javaJNI.Db_associate(swigCPtr, DbTxn.getCPtr(txnid), Db.getCPtr(secondary), (secondary.seckey_create_handler = callback), flags);
+ }
+
+
+ int close0(int flags) {
+ return db_javaJNI.Db_close0(swigCPtr, flags);
+ }
+
+
+ /**
+ * The Db.cursor method returns a created database cursor.
+ *
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * All read operations performed by the cursor may return
+ * modified but not yet committed data. Silently ignored if
+ * the {@link com.sleepycat.db.Db#DB_DIRTY_READ <code>Db.DB_DIRTY_READ</code>
+ * } flag was not specified when the underlying database
+ * was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_WRITECURSOR
+ * Db.DB_WRITECURSOR}<p>
+ *
+ * Specify that the cursor will be used to update the
+ * database. The underlying database environment must have
+ * been opened using the {@link
+ * com.sleepycat.db.Db#DB_INIT_CDB <code>Db.DB_INIT_CDB</code>
+ * } flag. </li>
+ * </ul>
+ *
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null. To transaction-protect cursor operations,
+ * cursors must be opened and closed within the context of a
+ * transaction, and the <b>txnid</b> parameter specifies the
+ * transaction context in which the cursor may be used.
+ * @throws DbException The Db.cursor method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Db.cursor method will
+ * fail and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ * @return The Db.cursor method throws
+ * an exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public Dbc cursor(DbTxn txnid, int flags) throws DbException {
+ long cPtr = db_javaJNI.Db_cursor(swigCPtr, DbTxn.getCPtr(txnid), flags);
+ return (cPtr == 0) ? null : new Dbc(cPtr, false);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #delete(DbTxn,Dbt,int)}
+ */
+ public int del(DbTxn txnid, Dbt key, int flags) throws DbException {
+ return delete(txnid, key, flags);
+ }
+
+
+ /**
+ * The Db.delete method removes key/data pairs from the database.
+ * The key/data pair associated with the specified <b>key</b> is
+ * discarded from the database. In the presence of duplicate key
+ * values, all records associated with the designated key will be
+ * discarded.</p> <p>
+ *
+ * When called on a database that has been made into a secondary
+ * index using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method, the Db.delete method deletes the
+ * key/data pair from the primary database and all secondary
+ * indices.</p>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.delete call within a transaction. If the
+ * call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. </li>
+ * </ul>
+ *
+ * @param txnid If the operation is to be
+ * transaction-protected, (other than by specifying the
+ * Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The Db.delete method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors: An attempt was made to modify a read-only
+ * database.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.delete method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.delete method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.delete method will
+ * fail and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Db.delete method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the specified key is
+ * not in the database. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Db.delete method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if the database is a
+ * Queue or Recno database and the specified key exists,
+ * but was never explicitly created by the application or
+ * was later deleted. </li>
+ * </ul>
+ * Unless otherwise specified, the Db.delete method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public int delete(DbTxn txnid, Dbt key, int flags) throws DbException {
+ return db_javaJNI.Db_del(swigCPtr, DbTxn.getCPtr(txnid), key, flags);
+ }
+
+
+ /**
+ * The {@link com.sleepycat.db.DbEnv#err DbEnv.err}, {@link
+ * com.sleepycat.db.DbEnv#errx DbEnv.errx}, Db.err and Db.errx
+ * methods provide error-messaging functionality for applications
+ * written using the Berkeley DB library.</p> <p>
+ *
+ * The {@link com.sleepycat.db.DbEnv#err DbEnv.err} method
+ * constructs an error message consisting of the following
+ * elements:</p> <blockquote> <p>
+ *
+ * If no error callback function has been set using the {@link
+ * com.sleepycat.db.DbEnv#setErrorHandler DbEnv.setErrorHandler}
+ * method, any prefix string specified using the {@link
+ * com.sleepycat.db.DbEnv#setErrorPrefix DbEnv.setErrorPrefix}
+ * method, followed by two separating characters: a colon and a
+ * &lt;space&gt; character. <p>
+ *
+ * <p>
+ *
+ * Two separating characters: a colon and a &lt;space&gt;
+ * character. <p>
+ *
+ * The standard system or Berkeley DB library error string
+ * associated with the <b>error</b> value, as returned by the
+ * {@link com.sleepycat.db.DbEnv#strerror DbEnv.strerror} method.
+ * </blockquote> <p>
+ *
+ * This constructed error message is then handled as follows:</p>
+ * <blockquote><p>
+ *
+ * If an error callback function has been set (see {@link
+ * com.sleepycat.db.Db#setErrorHandler Db.setErrorHandler} and
+ * {@link com.sleepycat.db.DbEnv#setErrorHandler
+ * DbEnv.setErrorHandler}), that function is called with two
+ * parameters: any prefix string specified (see {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} and
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}) and the error message.</p> <p>
+ *
+ * If an OutputStream has been set (see {@link
+ * com.sleepycat.db.DbEnv#setErrorStream DbEnv.setErrorStream}
+ * and {@link com.sleepycat.db.Db#setErrorStream
+ * Db.setErrorStream}), the error message is written to that
+ * stream.</p> <p>
+ *
+ * If none of these output options has been configured, the error
+ * message is written to System.err, the standard error output
+ * stream.</p> </blockquote>
+ *
+ * @param error the error value for which the {@link
+ * com.sleepycat.db.DbEnv#err DbEnv.err} and Db.err methods
+ * will display a explanatory string.
+ * @param message an error message to display.
+ */
+ public void err(int error, String message) {
+ db_javaJNI.Db_err(swigCPtr, error, message);
+ }
+
+
+ /**
+ * The {@link com.sleepycat.db.DbEnv#errx DbEnv.errx} and Db.errx
+ * methods perform identically to the {@link
+ * com.sleepycat.db.DbEnv#err DbEnv.err} and Db.err methods,
+ * except that they do not append the final separator characters
+ * and standard error string to the error message.</p>
+ *
+ * @param error the error value for which the {@link
+ * com.sleepycat.db.DbEnv#err DbEnv.err} and Db.err methods
+ * will display a explanatory string.
+ * @param message an error message to display.
+ */
+ public void errx(String message) {
+ db_javaJNI.Db_errx(swigCPtr, message);
+ }
+
+
+ /**
+ * The Db.get method retrieves key/data pairs from the database.
+ * The byte array and length of the data associated with the
+ * specified <b>key</b> are returned in the structure to which
+ * <b>data</b> refers.</p> <p>
+ *
+ * In the presence of duplicate key values, Db.get will return
+ * the first data item for the designated key. Duplicates are
+ * sorted by insert order, except where this order has been
+ * overridden by cursor operations. <b>Retrieval of duplicates
+ * requires the use of cursor operations.</b> See {@link
+ * com.sleepycat.db.Dbc#get Dbc.get} for details.</p> <p>
+ *
+ * When called on a database that has been made into a secondary
+ * index using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method, the Db.get method returns the key from
+ * the secondary index and the data item from the primary
+ * database. In addition, the second method signature returns the
+ * key from the primary database. In databases that are not
+ * secondary indices, the second method signature will always
+ * fail.</p>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to 0 or one of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CONSUME
+ * Db.DB_CONSUME}<p>
+ *
+ * Return the record number and data from the available
+ * record closest to the head of the queue, and delete the
+ * record. The cursor will be positioned on the deleted
+ * record. The record number will be returned in <b>key</b>
+ * , as described in {@link com.sleepycat.db.Dbt Dbt}. The
+ * data will be returned in the <b>data</b> parameter. A
+ * record is available if it is not deleted and is not
+ * currently locked. The underlying database must be of
+ * type Queue for <code>Db.DB_CONSUME</code> to be
+ * specified. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CONSUME_WAIT
+ * Db.DB_CONSUME_WAIT}<p>
+ *
+ * The <code>Db.DB_CONSUME_WAIT</code> flag is the same as
+ * the <code>Db.DB_CONSUME</code> flag, except that if the
+ * Queue database is empty, the thread of control will wait
+ * until there is data in the queue before returning. The
+ * underlying database must be of type Queue for <code>Db.DB_CONSUME_WAIT</code>
+ * to be specified. <p>
+ *
+ * If lock or transaction timeouts have been specified, the
+ * Db.get method with the <code>Db.DB_CONSUME_WAIT</code>
+ * flag may return <a href="{@docRoot}/../ref/program/errorret.html#DB_LOCK_NOTGRANTED">
+ * <code>Db.DB_LOCK_NOTGRANTED</code></a> . This failure,
+ * by itself, does not require the enclosing transaction be
+ * aborted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH
+ * Db.DB_GET_BOTH}<p>
+ *
+ * Retrieve the key/data pair only if both the key and data
+ * match the arguments. <p>
+ *
+ * When used with the second method signature version of
+ * this method on a secondary index handle, return the
+ * secondary key/primary key/data tuple only if both the
+ * primary and secondary keys match the arguments. It is an
+ * error to use the <code>Db.DB_GET_BOTH</code> flag with
+ * the first method signature version of this method and a
+ * secondary index handle.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RECNO
+ * Db.DB_SET_RECNO}<p>
+ *
+ * Retrieve the specified numbered key/data pair from a
+ * database. Upon return, both the <b>key</b> and <b>data
+ * </b> items will have been filled in. <p>
+ *
+ * The <b>data</b> field of the specified <b>key</b> must
+ * be a byte array large enough to hold a logical record
+ * number (that is, an int). This record number determines
+ * the record to be retrieved. <p>
+ *
+ * For <code>Db.DB_SET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the DB_RECNUM flag.</p> </p>
+ * </li>
+ * </ul>
+ * In addition, the following flags may be set by bitwise
+ * inclusively <b>OR</b> 'ing them into the <b>flags</b>
+ * parameter:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.get call within a transaction. If the
+ * call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. This flag may only be specified with
+ * the <code>Db.DB_CONSUME</code> and <code>Db.DB_CONSUME_WAIT</code>
+ * flags. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * Read modified but not yet committed data. Silently
+ * ignored if the {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * <code>Db.DB_DIRTY_READ</code>} flag was not specified
+ * when the underlying database was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE
+ * Db.DB_MULTIPLE}<p>
+ *
+ * Return multiple data items in the buffer to which the
+ * <b>data</b> parameter refers. <p>
+ *
+ * In the case of Btree or Hash databases, all of the data
+ * items associated with the specified key are entered into
+ * the buffer. In the case of Queue or Recno databases, all
+ * of the data items in the database, starting at, and
+ * subsequent to, the specified key, are entered into the
+ * buffer.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE</code> flag may only be used
+ * alone, or with the <code>Db.DB_GET_BOTH</code> and
+ * <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code>
+ * flag may not be used when accessing databases made into
+ * secondary indices using the {@link
+ * com.sleepycat.db.Db#associate Db.associate} method.</p>
+ * <p>
+ *
+ * See {@link com.sleepycat.db.DbMultipleDataIterator
+ * DbMultipleDataIterator} for more information.</p> </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RMW Db.DB_RMW}<p>
+ *
+ * Acquire write locks instead of read locks when doing the
+ * retrieval. Setting this flag can eliminate deadlock
+ * during a read-modify-write cycle by acquiring the write
+ * lock during the read part of the cycle so that another
+ * thread of control acquiring a read lock for the same
+ * item, in its own read-modify-write cycle, will not
+ * result in deadlock. <p>
+ *
+ * Because the Db.get method will not hold locks across
+ * Berkeley DB calls in non-transactional operations, the
+ * {@link com.sleepycat.db.Db#DB_RMW <code>Db.DB_RMW</code>
+ * } flag to the Db.get call is meaningful only in the
+ * presence of transactions.</p> </li>
+ * </ul>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param pkey the return key from the
+ * primary database.
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The Db.get method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.get method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.get method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws DbLockNotGrantedException If the Db.DB_CONSUME_WAIT
+ * flag was specified, lock or transaction timers were
+ * configured and the lock could not be granted before the
+ * wait-time expired, the Db.get method will fail and throw a
+ * {@link com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.get method will fail
+ * and throw a IllegalArgumentException exception if a record
+ * number of 0 was specified; the {@link
+ * com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD} flag was
+ * specified to the {@link com.sleepycat.db.Db#open Db.open}
+ * method and none of the {@link
+ * com.sleepycat.db.Db#DB_DBT_MALLOC Db.DB_DBT_MALLOC},
+ * {@link com.sleepycat.db.Db#DB_DBT_REALLOC
+ * Db.DB_DBT_REALLOC} or {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM Db.DB_DBT_USERMEM}
+ * flags were set in the {@link com.sleepycat.db.Dbt Dbt};
+ * the second method signature was called with a {@link
+ * com.sleepycat.db.Db Db} handle that does not refer to a
+ * secondary index; or if an invalid flag value or parameter
+ * was specified.
+ * @throws DbMemoryException If the requested item could
+ * not be returned due to insufficient memory, the Db.get
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Db.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the specified key is
+ * not in the database. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Db.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if the database is a
+ * Queue or Recno database and the specified key exists,
+ * but was never explicitly created by the application or
+ * was later deleted. </li>
+ * </ul>
+ * Unless otherwise specified, the Db.get method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public int get(DbTxn txnid, Dbt key, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Db_get__SWIG_0(swigCPtr, DbTxn.getCPtr(txnid), key, data, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #isByteSwapped()}
+ */
+ public boolean get_byteswapped() throws DbException {
+ return isByteSwapped();
+ }
+
+
+ /**
+ * The Db.isByteSwapped method returns false if the underlying
+ * database files were created on an architecture of the same
+ * byte order as the current one, and true if they were not (that
+ * is, big-endian on a little-endian machine, or vice versa).
+ * This information may be used to determine whether application
+ * data needs to be adjusted for this architecture or not.</p>
+ * <p>
+ *
+ * The Db.isByteSwapped method may not be called before the
+ * {@link com.sleepycat.db.Db#open Db.open} method has been
+ * called.</p>
+ *
+ * @throws IllegalArgumentException The Db.isByteSwapped method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called before {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ * @return The Db.isByteSwapped method
+ * returns false if the underlying database files were
+ * created on an architecture of the same byte order as the
+ * current one, and true if they were not.</p>
+ */
+ public boolean isByteSwapped() throws DbException {
+ return db_javaJNI.Db_get_byteswapped(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getCacheSize()}
+ */
+ public long get_cachesize() throws DbException {
+ return getCacheSize();
+ }
+
+
+ /**
+ * The Db.getCacheSize method returns the size of the cache.</p>
+ * <p>
+ *
+ * The Db.getCacheSize method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getCacheSize method returns the
+ * size of the cache.</p>
+ */
+ public long getCacheSize() throws DbException {
+ return db_javaJNI.Db_get_cachesize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getCacheSizeNcache()}
+ */
+ public int get_cachesize_ncache() throws DbException {
+ return getCacheSizeNcache();
+ }
+
+
+ /**
+ * The DbEnv.getCacheSizeNcache method returns the number of
+ * caches.</p> <p>
+ *
+ * The DbEnv.getCacheSizeNcache method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getCacheSizeNcache method
+ * returns the number of caches.</p>
+ */
+ public int getCacheSizeNcache() throws DbException {
+ return db_javaJNI.Db_get_cachesize_ncache(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFileName()}
+ */
+ public String get_filename() throws DbException {
+ return getFileName();
+ }
+
+
+ /**
+ * The Db.getFileName method returns the current filename.</p>
+ * <p>
+ *
+ * The Db.getFileName method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getFileName method returns the
+ * current filename.</p>
+ */
+ public String getFileName() throws DbException {
+ return db_javaJNI.Db_get_filename(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDatabaseName()}
+ */
+ public String get_dbname() throws DbException {
+ return getDatabaseName();
+ }
+
+
+ /**
+ * The Db.getDatabaseName method returns the current database
+ * name.</p> <p>
+ *
+ * The Db.getDatabaseName method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getDatabaseName method returns the
+ * current database name.</p>
+ */
+ public String getDatabaseName() throws DbException {
+ return db_javaJNI.Db_get_dbname(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getEncryptFlags()}
+ */
+ public int get_encrypt_flags() throws DbException {
+ return getEncryptFlags();
+ }
+
+
+ /**
+ * The Db.getEncryptFlags method returns the encryption flags.
+ * </p> <p>
+ *
+ * The Db.getEncryptFlags method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getEncryptFlags method returns the
+ * encryption flags.</p>
+ */
+ public int getEncryptFlags() throws DbException {
+ return db_javaJNI.Db_get_encrypt_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFlags()}
+ */
+ public int get_flags() throws DbException {
+ return getFlags();
+ }
+
+
+ /**
+ * The Db.getFlags method returns the current flags.</p> <p>
+ *
+ * The Db.getFlags method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getFlags method returns the
+ * current flags.</p>
+ */
+ public int getFlags() throws DbException {
+ return db_javaJNI.Db_get_flags(swigCPtr);
}
-}
-// end of Db.java
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getByteOrder()}
+ */
+ public int get_lorder() throws DbException {
+ return getByteOrder();
+ }
+
+
+ /**
+ * The Db.getByteOrder method returns the database byte order; a
+ * byte order of 4,321 indicates a big endian order, and a byte
+ * order of 1,234 indicates a little endian order.</p> <p>
+ *
+ * The Db.getByteOrder method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getByteOrder method returns the
+ * database byte order; a byte order of 4,321 indicates a big
+ * endian order, and a byte order of 1,234 indicates a little
+ * endian order.</p>
+ */
+ public int getByteOrder() throws DbException {
+ return db_javaJNI.Db_get_lorder(swigCPtr);
+ }
+
+
+ /**
+ * The Db.get_mpf method returns the handle for the cache file
+ * underlying the database.</p> <p>
+ *
+ * The Db.get_mpf method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.get_mpf method returns the handle
+ * for the cache file underlying the database.</p>
+ */
+ public DbMpoolFile get_mpf() throws DbException {
+ long cPtr = db_javaJNI.Db_get_mpf(swigCPtr);
+ return (cPtr == 0) ? null : new DbMpoolFile(cPtr, false);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOpenFlags()}
+ */
+ public int get_open_flags() throws DbException {
+ return getOpenFlags();
+ }
+
+
+ /**
+ * The Db.getOpenFlags method returns the current open method
+ * flags.</p> <p>
+ *
+ * The Db.getOpenFlags method may not be called before the
+ * Db.open method has been called.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getOpenFlags method returns the
+ * current open method flags.</p>
+ */
+ public int getOpenFlags() throws DbException {
+ return db_javaJNI.Db_get_open_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getPageSize()}
+ */
+ public int get_pagesize() throws DbException {
+ return getPageSize();
+ }
+
+
+ /**
+ * The Db.getPageSize method returns the page size.</p> <p>
+ *
+ * The Db.getPageSize method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getPageSize method returns the
+ * page size.</p>
+ */
+ public int getPageSize() throws DbException {
+ return db_javaJNI.Db_get_pagesize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getBtreeMinKey()}
+ */
+ public int get_bt_minkey() throws DbException {
+ return getBtreeMinKey();
+ }
+
+
+ /**
+ * The Db.getBtreeMinKey method returns the minimum number of
+ * key/data pairs intended to be stored on any single Btree leaf
+ * page.</p> <p>
+ *
+ * The Db.getBtreeMinKey method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getBtreeMinKey method returns the
+ * minimum number of key/data pairs intended to be stored on
+ * any single Btree leaf page.</p>
+ */
+ public int getBtreeMinKey() throws DbException {
+ return db_javaJNI.Db_get_bt_minkey(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getHashFillFactor()}
+ */
+ public int get_h_ffactor() throws DbException {
+ return getHashFillFactor();
+ }
+
+
+ /**
+ * The Db.getHashFillFactor method returns the hash table
+ * density.</p> <p>
+ *
+ * The Db.getHashFillFactor method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getHashFillFactor method returns
+ * the hash table density.</p>
+ */
+ public int getHashFillFactor() throws DbException {
+ return db_javaJNI.Db_get_h_ffactor(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getHashNumElements()}
+ */
+ public int get_h_nelem() throws DbException {
+ return getHashNumElements();
+ }
+
+
+ /**
+ * The Db.getHashNumElements method returns the estimate of the
+ * final size of the hash table.</p> <p>
+ *
+ * The Db.getHashNumElements method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getHashNumElements method returns
+ * the estimate of the final size of the hash table.</p>
+ */
+ public int getHashNumElements() throws DbException {
+ return db_javaJNI.Db_get_h_nelem(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getRecordDelimiter()}
+ */
+ public int get_re_delim() throws DbException {
+ return getRecordDelimiter();
+ }
+
+
+ /**
+ * The Db.getRecordDelimiter method returns the delimiting byte.
+ * </p> <p>
+ *
+ * The Db.getRecordDelimiter method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getRecordDelimiter method returns
+ * the delimiting byte.</p>
+ */
+ public int getRecordDelimiter() throws DbException {
+ return db_javaJNI.Db_get_re_delim(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getRecordLength()}
+ */
+ public int get_re_len() throws DbException {
+ return getRecordLength();
+ }
+
+
+ /**
+ * The Db.getRecordLength method returns the record length.</p>
+ * <p>
+ *
+ * The Db.getRecordLength method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getRecordLength method returns the
+ * record length.</p>
+ */
+ public int getRecordLength() throws DbException {
+ return db_javaJNI.Db_get_re_len(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getRecordPad()}
+ */
+ public int get_re_pad() throws DbException {
+ return getRecordPad();
+ }
+
+
+ /**
+ * The Db.getRecordPad method returns the pad character.</p> <p>
+ *
+ * The Db.getRecordPad method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getRecordPad method returns the
+ * pad character.</p>
+ */
+ public int getRecordPad() throws DbException {
+ return db_javaJNI.Db_get_re_pad(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getRecordSource()}
+ */
+ public String get_re_source() throws DbException {
+ return getRecordSource();
+ }
+
+
+ /**
+ * The Db.getRecordSource method returns the source file.</p> <p>
+ *
+ * The Db.getRecordSource method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getRecordSource method returns the
+ * source file.</p>
+ */
+ public String getRecordSource() throws DbException {
+ return db_javaJNI.Db_get_re_source(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getQueueExtentSize()}
+ */
+ public int get_q_extentsize() throws DbException {
+ return getQueueExtentSize();
+ }
+
+
+ /**
+ * The Db.getQueueExtentSize method returns the number of pages
+ * in an extent.</p> <p>
+ *
+ * The Db.getQueueExtentSize method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.getQueueExtentSize method returns
+ * the number of pages in an extent.</p>
+ */
+ public int getQueueExtentSize() throws DbException {
+ return db_javaJNI.Db_get_q_extentsize(swigCPtr);
+ }
+
+
+ public int get_flags_raw() throws DbException {
+ return db_javaJNI.Db_get_flags_raw(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #isTransactional()}
+ */
+ public boolean get_transactional() throws DbException {
+ return isTransactional();
+ }
+
+
+ /**
+ * The Db.isTransactional method returns true if the {@link
+ * com.sleepycat.db.Db Db} handle has been opened in a
+ * transactional mode.</p> <p>
+ *
+ * The Db.isTransactional method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The Db.isTransactional method returns
+ * true if the {@link com.sleepycat.db.Db Db} handle has been
+ * opened in a transactional mode.</p>
+ */
+ public boolean isTransactional() throws DbException {
+ return db_javaJNI.Db_get_transactional(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDbType()}
+ */
+ public int get_type() throws DbException {
+ return getDbType();
+ }
+
+
+ /**
+ * The Db.getDbType method returns the type of the underlying
+ * access method (and file format). The type value is one of
+ * Db.DB_BTREE, Db.DB_HASH, Db.DB_RECNO, or Db.DB_QUEUE. This
+ * value may be used to determine the type of the database after
+ * a return from {@link com.sleepycat.db.Db#open Db.open} with
+ * the <b>type</b> parameter set to Db.DB_UNKNOWN.</p> <p>
+ *
+ * The Db.getDbType method may not be called before the {@link
+ * com.sleepycat.db.Db#open Db.open} method has been called.</p>
+ *
+ * @throws IllegalArgumentException The Db.getDbType method will
+ * fail and throw a IllegalArgumentException exception if the
+ * method was called before {@link com.sleepycat.db.Db#open
+ * Db.open} was called; or if an invalid flag value or
+ * parameter was specified.
+ * @return The Db.getDbType method
+ * returns the type of the underlying access method (and file
+ * format).</p>
+ */
+ public int getDbType() throws DbException {
+ return db_javaJNI.Db_get_type(swigCPtr);
+ }
+
+
+ /**
+ * The Db.join method creates a specialized join cursor for use
+ * in performing equality or natural joins on secondary indices.
+ * For information on how to organize your data to use this
+ * functionality, see <a href="{@docRoot}/../ref/am/join.html">
+ * Equality join</a> .</p> <p>
+ *
+ * The Db.join method method is called using the {@link
+ * com.sleepycat.db.Db Db} handle of the primary database.</p>
+ * <p>
+ *
+ * The join cursor supports only the {@link
+ * com.sleepycat.db.Dbc#get Dbc.get} and <b>dbc_close</b> cursor
+ * functions:</p> <p>
+ *
+ * Iterates over the values associated with the keys to which
+ * each item in <b>curslist</b> was initialized. Any data value
+ * that appears in all items specified by the <b>curslist</b>
+ * parameter is then used as a key into the <b>primary</b> , and
+ * the key/data pair found in the <b>primary</b> is returned. The
+ * <b>flags</b> parameter must be set to 0 or the following
+ * value: In addition, the following flag may be set by bitwise
+ * inclusively <b>OR</b> 'ing it into the <b>flags</b> parameter:
+ * Close the returned cursor and release all resources. (Closing
+ * the cursors in <b>curslist</b> is the responsibility of the
+ * caller.)
+ *
+ * @param curslist The <b>curslist</b>
+ * parameter contains a null terminated array of cursors.
+ * Each cursor must have been initialized to refer to the key
+ * on which the underlying database should be joined.
+ * Typically, this initialization is done by a {@link
+ * com.sleepycat.db.Dbc#get Dbc.get} call with the {@link
+ * com.sleepycat.db.Db#DB_SET Db.DB_SET} flag specified. Once
+ * the cursors have been passed as part of a <b>curslist</b>
+ * , they should not be accessed or modified until the newly
+ * created join cursor has been closed, or else inconsistent
+ * results may be returned. <p>
+ *
+ * Joined values are retrieved by doing a sequential
+ * iteration over the first cursor in the <b>curslist</b>
+ * parameter, and a nested iteration over each secondary
+ * cursor in the order they are specified in the <b>curslist
+ * </b> parameter. This requires database traversals to
+ * search for the current datum in all the cursors after the
+ * first. For this reason, the best join performance normally
+ * results from sorting the cursors from the one that refers
+ * to the least number of data items to the one that refers
+ * to the most. By default, Db.join does this sort on behalf
+ * of its caller.</p> <p>
+ *
+ * For the returned join cursor to be used in a
+ * transaction-protected manner, the cursors listed in <b>
+ * curslist</b> must have been created within the context of
+ * the same transaction.</p>
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_JOIN_NOSORT
+ * Db.DB_JOIN_NOSORT}<p>
+ *
+ * Do not sort the cursors based on the number of data
+ * items to which they refer. If the data are structured so
+ * that cursors with many data items also share many common
+ * elements, higher performance will result from listing
+ * those cursors before cursors with fewer data items; that
+ * is, a sort order other than the default. The <code>Db.DB_JOIN_NOSORT</code>
+ * flag permits applications to perform join optimization
+ * prior to calling Db.join. </li>
+ * </ul>
+ *
+ * @throws DbException The Db.join method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Db.join method will fail
+ * and throw a IllegalArgumentException exception if cursor
+ * methods other than {@link com.sleepycat.db.Dbc#get
+ * Dbc.get} or {@link com.sleepycat.db.Dbc#close Dbc.close}
+ * were called; or if an invalid flag value or parameter was
+ * specified.
+ * @return The Db.join method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public Dbc join(Dbc[] curslist, int flags) throws DbException {
+ long cPtr = db_javaJNI.Db_join(swigCPtr, curslist, flags);
+ return (cPtr == 0) ? null : new Dbc(cPtr, true);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #keyRange(DbTxn,Dbt,DbKeyRange,int)}
+ */
+ public void key_range(DbTxn txnid, Dbt key, DbKeyRange key_range, int flags) throws DbException {
+ keyRange(txnid, key, key_range, flags);
+ }
+
+
+ /**
+ * The Db.keyRange method returns an estimate of the proportion
+ * of keys that are less than, equal to, and greater than the
+ * specified key. The underlying database must be of type Btree.
+ * </p> <p>
+ *
+ * The Db.keyRange method fills in a DbKeyRange object. The
+ * following data fields are available from the DbKeyRange
+ * object:</p> Values are in the range of 0 to 1; for example, if
+ * the field <b>less</b> is 0.05, 5% of the keys in the database
+ * are less than the <b>key</b> parameter. The value for <b>equal
+ * </b> will be zero if there is no matching key, and will be
+ * non-zero otherwise.</p>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param key_range The estimates are returned
+ * in the <b>key_range</b> parameter, which contains three
+ * elements of type double: <b>less</b> , <b>equal</b> , and
+ * <b>greater</b> . Values are in the range of 0 to 1; for
+ * example, if the field <b>less</b> is 0.05, 5% of the keys
+ * in the database are less than the <b>key</b> parameter.
+ * The value for <b>equal</b> will be zero if there is no
+ * matching key, and will be non-zero otherwise.
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null. The Db.keyRange method does not retain
+ * the locks it acquires for the life of the transaction, so
+ * estimates may not be repeatable.
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws DbException The Db.keyRange method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.keyRange method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.keyRange method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.keyRange method will
+ * fail and throw a IllegalArgumentException exception if the
+ * underlying database was not of type Btree; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void keyRange(DbTxn txnid, Dbt key, DbKeyRange key_range, int flags) throws DbException {
+ db_javaJNI.Db_key_range(swigCPtr, DbTxn.getCPtr(txnid), key, key_range, flags);
+ }
+
+
+ void open0(DbTxn txnid, String file, String database, int type, int flags, int mode) {
+ db_javaJNI.Db_open0(swigCPtr, DbTxn.getCPtr(txnid), file, database, type, flags, mode);
+ }
+
+
+ /**
+ * The Db.get method retrieves key/data pairs from the database.
+ * The byte array and length of the data associated with the
+ * specified <b>key</b> are returned in the structure to which
+ * <b>data</b> refers.</p> <p>
+ *
+ * In the presence of duplicate key values, Db.get will return
+ * the first data item for the designated key. Duplicates are
+ * sorted by insert order, except where this order has been
+ * overridden by cursor operations. <b>Retrieval of duplicates
+ * requires the use of cursor operations.</b> See {@link
+ * com.sleepycat.db.Dbc#get Dbc.get} for details.</p> <p>
+ *
+ * When called on a database that has been made into a secondary
+ * index using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method, the Db.get method returns the key from
+ * the secondary index and the data item from the primary
+ * database. In addition, the second method signature returns the
+ * key from the primary database. In databases that are not
+ * secondary indices, the second method signature will always
+ * fail.</p>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to 0 or one of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CONSUME
+ * Db.DB_CONSUME}<p>
+ *
+ * Return the record number and data from the available
+ * record closest to the head of the queue, and delete the
+ * record. The cursor will be positioned on the deleted
+ * record. The record number will be returned in <b>key</b>
+ * , as described in {@link com.sleepycat.db.Dbt Dbt}. The
+ * data will be returned in the <b>data</b> parameter. A
+ * record is available if it is not deleted and is not
+ * currently locked. The underlying database must be of
+ * type Queue for <code>Db.DB_CONSUME</code> to be
+ * specified. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CONSUME_WAIT
+ * Db.DB_CONSUME_WAIT}<p>
+ *
+ * The <code>Db.DB_CONSUME_WAIT</code> flag is the same as
+ * the <code>Db.DB_CONSUME</code> flag, except that if the
+ * Queue database is empty, the thread of control will wait
+ * until there is data in the queue before returning. The
+ * underlying database must be of type Queue for <code>Db.DB_CONSUME_WAIT</code>
+ * to be specified. <p>
+ *
+ * If lock or transaction timeouts have been specified, the
+ * Db.get method with the <code>Db.DB_CONSUME_WAIT</code>
+ * flag may return <a href="{@docRoot}/../ref/program/errorret.html#DB_LOCK_NOTGRANTED">
+ * <code>Db.DB_LOCK_NOTGRANTED</code></a> . This failure,
+ * by itself, does not require the enclosing transaction be
+ * aborted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH
+ * Db.DB_GET_BOTH}<p>
+ *
+ * Retrieve the key/data pair only if both the key and data
+ * match the arguments. <p>
+ *
+ * When used with the second method signature version of
+ * this method on a secondary index handle, return the
+ * secondary key/primary key/data tuple only if both the
+ * primary and secondary keys match the arguments. It is an
+ * error to use the <code>Db.DB_GET_BOTH</code> flag with
+ * the first method signature version of this method and a
+ * secondary index handle.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RECNO
+ * Db.DB_SET_RECNO}<p>
+ *
+ * Retrieve the specified numbered key/data pair from a
+ * database. Upon return, both the <b>key</b> and <b>data
+ * </b> items will have been filled in. <p>
+ *
+ * The <b>data</b> field of the specified <b>key</b> must
+ * be a byte array large enough to hold a logical record
+ * number (that is, an int). This record number determines
+ * the record to be retrieved. <p>
+ *
+ * For <code>Db.DB_SET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the DB_RECNUM flag.</p> </p>
+ * </li>
+ * </ul>
+ * In addition, the following flags may be set by bitwise
+ * inclusively <b>OR</b> 'ing them into the <b>flags</b>
+ * parameter:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.get call within a transaction. If the
+ * call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. This flag may only be specified with
+ * the <code>Db.DB_CONSUME</code> and <code>Db.DB_CONSUME_WAIT</code>
+ * flags. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * Read modified but not yet committed data. Silently
+ * ignored if the {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * <code>Db.DB_DIRTY_READ</code>} flag was not specified
+ * when the underlying database was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE
+ * Db.DB_MULTIPLE}<p>
+ *
+ * Return multiple data items in the buffer to which the
+ * <b>data</b> parameter refers. <p>
+ *
+ * In the case of Btree or Hash databases, all of the data
+ * items associated with the specified key are entered into
+ * the buffer. In the case of Queue or Recno databases, all
+ * of the data items in the database, starting at, and
+ * subsequent to, the specified key, are entered into the
+ * buffer.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE</code> flag may only be used
+ * alone, or with the <code>Db.DB_GET_BOTH</code> and
+ * <code>Db.DB_SET_RECNO</code> options. The <code>Db.DB_MULTIPLE</code>
+ * flag may not be used when accessing databases made into
+ * secondary indices using the {@link
+ * com.sleepycat.db.Db#associate Db.associate} method.</p>
+ * <p>
+ *
+ * See {@link com.sleepycat.db.DbMultipleDataIterator
+ * DbMultipleDataIterator} for more information.</p> </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RMW Db.DB_RMW}<p>
+ *
+ * Acquire write locks instead of read locks when doing the
+ * retrieval. Setting this flag can eliminate deadlock
+ * during a read-modify-write cycle by acquiring the write
+ * lock during the read part of the cycle so that another
+ * thread of control acquiring a read lock for the same
+ * item, in its own read-modify-write cycle, will not
+ * result in deadlock. <p>
+ *
+ * Because the Db.get method will not hold locks across
+ * Berkeley DB calls in non-transactional operations, the
+ * {@link com.sleepycat.db.Db#DB_RMW <code>Db.DB_RMW</code>
+ * } flag to the Db.get call is meaningful only in the
+ * presence of transactions.</p> </li>
+ * </ul>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param pkey the return key from the
+ * primary database.
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The Db.get method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.get method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.get method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws DbLockNotGrantedException If the Db.DB_CONSUME_WAIT
+ * flag was specified, lock or transaction timers were
+ * configured and the lock could not be granted before the
+ * wait-time expired, the Db.get method will fail and throw a
+ * {@link com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.get method will fail
+ * and throw a IllegalArgumentException exception if a record
+ * number of 0 was specified; the {@link
+ * com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD} flag was
+ * specified to the {@link com.sleepycat.db.Db#open Db.open}
+ * method and none of the {@link
+ * com.sleepycat.db.Db#DB_DBT_MALLOC Db.DB_DBT_MALLOC},
+ * {@link com.sleepycat.db.Db#DB_DBT_REALLOC
+ * Db.DB_DBT_REALLOC} or {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM Db.DB_DBT_USERMEM}
+ * flags were set in the {@link com.sleepycat.db.Dbt Dbt};
+ * the second method signature was called with a {@link
+ * com.sleepycat.db.Db Db} handle that does not refer to a
+ * secondary index; or if an invalid flag value or parameter
+ * was specified.
+ * @throws DbMemoryException If the requested item could
+ * not be returned due to insufficient memory, the Db.get
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Db.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the specified key is
+ * not in the database. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Db.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if the database is a
+ * Queue or Recno database and the specified key exists,
+ * but was never explicitly created by the application or
+ * was later deleted. </li>
+ * </ul>
+ * Unless otherwise specified, the Db.get method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public int get(DbTxn txnid, Dbt key, Dbt pkey, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Db_get__SWIG_1(swigCPtr, DbTxn.getCPtr(txnid), key, pkey, data, flags);
+ }
+
+
+ /**
+ * The Db.put method stores key/data pairs in the database. The
+ * default behavior of the Db.put function is to enter the new
+ * key/data pair, replacing any previously existing key if
+ * duplicates are disallowed, or adding a duplicate data item if
+ * duplicates are allowed. If the database supports duplicates,
+ * the Db.put method adds the new data value at the end of the
+ * duplicate set. If the database supports sorted duplicates, the
+ * new data value is inserted at the correct sorted location.</p>
+ *
+ * @param flags must be set to 0 or one of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_APPEND Db.DB_APPEND}
+ * <p>
+ *
+ * Append the key/data pair to the end of the database. For
+ * the <code>Db.DB_APPEND</code> flag to be specified, the
+ * underlying database must be a Queue or Recno database.
+ * The record number allocated to the record is returned in
+ * the specified <b>key</b> . <p>
+ *
+ * There is a minor behavioral difference between the Recno
+ * and Queue access methods for the <code>Db.DB_APPEND</code>
+ * flag. If a transaction enclosing a Db.put operation with
+ * the <code>Db.DB_APPEND</code> flag aborts, the record
+ * number may be decremented (and later reallocated by a
+ * subsequent <code>Db.DB_APPEND</code> operation) by the
+ * Recno access method, but will not be decremented or
+ * reallocated by the Queue access method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NODUPDATA
+ * Db.DB_NODUPDATA}<p>
+ *
+ * In the case of the Btree and Hash access methods, enter
+ * the new key/data pair only if it does not already appear
+ * in the database. <p>
+ *
+ * The <code>Db.DB_NODUPDATA</code> flag may only be
+ * specified if the underlying database has been configured
+ * to support sorted duplicates. The <code>Db.DB_NODUPDATA</code>
+ * flag may not be specified to the Queue or Recno access
+ * methods.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOOVERWRITE
+ * Db.DB_NOOVERWRITE}<p>
+ *
+ * Enter the new key/data pair only if the key does not
+ * already appear in the database. The Db.put method call
+ * with the <code>Db.DB_NOOVERWRITE</code> flag set will
+ * fail if the key already exists in the database, even if
+ * the database supports duplicates. </li>
+ * </ul>
+ * In addition, the following flag may be set by bitwise
+ * inclusively <b>OR</b> 'ing it into the <b>flags</b>
+ * parameter:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.put call within a transaction. If the
+ * call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. </li>
+ * </ul>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param txnid If the operation is to be
+ * transaction-protected, (other than by specifying the
+ * Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The Db.put method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to modify a read-only database. A
+ * btree exceeded the maximum btree depth (255).
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.put method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.put method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.put method will fail
+ * and throw a IllegalArgumentException exception if a record
+ * number of 0 was specified; an attempt was made to add a
+ * record to a fixed-length database that was too large to
+ * fit; an attempt was made to do a partial put; an attempt
+ * was made to add a record to a secondary index; or if an
+ * invalid flag value or parameter was specified.
+ * @return Unless otherwise specified,
+ * the Db.put method throws an exception that encapsulates a
+ * non-zero error value on failure. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEXIST DB_KEYEXIST}
+ * <p>
+ *
+ * The Db.put method will return {@link
+ * com.sleepycat.db.Db#DB_KEYEXIST <code>Db.DB_KEYEXIST</code>
+ * } if <code>Db.DB_NODUPDATA</code> is set and the
+ * key/data pair already appears in the database. </li>
+ *
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEXIST DB_KEYEXIST}
+ * <p>
+ *
+ * The Db.put method will return {@link
+ * com.sleepycat.db.Db#DB_KEYEXIST <code>Db.DB_KEYEXIST</code>
+ * } if <code>Db.DB_NOOVERWRITE</code> is set and the key
+ * already appears in the database. </li>
+ * </ul>
+ * </p>
+ */
+ public int put(DbTxn txnid, Dbt key, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Db_put(swigCPtr, DbTxn.getCPtr(txnid), key, data, flags);
+ }
+
+
+ void remove0(String file, String database, int flags) {
+ db_javaJNI.Db_remove0(swigCPtr, file, database, flags);
+ }
+
+
+ void rename0(String file, String database, String newname, int flags) {
+ db_javaJNI.Db_rename0(swigCPtr, file, database, newname, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setAppendRecno(DbAppendRecno)}
+ */
+ public void set_append_recno(DbAppendRecno db_append_recno_fcn) throws DbException {
+ setAppendRecno(db_append_recno_fcn);
+ }
+
+
+ public void setAppendRecno(DbAppendRecno db_append_recno_fcn) throws DbException {
+ db_javaJNI.Db_set_append_recno(swigCPtr, (append_recno_handler = db_append_recno_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setBtreeCompare(DbBtreeCompare)}
+ */
+ public void set_bt_compare(DbBtreeCompare bt_compare_fcn) throws DbException {
+ setBtreeCompare(bt_compare_fcn);
+ }
+
+
+ public void setBtreeCompare(DbBtreeCompare bt_compare_fcn) throws DbException {
+ db_javaJNI.Db_set_bt_compare(swigCPtr, (bt_compare_handler = bt_compare_fcn));
+ }
+
+
+ public void set_bt_maxkey(int maxkey) throws DbException {
+ db_javaJNI.Db_set_bt_maxkey(swigCPtr, maxkey);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setBtreeMinKey(int)}
+ */
+ public void set_bt_minkey(int bt_minkey) throws DbException {
+ setBtreeMinKey(bt_minkey);
+ }
+
+
+ /**
+ * Set the minimum number of key/data pairs intended to be stored
+ * on any single Btree leaf page.</p> <p>
+ *
+ * This value is used to determine if key or data items will be
+ * stored on overflow pages instead of Btree leaf pages. For more
+ * information on the specific algorithm used, see <a
+ * href="{@docRoot}/../ref/am_conf/bt_minkey.html">Minimum keys
+ * per page</a> . The <b>bt_minkey</b> value specified must be at
+ * least 2; if <b>bt_minkey</b> is not explicitly set, a value of
+ * 2 is used.</p> <p>
+ *
+ * The Db.setBtreeMinKey method configures a database, not only
+ * operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setBtreeMinKey method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setBtreeMinKey will be ignored. </p> <hr
+ * size=1 noshade> <h3>Description: Db.getBtreeMinKey</h3>
+ *
+ * @param bt_minkey the minimum number of
+ * key/data pairs intended to be stored on any single Btree
+ * leaf page.
+ * @throws IllegalArgumentException The Db.setBtreeMinKey method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setBtreeMinKey(int bt_minkey) throws DbException {
+ db_javaJNI.Db_set_bt_minkey(swigCPtr, bt_minkey);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setBtreePrefix(DbBtreePrefix)}
+ */
+ public void set_bt_prefix(DbBtreePrefix bt_prefix_fcn) throws DbException {
+ setBtreePrefix(bt_prefix_fcn);
+ }
+
+
+ public void setBtreePrefix(DbBtreePrefix bt_prefix_fcn) throws DbException {
+ db_javaJNI.Db_set_bt_prefix(swigCPtr, (bt_prefix_handler = bt_prefix_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setCacheSize(long,int)}
+ */
+ public void set_cachesize(long bytes, int ncache) throws DbException {
+ setCacheSize(bytes, ncache);
+ }
+
+
+ /**
+ * Set the size of the shared memory buffer pool -- that is, the
+ * cache. The cache should be the size of the normal working data
+ * set of the application, with some small amount of additional
+ * memory for unusual situations. (Note: the working set is not
+ * the same as the number of pages accessed simultaneously, and
+ * is usually much larger.)</p> <p>
+ *
+ * The default cache size is 256KB, and may not be specified as
+ * less than 20KB. Any cache size less than 500MB is
+ * automatically increased by 25% to account for buffer pool
+ * overhead; cache sizes larger than 500MB are used as specified.
+ * The current maximum size of a single cache is 4GB. (All sizes
+ * are in powers-of-two, that is, 256KB is 2^32 not 256,000.) For
+ * information on tuning the Berkeley DB cache size, see <a
+ * href="{@docRoot}/../ref/am_conf/cachesize.html">Selecting a
+ * cache size</a> .</p> <p>
+ *
+ * It is possible to specify caches to Berkeley DB larger than
+ * 4GB and/or large enough they cannot be allocated contiguously
+ * on some architectures. For example, some releases of Solaris
+ * limit the amount of memory that may be allocated contiguously
+ * by a process. If <b>ncache</b> is 0 or 1, the cache will be
+ * allocated contiguously in memory. If it is greater than 1, the
+ * cache will be broken up into <b>ncache</b> equally sized,
+ * separate pieces of memory.</p> <p>
+ *
+ * Because databases opened within Berkeley DB environments use
+ * the cache specified to the environment, it is an error to
+ * attempt to set a cache in a database created within an
+ * environment.</p> <p>
+ *
+ * The Db.setCacheSize method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. </p>
+ *
+ * @param bytes The size of the cache in
+ * bytes.
+ * @param ncache the number of caches to
+ * create.
+ * @throws IllegalArgumentException The Db.setCacheSize method
+ * will fail and throw a IllegalArgumentException exception
+ * if the specified cache size was impossibly small; called
+ * in a database environment; the method was called after
+ * {@link com.sleepycat.db.Db#open Db.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setCacheSize(long bytes, int ncache) throws DbException {
+ db_javaJNI.Db_set_cachesize(swigCPtr, bytes, ncache);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setDuplicateCompare(DbDupCompare)}
+ */
+ public void set_dup_compare(DbDupCompare dup_compare_fcn) throws DbException {
+ setDuplicateCompare(dup_compare_fcn);
+ }
+
+
+ public void setDuplicateCompare(DbDupCompare dup_compare_fcn) throws DbException {
+ db_javaJNI.Db_set_dup_compare(swigCPtr, (dup_compare_handler = dup_compare_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setEncrypted(String,int)}
+ */
+ public void set_encrypt(String passwd, int flags) throws DbException {
+ setEncrypted(passwd, flags);
+ }
+
+
+ /**
+ * Set the password used by the Berkeley DB library to perform
+ * encryption and decryption.</p> <p>
+ *
+ * Because databases opened within Berkeley DB environments use
+ * the password specified to the environment, it is an error to
+ * attempt to set a password in a database created within an
+ * environment.</p> <p>
+ *
+ * The Db.setEncrypted method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. </p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ENCRYPT_AES
+ * Db.DB_ENCRYPT_AES}<p>
+ *
+ * Use the Rijndael/AES (also known as the Advanced
+ * Encryption Standard and Federal Information Processing
+ * Standard (FIPS) 197) algorithm for encryption or
+ * decryption. </li>
+ * </ul>
+ *
+ * @param passwd the password used to perform
+ * encryption and decryption.
+ * @throws DbException The Db.setEncrypted method
+ * may fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> Cryptography is not available in this Berkeley DB
+ * release.
+ * @throws IllegalArgumentException The Db.setEncrypted method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setEncrypted(String passwd, int flags) throws DbException {
+ db_javaJNI.Db_set_encrypt(swigCPtr, passwd, flags);
+ }
+
+
+ public void setFeedbackHandler(DbFeedbackHandler db_feedback_fcn) throws DbException {
+ db_javaJNI.Db_setFeedbackHandler(swigCPtr, (db_feedback_handler = db_feedback_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setFlags(int)}
+ */
+ public void set_flags(int flags) throws DbException {
+ setFlags(flags);
+ }
+
+
+ /**
+ * Configure a database. Calling Db.setFlags is additive; there
+ * is no way to clear flags.</p> <p>
+ *
+ * The Db.setFlags method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. </p>
+ *
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values: <h3>General</h3> <p>
+ *
+ * The following flags may be specified for any Berkeley DB
+ * access method:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CHKSUM Db.DB_CHKSUM}
+ * <p>
+ *
+ * Do checksum verification of pages read into the cache
+ * from the backing filestore. Berkeley DB uses the SHA1
+ * Secure Hash Algorithm if encryption is configured and a
+ * general hash algorithm if it is not. <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_CHKSUM</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.Db Db} handle (and any other Berkeley
+ * DB handles opened within the scope of that handle).</p>
+ * <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_CHKSUM flag will be ignored.</p> If creating
+ * additional databases in a file, the checksum behavior
+ * specified must be consistent with the existing databases
+ * in the file or an error will be returned. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ENCRYPT
+ * Db.DB_ENCRYPT}<p>
+ *
+ * Encrypt the database using the cryptographic password
+ * specified to the {@link com.sleepycat.db.DbEnv#setEncrypted
+ * DbEnv.setEncrypted} or {@link
+ * com.sleepycat.db.Db#setEncrypted Db.setEncrypted}
+ * methods. <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_ENCRYPT</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.Db Db} handle (and any other Berkeley
+ * DB handles opened within the scope of that handle).</p>
+ * <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_ENCRYPT flag must be the same as the existing
+ * database or an error will be returned. </p> If creating
+ * additional databases in a file, the encryption behavior
+ * specified must be consistent with the existing databases
+ * in the file or an error will be returned. <p>
+ *
+ * Encrypted databases are not portable between machines of
+ * different byte orders, that is, encrypted databases
+ * created on big-endian machines cannot be read on
+ * little-endian machines, and vice versa.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOT_DURABLE
+ * Db.DB_TXN_NOT_DURABLE}<p>
+ *
+ * If set, Berkeley DB will not write log records for this
+ * database. This means that updates of this database
+ * exhibit the ACI (atomicity, consistency, and isolation)
+ * properties, but not D (durability); that is, database
+ * integrity will be maintained, but if the application or
+ * system fails, integrity will not persist. The database
+ * file must be verified and/or restored from backup after
+ * a failure. In order to ensure integrity after
+ * application shut down, the database handles must be
+ * closed without specifying {@link
+ * com.sleepycat.db.Db#DB_NOSYNC <code>Db.DB_NOSYNC</code>
+ * }, or all database changes must be flushed from the
+ * database environment cache using the {@link
+ * com.sleepycat.db.DbEnv#txnCheckpoint
+ * DbEnv.txnCheckpoint} method. All database handles for a
+ * single physical file must set <code>Db.DB_TXN_NOT_DURABLE</code>
+ * , including database handles for different databases in
+ * a physical file. <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_TXN_NOT_DURABLE</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.Db Db} handle (and any other Berkeley
+ * DB handles opened within the scope of that handle).</p>
+ * </li>
+ * </ul>
+ * <h3>Btree</h3> <p>
+ *
+ * The following flags may be specified for the Btree access
+ * method:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DUP Db.DB_DUP}<p>
+ *
+ * Permit duplicate data items in the database; that is,
+ * insertion when the key of the key/data pair being
+ * inserted already exists in the database will be
+ * successful. The ordering of duplicates in the database
+ * is determined by the order of insertion, unless the
+ * ordering is otherwise specified by use of a cursor
+ * operation. <p>
+ *
+ * The <code>Db.DB_DUPSORT</code> flag is preferred to
+ * <code>Db.DB_DUP</code> for performance reasons. The
+ * <code>Db.DB_DUP</code> flag should only be used by
+ * applications wanting to order duplicate data items
+ * manually.</p> <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_DUP</code> flag
+ * affects the database, including all threads of control
+ * accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the DB_DUP
+ * flag must be the same as the existing database or an
+ * error will be returned. </p> <p>
+ *
+ * It is an error to specify both <code>Db.DB_DUP</code>
+ * and <code>Db.DB_RECNUM</code>.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DUPSORT
+ * Db.DB_DUPSORT}<p>
+ *
+ * Permit duplicate data items in the database; that is,
+ * insertion when the key of the key/data pair being
+ * inserted already exists in the database will be
+ * successful. The ordering of duplicates in the database
+ * is determined by the duplicate comparison function. A
+ * default lexical comparison will be used. It is an error
+ * to specify both <code>Db.DB_DUPSORT</code> and <code>Db.DB_RECNUM</code>
+ * . <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_DUPSORT</code>
+ * flag affects the database, including all threads of
+ * control accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_DUPSORT flag must be the same as the existing
+ * database or an error will be returned. </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RECNUM Db.DB_RECNUM}
+ * <p>
+ *
+ * Support retrieval from the Btree using record numbers.
+ * For more information, see the {@link
+ * com.sleepycat.db.Db#DB_SET_RECNO <code>Db.DB_SET_RECNO</code>
+ * } flag to the {@link com.sleepycat.db.Db#get Db.get} and
+ * {@link com.sleepycat.db.Dbc#get Dbc.get} methods. <p>
+ *
+ * Logical record numbers in Btree databases are mutable in
+ * the face of record insertion or deletion. See the <code>Db.DB_RENUMBER</code>
+ * flag in the Recno access method information for further
+ * discussion.</p> <p>
+ *
+ * Maintaining record counts within a Btree introduces a
+ * serious point of contention, namely the page locations
+ * where the record counts are stored. In addition, the
+ * entire database must be locked during both insertions
+ * and deletions, effectively single-threading the database
+ * for those operations. Specifying <code>Db.DB_RECNUM</code>
+ * can result in serious performance degradation for some
+ * applications and data sets.</p> <p>
+ *
+ * It is an error to specify both <code>Db.DB_DUP</code>
+ * and <code>Db.DB_RECNUM</code>.</p> <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_RECNUM</code>
+ * flag affects the database, including all threads of
+ * control accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_RECNUM flag must be the same as the existing database
+ * or an error will be returned. </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REVSPLITOFF
+ * Db.DB_REVSPLITOFF}<p>
+ *
+ * Turn off reverse splitting in the Btree. As pages are
+ * emptied in a database, the Berkeley DB Btree
+ * implementation attempts to coalesce empty pages into
+ * higher-level pages in order to keep the database as
+ * small as possible and minimize search time. This can
+ * hurt performance in applications with cyclical data
+ * demands; that is, applications where the database grows
+ * and shrinks repeatedly. For example, because Berkeley DB
+ * does page-level locking, the maximum level of
+ * concurrency in a database of two pages is far smaller
+ * than that in a database of 100 pages, so a database that
+ * has shrunk to a minimal size can cause severe
+ * deadlocking when a new cycle of data insertion begins.
+ * <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_REVSPLITOFF</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.Db Db} handle (and any other Berkeley
+ * DB handles opened within the scope of that handle).</p>
+ * </li>
+ * </ul>
+ * <h3>Hash</h3> <p>
+ *
+ * The following flags may be specified for the Hash access
+ * method:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DUP Db.DB_DUP}<p>
+ *
+ * Permit duplicate data items in the database; that is,
+ * insertion when the key of the key/data pair being
+ * inserted already exists in the database will be
+ * successful. The ordering of duplicates in the database
+ * is determined by the order of insertion, unless the
+ * ordering is otherwise specified by use of a cursor
+ * operation. <p>
+ *
+ * The <code>Db.DB_DUPSORT</code> flag is preferred to
+ * <code>Db.DB_DUP</code> for performance reasons. The
+ * <code>Db.DB_DUP</code> flag should only be used by
+ * applications wanting to order duplicate data items
+ * manually.</p> <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_DUP</code> flag
+ * affects the database, including all threads of control
+ * accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the DB_DUP
+ * flag must be the same as the existing database or an
+ * error will be returned. </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DUPSORT
+ * Db.DB_DUPSORT}<p>
+ *
+ * Permit duplicate data items in the database; that is,
+ * insertion when the key of the key/data pair being
+ * inserted already exists in the database will be
+ * successful. The ordering of duplicates in the database
+ * is determined by the duplicate comparison function. A
+ * default lexical comparison will be used. It is an error
+ * to specify both <code>Db.DB_DUPSORT</code> and <code>Db.DB_RECNUM</code>
+ * . <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_DUPSORT</code>
+ * flag affects the database, including all threads of
+ * control accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_DUPSORT flag must be the same as the existing
+ * database or an error will be returned. </p> </li>
+ * </ul>
+ * <h3>Queue</h3> <p>
+ *
+ * There are no additional flags that may be specified for
+ * the Queue access method.</p> <h3>Recno</h3> <p>
+ *
+ * The following flags may be specified for the Recno access
+ * method:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RENUMBER
+ * Db.DB_RENUMBER}<p>
+ *
+ * Specifying the <code>Db.DB_RENUMBER</code> flag causes
+ * the logical record numbers to be mutable, and change as
+ * records are added to and deleted from the database. For
+ * example, the deletion of record number 4 causes records
+ * numbered 5 and greater to be renumbered downward by one.
+ * If a cursor was positioned to record number 4 before the
+ * deletion, it will refer to the new record number 4, if
+ * any such record exists, after the deletion. If a cursor
+ * was positioned after record number 4 before the
+ * deletion, it will be shifted downward one logical
+ * record, continuing to refer to the same record as it did
+ * before. <p>
+ *
+ * Using the {@link com.sleepycat.db.Db#put Db.put} or
+ * {@link com.sleepycat.db.Dbc#put Dbc.put} interfaces to
+ * create new records will cause the creation of multiple
+ * records if the record number is more than one greater
+ * than the largest record currently in the database. For
+ * example, creating record 28, when record 25 was
+ * previously the last record in the database, will create
+ * records 26 and 27 as well as 28. Attempts to retrieve
+ * records that were created in this manner will result in
+ * an error return of <a href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> .</p> <p>
+ *
+ * If a created record is not at the end of the database,
+ * all records following the new record will be
+ * automatically renumbered upward by one. For example, the
+ * creation of a new record numbered 8 causes records
+ * numbered 8 and greater to be renumbered upward by one.
+ * If a cursor was positioned to record number 8 or greater
+ * before the insertion, it will be shifted upward one
+ * logical record, continuing to refer to the same record
+ * as it did before.</p> <p>
+ *
+ * For these reasons, concurrent access to a Recno database
+ * with the <code>Db.DB_RENUMBER</code> flag specified may
+ * be largely meaningless, although it is supported.</p>
+ * <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_RENUMBER</code>
+ * flag affects the database, including all threads of
+ * control accessing the database.</p> <p>
+ *
+ * If the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the
+ * DB_RENUMBER flag must be the same as the existing
+ * database or an error will be returned. </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SNAPSHOT
+ * Db.DB_SNAPSHOT}<p>
+ *
+ * This flag specifies that any specified <b>re_source</b>
+ * file be read in its entirety when {@link
+ * com.sleepycat.db.Db#open Db.open} is called. If this
+ * flag is not specified, the <b>re_source</b> file may be
+ * read lazily. <p>
+ *
+ * Calling Db.setFlags with the <code>Db.DB_SNAPSHOT</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.Db Db} handle (and any other Berkeley
+ * DB handles opened within the scope of that handle).</p>
+ * </li>
+ * </ul>
+ *
+ * @throws IllegalArgumentException The Db.setFlags method will
+ * fail and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setFlags(int flags) throws DbException {
+ db_javaJNI.Db_set_flags(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setHashFillFactor(int)}
+ */
+ public void set_h_ffactor(int h_ffactor) throws DbException {
+ setHashFillFactor(h_ffactor);
+ }
+
+
+ /**
+ * Set the desired density within the hash table. If no value is
+ * specified, the fill factor will be selected dynamically as
+ * pages are filled.</p> <p>
+ *
+ * The Db.setHashFillFactor method configures a database, not
+ * only operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setHashFillFactor method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setHashFillFactor will be ignored. </p> The
+ * density is an approximation of the number of keys allowed to
+ * accumulate in any one bucket, determining when the hash table
+ * grows or shrinks. If you know the average sizes of the keys
+ * and data in your data set, setting the fill factor can enhance
+ * performance. A reasonable rule computing fill factor is to set
+ * it to the following:</p> <blockquote><pre>(pagesize - 32) / (average_key_size + average_data_size + 8)</pre>
+ * </blockquote>
+ *
+ * @param h_ffactor the desired density within
+ * the hash table.
+ * @throws IllegalArgumentException The Db.setHashFillFactor
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setHashFillFactor(int h_ffactor) throws DbException {
+ db_javaJNI.Db_set_h_ffactor(swigCPtr, h_ffactor);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setHash(DbHash)}
+ */
+ public void set_h_hash(DbHash h_hash_fcn) throws DbException {
+ setHash(h_hash_fcn);
+ }
+
+
+ public void setHash(DbHash h_hash_fcn) throws DbException {
+ db_javaJNI.Db_set_h_hash(swigCPtr, (h_hash_handler = h_hash_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setHashNumElements(int)}
+ */
+ public void set_h_nelem(int h_nelem) throws DbException {
+ setHashNumElements(h_nelem);
+ }
+
+
+ /**
+ * Set an estimate of the final size of the hash table.</p> <p>
+ *
+ * In order for the estimate to be used when creating the
+ * database, the {@link com.sleepycat.db.Db#setHashFillFactor
+ * Db.setHashFillFactor} method must also be called. If the
+ * estimate or fill factor are not set or are set too low, hash
+ * tables will still expand gracefully as keys are entered,
+ * although a slight performance degradation may be noticed.</p>
+ * <p>
+ *
+ * The Db.setHashNumElements method configures a database, not
+ * only operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setHashNumElements method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setHashNumElements will be ignored. </p>
+ *
+ * @param h_nelem an estimate of the final
+ * size of the hash table.
+ * @throws IllegalArgumentException The Db.setHashNumElements
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setHashNumElements(int h_nelem) throws DbException {
+ db_javaJNI.Db_set_h_nelem(swigCPtr, h_nelem);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setByteOrder(int)}
+ */
+ public void set_lorder(int lorder) throws DbException {
+ setByteOrder(lorder);
+ }
+
+
+ /**
+ * Set the byte order for integers in the stored database
+ * metadata. The host byte order of the machine where the
+ * Berkeley DB library was compiled will be used if no byte order
+ * is set.</p> <p>
+ *
+ * <b>The access methods provide no guarantees about the byte
+ * ordering of the application data stored in the database, and
+ * applications are responsible for maintaining any necessary
+ * ordering.</b> </p> <p>
+ *
+ * The Db.setByteOrder method configures a database, not only
+ * operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setByteOrder method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. If the
+ * database already exists when {@link com.sleepycat.db.Db#open
+ * Db.open} is called, the information specified to
+ * Db.setByteOrder will be ignored. </p> If creating additional
+ * databases in a single physical file, information specified to
+ * Db.setByteOrder will be ignored and the byte order of the
+ * existing databases will be used.
+ *
+ * @param lorder The <b>lorder</b> parameter
+ * should represent the byte order as an integer; for
+ * example, big endian order is the number 4,321, and little
+ * endian order is the number 1,234.
+ * @throws IllegalArgumentException The Db.setByteOrder method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setByteOrder(int lorder) throws DbException {
+ db_javaJNI.Db_set_lorder(swigCPtr, lorder);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setPageSize(long)}
+ */
+ public void set_pagesize(long pagesize) throws DbException {
+ setPageSize(pagesize);
+ }
+
+
+ /**
+ * Set the size of the pages used to hold items in the database,
+ * in bytes. The minimum page size is 512 bytes, the maximum page
+ * size is 64K bytes, and the page size must be a power-of-two.
+ * If the page size is not explicitly set, one is selected based
+ * on the underlying filesystem I/O block size. The automatically
+ * selected size has a lower limit of 512 bytes and an upper
+ * limit of 16K bytes.</p> <p>
+ *
+ * For information on tuning the Berkeley DB page size, see <a
+ * href="{@docRoot}/../ref/am_conf/pagesize.html">Selecting a
+ * page size</a> .</p> <p>
+ *
+ * The Db.setPageSize method configures a database, not only
+ * operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setPageSize method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. If the
+ * database already exists when {@link com.sleepycat.db.Db#open
+ * Db.open} is called, the information specified to
+ * Db.setPageSize will be ignored. </p> If creating additional
+ * databases in a file, the page size specified must be
+ * consistent with the existing databases in the file or an error
+ * will be returned.
+ *
+ * @param pagesize The <b>pagesize</b>
+ * parameter sets the database page size.
+ * @throws IllegalArgumentException The Db.setPageSize method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setPageSize(long pagesize) throws DbException {
+ db_javaJNI.Db_set_pagesize(swigCPtr, pagesize);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRecordDelimiter(int)}
+ */
+ public void set_re_delim(int re_delim) throws DbException {
+ setRecordDelimiter(re_delim);
+ }
+
+
+ /**
+ * Set the delimiting byte used to mark the end of a record in
+ * the backing source file for the Recno access method.</p> <p>
+ *
+ * This byte is used for variable length records if the <b>
+ * re_source</b> file is specified. If the <b>re_source</b> file
+ * is specified and no delimiting byte was specified,
+ * &lt;newline&gt; characters (that is, ASCII 0x0a) are
+ * interpreted as end-of-record markers.</p> <p>
+ *
+ * The Db.setRecordDelimiter method configures a database, not
+ * only operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setRecordDelimiter method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setRecordDelimiter will be ignored. </p>
+ *
+ * @param re_delim the delimiting byte used to
+ * mark the end of a record.
+ * @throws IllegalArgumentException The Db.setRecordDelimiter
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setRecordDelimiter(int re_delim) throws DbException {
+ db_javaJNI.Db_set_re_delim(swigCPtr, re_delim);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRecordLength(int)}
+ */
+ public void set_re_len(int re_len) throws DbException {
+ setRecordLength(re_len);
+ }
+
+
+ /**
+ * For the Queue access method, specify that the records are of
+ * length <b>re_len</b> . For the Queue access method, the record
+ * length must be enough smaller than the database's page size
+ * that at least one record plus the database page's metadata
+ * information can fit on each database page.</p> <p>
+ *
+ * For the Recno access method, specify that the records are
+ * fixed-length, not byte-delimited, and are of length <b>re_len
+ * </b>.</p> <p>
+ *
+ * Any records added to the database that are less than <b>re_len
+ * </b> bytes long are automatically padded (see {@link
+ * com.sleepycat.db.Db#setRecordPad Db.setRecordPad} for more
+ * information).</p> <p>
+ *
+ * Any attempt to insert records into the database that are
+ * greater than <b>re_len</b> bytes long will cause the call to
+ * fail immediately and return an error.</p> <p>
+ *
+ * The Db.setRecordLength method configures a database, not only
+ * operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setRecordLength method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setRecordLength will be ignored. </p>
+ *
+ * @param re_len the length of a Queue or
+ * Recno database record, in bytes.
+ * @throws IllegalArgumentException The Db.setRecordLength
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setRecordLength(int re_len) throws DbException {
+ db_javaJNI.Db_set_re_len(swigCPtr, re_len);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRecordPad(int)}
+ */
+ public void set_re_pad(int re_pad) throws DbException {
+ setRecordPad(re_pad);
+ }
+
+
+ /**
+ * Set the padding character for short, fixed-length records for
+ * the Queue and Recno access methods.</p> <p>
+ *
+ * If no pad character is specified, &lt;space&gt; characters
+ * (that is, ASCII 0x20) are used for padding.</p> <p>
+ *
+ * The Db.setRecordPad method configures a database, not only
+ * operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setRecordPad method may not be called after the {@link
+ * com.sleepycat.db.Db#open Db.open} method is called. If the
+ * database already exists when {@link com.sleepycat.db.Db#open
+ * Db.open} is called, the information specified to
+ * Db.setRecordPad will be ignored. </p>
+ *
+ * @param re_pad the pad character for
+ * fixed-length records for the Queue and Recno access
+ * methods.
+ * @throws IllegalArgumentException The Db.setRecordPad method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setRecordPad(int re_pad) throws DbException {
+ db_javaJNI.Db_set_re_pad(swigCPtr, re_pad);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRecordSource(String)}
+ */
+ public void set_re_source(String source) throws DbException {
+ setRecordSource(source);
+ }
+
+
+ /**
+ * Set the underlying source file for the Recno access method.
+ * The purpose of the <b>source</b> value is to provide fast
+ * access and modification to databases that are normally stored
+ * as flat text files.</p> <p>
+ *
+ * The <b>source</b> parameter specifies an underlying flat text
+ * database file that is read to initialize a transient record
+ * number index. In the case of variable length records, the
+ * records are separated, as specified by {@link
+ * com.sleepycat.db.Db#setRecordDelimiter Db.setRecordDelimiter}.
+ * For example, standard UNIX byte stream files can be
+ * interpreted as a sequence of variable length records separated
+ * by &lt;newline&gt; characters.</p> <p>
+ *
+ * In addition, when cached data would normally be written back
+ * to the underlying database file (for example, the {@link
+ * com.sleepycat.db.Db#close Db.close} or {@link
+ * com.sleepycat.db.Db#sync Db.sync} methods are called), the
+ * in-memory copy of the database will be written back to the <b>
+ * source</b> file.</p> <p>
+ *
+ * By default, the backing source file is read lazily; that is,
+ * records are not read from the file until they are requested by
+ * the application. <b>If multiple processes (not threads) are
+ * accessing a Recno database concurrently, and are either
+ * inserting or deleting records, the backing source file must be
+ * read in its entirety before more than a single process
+ * accesses the database, and only that process should specify
+ * the backing source file as part of the {@link
+ * com.sleepycat.db.Db#open Db.open} call. See the {@link
+ * com.sleepycat.db.Db#DB_SNAPSHOT Db.DB_SNAPSHOT} flag for more
+ * information.</b> </p> <p>
+ *
+ * <b>Reading and writing the backing source file specified by
+ * <b>source</b> cannot be transaction-protected because it
+ * involves filesystem operations that are not part of the Db
+ * transaction methodology.</b> For this reason, if a temporary
+ * database is used to hold the records, it is possible to lose
+ * the contents of the <b>source</b> file, for example, if the
+ * system crashes at the right instant. If a file is used to hold
+ * the database, normal database recovery on that file can be
+ * used to prevent information loss, although it is still
+ * possible that the contents of <b>source</b> will be lost if
+ * the system crashes.</p> <p>
+ *
+ * The <b>source</b> file must already exist (but may be
+ * zero-length) when {@link com.sleepycat.db.Db#open Db.open} is
+ * called.</p> <p>
+ *
+ * It is not an error to specify a read-only <b>source</b> file
+ * when creating a database, nor is it an error to modify the
+ * resulting database. However, any attempt to write the changes
+ * to the backing source file using either the {@link
+ * com.sleepycat.db.Db#sync Db.sync} or {@link
+ * com.sleepycat.db.Db#close Db.close} methods will fail, of
+ * course. Specify the {@link com.sleepycat.db.Db#DB_NOSYNC
+ * Db.DB_NOSYNC} flag to the {@link com.sleepycat.db.Db#close
+ * Db.close} method to stop it from attempting to write the
+ * changes to the backing file; instead, they will be silently
+ * discarded.</p> <p>
+ *
+ * For all of the previous reasons, the <b>source</b> field is
+ * generally used to specify databases that are read-only for
+ * Berkeley DB applications; and that are either generated on the
+ * fly by software tools or modified using a different mechanism
+ * -- for example, a text editor.</p> <p>
+ *
+ * The Db.setRecordSource method configures operations performed
+ * using the specified {@link com.sleepycat.db.Db Db} handle, not
+ * all operations performed on the underlying database.</p> <p>
+ *
+ * The Db.setRecordSource method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setRecordSource must be the same as that
+ * historically used to create the database or corruption can
+ * occur.</p>
+ *
+ * @param source The backing flat text
+ * database file for a Recno database.
+ * @throws IllegalArgumentException The Db.setRecordSource
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setRecordSource(String source) throws DbException {
+ db_javaJNI.Db_set_re_source(swigCPtr, source);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setQueueExtentSize(int)}
+ */
+ public void set_q_extentsize(int extentsize) throws DbException {
+ setQueueExtentSize(extentsize);
+ }
+
+
+ /**
+ * Set the size of the extents used to hold pages in a Queue
+ * database, specified as a number of pages. Each extent is
+ * created as a separate physical file. If no extent size is set,
+ * the default behavior is to create only a single underlying
+ * database file.</p> <p>
+ *
+ * For information on tuning the extent size, see <a
+ * href="{@docRoot}/../ref/am_conf/extentsize.html">Selecting a
+ * extent size</a> .</p> <p>
+ *
+ * The Db.setQueueExtentSize method configures a database, not
+ * only operations performed using the specified {@link
+ * com.sleepycat.db.Db Db} handle.</p> <p>
+ *
+ * The Db.setQueueExtentSize method may not be called after the
+ * {@link com.sleepycat.db.Db#open Db.open} method is called. If
+ * the database already exists when {@link
+ * com.sleepycat.db.Db#open Db.open} is called, the information
+ * specified to Db.setQueueExtentSize will be ignored. </p>
+ *
+ * @param extentsize the number of pages in a
+ * Queue database extent.
+ * @throws IllegalArgumentException The Db.setQueueExtentSize
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.Db#open Db.open} was called; or if an
+ * invalid flag value or parameter was specified.
+ */
+ public void setQueueExtentSize(int extentsize) throws DbException {
+ db_javaJNI.Db_set_q_extentsize(swigCPtr, extentsize);
+ }
+
+
+ /**
+ * The Db.stat method creates a statistical structure and fills
+ * it with statistics for the database.</p> <p>
+ *
+ * If the Db.DB_FAST_STAT flag has not been specified, the
+ * Db.stat method will access some of or all the pages in the
+ * database, incurring a severe performance penalty as well as
+ * possibly flushing the underlying buffer pool.</p> <p>
+ *
+ * In the presence of multiple threads or processes accessing an
+ * active database, the information returned by Db.stat may be
+ * out-of-date.</p> <p>
+ *
+ * If the database was not opened read-only and the
+ * Db.DB_FAST_STAT flag was not specified, the cached key and
+ * record numbers will be updated after the statistical
+ * information has been gathered.</p> <p>
+ *
+ * The Db.stat method cannot be transaction-protected. For this
+ * reason, it should be called in a thread of control that has no
+ * open cursors or active transactions.</p> <h3>Hash Statistics
+ * </h3> <p>
+ *
+ * In the case of a Hash database, the statistics are returned in
+ * an instance of DbHashStat. The data fields are available from
+ * DbHashStat: </p> <h3>Btree and Recno Statistics</h3> <p>
+ *
+ * In the case of a Btree or Recno database, the statistics are
+ * returned in an instance of DbBtreeStat. The data fields are
+ * available from DbBtreeStat: </p> <h3>Queue Statistics</h3> <p>
+ *
+ * In the case of a Queue database, the statistics are returned
+ * in an instance of DbQueueStat. The data fields are available
+ * from DbQueueStat: </p> For convenience, the DbBtreeStat,
+ * DbHashStat and DbQueueStat classes have a toString method that
+ * lists all their data fields.</p>
+ *
+ * @param flags must be set to 0 or one of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FAST_STAT
+ * Db.DB_FAST_STAT}<p>
+ *
+ * Return only the values which do not require traversal of
+ * the database. <p>
+ *
+ * Among other things, this flag makes it possible for
+ * applications to request key and record counts without
+ * incurring the performance penalty of traversing the
+ * entire database. If the underlying database is of type
+ * Recno, or of type Btree and the database was created
+ * with the {@link com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>
+ * } flag, the count of keys will be exact. Otherwise, the
+ * count of keys will be the value saved the last time the
+ * database was traversed, or 0 if no count of keys has
+ * ever been made. If the underlying database is of type
+ * Recno, the count of data items will be exact, otherwise,
+ * the count of data items will be the value saved the last
+ * time the database was traversed, or 0 if no count of
+ * data items has ever been done.</p> </li>
+ * </ul>
+ *
+ * @throws DbException The Db.stat method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Db.stat method will fail
+ * and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ * @return In the case of a Hash
+ * database, the statistics are returned in an instance of
+ * DbHashStat. In the case of a Btree or Recno database, the
+ * statistics are returned in an instance of DbBtreeStat. In
+ * the case of a Queue database, the statistics are returned
+ * in an instance of DbQueueStat.</p>
+ */
+ public Object stat(int flags) throws DbException {
+ return db_javaJNI.Db_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * The Db.sync method flushes any cached information to disk.</p>
+ * <p>
+ *
+ * If the database is in memory only, the Db.sync method has no
+ * effect and will always succeed.</p> <p>
+ *
+ * <b>It is important to understand that flushing cached
+ * information to disk only minimizes the window of opportunity
+ * for corrupted data.</b> Although unlikely, it is possible for
+ * database corruption to happen if a system or application crash
+ * occurs while writing data to the database. To ensure that
+ * database corruption never occurs, applications must either:
+ * use transactions and logging with automatic recovery; use
+ * logging and application-specific recovery; or edit a copy of
+ * the database, and once all applications using the database
+ * have successfully called {@link com.sleepycat.db.Db#close
+ * Db.close}, atomically replace the original database with the
+ * updated copy.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws DbException The Db.sync method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Db.sync method will fail
+ * and throw a IllegalArgumentException exception if an
+ * invalid flag value or parameter was specified.
+ */
+ public void sync(int flags) throws DbException {
+ db_javaJNI.Db_sync(swigCPtr, flags);
+ }
+
+
+ /**
+ * The Db.truncate method empties the database, discarding all
+ * records it contains. The number of records discarded from the
+ * database is returned.</p> <p>
+ *
+ * It is an error to call the Db.truncate method on a database
+ * with open cursors.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the Db.truncate call within a transaction. If
+ * the call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. </li>
+ * </ul>
+ *
+ * @param txnid If the operation is to be
+ * transaction-protected, (other than by specifying the
+ * Db.DB_AUTO_COMMIT flag), the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Db.truncate method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Db.truncate method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Db.truncate method will
+ * fail and throw a IllegalArgumentException exception if
+ * there are open cursors in the database; or if an invalid
+ * flag value or parameter was specified.
+ * @return The Db.truncate method
+ * returns the number of records discarded from the database.
+ * </p>
+ */
+ public int truncate(DbTxn txnid, int flags) throws DbException {
+ return db_javaJNI.Db_truncate(swigCPtr, DbTxn.getCPtr(txnid), flags);
+ }
+
+
+ /**
+ * The Db.upgrade method upgrades all of the databases included
+ * in the file <b>file</b> , if necessary. If no upgrade is
+ * necessary, Db.upgrade always returns success.</p> <p>
+ *
+ * <b>Database upgrades are done in place and are destructive.
+ * For example, if pages need to be allocated and no disk space
+ * is available, the database may be left corrupted. Backups
+ * should be made before databases are upgraded. See <a
+ * href="{@docRoot}/../ref/am/upgrade.html">Upgrading databases
+ * </a> for more information.</b> </p> <p>
+ *
+ * Unlike all other database operations, Db.upgrade may only be
+ * done on a system with the same byte-order as the database.</p>
+ * <h3>Environment Variables</h3> <p>
+ *
+ * If the database was opened within a database environment, the
+ * environment variable <b>DB_HOME</b> may be used as the path of
+ * the database environment home.</p> <p>
+ *
+ * Db.upgrade is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param file the physical file containing
+ * the databases to be upgraded.
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DUPSORT
+ * Db.DB_DUPSORT}<p>
+ *
+ * <b>This flag is only meaningful when upgrading databases
+ * from releases before the Berkeley DB 3.1 release.</b>
+ * <p>
+ *
+ * As part of the upgrade from the Berkeley DB 3.0 release
+ * to the 3.1 release, the on-disk format of duplicate data
+ * items changed. To correctly upgrade the format requires
+ * applications to specify whether duplicate data items in
+ * the database are sorted or not. Specifying the <code>Db.DB_DUPSORT</code>
+ * flag informs Db.upgrade that the duplicates are sorted;
+ * otherwise they are assumed to be unsorted. Incorrectly
+ * specifying the value of this flag may lead to database
+ * corruption.</p> <p>
+ *
+ * Further, because the Db.upgrade method upgrades a
+ * physical file (including all the databases it contains),
+ * it is not possible to use Db.upgrade to upgrade files in
+ * which some of the databases it includes have sorted
+ * duplicate data items, and some of the databases it
+ * includes have unsorted duplicate data items. If the file
+ * does not have more than a single database, if the
+ * databases do not support duplicate data items, or if all
+ * of the databases that support duplicate data items
+ * support the same style of duplicates (either sorted or
+ * unsorted), Db.upgrade will work correctly as long as the
+ * <code>Db.DB_DUPSORT</code> flag is correctly specified.
+ * Otherwise, the file cannot be upgraded using Db.upgrade;
+ * it must be upgraded manually by dumping and reloading
+ * the databases.</p> </li>
+ * </ul>
+ *
+ * @throws DbException The Db.upgrade method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> The database cannot be upgraded by this version of
+ * the Berkeley DB software.
+ * @throws IllegalArgumentException The Db.upgrade method will
+ * fail and throw a IllegalArgumentException exception if the
+ * database is not in the same byte-order as the system; or
+ * if an invalid flag value or parameter was specified.
+ */
+ public void upgrade(String file, int flags) throws DbException {
+ db_javaJNI.Db_upgrade(swigCPtr, file, flags);
+ }
+
+
+ void verify0(String file, String database, java.io.OutputStream outfile, int flags) {
+ db_javaJNI.Db_verify0(swigCPtr, file, database, outfile, flags);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbAppDispatch.java b/db/java/src/com/sleepycat/db/DbAppDispatch.java
index 2b9116dbc..48770307f 100644
--- a/db/java/src/com/sleepycat/db/DbAppDispatch.java
+++ b/db/java/src/com/sleepycat/db/DbAppDispatch.java
@@ -1,22 +1,44 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbAppDispatch.java,v 11.6 2002/02/26 16:23:02 krinsky Exp
+ * $Id: DbAppDispatch.java,v 1.2 2003/12/15 21:44:12 jbj Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_app_dispatch()
- *
+/**
+ * An interface specifying a recovery function, which recovers
+ * application-specific actions.</p>
*/
-public interface DbAppDispatch
-{
- // The value of recops is one of the Db.DB_TXN_* constants
- public abstract int app_dispatch(DbEnv env, Dbt dbt, DbLsn lsn, int recops);
+public interface DbAppDispatch {
+ /**
+ * The DbAppDispatch interface is used by the
+ * DbEnv.setAppDispatch method. This interface defines the
+ * application-specific function to be called during transaction
+ * abort and recovery.</p> The Db.DB_TXN_FORWARD_ROLL and
+ * Db.DB_TXN_APPLY operations frequently imply the same actions,
+ * redoing changes that appear in the log record, although if a
+ * recovery function is to be used on a replication client where
+ * reads may be taking place concurrently with the processing of
+ * incoming messages, Db.DB_TXN_APPLY operations should also
+ * perform appropriate locking. The macro DB_REDO(op) checks that
+ * the operation is one of Db.DB_TXN_FORWARD_ROLL or
+ * Db.DB_TXN_APPLY, and should be used in the recovery code to
+ * refer to the conditions under which operations should be
+ * redone. Similarly, the macro DB_UNDO(op) checks if the
+ * operation is one of Db.DB_TXN_BACKWARD_ROLL or
+ * Db.DB_TXN_ABORT.</p> </p>
+ *
+ * @param dbenv the enclosing database environment handle.
+ * @param log_rec a log record.
+ * @param lsn a log sequence number.
+ * @param op one of the following values:
+ * @return The function must return 0 on success and
+ * either <b>errno</b> or a value outside of the Berkeley DB
+ * error name space on failure.</p>
+ */
+ public abstract int appDispatch(DbEnv dbenv, Dbt log_rec, DbLsn lsn, int op);
}
-
-// end of DbAppDispatch.java
diff --git a/db/java/src/com/sleepycat/db/DbAppendRecno.java b/db/java/src/com/sleepycat/db/DbAppendRecno.java
index ffe40e95f..4b356a3e6 100644
--- a/db/java/src/com/sleepycat/db/DbAppendRecno.java
+++ b/db/java/src/com/sleepycat/db/DbAppendRecno.java
@@ -1,22 +1,31 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbAppendRecno.java,v 11.1 2000/07/31 20:28:30 dda Exp $
+ * $Id: DbAppendRecno.java,v 11.22 2003/11/28 18:35:40 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by Db.set_append_recno()
- *
+/**
+ * An interface specifying a callback function that modifies stored
+ * data based on a generated key.</p>
*/
-public interface DbAppendRecno
-{
- public abstract void db_append_recno(Db db, Dbt data, int recno)
- throws DbException;
+public interface DbAppendRecno {
+ /**
+ * The DbAppendRecno interface is used by the Db.setAppendRecno
+ * method.</p> The called function may modify the data {@link
+ * com.sleepycat.db.Dbt Dbt}. </p>
+ *
+ * @param db the enclosing database handle.
+ * @param data the data {@link com.sleepycat.db.Dbt Dbt}
+ * to be stored.
+ * @param recno the generated record number.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public abstract void dbAppendRecno(Db db, Dbt data, int recno)
+ throws DbException;
}
-
-// end of DbAppendRecno.java
diff --git a/db/java/src/com/sleepycat/db/DbBtreeCompare.java b/db/java/src/com/sleepycat/db/DbBtreeCompare.java
index 2e5306af2..dc735f19f 100644
--- a/db/java/src/com/sleepycat/db/DbBtreeCompare.java
+++ b/db/java/src/com/sleepycat/db/DbBtreeCompare.java
@@ -1,21 +1,45 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbBtreeCompare.java,v 11.2 2000/07/04 20:53:19 dda Exp $
+ * $Id: DbBtreeCompare.java,v 11.29 2003/12/03 21:28:08 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_bt_compare()
- *
+/**
+ * An interface specifying a comparison function, which imposes a
+ * total ordering on the keys in a Btree database.</p>
*/
-public interface DbBtreeCompare
-{
- public abstract int bt_compare(Db db, Dbt dbt1, Dbt dbt2);
+public interface DbBtreeCompare {
+ /**
+ * The DbBtreeCompare interface is used by the Db.setBtreeCompare
+ * method.</p> </p>
+ *
+ * @param db the enclosing database handle.
+ * @param dbt1 the {@link com.sleepycat.db.Dbt Dbt} representing
+ * the application supplied key.
+ * @param dbt2 the {@link com.sleepycat.db.Dbt Dbt} representing
+ * the current tree's key.
+ * @return The <b>bt_compare_fcn</b> function must return an
+ * integer value less than, equal to, or greater than zero if
+ * the first key parameter is considered to be respectively
+ * less than, equal to, or greater than the second key
+ * parameter. In addition, the comparison function must cause
+ * the keys in the database to be <i>well-ordered</i> . The
+ * comparison function must correctly handle any key values
+ * used by the application (possibly including zero-length
+ * keys). In addition, when Btree key prefix comparison is
+ * being performed (see {@link com.sleepycat.db.Db#setBtreePrefix
+ * Db.setBtreePrefix} for more information), the comparison
+ * routine may be passed a prefix of any database key. The
+ * <b>data</b> and <b>size</b> fields of the {@link
+ * com.sleepycat.db.Dbt Dbt} are the only fields that may be
+ * used for the purposes of this comparison, and no
+ * particular alignment of the memory to which by the <b>data
+ * </b> field refers may be assumed.</p>
+ */
+ public abstract int compare(Db db, Dbt dbt1, Dbt dbt2);
}
-
-// end of DbBtreeCompare.java
diff --git a/db/java/src/com/sleepycat/db/DbBtreePrefix.java b/db/java/src/com/sleepycat/db/DbBtreePrefix.java
index 27e630543..d76cee74c 100644
--- a/db/java/src/com/sleepycat/db/DbBtreePrefix.java
+++ b/db/java/src/com/sleepycat/db/DbBtreePrefix.java
@@ -1,21 +1,41 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbBtreePrefix.java,v 11.2 2000/07/04 20:53:19 dda Exp $
+ * $Id: DbBtreePrefix.java,v 11.30 2003/12/03 21:28:08 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_bt_prefix()
- *
+/**
+ * An interface specifying a comparison function, which specifies the
+ * number of bytes needed to differentiate Btree keys.</p>
*/
-public interface DbBtreePrefix
-{
- public abstract int bt_prefix(Db db, Dbt dbt1, Dbt dbt2);
+public interface DbBtreePrefix {
+ /**
+ * The DbBtreePrefix interface is used by the Db.setBtreePrefix
+ * method.</p> </p>
+ *
+ * @param db the enclosing database handle.
+ * @param dbt1 a {@link com.sleepycat.db.Dbt Dbt} representing a
+ * database key.
+ * @param dbt2 a {@link com.sleepycat.db.Dbt Dbt} representing a
+ * database key.
+ * @return The <b>bt_prefix_fcn</b> function must return the
+ * number of bytes of the second key parameter that would be
+ * required by the Btree key comparison function to determine
+ * the second key parameter's ordering relationship with
+ * respect to the first key parameter. If the two keys are
+ * equal, the key length should be returned. The prefix
+ * function must correctly handle any key values used by the
+ * application (possibly including zero-length keys). The <b>
+ * data</b> and <b>size</b> fields of the {@link
+ * com.sleepycat.db.Dbt Dbt} are the only fields that may be
+ * used for the purposes of this determination, and no
+ * particular alignment of the memory to which the <b>data
+ * </b> field refers may be assumed.</p>
+ */
+ public abstract int prefix(Db db, Dbt dbt1, Dbt dbt2);
}
-
-// end of DbBtreePrefix.java
diff --git a/db/java/src/com/sleepycat/db/DbBtreeStat.java b/db/java/src/com/sleepycat/db/DbBtreeStat.java
index 8dea8da10..6449c823d 100644
--- a/db/java/src/com/sleepycat/db/DbBtreeStat.java
+++ b/db/java/src/com/sleepycat/db/DbBtreeStat.java
@@ -1,40 +1,174 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbBtreeStat.java,v 11.5 2000/05/04 02:54:55 dda Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * Db.stat() method.
+/**
+ * The DbBtreeStat object is used to return Btree or Recno database
+ * statistics.</p>
*/
-public class DbBtreeStat
-{
- public int bt_magic; // Magic number.
- public int bt_version; // Version number.
- public int bt_metaflags; // Meta-data flags.
- public int bt_nkeys; // Number of unique keys.
- public int bt_ndata; // Number of data items.
- public int bt_pagesize; // Page size.
- public int bt_maxkey; // Maxkey value.
- public int bt_minkey; // Minkey value.
- public int bt_re_len; // Fixed-length record length.
- public int bt_re_pad; // Fixed-length record pad.
- public int bt_levels; // Tree levels.
- public int bt_int_pg; // Internal pages.
- public int bt_leaf_pg; // Leaf pages.
- public int bt_dup_pg; // Duplicate pages.
- public int bt_over_pg; // Overflow pages.
- public int bt_free; // Pages on the free list.
- public int bt_int_pgfree; // Bytes free in internal pages.
- public int bt_leaf_pgfree; // Bytes free in leaf pages.
- public int bt_dup_pgfree; // Bytes free in duplicate pages.
- public int bt_over_pgfree; // Bytes free in overflow pages.
-}
+public class DbBtreeStat {
+ /**
+ * Magic number that identifies the file as a Btree database.
+ * Returned if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_magic;
+ /**
+ * The version of the Btree database. Returned if Db.DB_FAST_STAT
+ * is set.
+ *</ul>
+ *
+ */
+ public int bt_version;
+ public int bt_metaflags;
+ /**
+ * For the Btree Access Method, the number of unique keys in the
+ * database. If Db.DB_FAST_STAT was specified and the database
+ * was created with the {@link com.sleepycat.db.Db#DB_RECNUM
+ * Db.DB_RECNUM} flag, the count will be exact, otherwise, the
+ * count will be the last saved value unless it has never been
+ * calculated, in which case it will be 0. For the Recno Access
+ * Method, the exact number of records in the database. Returned
+ * if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_nkeys;
+ /**
+ * For the Btree Access Method, the number of key/data pairs in
+ * the database. If Db.DB_FAST_STAT was specified the count will
+ * be the last saved value unless it has never been calculated,
+ * in which case it will be 0. For the Recno Access Method, the
+ * exact number of records in the database. If the database has
+ * been configured to not renumber records during deletion, the
+ * count of records will only reflect undeleted records. Returned
+ * if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_ndata;
+ /**
+ * Underlying database page size, in bytes. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_pagesize;
+ public int bt_maxkey;
+ /**
+ * The minimum keys per page. Returned if Db.DB_FAST_STAT is set.
+ *
+ *</ul>
+ *
+ */
+ public int bt_minkey;
+ /**
+ * The length of fixed-length records. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_re_len;
+ /**
+ * The padding byte value for fixed-length records. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int bt_re_pad;
+ /**
+ * Number of levels in the database.
+ *</ul>
+ *
+ */
+ public int bt_levels;
+ /**
+ * Number of database internal pages.
+ *</ul>
+ *
+ */
+ public int bt_int_pg;
+ /**
+ * Number of database leaf pages.
+ *</ul>
+ *
+ */
+ public int bt_leaf_pg;
+ /**
+ * Number of database duplicate pages.
+ *</ul>
+ *
+ */
+ public int bt_dup_pg;
+ /**
+ * Number of database overflow pages.
+ *</ul>
+ *
+ */
+ public int bt_over_pg;
+ /**
+ * Number of pages on the free list.
+ *</ul>
+ *
+ */
+ public int bt_free;
+ /**
+ * Number of bytes free in database internal pages.
+ *</ul>
+ *
+ */
+ public int bt_int_pgfree;
+ /**
+ * Number of bytes free in database leaf pages.
+ *</ul>
+ *
+ */
+ public int bt_leaf_pgfree;
+ /**
+ * Number of bytes free in database duplicate pages.
+ *</ul>
+ *
+ */
+ public int bt_dup_pgfree;
+ /**
+ * Number of bytes free in database overflow pages.
+ *</ul>
+ *
+ */
+ public int bt_over_pgfree;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbBtreeStat:"
+ + "\n bt_magic=" + bt_magic
+ + "\n bt_version=" + bt_version
+ + "\n bt_metaflags=" + bt_metaflags
+ + "\n bt_nkeys=" + bt_nkeys
+ + "\n bt_ndata=" + bt_ndata
+ + "\n bt_pagesize=" + bt_pagesize
+ + "\n bt_maxkey=" + bt_maxkey
+ + "\n bt_minkey=" + bt_minkey
+ + "\n bt_re_len=" + bt_re_len
+ + "\n bt_re_pad=" + bt_re_pad
+ + "\n bt_levels=" + bt_levels
+ + "\n bt_int_pg=" + bt_int_pg
+ + "\n bt_leaf_pg=" + bt_leaf_pg
+ + "\n bt_dup_pg=" + bt_dup_pg
+ + "\n bt_over_pg=" + bt_over_pg
+ + "\n bt_free=" + bt_free
+ + "\n bt_int_pgfree=" + bt_int_pgfree
+ + "\n bt_leaf_pgfree=" + bt_leaf_pgfree
+ + "\n bt_dup_pgfree=" + bt_dup_pgfree
+ + "\n bt_over_pgfree=" + bt_over_pgfree
+ ;
+ }
+}
// end of DbBtreeStat.java
diff --git a/db/java/src/com/sleepycat/db/DbClient.java b/db/java/src/com/sleepycat/db/DbClient.java
index 36b3f1552..b27288ffd 100644
--- a/db/java/src/com/sleepycat/db/DbClient.java
+++ b/db/java/src/com/sleepycat/db/DbClient.java
@@ -1,21 +1,17 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbClient.java,v 11.1 2001/05/01 02:35:52 dda Exp
+ * $Id: DbClient.java,v 11.14 2003/11/28 18:35:41 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_rpc_server().
- * It is a placeholder for a future capability.
- *
+/**
+ * The DbClient object is used to encapsulate a reference to an RPC
+ * client.</p>
*/
-public interface DbClient
-{
+public interface DbClient {
}
-
-// end of DbClient.java
diff --git a/db/java/src/com/sleepycat/db/DbConstants.java b/db/java/src/com/sleepycat/db/DbConstants.java
deleted file mode 100644
index 491b1fce2..000000000
--- a/db/java/src/com/sleepycat/db/DbConstants.java
+++ /dev/null
@@ -1,217 +0,0 @@
-// DO NOT EDIT: automatically built by dist/s_java.
-
-package com.sleepycat.db;
-
-public class DbConstants
-{
- public static final int DB_MAX_PAGES = 0xffffffff;
- public static final int DB_MAX_RECORDS = 0xffffffff;
- public static final int DB_DBT_ISSET = 0x001;
- public static final int DB_DBT_MALLOC = 0x002;
- public static final int DB_DBT_PARTIAL = 0x004;
- public static final int DB_DBT_REALLOC = 0x008;
- public static final int DB_DBT_USERMEM = 0x010;
- public static final int DB_DBT_DUPOK = 0x020;
- public static final int DB_CREATE = 0x000001;
- public static final int DB_CXX_NO_EXCEPTIONS = 0x000002;
- public static final int DB_FORCE = 0x000004;
- public static final int DB_NOMMAP = 0x000008;
- public static final int DB_RDONLY = 0x000010;
- public static final int DB_RECOVER = 0x000020;
- public static final int DB_THREAD = 0x000040;
- public static final int DB_TXN_NOSYNC = 0x000080;
- public static final int DB_USE_ENVIRON = 0x000100;
- public static final int DB_USE_ENVIRON_ROOT = 0x000200;
- public static final int DB_CLIENT = 0x000400;
- public static final int DB_XA_CREATE = 0x000400;
- public static final int DB_INIT_CDB = 0x000400;
- public static final int DB_INIT_LOCK = 0x000800;
- public static final int DB_INIT_LOG = 0x001000;
- public static final int DB_INIT_MPOOL = 0x002000;
- public static final int DB_INIT_TXN = 0x004000;
- public static final int DB_JOINENV = 0x008000;
- public static final int DB_LOCKDOWN = 0x010000;
- public static final int DB_PRIVATE = 0x020000;
- public static final int DB_RECOVER_FATAL = 0x040000;
- public static final int DB_SYSTEM_MEM = 0x080000;
- public static final int DB_EXCL = 0x000400;
- public static final int DB_FCNTL_LOCKING = 0x000800;
- public static final int DB_ODDFILESIZE = 0x001000;
- public static final int DB_RDWRMASTER = 0x002000;
- public static final int DB_TRUNCATE = 0x004000;
- public static final int DB_EXTENT = 0x008000;
- public static final int DB_TXN_NOWAIT = 0x000400;
- public static final int DB_TXN_SYNC = 0x000800;
- public static final int DB_CDB_ALLDB = 0x000400;
- public static final int DB_UPGRADE = 0x000400;
- public static final int DB_VERIFY = 0x000800;
- public static final int DB_DUP = 0x0001;
- public static final int DB_DUPSORT = 0x0002;
- public static final int DB_RECNUM = 0x0004;
- public static final int DB_RENUMBER = 0x0008;
- public static final int DB_REVSPLITOFF = 0x0010;
- public static final int DB_SNAPSHOT = 0x0020;
- public static final int DB_JOIN_NOSORT = 0x0001;
- public static final int DB_AGGRESSIVE = 0x0001;
- public static final int DB_NOORDERCHK = 0x0002;
- public static final int DB_ORDERCHKONLY = 0x0004;
- public static final int DB_PR_PAGE = 0x0008;
- public static final int DB_PR_HEADERS = 0x0010;
- public static final int DB_PR_RECOVERYTEST = 0x0020;
- public static final int DB_SALVAGE = 0x0040;
- public static final int DB_VRFY_FLAGMASK = 0xffff;
- public static final int DB_LOCK_NORUN = 0;
- public static final int DB_LOCK_DEFAULT = 1;
- public static final int DB_LOCK_OLDEST = 2;
- public static final int DB_LOCK_RANDOM = 3;
- public static final int DB_LOCK_YOUNGEST = 4;
- public static final int DB_REGION_MAGIC = 0x120897;
- public static final int DB_VERB_CHKPOINT = 0x0001;
- public static final int DB_VERB_DEADLOCK = 0x0002;
- public static final int DB_VERB_RECOVERY = 0x0004;
- public static final int DB_VERB_WAITSFOR = 0x0008;
- public static final int DB_TEST_PREOPEN = 1;
- public static final int DB_TEST_POSTOPEN = 2;
- public static final int DB_TEST_POSTLOGMETA = 3;
- public static final int DB_TEST_POSTLOG = 4;
- public static final int DB_TEST_POSTSYNC = 5;
- public static final int DB_TEST_PRERENAME = 6;
- public static final int DB_TEST_POSTRENAME = 7;
- public static final int DB_ENV_CDB = 0x00001;
- public static final int DB_ENV_CDB_ALLDB = 0x00002;
- public static final int DB_ENV_CREATE = 0x00004;
- public static final int DB_ENV_DBLOCAL = 0x00008;
- public static final int DB_ENV_LOCKDOWN = 0x00010;
- public static final int DB_ENV_NOMMAP = 0x00020;
- public static final int DB_ENV_OPEN_CALLED = 0x00040;
- public static final int DB_ENV_PRIVATE = 0x00080;
- public static final int DB_ENV_RPCCLIENT = 0x00100;
- public static final int DB_ENV_STANDALONE = 0x00200;
- public static final int DB_ENV_SYSTEM_MEM = 0x00400;
- public static final int DB_ENV_THREAD = 0x00800;
- public static final int DB_ENV_TXN_NOSYNC = 0x01000;
- public static final int DB_ENV_USER_ALLOC = 0x02000;
- public static final int DB_BTREEVERSION = 8;
- public static final int DB_BTREEOLDVER = 6;
- public static final int DB_BTREEMAGIC = 0x053162;
- public static final int DB_HASHVERSION = 7;
- public static final int DB_HASHOLDVER = 4;
- public static final int DB_HASHMAGIC = 0x061561;
- public static final int DB_QAMVERSION = 3;
- public static final int DB_QAMOLDVER = 1;
- public static final int DB_QAMMAGIC = 0x042253;
- public static final int DB_LOGVERSION = 3;
- public static final int DB_LOGOLDVER = 3;
- public static final int DB_LOGMAGIC = 0x040988;
- public static final int DB_AFTER = 1;
- public static final int DB_APPEND = 2;
- public static final int DB_BEFORE = 3;
- public static final int DB_CACHED_COUNTS = 4;
- public static final int DB_CHECKPOINT = 5;
- public static final int DB_CONSUME = 6;
- public static final int DB_CONSUME_WAIT = 7;
- public static final int DB_CURLSN = 8;
- public static final int DB_CURRENT = 9;
- public static final int DB_FIRST = 10;
- public static final int DB_FLUSH = 11;
- public static final int DB_GET_BOTH = 12;
- public static final int DB_GET_BOTHC = 13;
- public static final int DB_GET_RECNO = 14;
- public static final int DB_JOIN_ITEM = 15;
- public static final int DB_KEYFIRST = 16;
- public static final int DB_KEYLAST = 17;
- public static final int DB_LAST = 18;
- public static final int DB_NEXT = 19;
- public static final int DB_NEXT_DUP = 20;
- public static final int DB_NEXT_NODUP = 21;
- public static final int DB_NODUPDATA = 22;
- public static final int DB_NOOVERWRITE = 23;
- public static final int DB_NOSYNC = 24;
- public static final int DB_POSITION = 25;
- public static final int DB_POSITIONI = 26;
- public static final int DB_PREV = 27;
- public static final int DB_PREV_NODUP = 28;
- public static final int DB_RECORDCOUNT = 29;
- public static final int DB_SET = 30;
- public static final int DB_SET_RANGE = 31;
- public static final int DB_SET_RECNO = 32;
- public static final int DB_WRITECURSOR = 33;
- public static final int DB_WRITELOCK = 34;
- public static final int DB_OPFLAGS_MASK = 0x000000ff;
- public static final int DB_RMW = 0x80000000;
- public static final int DB_INCOMPLETE = -30999;
- public static final int DB_KEYEMPTY = -30998;
- public static final int DB_KEYEXIST = -30997;
- public static final int DB_LOCK_DEADLOCK = -30996;
- public static final int DB_LOCK_NOTGRANTED = -30995;
- public static final int DB_NOSERVER = -30994;
- public static final int DB_NOSERVER_HOME = -30993;
- public static final int DB_NOSERVER_ID = -30992;
- public static final int DB_NOTFOUND = -30991;
- public static final int DB_OLD_VERSION = -30990;
- public static final int DB_RUNRECOVERY = -30989;
- public static final int DB_VERIFY_BAD = -30988;
- public static final int DB_ALREADY_ABORTED = -30899;
- public static final int DB_DELETED = -30898;
- public static final int DB_JAVA_CALLBACK = -30897;
- public static final int DB_NEEDSPLIT = -30896;
- public static final int DB_SWAPBYTES = -30895;
- public static final int DB_TXN_CKP = -30894;
- public static final int DB_VERIFY_FATAL = -30893;
- public static final int DB_FILE_ID_LEN = 20;
- public static final int DB_LOGFILEID_INVALID = -1;
- public static final int DB_OK_BTREE = 0x01;
- public static final int DB_OK_HASH = 0x02;
- public static final int DB_OK_QUEUE = 0x04;
- public static final int DB_OK_RECNO = 0x08;
- public static final int DB_AM_DISCARD = 0x00001;
- public static final int DB_AM_DUP = 0x00002;
- public static final int DB_AM_DUPSORT = 0x00004;
- public static final int DB_AM_INMEM = 0x00008;
- public static final int DB_AM_PGDEF = 0x00010;
- public static final int DB_AM_RDONLY = 0x00020;
- public static final int DB_AM_RECOVER = 0x00040;
- public static final int DB_AM_SUBDB = 0x00080;
- public static final int DB_AM_SWAP = 0x00100;
- public static final int DB_AM_TXN = 0x00200;
- public static final int DB_AM_VERIFYING = 0x00400;
- public static final int DB_BT_RECNUM = 0x00800;
- public static final int DB_BT_REVSPLIT = 0x01000;
- public static final int DB_DBM_ERROR = 0x02000;
- public static final int DB_OPEN_CALLED = 0x04000;
- public static final int DB_RE_DELIMITER = 0x08000;
- public static final int DB_RE_FIXEDLEN = 0x10000;
- public static final int DB_RE_PAD = 0x20000;
- public static final int DB_RE_RENUMBER = 0x40000;
- public static final int DB_RE_SNAPSHOT = 0x80000;
- public static final int DB_RECORD_LOCK = 1;
- public static final int DB_PAGE_LOCK = 2;
- public static final int DB_LOCKVERSION = 1;
- public static final int DB_LOCK_NOWAIT = 0x01;
- public static final int DB_LOCK_RECORD = 0x02;
- public static final int DB_LOCK_UPGRADE = 0x04;
- public static final int DB_LOCK_SWITCH = 0x08;
- public static final int DB_LOCK_CONFLICT = 0x01;
- public static final int DB_LOCK_RIW_N = 7;
- public static final int DB_ARCH_ABS = 0x001;
- public static final int DB_ARCH_DATA = 0x002;
- public static final int DB_ARCH_LOG = 0x004;
- public static final int DB_MPOOL_CREATE = 0x001;
- public static final int DB_MPOOL_LAST = 0x002;
- public static final int DB_MPOOL_NEW = 0x004;
- public static final int DB_MPOOL_NEW_GROUP = 0x008;
- public static final int DB_MPOOL_EXTENT = 0x010;
- public static final int DB_MPOOL_CLEAN = 0x001;
- public static final int DB_MPOOL_DIRTY = 0x002;
- public static final int DB_MPOOL_DISCARD = 0x004;
- public static final int DB_TXNVERSION = 1;
- public static final int DB_TXN_BACKWARD_ROLL = 1;
- public static final int DB_TXN_FORWARD_ROLL = 2;
- public static final int DB_TXN_OPENFILES = 3;
- public static final int DB_TXN_REDO = 4;
- public static final int DB_TXN_UNDO = 5;
- public static final int DB_DBM_HSEARCH = 0;
- public static final int DB_VERSION_MAJOR = 3;
- public static final int DB_VERSION_MINOR = 2;
- public static final int DB_VERSION_PATCH = 9;
-}
diff --git a/db/java/src/com/sleepycat/db/DbDeadlockException.java b/db/java/src/com/sleepycat/db/DbDeadlockException.java
index beab2ad62..bd01fc8ce 100644
--- a/db/java/src/com/sleepycat/db/DbDeadlockException.java
+++ b/db/java/src/com/sleepycat/db/DbDeadlockException.java
@@ -1,28 +1,31 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbDeadlockException.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbDeadlockException.java,v 11.25 2003/11/28 18:35:41 bostic Exp $
*/
-
package com.sleepycat.db;
-public class DbDeadlockException extends DbException
-{
- // methods
- //
-
- public DbDeadlockException(String s)
- {
- super(s);
- }
-
- public DbDeadlockException(String s, int errno)
- {
- super(s, errno);
+/**
+ * This information describes the DbDeadlockException class and how
+ * it is used in the Berkeley DB library.</p> <p>
+ *
+ * A DbDeadlockException is thrown when multiple threads competing
+ * for a lock are deadlocked, when a lock request has timed out, or
+ * when a lock request would need to block and the transaction has
+ * been configured to not wait for locks. One of the threads'
+ * transactions is selected for termination, and a
+ * DbDeadlockException is thrown to that thread.</p>
+ */
+public class DbDeadlockException extends DbException {
+ /**
+ * Constructor for the DbDeadlockException object
+ *
+ */
+ protected DbDeadlockException(String s, int errno, DbEnv dbenv) {
+ super(s, errno, dbenv);
}
}
-
-// end of DbDeadlockException.java
diff --git a/db/java/src/com/sleepycat/db/DbDupCompare.java b/db/java/src/com/sleepycat/db/DbDupCompare.java
index 3d4b5a736..fe9101877 100644
--- a/db/java/src/com/sleepycat/db/DbDupCompare.java
+++ b/db/java/src/com/sleepycat/db/DbDupCompare.java
@@ -1,21 +1,43 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbDupCompare.java,v 11.2 2000/07/04 20:53:19 dda Exp $
+ * $Id: DbDupCompare.java,v 11.33 2003/12/03 21:28:08 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_dup_compare()
- *
+/**
+ * An interface specifying a comparison function, which imposes a
+ * total ordering on the duplicate data items in a Btree database.
+ * </p>
*/
-public interface DbDupCompare
-{
- public abstract int dup_compare(Db db, Dbt dbt1, Dbt dbt2);
+public interface DbDupCompare {
+ /**
+ * The DbDupCompare interface is used by the
+ * Db.setDuplicatelicateCompare method.</p> </p>
+ *
+ * @param db the enclosing database handle.
+ * @param dbt1 a {@link com.sleepycat.db.Dbt Dbt} representing
+ * the application supplied data item.
+ * @param dbt2 a {@link com.sleepycat.db.Dbt Dbt} representing
+ * the current tree's data item.
+ * @return The <b>dup_compare_fcn</b> function must return
+ * an integer value less than, equal to, or greater than zero
+ * if the first data item parameter is considered to be
+ * respectively less than, equal to, or greater than the
+ * second data item parameter. In addition, the comparison
+ * function must cause the data items in the set to be <i>
+ * well-ordered</i> . The comparison function must correctly
+ * handle any data item values used by the application
+ * (possibly including zero-length data items). The <b>data
+ * </b> and <b>size</b> fields of the {@link
+ * com.sleepycat.db.Dbt Dbt} are the only fields that may be
+ * used for the purposes of this comparison, and no
+ * particular alignment of the memory to which the <b>data
+ * </b> field refers may be assumed.</p>
+ */
+ public abstract int compareDuplicates(Db db, Dbt dbt1, Dbt dbt2);
}
-
-// end of DbDupCompare.java
diff --git a/db/java/src/com/sleepycat/db/DbEnv.java b/db/java/src/com/sleepycat/db/DbEnv.java
index 6e9ce7ae3..097f35f58 100644
--- a/db/java/src/com/sleepycat/db/DbEnv.java
+++ b/db/java/src/com/sleepycat/db/DbEnv.java
@@ -1,392 +1,5322 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbEnv.java,v 11.25 2001/01/04 14:23:30 dda Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
-import java.io.OutputStream;
-import java.io.FileNotFoundException;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Vector;
-
/**
+ * The DbEnv object is the handle for a Berkeley DB environment -- a
+ * collection including support for some or all of caching, locking,
+ * logging and transaction subsystems, as well as databases and log
+ * files. Methods off the DbEnv handle are used to configure the
+ * environment as well as to operate on subsystems and databases in
+ * the environment.</p> <p>
*
- * @author Donald D. Anderson
+ * DbEnv handles are free-threaded if the {@link
+ * com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD} flag is specified to
+ * the {@link com.sleepycat.db.DbEnv#open DbEnv.open} method when the
+ * environment is opened. The DbEnv handle should not be closed while
+ * any other handle remains open that is using it as a reference (for
+ * example, {@link com.sleepycat.db.Db Db} or {@link
+ * com.sleepycat.db.DbTxn DbTxn}). Once either the {@link
+ * com.sleepycat.db.DbEnv#close DbEnv.close} or {@link
+ * com.sleepycat.db.DbEnv#remove DbEnv.remove} methods are called,
+ * the handle may not be accessed again, regardless of the method's
+ * return.</p>
*/
-public class DbEnv
-{
- // methods
- //
-
- //
- // After using this constructor, set any parameters via
- // the set_* access methods below, and finally open
- // the environment by calling open().
- //
- public DbEnv(int flags)
- {
- constructor_flags_ = flags;
- _init(errstream_, constructor_flags_);
- }
-
- //
- // This constructor is purposely not public.
- // It is used internally to create a DbEnv wrapper
- // when an underlying environment already exists.
- //
- /*package*/ DbEnv(Db db)
- {
- _init_using_db(errstream_, db);
- }
-
- //
- // When a Db is created, it is kept in a private list,
- // so that Db's can be notified when the environment
- // is closed. This allows us to detect and guard
- // against the following situation:
- // DbEnv env = new DbEnv(0);
- // Db db = new Db(0);
- // env.close();
- // db.close();
- //
- // This *is* a programming error, but not protecting
- // against it will crash the VM.
- //
- /*package*/ void _add_db(Db db)
- {
- dblist_.addElement(db);
- }
-
- //
- // Remove from the private list of Db's.
- //
- /*package*/ void _remove_db(Db db)
- {
- dblist_.removeElement(db);
- }
-
- //
- // Iterate all the Db's in the list, and
- // notify them that the environment is closing,
- // so they can clean up.
- //
- /*package*/ void _notify_dbs()
- {
- Enumeration enum = dblist_.elements();
- while (enum.hasMoreElements()) {
- Db db = (Db)enum.nextElement();
- db._notify_dbenv_close();
+public class DbEnv {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbEnv(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+
+ protected DbEnv() {
+ this(0, false);
+ }
+
+
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
}
- dblist_.removeAllElements();
+ swigCPtr = 0;
}
-
- // close discards any internal memory.
- // After using close, the DbEnv can be reopened.
- //
- public synchronized void close(int flags)
- throws DbException
- {
- _notify_dbs();
- _close(flags);
+
+
+ protected static long getCPtr(DbEnv obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
}
- // (Internal)
- private native void _close(int flags)
- throws DbException;
- public native void err(int errcode, String message);
+ // Internally, the JNI layer creates a global reference to each DbEnv,
+ // which can potentially be different to this. We keep a copy here so
+ // we can clean up after destructors.
+ private Object dbenv_ref;
+ private DbAppDispatch app_dispatch_handler;
+ private DbEnvFeedbackHandler env_feedback_handler;
+ private DbErrorHandler error_handler;
+ private DbPanicHandler panic_handler;
+ private DbRepTransport rep_transport_handler;
+ private String errpfx;
- public native void errx(String message);
- // overrides Object.finalize
- protected void finalize()
- throws Throwable
- {
- _notify_dbs();
- _finalize(errcall_, errpfx_);
+ public static class RepProcessMessage {
+ /**
+ * The <b>envid</b> field contains the local identifier of
+ * the environment returned by the
+ * DbEnv.replicationProcessMessage method.
+ *</ul>
+ *
+ */
+ public int envid;
}
- // (Internal)
- protected native void _finalize(DbErrcall errcall, String errpfx)
- throws Throwable;
- // (Internal)
- private native void _init(DbErrcall errcall, int flags);
+ // Called by the public DbEnv constructor and for private environments
+ // by the Db constructor.
+ void initialize() {
+ dbenv_ref = db_java.initDbEnvRef0(this, this);
+ // Start with System.err as the default error stream.
+ set_error_stream(System.err);
+ }
+
- // (Internal)
- private native void _init_using_db(DbErrcall errcall, Db db);
+ void cleanup() {
+ swigCPtr = 0;
+ db_java.deleteRef0(dbenv_ref);
+ dbenv_ref = null;
+ }
- /*package*/ native void _notify_db_close();
- public native void open(String db_home, int flags, int mode)
- throws DbException, FileNotFoundException;
+ /**
+ * The DbEnv.close method closes the Berkeley DB environment,
+ * freeing any allocated resources and closing any underlying
+ * subsystems.</p> <p>
+ *
+ * The {@link com.sleepycat.db.DbEnv DbEnv} handle should not be
+ * closed while any other handle that refers to it is not yet
+ * closed; for example, database environment handles must not be
+ * closed while database handles remain open, or transactions in
+ * the environment have not yet been committed or aborted.
+ * Specifically, this includes {@link com.sleepycat.db.Db Db},
+ * {@link com.sleepycat.db.Dbc Dbc}, {@link
+ * com.sleepycat.db.DbTxn DbTxn}, {@link com.sleepycat.db.DbLogc
+ * DbLogc} and {@link com.sleepycat.db.DbMpoolFile DbMpoolFile}
+ * handles.</p> <p>
+ *
+ * Where the environment was initialized with the {@link
+ * com.sleepycat.db.Db#DB_INIT_LOCK Db.DB_INIT_LOCK} flag,
+ * calling DbEnv.close does not release any locks still held by
+ * the closing process, providing functionality for long-lived
+ * locks. </p> <p>
+ *
+ * Where the environment was initialized with the {@link
+ * com.sleepycat.db.Db#DB_INIT_TXN Db.DB_INIT_TXN} flag, calling
+ * DbEnv.close aborts any unresolved transactions. Applications
+ * should not depend on this behavior for transactions involving
+ * Berkeley DB databases; all such transactions should be
+ * explicitly resolved. The problem with depending on this
+ * semantic is that aborting an unresolved transaction involving
+ * database operations requires a database handle. Because the
+ * database handles should have been closed before calling
+ * DbEnv.close, it will not be possible to abort the transaction,
+ * and recovery will have to be run on the Berkeley DB
+ * environment before further operations are done.</p> <p>
+ *
+ * Where log cursors were created using the {@link
+ * com.sleepycat.db.DbEnv#logCursor DbEnv.logCursor} method,
+ * calling DbEnv.close does not imply closing those cursors.</p>
+ * <p>
+ *
+ * In multithreaded applications, only a single thread may call
+ * DbEnv.close.</p> <p>
+ *
+ * After DbEnv.close has been called, regardless of its return,
+ * the Berkeley DB environment handle may not be accessed again.
+ * </p>
+ *
+ * @param flags currently unused, and must be set to 0.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ cleanup();
+ }
+ }
- // remove removes any files and discards any internal memory.
- // (i.e. implicitly it does a close, if the environment is open).
- // After using close, the DbEnv can no longer be used;
- // create another one if needed.
- //
- public native synchronized void remove(String db_home, int flags)
- throws DbException, FileNotFoundException;
- ////////////////////////////////////////////////////////////////
- // simple get/set access methods
- //
- // If you are calling set_ methods, you need to
- // use the constructor with one argument along with open().
+ private final int handle_app_dispatch(Dbt dbt, DbLsn lsn, int recops) {
+ return app_dispatch_handler.appDispatch(this, dbt, lsn, recops);
+ }
- public native void set_cachesize(int gbytes, int bytes, int ncaches)
- throws DbException;
- // Error message callback.
- public void set_errcall(DbErrcall errcall)
- {
- errcall_ = errcall;
- _set_errcall(errcall);
+ private final void handle_env_feedback(int opcode, int percent) {
+ env_feedback_handler.feedback(this, opcode, percent);
}
- public native void _set_errcall(DbErrcall errcall);
- // Error stream.
- public void set_error_stream(OutputStream s)
- {
- DbOutputStreamErrcall errcall = new DbOutputStreamErrcall(s);
- set_errcall(errcall);
+ private final void handle_error(String msg) {
+ error_handler.error(this.errpfx, msg);
}
- // Error message prefix.
- public void set_errpfx(String errpfx)
- {
- errpfx_ = errpfx;
- _set_errpfx(errpfx);
+
+ private final void handle_panic(DbException e) {
+ panic_handler.panic(this, e);
}
- private native void _set_errpfx(String errpfx);
- // Feedback
- public void set_feedback(DbFeedback feedback)
- throws DbException
- {
- feedback_ = feedback;
- feedback_changed(feedback);
+ private final int handle_rep_transport(Dbt control, Dbt rec,
+ DbLsn lsn, int flags, int envid)
+ throws DbException {
+ return rep_transport_handler.send(this, control, rec, lsn,
+ flags, envid);
}
- // (Internal)
- private native void feedback_changed(DbFeedback feedback)
- throws DbException;
- // Generate debugging messages.
- public native void set_verbose(int which, int onoff)
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockVector(int,int,DbLockRequest[],int,int)}
+ */
+ public void lock_vec(int locker, int flags, DbLockRequest[] list, int offset, int count) throws DbException {
+ lockVector(locker, flags, list, offset, count);
+ }
- public native void set_data_dir(String data_dir)
- throws DbException;
- // Log buffer size.
- public native void set_lg_bsize(/*u_int32_t*/ int lg_max)
- throws DbException;
+ /**
+ * The DbEnv.lockVector method atomically obtains and releases
+ * one or more locks from the lock table. The DbEnv.lockVector
+ * method is intended to support acquisition or trading of
+ * multiple locks under one lock table semaphore, as is needed
+ * for lock coupling or in multigranularity locking for lock
+ * escalation.</p> <p>
+ *
+ * If any of the requested locks cannot be acquired, or any of
+ * the locks to be released cannot be released, the operations
+ * before the failing operation are guaranteed to have completed
+ * successfully, and DbEnv.lockVector throws an exception</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_NOWAIT
+ * Db.DB_LOCK_NOWAIT}<p>
+ *
+ * If a lock cannot be granted because the requested lock
+ * conflicts with an existing lock, throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} immediately instead of
+ * waiting for the lock to become available. In this case,
+ * the index of the request that was not granted can be
+ * found by calling DbLockNotGrantedException.get_index.
+ * </li>
+ * </ul>
+ *
+ * @param locker an unsigned 32-bit integer
+ * quantity. It represents the entity requesting or releasing
+ * the lock.
+ * @param list The <b>list</b> array
+ * provided to DbEnv.lockVector is a set of DbLockRequest
+ * objects. Only <b>count</b> elements of <b>list</b>
+ * starting at <b>offset</b> are considered by
+ * DbEnv.lockVector. A DbLockRequest object has at least the
+ * following fields: <p>
+ *
+ * A DB_LOCKREQ structure has at least the following fields:
+ * </p> <p>
+ *
+ * The operation to be performed, which must be set to one of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_GET
+ * Db.DB_LOCK_GET}<p>
+ *
+ * Get the lock defined by the values of the <b>mode</b>
+ * and <b>obj</b> structure fields, for the specified <b>
+ * locker</b> . Upon return from DbEnv.lockVector, if the
+ * <b>lock</b> field is non-null, a reference to the
+ * acquired lock is stored there. (This reference is
+ * invalidated by any call to DbEnv.lockVector or {@link
+ * com.sleepycat.db.DbEnv#lockPut DbEnv.lockPut} that
+ * releases the lock.) </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_GET_TIMEOUT
+ * Db.DB_LOCK_GET_TIMEOUT}<p>
+ *
+ * Identical to <code>Db.DB_LOCK_GET</code> except that the
+ * value in the <b>timeout</b> structure field overrides
+ * any previously specified timeout value for this lock. A
+ * value of 0 turns off any previously specified timeout.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_PUT
+ * Db.DB_LOCK_PUT}<p>
+ *
+ * The lock to which the <b>lock</b> structure field refers
+ * is released. The <b>locker</b> parameter, and <b>mode
+ * </b> and <b>obj</b> fields are ignored. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_PUT_ALL
+ * Db.DB_LOCK_PUT_ALL}<p>
+ *
+ * All locks held by the specified <b>locker</b> are
+ * released. The <b>lock</b> , <b>mode</b> , and <b>obj</b>
+ * structure fields are ignored. Locks acquired in
+ * operations performed by the current call to
+ * DbEnv.lockVector which appear before the <code>Db.DB_LOCK_PUT_ALL</code>
+ * operation are released; those acquired in operations
+ * appearing after the <code>Db.DB_LOCK_PUT_ALL</code>
+ * operation are not released. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_PUT_OBJ
+ * Db.DB_LOCK_PUT_OBJ}<p>
+ *
+ * All locks held on <b>obj</b> are released. The <b>locker
+ * </b> parameter and the <b>lock</b> and <b>mode</b>
+ * structure fields are ignored. Locks acquired in
+ * operations performed by the current call to
+ * DbEnv.lockVector that appear before the <code>Db.DB_LOCK_PUT_OBJ</code>
+ * operation are released; those acquired in operations
+ * appearing after the <code>Db.DB_LOCK_PUT_OBJ</code>
+ * operation are not released. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_TIMEOUT
+ * Db.DB_LOCK_TIMEOUT}<p>
+ *
+ * Cause the specified <b>locker</b> to timeout
+ * immediately. If the database environment has not
+ * configured automatic deadlock detection, the transaction
+ * will timeout the next time deadlock detection is
+ * performed. As transactions acquire locks on behalf of a
+ * single locker ID, timing out the locker ID associated
+ * with a transaction will time out the transaction itself.
+ * </li>
+ * </ul>
+ * A lock reference. <p>
+ *
+ * The lock mode, used as an index into the environment's
+ * lock conflict matrix. When using the default lock conflict
+ * matrix, <b>mode</b> must be set to one of the following
+ * values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_READ
+ * Db.DB_LOCK_READ}<p>
+ *
+ * read (shared) </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_WRITE
+ * Db.DB_LOCK_WRITE}<p>
+ *
+ * write (exclusive) </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_IWRITE
+ * Db.DB_LOCK_IWRITE}<p>
+ *
+ * intention to write (shared) </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_IREAD
+ * Db.DB_LOCK_IREAD}<p>
+ *
+ * intention to read (shared) </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_IWR
+ * Db.DB_LOCK_IWR}<p>
+ *
+ * intention to read and write (shared) </li>
+ * </ul>
+ * See {@link com.sleepycat.db.DbEnv#setLockConflicts
+ * DbEnv.setLockConflicts} and <a
+ * href="{@docRoot}/../ref/lock/stdmode.html">Standard Lock
+ * Modes</a> for more information on the lock conflict
+ * matrix.</p> <p>
+ *
+ * An untyped byte string that specifies the object to be
+ * locked or released. Applications using the locking
+ * subsystem directly while also doing locking via the
+ * Berkeley DB access methods must take care not to
+ * inadvertently lock objects that happen to be equal to the
+ * unique file IDs used to lock files. See <a
+ * href="{@docRoot}/../ref/lock/am_conv.html">Access method
+ * locking conventions</a> for more information. <p>
+ *
+ * The lock timeout value.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the DbEnv.lockVector method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the DbEnv.lockVector method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws DbLockNotGrantedException If the {@link
+ * com.sleepycat.db.Db#DB_LOCK_NOWAIT Db.DB_LOCK_NOWAIT} flag
+ * or lock timers were configured and the lock could not be
+ * granted before the wait-time expired, the DbEnv.lockVector
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The DbEnv.lockVector method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @throws DbMemoryException If the maximum number of
+ * locks has been reached, the DbEnv.lockVector method will
+ * fail and throw a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} exception.
+ */
+ public void lockVector(int locker, int flags, DbLockRequest[] list, int offset, int count) throws DbException {
+
+ db_javaJNI.DbEnv_lock_vec(swigCPtr, locker, flags, list,
+ offset, count);
+ }
- // Log directory.
- public native void set_lg_dir(String lg_dir)
- throws DbException;
- // Maximum log file size.
- public native void set_lg_max(/*u_int32_t*/ int lg_max)
- throws DbException;
+ /**
+ * The DbEnv.open method opens a Berkeley DB environment. It
+ * provides a structure for creating a consistent environment for
+ * processes using one or more of the features of Berkeley DB.
+ * </p>
+ *
+ * @param db_home the database environment's
+ * home directory. For more information on <b>db_home</b> ,
+ * and filename resolution in general, see <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB File
+ * Naming</a> . The environment variable <b>DB_HOME</b> may
+ * be used as the path of the database home, as described in
+ * <a href="{@docRoot}/../ref/env/naming.html">Berkeley DB
+ * File Naming</a> .
+ * @param flags specifies the subsystems
+ * that are initialized and how the application's environment
+ * affects Berkeley DB file naming, among other things. The
+ * <b>flags</b> parameter must be set to 0 or by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values: <p>
+ *
+ * Because there are a large number of flags that can be
+ * specified, they have been grouped together by
+ * functionality. The first group of flags indicates which of
+ * the Berkeley DB subsystems should be initialized:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_JOINENV
+ * Db.DB_JOINENV}<p>
+ *
+ * Join an existing environment. This option allows
+ * applications to join an existing environment without
+ * knowing which Berkeley DB subsystems the environment
+ * supports. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_CDB
+ * Db.DB_INIT_CDB}<p>
+ *
+ * Initialize locking for the <a
+ * href="{@docRoot}/../ref/cam/intro.html">Berkeley DB
+ * Concurrent Data Store</a> product. In this mode,
+ * Berkeley DB provides multiple reader/single writer
+ * access. The only other subsystem that should be
+ * specified with the <code>Db.DB_INIT_CDB</code> flag is
+ * <code>Db.DB_INIT_MPOOL</code>. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_LOCK
+ * Db.DB_INIT_LOCK}<p>
+ *
+ * Initialize the locking subsystem. This subsystem should
+ * be used when multiple processes or threads are going to
+ * be reading and writing a Berkeley DB database, so that
+ * they do not interfere with each other. If all threads
+ * are accessing the database(s) read-only, locking is
+ * unnecessary. When the <code>Db.DB_INIT_LOCK</code> flag
+ * is specified, it is usually necessary to run a deadlock
+ * detector, as well. See <a href="{@docRoot}/../utility/db_deadlock.html">
+ * db_deadlock</a> and {@link
+ * com.sleepycat.db.DbEnv#lockDetect DbEnv.lockDetect} for
+ * more information. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_LOG
+ * Db.DB_INIT_LOG}<p>
+ *
+ * Initialize the logging subsystem. This subsystem should
+ * be used when recovery from application or system failure
+ * is necessary. If the log region is being created and log
+ * files are already present, the log files are reviewed;
+ * subsequent log writes are appended to the end of the
+ * log, rather than overwriting current log entries. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_MPOOL
+ * Db.DB_INIT_MPOOL}<p>
+ *
+ * Initialize the shared memory buffer pool subsystem. This
+ * subsystem should be used whenever an application is
+ * using any Berkeley DB access method. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_REP
+ * Db.DB_INIT_REP}<p>
+ *
+ * Initialize the replication subsystem. This subsystem
+ * should be used whenever an application plans on using
+ * replication. The <code>Db.DB_INIT_REP</code> flag
+ * requires the <code>Db.DB_INIT_TXN</code> and <code>Db.DB_INIT_LOCK</code>
+ * flags also be configured. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_INIT_TXN
+ * Db.DB_INIT_TXN}<p>
+ *
+ * Initialize the transaction subsystem. This subsystem
+ * should be used when recovery and atomicity of multiple
+ * operations are important. The <code>Db.DB_INIT_TXN</code>
+ * flag implies the <code>Db.DB_INIT_LOG</code> flag. </li>
+ *
+ * </ul>
+ * The second group of flags govern what recovery, if any, is
+ * performed when the environment is initialized:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RECOVER
+ * Db.DB_RECOVER}<p>
+ *
+ * Run normal recovery on this environment before opening
+ * it for normal use. If this flag is set, the <code>Db.DB_CREATE</code>
+ * flag must also be set because the regions will be
+ * removed and re-created. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RECOVER_FATAL
+ * Db.DB_RECOVER_FATAL}<p>
+ *
+ * Run catastrophic recovery on this environment before
+ * opening it for normal use. If this flag is set, the
+ * <code>Db.DB_CREATE</code> flag must also be set because
+ * the regions will be removed and re-created. </li>
+ * </ul>
+ * A standard part of the recovery process is to remove the
+ * existing Berkeley DB environment and create a new one in
+ * which to perform recovery. If the thread of control
+ * performing recovery does not specify the correct region
+ * initialization information (for example, the correct
+ * memory pool cache size), the result can be an application
+ * running in an environment with incorrect cache and other
+ * subsystem sizes. For this reason, the thread of control
+ * performing recovery should specify correct configuration
+ * information before calling the DbEnv.open method; or it
+ * should remove the environment after recovery is completed,
+ * leaving creation of the correctly sized environment to a
+ * subsequent call to DbEnv.open.</p> <p>
+ *
+ * All Berkeley DB recovery processing must be
+ * single-threaded; that is, only a single thread of control
+ * may perform recovery or access a Berkeley DB environment
+ * while recovery is being performed. Because it is not an
+ * error to specify Db.DB_RECOVER for an environment for
+ * which no recovery is required, it is reasonable
+ * programming practice for the thread of control responsible
+ * for performing recovery and creating the environment to
+ * always specify the Db.DB_CREATE and Db.DB_RECOVER flags
+ * during startup.</p> <p>
+ *
+ * The DbEnv.open function returns successfully if
+ * Db.DB_RECOVER or Db.DB_RECOVER_FATAL is specified and no
+ * log files exist, so it is necessary to ensure that all
+ * necessary log files are present before running recovery.
+ * For further information, consult <a
+ * href="{@docRoot}/../utility/db_archive.html">db_archive
+ * </a> and <a href="{@docRoot}/../utility/db_recover.html">
+ * db_recover</a> .</p> <p>
+ *
+ * The third group of flags govern file-naming extensions in
+ * the environment:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_USE_ENVIRON
+ * Db.DB_USE_ENVIRON}<p>
+ *
+ * The Berkeley DB process' environment may be permitted to
+ * specify information to be used when naming files; see <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB
+ * File Naming</a> . Because permitting users to specify
+ * which files are used can create security problems,
+ * environment information will be used in file naming for
+ * all users only if the <code>Db.DB_USE_ENVIRON</code>
+ * flag is set. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_USE_ENVIRON_ROOT
+ * Db.DB_USE_ENVIRON_ROOT}<p>
+ *
+ * The Berkeley DB process' environment may be permitted to
+ * specify information to be used when naming files; see <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB
+ * File Naming</a> . Because permitting users to specify
+ * which files are used can create security problems, if
+ * the <code>Db.DB_USE_ENVIRON_ROOT</code> flag is set,
+ * environment information will be used for file naming
+ * only for users with appropriate permissions (for
+ * example, users with a user-ID of 0 on UNIX systems).
+ * </li>
+ * </ul>
+ * Finally, there are a few additional unrelated flags:</p>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CREATE Db.DB_CREATE}
+ * <p>
+ *
+ * Cause Berkeley DB subsystems to create any underlying
+ * files, as necessary. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCKDOWN
+ * Db.DB_LOCKDOWN}<p>
+ *
+ * Lock shared Berkeley DB environment files and
+ * memory-mapped databases into memory. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIVATE
+ * Db.DB_PRIVATE}<p>
+ *
+ * Specify that the environment will only be accessed by a
+ * single process (although that process may be
+ * multithreaded). This flag has two effects on the
+ * Berkeley DB environment. First, all underlying data
+ * structures are allocated from per-process memory instead
+ * of from shared memory that is potentially accessible to
+ * more than a single process. Second, mutexes are only
+ * configured to work between threads. <p>
+ *
+ * This flag should not be specified if more than a single
+ * process is accessing the environment because it is
+ * likely to cause database corruption and unpredictable
+ * behavior. For example, if both a server application and
+ * the Berkeley DB utility <a
+ * href="{@docRoot}/../utility/db_stat.html">db_stat</a>
+ * are expected to access the environment, the <code>Db.DB_PRIVATE</code>
+ * flag should not be specified.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SYSTEM_MEM
+ * Db.DB_SYSTEM_MEM}<p>
+ *
+ * Allocate memory from system shared memory instead of
+ * from memory backed by the filesystem. See <a
+ * href="{@docRoot}/../ref/env/region.html">Shared Memory
+ * Regions</a> for more information. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_THREAD Db.DB_THREAD}
+ * <p>
+ *
+ * Cause the {@link com.sleepycat.db.DbEnv DbEnv} handle
+ * returned by DbEnv.open to be <i>free-threaded</i> ; that
+ * is, usable by multiple threads within a single address
+ * space. <p>
+ *
+ * Threading is always assumed in the Java API, so no
+ * special flags are required and Berkeley DB functions
+ * will always behave as if the <code>Db.DB_THREAD</code>
+ * flag was specified.</p> </li>
+ * </ul>
+ *
+ * @param mode On UNIX systems or in
+ * IEEE/ANSI Std 1003.1 (POSIX) environments, all files
+ * created by Berkeley DB are created with mode <b>mode</b>
+ * (as described in <b>chmod</b> (2)) and modified by the
+ * process' umask value at the time of creation (see <b>umask
+ * </b>(2)). If <b>mode</b> is 0, Berkeley DB will use a
+ * default mode of readable and writable by both owner and
+ * group. On Windows systems, the mode parameter is ignored.
+ * The group ownership of created files is based on the
+ * system and directory defaults, and is not further
+ * specified by Berkeley DB.
+ * @throws DbException The DbEnv.open method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> The shared memory region was locked and (repeatedly)
+ * unavailable.
+ * <li> HP-UX only: a previously created Berkeley DB
+ * environment for this process still exists.
+ * @throws IllegalArgumentException The DbEnv.open method will
+ * fail and throw a IllegalArgumentException exception if the
+ * Db.DB_THREAD flag was specified and fast mutexes are not
+ * available for this architecture; The DB_HOME or TMPDIR
+ * environment variables were set, but empty; An incorrectly
+ * formatted <b>NAME VALUE</b> entry or line was found; or if
+ * an invalid flag value or parameter was specified.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the DbEnv.open method will fail and throw
+ * a FileNotFoundException exception.
+ */
+ public void open(String db_home, int flags, int mode) throws DbException, java.io.FileNotFoundException {
- // Two dimensional conflict matrix.
- public native void set_lk_conflicts(byte[][] lk_conflicts)
- throws DbException;
+ /*
+ * Java is always threaded
+ */
+ flags |= Db.DB_THREAD;
+ open0(db_home, flags, mode);
+ }
- // Deadlock detect on every conflict.
- public native void set_lk_detect(/*u_int32_t*/ int lk_detect)
- throws DbException;
/**
- * @deprecated DB 3.2.6, see the online documentation.
+ * The DbEnv.remove method destroys a Berkeley DB environment if
+ * it is not currently in use. The environment regions, including
+ * any backing files, are removed. Any log or database files and
+ * the environment directory are not removed.</p> <p>
+ *
+ * If there are processes that have called {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} without calling {@link
+ * com.sleepycat.db.DbEnv#close DbEnv.close} (that is, there are
+ * processes currently using the environment), DbEnv.remove will
+ * fail without further action unless the {@link
+ * com.sleepycat.db.Db#DB_FORCE Db.DB_FORCE} flag is set, in
+ * which case DbEnv.remove will attempt to remove the
+ * environment, regardless of any processes still using it.</p>
+ * <p>
+ *
+ * The result of attempting to forcibly destroy the environment
+ * when it is in use is unspecified. Processes using an
+ * environment often maintain open file descriptors for shared
+ * regions within it. On UNIX systems, the environment removal
+ * will usually succeed, and processes that have already joined
+ * the region will continue to run in that region without change.
+ * However, processes attempting to join the environment will
+ * either fail or create new regions. On other systems in which
+ * the <b>unlink</b> (2) system call will fail if any process has
+ * an open file descriptor for the file (for example Windows/NT),
+ * the region removal will fail.</p> <p>
+ *
+ * Calling DbEnv.remove should not be necessary for most
+ * applications because the Berkeley DB environment is cleaned up
+ * as part of normal database recovery procedures. However,
+ * applications may want to call DbEnv.remove as part of
+ * application shut down to free up system resources. For
+ * example, if the {@link com.sleepycat.db.Db#DB_SYSTEM_MEM
+ * Db.DB_SYSTEM_MEM} flag was specified to {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open}, it may be useful to
+ * call DbEnv.remove in order to release system shared memory
+ * segments that have been allocated. Or, on architectures in
+ * which mutexes require allocation of underlying system
+ * resources, it may be useful to call DbEnv.remove in order to
+ * release those resources. Alternatively, if recovery is not
+ * required because no database state is maintained across
+ * failures, and no system resources need to be released, it is
+ * possible to clean up an environment by simply removing all the
+ * Berkeley DB files in the database environment's directories.
+ * </p> <p>
+ *
+ * In multithreaded applications, only a single thread may call
+ * DbEnv.remove.</p> <p>
+ *
+ * A {@link com.sleepycat.db.DbEnv DbEnv} handle that has already
+ * been used to open an environment should not be used to call
+ * the DbEnv.remove method; a new {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle should be created for that purpose.</p> <p>
+ *
+ * After DbEnv.remove has been called, regardless of its return,
+ * the Berkeley DB environment handle may not be accessed again.
+ * </p>
+ *
+ * @param db_home The <b>db_home</b> parameter
+ * names the database environment to be removed.
+ * @param flags must be set to 0 or by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FORCE Db.DB_FORCE}<p>
+ *
+ * If the {@link com.sleepycat.db.Db#DB_FORCE <code>Db.DB_FORCE</code>
+ * } flag is set, the environment is removed, regardless of
+ * any processes that may still using it, and no locks are
+ * acquired during this process. (Generally, the {@link
+ * com.sleepycat.db.Db#DB_FORCE <code>Db.DB_FORCE</code>}
+ * flag is specified only when applications were unable to
+ * shut down cleanly, and there is a risk that an
+ * application may have died holding a Berkeley DB lock.)
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_USE_ENVIRON
+ * Db.DB_USE_ENVIRON}<p>
+ *
+ * The Berkeley DB process' environment may be permitted to
+ * specify information to be used when naming files; see <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB
+ * File Naming</a> . Because permitting users to specify
+ * which files are used can create security problems,
+ * environment information will be used in file naming for
+ * all users only if the <code>Db.DB_USE_ENVIRON</code>
+ * flag is set. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_USE_ENVIRON_ROOT
+ * Db.DB_USE_ENVIRON_ROOT}<p>
+ *
+ * The Berkeley DB process' environment may be permitted to
+ * specify information to be used when naming files; see <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB
+ * File Naming</a> . Because permitting users to specify
+ * which files are used can create security problems, if
+ * the <code>Db.DB_USE_ENVIRON_ROOT</code> flag is set,
+ * environment information will be used for file naming
+ * only for users with appropriate permissions (for
+ * example, users with a user-ID of 0 on UNIX systems).
+ * </li>
+ * </ul>
+ *
+ * @throws DbException The DbEnv.remove method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> The shared memory region was in use and the force
+ * flag was not set.
+ * @throws FileNotFoundException If the file or directory does
+ * not exist, the DbEnv.remove method will fail and throw a
+ * FileNotFoundException exception.
*/
- // Maximum number of locks.
- public native void set_lk_max(/*unsigned*/ int lk_max)
- throws DbException;
+ public synchronized void remove(String db_home, int flags) throws DbException, java.io.FileNotFoundException {
- // Maximum number of lockers.
- public native void set_lk_max_lockers(/*unsigned*/ int lk_max_lockers)
- throws DbException;
+ try {
+ remove0(db_home, flags);
+ } finally {
+ cleanup();
+ }
+ }
- // Maximum number of locks.
- public native void set_lk_max_locks(/*unsigned*/ int lk_max_locks)
- throws DbException;
- // Maximum number of locked objects.
- public native void set_lk_max_objects(/*unsigned*/ int lk_max_objects)
- throws DbException;
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setCacheSize(long,int)}
+ */
+ public void set_cachesize(int gbytes, int bytes, int ncache) throws DbException {
- // Maximum file size for mmap.
- public native void set_mp_mmapsize(/*size_t*/ long mmapsize)
- throws DbException;
+ set_cachesize((long) gbytes * Db.GIGABYTE + bytes, ncache);
+ }
- public native void set_mutexlocks(int mutexlocks)
- throws DbException;
- public native static void set_pageyield(int pageyield)
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getErrorPrefix()}
+ */
+ public String get_errpfx() {
+ return getErrorPrefix();
+ }
- public native static void set_panicstate(int panicstate)
- throws DbException;
- public void set_recovery_init(DbRecoveryInit recovery_init)
- throws DbException
- {
- recovery_init_ = recovery_init;
- recovery_init_changed(recovery_init);
+ /**
+ * The DbEnv.getErrorPrefix method returns the error prefix.</p>
+ * <p>
+ *
+ * The DbEnv.getErrorPrefix method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @return The DbEnv.getErrorPrefix method returns the error
+ * prefix.</p>
+ */
+ public String getErrorPrefix() {
+ return this.errpfx;
}
- // (Internal)
- private native void recovery_init_changed(DbRecoveryInit recovery_init)
- throws DbException;
- public native static void set_region_init(int region_init)
- throws DbException;
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setErrorHandler(DbErrorHandler)}
+ */
+ public void set_errcall(DbErrcall db_errcall_fcn) throws DbException {
+ final DbErrcall ferrcall = db_errcall_fcn;
+ try {
+ setErrorHandler(
+ new DbErrorHandler() {
+ public void error(String prefix, String buffer) {
+ ferrcall.errcall(prefix, buffer);
+ }
+ });
+ } catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_error_stream does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
+ }
+ }
- public native void set_flags(int flags, int onoff)
- throws DbException;
- public native void set_server(String host, long cl_timeout,
- long sv_timeout, int flags)
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setErrorStream(java.io.OutputStream)}
+ */
+ public void set_error_stream(java.io.OutputStream stream) {
+ setErrorStream(stream);
+ }
- public native void set_shm_key(long shm_key)
- throws DbException;
- public native static void set_tas_spins(int tas_spins)
- throws DbException;
+ /**
+ * When an error occurs in the Berkeley DB library, an exception
+ * is thrown. In some cases, however, the error information known
+ * to the Java layer may be insufficient to completely describe
+ * the cause of the error, especially during initial application
+ * debugging.</p> <p>
+ *
+ * The DbEnv.setErrorStream and {@link
+ * com.sleepycat.db.Db#setErrorStream Db.setErrorStream} methods
+ * are used to enhance the mechanism for reporting error messages
+ * to the application by setting a OutputStream to be used for
+ * displaying additional Berkeley DB error messages. In some
+ * cases, when an error occurs, Berkeley DB will output an
+ * additional error message to the specified stream.</p> <p>
+ *
+ * The error message will consist of the prefix string and a
+ * colon ("<b>:</b> ") (if a prefix string was previously
+ * specified using {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}), an error string, and a trailing
+ * &lt;newline&gt; character.</p> <p>
+ *
+ * Alternatively, you can use the {@link
+ * com.sleepycat.db.DbEnv#setErrorHandler DbEnv.setErrorHandler}
+ * method to capture the additional error information in a way
+ * that does not use output streams. You should not mix these
+ * approaches. </p> <p>
+ *
+ * This error-logging enhancement does not slow performance or
+ * significantly increase application size, and may be run during
+ * normal operation as well as during application debugging.</p>
+ *
+ * @param stream the application-specified output stream to be
+ * used for additional error information.
+ */
+ public void setErrorStream(java.io.OutputStream stream) {
+ final java.io.PrintWriter pw = new java.io.PrintWriter(stream);
+ try {
+ setErrorHandler(
+ new DbErrorHandler() {
+ public void error(String prefix, String buf) {
+ if (prefix != null) {
+ pw.print(prefix + ": ");
+ }
+ pw.println(buf);
+ pw.flush();
+ }
+ });
+ } catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_error_stream does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
+ }
+ }
- public native void set_tmp_dir(String tmp_dir)
- throws DbException;
- // Feedback
- public void set_tx_recover(DbTxnRecover tx_recover)
- throws DbException
- {
- tx_recover_ = tx_recover;
- tx_recover_changed(tx_recover);
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setErrorPrefix(String)}
+ */
+ public void set_errpfx(String errpfx) {
+ setErrorPrefix(errpfx);
}
- // (Internal)
- private native void tx_recover_changed(DbTxnRecover tx_recover)
- throws DbException;
- // Maximum number of transactions.
- public native void set_tx_max(/*unsigned*/ int tx_max)
- throws DbException;
+ /**
+ * Set the prefix string that appears before error messages
+ * issued by Berkeley DB.</p> <p>
+ *
+ * The DbEnv.setErrorPrefix method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @param errpfx the application-specified error prefix for
+ * additional error messages.
+ */
+ public void setErrorPrefix(String errpfx) {
+ this.errpfx = errpfx;
+ }
- // Note: only the seconds (not milliseconds) of the timestamp
- // are used in this API.
- public void set_tx_timestamp(Date timestamp)
- throws DbException
- {
- _set_tx_timestamp(timestamp.getTime()/1000);
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setFeedbackHandler(DbEnvFeedbackHandler)}
+ */
+ public void set_feedback(DbEnvFeedback feedback) throws DbException {
+ final DbEnvFeedback ffeedback = feedback;
+ setFeedbackHandler(
+ new DbEnvFeedbackHandler() {
+ public void feedback(DbEnv env, int opcode, int percent) {
+ ffeedback.feedback(env, opcode, percent);
+ }
+ });
}
- // (Internal)
- private native void _set_tx_timestamp(long seconds)
- throws DbException;
- // Versioning information
- public native static int get_version_major();
- public native static int get_version_minor();
- public native static int get_version_patch();
- public native static String get_version_string();
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #setReplicationLimit(long)}
+ */
+ public void set_rep_limit(int gbytes, int bytes) throws DbException {
- // Convert DB error codes to strings
- public native static String strerror(int errcode);
+ set_rep_limit((long) gbytes * Db.GIGABYTE + bytes);
+ }
- public native int lock_detect(int flags, int atype)
- throws DbException;
- public native DbLock lock_get(/*u_int32_t*/ int locker,
- int flags,
- Dbt obj,
- /*db_lockmode_t*/ int lock_mode)
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTxnTimestamp(java.util.Date)}
+ */
+ public void set_tx_timestamp(java.util.Date timestamp) throws DbException {
+ setTxnTimestamp(timestamp);
+ }
- public native /*u_int32_t*/ int lock_id()
- throws DbException;
- public native DbLockStat lock_stat()
- throws DbException;
+ /**
+ * Recover to the time specified by <b>timestamp</b> rather than
+ * to the most current possible date.</p> <p>
+ *
+ * Once a database environment has been upgraded to a new version
+ * of Berkeley DB involving a log format change (see <a
+ * href="{@docRoot}/../ref/upgrade/process.html">Upgrading
+ * Berkeley DB installations</a> ), it is no longer possible to
+ * recover to a specific time before that upgrade.</p> <p>
+ *
+ * The DbEnv.setTxnTimestamp method configures operations
+ * performed using the specified {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setTxnTimestamp method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. </p>
+ *
+ * @param timestamp references the memory
+ * location where the recovery timestamp is located. <p>
+ *
+ * Note that only the seconds (not the milliseconds) of the
+ * <b>timestamp</b> are used</p>
+ * @throws IllegalArgumentException The DbEnv.setTxnTimestamp
+ * method will fail and throw a IllegalArgumentException
+ * exception if it is not possible to recover to the
+ * specified time using the log files currently present in
+ * the environment; or if an invalid flag value or parameter
+ * was specified.
+ */
+ public void setTxnTimestamp(java.util.Date timestamp) throws DbException {
+ set_tx_timestamp0(timestamp.getTime() / 1000);
+ }
- public native String[] log_archive(int flags)
- throws DbException;
- public native static int log_compare(DbLsn lsn0, DbLsn lsn1);
+ /**
+ * The constructor creates the DbEnv object. The constructor
+ * allocates memory internally; calling the {@link
+ * com.sleepycat.db.DbEnv#close DbEnv.close} or {@link
+ * com.sleepycat.db.DbEnv#remove DbEnv.remove} methods will free
+ * that memory.</p>
+ *
+ * @param flags The following <b>flags</b> value may be
+ * specified:</p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RPCCLIENT
+ * Db.DB_RPCCLIENT}<p>
+ *
+ * Create a client environment to connect to a server. <p>
+ *
+ * The <code>Db.DB_RPCCLIENT</code> flag indicates to the
+ * system that this environment is remote on a server. The
+ * use of this flag causes the environment methods to use
+ * functions that call a server instead of local functions.
+ * Prior to making any environment or database method
+ * calls, the application must call the {@link
+ * com.sleepycat.db.DbEnv#setRpcServer DbEnv.setRpcServer}
+ * function to establish the connection to the server.</p>
+ * </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public DbEnv(int flags) throws DbException {
+ this(db_javaJNI.new_DbEnv(flags), true);
+ initialize();
+ }
- public native String log_file(DbLsn lsn)
- throws DbException;
- public native void log_flush(DbLsn lsn)
- throws DbException;
+ void close0(int flags) {
+ db_javaJNI.DbEnv_close0(swigCPtr, flags);
+ }
- public native void log_get(DbLsn lsn, Dbt data, int flags)
- throws DbException;
- public native void log_put(DbLsn lsn, Dbt data, int flags)
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #dbRemove(DbTxn,String,String,int)}
+ */
+ public void dbremove(DbTxn txnid, String file, String database, int flags) throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {
+ dbRemove(txnid, file, database, flags);
+ }
- public native DbLogStat log_stat()
- throws DbException;
- public native void log_register(Db dbp, String name)
- throws DbException;
+ /**
+ * The DbEnv.dbRemove method removes the database specified by
+ * the <b>file</b> and <b>database</b> parameters. If no <b>
+ * database</b> is specified, the underlying file represented by
+ * <b>file</b> is removed, incidentally removing all of the
+ * databases it contained.</p> <p>
+ *
+ * Applications should never remove databases with open {@link
+ * com.sleepycat.db.Db Db} handles, or in the case of removing a
+ * file, when any database in the file has an open handle. For
+ * example, some architectures do not permit the removal of files
+ * with open system handles. On these architectures, attempts to
+ * remove databases currently in use by any thread of control in
+ * the system will fail.</p> <h3>Environment Variables</h3> <p>
+ *
+ * The environment variable <b>DB_HOME</b> may be used as the
+ * path of the database environment home.</p> <p>
+ *
+ * DbEnv.dbRemove is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param database the database to be removed.
+ * @param file the physical file which
+ * contains the database(s) to be removed.
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the DbEnv.dbRemove call within a transaction. If
+ * the call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. </li>
+ * </ul>
+ *
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The DbEnv.dbRemove method
+ * may fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to remove the underlying file and
+ * a database in the file was currently open.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the DbEnv.dbRemove method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the DbEnv.dbRemove method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The DbEnv.dbRemove method
+ * will fail and throw a IllegalArgumentException exception
+ * if DbEnv.dbRemove called before {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the DbEnv.dbRemove method will fail and
+ * throw a FileNotFoundException exception.
+ */
+ public void dbRemove(DbTxn txnid, String file, String database, int flags) throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {
+ db_javaJNI.DbEnv_dbremove(swigCPtr, DbTxn.getCPtr(txnid), file, database, flags);
+ }
- public native void log_unregister(Db dbp)
- throws DbException;
- public native DbMpoolStat memp_stat()
- throws DbException;
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #dbRename(DbTxn,String,String,String,int)}
+ */
+ public void dbrename(DbTxn txnid, String file, String database, String newname, int flags) throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {
+ dbRename(txnid, file, database, newname, flags);
+ }
- public native DbMpoolFStat[] memp_fstat()
- throws DbException;
- public native int memp_trickle(int pct)
- throws DbException;
+ /**
+ * The DbEnv.dbRename method renames the database specified by
+ * the <b>file</b> and <b>database</b> parameters to <b>newname
+ * </b>. If no <b>database</b> is specified, the underlying file
+ * represented by <b>file</b> is renamed, incidentally renaming
+ * all of the databases it contained.</p> <p>
+ *
+ * Applications should not rename databases that are currently in
+ * use. If an underlying file is being renamed and logging is
+ * currently enabled in the database environment, no database in
+ * the file may be open when the DbEnv.dbRename method is called.
+ * In particular, some architectures do not permit renaming files
+ * with open handles. On these architectures, attempts to rename
+ * databases that are currently in use by any thread of control
+ * in the system will fail.</p> <h3>Environment Variables</h3>
+ * <p>
+ *
+ * The environment variable <b>DB_HOME</b> may be used as the
+ * path of the database environment home.</p> <p>
+ *
+ * DbEnv.dbRename is affected by any database directory specified
+ * using the {@link com.sleepycat.db.DbEnv#setDataDir
+ * DbEnv.setDataDir} method, or by setting the "set_data_dir"
+ * string in the environment's <b>DB_CONFIG</b> file.</p>
+ *
+ * @param database the database to be removed.
+ * @param file the physical file which
+ * contains the database(s) to be removed.
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * Enclose the DbEnv.dbRename call within a transaction. If
+ * the call succeeds, changes made by the operation will be
+ * recoverable. If the call fails, the operation will have
+ * made no changes. </li>
+ * </ul>
+ *
+ * @param newname the new name of the
+ * database or file.
+ * @param txnid If the operation is to be
+ * transaction-protected, the <b>txnid</b> parameter is a
+ * transaction handle returned from {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin};
+ * otherwise, null.
+ * @throws DbException The DbEnv.dbRename method
+ * may fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to rename the underlying file and
+ * a database in the file was currently open.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the DbEnv.dbRename method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the DbEnv.dbRename method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The DbEnv.dbRename method
+ * will fail and throw a IllegalArgumentException exception
+ * if DbEnv.dbRename called before {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ * @throws FileNotFoundException If the file or directory
+ * does not exist, the DbEnv.dbRename method will fail and
+ * throw a FileNotFoundException exception.
+ */
+ public void dbRename(DbTxn txnid, String file, String database, String newname, int flags) throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {
+ db_javaJNI.DbEnv_dbrename(swigCPtr, DbTxn.getCPtr(txnid), file, database, newname, flags);
+ }
- public native DbTxn txn_begin(DbTxn pid, int flags)
- throws DbException;
- public native int txn_checkpoint(int kbyte, int min, int flags)
- throws DbException;
+ /**
+ * The DbEnv.err, DbEnv.errx, {@link com.sleepycat.db.Db#err
+ * Db.err} and {@link com.sleepycat.db.Db#errx Db.errx} methods
+ * provide error-messaging functionality for applications written
+ * using the Berkeley DB library.</p> <p>
+ *
+ * The DbEnv.err method constructs an error message consisting of
+ * the following elements:</p> <blockquote> <p>
+ *
+ * If no error callback function has been set using the {@link
+ * com.sleepycat.db.DbEnv#setErrorHandler DbEnv.setErrorHandler}
+ * method, any prefix string specified using the {@link
+ * com.sleepycat.db.DbEnv#setErrorPrefix DbEnv.setErrorPrefix}
+ * method, followed by two separating characters: a colon and a
+ * &lt;space&gt; character. <p>
+ *
+ * <p>
+ *
+ * Two separating characters: a colon and a &lt;space&gt;
+ * character. <p>
+ *
+ * The standard system or Berkeley DB library error string
+ * associated with the <b>error</b> value, as returned by the
+ * {@link com.sleepycat.db.DbEnv#strerror DbEnv.strerror} method.
+ * </blockquote> <p>
+ *
+ * This constructed error message is then handled as follows:</p>
+ * <blockquote><p>
+ *
+ * If an error callback function has been set (see {@link
+ * com.sleepycat.db.Db#setErrorHandler Db.setErrorHandler} and
+ * {@link com.sleepycat.db.DbEnv#setErrorHandler
+ * DbEnv.setErrorHandler}), that function is called with two
+ * parameters: any prefix string specified (see {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} and
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}) and the error message.</p> <p>
+ *
+ * If an OutputStream has been set (see {@link
+ * com.sleepycat.db.DbEnv#setErrorStream DbEnv.setErrorStream}
+ * and {@link com.sleepycat.db.Db#setErrorStream
+ * Db.setErrorStream}), the error message is written to that
+ * stream.</p> <p>
+ *
+ * If none of these output options has been configured, the error
+ * message is written to System.err, the standard error output
+ * stream.</p> </blockquote>
+ *
+ * @param error the error value for which the DbEnv.err and
+ * {@link com.sleepycat.db.Db#err Db.err} methods will
+ * display a explanatory string.
+ * @param message an error message to display.
+ */
+ public void err(int error, String message) {
+ db_javaJNI.DbEnv_err(swigCPtr, error, message);
+ }
- public native DbTxnStat txn_stat()
- throws DbException;
+ /**
+ * The DbEnv.errx and {@link com.sleepycat.db.Db#errx Db.errx}
+ * methods perform identically to the DbEnv.err and {@link
+ * com.sleepycat.db.Db#err Db.err} methods, except that they do
+ * not append the final separator characters and standard error
+ * string to the error message.</p>
+ *
+ * @param error the error value for which the DbEnv.err and
+ * {@link com.sleepycat.db.Db#err Db.err} methods will
+ * display a explanatory string.
+ * @param message an error message to display.
+ */
+ public void errx(String message) {
+ db_javaJNI.DbEnv_errx(swigCPtr, message);
+ }
- ////////////////////////////////////////////////////////////////
- //
- // private data
- //
- private long private_dbobj_ = 0;
- private long private_info_ = 0;
- private int constructor_flags_ = 0;
- private Vector dblist_ = new Vector(); // Db's that are open
- private DbFeedback feedback_ = null;
- private DbRecoveryInit recovery_init_ = null;
- private DbTxnRecover tx_recover_ = null;
- private DbOutputStreamErrcall errstream_ =
- new DbOutputStreamErrcall(System.err);
- /*package*/ DbErrcall errcall_ = errstream_;
- /*package*/ String errpfx_;
- static {
- Db.load_db();
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDataDirs()}
+ */
+ public String[] get_data_dirs() throws DbException {
+ return getDataDirs();
+ }
+
+
+ /**
+ * The DbEnv.getDataDirs method returns the array of directories.
+ * </p> <p>
+ *
+ * The DbEnv.getDataDirs method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getDataDirs method returns the
+ * array of directories.</p>
+ */
+ public String[] getDataDirs() throws DbException {
+ return db_javaJNI.DbEnv_get_data_dirs(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getEncryptFlags()}
+ */
+ public int get_encrypt_flags() throws DbException {
+ return getEncryptFlags();
+ }
+
+
+ /**
+ * The DbEnv.getEncryptFlags method returns the encryption flags.
+ * </p> <p>
+ *
+ * The DbEnv.getEncryptFlags method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getEncryptFlags method returns
+ * the encryption flags.</p>
+ */
+ public int getEncryptFlags() throws DbException {
+ return db_javaJNI.DbEnv_get_encrypt_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFlags()}
+ */
+ public int get_flags() throws DbException {
+ return getFlags();
+ }
+
+
+ /**
+ * The DbEnv.getFlags method returns the configuration flags.</p>
+ * <p>
+ *
+ * The DbEnv.getFlags method may be called at any time during the
+ * life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getFlags method returns the
+ * configuration flags.</p>
+ */
+ public int getFlags() throws DbException {
+ return db_javaJNI.DbEnv_get_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDbEnvHome()}
+ */
+ public String get_home() throws DbException {
+ return getDbEnvHome();
+ }
+
+
+ /**
+ * The DbEnv.getDbEnvHome method returns the database environment
+ * home directory.</p> <p>
+ *
+ * The DbEnv.getDbEnvHome method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getDbEnvHome method returns the
+ * database environment home directory.</p>
+ */
+ public String getDbEnvHome() throws DbException {
+ return db_javaJNI.DbEnv_get_home(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOpenFlags()}
+ */
+ public int get_open_flags() throws DbException {
+ return getOpenFlags();
+ }
+
+
+ /**
+ * The DbEnv.getOpenFlags method returns the open method flags.
+ * </p> <p>
+ *
+ * The DbEnv.getOpenFlags method may not be called before the
+ * DbEnv.open method has been called.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getOpenFlags method returns the
+ * open method flags.</p>
+ */
+ public int getOpenFlags() throws DbException {
+ return db_javaJNI.DbEnv_get_open_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getSegmentId()}
+ */
+ public long get_shm_key() throws DbException {
+ return getSegmentId();
+ }
+
+
+ /**
+ * The DbEnv.getSegmentId method returns the base segment ID.</p>
+ * <p>
+ *
+ * The DbEnv.getSegmentId method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getSegmentId method returns the
+ * base segment ID.</p>
+ */
+ public long getSegmentId() throws DbException {
+ return db_javaJNI.DbEnv_get_shm_key(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getTestAndSetSpins()}
+ */
+ public int get_tas_spins() throws DbException {
+ return getTestAndSetSpins();
+ }
+
+
+ /**
+ * The DbEnv.getTestAndSetSpins method returns the test-and-set
+ * spin count.</p> <p>
+ *
+ * The DbEnv.getTestAndSetSpins method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getTestAndSetSpins method
+ * returns the test-and-set spin count.</p>
+ */
+ public int getTestAndSetSpins() throws DbException {
+ return db_javaJNI.DbEnv_get_tas_spins(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getTmpDir()}
+ */
+ public String get_tmp_dir() throws DbException {
+ return getTmpDir();
+ }
+
+
+ /**
+ * The DbEnv.getTmpDir method returns the database environment
+ * temporary file directory.</p> <p>
+ *
+ * The DbEnv.getTmpDir method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getTmpDir method returns the
+ * database environment temporary file directory.</p>
+ */
+ public String getTmpDir() throws DbException {
+ return db_javaJNI.DbEnv_get_tmp_dir(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getVerbose(int)}
+ */
+ public boolean get_verbose(int which) throws DbException {
+ return getVerbose(which);
+ }
+
+
+ /**
+ * The DbEnv.getVerbose method returns whether the specified <b>
+ * which</b> parameter is currently set or not.</p> <p>
+ *
+ * The DbEnv.getVerbose method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param which the message value for which configuration
+ * is being checked.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getVerbose method returns
+ * whether the specified <b>which</b> parameter is currently
+ * set or not.</p>
+ */
+ public boolean getVerbose(int which) throws DbException {
+ return db_javaJNI.DbEnv_get_verbose(swigCPtr, which);
+ }
+
+
+ void open0(String db_home, int flags, int mode) {
+ db_javaJNI.DbEnv_open0(swigCPtr, db_home, flags, mode);
+ }
+
+
+ void remove0(String db_home, int flags) {
+ db_javaJNI.DbEnv_remove0(swigCPtr, db_home, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setCacheSize(long,int)}
+ */
+ public void set_cachesize(long bytes, int ncache) throws DbException {
+ setCacheSize(bytes, ncache);
+ }
+
+
+ /**
+ * Set the size of the shared memory buffer pool -- that is, the
+ * cache. The cache should be the size of the normal working data
+ * set of the application, with some small amount of additional
+ * memory for unusual situations. (Note: the working set is not
+ * the same as the number of pages accessed simultaneously, and
+ * is usually much larger.)</p> <p>
+ *
+ * The default cache size is 256KB, and may not be specified as
+ * less than 20KB. Any cache size less than 500MB is
+ * automatically increased by 25% to account for buffer pool
+ * overhead; cache sizes larger than 500MB are used as specified.
+ * The current maximum size of a single cache is 4GB. (All sizes
+ * are in powers-of-two, that is, 256KB is 2^32 not 256,000.) For
+ * information on tuning the Berkeley DB cache size, see <a
+ * href="{@docRoot}/../ref/am_conf/cachesize.html">Selecting a
+ * cache size</a> .</p> <p>
+ *
+ * It is possible to specify caches to Berkeley DB larger than
+ * 4GB and/or large enough they cannot be allocated contiguously
+ * on some architectures. For example, some releases of Solaris
+ * limit the amount of memory that may be allocated contiguously
+ * by a process. If <b>ncache</b> is 0 or 1, the cache will be
+ * allocated contiguously in memory. If it is greater than 1, the
+ * cache will be broken up into <b>ncache</b> equally sized,
+ * separate pieces of memory.</p> <p>
+ *
+ * The database environment's cache size may also be set using
+ * the environment's <b>DB_CONFIG</b> file. The syntax of the
+ * entry in that file is a single line with the string
+ * "set_cachesize", one or more whitespace characters, and the
+ * cache size specified in three parts: the gigabytes of cache,
+ * the additional bytes of cache, and the number of caches, also
+ * separated by whitespace characters. For example,
+ * "set_cachesize 2 524288000 3" would create a 2.5GB logical
+ * cache, split between three physical caches. Because the <b>
+ * DB_CONFIG</b> file is read when the database environment is
+ * opened, it will silently overrule configuration done before
+ * that time.</p> <p>
+ *
+ * The DbEnv.setCacheSize method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setCacheSize method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setCacheSize will be ignored.
+ * </p>
+ *
+ * @param bytes The size of the cache in
+ * bytes.
+ * @param ncache the number of caches to
+ * create.
+ * @throws IllegalArgumentException The DbEnv.setCacheSize
+ * method will fail and throw a IllegalArgumentException
+ * exception if the specified cache size was impossibly
+ * small; the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setCacheSize(long bytes, int ncache) throws DbException {
+ db_javaJNI.DbEnv_set_cachesize(swigCPtr, bytes, ncache);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setDataDir(String)}
+ */
+ public void set_data_dir(String dir) throws DbException {
+ setDataDir(dir);
+ }
+
+
+ /**
+ * Set the path of a directory to be used as the location of the
+ * access method database files. Paths specified to the {@link
+ * com.sleepycat.db.Db#open Db.open} function will be searched
+ * relative to this path. Paths set using this method are
+ * additive, and specifying more than one will result in each
+ * specified directory being searched for database files. If any
+ * directories are specified, created database files will always
+ * be created in the first path specified.</p> <p>
+ *
+ * If no database directories are specified, database files can
+ * exist only in the environment home directory. See <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB File
+ * Naming</a> for more information.</p> <p>
+ *
+ * For the greatest degree of recoverability from system or
+ * application failure, database files and log files should be
+ * located on separate physical devices.</p> <p>
+ *
+ * The database environment's data directories may also be set
+ * using the environment's <b>DB_CONFIG</b> file. The syntax of
+ * the entry in that file is a single line with the string
+ * "set_data_dir", one or more whitespace characters, and the
+ * directory name. </p> <p>
+ *
+ * The DbEnv.setDataDir method configures operations performed
+ * using the specified {@link com.sleepycat.db.DbEnv DbEnv}
+ * handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setDataDir method may not be called after the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} method is called. If
+ * the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setDataDir must be consistent
+ * with the existing environment or corruption can occur.</p>
+ *
+ * @param dir a directory to be used as a
+ * location for database files.
+ * @throws IllegalArgumentException The DbEnv.setDataDir method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setDataDir(String dir) throws DbException {
+ db_javaJNI.DbEnv_set_data_dir(swigCPtr, dir);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setEncrypted(String,int)}
+ */
+ public void set_encrypt(String passwd, int flags) throws DbException {
+ setEncrypted(passwd, flags);
+ }
+
+
+ /**
+ * Set the password used by the Berkeley DB library to perform
+ * encryption and decryption.</p> <p>
+ *
+ * The DbEnv.setEncrypted method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setEncrypted method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setEncrypted must be consistent
+ * with the existing environment or an error will be returned.
+ * </p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ENCRYPT_AES
+ * Db.DB_ENCRYPT_AES}<p>
+ *
+ * Use the Rijndael/AES (also known as the Advanced
+ * Encryption Standard and Federal Information Processing
+ * Standard (FIPS) 197) algorithm for encryption or
+ * decryption. </li>
+ * </ul>
+ *
+ * @param passwd the password used to perform
+ * encryption and decryption.
+ * @throws DbException The DbEnv.setEncrypted
+ * method may fail and throw {@link
+ * com.sleepycat.db.DbException DbException}, encapsulating
+ * one of the following non-zero errors:
+ * <li> Cryptography is not available in this Berkeley DB
+ * release.
+ * @throws IllegalArgumentException The DbEnv.setEncrypted
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setEncrypted(String passwd, int flags) throws DbException {
+ db_javaJNI.DbEnv_set_encrypt(swigCPtr, passwd, flags);
+ }
+
+
+ /**
+ * When an error occurs in the Berkeley DB library, an exception
+ * is thrown. In some cases, however, the <b>errno</b> value may
+ * be insufficient to completely describe the cause of the error,
+ * especially during initial application debugging. <p>
+ *
+ * The DbEnv.setOnError and {@link com.sleepycat.db.Db#setErrorHandler
+ * Db.setErrorHandler} methods are used to enhance the mechanism
+ * for reporting error messages to the application. The
+ * DbEnv.setOnError and {@link com.sleepycat.db.Db#setErrorHandler
+ * Db.setErrorHandler} methods must be called with a single
+ * object parameter. The object's class must implement the
+ * DbErrorHandler interface.</p> <p>
+ *
+ * In some cases, when an error occurs, Berkeley DB will invoke
+ * the object's errcall() method with two parameters; the first
+ * is the prefix string (as previously set by {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} or
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}), the second will be an error message
+ * string. It is up to this method to display the message in an
+ * appropriate manner.</p> <p>
+ *
+ * Alternatively, you can use the {@link
+ * com.sleepycat.db.DbEnv#setErrorStream DbEnv.setErrorStream}
+ * and {@link com.sleepycat.db.Db#setErrorStream
+ * Db.setErrorStream} methods to display the additional
+ * information via an output stream. You should not mix these
+ * approaches.</p> <p>
+ *
+ * This error-logging enhancement does not slow performance or
+ * significantly increase application size, and may be run during
+ * normal operation as well as during application debugging.</p>
+ * <p>
+ *
+ * The DbEnv.setOnError method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param db_errcall_fcn the application-specified error
+ * reporting function. The function takes two parameters: <p>
+ *
+ * The <b>errpfx</b> parameter is the prefix string (as
+ * previously set by {@link com.sleepycat.db.Db#setErrorPrefix
+ * Db.setErrorPrefix} or {@link
+ * com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}). <p>
+ *
+ * The <b>msg</b> parameter is the error message string.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setErrorHandler(DbErrorHandler db_errcall_fcn) throws DbException {
+ db_javaJNI.DbEnv_setErrorHandler(swigCPtr, (error_handler = db_errcall_fcn));
}
-}
-// end of DbEnv.java
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setFlags(int,boolean)}
+ */
+ public void set_flags(int flags, boolean onoff) throws DbException {
+ setFlags(flags, onoff);
+ }
+
+
+ /**
+ * Configure a database environment.</p> <p>
+ *
+ * The database environment's flag values may also be set using
+ * the environment's <b>DB_CONFIG</b> file. The syntax of the
+ * entry in that file is a single line with the string
+ * "set_flags", one or more whitespace characters, and the method
+ * flag parameter as a string; for example, "set_flags
+ * DB_TXN_NOSYNC". Because the <b>DB_CONFIG</b> file is read when
+ * the database environment is opened, it will silently overrule
+ * configuration done before that time.</p>
+ *
+ * @param flags must be set by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AUTO_COMMIT
+ * Db.DB_AUTO_COMMIT}<p>
+ *
+ * If set, operations for which no explicit transaction
+ * handle was specified, and which modify databases in the
+ * database environment, will be automatically enclosed
+ * within a transaction. If the call succeeds, changes made
+ * by the operation will be recoverable. If the call fails,
+ * the operation will have made no changes. <p>
+ *
+ * Calling DbEnv.setFlags with the {@link
+ * com.sleepycat.db.Db#DB_AUTO_COMMIT <code>Db.DB_AUTO_COMMIT</code>
+ * } flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the {@link
+ * com.sleepycat.db.Db#DB_AUTO_COMMIT <code>Db.DB_AUTO_COMMIT</code>
+ * } flag or the flag should be specified in the <b>
+ * DB_CONFIG</b> configuration file.</p> <p>
+ *
+ * The {@link com.sleepycat.db.Db#DB_AUTO_COMMIT <code>Db.DB_AUTO_COMMIT</code>
+ * } flag may be used to configure Berkeley DB at any time
+ * during the life of the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CDB_ALLDB
+ * Db.DB_CDB_ALLDB}<p>
+ *
+ * If set, Berkeley DB Concurrent Data Store applications
+ * will perform locking on an environment-wide basis rather
+ * than on a per-database basis. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_CDB_ALLDB</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_CDB_ALLDB</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_CDB_ALLDB</code> flag may be used to
+ * configure Berkeley DB only before the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRECT_DB
+ * Db.DB_DIRECT_DB}<p>
+ *
+ * Turn off system buffering of Berkeley DB database files
+ * to avoid double caching. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_DIRECT_DB</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_DIRECT_DB</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_DIRECT_DB</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRECT_LOG
+ * Db.DB_DIRECT_LOG}<p>
+ *
+ * Turn off system buffering of Berkeley DB log files to
+ * avoid double caching. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_DIRECT_LOG</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_DIRECT_LOG</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_DIRECT_LOG</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOG_AUTOREMOVE
+ * Db.DB_LOG_AUTOREMOVE}<p>
+ *
+ * If set, Berkeley DB will automatically remove log files
+ * that are no longer needed. Automatic log file removal is
+ * likely to make catastrophic recovery impossible. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_LOG_AUTOREMOVE</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_LOG_AUTOREMOVE</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_LOG_AUTOREMOVE</code> flag may be used
+ * to configure Berkeley DB at any time during the life of
+ * the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOLOCKING
+ * Db.DB_NOLOCKING}<p>
+ *
+ * If set, Berkeley DB will grant all requested mutual
+ * exclusion mutexes and database locks without regard for
+ * their actual availability. This functionality should
+ * never be used for purposes other than debugging. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_NOLOCKING</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). </p> <p>
+ *
+ * The <code>Db.DB_NOLOCKING</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOMMAP Db.DB_NOMMAP}
+ * <p>
+ *
+ * If set, Berkeley DB will copy read-only database files
+ * into the local cache instead of potentially mapping them
+ * into process memory (see the description of the {@link
+ * com.sleepycat.db.DbEnv#setMemoryPoolMapSize
+ * DbEnv.setMemoryPoolMapSize} method for further
+ * information). <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_NOMMAP</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_NOMMAP</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_NOMMAP</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOPANIC
+ * Db.DB_NOPANIC}<p>
+ *
+ * If set, Berkeley DB will ignore any panic state in the
+ * database environment. (Database environments in a panic
+ * state normally refuse all attempts to call Berkeley DB
+ * functions, returning <a href="{@docRoot}/../ref/program/errorret.html#DB_RUNRECOVERY">
+ * <code>Db.DB_RUNRECOVERY</code></a> .) This functionality
+ * should never be used for purposes other than debugging.
+ * <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_NOPANIC</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). </p> <p>
+ *
+ * The <code>Db.DB_NOPANIC</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_OVERWRITE
+ * Db.DB_OVERWRITE}<p>
+ *
+ * Overwrite files stored in encrypted formats before
+ * deleting them. Berkeley DB overwrites files using
+ * alternating 0xff, 0x00 and 0xff byte patterns. For file
+ * overwriting to be effective, the underlying file must be
+ * stored on a fixed-block filesystem. Systems with
+ * journaling or logging filesystems will require operating
+ * system support and probably modification of the Berkeley
+ * DB sources. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_OVERWRITE</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). </p> <p>
+ *
+ * The <code>Db.DB_OVERWRITE</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PANIC_ENVIRONMENT
+ * Db.DB_PANIC_ENVIRONMENT}<p>
+ *
+ * If set, Berkeley DB will set the panic state for the
+ * database environment. (Database environments in a panic
+ * state normally refuse all attempts to call Berkeley DB
+ * functions, returning <a href="{@docRoot}/../ref/program/errorret.html#DB_RUNRECOVERY">
+ * <code>Db.DB_RUNRECOVERY</code></a> .) This flag may not
+ * be specified using the environment's <b>DB_CONFIG</b>
+ * file. This flag may be used to configure Berkeley DB
+ * only after the {@link com.sleepycat.db.DbEnv#open
+ * DbEnv.open} method is called. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_PANIC_ENVIRONMENT</code>
+ * flag affects the database environment, including all
+ * threads of control accessing the database environment.
+ * </p> <p>
+ *
+ * The <code>Db.DB_PANIC_ENVIRONMENT</code> flag may be
+ * used to configure Berkeley DB at any time during the
+ * life of the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REGION_INIT
+ * Db.DB_REGION_INIT}<p>
+ *
+ * In some applications, the expense of page-faulting the
+ * underlying shared memory regions can affect performance.
+ * (For example, if the page-fault occurs while holding a
+ * lock, other lock requests can convoy, and overall
+ * throughput may decrease.) If set, Berkeley DB will
+ * page-fault shared regions into memory when initially
+ * creating or joining a Berkeley DB environment. In
+ * addition, Berkeley DB will write the shared regions when
+ * creating an environment, forcing the underlying virtual
+ * memory and filesystems to instantiate both the necessary
+ * memory and the necessary disk space. This can also avoid
+ * out-of-disk space failures later on. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_REGION_INIT</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_REGION_INIT</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_REGION_INIT</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TIME_NOTGRANTED
+ * Db.DB_TIME_NOTGRANTED}<p>
+ *
+ * If set, database calls timing out based on lock or
+ * transaction timeout values will throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception instead of {@link
+ * com.sleepycat.db.DbDeadlockException
+ * DbDeadlockException}. This allows applications to
+ * distinguish between operations which have deadlocked and
+ * operations which have exceeded their time limits. <p>
+ *
+ * Calling DbEnv.setFlags with the {@link
+ * com.sleepycat.db.Db#DB_TIME_NOTGRANTED <code>Db.DB_TIME_NOTGRANTED</code>
+ * } flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the {@link
+ * com.sleepycat.db.Db#DB_TIME_NOTGRANTED <code>Db.DB_TIME_NOTGRANTED</code>
+ * } flag or the flag should be specified in the <b>
+ * DB_CONFIG</b> configuration file.</p> <p>
+ *
+ * The {@link com.sleepycat.db.Db#DB_TIME_NOTGRANTED <code>Db.DB_TIME_NOTGRANTED</code>
+ * } flag may be used to configure Berkeley DB at any time
+ * during the life of the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOSYNC
+ * Db.DB_TXN_NOSYNC}<p>
+ *
+ * If set, Berkeley DB will not write or synchronously
+ * flush the log on transaction commit. This means that
+ * transactions exhibit the ACI (atomicity, consistency,
+ * and isolation) properties, but not D (durability); that
+ * is, database integrity will be maintained, but if the
+ * application or system fails, it is possible some number
+ * of the most recently committed transactions may be
+ * undone during recovery. The number of transactions at
+ * risk is governed by how many log updates can fit into
+ * the log buffer, how often the operating system flushes
+ * dirty buffers to disk, and how often the log is
+ * checkpointed. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_TXN_NOSYNC</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_TXN_NOSYNC</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_TXN_NOSYNC</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOT_DURABLE
+ * Db.DB_TXN_NOT_DURABLE}<p>
+ *
+ * If set, Berkeley DB will not write log records. This
+ * means that transactions exhibit the ACI (atomicity,
+ * consistency, and isolation) properties, but not D
+ * (durability); that is, database integrity will be
+ * maintained, but if the application or system fails,
+ * integrity will not persist. All database files must be
+ * verified and/or restored from backup after a failure. In
+ * order to ensure integrity after application shut down,
+ * all database handles must be closed without specifying
+ * {@link com.sleepycat.db.Db#DB_NOSYNC <code>Db.DB_NOSYNC</code>
+ * }, or all database changes must be flushed from the
+ * database environment cache using the {@link
+ * com.sleepycat.db.DbEnv#txnCheckpoint
+ * DbEnv.txnCheckpoint} method. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_TXN_NOT_DURABLE</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_TXN_NOT_DURABLE</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_TXN_NOT_DURABLE</code> flag may be used
+ * to configure Berkeley DB at any time during the life of
+ * the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_WRITE_NOSYNC
+ * Db.DB_TXN_WRITE_NOSYNC}<p>
+ *
+ * If set, Berkeley DB will write, but will not
+ * synchronously flush, the log on transaction commit. This
+ * means that transactions exhibit the ACI (atomicity,
+ * consistency, and isolation) properties, but not D
+ * (durability); that is, database integrity will be
+ * maintained, but if the system fails, it is possible some
+ * number of the most recently committed transactions may
+ * be undone during recovery. The number of transactions at
+ * risk is governed by how often the system flushes dirty
+ * buffers to disk and how often the log is checkpointed.
+ * <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_TXN_WRITE_NOSYNC</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_TXN_WRITE_NOSYNC</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_TXN_WRITE_NOSYNC</code> flag may be used
+ * to configure Berkeley DB at any time during the life of
+ * the application.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_YIELDCPU
+ * Db.DB_YIELDCPU}<p>
+ *
+ * If set, Berkeley DB will yield the processor immediately
+ * after each page or mutex acquisition. This functionality
+ * should never be used for purposes other than stress
+ * testing. <p>
+ *
+ * Calling DbEnv.setFlags with the <code>Db.DB_YIELDCPU</code>
+ * flag only affects the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle (and any other
+ * Berkeley DB handles opened within the scope of that
+ * handle). For consistent behavior across the environment,
+ * all {@link com.sleepycat.db.DbEnv DbEnv} handles opened
+ * in the environment must either set the <code>Db.DB_YIELDCPU</code>
+ * flag or the flag should be specified in the <b>DB_CONFIG
+ * </b> configuration file.</p> <p>
+ *
+ * The <code>Db.DB_YIELDCPU</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * @param onoff If the <b>onoff</b>
+ * parameter is false, the specified flags are cleared;
+ * otherwise they are set.
+ * @throws IllegalArgumentException The DbEnv.setFlags method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void setFlags(int flags, boolean onoff) throws DbException {
+ db_javaJNI.DbEnv_set_flags(swigCPtr, flags, onoff);
+ }
+
+
+ public void setFeedbackHandler(DbEnvFeedbackHandler db_feedback_fcn) throws DbException {
+ db_javaJNI.DbEnv_setFeedbackHandler(swigCPtr, (env_feedback_handler = db_feedback_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setMemoryPoolMapSize(long)}
+ */
+ public void set_mp_mmapsize(long mp_mmapsize) throws DbException {
+ setMemoryPoolMapSize(mp_mmapsize);
+ }
+
+
+ /**
+ * Files that are opened read-only in the pool (and that satisfy
+ * a few other criteria) are, by default, mapped into the process
+ * address space instead of being copied into the local cache.
+ * This can result in better-than-usual performance because
+ * available virtual memory is normally much larger than the
+ * local cache, and page faults are faster than page copying on
+ * many systems. However, it can cause resource starvation in the
+ * presence of limited virtual memory, and it can result in
+ * immense process sizes in the presence of large databases.</p>
+ * <p>
+ *
+ * The DbEnv.getMemoryPoolMapSize method sets the maximum file
+ * size, in bytes, for a file to be mapped into the process
+ * address space. If no value is specified, it defaults to 10MB.
+ * </p> <p>
+ *
+ * The database environment's maximum mapped file size may also
+ * be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_mp_mmapsize", one or more whitespace characters,
+ * and the size in bytes. Because the <b>DB_CONFIG</b> file is
+ * read when the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setMemoryPoolMapSize method configures operations
+ * performed using the specified {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setMemoryPoolMapSize method may be called at any
+ * time during the life of the application.</p>
+ *
+ * @param mp_mmapsize the maximum file size, in
+ * bytes, for a file to be mapped into the process address
+ * space.
+ * @throws IllegalArgumentException The
+ * DbEnv.setMemoryPoolMapSize method will fail and throw a
+ * IllegalArgumentException exception if the method was
+ * called after {@link com.sleepycat.db.DbEnv#open
+ * DbEnv.open} was called; or if an invalid flag value or
+ * parameter was specified.
+ */
+ public void setMemoryPoolMapSize(long mp_mmapsize) throws DbException {
+ db_javaJNI.DbEnv_set_mp_mmapsize(swigCPtr, mp_mmapsize);
+ }
+
+
+ public void setPanicHandler(DbPanicHandler db_panic_fcn) throws DbException {
+ db_javaJNI.DbEnv_setPanicHandler(swigCPtr, (panic_handler = db_panic_fcn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRpcServer(DbClient,String,long,long,int)}
+ */
+ public void set_rpc_server(DbClient client, String host, long cl_timeout, long sv_timeout, int flags) throws DbException {
+ setRpcServer(client, host, cl_timeout, sv_timeout, flags);
+ }
+
+
+ /**
+ * Establishes a connection for this <b>dbenv</b> to a RPC
+ * server.</p> The DbEnv.setRpcServer method configures
+ * operations performed using the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle, not all operations
+ * performed on the underlying database environment.</p> <p>
+ *
+ * The DbEnv.setRpcServer method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. </p>
+ *
+ * @param cl_timeout specifies the number of
+ * seconds the client should wait for results to come back
+ * from the server. Once the timeout has expired on any
+ * communication with the server, Db.DB_NOSERVER will be
+ * returned. If this value is zero, a default timeout is
+ * used.
+ * @param client reserved for future use. If
+ * it is not NULL, an exception is thrown.
+ * @param host the host to which the
+ * Berkeley DB server will connect and create a channel for
+ * communication.
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @param sv_timeout specifies the number of
+ * seconds the server should allow a client connection to
+ * remain idle before assuming that the client is gone. Once
+ * that timeout has been reached, the server releases all
+ * resources associated with that client connection.
+ * Subsequent attempts by that client to communicate with the
+ * server result in Db.DB_NOSERVER_ID, indicating that an
+ * invalid identifier has been given to the server. This
+ * value can be considered a hint to the server. The server
+ * may alter this value based on its own policies or allowed
+ * values. If this value is zero, a default timeout is used.
+ * @throws IllegalArgumentException The DbEnv.setRpcServer
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ */
+ public void setRpcServer(DbClient client, String host, long cl_timeout, long sv_timeout, int flags) throws DbException {
+ db_javaJNI.DbEnv_set_rpc_server(swigCPtr, client, host, cl_timeout, sv_timeout, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setSegmentId(long)}
+ */
+ public void set_shm_key(long shm_key) throws DbException {
+ setSegmentId(shm_key);
+ }
+
+
+ /**
+ * Specify a base segment ID for Berkeley DB environment shared
+ * memory regions created in system memory on VxWorks or systems
+ * supporting X/Open-style shared memory interfaces; for example,
+ * UNIX systems supporting <b>shmget</b> (2) and related System V
+ * IPC interfaces.</p> <p>
+ *
+ * This base segment ID will be used when Berkeley DB shared
+ * memory regions are first created. It will be incremented a
+ * small integer value each time a new shared memory region is
+ * created; that is, if the base ID is 35, the first shared
+ * memory region created will have a segment ID of 35, and the
+ * next one will have a segment ID between 36 and 40 or so. A
+ * Berkeley DB environment always creates a master shared memory
+ * region; an additional shared memory region for each of the
+ * subsystems supported by the environment (Locking, Logging,
+ * Memory Pool and Transaction); plus an additional shared memory
+ * region for each additional memory pool cache that is
+ * supported. Already existing regions with the same segment IDs
+ * will be removed. See <a href="{@docRoot}/../ref/env/region.html">
+ * Shared Memory Regions</a> for more information.</p> <p>
+ *
+ * The intent behind this method is two-fold: without it,
+ * applications have no way to ensure that two Berkeley DB
+ * applications don't attempt to use the same segment IDs when
+ * creating different Berkeley DB environments. In addition, by
+ * using the same segment IDs each time the environment is
+ * created, previously created segments will be removed, and the
+ * set of segments on the system will not grow without bound.</p>
+ * <p>
+ *
+ * The database environment's base segment ID may also be set
+ * using the environment's <b>DB_CONFIG</b> file. The syntax of
+ * the entry in that file is a single line with the string
+ * "set_shm_key", one or more whitespace characters, and the ID.
+ * Because the <b>DB_CONFIG</b> file is read when the database
+ * environment is opened, it will silently overrule configuration
+ * done before that time.</p> <p>
+ *
+ * The DbEnv.setSegmentId method configures operations performed
+ * using the specified {@link com.sleepycat.db.DbEnv DbEnv}
+ * handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setSegmentId method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setSegmentId must be consistent
+ * with the existing environment or corruption can occur.</p>
+ *
+ * @param shm_key the base segment ID for the
+ * database environment.
+ * @throws IllegalArgumentException The DbEnv.setSegmentId
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setSegmentId(long shm_key) throws DbException {
+ db_javaJNI.DbEnv_set_shm_key(swigCPtr, shm_key);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTestAndSetSpins(int)}
+ */
+ public void set_tas_spins(int tas_spins) throws DbException {
+ setTestAndSetSpins(tas_spins);
+ }
+
+
+ /**
+ * Specify that test-and-set mutexes should spin <b>tas_spins</b>
+ * times without blocking. The value defaults to 1 on
+ * uniprocessor systems and to 50 times the number of processors
+ * on multiprocessor systems.</p> <p>
+ *
+ * The database environment's test-and-set spin count may also be
+ * set using the environment's <b>DB_CONFIG</b> file. The syntax
+ * of the entry in that file is a single line with the string
+ * "set_tas_spins", one or more whitespace characters, and the
+ * number of spins. Because the <b>DB_CONFIG</b> file is read
+ * when the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setTestAndSetSpins method configures operations
+ * performed using the specified {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setTestAndSetSpins method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @param tas_spins the number of spins
+ * test-and-set mutexes should execute before blocking.
+ * @throws IllegalArgumentException The DbEnv.setTestAndSetSpins
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ */
+ public void setTestAndSetSpins(int tas_spins) throws DbException {
+ db_javaJNI.DbEnv_set_tas_spins(swigCPtr, tas_spins);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTimeout(long,int)}
+ */
+ public void set_timeout(long timeout, int flags) throws DbException {
+ setTimeout(timeout, flags);
+ }
+
+
+ /**
+ * The DbEnv.setTimeout method sets timeout values for locks or
+ * transactions in the database environment.</p> <p>
+ *
+ * Timeouts are checked whenever a thread of control blocks on a
+ * lock or when deadlock detection is performed. (In the case of
+ * Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
+ * through the Lock subsystem interfaces. In the case of
+ * Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of
+ * a transaction. In either case, it may be a lock requested by
+ * the database access methods underlying the application.) As
+ * timeouts are only checked when the lock request first blocks
+ * or when deadlock detection is performed, the accuracy of the
+ * timeout depends on how often deadlock detection is performed.
+ * </p> <p>
+ *
+ * Timeout values specified for the database environment may be
+ * overridden on a per-lock or per-transaction basis. See {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} and {@link
+ * com.sleepycat.db.DbTxn#setTimeout DbTxn.setTimeout} for more
+ * information.</p> <p>
+ *
+ * The DbEnv.setTimeout method configures a database environment,
+ * not only operations performed using the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setTimeout method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_LOCK_TIMEOUT
+ * Db.DB_SET_LOCK_TIMEOUT}<p>
+ *
+ * Set the timeout value for locks in this database
+ * environment. <p>
+ *
+ * The database environment's lock timeout value may also
+ * be set using the environment's <b>DB_CONFIG</b> file.
+ * The syntax of the entry in that file is a single line
+ * with the string "set_lock_timeout", one or more
+ * whitespace characters, and the lock timeout value.
+ * Because the <b>DB_CONFIG</b> file is read when the
+ * database environment is opened, it will silently
+ * overrule configuration done before that time.</p> </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_TXN_TIMEOUT
+ * Db.DB_SET_TXN_TIMEOUT}<p>
+ *
+ * Set the timeout value for transactions in this database
+ * environment. <p>
+ *
+ * The database environment's transaction timeout value may
+ * also be set using the environment's <b>DB_CONFIG</b>
+ * file. The syntax of the entry in that file is a single
+ * line with the string "set_txn_timeout", one or more
+ * whitespace characters, and the transaction timeout
+ * value. Because the <b>DB_CONFIG</b> file is read when
+ * the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> </li>
+ *
+ * </ul>
+ *
+ * @param timeout the timeout value. It must
+ * be specified as an unsigned 32-bit number of microseconds,
+ * limiting the maximum timeout to roughly 71 minutes.
+ * @throws IllegalArgumentException The DbEnv.setTimeout method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void setTimeout(long timeout, int flags) throws DbException {
+ db_javaJNI.DbEnv_set_timeout(swigCPtr, timeout, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTmpDir(String)}
+ */
+ public void set_tmp_dir(String dir) throws DbException {
+ setTmpDir(dir);
+ }
+
+
+ /**
+ * Specify the path of a directory to be used as the location of
+ * temporary files. The files created to back in-memory access
+ * method databases will be created relative to this path. These
+ * temporary files can be quite large, depending on the size of
+ * the database.</p> <p>
+ *
+ * If no directories are specified, the following alternatives
+ * are checked in the specified order. The first existing
+ * directory path is used for all temporary files.</p>
+ * <ol><p>
+ *
+ *
+ * <li> The value of the environment variable <b>TMPDIR</b> .
+ *
+ * <li> The value of the environment variable <b>TEMP</b> .
+ *
+ * <li> The value of the environment variable <b>TMP</b> .
+ * <li> The value of the environment variable <b>TempFolder</b>
+ * .
+ * <li> The value returned by the GetTempPath interface.
+ * <li> The directory <b>/var/tmp</b> .
+ * <li> The directory <b>/usr/tmp</b> .
+ * <li> The directory <b>/temp</b> .
+ * <li> The directory <b>/tmp</b> .
+ * <li> The directory <b>C:/temp</b> .
+ * <li> The directory <b>C:/tmp</b> .
+ * </ol>
+ * <p>
+ *
+ * Note: environment variables are only checked if one of the
+ * {@link com.sleepycat.db.Db#DB_USE_ENVIRON Db.DB_USE_ENVIRON}
+ * or {@link com.sleepycat.db.Db#DB_USE_ENVIRON_ROOT
+ * Db.DB_USE_ENVIRON_ROOT} flags were specified.</p> <p>
+ *
+ * Note: the GetTempPath interface is only checked on Win/32
+ * platforms.</p> <p>
+ *
+ * The database environment's temporary file directory may also
+ * be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_tmp_dir", one or more whitespace characters, and
+ * the directory name. Because the <b>DB_CONFIG</b> file is read
+ * when the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setTmpDir method configures operations performed
+ * using the specified {@link com.sleepycat.db.DbEnv DbEnv}
+ * handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setTmpDir method may not be called after the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} method is called. If
+ * the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setTmpDir must be consistent
+ * with the existing environment or corruption can occur.</p>
+ *
+ * @param dir the directory to be used to
+ * store temporary files.
+ * @throws IllegalArgumentException The DbEnv.setTmpDir method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setTmpDir(String dir) throws DbException {
+ db_javaJNI.DbEnv_set_tmp_dir(swigCPtr, dir);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTxnMax(int)}
+ */
+ public void set_tx_max(int max) throws DbException {
+ setTxnMax(max);
+ }
+
+
+ /**
+ * Configure the Berkeley DB database environment to support at
+ * least <b>max</b> active transactions. This value bounds the
+ * size of the memory allocated for transactions. Child
+ * transactions are counted as active until they either commit or
+ * abort.</p> <p>
+ *
+ * When all of the memory available in the database environment
+ * for transactions is in use, calls to {@link
+ * com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin} will fail
+ * (until some active transactions complete). If this interface
+ * is never called, the database environment is configured to
+ * support at least 20 active transactions.</p> <p>
+ *
+ * The database environment's number of active transactions may
+ * also be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_tx_max", one or more whitespace characters, and
+ * the number of transactions. Because the <b>DB_CONFIG</b> file
+ * is read when the database environment is opened, it will
+ * silently overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setTxnMax method configures a database environment,
+ * not only operations performed using the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setTxnMax method may not be called after the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} method is called. If
+ * the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setTxnMax will be ignored. </p>
+ *
+ * @param max The <b>max</b> parameter
+ * configures the minimum number of simultaneously active
+ * transactions supported by Berkeley DB database
+ * environment.
+ * @throws IllegalArgumentException The DbEnv.setTxnMax method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setTxnMax(int max) throws DbException {
+ db_javaJNI.DbEnv_set_tx_max(swigCPtr, max);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setAppDispatch(DbAppDispatch)}
+ */
+ public void set_app_dispatch(DbAppDispatch tx_recover) throws DbException {
+ setAppDispatch(tx_recover);
+ }
+
+
+ public void setAppDispatch(DbAppDispatch tx_recover) throws DbException {
+ db_javaJNI.DbEnv_set_app_dispatch(swigCPtr, (app_dispatch_handler = tx_recover));
+ }
+
+
+ void set_tx_timestamp0(long timestamp) {
+ db_javaJNI.DbEnv_set_tx_timestamp0(swigCPtr, timestamp);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setVerbose(int,boolean)}
+ */
+ public void set_verbose(int which, boolean onoff) throws DbException {
+ setVerbose(which, onoff);
+ }
+
+
+ /**
+ * The DbEnv.setVerbose method turns specific additional
+ * informational and debugging messages in the Berkeley DB
+ * message output on and off. To see the additional messages,
+ * verbose messages must also be configured for the application.
+ * For more information on verbose messages, see the {@link
+ * com.sleepycat.db.Db#setErrorStream Db.setErrorStream} method.
+ * </p> <p>
+ *
+ * The database environment's messages may also be set using the
+ * environment's <b>DB_CONFIG</b> file. The syntax of the entry
+ * in that file is a single line with the string "set_verbose",
+ * one or more whitespace characters, and the method <b>which</b>
+ * parameter as a string; for example, "set_verbose
+ * DB_VERB_CHKPOINT". Because the <b>DB_CONFIG</b> file is read
+ * when the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setVerbose method configures operations performed
+ * using the specified {@link com.sleepycat.db.DbEnv DbEnv}
+ * handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setVerbose method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param onoff If the <b>onoff</b>
+ * parameter is set to true, the additional messages are
+ * output.
+ * @param which must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERB_CHKPOINT
+ * Db.DB_VERB_CHKPOINT}<p>
+ *
+ * Display checkpoint location information when searching
+ * the log for checkpoints. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERB_DEADLOCK
+ * Db.DB_VERB_DEADLOCK}<p>
+ *
+ * Display additional information when doing deadlock
+ * detection. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERB_RECOVERY
+ * Db.DB_VERB_RECOVERY}<p>
+ *
+ * Display additional information when performing recovery.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERB_REPLICATION
+ * Db.DB_VERB_REPLICATION}<p>
+ *
+ * Display additional information when processing
+ * replication messages. <p>
+ *
+ * Note, to get complete replication logging when debugging
+ * replication applications, you must also configure and
+ * build the Berkeley DB library with the <a
+ * href="{@docRoot}/../ref/build_unix/conf.html">
+ * --enable-diagnostic</a> configuration option as well as
+ * call the DbEnv.setVerbose method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERB_WAITSFOR
+ * Db.DB_VERB_WAITSFOR}<p>
+ *
+ * Display the waits-for table when doing deadlock
+ * detection. </li>
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.setVerbose method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void setVerbose(int which, boolean onoff) throws DbException {
+ db_javaJNI.DbEnv_set_verbose(swigCPtr, which, onoff);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLockConflicts()}
+ */
+ public byte[][] get_lk_conflicts() throws DbException {
+ return getLockConflicts();
+ }
+
+
+ /**
+ * The DbEnv.getLockConflicts method returns the conflicts array.
+ * </p> <p>
+ *
+ * The DbEnv.getLockConflicts method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLockConflicts method returns
+ * the conflicts array.</p>
+ */
+ public byte[][] getLockConflicts() throws DbException {
+ return db_javaJNI.DbEnv_get_lk_conflicts(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLockDetect()}
+ */
+ public int get_lk_detect() throws DbException {
+ return getLockDetect();
+ }
+
+
+ /**
+ * The DbEnv.getLockDetect method returns the deadlock detector
+ * configuration.</p> <p>
+ *
+ * The DbEnv.getLockDetect method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLockDetect method returns
+ * the deadlock detector configuration.</p>
+ */
+ public int getLockDetect() throws DbException {
+ return db_javaJNI.DbEnv_get_lk_detect(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLockMaxLocks()}
+ */
+ public int get_lk_max_locks() throws DbException {
+ return getLockMaxLocks();
+ }
+
+
+ /**
+ * The DbEnv.setLockMaxLocks method returns the maximum number of
+ * locks.</p> <p>
+ *
+ * The DbEnv.setLockMaxLocks method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.setLockMaxLocks method returns
+ * the maximum number of locks.</p>
+ */
+ public int getLockMaxLocks() throws DbException {
+ return db_javaJNI.DbEnv_get_lk_max_locks(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLockMaxLockers()}
+ */
+ public int get_lk_max_lockers() throws DbException {
+ return getLockMaxLockers();
+ }
+
+
+ /**
+ * The DbEnv.getLockMaxLockers method returns the maximum number
+ * of lockers.</p> <p>
+ *
+ * The DbEnv.getLockMaxLockers method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLockMaxLockers method
+ * returns the maximum number of lockers.</p>
+ */
+ public int getLockMaxLockers() throws DbException {
+ return db_javaJNI.DbEnv_get_lk_max_lockers(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLockMaxObjects()}
+ */
+ public int get_lk_max_objects() throws DbException {
+ return getLockMaxObjects();
+ }
+
+
+ /**
+ * The DbEnv.getLockMaxObjects method returns the maximum number
+ * of locked objects.</p> <p>
+ *
+ * The DbEnv.getLockMaxObjects method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLockMaxObjects method
+ * returns the maximum number of locked objects.</p>
+ */
+ public int getLockMaxObjects() throws DbException {
+ return db_javaJNI.DbEnv_get_lk_max_objects(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockDetect(int,int)}
+ */
+ public int lock_detect(int flags, int atype) throws DbException {
+ return lockDetect(flags, atype);
+ }
+
+
+ /**
+ * The DbEnv.lockDetect method runs one iteration of the deadlock
+ * detector. The deadlock detector traverses the lock table and
+ * marks one of the participating lock requesters for rejection
+ * in each deadlock it finds.</p>
+ *
+ * @param atype specifies which lock
+ * request(s) to reject. It must be set to one of the
+ * following list:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_DEFAULT
+ * Db.DB_LOCK_DEFAULT}<p>
+ *
+ * Use whatever lock policy was specified when the database
+ * environment was created. If no lock policy has yet been
+ * specified, set the lock policy to <code>Db.DB_LOCK_RANDOM</code>
+ * . </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_EXPIRE
+ * Db.DB_LOCK_EXPIRE}<p>
+ *
+ * Reject lock requests which have timed out. No other
+ * deadlock detection is performed. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MAXLOCKS
+ * Db.DB_LOCK_MAXLOCKS}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * greatest number of locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MINLOCKS
+ * Db.DB_LOCK_MINLOCKS}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * fewest number of locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MINWRITE
+ * Db.DB_LOCK_MINWRITE}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * fewest number of write locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_OLDEST
+ * Db.DB_LOCK_OLDEST}<p>
+ *
+ * Reject the lock request for the oldest locker ID. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_RANDOM
+ * Db.DB_LOCK_RANDOM}<p>
+ *
+ * Reject the lock request for a random locker ID. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_YOUNGEST
+ * Db.DB_LOCK_YOUNGEST}<p>
+ *
+ * Reject the lock request for the youngest locker ID.
+ * </li>
+ * </ul>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws IllegalArgumentException The DbEnv.lockDetect method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.lockDetect method
+ * returns the number of lock requests that were rejected.
+ * </p>
+ */
+ public int lockDetect(int flags, int atype) throws DbException {
+ return db_javaJNI.DbEnv_lock_detect(swigCPtr, flags, atype);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockGet(int,int,Dbt,int)}
+ */
+ public DbLock lock_get(int locker, int flags, Dbt object, int lock_mode) throws DbException {
+ return lockGet(locker, flags, object, lock_mode);
+ }
+
+
+ /**
+ * The DbEnv.lockGet method acquires a lock from the lock table,
+ * returning information about it in a DbLock object.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_NOWAIT
+ * Db.DB_LOCK_NOWAIT}<p>
+ *
+ * If a lock cannot be granted because the requested lock
+ * conflicts with an existing lock, throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} immediately instead of
+ * waiting for the lock to become available. </li>
+ * </ul>
+ *
+ * @param lock_mode used as an index into the
+ * environment's lock conflict matrix. When using the default
+ * lock conflict matrix, <b>lock_mode</b> must be set to one
+ * of the following values: read (shared) write (exclusive)
+ * intention to write (shared) intention to read (shared)
+ * intention to read and write (shared) <p>
+ *
+ * See {@link com.sleepycat.db.DbEnv#setLockConflicts
+ * DbEnv.setLockConflicts} and <a
+ * href="{@docRoot}/../ref/lock/stdmode.html">Standard Lock
+ * Modes</a> for more information on the lock conflict
+ * matrix.</p>
+ * @param locker an unsigned 32-bit integer
+ * quantity. It represents the entity requesting the lock.
+ * @param object an untyped byte string that
+ * specifies the object to be locked. Applications using the
+ * locking subsystem directly while also doing locking via
+ * the Berkeley DB access methods must take care not to
+ * inadvertently lock objects that happen to be equal to the
+ * unique file IDs used to lock files. See <a
+ * href="{@docRoot}/../ref/lock/am_conv.html">Access method
+ * locking conventions</a> for more information.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the DbEnv.lockGet method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the DbEnv.lockGet method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws DbLockNotGrantedException If the {@link
+ * com.sleepycat.db.Db#DB_LOCK_NOWAIT Db.DB_LOCK_NOWAIT} flag
+ * or lock timers were configured and the lock could not be
+ * granted before the wait-time expired, the DbEnv.lockGet
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The DbEnv.lockGet method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @throws DbMemoryException If the maximum number of
+ * locks has been reached, the DbEnv.lockGet method will fail
+ * and throw a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} exception.
+ * @return The DbEnv.lockGet method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public DbLock lockGet(int locker, int flags, Dbt object, int lock_mode) throws DbException {
+ long cPtr = db_javaJNI.DbEnv_lock_get(swigCPtr, locker, flags, object, lock_mode);
+ return (cPtr == 0) ? null : new DbLock(cPtr, true);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockId()}
+ */
+ public int lock_id() throws DbException {
+ return lockId();
+ }
+
+
+ /**
+ * The DbEnv.lockId method returns a locker ID, which is
+ * guaranteed to be unique in the specified lock table.</p> <p>
+ *
+ * The {@link com.sleepycat.db.DbEnv#lockIdFree DbEnv.lockIdFree}
+ * method should be called to return the locker ID to the
+ * Berkeley DB library when it is no longer needed.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.lockId method returns a locker
+ * ID which is guaranteed to be unique in the specified lock
+ * table.</p>
+ */
+ public int lockId() throws DbException {
+ return db_javaJNI.DbEnv_lock_id(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockIdFree(int)}
+ */
+ public void lock_id_free(int id) throws DbException {
+ lockIdFree(id);
+ }
+
+
+ /**
+ * The DbEnv.lockIdFree method frees a locker ID allocated by the
+ * {@link com.sleepycat.db.DbEnv#lockId DbEnv.lockId} method.</p>
+ *
+ * @param id the locker id to be freed.
+ * @throws IllegalArgumentException The DbEnv.lockIdFree method
+ * will fail and throw a IllegalArgumentException exception
+ * if the locker ID is invalid or locks are still held by
+ * this locker ID; or if an invalid flag value or parameter
+ * was specified.
+ */
+ public void lockIdFree(int id) throws DbException {
+ db_javaJNI.DbEnv_lock_id_free(swigCPtr, id);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockPut(DbLock)}
+ */
+ public void lock_put(DbLock lock) throws DbException {
+ lockPut(lock);
+ }
+
+
+ /**
+ * The DbEnv.lockPut method releases <b>lock</b> .</p>
+ *
+ * @param lock the lock to be released.
+ * @throws IllegalArgumentException The DbEnv.lockPut method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void lockPut(DbLock lock) throws DbException {
+ db_javaJNI.DbEnv_lock_put(swigCPtr, DbLock.getCPtr(lock));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #lockStat(int)}
+ */
+ public DbLockStat lock_stat(int flags) throws DbException {
+ return lockStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.lockStat method returns the locking subsystem
+ * statistics.</p> <p>
+ *
+ * The DbEnv.lockStat method creates a DbLockStat object
+ * encapsulating the locking subsystem statistics. The following
+ * data fields are available from the DbLockStat object:</p> For
+ * convenience, the DbLockStat class has a toString method that
+ * lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.lockStat method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.lockStat method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public DbLockStat lockStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_lock_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLockConflicts(byte[][])}
+ */
+ public void set_lk_conflicts(byte[][] conflicts) throws DbException {
+ setLockConflicts(conflicts);
+ }
+
+
+ /**
+ * Set the locking conflicts matrix.</p> <p>
+ *
+ * If DbEnv.setLockConflicts is never called, a standard
+ * conflicts array is used; see <a href="{@docRoot}/../ref/lock/stdmode.html">
+ * Standard Lock Modes</a> for more information.</p> <p>
+ *
+ * The DbEnv.setLockConflicts method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLockConflicts method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLockConflicts will be
+ * ignored. </p>
+ *
+ * @param conflicts the new locking conflicts
+ * matrix. A non-0 value for the array element indicates that
+ * requested_mode and held_mode conflict: <blockquote><pre>conflicts[requested_mode][held_mode]</pre>
+ * </blockquote> <p>
+ *
+ * The <i>not-granted</i> mode must be represented by 0.</p>
+ * @throws IllegalArgumentException The DbEnv.setLockConflicts
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ * @throws DbMemoryException If the conflicts array could
+ * not be copied, the DbEnv.setLockConflicts method will fail
+ * and throw a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} exception.
+ */
+ public void setLockConflicts(byte[][] conflicts) throws DbException {
+ db_javaJNI.DbEnv_set_lk_conflicts(swigCPtr, conflicts);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLockDetect(int)}
+ */
+ public void set_lk_detect(int detect) throws DbException {
+ setLockDetect(detect);
+ }
+
+
+ /**
+ * Set if the deadlock detector is to be run whenever a lock
+ * conflict occurs, and specify what lock request(s) should be
+ * rejected. As transactions acquire locks on behalf of a single
+ * locker ID, rejecting a lock request associated with a
+ * transaction normally requires the transaction be aborted.</p>
+ * <p>
+ *
+ * The database environment's deadlock detector configuration may
+ * also be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_lk_detect", one or more whitespace characters, and
+ * the method <b>detect</b> parameter as a string; for example,
+ * "set_lk_detect DB_LOCK_OLDEST". Because the <b>DB_CONFIG</b>
+ * file is read when the database environment is opened, it will
+ * silently overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLockDetect method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLockDetect method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLockDetect must be
+ * consistent with the existing environment or an error will be
+ * returned. </p>
+ *
+ * @param detect The <b>detect</b> parameter
+ * configures the deadlock detector. The specified value must
+ * be one of the following list:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_DEFAULT
+ * Db.DB_LOCK_DEFAULT}<p>
+ *
+ * Use whatever lock policy was specified when the database
+ * environment was created. If no lock policy has yet been
+ * specified, set the lock policy to <code>Db.DB_LOCK_RANDOM</code>
+ * . </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_EXPIRE
+ * Db.DB_LOCK_EXPIRE}<p>
+ *
+ * Reject lock requests which have timed out. No other
+ * deadlock detection is performed. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MAXLOCKS
+ * Db.DB_LOCK_MAXLOCKS}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * greatest number of locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MINLOCKS
+ * Db.DB_LOCK_MINLOCKS}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * fewest number of locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_MINWRITE
+ * Db.DB_LOCK_MINWRITE}<p>
+ *
+ * Reject the lock request for the locker ID with the
+ * fewest number of write locks. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_OLDEST
+ * Db.DB_LOCK_OLDEST}<p>
+ *
+ * Reject the lock request for the oldest locker ID. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_RANDOM
+ * Db.DB_LOCK_RANDOM}<p>
+ *
+ * Reject the lock request for a random locker ID. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LOCK_YOUNGEST
+ * Db.DB_LOCK_YOUNGEST}<p>
+ *
+ * Reject the lock request for the youngest locker ID.
+ * </li>
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.setLockDetect
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLockDetect(int detect) throws DbException {
+ db_javaJNI.DbEnv_set_lk_detect(swigCPtr, detect);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLockMaxLockers(int)}
+ */
+ public void set_lk_max_lockers(int max) throws DbException {
+ setLockMaxLockers(max);
+ }
+
+
+ /**
+ * Set the maximum number of locking entities supported by the
+ * Berkeley DB environment. This value is used by {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} to estimate how much
+ * space to allocate for various lock-table data structures. The
+ * default value is 1000 lockers. For specific information on
+ * configuring the size of the lock subsystem, see <a
+ * href="{@docRoot}/../ref/lock/max.html">Configuring locking:
+ * sizing the system</a> .</p> <p>
+ *
+ * The database environment's maximum number of lockers may also
+ * be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_lk_max_lockers", one or more whitespace
+ * characters, and the number of lockers. Because the <b>
+ * DB_CONFIG</b> file is read when the database environment is
+ * opened, it will silently overrule configuration done before
+ * that time.</p> <p>
+ *
+ * The DbEnv.setLockMaxLockers method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLockMaxLockers method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLockMaxLockers will be
+ * ignored. </p>
+ *
+ * @param max the maximum number
+ * simultaneous locking entities supported by the Berkeley DB
+ * environment.
+ * @throws IllegalArgumentException The DbEnv.setLockMaxLockers
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLockMaxLockers(int max) throws DbException {
+ db_javaJNI.DbEnv_set_lk_max_lockers(swigCPtr, max);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLockMaxLocks(int)}
+ */
+ public void set_lk_max_locks(int max) throws DbException {
+ setLockMaxLocks(max);
+ }
+
+
+ /**
+ * Set the maximum number of locks supported by the Berkeley DB
+ * environment. This value is used by {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} to estimate how much
+ * space to allocate for various lock-table data structures. The
+ * default value is 1000 locks. For specific information on
+ * configuring the size of the lock subsystem, see <a
+ * href="{@docRoot}/../ref/lock/max.html">Configuring locking:
+ * sizing the system</a> .</p> <p>
+ *
+ * The database environment's maximum number of locks may also be
+ * set using the environment's <b>DB_CONFIG</b> file. The syntax
+ * of the entry in that file is a single line with the string
+ * "set_lk_max_locks", one or more whitespace characters, and the
+ * number of locks. Because the <b>DB_CONFIG</b> file is read
+ * when the database environment is opened, it will silently
+ * overrule configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLockMaxLocks method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLockMaxLocks method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLockMaxLocks will be
+ * ignored. </p>
+ *
+ * @param max the maximum number of locks
+ * supported by the Berkeley DB environment.
+ * @throws IllegalArgumentException The DbEnv.setLockMaxLocks
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLockMaxLocks(int max) throws DbException {
+ db_javaJNI.DbEnv_set_lk_max_locks(swigCPtr, max);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLockMaxObjects(int)}
+ */
+ public void set_lk_max_objects(int max) throws DbException {
+ setLockMaxObjects(max);
+ }
+
+
+ /**
+ * Set the maximum number of locked objects supported by the
+ * Berkeley DB environment. This value is used by {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} to estimate how much
+ * space to allocate for various lock-table data structures. The
+ * default value is 1000 objects. For specific information on
+ * configuring the size of the lock subsystem, see <a
+ * href="{@docRoot}/../ref/lock/max.html">Configuring locking:
+ * sizing the system</a> .</p> <p>
+ *
+ * The database environment's maximum number of objects may also
+ * be set using the environment's <b>DB_CONFIG</b> file. The
+ * syntax of the entry in that file is a single line with the
+ * string "set_lk_max_objects", one or more whitespace
+ * characters, and the number of objects. Because the <b>
+ * DB_CONFIG</b> file is read when the database environment is
+ * opened, it will silently overrule configuration done before
+ * that time.</p> <p>
+ *
+ * The DbEnv.setLockMaxObjects method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLockMaxObjects method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLockMaxObjects will be
+ * ignored. </p>
+ *
+ * @param max the maximum number of locked
+ * objects supported by the Berkeley DB environment.
+ * @throws IllegalArgumentException The DbEnv.setLockMaxObjects
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLockMaxObjects(int max) throws DbException {
+ db_javaJNI.DbEnv_set_lk_max_objects(swigCPtr, max);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLogBufferSize()}
+ */
+ public int get_lg_bsize() throws DbException {
+ return getLogBufferSize();
+ }
+
+
+ /**
+ * The DbEnv.getLogBufferSize method returns the size of the log
+ * buffer, in bytes.</p> <p>
+ *
+ * The DbEnv.getLogBufferSize method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLogBufferSize method returns
+ * the size of the log buffer, in bytes.</p>
+ */
+ public int getLogBufferSize() throws DbException {
+ return db_javaJNI.DbEnv_get_lg_bsize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLogDir()}
+ */
+ public String get_lg_dir() throws DbException {
+ return getLogDir();
+ }
+
+
+ /**
+ * The DbEnv.getLogDir method returns the log directory.</p> <p>
+ *
+ * The DbEnv.getLogDir method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLogDir method returns the
+ * log directory.</p>
+ */
+ public String getLogDir() throws DbException {
+ return db_javaJNI.DbEnv_get_lg_dir(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLogMax()}
+ */
+ public int get_lg_max() throws DbException {
+ return getLogMax();
+ }
+
+
+ /**
+ * The DbEnv.getLogMax method returns the maximum log file size.
+ * </p> <p>
+ *
+ * The DbEnv.getLogMax method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLogMax method returns the
+ * maximum log file size.</p>
+ */
+ public int getLogMax() throws DbException {
+ return db_javaJNI.DbEnv_get_lg_max(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLogRegionMax()}
+ */
+ public int get_lg_regionmax() throws DbException {
+ return getLogRegionMax();
+ }
+
+
+ /**
+ * The DbEnv.getLogRegionMax method returns the size of the
+ * underlying logging subsystem region.</p> <p>
+ *
+ * The DbEnv.getLogRegionMax method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getLogRegionMax method returns
+ * the size of the underlying logging subsystem region.</p>
+ */
+ public int getLogRegionMax() throws DbException {
+ return db_javaJNI.DbEnv_get_lg_regionmax(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logArchive(int)}
+ */
+ public String[] log_archive(int flags) throws DbException {
+ return logArchive(flags);
+ }
+
+
+ /**
+ * The DbEnv.logArchive method returns an array of log or
+ * database filenames.</p> <p>
+ *
+ * By default, DbEnv.logArchive returns the names of all of the
+ * log files that are no longer in use (for example, that are no
+ * longer involved in active transactions), and that may safely
+ * be archived for catastrophic recovery and then removed from
+ * the system. If there are no filenames to return,
+ * DbEnv.logArchive returns null.</p> <p>
+ *
+ * Log cursor handles (returned by the {@link
+ * com.sleepycat.db.DbEnv#logCursor DbEnv.logCursor} method) may
+ * have open file descriptors for log files in the database
+ * environment. Also, the Berkeley DB interfaces to the database
+ * environment logging subsystem (for example, {@link
+ * com.sleepycat.db.DbEnv#logPut DbEnv.logPut} and {@link
+ * com.sleepycat.db.DbTxn#abort DbTxn.abort}) may allocate log
+ * cursors and have open file descriptors for log files as well.
+ * On operating systems where filesystem related system calls
+ * (for example, rename and unlink on Windows/NT) can fail if a
+ * process has an open file descriptor for the affected file,
+ * attempting to move or remove the log files listed by
+ * DbEnv.logArchive may fail. All Berkeley DB internal use of log
+ * cursors operates on active log files only and furthermore, is
+ * short-lived in nature. So, an application seeing such a
+ * failure should be restructured to close any open log cursors
+ * it may have, and otherwise to retry the operation until it
+ * succeeds. (Although the latter is not likely to be necessary;
+ * it is hard to imagine a reason to move or rename a log file in
+ * which transactions are being logged or aborted.)</p> <p>
+ *
+ * See <a href="{@docRoot}/../utility/db_archive.html">db_archive
+ * </a> for more information on database archival procedures.</p>
+ *
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ARCH_ABS
+ * Db.DB_ARCH_ABS}<p>
+ *
+ * All pathnames are returned as absolute pathnames,
+ * instead of relative to the database home directory.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ARCH_DATA
+ * Db.DB_ARCH_DATA}<p>
+ *
+ * Return the database files that need to be archived in
+ * order to recover the database from catastrophic failure.
+ * If any of the database files have not been accessed
+ * during the lifetime of the current log files,
+ * DbEnv.logArchive will not include them in this list. It
+ * is also possible that some of the files referred to by
+ * the log have since been deleted from the system. <p>
+ *
+ * The <code>Db.DB_ARCH_DATA</code> and <code>Db.DB_ARCH_LOG</code>
+ * flags are mutually exclusive.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ARCH_LOG
+ * Db.DB_ARCH_LOG}<p>
+ *
+ * Return all the log filenames, regardless of whether or
+ * not they are in use. <p>
+ *
+ * The <code>Db.DB_ARCH_DATA</code> and <code>Db.DB_ARCH_LOG</code>
+ * flags are mutually exclusive.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_ARCH_REMOVE
+ * Db.DB_ARCH_REMOVE}<p>
+ *
+ * Remove log files that are no longer needed; no filenames
+ * are returned. Automatic log file removal is likely to
+ * make catastrophic recovery impossible. <p>
+ *
+ * The <code>Db.DB_ARCH_REMOVE</code> flag may not be
+ * specified with any other flag.</p> </li>
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.logArchive method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.logArchive method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public String[] logArchive(int flags) throws DbException {
+ return db_javaJNI.DbEnv_log_archive(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logCompare(DbLsn,DbLsn)}
+ */
+ public static int log_compare(DbLsn lsn0, DbLsn lsn1) {
+ return logCompare(lsn0, lsn1);
+ }
+
+
+ /**
+ * The DbEnv.logCompare method allows the caller to compare two
+ * {@link com.sleepycat.db.DbLsn DbLsn} objects, returning 0 if
+ * they are equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b> ,
+ * and -1 if <b>lsn0</b> is less than <b>lsn1</b> .</p>
+ *
+ * @param lsn0 one of the {@link com.sleepycat.db.DbLsn DbLsn}
+ * objects to be compared.
+ * @param lsn1 one of the {@link com.sleepycat.db.DbLsn DbLsn}
+ * objects to be compared.
+ * @return The DbEnv.logCompare method returns 0 if the
+ * {@link com.sleepycat.db.DbLsn DbLsn} object parameters are
+ * equal, 1 if <b>lsn0</b> is greater than <b>lsn1</b> , and
+ * -1 if <b>lsn0</b> is less than <b>lsn1</b> .</p>
+ */
+ public static int logCompare(DbLsn lsn0, DbLsn lsn1) {
+ return db_javaJNI.DbEnv_log_compare(DbLsn.getCPtr(lsn0), DbLsn.getCPtr(lsn1));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logCursor(int)}
+ */
+ public DbLogc log_cursor(int flags) throws DbException {
+ return logCursor(flags);
+ }
+
+
+ /**
+ * The DbEnv.logCursor method returns a created log cursor.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws IllegalArgumentException The DbEnv.logCursor method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.logCursor method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public DbLogc logCursor(int flags) throws DbException {
+ long cPtr = db_javaJNI.DbEnv_log_cursor(swigCPtr, flags);
+ return (cPtr == 0) ? null : new DbLogc(cPtr, true);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logFile(DbLsn)}
+ */
+ public String log_file(DbLsn lsn) throws DbException {
+ return logFile(lsn);
+ }
+
+
+ /**
+ * The DbEnv.logFile method maps {@link com.sleepycat.db.DbLsn
+ * DbLsn} objects to filenames, returning the name of the file
+ * containing the record named by <b>lsn</b> .</p> <p>
+ *
+ * This mapping of {@link com.sleepycat.db.DbLsn DbLsn} objects
+ * to files is needed for database administration. For example, a
+ * transaction manager typically records the earliest {@link
+ * com.sleepycat.db.DbLsn DbLsn} needed for restart, and the
+ * database administrator may want to archive log files to tape
+ * when they contain only {@link com.sleepycat.db.DbLsn DbLsn}
+ * entries before the earliest one needed for restart.</p>
+ *
+ * @param lsn the {@link com.sleepycat.db.DbLsn
+ * DbLsn} object for which a filename is wanted.
+ * @throws DbMemoryException If the supplied buffer was too
+ * small to hold the log filename, the DbEnv.logFile method
+ * will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return The DbEnv.logFile method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public String logFile(DbLsn lsn) throws DbException {
+ return db_javaJNI.DbEnv_log_file(swigCPtr, DbLsn.getCPtr(lsn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logFlush(DbLsn)}
+ */
+ public void log_flush(DbLsn lsn) throws DbException {
+ logFlush(lsn);
+ }
+
+
+ /**
+ * The DbEnv.logFlush method writes log records to disk.</p>
+ *
+ * @param lsn All log records with {@link
+ * com.sleepycat.db.DbLsn DbLsn} values less than or equal to
+ * the <b>lsn</b> parameter are written to disk. If <b>lsn
+ * </b> is null, all records in the log are flushed.
+ * @throws IllegalArgumentException The DbEnv.logFlush method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void logFlush(DbLsn lsn) throws DbException {
+ db_javaJNI.DbEnv_log_flush(swigCPtr, DbLsn.getCPtr(lsn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logPut(DbLsn,Dbt,int)}
+ */
+ public void log_put(DbLsn lsn, Dbt data, int flags) throws DbException {
+ logPut(lsn, data, flags);
+ }
+
+
+ /**
+ * The DbEnv.logPut method appends records to the log. The {@link
+ * com.sleepycat.db.DbLsn DbLsn} of the put record is returned in
+ * the <b>lsn</b> parameter.</p>
+ *
+ * @param data the record to write to the
+ * log. <p>
+ *
+ * The caller is responsible for providing any necessary
+ * structure to <b>data</b> . (For example, in a write-ahead
+ * logging protocol, the application must understand what
+ * part of <b>data</b> is an operation code, what part is
+ * redo information, and what part is undo information. In
+ * addition, most transaction managers will store in <b>data
+ * </b> the {@link com.sleepycat.db.DbLsn DbLsn} of the
+ * previous log record for the same transaction, to support
+ * chaining back through the transaction's log records during
+ * undo.)</p>
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FLUSH Db.DB_FLUSH}<p>
+ *
+ * The log is forced to disk after this record is written,
+ * guaranteeing that all records with {@link
+ * com.sleepycat.db.DbLsn DbLsn} values less than or equal
+ * to the one being "put" are on disk before DbEnv.logPut
+ * returns. </li>
+ * </ul>
+ *
+ * @param lsn references memory into which
+ * the {@link com.sleepycat.db.DbLsn DbLsn} of the put record
+ * is copied.
+ * @throws IllegalArgumentException The {@link
+ * com.sleepycat.db.DbEnv#logFlush DbEnv.logFlush} method
+ * will fail and throw a IllegalArgumentException exception
+ * if the record to be logged is larger than the maximum log
+ * record; or if an invalid flag value or parameter was
+ * specified.
+ */
+ public void logPut(DbLsn lsn, Dbt data, int flags) throws DbException {
+ db_javaJNI.DbEnv_log_put(swigCPtr, DbLsn.getCPtr(lsn), data, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #logStat(int)}
+ */
+ public DbLogStat log_stat(int flags) throws DbException {
+ return logStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.logStat method returns the logging subsystem
+ * statistics.</p> <p>
+ *
+ * The DbEnv.logStat method creates a DbLogStat object
+ * encapsulating the logging subsystem statistics. The following
+ * data fields are available from the DbLogStat object:</p> For
+ * convenience, the DbLogStat class has a toString method that
+ * lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.logStat method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.logStat method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public DbLogStat logStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_log_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLogBufferSize(int)}
+ */
+ public void set_lg_bsize(int lg_bsize) throws DbException {
+ setLogBufferSize(lg_bsize);
+ }
+
+
+ /**
+ * Set the size of the in-memory log buffer, in bytes. By
+ * default, or if the value is set to 0, a size of 32K is used.
+ * The size of the log file (see {@link
+ * com.sleepycat.db.DbEnv#setLogMax DbEnv.setLogMax}) must be at
+ * least four times the size of the in-memory log buffer.</p> <p>
+ *
+ * Log information is stored in-memory until the storage space
+ * fills up or transaction commit forces the information to be
+ * flushed to stable storage. In the presence of long-running
+ * transactions or transactions producing large amounts of data,
+ * larger buffer sizes can increase throughput.</p> <p>
+ *
+ * The database environment's log buffer size may also be set
+ * using the environment's <b>DB_CONFIG</b> file. The syntax of
+ * the entry in that file is a single line with the string
+ * "set_lg_bsize", one or more whitespace characters, and the
+ * size in bytes. Because the <b>DB_CONFIG</b> file is read when
+ * the database environment is opened, it will silently overrule
+ * configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLogBufferSize method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLogBufferSize method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLogBufferSize will be
+ * ignored. </p>
+ *
+ * @param lg_bsize the size of the in-memory
+ * log buffer, in bytes.
+ * @throws IllegalArgumentException The DbEnv.setLogBufferSize
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; The
+ * size of the log file is less than four times the size of
+ * the in-memory log buffer; or if an invalid flag value or
+ * parameter was specified.
+ */
+ public void setLogBufferSize(int lg_bsize) throws DbException {
+ db_javaJNI.DbEnv_set_lg_bsize(swigCPtr, lg_bsize);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLogDir(String)}
+ */
+ public void set_lg_dir(String dir) throws DbException {
+ setLogDir(dir);
+ }
+
+
+ /**
+ * The path of a directory to be used as the location of logging
+ * files. Log files created by the Log Manager subsystem will be
+ * created in this directory.</p> <p>
+ *
+ * If no logging directory is specified, log files are created in
+ * the environment home directory. See <a
+ * href="{@docRoot}/../ref/env/naming.html">Berkeley DB File
+ * Naming</a> for more information.</p> <p>
+ *
+ * For the greatest degree of recoverability from system or
+ * application failure, database files and log files should be
+ * located on separate physical devices.</p> <p>
+ *
+ * The database environment's logging directory may also be set
+ * using the environment's <b>DB_CONFIG</b> file. The syntax of
+ * the entry in that file is a single line with the string
+ * "set_lg_dir", one or more whitespace characters, and the
+ * directory name. Because the <b>DB_CONFIG</b> file is read when
+ * the database environment is opened, it will silently overrule
+ * configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLogDir method configures operations performed
+ * using the specified {@link com.sleepycat.db.DbEnv DbEnv}
+ * handle, not all operations performed on the underlying
+ * database environment.</p> <p>
+ *
+ * The DbEnv.setLogDir method may not be called after the {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} method is called. If
+ * the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLogDir must be consistent
+ * with the existing environment or corruption can occur.</p>
+ *
+ * @param dir the directory used to store
+ * the logging files.
+ * @throws IllegalArgumentException The DbEnv.setLogDir method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLogDir(String dir) throws DbException {
+ db_javaJNI.DbEnv_set_lg_dir(swigCPtr, dir);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLogMax(int)}
+ */
+ public void set_lg_max(int lg_max) throws DbException {
+ setLogMax(lg_max);
+ }
+
+
+ /**
+ * Set the maximum size of a single file in the log, in bytes. By
+ * default, or if the <b>lg_max</b> parameter is set to 0, a size
+ * of 10MB is used. Because {@link com.sleepycat.db.DbLsn DbLsn}
+ * file offsets are unsigned four-byte values, the set value may
+ * not be larger than the maximum unsigned four-byte value. The
+ * size of the log file must be at least four times the size of
+ * the in-memory log buffer (see {@link
+ * com.sleepycat.db.DbEnv#setLogBufferSize
+ * DbEnv.setLogBufferSize}).</p> <p>
+ *
+ * See <a href="{@docRoot}/../ref/log/limits.html">Log File
+ * Limits</a> for more information.</p> <p>
+ *
+ * The database environment's log file size may also be set using
+ * the environment's <b>DB_CONFIG</b> file. The syntax of the
+ * entry in that file is a single line with the string
+ * "set_lg_max", one or more whitespace characters, and the size
+ * in bytes. Because the <b>DB_CONFIG</b> file is read when the
+ * database environment is opened, it will silently overrule
+ * configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLogMax method configures a database environment,
+ * not only operations performed using the specified {@link
+ * com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLogMax method may be called at any time during
+ * the life of the application.</p> If no size is specified by
+ * the application, the size last specified for the database
+ * region will be used, or if no database region previously
+ * existed, the default will be used.
+ *
+ * @param lg_max the size of a single log
+ * file, in bytes.
+ * @throws IllegalArgumentException The DbEnv.setLogMax method
+ * will fail and throw a IllegalArgumentException exception
+ * if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; the
+ * size of the log file is less than four times the size of
+ * the in-memory log buffer; The specified log file size was
+ * too large; or if an invalid flag value or parameter was
+ * specified.
+ */
+ public void setLogMax(int lg_max) throws DbException {
+ db_javaJNI.DbEnv_set_lg_max(swigCPtr, lg_max);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLogRegionMax(int)}
+ */
+ public void set_lg_regionmax(int lg_regionmax) throws DbException {
+ setLogRegionMax(lg_regionmax);
+ }
+
+
+ /**
+ * Set the size of the underlying logging area of the Berkeley DB
+ * environment, in bytes. By default, or if the value is set to
+ * 0, the default size is 60KB. The log region is used to store
+ * filenames, and so may need to be increased in size if a large
+ * number of files will be opened and registered with the
+ * specified Berkeley DB environment's log manager.</p> <p>
+ *
+ * The database environment's log region size may also be set
+ * using the environment's <b>DB_CONFIG</b> file. The syntax of
+ * the entry in that file is a single line with the string
+ * "set_lg_regionmax", one or more whitespace characters, and the
+ * size in bytes. Because the <b>DB_CONFIG</b> file is read when
+ * the database environment is opened, it will silently overrule
+ * configuration done before that time.</p> <p>
+ *
+ * The DbEnv.setLogRegionMax method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setLogRegionMax method may not be called after the
+ * {@link com.sleepycat.db.DbEnv#open DbEnv.open} method is
+ * called. If the database environment already exists when {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} is called, the
+ * information specified to DbEnv.setLogRegionMax will be
+ * ignored. </p>
+ *
+ * @param lg_regionmax the size of the logging area
+ * in the Berkeley DB environment, in bytes.
+ * @throws IllegalArgumentException The DbEnv.setLogRegionMax
+ * method will fail and throw a IllegalArgumentException
+ * exception if the method was called after {@link
+ * com.sleepycat.db.DbEnv#open DbEnv.open} was called; or if
+ * an invalid flag value or parameter was specified.
+ */
+ public void setLogRegionMax(int lg_regionmax) throws DbException {
+ db_javaJNI.DbEnv_set_lg_regionmax(swigCPtr, lg_regionmax);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getCacheSize()}
+ */
+ public long get_cachesize() throws DbException {
+ return getCacheSize();
+ }
+
+
+ /**
+ * The DbEnv.getCacheSize method returns the size of the cache.
+ * </p> <p>
+ *
+ * The DbEnv.getCacheSize method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getCacheSize method returns the
+ * size of the cache.</p>
+ */
+ public long getCacheSize() throws DbException {
+ return db_javaJNI.DbEnv_get_cachesize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getCacheSizeNcache()}
+ */
+ public int get_cachesize_ncache() throws DbException {
+ return getCacheSizeNcache();
+ }
+
+
+ /**
+ * The DbEnv.getCacheSizeNcache method returns the number of
+ * caches.</p> <p>
+ *
+ * The DbEnv.getCacheSizeNcache method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getCacheSizeNcache method
+ * returns the number of caches.</p>
+ */
+ public int getCacheSizeNcache() throws DbException {
+ return db_javaJNI.DbEnv_get_cachesize_ncache(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getMemoryPoolMapSize()}
+ */
+ public long get_mp_mmapsize() throws DbException {
+ return getMemoryPoolMapSize();
+ }
+
+
+ /**
+ * The DbEnv.getMemoryPoolMapSize method returns the maximum file
+ * map size.</p> <p>
+ *
+ * The DbEnv.getMemoryPoolMapSize method may be called at any
+ * time during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getMemoryPoolMapSize method
+ * returns the maximum file map size.</p>
+ */
+ public long getMemoryPoolMapSize() throws DbException {
+ return db_javaJNI.DbEnv_get_mp_mmapsize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #memoryPoolStat(int)}
+ */
+ public DbMpoolStat memp_stat(int flags) throws DbException {
+ return memoryPoolStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.memoryPoolStat method returns the memory pool (that
+ * is, the buffer cache) subsystem statistics.</p> <p>
+ *
+ * The DbEnv.memoryPoolStat method creates a DbMpoolStat object
+ * encapsulating memory pool (that is, the buffer cache)
+ * statistics. The following data fields are available from the
+ * DbMpoolStat object:</p> For convenience, the DbMpoolStat class
+ * has a toString method that lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the following value:
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.memoryPoolStat method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public DbMpoolStat memoryPoolStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_memp_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #memoryPoolFileStat(int)}
+ */
+ public DbMpoolFStat[] memp_fstat(int flags) throws DbException {
+ return memoryPoolFileStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.memoryPoolFileStat method creates an array of
+ * DbMpoolFStat objects containing statistics for individual
+ * files in the cache. Each DbMpoolFStat object contains
+ * statistics for an individual DbMpoolFile. The following data
+ * fields are available for each DbMpoolFStat object:</p> For
+ * convenience, the DbMpoolFStat class has a toString method that
+ * lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.memoryPoolStat
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ * @return The DbEnv.memoryPoolFileStat
+ * method throws an exception that encapsulates a non-zero
+ * error value on failure. </p>
+ */
+ public DbMpoolFStat[] memoryPoolFileStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_memp_fstat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #memoryPoolTrickle(int)}
+ */
+ public int memp_trickle(int percent) throws DbException {
+ return memoryPoolTrickle(percent);
+ }
+
+
+ /**
+ * The DbEnv.memoryPoolTrickle method ensures that a specified
+ * percent of the pages in the shared memory pool are clean, by
+ * writing dirty pages to their backing files.</p> <p>
+ *
+ * The purpose of the DbEnv.memoryPoolTrickle function is to
+ * enable a memory pool manager to ensure that a page is always
+ * available for reading in new information without having to
+ * wait for a write.</p>
+ *
+ * @param nwrotep references memory into which
+ * the number of pages written to reach the specified
+ * percentage is copied.
+ * @param percent the percent of the pages in
+ * the cache that should be clean.
+ * @throws IllegalArgumentException The DbEnv.memoryPoolTrickle
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ * @return The DbEnv.memoryPoolTrickle
+ * method returns the number of pages that were written to
+ * reach the specified percentage.
+ */
+ public int memoryPoolTrickle(int percent) throws DbException {
+ return db_javaJNI.DbEnv_memp_trickle(swigCPtr, percent);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getTxnMax()}
+ */
+ public int get_tx_max() throws DbException {
+ return getTxnMax();
+ }
+
+
+ /**
+ * The DbEnv.getTxnMax method returns the number of active
+ * transactions.</p> <p>
+ *
+ * The DbEnv.getTxnMax method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getTxnMax method returns the
+ * number of active transactions.</p>
+ */
+ public int getTxnMax() throws DbException {
+ return db_javaJNI.DbEnv_get_tx_max(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getTxnTimestamp()}
+ */
+ public long get_tx_timestamp() throws DbException {
+ return getTxnTimestamp();
+ }
+
+
+ /**
+ * The DbEnv.getTxnTimestamp method returns the recovery
+ * timestamp.</p> <p>
+ *
+ * The DbEnv.getTxnTimestamp method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getTxnTimestamp method returns
+ * the recovery timestamp.</p>
+ */
+ public long getTxnTimestamp() throws DbException {
+ return db_javaJNI.DbEnv_get_tx_timestamp(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getTimeout(int)}
+ */
+ public long get_timeout(int flag) throws DbException {
+ return getTimeout(flag);
+ }
+
+
+ /**
+ * The DbEnv.getTimeout method returns a timeout value, in
+ * microseconds.</p> <p>
+ *
+ * The DbEnv.getTimeout method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param flag must be set to one of the following
+ * values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_LOCK_TIMEOUT
+ * Db.DB_SET_LOCK_TIMEOUT}<p>
+ *
+ * Return the timeout value for locks in this database
+ * environment. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_TXN_TIMEOUT
+ * Db.DB_SET_TXN_TIMEOUT}<p>
+ *
+ * Return the timeout value for transactions in this
+ * database environment. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getTimeout method returns a
+ * timeout value, in microseconds.</p>
+ */
+ public long getTimeout(int flag) throws DbException {
+ return db_javaJNI.DbEnv_get_timeout(swigCPtr, flag);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #txnBegin(DbTxn,int)}
+ */
+ public DbTxn txn_begin(DbTxn parent, int flags) throws DbException {
+ return txnBegin(parent, flags);
+ }
+
+
+ /**
+ * The DbEnv.txnBegin method creates a new transaction in the
+ * environment and returns a {@link com.sleepycat.db.DbTxn DbTxn}
+ * that uniquely identifies it. Calling the {@link
+ * com.sleepycat.db.DbTxn#abort DbTxn.abort}, {@link
+ * com.sleepycat.db.DbTxn#commit DbTxn.commit} or {@link
+ * com.sleepycat.db.DbTxn#discard DbTxn.discard} methods will
+ * discard the returned handle.</p> <p>
+ *
+ * <b>Note: Transactions may only span threads if they do so
+ * serially; that is, each transaction must be active in only a
+ * single thread of control at a time. This restriction holds for
+ * parents of nested transactions as well; not two children may
+ * be concurrently active in more than one thread of control at
+ * any one time.</b> </p> <p>
+ *
+ * <b>Note: Cursors may not span transactions; that is, each
+ * cursor must be opened and closed within a single transaction.
+ * </b></p> <p>
+ *
+ * <b>Note: A parent transaction may not issue any Berkeley DB
+ * operations -- except for DbEnv.txnBegin, {@link
+ * com.sleepycat.db.DbTxn#abort DbTxn.abort} and {@link
+ * com.sleepycat.db.DbTxn#commit DbTxn.commit} -- while it has
+ * active child transactions (child transactions that have not
+ * yet been committed or aborted).</b> </p>
+ *
+ * @param flags must be set to 0 or by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * All read operations performed by the transaction may
+ * read modified but not yet committed data. Silently
+ * ignored if the {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * <code>Db.DB_DIRTY_READ</code>} flag was not specified
+ * when the underlying database was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOSYNC
+ * Db.DB_TXN_NOSYNC}<p>
+ *
+ * Do not synchronously flush the log when this transaction
+ * commits or prepares. This means the transaction will
+ * exhibit the ACI (atomicity, consistency, and isolation)
+ * properties, but not D (durability); that is, database
+ * integrity will be maintained but it is possible that
+ * this transaction may be undone during recovery. <p>
+ *
+ * This behavior may be set for a Berkeley DB environment
+ * using the {@link com.sleepycat.db.DbEnv#setFlags
+ * DbEnv.setFlags} method. Any value specified to this
+ * method overrides that setting.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOWAIT
+ * Db.DB_TXN_NOWAIT}<p>
+ *
+ * If a lock is unavailable for any Berkeley DB operation
+ * performed in the context of this transaction, cause the
+ * operation to throw a {@link
+ * com.sleepycat.db.DbDeadlockException
+ * DbDeadlockException} immediately instead of blocking on
+ * the lock. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_SYNC
+ * Db.DB_TXN_SYNC}<p>
+ *
+ * Synchronously flush the log when this transaction
+ * commits or prepares. This means the transaction will
+ * exhibit all of the ACID (atomicity, consistency,
+ * isolation, and durability) properties. <p>
+ *
+ * This behavior is the default for Berkeley DB
+ * environments unless the {@link
+ * com.sleepycat.db.Db#DB_TXN_NOSYNC <code>Db.DB_TXN_NOSYNC</code>
+ * } flag was specified to the {@link
+ * com.sleepycat.db.DbEnv#setFlags DbEnv.setFlags} method.
+ * Any value specified to this method overrides that
+ * setting.</p> </li>
+ * </ul>
+ *
+ * @param parent If the <b>parent</b> parameter is
+ * non-null, the new transaction will be a nested
+ * transaction, with the transaction indicated by <b>parent
+ * </b> as its parent. Transactions may be nested to any
+ * level. In the presence of distributed transactions and
+ * two-phase commit, only the parental transaction, that is a
+ * transaction without a <b>parent</b> specified, should be
+ * passed as an parameter to {@link
+ * com.sleepycat.db.DbTxn#prepare DbTxn.prepare}.
+ * @throws DbMemoryException If the maximum number of concurrent
+ * transactions has been reached, the DbEnv.txnBegin method
+ * will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return The DbEnv.txnBegin method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public DbTxn txnBegin(DbTxn parent, int flags) throws DbException {
+ long cPtr = db_javaJNI.DbEnv_txn_begin(swigCPtr, DbTxn.getCPtr(parent), flags);
+ return (cPtr == 0) ? null : new DbTxn(cPtr, false);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #txnCheckpoint(int,int,int)}
+ */
+ public void txn_checkpoint(int kbyte, int min, int flags) throws DbException {
+ txnCheckpoint(kbyte, min, flags);
+ }
+
+
+ /**
+ * The DbEnv.txnCheckpoint method flushes the underlying memory
+ * pool, writes a checkpoint record to the log, and then flushes
+ * the log.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FORCE Db.DB_FORCE}<p>
+ *
+ * Force a checkpoint record, even if there has been no
+ * activity since the last checkpoint. </li>
+ * </ul>
+ *
+ * @param kbyte If the <b>kbyte</b>
+ * parameter is non-zero, a checkpoint will be done if more
+ * than <b>kbyte</b> kilobytes of log data have been written
+ * since the last checkpoint.
+ * @param min If the <b>min</b> parameter
+ * is non-zero, a checkpoint will be done if more than <b>min
+ * </b> minutes have passed since the last checkpoint.
+ * @throws IllegalArgumentException The DbEnv.txnCheckpoint
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ */
+ public void txnCheckpoint(int kbyte, int min, int flags) throws DbException {
+ db_javaJNI.DbEnv_txn_checkpoint(swigCPtr, kbyte, min, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #txnRecover(int,int)}
+ */
+ public DbPreplist[] txn_recover(int count, int flags) throws DbException {
+ return txnRecover(count, flags);
+ }
+
+
+ /**
+ * The DbEnv.txnRecover method returns a list of prepared but not
+ * yet resolved transactions. The DbEnv.txnRecover method should
+ * only be called after the environment has been recovered.
+ * Because database environment state must be preserved between
+ * recovery and the application calling DbEnv.txnRecover,
+ * applications must either call DbEnv.txnRecover using the same
+ * environment handle used when recovery is done, or the database
+ * environment must not be configured using the {@link
+ * com.sleepycat.db.Db#DB_PRIVATE Db.DB_PRIVATE} flag.</p> <p>
+ *
+ * The DbEnv.txnRecover method returns a list of transactions
+ * that must be resolved by the application (committed, aborted
+ * or discarded). The return value is an array of objects of type
+ * DbPreplist; the following DbPreplist fields will be filled in:
+ * </p> The application must call {@link
+ * com.sleepycat.db.DbTxn#abort DbTxn.abort}, {@link
+ * com.sleepycat.db.DbTxn#commit DbTxn.commit} or {@link
+ * com.sleepycat.db.DbTxn#discard DbTxn.discard} on each returned
+ * {@link com.sleepycat.db.DbTxn DbTxn} handle before starting
+ * any new operations.</p>
+ *
+ * @param count specifies the number of maximum size of
+ * the array that should be returned.
+ * @param flags must be set to one of the following
+ * values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FIRST Db.DB_FIRST}<p>
+ *
+ * Begin returning a list of prepared, but not yet resolved
+ * transactions. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT Db.DB_NEXT}<p>
+ *
+ * Continue returning a list of prepared, but not yet
+ * resolved transactions, starting where the last call to
+ * DbEnv.txnRecover left off. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.txnRecover method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public DbPreplist[] txnRecover(int count, int flags) throws DbException {
+ return db_javaJNI.DbEnv_txn_recover(swigCPtr, count, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #txnStat(int)}
+ */
+ public DbTxnStat txn_stat(int flags) throws DbException {
+ return txnStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.txnStat method returns the transaction subsystem
+ * statistics.</p> <p>
+ *
+ * The DbEnv.txnStat method creates a DbTxnStat object
+ * encapsulating the transaction subsystem statistics. The
+ * following data fields are available from the DbTxnStat object:
+ * </p> For convenience, the DbTxnStat class has a toString
+ * method that lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.txnStat method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ * @return The DbEnv.txnStat method
+ * throws an exception that encapsulates a non-zero error
+ * value on failure. </p>
+ */
+ public DbTxnStat txnStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_txn_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getReplicationLimit()}
+ */
+ public long get_rep_limit() throws DbException {
+ return getReplicationLimit();
+ }
+
+
+ /**
+ * The DbEnv.getReplicationLimit method returns the transmit
+ * limit in bytes.</p> <p>
+ *
+ * The DbEnv.getReplicationLimit method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbEnv.getReplicationLimit method
+ * returns the transmit limit in bytes.</p>
+ */
+ public long getReplicationLimit() throws DbException {
+ return db_javaJNI.DbEnv_get_rep_limit(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #replicationElect(int,int,int)}
+ */
+ public int rep_elect(int nsites, int priority, int timeout) throws DbException {
+ return replicationElect(nsites, priority, timeout);
+ }
+
+
+ /**
+ * The DbEnv.replicationElect method holds an election for the
+ * master of a replication group.</p> <p>
+ *
+ * If the election is successful, the new master's ID may be the
+ * ID of the previous master, or the ID of the current
+ * environment. The application is responsible for adjusting its
+ * usage of the other environments in the replication group,
+ * including directing all database updates to the newly selected
+ * master, in accordance with the results of this election.</p>
+ * <p>
+ *
+ * The thread of control that calls the DbEnv.replicationElect
+ * method must not be the thread of control that processes
+ * incoming messages; processing the incoming messages is
+ * necessary to successfully complete an election.</p>
+ *
+ * @param nsites The <b>nsites</b> parameter indicates the
+ * number of environments that the application believes are
+ * in the replication group. This number is used by Berkeley
+ * DB to avoid having two masters active simultaneously, even
+ * in the case of a network partition. During an election, a
+ * new master cannot be elected unless more than half of <b>
+ * nsites</b> agree on the new master. Thus, in the face of a
+ * network partition, the side of the partition with more
+ * than half the environments will elect a new master and
+ * continue, while the environments communicating with fewer
+ * than half the other environments will fail to find a new
+ * master.
+ * @param priority the priority of this environment. It must
+ * be a positive integer, or 0 if this environment is not
+ * permitted to become a master (see <a
+ * href="{@docRoot}/../ref/rep/pri.html">Replication
+ * environment priorities</a> for more information).
+ * @param timeout specifies a timeout period for an
+ * election. If the election has not completed after <b>
+ * timeout</b> microseconds, the election will fail.
+ * @throws DbException The DbEnv.replicationElect method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> The replication group was unable to elect a master,
+ * or was unable to complete the election in the specified
+ * <b>timeout</b> period.
+ * @return The DbEnv.replicationElect method returns
+ * the newly elected master's ID.
+ */
+ public int replicationElect(int nsites, int priority, int timeout) throws DbException {
+ return db_javaJNI.DbEnv_rep_elect(swigCPtr, nsites, priority, timeout);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #replicationProcessMessage(Dbt,Dbt,DbEnv.RepProcessMessage,DbLsn)}
+ */
+ public int rep_process_message(Dbt control, Dbt rec, DbEnv.RepProcessMessage envid, DbLsn ret_lsn) throws DbException {
+ return replicationProcessMessage(control, rec, envid, ret_lsn);
+ }
+
+
+ /**
+ * The DbEnv.replicationProcessMessage method processes an
+ * incoming replication message sent by a member of the
+ * replication group to the local database environment.</p> <p>
+ *
+ * For implementation reasons, all incoming replication messages
+ * must be processed using the same {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle. It is not required that a single thread of
+ * control process all messages, only that all threads of control
+ * processing messages use the same handle.</p> <p>
+ *
+ * The DbEnv.replicationProcessMessage method has additional
+ * return values:</p>
+ *
+ * @param control The <b>control</b> parameter should
+ * reference a copy of the <b>control</b> parameter specified
+ * by Berkeley DB on the sending environment.
+ * @param envid The <b>envid</b> parameter should contain
+ * the local identifier that corresponds to the environment
+ * that sent the message to be processed (see <a
+ * href="{@docRoot}/../ref/rep/id.html">Replication
+ * environment IDs</a> for more information).
+ * @param rec The <b>rec</b> parameter should reference
+ * a copy of the <b>rec</b> parameter specified by Berkeley
+ * DB on the sending environment.
+ * @param ret_lsn If DbEnv.replicationProcessMessage method
+ * returns Db.DB_REP_NOTPERM then the <b>ret_lsn</b>
+ * parameter will contain the log sequence number of this
+ * permanent log message that could not be written to disk.
+ * If DbEnv.replicationProcessMessage method returns
+ * Db.DB_REP_ISPERM then the <b>ret_lsn</b> parameter will
+ * contain largest log sequence number of the permanent
+ * records that are now written to disk as a result of
+ * processing this message. In all other cases the value of
+ * <b>ret_lsn</b> is undefined.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_DUPMASTER
+ * DB_REP_DUPMASTER}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will throw an
+ * exception that encapsulates <code>Db.DB_REP_DUPMASTER</code>
+ * if the replication group has more than one master. </li>
+ *
+ * </ul>
+ * The application should reconfigure itself as a client by
+ * calling the {@link com.sleepycat.db.DbEnv#replicationStart
+ * DbEnv.replicationStart} method, and then call for an
+ * election by calling {@link com.sleepycat.db.DbEnv#replicationElect
+ * DbEnv.replicationElect}. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_HOLDELECTION
+ * DB_REP_HOLDELECTION}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will throw an
+ * exception that encapsulates <code>Db.DB_REP_HOLDELECTION</code>
+ * if an election is needed. </li>
+ * </ul>
+ * The application should call for an election by calling
+ * {@link com.sleepycat.db.DbEnv#replicationElect
+ * DbEnv.replicationElect}. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_ISPERM
+ * DB_REP_ISPERM}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will return
+ * <code>Db.DB_REP_ISPERM</code> if processing this message
+ * results in the processing of records that are permanent.
+ * </li>
+ * </ul>
+ * The maximum LSN of the permanent records stored is
+ * returned. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_NEWMASTER
+ * DB_REP_NEWMASTER}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will return
+ * <code>Db.DB_REP_NEWMASTER</code> if a new master has
+ * been elected. </li>
+ * </ul>
+ * The <b>envid</b> parameter contains the environment ID of
+ * the new master. If the recipient of this error return has
+ * been made master, it is the application's responsibility
+ * to begin acting as the master environment. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_NEWSITE
+ * DB_REP_NEWSITE}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will return
+ * <code>Db.DB_REP_NEWSITE</code> if the system received
+ * contact information from a new environment. </li>
+ * </ul>
+ * The <b>rec</b> parameter contains the opaque data
+ * specified in the <b>cdata</b> parameter to the {@link
+ * com.sleepycat.db.DbEnv#replicationStart
+ * DbEnv.replicationStart}. The application should take
+ * whatever action is needed to establish a communication
+ * channel with this new environment. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_NOTPERM
+ * DB_REP_NOTPERM}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will return
+ * <code>Db.DB_REP_NOTPERM</code> if a message carrying a
+ * {@link com.sleepycat.db.Db#DB_REP_PERMANENT <code>Db.DB_REP_PERMANENT</code>
+ * } flag was processed successfully, but was not written
+ * to disk. </li>
+ * </ul>
+ * The LSN of this record is returned. The application should
+ * take whatever action is deemed necessary to retain its
+ * recoverability characteristics. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_OUTDATED
+ * DB_REP_OUTDATED}<p>
+ *
+ * The DbEnv.replicationProcessMessage method will throw an
+ * exception that encapsulates <code>Db.DB_REP_OUTDATED</code>
+ * if the current environment's logs are too far out of
+ * date with respect to the master to be automatically
+ * synchronized. </li>
+ * </ul>
+ * The application should copy over a hot backup of the
+ * environment, run recovery, and restart the client. </p>
+ * Unless otherwise specified, the
+ * DbEnv.replicationProcessMessage method throws an exception
+ * that encapsulates a non-zero error value on failure. </p>
+ */
+ public int replicationProcessMessage(Dbt control, Dbt rec, DbEnv.RepProcessMessage envid, DbLsn ret_lsn) throws DbException {
+ return db_javaJNI.DbEnv_rep_process_message(swigCPtr, control, rec, envid, DbLsn.getCPtr(ret_lsn));
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #replicationStart(Dbt,int)}
+ */
+ public void rep_start(Dbt cdata, int flags) throws DbException {
+ replicationStart(cdata, flags);
+ }
+
+
+ /**
+ * The DbEnv.replicationStart method configures the database
+ * environment as a client or master in a group of replicated
+ * database environments. Replication master environments are the
+ * only database environments where replicated databases may be
+ * modified. Replication client environments are read-only as
+ * long as they are clients. Replication client environments may
+ * be upgraded to be replication master environments in the case
+ * that the current master fails or there is no master present.
+ * </p> <p>
+ *
+ * The enclosing database environment must already have been
+ * opened by calling the {@link com.sleepycat.db.DbEnv#open
+ * DbEnv.open} method and must already have been configured to
+ * send replication messages by calling the {@link
+ * com.sleepycat.db.DbEnv#setReplicationTransport
+ * DbEnv.setReplicationTransport} method.</p>
+ *
+ * @param cdata an opaque data item that is
+ * sent over the communication infrastructure when the client
+ * or master comes online (see <a
+ * href="{@docRoot}/../ref/rep/newsite.html">Connecting to a
+ * new site</a> for more information). If no such information
+ * is useful, <b>cdata</b> should be null.
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_CLIENT
+ * Db.DB_REP_CLIENT}<p>
+ *
+ * Configure the environment as a replication client. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_LOGSONLY
+ * Db.DB_REP_LOGSONLY}<p>
+ *
+ * Configure the environment as a log files-only client.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_MASTER
+ * Db.DB_REP_MASTER}<p>
+ *
+ * Configure the environment as a replication master. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.replicationStart
+ * method will fail and throw a IllegalArgumentException
+ * exception if the database environment was not already
+ * configured to communicate with a replication group by a
+ * call to {@link com.sleepycat.db.DbEnv#setReplicationTransport
+ * DbEnv.setReplicationTransport}; the database environment
+ * was not already opened; or if an invalid flag value or
+ * parameter was specified.
+ */
+ public void replicationStart(Dbt cdata, int flags) throws DbException {
+ db_javaJNI.DbEnv_rep_start(swigCPtr, cdata, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #replicationStat(int)}
+ */
+ public DbRepStat rep_stat(int flags) throws DbException {
+ return replicationStat(flags);
+ }
+
+
+ /**
+ * The DbEnv.replicationStat method returns the replication
+ * subsystem statistics.</p> <p>
+ *
+ * The DbEnv.replicationStat method creates a DbRepStat object
+ * encapsulating the replication subsystem statistics. The
+ * following data fields are available from the DbRepStat object:
+ * </p> For convenience, the DbRepStat class has a toString
+ * method that lists all the data fields.</p>
+ *
+ * @param flags must be set to 0 or the
+ * following value:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_STAT_CLEAR
+ * Db.DB_STAT_CLEAR}<p>
+ *
+ * Reset statistics after returning their values. </li>
+ *
+ * </ul>
+ *
+ * @throws IllegalArgumentException The DbEnv.replicationStat
+ * method will fail and throw a IllegalArgumentException
+ * exception if an invalid flag value or parameter was
+ * specified.
+ * @return The DbEnv.replicationStat
+ * method throws an exception that encapsulates a non-zero
+ * error value on failure. </p>
+ */
+ public DbRepStat replicationStat(int flags) throws DbException {
+ return db_javaJNI.DbEnv_rep_stat(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setReplicationLimit(long)}
+ */
+ public void set_rep_limit(long bytes) throws DbException {
+ setReplicationLimit(bytes);
+ }
+
+
+ /**
+ * The DbEnv.setReplicationLimit method imposes a byte-count
+ * limit on the amount of data that will be transmitted from a
+ * site in a single call to {@link com.sleepycat.db.DbEnv#replicationProcessMessage
+ * DbEnv.replicationProcessMessage} method.</p> <p>
+ *
+ * The DbEnv.setReplicationLimit method configures a database
+ * environment, not only operations performed using the specified
+ * {@link com.sleepycat.db.DbEnv DbEnv} handle.</p> <p>
+ *
+ * The DbEnv.setReplicationLimit method may not be called before
+ * the {@link com.sleepycat.db.DbEnv#open DbEnv.open} method has
+ * been called.</p>
+ *
+ * @param bytes specifies the maximum number of bytes
+ * that will be sent in a single call to {@link
+ * com.sleepycat.db.DbEnv#replicationProcessMessage
+ * DbEnv.replicationProcessMessage} method.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setReplicationLimit(long bytes) throws DbException {
+ db_javaJNI.DbEnv_set_rep_limit(swigCPtr, bytes);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setReplicationTransport(int,DbRepTransport)}
+ */
+ public void set_rep_transport(int envid, DbRepTransport send) throws DbException {
+ setReplicationTransport(envid, send);
+ }
+
+
+ public void setReplicationTransport(int envid, DbRepTransport send) throws DbException {
+ db_javaJNI.DbEnv_set_rep_transport(swigCPtr, envid, (rep_transport_handler = send));
+ }
+
+
+ /**
+ * The DbEnv.strerror method returns an error message string
+ * corresponding to the error number <b>error</b> parameter.</p>
+ * <p>
+ *
+ * This function is a superset of the ANSI C X3.159-1989 (ANSI C)
+ * <b>strerror</b> (3) function. If the error number <b>error</b>
+ * is greater than or equal to 0, then the string returned by the
+ * system function <b>strerror</b> (3) is returned. If the error
+ * number is less than 0, an error string appropriate to the
+ * corresponding Berkeley DB library error is returned. See <a
+ * href="{@docRoot}/../ref/program/errorret.html">Error returns
+ * to applications</a> for more information.</p>
+ *
+ * @param error the error number for which an error message
+ * string is wanted.
+ * @return The DbEnv.strerror method returns an error
+ * message string corresponding to the error number <b>error
+ * </b> parameter.</p>
+ */
+ public static String strerror(int error) {
+ return db_javaJNI.DbEnv_strerror(error);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getVersionMajor()}
+ */
+ public static int get_version_major() {
+ return getVersionMajor();
+ }
+
+
+ /**
+ * The DbEnv.getVersionMajor method returns the release major
+ * number.</p> <p>
+ *
+ * The DbEnv.getVersionMajor method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @return The DbEnv.getVersionMajor method returns the release
+ * major number.</p>
+ */
+ public static int getVersionMajor() {
+ return db_javaJNI.DbEnv_get_version_major();
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getVersionMinor()}
+ */
+ public static int get_version_minor() {
+ return getVersionMinor();
+ }
+
+
+ /**
+ * The DbEnv.getVersionMinor method returns the release minor
+ * number.</p> <p>
+ *
+ * The DbEnv.getVersionMinor method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @return The DbEnv.getVersionMinor method returns the release
+ * minor number.</p>
+ */
+ public static int getVersionMinor() {
+ return db_javaJNI.DbEnv_get_version_minor();
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getVersionPatch()}
+ */
+ public static int get_version_patch() {
+ return getVersionPatch();
+ }
+
+
+ /**
+ * The DbEnv.getVersionPatch method returns the release patch
+ * number.</p> <p>
+ *
+ * The DbEnv.getVersionPatch method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @return The DbEnv.getVersionPatch method returns the release
+ * patch number.</p>
+ */
+ public static int getVersionPatch() {
+ return db_javaJNI.DbEnv_get_version_patch();
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getVersionString()}
+ */
+ public static String get_version_string() {
+ return getVersionString();
+ }
+
+
+ /**
+ * The DbEnv.getVersionString method returns the release verbose
+ * version information, suitable for display.</p> <p>
+ *
+ * The DbEnv.getVersionString method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @return The DbEnv.getVersionString method returns the
+ * release verbose version information, suitable for display.
+ * </p>
+ */
+ public static String getVersionString() {
+ return db_javaJNI.DbEnv_get_version_string();
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbEnvFeedback.java b/db/java/src/com/sleepycat/db/DbEnvFeedback.java
index 9eec2b819..739fe9ef6 100644
--- a/db/java/src/com/sleepycat/db/DbEnvFeedback.java
+++ b/db/java/src/com/sleepycat/db/DbEnvFeedback.java
@@ -1,19 +1,26 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbEnvFeedback.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbEnvFeedback.java,v 11.17 2003/10/30 05:32:54 bostic Exp $
*/
-
package com.sleepycat.db;
-public interface DbEnvFeedback
-{
- // methods
- //
- public abstract void feedback(DbEnv env, int opcode, int pct);
+/**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbEnvFeedbackHandler}
+ */
+public interface DbEnvFeedback {
+ /**
+ * @param env
+ * @param opcode
+ * @param percent
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbEnvFeedbackHandler#feedback(DbEnv,int,int)
+ * DbEnvFeedbackHandler.feedback(DbEnv,int,int)}
+ */
+ public abstract void feedback(DbEnv env, int opcode, int percent);
}
-
-// end of DbFeedback.java
diff --git a/db/java/src/com/sleepycat/db/DbEnvFeedbackHandler.java b/db/java/src/com/sleepycat/db/DbEnvFeedbackHandler.java
new file mode 100644
index 000000000..237af112f
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/DbEnvFeedbackHandler.java
@@ -0,0 +1,43 @@
+/*
+ * -
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DbEnvFeedbackHandler.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+package com.sleepycat.db;
+
+/**
+ * The DbEnvFeedbackHandler interface is used by the
+ * DbEnv.setFeedback method. This interface defines the
+ * application-specific function to be called to to report Berkeley
+ * DB operation progress.
+ */
+public interface DbEnvFeedbackHandler {
+ /**
+ * The DbEnvFeedbackHandler interface is used by the
+ * DbEnv.setFeedback method. This interface defines the
+ * application-specific function to be called to to report
+ * Berkeley DB operation progress. <p>
+ *
+ * </p>
+ *
+ * @param dbenv a reference to the enclosing database
+ * environment.
+ * @param opcode an operation code. The <b>opcode</b> parameter
+ * may take on any of the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RECOVER
+ * Db.DB_RECOVER}<p>
+ *
+ * The environment is being recovered. </li>
+ * </ul>
+ *
+ * @param percent the percent of the operation that has been
+ * completed, specified as an integer value between 0 and
+ * 100.
+ */
+ public abstract void feedback(DbEnv dbenv, int opcode, int percent);
+}
diff --git a/db/java/src/com/sleepycat/db/DbErrcall.java b/db/java/src/com/sleepycat/db/DbErrcall.java
index 62d3a3e08..43740d81d 100644
--- a/db/java/src/com/sleepycat/db/DbErrcall.java
+++ b/db/java/src/com/sleepycat/db/DbErrcall.java
@@ -1,23 +1,22 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbErrcall.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbErrcall.java,v 11.16 2003/10/31 15:02:03 gburd Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbErrorHandler}
*/
-public interface DbErrcall
-{
- // methods
- //
+public interface DbErrcall {
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbErrorHandler#error(String,String)}
+ */
public abstract void errcall(String prefix, String buffer);
}
-
-// end of DbErrcall.java
diff --git a/db/java/src/com/sleepycat/db/DbErrorHandler.java b/db/java/src/com/sleepycat/db/DbErrorHandler.java
new file mode 100644
index 000000000..fdc4752c9
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/DbErrorHandler.java
@@ -0,0 +1,37 @@
+/*
+ * -
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DbErrorHandler.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+package com.sleepycat.db;
+
+/**
+ * An interface specifying a application-specific error reporting
+ * function.</p>
+ */
+public interface DbErrorHandler {
+ /**
+ * In some cases, when an error occurs, Berkeley DB will call the
+ * DbErrorHandler interface with additional error information. It
+ * is up to this interface to display the error message in an
+ * appropriate manner.</p> <p>
+ *
+ * </p>
+ *
+ * @param errpfx the prefix string (as previously set by {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} or
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}).
+ * @param msg the error message string.
+ * @param errpfx the prefix string (as previously set by {@link
+ * com.sleepycat.db.Db#setErrorPrefix Db.setErrorPrefix} or
+ * {@link com.sleepycat.db.DbEnv#setErrorPrefix
+ * DbEnv.setErrorPrefix}).
+ * @param msg the error message string.
+ */
+ public abstract void error(String errpfx, String msg);
+}
diff --git a/db/java/src/com/sleepycat/db/DbException.java b/db/java/src/com/sleepycat/db/DbException.java
index ed4d020b6..ad062e566 100644
--- a/db/java/src/com/sleepycat/db/DbException.java
+++ b/db/java/src/com/sleepycat/db/DbException.java
@@ -1,56 +1,120 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbException.java,v 11.4 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbException.java,v 11.32 2003/11/28 18:35:43 bostic Exp $
*/
-
package com.sleepycat.db;
/**
+ * This information describes the DbException class and how it is
+ * used by the various Berkeley DB classes.</p> <p>
+ *
+ * Most methods in the Berkeley DB classes throw an exception when an
+ * error occurs. A DbException object contains an informational
+ * string, an errno, and a reference to the environment from which
+ * the exception was thrown.</p> <p>
*
- * @author Donald D. Anderson
+ * Some methods may return non-zero values without issuing an
+ * exception. This occurs in situations that are not normally
+ * considered an error, but when some informational status is
+ * returned. For example, {@link com.sleepycat.db.Db#get Db.get}
+ * returns <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * Db.DB_NOTFOUND</a> when a requested key does not appear in the
+ * database.</p>
*/
-public class DbException extends Exception
-{
- // methods
- //
+public class DbException extends Exception {
+ private DbEnv dbenv_;
+ private int errno_;
- public DbException(String s)
- {
- super(s);
+
+ /**
+ * The DbException constructor returns an instance of the
+ * DbException class containing the string.</p>
+ *
+ * @param s specifies a message describing the exception.
+ */
+ public DbException(String s) {
+ this(s, 0, null);
+ }
+
+
+ /**
+ * The DbException constructor returns an instance of the
+ * DbException class containing the string and the encapsulated
+ * errno.</p>
+ *
+ * @param s specifies a message describing the exception.
+ * @param errno specifies an error code.
+ */
+ public DbException(String s, int errno) {
+ this(s, errno, null);
}
- public DbException(String s, int errno)
- {
+
+ /**
+ * The DbException constructor returns an instance of the
+ * DbException class containing the string, the encapsulated
+ * errno, and the database environment.</p>
+ *
+ * @param s specifies a message describing the exception.
+ * @param errno specifies an error code.
+ * @param dbenv the database environment where the exception
+ * occurred.
+ */
+ public DbException(String s, int errno, DbEnv dbenv) {
super(s);
this.errno_ = errno;
+ this.dbenv_ = dbenv;
}
- public String toString()
- {
- String s = super.toString();
- if (errno_ == 0)
- return s;
- else
- return s + ": " + DbEnv.strerror(errno_);
+ /**
+ * The DbException.getDbEnv method returns the database
+ * environment.</p>
+ *
+ * @return The DbException.getDbEnv method returns the database
+ * environment.</p>
+ */
+ public DbEnv getDbEnv() {
+ return dbenv_;
}
- // get/set methods
- //
- public int get_errno()
- {
+ /**
+ * The DbException.getErrno method returns the error value.</p>
+ *
+ * @return The DbException.getErrno method returns the error
+ * value.</p>
+ */
+ public int getErrno() {
+
return errno_;
}
- // private data
- //
- private int errno_ = 0;
-}
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getErrno()}
+ */
+ public int get_errno() {
+ return getErrno();
+ }
+
-// end of DbException.java
+ /**
+ * @return Description of the Return Value
+ */
+ public String toString() {
+ String s = super.toString();
+ if (errno_ == 0) {
+ return s;
+ } else {
+ return s + ": " + DbEnv.strerror(errno_);
+ }
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/DbFeedback.java b/db/java/src/com/sleepycat/db/DbFeedback.java
index d932d951a..6f33eb917 100644
--- a/db/java/src/com/sleepycat/db/DbFeedback.java
+++ b/db/java/src/com/sleepycat/db/DbFeedback.java
@@ -1,23 +1,23 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbFeedback.java,v 11.4 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbFeedback.java,v 11.19 2003/10/31 15:02:04 gburd Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbFeedbackHandler}
*/
-public interface DbFeedback
-{
- // methods
- //
- public abstract void feedback(Db db, int opcode, int pct);
+public interface DbFeedback {
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * DbFeedbackHandler#feedback(Db,int,int)
+ * DbFeedbackHandler.feedback(Db,int,int)}
+ */
+ public abstract void feedback(Db db, int opcode, int percent);
}
-
-// end of DbFeedback.java
diff --git a/db/java/src/com/sleepycat/db/DbFeedbackHandler.java b/db/java/src/com/sleepycat/db/DbFeedbackHandler.java
new file mode 100644
index 000000000..792bc0c7a
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/DbFeedbackHandler.java
@@ -0,0 +1,48 @@
+/*
+ * -
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DbFeedbackHandler.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+package com.sleepycat.db;
+
+/**
+ * The DbFeedbackHandler interface is used by the Db.setFeedback
+ * method. This interface defines the application-specific function
+ * to be called to to report Berkeley DB operation progress.
+ */
+public interface DbFeedbackHandler {
+ /**
+ * The DbFeedbackHandler interface is used by the Db.setFeedback
+ * method. This interface defines the application-specific
+ * function to be called to to report Berkeley DB operation
+ * progress. <p>
+ *
+ * </p>
+ *
+ * @param db a reference to the enclosing database.
+ * @param opcode an operation code. The <b>opcode</b> parameter
+ * may take on any of the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_UPGRADE
+ * Db.DB_UPGRADE}<p>
+ *
+ * The underlying database is being upgraded. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_VERIFY Db.DB_VERIFY}
+ * <p>
+ *
+ * The underlying database is being verified. </li>
+ * </ul>
+ *
+ * @param percent the percent of the operation that has been
+ * completed, specified as an integer value between 0 and
+ * 100.
+ */
+ public abstract void feedback(Db db, int opcode, int percent);
+}
diff --git a/db/java/src/com/sleepycat/db/DbHash.java b/db/java/src/com/sleepycat/db/DbHash.java
index a72c2070b..2b43daf5c 100644
--- a/db/java/src/com/sleepycat/db/DbHash.java
+++ b/db/java/src/com/sleepycat/db/DbHash.java
@@ -1,21 +1,30 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbHash.java,v 11.1 2000/07/04 20:53:19 dda Exp $
+ * $Id: DbHash.java,v 11.19 2003/11/28 18:35:43 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This interface is used by DbEnv.set_bt_compare()
- *
+/**
+ * An interface specifying a hashing function, which imposes a total
+ * ordering on the Hash database.</p>
*/
-public interface DbHash
-{
+public interface DbHash {
+ /**
+ * The DbHash interface is used by the Db.setHash method. This
+ * interface defines the database-specific hash function. The
+ * hash function must handle any key values used by the
+ * application (possibly including zero-length keys).</p>
+ *
+ * @param db the enclosing database handle.
+ * @param data the byte string to be hashed.
+ * @param len the length of the byte string in bytes.
+ * @return The DbHash interface returns a hash value of type
+ * int.</p>
+ */
public abstract int hash(Db db, byte[] data, int len);
}
-
-// end of DbHash.java
diff --git a/db/java/src/com/sleepycat/db/DbHashStat.java b/db/java/src/com/sleepycat/db/DbHashStat.java
index 621543447..cfbe202dc 100644
--- a/db/java/src/com/sleepycat/db/DbHashStat.java
+++ b/db/java/src/com/sleepycat/db/DbHashStat.java
@@ -1,37 +1,144 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbHashStat.java,v 11.6 2000/05/04 02:54:55 dda Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * Db.stat() method.
+/**
+ * The DbHashStat object is used to return Hash database statistics.
+ * </p>
*/
-public class DbHashStat
-{
- public int hash_magic; // Magic number.
- public int hash_version; // Version number.
- public int hash_metaflags; // Metadata flags.
- public int hash_nkeys; // Number of unique keys.
- public int hash_ndata; // Number of data items.
- public int hash_pagesize; // Page size.
- public int hash_nelem; // Original nelem specified.
- public int hash_ffactor; // Fill factor specified at create.
- public int hash_buckets; // Number of hash buckets.
- public int hash_free; // Pages on the free list.
- public int hash_bfree; // Bytes free on bucket pages.
- public int hash_bigpages; // Number of big key/data pages.
- public int hash_big_bfree; // Bytes free on big item pages.
- public int hash_overflows; // Number of overflow pages.
- public int hash_ovfl_free; // Bytes free on ovfl pages.
- public int hash_dup; // Number of dup pages.
- public int hash_dup_free; // Bytes free on duplicate pages.
-}
+public class DbHashStat {
+ /**
+ * Magic number that identifies the file as a Hash file. Returned
+ * if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int hash_magic;
+ /**
+ * The version of the Hash database. Returned if Db.DB_FAST_STAT
+ * is set.
+ *</ul>
+ *
+ */
+ public int hash_version;
+ public int hash_metaflags;
+ /**
+ * The number of unique keys in the database. If Db.DB_FAST_STAT
+ * was specified the count will be the last saved value unless it
+ * has never been calculated, in which case it will be 0.
+ * Returned if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int hash_nkeys;
+ /**
+ * The number of key/data pairs in the database. If
+ * Db.DB_FAST_STAT was specified the count will be the last saved
+ * value unless it has never been calculated, in which case it
+ * will be 0. Returned if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int hash_ndata;
+ /**
+ * The underlying Hash database page (and bucket) size, in bytes.
+ * Returned if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int hash_pagesize;
+ /**
+ * The desired fill factor (number of items per bucket) specified
+ * at database-creation time. Returned if Db.DB_FAST_STAT is set.
+ *
+ *</ul>
+ *
+ */
+ public int hash_ffactor;
+ /**
+ * The number of hash buckets. Returned if Db.DB_FAST_STAT is
+ * set.
+ *</ul>
+ *
+ */
+ public int hash_buckets;
+ /**
+ * The number of pages on the free list.
+ *</ul>
+ *
+ */
+ public int hash_free;
+ /**
+ * The number of bytes free on bucket pages.
+ *</ul>
+ *
+ */
+ public int hash_bfree;
+ /**
+ * The number of big key/data pages.
+ *</ul>
+ *
+ */
+ public int hash_bigpages;
+ /**
+ * The number of bytes free on big item pages.
+ *</ul>
+ *
+ */
+ public int hash_big_bfree;
+ /**
+ * The number of overflow pages (overflow pages are pages that
+ * contain items that did not fit in the main bucket page).
+ *</ul>
+ *
+ */
+ public int hash_overflows;
+ /**
+ * The number of bytes free on overflow pages.
+ *</ul>
+ *
+ */
+ public int hash_ovfl_free;
+ /**
+ * The number of duplicate pages.
+ *</ul>
+ *
+ */
+ public int hash_dup;
+ /**
+ * The number of bytes free on duplicate pages.
+ *</ul>
+ *
+ */
+ public int hash_dup_free;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbHashStat:"
+ + "\n hash_magic=" + hash_magic
+ + "\n hash_version=" + hash_version
+ + "\n hash_metaflags=" + hash_metaflags
+ + "\n hash_nkeys=" + hash_nkeys
+ + "\n hash_ndata=" + hash_ndata
+ + "\n hash_pagesize=" + hash_pagesize
+ + "\n hash_ffactor=" + hash_ffactor
+ + "\n hash_buckets=" + hash_buckets
+ + "\n hash_free=" + hash_free
+ + "\n hash_bfree=" + hash_bfree
+ + "\n hash_bigpages=" + hash_bigpages
+ + "\n hash_big_bfree=" + hash_big_bfree
+ + "\n hash_overflows=" + hash_overflows
+ + "\n hash_ovfl_free=" + hash_ovfl_free
+ + "\n hash_dup=" + hash_dup
+ + "\n hash_dup_free=" + hash_dup_free
+ ;
+ }
+}
// end of DbHashStat.java
diff --git a/db/java/src/com/sleepycat/db/DbKeyRange.java b/db/java/src/com/sleepycat/db/DbKeyRange.java
index 6a86afd91..d915e2493 100644
--- a/db/java/src/com/sleepycat/db/DbKeyRange.java
+++ b/db/java/src/com/sleepycat/db/DbKeyRange.java
@@ -1,23 +1,30 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbKeyRange.java,v 1.1 2000/04/12 15:07:02 dda Exp $
+ * $Id: DbKeyRange.java,v 1.12 2003/10/20 20:12:36 mjc Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
*/
-public class DbKeyRange
-{
- public double less;
+public class DbKeyRange {
+ /**
+ * A value between 0 and 1, the proportion of keys equal to the
+ * specified key.
+ */
public double equal;
+ /**
+ * A value between 0 and 1, the proportion of keys greater than
+ * the specified key.
+ */
public double greater;
+ /**
+ * A value between 0 and 1, the proportion of keys less than the
+ * specified key.
+ */
+ public double less;
}
-
-// end of DbKeyRange.java
diff --git a/db/java/src/com/sleepycat/db/DbLock.java b/db/java/src/com/sleepycat/db/DbLock.java
index bc467913e..012bad2e7 100644
--- a/db/java/src/com/sleepycat/db/DbLock.java
+++ b/db/java/src/com/sleepycat/db/DbLock.java
@@ -1,38 +1,57 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbLock.java,v 11.4 2000/05/25 04:18:13 dda Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
+ * The locking interfaces for the Berkeley DB database environment
+ * are methods of the {@link com.sleepycat.db.DbEnv DbEnv} handle.
+ * The DbLock object is the handle for a single lock, and has no
+ * methods of its own.</p>
*/
-public class DbLock
-{
- protected native void finalize()
- throws Throwable;
+public class DbLock {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbLock(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
- // methods
- //
- public native void put(DbEnv env)
- throws DbException;
- // get/set methods
- //
+ protected DbLock() {
+ this(0, false);
+ }
- // private data
- //
- private long private_dbobj_ = 0;
- static {
- Db.load_db();
+ protected void finalize() {
+ try {
+ delete();
+ } catch (Exception e) {
+ System.err.println("Exception during finalization: " + e);
+ e.printStackTrace(System.err);
+ }
}
-}
-// end of DbLock.java
+
+ void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ db_javaJNI.delete_DbLock(swigCPtr);
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
+
+
+ protected static long getCPtr(DbLock obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbLockNotGrantedException.java b/db/java/src/com/sleepycat/db/DbLockNotGrantedException.java
index 788943daa..d00c59433 100644
--- a/db/java/src/com/sleepycat/db/DbLockNotGrantedException.java
+++ b/db/java/src/com/sleepycat/db/DbLockNotGrantedException.java
@@ -1,20 +1,49 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbLockNotGrantedException.java,v 11.3 2002/01/11 15:52:36 bostic Exp
+ * $Id: DbLockNotGrantedException.java,v 1.3 2003/12/15 21:44:12 jbj Exp $
*/
-
package com.sleepycat.db;
+/**
+ * This information describes the DbLockNotGrantedException class and
+ * how it is used by the various Db* classes.</p> <p>
+ *
+ * A DbLockNotGrantedException is thrown when a lock, requested using
+ * the {@link com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} or {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} methods, where
+ * the {@link com.sleepycat.db.Db#DB_LOCK_NOWAIT Db.DB_LOCK_NOWAIT}
+ * option was specified, is unable to be granted immediately.</p>
+ */
public class DbLockNotGrantedException extends DbException {
- public DbLockNotGrantedException(String message,
- int op, int mode, Dbt obj,
- DbLock lock, int index)
- {
- super(message, Db.DB_LOCK_NOTGRANTED);
+ private int index;
+ private DbLock lock;
+ private int mode;
+ private Dbt obj;
+
+ private int op;
+
+
+ /**
+ * Constructor for the DbLockNotGrantedException object
+ *
+ * @param message A description of the error
+ * @param op The operation of the failed lock request
+ * @param mode The mode of the failed lock request
+ * @param obj The object of the failed lock request
+ * @param lock The lock of the failed lock request
+ * (lockVector only)
+ * @param index The index of the failed lock request
+ * (lockVector only)
+ * @param dbenv The database environment where the exception
+ * occurred.
+ */
+ protected DbLockNotGrantedException(String message, int op, int mode, Dbt obj, DbLock lock, int index, DbEnv dbenv) {
+ super(message, Db.DB_LOCK_NOTGRANTED, dbenv);
this.op = op;
this.mode = mode;
this.obj = obj;
@@ -22,36 +51,149 @@ public class DbLockNotGrantedException extends DbException {
this.index = index;
}
- public int get_op()
- {
- return op;
+
+ /**
+ * The <b>getIndex</b> method returns -1 when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called, and
+ * returns the index of the failed DbLockRequest when {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} was
+ * called.</p>
+ *
+ * @return The <b>getIndex</b> method returns -1 when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called,
+ * and returns the index of the failed DbLockRequest when
+ * {@link com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector}
+ * was called.</p>
+ */
+ public int getIndex() {
+ return index;
+ }
+
+
+ /**
+ * The <b>getLock</b> method returns null when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called, and
+ * returns the <b>lock</b> in the failed DbLockRequest when
+ * {@link com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} was
+ * called.</p>
+ *
+ * @return The <b>getLock</b> method returns null when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called,
+ * and returns the <b>lock</b> in the failed DbLockRequest
+ * when {@link com.sleepycat.db.DbEnv#lockVector
+ * DbEnv.lockVector} was called.</p>
+ */
+ public DbLock getLock() {
+ return lock;
}
- public int get_mode()
- {
+
+ /**
+ * The <b>getMode</b> method returns the <b>mode</b> parameter
+ * when {@link com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was
+ * called, and returns the <b>mode</b> for the failed
+ * DbLockRequest when {@link com.sleepycat.db.DbEnv#lockVector
+ * DbEnv.lockVector} was called.</p>
+ *
+ * @return The <b>getMode</b> method returns the <b>mode</b>
+ * parameter when {@link com.sleepycat.db.DbEnv#lockGet
+ * DbEnv.lockGet} was called, and returns the <b>mode</b> for
+ * the failed DbLockRequest when {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} was
+ * called.</p>
+ */
+ public int getMode() {
return mode;
}
- public Dbt get_obj()
- {
+
+ /**
+ * The <b>getObj</b> method returns the <b>mode</b> parameter
+ * when returns the <b>object</b> parameter when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called, and
+ * returns the <b>object</b> for the failed DbLockRequest when
+ * {@link com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} was
+ * called. </p>
+ *
+ * @return The <b>getObj</b> method returns the <b>mode</b>
+ * parameter when returns the <b>object</b> parameter when
+ * {@link com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was
+ * called, and returns the <b>object</b> for the failed
+ * DbLockRequest when {@link com.sleepycat.db.DbEnv#lockVector
+ * DbEnv.lockVector} was called.</p>
+ */
+ public Dbt getObj() {
+
return obj;
}
- public DbLock get_lock()
- {
- return lock;
+
+ /**
+ * The <b>getOp</b> method returns 0 when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called, and
+ * returns the <b>op</b> for the failed DbLockRequest when {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} was
+ * called.</p>
+ *
+ * @return The <b>getOp</b> method returns 0 when {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} was called,
+ * and returns the <b>op</b> for the failed DbLockRequest
+ * when {@link com.sleepycat.db.DbEnv#lockVector
+ * DbEnv.lockVector} was called.</p>
+ */
+ public int getOp() {
+ return op;
}
- public int get_index()
- {
- return index;
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getIndex()}
+ */
+ public int get_index() {
+ return getIndex();
}
- private int op;
- private int mode;
- private Dbt obj;
- private DbLock lock;
- private int index;
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLock()}
+ */
+ public DbLock get_lock() {
+ return getLock();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getMode()}
+ */
+ public int get_mode() {
+ return getMode();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getObj()}
+ */
+ public Dbt get_obj() {
+ return getObj();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOp()}
+ */
+ public int get_op() {
+ return getOp();
+ }
}
diff --git a/db/java/src/com/sleepycat/db/DbLockRequest.java b/db/java/src/com/sleepycat/db/DbLockRequest.java
index 46f4c349e..d0a5e2c67 100644
--- a/db/java/src/com/sleepycat/db/DbLockRequest.java
+++ b/db/java/src/com/sleepycat/db/DbLockRequest.java
@@ -1,67 +1,255 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbLockRequest.java,v 11.4 2002/01/16 07:45:24 mjc Exp
+ * $Id: DbLockRequest.java,v 1.3 2003/12/15 21:44:12 jbj Exp $
*/
-
package com.sleepycat.db;
-public class DbLockRequest
-{
- public DbLockRequest(int op, int mode, Dbt obj, DbLock lock)
- {
+/**
+ * The DbLockRequest object is used to encapsulate a single lock
+ * request.</p>
+ */
+public class DbLockRequest {
+ private DbLock lock;
+ /*
+ * db_lockmode_t
+ */
+ private int mode;
+ private Dbt obj;
+
+ /*
+ * db_lockop_t
+ */
+ private int op;
+ /*
+ * db_timeout_t
+ */
+ private int timeout;
+
+
+ /**
+ * The DbLockRequest constructor constructs a DbLockRequest with
+ * the specified operation, mode and lock, for the specified
+ * object.</p>
+ *
+ * @param lock the lock type for the object.
+ * @param mode the permissions mode for the object.
+ * @param obj the object being locked.
+ * @param op The <b>op</b> parameter operation being
+ * performed.
+ */
+ public DbLockRequest(int op, int mode, Dbt obj, DbLock lock) {
+
+ this(op, mode, obj, lock, 0);
+ }
+
+
+ /**
+ * The DbLockRequest constructor constructs a DbLockRequest with
+ * the specified operation, mode, lock and timeout for the
+ * specified object.</p>
+ *
+ * @param lock the lock type for the object.
+ * @param mode the permissions mode for the object.
+ * @param obj the object being locked.
+ * @param op the operation being performed.
+ * @param timeout the timeout value for the lock.
+ */
+ public DbLockRequest(int op, int mode, Dbt obj, DbLock lock, int timeout) {
+
this.op = op;
this.mode = mode;
this.obj = obj;
this.lock = lock;
+ this.timeout = timeout;
}
- public int get_op()
- {
- return op;
+
+ /**
+ * The DbLockRequest.setLock method sets the lock reference.</p>
+ *
+ * @param lock the lock reference.
+ */
+ public void setLock(DbLock lock) {
+ this.lock = lock;
+ }
+
+
+ /**
+ * The DbLockRequest.setMode method sets the lock mode.</p>
+ *
+ * @param mode the lock mode.
+ */
+ public void setMode(int mode) {
+ this.mode = mode;
+ }
+
+
+ /**
+ * The DbLockRequest.setObj method sets the lock object.</p>
+ *
+ * @param obj the lock object.
+ */
+ public void setObj(Dbt obj) {
+ this.obj = obj;
}
- public void set_op(int op)
- {
+
+ /**
+ * The DbLockRequest.setOp method sets the operation.</p>
+ *
+ * @param op the operation.
+ */
+ public void setOp(int op) {
this.op = op;
}
- public int get_mode()
- {
- return mode;
+
+ /**
+ * The DbLockRequest.setTimeout method sets the lock timeout
+ * value.</p>
+ *
+ * @param timeout the lock timeout value.
+ */
+ public void setTimeout(int timeout) {
+ this.timeout = timeout;
}
- public void set_mode(int mode)
- {
- this.mode = mode;
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setLock(DbLock)}
+ */
+ public void set_lock(DbLock lock) {
+ setLock(lock);
}
- public Dbt get_obj()
- {
- return obj;
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setMode(int)}
+ */
+ public void set_mode(int mode) {
+ setMode(mode);
}
- public void set_obj(Dbt obj)
- {
- this.obj = obj;
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setObj(Dbt)}
+ */
+ public void set_obj(Dbt obj) {
+ setObj(obj);
}
- public DbLock get_lock()
- {
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setOp(int)}
+ */
+ public void set_op(int op) {
+ setOp(op);
+ }
+
+
+ /**
+ * The DbLockRequest.getLock method returns the lock reference.
+ * </p>
+ *
+ * @return The DbLockRequest.getLock method returns the lock
+ * reference.</p>
+ */
+ public DbLock getLock() {
return lock;
}
- public void set_lock(DbLock lock)
- {
- this.lock = lock;
+
+ /**
+ * The DbLockRequest.getMode method returns the lock mode.</p>
+ *
+ * @return The DbLockRequest.getMode method returns the lock
+ * mode.</p>
+ */
+ public int getMode() {
+ return mode;
}
- private /* db_lockop_t */ int op;
- private /* db_lockmode_t */ int mode;
- private /* db_timeout_t */ int timeout;
- private Dbt obj;
- private DbLock lock;
+
+ /**
+ * The DbLockRequest.getObj method returns the object protected
+ * by this lock.</p>
+ *
+ * @return The DbLockRequest.getObj method returns the object
+ * protected by this lock.</p>
+ */
+ public Dbt getObj() {
+ return obj;
+ }
+
+
+ /**
+ * The DbLockRequest.getOp method returns the operation.</p>
+ *
+ * @return The DbLockRequest.getOp method returns the
+ * operation.</p>
+ */
+ public int getOp() {
+ return op;
+ }
+
+
+ /**
+ * The DbLockRequest.getTimeout method returns the lock timeout
+ * value.</p>
+ *
+ * @return The DbLockRequest.getTimeout method returns the lock
+ * timeout value.</p>
+ */
+ public int getTimeout() {
+ return timeout;
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getLock()}
+ */
+ public DbLock get_lock() {
+ return getLock();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getMode()}
+ */
+ public int get_mode() {
+ return getMode();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getObj()}
+ */
+ public Dbt get_obj() {
+ return getObj();
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOp()}
+ */
+ public int get_op() {
+ return getOp();
+ }
}
diff --git a/db/java/src/com/sleepycat/db/DbLockStat.java b/db/java/src/com/sleepycat/db/DbLockStat.java
index f23f2ad5d..1899fc5b3 100644
--- a/db/java/src/com/sleepycat/db/DbLockStat.java
+++ b/db/java/src/com/sleepycat/db/DbLockStat.java
@@ -1,30 +1,199 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbLockStat.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbLockTab.stat() method.
+/**
+ * The DbLockStat object is used to return lock region statistics.
+ * </p>
*/
-public class DbLockStat
-{
- public int st_maxlocks; // Maximum number of locks in table.
- public int st_nmodes; // Number of lock modes.
- public int st_nlockers; // Number of lockers.
- public int st_nconflicts; // Number of lock conflicts.
- public int st_nrequests; // Number of lock gets.
- public int st_nreleases; // Number of lock puts.
- public int st_ndeadlocks; // Number of lock deadlocks.
- public int st_region_wait; // Region lock granted after wait.
- public int st_region_nowait; // Region lock granted without wait.
- public int st_regsize; // Region size.
-}
+public class DbLockStat {
+ /**
+ * The last allocated locker ID.
+ *</ul>
+ *
+ */
+ public int st_id;
+ /**
+ * The current maximum unused locker ID.
+ *</ul>
+ *
+ */
+ public int st_cur_maxid;
+ /**
+ * The maximum number of locks possible.
+ *</ul>
+ *
+ */
+ public int st_maxlocks;
+ /**
+ * The maximum number of lockers possible.
+ *</ul>
+ *
+ */
+ public int st_maxlockers;
+ /**
+ * The maximum number of lock objects possible.
+ *</ul>
+ *
+ */
+ public int st_maxobjects;
+ /**
+ * The number of lock modes.
+ *</ul>
+ *
+ */
+ public int st_nmodes;
+ /**
+ * The number of current locks.
+ *</ul>
+ *
+ */
+ public int st_nlocks;
+ /**
+ * The maximum number of locks at any one time.
+ *</ul>
+ *
+ */
+ public int st_maxnlocks;
+ /**
+ * The number of current lockers.
+ *</ul>
+ *
+ */
+ public int st_nlockers;
+ /**
+ * The maximum number of lockers at any one time.
+ *</ul>
+ *
+ */
+ public int st_maxnlockers;
+ /**
+ * The number of current lock objects.
+ *</ul>
+ *
+ */
+ public int st_nobjects;
+ /**
+ * The maximum number of lock objects at any one time.
+ *</ul>
+ *
+ */
+ public int st_maxnobjects;
+ /**
+ * The total number of locks not immediately available due to
+ * conflicts.
+ *</ul>
+ *
+ */
+ public int st_nconflicts;
+ /**
+ * The total number of locks requested.
+ *</ul>
+ *
+ */
+ public int st_nrequests;
+ /**
+ * The total number of locks released.
+ *</ul>
+ *
+ */
+ public int st_nreleases;
+ /**
+ * The total number of lock requests failing because {@link
+ * com.sleepycat.db.Db#DB_LOCK_NOWAIT Db.DB_LOCK_NOWAIT} was set.
+ *
+ *</ul>
+ *
+ */
+ public int st_nnowaits;
+ /**
+ * The number of deadlocks.
+ *</ul>
+ *
+ */
+ public int st_ndeadlocks;
+ /**
+ * Lock timeout value.
+ *</ul>
+ *
+ */
+ public int st_locktimeout;
+ /**
+ * The number of lock requests that have timed out.
+ *</ul>
+ *
+ */
+ public int st_nlocktimeouts;
+ /**
+ * Transaction timeout value.
+ *</ul>
+ *
+ */
+ public int st_txntimeout;
+ /**
+ * The number of transactions that have timed out. This value is
+ * also a component of <b>st_ndeadlocks</b> , the total number of
+ * deadlocks detected.
+ *</ul>
+ *
+ */
+ public int st_ntxntimeouts;
+ /**
+ * The number of times that a thread of control was forced to
+ * wait before obtaining the region lock.
+ *</ul>
+ *
+ */
+ public int st_region_wait;
+ /**
+ * The number of times that a thread of control was able to
+ * obtain the region lock without waiting.
+ *</ul>
+ *
+ */
+ public int st_region_nowait;
+ /**
+ * The size of the lock region.
+ *</ul>
+ *
+ */
+ public int st_regsize;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbLockStat:"
+ + "\n st_id=" + st_id
+ + "\n st_cur_maxid=" + st_cur_maxid
+ + "\n st_maxlocks=" + st_maxlocks
+ + "\n st_maxlockers=" + st_maxlockers
+ + "\n st_maxobjects=" + st_maxobjects
+ + "\n st_nmodes=" + st_nmodes
+ + "\n st_nlocks=" + st_nlocks
+ + "\n st_maxnlocks=" + st_maxnlocks
+ + "\n st_nlockers=" + st_nlockers
+ + "\n st_maxnlockers=" + st_maxnlockers
+ + "\n st_nobjects=" + st_nobjects
+ + "\n st_maxnobjects=" + st_maxnobjects
+ + "\n st_nconflicts=" + st_nconflicts
+ + "\n st_nrequests=" + st_nrequests
+ + "\n st_nreleases=" + st_nreleases
+ + "\n st_nnowaits=" + st_nnowaits
+ + "\n st_ndeadlocks=" + st_ndeadlocks
+ + "\n st_locktimeout=" + st_locktimeout
+ + "\n st_nlocktimeouts=" + st_nlocktimeouts
+ + "\n st_txntimeout=" + st_txntimeout
+ + "\n st_ntxntimeouts=" + st_ntxntimeouts
+ + "\n st_region_wait=" + st_region_wait
+ + "\n st_region_nowait=" + st_region_nowait
+ + "\n st_regsize=" + st_regsize
+ ;
+ }
+}
// end of DbLockStat.java
diff --git a/db/java/src/com/sleepycat/db/DbLogStat.java b/db/java/src/com/sleepycat/db/DbLogStat.java
index d708f1c41..285bbba0e 100644
--- a/db/java/src/com/sleepycat/db/DbLogStat.java
+++ b/db/java/src/com/sleepycat/db/DbLogStat.java
@@ -1,35 +1,180 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbLogStat.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbLog.stat() method.
+/**
+ * The DbLogStat object is used to return logging subsystem
+ * statistics.</p>
*/
-public class DbLogStat
-{
- public int st_magic; // Log file magic number.
- public int st_version; // Log file version number.
- public int st_mode; // Log file mode.
- public int st_lg_max; // Maximum log file size.
- public int st_w_bytes; // Bytes to log.
- public int st_w_mbytes; // Megabytes to log.
- public int st_wc_bytes; // Bytes to log since checkpoint.
- public int st_wc_mbytes; // Megabytes to log since checkpoint.
- public int st_wcount; // Total syncs to the log.
- public int st_scount; // Total writes to the log.
- public int st_region_wait; // Region lock granted after wait.
- public int st_region_nowait; // Region lock granted without wait.
- public int st_cur_file; // Current log file number.
- public int st_cur_offset; // Current log file offset.
- public int st_regsize; // Region size.
-}
+public class DbLogStat {
+ /**
+ * The magic number that identifies a file as a log file.
+ *</ul>
+ *
+ */
+ public int st_magic;
+ /**
+ * The version of the log file type.
+ *</ul>
+ *
+ */
+ public int st_version;
+ /**
+ * The mode of any created log files.
+ *</ul>
+ *
+ */
+ public int st_mode;
+ /**
+ * The in-memory log record cache size.
+ *</ul>
+ *
+ */
+ public int st_lg_bsize;
+ /**
+ * The current log file size.
+ *</ul>
+ *
+ */
+ public int st_lg_size;
+ /**
+ * The number of bytes over and above <b>st_w_mbytes</b> written
+ * to this log.
+ *</ul>
+ *
+ */
+ public int st_w_bytes;
+ /**
+ * The number of megabytes written to this log.
+ *</ul>
+ *
+ */
+ public int st_w_mbytes;
+ /**
+ * The number of bytes over and above <b>st_wc_mbytes</b> written
+ * to this log since the last checkpoint.
+ *</ul>
+ *
+ */
+ public int st_wc_bytes;
+ /**
+ * The number of megabytes written to this log since the last
+ * checkpoint.
+ *</ul>
+ *
+ */
+ public int st_wc_mbytes;
+ /**
+ * The number of times the log has been written to disk.
+ *</ul>
+ *
+ */
+ public int st_wcount;
+ /**
+ * The number of times the log has been written to disk because
+ * the in-memory log record cache filled up.
+ *</ul>
+ *
+ */
+ public int st_wcount_fill;
+ /**
+ * The number of times the log has been flushed to disk.
+ *</ul>
+ *
+ */
+ public int st_scount;
+ /**
+ * The number of times that a thread of control was forced to
+ * wait before obtaining the region lock.
+ *</ul>
+ *
+ */
+ public int st_region_wait;
+ /**
+ * The number of times that a thread of control was able to
+ * obtain the region lock without waiting.
+ *</ul>
+ *
+ */
+ public int st_region_nowait;
+ /**
+ * The current log file number.
+ *</ul>
+ *
+ */
+ public int st_cur_file;
+ /**
+ * The byte offset in the current log file.
+ *</ul>
+ *
+ */
+ public int st_cur_offset;
+ /**
+ * The log file number of the last record known to be on disk.
+ *
+ *</ul>
+ *
+ */
+ public int st_disk_file;
+ /**
+ * The byte offset of the last record known to be on disk.
+ *</ul>
+ *
+ */
+ public int st_disk_offset;
+ /**
+ * The size of the region.
+ *</ul>
+ *
+ */
+ public int st_regsize;
+ /**
+ * The maximum number of commits contained in a single log flush.
+ *
+ *</ul>
+ *
+ */
+ public int st_maxcommitperflush;
+ /**
+ * The minimum number of commits contained in a single log flush
+ * that contained a commit.
+ *</ul>
+ *
+ */
+ public int st_mincommitperflush;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbLogStat:"
+ + "\n st_magic=" + st_magic
+ + "\n st_version=" + st_version
+ + "\n st_mode=" + st_mode
+ + "\n st_lg_bsize=" + st_lg_bsize
+ + "\n st_lg_size=" + st_lg_size
+ + "\n st_w_bytes=" + st_w_bytes
+ + "\n st_w_mbytes=" + st_w_mbytes
+ + "\n st_wc_bytes=" + st_wc_bytes
+ + "\n st_wc_mbytes=" + st_wc_mbytes
+ + "\n st_wcount=" + st_wcount
+ + "\n st_wcount_fill=" + st_wcount_fill
+ + "\n st_scount=" + st_scount
+ + "\n st_region_wait=" + st_region_wait
+ + "\n st_region_nowait=" + st_region_nowait
+ + "\n st_cur_file=" + st_cur_file
+ + "\n st_cur_offset=" + st_cur_offset
+ + "\n st_disk_file=" + st_disk_file
+ + "\n st_disk_offset=" + st_disk_offset
+ + "\n st_regsize=" + st_regsize
+ + "\n st_maxcommitperflush=" + st_maxcommitperflush
+ + "\n st_mincommitperflush=" + st_mincommitperflush
+ ;
+ }
+}
// end of DbLogStat.java
diff --git a/db/java/src/com/sleepycat/db/DbLogc.java b/db/java/src/com/sleepycat/db/DbLogc.java
index fb9e0f87c..f0e7f5cad 100644
--- a/db/java/src/com/sleepycat/db/DbLogc.java
+++ b/db/java/src/com/sleepycat/db/DbLogc.java
@@ -1,39 +1,218 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: DbLogc.java,v 11.3 2002/01/11 15:52:37 bostic Exp
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
+ * The DbLogc object is the handle for a cursor into the log files,
+ * supporting sequential access to the records stored in log files.
+ * The handle is not free-threaded. Once the {@link
+ * com.sleepycat.db.DbLogc#close DbLogc.close} method is called, the
+ * handle may not be accessed again, regardless of that method's
+ * return.</p>
*/
-public class DbLogc
-{
- // methods
- //
- public native void close(int flags)
- throws DbException;
-
- // returns: 0, DB_NOTFOUND, or throws error
- public native int get(DbLsn lsn, Dbt data, int flags)
- throws DbException;
-
- protected native void finalize()
- throws Throwable;
-
- // private data
- //
- private long private_dbobj_ = 0;
-
- static {
- Db.load_db();
+public class DbLogc {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbLogc(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
}
-}
-// end of DbLogc.java
+
+ protected DbLogc() {
+ this(0, false);
+ }
+
+
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
+
+
+ protected static long getCPtr(DbLogc obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+
+ /**
+ * The DbLogc.close method discards the log cursor. After
+ * DbLogc.close has been called, regardless of its return, the
+ * cursor handle may not be used again.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws IllegalArgumentException The DbLogc.close method will
+ * fail and throw a IllegalArgumentException exception if the
+ * cursor was previously closed; or if an invalid flag value
+ * or parameter was specified.
+ */
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+
+ void close0(int flags) {
+ db_javaJNI.DbLogc_close0(swigCPtr, flags);
+ }
+
+
+ /**
+ * The DbLogc.get method returns records from the log.</p>
+ *
+ * @param data The data field of the <b>
+ * data</b> structure is set to the record retrieved, and the
+ * size field indicates the number of bytes in the record.
+ * See {@link com.sleepycat.db.Dbt Dbt} for a description of
+ * other fields in the <b>data</b> structure. The {@link
+ * com.sleepycat.db.Db#DB_DBT_MALLOC Db.DB_DBT_MALLOC},
+ * {@link com.sleepycat.db.Db#DB_DBT_REALLOC
+ * Db.DB_DBT_REALLOC} and {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM Db.DB_DBT_USERMEM}
+ * flags may be specified for any {@link com.sleepycat.db.Dbt
+ * Dbt} used for data retrieval.
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CURRENT
+ * Db.DB_CURRENT}<p>
+ *
+ * Return the log record to which the log currently refers.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FIRST Db.DB_FIRST}<p>
+ *
+ * The first record from any of the log files found in the
+ * log directory is returned in the <b>data</b> parameter.
+ * overwritten with the {@link com.sleepycat.db.DbLsn
+ * DbLsn} of the record returned. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LAST Db.DB_LAST}<p>
+ *
+ * The last record in the log is returned in the <b>data
+ * </b> parameter. overwritten with the {@link
+ * com.sleepycat.db.DbLsn DbLsn} of the record returned.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT Db.DB_NEXT}<p>
+ *
+ * The current log position is advanced to the next record
+ * in the log, and that record is returned in the <b>data
+ * </b> parameter. overwritten with the {@link
+ * com.sleepycat.db.DbLsn DbLsn} of the record returned.
+ * <p>
+ *
+ * If the cursor has not been initialized via DB_FIRST,
+ * DB_LAST, DB_SET, DB_NEXT, or DB_PREV, DbLogc.get will
+ * return the first record in the log.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PREV Db.DB_PREV}<p>
+ *
+ * The current log position is advanced to the previous
+ * record in the log, and that record is returned in the
+ * <b>data</b> parameter. overwritten with the {@link
+ * com.sleepycat.db.DbLsn DbLsn} of the record returned.
+ * <p>
+ *
+ * If the cursor has not been initialized via DB_FIRST,
+ * DB_LAST, DB_SET, DB_NEXT, or DB_PREV, DbLogc.get will
+ * return the last record in the log.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET Db.DB_SET}<p>
+ *
+ * Retrieve the record specified by the <b>lsn</b>
+ * parameter. </li>
+ * </ul>
+ *
+ * @param lsn When the <b>flag</b>
+ * parameter is set to Db.DB_CURRENT, Db.DB_FIRST,
+ * Db.DB_LAST, Db.DB_NEXT or Db.DB_PREV, the <b>lsn</b>
+ * parameter is overwritten with the {@link
+ * com.sleepycat.db.DbLsn DbLsn} value of the record
+ * retrieved. When <b>flag</b> is set to Db.DB_SET, the <b>
+ * lsn</b> parameter is the {@link com.sleepycat.db.DbLsn
+ * DbLsn} value of the record to be retrieved.
+ * @throws IllegalArgumentException The DbLogc.get method will
+ * fail and throw a IllegalArgumentException exception if the
+ * Db.DB_CURRENT flag was set and the log cursor has not yet
+ * been initialized; the Db.DB_CURRENT, Db.DB_NEXT, or
+ * Db.DB_PREV flags were set and the log was opened with the
+ * DB_THREAD flag set; the Db.DB_SET flag was set and the
+ * specified log sequence number does not appear in the log;
+ * or if an invalid flag value or parameter was specified.
+ * @return Unless otherwise specified,
+ * the DbLogc.get method throws an exception that
+ * encapsulates a non-zero error value on failure. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The DbLogc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code>
+ * is set and the log is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The DbLogc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code>
+ * is set and the log is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The DbLogc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code>
+ * is set and the last log record has already been returned
+ * or the log is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The DbLogc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code>
+ * is set and the first log record has already been
+ * returned or the log is empty. </li>
+ * </ul>
+ * </p>
+ */
+ public int get(DbLsn lsn, Dbt data, int flags) throws DbException {
+ return db_javaJNI.DbLogc_get(swigCPtr, DbLsn.getCPtr(lsn), data, flags);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbLsn.java b/db/java/src/com/sleepycat/db/DbLsn.java
index ff36ac61c..840e9a1ac 100644
--- a/db/java/src/com/sleepycat/db/DbLsn.java
+++ b/db/java/src/com/sleepycat/db/DbLsn.java
@@ -1,42 +1,117 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbLsn.java,v 11.5 2000/09/11 16:21:37 dda Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
/**
- *
- * @author Donald D. Anderson
+ * The DbLsn object is a <b>log sequence number</b> which specifies a
+ * unique location in a log file. A DbLsn consists of two unsigned
+ * 32-bit integers -- one specifies the log file number, and the
+ * other specifies an offset in the log file.</p>
*/
-public class DbLsn
-{
- // methods
- //
- public DbLsn()
- {
- init_lsn();
+public class DbLsn {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbLsn(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+
+ protected DbLsn() {
+ this(0, false);
}
- protected native void finalize()
- throws Throwable;
- private native void init_lsn();
+ protected void finalize() {
+ try {
+ delete();
+ } catch (Exception e) {
+ System.err.println("Exception during finalization: " + e);
+ e.printStackTrace(System.err);
+ }
+ }
+
- // get/set methods
- //
+ void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ db_javaJNI.delete_DbLsn(swigCPtr);
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
- // private data
- //
- private long private_dbobj_ = 0;
- static {
- Db.load_db();
+ protected static long getCPtr(DbLsn obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+
+ /**
+ * The DbLsn constructor constructs a DbLsn with the specified
+ * file and offset.</p>
+ *
+ * @param file the log file number.
+ * @param offset the log file offset.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public DbLsn(int file, int offset) throws DbException {
+ this(db_javaJNI.new_DbLsn(file, offset), true);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFile()}
+ */
+ public int get_file() throws DbException {
+ return getFile();
+ }
+
+
+ /**
+ * The DbLsn.getFile method returns the DbLsn object's file
+ * number.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbLsn.getFile method returns the
+ * DbLsn object's file number.</p>
+ */
+ public int getFile() throws DbException {
+ return db_javaJNI.DbLsn_get_file(swigCPtr);
}
-}
-// end of DbLsn.java
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOffset()}
+ */
+ public int get_offset() throws DbException {
+ return getOffset();
+ }
+
+
+ /**
+ * The DbLsn.getOffset method returns the DbLsn object's file
+ * number.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbLsn.getOffset method returns the
+ * DbLsn object's file number.</p>
+ */
+ public int getOffset() throws DbException {
+ return db_javaJNI.DbLsn_get_offset(swigCPtr);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbMemoryException.java b/db/java/src/com/sleepycat/db/DbMemoryException.java
index 67a29a1f1..5a4c12fbc 100644
--- a/db/java/src/com/sleepycat/db/DbMemoryException.java
+++ b/db/java/src/com/sleepycat/db/DbMemoryException.java
@@ -1,27 +1,108 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbMemoryException.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbMemoryException.java,v 11.28 2003/11/28 18:35:45 bostic Exp $
*/
-
package com.sleepycat.db;
-public class DbMemoryException extends DbException
-{
- // methods
- //
+/**
+ * This information describes the DbMemoryException class and how it
+ * is used by the various Db* classes.</p> <p>
+ *
+ * A DbMemoryException is thrown when there is insufficient memory to
+ * complete an operation, and there is the possibility of recovering.
+ * An example is during a {@link com.sleepycat.db.Db#get Db.get} or
+ * {@link com.sleepycat.db.Dbc#get Dbc.get} operation with the {@link
+ * com.sleepycat.db.Dbt Dbt} flags set to {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM Db.DB_DBT_USERMEM}.</p> <p>
+ *
+ * In a Java Virtual Machine, there are usually separate heaps for
+ * memory allocated by native code and for objects allocated in Java
+ * code. If the Java heap is exhausted, the JVM will throw an
+ * OutOfMemoryError, so you may see that exception rather than
+ * DbMemoryException.</p>
+ */
+public class DbMemoryException extends DbException {
+
+ Dbt dbt = null;
+ String message;
- public DbMemoryException(String s)
- {
- super(s);
+
+ /**
+ * Constructor for the DbMemoryException object
+ *
+ */
+ protected DbMemoryException(String s, Dbt dbt, int errno, DbEnv dbenv) {
+ super(s, errno, dbenv);
+ this.message = s;
+ this.dbt = dbt;
}
- public DbMemoryException(String s, int errno)
- {
- super(s, errno);
+
+ /**
+ * The <b>getDbt</b> method returns the {@link
+ * com.sleepycat.db.Dbt Dbt} with insufficient memory to complete
+ * the operation, causing the DbMemoryException to be thrown.
+ * </p>
+ *
+ * @return The <b>getDbt</b> method returns the {@link
+ * com.sleepycat.db.Dbt Dbt} with insufficient memory to
+ * complete the operation, causing the DbMemoryException to
+ * be thrown.</p>
+ */
+ public Dbt getDbt() {
+ return dbt;
+ }
+
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getDbt()}
+ */
+ public Dbt get_dbt() {
+ return getDbt();
+ }
+
+
+ /**
+ * Override of DbException.toString(): the extra verbage that
+ * comes from DbEnv.strerror(ENOMEM) is not helpful.
+ *
+ * @return Description of the Return Value
+ */
+ public String toString() {
+ return message;
+ }
+
+
+ /**
+ * The updateDbt method is called from native code to set the
+ * Dbt. If it is called multiple times, only the first Dbt is
+ * saved.
+ *
+ * @param dbt The Dbt object for which this exception was thrown
+ */
+ void updateDbt(Dbt dbt) {
+ if (this.dbt == null) {
+ this.message = "Dbt not large enough for available data";
+ this.dbt = dbt;
+ }
+ }
+
+
+ /**
+ * @param dbt The Dbt object for which this exception was
+ * thrown
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #updateDbt(Dbt)}
+ */
+ void update_dbt(Dbt dbt) {
+ updateDbt(dbt);
}
}
diff --git a/db/java/src/com/sleepycat/db/DbMpoolFStat.java b/db/java/src/com/sleepycat/db/DbMpoolFStat.java
index 44497b3bf..3bb26fddb 100644
--- a/db/java/src/com/sleepycat/db/DbMpoolFStat.java
+++ b/db/java/src/com/sleepycat/db/DbMpoolFStat.java
@@ -1,28 +1,80 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbMpoolFStat.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbMpool.fstat() method.
+/**
+ * The DbMpoolFStat object is used to return memory pool per-file
+ * statistics.</p>
*/
-public class DbMpoolFStat
-{
- public String file_name; // File name.
- public int st_pagesize; // Page size.
- public int st_cache_hit; // Pages found in the cache.
- public int st_cache_miss; // Pages not found in the cache.
- public int st_map; // Pages from mapped files.
- public int st_page_create; // Pages created in the cache.
- public int st_page_in; // Pages read in.
- public int st_page_out; // Pages written out.
-}
+public class DbMpoolFStat {
+ /**
+ * The name of the file.
+ *</ul>
+ *
+ */
+ public String file_name;
+ /**
+ * Page size in bytes.
+ *</ul>
+ *
+ */
+ public int st_pagesize;
+ /**
+ * Requested pages mapped into the process' address space.
+ *</ul>
+ *
+ */
+ public int st_map;
+ /**
+ * Requested pages found in the cache.
+ *</ul>
+ *
+ */
+ public int st_cache_hit;
+ /**
+ * Requested pages not found in the cache.
+ *</ul>
+ *
+ */
+ public int st_cache_miss;
+ /**
+ * Pages created in the cache.
+ *</ul>
+ *
+ */
+ public int st_page_create;
+ /**
+ * Pages read into the cache.
+ *</ul>
+ *
+ */
+ public int st_page_in;
+ /**
+ * Pages written from the cache to the backing file.
+ *</ul>
+ *
+ */
+ public int st_page_out;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbMpoolFStat:"
+ + "\n file_name=" + file_name
+ + "\n st_pagesize=" + st_pagesize
+ + "\n st_map=" + st_map
+ + "\n st_cache_hit=" + st_cache_hit
+ + "\n st_cache_miss=" + st_cache_miss
+ + "\n st_page_create=" + st_page_create
+ + "\n st_page_in=" + st_page_in
+ + "\n st_page_out=" + st_page_out
+ ;
+ }
+}
// end of DbMpoolFStat.java
diff --git a/db/java/src/com/sleepycat/db/DbMpoolFile.java b/db/java/src/com/sleepycat/db/DbMpoolFile.java
new file mode 100644
index 000000000..840ef8920
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/DbMpoolFile.java
@@ -0,0 +1,284 @@
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
+ */
+package com.sleepycat.db;
+
+/**
+ * The memory pool interfaces for the Berkeley DB database
+ * environment are methods of the {@link com.sleepycat.db.DbEnv
+ * DbEnv} handle. The {@link com.sleepycat.db.DbEnv DbEnv} memory
+ * pool methods and the DbMpoolFile class provide general-purpose,
+ * page-oriented buffer management of files. Although designed to
+ * work with the other {@link com.sleepycat.db.Db Db} classes, they
+ * are also useful for more general purposes. The memory pools are
+ * referred to in this document as simply <i>pools</i> .</p> <p>
+ *
+ * In the Berkeley DB Java API, the DbMpoolFile class provides a very
+ * limited set of operations. It is only intended to modify settings
+ * for a {@link com.sleepycat.db.Db Db} object using the {@link
+ * com.sleepycat.db.Db#get_mpf Db.get_mpf} method.</p>
+ */
+public class DbMpoolFile {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbMpoolFile(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+
+ protected DbMpoolFile() {
+ this(0, false);
+ }
+
+
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
+
+
+ protected static long getCPtr(DbMpoolFile obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getPriority()}
+ */
+ public int get_priority() throws DbException {
+ return getPriority();
+ }
+
+
+ /**
+ * The DbMpoolFile.getPriority method returns the cache priority.
+ * </p> <p>
+ *
+ * The DbMpoolFile.getPriority method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbMpoolFile.getPriority method
+ * returns the cache priority.</p>
+ */
+ public int getPriority() throws DbException {
+ return db_javaJNI.DbMpoolFile_get_priority(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setPriority(int)}
+ */
+ public void set_priority(int priority) throws DbException {
+ setPriority(priority);
+ }
+
+
+ /**
+ * Set the cache priority for pages from the specified file. The
+ * priority of a page biases the replacement algorithm to be more
+ * or less likely to discard a page when space is needed in the
+ * buffer pool. The bias is temporary, and pages will eventually
+ * be discarded if they are not referenced again. The
+ * DbMpoolFile.setPriority method is only advisory, and does not
+ * guarantee pages will be treated in a specific way.</p> <p>
+ *
+ * To set the priority for the pages belonging to a particular
+ * database, call the DbMpoolFile.setPriority method using the
+ * {@link com.sleepycat.db.DbMpoolFile DbMpoolFile} handle
+ * returned by calling the {@link com.sleepycat.db.Db#get_mpf
+ * Db.get_mpf} method.</p> <p>
+ *
+ * The DbMpoolFile.setPriority method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @param priority must be set to one of the following
+ * values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIORITY_VERY_LOW
+ * Db.DB_PRIORITY_VERY_LOW}<p>
+ *
+ * The lowest priority: pages are the most likely to be
+ * discarded. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIORITY_LOW
+ * Db.DB_PRIORITY_LOW}<p>
+ *
+ * The next lowest priority. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIORITY_DEFAULT
+ * Db.DB_PRIORITY_DEFAULT}<p>
+ *
+ * The default priority. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIORITY_HIGH
+ * Db.DB_PRIORITY_HIGH}<p>
+ *
+ * The next highest priority. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PRIORITY_VERY_HIGH
+ * Db.DB_PRIORITY_VERY_HIGH}<p>
+ *
+ * The highest priority: pages are the least likely to be
+ * discarded. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setPriority(int priority) throws DbException {
+ db_javaJNI.DbMpoolFile_set_priority(swigCPtr, priority);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFlags()}
+ */
+ public int get_flags() throws DbException {
+ return getFlags();
+ }
+
+
+ /**
+ * The DbMpoolFile.getFlags method returns the flags.</p> <p>
+ *
+ * The DbMpoolFile.getFlags method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbMpoolFile.getFlags method returns
+ * the flags.</p>
+ */
+ public int getFlags() throws DbException {
+ return db_javaJNI.DbMpoolFile_get_flags(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setFlags(int,boolean)}
+ */
+ public void set_flags(int flags, boolean onoff) throws DbException {
+ setFlags(flags, onoff);
+ }
+
+
+ /**
+ * Configure a file in the cache.</p> <p>
+ *
+ * To set the flags for a particular database, call the
+ * DbMpoolFile.setFlags method using the {@link
+ * com.sleepycat.db.DbMpoolFile DbMpoolFile} handle stored in the
+ * <b>mpf</b> field of the {@link com.sleepycat.db.Db Db} handle.
+ * </p>
+ *
+ * @param flags must be set by bitwise inclusively <b>OR
+ * </b>'ing together one or more of the following values:
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MPOOL_NOFILE
+ * Db.DB_MPOOL_NOFILE}<p>
+ *
+ * If set, no backing temporary file will be opened for
+ * in-memory databases, even if they expand to fill the
+ * entire cache. Attempts to create new file pages after
+ * the cache has been filled will fail. <p>
+ *
+ * The <code>Db.DB_MPOOL_NOFILE</code> flag may be used to
+ * configure Berkeley DB at any time during the life of the
+ * application.</p> </li>
+ * </ul>
+ *
+ * @param onoff If <b>onoff</b> is false, the specified
+ * flags are cleared; otherwise they are set.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setFlags(int flags, boolean onoff) throws DbException {
+ db_javaJNI.DbMpoolFile_set_flags(swigCPtr, flags, onoff);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getMaxsize()}
+ */
+ public long get_maxsize() throws DbException {
+ return getMaxsize();
+ }
+
+
+ /**
+ * The DbMpoolFile.getMaxsize method returns the size of the
+ * cache in bytes.</p> <p>
+ *
+ * The DbMpoolFile.getMaxsize method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbMpoolFile.getMaxsize method returns
+ * the size of the cache in bytes.</p>
+ */
+ public long getMaxsize() throws DbException {
+ return db_javaJNI.DbMpoolFile_get_maxsize(swigCPtr);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setMaxsize(long)}
+ */
+ public void set_maxsize(long bytes) throws DbException {
+ setMaxsize(bytes);
+ }
+
+
+ /**
+ * Set the maximum size for the file to be <b>bytes</b> bytes.
+ * Attempts to allocate new pages in the file after the limit has
+ * been reached will fail.</p> <p>
+ *
+ * To set the maximum file size for a particular database, call
+ * the DbMpoolFile.setMaxsize method using the {@link
+ * com.sleepycat.db.DbMpoolFile DbMpoolFile} handle stored in the
+ * <b>mpf</b> field of the {@link com.sleepycat.db.Db Db} handle.
+ * Attempts to insert new items into the database after the limit
+ * has been reached may fail.</p> <p>
+ *
+ * The DbMpoolFile.setMaxsize method may be called at any time
+ * during the life of the application.</p>
+ *
+ * @param bytes The maximum size of the files in bytes.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void setMaxsize(long bytes) throws DbException {
+ db_javaJNI.DbMpoolFile_set_maxsize(swigCPtr, bytes);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbMpoolStat.java b/db/java/src/com/sleepycat/db/DbMpoolStat.java
index 8a6d75e36..a3360a8ec 100644
--- a/db/java/src/com/sleepycat/db/DbMpoolStat.java
+++ b/db/java/src/com/sleepycat/db/DbMpoolStat.java
@@ -1,42 +1,249 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbMpoolStat.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbMpool.stat() method.
+/**
+ * The DbMpoolStat object is used to return memory pool statistics.
+ * </p>
*/
-public class DbMpoolStat
-{
- /**
- * @deprecated As of Berkeley DB 2.8.2, cachesize for mpool unavailable.
- */
- public int st_cachesize; // Cache size.
- public int st_cache_hit; // Pages found in the cache.
- public int st_cache_miss; // Pages not found in the cache.
- public int st_map; // Pages from mapped files.
- public int st_page_create; // Pages created in the cache.
- public int st_page_in; // Pages read in.
- public int st_page_out; // Pages written out.
- public int st_ro_evict; // Clean pages forced from the cache.
- public int st_rw_evict; // Dirty pages forced from the cache.
- public int st_hash_buckets; // Number of hash buckets.
- public int st_hash_searches; // Total hash chain searches.
- public int st_hash_longest; // Longest hash chain searched.
- public int st_hash_examined; // Total hash entries searched.
- public int st_page_clean; // Clean pages.
- public int st_page_dirty; // Dirty pages.
- public int st_page_trickle; // Pages written by memp_trickle.
- public int st_region_wait; // Region lock granted after wait.
- public int st_region_nowait; // Region lock granted without wait.
- public int st_regsize; // Region size.
-}
+public class DbMpoolStat {
+ /**
+ * Gigabytes of cache (total cache size is st_gbytes + st_bytes).
+ *
+ *</ul>
+ *
+ */
+ public int st_gbytes;
+ /**
+ * Bytes of cache (total cache size is st_gbytes + st_bytes).
+ *
+ *</ul>
+ *
+ */
+ public int st_bytes;
+ /**
+ * Number of caches.
+ *</ul>
+ *
+ */
+ public int st_ncache;
+ /**
+ * Individual cache size.
+ *</ul>
+ *
+ */
+ public int st_regsize;
+ /**
+ * Requested pages mapped into the process' address space (there
+ * is no available information about whether or not this request
+ * caused disk I/O, although examining the application page fault
+ * rate may be helpful).
+ *</ul>
+ *
+ */
+ public int st_map;
+ /**
+ * Requested pages found in the cache.
+ *</ul>
+ *
+ */
+ public int st_cache_hit;
+ /**
+ * Requested pages not found in the cache.
+ *</ul>
+ *
+ */
+ public int st_cache_miss;
+ /**
+ * Pages created in the cache.
+ *</ul>
+ *
+ */
+ public int st_page_create;
+ /**
+ * Pages read into the cache.
+ *</ul>
+ *
+ */
+ public int st_page_in;
+ /**
+ * Pages written from the cache to the backing file.
+ *</ul>
+ *
+ */
+ public int st_page_out;
+ /**
+ * Clean pages forced from the cache.
+ *</ul>
+ *
+ */
+ public int st_ro_evict;
+ /**
+ * Dirty pages forced from the cache.
+ *</ul>
+ *
+ */
+ public int st_rw_evict;
+ /**
+ * Dirty pages written using the {@link
+ * com.sleepycat.db.DbEnv#memoryPoolTrickle
+ * DbEnv.memoryPoolTrickle} method.
+ *</ul>
+ *
+ */
+ public int st_page_trickle;
+ /**
+ * Pages in the cache.
+ *</ul>
+ *
+ */
+ public int st_pages;
+ /**
+ * Clean pages currently in the cache.
+ *</ul>
+ *
+ */
+ public int st_page_clean;
+ /**
+ * Dirty pages currently in the cache.
+ *</ul>
+ *
+ */
+ public int st_page_dirty;
+ /**
+ * Number of hash buckets in buffer hash table.
+ *</ul>
+ *
+ */
+ public int st_hash_buckets;
+ /**
+ * Total number of buffer hash table lookups.
+ *</ul>
+ *
+ */
+ public int st_hash_searches;
+ /**
+ * The longest chain ever encountered in buffer hash table
+ * lookups.
+ *</ul>
+ *
+ */
+ public int st_hash_longest;
+ /**
+ * Total number of hash elements traversed during hash table
+ * lookups.
+ *</ul>
+ *
+ */
+ public int st_hash_examined;
+ /**
+ * The number of times that a thread of control was able to
+ * obtain a hash bucket lock without waiting.
+ *</ul>
+ *
+ */
+ public int st_hash_nowait;
+ /**
+ * The number of times that a thread of control was forced to
+ * wait before obtaining a hash bucket lock.
+ *</ul>
+ *
+ */
+ public int st_hash_wait;
+ /**
+ * The maximum number of times any hash bucket lock was waited
+ * for by a thread of control.
+ *</ul>
+ *
+ */
+ public int st_hash_max_wait;
+ /**
+ * The number of times that a thread of control was able to
+ * obtain a region lock without waiting.
+ *</ul>
+ *
+ */
+ public int st_region_nowait;
+ /**
+ * The number of times that a thread of control was forced to
+ * wait before obtaining a region lock.
+ *</ul>
+ *
+ */
+ public int st_region_wait;
+ /**
+ * Number of page allocations.
+ *</ul>
+ *
+ */
+ public int st_alloc;
+ /**
+ * Number of hash buckets checked during allocation.
+ *</ul>
+ *
+ */
+ public int st_alloc_buckets;
+ /**
+ * Maximum number of hash buckets checked during an allocation.
+ *
+ *</ul>
+ *
+ */
+ public int st_alloc_max_buckets;
+ /**
+ * Number of pages checked during allocation.
+ *</ul>
+ *
+ */
+ public int st_alloc_pages;
+ /**
+ * Maximum number of pages checked during an allocation.
+ *</ul>
+ *
+ */
+ public int st_alloc_max_pages;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbMpoolStat:"
+ + "\n st_gbytes=" + st_gbytes
+ + "\n st_bytes=" + st_bytes
+ + "\n st_ncache=" + st_ncache
+ + "\n st_regsize=" + st_regsize
+ + "\n st_map=" + st_map
+ + "\n st_cache_hit=" + st_cache_hit
+ + "\n st_cache_miss=" + st_cache_miss
+ + "\n st_page_create=" + st_page_create
+ + "\n st_page_in=" + st_page_in
+ + "\n st_page_out=" + st_page_out
+ + "\n st_ro_evict=" + st_ro_evict
+ + "\n st_rw_evict=" + st_rw_evict
+ + "\n st_page_trickle=" + st_page_trickle
+ + "\n st_pages=" + st_pages
+ + "\n st_page_clean=" + st_page_clean
+ + "\n st_page_dirty=" + st_page_dirty
+ + "\n st_hash_buckets=" + st_hash_buckets
+ + "\n st_hash_searches=" + st_hash_searches
+ + "\n st_hash_longest=" + st_hash_longest
+ + "\n st_hash_examined=" + st_hash_examined
+ + "\n st_hash_nowait=" + st_hash_nowait
+ + "\n st_hash_wait=" + st_hash_wait
+ + "\n st_hash_max_wait=" + st_hash_max_wait
+ + "\n st_region_nowait=" + st_region_nowait
+ + "\n st_region_wait=" + st_region_wait
+ + "\n st_alloc=" + st_alloc
+ + "\n st_alloc_buckets=" + st_alloc_buckets
+ + "\n st_alloc_max_buckets=" + st_alloc_max_buckets
+ + "\n st_alloc_pages=" + st_alloc_pages
+ + "\n st_alloc_max_pages=" + st_alloc_max_pages
+ ;
+ }
+}
// end of DbMpoolStat.java
diff --git a/db/java/src/com/sleepycat/db/DbMultipleDataIterator.java b/db/java/src/com/sleepycat/db/DbMultipleDataIterator.java
index d77ce382b..70b12fc74 100644
--- a/db/java/src/com/sleepycat/db/DbMultipleDataIterator.java
+++ b/db/java/src/com/sleepycat/db/DbMultipleDataIterator.java
@@ -1,30 +1,58 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbMultipleDataIterator.java,v 1.2 2001/05/01 01:44:52 krinsky Exp
+ * $Id: DbMultipleDataIterator.java,v 1.19 2003/11/28 18:35:45 bostic Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author David M. Krinsky
+ * The DbMultipleDataIterator class is used to iterate through data
+ * returned using the {@link com.sleepycat.db.Db#DB_MULTIPLE
+ * Db.DB_MULTIPLE} flag from a database belonging to any access
+ * method.</p>
*/
-public class DbMultipleDataIterator extends DbMultipleIterator
-{
+public class DbMultipleDataIterator extends DbMultipleIterator {
// public methods
- public DbMultipleDataIterator(Dbt data)
- {
- super(data);
+ /**
+ * The constructor takes the data {@link com.sleepycat.db.Dbt
+ * Dbt} returned by the call to {@link com.sleepycat.db.Db#get
+ * Db.get} or {@link com.sleepycat.db.Dbc#get Dbc.get} that used
+ * the {@link com.sleepycat.db.Db#DB_MULTIPLE Db.DB_MULTIPLE}
+ * flag.</p>
+ *
+ * @param dbt a data {@link com.sleepycat.db.Dbt Dbt} returned
+ * by the call to {@link com.sleepycat.db.Db#get Db.get} or
+ * {@link com.sleepycat.db.Dbc#get Dbc.get} that used the
+ * {@link com.sleepycat.db.Db#DB_MULTIPLE Db.DB_MULTIPLE}
+ * flag.
+ */
+ public DbMultipleDataIterator(Dbt dbt) {
+ super(dbt);
}
- public boolean next(Dbt data)
- {
+
+ /**
+ * The DbMultipleDataIterator.next method takes a {@link
+ * com.sleepycat.db.Dbt Dbt} that will be filled in with a
+ * reference to a buffer, a size, and an offset that together
+ * yield the next data item in the original bulk retrieval
+ * buffer.</p>
+ *
+ * @param data a {@link com.sleepycat.db.Dbt Dbt} that will be
+ * filled in with a reference to a buffer, a size, and an
+ * offset that together yield the next data item in the
+ * original bulk retrieval buffer.
+ * @return The DbMultipleDataIterator.next method returns
+ * false if no more data are available, and true otherwise.
+ * </p>
+ */
+ public boolean next(Dbt data) {
int dataoff = DbUtil.array2int(buf, pos);
-
+
// crack out the data offset and length.
if (dataoff < 0) {
return (false);
@@ -43,5 +71,4 @@ public class DbMultipleDataIterator extends DbMultipleIterator
}
}
-
// end of DbMultipleDataIterator.java
diff --git a/db/java/src/com/sleepycat/db/DbMultipleIterator.java b/db/java/src/com/sleepycat/db/DbMultipleIterator.java
index 177440a0c..beb820ef9 100644
--- a/db/java/src/com/sleepycat/db/DbMultipleIterator.java
+++ b/db/java/src/com/sleepycat/db/DbMultipleIterator.java
@@ -1,52 +1,56 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbMultipleIterator.java,v 1.2 2001/05/01 01:44:53 krinsky Exp
+ * $Id: DbMultipleIterator.java,v 1.13 2003/11/28 18:35:45 bostic Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author David M. Krinsky
+ * The {@link com.sleepycat.db.DbMultipleIterator DbMultipleIterator}
+ * is a shared package-private base class for the three types of
+ * bulk-return Iterator; it should never be instantiated directly,
+ * but it handles the functionality shared by its subclasses.</p>
*/
-// DbMultipleIterator is a shared package-private base class for the three
-// types of bulk-return Iterator; it should never be instantiated directly,
-// but it handles the functionality shared by its subclasses.
-class DbMultipleIterator
-{
+class DbMultipleIterator {
// Package-private methods and members: used by our subclasses.
- // Called implicitly by the subclass
- DbMultipleIterator(Dbt data)
- {
+ /**
+ * Called implicitly by the subclass
+ *
+ */
+ DbMultipleIterator(Dbt data) {
buf = data.get_data();
size = data.get_ulen();
// The offset will always be zero from the front of the buffer
// DB returns, and the buffer is opaque, so don't bother
// handling an offset.
-
+
// The initial position is pointing at the last u_int32_t
// in the buffer.
pos = size - int32sz;
}
- // The C macros use sizeof(u_int32_t). Fortunately, java ints
- // are always four bytes. Make this a constant just for form's sake.
- static final int int32sz = 4;
- // Current position within the buffer; equivalent to "pointer"
- // in the DB_MULTIPLE macros.
- int pos;
+ /**
+ * The C macros use sizeof(u_int32_t). Fortunately, java ints are
+ * always four bytes. Make this a constant just for form's sake.
+ */
+ final static int int32sz = 4;
- // A reference to the encoded buffer returned from the original
- // Db/Dbc.get call on the data Dbt, and its size.
+ /**
+ * Current position within the buffer; equivalent to "pointer" in
+ * the DB_MULTIPLE macros.
+ */
+ int pos;
+
+ /**
+ * A reference to the encoded buffer returned from the original
+ * Db/Dbc.get call on the data Dbt, and its size.
+ */
byte[] buf;
int size;
}
-
-
-// end of DbMultipleIterator.java
diff --git a/db/java/src/com/sleepycat/db/DbMultipleKeyDataIterator.java b/db/java/src/com/sleepycat/db/DbMultipleKeyDataIterator.java
index 2ebc9fa79..9a9dc6c24 100644
--- a/db/java/src/com/sleepycat/db/DbMultipleKeyDataIterator.java
+++ b/db/java/src/com/sleepycat/db/DbMultipleKeyDataIterator.java
@@ -1,30 +1,63 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbMultipleKeyDataIterator.java,v 1.2 2001/05/01 01:44:53 krinsky Exp
+ * $Id: DbMultipleKeyDataIterator.java,v 1.19 2003/11/28 18:35:45 bostic Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author David M. Krinsky
+ * The DbMultipleKeyDataIterator class is used to iterate through
+ * data returned using the {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY} flag from a database belonging to the Btree or
+ * Hash access methods.</p>
*/
-public class DbMultipleKeyDataIterator extends DbMultipleIterator
-{
+public class DbMultipleKeyDataIterator extends DbMultipleIterator {
// public methods
- public DbMultipleKeyDataIterator(Dbt data)
- {
- super(data);
+
+ /**
+ * The constructor takes the data {@link com.sleepycat.db.Dbt
+ * Dbt} returned by the call to {@link com.sleepycat.db.Db#get
+ * Db.get} or {@link com.sleepycat.db.Dbc#get Dbc.get} that used
+ * the {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY} flag.</p>
+ *
+ * @param dbt a data {@link com.sleepycat.db.Dbt Dbt} returned
+ * by the call to {@link com.sleepycat.db.Db#get Db.get} or
+ * {@link com.sleepycat.db.Dbc#get Dbc.get} that used the
+ * {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY} flag.
+ */
+ public DbMultipleKeyDataIterator(Dbt dbt) {
+ super(dbt);
}
- public boolean next(Dbt key, Dbt data)
- {
+
+ /**
+ * The DbMultipleKeyDataIterator.next method takes two {@link
+ * com.sleepycat.db.Dbt Dbt}s, one for a key and one for a data
+ * item, that will each be filled in with a reference to a
+ * buffer, a size, and an offset that together yield the next key
+ * and data item in the original bulk retrieval buffer. The
+ * DbMultipleKeyDataIterator.next method returns false if no more
+ * data are available, and true otherwise.</p>
+ *
+ * @param key The <b>key</b> parameter will be filled in with a
+ * reference to a buffer, a size, and an offset that yields
+ * the next key item in the original bulk retrieval buffer.
+ * @param data The <b>data</b> parameter will be filled in with
+ * a reference to a buffer, a size, and an offset that yields
+ * the next data item in the original bulk retrieval buffer.
+ * @return The DbMultipleKeyDataIterator.next method returns
+ * false if no more data are available, and true otherwise.
+ * </p>
+ */
+ public boolean next(Dbt key, Dbt data) {
int keyoff = DbUtil.array2int(buf, pos);
-
+
// crack out the key and data offsets and lengths.
if (keyoff < 0) {
return (false);
@@ -35,23 +68,21 @@ public class DbMultipleKeyDataIterator extends DbMultipleIterator
pos -= int32sz;
int dataoff = DbUtil.array2int(buf, pos);
-
+
pos -= int32sz;
int datasz = DbUtil.array2int(buf, pos);
pos -= int32sz;
- key.set_data(buf);
- key.set_size(keysz);
- key.set_offset(keyoff);
+ key.setData(buf);
+ key.setSize(keysz);
+ key.setOffset(keyoff);
- data.set_data(buf);
- data.set_size(datasz);
- data.set_offset(dataoff);
+ data.setData(buf);
+ data.setSize(datasz);
+ data.setOffset(dataoff);
return (true);
}
}
-
-// end of DbMultipleKeyDataIterator.java
diff --git a/db/java/src/com/sleepycat/db/DbMultipleRecnoDataIterator.java b/db/java/src/com/sleepycat/db/DbMultipleRecnoDataIterator.java
index 4ee2bfa36..e4496fa1a 100644
--- a/db/java/src/com/sleepycat/db/DbMultipleRecnoDataIterator.java
+++ b/db/java/src/com/sleepycat/db/DbMultipleRecnoDataIterator.java
@@ -1,30 +1,66 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbMultipleRecnoDataIterator.java,v 1.2 2001/05/01 01:44:53 krinsky Exp
+ * $Id: DbMultipleRecnoDataIterator.java,v 1.20 2003/11/28 18:35:46 bostic Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author David M. Krinsky
+ * This class is used to iterate through data returned using the
+ * {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY Db.DB_MULTIPLE_KEY}
+ * flag from a database belonging to the Recno or Queue access
+ * methods.</p>
*/
-public class DbMultipleRecnoDataIterator extends DbMultipleIterator
-{
+public class DbMultipleRecnoDataIterator extends DbMultipleIterator {
// public methods
- public DbMultipleRecnoDataIterator(Dbt data)
- {
- super(data);
+ /**
+ * The constructor takes the data {@link com.sleepycat.db.Dbt
+ * Dbt} returned by the call to {@link com.sleepycat.db.Db#get
+ * Db.get} or {@link com.sleepycat.db.Dbc#get Dbc.get} that used
+ * the {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY} flag.</p>
+ *
+ * @param dbt a data {@link com.sleepycat.db.Dbt Dbt} returned
+ * by the call to {@link com.sleepycat.db.Db#get Db.get} or
+ * {@link com.sleepycat.db.Dbc#get Dbc.get} that used the
+ * {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY} flag.
+ */
+ public DbMultipleRecnoDataIterator(Dbt dbt) {
+ super(dbt);
}
- public boolean next(Dbt key, Dbt data)
- {
+
+ /**
+ * The DbMultipleRecnoDataIterator.next method takes two {@link
+ * com.sleepycat.db.Dbt Dbt}s, one for a key and one for a data
+ * item, that will each be filled in with a reference to a
+ * buffer, a size, and an offset that together yield the next key
+ * and data item in the original bulk retrieval buffer. The
+ * record number contained in the key item should be accessed
+ * using the {@link com.sleepycat.db.Dbt#getRecordNumber
+ * Dbt.getRecordNumber} method.
+ *
+ * @param key The <b>key</b> parameter will be filled in with a
+ * reference to a buffer, a size, and an offset that yields
+ * the next key item in the original bulk retrieval buffer.
+ * The record number contained in the key item should be
+ * accessed using the {@link com.sleepycat.db.Dbt#getRecordNumber
+ * Dbt.getRecordNumber} method.
+ * @param data The <b>data</b> parameter will be filled in with
+ * a reference to a buffer, a size, and an offset that yields
+ * the next data item in the original bulk retrieval buffer.
+ * @return The DbMultipleRecnoDataIterator.next method
+ * returns false if no more data are available, and true
+ * otherwise.</p>
+ */
+ public boolean next(Dbt key, Dbt data) {
int keyoff = DbUtil.array2int(buf, pos);
-
+
// crack out the key offset and the data offset and length.
if (keyoff < 0) {
return (false);
@@ -32,7 +68,7 @@ public class DbMultipleRecnoDataIterator extends DbMultipleIterator
pos -= int32sz;
int dataoff = DbUtil.array2int(buf, pos);
-
+
pos -= int32sz;
int datasz = DbUtil.array2int(buf, pos);
@@ -47,6 +83,3 @@ public class DbMultipleRecnoDataIterator extends DbMultipleIterator
return (true);
}
}
-
-
-// end of DbMultipleRecnoDataIterator.java
diff --git a/db/java/src/com/sleepycat/db/DbOutputStreamErrcall.java b/db/java/src/com/sleepycat/db/DbOutputStreamErrcall.java
deleted file mode 100644
index 4f962d9a3..000000000
--- a/db/java/src/com/sleepycat/db/DbOutputStreamErrcall.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbOutputStreamErrcall.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
- */
-
-package com.sleepycat.db;
-import java.io.OutputStream;
-import java.io.IOException;
-
-/**
- *
- * @author Donald D. Anderson
- *
- * This class is not public, as it is only used internally
- * by Db to implement a default error handler.
- */
-
-/*package*/ class DbOutputStreamErrcall implements DbErrcall
-{
- DbOutputStreamErrcall(OutputStream stream)
- {
- this.stream_ = stream;
- }
-
- // errcall implements DbErrcall
- //
- public void errcall(String prefix, String buffer)
- {
- try {
- if (prefix != null) {
- stream_.write(prefix.getBytes());
- stream_.write((new String(": ")).getBytes());
- }
- stream_.write(buffer.getBytes());
- stream_.write((new String("\n")).getBytes());
- }
- catch (IOException e) {
-
- // well, we tried.
- // Do our best to report the problem by other means.
- //
- System.err.println("DbOutputStreamErrcall Exception: " + e);
- if (prefix != null)
- System.err.print(prefix + ": ");
- System.err.println(buffer + "\n");
- }
- }
-
- // private data
- //
- private OutputStream stream_;
-}
-
-// end of DbOutputStreamErrcall.java
diff --git a/db/java/src/com/sleepycat/db/DbPanicHandler.java b/db/java/src/com/sleepycat/db/DbPanicHandler.java
new file mode 100644
index 000000000..8cf433f24
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/DbPanicHandler.java
@@ -0,0 +1,33 @@
+/*
+ * -
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DbPanicHandler.java,v 1.1 2003/12/15 21:44:12 jbj Exp $
+ */
+package com.sleepycat.db;
+
+/**
+ * An interface specifying a function to handle database environment
+ * panics.</p>
+ */
+public interface DbPanicHandler {
+ /**
+ * The DbPanicHandler interface is used by the
+ * DbEnv.setPanicHandler method. This interface defines the
+ * application-specific function to be called when the database
+ * environment panics.</p> <p>
+ *
+ * </p>
+ *
+ * @param dbenv the enclosing database environment handle.
+ * @param e the DbException that would have been thrown to
+ * the calling method.
+ * @param dbenv the enclosing database environment handle.
+ * @param e the DbException that would have been thrown to
+ * the calling method.
+ */
+ public abstract void panic(DbEnv dbenv, DbException e);
+}
diff --git a/db/java/src/com/sleepycat/db/DbPreplist.java b/db/java/src/com/sleepycat/db/DbPreplist.java
index 63b3f53ef..335441af2 100644
--- a/db/java/src/com/sleepycat/db/DbPreplist.java
+++ b/db/java/src/com/sleepycat/db/DbPreplist.java
@@ -1,22 +1,51 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbPreplist.java,v 11.1 2001/04/15 15:36:30 dda Exp
+ * $Id: DbPreplist.java,v 11.18 2003/11/28 18:35:46 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbEnv.txn_recover() method.
+/**
+ * The DbPreplist object is used to encapsulate a single prepared,
+ * but not yet resolved, transaction.</p>
*/
-public class DbPreplist
-{
+public class DbPreplist {
+ /**
+ * The global transaction ID for the transaction. The global
+ * transaction ID is the one specified when the transaction was
+ * prepared. The application is responsible for ensuring
+ * uniqueness among global transaction IDs.
+ *</ul>
+ *
+ */
+ public byte[] gid;
+
+ /**
+ * The transaction handle for the transaction.
+ *</ul>
+ *
+ */
public DbTxn txn;
- public byte gid[];
-}
-// end of DbPreplist.java
+
+ /**
+ * Create a new DbPreplist, this is only done by the DbEnv class.
+ * <p>
+ *
+ * A global transaction ID is the one specified when the
+ * transaction was prepared. The application is responsible for
+ * ensuring uniqueness among global transaction IDs.
+ *
+ * @param txn The transaction handle for the transaction.
+ * @param gid An array of all the global transaction IDs which
+ * must be resolved for this transaction.
+ */
+ DbPreplist(DbTxn txn, byte[] gid) {
+ this.txn = txn;
+ this.gid = gid;
+ }
+}
diff --git a/db/java/src/com/sleepycat/db/DbQueueStat.java b/db/java/src/com/sleepycat/db/DbQueueStat.java
index 652878b1a..ce1f16933 100644
--- a/db/java/src/com/sleepycat/db/DbQueueStat.java
+++ b/db/java/src/com/sleepycat/db/DbQueueStat.java
@@ -1,32 +1,124 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbQueueStat.java,v 11.5 2000/11/07 18:45:27 dda Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * Db.stat() method.
+/**
+ * The DbQueueStat object is used to return Queue database
+ * statistics.</p>
*/
-public class DbQueueStat
-{
- public int qs_magic; // Magic number.
- public int qs_version; // Version number.
- public int qs_metaflags; // Metadata flags.
- public int qs_nkeys; // Number of unique keys.
- public int qs_ndata; // Number of data items.
- public int qs_pagesize; // Page size.
- public int qs_pages; // Data pages.
- public int qs_re_len; // Fixed-length record length.
- public int qs_re_pad; // Fixed-length record pad.
- public int qs_pgfree; // Bytes free in data pages.
- public int qs_first_recno; // First not deleted record.
- public int qs_cur_recno; // Last allocated record number.
-}
+public class DbQueueStat {
+ /**
+ * Magic number that identifies the file as a Queue file.
+ * Returned if Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_magic;
+ /**
+ * The version of the Queue file type. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_version;
+ public int qs_metaflags;
+ /**
+ * The number of records in the database. If Db.DB_FAST_STAT was
+ * specified the count will be the last saved value unless it has
+ * never been calculated, in which case it will be 0. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_nkeys;
+ /**
+ * The number of records in the database. If Db.DB_FAST_STAT was
+ * specified the count will be the last saved value unless it has
+ * never been calculated, in which case it will be 0. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_ndata;
+ /**
+ * Underlying database page size, in bytes. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_pagesize;
+ /**
+ * Underlying database extent size, in pages. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_extentsize;
+ /**
+ * Number of pages in the database.
+ *</ul>
+ *
+ */
+ public int qs_pages;
+ /**
+ * The length of the records. Returned if Db.DB_FAST_STAT is set.
+ *
+ *</ul>
+ *
+ */
+ public int qs_re_len;
+ /**
+ * The padding byte value for the records. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_re_pad;
+ /**
+ * Number of bytes free in database pages.
+ *</ul>
+ *
+ */
+ public int qs_pgfree;
+ /**
+ * First undeleted record in the database. Returned if
+ * Db.DB_FAST_STAT is set.
+ *</ul>
+ *
+ */
+ public int qs_first_recno;
+ /**
+ * Next available record number. Returned if Db.DB_FAST_STAT is
+ * set.
+ *</ul>
+ *
+ */
+ public int qs_cur_recno;
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbQueueStat:"
+ + "\n qs_magic=" + qs_magic
+ + "\n qs_version=" + qs_version
+ + "\n qs_metaflags=" + qs_metaflags
+ + "\n qs_nkeys=" + qs_nkeys
+ + "\n qs_ndata=" + qs_ndata
+ + "\n qs_pagesize=" + qs_pagesize
+ + "\n qs_extentsize=" + qs_extentsize
+ + "\n qs_pages=" + qs_pages
+ + "\n qs_re_len=" + qs_re_len
+ + "\n qs_re_pad=" + qs_re_pad
+ + "\n qs_pgfree=" + qs_pgfree
+ + "\n qs_first_recno=" + qs_first_recno
+ + "\n qs_cur_recno=" + qs_cur_recno
+ ;
+ }
+}
// end of DbQueueStat.java
diff --git a/db/java/src/com/sleepycat/db/DbRepStat.java b/db/java/src/com/sleepycat/db/DbRepStat.java
index 534d488ee..24268afca 100644
--- a/db/java/src/com/sleepycat/db/DbRepStat.java
+++ b/db/java/src/com/sleepycat/db/DbRepStat.java
@@ -1,43 +1,296 @@
-// DO NOT EDIT: automatically built by dist/s_java.
-
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
+ */
package com.sleepycat.db;
-public class DbRepStat
-{
+/**
+ * The DbRepStat object is used to return replication subsystem
+ * statistics.</p>
+ */
+public class DbRepStat {
+ /**
+ * The current replication mode. Set to {@link
+ * com.sleepycat.db.Db#DB_REP_MASTER Db.DB_REP_MASTER} if the
+ * environment is a replication master, {@link
+ * com.sleepycat.db.Db#DB_REP_CLIENT Db.DB_REP_CLIENT} if the
+ * environment is a replication client, {@link
+ * com.sleepycat.db.Db#DB_REP_LOGSONLY Db.DB_REP_LOGSONLY} if the
+ * environment is a log-files-only replica, or 0 if replication
+ * is not configured.
+ *</ul>
+ *
+ */
public int st_status;
+ /**
+ * In replication environments configured as masters, the next
+ * LSN expected. In replication environments configured as
+ * clients, the next LSN to be used.
+ *</ul>
+ *
+ */
public DbLsn st_next_lsn;
+ /**
+ * The LSN of the first log record we have after missing log
+ * records being waited for, or 0 if no log records are currently
+ * missing.
+ *</ul>
+ *
+ */
public DbLsn st_waiting_lsn;
+ /**
+ * The number of duplicate master conditions detected.
+ *</ul>
+ *
+ */
public int st_dupmasters;
+ /**
+ * The current environment ID.
+ *</ul>
+ *
+ */
public int st_env_id;
+ /**
+ * The current environment priority.
+ *</ul>
+ *
+ */
public int st_env_priority;
+ /**
+ * The current generation number.
+ *</ul>
+ *
+ */
public int st_gen;
+ /**
+ * The site is currently in client recovery. When this field is
+ * set, LSN values are not authoritative.
+ *</ul>
+ *
+ */
+ public int st_in_recovery;
+ /**
+ * The number of duplicate log records received.
+ *</ul>
+ *
+ */
public int st_log_duplicated;
+ /**
+ * The number of log records currently queued.
+ *</ul>
+ *
+ */
public int st_log_queued;
+ /**
+ * The maximum number of log records ever queued at once.
+ *</ul>
+ *
+ */
public int st_log_queued_max;
+ /**
+ * The total number of log records queued.
+ *</ul>
+ *
+ */
public int st_log_queued_total;
+ /**
+ * The number of log records received and appended to the log.
+ *
+ *</ul>
+ *
+ */
public int st_log_records;
+ /**
+ * The number of log records missed and requested.
+ *</ul>
+ *
+ */
public int st_log_requested;
+ /**
+ * The current master environment ID.
+ *</ul>
+ *
+ */
public int st_master;
+ /**
+ * The number of times the master has changed.
+ *</ul>
+ *
+ */
public int st_master_changes;
+ /**
+ * The number of messages received with a bad generation number.
+ *
+ *</ul>
+ *
+ */
public int st_msgs_badgen;
+ /**
+ * The number of messages received and processed.
+ *</ul>
+ *
+ */
public int st_msgs_processed;
+ /**
+ * The number of messages ignored due to pending recovery.
+ *</ul>
+ *
+ */
public int st_msgs_recover;
+ /**
+ * The number of failed message sends.
+ *</ul>
+ *
+ */
public int st_msgs_send_failures;
+ /**
+ * The number of messages sent.
+ *</ul>
+ *
+ */
public int st_msgs_sent;
+ /**
+ * The number of new site messages received.
+ *</ul>
+ *
+ */
public int st_newsites;
+ /**
+ * The number of sites believed to be in the replication group.
+ *
+ *</ul>
+ *
+ */
public int st_nsites;
+ /**
+ * Transmission limited. This indicates the number of times that
+ * data transmission was stopped to limit the amount of data sent
+ * in response to a single call to {@link
+ * com.sleepycat.db.DbEnv#replicationProcessMessage
+ * DbEnv.replicationProcessMessage}.
+ *</ul>
+ *
+ */
public int st_nthrottles;
+ /**
+ * The number of outdated conditions detected.
+ *</ul>
+ *
+ */
public int st_outdated;
+ /**
+ * The number of transactions applied.
+ *</ul>
+ *
+ */
public int st_txns_applied;
+ /**
+ * The number of elections held.
+ *</ul>
+ *
+ */
public int st_elections;
+ /**
+ * The number of elections won.
+ *</ul>
+ *
+ */
public int st_elections_won;
+ /**
+ * The election winner.
+ *</ul>
+ *
+ */
public int st_election_cur_winner;
+ /**
+ * The election generation number.
+ *</ul>
+ *
+ */
public int st_election_gen;
+ /**
+ * The maximum LSN of election winner.
+ *</ul>
+ *
+ */
public DbLsn st_election_lsn;
+ /**
+ * The number sites expected to participate in elections.
+ *</ul>
+ *
+ */
public int st_election_nsites;
+ /**
+ * The election priority.
+ *</ul>
+ *
+ */
public int st_election_priority;
+ /**
+ * The current election phase (0 if no election is in progress).
+ *
+ *</ul>
+ *
+ */
public int st_election_status;
+ /**
+ * The election tiebreaker value.
+ *</ul>
+ *
+ */
public int st_election_tiebreaker;
+ /**
+ * The votes received this election round.
+ *</ul>
+ *
+ */
public int st_election_votes;
+
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbRepStat:"
+ + "\n st_status=" + st_status
+ + "\n st_next_lsn=" + st_next_lsn
+ + "\n st_waiting_lsn=" + st_waiting_lsn
+ + "\n st_dupmasters=" + st_dupmasters
+ + "\n st_env_id=" + st_env_id
+ + "\n st_env_priority=" + st_env_priority
+ + "\n st_gen=" + st_gen
+ + "\n st_in_recovery=" + st_in_recovery
+ + "\n st_log_duplicated=" + st_log_duplicated
+ + "\n st_log_queued=" + st_log_queued
+ + "\n st_log_queued_max=" + st_log_queued_max
+ + "\n st_log_queued_total=" + st_log_queued_total
+ + "\n st_log_records=" + st_log_records
+ + "\n st_log_requested=" + st_log_requested
+ + "\n st_master=" + st_master
+ + "\n st_master_changes=" + st_master_changes
+ + "\n st_msgs_badgen=" + st_msgs_badgen
+ + "\n st_msgs_processed=" + st_msgs_processed
+ + "\n st_msgs_recover=" + st_msgs_recover
+ + "\n st_msgs_send_failures=" + st_msgs_send_failures
+ + "\n st_msgs_sent=" + st_msgs_sent
+ + "\n st_newsites=" + st_newsites
+ + "\n st_nsites=" + st_nsites
+ + "\n st_nthrottles=" + st_nthrottles
+ + "\n st_outdated=" + st_outdated
+ + "\n st_txns_applied=" + st_txns_applied
+ + "\n st_elections=" + st_elections
+ + "\n st_elections_won=" + st_elections_won
+ + "\n st_election_cur_winner=" + st_election_cur_winner
+ + "\n st_election_gen=" + st_election_gen
+ + "\n st_election_lsn=" + st_election_lsn
+ + "\n st_election_nsites=" + st_election_nsites
+ + "\n st_election_priority=" + st_election_priority
+ + "\n st_election_status=" + st_election_status
+ + "\n st_election_tiebreaker=" + st_election_tiebreaker
+ + "\n st_election_votes=" + st_election_votes
+ ;
+ }
}
// end of DbRepStat.java
diff --git a/db/java/src/com/sleepycat/db/DbRepTransport.java b/db/java/src/com/sleepycat/db/DbRepTransport.java
index 0794305fe..9615f4937 100644
--- a/db/java/src/com/sleepycat/db/DbRepTransport.java
+++ b/db/java/src/com/sleepycat/db/DbRepTransport.java
@@ -1,19 +1,92 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbRepTransport.java,v 11.2 2002/01/11 15:52:40 bostic Exp
+ * $Id: DbRepTransport.java,v 1.3 2003/12/15 21:44:12 jbj Exp $
*/
-
package com.sleepycat.db;
-/*
- * This is used as a callback by DbEnv.set_rep_transport.
+/**
+ * An interface specifying a replication transmit function, which
+ * sends information to other members of the replication group.</p>
*/
-public interface DbRepTransport
-{
- public int send(DbEnv env, Dbt control, Dbt rec, int flags, int envid)
- throws DbException;
+public interface DbRepTransport {
+ /**
+ * The DbRepTransport interface is used by the
+ * DbEnv.setReplicationTransport method. This interface defines
+ * the application-specific function to be called during
+ * transaction abort and recovery.</p> It may sometimes be useful
+ * to pass application-specific data to the <b>send</b> function;
+ * see <a href="{@docRoot}/../ref/env/faq.html">Environment FAQ
+ * </a> for a discussion on how to do this.</p>
+ *
+ * @param dbenv the enclosing database environment
+ * handle.
+ * @param control the first of the two data elements to be
+ * transmitted by the <b>send</b> function.
+ * @param rec the second of the two data elements to be
+ * transmitted by the <b>send</b> function.
+ * @param lsn If the type of message to be sent has an
+ * LSN associated with it, then the <b>lsn</b> parameter
+ * contains the LSN of the record being sent. This LSN can be
+ * used to determine that certain records have been processed
+ * successfully by clients.
+ * @param envid a positive integer identifier that
+ * specifies the replication environment to which the message
+ * should be sent (see <a href="{@docRoot}/../ref/rep/id.html">
+ * Replication environment IDs</a> for more information).
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_EID_BROADCAST
+ * Db.DB_EID_BROADCAST}<p>
+ *
+ * The special identifier <code>Db.DB_EID_BROADCAST</code>
+ * indicates that a message should be broadcast to every
+ * environment in the replication group. The application
+ * may use a true broadcast protocol or may send the
+ * message in sequence to each machine with which it is in
+ * communication. In both cases, the sending site should
+ * not be asked to process the message.</p> </li>
+ * </ul>
+ *
+ * @param flags must be set to 0 or by bitwise
+ * inclusively <b>OR</b> 'ing together one or more of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_NOBUFFER
+ * Db.DB_REP_NOBUFFER}<p>
+ *
+ * The record being sent should be transmitted immediately
+ * and not buffered or delayed. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_REP_PERMANENT
+ * Db.DB_REP_PERMANENT}<p>
+ *
+ * The record being sent is critical for maintaining
+ * database integrity (for example, the message includes a
+ * transaction commit). The application should take
+ * appropriate action to enforce the reliability guarantees
+ * it has chosen, such as waiting for acknowledgement from
+ * one or more clients. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The <b>send</b> function should not call
+ * back down into Berkeley DB. The <b>send</b> function must
+ * return 0 on success and non-zero on failure. If the <b>
+ * send</b> function fails, the message being sent is
+ * necessary to maintain database integrity, and the local
+ * log is not configured for synchronous flushing, the local
+ * log will be flushed; otherwise, any error from the <b>send
+ * </b> function will be ignored.</p>
+ */
+ public int send(DbEnv dbenv, Dbt control, Dbt rec, DbLsn lsn, int flags,
+ int envid)
+ throws DbException;
}
diff --git a/db/java/src/com/sleepycat/db/DbRunRecoveryException.java b/db/java/src/com/sleepycat/db/DbRunRecoveryException.java
index 78736b6ed..bc53b4842 100644
--- a/db/java/src/com/sleepycat/db/DbRunRecoveryException.java
+++ b/db/java/src/com/sleepycat/db/DbRunRecoveryException.java
@@ -1,32 +1,32 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: DbRunRecoveryException.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+ * $Id: DbRunRecoveryException.java,v 11.22 2003/11/28 18:35:46 bostic Exp $
*/
-
package com.sleepycat.db;
/**
+ * This information describes the DbRunRecoveryException class and
+ * how it is used by the various Berkeley DB classes.</p> <p>
*
- * @author Donald D. Anderson
+ * Errors can occur in the Berkeley DB library where the only
+ * solution is to shut down the application and run recovery (for
+ * example, if Berkeley DB is unable to allocate heap memory). When a
+ * fatal error occurs in Berkeley DB, methods will throw a
+ * DbRunRecoveryException, at which point all subsequent database
+ * calls will also fail in the same way. When this occurs, recovery
+ * should be performed.</p>
*/
-public class DbRunRecoveryException extends DbException
-{
- // methods
- //
-
- public DbRunRecoveryException(String s)
- {
- super(s);
- }
-
- public DbRunRecoveryException(String s, int errno)
- {
- super(s, errno);
+public class DbRunRecoveryException extends DbException {
+ /**
+ * Constructor for the DbRunRecoveryException object
+ *
+ */
+ protected DbRunRecoveryException(String s, int errno, DbEnv dbenv) {
+ super(s, errno, dbenv);
}
}
-
-// end of DbRunRecoveryException.java
diff --git a/db/java/src/com/sleepycat/db/DbSecondaryKeyCreate.java b/db/java/src/com/sleepycat/db/DbSecondaryKeyCreate.java
index bfc8ecf44..e22341449 100644
--- a/db/java/src/com/sleepycat/db/DbSecondaryKeyCreate.java
+++ b/db/java/src/com/sleepycat/db/DbSecondaryKeyCreate.java
@@ -1,22 +1,62 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1999-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbSecondaryKeyCreate.java,v 11.1 2001/04/25 14:51:11 dda Exp
+ * $Id: DbSecondaryKeyCreate.java,v 11.16 2003/11/28 18:35:47 bostic Exp $
*/
-
package com.sleepycat.db;
-/*
- * This is used as a callback by Db.associate.
+/**
+ * An interface specifying a function which constructs secondary keys
+ * from primary key and data items.</p>
*/
-public interface DbSecondaryKeyCreate
-{
- public int secondary_key_create(Db secondary, Dbt key,
- Dbt data, Dbt result)
- throws DbException;
+public interface DbSecondaryKeyCreate {
+ /**
+ * The secondaryKeyCreate interface is used by the Db.associate
+ * method. This interface defines the application-specific
+ * function to be called to construct secondary keys from primary
+ * key and data items.</p> </p>
+ *
+ * @param secondary the database handle for the secondary.
+ * @param key a {@link com.sleepycat.db.Dbt Dbt}
+ * referencing the primary key.
+ * @param data a {@link com.sleepycat.db.Dbt Dbt}
+ * referencing the primary data item.
+ * @param result a zeroed {@link com.sleepycat.db.Dbt Dbt}
+ * in which the callback function should fill in <b>data</b>
+ * and <b>size</b> fields that describe the secondary key.
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DONOTINDEX
+ * DB_DONOTINDEX}<p>
+ *
+ * If any key/data pair in the primary yields a null
+ * secondary key and should be left out of the secondary
+ * index, the callback function may optionally return
+ * <code>Db.DB_DONOTINDEX</code>. Otherwise, the callback
+ * function should return 0 in case of success or an error
+ * outside of the Berkeley DB name space in case of
+ * failure; the error code will be returned from the
+ * Berkeley DB call that initiated the callback.</p> <p>
+ *
+ * If the callback function returns <code>Db.DB_DONOTINDEX</code>
+ * for any key/data pairs in the primary database, the
+ * secondary index will not contain any reference to those
+ * key/data pairs, and such operations as cursor iterations
+ * and range queries will reflect only the corresponding
+ * subset of the database. If this is not desirable, the
+ * application should ensure that the callback function is
+ * well-defined for all possible values and never returns
+ * <code>Db.DB_DONOTINDEX</code>.</p> </li>
+ * </ul>
+ *
+ */
+ public int secondaryKeyCreate(Db secondary, Dbt key,
+ Dbt data, Dbt result)
+ throws DbException;
}
-
-// end of DbSecondaryKeyCreate.java
diff --git a/db/java/src/com/sleepycat/db/DbTxn.java b/db/java/src/com/sleepycat/db/DbTxn.java
index 201ff94c8..e4ffd11ef 100644
--- a/db/java/src/com/sleepycat/db/DbTxn.java
+++ b/db/java/src/com/sleepycat/db/DbTxn.java
@@ -1,47 +1,373 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbTxn.java,v 11.5 2000/05/25 04:18:13 dda Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
/**
+ * The DbTxn object is the handle for a transaction. Methods off the
+ * DbTxn handle are used to configure, abort and commit the
+ * transaction. DbTxn handles are provided to {@link
+ * com.sleepycat.db.Db Db} methods in order to transactionally
+ * protect those database operations.</p> <p>
*
- * @author Donald D. Anderson
+ * DbTxn handles are not free-threaded; transactions handles may be
+ * used by multiple threads, but only serially, that is, the
+ * application must serialize access to the DbTxn handle. Once the
+ * {@link com.sleepycat.db.DbTxn#abort DbTxn.abort} or {@link
+ * com.sleepycat.db.DbTxn#commit DbTxn.commit} methods are called,
+ * the handle may not be accessed again, regardless of the method's
+ * return. In addition, parent transactions may not issue any
+ * Berkeley DB operations while they have active child transactions
+ * (child transactions that have not yet been committed or aborted)
+ * except for {@link com.sleepycat.db.DbEnv#txnBegin DbEnv.txnBegin},
+ * {@link com.sleepycat.db.DbTxn#abort DbTxn.abort} and {@link
+ * com.sleepycat.db.DbTxn#commit DbTxn.commit}.</p>
*/
-public class DbTxn
-{
- // methods
- //
- public native void abort()
- throws DbException;
+public class DbTxn {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
+
+
+ protected DbTxn(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
+
+
+ protected DbTxn() {
+ this(0, false);
+ }
+
+
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
- public native void commit(int flags)
- throws DbException;
- public native /*u_int32_t*/ int id()
- throws DbException;
+ protected static long getCPtr(DbTxn obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
+
+
+ /**
+ * The DbTxn.abort method causes an abnormal termination of the
+ * transaction. The log is played backward, and any necessary
+ * undo operations are done through the <b>tx_recover</b>
+ * function specified to {@link com.sleepycat.db.DbEnv#setAppDispatch
+ * DbEnv.setAppDispatch}. Before DbTxn.abort returns, any locks
+ * held by the transaction will have been released.</p> <p>
+ *
+ * In the case of nested transactions, aborting a parent
+ * transaction causes all children (unresolved or not) of the
+ * parent transaction to be aborted.</p> <p>
+ *
+ * All cursors opened within the transaction must be closed
+ * before the transaction is aborted.</p> <p>
+ *
+ * After DbTxn.abort has been called, regardless of its return,
+ * the {@link com.sleepycat.db.DbTxn DbTxn} handle may not be
+ * accessed again.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void abort() throws DbException {
+ try {
+ abort0();
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+
+ /**
+ * The DbTxn.commit method ends the transaction.</p> <p>
+ *
+ * In the case of nested transactions, if the transaction is a
+ * parent transaction, committing the parent transaction causes
+ * all unresolved children of the parent to be committed. In the
+ * case of nested transactions, if the transaction is a child
+ * transaction, its locks are not released, but are acquired by
+ * its parent. Although the commit of the child transaction will
+ * succeed, the actual resolution of the child transaction is
+ * postponed until the parent transaction is committed or
+ * aborted; that is, if its parent transaction commits, it will
+ * be committed; and if its parent transaction aborts, it will be
+ * aborted.</p> <p>
+ *
+ * All cursors opened within the transaction must be closed
+ * before the transaction is committed.</p> <p>
+ *
+ * After DbTxn.commit has been called, regardless of its return,
+ * the {@link com.sleepycat.db.DbTxn DbTxn} handle may not be
+ * accessed again. If DbTxn.commit encounters an error, the
+ * transaction and all child transactions of the transaction are
+ * aborted.</p>
+ *
+ * @param flags must be set to 0 or one of the following
+ * values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_NOSYNC
+ * Db.DB_TXN_NOSYNC}<p>
+ *
+ * Do not synchronously flush the log. This means the
+ * transaction will exhibit the ACI (atomicity,
+ * consistency, and isolation) properties, but not D
+ * (durability); that is, database integrity will be
+ * maintained, but it is possible that this transaction may
+ * be undone during recovery. <p>
+ *
+ * This behavior may be set for a Berkeley DB environment
+ * using the {@link com.sleepycat.db.DbEnv#setFlags
+ * DbEnv.setFlags} method or for a single transaction using
+ * the {@link com.sleepycat.db.DbEnv#txnBegin
+ * DbEnv.txnBegin} method. Any value specified to this
+ * method overrides both of those settings.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_TXN_SYNC
+ * Db.DB_TXN_SYNC}<p>
+ *
+ * Synchronously flush the log. This means the transaction
+ * will exhibit all of the ACID (atomicity, consistency,
+ * isolation, and durability) properties. <p>
+ *
+ * This behavior is the default for Berkeley DB
+ * environments unless the {@link
+ * com.sleepycat.db.Db#DB_TXN_NOSYNC <code>Db.DB_TXN_NOSYNC</code>
+ * } flag was specified to the {@link
+ * com.sleepycat.db.DbEnv#setFlags DbEnv.setFlags} method.
+ * This behavior may also be set for a single transaction
+ * using the {@link com.sleepycat.db.DbEnv#txnBegin
+ * DbEnv.txnBegin} method. Any value specified to this
+ * method overrides both of those settings.</p> </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void commit(int flags) throws DbException {
+ try {
+ commit0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
- public native void prepare()
- throws DbException;
+ /**
+ * The DbTxn.discard method frees up all the per-process
+ * resources associated with the specified {@link
+ * com.sleepycat.db.DbTxn DbTxn} handle, neither committing nor
+ * aborting the transaction. This call may be used only after
+ * calls to {@link com.sleepycat.db.DbEnv#txnRecover
+ * DbEnv.txnRecover} when there are multiple global transaction
+ * managers recovering transactions in a single Berkeley DB
+ * environment. Any transactions returned by {@link
+ * com.sleepycat.db.DbEnv#txnRecover DbEnv.txnRecover} that are
+ * not handled by the current global transaction manager should
+ * be discarded using DbTxn.discard.</p> After DbTxn.discard has
+ * been called, regardless of its return, the {@link
+ * com.sleepycat.db.DbTxn DbTxn} handle may not be accessed
+ * again.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws IllegalArgumentException The DbTxn.discard method
+ * will fail and throw a IllegalArgumentException exception
+ * if the transaction handle does not refer to a transaction
+ * that was recovered into a prepared but not yet completed
+ * state; or if an invalid flag value or parameter was
+ * specified.
+ */
+ public void discard(int flags) throws DbException {
+ try {
+ discard0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
- protected native void finalize()
- throws Throwable;
- // get/set methods
+ // We override Object.equals because it is possible for
+ // the Java API to create multiple DbTxns that reference
+ // the same underlying object. This can happen for example
+ // during DbEnv.txn_recover().
//
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj != null && (obj instanceof DbTxn)) {
+ DbTxn that = (DbTxn) obj;
+ return (this.swigCPtr == that.swigCPtr);
+ }
+ return false;
+ }
- // private data
+
+ // We must override Object.hashCode whenever we override
+ // Object.equals() to enforce the maxim that equal objects
+ // have the same hashcode.
//
- private long private_dbobj_ = 0;
+ public int hashCode() {
- static {
- Db.load_db();
+ return ((int) swigCPtr ^ (int) (swigCPtr >> 32));
}
-}
-// end of DbTxn.java
+
+ void abort0() {
+ db_javaJNI.DbTxn_abort0(swigCPtr);
+ }
+
+
+ void commit0(int flags) {
+ db_javaJNI.DbTxn_commit0(swigCPtr, flags);
+ }
+
+
+ void discard0(int flags) {
+ db_javaJNI.DbTxn_discard0(swigCPtr, flags);
+ }
+
+
+ /**
+ * The DbTxn.id method returns the unique transaction id
+ * associated with the specified transaction. Locking calls made
+ * on behalf of this transaction should use the value returned
+ * from DbTxn.id as the locker parameter to the {@link
+ * com.sleepycat.db.DbEnv#lockGet DbEnv.lockGet} or {@link
+ * com.sleepycat.db.DbEnv#lockVector DbEnv.lockVector} calls.</p>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ * @return The DbTxn.id method returns the unique
+ * transaction id associated with the specified transaction.
+ */
+ public int id() throws DbException {
+ return db_javaJNI.DbTxn_id(swigCPtr);
+ }
+
+
+ /**
+ * The DbTxn.prepare method initiates the beginning of a
+ * two-phase commit.</p> <p>
+ *
+ * In a distributed transaction environment, Berkeley DB can be
+ * used as a local transaction manager. In this case, the
+ * distributed transaction manager must send <i>prepare</i>
+ * messages to each local manager. The local manager must then
+ * issue a DbTxn.prepare and await its successful return before
+ * responding to the distributed transaction manager. Only after
+ * the distributed transaction manager receives successful
+ * responses from all of its <i>prepare</i> messages should it
+ * issue any <i>commit</i> messages.</p> <p>
+ *
+ * In the case of nested transactions, preparing the parent
+ * causes all unresolved children of the parent transaction to be
+ * committed. Child transactions should never be explicitly
+ * prepared. Their fate will be resolved along with their
+ * parent's during global recovery.</p>
+ *
+ * @param gid specifies the global transaction ID by
+ * which this transaction will be known. This global
+ * transaction ID will be returned in calls to {@link
+ * com.sleepycat.db.DbEnv#txnRecover DbEnv.txnRecover},
+ * telling the application which global transactions must be
+ * resolved.
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_XIDDATASIZE
+ * Db.DB_XIDDATASIZE}<p>
+ *
+ * must be sized at least <code>Db.DB_XIDDATASIZE</code>
+ * (currently 128) bytes; only the first <code>Db.DB_XIDDATASIZE</code>
+ * bytes are used. </li>
+ * </ul>
+ *
+ * @throws DbException Signals that an exception of some sort
+ * has occurred.
+ */
+ public void prepare(byte[] gid) throws DbException {
+ db_javaJNI.DbTxn_prepare(swigCPtr, gid);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setTimeout(long,int)}
+ */
+ public void set_timeout(long timeout, int flags) throws DbException {
+ setTimeout(timeout, flags);
+ }
+
+
+ /**
+ * The DbTxn.setTimeout method sets timeout values for locks or
+ * transactions for the specified transaction.</p> <p>
+ *
+ * Timeouts are checked whenever a thread of control blocks on a
+ * lock or when deadlock detection is performed. (In the case of
+ * Db.DB_SET_LOCK_TIMEOUT, the lock is one requested explicitly
+ * through the Lock subsystem interfaces. In the case of
+ * Db.DB_SET_TXN_TIMEOUT, the lock is one requested on behalf of
+ * a transaction. In either case, it may be a lock requested by
+ * the database access methods underlying the application.) As
+ * timeouts are only checked when the lock request first blocks
+ * or when deadlock detection is performed, the accuracy of the
+ * timeout depends on how often deadlock detection is performed.
+ * </p> <p>
+ *
+ * Timeout values may be specified for the database environment
+ * as a whole. See {@link com.sleepycat.db.DbEnv#setTimeout
+ * DbEnv.setTimeout} and for more information.</p> <p>
+ *
+ * The DbTxn.setTimeout method configures operations performed on
+ * the underlying transaction, not only operations performed
+ * using the specified {@link com.sleepycat.db.DbTxn DbTxn}
+ * handle.</p> <p>
+ *
+ * The DbTxn.setTimeout method may be called at any time during
+ * the life of the application.</p>
+ *
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_LOCK_TIMEOUT
+ * Db.DB_SET_LOCK_TIMEOUT}<p>
+ *
+ * Set the timeout value for locks in this transaction.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_TXN_TIMEOUT
+ * Db.DB_SET_TXN_TIMEOUT}<p>
+ *
+ * Set the timeout value for this transaction. </li>
+ * </ul>
+ *
+ * @param timeout specified as an unsigned
+ * 32-bit number of microseconds, limiting the maximum
+ * timeout to roughly 71 minutes. A value of 0 disables
+ * timeouts for the transaction.
+ * @throws IllegalArgumentException The DbTxn.setTimeout method
+ * will fail and throw a IllegalArgumentException exception
+ * if an invalid flag value or parameter was specified.
+ */
+ public void setTimeout(long timeout, int flags) throws DbException {
+ db_javaJNI.DbTxn_set_timeout(swigCPtr, timeout, flags);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/DbTxnStat.java b/db/java/src/com/sleepycat/db/DbTxnStat.java
index e72addb00..a56dff73a 100644
--- a/db/java/src/com/sleepycat/db/DbTxnStat.java
+++ b/db/java/src/com/sleepycat/db/DbTxnStat.java
@@ -1,40 +1,177 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: DbTxnStat.java,v 11.3 2000/02/14 02:59:56 bostic Exp $
+/*
+ * DO NOT EDIT: automatically built by dist/s_java_stat.
*/
-
package com.sleepycat.db;
-/*
- * This is filled in and returned by the
- * DbTxnMgr.fstat() method.
+/**
+ * The DbTxnStat object is used to return transaction subsystem
+ * statistics.</p>
*/
-public class DbTxnStat
-{
+public class DbTxnStat {
public static class Active {
- public int txnid; // Transaction ID
- public int parentid; // Transaction ID of parent
- public DbLsn lsn; // Lsn of the begin record
- };
+ /**
+ * The transaction ID of the transaction.
+ *</ul>
+ *
+ */
+ public int txnid;
+ /**
+ * The transaction ID of the parent transaction (or 0, if no
+ * parent).
+ *</ul>
+ *
+ */
+ public int parentid;
+ /**
+ * The current log sequence number when the transaction was
+ * begun.
+ *</ul>
+ *
+ */
+ public DbLsn lsn;
+ /**
+ * If the transaction is an XA transaction, the status of the
+ * transaction, otherwise 0.
+ *</ul>
+ *
+ */
+ public int xa_status;
+ /**
+ * If the transaction is an XA transaction, the transaction's
+ * XA ID.
+ *</ul>
+ *
+ */
+ public byte[] xid;
- public DbLsn st_last_ckp; // lsn of the last checkpoint
- public DbLsn st_pending_ckp; // last checkpoint did not finish
- public long st_time_ckp; // time of last checkpoint (UNIX secs)
- public int st_last_txnid; // last transaction id given out
- public int st_maxtxns; // maximum number of active txns
- public int st_naborts; // number of aborted transactions
- public int st_nbegins; // number of begun transactions
- public int st_ncommits; // number of committed transactions
- public int st_nactive; // number of active transactions
- public int st_maxnactive; // maximum active transactions
- public Active st_txnarray[]; // array of active transactions
- public int st_region_wait; // Region lock granted after wait.
- public int st_region_nowait; // Region lock granted without wait.
- public int st_regsize; // Region size.
-}
+ /**
+ * Provide a string representation of all the fields
+ * contained within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "Active:"
+ + "\n txnid=" + txnid
+ + "\n parentid=" + parentid
+ + "\n lsn=" + lsn
+ + "\n xa_status=" + xa_status
+ + "\n xid=" + DbUtil.byteArrayToString(xid)
+ ;
+ }
+ }
+
+
+ /**
+ * The LSN of the last checkpoint.
+ *</ul>
+ *
+ */
+ public DbLsn st_last_ckp;
+ /**
+ * The time the last completed checkpoint finished (as the number
+ * of seconds since the Epoch, returned by the IEEE/ANSI Std
+ * 1003.1 (POSIX) <b>time</b> function).
+ *</ul>
+ *
+ */
+ public long st_time_ckp;
+ /**
+ * The last transaction ID allocated.
+ *</ul>
+ *
+ */
+ public int st_last_txnid;
+ /**
+ * The maximum number of active transactions configured.
+ *</ul>
+ *
+ */
+ public int st_maxtxns;
+ /**
+ * The number of transactions that have aborted.
+ *</ul>
+ *
+ */
+ public int st_naborts;
+ /**
+ * The number of transactions that have begun.
+ *</ul>
+ *
+ */
+ public int st_nbegins;
+ /**
+ * The number of transactions that have committed.
+ *</ul>
+ *
+ */
+ public int st_ncommits;
+ /**
+ * The number of transactions that are currently active.
+ *</ul>
+ *
+ */
+ public int st_nactive;
+ /**
+ * The number of transactions that have been restored.
+ *</ul>
+ *
+ */
+ public int st_nrestores;
+ /**
+ * The maximum number of active transactions at any one time.
+ *
+ *</ul>
+ *
+ */
+ public int st_maxnactive;
+ public Active st_txnarray[];
+ /**
+ * The number of times that a thread of control was forced to
+ * wait before obtaining the region lock.
+ *</ul>
+ *
+ */
+ public int st_region_wait;
+ /**
+ * The number of times that a thread of control was able to
+ * obtain the region lock without waiting.
+ *</ul>
+ *
+ */
+ public int st_region_nowait;
+ /**
+ * The size of the region.
+ *</ul>
+ *
+ */
+ public int st_regsize;
+
+
+ /**
+ * Provide a string representation of all the fields contained
+ * within this class.
+ *
+ * @return The string representation.
+ */
+ public String toString() {
+ return "DbTxnStat:"
+ + "\n st_last_ckp=" + st_last_ckp
+ + "\n st_time_ckp=" + st_time_ckp
+ + "\n st_last_txnid=" + st_last_txnid
+ + "\n st_maxtxns=" + st_maxtxns
+ + "\n st_naborts=" + st_naborts
+ + "\n st_nbegins=" + st_nbegins
+ + "\n st_ncommits=" + st_ncommits
+ + "\n st_nactive=" + st_nactive
+ + "\n st_nrestores=" + st_nrestores
+ + "\n st_maxnactive=" + st_maxnactive
+ + "\n st_txnarray=" + DbUtil.objectArrayToString(st_txnarray, "st_txnarray")
+ + "\n st_region_wait=" + st_region_wait
+ + "\n st_region_nowait=" + st_region_nowait
+ + "\n st_regsize=" + st_regsize
+ ;
+ }
+}
// end of DbTxnStat.java
diff --git a/db/java/src/com/sleepycat/db/DbUtil.java b/db/java/src/com/sleepycat/db/DbUtil.java
index 98ed016af..143740107 100644
--- a/db/java/src/com/sleepycat/db/DbUtil.java
+++ b/db/java/src/com/sleepycat/db/DbUtil.java
@@ -1,33 +1,35 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2001-2003
+ * Sleepycat Software. All rights reserved.
*
- * Id: DbUtil.java,v 11.1 2001/05/01 01:44:53 krinsky Exp
+ * $Id: DbUtil.java,v 11.17 2003/11/28 18:35:47 bostic Exp $
*/
-
package com.sleepycat.db;
/**
- *
- * @author David M. Krinsky
+ * DbUtil is a simple, package-private wrapper class that holds a few
+ * static utility functions other parts of the package share and that
+ * don't have a good home elsewhere. (For now, that's limited to
+ * byte-array-to-int conversion and back.)
*/
-// DbUtil is a simple, package-private wrapper class that holds a few
-// static utility functions other parts of the package share and that don't
-// have a good home elsewhere. (For now, that's limited to byte-array-to-int
-// conversion and back.)
-
-class DbUtil
-{
- // Get the u_int32_t stored beginning at offset "offset" into
- // array "arr". We have to do the conversion manually since it's
- // a C-native int, and we're not really supposed to make this kind of
- // cast in Java.
- static int array2int(byte[] arr, int offset)
- {
- int b1, b2, b3, b4;
+class DbUtil {
+ /**
+ * Get the u_int32_t stored beginning at offset "offset" into
+ * array "arr". We have to do the conversion manually since it's
+ * a C-native int, and we're not really supposed to make this
+ * kind of cast in Java.
+ *
+ * @return Description of the Return Value
+ */
+ static int array2int(byte[] arr, int offset) {
+ int b1;
+ int b2;
+ int b3;
+ int b4;
int pos = offset;
// Get the component bytes; b4 is most significant, b1 least.
@@ -44,10 +46,18 @@ class DbUtil
}
// Bytes are signed. Convert [-128, -1] to [128, 255].
- if (b1 < 0) { b1 += 256; }
- if (b2 < 0) { b2 += 256; }
- if (b3 < 0) { b3 += 256; }
- if (b4 < 0) { b4 += 256; }
+ if (b1 < 0) {
+ b1 += 256;
+ }
+ if (b2 < 0) {
+ b2 += 256;
+ }
+ if (b3 < 0) {
+ b3 += 256;
+ }
+ if (b4 < 0) {
+ b4 += 256;
+ }
// Put the bytes in their proper places in an int.
b2 <<= 8;
@@ -58,41 +68,111 @@ class DbUtil
return (b1 + b2 + b3 + b4);
}
- // Store the specified u_int32_t, with endianness appropriate
- // to the platform we're running on, into four consecutive bytes of
- // the specified byte array, starting from the specified offset.
- static void int2array(int n, byte[] arr, int offset)
- {
- int b1, b2, b3, b4;
+
+ /**
+ * Store the specified u_int32_t, with endianness appropriate to
+ * the platform we're running on, into four consecutive bytes of
+ * the specified byte array, starting from the specified offset.
+ */
+ static void int2array(int n, byte[] arr, int offset) {
+ int b1;
+ int b2;
+ int b3;
+ int b4;
int pos = offset;
b1 = n & 0xff;
b2 = (n >> 8) & 0xff;
b3 = (n >> 16) & 0xff;
- b4 = (n >> 24) & 0xff;
+ b4 = (n >> 24) & 0xff;
// Bytes are signed. Convert [128, 255] to [-128, -1].
- if (b1 >= 128) { b1 -= 256; }
- if (b2 >= 128) { b2 -= 256; }
- if (b3 >= 128) { b3 -= 256; }
- if (b4 >= 128) { b4 -= 256; }
+ if (b1 >= 128) {
+ b1 -= 256;
+ }
+ if (b2 >= 128) {
+ b2 -= 256;
+ }
+ if (b3 >= 128) {
+ b3 -= 256;
+ }
+ if (b4 >= 128) {
+ b4 -= 256;
+ }
// Put the bytes in the appropriate place in the array.
if (big_endian) {
- arr[pos++] = (byte)b4;
- arr[pos++] = (byte)b3;
- arr[pos++] = (byte)b2;
- arr[pos] = (byte)b1;
+ arr[pos++] = (byte) b4;
+ arr[pos++] = (byte) b3;
+ arr[pos++] = (byte) b2;
+ arr[pos] = (byte) b1;
} else {
- arr[pos++] = (byte)b1;
- arr[pos++] = (byte)b2;
- arr[pos++] = (byte)b3;
- arr[pos] = (byte)b4;
+ arr[pos++] = (byte) b1;
+ arr[pos++] = (byte) b2;
+ arr[pos++] = (byte) b3;
+ arr[pos] = (byte) b4;
}
}
- private static final boolean big_endian = am_big_endian();
- private static native boolean am_big_endian();
-}
-// end of DbUtil.java
+ /**
+ * Convert a byte array to a concise, readable string suitable
+ * for use in toString methods of the *Stat classes.
+ *
+ * @return Description of the Return Value
+ */
+ public static String byteArrayToString(byte[] barr) {
+ if (barr == null) {
+ return "null";
+ }
+
+ StringBuffer sb = new StringBuffer();
+ int len = barr.length;
+ for (int i = 0; i < len; i++) {
+ sb.append('x');
+ int val = (barr[i] >> 4) & 0xf;
+ if (val < 10) {
+ sb.append((char) ('0' + val));
+ } else {
+ sb.append((char) ('a' + val - 10));
+ }
+ val = barr[i] & 0xf;
+ if (val < 10) {
+ sb.append((char) ('0' + val));
+ } else {
+ sb.append((char) ('a' + val - 10));
+ }
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Convert an object array to a string, suitable for use in
+ * toString methods of the *Stat classes.
+ *
+ * @return Description of the Return Value
+ */
+ public static String objectArrayToString(Object[] arr, String name) {
+ if (arr == null) {
+ return "null";
+ }
+
+ StringBuffer sb = new StringBuffer();
+ int len = arr.length;
+ for (int i = 0; i < len; i++) {
+ sb.append("\n " + name + "[" + i + "]:\n");
+ sb.append(" " + arr[i].toString());
+ }
+ return sb.toString();
+ }
+
+
+ private final static boolean big_endian = is_big_endian();
+
+
+ /**
+ * @return Description of the Return Value
+ */
+ private native static boolean is_big_endian();
+}
diff --git a/db/java/src/com/sleepycat/db/Dbc.java b/db/java/src/com/sleepycat/db/Dbc.java
index b097cbad8..a92299d59 100644
--- a/db/java/src/com/sleepycat/db/Dbc.java
+++ b/db/java/src/com/sleepycat/db/Dbc.java
@@ -1,56 +1,1571 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: Dbc.java,v 11.5 2000/05/25 04:18:13 dda Exp $
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * -----------------------------------------------------------------------------
*/
-
package com.sleepycat.db;
/**
+ * The Dbc object is the handle for a cursor into a Berkeley DB
+ * database. The handle is not free-threaded. Cursor handles may be
+ * used by multiple threads, but only serially, that is, the
+ * application must serialize access to the Dbc handle.</p> <p>
*
- * @author Donald D. Anderson
+ * If the cursor is to be used to perform operations on behalf of a
+ * transaction, the cursor must be opened and closed within the
+ * context of that single transaction. Once {@link
+ * com.sleepycat.db.Dbc#close Dbc.close} has been called, the handle
+ * may not be accessed again, regardless of the method's return.</p>
*/
-public class Dbc
-{
- // methods
- //
- public native void close()
- throws DbException;
+public class Dbc {
+ private long swigCPtr;
+ protected boolean swigCMemOwn;
- public native int count(int flags)
- throws DbException;
- // returns: 0, DB_KEYEMPTY, or throws error
- public native int del(int flags)
- throws DbException;
+ protected Dbc(long cPtr, boolean cMemoryOwn) {
+ swigCMemOwn = cMemoryOwn;
+ swigCPtr = cPtr;
+ }
- public native Dbc dup(int flags)
- throws DbException;
- // returns: 0, DB_NOTFOUND, or throws error
- public native int get(Dbt key, Dbt data, int flags)
- throws DbException;
+ protected Dbc() {
+ this(0, false);
+ }
+
- // returns: 0, DB_KEYEXIST, or throws error
- public native int put(Dbt key, Dbt data, int flags)
- throws DbException;
+ protected void delete() {
+ if (swigCPtr != 0 && swigCMemOwn) {
+ swigCMemOwn = false;
+ }
+ swigCPtr = 0;
+ }
- protected native void finalize()
- throws Throwable;
- // get/set methods
- //
+ protected static long getCPtr(Dbc obj) {
+ return (obj == null) ? 0 : obj.swigCPtr;
+ }
- // private data
- //
- private long private_dbobj_ = 0;
- static {
- Db.load_db();
+ /**
+ * The Dbc.close method discards the cursor.</p> <p>
+ *
+ * It is possible for the Dbc.close method to return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_LOCK_DEADLOCK">
+ * Db.DB_LOCK_DEADLOCK</a> , signaling that any enclosing
+ * transaction should be aborted. If the application is already
+ * intending to abort the transaction, this error should be
+ * ignored, and the application should proceed.</p> <p>
+ *
+ * After Dbc.close has been called, regardless of its return, the
+ * cursor handle may not be used again.</p>
+ *
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Dbc.close method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Dbc.close method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Dbc.close method will
+ * fail and throw a IllegalArgumentException exception if the
+ * cursor is already closed; or if an invalid flag value or
+ * parameter was specified.
+ */
+ public synchronized void close() throws DbException {
+ try {
+ close0();
+ } finally {
+ swigCPtr = 0;
+ }
}
-}
-// end of Dbc.java
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link
+ * #get(Dbt,Dbt,Dbt,int)}
+ */
+ public int pget(Dbt key, Dbt pkey, Dbt data, int flags) throws DbException {
+
+ return get(key, pkey, data, flags);
+ }
+
+
+ void close0() {
+ db_javaJNI.Dbc_close0(swigCPtr);
+ }
+
+
+ /**
+ * The Dbc.count method returns a count of the number of data
+ * items for the key to which the cursor refers.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws DbException The Dbc.count method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Dbc.count method will
+ * fail and throw a IllegalArgumentException exception if the
+ * cursor has not been initialized; or if an invalid flag
+ * value or parameter was specified.
+ * @return The Dbc.count method throws
+ * an exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public int count(int flags) throws DbException {
+ return db_javaJNI.Dbc_count(swigCPtr, flags);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #delete(int)}
+ */
+ public int del(int flags) throws DbException {
+ return delete(flags);
+ }
+
+
+ /**
+ * The Dbc.delete method deletes the key/data pair to which the
+ * cursor refers.</p> <p>
+ *
+ * When called on a cursor opened on a database that has been
+ * made into a secondary index using the {@link
+ * com.sleepycat.db.Db#associate Db.associate} method, the {@link
+ * com.sleepycat.db.Db#delete Db.delete} method deletes the
+ * key/data pair from the primary database and all secondary
+ * indices.</p> <p>
+ *
+ * The cursor position is unchanged after a delete, and
+ * subsequent calls to cursor functions expecting the cursor to
+ * refer to an existing key will fail.</p>
+ *
+ * @param flags currently unused, and must
+ * be set to 0.
+ * @throws DbException The Dbc.delete method may
+ * fail and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors: An attempt was made to modify a read-only
+ * database.
+ * <li> Write attempted on read-only cursor when the {@link
+ * com.sleepycat.db.Db#DB_INIT_CDB Db.DB_INIT_CDB} flag was
+ * specified to {@link com.sleepycat.db.DbEnv#open
+ * DbEnv.open}.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Dbc.delete method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Dbc.delete method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Dbc.delete method will
+ * fail and throw a IllegalArgumentException exception if the
+ * cursor has not been initialized; or if an invalid flag
+ * value or parameter was specified.
+ * @return
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Dbc.delete method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if the element has
+ * already been deleted. </li>
+ * </ul>
+ * Unless otherwise specified, the Dbc.delete method throws
+ * an exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public int delete(int flags) throws DbException {
+ return db_javaJNI.Dbc_del(swigCPtr, flags);
+ }
+
+
+ /**
+ * The Dbc.dup method creates a new cursor that uses the same
+ * transaction and locker ID as the original cursor. This is
+ * useful when an application is using locking and requires two
+ * or more cursors in the same thread of control.</p>
+ *
+ * @param flags must be set to 0 or by
+ * bitwise inclusively <b>OR</b> 'ing together one or more of
+ * the following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_POSITION
+ * Db.DB_POSITION}<p>
+ *
+ * The newly created cursor is initialized to refer to the
+ * same position in the database as the original cursor and
+ * hold the same locks. If the <code>Db.DB_POSITION</code>
+ * flag is not specified, then the created cursor is
+ * uninitialized and will behave like a cursor newly
+ * created using {@link com.sleepycat.db.Db#cursor
+ * Db.cursor}. </li>
+ * </ul>
+ *
+ * @throws DbException The Dbc.dup method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws IllegalArgumentException The Dbc.dup method will fail
+ * and throw a IllegalArgumentException exception if the
+ * cursor has not been initialized; or if an invalid flag
+ * value or parameter was specified.
+ * @return The Dbc.dup method throws an
+ * exception that encapsulates a non-zero error value on
+ * failure. </p>
+ */
+ public Dbc dup(int flags) throws DbException {
+ long cPtr = db_javaJNI.Dbc_dup(swigCPtr, flags);
+ return (cPtr == 0) ? null : new Dbc(cPtr, true);
+ }
+
+
+ /**
+ * The Dbc.get method retrieves key/data pairs from the database.
+ * The byte array and length of the key are returned in the
+ * object to which <b>key</b> refers (except for the case of the
+ * Db.DB_SET flag, in which the <b>key</b> object is unchanged),
+ * and the byte array and length of the data are returned in the
+ * object to which <b>data</b> refers.</p> <p>
+ *
+ * When called on a cursor opened on a database that has been
+ * made into a secondary index using the {@link
+ * com.sleepycat.db.Db#associate Db.associate} method, the
+ * Dbc.get and Dbc.get methods return the key from the secondary
+ * index and the data item from the primary database. In
+ * addition, the second method signature returns the key from the
+ * primary database. In databases that are not secondary indices,
+ * the second method signature will always fail.</p> <p>
+ *
+ * Modifications to the database during a sequential scan will be
+ * reflected in the scan; that is, records inserted behind a
+ * cursor will not be returned while records inserted in front of
+ * a cursor will be returned.</p> <p>
+ *
+ * In Queue and Recno databases, missing entries (that is,
+ * entries that were never explicitly created or that were
+ * created and then deleted) will be skipped during a sequential
+ * scan.</p> If Dbc.get fails for any reason, the state of the
+ * cursor will be unchanged.</p>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CURRENT
+ * Db.DB_CURRENT}<p>
+ *
+ * Return the key/data pair to which the cursor refers.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FIRST Db.DB_FIRST}<p>
+ *
+ * The cursor is set to refer to the first key/data pair of
+ * the database, and that pair is returned. If the first
+ * key has duplicate values, the first data item in the set
+ * of duplicates is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_FIRST</code> flag will ignore any
+ * keys that exist but were never explicitly created by the
+ * application, or were created and later deleted.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH
+ * Db.DB_GET_BOTH}<p>
+ *
+ * The <code>Db.DB_GET_BOTH</code> flag is identical to the
+ * <code>Db.DB_SET</code> flag, except that both the key
+ * and the data parameters must be matched by the key and
+ * data item in the database. <p>
+ *
+ * When used with the second method signature version of
+ * this method on a secondary index handle, both the
+ * secondary and primary keys must be matched by the
+ * secondary and primary key item in the database. It is an
+ * error to use the <code>Db.DB_GET_BOTH</code> flag with
+ * the first method signature version of this method and a
+ * cursor that has been opened on a secondary index handle.
+ * </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH_RANGE
+ * Db.DB_GET_BOTH_RANGE}<p>
+ *
+ * The <code>Db.DB_GET_BOTH_RANGE</code> flag is identical
+ * to the <code>Db.DB_GET_BOTH</code> flag, except that, in
+ * the case of any database supporting sorted duplicate
+ * sets, the returned key/data pair is the smallest data
+ * item greater than or equal to the specified data item
+ * (as determined by the comparison function), permitting
+ * partial matches and range searches in duplicate data
+ * sets. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_RECNO
+ * Db.DB_GET_RECNO}<p>
+ *
+ * Return the record number associated with the cursor. The
+ * record number will be returned in <b>data</b> , as
+ * described in {@link com.sleepycat.db.Dbt Dbt}. ignored.
+ * <p>
+ *
+ * For <code>Db.DB_GET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag.</p> <p>
+ *
+ * When called on a cursor opened on a database that has
+ * been made into a secondary index, the Dbc.get method
+ * returns the record number of the primary database in <b>
+ * data</b> . In addition, the second method signature
+ * returns the record number of the secondary index in <b>
+ * pkey</b> . If either underlying database is not of type
+ * Btree or is not created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag, the out-of-band record number of 0 is returned.
+ * </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_JOIN_ITEM
+ * Db.DB_JOIN_ITEM}<p>
+ *
+ * Do not use the data value found in all of the cursors as
+ * a lookup key for the primary database, but simply return
+ * it in the key parameter instead. The data parameter is
+ * left unchanged. <p>
+ *
+ * For <code>Db.DB_JOIN_ITEM</code> to be specified, the
+ * underlying cursor must have been returned from the
+ * {@link com.sleepycat.db.Db#join Db.join} method.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LAST Db.DB_LAST}<p>
+ *
+ * The cursor is set to refer to the last key/data pair of
+ * the database, and that pair is returned. If the last key
+ * has duplicate values, the last data item in the set of
+ * duplicates is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_LAST</code> flag will ignore any
+ * keys that exist but were never explicitly created by the
+ * application, or were created and later deleted.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT Db.DB_NEXT}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_NEXT</code>
+ * is identical to <code>Db.DB_FIRST</code>. Otherwise, the
+ * cursor is moved to the next key/data pair of the
+ * database, and that pair is returned. In the presence of
+ * duplicate key values, the value of the key may not
+ * change. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_NEXT</code> flag will skip any
+ * keys that exist but were never explicitly created by the
+ * application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT_DUP
+ * Db.DB_NEXT_DUP}<p>
+ *
+ * If the next key/data pair of the database is a duplicate
+ * data record for the current key/data pair, the cursor is
+ * moved to the next key/data pair of the database, and
+ * that pair is returned. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT_NODUP
+ * Db.DB_NEXT_NODUP}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_NEXT_NODUP</code>
+ * is identical to <code>Db.DB_FIRST</code>. Otherwise, the
+ * cursor is moved to the next non-duplicate key of the
+ * database, and that key/data pair is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_NEXT_NODUP</code> flag will ignore
+ * any keys that exist but were never explicitly created by
+ * the application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PREV Db.DB_PREV}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_PREV</code>
+ * is identical to <code>Db.DB_LAST</code>. Otherwise, the
+ * cursor is moved to the previous key/data pair of the
+ * database, and that pair is returned. In the presence of
+ * duplicate key values, the value of the key may not
+ * change. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_PREV</code> flag will skip any
+ * keys that exist but were never explicitly created by the
+ * application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PREV_NODUP
+ * Db.DB_PREV_NODUP}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_PREV_NODUP</code>
+ * is identical to <code>Db.DB_LAST</code>. Otherwise, the
+ * cursor is moved to the previous non-duplicate key of the
+ * database, and that key/data pair is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_PREV_NODUP</code> flag will ignore
+ * any keys that exist but were never explicitly created by
+ * the application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET Db.DB_SET}<p>
+ *
+ * Move the cursor to the specified key/data pair of the
+ * database, and return the datum associated with the given
+ * key. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RANGE
+ * Db.DB_SET_RANGE}<p>
+ *
+ * The <code>Db.DB_SET_RANGE</code> flag is identical to
+ * the <code>Db.DB_SET</code> flag, except that in the case
+ * of the Btree access method, the key is returned as well
+ * as the data item and the returned key/data pair is the
+ * smallest key greater than or equal to the specified key
+ * (as determined by the Btree comparison function),
+ * permitting partial key matches and range searches. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RECNO
+ * Db.DB_SET_RECNO}<p>
+ *
+ * Move the cursor to the specific numbered record of the
+ * database, and return the associated key/data pair. The
+ * <b>data</b> field of the specified <b>key</b> must be a
+ * byte array containing a record number, as described in
+ * {@link com.sleepycat.db.Dbt Dbt}. This determines the
+ * record to be retrieved. <p>
+ *
+ * For <code>Db.DB_SET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag.</p> </li>
+ * </ul>
+ * In addition, the following flags may be set by bitwise
+ * inclusively <b>OR</b> 'ing them into the <b>flags</b>
+ * parameter:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * Read modified but not yet committed data. Silently
+ * ignored if the {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * <code>Db.DB_DIRTY_READ</code>} flag was not specified
+ * when the underlying database was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE
+ * Db.DB_MULTIPLE}<p>
+ *
+ * Return multiple data items in the <b>data</b> parameter.
+ * <p>
+ *
+ * In the case of Btree or Hash databases, duplicate data
+ * items for the current key, starting at the current
+ * cursor position, are entered into the buffer. Subsequent
+ * calls with both the <code>Db.DB_NEXT_DUP</code> and
+ * <code>Db.DB_MULTIPLE</code> flags specified will return
+ * additional duplicate data items associated with the
+ * current key or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional duplicate data items to return. Subsequent
+ * calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code>
+ * flags specified will return additional duplicate data
+ * items associated with the current key or if there are no
+ * additional duplicate data items will return the next key
+ * and its data items or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional keys in the database.</p> <p>
+ *
+ * In the case of Queue or Recno databases, data items
+ * starting at the current cursor position are entered into
+ * the buffer. The record number of the first record will
+ * be returned in the <b>key</b> parameter. The record
+ * number of each subsequent returned record must be
+ * calculated from this value. Subsequent calls with the
+ * <code>Db.DB_MULTIPLE</code> flag specified will return
+ * additional data items or <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional data items to return.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The multiple data items can be iterated over using the
+ * {@link com.sleepycat.db.DbMultipleDataIterator
+ * DbMultipleDataIterator} class.</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE</code> flag may only be used
+ * with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>
+ * , <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>
+ * , <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>,
+ * <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>,
+ * <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code>
+ * options. The <code>Db.DB_MULTIPLE</code> flag may not be
+ * used when accessing databases made into secondary
+ * indices using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY}<p>
+ *
+ * Return multiple key and data pairs in the <b>data</b>
+ * parameter. <p>
+ *
+ * Key and data pairs, starting at the current cursor
+ * position, are entered into the buffer. Subsequent calls
+ * with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code>
+ * flags specified will return additional key and data
+ * pairs or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional key and data items to return.</p> <p>
+ *
+ * In the case of Btree or Hash databases, the multiple key
+ * and data pairs can be iterated over using the {@link
+ * com.sleepycat.db.DbMultipleKeyDataIterator
+ * DbMultipleKeyDataIterator} class.</p> <p>
+ *
+ * In the case of Queue or Recno databases, the multiple
+ * record number and data pairs can be iterated over using
+ * the {@link com.sleepycat.db.DbMultipleRecnoDataIterator
+ * DbMultipleRecnoDataIterator} class.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE_KEY</code> flag may only be
+ * used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>
+ * , <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>
+ * , <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>,
+ * <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>,
+ * <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code>
+ * options. The <code>Db.DB_MULTIPLE_KEY</code> flag may
+ * not be used when accessing databases made into secondary
+ * indices using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RMW Db.DB_RMW}<p>
+ *
+ * Acquire write locks instead of read locks when doing the
+ * retrieval. Setting this flag can eliminate deadlock
+ * during a read-modify-write cycle by acquiring the write
+ * lock during the read part of the cycle so that another
+ * thread of control acquiring a read lock for the same
+ * item, in its own read-modify-write cycle, will not
+ * result in deadlock. </li>
+ * </ul>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @throws DbException The Dbc.get method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Dbc.get method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Dbc.get method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Dbc.get method will
+ * fail and throw a IllegalArgumentException exception if the
+ * Db.DB_CURRENT or Db.DB_NEXT_DUP flags were specified and
+ * the cursor has not been initialized; the second method
+ * signature was called with a cursor that does not refer to
+ * a secondary index; or if an invalid flag value or
+ * parameter was specified.
+ * @throws DbMemoryException If the requested item could
+ * not be returned due to insufficient memory, the Dbc.get
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return Unless otherwise specified,
+ * the Dbc.get method throws an exception that encapsulates a
+ * non-zero error value on failure. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_CURRENT</code>
+ * is set and the cursor key/data pair was deleted. </li>
+ *
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code>
+ * is set and the database is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code>
+ * is set and the database is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code>
+ * is set and the cursor is already on the last record in
+ * the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_DUP</code>
+ * is set and the next key/data pair of the database is not
+ * a duplicate data record for the current key/data pair.
+ * </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_NODUP</code>
+ * is set and no non-duplicate key/data pairs occur after
+ * the cursor position in the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code>
+ * is set and the cursor is already on the first record in
+ * the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV_NODUP</code>
+ * is set and no non-duplicate key/data pairs occur before
+ * the cursor position in the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_SET</code>
+ * is set and no matching keys are found. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_SET</code>
+ * is set and the database is a Queue or Recno database,
+ * and the specified key exists, but was never explicitly
+ * created by the application or was later deleted. </li>
+ *
+ * </ul>
+ * In the presence of duplicate key values, Dbc.get will
+ * return the first data item for the given key. </p>
+ */
+ public int get(Dbt key, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Dbc_get__SWIG_0(swigCPtr, key, data, flags);
+ }
+
+
+ /**
+ * The Dbc.get method retrieves key/data pairs from the database.
+ * The byte array and length of the key are returned in the
+ * object to which <b>key</b> refers (except for the case of the
+ * Db.DB_SET flag, in which the <b>key</b> object is unchanged),
+ * and the byte array and length of the data are returned in the
+ * object to which <b>data</b> refers.</p> <p>
+ *
+ * When called on a cursor opened on a database that has been
+ * made into a secondary index using the {@link
+ * com.sleepycat.db.Db#associate Db.associate} method, the
+ * Dbc.get and Dbc.get methods return the key from the secondary
+ * index and the data item from the primary database. In
+ * addition, the second method signature returns the key from the
+ * primary database. In databases that are not secondary indices,
+ * the second method signature will always fail.</p> <p>
+ *
+ * Modifications to the database during a sequential scan will be
+ * reflected in the scan; that is, records inserted behind a
+ * cursor will not be returned while records inserted in front of
+ * a cursor will be returned.</p> <p>
+ *
+ * In Queue and Recno databases, missing entries (that is,
+ * entries that were never explicitly created or that were
+ * created and then deleted) will be skipped during a sequential
+ * scan.</p> If Dbc.get fails for any reason, the state of the
+ * cursor will be unchanged.</p>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CURRENT
+ * Db.DB_CURRENT}<p>
+ *
+ * Return the key/data pair to which the cursor refers.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_FIRST Db.DB_FIRST}<p>
+ *
+ * The cursor is set to refer to the first key/data pair of
+ * the database, and that pair is returned. If the first
+ * key has duplicate values, the first data item in the set
+ * of duplicates is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_FIRST</code> flag will ignore any
+ * keys that exist but were never explicitly created by the
+ * application, or were created and later deleted.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH
+ * Db.DB_GET_BOTH}<p>
+ *
+ * The <code>Db.DB_GET_BOTH</code> flag is identical to the
+ * <code>Db.DB_SET</code> flag, except that both the key
+ * and the data parameters must be matched by the key and
+ * data item in the database. <p>
+ *
+ * When used with the second method signature version of
+ * this method on a secondary index handle, both the
+ * secondary and primary keys must be matched by the
+ * secondary and primary key item in the database. It is an
+ * error to use the <code>Db.DB_GET_BOTH</code> flag with
+ * the first method signature version of this method and a
+ * cursor that has been opened on a secondary index handle.
+ * </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_BOTH_RANGE
+ * Db.DB_GET_BOTH_RANGE}<p>
+ *
+ * The <code>Db.DB_GET_BOTH_RANGE</code> flag is identical
+ * to the <code>Db.DB_GET_BOTH</code> flag, except that, in
+ * the case of any database supporting sorted duplicate
+ * sets, the returned key/data pair is the smallest data
+ * item greater than or equal to the specified data item
+ * (as determined by the comparison function), permitting
+ * partial matches and range searches in duplicate data
+ * sets. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_GET_RECNO
+ * Db.DB_GET_RECNO}<p>
+ *
+ * Return the record number associated with the cursor. The
+ * record number will be returned in <b>data</b> , as
+ * described in {@link com.sleepycat.db.Dbt Dbt}. ignored.
+ * <p>
+ *
+ * For <code>Db.DB_GET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag.</p> <p>
+ *
+ * When called on a cursor opened on a database that has
+ * been made into a secondary index, the Dbc.get method
+ * returns the record number of the primary database in <b>
+ * data</b> . In addition, the second method signature
+ * returns the record number of the secondary index in <b>
+ * pkey</b> . If either underlying database is not of type
+ * Btree or is not created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag, the out-of-band record number of 0 is returned.
+ * </p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_JOIN_ITEM
+ * Db.DB_JOIN_ITEM}<p>
+ *
+ * Do not use the data value found in all of the cursors as
+ * a lookup key for the primary database, but simply return
+ * it in the key parameter instead. The data parameter is
+ * left unchanged. <p>
+ *
+ * For <code>Db.DB_JOIN_ITEM</code> to be specified, the
+ * underlying cursor must have been returned from the
+ * {@link com.sleepycat.db.Db#join Db.join} method.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_LAST Db.DB_LAST}<p>
+ *
+ * The cursor is set to refer to the last key/data pair of
+ * the database, and that pair is returned. If the last key
+ * has duplicate values, the last data item in the set of
+ * duplicates is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_LAST</code> flag will ignore any
+ * keys that exist but were never explicitly created by the
+ * application, or were created and later deleted.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT Db.DB_NEXT}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_NEXT</code>
+ * is identical to <code>Db.DB_FIRST</code>. Otherwise, the
+ * cursor is moved to the next key/data pair of the
+ * database, and that pair is returned. In the presence of
+ * duplicate key values, the value of the key may not
+ * change. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_NEXT</code> flag will skip any
+ * keys that exist but were never explicitly created by the
+ * application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT_DUP
+ * Db.DB_NEXT_DUP}<p>
+ *
+ * If the next key/data pair of the database is a duplicate
+ * data record for the current key/data pair, the cursor is
+ * moved to the next key/data pair of the database, and
+ * that pair is returned. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NEXT_NODUP
+ * Db.DB_NEXT_NODUP}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_NEXT_NODUP</code>
+ * is identical to <code>Db.DB_FIRST</code>. Otherwise, the
+ * cursor is moved to the next non-duplicate key of the
+ * database, and that key/data pair is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_NEXT_NODUP</code> flag will ignore
+ * any keys that exist but were never explicitly created by
+ * the application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PREV Db.DB_PREV}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_PREV</code>
+ * is identical to <code>Db.DB_LAST</code>. Otherwise, the
+ * cursor is moved to the previous key/data pair of the
+ * database, and that pair is returned. In the presence of
+ * duplicate key values, the value of the key may not
+ * change. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_PREV</code> flag will skip any
+ * keys that exist but were never explicitly created by the
+ * application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_PREV_NODUP
+ * Db.DB_PREV_NODUP}<p>
+ *
+ * If the cursor is not yet initialized, <code>Db.DB_PREV_NODUP</code>
+ * is identical to <code>Db.DB_LAST</code>. Otherwise, the
+ * cursor is moved to the previous non-duplicate key of the
+ * database, and that key/data pair is returned. <p>
+ *
+ * If the database is a Queue or Recno database, Dbc.get
+ * using the <code>Db.DB_PREV_NODUP</code> flag will ignore
+ * any keys that exist but were never explicitly created by
+ * the application, or those that were created and later
+ * deleted.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET Db.DB_SET}<p>
+ *
+ * Move the cursor to the specified key/data pair of the
+ * database, and return the datum associated with the given
+ * key. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RANGE
+ * Db.DB_SET_RANGE}<p>
+ *
+ * The <code>Db.DB_SET_RANGE</code> flag is identical to
+ * the <code>Db.DB_SET</code> flag, except that in the case
+ * of the Btree access method, the key is returned as well
+ * as the data item and the returned key/data pair is the
+ * smallest key greater than or equal to the specified key
+ * (as determined by the Btree comparison function),
+ * permitting partial key matches and range searches. </li>
+ *
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_SET_RECNO
+ * Db.DB_SET_RECNO}<p>
+ *
+ * Move the cursor to the specific numbered record of the
+ * database, and return the associated key/data pair. The
+ * <b>data</b> field of the specified <b>key</b> must be a
+ * byte array containing a record number, as described in
+ * {@link com.sleepycat.db.Dbt Dbt}. This determines the
+ * record to be retrieved. <p>
+ *
+ * For <code>Db.DB_SET_RECNO</code> to be specified, the
+ * underlying database must be of type Btree, and it must
+ * have been created with the {@link
+ * com.sleepycat.db.Db#DB_RECNUM <code>Db.DB_RECNUM</code>}
+ * flag.</p> </li>
+ * </ul>
+ * In addition, the following flags may be set by bitwise
+ * inclusively <b>OR</b> 'ing them into the <b>flags</b>
+ * parameter:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * Db.DB_DIRTY_READ}<p>
+ *
+ * Read modified but not yet committed data. Silently
+ * ignored if the {@link com.sleepycat.db.Db#DB_DIRTY_READ
+ * <code>Db.DB_DIRTY_READ</code>} flag was not specified
+ * when the underlying database was opened. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE
+ * Db.DB_MULTIPLE}<p>
+ *
+ * Return multiple data items in the <b>data</b> parameter.
+ * <p>
+ *
+ * In the case of Btree or Hash databases, duplicate data
+ * items for the current key, starting at the current
+ * cursor position, are entered into the buffer. Subsequent
+ * calls with both the <code>Db.DB_NEXT_DUP</code> and
+ * <code>Db.DB_MULTIPLE</code> flags specified will return
+ * additional duplicate data items associated with the
+ * current key or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional duplicate data items to return. Subsequent
+ * calls with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code>
+ * flags specified will return additional duplicate data
+ * items associated with the current key or if there are no
+ * additional duplicate data items will return the next key
+ * and its data items or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional keys in the database.</p> <p>
+ *
+ * In the case of Queue or Recno databases, data items
+ * starting at the current cursor position are entered into
+ * the buffer. The record number of the first record will
+ * be returned in the <b>key</b> parameter. The record
+ * number of each subsequent returned record must be
+ * calculated from this value. Subsequent calls with the
+ * <code>Db.DB_MULTIPLE</code> flag specified will return
+ * additional data items or <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional data items to return.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The multiple data items can be iterated over using the
+ * {@link com.sleepycat.db.DbMultipleDataIterator
+ * DbMultipleDataIterator} class.</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE</code> flag may only be used
+ * with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>
+ * , <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>
+ * , <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>,
+ * <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>,
+ * <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code>
+ * options. The <code>Db.DB_MULTIPLE</code> flag may not be
+ * used when accessing databases made into secondary
+ * indices using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_MULTIPLE_KEY
+ * Db.DB_MULTIPLE_KEY}<p>
+ *
+ * Return multiple key and data pairs in the <b>data</b>
+ * parameter. <p>
+ *
+ * Key and data pairs, starting at the current cursor
+ * position, are entered into the buffer. Subsequent calls
+ * with both the <code>Db.DB_NEXT</code> and <code>Db.DB_MULTIPLE</code>
+ * flags specified will return additional key and data
+ * pairs or <a href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if there are no
+ * additional key and data items to return.</p> <p>
+ *
+ * In the case of Btree or Hash databases, the multiple key
+ * and data pairs can be iterated over using the {@link
+ * com.sleepycat.db.DbMultipleKeyDataIterator
+ * DbMultipleKeyDataIterator} class.</p> <p>
+ *
+ * In the case of Queue or Recno databases, the multiple
+ * record number and data pairs can be iterated over using
+ * the {@link com.sleepycat.db.DbMultipleRecnoDataIterator
+ * DbMultipleRecnoDataIterator} class.</p> <p>
+ *
+ * The buffer to which the <b>data</b> parameter refers
+ * must be provided from user memory (see {@link
+ * com.sleepycat.db.Db#DB_DBT_USERMEM <code>Db.DB_DBT_USERMEM</code>
+ * }). The buffer must be at least as large as the page
+ * size of the underlying database, aligned for unsigned
+ * integer access, and be a multiple of 1024 bytes in size.
+ * If the buffer size is insufficient, then upon return
+ * from the call the size field of the <b>data</b>
+ * parameter will have been set to an estimated buffer
+ * size, and a {@link com.sleepycat.db.DbMemoryException
+ * DbMemoryException} is thrown. (The size is an estimate
+ * as the exact size needed may not be known until all
+ * entries are read. It is best to initially provide a
+ * relatively large buffer, but applications should be
+ * prepared to resize the buffer as necessary and
+ * repeatedly call the method.)</p> <p>
+ *
+ * The <code>Db.DB_MULTIPLE_KEY</code> flag may only be
+ * used with the <code>Db.DB_CURRENT</code>, <code>Db.DB_FIRST</code>
+ * , <code>Db.DB_GET_BOTH</code>, <code>Db.DB_GET_BOTH_RANGE</code>
+ * , <code>Db.DB_NEXT</code>, <code>Db.DB_NEXT_DUP</code>,
+ * <code>Db.DB_NEXT_NODUP</code>, <code>Db.DB_SET</code>,
+ * <code>Db.DB_SET_RANGE</code>, and <code>Db.DB_SET_RECNO</code>
+ * options. The <code>Db.DB_MULTIPLE_KEY</code> flag may
+ * not be used when accessing databases made into secondary
+ * indices using the {@link com.sleepycat.db.Db#associate
+ * Db.associate} method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_RMW Db.DB_RMW}<p>
+ *
+ * Acquire write locks instead of read locks when doing the
+ * retrieval. Setting this flag can eliminate deadlock
+ * during a read-modify-write cycle by acquiring the write
+ * lock during the read part of the cycle so that another
+ * thread of control acquiring a read lock for the same
+ * item, in its own read-modify-write cycle, will not
+ * result in deadlock. </li>
+ * </ul>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param pkey The secondary index key
+ * {@link com.sleepycat.db.Dbt Dbt} operated on.
+ * @throws DbException The Dbc.get method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Dbc.get method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Dbc.get method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Dbc.get method will
+ * fail and throw a IllegalArgumentException exception if the
+ * Db.DB_CURRENT or Db.DB_NEXT_DUP flags were specified and
+ * the cursor has not been initialized; the second method
+ * signature was called with a cursor that does not refer to
+ * a secondary index; or if an invalid flag value or
+ * parameter was specified.
+ * @throws DbMemoryException If the requested item could
+ * not be returned due to insufficient memory, the Dbc.get
+ * method will fail and throw a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}
+ * exception.
+ * @return Unless otherwise specified,
+ * the Dbc.get method throws an exception that encapsulates a
+ * non-zero error value on failure. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_CURRENT</code>
+ * is set and the cursor key/data pair was deleted. </li>
+ *
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_FIRST</code>
+ * is set and the database is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_LAST</code>
+ * is set and the database is empty. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT</code>
+ * is set and the cursor is already on the last record in
+ * the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_DUP</code>
+ * is set and the next key/data pair of the database is not
+ * a duplicate data record for the current key/data pair.
+ * </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_NEXT_NODUP</code>
+ * is set and no non-duplicate key/data pairs occur after
+ * the cursor position in the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV</code>
+ * is set and the cursor is already on the first record in
+ * the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_PREV_NODUP</code>
+ * is set and no non-duplicate key/data pairs occur before
+ * the cursor position in the database. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if <code>Db.DB_SET</code>
+ * is set and no matching keys are found. </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYEMPTY DB_KEYEMPTY}
+ * <p>
+ *
+ * The Dbc.get method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_KEYEMPTY">
+ * <code>Db.DB_KEYEMPTY</code></a> if <code>Db.DB_SET</code>
+ * is set and the database is a Queue or Recno database,
+ * and the specified key exists, but was never explicitly
+ * created by the application or was later deleted. </li>
+ *
+ * </ul>
+ * In the presence of duplicate key values, Dbc.get will
+ * return the first data item for the given key. </p>
+ */
+ public int get(Dbt key, Dbt pkey, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Dbc_get__SWIG_1(swigCPtr, key, pkey, data, flags);
+ }
+
+
+ /**
+ * The Dbc.put method stores key/data pairs into the database.
+ * </p> If Dbc.put fails for any reason, the state of the cursor
+ * will be unchanged. If Dbc.put succeeds and an item is inserted
+ * into the database, the cursor is always positioned to refer to
+ * the newly inserted item.</p>
+ *
+ * @param data The data {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @param flags must be set to one of the
+ * following values:
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_AFTER Db.DB_AFTER}<p>
+ *
+ * In the case of the Btree and Hash access methods, insert
+ * the data element as a duplicate element of the key to
+ * which the cursor refers. The new element appears
+ * immediately after the current cursor position. It is an
+ * error to specify <code>Db.DB_AFTER</code> if the
+ * underlying Btree or Hash database does not support
+ * duplicate data items. ignored. <p>
+ *
+ * In the case of the Recno access method, it is an error
+ * to specify <code>Db.DB_AFTER</code> if the underlying
+ * Recno database was not created with the {@link
+ * com.sleepycat.db.Db#DB_RENUMBER <code>Db.DB_RENUMBER</code>
+ * } flag. If the {@link com.sleepycat.db.Db#DB_RENUMBER
+ * <code>Db.DB_RENUMBER</code>} flag was specified, a new
+ * key is created, all records after the inserted item are
+ * automatically renumbered, and the key of the new record
+ * is returned in the structure to which the <b>key</b>
+ * parameter refers. The initial value of the <b>key</b>
+ * parameter is ignored. See {@link
+ * com.sleepycat.db.Db#open Db.open} for more information.
+ * </p> <p>
+ *
+ * The <code>Db.DB_AFTER</code> flag may not be specified
+ * to the Queue access method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_BEFORE Db.DB_BEFORE}
+ * <p>
+ *
+ * In the case of the Btree and Hash access methods, insert
+ * the data element as a duplicate element of the key to
+ * which the cursor refers. The new element appears
+ * immediately before the current cursor position. It is an
+ * error to specify <code>Db.DB_BEFORE</code> if the
+ * underlying Btree or Hash database does not support
+ * duplicate data items. ignored. <p>
+ *
+ * In the case of the Recno access method, it is an error
+ * to specify <code>Db.DB_BEFORE</code> if the underlying
+ * Recno database was not created with the {@link
+ * com.sleepycat.db.Db#DB_RENUMBER <code>Db.DB_RENUMBER</code>
+ * } flag. If the {@link com.sleepycat.db.Db#DB_RENUMBER
+ * <code>Db.DB_RENUMBER</code>} flag was specified, a new
+ * key is created, the current record and all records after
+ * it are automatically renumbered, and the key of the new
+ * record is returned in the structure to which the <b>key
+ * </b> parameter refers. The initial value of the <b>key
+ * </b> parameter is ignored. See {@link
+ * com.sleepycat.db.Db#open Db.open} for more information.
+ * </p> <p>
+ *
+ * The <code>Db.DB_BEFORE</code> flag may not be specified
+ * to the Queue access method.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_CURRENT
+ * Db.DB_CURRENT}<p>
+ *
+ * Overwrite the data of the key/data pair to which the
+ * cursor refers with the specified data item. ignored.
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYFIRST
+ * Db.DB_KEYFIRST}<p>
+ *
+ * In the case of the Btree and Hash access methods, insert
+ * the specified key/data pair into the database. <p>
+ *
+ * If the underlying database supports duplicate data
+ * items, and if the key already exists in the database and
+ * a duplicate sort function has been specified, the
+ * inserted data item is added in its sorted location. If
+ * the key already exists in the database and no duplicate
+ * sort function has been specified, the inserted data item
+ * is added as the first of the data items for that key.
+ * </p> <p>
+ *
+ * The <code>Db.DB_KEYFIRST</code> flag may not be
+ * specified to the Queue or Recno access methods.</p>
+ * </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_KEYLAST
+ * Db.DB_KEYLAST}<p>
+ *
+ * In the case of the Btree and Hash access methods, insert
+ * the specified key/data pair into the database. <p>
+ *
+ * If the underlying database supports duplicate data
+ * items, and if the key already exists in the database and
+ * a duplicate sort function has been specified, the
+ * inserted data item is added in its sorted location. If
+ * the key already exists in the database, and no duplicate
+ * sort function has been specified, the inserted data item
+ * is added as the last of the data items for that key.</p>
+ * <p>
+ *
+ * The <code>Db.DB_KEYLAST</code> flag may not be specified
+ * to the Queue or Recno access methods.</p> </li>
+ * </ul>
+ *
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NODUPDATA
+ * Db.DB_NODUPDATA}<p>
+ *
+ * In the case of the Btree and Hash access methods, insert
+ * the specified key/data pair into the database, unless a
+ * key/data pair comparing equally to it already exists in
+ * the database. If a matching key/data pair already exists
+ * in the database, {@link com.sleepycat.db.Db#DB_KEYEXIST
+ * <code>Db.DB_KEYEXIST</code>} is returned. The <code>Db.DB_NODUPDATA</code>
+ * flag may only be specified if the underlying database
+ * has been configured to support sorted duplicate data
+ * items. <p>
+ *
+ * The <code>Db.DB_NODUPDATA</code> flag may not be
+ * specified to the Queue or Recno access methods.</p>
+ * </li>
+ * </ul>
+ *
+ * @param key The key {@link
+ * com.sleepycat.db.Dbt Dbt} operated on.
+ * @throws DbException The Dbc.put method may fail
+ * and throw {@link com.sleepycat.db.DbException
+ * DbException}, encapsulating one of the following non-zero
+ * errors:
+ * <li> An attempt was made to modify a read-only database.
+ * Write attempted on read-only cursor when the {@link
+ * com.sleepycat.db.Db#DB_INIT_CDB Db.DB_INIT_CDB} flag was
+ * specified to {@link com.sleepycat.db.DbEnv#open
+ * DbEnv.open}.
+ * @throws DbDeadlockException If a transactional database
+ * environment operation was selected to resolve a deadlock,
+ * the Dbc.put method will fail and throw a {@link
+ * com.sleepycat.db.DbDeadlockException DbDeadlockException}
+ * exception.
+ * @throws DbLockNotGrantedException If a Berkeley DB Concurrent
+ * Data Store database environment configured for lock
+ * timeouts was unable to grant a lock in the allowed time,
+ * the Dbc.put method will fail and throw a {@link
+ * com.sleepycat.db.DbLockNotGrantedException
+ * DbLockNotGrantedException} exception.
+ * @throws IllegalArgumentException The Dbc.put method will
+ * fail and throw a IllegalArgumentException exception if the
+ * Db.DB_AFTER, Db.DB_BEFORE or Db.DB_CURRENT flags were
+ * specified and the cursor has not been initialized; the
+ * Db.DB_AFTER or Db.DB_BEFORE flags were specified and a
+ * duplicate sort function has been specified; the
+ * Db.DB_CURRENT flag was specified, a duplicate sort
+ * function has been specified, and the data item of the
+ * referenced key/data pair does not compare equally to the
+ * <b>data</b> parameter; the Db.DB_AFTER or Db.DB_BEFORE
+ * flags were specified, and the underlying access method is
+ * Queue; an attempt was made to add a record to a
+ * fixed-length database that was too large to fit; an
+ * attempt was made to add a record to a secondary index; or
+ * if an invalid flag value or parameter was specified.
+ * @return Unless otherwise specified,
+ * the Dbc.put method throws an exception that encapsulates a
+ * non-zero error value on failure. </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.put method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the current cursor
+ * record has already been deleted and the underlying
+ * access method is Hash. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.put method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the current cursor
+ * record has already been deleted and the underlying
+ * access method is Hash. </li>
+ * </ul>
+ * </p>
+ * <ul>
+ * <li> {@link com.sleepycat.db.Db#DB_NOTFOUND DB_NOTFOUND}
+ * <p>
+ *
+ * The Dbc.put method will return <a
+ * href="{@docRoot}/../ref/program/errorret.html#DB_NOTFOUND">
+ * <code>Db.DB_NOTFOUND</code></a> if the current cursor
+ * record has already been deleted and the underlying
+ * access method is Hash. </li>
+ * </ul>
+ * </p>
+ */
+ public int put(Dbt key, Dbt data, int flags) throws DbException {
+ return db_javaJNI.Dbc_put(swigCPtr, key, data, flags);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/Dbt.java b/db/java/src/com/sleepycat/db/Dbt.java
index bbb478cd5..7036e3c33 100644
--- a/db/java/src/com/sleepycat/db/Dbt.java
+++ b/db/java/src/com/sleepycat/db/Dbt.java
@@ -1,110 +1,599 @@
-/*-
- * See the file LICENSE for redistribution information.
+/*
+ * -
+ * See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
*
- * $Id: Dbt.java,v 11.6 2000/06/16 03:34:01 dda Exp $
+ * $Id: Dbt.java,v 11.61 2003/12/03 21:28:13 bostic Exp $
*/
-
package com.sleepycat.db;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
/**
+ * This information describes the specific details of the Dbt class,
+ * used to encode keys and data items in a database.</p> <h3>Key/Data
+ * Pairs</h3> <p>
+ *
+ * Storage and retrieval for the {@link com.sleepycat.db.Db Db}
+ * access methods are based on key/data pairs. Both key and data
+ * items are represented by Dbt objects. Key and data byte strings
+ * may refer to strings of zero length up to strings of essentially
+ * unlimited length. See <a href="{@docRoot}/../ref/am_misc/dbsizes.html">
+ * Database limits</a> for more information.</p> <p>
+ *
+ * The Dbt class provides simple access to an underlying data
+ * structure, whose elements can be examined or changed using the
+ * usual <b>set</b> or <b>get</b> methods. Dbt can be subclassed,
+ * providing a way to associate with it additional data or references
+ * to other structures.</p> <p>
+ *
+ * The constructors set all elements of the underlying structure to
+ * zero. The constructor with one parameter has the effect of setting
+ * all elements to zero except for the <b>data</b> and <b>size</b>
+ * elements. The constructor with three parameters has the effect of
+ * setting all elements to zero except for the <b>data</b> , <b>size
+ * </b> and <b>offset</b> elements.</p> <p>
*
- * @author Donald D. Anderson
+ * In the case where the <b>flags</b> structure element is set to 0,
+ * when being provided a key or data item by the application, the
+ * Berkeley DB package expects the <b>data</b> object to be set to a
+ * byte array of <b>size</b> bytes. When returning a key/data item to
+ * the application, the Berkeley DB package will store into the <b>
+ * data</b> object a byte array of <b>size</b> bytes. During a get
+ * operation, if none of the Db.DB_DBT_MALLOC, Db.DB_DBT_REALLOC or
+ * Db.DB_DBT_USERMEM flags are specified, the operation occurs as if
+ * Db.DB_DBT_MALLOC was used.</p> <p>
+ *
+ * Access to Dbt objects is not re-entrant. In particular, if
+ * multiple threads simultaneously access the same Dbt object using
+ * {@link com.sleepycat.db.Db Db} API calls, the results are
+ * undefined, and may result in a crash. One easy way to avoid
+ * problems is to use Dbt objects that are created as local variables
+ * and not shared among threads.</p>
*/
-public class Dbt
-{
- // methods
+public class Dbt {
+
+ // private data
//
+ private byte[] data = null;
+ private int dlen = 0;
+ private int doff = 0;
+ private int flags = 0;
+ private int offset = 0;
+ private int size = 0;
+ private int ulen = 0;
- protected native void finalize()
- throws Throwable;
- // get/set methods
+ /**
+ * Construct an empty Dbt.</p>
+ */
+ public Dbt() { }
+
+
+ /**
+ * Construct a Dbt where the data is the contents of the array
+ * and the Dbt's length is set to the length of the array.</p>
+ *
+ * @param data the array to which the Dbt's data is set.
+ */
+ public Dbt(byte[] data) {
+ this.data = data;
+ if (data != null) {
+ this.size = data.length;
+ }
+ }
+
+
+ /**
+ * Construct a Dbt from <b>len</b> bytes from the array, starting
+ * at <b>off</b> .</p>
+ *
+ * @param data the array from which the Dbt's data is set.
+ * @param len the length of the data in bytes.
+ * @param off starting byte offset of the data in the array.
+ */
+ public Dbt(byte[] data, int off, int len) {
+ this.data = data;
+ this.offset = off;
+ this.size = len;
+ }
+
+
+ /**
+ * Construct a Dbt where the data is the serialized form of the
+ * Object. The instanced passed must therefore implement the
+ * Serializable interface. The Dbt's length will be set to the
+ * length of the byte array required to store this serialized
+ * form.</p>
+ *
+ * @param serialobj the serialized form to which the
+ * Dbt's data is set.
+ * @throws java.io.IOException If there is an error while
+ * serializing the object.
+ */
+ public Dbt(Object serialobj) throws java.io.IOException {
+
+ this.setObject(serialobj);
+ }
+
+
+ /**
+ * Set the data array. Note that the array data is not copied
+ * immediately, but only when the Dbt is used.</p>
+ *
+ * @param data an array of bytes to be used to set the content
+ * for the Dbt.
+ */
+ public void setData(byte[] data) {
+ this.data = data;
+ }
+
+
+ /**
+ * Set the object flag value.</p> The <b>flags</b> parameter must
+ * be set by bitwise inclusively <b>OR</b> 'ing together one or
+ * more of the following values: If Db.DB_DBT_MALLOC or
+ * Db.DB_DBT_REALLOC is specified, Berkeley DB allocates a
+ * properly sized byte array to contain the data. This can be
+ * convenient if you know little about the nature of the data,
+ * specifically the size of data in the database. However, if
+ * your application makes repeated calls to retrieve keys or
+ * data, you may notice increased garbage collection due to this
+ * allocation. If you know the maximum size of data you are
+ * retrieving, you might decrease the memory burden and speed
+ * your application by allocating your own byte array and using
+ * Db.DB_DBT_USERMEM. Even if you don't know the maximum size,
+ * you can use this option and reallocate your array whenever
+ * your retrieval API call throws a {@link
+ * com.sleepycat.db.DbMemoryException DbMemoryException}.</p>
+ *
+ * @param flags Dbt flag value.
+ */
+ public void setFlags(int flags) {
+ this.flags = flags;
+ }
+
+
+ /**
+ * Initialize the data array from a serialized object, encoding
+ * the object using the Java serialization API. This method uses
+ * <i>ObjectOutputStream</i> internally to manipulate an array of
+ * bytes representing an object (and any connected objects). All
+ * of the rules of Java Serialization apply. In particular, the
+ * object(s) must implement either the <i>Serializable</i> or <i>
+ * Externalizable</i> interface. The serialized encoding trades
+ * efficiency for convenience.</p>
+ *
+ * @param serialobj the object to be serialized.
+ * @throws java.io.IOException If there is an error while
+ * de-serializing the object.
+ */
+ public void setObject(Object serialobj) throws java.io.IOException {
+
+ ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(bytestream);
+ oos.writeObject(serialobj);
+ oos.close();
+ byte[] buf = bytestream.toByteArray();
+ bytestream.close();
+ set_data(buf);
+ set_offset(0);
+ set_size(buf.length);
+ }
+
+
+ /**
+ * Set the byte offset into the data array.</p> <p>
+ *
+ * The number of bytes offset into the <b>data</b> array
+ * determine the portion of the array actually used. This element
+ * is accessed using Dbt.getOffset and Dbt.setOffset. Although
+ * Java normally maintains proper alignment of byte arrays, the
+ * set_offset method can be used to specify unaligned addresses.
+ * Unaligned address accesses that are not supported by the
+ * underlying hardware may be reported as an exception, or may
+ * stop the running Java program.</p>
+ *
+ * @param offset the byte offset into the data array.
+ */
+ public void setOffset(int offset) {
+ this.offset = offset;
+ }
+
+
+ /**
+ * Set the byte length of the partial record being read or
+ * written by the application, in bytes. See the
+ * Db.DB_DBT_PARTIAL flag for more information.</p>
+ *
+ * @param dlen the length of the partial record in bytes.
+ */
+ public void setPartialLength(int dlen) {
+ this.dlen = dlen;
+ }
+
+
+ /**
+ * Set the offset of the partial record being read or written by
+ * the application, in bytes. See the Db.DB_DBT_PARTIAL flag for
+ * more information.</p>
+ *
+ * @param doff the offset of the partial record.
+ */
+ public void setPartialOffset(int doff) {
+ this.doff = doff;
+ }
+
+
+ /**
+ * Initialize the data array from a logical record number. Recno
+ * database records are ordered by integer keys starting at 1.
+ * When the Dbt.setRecordNumber method is called, the data, size
+ * and offset fields in the Dbt are implicitly set to hold a byte
+ * array representation of the integer key.</p>
+ *
+ * @param recno The <b>recno</b> parameter logical record number
+ * used to initialize the data array.
+ */
+ public void setRecordNumber(int recno) {
+ if (data == null) {
+ data = new byte[4];
+ size = 4;
+ offset = 0;
+ }
+ DbUtil.int2array(recno, data, offset);
+ }
+
+
+ /**
+ * Set the byte size of the data array.</p>
+ *
+ * @param size the size of the data array in bytes.
+ */
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+
+ /**
+ * Set the byte size of the user-specified buffer.</p> <p>
+ *
+ * Note that applications can determine the length of a record by
+ * setting the <b>ulen</b> to 0 and checking the return value
+ * found in <b>size</b> . See the Db.DB_DBT_USERMEM flag for more
+ * information.</p>
+ *
+ * @param ulen The <b>ulen</b> parameter the size of the data
+ * array in bytes.
+ */
+ public void setUserBufferLength(int ulen) {
+ this.ulen = ulen;
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setData(byte[])}
+ */
+ public void set_data(byte[] data) {
+ setData(data);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setPartialLength(int)}
+ */
+ public void set_dlen(int dlen) {
+ setPartialLength(dlen);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setPartialOffset(int)}
+ */
+ public void set_doff(int doff) {
+ setPartialOffset(doff);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setFlags(int)}
+ */
+ public void set_flags(int flags) {
+ setFlags(flags);
+ }
+
+
+ /**
+ * @throws java.io.IOException
+ * @deprecated As of Berkeley DB 4.2, replaced
+ * by {@link #setObject(Object)}
+ */
+ public void set_object(Object serialobj) throws java.io.IOException {
+
+ setObject(serialobj);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setOffset(int)}
+ */
+ public void set_offset(int offset) {
+ setOffset(offset);
+ }
+
+
+ // These are not in the original DB interface.
+ // They can be used to set the recno key for a Dbt.
+ // Note: if data is less than (offset + 4) bytes, these
+ // methods may throw an ArrayIndexException. getRecordNumber()
+ // will additionally throw a NullPointerException if data is null.
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setRecordNumber(int)}
+ */
+ public void set_recno_key_data(int recno) {
+ setRecordNumber(recno);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setSize(int)}
+ */
+ public void set_size(int size) {
+ setSize(size);
+ }
+
+
+ /**
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #setUserBufferLength(int)}
+ */
+ public void set_ulen(int ulen) {
+ setUserBufferLength(ulen);
+ }
+
+
+ // Used internally by DbMultipleRecnoIterator
//
+ /*
+ * package
+ */
+ /**
+ */
+ void set_recno_key_from_buffer(byte[] data, int offset) {
+ this.data = data;
+ this.offset = offset;
+ this.size = 4;
+ }
- // key/data
- public void set_data(byte[] data)
- {
- // internal_set_data is separated from set_data in case
- // we want to have set_data automatically set some other
- // fields (size, etc.) someday.
- //
- internal_set_data(data);
+ /**
+ * Return the data array.</p>
+ *
+ * @return the data array.</p>
+ */
+ public byte[] getData() {
+ return data;
}
- public native byte[] get_data();
- private native void internal_set_data(byte[] data);
- // These are not in the original DB interface,
- // but they can be used to get/set the offset
- // into the attached byte array.
+ /**
+ * Return the object flag value.</p>
+ *
+ * @return the object flag value.</p>
+ */
+ public int getFlags() {
+ return flags;
+ }
+
+
+ /**
+ * Return an object from the data array, encoding the object
+ * using the Java serialization API. This method uses <i>
+ * ObjectInputStream</i> internally to manipulate an array of
+ * bytes representing an object (and any connected objects). All
+ * of the rules of Java Serialization apply. In particular, the
+ * object(s) must implement either the <i>Serializable</i> or <i>
+ * Externalizable</i> interface. The serialized encoding trades
+ * efficiency for convenience.</p>
+ *
+ * @throws java.io.IOException If there is an error
+ * while de-serializing the object.
+ * @throws java.lang.ClassNotFoundException If the stream
+ * contains a class not found by the runtime while
+ * de-serializing.
+ * @return an object from the
+ * data array, expecting that data to be a serialized object.
+ * </p>
+ */
+ public Object getObject() throws java.io.IOException, java.lang.ClassNotFoundException {
+
+ ByteArrayInputStream bytestream = new ByteArrayInputStream(get_data());
+ ObjectInputStream ois = new ObjectInputStream(bytestream);
+ Object serialobj = ois.readObject();
+ ois.close();
+ bytestream.close();
+ return (serialobj);
+ }
+
+
+ /**
+ * Return the byte offset into the data array.</p>
+ *
+ * @return the byte offset into the data array.</p>
+ */
+ public int getOffset() {
+ return offset;
+ }
+
+
+ /**
+ * Return the length of the partial record, in bytes.</p>
+ *
+ * @return the length of the partial record, in bytes.</p>
+ */
+ public int getPartialLength() {
+ return dlen;
+ }
+
+
+ /**
+ * Return the offset of the partial record, in bytes.</p>
+ *
+ * @return the offset of the partial record, in bytes.</p>
+ */
+ public int getPartialOffset() {
+ return doff;
+ }
+
+
+ /**
+ * Return an object from the data array, expecting that data to
+ * be a logical record number.</p>
+ *
+ * @return an object from the data array, expecting that data
+ * to be a logical record number.</p>
+ */
+ public int getRecordNumber() {
+ return (DbUtil.array2int(data, offset));
+ }
+
+
+ /**
+ * Return the data array size.</p>
+ *
+ * @return the data array size.</p>
+ */
+ public int getSize() {
+
+ return size;
+ }
+
+
+ /**
+ * Return the length in bytes of the user-specified buffer.</p>
+ *
+ * @return the length in bytes of the user-specified buffer.
+ * </p>
+ */
+ public int getUserBufferLength() {
+ return ulen;
+ }
+
+
+ // get/set methods
//
- public native void set_offset(int off);
- public native int get_offset();
- // key/data length
- public native /*u_int32_t*/ int get_size();
- public native void set_size(/*u_int32_t*/ int size);
+ // key/data
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getData()}
+ */
+ public byte[] get_data() {
+ return getData();
+ }
- // RO: length of user buffer.
- public native /*u_int32_t*/ int get_ulen();
- public native void set_ulen(/*u_int32_t*/ int ulen);
// RO: get/put record length.
- public native /*u_int32_t*/ int get_dlen();
- public native void set_dlen(/*u_int32_t*/ int dlen);
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getPartialLength()}
+ */
+ public int get_dlen() {
+ return getPartialLength();
+ }
+
// RO: get/put record offset.
- public native /*u_int32_t*/ int get_doff();
- public native void set_doff(/*u_int32_t*/ int doff);
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getPartialOffset()}
+ */
+ public int get_doff() {
+ return getPartialOffset();
+ }
+
// flags
- public native /*u_int32_t*/ int get_flags();
- public native void set_flags(/*u_int32_t*/ int flags);
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getFlags()}
+ */
+ public int get_flags() {
+ return getFlags();
+ }
- // These are not in the original DB interface.
- // They can be used to set the recno key for a Dbt.
- // Note: you must set the data field to an array of
- // at least four bytes before calling either of these.
- //
- public native void set_recno_key_data(int recno);
- public native int get_recno_key_data();
- public Dbt(byte[] data)
- {
- init();
- internal_set_data(data);
- if (data != null)
- set_size(data.length);
+ // Helper methods to get/set a Dbt from a serializable object.
+ /**
+ * @return Description of the
+ * Return Value
+ * @throws java.io.IOException
+ * @throws java.lang.ClassNotFoundException
+ * @deprecated As of Berkeley DB
+ * 4.2, replaced by {@link #getObject()}
+ */
+ public Object get_object() throws java.io.IOException, java.lang.ClassNotFoundException {
+
+ return getObject();
}
- public Dbt(byte[] data, int off, int len)
- {
- this(data);
- set_ulen(len);
- set_offset(off);
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getOffset()}
+ */
+ public int get_offset() {
+ return getOffset();
}
- public Dbt()
- {
- init();
+
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getRecordNumber()}
+ */
+ public int get_recno_key_data() {
+ return getRecordNumber();
}
- // private methods
- //
- private native void init();
- // private data
- //
- private long private_dbobj_ = 0;
+ // key/data length
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getSize()}
+ */
+ public int get_size() {
+ return getSize();
+ }
+
- static {
- Db.load_db();
+ // RO: length of user buffer.
+ /**
+ * @return Description of the Return Value
+ * @deprecated As of Berkeley DB 4.2, replaced by {@link
+ * #getUserBufferLength()}
+ */
+ public int get_ulen() {
+ return getUserBufferLength();
}
}
-
// end of Dbt.java
diff --git a/db/java/src/com/sleepycat/db/db_java.java b/db/java/src/com/sleepycat/db/db_java.java
new file mode 100644
index 000000000..1b390ef97
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/db_java.java
@@ -0,0 +1,34 @@
+package com.sleepycat.db;
+
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+ class db_java {
+ public static void DbEnv_lock_vec(DbEnv dbenv, int locker, int flags, DbLockRequest[] list, int offset, int nlist) throws DbException {
+ db_javaJNI.DbEnv_lock_vec(DbEnv.getCPtr(dbenv), locker, flags, list, offset, nlist);
+ }
+
+ static Object initDbEnvRef0(DbEnv self, Object handle) {
+ return db_javaJNI.initDbEnvRef0(DbEnv.getCPtr(self), handle);
+ }
+
+ static Object initDbRef0(Db self, Object handle) {
+ return db_javaJNI.initDbRef0(Db.getCPtr(self), handle);
+ }
+
+ static void deleteRef0(Object ref) {
+ db_javaJNI.deleteRef0(ref);
+ }
+
+ static DbEnv getDbEnv0(Db self) {
+ long cPtr = db_javaJNI.getDbEnv0(Db.getCPtr(self));
+ return (cPtr == 0) ? null : new DbEnv(cPtr, false);
+ }
+
+}
diff --git a/db/java/src/com/sleepycat/db/db_javaJNI.java b/db/java/src/com/sleepycat/db/db_javaJNI.java
new file mode 100644
index 000000000..ecc0055db
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/db_javaJNI.java
@@ -0,0 +1,230 @@
+package com.sleepycat.db;
+
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version: 1.3.19
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+class db_javaJNI {
+
+ static {
+ // An alternate library name can be specified via a property.
+ String libname;
+
+ if ((libname = System.getProperty("sleepycat.db.libfile"))
+ != null)
+ System.load(libname);
+ else if ((libname = System.getProperty("sleepycat.db.libname"))
+ != null)
+ System.loadLibrary(libname);
+ else {
+ String os = System.getProperty("os.name");
+ if (os != null && os.startsWith("Windows")) {
+ // library name is e.g., "libdb_java30.dll"
+ // on Windows
+ System.loadLibrary("libdb_java" +
+ DbConstants.DB_VERSION_MAJOR +
+ DbConstants.DB_VERSION_MINOR +
+ (DbConstants.DB_DEBUG ? "d" : ""));
+ } else {
+ // library name is e.g. "libdb_java-3.0.so"
+ // on UNIX
+ System.loadLibrary("db_java-" +
+ DbConstants.DB_VERSION_MAJOR + "." +
+ DbConstants.DB_VERSION_MINOR);
+ }
+ }
+
+ initialize();
+ }
+
+ static native final void initialize();
+
+ public final static native void DbEnv_lock_vec(long jarg1, int jarg2, int jarg3, DbLockRequest[] jarg4, int jarg5, int jarg6) throws DbException;
+ final static native Object initDbEnvRef0(long jarg1, Object jarg2);
+ final static native Object initDbRef0(long jarg1, Object jarg2);
+ final static native void deleteRef0(Object jarg1);
+ final static native long getDbEnv0(long jarg1);
+ public final static native long new_Db(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_associate(long jarg1, long jarg2, long jarg3, DbSecondaryKeyCreate jarg4, int jarg5) throws DbException;
+ final static native int Db_close0(long jarg1, int jarg2);
+ public final static native long Db_cursor(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native int Db_del(long jarg1, long jarg2, Dbt jarg3, int jarg4) throws DbException;
+ public final static native void Db_err(long jarg1, int jarg2, String jarg3) ;
+ public final static native void Db_errx(long jarg1, String jarg2) ;
+ final static native int Db_get__SWIG_0(long jarg1, long jarg2, Dbt jarg3, Dbt jarg4, int jarg5);
+ public final static native boolean Db_get_byteswapped(long jarg1) throws DbException;
+ public final static native long Db_get_cachesize(long jarg1) throws DbException;
+ public final static native int Db_get_cachesize_ncache(long jarg1) throws DbException;
+ public final static native String Db_get_filename(long jarg1) throws DbException;
+ public final static native String Db_get_dbname(long jarg1) throws DbException;
+ public final static native int Db_get_encrypt_flags(long jarg1) throws DbException;
+ public final static native int Db_get_flags(long jarg1) throws DbException;
+ public final static native int Db_get_lorder(long jarg1) throws DbException;
+ public final static native long Db_get_mpf(long jarg1) throws DbException;
+ public final static native int Db_get_open_flags(long jarg1) throws DbException;
+ public final static native int Db_get_pagesize(long jarg1) throws DbException;
+ public final static native int Db_get_bt_minkey(long jarg1) throws DbException;
+ public final static native int Db_get_h_ffactor(long jarg1) throws DbException;
+ public final static native int Db_get_h_nelem(long jarg1) throws DbException;
+ public final static native int Db_get_re_delim(long jarg1) throws DbException;
+ public final static native int Db_get_re_len(long jarg1) throws DbException;
+ public final static native int Db_get_re_pad(long jarg1) throws DbException;
+ public final static native String Db_get_re_source(long jarg1) throws DbException;
+ public final static native int Db_get_q_extentsize(long jarg1) throws DbException;
+ public final static native int Db_get_flags_raw(long jarg1) throws DbException;
+ public final static native boolean Db_get_transactional(long jarg1) throws DbException;
+ public final static native int Db_get_type(long jarg1) throws DbException;
+ public final static native long Db_join(long jarg1, Dbc[] jarg2, int jarg3) throws DbException;
+ public final static native void Db_key_range(long jarg1, long jarg2, Dbt jarg3, DbKeyRange jarg4, int jarg5) throws DbException;
+ final static native void Db_open0(long jarg1, long jarg2, String jarg3, String jarg4, int jarg5, int jarg6, int jarg7);
+ public final static native int Db_get__SWIG_1(long jarg1, long jarg2, Dbt jarg3, Dbt jarg4, Dbt jarg5, int jarg6) throws DbException;
+ public final static native int Db_put(long jarg1, long jarg2, Dbt jarg3, Dbt jarg4, int jarg5) throws DbException;
+ final static native void Db_remove0(long jarg1, String jarg2, String jarg3, int jarg4);
+ final static native void Db_rename0(long jarg1, String jarg2, String jarg3, String jarg4, int jarg5);
+ public final static native void Db_set_append_recno(long jarg1, DbAppendRecno jarg2) throws DbException;
+ public final static native void Db_set_bt_compare(long jarg1, DbBtreeCompare jarg2) throws DbException;
+ public final static native void Db_set_bt_maxkey(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_bt_minkey(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_bt_prefix(long jarg1, DbBtreePrefix jarg2) throws DbException;
+ public final static native void Db_set_cachesize(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native void Db_set_dup_compare(long jarg1, DbDupCompare jarg2) throws DbException;
+ public final static native void Db_set_encrypt(long jarg1, String jarg2, int jarg3) throws DbException;
+ public final static native void Db_setFeedbackHandler(long jarg1, DbFeedbackHandler jarg2) throws DbException;
+ public final static native void Db_set_flags(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_h_ffactor(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_h_hash(long jarg1, DbHash jarg2) throws DbException;
+ public final static native void Db_set_h_nelem(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_lorder(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_pagesize(long jarg1, long jarg2) throws DbException;
+ public final static native void Db_set_re_delim(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_re_len(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_re_pad(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_set_re_source(long jarg1, String jarg2) throws DbException;
+ public final static native void Db_set_q_extentsize(long jarg1, int jarg2) throws DbException;
+ public final static native Object Db_stat(long jarg1, int jarg2) throws DbException;
+ public final static native void Db_sync(long jarg1, int jarg2) throws DbException;
+ public final static native int Db_truncate(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native void Db_upgrade(long jarg1, String jarg2, int jarg3) throws DbException;
+ final static native void Db_verify0(long jarg1, String jarg2, String jarg3, java.io.OutputStream jarg4, int jarg5);
+ final static native void Dbc_close0(long jarg1);
+ public final static native int Dbc_count(long jarg1, int jarg2) throws DbException;
+ public final static native int Dbc_del(long jarg1, int jarg2) throws DbException;
+ public final static native long Dbc_dup(long jarg1, int jarg2) throws DbException;
+ final static native int Dbc_get__SWIG_0(long jarg1, Dbt jarg2, Dbt jarg3, int jarg4);
+ public final static native int Dbc_get__SWIG_1(long jarg1, Dbt jarg2, Dbt jarg3, Dbt jarg4, int jarg5) throws DbException;
+ public final static native int Dbc_put(long jarg1, Dbt jarg2, Dbt jarg3, int jarg4) throws DbException;
+ public final static native long new_DbEnv(int jarg1) throws DbException;
+ final static native void DbEnv_close0(long jarg1, int jarg2);
+ public final static native void DbEnv_dbremove(long jarg1, long jarg2, String jarg3, String jarg4, int jarg5) throws DbException;
+ public final static native void DbEnv_dbrename(long jarg1, long jarg2, String jarg3, String jarg4, String jarg5, int jarg6) throws DbException;
+ public final static native void DbEnv_err(long jarg1, int jarg2, String jarg3) ;
+ public final static native void DbEnv_errx(long jarg1, String jarg2) ;
+ public final static native String[] DbEnv_get_data_dirs(long jarg1) throws DbException;
+ public final static native int DbEnv_get_encrypt_flags(long jarg1) throws DbException;
+ public final static native int DbEnv_get_flags(long jarg1) throws DbException;
+ public final static native String DbEnv_get_home(long jarg1) throws DbException;
+ public final static native int DbEnv_get_open_flags(long jarg1) throws DbException;
+ public final static native long DbEnv_get_shm_key(long jarg1) throws DbException;
+ public final static native int DbEnv_get_tas_spins(long jarg1) throws DbException;
+ public final static native String DbEnv_get_tmp_dir(long jarg1) throws DbException;
+ public final static native boolean DbEnv_get_verbose(long jarg1, int jarg2) throws DbException;
+ final static native void DbEnv_open0(long jarg1, String jarg2, int jarg3, int jarg4);
+ final static native void DbEnv_remove0(long jarg1, String jarg2, int jarg3);
+ public final static native void DbEnv_set_cachesize(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native void DbEnv_set_data_dir(long jarg1, String jarg2) throws DbException;
+ public final static native void DbEnv_set_encrypt(long jarg1, String jarg2, int jarg3) throws DbException;
+ public final static native void DbEnv_setErrorHandler(long jarg1, DbErrorHandler jarg2) throws DbException;
+ public final static native void DbEnv_set_flags(long jarg1, int jarg2, boolean jarg3) throws DbException;
+ public final static native void DbEnv_setFeedbackHandler(long jarg1, DbEnvFeedbackHandler jarg2) throws DbException;
+ public final static native void DbEnv_set_mp_mmapsize(long jarg1, long jarg2) throws DbException;
+ public final static native void DbEnv_setPanicHandler(long jarg1, DbPanicHandler jarg2) throws DbException;
+ public final static native void DbEnv_set_rpc_server(long jarg1, DbClient jarg2, String jarg3, long jarg4, long jarg5, int jarg6) throws DbException;
+ public final static native void DbEnv_set_shm_key(long jarg1, long jarg2) throws DbException;
+ public final static native void DbEnv_set_tas_spins(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_timeout(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native void DbEnv_set_tmp_dir(long jarg1, String jarg2) throws DbException;
+ public final static native void DbEnv_set_tx_max(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_app_dispatch(long jarg1, DbAppDispatch jarg2) throws DbException;
+ final static native void DbEnv_set_tx_timestamp0(long jarg1, long jarg2);
+ public final static native void DbEnv_set_verbose(long jarg1, int jarg2, boolean jarg3) throws DbException;
+ public final static native byte[][] DbEnv_get_lk_conflicts(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lk_detect(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lk_max_locks(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lk_max_lockers(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lk_max_objects(long jarg1) throws DbException;
+ public final static native int DbEnv_lock_detect(long jarg1, int jarg2, int jarg3) throws DbException;
+ public final static native long DbEnv_lock_get(long jarg1, int jarg2, int jarg3, Dbt jarg4, int jarg5) throws DbException;
+ public final static native int DbEnv_lock_id(long jarg1) throws DbException;
+ public final static native void DbEnv_lock_id_free(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_lock_put(long jarg1, long jarg2) throws DbException;
+ public final static native DbLockStat DbEnv_lock_stat(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lk_conflicts(long jarg1, byte[][] jarg2) throws DbException;
+ public final static native void DbEnv_set_lk_detect(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lk_max_lockers(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lk_max_locks(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lk_max_objects(long jarg1, int jarg2) throws DbException;
+ public final static native int DbEnv_get_lg_bsize(long jarg1) throws DbException;
+ public final static native String DbEnv_get_lg_dir(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lg_max(long jarg1) throws DbException;
+ public final static native int DbEnv_get_lg_regionmax(long jarg1) throws DbException;
+ public final static native String[] DbEnv_log_archive(long jarg1, int jarg2) throws DbException;
+ public final static native int DbEnv_log_compare(long jarg1, long jarg2) ;
+ public final static native long DbEnv_log_cursor(long jarg1, int jarg2) throws DbException;
+ public final static native String DbEnv_log_file(long jarg1, long jarg2) throws DbException;
+ public final static native void DbEnv_log_flush(long jarg1, long jarg2) throws DbException;
+ public final static native void DbEnv_log_put(long jarg1, long jarg2, Dbt jarg3, int jarg4) throws DbException;
+ public final static native DbLogStat DbEnv_log_stat(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lg_bsize(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lg_dir(long jarg1, String jarg2) throws DbException;
+ public final static native void DbEnv_set_lg_max(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_lg_regionmax(long jarg1, int jarg2) throws DbException;
+ public final static native long DbEnv_get_cachesize(long jarg1) throws DbException;
+ public final static native int DbEnv_get_cachesize_ncache(long jarg1) throws DbException;
+ public final static native long DbEnv_get_mp_mmapsize(long jarg1) throws DbException;
+ public final static native DbMpoolStat DbEnv_memp_stat(long jarg1, int jarg2) throws DbException;
+ public final static native DbMpoolFStat[] DbEnv_memp_fstat(long jarg1, int jarg2) throws DbException;
+ public final static native int DbEnv_memp_trickle(long jarg1, int jarg2) throws DbException;
+ public final static native int DbEnv_get_tx_max(long jarg1) throws DbException;
+ public final static native long DbEnv_get_tx_timestamp(long jarg1) throws DbException;
+ public final static native long DbEnv_get_timeout(long jarg1, int jarg2) throws DbException;
+ public final static native long DbEnv_txn_begin(long jarg1, long jarg2, int jarg3) throws DbException;
+ public final static native void DbEnv_txn_checkpoint(long jarg1, int jarg2, int jarg3, int jarg4) throws DbException;
+ public final static native DbPreplist[] DbEnv_txn_recover(long jarg1, int jarg2, int jarg3) throws DbException;
+ public final static native DbTxnStat DbEnv_txn_stat(long jarg1, int jarg2) throws DbException;
+ public final static native long DbEnv_get_rep_limit(long jarg1) throws DbException;
+ public final static native int DbEnv_rep_elect(long jarg1, int jarg2, int jarg3, int jarg4) throws DbException;
+ public final static native int DbEnv_rep_process_message(long jarg1, Dbt jarg2, Dbt jarg3, DbEnv.RepProcessMessage jarg4, long jarg5) throws DbException;
+ public final static native void DbEnv_rep_start(long jarg1, Dbt jarg2, int jarg3) throws DbException;
+ public final static native DbRepStat DbEnv_rep_stat(long jarg1, int jarg2) throws DbException;
+ public final static native void DbEnv_set_rep_limit(long jarg1, long jarg2) throws DbException;
+ public final static native void DbEnv_set_rep_transport(long jarg1, int jarg2, DbRepTransport jarg3) throws DbException;
+ public final static native String DbEnv_strerror(int jarg1) ;
+ public final static native int DbEnv_get_version_major() ;
+ public final static native int DbEnv_get_version_minor() ;
+ public final static native int DbEnv_get_version_patch() ;
+ public final static native String DbEnv_get_version_string() ;
+ final static native void DbTxn_abort0(long jarg1);
+ final static native void DbTxn_commit0(long jarg1, int jarg2);
+ final static native void DbTxn_discard0(long jarg1, int jarg2);
+ public final static native int DbTxn_id(long jarg1) throws DbException;
+ public final static native void DbTxn_prepare(long jarg1, byte[] jarg2) throws DbException;
+ public final static native void DbTxn_set_timeout(long jarg1, long jarg2, int jarg3) throws DbException;
+ final static native void DbLogc_close0(long jarg1, int jarg2);
+ public final static native int DbLogc_get(long jarg1, long jarg2, Dbt jarg3, int jarg4) throws DbException;
+ final static native void delete_DbLock(long jarg1);
+ public final static native long new_DbLsn(int jarg1, int jarg2) throws DbException;
+ final static native void delete_DbLsn(long jarg1);
+ public final static native int DbLsn_get_file(long jarg1) throws DbException;
+ public final static native int DbLsn_get_offset(long jarg1) throws DbException;
+ public final static native int DbMpoolFile_get_priority(long jarg1) throws DbException;
+ public final static native void DbMpoolFile_set_priority(long jarg1, int jarg2) throws DbException;
+ public final static native int DbMpoolFile_get_flags(long jarg1) throws DbException;
+ public final static native void DbMpoolFile_set_flags(long jarg1, int jarg2, boolean jarg3) throws DbException;
+ public final static native long DbMpoolFile_get_maxsize(long jarg1) throws DbException;
+ public final static native void DbMpoolFile_set_maxsize(long jarg1, long jarg2) throws DbException;
+}
diff --git a/db/java/src/com/sleepycat/db/debug/DbConstants.java b/db/java/src/com/sleepycat/db/debug/DbConstants.java
new file mode 100644
index 000000000..87a08232d
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/debug/DbConstants.java
@@ -0,0 +1,160 @@
+/* DO NOT EDIT: automatically built by dist/s_java_const. */
+
+package com.sleepycat.db;
+
+class DbConstants
+{
+ static final int DB_AFTER = 1;
+ static final int DB_AGGRESSIVE = 0x0000001;
+ static final int DB_APPEND = 2;
+ static final int DB_ARCH_ABS = 0x001;
+ static final int DB_ARCH_DATA = 0x002;
+ static final int DB_ARCH_LOG = 0x004;
+ static final int DB_ARCH_REMOVE = 0x008;
+ static final int DB_AUTO_COMMIT = 0x1000000;
+ static final int DB_BEFORE = 3;
+ static final int DB_CACHED_COUNTS = 4;
+ static final int DB_CDB_ALLDB = 0x0001000;
+ static final int DB_CHKSUM = 0x0000001;
+ static final int DB_CONSUME = 5;
+ static final int DB_CONSUME_WAIT = 6;
+ static final int DB_CREATE = 0x0000001;
+ static final int DB_CURRENT = 7;
+ static final int DB_CXX_NO_EXCEPTIONS = 0x0000002;
+ static final int DB_DBT_MALLOC = 0x004;
+ static final int DB_DBT_PARTIAL = 0x008;
+ static final int DB_DBT_REALLOC = 0x010;
+ static final int DB_DBT_USERMEM = 0x020;
+ static final int DB_DIRECT_DB = 0x0002000;
+ static final int DB_DIRECT_LOG = 0x0004000;
+ static final int DB_DIRTY_READ = 0x2000000;
+ static final int DB_DUP = 0x0000002;
+ static final int DB_DUPSORT = 0x0000004;
+ static final int DB_EID_BROADCAST = -1;
+ static final int DB_EID_INVALID = -2;
+ static final int DB_ENCRYPT = 0x0000008;
+ static final int DB_ENCRYPT_AES = 0x0000001;
+ static final int DB_EXCL = 0x0001000;
+ static final int DB_FAST_STAT = 8;
+ static final int DB_FIRST = 9;
+ static final int DB_FLUSH = 0x001;
+ static final int DB_FORCE = 0x0000004;
+ static final int DB_GET_BOTH = 10;
+ static final int DB_GET_BOTH_RANGE = 12;
+ static final int DB_GET_RECNO = 13;
+ static final int DB_INIT_CDB = 0x0001000;
+ static final int DB_INIT_LOCK = 0x0002000;
+ static final int DB_INIT_LOG = 0x0004000;
+ static final int DB_INIT_MPOOL = 0x0008000;
+ static final int DB_INIT_REP = 0x0010000;
+ static final int DB_INIT_TXN = 0x0020000;
+ static final int DB_JOINENV = 0x0040000;
+ static final int DB_JOIN_ITEM = 14;
+ static final int DB_JOIN_NOSORT = 0x0000001;
+ static final int DB_KEYFIRST = 15;
+ static final int DB_KEYLAST = 16;
+ static final int DB_LAST = 17;
+ static final int DB_LOCKDOWN = 0x0080000;
+ static final int DB_LOCK_DEFAULT = 1;
+ static final int DB_LOCK_EXPIRE = 2;
+ static final int DB_LOCK_GET = 1;
+ static final int DB_LOCK_GET_TIMEOUT = 2;
+ static final int DB_LOCK_IREAD = 5;
+ static final int DB_LOCK_IWR = 6;
+ static final int DB_LOCK_IWRITE = 4;
+ static final int DB_LOCK_MAXLOCKS = 3;
+ static final int DB_LOCK_MINLOCKS = 4;
+ static final int DB_LOCK_MINWRITE = 5;
+ static final int DB_LOCK_NOWAIT = 0x001;
+ static final int DB_LOCK_OLDEST = 6;
+ static final int DB_LOCK_PUT = 4;
+ static final int DB_LOCK_PUT_ALL = 5;
+ static final int DB_LOCK_PUT_OBJ = 6;
+ static final int DB_LOCK_RANDOM = 7;
+ static final int DB_LOCK_READ = 1;
+ static final int DB_LOCK_TIMEOUT = 8;
+ static final int DB_LOCK_WRITE = 2;
+ static final int DB_LOCK_YOUNGEST = 8;
+ static final int DB_LOG_AUTOREMOVE = 0x0008000;
+ static final int DB_MPOOL_NOFILE = 0x001;
+ static final int DB_MULTIPLE = 0x04000000;
+ static final int DB_MULTIPLE_KEY = 0x08000000;
+ static final int DB_NEXT = 18;
+ static final int DB_NEXT_DUP = 19;
+ static final int DB_NEXT_NODUP = 20;
+ static final int DB_NODUPDATA = 21;
+ static final int DB_NOLOCKING = 0x0010000;
+ static final int DB_NOMMAP = 0x0000008;
+ static final int DB_NOORDERCHK = 0x0000002;
+ static final int DB_NOOVERWRITE = 22;
+ static final int DB_NOPANIC = 0x0020000;
+ static final int DB_NOSYNC = 23;
+ static final int DB_ORDERCHKONLY = 0x0000004;
+ static final int DB_OVERWRITE = 0x0040000;
+ static final int DB_PANIC_ENVIRONMENT = 0x0080000;
+ static final int DB_POSITION = 24;
+ static final int DB_PREV = 25;
+ static final int DB_PREV_NODUP = 26;
+ static final int DB_PRINTABLE = 0x0000020;
+ static final int DB_PRIORITY_DEFAULT = 3;
+ static final int DB_PRIORITY_HIGH = 4;
+ static final int DB_PRIORITY_LOW = 2;
+ static final int DB_PRIORITY_VERY_HIGH = 5;
+ static final int DB_PRIORITY_VERY_LOW = 1;
+ static final int DB_PRIVATE = 0x0100000;
+ static final int DB_RDONLY = 0x0000010;
+ static final int DB_RECNUM = 0x0000010;
+ static final int DB_RECORDCOUNT = 27;
+ static final int DB_RECOVER = 0x0000020;
+ static final int DB_RECOVER_FATAL = 0x0200000;
+ static final int DB_REGION_INIT = 0x0100000;
+ static final int DB_RENUMBER = 0x0000020;
+ static final int DB_REP_CLIENT = 0x001;
+ static final int DB_REP_ISPERM = -30984;
+ static final int DB_REP_LOGSONLY = 0x002;
+ static final int DB_REP_MASTER = 0x004;
+ static final int DB_REP_NOBUFFER = 0x0000001;
+ static final int DB_REP_NOTPERM = -30981;
+ static final int DB_REP_PERMANENT = 0x0000002;
+ static final int DB_REP_UNAVAIL = -30979;
+ static final int DB_REVSPLITOFF = 0x0000040;
+ static final int DB_RMW = 0x10000000;
+ static final int DB_RPCCLIENT = 0x0000001;
+ static final int DB_SALVAGE = 0x0000040;
+ static final int DB_SET = 28;
+ static final int DB_SET_LOCK_TIMEOUT = 29;
+ static final int DB_SET_RANGE = 30;
+ static final int DB_SET_RECNO = 31;
+ static final int DB_SET_TXN_TIMEOUT = 33;
+ static final int DB_SNAPSHOT = 0x0000080;
+ static final int DB_STAT_CLEAR = 0x0000001;
+ static final int DB_SYSTEM_MEM = 0x0400000;
+ static final int DB_THREAD = 0x0000040;
+ static final int DB_TIME_NOTGRANTED = 0x0200000;
+ static final int DB_TRUNCATE = 0x0000080;
+ static final int DB_TXN_NOSYNC = 0x0000100;
+ static final int DB_TXN_NOT_DURABLE = 0x0000200;
+ static final int DB_TXN_NOWAIT = 0x0001000;
+ static final int DB_TXN_SYNC = 0x0002000;
+ static final int DB_TXN_WRITE_NOSYNC = 0x0400000;
+ static final int DB_UPGRADE = 0x0000001;
+ static final int DB_USE_ENVIRON = 0x0000400;
+ static final int DB_USE_ENVIRON_ROOT = 0x0000800;
+ static final int DB_VERB_CHKPOINT = 0x0001;
+ static final int DB_VERB_DEADLOCK = 0x0002;
+ static final int DB_VERB_RECOVERY = 0x0004;
+ static final int DB_VERB_REPLICATION = 0x0008;
+ static final int DB_VERB_WAITSFOR = 0x0010;
+ static final int DB_VERIFY = 0x0000002;
+ static final int DB_VERSION_MAJOR = 4;
+ static final int DB_VERSION_MINOR = 2;
+ static final int DB_VERSION_PATCH = 52;
+ static final int DB_WRITECURSOR = 35;
+ static final int DB_XA_CREATE = 0x0000002;
+ static final int DB_XIDDATASIZE = 128;
+ static final int DB_YIELDCPU = 0x0800000;
+
+ static final boolean DB_DEBUG = true;
+}
+
+// end of DbConstants.java
diff --git a/db/java/src/com/sleepycat/db/package.html b/db/java/src/com/sleepycat/db/package.html
new file mode 100644
index 000000000..73f58df1d
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/package.html
@@ -0,0 +1,7 @@
+<!-- $Id: package.html,v 1.4 2003/10/28 12:49:47 gburd Exp $ -->
+<html>
+<body>
+<p>Java API programming notes<br>
+<a href="{@docRoot}../ref/java/program.html" target="_top">[reference guide]</a>
+</body>
+</html>
diff --git a/db/java/src/com/sleepycat/db/release/DbConstants.java b/db/java/src/com/sleepycat/db/release/DbConstants.java
new file mode 100644
index 000000000..b4b716b2d
--- /dev/null
+++ b/db/java/src/com/sleepycat/db/release/DbConstants.java
@@ -0,0 +1,160 @@
+/* DO NOT EDIT: automatically built by dist/s_java_const. */
+
+package com.sleepycat.db;
+
+class DbConstants
+{
+ static final int DB_AFTER = 1;
+ static final int DB_AGGRESSIVE = 0x0000001;
+ static final int DB_APPEND = 2;
+ static final int DB_ARCH_ABS = 0x001;
+ static final int DB_ARCH_DATA = 0x002;
+ static final int DB_ARCH_LOG = 0x004;
+ static final int DB_ARCH_REMOVE = 0x008;
+ static final int DB_AUTO_COMMIT = 0x1000000;
+ static final int DB_BEFORE = 3;
+ static final int DB_CACHED_COUNTS = 4;
+ static final int DB_CDB_ALLDB = 0x0001000;
+ static final int DB_CHKSUM = 0x0000001;
+ static final int DB_CONSUME = 5;
+ static final int DB_CONSUME_WAIT = 6;
+ static final int DB_CREATE = 0x0000001;
+ static final int DB_CURRENT = 7;
+ static final int DB_CXX_NO_EXCEPTIONS = 0x0000002;
+ static final int DB_DBT_MALLOC = 0x004;
+ static final int DB_DBT_PARTIAL = 0x008;
+ static final int DB_DBT_REALLOC = 0x010;
+ static final int DB_DBT_USERMEM = 0x020;
+ static final int DB_DIRECT_DB = 0x0002000;
+ static final int DB_DIRECT_LOG = 0x0004000;
+ static final int DB_DIRTY_READ = 0x2000000;
+ static final int DB_DUP = 0x0000002;
+ static final int DB_DUPSORT = 0x0000004;
+ static final int DB_EID_BROADCAST = -1;
+ static final int DB_EID_INVALID = -2;
+ static final int DB_ENCRYPT = 0x0000008;
+ static final int DB_ENCRYPT_AES = 0x0000001;
+ static final int DB_EXCL = 0x0001000;
+ static final int DB_FAST_STAT = 8;
+ static final int DB_FIRST = 9;
+ static final int DB_FLUSH = 0x001;
+ static final int DB_FORCE = 0x0000004;
+ static final int DB_GET_BOTH = 10;
+ static final int DB_GET_BOTH_RANGE = 12;
+ static final int DB_GET_RECNO = 13;
+ static final int DB_INIT_CDB = 0x0001000;
+ static final int DB_INIT_LOCK = 0x0002000;
+ static final int DB_INIT_LOG = 0x0004000;
+ static final int DB_INIT_MPOOL = 0x0008000;
+ static final int DB_INIT_REP = 0x0010000;
+ static final int DB_INIT_TXN = 0x0020000;
+ static final int DB_JOINENV = 0x0040000;
+ static final int DB_JOIN_ITEM = 14;
+ static final int DB_JOIN_NOSORT = 0x0000001;
+ static final int DB_KEYFIRST = 15;
+ static final int DB_KEYLAST = 16;
+ static final int DB_LAST = 17;
+ static final int DB_LOCKDOWN = 0x0080000;
+ static final int DB_LOCK_DEFAULT = 1;
+ static final int DB_LOCK_EXPIRE = 2;
+ static final int DB_LOCK_GET = 1;
+ static final int DB_LOCK_GET_TIMEOUT = 2;
+ static final int DB_LOCK_IREAD = 5;
+ static final int DB_LOCK_IWR = 6;
+ static final int DB_LOCK_IWRITE = 4;
+ static final int DB_LOCK_MAXLOCKS = 3;
+ static final int DB_LOCK_MINLOCKS = 4;
+ static final int DB_LOCK_MINWRITE = 5;
+ static final int DB_LOCK_NOWAIT = 0x001;
+ static final int DB_LOCK_OLDEST = 6;
+ static final int DB_LOCK_PUT = 4;
+ static final int DB_LOCK_PUT_ALL = 5;
+ static final int DB_LOCK_PUT_OBJ = 6;
+ static final int DB_LOCK_RANDOM = 7;
+ static final int DB_LOCK_READ = 1;
+ static final int DB_LOCK_TIMEOUT = 8;
+ static final int DB_LOCK_WRITE = 2;
+ static final int DB_LOCK_YOUNGEST = 8;
+ static final int DB_LOG_AUTOREMOVE = 0x0008000;
+ static final int DB_MPOOL_NOFILE = 0x001;
+ static final int DB_MULTIPLE = 0x04000000;
+ static final int DB_MULTIPLE_KEY = 0x08000000;
+ static final int DB_NEXT = 18;
+ static final int DB_NEXT_DUP = 19;
+ static final int DB_NEXT_NODUP = 20;
+ static final int DB_NODUPDATA = 21;
+ static final int DB_NOLOCKING = 0x0010000;
+ static final int DB_NOMMAP = 0x0000008;
+ static final int DB_NOORDERCHK = 0x0000002;
+ static final int DB_NOOVERWRITE = 22;
+ static final int DB_NOPANIC = 0x0020000;
+ static final int DB_NOSYNC = 23;
+ static final int DB_ORDERCHKONLY = 0x0000004;
+ static final int DB_OVERWRITE = 0x0040000;
+ static final int DB_PANIC_ENVIRONMENT = 0x0080000;
+ static final int DB_POSITION = 24;
+ static final int DB_PREV = 25;
+ static final int DB_PREV_NODUP = 26;
+ static final int DB_PRINTABLE = 0x0000020;
+ static final int DB_PRIORITY_DEFAULT = 3;
+ static final int DB_PRIORITY_HIGH = 4;
+ static final int DB_PRIORITY_LOW = 2;
+ static final int DB_PRIORITY_VERY_HIGH = 5;
+ static final int DB_PRIORITY_VERY_LOW = 1;
+ static final int DB_PRIVATE = 0x0100000;
+ static final int DB_RDONLY = 0x0000010;
+ static final int DB_RECNUM = 0x0000010;
+ static final int DB_RECORDCOUNT = 27;
+ static final int DB_RECOVER = 0x0000020;
+ static final int DB_RECOVER_FATAL = 0x0200000;
+ static final int DB_REGION_INIT = 0x0100000;
+ static final int DB_RENUMBER = 0x0000020;
+ static final int DB_REP_CLIENT = 0x001;
+ static final int DB_REP_ISPERM = -30984;
+ static final int DB_REP_LOGSONLY = 0x002;
+ static final int DB_REP_MASTER = 0x004;
+ static final int DB_REP_NOBUFFER = 0x0000001;
+ static final int DB_REP_NOTPERM = -30981;
+ static final int DB_REP_PERMANENT = 0x0000002;
+ static final int DB_REP_UNAVAIL = -30979;
+ static final int DB_REVSPLITOFF = 0x0000040;
+ static final int DB_RMW = 0x10000000;
+ static final int DB_RPCCLIENT = 0x0000001;
+ static final int DB_SALVAGE = 0x0000040;
+ static final int DB_SET = 28;
+ static final int DB_SET_LOCK_TIMEOUT = 29;
+ static final int DB_SET_RANGE = 30;
+ static final int DB_SET_RECNO = 31;
+ static final int DB_SET_TXN_TIMEOUT = 33;
+ static final int DB_SNAPSHOT = 0x0000080;
+ static final int DB_STAT_CLEAR = 0x0000001;
+ static final int DB_SYSTEM_MEM = 0x0400000;
+ static final int DB_THREAD = 0x0000040;
+ static final int DB_TIME_NOTGRANTED = 0x0200000;
+ static final int DB_TRUNCATE = 0x0000080;
+ static final int DB_TXN_NOSYNC = 0x0000100;
+ static final int DB_TXN_NOT_DURABLE = 0x0000200;
+ static final int DB_TXN_NOWAIT = 0x0001000;
+ static final int DB_TXN_SYNC = 0x0002000;
+ static final int DB_TXN_WRITE_NOSYNC = 0x0400000;
+ static final int DB_UPGRADE = 0x0000001;
+ static final int DB_USE_ENVIRON = 0x0000400;
+ static final int DB_USE_ENVIRON_ROOT = 0x0000800;
+ static final int DB_VERB_CHKPOINT = 0x0001;
+ static final int DB_VERB_DEADLOCK = 0x0002;
+ static final int DB_VERB_RECOVERY = 0x0004;
+ static final int DB_VERB_REPLICATION = 0x0008;
+ static final int DB_VERB_WAITSFOR = 0x0010;
+ static final int DB_VERIFY = 0x0000002;
+ static final int DB_VERSION_MAJOR = 4;
+ static final int DB_VERSION_MINOR = 2;
+ static final int DB_VERSION_PATCH = 52;
+ static final int DB_WRITECURSOR = 35;
+ static final int DB_XA_CREATE = 0x0000002;
+ static final int DB_XIDDATASIZE = 128;
+ static final int DB_YIELDCPU = 0x0800000;
+
+ static final boolean DB_DEBUG = false;
+}
+
+// end of DbConstants.java
diff --git a/db/java/src/com/sleepycat/db/xa/DbXAResource.java b/db/java/src/com/sleepycat/db/xa/DbXAResource.java
deleted file mode 100644
index a1eaf50c4..000000000
--- a/db/java/src/com/sleepycat/db/xa/DbXAResource.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: DbXAResource.java,v 1.2 2002/08/09 01:54:57 bostic Exp
- */
-
-package com.sleepycat.db.xa;
-
-import com.sleepycat.db.Db;
-import com.sleepycat.db.DbEnv;
-import com.sleepycat.db.DbTxn;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.Xid;
-
-public class DbXAResource implements XAResource
-{
- public DbXAResource(String home, int rmid, int flags)
- throws XAException
- {
- this.home = home;
- this.rmid = rmid;
-
- // We force single-threading for calls to _init/_close.
- // This makes our internal code much easier, and
- // should not be a performance burden.
- synchronized (DbXAResource.class) {
- _init(home, rmid, flags);
- }
- }
-
- //
- // Alternate constructor for convenience.
- // Uses an rmid that is unique within this JVM,
- // numbered started at 0.
- //
- public DbXAResource(String home)
- throws XAException
- {
- this(home, get_unique_rmid(), 0);
- }
-
- private native void _init(String home, int rmid, int flags);
-
- public void close(int flags)
- throws XAException
- {
- // We force single-threading for calls to _init/_close.
- // This makes our internal code much easier, and
- // should not be a performance burden.
- synchronized (DbXAResource.class) {
- _close(home, rmid, flags);
- }
- }
-
- private native void _close(String home, int rmid, int flags);
-
- public void commit(Xid xid, boolean onePhase)
- throws XAException
- {
- _commit(xid, rmid, onePhase);
- }
-
- private native void _commit(Xid xid, int rmid, boolean onePhase);
-
- public void end(Xid xid, int flags)
- throws XAException
- {
- _end(xid, rmid, flags);
- }
-
- private native void _end(Xid xid, int rmid, int flags);
-
- public void forget(Xid xid)
- throws XAException
- {
- _forget(xid, rmid);
- }
-
- private native void _forget(Xid xid, int rmid);
-
- public int getTransactionTimeout()
- throws XAException
- {
- return transactionTimeout;
- }
-
- public boolean isSameRM(XAResource xares)
- throws XAException
- {
- if (!(xares instanceof DbXAResource))
- return false;
- return (this.rmid == ((DbXAResource)xares).rmid);
- }
-
- public int prepare(Xid xid)
- throws XAException
- {
- return _prepare(xid, rmid);
- }
-
- private native int _prepare(Xid xid, int rmid);
-
- public Xid [] recover(int flag)
- throws XAException
- {
- return _recover(rmid, flag);
- }
-
- private native Xid[] _recover(int rmid, int flags);
-
- public void rollback(Xid xid)
- throws XAException
- {
- _rollback(xid, rmid);
- System.err.println("DbXAResource.rollback returned");
- }
-
- private native void _rollback(Xid xid, int rmid);
-
- public boolean setTransactionTimeout(int seconds)
- throws XAException
- {
- // XXX we are not using the transaction timeout.
- transactionTimeout = seconds;
- return true;
- }
-
- public void start(Xid xid, int flags)
- throws XAException
- {
- _start(xid, rmid, flags);
- }
-
- private native void _start(Xid xid, int rmid, int flags);
-
- private static synchronized int get_unique_rmid()
- {
- return unique_rmid++;
- }
-
- public interface DbAttach
- {
- public DbEnv get_env();
- public DbTxn get_txn();
- }
-
- protected static class DbAttachImpl implements DbAttach
- {
- private DbEnv env;
- private DbTxn txn;
-
- DbAttachImpl(DbEnv env, DbTxn txn)
- {
- this.env = env;
- this.txn = txn;
- }
-
- public DbTxn get_txn()
- {
- return txn;
- }
-
- public DbEnv get_env()
- {
- return env;
- }
- }
-
- public static native DbAttach xa_attach(Xid xid, Integer rmid);
-
- ////////////////////////////////////////////////////////////////
- //
- // private data
- //
- private long private_dbobj_ = 0;
- private int transactionTimeout = 0;
- private String home;
- private int rmid;
-
- private static int unique_rmid = 0;
-
- static
- {
- Db.load_db();
- }
-}
diff --git a/db/java/src/com/sleepycat/db/xa/DbXid.java b/db/java/src/com/sleepycat/db/xa/DbXid.java
deleted file mode 100644
index 08875ea1a..000000000
--- a/db/java/src/com/sleepycat/db/xa/DbXid.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: DbXid.java,v 1.2 2002/08/09 01:54:58 bostic Exp
- */
-
-package com.sleepycat.db.xa;
-
-import com.sleepycat.db.DbException;
-import com.sleepycat.db.DbTxn;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.Xid;
-
-public class DbXid implements Xid
-{
- public DbXid(int formatId, byte[] gtrid, byte[] bqual)
- throws XAException
- {
- this.formatId = formatId;
- this.gtrid = gtrid;
- this.bqual = bqual;
- }
-
- public int getFormatId()
- {
- return formatId;
- }
-
- public byte[] getGlobalTransactionId()
- {
- return gtrid;
- }
-
- public byte[] getBranchQualifier()
- {
- return bqual;
- }
-
- ////////////////////////////////////////////////////////////////
- //
- // private data
- //
- private byte[] gtrid;
- private byte[] bqual;
- private int formatId;
-}
diff --git a/db/java/src/com/sleepycat/examples/TpcbExample.java b/db/java/src/com/sleepycat/examples/TpcbExample.java
deleted file mode 100644
index 29a907908..000000000
--- a/db/java/src/com/sleepycat/examples/TpcbExample.java
+++ /dev/null
@@ -1,831 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: TpcbExample.java,v 11.9 2000/04/01 15:52:15 dda Exp $
- */
-
-package com.sleepycat.examples;
-
-import com.sleepycat.db.*;
-import java.io.FileNotFoundException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Random;
-import java.util.GregorianCalendar;
-import java.math.BigDecimal;
-
-//
-// This program implements a basic TPC/B driver program. To create the
-// TPC/B database, run with the -i (init) flag. The number of records
-// with which to populate the account, history, branch, and teller tables
-// is specified by the a, s, b, and t flags respectively. To run a TPC/B
-// test, use the n flag to indicate a number of transactions to run (note
-// that you can run many of these processes in parallel to simulate a
-// multiuser test run).
-//
-class TpcbExample extends DbEnv
-{
- public static final int TELLERS_PER_BRANCH = 10;
- public static final int ACCOUNTS_PER_TELLER = 10000;
- public static final int HISTORY_PER_BRANCH = 2592000;
-
- //
- // The default configuration that adheres to TPCB scaling rules requires
- // nearly 3 GB of space. To avoid requiring that much space for testing,
- // we set the parameters much lower. If you want to run a valid 10 TPS
- // configuration, uncomment the VALID_SCALING configuration
- //
-
- // VALID_SCALING configuration
- /*
- public static final int ACCOUNTS = 1000000;
- public static final int BRANCHES = 10;
- public static final int TELLERS = 100;
- public static final int HISTORY = 25920000;
- */
-
- // TINY configuration
- /*
- public static final int ACCOUNTS = 1000;
- public static final int BRANCHES = 10;
- public static final int TELLERS = 100;
- public static final int HISTORY = 10000;
- */
-
- // Default configuration
- public static final int ACCOUNTS = 100000;
- public static final int BRANCHES = 10;
- public static final int TELLERS = 100;
- public static final int HISTORY = 259200;
-
- public static final int HISTORY_LEN = 100;
- public static final int RECLEN = 100;
- public static final int BEGID = 1000000;
-
- // used by random_id()
- public static final int ACCOUNT = 0;
- public static final int BRANCH = 1;
- public static final int TELLER = 2;
-
- private static boolean verbose = false;
- private static final String progname = "TpcbExample"; // Program name.
-
- public TpcbExample(String home, int cachesize,
- boolean initializing, int flags)
- throws DbException, FileNotFoundException
- {
- super(0);
- set_error_stream(System.err);
- set_errpfx(progname);
- set_cachesize(0, cachesize == 0 ? 4 * 1024 * 1024 : cachesize, 0);
-
- int local_flags = flags | Db.DB_CREATE;
- if (initializing)
- local_flags |= Db.DB_INIT_MPOOL;
- else
- local_flags |= Db.DB_INIT_TXN | Db.DB_INIT_LOCK |
- Db.DB_INIT_LOG | Db.DB_INIT_MPOOL;
-
- open(home, local_flags, 0); // may throw DbException
- }
-
- //
- // Initialize the database to the specified number of accounts, branches,
- // history records, and tellers.
- //
- // Note: num_h was unused in the original ex_tpcb.c example.
- //
- public void
- populate(int num_a, int num_b, int num_h, int num_t)
- {
- Db dbp = null;
-
- int err;
- int balance, idnum;
- int end_anum, end_bnum, end_tnum;
- int start_anum, start_bnum, start_tnum;
- int h_nelem;
-
- idnum = BEGID;
- balance = 500000;
-
- h_nelem = num_a;
-
- try {
- dbp = new Db(this, 0);
- dbp.set_h_nelem(h_nelem);
- dbp.open("account", null,
- Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
- }
- // can be DbException or FileNotFoundException
- catch (Exception e1) {
- errExit(e1, "Open of account file failed");
- }
-
- start_anum = idnum;
- populateTable(dbp, idnum, balance, h_nelem, "account");
- idnum += h_nelem;
- end_anum = idnum - 1;
- try {
- dbp.close(0);
- }
- catch (DbException e2) {
- errExit(e2, "Account file close failed");
- }
-
- if (verbose)
- System.out.println("Populated accounts: "
- + String.valueOf(start_anum) + " - " + String.valueOf(end_anum));
-
- //
- // Since the number of branches is very small, we want to use very
- // small pages and only 1 key per page. This is the poor-man's way
- // of getting key locking instead of page locking.
- //
- h_nelem = (int)num_b;
-
- try {
- dbp = new Db(this, 0);
-
- dbp.set_h_nelem(h_nelem);
- dbp.set_h_ffactor(1);
- dbp.set_pagesize(512);
-
- dbp.open("branch", null,
- Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
- }
- // can be DbException or FileNotFoundException
- catch (Exception e3) {
- errExit(e3, "Branch file create failed");
- }
- start_bnum = idnum;
- populateTable(dbp, idnum, balance, h_nelem, "branch");
- idnum += h_nelem;
- end_bnum = idnum - 1;
-
- try {
- dbp.close(0);
- }
- catch (DbException dbe4) {
- errExit(dbe4, "Close of branch file failed");
- }
-
- if (verbose)
- System.out.println("Populated branches: "
- + String.valueOf(start_bnum) + " - " + String.valueOf(end_bnum));
-
- //
- // In the case of tellers, we also want small pages, but we'll let
- // the fill factor dynamically adjust itself.
- //
- h_nelem = (int)num_t;
-
- try {
-
- dbp = new Db(this, 0);
-
- dbp.set_h_nelem(h_nelem);
- dbp.set_h_ffactor(0);
- dbp.set_pagesize(512);
-
- dbp.open("teller", null,
- Db.DB_HASH, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
- }
- // can be DbException or FileNotFoundException
- catch (Exception e5) {
- errExit(e5, "Teller file create failed");
- }
-
- start_tnum = idnum;
- populateTable(dbp, idnum, balance, h_nelem, "teller");
- idnum += h_nelem;
- end_tnum = idnum - 1;
-
- try {
- dbp.close(0);
- }
- catch (DbException e6) {
- errExit(e6, "Close of teller file failed");
- }
-
- if (verbose)
- System.out.println("Populated tellers: "
- + String.valueOf(start_tnum) + " - " + String.valueOf(end_tnum));
-
- try {
- dbp = new Db(this, 0);
- dbp.set_re_len(HISTORY_LEN);
- dbp.open("history", null,
- Db.DB_RECNO, Db.DB_CREATE | Db.DB_TRUNCATE, 0644);
- }
- // can be DbException or FileNotFoundException
- catch (Exception e7) {
- errExit(e7, "Create of history file failed");
- }
-
- populateHistory(dbp, num_h, num_a, num_b, num_t);
-
- try {
- dbp.close(0);
- }
- catch (DbException e8) {
- errExit(e8, "Close of history file failed");
- }
- }
-
- public void
- populateTable(Db dbp,
- int start_id, int balance,
- int nrecs, String msg)
- {
- Defrec drec = new Defrec();
-
- Dbt kdbt = new Dbt(drec.data);
- kdbt.set_size(4); // sizeof(int)
- Dbt ddbt = new Dbt(drec.data);
- ddbt.set_size(drec.data.length); // uses whole array
-
- try {
- for (int i = 0; i < nrecs; i++) {
- kdbt.set_recno_key_data(start_id + (int)i);
- drec.set_balance(balance);
- dbp.put(null, kdbt, ddbt, Db.DB_NOOVERWRITE);
- }
- }
- catch (DbException dbe) {
- System.err.println("Failure initializing " + msg + " file: " +
- dbe.toString());
- System.exit(1);
- }
- }
-
- public void
- populateHistory(Db dbp, int nrecs,
- int anum, int bnum, int tnum)
- {
- Histrec hrec = new Histrec();
- hrec.set_amount(10);
-
- byte arr[] = new byte[4]; // sizeof(int)
- int i;
- Dbt kdbt = new Dbt(arr);
- kdbt.set_size(arr.length);
- Dbt ddbt = new Dbt(hrec.data);
- ddbt.set_size(hrec.data.length);
-
- try {
- for (i = 1; i <= nrecs; i++) {
- kdbt.set_recno_key_data(i);
-
- hrec.set_aid(random_id(ACCOUNT, anum, bnum, tnum));
- hrec.set_bid(random_id(BRANCH, anum, bnum, tnum));
- hrec.set_tid(random_id(TELLER, anum, bnum, tnum));
-
- dbp.put(null, kdbt, ddbt, Db.DB_APPEND);
- }
- }
- catch (DbException dbe) {
- errExit(dbe, "Failure initializing history file");
- }
- }
-
- static Random rand = new Random();
-
- public static int
- random_int(int lo, int hi)
- {
- int ret;
- int t;
-
- t = rand.nextInt();
- if (t < 0)
- t = -t;
- ret = (int)(((double)t / ((double)(Integer.MAX_VALUE) + 1)) *
- (hi - lo + 1));
- ret += lo;
- return (ret);
- }
-
- public static int
- random_id(int type, int accounts, int branches, int tellers)
- {
- int min, max, num;
-
- max = min = BEGID;
- num = accounts;
- switch(type) {
- case TELLER:
- min += branches;
- num = tellers;
- // Fallthrough
- case BRANCH:
- if (type == BRANCH)
- num = branches;
- min += accounts;
- // Fallthrough
- case ACCOUNT:
- max = min + num - 1;
- }
- return (random_int(min, max));
- }
-
- public void
- run(int n, int accounts, int branches, int tellers)
- {
- Db adb = null;
- Db bdb = null;
- Db hdb = null;
- Db tdb = null;
- double gtps, itps;
- int failed, ifailed, ret, txns;
- long starttime, curtime, lasttime;
-
- //
- // Open the database files.
- //
- int err;
- try {
- adb = new Db(this, 0);
- adb.open("account", null, Db.DB_UNKNOWN, 0, 0);
- bdb = new Db(this, 0);
- bdb.open("branch", null, Db.DB_UNKNOWN, 0, 0);
- tdb = new Db(this, 0);
- tdb.open("teller", null, Db.DB_UNKNOWN, 0, 0);
- hdb = new Db(this, 0);
- hdb.open("history", null, Db.DB_UNKNOWN, 0, 0);
- }
- catch (DbException dbe) {
- errExit(dbe, "Open of db files failed");
- }
- catch (FileNotFoundException fnfe) {
- errExit(fnfe, "Open of db files failed, missing file");
- }
-
- txns = failed = ifailed = 0;
- starttime = (new Date()).getTime();
- lasttime = starttime;
- while (n-- > 0) {
- txns++;
- ret = txn(adb, bdb, tdb, hdb, accounts, branches, tellers);
- if (ret != 0) {
- failed++;
- ifailed++;
- }
- if (n % 5000 == 0) {
- curtime = (new Date()).getTime();
- gtps = (double)(txns - failed) /
- ((curtime - starttime) / 1000.0);
- itps = (double)(5000 - ifailed) /
- ((curtime - lasttime) / 1000.0);
- System.out.print(String.valueOf(txns) + " txns " +
- String.valueOf(failed) + " failed ");
- System.out.println(showRounded(gtps, 2) + " TPS (gross) " +
- showRounded(itps, 2) + " TPS (interval)");
- lasttime = curtime;
- ifailed = 0;
- }
- }
-
- try {
- adb.close(0);
- bdb.close(0);
- tdb.close(0);
- hdb.close(0);
- }
- catch (DbException dbe2) {
- errExit(dbe2, "Close of db files failed");
- }
-
- System.out.println((long)txns + " transactions begun "
- + String.valueOf(failed) + " failed");
-
- }
-
- //
- // XXX Figure out the appropriate way to pick out IDs.
- //
- public int
- txn(Db adb, Db bdb, Db tdb, Db hdb,
- int anum, int bnum, int tnum)
- {
- Dbc acurs = null;
- Dbc bcurs = null;
- Dbc hcurs = null;
- Dbc tcurs = null;
- DbTxn t = null;
-
- Defrec rec = new Defrec();
- Histrec hrec = new Histrec();
- int account, branch, teller;
-
- Dbt d_dbt = new Dbt();
- Dbt d_histdbt = new Dbt();
- Dbt k_dbt = new Dbt();
- Dbt k_histdbt = new Dbt();
-
- account = random_id(ACCOUNT, anum, bnum, tnum);
- branch = random_id(BRANCH, anum, bnum, tnum);
- teller = random_id(TELLER, anum, bnum, tnum);
-
- // The history key will not actually be retrieved,
- // but it does need to be set to something.
- byte hist_key[] = new byte[4];
- k_histdbt.set_data(hist_key);
- k_histdbt.set_size(4 /* == sizeof(int)*/);
-
- byte key_bytes[] = new byte[4];
- k_dbt.set_data(key_bytes);
- k_dbt.set_size(4 /* == sizeof(int)*/);
-
- d_dbt.set_flags(Db.DB_DBT_USERMEM);
- d_dbt.set_data(rec.data);
- d_dbt.set_ulen(rec.length());
-
- hrec.set_aid(account);
- hrec.set_bid(branch);
- hrec.set_tid(teller);
- hrec.set_amount(10);
- // Request 0 bytes since we're just positioning.
- d_histdbt.set_flags(Db.DB_DBT_PARTIAL);
-
- // START TIMING
-
- try {
- t = txn_begin(null, 0);
-
- acurs = adb.cursor(t, 0);
- bcurs = bdb.cursor(t, 0);
- tcurs = tdb.cursor(t, 0);
- hcurs = hdb.cursor(t, 0);
-
- // Account record
- k_dbt.set_recno_key_data(account);
- if (acurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)
- throw new TpcbException("acurs get failed");
- rec.set_balance(rec.get_balance() + 10);
- acurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
-
- // Branch record
- k_dbt.set_recno_key_data(branch);
- if (bcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)
- throw new TpcbException("bcurs get failed");
- rec.set_balance(rec.get_balance() + 10);
- bcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
-
- // Teller record
- k_dbt.set_recno_key_data(teller);
- if (tcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)
- throw new TpcbException("ccurs get failed");
- rec.set_balance(rec.get_balance() + 10);
- tcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);
-
- // History record
- d_histdbt.set_flags(0);
- d_histdbt.set_data(hrec.data);
- d_histdbt.set_ulen(hrec.length());
- if (hdb.put(t, k_histdbt, d_histdbt, Db.DB_APPEND) != 0)
- throw(new DbException("put failed"));
-
- acurs.close();
- bcurs.close();
- tcurs.close();
- hcurs.close();
-
- t.commit(0);
-
- // END TIMING
- return (0);
-
- }
- catch (Exception e) {
- try {
- if (acurs != null)
- acurs.close();
- if (bcurs != null)
- bcurs.close();
- if (tcurs != null)
- tcurs.close();
- if (hcurs != null)
- hcurs.close();
- if (t != null)
- t.abort();
- }
- catch (DbException dbe) {
- // not much we can do here.
- }
-
- if (verbose) {
- System.out.println("Transaction A=" + String.valueOf(account)
- + " B=" + String.valueOf(branch)
- + " T=" + String.valueOf(teller) + " failed");
- System.out.println("Reason: " + e.toString());
- }
- return (-1);
- }
- }
-
- static void errExit(Exception err, String s)
- {
- System.err.print(progname + ": ");
- if (s != null) {
- System.err.print(s + ": ");
- }
- System.err.println(err.toString());
- System.exit(1);
- }
-
- public static void main(String argv[])
- {
- long seed;
- int accounts, branches, tellers, history;
- boolean iflag, txn_no_sync;
- int mpool, ntxns;
- String home, endarg;
-
- home = "TESTDIR";
- accounts = branches = history = tellers = 0;
- txn_no_sync = false;
- mpool = ntxns = 0;
- verbose = false;
- iflag = false;
- seed = (new GregorianCalendar()).get(Calendar.SECOND);
-
- for (int i = 0; i < argv.length; ++i)
- {
- if (argv[i].equals("-a")) {
- // Number of account records
- if ((accounts = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-b")) {
- // Number of branch records
- if ((branches = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-c")) {
- // Cachesize in bytes
- if ((mpool = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-f")) {
- // Fast mode: no txn sync.
- txn_no_sync = true;
- }
- else if (argv[i].equals("-h")) {
- // DB home.
- home = argv[++i];
- }
- else if (argv[i].equals("-i")) {
- // Initialize the test.
- iflag = true;
- }
- else if (argv[i].equals("-n")) {
- // Number of transactions
- if ((ntxns = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-S")) {
- // Random number seed.
- seed = Long.parseLong(argv[++i]);
- if (seed <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-s")) {
- // Number of history records
- if ((history = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-t")) {
- // Number of teller records
- if ((tellers = Integer.parseInt(argv[++i])) <= 0)
- invarg(argv[i]);
- }
- else if (argv[i].equals("-v")) {
- // Verbose option.
- verbose = true;
- }
- else
- {
- usage();
- }
- }
-
- rand.setSeed((int)seed);
-
- TpcbExample app = null;
-
- // Initialize the database environment.
- // Must be done in within a try block.
- //
- try {
- app = new TpcbExample(home, mpool, iflag,
- txn_no_sync ? Db.DB_TXN_NOSYNC : 0);
- }
- catch (Exception e1) {
- errExit(e1, "initializing environment failed");
- }
-
- accounts = accounts == 0 ? ACCOUNTS : accounts;
- branches = branches == 0 ? BRANCHES : branches;
- tellers = tellers == 0 ? TELLERS : tellers;
- history = history == 0 ? HISTORY : history;
-
- if (verbose)
- System.out.println((long)accounts + " Accounts "
- + String.valueOf(branches) + " Branches "
- + String.valueOf(tellers) + " Tellers "
- + String.valueOf(history) + " History");
-
- if (iflag) {
- if (ntxns != 0)
- usage();
- app.populate(accounts, branches, history, tellers);
- }
- else {
- if (ntxns == 0)
- usage();
- app.run(ntxns, accounts, branches, tellers);
- }
-
- // Shut down the application.
-
- try {
- app.close(0);
- }
- catch (DbException dbe2) {
- errExit(dbe2, "appexit failed");
- }
-
- System.exit(0);
- }
-
- private static void invarg(String str)
- {
- System.err.println("TpcbExample: invalid argument: " + str);
- System.exit(1);
- }
-
- private static void usage()
- {
- System.err.println(
- "usage: TpcbExample [-fiv] [-a accounts] [-b branches]\n" +
- " [-c cachesize] [-h home] [-n transactions ]\n" +
- " [-S seed] [-s history] [-t tellers]");
- System.exit(1);
- }
-
- // round 'd' to 'scale' digits, and return result as string
- private String showRounded(double d, int scale)
- {
- return new BigDecimal(d).
- setScale(scale, BigDecimal.ROUND_HALF_DOWN).toString();
- }
-
- // The byte order is our choice.
- //
- static long get_int_in_array(byte[] array, int offset)
- {
- return
- ((0xff & array[offset+0]) << 0) |
- ((0xff & array[offset+1]) << 8) |
- ((0xff & array[offset+2]) << 16) |
- ((0xff & array[offset+3]) << 24);
- }
-
- // Note: Value needs to be long to avoid sign extension
- static void set_int_in_array(byte[] array, int offset, long value)
- {
- array[offset+0] = (byte)((value >> 0) & 0x0ff);
- array[offset+1] = (byte)((value >> 8) & 0x0ff);
- array[offset+2] = (byte)((value >> 16) & 0x0ff);
- array[offset+3] = (byte)((value >> 24) & 0x0ff);
- }
-
-};
-
-// Simulate the following C struct:
-// struct Defrec {
-// u_int32_t id;
-// u_int32_t balance;
-// u_int8_t pad[RECLEN - sizeof(int) - sizeof(int)];
-// };
-
-class Defrec
-{
- public Defrec()
- {
- data = new byte[TpcbExample.RECLEN];
- }
-
- public int length()
- {
- return TpcbExample.RECLEN;
- }
-
- public long get_id()
- {
- return TpcbExample.get_int_in_array(data, 0);
- }
-
- public void set_id(long value)
- {
- TpcbExample.set_int_in_array(data, 0, value);
- }
-
- public long get_balance()
- {
- return TpcbExample.get_int_in_array(data, 4);
- }
-
- public void set_balance(long value)
- {
- TpcbExample.set_int_in_array(data, 4, value);
- }
-
- static {
- Defrec d = new Defrec();
- d.set_balance(500000);
- }
-
- public byte[] data;
-}
-
-// Simulate the following C struct:
-// struct Histrec {
-// u_int32_t aid;
-// u_int32_t bid;
-// u_int32_t tid;
-// u_int32_t amount;
-// u_int8_t pad[RECLEN - 4 * sizeof(u_int32_t)];
-// };
-
-class Histrec
-{
- public Histrec()
- {
- data = new byte[TpcbExample.RECLEN];
- }
-
- public int length()
- {
- return TpcbExample.RECLEN;
- }
-
- public long get_aid()
- {
- return TpcbExample.get_int_in_array(data, 0);
- }
-
- public void set_aid(long value)
- {
- TpcbExample.set_int_in_array(data, 0, value);
- }
-
- public long get_bid()
- {
- return TpcbExample.get_int_in_array(data, 4);
- }
-
- public void set_bid(long value)
- {
- TpcbExample.set_int_in_array(data, 4, value);
- }
-
- public long get_tid()
- {
- return TpcbExample.get_int_in_array(data, 8);
- }
-
- public void set_tid(long value)
- {
- TpcbExample.set_int_in_array(data, 8, value);
- }
-
- public long get_amount()
- {
- return TpcbExample.get_int_in_array(data, 12);
- }
-
- public void set_amount(long value)
- {
- TpcbExample.set_int_in_array(data, 12, value);
- }
-
- public byte[] data;
-}
-
-class TpcbException extends Exception
-{
- TpcbException()
- {
- super();
- }
-
- TpcbException(String s)
- {
- super(s);
- }
-}
diff --git a/db/libdb_java/README b/db/libdb_java/README
new file mode 100644
index 000000000..7fcb6fc33
--- /dev/null
+++ b/db/libdb_java/README
@@ -0,0 +1,190 @@
+Berkeley DB's Java API
+$Id: README,v 11.2 2003/03/06 00:42:16 mjc Exp $
+
+Berkeley DB's Java API is now generated with SWIG
+(http://www.swig.org). This document describes how SWIG is used -
+what we trust it to do, what things we needed to work around.
+
+
+Overview
+========
+
+SWIG is a tool that generates wrappers around native (C/C++) APIs for
+various languages (mainly scripting languages) including Java.
+
+By default, SWIG creates an API in the target language that exactly
+replicates the native API (for example, each pointer type in the API
+is wrapped as a distinct type in the language). Although this
+simplifies the wrapper layer (type translation in trivial), it usually
+doesn't result in natural API in the target language.
+
+A further constraint for Berkeley DB's Java API was backwards
+compatibility. The original hand-coded Java API is in widespread use,
+and included many design decisions about how native types should be
+represented in Java. As an example, callback functions are
+represented by Java interfaces that applications using Berkeley DB
+could implement. The SWIG implementation was required to maintain
+backwards compatibility for those applications.
+
+
+Running SWIG
+============
+
+The simplest use of SWIG is to simply run it with a C include file as
+input. SWIG parses the file and generates wrapper code for the target
+language. For Java, this includes a Java class for each C struct and
+a C source file containing the Java Native Interface (JNI) function
+calls for each native method.
+
+The s_swig shell script in db/dist runs SWIG, and then post-processes
+each Java source file with the sed commands in
+libdb_java/java-post.sed. The Java sources are placed in
+java/src/com/sleepycat/db, and the native wrapper code is in a single
+file in libdb_java/db_java_wrap.c.
+
+The post-processing step modifies code in ways that is difficult with
+SWIG (given my current level of knowledge). This includes changing
+some access modifiers to hide some of the implementation methods,
+selectively adding "throws" clauses to methods, and adding calls to
+"initialize" methods in Db and DbEnv after they are constructed (more
+below on what these aclls do).
+
+In addition to the source code generated by SWIG, some of the Java
+classes are written by hand, and constants and code to fill statistics
+structures are generated by the script dist/s_java. The native
+statistics code is in libdb_java/java_stat_auto.c, and is compiled
+into the db_java_wrap object file with a #include directive. This
+allows most functions in that object to be static, which encourages
+compiler inlining and reduces the number of symbols we export.
+
+
+The Implementation
+==================
+
+For the reasons mentioned above, Berkeley DB requires a more
+sophisticated mapping between the native API and Java, so additional
+SWIG directives are added to the input. In particular:
+
+* The general intention is for db.i to contain the full DB API (just
+ like db.h). As much as possible, this file is kept Java independent
+ so that it can be updated easily when the API changes. SWIG doesn't
+ have any builtin rules for how to handle function pointers in a
+ struct, so each DB method must be added in a SWIG "%extend" block
+ which includes the method signature and a call to the method.
+
+ * SWIG's automatically generated function names happen to collide
+ with Sleepycat's naming convention. For example, in a SWIG class
+ called __db, a method called "open" would result in a wrapper
+ function called "__db_open", which already exists in DB. This is
+ another reason why making these static functions is important.
+
+* The main Java support starts in db_java.i - this file includes all
+ Java code that is explicitly inserted into the generated classes,
+ and is responsible for defining object lifecycles (handling
+ allocation and cleanup).
+
+ * Methods that need to be wrapped for special handling in Java code
+ are renamed with a trailing zero (e.g., close becomes close0).
+ This is invisible to applications.
+
+ * Most DB classes that are wrapped have method calls that imply the
+ cleanup of any native resources associated with the Java object
+ (for example, Db.close or DbTxn.abort). These methods are wrapped
+ so that if the object is accessed after the native part has been
+ destroyed, an exception is thrown rather than a trap that crashes
+ the JVM.
+
+ * Db and DbEnv initialization is more complex: a global reference is
+ stored in the corresponding struct so that native code can
+ efficiently map back to Java code. In addition, if a Db is
+ created without an environment (i.e., in a private environment),
+ the initialization wraps the internal DbEnv to simplify handling
+ of various Db methods that just call the corresponding DbEnv
+ method (like err, errx, etc.). It is important that the global
+ references are cleaned up before the DB and DB_ENV handles are
+ closed, so the Java objects can be garbage collected.
+
+ * In the case of DbLock and DbLsn, there are no such methods. In
+ these cases, there is a finalize method that does the appropriate
+ cleanup. No other classes have finalize methods (in particular,
+ the Dbt class is now implemented entirely in Java, so no
+ finalization is necessary).
+
+* Overall initialization code, including the System.loadLibrary call,
+ is in java_util.i. This includes looking up all class, field and
+ method handles once so that execution is not slowed down by repeated
+ runtime type queries.
+
+* Exception handling is in java_except.i. The main non-obvious design
+ choice was to create a db_ret_t type for methods that return an
+ error code as an int in the C API, but return void in the Java API
+ (and throw exceptions on error).
+
+ * The only other odd case with exceptions is DbMemoryException -
+ this is thrown as normal when a call returns ENOMEM, but there is
+ special handling for the case where a Dbt with DB_DBT_USERMEM is
+ not big enough to handle a result: in this case, the Dbt handling
+ code calls the method update_dbt on the exception that is about to
+ be thrown to register the failed Dbt in the exception.
+
+* Statistics handling is in java_stat.i - this mainly just hooks into
+ the automatically-generated code in java_stat_auto.c.
+
+* Callbacks: the general approach is that Db and DbEnv maintain
+ references to the objects that handle each callback, and have a
+ helper method for each call. This is primarily to simplify the
+ native code, and performs better than more complex native code.
+
+ * One difference with the new approach is that the implementation is
+ more careful about calling DeleteLocalRef on objects created for
+ callbacks. This is particularly important for callbacks like
+ bt_compare, which may be called repeatedly from native code.
+ Without the DeleteLocalRef calls, the Java objects that are
+ created can not be collected until the original call returns.
+
+* Most of the rest of the code is in java_typemaps.i. A typemap is a
+ rule describing how a native type is mapped onto a Java type for
+ parameters and return values. These handle most of the complexity
+ of creating exactly the Java API we want.
+
+ * One of the main areas of complexity is Dbt handling. The approach
+ taken is to accept whatever data is passed in by the application,
+ pass that to native code, and reflect any changes to the native
+ DBT back into the Java object. In other words, the Dbt typemaps
+ don't replicate DB's rules about whether Dbts will be modified or
+ not - they just pass the data through.
+
+ * As noted above, when a Dbt is "released" (i.e., no longer needed
+ in native code), one of the check is whether a DbMemoryException
+ is pending, and if so, whether this Dbt might be the cause. In
+ that case, the Dbt is added to the exception via the "update_dbt"
+ method.
+
+* Constant handling has been simplified by making DbConstants an
+ interface. This allows the Db class to inherit the constants, and
+ most can be inlined by javac.
+
+ * The danger here is if applications are compiled against one
+ version of db.jar, but run against another. This danger existed
+ previously, but was partly ameliorated by a separation of
+ constants into "case" and "non-case" constants (the non-case
+ constants were arranged so they could not be inlined). The only
+ complete solution to this problem is for applications to check the
+ version returned by DbEnv.get_version* versus the Db.DB_VERSION*
+ constants.
+
+
+Application-visible changes
+===========================
+
+* The new API is around 5x faster for many operations.
+
+* Some internal methods and constructors that were previously public
+ have been hidden or removed.
+
+* A few methods that were inconsistent have been cleaned up (e.g.,
+ Db.close now returns void, was an int but always zero). The
+ synchronized attributed has been toggled on some methods - this is
+ an attempt to prevent multi-threaded applications shooting
+ themselves in the foot by calling close() or similar methods
+ concurrently from multiple threads.
diff --git a/db/libdb_java/checkapi.prl b/db/libdb_java/checkapi.prl
deleted file mode 100644
index 25882c056..000000000
--- a/db/libdb_java/checkapi.prl
+++ /dev/null
@@ -1,132 +0,0 @@
-#
-# Released to public domain by Donald Anderson dda@world.std.com
-# No warranties.
-#
-# Perl script to check for matching of JNI interfaces to implementation.
-# We check all .cpp arguments and .h arguments and make sure that for
-# each .h declaration (marked by JNIEXPORT keyword), there is a .cpp
-# definition for the same function (also marked by JNIEXPORT keyword),
-# and vice versa. Definitions and declarations are determined solely
-# by whether they are in a .h or .cpp file - we don't do any further
-# analysis.
-#
-# Some additions made to help with Berkeley DB sources:
-#
-# Berkeley DB Java sources use JAVADB_*_ACCESS #defines
-# to quickly define routine access functions.
-
-foreach $file (<@ARGV>) { # glob allows direct use from Win* makefiles
- open (FILE, $file) || die "$file: cannot open\n";
- $dot_h = 0;
- if ($file =~ /.*[hH]$/) {
- $dot_h = 1;
- }
- $in_def = 0;
-nextline:
- while (<FILE>) {
- chop;
- if (/JNIEXPORT/ || /^JAVADB_.*_ACCESS/) {
- $in_def = 1;
- $def = "";
- }
- if ($in_def == 1) {
- $def .= $_;
- }
- if (/\)/) {
- $line = "";
- $in_def = 0;
- if ($def eq "") {
- next nextline;
- }
- $_ = $def;
- # remove comments
- s@/\*[^*]*\*/@@g;
- s@[ ][ ]*@ @g;
- s@JNIEnv *\* *@JNIEnv @g;
- s@([,*()]) @\1@g;
- s@ ([,*()])@\1@g;
-
- s/JAVADB_WO_ACCESS_METHOD/JAVADB_WO_ACCESS/;
-
- if (/^JAVADB_.*_ACCESS/) {
- s@ *@ @g;
- s@_ACCESS_STRING\(([^,]*),@_ACCESS(\1,jstring,@;
- s@_ACCESS_BEFORE_APPINIT@_ACCESS@;
- s@_ACCESS\(@,normal,@;
- s@JAVADB_@@;
- s@\)@,@;
- @vars = split(/,/);
- $get = 0;
- $set = 0;
- if (@vars[0] eq "RW") {
- $get = 1;
- $set = 1;
- }
- if (@vars[0] eq "RO") {
- $get = 1;
- }
- if (@vars[0] eq "WO") {
- $set = 1;
- }
- if ($get == 0 && $set == 0) {
- print "Invalid use of JAVADB_ macro\n";
- }
- if ($set == 1) {
- $line = "JNIEXPORT void JNICALL Java_com_sleepycat_db_@vars[2]_set_1@vars[4](JNIEnv,jobject,@vars[3])";
- }
- if ($get == 1) {
- $line2 = "JNIEXPORT @vars[3] JNICALL Java_com_sleepycat_db_@vars[2]_get_1@vars[4](JNIEnv,jobject)";
- }
- }
- else {
- s@([,(][a-zA-Z0-9_]*) [a-zA-Z0-9_]*@\1@g;
- s@;$@@g;
- $line = $_;
- }
-
- $def = "";
-
- if ($line ne "") {
- if ($lines{$line} eq "") {
- $lines{$line} = 0;
- }
- if ($dot_h == 1) {
- $lines{$line} += 1;
- }
- else {
- $lines{$line} -= 1;
- }
- $line = "";
- }
- if ($line2 ne "") {
- if ($lines{$line2} eq "") {
- $lines{$line2} = 0;
- }
- if ($dot_h == 1) {
- $lines{$line2} += 1;
- }
- else {
- $lines{$line2} -= 1;
- }
- $line2 = "";
- }
- }
- }
- close (FILE);
-}
-
-$status = 0;
-foreach $key (sort keys %lines) {
- if ($lines{$key} != 0) {
- if ($lines{$key} > 0) {
- print "Missing .cpp implementation: $lines${key}\n";
- $status = 1;
- }
- else {
- print "Missing .h declaration: $lines${key}\n";
- $status = 1;
- }
- }
-}
-
-exit ($status);
diff --git a/db/libdb_java/com_sleepycat_db_Db.h b/db/libdb_java/com_sleepycat_db_Db.h
deleted file mode 100644
index d9e1f1cbb..000000000
--- a/db/libdb_java/com_sleepycat_db_Db.h
+++ /dev/null
@@ -1,349 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_Db */
-
-#ifndef _Included_com_sleepycat_db_Db
-#define _Included_com_sleepycat_db_Db
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_Db
- * Method: _init
- * Signature: (Lcom/sleepycat/db/DbEnv;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1init
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: _notify_internal
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1notify_1internal
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: _close
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db__1close
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: cursor
- * Signature: (Lcom/sleepycat/db/DbTxn;I)Lcom/sleepycat/db/Dbc;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_cursor
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: del
- * Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_del
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: err
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_err
- (JNIEnv *, jobject, jint, jstring);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: errx
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_errx
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: fd
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_fd
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: _finalize
- * Signature: (Lcom/sleepycat/db/DbErrcall;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1finalize
- (JNIEnv *, jobject, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: get
- * Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get
- (JNIEnv *, jobject, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: get_byteswapped
- * Signature: ()Z
- */
-JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_Db_get_1byteswapped
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: get_type
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: join
- * Signature: ([Lcom/sleepycat/db/Dbc;I)Lcom/sleepycat/db/Dbc;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_join
- (JNIEnv *, jobject, jobjectArray, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: key_range
- * Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/DbKeyRange;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_key_1range
- (JNIEnv *, jobject, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: _open
- * Signature: (Ljava/lang/String;Ljava/lang/String;III)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1open
- (JNIEnv *, jobject, jstring, jstring, jint, jint, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: put
- * Signature: (Lcom/sleepycat/db/DbTxn;Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_put
- (JNIEnv *, jobject, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: rename
- * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_rename
- (JNIEnv *, jobject, jstring, jstring, jstring, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: remove
- * Signature: (Ljava/lang/String;Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_remove
- (JNIEnv *, jobject, jstring, jstring, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: append_recno_changed
- * Signature: (Lcom/sleepycat/db/DbAppendRecno;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_append_1recno_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: bt_compare_changed
- * Signature: (Lcom/sleepycat/db/DbBtreeCompare;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1compare_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_bt_maxkey
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1bt_1maxkey
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_bt_minkey
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1bt_1minkey
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: bt_prefix_changed
- * Signature: (Lcom/sleepycat/db/DbBtreePrefix;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1prefix_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_cachesize
- * Signature: (III)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1cachesize
- (JNIEnv *, jobject, jint, jint, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: dup_compare_changed
- * Signature: (Lcom/sleepycat/db/DbDupCompare;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_dup_1compare_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: feedback_changed
- * Signature: (Lcom/sleepycat/db/DbFeedback;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_feedback_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_flags
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1flags
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_h_ffactor
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1h_1ffactor
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: hash_changed
- * Signature: (Lcom/sleepycat/db/DbHash;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_hash_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_h_nelem
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1h_1nelem
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_lorder
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1lorder
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_pagesize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1pagesize
- (JNIEnv *, jobject, jlong);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_re_delim
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1delim
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_re_len
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1len
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_re_pad
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1pad
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_re_source
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1re_1source
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: set_q_extentsize
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_set_1q_1extentsize
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: stat
- * Signature: (I)Ljava/lang/Object;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: sync
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_sync
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: upgrade
- * Signature: (Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_upgrade
- (JNIEnv *, jobject, jstring, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: verify
- * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/io/OutputStream;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_verify
- (JNIEnv *, jobject, jstring, jstring, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Db
- * Method: one_time_init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_one_1time_1init
- (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbEnv.h b/db/libdb_java/com_sleepycat_db_DbEnv.h
deleted file mode 100644
index 4168ea9ab..000000000
--- a/db/libdb_java/com_sleepycat_db_DbEnv.h
+++ /dev/null
@@ -1,509 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbEnv */
-
-#ifndef _Included_com_sleepycat_db_DbEnv
-#define _Included_com_sleepycat_db_DbEnv
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _close
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1close
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: err
- * Signature: (ILjava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_err
- (JNIEnv *, jobject, jint, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: errx
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_errx
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _finalize
- * Signature: (Lcom/sleepycat/db/DbErrcall;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1finalize
- (JNIEnv *, jobject, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _init
- * Signature: (Lcom/sleepycat/db/DbErrcall;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _init_using_db
- * Signature: (Lcom/sleepycat/db/DbErrcall;Lcom/sleepycat/db/Db;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init_1using_1db
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _notify_db_close
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1notify_1db_1close
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: open
- * Signature: (Ljava/lang/String;II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_open
- (JNIEnv *, jobject, jstring, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: remove
- * Signature: (Ljava/lang/String;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_remove
- (JNIEnv *, jobject, jstring, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_cachesize
- * Signature: (III)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1cachesize
- (JNIEnv *, jobject, jint, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _set_errcall
- * Signature: (Lcom/sleepycat/db/DbErrcall;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errcall
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _set_errpfx
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errpfx
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: feedback_changed
- * Signature: (Lcom/sleepycat/db/DbFeedback;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_feedback_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_verbose
- * Signature: (II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1verbose
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_data_dir
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1data_1dir
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lg_bsize
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1bsize
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lg_dir
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1dir
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lg_max
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lg_1max
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_conflicts
- * Signature: ([[B)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1conflicts
- (JNIEnv *, jobject, jobjectArray);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_detect
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1detect
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_max
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_max_lockers
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1lockers
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_max_locks
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1locks
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_lk_max_objects
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1max_1objects
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_mp_mmapsize
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1mp_1mmapsize
- (JNIEnv *, jobject, jlong);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_mutexlocks
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1mutexlocks
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_pageyield
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1pageyield
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_panicstate
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1panicstate
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: recovery_init_changed
- * Signature: (Lcom/sleepycat/db/DbRecoveryInit;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_recovery_1init_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_region_init
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1region_1init
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_flags
- * Signature: (II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1flags
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_server
- * Signature: (Ljava/lang/String;JJI)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1server
- (JNIEnv *, jobject, jstring, jlong, jlong, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_shm_key
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1shm_1key
- (JNIEnv *, jobject, jlong);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_tas_spins
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tas_1spins
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_tmp_dir
- * Signature: (Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tmp_1dir
- (JNIEnv *, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: tx_recover_changed
- * Signature: (Lcom/sleepycat/db/DbTxnRecover;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_tx_1recover_1changed
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: set_tx_max
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1tx_1max
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: _set_tx_timestamp
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1tx_1timestamp
- (JNIEnv *, jobject, jlong);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: get_version_major
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1major
- (JNIEnv *, jclass);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: get_version_minor
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1minor
- (JNIEnv *, jclass);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: get_version_patch
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1patch
- (JNIEnv *, jclass);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: get_version_string
- * Signature: ()Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1string
- (JNIEnv *, jclass);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: strerror
- * Signature: (I)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_strerror
- (JNIEnv *, jclass, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: lock_detect
- * Signature: (II)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1detect
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: lock_get
- * Signature: (IILcom/sleepycat/db/Dbt;I)Lcom/sleepycat/db/DbLock;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1get
- (JNIEnv *, jobject, jint, jint, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: lock_id
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1id
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: lock_stat
- * Signature: ()Lcom/sleepycat/db/DbLockStat;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1stat
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_archive
- * Signature: (I)[Ljava/lang/String;
- */
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_log_1archive
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_compare
- * Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/DbLsn;)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_log_1compare
- (JNIEnv *, jclass, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_file
- * Signature: (Lcom/sleepycat/db/DbLsn;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_log_1file
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_flush
- * Signature: (Lcom/sleepycat/db/DbLsn;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1flush
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_get
- * Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/Dbt;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1get
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_put
- * Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/Dbt;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1put
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_stat
- * Signature: ()Lcom/sleepycat/db/DbLogStat;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_log_1stat
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_register
- * Signature: (Lcom/sleepycat/db/Db;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1register
- (JNIEnv *, jobject, jobject, jstring);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: log_unregister
- * Signature: (Lcom/sleepycat/db/Db;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1unregister
- (JNIEnv *, jobject, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: memp_stat
- * Signature: ()Lcom/sleepycat/db/DbMpoolStat;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_memp_1stat
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: memp_fstat
- * Signature: ()[Lcom/sleepycat/db/DbMpoolFStat;
- */
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_memp_1fstat
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: memp_trickle
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_memp_1trickle
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: txn_begin
- * Signature: (Lcom/sleepycat/db/DbTxn;I)Lcom/sleepycat/db/DbTxn;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1begin
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: txn_checkpoint
- * Signature: (III)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_txn_1checkpoint
- (JNIEnv *, jobject, jint, jint, jint);
-
-/*
- * Class: com_sleepycat_db_DbEnv
- * Method: txn_stat
- * Signature: ()Lcom/sleepycat/db/DbTxnStat;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1stat
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbLock.h b/db/libdb_java/com_sleepycat_db_DbLock.h
deleted file mode 100644
index 8a1c135bb..000000000
--- a/db/libdb_java/com_sleepycat_db_DbLock.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbLock */
-
-#ifndef _Included_com_sleepycat_db_DbLock
-#define _Included_com_sleepycat_db_DbLock
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_DbLock
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_finalize
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbLock
- * Method: put
- * Signature: (Lcom/sleepycat/db/DbEnv;)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_put
- (JNIEnv *, jobject, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbLogc.h b/db/libdb_java/com_sleepycat_db_DbLogc.h
deleted file mode 100644
index 8d029c761..000000000
--- a/db/libdb_java/com_sleepycat_db_DbLogc.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbLogc */
-
-#ifndef _Included_com_sleepycat_db_DbLogc
-#define _Included_com_sleepycat_db_DbLogc
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_DbLogc
- * Method: close
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLogc_close
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbLogc
- * Method: get
- * Signature: (Lcom/sleepycat/db/DbLsn;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbLogc_get
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbLogc
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLogc_finalize
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbLsn.h b/db/libdb_java/com_sleepycat_db_DbLsn.h
deleted file mode 100644
index 093eaf372..000000000
--- a/db/libdb_java/com_sleepycat_db_DbLsn.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbLsn */
-
-#ifndef _Included_com_sleepycat_db_DbLsn
-#define _Included_com_sleepycat_db_DbLsn
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_DbLsn
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_finalize
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbLsn
- * Method: init_lsn
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_init_1lsn
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbTxn.h b/db/libdb_java/com_sleepycat_db_DbTxn.h
deleted file mode 100644
index 4dcf47405..000000000
--- a/db/libdb_java/com_sleepycat_db_DbTxn.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbTxn */
-
-#ifndef _Included_com_sleepycat_db_DbTxn
-#define _Included_com_sleepycat_db_DbTxn
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_DbTxn
- * Method: abort
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_abort
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbTxn
- * Method: commit
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_commit
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_DbTxn
- * Method: id
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbTxn_id
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbTxn
- * Method: prepare
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_prepare
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_DbTxn
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_finalize
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_DbUtil.h b/db/libdb_java/com_sleepycat_db_DbUtil.h
deleted file mode 100644
index 645b6f925..000000000
--- a/db/libdb_java/com_sleepycat_db_DbUtil.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_DbUtil */
-
-#ifndef _Included_com_sleepycat_db_DbUtil
-#define _Included_com_sleepycat_db_DbUtil
-#ifdef __cplusplus
-extern "C" {
-#endif
-/* Inaccessible static: big_endian */
-/*
- * Class: com_sleepycat_db_DbUtil
- * Method: am_big_endian
- * Signature: ()Z
- */
-JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_DbUtil_am_1big_1endian
- (JNIEnv *, jclass);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_Dbc.h b/db/libdb_java/com_sleepycat_db_Dbc.h
deleted file mode 100644
index e62679c6f..000000000
--- a/db/libdb_java/com_sleepycat_db_Dbc.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_Dbc */
-
-#ifndef _Included_com_sleepycat_db_Dbc
-#define _Included_com_sleepycat_db_Dbc
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: close
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_close
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: count
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_count
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: del
- * Signature: (I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_del
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: dup
- * Signature: (I)Lcom/sleepycat/db/Dbc;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Dbc_dup
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: get
- * Signature: (Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_get
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: put
- * Signature: (Lcom/sleepycat/db/Dbt;Lcom/sleepycat/db/Dbt;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_put
- (JNIEnv *, jobject, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbc
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_finalize
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_Dbt.h b/db/libdb_java/com_sleepycat_db_Dbt.h
deleted file mode 100644
index cdb58c682..000000000
--- a/db/libdb_java/com_sleepycat_db_Dbt.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_Dbt */
-
-#ifndef _Included_com_sleepycat_db_Dbt
-#define _Included_com_sleepycat_db_Dbt
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: finalize
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_finalize
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_data
- * Signature: ()[B
- */
-JNIEXPORT jbyteArray JNICALL Java_com_sleepycat_db_Dbt_get_1data
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: internal_set_data
- * Signature: ([B)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_internal_1set_1data
- (JNIEnv *, jobject, jbyteArray);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_offset
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1offset
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_offset
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1offset
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_size
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1size
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_size
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1size
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_ulen
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1ulen
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_ulen
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1ulen
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_dlen
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1dlen
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_dlen
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1dlen
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_doff
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1doff
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_doff
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1doff
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_flags
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1flags
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_flags
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1flags
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: set_recno_key_data
- * Signature: (I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1recno_1key_1data
- (JNIEnv *, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: get_recno_key_data
- * Signature: ()I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1recno_1key_1data
- (JNIEnv *, jobject);
-
-/*
- * Class: com_sleepycat_db_Dbt
- * Method: init
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_init
- (JNIEnv *, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/com_sleepycat_db_xa_DbXAResource.h b/db/libdb_java/com_sleepycat_db_xa_DbXAResource.h
deleted file mode 100644
index b9bd78a2a..000000000
--- a/db/libdb_java/com_sleepycat_db_xa_DbXAResource.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_sleepycat_db_xa_DbXAResource */
-
-#ifndef _Included_com_sleepycat_db_xa_DbXAResource
-#define _Included_com_sleepycat_db_xa_DbXAResource
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _create_xid
- * Signature: (I[B[B)Lcom/sleepycat/db/xa/DbXid;
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_xa_DbXAResource__1create_1xid
- (JNIEnv *, jobject, jint, jbyteArray, jbyteArray);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _init
- * Signature: (Ljava/lang/String;II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1init
- (JNIEnv *, jobject, jstring, jint, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _close
- * Signature: (Ljava/lang/String;II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1close
- (JNIEnv *, jobject, jstring, jint, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _commit
- * Signature: (Ljavax/transaction/xa/Xid;IZ)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1commit
- (JNIEnv *, jobject, jobject, jint, jboolean);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _end
- * Signature: (Ljavax/transaction/xa/Xid;II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1end
- (JNIEnv *, jobject, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _forget
- * Signature: (Ljavax/transaction/xa/Xid;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1forget
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _prepare
- * Signature: (Ljavax/transaction/xa/Xid;I)I
- */
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_xa_DbXAResource__1prepare
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _recover
- * Signature: (II)[Ljavax/transaction/xa/Xid;
- */
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_xa_DbXAResource__1recover
- (JNIEnv *, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _rollback
- * Signature: (Ljavax/transaction/xa/Xid;I)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1rollback
- (JNIEnv *, jobject, jobject, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: _start
- * Signature: (Ljavax/transaction/xa/Xid;II)V
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1start
- (JNIEnv *, jobject, jobject, jint, jint);
-
-/*
- * Class: com_sleepycat_db_xa_DbXAResource
- * Method: xa_attach
- * Signature: (Ljavax/transaction/xa/Xid;Ljava/lang/Integer;)Lcom/sleepycat/db/xa/DbXAResource$DbAttach
- */
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_xa_DbXAResource_xa_1attach
- (JNIEnv *, jclass, jobject, jobject);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/libdb_java/db.i b/db/libdb_java/db.i
new file mode 100644
index 000000000..7053ed647
--- /dev/null
+++ b/db/libdb_java/db.i
@@ -0,0 +1,1194 @@
+%{
+#include "db_config.h"
+#include "db_int.h"
+#include "dbinc/txn.h"
+%}
+
+#if defined(SWIGJAVA)
+%include "db_java.i"
+#elif defined(SWIGCSHARP)
+%include "db_csharp.i"
+#endif
+
+typedef unsigned char u_int8_t;
+typedef unsigned long u_int32_t;
+typedef u_int32_t db_recno_t; /* Record number type. */
+typedef u_int32_t db_timeout_t; /* Type of a timeout. */
+
+typedef int db_recops;
+typedef int db_lockmode_t;
+typedef int DBTYPE;
+typedef int DB_CACHE_PRIORITY;
+
+/* Fake typedefs for SWIG */
+typedef int db_ret_t; /* An int that is mapped to a void */
+typedef int int_bool; /* An int that is mapped to a boolean */
+
+%{
+typedef int db_ret_t;
+typedef int int_bool;
+
+struct __db_lk_conflicts {
+ u_int8_t *lk_conflicts;
+ int lk_modes;
+};
+
+struct __db_out_stream {
+ void *handle;
+ int (*callback) __P((void *, const void *));
+};
+%}
+
+%rename(Db) __db;
+%rename(Dbt) __db_dbt;
+%rename(DbEnv) __db_env;
+%rename(DbLock) __db_lock_u;
+%rename(DbLogc) __db_log_cursor;
+%rename(DbLsn) __db_lsn;
+%rename(DbTxn) __db_txn;
+%rename(Dbc) __dbc;
+%rename(DbMpoolFile) __db_mpoolfile;
+
+
+struct __db; typedef struct __db DB;
+struct __db_dbt; typedef struct __db_dbt DBT;
+struct __db_env; typedef struct __db_env DB_ENV;
+struct __db_lock_u; typedef struct __db_lock_u DB_LOCK;
+struct __db_log_cursor; typedef struct __db_log_cursor DB_LOGC;
+struct __db_lsn; typedef struct __db_lsn DB_LSN;
+struct __db_txn; typedef struct __db_txn DB_TXN;
+struct __dbc; typedef struct __dbc DBC;
+struct __db_mpoolfile; typedef struct __db_mpoolfile DB_MPOOLFILE;
+
+/* Methods that allocate new objects */
+%newobject __db::join(DBC **curslist, u_int32_t flags);
+%newobject __dbc::dup(u_int32_t flags);
+%newobject __db_env::lock_get(u_int32_t locker,
+ u_int32_t flags, const DBT *object, db_lockmode_t lock_mode);
+%newobject __db_env::log_cursor(u_int32_t flags);
+
+
+struct __db
+{
+%extend {
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ __db(DB_ENV *dbenv, u_int32_t flags) {
+ DB *self;
+ errno = db_create(&self, dbenv, flags);
+ return (errno == 0) ? self : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
+ db_ret_t associate(DB_TXN *txnid, DB *secondary,
+ int (*callback)(DB *, const DBT *, const DBT *, DBT *),
+ u_int32_t flags) {
+ return self->associate(self, txnid, secondary, callback, flags);
+ }
+
+ /*
+ * Should probably be db_ret_t, but maintaining backwards compatibility
+ * for now.
+ */
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ int close(u_int32_t flags) {
+ errno = self->close(self, flags);
+ return errno;
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
+ DBC *cursor(DB_TXN *txnid, u_int32_t flags) {
+ DBC *cursorp;
+ errno = self->cursor(self, txnid, &cursorp, flags);
+ return (errno == 0) ? cursorp : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBDEL, DB2JDBENV)
+ int del(DB_TXN *txnid, DBT *key, u_int32_t flags) {
+ return self->del(self, txnid, key, flags);
+ }
+
+ /* Avoid a name clash in the generated code with __db_err */
+ %name(err)
+ JAVA_EXCEPT_NONE
+ void err_internal(int error, const char *message) {
+ self->err(self, error, message);
+ }
+
+ void errx(const char *message) {
+ self->errx(self, message);
+ }
+
+#ifndef SWIGJAVA
+ int fd() {
+ int ret;
+ errno = self->fd(self, &ret);
+ return ret;
+ }
+#endif
+
+ JAVA_EXCEPT(DB_RETOK_DBGET, DB2JDBENV)
+ int get(DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags) {
+ return self->get(self, txnid, key, data, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
+ int_bool get_byteswapped() {
+ int ret;
+ errno = self->get_byteswapped(self, &ret);
+ return ret;
+ }
+
+ jlong get_cachesize() {
+ u_int32_t gbytes, bytes;
+ errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+
+ u_int32_t get_cachesize_ncache() {
+ int ret;
+ errno = self->get_cachesize(self, NULL, NULL, &ret);
+ return ret;
+ }
+
+ const char *get_filename() {
+ const char *ret;
+ errno = self->get_dbname(self, &ret, NULL);
+ return ret;
+ }
+
+ const char *get_dbname() {
+ const char *ret;
+ errno = self->get_dbname(self, NULL, &ret);
+ return ret;
+ }
+
+ u_int32_t get_encrypt_flags() {
+ u_int32_t ret;
+ errno = self->get_encrypt_flags(self, &ret);
+ return ret;
+ }
+
+ // These methods are implemented in Java to avoid wrapping the object
+ // on every call.
+#ifndef SWIGJAVA
+ DB_ENV *get_env() {
+ DB_ENV *env;
+ errno = self->get_env(self, &env);
+ return env;
+ }
+
+ const char *get_errpfx() {
+ const char *ret;
+ errno = 0;
+ self->get_errpfx(self, &ret);
+ return ret;
+ }
+#endif
+
+ u_int32_t get_flags() {
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+
+ int get_lorder() {
+ int ret;
+ errno = self->get_lorder(self, &ret);
+ return ret;
+ }
+
+ DB_MPOOLFILE *get_mpf() {
+ errno = 0;
+ return self->mpf;
+ }
+
+ u_int32_t get_open_flags() {
+ u_int32_t ret;
+ errno = self->get_open_flags(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_pagesize() {
+ u_int32_t ret;
+ errno = self->get_pagesize(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_bt_minkey() {
+ u_int32_t ret;
+ errno = self->get_bt_minkey(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_h_ffactor() {
+ u_int32_t ret;
+ errno = self->get_h_ffactor(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_h_nelem() {
+ u_int32_t ret;
+ errno = self->get_h_nelem(self, &ret);
+ return ret;
+ }
+
+ int get_re_delim() {
+ int ret;
+ errno = self->get_re_delim(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_re_len() {
+ u_int32_t ret;
+ errno = self->get_re_len(self, &ret);
+ return ret;
+ }
+
+ int get_re_pad() {
+ int ret;
+ errno = self->get_re_pad(self, &ret);
+ return ret;
+ }
+
+ const char *get_re_source() {
+ const char *ret;
+ errno = self->get_re_source(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_q_extentsize() {
+ u_int32_t ret;
+ errno = self->get_q_extentsize(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_flags_raw() {
+ errno = 0;
+ return self->flags;
+ }
+
+ int_bool get_transactional() {
+ int ret;
+ errno = self->get_transactional(self, &ret);
+ return ret;
+ }
+
+ DBTYPE get_type() {
+ DBTYPE type;
+ errno = self->get_type(self, &type);
+ return type;
+ }
+
+ DBC *join(DBC **curslist, u_int32_t flags) {
+ DBC *dbcp;
+ errno = self->join(self, curslist, &dbcp, flags);
+ return (errno == 0) ? dbcp : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
+ db_ret_t key_range(DB_TXN *txnid, DBT *key, DB_KEY_RANGE *key_range,
+ u_int32_t flags) {
+ return self->key_range(self, txnid, key, key_range, flags);
+ }
+
+ db_ret_t open(DB_TXN *txnid, const char *file, const char *database,
+ DBTYPE type, u_int32_t flags, int mode) {
+ return self->open(self, txnid, file, database,
+ type, flags, mode);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBGET, DB2JDBENV)
+ int pget(DB_TXN *txnid, DBT *key, DBT *pkey, DBT *data,
+ u_int32_t flags) {
+ return self->pget(self, txnid, key, pkey, data, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBPUT, DB2JDBENV)
+ int put(DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags) {
+ return self->put(self, txnid, key, data, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t remove(const char *file, const char *database,
+ u_int32_t flags) {
+ return self->remove(self, file, database, flags);
+ }
+
+ db_ret_t rename(const char *file, const char *database,
+ const char *newname, u_int32_t flags) {
+ return self->rename(self, file, database, newname, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
+ db_ret_t set_append_recno(
+ int (*db_append_recno_fcn)(DB *, DBT *, db_recno_t)) {
+ return self->set_append_recno(self, db_append_recno_fcn);
+ }
+
+ db_ret_t set_bt_compare(
+ int (*bt_compare_fcn)(DB *, const DBT *, const DBT *)) {
+ return self->set_bt_compare(self, bt_compare_fcn);
+ }
+
+ db_ret_t set_bt_maxkey(u_int32_t maxkey) {
+ return self->set_bt_maxkey(self, maxkey);
+ }
+
+ db_ret_t set_bt_minkey(u_int32_t bt_minkey) {
+ return self->set_bt_minkey(self, bt_minkey);
+ }
+
+ db_ret_t set_bt_prefix(
+ size_t (*bt_prefix_fcn)(DB *, const DBT *, const DBT *)) {
+ return self->set_bt_prefix(self, bt_prefix_fcn);
+ }
+
+ db_ret_t set_cachesize(jlong bytes, int ncache) {
+ return self->set_cachesize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE), ncache);
+ }
+
+ db_ret_t set_dup_compare(
+ int (*dup_compare_fcn)(DB *, const DBT *, const DBT *)) {
+ return self->set_dup_compare(self, dup_compare_fcn);
+ }
+
+ db_ret_t set_encrypt(const char *passwd, u_int32_t flags) {
+ return self->set_encrypt(self, passwd, flags);
+ }
+
+#ifndef SWIGJAVA
+ void set_errcall(void (*db_errcall_fcn)(const char *, char *)) {
+ self->set_errcall(self, db_errcall_fcn);
+ }
+
+ void set_errpfx(const char *errpfx) {
+ self->set_errpfx(self, errpfx);
+ }
+#endif
+
+ db_ret_t set_feedback(void (*db_feedback_fcn)(DB *, int, int)) {
+ return self->set_feedback(self, db_feedback_fcn);
+ }
+
+ db_ret_t set_flags(u_int32_t flags) {
+ return self->set_flags(self, flags);
+ }
+
+ db_ret_t set_h_ffactor(u_int32_t h_ffactor) {
+ return self->set_h_ffactor(self, h_ffactor);
+ }
+
+ db_ret_t set_h_hash(
+ u_int32_t (*h_hash_fcn)(DB *, const void *, u_int32_t)) {
+ return self->set_h_hash(self, h_hash_fcn);
+ }
+
+ db_ret_t set_h_nelem(u_int32_t h_nelem) {
+ return self->set_h_nelem(self, h_nelem);
+ }
+
+ db_ret_t set_lorder(int lorder) {
+ return self->set_lorder(self, lorder);
+ }
+
+ db_ret_t set_pagesize(u_int32_t pagesize) {
+ return self->set_pagesize(self, pagesize);
+ }
+
+#ifndef SWIGJAVA
+ db_ret_t set_paniccall(void (* db_panic_fcn)(DB_ENV *, int)) {
+ return self->set_paniccall(self, db_panic_fcn);
+ }
+#endif /* SWIGJAVA */
+
+ db_ret_t set_re_delim(int re_delim) {
+ return self->set_re_delim(self, re_delim);
+ }
+
+ db_ret_t set_re_len(u_int32_t re_len) {
+ return self->set_re_len(self, re_len);
+ }
+
+ db_ret_t set_re_pad(int re_pad) {
+ return self->set_re_pad(self, re_pad);
+ }
+
+ db_ret_t set_re_source(char *source) {
+ return self->set_re_source(self, source);
+ }
+
+ db_ret_t set_q_extentsize(u_int32_t extentsize) {
+ return self->set_q_extentsize(self, extentsize);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
+ void *stat(u_int32_t flags) {
+ void *statp;
+ errno = self->stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
+ db_ret_t sync(u_int32_t flags) {
+ return self->sync(self, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DB2JDBENV)
+ int truncate(DB_TXN *txnid, u_int32_t flags) {
+ u_int32_t count;
+ errno = self->truncate(self, txnid, &count, flags);
+ return count;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, DB2JDBENV)
+ db_ret_t upgrade(const char *file, u_int32_t flags) {
+ return self->upgrade(self, file, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t verify(const char *file, const char *database,
+ struct __db_out_stream outfile, u_int32_t flags) {
+ /*
+ * We can't easily #include "dbinc/db_ext.h" because of name
+ * clashes, so we declare this explicitly.
+ */
+ extern int __db_verify_internal __P((DB *, const char *, const
+ char *, void *, int (*)(void *, const void *), u_int32_t));
+ return __db_verify_internal(self, file, database,
+ outfile.handle, outfile.callback, flags);
+ }
+}
+};
+
+
+struct __dbc
+{
+%extend {
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t close() {
+ return self->c_close(self);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DBC2JDBENV)
+ db_recno_t count(u_int32_t flags) {
+ db_recno_t count;
+ errno = self->c_count(self, &count, flags);
+ return count;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBCDEL, DBC2JDBENV)
+ int del(u_int32_t flags) {
+ return self->c_del(self, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, DBC2JDBENV)
+ DBC *dup(u_int32_t flags) {
+ DBC *newcurs;
+ errno = self->c_dup(self, &newcurs, flags);
+ return (errno == 0) ? newcurs : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBCGET, DBC2JDBENV)
+ int get(DBT* key, DBT *data, u_int32_t flags) {
+ return self->c_get(self, key, data, flags);
+ }
+
+ int pget(DBT* key, DBT* pkey, DBT *data, u_int32_t flags) {
+ return self->c_pget(self, key, pkey, data, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_DBCPUT, DBC2JDBENV)
+ int put(DBT* key, DBT *data, u_int32_t flags) {
+ return self->c_put(self, key, data, flags);
+ }
+}
+};
+
+
+struct __db_env
+{
+%extend {
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ __db_env(u_int32_t flags) {
+ DB_ENV *self = NULL;
+ errno = db_env_create(&self, flags);
+ return (errno == 0) ? self : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t close(u_int32_t flags) {
+ return self->close(self, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t dbremove(DB_TXN *txnid, const char *file, const char *database,
+ u_int32_t flags) {
+ return self->dbremove(self, txnid, file, database, flags);
+ }
+
+ db_ret_t dbrename(DB_TXN *txnid, const char *file, const char *database,
+ const char *newname, u_int32_t flags) {
+ return self->dbrename(self,
+ txnid, file, database, newname, flags);
+ }
+
+ JAVA_EXCEPT_NONE
+ void err(int error, const char *message) {
+ self->err(self, error, message);
+ }
+
+ void errx(const char *message) {
+ self->errx(self, message);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ const char **get_data_dirs() {
+ const char **ret;
+ errno = self->get_data_dirs(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_encrypt_flags() {
+ u_int32_t ret;
+ errno = self->get_encrypt_flags(self, &ret);
+ return ret;
+ }
+
+#ifndef SWIGJAVA
+ const char *get_errpfx() {
+ const char *ret;
+ errno = 0;
+ self->get_errpfx(self, &ret);
+ return ret;
+ }
+#endif
+
+ u_int32_t get_flags() {
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+
+ const char *get_home() {
+ const char *ret;
+ errno = self->get_home(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_open_flags() {
+ u_int32_t ret;
+ errno = self->get_open_flags(self, &ret);
+ return ret;
+ }
+
+ long get_shm_key() {
+ long ret;
+ errno = self->get_shm_key(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_tas_spins() {
+ u_int32_t ret;
+ errno = self->get_tas_spins(self, &ret);
+ return ret;
+ }
+
+ const char *get_tmp_dir() {
+ const char *ret;
+ errno = self->get_tmp_dir(self, &ret);
+ return ret;
+ }
+
+ int_bool get_verbose(u_int32_t which) {
+ int ret;
+ errno = self->get_verbose(self, which, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t open(const char *db_home, u_int32_t flags, int mode) {
+ return self->open(self, db_home, flags, mode);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t remove(const char *db_home, u_int32_t flags) {
+ return self->remove(self, db_home, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t set_cachesize(jlong bytes, int ncache) {
+ return self->set_cachesize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE), ncache);
+ }
+
+ db_ret_t set_data_dir(const char *dir) {
+ return self->set_data_dir(self, dir);
+ }
+
+ db_ret_t set_encrypt(const char *passwd, u_int32_t flags) {
+ return self->set_encrypt(self, passwd, flags);
+ }
+
+ JAVA_EXCEPT_NONE
+ void set_errcall(void (*db_errcall_fcn)(const char *, char *)) {
+ self->set_errcall(self, db_errcall_fcn);
+ }
+
+#ifndef SWIGJAVA
+ void set_errpfx(const char *errpfx) {
+ self->set_errpfx(self, errpfx);
+ }
+#endif
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t set_flags(u_int32_t flags, int_bool onoff) {
+ return self->set_flags(self, flags, onoff);
+ }
+
+ db_ret_t set_feedback(void (*db_feedback_fcn)(DB_ENV *, int, int)) {
+ return self->set_feedback(self, db_feedback_fcn);
+ }
+
+ db_ret_t set_mp_mmapsize(size_t mp_mmapsize) {
+ return self->set_mp_mmapsize(self, mp_mmapsize);
+ }
+
+ db_ret_t set_paniccall(void (*db_panic_fcn)(DB_ENV *, int)) {
+ return self->set_paniccall(self, db_panic_fcn);
+ }
+
+ db_ret_t set_rpc_server(void *client, char *host,
+ long cl_timeout, long sv_timeout, u_int32_t flags) {
+ return self->set_rpc_server(self, client, host,
+ cl_timeout, sv_timeout, flags);
+ }
+
+ db_ret_t set_shm_key(long shm_key) {
+ return self->set_shm_key(self, shm_key);
+ }
+
+ db_ret_t set_tas_spins(u_int32_t tas_spins) {
+ return self->set_tas_spins(self, tas_spins);
+ }
+
+ db_ret_t set_timeout(db_timeout_t timeout, u_int32_t flags) {
+ return self->set_timeout(self, timeout, flags);
+ }
+
+ db_ret_t set_tmp_dir(const char *dir) {
+ return self->set_tmp_dir(self, dir);
+ }
+
+ db_ret_t set_tx_max(u_int32_t max) {
+ return self->set_tx_max(self, max);
+ }
+
+ db_ret_t set_app_dispatch(
+ int (*tx_recover)(DB_ENV *, DBT *, DB_LSN *, db_recops)) {
+ return self->set_app_dispatch(self, tx_recover);
+ }
+
+ db_ret_t set_tx_timestamp(time_t *timestamp) {
+ return self->set_tx_timestamp(self, timestamp);
+ }
+
+ db_ret_t set_verbose(u_int32_t which, int_bool onoff) {
+ return self->set_verbose(self, which, onoff);
+ }
+
+ // Lock functions
+ //
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ struct __db_lk_conflicts get_lk_conflicts() {
+ struct __db_lk_conflicts ret;
+ errno = self->get_lk_conflicts(self,
+ (const u_int8_t **)&ret.lk_conflicts, &ret.lk_modes);
+ return ret;
+ }
+
+ u_int32_t get_lk_detect() {
+ u_int32_t ret;
+ errno = self->get_lk_detect(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_lk_max_locks() {
+ u_int32_t ret;
+ errno = self->get_lk_max_locks(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_lk_max_lockers() {
+ u_int32_t ret;
+ errno = self->get_lk_max_lockers(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_lk_max_objects() {
+ u_int32_t ret;
+ errno = self->get_lk_max_objects(self, &ret);
+ return ret;
+ }
+
+ int lock_detect(u_int32_t flags, u_int32_t atype) {
+ int aborted;
+ errno = self->lock_detect(self, flags, atype, &aborted);
+ return aborted;
+ }
+
+ DB_LOCK *lock_get(u_int32_t locker,
+ u_int32_t flags, const DBT *object, db_lockmode_t lock_mode) {
+ DB_LOCK *lock = NULL;
+ if ((errno = __os_malloc(self, sizeof (DB_LOCK), &lock)) == 0)
+ errno = self->lock_get(self, locker, flags, object,
+ lock_mode, lock);
+ return lock;
+ }
+
+ u_int32_t lock_id() {
+ u_int32_t id;
+ errno = self->lock_id(self, &id);
+ return id;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t lock_id_free(u_int32_t id) {
+ return self->lock_id_free(self, id);
+ }
+
+ db_ret_t lock_put(DB_LOCK *lock) {
+ return self->lock_put(self, lock);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_LOCK_STAT *lock_stat(u_int32_t flags) {
+ DB_LOCK_STAT *statp;
+ errno = self->lock_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+
+#ifndef SWIGJAVA
+ // For Java, this is defined in native code
+ db_ret_t lock_vec(u_int32_t locker, u_int32_t flags, DB_LOCKREQ *list,
+ int offset, int nlist)
+ {
+ DB_LOCKREQ *elistp;
+ return self->lock_vec(self, locker, flags, list + offset,
+ nlist, &elistp);
+ }
+#endif
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t set_lk_conflicts(struct __db_lk_conflicts conflicts) {
+ return self->set_lk_conflicts(self,
+ conflicts.lk_conflicts, conflicts.lk_modes);
+ }
+
+ db_ret_t set_lk_detect(u_int32_t detect) {
+ return self->set_lk_detect(self, detect);
+ }
+
+#ifndef SWIGJAVA
+ db_ret_t set_lk_max(u_int32_t lk_max) {
+ return self->set_lk_max(self, lk_max);
+ }
+#endif /* SWIGJAVA */
+
+ db_ret_t set_lk_max_lockers(u_int32_t max) {
+ return self->set_lk_max_lockers(self, max);
+ }
+
+ db_ret_t set_lk_max_locks(u_int32_t max) {
+ return self->set_lk_max_locks(self, max);
+ }
+
+ db_ret_t set_lk_max_objects(u_int32_t max) {
+ return self->set_lk_max_objects(self, max);
+ }
+
+ // Log functions
+ //
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ u_int32_t get_lg_bsize() {
+ u_int32_t ret;
+ errno = self->get_lg_bsize(self, &ret);
+ return ret;
+ }
+
+ const char *get_lg_dir() {
+ const char *ret;
+ errno = self->get_lg_dir(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_lg_max() {
+ u_int32_t ret;
+ errno = self->get_lg_max(self, &ret);
+ return ret;
+ }
+
+ u_int32_t get_lg_regionmax() {
+ u_int32_t ret;
+ errno = self->get_lg_regionmax(self, &ret);
+ return ret;
+ }
+
+ char **log_archive(u_int32_t flags) {
+ char **list;
+ errno = self->log_archive(self, &list, flags);
+ return (errno == 0) ? list : NULL;
+ }
+
+ JAVA_EXCEPT_NONE
+ static int log_compare(const DB_LSN *lsn0, const DB_LSN *lsn1) {
+ return log_compare(lsn0, lsn1);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_LOGC *log_cursor(u_int32_t flags) {
+ DB_LOGC *cursor;
+ errno = self->log_cursor(self, &cursor, flags);
+ return (errno == 0) ? cursor : NULL;
+ }
+
+ char *log_file(DB_LSN *lsn) {
+ char namebuf[MAXPATHLEN];
+ errno = self->log_file(self, lsn, namebuf, sizeof namebuf);
+ return (errno == 0) ? strdup(namebuf) : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t log_flush(const DB_LSN *lsn) {
+ return self->log_flush(self, lsn);
+ }
+
+ db_ret_t log_put(DB_LSN *lsn, const DBT *data, u_int32_t flags) {
+ return self->log_put(self, lsn, data, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_LOG_STAT *log_stat(u_int32_t flags) {
+ DB_LOG_STAT *sp;
+ errno = self->log_stat(self, &sp, flags);
+ return (errno == 0) ? sp : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t set_lg_bsize(u_int32_t lg_bsize) {
+ return self->set_lg_bsize(self, lg_bsize);
+ }
+
+ db_ret_t set_lg_dir(const char *dir) {
+ return self->set_lg_dir(self, dir);
+ }
+
+ db_ret_t set_lg_max(u_int32_t lg_max) {
+ return self->set_lg_max(self, lg_max);
+ }
+
+ db_ret_t set_lg_regionmax(u_int32_t lg_regionmax) {
+ return self->set_lg_regionmax(self, lg_regionmax);
+ }
+
+ // Memory pool functions
+ //
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ jlong get_cachesize() {
+ u_int32_t gbytes, bytes;
+ errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+
+ int get_cachesize_ncache() {
+ int ret;
+ errno = self->get_cachesize(self, NULL, NULL, &ret);
+ return ret;
+ }
+
+ size_t get_mp_mmapsize() {
+ size_t ret;
+ errno = self->get_mp_mmapsize(self, &ret);
+ return ret;
+ }
+
+ DB_MPOOL_STAT *memp_stat(u_int32_t flags) {
+ DB_MPOOL_STAT *mp_stat;
+ errno = self->memp_stat(self, &mp_stat, NULL, flags);
+ return (errno == 0) ? mp_stat : NULL;
+ }
+
+ DB_MPOOL_FSTAT **memp_fstat(u_int32_t flags) {
+ DB_MPOOL_FSTAT **mp_fstat;
+ errno = self->memp_stat(self, NULL, &mp_fstat, flags);
+ return (errno == 0) ? mp_fstat : NULL;
+ }
+
+ int memp_trickle(int percent) {
+ int ret;
+ errno = self->memp_trickle(self, percent, &ret);
+ return ret;
+ }
+
+ // Transaction functions
+ //
+ u_int32_t get_tx_max() {
+ u_int32_t ret;
+ errno = self->get_tx_max(self, &ret);
+ return ret;
+ }
+
+ time_t get_tx_timestamp() {
+ time_t ret;
+ errno = self->get_tx_timestamp(self, &ret);
+ return ret;
+ }
+
+ db_timeout_t get_timeout(u_int32_t flag) {
+ db_timeout_t ret;
+ errno = self->get_timeout(self, &ret, flag);
+ return ret;
+ }
+
+ DB_TXN *txn_begin(DB_TXN *parent, u_int32_t flags) {
+ DB_TXN *tid;
+ errno = self->txn_begin(self, parent, &tid, flags);
+ return (errno == 0) ? tid : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t txn_checkpoint(u_int32_t kbyte, u_int32_t min,
+ u_int32_t flags) {
+ return self->txn_checkpoint(self, kbyte, min, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_PREPLIST *txn_recover(int count, u_int32_t flags) {
+ DB_PREPLIST *preplist;
+ long retcount;
+
+ /* Add a NULL element to terminate the array. */
+ if ((errno = __os_malloc(self,
+ (count + 1) * sizeof(DB_PREPLIST), &preplist)) != 0)
+ return NULL;
+
+ if ((errno = self->txn_recover(self, preplist, count,
+ &retcount, flags)) != 0) {
+ __os_free(self, preplist);
+ return NULL;
+ }
+
+ preplist[retcount].txn = NULL;
+ return preplist;
+ }
+
+ DB_TXN_STAT *txn_stat(u_int32_t flags) {
+ DB_TXN_STAT *statp;
+ errno = self->txn_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+
+ // Replication functions
+ //
+ jlong get_rep_limit() {
+ u_int32_t gbytes, bytes;
+ errno = self->get_rep_limit(self, &gbytes, &bytes);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+
+ int rep_elect(int nsites, int priority, u_int32_t timeout) {
+ int id;
+ errno = self->rep_elect(self, nsites, priority, timeout, &id);
+ return id;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_REPPMSG, JDBENV)
+ int rep_process_message(DBT *control, DBT *rec, int *envid, DB_LSN *ret_lsn) {
+ return self->rep_process_message(self, control, rec, envid, ret_lsn);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t rep_start(DBT *cdata, u_int32_t flags) {
+ return self->rep_start(self, cdata, flags);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, JDBENV)
+ DB_REP_STAT *rep_stat(u_int32_t flags) {
+ DB_REP_STAT *statp;
+ errno = self->rep_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, JDBENV)
+ db_ret_t set_rep_limit(jlong bytes) {
+ return self->set_rep_limit(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE));
+ }
+
+ db_ret_t set_rep_transport(int envid,
+ int (*send)(DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t)) {
+ return self->set_rep_transport(self, envid, send);
+ }
+
+ // Convert DB errors to strings
+ JAVA_EXCEPT_NONE
+ static const char *strerror(int error) {
+ return db_strerror(error);
+ }
+
+ // Versioning information
+ static int get_version_major() {
+ return DB_VERSION_MAJOR;
+ }
+
+ static int get_version_minor() {
+ return DB_VERSION_MINOR;
+ }
+
+ static int get_version_patch() {
+ return DB_VERSION_PATCH;
+ }
+
+ static const char *get_version_string() {
+ return DB_VERSION_STRING;
+ }
+}
+};
+
+
+struct __db_txn
+{
+%extend {
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t abort() {
+ return self->abort(self);
+ }
+
+ db_ret_t commit(u_int32_t flags) {
+ return self->commit(self, flags);
+ }
+
+ db_ret_t discard(u_int32_t flags) {
+ return self->discard(self, flags);
+ }
+
+ JAVA_EXCEPT_NONE
+ u_int32_t id() {
+ return self->id(self);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, TXN2JDBENV)
+ db_ret_t prepare(u_int8_t *gid) {
+ return self->prepare(self, gid);
+ }
+
+ db_ret_t set_timeout(db_timeout_t timeout, u_int32_t flags) {
+ return self->set_timeout(self, timeout, flags);
+ }
+}
+};
+
+
+struct __db_log_cursor
+{
+%extend {
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t close(u_int32_t flags) {
+ return self->close(self, flags);
+ }
+
+ JAVA_EXCEPT(DB_RETOK_LGGET, NULL)
+ int get(DB_LSN *lsn, DBT *data, u_int32_t flags) {
+ return self->get(self, lsn, data, flags);
+ }
+}
+};
+
+
+struct __db_lock_u
+{
+%extend {
+ JAVA_EXCEPT_NONE
+ ~__db_lock_u() {
+ __os_free(NULL, self);
+ }
+}
+};
+
+
+struct __db_lsn
+{
+%extend {
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ __db_lsn(u_int32_t file, u_int32_t offset) {
+ DB_LSN *self = NULL;
+ errno = __os_malloc(NULL, sizeof (DB_LSN), &self);
+ if (errno == 0) {
+ self->file = file;
+ self->offset = offset;
+ }
+ return self;
+ }
+
+ JAVA_EXCEPT_NONE
+ ~__db_lsn() {
+ __os_free(NULL, self);
+ }
+
+ u_int32_t get_file() {
+ return self->file;
+ }
+
+ u_int32_t get_offset() {
+ return self->offset;
+ }
+}
+};
+
+struct __db_mpoolfile
+{
+%extend {
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ DB_CACHE_PRIORITY get_priority() {
+ DB_CACHE_PRIORITY ret;
+ errno = self->get_priority(self, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t set_priority(DB_CACHE_PRIORITY priority){
+ return self->set_priority(self, priority);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ u_int32_t get_flags() {
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t set_flags(u_int32_t flags, int_bool onoff) {
+ return self->set_flags(self, flags, onoff);
+ }
+
+ JAVA_EXCEPT_ERRNO(DB_RETOK_STD, NULL)
+ jlong get_maxsize() {
+ u_int32_t gbytes, bytes;
+ errno = self->get_maxsize(self, &gbytes, &bytes);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+
+ // New method - no backwards compatibility version
+ JAVA_EXCEPT(DB_RETOK_STD, NULL)
+ db_ret_t set_maxsize(jlong bytes) {
+ return self->set_maxsize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE));
+ }
+}
+};
diff --git a/db/libdb_java/db_java.i b/db/libdb_java/db_java.i
new file mode 100644
index 000000000..98c8dcffc
--- /dev/null
+++ b/db/libdb_java/db_java.i
@@ -0,0 +1,568 @@
+%module db_java
+
+%include "various.i"
+%include "typemaps.i"
+
+%include "java_util.i"
+%include "java_except.i"
+%include "java_typemaps.i"
+%include "java_stat.i"
+%include "java_callbacks.i"
+
+/*
+ * No finalize methods in general - most classes have "destructor" methods
+ * that applications must call explicitly.
+ */
+%typemap(javafinalize) SWIGTYPE ""
+
+/*
+ * These are the exceptions - when there is no "close" method, we need to free
+ * the native part at finalization time. These are exactly the cases where C
+ * applications manage the memory for the handles.
+ */
+%typemap(javafinalize) DbLsn, DbLock %{
+ protected void finalize() {
+ try {
+ delete();
+ } catch(Exception e) {
+ System.err.println("Exception during finalization: " + e);
+ e.printStackTrace(System.err);
+ }
+ }
+%}
+
+// Destructors
+%rename(open0) open;
+%rename(close0) close;
+%rename(remove0) remove;
+%rename(rename0) rename;
+%rename(verify0) verify;
+%rename(abort0) abort;
+%rename(commit0) commit;
+%rename(discard0) discard;
+
+// Special case methods
+%rename(set_tx_timestamp0) set_tx_timestamp;
+%rename(setFeedbackHandler) set_feedback;
+%rename(setErrorHandler) set_errcall;
+%rename(setPanicHandler) set_paniccall;
+%rename(get) pget;
+
+// Extra code in the Java classes
+%typemap(javacode) DbEnv %{
+ // Internally, the JNI layer creates a global reference to each DbEnv,
+ // which can potentially be different to this. We keep a copy here so
+ // we can clean up after destructors.
+ private Object dbenv_ref;
+ private DbAppDispatch app_dispatch_handler;
+ private DbEnvFeedbackHandler env_feedback_handler;
+ private DbErrorHandler error_handler;
+ private DbPanicHandler panic_handler;
+ private DbRepTransport rep_transport_handler;
+ private String errpfx;
+
+ public static class RepProcessMessage {
+ public int envid;
+ }
+
+ // Called by the public DbEnv constructor and for private environments
+ // by the Db constructor.
+ void initialize() {
+ dbenv_ref = db_java.initDbEnvRef0(this, this);
+ // Start with System.err as the default error stream.
+ set_error_stream(System.err);
+ }
+
+ void cleanup() {
+ swigCPtr = 0;
+ db_java.deleteRef0(dbenv_ref);
+ dbenv_ref = null;
+ }
+
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ private final int handle_app_dispatch(Dbt dbt, DbLsn lsn, int recops) {
+ return app_dispatch_handler.appDispatch(this, dbt, lsn, recops);
+ }
+
+ private final void handle_env_feedback(int opcode, int percent) {
+ env_feedback_handler.feedback(this, opcode, percent);
+ }
+
+ private final void handle_error(String msg) {
+ error_handler.error(this.errpfx, msg);
+ }
+
+ private final void handle_panic(DbException e) {
+ panic_handler.panic(this, e);
+ }
+
+ private final int handle_rep_transport(Dbt control, Dbt rec,
+ DbLsn lsn, int flags, int envid)
+ throws DbException {
+ return rep_transport_handler.send(this, control, rec, lsn,
+ flags, envid);
+ }
+
+ public void lock_vec(/*u_int32_t*/ int locker, int flags,
+ DbLockRequest[] list, int offset, int count) throws DbException {
+ db_javaJNI.DbEnv_lock_vec(swigCPtr, locker, flags, list,
+ offset, count);
+ }
+
+ public void open(String db_home, int flags, int mode)
+ throws DbException, java.io.FileNotFoundException {
+ /* Java is always threaded */
+ flags |= Db.DB_THREAD;
+ open0(db_home, flags, mode);
+ }
+
+ public synchronized void remove(String db_home, int flags)
+ throws DbException, java.io.FileNotFoundException {
+ try {
+ remove0(db_home, flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #set_cachesize(long,int)}
+ */
+ public void set_cachesize(int gbytes, int bytes, int ncache)
+ throws DbException {
+ set_cachesize((long)gbytes * Db.GIGABYTE + bytes, ncache);
+ }
+
+ public String get_errpfx() {
+ return this.errpfx;
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #setErrorHandler(DbErrorHandler)}
+ */
+ public void set_errcall(DbErrcall db_errcall_fcn) throws DbException {
+ final DbErrcall ferrcall = db_errcall_fcn;
+ try {
+ setErrorHandler(new DbErrorHandler() {
+ public void error(String prefix, String buffer) {
+ ferrcall.errcall(prefix, buffer);
+ }
+ });
+ }
+ catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_error_stream does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
+ }
+ }
+
+ public void set_error_stream(java.io.OutputStream stream) {
+ final java.io.PrintWriter pw = new java.io.PrintWriter(stream);
+ try {
+ setErrorHandler(new DbErrorHandler() {
+ public void error(String prefix, String buf) {
+ if (prefix != null)
+ pw.print(prefix + ": ");
+ pw.println(buf);
+ pw.flush();
+ }
+ });
+ }
+ catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_error_stream does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
+ }
+ }
+
+ public void set_errpfx(String errpfx) {
+ this.errpfx = errpfx;
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #setFeedbackHandler(DbEnvFeedbackHandler)}
+ */
+ public void set_feedback(DbEnvFeedback feedback) throws DbException {
+ final DbEnvFeedback ffeedback = feedback;
+ setFeedbackHandler(new DbEnvFeedbackHandler() {
+ public void feedback(DbEnv env, int opcode, int percent) {
+ ffeedback.feedback(env, opcode, percent);
+ }
+ });
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #set_rep_limit(long)}
+ */
+ public void set_rep_limit(int gbytes, int bytes)
+ throws DbException {
+ set_rep_limit((long)gbytes * Db.GIGABYTE + bytes);
+ }
+
+ public void set_tx_timestamp(java.util.Date timestamp) {
+ set_tx_timestamp0(timestamp.getTime()/1000);
+ }
+%}
+
+%typemap(javacode) Db %{
+ /* package */ static final int GIGABYTE = 1 << 30;
+ // Internally, the JNI layer creates a global reference to each Db,
+ // which can potentially be different to this. We keep a copy here so
+ // we can clean up after destructors.
+ private Object db_ref;
+ private DbEnv dbenv;
+ private boolean private_dbenv;
+ private DbAppendRecno append_recno_handler;
+ private DbBtreeCompare bt_compare_handler;
+ private DbBtreePrefix bt_prefix_handler;
+ private DbDupCompare dup_compare_handler;
+ private DbFeedbackHandler db_feedback_handler;
+ private DbHash h_hash_handler;
+ private DbSecondaryKeyCreate seckey_create_handler;
+
+ // Called by the Db constructor
+ private void initialize(DbEnv dbenv) {
+ if (dbenv == null) {
+ private_dbenv = true;
+ dbenv = db_java.getDbEnv0(this);
+ dbenv.initialize();
+ }
+ this.dbenv = dbenv;
+ db_ref = db_java.initDbRef0(this, this);
+ }
+
+ private void cleanup() {
+ swigCPtr = 0;
+ db_java.deleteRef0(db_ref);
+ db_ref = null;
+ if (private_dbenv)
+ dbenv.cleanup();
+ dbenv = null;
+ }
+
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ public DbEnv get_env() throws DbException {
+ return dbenv;
+ }
+
+ private final void handle_append_recno(Dbt data, int recno)
+ throws DbException {
+ append_recno_handler.dbAppendRecno(this, data, recno);
+ }
+
+ private final int handle_bt_compare(Dbt dbt1, Dbt dbt2) {
+ return bt_compare_handler.compare(this, dbt1, dbt2);
+ }
+
+ private final int handle_bt_prefix(Dbt dbt1, Dbt dbt2) {
+ return bt_prefix_handler.prefix(this, dbt1, dbt2);
+ }
+
+ private final void handle_db_feedback(int opcode, int percent) {
+ db_feedback_handler.feedback(this, opcode, percent);
+ }
+
+ private final int handle_dup_compare(Dbt dbt1, Dbt dbt2) {
+ return dup_compare_handler.compareDuplicates(this, dbt1, dbt2);
+ }
+
+ private final int handle_h_hash(byte[] data, int len) {
+ return h_hash_handler.hash(this, data, len);
+ }
+
+ private final int handle_seckey_create(Dbt key, Dbt data, Dbt result)
+ throws DbException {
+ return seckey_create_handler.secondaryKeyCreate(
+ this, key, data, result);
+ }
+
+ /**
+ * Determine if a database was configured to store data.
+ * The only algorithm currently available is AES.
+ *
+ * @see #set_encrypt
+ * @return true if the database contents are encrypted.
+ */
+ public boolean isEncrypted() {
+ return (get_encrypt_flags() != 0);
+ }
+
+ public void open(DbTxn txnid, String file, String database,
+ int type, int flags, int mode)
+ throws DbException, java.io.FileNotFoundException,
+ DbDeadlockException, DbLockNotGrantedException {
+ /* Java is always threaded */
+ flags |= Db.DB_THREAD;
+ open0(txnid, file, database, type, flags, mode);
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #get(DbTxn,Dbt,Dbt,Dbt,int)}
+ */
+ public int pget(DbTxn txnid, Dbt key, Dbt pkey, Dbt data, int flags)
+ throws DbException {
+ return get(txnid, key, pkey, data, flags);
+ }
+
+ public synchronized void remove(String file, String database, int flags)
+ throws DbException, java.io.FileNotFoundException {
+ try {
+ remove0(file, database, flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ public synchronized void rename(String file, String database,
+ String newname, int flags)
+ throws DbException, java.io.FileNotFoundException {
+ try {
+ rename0(file, database, newname, flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ public synchronized void verify(String file, String database,
+ java.io.OutputStream outfile, int flags)
+ throws DbException, java.io.FileNotFoundException {
+ try {
+ verify0(file, database, outfile, flags);
+ } finally {
+ cleanup();
+ }
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #set_cachesize(long,int)}
+ */
+ public void set_cachesize(int gbytes, int bytes, int ncache)
+ throws DbException {
+ set_cachesize((long)gbytes * Db.GIGABYTE + bytes, ncache);
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #setErrorHandler(DbErrorHandler)}
+ */
+ public void set_errcall(DbErrcall db_errcall_fcn) {
+ final DbErrcall ferrcall = db_errcall_fcn;
+ try {
+ dbenv.setErrorHandler(new DbErrorHandler() {
+ public void error(String prefix, String str) {
+ ferrcall.errcall(prefix, str);
+ }
+ });
+ }
+ catch (DbException dbe) {
+ // setErrorHandler throws an exception,
+ // but set_errcall does not.
+ // If it does happen, report it.
+ System.err.println("Exception during DbEnv.setErrorHandler: " + dbe);
+ dbe.printStackTrace(System.err);
+ }
+
+ }
+
+ public void setErrorHandler(DbErrorHandler db_errcall_fcn) {
+ dbenv.setErrorHandler(db_errcall_fcn);
+ }
+
+ public String get_errpfx() {
+ return dbenv.get_errpfx();
+ }
+
+ public void set_errpfx(String errpfx) {
+ dbenv.set_errpfx(errpfx);
+ }
+
+ public void set_error_stream(java.io.OutputStream stream) {
+ dbenv.set_error_stream(stream);
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #setFeedbackHandler(DbFeedbackHandler)}
+ */
+ public void set_feedback(DbFeedback feedback) throws DbException {
+ final DbFeedback ffeedback = feedback;
+ setFeedbackHandler(new DbFeedbackHandler() {
+ public void feedback(Db db, int opcode, int percent) {
+ ffeedback.feedback(db, opcode, percent);
+ }
+ });
+ }
+
+ public void setPanicHandler(DbPanicHandler db_panic_fcn) throws DbException {
+ dbenv.setPanicHandler(db_panic_fcn);
+ }
+
+ // Don't remove these - special comments used by s_java to add constants
+ // BEGIN-JAVA-SPECIAL-CONSTANTS
+ // END-JAVA-SPECIAL-CONSTANTS
+
+ static {
+ // BEGIN-JAVA-CONSTANT-INITIALIZATION
+ // END-JAVA-CONSTANT-INITIALIZATION
+ }
+%}
+
+%typemap(javacode) Dbc %{
+ public synchronized void close() throws DbException {
+ try {
+ close0();
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+ /**
+ * @deprecated Replaced in Berkeley DB 4.2 by {@link #get(Dbt,Dbt,Dbt,int)}
+ */
+ public int pget(Dbt key, Dbt pkey, Dbt data, int flags)
+ throws DbException {
+ return get(key, pkey, data, flags);
+ }
+%}
+
+%typemap(javacode) DbLogc %{
+ public synchronized void close(int flags) throws DbException {
+ try {
+ close0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+%}
+
+%typemap(javacode) DbTxn %{
+ public void abort() throws DbException {
+ try {
+ abort0();
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+ public void commit(int flags) throws DbException {
+ try {
+ commit0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+ public void discard(int flags) throws DbException {
+ try {
+ discard0(flags);
+ } finally {
+ swigCPtr = 0;
+ }
+ }
+
+ // We override Object.equals because it is possible for
+ // the Java API to create multiple DbTxns that reference
+ // the same underlying object. This can happen for example
+ // during DbEnv.txn_recover().
+ //
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+
+ if (obj != null && (obj instanceof DbTxn)) {
+ DbTxn that = (DbTxn)obj;
+ return (this.swigCPtr == that.swigCPtr);
+ }
+ return false;
+ }
+
+ // We must override Object.hashCode whenever we override
+ // Object.equals() to enforce the maxim that equal objects
+ // have the same hashcode.
+ //
+ public int hashCode()
+ {
+ return ((int)swigCPtr ^ (int)(swigCPtr >> 32));
+ }
+%}
+
+%native(initDbEnvRef0) jobject initDbEnvRef0(DB_ENV *self, void *handle);
+%native(initDbRef0) jobject initDbRef0(DB *self, void *handle);
+%native(deleteRef0) void deleteRef0(jobject ref);
+%native(getDbEnv0) DB_ENV *getDbEnv0(DB *self);
+
+%{
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_initDbEnvRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ DB_ENV *self = *(DB_ENV **)&jarg1;
+ COMPQUIET(jcls, NULL);
+
+ DB_ENV_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
+ self->set_errpfx(self, (const char*)self);
+ return (jobject)DB_ENV_INTERNAL(self);
+}
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_initDbRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ DB *self = *(DB **)&jarg1;
+ COMPQUIET(jcls, NULL);
+
+ DB_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
+ return (jobject)DB_INTERNAL(self);
+}
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_deleteRef0(
+ JNIEnv *jenv, jclass jcls, jobject jref) {
+ COMPQUIET(jcls, NULL);
+
+ if (jref != NULL)
+ (*jenv)->DeleteGlobalRef(jenv, jref);
+}
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_getDbRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ DB *self = *(DB **)&jarg1;
+ COMPQUIET(jcls, NULL);
+ COMPQUIET(jenv, NULL);
+
+ return (jobject)DB_INTERNAL(self);
+}
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_getDbEnv0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ DB *self = *(DB **)&jarg1;
+ jlong env_cptr;
+
+ COMPQUIET(jenv, NULL);
+ COMPQUIET(jcls, NULL);
+
+ *(DB_ENV **)&env_cptr = self->dbenv;
+ return env_cptr;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_sleepycat_db_DbUtil_is_1big_1endian(JNIEnv *jenv, jclass clazz)
+{
+ COMPQUIET(jenv, NULL);
+ COMPQUIET(clazz, NULL);
+
+ return (__db_isbigendian() ? JNI_TRUE : JNI_FALSE);
+}
+%}
diff --git a/db/libdb_java/db_java_wrap.c b/db/libdb_java/db_java_wrap.c
new file mode 100644
index 000000000..db42beaf3
--- /dev/null
+++ b/db/libdb_java/db_java_wrap.c
@@ -0,0 +1,7322 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.19
+ *
+ * This file is not intended to be easily readable and contains a number of
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG
+ * interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+
+#if defined(__GNUC__)
+ typedef long long __int64; /*For gcc on Windows */
+#endif
+#include <jni.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Support for throwing Java exceptions */
+typedef enum {
+ SWIG_JavaOutOfMemoryError = 1,
+ SWIG_JavaIOException,
+ SWIG_JavaRuntimeException,
+ SWIG_JavaIndexOutOfBoundsException,
+ SWIG_JavaArithmeticException,
+ SWIG_JavaIllegalArgumentException,
+ SWIG_JavaNullPointerException,
+ SWIG_JavaUnknownError
+} SWIG_JavaExceptionCodes;
+
+typedef struct {
+ SWIG_JavaExceptionCodes code;
+ const char *java_exception;
+} SWIG_JavaExceptions_t;
+
+#if defined(SWIG_NOINCLUDE)
+void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg);
+#else
+
+
+void SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
+ jclass excep;
+ static const SWIG_JavaExceptions_t java_exceptions[] = {
+ { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
+ { SWIG_JavaIOException, "java/io/IOException" },
+ { SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
+ { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
+ { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
+ { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
+ { SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
+ { SWIG_JavaUnknownError, "java/lang/UnknownError" },
+ { (SWIG_JavaExceptionCodes)0, "java/lang/UnknownError" } };
+ const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
+
+ while (except_ptr->code != code && except_ptr->code)
+ except_ptr++;
+
+ (*jenv)->ExceptionClear(jenv);
+ excep = (*jenv)->FindClass(jenv, except_ptr->java_exception);
+ if (excep)
+ (*jenv)->ThrowNew(jenv, excep, msg);
+}
+
+
+#endif
+
+
+#include "db_config.h"
+#include "db_int.h"
+#include "dbinc/txn.h"
+
+
+/* don't use SWIG's array handling - save code space */
+#define SWIG_NOINCLUDE 1
+
+#define DB_ENV_INTERNAL(dbenv) ((dbenv)->api2_internal)
+#define DB_INTERNAL(db) ((db)->api_internal)
+
+#define DB_PKG "com/sleepycat/db/"
+
+/* Forward declarations */
+static int __dbj_throw(JNIEnv *jenv, int err, const char *msg, jobject obj, jobject jdbenv);
+
+/* Global data - JVM handle, classes, fields and methods */
+static JavaVM *javavm;
+
+static jclass db_class, dbc_class, dbenv_class, dbt_class, dblsn_class;
+static jclass dbpreplist_class, dbtxn_class;
+static jclass keyrange_class;
+static jclass btree_stat_class, hash_stat_class, lock_stat_class;
+static jclass log_stat_class, mpool_stat_class, mpool_fstat_class;
+static jclass queue_stat_class, rep_stat_class, txn_stat_class;
+static jclass txn_active_class;
+static jclass lock_class, lockreq_class, rep_processmsg_class;
+static jclass dbex_class, deadex_class, lockex_class, memex_class;
+static jclass runrecex_class;
+static jclass filenotfoundex_class, illegalargex_class;
+static jclass bytearray_class, string_class, outputstream_class;
+
+static jfieldID dbc_cptr_fid;
+static jfieldID dbt_data_fid, dbt_size_fid, dbt_ulen_fid, dbt_dlen_fid;
+static jfieldID dbt_doff_fid, dbt_flags_fid, dbt_offset_fid;
+static jfieldID kr_less_fid, kr_equal_fid, kr_greater_fid;
+static jfieldID lock_cptr_fid;
+static jfieldID lockreq_op_fid, lockreq_mode_fid, lockreq_timeout_fid;
+static jfieldID lockreq_obj_fid, lockreq_lock_fid;
+static jfieldID rep_processmsg_envid;
+static jfieldID txn_stat_active_fid;
+
+static jmethodID dbenv_construct, dbt_construct, dblsn_construct;
+static jmethodID dbpreplist_construct, dbtxn_construct;
+static jmethodID btree_stat_construct, hash_stat_construct;
+static jmethodID lock_stat_construct, log_stat_construct, mpool_stat_construct;
+static jmethodID mpool_fstat_construct, queue_stat_construct;
+static jmethodID rep_stat_construct, txn_stat_construct, txn_active_construct;
+static jmethodID dbex_construct, deadex_construct, lockex_construct;
+static jmethodID memex_construct, memex_update_method, runrecex_construct;
+static jmethodID filenotfoundex_construct, illegalargex_construct;
+static jmethodID lock_construct;
+
+static jmethodID app_dispatch_method, errcall_method, env_feedback_method;
+static jmethodID paniccall_method, rep_transport_method;
+static jmethodID append_recno_method, bt_compare_method, bt_prefix_method;
+static jmethodID db_feedback_method, dup_compare_method, h_hash_method;
+static jmethodID seckey_create_method;
+
+static jmethodID outputstream_write_method;
+
+const struct {
+ jclass *cl;
+ const char *name;
+} all_classes[] = {
+ { &dbenv_class, DB_PKG "DbEnv" },
+ { &db_class, DB_PKG "Db" },
+ { &dbc_class, DB_PKG "Dbc" },
+ { &dbt_class, DB_PKG "Dbt" },
+ { &dblsn_class, DB_PKG "DbLsn" },
+ { &dbpreplist_class, DB_PKG "DbPreplist" },
+ { &dbtxn_class, DB_PKG "DbTxn" },
+
+ { &btree_stat_class, DB_PKG "DbBtreeStat" },
+ { &hash_stat_class, DB_PKG "DbHashStat" },
+ { &lock_stat_class, DB_PKG "DbLockStat" },
+ { &log_stat_class, DB_PKG "DbLogStat" },
+ { &mpool_fstat_class, DB_PKG "DbMpoolFStat" },
+ { &mpool_stat_class, DB_PKG "DbMpoolStat" },
+ { &queue_stat_class, DB_PKG "DbQueueStat" },
+ { &rep_stat_class, DB_PKG "DbRepStat" },
+ { &txn_stat_class, DB_PKG "DbTxnStat" },
+ { &txn_active_class, DB_PKG "DbTxnStat$Active" },
+
+ { &keyrange_class, DB_PKG "DbKeyRange" },
+ { &lock_class, DB_PKG "DbLock" },
+ { &lockreq_class, DB_PKG "DbLockRequest" },
+ { &rep_processmsg_class, DB_PKG "DbEnv$RepProcessMessage" },
+
+ { &dbex_class, DB_PKG "DbException" },
+ { &deadex_class, DB_PKG "DbDeadlockException" },
+ { &lockex_class, DB_PKG "DbLockNotGrantedException" },
+ { &memex_class, DB_PKG "DbMemoryException" },
+ { &runrecex_class, DB_PKG "DbRunRecoveryException" },
+ { &filenotfoundex_class, "java/io/FileNotFoundException" },
+ { &illegalargex_class, "java/lang/IllegalArgumentException" },
+
+ { &bytearray_class, "[B" },
+ { &string_class, "java/lang/String" },
+ { &outputstream_class, "java/io/OutputStream" }
+};
+
+const struct {
+ jfieldID *fid;
+ jclass *cl;
+ const char *name;
+ const char *sig;
+} all_fields[] = {
+ { &dbc_cptr_fid, &dbc_class, "swigCPtr", "J" },
+
+ { &dbt_data_fid, &dbt_class, "data", "[B" },
+ { &dbt_size_fid, &dbt_class, "size", "I" },
+ { &dbt_ulen_fid, &dbt_class, "ulen", "I" },
+ { &dbt_dlen_fid, &dbt_class, "dlen", "I" },
+ { &dbt_doff_fid, &dbt_class, "doff", "I" },
+ { &dbt_flags_fid, &dbt_class, "flags", "I" },
+ { &dbt_offset_fid, &dbt_class, "offset", "I" },
+
+ { &kr_less_fid, &keyrange_class, "less", "D" },
+ { &kr_equal_fid, &keyrange_class, "equal", "D" },
+ { &kr_greater_fid, &keyrange_class, "greater", "D" },
+
+ { &lock_cptr_fid, &lock_class, "swigCPtr", "J" },
+
+ { &lockreq_op_fid, &lockreq_class, "op", "I" },
+ { &lockreq_mode_fid, &lockreq_class, "mode", "I" },
+ { &lockreq_timeout_fid, &lockreq_class, "timeout", "I" },
+ { &lockreq_obj_fid, &lockreq_class, "obj", "L" DB_PKG "Dbt;" },
+ { &lockreq_lock_fid, &lockreq_class, "lock", "L" DB_PKG "DbLock;" },
+
+ { &rep_processmsg_envid, &rep_processmsg_class, "envid", "I" },
+ { &txn_stat_active_fid, &txn_stat_class, "st_txnarray",
+ "[L" DB_PKG "DbTxnStat$Active;" }
+};
+
+const struct {
+ jmethodID *mid;
+ jclass *cl;
+ const char *name;
+ const char *sig;
+} all_methods[] = {
+ { &dbenv_construct, &dbenv_class, "<init>", "(JZ)V" },
+ { &dbt_construct, &dbt_class, "<init>", "()V" },
+ { &dblsn_construct, &dblsn_class, "<init>", "(JZ)V" },
+ { &dbpreplist_construct, &dbpreplist_class, "<init>",
+ "(L" DB_PKG "DbTxn;[B)V" },
+ { &dbtxn_construct, &dbtxn_class, "<init>", "(JZ)V" },
+
+ { &btree_stat_construct, &btree_stat_class, "<init>", "()V" },
+ { &hash_stat_construct, &hash_stat_class, "<init>", "()V" },
+ { &lock_stat_construct, &lock_stat_class, "<init>", "()V" },
+ { &log_stat_construct, &log_stat_class, "<init>", "()V" },
+ { &mpool_stat_construct, &mpool_stat_class, "<init>", "()V" },
+ { &mpool_fstat_construct, &mpool_fstat_class, "<init>", "()V" },
+ { &queue_stat_construct, &queue_stat_class, "<init>", "()V" },
+ { &rep_stat_construct, &rep_stat_class, "<init>", "()V" },
+ { &txn_stat_construct, &txn_stat_class, "<init>", "()V" },
+ { &txn_active_construct, &txn_active_class, "<init>", "()V" },
+
+ { &dbex_construct, &dbex_class, "<init>", "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &deadex_construct, &deadex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &lockex_construct, &lockex_class, "<init>",
+ "(Ljava/lang/String;IIL" DB_PKG "Dbt;L" DB_PKG "DbLock;IL" DB_PKG "DbEnv;)V" },
+ { &memex_construct, &memex_class, "<init>",
+ "(Ljava/lang/String;L" DB_PKG "Dbt;IL" DB_PKG "DbEnv;)V" },
+ { &memex_update_method, &memex_class, "update_dbt",
+ "(L" DB_PKG "Dbt;)V" },
+ { &runrecex_construct, &runrecex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &filenotfoundex_construct, &filenotfoundex_class, "<init>",
+ "(Ljava/lang/String;)V" },
+ { &illegalargex_construct, &illegalargex_class, "<init>",
+ "(Ljava/lang/String;)V" },
+
+ { &lock_construct, &lock_class, "<init>", "(JZ)V" },
+
+ { &app_dispatch_method, &dbenv_class, "handle_app_dispatch",
+ "(L" DB_PKG "Dbt;L" DB_PKG "DbLsn;I)I" },
+ { &env_feedback_method, &dbenv_class, "handle_env_feedback", "(II)V" },
+ { &errcall_method, &dbenv_class, "handle_error",
+ "(Ljava/lang/String;)V" },
+ { &paniccall_method, &dbenv_class, "handle_panic",
+ "(L" DB_PKG "DbException;)V" },
+ { &rep_transport_method, &dbenv_class, "handle_rep_transport",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;L" DB_PKG "DbLsn;II)I" },
+
+ { &append_recno_method, &db_class, "handle_append_recno",
+ "(L" DB_PKG "Dbt;I)V" },
+ { &bt_compare_method, &db_class, "handle_bt_compare",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &bt_prefix_method, &db_class, "handle_bt_prefix",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &db_feedback_method, &db_class, "handle_db_feedback", "(II)V" },
+ { &dup_compare_method, &db_class, "handle_dup_compare",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &h_hash_method, &db_class, "handle_h_hash", "([BI)I" },
+ { &seckey_create_method, &db_class, "handle_seckey_create",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+
+ { &outputstream_write_method, &outputstream_class, "write", "([BII)V" }
+};
+
+#define NELEM(x) (sizeof (x) / sizeof (x[0]))
+
+JNIEXPORT void JNICALL
+Java_com_sleepycat_db_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz)
+{
+ jclass cl;
+ unsigned int i;
+
+ COMPQUIET(clazz, NULL);
+
+ if ((*jenv)->GetJavaVM(jenv, &javavm) != 0) {
+ __db_err(NULL, "Cannot get Java VM");
+ return;
+ }
+
+ for (i = 0; i < NELEM(all_classes); i++) {
+ cl = (*jenv)->FindClass(jenv, all_classes[i].name);
+ if (cl == NULL) {
+ __db_err(NULL,
+ "Failed to load class %s - check CLASSPATH",
+ all_classes[i].name);
+ return;
+ }
+
+ /*
+ * Wrap classes in GlobalRefs so we keep the reference between
+ * calls.
+ */
+ *all_classes[i].cl = (jclass)(*jenv)->NewGlobalRef(jenv, cl);
+
+ if (*all_classes[i].cl == NULL) {
+ __db_err(NULL,
+ "Failed to create a global reference for class %s",
+ all_classes[i].name);
+ return;
+ }
+ }
+
+
+ /* Get field IDs */
+ for (i = 0; i < NELEM(all_fields); i++) {
+ *all_fields[i].fid = (*jenv)->GetFieldID(jenv,
+ *all_fields[i].cl, all_fields[i].name, all_fields[i].sig);
+
+ if (*all_fields[i].fid == NULL) {
+ __db_err(NULL, "Failed to look up field %s",
+ all_fields[i].name);
+ return;
+ }
+ }
+
+ /* Get method IDs */
+ for (i = 0; i < NELEM(all_methods); i++) {
+ *all_methods[i].mid = (*jenv)->GetMethodID(jenv,
+ *all_methods[i].cl, all_methods[i].name,
+ all_methods[i].sig);
+
+ if (*all_methods[i].mid == NULL) {
+ __db_err(NULL, "Failed to look up method %s",
+ all_methods[i].name);
+ return;
+ }
+ }
+}
+
+static JNIEnv *__dbj_get_jnienv(void)
+{
+ /*
+ * Note: Different versions of the JNI disagree on the signature for
+ * AttachCurrentThread. The most recent documentation seems to say
+ * that (JNIEnv **) is correct, but newer JNIs seem to use (void **),
+ * oddly enough.
+ */
+#ifdef JNI_VERSION_1_2
+ void *jenv = 0;
+#else
+ JNIEnv *jenv = 0;
+#endif
+
+ /*
+ * This should always succeed, as we are called via some Java activity.
+ * I think therefore I am (a thread).
+ */
+ if ((*javavm)->AttachCurrentThread(javavm, &jenv, 0) != 0)
+ return (0);
+
+ return ((JNIEnv *)jenv);
+}
+
+static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_LSN *lsn)
+{
+ jlong jptr;
+ DB_LSN *lsn_copy;
+ int err;
+
+ if ((err = __os_malloc(NULL, sizeof(DB_LSN), &lsn_copy)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, NULL);
+ return NULL;
+ }
+ memset(lsn_copy, 0, sizeof(DB_LSN));
+ *lsn_copy = *lsn;
+ /* Magic to convert a pointer to a long - must match SWIG */
+ *(DB_LSN **)&jptr = lsn_copy;
+ return (*jenv)->NewObject(jenv, dblsn_class, dblsn_construct,
+ jptr, JNI_TRUE);
+}
+
+
+/*
+ * Macros to find the Java DbEnv object for methods in various classes.
+ * Note that "arg1" is from the code SWIG generates for the "this"/"self".
+ */
+#define JDBENV (arg1 ? (jobject)DB_ENV_INTERNAL(arg1) : NULL)
+#define DB2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbenv))
+#define DBC2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbp->dbenv))
+#define TXN2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->mgrp->dbenv))
+
+
+
+static jthrowable __dbj_get_except(JNIEnv *jenv,
+ int err, const char *msg, jobject obj, jobject jdbenv) {
+ jobject jmsg;
+
+ if (msg == NULL)
+ msg = db_strerror(err);
+
+ jmsg = (*jenv)->NewStringUTF(jenv, msg);
+
+ switch (err) {
+ case EINVAL:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ illegalargex_class, illegalargex_construct, jmsg);
+
+ case ENOENT:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ filenotfoundex_class, filenotfoundex_construct, jmsg);
+
+ case ENOMEM:
+ return (jthrowable)(*jenv)->NewObject(jenv, memex_class,
+ memex_construct, jmsg, obj, err, jdbenv);
+
+ case DB_RUNRECOVERY:
+ return (jthrowable)(*jenv)->NewObject(jenv, runrecex_class,
+ runrecex_construct, jmsg, err, jdbenv);
+
+ case DB_LOCK_DEADLOCK:
+ return (jthrowable)(*jenv)->NewObject(jenv, deadex_class,
+ deadex_construct, jmsg, err, jdbenv);
+
+ case DB_LOCK_NOTGRANTED:
+ return (jthrowable)(*jenv)->NewObject(jenv, lockex_class,
+ lockex_construct, jmsg, 0, 0, NULL, NULL, 0, jdbenv);
+
+ default:
+ return (jthrowable)(*jenv)->NewObject(jenv, dbex_class,
+ dbex_construct, jmsg, err, jdbenv);
+ }
+}
+
+static int __dbj_throw(JNIEnv *jenv, int err, const char *msg, jobject obj, jobject jdbenv)
+{
+ jthrowable t;
+
+ /* If an exception is pending, ignore requests to throw a new one. */
+ if ((*jenv)->ExceptionOccurred(jenv) == NULL) {
+ if ((t = __dbj_get_except(jenv, err, msg, obj, jdbenv)) == NULL) {
+ /*
+ * This is a problem - something went wrong creating an
+ * exception. We have to assume there is an exception
+ * created by the JVM that is pending as a result
+ * (e.g., OutOfMemoryError), but we don't want to lose
+ * this error, so we just call __db_err here.
+ */
+ if (msg == NULL)
+ msg = db_strerror(err);
+
+ __db_err(NULL, "Couldn't create exception for: '%s'",
+ msg);
+ } else
+ (*jenv)->Throw(jenv, t);
+ }
+
+ return (err);
+}
+
+
+typedef struct __dbt_locked {
+ DBT dbt;
+ jbyteArray jarr;
+ jbyte *orig_data;
+ jint offset;
+ u_int32_t orig_size;
+} DBT_LOCKED;
+
+static int __dbj_dbt_copyin(
+ JNIEnv *jenv, DBT_LOCKED *ldbt, jobject jdbt)
+{
+ DBT *dbt;
+ jsize array_len;
+
+ dbt = &ldbt->dbt;
+ ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
+ ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv,
+ jdbt, dbt_data_fid);
+ if (ldbt->jarr == NULL) {
+ ldbt->orig_data = dbt->data = NULL;
+ array_len = 0;
+ } else {
+ ldbt->orig_data = (*jenv)->GetByteArrayElements(jenv,
+ ldbt->jarr, NULL);
+ array_len = (*jenv)->GetArrayLength(jenv, ldbt->jarr);
+ dbt->data = ldbt->orig_data + ldbt->offset;
+ }
+
+ dbt->size = (*jenv)->GetIntField(jenv, jdbt, dbt_size_fid);
+ ldbt->orig_size = dbt->size;
+ dbt->ulen = (*jenv)->GetIntField(jenv, jdbt, dbt_ulen_fid);
+ dbt->dlen = (*jenv)->GetIntField(jenv, jdbt, dbt_dlen_fid);
+ dbt->doff = (*jenv)->GetIntField(jenv, jdbt, dbt_doff_fid);
+ dbt->flags = (*jenv)->GetIntField(jenv, jdbt, dbt_flags_fid);
+
+ /*
+ * We don't support DB_DBT_REALLOC - map anything that's not USERMEM to
+ * MALLOC.
+ */
+ if (!F_ISSET(dbt, DB_DBT_USERMEM)) {
+ F_CLR(dbt, DB_DBT_REALLOC);
+ F_SET(dbt, DB_DBT_MALLOC);
+ }
+
+ /*
+ * Some code makes the assumption that if dbt->size is non-zero, there
+ * is data to copy from dbt->data. We may have set dbt->size to a
+ * non-zero integer above but decided not to point dbt->data at
+ * anything.
+ *
+ * Clean up the dbt fields so we don't run into trouble. (Note that
+ * doff, dlen, and flags all may contain meaningful values.)
+ */
+ if (dbt->data == NULL)
+ dbt->size = dbt->ulen = 0;
+
+ /* Verify other parameters */
+ if (ldbt->offset < 0)
+ return (__dbj_throw(jenv, EINVAL, "Dbt.offset illegal", NULL, NULL));
+ else if ((jsize)(dbt->size + ldbt->offset) > array_len)
+ return (__dbj_throw(jenv, EINVAL,
+ "Dbt.size + Dbt.offset greater than array length", NULL, NULL));
+ else if ((jint)dbt->doff < 0)
+ return (__dbj_throw(jenv, EINVAL, "Dbt.doff illegal", NULL, NULL));
+ else if ((jsize)dbt->ulen > array_len)
+ return (__dbj_throw(jenv, EINVAL,
+ "Dbt.ulen greater than array length", NULL, NULL));
+
+ return (0);
+}
+
+static void __dbj_dbt_copyout(
+ JNIEnv *jenv, const DBT *dbt, jbyteArray *jarr, jobject jdbt)
+{
+ jbyteArray newarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
+ if (newarr == NULL)
+ return; /* An exception is pending */
+ (*jenv)->SetByteArrayRegion(jenv, newarr, 0, (jsize)dbt->size,
+ (jbyte *)dbt->data);
+ (*jenv)->SetObjectField(jenv, jdbt, dbt_data_fid, newarr);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+ if (jarr != NULL)
+ *jarr = newarr;
+ else
+ (*jenv)->DeleteLocalRef(jenv, newarr);
+}
+
+static void __dbj_dbt_release(
+ JNIEnv *jenv, jobject jdbt, DBT *dbt, DBT_LOCKED *ldbt) {
+ jthrowable t;
+
+ if (ldbt->jarr != NULL) {
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt->jarr,
+ ldbt->orig_data, 0);
+ }
+
+ if (dbt->size != ldbt->orig_size)
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+
+ if (F_ISSET(dbt, DB_DBT_USERMEM) &&
+ dbt->size > dbt->ulen &&
+ (t = (*jenv)->ExceptionOccurred(jenv)) != NULL &&
+ (*jenv)->IsInstanceOf(jenv, t, memex_class)) {
+ (*jenv)->CallNonvirtualVoidMethod(jenv, t, memex_class,
+ memex_update_method, jdbt);
+ /*
+ * We have to rethrow the exception because calling into Java
+ * clears it.
+ */
+ (*jenv)->Throw(jenv, t);
+ }
+ if (ldbt->dbt.data != ldbt->orig_data + ldbt->offset) {
+ __dbj_dbt_copyout(jenv, &ldbt->dbt, NULL, jdbt);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_offset_fid, 0);
+ __os_ufree(NULL, ldbt->dbt.data);
+ }
+}
+
+
+struct __dbj_verify_data {
+ JNIEnv *jenv;
+ jobject streamobj;
+ jbyteArray bytes;
+ int nbytes;
+};
+
+static int __dbj_verify_callback(void *handle, const void *str_arg) {
+ char *str;
+ struct __dbj_verify_data *vd;
+ int len;
+ JNIEnv *jenv;
+
+ str = (char *)str_arg;
+ vd = (struct __dbj_verify_data *)handle;
+ jenv = vd->jenv;
+ len = strlen(str) + 1;
+ if (len > vd->nbytes) {
+ vd->nbytes = len;
+ if (vd->bytes != NULL)
+ (*jenv)->DeleteLocalRef(jenv, vd->bytes);
+ if ((vd->bytes = (*jenv)->NewByteArray(jenv, (jsize)len))
+ == NULL)
+ return (ENOMEM);
+ }
+
+ if (vd->bytes != NULL) {
+ (*jenv)->SetByteArrayRegion(jenv, vd->bytes, 0, (jsize)len,
+ (jbyte*)str);
+ (*jenv)->CallVoidMethod(jenv, vd->streamobj,
+ outputstream_write_method, vd->bytes, 0, len - 1);
+ }
+
+ if ((*jenv)->ExceptionOccurred(jenv) != NULL)
+ return (EIO);
+
+ return (0);
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1vec
+ (JNIEnv *jenv, jclass jcls, jlong jdbenvp, jint locker,
+ jint flags, jobjectArray list, jint offset, jint count) {
+ DB_ENV *dbenv;
+ DB_LOCKREQ *lockreq;
+ DB_LOCKREQ *prereq; /* preprocessed requests */
+ DB_LOCKREQ *failedreq;
+ DB_LOCK *lockp;
+ DBT_LOCKED *locked_dbts;
+ int err, alloc_err, i;
+ size_t bytesize, ldbtsize;
+ jobject jlockreq;
+ db_lockop_t op;
+ jobject jobj, jlock, jdbenv;
+ jlong jlockp;
+ int completed;
+
+ COMPQUIET(jcls, NULL);
+ dbenv = *(DB_ENV **)&jdbenvp;
+ jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ if (dbenv == NULL) {
+ __dbj_throw(jenv, EINVAL, "null object", NULL, jdbenv);
+ return;
+ }
+
+ if ((*jenv)->GetArrayLength(jenv, list) < offset + count) {
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec array not large enough", NULL, jdbenv);
+ goto out0;
+ }
+
+ bytesize = sizeof(DB_LOCKREQ) * count;
+ if ((err = __os_malloc(dbenv, bytesize, &lockreq)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+ goto out0;
+ }
+ memset(lockreq, 0, bytesize);
+
+ ldbtsize = sizeof(DBT_LOCKED) * count;
+ if ((err = __os_malloc(dbenv, ldbtsize, &locked_dbts)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+ goto out1;
+ }
+ memset(locked_dbts, 0, ldbtsize);
+ prereq = &lockreq[0];
+
+ /* fill in the lockreq array */
+ for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++) {
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
+ offset + i);
+ if (jlockreq == NULL) {
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec list entry is null", NULL, jdbenv);
+ goto out2;
+ }
+ op = (*jenv)->GetIntField(jenv, jlockreq, lockreq_op_fid);
+ prereq->op = op;
+
+ switch (op) {
+ case DB_LOCK_GET_TIMEOUT:
+ /* Needed: mode, timeout, obj. Returned: lock. */
+ prereq->op = (*jenv)->GetIntField(jenv, jlockreq,
+ lockreq_timeout_fid);
+ /* FALLTHROUGH */
+ case DB_LOCK_GET:
+ /* Needed: mode, obj. Returned: lock. */
+ prereq->mode = (*jenv)->GetIntField(jenv, jlockreq,
+ lockreq_mode_fid);
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ if ((err =
+ __dbj_dbt_copyin(jenv, &locked_dbts[i], jobj)) != 0)
+ goto out2;
+ prereq->obj = &locked_dbts[i].dbt;
+ break;
+ case DB_LOCK_PUT:
+ /* Needed: lock. Ignored: mode, obj. */
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ if (jlock == NULL ||
+ (jlockp = (*jenv)->GetLongField(jenv, jlock,
+ lock_cptr_fid)) == 0L) {
+ __dbj_throw(jenv, EINVAL,
+ "DbLockRequest lock field is NULL", NULL, jdbenv);
+ goto out2;
+ }
+ lockp = *(DB_LOCK **)&jlockp;
+ prereq->lock = *lockp;
+ break;
+ case DB_LOCK_PUT_ALL:
+ case DB_LOCK_TIMEOUT:
+ /* Needed: (none). Ignored: lock, mode, obj. */
+ break;
+ case DB_LOCK_PUT_OBJ:
+ /* Needed: obj. Ignored: lock, mode. */
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ if ((err =
+ __dbj_dbt_copyin(jenv, &locked_dbts[i], jobj)) != 0)
+ goto out2;
+ prereq->obj = &locked_dbts[i].dbt;
+ break;
+ default:
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec bad op value", NULL, jdbenv);
+ goto out2;
+ }
+ }
+
+ err = dbenv->lock_vec(dbenv, (u_int32_t)locker, (u_int32_t)flags,
+ lockreq, count, &failedreq);
+ if (err == 0)
+ completed = count;
+ else
+ completed = failedreq - lockreq;
+
+ /* do post processing for any and all requests that completed */
+ for (i = 0; i < completed; i++) {
+ op = lockreq[i].op;
+ if (op == DB_LOCK_PUT) {
+ /*
+ * After a successful put, the DbLock can no longer be
+ * used, so we release the storage related to it.
+ */
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv,
+ list, i + offset);
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ jlockp = (*jenv)->GetLongField(jenv, jlock,
+ lock_cptr_fid);
+ lockp = *(DB_LOCK **)&jlockp;
+ __os_free(NULL, lockp);
+ (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
+ (jlong)0);
+ }
+ else if (op == DB_LOCK_GET) {
+ /*
+ * Store the lock that was obtained. We need to create
+ * storage for it since the lockreq array only exists
+ * during this method call.
+ */
+ if ((alloc_err =
+ __os_malloc(dbenv, sizeof(DB_LOCK), &lockp)) != 0) {
+ __dbj_throw(jenv, alloc_err, NULL, NULL, jdbenv);
+ goto out2;
+ }
+
+ *lockp = lockreq[i].lock;
+ *(DB_LOCK **)&jlockp = lockp;
+
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv,
+ list, i + offset);
+ jlock = (*jenv)->NewObject(jenv, lock_class,
+ lock_construct, jlockp, JNI_TRUE);
+ if (jlock == NULL)
+ goto out2; /* An exception is pending */
+ (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
+ jlockp);
+ (*jenv)->SetObjectField(jenv, jlockreq,
+ lockreq_lock_fid, jlock);
+ }
+ }
+
+ /* If one of the locks was not granted, build the exception now. */
+ if (err == DB_LOCK_NOTGRANTED && i < count) {
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
+ i + offset);
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ (*jenv)->Throw(jenv,
+ (*jenv)->NewObject(jenv, lockex_class, lockex_construct,
+ (*jenv)->NewStringUTF(jenv, "DbEnv.lock_vec incomplete"),
+ lockreq[i].op, lockreq[i].mode, jobj, jlock, i, jdbenv));
+ } else if (err != 0)
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+
+out2: /* Free the dbts that we have locked */
+ for (i = 0 ; i < (prereq - lockreq); i++) {
+ if (((op = lockreq[i].op) == DB_LOCK_GET ||
+ op == DB_LOCK_PUT_OBJ) &&
+ locked_dbts[i].jarr != NULL)
+ (*jenv)->ReleaseByteArrayElements(jenv,
+ locked_dbts[i].jarr, locked_dbts[i].orig_data, 0);
+ }
+ __os_free(dbenv, locked_dbts);
+out1: __os_free(dbenv, lockreq);
+out0: return;
+}
+
+
+/*
+ * These macros are used by code generated by the s_java script.
+ */
+#define JAVADB_STAT_INT(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetIntField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "I"), \
+ (jint)statp->name)
+
+#define JAVADB_STAT_STRING(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, \
+ "Ljava/lang/String;"), \
+ (*jenv)->NewStringUTF(jenv, statp->name))
+
+#define JAVADB_STAT_LSN(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "L" DB_PKG "DbLsn;"), \
+ __dbj_wrap_DB_LSN(jenv, &statp->name))
+
+#define JAVADB_STAT_LONG(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetLongField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "J"), \
+ (jlong)statp->name)
+
+#define JAVADB_STAT_XID(jenv, cl, jobj, statp, name) { \
+ jobject jarr = (*jenv)->NewByteArray(jenv, (jsize)DB_XIDDATASIZE); \
+ (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)DB_XIDDATASIZE, \
+ (jbyte *)statp->name); \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "[B"), jarr); \
+ }
+
+/*
+ * We build the active list separately.
+ */
+#define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, name) \
+ do {} while(0)
+
+#include "java_stat_auto.c"
+
+
+/*
+ * We do a dance so that the prefix in the C API points to the DB_ENV.
+ * The real prefix is stored as a Java string in the DbEnv object.
+ */
+static void __dbj_error(const char *prefix, char *msg)
+{
+ DB_ENV *dbenv = (DB_ENV *)prefix;
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ errcall_method, (*jenv)->NewStringUTF(jenv, msg));
+}
+
+static void __dbj_env_feedback(DB_ENV *dbenv, int opcode, int percent)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ env_feedback_method, opcode, percent);
+}
+
+static void __dbj_panic(DB_ENV *dbenv, int err)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ paniccall_method, __dbj_get_except(jenv, err, NULL, NULL, jdbenv));
+}
+
+static int __dbj_app_dispatch(DB_ENV *dbenv,
+ DBT *dbt, DB_LSN *lsn, db_recops recops)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ jobject jdbt, jlsn;
+ jbyteArray jdbtarr;
+ int ret;
+
+ jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
+ if (jdbt == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, lsn);
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ app_dispatch_method, jdbt, jlsn, recops);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr);
+ (*jenv)->DeleteLocalRef(jenv, jdbt);
+ if (jlsn != NULL)
+ (*jenv)->DeleteLocalRef(jenv, jlsn);
+
+ return (ret);
+}
+
+static int __dbj_rep_transport(DB_ENV *dbenv,
+ const DBT *control, const DBT *rec, const DB_LSN *lsn, int envid,
+ u_int32_t flags)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ jobject jcontrol, jrec, jlsn;
+ jbyteArray jcontrolarr, jrecarr;
+ int ret;
+
+ jcontrol = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jrec = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jcontrol == NULL || jrec == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, control, &jcontrolarr, jcontrol);
+ __dbj_dbt_copyout(jenv, rec, &jrecarr, jrec);
+ jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, (DB_LSN *)lsn);
+
+ if (jcontrolarr == NULL || jrecarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ rep_transport_method, jcontrol, jrec, jlsn, envid, flags);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jrecarr);
+ (*jenv)->DeleteLocalRef(jenv, jcontrolarr);
+ (*jenv)->DeleteLocalRef(jenv, jrec);
+ (*jenv)->DeleteLocalRef(jenv, jcontrol);
+ if (jlsn != NULL)
+ (*jenv)->DeleteLocalRef(jenv, jlsn);
+
+ return (ret);
+}
+
+static int __dbj_seckey_create(DB *db,
+ const DBT *key, const DBT *data, DBT *result)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jkey, jdata, jresult;
+ jbyteArray jkeyarr, jdataarr;
+ DBT_LOCKED lresult;
+ void *data_copy;
+ int ret;
+
+ jkey = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdata = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jresult = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jkey == NULL || jdata == NULL || jresult == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
+ __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
+
+ if (jkeyarr == NULL || jdataarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ seckey_create_method, jkey, jdata, jresult);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ goto err;
+ }
+
+ if ((ret = __dbj_dbt_copyin(jenv, &lresult, jresult)) != 0)
+ goto err;
+
+ if (lresult.jarr != NULL) {
+ /*
+ * If there's data, we need to make a copy because we can't
+ * keep the Java array pinned.
+ */
+ memset(result, 0, sizeof (DBT));
+ *result = lresult.dbt;
+ if ((ret = __os_umalloc(NULL, result->size, &data_copy)) == 0)
+ memcpy(data_copy, result->data, result->size);
+ (*jenv)->ReleaseByteArrayElements(jenv, lresult.jarr,
+ lresult.orig_data, 0);
+ (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
+ result->data = data_copy;
+ result->flags |= DB_DBT_APPMALLOC;
+ }
+
+err: (*jenv)->DeleteLocalRef(jenv, jkeyarr);
+ (*jenv)->DeleteLocalRef(jenv, jkey);
+ (*jenv)->DeleteLocalRef(jenv, jdataarr);
+ (*jenv)->DeleteLocalRef(jenv, jdata);
+ (*jenv)->DeleteLocalRef(jenv, jresult);
+
+ return (ret);
+}
+
+static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt;
+ DBT_LOCKED lresult;
+ void *data_copy;
+ jbyteArray jdbtarr;
+ int ret;
+
+ jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
+ if (jdbtarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = 0;
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
+ append_recno_method, jdbt, recno);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ goto err;
+ }
+
+ if ((ret = __dbj_dbt_copyin(jenv, &lresult, jdbt)) != 0)
+ goto err;
+
+ if (lresult.jarr != NULL) {
+ /*
+ * If there's data, we need to make a copy because we can't
+ * keep the Java array pinned.
+ */
+ *dbt = lresult.dbt;
+ if ((ret = __os_umalloc(db->dbenv, dbt->size, &data_copy)) == 0)
+ memcpy(data_copy, dbt->data, dbt->size);
+ (*jenv)->ReleaseByteArrayElements(jenv, lresult.jarr,
+ lresult.orig_data, 0);
+ (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
+ dbt->data = data_copy;
+ dbt->flags |= DB_DBT_APPMALLOC;
+ }
+
+err: (*jenv)->DeleteLocalRef(jenv, jdbtarr);
+ (*jenv)->DeleteLocalRef(jenv, jdbt);
+
+ return (ret);
+}
+
+static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ bt_compare_method, jdbt1, jdbt2);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static size_t __dbj_bt_prefix(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ bt_prefix_method, jdbt1, jdbt2);
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ dup_compare_method, jdbt1, jdbt2);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static void __dbj_db_feedback(DB *db, int opcode, int percent)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
+ db_feedback_method, opcode, percent);
+}
+
+static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jbyteArray jarr = (*jenv)->NewByteArray(jenv, (jsize)len);
+ int ret;
+
+ if (jarr == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)len, (jbyte *)data);
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ h_hash_method, jarr, len);
+
+ (*jenv)->DeleteLocalRef(jenv, jarr);
+
+ return (ret);
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_initDbEnvRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ DB_ENV *self = *(DB_ENV **)&jarg1;
+ COMPQUIET(jcls, NULL);
+
+ DB_ENV_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
+ self->set_errpfx(self, (const char*)self);
+ return (jobject)DB_ENV_INTERNAL(self);
+}
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_initDbRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ DB *self = *(DB **)&jarg1;
+ COMPQUIET(jcls, NULL);
+
+ DB_INTERNAL(self) = (void *)(*jenv)->NewGlobalRef(jenv, jarg2);
+ return (jobject)DB_INTERNAL(self);
+}
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_deleteRef0(
+ JNIEnv *jenv, jclass jcls, jobject jref) {
+ COMPQUIET(jcls, NULL);
+
+ if (jref != NULL)
+ (*jenv)->DeleteGlobalRef(jenv, jref);
+}
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_getDbRef0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ DB *self = *(DB **)&jarg1;
+ COMPQUIET(jcls, NULL);
+ COMPQUIET(jenv, NULL);
+
+ return (jobject)DB_INTERNAL(self);
+}
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_getDbEnv0(
+ JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ DB *self = *(DB **)&jarg1;
+ jlong env_cptr;
+
+ COMPQUIET(jenv, NULL);
+ COMPQUIET(jcls, NULL);
+
+ *(DB_ENV **)&env_cptr = self->dbenv;
+ return env_cptr;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_com_sleepycat_db_DbUtil_is_1big_1endian(JNIEnv *jenv, jclass clazz)
+{
+ COMPQUIET(jenv, NULL);
+ COMPQUIET(clazz, NULL);
+
+ return (__db_isbigendian() ? JNI_TRUE : JNI_FALSE);
+}
+
+
+typedef int db_ret_t;
+typedef int int_bool;
+
+struct __db_lk_conflicts {
+ u_int8_t *lk_conflicts;
+ int lk_modes;
+};
+
+struct __db_out_stream {
+ void *handle;
+ int (*callback) __P((void *, const void *));
+};
+
+struct __db *new___db(DB_ENV *dbenv,u_int32_t flags){
+ DB *self;
+ errno = db_create(&self, dbenv, flags);
+ return (errno == 0) ? self : NULL;
+ }
+static db_ret_t __db_associate(struct __db *self,DB_TXN *txnid,DB *secondary,int (*callback)(DB *,DBT const *,DBT const *,DBT *),u_int32_t flags){
+ return self->associate(self, txnid, secondary, callback, flags);
+ }
+static int __db_close(struct __db *self,u_int32_t flags){
+ errno = self->close(self, flags);
+ return errno;
+ }
+static DBC *__db_cursor(struct __db *self,DB_TXN *txnid,u_int32_t flags){
+ DBC *cursorp;
+ errno = self->cursor(self, txnid, &cursorp, flags);
+ return (errno == 0) ? cursorp : NULL;
+ }
+static int __db_del(struct __db *self,DB_TXN *txnid,DBT *key,u_int32_t flags){
+ return self->del(self, txnid, key, flags);
+ }
+static void __db_err_internal(struct __db *self,int error,char const *message){
+ self->err(self, error, message);
+ }
+static void __db_errx(struct __db *self,char const *message){
+ self->errx(self, message);
+ }
+static int __db_get__SWIG_0(struct __db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
+ return self->get(self, txnid, key, data, flags);
+ }
+static int_bool __db_get_byteswapped(struct __db *self){
+ int ret;
+ errno = self->get_byteswapped(self, &ret);
+ return ret;
+ }
+static jlong __db_get_cachesize(struct __db *self){
+ u_int32_t gbytes, bytes;
+ errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+static u_int32_t __db_get_cachesize_ncache(struct __db *self){
+ int ret;
+ errno = self->get_cachesize(self, NULL, NULL, &ret);
+ return ret;
+ }
+static char const *__db_get_filename(struct __db *self){
+ const char *ret;
+ errno = self->get_dbname(self, &ret, NULL);
+ return ret;
+ }
+static char const *__db_get_dbname(struct __db *self){
+ const char *ret;
+ errno = self->get_dbname(self, NULL, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_encrypt_flags(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_encrypt_flags(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_flags(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+static int __db_get_lorder(struct __db *self){
+ int ret;
+ errno = self->get_lorder(self, &ret);
+ return ret;
+ }
+static DB_MPOOLFILE *__db_get_mpf(struct __db *self){
+ errno = 0;
+ return self->mpf;
+ }
+static u_int32_t __db_get_open_flags(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_open_flags(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_pagesize(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_pagesize(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_bt_minkey(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_bt_minkey(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_h_ffactor(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_h_ffactor(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_h_nelem(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_h_nelem(self, &ret);
+ return ret;
+ }
+static int __db_get_re_delim(struct __db *self){
+ int ret;
+ errno = self->get_re_delim(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_re_len(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_re_len(self, &ret);
+ return ret;
+ }
+static int __db_get_re_pad(struct __db *self){
+ int ret;
+ errno = self->get_re_pad(self, &ret);
+ return ret;
+ }
+static char const *__db_get_re_source(struct __db *self){
+ const char *ret;
+ errno = self->get_re_source(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_q_extentsize(struct __db *self){
+ u_int32_t ret;
+ errno = self->get_q_extentsize(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_get_flags_raw(struct __db *self){
+ errno = 0;
+ return self->flags;
+ }
+static int_bool __db_get_transactional(struct __db *self){
+ int ret;
+ errno = self->get_transactional(self, &ret);
+ return ret;
+ }
+static DBTYPE __db_get_type(struct __db *self){
+ DBTYPE type;
+ errno = self->get_type(self, &type);
+ return type;
+ }
+static DBC *__db_join(struct __db *self,DBC **curslist,u_int32_t flags){
+ DBC *dbcp;
+ errno = self->join(self, curslist, &dbcp, flags);
+ return (errno == 0) ? dbcp : NULL;
+ }
+static db_ret_t __db_key_range(struct __db *self,DB_TXN *txnid,DBT *key,DB_KEY_RANGE *key_range,u_int32_t flags){
+ return self->key_range(self, txnid, key, key_range, flags);
+ }
+static db_ret_t __db_open(struct __db *self,DB_TXN *txnid,char const *file,char const *database,DBTYPE type,u_int32_t flags,int mode){
+ return self->open(self, txnid, file, database,
+ type, flags, mode);
+ }
+static int __db_pget__SWIG_1(struct __db *self,DB_TXN *txnid,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
+ return self->pget(self, txnid, key, pkey, data, flags);
+ }
+static int __db_put(struct __db *self,DB_TXN *txnid,DBT *key,DBT *data,u_int32_t flags){
+ return self->put(self, txnid, key, data, flags);
+ }
+static db_ret_t __db_remove(struct __db *self,char const *file,char const *database,u_int32_t flags){
+ return self->remove(self, file, database, flags);
+ }
+static db_ret_t __db_rename(struct __db *self,char const *file,char const *database,char const *newname,u_int32_t flags){
+ return self->rename(self, file, database, newname, flags);
+ }
+static db_ret_t __db_set_append_recno(struct __db *self,int (*db_append_recno_fcn)(DB *,DBT *,db_recno_t)){
+ return self->set_append_recno(self, db_append_recno_fcn);
+ }
+static db_ret_t __db_set_bt_compare(struct __db *self,int (*bt_compare_fcn)(DB *,DBT const *,DBT const *)){
+ return self->set_bt_compare(self, bt_compare_fcn);
+ }
+static db_ret_t __db_set_bt_maxkey(struct __db *self,u_int32_t maxkey){
+ return self->set_bt_maxkey(self, maxkey);
+ }
+static db_ret_t __db_set_bt_minkey(struct __db *self,u_int32_t bt_minkey){
+ return self->set_bt_minkey(self, bt_minkey);
+ }
+static db_ret_t __db_set_bt_prefix(struct __db *self,size_t (*bt_prefix_fcn)(DB *,DBT const *,DBT const *)){
+ return self->set_bt_prefix(self, bt_prefix_fcn);
+ }
+static db_ret_t __db_set_cachesize(struct __db *self,jlong bytes,int ncache){
+ return self->set_cachesize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE), ncache);
+ }
+static db_ret_t __db_set_dup_compare(struct __db *self,int (*dup_compare_fcn)(DB *,DBT const *,DBT const *)){
+ return self->set_dup_compare(self, dup_compare_fcn);
+ }
+static db_ret_t __db_set_encrypt(struct __db *self,char const *passwd,u_int32_t flags){
+ return self->set_encrypt(self, passwd, flags);
+ }
+static db_ret_t __db_set_feedback(struct __db *self,void (*db_feedback_fcn)(DB *,int,int)){
+ return self->set_feedback(self, db_feedback_fcn);
+ }
+static db_ret_t __db_set_flags(struct __db *self,u_int32_t flags){
+ return self->set_flags(self, flags);
+ }
+static db_ret_t __db_set_h_ffactor(struct __db *self,u_int32_t h_ffactor){
+ return self->set_h_ffactor(self, h_ffactor);
+ }
+static db_ret_t __db_set_h_hash(struct __db *self,u_int32_t (*h_hash_fcn)(DB *,void const *,u_int32_t)){
+ return self->set_h_hash(self, h_hash_fcn);
+ }
+static db_ret_t __db_set_h_nelem(struct __db *self,u_int32_t h_nelem){
+ return self->set_h_nelem(self, h_nelem);
+ }
+static db_ret_t __db_set_lorder(struct __db *self,int lorder){
+ return self->set_lorder(self, lorder);
+ }
+static db_ret_t __db_set_pagesize(struct __db *self,u_int32_t pagesize){
+ return self->set_pagesize(self, pagesize);
+ }
+static db_ret_t __db_set_re_delim(struct __db *self,int re_delim){
+ return self->set_re_delim(self, re_delim);
+ }
+static db_ret_t __db_set_re_len(struct __db *self,u_int32_t re_len){
+ return self->set_re_len(self, re_len);
+ }
+static db_ret_t __db_set_re_pad(struct __db *self,int re_pad){
+ return self->set_re_pad(self, re_pad);
+ }
+static db_ret_t __db_set_re_source(struct __db *self,char *source){
+ return self->set_re_source(self, source);
+ }
+static db_ret_t __db_set_q_extentsize(struct __db *self,u_int32_t extentsize){
+ return self->set_q_extentsize(self, extentsize);
+ }
+static void *__db_stat(struct __db *self,u_int32_t flags){
+ void *statp;
+ errno = self->stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+static db_ret_t __db_sync(struct __db *self,u_int32_t flags){
+ return self->sync(self, flags);
+ }
+static int __db_truncate(struct __db *self,DB_TXN *txnid,u_int32_t flags){
+ u_int32_t count;
+ errno = self->truncate(self, txnid, &count, flags);
+ return count;
+ }
+static db_ret_t __db_upgrade(struct __db *self,char const *file,u_int32_t flags){
+ return self->upgrade(self, file, flags);
+ }
+static db_ret_t __db_verify(struct __db *self,char const *file,char const *database,struct __db_out_stream outfile,u_int32_t flags){
+ /*
+ * We can't easily #include "dbinc/db_ext.h" because of name
+ * clashes, so we declare this explicitly.
+ */
+ extern int __db_verify_internal __P((DB *, const char *, const
+ char *, void *, int (*)(void *, const void *), u_int32_t));
+ return __db_verify_internal(self, file, database,
+ outfile.handle, outfile.callback, flags);
+ }
+static db_ret_t __dbc_close(struct __dbc *self){
+ return self->c_close(self);
+ }
+static db_recno_t __dbc_count(struct __dbc *self,u_int32_t flags){
+ db_recno_t count;
+ errno = self->c_count(self, &count, flags);
+ return count;
+ }
+static int __dbc_del(struct __dbc *self,u_int32_t flags){
+ return self->c_del(self, flags);
+ }
+static DBC *__dbc_dup(struct __dbc *self,u_int32_t flags){
+ DBC *newcurs;
+ errno = self->c_dup(self, &newcurs, flags);
+ return (errno == 0) ? newcurs : NULL;
+ }
+static int __dbc_get__SWIG_0(struct __dbc *self,DBT *key,DBT *data,u_int32_t flags){
+ return self->c_get(self, key, data, flags);
+ }
+static int __dbc_pget__SWIG_1(struct __dbc *self,DBT *key,DBT *pkey,DBT *data,u_int32_t flags){
+ return self->c_pget(self, key, pkey, data, flags);
+ }
+static int __dbc_put(struct __dbc *self,DBT *key,DBT *data,u_int32_t flags){
+ return self->c_put(self, key, data, flags);
+ }
+struct __db_env *new___db_env(u_int32_t flags){
+ DB_ENV *self = NULL;
+ errno = db_env_create(&self, flags);
+ return (errno == 0) ? self : NULL;
+ }
+static db_ret_t __db_env_close(struct __db_env *self,u_int32_t flags){
+ return self->close(self, flags);
+ }
+static db_ret_t __db_env_dbremove(struct __db_env *self,DB_TXN *txnid,char const *file,char const *database,u_int32_t flags){
+ return self->dbremove(self, txnid, file, database, flags);
+ }
+static db_ret_t __db_env_dbrename(struct __db_env *self,DB_TXN *txnid,char const *file,char const *database,char const *newname,u_int32_t flags){
+ return self->dbrename(self,
+ txnid, file, database, newname, flags);
+ }
+static void __db_env_err(struct __db_env *self,int error,char const *message){
+ self->err(self, error, message);
+ }
+static void __db_env_errx(struct __db_env *self,char const *message){
+ self->errx(self, message);
+ }
+static char const **__db_env_get_data_dirs(struct __db_env *self){
+ const char **ret;
+ errno = self->get_data_dirs(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_encrypt_flags(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_encrypt_flags(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_flags(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+static char const *__db_env_get_home(struct __db_env *self){
+ const char *ret;
+ errno = self->get_home(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_open_flags(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_open_flags(self, &ret);
+ return ret;
+ }
+static long __db_env_get_shm_key(struct __db_env *self){
+ long ret;
+ errno = self->get_shm_key(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_tas_spins(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_tas_spins(self, &ret);
+ return ret;
+ }
+static char const *__db_env_get_tmp_dir(struct __db_env *self){
+ const char *ret;
+ errno = self->get_tmp_dir(self, &ret);
+ return ret;
+ }
+static int_bool __db_env_get_verbose(struct __db_env *self,u_int32_t which){
+ int ret;
+ errno = self->get_verbose(self, which, &ret);
+ return ret;
+ }
+static db_ret_t __db_env_open(struct __db_env *self,char const *db_home,u_int32_t flags,int mode){
+ return self->open(self, db_home, flags, mode);
+ }
+static db_ret_t __db_env_remove(struct __db_env *self,char const *db_home,u_int32_t flags){
+ return self->remove(self, db_home, flags);
+ }
+static db_ret_t __db_env_set_cachesize(struct __db_env *self,jlong bytes,int ncache){
+ return self->set_cachesize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE), ncache);
+ }
+static db_ret_t __db_env_set_data_dir(struct __db_env *self,char const *dir){
+ return self->set_data_dir(self, dir);
+ }
+static db_ret_t __db_env_set_encrypt(struct __db_env *self,char const *passwd,u_int32_t flags){
+ return self->set_encrypt(self, passwd, flags);
+ }
+static void __db_env_set_errcall(struct __db_env *self,void (*db_errcall_fcn)(char const *,char *)){
+ self->set_errcall(self, db_errcall_fcn);
+ }
+static db_ret_t __db_env_set_flags(struct __db_env *self,u_int32_t flags,int_bool onoff){
+ return self->set_flags(self, flags, onoff);
+ }
+static db_ret_t __db_env_set_feedback(struct __db_env *self,void (*db_feedback_fcn)(DB_ENV *,int,int)){
+ return self->set_feedback(self, db_feedback_fcn);
+ }
+static db_ret_t __db_env_set_mp_mmapsize(struct __db_env *self,size_t mp_mmapsize){
+ return self->set_mp_mmapsize(self, mp_mmapsize);
+ }
+static db_ret_t __db_env_set_paniccall(struct __db_env *self,void (*db_panic_fcn)(DB_ENV *,int)){
+ return self->set_paniccall(self, db_panic_fcn);
+ }
+static db_ret_t __db_env_set_rpc_server(struct __db_env *self,void *client,char *host,long cl_timeout,long sv_timeout,u_int32_t flags){
+ return self->set_rpc_server(self, client, host,
+ cl_timeout, sv_timeout, flags);
+ }
+static db_ret_t __db_env_set_shm_key(struct __db_env *self,long shm_key){
+ return self->set_shm_key(self, shm_key);
+ }
+static db_ret_t __db_env_set_tas_spins(struct __db_env *self,u_int32_t tas_spins){
+ return self->set_tas_spins(self, tas_spins);
+ }
+static db_ret_t __db_env_set_timeout(struct __db_env *self,db_timeout_t timeout,u_int32_t flags){
+ return self->set_timeout(self, timeout, flags);
+ }
+static db_ret_t __db_env_set_tmp_dir(struct __db_env *self,char const *dir){
+ return self->set_tmp_dir(self, dir);
+ }
+static db_ret_t __db_env_set_tx_max(struct __db_env *self,u_int32_t max){
+ return self->set_tx_max(self, max);
+ }
+static db_ret_t __db_env_set_app_dispatch(struct __db_env *self,int (*tx_recover)(DB_ENV *,DBT *,DB_LSN *,db_recops)){
+ return self->set_app_dispatch(self, tx_recover);
+ }
+static db_ret_t __db_env_set_tx_timestamp(struct __db_env *self,time_t *timestamp){
+ return self->set_tx_timestamp(self, timestamp);
+ }
+static db_ret_t __db_env_set_verbose(struct __db_env *self,u_int32_t which,int_bool onoff){
+ return self->set_verbose(self, which, onoff);
+ }
+static struct __db_lk_conflicts __db_env_get_lk_conflicts(struct __db_env *self){
+ struct __db_lk_conflicts ret;
+ errno = self->get_lk_conflicts(self,
+ (const u_int8_t **)&ret.lk_conflicts, &ret.lk_modes);
+ return ret;
+ }
+static u_int32_t __db_env_get_lk_detect(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lk_detect(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_lk_max_locks(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lk_max_locks(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_lk_max_lockers(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lk_max_lockers(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_lk_max_objects(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lk_max_objects(self, &ret);
+ return ret;
+ }
+static int __db_env_lock_detect(struct __db_env *self,u_int32_t flags,u_int32_t atype){
+ int aborted;
+ errno = self->lock_detect(self, flags, atype, &aborted);
+ return aborted;
+ }
+static DB_LOCK *__db_env_lock_get(struct __db_env *self,u_int32_t locker,u_int32_t flags,DBT const *object,db_lockmode_t lock_mode){
+ DB_LOCK *lock = NULL;
+ if ((errno = __os_malloc(self, sizeof (DB_LOCK), &lock)) == 0)
+ errno = self->lock_get(self, locker, flags, object,
+ lock_mode, lock);
+ return lock;
+ }
+static u_int32_t __db_env_lock_id(struct __db_env *self){
+ u_int32_t id;
+ errno = self->lock_id(self, &id);
+ return id;
+ }
+static db_ret_t __db_env_lock_id_free(struct __db_env *self,u_int32_t id){
+ return self->lock_id_free(self, id);
+ }
+static db_ret_t __db_env_lock_put(struct __db_env *self,DB_LOCK *lock){
+ return self->lock_put(self, lock);
+ }
+static DB_LOCK_STAT *__db_env_lock_stat(struct __db_env *self,u_int32_t flags){
+ DB_LOCK_STAT *statp;
+ errno = self->lock_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+static db_ret_t __db_env_set_lk_conflicts(struct __db_env *self,struct __db_lk_conflicts conflicts){
+ return self->set_lk_conflicts(self,
+ conflicts.lk_conflicts, conflicts.lk_modes);
+ }
+static db_ret_t __db_env_set_lk_detect(struct __db_env *self,u_int32_t detect){
+ return self->set_lk_detect(self, detect);
+ }
+static db_ret_t __db_env_set_lk_max_lockers(struct __db_env *self,u_int32_t max){
+ return self->set_lk_max_lockers(self, max);
+ }
+static db_ret_t __db_env_set_lk_max_locks(struct __db_env *self,u_int32_t max){
+ return self->set_lk_max_locks(self, max);
+ }
+static db_ret_t __db_env_set_lk_max_objects(struct __db_env *self,u_int32_t max){
+ return self->set_lk_max_objects(self, max);
+ }
+static u_int32_t __db_env_get_lg_bsize(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lg_bsize(self, &ret);
+ return ret;
+ }
+static char const *__db_env_get_lg_dir(struct __db_env *self){
+ const char *ret;
+ errno = self->get_lg_dir(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_lg_max(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lg_max(self, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_lg_regionmax(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_lg_regionmax(self, &ret);
+ return ret;
+ }
+static char **__db_env_log_archive(struct __db_env *self,u_int32_t flags){
+ char **list;
+ errno = self->log_archive(self, &list, flags);
+ return (errno == 0) ? list : NULL;
+ }
+int DbEnv_log_compare(DB_LSN const *lsn0,DB_LSN const *lsn1){
+ return log_compare(lsn0, lsn1);
+ }
+static DB_LOGC *__db_env_log_cursor(struct __db_env *self,u_int32_t flags){
+ DB_LOGC *cursor;
+ errno = self->log_cursor(self, &cursor, flags);
+ return (errno == 0) ? cursor : NULL;
+ }
+static char *__db_env_log_file(struct __db_env *self,DB_LSN *lsn){
+ char namebuf[MAXPATHLEN];
+ errno = self->log_file(self, lsn, namebuf, sizeof namebuf);
+ return (errno == 0) ? strdup(namebuf) : NULL;
+ }
+static db_ret_t __db_env_log_flush(struct __db_env *self,DB_LSN const *lsn){
+ return self->log_flush(self, lsn);
+ }
+static db_ret_t __db_env_log_put(struct __db_env *self,DB_LSN *lsn,DBT const *data,u_int32_t flags){
+ return self->log_put(self, lsn, data, flags);
+ }
+static DB_LOG_STAT *__db_env_log_stat(struct __db_env *self,u_int32_t flags){
+ DB_LOG_STAT *sp;
+ errno = self->log_stat(self, &sp, flags);
+ return (errno == 0) ? sp : NULL;
+ }
+static db_ret_t __db_env_set_lg_bsize(struct __db_env *self,u_int32_t lg_bsize){
+ return self->set_lg_bsize(self, lg_bsize);
+ }
+static db_ret_t __db_env_set_lg_dir(struct __db_env *self,char const *dir){
+ return self->set_lg_dir(self, dir);
+ }
+static db_ret_t __db_env_set_lg_max(struct __db_env *self,u_int32_t lg_max){
+ return self->set_lg_max(self, lg_max);
+ }
+static db_ret_t __db_env_set_lg_regionmax(struct __db_env *self,u_int32_t lg_regionmax){
+ return self->set_lg_regionmax(self, lg_regionmax);
+ }
+static jlong __db_env_get_cachesize(struct __db_env *self){
+ u_int32_t gbytes, bytes;
+ errno = self->get_cachesize(self, &gbytes, &bytes, NULL);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+static int __db_env_get_cachesize_ncache(struct __db_env *self){
+ int ret;
+ errno = self->get_cachesize(self, NULL, NULL, &ret);
+ return ret;
+ }
+static size_t __db_env_get_mp_mmapsize(struct __db_env *self){
+ size_t ret;
+ errno = self->get_mp_mmapsize(self, &ret);
+ return ret;
+ }
+static DB_MPOOL_STAT *__db_env_memp_stat(struct __db_env *self,u_int32_t flags){
+ DB_MPOOL_STAT *mp_stat;
+ errno = self->memp_stat(self, &mp_stat, NULL, flags);
+ return (errno == 0) ? mp_stat : NULL;
+ }
+static DB_MPOOL_FSTAT **__db_env_memp_fstat(struct __db_env *self,u_int32_t flags){
+ DB_MPOOL_FSTAT **mp_fstat;
+ errno = self->memp_stat(self, NULL, &mp_fstat, flags);
+ return (errno == 0) ? mp_fstat : NULL;
+ }
+static int __db_env_memp_trickle(struct __db_env *self,int percent){
+ int ret;
+ errno = self->memp_trickle(self, percent, &ret);
+ return ret;
+ }
+static u_int32_t __db_env_get_tx_max(struct __db_env *self){
+ u_int32_t ret;
+ errno = self->get_tx_max(self, &ret);
+ return ret;
+ }
+static time_t __db_env_get_tx_timestamp(struct __db_env *self){
+ time_t ret;
+ errno = self->get_tx_timestamp(self, &ret);
+ return ret;
+ }
+static db_timeout_t __db_env_get_timeout(struct __db_env *self,u_int32_t flag){
+ db_timeout_t ret;
+ errno = self->get_timeout(self, &ret, flag);
+ return ret;
+ }
+static DB_TXN *__db_env_txn_begin(struct __db_env *self,DB_TXN *parent,u_int32_t flags){
+ DB_TXN *tid;
+ errno = self->txn_begin(self, parent, &tid, flags);
+ return (errno == 0) ? tid : NULL;
+ }
+static db_ret_t __db_env_txn_checkpoint(struct __db_env *self,u_int32_t kbyte,u_int32_t min,u_int32_t flags){
+ return self->txn_checkpoint(self, kbyte, min, flags);
+ }
+static DB_PREPLIST *__db_env_txn_recover(struct __db_env *self,int count,u_int32_t flags){
+ DB_PREPLIST *preplist;
+ long retcount;
+
+ /* Add a NULL element to terminate the array. */
+ if ((errno = __os_malloc(self,
+ (count + 1) * sizeof(DB_PREPLIST), &preplist)) != 0)
+ return NULL;
+
+ if ((errno = self->txn_recover(self, preplist, count,
+ &retcount, flags)) != 0) {
+ __os_free(self, preplist);
+ return NULL;
+ }
+
+ preplist[retcount].txn = NULL;
+ return preplist;
+ }
+static DB_TXN_STAT *__db_env_txn_stat(struct __db_env *self,u_int32_t flags){
+ DB_TXN_STAT *statp;
+ errno = self->txn_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+static jlong __db_env_get_rep_limit(struct __db_env *self){
+ u_int32_t gbytes, bytes;
+ errno = self->get_rep_limit(self, &gbytes, &bytes);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+static int __db_env_rep_elect(struct __db_env *self,int nsites,int priority,u_int32_t timeout){
+ int id;
+ errno = self->rep_elect(self, nsites, priority, timeout, &id);
+ return id;
+ }
+static int __db_env_rep_process_message(struct __db_env *self,DBT *control,DBT *rec,int *envid,DB_LSN *ret_lsn){
+ return self->rep_process_message(self, control, rec, envid, ret_lsn);
+ }
+static db_ret_t __db_env_rep_start(struct __db_env *self,DBT *cdata,u_int32_t flags){
+ return self->rep_start(self, cdata, flags);
+ }
+static DB_REP_STAT *__db_env_rep_stat(struct __db_env *self,u_int32_t flags){
+ DB_REP_STAT *statp;
+ errno = self->rep_stat(self, &statp, flags);
+ return (errno == 0) ? statp : NULL;
+ }
+static db_ret_t __db_env_set_rep_limit(struct __db_env *self,jlong bytes){
+ return self->set_rep_limit(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE));
+ }
+static db_ret_t __db_env_set_rep_transport(struct __db_env *self,int envid,int (*send)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t)){
+ return self->set_rep_transport(self, envid, send);
+ }
+char const *DbEnv_strerror(int error){
+ return db_strerror(error);
+ }
+int DbEnv_get_version_major(){
+ return DB_VERSION_MAJOR;
+ }
+int DbEnv_get_version_minor(){
+ return DB_VERSION_MINOR;
+ }
+int DbEnv_get_version_patch(){
+ return DB_VERSION_PATCH;
+ }
+char const *DbEnv_get_version_string(){
+ return DB_VERSION_STRING;
+ }
+static db_ret_t __db_txn_abort(struct __db_txn *self){
+ return self->abort(self);
+ }
+static db_ret_t __db_txn_commit(struct __db_txn *self,u_int32_t flags){
+ return self->commit(self, flags);
+ }
+static db_ret_t __db_txn_discard(struct __db_txn *self,u_int32_t flags){
+ return self->discard(self, flags);
+ }
+static u_int32_t __db_txn_id(struct __db_txn *self){
+ return self->id(self);
+ }
+static db_ret_t __db_txn_prepare(struct __db_txn *self,u_int8_t *gid){
+ return self->prepare(self, gid);
+ }
+static db_ret_t __db_txn_set_timeout(struct __db_txn *self,db_timeout_t timeout,u_int32_t flags){
+ return self->set_timeout(self, timeout, flags);
+ }
+static db_ret_t __db_log_cursor_close(struct __db_log_cursor *self,u_int32_t flags){
+ return self->close(self, flags);
+ }
+static int __db_log_cursor_get(struct __db_log_cursor *self,DB_LSN *lsn,DBT *data,u_int32_t flags){
+ return self->get(self, lsn, data, flags);
+ }
+void delete___db_lock_u(struct __db_lock_u *self){
+ __os_free(NULL, self);
+ }
+struct __db_lsn *new___db_lsn(u_int32_t file,u_int32_t offset){
+ DB_LSN *self = NULL;
+ errno = __os_malloc(NULL, sizeof (DB_LSN), &self);
+ if (errno == 0) {
+ self->file = file;
+ self->offset = offset;
+ }
+ return self;
+ }
+void delete___db_lsn(struct __db_lsn *self){
+ __os_free(NULL, self);
+ }
+static u_int32_t __db_lsn_get_file(struct __db_lsn *self){
+ return self->file;
+ }
+static u_int32_t __db_lsn_get_offset(struct __db_lsn *self){
+ return self->offset;
+ }
+static DB_CACHE_PRIORITY __db_mpoolfile_get_priority(struct __db_mpoolfile *self){
+ DB_CACHE_PRIORITY ret;
+ errno = self->get_priority(self, &ret);
+ return ret;
+ }
+static db_ret_t __db_mpoolfile_set_priority(struct __db_mpoolfile *self,DB_CACHE_PRIORITY priority){
+ return self->set_priority(self, priority);
+ }
+static u_int32_t __db_mpoolfile_get_flags(struct __db_mpoolfile *self){
+ u_int32_t ret;
+ errno = self->get_flags(self, &ret);
+ return ret;
+ }
+static db_ret_t __db_mpoolfile_set_flags(struct __db_mpoolfile *self,u_int32_t flags,int_bool onoff){
+ return self->set_flags(self, flags, onoff);
+ }
+static jlong __db_mpoolfile_get_maxsize(struct __db_mpoolfile *self){
+ u_int32_t gbytes, bytes;
+ errno = self->get_maxsize(self, &gbytes, &bytes);
+ return (jlong)gbytes * GIGABYTE + bytes;
+ }
+static db_ret_t __db_mpoolfile_set_maxsize(struct __db_mpoolfile *self,jlong bytes){
+ return self->set_maxsize(self,
+ (u_int32_t)(bytes / GIGABYTE),
+ (u_int32_t)(bytes % GIGABYTE));
+ }
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_new_1Db(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ DB_ENV *arg1 = (DB_ENV *) 0 ;
+ u_int32_t arg2 ;
+ struct __db *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(DB_ENV **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ errno = 0;
+ result = (struct __db *)new___db(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ *(struct __db **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1associate(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jlong jarg3, jobject jarg4, jint jarg5) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DB *arg3 = (DB *) 0 ;
+ int (*arg4)(DB *,DBT const *,DBT const *,DBT *) = (int (*)(DB *,DBT const *,DBT const *,DBT *)) 0 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = *(DB **)&jarg3;
+
+ arg4 = (jarg4 == NULL) ? NULL : __dbj_seckey_create;
+
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_associate(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_close(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1cursor(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ jlong jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ DBC *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DBC *)__db_cursor(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ *(DBC **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1del(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ int result;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_del(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_DBDEL(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1err(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jstring jarg3) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int arg2 ;
+ char *arg3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (int)jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ __db_err_internal(arg1,arg2,(char const *)arg3);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1errx(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ __db_errx(arg1,(char const *)arg2);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jobject jarg4, jint jarg5) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DBT *arg4 = (DBT *) 0 ;
+ u_int32_t arg5 ;
+ int result;
+ DBT_LOCKED ldbt3 ;
+ DBT_LOCKED ldbt4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, jarg4) != 0)
+ return 0;
+ arg4 = &ldbt4.dbt;
+
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_get__SWIG_0(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_DBGET(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+
+ return jresult;
+}
+
+
+JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1byteswapped(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jboolean jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int_bool)__db_get_byteswapped(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_get_cachesize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1cachesize_1ncache(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_cachesize_ncache(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1filename(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_get_filename(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1dbname(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_get_dbname(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1encrypt_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_encrypt_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1lorder(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_get_lorder(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1mpf(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_MPOOLFILE *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_MPOOLFILE *)__db_get_mpf(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ *(DB_MPOOLFILE **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1open_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_open_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1pagesize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_pagesize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1bt_1minkey(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_bt_minkey(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1h_1ffactor(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_h_ffactor(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1h_1nelem(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_h_nelem(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1delim(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_get_re_delim(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1len(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_re_len(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1pad(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_get_re_pad(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1re_1source(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_get_re_source(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1q_1extentsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_q_extentsize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1flags_1raw(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_get_flags_raw(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1transactional(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jboolean jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int_bool)__db_get_transactional(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1type(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DBTYPE result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DBTYPE)__db_get_type(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1join(JNIEnv *jenv, jclass jcls, jlong jarg1, jobjectArray jarg2, jint jarg3) {
+ jlong jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DBC **arg2 = (DBC **) 0 ;
+ u_int32_t arg3 ;
+ DBC *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ int i, count, err;
+
+ count = (*jenv)->GetArrayLength(jenv, jarg2);
+ if ((err = __os_malloc(NULL, (count + 1) * sizeof(DBC *), &arg2)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, DB2JDBENV);
+ return 0;
+ }
+ for (i = 0; i < count; i++) {
+ jobject jobj = (*jenv)->GetObjectArrayElement(jenv, jarg2, i);
+ /*
+ * A null in the array is treated as an endpoint.
+ */
+ if (jobj == NULL) {
+ arg2[i] = NULL;
+ break;
+ }else {
+ jlong jptr = (*jenv)->GetLongField(jenv, jobj,
+ dbc_cptr_fid);
+ arg2[i] = *(DBC **)&jptr;
+ }
+ }
+ arg2[count] = NULL;
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DBC *)__db_join(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ *(DBC **)&jresult = result;
+
+ __os_free(NULL, arg2);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1key_1range(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jobject jarg4, jint jarg5) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DB_KEY_RANGE *arg4 = (DB_KEY_RANGE *) 0 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt3 ;
+ DB_KEY_RANGE range4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return ;
+ arg3 = &ldbt3.dbt;
+
+ {
+ arg4 = &range4;
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_key_range(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ {
+ (*jenv)->SetDoubleField(jenv, jarg4, kr_less_fid, arg4->less);
+ (*jenv)->SetDoubleField(jenv, jarg4, kr_equal_fid, arg4->equal);
+ (*jenv)->SetDoubleField(jenv, jarg4, kr_greater_fid, arg4->greater);
+ }
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1open0(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4, jint jarg5, jint jarg6, jint jarg7) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 ;
+ char *arg4 ;
+ DBTYPE arg5 ;
+ u_int32_t arg6 ;
+ int arg7 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ {
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg4, 0);
+ if (!arg4) return ;
+ }
+ }
+ arg5 = (DBTYPE)jarg5;
+ arg6 = (u_int32_t)jarg6;
+ arg7 = (int)jarg7;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_open(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5,arg6,arg7);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+ {
+ if (arg4) (*jenv)->ReleaseStringUTFChars(jenv, jarg4, arg4);
+ }
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1get_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jobject jarg4, jobject jarg5, jint jarg6) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DBT *arg4 = (DBT *) 0 ;
+ DBT *arg5 = (DBT *) 0 ;
+ u_int32_t arg6 ;
+ int result;
+ DBT_LOCKED ldbt3 ;
+ DBT_LOCKED ldbt4 ;
+ DBT_LOCKED ldbt5 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, jarg4) != 0)
+ return 0;
+ arg4 = &ldbt4.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt5, jarg5) != 0)
+ return 0;
+ arg5 = &ldbt5.dbt;
+
+ arg6 = (u_int32_t)jarg6;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_pget__SWIG_1(arg1,arg2,arg3,arg4,arg5,arg6);
+
+ if (!DB_RETOK_DBGET(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+
+
+ __dbj_dbt_release(jenv, jarg5, arg5, &ldbt5);
+
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jobject jarg4, jint jarg5) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DBT *arg4 = (DBT *) 0 ;
+ u_int32_t arg5 ;
+ int result;
+ DBT_LOCKED ldbt3 ;
+ DBT_LOCKED ldbt4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, jarg4) != 0)
+ return 0;
+ arg4 = &ldbt4.dbt;
+
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_put(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_DBPUT(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1remove0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jstring jarg3, jint jarg4) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ char *arg3 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_remove(arg1,(char const *)arg2,(char const *)arg3,arg4);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1rename0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jstring jarg3, jstring jarg4, jint jarg5) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ char *arg3 ;
+ char *arg4 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ {
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg4, 0);
+ if (!arg4) return ;
+ }
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_rename(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+ {
+ if (arg4) (*jenv)->ReleaseStringUTFChars(jenv, jarg4, arg4);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1append_1recno(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int (*arg2)(DB *,DBT *,db_recno_t) = (int (*)(DB *,DBT *,db_recno_t)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_append_recno;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_append_recno(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int (*arg2)(DB *,DBT const *,DBT const *) = (int (*)(DB *,DBT const *,DBT const *)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_bt_compare;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_bt_compare(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1maxkey(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_bt_maxkey(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1minkey(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_bt_minkey(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1bt_1prefix(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ size_t (*arg2)(DB *,DBT const *,DBT const *) = (size_t (*)(DB *,DBT const *,DBT const *)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_bt_prefix;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_bt_prefix(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ jlong arg2 ;
+ int arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = jarg2;
+ arg3 = (int)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_cachesize(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1dup_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int (*arg2)(DB *,DBT const *,DBT const *) = (int (*)(DB *,DBT const *,DBT const *)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_dup_compare;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_dup_compare(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1encrypt(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_encrypt(arg1,(char const *)arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1setFeedbackHandler(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ void (*arg2)(DB *,int,int) = (void (*)(DB *,int,int)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_db_feedback;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_feedback(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_flags(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1ffactor(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_h_ffactor(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1hash(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t (*arg2)(DB *,void const *,u_int32_t) = (u_int32_t (*)(DB *,void const *,u_int32_t)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_h_hash;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_h_hash(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1h_1nelem(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_h_nelem(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1lorder(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_lorder(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1pagesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_pagesize(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1delim(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_re_delim(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1len(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_re_len(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1pad(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ int arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_re_pad(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1re_1source(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_re_source(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1set_1q_1extentsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_set_q_extentsize(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ void *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (void *)__db_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+
+ if (result == NULL)
+ jresult = NULL;
+ else {
+ DB *db = (DB *)arg1;
+ DBTYPE dbtype;
+ int err;
+
+ if ((err = db->get_type(db, &dbtype)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, DB2JDBENV);
+ return 0;
+ }
+
+ switch (dbtype) {
+ /* Btree and recno share the same stat structure */
+ case DB_BTREE:
+ case DB_RECNO:
+ jresult = (*jenv)->NewObject(jenv, btree_stat_class,
+ btree_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_bt_stat(jenv, btree_stat_class,
+ jresult, (DB_BTREE_STAT *)result);
+ break;
+
+ /* Hash stat structure */
+ case DB_HASH:
+ jresult = (*jenv)->NewObject(jenv, hash_stat_class,
+ hash_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_h_stat(jenv, hash_stat_class,
+ jresult, (DB_HASH_STAT *)result);
+ break;
+
+ case DB_QUEUE:
+ jresult = (*jenv)->NewObject(jenv, queue_stat_class,
+ queue_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_qam_stat(jenv, queue_stat_class,
+ jresult, (DB_QUEUE_STAT *)result);
+ break;
+
+ /* That's all the database types we're aware of! */
+ default:
+ __dbj_throw(jenv, EINVAL, "Db.stat only implemented for"
+ " BTREE, HASH, QUEUE and RECNO", NULL, DB2JDBENV);
+ break;
+ }
+
+ __os_ufree(db->dbenv, result);
+ }
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1sync(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_sync(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1truncate(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ jint jresult = 0 ;
+ struct __db *arg1 = (struct __db *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_truncate(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DB2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1upgrade(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_upgrade(arg1,(char const *)arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, DB2JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Db_1verify0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jstring jarg3, jobject jarg4, jint jarg5) {
+ struct __db *arg1 = (struct __db *) 0 ;
+ char *arg2 ;
+ char *arg3 ;
+ struct __db_out_stream arg4 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+ struct __dbj_verify_data data4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ {
+ data4.jenv = jenv;
+ data4.streamobj = jarg4;
+ data4.bytes = NULL;
+ data4.nbytes = 0;
+ (&arg4)->handle = &data4;
+ (&arg4)->callback = __dbj_verify_callback;
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_verify(arg1,(char const *)arg2,(char const *)arg3,arg4,arg5);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__dbc_close(arg1);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1count(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jint jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ u_int32_t arg2 ;
+ db_recno_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (db_recno_t)__dbc_count(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DBC2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1del(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jint jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ u_int32_t arg2 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__dbc_del(arg1,arg2);
+
+ if (!DB_RETOK_DBCDEL(result))
+ __dbj_throw(jenv, result, NULL, NULL, DBC2JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1dup(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ u_int32_t arg2 ;
+ DBC *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DBC *)__dbc_dup(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, DBC2JDBENV);
+
+ *(DBC **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1get_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ int result;
+ DBT_LOCKED ldbt2 ;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, jarg2) != 0)
+ return 0;
+ arg2 = &ldbt2.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__dbc_get__SWIG_0(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_DBCGET(result))
+ __dbj_throw(jenv, result, NULL, NULL, DBC2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1get_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jobject jarg4, jint jarg5) {
+ jint jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ DBT *arg4 = (DBT *) 0 ;
+ u_int32_t arg5 ;
+ int result;
+ DBT_LOCKED ldbt2 ;
+ DBT_LOCKED ldbt3 ;
+ DBT_LOCKED ldbt4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, jarg2) != 0)
+ return 0;
+ arg2 = &ldbt2.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, jarg4) != 0)
+ return 0;
+ arg4 = &ldbt4.dbt;
+
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__dbc_pget__SWIG_1(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_DBCGET(result))
+ __dbj_throw(jenv, result, NULL, NULL, DBC2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+
+ __dbj_dbt_release(jenv, jarg4, arg4, &ldbt4);
+
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_Dbc_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct __dbc *arg1 = (struct __dbc *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ int result;
+ DBT_LOCKED ldbt2 ;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __dbc **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, jarg2) != 0)
+ return 0;
+ arg2 = &ldbt2.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__dbc_put(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_DBCPUT(result))
+ __dbj_throw(jenv, result, NULL, NULL, DBC2JDBENV);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_new_1DbEnv(JNIEnv *jenv, jclass jcls, jint jarg1) {
+ jlong jresult = 0 ;
+ u_int32_t arg1 ;
+ struct __db_env *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (u_int32_t)jarg1;
+
+ errno = 0;
+ result = (struct __db_env *)new___db_env(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ *(struct __db_env **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_close(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1dbremove(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4, jint jarg5) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 ;
+ char *arg4 ;
+ u_int32_t arg5 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ {
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg4, 0);
+ if (!arg4) return ;
+ }
+ }
+ arg5 = (u_int32_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_dbremove(arg1,arg2,(char const *)arg3,(char const *)arg4,arg5);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+ {
+ if (arg4) (*jenv)->ReleaseStringUTFChars(jenv, jarg4, arg4);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1dbrename(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jstring jarg3, jstring jarg4, jstring jarg5, jint jarg6) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ char *arg3 ;
+ char *arg4 ;
+ char *arg5 ;
+ u_int32_t arg6 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ {
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg4, 0);
+ if (!arg4) return ;
+ }
+ }
+ {
+ arg5 = 0;
+ if (jarg5) {
+ arg5 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg5, 0);
+ if (!arg5) return ;
+ }
+ }
+ arg6 = (u_int32_t)jarg6;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_dbrename(arg1,arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+ {
+ if (arg4) (*jenv)->ReleaseStringUTFChars(jenv, jarg4, arg4);
+ }
+ {
+ if (arg5) (*jenv)->ReleaseStringUTFChars(jenv, jarg5, arg5);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1err(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jstring jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int arg2 ;
+ char *arg3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (int)jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ __db_env_err(arg1,arg2,(char const *)arg3);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1errx(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ __db_env_errx(arg1,(char const *)arg2);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1data_1dirs(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jobjectArray jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char **result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char **)__db_env_get_data_dirs(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result != NULL) {
+ /*@../libdb_java/java_typemaps.i,229,STRING_ARRAY_OUT@*/ int i, len;
+
+ len = 0;
+ while (result[len] != NULL)
+ len++;
+ if ((jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, string_class,
+ NULL)) == NULL)
+ return 0; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jstring str = (*jenv)->NewStringUTF(jenv, result[i]);
+ (*jenv)->SetObjectArrayElement(jenv, jresult, (jsize)i, str);
+ }
+ /*@@*/
+ }
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1encrypt_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_encrypt_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1home(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_env_get_home(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1open_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_open_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1shm_1key(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ long result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (long)__db_env_get_shm_key(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jlong)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_tas_spins(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tmp_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_env_get_tmp_dir(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1verbose(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jboolean jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ int_bool result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int_bool)__db_env_get_verbose(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+
+ jresult = (result) ? JNI_TRUE : JNI_FALSE;
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1open0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3, jint jarg4) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ u_int32_t arg3 ;
+ int arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ arg3 = (u_int32_t)jarg3;
+ arg4 = (int)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_open(arg1,(char const *)arg2,arg3,arg4);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1remove0(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_remove(arg1,(char const *)arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ jlong arg2 ;
+ int arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = jarg2;
+ arg3 = (int)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_cachesize(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1data_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_data_dir(arg1,(char const *)arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1encrypt(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2, jint jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_encrypt(arg1,(char const *)arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setErrorHandler(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ void (*arg2)(char const *,char *) = (void (*)(char const *,char *)) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_error;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ __db_env_set_errcall(arg1,arg2);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ arg3 = (jarg3 == JNI_TRUE);
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_flags(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setFeedbackHandler(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ void (*arg2)(DB_ENV *,int,int) = (void (*)(DB_ENV *,int,int)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_env_feedback;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_feedback(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1mp_1mmapsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ size_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (size_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_mp_mmapsize(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1setPanicHandler(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ void (*arg2)(DB_ENV *,int) = (void (*)(DB_ENV *,int)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_panic;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_paniccall(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rpc_1server(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jstring jarg3, jlong jarg4, jlong jarg5, jint jarg6) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ void *arg2 = (void *) 0 ;
+ char *arg3 ;
+ long arg4 ;
+ long arg5 ;
+ u_int32_t arg6 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(void **)&jarg2;
+ {
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg3, 0);
+ if (!arg3) return ;
+ }
+ }
+ arg4 = (long)jarg4;
+ arg5 = (long)jarg5;
+ arg6 = (u_int32_t)jarg6;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ if (arg2 != NULL) {
+ __dbj_throw(jenv, EINVAL, "DbEnv.set_rpc_server client arg "
+ "must be null; reserved for future use", NULL, JDBENV);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_rpc_server(arg1,arg2,arg3,arg4,arg5,arg6);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg3) (*jenv)->ReleaseStringUTFChars(jenv, jarg3, arg3);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1shm_1key(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ long arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (long)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_shm_key(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tas_1spins(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_tas_spins(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ db_timeout_t arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (db_timeout_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_timeout(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tmp_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_tmp_dir(arg1,(char const *)arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tx_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_tx_max(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1app_1dispatch(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int (*arg2)(DB_ENV *,DBT *,DB_LSN *,db_recops) = (int (*)(DB_ENV *,DBT *,DB_LSN *,db_recops)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ arg2 = (jarg2 == NULL) ? NULL : __dbj_app_dispatch;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_app_dispatch(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1tx_1timestamp0(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ time_t *arg2 = (time_t *) 0 ;
+ db_ret_t result;
+ time_t time2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ time2 = (time_t)jarg2;
+ arg2 = &time2;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_tx_timestamp(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1verbose(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ arg3 = (jarg3 == JNI_TRUE);
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_verbose(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1conflicts(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jobjectArray jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ struct __db_lk_conflicts result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_env_get_lk_conflicts(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ int i;
+ jbyteArray bytes;
+
+ jresult = (*jenv)->NewObjectArray(jenv,
+ (jsize)(&result)->lk_modes, bytearray_class, NULL);
+ if (jresult == NULL)
+ return 0; /* an exception is pending */
+ for (i = 0; i < (&result)->lk_modes; i++) {
+ bytes = (*jenv)->NewByteArray(jenv, (jsize)(&result)->lk_modes);
+ if (bytes == NULL)
+ return 0; /* an exception is pending */
+ (*jenv)->SetByteArrayRegion(jenv, bytes, 0, (jsize)(&result)->lk_modes,
+ (jbyte *)((&result)->lk_conflicts + i * (&result)->lk_modes));
+ (*jenv)->SetObjectArrayElement(jenv, jresult, (jsize)i, bytes);
+ }
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lk_detect(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1locks(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lk_max_locks(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1lockers(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lk_max_lockers(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lk_1max_1objects(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lk_max_objects(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_env_lock_detect(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jobject jarg4, jint jarg5) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ DBT *arg4 = (DBT *) 0 ;
+ db_lockmode_t arg5 ;
+ DB_LOCK *result;
+ DBT_LOCKED ldbt4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt4, jarg4) != 0)
+ return 0;
+ arg4 = &ldbt4.dbt;
+
+ arg5 = (db_lockmode_t)jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_LOCK *)__db_env_lock_get(arg1,arg2,arg3,(DBT const *)arg4,arg5);
+
+ if (errno == DB_LOCK_NOTGRANTED) {
+ (*jenv)->Throw(jenv,
+ (*jenv)->NewObject(jenv, lockex_class, lockex_construct,
+ (*jenv)->NewStringUTF(jenv, "DbEnv.lock_get not granted"),
+ DB_LOCK_GET, arg5, jarg4, NULL, -1, JDBENV));
+ }else if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ *(DB_LOCK **)&jresult = result;
+
+ if (ldbt4.jarr != NULL) {
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt4.jarr,
+ ldbt4.orig_data, 0);
+ }
+
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1id(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_lock_id(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1id_1free(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_lock_id_free(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_LOCK *arg2 = (DB_LOCK *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_LOCK **)&jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_lock_put(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOCK_STAT *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_LOCK_STAT *)__db_env_lock_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+
+ jresult = (*jenv)->NewObject(jenv, lock_stat_class, lock_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_lock_stat(jenv, lock_stat_class, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1conflicts(JNIEnv *jenv, jclass jcls, jlong jarg1, jobjectArray jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ struct __db_lk_conflicts arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ int i, len, err;
+ size_t bytesize;
+
+ len = (&arg2)->lk_modes = (*jenv)->GetArrayLength(jenv, jarg2);
+ bytesize = sizeof(u_char) * len * len;
+
+ if ((err = __os_malloc(NULL, bytesize, &(&arg2)->lk_conflicts)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, JDBENV);
+ return ;
+ }
+
+ for (i = 0; i < len; i++) {
+ jobject sub_array = (*jenv)->GetObjectArrayElement(jenv,
+ jarg2, i);
+ (*jenv)->GetByteArrayRegion(jenv,(jbyteArray)sub_array, 0, len,
+ (jbyte *)&(&arg2)->lk_conflicts[i * len]);
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lk_conflicts(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+
+ __os_free(NULL, (&arg2)->lk_conflicts);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1detect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lk_detect(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1lockers(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lk_max_lockers(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1locks(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lk_max_locks(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lk_1max_1objects(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lk_max_objects(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1bsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lg_bsize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jstring jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_env_get_lg_dir(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lg_max(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1lg_1regionmax(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_lg_regionmax(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1archive(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobjectArray jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ char **result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char **)__db_env_log_archive(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result != NULL) {
+ /*@../libdb_java/java_typemaps.i,229,STRING_ARRAY_OUT@*/ int i, len;
+
+ len = 0;
+ while (result[len] != NULL)
+ len++;
+ if ((jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, string_class,
+ NULL)) == NULL)
+ return 0; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jstring str = (*jenv)->NewStringUTF(jenv, result[i]);
+ (*jenv)->SetObjectArrayElement(jenv, jresult, (jsize)i, str);
+ }
+ /*@@*/
+ __os_ufree(NULL, result);
+ }
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1compare(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ jint jresult = 0 ;
+ DB_LSN *arg1 = (DB_LSN *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(DB_LSN **)&jarg1;
+ arg2 = *(DB_LSN **)&jarg2;
+ result = (int)DbEnv_log_compare((DB_LSN const *)arg1,(DB_LSN const *)arg2);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1cursor(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOGC *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_LOGC *)__db_env_log_cursor(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ *(DB_LOGC **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1file(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ jstring jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_LSN **)&jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (char *)__db_env_log_file(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1flush(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_LSN **)&jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_log_flush(arg1,(DB_LSN const *)arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1put(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jint jarg4) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_LSN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return ;
+ arg3 = &ldbt3.dbt;
+
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_log_put(arg1,arg2,(DBT const *)arg3,arg4);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+
+ if (ldbt3.jarr != NULL) {
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt3.jarr,
+ ldbt3.orig_data, 0);
+ }
+
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1log_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_LOG_STAT *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_LOG_STAT *)__db_env_log_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+
+ jresult = (*jenv)->NewObject(jenv, log_stat_class, log_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_log_stat(jenv, log_stat_class, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1bsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lg_bsize(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1dir(JNIEnv *jenv, jclass jcls, jlong jarg1, jstring jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ char *arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ {
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
+ if (!arg2) return ;
+ }
+ }
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lg_dir(arg1,(char const *)arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ {
+ if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, arg2);
+ }
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1max(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lg_max(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1lg_1regionmax(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_lg_regionmax(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1cachesize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_env_get_cachesize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1cachesize_1ncache(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_env_get_cachesize_ncache(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1mp_1mmapsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ size_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_env_get_mp_mmapsize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jlong)result;
+ return jresult;
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_MPOOL_STAT *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_MPOOL_STAT *)__db_env_memp_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+
+ jresult = (*jenv)->NewObject(jenv, mpool_stat_class, mpool_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_mpool_stat(jenv, mpool_stat_class, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1fstat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobjectArray jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_MPOOL_FSTAT **result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_MPOOL_FSTAT **)__db_env_memp_fstat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ int i, len;
+
+ len = 0;
+ while (result[len] != NULL)
+ len++;
+ jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, mpool_fstat_class, 0);
+ if (jresult == NULL) {
+ __os_ufree(NULL, result);
+ return 0;
+ }
+ for (i = 0; i < len; i++) {
+ jobject obj = (*jenv)->NewObject(jenv, mpool_fstat_class,
+ mpool_fstat_construct);
+ if (obj == NULL) {
+ __os_ufree(NULL, result);
+ return 0; /* an exception is pending */
+ }
+ (*jenv)->SetObjectArrayElement(jenv, jresult, i, obj);
+ __dbj_fill_mpool_fstat(jenv, mpool_fstat_class, obj, result[i]);
+ }
+ __os_ufree(NULL, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1memp_1trickle(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int arg2 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (int)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_env_memp_trickle(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tx_1max(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_env_get_tx_max(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1tx_1timestamp(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ time_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_env_get_tx_timestamp(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jlong)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ db_timeout_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (db_timeout_t)__db_env_get_timeout(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jlong)result;
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1begin(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DB_TXN *arg2 = (DB_TXN *) 0 ;
+ u_int32_t arg3 ;
+ DB_TXN *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = *(DB_TXN **)&jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_TXN *)__db_env_txn_begin(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ *(DB_TXN **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1checkpoint(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ u_int32_t arg3 ;
+ u_int32_t arg4 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_txn_checkpoint(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1recover(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3) {
+ jobjectArray jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int arg2 ;
+ u_int32_t arg3 ;
+ DB_PREPLIST *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_PREPLIST *)__db_env_txn_recover(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ int i, len;
+
+ len = 0;
+ while (result[len].txn != NULL)
+ len++;
+ jresult = (*jenv)->NewObjectArray(jenv, (jsize)len, dbpreplist_class,
+ NULL);
+ if (jresult == NULL)
+ return 0; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jobject jtxn = (*jenv)->NewObject(jenv, dbtxn_class,
+ dbtxn_construct, result[i].txn, JNI_FALSE);
+ jobject bytearr = (*jenv)->NewByteArray(jenv,
+ (jsize)sizeof(result[i].gid));
+ jobject obj = (*jenv)->NewObject(jenv, dbpreplist_class,
+ dbpreplist_construct, jtxn, bytearr);
+
+ if (jtxn == NULL || bytearr == NULL || obj == NULL)
+ return 0; /* An exception is pending */
+
+ (*jenv)->SetByteArrayRegion(jenv, bytearr, 0,
+ (jsize)sizeof(result[i].gid), (jbyte *)result[i].gid);
+ (*jenv)->SetObjectArrayElement(jenv, jresult, i, obj);
+ }
+ __os_ufree(NULL, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1txn_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_TXN_STAT *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_TXN_STAT *)__db_env_txn_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ {
+ unsigned int i;
+ jobjectArray actives;
+ jresult = (*jenv)->NewObject(jenv, txn_stat_class, txn_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_txn_stat(jenv, txn_stat_class, jresult, result);
+
+ actives = (*jenv)->NewObjectArray(jenv, (jsize)result->st_nactive,
+ txn_active_class, 0);
+ if (actives == NULL) {
+ __os_ufree(NULL, result);
+ return 0;
+ }
+ (*jenv)->SetObjectField(jenv, jresult, txn_stat_active_fid, actives);
+ for (i = 0; i < result->st_nactive; i++) {
+ jobject obj = (*jenv)->NewObject(jenv, txn_active_class,
+ txn_active_construct);
+ if (obj == NULL) {
+ __os_ufree(NULL, result);
+ return 0; /* an exception is pending */
+ }
+ (*jenv)->SetObjectArrayElement(jenv, actives, (jsize)i, obj);
+ __dbj_fill_txn_active(jenv, txn_active_class, obj,
+ &result->st_txnarray[i]);
+ }
+ __os_ufree(NULL, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1rep_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_env_get_rep_limit(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1elect(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jint jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int arg2 ;
+ int arg3 ;
+ u_int32_t arg4 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (int)jarg2;
+ arg3 = (int)jarg3;
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (int)__db_env_rep_elect(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1process_1message(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jobject jarg3, jobject jarg4, jlong jarg5) {
+ jint jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ int *arg4 = (int *) 0 ;
+ DB_LSN *arg5 = (DB_LSN *) 0 ;
+ int result;
+ DBT_LOCKED ldbt2 ;
+ DBT_LOCKED ldbt3 ;
+ int id4 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, jarg2) != 0)
+ return 0;
+ arg2 = &ldbt2.dbt;
+
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+
+ id4 = (*jenv)->GetIntField(jenv, jarg4, rep_processmsg_envid);
+ arg4 = &id4;
+
+ arg5 = *(DB_LSN **)&jarg5;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_env_rep_process_message(arg1,arg2,arg3,arg4,arg5);
+
+ if (!DB_RETOK_REPPMSG(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+ jresult = (jint)result;
+
+ (*jenv)->SetIntField(jenv, jarg4, rep_processmsg_envid, *arg4);
+
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1start(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg2, jint jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ DBT *arg2 = (DBT *) 0 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+ DBT_LOCKED ldbt2 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt2, jarg2) != 0)
+ return ;
+ arg2 = &ldbt2.dbt;
+
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_rep_start(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+
+ __dbj_dbt_release(jenv, jarg2, arg2, &ldbt2);
+
+}
+
+
+JNIEXPORT jobject JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1rep_1stat(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ jobject jresult = 0 ;
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ u_int32_t arg2 ;
+ DB_REP_STAT *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_REP_STAT *)__db_env_rep_stat(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+
+
+ jresult = (*jenv)->NewObject(jenv, rep_stat_class, rep_stat_construct);
+ if (jresult != NULL)
+ __dbj_fill_rep_stat(jenv, rep_stat_class, jresult, result);
+ __os_ufree(NULL, result);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rep_1limit(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ jlong arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_rep_limit(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1set_1rep_1transport(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jobject jarg3) {
+ struct __db_env *arg1 = (struct __db_env *) 0 ;
+ int arg2 ;
+ int (*arg3)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t) = (int (*)(DB_ENV *,DBT const *,DBT const *,DB_LSN const *,int,u_int32_t)) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_env **)&jarg1;
+ arg2 = (int)jarg2;
+
+ arg3 = (jarg3 == NULL) ? NULL : __dbj_rep_transport;
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_env_set_rep_transport(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, JDBENV);
+
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1strerror(JNIEnv *jenv, jclass jcls, jint jarg1) {
+ jstring jresult = 0 ;
+ int arg1 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (int)jarg1;
+ result = (char *)DbEnv_strerror(arg1);
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1major(JNIEnv *jenv, jclass jcls) {
+ jint jresult = 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ result = (int)DbEnv_get_version_major();
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1minor(JNIEnv *jenv, jclass jcls) {
+ jint jresult = 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ result = (int)DbEnv_get_version_minor();
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1patch(JNIEnv *jenv, jclass jcls) {
+ jint jresult = 0 ;
+ int result;
+
+ (void)jenv;
+ (void)jcls;
+ result = (int)DbEnv_get_version_patch();
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1get_1version_1string(JNIEnv *jenv, jclass jcls) {
+ jstring jresult = 0 ;
+ char *result;
+
+ (void)jenv;
+ (void)jcls;
+ result = (char *)DbEnv_get_version_string();
+
+ {
+ if(result) jresult = (*jenv)->NewStringUTF(jenv, result);
+ }
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1abort0(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_txn_abort(arg1);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1commit0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_txn_commit(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1discard0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_txn_discard(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1id(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (u_int32_t)__db_txn_id(arg1);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1prepare(JNIEnv *jenv, jclass jcls, jlong jarg1, jbyteArray jarg2) {
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ u_int8_t *arg2 = (u_int8_t *) 0 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+
+ arg2 = (u_int8_t *)(*jenv)->GetByteArrayElements(jenv, jarg2, NULL);
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ if ((*jenv)->GetArrayLength(jenv, jarg2) < DB_XIDDATASIZE) {
+ __dbj_throw(jenv, EINVAL,
+ "DbTxn.prepare gid array must be >= 128 bytes", NULL, TXN2JDBENV);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_txn_prepare(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
+
+
+ (*jenv)->ReleaseByteArrayElements(jenv, jarg2, (jbyte *)arg2, 0);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbTxn_1set_1timeout(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jint jarg3) {
+ struct __db_txn *arg1 = (struct __db_txn *) 0 ;
+ db_timeout_t arg2 ;
+ u_int32_t arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_txn **)&jarg1;
+ arg2 = (db_timeout_t)jarg2;
+ arg3 = (u_int32_t)jarg3;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_txn_set_timeout(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, TXN2JDBENV);
+
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbLogc_1close0(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_log_cursor *arg1 = (struct __db_log_cursor *) 0 ;
+ u_int32_t arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_log_cursor **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_log_cursor_close(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbLogc_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2, jobject jarg3, jint jarg4) {
+ jint jresult = 0 ;
+ struct __db_log_cursor *arg1 = (struct __db_log_cursor *) 0 ;
+ DB_LSN *arg2 = (DB_LSN *) 0 ;
+ DBT *arg3 = (DBT *) 0 ;
+ u_int32_t arg4 ;
+ int result;
+ DBT_LOCKED ldbt3 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_log_cursor **)&jarg1;
+ arg2 = *(DB_LSN **)&jarg2;
+
+ if (__dbj_dbt_copyin(jenv, &ldbt3, jarg3) != 0)
+ return 0;
+ arg3 = &ldbt3.dbt;
+
+ arg4 = (u_int32_t)jarg4;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ result = (int)__db_log_cursor_get(arg1,arg2,arg3,arg4);
+
+ if (!DB_RETOK_LGGET(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+ jresult = (jint)result;
+
+ __dbj_dbt_release(jenv, jarg3, arg3, &ldbt3);
+
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_delete_1DbLock(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct __db_lock_u *arg1 = (struct __db_lock_u *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_lock_u **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ delete___db_lock_u(arg1);
+
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_new_1DbLsn(JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) {
+ jlong jresult = 0 ;
+ u_int32_t arg1 ;
+ u_int32_t arg2 ;
+ struct __db_lsn *result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = (u_int32_t)jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ errno = 0;
+ result = (struct __db_lsn *)new___db_lsn(arg1,arg2);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ *(struct __db_lsn **)&jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_delete_1DbLsn(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ struct __db_lsn *arg1 = (struct __db_lsn *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_lsn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+ delete___db_lsn(arg1);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbLsn_1get_1file(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_lsn *arg1 = (struct __db_lsn *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_lsn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (u_int32_t)__db_lsn_get_file(arg1);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbLsn_1get_1offset(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_lsn *arg1 = (struct __db_lsn *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_lsn **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+ result = (u_int32_t)__db_lsn_get_offset(arg1);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ DB_CACHE_PRIORITY result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (DB_CACHE_PRIORITY)__db_mpoolfile_get_priority(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1priority(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2) {
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ DB_CACHE_PRIORITY arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+ arg2 = (DB_CACHE_PRIORITY)jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_mpoolfile_set_priority(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT jint JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jint jresult = 0 ;
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ u_int32_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = (u_int32_t)__db_mpoolfile_get_flags(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ jresult = (jint)result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1flags(JNIEnv *jenv, jclass jcls, jlong jarg1, jint jarg2, jboolean jarg3) {
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ u_int32_t arg2 ;
+ int_bool arg3 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+ arg2 = (u_int32_t)jarg2;
+
+ arg3 = (jarg3 == JNI_TRUE);
+
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_mpoolfile_set_flags(arg1,arg2,arg3);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+JNIEXPORT jlong JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1get_1maxsize(JNIEnv *jenv, jclass jcls, jlong jarg1) {
+ jlong jresult = 0 ;
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ jlong result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return 0;
+ }
+
+
+ errno = 0;
+ result = __db_mpoolfile_get_maxsize(arg1);
+
+ if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, NULL);
+
+ jresult = result;
+ return jresult;
+}
+
+
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbMpoolFile_1set_1maxsize(JNIEnv *jenv, jclass jcls, jlong jarg1, jlong jarg2) {
+ struct __db_mpoolfile *arg1 = (struct __db_mpoolfile *) 0 ;
+ jlong arg2 ;
+ db_ret_t result;
+
+ (void)jenv;
+ (void)jcls;
+ arg1 = *(struct __db_mpoolfile **)&jarg1;
+ arg2 = jarg2;
+
+ if (jarg1 == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return ;
+ }
+
+
+ result = (db_ret_t)__db_mpoolfile_set_maxsize(arg1,arg2);
+
+ if (!DB_RETOK_STD(result))
+ __dbj_throw(jenv, result, NULL, NULL, NULL);
+
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/db/libdb_java/java-post.sed b/db/libdb_java/java-post.sed
new file mode 100644
index 000000000..a40afd104
--- /dev/null
+++ b/db/libdb_java/java-post.sed
@@ -0,0 +1,27 @@
+# Hide some symbols
+/public class db_java/s!public!/* package */!
+/public [^(]* delete/s!public!/* package */!
+/public [^(]* [A-Za-z_]*0(/s!public!/* package */!
+
+# Mark methods that don't throw exceptions
+s!public [^(]*get_version_[a-z]*([^)]*)!& /* no exception */!
+s!public [^(]*err[a-z_]*([^)]*)!& /* no exception */!
+s!public [^(]*log_compare([^)]*)!& /* no exception */!
+s!public [^(]* feedback([^)]*)!& /* no exception */!
+
+# Mark methods that throw special exceptions
+s!\(public [^(]* open([^)]*)\) {!\1 throws DbException, java.io.FileNotFoundException {!
+s!\(public [^(]* dbremove([^)]*)\) {!\1 throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {!
+s!\(public [^(]* dbrename([^)]*)\) {!\1 throws DbException, DbDeadlockException, DbLockNotGrantedException, java.io.FileNotFoundException {!
+s!\(public [^(]*remove([^)]*)\) {!\1 throws DbException, java.io.FileNotFoundException {!
+s!\(public [^(]*rename([^)]*)\) {!\1 throws DbException, java.io.FileNotFoundException {!
+
+# Everything else throws a DbException
+s!\(public [^(]*([^)]*)\);!\1 throws DbException;!
+s!\(public [^(]*([^)]*)\) *{!\1 throws DbException {!
+
+# Add initialize methods for Java parts of Db and DbEnv
+s!\.new_DbEnv(.*$!&\
+ initialize();!
+s!\.new_Db(.*$!&\
+ initialize(dbenv);!
diff --git a/db/libdb_java/java_Db.c b/db/libdb_java/java_Db.c
deleted file mode 100644
index 5b01e5068..000000000
--- a/db/libdb_java/java_Db.c
+++ /dev/null
@@ -1,964 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_Db.c,v 11.34 2000/11/30 00:58:38 ubell Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "db_int.h"
-#include "db_page.h"
-#include "db_ext.h"
-#include "java_util.h"
-#include "com_sleepycat_db_Db.h"
-
-/* This struct is used in Db.verify and its callback */
-struct verify_callback_struct {
- JNIEnv *env;
- jobject streamobj;
- jbyteArray bytes;
- int nbytes;
- jmethodID writemid;
-};
-
-JAVADB_WO_ACCESS_METHOD(Db, jint, flags, DB, flags)
-JAVADB_WO_ACCESS_METHOD(Db, jint, h_1ffactor, DB, h_ffactor)
-JAVADB_WO_ACCESS_METHOD(Db, jint, h_1nelem, DB, h_nelem)
-JAVADB_WO_ACCESS_METHOD(Db, jint, lorder, DB, lorder)
-JAVADB_WO_ACCESS_METHOD(Db, jint, re_1delim, DB, re_delim)
-JAVADB_WO_ACCESS_METHOD(Db, jint, re_1len, DB, re_len)
-JAVADB_WO_ACCESS_METHOD(Db, jint, re_1pad, DB, re_pad)
-JAVADB_WO_ACCESS_METHOD(Db, jint, q_1extentsize, DB, q_extentsize)
-JAVADB_WO_ACCESS_METHOD(Db, jint, bt_1maxkey, DB, bt_maxkey)
-JAVADB_WO_ACCESS_METHOD(Db, jint, bt_1minkey, DB, bt_minkey)
-
-/* This only gets called once ever, at the beginning of execution
- * and can be used to initialize unchanging methodIds, fieldIds, etc.
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_one_1time_1init
- (JNIEnv *jnienv, /*Db.class*/ jclass jthisclass)
-{
- COMPQUIET(jnienv, NULL);
- COMPQUIET(jthisclass, NULL);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1init
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbEnv*/ jobject jdbenv, jint flags)
-{
- int err;
- DB *db;
- DB_JAVAINFO *dbinfo;
- DB_ENV *dbenv;
-
- dbenv = get_DB_ENV(jnienv, jdbenv);
- dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- DB_ASSERT(dbinfo == NULL);
-
- err = db_create(&db, dbenv, flags);
- if (verify_return(jnienv, err, 0)) {
- set_private_dbobj(jnienv, name_DB, jthis, db);
- dbinfo = dbji_construct(jnienv, flags);
- set_private_info(jnienv, name_DB, jthis, dbinfo);
- db->cj_internal = dbinfo;
- }
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db__1close
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jint flags)
-{
- int err;
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return (0);
-
- JAVADB_API_BEGIN(db, jthis);
-
- /* Null out the private data to indicate the DB is invalid.
- * We do this in advance to help guard against multithreading
- * issues.
- */
- set_private_dbobj(jnienv, name_DB, jthis, 0);
-
- err = db->close(db, flags);
- if (err != DB_INCOMPLETE)
- verify_return(jnienv, err, 0);
- dbji_dealloc(dbinfo, jnienv);
-
- /* don't call JAVADB_API_END - db cannot be used */
- return (err);
-}
-
-/* We are being notified that the parent DbEnv has closed.
- * Zero out the pointer to the DB, since it is no longer
- * valid, to prevent mistakes. The user will get a null
- * pointer exception if they try to use this Db again.
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1notify_1internal
- (JNIEnv *jnienv, /*Db*/ jobject jthis)
-{
- set_private_dbobj(jnienv, name_DB, jthis, 0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_append_1recno_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbAppendRecno*/ jobject jcallback)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_append_recno_object(dbinfo, jnienv, db, jcallback);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1compare_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbBtreeCompare*/ jobject jbtcompare)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_bt_compare_object(dbinfo, jnienv, db, jbtcompare);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_bt_1prefix_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbBtreePrefix*/ jobject jbtprefix)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_bt_prefix_object(dbinfo, jnienv, db, jbtprefix);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_cursor
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid, jint flags)
-{
- int err;
- DBC *dbc;
- DB *db = get_DB(jnienv, jthis);
- DB_TXN *dbtxnid = get_DB_TXN(jnienv, txnid);
-
- if (!verify_non_null(jnienv, db))
- return (NULL);
- err = db->cursor(db, dbtxnid, &dbc, flags);
- verify_return(jnienv, err, 0);
- return (get_Dbc(jnienv, dbc));
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_del
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
- /*Dbt*/ jobject key, jint dbflags)
-{
- int err;
- DB_TXN *dbtxnid;
- DB *db;
- JDBT dbkey;
-
- err = 0;
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return (0);
-
- JAVADB_API_BEGIN(db, jthis);
- dbtxnid = get_DB_TXN(jnienv, txnid);
- if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
- goto out;
-
- err = db->del(db, dbtxnid, &dbkey.dbt->dbt, dbflags);
- if (err != DB_NOTFOUND) {
- verify_return(jnienv, err, 0);
- }
-
- out:
- jdbt_unlock(&dbkey, jnienv);
- JAVADB_API_END(db);
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_dup_1compare_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbDupCompare*/ jobject jdupcompare)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_dup_compare_object(dbinfo, jnienv, db, jdupcompare);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_err
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jint ecode, jstring msg)
-{
- DB *db;
- JSTR msg_string;
-
- if (jstr_lock(&msg_string, jnienv, msg) != 0)
- goto out;
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- goto out;
-
- JAVADB_API_BEGIN(db, jthis);
- db->err(db, ecode, msg_string.string);
- JAVADB_API_END(db);
-
- out:
- jstr_unlock(&msg_string, jnienv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_errx
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring msg)
-{
- JSTR msg_string;
- DB *db = get_DB(jnienv, jthis);
-
- if (jstr_lock(&msg_string, jnienv, msg) != 0)
- goto out;
- if (!verify_non_null(jnienv, db))
- goto out;
-
- JAVADB_API_BEGIN(db, jthis);
- db->errx(db, msg_string.string);
- JAVADB_API_END(db);
-
- out:
- jstr_unlock(&msg_string, jnienv);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_fd
- (JNIEnv *jnienv, /*Db*/ jobject jthis)
-{
- int err;
- int return_value = 0;
- DB *db = get_DB(jnienv, jthis);
-
- if (!verify_non_null(jnienv, db))
- return (0);
-
- JAVADB_API_BEGIN(db, jthis);
- err = db->fd(db, &return_value);
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
-
- return (return_value);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_feedback_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbFeedback*/ jobject jfeedback)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_feedback_object(dbinfo, jnienv, db, jfeedback);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
- /*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
-{
- int err, op_flags, retry;
- DB *db;
- OpKind keyop, dataop;
- DB_TXN *dbtxnid;
- JDBT dbkey, dbdata;
-
- err = 0;
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- goto out3;
-
- JAVADB_API_BEGIN(db, jthis);
-
- /* Depending on flags, the key may be input/output. */
- keyop = inOp;
- dataop = outOp;
- op_flags = flags & DB_OPFLAGS_MASK;
- if (op_flags == DB_SET_RECNO) {
- keyop = inOutOp;
- }
- else if (op_flags == DB_GET_BOTH) {
- keyop = inOutOp;
- dataop = inOutOp;
- }
-
- dbtxnid = get_DB_TXN(jnienv, txnid);
-
- if (jdbt_lock(&dbkey, jnienv, key, keyop) != 0)
- goto out2;
- if (jdbt_lock(&dbdata, jnienv, data, dataop) != 0)
- goto out1;
- for (retry = 0; retry < 3; retry++) {
- err = db->get(db, dbtxnid, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
-
- /* If we failed due to lack of memory in our DBT arrays,
- * retry.
- */
- if (err != ENOMEM)
- break;
- if (!jdbt_realloc(&dbdata, jnienv))
- break;
- }
- if (err != DB_NOTFOUND) {
- verify_return(jnienv, err, 0);
- }
- out1:
- jdbt_unlock(&dbdata, jnienv);
- out2:
- jdbt_unlock(&dbkey, jnienv);
- out3:
- JAVADB_API_END(db);
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_hash_1changed
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbHash*/ jobject jhash)
-{
- DB *db;
- DB_JAVAINFO *dbinfo;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
-
- JAVADB_API_BEGIN(db, jthis);
- dbinfo = (DB_JAVAINFO*)db->cj_internal;
- dbji_set_h_hash_object(dbinfo, jnienv, db, jhash);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_join
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*Dbc[]*/ jobjectArray curslist,
- jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
- int count = (*jnienv)->GetArrayLength(jnienv, curslist);
- DBC **newlist = (DBC **)malloc(sizeof(DBC *) * (count+1));
- DBC *dbc;
- int i;
-
- /* Convert the java array of Dbc's to a C array of DBC's. */
- for (i=0; i<count; i++) {
- jobject jobj = (*jnienv)->GetObjectArrayElement(jnienv, curslist, i);
- if (jobj == 0) {
- /*
- * An embedded null in the array is treated
- * as an endpoint.
- */
- newlist[i] = 0;
- break;
- }
- else {
- newlist[i] = get_DBC(jnienv, jobj);
- }
- }
- newlist[count] = 0;
-
- if (!verify_non_null(jnienv, db))
- return (NULL);
- JAVADB_API_BEGIN(db, jthis);
-
- err = db->join(db, newlist, &dbc, flags);
- free(newlist);
- verify_return(jnienv, err, 0);
-
- JAVADB_API_END(db);
- return (get_Dbc(jnienv, dbc));
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_key_1range
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject jtxn,
- /*Dbt*/ jobject jkey, jobject /*DbKeyRange*/ range, jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
- DB_TXN *txn = get_DB_TXN(jnienv, jtxn);
- JDBT dbkey;
- DB_KEY_RANGE result;
- jfieldID fid;
- jclass krclass;
-
- if (!verify_non_null(jnienv, db))
- return;
- JAVADB_API_BEGIN(db, jthis);
- if (!verify_non_null(jnienv, range))
- return;
- if (jdbt_lock(&dbkey, jnienv, jkey, inOp) != 0)
- goto out;
- err = db->key_range(db, txn, &dbkey.dbt->dbt, &result, flags);
- if (verify_return(jnienv, err, 0)) {
- /* fill in the values of the DbKeyRange structure */
- krclass = get_class(jnienv, "DbKeyRange");
- fid = (*jnienv)->GetFieldID(jnienv, krclass, "less", "D");
- (*jnienv)->SetDoubleField(jnienv, range, fid, result.less);
- fid = (*jnienv)->GetFieldID(jnienv, krclass, "equal", "D");
- (*jnienv)->SetDoubleField(jnienv, range, fid, result.equal);
- fid = (*jnienv)->GetFieldID(jnienv, krclass, "greater", "D");
- (*jnienv)->SetDoubleField(jnienv, range, fid, result.greater);
- }
- out:
- jdbt_unlock(&dbkey, jnienv);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_put
- (JNIEnv *jnienv, /*Db*/ jobject jthis, /*DbTxn*/ jobject txnid,
- /*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
-{
- int err;
- DB *db;
- DB_TXN *dbtxnid;
- JDBT dbkey, dbdata;
-
- err = 0;
- db = get_DB(jnienv, jthis);
- dbtxnid = get_DB_TXN(jnienv, txnid);
- if (!verify_non_null(jnienv, db))
- return (0); /* error will be thrown, retval doesn't matter */
- JAVADB_API_BEGIN(db, jthis);
-
- if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
- goto out2;
- if (jdbt_lock(&dbdata, jnienv, data, inOp) != 0)
- goto out1;
-
- if (!verify_non_null(jnienv, db))
- goto out1;
- err = db->put(db, dbtxnid, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
- if (err != DB_KEYEXIST) {
- verify_return(jnienv, err, 0);
- }
- out1:
- jdbt_unlock(&dbdata, jnienv);
- out2:
- jdbt_unlock(&dbkey, jnienv);
- JAVADB_API_END(db);
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_rename
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file,
- jstring database, jstring newname, jint flags)
-{
- int err;
- DB *db;
- DB_JAVAINFO *dbinfo;
- JSTR j_file;
- JSTR j_database;
- JSTR j_newname;
-
- db = get_DB(jnienv, jthis);
- dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
- JAVADB_API_BEGIN(db, jthis);
- if (jstr_lock(&j_file, jnienv, file) != 0)
- goto out3;
- if (jstr_lock(&j_database, jnienv, database) != 0)
- goto out2;
- if (jstr_lock(&j_newname, jnienv, newname) != 0)
- goto out1;
-
- err = db->rename(db, j_file.string, j_database.string,
- j_newname.string, flags);
-
- verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
- dbji_dealloc(dbinfo, jnienv);
- set_private_dbobj(jnienv, name_DB, jthis, 0);
-
- out1:
- jstr_unlock(&j_newname, jnienv);
- out2:
- jstr_unlock(&j_database, jnienv);
- out3:
- jstr_unlock(&j_file, jnienv);
- /* don't call JAVADB_API_END - db cannot be used */
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_remove
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file,
- jstring database, jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
- DB_JAVAINFO *dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- JSTR j_file;
- JSTR j_database;
-
- dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
- JAVADB_API_BEGIN(db, jthis);
- if (jstr_lock(&j_file, jnienv, file) != 0)
- goto out2;
- if (jstr_lock(&j_database, jnienv, database) != 0)
- goto out1;
- err = db->remove(db, j_file.string, j_database.string, flags);
-
- set_private_dbobj(jnienv, name_DB, jthis, 0);
- verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
- dbji_dealloc(dbinfo, jnienv);
-
- out1:
- jstr_unlock(&j_database, jnienv);
- out2:
- jstr_unlock(&j_file, jnienv);
- /* don't call JAVADB_API_END - db cannot be used */
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_Db_set_1pagesize
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jlong value)
-{
- int err;
- DB *db;
-
- db = get_DB(jnienv, jthis);
- if (verify_non_null(jnienv, db)) {
- JAVADB_API_BEGIN(db, jthis);
- err = db->set_pagesize(db, (u_int32_t)value);
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_Db_set_1cachesize
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jint gbytes, jint bytes,
- jint ncaches)
-{
- int err;
- DB *db;
-
- db = get_DB(jnienv, jthis);
- if (verify_non_null(jnienv, db)) {
- JAVADB_API_BEGIN(db, jthis);
- err = db->set_cachesize(db, gbytes, bytes, ncaches);
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_Db_set_1re_1source
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring re_source)
-{
- int err;
- DB *db;
-
- db = get_DB(jnienv, jthis);
- if (verify_non_null(jnienv, db)) {
- JAVADB_API_BEGIN(db, jthis);
-
- /* XXX does the string from get_c_string ever get freed? */
- if (re_source != NULL)
- err = db->set_re_source(db, get_c_string(jnienv, re_source));
- else
- err = db->set_re_source(db, 0);
-
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
- }
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Db_stat
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
- jobject retval = NULL;
- jclass dbclass;
- void *statp = 0;
- DB_BTREE_STAT *bstp;
- DB_HASH_STAT *hstp;
- DB_QUEUE_STAT *qstp;
-
- if (!verify_non_null(jnienv, db))
- return (NULL);
-
- JAVADB_API_BEGIN(db, jthis);
-
- err = db->stat(db, &statp, NULL, flags);
- if (verify_return(jnienv, err, 0)) {
- DBTYPE dbtype = db->get_type(db);
- switch (dbtype) {
-
- /* Btree and recno share the same stat structure */
- case DB_BTREE:
- case DB_RECNO:
- bstp = (DB_BTREE_STAT *)statp;
- retval = create_default_object(jnienv,
- name_DB_BTREE_STAT);
- dbclass = get_class(jnienv, name_DB_BTREE_STAT);
-
- /* Set the individual fields */
- set_int_field(jnienv, dbclass, retval,
- "bt_magic", bstp->bt_magic);
- set_int_field(jnienv, dbclass, retval,
- "bt_version", bstp->bt_version);
- set_int_field(jnienv, dbclass, retval,
- "bt_metaflags", bstp->bt_metaflags);
- set_int_field(jnienv, dbclass, retval,
- "bt_nkeys", bstp->bt_nkeys);
- set_int_field(jnienv, dbclass, retval,
- "bt_ndata", bstp->bt_ndata);
- set_int_field(jnienv, dbclass, retval,
- "bt_pagesize", bstp->bt_pagesize);
- set_int_field(jnienv, dbclass, retval,
- "bt_maxkey", bstp->bt_maxkey);
- set_int_field(jnienv, dbclass, retval,
- "bt_minkey", bstp->bt_minkey);
- set_int_field(jnienv, dbclass, retval,
- "bt_re_len", bstp->bt_re_len);
- set_int_field(jnienv, dbclass, retval,
- "bt_re_pad", bstp->bt_re_pad);
- set_int_field(jnienv, dbclass, retval,
- "bt_levels", bstp->bt_levels);
- set_int_field(jnienv, dbclass, retval,
- "bt_int_pg", bstp->bt_int_pg);
- set_int_field(jnienv, dbclass, retval,
- "bt_leaf_pg", bstp->bt_leaf_pg);
- set_int_field(jnienv, dbclass, retval,
- "bt_dup_pg", bstp->bt_dup_pg);
- set_int_field(jnienv, dbclass, retval,
- "bt_over_pg", bstp->bt_over_pg);
- set_int_field(jnienv, dbclass, retval,
- "bt_free", bstp->bt_free);
- set_int_field(jnienv, dbclass, retval,
- "bt_int_pgfree", bstp->bt_int_pgfree);
- set_int_field(jnienv, dbclass, retval,
- "bt_leaf_pgfree", bstp->bt_leaf_pgfree);
- set_int_field(jnienv, dbclass, retval,
- "bt_dup_pgfree", bstp->bt_dup_pgfree);
- set_int_field(jnienv, dbclass, retval,
- "bt_over_pgfree", bstp->bt_over_pgfree);
-
- break;
-
- /* Hash stat structure */
- case DB_HASH:
- hstp = (DB_HASH_STAT *)statp;
- retval = create_default_object(jnienv,
- name_DB_HASH_STAT);
- dbclass = get_class(jnienv, name_DB_HASH_STAT);
-
- /* Set the individual fields */
- set_int_field(jnienv, dbclass, retval,
- "hash_magic", hstp->hash_magic);
- set_int_field(jnienv, dbclass, retval,
- "hash_version", hstp->hash_version);
- set_int_field(jnienv, dbclass, retval,
- "hash_metaflags", hstp->hash_metaflags);
- set_int_field(jnienv, dbclass, retval,
- "hash_nkeys", hstp->hash_nkeys);
- set_int_field(jnienv, dbclass, retval,
- "hash_ndata", hstp->hash_ndata);
- set_int_field(jnienv, dbclass, retval,
- "hash_pagesize", hstp->hash_pagesize);
- set_int_field(jnienv, dbclass, retval,
- "hash_nelem", hstp->hash_nelem);
- set_int_field(jnienv, dbclass, retval,
- "hash_ffactor", hstp->hash_ffactor);
- set_int_field(jnienv, dbclass, retval,
- "hash_buckets", hstp->hash_buckets);
- set_int_field(jnienv, dbclass, retval,
- "hash_free", hstp->hash_free);
- set_int_field(jnienv, dbclass, retval,
- "hash_bfree", hstp->hash_bfree);
- set_int_field(jnienv, dbclass, retval,
- "hash_bigpages", hstp->hash_bigpages);
- set_int_field(jnienv, dbclass, retval,
- "hash_big_bfree", hstp->hash_big_bfree);
- set_int_field(jnienv, dbclass, retval,
- "hash_overflows", hstp->hash_overflows);
- set_int_field(jnienv, dbclass, retval,
- "hash_ovfl_free", hstp->hash_ovfl_free);
- set_int_field(jnienv, dbclass, retval,
- "hash_dup", hstp->hash_dup);
- set_int_field(jnienv, dbclass, retval,
- "hash_dup_free", hstp->hash_dup_free);
-
- break;
-
- case DB_QUEUE:
- qstp = (DB_QUEUE_STAT *)statp;
- retval = create_default_object(jnienv,
- name_DB_QUEUE_STAT);
- dbclass = get_class(jnienv, name_DB_QUEUE_STAT);
-
- /* Set the individual fields */
- set_int_field(jnienv, dbclass, retval,
- "qs_magic", qstp->qs_magic);
- set_int_field(jnienv, dbclass, retval,
- "qs_version", qstp->qs_version);
- set_int_field(jnienv, dbclass, retval,
- "qs_metaflags", qstp->qs_metaflags);
- set_int_field(jnienv, dbclass, retval,
- "qs_nkeys", qstp->qs_nkeys);
- set_int_field(jnienv, dbclass, retval,
- "qs_ndata", qstp->qs_ndata);
- set_int_field(jnienv, dbclass, retval,
- "qs_pagesize", qstp->qs_pagesize);
- set_int_field(jnienv, dbclass, retval,
- "qs_pages", qstp->qs_pages);
- set_int_field(jnienv, dbclass, retval,
- "qs_re_len", qstp->qs_re_len);
- set_int_field(jnienv, dbclass, retval,
- "qs_re_pad", qstp->qs_re_pad);
- set_int_field(jnienv, dbclass, retval,
- "qs_pgfree", qstp->qs_pgfree);
- set_int_field(jnienv, dbclass, retval,
- "qs_first_recno", qstp->qs_first_recno);
- set_int_field(jnienv, dbclass, retval,
- "qs_cur_recno", qstp->qs_cur_recno);
- break;
-
- /* That's all the database types we're aware of! */
- default:
- report_exception(jnienv,
- "Db.stat not implemented for types"
- "other than HASH, BTREE and RECNO",
- EINVAL, 0);
- break;
- }
- free(statp);
- }
- JAVADB_API_END(db);
- return (retval);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_sync
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
-
- if (!verify_non_null(jnienv, db))
- return (0);
- JAVADB_API_BEGIN(db, jthis);
- err = db->sync(db, flags);
- if (err != DB_INCOMPLETE)
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
- return (err);
-}
-
-JNIEXPORT jboolean JNICALL Java_com_sleepycat_db_Db_get_1byteswapped
- (JNIEnv *jnienv, /*Db*/ jobject jthis)
-{
- DB *db;
- jboolean retval;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return (0);
-
- JAVADB_API_BEGIN(db, jthis);
- retval = db->get_byteswapped(db) ? 1 : 0;
- JAVADB_API_END(db);
- return (retval);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Db_get_1type
- (JNIEnv *jnienv, /*Db*/ jobject jthis)
-{
- DB *db;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return (0);
-
- return ((jint)db->type);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1open
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring file, jstring database,
- jint type, jint flags, jint mode)
-{
- int err;
- DB *db;
- JSTR dbfile;
- JSTR dbdatabase;
-
- /* Java is assumed to be threaded. */
- flags |= DB_THREAD;
-
- db = get_DB(jnienv, jthis);
- if (jstr_lock(&dbfile, jnienv, file) != 0)
- goto out2;
- if (jstr_lock(&dbdatabase, jnienv, database) != 0)
- goto out1;
- if (verify_non_null(jnienv, db)) {
- JAVADB_API_BEGIN(db, jthis);
- err = db->open(db, dbfile.string, dbdatabase.string,
- (DBTYPE)type, flags, mode);
- verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
- JAVADB_API_END(db);
- }
- out1:
- jstr_unlock(&dbdatabase, jnienv);
- out2:
- jstr_unlock(&dbfile, jnienv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_upgrade
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,
- jint flags)
-{
- int err;
- DB *db = get_DB(jnienv, jthis);
- JSTR j_name;
-
- if (verify_non_null(jnienv, db)) {
- JAVADB_API_BEGIN(db, jthis);
- if (jstr_lock(&j_name, jnienv, name) != 0)
- goto out;
- err = db->upgrade(db, j_name.string, flags);
- verify_return(jnienv, err, 0);
- JAVADB_API_END(db);
- }
- out:
- jstr_unlock(&j_name, jnienv);
-}
-
-static int java_verify_callback(void *handle, const void *str_arg)
-{
- char *str;
- struct verify_callback_struct *vc;
- int len;
- jthrowable except;
- JNIEnv *jnienv;
-
- str = (char *)str_arg;
- vc = (struct verify_callback_struct *)handle;
- jnienv = vc->env;
- len = strlen(str)+1;
- if (len > vc->nbytes) {
- vc->nbytes = len;
- vc->bytes = (*jnienv)->NewByteArray(jnienv, len);
- }
- (*jnienv)->SetByteArrayRegion(jnienv, vc->bytes, 0, len, (jbyte*)str);
- (*jnienv)->CallVoidMethod(jnienv, vc->streamobj,
- vc->writemid, vc->bytes, 0, len-1);
-
- if ((except = (*jnienv)->ExceptionOccurred(jnienv)) != NULL)
- return (EIO);
-
- return (0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db_verify
- (JNIEnv *jnienv, /*Db*/ jobject jthis, jstring name,
- jstring subdb, jobject stream, jint flags)
-{
- int err;
- DB *db;
- JSTR j_name;
- JSTR j_subdb;
- struct verify_callback_struct vcs;
- jclass streamclass;
-
- db = get_DB(jnienv, jthis);
- if (!verify_non_null(jnienv, db))
- return;
- JAVADB_API_BEGIN(db, jthis);
-
- if (jstr_lock(&j_name, jnienv, name) != 0)
- goto out2;
- if (jstr_lock(&j_subdb, jnienv, subdb) != 0)
- goto out1;
-
- /* set up everything we need for the callbacks */
- vcs.env = jnienv;
- vcs.streamobj = stream;
- vcs.nbytes = 100;
- vcs.bytes = (*jnienv)->NewByteArray(jnienv, vcs.nbytes);
-
- /* get the method ID for OutputStream.write(byte[], int, int); */
- streamclass = (*jnienv)->FindClass(jnienv, "java/io/OutputStream");
- vcs.writemid = (*jnienv)->GetMethodID(jnienv, streamclass,
- "write", "([BII)V");
-
- /* invoke verify - this will invoke the callback repeatedly. */
- err = __db_verify_internal(db, j_name.string, j_subdb.string,
- &vcs, java_verify_callback, flags);
- verify_return(jnienv, err, 0);
-
-out1:
- jstr_unlock(&j_subdb, jnienv);
-out2:
- jstr_unlock(&j_name, jnienv);
- JAVADB_API_END(db);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Db__1finalize
- (JNIEnv *jnienv, jobject jthis,
- jobject /*DbErrcall*/ errcall, jstring errpfx)
-{
- DB_JAVAINFO *dbinfo;
- DB *db;
-
- dbinfo = get_DB_JAVAINFO(jnienv, jthis);
- db = get_DB(jnienv, jthis);
- DB_ASSERT(dbinfo != NULL);
-
- /* Note: We can never be sure if the underlying DB is attached to
- * a DB_ENV that was already closed. Sure, that's a user error,
- * but it shouldn't crash the VM. Therefore, we cannot just
- * automatically close if the handle indicates we are not yet
- * closed. The best we can do is detect this and report it.
- */
- if (db != NULL) {
- /* If this error occurs, this object was never closed. */
- report_errcall(jnienv, errcall, errpfx,
- "Db.finalize: open Db object destroyed");
- }
-
- /* Shouldn't see this object again, but just in case */
- set_private_dbobj(jnienv, name_DB, jthis, 0);
- set_private_info(jnienv, name_DB, jthis, 0);
-
- dbji_destroy(dbinfo, jnienv);
-}
diff --git a/db/libdb_java/java_DbEnv.c b/db/libdb_java/java_DbEnv.c
deleted file mode 100644
index ff9207dd2..000000000
--- a/db/libdb_java/java_DbEnv.c
+++ /dev/null
@@ -1,1300 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_DbEnv.c,v 11.37 2001/01/11 18:19:52 bostic Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "db_int.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbEnv.h"
-
-/* We keep these lined up, and alphabetical by field name,
- * for comparison with C++'s list.
- */
-JAVADB_WO_ACCESS_STRING(DbEnv, data_1dir, DB_ENV, data_dir)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lg_1bsize, DB_ENV, lg_bsize)
-JAVADB_WO_ACCESS_STRING(DbEnv, lg_1dir, DB_ENV, lg_dir)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lg_1max, DB_ENV, lg_max)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lk_1detect, DB_ENV, lk_detect)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lk_1max, DB_ENV, lk_max)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lk_1max_1locks, DB_ENV, lk_max_locks)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lk_1max_1lockers, DB_ENV, lk_max_lockers)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, lk_1max_1objects, DB_ENV, lk_max_objects)
-/* mp_mmapsize is declared below, it needs an extra cast */
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, mutexlocks, DB_ENV, mutexlocks)
-JAVADB_WO_ACCESS_STRING(DbEnv, tmp_1dir, DB_ENV, tmp_dir)
-JAVADB_WO_ACCESS_METHOD(DbEnv, jint, tx_1max, DB_ENV, tx_max)
-
-static void DbEnv_errcall_callback(const char *prefix, char *message)
-{
- JNIEnv *jnienv;
- DB_ENV_JAVAINFO *envinfo = (DB_ENV_JAVAINFO *)prefix;
- jstring pre;
-
- /* Note: these error cases are "impossible", and would
- * normally warrant an exception. However, without
- * a jnienv, we cannot throw an exception...
- * We don't want to trap or exit, since the point of
- * this facility is for the user to completely control
- * error situations.
- */
- if (envinfo == NULL) {
- /* Something is *really* wrong here, the
- * prefix is set in every environment created.
- */
- fprintf(stderr, "Error callback failed!\n");
- fprintf(stderr, "error: %s\n", message);
- return;
- }
-
- /* Should always succeed... */
- jnienv = dbjie_get_jnienv(envinfo);
-
- if (jnienv == NULL) {
-
- /* But just in case... */
- fprintf(stderr, "Cannot attach to current thread!\n");
- fprintf(stderr, "error: %s\n", message);
- return;
- }
-
- pre = dbjie_get_errpfx(envinfo, jnienv);
- report_errcall(jnienv, dbjie_get_errcall(envinfo), pre, message);
-}
-
-static void DbEnv_initialize(JNIEnv *jnienv, DB_ENV *dbenv,
- /*DbEnv*/ jobject jenv,
- /*DbErrcall*/ jobject jerrcall,
- int is_dbopen)
-{
- DB_ENV_JAVAINFO *envinfo;
-
- envinfo = get_DB_ENV_JAVAINFO(jnienv, jenv);
- DB_ASSERT(envinfo == NULL);
- envinfo = dbjie_construct(jnienv, jerrcall, is_dbopen);
- set_private_info(jnienv, name_DB_ENV, jenv, envinfo);
- dbenv->set_errpfx(dbenv, (const char*)envinfo);
- dbenv->set_errcall(dbenv, DbEnv_errcall_callback);
- dbenv->cj_internal = envinfo;
- set_private_dbobj(jnienv, name_DB_ENV, jenv, dbenv);
-}
-
-/* This is called when this DbEnv was made on behalf of a Db
- * created directly (without a parent DbEnv), and the Db is
- * being closed. We'll zero out the pointer to the DB_ENV,
- * since it is no longer valid, to prevent mistakes.
- */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1notify_1db_1close
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- DB_ENV_JAVAINFO *dbenvinfo;
-
- set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (dbenvinfo != NULL)
- dbjie_dealloc(dbenvinfo, jnienv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_feedback_1changed
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbFeedback*/ jobject jfeedback)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv) ||
- !verify_non_null(jnienv, dbenvinfo))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dbjie_set_feedback_object(dbenvinfo, jnienv, dbenv, jfeedback);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject /*DbErrcall*/ jerrcall,
- jint flags)
-{
- int err;
- DB_ENV *dbenv;
-
- err = db_env_create(&dbenv, flags);
- if (verify_return(jnienv, err, 0))
- DbEnv_initialize(jnienv, dbenv, jthis, jerrcall, 0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init_1using_1db
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject /*DbErrcall*/ jerrcall,
- /*Db*/ jobject jdb)
-{
- DB_ENV *dbenv;
- DB *db;
-
- db = get_DB(jnienv, jdb);
- dbenv = db->dbenv;
- DbEnv_initialize(jnienv, dbenv, jthis, jerrcall, 1);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_open
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring db_home,
- jint flags, jint mode)
-{
- int err;
- DB_ENV *dbenv;
- JSTR j_home;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv) ||
- !verify_non_null(jnienv, dbenvinfo))
- return;
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- if (jstr_lock(&j_home, jnienv, db_home) != 0)
- goto out;
-
- /* Java is assumed to be threaded. */
- flags |= DB_THREAD;
-
- err = dbenv->open(dbenv, j_home.string, flags, mode);
- verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND);
- out:
- jstr_unlock(&j_home, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_remove
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring db_home, jint flags)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
- JSTR j_home;
- int err = 0;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return;
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- if (jstr_lock(&j_home, jnienv, db_home) != 0)
- goto out;
-
- err = dbenv->remove(dbenv, j_home.string, flags);
- set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);
-
- if (dbenvinfo != NULL)
- dbjie_dealloc(dbenvinfo, jnienv);
-
- verify_return(jnienv, err, 0);
- out:
- jstr_unlock(&j_home, jnienv);
- /* don't call JAVADB_ENV_API_END - env cannot be used */
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1close
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags)
-{
- int err;
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- err = dbenv->close(dbenv, flags);
- set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);
-
- if (dbenvinfo != NULL)
- dbjie_dealloc(dbenvinfo, jnienv);
-
- /* Throw an exception if the close failed. */
- verify_return(jnienv, err, 0);
-
- /* don't call JAVADB_ENV_API_END - env cannot be used */
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_err
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint ecode, jstring msg)
-{
- JSTR msg_string;
- DB_ENV *dbenv;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- if (jstr_lock(&msg_string, jnienv, msg) != 0)
- goto out;
-
- dbenv->err(dbenv, ecode, msg_string.string);
- out:
- jstr_unlock(&msg_string, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_errx
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring msg)
-{
- JSTR msg_string;
- DB_ENV *dbenv;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- if (jstr_lock(&msg_string, jnienv, msg) != 0)
- goto out;
-
- dbenv->errx(dbenv, msg_string.string);
- out:
- jstr_unlock(&msg_string, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-/*static*/
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_strerror
- (JNIEnv *jnienv, jclass jthis_class, jint ecode)
-{
- const char *message;
-
- COMPQUIET(jthis_class, NULL);
- message = db_strerror(ecode);
- return (get_java_string(jnienv, message));
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1cachesize
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint gbytes, jint bytes,
- jint ncaches)
-{
- DB_ENV *dbenv;
- int err;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_cachesize(dbenv, gbytes, bytes, ncaches);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1flags
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags, jint onoff)
-{
- DB_ENV *dbenv;
- int err;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_flags(dbenv, flags, onoff);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1mp_1mmapsize
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jlong value)
-{
- DB_ENV *dbenv;
- int err;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_mp_mmapsize(dbenv, (size_t)value);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-/*static*/
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1pageyield
- (JNIEnv *jnienv, jclass jthis_class, jint value)
-{
- int err;
-
- COMPQUIET(jthis_class, NULL);
- err = db_env_set_pageyield(value);
- verify_return(jnienv, err, 0);
-}
-
-/*static*/
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1panicstate
- (JNIEnv *jnienv, jclass jthis_class, jint value)
-{
- int err;
-
- COMPQUIET(jthis_class, NULL);
- err = db_env_set_panicstate(value);
- verify_return(jnienv, err, 0);
-}
-
-/*static*/
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1region_1init
- (JNIEnv *jnienv, jclass jthis_class, jint value)
-{
- int err;
-
- COMPQUIET(jthis_class, NULL);
- err = db_env_set_region_init(value);
- verify_return(jnienv, err, 0);
-}
-
-/*static*/
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1tas_1spins
- (JNIEnv *jnienv, jclass jthis_class, jint value)
-{
- int err;
-
- COMPQUIET(jthis_class, NULL);
- err = db_env_set_tas_spins(value);
- verify_return(jnienv, err, 0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_recovery_1init_1changed
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbRecoveryInit*/ jobject jrecoveryinit)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv) ||
- !verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dbjie_set_recovery_init_object(dbenvinfo, jnienv, dbenv, jrecoveryinit);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1conflicts
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobjectArray array)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
- int err;
- jsize i, len;
- unsigned char *newarr;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv) ||
- !verify_non_null(jnienv, dbenvinfo))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- len = (*jnienv)->GetArrayLength(jnienv, array);
-
- newarr = (unsigned char *)malloc(sizeof(unsigned char) * len * len);
-
- for (i=0; i<len; i++) {
- jobject subArray =
- (*jnienv)->GetObjectArrayElement(jnienv, array, i);
- (*jnienv)->GetByteArrayRegion(jnienv, (jbyteArray)subArray,
- 0, len,
- (jbyte *)&newarr[i*len]);
- }
- dbjie_set_conflict(dbenvinfo, newarr);
- err = dbenv->set_lk_conflicts(dbenv, newarr, len);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1server
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring jhost, jlong tsec,
- jlong ssec, jint flags)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- const char *host = (*jnienv)->GetStringUTFChars(jnienv, jhost, NULL);
-
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_server(dbenv, (char *)host,
- (long)tsec, (long)ssec, flags);
-
- /* Throw an exception if the call failed. */
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1shm_1key
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jlong shm_key)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
-
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_shm_key(dbenv, (long)shm_key);
-
- /* Throw an exception if the call failed. */
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv__1set_1tx_1timestamp
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jlong seconds)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- time_t time = seconds;
-
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_tx_timestamp(dbenv, &time);
-
- /* Throw an exception if the call failed. */
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL
- Java_com_sleepycat_db_DbEnv_set_1verbose
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint which, jint onoff)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
-
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = dbenv->set_verbose(dbenv, which, onoff);
-
- /* Throw an exception if the call failed. */
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-/*static*/
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1major
- (JNIEnv * jnienv, jclass this_class)
-{
- COMPQUIET(jnienv, NULL);
- COMPQUIET(this_class, NULL);
-
- return (DB_VERSION_MAJOR);
-}
-
-/*static*/
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1minor
- (JNIEnv * jnienv, jclass this_class)
-{
- COMPQUIET(jnienv, NULL);
- COMPQUIET(this_class, NULL);
-
- return (DB_VERSION_MINOR);
-}
-
-/*static*/
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1patch
- (JNIEnv * jnienv, jclass this_class)
-{
- COMPQUIET(jnienv, NULL);
- COMPQUIET(this_class, NULL);
-
- return (DB_VERSION_PATCH);
-}
-
-/*static*/
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_get_1version_1string
- (JNIEnv *jnienv, jclass this_class)
-{
- COMPQUIET(this_class, NULL);
-
- return ((*jnienv)->NewStringUTF(jnienv, DB_VERSION_STRING));
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1id
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err;
- u_int32_t id;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
-
- if (!verify_non_null(jnienv, dbenv))
- return (-1);
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = lock_id(dbenv, &id);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- return (id);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1stat
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- DB_LOCK_STAT *statp = NULL;
- jobject retval = NULL;
- jclass dbclass;
-
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- /* We cannot use the default allocator (on Win* platforms anyway)
- * because it often causes problems when we free storage
- * in a DLL that was allocated in another DLL. Using
- * our own allocator (ours just calls malloc!) ensures
- * that there is no mismatch.
- */
- err = lock_stat(dbenv, &statp, NULL);
- if (verify_return(jnienv, err, 0)) {
- retval = create_default_object(jnienv, name_DB_LOCK_STAT);
- dbclass = get_class(jnienv, name_DB_LOCK_STAT);
-
- /* Set the individual fields */
- set_int_field(jnienv, dbclass, retval,
- "st_maxlocks", statp->st_maxlocks);
- set_int_field(jnienv, dbclass, retval,
- "st_nmodes", statp->st_nmodes);
- set_int_field(jnienv, dbclass, retval,
- "st_nlockers", statp->st_nlockers);
- set_int_field(jnienv, dbclass, retval,
- "st_nconflicts", statp->st_nconflicts);
- set_int_field(jnienv, dbclass, retval,
- "st_nrequests", statp->st_nrequests);
- set_int_field(jnienv, dbclass, retval,
- "st_nreleases", statp->st_nreleases);
- set_int_field(jnienv, dbclass, retval,
- "st_ndeadlocks", statp->st_ndeadlocks);
- set_int_field(jnienv, dbclass, retval,
- "st_region_wait", statp->st_region_wait);
- set_int_field(jnienv, dbclass, retval,
- "st_region_nowait", statp->st_region_nowait);
- set_int_field(jnienv, dbclass, retval,
- "st_regsize", statp->st_regsize);
-
- free(statp);
- }
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_lock_1detect
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint atype, jint flags)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- int aborted;
-
- if (!verify_non_null(jnienv, dbenv))
- return (0);
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = lock_detect(dbenv, atype, flags, &aborted);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- return (aborted);
-}
-
-JNIEXPORT /*DbLock*/ jobject JNICALL Java_com_sleepycat_db_DbEnv_lock_1get
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*u_int32_t*/ jint locker,
- jint flags, /*const Dbt*/ jobject obj, /*db_lockmode_t*/ jint lock_mode)
-{
- int err;
- DB_ENV *dbenv;
- DB_LOCK *dblock;
- JDBT dbobj;
- /*DbLock*/ jobject retval;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dblock = (DB_LOCK*)malloc(sizeof(DB_LOCK));
- memset(dblock, 0, sizeof(DB_LOCK));
- err = 0;
- retval = NULL;
- if (jdbt_lock(&dbobj, jnienv, obj, inOp) != 0)
- goto out;
-
- err = lock_get(dbenv, locker, flags, &dbobj.dbt->dbt,
- (db_lockmode_t)lock_mode, dblock);
- if (verify_return(jnienv, err, 0)) {
- retval = create_default_object(jnienv, name_DB_LOCK);
- set_private_dbobj(jnienv, name_DB_LOCK, retval, dblock);
- }
- out:
- jdbt_unlock(&dbobj, jnienv);
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_log_1archive
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags)
-{
- int err, len, i;
- char** ret;
- jclass stringClass;
- jobjectArray strarray;
- DB_ENV *dbenv;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- strarray = NULL;
- if (!verify_non_null(jnienv, dbenv))
- return (0);
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = log_archive(dbenv, &ret, flags, 0);
- if (!verify_return(jnienv, err, 0))
- return (0);
-
- if (ret != NULL) {
- len = 0;
- while (ret[len] != NULL)
- len++;
- stringClass = (*jnienv)->FindClass(jnienv, "java/lang/String");
- strarray = (*jnienv)->NewObjectArray(jnienv, len,
- stringClass, 0);
- for (i=0; i<len; i++) {
- jstring str = (*jnienv)->NewStringUTF(jnienv, ret[i]);
- (*jnienv)->SetObjectArrayElement(jnienv, strarray,
- i, str);
- }
- }
- JAVADB_ENV_API_END(dbenv);
- return (strarray);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_log_1compare
- (JNIEnv *jnienv, jclass jthis_class,
- /*DbLsn*/ jobject lsn0, /*DbLsn*/ jobject lsn1)
-{
- DB_LSN *dblsn0;
- DB_LSN *dblsn1;
-
- COMPQUIET(jthis_class, NULL);
- dblsn0 = get_DB_LSN(jnienv, lsn0);
- dblsn1 = get_DB_LSN(jnienv, lsn1);
-
- return (log_compare(dblsn0, dblsn1));
-}
-
-JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_log_1file
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- DB_LSN *dblsn = get_DB_LSN(jnienv, lsn);
- char filename[FILENAME_MAX+1] = "";
-
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- err = log_file(dbenv, dblsn, filename, FILENAME_MAX);
- verify_return(jnienv, err, 0);
- filename[FILENAME_MAX] = '\0'; /* just to be sure */
- JAVADB_ENV_API_END(dbenv);
- return (get_java_string(jnienv, filename));
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1flush
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- DB_LSN *dblsn = get_DB_LSN(jnienv, lsn);
-
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- err = log_flush(dbenv, dblsn);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1get
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn,
- /*DbDbt*/ jobject data, jint flags)
-{
- int err, retry;
- DB_ENV *dbenv;
- DB_LSN *dblsn;
- JDBT dbdata;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dblsn = get_DB_LSN(jnienv, lsn);
-
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- if (jdbt_lock(&dbdata, jnienv, data, outOp) != 0)
- goto out;
-
- for (retry = 0; retry < 3; retry++) {
- err = log_get(dbenv, dblsn, &dbdata.dbt->dbt, flags);
- /* If we failed due to lack of memory in our DBT arrays,
- * retry.
- */
- if (err != ENOMEM)
- break;
- if (!jdbt_realloc(&dbdata, jnienv))
- break;
- }
-
- verify_return(jnienv, err, 0);
-
- out:
- jdbt_unlock(&dbdata, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1put
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbLsn*/ jobject lsn,
- /*DbDbt*/ jobject data, jint flags)
-{
- int err;
- DB_ENV *dbenv;
- DB_LSN *dblsn;
- JDBT dbdata;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dblsn = get_DB_LSN(jnienv, lsn);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- if (jdbt_lock(&dbdata, jnienv, data, inOp) != 0)
- goto out;
-
- err = log_put(dbenv, dblsn, &dbdata.dbt->dbt, flags);
- verify_return(jnienv, err, 0);
- out:
- jdbt_unlock(&dbdata, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1register
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*Db*/ jobject dbp,
- jstring name)
-{
- int err;
- DB_ENV *dbenv;
- DB *dbdb;
- JSTR dbname;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbdb = get_DB(jnienv, dbp);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- if (jstr_lock(&dbname, jnienv, name) != 0)
- goto out;
-
- err = log_register(dbenv, dbdb, dbname.string);
- verify_return(jnienv, err, 0);
- out:
- jstr_unlock(&dbname, jnienv);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_log_1unregister
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*Db*/ jobject dbp)
-{
- int err;
- DB_ENV *dbenv;
- DB *dbdb;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbdb = get_DB(jnienv, dbp);
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- err = log_unregister(dbenv, dbdb);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_log_1stat
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err;
- DB_ENV *dbenv;
- DB_LOG_STAT *statp;
- jobject retval;
- jclass dbclass;
-
- retval = NULL;
- statp = NULL;
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- /* We cannot use the default allocator (on Win* platforms anyway)
- * because it often causes problems when we free storage
- * in a DLL that was allocated in another DLL. Using
- * our own allocator (ours just calls malloc!) ensures
- * that there is no mismatch.
- */
- err = log_stat(dbenv, &statp, NULL);
- if (verify_return(jnienv, err, 0)) {
- retval = create_default_object(jnienv, name_DB_LOG_STAT);
- dbclass = get_class(jnienv, name_DB_LOG_STAT);
-
- /* Set the individual fields */
- set_int_field(jnienv, dbclass, retval,
- "st_magic", statp->st_magic);
- set_int_field(jnienv, dbclass, retval,
- "st_version", statp->st_version);
- set_int_field(jnienv, dbclass, retval,
- "st_mode", statp->st_mode);
- set_int_field(jnienv, dbclass, retval,
- "st_lg_max", statp->st_lg_max);
- set_int_field(jnienv, dbclass, retval,
- "st_w_bytes", statp->st_w_bytes);
- set_int_field(jnienv, dbclass, retval,
- "st_w_mbytes", statp->st_w_mbytes);
- set_int_field(jnienv, dbclass, retval,
- "st_wc_bytes", statp->st_wc_bytes);
- set_int_field(jnienv, dbclass, retval,
- "st_wc_mbytes", statp->st_wc_mbytes);
- set_int_field(jnienv, dbclass, retval,
- "st_wcount", statp->st_wcount);
- set_int_field(jnienv, dbclass, retval,
- "st_scount", statp->st_scount);
- set_int_field(jnienv, dbclass, retval,
- "st_region_wait", statp->st_region_wait);
- set_int_field(jnienv, dbclass, retval,
- "st_region_nowait", statp->st_region_nowait);
- set_int_field(jnienv, dbclass, retval,
- "st_cur_file", statp->st_cur_file);
- set_int_field(jnienv, dbclass, retval,
- "st_cur_offset", statp->st_cur_offset);
- set_int_field(jnienv, dbclass, retval,
- "st_regsize", statp->st_regsize);
-
- free(statp);
- }
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_memp_1stat
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err;
- jclass dbclass;
- DB_ENV *dbenv;
- DB_MPOOL_STAT *statp;
- jobject retval;
-
- retval = NULL;
- statp = NULL;
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- /* We cannot use the default allocator (on Win* platforms anyway)
- * because it often causes problems when we free storage
- * in a DLL that was allocated in another DLL. Using
- * our own allocator (ours just calls malloc!) ensures
- * that there is no mismatch.
- */
- err = memp_stat(dbenv, &statp, 0, NULL);
- if (verify_return(jnienv, err, 0)) {
- retval = create_default_object(jnienv, name_DB_MPOOL_STAT);
- dbclass = get_class(jnienv, name_DB_MPOOL_STAT);
-
- set_int_field(jnienv, dbclass, retval, "st_cachesize", 0);
- set_int_field(jnienv, dbclass, retval,
- "st_cache_hit", statp->st_cache_hit);
- set_int_field(jnienv, dbclass, retval,
- "st_cache_miss", statp->st_cache_miss);
- set_int_field(jnienv, dbclass, retval,
- "st_map", statp->st_map);
- set_int_field(jnienv, dbclass, retval,
- "st_page_create", statp->st_page_create);
- set_int_field(jnienv, dbclass, retval,
- "st_page_in", statp->st_page_in);
- set_int_field(jnienv, dbclass, retval,
- "st_page_out", statp->st_page_out);
- set_int_field(jnienv, dbclass, retval,
- "st_ro_evict", statp->st_ro_evict);
- set_int_field(jnienv, dbclass, retval,
- "st_rw_evict", statp->st_rw_evict);
- set_int_field(jnienv, dbclass, retval,
- "st_hash_buckets", statp->st_hash_buckets);
- set_int_field(jnienv, dbclass, retval,
- "st_hash_searches", statp->st_hash_searches);
- set_int_field(jnienv, dbclass, retval,
- "st_hash_longest", statp->st_hash_longest);
- set_int_field(jnienv, dbclass, retval,
- "st_hash_examined", statp->st_hash_examined);
- set_int_field(jnienv, dbclass, retval,
- "st_page_clean", statp->st_page_clean);
- set_int_field(jnienv, dbclass, retval,
- "st_page_dirty", statp->st_page_dirty);
- set_int_field(jnienv, dbclass, retval,
- "st_page_trickle", statp->st_page_trickle);
- set_int_field(jnienv, dbclass, retval,
- "st_region_wait", statp->st_region_wait);
- set_int_field(jnienv, dbclass, retval,
- "st_region_nowait", statp->st_region_nowait);
- set_int_field(jnienv, dbclass, retval,
- "st_regsize", statp->st_regsize);
-
- free(statp);
- }
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_DbEnv_memp_1fstat
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err, i, len;
- jclass fstat_class;
- DB_ENV *dbenv;
- DB_MPOOL_FSTAT **fstatp;
- jobjectArray retval;
- jfieldID filename_id;
- jstring jfilename;
-
- fstatp = NULL;
- retval = NULL;
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- /* We cannot use the default allocator (on Win* platforms anyway)
- * because it often causes problems when we free storage
- * in a DLL that was allocated in another DLL. Using
- * our own allocator (ours just calls malloc!) ensures
- * that there is no mismatch.
- */
- err = memp_stat(dbenv, 0, &fstatp, NULL);
- if (verify_return(jnienv, err, 0)) {
- len = 0;
- while (fstatp[len])
- len++;
- fstat_class = get_class(jnienv, name_DB_MPOOL_FSTAT);
- retval = (*jnienv)->NewObjectArray(jnienv, len,
- fstat_class, 0);
- for (i=0; i<len; i++) {
- jobject obj = create_default_object(jnienv,
- name_DB_MPOOL_FSTAT);
- (*jnienv)->SetObjectArrayElement(jnienv, retval,
- i, obj);
-
- /* Set the string field. */
- filename_id =
- (*jnienv)->GetFieldID(jnienv, fstat_class,
- "file_name",
- string_signature);
- jfilename =
- get_java_string(jnienv, fstatp[i]->file_name);
- (*jnienv)->SetObjectField(jnienv, obj,
- filename_id, jfilename);
-
- set_int_field(jnienv, fstat_class, obj,
- "st_pagesize", fstatp[i]->st_pagesize);
- set_int_field(jnienv, fstat_class, obj,
- "st_cache_hit", fstatp[i]->st_cache_hit);
- set_int_field(jnienv, fstat_class, obj,
- "st_cache_miss", fstatp[i]->st_cache_miss);
- set_int_field(jnienv, fstat_class, obj,
- "st_map", fstatp[i]->st_map);
- set_int_field(jnienv, fstat_class, obj,
- "st_page_create", fstatp[i]->st_page_create);
- set_int_field(jnienv, fstat_class, obj,
- "st_page_in", fstatp[i]->st_page_in);
- set_int_field(jnienv, fstat_class, obj,
- "st_page_out", fstatp[i]->st_page_out);
- free(fstatp[i]);
- }
- free(fstatp);
- }
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_memp_1trickle
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint pct)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
- int result = 0;
-
- if (verify_non_null(jnienv, dbenv)) {
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = memp_trickle(dbenv, pct, &result);
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- }
- return (result);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1begin
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbTxn*/ jobject pid, jint flags)
-{
- int err;
- DB_TXN *dbpid, *result;
- DB_ENV *dbenv;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (0);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- dbpid = get_DB_TXN(jnienv, pid);
- result = 0;
-
- err = txn_begin(dbenv, dbpid, &result, flags);
- if (!verify_return(jnienv, err, 0))
- return (0);
- JAVADB_ENV_API_END(dbenv);
- return (get_DbTxn(jnienv, result));
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbEnv_txn_1checkpoint
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint kbyte, jint min, jint flags)
-{
- int err;
- DB_ENV *dbenv = get_DB_ENV(jnienv, jthis);
-
- if (!verify_non_null(jnienv, dbenv))
- return (0);
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- err = txn_checkpoint(dbenv, kbyte, min, flags);
- if (err != DB_INCOMPLETE)
- verify_return(jnienv, err, 0);
- JAVADB_ENV_API_END(dbenv);
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_tx_1recover_1changed
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbFeedback*/ jobject jtxrecover)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv) ||
- !verify_non_null(jnienv, dbenvinfo))
- return;
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dbjie_set_tx_recover_object(dbenvinfo, jnienv, dbenv, jtxrecover);
- JAVADB_ENV_API_END(dbenv);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_DbEnv_txn_1stat
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis)
-{
- int err;
- DB_ENV *dbenv;
- DB_TXN_STAT *statp;
- jobject retval, obj;
- jclass dbclass, active_class;
- char active_signature[512];
- jfieldID arrid;
- jobjectArray actives;
- unsigned int i;
-
- retval = NULL;
- statp = NULL;
- dbenv = get_DB_ENV(jnienv, jthis);
- if (!verify_non_null(jnienv, dbenv))
- return (NULL);
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
-
- /* We cannot use the default allocator (on Win* platforms anyway)
- * because it often causes problems when we free storage
- * in a DLL that was allocated in another DLL. Using
- * our own allocator (ours just calls malloc!) ensures
- * that there is no mismatch.
- */
- err = txn_stat(dbenv, &statp, NULL);
- if (verify_return(jnienv, err, 0)) {
- retval = create_default_object(jnienv, name_DB_TXN_STAT);
- dbclass = get_class(jnienv, name_DB_TXN_STAT);
-
- /* Set the individual fields */
-
- set_lsn_field(jnienv, dbclass, retval,
- "st_last_ckp", statp->st_last_ckp);
- set_lsn_field(jnienv, dbclass, retval,
- "st_pending_ckp", statp->st_pending_ckp);
- set_long_field(jnienv, dbclass, retval,
- "st_time_ckp", statp->st_time_ckp);
- set_int_field(jnienv, dbclass, retval,
- "st_last_txnid", statp->st_last_txnid);
- set_int_field(jnienv, dbclass, retval,
- "st_maxtxns", statp->st_maxtxns);
- set_int_field(jnienv, dbclass, retval,
- "st_naborts", statp->st_naborts);
- set_int_field(jnienv, dbclass, retval,
- "st_nbegins", statp->st_nbegins);
- set_int_field(jnienv, dbclass, retval,
- "st_ncommits", statp->st_ncommits);
- set_int_field(jnienv, dbclass, retval,
- "st_nactive", statp->st_nactive);
- set_int_field(jnienv, dbclass, retval,
- "st_maxnactive", statp->st_maxnactive);
-
- active_class = get_class(jnienv, name_DB_TXN_STAT_ACTIVE);
- actives =
- (*jnienv)->NewObjectArray(jnienv, statp->st_nactive,
- active_class, 0);
-
- /* Set the st_txnarray field. This is a little more involved
- * than other fields, since the type is an array, so none
- * of our utility functions help.
- */
- strncpy(active_signature, "[L", sizeof(active_signature));
- strncat(active_signature, DB_PACKAGE_NAME,
- sizeof(active_signature));
- strncat(active_signature, name_DB_TXN_STAT_ACTIVE,
- sizeof(active_signature));
- strncat(active_signature, ";", sizeof(active_signature));
-
- arrid = (*jnienv)->GetFieldID(jnienv, dbclass, "st_txnarray",
- active_signature);
- (*jnienv)->SetObjectField(jnienv, retval, arrid, actives);
-
- /* Now fill the in the elements of st_txnarray. */
- for (i=0; i<statp->st_nactive; i++) {
- obj = create_default_object(jnienv, name_DB_TXN_STAT_ACTIVE);
- (*jnienv)->SetObjectArrayElement(jnienv, actives, i, obj);
-
- set_int_field(jnienv, active_class, obj,
- "txnid", statp->st_txnarray[i].txnid);
- set_int_field(jnienv, active_class, obj,
- "parentid", statp->st_txnarray[i].parentid);
- set_lsn_field(jnienv, active_class, obj,
- "lsn", statp->st_txnarray[i].lsn);
- }
- set_int_field(jnienv, dbclass, retval,
- "st_region_wait", statp->st_region_wait);
- set_int_field(jnienv, dbclass, retval,
- "st_region_nowait", statp->st_region_nowait);
- set_int_field(jnienv, dbclass, retval,
- "st_regsize", statp->st_regsize);
-
- free(statp);
- }
- JAVADB_ENV_API_END(dbenv);
- return (retval);
-}
-
-/* See discussion on errpfx, errcall in DB_ENV_JAVAINFO */
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errcall
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject errcall)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
-
- if (verify_non_null(jnienv, dbenv) &&
- verify_non_null(jnienv, dbenvinfo)) {
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dbjie_set_errcall(dbenvinfo, jnienv, errcall);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1set_1errpfx
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring str)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *dbenvinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
-
- if (verify_non_null(jnienv, dbenv) &&
- verify_non_null(jnienv, dbenvinfo)) {
-
- JAVADB_ENV_API_BEGIN(dbenv, jthis);
- dbjie_set_errpfx(dbenvinfo, jnienv, str);
- JAVADB_ENV_API_END(dbenv);
- }
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1finalize
- (JNIEnv *jnienv, /*DbEnv*/ jobject jthis,
- jobject /*DbErrcall*/ errcall, jstring errpfx)
-{
- DB_ENV *dbenv;
- DB_ENV_JAVAINFO *envinfo;
-
- dbenv = get_DB_ENV(jnienv, jthis);
- envinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);
- DB_ASSERT(envinfo != NULL);
-
- /* Note: We detect unclosed DbEnvs and report it.
- */
- if (dbenv != NULL && envinfo != NULL && !dbjie_is_dbopen(envinfo)) {
-
- /* If this error occurs, this object was never closed. */
- report_errcall(jnienv, errcall, errpfx,
- "DbEnv.finalize: open DbEnv object destroyed");
- }
-
- /* Shouldn't see this object again, but just in case */
- set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);
- set_private_info(jnienv, name_DB_ENV, jthis, 0);
-
- dbjie_destroy(envinfo, jnienv);
-}
diff --git a/db/libdb_java/java_DbLock.c b/db/libdb_java/java_DbLock.c
deleted file mode 100644
index 287ca6622..000000000
--- a/db/libdb_java/java_DbLock.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_DbLock.c,v 11.4 2000/11/30 00:58:39 ubell Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbLock.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_put
- (JNIEnv *jnienv, jobject jthis, /*DbEnv*/ jobject env)
-{
- int err;
- DB_LOCK *dblock = get_DB_LOCK(jnienv, jthis);
- DB_ENV *dbenv = get_DB_ENV(jnienv, env);
-
- if (!verify_non_null(jnienv, dbenv))
- return;
-
- if (!verify_non_null(jnienv, dblock))
- return;
-
- err = lock_put(dbenv, dblock);
- if (verify_return(jnienv, err, 0)) {
- /* After a successful put, the DbLock can no longer
- * be used, so we release the storage related to it
- * (allocated in DbEnv.lock_get() or lock_tget()).
- */
- free(dblock);
-
- set_private_dbobj(jnienv, name_DB_LOCK, jthis, 0);
- }
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLock_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- DB_LOCK *dblock = get_DB_LOCK(jnienv, jthis);
- if (dblock) {
- /* Free any data related to DB_LOCK here */
- free(dblock);
- }
- set_private_dbobj(jnienv, name_DB_LOCK, jthis, 0); /* paranoia */
-}
diff --git a/db/libdb_java/java_DbLogc.c b/db/libdb_java/java_DbLogc.c
deleted file mode 100644
index 928a9dce9..000000000
--- a/db/libdb_java/java_DbLogc.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "Id: java_DbLogc.c,v 11.6 2002/07/02 12:03:03 mjc Exp ";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef DIAGNOSTIC
-#include <stdio.h>
-#endif
-
-#include "db_int.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbLogc.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLogc_close
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DB_LOGC *dblogc = get_DB_LOGC(jnienv, jthis);
-
- if (!verify_non_null(jnienv, dblogc))
- return;
- err = dblogc->close(dblogc, flags);
- if (verify_return(jnienv, err, 0)) {
- set_private_dbobj(jnienv, name_DB_LOGC, jthis, 0);
- }
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbLogc_get
- (JNIEnv *jnienv, jobject jthis,
- /*DbLsn*/ jobject lsn, /*Dbt*/ jobject data, jint flags)
-{
- int err, retry;
- DB_LOGC *dblogc;
- DB_LSN *dblsn;
- LOCKED_DBT ldata;
- OpKind dataop;
-
- /*
- * Depending on flags, the user may be supplying the key,
- * or else we may have to retrieve it.
- */
- err = 0;
- dataop = outOp;
-
- dblogc = get_DB_LOGC(jnienv, jthis);
- dblsn = get_DB_LSN(jnienv, lsn);
- if (locked_dbt_get(&ldata, jnienv, dblogc->dbenv, data, dataop) != 0)
- goto out1;
-
- if (!verify_non_null(jnienv, dblogc))
- goto out1;
-
- for (retry = 0; retry < 3; retry++) {
- err = dblogc->get(dblogc, dblsn, &ldata.javainfo->dbt, flags);
-
- /*
- * If we failed due to lack of memory in our DBT arrays,
- * retry.
- */
- if (err != ENOMEM)
- break;
- if (!locked_dbt_realloc(&ldata, jnienv, dblogc->dbenv))
- break;
- }
- out1:
- locked_dbt_put(&ldata, jnienv, dblogc->dbenv);
- if (!DB_RETOK_LGGET(err)) {
- if (verify_dbt(jnienv, err, &ldata))
- verify_return(jnienv, err, 0);
- }
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLogc_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- /*
- * Free any data related to DB_LOGC here.
- * If we ever have java-only data embedded in the DB_LOGC
- * and need to do this, we'll have to track DbLogc's
- * according to which DbEnv owns them, just as
- * we track Db's according to which DbEnv owns them.
- * That's necessary to avoid double freeing that
- * comes about when closes interact with GC.
- */
-
-#ifdef DIAGNOSTIC
- DB_LOGC *dblogc;
-
- dblogc = get_DB_LOGC(jnienv, jthis);
- if (dblogc != NULL)
- fprintf(stderr, "Java API: DbLogc has not been closed\n");
-#else
-
- COMPQUIET(jnienv, NULL);
- COMPQUIET(jthis, NULL);
-
-#endif
-}
diff --git a/db/libdb_java/java_DbLsn.c b/db/libdb_java/java_DbLsn.c
deleted file mode 100644
index 8f26f2ecb..000000000
--- a/db/libdb_java/java_DbLsn.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_DbLsn.c,v 11.5 2000/11/30 00:58:39 ubell Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h> /* needed for FILENAME_MAX */
-
-#include "db.h"
-#include "db_int.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbLsn.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_init_1lsn
- (JNIEnv *jnienv, /*DbLsn*/ jobject jthis)
-{
- /* Note: the DB_LSN object stored in the private_dbobj_
- * is allocated in get_DbLsn().
- */
-
- COMPQUIET(jnienv, NULL);
- COMPQUIET(jthis, NULL);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbLsn_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- DB_LSN *dblsn;
-
- dblsn = get_DB_LSN(jnienv, jthis);
- if (dblsn) {
- free(dblsn);
- }
-}
diff --git a/db/libdb_java/java_DbTxn.c b/db/libdb_java/java_DbTxn.c
deleted file mode 100644
index 67c2599a6..000000000
--- a/db/libdb_java/java_DbTxn.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_DbTxn.c,v 11.3 2000/09/18 18:32:25 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbTxn.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_abort
- (JNIEnv *jnienv, jobject jthis)
-{
- int err;
- DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
- if (!verify_non_null(jnienv, dbtxn))
- return;
-
- err = txn_abort(dbtxn);
- verify_return(jnienv, err, 0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_commit
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
- if (!verify_non_null(jnienv, dbtxn))
- return;
-
- err = txn_commit(dbtxn, flags);
- verify_return(jnienv, err, 0);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_DbTxn_id
- (JNIEnv *jnienv, jobject jthis)
-{
- int retval = 0;
- DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
- if (!verify_non_null(jnienv, dbtxn))
- return (-1);
-
- /* No error to check for from txn_id */
- retval = txn_id(dbtxn);
- return (retval);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_prepare
- (JNIEnv *jnienv, jobject jthis)
-{
- int err;
- DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
- if (!verify_non_null(jnienv, dbtxn))
- return;
-
- err = txn_prepare(dbtxn);
- verify_return(jnienv, err, 0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_DbTxn_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- DB_TXN *dbtxn = get_DB_TXN(jnienv, jthis);
- if (dbtxn) {
- /* Free any data related to DB_TXN here
- * Note: we don't make a policy of doing
- * a commit or abort here. The txnmgr
- * should be closed, and DB will clean up.
- */
- }
-}
diff --git a/db/libdb_java/java_DbUtil.c b/db/libdb_java/java_DbUtil.c
deleted file mode 100644
index 95e6f2e04..000000000
--- a/db/libdb_java/java_DbUtil.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 2001
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "Id: java_DbUtil.c,v 1.3 2001/05/08 19:00:31 bostic Exp ";
-#endif /* not lint */
-
-#include <jni.h>
-
-#include "db_int.h"
-#include "java_util.h"
-#include "com_sleepycat_db_DbUtil.h"
-
-JNIEXPORT jboolean JNICALL
-Java_com_sleepycat_db_DbUtil_am_1big_1endian (JNIEnv *jnienv,
- jclass jthis_class)
-{
- COMPQUIET(jnienv, NULL);
- COMPQUIET(jthis_class, NULL);
-
-#if defined(WORDS_BIGENDIAN)
- return (JNI_TRUE);
-#else
- return (JNI_FALSE);
-#endif
-}
diff --git a/db/libdb_java/java_DbXAResource.c b/db/libdb_java/java_DbXAResource.c
deleted file mode 100644
index dab90e97f..000000000
--- a/db/libdb_java/java_DbXAResource.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2001
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "Id: java_DbXAResource.c,v 11.6 2002/08/06 05:19:06 bostic Exp ";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef DIAGNOSTIC
-#include <stdio.h>
-#endif
-
-#include "db_int.h"
-#include "java_util.h"
-#include "dbinc/xa.h"
-#include "dbinc_auto/xa_ext.h"
-#include "com_sleepycat_db_xa_DbXAResource.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1init
- (JNIEnv *jnienv, jobject jthis, jstring home, jint rmid, jint flags)
-{
- int err;
- LOCKED_STRING ls_home;
- jclass cl;
- jmethodID mid;
-
- COMPQUIET(jthis, NULL);
- if (locked_string_get(&ls_home, jnienv, home) != 0)
- goto out;
- if ((err = __db_xa_open((char *)ls_home.string,
- rmid, flags)) != XA_OK) {
- verify_return(jnienv, err, EXCEPTION_XA);
- }
-
- /*
- * Now create the DbEnv object, it will get attached
- * to the DB_ENV just made in __db_xa_open.
- */
- if ((cl = get_class(jnienv, name_DB_ENV)) == NULL)
- goto out;
-
- mid = (*jnienv)->GetStaticMethodID(jnienv, cl,
- "_create_DbEnv_for_XA", "(II)V");
- (*jnienv)->CallStaticVoidMethod(jnienv, cl, mid, 0, rmid);
-
- out:
- locked_string_put(&ls_home, jnienv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1close
- (JNIEnv *jnienv, jobject jthis, jstring home, jint rmid, jint flags)
-{
- int err;
- LOCKED_STRING ls_home;
-
- COMPQUIET(jthis, NULL);
- if (locked_string_get(&ls_home, jnienv, home) != 0)
- goto out;
- if ((err = __db_xa_close((char *)ls_home.string,
- rmid, flags)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
- out:
- locked_string_put(&ls_home, jnienv);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1commit
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid,
- jboolean onePhase)
-{
- XID xid;
- long flags;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return;
- flags = 0;
- if (onePhase == JNI_TRUE)
- flags |= TMONEPHASE;
- if ((err = __db_xa_commit(&xid, rmid, flags)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1end
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid, jint flags)
-{
- XID xid;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return;
- if ((err = __db_xa_end(&xid, rmid, flags)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1forget
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid)
-{
- XID xid;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return;
- if ((err = __db_xa_forget(&xid, rmid, 0)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_xa_DbXAResource__1prepare
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid)
-{
- XID xid;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return (0);
- err = __db_xa_prepare(&xid, rmid, 0);
- if (err != XA_OK && err != XA_RDONLY)
- verify_return(jnienv, err, EXCEPTION_XA);
-
- return (err);
-}
-
-JNIEXPORT jobjectArray JNICALL Java_com_sleepycat_db_xa_DbXAResource__1recover
- (JNIEnv *jnienv, jobject jthis, jint rmid, jint flags)
-{
- XID *xids;
- int err;
- int total;
- int cnt;
- int i;
- int curflags;
- size_t nbytes;
- jclass xid_class;
- jmethodID mid;
- jobject obj;
- jobjectArray retval;
-
- COMPQUIET(jthis, NULL);
- total = 0;
- cnt = 0;
- xids = NULL;
- flags &= ~(DB_FIRST | DB_LAST | DB_NEXT);
-
- /* Repeatedly call __db_xa_recover to fill up an array of XIDs */
- curflags = flags | DB_FIRST;
- do {
- total += cnt;
- nbytes = sizeof(XID) * (total + 10);
- if ((err = __os_realloc(NULL, nbytes, &xids)) != 0) {
- if (xids != NULL)
- __os_free(NULL, xids);
- verify_return(jnienv, XAER_NOTA, EXCEPTION_XA);
- return (NULL);
- }
- cnt = __db_xa_recover(&xids[total], 10, rmid, curflags);
- curflags = flags | DB_NEXT;
- } while (cnt > 0);
-
- if (xids != NULL)
- __os_free(NULL, xids);
-
- if (cnt < 0) {
- verify_return(jnienv, cnt, EXCEPTION_XA);
- return (NULL);
- }
-
- /* Create the java DbXid array and fill it up */
- if ((xid_class = get_class(jnienv, name_DB_XID)) == NULL)
- return (NULL);
- mid = (*jnienv)->GetMethodID(jnienv, xid_class, "<init>",
- "(I[B[B)V");
- if ((retval = (*jnienv)->NewObjectArray(jnienv, total, xid_class, 0))
- == NULL)
- goto out;
-
- for (i = 0; i < total; i++) {
- jobject gtrid;
- jobject bqual;
- jsize gtrid_len;
- jsize bqual_len;
-
- gtrid_len = (jsize)xids[i].gtrid_length;
- bqual_len = (jsize)xids[i].bqual_length;
- gtrid = (*jnienv)->NewByteArray(jnienv, gtrid_len);
- bqual = (*jnienv)->NewByteArray(jnienv, bqual_len);
- if (gtrid == NULL || bqual == NULL)
- goto out;
- (*jnienv)->SetByteArrayRegion(jnienv, gtrid, 0, gtrid_len,
- (jbyte *)&xids[i].data[0]);
- (*jnienv)->SetByteArrayRegion(jnienv, bqual, 0, bqual_len,
- (jbyte *)&xids[i].data[gtrid_len]);
- if ((obj = (*jnienv)->NewObject(jnienv, xid_class, mid,
- (jint)xids[i].formatID, gtrid, bqual)) == NULL)
- goto out;
- (*jnienv)->SetObjectArrayElement(jnienv, retval, i, obj);
- }
-out: return (retval);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1rollback
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid)
-{
- XID xid;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return;
- if ((err = __db_xa_rollback(&xid, rmid, 0)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_xa_DbXAResource__1start
- (JNIEnv *jnienv, jobject jthis, jobject jxid, jint rmid, jint flags)
-{
- XID xid;
- int err;
-
- COMPQUIET(jthis, NULL);
- if (!get_XID(jnienv, jxid, &xid))
- return;
-
- if ((err = __db_xa_start(&xid, rmid, flags)) != XA_OK)
- verify_return(jnienv, err, EXCEPTION_XA);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_xa_DbXAResource_xa_1attach
- (JNIEnv *jnienv, jclass jthisclass, jobject jxid, jobject jrmid)
-{
- XID xid;
- XID *xidp;
- int ret;
- DB_ENV *env;
- DB_TXN *txn;
- int rmid;
- int *rmidp;
- jobject jtxn;
- jobject jenv;
- jclass cl;
- jmethodID mid;
-
- COMPQUIET(jthisclass, NULL);
- if (jxid == NULL) {
- xidp = NULL;
- }
- else {
- xidp = &xid;
- if (!get_XID(jnienv, jxid, &xid))
- return (NULL);
- }
- if (jrmid == NULL) {
- rmidp = NULL;
- }
- else {
- rmidp = &rmid;
- rmid = (int)(*jnienv)->CallIntMethod(jnienv, jrmid,
- mid_Integer_intValue);
- }
-
- if ((ret = db_env_xa_attach(rmidp, xidp, &env, &txn)) != 0) {
- /*
- * DB_NOTFOUND is a normal return, it means we
- * have no current transaction,
- */
- if (ret != DB_NOTFOUND)
- verify_return(jnienv, ret, 0);
- return (NULL);
- }
-
- jenv = ((DB_ENV_JAVAINFO *)env->api2_internal)->jenvref;
- jtxn = get_DbTxn(jnienv, txn);
- if ((cl = get_class(jnienv, name_DB_XAATTACH)) == NULL)
- return (NULL);
- mid = (*jnienv)->GetMethodID(jnienv, cl, "<init>",
- "(Lcom/sleepycat/db/DbEnv;Lcom/sleepycat/db/DbTxn;)V");
- return (*jnienv)->NewObject(jnienv, cl, mid, jenv, jtxn);
-}
diff --git a/db/libdb_java/java_Dbc.c b/db/libdb_java/java_Dbc.c
deleted file mode 100644
index f1d0acdec..000000000
--- a/db/libdb_java/java_Dbc.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_Dbc.c,v 11.10 2000/10/25 19:54:55 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef DIAGNOSTIC
-#include <stdio.h>
-#endif
-
-#include "db.h"
-#include "db_int.h"
-#include "java_util.h"
-#include "com_sleepycat_db_Dbc.h"
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_close
- (JNIEnv *jnienv, jobject jthis)
-{
- int err;
- DBC *dbc = get_DBC(jnienv, jthis);
-
- if (!verify_non_null(jnienv, dbc))
- return;
- err = dbc->c_close(dbc);
- if (verify_return(jnienv, err, 0)) {
- set_private_dbobj(jnienv, name_DBC, jthis, 0);
- }
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_count
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DBC *dbc = get_DBC(jnienv, jthis);
- db_recno_t count;
-
- if (!verify_non_null(jnienv, dbc))
- return (0);
- err = dbc->c_count(dbc, &count, flags);
- verify_return(jnienv, err, 0);
- return (count);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_del
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DBC *dbc = get_DBC(jnienv, jthis);
-
- if (!verify_non_null(jnienv, dbc))
- return (0);
- err = dbc->c_del(dbc, flags);
- if (err != DB_KEYEMPTY) {
- verify_return(jnienv, err, 0);
- }
- return (err);
-}
-
-JNIEXPORT jobject JNICALL Java_com_sleepycat_db_Dbc_dup
- (JNIEnv *jnienv, jobject jthis, jint flags)
-{
- int err;
- DBC *dbc = get_DBC(jnienv, jthis);
- DBC *dbc_ret = NULL;
-
- if (!verify_non_null(jnienv, dbc))
- return (0);
- err = dbc->c_dup(dbc, &dbc_ret, flags);
- if (!verify_return(jnienv, err, 0))
- return (0);
-
- return (get_Dbc(jnienv, dbc_ret));
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_get
- (JNIEnv *jnienv, jobject jthis,
- /*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
-{
- int err, retry, op_flags;
- DBC *dbc;
- JDBT dbkey, dbdata;
- OpKind keyop, dataop;
-
- /* Depending on flags, the user may be supplying the key,
- * or else we may have to retrieve it.
- */
- err = 0;
- keyop = outOp;
- dataop = outOp;
-
- op_flags = flags & DB_OPFLAGS_MASK;
- if (op_flags == DB_SET) {
- keyop = inOp;
- }
- else if (op_flags == DB_SET_RANGE ||
- op_flags == DB_SET_RECNO) {
- keyop = inOutOp;
- }
- else if (op_flags == DB_GET_BOTH) {
- keyop = inOutOp;
- dataop = inOutOp;
- }
-
- dbc = get_DBC(jnienv, jthis);
- if (jdbt_lock(&dbkey, jnienv, key, keyop) != 0)
- goto out2;
- if (jdbt_lock(&dbdata, jnienv, data, dataop) != 0)
- goto out1;
-
- if (!verify_non_null(jnienv, dbc))
- goto out1;
-
- for (retry = 0; retry < 3; retry++) {
- err = dbc->c_get(dbc, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
-
- /* If we failed due to lack of memory in our DBT arrays,
- * retry.
- */
- if (err != ENOMEM)
- break;
- if (!jdbt_realloc(&dbkey, jnienv) && !jdbt_realloc(&dbdata, jnienv))
- break;
- }
- if (err != DB_NOTFOUND) {
- verify_return(jnienv, err, 0);
- }
- out1:
- jdbt_unlock(&dbdata, jnienv);
- out2:
- jdbt_unlock(&dbkey, jnienv);
- return (err);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbc_put
- (JNIEnv *jnienv, jobject jthis,
- /*Dbt*/ jobject key, /*Dbt*/ jobject data, jint flags)
-{
- int err;
- DBC *dbc;
- JDBT dbkey, dbdata;
-
- err = 0;
- dbc = get_DBC(jnienv, jthis);
- if (jdbt_lock(&dbkey, jnienv, key, inOp) != 0)
- goto out2;
- if (jdbt_lock(&dbdata, jnienv, data, inOp) != 0)
- goto out1;
-
- if (!verify_non_null(jnienv, dbc))
- goto out1;
- err = dbc->c_put(dbc, &dbkey.dbt->dbt, &dbdata.dbt->dbt, flags);
- if (err != DB_KEYEXIST) {
- verify_return(jnienv, err, 0);
- }
- out1:
- jdbt_unlock(&dbdata, jnienv);
- out2:
- jdbt_unlock(&dbkey, jnienv);
- return (err);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbc_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- /* Free any data related to DBC here.
- * If we ever have java-only data embedded in the DBC
- * and need to do this, we'll have to track Dbc's
- * according to which Db owns them, just as
- * we track Db's according to which DbEnv owns them.
- * That's necessary to avoid double freeing that
- * comes about when closes interact with GC.
- */
-
-#ifdef DIAGNOSTIC
- DBC *dbc;
-
- dbc = get_DBC(jnienv, jthis);
- if (dbc != NULL)
- fprintf(stderr, "Java API: Dbc has not been closed\n");
-#else
-
- COMPQUIET(jnienv, NULL);
- COMPQUIET(jthis, NULL);
-
-#endif
-}
diff --git a/db/libdb_java/java_Dbt.c b/db/libdb_java/java_Dbt.c
deleted file mode 100644
index 0e094da6a..000000000
--- a/db/libdb_java/java_Dbt.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_Dbt.c,v 11.10 2000/10/25 19:54:55 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "java_util.h"
-#include "com_sleepycat_db_Dbt.h"
-
-JAVADB_RW_ACCESS(Dbt, jint, size, DBT, size)
-JAVADB_RW_ACCESS(Dbt, jint, ulen, DBT, ulen)
-JAVADB_RW_ACCESS(Dbt, jint, dlen, DBT, dlen)
-JAVADB_RW_ACCESS(Dbt, jint, doff, DBT, doff)
-JAVADB_RW_ACCESS(Dbt, jint, flags, DBT, flags)
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_init
- (JNIEnv *jnienv, jobject jthis)
-{
- DBT_JAVAINFO *dbtji;
-
- dbtji = dbjit_construct();
- set_private_dbobj(jnienv, name_DBT, jthis, dbtji);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_internal_1set_1data
- (JNIEnv *jnienv, jobject jthis, jbyteArray array)
-{
- DBT_JAVAINFO *db_this;
-
- db_this = get_DBT_JAVAINFO(jnienv, jthis);
- if (verify_non_null(jnienv, db_this)) {
-
- /* If we previously allocated an array for java,
- * must release reference.
- */
- dbjit_release(db_this, jnienv);
-
- /* Make the array a global ref,
- * it won't be GC'd till we release it.
- */
- if (array)
- array = (jbyteArray)NEW_GLOBAL_REF(jnienv, array);
- db_this->array_ = array;
- }
-}
-
-JNIEXPORT jbyteArray JNICALL Java_com_sleepycat_db_Dbt_get_1data
- (JNIEnv *jnienv, jobject jthis)
-{
- DBT_JAVAINFO *db_this;
- jbyteArray arr;
- int len;
-
- db_this = get_DBT_JAVAINFO(jnienv, jthis);
- if (verify_non_null(jnienv, db_this)) {
- /* XXX this will copy the data on each call to get_data,
- * even if it is unchanged.
- */
- if (db_this->create_array_ != 0) {
- /* XXX we should reuse the existing array if we can */
- len = db_this->dbt.size;
- if (db_this->array_ != NULL)
- DELETE_GLOBAL_REF(jnienv, db_this->array_);
- arr = (*jnienv)->NewByteArray(jnienv, len);
- db_this->array_ =
- (jbyteArray)NEW_GLOBAL_REF(jnienv, arr);
- (*jnienv)->SetByteArrayRegion(jnienv, arr, 0, len,
- db_this->dbt.data);
- }
- return (db_this->array_);
- }
- return (0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1offset
- (JNIEnv *jnienv, jobject jthis, jint offset)
-{
- DBT_JAVAINFO *db_this;
-
- db_this = get_DBT_JAVAINFO(jnienv, jthis);
- if (verify_non_null(jnienv, db_this)) {
- db_this->offset_ = offset;
- }
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1offset
- (JNIEnv *jnienv, jobject jthis)
-{
- DBT_JAVAINFO *db_this;
-
- db_this = get_DBT_JAVAINFO(jnienv, jthis);
- if (verify_non_null(jnienv, db_this)) {
- return db_this->offset_;
- }
- return (0);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_set_1recno_1key_1data(JNIEnv *jnienv, jobject jthis, jint value)
-{
- JDBT jdbt;
-
- if (jdbt_lock(&jdbt, jnienv, jthis, inOp) != 0)
- goto out;
-
- if (!jdbt.dbt->dbt.data ||
- jdbt.java_array_len_ < sizeof(db_recno_t)) {
- char buf[200];
- sprintf(buf, "set_recno_key_data error: %p %p %d %d",
- &jdbt.dbt->dbt, jdbt.dbt->dbt.data,
- jdbt.dbt->dbt.ulen, sizeof(db_recno_t));
- report_exception(jnienv, buf, 0, 0);
- }
- else {
- *(db_recno_t*)(jdbt.dbt->dbt.data) = value;
- }
- out:
- jdbt_unlock(&jdbt, jnienv);
-}
-
-JNIEXPORT jint JNICALL Java_com_sleepycat_db_Dbt_get_1recno_1key_1data(JNIEnv *jnienv, jobject jthis)
-{
- jint ret;
- JDBT jdbt;
-
- ret = 0;
-
- /* Although this is kind of like "retrieve", we don't support
- * DB_DBT_MALLOC for this operation, so we tell jdbt_lock
- * that is not a retrieve.
- */
- if (jdbt_lock(&jdbt, jnienv, jthis, inOp) != 0)
- goto out;
-
- if (!jdbt.dbt->dbt.data ||
- jdbt.java_array_len_ < sizeof(db_recno_t)) {
- char buf[200];
- sprintf(buf, "get_recno_key_data error: %p %p %d %d",
- &jdbt.dbt->dbt, jdbt.dbt->dbt.data,
- jdbt.dbt->dbt.ulen, sizeof(db_recno_t));
- report_exception(jnienv, buf, 0, 0);
- }
- else {
- ret = *(db_recno_t*)(jdbt.dbt->dbt.data);
- }
- out:
- jdbt_unlock(&jdbt, jnienv);
- return (ret);
-}
-
-JNIEXPORT void JNICALL Java_com_sleepycat_db_Dbt_finalize
- (JNIEnv *jnienv, jobject jthis)
-{
- DBT_JAVAINFO *dbtji;
-
- dbtji = get_DBT_JAVAINFO(jnienv, jthis);
- if (dbtji) {
- /* Free any data related to DBT here */
- dbjit_release(dbtji, jnienv);
-
- /* Extra paranoia */
- memset(dbtji, 0, sizeof(DBT_JAVAINFO));
- free(dbtji);
- }
-}
diff --git a/db/libdb_java/java_callbacks.i b/db/libdb_java/java_callbacks.i
new file mode 100644
index 000000000..cdd259bc7
--- /dev/null
+++ b/db/libdb_java/java_callbacks.i
@@ -0,0 +1,392 @@
+// Callbacks
+%define JAVA_CALLBACK(_sig, _jclass, _name)
+JAVA_TYPEMAP(_sig, _jclass, jobject)
+%typemap(javain) _sig %{ (_name##_handler = $javainput) %}
+
+/*
+ * The Java object is stored in the Db or DbEnv class.
+ * Here we only care whether it is non-NULL.
+ */
+%typemap(in) _sig %{
+ $1 = ($input == NULL) ? NULL : __dbj_##_name;
+%}
+%enddef
+
+%{
+/*
+ * We do a dance so that the prefix in the C API points to the DB_ENV.
+ * The real prefix is stored as a Java string in the DbEnv object.
+ */
+static void __dbj_error(const char *prefix, char *msg)
+{
+ DB_ENV *dbenv = (DB_ENV *)prefix;
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ if (jdbenv != NULL)
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ errcall_method, (*jenv)->NewStringUTF(jenv, msg));
+}
+
+static void __dbj_env_feedback(DB_ENV *dbenv, int opcode, int percent)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ env_feedback_method, opcode, percent);
+}
+
+static void __dbj_panic(DB_ENV *dbenv, int err)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdbenv, dbenv_class,
+ paniccall_method, __dbj_get_except(jenv, err, NULL, NULL, jdbenv));
+}
+
+static int __dbj_app_dispatch(DB_ENV *dbenv,
+ DBT *dbt, DB_LSN *lsn, db_recops recops)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ jobject jdbt, jlsn;
+ jbyteArray jdbtarr;
+ int ret;
+
+ jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
+ if (jdbt == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, lsn);
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ app_dispatch_method, jdbt, jlsn, recops);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr);
+ (*jenv)->DeleteLocalRef(jenv, jdbt);
+ if (jlsn != NULL)
+ (*jenv)->DeleteLocalRef(jenv, jlsn);
+
+ return (ret);
+}
+
+static int __dbj_rep_transport(DB_ENV *dbenv,
+ const DBT *control, const DBT *rec, const DB_LSN *lsn, int envid,
+ u_int32_t flags)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+ jobject jcontrol, jrec, jlsn;
+ jbyteArray jcontrolarr, jrecarr;
+ int ret;
+
+ jcontrol = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jrec = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jcontrol == NULL || jrec == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, control, &jcontrolarr, jcontrol);
+ __dbj_dbt_copyout(jenv, rec, &jrecarr, jrec);
+ jlsn = (lsn == NULL) ? NULL : __dbj_wrap_DB_LSN(jenv, (DB_LSN *)lsn);
+
+ if (jcontrolarr == NULL || jrecarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = (*jenv)->CallNonvirtualIntMethod(jenv, jdbenv, dbenv_class,
+ rep_transport_method, jcontrol, jrec, jlsn, envid, flags);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jrecarr);
+ (*jenv)->DeleteLocalRef(jenv, jcontrolarr);
+ (*jenv)->DeleteLocalRef(jenv, jrec);
+ (*jenv)->DeleteLocalRef(jenv, jcontrol);
+ if (jlsn != NULL)
+ (*jenv)->DeleteLocalRef(jenv, jlsn);
+
+ return (ret);
+}
+
+static int __dbj_seckey_create(DB *db,
+ const DBT *key, const DBT *data, DBT *result)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jkey, jdata, jresult;
+ jbyteArray jkeyarr, jdataarr;
+ DBT_LOCKED lresult;
+ void *data_copy;
+ int ret;
+
+ jkey = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdata = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jresult = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jkey == NULL || jdata == NULL || jresult == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, key, &jkeyarr, jkey);
+ __dbj_dbt_copyout(jenv, data, &jdataarr, jdata);
+
+ if (jkeyarr == NULL || jdataarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ seckey_create_method, jkey, jdata, jresult);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ goto err;
+ }
+
+ if ((ret = __dbj_dbt_copyin(jenv, &lresult, jresult)) != 0)
+ goto err;
+
+ if (lresult.jarr != NULL) {
+ /*
+ * If there's data, we need to make a copy because we can't
+ * keep the Java array pinned.
+ */
+ memset(result, 0, sizeof (DBT));
+ *result = lresult.dbt;
+ if ((ret = __os_umalloc(NULL, result->size, &data_copy)) == 0)
+ memcpy(data_copy, result->data, result->size);
+ (*jenv)->ReleaseByteArrayElements(jenv, lresult.jarr,
+ lresult.orig_data, 0);
+ (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
+ result->data = data_copy;
+ result->flags |= DB_DBT_APPMALLOC;
+ }
+
+err: (*jenv)->DeleteLocalRef(jenv, jkeyarr);
+ (*jenv)->DeleteLocalRef(jenv, jkey);
+ (*jenv)->DeleteLocalRef(jenv, jdataarr);
+ (*jenv)->DeleteLocalRef(jenv, jdata);
+ (*jenv)->DeleteLocalRef(jenv, jresult);
+
+ return (ret);
+}
+
+static int __dbj_append_recno(DB *db, DBT *dbt, db_recno_t recno)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt;
+ DBT_LOCKED lresult;
+ void *data_copy;
+ jbyteArray jdbtarr;
+ int ret;
+
+ jdbt = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt, &jdbtarr, jdbt);
+ if (jdbtarr == NULL)
+ return (ENOMEM); /* An exception is pending */
+
+ ret = 0;
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
+ append_recno_method, jdbt, recno);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ goto err;
+ }
+
+ if ((ret = __dbj_dbt_copyin(jenv, &lresult, jdbt)) != 0)
+ goto err;
+
+ if (lresult.jarr != NULL) {
+ /*
+ * If there's data, we need to make a copy because we can't
+ * keep the Java array pinned.
+ */
+ *dbt = lresult.dbt;
+ if ((ret = __os_umalloc(db->dbenv, dbt->size, &data_copy)) == 0)
+ memcpy(data_copy, dbt->data, dbt->size);
+ (*jenv)->ReleaseByteArrayElements(jenv, lresult.jarr,
+ lresult.orig_data, 0);
+ (*jenv)->DeleteLocalRef(jenv, lresult.jarr);
+ dbt->data = data_copy;
+ dbt->flags |= DB_DBT_APPMALLOC;
+ }
+
+err: (*jenv)->DeleteLocalRef(jenv, jdbtarr);
+ (*jenv)->DeleteLocalRef(jenv, jdbt);
+
+ return (ret);
+}
+
+static int __dbj_bt_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ bt_compare_method, jdbt1, jdbt2);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static size_t __dbj_bt_prefix(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ bt_prefix_method, jdbt1, jdbt2);
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static int __dbj_dup_compare(DB *db, const DBT *dbt1, const DBT *dbt2)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jobject jdbt1, jdbt2;
+ jbyteArray jdbtarr1, jdbtarr2;
+ int ret;
+
+ jdbt1 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ jdbt2 = (*jenv)->NewObject(jenv, dbt_class, dbt_construct);
+ if (jdbt1 == NULL || jdbt2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ __dbj_dbt_copyout(jenv, dbt1, &jdbtarr1, jdbt1);
+ __dbj_dbt_copyout(jenv, dbt2, &jdbtarr2, jdbt2);
+ if (jdbtarr1 == NULL || jdbtarr2 == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ dup_compare_method, jdbt1, jdbt2);
+
+ if ((*jenv)->ExceptionOccurred(jenv)) {
+ /* The exception will be thrown, so this could be any error. */
+ ret = EINVAL;
+ }
+
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr2);
+ (*jenv)->DeleteLocalRef(jenv, jdbtarr1);
+ (*jenv)->DeleteLocalRef(jenv, jdbt2);
+ (*jenv)->DeleteLocalRef(jenv, jdbt1);
+
+ return (ret);
+}
+
+static void __dbj_db_feedback(DB *db, int opcode, int percent)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+
+ (*jenv)->CallNonvirtualVoidMethod(jenv, jdb, db_class,
+ db_feedback_method, opcode, percent);
+}
+
+static u_int32_t __dbj_h_hash(DB *db, const void *data, u_int32_t len)
+{
+ JNIEnv *jenv = __dbj_get_jnienv();
+ jobject jdb = (jobject)DB_INTERNAL(db);
+ jbyteArray jarr = (*jenv)->NewByteArray(jenv, (jsize)len);
+ int ret;
+
+ if (jarr == NULL)
+ return ENOMEM; /* An exception is pending */
+
+ (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)len, (jbyte *)data);
+
+ ret = (int)(*jenv)->CallNonvirtualIntMethod(jenv, jdb, db_class,
+ h_hash_method, jarr, len);
+
+ (*jenv)->DeleteLocalRef(jenv, jarr);
+
+ return (ret);
+}
+%}
+
+JAVA_CALLBACK(void (*db_errcall_fcn)(const char *, char *),
+ DbErrorHandler, error)
+JAVA_CALLBACK(void (*db_feedback_fcn)(DB_ENV *, int, int),
+ DbEnvFeedbackHandler, env_feedback)
+JAVA_CALLBACK(void (*db_panic_fcn)(DB_ENV *, int),
+ DbPanicHandler, panic)
+JAVA_CALLBACK(int (*tx_recover)(DB_ENV *, DBT *, DB_LSN *, db_recops),
+ DbAppDispatch, app_dispatch)
+JAVA_CALLBACK(int (*send)(DB_ENV *, const DBT *, const DBT *,
+ const DB_LSN *, int, u_int32_t),
+ DbRepTransport, rep_transport)
+
+/*
+ * Db.associate is a special case, because the handler must be set in the
+ * secondary DB - that's what we have in the callback.
+ */
+JAVA_CALLBACK(int (*callback)(DB *, const DBT *, const DBT *, DBT *),
+ DbSecondaryKeyCreate, seckey_create)
+%typemap(javain) int (*callback)(DB *, const DBT *, const DBT *, DBT *)
+ %{ (secondary.seckey_create_handler = $javainput) %}
+
+JAVA_CALLBACK(int (*db_append_recno_fcn)(DB *, DBT *, db_recno_t),
+ DbAppendRecno, append_recno)
+JAVA_CALLBACK(int (*bt_compare_fcn)(DB *, const DBT *, const DBT *),
+ DbBtreeCompare, bt_compare)
+JAVA_CALLBACK(size_t (*bt_prefix_fcn)(DB *, const DBT *, const DBT *),
+ DbBtreePrefix, bt_prefix)
+JAVA_CALLBACK(int (*dup_compare_fcn)(DB *, const DBT *, const DBT *),
+ DbDupCompare, dup_compare)
+JAVA_CALLBACK(void (*db_feedback_fcn)(DB *, int, int),
+ DbFeedbackHandler, db_feedback)
+JAVA_CALLBACK(u_int32_t (*h_hash_fcn)(DB *, const void *, u_int32_t),
+ DbHash, h_hash)
diff --git a/db/libdb_java/java_except.i b/db/libdb_java/java_except.i
new file mode 100644
index 000000000..fc4eafb7a
--- /dev/null
+++ b/db/libdb_java/java_except.i
@@ -0,0 +1,123 @@
+%{
+/*
+ * Macros to find the Java DbEnv object for methods in various classes.
+ * Note that "arg1" is from the code SWIG generates for the "this"/"self".
+ */
+#define JDBENV (arg1 ? (jobject)DB_ENV_INTERNAL(arg1) : NULL)
+#define DB2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbenv))
+#define DBC2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->dbp->dbenv))
+#define TXN2JDBENV ((jobject)DB_ENV_INTERNAL(arg1->mgrp->dbenv))
+%}
+
+/* Common case exception handling */
+%typemap(check) SWIGTYPE *self %{
+ if ($input == 0) {
+ __dbj_throw(jenv, EINVAL, "call on closed handle", NULL, NULL);
+ return $null;
+ }
+%}
+
+%define JAVA_EXCEPT_NONE
+%exception %{ $action %}
+%enddef
+
+/* Most methods return an error code. */
+%define JAVA_EXCEPT(_retcheck, _jdbenv)
+%exception %{
+ $action
+ if (!_retcheck(result))
+ __dbj_throw(jenv, result, NULL, NULL, _jdbenv);
+%}
+%enddef
+
+/* For everything else, errno is set in db.i. */
+%define JAVA_EXCEPT_ERRNO(_retcheck, _jdbenv)
+%exception %{
+ errno = 0;
+ $action
+ if (!_retcheck(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, _jdbenv);
+%}
+%enddef
+
+/* And then there are these (extra) special cases. */
+%exception __db_env::lock_get %{
+ errno = 0;
+ $action
+ if (errno == DB_LOCK_NOTGRANTED) {
+ (*jenv)->Throw(jenv,
+ (*jenv)->NewObject(jenv, lockex_class, lockex_construct,
+ (*jenv)->NewStringUTF(jenv, "DbEnv.lock_get not granted"),
+ DB_LOCK_GET, arg5, jarg4, NULL, -1, JDBENV));
+ } else if (!DB_RETOK_STD(errno))
+ __dbj_throw(jenv, errno, NULL, NULL, JDBENV);
+%}
+
+%{
+
+static jthrowable __dbj_get_except(JNIEnv *jenv,
+ int err, const char *msg, jobject obj, jobject jdbenv) {
+ jobject jmsg;
+
+ if (msg == NULL)
+ msg = db_strerror(err);
+
+ jmsg = (*jenv)->NewStringUTF(jenv, msg);
+
+ switch (err) {
+ case EINVAL:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ illegalargex_class, illegalargex_construct, jmsg);
+
+ case ENOENT:
+ return (jthrowable)(*jenv)->NewObject(jenv,
+ filenotfoundex_class, filenotfoundex_construct, jmsg);
+
+ case ENOMEM:
+ return (jthrowable)(*jenv)->NewObject(jenv, memex_class,
+ memex_construct, jmsg, obj, err, jdbenv);
+
+ case DB_RUNRECOVERY:
+ return (jthrowable)(*jenv)->NewObject(jenv, runrecex_class,
+ runrecex_construct, jmsg, err, jdbenv);
+
+ case DB_LOCK_DEADLOCK:
+ return (jthrowable)(*jenv)->NewObject(jenv, deadex_class,
+ deadex_construct, jmsg, err, jdbenv);
+
+ case DB_LOCK_NOTGRANTED:
+ return (jthrowable)(*jenv)->NewObject(jenv, lockex_class,
+ lockex_construct, jmsg, 0, 0, NULL, NULL, 0, jdbenv);
+
+ default:
+ return (jthrowable)(*jenv)->NewObject(jenv, dbex_class,
+ dbex_construct, jmsg, err, jdbenv);
+ }
+}
+
+static int __dbj_throw(JNIEnv *jenv, int err, const char *msg, jobject obj, jobject jdbenv)
+{
+ jthrowable t;
+
+ /* If an exception is pending, ignore requests to throw a new one. */
+ if ((*jenv)->ExceptionOccurred(jenv) == NULL) {
+ if ((t = __dbj_get_except(jenv, err, msg, obj, jdbenv)) == NULL) {
+ /*
+ * This is a problem - something went wrong creating an
+ * exception. We have to assume there is an exception
+ * created by the JVM that is pending as a result
+ * (e.g., OutOfMemoryError), but we don't want to lose
+ * this error, so we just call __db_err here.
+ */
+ if (msg == NULL)
+ msg = db_strerror(err);
+
+ __db_err(NULL, "Couldn't create exception for: '%s'",
+ msg);
+ } else
+ (*jenv)->Throw(jenv, t);
+ }
+
+ return (err);
+}
+%}
diff --git a/db/libdb_java/java_info.c b/db/libdb_java/java_info.c
deleted file mode 100644
index ccd469fa2..000000000
--- a/db/libdb_java/java_info.c
+++ /dev/null
@@ -1,1001 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_info.c,v 11.18 2000/10/28 13:09:39 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "db_int.h"
-#include "java_util.h"
-
-/****************************************************************
- *
- * Callback functions
- *
- */
-
-static void Db_feedback_callback(DB *db, int opcode, int percent)
-{
- DB_JAVAINFO *dbinfo;
-
- DB_ASSERT(db != NULL);
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- dbji_call_feedback(dbinfo, db, dbinfo->jdbref_, opcode, percent);
-}
-
-static int Db_append_recno_callback(DB *db, DBT *dbt, db_recno_t recno)
-{
- DB_JAVAINFO *dbinfo;
-
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- return (dbji_call_append_recno(dbinfo, db, dbinfo->jdbref_, dbt, recno));
-}
-
-static int Db_bt_compare_callback(DB *db, const DBT *dbt1, const DBT *dbt2)
-{
- DB_JAVAINFO *dbinfo;
-
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- return (dbji_call_bt_compare(dbinfo, db, dbinfo->jdbref_, dbt1, dbt2));
-}
-
-static size_t Db_bt_prefix_callback(DB *db, const DBT *dbt1, const DBT *dbt2)
-{
- DB_JAVAINFO *dbinfo;
-
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- return (dbji_call_bt_prefix(dbinfo, db, dbinfo->jdbref_, dbt1, dbt2));
-}
-
-static int Db_dup_compare_callback(DB *db, const DBT *dbt1, const DBT *dbt2)
-{
- DB_JAVAINFO *dbinfo;
-
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- return (dbji_call_dup_compare(dbinfo, db, dbinfo->jdbref_, dbt1, dbt2));
-}
-
-static u_int32_t Db_h_hash_callback(DB *db, const void *data, u_int32_t len)
-{
- DB_JAVAINFO *dbinfo;
-
- dbinfo = (DB_JAVAINFO *)db->cj_internal;
- return (dbji_call_h_hash(dbinfo, db, dbinfo->jdbref_, data, len));
-}
-
-static void DbEnv_feedback_callback(DB_ENV *dbenv, int opcode, int percent)
-{
- DB_ENV_JAVAINFO *dbinfo;
-
- DB_ASSERT(dbenv != NULL);
- dbinfo = (DB_ENV_JAVAINFO *)dbenv->cj_internal;
- dbjie_call_feedback(dbinfo, dbenv, dbinfo->jenvref_, opcode, percent);
-}
-
-static int DbEnv_recovery_init_callback(DB_ENV *dbenv)
-{
- DB_ENV_JAVAINFO *dbinfo;
-
- dbinfo = (DB_ENV_JAVAINFO *)dbenv->cj_internal;
- return (dbjie_call_recovery_init(dbinfo, dbenv, dbinfo->jenvref_));
-}
-
-static int DbEnv_tx_recover_callback(DB_ENV *dbenv, DBT *dbt,
- DB_LSN *lsn, db_recops recops)
-{
- DB_ENV_JAVAINFO *dbinfo;
-
- DB_ASSERT(dbenv != NULL);
- dbinfo = (DB_ENV_JAVAINFO *)dbenv->cj_internal;
- return dbjie_call_tx_recover(dbinfo, dbenv, dbinfo->jenvref_, dbt,
- lsn, recops);
-}
-
-/****************************************************************
- *
- * Implementation of class DBT_javainfo
- *
- */
-DBT_JAVAINFO *
-dbjit_construct()
-{
- DBT_JAVAINFO *dbjit;
-
- dbjit = (DBT_JAVAINFO *)malloc(sizeof(DBT_JAVAINFO));
- memset(dbjit, 0, sizeof(DBT_JAVAINFO));
- return (dbjit);
-}
-
-void dbjit_destroy(DBT_JAVAINFO *dbjit)
-{
- /* Sanity check:
- * We cannot delete the global ref because we don't have a JNIEnv.
- */
- if (dbjit->array_ != NULL) {
- fprintf(stderr, "object is not freed\n");
- }
-
- /* Extra paranoia */
- memset(dbjit, 0, sizeof(DB_JAVAINFO));
- free(dbjit);
-}
-
-void dbjit_release(DBT_JAVAINFO *dbjit, JNIEnv *jnienv)
-{
- if (dbjit->array_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjit->array_);
- dbjit->array_ = NULL;
- }
-}
-
-/****************************************************************
- *
- * Implementation of class DB_ENV_JAVAINFO
- *
- */
-
-/* create/initialize an object */
-DB_ENV_JAVAINFO *
-dbjie_construct(JNIEnv *jnienv,
- jobject default_errcall,
- int is_dbopen)
-{
- DB_ENV_JAVAINFO *dbjie;
-
- dbjie = (DB_ENV_JAVAINFO *)malloc(sizeof(DB_ENV_JAVAINFO));
- memset(dbjie, 0, sizeof(DB_ENV_JAVAINFO));
- dbjie->is_dbopen_ = is_dbopen;
-
- if ((*jnienv)->GetJavaVM(jnienv, &dbjie->javavm_) != 0) {
- free(dbjie);
- report_exception(jnienv, "cannot get Java VM", 0, 0);
- return (NULL);
- }
-
- /* The default error call just prints to the 'System.err'
- * stream. If the user does set_errcall to null, we'll
- * want to have a reference to set it back to.
- *
- * Why do we have always set db_errcall to our own callback?
- * Because it makes the interaction between setting the
- * error prefix, error stream, and user's error callback
- * that much easier.
- */
- dbjie->default_errcall_ = NEW_GLOBAL_REF(jnienv, default_errcall);
- dbjie->errcall_ = NEW_GLOBAL_REF(jnienv, default_errcall);
- return (dbjie);
-}
-
-/* release all objects held by this this one */
-void dbjie_dealloc(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv)
-{
- if (dbjie->recovery_init_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->recovery_init_);
- dbjie->recovery_init_ = NULL;
- }
- if (dbjie->feedback_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->feedback_);
- dbjie->feedback_ = NULL;
- }
- if (dbjie->tx_recover_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->tx_recover_);
- dbjie->tx_recover_ = NULL;
- }
- if (dbjie->errcall_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->errcall_);
- dbjie->errcall_ = NULL;
- }
- if (dbjie->default_errcall_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->default_errcall_);
- dbjie->default_errcall_ = NULL;
- }
-
- if (dbjie->conflict_ != NULL) {
- free(dbjie->conflict_);
- dbjie->conflict_ = NULL;
- }
- if (dbjie->errpfx_ != NULL) {
- free(dbjie->errpfx_);
- dbjie->errpfx_ = NULL;
- }
-}
-
-/* free this object, releasing anything allocated on its behalf */
-void dbjie_destroy(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv)
-{
- dbjie_dealloc(dbjie, jnienv);
-
- /* Extra paranoia */
- memset(dbjie, 0, sizeof(DB_ENV_JAVAINFO));
- free(dbjie);
-}
-
-/* Attach to the current thread that is running and
- * return that. We use the java virtual machine
- * that we saved in the constructor.
- */
-JNIEnv *
-dbjie_get_jnienv(DB_ENV_JAVAINFO *dbjie)
-{
- /* Note:
- * Different versions of the JNI disagree on the signature
- * for AttachCurrentThread. The most recent documentation
- * seems to say that (JNIEnv **) is correct, but newer
- * JNIs seem to use (void **), oddly enough.
- */
-#ifdef JNI_VERSION_1_2
- void *attachret = 0;
-#else
- JNIEnv *attachret = 0;
-#endif
-
- /* This should always succeed, as we are called via
- * some Java activity. I think therefore I am (a thread).
- */
- if ((*dbjie->javavm_)->AttachCurrentThread(dbjie->javavm_, &attachret, 0) != 0)
- return (0);
-
- return ((JNIEnv *)attachret);
-}
-
-jstring
-dbjie_get_errpfx(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv)
-{
- return (get_java_string(jnienv, dbjie->errpfx_));
-}
-
-void
-dbjie_set_errcall(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv, jobject new_errcall)
-{
- /* If the new_errcall is null, we'll set the error call
- * to the default one.
- */
- if (new_errcall == NULL)
- new_errcall = dbjie->default_errcall_;
-
- DELETE_GLOBAL_REF(jnienv, dbjie->errcall_);
- dbjie->errcall_ = NEW_GLOBAL_REF(jnienv, new_errcall);
-}
-
-void
-dbjie_set_errpfx(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv, jstring errpfx)
-{
- if (dbjie->errpfx_ != NULL)
- free(dbjie->errpfx_);
-
- if (errpfx)
- dbjie->errpfx_ = get_c_string(jnienv, errpfx);
- else
- dbjie->errpfx_ = NULL;
-}
-
-void
-dbjie_set_conflict(DB_ENV_JAVAINFO *dbjie, unsigned char *newarr)
-{
- if (dbjie->conflict_)
- free(dbjie->conflict_);
- dbjie->conflict_ = newarr;
-}
-
-void dbjie_set_feedback_object(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv,
- DB_ENV *dbenv, jobject jfeedback)
-{
- int err;
-
- if (dbjie->feedback_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->feedback_);
- }
- if (jfeedback == NULL) {
- if ((err = dbenv->set_feedback(dbenv, NULL)) != 0)
- report_exception(jnienv, "set_feedback failed",
- err, 0);
- }
- else {
- if ((err = dbenv->set_feedback(dbenv,
- DbEnv_feedback_callback)) != 0)
- report_exception(jnienv, "set_feedback failed",
- err, 0);
- }
-
- dbjie->feedback_ = NEW_GLOBAL_REF(jnienv, jfeedback);
-}
-
-void dbjie_call_feedback(DB_ENV_JAVAINFO *dbjie, DB_ENV *dbenv, jobject jenv,
- int opcode, int percent)
-{
- JNIEnv *jnienv;
- jclass feedback_class;
- jmethodID id;
-
- COMPQUIET(dbenv, NULL);
- jnienv = dbjie_get_jnienv(dbjie);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return;
- }
-
- feedback_class = get_class(jnienv, name_DbEnvFeedback);
- id = (*jnienv)->GetMethodID(jnienv, feedback_class,
- "feedback",
- "(Lcom/sleepycat/db/DbEnv;II)V");
- if (!id) {
- fprintf(stderr, "Cannot find callback class\n");
- return;
- }
-
- (*jnienv)->CallVoidMethod(jnienv, dbjie->feedback_, id,
- jenv, (jint)opcode, (jint)percent);
-}
-
-void dbjie_set_recovery_init_object(DB_ENV_JAVAINFO *dbjie,
- JNIEnv *jnienv, DB_ENV *dbenv,
- jobject jrecovery_init)
-{
- int err;
-
- if (dbjie->recovery_init_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->recovery_init_);
- }
- if (jrecovery_init == NULL) {
- if ((err = dbenv->set_recovery_init(dbenv, NULL)) != 0)
- report_exception(jnienv, "set_recovery_init failed",
- err, 0);
- }
- else {
- if ((err = dbenv->set_recovery_init(dbenv,
- DbEnv_recovery_init_callback)) != 0)
- report_exception(jnienv, "set_recovery_init failed",
- err, 0);
- }
-
- dbjie->recovery_init_ = NEW_GLOBAL_REF(jnienv, jrecovery_init);
-}
-
-int dbjie_call_recovery_init(DB_ENV_JAVAINFO *dbjie, DB_ENV *dbenv,
- jobject jenv)
-{
- JNIEnv *jnienv;
- jclass recovery_init_class;
- jmethodID id;
-
- COMPQUIET(dbenv, NULL);
- jnienv = dbjie_get_jnienv(dbjie);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (EINVAL);
- }
-
- recovery_init_class = get_class(jnienv, name_DbRecoveryInit);
- id = (*jnienv)->GetMethodID(jnienv, recovery_init_class,
- "recovery_init",
- "(Lcom/sleepycat/db/DbEnv;)V");
- if (!id) {
- fprintf(stderr, "Cannot find callback class\n");
- return (EINVAL);
- }
- return (*jnienv)->CallIntMethod(jnienv, dbjie->recovery_init_,
- id, jenv);
-}
-
-void dbjie_set_tx_recover_object(DB_ENV_JAVAINFO *dbjie, JNIEnv *jnienv,
- DB_ENV *dbenv, jobject jtx_recover)
-{
- int err;
-
- if (dbjie->tx_recover_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbjie->tx_recover_);
- }
- if (jtx_recover == NULL) {
- if ((err = dbenv->set_tx_recover(dbenv, NULL)) != 0)
- report_exception(jnienv, "set_tx_recover failed",
- err, 0);
- }
- else {
- if ((err = dbenv->set_tx_recover(dbenv,
- DbEnv_tx_recover_callback)) != 0)
- report_exception(jnienv, "set_tx_recover failed",
- err, 0);
- }
-
- dbjie->tx_recover_ = NEW_GLOBAL_REF(jnienv, jtx_recover);
-}
-
-int dbjie_call_tx_recover(DB_ENV_JAVAINFO *dbjie, DB_ENV *dbenv, jobject jenv,
- DBT *dbt, DB_LSN *lsn, int recops)
-{
- JNIEnv *jnienv;
- jclass tx_recover_class;
- jmethodID id;
- jobject jdbt;
- jobject jlsn;
-
- COMPQUIET(dbenv, NULL);
- jnienv = dbjie_get_jnienv(dbjie);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- tx_recover_class = get_class(jnienv, name_DbTxnRecover);
- id = (*jnienv)->GetMethodID(jnienv, tx_recover_class,
- "tx_recover",
- "(Lcom/sleepycat/db/DbEnv;"
- "Lcom/sleepycat/db/Dbt;"
- "Lcom/sleepycat/db/DbLsn;"
- "I)I");
- if (!id) {
- fprintf(stderr, "Cannot find callback class\n");
- return (0);
- }
-
- if (dbt == NULL)
- jdbt = NULL;
- else
- jdbt = get_Dbt(jnienv, dbt);
-
- if (lsn == NULL)
- jlsn = NULL;
- else
- jlsn = get_DbLsn(jnienv, *lsn);
-
- return (*jnienv)->CallIntMethod(jnienv, dbjie->tx_recover_, id, jenv,
- jdbt, jlsn, recops);
-}
-
-jobject dbjie_get_errcall(DB_ENV_JAVAINFO *dbjie)
-{
- return (dbjie->errcall_);
-}
-
-int dbjie_is_dbopen(DB_ENV_JAVAINFO *dbjie)
-{
- return (dbjie->is_dbopen_);
-}
-
-/****************************************************************
- *
- * Implementation of class DB_JAVAINFO
- *
- */
-
-DB_JAVAINFO *dbji_construct(JNIEnv *jnienv, jint flags)
-{
- DB_JAVAINFO *dbji;
-
- dbji = (DB_JAVAINFO *)malloc(sizeof(DB_JAVAINFO));
- memset(dbji, 0, sizeof(DB_JAVAINFO));
-
- if ((*jnienv)->GetJavaVM(jnienv, &dbji->javavm_) != 0) {
- report_exception(jnienv, "cannot get Java VM", 0, 0);
- free(dbji);
- return (NULL);
- }
- dbji->construct_flags_ = flags;
- return (dbji);
-}
-
-void
-dbji_dealloc(DB_JAVAINFO *dbji, JNIEnv *jnienv)
-{
- if (dbji->append_recno_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->append_recno_);
- dbji->append_recno_ = NULL;
- }
- if (dbji->bt_compare_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->bt_compare_);
- dbji->bt_compare_ = NULL;
- }
- if (dbji->bt_prefix_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->bt_prefix_);
- dbji->bt_prefix_ = NULL;
- }
- if (dbji->dup_compare_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->dup_compare_);
- dbji->dup_compare_ = NULL;
- }
- if (dbji->feedback_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->feedback_);
- dbji->feedback_ = NULL;
- }
- if (dbji->h_hash_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->h_hash_);
- dbji->h_hash_ = NULL;
- }
-}
-
-void
-dbji_destroy(DB_JAVAINFO *dbji, JNIEnv *jnienv)
-{
- dbji_dealloc(dbji, jnienv);
- free(dbji);
-}
-
-JNIEnv *dbji_get_jnienv(DB_JAVAINFO *dbji)
-{
- /* Note:
- * Different versions of the JNI disagree on the signature
- * for AttachCurrentThread. The most recent documentation
- * seems to say that (JNIEnv **) is correct, but newer
- * JNIs seem to use (void **), oddly enough.
- */
-#ifdef JNI_VERSION_1_2
- void *attachret = 0;
-#else
- JNIEnv *attachret = 0;
-#endif
-
- /* This should always succeed, as we are called via
- * some Java activity. I think therefore I am (a thread).
- */
- if ((*dbji->javavm_)->AttachCurrentThread(dbji->javavm_, &attachret, 0) != 0)
- return (0);
-
- return ((JNIEnv *)attachret);
-}
-
-jint dbji_get_flags(DB_JAVAINFO *dbji)
-{
- return (dbji->construct_flags_);
-}
-
-void dbji_set_feedback_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jfeedback)
-{
- jclass feedback_class;
-
- if (dbji->feedback_method_id_ == NULL) {
- feedback_class = get_class(jnienv, name_DbFeedback);
- dbji->feedback_method_id_ =
- (*jnienv)->GetMethodID(jnienv, feedback_class,
- "feedback",
- "(Lcom/sleepycat/db/Db;II)V");
- if (dbji->feedback_method_id_ != NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->feedback_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->feedback_);
- }
- if (jfeedback == NULL) {
- db->set_feedback(db, NULL);
- }
- else {
- db->set_feedback(db, Db_feedback_callback);
- }
-
- dbji->feedback_ = NEW_GLOBAL_REF(jnienv, jfeedback);
-
-}
-
-void dbji_call_feedback(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- int opcode, int percent)
-{
- JNIEnv *jnienv;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return;
- }
-
- DB_ASSERT(dbji->feedback_method_id_ != NULL);
- (*jnienv)->CallVoidMethod(jnienv, dbji->feedback_,
- dbji->feedback_method_id_,
- jdb, (jint)opcode, (jint)percent);
-}
-
-void dbji_set_append_recno_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jcallback)
-{
- jclass append_recno_class;
-
- if (dbji->append_recno_method_id_ == NULL) {
- append_recno_class = get_class(jnienv, name_DbAppendRecno);
- dbji->append_recno_method_id_ =
- (*jnienv)->GetMethodID(jnienv, append_recno_class,
- "db_append_recno",
- "(Lcom/sleepycat/db/Db;"
- "Lcom/sleepycat/db/Dbt;I)V");
- if (dbji->append_recno_method_id_ == NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->append_recno_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->append_recno_);
- }
- if (jcallback == NULL) {
- db->set_append_recno(db, NULL);
- }
- else {
- db->set_append_recno(db, Db_append_recno_callback);
- }
-
- dbji->append_recno_ = NEW_GLOBAL_REF(jnienv, jcallback);
-}
-
-extern int dbji_call_append_recno(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- DBT *dbt, jint recno)
-{
- JNIEnv *jnienv;
- jobject jdbt;
- DBT_JAVAINFO *dbtji;
- jbyteArray arr;
- unsigned int arraylen;
- unsigned char *data;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- /* XXX
- * We should have a pool of Dbt objects used for this purpose
- * instead of creating new ones each time. Because of
- * multithreading, we may need an arbitrary number (more than two).
- * We might also have a byte arrays that grow as needed,
- * so we don't need to allocate those either.
- *
- * Note, we do not set the 'create_array_' flag as on other
- * callbacks as we are creating the array here.
- */
- jdbt = create_default_object(jnienv, name_DBT);
- dbtji = get_DBT_JAVAINFO(jnienv, jdbt);
- memcpy(&dbtji->dbt, dbt, sizeof(DBT));
- dbtji->dbt.data = NULL;
- arr = (*jnienv)->NewByteArray(jnienv, dbt->size);
- (*jnienv)->SetByteArrayRegion(jnienv, arr, 0, dbt->size,
- (jbyte *)dbt->data);
- dbtji->array_ = (jbyteArray)NEW_GLOBAL_REF(jnienv, arr);
-
- DB_ASSERT(dbji->append_recno_method_id_ != NULL);
- (*jnienv)->CallVoidMethod(jnienv, dbji->append_recno_,
- dbji->append_recno_method_id_,
- jdb, jdbt, recno);
-
- /* The underlying C API requires that an errno be returned
- * on error. Java users know nothing of errnos, so we
- * allow them to throw exceptions instead. We leave the
- * exception in place and return DB_JAVA_CALLBACK to the C API
- * that called us. Eventually the DB->get will fail and
- * when java prepares to throw an exception in
- * report_exception(), this will be spotted as a special case,
- * and the original exception will be preserved.
- *
- * Note: we have sometimes noticed strange behavior with
- * exceptions under Linux 1.1.7 JVM. (i.e. multiple calls
- * to ExceptionOccurred() may report different results).
- * Currently we don't know of any problems related to this
- * in our code, but if it pops up in the future, users are
- * encouranged to get a more recent JVM.
- */
- if ((*jnienv)->ExceptionOccurred(jnienv) != NULL)
- return (DB_JAVA_CALLBACK);
-
- if (dbtji->array_ == NULL) {
- report_exception(jnienv, "Dbt.data is null", 0, 0);
- return (EFAULT);
- }
-
- arraylen = (*jnienv)->GetArrayLength(jnienv, dbtji->array_);
- if (dbtji->offset_ < 0 ) {
- report_exception(jnienv, "Dbt.offset illegal", 0, 0);
- return (EFAULT);
- }
- if (dbt->ulen + dbtji->offset_ > arraylen) {
- report_exception(jnienv,
- "Dbt.ulen + Dbt.offset greater than array length", 0, 0);
- return (EFAULT);
- }
-
- data = (*jnienv)->GetByteArrayElements(jnienv, dbtji->array_,
- (jboolean *)0);
- dbt->data = data + dbtji->offset_;
- return (0);
-}
-
-void dbji_set_bt_compare_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jcompare)
-{
- jclass bt_compare_class;
-
- if (dbji->bt_compare_method_id_ == NULL) {
- bt_compare_class = get_class(jnienv, name_DbBtreeCompare);
- dbji->bt_compare_method_id_ =
- (*jnienv)->GetMethodID(jnienv, bt_compare_class,
- "bt_compare",
- "(Lcom/sleepycat/db/Db;"
- "Lcom/sleepycat/db/Dbt;"
- "Lcom/sleepycat/db/Dbt;)I");
- if (dbji->bt_compare_method_id_ == NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->bt_compare_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->bt_compare_);
- }
- if (jcompare == NULL) {
- db->set_bt_compare(db, NULL);
- }
- else {
- db->set_bt_compare(db, Db_bt_compare_callback);
- }
-
- dbji->bt_compare_ = NEW_GLOBAL_REF(jnienv, jcompare);
-}
-
-int dbji_call_bt_compare(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2)
-{
- JNIEnv *jnienv;
- jobject jdbt1, jdbt2;
- DBT_JAVAINFO *dbtji1, *dbtji2;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- /* XXX
- * We should have a pool of Dbt objects used for this purpose
- * instead of creating new ones each time. Because of
- * multithreading, we may need an arbitrary number (more than two).
- * We might also have a byte arrays that grow as needed,
- * so we don't need to allocate those either.
- */
- jdbt1 = create_default_object(jnienv, name_DBT);
- jdbt2 = create_default_object(jnienv, name_DBT);
- dbtji1 = get_DBT_JAVAINFO(jnienv, jdbt1);
- memcpy(&dbtji1->dbt, dbt1, sizeof(DBT));
- dbtji1->create_array_ = 1;
- dbtji2 = get_DBT_JAVAINFO(jnienv, jdbt2);
- memcpy(&dbtji2->dbt, dbt2, sizeof(DBT));
- dbtji2->create_array_ = 1;
-
- DB_ASSERT(dbji->bt_compare_method_id_ != NULL);
- return (*jnienv)->CallIntMethod(jnienv, dbji->bt_compare_,
- dbji->bt_compare_method_id_,
- jdb, jdbt1, jdbt2);
-}
-
-void dbji_set_bt_prefix_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jprefix)
-{
- jclass bt_prefix_class;
-
- if (dbji->bt_prefix_method_id_ == NULL) {
- bt_prefix_class = get_class(jnienv, name_DbBtreePrefix);
- dbji->bt_prefix_method_id_ =
- (*jnienv)->GetMethodID(jnienv, bt_prefix_class,
- "bt_prefix",
- "(Lcom/sleepycat/db/Db;"
- "Lcom/sleepycat/db/Dbt;"
- "Lcom/sleepycat/db/Dbt;)I");
- if (dbji->bt_prefix_method_id_ == NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->bt_prefix_ != NULL) {
- DELETE_GLOBAL_REF(jnienv, dbji->bt_prefix_);
- }
- if (jprefix == NULL) {
- db->set_bt_prefix(db, NULL);
- }
- else {
- db->set_bt_prefix(db, Db_bt_prefix_callback);
- }
-
- dbji->bt_prefix_ = NEW_GLOBAL_REF(jnienv, jprefix);
-}
-
-size_t dbji_call_bt_prefix(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2)
-{
- JNIEnv *jnienv;
- jobject jdbt1, jdbt2;
- DBT_JAVAINFO *dbtji1, *dbtji2;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- /* XXX
- * We should have a pool of Dbt objects used for this purpose
- * instead of creating new ones each time. Because of
- * multithreading, we may need an arbitrary number (more than two).
- * We might also have a byte arrays that grow as needed,
- * so we don't need to allocate those either.
- */
- jdbt1 = create_default_object(jnienv, name_DBT);
- jdbt2 = create_default_object(jnienv, name_DBT);
- dbtji1 = get_DBT_JAVAINFO(jnienv, jdbt1);
- memcpy(&dbtji1->dbt, dbt1, sizeof(DBT));
- dbtji1->create_array_ = 1;
- dbtji2 = get_DBT_JAVAINFO(jnienv, jdbt2);
- memcpy(&dbtji2->dbt, dbt2, sizeof(DBT));
- dbtji2->create_array_ = 1;
-
- DB_ASSERT(dbji->bt_prefix_method_id_ != NULL);
- return (size_t)(*jnienv)->CallIntMethod(jnienv, dbji->bt_prefix_,
- dbji->bt_prefix_method_id_,
- jdb, jdbt1, jdbt2);
-}
-
-void dbji_set_dup_compare_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jcompare)
-{
- jclass dup_compare_class;
-
- if (dbji->dup_compare_method_id_ == NULL) {
- dup_compare_class = get_class(jnienv, name_DbDupCompare);
- dbji->dup_compare_method_id_ =
- (*jnienv)->GetMethodID(jnienv, dup_compare_class,
- "dup_compare",
- "(Lcom/sleepycat/db/Db;"
- "Lcom/sleepycat/db/Dbt;"
- "Lcom/sleepycat/db/Dbt;)I");
- if (dbji->dup_compare_method_id_ == NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->dup_compare_ != NULL)
- DELETE_GLOBAL_REF(jnienv, dbji->dup_compare_);
-
- if (jcompare == NULL)
- db->set_dup_compare(db, NULL);
- else
- db->set_dup_compare(db, Db_dup_compare_callback);
-
- dbji->dup_compare_ = NEW_GLOBAL_REF(jnienv, jcompare);
-}
-
-int dbji_call_dup_compare(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2)
-{
- JNIEnv *jnienv;
- jobject jdbt1, jdbt2;
- DBT_JAVAINFO *dbtji1, *dbtji2;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- /* XXX
- * We should have a pool of Dbt objects used for this purpose
- * instead of creating new ones each time. Because of
- * multithreading, we may need an arbitrary number (more than two).
- * We might also have a byte arrays that grow as needed,
- * so we don't need to allocate those either.
- */
- jdbt1 = create_default_object(jnienv, name_DBT);
- jdbt2 = create_default_object(jnienv, name_DBT);
- dbtji1 = get_DBT_JAVAINFO(jnienv, jdbt1);
- memcpy(&dbtji1->dbt, dbt1, sizeof(DBT));
- dbtji1->create_array_ = 1;
- dbtji2 = get_DBT_JAVAINFO(jnienv, jdbt2);
- memcpy(&dbtji2->dbt, dbt2, sizeof(DBT));
- dbtji2->create_array_ = 1;
-
- DB_ASSERT(dbji->dup_compare_method_id_ != NULL);
- return (*jnienv)->CallIntMethod(jnienv, dbji->dup_compare_,
- dbji->dup_compare_method_id_,
- jdb, jdbt1, jdbt2);
-}
-
-void dbji_set_h_hash_object(DB_JAVAINFO *dbji, JNIEnv *jnienv,
- DB *db, jobject jhash)
-{
- jclass h_hash_class;
-
- if (dbji->h_hash_method_id_ == NULL) {
- h_hash_class = get_class(jnienv, name_DbHash);
- dbji->h_hash_method_id_ =
- (*jnienv)->GetMethodID(jnienv, h_hash_class,
- "hash",
- "(Lcom/sleepycat/db/Db;"
- "[BI)I");
- if (dbji->h_hash_method_id_ == NULL) {
- /* XXX
- * We should really have a better way
- * to translate this to a Java exception class.
- * In theory, it shouldn't happen.
- */
- report_exception(jnienv, "Cannot find callback method",
- EFAULT, 0);
- return;
- }
- }
-
- if (dbji->h_hash_ != NULL)
- DELETE_GLOBAL_REF(jnienv, dbji->h_hash_);
-
- if (jhash == NULL)
- db->set_h_hash(db, NULL);
- else
- db->set_h_hash(db, Db_h_hash_callback);
-
- dbji->h_hash_ = NEW_GLOBAL_REF(jnienv, jhash);
-}
-
-int dbji_call_h_hash(DB_JAVAINFO *dbji, DB *db, jobject jdb,
- const void *data, int len)
-{
- JNIEnv *jnienv;
- jbyteArray jarray;
-
- COMPQUIET(db, NULL);
- jnienv = dbji_get_jnienv(dbji);
- if (jnienv == NULL) {
- fprintf(stderr, "Cannot attach to current thread!\n");
- return (0);
- }
-
- DB_ASSERT(dbji->h_hash_method_id_ != NULL);
-
- jarray = (*jnienv)->NewByteArray(jnienv, len);
- (*jnienv)->SetByteArrayRegion(jnienv, jarray, 0, len, (void *)data);
- return (*jnienv)->CallIntMethod(jnienv, dbji->h_hash_,
- dbji->h_hash_method_id_,
- jdb, jarray, len);
-}
diff --git a/db/libdb_java/java_info.h b/db/libdb_java/java_info.h
deleted file mode 100644
index 69032be80..000000000
--- a/db/libdb_java/java_info.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: java_info.h,v 11.17 2000/07/31 20:28:30 dda Exp $
- */
-
-#ifndef _JAVA_INFO_H_
-#define _JAVA_INFO_H_
-
-/*
- * "Info" classes for Java implementation of Berkeley DB API.
- * These classes hold extra information for which there is
- * no room or counterpart in the base classes used in the C API.
- * In the case of a DBT, the DBT_javainfo class is stored in the
- * 'private' variable of the java Dbt, and the DBT_javainfo is subclassed
- * from a DBT. In the case of DB and DB_ENV, the appropriate
- * info objects are pointed to by the DB and DB_ENV objects.
- * This is convenient to implement callbacks.
- */
-
-/****************************************************************
- *
- * Declaration of class DBT_javainfo
- *
- * A DBT_javainfo is created whenever a Dbt (java) object is created,
- * and a pointer to it is stored in its private info storage.
- * It is subclassed from DBT, because we must retain some extra
- * information in it while it is in use. In particular, when
- * a java array is associated with it, we need to keep a Globally
- * Locked reference to it so it is not GC'd. This reference is
- * destroyed when the Dbt is GC'd.
- */
-typedef struct _dbt_javainfo
-{
- DBT dbt;
- DB *db_; /* associated DB */
- jobject dbtref_; /* the java Dbt object */
- jbyteArray array_;
- int offset_;
- int create_array_; /* flag to create the array as needed */
-}
-DBT_JAVAINFO; /* used with all 'dbtji' functions */
-
-extern DBT_JAVAINFO *dbjit_construct();
-extern void dbjit_release(DBT_JAVAINFO *dbjit, JNIEnv *jnienv);
-
-/****************************************************************
- *
- * Declaration of class DB_ENV_JAVAINFO
- *
- * A DB_ENV_JAVAINFO is allocated and stuffed into the cj_internal
- * and the db_errpfx for every DB_ENV created. It holds a
- * little extra info that is needed to support callbacks.
- *
- * There's a bit of trickery here, because we have built this
- * above a layer that has a C function callback that gets
- * invoked when an error occurs. One of the C callback's arguments
- * is the prefix from the DB_ENV, but since we stuffed a pointer
- * to our own DB_ENV_JAVAINFO into the prefix, we get that object as an
- * argument to the C callback. Thus, the C callback can have
- * access to much more than just the prefix, and it needs that
- * to call back into the Java enviroment.
- *
- * The DB_ENV_JAVAINFO object holds a copy of the Java Virtual Machine,
- * which is needed to attach to the current running thread
- * whenever we need to make a callback. (This is more reliable
- * than our previous approach, which was to save the thread
- * that created the DbEnv). It also has the Java callback object,
- * as well as a 'default' callback object that is used when the
- * caller sets the callback to null. It also has the original
- * error prefix, since we overwrote the one in the DB_ENV.
- * There are also fields that are unrelated to the handling
- * of callbacks, but are convenient to attach to a DB_ENV.
- *
- * Note: We assume that the Java layer is the only one
- * fiddling with the contents of db_errpfx, db_errcall, cj_internal
- * for a DB_ENV that was created via Java. Since the Java layer should
- * have the only pointer to such a DB_ENV, this should be true.
- */
-typedef struct _db_env_javainfo
-{
- JavaVM *javavm_;
- int is_dbopen_;
- char *errpfx_;
- jobject jdbref_; /* temporary reference */
- jobject jenvref_; /* temporary reference */
- jobject default_errcall_; /* global reference */
- jobject errcall_; /* global reference */
- jobject feedback_; /* global reference */
- jobject tx_recover_; /* global reference */
- jobject recovery_init_; /* global reference */
- unsigned char *conflict_;
-}
-DB_ENV_JAVAINFO; /* used with all 'dbjie' functions */
-
-/* create/initialize an object */
-extern DB_ENV_JAVAINFO *dbjie_construct(JNIEnv *jnienv,
- jobject default_errcall,
- int is_dbopen);
-
-/* release all objects held by this this one */
-extern void dbjie_dealloc(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
-
-/* free this object, releasing anything allocated on its behalf */
-extern void dbjie_destroy(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
-
-/* This gets the environment for the current thread */
-extern JNIEnv *dbjie_get_jnienv(DB_ENV_JAVAINFO *);
-
-extern void dbjie_set_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
- jstring errpfx);
-extern jstring dbjie_get_errpfx(DB_ENV_JAVAINFO *, JNIEnv *jnienv);
-extern void dbjie_set_errcall(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
- jobject new_errcall);
-extern void dbjie_set_conflict(DB_ENV_JAVAINFO *, unsigned char *v);
-extern void dbjie_set_feedback_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
- DB_ENV *dbenv, jobject value);
-extern void dbjie_call_feedback(DB_ENV_JAVAINFO *, DB_ENV *dbenv, jobject jenv,
- int opcode, int percent);
-extern void dbjie_set_recovery_init_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
- DB_ENV *dbenv, jobject value);
-extern int dbjie_call_recovery_init(DB_ENV_JAVAINFO *, DB_ENV *dbenv,
- jobject jenv);
-extern void dbjie_set_tx_recover_object(DB_ENV_JAVAINFO *, JNIEnv *jnienv,
- DB_ENV *dbenv, jobject value);
-extern int dbjie_call_tx_recover(DB_ENV_JAVAINFO *,
- DB_ENV *dbenv, jobject jenv,
- DBT *dbt, DB_LSN *lsn, int recops);
-extern jobject dbjie_get_errcall(DB_ENV_JAVAINFO *) ;
-extern int dbjie_is_dbopen(DB_ENV_JAVAINFO *);
-
-/****************************************************************
- *
- * Declaration of class DB_JAVAINFO
- *
- * A DB_JAVAINFO is allocated and stuffed into the cj_internal field
- * for every DB created. It holds a little extra info that is needed
- * to support callbacks.
- *
- * Note: We assume that the Java layer is the only one
- * fiddling with the contents of cj_internal
- * for a DB that was created via Java. Since the Java layer should
- * have the only pointer to such a DB, this should be true.
- */
-typedef struct _db_javainfo
-{
- JavaVM *javavm_;
- jobject jdbref_; /* temporary reference during callback */
- jobject feedback_; /* global reference */
- jobject append_recno_; /* global reference */
- jobject bt_compare_; /* global reference */
- jobject bt_prefix_; /* global reference */
- jobject dup_compare_; /* global reference */
- jobject h_hash_; /* global reference */
- jmethodID feedback_method_id_;
- jmethodID append_recno_method_id_;
- jmethodID bt_compare_method_id_;
- jmethodID bt_prefix_method_id_;
- jmethodID dup_compare_method_id_;
- jmethodID h_hash_method_id_;
- jint construct_flags_;
-} DB_JAVAINFO;
-
-/* create/initialize an object */
-extern DB_JAVAINFO *dbji_construct(JNIEnv *jnienv, jint flags);
-
-/* release all objects held by this this one */
-extern void dbji_dealloc(DB_JAVAINFO *, JNIEnv *jnienv);
-
-/* free this object, releasing anything allocated on its behalf */
-extern void dbji_destroy(DB_JAVAINFO *, JNIEnv *jnienv);
-
-/* This gets the environment for the current thread */
-extern JNIEnv *dbji_get_jnienv();
-extern jint dbji_get_flags();
-
-extern void dbji_set_feedback_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern void dbji_call_feedback(DB_JAVAINFO *, DB *db, jobject jdb,
- int opcode, int percent);
-
-extern void dbji_set_append_recno_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern int dbji_call_append_recno(DB_JAVAINFO *, DB *db, jobject jdb,
- DBT *dbt, jint recno);
-extern void dbji_set_bt_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern int dbji_call_bt_compare(DB_JAVAINFO *, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2);
-extern void dbji_set_bt_prefix_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern size_t dbji_call_bt_prefix(DB_JAVAINFO *, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2);
-extern void dbji_set_dup_compare_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern int dbji_call_dup_compare(DB_JAVAINFO *, DB *db, jobject jdb,
- const DBT *dbt1, const DBT *dbt2);
-extern void dbji_set_h_hash_object(DB_JAVAINFO *, JNIEnv *jnienv, DB *db, jobject value);
-extern int dbji_call_h_hash(DB_JAVAINFO *, DB *db, jobject jdb,
- const void *data, int len);
-
-#endif /* !_JAVA_INFO_H_ */
diff --git a/db/libdb_java/java_locked.c b/db/libdb_java/java_locked.c
deleted file mode 100644
index a5603df5d..000000000
--- a/db/libdb_java/java_locked.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_locked.c,v 11.11 2000/10/25 19:54:55 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "java_util.h"
-
-/****************************************************************
- *
- * Implementation of class LockedDBT
- *
- */
-int
-jdbt_lock(JDBT *jdbt, JNIEnv *jnienv, jobject obj, OpKind kind)
-{
- DBT *dbt;
-
- jdbt->obj_ = obj;
- jdbt->do_realloc_ = 0;
- jdbt->kind_ = kind;
- jdbt->java_array_len_= 0;
- jdbt->java_data_ = 0;
- jdbt->before_data_ = 0;
- jdbt->has_error_ = 0;
- jdbt->dbt = (DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj);
-
- if (!verify_non_null(jnienv, jdbt->dbt)) {
- jdbt->has_error_ = 1;
- return (EINVAL);
- }
- dbt = &jdbt->dbt->dbt;
-
- if (kind == outOp &&
- (dbt->flags & (DB_DBT_USERMEM | DB_DBT_MALLOC | DB_DBT_REALLOC)) == 0) {
- report_exception(jnienv,
- "Dbt.flags must be set to Db.DB_DBT_USERMEM, "
- "Db.DB_DBT_MALLOC or Db.DB_DBT_REALLOC",
- 0, 0);
- jdbt->has_error_ = 1;
- return (EINVAL);
- }
-
- /* If this is requested to be realloc, we cannot use the
- * underlying realloc, because the array we will pass in
- * is not allocated by us, but the Java VM, so it cannot
- * be successfully realloced. We simulate the reallocation,
- * by using USERMEM and reallocating the java array when a
- * ENOMEM error occurs. We change the flags during the operation,
- * and they are reset when the operation completes (in the
- * LockedDBT destructor.
- */
- if ((dbt->flags & DB_DBT_REALLOC) != 0) {
- dbt->flags &= ~DB_DBT_REALLOC;
- dbt->flags |= DB_DBT_USERMEM;
- jdbt->do_realloc_ = 1;
- }
-
- if ((dbt->flags & DB_DBT_USERMEM) || kind != outOp) {
-
- /* If writing with DB_DBT_USERMEM/REALLOC
- * or it's a set (or get/set) operation,
- * then the data should point to a java array.
- * Note that outOp means data is coming out of the database
- * (it's a get). inOp means data is going into the database
- * (either a put, or a key input).
- */
- if (!jdbt->dbt->array_) {
- report_exception(jnienv, "Dbt.data is null", 0, 0);
- jdbt->has_error_ = 1;
- return (EINVAL);
- }
-
- /* Verify other parameters */
- jdbt->java_array_len_ = (*jnienv)->GetArrayLength(jnienv, jdbt->dbt->array_);
- if (jdbt->dbt->offset_ < 0 ) {
- report_exception(jnienv, "Dbt.offset illegal", 0, 0);
- jdbt->has_error_ = 1;
- return (EINVAL);
- }
- if (dbt->ulen + jdbt->dbt->offset_ > jdbt->java_array_len_) {
- report_exception(jnienv,
- "Dbt.ulen + Dbt.offset greater than array length", 0, 0);
- jdbt->has_error_ = 1;
- return (EINVAL);
- }
-
- jdbt->java_data_ = (*jnienv)->GetByteArrayElements(jnienv, jdbt->dbt->array_,
- (jboolean *)0);
- dbt->data = jdbt->before_data_ = jdbt->java_data_ + jdbt->dbt->offset_;
- }
- else {
-
- /* If writing with DB_DBT_MALLOC, then the data is
- * allocated by DB.
- */
- dbt->data = jdbt->before_data_ = 0;
- }
- return (0);
-}
-
-/* The LockedDBT destructor is called when the java handler returns
- * to the user, since that's when the LockedDBT objects go out of scope.
- * Since it is thus called after any call to the underlying database,
- * it copies any information from temporary structures back to user
- * accessible arrays, and of course must free memory and remove references.
- */
-void
-jdbt_unlock(JDBT *jdbt, JNIEnv *jnienv)
-{
- DBT *dbt;
-
- dbt = &jdbt->dbt->dbt;
-
- /* Fix up the flags if we changed them. */
- if (jdbt->do_realloc_) {
- dbt->flags &= ~DB_DBT_USERMEM;
- dbt->flags |= DB_DBT_REALLOC;
- }
-
- if ((dbt->flags & (DB_DBT_USERMEM | DB_DBT_REALLOC)) ||
- jdbt->kind_ == inOp) {
-
- /* If writing with DB_DBT_USERMEM/REALLOC or it's a set
- * (or get/set) operation, then the data may be already in
- * the java array, in which case, we just need to release it.
- * If DB didn't put it in the array (indicated by the
- * dbt->data changing), we need to do that
- */
- if (jdbt->before_data_ != jdbt->java_data_) {
- (*jnienv)->SetByteArrayRegion(jnienv,
- jdbt->dbt->array_,
- jdbt->dbt->offset_,
- dbt->ulen,
- jdbt->before_data_);
- }
- (*jnienv)->ReleaseByteArrayElements(jnienv, jdbt->dbt->array_, jdbt->java_data_, 0);
- dbt->data = 0;
- }
- if ((dbt->flags & DB_DBT_MALLOC) && jdbt->kind_ != inOp) {
-
- /* If writing with DB_DBT_MALLOC, then the data was allocated
- * by DB. If dbt->data is zero, it means an error occurred
- * (and should have been already reported).
- */
- if (dbt->data) {
-
- /* Release any old references. */
- dbjit_release(jdbt->dbt, jnienv);
-
- /* In the case of SET_RANGE, the key is inOutOp
- * and when not found, its data will be left as
- * its original value. Only copy and free it
- * here if it has been allocated by DB
- * (dbt->data has changed).
- */
- if (dbt->data != jdbt->before_data_) {
- jdbt->dbt->array_ = (jbyteArray)
- NEW_GLOBAL_REF(jnienv,
- (*jnienv)->NewByteArray(jnienv,
- dbt->size));
- jdbt->dbt->offset_ = 0;
- (*jnienv)->SetByteArrayRegion(jnienv,
- jdbt->dbt->array_, 0, dbt->size,
- (jbyte *)dbt->data);
- free(dbt->data);
- dbt->data = 0;
- }
- }
- }
-}
-
-/* Realloc the java array to receive data if the DBT was marked
- * for realloc, and the last operation set the size field to an
- * amount greater than ulen.
- */
-int jdbt_realloc(JDBT *jdbt, JNIEnv *jnienv)
-{
- DBT *dbt;
-
- dbt = &jdbt->dbt->dbt;
-
- if (!jdbt->do_realloc_ || jdbt->has_error_ || dbt->size <= dbt->ulen)
- return (0);
-
- (*jnienv)->ReleaseByteArrayElements(jnienv, jdbt->dbt->array_, jdbt->java_data_, 0);
- dbjit_release(jdbt->dbt, jnienv);
-
- /* We allocate a new array of the needed size.
- * We'll set the offset to 0, as the old offset
- * really doesn't make any sense.
- */
- jdbt->java_array_len_ = dbt->ulen = dbt->size;
- jdbt->dbt->offset_ = 0;
- jdbt->dbt->array_ = (jbyteArray)
- NEW_GLOBAL_REF(jnienv, (*jnienv)->NewByteArray(jnienv, dbt->size));
-
- jdbt->java_data_ = (*jnienv)->GetByteArrayElements(jnienv,
- jdbt->dbt->array_,
- (jboolean *)0);
- dbt->data = jdbt->before_data_ = jdbt->java_data_;
- return (1);
-}
-
-/****************************************************************
- *
- * Implementation of class JSTR
- *
- */
-int
-jstr_lock(JSTR *js, JNIEnv *jnienv, jstring jstr)
-{
- js->jstr_ = jstr;
-
- if (jstr == 0)
- js->string = 0;
- else
- js->string = (*jnienv)->GetStringUTFChars(jnienv, jstr,
- (jboolean *)0);
- return (0);
-}
-
-void jstr_unlock(JSTR *js, JNIEnv *jnienv)
-{
- if (js->jstr_)
- (*jnienv)->ReleaseStringUTFChars(jnienv, js->jstr_, js->string);
-}
-
-/****************************************************************
- *
- * Implementation of class JSTRARRAY
- *
- */
-int
-jstrarray_lock(JSTRARRAY *jsa, JNIEnv *jnienv, jobjectArray arr)
-{
- int i;
-
- jsa->arr_ = arr;
- jsa->array = 0;
-
- if (arr != 0) {
- int count = (*jnienv)->GetArrayLength(jnienv, arr);
- const char **new_array =
- (const char **)malloc((sizeof(const char *))*(count+1));
- for (i=0; i<count; i++) {
- jstring jstr = (jstring)(*jnienv)->GetObjectArrayElement(jnienv, arr, i);
- if (jstr == 0) {
- /*
- * An embedded null in the string array
- * is treated as an endpoint.
- */
- new_array[i] = 0;
- break;
- }
- else {
- new_array[i] =
- (*jnienv)->GetStringUTFChars(jnienv, jstr, (jboolean *)0);
- }
- }
- new_array[count] = 0;
- jsa->array = new_array;
- }
- return (0);
-}
-
-void jstrarray_unlock(JSTRARRAY *jsa, JNIEnv *jnienv)
-{
- int i;
- jstring jstr;
-
- if (jsa->arr_) {
- int count = (*jnienv)->GetArrayLength(jnienv, jsa->arr_);
- for (i=0; i<count; i++) {
- if (jsa->array[i] == 0)
- break;
- jstr = (jstring)(*jnienv)->GetObjectArrayElement(jnienv, jsa->arr_, i);
- (*jnienv)->ReleaseStringUTFChars(jnienv, jstr, jsa->array[i]);
- }
- free((void*)jsa->array);
- }
-}
diff --git a/db/libdb_java/java_locked.h b/db/libdb_java/java_locked.h
deleted file mode 100644
index 9b88cdd06..000000000
--- a/db/libdb_java/java_locked.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: java_locked.h,v 11.9 2000/10/25 19:54:55 dda Exp $
- */
-
-#ifndef _JAVA_LOCKED_H_
-#define _JAVA_LOCKED_H_
-
-/*
- * Used internally by LockedDBT constructor.
- */
-typedef enum _OpKind {
- inOp, /* setting data in database (passing data in) */
- outOp, /* getting data from database to user memory */
- inOutOp /* both getting/setting data */
-} OpKind;
-
-/*
- *
- * Declaration of JDBT
- *
- * A JDBT object exists during a
- * single native call to the DB API. Its constructor's job is
- * to temporarily convert any java array found in the DBT_JAVAINFO
- * to actual bytes in memory that remain locked in place. These
- * bytes are used during the call to the underlying DB C layer,
- * and are released and/or copied back by the destructor.
- * Thus, a LockedDBT must be declared as a stack object to
- * function properly.
- */
-typedef struct _jdbt
-{
- /* these are accessed externally to ldbt_ functions */
- DBT_JAVAINFO *dbt;
- unsigned int java_array_len_;
-
- /* these are for used internally by ldbt_ functions */
- jobject obj_;
- jbyte *java_data_;
- jbyte *before_data_;
- int has_error_;
- int do_realloc_;
- OpKind kind_;
-} JDBT;
-
-extern int jdbt_lock(JDBT *, JNIEnv *jnienv, jobject obj, OpKind kind);
-extern void jdbt_unlock(JDBT *, JNIEnv *jnienv); /* this unlocks and frees the memory */
-extern int jdbt_realloc(JDBT *, JNIEnv *jnienv); /* returns 1 if reallocation took place */
-
-/****************************************************************
- *
- * Declaration of JSTR
- *
- * A JSTR exists temporarily to convert a java jstring object
- * to a char *. Because the memory for the char * string is
- * managed by the JVM, it must be released when we are done
- * looking at it. Typically, jstr_lock() is called at the
- * beginning of a function for each jstring object, and jstr_unlock
- * is called at the end of each function for each JSTR.
- */
-typedef struct _jstr
-{
- /* this accessed externally to jstr_ functions */
- const char *string;
-
- /* this is used internally by jstr_ functions */
- jstring jstr_;
-} JSTR;
-
-extern int jstr_lock(JSTR *, JNIEnv *jnienv, jstring jstr);
-extern void jstr_unlock(JSTR *, JNIEnv *jnienv); /* this unlocks and frees mem */
-
-/****************************************************************
- *
- * Declaration of class LockedStrarray
- *
- * Given a java jobjectArray object (that must be a String[]),
- * we extract the individual strings and build a const char **
- * When the LockedStrarray object is destroyed, the individual
- * strings are released.
- */
-typedef struct _jstrarray
-{
- /* this accessed externally to jstrarray_ functions */
- const char **array;
-
- /* this is used internally by jstrarray_ functions */
- jobjectArray arr_;
-} JSTRARRAY;
-
-extern int jstrarray_lock(JSTRARRAY *, JNIEnv *jnienv, jobjectArray arr);
-extern void jstrarray_unlock(JSTRARRAY *, JNIEnv *jnienv); /* this unlocks and frees mem */
-
-#endif /* !_JAVA_LOCKED_H_ */
diff --git a/db/libdb_java/java_stat.i b/db/libdb_java/java_stat.i
new file mode 100644
index 000000000..74a80aa90
--- /dev/null
+++ b/db/libdb_java/java_stat.i
@@ -0,0 +1,165 @@
+// Statistics classes
+%{
+/*
+ * These macros are used by code generated by the s_java script.
+ */
+#define JAVADB_STAT_INT(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetIntField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "I"), \
+ (jint)statp->name)
+
+#define JAVADB_STAT_STRING(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, \
+ "Ljava/lang/String;"), \
+ (*jenv)->NewStringUTF(jenv, statp->name))
+
+#define JAVADB_STAT_LSN(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "L" DB_PKG "DbLsn;"), \
+ __dbj_wrap_DB_LSN(jenv, &statp->name))
+
+#define JAVADB_STAT_LONG(jenv, cl, jobj, statp, name) \
+ (*jenv)->SetLongField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "J"), \
+ (jlong)statp->name)
+
+#define JAVADB_STAT_XID(jenv, cl, jobj, statp, name) { \
+ jobject jarr = (*jenv)->NewByteArray(jenv, (jsize)DB_XIDDATASIZE); \
+ (*jenv)->SetByteArrayRegion(jenv, jarr, 0, (jsize)DB_XIDDATASIZE, \
+ (jbyte *)statp->name); \
+ (*jenv)->SetObjectField(jenv, jobj, \
+ (*jenv)->GetFieldID(jenv, cl, #name, "[B"), jarr); \
+ }
+
+/*
+ * We build the active list separately.
+ */
+#define JAVADB_STAT_ACTIVE(jenv, cl, jobj, statp, name) \
+ do {} while(0)
+
+#include "java_stat_auto.c"
+%}
+
+%define JAVA_STAT_CLASS(_ctype, _jtype, _name)
+JAVA_TYPEMAP(_ctype, _jtype, jobject)
+%typemap(out) _ctype %{
+ $result = (*jenv)->NewObject(jenv, _name##_class, _name##_construct);
+ if ($result != NULL)
+ __dbj_fill_##_name(jenv, _name##_class, $result, $1);
+ __os_ufree(NULL, $1);
+%}
+%enddef
+
+JAVA_STAT_CLASS(DB_LOCK_STAT *, DbLockStat, lock_stat)
+JAVA_STAT_CLASS(DB_LOG_STAT *, DbLogStat, log_stat)
+JAVA_STAT_CLASS(DB_MPOOL_STAT *, DbMpoolStat, mpool_stat)
+
+JAVA_TYPEMAP(DB_MPOOL_FSTAT **, DbMpoolFStat[], jobjectArray)
+%typemap(out) DB_MPOOL_FSTAT ** {
+ int i, len;
+
+ len = 0;
+ while ($1[len] != NULL)
+ len++;
+ $result = (*jenv)->NewObjectArray(jenv, (jsize)len, mpool_fstat_class, 0);
+ if ($result == NULL) {
+ __os_ufree(NULL, $1);
+ return $null;
+ }
+ for (i = 0; i < len; i++) {
+ jobject obj = (*jenv)->NewObject(jenv, mpool_fstat_class,
+ mpool_fstat_construct);
+ if (obj == NULL) {
+ __os_ufree(NULL, $1);
+ return $null; /* an exception is pending */
+ }
+ (*jenv)->SetObjectArrayElement(jenv, $result, i, obj);
+ __dbj_fill_mpool_fstat(jenv, mpool_fstat_class, obj, $1[i]);
+ }
+ __os_ufree(NULL, $1);
+}
+
+JAVA_STAT_CLASS(DB_REP_STAT *, DbRepStat, rep_stat)
+JAVA_TYPEMAP(DB_TXN_STAT *, DbTxnStat, jobject)
+%typemap(out) DB_TXN_STAT * {
+ unsigned int i;
+ jobjectArray actives;
+ $result = (*jenv)->NewObject(jenv, txn_stat_class, txn_stat_construct);
+ if ($result != NULL)
+ __dbj_fill_txn_stat(jenv, txn_stat_class, $result, $1);
+
+ actives = (*jenv)->NewObjectArray(jenv, (jsize)$1->st_nactive,
+ txn_active_class, 0);
+ if (actives == NULL) {
+ __os_ufree(NULL, $1);
+ return $null;
+ }
+ (*jenv)->SetObjectField(jenv, $result, txn_stat_active_fid, actives);
+ for (i = 0; i < $1->st_nactive; i++) {
+ jobject obj = (*jenv)->NewObject(jenv, txn_active_class,
+ txn_active_construct);
+ if (obj == NULL) {
+ __os_ufree(NULL, $1);
+ return $null; /* an exception is pending */
+ }
+ (*jenv)->SetObjectArrayElement(jenv, actives, (jsize)i, obj);
+ __dbj_fill_txn_active(jenv, txn_active_class, obj,
+ &$1->st_txnarray[i]);
+ }
+ __os_ufree(NULL, $1);
+}
+
+// Db.stat return - special case
+%typemap(out) void * %{
+ if ($1 == NULL)
+ $result = NULL;
+ else {
+ DB *db = (DB *)arg1;
+ DBTYPE dbtype;
+ int err;
+
+ if ((err = db->get_type(db, &dbtype)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, DB2JDBENV);
+ return $null;
+ }
+
+ switch (dbtype) {
+ /* Btree and recno share the same stat structure */
+ case DB_BTREE:
+ case DB_RECNO:
+ $result = (*jenv)->NewObject(jenv, btree_stat_class,
+ btree_stat_construct);
+ if ($result != NULL)
+ __dbj_fill_bt_stat(jenv, btree_stat_class,
+ $result, (DB_BTREE_STAT *)$1);
+ break;
+
+ /* Hash stat structure */
+ case DB_HASH:
+ $result = (*jenv)->NewObject(jenv, hash_stat_class,
+ hash_stat_construct);
+ if ($result != NULL)
+ __dbj_fill_h_stat(jenv, hash_stat_class,
+ $result, (DB_HASH_STAT *)$1);
+ break;
+
+ case DB_QUEUE:
+ $result = (*jenv)->NewObject(jenv, queue_stat_class,
+ queue_stat_construct);
+ if ($result != NULL)
+ __dbj_fill_qam_stat(jenv, queue_stat_class,
+ $result, (DB_QUEUE_STAT *)$1);
+ break;
+
+ /* That's all the database types we're aware of! */
+ default:
+ __dbj_throw(jenv, EINVAL, "Db.stat only implemented for"
+ " BTREE, HASH, QUEUE and RECNO", NULL, DB2JDBENV);
+ break;
+ }
+
+ __os_ufree(db->dbenv, $1);
+ }
+%}
+
diff --git a/db/libdb_java/java_stat_auto.c b/db/libdb_java/java_stat_auto.c
index 8fa4eb418..9d505582e 100644
--- a/db/libdb_java/java_stat_auto.c
+++ b/db/libdb_java/java_stat_auto.c
@@ -1,6 +1,5 @@
-// DO NOT EDIT: automatically built by dist/s_java.
-#include "java_util.h"
-int __jv_fill_bt_stat(JNIEnv *jnienv, jclass cl,
+/* DO NOT EDIT: automatically built by dist/s_java_stat. */
+static int __dbj_fill_bt_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_bt_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, bt_magic);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, bt_version);
@@ -24,7 +23,7 @@ int __jv_fill_bt_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, bt_over_pgfree);
return (0);
}
-int __jv_fill_h_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_h_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_h_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, hash_magic);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, hash_version);
@@ -44,7 +43,7 @@ int __jv_fill_h_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, hash_dup_free);
return (0);
}
-int __jv_fill_lock_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_lock_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_lock_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_id);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_cur_maxid);
@@ -72,7 +71,7 @@ int __jv_fill_lock_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_regsize);
return (0);
}
-int __jv_fill_log_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_log_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_log_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_magic);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_version);
@@ -97,7 +96,19 @@ int __jv_fill_log_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_mincommitperflush);
return (0);
}
-int __jv_fill_mpool_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_mpool_fstat(JNIEnv *jnienv, jclass cl,
+ jobject jobj, struct __db_mpool_fstat *statp) {
+ JAVADB_STAT_STRING(jnienv, cl, jobj, statp, file_name);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_pagesize);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_map);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_cache_hit);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_cache_miss);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_page_create);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_page_in);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_page_out);
+ return (0);
+}
+static int __dbj_fill_mpool_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_mpool_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_gbytes);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_bytes);
@@ -131,7 +142,7 @@ int __jv_fill_mpool_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_alloc_max_pages);
return (0);
}
-int __jv_fill_qam_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_qam_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_qam_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, qs_magic);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, qs_version);
@@ -148,7 +159,7 @@ int __jv_fill_qam_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, qs_cur_recno);
return (0);
}
-int __jv_fill_rep_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_rep_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_rep_stat *statp) {
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_status);
JAVADB_STAT_LSN(jnienv, cl, jobj, statp, st_next_lsn);
@@ -157,6 +168,7 @@ int __jv_fill_rep_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_env_id);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_env_priority);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_gen);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_in_recovery);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_log_duplicated);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_log_queued);
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_log_queued_max);
@@ -187,7 +199,7 @@ int __jv_fill_rep_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_election_votes);
return (0);
}
-int __jv_fill_txn_stat(JNIEnv *jnienv, jclass cl,
+static int __dbj_fill_txn_stat(JNIEnv *jnienv, jclass cl,
jobject jobj, struct __db_txn_stat *statp) {
JAVADB_STAT_LSN(jnienv, cl, jobj, statp, st_last_ckp);
JAVADB_STAT_LONG(jnienv, cl, jobj, statp, st_time_ckp);
@@ -205,3 +217,12 @@ int __jv_fill_txn_stat(JNIEnv *jnienv, jclass cl,
JAVADB_STAT_INT(jnienv, cl, jobj, statp, st_regsize);
return (0);
}
+static int __dbj_fill_txn_active(JNIEnv *jnienv, jclass cl,
+ jobject jobj, struct __db_txn_active *statp) {
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, txnid);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, parentid);
+ JAVADB_STAT_LSN(jnienv, cl, jobj, statp, lsn);
+ JAVADB_STAT_INT(jnienv, cl, jobj, statp, xa_status);
+ JAVADB_STAT_XID(jnienv, cl, jobj, statp, xid);
+ return (0);
+}
diff --git a/db/libdb_java/java_stat_auto.h b/db/libdb_java/java_stat_auto.h
deleted file mode 100644
index a2a07711a..000000000
--- a/db/libdb_java/java_stat_auto.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// DO NOT EDIT: automatically built by dist/s_java.
-extern int __jv_fill_bt_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_bt_stat *statp);
-extern int __jv_fill_h_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_h_stat *statp);
-extern int __jv_fill_lock_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_lock_stat *statp);
-extern int __jv_fill_log_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_log_stat *statp);
-extern int __jv_fill_mpool_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_mpool_stat *statp);
-extern int __jv_fill_qam_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_qam_stat *statp);
-extern int __jv_fill_rep_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_rep_stat *statp);
-extern int __jv_fill_txn_stat(JNIEnv *jnienv, jclass cl, jobject jobj, struct __db_txn_stat *statp);
diff --git a/db/libdb_java/java_typemaps.i b/db/libdb_java/java_typemaps.i
new file mode 100644
index 000000000..62a70612b
--- /dev/null
+++ b/db/libdb_java/java_typemaps.i
@@ -0,0 +1,601 @@
+// Typemaps
+%define JAVA_TYPEMAP(_ctype, _jtype, _jnitype)
+%typemap(jstype) _ctype #_jtype
+%typemap(jtype) _ctype #_jtype
+%typemap(jni) _ctype #_jnitype
+%typemap(out) _ctype %{ $result = (_jnitype)$1; %}
+%typemap(javain) _ctype "$javainput"
+%typemap(javaout) _ctype { return $jnicall; }
+%enddef
+
+JAVA_TYPEMAP(u_int32_t, int, jint)
+JAVA_TYPEMAP(u_int32_t pagesize, long, jlong)
+JAVA_TYPEMAP(long, long, jlong)
+JAVA_TYPEMAP(db_timeout_t, long, jlong)
+JAVA_TYPEMAP(size_t, long, jlong)
+JAVA_TYPEMAP(db_ret_t, void, void)
+%typemap(javaout) db_ret_t { $jnicall; }
+%typemap(out) db_ret_t ""
+
+JAVA_TYPEMAP(int_bool, boolean, jboolean)
+%typemap(in) int_bool %{
+ $1 = ($input == JNI_TRUE);
+%}
+%typemap(out) int_bool %{
+ $result = ($1) ? JNI_TRUE : JNI_FALSE;
+%}
+
+// Dbt handling
+JAVA_TYPEMAP(DBT *, Dbt, jobject)
+
+%{
+typedef struct __dbt_locked {
+ DBT dbt;
+ jbyteArray jarr;
+ jbyte *orig_data;
+ jint offset;
+ u_int32_t orig_size;
+} DBT_LOCKED;
+
+static int __dbj_dbt_copyin(
+ JNIEnv *jenv, DBT_LOCKED *ldbt, jobject jdbt)
+{
+ DBT *dbt;
+ jsize array_len;
+
+ dbt = &ldbt->dbt;
+ ldbt->offset = (*jenv)->GetIntField(jenv, jdbt, dbt_offset_fid);
+ ldbt->jarr = (jbyteArray)(*jenv)->GetObjectField(jenv,
+ jdbt, dbt_data_fid);
+ if (ldbt->jarr == NULL) {
+ ldbt->orig_data = dbt->data = NULL;
+ array_len = 0;
+ } else {
+ ldbt->orig_data = (*jenv)->GetByteArrayElements(jenv,
+ ldbt->jarr, NULL);
+ array_len = (*jenv)->GetArrayLength(jenv, ldbt->jarr);
+ dbt->data = ldbt->orig_data + ldbt->offset;
+ }
+
+ dbt->size = (*jenv)->GetIntField(jenv, jdbt, dbt_size_fid);
+ ldbt->orig_size = dbt->size;
+ dbt->ulen = (*jenv)->GetIntField(jenv, jdbt, dbt_ulen_fid);
+ dbt->dlen = (*jenv)->GetIntField(jenv, jdbt, dbt_dlen_fid);
+ dbt->doff = (*jenv)->GetIntField(jenv, jdbt, dbt_doff_fid);
+ dbt->flags = (*jenv)->GetIntField(jenv, jdbt, dbt_flags_fid);
+
+ /*
+ * We don't support DB_DBT_REALLOC - map anything that's not USERMEM to
+ * MALLOC.
+ */
+ if (!F_ISSET(dbt, DB_DBT_USERMEM)) {
+ F_CLR(dbt, DB_DBT_REALLOC);
+ F_SET(dbt, DB_DBT_MALLOC);
+ }
+
+ /*
+ * Some code makes the assumption that if dbt->size is non-zero, there
+ * is data to copy from dbt->data. We may have set dbt->size to a
+ * non-zero integer above but decided not to point dbt->data at
+ * anything.
+ *
+ * Clean up the dbt fields so we don't run into trouble. (Note that
+ * doff, dlen, and flags all may contain meaningful values.)
+ */
+ if (dbt->data == NULL)
+ dbt->size = dbt->ulen = 0;
+
+ /* Verify other parameters */
+ if (ldbt->offset < 0)
+ return (__dbj_throw(jenv, EINVAL, "Dbt.offset illegal", NULL, NULL));
+ else if ((jsize)(dbt->size + ldbt->offset) > array_len)
+ return (__dbj_throw(jenv, EINVAL,
+ "Dbt.size + Dbt.offset greater than array length", NULL, NULL));
+ else if ((jint)dbt->doff < 0)
+ return (__dbj_throw(jenv, EINVAL, "Dbt.doff illegal", NULL, NULL));
+ else if ((jsize)dbt->ulen > array_len)
+ return (__dbj_throw(jenv, EINVAL,
+ "Dbt.ulen greater than array length", NULL, NULL));
+
+ return (0);
+}
+
+static void __dbj_dbt_copyout(
+ JNIEnv *jenv, const DBT *dbt, jbyteArray *jarr, jobject jdbt)
+{
+ jbyteArray newarr = (*jenv)->NewByteArray(jenv, (jsize)dbt->size);
+ if (newarr == NULL)
+ return; /* An exception is pending */
+ (*jenv)->SetByteArrayRegion(jenv, newarr, 0, (jsize)dbt->size,
+ (jbyte *)dbt->data);
+ (*jenv)->SetObjectField(jenv, jdbt, dbt_data_fid, newarr);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+ if (jarr != NULL)
+ *jarr = newarr;
+ else
+ (*jenv)->DeleteLocalRef(jenv, newarr);
+}
+
+static void __dbj_dbt_release(
+ JNIEnv *jenv, jobject jdbt, DBT *dbt, DBT_LOCKED *ldbt) {
+ jthrowable t;
+
+ if (ldbt->jarr != NULL) {
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt->jarr,
+ ldbt->orig_data, 0);
+ }
+
+ if (dbt->size != ldbt->orig_size)
+ (*jenv)->SetIntField(jenv, jdbt, dbt_size_fid, (jint)dbt->size);
+
+ if (F_ISSET(dbt, DB_DBT_USERMEM) &&
+ dbt->size > dbt->ulen &&
+ (t = (*jenv)->ExceptionOccurred(jenv)) != NULL &&
+ (*jenv)->IsInstanceOf(jenv, t, memex_class)) {
+ (*jenv)->CallNonvirtualVoidMethod(jenv, t, memex_class,
+ memex_update_method, jdbt);
+ /*
+ * We have to rethrow the exception because calling into Java
+ * clears it.
+ */
+ (*jenv)->Throw(jenv, t);
+ }
+ if (ldbt->dbt.data != ldbt->orig_data + ldbt->offset) {
+ __dbj_dbt_copyout(jenv, &ldbt->dbt, NULL, jdbt);
+ (*jenv)->SetIntField(jenv, jdbt, dbt_offset_fid, 0);
+ __os_ufree(NULL, ldbt->dbt.data);
+ }
+}
+%}
+
+%typemap(in) DBT * (DBT_LOCKED ldbt) %{
+ if (__dbj_dbt_copyin(jenv, &ldbt, $input) != 0)
+ return $null;
+ $1 = &ldbt.dbt;
+%}
+
+%typemap(freearg) const DBT * %{
+ if (ldbt$argnum.jarr != NULL) {
+ (*jenv)->ReleaseByteArrayElements(jenv, ldbt$argnum.jarr,
+ ldbt$argnum.orig_data, 0);
+ }
+%}
+
+%typemap(freearg) DBT * %{
+ __dbj_dbt_release(jenv, $input, $1, &ldbt$argnum);
+%}
+
+// Various typemaps
+JAVA_TYPEMAP(time_t, long, jlong)
+JAVA_TYPEMAP(time_t *, long, jlong)
+%typemap(in) time_t * (time_t time) %{
+ time = (time_t)$input;
+ $1 = &time;
+%}
+
+JAVA_TYPEMAP(void *client, DbClient, jobject)
+%typemap(check) void *client %{
+ if ($1 != NULL) {
+ __dbj_throw(jenv, EINVAL, "DbEnv.set_rpc_server client arg "
+ "must be null; reserved for future use", NULL, JDBENV);
+ return $null;
+ }
+%}
+
+JAVA_TYPEMAP(DB_KEY_RANGE *, DbKeyRange, jobject)
+%typemap(in) DB_KEY_RANGE * (DB_KEY_RANGE range) {
+ $1 = &range;
+}
+%typemap(argout) DB_KEY_RANGE * {
+ (*jenv)->SetDoubleField(jenv, $input, kr_less_fid, $1->less);
+ (*jenv)->SetDoubleField(jenv, $input, kr_equal_fid, $1->equal);
+ (*jenv)->SetDoubleField(jenv, $input, kr_greater_fid, $1->greater);
+}
+
+JAVA_TYPEMAP(DBC **, Dbc[], jobjectArray)
+%typemap(in) DBC ** {
+ int i, count, err;
+
+ count = (*jenv)->GetArrayLength(jenv, $input);
+ if ((err = __os_malloc(NULL, (count + 1) * sizeof(DBC *), &$1)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, DB2JDBENV);
+ return $null;
+ }
+ for (i = 0; i < count; i++) {
+ jobject jobj = (*jenv)->GetObjectArrayElement(jenv, $input, i);
+ /*
+ * A null in the array is treated as an endpoint.
+ */
+ if (jobj == NULL) {
+ $1[i] = NULL;
+ break;
+ } else {
+ jlong jptr = (*jenv)->GetLongField(jenv, jobj,
+ dbc_cptr_fid);
+ $1[i] = *(DBC **)&jptr;
+ }
+ }
+ $1[count] = NULL;
+}
+
+%typemap(freearg) DBC ** %{
+ __os_free(NULL, $1);
+%}
+
+JAVA_TYPEMAP(u_int8_t *gid, byte[], jbyteArray)
+%typemap(check) u_int8_t *gid %{
+ if ((*jenv)->GetArrayLength(jenv, $input) < DB_XIDDATASIZE) {
+ __dbj_throw(jenv, EINVAL,
+ "DbTxn.prepare gid array must be >= 128 bytes", NULL, TXN2JDBENV);
+ return $null;
+ }
+%}
+
+%typemap(in) u_int8_t *gid %{
+ $1 = (u_int8_t *)(*jenv)->GetByteArrayElements(jenv, $input, NULL);
+%}
+
+%typemap(freearg) u_int8_t *gid %{
+ (*jenv)->ReleaseByteArrayElements(jenv, $input, (jbyte *)$1, 0);
+%}
+
+%define STRING_ARRAY_OUT
+ int i, len;
+
+ len = 0;
+ while ($1[len] != NULL)
+ len++;
+ if (($result = (*jenv)->NewObjectArray(jenv, (jsize)len, string_class,
+ NULL)) == NULL)
+ return $null; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jstring str = (*jenv)->NewStringUTF(jenv, $1[i]);
+ (*jenv)->SetObjectArrayElement(jenv, $result, (jsize)i, str);
+ }
+%enddef
+
+JAVA_TYPEMAP(char **, String[], jobjectArray)
+%typemap(out) const char ** {
+ if($1 != NULL) {
+ STRING_ARRAY_OUT
+ }
+}
+%typemap(out) char ** {
+ if($1 != NULL) {
+ STRING_ARRAY_OUT
+ __os_ufree(NULL, $1);
+ }
+}
+
+JAVA_TYPEMAP(struct __db_lk_conflicts, byte[][], jobjectArray)
+%typemap(in) struct __db_lk_conflicts {
+ int i, len, err;
+ size_t bytesize;
+
+ len = $1.lk_modes = (*jenv)->GetArrayLength(jenv, $input);
+ bytesize = sizeof(u_char) * len * len;
+
+ if ((err = __os_malloc(NULL, bytesize, &$1.lk_conflicts)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, JDBENV);
+ return $null;
+ }
+
+ for (i = 0; i < len; i++) {
+ jobject sub_array = (*jenv)->GetObjectArrayElement(jenv,
+ $input, i);
+ (*jenv)->GetByteArrayRegion(jenv,(jbyteArray)sub_array, 0, len,
+ (jbyte *)&$1.lk_conflicts[i * len]);
+ }
+}
+
+%typemap(freearg) struct __db_lk_conflicts %{
+ __os_free(NULL, $1.lk_conflicts);
+%}
+
+%typemap(out) struct __db_lk_conflicts {
+ int i;
+ jbyteArray bytes;
+
+ $result = (*jenv)->NewObjectArray(jenv,
+ (jsize)$1.lk_modes, bytearray_class, NULL);
+ if ($result == NULL)
+ return $null; /* an exception is pending */
+ for (i = 0; i < $1.lk_modes; i++) {
+ bytes = (*jenv)->NewByteArray(jenv, (jsize)$1.lk_modes);
+ if (bytes == NULL)
+ return $null; /* an exception is pending */
+ (*jenv)->SetByteArrayRegion(jenv, bytes, 0, (jsize)$1.lk_modes,
+ (jbyte *)($1.lk_conflicts + i * $1.lk_modes));
+ (*jenv)->SetObjectArrayElement(jenv, $result, (jsize)i, bytes);
+ }
+}
+
+%{
+struct __dbj_verify_data {
+ JNIEnv *jenv;
+ jobject streamobj;
+ jbyteArray bytes;
+ int nbytes;
+};
+
+static int __dbj_verify_callback(void *handle, const void *str_arg) {
+ char *str;
+ struct __dbj_verify_data *vd;
+ int len;
+ JNIEnv *jenv;
+
+ str = (char *)str_arg;
+ vd = (struct __dbj_verify_data *)handle;
+ jenv = vd->jenv;
+ len = strlen(str) + 1;
+ if (len > vd->nbytes) {
+ vd->nbytes = len;
+ if (vd->bytes != NULL)
+ (*jenv)->DeleteLocalRef(jenv, vd->bytes);
+ if ((vd->bytes = (*jenv)->NewByteArray(jenv, (jsize)len))
+ == NULL)
+ return (ENOMEM);
+ }
+
+ if (vd->bytes != NULL) {
+ (*jenv)->SetByteArrayRegion(jenv, vd->bytes, 0, (jsize)len,
+ (jbyte*)str);
+ (*jenv)->CallVoidMethod(jenv, vd->streamobj,
+ outputstream_write_method, vd->bytes, 0, len - 1);
+ }
+
+ if ((*jenv)->ExceptionOccurred(jenv) != NULL)
+ return (EIO);
+
+ return (0);
+}
+%}
+
+JAVA_TYPEMAP(struct __db_out_stream, java.io.OutputStream, jobject)
+%typemap(in) struct __db_out_stream (struct __dbj_verify_data data) {
+ data.jenv = jenv;
+ data.streamobj = $input;
+ data.bytes = NULL;
+ data.nbytes = 0;
+ $1.handle = &data;
+ $1.callback = __dbj_verify_callback;
+}
+
+JAVA_TYPEMAP(DB_PREPLIST *, DbPreplist[], jobjectArray)
+%typemap(out) DB_PREPLIST * {
+ int i, len;
+
+ len = 0;
+ while ($1[len].txn != NULL)
+ len++;
+ $result = (*jenv)->NewObjectArray(jenv, (jsize)len, dbpreplist_class,
+ NULL);
+ if ($result == NULL)
+ return $null; /* an exception is pending */
+ for (i = 0; i < len; i++) {
+ jobject jtxn = (*jenv)->NewObject(jenv, dbtxn_class,
+ dbtxn_construct, $1[i].txn, JNI_FALSE);
+ jobject bytearr = (*jenv)->NewByteArray(jenv,
+ (jsize)sizeof($1[i].gid));
+ jobject obj = (*jenv)->NewObject(jenv, dbpreplist_class,
+ dbpreplist_construct, jtxn, bytearr);
+
+ if (jtxn == NULL || bytearr == NULL || obj == NULL)
+ return $null; /* An exception is pending */
+
+ (*jenv)->SetByteArrayRegion(jenv, bytearr, 0,
+ (jsize)sizeof($1[i].gid), (jbyte *)$1[i].gid);
+ (*jenv)->SetObjectArrayElement(jenv, $result, i, obj);
+ }
+ __os_ufree(NULL, $1);
+}
+
+JAVA_TYPEMAP(DB_LOCKREQ *, DbLockRequest[], jobjectArray)
+
+%native(DbEnv_lock_vec) void DbEnv_lock_vec(DB_ENV *dbenv, u_int32_t locker,
+ u_int32_t flags, DB_LOCKREQ *list, int offset, int nlist);
+%{
+JNIEXPORT void JNICALL Java_com_sleepycat_db_db_1javaJNI_DbEnv_1lock_1vec
+ (JNIEnv *jenv, jclass jcls, jlong jdbenvp, jint locker,
+ jint flags, jobjectArray list, jint offset, jint count) {
+ DB_ENV *dbenv;
+ DB_LOCKREQ *lockreq;
+ DB_LOCKREQ *prereq; /* preprocessed requests */
+ DB_LOCKREQ *failedreq;
+ DB_LOCK *lockp;
+ DBT_LOCKED *locked_dbts;
+ int err, alloc_err, i;
+ size_t bytesize, ldbtsize;
+ jobject jlockreq;
+ db_lockop_t op;
+ jobject jobj, jlock, jdbenv;
+ jlong jlockp;
+ int completed;
+
+ COMPQUIET(jcls, NULL);
+ dbenv = *(DB_ENV **)&jdbenvp;
+ jdbenv = (jobject)DB_ENV_INTERNAL(dbenv);
+
+ if (dbenv == NULL) {
+ __dbj_throw(jenv, EINVAL, "null object", NULL, jdbenv);
+ return;
+ }
+
+ if ((*jenv)->GetArrayLength(jenv, list) < offset + count) {
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec array not large enough", NULL, jdbenv);
+ goto out0;
+ }
+
+ bytesize = sizeof(DB_LOCKREQ) * count;
+ if ((err = __os_malloc(dbenv, bytesize, &lockreq)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+ goto out0;
+ }
+ memset(lockreq, 0, bytesize);
+
+ ldbtsize = sizeof(DBT_LOCKED) * count;
+ if ((err = __os_malloc(dbenv, ldbtsize, &locked_dbts)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+ goto out1;
+ }
+ memset(locked_dbts, 0, ldbtsize);
+ prereq = &lockreq[0];
+
+ /* fill in the lockreq array */
+ for (i = 0, prereq = &lockreq[0]; i < count; i++, prereq++) {
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
+ offset + i);
+ if (jlockreq == NULL) {
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec list entry is null", NULL, jdbenv);
+ goto out2;
+ }
+ op = (*jenv)->GetIntField(jenv, jlockreq, lockreq_op_fid);
+ prereq->op = op;
+
+ switch (op) {
+ case DB_LOCK_GET_TIMEOUT:
+ /* Needed: mode, timeout, obj. Returned: lock. */
+ prereq->op = (*jenv)->GetIntField(jenv, jlockreq,
+ lockreq_timeout_fid);
+ /* FALLTHROUGH */
+ case DB_LOCK_GET:
+ /* Needed: mode, obj. Returned: lock. */
+ prereq->mode = (*jenv)->GetIntField(jenv, jlockreq,
+ lockreq_mode_fid);
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ if ((err =
+ __dbj_dbt_copyin(jenv, &locked_dbts[i], jobj)) != 0)
+ goto out2;
+ prereq->obj = &locked_dbts[i].dbt;
+ break;
+ case DB_LOCK_PUT:
+ /* Needed: lock. Ignored: mode, obj. */
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ if (jlock == NULL ||
+ (jlockp = (*jenv)->GetLongField(jenv, jlock,
+ lock_cptr_fid)) == 0L) {
+ __dbj_throw(jenv, EINVAL,
+ "DbLockRequest lock field is NULL", NULL, jdbenv);
+ goto out2;
+ }
+ lockp = *(DB_LOCK **)&jlockp;
+ prereq->lock = *lockp;
+ break;
+ case DB_LOCK_PUT_ALL:
+ case DB_LOCK_TIMEOUT:
+ /* Needed: (none). Ignored: lock, mode, obj. */
+ break;
+ case DB_LOCK_PUT_OBJ:
+ /* Needed: obj. Ignored: lock, mode. */
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ if ((err =
+ __dbj_dbt_copyin(jenv, &locked_dbts[i], jobj)) != 0)
+ goto out2;
+ prereq->obj = &locked_dbts[i].dbt;
+ break;
+ default:
+ __dbj_throw(jenv, EINVAL,
+ "DbEnv.lock_vec bad op value", NULL, jdbenv);
+ goto out2;
+ }
+ }
+
+ err = dbenv->lock_vec(dbenv, (u_int32_t)locker, (u_int32_t)flags,
+ lockreq, count, &failedreq);
+ if (err == 0)
+ completed = count;
+ else
+ completed = failedreq - lockreq;
+
+ /* do post processing for any and all requests that completed */
+ for (i = 0; i < completed; i++) {
+ op = lockreq[i].op;
+ if (op == DB_LOCK_PUT) {
+ /*
+ * After a successful put, the DbLock can no longer be
+ * used, so we release the storage related to it.
+ */
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv,
+ list, i + offset);
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ jlockp = (*jenv)->GetLongField(jenv, jlock,
+ lock_cptr_fid);
+ lockp = *(DB_LOCK **)&jlockp;
+ __os_free(NULL, lockp);
+ (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
+ (jlong)0);
+ }
+ else if (op == DB_LOCK_GET) {
+ /*
+ * Store the lock that was obtained. We need to create
+ * storage for it since the lockreq array only exists
+ * during this method call.
+ */
+ if ((alloc_err =
+ __os_malloc(dbenv, sizeof(DB_LOCK), &lockp)) != 0) {
+ __dbj_throw(jenv, alloc_err, NULL, NULL, jdbenv);
+ goto out2;
+ }
+
+ *lockp = lockreq[i].lock;
+ *(DB_LOCK **)&jlockp = lockp;
+
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv,
+ list, i + offset);
+ jlock = (*jenv)->NewObject(jenv, lock_class,
+ lock_construct, jlockp, JNI_TRUE);
+ if (jlock == NULL)
+ goto out2; /* An exception is pending */
+ (*jenv)->SetLongField(jenv, jlock, lock_cptr_fid,
+ jlockp);
+ (*jenv)->SetObjectField(jenv, jlockreq,
+ lockreq_lock_fid, jlock);
+ }
+ }
+
+ /* If one of the locks was not granted, build the exception now. */
+ if (err == DB_LOCK_NOTGRANTED && i < count) {
+ jlockreq = (*jenv)->GetObjectArrayElement(jenv, list,
+ i + offset);
+ jobj = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_obj_fid);
+ jlock = (*jenv)->GetObjectField(jenv, jlockreq,
+ lockreq_lock_fid);
+ (*jenv)->Throw(jenv,
+ (*jenv)->NewObject(jenv, lockex_class, lockex_construct,
+ (*jenv)->NewStringUTF(jenv, "DbEnv.lock_vec incomplete"),
+ lockreq[i].op, lockreq[i].mode, jobj, jlock, i, jdbenv));
+ } else if (err != 0)
+ __dbj_throw(jenv, err, NULL, NULL, jdbenv);
+
+out2: /* Free the dbts that we have locked */
+ for (i = 0 ; i < (prereq - lockreq); i++) {
+ if (((op = lockreq[i].op) == DB_LOCK_GET ||
+ op == DB_LOCK_PUT_OBJ) &&
+ locked_dbts[i].jarr != NULL)
+ (*jenv)->ReleaseByteArrayElements(jenv,
+ locked_dbts[i].jarr, locked_dbts[i].orig_data, 0);
+ }
+ __os_free(dbenv, locked_dbts);
+out1: __os_free(dbenv, lockreq);
+out0: return;
+}
+%}
+
+JAVA_TYPEMAP(int *envid, DbEnv.RepProcessMessage, jobject)
+%typemap(in) int *envid (int id) %{
+ id = (*jenv)->GetIntField(jenv, $input, rep_processmsg_envid);
+ $1 = &id;
+%}
+
+%typemap(argout) int *envid %{
+ (*jenv)->SetIntField(jenv, $input, rep_processmsg_envid, *$1);
+%}
+
+JAVA_TYPEMAP(void *, Object, jobject)
diff --git a/db/libdb_java/java_util.c b/db/libdb_java/java_util.c
deleted file mode 100644
index f42ceafbe..000000000
--- a/db/libdb_java/java_util.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: java_util.c,v 11.17 2000/10/28 13:09:39 dda Exp $";
-#endif /* not lint */
-
-#include <jni.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "db.h"
-#include "java_util.h"
-
-#ifdef DB_WIN32
-#define sys_errlist _sys_errlist
-#define sys_nerr _sys_nerr
-#endif
-
-const char * const name_DB = "Db";
-const char * const name_DB_BTREE_STAT = "DbBtreeStat";
-const char * const name_DBC = "Dbc";
-const char * const name_DB_DEADLOCK_EX = "DbDeadlockException";
-const char * const name_DB_ENV = "DbEnv";
-const char * const name_DB_EXCEPTION = "DbException";
-const char * const name_DB_HASH_STAT = "DbHashStat";
-const char * const name_DB_LOCK = "DbLock";
-const char * const name_DB_LOCK_STAT = "DbLockStat";
-const char * const name_DB_LOG_STAT = "DbLogStat";
-const char * const name_DB_LSN = "DbLsn";
-const char * const name_DB_MEMORY_EX = "DbMemoryException";
-const char * const name_DB_MPOOL_FSTAT = "DbMpoolFStat";
-const char * const name_DB_MPOOL_STAT = "DbMpoolStat";
-const char * const name_DB_QUEUE_STAT = "DbQueueStat";
-const char * const name_DB_RUNRECOVERY_EX = "DbRunRecoveryException";
-const char * const name_DBT = "Dbt";
-const char * const name_DB_TXN = "DbTxn";
-const char * const name_DB_TXN_STAT = "DbTxnStat";
-const char * const name_DB_TXN_STAT_ACTIVE = "DbTxnStat$Active";
-const char * const name_DbAppendRecno = "DbAppendRecno";
-const char * const name_DbBtreeCompare = "DbBtreeCompare";
-const char * const name_DbBtreePrefix = "DbBtreePrefix";
-const char * const name_DbDupCompare = "DbDupCompare";
-const char * const name_DbEnvFeedback = "DbEnvFeedback";
-const char * const name_DbErrcall = "DbErrcall";
-const char * const name_DbHash = "DbHash";
-const char * const name_DbFeedback = "DbFeedback";
-const char * const name_DbRecoveryInit = "DbRecoveryInit";
-const char * const name_DbTxnRecover = "DbTxnRecover";
-
-const char * const string_signature = "Ljava/lang/String;";
-
-/****************************************************************
- *
- * Utility functions used by "glue" functions.
- *
- */
-
-/* Get the private data from a Db* object that points back to a C DB_* object.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void *get_private_dbobj(JNIEnv *jnienv, const char *classname,
- jobject obj)
-{
- jclass dbClass;
- jfieldID id;
- long_to_ptr lp;
-
- if (!obj)
- return (0);
-
- dbClass = get_class(jnienv, classname);
- id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_dbobj_", "J");
- lp.java_long = (*jnienv)->GetLongField(jnienv, obj, id);
- return (lp.ptr);
-}
-
-/* Set the private data in a Db* object that points back to a C DB_* object.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void set_private_dbobj(JNIEnv *jnienv, const char *classname,
- jobject obj, void *value)
-{
- long_to_ptr lp;
- jclass dbClass;
- jfieldID id;
-
- lp.java_long = 0; /* no junk in case sizes mismatch */
- lp.ptr = value;
- dbClass = get_class(jnienv, classname);
- id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_dbobj_", "J");
- (*jnienv)->SetLongField(jnienv, obj, id, lp.java_long);
-}
-
-/* Get the private data in a Db/DbEnv object that holds additional 'side data'.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void *get_private_info(JNIEnv *jnienv, const char *classname,
- jobject obj)
-{
- jclass dbClass;
- jfieldID id;
- long_to_ptr lp;
-
- if (!obj)
- return (0);
-
- dbClass = get_class(jnienv, classname);
- id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_info_", "J");
- lp.java_long = (*jnienv)->GetLongField(jnienv, obj, id);
- return (lp.ptr);
-}
-
-/* Set the private data in a Db/DbEnv object that holds additional 'side data'.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void set_private_info(JNIEnv *jnienv, const char *classname,
- jobject obj, void *value)
-{
- long_to_ptr lp;
- jclass dbClass;
- jfieldID id;
-
- lp.java_long = 0; /* no junk in case sizes mismatch */
- lp.ptr = value;
- dbClass = get_class(jnienv, classname);
- id = (*jnienv)->GetFieldID(jnienv, dbClass, "private_info_", "J");
- (*jnienv)->SetLongField(jnienv, obj, id, lp.java_long);
-}
-
-/*
- * Given a non-qualified name (e.g. "foo"), get the class handle
- * for the fully qualified name (e.g. "com.sleepycat.db.foo")
- */
-jclass get_class(JNIEnv *jnienv, const char *classname)
-{
- /* Note: PERFORMANCE: It should be possible to cache jclass's.
- * If we do a NewGlobalRef on each one, we can keep them
- * around in a table. A jclass is a jobject, and
- * since NewGlobalRef returns a jobject, it isn't
- * technically right, but it would likely work with
- * most implementations. Possibly make it configurable.
- */
- char fullname[128] = DB_PACKAGE_NAME;
- strncat(fullname, classname, sizeof(fullname));
- return ((*jnienv)->FindClass(jnienv, fullname));
-}
-
-/* Set an individual field in a Db* object.
- * The field must be a DB object type.
- */
-void set_object_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *object_classname,
- const char *name_of_field, jobject obj)
-{
- char signature[512];
- jfieldID id;
-
- strncpy(signature, "L", sizeof(signature));
- strncat(signature, DB_PACKAGE_NAME, sizeof(signature));
- strncat(signature, object_classname, sizeof(signature));
- strncat(signature, ";", sizeof(signature));
-
- id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, signature);
- (*jnienv)->SetObjectField(jnienv, jthis, id, obj);
-}
-
-/* Set an individual field in a Db* object.
- * The field must be an integer type.
- */
-void set_int_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, jint value)
-{
- jfieldID id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, "I");
- (*jnienv)->SetIntField(jnienv, jthis, id, value);
-}
-
-/* Set an individual field in a Db* object.
- * The field must be an integer type.
- */
-void set_long_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, jlong value)
-{
- jfieldID id = (*jnienv)->GetFieldID(jnienv, class_of_this, name_of_field, "J");
- (*jnienv)->SetLongField(jnienv, jthis, id, value);
-}
-
-/* Set an individual field in a Db* object.
- * The field must be an integer type.
- */
-void set_lsn_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, DB_LSN value)
-{
- set_object_field(jnienv, class_of_this, jthis, name_DB_LSN,
- name_of_field, get_DbLsn(jnienv, value));
-}
-
-/* Report an exception back to the java side.
- */
-void report_exception(JNIEnv *jnienv, const char *text, int err,
- unsigned long expect_mask)
-{
- jstring textString;
- jclass dbexcept;
- jclass javaexcept;
- jmethodID constructId;
- jthrowable obj;
-
- textString = NULL;
- dbexcept = NULL;
- javaexcept = NULL;
- constructId = NULL;
- obj = NULL;
-
- switch (err) {
- /* DB_JAVA_CALLBACK is returned by dbji_call_append_recno()
- * (the append_recno callback) when the Java version of the
- * callback has thrown an exception, and we want to pass the
- * exception on. The exception has already been thrown, we
- * don't want to throw a new one.
- */
- case DB_JAVA_CALLBACK:
- break;
- case ENOMEM:
- dbexcept = get_class(jnienv, name_DB_MEMORY_EX);
- break;
- case ENOENT:
- /* In this case there is a corresponding standard java
- * exception type that we'll use. First we make sure
- * that the calling function expected this kind of error,
- * if not we give an 'internal error' DbException, since
- * we must not throw an exception type that isn't
- * declared in the signature.
- *
- * We'll make this a little more general if/when we add
- * more java standard exceptions.
- */
- if ((expect_mask & EXCEPTION_FILE_NOT_FOUND) == 0) {
- char errstr[1024];
-
- strncpy(errstr, "internal error: unexpected errno: ",
- sizeof(errstr));
- strncat(errstr, text, sizeof(errstr));
- textString = get_java_string(jnienv, errstr);
- dbexcept = get_class(jnienv, name_DB_EXCEPTION);
- }
- else {
- javaexcept =
- (*jnienv)->FindClass(jnienv, "java/io/FileNotFoundException");
- }
- break;
- case DB_RUNRECOVERY:
- dbexcept = get_class(jnienv, name_DB_RUNRECOVERY_EX);
- break;
- case DB_LOCK_DEADLOCK:
- dbexcept = get_class(jnienv, name_DB_DEADLOCK_EX);
- break;
- default:
- dbexcept = get_class(jnienv, name_DB_EXCEPTION);
- break;
- }
- if (dbexcept != NULL) {
- if (textString == NULL)
- textString = get_java_string(jnienv, text);
- constructId = (*jnienv)->GetMethodID(jnienv, dbexcept,
- "<init>",
- "(Ljava/lang/String;I)V");
- obj = (jthrowable)(*jnienv)->NewObject(jnienv, dbexcept,
- constructId, textString,
- err);
- (*jnienv)->Throw(jnienv, obj);
- }
- else if (javaexcept != NULL) {
- javaexcept =
- (*jnienv)->FindClass(jnienv, "java/io/FileNotFoundException");
- (*jnienv)->ThrowNew(jnienv, javaexcept, text);
- }
-}
-
-/* Report an error via the errcall mechanism.
- */
-void report_errcall(JNIEnv *jnienv, jobject errcall,
- jstring prefix, const char *message)
-{
- jmethodID id;
- jclass errcall_class;
- jstring msg;
-
- errcall_class = get_class(jnienv, name_DbErrcall);
- msg = get_java_string(jnienv, message);
-
- id = (*jnienv)->GetMethodID(jnienv, errcall_class,
- "errcall",
- "(Ljava/lang/String;Ljava/lang/String;)V");
- if (id == NULL) {
- fprintf(stderr, "Cannot get errcall methodID!\n");
- fprintf(stderr, "error: %s\n", message);
- return;
- }
-
- (*jnienv)->CallVoidMethod(jnienv, errcall, id, prefix, msg);
-}
-
-/* If the object is null, report an exception and return false (0),
- * otherwise return true (1).
- */
-int verify_non_null(JNIEnv *jnienv, void *obj)
-{
- if (obj == NULL) {
- report_exception(jnienv, "null object", EINVAL, 0);
- return (0);
- }
- return (1);
-}
-
-/* If the error code is non-zero, report an exception and return false (0),
- * otherwise return true (1).
- */
-int verify_return(JNIEnv *jnienv, int err, unsigned long expect_mask)
-{
- if (err == 0)
- return 1;
-
- report_exception(jnienv, db_strerror(err), err, expect_mask);
- return 0;
-}
-
-/* Create an object of the given class, calling its default constructor.
- */
-jobject create_default_object(JNIEnv *jnienv, const char *class_name)
-{
- jclass dbclass = get_class(jnienv, class_name);
- jmethodID id = (*jnienv)->GetMethodID(jnienv, dbclass, "<init>", "()V");
- jobject object = (*jnienv)->NewObject(jnienv, dbclass, id);
- return (object);
-}
-
-/* Convert an DB object to a Java encapsulation of that object.
- * Note: This implementation creates a new Java object on each call,
- * so it is generally useful when a new DB object has just been created.
- */
-jobject convert_object(JNIEnv *jnienv, const char *class_name, void *dbobj)
-{
- jobject jo;
-
- if (!dbobj)
- return (0);
-
- jo = create_default_object(jnienv, class_name);
- set_private_dbobj(jnienv, class_name, jo, dbobj);
- return (jo);
-}
-
-/* Create a copy of the string
- */
-char *dup_string(const char *str)
-{
- int len;
- char *retval;
-
- len = strlen(str) + 1;
- retval = (char *)malloc(sizeof(char)*len);
- strncpy(retval, str, len);
- return (retval);
-}
-
-/* Create a java string from the given string
- */
-jstring get_java_string(JNIEnv *jnienv, const char* string)
-{
- if (string == 0)
- return (0);
- return ((*jnienv)->NewStringUTF(jnienv, string));
-}
-
-/* Create a malloc'ed copy of the java string.
- * Caller must free it.
- */
-char *get_c_string(JNIEnv *jnienv, jstring jstr)
-{
- const jbyte *utf;
- char *retval;
-
- utf = (*jnienv)->GetStringUTFChars(jnienv, jstr, NULL);
- retval = dup_string((const char *)utf);
- (*jnienv)->ReleaseStringUTFChars(jnienv, jstr, utf);
- return retval;
-}
-
-/* Convert a java object to the various C pointers they represent.
- */
-DB *get_DB(JNIEnv *jnienv, jobject obj)
-{
- return ((DB *)get_private_dbobj(jnienv, name_DB, obj));
-}
-
-DB_BTREE_STAT *get_DB_BTREE_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_BTREE_STAT *)get_private_dbobj(jnienv, name_DB_BTREE_STAT, obj));
-}
-
-DBC *get_DBC(JNIEnv *jnienv, jobject obj)
-{
- return ((DBC *)get_private_dbobj(jnienv, name_DBC, obj));
-}
-
-DB_ENV *get_DB_ENV(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_ENV *)get_private_dbobj(jnienv, name_DB_ENV, obj));
-}
-
-DB_ENV_JAVAINFO *get_DB_ENV_JAVAINFO(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_ENV_JAVAINFO *)get_private_info(jnienv, name_DB_ENV, obj));
-}
-
-DB_HASH_STAT *get_DB_HASH_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_HASH_STAT *)get_private_dbobj(jnienv, name_DB_HASH_STAT, obj));
-}
-
-DB_JAVAINFO *get_DB_JAVAINFO(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_JAVAINFO *)get_private_info(jnienv, name_DB, obj));
-}
-
-DB_LOCK *get_DB_LOCK(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_LOCK *)get_private_dbobj(jnienv, name_DB_LOCK, obj));
-}
-
-DB_LOG_STAT *get_DB_LOG_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_LOG_STAT *)get_private_dbobj(jnienv, name_DB_LOG_STAT, obj));
-}
-
-DB_LSN *get_DB_LSN(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_LSN *)get_private_dbobj(jnienv, name_DB_LSN, obj));
-}
-
-DB_MPOOL_FSTAT *get_DB_MPOOL_FSTAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_MPOOL_FSTAT *)get_private_dbobj(jnienv, name_DB_MPOOL_FSTAT, obj));
-}
-
-DB_MPOOL_STAT *get_DB_MPOOL_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_MPOOL_STAT *)get_private_dbobj(jnienv, name_DB_MPOOL_STAT, obj));
-}
-
-DB_QUEUE_STAT *get_DB_QUEUE_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_QUEUE_STAT *)get_private_dbobj(jnienv, name_DB_QUEUE_STAT, obj));
-}
-
-DB_TXN *get_DB_TXN(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_TXN *)get_private_dbobj(jnienv, name_DB_TXN, obj));
-}
-
-DB_TXN_STAT *get_DB_TXN_STAT(JNIEnv *jnienv, jobject obj)
-{
- return ((DB_TXN_STAT *)get_private_dbobj(jnienv, name_DB_TXN_STAT, obj));
-}
-
-DBT *get_DBT(JNIEnv *jnienv, jobject obj)
-{
- DBT_JAVAINFO *ji;
-
- ji = (DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj);
- if (ji == NULL)
- return (NULL);
- else
- return (&ji->dbt);
-}
-
-DBT_JAVAINFO *get_DBT_JAVAINFO(JNIEnv *jnienv, jobject obj)
-{
- return ((DBT_JAVAINFO *)get_private_dbobj(jnienv, name_DBT, obj));
-}
-
-/* Convert a C pointer to the various Java objects they represent.
- */
-jobject get_DbBtreeStat(JNIEnv *jnienv, DB_BTREE_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_BTREE_STAT, dbobj));
-}
-
-jobject get_Dbc(JNIEnv *jnienv, DBC *dbobj)
-{
- return (convert_object(jnienv, name_DBC, dbobj));
-}
-
-jobject get_DbHashStat(JNIEnv *jnienv, DB_HASH_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_HASH_STAT, dbobj));
-}
-
-jobject get_DbLogStat(JNIEnv *jnienv, DB_LOG_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_LOG_STAT, dbobj));
-}
-
-/* LSNs are different since they are really normally
- * treated as by-value objects. We actually create
- * a pointer to the LSN and store that, deleting it
- * when the LSN is GC'd.
- */
-jobject get_DbLsn(JNIEnv *jnienv, DB_LSN dbobj)
-{
- DB_LSN *lsnp = (DB_LSN *)malloc(sizeof(DB_LSN));
- memset(lsnp, 0, sizeof(DB_LSN));
- *lsnp = dbobj;
- return (convert_object(jnienv, name_DB_LSN, lsnp));
-}
-
-jobject get_Dbt(JNIEnv *jnienv, DBT *dbt)
-{
- return (convert_object(jnienv, name_DBT, dbt));
-}
-
-jobject get_DbMpoolFStat(JNIEnv *jnienv, DB_MPOOL_FSTAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_MPOOL_FSTAT, dbobj));
-}
-
-jobject get_DbMpoolStat(JNIEnv *jnienv, DB_MPOOL_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_MPOOL_STAT, dbobj));
-}
-
-jobject get_DbQueueStat(JNIEnv *jnienv, DB_QUEUE_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_QUEUE_STAT, dbobj));
-}
-
-jobject get_DbTxn(JNIEnv *jnienv, DB_TXN *dbobj)
-{
- return (convert_object(jnienv, name_DB_TXN, dbobj));
-}
-
-jobject get_DbTxnStat(JNIEnv *jnienv, DB_TXN_STAT *dbobj)
-{
- return (convert_object(jnienv, name_DB_TXN_STAT, dbobj));
-}
diff --git a/db/libdb_java/java_util.h b/db/libdb_java/java_util.h
deleted file mode 100644
index eb47dc676..000000000
--- a/db/libdb_java/java_util.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997, 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- *
- * $Id: java_util.h,v 11.22 2001/01/11 18:19:53 bostic Exp $
- */
-
-#ifndef _JAVA_UTIL_H_
-#define _JAVA_UTIL_H_
-
-#ifdef _MSC_VER
-
-/* These are level 4 warnings that are explicitly disabled.
- * With Visual C++, by default you do not see above level 3 unless
- * you use /W4. But we like to compile with the highest level
- * warnings to catch other errors.
- *
- * 4201: nameless struct/union
- * triggered by standard include file <winnt.h>
- *
- * 4244: '=' : convert from '__int64' to 'unsigned int', possible loss of data
- * results from making size_t data members correspond to jlongs
- *
- * 4514: unreferenced inline function has been removed
- * jni.h defines methods that are not called
- *
- * 4127: conditional expression is constant
- * occurs because of arg in JAVADB_RW_ACCESS_STRING macro
- */
-#pragma warning(disable: 4244 4201 4514 4127)
-
-#endif
-
-#include "db_config.h"
-#include "db.h"
-#include "java_info.h"
-#include "java_locked.h"
-#include <jni.h>
-#include <string.h> /* needed for memset */
-
-#define DB_PACKAGE_NAME "com/sleepycat/db/"
-
-/* Union to convert longs to pointers (see {get,set}_private_dbobj).
- */
-typedef union {
- jlong java_long;
- void *ptr;
-} long_to_ptr;
-
-/****************************************************************
- *
- * Utility functions and definitions used by "glue" functions.
- *
- */
-
-#define NOT_IMPLEMENTED(str) \
- report_exception(jnienv, str /*concatenate*/ ": not implemented", 0)
-
-/* Get, delete a global reference.
- * Making this operation a function call allows for
- * easier tracking for debugging. Global references
- * are mostly grabbed at 'open' and 'close' points,
- * so there shouldn't be a big performance hit.
- *
- * Macro-izing this makes it easier to add debugging code
- * to track unreleased references.
- */
-#ifdef DBJAVA_DEBUG
-#include <unistd.h>
-static void wrdebug(const char *str)
-{
- write(2, str, strlen(str));
- write(2, "\n", 1);
-}
-
-static jobject debug_new_global_ref(JNIEnv *jnienv, jobject obj, const char *s)
-{
- wrdebug(s);
- return (*jnienv)->NewGlobalRef(jnienv, obj);
-}
-
-static void debug_delete_global_ref(JNIEnv *jnienv, jobject obj, const char *s)
-{
- wrdebug(s);
- (*jnienv)->DeleteGlobalRef(jnienv, obj);
-}
-
-#define NEW_GLOBAL_REF(jnienv, obj) \
- debug_new_global_ref(jnienv, obj, "+Ref: " #obj)
-#define DELETE_GLOBAL_REF(jnienv, obj) \
- debug_delete_global_ref(jnienv, obj, "-Ref: " #obj)
-#else
-#define NEW_GLOBAL_REF(jnienv, obj) (*jnienv)->NewGlobalRef(jnienv, obj)
-#define DELETE_GLOBAL_REF(jnienv, obj) (*jnienv)->DeleteGlobalRef(jnienv, obj)
-#define wrdebug(x)
-#endif
-
-/* Get the private data from a Db* object that points back to a C DB_* object.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void *get_private_dbobj(JNIEnv *jnienv, const char *classname,
- jobject obj);
-
-/* Set the private data in a Db* object that points back to a C DB_* object.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void set_private_dbobj(JNIEnv *jnienv, const char *classname,
- jobject obj, void *value);
-
-/* Get the private data in a Db/DbEnv object that holds additional 'side data'.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void *get_private_info(JNIEnv *jnienv, const char *classname,
- jobject obj);
-
-/* Set the private data in a Db/DbEnv object that holds additional 'side data'.
- * The private data is stored in the object as a Java long (64 bits),
- * which is long enough to store a pointer on current architectures.
- */
-void set_private_info(JNIEnv *jnienv, const char *classname,
- jobject obj, void *value);
-
-/*
- * Given a non-qualified name (e.g. "foo"), get the class handl
- * for the fully qualified name (e.g. "com.sleepycat.db.foo")
- */
-jclass get_class(JNIEnv *jnienv, const char *classname);
-
-/* Set an individual field in a Db* object.
- * The field must be a DB object type.
- */
-void set_object_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *object_classname,
- const char *name_of_field, jobject obj);
-
-/* Set an individual field in a Db* object.
- * The field must be an integer type.
- */
-void set_int_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, jint value);
-
-/* Set an individual field in a Db* object.
- * The field must be an integer type.
- */
-void set_long_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, jlong value);
-
-/* Set an individual field in a Db* object.
- * The field must be an DbLsn type.
- */
-void set_lsn_field(JNIEnv *jnienv, jclass class_of_this,
- jobject jthis, const char *name_of_field, DB_LSN value);
-
-/* Values of expect_mask
- */
-static const int EXCEPTION_FILE_NOT_FOUND = 0x0001;
-
-/* Report an exception back to the java side.
- */
-void report_exception(JNIEnv *jnienv, const char *text, int err,
- unsigned long expect_mask);
-
-/* Report an error via the errcall mechanism.
- */
-void report_errcall(JNIEnv *jnienv, jobject errcall,
- jstring prefix, const char *message);
-
-/* If the object is null, report an exception and return false (0),
- * otherwise return true (1).
- */
-int verify_non_null(JNIEnv *jnienv, void *obj);
-
-/* If the error code is non-zero, report an exception and return false (0),
- * otherwise return true (1).
- */
-int verify_return(JNIEnv *jnienv, int err, unsigned long expect_mask);
-
-/* Create an object of the given class, calling its default constructor.
- */
-jobject create_default_object(JNIEnv *jnienv, const char *class_name);
-
-/* Convert an DB object to a Java encapsulation of that object.
- * Note: This implementation creates a new Java object on each call,
- * so it is generally useful when a new DB object has just been created.
- */
-jobject convert_object(JNIEnv *jnienv, const char *class_name, void *dbobj);
-
-/* Create a copy of the string
- */
-char *dup_string(const char *str);
-
-/* Create a malloc'ed copy of the java string.
- * Caller must free it.
- */
-char *get_c_string(JNIEnv *jnienv, jstring jstr);
-
-/* Create a java string from the given string
- */
-jstring get_java_string(JNIEnv *jnienv, const char* string);
-
-/* Convert a java object to the various C pointers they represent.
- */
-DB *get_DB (JNIEnv *jnienv, jobject obj);
-DB_BTREE_STAT *get_DB_BTREE_STAT (JNIEnv *jnienv, jobject obj);
-DBC *get_DBC (JNIEnv *jnienv, jobject obj);
-DB_ENV *get_DB_ENV (JNIEnv *jnienv, jobject obj);
-DB_ENV_JAVAINFO *get_DB_ENV_JAVAINFO (JNIEnv *jnienv, jobject obj);
-DB_HASH_STAT *get_DB_HASH_STAT (JNIEnv *jnienv, jobject obj);
-DB_JAVAINFO *get_DB_JAVAINFO (JNIEnv *jnienv, jobject obj);
-DB_LOCK *get_DB_LOCK (JNIEnv *jnienv, jobject obj);
-DB_LOG_STAT *get_DB_LOG_STAT (JNIEnv *jnienv, jobject obj);
-DB_LSN *get_DB_LSN (JNIEnv *jnienv, jobject obj);
-DB_MPOOL_FSTAT *get_DB_MPOOL_FSTAT(JNIEnv *jnienv, jobject obj);
-DB_MPOOL_STAT *get_DB_MPOOL_STAT (JNIEnv *jnienv, jobject obj);
-DB_QUEUE_STAT *get_DB_QUEUE_STAT (JNIEnv *jnienv, jobject obj);
-DB_TXN *get_DB_TXN (JNIEnv *jnienv, jobject obj);
-DB_TXN_STAT *get_DB_TXN_STAT (JNIEnv *jnienv, jobject obj);
-DBT *get_DBT (JNIEnv *jnienv, jobject obj);
-DBT_JAVAINFO *get_DBT_JAVAINFO (JNIEnv *jnienv, jobject obj);
-
-/* From a C object, create a Java object.
- */
-jobject get_DbBtreeStat (JNIEnv *jnienv, DB_BTREE_STAT *dbobj);
-jobject get_Dbc (JNIEnv *jnienv, DBC *dbobj);
-jobject get_DbHashStat (JNIEnv *jnienv, DB_HASH_STAT *dbobj);
-jobject get_DbLogStat (JNIEnv *jnienv, DB_LOG_STAT *dbobj);
-jobject get_DbLsn (JNIEnv *jnienv, DB_LSN dbobj);
-jobject get_DbMpoolStat (JNIEnv *jnienv, DB_MPOOL_STAT *dbobj);
-jobject get_DbMpoolFStat (JNIEnv *jnienv, DB_MPOOL_FSTAT *dbobj);
-jobject get_DbQueueStat (JNIEnv *jnienv, DB_QUEUE_STAT *dbobj);
-jobject get_Dbt (JNIEnv *jnienv, DBT *dbt);
-jobject get_DbTxn (JNIEnv *jnienv, DB_TXN *dbobj);
-jobject get_DbTxnStat (JNIEnv *jnienv, DB_TXN_STAT *dbobj);
-
-/* The java names of DB classes */
-extern const char * const name_DB;
-extern const char * const name_DB_BTREE_STAT;
-extern const char * const name_DBC;
-extern const char * const name_DB_DEADLOCK_EX;
-extern const char * const name_DB_ENV;
-extern const char * const name_DB_EXCEPTION;
-extern const char * const name_DB_HASH_STAT;
-extern const char * const name_DB_LOCK;
-extern const char * const name_DB_LOCK_STAT;
-extern const char * const name_DB_LOG_STAT;
-extern const char * const name_DB_LSN;
-extern const char * const name_DB_MEMORY_EX;
-extern const char * const name_DB_MPOOL_FSTAT;
-extern const char * const name_DB_MPOOL_STAT;
-extern const char * const name_DB_QUEUE_STAT;
-extern const char * const name_DB_RUNRECOVERY_EX;
-extern const char * const name_DBT;
-extern const char * const name_DB_TXN;
-extern const char * const name_DB_TXN_STAT;
-extern const char * const name_DB_TXN_STAT_ACTIVE;
-extern const char * const name_DbAppendRecno;
-extern const char * const name_DbBtreeCompare;
-extern const char * const name_DbBtreePrefix;
-extern const char * const name_DbDupCompare;
-extern const char * const name_DbEnvFeedback;
-extern const char * const name_DbErrcall;
-extern const char * const name_DbFeedback;
-extern const char * const name_DbHash;
-extern const char * const name_DbRecoveryInit;
-extern const char * const name_DbTxnRecover;
-
-extern const char * const string_signature;
-
-#define JAVADB_RO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
-JNIEXPORT j_fieldtype JNICALL \
- Java_com_sleepycat_db_##j_class##_get_1##j_field \
- (JNIEnv *jnienv, jobject jthis) \
-{ \
- c_type *db_this = get_##c_type(jnienv, jthis); \
- \
- if (verify_non_null(jnienv, db_this)) { \
- return db_this->c_field; \
- } \
- return 0; \
-}
-
-#define JAVADB_WO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
-JNIEXPORT void JNICALL \
- Java_com_sleepycat_db_##j_class##_set_1##j_field \
- (JNIEnv *jnienv, jobject jthis, j_fieldtype value) \
-{ \
- c_type *db_this = get_##c_type(jnienv, jthis); \
- \
- if (verify_non_null(jnienv, db_this)) { \
- db_this->c_field = value; \
- } \
-}
-
-/* This is a variant of the JAVADB_WO_ACCESS macro to define a simple set_
- * method using a C "method" call. These should be used with set_
- * methods that cannot invoke java 'callbacks' (no set_ method currently
- * does that). That assumption allows us to optimize (and simplify)
- * by not calling API_BEGIN/END macros.
- */
-#define JAVADB_WO_ACCESS_METHOD(j_class, j_fieldtype, \
- j_field, c_type, c_field) \
-JNIEXPORT void JNICALL \
- Java_com_sleepycat_db_##j_class##_set_1##j_field \
- (JNIEnv *jnienv, jobject jthis, j_fieldtype value) \
-{ \
- c_type *db_this; \
- int err; \
- \
- db_this = get_##c_type(jnienv, jthis); \
- if (verify_non_null(jnienv, db_this)) { \
- err = db_this->set_##c_field(db_this, value); \
- verify_return(jnienv, err, 0); \
- } \
-}
-
-#define JAVADB_RW_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
- JAVADB_RO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field) \
- JAVADB_WO_ACCESS(j_class, j_fieldtype, j_field, c_type, c_field)
-
-#define JAVADB_WO_ACCESS_STRING(j_class, j_field, c_type, c_field) \
-JNIEXPORT void JNICALL \
- Java_com_sleepycat_db_##j_class##_set_1##j_field \
- (JNIEnv *jnienv, jobject jthis, jstring value) \
-{ \
- c_type *db_this; \
- int err; \
- \
- db_this = get_##c_type(jnienv, jthis); \
- if (verify_non_null(jnienv, db_this)) { \
- err = db_this->set_##c_field(db_this, \
- (*jnienv)->GetStringUTFChars(jnienv, value, NULL)); \
- verify_return(jnienv, err, 0); \
- } \
-}
-
-#define JAVADB_API_BEGIN(db, jthis) \
- if ((db) != NULL) \
- ((DB_JAVAINFO*)(db)->cj_internal)->jdbref_ = \
- ((DB_ENV_JAVAINFO*)((db)->dbenv->cj_internal))->jdbref_ = (jthis)
-
-#define JAVADB_API_END(db) \
- if ((db) != NULL) \
- ((DB_JAVAINFO*)(db)->cj_internal)->jdbref_ = \
- ((DB_ENV_JAVAINFO*)((db)->dbenv->cj_internal))->jdbref_ = 0
-
-#define JAVADB_ENV_API_BEGIN(dbenv, jthis) \
- if ((dbenv) != NULL) \
- ((DB_ENV_JAVAINFO*)((dbenv)->cj_internal))->jenvref_ = (jthis)
-
-#define JAVADB_ENV_API_END(dbenv) \
- if ((dbenv) != NULL) \
- ((DB_ENV_JAVAINFO*)((dbenv)->cj_internal))->jenvref_ = 0
-
-#endif /* !_JAVA_UTIL_H_ */
diff --git a/db/libdb_java/java_util.i b/db/libdb_java/java_util.i
new file mode 100644
index 000000000..c2555ae17
--- /dev/null
+++ b/db/libdb_java/java_util.i
@@ -0,0 +1,341 @@
+%pragma(java) jniclasscode=%{
+ static {
+ // An alternate library name can be specified via a property.
+ String libname;
+
+ if ((libname = System.getProperty("sleepycat.db.libfile"))
+ != null)
+ System.load(libname);
+ else if ((libname = System.getProperty("sleepycat.db.libname"))
+ != null)
+ System.loadLibrary(libname);
+ else {
+ String os = System.getProperty("os.name");
+ if (os != null && os.startsWith("Windows")) {
+ // library name is e.g., "libdb_java30.dll"
+ // on Windows
+ System.loadLibrary("libdb_java" +
+ DbConstants.DB_VERSION_MAJOR +
+ DbConstants.DB_VERSION_MINOR +
+ (DbConstants.DB_DEBUG ? "d" : ""));
+ } else {
+ // library name is e.g. "libdb_java-3.0.so"
+ // on UNIX
+ System.loadLibrary("db_java-" +
+ DbConstants.DB_VERSION_MAJOR + "." +
+ DbConstants.DB_VERSION_MINOR);
+ }
+ }
+
+ initialize();
+ }
+
+ static native final void initialize();
+%}
+
+%{
+/* don't use SWIG's array handling - save code space */
+#define SWIG_NOINCLUDE 1
+
+#define DB_ENV_INTERNAL(dbenv) ((dbenv)->api2_internal)
+#define DB_INTERNAL(db) ((db)->api_internal)
+
+#define DB_PKG "com/sleepycat/db/"
+
+/* Forward declarations */
+static int __dbj_throw(JNIEnv *jenv, int err, const char *msg, jobject obj, jobject jdbenv);
+
+/* Global data - JVM handle, classes, fields and methods */
+static JavaVM *javavm;
+
+static jclass db_class, dbc_class, dbenv_class, dbt_class, dblsn_class;
+static jclass dbpreplist_class, dbtxn_class;
+static jclass keyrange_class;
+static jclass btree_stat_class, hash_stat_class, lock_stat_class;
+static jclass log_stat_class, mpool_stat_class, mpool_fstat_class;
+static jclass queue_stat_class, rep_stat_class, txn_stat_class;
+static jclass txn_active_class;
+static jclass lock_class, lockreq_class, rep_processmsg_class;
+static jclass dbex_class, deadex_class, lockex_class, memex_class;
+static jclass runrecex_class;
+static jclass filenotfoundex_class, illegalargex_class;
+static jclass bytearray_class, string_class, outputstream_class;
+
+static jfieldID dbc_cptr_fid;
+static jfieldID dbt_data_fid, dbt_size_fid, dbt_ulen_fid, dbt_dlen_fid;
+static jfieldID dbt_doff_fid, dbt_flags_fid, dbt_offset_fid;
+static jfieldID kr_less_fid, kr_equal_fid, kr_greater_fid;
+static jfieldID lock_cptr_fid;
+static jfieldID lockreq_op_fid, lockreq_mode_fid, lockreq_timeout_fid;
+static jfieldID lockreq_obj_fid, lockreq_lock_fid;
+static jfieldID rep_processmsg_envid;
+static jfieldID txn_stat_active_fid;
+
+static jmethodID dbenv_construct, dbt_construct, dblsn_construct;
+static jmethodID dbpreplist_construct, dbtxn_construct;
+static jmethodID btree_stat_construct, hash_stat_construct;
+static jmethodID lock_stat_construct, log_stat_construct, mpool_stat_construct;
+static jmethodID mpool_fstat_construct, queue_stat_construct;
+static jmethodID rep_stat_construct, txn_stat_construct, txn_active_construct;
+static jmethodID dbex_construct, deadex_construct, lockex_construct;
+static jmethodID memex_construct, memex_update_method, runrecex_construct;
+static jmethodID filenotfoundex_construct, illegalargex_construct;
+static jmethodID lock_construct;
+
+static jmethodID app_dispatch_method, errcall_method, env_feedback_method;
+static jmethodID paniccall_method, rep_transport_method;
+static jmethodID append_recno_method, bt_compare_method, bt_prefix_method;
+static jmethodID db_feedback_method, dup_compare_method, h_hash_method;
+static jmethodID seckey_create_method;
+
+static jmethodID outputstream_write_method;
+
+const struct {
+ jclass *cl;
+ const char *name;
+} all_classes[] = {
+ { &dbenv_class, DB_PKG "DbEnv" },
+ { &db_class, DB_PKG "Db" },
+ { &dbc_class, DB_PKG "Dbc" },
+ { &dbt_class, DB_PKG "Dbt" },
+ { &dblsn_class, DB_PKG "DbLsn" },
+ { &dbpreplist_class, DB_PKG "DbPreplist" },
+ { &dbtxn_class, DB_PKG "DbTxn" },
+
+ { &btree_stat_class, DB_PKG "DbBtreeStat" },
+ { &hash_stat_class, DB_PKG "DbHashStat" },
+ { &lock_stat_class, DB_PKG "DbLockStat" },
+ { &log_stat_class, DB_PKG "DbLogStat" },
+ { &mpool_fstat_class, DB_PKG "DbMpoolFStat" },
+ { &mpool_stat_class, DB_PKG "DbMpoolStat" },
+ { &queue_stat_class, DB_PKG "DbQueueStat" },
+ { &rep_stat_class, DB_PKG "DbRepStat" },
+ { &txn_stat_class, DB_PKG "DbTxnStat" },
+ { &txn_active_class, DB_PKG "DbTxnStat$Active" },
+
+ { &keyrange_class, DB_PKG "DbKeyRange" },
+ { &lock_class, DB_PKG "DbLock" },
+ { &lockreq_class, DB_PKG "DbLockRequest" },
+ { &rep_processmsg_class, DB_PKG "DbEnv$RepProcessMessage" },
+
+ { &dbex_class, DB_PKG "DbException" },
+ { &deadex_class, DB_PKG "DbDeadlockException" },
+ { &lockex_class, DB_PKG "DbLockNotGrantedException" },
+ { &memex_class, DB_PKG "DbMemoryException" },
+ { &runrecex_class, DB_PKG "DbRunRecoveryException" },
+ { &filenotfoundex_class, "java/io/FileNotFoundException" },
+ { &illegalargex_class, "java/lang/IllegalArgumentException" },
+
+ { &bytearray_class, "[B" },
+ { &string_class, "java/lang/String" },
+ { &outputstream_class, "java/io/OutputStream" }
+};
+
+const struct {
+ jfieldID *fid;
+ jclass *cl;
+ const char *name;
+ const char *sig;
+} all_fields[] = {
+ { &dbc_cptr_fid, &dbc_class, "swigCPtr", "J" },
+
+ { &dbt_data_fid, &dbt_class, "data", "[B" },
+ { &dbt_size_fid, &dbt_class, "size", "I" },
+ { &dbt_ulen_fid, &dbt_class, "ulen", "I" },
+ { &dbt_dlen_fid, &dbt_class, "dlen", "I" },
+ { &dbt_doff_fid, &dbt_class, "doff", "I" },
+ { &dbt_flags_fid, &dbt_class, "flags", "I" },
+ { &dbt_offset_fid, &dbt_class, "offset", "I" },
+
+ { &kr_less_fid, &keyrange_class, "less", "D" },
+ { &kr_equal_fid, &keyrange_class, "equal", "D" },
+ { &kr_greater_fid, &keyrange_class, "greater", "D" },
+
+ { &lock_cptr_fid, &lock_class, "swigCPtr", "J" },
+
+ { &lockreq_op_fid, &lockreq_class, "op", "I" },
+ { &lockreq_mode_fid, &lockreq_class, "mode", "I" },
+ { &lockreq_timeout_fid, &lockreq_class, "timeout", "I" },
+ { &lockreq_obj_fid, &lockreq_class, "obj", "L" DB_PKG "Dbt;" },
+ { &lockreq_lock_fid, &lockreq_class, "lock", "L" DB_PKG "DbLock;" },
+
+ { &rep_processmsg_envid, &rep_processmsg_class, "envid", "I" },
+ { &txn_stat_active_fid, &txn_stat_class, "st_txnarray",
+ "[L" DB_PKG "DbTxnStat$Active;" }
+};
+
+const struct {
+ jmethodID *mid;
+ jclass *cl;
+ const char *name;
+ const char *sig;
+} all_methods[] = {
+ { &dbenv_construct, &dbenv_class, "<init>", "(JZ)V" },
+ { &dbt_construct, &dbt_class, "<init>", "()V" },
+ { &dblsn_construct, &dblsn_class, "<init>", "(JZ)V" },
+ { &dbpreplist_construct, &dbpreplist_class, "<init>",
+ "(L" DB_PKG "DbTxn;[B)V" },
+ { &dbtxn_construct, &dbtxn_class, "<init>", "(JZ)V" },
+
+ { &btree_stat_construct, &btree_stat_class, "<init>", "()V" },
+ { &hash_stat_construct, &hash_stat_class, "<init>", "()V" },
+ { &lock_stat_construct, &lock_stat_class, "<init>", "()V" },
+ { &log_stat_construct, &log_stat_class, "<init>", "()V" },
+ { &mpool_stat_construct, &mpool_stat_class, "<init>", "()V" },
+ { &mpool_fstat_construct, &mpool_fstat_class, "<init>", "()V" },
+ { &queue_stat_construct, &queue_stat_class, "<init>", "()V" },
+ { &rep_stat_construct, &rep_stat_class, "<init>", "()V" },
+ { &txn_stat_construct, &txn_stat_class, "<init>", "()V" },
+ { &txn_active_construct, &txn_active_class, "<init>", "()V" },
+
+ { &dbex_construct, &dbex_class, "<init>", "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &deadex_construct, &deadex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &lockex_construct, &lockex_class, "<init>",
+ "(Ljava/lang/String;IIL" DB_PKG "Dbt;L" DB_PKG "DbLock;IL" DB_PKG "DbEnv;)V" },
+ { &memex_construct, &memex_class, "<init>",
+ "(Ljava/lang/String;L" DB_PKG "Dbt;IL" DB_PKG "DbEnv;)V" },
+ { &memex_update_method, &memex_class, "update_dbt",
+ "(L" DB_PKG "Dbt;)V" },
+ { &runrecex_construct, &runrecex_class, "<init>",
+ "(Ljava/lang/String;IL" DB_PKG "DbEnv;)V" },
+ { &filenotfoundex_construct, &filenotfoundex_class, "<init>",
+ "(Ljava/lang/String;)V" },
+ { &illegalargex_construct, &illegalargex_class, "<init>",
+ "(Ljava/lang/String;)V" },
+
+ { &lock_construct, &lock_class, "<init>", "(JZ)V" },
+
+ { &app_dispatch_method, &dbenv_class, "handle_app_dispatch",
+ "(L" DB_PKG "Dbt;L" DB_PKG "DbLsn;I)I" },
+ { &env_feedback_method, &dbenv_class, "handle_env_feedback", "(II)V" },
+ { &errcall_method, &dbenv_class, "handle_error",
+ "(Ljava/lang/String;)V" },
+ { &paniccall_method, &dbenv_class, "handle_panic",
+ "(L" DB_PKG "DbException;)V" },
+ { &rep_transport_method, &dbenv_class, "handle_rep_transport",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;L" DB_PKG "DbLsn;II)I" },
+
+ { &append_recno_method, &db_class, "handle_append_recno",
+ "(L" DB_PKG "Dbt;I)V" },
+ { &bt_compare_method, &db_class, "handle_bt_compare",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &bt_prefix_method, &db_class, "handle_bt_prefix",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &db_feedback_method, &db_class, "handle_db_feedback", "(II)V" },
+ { &dup_compare_method, &db_class, "handle_dup_compare",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+ { &h_hash_method, &db_class, "handle_h_hash", "([BI)I" },
+ { &seckey_create_method, &db_class, "handle_seckey_create",
+ "(L" DB_PKG "Dbt;L" DB_PKG "Dbt;L" DB_PKG "Dbt;)I" },
+
+ { &outputstream_write_method, &outputstream_class, "write", "([BII)V" }
+};
+
+#define NELEM(x) (sizeof (x) / sizeof (x[0]))
+
+JNIEXPORT void JNICALL
+Java_com_sleepycat_db_db_1javaJNI_initialize(JNIEnv *jenv, jclass clazz)
+{
+ jclass cl;
+ unsigned int i;
+
+ COMPQUIET(clazz, NULL);
+
+ if ((*jenv)->GetJavaVM(jenv, &javavm) != 0) {
+ __db_err(NULL, "Cannot get Java VM");
+ return;
+ }
+
+ for (i = 0; i < NELEM(all_classes); i++) {
+ cl = (*jenv)->FindClass(jenv, all_classes[i].name);
+ if (cl == NULL) {
+ __db_err(NULL,
+ "Failed to load class %s - check CLASSPATH",
+ all_classes[i].name);
+ return;
+ }
+
+ /*
+ * Wrap classes in GlobalRefs so we keep the reference between
+ * calls.
+ */
+ *all_classes[i].cl = (jclass)(*jenv)->NewGlobalRef(jenv, cl);
+
+ if (*all_classes[i].cl == NULL) {
+ __db_err(NULL,
+ "Failed to create a global reference for class %s",
+ all_classes[i].name);
+ return;
+ }
+ }
+
+
+ /* Get field IDs */
+ for (i = 0; i < NELEM(all_fields); i++) {
+ *all_fields[i].fid = (*jenv)->GetFieldID(jenv,
+ *all_fields[i].cl, all_fields[i].name, all_fields[i].sig);
+
+ if (*all_fields[i].fid == NULL) {
+ __db_err(NULL, "Failed to look up field %s",
+ all_fields[i].name);
+ return;
+ }
+ }
+
+ /* Get method IDs */
+ for (i = 0; i < NELEM(all_methods); i++) {
+ *all_methods[i].mid = (*jenv)->GetMethodID(jenv,
+ *all_methods[i].cl, all_methods[i].name,
+ all_methods[i].sig);
+
+ if (*all_methods[i].mid == NULL) {
+ __db_err(NULL, "Failed to look up method %s",
+ all_methods[i].name);
+ return;
+ }
+ }
+}
+
+static JNIEnv *__dbj_get_jnienv(void)
+{
+ /*
+ * Note: Different versions of the JNI disagree on the signature for
+ * AttachCurrentThread. The most recent documentation seems to say
+ * that (JNIEnv **) is correct, but newer JNIs seem to use (void **),
+ * oddly enough.
+ */
+#ifdef JNI_VERSION_1_2
+ void *jenv = 0;
+#else
+ JNIEnv *jenv = 0;
+#endif
+
+ /*
+ * This should always succeed, as we are called via some Java activity.
+ * I think therefore I am (a thread).
+ */
+ if ((*javavm)->AttachCurrentThread(javavm, &jenv, 0) != 0)
+ return (0);
+
+ return ((JNIEnv *)jenv);
+}
+
+static jobject __dbj_wrap_DB_LSN(JNIEnv *jenv, DB_LSN *lsn)
+{
+ jlong jptr;
+ DB_LSN *lsn_copy;
+ int err;
+
+ if ((err = __os_malloc(NULL, sizeof(DB_LSN), &lsn_copy)) != 0) {
+ __dbj_throw(jenv, err, NULL, NULL, NULL);
+ return NULL;
+ }
+ memset(lsn_copy, 0, sizeof(DB_LSN));
+ *lsn_copy = *lsn;
+ /* Magic to convert a pointer to a long - must match SWIG */
+ *(DB_LSN **)&jptr = lsn_copy;
+ return (*jenv)->NewObject(jenv, dblsn_class, dblsn_construct,
+ jptr, JNI_TRUE);
+}
+%}
diff --git a/db/lock/Design b/db/lock/Design
index ac8f0b02f..f0bb5c6e9 100644
--- a/db/lock/Design
+++ b/db/lock/Design
@@ -1,7 +1,15 @@
-# $Id: Design,v 11.3 2000/02/19 20:58:03 bostic Exp $
+# $Id: Design,v 11.5 2002/02/01 19:07:18 bostic Exp $
Synchronization in the Locking Subsystem
+This is a document that describes how we implemented fine-grain locking
+in the lock manager (that is, locking on a hash bucket level instead of
+locking the entire region). We found that the increase in concurrency
+was not sufficient to warrant the increase in complexity or the additional
+cost of performing each lock operation. Therefore, we don't use this
+any more. Should we have to do fine-grain locking in a future release,
+this would be a reasonable starting point.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1. Data structures
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
diff --git a/db/lock/lock.c b/db/lock/lock.c
index 8d246f7de..ec08819a9 100644
--- a/db/lock/lock.c
+++ b/db/lock/lock.c
@@ -1,136 +1,282 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock.c,v 11.40 2000/12/19 23:18:58 ubell Exp $";
+static const char revid[] = "$Id: lock.c,v 11.134 2003/11/18 21:30:38 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
+#include <stdlib.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "log.h"
-#include "db_am.h"
-#include "txn.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
-
-static int __lock_checklocker __P((DB_LOCKTAB *,
- struct __db_lock *, u_int32_t, u_int32_t, int *));
-static int __lock_get_internal __P((DB_LOCKTAB *, u_int32_t,
- u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
-static int __lock_is_parent __P((DB_LOCKTAB *, u_int32_t, DB_LOCKER *));
-static int __lock_put_internal __P((DB_LOCKTAB *,
- struct __db_lock *, u_int32_t, u_int32_t));
-static int __lock_put_nolock __P((DB_ENV *, DB_LOCK *, int *, int));
-static void __lock_remove_waiter __P((DB_ENV *,
- DB_LOCKOBJ *, struct __db_lock *, db_status_t));
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+
+static int __lock_freelock __P((DB_LOCKTAB *,
+ struct __db_lock *, u_int32_t, u_int32_t));
+static void __lock_expires __P((DB_ENV *, db_timeval_t *, db_timeout_t));
+static void __lock_freelocker
+ __P((DB_LOCKTAB *, DB_LOCKREGION *, DB_LOCKER *, u_int32_t));
+static int __lock_get_internal __P((DB_LOCKTAB *, u_int32_t, u_int32_t,
+ const DBT *, db_lockmode_t, db_timeout_t, DB_LOCK *));
+static int __lock_getobj
+ __P((DB_LOCKTAB *, const DBT *, u_int32_t, int, DB_LOCKOBJ **));
+static int __lock_inherit_locks __P ((DB_LOCKTAB *, u_int32_t, u_int32_t));
+static int __lock_is_parent __P((DB_LOCKTAB *, u_int32_t, DB_LOCKER *));
+static int __lock_put_internal __P((DB_LOCKTAB *,
+ struct __db_lock *, u_int32_t, u_int32_t));
+static int __lock_put_nolock __P((DB_ENV *, DB_LOCK *, int *, u_int32_t));
+static void __lock_remove_waiter __P((DB_LOCKTAB *,
+ DB_LOCKOBJ *, struct __db_lock *, db_status_t));
+static int __lock_set_timeout_internal __P(( DB_ENV *,
+ u_int32_t, db_timeout_t, u_int32_t));
+static int __lock_trade __P((DB_ENV *, DB_LOCK *, u_int32_t));
+static int __lock_sort_cmp __P((const void *, const void *));
+static int __lock_fix_list __P((DB_ENV *, DBT *, u_int32_t));
static const char __db_lock_err[] = "Lock table is out of available %s";
static const char __db_lock_invalid[] = "%s: Lock is no longer valid";
static const char __db_locker_invalid[] = "Locker is not valid";
/*
- * lock_id --
- * Generate a unique locker id.
+ * __lock_id_pp --
+ * DB_ENV->lock_id pre/post processing.
+ *
+ * PUBLIC: int __lock_id_pp __P((DB_ENV *, u_int32_t *));
*/
int
-lock_id(dbenv, idp)
+__lock_id_pp(dbenv, idp)
DB_ENV *dbenv;
u_int32_t *idp;
{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_id", DB_INIT_LOCK);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_id(dbenv, idp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_id --
+ * DB_ENV->lock_id.
+ *
+ * PUBLIC: int __lock_id __P((DB_ENV *, u_int32_t *));
+ */
+int
+__lock_id(dbenv, idp)
+ DB_ENV *dbenv;
+ u_int32_t *idp;
+{
+ DB_LOCKER *lk;
DB_LOCKTAB *lt;
DB_LOCKREGION *region;
+ u_int32_t *ids, locker_ndx;
+ int nids, ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_id(dbenv, idp));
-#endif
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+ ret = 0;
+
+ /*
+ * Allocate a new lock id. If we wrap around then we
+ * find the minimum currently in use and make sure we
+ * can stay below that. This code is similar to code
+ * in __txn_begin_int for recovering txn ids.
+ */
+ LOCKREGION(dbenv, lt);
+ /*
+ * Our current valid range can span the maximum valid value, so check
+ * for it and wrap manually.
+ */
+ if (region->stat.st_id == DB_LOCK_MAXID &&
+ region->stat.st_cur_maxid != DB_LOCK_MAXID)
+ region->stat.st_id = DB_LOCK_INVALIDID;
+ if (region->stat.st_id == region->stat.st_cur_maxid) {
+ if ((ret = __os_malloc(dbenv,
+ sizeof(u_int32_t) * region->stat.st_nlockers, &ids)) != 0)
+ goto err;
+ nids = 0;
+ for (lk = SH_TAILQ_FIRST(&region->lockers, __db_locker);
+ lk != NULL;
+ lk = SH_TAILQ_NEXT(lk, ulinks, __db_locker))
+ ids[nids++] = lk->id;
+ region->stat.st_id = DB_LOCK_INVALIDID;
+ region->stat.st_cur_maxid = DB_LOCK_MAXID;
+ if (nids != 0)
+ __db_idspace(ids, nids,
+ &region->stat.st_id, &region->stat.st_cur_maxid);
+ __os_free(dbenv, ids);
+ }
+ *idp = ++region->stat.st_id;
+
+ /* Allocate a locker for this id. */
+ LOCKER_LOCK(lt, region, *idp, locker_ndx);
+ ret = __lock_getlocker(lt, *idp, locker_ndx, 1, &lk);
+
+err: UNLOCKREGION(dbenv, lt);
+
+ return (ret);
+}
+
+/*
+ * __lock_id_free_pp --
+ * DB_ENV->lock_id_free pre/post processing.
+ *
+ * PUBLIC: int __lock_id_free_pp __P((DB_ENV *, u_int32_t));
+ */
+int
+__lock_id_free_pp(dbenv, id)
+ DB_ENV *dbenv;
+ u_int32_t id;
+{
+ int rep_check, ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_id_free", DB_INIT_LOCK);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_id_free(dbenv, id);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_id_free --
+ * Free a locker id.
+ *
+ * PUBLIC: int __lock_id_free __P((DB_ENV *, u_int32_t));
+ */
+int
+__lock_id_free(dbenv, id)
+ DB_ENV *dbenv;
+ u_int32_t id;
+{
+ DB_LOCKER *sh_locker;
+ DB_LOCKTAB *lt;
+ DB_LOCKREGION *region;
+ u_int32_t locker_ndx;
+ int ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_id_free", DB_INIT_LOCK);
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
- /*
- * Note that we are letting locker IDs wrap.
- *
- * This is potentially dangerous in that it's conceivable that you
- * could be allocating a new locker id and still have someone using
- * it. However, the alternatives are that we keep a bitmap of
- * locker ids or we forbid wrapping. Both are probably bad. The
- * bitmap of locker ids will take up 64 MB of space. Forbidding
- * wrapping means that we'll run out of locker IDs after 2 billion.
- * In order for the wrap bug to fire, we'd need to have something
- * that stayed open while 2 billion locker ids were used up. Since
- * we cache cursors it means that something would have to stay open
- * sufficiently long that we open and close a lot of files and a
- * lot of cursors within them. Betting that this won't happen seems
- * to the lesser of the evils.
- */
LOCKREGION(dbenv, lt);
- if (region->id >= DB_LOCK_MAXID)
- region->id = 0;
- *idp = ++region->id;
- UNLOCKREGION(dbenv, lt);
+ LOCKER_LOCK(lt, region, id, locker_ndx);
+ if ((ret =
+ __lock_getlocker(lt, id, locker_ndx, 0, &sh_locker)) != 0)
+ goto err;
+ if (sh_locker == NULL) {
+ ret = EINVAL;
+ goto err;
+ }
- return (0);
+ if (sh_locker->nlocks != 0) {
+ __db_err(dbenv, "Locker still has locks");
+ ret = EINVAL;
+ goto err;
+ }
+
+ __lock_freelocker(lt, region, sh_locker, locker_ndx);
+
+err: UNLOCKREGION(dbenv, lt);
+ return (ret);
}
/*
- * Vector lock routine. This function takes a set of operations
- * and performs them all at once. In addition, lock_vec provides
- * functionality for lock inheritance, releasing all locks for a
- * given locker (used during transaction commit/abort), releasing
- * all locks on a given object, and generating debugging information.
+ * __lock_vec_pp --
+ * DB_ENV->lock_vec pre/post processing.
+ *
+ * PUBLIC: int __lock_vec_pp __P((DB_ENV *,
+ * PUBLIC: u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
*/
int
-lock_vec(dbenv, locker, flags, list, nlist, elistp)
+__lock_vec_pp(dbenv, locker, flags, list, nlist, elistp)
DB_ENV *dbenv;
u_int32_t locker, flags;
int nlist;
DB_LOCKREQ *list, **elistp;
{
- struct __db_lock *lp, *next_lock;
- DB_LOCKER *sh_locker, *sh_parent;
- DB_LOCKOBJ *obj, *sh_obj;
- DB_LOCKREGION *region;
- DB_LOCKTAB *lt;
- u_int32_t lndx, ndx;
- int did_abort, i, ret, run_dd;
+ int rep_check, ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_vec(dbenv, locker,
- flags, list, nlist, elistp));
-#endif
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_vec", DB_INIT_LOCK);
/* Validate arguments. */
- if ((ret = __db_fchk(dbenv, "lock_vec", flags, DB_LOCK_NOWAIT)) != 0)
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->lock_vec", flags, DB_LOCK_NOWAIT)) != 0)
return (ret);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_vec(dbenv, locker, flags, list, nlist, elistp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_vec --
+ * DB_ENV->lock_vec.
+ *
+ * Vector lock routine. This function takes a set of operations
+ * and performs them all at once. In addition, lock_vec provides
+ * functionality for lock inheritance, releasing all locks for a
+ * given locker (used during transaction commit/abort), releasing
+ * all locks on a given object, and generating debugging information.
+ *
+ * PUBLIC: int __lock_vec __P((DB_ENV *,
+ * PUBLIC: u_int32_t, u_int32_t, DB_LOCKREQ *, int, DB_LOCKREQ **));
+ */
+int
+__lock_vec(dbenv, locker, flags, list, nlist, elistp)
+ DB_ENV *dbenv;
+ u_int32_t locker, flags;
+ int nlist;
+ DB_LOCKREQ *list, **elistp;
+{
+ struct __db_lock *lp, *next_lock;
+ DB_LOCK lock;
+ DB_LOCKER *sh_locker;
+ DB_LOCKOBJ *sh_obj;
+ DB_LOCKREGION *region;
+ DB_LOCKTAB *lt;
+ DBT *objlist, *np;
+ u_int32_t lndx, ndx;
+ int did_abort, i, ret, run_dd, upgrade, writes;
+
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return (0);
+
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
@@ -138,80 +284,27 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
for (i = 0, ret = 0; i < nlist && ret == 0; i++)
switch (list[i].op) {
+ case DB_LOCK_GET_TIMEOUT:
+ LF_SET(DB_LOCK_SET_TIMEOUT);
case DB_LOCK_GET:
+ if (IS_RECOVERING(dbenv)) {
+ LOCK_INIT(list[i].lock);
+ break;
+ }
ret = __lock_get_internal(dbenv->lk_handle,
- locker, flags,
- list[i].obj, list[i].mode, &list[i].lock);
+ locker, flags, list[i].obj,
+ list[i].mode, list[i].timeout, &list[i].lock);
break;
case DB_LOCK_INHERIT:
-
- /*
- * Get the committing locker and mark it as deleted.
- * This allows us to traverse the locker links without
- * worrying that someone else is deleting locks out
- * from under us. However, if the locker doesn't
- * exist, that just means that the child holds no
- * locks, so inheritance is easy!
- */
- LOCKER_LOCK(lt, region, locker, ndx);
- if ((ret = __lock_getlocker(lt,
- locker, ndx, 0, &sh_locker)) != 0 ||
- sh_locker == NULL ||
- F_ISSET(sh_locker, DB_LOCKER_DELETED)) {
- if (ret == 0 && sh_locker != NULL)
- ret = EACCES;
- __db_err(dbenv, __db_locker_invalid);
- break;
- }
-
- /* Make sure we are a child transaction. */
- if (sh_locker->parent_locker == INVALID_ROFF) {
- __db_err(dbenv, "Not a child transaction");
- ret = EINVAL;
- break;
- }
- sh_parent = (DB_LOCKER *)
- R_ADDR(&lt->reginfo, sh_locker->parent_locker);
- F_SET(sh_locker, DB_LOCKER_DELETED);
-
- /*
- * Now, lock the parent locker; move locks from
- * the committing list to the parent's list.
- */
- LOCKER_LOCK(lt, region, locker, ndx);
- if (F_ISSET(sh_parent, DB_LOCKER_DELETED)) {
- if (ret == 0) {
- __db_err(dbenv,
- "Parent locker is not valid");
- ret = EACCES;
- }
- break;
- }
-
- for (lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock);
- lp != NULL;
- lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock)) {
- SH_LIST_REMOVE(lp, locker_links, __db_lock);
- SH_LIST_INSERT_HEAD(&sh_parent->heldby, lp,
- locker_links, __db_lock);
- lp->holder = sh_parent->id;
-
- /* Get the object associated with this lock. */
- obj = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
-
- (void)__lock_promote(lt, obj,
- LF_ISSET(DB_LOCK_NOWAITERS));
- }
-
- /* Now free the original locker. */
- ret = __lock_checklocker(lt,
- NULL, locker, DB_LOCK_IGNOREDEL, NULL);
+ ret = __lock_inherit_locks(lt, locker, flags);
break;
case DB_LOCK_PUT:
- ret =
- __lock_put_nolock(dbenv, &list[i].lock, &run_dd, 0);
+ ret = __lock_put_nolock(dbenv,
+ &list[i].lock, &run_dd, flags);
break;
case DB_LOCK_PUT_ALL:
+ case DB_LOCK_PUT_READ:
+ case DB_LOCK_UPGRADE_WRITE:
/*
* Get the locker and mark it as deleted. This
* allows us to traverse the locker links without
@@ -232,23 +325,107 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
* to do.
*/
break;
+ upgrade = 0;
+ writes = 1;
+ if (list[i].op == DB_LOCK_PUT_READ)
+ writes = 0;
+ else if (list[i].op == DB_LOCK_UPGRADE_WRITE) {
+ if (F_ISSET(sh_locker, DB_LOCKER_DIRTY))
+ upgrade = 1;
+ writes = 0;
+ }
+ objlist = list[i].obj;
+ if (objlist != NULL) {
+ /*
+ * We know these should be ilocks,
+ * but they could be something else,
+ * so allocate room for the size too.
+ */
+ objlist->size =
+ sh_locker->nwrites * sizeof(DBT);
+ if ((ret = __os_malloc(dbenv,
+ objlist->size, &objlist->data)) != 0)
+ goto up_done;
+ memset(objlist->data, 0, objlist->size);
+ np = (DBT *) objlist->data;
+ } else
+ np = NULL;
+
F_SET(sh_locker, DB_LOCKER_DELETED);
/* Now traverse the locks, releasing each one. */
for (lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock);
- lp != NULL;
- lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock)) {
- SH_LIST_REMOVE(lp, locker_links, __db_lock);
- sh_obj =
- (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
- SHOBJECT_LOCK(lt, region, sh_obj, lndx);
- ret = __lock_put_internal(lt,
- lp, lndx, DB_LOCK_FREE | DB_LOCK_DOALL);
- if (ret != 0)
- break;
+ lp != NULL; lp = next_lock) {
+ sh_obj = (DB_LOCKOBJ *)
+ ((u_int8_t *)lp + lp->obj);
+ next_lock = SH_LIST_NEXT(lp,
+ locker_links, __db_lock);
+ if (writes == 1 ||
+ lp->mode == DB_LOCK_READ ||
+ lp->mode == DB_LOCK_DIRTY) {
+ SH_LIST_REMOVE(lp,
+ locker_links, __db_lock);
+ sh_obj = (DB_LOCKOBJ *)
+ ((u_int8_t *)lp + lp->obj);
+ SHOBJECT_LOCK(lt, region, sh_obj, lndx);
+ /*
+ * We are not letting lock_put_internal
+ * unlink the lock, so we'll have to
+ * update counts here.
+ */
+ sh_locker->nlocks--;
+ if (IS_WRITELOCK(lp->mode))
+ sh_locker->nwrites--;
+ ret = __lock_put_internal(lt, lp,
+ lndx, DB_LOCK_FREE | DB_LOCK_DOALL);
+ if (ret != 0)
+ break;
+ continue;
+ }
+ if (objlist != NULL) {
+ DB_ASSERT((char *)np <
+ (char *)objlist->data +
+ objlist->size);
+ np->data = SH_DBT_PTR(&sh_obj->lockobj);
+ np->size = sh_obj->lockobj.size;
+ np++;
+ }
+ }
+ if (ret != 0)
+ goto up_done;
+
+ if (objlist != NULL)
+ if ((ret = __lock_fix_list(dbenv,
+ objlist, sh_locker->nwrites)) != 0)
+ goto up_done;
+ switch (list[i].op) {
+ case DB_LOCK_UPGRADE_WRITE:
+ if (upgrade != 1)
+ goto up_done;
+ for (lp = SH_LIST_FIRST(
+ &sh_locker->heldby, __db_lock);
+ lp != NULL;
+ lp = SH_LIST_NEXT(lp,
+ locker_links, __db_lock)) {
+ if (lp->mode != DB_LOCK_WWRITE)
+ continue;
+ lock.off = R_OFFSET(&lt->reginfo, lp);
+ lock.gen = lp->gen;
+ F_SET(sh_locker, DB_LOCKER_INABORT);
+ if ((ret = __lock_get_internal(lt,
+ locker, DB_LOCK_UPGRADE,
+ NULL, DB_LOCK_WRITE, 0, &lock)) !=0)
+ break;
+ }
+ up_done:
+ /* FALL THROUGH */
+ case DB_LOCK_PUT_READ:
+ case DB_LOCK_PUT_ALL:
+ F_CLR(sh_locker, DB_LOCKER_DELETED);
+ break;
+ default:
+ break;
}
- ret = __lock_checklocker(lt,
- NULL, locker, DB_LOCK_IGNOREDEL, NULL);
break;
case DB_LOCK_PUT_OBJ:
/* Remove all the locks associated with an object. */
@@ -269,8 +446,9 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
for (lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock);
ret == 0 && lp != NULL;
lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock))
- ret = __lock_put_internal(lt,
- lp, ndx, DB_LOCK_NOPROMOTE | DB_LOCK_DOALL);
+ ret = __lock_put_internal(lt, lp, ndx,
+ DB_LOCK_UNLINK |
+ DB_LOCK_NOPROMOTE | DB_LOCK_DOALL);
/*
* On the last time around, the object will get
@@ -281,24 +459,48 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
ret == 0 && lp != NULL;
lp = next_lock) {
next_lock = SH_TAILQ_NEXT(lp, links, __db_lock);
- ret = __lock_put_internal(lt,
- lp, ndx, DB_LOCK_NOPROMOTE | DB_LOCK_DOALL);
+ ret = __lock_put_internal(lt, lp, ndx,
+ DB_LOCK_UNLINK |
+ DB_LOCK_NOPROMOTE | DB_LOCK_DOALL);
}
break;
+
+ case DB_LOCK_TIMEOUT:
+ ret = __lock_set_timeout_internal(dbenv,
+ locker, 0, DB_SET_TXN_NOW);
+ break;
+
+ case DB_LOCK_TRADE:
+ /*
+ * INTERNAL USE ONLY.
+ * Change the holder of the lock described in
+ * list[i].lock to the locker-id specified by
+ * the locker parameter.
+ */
+ /*
+ * You had better know what you're doing here.
+ * We are trading locker-id's on a lock to
+ * facilitate file locking on open DB handles.
+ * We do not do any conflict checking on this,
+ * so heaven help you if you use this flag under
+ * any other circumstances.
+ */
+ ret = __lock_trade(dbenv, &list[i].lock, locker);
+ break;
#ifdef DEBUG
case DB_LOCK_DUMP:
/* Find the locker. */
LOCKER_LOCK(lt, region, locker, ndx);
if ((ret = __lock_getlocker(lt,
- locker, ndx, 0, &sh_locker)) != 0
- || sh_locker == NULL
- || F_ISSET(sh_locker, DB_LOCKER_DELETED))
+ locker, ndx, 0, &sh_locker)) != 0 ||
+ sh_locker == NULL ||
+ F_ISSET(sh_locker, DB_LOCKER_DELETED))
break;
for (lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock);
lp != NULL;
lp = SH_LIST_NEXT(lp, locker_links, __db_lock)) {
- __lock_printlock(lt, lp, 1);
+ __lock_printlock(lt, lp, 1, NULL);
}
break;
#endif
@@ -309,14 +511,13 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
break;
}
- if (ret == 0 && region->need_dd && region->detect != DB_LOCK_NORUN) {
+ if (ret == 0 && region->detect != DB_LOCK_NORUN &&
+ (region->need_dd || LOCK_TIME_ISVALID(&region->next_timeout)))
run_dd = 1;
- region->need_dd = 0;
- }
UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
if (run_dd)
- (void)lock_detect(dbenv, 0, region->detect, &did_abort);
+ (void)__lock_detect(dbenv, region->detect, &did_abort);
if (ret != 0 && elistp != NULL)
*elistp = &list[i - 1];
@@ -325,146 +526,198 @@ lock_vec(dbenv, locker, flags, list, nlist, elistp)
}
/*
- * Lock acquisition routines. There are two library interfaces:
+ * __lock_get_pp --
+ * DB_ENV->lock_get pre/post processing.
*
- * lock_get --
- * original lock get interface that takes a locker id.
- *
- * All the work for lock_get (and for the GET option of lock_vec) is done
- * inside of lock_get_internal.
+ * PUBLIC: int __lock_get_pp __P((DB_ENV *,
+ * PUBLIC: u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
*/
int
-lock_get(dbenv, locker, flags, obj, lock_mode, lock)
+__lock_get_pp(dbenv, locker, flags, obj, lock_mode, lock)
DB_ENV *dbenv;
u_int32_t locker, flags;
const DBT *obj;
db_lockmode_t lock_mode;
DB_LOCK *lock;
{
- int ret;
+ int rep_check, ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_get(dbenv, locker,
- flags, obj, lock_mode, lock));
-#endif
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
-
- if (IS_RECOVERING(dbenv)) {
- lock->off = LOCK_INVALID;
- return (0);
- }
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_get", DB_INIT_LOCK);
/* Validate arguments. */
- if ((ret = __db_fchk(dbenv,
- "lock_get", flags,
+ if ((ret = __db_fchk(dbenv, "DB_ENV->lock_get", flags,
DB_LOCK_NOWAIT | DB_LOCK_UPGRADE | DB_LOCK_SWITCH)) != 0)
return (ret);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_get(dbenv, locker, flags, obj, lock_mode, lock);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_get --
+ * DB_ENV->lock_get.
+ *
+ * PUBLIC: int __lock_get __P((DB_ENV *,
+ * PUBLIC: u_int32_t, u_int32_t, const DBT *, db_lockmode_t, DB_LOCK *));
+ */
+int
+__lock_get(dbenv, locker, flags, obj, lock_mode, lock)
+ DB_ENV *dbenv;
+ u_int32_t locker, flags;
+ const DBT *obj;
+ db_lockmode_t lock_mode;
+ DB_LOCK *lock;
+{
+ int ret;
+
+ if (IS_RECOVERING(dbenv)) {
+ LOCK_INIT(*lock);
+ return (0);
+ }
+
LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
ret = __lock_get_internal(dbenv->lk_handle,
- locker, flags, obj, lock_mode, lock);
+ locker, flags, obj, lock_mode, 0, lock);
UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
return (ret);
}
+/*
+ * __lock_get_internal --
+ *
+ * All the work for lock_get (and for the GET option of lock_vec) is done
+ * inside of lock_get_internal.
+ */
static int
-__lock_get_internal(lt, locker, flags, obj, lock_mode, lock)
+__lock_get_internal(lt, locker, flags, obj, lock_mode, timeout, lock)
DB_LOCKTAB *lt;
u_int32_t locker, flags;
const DBT *obj;
db_lockmode_t lock_mode;
+ db_timeout_t timeout;
DB_LOCK *lock;
{
- struct __db_lock *newl, *lp;
+ struct __db_lock *newl, *lp, *wwrite;
DB_ENV *dbenv;
DB_LOCKER *sh_locker;
DB_LOCKOBJ *sh_obj;
DB_LOCKREGION *region;
- u_int32_t locker_ndx;
- int did_abort, freed, ihold, on_locker_list, no_dd, ret;
+ u_int32_t holder, locker_ndx, obj_ndx;
+ int did_abort, ihold, grant_dirty, no_dd, ret, t_ret;
+ /*
+ * We decide what action to take based on what
+ * locks are already held and what locks are
+ * in the wait queue.
+ */
+ enum {
+ GRANT, /* Grant the lock. */
+ UPGRADE, /* Upgrade the lock. */
+ HEAD, /* Wait at head of wait queue. */
+ SECOND, /* Wait as the second waiter. */
+ TAIL /* Wait at tail of the wait queue. */
+ } action;
- no_dd = ret = 0;
- on_locker_list = 0;
- region = lt->reginfo.primary;
dbenv = lt->dbenv;
+ region = lt->reginfo.primary;
+
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return (0);
+
+ no_dd = ret = 0;
+ newl = NULL;
/*
- * If we are not going to reuse this lock, initialize
- * the offset to invalid so that if we fail it
- * will not look like a valid lock.
+ * If we are not going to reuse this lock, invalidate it
+ * so that if we fail it will not look like a valid lock.
*/
if (!LF_ISSET(DB_LOCK_UPGRADE | DB_LOCK_SWITCH))
- lock->off = LOCK_INVALID;
+ LOCK_INIT(*lock);
- /*
- * Check that the lock mode is valid.
- */
- if ((u_int32_t)lock_mode >= region->nmodes) {
- __db_err(dbenv,
- "lock_get: invalid lock mode %lu\n", (u_long)lock_mode);
+ /* Check that the lock mode is valid. */
+ if ((u_int32_t)lock_mode >= region->stat.st_nmodes) {
+ __db_err(dbenv, "DB_ENV->lock_get: invalid lock mode %lu",
+ (u_long)lock_mode);
return (EINVAL);
}
+ region->stat.st_nrequests++;
- /* Allocate a new lock. Optimize for the common case of a grant. */
- region->nrequests++;
- if ((newl = SH_TAILQ_FIRST(&region->free_locks, __db_lock)) != NULL)
- SH_TAILQ_REMOVE(&region->free_locks, newl, links, __db_lock);
- if (newl == NULL) {
- __db_err(dbenv, __db_lock_err, "locks");
- return (ENOMEM);
+ if (obj == NULL) {
+ DB_ASSERT(LOCK_ISSET(*lock));
+ lp = (struct __db_lock *)R_ADDR(&lt->reginfo, lock->off);
+ sh_obj = (DB_LOCKOBJ *) ((u_int8_t *)lp + lp->obj);
+ } else {
+ /* Allocate a shared memory new object. */
+ OBJECT_LOCK(lt, region, obj, lock->ndx);
+ if ((ret = __lock_getobj(lt, obj, lock->ndx, 1, &sh_obj)) != 0)
+ goto err;
}
- if (++region->nlocks > region->maxnlocks)
- region->maxnlocks = region->nlocks;
-
- /* Allocate a new object. */
- OBJECT_LOCK(lt, region, obj, lock->ndx);
- if ((ret = __lock_getobj(lt, obj, lock->ndx, 1, &sh_obj)) != 0)
- goto err;
/* Get the locker, we may need it to find our parent. */
LOCKER_LOCK(lt, region, locker, locker_ndx);
- if ((ret =
- __lock_getlocker(lt, locker, locker_ndx, 1, &sh_locker)) != 0) {
+ if ((ret = __lock_getlocker(lt, locker,
+ locker_ndx, locker > DB_LOCK_MAXID ? 1 : 0, &sh_locker)) != 0) {
/*
- * XXX: Margo
- * CLEANUP the object and the lock.
+ * XXX We cannot tell if we created the object or not,
+ * so we don't kow if we should free it or not.
*/
- return (ret);
+ goto err;
+ }
+
+ if (sh_locker == NULL) {
+ __db_err(dbenv, "Locker does not exist");
+ ret = EINVAL;
+ goto err;
}
/*
- * Now we have a lock and an object and we need to see if we should
- * grant the lock. We use a FIFO ordering so we can only grant a
- * new lock if it does not conflict with anyone on the holders list
- * OR anyone on the waiters list. The reason that we don't grant if
- * there's a conflict is that this can lead to starvation (a writer
- * waiting on a popularly read item will never be granted). The
- * downside of this is that a waiting reader can prevent an upgrade
- * from reader to writer, which is not uncommon.
+ * Figure out if we can grant this lock or if it should wait.
+ * By default, we can grant the new lock if it does not conflict with
+ * anyone on the holders list OR anyone on the waiters list.
+ * The reason that we don't grant if there's a conflict is that
+ * this can lead to starvation (a writer waiting on a popularly
+ * read item will never be granted). The downside of this is that
+ * a waiting reader can prevent an upgrade from reader to writer,
+ * which is not uncommon.
*
- * There is one exception to the no-conflict rule. If a lock is held
- * by the requesting locker AND the new lock does not conflict with
- * any other holders, then we grant the lock. The most common place
- * this happens is when the holder has a WRITE lock and a READ lock
- * request comes in for the same locker. If we do not grant the read
- * lock, then we guarantee deadlock.
+ * There are two exceptions to the no-conflict rule. First, if
+ * a lock is held by the requesting locker AND the new lock does
+ * not conflict with any other holders, then we grant the lock.
+ * The most common place this happens is when the holder has a
+ * WRITE lock and a READ lock request comes in for the same locker.
+ * If we do not grant the read lock, then we guarantee deadlock.
+ * Second, dirty readers are granted if at all possible while
+ * avoiding starvation, see below.
*
* In case of conflict, we put the new lock on the end of the waiters
- * list, unless we are upgrading in which case the locker goes on the
- * front of the list.
+ * list, unless we are upgrading or this is a dirty reader in which
+ * case the locker goes at or near the front of the list.
*/
ihold = 0;
- lp = NULL;
- if (LF_ISSET(DB_LOCK_SWITCH))
- goto put_lock;
+ grant_dirty = 0;
+ holder = 0;
+ wwrite = NULL;
- for (lp = SH_TAILQ_FIRST(&sh_obj->holders, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
- if (locker == lp->holder ||
- __lock_is_parent(lt, lp->holder, sh_locker)) {
+ /*
+ * SWITCH is a special case, used by the queue access method
+ * when we want to get an entry which is past the end of the queue.
+ * We have a DB_READ_LOCK and need to switch it to DB_LOCK_WAIT and
+ * join the waiters queue. This must be done as a single operation
+ * so that another locker cannot get in and fail to wake us up.
+ */
+ if (LF_ISSET(DB_LOCK_SWITCH))
+ lp = NULL;
+ else
+ lp = SH_TAILQ_FIRST(&sh_obj->holders, __db_lock);
+ for (; lp != NULL; lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
+ if (locker == lp->holder) {
if (lp->mode == lock_mode &&
lp->status == DB_LSTAT_HELD) {
if (LF_ISSET(DB_LOCK_UPGRADE))
@@ -472,110 +725,259 @@ __lock_get_internal(lt, locker, flags, obj, lock_mode, lock)
/*
* Lock is held, so we can increment the
- * reference count and return this lock.
+ * reference count and return this lock
+ * to the caller. We do not count reference
+ * increments towards the locks held by
+ * the locker.
*/
lp->refcount++;
lock->off = R_OFFSET(&lt->reginfo, lp);
lock->gen = lp->gen;
-
- ret = 0;
+ lock->mode = lp->mode;
goto done;
- } else
+ } else {
ihold = 1;
- } else if (CONFLICTS(lt, region, lp->mode, lock_mode))
+ if (lock_mode == DB_LOCK_WRITE &&
+ lp->mode == DB_LOCK_WWRITE)
+ wwrite = lp;
+ }
+ } else if (__lock_is_parent(lt, lp->holder, sh_locker))
+ ihold = 1;
+ else if (CONFLICTS(lt, region, lp->mode, lock_mode))
break;
+ else if (lp->mode == DB_LOCK_READ ||
+ lp->mode == DB_LOCK_WWRITE) {
+ grant_dirty = 1;
+ holder = lp->holder;
+ }
}
/*
- * Make the new lock point to the new object, initialize fields.
- *
- * This lock is not linked in anywhere, so we can muck with it
- * without holding any mutexes.
- */
-put_lock:
- newl->holder = locker;
- newl->refcount = 1;
- newl->mode = lock_mode;
- newl->obj = SH_PTR_TO_OFF(newl, sh_obj);
- newl->status = DB_LSTAT_HELD;
-
- /*
- * If we are upgrading, then there are two scenarios. Either
- * we had no conflicts, so we can do the upgrade. Or, there
- * is a conflict and we should wait at the HEAD of the waiters
- * list.
+ * If there are conflicting holders we will have to wait.
+ * An upgrade or dirty reader goes to the head
+ * of the queue, everone else to the back.
*/
- if (LF_ISSET(DB_LOCK_UPGRADE)) {
- if (lp == NULL)
- goto upgrade;
+ if (lp != NULL) {
+ if (LF_ISSET(DB_LOCK_UPGRADE) ||
+ wwrite != NULL || lock_mode == DB_LOCK_DIRTY)
+ action = HEAD;
+ else
+ action = TAIL;
+ } else {
+ if (LF_ISSET(DB_LOCK_SWITCH))
+ action = TAIL;
+ else if (LF_ISSET(DB_LOCK_UPGRADE) || wwrite != NULL)
+ action = UPGRADE;
+ else if (ihold)
+ action = GRANT;
+ else {
+ /*
+ * Look for conflicting waiters.
+ */
+ for (lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock);
+ lp != NULL;
+ lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
+ if (CONFLICTS(lt, region, lp->mode,
+ lock_mode) && locker != lp->holder)
+ break;
+ }
+ /*
+ * If there are no conflicting holders or waiters,
+ * then we grant. Normally when we wait, we
+ * wait at the end (TAIL). However, the goal of
+ * DIRTY_READ locks to allow forward progress in the
+ * face of updating transactions, so we try to allow
+ * all DIRTY_READ requests to proceed as rapidly
+ * as possible, so long as we can prevent starvation.
+ *
+ * When determining how to queue a DIRTY_READ
+ * request:
+ *
+ * 1. If there is a waiting upgrading writer,
+ * then we enqueue the dirty reader BEHIND it
+ * (second in the queue).
+ * 2. Else, if the current holders are either
+ * READ or WWRITE, we grant
+ * 3. Else queue SECOND i.e., behind the first
+ * waiter.
+ *
+ * The end result is that dirty_readers get to run
+ * so long as other lockers are blocked. Once
+ * there is a locker which is only waiting on
+ * dirty readers then they queue up behind that
+ * locker so that it gets to run. In general
+ * this locker will be a WRITE which will shortly
+ * get downgraded to a WWRITE, permitting the
+ * DIRTY locks to be granted.
+ */
+ if (lp == NULL)
+ action = GRANT;
+ else if (lock_mode == DB_LOCK_DIRTY && grant_dirty) {
+ /*
+ * An upgrade will be at the head of the
+ * queue.
+ */
+ lp = SH_TAILQ_FIRST(
+ &sh_obj->waiters, __db_lock);
+ if (lp->mode == DB_LOCK_WRITE &&
+ lp->holder == holder)
+ action = SECOND;
+ else
+ action = GRANT;
+ } else if (lock_mode == DB_LOCK_DIRTY)
+ action = SECOND;
+ else
+ action = TAIL;
+ }
+ }
+ switch (action) {
+ case HEAD:
+ case TAIL:
+ case SECOND:
+ case GRANT:
+ /* Allocate a new lock. */
+ if (++region->stat.st_nlocks > region->stat.st_maxnlocks)
+ region->stat.st_maxnlocks = region->stat.st_nlocks;
+
+ if ((newl =
+ SH_TAILQ_FIRST(&region->free_locks, __db_lock)) != NULL)
+ SH_TAILQ_REMOVE(
+ &region->free_locks, newl, links, __db_lock);
+ if (newl == NULL) {
+ __db_err(dbenv, __db_lock_err, "locks");
+ return (ENOMEM);
+ }
+ newl->holder = locker;
+ newl->refcount = 1;
+ newl->mode = lock_mode;
+ newl->obj = SH_PTR_TO_OFF(newl, sh_obj);
/*
- * There was a conflict, wait. If this is the first waiter,
- * add the object to the deadlock detector's list.
+ * Now, insert the lock onto its locker's list.
+ * If the locker does not currently hold any locks,
+ * there's no reason to run a deadlock
+ * detector, save that information.
*/
- if (SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock) == NULL)
- SH_TAILQ_INSERT_HEAD(&region->dd_objs,
- sh_obj, dd_links, __db_lockobj);
+ no_dd = sh_locker->master_locker == INVALID_ROFF &&
+ SH_LIST_FIRST(
+ &sh_locker->child_locker, __db_locker) == NULL &&
+ SH_LIST_FIRST(&sh_locker->heldby, __db_lock) == NULL;
- SH_TAILQ_INSERT_HEAD(&sh_obj->waiters, newl, links, __db_lock);
- goto llist;
- }
+ SH_LIST_INSERT_HEAD(
+ &sh_locker->heldby, newl, locker_links, __db_lock);
+ break;
- if (lp == NULL && !ihold)
- for (lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock)) {
- if (CONFLICTS(lt, region, lp->mode, lock_mode) &&
- locker != lp->holder)
- break;
+ case UPGRADE:
+upgrade:
+ if (wwrite != NULL) {
+ lp = wwrite;
+ lp->refcount++;
+ lock->off = R_OFFSET(&lt->reginfo, lp);
+ lock->gen = lp->gen;
+ lock->mode = lock_mode;
}
- if (!LF_ISSET(DB_LOCK_SWITCH) && lp == NULL)
- SH_TAILQ_INSERT_TAIL(&sh_obj->holders, newl, links);
- else if (!LF_ISSET(DB_LOCK_NOWAIT)) {
- /*
- * If this is the first waiter, add the object to the
- * deadlock detector's list.
- */
- if (SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock) == NULL)
- SH_TAILQ_INSERT_HEAD(&region->dd_objs,
- sh_obj, dd_links, __db_lockobj);
- SH_TAILQ_INSERT_TAIL(&sh_obj->waiters, newl, links);
- } else {
- ret = DB_LOCK_NOTGRANTED;
- if (SH_LIST_FIRST(&sh_locker->heldby, __db_lock) == NULL
- && LOCKER_FREEABLE(sh_locker))
- __lock_freelocker( lt, region, sh_locker, locker_ndx);
- region->nnowaits++;
- goto err;
+ else
+ lp =
+ (struct __db_lock *)R_ADDR(&lt->reginfo, lock->off);
+ if (IS_WRITELOCK(lock_mode) && !IS_WRITELOCK(lp->mode))
+ sh_locker->nwrites++;
+ lp->mode = lock_mode;
+ goto done;
}
-llist:
- /*
- * Now, insert the lock onto its locker's list. If the locker does
- * not currently hold any locks, there's no reason to run a deadlock
- * detector, save that information.
- */
- on_locker_list = 1;
- no_dd = sh_locker->master_locker == INVALID_ROFF
- && SH_LIST_FIRST(&sh_locker->child_locker, __db_locker) == NULL
- && SH_LIST_FIRST(&sh_locker->heldby, __db_lock) == NULL;
-
- SH_LIST_INSERT_HEAD(&sh_locker->heldby, newl, locker_links, __db_lock);
+ switch (action) {
+ case UPGRADE:
+ DB_ASSERT(0);
+ break;
+ case GRANT:
+ newl->status = DB_LSTAT_HELD;
+ SH_TAILQ_INSERT_TAIL(&sh_obj->holders, newl, links);
+ break;
+ case HEAD:
+ case TAIL:
+ case SECOND:
+ if (LF_ISSET(DB_LOCK_NOWAIT)) {
+ ret = DB_LOCK_NOTGRANTED;
+ region->stat.st_nnowaits++;
+ goto err;
+ }
+ if ((lp = SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock)) == NULL)
+ SH_TAILQ_INSERT_HEAD(&region->dd_objs,
+ sh_obj, dd_links, __db_lockobj);
+ switch (action) {
+ case HEAD:
+ SH_TAILQ_INSERT_HEAD(
+ &sh_obj->waiters, newl, links, __db_lock);
+ break;
+ case SECOND:
+ SH_TAILQ_INSERT_AFTER(
+ &sh_obj->waiters, lp, newl, links, __db_lock);
+ break;
+ case TAIL:
+ SH_TAILQ_INSERT_TAIL(&sh_obj->waiters, newl, links);
+ break;
+ default:
+ DB_ASSERT(0);
+ }
- if (LF_ISSET(DB_LOCK_SWITCH) || lp != NULL) {
+ /* If we are switching drop the lock we had. */
if (LF_ISSET(DB_LOCK_SWITCH) &&
(ret = __lock_put_nolock(dbenv,
- lock, &ihold, DB_LOCK_NOWAITERS)) != 0)
+ lock, &ihold, DB_LOCK_NOWAITERS)) != 0) {
+ __lock_remove_waiter(lt, sh_obj, newl, DB_LSTAT_FREE);
goto err;
+ }
+
/*
* This is really a blocker for the thread. It should be
* initialized locked, so that when we try to acquire it, we
* block.
*/
newl->status = DB_LSTAT_WAITING;
- region->nconflicts++;
- if (region->detect == DB_LOCK_NORUN)
- region->need_dd = 1;
+ region->stat.st_nconflicts++;
+ region->need_dd = 1;
+ /*
+ * First check to see if this txn has expired.
+ * If not then see if the lock timeout is past
+ * the expiration of the txn, if it is, use
+ * the txn expiration time. lk_expire is passed
+ * to avoid an extra call to get the time.
+ */
+ if (__lock_expired(dbenv,
+ &sh_locker->lk_expire, &sh_locker->tx_expire)) {
+ newl->status = DB_LSTAT_EXPIRED;
+ sh_locker->lk_expire = sh_locker->tx_expire;
+
+ /* We are done. */
+ goto expired;
+ }
+
+ /*
+ * If a timeout was specified in this call then it
+ * takes priority. If a lock timeout has been specified
+ * for this transaction then use that, otherwise use
+ * the global timeout value.
+ */
+ if (!LF_ISSET(DB_LOCK_SET_TIMEOUT)) {
+ if (F_ISSET(sh_locker, DB_LOCKER_TIMEOUT))
+ timeout = sh_locker->lk_timeout;
+ else
+ timeout = region->lk_timeout;
+ }
+ if (timeout != 0)
+ __lock_expires(dbenv, &sh_locker->lk_expire, timeout);
+ else
+ LOCK_SET_TIME_INVALID(&sh_locker->lk_expire);
+
+ if (LOCK_TIME_ISVALID(&sh_locker->tx_expire) &&
+ (timeout == 0 || __lock_expired(dbenv,
+ &sh_locker->lk_expire, &sh_locker->tx_expire)))
+ sh_locker->lk_expire = sh_locker->tx_expire;
+ if (LOCK_TIME_ISVALID(&sh_locker->lk_expire) &&
+ (!LOCK_TIME_ISVALID(&region->next_timeout) ||
+ LOCK_TIME_GREATER(
+ &region->next_timeout, &sh_locker->lk_expire)))
+ region->next_timeout = sh_locker->lk_expire;
UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
/*
@@ -583,25 +985,41 @@ llist:
* detector should be run.
*/
if (region->detect != DB_LOCK_NORUN && !no_dd)
- (void)lock_detect(dbenv, 0, region->detect, &did_abort);
+ (void)__lock_detect(dbenv, region->detect, &did_abort);
- MUTEX_LOCK(dbenv, &newl->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &newl->mutex);
LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ /* Turn off lock timeout. */
+ if (newl->status != DB_LSTAT_EXPIRED)
+ LOCK_SET_TIME_INVALID(&sh_locker->lk_expire);
+
if (newl->status != DB_LSTAT_PENDING) {
- (void)__lock_checklocker(lt,
- newl, newl->holder, 0, &freed);
switch (newl->status) {
- case DB_LSTAT_ABORTED:
- on_locker_list = 0;
- ret = DB_LOCK_DEADLOCK;
- break;
- case DB_LSTAT_NOGRANT:
- ret = DB_LOCK_NOTGRANTED;
- break;
- default:
- ret = EINVAL;
- break;
+ case DB_LSTAT_ABORTED:
+ ret = DB_LOCK_DEADLOCK;
+ break;
+ case DB_LSTAT_NOTEXIST:
+ ret = DB_LOCK_NOTEXIST;
+ break;
+ case DB_LSTAT_EXPIRED:
+expired: SHOBJECT_LOCK(lt, region, sh_obj, obj_ndx);
+ if ((ret = __lock_put_internal(
+ lt, newl, obj_ndx,
+ DB_LOCK_UNLINK | DB_LOCK_FREE) != 0))
+ goto err;
+ if (LOCK_TIME_EQUAL(
+ &sh_locker->lk_expire,
+ &sh_locker->tx_expire)) {
+ region->stat.st_ntxntimeouts++;
+ return (DB_LOCK_NOTGRANTED);
+ } else {
+ region->stat.st_nlocktimeouts++;
+ return (DB_LOCK_NOTGRANTED);
+ }
+ default:
+ ret = EINVAL;
+ break;
}
goto err;
} else if (LF_ISSET(DB_LOCK_UPGRADE)) {
@@ -624,49 +1042,63 @@ llist:
lock->off = R_OFFSET(&lt->reginfo, newl);
lock->gen = newl->gen;
+ lock->mode = newl->mode;
+ sh_locker->nlocks++;
+ if (IS_WRITELOCK(newl->mode))
+ sh_locker->nwrites++;
return (0);
-upgrade:/*
- * This was an upgrade, so return the new lock to the free list and
- * upgrade the mode of the original lock.
- */
- ((struct __db_lock *)R_ADDR(&lt->reginfo, lock->off))->mode = lock_mode;
-
+done:
ret = 0;
- /* FALLTHROUGH */
+err:
+ if (newl != NULL &&
+ (t_ret = __lock_freelock(lt, newl, locker,
+ DB_LOCK_FREE | DB_LOCK_UNLINK)) != 0 && ret == 0)
+ ret = t_ret;
+ return (ret);
+}
-done:
-err: newl->status = DB_LSTAT_FREE;
- if (on_locker_list) {
- SH_LIST_REMOVE(newl, locker_links, __db_lock);
- }
- SH_TAILQ_INSERT_HEAD(&region->free_locks, newl, links, __db_lock);
- region->nlocks--;
+/*
+ * __lock_put_pp --
+ * DB_ENV->lock_put pre/post processing.
+ *
+ * PUBLIC: int __lock_put_pp __P((DB_ENV *, DB_LOCK *));
+ */
+int
+__lock_put_pp(dbenv, lock)
+ DB_ENV *dbenv;
+ DB_LOCK *lock;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_LOCK->lock_put", DB_INIT_LOCK);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_put(dbenv, lock);
+ if (rep_check)
+ __env_rep_exit(dbenv);
return (ret);
}
/*
- * Lock release routines.
+ * __lock_put --
+ * DB_ENV->lock_put.
*
- * The user callable one is lock_put and the three we use internally are
- * __lock_put_nolock, __lock_put_internal and __lock_downgrade.
+ * PUBLIC: int __lock_put __P((DB_ENV *, DB_LOCK *));
*/
int
-lock_put(dbenv, lock)
+__lock_put(dbenv, lock)
DB_ENV *dbenv;
DB_LOCK *lock;
{
DB_LOCKTAB *lt;
int ret, run_dd;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_put(dbenv, lock));
-#endif
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
-
if (IS_RECOVERING(dbenv))
return (0);
@@ -676,8 +1108,14 @@ lock_put(dbenv, lock)
ret = __lock_put_nolock(dbenv, lock, &run_dd, 0);
UNLOCKREGION(dbenv, lt);
+ /*
+ * Only run the lock detector if put told us to AND we are running
+ * in auto-detect mode. If we are not running in auto-detect, then
+ * a call to lock_detect here will 0 the need_dd bit, but will not
+ * actually abort anything.
+ */
if (ret == 0 && run_dd)
- (void)lock_detect(dbenv, 0,
+ (void)__lock_detect(dbenv,
((DB_LOCKREGION *)lt->reginfo.primary)->detect, NULL);
return (ret);
}
@@ -687,41 +1125,45 @@ __lock_put_nolock(dbenv, lock, runp, flags)
DB_ENV *dbenv;
DB_LOCK *lock;
int *runp;
- int flags;
+ u_int32_t flags;
{
struct __db_lock *lockp;
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
- u_int32_t locker;
int ret;
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return (0);
+
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
lockp = (struct __db_lock *)R_ADDR(&lt->reginfo, lock->off);
- lock->off = LOCK_INVALID;
+ LOCK_INIT(*lock);
if (lock->gen != lockp->gen) {
- __db_err(dbenv, __db_lock_invalid, "lock_put");
- return (EACCES);
+ __db_err(dbenv, __db_lock_invalid, "DB_LOCK->lock_put");
+ return (EINVAL);
}
- locker = lockp->holder;
ret = __lock_put_internal(lt,
lockp, lock->ndx, flags | DB_LOCK_UNLINK | DB_LOCK_FREE);
*runp = 0;
- if (ret == 0 && region->need_dd && region->detect != DB_LOCK_NORUN) {
+ if (ret == 0 && region->detect != DB_LOCK_NORUN &&
+ (region->need_dd || LOCK_TIME_ISVALID(&region->next_timeout)))
*runp = 1;
- region->need_dd = 0;
- }
return (ret);
}
/*
* __lock_downgrade --
- * Used by the concurrent access product to downgrade write locks
- * back to iwrite locks.
+ *
+ * Used to downgrade locks. Currently this is used in two places: 1) by the
+ * Concurrent Data Store product to downgrade write locks back to iwrite locks
+ * and 2) to downgrade write-handle locks to read-handle locks at the end of
+ * an open/create.
*
* PUBLIC: int __lock_downgrade __P((DB_ENV *,
* PUBLIC: DB_LOCK *, db_lockmode_t, u_int32_t));
@@ -734,14 +1176,21 @@ __lock_downgrade(dbenv, lock, new_mode, flags)
u_int32_t flags;
{
struct __db_lock *lockp;
+ DB_LOCKER *sh_locker;
DB_LOCKOBJ *obj;
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
+ u_int32_t indx;
int ret;
COMPQUIET(flags, 0);
PANIC_CHECK(dbenv);
+ ret = 0;
+
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return (0);
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
@@ -751,35 +1200,48 @@ __lock_downgrade(dbenv, lock, new_mode, flags)
lockp = (struct __db_lock *)R_ADDR(&lt->reginfo, lock->off);
if (lock->gen != lockp->gen) {
__db_err(dbenv, __db_lock_invalid, "lock_downgrade");
- ret = EACCES;
+ ret = EINVAL;
goto out;
}
+ LOCKER_LOCK(lt, region, lockp->holder, indx);
+
+ if ((ret = __lock_getlocker(lt, lockp->holder,
+ indx, 0, &sh_locker)) != 0 || sh_locker == NULL) {
+ if (ret == 0)
+ ret = EINVAL;
+ __db_err(dbenv, __db_locker_invalid);
+ goto out;
+ }
+ if (IS_WRITELOCK(lockp->mode) && !IS_WRITELOCK(new_mode))
+ sh_locker->nwrites--;
+
+ if (new_mode == DB_LOCK_WWRITE)
+ F_SET(sh_locker, DB_LOCKER_DIRTY);
+
lockp->mode = new_mode;
/* Get the object associated with this lock. */
obj = (DB_LOCKOBJ *)((u_int8_t *)lockp + lockp->obj);
(void)__lock_promote(lt, obj, LF_ISSET(DB_LOCK_NOWAITERS));
- ++region->nreleases;
out: UNLOCKREGION(dbenv, lt);
- return (0);
+ return (ret);
}
static int
__lock_put_internal(lt, lockp, obj_ndx, flags)
DB_LOCKTAB *lt;
struct __db_lock *lockp;
- u_int32_t obj_ndx;
- u_int32_t flags;
+ u_int32_t obj_ndx, flags;
{
DB_LOCKOBJ *sh_obj;
DB_LOCKREGION *region;
- int no_reclaim, ret, state_changed;
+ int ret, state_changed;
region = lt->reginfo.primary;
- no_reclaim = ret = state_changed = 0;
+ ret = state_changed = 0;
if (!OBJ_LINKS_VALID(lockp)) {
/*
@@ -788,17 +1250,14 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
* already been done; all we need to do is return it to the
* free list.
*/
- lockp->status = DB_LSTAT_FREE;
- SH_TAILQ_INSERT_HEAD(
- &region->free_locks, lockp, links, __db_lock);
- region->nlocks--;
+ (void)__lock_freelock(lt, lockp, 0, DB_LOCK_FREE);
return (0);
}
if (LF_ISSET(DB_LOCK_DOALL))
- region->nreleases += lockp->refcount;
+ region->stat.st_nreleases += lockp->refcount;
else
- region->nreleases++;
+ region->stat.st_nreleases++;
if (!LF_ISSET(DB_LOCK_DOALL) && lockp->refcount > 1) {
lockp->refcount--;
@@ -812,8 +1271,8 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
sh_obj = (DB_LOCKOBJ *)((u_int8_t *)lockp + lockp->obj);
/* Remove this lock from its holders/waitlist. */
- if (lockp->status != DB_LSTAT_HELD)
- __lock_remove_waiter(lt->dbenv, sh_obj, lockp, DB_LSTAT_FREE);
+ if (lockp->status != DB_LSTAT_HELD && lockp->status != DB_LSTAT_PENDING)
+ __lock_remove_waiter(lt, sh_obj, lockp, DB_LSTAT_FREE);
else {
SH_TAILQ_REMOVE(&sh_obj->holders, lockp, links, __db_lock);
lockp->links.stqe_prev = -1;
@@ -822,15 +1281,12 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
if (LF_ISSET(DB_LOCK_NOPROMOTE))
state_changed = 0;
else
- state_changed =
- __lock_promote(lt, sh_obj, LF_ISSET(DB_LOCK_NOWAITERS));
-
- if (LF_ISSET(DB_LOCK_UNLINK))
- ret = __lock_checklocker(lt, lockp, lockp->holder, flags, NULL);
+ state_changed = __lock_promote(lt,
+ sh_obj, LF_ISSET(DB_LOCK_REMOVE | DB_LOCK_NOWAITERS));
/* Check if object should be reclaimed. */
- if (SH_TAILQ_FIRST(&sh_obj->holders, __db_lock) == NULL
- && SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock) == NULL) {
+ if (SH_TAILQ_FIRST(&sh_obj->holders, __db_lock) == NULL &&
+ SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock) == NULL) {
HASHREMOVE_EL(lt->obj_tab,
obj_ndx, __db_lockobj, links, sh_obj);
if (sh_obj->lockobj.size > sizeof(sh_obj->objdata))
@@ -838,17 +1294,13 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
SH_DBT_PTR(&sh_obj->lockobj));
SH_TAILQ_INSERT_HEAD(
&region->free_objs, sh_obj, links, __db_lockobj);
- region->nobjects--;
+ region->stat.st_nobjects--;
state_changed = 1;
}
/* Free lock. */
- if (!LF_ISSET(DB_LOCK_UNLINK) && LF_ISSET(DB_LOCK_FREE)) {
- lockp->status = DB_LSTAT_FREE;
- SH_TAILQ_INSERT_HEAD(
- &region->free_locks, lockp, links, __db_lock);
- region->nlocks--;
- }
+ if (LF_ISSET(DB_LOCK_UNLINK | DB_LOCK_FREE))
+ ret = __lock_freelock(lt, lockp, lockp->holder, flags);
/*
* If we did not promote anyone; we need to run the deadlock
@@ -865,18 +1317,15 @@ __lock_put_internal(lt, lockp, obj_ndx, flags)
*/
/*
- * __lock_checklocker --
- * If a locker has no more locks, then we can free the object.
- * Return a boolean indicating whether we freed the object or not.
+ * __lock_freelock --
+ * Free a lock. Unlink it from its locker if necessary.
*
- * Must be called without the locker's lock set.
*/
static int
-__lock_checklocker(lt, lockp, locker, flags, freed)
+__lock_freelock(lt, lockp, locker, flags)
DB_LOCKTAB *lt;
struct __db_lock *lockp;
u_int32_t locker, flags;
- int *freed;
{
DB_ENV *dbenv;
DB_LOCKER *sh_locker;
@@ -888,42 +1337,29 @@ __lock_checklocker(lt, lockp, locker, flags, freed)
region = lt->reginfo.primary;
ret = 0;
- if (freed != NULL)
- *freed = 0;
-
- LOCKER_LOCK(lt, region, locker, indx);
-
- /* If the locker's list is NULL, free up the locker. */
- if ((ret = __lock_getlocker(lt,
- locker, indx, 0, &sh_locker)) != 0 || sh_locker == NULL) {
- if (ret == 0)
- ret = EACCES;
- __db_err(lt->dbenv, __db_locker_invalid);
- goto freelock;
- }
-
- if (F_ISSET(sh_locker, DB_LOCKER_DELETED)) {
- LF_CLR(DB_LOCK_FREE);
- if (!LF_ISSET(DB_LOCK_IGNOREDEL))
- goto freelock;
- }
+ if (LF_ISSET(DB_LOCK_UNLINK)) {
+ LOCKER_LOCK(lt, region, locker, indx);
+ if ((ret = __lock_getlocker(lt,
+ locker, indx, 0, &sh_locker)) != 0 || sh_locker == NULL) {
+ if (ret == 0)
+ ret = EINVAL;
+ __db_err(dbenv, __db_locker_invalid);
+ return (ret);
+ }
- if (LF_ISSET(DB_LOCK_UNLINK))
SH_LIST_REMOVE(lockp, locker_links, __db_lock);
-
- if (SH_LIST_FIRST(&sh_locker->heldby, __db_lock) == NULL
- && LOCKER_FREEABLE(sh_locker)) {
- __lock_freelocker( lt, region, sh_locker, indx);
- if (freed != NULL)
- *freed = 1;
+ if (lockp->status == DB_LSTAT_HELD) {
+ sh_locker->nlocks--;
+ if (IS_WRITELOCK(lockp->mode))
+ sh_locker->nwrites--;
+ }
}
-freelock:
if (LF_ISSET(DB_LOCK_FREE)) {
lockp->status = DB_LSTAT_FREE;
SH_TAILQ_INSERT_HEAD(
&region->free_locks, lockp, links, __db_lock);
- region->nlocks--;
+ region->stat.st_nlocks--;
}
return (ret);
@@ -1019,15 +1455,13 @@ __lock_freefamilylocker(lt, locker)
LOCKER_LOCK(lt, region, locker, indx);
if ((ret = __lock_getlocker(lt,
- locker, indx, 0, &sh_locker)) != 0 || sh_locker == NULL) {
- if (ret == 0)
- ret = EACCES;
- goto freelock;
- }
+ locker, indx, 0, &sh_locker)) != 0 || sh_locker == NULL)
+ goto err;
+
if (SH_LIST_FIRST(&sh_locker->heldby, __db_lock) != NULL) {
ret = EINVAL;
__db_err(dbenv, "Freeing locker with locks");
- goto freelock;
+ goto err;
}
/* If this is part of a family, we must fix up its links. */
@@ -1036,7 +1470,7 @@ __lock_freefamilylocker(lt, locker)
__lock_freelocker(lt, region, sh_locker, indx);
-freelock:
+err:
UNLOCKREGION(dbenv, lt);
return (ret);
}
@@ -1046,11 +1480,8 @@ freelock:
* common code for deleting a locker.
*
* This must be called with the locker bucket locked.
- *
- * PUBLIC: void __lock_freelocker __P((DB_LOCKTAB *,
- * PUBLIC: DB_LOCKREGION *, DB_LOCKER *, u_int32_t));
*/
-void
+static void
__lock_freelocker(lt, region, sh_locker, indx)
DB_LOCKTAB *lt;
DB_LOCKREGION *region;
@@ -1062,7 +1493,152 @@ __lock_freelocker(lt, region, sh_locker, indx)
lt->locker_tab, indx, __db_locker, links, sh_locker);
SH_TAILQ_INSERT_HEAD(
&region->free_lockers, sh_locker, links, __db_locker);
- region->nlockers--;
+ SH_TAILQ_REMOVE(&region->lockers, sh_locker, ulinks, __db_locker);
+ region->stat.st_nlockers--;
+}
+
+/*
+ * __lock_set_timeout
+ * -- set timeout values in shared memory.
+ * This is called from the transaction system.
+ * We either set the time that this tranaction expires or the
+ * amount of time that a lock for this transaction is permitted
+ * to wait.
+ *
+ * PUBLIC: int __lock_set_timeout __P(( DB_ENV *,
+ * PUBLIC: u_int32_t, db_timeout_t, u_int32_t));
+ */
+int
+__lock_set_timeout(dbenv, locker, timeout, op)
+ DB_ENV *dbenv;
+ u_int32_t locker;
+ db_timeout_t timeout;
+ u_int32_t op;
+{
+ DB_LOCKTAB *lt;
+ int ret;
+
+ lt = dbenv->lk_handle;
+
+ LOCKREGION(dbenv, lt);
+ ret = __lock_set_timeout_internal(dbenv, locker, timeout, op);
+ UNLOCKREGION(dbenv, lt);
+ return (ret);
+}
+/*
+ * __lock_set_timeout_internal
+ * -- set timeout values in shared memory.
+ * This is the internal version called from the lock system.
+ * We either set the time that this tranaction expires or the
+ * amount of time that a lock for this transaction is permitted
+ * to wait.
+ *
+ */
+static int
+__lock_set_timeout_internal(dbenv, locker, timeout, op)
+ DB_ENV *dbenv;
+ u_int32_t locker;
+ db_timeout_t timeout;
+ u_int32_t op;
+{
+ DB_LOCKER *sh_locker;
+ DB_LOCKREGION *region;
+ DB_LOCKTAB *lt;
+ u_int32_t locker_ndx;
+ int ret;
+
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+
+ LOCKER_LOCK(lt, region, locker, locker_ndx);
+ ret = __lock_getlocker(lt, locker, locker_ndx, 1, &sh_locker);
+
+ if (ret != 0)
+ return (ret);
+
+ if (op == DB_SET_TXN_TIMEOUT) {
+ if (timeout == 0)
+ LOCK_SET_TIME_INVALID(&sh_locker->tx_expire);
+ else
+ __lock_expires(dbenv, &sh_locker->tx_expire, timeout);
+ } else if (op == DB_SET_LOCK_TIMEOUT) {
+ sh_locker->lk_timeout = timeout;
+ F_SET(sh_locker, DB_LOCKER_TIMEOUT);
+ } else if (op == DB_SET_TXN_NOW) {
+ LOCK_SET_TIME_INVALID(&sh_locker->tx_expire);
+ __lock_expires(dbenv, &sh_locker->tx_expire, 0);
+ sh_locker->lk_expire = sh_locker->tx_expire;
+ if (!LOCK_TIME_ISVALID(&region->next_timeout) ||
+ LOCK_TIME_GREATER(
+ &region->next_timeout, &sh_locker->lk_expire))
+ region->next_timeout = sh_locker->lk_expire;
+ } else
+ return (EINVAL);
+
+ return (0);
+}
+
+/*
+ * __lock_inherit_timeout
+ * -- inherit timeout values from parent locker.
+ * This is called from the transaction system. This will
+ * return EINVAL if the parent does not exist or did not
+ * have a current txn timeout set.
+ *
+ * PUBLIC: int __lock_inherit_timeout __P(( DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__lock_inherit_timeout(dbenv, parent, locker)
+ DB_ENV *dbenv;
+ u_int32_t parent, locker;
+{
+ DB_LOCKER *parent_locker, *sh_locker;
+ DB_LOCKREGION *region;
+ DB_LOCKTAB *lt;
+ u_int32_t locker_ndx;
+ int ret;
+
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+ ret = 0;
+ LOCKREGION(dbenv, lt);
+
+ /* If the parent does not exist, we are done. */
+ LOCKER_LOCK(lt, region, parent, locker_ndx);
+ if ((ret = __lock_getlocker(lt,
+ parent, locker_ndx, 0, &parent_locker)) != 0)
+ goto err;
+
+ /*
+ * If the parent is not there yet, thats ok. If it
+ * does not have any timouts set, then avoid creating
+ * the child locker at this point.
+ */
+ if (parent_locker == NULL ||
+ (LOCK_TIME_ISVALID(&parent_locker->tx_expire) &&
+ !F_ISSET(parent_locker, DB_LOCKER_TIMEOUT))) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ LOCKER_LOCK(lt, region, locker, locker_ndx);
+ if ((ret = __lock_getlocker(lt,
+ locker, locker_ndx, 1, &sh_locker)) != 0)
+ goto err;
+
+ sh_locker->tx_expire = parent_locker->tx_expire;
+
+ if (F_ISSET(parent_locker, DB_LOCKER_TIMEOUT)) {
+ sh_locker->lk_timeout = parent_locker->lk_timeout;
+ F_SET(sh_locker, DB_LOCKER_TIMEOUT);
+ if (!LOCK_TIME_ISVALID(&parent_locker->tx_expire))
+ ret = EINVAL;
+ }
+
+done:
+err:
+ UNLOCKREGION(dbenv, lt);
+ return (ret);
}
/*
@@ -1101,13 +1677,13 @@ __lock_getlocker(lt, locker, indx, create, retp)
/* Create new locker and then insert it into hash table. */
if ((sh_locker = SH_TAILQ_FIRST(
&region->free_lockers, __db_locker)) == NULL) {
- __db_err(lt->dbenv, __db_lock_err, "locker entries");
+ __db_err(dbenv, __db_lock_err, "locker entries");
return (ENOMEM);
}
SH_TAILQ_REMOVE(
&region->free_lockers, sh_locker, links, __db_locker);
- if (++region->nlockers > region->maxnlockers)
- region->maxnlockers = region->nlockers;
+ if (++region->stat.st_nlockers > region->stat.st_maxnlockers)
+ region->stat.st_maxnlockers = region->stat.st_nlockers;
sh_locker->id = locker;
sh_locker->dd_id = 0;
@@ -1116,8 +1692,15 @@ __lock_getlocker(lt, locker, indx, create, retp)
SH_LIST_INIT(&sh_locker->child_locker);
sh_locker->flags = 0;
SH_LIST_INIT(&sh_locker->heldby);
+ sh_locker->nlocks = 0;
+ sh_locker->nwrites = 0;
+ sh_locker->lk_timeout = 0;
+ LOCK_SET_TIME_INVALID(&sh_locker->tx_expire);
+ LOCK_SET_TIME_INVALID(&sh_locker->lk_expire);
HASHINSERT(lt->locker_tab, indx, __db_locker, links, sh_locker);
+ SH_TAILQ_INSERT_HEAD(&region->lockers,
+ sh_locker, ulinks, __db_locker);
}
*retp = sh_locker;
@@ -1131,11 +1714,8 @@ __lock_getlocker(lt, locker, indx, create, retp)
* the table.
*
* This must be called with the object bucket locked.
- *
- * PUBLIC: int __lock_getobj __P((DB_LOCKTAB *,
- * PUBLIC: const DBT *, u_int32_t, int, DB_LOCKOBJ **));
*/
-int
+static int
__lock_getobj(lt, obj, ndx, create, retp)
DB_LOCKTAB *lt;
const DBT *obj;
@@ -1185,8 +1765,8 @@ __lock_getobj(lt, obj, ndx, create, retp)
SH_TAILQ_REMOVE(
&region->free_objs, sh_obj, links, __db_lockobj);
- if (++region->nobjects > region->maxnobjects)
- region->maxnobjects = region->nobjects;
+ if (++region->stat.st_nobjects > region->stat.st_maxnobjects)
+ region->stat.st_maxnobjects = region->stat.st_nobjects;
SH_TAILQ_INIT(&sh_obj->waiters);
SH_TAILQ_INIT(&sh_obj->holders);
@@ -1220,7 +1800,7 @@ __lock_is_parent(lt, locker, sh_locker)
parent = sh_locker;
while (parent->parent_locker != INVALID_ROFF) {
parent = (DB_LOCKER *)
- R_ADDR(&lt->reginfo, parent->parent_locker);
+ R_ADDR(&lt->reginfo, parent->parent_locker);
if (parent->id == locker)
return (1);
}
@@ -1229,18 +1809,135 @@ __lock_is_parent(lt, locker, sh_locker)
}
/*
+ * __lock_inherit_locks --
+ * Called on child commit to merge child's locks with parent's.
+ */
+
+static int
+__lock_inherit_locks(lt, locker, flags)
+ DB_LOCKTAB *lt;
+ u_int32_t locker;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_LOCKER *sh_locker, *sh_parent;
+ DB_LOCKOBJ *obj;
+ DB_LOCKREGION *region;
+ int ret;
+ struct __db_lock *hlp, *lp;
+ u_int32_t ndx;
+
+ region = lt->reginfo.primary;
+ dbenv = lt->dbenv;
+
+ /*
+ * Get the committing locker and mark it as deleted.
+ * This allows us to traverse the locker links without
+ * worrying that someone else is deleting locks out
+ * from under us. However, if the locker doesn't
+ * exist, that just means that the child holds no
+ * locks, so inheritance is easy!
+ */
+ LOCKER_LOCK(lt, region, locker, ndx);
+ if ((ret = __lock_getlocker(lt,
+ locker, ndx, 0, &sh_locker)) != 0 ||
+ sh_locker == NULL ||
+ F_ISSET(sh_locker, DB_LOCKER_DELETED)) {
+ if (ret == 0 && sh_locker != NULL)
+ ret = EINVAL;
+ __db_err(dbenv, __db_locker_invalid);
+ goto err;
+ }
+
+ /* Make sure we are a child transaction. */
+ if (sh_locker->parent_locker == INVALID_ROFF) {
+ __db_err(dbenv, "Not a child transaction");
+ ret = EINVAL;
+ goto err;
+ }
+ sh_parent = (DB_LOCKER *)
+ R_ADDR(&lt->reginfo, sh_locker->parent_locker);
+ F_SET(sh_locker, DB_LOCKER_DELETED);
+
+ /*
+ * Now, lock the parent locker; move locks from
+ * the committing list to the parent's list.
+ */
+ LOCKER_LOCK(lt, region, locker, ndx);
+ if (F_ISSET(sh_parent, DB_LOCKER_DELETED)) {
+ if (ret == 0) {
+ __db_err(dbenv,
+ "Parent locker is not valid");
+ ret = EINVAL;
+ }
+ goto err;
+ }
+
+ /*
+ * In order to make it possible for a parent to have
+ * many, many children who lock the same objects, and
+ * not require an inordinate number of locks, we try
+ * to merge the child's locks with its parent's.
+ */
+ for (lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock);
+ lp != NULL;
+ lp = SH_LIST_FIRST(&sh_locker->heldby, __db_lock)) {
+ SH_LIST_REMOVE(lp, locker_links, __db_lock);
+
+ /* See if the parent already has a lock. */
+ obj = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
+ for (hlp = SH_TAILQ_FIRST(&obj->holders, __db_lock);
+ hlp != NULL;
+ hlp = SH_TAILQ_NEXT(hlp, links, __db_lock))
+ if (hlp->holder == sh_parent->id &&
+ lp->mode == hlp->mode)
+ break;
+
+ if (hlp != NULL) {
+ /* Parent already holds lock. */
+ hlp->refcount += lp->refcount;
+
+ /* Remove lock from object list and free it. */
+ DB_ASSERT(lp->status == DB_LSTAT_HELD);
+ SH_TAILQ_REMOVE(&obj->holders, lp, links, __db_lock);
+ (void)__lock_freelock(lt, lp, locker, DB_LOCK_FREE);
+ } else {
+ /* Just move lock to parent chains. */
+ SH_LIST_INSERT_HEAD(&sh_parent->heldby,
+ lp, locker_links, __db_lock);
+ lp->holder = sh_parent->id;
+ }
+
+ /*
+ * We may need to promote regardless of whether we simply
+ * moved the lock to the parent or changed the parent's
+ * reference count, because there might be a sibling waiting,
+ * who will now be allowed to make forward progress.
+ */
+ (void)__lock_promote(lt, obj,
+ LF_ISSET(DB_LOCK_NOWAITERS));
+ }
+
+ /* Transfer child counts to parent. */
+ sh_parent->nlocks += sh_locker->nlocks;
+ sh_parent->nwrites += sh_locker->nwrites;
+
+err: return (ret);
+}
+
+/*
* __lock_promote --
*
* Look through the waiters and holders lists and decide which (if any)
* locks can be promoted. Promote any that are eligible.
*
- * PUBLIC: int __lock_promote __P((DB_LOCKTAB *, DB_LOCKOBJ *, int));
+ * PUBLIC: int __lock_promote __P((DB_LOCKTAB *, DB_LOCKOBJ *, u_int32_t));
*/
int
-__lock_promote(lt, obj, not_waiters)
+__lock_promote(lt, obj, flags)
DB_LOCKTAB *lt;
DB_LOCKOBJ *obj;
- int not_waiters;
+ u_int32_t flags;
{
struct __db_lock *lp_w, *lp_h, *next_waiter;
DB_LOCKER *sh_locker;
@@ -1270,16 +1967,25 @@ __lock_promote(lt, obj, not_waiters)
lp_w = next_waiter) {
had_waiters = 1;
next_waiter = SH_TAILQ_NEXT(lp_w, links, __db_lock);
+
+ /* Waiter may have aborted or expired. */
+ if (lp_w->status != DB_LSTAT_WAITING)
+ continue;
/* Are we switching locks? */
- if (not_waiters && lp_w->mode == DB_LOCK_WAIT)
+ if (LF_ISSET(DB_LOCK_NOWAITERS) && lp_w->mode == DB_LOCK_WAIT)
continue;
+
+ if (LF_ISSET(DB_LOCK_REMOVE)) {
+ __lock_remove_waiter(lt, obj, lp_w, DB_LSTAT_NOTEXIST);
+ continue;
+ }
for (lp_h = SH_TAILQ_FIRST(&obj->holders, __db_lock);
lp_h != NULL;
lp_h = SH_TAILQ_NEXT(lp_h, links, __db_lock)) {
if (lp_h->holder != lp_w->holder &&
CONFLICTS(lt, region, lp_h->mode, lp_w->mode)) {
-
- LOCKER_LOCK(lt, region, lp_w->holder, locker_ndx);
+ LOCKER_LOCK(lt,
+ region, lp_w->holder, locker_ndx);
if ((__lock_getlocker(lt, lp_w->holder,
locker_ndx, 0, &sh_locker)) != 0) {
DB_ASSERT(0);
@@ -1323,117 +2029,412 @@ __lock_promote(lt, obj, not_waiters)
* This must be called with the Object bucket locked.
*/
static void
-__lock_remove_waiter(dbenv, sh_obj, lockp, status)
- DB_ENV *dbenv;
+__lock_remove_waiter(lt, sh_obj, lockp, status)
+ DB_LOCKTAB *lt;
DB_LOCKOBJ *sh_obj;
struct __db_lock *lockp;
db_status_t status;
{
+ DB_LOCKREGION *region;
int do_wakeup;
+ region = lt->reginfo.primary;
+
do_wakeup = lockp->status == DB_LSTAT_WAITING;
SH_TAILQ_REMOVE(&sh_obj->waiters, lockp, links, __db_lock);
lockp->links.stqe_prev = -1;
lockp->status = status;
+ if (SH_TAILQ_FIRST(&sh_obj->waiters, __db_lock) == NULL)
+ SH_TAILQ_REMOVE(
+ &region->dd_objs,
+ sh_obj, dd_links, __db_lockobj);
/*
* Wake whoever is waiting on this lock.
- *
- * The MUTEX_UNLOCK macro normally resolves to a single argument,
- * keep the compiler quiet.
*/
if (do_wakeup)
- MUTEX_UNLOCK(dbenv, &lockp->mutex);
+ MUTEX_UNLOCK(lt->dbenv, &lockp->mutex);
+}
+
+/*
+ * __lock_expires -- set the expire time given the time to live.
+ * We assume that if timevalp is set then it contains "now".
+ * This avoids repeated system calls to get the time.
+ */
+static void
+__lock_expires(dbenv, timevalp, timeout)
+ DB_ENV *dbenv;
+ db_timeval_t *timevalp;
+ db_timeout_t timeout;
+{
+ if (!LOCK_TIME_ISVALID(timevalp))
+ __os_clock(dbenv, &timevalp->tv_sec, &timevalp->tv_usec);
+ if (timeout > 1000000) {
+ timevalp->tv_sec += timeout / 1000000;
+ timevalp->tv_usec += timeout % 1000000;
+ } else
+ timevalp->tv_usec += timeout;
+
+ if (timevalp->tv_usec > 1000000) {
+ timevalp->tv_sec++;
+ timevalp->tv_usec -= 1000000;
+ }
}
/*
- * __lock_printlock --
+ * __lock_expired -- determine if a lock has expired.
*
- * PUBLIC: void __lock_printlock __P((DB_LOCKTAB *, struct __db_lock *, int));
+ * PUBLIC: int __lock_expired __P((DB_ENV *, db_timeval_t *, db_timeval_t *));
*/
-void
-__lock_printlock(lt, lp, ispgno)
- DB_LOCKTAB *lt;
- struct __db_lock *lp;
- int ispgno;
+int
+__lock_expired(dbenv, now, timevalp)
+ DB_ENV *dbenv;
+ db_timeval_t *now, *timevalp;
{
- DB_LOCKOBJ *lockobj;
- db_pgno_t pgno;
- u_int32_t *fidp;
- u_int8_t *ptr, type;
- const char *mode, *status;
-
- switch (lp->mode) {
- case DB_LOCK_IREAD:
- mode = "IREAD";
- break;
- case DB_LOCK_IWR:
- mode = "IWR";
- break;
- case DB_LOCK_IWRITE:
- mode = "IWRITE";
- break;
- case DB_LOCK_NG:
- mode = "NG";
- break;
- case DB_LOCK_READ:
- mode = "READ";
- break;
- case DB_LOCK_WRITE:
- mode = "WRITE";
- break;
- case DB_LOCK_WAIT:
- mode = "WAIT";
- break;
- default:
- mode = "UNKNOWN";
- break;
+ if (!LOCK_TIME_ISVALID(timevalp))
+ return (0);
+
+ if (!LOCK_TIME_ISVALID(now))
+ __os_clock(dbenv, &now->tv_sec, &now->tv_usec);
+
+ return (now->tv_sec > timevalp->tv_sec ||
+ (now->tv_sec == timevalp->tv_sec &&
+ now->tv_usec >= timevalp->tv_usec));
+}
+
+/*
+ * __lock_trade --
+ *
+ * Trade locker ids on a lock. This is used to reassign file locks from
+ * a transactional locker id to a long-lived locker id. This should be
+ * called with the region mutex held.
+ */
+static int
+__lock_trade(dbenv, lock, new_locker)
+ DB_ENV *dbenv;
+ DB_LOCK *lock;
+ u_int32_t new_locker;
+{
+ struct __db_lock *lp;
+ DB_LOCKREGION *region;
+ DB_LOCKTAB *lt;
+ DB_LOCKER *sh_locker;
+ int ret;
+ u_int32_t locker_ndx;
+
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+
+ lp = (struct __db_lock *)R_ADDR(&lt->reginfo, lock->off);
+
+ /* If the lock is already released, simply return. */
+ if (lp->gen != lock->gen)
+ return (DB_NOTFOUND);
+
+ /* Make sure that we can get new locker and add this lock to it. */
+ LOCKER_LOCK(lt, region, new_locker, locker_ndx);
+ if ((ret =
+ __lock_getlocker(lt, new_locker, locker_ndx, 0, &sh_locker)) != 0)
+ return (ret);
+
+ if (sh_locker == NULL) {
+ __db_err(dbenv, "Locker does not exist");
+ return (EINVAL);
}
- switch (lp->status) {
- case DB_LSTAT_ABORTED:
- status = "ABORT";
- break;
- case DB_LSTAT_ERR:
- status = "ERROR";
- break;
- case DB_LSTAT_FREE:
- status = "FREE";
- break;
- case DB_LSTAT_HELD:
- status = "HELD";
- break;
- case DB_LSTAT_NOGRANT:
- status = "NONE";
- break;
- case DB_LSTAT_WAITING:
- status = "WAIT";
- break;
- case DB_LSTAT_PENDING:
- status = "PENDING";
+
+ /* Remove the lock from its current locker. */
+ if ((ret = __lock_freelock(lt, lp, lp->holder, DB_LOCK_UNLINK)) != 0)
+ return (ret);
+
+ /* Add lock to its new locker. */
+ SH_LIST_INSERT_HEAD(&sh_locker->heldby, lp, locker_links, __db_lock);
+ sh_locker->nlocks++;
+ if (IS_WRITELOCK(lp->mode))
+ sh_locker->nwrites++;
+ lp->holder = new_locker;
+
+ return (0);
+}
+
+/*
+ * Lock list routines.
+ * The list is composed of a 32-bit count of locks followed by
+ * each lock. A lock is represented by a 16-bit page-count, a lock
+ * object and a page list. A lock object consists of a 16-bit size
+ * and the object itself. In a pseudo BNF notation, you get:
+ *
+ * LIST = COUNT32 LOCK*
+ * LOCK = COUNT16 LOCKOBJ PAGELIST
+ * LOCKOBJ = COUNT16 OBJ
+ * PAGELIST = COUNT32*
+ *
+ * (Recall that X* means "0 or more X's")
+ *
+ * In most cases, the OBJ is a struct __db_ilock and the page list is
+ * a series of (32-bit) page numbers that should get written into the
+ * pgno field of the __db_ilock. So, the actual number of pages locked
+ * is the number of items in the PAGELIST plus 1. If this is an application-
+ * specific lock, then we cannot interpret obj and the pagelist must
+ * be empty.
+ *
+ * Consider a lock list for: File A, pages 1&2, File B pages 3-5, Applock
+ * This would be represented as:
+ * 5 1 [fid=A;page=1] 2 2 [fid=B;page=3] 4 5 0 APPLOCK
+ * ------------------ -------------------- ---------
+ * LOCK for file A LOCK for file B application-specific lock
+ */
+
+#define MAX_PGNOS 0xffff
+
+/*
+ * These macros are bigger than one might exepect becasue the
+ * Solaris compiler says that a cast does not return an lvalue,
+ * so constructs like *(u_int32_t*)dp = count; generate warnings.
+ */
+
+#define RET_SIZE(size, count) ((size) + \
+ sizeof(u_int32_t) + (count) * 2 * sizeof(u_int16_t))
+
+#define PUT_COUNT(dp, count) do { u_int32_t *ip = (u_int32_t *)dp;\
+ *ip = count; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int32_t); \
+ } while (0)
+#define PUT_PCOUNT(dp, count) do { u_int16_t *ip = (u_int16_t *)dp;\
+ *ip = count; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int16_t); \
+ } while (0)
+#define PUT_SIZE(dp, size) do { u_int16_t *ip = (u_int16_t *)dp;\
+ *ip = size; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int16_t); \
+ } while (0)
+#define PUT_PGNO(dp, pgno) do { db_pgno_t *ip = (db_pgno_t *)dp;\
+ *ip = pgno; \
+ dp = (u_int8_t *)dp + \
+ sizeof(db_pgno_t); \
+ } while (0)
+#define COPY_OBJ(dp, obj) do { \
+ memcpy(dp, obj->data, obj->size); \
+ dp = (u_int8_t *)dp + \
+ ALIGN(obj->size, \
+ sizeof(u_int32_t)); \
+ } while (0)
+
+#define GET_COUNT(dp, count) do { \
+ (count) = *(u_int32_t *) dp; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int32_t); \
+ } while (0);
+#define GET_PCOUNT(dp, count) do { \
+ (count) = *(u_int16_t *) dp; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int16_t); \
+ } while (0);
+#define GET_SIZE(dp, size) do { \
+ (size) = *(u_int16_t *) dp; \
+ dp = (u_int8_t *)dp + \
+ sizeof(u_int16_t); \
+ } while (0);
+#define GET_PGNO(dp, pgno) do { \
+ (pgno) = *(db_pgno_t *) dp; \
+ dp = (u_int8_t *)dp + \
+ sizeof(db_pgno_t); \
+ } while (0);
+
+static int
+__lock_fix_list(dbenv, list_dbt, nlocks)
+ DB_ENV *dbenv;
+ DBT *list_dbt;
+ u_int32_t nlocks;
+{
+ DBT *obj;
+ DB_LOCK_ILOCK *lock, *plock;
+ u_int32_t i, j, nfid, npgno, size;
+ int ret;
+ u_int8_t *data, *dp;
+
+ size = list_dbt->size;
+ if (size == 0)
+ return (0);
+
+ obj = (DBT *) list_dbt->data;
+
+ /*
+ * If necessary sort the list of locks so that locks
+ * on the same fileid are together. We do not sort
+ * 1 or 2 locks because by definition if there are
+ * locks on the same fileid they will be together.
+ * The sort will also move any locks that do not
+ * look like page locks to the end of the list
+ * so we can stop looking for locks we can combine
+ * when we hit one.
+ */
+ switch (nlocks) {
+ case 1:
+ size = RET_SIZE(obj->size, 1);
+ if ((ret = __os_malloc(dbenv, size, &data)) != 0)
+ return (ret);
+
+ dp = data;
+ PUT_COUNT(dp, 1);
+ PUT_PCOUNT(dp, 0);
+ PUT_SIZE(dp, obj->size);
+ COPY_OBJ(dp, obj);
break;
+
default:
- status = "UNKNOWN";
- break;
+ /* Sort so that all locks with same fileid are together. */
+ qsort(list_dbt->data, nlocks, sizeof(DBT), __lock_sort_cmp);
+ /* FALL THROUGH */
+ case 2:
+ nfid = npgno = 0;
+ i = 0;
+ if (obj->size != sizeof(DB_LOCK_ILOCK))
+ goto not_ilock;
+
+ nfid = 1;
+ plock = (DB_LOCK_ILOCK *)obj->data;
+
+ /* We use ulen to keep track of the number of pages. */
+ j = 0;
+ obj[0].ulen = 0;
+ for (i = 1; i < nlocks; i++) {
+ if (obj[i].size != sizeof(DB_LOCK_ILOCK))
+ break;
+ lock = (DB_LOCK_ILOCK *)obj[i].data;
+ if (obj[j].ulen < MAX_PGNOS &&
+ lock->type == plock->type &&
+ memcmp(lock->fileid,
+ plock->fileid, DB_FILE_ID_LEN) == 0) {
+ obj[j].ulen++;
+ npgno++;
+ } else {
+ nfid++;
+ plock = lock;
+ j = i;
+ obj[j].ulen = 0;
+ }
+ }
+
+not_ilock:
+ size = nfid * sizeof(DB_LOCK_ILOCK);
+ size += npgno * sizeof(db_pgno_t);
+ /* Add the number of nonstandard locks and get their size. */
+ nfid += nlocks - i;
+ for (; i < nlocks; i++) {
+ size += obj[i].size;
+ obj[i].ulen = 0;
+ }
+
+ size = RET_SIZE(size, nfid);
+ if ((ret = __os_malloc(dbenv, size, &data)) != 0)
+ return (ret);
+
+ dp = data;
+ PUT_COUNT(dp, nfid);
+
+ for (i = 0; i < nlocks; i = j) {
+ PUT_PCOUNT(dp, obj[i].ulen);
+ PUT_SIZE(dp, obj[i].size);
+ COPY_OBJ(dp, obj);
+ lock = (DB_LOCK_ILOCK *)obj[i].data;
+ for (j = i + 1; j <= i + obj[i].ulen; j++) {
+ lock = (DB_LOCK_ILOCK *)obj[j].data;
+ PUT_PGNO(dp, lock->pgno);
+ }
+ }
}
- printf("\t%lx\t%s\t%lu\t%s\t",
- (u_long)lp->holder, mode, (u_long)lp->refcount, status);
-
- lockobj = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
- ptr = SH_DBT_PTR(&lockobj->lockobj);
- if (ispgno && lockobj->lockobj.size == sizeof(struct __db_ilock)) {
- /* Assume this is a DBT lock. */
- memcpy(&pgno, ptr, sizeof(db_pgno_t));
- fidp = (u_int32_t *)(ptr + sizeof(db_pgno_t));
- type = *(u_int8_t *)(ptr + sizeof(db_pgno_t) + DB_FILE_ID_LEN);
- printf("%s %lu (%lu %lu %lu %lu %lu)\n",
- type == DB_PAGE_LOCK ? "page" : "record",
- (u_long)pgno,
- (u_long)fidp[0], (u_long)fidp[1], (u_long)fidp[2],
- (u_long)fidp[3], (u_long)fidp[4]);
- } else {
- printf("0x%lx ", (u_long)R_OFFSET(&lt->reginfo, lockobj));
- __db_pr(ptr, lockobj->lockobj.size);
- printf("\n");
+
+ (void)__os_free(dbenv, list_dbt->data);
+
+ list_dbt->data = data;
+ list_dbt->size = size;
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __lock_get_list __P((DB_ENV *, u_int32_t, u_int32_t,
+ * PUBLIC: db_lockmode_t, DBT *));
+ */
+int
+__lock_get_list(dbenv, locker, flags, lock_mode, list)
+ DB_ENV *dbenv;
+ u_int32_t locker, flags;
+ db_lockmode_t lock_mode;
+ DBT *list;
+{
+ DBT obj_dbt;
+ DB_LOCK ret_lock;
+ DB_LOCK_ILOCK *lock;
+ DB_LOCKTAB *lt;
+ DB_LOCKREGION *region;
+ db_pgno_t save_pgno;
+ u_int16_t npgno, size;
+ u_int32_t i, nlocks;
+ int ret;
+ void *dp;
+
+ if (list->size == 0)
+ return (0);
+ ret = 0;
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+ dp = list->data;
+
+ GET_COUNT(dp, nlocks);
+ LOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+
+ for (i = 0; i < nlocks; i++) {
+ GET_PCOUNT(dp, npgno);
+ GET_SIZE(dp, size);
+ lock = (DB_LOCK_ILOCK *) dp;
+ save_pgno = lock->pgno;
+ obj_dbt.data = dp;
+ obj_dbt.size = size;
+ dp = ((u_int8_t *)dp) + ALIGN(size, sizeof(u_int32_t));
+ do {
+ if ((ret = __lock_get_internal(lt, locker,
+ flags, &obj_dbt, lock_mode, 0, &ret_lock)) != 0) {
+ lock->pgno = save_pgno;
+ goto err;
+ }
+ if (npgno != 0)
+ GET_PGNO(dp, lock->pgno);
+ } while (npgno-- != 0);
+ lock->pgno = save_pgno;
}
+
+err:
+ UNLOCKREGION(dbenv, (DB_LOCKTAB *)dbenv->lk_handle);
+ return (ret);
+}
+
+static int
+__lock_sort_cmp(a, b)
+ const void *a, *b;
+{
+ const DBT *d1, *d2;
+ DB_LOCK_ILOCK *l1, *l2;
+
+ d1 = a;
+ d2 = b;
+
+ /* Force all non-standard locks to sort at end. */
+ if (d1->size != sizeof(DB_LOCK_ILOCK)) {
+ if (d2->size != sizeof(DB_LOCK_ILOCK))
+ return (d1->size - d2->size);
+ else
+ return (1);
+ } else if (d2->size != sizeof(DB_LOCK_ILOCK))
+ return (-1);
+
+ l1 = d1->data;
+ l2 = d2->data;
+ if (l1->type != l2->type)
+ return (l1->type - l2->type);
+ return (memcmp(l1->fileid, l2->fileid, DB_FILE_ID_LEN));
}
diff --git a/db/lock/lock_deadlock.c b/db/lock/lock_deadlock.c
index 1f37db389..d7cf5e0b7 100644
--- a/db/lock/lock_deadlock.c
+++ b/db/lock/lock_deadlock.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock_deadlock.c,v 11.23 2000/12/08 20:15:31 ubell Exp $";
+static const char revid[] = "$Id: lock_deadlock.c,v 11.66 2003/11/19 19:59:02 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,19 +17,11 @@ static const char revid[] = "$Id: lock_deadlock.c,v 11.23 2000/12/08 20:15:31 ub
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "txn.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
#define ISSET_MAP(M, N) ((M)[(N) / 32] & (1 << (N) % 32))
@@ -51,159 +43,273 @@ static const char revid[] = "$Id: lock_deadlock.c,v 11.23 2000/12/08 20:15:31 ub
typedef struct {
int valid;
+ int self_wait;
+ int in_abort;
+ u_int32_t count;
u_int32_t id;
u_int32_t last_lock;
+ ssize_t last_obj;
u_int32_t last_locker_id;
db_pgno_t pgno;
} locker_info;
-static int __dd_abort __P((DB_ENV *, locker_info *));
-static int __dd_build
- __P((DB_ENV *, u_int32_t **, u_int32_t *, locker_info **));
-static int __dd_find
- __P((DB_ENV *,u_int32_t *, locker_info *, u_int32_t, u_int32_t ***));
+static int __dd_abort __P((DB_ENV *, locker_info *));
+static int __dd_build __P((DB_ENV *,
+ u_int32_t, u_int32_t **, u_int32_t *, u_int32_t *, locker_info **));
+static int __dd_find __P((DB_ENV *,
+ u_int32_t *, locker_info *, u_int32_t, u_int32_t, u_int32_t ***));
+static int __dd_isolder __P((u_int32_t, u_int32_t, u_int32_t, u_int32_t));
+static int __dd_verify __P((locker_info *, u_int32_t *, u_int32_t *,
+ u_int32_t *, u_int32_t, u_int32_t, u_int32_t));
#ifdef DIAGNOSTIC
-static void __dd_debug __P((DB_ENV *, locker_info *, u_int32_t *, u_int32_t));
+static void __dd_debug
+ __P((DB_ENV *, locker_info *, u_int32_t *, u_int32_t, u_int32_t));
#endif
+/*
+ * __lock_detect_pp --
+ * DB_ENV->lock_detect pre/post processing.
+ *
+ * PUBLIC: int __lock_detect_pp __P((DB_ENV *, u_int32_t, u_int32_t, int *));
+ */
int
-lock_detect(dbenv, flags, atype, abortp)
+__lock_detect_pp(dbenv, flags, atype, abortp)
DB_ENV *dbenv;
u_int32_t flags, atype;
int *abortp;
{
+ int ret, rep_check;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_detect", DB_INIT_LOCK);
+
+ /* Validate arguments. */
+ if ((ret = __db_fchk(dbenv, "DB_ENV->lock_detect", flags, 0)) != 0)
+ return (ret);
+ switch (atype) {
+ case DB_LOCK_DEFAULT:
+ case DB_LOCK_EXPIRE:
+ case DB_LOCK_MAXLOCKS:
+ case DB_LOCK_MINLOCKS:
+ case DB_LOCK_MINWRITE:
+ case DB_LOCK_OLDEST:
+ case DB_LOCK_RANDOM:
+ case DB_LOCK_YOUNGEST:
+ break;
+ default:
+ __db_err(dbenv,
+ "DB_ENV->lock_detect: unknown deadlock detection mode specified");
+ return (EINVAL);
+ }
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_detect(dbenv, atype, abortp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_detect --
+ * DB_ENV->lock_detect.
+ *
+ * PUBLIC: int __lock_detect __P((DB_ENV *, u_int32_t, int *));
+ */
+int
+__lock_detect(dbenv, atype, abortp)
+ DB_ENV *dbenv;
+ u_int32_t atype;
+ int *abortp;
+{
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
+ DB_TXNMGR *tmgr;
+ db_timeval_t now;
locker_info *idmap;
- u_int32_t *bitmap, **deadp, **free_me, i, killid, nentries, nlockers;
- int do_pass, ret;
+ u_int32_t *bitmap, *copymap, **deadp, **free_me, *tmpmap;
+ u_int32_t i, keeper, killid, limit, nalloc, nlockers;
+ u_int32_t lock_max, txn_max;
+ int ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_detect(dbenv, flags, atype, abortp));
-#endif
+ /*
+ * If this environment is a replication client, then we must use the
+ * MINWRITE detection discipline.
+ */
+ if (__rep_is_client(dbenv))
+ atype = DB_LOCK_MINWRITE;
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
+ free_me = NULL;
lt = dbenv->lk_handle;
if (abortp != NULL)
*abortp = 0;
- /* Validate arguments. */
- if ((ret =
- __db_fchk(dbenv, "lock_detect", flags, DB_LOCK_CONFLICT)) != 0)
- return (ret);
-
/* Check if a detector run is necessary. */
LOCKREGION(dbenv, lt);
- if (LF_ISSET(DB_LOCK_CONFLICT)) {
- /* Make a pass every time a lock waits. */
- region = lt->reginfo.primary;
- do_pass = region->need_dd != 0;
- if (!do_pass) {
- UNLOCKREGION(dbenv, lt);
- return (0);
- }
+ /* Make a pass only if auto-detect would run. */
+ region = lt->reginfo.primary;
+
+ LOCK_SET_TIME_INVALID(&now);
+ if (region->need_dd == 0 &&
+ (!LOCK_TIME_ISVALID(&region->next_timeout) ||
+ !__lock_expired(dbenv, &now, &region->next_timeout))) {
+ UNLOCKREGION(dbenv, lt);
+ return (0);
}
+ if (region->need_dd == 0)
+ atype = DB_LOCK_EXPIRE;
+
+ /* Reset need_dd, so we know we've run the detector. */
+ region->need_dd = 0;
/* Build the waits-for bitmap. */
- ret = __dd_build(dbenv, &bitmap, &nlockers, &idmap);
+ ret = __dd_build(dbenv, atype, &bitmap, &nlockers, &nalloc, &idmap);
+ lock_max = region->stat.st_cur_maxid;
UNLOCKREGION(dbenv, lt);
- if (ret != 0)
+
+ /*
+ * We need the cur_maxid from the txn region as well. In order
+ * to avoid tricky synchronization between the lock and txn
+ * regions, we simply unlock the lock region and then lock the
+ * txn region. This introduces a small window during which the
+ * transaction system could then wrap. We're willing to return
+ * the wrong answer for "oldest" or "youngest" in those rare
+ * circumstances.
+ */
+ tmgr = dbenv->tx_handle;
+ if (tmgr != NULL) {
+ R_LOCK(dbenv, &tmgr->reginfo);
+ txn_max = ((DB_TXNREGION *)tmgr->reginfo.primary)->cur_maxid;
+ R_UNLOCK(dbenv, &tmgr->reginfo);
+ } else
+ txn_max = TXN_MAXIMUM;
+ if (ret != 0 || atype == DB_LOCK_EXPIRE)
return (ret);
if (nlockers == 0)
return (0);
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_WAITSFOR))
- __dd_debug(dbenv, idmap, bitmap, nlockers);
+ __dd_debug(dbenv, idmap, bitmap, nlockers, nalloc);
#endif
+ /* Now duplicate the bitmaps so we can verify deadlock participants. */
+ if ((ret = __os_calloc(dbenv, (size_t)nlockers,
+ sizeof(u_int32_t) * nalloc, &copymap)) != 0)
+ goto err;
+ memcpy(copymap, bitmap, nlockers * sizeof(u_int32_t) * nalloc);
+
+ if ((ret = __os_calloc(dbenv, sizeof(u_int32_t), nalloc, &tmpmap)) != 0)
+ goto err1;
+
/* Find a deadlock. */
- if ((ret = __dd_find(dbenv, bitmap, idmap, nlockers, &deadp)) != 0)
+ if ((ret =
+ __dd_find(dbenv, bitmap, idmap, nlockers, nalloc, &deadp)) != 0)
return (ret);
- nentries = ALIGN(nlockers, 32) / 32;
killid = BAD_KILLID;
free_me = deadp;
for (; *deadp != NULL; deadp++) {
if (abortp != NULL)
++*abortp;
- switch (atype) { /* Kill someone. */
- case DB_LOCK_OLDEST:
- /*
- * Find the first bit set in the current
- * array and then look for a lower tid in
- * the array.
- */
- for (i = 0; i < nlockers; i++)
- if (ISSET_MAP(*deadp, i)) {
- killid = i;
- break;
+ killid = (u_int32_t)((*deadp - bitmap) / nalloc);
+ limit = killid;
+ keeper = BAD_KILLID;
- }
- /*
- * It's conceivable that under XA, the locker could
- * have gone away.
- */
- if (killid == BAD_KILLID)
- break;
-
- /*
- * The oldest transaction has the lowest
- * transaction id.
- */
- for (i = killid + 1; i < nlockers; i++)
- if (ISSET_MAP(*deadp, i) &&
- idmap[i].id < idmap[killid].id)
- killid = i;
- break;
- case DB_LOCK_DEFAULT:
- case DB_LOCK_RANDOM:
- /*
- * We are trying to calculate the id of the
- * locker whose entry is indicated by deadlock.
- */
- killid = (*deadp - bitmap) / nentries;
+ if (atype == DB_LOCK_DEFAULT || atype == DB_LOCK_RANDOM)
+ goto dokill;
+ /*
+ * It's conceivable that under XA, the locker could
+ * have gone away.
+ */
+ if (killid == BAD_KILLID)
break;
- case DB_LOCK_YOUNGEST:
- /*
- * Find the first bit set in the current
- * array and then look for a lower tid in
- * the array.
- */
- for (i = 0; i < nlockers; i++)
- if (ISSET_MAP(*deadp, i)) {
- killid = i;
- break;
- }
- /*
- * It's conceivable that under XA, the locker could
- * have gone away.
- */
- if (killid == BAD_KILLID)
- break;
+ /*
+ * Start with the id that we know is deadlocked
+ * and then examine all other set bits and see
+ * if any are a better candidate for abortion
+ * and that they are genuinely part of the
+ * deadlock. The definition of "best":
+ * OLDEST: smallest id
+ * YOUNGEST: largest id
+ * MAXLOCKS: maximum count
+ * MINLOCKS: minimum count
+ * MINWRITE: minimum count
+ */
- /*
- * The youngest transaction has the highest
- * transaction id.
- */
- for (i = killid + 1; i < nlockers; i++)
- if (ISSET_MAP(*deadp, i) &&
- idmap[i].id > idmap[killid].id)
- killid = i;
- break;
- default:
- killid = BAD_KILLID;
- ret = EINVAL;
+ for (i = (killid + 1) % nlockers;
+ i != limit;
+ i = (i + 1) % nlockers) {
+ if (!ISSET_MAP(*deadp, i) || idmap[i].in_abort)
+ continue;
+ switch (atype) {
+ case DB_LOCK_OLDEST:
+ if (__dd_isolder(idmap[killid].id,
+ idmap[i].id, lock_max, txn_max))
+ continue;
+ keeper = i;
+ break;
+ case DB_LOCK_YOUNGEST:
+ if (__dd_isolder(idmap[i].id,
+ idmap[killid].id, lock_max, txn_max))
+ continue;
+ keeper = i;
+ break;
+ case DB_LOCK_MAXLOCKS:
+ if (idmap[i].count < idmap[killid].count)
+ continue;
+ keeper = i;
+ break;
+ case DB_LOCK_MINLOCKS:
+ case DB_LOCK_MINWRITE:
+ if (idmap[i].count > idmap[killid].count)
+ continue;
+ keeper = i;
+ break;
+ default:
+ killid = BAD_KILLID;
+ ret = EINVAL;
+ goto dokill;
+ }
+ if (__dd_verify(idmap, *deadp,
+ tmpmap, copymap, nlockers, nalloc, i))
+ killid = i;
}
- if (killid == BAD_KILLID)
+dokill: if (killid == BAD_KILLID)
continue;
+ /*
+ * There are cases in which our general algorithm will
+ * fail. Returning 1 from verify indicates that the
+ * particular locker is not only involved in a deadlock,
+ * but that killing him will allow others to make forward
+ * progress. Unfortunately, there are cases where we need
+ * to abort someone, but killing them will not necessarily
+ * ensure forward progress (imagine N readers all trying to
+ * acquire a write lock). In such a scenario, we'll have
+ * gotten all the way through the loop, we will have found
+ * someone to keep (keeper will be valid), but killid will
+ * still be the initial deadlocker. In this case, if the
+ * initial killid satisfies __dd_verify, kill it, else abort
+ * keeper and indicate that we need to run deadlock detection
+ * again.
+ */
+
+ if (keeper != BAD_KILLID && killid == limit &&
+ __dd_verify(idmap, *deadp,
+ tmpmap, copymap, nlockers, nalloc, killid) == 0) {
+ LOCKREGION(dbenv, lt);
+ region->need_dd = 1;
+ UNLOCKREGION(dbenv, lt);
+ killid = keeper;
+ }
+
/* Kill the locker with lockid idmap[killid]. */
if ((ret = __dd_abort(dbenv, &idmap[killid])) != 0) {
/*
@@ -221,9 +327,13 @@ lock_detect(dbenv, flags, atype, abortp)
__db_err(dbenv,
"Aborting locker %lx", (u_long)idmap[killid].id);
}
- __os_free(free_me, 0);
- __os_free(bitmap, 0);
- __os_free(idmap, 0);
+ __os_free(dbenv, tmpmap);
+err1: __os_free(dbenv, copymap);
+
+err: if (free_me != NULL)
+ __os_free(dbenv, free_me);
+ __os_free(dbenv, bitmap);
+ __os_free(dbenv, idmap);
return (ret);
}
@@ -236,9 +346,9 @@ lock_detect(dbenv, flags, atype, abortp)
# define DD_INVALID_ID ((u_int32_t) -1)
static int
-__dd_build(dbenv, bmp, nlockers, idmap)
+__dd_build(dbenv, atype, bmp, nlockers, allocp, idmap)
DB_ENV *dbenv;
- u_int32_t **bmp, *nlockers;
+ u_int32_t atype, **bmp, *nlockers, *allocp;
locker_info **idmap;
{
struct __db_lock *lp;
@@ -247,12 +357,30 @@ __dd_build(dbenv, bmp, nlockers, idmap)
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
locker_info *id_array;
- u_int32_t *bitmap, count, dd, *entryp, i, id, ndx, nentries, *tmpmap;
+ db_timeval_t now, min_timeout;
+ u_int32_t *bitmap, count, dd, *entryp, id, ndx, nentries, *tmpmap;
u_int8_t *pptr;
- int is_first, ret;
+ int expire_only, is_first, ret;
lt = dbenv->lk_handle;
region = lt->reginfo.primary;
+ LOCK_SET_TIME_INVALID(&now);
+ LOCK_SET_TIME_MAX(&min_timeout);
+ expire_only = atype == DB_LOCK_EXPIRE;
+
+ /*
+ * While we always check for expired timeouts, if we are called
+ * with DB_LOCK_EXPIRE, then we are only checking for timeouts
+ * (i.e., not doing deadlock detection at all). If we aren't
+ * doing real deadlock detection, then we can skip a significant,
+ * amount of the processing. In particular we do not build
+ * the conflict array and our caller needs to expect this.
+ */
+ if (expire_only) {
+ count = 0;
+ nentries = 0;
+ goto obj_loop;
+ }
/*
* We'll check how many lockers there are, add a few more in for
@@ -260,8 +388,7 @@ __dd_build(dbenv, bmp, nlockers, idmap)
* verify that we have enough room when we go back in and get the
* mutex the second time.
*/
-retry: count = region->nlockers;
- region->need_dd = 0;
+retry: count = region->stat.st_nlockers;
if (count == 0) {
*nlockers = 0;
@@ -271,7 +398,7 @@ retry: count = region->nlockers;
if (FLD_ISSET(dbenv->verbose, DB_VERB_DEADLOCK))
__db_err(dbenv, "%lu lockers", (u_long)count);
- count += 40;
+ count += 20;
nentries = ALIGN(count, 32) / 32;
/*
@@ -287,38 +414,46 @@ retry: count = region->nlockers;
if ((ret = __os_calloc(dbenv,
sizeof(u_int32_t), nentries, &tmpmap)) != 0) {
- __os_free(bitmap, sizeof(u_int32_t) * nentries);
+ __os_free(dbenv, bitmap);
return (ret);
}
if ((ret = __os_calloc(dbenv,
(size_t)count, sizeof(locker_info), &id_array)) != 0) {
- __os_free(bitmap, count * sizeof(u_int32_t) * nentries);
- __os_free(tmpmap, sizeof(u_int32_t) * nentries);
+ __os_free(dbenv, bitmap);
+ __os_free(dbenv, tmpmap);
return (ret);
}
/*
* Now go back in and actually fill in the matrix.
*/
- if (region->nlockers > count) {
- __os_free(bitmap, count * sizeof(u_int32_t) * nentries);
- __os_free(tmpmap, sizeof(u_int32_t) * nentries);
- __os_free(id_array, count * sizeof(locker_info));
+ if (region->stat.st_nlockers > count) {
+ __os_free(dbenv, bitmap);
+ __os_free(dbenv, tmpmap);
+ __os_free(dbenv, id_array);
goto retry;
}
/*
* First we go through and assign each locker a deadlock detector id.
*/
- for (id = 0, i = 0; i < region->locker_t_size; i++) {
- for (lip = SH_TAILQ_FIRST(&lt->locker_tab[i], __db_locker);
- lip != NULL; lip = SH_TAILQ_NEXT(lip, links, __db_locker))
- if (lip->master_locker == INVALID_ROFF) {
- lip->dd_id = id++;
- id_array[lip->dd_id].id = lip->id;
- } else
- lip->dd_id = DD_INVALID_ID;
+ for (id = 0, lip = SH_TAILQ_FIRST(&region->lockers, __db_locker);
+ lip != NULL;
+ lip = SH_TAILQ_NEXT(lip, ulinks, __db_locker)) {
+ if (lip->master_locker == INVALID_ROFF) {
+ lip->dd_id = id++;
+ id_array[lip->dd_id].id = lip->id;
+ if (atype == DB_LOCK_MINLOCKS ||
+ atype == DB_LOCK_MAXLOCKS)
+ id_array[lip->dd_id].count = lip->nlocks;
+ if (atype == DB_LOCK_MINWRITE)
+ id_array[lip->dd_id].count = lip->nwrites;
+ if (F_ISSET(lip, DB_LOCKER_INABORT))
+ id_array[lip->dd_id].in_abort = 1;
+ } else
+ lip->dd_id = DD_INVALID_ID;
+
}
/*
@@ -328,8 +463,11 @@ retry: count = region->nlockers;
* list and add an entry in the waitsfor matrix for each waiter/holder
* combination.
*/
+obj_loop:
for (op = SH_TAILQ_FIRST(&region->dd_objs, __db_lockobj);
op != NULL; op = SH_TAILQ_NEXT(op, dd_links, __db_lockobj)) {
+ if (expire_only)
+ goto look_waiters;
CLEAR_MAP(tmpmap, nentries);
/*
@@ -343,11 +481,20 @@ retry: count = region->nlockers;
if ((ret = __lock_getlocker(lt,
lp->holder, ndx, 0, &lockerp)) != 0)
continue;
- if (lockerp->dd_id == DD_INVALID_ID)
- dd = ((DB_LOCKER *)
- R_ADDR(&lt->reginfo,
- lockerp->master_locker))->dd_id;
- else
+
+ if (lockerp->dd_id == DD_INVALID_ID) {
+ dd = ((DB_LOCKER *)R_ADDR(&lt->reginfo,
+ lockerp->master_locker))->dd_id;
+ lockerp->dd_id = dd;
+ if (atype == DB_LOCK_MINLOCKS ||
+ atype == DB_LOCK_MAXLOCKS)
+ id_array[dd].count += lockerp->nlocks;
+ if (atype == DB_LOCK_MINWRITE)
+ id_array[dd].count += lockerp->nwrites;
+ if (F_ISSET(lockerp, DB_LOCKER_INABORT))
+ id_array[dd].in_abort = 1;
+
+ } else
dd = lockerp->dd_id;
id_array[dd].valid = 1;
@@ -363,6 +510,7 @@ retry: count = region->nlockers;
* Next, for each waiter, we set its row in the matrix
* equal to the map of holders we set up above.
*/
+look_waiters:
for (is_first = 1,
lp = SH_TAILQ_FIRST(&op->waiters, __db_lock);
lp != NULL;
@@ -372,11 +520,32 @@ retry: count = region->nlockers;
if ((ret = __lock_getlocker(lt,
lp->holder, ndx, 0, &lockerp)) != 0)
continue;
- if (lockerp->dd_id == DD_INVALID_ID)
- dd = ((DB_LOCKER *)
- R_ADDR(&lt->reginfo,
- lockerp->master_locker))->dd_id;
- else
+ if (lp->status == DB_LSTAT_WAITING) {
+ if (__lock_expired(dbenv,
+ &now, &lockerp->lk_expire)) {
+ lp->status = DB_LSTAT_EXPIRED;
+ MUTEX_UNLOCK(dbenv, &lp->mutex);
+ continue;
+ }
+ if (LOCK_TIME_GREATER(
+ &min_timeout, &lockerp->lk_expire))
+ min_timeout = lockerp->lk_expire;
+
+ }
+
+ if (expire_only)
+ continue;
+
+ if (lockerp->dd_id == DD_INVALID_ID) {
+ dd = ((DB_LOCKER *)R_ADDR(&lt->reginfo,
+ lockerp->master_locker))->dd_id;
+ lockerp->dd_id = dd;
+ if (atype == DB_LOCK_MINLOCKS ||
+ atype == DB_LOCK_MAXLOCKS)
+ id_array[dd].count += lockerp->nlocks;
+ if (atype == DB_LOCK_MINWRITE)
+ id_array[dd].count += lockerp->nwrites;
+ } else
dd = lockerp->dd_id;
id_array[dd].valid = 1;
@@ -396,11 +565,23 @@ retry: count = region->nlockers;
* else on the queue, then we have to keep
* it and we have an automatic deadlock.
*/
- if (is_first)
+ if (is_first) {
+ if (ISSET_MAP(entryp, dd))
+ id_array[dd].self_wait = 1;
CLR_MAP(entryp, dd);
+ }
}
}
+ if (LOCK_TIME_ISVALID(&region->next_timeout)) {
+ if (LOCK_TIME_ISMAX(&min_timeout))
+ LOCK_SET_TIME_INVALID(&region->next_timeout);
+ else
+ region->next_timeout = min_timeout;
+ }
+ if (expire_only)
+ return (0);
+
/* Now for each locker; record its last lock. */
for (id = 0; id < count; id++) {
if (!id_array[id].valid)
@@ -423,7 +604,7 @@ retry: count = region->nlockers;
do {
lp = SH_LIST_FIRST(&child->heldby, __db_lock);
if (lp != NULL &&
- lp->status == DB_LSTAT_WAITING) {
+ lp->status == DB_LSTAT_WAITING) {
id_array[id].last_locker_id = child->id;
goto get_lock;
}
@@ -435,6 +616,7 @@ retry: count = region->nlockers;
if (lp != NULL) {
id_array[id].last_locker_id = lockerp->id;
get_lock: id_array[id].last_lock = R_OFFSET(&lt->reginfo, lp);
+ id_array[id].last_obj = lp->obj;
lo = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
pptr = SH_DBT_PTR(&lo->lockobj);
if (lo->lockobj.size >= sizeof(db_pgno_t))
@@ -445,7 +627,9 @@ retry: count = region->nlockers;
}
}
- /* Pass complete, reset the deadlock detector bit. */
+ /*
+ * Pass complete, reset the deadlock detector bit.
+ */
region->need_dd = 0;
/*
@@ -455,18 +639,19 @@ retry: count = region->nlockers;
*nlockers = id;
*idmap = id_array;
*bmp = bitmap;
- __os_free(tmpmap, sizeof(u_int32_t) * nentries);
+ *allocp = nentries;
+ __os_free(dbenv, tmpmap);
return (0);
}
static int
-__dd_find(dbenv, bmp, idmap, nlockers, deadp)
+__dd_find(dbenv, bmp, idmap, nlockers, nalloc, deadp)
DB_ENV *dbenv;
- u_int32_t *bmp, nlockers;
+ u_int32_t *bmp, nlockers, nalloc;
locker_info *idmap;
u_int32_t ***deadp;
{
- u_int32_t i, j, k, nentries, *mymap, *tmpmap;
+ u_int32_t i, j, k, *mymap, *tmpmap;
u_int32_t **retp;
int ndead, ndeadalloc, ret;
@@ -476,24 +661,23 @@ __dd_find(dbenv, bmp, idmap, nlockers, deadp)
ndeadalloc = INITIAL_DEAD_ALLOC;
ndead = 0;
if ((ret = __os_malloc(dbenv,
- ndeadalloc * sizeof(u_int32_t *), NULL, &retp)) != 0)
+ ndeadalloc * sizeof(u_int32_t *), &retp)) != 0)
return (ret);
/*
* For each locker, OR in the bits from the lockers on which that
* locker is waiting.
*/
- nentries = ALIGN(nlockers, 32) / 32;
- for (mymap = bmp, i = 0; i < nlockers; i++, mymap += nentries) {
- if (!idmap[i].valid)
+ for (mymap = bmp, i = 0; i < nlockers; i++, mymap += nalloc) {
+ if (!idmap[i].valid || idmap[i].in_abort)
continue;
for (j = 0; j < nlockers; j++) {
if (!ISSET_MAP(mymap, j))
continue;
/* Find the map for this bit. */
- tmpmap = bmp + (nentries * j);
- OR_MAP(mymap, tmpmap, nentries);
+ tmpmap = bmp + (nalloc * j);
+ OR_MAP(mymap, tmpmap, nalloc);
if (!ISSET_MAP(mymap, i))
continue;
@@ -506,7 +690,7 @@ __dd_find(dbenv, bmp, idmap, nlockers, deadp)
*/
if (__os_realloc(dbenv,
ndeadalloc * sizeof(u_int32_t),
- NULL, &retp) != 0) {
+ &retp) != 0) {
retp[ndead] = NULL;
*deadp = retp;
return (0);
@@ -543,34 +727,37 @@ __dd_abort(dbenv, info)
region = lt->reginfo.primary;
LOCKREGION(dbenv, lt);
- /* Find the locker's last lock. */
+
+ /*
+ * Get the locker. If its gone or was aborted while
+ * we were detecting return that.
+ */
LOCKER_LOCK(lt, region, info->last_locker_id, ndx);
if ((ret = __lock_getlocker(lt,
- info->last_locker_id, ndx, 0, &lockerp)) != 0 || lockerp == NULL) {
+ info->last_locker_id, ndx, 0, &lockerp)) != 0 ||
+ lockerp == NULL || F_ISSET(lockerp, DB_LOCKER_INABORT)) {
if (ret == 0)
ret = DB_ALREADY_ABORTED;
goto out;
}
- lockp = SH_LIST_FIRST(&lockerp->heldby, __db_lock);
-
/*
- * It's possible that this locker was already aborted. If that's
- * the case, make sure that we remove its locker from the hash table.
+ * Find the locker's last lock.
+ * It is possible for this lock to have been freed,
+ * either though a timeout or another detector run.
*/
- if (lockp == NULL) {
- if (LOCKER_FREEABLE(lockerp)) {
- __lock_freelocker(lt, region, lockerp, ndx);
- goto out;
- }
- } else if (R_OFFSET(&lt->reginfo, lockp) != info->last_lock ||
- lockp->status != DB_LSTAT_WAITING) {
+ if ((lockp = SH_LIST_FIRST(&lockerp->heldby, __db_lock)) == NULL) {
+ ret = DB_ALREADY_ABORTED;
+ goto out;
+ }
+ if (R_OFFSET(&lt->reginfo, lockp) != info->last_lock ||
+ lockp->holder != lockerp->id ||
+ lockp->obj != info->last_obj || lockp->status != DB_LSTAT_WAITING) {
ret = DB_ALREADY_ABORTED;
goto out;
}
sh_obj = (DB_LOCKOBJ *)((u_int8_t *)lockp + lockp->obj);
- SH_LIST_REMOVE(lockp, locker_links, __db_lock);
/* Abort lock, take it off list, and wake up this lock. */
SHOBJECT_LOCK(lt, region, sh_obj, ndx);
@@ -589,7 +776,7 @@ __dd_abort(dbenv, info)
ret = __lock_promote(lt, sh_obj, 0);
MUTEX_UNLOCK(dbenv, &lockp->mutex);
- region->ndeadlocks++;
+ region->stat.st_ndeadlocks++;
UNLOCKREGION(dbenv, lt);
return (0);
@@ -600,13 +787,12 @@ out: UNLOCKREGION(dbenv, lt);
#ifdef DIAGNOSTIC
static void
-__dd_debug(dbenv, idmap, bitmap, nlockers)
+__dd_debug(dbenv, idmap, bitmap, nlockers, nalloc)
DB_ENV *dbenv;
locker_info *idmap;
- u_int32_t *bitmap, nlockers;
+ u_int32_t *bitmap, nlockers, nalloc;
{
- u_int32_t i, j, *mymap, nentries;
- int ret;
+ u_int32_t i, j, *mymap;
char *msgbuf;
__db_err(dbenv, "Waitsfor array\nWaiter:\tWaiting on:");
@@ -614,11 +800,10 @@ __dd_debug(dbenv, idmap, bitmap, nlockers)
/* Allocate space to print 10 bytes per item waited on. */
#undef MSGBUF_LEN
#define MSGBUF_LEN ((nlockers + 1) * 10 + 64)
- if ((ret = __os_malloc(dbenv, MSGBUF_LEN, NULL, &msgbuf)) != 0)
+ if (__os_malloc(dbenv, MSGBUF_LEN, &msgbuf) != 0)
return;
- nentries = ALIGN(nlockers, 32) / 32;
- for (mymap = bitmap, i = 0; i < nlockers; i++, mymap += nentries) {
+ for (mymap = bitmap, i = 0; i < nlockers; i++, mymap += nalloc) {
if (!idmap[i].valid)
continue;
sprintf(msgbuf, /* Waiter. */
@@ -632,6 +817,116 @@ __dd_debug(dbenv, idmap, bitmap, nlockers)
__db_err(dbenv, msgbuf);
}
- __os_free(msgbuf, MSGBUF_LEN);
+ __os_free(dbenv, msgbuf);
}
#endif
+
+/*
+ * Given a bitmap that contains a deadlock, verify that the bit
+ * specified in the which parameter indicates a transaction that
+ * is actually deadlocked. Return 1 if really deadlocked, 0 otherwise.
+ * deadmap is the array that identified the deadlock.
+ * tmpmap is a copy of the initial bitmaps from the dd_build phase
+ * origmap is a temporary bit map into which we can OR things
+ * nlockers is the number of actual lockers under consideration
+ * nalloc is the number of words allocated for the bitmap
+ * which is the locker in question
+ */
+static int
+__dd_verify(idmap, deadmap, tmpmap, origmap, nlockers, nalloc, which)
+ locker_info *idmap;
+ u_int32_t *deadmap, *tmpmap, *origmap;
+ u_int32_t nlockers, nalloc, which;
+{
+ u_int32_t *tmap;
+ u_int32_t j;
+ int count;
+
+ memset(tmpmap, 0, sizeof(u_int32_t) * nalloc);
+
+ /*
+ * In order for "which" to be actively involved in
+ * the deadlock, removing him from the evaluation
+ * must remove the deadlock. So, we OR together everyone
+ * except which; if all the participants still have their
+ * bits set, then the deadlock persists and which does
+ * not participate. If the deadlock does not persist
+ * then "which" does participate.
+ */
+ count = 0;
+ for (j = 0; j < nlockers; j++) {
+ if (!ISSET_MAP(deadmap, j) || j == which)
+ continue;
+
+ /* Find the map for this bit. */
+ tmap = origmap + (nalloc * j);
+
+ /*
+ * We special case the first waiter who is also a holder, so
+ * we don't automatically call that a deadlock. However, if
+ * it really is a deadlock, we need the bit set now so that
+ * we treat the first waiter like other waiters.
+ */
+ if (idmap[j].self_wait)
+ SET_MAP(tmap, j);
+ OR_MAP(tmpmap, tmap, nalloc);
+ count++;
+ }
+
+ if (count == 1)
+ return (1);
+
+ /*
+ * Now check the resulting map and see whether
+ * all participants still have their bit set.
+ */
+ for (j = 0; j < nlockers; j++) {
+ if (!ISSET_MAP(deadmap, j) || j == which)
+ continue;
+ if (!ISSET_MAP(tmpmap, j))
+ return (1);
+ }
+ return (0);
+}
+
+/*
+ * __dd_isolder --
+ *
+ * Figure out the relative age of two lockers. We make all lockers
+ * older than all transactions, because that's how it's worked
+ * historically (because lockers are lower ids).
+ */
+static int
+__dd_isolder(a, b, lock_max, txn_max)
+ u_int32_t a, b;
+ u_int32_t lock_max, txn_max;
+{
+ u_int32_t max;
+
+ /* Check for comparing lock-id and txnid. */
+ if (a <= DB_LOCK_MAXID && b > DB_LOCK_MAXID)
+ return (1);
+ if (b <= DB_LOCK_MAXID && a > DB_LOCK_MAXID)
+ return (0);
+
+ /* In the same space; figure out which one. */
+ max = txn_max;
+ if (a <= DB_LOCK_MAXID)
+ max = lock_max;
+
+ /*
+ * We can't get a 100% correct ordering, because we don't know
+ * where the current interval started and if there were older
+ * lockers outside the interval. We do the best we can.
+ */
+
+ /*
+ * Check for a wrapped case with ids above max.
+ */
+ if (a > max && b < max)
+ return (1);
+ if (b > max && a < max)
+ return (0);
+
+ return (a < b);
+}
diff --git a/db/lock/lock_method.c b/db/lock/lock_method.c
index 46ed9e516..fd2beebe4 100644
--- a/db/lock/lock_method.c
+++ b/db/lock/lock_method.c
@@ -1,33 +1,152 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock_method.c,v 11.5 2000/12/21 19:16:42 bostic Exp $";
+static const char revid[] = "$Id: lock_method.c,v 11.35 2003/06/30 17:20:15 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#ifdef HAVE_RPC
+#include <rpc/rpc.h>
+#endif
+
#include <string.h>
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+
+#ifdef HAVE_RPC
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+#endif
+
+static int __lock_get_lk_conflicts __P((DB_ENV *, const u_int8_t **, int *));
+static int __lock_set_lk_conflicts __P((DB_ENV *, u_int8_t *, int));
+static int __lock_get_lk_detect __P((DB_ENV *, u_int32_t *));
+static int __lock_get_lk_max_lockers __P((DB_ENV *, u_int32_t *));
+static int __lock_get_lk_max_locks __P((DB_ENV *, u_int32_t *));
+static int __lock_get_lk_max_objects __P((DB_ENV *, u_int32_t *));
+static int __lock_get_env_timeout __P((DB_ENV *, db_timeout_t *, u_int32_t));
+
+/*
+ * __lock_dbenv_create --
+ * Lock specific creation of the DB_ENV structure.
+ *
+ * PUBLIC: void __lock_dbenv_create __P((DB_ENV *));
+ */
+void
+__lock_dbenv_create(dbenv)
+ DB_ENV *dbenv;
+{
+ /*
+ * !!!
+ * Our caller has not yet had the opportunity to reset the panic
+ * state or turn off mutex locking, and so we can neither check
+ * the panic state or acquire a mutex in the DB_ENV create path.
+ */
+
+ dbenv->lk_max = DB_LOCK_DEFAULT_N;
+ dbenv->lk_max_lockers = DB_LOCK_DEFAULT_N;
+ dbenv->lk_max_objects = DB_LOCK_DEFAULT_N;
+
+#ifdef HAVE_RPC
+ if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ dbenv->get_lk_conflicts = __dbcl_get_lk_conflicts;
+ dbenv->set_lk_conflicts = __dbcl_set_lk_conflict;
+ dbenv->get_lk_detect = __dbcl_get_lk_detect;
+ dbenv->set_lk_detect = __dbcl_set_lk_detect;
+ dbenv->set_lk_max = __dbcl_set_lk_max;
+ dbenv->get_lk_max_lockers = __dbcl_get_lk_max_lockers;
+ dbenv->set_lk_max_lockers = __dbcl_set_lk_max_lockers;
+ dbenv->get_lk_max_locks = __dbcl_get_lk_max_locks;
+ dbenv->set_lk_max_locks = __dbcl_set_lk_max_locks;
+ dbenv->get_lk_max_objects = __dbcl_get_lk_max_objects;
+ dbenv->set_lk_max_objects = __dbcl_set_lk_max_objects;
+
+ dbenv->lock_detect = __dbcl_lock_detect;
+ dbenv->lock_dump_region = NULL;
+ dbenv->lock_get = __dbcl_lock_get;
+ dbenv->lock_id = __dbcl_lock_id;
+ dbenv->lock_id_free = __dbcl_lock_id_free;
+ dbenv->lock_put = __dbcl_lock_put;
+ dbenv->lock_stat = __dbcl_lock_stat;
+ dbenv->lock_vec = __dbcl_lock_vec;
+ } else
+#endif
+ {
+ dbenv->get_lk_conflicts = __lock_get_lk_conflicts;
+ dbenv->set_lk_conflicts = __lock_set_lk_conflicts;
+ dbenv->get_lk_detect = __lock_get_lk_detect;
+ dbenv->set_lk_detect = __lock_set_lk_detect;
+ dbenv->set_lk_max = __lock_set_lk_max;
+ dbenv->get_lk_max_lockers = __lock_get_lk_max_lockers;
+ dbenv->set_lk_max_lockers = __lock_set_lk_max_lockers;
+ dbenv->get_lk_max_locks = __lock_get_lk_max_locks;
+ dbenv->set_lk_max_locks = __lock_set_lk_max_locks;
+ dbenv->get_lk_max_objects = __lock_get_lk_max_objects;
+ dbenv->set_lk_max_objects = __lock_set_lk_max_objects;
+ dbenv->get_timeout = __lock_get_env_timeout;
+ dbenv->set_timeout = __lock_set_env_timeout;
+
+ dbenv->lock_detect = __lock_detect_pp;
+ dbenv->lock_dump_region = __lock_dump_region;
+ dbenv->lock_get = __lock_get_pp;
+ dbenv->lock_id = __lock_id_pp;
+ dbenv->lock_id_free = __lock_id_free_pp;
+ dbenv->lock_put = __lock_put_pp;
+ dbenv->lock_stat = __lock_stat_pp;
+ dbenv->lock_vec = __lock_vec_pp;
+ }
+}
+
+/*
+ * __lock_dbenv_close --
+ * Lock specific destruction of the DB_ENV structure.
+ *
+ * PUBLIC: void __lock_dbenv_close __P((DB_ENV *));
+ */
+void
+__lock_dbenv_close(dbenv)
+ DB_ENV *dbenv;
+{
+ if (dbenv->lk_conflicts != NULL) {
+ __os_free(dbenv, dbenv->lk_conflicts);
+ dbenv->lk_conflicts = NULL;
+ }
+}
+
+/*
+ * __lock_get_lk_conflicts
+ * Get the conflicts matrix.
+ */
+static int
+__lock_get_lk_conflicts(dbenv, lk_conflictsp, lk_modesp)
+ DB_ENV *dbenv;
+ const u_int8_t **lk_conflictsp;
+ int *lk_modesp;
+{
+ if (lk_conflictsp != NULL)
+ *lk_conflictsp = dbenv->lk_conflicts;
+ if (lk_modesp != NULL)
+ *lk_modesp = dbenv->lk_modes;
+ return (0);
+}
/*
* __lock_set_lk_conflicts
* Set the conflicts matrix.
- *
- * PUBLIC: int __lock_set_lk_conflicts __P((DB_ENV *, u_int8_t *, int));
*/
-int
+static int
__lock_set_lk_conflicts(dbenv, lk_conflicts, lk_modes)
DB_ENV *dbenv;
u_int8_t *lk_conflicts;
@@ -35,15 +154,14 @@ __lock_set_lk_conflicts(dbenv, lk_conflicts, lk_modes)
{
int ret;
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_conflicts");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_conflicts");
if (dbenv->lk_conflicts != NULL) {
- __os_free(dbenv->lk_conflicts,
- dbenv->lk_modes * dbenv->lk_modes);
+ __os_free(dbenv, dbenv->lk_conflicts);
dbenv->lk_conflicts = NULL;
}
if ((ret = __os_malloc(dbenv,
- lk_modes * lk_modes, NULL, &dbenv->lk_conflicts)) != 0)
+ lk_modes * lk_modes, &dbenv->lk_conflicts)) != 0)
return (ret);
memcpy(dbenv->lk_conflicts, lk_conflicts, lk_modes * lk_modes);
dbenv->lk_modes = lk_modes;
@@ -51,9 +169,18 @@ __lock_set_lk_conflicts(dbenv, lk_conflicts, lk_modes)
return (0);
}
+static int
+__lock_get_lk_detect(dbenv, lk_detectp)
+ DB_ENV *dbenv;
+ u_int32_t *lk_detectp;
+{
+ *lk_detectp = dbenv->lk_detect;
+ return (0);
+}
+
/*
* __lock_set_lk_detect
- * Set the automatic deadlock detection.
+ * DB_ENV->set_lk_detect.
*
* PUBLIC: int __lock_set_lk_detect __P((DB_ENV *, u_int32_t));
*/
@@ -62,15 +189,21 @@ __lock_set_lk_detect(dbenv, lk_detect)
DB_ENV *dbenv;
u_int32_t lk_detect;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_detect");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_detect");
switch (lk_detect) {
case DB_LOCK_DEFAULT:
+ case DB_LOCK_EXPIRE:
+ case DB_LOCK_MAXLOCKS:
+ case DB_LOCK_MINLOCKS:
+ case DB_LOCK_MINWRITE:
case DB_LOCK_OLDEST:
case DB_LOCK_RANDOM:
case DB_LOCK_YOUNGEST:
break;
default:
+ __db_err(dbenv,
+ "DB_ENV->set_lk_detect: unknown deadlock detection mode specified");
return (EINVAL);
}
dbenv->lk_detect = lk_detect;
@@ -79,7 +212,7 @@ __lock_set_lk_detect(dbenv, lk_detect)
/*
* __lock_set_lk_max
- * Set the lock table size.
+ * DB_ENV->set_lk_max.
*
* PUBLIC: int __lock_set_lk_max __P((DB_ENV *, u_int32_t));
*/
@@ -88,7 +221,7 @@ __lock_set_lk_max(dbenv, lk_max)
DB_ENV *dbenv;
u_int32_t lk_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_max");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_max");
dbenv->lk_max = lk_max;
dbenv->lk_max_objects = lk_max;
@@ -96,9 +229,18 @@ __lock_set_lk_max(dbenv, lk_max)
return (0);
}
+static int
+__lock_get_lk_max_locks(dbenv, lk_maxp)
+ DB_ENV *dbenv;
+ u_int32_t *lk_maxp;
+{
+ *lk_maxp = dbenv->lk_max;
+ return (0);
+}
+
/*
* __lock_set_lk_max_locks
- * Set the lock table size.
+ * DB_ENV->set_lk_max_locks.
*
* PUBLIC: int __lock_set_lk_max_locks __P((DB_ENV *, u_int32_t));
*/
@@ -107,15 +249,24 @@ __lock_set_lk_max_locks(dbenv, lk_max)
DB_ENV *dbenv;
u_int32_t lk_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_max_locks");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_max_locks");
dbenv->lk_max = lk_max;
return (0);
}
+static int
+__lock_get_lk_max_lockers(dbenv, lk_maxp)
+ DB_ENV *dbenv;
+ u_int32_t *lk_maxp;
+{
+ *lk_maxp = dbenv->lk_max_lockers;
+ return (0);
+}
+
/*
* __lock_set_lk_max_lockers
- * Set the lock table size.
+ * DB_ENV->set_lk_max_lockers.
*
* PUBLIC: int __lock_set_lk_max_lockers __P((DB_ENV *, u_int32_t));
*/
@@ -124,15 +275,24 @@ __lock_set_lk_max_lockers(dbenv, lk_max)
DB_ENV *dbenv;
u_int32_t lk_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_max_lockers");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_max_lockers");
dbenv->lk_max_lockers = lk_max;
return (0);
}
+static int
+__lock_get_lk_max_objects(dbenv, lk_maxp)
+ DB_ENV *dbenv;
+ u_int32_t *lk_maxp;
+{
+ *lk_maxp = dbenv->lk_max_objects;
+ return (0);
+}
+
/*
* __lock_set_lk_max_objects
- * Set the lock table size.
+ * DB_ENV->set_lk_max_objects.
*
* PUBLIC: int __lock_set_lk_max_objects __P((DB_ENV *, u_int32_t));
*/
@@ -141,8 +301,70 @@ __lock_set_lk_max_objects(dbenv, lk_max)
DB_ENV *dbenv;
u_int32_t lk_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lk_max_objects");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lk_max_objects");
dbenv->lk_max_objects = lk_max;
return (0);
}
+
+static int
+__lock_get_env_timeout(dbenv, timeoutp, flag)
+ DB_ENV *dbenv;
+ db_timeout_t *timeoutp;
+ u_int32_t flag;
+{
+ switch (flag) {
+ case DB_SET_LOCK_TIMEOUT:
+ *timeoutp = dbenv->lk_timeout;
+ break;
+ case DB_SET_TXN_TIMEOUT:
+ *timeoutp = dbenv->tx_timeout;
+ break;
+ default:
+ return (__db_ferr(dbenv, "DB_ENV->get_timeout", 0));
+ /* NOTREACHED */
+ }
+
+ return (0);
+}
+
+/*
+ * __lock_set_env_timeout
+ * DB_ENV->set_lock_timeout.
+ *
+ * PUBLIC: int __lock_set_env_timeout __P((DB_ENV *, db_timeout_t, u_int32_t));
+ */
+int
+__lock_set_env_timeout(dbenv, timeout, flags)
+ DB_ENV *dbenv;
+ db_timeout_t timeout;
+ u_int32_t flags;
+{
+ DB_LOCKREGION *region;
+
+ region = NULL;
+ if (F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
+ if (!LOCKING_ON(dbenv))
+ return (__db_env_config(
+ dbenv, "set_timeout", DB_INIT_LOCK));
+ region = ((DB_LOCKTAB *)dbenv->lk_handle)->reginfo.primary;
+ }
+
+ switch (flags) {
+ case DB_SET_LOCK_TIMEOUT:
+ dbenv->lk_timeout = timeout;
+ if (region != NULL)
+ region->lk_timeout = timeout;
+ break;
+ case DB_SET_TXN_TIMEOUT:
+ dbenv->tx_timeout = timeout;
+ if (region != NULL)
+ region->tx_timeout = timeout;
+ break;
+ default:
+ return (__db_ferr(dbenv, "DB_ENV->set_timeout", 0));
+ /* NOTREACHED */
+ }
+
+ return (0);
+}
diff --git a/db/lock/lock_region.c b/db/lock/lock_region.c
index 4bd4ee4b7..3f3442c3f 100644
--- a/db/lock/lock_region.c
+++ b/db/lock/lock_region.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock_region.c,v 11.41 2000/12/20 21:53:04 ubell Exp $";
+static const char revid[] = "$Id: lock_region.c,v 11.73 2003/07/23 13:13:12 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,95 +17,50 @@ static const char revid[] = "$Id: lock_region.c,v 11.41 2000/12/20 21:53:04 ubel
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
static int __lock_init __P((DB_ENV *, DB_LOCKTAB *));
static size_t
__lock_region_size __P((DB_ENV *));
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
static size_t __lock_region_maint __P((DB_ENV *));
#endif
/*
- * This conflict array is used for concurrent db access (CDB). It
- * uses the same locks as the db_rw_conflict array, but adds an IW
- * mode to be used for write cursors.
+ * The conflict arrays are set up such that the row is the lock you are
+ * holding and the column is the lock that is desired.
*/
-#define DB_LOCK_CDB_N 5
-static u_int8_t const db_cdb_conflicts[] = {
- /* N R W WT IW*/
- /* N */ 0, 0, 0, 0, 0,
- /* R */ 0, 0, 1, 0, 0,
- /* W */ 0, 1, 1, 1, 1,
- /* WT */ 0, 0, 0, 0, 0,
- /* IW */ 0, 0, 1, 0, 1,
+#define DB_LOCK_RIW_N 9
+static const u_int8_t db_riw_conflicts[] = {
+/* N R W WT IW IR RIW DR WW */
+/* N */ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* R */ 0, 0, 1, 0, 1, 0, 1, 0, 1,
+/* W */ 0, 1, 1, 1, 1, 1, 1, 1, 1,
+/* WT */ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+/* IW */ 0, 1, 1, 0, 0, 0, 0, 1, 1,
+/* IR */ 0, 0, 1, 0, 0, 0, 0, 0, 1,
+/* RIW */ 0, 1, 1, 0, 0, 0, 0, 1, 1,
+/* DR */ 0, 0, 1, 0, 1, 0, 1, 0, 0,
+/* WW */ 0, 1, 1, 0, 1, 1, 1, 0, 1
};
/*
- * __lock_dbenv_create --
- * Lock specific creation of the DB_ENV structure.
- *
- * PUBLIC: void __lock_dbenv_create __P((DB_ENV *));
- */
-void
-__lock_dbenv_create(dbenv)
- DB_ENV *dbenv;
-{
- dbenv->lk_max = DB_LOCK_DEFAULT_N;
- dbenv->lk_max_lockers = DB_LOCK_DEFAULT_N;
- dbenv->lk_max_objects = DB_LOCK_DEFAULT_N;
-
- dbenv->set_lk_conflicts = __lock_set_lk_conflicts;
- dbenv->set_lk_detect = __lock_set_lk_detect;
- dbenv->set_lk_max = __lock_set_lk_max;
- dbenv->set_lk_max_locks = __lock_set_lk_max_locks;
- dbenv->set_lk_max_lockers = __lock_set_lk_max_lockers;
- dbenv->set_lk_max_objects = __lock_set_lk_max_objects;
-
-#ifdef HAVE_RPC
- /*
- * If we have a client, overwrite what we just set up to point
- * to the client functions.
- */
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- dbenv->set_lk_conflicts = __dbcl_set_lk_conflict;
- dbenv->set_lk_detect = __dbcl_set_lk_detect;
- dbenv->set_lk_max = __dbcl_set_lk_max;
- dbenv->set_lk_max_locks = __dbcl_set_lk_max_locks;
- dbenv->set_lk_max_lockers = __dbcl_set_lk_max_lockers;
- dbenv->set_lk_max_objects = __dbcl_set_lk_max_objects;
- }
-#endif
-}
-
-/*
- * __lock_dbenv_close --
- * Lock specific destruction of the DB_ENV structure.
- *
- * PUBLIC: void __lock_dbenv_close __P((DB_ENV *));
+ * This conflict array is used for concurrent db access (CDB). It uses
+ * the same locks as the db_riw_conflicts array, but adds an IW mode to
+ * be used for write cursors.
*/
-void
-__lock_dbenv_close(dbenv)
- DB_ENV *dbenv;
-{
- if (!F_ISSET(dbenv, DB_ENV_USER_ALLOC) && dbenv->lk_conflicts != NULL) {
- __os_free(dbenv->lk_conflicts,
- dbenv->lk_modes * dbenv->lk_modes);
- dbenv->lk_conflicts = NULL;
- }
-}
+#define DB_LOCK_CDB_N 5
+static const u_int8_t db_cdb_conflicts[] = {
+ /* N R W WT IW */
+ /* N */ 0, 0, 0, 0, 0,
+ /* R */ 0, 0, 1, 0, 0,
+ /* W */ 0, 1, 1, 1, 1,
+ /* WT */ 0, 0, 0, 0, 0,
+ /* IW */ 0, 0, 1, 0, 1
+};
/*
* __lock_open --
@@ -167,6 +122,15 @@ __lock_open(dbenv)
region->detect = dbenv->lk_detect;
}
+ /*
+ * A process joining the region may have reset the lock and transaction
+ * timeouts.
+ */
+ if (dbenv->lk_timeout != 0)
+ region->lk_timeout = dbenv->lk_timeout;
+ if (dbenv->tx_timeout != 0)
+ region->tx_timeout = dbenv->tx_timeout;
+
/* Set remaining pointers into region. */
lt->conflicts = (u_int8_t *)R_ADDR(&lt->reginfo, region->conf_off);
lt->obj_tab = (DB_HASHTAB *)R_ADDR(&lt->reginfo, region->obj_off);
@@ -183,7 +147,7 @@ err: if (lt->reginfo.addr != NULL) {
R_UNLOCK(dbenv, &lt->reginfo);
(void)__db_r_detach(dbenv, &lt->reginfo, 0);
}
- __os_free(lt, sizeof(*lt));
+ __os_free(dbenv, lt);
return (ret);
}
@@ -201,7 +165,7 @@ __lock_init(dbenv, lt)
DB_LOCKER *lidp;
DB_LOCKOBJ *op;
DB_LOCKREGION *region;
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
size_t maint_size;
#endif
u_int32_t i, lk_modes;
@@ -229,25 +193,20 @@ __lock_init(dbenv, lt)
lk_conflicts = dbenv->lk_conflicts;
}
- region->id = 0;
region->need_dd = 0;
+ LOCK_SET_TIME_INVALID(&region->next_timeout);
region->detect = DB_LOCK_NORUN;
- region->maxlocks = dbenv->lk_max;
- region->maxlockers = dbenv->lk_max_lockers;
- region->maxobjects = dbenv->lk_max_objects;
+ region->lk_timeout = dbenv->lk_timeout;
+ region->tx_timeout = dbenv->tx_timeout;
region->locker_t_size = __db_tablesize(dbenv->lk_max_lockers);
region->object_t_size = __db_tablesize(dbenv->lk_max_objects);
- region->nmodes = lk_modes;
- region->nlocks = 0;
- region->maxnlocks = 0;
- region->nlockers = 0;
- region->maxnlockers = 0;
- region->nobjects = 0;
- region->maxnobjects = 0;
- region->nconflicts = 0;
- region->nrequests = 0;
- region->nreleases = 0;
- region->ndeadlocks = 0;
+ memset(&region->stat, 0, sizeof(region->stat));
+ region->stat.st_id = 0;
+ region->stat.st_cur_maxid = DB_LOCK_MAXID;
+ region->stat.st_maxlocks = dbenv->lk_max;
+ region->stat.st_maxlockers = dbenv->lk_max_lockers;
+ region->stat.st_maxobjects = dbenv->lk_max_objects;
+ region->stat.st_nmodes = lk_modes;
/* Allocate room for the conflict matrix and initialize it. */
if ((ret =
@@ -270,7 +229,7 @@ __lock_init(dbenv, lt)
__db_hashinit(addr, region->locker_t_size);
region->locker_off = R_OFFSET(&lt->reginfo, addr);
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
maint_size = __lock_region_maint(dbenv);
/* Allocate room for the locker maintenance info and initialize it. */
if ((ret = __db_shalloc(lt->reginfo.addr,
@@ -286,24 +245,24 @@ __lock_init(dbenv, lt)
* the mutex.
*/
SH_TAILQ_INIT(&region->free_locks);
- for (i = 0; i < region->maxlocks; ++i) {
+ for (i = 0; i < region->stat.st_maxlocks; ++i) {
if ((ret = __db_shalloc(lt->reginfo.addr,
sizeof(struct __db_lock), MUTEX_ALIGN, &lp)) != 0)
goto mem_err;
lp->status = DB_LSTAT_FREE;
- if ((ret = __db_shmutex_init(dbenv, &lp->mutex,
- R_OFFSET(&lt->reginfo, &lp->mutex) + DB_FCNTL_OFF_LOCK,
- MUTEX_SELF_BLOCK, &lt->reginfo,
- (REGMAINT *)R_ADDR(&lt->reginfo, region->maint_off))) != 0)
+ lp->gen = 0;
+ if ((ret = __db_mutex_setup(dbenv, &lt->reginfo, &lp->mutex,
+ MUTEX_LOGICAL_LOCK | MUTEX_NO_RLOCK | MUTEX_SELF_BLOCK))
+ != 0)
return (ret);
- MUTEX_LOCK(dbenv, &lp->mutex, lt->dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &lp->mutex);
SH_TAILQ_INSERT_HEAD(&region->free_locks, lp, links, __db_lock);
}
/* Initialize objects onto a free list. */
SH_TAILQ_INIT(&region->dd_objs);
SH_TAILQ_INIT(&region->free_objs);
- for (i = 0; i < region->maxobjects; ++i) {
+ for (i = 0; i < region->stat.st_maxobjects; ++i) {
if ((ret = __db_shalloc(lt->reginfo.addr,
sizeof(DB_LOCKOBJ), 0, &op)) != 0)
goto mem_err;
@@ -312,13 +271,15 @@ __lock_init(dbenv, lt)
}
/* Initialize lockers onto a free list. */
+ SH_TAILQ_INIT(&region->lockers);
SH_TAILQ_INIT(&region->free_lockers);
- for (i = 0; i < region->maxlockers; ++i) {
+ for (i = 0; i < region->stat.st_maxlockers; ++i) {
if ((ret = __db_shalloc(lt->reginfo.addr,
sizeof(DB_LOCKER), 0, &lidp)) != 0) {
-mem_err: __db_err(dbenv, "Unable to allocate memory for the lock table");
- return (ret);
- }
+mem_err: __db_err(dbenv,
+ "Unable to allocate memory for the lock table");
+ return (ret);
+ }
SH_TAILQ_INSERT_HEAD(
&region->free_lockers, lidp, links, __db_locker);
}
@@ -327,13 +288,14 @@ mem_err: __db_err(dbenv, "Unable to allocate memory for the lock table");
}
/*
- * __lock_close --
- * Internal version of lock_close: only called from db_appinit.
+ * __lock_dbenv_refresh --
+ * Clean up after the lock system on a close or failed open. Called
+ * only from __dbenv_refresh. (Formerly called __lock_close.)
*
- * PUBLIC: int __lock_close __P((DB_ENV *));
+ * PUBLIC: int __lock_dbenv_refresh __P((DB_ENV *));
*/
int
-__lock_close(dbenv)
+__lock_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
DB_LOCKTAB *lt;
@@ -344,7 +306,7 @@ __lock_close(dbenv)
/* Detach from the region. */
ret = __db_r_detach(dbenv, &lt->reginfo, 0);
- __os_free(lt, sizeof(*lt));
+ __os_free(dbenv, lt);
dbenv->lk_handle = NULL;
return (ret);
@@ -368,17 +330,19 @@ __lock_region_size(dbenv)
retval += __db_shalloc_size(sizeof(DB_LOCKREGION), 1);
retval += __db_shalloc_size(dbenv->lk_modes * dbenv->lk_modes, 1);
retval += __db_shalloc_size(
- __db_tablesize(dbenv->lk_max_lockers) * (sizeof(DB_HASHTAB)), 1);
+ __db_tablesize(dbenv->lk_max_lockers) * (sizeof(DB_HASHTAB)), 1);
retval += __db_shalloc_size(
- __db_tablesize(dbenv->lk_max_objects) * (sizeof(DB_HASHTAB)), 1);
-#ifdef MUTEX_SYSTEM_RESOURCES
+ __db_tablesize(dbenv->lk_max_objects) * (sizeof(DB_HASHTAB)), 1);
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
retval +=
__db_shalloc_size(sizeof(REGMAINT) + __lock_region_maint(dbenv), 1);
#endif
retval += __db_shalloc_size(
- sizeof(struct __db_lock), MUTEX_ALIGN) * dbenv->lk_max;
- retval += __db_shalloc_size(sizeof(DB_LOCKOBJ), 1) * dbenv->lk_max_objects;
- retval += __db_shalloc_size(sizeof(DB_LOCKER), 1) * dbenv->lk_max_lockers;
+ sizeof(struct __db_lock), MUTEX_ALIGN) * dbenv->lk_max;
+ retval += __db_shalloc_size(
+ sizeof(DB_LOCKOBJ), 1) * dbenv->lk_max_objects;
+ retval += __db_shalloc_size(
+ sizeof(DB_LOCKER), 1) * dbenv->lk_max_lockers;
/*
* Include 16 bytes of string space per lock. DB doesn't use it
@@ -392,7 +356,7 @@ __lock_region_size(dbenv)
return (retval);
}
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
/*
* __lock_region_maint --
* Return the amount of space needed for region maintenance info.
@@ -403,7 +367,7 @@ __lock_region_maint(dbenv)
{
size_t s;
- s = sizeof(MUTEX *) * dbenv->lk_max;
+ s = sizeof(DB_MUTEX *) * dbenv->lk_max;
return (s);
}
#endif
@@ -419,12 +383,35 @@ __lock_region_destroy(dbenv, infop)
DB_ENV *dbenv;
REGINFO *infop;
{
- DB_LOCKREGION *region;
+ __db_shlocks_destroy(infop, (REGMAINT *)R_ADDR(infop,
+ ((DB_LOCKREGION *)R_ADDR(infop, infop->rp->primary))->maint_off));
COMPQUIET(dbenv, NULL);
- region = R_ADDR(infop, infop->rp->primary);
+ COMPQUIET(infop, NULL);
+}
+
+/*
+ * __lock_id_set --
+ * Set the current locker ID and current maximum unused ID (for
+ * testing purposes only).
+ *
+ * PUBLIC: int __lock_id_set __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__lock_id_set(dbenv, cur_id, max_id)
+ DB_ENV *dbenv;
+ u_int32_t cur_id, max_id;
+{
+ DB_LOCKTAB *lt;
+ DB_LOCKREGION *region;
+
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "lock_id_set", DB_INIT_LOCK);
+
+ lt = dbenv->lk_handle;
+ region = lt->reginfo.primary;
+ region->stat.st_id = cur_id;
+ region->stat.st_cur_maxid = max_id;
- __db_shlocks_destroy(infop,
- (REGMAINT *)R_ADDR(infop, region->maint_off));
- return;
+ return (0);
}
diff --git a/db/lock/lock_stat.c b/db/lock/lock_stat.c
index ed5b60d0d..de539f560 100644
--- a/db/lock/lock_stat.c
+++ b/db/lock/lock_stat.c
@@ -1,94 +1,127 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock_stat.c,v 11.4 2000/12/08 20:15:31 ubell Exp $";
+static const char revid[] = "$Id: lock_stat.c,v 11.44 2003/09/13 19:20:36 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-
-#include <ctype.h>
+#include <string.h>
+#if TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
+#include <ctype.h>
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "lock.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_shash.h"
+#include "dbinc/db_page.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/db_am.h"
static void __lock_dump_locker __P((DB_LOCKTAB *, DB_LOCKER *, FILE *));
static void __lock_dump_object __P((DB_LOCKTAB *, DB_LOCKOBJ *, FILE *));
-static const char *
- __lock_dump_status __P((db_status_t));
+static void __lock_printheader __P((FILE *));
+static int __lock_stat __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
/*
- * lock_stat --
- * Return LOCK statistics.
+ * __lock_stat_pp --
+ * DB_ENV->lock_stat pre/post processing.
+ *
+ * PUBLIC: int __lock_stat_pp __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
*/
int
-lock_stat(dbenv, statp, db_malloc)
+__lock_stat_pp(dbenv, statp, flags)
DB_ENV *dbenv;
DB_LOCK_STAT **statp;
- void *(*db_malloc) __P((size_t));
+ u_int32_t flags;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "DB_ENV->lock_stat", DB_INIT_LOCK);
+
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->lock_stat", flags, DB_STAT_CLEAR)) != 0)
+ return (ret);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __lock_stat(dbenv, statp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __lock_stat --
+ * DB_ENV->lock_stat.
+ */
+static int
+__lock_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_LOCK_STAT **statp;
+ u_int32_t flags;
{
DB_LOCKREGION *region;
DB_LOCKTAB *lt;
- DB_LOCK_STAT *stats;
+ DB_LOCK_STAT *stats, tmp;
int ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_lock_stat(dbenv, statp, db_malloc));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lk_handle, DB_INIT_LOCK);
-
*statp = NULL;
-
lt = dbenv->lk_handle;
- if ((ret = __os_malloc(dbenv, sizeof(*stats), db_malloc, &stats)) != 0)
+ if ((ret = __os_umalloc(dbenv, sizeof(*stats), &stats)) != 0)
return (ret);
/* Copy out the global statistics. */
R_LOCK(dbenv, &lt->reginfo);
region = lt->reginfo.primary;
- stats->st_lastid = region->id;
- stats->st_maxlocks = region->maxlocks;
- stats->st_maxlockers = region->maxlockers;
- stats->st_maxobjects = region->maxobjects;
- stats->st_nmodes = region->nmodes;
- stats->st_nlockers = region->nlockers;
- stats->st_maxnlockers = region->maxnlockers;
- stats->st_nobjects = region->nobjects;
- stats->st_maxnobjects = region->maxnobjects;
- stats->st_nlocks = region->nlocks;
- stats->st_maxnlocks = region->maxnlocks;
- stats->st_nconflicts = region->nconflicts;
- stats->st_nrequests = region->nrequests;
- stats->st_nreleases = region->nreleases;
- stats->st_nnowaits = region->nnowaits;
- stats->st_ndeadlocks = region->ndeadlocks;
+ memcpy(stats, &region->stat, sizeof(*stats));
+ stats->st_locktimeout = region->lk_timeout;
+ stats->st_txntimeout = region->tx_timeout;
stats->st_region_wait = lt->reginfo.rp->mutex.mutex_set_wait;
stats->st_region_nowait = lt->reginfo.rp->mutex.mutex_set_nowait;
stats->st_regsize = lt->reginfo.rp->size;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ tmp = region->stat;
+ memset(&region->stat, 0, sizeof(region->stat));
+ lt->reginfo.rp->mutex.mutex_set_wait = 0;
+ lt->reginfo.rp->mutex.mutex_set_nowait = 0;
+
+ region->stat.st_id = tmp.st_id;
+ region->stat.st_cur_maxid = tmp.st_cur_maxid;
+ region->stat.st_maxlocks = tmp.st_maxlocks;
+ region->stat.st_maxlockers = tmp.st_maxlockers;
+ region->stat.st_maxobjects = tmp.st_maxobjects;
+ region->stat.st_nlocks =
+ region->stat.st_maxnlocks = tmp.st_nlocks;
+ region->stat.st_nlockers =
+ region->stat.st_maxnlockers = tmp.st_nlockers;
+ region->stat.st_nobjects =
+ region->stat.st_maxnobjects = tmp.st_nobjects;
+ region->stat.st_nmodes = tmp.st_nmodes;
+ }
R_UNLOCK(dbenv, &lt->reginfo);
@@ -97,30 +130,35 @@ lock_stat(dbenv, statp, db_malloc)
}
#define LOCK_DUMP_CONF 0x001 /* Conflict matrix. */
-#define LOCK_DUMP_FREE 0x002 /* Display lock free list. */
-#define LOCK_DUMP_LOCKERS 0x004 /* Display lockers. */
-#define LOCK_DUMP_MEM 0x008 /* Display region memory. */
-#define LOCK_DUMP_OBJECTS 0x010 /* Display objects. */
-#define LOCK_DUMP_ALL 0x01f /* Display all. */
+#define LOCK_DUMP_LOCKERS 0x002 /* Display lockers. */
+#define LOCK_DUMP_MEM 0x004 /* Display region memory. */
+#define LOCK_DUMP_OBJECTS 0x008 /* Display objects. */
+#define LOCK_DUMP_PARAMS 0x010 /* Display params. */
+#define LOCK_DUMP_ALL /* All */ \
+ (LOCK_DUMP_CONF | LOCK_DUMP_LOCKERS | LOCK_DUMP_MEM | \
+ LOCK_DUMP_OBJECTS | LOCK_DUMP_PARAMS)
/*
* __lock_dump_region --
*
- * PUBLIC: void __lock_dump_region __P((DB_ENV *, char *, FILE *));
+ * PUBLIC: int __lock_dump_region __P((DB_ENV *, const char *, FILE *));
*/
-void
+int
__lock_dump_region(dbenv, area, fp)
DB_ENV *dbenv;
- char *area;
+ const char *area;
FILE *fp;
{
- struct __db_lock *lp;
DB_LOCKER *lip;
DB_LOCKOBJ *op;
DB_LOCKREGION *lrp;
DB_LOCKTAB *lt;
u_int32_t flags, i, j;
- int label;
+ char buf[64];
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lk_handle, "lock_dump_region", DB_INIT_LOCK);
/* Make it easy to call from the debugger. */
if (fp == NULL)
@@ -134,9 +172,6 @@ __lock_dump_region(dbenv, area, fp)
case 'c':
LF_SET(LOCK_DUMP_CONF);
break;
- case 'f':
- LF_SET(LOCK_DUMP_FREE);
- break;
case 'l':
LF_SET(LOCK_DUMP_LOCKERS);
break;
@@ -146,91 +181,73 @@ __lock_dump_region(dbenv, area, fp)
case 'o':
LF_SET(LOCK_DUMP_OBJECTS);
break;
+ case 'p':
+ LF_SET(LOCK_DUMP_PARAMS);
+ break;
}
lt = dbenv->lk_handle;
lrp = lt->reginfo.primary;
LOCKREGION(dbenv, lt);
- fprintf(fp, "%s\nLock region parameters\n", DB_LINE);
- fprintf(fp, "%s: %lu, %s: %lu, %s: %lu, %s: %lu, %s: %lu, %s: %lu, %s: %lu\n",
- "locker table size", (u_long)lrp->locker_t_size,
- "object table size", (u_long)lrp->object_t_size,
- "obj_off", (u_long)lrp->obj_off,
- "osynch_off", (u_long)lrp->osynch_off,
- "locker_off", (u_long)lrp->locker_off,
- "lsynch_off", (u_long)lrp->lsynch_off,
- "need_dd", (u_long)lrp->need_dd);
+ if (LF_ISSET(LOCK_DUMP_PARAMS)) {
+ fprintf(fp, "%s\nLock region parameters\n", DB_LINE);
+ fprintf(fp,
+ "%s: %lu, %s: %lu, %s: %lu,\n%s: %lu, %s: %lu, %s: %lu, %s: %lu\n",
+ "locker table size", (u_long)lrp->locker_t_size,
+ "object table size", (u_long)lrp->object_t_size,
+ "obj_off", (u_long)lrp->obj_off,
+ "osynch_off", (u_long)lrp->osynch_off,
+ "locker_off", (u_long)lrp->locker_off,
+ "lsynch_off", (u_long)lrp->lsynch_off,
+ "need_dd", (u_long)lrp->need_dd);
+ if (LOCK_TIME_ISVALID(&lrp->next_timeout)) {
+ strftime(buf, sizeof(buf), "%m-%d-%H:%M:%S",
+ localtime((time_t*)&lrp->next_timeout.tv_sec));
+ fprintf(fp, "next_timeout: %s.%lu\n",
+ buf, (u_long)lrp->next_timeout.tv_usec);
+ }
+ }
if (LF_ISSET(LOCK_DUMP_CONF)) {
fprintf(fp, "\n%s\nConflict matrix\n", DB_LINE);
- for (i = 0; i < lrp->nmodes; i++) {
- for (j = 0; j < lrp->nmodes; j++)
- fprintf(fp, "%lu\t",
- (u_long)lt->conflicts[i * lrp->nmodes + j]);
+ for (i = 0; i < lrp->stat.st_nmodes; i++) {
+ for (j = 0; j < lrp->stat.st_nmodes; j++)
+ fprintf(fp, "%lu\t", (u_long)
+ lt->conflicts[i * lrp->stat.st_nmodes + j]);
fprintf(fp, "\n");
}
}
if (LF_ISSET(LOCK_DUMP_LOCKERS)) {
- fprintf(fp, "%s\nLocker hash buckets\n", DB_LINE);
- for (i = 0; i < lrp->locker_t_size; i++) {
- label = 1;
+ fprintf(fp, "%s\nLocks grouped by lockers\n", DB_LINE);
+ __lock_printheader(fp);
+ for (i = 0; i < lrp->locker_t_size; i++)
for (lip =
SH_TAILQ_FIRST(&lt->locker_tab[i], __db_locker);
lip != NULL;
lip = SH_TAILQ_NEXT(lip, links, __db_locker)) {
- if (label) {
- fprintf(fp, "Bucket %lu:\n", (u_long)i);
- label = 0;
- }
__lock_dump_locker(lt, lip, fp);
}
- }
}
if (LF_ISSET(LOCK_DUMP_OBJECTS)) {
- fprintf(fp, "%s\nObject hash buckets\n", DB_LINE);
+ fprintf(fp, "%s\nLocks grouped by object\n", DB_LINE);
+ __lock_printheader(fp);
for (i = 0; i < lrp->object_t_size; i++) {
- label = 1;
for (op = SH_TAILQ_FIRST(&lt->obj_tab[i], __db_lockobj);
op != NULL;
- op = SH_TAILQ_NEXT(op, links, __db_lockobj)) {
- if (label) {
- fprintf(fp, "Bucket %lu:\n", (u_long)i);
- label = 0;
- }
+ op = SH_TAILQ_NEXT(op, links, __db_lockobj))
__lock_dump_object(lt, op, fp);
- }
}
}
- if (LF_ISSET(LOCK_DUMP_FREE)) {
- fprintf(fp, "%s\nLock free list\n", DB_LINE);
- for (lp = SH_TAILQ_FIRST(&lrp->free_locks, __db_lock);
- lp != NULL;
- lp = SH_TAILQ_NEXT(lp, links, __db_lock))
- fprintf(fp, "0x%lx: %lu\t%lu\t%s\t0x%lx\n", (u_long)lp,
- (u_long)lp->holder, (u_long)lp->mode,
- __lock_dump_status(lp->status), (u_long)lp->obj);
-
- fprintf(fp, "%s\nObject free list\n", DB_LINE);
- for (op = SH_TAILQ_FIRST(&lrp->free_objs, __db_lockobj);
- op != NULL;
- op = SH_TAILQ_NEXT(op, links, __db_lockobj))
- fprintf(fp, "0x%lx\n", (u_long)op);
-
- fprintf(fp, "%s\nLocker free list\n", DB_LINE);
- for (lip = SH_TAILQ_FIRST(&lrp->free_lockers, __db_locker);
- lip != NULL;
- lip = SH_TAILQ_NEXT(lip, links, __db_locker))
- fprintf(fp, "0x%lx\n", (u_long)lip);
- }
-
if (LF_ISSET(LOCK_DUMP_MEM))
__db_shalloc_dump(lt->reginfo.addr, fp);
UNLOCKREGION(dbenv, lt);
+
+ return (0);
}
static void
@@ -240,16 +257,35 @@ __lock_dump_locker(lt, lip, fp)
FILE *fp;
{
struct __db_lock *lp;
+ time_t s;
+ char buf[64];
+
+ fprintf(fp, "%8lx dd=%2ld locks held %-4d write locks %-4d",
+ (u_long)lip->id, (long)lip->dd_id, lip->nlocks, lip->nwrites);
+ fprintf(fp, "%s", F_ISSET(lip, DB_LOCKER_DELETED) ? "(D)" : " ");
+ if (LOCK_TIME_ISVALID(&lip->tx_expire)) {
+ s = lip->tx_expire.tv_sec;
+ strftime(buf, sizeof(buf), "%m-%d-%H:%M:%S", localtime(&s));
+ fprintf(fp,
+ "expires %s.%lu", buf, (u_long)lip->tx_expire.tv_usec);
+ }
+ if (F_ISSET(lip, DB_LOCKER_TIMEOUT))
+ fprintf(fp, " lk timeout %u", lip->lk_timeout);
+ if (LOCK_TIME_ISVALID(&lip->lk_expire)) {
+ s = lip->lk_expire.tv_sec;
+ strftime(buf, sizeof(buf), "%m-%d-%H:%M:%S", localtime(&s));
+ fprintf(fp,
+ " lk expires %s.%lu", buf, (u_long)lip->lk_expire.tv_usec);
+ }
+ fprintf(fp, "\n");
- fprintf(fp, "L %lx [%ld]", (u_long)lip->id, (long)lip->dd_id);
- fprintf(fp, " %s ", F_ISSET(lip, DB_LOCKER_DELETED) ? "(D)" : " ");
-
- if ((lp = SH_LIST_FIRST(&lip->heldby, __db_lock)) == NULL)
- fprintf(fp, "\n");
- else
+ lp = SH_LIST_FIRST(&lip->heldby, __db_lock);
+ if (lp != NULL) {
for (; lp != NULL;
lp = SH_LIST_NEXT(lp, locker_links, __db_lock))
- __lock_printlock(lt, lp, 1);
+ __lock_printlock(lt, lp, 1, fp);
+ fprintf(fp, "\n");
+ }
}
static void
@@ -259,50 +295,140 @@ __lock_dump_object(lt, op, fp)
FILE *fp;
{
struct __db_lock *lp;
- u_int32_t j;
- u_int8_t *ptr;
- u_int ch;
- ptr = SH_DBT_PTR(&op->lockobj);
- for (j = 0; j < op->lockobj.size; ptr++, j++) {
- ch = *ptr;
- fprintf(fp, isprint(ch) ? "%c" : "\\%o", ch);
- }
- fprintf(fp, "\n");
-
- fprintf(fp, "H:");
for (lp =
SH_TAILQ_FIRST(&op->holders, __db_lock);
lp != NULL;
lp = SH_TAILQ_NEXT(lp, links, __db_lock))
- __lock_printlock(lt, lp, 1);
- lp = SH_TAILQ_FIRST(&op->waiters, __db_lock);
- if (lp != NULL) {
- fprintf(fp, "\nW:");
- for (; lp != NULL; lp = SH_TAILQ_NEXT(lp, links, __db_lock))
- __lock_printlock(lt, lp, 1);
- }
+ __lock_printlock(lt, lp, 1, fp);
+ for (lp =
+ SH_TAILQ_FIRST(&op->waiters, __db_lock);
+ lp != NULL;
+ lp = SH_TAILQ_NEXT(lp, links, __db_lock))
+ __lock_printlock(lt, lp, 1, fp);
+
+ fprintf(fp, "\n");
+}
+
+/*
+ * __lock_printheader --
+ */
+static void
+__lock_printheader(fp)
+ FILE *fp;
+{
+ fprintf(fp, "%-8s %-10s%-4s %-7s %s\n",
+ "Locker", "Mode",
+ "Count", "Status", "----------------- Object ---------------");
}
-static const char *
-__lock_dump_status(status)
- db_status_t status;
+/*
+ * __lock_printlock --
+ *
+ * PUBLIC: void __lock_printlock __P((DB_LOCKTAB *,
+ * PUBLIC: struct __db_lock *, int, FILE *));
+ */
+void
+__lock_printlock(lt, lp, ispgno, fp)
+ DB_LOCKTAB *lt;
+ struct __db_lock *lp;
+ int ispgno;
+ FILE *fp;
{
- switch (status) {
+ DB_LOCKOBJ *lockobj;
+ db_pgno_t pgno;
+ u_int32_t *fidp, type;
+ u_int8_t *ptr;
+ char *namep;
+ const char *mode, *status;
+
+ /* Make it easy to call from the debugger. */
+ if (fp == NULL)
+ fp = stderr;
+
+ switch (lp->mode) {
+ case DB_LOCK_DIRTY:
+ mode = "DIRTY_READ";
+ break;
+ case DB_LOCK_IREAD:
+ mode = "IREAD";
+ break;
+ case DB_LOCK_IWR:
+ mode = "IWR";
+ break;
+ case DB_LOCK_IWRITE:
+ mode = "IWRITE";
+ break;
+ case DB_LOCK_NG:
+ mode = "NG";
+ break;
+ case DB_LOCK_READ:
+ mode = "READ";
+ break;
+ case DB_LOCK_WRITE:
+ mode = "WRITE";
+ break;
+ case DB_LOCK_WWRITE:
+ mode = "WAS_WRITE";
+ break;
+ case DB_LOCK_WAIT:
+ mode = "WAIT";
+ break;
+ default:
+ mode = "UNKNOWN";
+ break;
+ }
+ switch (lp->status) {
case DB_LSTAT_ABORTED:
- return ("aborted");
+ status = "ABORT";
+ break;
case DB_LSTAT_ERR:
- return ("err");
+ status = "ERROR";
+ break;
case DB_LSTAT_FREE:
- return ("free");
+ status = "FREE";
+ break;
case DB_LSTAT_HELD:
- return ("held");
- case DB_LSTAT_NOGRANT:
- return ("nogrant");
- case DB_LSTAT_PENDING:
- return ("pending");
+ status = "HELD";
+ break;
case DB_LSTAT_WAITING:
- return ("waiting");
+ status = "WAIT";
+ break;
+ case DB_LSTAT_PENDING:
+ status = "PENDING";
+ break;
+ case DB_LSTAT_EXPIRED:
+ status = "EXPIRED";
+ break;
+ default:
+ status = "UNKNOWN";
+ break;
+ }
+ fprintf(fp, "%8lx %-10s %4lu %-7s ",
+ (u_long)lp->holder, mode, (u_long)lp->refcount, status);
+
+ lockobj = (DB_LOCKOBJ *)((u_int8_t *)lp + lp->obj);
+ ptr = SH_DBT_PTR(&lockobj->lockobj);
+ if (ispgno && lockobj->lockobj.size == sizeof(struct __db_ilock)) {
+ /* Assume this is a DBT lock. */
+ memcpy(&pgno, ptr, sizeof(db_pgno_t));
+ fidp = (u_int32_t *)(ptr + sizeof(db_pgno_t));
+ type = *(u_int32_t *)(ptr + sizeof(db_pgno_t) + DB_FILE_ID_LEN);
+ if (__dbreg_get_name(lt->dbenv, (u_int8_t *)fidp, &namep) != 0)
+ namep = NULL;
+ if (namep == NULL)
+ fprintf(fp, "(%lx %lx %lx %lx %lx)",
+ (u_long)fidp[0], (u_long)fidp[1], (u_long)fidp[2],
+ (u_long)fidp[3], (u_long)fidp[4]);
+ else
+ fprintf(fp, "%-25s", namep);
+ fprintf(fp, "%-7s %7lu\n",
+ type == DB_PAGE_LOCK ? "page" :
+ type == DB_RECORD_LOCK ? "record" : "handle",
+ (u_long)pgno);
+ } else {
+ fprintf(fp, "0x%lx ", (u_long)R_OFFSET(&lt->reginfo, lockobj));
+ __db_pr(ptr, lockobj->lockobj.size, fp);
+ fprintf(fp, "\n");
}
- return ("unknown status");
}
diff --git a/db/lock/lock_util.c b/db/lock/lock_util.c
index fd5c6ad90..9a1d5ee9c 100644
--- a/db/lock/lock_util.c
+++ b/db/lock/lock_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: lock_util.c,v 11.5 2000/07/04 18:28:24 bostic Exp $";
+static const char revid[] = "$Id: lock_util.c,v 11.9 2003/01/08 05:22:12 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,10 +18,10 @@ static const char revid[] = "$Id: lock_util.c,v 11.5 2000/07/04 18:28:24 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "hash.h"
-#include "lock.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/hash.h"
+#include "dbinc/lock.h"
/*
* __lock_cmp --
diff --git a/db/log/log.c b/db/log/log.c
index 0c2169ab7..95c5fac90 100644
--- a/db/log/log.c
+++ b/db/log/log.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: log.c,v 11.111 2002/08/16 00:27:44 ubell Exp ";
+static const char revid[] = "$Id: log.c,v 11.133 2003/09/13 19:20:37 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,7 +16,6 @@ static const char revid[] = "Id: log.c,v 11.111 2002/08/16 00:27:44 ubell Exp ";
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -25,10 +24,11 @@ static const char revid[] = "Id: log.c,v 11.111 2002/08/16 00:27:44 ubell Exp ";
#include "dbinc/log.h"
#include "dbinc/txn.h"
-static int __log_init __P((DB_ENV *, DB_LOG *));
-static int __log_recover __P((DB_LOG *));
-static size_t __log_region_size __P((DB_ENV *));
-static int __log_zero __P((DB_ENV *, DB_LSN *, DB_LSN *));
+static int __log_init __P((DB_ENV *, DB_LOG *));
+static int __log_recover __P((DB_LOG *));
+static size_t __log_region_size __P((DB_ENV *));
+static int __log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
+static int __log_zero __P((DB_ENV *, DB_LSN *, DB_LSN *));
/*
* __log_open --
@@ -93,19 +93,35 @@ __log_open(dbenv)
dbenv->lg_handle = dblp;
if (F_ISSET(&dblp->reginfo, REGION_CREATE)) {
- if ((ret = __log_recover(dblp)) != 0) {
- dbenv->lg_handle = NULL;
- goto err;
- }
-
/*
* We first take the log file size from the environment, if
- * specified. If that wasn't set, recovery may have set it
- * from the persistent information in a log file header. If
- * that didn't set it either, we default.
+ * specified. If that wasn't set, default it. Regardless,
+ * recovery may set it from the persistent information in a
+ * log file header.
*/
if (lp->log_size == 0)
- lp->log_size = lp->log_nsize = LG_MAX_DEFAULT;
+ lp->log_size = LG_MAX_DEFAULT;
+
+ if ((ret = __log_recover(dblp)) != 0)
+ goto err;
+
+ /*
+ * If the next log file size hasn't been set yet, default it
+ * to the current log file size.
+ */
+ if (lp->log_nsize == 0)
+ lp->log_nsize = lp->log_size;
+
+ /*
+ * If we haven't written any log files, write the first one
+ * so that checkpoint gets a valid ckp_lsn value.
+ */
+ if (IS_INIT_LSN(lp->lsn) &&
+ (ret = __log_newfile(dblp, NULL)) != 0)
+ goto err;
+
+ /* Initialize replication's next-expected LSN value. */
+ lp->ready_lsn = lp->lsn;
} else {
/*
* A process joining the region may have reset the log file
@@ -119,7 +135,8 @@ __log_open(dbenv)
R_UNLOCK(dbenv, &dblp->reginfo);
return (0);
-err: if (dblp->reginfo.addr != NULL) {
+err: dbenv->lg_handle = NULL;
+ if (dblp->reginfo.addr != NULL) {
if (F_ISSET(&dblp->reginfo, REGION_CREATE))
ret = __db_panic(dbenv, ret);
R_UNLOCK(dbenv, &dblp->reginfo);
@@ -166,7 +183,6 @@ __log_init(dbenv, dblp)
/* Initialize LOG LSNs. */
INIT_LSN(region->lsn);
- INIT_LSN(region->ready_lsn);
INIT_LSN(region->t_lsn);
/*
@@ -294,11 +310,11 @@ __log_recover(dblp)
* Allocate a cursor and set it to the first record. This shouldn't
* fail, leave error messages on.
*/
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
F_SET(logc, DB_LOG_LOCKED);
memset(&dbt, 0, sizeof(dbt));
- if ((ret = logc->get(logc, &lsn, &dbt, DB_SET)) != 0)
+ if ((ret = __log_c_get(logc, &lsn, &dbt, DB_SET)) != 0)
goto err;
/*
@@ -306,7 +322,7 @@ __log_recover(dblp)
* turn off error messages.
*/
F_SET(logc, DB_LOG_SILENT_ERR);
- while (logc->get(logc, &lsn, &dbt, DB_NEXT) == 0) {
+ while (__log_c_get(logc, &lsn, &dbt, DB_NEXT) == 0) {
if (dbt.size < sizeof(u_int32_t))
continue;
memcpy(&rectype, dbt.data, sizeof(u_int32_t));
@@ -342,7 +358,7 @@ skipsearch:
(u_long)lp->lsn.file, (u_long)lp->lsn.offset);
err: if (logc != NULL)
- (void)logc->close(logc, 0);
+ (void)__log_c_close(logc);
return (ret);
}
@@ -446,7 +462,7 @@ __log_find(dblp, find_first, valp, statusp)
if (logval != 0 && clv < logval)
continue;
- if ((ret = __log_valid(dblp, clv, 1, &status)) != 0) {
+ if ((ret = __log_valid(dblp, clv, 1, NULL, 0, &status)) != 0) {
__db_err(dbenv, "Invalid log file: %s: %s",
names[cnt], db_strerror(ret));
goto err;
@@ -510,40 +526,49 @@ err: __os_dirfree(dbenv, names, fcnt);
* log file if it is not unexpectedly flawed (that is, if it's perfectly
* normal, if it's zero-length, or if it's an old version).
*
- * PUBLIC: int __log_valid __P((DB_LOG *, u_int32_t, int, logfile_validity *));
+ * PUBLIC: int __log_valid __P((DB_LOG *, u_int32_t, int,
+ * PUBLIC: DB_FH **, int, logfile_validity *));
*/
int
-__log_valid(dblp, number, set_persist, statusp)
+__log_valid(dblp, number, set_persist, fhpp, flags, statusp)
DB_LOG *dblp;
u_int32_t number;
int set_persist;
+ DB_FH **fhpp;
+ int flags;
logfile_validity *statusp;
{
DB_CIPHER *db_cipher;
DB_ENV *dbenv;
- DB_FH fh;
+ DB_FH *fhp;
HDR *hdr;
LOG *region;
LOGP *persist;
logfile_validity status;
size_t hdrsize, nw, recsize;
- int is_hmac, need_free, ret;
+ int is_hmac, ret;
u_int8_t *tmp;
char *fname;
dbenv = dblp->dbenv;
db_cipher = dbenv->crypto_handle;
+ fhp = NULL;
persist = NULL;
status = DB_LV_NORMAL;
+ tmp = NULL;
+
+ /* Return the file handle to our caller, on request */
+ if (fhpp != NULL)
+ *fhpp = NULL;
+ if (flags == 0)
+ flags = DB_OSO_RDONLY | DB_OSO_SEQ;
/* Try to open the log file. */
- if ((ret = __log_name(dblp,
- number, &fname, &fh, DB_OSO_RDONLY | DB_OSO_SEQ)) != 0) {
+ if ((ret = __log_name(dblp, number, &fname, &fhp, flags)) != 0) {
__os_free(dbenv, fname);
return (ret);
}
- need_free = 0;
hdrsize = HDR_NORMAL_SZ;
is_hmac = 0;
recsize = sizeof(LOGP);
@@ -554,12 +579,12 @@ __log_valid(dblp, number, set_persist, statusp)
is_hmac = 1;
}
if ((ret = __os_calloc(dbenv, 1, recsize + hdrsize, &tmp)) != 0)
- return (ret);
- need_free = 1;
+ goto err;
+
hdr = (HDR *)tmp;
persist = (LOGP *)(tmp + hdrsize);
/* Try to read the header. */
- if ((ret = __os_read(dbenv, &fh, tmp, recsize + hdrsize, &nw)) != 0 ||
+ if ((ret = __os_read(dbenv, fhp, tmp, recsize + hdrsize, &nw)) != 0 ||
nw != recsize + hdrsize) {
if (ret == 0)
status = DB_LV_INCOMPLETE;
@@ -570,11 +595,8 @@ __log_valid(dblp, number, set_persist, statusp)
*/
__db_err(dbenv, "Ignoring log file: %s: %s",
fname, db_strerror(ret));
-
- (void)__os_closehandle(dbenv, &fh);
goto err;
}
- (void)__os_closehandle(dbenv, &fh);
/*
* Now we have to validate the persistent record. We have
@@ -643,6 +665,10 @@ __log_valid(dblp, number, set_persist, statusp)
goto err;
} else if (persist->version < DB_LOGOLDVER) {
status = DB_LV_OLD_UNREADABLE;
+ /* This is a non-fatal error, but give some feedback. */
+ __db_err(dbenv,
+ "Ignoring log file: %s: unreadable log version %lu",
+ fname, (u_long)persist->version);
/*
* We don't want to set persistent info based on an
* unreadable region, so jump to "err".
@@ -668,8 +694,7 @@ __log_valid(dblp, number, set_persist, statusp)
* If the log is readable so far and we're doing system initialization,
* set the region's persistent information based on the headers.
*
- * Always set the current log file size. Only set the next log file's
- * size if the application hasn't set it already.
+ * Override the current log file size.
*
* XXX
* Always use the persistent header's mode, regardless of what was set
@@ -680,15 +705,21 @@ __log_valid(dblp, number, set_persist, statusp)
if (set_persist) {
region = dblp->reginfo.primary;
region->log_size = persist->log_size;
- if (region->log_nsize == 0)
- region->log_nsize = persist->log_size;
region->persist.mode = persist->mode;
}
-err: __os_free(dbenv, fname);
- if (need_free)
+err: if (fname != NULL)
+ __os_free(dbenv, fname);
+ if (ret == 0 && fhpp != NULL)
+ *fhpp = fhp;
+ else
+ /* Must close on error or if we only used it locally. */
+ (void)__os_closehandle(dbenv, fhp);
+ if (tmp != NULL)
__os_free(dbenv, tmp);
+
*statusp = status;
+
return (ret);
}
@@ -722,9 +753,12 @@ __log_dbenv_refresh(dbenv)
ret = t_ret;
/* Close open files, release allocated memory. */
- if (F_ISSET(&dblp->lfh, DB_FH_VALID) &&
- (t_ret = __os_closehandle(dbenv, &dblp->lfh)) != 0 && ret == 0)
- ret = t_ret;
+ if (dblp->lfhp != NULL) {
+ if ((t_ret =
+ __os_closehandle(dbenv, dblp->lfhp)) != 0 && ret == 0)
+ ret = t_ret;
+ dblp->lfhp = NULL;
+ }
if (dblp->dbentry != NULL)
__os_free(dbenv, dblp->dbentry);
@@ -735,31 +769,53 @@ __log_dbenv_refresh(dbenv)
}
/*
- * __log_stat --
- * Return log statistics.
+ * __log_stat_pp --
+ * DB_ENV->log_stat pre/post processing.
*
- * PUBLIC: int __log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
+ * PUBLIC: int __log_stat_pp __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
*/
int
-__log_stat(dbenv, statp, flags)
+__log_stat_pp(dbenv, statp, flags)
DB_ENV *dbenv;
DB_LOG_STAT **statp;
u_int32_t flags;
{
- DB_LOG *dblp;
- DB_LOG_STAT *stats;
- LOG *region;
- int ret;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
dbenv->lg_handle, "DB_ENV->log_stat", DB_INIT_LOG);
- *statp = NULL;
if ((ret = __db_fchk(dbenv,
"DB_ENV->log_stat", flags, DB_STAT_CLEAR)) != 0)
return (ret);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_stat(dbenv, statp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __log_stat --
+ * Return log statistics.
+ */
+static int
+__log_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_LOG_STAT **statp;
+ u_int32_t flags;
+{
+ DB_LOG *dblp;
+ DB_LOG_STAT *stats;
+ LOG *region;
+ int ret;
+
+ *statp = NULL;
+
dblp = dbenv->lg_handle;
region = dblp->reginfo.primary;
@@ -867,30 +923,29 @@ __log_region_destroy(dbenv, infop)
* record to be written). This is used in replication to discard records
* in the log file that do not agree with the master.
*
- * PUBLIC: int __log_vtruncate __P((DB_ENV *, DB_LSN *, DB_LSN *));
+ * PUBLIC: int __log_vtruncate __P((DB_ENV *, DB_LSN *, DB_LSN *, DB_LSN *));
*/
int
-__log_vtruncate(dbenv, lsn, ckplsn)
+__log_vtruncate(dbenv, lsn, ckplsn, trunclsn)
DB_ENV *dbenv;
- DB_LSN *lsn, *ckplsn;
+ DB_LSN *lsn, *ckplsn, *trunclsn;
{
DBT log_dbt;
- DB_FH fh;
DB_LOG *dblp;
DB_LOGC *logc;
DB_LSN end_lsn;
+ DB_MUTEX *flush_mutexp;
LOG *lp;
u_int32_t bytes, c_len;
- int fn, ret, t_ret;
- char *fname;
+ int ret, t_ret;
/* Need to find out the length of this soon-to-be-last record. */
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
memset(&log_dbt, 0, sizeof(log_dbt));
- ret = logc->get(logc, lsn, &log_dbt, DB_SET);
+ ret = __log_c_get(logc, lsn, &log_dbt, DB_SET);
c_len = logc->c_len;
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
return (ret);
@@ -900,6 +955,14 @@ __log_vtruncate(dbenv, lsn, ckplsn)
lp = (LOG *)dblp->reginfo.primary;
R_LOCK(dbenv, &dblp->reginfo);
+
+ /*
+ * Flush the log so we can simply initialize the in-memory buffer
+ * after the truncate.
+ */
+ if ((ret = __log_flush_int(dblp, NULL, 0)) != 0)
+ goto err;
+
end_lsn = lp->lsn;
lp->lsn = *lsn;
lp->len = c_len;
@@ -927,39 +990,18 @@ __log_vtruncate(dbenv, lsn, ckplsn)
* If the saved lsn is greater than our new end of log, reset it
* to our current end of log.
*/
+ flush_mutexp = R_ADDR(&dblp->reginfo, lp->flush_mutex_off);
+ MUTEX_LOCK(dbenv, flush_mutexp);
if (log_compare(&lp->s_lsn, lsn) > 0)
lp->s_lsn = lp->lsn;
+ MUTEX_UNLOCK(dbenv, flush_mutexp);
- /*
- * If the new end of log is in the middle of the buffer,
- * don't change the w_off or f_lsn. If the new end is
- * before the w_off then reset w_off and f_lsn to the new
- * end of log.
- */
- if (lp->w_off >= lp->lsn.offset) {
- lp->f_lsn = lp->lsn;
- lp->w_off = lp->lsn.offset;
- lp->b_off = 0;
- } else
- lp->b_off = lp->lsn.offset - lp->w_off;
+ /* Initialize the in-region buffer to a pristine state. */
+ ZERO_LSN(lp->f_lsn);
+ lp->w_off = lp->lsn.offset;
- ZERO_LSN(lp->waiting_lsn);
- lp->ready_lsn = lp->lsn;
- lp->wait_recs = 0;
- lp->rcvd_recs = 0;
-
- /* Now throw away any extra log files that we have around. */
- for (fn = lp->lsn.file + 1;; fn++) {
- if (__log_name(dblp, fn, &fname, &fh, DB_OSO_RDONLY) != 0) {
- __os_free(dbenv, fname);
- break;
- }
- (void)__os_closehandle(dbenv, &fh);
- ret = __os_unlink(dbenv, fname);
- __os_free(dbenv, fname);
- if (ret != 0)
- goto err;
- }
+ if (trunclsn != NULL)
+ *trunclsn = lp->lsn;
/* Truncate the log to the new point. */
if ((ret = __log_zero(dbenv, &lp->lsn, &end_lsn)) != 0)
@@ -977,8 +1019,7 @@ err: R_UNLOCK(dbenv, &dblp->reginfo);
* lower-numbered than the current logs, the we return *outdatedp non
* zero, else we return it 0.
*
- * PUBLIC: int __log_is_outdated __P((DB_ENV *dbenv,
- * PUBLIC: u_int32_t fnum, int *outdatedp));
+ * PUBLIC: int __log_is_outdated __P((DB_ENV *, u_int32_t, int *));
*/
int
__log_is_outdated(dbenv, fnum, outdatedp)
@@ -1027,58 +1068,92 @@ __log_zero(dbenv, from_lsn, to_lsn)
DB_ENV *dbenv;
DB_LSN *from_lsn, *to_lsn;
{
- char *lname;
+ DB_FH *fhp;
DB_LOG *dblp;
- LOG *lp;
- int ret;
size_t nbytes, len, nw;
u_int8_t buf[4096];
u_int32_t mbytes, bytes;
+ int fn, ret;
+ char *fname;
dblp = dbenv->lg_handle;
- lp = (LOG *)dblp->reginfo.primary;
- lname = NULL;
+ DB_ASSERT(log_compare(from_lsn, to_lsn) <= 0);
+ if (log_compare(from_lsn, to_lsn) > 0) {
+ __db_err(dbenv,
+ "Warning: truncating to point beyond end of log");
+ return (0);
+ }
- if (dblp->lfname != lp->lsn.file) {
- if (F_ISSET(&dblp->lfh, DB_FH_VALID))
- (void)__os_closehandle(dbenv, &dblp->lfh);
- dblp->lfname = lp->lsn.file;
+ /* Close any open file handles so unlinks don't fail. */
+ if (dblp->lfhp != NULL) {
+ (void)__os_closehandle(dbenv, dblp->lfhp);
+ dblp->lfhp = NULL;
}
- if (from_lsn->file != to_lsn->file) {
- /* We removed some log files; have to 0 to end of file. */
- if (!F_ISSET(&dblp->lfh, DB_FH_VALID) && (ret =
- __log_name(dblp, dblp->lfname, &lname, &dblp->lfh, 0)) != 0)
+ /* Throw away any extra log files that we have around. */
+ for (fn = from_lsn->file + 1;; fn++) {
+ if (__log_name(dblp, fn, &fname, &fhp, DB_OSO_RDONLY) != 0) {
+ __os_free(dbenv, fname);
+ break;
+ }
+ (void)__os_closehandle(dbenv, fhp);
+ ret = __os_unlink(dbenv, fname);
+ __os_free(dbenv, fname);
+ if (ret != 0)
return (ret);
- if ((ret = __os_ioinfo(dbenv,
- NULL, &dblp->lfh, &mbytes, &bytes, NULL)) != 0)
- goto err;
- len = mbytes * MEGABYTE + bytes - from_lsn->offset;
- } else if (to_lsn->offset <= from_lsn->offset)
- return (0);
- else
- len = to_lsn->offset = from_lsn->offset;
+ }
+
+ /* We removed some log files; have to 0 to end of file. */
+ if ((ret =
+ __log_name(dblp, from_lsn->file, &fname, &dblp->lfhp, 0)) != 0)
+ return (ret);
+ __os_free(dbenv, fname);
+ if ((ret = __os_ioinfo(dbenv,
+ NULL, dblp->lfhp, &mbytes, &bytes, NULL)) != 0)
+ goto err;
+ DB_ASSERT((mbytes * MEGABYTE + bytes) >= from_lsn->offset);
+ len = (mbytes * MEGABYTE + bytes) - from_lsn->offset;
memset(buf, 0, sizeof(buf));
/* Initialize the write position. */
- if (!F_ISSET(&dblp->lfh, DB_FH_VALID) &&
- (ret = __log_name(dblp, dblp->lfname, &lname, &dblp->lfh, 0)) != 0)
- goto err;
-
if ((ret = __os_seek(dbenv,
- &dblp->lfh, 0, 0, from_lsn->offset, 0, DB_OS_SEEK_SET)) != 0)
- return (ret);
+ dblp->lfhp, 0, 0, from_lsn->offset, 0, DB_OS_SEEK_SET)) != 0)
+ goto err;
while (len > 0) {
nbytes = len > sizeof(buf) ? sizeof(buf) : len;
if ((ret =
- __os_write(dbenv, &dblp->lfh, buf, nbytes, &nw)) != 0)
- return (ret);
+ __os_write(dbenv, dblp->lfhp, buf, nbytes, &nw)) != 0)
+ goto err;
len -= nbytes;
}
-err: if (lname != NULL)
- __os_free(dbenv, lname);
- return (0);
+err: (void)__os_closehandle(dbenv, dblp->lfhp);
+ dblp->lfhp = NULL;
+
+ return (ret);
+}
+
+/*
+ * __log_autoremove --
+ * Delete any non-essential log files.
+ *
+ * PUBLIC: void __log_autoremove __P((DB_ENV *));
+ */
+void
+__log_autoremove(dbenv)
+ DB_ENV *dbenv;
+{
+ char **begin, **list;
+
+ if (__log_archive(dbenv, &list, DB_ARCH_ABS) != 0)
+ return;
+
+ if (list != NULL) {
+ for (begin = list; *list != NULL; ++list)
+ (void)__os_unlink(dbenv, *list);
+ __os_ufree(dbenv, begin);
+ }
+ return;
}
diff --git a/db/log/log_archive.c b/db/log/log_archive.c
index 83728c79e..b5c80820d 100644
--- a/db/log/log_archive.c
+++ b/db/log/log_archive.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: log_archive.c,v 11.13 2000/11/30 00:58:40 ubell Exp $";
+static const char revid[] = "$Id: log_archive.c,v 11.51 2003/09/13 19:20:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,66 +19,114 @@ static const char revid[] = "$Id: log_archive.c,v 11.13 2000/11/30 00:58:40 ubel
#include <unistd.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_dispatch.h"
-#include "log.h"
-#include "clib_ext.h" /* XXX: needed for getcwd. */
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_page.h"
+#include "dbinc/log.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
static int __absname __P((DB_ENV *, char *, char *, char **));
-static int __build_data __P((DB_ENV *, char *, char ***, void *(*)(size_t)));
+static int __build_data __P((DB_ENV *, char *, char ***));
static int __cmpfunc __P((const void *, const void *));
-static int __usermem __P((DB_ENV *, char ***, void *(*)(size_t)));
+static int __usermem __P((DB_ENV *, char ***));
+
+/*
+ * __log_archive_pp --
+ * DB_ENV->log_archive pre/post processing.
+ *
+ * PUBLIC: int __log_archive_pp __P((DB_ENV *, char **[], u_int32_t));
+ */
+int
+__log_archive_pp(dbenv, listp, flags)
+ DB_ENV *dbenv;
+ char ***listp;
+ u_int32_t flags;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lg_handle, "DB_ENV->log_archive", DB_INIT_LOG);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_archive(dbenv, listp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
/*
- * log_archive --
- * Supporting function for db_archive(1).
+ * __log_archive --
+ * DB_ENV->log_archive.
+ *
+ * PUBLIC: int __log_archive __P((DB_ENV *, char **[], u_int32_t));
*/
int
-log_archive(dbenv, listp, flags, db_malloc)
+__log_archive(dbenv, listp, flags)
DB_ENV *dbenv;
char ***listp;
u_int32_t flags;
- void *(*db_malloc) __P((size_t));
{
DBT rec;
DB_LOG *dblp;
+ DB_LOGC *logc;
DB_LSN stable_lsn;
- u_int32_t fnum;
- int array_size, n, ret;
+ __txn_ckp_args *ckp_args;
char **array, **arrayp, *name, *p, *pref, buf[MAXPATHLEN];
+ int array_size, db_arch_abs, n, rep_check, ret;
+ u_int32_t fnum;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_log_archive(dbenv, listp, flags, db_malloc));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lg_handle, DB_INIT_LOG);
-
+ ret = 0;
name = NULL;
+ array = NULL;
dblp = dbenv->lg_handle;
COMPQUIET(fnum, 0);
-#define OKFLAGS (DB_ARCH_ABS | DB_ARCH_DATA | DB_ARCH_LOG)
+#define OKFLAGS (DB_ARCH_ABS | DB_ARCH_DATA | DB_ARCH_LOG | DB_ARCH_REMOVE)
if (flags != 0) {
- if ((ret =
- __db_fchk(dbenv, "log_archive", flags, OKFLAGS)) != 0)
+ if ((ret = __db_fchk(
+ dbenv, "DB_ENV->log_archive", flags, OKFLAGS)) != 0)
return (ret);
- if ((ret =
- __db_fcchk(dbenv,
- "log_archive", flags, DB_ARCH_DATA, DB_ARCH_LOG)) != 0)
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->log_archive",
+ flags, DB_ARCH_DATA, DB_ARCH_LOG)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv, "DB_ENV->log_archive",
+ flags, DB_ARCH_REMOVE,
+ DB_ARCH_ABS | DB_ARCH_DATA | DB_ARCH_LOG)) != 0)
return (ret);
}
+ if (LF_ISSET(DB_ARCH_ABS)) {
+ db_arch_abs = 1;
+ LF_CLR(DB_ARCH_ABS);
+ } else
+ db_arch_abs = 0;
+
+ if (flags == 0 || flags == DB_ARCH_DATA)
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->tx_handle, "DB_ENV->log_archive", DB_INIT_TXN);
+
+ /*
+ * If the user wants the list of log files to remove and we're
+ * at a bad time in replication initialization, give them
+ * back an empty list. Otherwise, wait until it's OK to run
+ * log archive.
+ */
+ rep_check = 0;
+ if (flags == 0 || flags == DB_ARCH_REMOVE || db_arch_abs) {
+ if (__rep_noarchive(dbenv)) {
+ *listp = NULL;
+ ret = 0;
+ goto err;
+ }
+ } else {
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ }
+
/*
* Get the absolute pathname of the current directory. It would
* be nice to get the shortest pathname of the database directory,
@@ -88,41 +136,69 @@ log_archive(dbenv, listp, flags, db_malloc)
* Can't trust getcwd(3) to set a valid errno. If it doesn't, just
* guess that we ran out of memory.
*/
- if (LF_ISSET(DB_ARCH_ABS)) {
+ if (db_arch_abs) {
__os_set_errno(0);
if ((pref = getcwd(buf, sizeof(buf))) == NULL) {
if (__os_get_errno() == 0)
__os_set_errno(ENOMEM);
- return (__os_get_errno());
+ ret = __os_get_errno();
+ goto err1;
}
} else
pref = NULL;
- switch (LF_ISSET(~DB_ARCH_ABS)) {
+ switch (flags) {
case DB_ARCH_DATA:
- return (__build_data(dbenv, pref, listp, db_malloc));
+ return (__build_data(dbenv, pref, listp));
case DB_ARCH_LOG:
memset(&rec, 0, sizeof(rec));
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- F_SET(&rec, DB_DBT_MALLOC);
- if ((ret = log_get(dbenv, &stable_lsn, &rec, DB_LAST)) != 0)
- return (ret);
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- __os_free(rec.data, rec.size);
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err1;
+#ifdef UMRW
+ ZERO_LSN(stable_lsn);
+#endif
+ ret = __log_c_get(logc, &stable_lsn, &rec, DB_LAST);
+ (void)__log_c_close(logc);
+ if (ret != 0)
+ goto err1;
fnum = stable_lsn.file;
break;
+ case DB_ARCH_REMOVE:
+ __log_autoremove(dbenv);
+ goto err1;
case 0:
- if ((ret = __log_findckp(dbenv, &stable_lsn)) != 0) {
+ memset(&rec, 0, sizeof(rec));
+ if (__txn_getckp(dbenv, &stable_lsn) != 0) {
/*
- * A return of DB_NOTFOUND means that we didn't find
- * any records in the log (so we are not going to be
- * deleting any log files).
+ * A failure return means that there's no checkpoint
+ * in the log (so we are not going to be deleting
+ * any log files).
*/
- if (ret != DB_NOTFOUND)
- return (ret);
*listp = NULL;
- return (0);
+ goto err1;
+ }
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err1;
+ if ((ret = __log_c_get(logc, &stable_lsn, &rec, DB_SET)) != 0 ||
+ (ret = __txn_ckp_read(dbenv, rec.data, &ckp_args)) != 0) {
+ /*
+ * A return of DB_NOTFOUND may only mean that the
+ * checkpoint LSN is before the beginning of the
+ * log files that we still have. This is not
+ * an error; it just means our work is done.
+ */
+ if (ret == DB_NOTFOUND) {
+ *listp = NULL;
+ ret = 0;
+ }
+ (void)__log_c_close(logc);
+ goto err1;
}
+ if ((ret = __log_c_close(logc)) != 0)
+ goto err1;
+ stable_lsn = ckp_args->ckp_lsn;
+ __os_free(dbenv, ckp_args);
+
/* Remove any log files before the last stable LSN. */
fnum = stable_lsn.file - 1;
break;
@@ -130,10 +206,10 @@ log_archive(dbenv, listp, flags, db_malloc)
#define LIST_INCREMENT 64
/* Get some initial space. */
- array_size = 10;
+ array_size = 64;
if ((ret = __os_malloc(dbenv,
- sizeof(char *) * array_size, NULL, &array)) != 0)
- return (ret);
+ sizeof(char *) * array_size, &array)) != 0)
+ goto err1;
array[0] = NULL;
/* Build an array of the file names. */
@@ -143,27 +219,27 @@ log_archive(dbenv, listp, flags, db_malloc)
if (__os_exists(name, NULL) != 0) {
if (LF_ISSET(DB_ARCH_LOG) && fnum == stable_lsn.file)
continue;
- __os_freestr(name);
+ __os_free(dbenv, name);
name = NULL;
break;
}
- if (n >= array_size - 1) {
+ if (n >= array_size - 2) {
array_size += LIST_INCREMENT;
if ((ret = __os_realloc(dbenv,
- sizeof(char *) * array_size, NULL, &array)) != 0)
+ sizeof(char *) * array_size, &array)) != 0)
goto err;
}
- if (LF_ISSET(DB_ARCH_ABS)) {
+ if (db_arch_abs) {
if ((ret = __absname(dbenv,
pref, name, &array[n])) != 0)
goto err;
- __os_freestr(name);
+ __os_free(dbenv, name);
} else if ((p = __db_rpath(name)) != NULL) {
if ((ret = __os_strdup(dbenv, p + 1, &array[n])) != 0)
goto err;
- __os_freestr(name);
+ __os_free(dbenv, name);
} else
array[n] = name;
@@ -182,7 +258,7 @@ log_archive(dbenv, listp, flags, db_malloc)
qsort(array, (size_t)n, sizeof(char *), __cmpfunc);
/* Rework the memory. */
- if ((ret = __usermem(dbenv, &array, db_malloc)) != 0)
+ if ((ret = __usermem(dbenv, &array)) != 0)
goto err;
*listp = array;
@@ -190,11 +266,13 @@ log_archive(dbenv, listp, flags, db_malloc)
err: if (array != NULL) {
for (arrayp = array; *arrayp != NULL; ++arrayp)
- __os_freestr(*arrayp);
- __os_free(array, sizeof(char *) * array_size);
+ __os_free(dbenv, *arrayp);
+ __os_free(dbenv, array);
}
if (name != NULL)
- __os_freestr(name);
+ __os_free(dbenv, name);
+err1: if (rep_check)
+ __env_rep_exit(dbenv);
return (ret);
}
@@ -203,73 +281,89 @@ err: if (array != NULL) {
* Build a list of datafiles for return.
*/
static int
-__build_data(dbenv, pref, listp, db_malloc)
+__build_data(dbenv, pref, listp)
DB_ENV *dbenv;
char *pref, ***listp;
- void *(*db_malloc) __P((size_t));
{
DBT rec;
+ DB_LOGC *logc;
DB_LSN lsn;
- __log_register_args *argp;
+ __dbreg_register_args *argp;
u_int32_t rectype;
- int array_size, last, n, nxt, ret;
- char **array, **arrayp, *p, *real_name;
+ int array_size, last, n, nxt, ret, t_ret;
+ char **array, **arrayp, **list, **lp, *p, *real_name;
/* Get some initial space. */
- array_size = 10;
+ array_size = 64;
if ((ret = __os_malloc(dbenv,
- sizeof(char *) * array_size, NULL, &array)) != 0)
+ sizeof(char *) * array_size, &array)) != 0)
return (ret);
array[0] = NULL;
memset(&rec, 0, sizeof(rec));
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- F_SET(&rec, DB_DBT_MALLOC);
- for (n = 0, ret = log_get(dbenv, &lsn, &rec, DB_FIRST);
- ret == 0; ret = log_get(dbenv, &lsn, &rec, DB_NEXT)) {
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+ for (n = 0; (ret = __log_c_get(logc, &lsn, &rec, DB_PREV)) == 0;) {
if (rec.size < sizeof(rectype)) {
ret = EINVAL;
- __db_err(dbenv, "log_archive: bad log record");
- goto lg_free;
+ __db_err(dbenv, "DB_ENV->log_archive: bad log record");
+ goto free_continue;
}
memcpy(&rectype, rec.data, sizeof(rectype));
- if (rectype != DB_log_register) {
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- __os_free(rec.data, rec.size);
- rec.data = NULL;
- }
+ if (rectype != DB___dbreg_register)
continue;
- }
- if ((ret = __log_register_read(dbenv, rec.data, &argp)) != 0) {
+ if ((ret =
+ __dbreg_register_read(dbenv, rec.data, &argp)) != 0) {
ret = EINVAL;
__db_err(dbenv,
- "log_archive: unable to read log record");
- goto lg_free;
+ "DB_ENV->log_archive: unable to read log record");
+ goto free_continue;
}
- if (n >= array_size - 1) {
+ if (n >= array_size - 2) {
array_size += LIST_INCREMENT;
if ((ret = __os_realloc(dbenv,
- sizeof(char *) * array_size, NULL, &array)) != 0)
- goto lg_free;
+ sizeof(char *) * array_size, &array)) != 0)
+ goto free_continue;
}
if ((ret = __os_strdup(dbenv,
- argp->name.data, &array[n])) != 0) {
-lg_free: if (F_ISSET(&rec, DB_DBT_MALLOC) && rec.data != NULL)
- __os_free(rec.data, rec.size);
- goto err1;
- }
-
- array[++n] = NULL;
- __os_free(argp, 0);
-
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- __os_free(rec.data, rec.size);
- rec.data = NULL;
+ argp->name.data, &array[n++])) != 0)
+ goto free_continue;
+ array[n] = NULL;
+
+ if (argp->ftype == DB_QUEUE) {
+ if ((ret = __qam_extent_names(dbenv,
+ argp->name.data, &list)) != 0)
+ goto q_err;
+ for (lp = list;
+ lp != NULL && *lp != NULL; lp++) {
+ if (n >= array_size - 2) {
+ array_size += LIST_INCREMENT;
+ if ((ret = __os_realloc(dbenv,
+ sizeof(char *) *
+ array_size, &array)) != 0)
+ goto q_err;
+ }
+ if ((ret =
+ __os_strdup(dbenv, *lp, &array[n++])) != 0)
+ goto q_err;
+ array[n] = NULL;
+ }
+q_err: if (list != NULL)
+ __os_free(dbenv, list);
}
+free_continue: __os_free(dbenv, argp);
+ if (ret != 0)
+ break;
}
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ if (ret != 0)
+ goto err1;
/* If there's nothing to return, we're done. */
if (n == 0) {
@@ -297,34 +391,34 @@ lg_free: if (F_ISSET(&rec, DB_DBT_MALLOC) && rec.data != NULL)
}
for (++nxt; nxt < n &&
strcmp(array[last], array[nxt]) == 0; ++nxt) {
- __os_freestr(array[nxt]);
+ __os_free(dbenv, array[nxt]);
array[nxt] = NULL;
}
/* Get the real name. */
if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, array[last], 0, NULL, &real_name)) != 0)
+ DB_APP_DATA, array[last], 0, NULL, &real_name)) != 0)
goto err2;
/* If the file doesn't exist, ignore it. */
if (__os_exists(real_name, NULL) != 0) {
- __os_freestr(real_name);
- __os_freestr(array[last]);
+ __os_free(dbenv, real_name);
+ __os_free(dbenv, array[last]);
array[last] = NULL;
continue;
}
/* Rework the name as requested by the user. */
- __os_freestr(array[last]);
+ __os_free(dbenv, array[last]);
array[last] = NULL;
if (pref != NULL) {
ret = __absname(dbenv, pref, real_name, &array[last]);
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
if (ret != 0)
goto err2;
} else if ((p = __db_rpath(real_name)) != NULL) {
ret = __os_strdup(dbenv, p + 1, &array[last]);
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
if (ret != 0)
goto err2;
} else
@@ -336,7 +430,7 @@ lg_free: if (F_ISSET(&rec, DB_DBT_MALLOC) && rec.data != NULL)
array[last] = NULL;
/* Rework the memory. */
- if ((ret = __usermem(dbenv, &array, db_malloc)) != 0)
+ if ((ret = __usermem(dbenv, &array)) != 0)
goto err1;
*listp = array;
@@ -349,13 +443,13 @@ err2: /*
*/
if (array != NULL)
for (; nxt < n; ++nxt)
- __os_freestr(array[nxt]);
+ __os_free(dbenv, array[nxt]);
/* FALLTHROUGH */
err1: if (array != NULL) {
for (arrayp = array; *arrayp != NULL; ++arrayp)
- __os_freestr(*arrayp);
- __os_free(array, array_size * sizeof(char *));
+ __os_free(dbenv, *arrayp);
+ __os_free(dbenv, array);
}
return (ret);
}
@@ -379,7 +473,7 @@ __absname(dbenv, pref, name, newnamep)
/* Malloc space for concatenating the two. */
if ((ret = __os_malloc(dbenv,
- l_pref + l_name + 2, NULL, &newname)) != 0)
+ l_pref + l_name + 2, &newname)) != 0)
return (ret);
*newnamep = newname;
@@ -400,10 +494,9 @@ __absname(dbenv, pref, name, newnamep)
* If the user has their own malloc routine, use it.
*/
static int
-__usermem(dbenv, listp, db_malloc)
+__usermem(dbenv, listp)
DB_ENV *dbenv;
char ***listp;
- void *(*db_malloc) __P((size_t));
{
size_t len;
int ret;
@@ -415,7 +508,7 @@ __usermem(dbenv, listp, db_malloc)
len += sizeof(char *);
/* Allocate it and set up the pointers. */
- if ((ret = __os_malloc(dbenv, len, db_malloc, &array)) != 0)
+ if ((ret = __os_umalloc(dbenv, len, &array)) != 0)
return (ret);
strp = (char *)(array + (orig - *listp) + 1);
@@ -427,13 +520,13 @@ __usermem(dbenv, listp, db_malloc)
*arrayp = strp;
strp += len + 1;
- __os_freestr(*orig);
+ __os_free(dbenv, *orig);
}
/* NULL-terminate the list. */
*arrayp = NULL;
- __os_free(*listp, 0);
+ __os_free(dbenv, *listp);
*listp = array;
return (0);
diff --git a/db/log/log_compare.c b/db/log/log_compare.c
index 9bc3c028a..6bc672718 100644
--- a/db/log/log_compare.c
+++ b/db/log/log_compare.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: log_compare.c,v 11.3 2000/02/14 02:59:59 bostic Exp $";
+static const char revid[] = "$Id: log_compare.c,v 11.7 2003/01/08 05:23:59 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,6 +19,8 @@ static const char revid[] = "$Id: log_compare.c,v 11.3 2000/02/14 02:59:59 bosti
/*
* log_compare --
* Compare two LSN's; return 1, 0, -1 if first is >, == or < second.
+ *
+ * EXTERN: int log_compare __P((const DB_LSN *, const DB_LSN *));
*/
int
log_compare(lsn0, lsn1)
diff --git a/db/log/log_get.c b/db/log/log_get.c
index b75d50a62..82697d834 100644
--- a/db/log/log_get.c
+++ b/db/log/log_get.c
@@ -1,97 +1,260 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: log_get.c,v 11.32 2001/01/11 18:19:53 bostic Exp $";
+static const char revid[] = "$Id: log_get.c,v 11.98 2003/09/13 19:20:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "log.h"
-#include "hash.h"
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hmac.h"
+#include "dbinc/log.h"
+#include "dbinc/hash.h"
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+typedef enum { L_ALREADY, L_ACQUIRED, L_NONE } RLOCK;
+
+static int __log_c_close_pp __P((DB_LOGC *, u_int32_t));
+static int __log_c_get_pp __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+static int __log_c_get_int __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+static int __log_c_hdrchk __P((DB_LOGC *, DB_LSN *, HDR *, int *));
+static int __log_c_incursor __P((DB_LOGC *, DB_LSN *, HDR *, u_int8_t **));
+static int __log_c_inregion __P((DB_LOGC *,
+ DB_LSN *, RLOCK *, DB_LSN *, HDR *, u_int8_t **));
+static int __log_c_io __P((DB_LOGC *,
+ u_int32_t, u_int32_t, void *, size_t *, int *));
+static int __log_c_ondisk __P((DB_LOGC *,
+ DB_LSN *, DB_LSN *, int, HDR *, u_int8_t **, int *));
+static int __log_c_set_maxrec __P((DB_LOGC *, char *));
+static int __log_c_shortread __P((DB_LOGC *, DB_LSN *, int));
+
+/*
+ * __log_cursor_pp --
+ * DB_ENV->log_cursor
+ *
+ * PUBLIC: int __log_cursor_pp __P((DB_ENV *, DB_LOGC **, u_int32_t));
+ */
+int
+__log_cursor_pp(dbenv, logcp, flags)
+ DB_ENV *dbenv;
+ DB_LOGC **logcp;
+ u_int32_t flags;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lg_handle, "DB_ENV->log_cursor", DB_INIT_LOG);
+
+ /* Validate arguments. */
+ if ((ret = __db_fchk(dbenv, "DB_ENV->log_cursor", flags, 0)) != 0)
+ return (ret);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_cursor(dbenv, logcp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
/*
- * log_get --
- * Get a log record.
+ * __log_cursor --
+ * Create a log cursor.
+ *
+ * PUBLIC: int __log_cursor __P((DB_ENV *, DB_LOGC **));
*/
int
-log_get(dbenv, alsn, dbt, flags)
+__log_cursor(dbenv, logcp)
DB_ENV *dbenv;
+ DB_LOGC **logcp;
+{
+ DB_LOGC *logc;
+ int ret;
+
+ *logcp = NULL;
+
+ /* Allocate memory for the cursor. */
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_LOGC), &logc)) != 0)
+ return (ret);
+
+ logc->bp_size = DB_LOGC_BUF_SIZE;
+ /*
+ * Set this to something positive.
+ */
+ logc->bp_maxrec = MEGABYTE;
+ if ((ret = __os_malloc(dbenv, logc->bp_size, &logc->bp)) != 0) {
+ __os_free(dbenv, logc);
+ return (ret);
+ }
+
+ logc->dbenv = dbenv;
+ logc->close = __log_c_close_pp;
+ logc->get = __log_c_get_pp;
+
+ *logcp = logc;
+ return (0);
+}
+
+/*
+ * __log_c_close_pp --
+ * DB_LOGC->close pre/post processing.
+ */
+static int
+__log_c_close_pp(logc, flags)
+ DB_LOGC *logc;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int rep_check, ret;
+
+ dbenv = logc->dbenv;
+
+ PANIC_CHECK(dbenv);
+ if ((ret = __db_fchk(dbenv, "DB_LOGC->close", flags, 0)) != 0)
+ return (ret);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_c_close(logc);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __log_c_close --
+ * DB_LOGC->close.
+ *
+ * PUBLIC: int __log_c_close __P((DB_LOGC *));
+ */
+int
+__log_c_close(logc)
+ DB_LOGC *logc;
+{
+ DB_ENV *dbenv;
+
+ dbenv = logc->dbenv;
+
+ if (logc->c_fhp != NULL) {
+ (void)__os_closehandle(dbenv, logc->c_fhp);
+ logc->c_fhp = NULL;
+ }
+
+ if (logc->c_dbt.data != NULL)
+ __os_free(dbenv, logc->c_dbt.data);
+
+ __os_free(dbenv, logc->bp);
+ __os_free(dbenv, logc);
+
+ return (0);
+}
+
+/*
+ * __log_c_get_pp --
+ * DB_LOGC->get pre/post processing.
+ */
+static int
+__log_c_get_pp(logc, alsn, dbt, flags)
+ DB_LOGC *logc;
DB_LSN *alsn;
DBT *dbt;
u_int32_t flags;
{
- DB_LOG *dblp;
- DB_LSN saved_lsn;
- int ret;
+ DB_ENV *dbenv;
+ int rep_check, ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_log_get(dbenv, alsn, dbt, flags));
-#endif
+ dbenv = logc->dbenv;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->lg_handle, DB_INIT_LOG);
/* Validate arguments. */
- if (flags != DB_CHECKPOINT && flags != DB_CURRENT &&
- flags != DB_FIRST && flags != DB_LAST &&
- flags != DB_NEXT && flags != DB_PREV && flags != DB_SET)
- return (__db_ferr(dbenv, "log_get", 1));
-
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- if (flags == DB_NEXT || flags == DB_PREV || flags == DB_CURRENT)
- return (__db_ferr(dbenv, "log_get", 1));
- if (!F_ISSET(dbt,
- DB_DBT_MALLOC | DB_DBT_REALLOC | DB_DBT_USERMEM))
- return (__db_ferr(dbenv, "threaded data", 1));
+ switch (flags) {
+ case DB_CURRENT:
+ case DB_FIRST:
+ case DB_LAST:
+ case DB_NEXT:
+ case DB_PREV:
+ break;
+ case DB_SET:
+ if (IS_ZERO_LSN(*alsn)) {
+ __db_err(dbenv, "DB_LOGC->get: invalid LSN: %lu/%lu",
+ (u_long)alsn->file, (u_long)alsn->offset);
+ return (EINVAL);
+ }
+ break;
+ default:
+ return (__db_ferr(dbenv, "DB_LOGC->get", 1));
}
- dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_c_get(logc, alsn, dbt, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __log_c_get --
+ * DB_LOGC->get.
+ *
+ * PUBLIC: int __log_c_get __P((DB_LOGC *, DB_LSN *, DBT *, u_int32_t));
+ */
+int
+__log_c_get(logc, alsn, dbt, flags)
+ DB_LOGC *logc;
+ DB_LSN *alsn;
+ DBT *dbt;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ DB_LSN saved_lsn;
+ int ret;
+
+ dbenv = logc->dbenv;
/*
- * The alsn field is only initialized if DB_SET is the flag, so this
- * assignment causes uninitialized memory complaints for other flag
- * values.
+ * On error, we take care not to overwrite the caller's LSN. This
+ * is because callers looking for the end of the log loop using the
+ * DB_NEXT flag, and expect to take the last successful lsn out of
+ * the passed-in structure after DB_LOGC->get fails with DB_NOTFOUND.
+ *
+ * !!!
+ * This line is often flagged an uninitialized memory read during a
+ * Purify or similar tool run, as the application didn't initialize
+ * *alsn. If the application isn't setting the DB_SET flag, there is
+ * no reason it should have initialized *alsn, but we can't know that
+ * and we want to make sure we never overwrite whatever the application
+ * put in there.
*/
-#ifdef UMRW
- if (flags == DB_SET)
- saved_lsn = *alsn;
- else
- ZERO_LSN(saved_lsn);
-#else
saved_lsn = *alsn;
-#endif
/*
- * If we get one of the log's header records, repeat the operation.
- * This assumes that applications don't ever request the log header
- * records by LSN, but that seems reasonable to me.
+ * If we get one of the log's header records as a result of doing a
+ * DB_FIRST, DB_NEXT, DB_LAST or DB_PREV, repeat the operation, log
+ * file header records aren't useful to applications.
*/
- if ((ret = __log_get(dblp,
- alsn, dbt, flags, 0)) == 0 && alsn->offset == 0) {
+ if ((ret = __log_c_get_int(logc, alsn, dbt, flags)) != 0) {
+ *alsn = saved_lsn;
+ return (ret);
+ }
+ if (alsn->offset == 0 && (flags == DB_FIRST ||
+ flags == DB_NEXT || flags == DB_LAST || flags == DB_PREV)) {
switch (flags) {
case DB_FIRST:
flags = DB_NEXT;
@@ -101,92 +264,100 @@ log_get(dbenv, alsn, dbt, flags)
break;
}
if (F_ISSET(dbt, DB_DBT_MALLOC)) {
- __os_free(dbt->data, dbt->size);
+ __os_free(dbenv, dbt->data);
dbt->data = NULL;
}
- ret = __log_get(dblp, alsn, dbt, flags, 0);
+ if ((ret = __log_c_get_int(logc, alsn, dbt, flags)) != 0) {
+ *alsn = saved_lsn;
+ return (ret);
+ }
}
- if (ret != 0)
- *alsn = saved_lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
-
- return (ret);
+ return (0);
}
/*
- * __log_get --
+ * __log_c_get_int --
* Get a log record; internal version.
- *
- * PUBLIC: int __log_get __P((DB_LOG *, DB_LSN *, DBT *, u_int32_t, int));
*/
-int
-__log_get(dblp, alsn, dbt, flags, silent)
- DB_LOG *dblp;
+static int
+__log_c_get_int(logc, alsn, dbt, flags)
+ DB_LOGC *logc;
DB_LSN *alsn;
DBT *dbt;
u_int32_t flags;
- int silent;
{
+ DB_CIPHER *db_cipher;
DB_ENV *dbenv;
- DB_LSN nlsn;
+ DB_LOG *dblp;
+ DB_LSN last_lsn, nlsn;
HDR hdr;
LOG *lp;
- const char *fail;
- char *np, *tbuf;
- int cnt, ret;
+ RLOCK rlock;
logfile_validity status;
- size_t len, nr;
- u_int32_t offset;
- u_int8_t *p;
- void *shortp, *readp;
+ u_int32_t cnt;
+ u_int8_t *rp;
+ int eof, is_hmac, ret;
+ dbenv = logc->dbenv;
+ dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- fail = np = tbuf = NULL;
- dbenv = dblp->dbenv;
+ is_hmac = 0;
- nlsn = dblp->c_lsn;
+ /*
+ * We don't acquire the log region lock until we need it, and we
+ * release it as soon as we're done.
+ */
+ rlock = F_ISSET(logc, DB_LOG_LOCKED) ? L_ALREADY : L_NONE;
+
+ nlsn = logc->c_lsn;
switch (flags) {
- case DB_CHECKPOINT:
- nlsn = lp->chkpt_lsn;
- if (IS_ZERO_LSN(nlsn)) {
- /* No db_err. The caller may expect this. */
- ret = ENOENT;
- goto err2;
- }
- break;
case DB_NEXT: /* Next log record. */
if (!IS_ZERO_LSN(nlsn)) {
/* Increment the cursor by the cursor record size. */
- nlsn.offset += dblp->c_len;
+ nlsn.offset += logc->c_len;
break;
}
+ flags = DB_FIRST;
/* FALLTHROUGH */
- case DB_FIRST: /* Find the first log record. */
+ case DB_FIRST: /* First log record. */
/* Find the first log file. */
if ((ret = __log_find(dblp, 1, &cnt, &status)) != 0)
- goto err2;
+ goto err;
/*
- * We want any readable version, so either DB_LV_NORMAL
- * or DB_LV_OLD_READABLE is acceptable here. If it's
- * not one of those two, there is no first log record that
- * we can read.
+ * DB_LV_INCOMPLETE:
+ * Theoretically, the log file we want could be created
+ * but not yet written, the "first" log record must be
+ * in the log buffer.
+ * DB_LV_NORMAL:
+ * DB_LV_OLD_READABLE:
+ * We found a log file we can read.
+ * DB_LV_NONEXISTENT:
+ * No log files exist, the "first" log record must be in
+ * the log buffer.
+ * DB_LV_OLD_UNREADABLE:
+ * No readable log files exist, we're at the cross-over
+ * point between two versions. The "first" log record
+ * must be in the log buffer.
*/
- if (status != DB_LV_NORMAL && status != DB_LV_OLD_READABLE) {
- ret = DB_NOTFOUND;
- goto err2;
+ switch (status) {
+ case DB_LV_INCOMPLETE:
+ DB_ASSERT(lp->lsn.file == cnt);
+ /* FALLTHROUGH */
+ case DB_LV_NORMAL:
+ case DB_LV_OLD_READABLE:
+ nlsn.file = cnt;
+ break;
+ case DB_LV_NONEXISTENT:
+ nlsn.file = 1;
+ DB_ASSERT(lp->lsn.file == nlsn.file);
+ break;
+ case DB_LV_OLD_UNREADABLE:
+ nlsn.file = cnt + 1;
+ DB_ASSERT(lp->lsn.file == nlsn.file);
+ break;
}
-
- /*
- * We may have only entered records in the buffer, and not
- * yet written a log file. If no log files were found and
- * there's anything in the buffer, it belongs to file 1.
- */
- if (cnt == 0)
- cnt = 1;
-
- nlsn.file = cnt;
nlsn.offset = 0;
break;
case DB_CURRENT: /* Current log record. */
@@ -195,23 +366,29 @@ __log_get(dblp, alsn, dbt, flags, silent)
if (!IS_ZERO_LSN(nlsn)) {
/* If at start-of-file, move to the previous file. */
if (nlsn.offset == 0) {
- if (nlsn.file == 1 ||
- __log_valid(dblp,
- nlsn.file - 1, 0, &status) != 0)
- return (DB_NOTFOUND);
+ if (nlsn.file == 1 || __log_valid(dblp,
+ nlsn.file - 1, 0, NULL, 0, &status) != 0) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
if (status != DB_LV_NORMAL &&
- status != DB_LV_OLD_READABLE)
- return (DB_NOTFOUND);
+ status != DB_LV_OLD_READABLE) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
--nlsn.file;
- nlsn.offset = dblp->c_off;
- } else
- nlsn.offset = dblp->c_off;
+ }
+ nlsn.offset = logc->c_prev;
break;
}
/* FALLTHROUGH */
case DB_LAST: /* Last log record. */
+ if (rlock == L_NONE) {
+ rlock = L_ACQUIRED;
+ R_LOCK(dbenv, &dblp->reginfo);
+ }
nlsn.file = lp->lsn.file;
nlsn.offset = lp->lsn.offset - lp->len;
break;
@@ -225,241 +402,755 @@ next_file: ++nlsn.file;
nlsn.offset = 0;
}
- /* Return 1 if the request is past the end of the log. */
- if (nlsn.file > lp->lsn.file ||
- (nlsn.file == lp->lsn.file && nlsn.offset >= lp->lsn.offset))
- return (DB_NOTFOUND);
+ /*
+ * The above switch statement should have set nlsn to the lsn of
+ * the requested record.
+ */
- /* If we've switched files, discard the current file handle. */
- if (dblp->c_lsn.file != nlsn.file &&
- F_ISSET(&dblp->c_fh, DB_FH_VALID)) {
- (void)__os_closehandle(&dblp->c_fh);
+ if (CRYPTO_ON(dbenv)) {
+ hdr.size = HDR_CRYPTO_SZ;
+ is_hmac = 1;
+ } else {
+ hdr.size = HDR_NORMAL_SZ;
+ is_hmac = 0;
}
-
- /* If the entire record is in the in-memory buffer, copy it out. */
- if (nlsn.file == lp->lsn.file && nlsn.offset >= lp->w_off) {
- /* Copy the header. */
- p = dblp->bufp + (nlsn.offset - lp->w_off);
- memcpy(&hdr, p, sizeof(HDR));
-
- /* Copy the record. */
- len = hdr.len - sizeof(HDR);
- if ((ret = __db_retcopy(NULL, dbt, p + sizeof(HDR),
- len, &dblp->c_dbt.data, &dblp->c_dbt.ulen)) != 0)
- goto err2;
+ /* Check to see if the record is in the cursor's buffer. */
+ if ((ret = __log_c_incursor(logc, &nlsn, &hdr, &rp)) != 0)
+ goto err;
+ if (rp != NULL)
goto cksum;
- }
- shortp = NULL;
+ /*
+ * Look to see if we're moving backward in the log with the last record
+ * coming from the disk -- it means the record can't be in the region's
+ * buffer. Else, check the region's buffer.
+ *
+ * If the record isn't in the region's buffer, we're going to have to
+ * read the record from disk. We want to make a point of not reading
+ * past the end of the logical log (after recovery, there may be data
+ * after the end of the logical log, not to mention the log file may
+ * have been pre-allocated). So, zero out last_lsn, and initialize it
+ * inside __log_c_inregion -- if it's still zero when we check it in
+ * __log_c_ondisk, that's OK, it just means the logical end of the log
+ * isn't an issue for this request.
+ */
+ ZERO_LSN(last_lsn);
+ if (!F_ISSET(logc, DB_LOG_DISK) ||
+ log_compare(&nlsn, &logc->c_lsn) > 0) {
+ F_CLR(logc, DB_LOG_DISK);
- /* Acquire a file descriptor. */
- if (!F_ISSET(&dblp->c_fh, DB_FH_VALID)) {
- if ((ret = __log_name(dblp, nlsn.file,
- &np, &dblp->c_fh, DB_OSO_RDONLY | DB_OSO_SEQ)) != 0) {
- fail = np;
- goto err1;
- }
- __os_freestr(np);
- np = NULL;
+ if ((ret = __log_c_inregion(logc,
+ &nlsn, &rlock, &last_lsn, &hdr, &rp)) != 0)
+ goto err;
+ if (rp != NULL)
+ goto cksum;
}
- /* See if we've already read this */
- if (nlsn.file == dblp->r_file && nlsn.offset > dblp->r_off
- && nlsn.offset + sizeof(HDR) < dblp->r_off + dblp->r_size)
- goto got_header;
-
/*
- * Seek to the header offset and read the header. Because the file
- * may be pre-allocated, we have to make sure that we're not reading
- * past the information in the start of the in-memory buffer.
+ * We have to read from an on-disk file to retrieve the record.
+ * If we ever can't retrieve the record at offset 0, we're done,
+ * return EOF/DB_NOTFOUND.
+ *
+ * Discard the region lock if we're still holding it, the on-disk
+ * reading routines don't need it.
*/
-
- readp = &hdr;
- offset = nlsn.offset;
- if (nlsn.file == lp->lsn.file && offset + sizeof(HDR) > lp->w_off)
- nr = lp->w_off - offset;
- else if (dblp->readbufp == NULL)
- nr = sizeof(HDR);
- else {
- nr = lp->buffer_size;
- readp = dblp->readbufp;
- dblp->r_file = nlsn.file;
- /* Going backwards. Put the current in the middle. */
- if (flags == DB_PREV || flags == DB_LAST) {
- if (offset <= lp->buffer_size/2)
- offset = 0;
- else
- offset = offset - lp->buffer_size/2;
- }
- if (nlsn.file == lp->lsn.file && offset + nr > lp->lsn.offset)
- nr = lp->lsn.offset - offset;
- dblp->r_off = offset;
+ if (rlock == L_ACQUIRED) {
+ rlock = L_NONE;
+ R_UNLOCK(dbenv, &dblp->reginfo);
}
+ if ((ret = __log_c_ondisk(
+ logc, &nlsn, &last_lsn, flags, &hdr, &rp, &eof)) != 0)
+ goto err;
+ if (eof == 1) {
+ /*
+ * Only DB_NEXT automatically moves to the next file, and
+ * it only happens once.
+ */
+ if (flags != DB_NEXT || nlsn.offset == 0)
+ return (DB_NOTFOUND);
+ goto next_file;
+ }
+ F_SET(logc, DB_LOG_DISK);
- if ((ret = __os_seek(dblp->dbenv,
- &dblp->c_fh, 0, 0, offset, 0, DB_OS_SEEK_SET)) != 0) {
- fail = "seek";
- goto err1;
+cksum: /*
+ * Discard the region lock if we're still holding it. (The path to
+ * get here is that we acquired the lock because of the caller's
+ * flag argument, but we found the record in the cursor's buffer.
+ * Improbable, but it's easy to avoid.
+ */
+ if (rlock == L_ACQUIRED) {
+ rlock = L_NONE;
+ R_UNLOCK(dbenv, &dblp->reginfo);
}
- if ((ret = __os_read(dblp->dbenv, &dblp->c_fh, readp, nr, &nr)) != 0) {
- fail = "read";
- goto err1;
+
+ /*
+ * Checksum: there are two types of errors -- a configuration error
+ * or a checksum mismatch. The former is always bad. The latter is
+ * OK if we're searching for the end of the log, and very, very bad
+ * if we're reading random log records.
+ */
+ db_cipher = dbenv->crypto_handle;
+ if ((ret = __db_check_chksum(dbenv, db_cipher,
+ hdr.chksum, rp + hdr.size, hdr.len - hdr.size, is_hmac)) != 0) {
+ if (F_ISSET(logc, DB_LOG_SILENT_ERR)) {
+ if (ret == 0 || ret == -1)
+ ret = EIO;
+ } else if (ret == -1) {
+ __db_err(dbenv,
+ "DB_LOGC->get: log record LSN %lu/%lu: checksum mismatch",
+ (u_long)nlsn.file, (u_long)nlsn.offset);
+ __db_err(dbenv,
+ "DB_LOGC->get: catastrophic recovery may be required");
+ ret = __db_panic(dbenv, DB_RUNRECOVERY);
+ }
+ goto err;
}
- if (nr < sizeof(HDR)) {
- /* If read returns EOF, try the next file. */
- if (nr == 0) {
- if (flags != DB_NEXT || nlsn.file == lp->lsn.file)
- goto corrupt;
+
+ /*
+ * If we got a 0-length record, that means we're in the midst of
+ * some bytes that got 0'd as the result of a vtruncate. We're
+ * going to have to retry.
+ */
+ if (hdr.len == 0) {
+ switch (flags) {
+ case DB_FIRST:
+ case DB_NEXT:
+ /* Zero'd records always indicate the end of a file. */
goto next_file;
+
+ case DB_LAST:
+ case DB_PREV:
+ /*
+ * We should never get here. If we recover a log
+ * file with 0's at the end, we'll treat the 0'd
+ * headers as the end of log and ignore them. If
+ * we're reading backwards from another file, then
+ * the first record in that new file should have its
+ * prev field set correctly.
+ */
+ __db_err(dbenv,
+ "Encountered zero length records while traversing backwards");
+ DB_ASSERT(0);
+ case DB_SET:
+ default:
+ /* Return the 0-length record. */
+ break;
}
+ }
- if (dblp->readbufp != NULL)
- memcpy((u_int8_t *) &hdr, readp, nr);
+ /* Copy the record into the user's DBT. */
+ if ((ret = __db_retcopy(dbenv, dbt, rp + hdr.size,
+ (u_int32_t)(hdr.len - hdr.size),
+ &logc->c_dbt.data, &logc->c_dbt.ulen)) != 0)
+ goto err;
+ if (CRYPTO_ON(dbenv)) {
+ if ((ret = db_cipher->decrypt(dbenv, db_cipher->data,
+ hdr.iv, dbt->data, hdr.len - hdr.size)) != 0) {
+ ret = EAGAIN;
+ goto err;
+ }
/*
- * If read returns a short count the rest of the record has
- * to be in the in-memory buffer.
+ * Return the original log record size to the user,
+ * even though we've allocated more than that, possibly.
+ * The log record is decrypted in the user dbt, not in
+ * the buffer, so we must do this here after decryption,
+ * not adjust the len passed to the __db_retcopy call.
*/
- if (lp->b_off < sizeof(HDR) - nr)
- goto corrupt;
+ dbt->size = hdr.orig_size;
+ }
- /* Get the rest of the header from the in-memory buffer. */
- memcpy((u_int8_t *)&hdr + nr, dblp->bufp, sizeof(HDR) - nr);
+ /* Update the cursor and the returned LSN. */
+ *alsn = nlsn;
+ logc->c_lsn = nlsn;
+ logc->c_len = hdr.len;
+ logc->c_prev = hdr.prev;
- if (hdr.len == 0)
- goto next_file;
+err: if (rlock == L_ACQUIRED)
+ R_UNLOCK(dbenv, &dblp->reginfo);
- shortp = dblp->bufp + (sizeof(HDR) - nr);
- }
+ return (ret);
+}
- else if (dblp->readbufp != NULL) {
- dblp->r_size = nr;
-got_header: memcpy((u_int8_t *)&hdr,
- dblp->readbufp + (nlsn.offset - dblp->r_off), sizeof(HDR));
- }
+/*
+ * __log_c_incursor --
+ * Check to see if the requested record is in the cursor's buffer.
+ */
+static int
+__log_c_incursor(logc, lsn, hdr, pp)
+ DB_LOGC *logc;
+ DB_LSN *lsn;
+ HDR *hdr;
+ u_int8_t **pp;
+{
+ u_int8_t *p;
+ int eof;
+
+ *pp = NULL;
/*
- * Check for buffers of 0's, that's what we usually see during recovery,
- * although it's certainly not something on which we can depend. Check
- * for impossibly large records. The malloc should fail later, but we
- * have customers that run mallocs that handle allocation failure as a
- * fatal error.
+ * Test to see if the requested LSN could be part of the cursor's
+ * buffer.
+ *
+ * The record must be part of the same file as the cursor's buffer.
+ * The record must start at a byte offset equal to or greater than
+ * the cursor buffer.
+ * The record must not start at a byte offset after the cursor
+ * buffer's end.
*/
- if (hdr.len == 0)
- goto next_file;
- if (hdr.len <= sizeof(HDR) || hdr.len > lp->persist.lg_max)
- goto corrupt;
- len = hdr.len - sizeof(HDR);
-
- /* If we've already moved to the in-memory buffer, fill from there. */
- if (shortp != NULL) {
- if (lp->b_off < ((u_int8_t *)shortp - dblp->bufp) + len)
- goto corrupt;
- if ((ret = __db_retcopy(NULL, dbt, shortp, len,
- &dblp->c_dbt.data, &dblp->c_dbt.ulen)) != 0)
- goto err2;
- goto cksum;
- }
+ if (logc->bp_lsn.file != lsn->file)
+ return (0);
+ if (logc->bp_lsn.offset > lsn->offset)
+ return (0);
+ if (logc->bp_lsn.offset + logc->bp_rlen <= lsn->offset + hdr->size)
+ return (0);
- if (dblp->readbufp != NULL) {
- if (nlsn.offset + hdr.len < dblp->r_off + dblp->r_size) {
- if ((ret = __db_retcopy(NULL, dbt, dblp->readbufp +
- (nlsn.offset - dblp->r_off) + sizeof(HDR),
- len, &dblp->c_dbt.data, &dblp->c_dbt.ulen)) != 0)
- goto err2;
- goto cksum;
- } else if ((ret = __os_seek(dblp->dbenv, &dblp->c_fh, 0,
- 0, nlsn.offset + sizeof(HDR), 0, DB_OS_SEEK_SET)) != 0) {
- fail = "seek";
- goto err1;
- }
+ /*
+ * Read the record's header and check if the record is entirely held
+ * in the buffer. If the record is not entirely held, get it again.
+ * (The only advantage in having part of the record locally is that
+ * we might avoid a system call because we already have the HDR in
+ * memory.)
+ *
+ * If the header check fails for any reason, it must be because the
+ * LSN is bogus. Fail hard.
+ */
+ p = logc->bp + (lsn->offset - logc->bp_lsn.offset);
+ memcpy(hdr, p, hdr->size);
+ if (__log_c_hdrchk(logc, lsn, hdr, &eof))
+ return (DB_NOTFOUND);
+ if (eof || logc->bp_lsn.offset + logc->bp_rlen < lsn->offset + hdr->len)
+ return (0);
+
+ *pp = p; /* Success. */
+
+ return (0);
+}
+
+/*
+ * __log_c_inregion --
+ * Check to see if the requested record is in the region's buffer.
+ */
+static int
+__log_c_inregion(logc, lsn, rlockp, last_lsn, hdr, pp)
+ DB_LOGC *logc;
+ DB_LSN *lsn, *last_lsn;
+ RLOCK *rlockp;
+ HDR *hdr;
+ u_int8_t **pp;
+{
+ DB_ENV *dbenv;
+ DB_LOG *dblp;
+ LOG *lp;
+ size_t len, nr;
+ u_int32_t b_disk, b_region;
+ int ret;
+ u_int8_t *p;
+
+ dbenv = logc->dbenv;
+ dblp = dbenv->lg_handle;
+ lp = ((DB_LOG *)logc->dbenv->lg_handle)->reginfo.primary;
+
+ ret = 0;
+ *pp = NULL;
+
+ /* If we haven't yet acquired the log region lock, do so. */
+ if (*rlockp == L_NONE) {
+ *rlockp = L_ACQUIRED;
+ R_LOCK(dbenv, &dblp->reginfo);
}
/*
- * Allocate temporary memory to hold the record.
+ * The routines to read from disk must avoid reading past the logical
+ * end of the log, so pass that information back to it.
*
- * XXX
- * We're calling malloc(3) with a region locked. This isn't
- * a good idea.
+ * Since they're reading directly from the disk, they must also avoid
+ * reading past the offset we've written out. If the log was
+ * truncated, it's possible that there are zeroes or garbage on
+ * disk after this offset, and the logical end of the log can
+ * come later than this point if the log buffer isn't empty.
*/
- if ((ret = __os_malloc(dbenv, len, NULL, &tbuf)) != 0)
- goto err1;
+ *last_lsn = lp->lsn;
+ if (last_lsn->offset > lp->w_off)
+ last_lsn->offset = lp->w_off;
/*
- * Read the record into the buffer. If read returns a short count,
- * there was an error or the rest of the record is in the in-memory
- * buffer. Note, the information may be garbage if we're in recovery,
- * so don't read past the end of the buffer's memory.
- *
- * Because the file may be pre-allocated, we have to make sure that
- * we're not reading past the information in the start of the in-memory
+ * Test to see if the requested LSN could be part of the region's
* buffer.
+ *
+ * During recovery, we read the log files getting the information to
+ * initialize the region. In that case, the region's lsn field will
+ * not yet have been filled in, use only the disk.
+ *
+ * The record must not start at a byte offset after the region buffer's
+ * end, since that means the request is for a record after the end of
+ * the log. Do this test even if the region's buffer is empty -- after
+ * recovery, the log files may continue past the declared end-of-log,
+ * and the disk reading routine will incorrectly attempt to read the
+ * remainder of the log.
+ *
+ * Otherwise, test to see if the region's buffer actually has what we
+ * want:
+ *
+ * The buffer must have some useful content.
+ * The record must be in the same file as the region's buffer and must
+ * start at a byte offset equal to or greater than the region's buffer.
*/
- if (nlsn.file == lp->lsn.file &&
- nlsn.offset + sizeof(HDR) + len > lp->w_off)
- nr = lp->w_off - (nlsn.offset + sizeof(HDR));
+ if (IS_ZERO_LSN(lp->lsn))
+ return (0);
+ if (lsn->file > lp->lsn.file ||
+ (lsn->file == lp->lsn.file && lsn->offset >= lp->lsn.offset))
+ return (DB_NOTFOUND);
+ if (lp->b_off == 0)
+ return (0);
+ if (lsn->file < lp->f_lsn.file || lsn->offset < lp->f_lsn.offset)
+ return (0);
+
+ /*
+ * The current contents of the cursor's buffer will be useless for a
+ * future call -- trash it rather than try and make it look correct.
+ */
+ ZERO_LSN(logc->bp_lsn);
+
+ /*
+ * If the requested LSN is greater than the region buffer's first
+ * byte, we know the entire record is in the buffer on a good LSN.
+ *
+ * If we're given a bad LSN, the "entire" record might
+ * not be in our buffer in order to fail at the chksum.
+ * __log_c_hdrchk made sure our dest buffer fits, via
+ * bp_maxrec, but we also need to make sure we don't run off
+ * the end of this buffer, the src.
+ *
+ * If the header check fails for any reason, it must be because the
+ * LSN is bogus. Fail hard.
+ */
+ if (lsn->offset > lp->f_lsn.offset) {
+ p = dblp->bufp + (lsn->offset - lp->w_off);
+ memcpy(hdr, p, hdr->size);
+ if (__log_c_hdrchk(logc, lsn, hdr, NULL))
+ return (DB_NOTFOUND);
+ if (lsn->offset + hdr->len > lp->w_off + lp->buffer_size)
+ return (DB_NOTFOUND);
+ if (logc->bp_size <= hdr->len) {
+ len = ALIGN(hdr->len * 2, 128);
+ if ((ret =
+ __os_realloc(logc->dbenv, len, &logc->bp)) != 0)
+ return (ret);
+ logc->bp_size = (u_int32_t)len;
+ }
+ memcpy(logc->bp, p, hdr->len);
+ *pp = logc->bp;
+ return (0);
+ }
+
+ /*
+ * There's a partial record, that is, the requested record starts
+ * in a log file and finishes in the region buffer. We have to
+ * find out how many bytes of the record are in the region buffer
+ * so we can copy them out into the cursor buffer. First, check
+ * to see if the requested record is the only record in the region
+ * buffer, in which case we should copy the entire region buffer.
+ *
+ * Else, walk back through the region's buffer to find the first LSN
+ * after the record that crosses the buffer boundary -- we can detect
+ * that LSN, because its "prev" field will reference the record we
+ * want. The bytes we need to copy from the region buffer are the
+ * bytes up to the record we find. The bytes we'll need to allocate
+ * to hold the log record are the bytes between the two offsets.
+ */
+ b_disk = lp->w_off - lsn->offset;
+ if (lp->b_off <= lp->len)
+ b_region = (u_int32_t)lp->b_off;
else
- nr = len;
- if ((ret = __os_read(dblp->dbenv, &dblp->c_fh, tbuf, nr, &nr)) != 0) {
- fail = "read";
- goto err1;
+ for (p = dblp->bufp + (lp->b_off - lp->len);;) {
+ memcpy(hdr, p, hdr->size);
+ if (hdr->prev == lsn->offset) {
+ b_region = (u_int32_t)(p - dblp->bufp);
+ break;
+ }
+ p = dblp->bufp + (hdr->prev - lp->w_off);
+ }
+
+ /*
+ * If we don't have enough room for the record, we have to allocate
+ * space. We have to do it while holding the region lock, which is
+ * truly annoying, but there's no way around it. This call is why
+ * we allocate cursor buffer space when allocating the cursor instead
+ * of waiting.
+ */
+ if (logc->bp_size <= b_region + b_disk) {
+ len = ALIGN((b_region + b_disk) * 2, 128);
+ if ((ret = __os_realloc(logc->dbenv, len, &logc->bp)) != 0)
+ return (ret);
+ logc->bp_size = (u_int32_t)len;
}
- if (len - nr > lp->buffer_size)
- goto corrupt;
- if (nr != len) {
- if (lp->b_off < len - nr)
- goto corrupt;
-
- /* Get the rest of the record from the in-memory buffer. */
- memcpy((u_int8_t *)tbuf + nr, dblp->bufp, len - nr);
+
+ /* Copy the region's bytes to the end of the cursor's buffer. */
+ p = (logc->bp + logc->bp_size) - b_region;
+ memcpy(p, dblp->bufp, b_region);
+
+ /* Release the region lock. */
+ if (*rlockp == L_ACQUIRED) {
+ *rlockp = L_NONE;
+ R_UNLOCK(dbenv, &dblp->reginfo);
}
- /* Copy the record into the user's DBT. */
- if ((ret = __db_retcopy(NULL, dbt, tbuf, len,
- &dblp->c_dbt.data, &dblp->c_dbt.ulen)) != 0)
- goto err2;
- __os_free(tbuf, 0);
- tbuf = NULL;
+ /*
+ * Read the rest of the information from disk. Neither short reads
+ * or EOF are acceptable, the bytes we want had better be there.
+ */
+ if (b_disk != 0) {
+ p -= b_disk;
+ nr = b_disk;
+ if ((ret = __log_c_io(
+ logc, lsn->file, lsn->offset, p, &nr, NULL)) != 0)
+ return (ret);
+ if (nr < b_disk)
+ return (__log_c_shortread(logc, lsn, 0));
+ }
-cksum: /*
- * If the user specified a partial record read, the checksum can't
- * match. It's not an obvious thing to do, but a user testing for
- * the length of a record might do it.
+ /* Copy the header information into the caller's structure. */
+ memcpy(hdr, p, hdr->size);
+
+ *pp = p;
+ return (0);
+}
+
+/*
+ * __log_c_ondisk --
+ * Read a record off disk.
+ */
+static int
+__log_c_ondisk(logc, lsn, last_lsn, flags, hdr, pp, eofp)
+ DB_LOGC *logc;
+ DB_LSN *lsn, *last_lsn;
+ int flags, *eofp;
+ HDR *hdr;
+ u_int8_t **pp;
+{
+ DB_ENV *dbenv;
+ size_t len, nr;
+ u_int32_t offset;
+ int ret;
+
+ dbenv = logc->dbenv;
+ *eofp = 0;
+
+ nr = hdr->size;
+ if ((ret =
+ __log_c_io(logc, lsn->file, lsn->offset, hdr, &nr, eofp)) != 0)
+ return (ret);
+ if (*eofp)
+ return (0);
+
+ /* If we read 0 bytes, assume we've hit EOF. */
+ if (nr == 0) {
+ *eofp = 1;
+ return (0);
+ }
+
+ /* Check the HDR. */
+ if ((ret = __log_c_hdrchk(logc, lsn, hdr, eofp)) != 0)
+ return (ret);
+ if (*eofp)
+ return (0);
+
+ /* Otherwise, we should have gotten the bytes we wanted. */
+ if (nr < hdr->size)
+ return (__log_c_shortread(logc, lsn, 1));
+
+ /*
+ * Regardless of how we return, the previous contents of the cursor's
+ * buffer are useless -- trash it.
*/
- if (!F_ISSET(dbt, DB_DBT_PARTIAL) &&
- hdr.cksum != __ham_func4(NULL, dbt->data, dbt->size)) {
- if (!silent)
- __db_err(dbenv, "log_get: checksum mismatch");
- goto corrupt;
+ ZERO_LSN(logc->bp_lsn);
+
+ /*
+ * Otherwise, we now (finally!) know how big the record is. (Maybe
+ * we should have just stuck the length of the record into the LSN!?)
+ * Make sure we have enough space.
+ */
+ if (logc->bp_size <= hdr->len) {
+ len = ALIGN(hdr->len * 2, 128);
+ if ((ret = __os_realloc(dbenv, len, &logc->bp)) != 0)
+ return (ret);
+ logc->bp_size = (u_int32_t)len;
}
- /* Update the cursor and the return lsn. */
- dblp->c_off = hdr.prev;
- dblp->c_len = hdr.len;
- dblp->c_lsn = nlsn;
- *alsn = nlsn;
+ /*
+ * If we're moving forward in the log file, read this record in at the
+ * beginning of the buffer. Otherwise, read this record in at the end
+ * of the buffer, making sure we don't try and read before the start
+ * of the file. (We prefer positioning at the end because transaction
+ * aborts use DB_SET to move backward through the log and we might get
+ * lucky.)
+ *
+ * Read a buffer's worth, without reading past the logical EOF. The
+ * last_lsn may be a zero LSN, but that's OK, the test works anyway.
+ */
+ if (flags == DB_FIRST || flags == DB_NEXT)
+ offset = lsn->offset;
+ else if (lsn->offset + hdr->len < logc->bp_size)
+ offset = 0;
+ else
+ offset = (lsn->offset + hdr->len) - logc->bp_size;
+
+ nr = logc->bp_size;
+ if (lsn->file == last_lsn->file && offset + nr >= last_lsn->offset)
+ nr = last_lsn->offset - offset;
+
+ if ((ret =
+ __log_c_io(logc, lsn->file, offset, logc->bp, &nr, eofp)) != 0)
+ return (ret);
+
+ /*
+ * We should have at least gotten the bytes up-to-and-including the
+ * record we're reading.
+ */
+ if (nr < (lsn->offset + hdr->len) - offset)
+ return (__log_c_shortread(logc, lsn, 1));
+
+ /* Set up the return information. */
+ logc->bp_rlen = (u_int32_t)nr;
+ logc->bp_lsn.file = lsn->file;
+ logc->bp_lsn.offset = offset;
+
+ *pp = logc->bp + (lsn->offset - offset);
return (0);
+}
+
+/*
+ * __log_c_hdrchk --
+ *
+ * Check for corrupted HDRs before we use them to allocate memory or find
+ * records.
+ *
+ * If the log files were pre-allocated, a zero-filled HDR structure is the
+ * logical file end. However, we can see buffers filled with 0's during
+ * recovery, too (because multiple log buffers were written asynchronously,
+ * and one made it to disk before a different one that logically precedes
+ * it in the log file.
+ *
+ * XXX
+ * I think there's a potential pre-allocation recovery flaw here -- if we
+ * fail to write a buffer at the end of a log file (by scheduling its
+ * write asynchronously, and it never making it to disk), then succeed in
+ * writing a log file block to a subsequent log file, I don't think we will
+ * detect that the buffer of 0's should have marked the end of the log files
+ * during recovery. I think we may need to always write some garbage after
+ * each block write if we pre-allocate log files. (At the moment, we do not
+ * pre-allocate, so this isn't currently an issue.)
+ *
+ * Check for impossibly large records. The malloc should fail later, but we
+ * have customers that run mallocs that treat all allocation failures as fatal
+ * errors.
+ *
+ * Note that none of this is necessarily something awful happening. We let
+ * the application hand us any LSN they want, and it could be a pointer into
+ * the middle of a log record, there's no way to tell.
+ */
+static int
+__log_c_hdrchk(logc, lsn, hdr, eofp)
+ DB_LOGC *logc;
+ DB_LSN *lsn;
+ HDR *hdr;
+ int *eofp;
+{
+ DB_ENV *dbenv;
+ int ret;
+
+ dbenv = logc->dbenv;
-corrupt:/*
- * This is the catchall -- for some reason we didn't find enough
- * information or it wasn't reasonable information, and it wasn't
- * because a system call failed.
+ /*
+ * Check EOF before we do any other processing.
*/
- ret = EIO;
- fail = "read";
+ if (eofp != NULL) {
+ if (hdr->prev == 0 && hdr->chksum[0] == 0 && hdr->len == 0) {
+ *eofp = 1;
+ return (0);
+ }
+ *eofp = 0;
+ }
-err1: if (!silent) {
- if (fail == NULL)
- __db_err(dbenv, "log_get: %s", db_strerror(ret));
- else
+ /*
+ * Sanity check the log record's size.
+ * We must check it after "virtual" EOF above.
+ */
+ if (hdr->len <= hdr->size)
+ goto err;
+
+ /*
+ * If the cursor's max-record value isn't yet set, it means we aren't
+ * reading these records from a log file and no check is necessary.
+ */
+ if (logc->bp_maxrec != 0 && hdr->len > logc->bp_maxrec) {
+ /*
+ * If we fail the check, there's the pathological case that
+ * we're reading the last file, it's growing, and our initial
+ * check information was wrong. Get it again, to be sure.
+ */
+ if ((ret = __log_c_set_maxrec(logc, NULL)) != 0) {
+ __db_err(dbenv, "DB_LOGC->get: %s", db_strerror(ret));
+ return (ret);
+ }
+ if (logc->bp_maxrec != 0 && hdr->len > logc->bp_maxrec)
+ goto err;
+ }
+ return (0);
+
+err: if (!F_ISSET(logc, DB_LOG_SILENT_ERR))
+ __db_err(dbenv,
+ "DB_LOGC->get: LSN %lu/%lu: invalid log record header",
+ (u_long)lsn->file, (u_long)lsn->offset);
+ return (EIO);
+}
+
+/*
+ * __log_c_io --
+ * Read records from a log file.
+ */
+static int
+__log_c_io(logc, fnum, offset, p, nrp, eofp)
+ DB_LOGC *logc;
+ u_int32_t fnum, offset;
+ void *p;
+ size_t *nrp;
+ int *eofp;
+{
+ DB_ENV *dbenv;
+ DB_LOG *dblp;
+ int ret;
+ char *np;
+
+ dbenv = logc->dbenv;
+ dblp = dbenv->lg_handle;
+
+ /*
+ * If we've switched files, discard the current file handle and acquire
+ * a new one.
+ */
+ if (logc->c_fhp != NULL && logc->bp_lsn.file != fnum) {
+ ret = __os_closehandle(dbenv, logc->c_fhp);
+ logc->c_fhp = NULL;
+ if (ret != 0)
+ return (ret);
+ }
+ if (logc->c_fhp == NULL) {
+ if ((ret = __log_name(dblp, fnum,
+ &np, &logc->c_fhp, DB_OSO_RDONLY | DB_OSO_SEQ)) != 0) {
+ /*
+ * If we're allowed to return EOF, assume that's the
+ * problem, set the EOF status flag and return 0.
+ */
+ if (eofp != NULL) {
+ *eofp = 1;
+ ret = 0;
+ } else if (!F_ISSET(logc, DB_LOG_SILENT_ERR))
+ __db_err(dbenv, "DB_LOGC->get: %s: %s",
+ np, db_strerror(ret));
+ __os_free(dbenv, np);
+ return (ret);
+ }
+
+ if ((ret = __log_c_set_maxrec(logc, np)) != 0) {
__db_err(dbenv,
- "log_get: %s: %s", fail, db_strerror(ret));
+ "DB_LOGC->get: %s: %s", np, db_strerror(ret));
+ __os_free(dbenv, np);
+ return (ret);
+ }
+ __os_free(dbenv, np);
}
-err2: if (np != NULL)
- __os_freestr(np);
- if (tbuf != NULL)
- __os_free(tbuf, 0);
- return (ret);
+ /* Seek to the record's offset. */
+ if ((ret = __os_seek(dbenv,
+ logc->c_fhp, 0, 0, offset, 0, DB_OS_SEEK_SET)) != 0) {
+ if (!F_ISSET(logc, DB_LOG_SILENT_ERR))
+ __db_err(dbenv,
+ "DB_LOGC->get: LSN: %lu/%lu: seek: %s",
+ (u_long)fnum, (u_long)offset, db_strerror(ret));
+ return (ret);
+ }
+
+ /* Read the data. */
+ if ((ret = __os_read(dbenv, logc->c_fhp, p, *nrp, nrp)) != 0) {
+ if (!F_ISSET(logc, DB_LOG_SILENT_ERR))
+ __db_err(dbenv,
+ "DB_LOGC->get: LSN: %lu/%lu: read: %s",
+ (u_long)fnum, (u_long)offset, db_strerror(ret));
+ return (ret);
+ }
+
+ return (0);
+}
+
+/*
+ * __log_c_shortread --
+ * Read was short -- return a consistent error message and error.
+ */
+static int
+__log_c_shortread(logc, lsn, check_silent)
+ DB_LOGC *logc;
+ DB_LSN *lsn;
+ int check_silent;
+{
+ if (!check_silent || !F_ISSET(logc, DB_LOG_SILENT_ERR))
+ __db_err(logc->dbenv, "DB_LOGC->get: LSN: %lu/%lu: short read",
+ (u_long)lsn->file, (u_long)lsn->offset);
+ return (EIO);
+}
+
+/*
+ * __log_c_set_maxrec --
+ * Bound the maximum log record size in a log file.
+ */
+static int
+__log_c_set_maxrec(logc, np)
+ DB_LOGC *logc;
+ char *np;
+{
+ DB_ENV *dbenv;
+ DB_LOG *dblp;
+ LOG *lp;
+ u_int32_t mbytes, bytes;
+ int ret;
+
+ dbenv = logc->dbenv;
+ dblp = dbenv->lg_handle;
+
+ /*
+ * We don't want to try and allocate huge chunks of memory because
+ * applications with error-checking malloc's often consider that a
+ * hard failure. If we're about to look at a corrupted record with
+ * a bizarre size, we need to know before trying to allocate space
+ * to hold it. We could read the persistent data at the beginning
+ * of the file but that's hard -- we may have to decrypt it, checksum
+ * it and so on. Stat the file instead.
+ */
+ if (logc->c_fhp != NULL) {
+ if ((ret = __os_ioinfo(dbenv, np, logc->c_fhp,
+ &mbytes, &bytes, NULL)) != 0)
+ return (ret);
+ if (logc->bp_maxrec < (mbytes * MEGABYTE + bytes))
+ logc->bp_maxrec = mbytes * MEGABYTE + bytes;
+ }
+
+ /*
+ * If reading from the log file currently being written, we could get
+ * an incorrect size, that is, if the cursor was opened on the file
+ * when it had only a few hundred bytes, and then the cursor used to
+ * move forward in the file, after more log records were written, the
+ * original stat value would be wrong. Use the maximum of the current
+ * log file size and the size of the buffer -- that should represent
+ * the max of any log record currently in the file.
+ *
+ * The log buffer size is set when the environment is opened and never
+ * changed, we don't need a lock on it.
+ */
+ lp = dblp->reginfo.primary;
+ if (logc->bp_maxrec < lp->buffer_size)
+ logc->bp_maxrec = lp->buffer_size;
+
+ return (0);
}
diff --git a/db/log/log_method.c b/db/log/log_method.c
index 883f485d8..3562afc40 100644
--- a/db/log/log_method.c
+++ b/db/log/log_method.c
@@ -1,38 +1,38 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: log_method.c,v 11.14 2000/11/30 00:58:40 ubell Exp $";
+static const char revid[] = "$Id: log_method.c,v 11.38 2003/06/30 17:20:16 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
+#ifdef HAVE_RPC
+#include <rpc/rpc.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
+#include <stdlib.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "log.h"
+#include "dbinc/log.h"
#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
#endif
-static int __log_set_lg_max __P((DB_ENV *, u_int32_t));
-static int __log_set_lg_bsize __P((DB_ENV *, u_int32_t));
-static int __log_set_lg_dir __P((DB_ENV *, const char *));
+static int __log_get_lg_bsize __P((DB_ENV *, u_int32_t *));
+static int __log_get_lg_dir __P((DB_ENV *, const char **));
+static int __log_get_lg_max __P((DB_ENV *, u_int32_t *));
+static int __log_get_lg_regionmax __P((DB_ENV *, u_int32_t *));
/*
* __log_dbenv_create --
@@ -44,39 +44,88 @@ void
__log_dbenv_create(dbenv)
DB_ENV *dbenv;
{
- dbenv->lg_bsize = LG_BSIZE_DEFAULT;
- dbenv->set_lg_bsize = __log_set_lg_bsize;
+ /*
+ * !!!
+ * Our caller has not yet had the opportunity to reset the panic
+ * state or turn off mutex locking, and so we can neither check
+ * the panic state or acquire a mutex in the DB_ENV create path.
+ */
- dbenv->lg_max = LG_MAX_DEFAULT;
- dbenv->set_lg_max = __log_set_lg_max;
+ dbenv->lg_bsize = LG_BSIZE_DEFAULT;
+ dbenv->lg_regionmax = LG_BASE_REGION_SIZE;
- dbenv->set_lg_dir = __log_set_lg_dir;
#ifdef HAVE_RPC
/*
* If we have a client, overwrite what we just setup to
* point to client functions.
*/
if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ dbenv->get_lg_bsize = __dbcl_get_lg_bsize;
dbenv->set_lg_bsize = __dbcl_set_lg_bsize;
- dbenv->set_lg_max = __dbcl_set_lg_max;
+ dbenv->get_lg_dir = __dbcl_get_lg_dir;
dbenv->set_lg_dir = __dbcl_set_lg_dir;
- }
+ dbenv->get_lg_max = __dbcl_get_lg_max;
+ dbenv->set_lg_max = __dbcl_set_lg_max;
+ dbenv->get_lg_regionmax = __dbcl_get_lg_regionmax;
+ dbenv->set_lg_regionmax = __dbcl_set_lg_regionmax;
+
+ dbenv->log_archive = __dbcl_log_archive;
+ dbenv->log_cursor = __dbcl_log_cursor;
+ dbenv->log_file = __dbcl_log_file;
+ dbenv->log_flush = __dbcl_log_flush;
+ dbenv->log_put = __dbcl_log_put;
+ dbenv->log_stat = __dbcl_log_stat;
+ } else
#endif
+ {
+ dbenv->get_lg_bsize = __log_get_lg_bsize;
+ dbenv->set_lg_bsize = __log_set_lg_bsize;
+ dbenv->get_lg_dir = __log_get_lg_dir;
+ dbenv->set_lg_dir = __log_set_lg_dir;
+ dbenv->get_lg_max = __log_get_lg_max;
+ dbenv->set_lg_max = __log_set_lg_max;
+ dbenv->get_lg_regionmax = __log_get_lg_regionmax;
+ dbenv->set_lg_regionmax = __log_set_lg_regionmax;
+
+ dbenv->log_archive = __log_archive_pp;
+ dbenv->log_cursor = __log_cursor_pp;
+ dbenv->log_file = __log_file_pp;
+ dbenv->log_flush = __log_flush_pp;
+ dbenv->log_put = __log_put_pp;
+ dbenv->log_stat = __log_stat_pp;
+ }
+}
+
+static int
+__log_get_lg_bsize(dbenv, lg_bsizep)
+ DB_ENV *dbenv;
+ u_int32_t *lg_bsizep;
+{
+ *lg_bsizep = dbenv->lg_bsize;
+ return (0);
}
/*
* __log_set_lg_bsize --
- * Set the log buffer size.
+ * DB_ENV->set_lg_bsize.
+ *
+ * PUBLIC: int __log_set_lg_bsize __P((DB_ENV *, u_int32_t));
*/
-static int
+int
__log_set_lg_bsize(dbenv, lg_bsize)
DB_ENV *dbenv;
u_int32_t lg_bsize;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lg_bsize");
+ u_int32_t lg_max;
+
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lg_bsize");
+
+ if (lg_bsize == 0)
+ lg_bsize = LG_BSIZE_DEFAULT;
/* Let's not be silly. */
- if (lg_bsize > dbenv->lg_max / 4) {
+ lg_max = dbenv->lg_size == 0 ? LG_MAX_DEFAULT : dbenv->lg_size;
+ if (lg_bsize > lg_max / 4) {
__db_err(dbenv, "log buffer size must be <= log file size / 4");
return (EINVAL);
}
@@ -85,37 +134,119 @@ __log_set_lg_bsize(dbenv, lg_bsize)
return (0);
}
+static int
+__log_get_lg_max(dbenv, lg_maxp)
+ DB_ENV *dbenv;
+ u_int32_t *lg_maxp;
+{
+ LOG *region;
+
+ if (F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
+ if (!LOGGING_ON(dbenv))
+ return (__db_env_config(
+ dbenv, "get_lg_max", DB_INIT_LOG));
+ region = ((DB_LOG *)dbenv->lg_handle)->reginfo.primary;
+
+ *lg_maxp = region->log_nsize;
+ } else
+ *lg_maxp = dbenv->lg_size;
+
+ return (0);
+}
+
/*
* __log_set_lg_max --
- * Set the maximum log file size.
+ * DB_ENV->set_lg_max.
+ *
+ * PUBLIC: int __log_set_lg_max __P((DB_ENV *, u_int32_t));
*/
-static int
+int
__log_set_lg_max(dbenv, lg_max)
DB_ENV *dbenv;
u_int32_t lg_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_lg_max");
+ LOG *region;
+
+ if (lg_max == 0)
+ lg_max = LG_MAX_DEFAULT;
+
+ if (F_ISSET(dbenv, DB_ENV_OPEN_CALLED)) {
+ if (!LOGGING_ON(dbenv))
+ return (__db_env_config(
+ dbenv, "set_lg_max", DB_INIT_LOG));
+ region = ((DB_LOG *)dbenv->lg_handle)->reginfo.primary;
+
+ /* Let's not be silly. */
+ if (lg_max < region->buffer_size * 4)
+ goto err;
+ region->log_nsize = lg_max;
+ } else {
+ /* Let's not be silly. */
+ if (lg_max < dbenv->lg_bsize * 4)
+ goto err;
+ dbenv->lg_size = lg_max;
+ }
+
+ return (0);
+
+err: __db_err(dbenv, "log file size must be >= log buffer size * 4");
+ return (EINVAL);
+}
+
+static int
+__log_get_lg_regionmax(dbenv, lg_regionmaxp)
+ DB_ENV *dbenv;
+ u_int32_t *lg_regionmaxp;
+{
+ *lg_regionmaxp = dbenv->lg_regionmax;
+ return (0);
+}
+
+/*
+ * __log_set_lg_regionmax --
+ * DB_ENV->set_lg_regionmax.
+ *
+ * PUBLIC: int __log_set_lg_regionmax __P((DB_ENV *, u_int32_t));
+ */
+int
+__log_set_lg_regionmax(dbenv, lg_regionmax)
+ DB_ENV *dbenv;
+ u_int32_t lg_regionmax;
+{
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_lg_regionmax");
/* Let's not be silly. */
- if (lg_max < dbenv->lg_bsize * 4) {
- __db_err(dbenv, "log file size must be >= log buffer size * 4");
+ if (lg_regionmax != 0 && lg_regionmax < LG_BASE_REGION_SIZE) {
+ __db_err(dbenv,
+ "log file size must be >= %d", LG_BASE_REGION_SIZE);
return (EINVAL);
}
- dbenv->lg_max = lg_max;
+ dbenv->lg_regionmax = lg_regionmax;
+ return (0);
+}
+
+static int
+__log_get_lg_dir(dbenv, dirp)
+ DB_ENV *dbenv;
+ const char **dirp;
+{
+ *dirp = dbenv->db_log_dir;
return (0);
}
/*
* __log_set_lg_dir --
- * Set the log file directory.
+ * DB_ENV->set_lg_dir.
+ *
+ * PUBLIC: int __log_set_lg_dir __P((DB_ENV *, const char *));
*/
-static int
+int
__log_set_lg_dir(dbenv, dir)
DB_ENV *dbenv;
const char *dir;
{
if (dbenv->db_log_dir != NULL)
- __os_freestr(dbenv->db_log_dir);
+ __os_free(dbenv, dbenv->db_log_dir);
return (__os_strdup(dbenv, dir, &dbenv->db_log_dir));
}
diff --git a/db/log/log_put.c b/db/log/log_put.c
index 34b1e871e..f3b92acc3 100644
--- a/db/log/log_put.c
+++ b/db/log/log_put.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: log_put.c,v 11.112 2002/09/10 02:39:26 bostic Exp ";
+static const char revid[] = "$Id: log_put.c,v 11.145 2003/09/13 19:20:39 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -26,20 +26,18 @@ static const char revid[] = "Id: log_put.c,v 11.112 2002/09/10 02:39:26 bostic E
#include <stdio.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
#include "dbinc/crypto.h"
#include "dbinc/hmac.h"
#include "dbinc/log.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
static int __log_encrypt_record __P((DB_ENV *, DBT *, HDR *, u_int32_t));
+static int __log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
static int __log_fill __P((DB_LOG *, DB_LSN *, void *, u_int32_t));
static int __log_flush_commit __P((DB_ENV *, const DB_LSN *, u_int32_t));
-static int __log_flush_int __P((DB_LOG *, const DB_LSN *, int));
static int __log_newfh __P((DB_LOG *));
static int __log_put_next __P((DB_ENV *,
DB_LSN *, const DBT *, HDR *, DB_LSN *));
@@ -48,75 +46,90 @@ static int __log_putr __P((DB_LOG *,
static int __log_write __P((DB_LOG *, void *, u_int32_t));
/*
- * __log_put --
- * Write a log record. This is the public interface, DB_ENV->log_put.
+ * __log_put_pp --
+ * DB_ENV->log_put pre/post processing.
*
- * PUBLIC: int __log_put __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
+ * PUBLIC: int __log_put_pp __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
*/
int
-__log_put(dbenv, lsnp, udbt, flags)
+__log_put_pp(dbenv, lsnp, udbt, flags)
DB_ENV *dbenv;
DB_LSN *lsnp;
const DBT *udbt;
u_int32_t flags;
{
- DB_CIPHER *db_cipher;
- DBT *dbt, t;
- DB_LOG *dblp;
- DB_LSN lsn, old_lsn;
- HDR hdr;
- LOG *lp;
- u_int32_t do_flush, op, writeonly;
- int lock_held, need_free, ret;
- u_int8_t *key;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
dbenv->lg_handle, "DB_ENV->log_put", DB_INIT_LOG);
- /* Validate arguments. */
- op = DB_OPFLAGS_MASK & flags;
- if (op != 0 && op != DB_COMMIT)
- return (__db_ferr(dbenv, "DB_ENV->log_put", 0));
-
- /* Check for allowed bit-flags. */
- if (LF_ISSET(~(DB_OPFLAGS_MASK |
- DB_FLUSH | DB_NOCOPY | DB_PERMANENT | DB_WRNOSYNC)))
- return (__db_ferr(dbenv, "DB_ENV->log_put", 0));
+ /* Validate arguments: check for allowed flags. */
+ if ((ret = __db_fchk(dbenv, "DB_ENV->log_put", flags,
+ DB_LOG_CHKPNT | DB_LOG_COMMIT |
+ DB_FLUSH | DB_LOG_NOCOPY | DB_LOG_PERM | DB_LOG_WRNOSYNC)) != 0)
+ return (ret);
- /* DB_WRNOSYNC and DB_FLUSH are mutually exclusive. */
- if (LF_ISSET(DB_WRNOSYNC) && LF_ISSET(DB_FLUSH))
+ /* DB_LOG_WRNOSYNC and DB_FLUSH are mutually exclusive. */
+ if (LF_ISSET(DB_LOG_WRNOSYNC) && LF_ISSET(DB_FLUSH))
return (__db_ferr(dbenv, "DB_ENV->log_put", 1));
/* Replication clients should never write log records. */
- if (F_ISSET(dbenv, DB_ENV_REP_CLIENT) ||
- F_ISSET(dbenv, DB_ENV_REP_LOGSONLY)) {
+ if (IS_REP_CLIENT(dbenv)) {
__db_err(dbenv,
"DB_ENV->log_put is illegal on replication clients");
return (EINVAL);
}
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_put(dbenv, lsnp, udbt, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __log_put --
+ * DB_ENV->log_put.
+ *
+ * PUBLIC: int __log_put __P((DB_ENV *, DB_LSN *, const DBT *, u_int32_t));
+ */
+int
+__log_put(dbenv, lsnp, udbt, flags)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+ const DBT *udbt;
+ u_int32_t flags;
+{
+ DB_CIPHER *db_cipher;
+ DBT *dbt, t;
+ DB_LOG *dblp;
+ DB_LSN lsn, old_lsn;
+ HDR hdr;
+ LOG *lp;
+ int lock_held, need_free, ret;
+ u_int8_t *key;
+
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
db_cipher = dbenv->crypto_handle;
dbt = &t;
t = *udbt;
lock_held = need_free = 0;
- do_flush = LF_ISSET(DB_FLUSH);
- writeonly = LF_ISSET(DB_WRNOSYNC);
/*
- * If we are coming from the logging code, we use an internal
- * flag, DB_NOCOPY, because we know we can overwrite/encrypt
- * the log record in place. Otherwise, if a user called log_put
- * then we must copy it to new memory so that we know we can
- * write it.
+ * If we are coming from the logging code, we use an internal flag,
+ * DB_LOG_NOCOPY, because we know we can overwrite/encrypt the log
+ * record in place. Otherwise, if a user called log_put then we
+ * must copy it to new memory so that we know we can write it.
*
- * We also must copy it to new memory if we are a replication
- * master so that we retain an unencrypted copy of the log
- * record to send to clients.
+ * We also must copy it to new memory if we are a replication master
+ * so that we retain an unencrypted copy of the log record to send
+ * to clients.
*/
- if (!LF_ISSET(DB_NOCOPY) || F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (!LF_ISSET(DB_LOG_NOCOPY) || IS_REP_MASTER(dbenv)) {
if (CRYPTO_ON(dbenv))
t.size += db_cipher->adj_size(udbt->size);
if ((ret = __os_calloc(dbenv, 1, t.size, &t.data)) != 0)
@@ -140,9 +153,9 @@ __log_put(dbenv, lsnp, udbt, flags)
ZERO_LSN(old_lsn);
if ((ret = __log_put_next(dbenv, &lsn, dbt, &hdr, &old_lsn)) != 0)
- goto err;
+ goto panic_check;
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (IS_REP_MASTER(dbenv)) {
/*
* Replication masters need to drop the lock to send
* messages, but we want to drop and reacquire it a minimal
@@ -150,6 +163,17 @@ __log_put(dbenv, lsnp, udbt, flags)
*/
R_UNLOCK(dbenv, &dblp->reginfo);
lock_held = 0;
+ /*
+ * If we are not a rep application, but are sharing a
+ * master rep env, we should not be writing log records.
+ */
+ if (dbenv->rep_send == NULL) {
+ __db_err(dbenv, "%s %s",
+ "Non-replication DB_ENV handle attempting",
+ "to modify a replicated environment");
+ ret = EINVAL;
+ goto err;
+ }
/*
* If we changed files and we're in a replicated
@@ -181,8 +205,8 @@ __log_put(dbenv, lsnp, udbt, flags)
*/
if ((__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_LOG, &lsn, udbt, flags) != 0) &&
- LF_ISSET(DB_PERMANENT))
- do_flush |= DB_FLUSH;
+ LF_ISSET(DB_LOG_PERM))
+ LF_SET(DB_FLUSH);
}
/*
@@ -193,30 +217,47 @@ __log_put(dbenv, lsnp, udbt, flags)
* If a flush is not needed, see if WRITE_NOSYNC was set and we
* need to write out the log buffer.
*/
- if (do_flush || writeonly) {
+ if (LF_ISSET(DB_FLUSH | DB_LOG_WRNOSYNC)) {
if (!lock_held) {
R_LOCK(dbenv, &dblp->reginfo);
lock_held = 1;
}
- if (do_flush)
- ret = __log_flush_commit(dbenv, &lsn, flags);
- else if (lp->b_off != 0)
- /*
- * writeonly: if there's anything in the current
- * log buffer, we need to write it out.
- */
- if ((ret = __log_write(dblp,
- dblp->bufp, (u_int32_t)lp->b_off)) == 0)
- lp->b_off = 0;
+ if ((ret = __log_flush_commit(dbenv, &lsn, flags)) != 0)
+ goto panic_check;
}
-err: if (lock_held)
+ *lsnp = lsn;
+
+ /*
+ * If flushed a checkpoint record, reset the "bytes since the last
+ * checkpoint" counters.
+ */
+ if (LF_ISSET(DB_LOG_CHKPNT))
+ lp->stat.st_wc_bytes = lp->stat.st_wc_mbytes = 0;
+
+ if (0) {
+panic_check: /*
+ * Writing log records cannot fail if we're a replication
+ * master. The reason is that once we send the record to
+ * replication clients, the transaction can no longer
+ * abort, otherwise the master would be out of sync with
+ * the rest of the replication group. Panic the system.
+ */
+ if (ret != 0 && IS_REP_MASTER(dbenv))
+ ret = __db_panic(dbenv, ret);
+ }
+err:
+ if (lock_held)
R_UNLOCK(dbenv, &dblp->reginfo);
if (need_free)
__os_free(dbenv, dbt->data);
-
- if (ret == 0)
- *lsnp = lsn;
+ /*
+ * If auto-remove is set and we switched files, remove unnecessary
+ * log files.
+ */
+ if (ret == 0 &&
+ F_ISSET(dbenv, DB_ENV_LOG_AUTOREMOVE) && !IS_ZERO_LSN(old_lsn))
+ __log_autoremove(dbenv);
return (ret);
}
@@ -268,8 +309,6 @@ __log_txn_lsn(dbenv, lsnp, mbytesp, bytesp)
if (mbytesp != NULL) {
*mbytesp = lp->stat.st_wc_mbytes;
*bytesp = (u_int32_t)(lp->stat.st_wc_bytes + lp->b_off);
-
- lp->stat.st_wc_mbytes = lp->stat.st_wc_bytes = 0;
}
R_UNLOCK(dbenv, &dblp->reginfo);
@@ -316,7 +355,9 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
lp->lsn.offset + hdr->size + dbt->size > lp->log_size) {
if (hdr->size + sizeof(LOGP) + dbt->size > lp->log_size) {
__db_err(dbenv,
- "DB_ENV->log_put: record larger than maximum file size");
+ "DB_ENV->log_put: record larger than maximum file size (%lu > %lu)",
+ (u_long)hdr->size + sizeof(LOGP) + dbt->size,
+ (u_long)lp->log_size);
return (EINVAL);
}
@@ -349,7 +390,7 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
/*
* __log_flush_commit --
- * Flush a record for which the DB_FLUSH flag to log_put has been set.
+ * Flush a record.
*/
static int
__log_flush_commit(dbenv, lsnp, flags)
@@ -361,15 +402,26 @@ __log_flush_commit(dbenv, lsnp, flags)
DB_LSN flush_lsn;
LOG *lp;
int ret;
- u_int32_t op;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
flush_lsn = *lsnp;
- op = DB_OPFLAGS_MASK & flags;
- if ((ret = __log_flush_int(dblp, &flush_lsn, 1)) == 0)
- return (0);
+ ret = 0;
+
+ /*
+ * DB_FLUSH:
+ * Flush a record for which the DB_FLUSH flag to log_put was set.
+ *
+ * DB_LOG_WRNOSYNC:
+ * If there's anything in the current log buffer, write it out.
+ */
+ if (LF_ISSET(DB_FLUSH))
+ ret = __log_flush_int(dblp, &flush_lsn, 1);
+ else if (lp->b_off != 0)
+ if ((ret = __log_write(dblp,
+ dblp->bufp, (u_int32_t)lp->b_off)) == 0)
+ lp->b_off = 0;
/*
* If a flush supporting a transaction commit fails, we must abort the
@@ -377,7 +429,7 @@ __log_flush_commit(dbenv, lsnp, flags)
* if the commit we care about made it to disk successfully, we just
* ignore the failure, because there's no way to undo the commit.)
*/
- if (op != DB_COMMIT)
+ if (ret == 0 || !LF_ISSET(DB_LOG_COMMIT))
return (ret);
if (flush_lsn.file != lp->lsn.file || flush_lsn.offset < lp->w_off)
@@ -583,10 +635,9 @@ err:
* and be ignored.
*/
if (w_off + lp->buffer_size < lp->w_off) {
- if ((t_ret =
- __os_seek(dbenv,
- &dblp->lfh, 0, 0, w_off, 0, DB_OS_SEEK_SET)) != 0 ||
- (t_ret = __os_read(dbenv, &dblp->lfh, dblp->bufp,
+ if ((t_ret = __os_seek(dbenv,
+ dblp->lfhp, 0, 0, w_off, 0, DB_OS_SEEK_SET)) != 0 ||
+ (t_ret = __os_read(dbenv, dblp->lfhp, dblp->bufp,
b_off, &nr)) != 0)
return (__db_panic(dbenv, t_ret));
if (nr != b_off) {
@@ -604,8 +655,35 @@ err:
}
/*
+ * __log_flush_pp --
+ * DB_ENV->log_flush pre/post processing.
+ *
+ * PUBLIC: int __log_flush_pp __P((DB_ENV *, const DB_LSN *));
+ */
+int
+__log_flush_pp(dbenv, lsn)
+ DB_ENV *dbenv;
+ const DB_LSN *lsn;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->lg_handle, "DB_ENV->log_flush", DB_INIT_LOG);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_flush(dbenv, lsn);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+
+ return (ret);
+}
+
+/*
* __log_flush --
- * Write all records less than or equal to the specified LSN.
+ * DB_ENV->log_flush
*
* PUBLIC: int __log_flush __P((DB_ENV *, const DB_LSN *));
*/
@@ -617,10 +695,6 @@ __log_flush(dbenv, lsn)
DB_LOG *dblp;
int ret;
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv,
- dbenv->lg_handle, "DB_ENV->log_flush", DB_INIT_LOG);
-
dblp = dbenv->lg_handle;
R_LOCK(dbenv, &dblp->reginfo);
ret = __log_flush_int(dblp, lsn, 1);
@@ -632,27 +706,29 @@ __log_flush(dbenv, lsn)
* __log_flush_int --
* Write all records less than or equal to the specified LSN; internal
* version.
+ *
+ * PUBLIC: int __log_flush_int __P((DB_LOG *, const DB_LSN *, int));
*/
-static int
+int
__log_flush_int(dblp, lsnp, release)
DB_LOG *dblp;
const DB_LSN *lsnp;
int release;
{
+ struct __db_commit *commit;
DB_ENV *dbenv;
DB_LSN flush_lsn, f_lsn;
DB_MUTEX *flush_mutexp;
LOG *lp;
- int current, do_flush, first, ret;
size_t b_off;
- struct __db_commit *commit;
u_int32_t ncommit, w_off;
+ int do_flush, first, ret;
- ret = 0;
- ncommit = 0;
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
flush_mutexp = R_ADDR(&dblp->reginfo, lp->flush_mutex_off);
+ ncommit = 0;
+ ret = 0;
/*
* If no LSN specified, flush the entire log by setting the flush LSN
@@ -666,16 +742,21 @@ __log_flush_int(dblp, lsnp, release)
(lsnp->file == lp->lsn.file &&
lsnp->offset > lp->lsn.offset - lp->len)) {
__db_err(dbenv,
- "DB_ENV->log_flush: LSN past current end-of-log");
+ "DB_ENV->log_flush: LSN of %lu/%lu past current end-of-log of %lu/%lu",
+ (u_long)lsnp->file, (u_long)lsnp->offset,
+ (u_long)lp->lsn.file, (u_long)lp->lsn.offset);
+ __db_err(dbenv, "%s %s %s",
+ "Database environment corrupt; the wrong log files may",
+ "have been removed or incompatible database files imported",
+ "from another environment");
return (EINVAL);
} else {
/*
* See if we need to wait. s_lsn is not locked so some
* care is needed. The sync point can only move forward.
+ * The lsnp->file cannot be greater than the s_lsn.file.
* If the file we want is in the past we are done.
* If the file numbers are the same check the offset.
- * If this fails check the file numbers again since the
- * offset might have changed while we were looking.
* This all assumes we can read an integer in one
* state or the other, not in transition.
*/
@@ -686,9 +767,6 @@ __log_flush_int(dblp, lsnp, release)
lp->s_lsn.offset > lsnp->offset)
return (0);
- if (lp->s_lsn.file > lsnp->file)
- return (0);
-
flush_lsn = *lsnp;
}
@@ -774,7 +852,6 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
* current buffer if the flush LSN is greater than or equal to the
* buffer's starting LSN.
*/
- current = 0;
if (lp->b_off != 0 && log_compare(&flush_lsn, &lp->f_lsn) >= 0) {
if ((ret = __log_write(dblp,
dblp->bufp, (u_int32_t)lp->b_off)) != 0) {
@@ -783,18 +860,14 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
}
lp->b_off = 0;
- current = 1;
}
/*
* It's possible that this thread may never have written to this log
* file. Acquire a file descriptor if we don't already have one.
- * One last check -- if we're not writing anything from the current
- * buffer, don't bother. We have nothing to write and nothing to
- * sync.
*/
- if (!F_ISSET(&dblp->lfh, DB_FH_VALID) || dblp->lfname != lp->lsn.file)
- if (!current || (ret = __log_newfh(dblp)) != 0) {
+ if (dblp->lfhp == NULL || dblp->lfname != lp->lsn.file)
+ if ((ret = __log_newfh(dblp)) != 0) {
MUTEX_UNLOCK(dbenv, flush_mutexp);
goto done;
}
@@ -812,7 +885,7 @@ flush: MUTEX_LOCK(dbenv, flush_mutexp);
R_UNLOCK(dbenv, &dblp->reginfo);
/* Sync all writes to disk. */
- if ((ret = __os_fsync(dbenv, &dblp->lfh)) != 0) {
+ if ((ret = __os_fsync(dbenv, dblp->lfhp)) != 0) {
MUTEX_UNLOCK(dbenv, flush_mutexp);
if (release)
R_LOCK(dbenv, &dblp->reginfo);
@@ -963,7 +1036,7 @@ __log_write(dblp, addr, len)
* If we haven't opened the log file yet or the current one
* has changed, acquire a new log file.
*/
- if (!F_ISSET(&dblp->lfh, DB_FH_VALID) || dblp->lfname != lp->lsn.file)
+ if (dblp->lfhp == NULL || dblp->lfname != lp->lsn.file)
if ((ret = __log_newfh(dblp)) != 0)
return (ret);
@@ -971,10 +1044,9 @@ __log_write(dblp, addr, len)
* Seek to the offset in the file (someone may have written it
* since we last did).
*/
- if ((ret =
- __os_seek(dbenv,
- &dblp->lfh, 0, 0, lp->w_off, 0, DB_OS_SEEK_SET)) != 0 ||
- (ret = __os_write(dbenv, &dblp->lfh, addr, len, &nw)) != 0)
+ if ((ret = __os_seek(dbenv,
+ dblp->lfhp, 0, 0, lp->w_off, 0, DB_OS_SEEK_SET)) != 0 ||
+ (ret = __os_write(dbenv, dblp->lfhp, addr, len, &nw)) != 0)
return (ret);
/* Reset the buffer offset and update the seek offset. */
@@ -995,26 +1067,48 @@ __log_write(dblp, addr, len)
}
/*
- * __log_file --
- * Map a DB_LSN to a file name.
+ * __log_file_pp --
+ * DB_ENV->log_file pre/post processing.
*
- * PUBLIC: int __log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
+ * PUBLIC: int __log_file_pp __P((DB_ENV *, const DB_LSN *, char *, size_t));
*/
int
-__log_file(dbenv, lsn, namep, len)
+__log_file_pp(dbenv, lsn, namep, len)
DB_ENV *dbenv;
const DB_LSN *lsn;
char *namep;
size_t len;
{
- DB_LOG *dblp;
- int ret;
- char *name;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
dbenv->lg_handle, "DB_ENV->log_file", DB_INIT_LOG);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __log_file(dbenv, lsn, namep, len);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __log_file --
+ * DB_ENV->log_file.
+ */
+static int
+__log_file(dbenv, lsn, namep, len)
+ DB_ENV *dbenv;
+ const DB_LSN *lsn;
+ char *namep;
+ size_t len;
+{
+ DB_LOG *dblp;
+ int ret;
+ char *name;
+
dblp = dbenv->lg_handle;
R_LOCK(dbenv, &dblp->reginfo);
ret = __log_name(dblp, lsn->file, &name, NULL, 0);
@@ -1044,40 +1138,42 @@ __log_newfh(dblp)
{
DB_ENV *dbenv;
LOG *lp;
+ u_int32_t flags;
int ret;
- char *name;
+ logfile_validity status;
dbenv = dblp->dbenv;
lp = dblp->reginfo.primary;
/* Close any previous file descriptor. */
- if (F_ISSET(&dblp->lfh, DB_FH_VALID))
- (void)__os_closehandle(dbenv, &dblp->lfh);
+ if (dblp->lfhp != NULL) {
+ (void)__os_closehandle(dbenv, dblp->lfhp);
+ dblp->lfhp = NULL;
+ }
/*
- * Get the path of the new file and open it.
- *
* Adding DB_OSO_LOG to the flags may add additional platform-specific
* optimizations. On WinNT, the logfile is preallocated, which may
* have a time penalty at startup, but have better overall throughput.
* We are not certain that this works reliably, so enable at your own
* risk.
- *
- * XXX:
- * Initialize the log file size. This is a hack to push the log's
- * maximum size down into the Windows __os_open routine, because it
- * wants to pre-allocate it.
*/
+ flags = DB_OSO_CREATE | DB_OSO_SEQ |
+ (F_ISSET(dbenv, DB_ENV_DIRECT_LOG) ? DB_OSO_DIRECT : 0);
+
+#ifdef SET_DB_OSO_LOG
+ LF_SET(DB_OSO_LOG);
+#endif
+
+ /* Get the path of the new file and open it. */
dblp->lfname = lp->lsn.file;
- dblp->lfh.log_size = lp->log_size;
- if ((ret = __log_name(dblp, dblp->lfname,
- &name, &dblp->lfh,
- DB_OSO_CREATE |/* DB_OSO_LOG |*/ DB_OSO_SEQ |
- (F_ISSET(dbenv, DB_ENV_DIRECT_LOG) ? DB_OSO_DIRECT : 0))) != 0)
+ if ((ret = __log_valid(dblp, dblp->lfname, 0, &dblp->lfhp,
+ flags, &status)) != 0)
__db_err(dbenv,
- "DB_ENV->log_put: %s: %s", name, db_strerror(ret));
+ "DB_ENV->log_put: %d: %s", lp->lsn.file, db_strerror(ret));
+ else if (status != DB_LV_NORMAL && status != DB_LV_INCOMPLETE)
+ ret = DB_NOTFOUND;
- __os_free(dbenv, name);
return (ret);
}
@@ -1086,14 +1182,14 @@ __log_newfh(dblp)
* Return the log name for a particular file, and optionally open it.
*
* PUBLIC: int __log_name __P((DB_LOG *,
- * PUBLIC: u_int32_t, char **, DB_FH *, u_int32_t));
+ * PUBLIC: u_int32_t, char **, DB_FH **, u_int32_t));
*/
int
-__log_name(dblp, filenumber, namep, fhp, flags)
+__log_name(dblp, filenumber, namep, fhpp, flags)
DB_LOG *dblp;
u_int32_t filenumber, flags;
char **namep;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
DB_ENV *dbenv;
LOG *lp;
@@ -1124,11 +1220,12 @@ __log_name(dblp, filenumber, namep, fhp, flags)
*/
(void)snprintf(new, sizeof(new), LFNAME, filenumber);
if ((ret = __db_appname(dbenv,
- DB_APP_LOG, new, 0, NULL, namep)) != 0 || fhp == NULL)
+ DB_APP_LOG, new, 0, NULL, namep)) != 0 || fhpp == NULL)
return (ret);
/* Open the new-style file -- if we succeed, we're done. */
- if ((ret = __os_open(dbenv, *namep, flags, lp->persist.mode, fhp)) == 0)
+ if ((ret = __os_open_extend(dbenv,
+ *namep, lp->log_size, 0, flags, lp->persist.mode, fhpp)) == 0)
return (0);
/*
@@ -1151,8 +1248,8 @@ __log_name(dblp, filenumber, namep, fhp, flags)
* space allocated for the new-style name and return the old-style
* name to the caller.
*/
- if ((ret = __os_open(dbenv,
- oname, flags, lp->persist.mode, fhp)) == 0) {
+ if ((ret =
+ __os_open(dbenv, oname, flags, lp->persist.mode, fhpp)) == 0) {
__os_free(dbenv, *namep);
*namep = oname;
return (0);
@@ -1178,7 +1275,8 @@ err: __os_free(dbenv, oname);
* flushed, when log switches files, etc. This is just a thin PUBLIC wrapper
* for __log_putr with a slightly prettier interface.
*
- * Note that the log region mutex should be held when this is called.
+ * Note that the db_rep->db_mutexp should be held when this is called.
+ * Note that we acquire the log region lock while holding db_mutexp.
*
* PUBLIC: int __log_rep_put __P((DB_ENV *, DB_LSN *, const DBT *));
*/
@@ -1198,6 +1296,7 @@ __log_rep_put(dbenv, lsnp, rec)
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
+ R_LOCK(dbenv, &dblp->reginfo);
memset(&hdr, 0, sizeof(HDR));
t = *rec;
dbt = &t;
@@ -1218,6 +1317,11 @@ __log_rep_put(dbenv, lsnp, rec)
DB_ASSERT(log_compare(lsnp, &lp->lsn) == 0);
ret = __log_putr(dblp, lsnp, dbt, lp->lsn.offset - lp->len, &hdr);
err:
+ /*
+ * !!! Assume caller holds db_rep->db_mutex to modify ready_lsn.
+ */
+ lp->ready_lsn = lp->lsn;
+ R_UNLOCK(dbenv, &dblp->reginfo);
if (need_free)
__os_free(dbenv, t.data);
return (ret);
diff --git a/db/mp/mp_alloc.c b/db/mp/mp_alloc.c
index 731f569f5..bc9e234f8 100644
--- a/db/mp/mp_alloc.c
+++ b/db/mp/mp_alloc.c
@@ -1,22 +1,30 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_alloc.c,v 11.7 2000/04/20 21:14:18 bostic Exp $";
+static const char revid[] = "$Id: mp_alloc.c,v 11.40 2003/07/03 02:24:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/mp.h"
+
+typedef struct {
+ DB_MPOOL_HASH *bucket;
+ u_int32_t priority;
+} HS;
+
+static void __memp_bad_buffer __P((DB_MPOOL_HASH *));
/*
* __memp_alloc --
@@ -34,14 +42,28 @@ __memp_alloc(dbmp, memreg, mfp, len, offsetp, retp)
roff_t *offsetp;
void *retp;
{
- BH *bhp, *nbhp;
+ BH *bhp;
+ DB_ENV *dbenv;
+ DB_MPOOL_HASH *dbht, *hp, *hp_end, *hp_tmp;
+ DB_MUTEX *mutexp;
MPOOL *c_mp;
MPOOLFILE *bh_mfp;
- size_t total;
- int nomore, restart, ret, wrote;
+ size_t freed_space;
+ u_int32_t buckets, buffers, high_priority, priority, put_counter;
+ u_int32_t total_buckets;
+ int aggressive, giveup, ret;
void *p;
+ dbenv = dbmp->dbenv;
c_mp = memreg->primary;
+ dbht = R_ADDR(memreg, c_mp->htab);
+ hp_end = &dbht[c_mp->htab_buckets];
+
+ buckets = buffers = put_counter = total_buckets = 0;
+ aggressive = giveup = 0;
+ hp_tmp = NULL;
+
+ c_mp->stat.st_alloc++;
/*
* If we're allocating a buffer, and the one we're discarding is the
@@ -53,100 +75,330 @@ __memp_alloc(dbmp, memreg, mfp, len, offsetp, retp)
if (mfp != NULL)
len = (sizeof(BH) - sizeof(u_int8_t)) + mfp->stat.st_pagesize;
- nomore = 0;
+ R_LOCK(dbenv, memreg);
+ /*
+ * Anything newer than 1/10th of the buffer pool is ignored during
+ * allocation (unless allocation starts failing).
+ */
+ high_priority = c_mp->lru_count - c_mp->stat.st_pages / 10;
+
+ /*
+ * First we try to allocate from free memory. If that fails, scan the
+ * buffer pool to find buffers with low priorities. We consider small
+ * sets of hash buckets each time to limit the amount of work needing
+ * to be done. This approximates LRU, but not very well. We either
+ * find a buffer of the same size to use, or we will free 3 times what
+ * we need in the hopes it will coalesce into a contiguous chunk of the
+ * right size. In the latter case we branch back here and try again.
+ */
alloc: if ((ret = __db_shalloc(memreg->addr, len, MUTEX_ALIGN, &p)) == 0) {
- if (offsetp != NULL)
+ if (mfp != NULL)
+ c_mp->stat.st_pages++;
+ R_UNLOCK(dbenv, memreg);
+
+found: if (offsetp != NULL)
*offsetp = R_OFFSET(memreg, p);
*(void **)retp = p;
+
+ /*
+ * Update the search statistics.
+ *
+ * We're not holding the region locked here, these statistics
+ * can't be trusted.
+ */
+ total_buckets += buckets;
+ if (total_buckets != 0) {
+ if (total_buckets > c_mp->stat.st_alloc_max_buckets)
+ c_mp->stat.st_alloc_max_buckets = total_buckets;
+ c_mp->stat.st_alloc_buckets += total_buckets;
+ }
+ if (buffers != 0) {
+ if (buffers > c_mp->stat.st_alloc_max_pages)
+ c_mp->stat.st_alloc_max_pages = buffers;
+ c_mp->stat.st_alloc_pages += buffers;
+ }
return (0);
- }
- if (nomore) {
- __db_err(dbmp->dbenv,
- "Unable to allocate %lu bytes from mpool shared region: %s\n",
- (u_long)len, db_strerror(ret));
+ } else if (giveup || c_mp->stat.st_pages == 0) {
+ R_UNLOCK(dbenv, memreg);
+
+ __db_err(dbenv,
+ "unable to allocate space from the buffer cache");
return (ret);
}
-retry: /* Find a buffer we can flush; pure LRU. */
- restart = total = 0;
- for (bhp =
- SH_TAILQ_FIRST(&c_mp->bhq, __bh); bhp != NULL; bhp = nbhp) {
- nbhp = SH_TAILQ_NEXT(bhp, q, __bh);
+ /*
+ * We re-attempt the allocation every time we've freed 3 times what
+ * we need. Reset our free-space counter.
+ */
+ freed_space = 0;
+ total_buckets += buckets;
+ buckets = 0;
+
+ /*
+ * Walk the hash buckets and find the next two with potentially useful
+ * buffers. Free the buffer with the lowest priority from the buckets'
+ * chains.
+ */
+ for (;;) {
+ /* All pages have been freed, make one last try */
+ if (c_mp->stat.st_pages == 0)
+ goto alloc;
- /* Ignore pinned or locked (I/O in progress) buffers. */
- if (bhp->ref != 0 || F_ISSET(bhp, BH_LOCKED))
+ /* Check for wrap around. */
+ hp = &dbht[c_mp->last_checked++];
+ if (hp >= hp_end) {
+ c_mp->last_checked = 0;
+ hp = &dbht[c_mp->last_checked++];
+ }
+
+ /*
+ * Skip empty buckets.
+ *
+ * We can check for empty buckets before locking as we
+ * only care if the pointer is zero or non-zero.
+ */
+ if (SH_TAILQ_FIRST(&hp->hash_bucket, __bh) == NULL)
continue;
- /* Find the associated MPOOLFILE. */
- bh_mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+ /*
+ * The failure mode is when there are too many buffers we can't
+ * write or there's not enough memory in the system. We don't
+ * have a way to know that allocation has no way to succeed.
+ * We fail if there were no pages returned to the cache after
+ * we've been trying for a relatively long time.
+ *
+ * Get aggressive if we've tried to flush the number of hash
+ * buckets as are in the system and have not found any more
+ * space. Aggressive means:
+ *
+ * a: set a flag to attempt to flush high priority buffers as
+ * well as other buffers.
+ * b: sync the mpool to force out queue extent pages. While we
+ * might not have enough space for what we want and flushing
+ * is expensive, why not?
+ * c: look at a buffer in every hash bucket rather than choose
+ * the more preferable of two.
+ * d: start to think about giving up.
+ *
+ * If we get here twice, sleep for a second, hopefully someone
+ * else will run and free up some memory.
+ *
+ * Always try to allocate memory too, in case some other thread
+ * returns its memory to the region.
+ *
+ * !!!
+ * This test ignores pathological cases like no buffers in the
+ * system -- that shouldn't be possible.
+ */
+ if ((++buckets % c_mp->htab_buckets) == 0) {
+ if (freed_space > 0)
+ goto alloc;
+ R_UNLOCK(dbenv, memreg);
- /* Write the page if it's dirty. */
- if (F_ISSET(bhp, BH_DIRTY)) {
- ++bhp->ref;
- if ((ret = __memp_bhwrite(dbmp,
- bh_mfp, bhp, &restart, &wrote)) != 0)
- return (ret);
- --bhp->ref;
+ switch (++aggressive) {
+ case 1:
+ break;
+ case 2:
+ put_counter = c_mp->put_counter;
+ /* FALLTHROUGH */
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ (void)__memp_sync_int(
+ dbenv, NULL, 0, DB_SYNC_ALLOC, NULL);
- /*
- * Another process may have acquired this buffer and
- * incremented the ref count after we wrote it.
- */
- if (bhp->ref != 0)
- goto retry;
+ (void)__os_sleep(dbenv, 1, 0);
+ break;
+ default:
+ aggressive = 1;
+ if (put_counter == c_mp->put_counter)
+ giveup = 1;
+ break;
+ }
+
+ R_LOCK(dbenv, memreg);
+ goto alloc;
+ }
+
+ if (!aggressive) {
+ /* Skip high priority buckets. */
+ if (hp->hash_priority > high_priority)
+ continue;
/*
- * If we wrote the page, continue and free the buffer.
- * We don't have to rewalk the list to acquire the
- * buffer because it was never available for any other
- * process to modify it.
- *
- * If we didn't write the page, but we discarded and
- * reacquired the region lock, restart the list walk.
- *
- * If we neither wrote the buffer nor discarded the
- * region lock, continue down the buffer list.
+ * Find two buckets and select the one with the lowest
+ * priority. Performance testing shows that looking
+ * at two improves the LRUness and looking at more only
+ * does a little better.
*/
- if (wrote)
- ++c_mp->stat.st_rw_evict;
- else {
- if (restart)
- goto retry;
+ if (hp_tmp == NULL) {
+ hp_tmp = hp;
continue;
}
+ if (hp->hash_priority > hp_tmp->hash_priority)
+ hp = hp_tmp;
+ hp_tmp = NULL;
+ }
+
+ /* Remember the priority of the buffer we're looking for. */
+ priority = hp->hash_priority;
+
+ /* Unlock the region and lock the hash bucket. */
+ R_UNLOCK(dbenv, memreg);
+ mutexp = &hp->hash_mutex;
+ MUTEX_LOCK(dbenv, mutexp);
+
+#ifdef DIAGNOSTIC
+ __memp_check_order(hp);
+#endif
+ /*
+ * The lowest priority page is first in the bucket, as they are
+ * maintained in sorted order.
+ *
+ * The buffer may have been freed or its priority changed while
+ * we switched from the region lock to the hash lock. If so,
+ * we have to restart. We will still take the first buffer on
+ * the bucket's list, though, if it has a low enough priority.
+ */
+ if ((bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) == NULL ||
+ bhp->ref != 0 || bhp->priority > priority)
+ goto next_hb;
+
+ buffers++;
+
+ /* Find the associated MPOOLFILE. */
+ bh_mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
+
+ /* If the page is dirty, pin it and write it. */
+ ret = 0;
+ if (F_ISSET(bhp, BH_DIRTY)) {
+ ++bhp->ref;
+ ret = __memp_bhwrite(dbmp, hp, bh_mfp, bhp, 0);
+ --bhp->ref;
+ if (ret == 0)
+ ++c_mp->stat.st_rw_evict;
} else
++c_mp->stat.st_ro_evict;
/*
+ * If a write fails for any reason, we can't proceed.
+ *
+ * We released the hash bucket lock while doing I/O, so another
+ * thread may have acquired this buffer and incremented the ref
+ * count after we wrote it, in which case we can't have it.
+ *
+ * If there's a write error and we're having problems finding
+ * something to allocate, avoid selecting this buffer again
+ * by making it the bucket's least-desirable buffer.
+ */
+ if (ret != 0 || bhp->ref != 0) {
+ if (ret != 0 && aggressive)
+ __memp_bad_buffer(hp);
+ goto next_hb;
+ }
+
+ /*
* Check to see if the buffer is the size we're looking for.
- * If it is, simply reuse it.
+ * If so, we can simply reuse it. Else, free the buffer and
+ * its space and keep looking.
*/
if (mfp != NULL &&
mfp->stat.st_pagesize == bh_mfp->stat.st_pagesize) {
- __memp_bhfree(dbmp, bhp, 0);
+ __memp_bhfree(dbmp, hp, bhp, 0);
- if (offsetp != NULL)
- *offsetp = R_OFFSET(memreg, bhp);
- *(void **)retp = bhp;
- return (0);
+ p = bhp;
+ goto found;
}
- /* Note how much space we've freed, and free the buffer. */
- total += __db_shsizeof(bhp);
- __memp_bhfree(dbmp, bhp, 1);
+ freed_space += __db_shsizeof(bhp);
+ __memp_bhfree(dbmp, hp, bhp, 1);
+ if (aggressive > 1)
+ aggressive = 1;
/*
- * Retry as soon as we've freed up sufficient space. If we
- * have to coalesce of memory to satisfy the request, don't
- * try until it's likely (possible?) that we'll succeed.
+ * Unlock this hash bucket and re-acquire the region lock. If
+ * we're reaching here as a result of calling memp_bhfree, the
+ * hash bucket lock has already been discarded.
*/
- if (total >= 3 * len)
- goto alloc;
+ if (0) {
+next_hb: MUTEX_UNLOCK(dbenv, mutexp);
+ }
+ R_LOCK(dbenv, memreg);
- /* Restart the walk if we discarded the region lock. */
- if (restart)
- goto retry;
+ /*
+ * Retry the allocation as soon as we've freed up sufficient
+ * space. We're likely to have to coalesce of memory to
+ * satisfy the request, don't try until it's likely (possible?)
+ * we'll succeed.
+ */
+ if (freed_space >= 3 * len)
+ goto alloc;
}
- nomore = 1;
- goto alloc;
+ /* NOTREACHED */
+}
+
+/*
+ * __memp_bad_buffer --
+ * Make the first buffer in a hash bucket the least desirable buffer.
+ */
+static void
+__memp_bad_buffer(hp)
+ DB_MPOOL_HASH *hp;
+{
+ BH *bhp;
+ u_int32_t priority;
+
+ /* Remove the first buffer from the bucket. */
+ bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+
+ /*
+ * Find the highest priority buffer in the bucket. Buffers are
+ * sorted by priority, so it's the last one in the bucket.
+ */
+ priority = bhp->priority;
+ if (!SH_TAILQ_EMPTY(&hp->hash_bucket))
+ priority = SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh)->priority;
+
+ /*
+ * Set our buffer's priority to be just as bad, and append it to
+ * the bucket.
+ */
+ bhp->priority = priority;
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+
+ /* Reset the hash bucket's priority. */
+ hp->hash_priority = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
}
+
+#ifdef DIAGNOSTIC
+/*
+ * __memp_check_order --
+ * Verify the priority ordering of a hash bucket chain.
+ *
+ * PUBLIC: #ifdef DIAGNOSTIC
+ * PUBLIC: void __memp_check_order __P((DB_MPOOL_HASH *));
+ * PUBLIC: #endif
+ */
+void
+__memp_check_order(hp)
+ DB_MPOOL_HASH *hp;
+{
+ BH *bhp;
+ u_int32_t priority;
+
+ /*
+ * Assumes the hash bucket is locked.
+ */
+ if ((bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) == NULL)
+ return;
+
+ DB_ASSERT(bhp->priority == hp->hash_priority);
+
+ for (priority = bhp->priority;
+ (bhp = SH_TAILQ_NEXT(bhp, hq, __bh)) != NULL;
+ priority = bhp->priority)
+ DB_ASSERT(priority <= bhp->priority);
+}
+#endif
diff --git a/db/mp/mp_bh.c b/db/mp/mp_bh.c
index 2c294b054..2069de014 100644
--- a/db/mp/mp_bh.c
+++ b/db/mp/mp_bh.c
@@ -1,20 +1,19 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: mp_bh.c,v 11.71 2002/09/04 19:06:45 margo Exp ";
+static const char revid[] = "$Id: mp_bh.c,v 11.86 2003/07/02 20:02:37 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -24,8 +23,7 @@ static const char revid[] = "Id: mp_bh.c,v 11.71 2002/09/04 19:06:45 margo Exp "
#include "dbinc/db_page.h"
static int __memp_pgwrite
- __P((DB_MPOOL *, DB_MPOOLFILE *, DB_MPOOL_HASH *, BH *));
-static int __memp_upgrade __P((DB_MPOOL *, DB_MPOOLFILE *, MPOOLFILE *));
+ __P((DB_ENV *, DB_MPOOLFILE *, DB_MPOOL_HASH *, BH *));
/*
* __memp_bhwrite --
@@ -45,54 +43,63 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
DB_ENV *dbenv;
DB_MPOOLFILE *dbmfp;
DB_MPREG *mpreg;
- int local_open, incremented, ret;
+ int ret;
dbenv = dbmp->dbenv;
- local_open = incremented = 0;
/*
- * If the file has been removed or is a closed temporary file, jump
- * right ahead and pretend that we've found the file we want -- the
- * page-write function knows how to handle the fact that we don't have
- * (or need!) any real file descriptor information.
+ * If the file has been removed or is a closed temporary file, we're
+ * done -- the page-write function knows how to handle the fact that
+ * we don't have (or need!) any real file descriptor information.
*/
- if (F_ISSET(mfp, MP_DEADFILE)) {
- dbmfp = NULL;
- goto found;
- }
+ if (mfp->deadfile)
+ return (__memp_pgwrite(dbenv, NULL, hp, bhp));
/*
* Walk the process' DB_MPOOLFILE list and find a file descriptor for
* the file. We also check that the descriptor is open for writing.
- * If we find a descriptor on the file that's not open for writing, we
- * try and upgrade it to make it writeable. If that fails, we're done.
*/
MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q))
- if (dbmfp->mfp == mfp) {
- if (F_ISSET(dbmfp, MP_READONLY) &&
- !F_ISSET(dbmfp, MP_UPGRADE) &&
- (F_ISSET(dbmfp, MP_UPGRADE_FAIL) ||
- __memp_upgrade(dbmp, dbmfp, mfp))) {
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- return (EPERM);
- }
-
- /*
- * Increment the reference count -- see the comment in
- * __memp_fclose_int().
- */
+ if (dbmfp->mfp == mfp && !F_ISSET(dbmfp, MP_READONLY)) {
++dbmfp->ref;
- incremented = 1;
break;
}
MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- if (dbmfp != NULL)
- goto found;
+ if (dbmfp != NULL) {
+ /*
+ * Temporary files may not have been created. We only handle
+ * temporary files in this path, because only the process that
+ * created a temporary file will ever flush buffers to it.
+ */
+ if (dbmfp->fhp == NULL) {
+ /* We may not be allowed to create backing files. */
+ if (mfp->no_backing_file)
+ return (EPERM);
+
+ MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+ if (dbmfp->fhp == NULL)
+ ret = __db_appname(dbenv, DB_APP_TMP, NULL,
+ F_ISSET(dbenv, DB_ENV_DIRECT_DB) ?
+ DB_OSO_DIRECT : 0, &dbmfp->fhp, NULL);
+ else
+ ret = 0;
+ MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ if (ret != 0) {
+ __db_err(dbenv,
+ "unable to create temporary backing file");
+ return (ret);
+ }
+ }
+
+ goto pgwrite;
+ }
/*
+ * There's no file handle for this file in our process.
+ *
* !!!
* It's the caller's choice if we're going to open extent files.
*/
@@ -117,7 +124,7 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
*
* Note we should never get here when the temporary file in question
* has already been closed in another process, in which case it should
- * be marked MP_DEADFILE.
+ * be marked dead.
*/
if (F_ISSET(mfp, MP_TEMP))
return (EPERM);
@@ -147,23 +154,27 @@ __memp_bhwrite(dbmp, hp, mfp, bhp, open_extents)
* There's no negative cache, so we may repeatedly try and open files
* that we have previously tried (and failed) to open.
*/
- if ((ret = dbenv->memp_fcreate(dbenv, &dbmfp, 0)) != 0)
+ if ((ret = __memp_fcreate(dbenv, &dbmfp)) != 0)
return (ret);
- if ((ret = __memp_fopen_int(dbmfp, mfp,
+ if ((ret = __memp_fopen(dbmfp, mfp,
R_ADDR(dbmp->reginfo, mfp->path_off),
0, 0, mfp->stat.st_pagesize)) != 0) {
- (void)dbmfp->close(dbmfp, 0);
+ (void)__memp_fclose(dbmfp, 0);
return (ret);
}
- local_open = 1;
-found: ret = __memp_pgwrite(dbmp, dbmfp, hp, bhp);
+pgwrite:
+ ret = __memp_pgwrite(dbenv, dbmfp, hp, bhp);
+ /*
+ * Discard our reference, and, if we're the last reference, make sure
+ * the file eventually gets closed.
+ */
MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- if (incremented)
- --dbmfp->ref;
- else if (local_open)
+ if (dbmfp->ref == 1)
F_SET(dbmfp, MP_FLUSH);
+ else
+ --dbmfp->ref;
MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
return (ret);
@@ -182,15 +193,12 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
BH *bhp;
int can_create;
{
- DB_IO db_io;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
MPOOLFILE *mfp;
size_t len, nr, pagesize;
int ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
mfp = dbmfp->mfp;
pagesize = mfp->stat.st_pagesize;
@@ -207,22 +215,16 @@ __memp_pgread(dbmfp, mutexp, bhp, can_create)
* them now, we create them when the pages have to be flushed.
*/
nr = 0;
- if (F_ISSET(dbmfp->fhp, DB_FH_VALID)) {
- db_io.fhp = dbmfp->fhp;
- db_io.mutexp = dbmfp->mutexp;
- db_io.pagesize = db_io.bytes = pagesize;
- db_io.pgno = bhp->pgno;
- db_io.buf = bhp->buf;
-
- /*
- * The page may not exist; if it doesn't, nr may well be 0,
- * but we expect the underlying OS calls not to return an
- * error code in this case.
- */
- if ((ret = __os_io(dbenv, &db_io, DB_IO_READ, &nr)) != 0)
+ if (dbmfp->fhp != NULL)
+ if ((ret = __os_io(dbenv, DB_IO_READ,
+ dbmfp->fhp, bhp->pgno, pagesize, bhp->buf, &nr)) != 0)
goto err;
- }
+ /*
+ * The page may not exist; if it doesn't, nr may well be 0, but we
+ * expect the underlying OS calls not to return an error code in
+ * this case.
+ */
if (nr < pagesize) {
/*
* Don't output error messages for short reads. In particular,
@@ -275,20 +277,17 @@ err: MUTEX_UNLOCK(dbenv, &bhp->mutex);
* Write a page to a file.
*/
static int
-__memp_pgwrite(dbmp, dbmfp, hp, bhp)
- DB_MPOOL *dbmp;
+__memp_pgwrite(dbenv, dbmfp, hp, bhp)
+ DB_ENV *dbenv;
DB_MPOOLFILE *dbmfp;
DB_MPOOL_HASH *hp;
BH *bhp;
{
- DB_ENV *dbenv;
- DB_IO db_io;
DB_LSN lsn;
MPOOLFILE *mfp;
size_t nw;
int callpgin, ret;
- dbenv = dbmp->dbenv;
mfp = dbmfp == NULL ? NULL : dbmfp->mfp;
callpgin = ret = 0;
@@ -318,7 +317,7 @@ __memp_pgwrite(dbmp, dbmfp, hp, bhp)
* Once we pass this point, we know that dbmfp and mfp aren't NULL,
* and that we have a valid file reference.
*/
- if (mfp == NULL || F_ISSET(mfp, MP_DEADFILE))
+ if (mfp == NULL || mfp->deadfile)
goto file_dead;
/*
@@ -327,7 +326,7 @@ __memp_pgwrite(dbmp, dbmfp, hp, bhp)
*/
if (LOGGING_ON(dbenv) && mfp->lsn_off != -1) {
memcpy(&lsn, bhp->buf + mfp->lsn_off, sizeof(DB_LSN));
- if ((ret = dbenv->log_flush(dbenv, &lsn)) != 0)
+ if ((ret = __log_flush(dbenv, &lsn)) != 0)
goto err;
}
@@ -354,15 +353,16 @@ __memp_pgwrite(dbmp, dbmfp, hp, bhp)
* fail the first test, acquire the log mutex and check again.
*/
DB_LOG *dblp;
+ DB_MUTEX *mtx;
LOG *lp;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- if (!IS_NOT_LOGGED_LSN(LSN(bhp->buf)) &&
- log_compare(&lp->s_lsn, &LSN(bhp->buf)) <= 0) {
- R_LOCK(dbenv, &dblp->reginfo);
+ if (log_compare(&lp->s_lsn, &LSN(bhp->buf)) <= 0) {
+ mtx = R_ADDR(&dblp->reginfo, lp->flush_mutex_off);
+ MUTEX_LOCK(dbenv, mtx);
DB_ASSERT(log_compare(&lp->s_lsn, &LSN(bhp->buf)) > 0);
- R_UNLOCK(dbenv, &dblp->reginfo);
+ MUTEX_UNLOCK(dbenv, mtx);
}
}
#endif
@@ -372,38 +372,21 @@ __memp_pgwrite(dbmp, dbmfp, hp, bhp)
* that the contents of the buffer will need to be passed through pgin
* before they are reused.
*/
- if (mfp->ftype != 0) {
+ if (mfp->ftype != 0 && !F_ISSET(bhp, BH_CALLPGIN)) {
callpgin = 1;
if ((ret = __memp_pg(dbmfp, bhp, 0)) != 0)
goto err;
}
- /* Temporary files may not yet have been created. */
- if (!F_ISSET(dbmfp->fhp, DB_FH_VALID)) {
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- ret = F_ISSET(dbmfp->fhp, DB_FH_VALID) ? 0 :
- __db_appname(dbenv, DB_APP_TMP, NULL,
- F_ISSET(dbenv, DB_ENV_DIRECT_DB) ? DB_OSO_DIRECT : 0,
- dbmfp->fhp, NULL);
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- if (ret != 0) {
- __db_err(dbenv,
- "unable to create temporary backing file");
- goto err;
- }
- }
-
/* Write the page. */
- db_io.fhp = dbmfp->fhp;
- db_io.mutexp = dbmfp->mutexp;
- db_io.pagesize = db_io.bytes = mfp->stat.st_pagesize;
- db_io.pgno = bhp->pgno;
- db_io.buf = bhp->buf;
- if ((ret = __os_io(dbenv, &db_io, DB_IO_WRITE, &nw)) != 0) {
+ if ((ret = __os_io(dbenv, DB_IO_WRITE, dbmfp->fhp,
+ bhp->pgno, mfp->stat.st_pagesize, bhp->buf, &nw)) != 0) {
__db_err(dbenv, "%s: write failed for page %lu",
__memp_fn(dbmfp), (u_long)bhp->pgno);
goto err;
}
+
+ mfp->file_written = 1;
++mfp->stat.st_page_out;
err:
@@ -462,8 +445,8 @@ __memp_pg(dbmfp, bhp, is_pgin)
MPOOLFILE *mfp;
int ftype, ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
mfp = dbmfp->mfp;
MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
@@ -554,7 +537,7 @@ __memp_bhfree(dbmp, hp, bhp, free_mem)
mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
MUTEX_LOCK(dbenv, &mfp->mutex);
if (--mfp->block_cnt == 0 && mfp->mpf_cnt == 0)
- __memp_mf_discard(dbmp, mfp);
+ (void)__memp_mf_discard(dbmp, mfp);
else
MUTEX_UNLOCK(dbenv, &mfp->mutex);
@@ -578,69 +561,3 @@ __memp_bhfree(dbmp, hp, bhp, free_mem)
}
R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
}
-
-/*
- * __memp_upgrade --
- * Upgrade a file descriptor from read-only to read-write.
- */
-static int
-__memp_upgrade(dbmp, dbmfp, mfp)
- DB_MPOOL *dbmp;
- DB_MPOOLFILE *dbmfp;
- MPOOLFILE *mfp;
-{
- DB_ENV *dbenv;
- DB_FH *fhp, *tfhp;
- int ret;
- char *rpath;
-
- dbenv = dbmp->dbenv;
- fhp = NULL;
- rpath = NULL;
-
- /*
- * Calculate the real name for this file and try to open it read/write.
- * We know we have a valid pathname for the file because it's the only
- * way we could have gotten a file descriptor of any kind.
- */
- if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), &fhp)) != 0)
- goto err;
-
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- R_ADDR(dbmp->reginfo, mfp->path_off), 0, NULL, &rpath)) != 0)
- goto err;
-
- if (__os_open(dbenv, rpath,
- F_ISSET(mfp, MP_DIRECT) ? DB_OSO_DIRECT : 0, 0, fhp) != 0) {
- F_SET(dbmfp, MP_UPGRADE_FAIL);
- goto err;
- }
-
- /*
- * Swap the descriptors and set the upgrade flag.
- *
- * XXX
- * There is a race here. If another process schedules a read using the
- * existing file descriptor and is swapped out before making the system
- * call, this code could theoretically close the file descriptor out
- * from under it. While it's very unlikely, this code should still be
- * rewritten.
- */
- tfhp = dbmfp->fhp;
- dbmfp->fhp = fhp;
- fhp = tfhp;
-
- (void)__os_closehandle(dbenv, fhp);
- F_SET(dbmfp, MP_UPGRADE);
-
- ret = 0;
- if (0) {
-err: ret = 1;
- }
- if (fhp != NULL)
- __os_free(dbenv, fhp);
- if (rpath != NULL)
- __os_free(dbenv, rpath);
-
- return (ret);
-}
diff --git a/db/mp/mp_fget.c b/db/mp/mp_fget.c
index 1bff5e136..1df3f3bfa 100644
--- a/db/mp/mp_fget.c
+++ b/db/mp/mp_fget.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_fget.c,v 11.28 2001/01/10 04:50:53 ubell Exp $";
+static const char revid[] = "$Id: mp_fget.c,v 11.81 2003/09/25 02:15:16 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,50 +16,32 @@ static const char revid[] = "$Id: mp_fget.c,v 11.28 2001/01/10 04:50:53 ubell Ex
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
/*
- * memp_fget --
- * Get a page from the file.
+ * __memp_fget_pp --
+ * DB_MPOOLFILE->get pre/post processing.
+ *
+ * PUBLIC: int __memp_fget_pp
+ * PUBLIC: __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
*/
int
-memp_fget(dbmfp, pgnoaddr, flags, addrp)
+__memp_fget_pp(dbmfp, pgnoaddr, flags, addrp)
DB_MPOOLFILE *dbmfp;
db_pgno_t *pgnoaddr;
u_int32_t flags;
void *addrp;
{
- BH *bhp;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
- DB_HASHTAB *dbht;
- MPOOL *c_mp, *mp;
- MPOOLFILE *mfp;
- size_t n_bucket, n_cache, mf_offset;
- u_int32_t st_hsearch;
- int b_incr, first, ret;
+ int rep_check, ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
- mp = dbmp->reginfo[0].primary;
- mfp = dbmfp->mfp;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_fget(dbmfp, pgnoaddr, flags, addrp));
-#endif
+ dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
+ MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->get");
/*
* Validate arguments.
@@ -74,101 +56,96 @@ memp_fget(dbmfp, pgnoaddr, flags, addrp)
* is to keep database files small. It's sleazy as hell, but we catch
* any attempt to actually write the file in memp_fput().
*/
-#define OKFLAGS \
- (DB_MPOOL_CREATE | DB_MPOOL_LAST | \
- DB_MPOOL_NEW | DB_MPOOL_NEW_GROUP | DB_MPOOL_EXTENT)
+#define OKFLAGS (DB_MPOOL_CREATE | DB_MPOOL_LAST | DB_MPOOL_NEW)
if (flags != 0) {
if ((ret = __db_fchk(dbenv, "memp_fget", flags, OKFLAGS)) != 0)
return (ret);
- switch (flags & ~DB_MPOOL_EXTENT) {
+ switch (flags) {
case DB_MPOOL_CREATE:
case DB_MPOOL_LAST:
case DB_MPOOL_NEW:
- case DB_MPOOL_NEW_GROUP:
- case 0:
break;
default:
return (__db_ferr(dbenv, "memp_fget", 1));
}
}
-#ifdef DIAGNOSTIC
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __op_rep_enter(dbenv);
+ ret = __memp_fget(dbmfp, pgnoaddr, flags, addrp);
/*
- * XXX
- * We want to switch threads as often as possible. Yield every time
- * we get a new page to ensure contention.
+ * We only decrement the count in op_rep_exit if the operattion fails.
+ * Otherwise the count will be decremeneted when the page
+ * is no longer pinned in memp_fput.
*/
- if (DB_GLOBAL(db_pageyield))
- __os_yield(dbenv, 1);
-#endif
+ if (ret != 0 && rep_check)
+ __op_rep_exit(dbenv);
+ return (ret);
+}
- /* Initialize remaining local variables. */
- mf_offset = R_OFFSET(dbmp->reginfo, mfp);
- bhp = NULL;
- st_hsearch = 0;
- b_incr = ret = 0;
+/*
+ * __memp_fget --
+ * Get a page from the file.
+ *
+ * PUBLIC: int __memp_fget
+ * PUBLIC: __P((DB_MPOOLFILE *, db_pgno_t *, u_int32_t, void *));
+ */
+int
+__memp_fget(dbmfp, pgnoaddr, flags, addrp)
+ DB_MPOOLFILE *dbmfp;
+ db_pgno_t *pgnoaddr;
+ u_int32_t flags;
+ void *addrp;
+{
+ enum { FIRST_FOUND, FIRST_MISS, SECOND_FOUND, SECOND_MISS } state;
+ BH *alloc_bhp, *bhp;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ MPOOL *c_mp, *mp;
+ MPOOLFILE *mfp;
+ roff_t mf_offset;
+ u_int32_t n_cache, st_hsearch;
+ int b_incr, extending, first, ret;
- R_LOCK(dbenv, dbmp->reginfo);
+ *(void **)addrp = NULL;
- /*
- * Check for the new, last or last + 1 page requests.
- *
- * Examine and update the file's last_pgno value. We don't care if
- * the last_pgno value immediately changes due to another thread --
- * at this instant in time, the value is correct. We do increment the
- * current last_pgno value if the thread is asking for a new page,
- * however, to ensure that two threads creating pages don't get the
- * same one.
- *
- * If we create a page, there is the potential that a page after it
- * in the file will be written before it will be written. Recovery
- * depends on pages that are "created" in the file by subsequent pages
- * being written be zeroed out, not have random garbage. Ensure that
- * the OS agrees.
- *
- * !!!
- * DB_MPOOL_NEW_GROUP is undocumented -- the hash access method needs
- * to allocate contiguous groups of pages in order to do subdatabases.
- * We return the first page in the group, but the caller must put an
- * LSN on the *last* page and write it, otherwise after a crash we may
- * not create all of the pages we need to create.
- */
- if (LF_ISSET(DB_MPOOL_LAST | DB_MPOOL_NEW | DB_MPOOL_NEW_GROUP)) {
- if (LF_ISSET(DB_MPOOL_NEW)) {
- if (F_ISSET(&dbmfp->fh, DB_FH_VALID) && (ret =
- __os_fpinit(dbenv, &dbmfp->fh, mfp->last_pgno + 1,
- 1, mfp->stat.st_pagesize)) != 0) {
- R_UNLOCK(dbenv, dbmp->reginfo);
- return (ret);
- }
- ++mfp->last_pgno;
- }
- if (LF_ISSET(DB_MPOOL_NEW_GROUP)) {
- if (F_ISSET(&dbmfp->fh, DB_FH_VALID) && (ret =
- __os_fpinit(dbenv, &dbmfp->fh, mfp->last_pgno + 1,
- (int)*pgnoaddr, mfp->stat.st_pagesize)) != 0) {
- R_UNLOCK(dbenv, dbmp->reginfo);
- return (ret);
- }
- mfp->last_pgno += *pgnoaddr;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+
+ c_mp = NULL;
+ mp = dbmp->reginfo[0].primary;
+ mfp = dbmfp->mfp;
+ mf_offset = R_OFFSET(dbmp->reginfo, mfp);
+ alloc_bhp = bhp = NULL;
+ hp = NULL;
+ b_incr = extending = ret = 0;
+
+ switch (flags) {
+ case DB_MPOOL_LAST:
+ /* Get the last page number in the file. */
+ if (flags == DB_MPOOL_LAST) {
+ R_LOCK(dbenv, dbmp->reginfo);
+ *pgnoaddr = mfp->last_pgno;
+ R_UNLOCK(dbenv, dbmp->reginfo);
}
- *pgnoaddr = mfp->last_pgno;
+ break;
+ case DB_MPOOL_NEW:
+ /*
+ * If always creating a page, skip the first search
+ * of the hash bucket.
+ */
+ if (flags == DB_MPOOL_NEW)
+ goto alloc;
+ break;
+ case DB_MPOOL_CREATE:
+ default:
+ break;
}
/*
- * Determine the hash bucket where this page will live, and get local
- * pointers to the cache and its hash table.
- */
- n_cache = NCACHE(mp, *pgnoaddr);
- c_mp = dbmp->reginfo[n_cache].primary;
- n_bucket = NBUCKET(c_mp, mf_offset, *pgnoaddr);
- dbht = R_ADDR(&dbmp->reginfo[n_cache], c_mp->htab);
-
- if (LF_ISSET(DB_MPOOL_NEW | DB_MPOOL_NEW_GROUP))
- goto alloc;
-
- /*
* If mmap'ing the file and the page is not past the end of the file,
* just return a pointer.
*
@@ -183,235 +160,474 @@ memp_fget(dbmfp, pgnoaddr, flags, addrp)
* goes through the cache. All pages previously returned will be safe,
* as long as the correct locking protocol was observed.
*
- * XXX
* We don't discard the map because we don't know when all of the
* pages will have been discarded from the process' address space.
* It would be possible to do so by reference counting the open
* pages from the mmap, but it's unclear to me that it's worth it.
*/
- if (dbmfp->addr != NULL && F_ISSET(mfp, MP_CAN_MMAP)) {
- if (*pgnoaddr > mfp->orig_last_pgno) {
- /*
- * !!!
- * See the comment above about non-existent pages and
- * the hash access method.
- */
- if (!LF_ISSET(DB_MPOOL_CREATE)) {
- if (!LF_ISSET(DB_MPOOL_EXTENT))
- __db_err(dbenv,
- "%s: page %lu doesn't exist",
- __memp_fn(dbmfp), (u_long)*pgnoaddr);
- ret = EINVAL;
- goto err;
- }
- } else {
- *(void **)addrp =
- R_ADDR(dbmfp, *pgnoaddr * mfp->stat.st_pagesize);
- ++mfp->stat.st_map;
- goto done;
- }
+ if (dbmfp->addr != NULL &&
+ F_ISSET(mfp, MP_CAN_MMAP) && *pgnoaddr <= mfp->orig_last_pgno) {
+ *(void **)addrp =
+ R_ADDR(dbmfp, *pgnoaddr * mfp->stat.st_pagesize);
+ ++mfp->stat.st_map;
+ return (0);
}
+hb_search:
+ /*
+ * Determine the cache and hash bucket where this page lives and get
+ * local pointers to them. Reset on each pass through this code, the
+ * page number can change.
+ */
+ n_cache = NCACHE(mp, mf_offset, *pgnoaddr);
+ c_mp = dbmp->reginfo[n_cache].primary;
+ hp = R_ADDR(&dbmp->reginfo[n_cache], c_mp->htab);
+ hp = &hp[NBUCKET(c_mp, mf_offset, *pgnoaddr)];
+
/* Search the hash chain for the page. */
- for (bhp = SH_TAILQ_FIRST(&dbht[n_bucket], __bh);
+retry: st_hsearch = 0;
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ for (bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh)) {
++st_hsearch;
if (bhp->pgno != *pgnoaddr || bhp->mf_offset != mf_offset)
continue;
- /* Increment the reference count. */
+ /*
+ * Increment the reference count. We may discard the hash
+ * bucket lock as we evaluate and/or read the buffer, so we
+ * need to ensure it doesn't move and its contents remain
+ * unchanged.
+ */
if (bhp->ref == UINT16_T_MAX) {
__db_err(dbenv,
"%s: page %lu: reference count overflow",
__memp_fn(dbmfp), (u_long)bhp->pgno);
ret = EINVAL;
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
goto err;
}
-
- /*
- * Increment the reference count. We may discard the region
- * lock as we evaluate and/or read the buffer, so we need to
- * ensure that it doesn't move and that its contents remain
- * unchanged.
- */
++bhp->ref;
b_incr = 1;
/*
- * Any buffer we find might be trouble.
- *
* BH_LOCKED --
- * I/O is in progress. Because we've incremented the buffer
- * reference count, we know the buffer can't move. Unlock
- * the region lock, wait for the I/O to complete, and reacquire
- * the region.
+ * I/O is in progress or sync is waiting on the buffer to write
+ * it. Because we've incremented the buffer reference count,
+ * we know the buffer can't move. Unlock the bucket lock, wait
+ * for the buffer to become available, reacquire the bucket.
*/
- for (first = 1; F_ISSET(bhp, BH_LOCKED); first = 0) {
- R_UNLOCK(dbenv, dbmp->reginfo);
+ for (first = 1; F_ISSET(bhp, BH_LOCKED) &&
+ !F_ISSET(dbenv, DB_ENV_NOLOCKING); first = 0) {
+ /*
+ * If someone is trying to sync this buffer and the
+ * buffer is hot, they may never get in. Give up
+ * and try again.
+ */
+ if (!first && bhp->ref_sync != 0) {
+ --bhp->ref;
+ b_incr = 0;
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ __os_yield(dbenv, 1);
+ goto retry;
+ }
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
/*
- * Explicitly yield the processor if it's not the first
- * pass through this loop -- if we don't, we might end
- * up running to the end of our CPU quantum as we will
- * simply be swapping between the two locks.
+ * Explicitly yield the processor if not the first pass
+ * through this loop -- if we don't, we might run to the
+ * end of our CPU quantum as we will simply be swapping
+ * between the two locks.
*/
if (!first)
__os_yield(dbenv, 1);
- MUTEX_LOCK(dbenv, &bhp->mutex, dbenv->lockfhp);
+ MUTEX_LOCK(dbenv, &bhp->mutex);
/* Wait for I/O to finish... */
MUTEX_UNLOCK(dbenv, &bhp->mutex);
- R_LOCK(dbenv, dbmp->reginfo);
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
}
+ ++mfp->stat.st_cache_hit;
+ break;
+ }
+
+ /*
+ * Update the hash bucket search statistics -- do now because our next
+ * search may be for a different bucket.
+ */
+ ++c_mp->stat.st_hash_searches;
+ if (st_hsearch > c_mp->stat.st_hash_longest)
+ c_mp->stat.st_hash_longest = st_hsearch;
+ c_mp->stat.st_hash_examined += st_hsearch;
+
+ /*
+ * There are 4 possible paths to this location:
+ *
+ * FIRST_MISS:
+ * Didn't find the page in the hash bucket on our first pass:
+ * bhp == NULL, alloc_bhp == NULL
+ *
+ * FIRST_FOUND:
+ * Found the page in the hash bucket on our first pass:
+ * bhp != NULL, alloc_bhp == NULL
+ *
+ * SECOND_FOUND:
+ * Didn't find the page in the hash bucket on the first pass,
+ * allocated space, and found the page in the hash bucket on
+ * our second pass:
+ * bhp != NULL, alloc_bhp != NULL
+ *
+ * SECOND_MISS:
+ * Didn't find the page in the hash bucket on the first pass,
+ * allocated space, and didn't find the page in the hash bucket
+ * on our second pass:
+ * bhp == NULL, alloc_bhp != NULL
+ */
+ state = bhp == NULL ?
+ (alloc_bhp == NULL ? FIRST_MISS : SECOND_MISS) :
+ (alloc_bhp == NULL ? FIRST_FOUND : SECOND_FOUND);
+ switch (state) {
+ case FIRST_FOUND:
+ /* We found the buffer in our first check -- we're done. */
+ break;
+ case FIRST_MISS:
/*
- * BH_TRASH --
- * The contents of the buffer are garbage. Shouldn't happen,
- * and this read is likely to fail, but might as well try.
+ * We didn't find the buffer in our first check. Figure out
+ * if the page exists, and allocate structures so we can add
+ * the page to the buffer pool.
+ */
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+
+alloc: /*
+ * If DB_MPOOL_NEW is set, we have to allocate a page number.
+ * If neither DB_MPOOL_CREATE or DB_MPOOL_CREATE is set, then
+ * it's an error to try and get a page past the end of file.
*/
- if (F_ISSET(bhp, BH_TRASH))
- goto reread;
+ COMPQUIET(n_cache, 0);
+
+ extending = ret = 0;
+ R_LOCK(dbenv, dbmp->reginfo);
+ switch (flags) {
+ case DB_MPOOL_NEW:
+ extending = 1;
+ if (mfp->maxpgno != 0 &&
+ mfp->last_pgno >= mfp->maxpgno) {
+ __db_err(dbenv, "%s: file limited to %lu pages",
+ __memp_fn(dbmfp), (u_long)mfp->maxpgno);
+ ret = ENOSPC;
+ } else
+ *pgnoaddr = mfp->last_pgno + 1;
+ break;
+ case DB_MPOOL_CREATE:
+ if (mfp->maxpgno != 0 && *pgnoaddr > mfp->maxpgno) {
+ __db_err(dbenv, "%s: file limited to %lu pages",
+ __memp_fn(dbmfp), (u_long)mfp->maxpgno);
+ ret = ENOSPC;
+ } else
+ extending = *pgnoaddr > mfp->last_pgno;
+ break;
+ default:
+ ret = *pgnoaddr > mfp->last_pgno ? DB_PAGE_NOTFOUND : 0;
+ break;
+ }
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ if (ret != 0)
+ goto err;
/*
- * BH_CALLPGIN --
- * The buffer was converted so it could be written, and the
- * contents need to be converted again.
+ * !!!
+ * In the DB_MPOOL_NEW code path, mf_offset and n_cache have
+ * not yet been initialized.
*/
- if (F_ISSET(bhp, BH_CALLPGIN)) {
- if ((ret = __memp_pg(dbmfp, bhp, 1)) != 0)
- goto err;
- F_CLR(bhp, BH_CALLPGIN);
+ mf_offset = R_OFFSET(dbmp->reginfo, mfp);
+ n_cache = NCACHE(mp, mf_offset, *pgnoaddr);
+ c_mp = dbmp->reginfo[n_cache].primary;
+
+ /* Allocate a new buffer header and data space. */
+ if ((ret = __memp_alloc(dbmp,
+ &dbmp->reginfo[n_cache], mfp, 0, NULL, &alloc_bhp)) != 0)
+ goto err;
+#ifdef DIAGNOSTIC
+ if ((db_alignp_t)alloc_bhp->buf & (sizeof(size_t) - 1)) {
+ __db_err(dbenv,
+ "DB_MPOOLFILE->get: buffer data is NOT size_t aligned");
+ ret = EINVAL;
+ goto err;
}
+#endif
+ /*
+ * If we are extending the file, we'll need the region lock
+ * again.
+ */
+ if (extending)
+ R_LOCK(dbenv, dbmp->reginfo);
- ++mfp->stat.st_cache_hit;
- *(void **)addrp = bhp->buf;
- goto done;
- }
+ /*
+ * DB_MPOOL_NEW does not guarantee you a page unreferenced by
+ * any other thread of control. (That guarantee is interesting
+ * for DB_MPOOL_NEW, unlike DB_MPOOL_CREATE, because the caller
+ * did not specify the page number, and so, may reasonably not
+ * have any way to lock the page outside of mpool.) Regardless,
+ * if we allocate the page, and some other thread of control
+ * requests the page by number, we will not detect that and the
+ * thread of control that allocated using DB_MPOOL_NEW may not
+ * have a chance to initialize the page. (Note: we *could*
+ * detect this case if we set a flag in the buffer header which
+ * guaranteed that no gets of the page would succeed until the
+ * reference count went to 0, that is, until the creating page
+ * put the page.) What we do guarantee is that if two threads
+ * of control are both doing DB_MPOOL_NEW calls, they won't
+ * collide, that is, they won't both get the same page.
+ *
+ * There's a possibility that another thread allocated the page
+ * we were planning to allocate while we were off doing buffer
+ * allocation. We can do that by making sure the page number
+ * we were going to use is still available. If it's not, then
+ * we check to see if the next available page number hashes to
+ * the same mpool region as the old one -- if it does, we can
+ * continue, otherwise, we have to start over.
+ */
+ if (flags == DB_MPOOL_NEW && *pgnoaddr != mfp->last_pgno + 1) {
+ *pgnoaddr = mfp->last_pgno + 1;
+ if (n_cache != NCACHE(mp, mf_offset, *pgnoaddr)) {
+ /*
+ * flags == DB_MPOOL_NEW, so extending is set
+ * and we're holding the region locked.
+ */
+ R_UNLOCK(dbenv, dbmp->reginfo);
-alloc: /* Allocate new buffer header and data space. */
- if ((ret = __memp_alloc(dbmp,
- &dbmp->reginfo[n_cache], mfp, 0, NULL, &bhp)) != 0)
- goto err;
+ R_LOCK(dbenv, &dbmp->reginfo[n_cache]);
+ __db_shalloc_free(
+ dbmp->reginfo[n_cache].addr, alloc_bhp);
+ c_mp->stat.st_pages--;
+ R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
- ++c_mp->stat.st_page_clean;
+ alloc_bhp = NULL;
+ goto alloc;
+ }
+ }
- /*
- * Initialize the BH fields so that we can call the __memp_bhfree
- * routine if an error occurs.
- */
- memset(bhp, 0, sizeof(BH));
- bhp->ref = 1;
- bhp->pgno = *pgnoaddr;
- bhp->mf_offset = mf_offset;
+ /*
+ * We released the region lock, so another thread might have
+ * extended the file. Update the last_pgno and initialize
+ * the file, as necessary, if we extended the file.
+ */
+ if (extending) {
+ if (*pgnoaddr > mfp->last_pgno)
+ mfp->last_pgno = *pgnoaddr;
- /* Increment the count of buffers referenced by this MPOOLFILE. */
- ++mfp->block_cnt;
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ if (ret != 0)
+ goto err;
+ }
+ goto hb_search;
+ case SECOND_FOUND:
+ /*
+ * We allocated buffer space for the requested page, but then
+ * found the page in the buffer cache on our second check.
+ * That's OK -- we can use the page we found in the pool,
+ * unless DB_MPOOL_NEW is set.
+ *
+ * Free the allocated memory, we no longer need it. Since we
+ * can't acquire the region lock while holding the hash bucket
+ * lock, we have to release the hash bucket and re-acquire it.
+ * That's OK, because we have the buffer pinned down.
+ */
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ R_LOCK(dbenv, &dbmp->reginfo[n_cache]);
+ __db_shalloc_free(dbmp->reginfo[n_cache].addr, alloc_bhp);
+ c_mp->stat.st_pages--;
+ alloc_bhp = NULL;
+ R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
- /*
- * Prepend the bucket header to the head of the appropriate MPOOL
- * bucket hash list. Append the bucket header to the tail of the
- * MPOOL LRU chain.
- */
- SH_TAILQ_INSERT_HEAD(&dbht[n_bucket], bhp, hq, __bh);
- SH_TAILQ_INSERT_TAIL(&c_mp->bhq, bhp, q);
+ /*
+ * We can't use the page we found in the pool if DB_MPOOL_NEW
+ * was set. (For details, see the above comment beginning
+ * "DB_MPOOL_NEW does not guarantee you a page unreferenced by
+ * any other thread of control".) If DB_MPOOL_NEW is set, we
+ * release our pin on this particular buffer, and try to get
+ * another one.
+ */
+ if (flags == DB_MPOOL_NEW) {
+ --bhp->ref;
+ b_incr = 0;
+ goto alloc;
+ }
+ break;
+ case SECOND_MISS:
+ /*
+ * We allocated buffer space for the requested page, and found
+ * the page still missing on our second pass through the buffer
+ * cache. Instantiate the page.
+ */
+ bhp = alloc_bhp;
+ alloc_bhp = NULL;
-#ifdef DIAGNOSTIC
- if ((db_alignp_t)bhp->buf & (sizeof(size_t) - 1)) {
- __db_err(dbenv, "Internal error: BH data NOT size_t aligned.");
- ret = EINVAL;
- __memp_bhfree(dbmp, bhp, 1);
- goto err;
- }
-#endif
+ /*
+ * Initialize all the BH and hash bucket fields so we can call
+ * __memp_bhfree if an error occurs.
+ *
+ * Append the buffer to the tail of the bucket list and update
+ * the hash bucket's priority.
+ */
+ b_incr = 1;
- if ((ret = __db_shmutex_init(dbenv, &bhp->mutex,
- R_OFFSET(dbmp->reginfo, &bhp->mutex) + DB_FCNTL_OFF_MPOOL,
- 0, &dbmp->reginfo[n_cache],
- (REGMAINT *)R_ADDR(&dbmp->reginfo[n_cache], c_mp->maint_off)))
- != 0) {
- __memp_bhfree(dbmp, bhp, 1);
- goto err;
- }
+ memset(bhp, 0, sizeof(BH));
+ bhp->ref = 1;
+ bhp->priority = UINT32_T_MAX;
+ bhp->pgno = *pgnoaddr;
+ bhp->mf_offset = mf_offset;
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ hp->hash_priority =
+ SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+
+ /* If we extended the file, make sure the page is never lost. */
+ if (extending) {
+ ++hp->hash_page_dirty;
+ F_SET(bhp, BH_DIRTY | BH_DIRTY_CREATE);
+ }
- /*
- * If we created the page, zero it out and continue.
- *
- * !!!
- * Note: DB_MPOOL_NEW specifically doesn't call the pgin function.
- * If DB_MPOOL_CREATE is used, then the application's pgin function
- * has to be able to handle pages of 0's -- if it uses DB_MPOOL_NEW,
- * it can detect all of its page creates, and not bother.
- *
- * If we're running in diagnostic mode, smash any bytes on the
- * page that are unknown quantities for the caller.
- *
- * Otherwise, read the page into memory, optionally creating it if
- * DB_MPOOL_CREATE is set.
- */
- if (LF_ISSET(DB_MPOOL_NEW | DB_MPOOL_NEW_GROUP)) {
- if (mfp->clear_len == 0)
- memset(bhp->buf, 0, mfp->stat.st_pagesize);
- else {
- memset(bhp->buf, 0, mfp->clear_len);
-#ifdef DIAGNOSTIC
- memset(bhp->buf + mfp->clear_len, CLEAR_BYTE,
- mfp->stat.st_pagesize - mfp->clear_len);
+ /*
+ * If we created the page, zero it out. If we didn't create
+ * the page, read from the backing file.
+ *
+ * !!!
+ * DB_MPOOL_NEW doesn't call the pgin function.
+ *
+ * If DB_MPOOL_CREATE is used, then the application's pgin
+ * function has to be able to handle pages of 0's -- if it
+ * uses DB_MPOOL_NEW, it can detect all of its page creates,
+ * and not bother.
+ *
+ * If we're running in diagnostic mode, smash any bytes on the
+ * page that are unknown quantities for the caller.
+ *
+ * Otherwise, read the page into memory, optionally creating it
+ * if DB_MPOOL_CREATE is set.
+ */
+ if (extending) {
+ if (mfp->clear_len == 0)
+ memset(bhp->buf, 0, mfp->stat.st_pagesize);
+ else {
+ memset(bhp->buf, 0, mfp->clear_len);
+#if defined(DIAGNOSTIC) || defined(UMRW)
+ memset(bhp->buf + mfp->clear_len, CLEAR_BYTE,
+ mfp->stat.st_pagesize - mfp->clear_len);
#endif
+ }
+
+ if (flags == DB_MPOOL_CREATE && mfp->ftype != 0)
+ F_SET(bhp, BH_CALLPGIN);
+
+ ++mfp->stat.st_page_create;
+ } else {
+ F_SET(bhp, BH_TRASH);
+ ++mfp->stat.st_cache_miss;
}
- ++mfp->stat.st_page_create;
- } else {
+ /* Increment buffer count referenced by MPOOLFILE. */
+ MUTEX_LOCK(dbenv, &mfp->mutex);
+ ++mfp->block_cnt;
+ MUTEX_UNLOCK(dbenv, &mfp->mutex);
+
/*
- * It's possible for the read function to fail, which means
- * that we fail as well. Note, the __memp_pgread() function
- * discards the region lock, so the buffer must be pinned
- * down so that it cannot move and its contents are unchanged.
+ * Initialize the mutex. This is the last initialization step,
+ * because it's the only one that can fail, and everything else
+ * must be set up or we can't jump to the err label because it
+ * will call __memp_bhfree.
*/
-reread: if ((ret = __memp_pgread(dbmfp,
- bhp, LF_ISSET(DB_MPOOL_CREATE|DB_MPOOL_EXTENT))) != 0) {
- /*
- * !!!
- * Discard the buffer unless another thread is waiting
- * on our I/O to complete. Regardless, the header has
- * the BH_TRASH flag set.
- */
- if (bhp->ref == 1)
- __memp_bhfree(dbmp, bhp, 1);
+ if ((ret = __db_mutex_setup(dbenv,
+ &dbmp->reginfo[n_cache], &bhp->mutex, 0)) != 0)
goto err;
- }
-
- ++mfp->stat.st_cache_miss;
}
+ DB_ASSERT(bhp->ref != 0);
+
/*
- * If we're returning a page after our current notion of the last-page,
- * update our information. Note, there's no way to un-instantiate this
- * page, it's going to exist whether it's returned to us dirty or not.
+ * If we're the only reference, update buffer and bucket priorities.
+ * We may be about to release the hash bucket lock, and everything
+ * should be correct, first. (We've already done this if we created
+ * the buffer, so there is no need to do it again.)
*/
- if (bhp->pgno > mfp->last_pgno)
- mfp->last_pgno = bhp->pgno;
+ if (state != SECOND_MISS && bhp->ref == 1) {
+ bhp->priority = UINT32_T_MAX;
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+ SH_TAILQ_INSERT_TAIL(&hp->hash_bucket, bhp, hq);
+ hp->hash_priority =
+ SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+ }
- *(void **)addrp = bhp->buf;
+ /*
+ * BH_TRASH --
+ * The buffer we found may need to be filled from the disk.
+ *
+ * It's possible for the read function to fail, which means we fail as
+ * well. Note, the __memp_pgread() function discards and reacquires
+ * the hash lock, so the buffer must be pinned down so that it cannot
+ * move and its contents are unchanged. Discard the buffer on failure
+ * unless another thread is waiting on our I/O to complete. It's OK to
+ * leave the buffer around, as the waiting thread will see the BH_TRASH
+ * flag set, and will also attempt to discard it. If there's a waiter,
+ * we need to decrement our reference count.
+ */
+ if (F_ISSET(bhp, BH_TRASH) &&
+ (ret = __memp_pgread(dbmfp,
+ &hp->hash_mutex, bhp, LF_ISSET(DB_MPOOL_CREATE) ? 1 : 0)) != 0)
+ goto err;
-done: /* Update the chain search statistics. */
- if (st_hsearch) {
- ++c_mp->stat.st_hash_searches;
- if (st_hsearch > c_mp->stat.st_hash_longest)
- c_mp->stat.st_hash_longest = st_hsearch;
- c_mp->stat.st_hash_examined += st_hsearch;
+ /*
+ * BH_CALLPGIN --
+ * The buffer was processed for being written to disk, and now has
+ * to be re-converted for use.
+ */
+ if (F_ISSET(bhp, BH_CALLPGIN)) {
+ if ((ret = __memp_pg(dbmfp, bhp, 1)) != 0)
+ goto err;
+ F_CLR(bhp, BH_CALLPGIN);
}
- ++dbmfp->pinref;
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+#ifdef DIAGNOSTIC
+ /* Update the file's pinned reference count. */
+ R_LOCK(dbenv, dbmp->reginfo);
+ ++dbmfp->pinref;
R_UNLOCK(dbenv, dbmp->reginfo);
+ /*
+ * We want to switch threads as often as possible, and at awkward
+ * times. Yield every time we get a new page to ensure contention.
+ */
+ if (F_ISSET(dbenv, DB_ENV_YIELDCPU))
+ __os_yield(dbenv, 1);
+#endif
+
+ *(void **)addrp = bhp->buf;
return (0);
-err: /* Discard our reference. */
- if (b_incr)
- --bhp->ref;
- R_UNLOCK(dbenv, dbmp->reginfo);
+err: /*
+ * Discard our reference. If we're the only reference, discard the
+ * the buffer entirely. If we held a reference to a buffer, we are
+ * also still holding the hash bucket mutex.
+ */
+ if (b_incr) {
+ if (bhp->ref == 1)
+ (void)__memp_bhfree(dbmp, hp, bhp, 1);
+ else {
+ --bhp->ref;
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ }
+ }
+
+ /* If alloc_bhp is set, free the memory. */
+ if (alloc_bhp != NULL) {
+ R_LOCK(dbenv, &dbmp->reginfo[n_cache]);
+ __db_shalloc_free(dbmp->reginfo[n_cache].addr, alloc_bhp);
+ c_mp->stat.st_pages--;
+ R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
+ }
- *(void **)addrp = NULL;
return (ret);
}
diff --git a/db/mp/mp_fopen.c b/db/mp/mp_fopen.c
index d182f50e1..6e8505350 100644
--- a/db/mp/mp_fopen.c
+++ b/db/mp/mp_fopen.c
@@ -1,192 +1,498 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: mp_fopen.c,v 11.90 2002/08/26 15:22:01 bostic Exp ";
+static const char revid[] = "$Id: mp_fopen.c,v 11.120 2003/11/07 18:45:15 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#ifdef HAVE_RPC
+#include <rpc/rpc.h>
+#endif
#include <string.h>
#endif
#include "db_int.h"
#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
#include "dbinc/mp.h"
-static int __memp_fclose __P((DB_MPOOLFILE *, u_int32_t));
-static int __memp_fopen __P((DB_MPOOLFILE *,
+#ifdef HAVE_RPC
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+#endif
+
+static int __memp_fclose_pp __P((DB_MPOOLFILE *, u_int32_t));
+static int __memp_fopen_pp __P((DB_MPOOLFILE *,
const char *, u_int32_t, int, size_t));
-static void __memp_get_fileid __P((DB_MPOOLFILE *, u_int8_t *));
-static void __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
-static void __memp_refcnt __P((DB_MPOOLFILE *, db_pgno_t *));
-static int __memp_set_clear_len __P((DB_MPOOLFILE *, u_int32_t));
-static int __memp_set_fileid __P((DB_MPOOLFILE *, u_int8_t *));
-static int __memp_set_ftype __P((DB_MPOOLFILE *, int));
-static int __memp_set_lsn_offset __P((DB_MPOOLFILE *, int32_t));
-static int __memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
-static int __memp_set_priority __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
-static void __memp_set_unlink __P((DB_MPOOLFILE *, int));
-
-/* Initialization methods cannot be called after open is called. */
-#define MPF_ILLEGAL_AFTER_OPEN(dbmfp, name) \
- if (F_ISSET(dbmfp, MP_OPEN_CALLED)) \
- return (__db_mi_open((dbmfp)->dbmp->dbenv, name, 1));
+static int __memp_get_clear_len __P((DB_MPOOLFILE *, u_int32_t *));
+static int __memp_get_flags __P((DB_MPOOLFILE *, u_int32_t *));
+static int __memp_get_lsn_offset __P((DB_MPOOLFILE *, int32_t *));
+static int __memp_get_maxsize __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t *));
+static int __memp_set_maxsize __P((DB_MPOOLFILE *, u_int32_t, u_int32_t));
+static int __memp_get_pgcookie __P((DB_MPOOLFILE *, DBT *));
+static int __memp_get_priority __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY *));
+static int __memp_set_priority __P((DB_MPOOLFILE *, DB_CACHE_PRIORITY));
/*
- * __memp_fcreate --
- * Create a DB_MPOOLFILE handle.
+ * __memp_fcreate_pp --
+ * DB_ENV->memp_fcreate pre/post processing.
*
- * PUBLIC: int __memp_fcreate __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
+ * PUBLIC: int __memp_fcreate_pp __P((DB_ENV *, DB_MPOOLFILE **, u_int32_t));
*/
int
-__memp_fcreate(dbenv, retp, flags)
+__memp_fcreate_pp(dbenv, retp, flags)
DB_ENV *dbenv;
DB_MPOOLFILE **retp;
u_int32_t flags;
{
- DB_MPOOL *dbmp;
- DB_MPOOLFILE *dbmfp;
- int ret;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv,
- dbenv->mp_handle, "memp_fcreate", DB_INIT_MPOOL);
-
- dbmp = dbenv->mp_handle;
/* Validate arguments. */
- if ((ret = __db_fchk(dbenv, "memp_fcreate", flags, 0)) != 0)
+ if ((ret = __db_fchk(dbenv, "DB_ENV->memp_fcreate", flags, 0)) != 0)
return (ret);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_fcreate(dbenv, retp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __memp_fcreate --
+ * DB_ENV->memp_fcreate.
+ *
+ * PUBLIC: int __memp_fcreate __P((DB_ENV *, DB_MPOOLFILE **));
+ */
+int
+__memp_fcreate(dbenv, retp)
+ DB_ENV *dbenv;
+ DB_MPOOLFILE **retp;
+{
+ DB_MPOOLFILE *dbmfp;
+ int ret;
+
/* Allocate and initialize the per-process structure. */
if ((ret = __os_calloc(dbenv, 1, sizeof(DB_MPOOLFILE), &dbmfp)) != 0)
return (ret);
- if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), &dbmfp->fhp)) != 0)
- goto err;
-
- /* Allocate and initialize a mutex if necessary. */
- if (F_ISSET(dbenv, DB_ENV_THREAD) &&
- (ret = __db_mutex_setup(dbenv, dbmp->reginfo, &dbmfp->mutexp,
- MUTEX_ALLOC | MUTEX_THREAD)) != 0)
- goto err;
dbmfp->ref = 1;
dbmfp->lsn_offset = -1;
- dbmfp->dbmp = dbmp;
+ dbmfp->dbenv = dbenv;
dbmfp->mfp = INVALID_ROFF;
- dbmfp->close = __memp_fclose;
- dbmfp->get = __memp_fget;
- dbmfp->get_fileid = __memp_get_fileid;
- dbmfp->last_pgno = __memp_last_pgno;
- dbmfp->open = __memp_fopen;
- dbmfp->put = __memp_fput;
- dbmfp->refcnt = __memp_refcnt;
- dbmfp->set = __memp_fset;
- dbmfp->set_clear_len = __memp_set_clear_len;
- dbmfp->set_fileid = __memp_set_fileid;
- dbmfp->set_ftype = __memp_set_ftype;
- dbmfp->set_lsn_offset = __memp_set_lsn_offset;
- dbmfp->set_pgcookie = __memp_set_pgcookie;
- dbmfp->set_priority = __memp_set_priority;
- dbmfp->set_unlink = __memp_set_unlink;
- dbmfp->sync = __memp_fsync;
+#ifdef HAVE_RPC
+ if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ dbmfp->get_clear_len = __dbcl_memp_get_clear_len;
+ dbmfp->set_clear_len = __dbcl_memp_set_clear_len;
+ dbmfp->get_fileid = __dbcl_memp_get_fileid;
+ dbmfp->set_fileid = __dbcl_memp_set_fileid;
+ dbmfp->get_flags = __dbcl_memp_get_flags;
+ dbmfp->set_flags = __dbcl_memp_set_flags;
+ dbmfp->get_ftype = __dbcl_memp_get_ftype;
+ dbmfp->set_ftype = __dbcl_memp_set_ftype;
+ dbmfp->get_lsn_offset = __dbcl_memp_get_lsn_offset;
+ dbmfp->set_lsn_offset = __dbcl_memp_set_lsn_offset;
+ dbmfp->get_maxsize = __dbcl_memp_get_maxsize;
+ dbmfp->set_maxsize = __dbcl_memp_set_maxsize;
+ dbmfp->get_pgcookie = __dbcl_memp_get_pgcookie;
+ dbmfp->set_pgcookie = __dbcl_memp_set_pgcookie;
+ dbmfp->get_priority = __dbcl_memp_get_priority;
+ dbmfp->set_priority = __dbcl_memp_set_priority;
+
+ dbmfp->get = __dbcl_memp_fget;
+ dbmfp->open = __dbcl_memp_fopen;
+ dbmfp->put = __dbcl_memp_fput;
+ dbmfp->set = __dbcl_memp_fset;
+ dbmfp->sync = __dbcl_memp_fsync;
+ } else
+#endif
+ {
+ dbmfp->get_clear_len = __memp_get_clear_len;
+ dbmfp->set_clear_len = __memp_set_clear_len;
+ dbmfp->get_fileid = __memp_get_fileid;
+ dbmfp->set_fileid = __memp_set_fileid;
+ dbmfp->get_flags = __memp_get_flags;
+ dbmfp->set_flags = __memp_set_flags;
+ dbmfp->get_ftype = __memp_get_ftype;
+ dbmfp->set_ftype = __memp_set_ftype;
+ dbmfp->get_lsn_offset = __memp_get_lsn_offset;
+ dbmfp->set_lsn_offset = __memp_set_lsn_offset;
+ dbmfp->get_maxsize = __memp_get_maxsize;
+ dbmfp->set_maxsize = __memp_set_maxsize;
+ dbmfp->get_pgcookie = __memp_get_pgcookie;
+ dbmfp->set_pgcookie = __memp_set_pgcookie;
+ dbmfp->get_priority = __memp_get_priority;
+ dbmfp->set_priority = __memp_set_priority;
+
+ dbmfp->get = __memp_fget_pp;
+ dbmfp->open = __memp_fopen_pp;
+ dbmfp->put = __memp_fput_pp;
+ dbmfp->set = __memp_fset_pp;
+ dbmfp->sync = __memp_fsync_pp;
+ }
+ dbmfp->close = __memp_fclose_pp;
*retp = dbmfp;
return (0);
+}
-err: if (dbmfp != NULL) {
- if (dbmfp->fhp != NULL)
- (void)__os_free(dbenv, dbmfp->fhp);
- (void)__os_free(dbenv, dbmfp);
- }
- return (ret);
+/*
+ * __memp_get_clear_len --
+ * Get the clear length.
+ */
+static int
+__memp_get_clear_len(dbmfp, clear_lenp)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t *clear_lenp;
+{
+ *clear_lenp = dbmfp->clear_len;
+ return (0);
}
/*
* __memp_set_clear_len --
- * Set the clear length.
+ * DB_MPOOLFILE->set_clear_len.
+ *
+ * PUBLIC: int __memp_set_clear_len __P((DB_MPOOLFILE *, u_int32_t));
*/
-static int
+int
__memp_set_clear_len(dbmfp, clear_len)
DB_MPOOLFILE *dbmfp;
u_int32_t clear_len;
{
- MPF_ILLEGAL_AFTER_OPEN(dbmfp, "set_clear_len");
+ MPF_ILLEGAL_AFTER_OPEN(dbmfp, "DB_MPOOLFILE->set_clear_len");
dbmfp->clear_len = clear_len;
return (0);
}
/*
+ * __memp_get_fileid --
+ * DB_MPOOLFILE->get_fileid.
+ *
+ * PUBLIC: int __memp_get_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+ */
+int
+__memp_get_fileid(dbmfp, fileid)
+ DB_MPOOLFILE *dbmfp;
+ u_int8_t *fileid;
+{
+ if (!F_ISSET(dbmfp, MP_FILEID_SET)) {
+ __db_err(dbmfp->dbenv, "get_fileid: file ID not set");
+ return (EINVAL);
+ }
+
+ memcpy(fileid, dbmfp->fileid, DB_FILE_ID_LEN);
+ return (0);
+}
+
+/*
* __memp_set_fileid --
- * Set the file ID.
+ * DB_MPOOLFILE->set_fileid.
+ *
+ * PUBLIC: int __memp_set_fileid __P((DB_MPOOLFILE *, u_int8_t *));
*/
-static int
+int
__memp_set_fileid(dbmfp, fileid)
DB_MPOOLFILE *dbmfp;
u_int8_t *fileid;
{
- MPF_ILLEGAL_AFTER_OPEN(dbmfp, "set_fileid");
+ MPF_ILLEGAL_AFTER_OPEN(dbmfp, "DB_MPOOLFILE->set_fileid");
+
+ memcpy(dbmfp->fileid, fileid, DB_FILE_ID_LEN);
+ F_SET(dbmfp, MP_FILEID_SET);
- /*
- * XXX
- * This is dangerous -- we're saving the caller's pointer instead
- * of allocating memory and copying the contents.
- */
- dbmfp->fileid = fileid;
return (0);
}
/*
- * __memp_set_ftype --
- * Set the file type (as registered).
+ * __memp_get_flags --
+ * Get the DB_MPOOLFILE flags;
*/
static int
+__memp_get_flags(dbmfp, flagsp)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t *flagsp;
+{
+ MPOOLFILE *mfp;
+
+ mfp = dbmfp->mfp;
+
+ *flagsp = 0;
+
+ if (mfp == NULL)
+ *flagsp = FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE);
+ else
+ if (mfp->no_backing_file)
+ FLD_SET(*flagsp, DB_MPOOL_NOFILE);
+ return (0);
+}
+
+/*
+ * __memp_set_flags --
+ * Set the DB_MPOOLFILE flags;
+ *
+ * PUBLIC: int __memp_set_flags __P((DB_MPOOLFILE *, u_int32_t, int));
+ */
+int
+__memp_set_flags(dbmfp, flags, onoff)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t flags;
+ int onoff;
+{
+ DB_ENV *dbenv;
+ MPOOLFILE *mfp;
+ int ret;
+
+ dbenv = dbmfp->dbenv;
+ mfp = dbmfp->mfp;
+
+#define OKFLAGS (DB_MPOOL_NOFILE | DB_MPOOL_UNLINK)
+ if ((ret =
+ __db_fchk(dbenv, "DB_MPOOLFILE->set_flags", flags, OKFLAGS)) != 0)
+ return (ret);
+
+ switch (flags) {
+ case 0:
+ break;
+ case DB_MPOOL_NOFILE:
+ if (mfp == NULL)
+ if (onoff)
+ FLD_SET(dbmfp->config_flags, DB_MPOOL_NOFILE);
+ else
+ FLD_CLR(dbmfp->config_flags, DB_MPOOL_NOFILE);
+ else
+ mfp->no_backing_file = onoff;
+ break;
+ case DB_MPOOL_UNLINK:
+ if (mfp == NULL)
+ if (onoff)
+ FLD_SET(dbmfp->config_flags, DB_MPOOL_UNLINK);
+ else
+ FLD_CLR(dbmfp->config_flags, DB_MPOOL_UNLINK);
+ else
+ mfp->unlink_on_close = onoff;
+ break;
+ }
+ return (0);
+}
+
+/*
+ * __memp_get_ftype --
+ * Get the file type (as registered).
+ *
+ * PUBLIC: int __memp_get_ftype __P((DB_MPOOLFILE *, int *));
+ */
+int
+__memp_get_ftype(dbmfp, ftypep)
+ DB_MPOOLFILE *dbmfp;
+ int *ftypep;
+{
+ *ftypep = dbmfp->ftype;
+ return (0);
+}
+
+/*
+ * __memp_set_ftype --
+ * DB_MPOOLFILE->set_ftype.
+ *
+ * PUBLIC: int __memp_set_ftype __P((DB_MPOOLFILE *, int));
+ */
+int
__memp_set_ftype(dbmfp, ftype)
DB_MPOOLFILE *dbmfp;
int ftype;
{
- MPF_ILLEGAL_AFTER_OPEN(dbmfp, "set_ftype");
+ MPF_ILLEGAL_AFTER_OPEN(dbmfp, "DB_MPOOLFILE->set_ftype");
dbmfp->ftype = ftype;
return (0);
}
/*
+ * __memp_get_lsn_offset --
+ * Get the page's LSN offset.
+ */
+static int
+__memp_get_lsn_offset(dbmfp, lsn_offsetp)
+ DB_MPOOLFILE *dbmfp;
+ int32_t *lsn_offsetp;
+{
+ *lsn_offsetp = dbmfp->lsn_offset;
+ return (0);
+}
+
+/*
* __memp_set_lsn_offset --
* Set the page's LSN offset.
+ *
+ * PUBLIC: int __memp_set_lsn_offset __P((DB_MPOOLFILE *, int32_t));
*/
-static int
+int
__memp_set_lsn_offset(dbmfp, lsn_offset)
DB_MPOOLFILE *dbmfp;
int32_t lsn_offset;
{
- MPF_ILLEGAL_AFTER_OPEN(dbmfp, "set_lsn_offset");
+ MPF_ILLEGAL_AFTER_OPEN(dbmfp, "DB_MPOOLFILE->set_lsn_offset");
dbmfp->lsn_offset = lsn_offset;
return (0);
}
/*
+ * __memp_get_maxsize --
+ * Get the file's maximum size.
+ */
+static int
+__memp_get_maxsize(dbmfp, gbytesp, bytesp)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t *gbytesp, *bytesp;
+{
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
+
+ if ((mfp = dbmfp->mfp) == NULL) {
+ *gbytesp = dbmfp->gbytes;
+ *bytesp = dbmfp->bytes;
+ } else {
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+
+ R_LOCK(dbenv, dbmp->reginfo);
+ *gbytesp = mfp->maxpgno / (GIGABYTE / mfp->stat.st_pagesize);
+ *bytesp = (mfp->maxpgno %
+ (GIGABYTE / mfp->stat.st_pagesize)) * mfp->stat.st_pagesize;
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ }
+
+ return (0);
+}
+
+/*
+ * __memp_set_maxsize --
+ * Set the files's maximum size.
+ */
+static int
+__memp_set_maxsize(dbmfp, gbytes, bytes)
+ DB_MPOOLFILE *dbmfp;
+ u_int32_t gbytes, bytes;
+{
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
+
+ if ((mfp = dbmfp->mfp) == NULL) {
+ dbmfp->gbytes = gbytes;
+ dbmfp->bytes = bytes;
+ } else {
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
+
+ R_LOCK(dbenv, dbmp->reginfo);
+ mfp->maxpgno = gbytes * (GIGABYTE / mfp->stat.st_pagesize);
+ mfp->maxpgno += (bytes +
+ mfp->stat.st_pagesize - 1) / mfp->stat.st_pagesize;
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ }
+
+ return (0);
+}
+
+/*
+ * __memp_get_pgcookie --
+ * Get the pgin/pgout cookie.
+ */
+static int
+__memp_get_pgcookie(dbmfp, pgcookie)
+ DB_MPOOLFILE *dbmfp;
+ DBT *pgcookie;
+{
+ if (dbmfp->pgcookie == NULL) {
+ pgcookie->size = 0;
+ pgcookie->data = "";
+ } else
+ memcpy(pgcookie, dbmfp->pgcookie, sizeof(DBT));
+ return (0);
+}
+
+/*
* __memp_set_pgcookie --
* Set the pgin/pgout cookie.
+ *
+ * PUBLIC: int __memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
*/
-static int
+int
__memp_set_pgcookie(dbmfp, pgcookie)
DB_MPOOLFILE *dbmfp;
DBT *pgcookie;
{
- MPF_ILLEGAL_AFTER_OPEN(dbmfp, "set_pgcookie");
+ DB_ENV *dbenv;
+ DBT *cookie;
+ int ret;
+
+ MPF_ILLEGAL_AFTER_OPEN(dbmfp, "DB_MPOOLFILE->set_pgcookie");
+ dbenv = dbmfp->dbenv;
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(*cookie), &cookie)) != 0)
+ return (ret);
+ if ((ret = __os_malloc(dbenv, pgcookie->size, &cookie->data)) != 0) {
+ (void)__os_free(dbenv, cookie);
+ return (ret);
+ }
+
+ memcpy(cookie->data, pgcookie->data, pgcookie->size);
+ cookie->size = pgcookie->size;
+
+ dbmfp->pgcookie = cookie;
+ return (0);
+}
+
+/*
+ * __memp_get_priority --
+ * Set the cache priority for pages from this file.
+ */
+static int
+__memp_get_priority(dbmfp, priorityp)
+ DB_MPOOLFILE *dbmfp;
+ DB_CACHE_PRIORITY *priorityp;
+{
+ switch (dbmfp->priority) {
+ case MPOOL_PRI_VERY_LOW:
+ *priorityp = DB_PRIORITY_VERY_LOW;
+ break;
+ case MPOOL_PRI_LOW:
+ *priorityp = DB_PRIORITY_LOW;
+ break;
+ case MPOOL_PRI_DEFAULT:
+ *priorityp = DB_PRIORITY_DEFAULT;
+ break;
+ case MPOOL_PRI_HIGH:
+ *priorityp = DB_PRIORITY_HIGH;
+ break;
+ case MPOOL_PRI_VERY_HIGH:
+ *priorityp = DB_PRIORITY_VERY_HIGH;
+ break;
+ default:
+ __db_err(dbmfp->dbenv,
+ "DB_MPOOLFILE->get_priority: unknown priority value: %d",
+ dbmfp->priority);
+ return (EINVAL);
+ }
- dbmfp->pgcookie = pgcookie;
return (0);
}
@@ -201,35 +507,40 @@ __memp_set_priority(dbmfp, priority)
{
switch (priority) {
case DB_PRIORITY_VERY_LOW:
- dbmfp->mfp->priority = MPOOL_PRI_VERY_LOW;
+ dbmfp->priority = MPOOL_PRI_VERY_LOW;
break;
case DB_PRIORITY_LOW:
- dbmfp->mfp->priority = MPOOL_PRI_LOW;
+ dbmfp->priority = MPOOL_PRI_LOW;
break;
case DB_PRIORITY_DEFAULT:
- dbmfp->mfp->priority = MPOOL_PRI_DEFAULT;
+ dbmfp->priority = MPOOL_PRI_DEFAULT;
break;
case DB_PRIORITY_HIGH:
- dbmfp->mfp->priority = MPOOL_PRI_HIGH;
+ dbmfp->priority = MPOOL_PRI_HIGH;
break;
case DB_PRIORITY_VERY_HIGH:
- dbmfp->mfp->priority = MPOOL_PRI_VERY_HIGH;
+ dbmfp->priority = MPOOL_PRI_VERY_HIGH;
break;
default:
- __db_err(dbmfp->dbmp->dbenv,
- "Unknown priority value: %d", priority);
+ __db_err(dbmfp->dbenv,
+ "DB_MPOOLFILE->set_priority: unknown priority value: %d",
+ priority);
return (EINVAL);
}
+ /* Update the underlying file if we've already opened it. */
+ if (dbmfp->mfp != NULL)
+ dbmfp->mfp->priority = priority;
+
return (0);
}
/*
- * __memp_fopen --
- * Open a backing file for the memory pool.
+ * __memp_fopen_pp --
+ * DB_MPOOLFILE->open pre/post processing.
*/
static int
-__memp_fopen(dbmfp, path, flags, mode, pagesize)
+__memp_fopen_pp(dbmfp, path, flags, mode, pagesize)
DB_MPOOLFILE *dbmfp;
const char *path;
u_int32_t flags;
@@ -237,16 +548,14 @@ __memp_fopen(dbmfp, path, flags, mode, pagesize)
size_t pagesize;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
- int ret;
+ int rep_check, ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
/* Validate arguments. */
- if ((ret = __db_fchk(dbenv, "memp_fopen", flags,
+ if ((ret = __db_fchk(dbenv, "DB_MPOOLFILE->open", flags,
DB_CREATE | DB_DIRECT | DB_EXTENT |
DB_NOMMAP | DB_ODDFILESIZE | DB_RDONLY | DB_TRUNCATE)) != 0)
return (ret);
@@ -257,34 +566,40 @@ __memp_fopen(dbmfp, path, flags, mode, pagesize)
*/
if (pagesize == 0 || !POWER_OF_TWO(pagesize)) {
__db_err(dbenv,
- "memp_fopen: page sizes must be a power-of-2");
+ "DB_MPOOLFILE->open: page sizes must be a power-of-2");
return (EINVAL);
}
if (dbmfp->clear_len > pagesize) {
__db_err(dbenv,
- "memp_fopen: clear length larger than page size");
+ "DB_MPOOLFILE->open: clear length larger than page size");
return (EINVAL);
}
/* Read-only checks, and local flag. */
if (LF_ISSET(DB_RDONLY) && path == NULL) {
__db_err(dbenv,
- "memp_fopen: temporary files can't be readonly");
+ "DB_MPOOLFILE->open: temporary files can't be readonly");
return (EINVAL);
}
- return (__memp_fopen_int(dbmfp, NULL, path, flags, mode, pagesize));
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_fopen(dbmfp, NULL, path, flags, mode, pagesize);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
}
/*
- * __memp_fopen_int --
- * Open a backing file for the memory pool; internal version.
+ * __memp_fopen --
+ * DB_MPOOLFILE->open.
*
- * PUBLIC: int __memp_fopen_int __P((DB_MPOOLFILE *,
+ * PUBLIC: int __memp_fopen __P((DB_MPOOLFILE *,
* PUBLIC: MPOOLFILE *, const char *, u_int32_t, int, size_t));
*/
int
-__memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
+__memp_fopen(dbmfp, mfp, path, flags, mode, pagesize)
DB_MPOOLFILE *dbmfp;
MPOOLFILE *mfp;
const char *path;
@@ -294,28 +609,22 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
{
DB_ENV *dbenv;
DB_MPOOL *dbmp;
+ DB_MPOOLFILE *tmp_dbmfp;
MPOOL *mp;
db_pgno_t last_pgno;
size_t maxmap;
u_int32_t mbytes, bytes, oflags;
- int mfp_alloc, ret;
- u_int8_t idbuf[DB_FILE_ID_LEN];
+ int refinc, ret;
char *rpath;
void *p;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
- mfp_alloc = ret = 0;
+ refinc = ret = 0;
rpath = NULL;
/*
- * Set the page size so os_open can decide whether to turn buffering
- * off if the DB_DIRECT_DB flag is set.
- */
- dbmfp->fhp->pagesize = (u_int32_t)pagesize;
-
- /*
* If it's a temporary file, delay the open until we actually need
* to write the file, and we know we can't join any existing files.
*/
@@ -323,6 +632,20 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
goto alloc;
/*
+ * If our caller knows what mfp we're using, increment the ref count,
+ * no need to search.
+ *
+ * We don't need to acquire a lock other than the mfp itself, because
+ * we know there's another reference and it's not going away.
+ */
+ if (mfp != NULL) {
+ MUTEX_LOCK(dbenv, &mfp->mutex);
+ ++mfp->mpf_cnt;
+ refinc = 1;
+ MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ }
+
+ /*
* Get the real name for this file and open it. If it's a Queue extent
* file, it may not exist, and that's OK.
*/
@@ -338,13 +661,29 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
if ((ret =
__db_appname(dbenv, DB_APP_DATA, path, 0, NULL, &rpath)) != 0)
goto err;
- if ((ret = __os_open(dbenv, rpath, oflags, mode, dbmfp->fhp)) != 0) {
+
+ /*
+ * Supply a page size so os_open can decide whether to turn buffering
+ * off if the DB_DIRECT_DB flag is set.
+ */
+ if ((ret = __os_open_extend(dbenv, rpath,
+ 0, (u_int32_t)pagesize, oflags, mode, &dbmfp->fhp)) != 0) {
if (!LF_ISSET(DB_EXTENT))
__db_err(dbenv, "%s: %s", rpath, db_strerror(ret));
goto err;
}
/*
+ * Cache file handles are shared, and have mutexes to protect the
+ * underlying file handle across seek and read/write calls.
+ */
+ dbmfp->fhp->ref = 1;
+ if (F_ISSET(dbenv, DB_ENV_THREAD) &&
+ (ret = __db_mutex_setup(dbenv, dbmp->reginfo,
+ &dbmfp->fhp->mutexp, MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ goto err;
+
+ /*
* Figure out the file's size.
*
* !!!
@@ -366,25 +705,12 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
* don't use timestamps, otherwise there'd be no chance of any
* other process joining the party.
*/
- if (dbmfp->fileid == NULL) {
- if ((ret = __os_fileid(dbenv, rpath, 0, idbuf)) != 0)
- goto err;
- dbmfp->fileid = idbuf;
- }
+ if (!F_ISSET(dbmfp, MP_FILEID_SET) &&
+ (ret = __os_fileid(dbenv, rpath, 0, dbmfp->fileid)) != 0)
+ goto err;
- /*
- * If our caller knows what mfp we're using, increment the ref count,
- * no need to search.
- *
- * We don't need to acquire a lock other than the mfp itself, because
- * we know there's another reference and it's not going away.
- */
- if (mfp != NULL) {
- MUTEX_LOCK(dbenv, &mfp->mutex);
- ++mfp->mpf_cnt;
- MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ if (mfp != NULL)
goto check_map;
- }
/*
* If not creating a temporary file, walk the list of MPOOLFILE's,
@@ -411,7 +737,7 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
/* Skip dead files and temporary files. */
- if (F_ISSET(mfp, MP_DEADFILE | MP_TEMP))
+ if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
continue;
/* Skip non-matching files. */
@@ -429,7 +755,7 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
*/
if (LF_ISSET(DB_TRUNCATE)) {
MUTEX_LOCK(dbenv, &mfp->mutex);
- MPOOLFILE_IGNORE(mfp);
+ mfp->deadfile = 1;
MUTEX_UNLOCK(dbenv, &mfp->mutex);
continue;
}
@@ -443,9 +769,9 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
* created a hash subdatabase in a database that was previously
* all btree.
*
- * XXX
+ * !!!
* We do not check to see if the pgcookie information changed,
- * or update it if it is, this might be a bug.
+ * or update it if it is.
*/
if (dbmfp->clear_len != mfp->clear_len ||
pagesize != mfp->stat.st_pagesize ||
@@ -458,12 +784,30 @@ __memp_fopen_int(dbmfp, mfp, path, flags, mode, pagesize)
goto err;
}
- if (dbmfp->ftype != 0)
- mfp->ftype = dbmfp->ftype;
-
+ /*
+ * Check to see if this file has died while we waited.
+ *
+ * We normally don't lock the deadfile field when we read it as
+ * we only care if the field is zero or non-zero. We do lock
+ * on read when searching for a matching MPOOLFILE so that two
+ * threads of control don't race between setting the deadfile
+ * bit and incrementing the reference count, that is, a thread
+ * of control decrementing the reference count and then setting
+ * deadfile because the reference count is 0 blocks us finding
+ * the file without knowing it's about to be marked dead.
+ */
MUTEX_LOCK(dbenv, &mfp->mutex);
+ if (mfp->deadfile) {
+ MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ continue;
+ }
++mfp->mpf_cnt;
+ refinc = 1;
MUTEX_UNLOCK(dbenv, &mfp->mutex);
+
+ if (dbmfp->ftype != 0)
+ mfp->ftype = dbmfp->ftype;
+
break;
}
R_UNLOCK(dbenv, dbmp->reginfo);
@@ -475,14 +819,26 @@ alloc: /* Allocate and initialize a new MPOOLFILE. */
if ((ret = __memp_alloc(
dbmp, dbmp->reginfo, NULL, sizeof(MPOOLFILE), NULL, &mfp)) != 0)
goto err;
- mfp_alloc = 1;
memset(mfp, 0, sizeof(MPOOLFILE));
mfp->mpf_cnt = 1;
mfp->ftype = dbmfp->ftype;
mfp->stat.st_pagesize = pagesize;
mfp->lsn_off = dbmfp->lsn_offset;
mfp->clear_len = dbmfp->clear_len;
+ mfp->priority = dbmfp->priority;
+ if (dbmfp->gbytes != 0 || dbmfp->bytes != 0) {
+ mfp->maxpgno =
+ dbmfp->gbytes * (GIGABYTE / mfp->stat.st_pagesize);
+ mfp->maxpgno += (dbmfp->bytes +
+ mfp->stat.st_pagesize - 1) / mfp->stat.st_pagesize;
+ }
+ if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_NOFILE))
+ mfp->no_backing_file = 1;
+ if (FLD_ISSET(dbmfp->config_flags, DB_MPOOL_UNLINK))
+ mfp->unlink_on_close = 1;
+ if (LF_ISSET(DB_TXN_NOT_DURABLE))
+ F_SET(mfp, MP_NOT_DURABLE);
if (LF_ISSET(DB_DIRECT))
F_SET(mfp, MP_DIRECT);
if (LF_ISSET(DB_EXTENT))
@@ -565,7 +921,25 @@ alloc: /* Allocate and initialize a new MPOOLFILE. */
check_map:
/*
- * If a file:
+ * We need to verify that all handles open a file either durable or not
+ * durable. This needs to be cross process and cross sub-databases, so
+ * mpool is the place to do it.
+ */
+ if (!LF_ISSET(DB_RDONLY) &&
+ !LF_ISSET(DB_TXN_NOT_DURABLE) != !F_ISSET(mfp, MP_NOT_DURABLE)) {
+ __db_err(dbenv,
+ "Cannot open DURABLE and NOT DURABLE handles in the same file");
+ ret = EINVAL;
+ goto err;
+ }
+ /*
+ * All paths to here have initialized the mfp variable to reference
+ * the selected (or allocated) MPOOLFILE.
+ */
+ dbmfp->mfp = mfp;
+
+ /*
+ * Check to see if we can mmap the file. If a file:
* + isn't temporary
* + is read-only
* + doesn't require any pgin/pgout support
@@ -587,17 +961,17 @@ check_map:
*/
#define DB_MAXMMAPSIZE (10 * 1024 * 1024) /* 10 MB. */
if (F_ISSET(mfp, MP_CAN_MMAP)) {
+ maxmap = dbenv->mp_mmapsize == 0 ?
+ DB_MAXMMAPSIZE : dbenv->mp_mmapsize;
if (path == NULL)
F_CLR(mfp, MP_CAN_MMAP);
- if (!F_ISSET(dbmfp, MP_READONLY))
+ else if (!F_ISSET(dbmfp, MP_READONLY))
F_CLR(mfp, MP_CAN_MMAP);
- if (dbmfp->ftype != 0)
+ else if (dbmfp->ftype != 0)
F_CLR(mfp, MP_CAN_MMAP);
- if (LF_ISSET(DB_NOMMAP) || F_ISSET(dbenv, DB_ENV_NOMMAP))
+ else if (LF_ISSET(DB_NOMMAP) || F_ISSET(dbenv, DB_ENV_NOMMAP))
F_CLR(mfp, MP_CAN_MMAP);
- maxmap = dbenv->mp_mmapsize == 0 ?
- DB_MAXMMAPSIZE : dbenv->mp_mmapsize;
- if (mbytes > maxmap / MEGABYTE ||
+ else if (mbytes > maxmap / MEGABYTE ||
(mbytes == maxmap / MEGABYTE && bytes >= maxmap % MEGABYTE))
F_CLR(mfp, MP_CAN_MMAP);
@@ -612,29 +986,39 @@ check_map:
}
}
- dbmfp->mfp = mfp;
-
F_SET(dbmfp, MP_OPEN_CALLED);
- /* Add the file to the process' list of DB_MPOOLFILEs. */
+ /*
+ * Share the underlying file descriptor if that's possible.
+ *
+ * Add the file to the process' list of DB_MPOOLFILEs.
+ */
MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+
+ for (tmp_dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
+ tmp_dbmfp != NULL; tmp_dbmfp = TAILQ_NEXT(tmp_dbmfp, q))
+ if (dbmfp->mfp == tmp_dbmfp->mfp &&
+ (F_ISSET(dbmfp, MP_READONLY) ||
+ !F_ISSET(tmp_dbmfp, MP_READONLY))) {
+ if (dbmfp->fhp->mutexp != NULL)
+ __db_mutex_free(
+ dbenv, dbmp->reginfo, dbmfp->fhp->mutexp);
+ (void)__os_closehandle(dbenv, dbmfp->fhp);
+
+ ++tmp_dbmfp->fhp->ref;
+ dbmfp->fhp = tmp_dbmfp->fhp;
+ break;
+ }
+
TAILQ_INSERT_TAIL(&dbmp->dbmfq, dbmfp, q);
+
MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
if (0) {
-err: if (F_ISSET(dbmfp->fhp, DB_FH_VALID))
- (void)__os_closehandle(dbenv, dbmfp->fhp);
-
- if (mfp_alloc) {
- R_LOCK(dbenv, dbmp->reginfo);
- if (mfp->path_off != 0)
- __db_shalloc_free(dbmp->reginfo[0].addr,
- R_ADDR(dbmp->reginfo, mfp->path_off));
- if (mfp->fileid_off != 0)
- __db_shalloc_free(dbmp->reginfo[0].addr,
- R_ADDR(dbmp->reginfo, mfp->fileid_off));
- __db_shalloc_free(dbmp->reginfo[0].addr, mfp);
- R_UNLOCK(dbenv, dbmp->reginfo);
+err: if (refinc) {
+ MUTEX_LOCK(dbenv, &mfp->mutex);
+ --mfp->mpf_cnt;
+ MUTEX_UNLOCK(dbenv, &mfp->mutex);
}
}
@@ -644,38 +1028,15 @@ err: if (F_ISSET(dbmfp->fhp, DB_FH_VALID))
}
/*
- * __memp_get_fileid --
- * Return the file ID.
- *
- * XXX
- * Undocumented interface: DB private.
- */
-static void
-__memp_get_fileid(dbmfp, fidp)
- DB_MPOOLFILE *dbmfp;
- u_int8_t *fidp;
-{
- /*
- * No lock needed -- we're using the handle, it had better not
- * be going away.
- *
- * !!!
- * Get the fileID out of the region, not out of the DB_MPOOLFILE
- * structure because the DB_MPOOLFILE reference is possibly short
- * lived, and isn't to be trusted.
- */
- memcpy(fidp, R_ADDR(
- dbmfp->dbmp->reginfo, dbmfp->mfp->fileid_off), DB_FILE_ID_LEN);
-}
-
-/*
* __memp_last_pgno --
* Return the page number of the last page in the file.
*
- * XXX
+ * !!!
* Undocumented interface: DB private.
+ *
+ * PUBLIC: void __memp_last_pgno __P((DB_MPOOLFILE *, db_pgno_t *));
*/
-static void
+void
__memp_last_pgno(dbmfp, pgnoaddr)
DB_MPOOLFILE *dbmfp;
db_pgno_t *pgnoaddr;
@@ -683,8 +1044,8 @@ __memp_last_pgno(dbmfp, pgnoaddr)
DB_ENV *dbenv;
DB_MPOOL *dbmp;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
R_LOCK(dbenv, dbmp->reginfo);
*pgnoaddr = dbmfp->mfp->last_pgno;
@@ -692,86 +1053,45 @@ __memp_last_pgno(dbmfp, pgnoaddr)
}
/*
- * __memp_refcnt --
- * Return the current reference count.
- *
- * XXX
- * Undocumented interface: DB private.
- */
-static void
-__memp_refcnt(dbmfp, cntp)
- DB_MPOOLFILE *dbmfp;
- db_pgno_t *cntp;
-{
- DB_ENV *dbenv;
-
- dbenv = dbmfp->dbmp->dbenv;
-
- MUTEX_LOCK(dbenv, &dbmfp->mfp->mutex);
- *cntp = dbmfp->mfp->mpf_cnt;
- MUTEX_UNLOCK(dbenv, &dbmfp->mfp->mutex);
-}
-
-/*
- * __memp_set_unlink --
- * Set unlink on last close flag.
- *
- * XXX
- * Undocumented interface: DB private.
- */
-static void
-__memp_set_unlink(dbmpf, set)
- DB_MPOOLFILE *dbmpf;
- int set;
-{
- DB_ENV *dbenv;
-
- dbenv = dbmpf->dbmp->dbenv;
-
- MUTEX_LOCK(dbenv, &dbmpf->mfp->mutex);
- if (set)
- F_SET(dbmpf->mfp, MP_UNLINK);
- else
- F_CLR(dbmpf->mfp, MP_UNLINK);
- MUTEX_UNLOCK(dbenv, &dbmpf->mfp->mutex);
-}
-
-/*
- * memp_fclose --
- * Close a backing file for the memory pool.
+ * memp_fclose_pp --
+ * DB_MPOOLFILE->close pre/post processing.
*/
static int
-__memp_fclose(dbmfp, flags)
+__memp_fclose_pp(dbmfp, flags)
DB_MPOOLFILE *dbmfp;
u_int32_t flags;
{
DB_ENV *dbenv;
- int ret, t_ret;
-
- dbenv = dbmfp->dbmp->dbenv;
+ int rep_check, ret, t_ret;
- PANIC_CHECK(dbenv);
+ dbenv = dbmfp->dbenv;
/*
- * XXX
+ * Validate arguments, but as a handle destructor, we can't fail.
+ *
+ * !!!
* DB_MPOOL_DISCARD: Undocumented flag: DB private.
*/
ret = __db_fchk(dbenv, "DB_MPOOLFILE->close", flags, DB_MPOOL_DISCARD);
- if ((t_ret = __memp_fclose_int(dbmfp, flags)) != 0 && ret == 0)
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ if ((t_ret = __memp_fclose(dbmfp, flags)) != 0 && ret == 0)
ret = t_ret;
-
+ if (rep_check)
+ __env_rep_exit(dbenv);
return (ret);
}
/*
- * __memp_fclose_int --
- * Internal version of __memp_fclose.
+ * __memp_fclose --
+ * DB_MPOOLFILE->close.
*
- * PUBLIC: int __memp_fclose_int __P((DB_MPOOLFILE *, u_int32_t));
+ * PUBLIC: int __memp_fclose __P((DB_MPOOLFILE *, u_int32_t));
*/
int
-__memp_fclose_int(dbmfp, flags)
+__memp_fclose(dbmfp, flags)
DB_MPOOLFILE *dbmfp;
u_int32_t flags;
{
@@ -779,53 +1099,40 @@ __memp_fclose_int(dbmfp, flags)
DB_MPOOL *dbmp;
MPOOLFILE *mfp;
char *rpath;
+ u_int32_t ref;
int deleted, ret, t_ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
ret = 0;
/*
- * We have to reference count DB_MPOOLFILE structures as other threads
- * in the process may be using them. Here's the problem:
- *
- * Thread A opens a database.
- * Thread B uses thread A's DB_MPOOLFILE to write a buffer
- * in order to free up memory in the mpool cache.
- * Thread A closes the database while thread B is using the
- * DB_MPOOLFILE structure.
- *
- * By opening all databases before creating any threads, and closing
- * the databases after all the threads have exited, applications get
- * better performance and avoid the problem path entirely.
+ * Remove the DB_MPOOLFILE from the process' list.
*
- * Regardless, holding the DB_MPOOLFILE to flush a dirty buffer is a
- * short-term lock, even in worst case, since we better be the only
- * thread of control using the DB_MPOOLFILE structure to read pages
- * *into* the cache. Wait until we're the only reference holder and
- * remove the DB_MPOOLFILE structure from the list, so nobody else can
- * find it. We do this, rather than have the last reference holder
- * (whoever that might be) discard the DB_MPOOLFILE structure, because
- * we'd rather write error messages to the application in the close
- * routine, not in the checkpoint/sync routine.
+ * It's possible the underlying mpool cache may never have been created.
+ * In that case, all we have is a structure, discard it.
*
- * !!!
* It's possible the DB_MPOOLFILE was never added to the DB_MPOOLFILE
- * file list, check the DB_OPEN_CALLED flag to be sure.
+ * file list, check the MP_OPEN_CALLED flag to be sure.
*/
- for (deleted = 0;;) {
- MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
- if (dbmfp->ref == 1) {
- if (F_ISSET(dbmfp, MP_OPEN_CALLED))
- TAILQ_REMOVE(&dbmp->dbmfq, dbmfp, q);
- deleted = 1;
- }
- MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ if (dbmp == NULL)
+ goto done;
- if (deleted)
- break;
- __os_sleep(dbenv, 1, 0);
- }
+ MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
+
+ DB_ASSERT(dbmfp->ref >= 1);
+ if ((ref = --dbmfp->ref) == 0 && F_ISSET(dbmfp, MP_OPEN_CALLED))
+ TAILQ_REMOVE(&dbmp->dbmfq, dbmfp, q);
+
+ /*
+ * Decrement the file descriptor's ref count -- if we're the last ref,
+ * we'll discard the file descriptor.
+ */
+ if (ref == 0 && dbmfp->fhp != NULL && --dbmfp->fhp->ref > 0)
+ dbmfp->fhp = NULL;
+ MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
+ if (ref != 0)
+ return (0);
/* Complain if pinned blocks never returned. */
if (dbmfp->pinref != 0) {
@@ -839,25 +1146,35 @@ __memp_fclose_int(dbmfp, flags)
(ret = __os_unmapfile(dbenv, dbmfp->addr, dbmfp->len)) != 0)
__db_err(dbenv, "%s: %s", __memp_fn(dbmfp), db_strerror(ret));
- /* Close the file; temporary files may not yet have been created. */
- if (F_ISSET(dbmfp->fhp, DB_FH_VALID) &&
- (t_ret = __os_closehandle(dbenv, dbmfp->fhp)) != 0) {
- __db_err(dbenv, "%s: %s", __memp_fn(dbmfp), db_strerror(t_ret));
- if (ret == 0)
- ret = t_ret;
+ /*
+ * Close the file and discard the descriptor structure; temporary
+ * files may not yet have been created.
+ */
+ if (dbmfp->fhp != NULL) {
+ if (dbmfp->fhp->mutexp != NULL) {
+ __db_mutex_free(
+ dbenv, dbmp->reginfo, dbmfp->fhp->mutexp);
+ dbmfp->fhp->mutexp = NULL;
+ }
+ if ((t_ret = __os_closehandle(dbenv, dbmfp->fhp)) != 0) {
+ __db_err(dbenv, "%s: %s",
+ __memp_fn(dbmfp), db_strerror(t_ret));
+ if (ret == 0)
+ ret = t_ret;
+ }
+ dbmfp->fhp = NULL;
}
- /* Discard the thread mutex. */
- if (dbmfp->mutexp != NULL)
- __db_mutex_free(dbenv, dbmp->reginfo, dbmfp->mutexp);
-
/*
- * Discard our reference on the the underlying MPOOLFILE, and close
- * it if it's no longer useful to anyone. It possible the open of
- * the file never happened or wasn't successful, in which case, mpf
- * will be NULL;
+ * Discard our reference on the underlying MPOOLFILE, and close it
+ * if it's no longer useful to anyone. It possible the open of the
+ * file never happened or wasn't successful, in which case, mpf will
+ * be NULL and MP_OPEN_CALLED will not be set.
*/
- if ((mfp = dbmfp->mfp) == NULL)
+ mfp = dbmfp->mfp;
+ DB_ASSERT((F_ISSET(dbmfp, MP_OPEN_CALLED) && mfp != NULL) ||
+ (!F_ISSET(dbmfp, MP_OPEN_CALLED) && mfp == NULL));
+ if (!F_ISSET(dbmfp, MP_OPEN_CALLED))
goto done;
/*
@@ -871,9 +1188,9 @@ __memp_fclose_int(dbmfp, flags)
MUTEX_LOCK(dbenv, &mfp->mutex);
if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) {
if (LF_ISSET(DB_MPOOL_DISCARD) ||
- F_ISSET(mfp, MP_TEMP | MP_UNLINK))
- MPOOLFILE_IGNORE(mfp);
- if (F_ISSET(mfp, MP_UNLINK)) {
+ F_ISSET(mfp, MP_TEMP) || mfp->unlink_on_close)
+ mfp->deadfile = 1;
+ if (mfp->unlink_on_close) {
if ((t_ret = __db_appname(dbmp->dbenv,
DB_APP_DATA, R_ADDR(dbmp->reginfo,
mfp->path_off), 0, NULL, &rpath)) != 0 && ret == 0)
@@ -895,14 +1212,50 @@ __memp_fclose_int(dbmfp, flags)
if (deleted == 0)
MUTEX_UNLOCK(dbenv, &mfp->mutex);
- /* Discard the DB_MPOOLFILE structure. */
-done: __os_free(dbenv, dbmfp->fhp);
+done: /* Discard the DB_MPOOLFILE structure. */
+ if (dbmfp->pgcookie != NULL) {
+ __os_free(dbenv, dbmfp->pgcookie->data);
+ __os_free(dbenv, dbmfp->pgcookie);
+ }
__os_free(dbenv, dbmfp);
return (ret);
}
/*
+ * __memp_mf_sync --
+ * sync an MPOOLFILE. Should only be used when
+ * the file is not already open in this process.
+ *
+ * PUBLIC: int __memp_mf_sync __P((DB_MPOOL *, MPOOLFILE *));
+ */
+int
+__memp_mf_sync(dbmp, mfp)
+ DB_MPOOL *dbmp;
+ MPOOLFILE *mfp;
+{
+ DB_ENV *dbenv;
+ DB_FH *fhp;
+ int ret, t_ret;
+ char *rpath;
+
+ dbenv = dbmp->dbenv;
+
+ if ((ret = __db_appname(dbenv, DB_APP_DATA,
+ R_ADDR(dbmp->reginfo, mfp->path_off), 0, NULL, &rpath)) == 0) {
+ if ((ret = __os_open(dbenv, rpath, 0, 0, &fhp)) == 0) {
+ ret = __os_fsync(dbenv, fhp);
+ if ((t_ret =
+ __os_closehandle(dbenv, fhp)) != 0 && ret == 0)
+ ret = t_ret;
+ }
+ __os_free(dbenv, rpath);
+ }
+
+ return (ret);
+}
+
+/*
* __memp_mf_discard --
* Discard an MPOOLFILE.
*
@@ -914,10 +1267,8 @@ __memp_mf_discard(dbmp, mfp)
MPOOLFILE *mfp;
{
DB_ENV *dbenv;
- DB_FH fh;
DB_MPOOL_STAT *sp;
MPOOL *mp;
- char *rpath;
int ret;
dbenv = dbmp->dbenv;
@@ -932,22 +1283,15 @@ __memp_mf_discard(dbmp, mfp)
* flushed to satisfy a future checkpoint, but when the checkpoint
* calls mpool sync, the sync code won't know anything about them.
*/
- if (!F_ISSET(mfp, MP_DEADFILE) &&
- (ret = __db_appname(dbenv, DB_APP_DATA,
- R_ADDR(dbmp->reginfo, mfp->path_off), 0, NULL, &rpath)) == 0) {
- if ((ret = __os_open(dbenv, rpath, 0, 0, &fh)) == 0) {
- ret = __os_fsync(dbenv, &fh);
- (void)__os_closehandle(dbenv, &fh);
- }
- __os_free(dbenv, rpath);
- }
+ if (mfp->file_written && !mfp->deadfile)
+ ret = __memp_mf_sync(dbmp, mfp);
/*
* We have to release the MPOOLFILE lock before acquiring the region
* lock so that we don't deadlock. Make sure nobody ever looks at
* this structure again.
*/
- MPOOLFILE_IGNORE(mfp);
+ mfp->deadfile = 1;
/* Discard the mutex we're holding. */
MUTEX_UNLOCK(dbenv, &mfp->mutex);
@@ -996,7 +1340,7 @@ char *
__memp_fn(dbmfp)
DB_MPOOLFILE *dbmfp;
{
- return (__memp_fns(dbmfp->dbmp, dbmfp->mfp));
+ return (__memp_fns(dbmfp->dbenv->mp_handle, dbmfp->mfp));
}
/*
diff --git a/db/mp/mp_fput.c b/db/mp/mp_fput.c
index be03b721f..7fda24e4c 100644
--- a/db/mp/mp_fput.c
+++ b/db/mp/mp_fput.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_fput.c,v 11.16 2000/11/30 00:58:41 ubell Exp $";
+static const char revid[] = "$Id: mp_fput.c,v 11.48 2003/09/30 17:12:00 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -15,46 +15,61 @@ static const char revid[] = "$Id: mp_fput.c,v 11.16 2000/11/30 00:58:41 ubell Ex
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+static void __memp_reset_lru __P((DB_ENV *, REGINFO *));
/*
- * memp_fput --
- * Mpool file put function.
+ * __memp_fput_pp --
+ * DB_MPOOLFILE->put pre/post processing.
+ *
+ * PUBLIC: int __memp_fput_pp __P((DB_MPOOLFILE *, void *, u_int32_t));
*/
int
-memp_fput(dbmfp, pgaddr, flags)
+__memp_fput_pp(dbmfp, pgaddr, flags)
DB_MPOOLFILE *dbmfp;
void *pgaddr;
u_int32_t flags;
{
- BH *bhp;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
- MPOOL *c_mp, *mp;
- int ret, wrote;
+ int ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
- mp = dbmp->reginfo[0].primary;
+ dbenv = dbmfp->dbenv;
+ PANIC_CHECK(dbenv);
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_fput(dbmfp, pgaddr, flags));
-#endif
+ ret = __memp_fput(dbmfp, pgaddr, flags);
+ if (IS_ENV_REPLICATED(dbenv))
+ __op_rep_exit(dbenv);
+ return (ret);
+}
- PANIC_CHECK(dbenv);
+/*
+ * __memp_fput --
+ * DB_MPOOLFILE->put.
+ *
+ * PUBLIC: int __memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
+ */
+int
+__memp_fput(dbmfp, pgaddr, flags)
+ DB_MPOOLFILE *dbmfp;
+ void *pgaddr;
+ u_int32_t flags;
+{
+ BH *fbhp, *bhp, *prev;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ MPOOL *c_mp;
+ u_int32_t n_cache;
+ int adjust, ret;
+
+ dbenv = dbmfp->dbenv;
+ MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->put");
+ dbmp = dbenv->mp_handle;
/* Validate arguments. */
if (flags) {
if ((ret = __db_fchk(dbenv, "memp_fput", flags,
@@ -72,16 +87,6 @@ memp_fput(dbmfp, pgaddr, flags)
}
}
- R_LOCK(dbenv, dbmp->reginfo);
-
- /* Decrement the pinned reference count. */
- if (dbmfp->pinref == 0) {
- __db_err(dbenv,
- "%s: more pages returned than retrieved", __memp_fn(dbmfp));
- R_UNLOCK(dbenv, dbmp->reginfo);
- return (EINVAL);
- } else
- --dbmfp->pinref;
/*
* If we're mapping the file, there's nothing to do. Because we can
@@ -90,97 +95,196 @@ memp_fput(dbmfp, pgaddr, flags)
* region.
*/
if (dbmfp->addr != NULL && pgaddr >= dbmfp->addr &&
- (u_int8_t *)pgaddr <= (u_int8_t *)dbmfp->addr + dbmfp->len) {
- R_UNLOCK(dbenv, dbmp->reginfo);
+ (u_int8_t *)pgaddr <= (u_int8_t *)dbmfp->addr + dbmfp->len)
return (0);
+
+#ifdef DIAGNOSTIC
+ { int ret;
+ /*
+ * Decrement the per-file pinned buffer count (mapped pages aren't
+ * counted).
+ */
+ R_LOCK(dbenv, dbmp->reginfo);
+ if (dbmfp->pinref == 0) {
+ ret = EINVAL;
+ __db_err(dbenv,
+ "%s: more pages returned than retrieved", __memp_fn(dbmfp));
+ } else {
+ ret = 0;
+ --dbmfp->pinref;
+ }
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ if (ret != 0)
+ return (ret);
}
+#endif
- /* Convert the page address to a buffer header. */
+ /* Convert a page address to a buffer header and hash bucket. */
bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ n_cache = NCACHE(dbmp->reginfo[0].primary, bhp->mf_offset, bhp->pgno);
+ c_mp = dbmp->reginfo[n_cache].primary;
+ hp = R_ADDR(&dbmp->reginfo[n_cache], c_mp->htab);
+ hp = &hp[NBUCKET(c_mp, bhp->mf_offset, bhp->pgno)];
- /* Convert the buffer header to a cache. */
- c_mp = BH_TO_CACHE(dbmp, bhp);
-
-/* UNLOCK THE REGION, LOCK THE CACHE. */
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
/* Set/clear the page bits. */
- if (LF_ISSET(DB_MPOOL_CLEAN) && F_ISSET(bhp, BH_DIRTY)) {
- ++c_mp->stat.st_page_clean;
- --c_mp->stat.st_page_dirty;
+ if (LF_ISSET(DB_MPOOL_CLEAN) &&
+ F_ISSET(bhp, BH_DIRTY) && !F_ISSET(bhp, BH_DIRTY_CREATE)) {
+ DB_ASSERT(hp->hash_page_dirty != 0);
+ --hp->hash_page_dirty;
F_CLR(bhp, BH_DIRTY);
}
if (LF_ISSET(DB_MPOOL_DIRTY) && !F_ISSET(bhp, BH_DIRTY)) {
- --c_mp->stat.st_page_clean;
- ++c_mp->stat.st_page_dirty;
+ ++hp->hash_page_dirty;
F_SET(bhp, BH_DIRTY);
}
if (LF_ISSET(DB_MPOOL_DISCARD))
F_SET(bhp, BH_DISCARD);
/*
- * If the page is dirty and being scheduled to be written as part of
- * a checkpoint, we no longer know that the log is up-to-date.
- */
- if (F_ISSET(bhp, BH_DIRTY) && F_ISSET(bhp, BH_SYNC))
- F_SET(bhp, BH_SYNC_LOGFLSH);
-
- /*
* Check for a reference count going to zero. This can happen if the
* application returns a page twice.
*/
if (bhp->ref == 0) {
__db_err(dbenv, "%s: page %lu: unpinned page returned",
__memp_fn(dbmfp), (u_long)bhp->pgno);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
return (EINVAL);
}
+ /* Note the activity so allocation won't decide to quit. */
+ ++c_mp->put_counter;
+
/*
- * If more than one reference to the page, we're done. Ignore the
- * discard flags (for now) and leave it at its position in the LRU
- * chain. The rest gets done at last reference close.
+ * If more than one reference to the page or a reference other than a
+ * thread waiting to flush the buffer to disk, we're done. Ignore the
+ * discard flags (for now) and leave the buffer's priority alone.
*/
- if (--bhp->ref > 0) {
- R_UNLOCK(dbenv, dbmp->reginfo);
+ if (--bhp->ref > 1 || (bhp->ref == 1 && !F_ISSET(bhp, BH_LOCKED))) {
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
return (0);
}
+ /* Update priority values. */
+ if (F_ISSET(bhp, BH_DISCARD) ||
+ dbmfp->mfp->priority == MPOOL_PRI_VERY_LOW)
+ bhp->priority = 0;
+ else {
+ /*
+ * We don't lock the LRU counter or the stat.st_pages field, if
+ * we get garbage (which won't happen on a 32-bit machine), it
+ * only means a buffer has the wrong priority.
+ */
+ bhp->priority = c_mp->lru_count;
+
+ adjust = 0;
+ if (dbmfp->mfp->priority != 0)
+ adjust =
+ (int)c_mp->stat.st_pages / dbmfp->mfp->priority;
+ if (F_ISSET(bhp, BH_DIRTY))
+ adjust += c_mp->stat.st_pages / MPOOL_PRI_DIRTY;
+
+ if (adjust > 0) {
+ if (UINT32_T_MAX - bhp->priority >= (u_int32_t)adjust)
+ bhp->priority += adjust;
+ } else if (adjust < 0)
+ if (bhp->priority > (u_int32_t)-adjust)
+ bhp->priority += adjust;
+ }
+
/*
- * Move the buffer to the head/tail of the LRU chain. We do this
- * before writing the buffer for checkpoint purposes, as the write
- * can discard the region lock and allow another process to acquire
- * buffer. We could keep that from happening, but there seems no
- * reason to do so.
+ * Buffers on hash buckets are sorted by priority -- move the buffer
+ * to the correct position in the list.
*/
- SH_TAILQ_REMOVE(&c_mp->bhq, bhp, q, __bh);
- if (F_ISSET(bhp, BH_DISCARD))
- SH_TAILQ_INSERT_HEAD(&c_mp->bhq, bhp, q, __bh);
+ if ((fbhp =
+ SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) ==
+ SH_TAILQ_LAST(&hp->hash_bucket, hq, __bh))
+ goto done;
+
+ if (fbhp == bhp)
+ fbhp = SH_TAILQ_NEXT(fbhp, hq, __bh);
+ SH_TAILQ_REMOVE(&hp->hash_bucket, bhp, hq, __bh);
+
+ for (prev = NULL; fbhp != NULL;
+ prev = fbhp, fbhp = SH_TAILQ_NEXT(fbhp, hq, __bh))
+ if (fbhp->priority > bhp->priority)
+ break;
+ if (prev == NULL)
+ SH_TAILQ_INSERT_HEAD(&hp->hash_bucket, bhp, hq, __bh);
else
- SH_TAILQ_INSERT_TAIL(&c_mp->bhq, bhp, q);
+ SH_TAILQ_INSERT_AFTER(&hp->hash_bucket, prev, bhp, hq, __bh);
+
+done:
+ /* Reset the hash bucket's priority. */
+ hp->hash_priority = SH_TAILQ_FIRST(&hp->hash_bucket, __bh)->priority;
+
+#ifdef DIAGNOSTIC
+ __memp_check_order(hp);
+#endif
/*
- * If this buffer is scheduled for writing because of a checkpoint, we
- * need to write it (if it's dirty), or update the checkpoint counters
- * (if it's not dirty). If we try to write it and can't, that's not
- * necessarily an error as it's not completely unreasonable that the
- * application have permission to write the underlying file, but set a
- * flag so that the next time the memp_sync function is called we try
- * writing it there, as the checkpoint thread of control better be able
- * to write all of the files.
+ * The sync code has a separate counter for buffers on which it waits.
+ * It reads that value without holding a lock so we update it as the
+ * last thing we do. Once that value goes to 0, we won't see another
+ * reference to that buffer being returned to the cache until the sync
+ * code has finished, so we're safe as long as we don't let the value
+ * go to 0 before we finish with the buffer.
*/
- if (F_ISSET(bhp, BH_SYNC)) {
- if (F_ISSET(bhp, BH_DIRTY)) {
- if (__memp_bhwrite(dbmp,
- dbmfp->mfp, bhp, NULL, &wrote) != 0 || !wrote)
- F_SET(mp, MP_LSN_RETRY);
- } else {
- F_CLR(bhp, BH_SYNC);
-
- --mp->lsn_cnt;
- --dbmfp->mfp->lsn_cnt;
- }
- }
+ if (F_ISSET(bhp, BH_LOCKED) && bhp->ref_sync != 0)
+ --bhp->ref_sync;
+
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+
+ /*
+ * On every buffer put we update the buffer generation number and check
+ * for wraparound.
+ */
+ if (++c_mp->lru_count == UINT32_T_MAX)
+ __memp_reset_lru(dbenv, dbmp->reginfo);
- R_UNLOCK(dbenv, dbmp->reginfo);
return (0);
}
+
+/*
+ * __memp_reset_lru --
+ * Reset the cache LRU counter.
+ */
+static void
+__memp_reset_lru(dbenv, memreg)
+ DB_ENV *dbenv;
+ REGINFO *memreg;
+{
+ BH *bhp;
+ DB_MPOOL_HASH *hp;
+ MPOOL *c_mp;
+ int bucket;
+
+ c_mp = memreg->primary;
+
+ /*
+ * Update the counter so all future allocations will start at the
+ * bottom.
+ */
+ c_mp->lru_count -= MPOOL_BASE_DECREMENT;
+
+ /* Adjust the priority of every buffer in the system. */
+ for (hp = R_ADDR(memreg, c_mp->htab),
+ bucket = 0; bucket < c_mp->htab_buckets; ++hp, ++bucket) {
+ /*
+ * Skip empty buckets.
+ *
+ * We can check for empty buckets before locking as we
+ * only care if the pointer is zero or non-zero.
+ */
+ if (SH_TAILQ_FIRST(&hp->hash_bucket, __bh) == NULL)
+ continue;
+
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ for (bhp = SH_TAILQ_FIRST(&hp->hash_bucket, __bh);
+ bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
+ if (bhp->priority != UINT32_T_MAX &&
+ bhp->priority > MPOOL_BASE_DECREMENT)
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
+ }
+}
diff --git a/db/mp/mp_fset.c b/db/mp/mp_fset.c
index 08313c9b6..b10ea4f08 100644
--- a/db/mp/mp_fset.c
+++ b/db/mp/mp_fset.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_fset.c,v 11.13 2000/11/30 00:58:41 ubell Exp $";
+static const char revid[] = "$Id: mp_fset.c,v 11.30 2003/09/13 19:26:21 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -15,52 +15,37 @@ static const char revid[] = "$Id: mp_fset.c,v 11.13 2000/11/30 00:58:41 ubell Ex
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
/*
- * memp_fset --
- * Mpool page set-flag routine.
+ * __memp_fset_pp --
+ * DB_MPOOLFILE->set pre/post processing.
+ *
+ * PUBLIC: int __memp_fset_pp __P((DB_MPOOLFILE *, void *, u_int32_t));
*/
int
-memp_fset(dbmfp, pgaddr, flags)
+__memp_fset_pp(dbmfp, pgaddr, flags)
DB_MPOOLFILE *dbmfp;
void *pgaddr;
u_int32_t flags;
{
- BH *bhp;
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
- MPOOL *c_mp, *mp;
- int ret;
-
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
- mp = dbmp->reginfo[0].primary;
+ int rep_check, ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_fset(dbmfp, pgaddr, flags));
-#endif
+ dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
+ MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->set");
/* Validate arguments. */
if (flags == 0)
return (__db_ferr(dbenv, "memp_fset", 1));
if ((ret = __db_fchk(dbenv, "memp_fset", flags,
- DB_MPOOL_DIRTY | DB_MPOOL_CLEAN | DB_MPOOL_DISCARD)) != 0)
+ DB_MPOOL_CLEAN | DB_MPOOL_DIRTY | DB_MPOOL_DISCARD)) != 0)
return (ret);
if ((ret = __db_fcchk(dbenv, "memp_fset",
flags, DB_MPOOL_CLEAN, DB_MPOOL_DIRTY)) != 0)
@@ -72,27 +57,60 @@ memp_fset(dbmfp, pgaddr, flags)
return (EACCES);
}
- /* Convert the page address to a buffer header. */
- bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_fset(dbmfp, pgaddr, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
- /* Convert the buffer header to a cache. */
- c_mp = BH_TO_CACHE(dbmp, bhp);
+/*
+ * __memp_fset --
+ * DB_MPOOLFILE->set.
+ *
+ * PUBLIC: int __memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
+ */
+int
+__memp_fset(dbmfp, pgaddr, flags)
+ DB_MPOOLFILE *dbmfp;
+ void *pgaddr;
+ u_int32_t flags;
+{
+ BH *bhp;
+ DB_ENV *dbenv;
+ DB_MPOOL *dbmp;
+ DB_MPOOL_HASH *hp;
+ MPOOL *c_mp;
+ u_int32_t n_cache;
- R_LOCK(dbenv, dbmp->reginfo);
+ dbenv = dbmfp->dbenv;
+ dbmp = dbenv->mp_handle;
- if (LF_ISSET(DB_MPOOL_CLEAN) && F_ISSET(bhp, BH_DIRTY)) {
- ++c_mp->stat.st_page_clean;
- --c_mp->stat.st_page_dirty;
+ /* Convert the page address to a buffer header and hash bucket. */
+ bhp = (BH *)((u_int8_t *)pgaddr - SSZA(BH, buf));
+ n_cache = NCACHE(dbmp->reginfo[0].primary, bhp->mf_offset, bhp->pgno);
+ c_mp = dbmp->reginfo[n_cache].primary;
+ hp = R_ADDR(&dbmp->reginfo[n_cache], c_mp->htab);
+ hp = &hp[NBUCKET(c_mp, bhp->mf_offset, bhp->pgno)];
+
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
+
+ /* Set/clear the page bits. */
+ if (LF_ISSET(DB_MPOOL_CLEAN) &&
+ F_ISSET(bhp, BH_DIRTY) && !F_ISSET(bhp, BH_DIRTY_CREATE)) {
+ DB_ASSERT(hp->hash_page_dirty != 0);
+ --hp->hash_page_dirty;
F_CLR(bhp, BH_DIRTY);
}
if (LF_ISSET(DB_MPOOL_DIRTY) && !F_ISSET(bhp, BH_DIRTY)) {
- --c_mp->stat.st_page_clean;
- ++c_mp->stat.st_page_dirty;
+ ++hp->hash_page_dirty;
F_SET(bhp, BH_DIRTY);
}
if (LF_ISSET(DB_MPOOL_DISCARD))
F_SET(bhp, BH_DISCARD);
- R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
return (0);
}
diff --git a/db/mp/mp_method.c b/db/mp/mp_method.c
index 85a6239b0..5f7c66a4c 100644
--- a/db/mp/mp_method.c
+++ b/db/mp/mp_method.c
@@ -1,34 +1,36 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_method.c,v 11.10 2000/04/04 20:12:04 bostic Exp $";
+static const char revid[] = "$Id: mp_method.c,v 11.40 2003/06/30 17:20:19 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
-#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
+#ifdef HAVE_RPC
+#include <rpc/rpc.h>
+#endif
+#include <string.h>
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/mp.h"
#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
#endif
-static int __memp_set_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
-static int __memp_set_mp_mmapsize __P((DB_ENV *, size_t));
+static int __memp_get_mp_maxwrite __P((DB_ENV *, int *, int *));
+static int __memp_set_mp_maxwrite __P((DB_ENV *, int, int));
+static int __memp_get_mp_mmapsize __P((DB_ENV *, size_t *));
/*
* __memp_dbenv_create --
@@ -41,75 +43,329 @@ __memp_dbenv_create(dbenv)
DB_ENV *dbenv;
{
/*
+ * !!!
+ * Our caller has not yet had the opportunity to reset the panic
+ * state or turn off mutex locking, and so we can neither check
+ * the panic state or acquire a mutex in the DB_ENV create path.
+ *
* We default to 32 8K pages. We don't default to a flat 256K, because
* some systems require significantly more memory to hold 32 pages than
* others. For example, HP-UX with POSIX pthreads needs 88 bytes for
* a POSIX pthread mutex and almost 200 bytes per buffer header, while
- * Solaris needs 24 and 52 bytes for the same structures.
+ * Solaris needs 24 and 52 bytes for the same structures. The minimum
+ * number of hash buckets is 37. These contain a mutex also.
*/
- dbenv->mp_bytes = 32 * ((8 * 1024) + sizeof(BH));
+ dbenv->mp_bytes =
+ 32 * ((8 * 1024) + sizeof(BH)) + 37 * sizeof(DB_MPOOL_HASH);
dbenv->mp_ncache = 1;
- dbenv->set_mp_mmapsize = __memp_set_mp_mmapsize;
- dbenv->set_cachesize = __memp_set_cachesize;
-
-#ifdef HAVE_RPC
- /*
- * If we have a client, overwrite what we just setup to
- * point to client functions.
- */
+#ifdef HAVE_RPC
if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ dbenv->get_cachesize = __dbcl_env_get_cachesize;
dbenv->set_cachesize = __dbcl_env_cachesize;
+ dbenv->get_mp_maxwrite = __dbcl_get_mp_maxwrite;
+ dbenv->set_mp_maxwrite = __dbcl_set_mp_maxwrite;
+ dbenv->get_mp_mmapsize = __dbcl_get_mp_mmapsize;
dbenv->set_mp_mmapsize = __dbcl_set_mp_mmapsize;
- }
+ dbenv->memp_dump_region = NULL;
+ dbenv->memp_register = __dbcl_memp_register;
+ dbenv->memp_stat = __dbcl_memp_stat;
+ dbenv->memp_sync = __dbcl_memp_sync;
+ dbenv->memp_trickle = __dbcl_memp_trickle;
+ } else
#endif
+ {
+ dbenv->get_cachesize = __memp_get_cachesize;
+ dbenv->set_cachesize = __memp_set_cachesize;
+ dbenv->get_mp_maxwrite = __memp_get_mp_maxwrite;
+ dbenv->set_mp_maxwrite = __memp_set_mp_maxwrite;
+ dbenv->get_mp_mmapsize = __memp_get_mp_mmapsize;
+ dbenv->set_mp_mmapsize = __memp_set_mp_mmapsize;
+ dbenv->memp_dump_region = __memp_dump_region;
+ dbenv->memp_register = __memp_register_pp;
+ dbenv->memp_stat = __memp_stat_pp;
+ dbenv->memp_sync = __memp_sync_pp;
+ dbenv->memp_trickle = __memp_trickle_pp;
+ }
+ dbenv->memp_fcreate = __memp_fcreate_pp;
+}
+/*
+ * __memp_get_cachesize --
+ * {DB_ENV,DB}->get_cachesize.
+ *
+ * PUBLIC: int __memp_get_cachesize
+ * PUBLIC: __P((DB_ENV *, u_int32_t *, u_int32_t *, int *));
+ */
+int
+__memp_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
+ DB_ENV *dbenv;
+ u_int32_t *gbytesp, *bytesp;
+ int *ncachep;
+{
+ if (gbytesp != NULL)
+ *gbytesp = dbenv->mp_gbytes;
+ if (bytesp != NULL)
+ *bytesp = dbenv->mp_bytes;
+ if (ncachep != NULL)
+ *ncachep = dbenv->mp_ncache;
+ return (0);
}
/*
* __memp_set_cachesize --
- * Initialize the cache size.
+ * {DB_ENV,DB}->set_cachesize.
+ *
+ * PUBLIC: int __memp_set_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
*/
-static int
+int
__memp_set_cachesize(dbenv, gbytes, bytes, ncache)
DB_ENV *dbenv;
u_int32_t gbytes, bytes;
int ncache;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_cachesize");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_cachesize");
- dbenv->mp_gbytes = gbytes + bytes / GIGABYTE;
- dbenv->mp_bytes = bytes % GIGABYTE;
- dbenv->mp_ncache = ncache == 0 ? 1 : ncache;
+ /* Normalize the values. */
+ if (ncache == 0)
+ ncache = 1;
/*
- * If the application requested less than 500Mb, increase the
- * cachesize by 25% to account for our overhead. (I'm guessing
- * that caches over 500Mb are specifically sized, i.e., it's
- * a large server and the application actually knows how much
- * memory is available.)
+ * You can only store 4GB-1 in an unsigned 32-bit value, so correct for
+ * applications that specify 4GB cache sizes -- we know what they meant.
+ */
+ if (gbytes / ncache == 4 && bytes == 0) {
+ --gbytes;
+ bytes = GIGABYTE - 1;
+ } else {
+ gbytes += bytes / GIGABYTE;
+ bytes %= GIGABYTE;
+ }
+
+ /* Avoid too-large cache sizes, they result in a region size of zero. */
+ if (gbytes / ncache > 4 || (gbytes / ncache == 4 && bytes != 0)) {
+ __db_err(dbenv, "individual cache size too large");
+ return (EINVAL);
+ }
+
+ /*
+ * If the application requested less than 500Mb, increase the cachesize
+ * by 25% and factor in the size of the hash buckets to account for our
+ * overhead. (I'm guessing caches over 500Mb are specifically sized,
+ * that is, it's a large server and the application actually knows how
+ * much memory is available. We only document the 25% overhead number,
+ * not the hash buckets, but I don't see a reason to confuse the issue,
+ * it shouldn't matter to an application.)
*
* There is a minimum cache size, regardless.
*/
- if (dbenv->mp_gbytes == 0) {
- if (dbenv->mp_bytes < 500 * MEGABYTE)
- dbenv->mp_bytes += dbenv->mp_bytes / 4;
- if (dbenv->mp_bytes < DB_CACHESIZE_MIN)
- dbenv->mp_bytes = DB_CACHESIZE_MIN;
+ if (gbytes == 0) {
+ if (bytes < 500 * MEGABYTE)
+ bytes += (bytes / 4) + 37 * sizeof(DB_MPOOL_HASH);
+ if (bytes / ncache < DB_CACHESIZE_MIN)
+ bytes = ncache * DB_CACHESIZE_MIN;
}
+ dbenv->mp_gbytes = gbytes;
+ dbenv->mp_bytes = bytes;
+ dbenv->mp_ncache = ncache;
+
+ return (0);
+}
+
+static int
+__memp_get_mp_maxwrite(dbenv, maxwritep, maxwrite_sleepp)
+ DB_ENV *dbenv;
+ int *maxwritep, *maxwrite_sleepp;
+{
+ *maxwritep = dbenv->mp_maxwrite;
+ *maxwrite_sleepp = dbenv->mp_maxwrite_sleep;
return (0);
}
/*
- * __memp_set_mp_mmapsize --
- * Set the maximum mapped file size.
+ * __memp_set_mp_maxwrite --
+ * Set the maximum continuous I/O count.
*/
static int
-__memp_set_mp_mmapsize(dbenv, mp_mmapsize )
+__memp_set_mp_maxwrite(dbenv, maxwrite, maxwrite_sleep)
+ DB_ENV *dbenv;
+ int maxwrite, maxwrite_sleep;
+{
+ dbenv->mp_maxwrite = maxwrite;
+ dbenv->mp_maxwrite_sleep = maxwrite_sleep;
+ return (0);
+}
+
+static int
+__memp_get_mp_mmapsize(dbenv, mp_mmapsizep)
+ DB_ENV *dbenv;
+ size_t *mp_mmapsizep;
+{
+ *mp_mmapsizep = dbenv->mp_mmapsize;
+ return (0);
+}
+
+/*
+ * __memp_set_mp_mmapsize --
+ * DB_ENV->set_mp_mmapsize.
+ *
+ * PUBLIC: int __memp_set_mp_mmapsize __P((DB_ENV *, size_t));
+ */
+int
+__memp_set_mp_mmapsize(dbenv, mp_mmapsize)
DB_ENV *dbenv;
size_t mp_mmapsize;
{
dbenv->mp_mmapsize = mp_mmapsize;
return (0);
}
+
+/*
+ * __memp_nameop
+ * Remove or rename a file in the pool.
+ *
+ * PUBLIC: int __memp_nameop __P((DB_ENV *,
+ * PUBLIC: u_int8_t *, const char *, const char *, const char *));
+ *
+ * XXX
+ * Undocumented interface: DB private.
+ */
+int
+__memp_nameop(dbenv, fileid, newname, fullold, fullnew)
+ DB_ENV *dbenv;
+ u_int8_t *fileid;
+ const char *newname, *fullold, *fullnew;
+{
+ DB_MPOOL *dbmp;
+ MPOOL *mp;
+ MPOOLFILE *mfp;
+ roff_t newname_off;
+ int locked, ret;
+ void *p;
+
+ locked = 0;
+ dbmp = NULL;
+
+ if (!MPOOL_ON(dbenv))
+ goto fsop;
+
+ dbmp = dbenv->mp_handle;
+ mp = dbmp->reginfo[0].primary;
+
+ /*
+ * Remove or rename a file that the mpool might know about. We assume
+ * that the fop layer has the file locked for exclusive access, so we
+ * don't worry about locking except for the mpool mutexes. Checkpoint
+ * can happen at any time, independent of file locking, so we have to
+ * do the actual unlink or rename system call to avoid any race.
+ *
+ * If this is a rename, allocate first, because we can't recursively
+ * grab the region lock.
+ */
+ if (newname == NULL)
+ p = NULL;
+ else {
+ if ((ret = __memp_alloc(dbmp, dbmp->reginfo,
+ NULL, strlen(newname) + 1, &newname_off, &p)) != 0)
+ return (ret);
+ memcpy(p, newname, strlen(newname) + 1);
+ }
+
+ locked = 1;
+ R_LOCK(dbenv, dbmp->reginfo);
+
+ /*
+ * Find the file -- if mpool doesn't know about this file, that's not
+ * an error-- we may not have it open.
+ */
+ for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
+ mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
+ /* Ignore non-active files. */
+ if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
+ continue;
+
+ /* Ignore non-matching files. */
+ if (memcmp(fileid, R_ADDR(
+ dbmp->reginfo, mfp->fileid_off), DB_FILE_ID_LEN) != 0)
+ continue;
+
+ /* If newname is NULL, we're removing the file. */
+ if (newname == NULL) {
+ MUTEX_LOCK(dbenv, &mfp->mutex);
+ mfp->deadfile = 1;
+ MUTEX_UNLOCK(dbenv, &mfp->mutex);
+ } else {
+ /*
+ * Else, it's a rename. We've allocated memory
+ * for the new name. Swap it with the old one.
+ */
+ p = R_ADDR(dbmp->reginfo, mfp->path_off);
+ mfp->path_off = newname_off;
+ }
+ break;
+ }
+
+ /* Delete the memory we no longer need. */
+ if (p != NULL)
+ __db_shalloc_free(dbmp->reginfo[0].addr, p);
+
+fsop: if (newname == NULL)
+ ret = __os_unlink(dbenv, fullold);
+ else
+ ret = __os_rename(dbenv, fullold, fullnew, 1);
+
+ if (locked)
+ R_UNLOCK(dbenv, dbmp->reginfo);
+
+ return (ret);
+}
+
+/*
+ * __memp_get_refcnt
+ * Return a reference count, given a fileid.
+ *
+ * PUBLIC: int __memp_get_refcnt __P((DB_ENV *, u_int8_t *, int *));
+ */
+int
+__memp_get_refcnt(dbenv, fileid, refp)
+ DB_ENV *dbenv;
+ u_int8_t *fileid;
+ int *refp;
+{
+ DB_MPOOL *dbmp;
+ MPOOL *mp;
+ MPOOLFILE *mfp;
+
+ *refp = 0;
+
+ if (!MPOOL_ON(dbenv))
+ return (0);
+
+ dbmp = dbenv->mp_handle;
+ mp = dbmp->reginfo[0].primary;
+
+ R_LOCK(dbenv, dbmp->reginfo);
+ /*
+ * Find the file -- if mpool doesn't know about this file, the
+ * reference count is 0.
+ */
+ for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
+ mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
+
+ /* Ignore non-active files. */
+ if (mfp->deadfile || F_ISSET(mfp, MP_TEMP))
+ continue;
+
+ /* Ignore non-matching files. */
+ if (memcmp(fileid, R_ADDR(
+ dbmp->reginfo, mfp->fileid_off), DB_FILE_ID_LEN) != 0)
+ continue;
+
+ *refp = mfp->mpf_cnt;
+ break;
+ }
+ R_UNLOCK(dbenv, dbmp->reginfo);
+
+ return (0);
+}
diff --git a/db/mp/mp_region.c b/db/mp/mp_region.c
index 4b85466ce..d16d580cb 100644
--- a/db/mp/mp_region.c
+++ b/db/mp/mp_region.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_region.c,v 11.26 2000/11/30 00:58:41 ubell Exp $";
+static const char revid[] = "$Id: mp_region.c,v 11.55 2003/06/30 17:20:19 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,11 +17,11 @@ static const char revid[] = "$Id: mp_region.c,v 11.26 2000/11/30 00:58:41 ubell
#endif
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/mp.h"
static int __mpool_init __P((DB_ENV *, DB_MPOOL *, int, int));
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
static size_t __mpool_region_maint __P((REGINFO *));
#endif
@@ -119,6 +119,8 @@ __memp_open(dbenv)
regids[i] = dbmp->reginfo[i].id;
}
+
+ R_UNLOCK(dbenv, dbmp->reginfo);
} else {
/*
* Determine how many regions there are going to be, allocate
@@ -135,6 +137,19 @@ __memp_open(dbenv)
dbmp->reginfo[i].id = INVALID_REGION_ID;
dbmp->reginfo[0] = reginfo;
+ /*
+ * We have to unlock the primary mpool region before we attempt
+ * to join the additional mpool regions. If we don't, we can
+ * deadlock. The scenario is that we hold the primary mpool
+ * region lock. We then try to attach to an additional mpool
+ * region, which requires the acquisition/release of the main
+ * region lock (to search the list of regions). If another
+ * thread of control already holds the main region lock and is
+ * waiting on our primary mpool region lock, we'll deadlock.
+ * See [#4696] for more information.
+ */
+ R_UNLOCK(dbenv, dbmp->reginfo);
+
/* Join remaining regions. */
regids = R_ADDR(dbmp->reginfo, mp->regids);
for (i = 1; i < dbmp->nreg; ++i) {
@@ -155,17 +170,10 @@ __memp_open(dbenv)
R_ADDR(&dbmp->reginfo[i], dbmp->reginfo[i].rp->primary);
/* If the region is threaded, allocate a mutex to lock the handles. */
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- if ((ret = __db_mutex_alloc(
- dbenv, dbmp->reginfo, &dbmp->mutexp)) != 0) {
- goto err;
- }
- if ((ret =
- __db_mutex_init(dbenv, dbmp->mutexp, 0, MUTEX_THREAD)) != 0)
- goto err;
- }
-
- R_UNLOCK(dbenv, dbmp->reginfo);
+ if (F_ISSET(dbenv, DB_ENV_THREAD) &&
+ (ret = __db_mutex_setup(dbenv, dbmp->reginfo, &dbmp->mutexp,
+ MUTEX_ALLOC | MUTEX_THREAD)) != 0)
+ goto err;
dbenv->mp_handle = dbmp;
return (0);
@@ -180,12 +188,11 @@ err: if (dbmp->reginfo != NULL && dbmp->reginfo[0].addr != NULL) {
if (dbmp->reginfo[i].id != INVALID_REGION_ID)
(void)__db_r_detach(
dbenv, &dbmp->reginfo[i], 0);
- __os_free(dbmp->reginfo,
- dbmp->nreg * sizeof(*dbmp->reginfo));
+ __os_free(dbenv, dbmp->reginfo);
}
if (dbmp->mutexp != NULL)
__db_mutex_free(dbenv, dbmp->reginfo, dbmp->mutexp);
- __os_free(dbmp, sizeof(*dbmp));
+ __os_free(dbenv, dbmp);
return (ret);
}
@@ -199,13 +206,13 @@ __mpool_init(dbenv, dbmp, reginfo_off, htab_buckets)
DB_MPOOL *dbmp;
int reginfo_off, htab_buckets;
{
- DB_HASHTAB *htab;
+ DB_MPOOL_HASH *htab;
MPOOL *mp;
REGINFO *reginfo;
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
size_t maint_size;
#endif
- int ret;
+ int i, ret;
void *p;
mp = NULL;
@@ -218,7 +225,7 @@ __mpool_init(dbenv, dbmp, reginfo_off, htab_buckets)
mp = reginfo->primary;
memset(mp, 0, sizeof(*mp));
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
maint_size = __mpool_region_maint(reginfo);
/* Allocate room for the maintenance info and initialize it. */
if ((ret = __db_shalloc(reginfo->addr,
@@ -231,14 +238,7 @@ __mpool_init(dbenv, dbmp, reginfo_off, htab_buckets)
if (reginfo_off == 0) {
SH_TAILQ_INIT(&mp->mpfq);
- if ((ret = __db_shmutex_init(dbenv, &mp->sync_mutex,
- R_OFFSET(dbmp->reginfo, &mp->sync_mutex) +
- DB_FCNTL_OFF_MPOOL, 0, dbmp->reginfo,
- (REGMAINT *)R_ADDR(dbmp->reginfo, mp->maint_off))) != 0)
- goto err;
-
ZERO_LSN(mp->lsn);
- mp->lsn_cnt = 0;
mp->nreg = dbmp->nreg;
if ((ret = __db_shalloc(dbmp->reginfo[0].addr,
@@ -247,32 +247,41 @@ __mpool_init(dbenv, dbmp, reginfo_off, htab_buckets)
mp->regids = R_OFFSET(dbmp->reginfo, p);
}
- SH_TAILQ_INIT(&mp->bhq);
-
/* Allocate hash table space and initialize it. */
if ((ret = __db_shalloc(reginfo->addr,
- htab_buckets * sizeof(DB_HASHTAB), 0, &htab)) != 0)
+ htab_buckets * sizeof(DB_MPOOL_HASH), 0, &htab)) != 0)
goto mem_err;
- __db_hashinit(htab, htab_buckets);
mp->htab = R_OFFSET(reginfo, htab);
- mp->htab_buckets = htab_buckets;
+ for (i = 0; i < htab_buckets; i++) {
+ if ((ret = __db_mutex_setup(dbenv,
+ reginfo, &htab[i].hash_mutex,
+ MUTEX_NO_RLOCK)) != 0)
+ return (ret);
+ SH_TAILQ_INIT(&htab[i].hash_bucket);
+ htab[i].hash_page_dirty = htab[i].hash_priority = 0;
+ }
+ mp->htab_buckets = mp->stat.st_hash_buckets = htab_buckets;
+ /*
+ * Only the environment creator knows the total cache size, fill in
+ * those statistics now.
+ */
+ mp->stat.st_gbytes = dbenv->mp_gbytes;
+ mp->stat.st_bytes = dbenv->mp_bytes;
return (0);
mem_err:__db_err(dbenv, "Unable to allocate memory for mpool region");
-err: if (reginfo->primary != NULL)
- __db_shalloc_free(reginfo->addr, reginfo->primary);
return (ret);
}
/*
- * __memp_close --
- * Internal version of memp_close: only called from DB_ENV->close.
+ * __memp_dbenv_refresh --
+ * Clean up after the mpool system on a close or failed open.
*
- * PUBLIC: int __memp_close __P((DB_ENV *));
+ * PUBLIC: int __memp_dbenv_refresh __P((DB_ENV *));
*/
int
-__memp_close(dbenv)
+__memp_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
DB_MPOOL *dbmp;
@@ -287,12 +296,12 @@ __memp_close(dbenv)
/* Discard DB_MPREGs. */
while ((mpreg = LIST_FIRST(&dbmp->dbregq)) != NULL) {
LIST_REMOVE(mpreg, q);
- __os_free(mpreg, sizeof(DB_MPREG));
+ __os_free(dbenv, mpreg);
}
/* Discard DB_MPOOLFILEs. */
while ((dbmfp = TAILQ_FIRST(&dbmp->dbmfq)) != NULL)
- if ((t_ret = memp_fclose(dbmfp)) != 0 && ret == 0)
+ if ((t_ret = __memp_fclose(dbmfp, 0)) != 0 && ret == 0)
ret = t_ret;
/* Discard the thread mutex. */
@@ -305,14 +314,14 @@ __memp_close(dbenv)
dbenv, &dbmp->reginfo[i], 0)) != 0 && ret == 0)
ret = t_ret;
- __os_free(dbmp->reginfo, dbmp->nreg * sizeof(*dbmp->reginfo));
- __os_free(dbmp, sizeof(*dbmp));
+ __os_free(dbenv, dbmp->reginfo);
+ __os_free(dbenv, dbmp);
dbenv->mp_handle = NULL;
return (ret);
}
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
/*
* __mpool_region_maint --
* Return the amount of space needed for region maintenance info.
@@ -328,9 +337,11 @@ __mpool_region_maint(infop)
/*
* For mutex maintenance we need one mutex per possible page.
* Compute the maximum number of pages this cache can have.
- * Also add in an mpool mutex.
+ * Also add in an mpool mutex and mutexes for all dbenv and db
+ * handles.
*/
numlocks = ((infop->rp->size / DB_MIN_PGSIZE) + 1);
+ numlocks += DB_MAX_HANDLES;
s = sizeof(roff_t) * numlocks;
return (s);
}
@@ -347,11 +358,9 @@ __mpool_region_destroy(dbenv, infop)
DB_ENV *dbenv;
REGINFO *infop;
{
- MPOOL *mp;
+ __db_shlocks_destroy(infop, (REGMAINT *)R_ADDR(infop,
+ ((MPOOL *)R_ADDR(infop, infop->rp->primary))->maint_off));
COMPQUIET(dbenv, NULL);
- mp = R_ADDR(infop, infop->rp->primary);
-
- __db_shlocks_destroy(infop, (REGMAINT *)R_ADDR(infop, mp->maint_off));
- return;
+ COMPQUIET(infop, NULL);
}
diff --git a/db/mp/mp_register.c b/db/mp/mp_register.c
index 27859f69d..aa678a1e6 100644
--- a/db/mp/mp_register.c
+++ b/db/mp/mp_register.c
@@ -1,38 +1,64 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_register.c,v 11.12 2000/11/15 19:25:39 sue Exp $";
+static const char revid[] = "$Id: mp_register.c,v 11.24 2003/09/13 19:20:40 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+/*
+ * memp_register_pp --
+ * DB_ENV->memp_register pre/post processing.
+ *
+ * PUBLIC: int __memp_register_pp __P((DB_ENV *, int,
+ * PUBLIC: int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
+ * PUBLIC: int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
+ */
+int
+__memp_register_pp(dbenv, ftype, pgin, pgout)
+ DB_ENV *dbenv;
+ int ftype;
+ int (*pgin) __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ int (*pgout) __P((DB_ENV *, db_pgno_t, void *, DBT *));
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->mp_handle, "DB_ENV->memp_register", DB_INIT_MPOOL);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_register(dbenv, ftype, pgin, pgout);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
/*
* memp_register --
- * Register a file type's pgin, pgout routines.
+ * DB_ENV->memp_register.
+ *
+ * PUBLIC: int __memp_register __P((DB_ENV *, int,
+ * PUBLIC: int (*)(DB_ENV *, db_pgno_t, void *, DBT *),
+ * PUBLIC: int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
*/
int
-memp_register(dbenv, ftype, pgin, pgout)
+__memp_register(dbenv, ftype, pgin, pgout)
DB_ENV *dbenv;
int ftype;
int (*pgin) __P((DB_ENV *, db_pgno_t, void *, DBT *));
@@ -42,14 +68,6 @@ memp_register(dbenv, ftype, pgin, pgout)
DB_MPREG *mpreg;
int ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_register(dbenv, ftype, pgin, pgout));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->mp_handle, DB_INIT_MPOOL);
-
dbmp = dbenv->mp_handle;
/*
@@ -70,7 +88,7 @@ memp_register(dbenv, ftype, pgin, pgout)
return (0);
/* New entry. */
- if ((ret = __os_malloc(dbenv, sizeof(DB_MPREG), NULL, &mpreg)) != 0)
+ if ((ret = __os_malloc(dbenv, sizeof(DB_MPREG), &mpreg)) != 0)
return (ret);
mpreg->ftype = ftype;
diff --git a/db/mp/mp_stat.c b/db/mp/mp_stat.c
index 798251344..bb1a41eb9 100644
--- a/db/mp/mp_stat.c
+++ b/db/mp/mp_stat.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_stat.c,v 11.21 2001/01/09 16:59:30 bostic Exp $";
+static const char revid[] = "$Id: mp_stat.c,v 11.58 2003/09/13 19:20:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -15,126 +15,180 @@ static const char revid[] = "$Id: mp_stat.c,v 11.21 2001/01/09 16:59:30 bostic E
#include <stdio.h>
#include <string.h>
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_RPC
-#include "db_server.h"
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_am.h"
-#include "mp.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
-
-static void __memp_dumpcache
- __P((DB_MPOOL *, REGINFO *, size_t *, FILE *, u_int32_t));
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+
+static void __memp_dumpcache __P((DB_ENV *,
+ DB_MPOOL *, REGINFO *, size_t *, FILE *, u_int32_t));
static void __memp_pbh __P((DB_MPOOL *, BH *, size_t *, FILE *));
+static int __memp_stat __P((DB_ENV *,
+ DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
+static void __memp_stat_wait __P((REGINFO *, MPOOL *, DB_MPOOL_STAT *, int));
/*
- * memp_stat --
- * Display MPOOL statistics.
+ * __memp_stat_pp --
+ * DB_ENV->memp_stat pre/post processing.
+ *
+ * PUBLIC: int __memp_stat_pp
+ * PUBLIC: __P((DB_ENV *, DB_MPOOL_STAT **, DB_MPOOL_FSTAT ***, u_int32_t));
*/
int
-memp_stat(dbenv, gspp, fspp, db_malloc)
+__memp_stat_pp(dbenv, gspp, fspp, flags)
DB_ENV *dbenv;
DB_MPOOL_STAT **gspp;
DB_MPOOL_FSTAT ***fspp;
- void *(*db_malloc) __P((size_t));
+ u_int32_t flags;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->mp_handle, "memp_stat", DB_INIT_MPOOL);
+
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->memp_stat", flags, DB_STAT_CLEAR)) != 0)
+ return (ret);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_stat(dbenv, gspp, fspp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __memp_stat --
+ * DB_ENV->memp_stat.
+ */
+static int
+__memp_stat(dbenv, gspp, fspp, flags)
+ DB_ENV *dbenv;
+ DB_MPOOL_STAT **gspp;
+ DB_MPOOL_FSTAT ***fspp;
+ u_int32_t flags;
{
DB_MPOOL *dbmp;
DB_MPOOL_FSTAT **tfsp, *tstruct;
DB_MPOOL_STAT *sp;
MPOOL *c_mp, *mp;
MPOOLFILE *mfp;
- char *tname;
- size_t len, nlen;
- u_int32_t i;
+ size_t len, nlen, pagesize;
+ u_int32_t pages, i;
int ret;
- char *name;
-
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_stat(dbenv, gspp, fspp, db_malloc));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->mp_handle, DB_INIT_MPOOL);
+ char *name, *tname;
dbmp = dbenv->mp_handle;
- sp = NULL;
+ mp = dbmp->reginfo[0].primary;
/* Global statistics. */
- mp = dbmp->reginfo[0].primary;
if (gspp != NULL) {
*gspp = NULL;
- if ((ret = __os_calloc(dbenv, 1, sizeof(**gspp), gspp)) != 0)
+ if ((ret = __os_umalloc(dbenv, sizeof(**gspp), gspp)) != 0)
return (ret);
+ memset(*gspp, 0, sizeof(**gspp));
sp = *gspp;
/*
* Initialization and information that is not maintained on
* a per-cache basis.
*/
- sp->st_hash_longest = 0;
- sp->st_region_wait = dbmp->reginfo[0].rp->mutex.mutex_set_wait;
- sp->st_region_nowait =
- dbmp->reginfo[0].rp->mutex.mutex_set_nowait;
- sp->st_gbytes = dbenv->mp_gbytes;
- sp->st_bytes = dbenv->mp_bytes;
+ c_mp = dbmp->reginfo[0].primary;
+ sp->st_gbytes = c_mp->stat.st_gbytes;
+ sp->st_bytes = c_mp->stat.st_bytes;
sp->st_ncache = dbmp->nreg;
sp->st_regsize = dbmp->reginfo[0].rp->size;
- R_LOCK(dbenv, dbmp->reginfo);
-
/* Walk the cache list and accumulate the global information. */
for (i = 0; i < mp->nreg; ++i) {
c_mp = dbmp->reginfo[i].primary;
+
+ sp->st_map += c_mp->stat.st_map;
sp->st_cache_hit += c_mp->stat.st_cache_hit;
sp->st_cache_miss += c_mp->stat.st_cache_miss;
- sp->st_map += c_mp->stat.st_map;
sp->st_page_create += c_mp->stat.st_page_create;
sp->st_page_in += c_mp->stat.st_page_in;
sp->st_page_out += c_mp->stat.st_page_out;
sp->st_ro_evict += c_mp->stat.st_ro_evict;
sp->st_rw_evict += c_mp->stat.st_rw_evict;
+ sp->st_page_trickle += c_mp->stat.st_page_trickle;
+ sp->st_pages += c_mp->stat.st_pages;
+ /*
+ * st_page_dirty calculated by __memp_stat_hash
+ * st_page_clean calculated here
+ */
+ __memp_stat_hash(
+ &dbmp->reginfo[i], c_mp, &sp->st_page_dirty);
+ sp->st_page_clean = sp->st_pages - sp->st_page_dirty;
sp->st_hash_buckets += c_mp->stat.st_hash_buckets;
sp->st_hash_searches += c_mp->stat.st_hash_searches;
- if (c_mp->stat.st_hash_longest > sp->st_hash_longest)
- sp->st_hash_longest =
- c_mp->stat.st_hash_longest;
+ sp->st_hash_longest += c_mp->stat.st_hash_longest;
sp->st_hash_examined += c_mp->stat.st_hash_examined;
- sp->st_page_clean += c_mp->stat.st_page_clean;
- sp->st_page_dirty += c_mp->stat.st_page_dirty;
- sp->st_page_trickle += c_mp->stat.st_page_trickle;
- sp->st_region_wait += c_mp->stat.st_region_wait;
- sp->st_region_nowait += c_mp->stat.st_region_nowait;
+ /*
+ * st_hash_nowait calculated by __memp_stat_wait
+ * st_hash_wait
+ */
+ __memp_stat_wait(&dbmp->reginfo[i], c_mp, sp, flags);
+ sp->st_region_nowait +=
+ dbmp->reginfo[i].rp->mutex.mutex_set_nowait;
+ sp->st_region_wait +=
+ dbmp->reginfo[i].rp->mutex.mutex_set_wait;
+ sp->st_alloc += c_mp->stat.st_alloc;
+ sp->st_alloc_buckets += c_mp->stat.st_alloc_buckets;
+ if (sp->st_alloc_max_buckets <
+ c_mp->stat.st_alloc_max_buckets)
+ sp->st_alloc_max_buckets =
+ c_mp->stat.st_alloc_max_buckets;
+ sp->st_alloc_pages += c_mp->stat.st_alloc_pages;
+ if (sp->st_alloc_max_pages <
+ c_mp->stat.st_alloc_max_pages)
+ sp->st_alloc_max_pages =
+ c_mp->stat.st_alloc_max_pages;
+
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ dbmp->reginfo[i].rp->mutex.mutex_set_wait = 0;
+ dbmp->reginfo[i].rp->mutex.mutex_set_nowait = 0;
+
+ R_LOCK(dbenv, dbmp->reginfo);
+ pages = c_mp->stat.st_pages;
+ memset(&c_mp->stat, 0, sizeof(c_mp->stat));
+ c_mp->stat.st_hash_buckets = c_mp->htab_buckets;
+ c_mp->stat.st_pages = pages;
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ }
}
/*
- * We have duplicate statistics fields in the cache and
- * per-file structures. The counters are only incremented
- * in the per-file structures, though. The intent is that
- * if we ever flush files from the pool we can save their
- * last known totals in the cache structure.
+ * We have duplicate statistics fields in per-file structures
+ * and the cache. The counters are only incremented in the
+ * per-file structures, except if a file is flushed from the
+ * mpool, at which time we copy its information into the cache
+ * statistics. We added the cache information above, now we
+ * add the per-file information.
*/
+ R_LOCK(dbenv, dbmp->reginfo);
for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
+ sp->st_map += mfp->stat.st_map;
sp->st_cache_hit += mfp->stat.st_cache_hit;
sp->st_cache_miss += mfp->stat.st_cache_miss;
- sp->st_map += mfp->stat.st_map;
sp->st_page_create += mfp->stat.st_page_create;
sp->st_page_in += mfp->stat.st_page_in;
sp->st_page_out += mfp->stat.st_page_out;
+ if (fspp == NULL && LF_ISSET(DB_STAT_CLEAR)) {
+ pagesize = mfp->stat.st_pagesize;
+ memset(&mfp->stat, 0, sizeof(mfp->stat));
+ mfp->stat.st_pagesize = pagesize;
+ }
}
-
R_UNLOCK(dbenv, dbmp->reginfo);
}
@@ -142,9 +196,8 @@ memp_stat(dbenv, gspp, fspp, db_malloc)
if (fspp != NULL) {
*fspp = NULL;
- R_LOCK(dbenv, dbmp->reginfo);
-
/* Count the MPOOLFILE structures. */
+ R_LOCK(dbenv, dbmp->reginfo);
for (i = 0, len = 0,
mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
mfp != NULL;
@@ -153,18 +206,15 @@ memp_stat(dbenv, gspp, fspp, db_malloc)
sizeof(DB_MPOOL_FSTAT) +
strlen(__memp_fns(dbmp, mfp)) + 1;
len += sizeof(DB_MPOOL_FSTAT *); /* Trailing NULL */
-
R_UNLOCK(dbenv, dbmp->reginfo);
- if (len == 0)
+ if (i == 0)
return (0);
/* Allocate space */
- if ((ret = __os_malloc(dbenv, len, db_malloc, fspp)) != 0)
+ if ((ret = __os_umalloc(dbenv, len, fspp)) != 0)
return (ret);
- R_LOCK(dbenv, dbmp->reginfo);
-
/*
* Build each individual entry. We assume that an array of
* pointers are aligned correctly to be followed by an array
@@ -179,20 +229,30 @@ memp_stat(dbenv, gspp, fspp, db_malloc)
tstruct = (DB_MPOOL_FSTAT *)(tfsp + i + 1);
tname = (char *)(tstruct + i);
+ /*
+ * Files may have been opened since we counted, don't walk
+ * off the end of the allocated space.
+ */
+ R_LOCK(dbenv, dbmp->reginfo);
for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
- mfp != NULL;
+ mfp != NULL && i-- > 0;
++tfsp, ++tstruct, tname += nlen,
mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
name = __memp_fns(dbmp, mfp);
nlen = strlen(name) + 1;
*tfsp = tstruct;
*tstruct = mfp->stat;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ pagesize = mfp->stat.st_pagesize;
+ memset(&mfp->stat, 0, sizeof(mfp->stat));
+ mfp->stat.st_pagesize = pagesize;
+ }
tstruct->file_name = tname;
memcpy(tname, name, nlen);
}
- *tfsp = NULL;
-
R_UNLOCK(dbenv, dbmp->reginfo);
+
+ *tfsp = NULL;
}
return (0);
}
@@ -200,7 +260,6 @@ memp_stat(dbenv, gspp, fspp, db_malloc)
#define FMAP_ENTRIES 200 /* Files we map. */
#define MPOOL_DUMP_HASH 0x01 /* Debug hash chains. */
-#define MPOOL_DUMP_LRU 0x02 /* Debug LRU chains. */
#define MPOOL_DUMP_MEM 0x04 /* Debug region memory. */
#define MPOOL_DUMP_ALL 0x07 /* Debug all. */
@@ -208,23 +267,38 @@ memp_stat(dbenv, gspp, fspp, db_malloc)
* __memp_dump_region --
* Display MPOOL structures.
*
- * PUBLIC: void __memp_dump_region __P((DB_ENV *, char *, FILE *));
+ * PUBLIC: int __memp_dump_region __P((DB_ENV *, const char *, FILE *));
*/
-void
+int
__memp_dump_region(dbenv, area, fp)
DB_ENV *dbenv;
- char *area;
+ const char *area;
FILE *fp;
{
+ static const FN fn[] = {
+ { MP_CAN_MMAP, "mmapped" },
+ { MP_DIRECT, "no buffer" },
+ { MP_EXTENT, "extent" },
+ { MP_FAKE_DEADFILE, "deadfile" },
+ { MP_FAKE_FILEWRITTEN, "file written" },
+ { MP_FAKE_NB, "no backing file" },
+ { MP_FAKE_UOC, "unlink on close" },
+ { MP_TEMP, "temporary" },
+ { 0, NULL }
+ };
DB_MPOOL *dbmp;
DB_MPOOLFILE *dbmfp;
MPOOL *mp;
MPOOLFILE *mfp;
size_t fmap[FMAP_ENTRIES + 1];
- u_int32_t i, flags;
+ u_int32_t i, flags, mfp_flags;
int cnt;
u_int8_t *p;
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->mp_handle, "memp_dump_region", DB_INIT_MPOOL);
+
dbmp = dbenv->mp_handle;
/* Make it easy to call from the debugger. */
@@ -239,40 +313,51 @@ __memp_dump_region(dbenv, area, fp)
case 'h':
LF_SET(MPOOL_DUMP_HASH);
break;
- case 'l':
- LF_SET(MPOOL_DUMP_LRU);
- break;
case 'm':
LF_SET(MPOOL_DUMP_MEM);
break;
}
- R_LOCK(dbenv, dbmp->reginfo);
-
mp = dbmp->reginfo[0].primary;
/* Display MPOOL structures. */
(void)fprintf(fp, "%s\nPool (region addr 0x%lx)\n",
- DB_LINE, (u_long)dbmp->reginfo[0].addr);
+ DB_LINE, P_TO_ULONG(dbmp->reginfo[0].addr));
/* Display the MPOOLFILE structures. */
- cnt = 0;
- for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
+ R_LOCK(dbenv, dbmp->reginfo);
+ for (cnt = 0, mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile), ++cnt) {
- (void)fprintf(fp, "File #%d: %s: type %ld, %s\n\t [UID: ",
- cnt + 1, __memp_fns(dbmp, mfp), (long)mfp->ftype,
- F_ISSET(mfp, MP_CAN_MMAP) ? "mmap" : "read/write");
+ (void)fprintf(fp, "File #%d: %s: pagesize %lu\n", cnt + 1,
+ __memp_fns(dbmp, mfp), (u_long)mfp->stat.st_pagesize);
+ (void)fprintf(fp, "\t type %ld; ref %lu; blocks %lu; last %lu;",
+ (long)mfp->ftype, (u_long)mfp->mpf_cnt,
+ (u_long)mfp->block_cnt, (u_long)mfp->last_pgno);
+ mfp_flags = 0;
+ if (mfp->deadfile)
+ FLD_SET(mfp_flags, MP_FAKE_DEADFILE);
+ if (mfp->file_written)
+ FLD_SET(mfp_flags, MP_FAKE_FILEWRITTEN);
+ if (mfp->no_backing_file)
+ FLD_SET(mfp_flags, MP_FAKE_NB);
+ if (mfp->unlink_on_close)
+ FLD_SET(mfp_flags, MP_FAKE_UOC);
+ __db_prflags(mfp_flags, fn, fp);
+
+ (void)fprintf(fp, "\n\t UID: ");
p = R_ADDR(dbmp->reginfo, mfp->fileid_off);
- for (i = 0; i < DB_FILE_ID_LEN; ++i) {
- (void)fprintf(fp, "%x", *p++);
+ for (i = 0; i < DB_FILE_ID_LEN; ++i, ++p) {
+ (void)fprintf(fp, "%x", (u_int)*p);
if (i < DB_FILE_ID_LEN - 1)
(void)fprintf(fp, " ");
}
- (void)fprintf(fp, "]\n");
+ (void)fprintf(fp, "\n");
if (cnt < FMAP_ENTRIES)
fmap[cnt] = R_OFFSET(dbmp->reginfo, mfp);
}
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q), ++cnt) {
(void)fprintf(fp, "File #%d: %s: per-process, %s\n",
@@ -281,6 +366,7 @@ __memp_dump_region(dbenv, area, fp)
if (cnt < FMAP_ENTRIES)
fmap[cnt] = R_OFFSET(dbmp->reginfo, mfp);
}
+ MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
if (cnt < FMAP_ENTRIES)
fmap[cnt] = INVALID_ROFF;
else
@@ -289,13 +375,14 @@ __memp_dump_region(dbenv, area, fp)
/* Dump the memory pools. */
for (i = 0; i < mp->nreg; ++i) {
(void)fprintf(fp, "%s\nCache #%d:\n", DB_LINE, i + 1);
- __memp_dumpcache(dbmp, &dbmp->reginfo[i], fmap, fp, flags);
+ __memp_dumpcache(
+ dbenv, dbmp, &dbmp->reginfo[i], fmap, fp, flags);
}
- R_UNLOCK(dbenv, dbmp->reginfo);
-
/* Flush in case we're debugging. */
(void)fflush(fp);
+
+ return (0);
}
/*
@@ -303,7 +390,8 @@ __memp_dump_region(dbenv, area, fp)
* Display statistics for a cache.
*/
static void
-__memp_dumpcache(dbmp, reginfo, fmap, fp, flags)
+__memp_dumpcache(dbenv, dbmp, reginfo, fmap, fp, flags)
+ DB_ENV *dbenv;
DB_MPOOL *dbmp;
REGINFO *reginfo;
size_t *fmap;
@@ -311,7 +399,7 @@ __memp_dumpcache(dbmp, reginfo, fmap, fp, flags)
u_int32_t flags;
{
BH *bhp;
- DB_HASHTAB *dbht;
+ DB_MPOOL_HASH *hp;
MPOOL *c_mp;
int bucket;
@@ -320,27 +408,24 @@ __memp_dumpcache(dbmp, reginfo, fmap, fp, flags)
/* Display the hash table list of BH's. */
if (LF_ISSET(MPOOL_DUMP_HASH)) {
(void)fprintf(fp,
- "%s\nBH hash table (%lu hash slots)\npageno, file, ref, address\n",
+ "%s\nBH hash table (%lu hash slots)\nbucket (priority):\n",
DB_LINE, (u_long)c_mp->htab_buckets);
- for (dbht = R_ADDR(reginfo, c_mp->htab),
- bucket = 0; bucket < c_mp->htab_buckets; ++dbht, ++bucket) {
- if (SH_TAILQ_FIRST(dbht, __bh) != NULL)
- (void)fprintf(fp, "%lu:\n", (u_long)bucket);
- for (bhp = SH_TAILQ_FIRST(dbht, __bh);
- bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
+ (void)fprintf(fp,
+ "\tpageno, file, ref, address [LSN] priority\n");
+
+ for (hp = R_ADDR(reginfo, c_mp->htab),
+ bucket = 0; bucket < c_mp->htab_buckets; ++hp, ++bucket) {
+ MUTEX_LOCK(dbenv, &hp->hash_mutex);
+ if ((bhp =
+ SH_TAILQ_FIRST(&hp->hash_bucket, __bh)) != NULL)
+ (void)fprintf(fp, "%lu (%u):\n",
+ (u_long)bucket, hp->hash_priority);
+ for (; bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
__memp_pbh(dbmp, bhp, fmap, fp);
+ MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
}
}
- /* Display the LRU list of BH's. */
- if (LF_ISSET(MPOOL_DUMP_LRU)) {
- (void)fprintf(fp, "%s\nBH LRU list\n", DB_LINE);
- (void)fprintf(fp, "pageno, file, ref, address\n");
- for (bhp = SH_TAILQ_FIRST(&c_mp->bhq, __bh);
- bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, q, __bh))
- __memp_pbh(dbmp, bhp, fmap, fp);
- }
-
/* Dump the memory pool. */
if (LF_ISSET(MPOOL_DUMP_MEM))
__db_shalloc_dump(reginfo->addr, fp);
@@ -360,10 +445,9 @@ __memp_pbh(dbmp, bhp, fmap, fp)
static const FN fn[] = {
{ BH_CALLPGIN, "callpgin" },
{ BH_DIRTY, "dirty" },
+ { BH_DIRTY_CREATE, "created" },
{ BH_DISCARD, "discard" },
{ BH_LOCKED, "locked" },
- { BH_SYNC, "sync" },
- { BH_SYNC_LOGFLSH, "sync:logflush" },
{ BH_TRASH, "trash" },
{ 0, NULL }
};
@@ -374,15 +458,72 @@ __memp_pbh(dbmp, bhp, fmap, fp)
break;
if (fmap[i] == INVALID_ROFF)
- (void)fprintf(fp, " %4lu, %lu, %2lu, %lu",
+ (void)fprintf(fp, "\t%5lu, %lu, %2lu, %8lu [%lu,%lu] %lu",
(u_long)bhp->pgno, (u_long)bhp->mf_offset,
- (u_long)bhp->ref, (u_long)R_OFFSET(dbmp->reginfo, bhp));
+ (u_long)bhp->ref, (u_long)R_OFFSET(dbmp->reginfo, bhp),
+ (u_long)LSN(bhp->buf).file, (u_long)LSN(bhp->buf).offset,
+ (u_long)bhp->priority);
else
- (void)fprintf(fp, " %4lu, #%d, %2lu, %lu",
+ (void)fprintf(fp, "\t%5lu, #%d, %2lu, %8lu [%lu,%lu] %lu",
(u_long)bhp->pgno, i + 1,
- (u_long)bhp->ref, (u_long)R_OFFSET(dbmp->reginfo, bhp));
+ (u_long)bhp->ref, (u_long)R_OFFSET(dbmp->reginfo, bhp),
+ (u_long)LSN(bhp->buf).file, (u_long)LSN(bhp->buf).offset,
+ (u_long)bhp->priority);
__db_prflags(bhp->flags, fn, fp);
(void)fprintf(fp, "\n");
}
+
+/*
+ * __memp_stat_hash --
+ * Total hash bucket stats (other than mutex wait) into the region.
+ *
+ * PUBLIC: void __memp_stat_hash __P((REGINFO *, MPOOL *, u_int32_t *));
+ */
+void
+__memp_stat_hash(reginfo, mp, dirtyp)
+ REGINFO *reginfo;
+ MPOOL *mp;
+ u_int32_t *dirtyp;
+{
+ DB_MPOOL_HASH *hp;
+ u_int32_t dirty;
+ int i;
+
+ hp = R_ADDR(reginfo, mp->htab);
+ for (i = 0, dirty = 0; i < mp->htab_buckets; i++, hp++)
+ dirty += hp->hash_page_dirty;
+ *dirtyp = dirty;
+}
+
+/*
+ * __memp_stat_wait --
+ * Total hash bucket wait stats into the region.
+ */
+static void
+__memp_stat_wait(reginfo, mp, mstat, flags)
+ REGINFO *reginfo;
+ MPOOL *mp;
+ DB_MPOOL_STAT *mstat;
+ int flags;
+{
+ DB_MPOOL_HASH *hp;
+ DB_MUTEX *mutexp;
+ int i;
+
+ mstat->st_hash_max_wait = 0;
+ hp = R_ADDR(reginfo, mp->htab);
+ for (i = 0; i < mp->htab_buckets; i++, hp++) {
+ mutexp = &hp->hash_mutex;
+ mstat->st_hash_nowait += mutexp->mutex_set_nowait;
+ mstat->st_hash_wait += mutexp->mutex_set_wait;
+ if (mutexp->mutex_set_wait > mstat->st_hash_max_wait)
+ mstat->st_hash_max_wait = mutexp->mutex_set_wait;
+
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ mutexp->mutex_set_wait = 0;
+ mutexp->mutex_set_nowait = 0;
+ }
+ }
+}
diff --git a/db/mp/mp_sync.c b/db/mp/mp_sync.c
index 85d140514..1fe0b8d1f 100644
--- a/db/mp/mp_sync.c
+++ b/db/mp/mp_sync.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: mp_sync.c,v 11.64 2002/08/25 16:00:27 bostic Exp ";
+static const char revid[] = "$Id: mp_sync.c,v 11.80 2003/09/13 19:20:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,6 +18,7 @@ static const char revid[] = "Id: mp_sync.c,v 11.64 2002/08/25 16:00:27 bostic Ex
#include "db_int.h"
#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
#include "dbinc/mp.h"
typedef struct {
@@ -32,19 +33,17 @@ static int __memp_close_flush_files __P((DB_ENV *, DB_MPOOL *));
static int __memp_sync_files __P((DB_ENV *, DB_MPOOL *));
/*
- * __memp_sync --
- * Mpool sync function.
+ * __memp_sync_pp --
+ * DB_ENV->memp_sync pre/post processing.
*
- * PUBLIC: int __memp_sync __P((DB_ENV *, DB_LSN *));
+ * PUBLIC: int __memp_sync_pp __P((DB_ENV *, DB_LSN *));
*/
int
-__memp_sync(dbenv, lsnp)
+__memp_sync_pp(dbenv, lsnp)
DB_ENV *dbenv;
DB_LSN *lsnp;
{
- DB_MPOOL *dbmp;
- MPOOL *mp;
- int ret;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
@@ -58,6 +57,30 @@ __memp_sync(dbenv, lsnp)
ENV_REQUIRES_CONFIG(dbenv,
dbenv->lg_handle, "memp_sync", DB_INIT_LOG);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_sync(dbenv, lsnp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __memp_sync --
+ * DB_ENV->memp_sync.
+ *
+ * PUBLIC: int __memp_sync __P((DB_ENV *, DB_LSN *));
+ */
+int
+__memp_sync(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_MPOOL *dbmp;
+ MPOOL *mp;
+ int ret;
+
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
@@ -87,23 +110,41 @@ __memp_sync(dbenv, lsnp)
}
/*
- * __memp_fsync --
- * Mpool file sync function.
+ * __memp_fsync_pp --
+ * DB_MPOOLFILE->sync pre/post processing.
*
- * PUBLIC: int __memp_fsync __P((DB_MPOOLFILE *));
+ * PUBLIC: int __memp_fsync_pp __P((DB_MPOOLFILE *));
*/
int
-__memp_fsync(dbmfp)
+__memp_fsync_pp(dbmfp)
DB_MPOOLFILE *dbmfp;
{
DB_ENV *dbenv;
- DB_MPOOL *dbmp;
+ int rep_check, ret;
- dbmp = dbmfp->dbmp;
- dbenv = dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
PANIC_CHECK(dbenv);
+ MPF_ILLEGAL_BEFORE_OPEN(dbmfp, "DB_MPOOLFILE->sync");
+ if ((rep_check = IS_ENV_REPLICATED(dbenv)) != 0)
+ __env_rep_enter(dbenv);
+ ret = __memp_fsync(dbmfp);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __memp_fsync --
+ * DB_MPOOLFILE->sync.
+ *
+ * PUBLIC: int __memp_fsync __P((DB_MPOOLFILE *));
+ */
+int
+__memp_fsync(dbmfp)
+ DB_MPOOLFILE *dbmfp;
+{
/*
* If this handle doesn't have a file descriptor that's open for
* writing, or if the file is a temporary, there's no reason to
@@ -115,7 +156,7 @@ __memp_fsync(dbmfp)
if (F_ISSET(dbmfp->mfp, MP_TEMP))
return (0);
- return (__memp_sync_int(dbenv, dbmfp, 0, DB_SYNC_FILE, NULL));
+ return (__memp_sync_int(dbmfp->dbenv, dbmfp, 0, DB_SYNC_FILE, NULL));
}
/*
@@ -129,7 +170,6 @@ __mp_xxx_fh(dbmfp, fhp)
DB_MPOOLFILE *dbmfp;
DB_FH **fhp;
{
- DB_ENV *dbenv;
/*
* This is a truly spectacular layering violation, intended ONLY to
* support compatibility for the DB 1.85 DB->fd call.
@@ -144,12 +184,10 @@ __mp_xxx_fh(dbmfp, fhp)
* because we want to write to the backing file regardless so that
* we get a file descriptor to return.
*/
- *fhp = dbmfp->fhp;
- if (F_ISSET(dbmfp->fhp, DB_FH_VALID))
+ if ((*fhp = dbmfp->fhp) != NULL)
return (0);
- dbenv = dbmfp->dbmp->dbenv;
- return (__memp_sync_int(dbenv, dbmfp, 0, DB_SYNC_FILE, NULL));
+ return (__memp_sync_int(dbmfp->dbenv, dbmfp, 0, DB_SYNC_FILE, NULL));
}
/*
@@ -160,10 +198,10 @@ __mp_xxx_fh(dbmfp, fhp)
* PUBLIC: __P((DB_ENV *, DB_MPOOLFILE *, int, db_sync_op, int *));
*/
int
-__memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
+__memp_sync_int(dbenv, dbmfp, trickle_max, op, wrotep)
DB_ENV *dbenv;
DB_MPOOLFILE *dbmfp;
- int ar_max, *wrotep;
+ int trickle_max, *wrotep;
db_sync_op op;
{
BH *bhp;
@@ -174,19 +212,15 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
MPOOL *c_mp, *mp;
MPOOLFILE *mfp;
u_int32_t n_cache;
- int ar_cnt, hb_lock, i, pass, remaining, ret, t_ret, wait_cnt, wrote;
+ int ar_cnt, ar_max, hb_lock, i, pass, remaining, ret, t_ret;
+ int wait_cnt, write_cnt, wrote;
dbmp = dbenv->mp_handle;
mp = dbmp->reginfo[0].primary;
pass = wrote = 0;
- /*
- * If the caller does not specify how many pages assume one
- * per bucket.
- */
- if (ar_max == 0)
- ar_max = mp->nreg * mp->htab_buckets;
-
+ /* Assume one dirty page per bucket. */
+ ar_max = mp->nreg * mp->htab_buckets;
if ((ret =
__os_malloc(dbenv, ar_max * sizeof(BH_TRACK), &bharray)) != 0)
return (ret);
@@ -265,6 +299,12 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
bharray[ar_cnt].track_off = bhp->mf_offset;
ar_cnt++;
+ /*
+ * If we run out of space, double and continue.
+ * Don't stop at trickle_max, we want to sort
+ * as large a sample set as possible in order
+ * to minimize disk seeks.
+ */
if (ar_cnt >= ar_max) {
if ((ret = __os_realloc(dbenv,
(ar_max * 2) * sizeof(BH_TRACK),
@@ -294,12 +334,10 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
/*
* If we're trickling buffers, only write enough to reach the correct
- * percentage for this region. We may not write enough if the dirty
- * buffers have an unbalanced distribution among the regions, but that
- * seems unlikely.
+ * percentage.
*/
- if (op == DB_SYNC_TRICKLE && ar_cnt > ar_max / (int)mp->nreg)
- ar_cnt = ar_max / (int)mp->nreg;
+ if (op == DB_SYNC_TRICKLE && ar_cnt > trickle_max)
+ ar_cnt = trickle_max;
/*
* Flush the log. We have to ensure the log records reflecting the
@@ -309,7 +347,7 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
* flushed the log), but in general this will at least avoid any I/O
* on the log's part.
*/
- if (LOGGING_ON(dbenv) && (ret = dbenv->log_flush(dbenv, NULL)) != 0)
+ if (LOGGING_ON(dbenv) && (ret = __log_flush(dbenv, NULL)) != 0)
goto err;
/*
@@ -317,11 +355,11 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
* out its hash bucket pointer so we don't process a slot more than
* once.
*/
- for (remaining = ar_cnt, i = pass = 0; remaining > 0; ++i) {
+ for (i = pass = write_cnt = 0, remaining = ar_cnt; remaining > 0; ++i) {
if (i >= ar_cnt) {
i = 0;
++pass;
- __os_sleep(dbenv, 1, 0);
+ (void)__os_sleep(dbenv, 1, 0);
}
if ((hp = bharray[i].track_hp) == NULL)
continue;
@@ -398,7 +436,7 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
MUTEX_UNLOCK(dbenv, mutexp);
for (wait_cnt = 1;
bhp->ref_sync != 0 && wait_cnt < 4; ++wait_cnt)
- __os_sleep(dbenv, 1, 0);
+ (void)__os_sleep(dbenv, 1, 0);
MUTEX_LOCK(dbenv, mutexp);
hb_lock = 1;
@@ -431,6 +469,17 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
__memp_fns(dbmp, mfp), (u_long)bhp->pgno);
else
ret = 0;
+
+ /*
+ * Avoid saturating the disk, sleep once we've done
+ * some number of writes.
+ */
+ if (dbenv->mp_maxwrite != 0 &&
+ ++write_cnt >= dbenv->mp_maxwrite) {
+ write_cnt = 0;
+ (void)__os_sleep(
+ dbenv, 0, dbenv->mp_maxwrite_sleep);
+ }
}
/*
@@ -471,11 +520,7 @@ __memp_sync_int(dbenv, dbmfp, ar_max, op, wrotep)
break;
}
-done: /* If we've opened files to flush pages, close them. */
- if ((t_ret = __memp_close_flush_files(dbenv, dbmp)) != 0 && ret == 0)
- ret = t_ret;
-
- /*
+done: /*
* If doing a checkpoint or flushing a file for the application, we
* have to force the pages to disk. We don't do this as we go along
* because we want to give the OS as much time as possible to lazily
@@ -489,6 +534,10 @@ done: /* If we've opened files to flush pages, close them. */
ret = __os_fsync(dbenv, dbmfp->fhp);
}
+ /* If we've opened files to flush pages, close them. */
+ if ((t_ret = __memp_close_flush_files(dbenv, dbmp)) != 0 && ret == 0)
+ ret = t_ret;
+
err: __os_free(dbenv, bharray);
if (wrotep != NULL)
*wrotep = wrote;
@@ -508,55 +557,48 @@ int __memp_sync_files(dbenv, dbmp)
DB_MPOOLFILE *dbmfp;
MPOOL *mp;
MPOOLFILE *mfp;
- int ret, t_ret;
+ int final_ret, ret;
- ret = 0;
+ final_ret = 0;
mp = dbmp->reginfo[0].primary;
R_LOCK(dbenv, dbmp->reginfo);
for (mfp = SH_TAILQ_FIRST(&mp->mpfq, __mpoolfile);
mfp != NULL; mfp = SH_TAILQ_NEXT(mfp, q, __mpoolfile)) {
- if (mfp->stat.st_page_out == 0 ||
- F_ISSET(mfp, MP_DEADFILE | MP_TEMP))
+ if (!mfp->file_written ||
+ mfp->deadfile || F_ISSET(mfp, MP_TEMP))
continue;
- /* Look for an already open handle. */
+ /*
+ * Look for an already open, writeable handle (fsync doesn't
+ * work on read-only Windows handles).
+ */
ret = 0;
MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
for (dbmfp = TAILQ_FIRST(&dbmp->dbmfq);
- dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q))
- if (dbmfp->mfp == mfp) {
- ret = __os_fsync(dbenv, dbmfp->fhp);
- break;
- }
+ dbmfp != NULL; dbmfp = TAILQ_NEXT(dbmfp, q)) {
+ if (dbmfp->mfp != mfp || F_ISSET(dbmfp, MP_READONLY))
+ continue;
+ ret = __os_fsync(dbenv, dbmfp->fhp);
+ break;
+ }
MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- if (ret != 0)
- goto err;
/* If we don't find one, open one. */
- if (dbmfp == NULL) {
- if ((ret = dbenv->memp_fcreate(dbenv, &dbmfp, 0)) != 0)
- goto err;
- ret = __memp_fopen_int(
- dbmfp, mfp, R_ADDR(dbmp->reginfo, mfp->path_off),
- 0, 0, mfp->stat.st_pagesize);
- if (ret == 0)
- ret = __os_fsync(dbenv, dbmfp->fhp);
- if ((t_ret =
- __memp_fclose_int(dbmfp, 0)) != 0 && ret == 0)
- ret = t_ret;
- if (ret != 0)
- goto err;
+ if (dbmfp == NULL)
+ ret = __memp_mf_sync(dbmp, mfp);
+ if (ret != 0) {
+ __db_err(dbenv, "%s: unable to flush: %s",
+ (char *)R_ADDR(dbmp->reginfo, mfp->path_off),
+ db_strerror(ret));
+ if (final_ret == 0)
+ final_ret = ret;
}
}
- if (0) {
-err: __db_err(dbenv, "%s: cannot sync: %s",
- R_ADDR(dbmp->reginfo, mfp->path_off), db_strerror(ret));
- }
R_UNLOCK(dbenv, dbmp->reginfo);
- return (ret);
+ return (final_ret);
}
/*
@@ -590,7 +632,7 @@ retry: MUTEX_THREAD_LOCK(dbenv, dbmp->mutexp);
if (F_ISSET(dbmfp, MP_FLUSH)) {
F_CLR(dbmfp, MP_FLUSH);
MUTEX_THREAD_UNLOCK(dbenv, dbmp->mutexp);
- if ((ret = __memp_fclose_int(dbmfp, 0)) != 0)
+ if ((ret = __memp_fclose(dbmfp, 0)) != 0)
return (ret);
goto retry;
}
diff --git a/db/mp/mp_trickle.c b/db/mp/mp_trickle.c
index f937805cf..90e26064f 100644
--- a/db/mp/mp_trickle.c
+++ b/db/mp/mp_trickle.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mp_trickle.c,v 11.12 2000/11/30 00:58:41 ubell Exp $";
+static const char revid[] = "$Id: mp_trickle.c,v 11.30 2003/09/13 19:20:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,134 +16,94 @@ static const char revid[] = "$Id: mp_trickle.c,v 11.12 2000/11/30 00:58:41 ubell
#include <stdlib.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_shash.h"
-#include "mp.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
-
-static int __memp_trick __P((DB_ENV *, int, int, int *));
+static int __memp_trickle __P((DB_ENV *, int, int *));
/*
- * memp_trickle --
- * Keep a specified percentage of the buffers clean.
+ * __memp_trickle_pp --
+ * DB_ENV->memp_trickle pre/post processing.
+ *
+ * PUBLIC: int __memp_trickle_pp __P((DB_ENV *, int, int *));
*/
int
-memp_trickle(dbenv, pct, nwrotep)
+__memp_trickle_pp(dbenv, pct, nwrotep)
DB_ENV *dbenv;
int pct, *nwrotep;
{
- DB_MPOOL *dbmp;
- MPOOL *mp;
- u_int32_t i;
- int ret;
-
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_memp_trickle(dbenv, pct, nwrotep));
-#endif
+ int rep_check, ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->mp_handle, DB_INIT_MPOOL);
-
- dbmp = dbenv->mp_handle;
- mp = dbmp->reginfo[0].primary;
-
- if (nwrotep != NULL)
- *nwrotep = 0;
-
- if (pct < 1 || pct > 100)
- return (EINVAL);
-
- R_LOCK(dbenv, dbmp->reginfo);
-
- /* Loop through the caches... */
- for (ret = 0, i = 0; i < mp->nreg; ++i)
- if ((ret = __memp_trick(dbenv, i, pct, nwrotep)) != 0)
- break;
-
- R_UNLOCK(dbenv, dbmp->reginfo);
+ ENV_REQUIRES_CONFIG(dbenv,
+ dbenv->mp_handle, "memp_trickle", DB_INIT_MPOOL);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __memp_trickle(dbenv, pct, nwrotep);
+ if (rep_check)
+ __env_rep_exit(dbenv);
return (ret);
}
/*
- * __memp_trick --
- * Trickle a single cache.
+ * __memp_trickle --
+ * DB_ENV->memp_trickle.
*/
static int
-__memp_trick(dbenv, ncache, pct, nwrotep)
+__memp_trickle(dbenv, pct, nwrotep)
DB_ENV *dbenv;
- int ncache, pct, *nwrotep;
+ int pct, *nwrotep;
{
- BH *bhp;
DB_MPOOL *dbmp;
- MPOOL *c_mp;
- MPOOLFILE *mfp;
- db_pgno_t pgno;
- u_long total;
- int ret, wrote;
+ MPOOL *c_mp, *mp;
+ u_int32_t dirty, i, total, dtmp;
+ int n, ret, wrote;
dbmp = dbenv->mp_handle;
- c_mp = dbmp->reginfo[ncache].primary;
+ mp = dbmp->reginfo[0].primary;
+
+ if (nwrotep != NULL)
+ *nwrotep = 0;
+
+ if (pct < 1 || pct > 100)
+ return (EINVAL);
/*
- * If there are sufficient clean buffers, or no buffers or no dirty
+ * If there are sufficient clean buffers, no buffers or no dirty
* buffers, we're done.
*
* XXX
- * Using st_page_clean and st_page_dirty is our only choice at the
- * moment, but it's not as correct as we might like in the presence
- * of pools with more than one buffer size, as a free 512-byte buffer
- * isn't the same as a free 8K buffer.
+ * Using hash_page_dirty is our only choice at the moment, but it's not
+ * as correct as we might like in the presence of pools having more
+ * than one page size, as a free 512B buffer isn't the same as a free
+ * 8KB buffer.
+ *
+ * Loop through the caches counting total/dirty buffers.
*/
-loop: total = c_mp->stat.st_page_clean + c_mp->stat.st_page_dirty;
- if (total == 0 || c_mp->stat.st_page_dirty == 0 ||
- (c_mp->stat.st_page_clean * 100) / total >= (u_long)pct)
+ for (ret = 0, i = dirty = total = 0; i < mp->nreg; ++i) {
+ c_mp = dbmp->reginfo[i].primary;
+ total += c_mp->stat.st_pages;
+ __memp_stat_hash(&dbmp->reginfo[i], c_mp, &dtmp);
+ dirty += dtmp;
+ }
+
+ /*
+ * !!!
+ * Be careful in modifying this calculation, total may be 0.
+ */
+ n = ((total * pct) / 100) - (total - dirty);
+ if (dirty == 0 || n <= 0)
return (0);
- /* Loop until we write a buffer. */
- for (bhp = SH_TAILQ_FIRST(&c_mp->bhq, __bh);
- bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, q, __bh)) {
- if (bhp->ref != 0 ||
- !F_ISSET(bhp, BH_DIRTY) || F_ISSET(bhp, BH_LOCKED))
- continue;
-
- mfp = R_ADDR(dbmp->reginfo, bhp->mf_offset);
-
- /*
- * We can't write to temporary files -- see the comment in
- * mp_bh.c:__memp_bhwrite().
- */
- if (F_ISSET(mfp, MP_TEMP))
- continue;
-
- pgno = bhp->pgno;
- if ((ret = __memp_bhwrite(dbmp, mfp, bhp, NULL, &wrote)) != 0)
- return (ret);
-
- /*
- * Any process syncing the shared memory buffer pool had better
- * be able to write to any underlying file. Be understanding,
- * but firm, on this point.
- */
- if (!wrote) {
- __db_err(dbenv, "%s: unable to flush page: %lu",
- __memp_fns(dbmp, mfp), (u_long)pgno);
- return (EPERM);
- }
-
- ++c_mp->stat.st_page_trickle;
- if (nwrotep != NULL)
- ++*nwrotep;
- goto loop;
- }
+ if (nwrotep == NULL)
+ nwrotep = &wrote;
+ ret = __memp_sync_int(dbenv, NULL, n, DB_SYNC_TRICKLE, nwrotep);
- return (0);
+ mp->stat.st_page_trickle += *nwrotep;
+
+ return (ret);
}
diff --git a/db/mutex/mut_fcntl.c b/db/mutex/mut_fcntl.c
index 02f4d4044..ac600312c 100644
--- a/db/mutex/mut_fcntl.c
+++ b/db/mutex/mut_fcntl.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mut_fcntl.c,v 11.11 2001/01/11 18:19:53 bostic Exp $";
+static const char revid[] = "$Id: mut_fcntl.c,v 11.24 2003/05/05 19:55:03 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,7 +17,6 @@ static const char revid[] = "$Id: mut_fcntl.c,v 11.11 2001/01/11 18:19:53 bostic
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -26,15 +25,26 @@ static const char revid[] = "$Id: mut_fcntl.c,v 11.11 2001/01/11 18:19:53 bostic
* __db_fcntl_mutex_init --
* Initialize a DB mutex structure.
*
- * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, MUTEX *, u_int32_t));
+ * PUBLIC: int __db_fcntl_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
*/
int
__db_fcntl_mutex_init(dbenv, mutexp, offset)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
u_int32_t offset;
{
+ u_int32_t save;
+
+ /*
+ * The only setting/checking of the MUTEX_MPOOL flag is in the mutex
+ * mutex allocation code (__db_mutex_alloc/free). Preserve only that
+ * flag. This is safe because even if this flag was never explicitly
+ * set, but happened to be set in memory, it will never be checked or
+ * acted upon.
+ */
+ save = F_ISSET(mutexp, MUTEX_MPOOL);
memset(mutexp, 0, sizeof(*mutexp));
+ F_SET(mutexp, save);
/*
* This is where we decide to ignore locks we don't need to set -- if
@@ -46,7 +56,7 @@ __db_fcntl_mutex_init(dbenv, mutexp, offset)
}
mutexp->off = offset;
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
mutexp->reg_off = INVALID_ROFF;
#endif
F_SET(mutexp, MUTEX_INITED);
@@ -58,18 +68,17 @@ __db_fcntl_mutex_init(dbenv, mutexp, offset)
* __db_fcntl_mutex_lock
* Lock on a mutex, blocking if necessary.
*
- * PUBLIC: int __db_fcntl_mutex_lock __P((DB_ENV *, MUTEX *, DB_FH *));
+ * PUBLIC: int __db_fcntl_mutex_lock __P((DB_ENV *, DB_MUTEX *));
*/
int
-__db_fcntl_mutex_lock(dbenv, mutexp, fhp)
+__db_fcntl_mutex_lock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
- DB_FH *fhp;
+ DB_MUTEX *mutexp;
{
struct flock k_lock;
int locked, ms, waited;
- if (!dbenv->db_mutexlocks)
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
/* Initialize the lock. */
@@ -91,18 +100,18 @@ __db_fcntl_mutex_lock(dbenv, mutexp, fhp)
/* Acquire an exclusive kernel lock. */
k_lock.l_type = F_WRLCK;
- if (fcntl(fhp->fd, F_SETLKW, &k_lock))
+ if (fcntl(dbenv->lockfhp->fd, F_SETLKW, &k_lock))
return (__os_get_errno());
/* If the resource is still available, it's ours. */
if (mutexp->pid == 0) {
locked = 1;
- mutexp->pid = (u_int32_t)getpid();
+ __os_id(&mutexp->pid);
}
/* Release the kernel lock. */
k_lock.l_type = F_UNLCK;
- if (fcntl(fhp->fd, F_SETLK, &k_lock))
+ if (fcntl(dbenv->lockfhp->fd, F_SETLK, &k_lock))
return (__os_get_errno());
/*
@@ -129,14 +138,14 @@ __db_fcntl_mutex_lock(dbenv, mutexp, fhp)
* __db_fcntl_mutex_unlock --
* Release a lock.
*
- * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, MUTEX *));
+ * PUBLIC: int __db_fcntl_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
*/
int
__db_fcntl_mutex_unlock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
- if (!dbenv->db_mutexlocks)
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
return (0);
#ifdef DIAGNOSTIC
@@ -160,13 +169,13 @@ __db_fcntl_mutex_unlock(dbenv, mutexp)
/*
* __db_fcntl_mutex_destroy --
- * Destroy a MUTEX.
+ * Destroy a DB_MUTEX.
*
- * PUBLIC: int __db_fcntl_mutex_destroy __P((MUTEX *));
+ * PUBLIC: int __db_fcntl_mutex_destroy __P((DB_MUTEX *));
*/
int
__db_fcntl_mutex_destroy(mutexp)
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
COMPQUIET(mutexp, NULL);
diff --git a/db/mutex/mut_pthread.c b/db/mutex/mut_pthread.c
index 3de4abcef..10c9bc597 100644
--- a/db/mutex/mut_pthread.c
+++ b/db/mutex/mut_pthread.c
@@ -1,21 +1,20 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mut_pthread.c,v 11.33 2001/01/09 00:56:16 ubell Exp $";
+static const char revid[] = "$Id: mut_pthread.c,v 11.57 2003/05/05 19:55:03 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -36,7 +35,11 @@ static const char revid[] = "$Id: mut_pthread.c,v 11.33 2001/01/09 00:56:16 ubel
#define pthread_mutex_lock _lwp_mutex_lock
#define pthread_mutex_trylock _lwp_mutex_trylock
#define pthread_mutex_unlock _lwp_mutex_unlock
-#define pthread_self _lwp_self
+/*
+ * _lwp_self returns the LWP process ID which isn't a unique per-thread
+ * identifier. Use pthread_self instead, it appears to work even if we
+ * are not a pthreads application.
+ */
#define pthread_mutex_destroy(x) 0
#endif
#ifdef HAVE_MUTEX_UI_THREADS
@@ -53,20 +56,31 @@ static const char revid[] = "$Id: mut_pthread.c,v 11.33 2001/01/09 00:56:16 ubel
/*
* __db_pthread_mutex_init --
- * Initialize a MUTEX.
+ * Initialize a DB_MUTEX.
*
- * PUBLIC: int __db_pthread_mutex_init __P((DB_ENV *, MUTEX *, u_int32_t));
+ * PUBLIC: int __db_pthread_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
*/
int
__db_pthread_mutex_init(dbenv, mutexp, flags)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
u_int32_t flags;
{
+ u_int32_t save;
int ret;
ret = 0;
+
+ /*
+ * The only setting/checking of the MUTEX_MPOOL flag is in the mutex
+ * mutex allocation code (__db_mutex_alloc/free). Preserve only that
+ * flag. This is safe because even if this flag was never explicitly
+ * set, but happened to be set in memory, it will never be checked or
+ * acted upon.
+ */
+ save = F_ISSET(mutexp, MUTEX_MPOOL);
memset(mutexp, 0, sizeof(*mutexp));
+ F_SET(mutexp, save);
/*
* If this is a thread lock or the process has told us that there are
@@ -81,7 +95,6 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
F_SET(mutexp, MUTEX_IGNORE);
return (0);
}
- F_SET(mutexp, MUTEX_THREAD);
}
#ifdef HAVE_MUTEX_PTHREADS
@@ -89,18 +102,13 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
pthread_condattr_t condattr, *condattrp = NULL;
pthread_mutexattr_t mutexattr, *mutexattrp = NULL;
- if (!F_ISSET(mutexp, MUTEX_THREAD)) {
- ret = pthread_condattr_init(&condattr);
- if (ret == 0)
- ret = pthread_condattr_setpshared(
- &condattr, PTHREAD_PROCESS_SHARED);
- condattrp = &condattr;
-
- if (ret == 0)
- ret = pthread_mutexattr_init(&mutexattr);
+ if (!LF_ISSET(MUTEX_THREAD)) {
+ ret = pthread_mutexattr_init(&mutexattr);
+#ifndef HAVE_MUTEX_THREAD_ONLY
if (ret == 0)
ret = pthread_mutexattr_setpshared(
&mutexattr, PTHREAD_PROCESS_SHARED);
+#endif
mutexattrp = &mutexattr;
}
@@ -108,14 +116,27 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
ret = pthread_mutex_init(&mutexp->mutex, mutexattrp);
if (mutexattrp != NULL)
pthread_mutexattr_destroy(mutexattrp);
- if (LF_ISSET(MUTEX_SELF_BLOCK)) {
+ if (ret == 0 && LF_ISSET(MUTEX_SELF_BLOCK)) {
+ if (!LF_ISSET(MUTEX_THREAD)) {
+ ret = pthread_condattr_init(&condattr);
+#ifndef HAVE_MUTEX_THREAD_ONLY
+ if (ret == 0) {
+ condattrp = &condattr;
+ ret = pthread_condattr_setpshared(
+ &condattr, PTHREAD_PROCESS_SHARED);
+ }
+#endif
+ }
+
if (ret == 0)
ret = pthread_cond_init(&mutexp->cond, condattrp);
F_SET(mutexp, MUTEX_SELF_BLOCK);
if (condattrp != NULL)
- pthread_condattr_destroy(condattrp);
- }}
+ (void)pthread_condattr_destroy(condattrp);
+ }
+
+ }
#endif
#ifdef HAVE_MUTEX_SOLARIS_LWP
/*
@@ -126,7 +147,7 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
* initialization values doesn't have surrounding braces. There's not
* much we can do.
*/
- if (F_ISSET(mutexp, MUTEX_THREAD)) {
+ if (LF_ISSET(MUTEX_THREAD)) {
static lwp_mutex_t mi = DEFAULTMUTEX;
mutexp->mutex = mi;
@@ -136,7 +157,7 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
mutexp->mutex = mi;
}
if (LF_ISSET(MUTEX_SELF_BLOCK)) {
- if (F_ISSET(mutexp, MUTEX_THREAD)) {
+ if (LF_ISSET(MUTEX_THREAD)) {
static lwp_cond_t ci = DEFAULTCV;
mutexp->cond = ci;
@@ -152,7 +173,7 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
{
int type;
- type = F_ISSET(mutexp, MUTEX_THREAD) ? USYNC_THREAD : USYNC_PROCESS;
+ type = LF_ISSET(MUTEX_THREAD) ? USYNC_THREAD : USYNC_PROCESS;
ret = mutex_init(&mutexp->mutex, type, NULL);
if (ret == 0 && LF_ISSET(MUTEX_SELF_BLOCK)) {
@@ -162,12 +183,14 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
}}
#endif
- mutexp->spins = __os_spin();
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
mutexp->reg_off = INVALID_ROFF;
#endif
if (ret == 0)
F_SET(mutexp, MUTEX_INITED);
+ else
+ __db_err(dbenv,
+ "unable to initialize mutex: %s", strerror(ret));
return (ret);
}
@@ -176,26 +199,26 @@ __db_pthread_mutex_init(dbenv, mutexp, flags)
* __db_pthread_mutex_lock
* Lock on a mutex, logically blocking if necessary.
*
- * PUBLIC: int __db_pthread_mutex_lock __P((DB_ENV *, MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_lock __P((DB_ENV *, DB_MUTEX *));
*/
int
__db_pthread_mutex_lock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
u_int32_t nspins;
int i, ret, waited;
- if (!dbenv->db_mutexlocks || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
/* Attempt to acquire the resource for N spins. */
- for (nspins = mutexp->spins; nspins > 0; --nspins)
+ for (nspins = dbenv->tas_spins; nspins > 0; --nspins)
if (pthread_mutex_trylock(&mutexp->mutex) == 0)
break;
if (nspins == 0 && (ret = pthread_mutex_lock(&mutexp->mutex)) != 0)
- return (ret);
+ goto err;
if (F_ISSET(mutexp, MUTEX_SELF_BLOCK)) {
for (waited = 0; mutexp->locked != 0; waited = 1) {
@@ -210,8 +233,14 @@ __db_pthread_mutex_lock(dbenv, mutexp)
* call, and Solaris delivers the signal to the wrong
* LWP.
*/
- if (ret != 0 && ret != ETIME && ret != ETIMEDOUT)
+ if (ret != 0 && ret != EINTR &&
+#ifdef ETIME
+ ret != ETIME &&
+#endif
+ ret != ETIMEDOUT) {
+ (void)pthread_mutex_unlock(&mutexp->mutex);
return (ret);
+ }
}
if (waited)
@@ -238,11 +267,14 @@ __db_pthread_mutex_lock(dbenv, mutexp)
ret = pthread_mutex_unlock(&mutexp->mutex);
} while (ret == EFAULT && --i > 0);
if (ret != 0)
- return (ret);
+ goto err;
} else {
- if (nspins == mutexp->spins)
+ if (nspins == dbenv->tas_spins)
++mutexp->mutex_set_nowait;
- else
+ else if (nspins > 0) {
+ ++mutexp->mutex_set_spin;
+ mutexp->mutex_set_spins += dbenv->tas_spins - nspins;
+ } else
++mutexp->mutex_set_wait;
#ifdef DIAGNOSTIC
if (mutexp->locked) {
@@ -257,22 +289,25 @@ __db_pthread_mutex_lock(dbenv, mutexp)
#endif
}
return (0);
+
+err: __db_err(dbenv, "unable to lock mutex: %s", strerror(ret));
+ return (ret);
}
/*
* __db_pthread_mutex_unlock --
* Release a lock.
*
- * PUBLIC: int __db_pthread_mutex_unlock __P((DB_ENV *, MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
*/
int
__db_pthread_mutex_unlock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
int i, ret;
- if (!dbenv->db_mutexlocks || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
#ifdef DIAGNOSTIC
@@ -282,47 +317,43 @@ __db_pthread_mutex_unlock(dbenv, mutexp)
if (F_ISSET(mutexp, MUTEX_SELF_BLOCK)) {
if ((ret = pthread_mutex_lock(&mutexp->mutex)) != 0)
- return (ret);
+ goto err;
mutexp->locked = 0;
if ((ret = pthread_cond_signal(&mutexp->cond)) != 0)
return (ret);
- /* See comment above; workaround for [#2471]. */
- i = PTHREAD_UNLOCK_ATTEMPTS;
- do {
- ret = pthread_mutex_unlock(&mutexp->mutex);
- } while (ret == EFAULT && --i > 0);
- if (ret != 0)
- return (ret);
- } else {
+ } else
mutexp->locked = 0;
- /* See comment above; workaround for [#2471]. */
- i = PTHREAD_UNLOCK_ATTEMPTS;
- do {
- ret = pthread_mutex_unlock(&mutexp->mutex);
- } while (ret == EFAULT && --i > 0);
- if (ret != 0)
- return (ret);
- }
+ /* See comment above; workaround for [#2471]. */
+ i = PTHREAD_UNLOCK_ATTEMPTS;
+ do {
+ ret = pthread_mutex_unlock(&mutexp->mutex);
+ } while (ret == EFAULT && --i > 0);
+ return (ret);
- return (0);
+err: __db_err(dbenv, "unable to unlock mutex: %s", strerror(ret));
+ return (ret);
}
/*
* __db_pthread_mutex_destroy --
- * Destroy a MUTEX.
+ * Destroy a DB_MUTEX.
*
- * PUBLIC: int __db_pthread_mutex_destroy __P((MUTEX *));
+ * PUBLIC: int __db_pthread_mutex_destroy __P((DB_MUTEX *));
*/
int
__db_pthread_mutex_destroy(mutexp)
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
+ int ret;
+
if (F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
- return (pthread_mutex_destroy(&mutexp->mutex));
+ if ((ret = pthread_mutex_destroy(&mutexp->mutex)) != 0)
+ __db_err(NULL, "unable to destroy mutex: %s", strerror(ret));
+ return (ret);
}
diff --git a/db/mutex/mut_tas.c b/db/mutex/mut_tas.c
index 4b0db4bdf..cfe31c5a9 100644
--- a/db/mutex/mut_tas.c
+++ b/db/mutex/mut_tas.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mut_tas.c,v 11.18 2000/11/30 00:58:41 ubell Exp $";
+static const char revid[] = "$Id: mut_tas.c,v 11.40 2003/05/06 14:25:33 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,7 +16,6 @@ static const char revid[] = "$Id: mut_tas.c,v 11.18 2000/11/30 00:58:41 ubell Ex
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
/*
@@ -25,32 +24,33 @@ static const char revid[] = "$Id: mut_tas.c,v 11.18 2000/11/30 00:58:41 ubell Ex
#define LOAD_ACTUAL_MUTEX_CODE
#include "db_int.h"
-#ifdef DIAGNOSTIC
-#undef MSG1
-#define MSG1 "mutex_lock: ERROR: lock currently in use: pid: %lu.\n"
-#undef MSG2
-#define MSG2 "mutex_unlock: ERROR: lock already unlocked\n"
-#ifndef STDERR_FILENO
-#define STDERR_FILENO 2
-#endif
-#endif
-
/*
* __db_tas_mutex_init --
- * Initialize a MUTEX.
+ * Initialize a DB_MUTEX.
*
- * PUBLIC: int __db_tas_mutex_init __P((DB_ENV *, MUTEX *, u_int32_t));
+ * PUBLIC: int __db_tas_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t));
*/
int
__db_tas_mutex_init(dbenv, mutexp, flags)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
u_int32_t flags;
{
+ u_int32_t save;
+
/* Check alignment. */
DB_ASSERT(((db_alignp_t)mutexp & (MUTEX_ALIGN - 1)) == 0);
+ /*
+ * The only setting/checking of the MUTEX_MPOOL flag is in the mutex
+ * mutex allocation code (__db_mutex_alloc/free). Preserve only that
+ * flag. This is safe because even if this flag was never explicitly
+ * set, but happened to be set in memory, it will never be checked or
+ * acted upon.
+ */
+ save = F_ISSET(mutexp, MUTEX_MPOOL);
memset(mutexp, 0, sizeof(*mutexp));
+ F_SET(mutexp, save);
/*
* If this is a thread lock or the process has told us that there are
@@ -65,15 +65,16 @@ __db_tas_mutex_init(dbenv, mutexp, flags)
F_SET(mutexp, MUTEX_IGNORE);
return (0);
}
- F_SET(mutexp, MUTEX_THREAD);
}
+ if (LF_ISSET(MUTEX_LOGICAL_LOCK))
+ F_SET(mutexp, MUTEX_LOGICAL_LOCK);
+
/* Initialize the lock. */
if (MUTEX_INIT(&mutexp->tas))
return (__os_get_errno());
- mutexp->spins = __os_spin();
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
mutexp->reg_off = INVALID_ROFF;
#endif
F_SET(mutexp, MUTEX_INITED);
@@ -85,28 +86,46 @@ __db_tas_mutex_init(dbenv, mutexp, flags)
* __db_tas_mutex_lock
* Lock on a mutex, logically blocking if necessary.
*
- * PUBLIC: int __db_tas_mutex_lock __P((DB_ENV *, MUTEX *));
+ * PUBLIC: int __db_tas_mutex_lock __P((DB_ENV *, DB_MUTEX *));
*/
int
__db_tas_mutex_lock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
- u_long ms;
- int nspins;
+ u_int32_t nspins;
+ u_long ms, max_ms;
- if (!dbenv->db_mutexlocks || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
+ /*
+ * Wait 1ms initially, up to 10ms for mutexes backing logical database
+ * locks, and up to 25 ms for mutual exclusion data structure mutexes.
+ * SR: #7675
+ */
ms = 1;
+ max_ms = F_ISSET(mutexp, MUTEX_LOGICAL_LOCK) ? 10 : 25;
loop: /* Attempt to acquire the resource for N spins. */
- for (nspins = mutexp->spins; nspins > 0; --nspins) {
+ for (nspins = dbenv->tas_spins; nspins > 0; --nspins) {
#ifdef HAVE_MUTEX_HPPA_MSEM_INIT
relock:
#endif
- if (!MUTEX_SET(&mutexp->tas))
+#ifdef HAVE_MUTEX_S390_CC_ASSEMBLY
+ tsl_t zero = 0;
+#endif
+ if (!MUTEX_SET(&mutexp->tas)) {
+ /*
+ * Some systems (notably those with newer Intel CPUs)
+ * need a small pause here. [#6975]
+ */
+#ifdef MUTEX_PAUSE
+ MUTEX_PAUSE
+#endif
continue;
+ }
+
#ifdef HAVE_MUTEX_HPPA_MSEM_INIT
/*
* HP semaphores are unlocked automatically when a holding
@@ -119,7 +138,7 @@ relock:
* happened to initialize or use one of them.)
*/
if (mutexp->locked != 0) {
- mutexp->locked = (u_int32_t)getpid();
+ __os_id(&mutexp->locked);
goto relock;
}
/*
@@ -129,15 +148,13 @@ relock:
*/
#endif
#ifdef DIAGNOSTIC
- if (mutexp->locked != 0) {
- char msgbuf[128];
- (void)snprintf(msgbuf,
- sizeof(msgbuf), MSG1, (u_long)mutexp->locked);
- (void)write(STDERR_FILENO, msgbuf, strlen(msgbuf));
- }
+ if (mutexp->locked != 0)
+ __db_err(dbenv,
+ "__db_tas_mutex_lock: ERROR: lock currently in use: ID: %lu",
+ (u_long)mutexp->locked);
#endif
#if defined(DIAGNOSTIC) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
- mutexp->locked = (u_int32_t)getpid();
+ __os_id(&mutexp->locked);
#endif
if (ms == 1)
++mutexp->mutex_set_nowait;
@@ -146,10 +163,12 @@ relock:
return (0);
}
- /* Yield the processor; wait 1ms initially, up to 1 second. */
+ /*
+ * Yield the processor.
+ */
__os_yield(NULL, ms * USEC_PER_MS);
- if ((ms <<= 1) > MS_PER_SEC)
- ms = MS_PER_SEC;
+ if ((ms <<= 1) > max_ms)
+ ms = max_ms;
goto loop;
}
@@ -158,19 +177,20 @@ relock:
* __db_tas_mutex_unlock --
* Release a lock.
*
- * PUBLIC: int __db_tas_mutex_unlock __P((DB_ENV *, MUTEX *));
+ * PUBLIC: int __db_tas_mutex_unlock __P((DB_ENV *, DB_MUTEX *));
*/
int
__db_tas_mutex_unlock(dbenv, mutexp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
- if (!dbenv->db_mutexlocks || F_ISSET(mutexp, MUTEX_IGNORE))
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING) || F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
#ifdef DIAGNOSTIC
if (!mutexp->locked)
- (void)write(STDERR_FILENO, MSG2, sizeof(MSG2) - 1);
+ __db_err(dbenv,
+ "__db_tas_mutex_unlock: ERROR: lock already unlocked");
#endif
#if defined(DIAGNOSTIC) || defined(HAVE_MUTEX_HPPA_MSEM_INIT)
mutexp->locked = 0;
@@ -183,13 +203,13 @@ __db_tas_mutex_unlock(dbenv, mutexp)
/*
* __db_tas_mutex_destroy --
- * Destroy a MUTEX.
+ * Destroy a DB_MUTEX.
*
- * PUBLIC: int __db_tas_mutex_destroy __P((MUTEX *));
+ * PUBLIC: int __db_tas_mutex_destroy __P((DB_MUTEX *));
*/
int
__db_tas_mutex_destroy(mutexp)
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
if (F_ISSET(mutexp, MUTEX_IGNORE))
return (0);
diff --git a/db/mutex/mut_win32.c b/db/mutex/mut_win32.c
index 8bf183b5f..b5cbfc731 100644
--- a/db/mutex/mut_win32.c
+++ b/db/mutex/mut_win32.c
@@ -1,21 +1,20 @@
/*
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2002
+ * Copyright (c) 2002-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: mut_win32.c,v 1.8 2002/09/10 02:37:25 bostic Exp ";
+static const char revid[] = "$Id: mut_win32.c,v 1.15 2003/05/05 19:55:03 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#include <unistd.h>
#endif
/*
@@ -51,7 +50,7 @@ __db_win32_mutex_init(dbenv, mutexp, flags)
u_int32_t save;
/*
- * The only setting/checking of the MUTEX_MPOOL flags is in the mutex
+ * The only setting/checking of the MUTEX_MPOOL flag is in the mutex
* mutex allocation code (__db_mutex_alloc/free). Preserve only that
* flag. This is safe because even if this flag was never explicitly
* set, but happened to be set in memory, it will never be checked or
@@ -74,9 +73,7 @@ __db_win32_mutex_init(dbenv, mutexp, flags)
}
mutexp->id = ((getpid() & 0xffff) << 16) ^ P_TO_UINT32(mutexp);
- mutexp->spins = __os_spin(dbenv);
F_SET(mutexp, MUTEX_INITED);
-
return (0);
}
@@ -92,7 +89,8 @@ __db_win32_mutex_lock(dbenv, mutexp)
DB_MUTEX *mutexp;
{
HANDLE event;
- int ret, ms, nspins;
+ u_int32_t nspins;
+ int ret, ms;
#ifdef MUTEX_DIAG
LARGE_INTEGER now;
#endif
@@ -105,9 +103,17 @@ __db_win32_mutex_lock(dbenv, mutexp)
ret = 0;
loop: /* Attempt to acquire the resource for N spins. */
- for (nspins = mutexp->spins; nspins > 0; --nspins) {
- if (!MUTEX_SET(&mutexp->tas))
+ for (nspins = dbenv->tas_spins; nspins > 0; --nspins) {
+ if (!MUTEX_SET(&mutexp->tas)) {
+ /*
+ * Some systems (notably those with newer Intel CPUs)
+ * need a small pause here. [#6975]
+ */
+#ifdef MUTEX_PAUSE
+ MUTEX_PAUSE
+#endif
continue;
+ }
#ifdef DIAGNOSTIC
if (mutexp->locked)
@@ -189,7 +195,7 @@ __db_win32_mutex_unlock(dbenv, mutexp)
MUTEX_UNSET(&mutexp->tas);
ret = 0;
-
+
if (mutexp->nwaiters > 0) {
GET_HANDLE(mutexp, event);
diff --git a/db/mutex/mutex.c b/db/mutex/mutex.c
index acc4af9bf..51ed121de 100644
--- a/db/mutex/mutex.c
+++ b/db/mutex/mutex.c
@@ -1,58 +1,152 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: mutex.c,v 11.14 2000/11/30 00:58:42 ubell Exp $";
+static const char revid[] = "$Id: mutex.c,v 11.39 2003/04/23 19:43:37 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <string.h>
#endif
#include "db_int.h"
+#if defined(MUTEX_NO_MALLOC_LOCKS) || defined(HAVE_MUTEX_SYSTEM_RESOURCES)
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/txn.h"
+#endif
+
+static int __db_mutex_alloc_int __P((DB_ENV *, REGINFO *, DB_MUTEX **));
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+static REGMAINT * __db_mutex_maint __P((DB_ENV *, REGINFO *));
+#endif
+
/*
- * __db_mutex_alloc --
- * Allocate and initialize a mutex.
+ * __db_mutex_setup --
+ * External interface to allocate, and/or initialize, record
+ * mutexes.
*
- * PUBLIC: int __db_mutex_alloc __P((DB_ENV *, REGINFO *, MUTEX **));
+ * PUBLIC: int __db_mutex_setup __P((DB_ENV *, REGINFO *, void *, u_int32_t));
*/
int
-__db_mutex_alloc(dbenv, infop, storep)
+__db_mutex_setup(dbenv, infop, ptr, flags)
DB_ENV *dbenv;
REGINFO *infop;
- MUTEX **storep;
+ void *ptr;
+ u_int32_t flags;
{
+ DB_MUTEX *mutex;
+ REGMAINT *maint;
+ u_int32_t iflags, offset;
int ret;
+ ret = 0;
/*
- * If the architecture supports mutexes in heap memory, use that
- * memory. If it doesn't, we have to allocate space in a region.
- *
- * XXX
- * There's a nasty starvation issue here for applications running
- * on systems that don't support mutexes in heap memory. If the
- * normal state of the entire region is dirty (e.g., mpool), then
- * we can run out of memory to allocate for mutexes when new files
- * are opened in the pool. We're not trying to fix this for now,
- * because the only known system where we can see this failure at
- * the moment is HP-UX 10.XX.
+ * If they indicated the region is not locked, then lock it.
+ * This is only needed when we have unusual mutex resources.
+ * (I.e. MUTEX_NO_MALLOC_LOCKS or HAVE_MUTEX_SYSTEM_RESOURCES)
*/
-#ifdef MUTEX_NO_MALLOC_LOCKS
- R_LOCK(dbenv, infop);
- ret = __db_shalloc(infop->addr, sizeof(MUTEX), MUTEX_ALIGN, storep);
- R_UNLOCK(dbenv, infop);
+#if defined(MUTEX_NO_MALLOC_LOCKS) || defined(HAVE_MUTEX_SYSTEM_RESOURCES)
+ if (!LF_ISSET(MUTEX_NO_RLOCK))
+ R_LOCK(dbenv, infop);
+#endif
+ /*
+ * Allocate the mutex if they asked us to.
+ */
+ mutex = NULL;
+ if (LF_ISSET(MUTEX_ALLOC)) {
+ if ((ret = __db_mutex_alloc_int(dbenv, infop, ptr)) != 0)
+ goto err;
+ mutex = *(DB_MUTEX **)ptr;
+ } else
+ mutex = (DB_MUTEX *)ptr;
+
+ /*
+ * Set up to initialize the mutex.
+ */
+ iflags = LF_ISSET(MUTEX_LOGICAL_LOCK | MUTEX_THREAD | MUTEX_SELF_BLOCK);
+ switch (infop->type) {
+ case REGION_TYPE_LOCK:
+ offset = P_TO_UINT32(mutex) + DB_FCNTL_OFF_LOCK;
+ break;
+ case REGION_TYPE_MPOOL:
+ offset = P_TO_UINT32(mutex) + DB_FCNTL_OFF_MPOOL;
+ break;
+ default:
+ offset = P_TO_UINT32(mutex) + DB_FCNTL_OFF_GEN;
+ break;
+ }
+ maint = NULL;
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ if (!LF_ISSET(MUTEX_NO_RECORD))
+ maint = (REGMAINT *)__db_mutex_maint(dbenv, infop);
+#endif
+
+ ret = __db_mutex_init(dbenv, mutex, offset, iflags, infop, maint);
+err:
+#if defined(MUTEX_NO_MALLOC_LOCKS) || defined(HAVE_MUTEX_SYSTEM_RESOURCES)
+ if (!LF_ISSET(MUTEX_NO_RLOCK))
+ R_UNLOCK(dbenv, infop);
+#endif
+ /*
+ * If we allocated the mutex but had an error on init'ing,
+ * then we must free it before returning.
+ * !!!
+ * Free must be done after releasing region lock.
+ */
+ if (ret != 0 && LF_ISSET(MUTEX_ALLOC) && mutex != NULL) {
+ __db_mutex_free(dbenv, infop, mutex);
+ *(DB_MUTEX **)ptr = NULL;
+ }
+ return (ret);
+}
+
+/*
+ * __db_mutex_alloc_int --
+ * Allocate and initialize a mutex.
+ */
+static int
+__db_mutex_alloc_int(dbenv, infop, storep)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+ DB_MUTEX **storep;
+{
+ int ret;
+
+ /*
+ * If the architecture supports mutexes in heap memory, use heap memory.
+ * If it doesn't, we have to allocate space in a region. If allocation
+ * in the region fails, fallback to allocating from the mpool region,
+ * because it's big, it almost always exists and if it's entirely dirty,
+ * we can free buffers until memory is available.
+ */
+#if defined(MUTEX_NO_MALLOC_LOCKS) || defined(HAVE_MUTEX_SYSTEM_RESOURCES)
+ ret = __db_shalloc(infop->addr, sizeof(DB_MUTEX), MUTEX_ALIGN, storep);
+
+ if (ret == ENOMEM && MPOOL_ON(dbenv)) {
+ DB_MPOOL *dbmp;
+
+ dbmp = dbenv->mp_handle;
+ if ((ret = __memp_alloc(dbmp,
+ dbmp->reginfo, NULL, sizeof(DB_MUTEX), NULL, storep)) == 0)
+ (*storep)->flags = MUTEX_MPOOL;
+ } else
+ (*storep)->flags = 0;
#else
COMPQUIET(dbenv, NULL);
COMPQUIET(infop, NULL);
- ret = __os_calloc(dbenv, 1, sizeof(MUTEX), storep);
+ ret = __os_calloc(dbenv, 1, sizeof(DB_MUTEX), storep);
#endif
if (ret != 0)
__db_err(dbenv, "Unable to allocate memory for mutex");
@@ -63,41 +157,47 @@ __db_mutex_alloc(dbenv, infop, storep)
* __db_mutex_free --
* Free a mutex.
*
- * PUBLIC: void __db_mutex_free __P((DB_ENV *, REGINFO *, MUTEX *));
+ * PUBLIC: void __db_mutex_free __P((DB_ENV *, REGINFO *, DB_MUTEX *));
*/
void
__db_mutex_free(dbenv, infop, mutexp)
DB_ENV *dbenv;
REGINFO *infop;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
{
+#if defined(MUTEX_NO_MALLOC_LOCKS) || defined(HAVE_MUTEX_SYSTEM_RESOURCES)
+ R_LOCK(dbenv, infop);
+#if defined(HAVE_MUTEX_SYSTEM_RESOURCES)
if (F_ISSET(mutexp, MUTEX_INITED))
- __db_mutex_destroy(mutexp);
+ __db_shlocks_clear(mutexp, infop, NULL);
+#endif
+ if (F_ISSET(mutexp, MUTEX_MPOOL)) {
+ DB_MPOOL *dbmp;
-#ifdef MUTEX_NO_MALLOC_LOCKS
- R_LOCK(dbenv, infop);
- __db_shalloc_free(infop->addr, mutexp);
+ dbmp = dbenv->mp_handle;
+ R_LOCK(dbenv, dbmp->reginfo);
+ __db_shalloc_free(dbmp->reginfo[0].addr, mutexp);
+ R_UNLOCK(dbenv, dbmp->reginfo);
+ } else
+ __db_shalloc_free(infop->addr, mutexp);
R_UNLOCK(dbenv, infop);
#else
COMPQUIET(dbenv, NULL);
COMPQUIET(infop, NULL);
- __os_free(mutexp, sizeof(*mutexp));
+ __os_free(dbenv, mutexp);
#endif
}
-#ifdef MUTEX_SYSTEM_RESOURCES
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
/*
* __db_shreg_locks_record --
* Record an entry in the shared locks area.
* Region lock must be held in caller.
- *
- * PUBLIC: int __db_shreg_locks_record __P((DB_ENV *, MUTEX *, REGINFO *,
- * PUBLIC: REGMAINT *));
*/
-int
+static int
__db_shreg_locks_record(dbenv, mutexp, infop, rp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
REGINFO *infop;
REGMAINT *rp;
{
@@ -110,7 +210,7 @@ __db_shreg_locks_record(dbenv, mutexp, infop, rp)
i = (roff_t *)R_ADDR(infop, rp->regmutex_hint) - &rp->regmutexes[0];
if (rp->regmutexes[i] != INVALID_ROFF) {
/*
- * Our hint failed, search for a open slot.
+ * Our hint failed, search for an open slot.
*/
rp->stat.st_hint_miss++;
for (i = 0; i < rp->reglocks; i++)
@@ -140,29 +240,33 @@ __db_shreg_locks_record(dbenv, mutexp, infop, rp)
/*
* __db_shreg_locks_clear --
* Erase an entry in the shared locks area.
- * Region lock must be held in caller.
*
- * PUBLIC: void __db_shreg_locks_clear __P((MUTEX *, REGINFO *, REGMAINT *));
+ * PUBLIC: void __db_shreg_locks_clear __P((DB_MUTEX *, REGINFO *, REGMAINT *));
*/
void
__db_shreg_locks_clear(mutexp, infop, rp)
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
REGINFO *infop;
REGMAINT *rp;
{
+ /*
+ * !!!
+ * Assumes the caller's region lock is held.
+ */
if (!F_ISSET(mutexp, MUTEX_INITED))
return;
/*
- * This function is generally only called on a forcible
- * remove of an environment. We recorded our index in
- * the mutex. Find it and clear it.
+ * This function is generally only called on a forcible remove of an
+ * environment. We recorded our index in the mutex, find and clear it.
*/
DB_ASSERT(mutexp->reg_off != INVALID_ROFF);
DB_ASSERT(*(roff_t *)R_ADDR(infop, mutexp->reg_off) == \
R_OFFSET(infop, mutexp));
*(roff_t *)R_ADDR(infop, mutexp->reg_off) = 0;
- rp->regmutex_hint = mutexp->reg_off;
- rp->stat.st_clears++;
+ if (rp != NULL) {
+ rp->regmutex_hint = mutexp->reg_off;
+ rp->stat.st_clears++;
+ }
mutexp->reg_off = INVALID_ROFF;
__db_mutex_destroy(mutexp);
}
@@ -186,7 +290,7 @@ __db_shreg_locks_destroy(infop, rp)
for (i = 0; i < rp->reglocks; i++)
if (rp->regmutexes[i] != 0) {
rp->stat.st_destroys++;
- __db_mutex_destroy((MUTEX *)R_ADDR(infop,
+ __db_mutex_destroy((DB_MUTEX *)R_ADDR(infop,
rp->regmutexes[i]));
}
}
@@ -195,13 +299,13 @@ __db_shreg_locks_destroy(infop, rp)
* __db_shreg_mutex_init --
* Initialize a shared memory mutex.
*
- * PUBLIC: int __db_shreg_mutex_init __P((DB_ENV *, MUTEX *, u_int32_t,
+ * PUBLIC: int __db_shreg_mutex_init __P((DB_ENV *, DB_MUTEX *, u_int32_t,
* PUBLIC: u_int32_t, REGINFO *, REGMAINT *));
*/
int
__db_shreg_mutex_init(dbenv, mutexp, offset, flags, infop, rp)
DB_ENV *dbenv;
- MUTEX *mutexp;
+ DB_MUTEX *mutexp;
u_int32_t offset;
u_int32_t flags;
REGINFO *infop;
@@ -209,18 +313,23 @@ __db_shreg_mutex_init(dbenv, mutexp, offset, flags, infop, rp)
{
int ret;
- if ((ret = __db_mutex_init(dbenv, mutexp, offset, flags)) != 0)
+ if ((ret = __db_mutex_init_int(dbenv, mutexp, offset, flags)) != 0)
+ return (ret);
+ /*
+ * Some mutexes cannot be recorded, but we want one interface.
+ * So, if we have no REGMAINT, then just return.
+ */
+ if (rp == NULL)
return (ret);
/*
* !!!
- * Since __db_mutex_init is a macro, we may not be
+ * Since __db_mutex_init_int is a macro, we may not be
* using the 'offset' as it is only used for one type
* of mutex. We COMPQUIET it here, after the call above.
*/
COMPQUIET(offset, 0);
+ ret = __db_shreg_locks_record(dbenv, mutexp, infop, rp);
- if (!F_ISSET(mutexp, MUTEX_THREAD))
- ret = __db_shreg_locks_record(dbenv, mutexp, infop, rp);
/*
* If we couldn't record it and we are returning an error,
* we need to destroy the mutex we just created.
@@ -244,10 +353,43 @@ __db_shreg_maintinit(infop, addr, size)
size_t size;
{
REGMAINT *rp;
+ u_int32_t i;
rp = (REGMAINT *)addr;
memset(addr, 0, sizeof(REGMAINT));
rp->reglocks = size / sizeof(roff_t);
rp->regmutex_hint = R_OFFSET(infop, &rp->regmutexes[0]);
+ for (i = 0; i < rp->reglocks; i++)
+ rp->regmutexes[i] = INVALID_ROFF;
+}
+
+static REGMAINT *
+__db_mutex_maint(dbenv, infop)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+{
+ roff_t moff;
+
+ switch (infop->type) {
+ case REGION_TYPE_LOCK:
+ moff = ((DB_LOCKREGION *)R_ADDR(infop,
+ infop->rp->primary))->maint_off;
+ break;
+ case REGION_TYPE_LOG:
+ moff = ((LOG *)R_ADDR(infop, infop->rp->primary))->maint_off;
+ break;
+ case REGION_TYPE_MPOOL:
+ moff = ((MPOOL *)R_ADDR(infop, infop->rp->primary))->maint_off;
+ break;
+ case REGION_TYPE_TXN:
+ moff = ((DB_TXNREGION *)R_ADDR(infop,
+ infop->rp->primary))->maint_off;
+ break;
+ default:
+ __db_err(dbenv,
+ "Attempting to record mutex in a region not set up to do so");
+ return (NULL);
+ }
+ return ((REGMAINT *)R_ADDR(infop, moff));
}
-#endif /* MUTEX_SYSTEM_RESOURCES */
+#endif /* HAVE_MUTEX_SYSTEM_RESOURCES */
diff --git a/db/mutex/tm.c b/db/mutex/tm.c
index e866981ec..49f1ac7eb 100644
--- a/db/mutex/tm.c
+++ b/db/mutex/tm.c
@@ -15,39 +15,70 @@
#include <string.h>
#include <unistd.h>
+#if defined(MUTEX_THREAD_TEST)
+#include <pthread.h>
+#endif
+
#include "db_int.h"
-void exec_one();
-void file_init();
-void map_file();
-void mutex_destroy();
-void mutex_init();
-void mutex_stats();
-void run_one();
-void unmap_file();
+#ifndef HAVE_QNX
+#define shm_open open
+#define shm_unlink remove
+#endif
+
+void exec_proc(u_long, char *, char *);
+void map_file(u_int8_t **, u_int8_t **, u_int8_t **, int *);
+void tm_file_init(void);
+void run_locker(u_long);
+void *run_lthread(void *);
+void run_wakeup(u_long);
+void *run_wthread(void *);
+void tm_mutex_destroy(void);
+void tm_mutex_init(void);
+void tm_mutex_stats(void);
+void unmap_file(u_int8_t *, int);
+int usage(void);
+
+#define MT_FILE "mutex.file"
+#define MT_FILE_QUIT "mutex.file.quit"
-int align; /* Mutex alignment in file. */
DB_ENV dbenv; /* Fake out DB. */
-char *file = "mutex.file"; /* Backing file. */
size_t len; /* Backing file size. */
+int align; /* Mutex alignment in file. */
+
int maxlocks = 20; /* -l: Backing locks. */
int nlocks = 10000; /* -n: Locks per processes. */
int nprocs = 20; /* -p: Processes. */
-int child; /* -s: Slave. */
+int nthreads = 1; /* -t: Threads. */
int verbose; /* -v: Verbosity. */
+typedef struct {
+ DB_MUTEX mutex; /* Mutex. */
+ u_long id; /* Holder's ID. */
+#define MUTEX_WAKEME 0x01 /* Request to awake. */
+ u_int flags;
+} TM;
+
int
main(argc, argv)
int argc;
char *argv[];
{
+ enum {LOCKER, WAKEUP, PARENT} rtype;
extern int optind;
extern char *optarg;
pid_t pid;
- int ch, i, status;
+ u_long id;
+ int ch, fd, eval, i, status;
+ char *p, *tmpath;
- while ((ch = getopt(argc, argv, "l:n:p:sv")) != EOF)
- switch(ch) {
+ __os_spin(&dbenv); /* Fake out DB. */
+
+ rtype = PARENT;
+ id = 0;
+ tmpath = argv[0];
+ while ((ch = getopt(argc, argv, "l:n:p:T:t:v")) != EOF)
+ switch (ch) {
case 'l':
maxlocks = atoi(optarg);
break;
@@ -57,284 +88,706 @@ main(argc, argv)
case 'p':
nprocs = atoi(optarg);
break;
- case 's':
- child = 1;
+ case 't':
+ if ((nthreads = atoi(optarg)) == 0)
+ nthreads = 1;
+#if !defined(MUTEX_THREAD_TEST)
+ if (nthreads != 1) {
+ (void)fprintf(stderr,
+ "tm: thread support not available or not compiled for this platform.\n");
+ return (EXIT_FAILURE);
+ }
+#endif
+ break;
+ case 'T':
+ if (!memcmp(optarg, "locker", sizeof("locker") - 1))
+ rtype = LOCKER;
+ else if (
+ !memcmp(optarg, "wakeup", sizeof("wakeup") - 1))
+ rtype = WAKEUP;
+ else
+ return (usage());
+ if ((p = strchr(optarg, '=')) == NULL)
+ return (usage());
+ id = atoi(p + 1);
break;
case 'v':
verbose = 1;
break;
case '?':
default:
- (void)fprintf(stderr,
- "usage: %s [-l maxlocks] [-n locks] [-p procs]\n",
- argv[0]);
- exit(1);
+ return (usage());
}
argc -= optind;
argv += optind;
/*
- * Needed to figure out the file layout.
- */
- align = ALIGN(sizeof(MUTEX) * 2, MUTEX_ALIGN);
- len = align * maxlocks + sizeof(u_int32_t) * maxlocks;
-
- /*
- * Hack DBENV to work.
+ * The file layout:
+ * TM[1] per-thread mutex array lock
+ * TM[nthreads] per-thread mutex array
+ * TM[maxlocks] per-lock mutex array
*/
- dbenv.db_mutexlocks = 1;
-
- if (child) {
- run_one();
- exit(0);
+ align = ALIGN(sizeof(TM), MUTEX_ALIGN);
+ len = align * (1 + nthreads * nprocs + maxlocks);
+
+ switch (rtype) {
+ case PARENT:
+ break;
+ case LOCKER:
+ run_locker(id);
+ return (EXIT_SUCCESS);
+ case WAKEUP:
+ run_wakeup(id);
+ return (EXIT_SUCCESS);
}
- file_init();
- mutex_init();
+ printf(
+ "tm: %d processes, %d threads/process, %d lock requests from %d locks\n",
+ nprocs, nthreads, nlocks, maxlocks);
+ printf(
+ "tm: mutex alignment %lu, structure alignment %d, backing file %lu bytes\n",
+ (u_long)MUTEX_ALIGN, align, (u_long)len);
+
+ tm_file_init(); /* Initialize backing file. */
+ tm_mutex_init(); /* Initialize file's mutexes. */
- printf("Run: %d processes (%d requests from %d locks):",
- nprocs, nlocks, maxlocks);
- for (i = 0; i < nprocs; ++i)
- switch (pid = fork()) {
+ for (i = 0; i < nprocs; ++i) {
+ switch (fork()) {
case -1:
perror("fork");
- exit(1);
+ return (EXIT_FAILURE);
case 0:
- exec_one();
+ exec_proc(id, tmpath, "locker");
break;
default:
- printf(" %lu", (u_long)pid);
break;
}
- printf("\n");
+ id += nthreads;
+ }
- while ((pid = wait(&status)) != (pid_t)-1)
- printf("%d: exited %d\n", pid, WEXITSTATUS(status));
- fflush(stdout);
+ (void)remove(MT_FILE_QUIT);
+
+ switch (fork()) {
+ case -1:
+ perror("fork");
+ return (EXIT_FAILURE);
+ case 0:
+ exec_proc(id, tmpath, "wakeup");
+ break;
+ default:
+ break;
+ }
+ ++id;
- printf("Statistics...\n");
- mutex_stats();
+ /* Wait for locking threads. */
+ for (i = 0, eval = EXIT_SUCCESS; i < nprocs; ++i)
+ if ((pid = wait(&status)) != (pid_t)-1) {
+ fprintf(stderr,
+ "%lu: exited %d\n", (u_long)pid, WEXITSTATUS(status));
+ if (WEXITSTATUS(status) != 0)
+ eval = EXIT_FAILURE;
+ }
+
+ /* Signal wakeup thread to exit. */
+ if ((fd = open(MT_FILE_QUIT, O_WRONLY | O_CREAT, 0664)) == -1) {
+ fprintf(stderr, "tm: %s\n", strerror(errno));
+ status = EXIT_FAILURE;
+ }
+ (void)close(fd);
+
+ /* Wait for wakeup thread. */
+ if ((pid = wait(&status)) != (pid_t)-1) {
+ fprintf(stderr,
+ "%lu: exited %d\n", (u_long)pid, WEXITSTATUS(status));
+ if (WEXITSTATUS(status) != 0)
+ eval = EXIT_FAILURE;
+ }
+
+ (void)remove(MT_FILE_QUIT);
- mutex_destroy();
+ tm_mutex_stats(); /* Display run statistics. */
+ tm_mutex_destroy(); /* Destroy region. */
- exit(0);
+ printf("tm: exit status: %s\n",
+ eval == EXIT_SUCCESS ? "success" : "failed!");
+ return (eval);
}
void
-exec_one()
+exec_proc(id, tmpath, typearg)
+ u_long id;
+ char *tmpath, *typearg;
{
- char *argv[10], **ap, b_l[10], b_n[10];
+ char *argv[10], **ap, b_l[10], b_n[10], b_p[10], b_t[10], b_T[10];
ap = &argv[0];
*ap++ = "tm";
sprintf(b_l, "-l%d", maxlocks);
*ap++ = b_l;
sprintf(b_n, "-n%d", nlocks);
+ *ap++ = b_p;
+ sprintf(b_p, "-p%d", nprocs);
*ap++ = b_n;
- *ap++ = "-s";
+ sprintf(b_t, "-t%d", nthreads);
+ *ap++ = b_t;
+ sprintf(b_T, "-T%s=%lu", typearg, id);
+ *ap++ = b_T;
if (verbose)
*ap++ = "-v";
+
*ap = NULL;
- execv("./tm", argv);
+ execvp(tmpath, argv);
- fprintf(stderr, "./tm: %s\n", strerror(errno));
- exit(1);
+ fprintf(stderr, "%s: %s\n", tmpath, strerror(errno));
+ exit(EXIT_FAILURE);
}
void
-run_one()
+run_locker(id)
+ u_long id;
{
- MUTEX *maddr, *mp;
- pid_t pid, *pidlist;
- int fd, i, lock, remap;
- char buf[128];
+#if defined(MUTEX_THREAD_TEST)
+ pthread_t *kidsp;
+ int i;
+ void *retp;
+#endif
+ int status;
- __os_sleep(&dbenv, 3, 0); /* Let everyone catch up. */
+ (void)__os_sleep(&dbenv, 3, 0); /* Let everyone catch up. */
- pid = getpid();
- srand((u_int)time(NULL) / pid);
+ srand((u_int)time(NULL) % getpid()); /* Initialize random numbers. */
- for (maddr = NULL;;) {
- if (maddr == NULL) {
- map_file(&maddr, &fd);
- pidlist =
- (pid_t *)((u_int8_t *)maddr + align * maxlocks);
- remap = (rand() % 100) + 35;
+#if defined(MUTEX_THREAD_TEST)
+ /*
+ * Spawn off threads. We have nthreads all locking and going to
+ * sleep, and one other thread cycling through and waking them up.
+ */
+ if ((kidsp =
+ (pthread_t *)calloc(sizeof(pthread_t), nthreads)) == NULL) {
+ fprintf(stderr, "tm: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ for (i = 0; i < nthreads; i++)
+ if ((errno = pthread_create(
+ &kidsp[i], NULL, run_lthread, (void *)(id + i))) != 0) {
+ fprintf(stderr, "tm: failed spawning thread: %s\n",
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ /* Wait for the threads to exit. */
+ status = EXIT_SUCCESS;
+ for (i = 0; i < nthreads; i++) {
+ pthread_join(kidsp[i], &retp);
+ if (retp != NULL) {
+ fprintf(stderr, "tm: thread exited with error\n");
+ status = EXIT_FAILURE;
+ }
+ }
+ free(kidsp);
+#else
+ status = (int)run_lthread((void *)id);
+#endif
+ exit(status);
+}
+void *
+run_lthread(arg)
+ void *arg;
+{
+ TM *gp, *mp, *tp;
+ u_long id, tid;
+ int fd, i, lock, nl, remap;
+ u_int8_t *gm_addr, *lm_addr, *tm_addr;
+
+ id = (int)arg;
+#if defined(MUTEX_THREAD_TEST)
+ tid = (u_long)pthread_self();
+#else
+ tid = 0;
+#endif
+ printf("Locker: ID %03lu (PID: %lu; TID: %lx)\n",
+ id, (u_long)getpid(), tid);
+
+ nl = nlocks;
+ for (gm_addr = NULL, gp = tp = NULL, remap = 0;;) {
+ /* Map in the file as necessary. */
+ if (gm_addr == NULL) {
+ map_file(&gm_addr, &tm_addr, &lm_addr, &fd);
+ gp = (TM *)gm_addr;
+ tp = (TM *)(tm_addr + id * align);
if (verbose)
- printf("%lu: map @ %lx\n",
- (u_long)pid, (u_long)maddr);
+ printf(
+ "%03lu: map threads @ %#lx; locks @ %#lx\n",
+ id, (u_long)tm_addr, (u_long)lm_addr);
+ remap = (rand() % 100) + 35;
}
+ /* Select and acquire a data lock. */
lock = rand() % maxlocks;
- if (verbose) {
- (void)sprintf(buf,
- "%lu %lu:\n", (u_long)pid, (u_long)lock);
- write(1, buf, strlen(buf));
+ mp = (TM *)(lm_addr + lock * align);
+ if (verbose)
+ printf("%03lu: lock %d @ %#lx\n",
+ id, lock, (u_long)&mp->mutex);
+
+ if (__db_mutex_lock(&dbenv, &mp->mutex)) {
+ fprintf(stderr, "%03lu: never got lock %d: %s\n",
+ id, lock, strerror(errno));
+ return ((void *)EXIT_FAILURE);
}
- mp = (MUTEX *)((u_int8_t *)maddr + lock * align);
- if (__db_mutex_lock(&dbenv, mp, fd)) {
- fprintf(stderr, "%lu: never got lock\n", (u_long)pid);
- exit(1);
- }
- if (pidlist[lock] != 0) {
+ if (mp->id != 0) {
fprintf(stderr,
- "RACE! (%lu granted lock %d held by %lu)\n",
- (u_long)pid, lock, (u_long)pidlist[lock]);
- exit(1);
+ "RACE! (%03lu granted lock %d held by %03lu)\n",
+ id, lock, mp->id);
+ return ((void *)EXIT_FAILURE);
}
- pidlist[lock] = pid;
+ mp->id = id;
+
+ /*
+ * Pretend to do some work, periodically checking to see if
+ * we still hold the mutex.
+ */
for (i = 0; i < 3; ++i) {
- __os_sleep(&dbenv, 0, rand() % 50);
- if (pidlist[lock] != pid) {
+ (void)__os_sleep(&dbenv, 0, rand() % 3);
+ if (mp->id != id) {
fprintf(stderr,
- "RACE! (%lu stole lock %d from %lu)\n",
- (u_long)pidlist[lock], lock, (u_long)pid);
- exit(1);
+ "RACE! (%03lu stole lock %d from %03lu)\n",
+ mp->id, lock, id);
+ return ((void *)EXIT_FAILURE);
}
}
- pidlist[lock] = 0;
- if (__db_mutex_unlock(&dbenv, mp)) {
- fprintf(stderr, "%d: wakeup failed\n", pid);
- exit(1);
+
+ /*
+ * Test self-blocking and unlocking by other threads/processes:
+ *
+ * acquire the global lock
+ * set our wakeup flag
+ * release the global lock
+ * acquire our per-thread lock
+ *
+ * The wakeup thread will wake us up.
+ */
+ if (__db_mutex_lock(&dbenv, &gp->mutex)) {
+ fprintf(stderr,
+ "%03lu: global lock: %s\n", id, strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+ if (tp->id != 0 && tp->id != id) {
+ fprintf(stderr,
+ "%03lu: per-thread mutex isn't mine, owned by %03lu\n",
+ id, tp->id);
+ return ((void *)EXIT_FAILURE);
+ }
+ tp->id = id;
+ if (verbose)
+ printf("%03lu: self-blocking\n", id);
+ if (F_ISSET(tp, MUTEX_WAKEME)) {
+ fprintf(stderr,
+ "%03lu: wakeup flag incorrectly set\n", id);
+ return ((void *)EXIT_FAILURE);
+ }
+ F_SET(tp, MUTEX_WAKEME);
+ if (__db_mutex_unlock(&dbenv, &gp->mutex)) {
+ fprintf(stderr,
+ "%03lu: global unlock: %s\n", id, strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+ if (__db_mutex_lock(&dbenv, &tp->mutex)) {
+ fprintf(stderr, "%03lu: per-thread lock: %s\n",
+ id, strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+ /* Time passes... */
+ if (F_ISSET(tp, MUTEX_WAKEME)) {
+ fprintf(stderr, "%03lu: wakeup flag not cleared\n", id);
+ return ((void *)EXIT_FAILURE);
}
- if (--remap == 0 || --nlocks == 0) {
- unmap_file(maddr, fd);
- maddr = NULL;
- if (verbose)
- printf("%lu: unmap\n", (u_long)pid);
+ if (verbose)
+ printf("%03lu: release %d @ %#lx\n",
+ id, lock, (u_long)&mp->mutex);
- __os_sleep(&dbenv, rand() % 3, 0);
+ /* Release the data lock. */
+ mp->id = 0;
+ if (__db_mutex_unlock(&dbenv, &mp->mutex)) {
+ fprintf(stderr,
+ "%03lu: lock release: %s\n", id, strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
- if (nlocks == 0)
+ if (--nl % 100 == 0)
+ fprintf(stderr, "%03lu: %d\n", id, nl);
+
+ if (nl == 0 || --remap == 0) {
+ if (verbose)
+ printf("%03lu: re-mapping\n", id);
+ unmap_file(gm_addr, fd);
+ gm_addr = NULL;
+
+ if (nl == 0)
break;
- }
- if (nlocks % 100 == 0)
- write(1, ".", 1);
+ (void)__os_sleep(&dbenv, 0, rand() % 500);
+ }
}
- exit(0);
+ return (NULL);
}
void
-file_init()
+run_wakeup(id)
+ u_long id;
{
- int fd;
+#if defined(MUTEX_THREAD_TEST)
+ pthread_t wakep;
+ int status;
+ void *retp;
+#endif
+ (void)__os_sleep(&dbenv, 3, 0); /* Let everyone catch up. */
- printf("Initialize the backing file...\n");
+ srand((u_int)time(NULL) % getpid()); /* Initialize random numbers. */
+#if defined(MUTEX_THREAD_TEST)
/*
- * Initialize the backing file.
- *
- * Find out how much space we need to correctly align maxlocks locks
- * plus maxlocks check words and create the file.
+ * Spawn off wakeup thread.
*/
- (void)unlink(file);
- if ((fd = open(file, O_CREAT | O_RDWR | O_TRUNC,
+ if ((errno = pthread_create(
+ &wakep, NULL, run_wthread, (void *)id)) != 0) {
+ fprintf(stderr, "tm: failed spawning wakeup thread: %s\n",
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * run_locker will create a file when the wakeup thread is no
+ * longer needed.
+ */
+ status = 0;
+ pthread_join(wakep, &retp);
+ if (retp != NULL) {
+ fprintf(stderr, "tm: wakeup thread exited with error\n");
+ status = EXIT_FAILURE;
+ }
+
+ exit(status);
+#else
+ exit((int)run_wthread((void *)id));
+#endif
+}
+
+/*
+ * run_wthread --
+ * Thread to wake up other threads that are sleeping.
+ */
+void *
+run_wthread(arg)
+ void *arg;
+{
+ struct stat sb;
+ TM *gp, *tp;
+ u_long id, tid;
+ int fd, check_id;
+ u_int8_t *gm_addr, *tm_addr;
+
+ id = (int)arg;
+#if defined(MUTEX_THREAD_TEST)
+ tid = (u_long)pthread_self();
+#else
+ tid = 0;
+#endif
+ printf("Wakeup: ID %03lu (PID: %lu; TID: %lx)\n",
+ id, (u_long)getpid(), tid);
+
+ arg = NULL;
+ map_file(&gm_addr, &tm_addr, NULL, &fd);
+ if (verbose)
+ printf("%03lu: map threads @ %#lx\n", id, (u_long)tm_addr);
+ gp = (TM *)gm_addr;
+
+ /* Loop, waking up sleepers and periodically sleeping ourselves. */
+ for (check_id = 0;; ++check_id) {
+ /* Check to see if the locking threads have finished. */
+ if (stat(MT_FILE_QUIT, &sb) == 0)
+ break;
+
+ /* Check for ID wraparound. */
+ if (check_id == nthreads * nprocs)
+ check_id = 0;
+
+ /* Check for a thread that needs a wakeup. */
+ tp = (TM *)(tm_addr + check_id * align);
+ if (!F_ISSET(tp, MUTEX_WAKEME))
+ continue;
+
+ if (verbose)
+ printf("%03lu: wakeup thread %03lu @ %#lx\n",
+ id, tp->id, (u_long)&tp->mutex);
+
+ /* Acquire the global lock. */
+ if (__db_mutex_lock(&dbenv, &gp->mutex)) {
+ fprintf(stderr,
+ "wakeup: global lock: %s\n", strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+
+ F_CLR(tp, MUTEX_WAKEME);
+ if (__db_mutex_unlock(&dbenv, &tp->mutex)) {
+ fprintf(stderr,
+ "wakeup: unlock: %s\n", strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+
+ if (__db_mutex_unlock(&dbenv, &gp->mutex)) {
+ fprintf(stderr,
+ "wakeup: global unlock: %s\n", strerror(errno));
+ return ((void *)EXIT_FAILURE);
+ }
+
+ (void)__os_sleep(&dbenv, 0, rand() % 3);
+ }
+ return (NULL);
+}
+
+/*
+ * tm_file_init --
+ * Initialize the backing file.
+ */
+void
+tm_file_init()
+{
+ int fd;
+
+ /* Initialize the backing file. */
+ if (verbose)
+ printf("Create the backing file.\n");
+
+ (void)shm_unlink(MT_FILE);
+
+ if ((fd = shm_open(
+ MT_FILE, O_CREAT | O_RDWR | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)) == -1) {
- (void)fprintf(stderr, "%s: %s\n", file, strerror(errno));
- exit(1);
+ (void)fprintf(stderr,
+ "%s: open: %s\n", MT_FILE, strerror(errno));
+ exit(EXIT_FAILURE);
}
+
if (lseek(fd, (off_t)len, SEEK_SET) != len || write(fd, &fd, 1) != 1) {
(void)fprintf(stderr,
- "%s: seek/write: %s\n", file, strerror(errno));
- exit(1);
+ "%s: seek/write: %s\n", MT_FILE, strerror(errno));
+ exit(EXIT_FAILURE);
}
(void)close(fd);
}
+/*
+ * tm_mutex_init --
+ * Initialize the mutexes.
+ */
void
-mutex_init()
+tm_mutex_init()
{
- MUTEX *maddr, *mp;
+ TM *mp;
int fd, i;
+ u_int8_t *gm_addr, *lm_addr, *tm_addr;
- printf("Initialize the mutexes...\n");
- map_file(&maddr, &fd);
- for (i = 0, mp = maddr;
- i < maxlocks; ++i, mp = (MUTEX *)((u_int8_t *)mp + align))
- if (__db_mutex_init(&dbenv, mp, 0, 0)) {
- fprintf(stderr, "__db_mutex_init (%d): %s\n",
- i + 1, strerror(errno));
- exit(1);
+ map_file(&gm_addr, &tm_addr, &lm_addr, &fd);
+ if (verbose)
+ printf("init: map threads @ %#lx; locks @ %#lx\n",
+ (u_long)tm_addr, (u_long)lm_addr);
+
+ if (verbose)
+ printf("Initialize the global mutex:\n");
+ mp = (TM *)gm_addr;
+ if (__db_mutex_init_int(&dbenv, &mp->mutex, 0, 0)) {
+ fprintf(stderr,
+ "__db_mutex_init (global): %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (verbose)
+ printf("\t@ %#lx\n", (u_long)&mp->mutex);
+
+ if (verbose)
+ printf(
+ "Initialize %d per-thread mutexes:\n", nthreads * nprocs);
+ for (i = 0; i < nthreads * nprocs; ++i) {
+ mp = (TM *)(tm_addr + i * align);
+ if (__db_mutex_init_int(
+ &dbenv, &mp->mutex, 0, MUTEX_SELF_BLOCK)) {
+ fprintf(stderr, "__db_mutex_init (per-thread %d): %s\n",
+ i, strerror(errno));
+ exit(EXIT_FAILURE);
}
- unmap_file(maddr, fd);
+ if (__db_mutex_lock(&dbenv, &mp->mutex)) {
+ fprintf(stderr, "__db_mutex_lock (per-thread %d): %s\n",
+ i, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (verbose)
+ printf("\t@ %#lx\n", (u_long)&mp->mutex);
+ }
+
+ if (verbose)
+ printf("Initialize %d per-lock mutexes:\n", maxlocks);
+ for (i = 0; i < maxlocks; ++i) {
+ mp = (TM *)(lm_addr + i * align);
+ if (__db_mutex_init_int(&dbenv, &mp->mutex, 0, 0)) {
+ fprintf(stderr, "__db_mutex_init (per-lock: %d): %s\n",
+ i, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (verbose)
+ printf("\t@ %#lx\n", (u_long)&mp->mutex);
+ }
+
+ unmap_file(gm_addr, fd);
}
+/*
+ * tm_mutex_destroy --
+ * Destroy the mutexes.
+ */
void
-mutex_destroy()
+tm_mutex_destroy()
{
- MUTEX *maddr, *mp;
+ TM *gp, *mp;
int fd, i;
+ u_int8_t *gm_addr, *lm_addr, *tm_addr;
+
+ map_file(&gm_addr, &tm_addr, &lm_addr, &fd);
- map_file(&maddr, &fd);
- for (i = 0, mp = maddr;
- i < maxlocks; ++i, mp = (MUTEX *)((u_int8_t *)mp + align))
- if (__db_mutex_destroy(mp)) {
- fprintf(stderr, "__db_mutex_destroy (%d): %s\n",
- i + 1, strerror(errno));
- exit(1);
+ if (verbose)
+ printf("Destroy the global mutex.\n");
+ gp = (TM *)gm_addr;
+ if (__db_mutex_destroy(&gp->mutex)) {
+ fprintf(stderr,
+ "__db_mutex_destroy (global): %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ if (verbose)
+ printf("Destroy the per-thread mutexes.\n");
+ for (i = 0; i < nthreads * nprocs; ++i) {
+ mp = (TM *)(tm_addr + i * align);
+ if (__db_mutex_destroy(&mp->mutex)) {
+ fprintf(stderr,
+ "__db_mutex_destroy (per-thread %d): %s\n",
+ i, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (verbose)
+ printf("Destroy the per-lock mutexes.\n");
+ for (i = 0; i < maxlocks; ++i) {
+ mp = (TM *)(tm_addr + i * align);
+ if (__db_mutex_destroy(&mp->mutex)) {
+ fprintf(stderr,
+ "__db_mutex_destroy (per-lock: %d): %s\n",
+ i, strerror(errno));
+ exit(EXIT_FAILURE);
}
- unmap_file(maddr, fd);
+ }
+
+ unmap_file(gm_addr, fd);
+
+ (void)shm_unlink(MT_FILE);
}
+/*
+ * tm_mutex_stats --
+ * Display mutex statistics.
+ */
void
-mutex_stats()
+tm_mutex_stats()
{
- MUTEX *maddr, *mp;
+ TM *mp;
int fd, i;
+ u_int8_t *gm_addr, *lm_addr;
+
+ map_file(&gm_addr, NULL, &lm_addr, &fd);
- map_file(&maddr, &fd);
- for (i = 0, mp = maddr;
- i < maxlocks; ++i, mp = (MUTEX *)((u_int8_t *)mp + align))
- printf("mutex %2d: wait: %2lu; no wait %2lu\n", i,
- (u_long)mp->mutex_set_wait, (u_long)mp->mutex_set_nowait);
- unmap_file(maddr, fd);
+ printf("Per-lock mutex statistics.\n");
+ for (i = 0; i < maxlocks; ++i) {
+ mp = (TM *)(lm_addr + i * align);
+ printf("mutex %2d: wait: %lu; no wait %lu\n", i,
+ (u_long)mp->mutex.mutex_set_wait,
+ (u_long)mp->mutex.mutex_set_nowait);
+ }
+
+ unmap_file(gm_addr, fd);
}
+/*
+ * map_file --
+ * Map in the backing file.
+ */
void
-map_file(maddrp, fdp)
- MUTEX **maddrp;
+map_file(gm_addrp, tm_addrp, lm_addrp, fdp)
+ u_int8_t **gm_addrp, **tm_addrp, **lm_addrp;
int *fdp;
{
- MUTEX *maddr;
+ void *addr;
int fd;
#ifndef MAP_FAILED
-#define MAP_FAILED (MUTEX *)-1
+#define MAP_FAILED (void *)-1
#endif
#ifndef MAP_FILE
#define MAP_FILE 0
#endif
- if ((fd = open(file, O_RDWR, 0)) == -1) {
- fprintf(stderr, "%s: open %s\n", file, strerror(errno));
- exit(1);
+ if ((fd = shm_open(MT_FILE, O_RDWR, 0)) == -1) {
+ fprintf(stderr, "%s: open %s\n", MT_FILE, strerror(errno));
+ exit(EXIT_FAILURE);
}
- maddr = (MUTEX *)mmap(NULL, len,
+ addr = mmap(NULL, len,
PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, (off_t)0);
- if (maddr == MAP_FAILED) {
- fprintf(stderr, "%s: mmap: %s\n", file, strerror(errno));
- exit(1);
+ if (addr == MAP_FAILED) {
+ fprintf(stderr, "%s: mmap: %s\n", MT_FILE, strerror(errno));
+ exit(EXIT_FAILURE);
}
- *maddrp = maddr;
- *fdp = fd;
+ if (gm_addrp != NULL)
+ *gm_addrp = (u_int8_t *)addr;
+ addr = (u_int8_t *)addr + align;
+ if (tm_addrp != NULL)
+ *tm_addrp = (u_int8_t *)addr;
+ addr = (u_int8_t *)addr + align * (nthreads * nprocs);
+ if (lm_addrp != NULL)
+ *lm_addrp = (u_int8_t *)addr;
+
+ if (fdp != NULL)
+ *fdp = fd;
}
+/*
+ * unmap_file --
+ * Discard backing file map.
+ */
void
-unmap_file(maddr, fd)
- MUTEX *maddr;
+unmap_file(addr, fd)
+ u_int8_t *addr;
int fd;
{
- if (munmap(maddr, len) != 0) {
+ if (munmap(addr, len) != 0) {
fprintf(stderr, "munmap: %s\n", strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
if (close(fd) != 0) {
fprintf(stderr, "close: %s\n", strerror(errno));
- exit(1);
+ exit(EXIT_FAILURE);
}
}
+
+/*
+ * usage --
+ *
+ */
+int
+usage()
+{
+ (void)fprintf(stderr, "%s\n\t%s\n",
+ "usage: tm [-v] [-l maxlocks]",
+ "[-n locks] [-p procs] [-T locker=ID|wakeup=ID] [-t threads]");
+ return (EXIT_FAILURE);
+}
diff --git a/db/mutex/uts4_cc.s b/db/mutex/uts4_cc.s
index ee5f4143b..f68d82922 100644
--- a/db/mutex/uts4_cc.s
+++ b/db/mutex/uts4_cc.s
@@ -1,3 +1,9 @@
+ / See the file LICENSE for redistribution information.
+ /
+ / Copyright (c) 1997-2003
+ / Sleepycat Software. All rights reserved.
+ /
+ / $Id: uts4_cc.s,v 11.3 2003/01/08 05:28:42 bostic Exp $
/
/ int uts_lock ( int *p, int i );
/ Update the lock word pointed to by p with the
diff --git a/db/os/os_abs.c b/db/os/os_abs.c
index 04be98733..d607bfc19 100644
--- a/db/os/os_abs.c
+++ b/db/os/os_abs.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_abs.c,v 11.3 2000/02/14 03:00:04 bostic Exp $";
+static const char revid[] = "$Id: os_abs.c,v 11.6 2003/01/08 05:28:55 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_alloc.c b/db/os/os_alloc.c
index ee4a0f3c9..24eba2c3b 100644
--- a/db/os/os_alloc.c
+++ b/db/os/os_alloc.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_alloc.c,v 11.18 2000/11/30 00:58:42 ubell Exp $";
+static const char revid[] = "$Id: os_alloc.c,v 11.36 2003/04/24 19:47:36 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,10 +19,14 @@ static const char revid[] = "$Id: os_alloc.c,v 11.18 2000/11/30 00:58:42 ubell E
#endif
#include "db_int.h"
-#include "os_jump.h"
#ifdef DIAGNOSTIC
-static void __os_guard __P((void));
+static void __os_guard __P((DB_ENV *));
+
+union __db_alloc {
+ size_t size;
+ double align;
+};
#endif
/*
@@ -43,6 +47,126 @@ static void __os_guard __P((void));
*/
/*
+ * __os_umalloc --
+ * A malloc(3) function that will use, in order of preference,
+ * the allocation function specified to the DB handle, the DB_ENV
+ * handle, or __os_malloc.
+ *
+ * PUBLIC: int __os_umalloc __P((DB_ENV *, size_t, void *));
+ */
+int
+__os_umalloc(dbenv, size, storep)
+ DB_ENV *dbenv;
+ size_t size;
+ void *storep;
+{
+ int ret;
+
+ /* Never allocate 0 bytes -- some C libraries don't like it. */
+ if (size == 0)
+ ++size;
+
+ if (dbenv == NULL || dbenv->db_malloc == NULL) {
+ if (DB_GLOBAL(j_malloc) != NULL)
+ *(void **)storep = DB_GLOBAL(j_malloc)(size);
+ else
+ *(void **)storep = malloc(size);
+ if (*(void **)storep == NULL) {
+ /*
+ * Correct error return, see __os_malloc.
+ */
+ if ((ret = __os_get_errno()) == 0) {
+ ret = ENOMEM;
+ __os_set_errno(ENOMEM);
+ }
+ __db_err(dbenv,
+ "malloc: %s: %lu", strerror(ret), (u_long)size);
+ return (ret);
+ }
+ return (0);
+ }
+
+ if ((*(void **)storep = dbenv->db_malloc(size)) == NULL) {
+ __db_err(dbenv, "User-specified malloc function returned NULL");
+ return (ENOMEM);
+ }
+
+ return (0);
+}
+
+/*
+ * __os_urealloc --
+ * realloc(3) counterpart to __os_umalloc.
+ *
+ * PUBLIC: int __os_urealloc __P((DB_ENV *, size_t, void *));
+ */
+int
+__os_urealloc(dbenv, size, storep)
+ DB_ENV *dbenv;
+ size_t size;
+ void *storep;
+{
+ int ret;
+ void *ptr;
+
+ ptr = *(void **)storep;
+
+ /* Never allocate 0 bytes -- some C libraries don't like it. */
+ if (size == 0)
+ ++size;
+
+ if (dbenv == NULL || dbenv->db_realloc == NULL) {
+ if (ptr == NULL)
+ return (__os_umalloc(dbenv, size, storep));
+
+ if (DB_GLOBAL(j_realloc) != NULL)
+ *(void **)storep = DB_GLOBAL(j_realloc)(ptr, size);
+ else
+ *(void **)storep = realloc(ptr, size);
+ if (*(void **)storep == NULL) {
+ /*
+ * Correct errno, see __os_realloc.
+ */
+ if ((ret = __os_get_errno()) == 0) {
+ ret = ENOMEM;
+ __os_set_errno(ENOMEM);
+ }
+ __db_err(dbenv,
+ "realloc: %s: %lu", strerror(ret), (u_long)size);
+ return (ret);
+ }
+ return (0);
+ }
+
+ if ((*(void **)storep = dbenv->db_realloc(ptr, size)) == NULL) {
+ __db_err(dbenv,
+ "User-specified realloc function returned NULL");
+ return (ENOMEM);
+ }
+
+ return (0);
+}
+
+/*
+ * __os_ufree --
+ * free(3) counterpart to __os_umalloc.
+ *
+ * PUBLIC: void __os_ufree __P((DB_ENV *, void *));
+ */
+void
+__os_ufree(dbenv, ptr)
+ DB_ENV *dbenv;
+ void *ptr;
+{
+ if (dbenv != NULL && dbenv->db_free != NULL)
+ dbenv->db_free(ptr);
+ else if (DB_GLOBAL(j_free) != NULL)
+ DB_GLOBAL(j_free)(ptr);
+ else
+ free(ptr);
+}
+
+/*
* __os_strdup --
* The strdup(3) function for DB.
*
@@ -61,7 +185,7 @@ __os_strdup(dbenv, str, storep)
*(void **)storep = NULL;
size = strlen(str) + 1;
- if ((ret = __os_malloc(dbenv, size, NULL, &p)) != 0)
+ if ((ret = __os_malloc(dbenv, size, &p)) != 0)
return (ret);
memcpy(p, str, size);
@@ -86,7 +210,7 @@ __os_calloc(dbenv, num, size, storep)
int ret;
size *= num;
- if ((ret = __os_malloc(dbenv, size, NULL, &p)) != 0)
+ if ((ret = __os_malloc(dbenv, size, &p)) != 0)
return (ret);
memset(p, 0, size);
@@ -99,13 +223,13 @@ __os_calloc(dbenv, num, size, storep)
* __os_malloc --
* The malloc(3) function for DB.
*
- * PUBLIC: int __os_malloc __P((DB_ENV *, size_t, void *(*)(size_t), void *));
+ * PUBLIC: int __os_malloc __P((DB_ENV *, size_t, void *));
*/
int
-__os_malloc(dbenv, size, db_malloc, storep)
+__os_malloc(dbenv, size, storep)
DB_ENV *dbenv;
size_t size;
- void *(*db_malloc) __P((size_t)), *storep;
+ void *storep;
{
int ret;
void *p;
@@ -115,24 +239,26 @@ __os_malloc(dbenv, size, db_malloc, storep)
/* Never allocate 0 bytes -- some C libraries don't like it. */
if (size == 0)
++size;
+
#ifdef DIAGNOSTIC
- else
- ++size; /* Add room for a guard byte. */
+ /* Add room for size and a guard byte. */
+ size += sizeof(union __db_alloc) + 1;
#endif
- /* Some C libraries don't correctly set errno when malloc(3) fails. */
- __os_set_errno(0);
- if (db_malloc != NULL)
- p = db_malloc(size);
- else if (__db_jump.j_malloc != NULL)
- p = __db_jump.j_malloc(size);
+ if (DB_GLOBAL(j_malloc) != NULL)
+ p = DB_GLOBAL(j_malloc)(size);
else
p = malloc(size);
if (p == NULL) {
- ret = __os_get_errno();
- if (ret == 0) {
- __os_set_errno(ENOMEM);
+ /*
+ * Some C libraries don't correctly set errno when malloc(3)
+ * fails. We'd like to 0 out errno before calling malloc,
+ * but it turns out that setting errno is quite expensive on
+ * Windows/NT in an MT environment.
+ */
+ if ((ret = __os_get_errno()) == 0) {
ret = ENOMEM;
+ __os_set_errno(ENOMEM);
}
__db_err(dbenv,
"malloc: %s: %lu", strerror(ret), (u_long)size);
@@ -140,18 +266,18 @@ __os_malloc(dbenv, size, db_malloc, storep)
}
#ifdef DIAGNOSTIC
+ /* Overwrite memory. */
+ memset(p, CLEAR_BYTE, size);
+
/*
* Guard bytes: if #DIAGNOSTIC is defined, we allocate an additional
* byte after the memory and set it to a special value that we check
- * for when the memory is free'd. This is fine for structures, but
- * not quite so fine for strings. There are places in DB where memory
- * is allocated sufficient to hold the largest possible string that
- * we'll see, and then only some subset of the memory is used. To
- * support this usage, the __os_freestr() function checks the byte
- * after the string's nul, which may or may not be the last byte in
- * the originally allocated memory.
+ * for when the memory is free'd.
*/
- memset(p, CLEAR_BYTE, size); /* Initialize guard byte. */
+ ((u_int8_t *)p)[size - 1] = CLEAR_BYTE;
+
+ ((union __db_alloc *)p)->size = size;
+ p = &((union __db_alloc *)p)[1];
#endif
*(void **)storep = p;
@@ -162,46 +288,50 @@ __os_malloc(dbenv, size, db_malloc, storep)
* __os_realloc --
* The realloc(3) function for DB.
*
- * PUBLIC: int __os_realloc __P((DB_ENV *,
- * PUBLIC: size_t, void *(*)(void *, size_t), void *));
+ * PUBLIC: int __os_realloc __P((DB_ENV *, size_t, void *));
*/
int
-__os_realloc(dbenv, size, db_realloc, storep)
+__os_realloc(dbenv, size, storep)
DB_ENV *dbenv;
size_t size;
- void *(*db_realloc) __P((void *, size_t)), *storep;
+ void *storep;
{
int ret;
void *p, *ptr;
ptr = *(void **)storep;
- /* If we haven't yet allocated anything yet, simply call malloc. */
- if (ptr == NULL && db_realloc == NULL)
- return (__os_malloc(dbenv, size, NULL, storep));
-
/* Never allocate 0 bytes -- some C libraries don't like it. */
if (size == 0)
++size;
+
+ /* If we haven't yet allocated anything yet, simply call malloc. */
+ if (ptr == NULL)
+ return (__os_malloc(dbenv, size, storep));
+
#ifdef DIAGNOSTIC
- else
- ++size; /* Add room for a guard byte. */
+ /* Add room for size and a guard byte. */
+ size += sizeof(union __db_alloc) + 1;
+
+ /* Back up to the real begining */
+ ptr = &((union __db_alloc *)ptr)[-1];
#endif
/*
- * Some C libraries don't correctly set errno when realloc(3) fails.
- *
* Don't overwrite the original pointer, there are places in DB we
* try to continue after realloc fails.
*/
- __os_set_errno(0);
- if (db_realloc != NULL)
- p = db_realloc(ptr, size);
- else if (__db_jump.j_realloc != NULL)
- p = __db_jump.j_realloc(ptr, size);
+ if (DB_GLOBAL(j_realloc) != NULL)
+ p = DB_GLOBAL(j_realloc)(ptr, size);
else
p = realloc(ptr, size);
if (p == NULL) {
+ /*
+ * Some C libraries don't correctly set errno when malloc(3)
+ * fails. We'd like to 0 out errno before calling malloc,
+ * but it turns out that setting errno is quite expensive on
+ * Windows/NT in an MT environment.
+ */
if ((ret = __os_get_errno()) == 0) {
ret = ENOMEM;
__os_set_errno(ENOMEM);
@@ -212,6 +342,9 @@ __os_realloc(dbenv, size, db_realloc, storep)
}
#ifdef DIAGNOSTIC
((u_int8_t *)p)[size - 1] = CLEAR_BYTE; /* Initialize guard byte. */
+
+ ((union __db_alloc *)p)->size = size;
+ p = &((union __db_alloc *)p)[1];
#endif
*(void **)storep = p;
@@ -223,64 +356,35 @@ __os_realloc(dbenv, size, db_realloc, storep)
* __os_free --
* The free(3) function for DB.
*
- * PUBLIC: void __os_free __P((void *, size_t));
+ * PUBLIC: void __os_free __P((DB_ENV *, void *));
*/
void
-__os_free(ptr, size)
- void *ptr;
- size_t size;
-{
-#ifdef DIAGNOSTIC
- if (size != 0) {
- /*
- * Check that the guard byte (one past the end of the memory) is
- * still CLEAR_BYTE.
- */
- if (((u_int8_t *)ptr)[size] != CLEAR_BYTE)
- __os_guard();
-
- /* Clear memory. */
- if (size != 0)
- memset(ptr, CLEAR_BYTE, size);
- }
-#else
- COMPQUIET(size, 0);
-#endif
-
- if (__db_jump.j_free != NULL)
- __db_jump.j_free(ptr);
- else
- free(ptr);
-}
-
-/*
- * __os_freestr --
- * The free(3) function for DB, freeing a string.
- *
- * PUBLIC: void __os_freestr __P((void *));
- */
-void
-__os_freestr(ptr)
+__os_free(dbenv, ptr)
+ DB_ENV *dbenv;
void *ptr;
{
#ifdef DIAGNOSTIC
- size_t size;
-
- size = strlen(ptr) + 1;
-
+ int size;
/*
* Check that the guard byte (one past the end of the memory) is
* still CLEAR_BYTE.
*/
- if (((u_int8_t *)ptr)[size] != CLEAR_BYTE)
- __os_guard();
+ if (ptr == NULL)
+ return;
+
+ ptr = &((union __db_alloc *)ptr)[-1];
+ size = ((union __db_alloc *)ptr)->size;
+ if (((u_int8_t *)ptr)[size - 1] != CLEAR_BYTE)
+ __os_guard(dbenv);
- /* Clear memory. */
- memset(ptr, CLEAR_BYTE, size);
+ /* Overwrite memory. */
+ if (size != 0)
+ memset(ptr, CLEAR_BYTE, size);
#endif
+ COMPQUIET(dbenv, NULL);
- if (__db_jump.j_free != NULL)
- __db_jump.j_free(ptr);
+ if (DB_GLOBAL(j_free) != NULL)
+ DB_GLOBAL(j_free)(ptr);
else
free(ptr);
}
@@ -291,13 +395,10 @@ __os_freestr(ptr)
* Complain and abort.
*/
static void
-__os_guard()
+__os_guard(dbenv)
+ DB_ENV *dbenv;
{
- /*
- * Eventually, once we push a DB_ENV handle down to these
- * routines, we should use the standard output channels.
- */
- fprintf(stderr, "Guard byte incorrect during free.\n");
+ __db_err(dbenv, "Guard byte incorrect during free");
abort();
/* NOTREACHED */
}
diff --git a/db/os/os_clock.c b/db/os/os_clock.c
index 581d04db7..33c6a3add 100644
--- a/db/os/os_clock.c
+++ b/db/os/os_clock.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_clock.c,v 1.9 2002/03/29 20:46:44 bostic Exp ";
+static const char revid[] = "$Id: os_clock.c,v 1.10 2003/01/08 05:29:03 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_config.c b/db/os/os_config.c
index 1879f6d70..70242b817 100644
--- a/db/os/os_config.c
+++ b/db/os/os_config.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_config.c,v 11.13 2002/01/31 19:54:12 bostic Exp ";
+static const char revid[] = "$Id: os_config.c,v 11.14 2003/01/08 05:29:08 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_dir.c b/db/os/os_dir.c
index 50d00a556..6004486dd 100644
--- a/db/os/os_dir.c
+++ b/db/os/os_dir.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_dir.c,v 11.8 2000/06/27 17:29:52 sue Exp $";
+static const char revid[] = "$Id: os_dir.c,v 11.15 2003/01/08 05:29:11 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -34,7 +34,6 @@ static const char revid[] = "$Id: os_dir.c,v 11.8 2000/06/27 17:29:52 sue Exp $"
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_dirlist --
@@ -54,8 +53,8 @@ __os_dirlist(dbenv, dir, namesp, cntp)
int arraysz, cnt, ret;
char **names;
- if (__db_jump.j_dirlist != NULL)
- return (__db_jump.j_dirlist(dir, namesp, cntp));
+ if (DB_GLOBAL(j_dirlist) != NULL)
+ return (DB_GLOBAL(j_dirlist)(dir, namesp, cntp));
#ifdef HAVE_VXWORKS
if ((dirp = opendir((char *)dir)) == NULL)
@@ -68,7 +67,7 @@ __os_dirlist(dbenv, dir, namesp, cntp)
if (cnt >= arraysz) {
arraysz += 100;
if ((ret = __os_realloc(dbenv,
- arraysz * sizeof(names[0]), NULL, &names)) != 0)
+ arraysz * sizeof(names[0]), &names)) != 0)
goto nomem;
}
if ((ret = __os_strdup(dbenv, dp->d_name, &names[cnt])) != 0)
@@ -81,7 +80,7 @@ __os_dirlist(dbenv, dir, namesp, cntp)
return (0);
nomem: if (names != NULL)
- __os_dirfree(names, cnt);
+ __os_dirfree(dbenv, names, cnt);
if (dirp != NULL)
(void)closedir(dirp);
return (ret);
@@ -91,18 +90,19 @@ nomem: if (names != NULL)
* __os_dirfree --
* Free the list of files.
*
- * PUBLIC: void __os_dirfree __P((char **, int));
+ * PUBLIC: void __os_dirfree __P((DB_ENV *, char **, int));
*/
void
-__os_dirfree(names, cnt)
+__os_dirfree(dbenv, names, cnt)
+ DB_ENV *dbenv;
char **names;
int cnt;
{
- if (__db_jump.j_dirfree != NULL)
- __db_jump.j_dirfree(names, cnt);
+ if (DB_GLOBAL(j_dirfree) != NULL)
+ DB_GLOBAL(j_dirfree)(names, cnt);
else {
while (cnt > 0)
- __os_free(names[--cnt], 0);
- __os_free(names, 0);
+ __os_free(dbenv, names[--cnt]);
+ __os_free(dbenv, names);
}
}
diff --git a/db/os/os_errno.c b/db/os/os_errno.c
index f9b60f635..6fd6939ab 100644
--- a/db/os/os_errno.c
+++ b/db/os/os_errno.c
@@ -1,32 +1,52 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_errno.c,v 11.3 2000/02/14 03:00:05 bostic Exp $";
+static const char revid[] = "$Id: os_errno.c,v 11.10 2003/02/14 16:21:04 bostic Exp $";
#endif /* not lint */
-#ifndef NO_SYSTEM_INCLUDES
-#include <errno.h>
-#endif
-
#include "db_int.h"
/*
+ * __os_get_errno_ret_zero --
+ * Return the value of errno, even if it's zero.
+ *
+ * PUBLIC: int __os_get_errno_ret_zero __P((void));
+ */
+int
+__os_get_errno_ret_zero()
+{
+ /* This routine must be able to return the same value repeatedly. */
+ return (errno);
+}
+
+/*
* __os_get_errno --
- * Return the value of errno.
+ * Return the value of errno, or EAGAIN if errno is zero.
*
* PUBLIC: int __os_get_errno __P((void));
*/
int
__os_get_errno()
{
- /* This routine must be able to return the same value repeatedly. */
+ /*
+ * This routine must be able to return the same value repeatedly.
+ *
+ * We've seen cases where system calls failed but errno was never set.
+ * This version of __os_get_errno() sets errno to EAGAIN if it's not
+ * already set, to work around that problem. For obvious reasons, we
+ * can only call this function if we know an error has occurred, that
+ * is, we can't test errno for a non-zero value after this call.
+ */
+ if (errno == 0)
+ __os_set_errno(EAGAIN);
+
return (errno);
}
@@ -40,5 +60,14 @@ void
__os_set_errno(evalue)
int evalue;
{
- errno = evalue;
+ /*
+ * This routine is called by the compatibility interfaces (DB 1.85,
+ * dbm and hsearch). Force values > 0, that is, not one of DB 2.X
+ * and later's public error returns. If something bad has happened,
+ * default to EFAULT -- a nasty return. Otherwise, default to EINVAL.
+ * As the compatibility APIs aren't included on Windows, the Windows
+ * version of this routine doesn't need this behavior.
+ */
+ errno =
+ evalue >= 0 ? evalue : (evalue == DB_RUNRECOVERY ? EFAULT : EINVAL);
}
diff --git a/db/os/os_fid.c b/db/os/os_fid.c
index f853f6a8d..5a2b6ca8e 100644
--- a/db/os/os_fid.c
+++ b/db/os/os_fid.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_fid.c,v 11.7 2000/10/26 14:17:05 bostic Exp $";
+static const char revid[] = "$Id: os_fid.c,v 11.17 2003/05/05 19:55:04 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -26,8 +26,8 @@ static const char revid[] = "$Id: os_fid.c,v 11.7 2000/10/26 14:17:05 bostic Exp
#endif
#endif
+#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
@@ -37,7 +37,12 @@ static u_int32_t fid_serial = SERIAL_INIT;
/*
* __os_fileid --
- * Return a unique identifier for a file.
+ * Return a unique identifier for a file. The structure
+ * of a fileid is: ino(4) dev(4) time(4) pid(4) extra(4).
+ * For real files, which have a backing inode and device, the first
+ * 16 bytes are filled in and the extra bytes are left 0. For
+ * temporary files, the inode and device fields are left blank and
+ * the extra four bytes are filled in with a random value.
*
* PUBLIC: int __os_fileid __P((DB_ENV *, const char *, int, u_int8_t *));
*/
@@ -50,20 +55,25 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
{
struct stat sb;
size_t i;
- int ret;
+ int ret, retries;
u_int32_t tmp;
u_int8_t *p;
+ retries = 0;
+
/* Clear the buffer. */
memset(fidp, 0, DB_FILE_ID_LEN);
/* On POSIX/UNIX, use a dev/inode pair. */
+retry:
#ifdef HAVE_VXWORKS
- if (stat((char *)fname, &sb)) {
+ if (stat((char *)fname, &sb) != 0) {
#else
- if (stat(fname, &sb)) {
+ if (stat(fname, &sb) != 0) {
#endif
- ret = __os_get_errno();
+ if (((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
+ goto retry;
__db_err(dbenv, "%s: %s", fname, strerror(ret));
return (ret);
}
@@ -83,7 +93,7 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* interesting properties in base 2.
*/
if (fid_serial == SERIAL_INIT)
- fid_serial = (u_int32_t)getpid();
+ __os_id(&fid_serial);
else
fid_serial += 100000;
diff --git a/db/os/os_fsync.c b/db/os/os_fsync.c
index f5fd5f56a..819072938 100644
--- a/db/os/os_fsync.c
+++ b/db/os/os_fsync.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_fsync.c,v 11.9 2000/04/04 23:29:20 ubell Exp $";
+static const char revid[] = "$Id: os_fsync.c,v 11.18 2003/02/16 15:53:55 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,7 +20,6 @@ static const char revid[] = "$Id: os_fsync.c,v 11.9 2000/04/04 23:29:20 ubell Ex
#endif
#include "db_int.h"
-#include "os_jump.h"
#ifdef HAVE_VXWORKS
#include "ioLib.h"
@@ -70,7 +69,7 @@ __os_fsync(dbenv, fhp)
DB_ENV *dbenv;
DB_FH *fhp;
{
- int ret;
+ int ret, retries;
/*
* Do nothing if the file descriptor has been marked as not requiring
@@ -79,12 +78,18 @@ __os_fsync(dbenv, fhp)
if (F_ISSET(fhp, DB_FH_NOSYNC))
return (0);
- ret = __db_jump.j_fsync != NULL ?
- __db_jump.j_fsync(fhp->fd) : fsync(fhp->fd);
+ /* Check for illegal usage. */
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+
+ retries = 0;
+ do {
+ ret = DB_GLOBAL(j_fsync) != NULL ?
+ DB_GLOBAL(j_fsync)(fhp->fd) : fsync(fhp->fd);
+ } while (ret != 0 &&
+ ((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
- if (ret != 0) {
- ret = __os_get_errno();
+ if (ret != 0)
__db_err(dbenv, "fsync %s", strerror(ret));
- }
return (ret);
}
diff --git a/db/os/os_handle.c b/db/os/os_handle.c
index b127c5ff5..e357bf66a 100644
--- a/db/os/os_handle.c
+++ b/db/os/os_handle.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_handle.c,v 11.19 2000/11/30 00:58:42 ubell Exp $";
+static const char revid[] = "$Id: os_handle.c,v 11.32 2003/02/16 15:54:03 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,60 +20,68 @@ static const char revid[] = "$Id: os_handle.c,v 11.19 2000/11/30 00:58:42 ubell
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_openhandle --
* Open a file, using POSIX 1003.1 open flags.
*
- * PUBLIC: int __os_openhandle __P((DB_ENV *, const char *, int, int, DB_FH *));
+ * PUBLIC: int __os_openhandle
+ * PUBLIC: __P((DB_ENV *, const char *, int, int, DB_FH **));
*/
int
-__os_openhandle(dbenv, name, flags, mode, fhp)
+__os_openhandle(dbenv, name, flags, mode, fhpp)
DB_ENV *dbenv;
const char *name;
int flags, mode;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
- int ret, nrepeat;
+ DB_FH *fhp;
+ int ret, nrepeat, retries;
#ifdef HAVE_VXWORKS
int newflags;
#endif
- memset(fhp, 0, sizeof(*fhp));
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), fhpp)) != 0)
+ return (ret);
+ fhp = *fhpp;
/* If the application specified an interface, use it. */
- if (__db_jump.j_open != NULL) {
- if ((fhp->fd = __db_jump.j_open(name, flags, mode)) == -1)
- return (__os_get_errno());
- F_SET(fhp, DB_FH_VALID);
+ if (DB_GLOBAL(j_open) != NULL) {
+ if ((fhp->fd = DB_GLOBAL(j_open)(name, flags, mode)) == -1) {
+ ret = __os_get_errno();
+ goto err;
+ }
+ F_SET(fhp, DB_FH_OPENED);
return (0);
}
- for (ret = 0, nrepeat = 1; nrepeat < 4; ++nrepeat) {
+ retries = 0;
+ for (nrepeat = 1; nrepeat < 4; ++nrepeat) {
+ ret = 0;
#ifdef HAVE_VXWORKS
/*
* VxWorks does not support O_CREAT on open, you have to use
* creat() instead. (It does not support O_EXCL or O_TRUNC
* either, even though they are defined "for future support".)
- * If O_EXCL is specified, single thread and try to open the
- * file. If successful, return EEXIST. Otherwise, call creat
- * and then end single threading.
+ * We really want the POSIX behavior that if O_CREAT is set,
+ * we open if it exists, or create it if it doesn't exist.
+ * If O_CREAT is specified, single thread and try to open the
+ * file. If successful, and O_EXCL return EEXIST. If
+ * unsuccessful call creat and then end single threading.
*/
if (LF_ISSET(O_CREAT)) {
DB_BEGIN_SINGLE_THREAD;
newflags = flags & ~(O_CREAT | O_EXCL);
- if (LF_ISSET(O_EXCL)) {
- if ((fhp->fd =
- open(name, newflags, mode)) != -1) {
+ if ((fhp->fd = open(name, newflags, mode)) != -1) {
+ if (LF_ISSET(O_EXCL)) {
/*
- * If we get here, we want O_EXCL
- * create, and it exists. Close and
+ * If we get here, want O_EXCL create,
+ * and the file exists. Close and
* return EEXISTS.
*/
- (void)close(fhp->fd);
DB_END_SINGLE_THREAD;
- return (EEXIST);
+ ret = EEXIST;
+ goto err;
}
/*
* XXX
@@ -84,8 +92,8 @@ __os_openhandle(dbenv, name, flags, mode, fhp)
* verify we truly got the equivalent of
* ENOENT.
*/
- }
- fhp->fd = creat(name, newflags);
+ } else
+ fhp->fd = creat(name, newflags);
DB_END_SINGLE_THREAD;
} else
@@ -105,32 +113,48 @@ __os_openhandle(dbenv, name, flags, mode, fhp)
#else
fhp->fd = open(name, flags, mode);
#endif
+ if (fhp->fd != -1) {
+ F_SET(fhp, DB_FH_OPENED);
+
+#if defined(HAVE_FCNTL_F_SETFD)
+ /* Deny file descriptor access to any child process. */
+ if (fcntl(fhp->fd, F_SETFD, 1) == -1) {
+ ret = __os_get_errno();
+ __db_err(dbenv,
+ "fcntl(F_SETFD): %s", strerror(ret));
+ goto err;
+ }
+#endif
+ break;
+ }
- if (fhp->fd == -1) {
+ switch (ret = __os_get_errno()) {
+ case EMFILE:
+ case ENFILE:
+ case ENOSPC:
/*
* If it's a "temporary" error, we retry up to 3 times,
* waiting up to 12 seconds. While it's not a problem
* if we can't open a database, an inability to open a
* log file is cause for serious dismay.
*/
- ret = __os_get_errno();
- if (ret == ENFILE || ret == EMFILE || ret == ENOSPC) {
- (void)__os_sleep(dbenv, nrepeat * 2, 0);
- continue;
- }
- } else {
-#if defined(HAVE_FCNTL_F_SETFD)
- /* Deny file descriptor access to any child process. */
- if (fcntl(fhp->fd, F_SETFD, 1) == -1) {
- ret = __os_get_errno();
- __db_err(dbenv, "fcntl(F_SETFD): %s",
- strerror(ret));
- (void)__os_closehandle(fhp);
- } else
-#endif
- F_SET(fhp, DB_FH_VALID);
+ (void)__os_sleep(dbenv, nrepeat * 2, 0);
+ break;
+ case EBUSY:
+ case EINTR:
+ /*
+ * If it was an EINTR or EBUSY, retry immediately,
+ * DB_RETRY times.
+ */
+ if (++retries < DB_RETRY)
+ --nrepeat;
+ break;
}
- break;
+ }
+
+err: if (ret != 0) {
+ (void)__os_closehandle(dbenv, fhp);
+ *fhpp = NULL;
}
return (ret);
@@ -140,26 +164,41 @@ __os_openhandle(dbenv, name, flags, mode, fhp)
* __os_closehandle --
* Close a file.
*
- * PUBLIC: int __os_closehandle __P((DB_FH *));
+ * PUBLIC: int __os_closehandle __P((DB_ENV *, DB_FH *));
*/
int
-__os_closehandle(fhp)
+__os_closehandle(dbenv, fhp)
+ DB_ENV *dbenv;
DB_FH *fhp;
{
- int ret;
-
- /* Don't close file descriptors that were never opened. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_VALID) && fhp->fd != -1);
+ int ret, retries;
- ret = __db_jump.j_close != NULL ?
- __db_jump.j_close(fhp->fd) : close(fhp->fd);
+ ret = 0;
/*
- * Smash the POSIX file descriptor -- it's never tested, but we want
- * to catch any mistakes.
+ * If we have a valid handle, close it and unlink any temporary
+ * file.
*/
- fhp->fd = -1;
- F_CLR(fhp, DB_FH_VALID);
+ if (F_ISSET(fhp, DB_FH_OPENED)) {
+ retries = 0;
+ do {
+ ret = DB_GLOBAL(j_close) != NULL ?
+ DB_GLOBAL(j_close)(fhp->fd) : close(fhp->fd);
+ } while (ret != 0 &&
+ ((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
+
+ if (ret != 0)
+ __db_err(dbenv, "close: %s", strerror(ret));
+
+ /* Unlink the file if we haven't already done so. */
+ if (F_ISSET(fhp, DB_FH_UNLINK)) {
+ (void)__os_unlink(dbenv, fhp->name);
+ (void)__os_free(dbenv, fhp->name);
+ }
+ }
- return (ret == 0 ? 0 : __os_get_errno());
+ __os_free(dbenv, fhp);
+
+ return (ret);
}
diff --git a/db/os/os_id.c b/db/os/os_id.c
index ae0339ca0..77e2eb208 100644
--- a/db/os/os_id.c
+++ b/db/os/os_id.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_id.c,v 1.2 2002/01/11 15:52:59 bostic Exp ";
+static const char revid[] = "$Id: os_id.c,v 1.3 2003/01/08 05:29:18 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_map.c b/db/os/os_map.c
index 2311fb539..75c243681 100644
--- a/db/os/os_map.c
+++ b/db/os/os_map.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_map.c,v 11.44 2002/07/12 18:56:51 bostic Exp ";
+static const char revid[] = "$Id: os_map.c,v 11.51 2003/07/01 19:47:15 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -136,9 +136,11 @@ __os_r_sysattach(dbenv, infop, rp)
#ifdef HAVE_MMAP
{
- DB_FH fh;
+ DB_FH *fhp;
int ret;
+ fhp = NULL;
+
/*
* Try to open/create the shared region file. We DO NOT need to ensure
* that multiple threads/processes attempting to simultaneously create
@@ -148,7 +150,7 @@ __os_r_sysattach(dbenv, infop, rp)
if ((ret = __os_open(dbenv, infop->name,
DB_OSO_REGION | DB_OSO_DIRECT |
(F_ISSET(infop, REGION_CREATE_OK) ? DB_OSO_CREATE : 0),
- infop->mode, &fh)) != 0)
+ infop->mode, &fhp)) != 0)
__db_err(dbenv, "%s: %s", infop->name, db_strerror(ret));
/*
@@ -160,15 +162,15 @@ __os_r_sysattach(dbenv, infop, rp)
*/
if (ret == 0 && F_ISSET(infop, REGION_CREATE))
ret = __db_fileinit(dbenv,
- &fh, rp->size, F_ISSET(dbenv, DB_ENV_REGION_INIT) ? 1 : 0);
+ fhp, rp->size, F_ISSET(dbenv, DB_ENV_REGION_INIT) ? 1 : 0);
/* Map the file in. */
if (ret == 0)
ret = __os_map(dbenv,
- infop->name, &fh, rp->size, 1, 0, &infop->addr);
+ infop->name, fhp, rp->size, 1, 0, &infop->addr);
- if (F_ISSET(&fh, DB_FH_VALID))
- (void)__os_closehandle(dbenv, &fh);
+ if (fhp != NULL)
+ (void)__os_closehandle(dbenv, fhp);
return (ret);
}
@@ -177,7 +179,7 @@ __os_r_sysattach(dbenv, infop, rp)
COMPQUIET(rp, NULL);
__db_err(dbenv,
"architecture lacks mmap(2), shared environments not possible");
- return (__db_eopnotsup(dbenv));
+ return (DB_OPNOTSUP);
#endif
}
@@ -218,7 +220,7 @@ __os_r_sysdetach(dbenv, infop, destroy)
if (destroy && shmctl(segid, IPC_RMID,
NULL) != 0 && (ret = __os_get_errno()) != EINVAL) {
__db_err(dbenv,
- "shmctl: id %ld: unable to delete system shared memory region: %s",
+ "shmctl: id %d: unable to delete system shared memory region: %s",
segid, strerror(ret));
return (ret);
}
@@ -306,12 +308,15 @@ __os_unmapfile(dbenv, addr, len)
COMPQUIET(dbenv, NULL);
#endif
{
- int ret;
-
- while ((ret = munmap(addr, len)) != 0 &&
- __os_get_errno() == EINTR)
- ;
- return (ret ? __os_get_errno() : 0);
+ int err, ret, retries;
+
+ err = retries = 0;
+ do {
+ ret = munmap(addr, len);
+ } while (ret != 0 &&
+ ((err = __os_get_errno()) == EINTR || err == EBUSY) &&
+ ++retries < DB_RETRY);
+ return (ret ? err : 0);
}
#else
COMPQUIET(dbenv, NULL);
@@ -342,6 +347,9 @@ __os_map(dbenv, path, fhp, len, is_region, is_rdonly, addrp)
return (DB_GLOBAL(j_map)
(path, len, is_region, is_rdonly, addrp));
+ /* Check for illegal usage. */
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+
/*
* If it's read-only, it's private, and if it's not, it's shared.
* Don't bother with an additional parameter.
@@ -438,6 +446,6 @@ __db_nosystemmem(dbenv)
{
__db_err(dbenv,
"architecture doesn't support environments in system memory");
- return (__db_eopnotsup(dbenv));
+ return (DB_OPNOTSUP);
}
#endif
diff --git a/db/os/os_method.c b/db/os/os_method.c
index 0e2bd3947..4705ddee1 100644
--- a/db/os/os_method.c
+++ b/db/os/os_method.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_method.c,v 11.6 2000/11/15 19:25:39 sue Exp $";
+static const char revid[] = "$Id: os_method.c,v 11.16 2003/01/08 05:29:22 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,191 +16,219 @@ static const char revid[] = "$Id: os_method.c,v 11.6 2000/11/15 19:25:39 sue Exp
#endif
#include "db_int.h"
-#include "os_jump.h"
-
-struct __db_jumptab __db_jump;
+/*
+ * EXTERN: int db_env_set_func_close __P((int (*)(int)));
+ */
int
db_env_set_func_close(func_close)
int (*func_close) __P((int));
{
- __db_jump.j_close = func_close;
+ DB_GLOBAL(j_close) = func_close;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_dirfree __P((void (*)(char **, int)));
+ */
int
db_env_set_func_dirfree(func_dirfree)
void (*func_dirfree) __P((char **, int));
{
- __db_jump.j_dirfree = func_dirfree;
+ DB_GLOBAL(j_dirfree) = func_dirfree;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_dirlist
+ * EXTERN: __P((int (*)(const char *, char ***, int *)));
+ */
int
db_env_set_func_dirlist(func_dirlist)
int (*func_dirlist) __P((const char *, char ***, int *));
{
- __db_jump.j_dirlist = func_dirlist;
+ DB_GLOBAL(j_dirlist) = func_dirlist;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_exists __P((int (*)(const char *, int *)));
+ */
int
db_env_set_func_exists(func_exists)
int (*func_exists) __P((const char *, int *));
{
- __db_jump.j_exists = func_exists;
+ DB_GLOBAL(j_exists) = func_exists;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_free __P((void (*)(void *)));
+ */
int
db_env_set_func_free(func_free)
void (*func_free) __P((void *));
{
- __db_jump.j_free = func_free;
+ DB_GLOBAL(j_free) = func_free;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_fsync __P((int (*)(int)));
+ */
int
db_env_set_func_fsync(func_fsync)
int (*func_fsync) __P((int));
{
- __db_jump.j_fsync = func_fsync;
+ DB_GLOBAL(j_fsync) = func_fsync;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_ioinfo __P((int (*)(const char *,
+ * EXTERN: int, u_int32_t *, u_int32_t *, u_int32_t *)));
+ */
int
db_env_set_func_ioinfo(func_ioinfo)
int (*func_ioinfo)
__P((const char *, int, u_int32_t *, u_int32_t *, u_int32_t *));
{
- __db_jump.j_ioinfo = func_ioinfo;
+ DB_GLOBAL(j_ioinfo) = func_ioinfo;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_malloc __P((void *(*)(size_t)));
+ */
int
db_env_set_func_malloc(func_malloc)
void *(*func_malloc) __P((size_t));
{
- __db_jump.j_malloc = func_malloc;
+ DB_GLOBAL(j_malloc) = func_malloc;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_map
+ * EXTERN: __P((int (*)(char *, size_t, int, int, void **)));
+ */
int
db_env_set_func_map(func_map)
int (*func_map) __P((char *, size_t, int, int, void **));
{
- __db_jump.j_map = func_map;
+ DB_GLOBAL(j_map) = func_map;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_open __P((int (*)(const char *, int, ...)));
+ */
int
db_env_set_func_open(func_open)
int (*func_open) __P((const char *, int, ...));
{
- __db_jump.j_open = func_open;
+ DB_GLOBAL(j_open) = func_open;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_read __P((ssize_t (*)(int, void *, size_t)));
+ */
int
db_env_set_func_read(func_read)
ssize_t (*func_read) __P((int, void *, size_t));
{
- __db_jump.j_read = func_read;
+ DB_GLOBAL(j_read) = func_read;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_realloc __P((void *(*)(void *, size_t)));
+ */
int
db_env_set_func_realloc(func_realloc)
void *(*func_realloc) __P((void *, size_t));
{
- __db_jump.j_realloc = func_realloc;
+ DB_GLOBAL(j_realloc) = func_realloc;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_rename
+ * EXTERN: __P((int (*)(const char *, const char *)));
+ */
int
db_env_set_func_rename(func_rename)
int (*func_rename) __P((const char *, const char *));
{
- __db_jump.j_rename = func_rename;
+ DB_GLOBAL(j_rename) = func_rename;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_seek
+ * EXTERN: __P((int (*)(int, size_t, db_pgno_t, u_int32_t, int, int)));
+ */
int
db_env_set_func_seek(func_seek)
int (*func_seek) __P((int, size_t, db_pgno_t, u_int32_t, int, int));
{
- __db_jump.j_seek = func_seek;
+ DB_GLOBAL(j_seek) = func_seek;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_sleep __P((int (*)(u_long, u_long)));
+ */
int
db_env_set_func_sleep(func_sleep)
int (*func_sleep) __P((u_long, u_long));
{
- __db_jump.j_sleep = func_sleep;
+ DB_GLOBAL(j_sleep) = func_sleep;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_unlink __P((int (*)(const char *)));
+ */
int
db_env_set_func_unlink(func_unlink)
int (*func_unlink) __P((const char *));
{
- __db_jump.j_unlink = func_unlink;
+ DB_GLOBAL(j_unlink) = func_unlink;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_unmap __P((int (*)(void *, size_t)));
+ */
int
db_env_set_func_unmap(func_unmap)
int (*func_unmap) __P((void *, size_t));
{
- __db_jump.j_unmap = func_unmap;
+ DB_GLOBAL(j_unmap) = func_unmap;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_write
+ * EXTERN: __P((ssize_t (*)(int, const void *, size_t)));
+ */
int
db_env_set_func_write(func_write)
ssize_t (*func_write) __P((int, const void *, size_t));
{
- __db_jump.j_write = func_write;
+ DB_GLOBAL(j_write) = func_write;
return (0);
}
+/*
+ * EXTERN: int db_env_set_func_yield __P((int (*)(void)));
+ */
int
db_env_set_func_yield(func_yield)
int (*func_yield) __P((void));
{
- __db_jump.j_yield = func_yield;
- return (0);
-}
-
-int
-db_env_set_pageyield(onoff)
- int onoff;
-{
- DB_GLOBAL(db_pageyield) = onoff;
- return (0);
-}
-
-int
-db_env_set_panicstate(onoff)
- int onoff;
-{
- DB_GLOBAL(db_panic) = onoff;
- return (0);
-}
-
-int
-db_env_set_region_init(onoff)
- int onoff;
-{
- DB_GLOBAL(db_region_init) = onoff;
- return (0);
-}
-
-int
-db_env_set_tas_spins(tas_spins)
- u_int32_t tas_spins;
-{
- DB_GLOBAL(db_tas_spins) = tas_spins;
+ DB_GLOBAL(j_yield) = func_yield;
return (0);
}
diff --git a/db/os/os_oflags.c b/db/os/os_oflags.c
index fd413bdac..6313ba23d 100644
--- a/db/os/os_oflags.c
+++ b/db/os/os_oflags.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_oflags.c,v 11.6 2000/10/27 20:32:02 dda Exp $";
+static const char revid[] = "$Id: os_oflags.c,v 11.11 2003/01/08 05:29:23 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -72,23 +72,45 @@ __db_omode(perm)
{
int mode;
-#ifndef S_IRUSR
#ifdef DB_WIN32
+#ifndef S_IRUSR
#define S_IRUSR S_IREAD /* R for owner */
+#endif
+#ifndef S_IWUSR
#define S_IWUSR S_IWRITE /* W for owner */
+#endif
+#ifndef S_IRGRP
#define S_IRGRP 0 /* R for group */
+#endif
+#ifndef S_IWGRP
#define S_IWGRP 0 /* W for group */
+#endif
+#ifndef S_IROTH
#define S_IROTH 0 /* R for other */
+#endif
+#ifndef S_IWOTH
#define S_IWOTH 0 /* W for other */
+#endif
#else
+#ifndef S_IRUSR
#define S_IRUSR 0000400 /* R for owner */
+#endif
+#ifndef S_IWUSR
#define S_IWUSR 0000200 /* W for owner */
+#endif
+#ifndef S_IRGRP
#define S_IRGRP 0000040 /* R for group */
+#endif
+#ifndef S_IWGRP
#define S_IWGRP 0000020 /* W for group */
+#endif
+#ifndef S_IROTH
#define S_IROTH 0000004 /* R for other */
+#endif
+#ifndef S_IWOTH
#define S_IWOTH 0000002 /* W for other */
-#endif /* DB_WIN32 */
#endif
+#endif /* DB_WIN32 */
mode = 0;
if (perm[0] == 'r')
mode |= S_IRUSR;
diff --git a/db/os/os_open.c b/db/os/os_open.c
index cdc75cd73..6a8326b4a 100644
--- a/db/os/os_open.c
+++ b/db/os/os_open.c
@@ -1,19 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_open.c,v 11.21 2001/01/11 18:19:53 bostic Exp $";
+static const char revid[] = "$Id: os_open.c,v 11.48 2003/09/10 00:27:29 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#ifdef HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif
+
#include <fcntl.h>
#include <string.h>
#endif
@@ -21,27 +25,80 @@ static const char revid[] = "$Id: os_open.c,v 11.21 2001/01/11 18:19:53 bostic E
#include "db_int.h"
#ifdef HAVE_QNX
-static int __os_region_open __P((DB_ENV *, const char *, int, int, DB_FH *));
+static int __os_region_open __P((DB_ENV *, const char *, int, int, DB_FH **));
+#endif
+
+/*
+ * __os_have_direct --
+ * Check to see if we support direct I/O.
+ *
+ * PUBLIC: int __os_have_direct __P((void));
+ */
+int
+__os_have_direct()
+{
+ int ret;
+
+ ret = 0;
+
+#ifdef HAVE_O_DIRECT
+ ret = 1;
#endif
+#if defined(HAVE_DIRECTIO) && defined(DIRECTIO_ON)
+ ret = 1;
+#endif
+ return (ret);
+}
/*
* __os_open --
* Open a file.
*
- * PUBLIC: int __os_open __P((DB_ENV *, const char *, u_int32_t, int, DB_FH *));
+ * PUBLIC: int __os_open
+ * PUBLIC: __P((DB_ENV *, const char *, u_int32_t, int, DB_FH **));
*/
int
-__os_open(dbenv, name, flags, mode, fhp)
+__os_open(dbenv, name, flags, mode, fhpp)
DB_ENV *dbenv;
const char *name;
u_int32_t flags;
int mode;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
+ return (__os_open_extend(dbenv, name, 0, 0, flags, mode, fhpp));
+}
+
+/*
+ * __os_open_extend --
+ * Open a file descriptor (including page size and log size information).
+ *
+ * PUBLIC: int __os_open_extend __P((DB_ENV *,
+ * PUBLIC: const char *, u_int32_t, u_int32_t, u_int32_t, int, DB_FH **));
+ */
+int
+__os_open_extend(dbenv, name, log_size, page_size, flags, mode, fhpp)
+ DB_ENV *dbenv;
+ const char *name;
+ u_int32_t log_size, page_size, flags;
+ int mode;
+ DB_FH **fhpp;
+{
+ DB_FH *fhp;
int oflags, ret;
+ COMPQUIET(log_size, 0);
+ COMPQUIET(page_size, 0);
+
+ *fhpp = NULL;
oflags = 0;
+#define OKFLAGS \
+ (DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_EXCL | DB_OSO_LOG | \
+ DB_OSO_RDONLY | DB_OSO_REGION | DB_OSO_SEQ | DB_OSO_TEMP | \
+ DB_OSO_TRUNC)
+ if ((ret = __db_fchk(dbenv, "__os_open", flags, OKFLAGS)) != 0)
+ return (ret);
+
#if defined(O_BINARY)
/*
* If there's a binary-mode open flag, set it, we never want any
@@ -84,14 +141,29 @@ __os_open(dbenv, name, flags, mode, fhp)
if (LF_ISSET(DB_OSO_TRUNC))
oflags |= O_TRUNC;
+#ifdef HAVE_O_DIRECT
+ if (LF_ISSET(DB_OSO_DIRECT))
+ oflags |= O_DIRECT;
+#endif
+
#ifdef HAVE_QNX
if (LF_ISSET(DB_OSO_REGION))
- return (__os_region_open(dbenv, name, oflags, mode, fhp));
+ return (__os_qnx_region_open(dbenv, name, oflags, mode, fhpp));
#endif
/* Open the file. */
- if ((ret = __os_openhandle(dbenv, name, oflags, mode, fhp)) != 0)
+ if ((ret = __os_openhandle(dbenv, name, oflags, mode, &fhp)) != 0)
return (ret);
+#if defined(HAVE_DIRECTIO) && defined(DIRECTIO_ON)
+ /*
+ * The Solaris C library includes directio, but you have to set special
+ * compile flags to #define DIRECTIO_ON. Require both in order to call
+ * directio.
+ */
+ if (LF_ISSET(DB_OSO_DIRECT))
+ (void)directio(fhp->fd, DIRECTIO_ON);
+#endif
+
/*
* Delete any temporary file.
*
@@ -102,52 +174,75 @@ __os_open(dbenv, name, flags, mode, fhp)
* reasonable way to avoid the race (playing signal games isn't worth
* the portability nightmare), so we just live with it.
*/
- if (LF_ISSET(DB_OSO_TEMP))
+ if (LF_ISSET(DB_OSO_TEMP)) {
+#if defined(HAVE_UNLINK_WITH_OPEN_FAILURE) || defined(CONFIG_TEST)
+ if ((ret = __os_strdup(dbenv, name, &fhp->name)) != 0) {
+ (void)__os_closehandle(dbenv, fhp);
+ (void)__os_unlink(dbenv, name);
+ return (ret);
+ }
+ F_SET(fhp, DB_FH_UNLINK);
+#else
(void)__os_unlink(dbenv, name);
+#endif
+ }
+ *fhpp = fhp;
return (0);
}
#ifdef HAVE_QNX
/*
- * __os_region_open --
+ * __os_qnx_region_open --
* Open a shared memory region file using POSIX shm_open.
*/
static int
-__os_region_open(dbenv, name, oflags, mode, fhp)
+__os_qnx_region_open(dbenv, name, oflags, mode, fhpp)
DB_ENV *dbenv;
const char *name;
int oflags;
int mode;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
+ DB_FH *fhp;
int ret;
char *newname;
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), fhpp)) != 0)
+ return (ret);
+ fhp = *fhpp;
+
if ((ret = __os_shmname(dbenv, name, &newname)) != 0)
goto err;
- memset(fhp, 0, sizeof(*fhp));
+
+ /*
+ * Once we have created the object, we don't need the name
+ * anymore. Other callers of this will convert themselves.
+ */
fhp->fd = shm_open(newname, oflags, mode);
- if (fhp->fd == -1)
+ __os_free(dbenv, newname);
+
+ if (fhp->fd == -1) {
ret = __os_get_errno();
- else {
+ goto err;
+ }
+
+ F_SET(fhp, DB_FH_OPENED);
+
#ifdef HAVE_FCNTL_F_SETFD
- /* Deny file descriptor acces to any child process. */
- if (fcntl(fhp->fd, F_SETFD, 1) == -1) {
- ret = __os_get_errno();
- __db_err(dbenv, "fcntl(F_SETFD): %s", strerror(ret));
- __os_closehandle(fhp);
- } else
+ /* Deny file descriptor acces to any child process. */
+ if (fcntl(fhp->fd, F_SETFD, 1) == -1) {
+ ret = __os_get_errno();
+ __db_err(dbenv, "fcntl(F_SETFD): %s", strerror(ret));
+ goto err;
+ }
#endif
- F_SET(fhp, DB_FH_VALID);
+
+err: if (ret != 0) {
+ (void)__os_closehandle(dbenv, fhp);
+ *fhpp = NULL;
}
- /*
- * Once we have created the object, we don't need the name
- * anymore. Other callers of this will convert themselves.
- */
-err:
- if (newname != NULL)
- __os_free(newname, 0);
+
return (ret);
}
@@ -155,7 +250,9 @@ err:
* __os_shmname --
* Translate a pathname into a shm_open memory object name.
*
+ * PUBLIC: #ifdef HAVE_QNX
* PUBLIC: int __os_shmname __P((DB_ENV *, const char *, char **));
+ * PUBLIC: #endif
*/
int
__os_shmname(dbenv, name, newnamep)
@@ -206,7 +303,7 @@ __os_shmname(dbenv, name, newnamep)
* If we have a path component, copy and return it.
*/
ret = __os_strdup(dbenv, p, newnamep);
- __os_free(tmpname, 0);
+ __os_free(dbenv, tmpname);
return (ret);
}
@@ -215,11 +312,11 @@ __os_shmname(dbenv, name, newnamep)
* Add a leading slash, and copy the remainder.
*/
size = strlen(tmpname) + 2;
- if ((ret = __os_malloc(dbenv, size, NULL, &p)) != 0)
+ if ((ret = __os_malloc(dbenv, size, &p)) != 0)
return (ret);
p[0] = '/';
memcpy(&p[1], tmpname, size-1);
- __os_free(tmpname, 0);
+ __os_free(dbenv, tmpname);
*newnamep = p;
return (0);
}
diff --git a/db/os/os_region.c b/db/os/os_region.c
index 1e36fc2cb..ff7cd5a07 100644
--- a/db/os/os_region.c
+++ b/db/os/os_region.c
@@ -1,23 +1,23 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_region.c,v 11.9 2000/11/30 00:58:42 ubell Exp $";
+static const char revid[] = "$Id: os_region.c,v 11.17 2003/07/13 17:45:23 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_r_attach --
@@ -70,7 +70,7 @@ __os_r_attach(dbenv, infop, rp)
}
#endif
if ((ret =
- __os_malloc(dbenv, rp->size, NULL, &infop->addr)) != 0)
+ __os_malloc(dbenv, rp->size, &infop->addr)) != 0)
return (ret);
#if defined(UMRW) && !defined(DIAGNOSTIC)
memset(infop->addr, CLEAR_BYTE, rp->size);
@@ -79,8 +79,8 @@ __os_r_attach(dbenv, infop, rp)
}
/* If the user replaced the map call, call through their interface. */
- if (__db_jump.j_map != NULL)
- return (__db_jump.j_map(infop->name,
+ if (DB_GLOBAL(j_map) != NULL)
+ return (DB_GLOBAL(j_map)(infop->name,
rp->size, 1, 0, &infop->addr));
return (__os_r_sysattach(dbenv, infop, rp));
@@ -104,13 +104,13 @@ __os_r_detach(dbenv, infop, destroy)
/* If a region is private, free the memory. */
if (F_ISSET(dbenv, DB_ENV_PRIVATE)) {
- __os_free(infop->addr, rp->size);
+ __os_free(dbenv, infop->addr);
return (0);
}
/* If the user replaced the map call, call through their interface. */
- if (__db_jump.j_unmap != NULL)
- return (__db_jump.j_unmap(infop->addr, rp->size));
+ if (DB_GLOBAL(j_unmap) != NULL)
+ return (DB_GLOBAL(j_unmap)(infop->addr, rp->size));
return (__os_r_sysdetach(dbenv, infop, destroy));
}
diff --git a/db/os/os_rename.c b/db/os/os_rename.c
index 8108bba67..9fee9b729 100644
--- a/db/os/os_rename.c
+++ b/db/os/os_rename.c
@@ -1,46 +1,49 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_rename.c,v 11.6 2000/04/14 16:56:33 ubell Exp $";
+static const char revid[] = "$Id: os_rename.c,v 11.15 2003/05/05 19:55:04 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_rename --
- * Rename a file.
+ * Rename a file. If flags is non-zero, then errors are OK and we
+ * should not output an error message.
*
- * PUBLIC: int __os_rename __P((DB_ENV *, const char *, const char *));
+ * PUBLIC: int __os_rename __P((DB_ENV *,
+ * PUBLIC: const char *, const char *, u_int32_t));
*/
int
-__os_rename(dbenv, old, new)
+__os_rename(dbenv, old, new, flags)
DB_ENV *dbenv;
const char *old, *new;
+ u_int32_t flags;
{
- int ret;
-
- ret = __db_jump.j_rename != NULL ?
- __db_jump.j_rename(old, new) : rename(old, new);
-
- if (ret == -1) {
- ret = __os_get_errno();
- __db_err(dbenv, "Rename %s %s: %s", old, new, strerror(ret));
- }
-
+ int ret, retries;
+
+ retries = 0;
+ do {
+ ret = DB_GLOBAL(j_rename) != NULL ?
+ DB_GLOBAL(j_rename)(old, new) : rename(old, new);
+ } while (ret != 0 &&
+ ((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
+
+ if (ret != 0 && flags == 0)
+ __db_err(dbenv, "rename %s %s: %s", old, new, strerror(ret));
return (ret);
}
diff --git a/db/os/os_root.c b/db/os/os_root.c
index 753285c1b..9337700ac 100644
--- a/db/os/os_root.c
+++ b/db/os/os_root.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_root.c,v 11.4 2000/02/14 03:00:05 bostic Exp $";
+static const char revid[] = "$Id: os_root.c,v 11.7 2003/01/08 05:29:32 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_rpath.c b/db/os/os_rpath.c
index 75d394ef2..1ebff0fc1 100644
--- a/db/os/os_rpath.c
+++ b/db/os/os_rpath.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_rpath.c,v 11.5 2000/06/30 13:40:30 sue Exp $";
+static const char revid[] = "$Id: os_rpath.c,v 11.8 2003/01/08 05:29:34 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os/os_rw.c b/db/os/os_rw.c
index 166dbc522..df3a88615 100644
--- a/db/os/os_rw.c
+++ b/db/os/os_rw.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_rw.c,v 11.24 2002/07/12 18:56:52 bostic Exp ";
+static const char revid[] = "$Id: os_rw.c,v 11.30 2003/05/23 21:19:05 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -30,27 +30,29 @@ static int __os_physwrite __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
* __os_io --
* Do an I/O.
*
- * PUBLIC: int __os_io __P((DB_ENV *, DB_IO *, int, size_t *));
+ * PUBLIC: int __os_io __P((DB_ENV *,
+ * PUBLIC: int, DB_FH *, db_pgno_t, size_t, u_int8_t *, size_t *));
*/
int
-__os_io(dbenv, db_iop, op, niop)
+__os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)
DB_ENV *dbenv;
- DB_IO *db_iop;
int op;
- size_t *niop;
+ DB_FH *fhp;
+ db_pgno_t pgno;
+ size_t pagesize, *niop;
+ u_int8_t *buf;
{
int ret;
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(db_iop->fhp, DB_FH_VALID) && db_iop->fhp->fd != -1);
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
#if defined(HAVE_PREAD) && defined(HAVE_PWRITE)
switch (op) {
case DB_IO_READ:
if (DB_GLOBAL(j_read) != NULL)
goto slow;
- *niop = pread(db_iop->fhp->fd, db_iop->buf,
- db_iop->bytes, (off_t)db_iop->pgno * db_iop->pagesize);
+ *niop = pread(fhp->fd, buf, pagesize, (off_t)pgno * pagesize);
break;
case DB_IO_WRITE:
if (DB_GLOBAL(j_write) != NULL)
@@ -59,31 +61,28 @@ __os_io(dbenv, db_iop, op, niop)
if (__os_fs_notzero())
goto slow;
#endif
- *niop = pwrite(db_iop->fhp->fd, db_iop->buf,
- db_iop->bytes, (off_t)db_iop->pgno * db_iop->pagesize);
+ *niop = pwrite(fhp->fd, buf, pagesize, (off_t)pgno * pagesize);
break;
}
- if (*niop == (size_t)db_iop->bytes)
+ if (*niop == (size_t)pagesize)
return (0);
slow:
#endif
- MUTEX_THREAD_LOCK(dbenv, db_iop->mutexp);
+ MUTEX_THREAD_LOCK(dbenv, fhp->mutexp);
- if ((ret = __os_seek(dbenv, db_iop->fhp,
- db_iop->pagesize, db_iop->pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp,
+ pagesize, pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
goto err;
switch (op) {
case DB_IO_READ:
- ret = __os_read(dbenv,
- db_iop->fhp, db_iop->buf, db_iop->bytes, niop);
+ ret = __os_read(dbenv, fhp, buf, pagesize, niop);
break;
case DB_IO_WRITE:
- ret = __os_write(dbenv,
- db_iop->fhp, db_iop->buf, db_iop->bytes, niop);
+ ret = __os_write(dbenv, fhp, buf, pagesize, niop);
break;
}
-err: MUTEX_THREAD_UNLOCK(dbenv, db_iop->mutexp);
+err: MUTEX_THREAD_UNLOCK(dbenv, fhp->mutexp);
return (ret);
@@ -105,21 +104,24 @@ __os_read(dbenv, fhp, addr, len, nrp)
{
size_t offset;
ssize_t nr;
- int ret;
+ int ret, retries;
u_int8_t *taddr;
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_VALID) && fhp->fd != -1);
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+ retries = 0;
for (taddr = addr,
offset = 0; offset < len; taddr += nr, offset += nr) {
retry: if ((nr = DB_GLOBAL(j_read) != NULL ?
DB_GLOBAL(j_read)(fhp->fd, taddr, len - offset) :
read(fhp->fd, taddr, len - offset)) < 0) {
- if ((ret = __os_get_errno()) == EINTR)
+ ret = __os_get_errno();
+ if ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
goto retry;
- __db_err(dbenv, "read: 0x%x, %lu: %s", taddr,
- (u_long)len-offset, strerror(ret));
+ __db_err(dbenv, "read: 0x%x, %lu: %s",
+ (u_int)taddr, (u_long)len-offset, strerror(ret));
return (ret);
}
if (nr == 0)
@@ -144,7 +146,7 @@ __os_write(dbenv, fhp, addr, len, nwp)
size_t *nwp;
{
/* Check for illegal usage. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_VALID) && fhp->fd != -1);
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
#ifdef HAVE_FILESYSTEM_NOTZERO
/* Zero-fill as necessary. */
@@ -171,7 +173,7 @@ __os_physwrite(dbenv, fhp, addr, len, nwp)
{
size_t offset;
ssize_t nw;
- int ret;
+ int ret, retries;
u_int8_t *taddr;
#if defined(HAVE_FILESYSTEM_NOTZERO) && defined(DIAGNOSTIC)
@@ -185,15 +187,18 @@ __os_physwrite(dbenv, fhp, addr, len, nwp)
}
#endif
+ retries = 0;
for (taddr = addr,
offset = 0; offset < len; taddr += nw, offset += nw)
retry: if ((nw = DB_GLOBAL(j_write) != NULL ?
DB_GLOBAL(j_write)(fhp->fd, taddr, len - offset) :
write(fhp->fd, taddr, len - offset)) < 0) {
- if ((ret = __os_get_errno()) == EINTR)
+ ret = __os_get_errno();
+ if ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
goto retry;
- __db_err(dbenv, "write: 0x%x, %lu: %s", taddr,
- (u_long)len-offset, strerror(ret));
+ __db_err(dbenv, "write: 0x%x, %lu: %s",
+ (u_int)taddr, (u_long)len-offset, strerror(ret));
return (ret);
}
*nwp = len;
diff --git a/db/os/os_seek.c b/db/os/os_seek.c
index e0c21118e..c20c27514 100644
--- a/db/os/os_seek.c
+++ b/db/os/os_seek.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_seek.c,v 11.18 2002/07/12 18:56:52 bostic Exp ";
+static const char revid[] = "$Id: os_seek.c,v 11.23 2003/02/16 15:54:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -39,7 +39,10 @@ __os_seek(dbenv, fhp, pgsize, pageno, relative, isrewind, db_whence)
DB_OS_SEEK db_whence;
{
off_t offset;
- int ret, whence;
+ int ret, retries, whence;
+
+ /* Check for illegal usage. */
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
switch (db_whence) {
case DB_OS_SEEK_CUR:
@@ -62,10 +65,12 @@ __os_seek(dbenv, fhp, pgsize, pageno, relative, isrewind, db_whence)
offset = (off_t)pgsize * pageno + relative;
if (isrewind)
offset = -offset;
+ retries = 0;
do {
ret = lseek(fhp->fd, offset, whence) == -1 ?
__os_get_errno() : 0;
- } while (ret == EINTR);
+ } while ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
}
if (ret == 0) {
diff --git a/db/os/os_sleep.c b/db/os/os_sleep.c
index 137cd73b7..bef69f624 100644
--- a/db/os/os_sleep.c
+++ b/db/os/os_sleep.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_sleep.c,v 11.7 2000/04/07 14:26:36 bostic Exp $";
+static const char revid[] = "$Id: os_sleep.c,v 11.18 2003/05/14 17:01:23 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -21,6 +21,7 @@ static const char revid[] = "$Id: os_sleep.c,v 11.7 2000/04/07 14:26:36 bostic E
#ifdef HAVE_VXWORKS
#include <sys/times.h>
#include <time.h>
+#include <selectLib.h>
#else
#if TIME_WITH_SYS_TIME
#include <sys/time.h>
@@ -39,7 +40,6 @@ static const char revid[] = "$Id: os_sleep.c,v 11.7 2000/04/07 14:26:36 bostic E
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_sleep --
@@ -59,16 +59,31 @@ __os_sleep(dbenv, secs, usecs)
for (; usecs >= 1000000; usecs -= 1000000)
++secs;
- if (__db_jump.j_sleep != NULL)
- return (__db_jump.j_sleep(secs, usecs));
+ if (DB_GLOBAL(j_sleep) != NULL)
+ return (DB_GLOBAL(j_sleep)(secs, usecs));
/*
* It's important that we yield the processor here so that other
* processes or threads are permitted to run.
+ *
+ * Sheer raving paranoia -- don't select for 0 time.
*/
t.tv_sec = secs;
- t.tv_usec = usecs;
- ret = select(0, NULL, NULL, NULL, &t) == -1 ? __os_get_errno() : 0;
+ if (secs == 0 && usecs == 0)
+ t.tv_usec = 1;
+ else
+ t.tv_usec = usecs;
+
+ /*
+ * We don't catch interrupts and restart the system call here, unlike
+ * other Berkeley DB system calls. This may be a user attempting to
+ * interrupt a sleeping DB utility (for example, db_checkpoint), and
+ * we want the utility to see the signal and quit. This assumes it's
+ * always OK for DB to sleep for less time than originally scheduled.
+ */
+ if ((ret = select(0, NULL, NULL, NULL, &t)) != 0)
+ if ((ret = __os_get_errno()) == EINTR)
+ ret = 0;
if (ret != 0)
__db_err(dbenv, "select: %s", strerror(ret));
diff --git a/db/os/os_spin.c b/db/os/os_spin.c
index b0800b988..6cd90c274 100644
--- a/db/os/os_spin.c
+++ b/db/os/os_spin.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_spin.c,v 11.5 2000/03/30 01:46:42 ubell Exp $";
+static const char revid[] = "$Id: os_spin.c,v 11.17 2003/11/07 16:30:57 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -22,9 +22,10 @@ static const char revid[] = "$Id: os_spin.c,v 11.5 2000/03/30 01:46:42 ubell Exp
#endif
#include "db_int.h"
-#include "os_jump.h"
#if defined(HAVE_PSTAT_GETDYNAMIC)
+static int __os_pstat_getdynamic __P((void));
+
/*
* __os_pstat_getdynamic --
* HP/UX.
@@ -40,6 +41,8 @@ __os_pstat_getdynamic()
#endif
#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+static int __os_sysconf __P((void));
+
/*
* __os_sysconf --
* Solaris, Linux.
@@ -47,49 +50,47 @@ __os_pstat_getdynamic()
static int
__os_sysconf()
{
- int nproc;
+ long nproc;
- return ((nproc = sysconf(_SC_NPROCESSORS_ONLN)) > 1 ? nproc : 1);
+ return ((nproc = sysconf(_SC_NPROCESSORS_ONLN)) > 1 ? (int)nproc : 1);
}
#endif
/*
* __os_spin --
- * Return the number of default spins before blocking.
+ * Set the number of default spins before blocking.
*
- * PUBLIC: int __os_spin __P((void));
+ * PUBLIC: void __os_spin __P((DB_ENV *));
*/
-int
-__os_spin()
+void
+__os_spin(dbenv)
+ DB_ENV *dbenv;
{
/*
* If the application specified a value or we've already figured it
* out, return it.
*
- * XXX
- * We don't want to repeatedly call the underlying function because
- * it can be expensive (e.g., requiring multiple filesystem accesses
- * under Debian Linux).
+ * Don't repeatedly call the underlying function because it can be
+ * expensive (for example, taking multiple filesystem accesses under
+ * Debian Linux).
*/
- if (DB_GLOBAL(db_tas_spins) != 0)
- return (DB_GLOBAL(db_tas_spins));
+ if (dbenv->tas_spins != 0)
+ return;
- DB_GLOBAL(db_tas_spins) = 1;
+ dbenv->tas_spins = 1;
#if defined(HAVE_PSTAT_GETDYNAMIC)
- DB_GLOBAL(db_tas_spins) = __os_pstat_getdynamic();
+ dbenv->tas_spins = __os_pstat_getdynamic();
#endif
#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
- DB_GLOBAL(db_tas_spins) = __os_sysconf();
+ dbenv->tas_spins = __os_sysconf();
#endif
/*
* Spin 50 times per processor, we have anecdotal evidence that this
* is a reasonable value.
*/
- if (DB_GLOBAL(db_tas_spins) != 1)
- DB_GLOBAL(db_tas_spins) *= 50;
-
- return (DB_GLOBAL(db_tas_spins));
+ if (dbenv->tas_spins != 1)
+ dbenv->tas_spins *= 50;
}
/*
@@ -103,7 +104,10 @@ __os_yield(dbenv, usecs)
DB_ENV *dbenv;
u_long usecs;
{
- if (__db_jump.j_yield != NULL && __db_jump.j_yield() == 0)
+ if (DB_GLOBAL(j_yield) != NULL && DB_GLOBAL(j_yield)() == 0)
return;
- __os_sleep(dbenv, 0, usecs);
+#ifdef HAVE_VXWORKS
+ taskDelay(1);
+#endif
+ (void)__os_sleep(dbenv, 0, usecs);
}
diff --git a/db/os/os_stat.c b/db/os/os_stat.c
index 1590e8ecd..cdc362a3b 100644
--- a/db/os/os_stat.c
+++ b/db/os/os_stat.c
@@ -1,24 +1,24 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_stat.c,v 11.8 2000/10/27 20:32:02 dda Exp $";
+static const char revid[] = "$Id: os_stat.c,v 11.24 2003/02/16 15:54:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <sys/stat.h>
+
#include <string.h>
#endif
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_exists --
@@ -31,20 +31,31 @@ __os_exists(path, isdirp)
const char *path;
int *isdirp;
{
+ int ret, retries;
struct stat sb;
- if (__db_jump.j_exists != NULL)
- return (__db_jump.j_exists(path, isdirp));
+ if (DB_GLOBAL(j_exists) != NULL)
+ return (DB_GLOBAL(j_exists)(path, isdirp));
+ retries = 0;
+ do {
+ ret =
#ifdef HAVE_VXWORKS
- if (stat((char *)path, &sb) != 0)
+ stat((char *)path, &sb);
#else
- if (stat(path, &sb) != 0)
+ stat(path, &sb);
#endif
- return (__os_get_errno());
+ if (ret != 0)
+ ret = __os_get_errno();
+ } while ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
+
+ if (ret != 0)
+ return (ret);
#if !defined(S_ISDIR) || defined(STAT_MACROS_BROKEN)
-#ifdef DB_WIN32
+#undef S_ISDIR
+#ifdef _S_IFDIR
#define S_ISDIR(m) (_S_IFDIR & (m))
#else
#define S_ISDIR(m) (((m) & 0170000) == 0040000)
@@ -71,24 +82,31 @@ __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
DB_FH *fhp;
u_int32_t *mbytesp, *bytesp, *iosizep;
{
- int ret;
+ int ret, retries;
struct stat sb;
- if (__db_jump.j_ioinfo != NULL)
- return (__db_jump.j_ioinfo(path,
+ if (DB_GLOBAL(j_ioinfo) != NULL)
+ return (DB_GLOBAL(j_ioinfo)(path,
fhp->fd, mbytesp, bytesp, iosizep));
+ /* Check for illegal usage. */
+ DB_ASSERT(F_ISSET(fhp, DB_FH_OPENED) && fhp->fd != -1);
+
+ retries = 0;
+retry:
if (fstat(fhp->fd, &sb) == -1) {
- ret = __os_get_errno();
+ if (((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
+ goto retry;
__db_err(dbenv, "fstat: %s", strerror(ret));
return (ret);
}
/* Return the size of the file. */
if (mbytesp != NULL)
- *mbytesp = sb.st_size / MEGABYTE;
+ *mbytesp = (u_int32_t)(sb.st_size / MEGABYTE);
if (bytesp != NULL)
- *bytesp = sb.st_size % MEGABYTE;
+ *bytesp = (u_int32_t)(sb.st_size % MEGABYTE);
/*
* Return the underlying filesystem blocksize, if available.
@@ -97,7 +115,7 @@ __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
* Check for a 0 size -- the HP MPE/iX architecture has st_blksize,
* but it's always 0.
*/
-#ifdef HAVE_ST_BLKSIZE
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
if (iosizep != NULL && (*iosizep = sb.st_blksize) == 0)
*iosizep = DB_DEF_IOSIZE;
#else
diff --git a/db/os/os_tmpdir.c b/db/os/os_tmpdir.c
index 0dff5c5b7..eff37443d 100644
--- a/db/os/os_tmpdir.c
+++ b/db/os/os_tmpdir.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_tmpdir.c,v 11.16 2001/01/08 20:42:06 bostic Exp $";
+static const char revid[] = "$Id: os_tmpdir.c,v 11.20 2003/01/08 05:29:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -37,6 +37,8 @@ __os_tmpdir(dbenv, flags)
DB_ENV *dbenv;
u_int32_t flags;
{
+ int isdir;
+
/*
* !!!
* Don't change this to:
@@ -96,7 +98,7 @@ __os_tmpdir(dbenv, flags)
#endif
#ifdef DB_WIN32
/* Get the path to the temporary directory. */
- {int isdir, len;
+ {int len;
char *eos, temp[MAXPATHLEN + 1];
if ((len = GetTempPath(sizeof(temp) - 1, temp)) > 2) {
@@ -113,7 +115,7 @@ __os_tmpdir(dbenv, flags)
/* Step through the static list looking for a possibility. */
for (lp = list; *lp != NULL; ++lp)
- if (__os_exists(*lp, NULL) == 0)
+ if (__os_exists(*lp, &isdir) == 0 && isdir != 0)
return (__os_strdup(dbenv, *lp, &dbenv->db_tmp_dir));
return (0);
}
diff --git a/db/os/os_unlink.c b/db/os/os_unlink.c
index 56c401fe3..ab70f6eb5 100644
--- a/db/os/os_unlink.c
+++ b/db/os/os_unlink.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_unlink.c,v 11.13 2000/11/30 00:58:42 ubell Exp $";
+static const char revid[] = "$Id: os_unlink.c,v 11.26 2003/01/08 05:29:43 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,7 +19,42 @@ static const char revid[] = "$Id: os_unlink.c,v 11.13 2000/11/30 00:58:42 ubell
#endif
#include "db_int.h"
-#include "os_jump.h"
+
+/*
+ * __os_region_unlink --
+ * Remove a shared memory object file.
+ *
+ * PUBLIC: int __os_region_unlink __P((DB_ENV *, const char *));
+ */
+int
+__os_region_unlink(dbenv, path)
+ DB_ENV *dbenv;
+ const char *path;
+{
+#ifdef HAVE_QNX
+ int ret;
+ char *newname;
+
+ if ((ret = __os_shmname(dbenv, path, &newname)) != 0)
+ goto err;
+
+ if ((ret = shm_unlink(newname)) != 0) {
+ ret = __os_get_errno();
+ if (ret != ENOENT)
+ __db_err(dbenv, "shm_unlink: %s: %s",
+ newname, strerror(ret));
+ }
+err:
+ if (newname != NULL)
+ __os_free(dbenv, newname);
+ return (ret);
+#else
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
+ (void)__db_overwrite(dbenv, path);
+
+ return (__os_unlink(dbenv, path));
+#endif
+}
/*
* __os_unlink --
@@ -32,17 +67,20 @@ __os_unlink(dbenv, path)
DB_ENV *dbenv;
const char *path;
{
- int ret;
+ int ret, retries;
- ret = __db_jump.j_unlink != NULL ?
- __db_jump.j_unlink(path) :
+ retries = 0;
+retry: ret = DB_GLOBAL(j_unlink) != NULL ?
+ DB_GLOBAL(j_unlink)(path) :
#ifdef HAVE_VXWORKS
unlink((char *)path);
#else
unlink(path);
#endif
if (ret == -1) {
- ret = __os_get_errno();
+ if (((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
+ goto retry;
/*
* XXX
* We really shouldn't be looking at this value ourselves,
@@ -66,41 +104,8 @@ __os_unlink(dbenv, path)
/* FALLTHROUGH */
#endif
if (ret != ENOENT)
- __db_err(dbenv, "Unlink: %s: %s", path, strerror(ret));
+ __db_err(dbenv, "unlink: %s: %s", path, strerror(ret));
}
return (ret);
}
-
-/*
- * __os_region_unlink --
- * Remove a shared memory object file.
- *
- * PUBLIC: int __os_region_unlink __P((DB_ENV *, const char *));
- */
-int
-__os_region_unlink(dbenv, path)
- DB_ENV *dbenv;
- const char *path;
-{
-#ifdef HAVE_QNX
- int ret;
- char *newname;
-
- if ((ret = __os_shmname(dbenv, path, &newname)) != 0)
- goto err;
-
- if ((ret = shm_unlink(newname)) != 0) {
- ret = __os_get_errno();
- if (ret != ENOENT)
- __db_err(dbenv, "Shm_unlink: %s: %s",
- newname, strerror(ret));
- }
-err:
- if (newname != NULL)
- __os_free(newname, 0);
- return (ret);
-#else
- return (__os_unlink(dbenv, path));
-#endif
-}
diff --git a/db/os_vxworks/os_vx_abs.c b/db/os_vxworks/os_vx_abs.c
index c3142dbe7..87dbbdb8e 100644
--- a/db/os_vxworks/os_vx_abs.c
+++ b/db/os_vxworks/os_vx_abs.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_vx_abs.c,v 1.7 2002/01/11 15:53:02 bostic Exp ";
+static const char revid[] = "$Id: os_vx_abs.c,v 1.8 2003/01/08 05:32:23 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
diff --git a/db/os_vxworks/os_vx_config.c b/db/os_vxworks/os_vx_config.c
index a25583832..2535640bf 100644
--- a/db/os_vxworks/os_vx_config.c
+++ b/db/os_vxworks/os_vx_config.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_vx_config.c,v 1.4 2002/01/11 15:53:03 bostic Exp ";
+static const char revid[] = "$Id: os_vx_config.c,v 1.5 2003/01/08 05:32:33 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
diff --git a/db/os_vxworks/os_vx_map.c b/db/os_vxworks/os_vx_map.c
index 7e849f571..fc8ee52f0 100644
--- a/db/os_vxworks/os_vx_map.c
+++ b/db/os_vxworks/os_vx_map.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*
* This code is derived from software contributed to Sleepycat Software by
@@ -11,7 +11,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_vx_map.c,v 1.21 2002/03/06 19:36:58 margo Exp ";
+static const char revid[] = "$Id: os_vx_map.c,v 1.22 2003/01/08 05:32:38 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/os_win32/os_abs.c b/db/os_win32/os_abs.c
index 7b1e3fd05..c495235c6 100644
--- a/db/os_win32/os_abs.c
+++ b/db/os_win32/os_abs.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_abs.c,v 11.3 2000/02/14 03:00:06 bostic Exp $";
+static const char revid[] = "$Id: os_abs.c,v 11.6 2003/01/08 05:33:51 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
diff --git a/db/os_win32/os_clock.c b/db/os_win32/os_clock.c
index a5069796d..9db0548ca 100644
--- a/db/os_win32/os_clock.c
+++ b/db/os_win32/os_clock.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_clock.c,v 1.7 2002/07/12 18:56:53 bostic Exp ";
+static const char revid[] = "$Id: os_clock.c,v 1.8 2003/01/08 05:33:57 bostic Exp $";
#endif /* not lint */
#include <sys/types.h>
diff --git a/db/os_win32/os_config.c b/db/os_win32/os_config.c
index 093c5afe9..87dfe3422 100644
--- a/db/os_win32/os_config.c
+++ b/db/os_win32/os_config.c
@@ -1,19 +1,43 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_config.c,v 11.13 2002/01/11 15:53:06 bostic Exp ";
+static const char revid[] = "$Id: os_config.c,v 11.15 2003/01/08 05:34:00 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
/*
+ * __os_is_winnt --
+ * Return 1 if Windows/NT, otherwise 0.
+ *
+ * PUBLIC: int __os_is_winnt __P((void));
+ */
+int
+__os_is_winnt()
+{
+ static int __os_type = -1;
+
+ /*
+ * The value of __os_type is computed only once, and cached to
+ * avoid the overhead of repeated calls to GetVersion().
+ */
+ if (__os_type == -1) {
+ if ((GetVersion() & 0x80000000) == 0)
+ __os_type = 1;
+ else
+ __os_type = 0;
+ }
+ return (__os_type);
+}
+
+/*
* __os_fs_notzero --
* Return 1 if allocated filesystem blocks are not zeroed.
*/
diff --git a/db/os_win32/os_dir.c b/db/os_win32/os_dir.c
index d37b76010..8f329fbd9 100644
--- a/db/os_win32/os_dir.c
+++ b/db/os_win32/os_dir.c
@@ -1,18 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_dir.c,v 11.4 2000/03/28 21:50:17 ubell Exp $";
+static const char revid[] = "$Id: os_dir.c,v 11.14 2003/02/28 17:25:26 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_dirlist --
@@ -26,14 +25,19 @@ __os_dirlist(dbenv, dir, namesp, cntp)
int *cntp;
{
struct _finddata_t fdata;
+#ifdef _WIN64
+ intptr_t dirhandle;
+#else
long dirhandle;
+#endif
int arraysz, cnt, finished, ret;
char **names, filespec[MAXPATHLEN];
- if (__db_jump.j_dirlist != NULL)
- return (__db_jump.j_dirlist(dir, namesp, cntp));
+ if (DB_GLOBAL(j_dirlist) != NULL)
+ return (DB_GLOBAL(j_dirlist)(dir, namesp, cntp));
- (void)snprintf(filespec, sizeof(filespec), "%s/*", dir);
+ (void)snprintf(filespec,
+ sizeof(filespec), "%s%c*", dir, PATH_SEPARATOR[0]);
if ((dirhandle = _findfirst(filespec, &fdata)) == -1)
return (__os_get_errno());
@@ -43,12 +47,12 @@ __os_dirlist(dbenv, dir, namesp, cntp)
if (cnt >= arraysz) {
arraysz += 100;
if ((ret = __os_realloc(dbenv,
- arraysz * sizeof(names[0]), NULL, &names)) != 0)
+ arraysz * sizeof(names[0]), &names)) != 0)
goto nomem;
}
if ((ret = __os_strdup(dbenv, fdata.name, &names[cnt])) != 0)
goto nomem;
- if (_findnext(dirhandle,&fdata) != 0)
+ if (_findnext(dirhandle, &fdata) != 0)
finished = 1;
}
_findclose(dirhandle);
@@ -58,7 +62,7 @@ __os_dirlist(dbenv, dir, namesp, cntp)
return (0);
nomem: if (names != NULL)
- __os_dirfree(names, cnt);
+ __os_dirfree(dbenv, names, cnt);
return (ret);
}
@@ -67,16 +71,17 @@ nomem: if (names != NULL)
* Free the list of files.
*/
void
-__os_dirfree(names, cnt)
+__os_dirfree(dbenv, names, cnt)
+ DB_ENV *dbenv;
char **names;
int cnt;
{
- if (__db_jump.j_dirfree != NULL) {
- __db_jump.j_dirfree(names, cnt);
+ if (DB_GLOBAL(j_dirfree) != NULL) {
+ DB_GLOBAL(j_dirfree)(names, cnt);
return;
}
while (cnt > 0)
- __os_free(names[--cnt], 0);
- __os_free(names, 0);
+ __os_free(dbenv, names[--cnt]);
+ __os_free(dbenv, names);
}
diff --git a/db/os_win32/os_errno.c b/db/os_win32/os_errno.c
index 8324826b6..c71bac1a6 100644
--- a/db/os_win32/os_errno.c
+++ b/db/os_win32/os_errno.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_errno.c,v 11.5 2000/11/30 00:58:43 ubell Exp $";
+static const char revid[] = "$Id: os_errno.c,v 11.12 2003/11/16 20:10:19 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
@@ -58,13 +58,7 @@ __os_win32_errno(void)
DWORD last_error;
int ret;
- /*
- * It's possible that errno was set after the error.
- * The caller must take care to set it to 0 before
- * any system operation.
- */
- if (__os_get_errno() != 0)
- return (__os_get_errno());
+ /* Ignore errno - we used to check it here. */
last_error = GetLastError();
@@ -98,6 +92,7 @@ __os_win32_errno(void)
case ERROR_DISK_FULL:
ret = ENOSPC;
+ break;
case ERROR_ARENA_TRASHED:
case ERROR_BAD_COMMAND:
@@ -113,6 +108,7 @@ __os_win32_errno(void)
break;
case ERROR_FILE_EXISTS:
+ case ERROR_ALREADY_EXISTS:
ret = EEXIST;
break;
@@ -133,6 +129,10 @@ __os_win32_errno(void)
ret = EBUSY;
break;
+ case ERROR_RETRY:
+ ret = EINTR;
+ break;
+
case 0:
ret = EFAULT;
break;
diff --git a/db/os_win32/os_fid.c b/db/os_win32/os_fid.c
index c66ac5210..473bb3a48 100644
--- a/db/os_win32/os_fid.c
+++ b/db/os_win32/os_fid.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_fid.c,v 11.7 2000/10/26 14:18:08 bostic Exp $";
+static const char revid[] = "$Id: os_fid.c,v 11.17 2003/02/16 15:54:32 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
@@ -39,11 +39,12 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* but perhaps not on other platforms, and perhaps not over a network.
* Can't think of a better solution right now.
*/
- DB_FH fh;
- HANDLE handle;
+ DB_FH *fhp;
BY_HANDLE_FILE_INFORMATION fi;
BOOL retval = FALSE;
+ DB_ASSERT(fname != NULL);
+
/* Clear the buffer. */
memset(fidp, 0, DB_FILE_ID_LEN);
@@ -62,7 +63,7 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* interesting properties in base 2.
*/
if (fid_serial == SERIAL_INIT)
- fid_serial = (u_int32_t)getpid();
+ __os_id(&fid_serial);
else
fid_serial += 100000;
@@ -70,19 +71,15 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
* First we open the file, because we're not given a handle to it.
* If we can't open it, we're in trouble.
*/
- if ((ret = __os_open(dbenv, fname, DB_OSO_RDONLY, _S_IREAD, &fh)) != 0)
+ if ((ret = __os_open(dbenv, fname, DB_OSO_RDONLY, _S_IREAD, &fhp)) != 0)
return (ret);
/* File open, get its info */
- handle = (HANDLE)_get_osfhandle(fh.fd);
- if (handle == INVALID_HANDLE_VALUE)
+ if ((retval = GetFileInformationByHandle(fhp->handle, &fi)) == FALSE)
ret = __os_win32_errno();
- else
- if ((retval = GetFileInformationByHandle(handle, &fi)) == FALSE)
- ret = __os_win32_errno();
- __os_closehandle(&fh);
+ (void)__os_closehandle(dbenv, fhp);
- if (handle == INVALID_HANDLE_VALUE || retval == FALSE)
+ if (retval == FALSE)
return (ret);
/*
@@ -113,6 +110,7 @@ __os_fileid(dbenv, fname, unique_okay, fidp)
tmp = (u_int32_t)fi.nFileIndexHigh;
for (p = (u_int8_t *)&tmp, i = sizeof(u_int32_t); i > 0; --i)
*fidp++ = *p++;
+
if (unique_okay) {
/*
* Use the system time to try to get a unique value
diff --git a/db/os_win32/os_fsync.c b/db/os_win32/os_fsync.c
index 29e68adf8..75281531c 100644
--- a/db/os_win32/os_fsync.c
+++ b/db/os_win32/os_fsync.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_fsync.c,v 11.15 2002/07/12 18:56:54 bostic Exp ";
+static const char revid[] = "$Id: os_fsync.c,v 11.18 2003/02/16 15:54:41 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -24,8 +24,6 @@ static const char revid[] = "Id: os_fsync.c,v 11.15 2002/07/12 18:56:54 bostic E
/*
* __os_fsync --
* Flush a file descriptor.
- *
- * PUBLIC: int __os_fsync __P((DB_ENV *, DB_FH *));
*/
int
__os_fsync(dbenv, fhp)
@@ -33,7 +31,7 @@ __os_fsync(dbenv, fhp)
DB_FH *fhp;
{
BOOL success;
- int ret;
+ int ret, retries;
/*
* Do nothing if the file descriptor has been marked as not requiring
@@ -42,7 +40,7 @@ __os_fsync(dbenv, fhp)
if (F_ISSET(fhp, DB_FH_NOSYNC))
return (0);
- ret = 0;
+ ret = retries = 0;
do {
if (DB_GLOBAL(j_fsync) != NULL)
success = (DB_GLOBAL(j_fsync)(fhp->fd) == 0);
@@ -51,7 +49,9 @@ __os_fsync(dbenv, fhp)
if (!success)
__os_set_errno(__os_win32_errno());
}
- } while (!success && (ret = __os_get_errno()) == EINTR);
+ } while (!success &&
+ ((ret = __os_get_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
if (ret != 0)
__db_err(dbenv, "fsync %s", strerror(ret));
diff --git a/db/os_win32/os_handle.c b/db/os_win32/os_handle.c
index b664170a6..b77a574fc 100644
--- a/db/os_win32/os_handle.c
+++ b/db/os_win32/os_handle.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998-2002
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_handle.c,v 11.30 2002/07/12 18:56:54 bostic Exp ";
+static const char revid[] = "$Id: os_handle.c,v 11.34 2003/04/24 16:17:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -24,58 +24,68 @@ static const char revid[] = "Id: os_handle.c,v 11.30 2002/07/12 18:56:54 bostic
/*
* __os_openhandle --
* Open a file, using POSIX 1003.1 open flags.
- *
- * PUBLIC: int __os_openhandle __P((DB_ENV *, const char *, int, int, DB_FH *));
*/
int
-__os_openhandle(dbenv, name, flags, mode, fhp)
+__os_openhandle(dbenv, name, flags, mode, fhpp)
DB_ENV *dbenv;
const char *name;
int flags, mode;
- DB_FH *fhp;
+ DB_FH **fhpp;
{
- int ret, nrepeat;
+ DB_FH *fhp;
+ int ret, nrepeat, retries;
- memset(fhp, 0, sizeof(*fhp));
- fhp->handle = INVALID_HANDLE_VALUE;
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), fhpp)) != 0)
+ return (ret);
+ fhp = *fhpp;
/* If the application specified an interface, use it. */
if (DB_GLOBAL(j_open) != NULL) {
- if ((fhp->fd = DB_GLOBAL(j_open)(name, flags, mode)) == -1)
- return (__os_get_errno());
- F_SET(fhp, DB_FH_VALID);
+ if ((fhp->fd = DB_GLOBAL(j_open)(name, flags, mode)) == -1) {
+ ret = __os_get_errno();
+ goto err;
+ }
+ F_SET(fhp, DB_FH_OPENED);
return (0);
}
+ retries = 0;
for (nrepeat = 1; nrepeat < 4; ++nrepeat) {
ret = 0;
fhp->fd = open(name, flags, mode);
- if (fhp->fd == -1) {
+ if (fhp->fd != -1) {
+ F_SET(fhp, DB_FH_OPENED);
+ break;
+ }
+
+ switch (ret = __os_get_errno()) {
+ case EMFILE:
+ case ENFILE:
+ case ENOSPC:
/*
* If it's a "temporary" error, we retry up to 3 times,
* waiting up to 12 seconds. While it's not a problem
* if we can't open a database, an inability to open a
* log file is cause for serious dismay.
*/
- ret = __os_get_errno();
- if (ret == ENFILE || ret == EMFILE || ret == ENOSPC) {
- (void)__os_sleep(dbenv, nrepeat * 2, 0);
- continue;
- }
-
+ (void)__os_sleep(dbenv, nrepeat * 2, 0);
+ break;
+ case EBUSY:
+ case EINTR:
/*
- * If it was an EINTR it's reasonable to retry
- * immediately, and arbitrarily often.
+ * If it was an EINTR or EBUSY, retry immediately,
+ * DB_RETRY times.
*/
- if (ret == EINTR) {
+ if (++retries < DB_RETRY)
--nrepeat;
- continue;
- }
- } else {
- F_SET(fhp, DB_FH_VALID);
+ break;
}
- break;
+ }
+
+err: if (ret != 0) {
+ (void)__os_closehandle(dbenv, fhp);
+ *fhpp = NULL;
}
return (ret);
@@ -84,8 +94,6 @@ __os_openhandle(dbenv, name, flags, mode, fhp)
/*
* __os_closehandle --
* Close a file.
- *
- * PUBLIC: int __os_closehandle __P((DB_ENV *, DB_FH *));
*/
int
__os_closehandle(dbenv, fhp)
@@ -95,32 +103,30 @@ __os_closehandle(dbenv, fhp)
BOOL success;
int ret;
- COMPQUIET(dbenv, NULL);
- /* Don't close file descriptors that were never opened. */
- DB_ASSERT(F_ISSET(fhp, DB_FH_VALID) &&
- ((fhp->fd != -1) || (fhp->handle != INVALID_HANDLE_VALUE)));
-
ret = 0;
- do {
- if (DB_GLOBAL(j_close) != NULL)
- success = (DB_GLOBAL(j_close)(fhp->fd) == 0);
- else if (fhp->handle != INVALID_HANDLE_VALUE) {
- success = CloseHandle(fhp->handle);
- if (!success)
- __os_set_errno(__os_win32_errno());
- }
- else
- success = (close(fhp->fd) == 0);
- } while (!success && (ret = __os_get_errno()) == EINTR);
-
/*
- * Smash the POSIX file descriptor -- it's never tested, but we want
- * to catch any mistakes.
+ * If we have a valid handle, close it and unlink any temporary
+ * file.
*/
- fhp->fd = -1;
- fhp->handle = INVALID_HANDLE_VALUE;
- F_CLR(fhp, DB_FH_VALID);
+ if (F_ISSET(fhp, DB_FH_OPENED)) {
+ do {
+ if (DB_GLOBAL(j_close) != NULL)
+ success = (DB_GLOBAL(j_close)(fhp->fd) == 0);
+ else if (fhp->handle != INVALID_HANDLE_VALUE) {
+ success = CloseHandle(fhp->handle);
+ if (!success)
+ __os_set_errno(__os_win32_errno());
+ }
+ else
+ success = (close(fhp->fd) == 0);
+ } while (!success && (ret = __os_get_errno()) == EINTR);
+
+ if (ret != 0)
+ __db_err(dbenv, "CloseHandle: %s", strerror(ret));
+ }
+
+ __os_free(dbenv, fhp);
return (ret);
}
diff --git a/db/os_win32/os_map.c b/db/os_win32/os_map.c
index d7b2839ed..259679cd0 100644
--- a/db/os_win32/os_map.c
+++ b/db/os_win32/os_map.c
@@ -1,22 +1,21 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_map.c,v 11.22 2000/10/26 14:18:08 bostic Exp $";
+static const char revid[] = "$Id: os_map.c,v 11.43 2003/02/17 16:05:45 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
-#include "os_jump.h"
static int __os_map
__P((DB_ENV *, char *, REGINFO *, DB_FH *, size_t, int, int, int, void **));
-static int __os_unique_name __P((char *, int, char *));
+static int __os_unique_name __P((char *, HANDLE, char *, size_t));
/*
* __os_r_sysattach --
@@ -28,7 +27,7 @@ __os_r_sysattach(dbenv, infop, rp)
REGINFO *infop;
REGION *rp;
{
- DB_FH fh;
+ DB_FH *fhp;
int is_system, ret;
/*
@@ -37,8 +36,9 @@ __os_r_sysattach(dbenv, infop, rp)
* properly ordered, our caller has already taken care of that.
*/
if ((ret = __os_open(dbenv, infop->name,
+ DB_OSO_DIRECT |
F_ISSET(infop, REGION_CREATE_OK) ? DB_OSO_CREATE: 0,
- infop->mode, &fh)) != 0) {
+ infop->mode, &fhp)) != 0) {
__db_err(dbenv, "%s: %s", infop->name, db_strerror(ret));
return (ret);
}
@@ -58,12 +58,12 @@ __os_r_sysattach(dbenv, infop, rp)
* calling code writes out the REGENV_REF structure to the primary
* environment file.
*/
- ret = __os_map(dbenv, infop->name, infop, &fh, rp->size,
+ ret = __os_map(dbenv, infop->name, infop, fhp, rp->size,
1, is_system, 0, &infop->addr);
if (ret == 0 && is_system == 1)
rp->segid = 1;
- (void)__os_closehandle(&fh);
+ (void)__os_closehandle(dbenv, fhp);
return (ret);
}
@@ -81,18 +81,20 @@ __os_r_sysdetach(dbenv, infop, destroy)
int ret, t_ret;
if (infop->wnt_handle != NULL) {
- (void)CloseHandle(*((HANDLE*)(infop->wnt_handle)));
- __os_free(infop->wnt_handle, sizeof(HANDLE));
+ (void)CloseHandle(infop->wnt_handle);
+ infop->wnt_handle = NULL;
}
- __os_set_errno(0);
ret = !UnmapViewOfFile(infop->addr) ? __os_win32_errno() : 0;
if (ret != 0)
__db_err(dbenv, "UnmapViewOfFile: %s", strerror(ret));
- if (F_ISSET(dbenv, DB_ENV_SYSTEM_MEM) && destroy &&
- (t_ret = __os_unlink(dbenv, infop->name)) != 0 && ret == 0)
- ret = t_ret;
+ if (!F_ISSET(dbenv, DB_ENV_SYSTEM_MEM) && destroy) {
+ if (F_ISSET(dbenv, DB_ENV_OVERWRITE))
+ (void)__db_overwrite(dbenv, infop->name);
+ if ((t_ret = __os_unlink(dbenv, infop->name)) != 0 && ret == 0)
+ ret = t_ret;
+ }
return (ret);
}
@@ -111,8 +113,8 @@ __os_mapfile(dbenv, path, fhp, len, is_rdonly, addr)
void **addr;
{
/* If the user replaced the map call, call through their interface. */
- if (__db_jump.j_map != NULL)
- return (__db_jump.j_map(path, len, 0, is_rdonly, addr));
+ if (DB_GLOBAL(j_map) != NULL)
+ return (DB_GLOBAL(j_map)(path, len, 0, is_rdonly, addr));
return (__os_map(dbenv, path, NULL, fhp, len, 0, 0, is_rdonly, addr));
}
@@ -128,10 +130,9 @@ __os_unmapfile(dbenv, addr, len)
size_t len;
{
/* If the user replaced the map call, call through their interface. */
- if (__db_jump.j_unmap != NULL)
- return (__db_jump.j_unmap(addr, len));
+ if (DB_GLOBAL(j_unmap) != NULL)
+ return (DB_GLOBAL(j_unmap)(addr, len));
- __os_set_errno(0);
return (!UnmapViewOfFile(addr) ? __os_win32_errno() : 0);
}
@@ -151,23 +152,55 @@ __os_unmapfile(dbenv, addr, len)
* foo.bar == Foo.Bar (FAT file system)
* foo.bar != Foo.Bar (NTFS)
*
- * The best solution is to use the identifying number in the file
+ * The best solution is to use the file index, found in the file
* information structure (similar to UNIX inode #).
+ *
+ * When a file is deleted, its file index may be reused,
+ * but if the unique name has not gone from its namespace,
+ * we may get a conflict. So to ensure some tie in to the
+ * original pathname, we also use the creation time and the
+ * file basename. This is not a perfect system, but it
+ * should work for all but anamolous test cases.
+ *
*/
static int
-__os_unique_name(orig_path, fd, result_path)
+__os_unique_name(orig_path, hfile, result_path, result_path_len)
char *orig_path, *result_path;
- int fd;
+ HANDLE hfile;
+ size_t result_path_len;
{
BY_HANDLE_FILE_INFORMATION fileinfo;
+ char *basename, *p;
+
+ /*
+ * In Windows, pathname components are delimited by '/' or '\', and
+ * if neither is present, we need to strip off leading drive letter
+ * (e.g. c:foo.txt).
+ */
+ basename = strrchr(orig_path, '/');
+ p = strrchr(orig_path, '\\');
+ if (basename == NULL || (p != NULL && p > basename))
+ basename = p;
+ if (basename == NULL)
+ basename = strrchr(orig_path, ':');
+
+ if (basename == NULL)
+ basename = orig_path;
+ else
+ basename++;
- __os_set_errno(0);
- if (!GetFileInformationByHandle(
- (HANDLE)_get_osfhandle(fd), &fileinfo))
+ if (!GetFileInformationByHandle(hfile, &fileinfo))
return (__os_win32_errno());
- (void)sprintf(result_path, "%ld.%ld.%ld",
+
+ (void)snprintf(result_path, result_path_len,
+ "__db_shmem.%8.8lx.%8.8lx.%8.8lx.%8.8lx.%8.8lx.%s",
fileinfo.dwVolumeSerialNumber,
- fileinfo.nFileIndexHigh, fileinfo.nFileIndexLow);
+ fileinfo.nFileIndexHigh,
+ fileinfo.nFileIndexLow,
+ fileinfo.ftCreationTime.dwHighDateTime,
+ fileinfo.ftCreationTime.dwHighDateTime,
+ basename);
+
return (0);
}
@@ -186,11 +219,9 @@ __os_map(dbenv, path, infop, fhp, len, is_region, is_system, is_rdonly, addr)
void **addr;
{
HANDLE hMemory;
- REGENV *renv;
- int ret;
- void *pMemory;
+ int ret, use_pagefile;
char shmem_name[MAXPATHLEN];
- int use_pagefile;
+ void *pMemory;
ret = 0;
if (infop != NULL)
@@ -202,66 +233,59 @@ __os_map(dbenv, path, infop, fhp, len, is_region, is_system, is_rdonly, addr)
* If creating a region in system space, get a matching name in the
* paging file namespace.
*/
- if (use_pagefile) {
- (void)strcpy(shmem_name, "__db_shmem.");
- if ((ret = __os_unique_name(path, fhp->fd,
- &shmem_name[strlen(shmem_name)])) != 0)
- return (ret);
- }
+ if (use_pagefile && (ret = __os_unique_name(
+ path, fhp->handle, shmem_name, sizeof(shmem_name))) != 0)
+ return (ret);
/*
* XXX
* DB: We have not implemented copy-on-write here.
*
- * XXX
- * DB: This code will fail if the library is ever compiled on a 64-bit
- * machine.
+ * If this is an region in system memory, we try to open it using the
+ * OpenFileMapping() first, and only call CreateFileMapping() if we're
+ * really creating the section. There are two reasons:
*
- * XXX
- * If this is an region in system memory, let's try opening using the
- * OpenFileMapping() first. Why, oh why are we doing this?
+ * 1) We only create the mapping if we have newly created the region.
+ * This avoids a long-running problem caused by Windows reference
+ * counting, where regions that are closed by all processes are
+ * deleted. It turns out that just checking for a zeroed region
+ * is not good enough. See [#4882] and [#7127] for the details.
*
- * Well, we might be asking the OS for a handle to a pre-existing
- * memory section, or we might be the first to get here and want the
- * section created. CreateFileMapping() sounds like it will do both
- * jobs. But, not so. It seems to mess up making the commit charge to
- * the process. It thinks, incorrectly, that when we want to join a
- * previously existing section, that it should make a commit charge
- * for the whole section. In fact, there is no new committed memory
- * whatever. The call can fail if there is insufficient memory free
- * to handle the erroneous commit charge. So, we find that the bogus
- * commit is not made if we call OpenFileMapping(). So we do that
- * first, and only call CreateFileMapping() if we're really creating
- * the section.
+ * 2) CreateFileMapping seems to mess up making the commit charge to
+ * the process. It thinks, incorrectly, that when we want to join a
+ * previously existing section, that it should make a commit charge
+ * for the whole section. In fact, there is no new committed memory
+ * whatever. The call can fail if there is insufficient memory free
+ * to handle the erroneous commit charge. So, we find that the
+ * bogus commit is not made if we call OpenFileMapping.
*/
hMemory = NULL;
- __os_set_errno(0);
- if (use_pagefile)
+ if (use_pagefile) {
hMemory = OpenFileMapping(
is_rdonly ? FILE_MAP_READ : FILE_MAP_ALL_ACCESS,
- 0,
- shmem_name);
-
- if (hMemory == NULL)
- hMemory = CreateFileMapping(
- use_pagefile ?
- (HANDLE)0xFFFFFFFF : (HANDLE)_get_osfhandle(fhp->fd),
- 0,
+ 0, shmem_name);
+
+ if (hMemory == NULL && F_ISSET(infop, REGION_CREATE_OK))
+ hMemory = CreateFileMapping((HANDLE)-1, 0,
+ is_rdonly ? PAGE_READONLY : PAGE_READWRITE,
+ 0, (DWORD)len, shmem_name);
+ } else
+ hMemory = CreateFileMapping(fhp->handle, 0,
is_rdonly ? PAGE_READONLY : PAGE_READWRITE,
- 0, len,
- use_pagefile ? shmem_name : NULL);
+ 0, (DWORD)len, NULL);
+
if (hMemory == NULL) {
- __db_err(dbenv,
- "OpenFileMapping: %s", strerror(__os_win32_errno()));
- return (__os_win32_errno());
+ ret = __os_win32_errno();
+ __db_err(dbenv, "OpenFileMapping: %s", strerror(ret));
+ return (__db_panic(dbenv, ret));
}
pMemory = MapViewOfFile(hMemory,
(is_rdonly ? FILE_MAP_READ : FILE_MAP_ALL_ACCESS), 0, 0, len);
if (pMemory == NULL) {
- __db_err(dbenv,
- "MapViewOfFile: %s", strerror(__os_win32_errno()));
- return (__os_win32_errno());
+ ret = __os_win32_errno();
+ __db_err(dbenv, "MapViewOfFile: %s", strerror(ret));
+ return (__db_panic(dbenv, ret));
}
/*
@@ -275,36 +299,13 @@ __os_map(dbenv, path, infop, fhp, len, is_region, is_system, is_rdonly, addr)
* different identity. The two processes then have distinct isolated
* mapped sections, not at all what was wanted. Not closing the handle
* here fixes this problem. We carry the handle around in the region
- * structure so we can close it when unmap is called. Ignore malloc
- * errors, it just means we leak the memory.
+ * structure so we can close it when unmap is called.
*/
- if (use_pagefile && infop != NULL) {
- if (__os_malloc(NULL,
- sizeof(HANDLE), NULL, &infop->wnt_handle) == 0)
- memcpy(infop->wnt_handle, &hMemory, sizeof(HANDLE));
- } else
+ if (use_pagefile && infop != NULL)
+ infop->wnt_handle = hMemory;
+ else
CloseHandle(hMemory);
- if (is_region) {
- /*
- * XXX
- * Windows/95 zeroes anonymous memory regions at last close.
- * This means that the backing file can exist and reference
- * the region, but the region itself is no longer initialized.
- * If the caller is capable of creating the region, update
- * the REGINFO structure so that they do so.
- */
- renv = (REGENV *)pMemory;
- if (renv->magic == 0)
- if (F_ISSET(infop, REGION_CREATE_OK))
- F_SET(infop, REGION_CREATE);
- else {
- (void)UnmapViewOfFile(pMemory);
- pMemory = NULL;
- ret = EAGAIN;
- }
- }
-
*addr = pMemory;
return (ret);
}
diff --git a/db/os_win32/os_open.c b/db/os_win32/os_open.c
index 7ecd96126..36d262f1a 100644
--- a/db/os_win32/os_open.c
+++ b/db/os_win32/os_open.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_open.c,v 11.9 2000/11/30 00:58:43 ubell Exp $";
+static const char revid[] = "$Id: os_open.c,v 11.28 2003/08/29 18:50:46 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -21,34 +21,66 @@ static const char revid[] = "$Id: os_open.c,v 11.9 2000/11/30 00:58:43 ubell Exp
#endif
#include "db_int.h"
-#include "os_jump.h"
-int __os_win32_errno __P((void));
+/*
+ * __os_have_direct --
+ * Check to see if we support direct I/O.
+ *
+ * PUBLIC: int __os_have_direct __P((void));
+ */
+int
+__os_have_direct()
+{
+ return (1);
+}
/*
* __os_open --
* Open a file descriptor.
*/
-int
-__os_open(dbenv, name, flags, mode, fhp)
+__os_open(dbenv, name, flags, mode, fhpp)
DB_ENV *dbenv;
const char *name;
u_int32_t flags;
int mode;
- DB_FH *fhp;
+ DB_FH **fhpp;
+{
+ return (__os_open_extend(dbenv, name, 0, 0, flags, mode, fhpp));
+}
+
+/*
+ * __os_open_extend --
+ * Open a file descriptor (including page size and log size information).
+ */
+int
+__os_open_extend(dbenv, name, log_size, page_size, flags, mode, fhpp)
+ DB_ENV *dbenv;
+ const char *name;
+ u_int32_t log_size, page_size, flags;
+ int mode;
+ DB_FH **fhpp;
{
+ DB_FH *fhp;
DWORD bytesWritten;
- HANDLE wh;
- u_int32_t log_size;
- int access, attr, oflags, share, createflag;
- int ret, nrepeat;
+ DWORD cluster_size, sector_size, free_clusters, total_clusters;
+ int access, attr, createflag, nrepeat, oflags, ret, share;
+ char *drive, dbuf[4]; /* <letter><colon><slosh><nul> */
+
+ *fhpp = NULL;
+
+#define OKFLAGS \
+ (DB_OSO_CREATE | DB_OSO_DIRECT | DB_OSO_EXCL | DB_OSO_LOG | \
+ DB_OSO_RDONLY | DB_OSO_REGION | DB_OSO_SEQ | DB_OSO_TEMP | \
+ DB_OSO_TRUNC)
+ if ((ret = __db_fchk(dbenv, "__os_open", flags, OKFLAGS)) != 0)
+ return (ret);
/*
* The "public" interface to the __os_open routine passes around POSIX
* 1003.1 flags, not DB flags. If the user has defined their own open
* interface, use the POSIX flags.
*/
- if (__db_jump.j_open != NULL) {
+ if (DB_GLOBAL(j_open) != NULL) {
oflags = O_BINARY | O_NOINHERIT;
if (LF_ISSET(DB_OSO_CREATE))
@@ -73,13 +105,12 @@ __os_open(dbenv, name, flags, mode, fhp)
if (LF_ISSET(DB_OSO_TRUNC))
oflags |= O_TRUNC;
- return (__os_openhandle(dbenv, name, oflags, mode, fhp));
+ return (__os_openhandle(dbenv, name, oflags, mode, fhpp));
}
- if (LF_ISSET(DB_OSO_LOG))
- log_size = fhp->log_size; /* XXX: Gag. */
-
- memset(fhp, 0, sizeof(*fhp));
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_FH), fhpp)) != 0)
+ return (ret);
+ fhp = *fhpp;
/*
* Otherwise, use the Windows/32 CreateFile interface so that we can
@@ -97,8 +128,6 @@ __os_open(dbenv, name, flags, mode, fhp)
* largely meaningless on FAT, the most common file system, which
* only has a "readable" and "writeable" flag, applying to all users.
*/
- wh = INVALID_HANDLE_VALUE;
-
access = GENERIC_READ;
if (!LF_ISSET(DB_OSO_RDONLY))
access |= GENERIC_WRITE;
@@ -134,11 +163,33 @@ __os_open(dbenv, name, flags, mode, fhp)
if (LF_ISSET(DB_OSO_TEMP))
attr |= FILE_FLAG_DELETE_ON_CLOSE;
- for (nrepeat = 1; nrepeat < 4; ++nrepeat) {
- ret = 0;
- __os_set_errno(0);
- wh = CreateFile(name, access, share, NULL, createflag, attr, 0);
- if (wh == INVALID_HANDLE_VALUE) {
+ /*
+ * We can turn filesystem buffering off if the page size is a
+ * multiple of the disk's sector size. To find the sector size,
+ * we call GetDiskFreeSpace, which expects a drive name like "d:\\"
+ * or NULL for the current disk (i.e., a relative path)
+ */
+ if (LF_ISSET(DB_OSO_DIRECT) && page_size != 0 && name[0] != '\0') {
+ if (name[1] == ':') {
+ drive = dbuf;
+ snprintf(dbuf, sizeof(dbuf), "%c:\\", name[0]);
+ } else
+ drive = NULL;
+
+ /*
+ * We ignore all results except sectorsize, but some versions
+ * of Windows require that the parameters are non-NULL.
+ */
+ if (GetDiskFreeSpace(drive, &cluster_size,
+ &sector_size, &free_clusters, &total_clusters) &&
+ page_size % sector_size == 0)
+ attr |= FILE_FLAG_NO_BUFFERING;
+ }
+
+ for (nrepeat = 1;; ++nrepeat) {
+ fhp->handle =
+ CreateFile(name, access, share, NULL, createflag, attr, 0);
+ if (fhp->handle == INVALID_HANDLE_VALUE) {
/*
* If it's a "temporary" error, we retry up to 3 times,
* waiting up to 12 seconds. While it's not a problem
@@ -146,14 +197,15 @@ __os_open(dbenv, name, flags, mode, fhp)
* log file is cause for serious dismay.
*/
ret = __os_win32_errno();
- if (ret == ENFILE || ret == EMFILE || ret == ENOSPC) {
- (void)__os_sleep(dbenv, nrepeat * 2, 0);
- continue;
- }
- goto err;
- }
- break;
+ if ((ret != ENFILE && ret != EMFILE && ret != ENOSPC) ||
+ nrepeat > 3)
+ goto err;
+
+ (void)__os_sleep(dbenv, nrepeat * 2, 0);
+ } else
+ break;
}
+ F_SET(fhp, DB_FH_OPENED);
/*
* Special handling needed for log files. To get Windows to not update
@@ -163,39 +215,30 @@ __os_open(dbenv, name, flags, mode, fhp)
* This strategy only works for Win/NT; Win/9X does not
* guarantee that the logs will be zero filled.
*/
- if (LF_ISSET(DB_OSO_LOG) && log_size != 0 &&
- __os_is_winnt()) {
- if (SetFilePointer(wh,
+ if (LF_ISSET(DB_OSO_LOG) && log_size != 0 && __os_is_winnt()) {
+ if (SetFilePointer(fhp->handle,
log_size - 1, NULL, FILE_BEGIN) == (DWORD)-1)
goto err;
- if (WriteFile(wh, "\x00", 1, &bytesWritten, NULL) == 0)
+ if (WriteFile(fhp->handle, "\x00", 1, &bytesWritten, NULL) == 0)
goto err;
if (bytesWritten != 1)
goto err;
- if (SetEndOfFile(wh) == 0)
+ if (SetEndOfFile(fhp->handle) == 0)
goto err;
- if (SetFilePointer(wh, 0, NULL, FILE_BEGIN) == (DWORD)-1)
+ if (SetFilePointer(
+ fhp->handle, 0, NULL, FILE_BEGIN) == (DWORD)-1)
goto err;
- if (FlushFileBuffers(wh) == 0)
+ if (FlushFileBuffers(fhp->handle) == 0)
goto err;
}
- /*
- * We acquire a POSIX file descriptor as this allows us to use the
- * general UNIX I/O routines instead of writing Windows specific
- * ones. Closing that file descriptor is sufficient to close the
- * Windows HANDLE.
- */
- fhp->fd =
- _open_osfhandle((long)wh, LF_ISSET(DB_OSO_RDONLY) ? O_RDONLY : 0);
- fhp->handle = wh;
- F_SET(fhp, DB_FH_VALID);
-
return (0);
err: if (ret == 0)
ret = __os_win32_errno();
- if (wh != INVALID_HANDLE_VALUE)
- (void)CloseHandle(wh);
+
+ __os_closehandle(dbenv, fhp);
+ *fhpp = NULL;
+
return (ret);
}
diff --git a/db/os_win32/os_rename.c b/db/os_win32/os_rename.c
index e900af49f..48ea8ef37 100644
--- a/db/os_win32/os_rename.c
+++ b/db/os_win32/os_rename.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_rename.c,v 1.12 2002/07/12 18:56:55 bostic Exp ";
+static const char revid[] = "$Id: os_rename.c,v 1.15 2003/09/09 15:44:36 mjc Exp $";
#endif /* not lint */
#include "db_int.h"
@@ -44,9 +44,10 @@ __os_rename(dbenv, oldname, newname, flags)
} else {
/*
* There is no MoveFileEx for Win9x/Me, so we have to
- * do the best we can. Note that MoveFile returns 1
- * if the names refer to the same file, so we don't
- * need to check that here.
+ * do the best we can. Note that the MoveFile call
+ * above would have succeeded if oldname and newname
+ * refer to the same file, so we don't need to check
+ * that here.
*/
(void)DeleteFile(newname);
if (!MoveFile(oldname, newname))
diff --git a/db/os_win32/os_rw.c b/db/os_win32/os_rw.c
index 77efa6f5c..56b7d4d47 100644
--- a/db/os_win32/os_rw.c
+++ b/db/os_win32/os_rw.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_rw.c,v 11.28 2002/08/06 04:56:19 bostic Exp ";
+static const char revid[] = "$Id: os_rw.c,v 11.33 2003/02/16 15:55:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -28,20 +28,20 @@ static int __os_physwrite __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
/*
* __os_io --
* Do an I/O.
- *
- * PUBLIC: int __os_io __P((DB_ENV *, DB_IO *, int, size_t *));
*/
int
-__os_io(dbenv, db_iop, op, niop)
+__os_io(dbenv, op, fhp, pgno, pagesize, buf, niop)
DB_ENV *dbenv;
- DB_IO *db_iop;
int op;
- size_t *niop;
+ DB_FH *fhp;
+ db_pgno_t pgno;
+ size_t pagesize, *niop;
+ u_int8_t *buf;
{
int ret;
if (__os_is_winnt()) {
- ULONG64 off = (ULONG64)db_iop->pagesize * db_iop->pgno;
+ ULONG64 off = (ULONG64)pagesize * pgno;
OVERLAPPED over;
DWORD nbytes;
over.Offset = (DWORD)(off & 0xffffffff);
@@ -52,8 +52,8 @@ __os_io(dbenv, db_iop, op, niop)
case DB_IO_READ:
if (DB_GLOBAL(j_read) != NULL)
goto slow;
- if (!ReadFile(db_iop->fhp->handle,
- db_iop->buf, (DWORD)db_iop->bytes, &nbytes, &over))
+ if (!ReadFile(fhp->handle,
+ buf, (DWORD)pagesize, &nbytes, &over))
goto slow;
break;
case DB_IO_WRITE:
@@ -63,35 +63,33 @@ __os_io(dbenv, db_iop, op, niop)
if (__os_fs_notzero())
goto slow;
#endif
- if (!WriteFile(db_iop->fhp->handle,
- db_iop->buf, (DWORD)db_iop->bytes, &nbytes, &over))
+ if (!WriteFile(fhp->handle,
+ buf, (DWORD)pagesize, &nbytes, &over))
goto slow;
break;
}
- if (nbytes == db_iop->bytes) {
+ if (nbytes == pagesize) {
*niop = (size_t)nbytes;
return (0);
}
}
-slow: MUTEX_THREAD_LOCK(dbenv, db_iop->mutexp);
+slow: MUTEX_THREAD_LOCK(dbenv, fhp->mutexp);
- if ((ret = __os_seek(dbenv, db_iop->fhp,
- db_iop->pagesize, db_iop->pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
+ if ((ret = __os_seek(dbenv, fhp,
+ pagesize, pgno, 0, 0, DB_OS_SEEK_SET)) != 0)
goto err;
switch (op) {
case DB_IO_READ:
- ret = __os_read(dbenv,
- db_iop->fhp, db_iop->buf, db_iop->bytes, niop);
+ ret = __os_read(dbenv, fhp, buf, pagesize, niop);
break;
case DB_IO_WRITE:
- ret = __os_write(dbenv,
- db_iop->fhp, db_iop->buf, db_iop->bytes, niop);
+ ret = __os_write(dbenv, fhp, buf, pagesize, niop);
break;
}
-err: MUTEX_THREAD_UNLOCK(dbenv, db_iop->mutexp);
+err: MUTEX_THREAD_UNLOCK(dbenv, fhp->mutexp);
return (ret);
}
@@ -99,8 +97,6 @@ err: MUTEX_THREAD_UNLOCK(dbenv, db_iop->mutexp);
/*
* __os_read --
* Read from a file handle.
- *
- * PUBLIC: int __os_read __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
*/
int
__os_read(dbenv, fhp, addr, len, nrp)
@@ -110,27 +106,32 @@ __os_read(dbenv, fhp, addr, len, nrp)
size_t len;
size_t *nrp;
{
- size_t offset;
- DWORD nr;
- int ret;
+ size_t offset, nr;
+ DWORD count;
+ int ret, retries;
BOOL success;
u_int8_t *taddr;
+ retries = 0;
for (taddr = addr,
offset = 0; offset < len; taddr += nr, offset += nr) {
retry: if (DB_GLOBAL(j_read) != NULL) {
- nr = (DWORD)DB_GLOBAL(j_read)(fhp->fd,
+ nr = DB_GLOBAL(j_read)(fhp->fd,
taddr, len - offset);
success = (nr >= 0);
} else {
success = ReadFile(fhp->handle,
- taddr, (DWORD)(len - offset), &nr, NULL);
+ taddr, (DWORD)(len - offset), &count, NULL);
if (!success)
__os_set_errno(__os_win32_errno());
+ else
+ nr = (size_t)count;
}
if (!success) {
- if ((ret = __os_get_errno()) == EINTR)
+ ret = __os_get_errno();
+ if ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
goto retry;
__db_err(dbenv, "read: 0x%lx, %lu: %s",
P_TO_ULONG(taddr),
@@ -147,8 +148,6 @@ retry: if (DB_GLOBAL(j_read) != NULL) {
/*
* __os_write --
* Write to a file handle.
- *
- * PUBLIC: int __os_write __P((DB_ENV *, DB_FH *, void *, size_t, size_t *));
*/
int
__os_write(dbenv, fhp, addr, len, nwp)
@@ -180,27 +179,32 @@ __os_physwrite(dbenv, fhp, addr, len, nwp)
size_t len;
size_t *nwp;
{
- size_t offset;
- DWORD nw;
- int ret;
+ size_t offset, nw;
+ DWORD count;
+ int ret, retries;
BOOL success;
u_int8_t *taddr;
+ retries = 0;
for (taddr = addr,
offset = 0; offset < len; taddr += nw, offset += nw) {
retry: if (DB_GLOBAL(j_write) != NULL) {
- nw = (DWORD)DB_GLOBAL(j_write)(fhp->fd,
+ nw = DB_GLOBAL(j_write)(fhp->fd,
taddr, len - offset);
success = (nw >= 0);
} else {
success = WriteFile(fhp->handle,
- taddr, (DWORD)(len - offset), &nw, NULL);
+ taddr, (DWORD)(len - offset), &count, NULL);
if (!success)
__os_set_errno(__os_win32_errno());
+ else
+ nw = (size_t)count;
}
if (!success) {
- if ((ret = __os_get_errno()) == EINTR)
+ ret = __os_get_errno();
+ if ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
goto retry;
__db_err(dbenv, "write: 0x%x, %lu: %s", taddr,
(u_long)len-offset, strerror(ret));
diff --git a/db/os_win32/os_seek.c b/db/os_win32/os_seek.c
index 9b92175a3..1837530da 100644
--- a/db/os_win32/os_seek.c
+++ b/db/os_win32/os_seek.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_seek.c,v 11.17 2002/08/06 04:56:20 bostic Exp ";
+static const char revid[] = "$Id: os_seek.c,v 11.19 2003/01/08 05:34:57 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
diff --git a/db/os_win32/os_sleep.c b/db/os_win32/os_sleep.c
index f0248a583..c07198cd0 100644
--- a/db/os_win32/os_sleep.c
+++ b/db/os_win32/os_sleep.c
@@ -1,18 +1,17 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_sleep.c,v 11.4 2000/03/30 01:46:43 ubell Exp $";
+static const char revid[] = "$Id: os_sleep.c,v 11.9 2003/01/08 05:35:01 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_sleep --
@@ -29,8 +28,8 @@ __os_sleep(dbenv, secs, usecs)
for (; usecs >= 1000000; ++secs, usecs -= 1000000)
;
- if (__db_jump.j_sleep != NULL)
- return (__db_jump.j_sleep(secs, usecs));
+ if (DB_GLOBAL(j_sleep) != NULL)
+ return (DB_GLOBAL(j_sleep)(secs, usecs));
/*
* It's important that we yield the processor here so that other
diff --git a/db/os_win32/os_spin.c b/db/os_win32/os_spin.c
index f250c523d..b6af0b6b7 100644
--- a/db/os_win32/os_spin.c
+++ b/db/os_win32/os_spin.c
@@ -1,25 +1,25 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: os_spin.c,v 11.6 2000/05/17 19:30:19 bostic Exp $";
+static const char revid[] = "$Id: os_spin.c,v 11.14 2003/06/18 14:21:20 bostic Exp $";
#endif /* not lint */
#include "db_int.h"
-#include "os_jump.h"
/*
* __os_spin --
* Return the number of default spins before blocking.
*/
-int
-__os_spin()
+void
+__os_spin(dbenv)
+ DB_ENV *dbenv;
{
SYSTEM_INFO SystemInfo;
@@ -27,8 +27,8 @@ __os_spin()
* If the application specified a value or we've already figured it
* out, return it.
*/
- if (DB_GLOBAL(db_tas_spins) != 0)
- return (DB_GLOBAL(db_tas_spins));
+ if (dbenv->tas_spins != 0)
+ return;
/* Get the number of processors */
GetSystemInfo(&SystemInfo);
@@ -38,10 +38,9 @@ __os_spin()
* is a reasonable value.
*/
if (SystemInfo.dwNumberOfProcessors > 1)
- DB_GLOBAL(db_tas_spins) = 50 * SystemInfo.dwNumberOfProcessors;
+ dbenv->tas_spins = 50 * SystemInfo.dwNumberOfProcessors;
else
- DB_GLOBAL(db_tas_spins) = 1;
- return (DB_GLOBAL(db_tas_spins));
+ dbenv->tas_spins = 1;
}
/*
@@ -53,7 +52,7 @@ __os_yield(dbenv, usecs)
DB_ENV *dbenv;
u_long usecs;
{
- if (__db_jump.j_yield != NULL && __db_jump.j_yield() == 0)
+ if (DB_GLOBAL(j_yield) != NULL && DB_GLOBAL(j_yield)() == 0)
return;
- __os_sleep(dbenv, 0, usecs);
+ (void)__os_sleep(dbenv, 0, usecs);
}
diff --git a/db/os_win32/os_stat.c b/db/os_win32/os_stat.c
index b9d122c1f..df290d66e 100644
--- a/db/os_win32/os_stat.c
+++ b/db/os_win32/os_stat.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: os_stat.c,v 11.22 2002/07/12 18:56:56 bostic Exp ";
+static const char revid[] = "$Id: os_stat.c,v 11.26 2003/02/20 14:36:07 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -23,26 +23,25 @@ static const char revid[] = "Id: os_stat.c,v 11.22 2002/07/12 18:56:56 bostic Ex
/*
* __os_exists --
* Return if the file exists.
- *
- * PUBLIC: int __os_exists __P((const char *, int *));
*/
int
__os_exists(path, isdirp)
const char *path;
int *isdirp;
{
- int ret;
+ int ret, retries;
DWORD attrs;
if (DB_GLOBAL(j_exists) != NULL)
return (DB_GLOBAL(j_exists)(path, isdirp));
- ret = 0;
+ ret = retries = 0;
do {
attrs = GetFileAttributes(path);
if (attrs == (DWORD)-1)
ret = __os_win32_errno();
- } while (ret == EINTR);
+ } while ((ret == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY);
if (ret != 0)
return (ret);
@@ -57,9 +56,6 @@ __os_exists(path, isdirp)
* __os_ioinfo --
* Return file size and I/O size; abstracted to make it easier
* to replace.
- *
- * PUBLIC: int __os_ioinfo __P((DB_ENV *, const char *,
- * PUBLIC: DB_FH *, u_int32_t *, u_int32_t *, u_int32_t *));
*/
int
__os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
@@ -68,16 +64,18 @@ __os_ioinfo(dbenv, path, fhp, mbytesp, bytesp, iosizep)
DB_FH *fhp;
u_int32_t *mbytesp, *bytesp, *iosizep;
{
- int ret;
+ int ret, retries;
BY_HANDLE_FILE_INFORMATION bhfi;
unsigned __int64 filesize;
+ retries = 0;
if (DB_GLOBAL(j_ioinfo) != NULL)
return (DB_GLOBAL(j_ioinfo)(path,
fhp->fd, mbytesp, bytesp, iosizep));
retry: if (!GetFileInformationByHandle(fhp->handle, &bhfi)) {
- if ((ret = __os_win32_errno()) == EINTR)
+ if (((ret = __os_win32_errno()) == EINTR || ret == EBUSY) &&
+ ++retries < DB_RETRY)
goto retry;
__db_err(dbenv,
"GetFileInformationByHandle: %s", strerror(ret));
@@ -93,7 +91,12 @@ retry: if (!GetFileInformationByHandle(fhp->handle, &bhfi)) {
if (bytesp != NULL)
*bytesp = (u_int32_t)(filesize % MEGABYTE);
- /* The filesystem blocksize is not easily available. */
+ /*
+ * The filesystem blocksize is not easily available. In particular,
+ * the values returned by GetDiskFreeSpace() are not very helpful
+ * (NTFS volumes often report 512B clusters, which are too small to
+ * be a useful default).
+ */
if (iosizep != NULL)
*iosizep = DB_DEF_IOSIZE;
return (0);
diff --git a/db/os_win32/os_type.c b/db/os_win32/os_type.c
deleted file mode 100644
index a82fc4b1d..000000000
--- a/db/os_win32/os_type.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1998, 1999, 2000
- * Sleepycat Software. All rights reserved.
- */
-
-#include "db_config.h"
-
-#ifndef lint
-static const char revid[] = "$Id: os_type.c,v 11.3 2000/02/14 03:00:07 bostic Exp $";
-#endif /* not lint */
-
-/*
- * __os_is_winnt --
- * Return 1 if Windows/NT, otherwise 0.
- *
- * PUBLIC: int __os_is_winnt __P((void));
- */
-int
-__os_is_winnt()
-{
- static int __os_type = -1;
-
- /*
- * The value of __os_type is computed only once, and cached to
- * avoid the overhead of repeated calls to GetVersion().
- */
- if (__os_type == -1)
- if ((GetVersion() & 0x80000000) == 0)
- __os_type = 1;
- else
- __os_type = 0;
- return (__os_type);
-}
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pm b/db/perl/BerkeleyDB/BerkeleyDB.pm
index c56390ba7..db0d70d35 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pm
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pm
@@ -2,7 +2,7 @@
package BerkeleyDB;
-# Copyright (c) 1997-2002 Paul Marquess. All rights reserved.
+# Copyright (c) 1997-2003 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
@@ -17,7 +17,7 @@ use Carp;
use vars qw($VERSION @ISA @EXPORT $AUTOLOAD
$use_XSLoader);
-$VERSION = '0.20';
+$VERSION = '0.25';
require Exporter;
#require DynaLoader;
@@ -50,6 +50,7 @@ BEGIN {
DB_ARCH_ABS
DB_ARCH_DATA
DB_ARCH_LOG
+ DB_ARCH_REMOVE
DB_AUTO_COMMIT
DB_BEFORE
DB_BROADCAST_EID
@@ -60,6 +61,7 @@ BEGIN {
DB_CACHED_COUNTS
DB_CDB_ALLDB
DB_CHECKPOINT
+ DB_CHKSUM
DB_CHKSUM_SHA1
DB_CLIENT
DB_CL_WRITER
@@ -96,6 +98,7 @@ BEGIN {
DB_ENV_LOCKDOWN
DB_ENV_LOCKING
DB_ENV_LOGGING
+ DB_ENV_LOG_AUTOREMOVE
DB_ENV_NOLOCKING
DB_ENV_NOMMAP
DB_ENV_NOPANIC
@@ -112,8 +115,10 @@ BEGIN {
DB_ENV_STANDALONE
DB_ENV_SYSTEM_MEM
DB_ENV_THREAD
+ DB_ENV_TIME_NOTGRANTED
DB_ENV_TXN
DB_ENV_TXN_NOSYNC
+ DB_ENV_TXN_NOT_DURABLE
DB_ENV_TXN_WRITE_NOSYNC
DB_ENV_USER_ALLOC
DB_ENV_YIELDCPU
@@ -121,6 +126,7 @@ BEGIN {
DB_EXTENT
DB_FAST_STAT
DB_FCNTL_LOCKING
+ DB_FILEOPEN
DB_FILE_ID_LEN
DB_FIRST
DB_FIXEDLEN
@@ -141,6 +147,7 @@ BEGIN {
DB_INIT_LOCK
DB_INIT_LOG
DB_INIT_MPOOL
+ DB_INIT_REP
DB_INIT_TXN
DB_INVALID_EID
DB_JAVA_CALLBACK
@@ -194,9 +201,16 @@ BEGIN {
DB_LOGMAGIC
DB_LOGOLDVER
DB_LOGVERSION
+ DB_LOG_AUTOREMOVE
+ DB_LOG_CHKPNT
+ DB_LOG_COMMIT
DB_LOG_DISK
DB_LOG_LOCKED
+ DB_LOG_NOCOPY
+ DB_LOG_NOT_DURABLE
+ DB_LOG_PERM
DB_LOG_SILENT_ERR
+ DB_LOG_WRNOSYNC
DB_MAX_PAGES
DB_MAX_RECORDS
DB_MPOOL_CLEAN
@@ -207,7 +221,9 @@ BEGIN {
DB_MPOOL_LAST
DB_MPOOL_NEW
DB_MPOOL_NEW_GROUP
+ DB_MPOOL_NOFILE
DB_MPOOL_PRIVATE
+ DB_MPOOL_UNLINK
DB_MULTIPLE
DB_MULTIPLE_KEY
DB_MUTEXDEBUG
@@ -229,6 +245,7 @@ BEGIN {
DB_NOSERVER_ID
DB_NOSYNC
DB_NOTFOUND
+ DB_NO_AUTO_COMMIT
DB_ODDFILESIZE
DB_OK_BTREE
DB_OK_HASH
@@ -279,17 +296,23 @@ BEGIN {
DB_RENAMEMAGIC
DB_RENUMBER
DB_REP_CLIENT
+ DB_REP_CREATE
DB_REP_DUPMASTER
+ DB_REP_HANDLE_DEAD
DB_REP_HOLDELECTION
+ DB_REP_ISPERM
DB_REP_LOGSONLY
DB_REP_MASTER
DB_REP_NEWMASTER
DB_REP_NEWSITE
+ DB_REP_NOBUFFER
+ DB_REP_NOTPERM
DB_REP_OUTDATED
DB_REP_PERMANENT
DB_REP_UNAVAIL
DB_REVSPLITOFF
DB_RMW
+ DB_RPCCLIENT
DB_RPC_SERVERPROG
DB_RPC_SERVERVERS
DB_RUNRECOVERY
@@ -332,6 +355,7 @@ BEGIN {
DB_TEST_SUBDB_LOCKS
DB_THREAD
DB_TIMEOUT
+ DB_TIME_NOTGRANTED
DB_TRUNCATE
DB_TXNMAGIC
DB_TXNVERSION
@@ -352,6 +376,7 @@ BEGIN {
DB_TXN_LOG_UNDO
DB_TXN_LOG_UNDOREDO
DB_TXN_NOSYNC
+ DB_TXN_NOT_DURABLE
DB_TXN_NOWAIT
DB_TXN_OPENFILES
DB_TXN_POPENFILES
@@ -386,6 +411,8 @@ BEGIN {
DB_XA_CREATE
DB_XIDDATASIZE
DB_YIELDCPU
+ DB_debug_FLAG
+ DB_user_BEGIN
);
sub AUTOLOAD {
@@ -448,6 +475,30 @@ sub ParseParameters($@)
return \%got ;
}
+sub parseEncrypt
+{
+ my $got = shift ;
+
+
+ if (defined $got->{Encrypt}) {
+ croak("Encrypt parameter must be a hash reference")
+ if !ref $got->{Encrypt} || ref $got->{Encrypt} ne 'HASH' ;
+
+ my %config = %{ $got->{Encrypt} } ;
+
+ my $p = BerkeleyDB::ParseParameters({
+ Password => undef,
+ Flags => undef,
+ }, %config);
+
+ croak("Must specify Password and Flags with Encrypt parameter")
+ if ! (defined $p->{Password} && defined $p->{Flags});
+
+ $got->{"Enc_Passwd"} = $p->{Password};
+ $got->{"Enc_Flags"} = $p->{Flags};
+ }
+}
+
use UNIVERSAL qw( isa ) ;
sub env_remove
@@ -580,6 +631,8 @@ sub new
# [ -Cachesize => number ]
# [ -LockDetect => ]
# [ -Verbose => boolean ]
+ # [ -Encrypt => { Password => string, Flags => value}
+ #
# ;
my $pkg = shift ;
@@ -595,6 +648,7 @@ sub new
LockDetect => 0,
Verbose => 0,
Config => undef,
+ Encrypt => undef,
}, @_) ;
if (defined $got->{ErrFile}) {
@@ -617,7 +671,7 @@ sub new
@BerkeleyDB::a = () ;
my $k = "" ; my $v = "" ;
while (($k, $v) = each %config) {
- if ($BerkeleyDB::db_version >= 3.1 && ! $valid_config_keys{$k} ) {
+ if ($BerkeleyDB::db_version >= 3.1 && ! $valid_config_keys{$k} ){
$BerkeleyDB::Error = "illegal name-value pair: $k $v\n" ;
croak $BerkeleyDB::Error ;
}
@@ -628,6 +682,8 @@ sub new
if @BerkeleyDB::a ;
}
+ BerkeleyDB::parseEncrypt($got);
+
my ($addr) = _db_appinit($pkg, $got) ;
my $obj ;
$obj = bless [$addr] , $pkg if $addr ;
@@ -699,6 +755,7 @@ sub new
Env => undef,
#Tie => undef,
Txn => undef,
+ Encrypt => undef,
# Hash specific
Ffactor => 0,
@@ -722,6 +779,8 @@ sub new
croak("-Tie needs a reference to a hash")
if defined $got->{Tie} and $got->{Tie} !~ /HASH/ ;
+ BerkeleyDB::parseEncrypt($got);
+
my ($addr) = _db_open_hash($self, $got);
my $obj ;
if ($addr) {
@@ -761,6 +820,7 @@ sub new
Env => undef,
#Tie => undef,
Txn => undef,
+ Encrypt => undef,
# Btree specific
Minkey => 0,
@@ -778,6 +838,8 @@ sub new
croak("-Tie needs a reference to a hash")
if defined $got->{Tie} and $got->{Tie} !~ /HASH/ ;
+ BerkeleyDB::parseEncrypt($got);
+
my ($addr) = _db_open_btree($self, $got);
my $obj ;
if ($addr) {
@@ -817,6 +879,7 @@ sub new
Env => undef,
#Tie => undef,
Txn => undef,
+ Encrypt => undef,
# Recno specific
Delim => undef,
@@ -839,6 +902,8 @@ sub new
if $got->{ArrayBase} != 1 and $got->{ArrayBase} != 0 ;
+ BerkeleyDB::parseEncrypt($got);
+
$got->{Fname} = $got->{Filename} if defined $got->{Filename} ;
my ($addr) = _db_open_recno($self, $got);
@@ -880,6 +945,7 @@ sub new
Env => undef,
#Tie => undef,
Txn => undef,
+ Encrypt => undef,
# Queue specific
Len => undef,
@@ -900,6 +966,8 @@ sub new
croak("ArrayBase can only be 0 or 1, parsed $got->{ArrayBase}")
if $got->{ArrayBase} != 1 and $got->{ArrayBase} != 0 ;
+ BerkeleyDB::parseEncrypt($got);
+
$got->{Fname} = $got->{Filename} if defined $got->{Filename} ;
my ($addr) = _db_open_queue($self, $got);
@@ -997,6 +1065,7 @@ sub new
Env => undef,
#Tie => undef,
Txn => undef,
+ Encrypt => undef,
}, @_) ;
@@ -1009,6 +1078,8 @@ sub new
croak("-Tie needs a reference to a hash")
if defined $got->{Tie} and $got->{Tie} !~ /HASH/ ;
+ BerkeleyDB::parseEncrypt($got);
+
my ($addr, $type) = _db_open_unknown($got);
my $obj ;
if ($addr) {
@@ -1104,11 +1175,9 @@ sub CLEAR
{
my $self = shift ;
my ($key, $value) = (0, 0) ;
- my $cursor = $self->db_cursor() ;
+ my $cursor = $self->_db_write_cursor() ;
while ($cursor->c_get($key, $value, BerkeleyDB::DB_PREV()) == 0)
{ $cursor->c_del() }
- #1 while $cursor->c_del() == 0 ;
- # cursor will self-destruct
}
#sub DESTROY
@@ -1384,11 +1453,22 @@ sub db_cursor
return $obj ;
}
+sub _db_write_cursor
+{
+ my $db = shift ;
+ my ($addr) = $db->__db_write_cursor(@_) ;
+ my $obj ;
+ $obj = bless [$addr, $db] , "BerkeleyDB::Cursor" if $addr ;
+ return $obj ;
+}
+
sub db_join
{
- croak 'Usage: $db->BerkeleyDB::Common::db_join([cursors], flags=0)'
+ croak 'Usage: $db->BerkeleyDB::db_join([cursors], flags=0)'
if @_ < 2 || @_ > 3 ;
my $db = shift ;
+ croak 'db_join: first parameter is not an array reference'
+ if ! ref $_[0] || ref $_[0] ne 'ARRAY';
my ($addr) = $db->_db_join(@_) ;
my $obj ;
$obj = bless [$addr, $db, $_[0]] , "BerkeleyDB::Cursor" if $addr ;
@@ -1486,6 +1566,7 @@ sub DESTROY
$self->_DESTROY() ;
}
+
package BerkeleyDB::Term ;
END
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pod b/db/perl/BerkeleyDB/BerkeleyDB.pod
index 60f30e2ab..6dcf1f6df 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pod
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pod
@@ -14,10 +14,10 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$db = tie %hash, 'BerkeleyDB::Btree', [OPTIONS] ;
$db = new BerkeleyDB::Btree [OPTIONS] ;
- $db = tie %hash, 'BerkeleyDB::Recno', [OPTIONS] ;
+ $db = tie @array, 'BerkeleyDB::Recno', [OPTIONS] ;
$db = new BerkeleyDB::Recno [OPTIONS] ;
- $db = tie %hash, 'BerkeleyDB::Queue', [OPTIONS] ;
+ $db = tie @array, 'BerkeleyDB::Queue', [OPTIONS] ;
$db = new BerkeleyDB::Queue [OPTIONS] ;
$db = new BerkeleyDB::Unknown [OPTIONS] ;
@@ -37,7 +37,6 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $db->db_del() ;
$status = $db->db_sync() ;
$status = $db->db_close() ;
- $status = $db->db_close() ;
$status = $db->db_pget()
$hash_ref = $db->db_stat() ;
$status = $db->db_key_range();
@@ -46,6 +45,11 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$boolean = $db->byteswapped() ;
$status = $db->truncate($count) ;
+ $bool = BerkeleyDB::cds_available();
+ $lock = $db->cds_lock();
+ $bool = $db->cds_enabled();
+ $bool = $db->locked();
+
($flag, $old_offset, $old_length) = $db->partial_set($offset, $length) ;
($flag, $old_offset, $old_length) = $db->partial_clear() ;
@@ -84,6 +88,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $env->set_data_dir() ;
$status = $env->set_tmp_dir() ;
$status = $env->set_verbose() ;
+ $db_env_ptr = $env->DB_ENV() ;
$BerkeleyDB::Error
$BerkeleyDB::db_version
@@ -129,11 +134,16 @@ The B<BerkeleyDB::Env> class provides an interface to the Berkeley DB
function B<db_appinit> in Berkeley DB 2.x or B<db_env_create> and
B<DBENV-E<gt>open> in Berkeley DB 3.x/4.x. Its purpose is to initialise a
number of sub-systems that can then be used in a consistent way in all
-the databases you make use of the environment.
+the databases you make use of in the environment.
If you don't intend using transactions, locking or logging, then you
shouldn't need to make use of B<BerkeleyDB::Env>.
+Note that an environment consists of a number of files that Berkeley DB
+manages behind the scenes for you. When you first use an environment, it
+needs to be explicitly created. This is done by including C<DB_CREATE>
+with the C<Flags> parameter, described below.
+
=head2 Synopsis
$env = new BerkeleyDB::Env
@@ -147,6 +157,8 @@ shouldn't need to make use of B<BerkeleyDB::Env>.
[ -SetFlags => bitmask, ]
[ -LockDetect => number, ]
[ -Verbose => boolean, ]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ]
=over 5
@@ -183,6 +195,18 @@ part of an absolute path.
If present, this parameter should be the hostname of a server that is running
the Berkeley DB RPC server. All databases will be accessed via the RPC server.
+=item -Encrypt
+
+If present, this parameter will enable encryption of all data before
+it is written to the database. This parameters must be given a hash
+reference. The format is shown below.
+
+ -Encrypt => { -Password => "abc", Flags => DB_ENCRYPT_AES }
+
+Valid values for the Flags are 0 or C<DB_ENCRYPT_AES>.
+
+This option requires Berkeley DB 4.1 or better.
+
=item -Cachesize
If present, this parameter sets the size of the environments shared memory
@@ -335,11 +359,15 @@ TODO
Returns the status of the last BerkeleyDB::Env method.
-=item $env->setmutexlocks()
-Only available in Berkeley Db 3.0 or greater. Calls
-B<db_env_set_mutexlocks> when used with Berkeley DB 3.1.x. When used with
-Berkeley DB 3.0 or 3.2 and better it calls B<DBENV-E<gt>set_mutexlocks>.
+=item $env->DB_ENV()
+
+Returns a pointer to the underlying DB_ENV data structure that Berkeley
+DB uses.
+
+=item $env->status()
+
+Returns the status of the last BerkeleyDB::Env method.
=back
@@ -421,6 +449,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Hash specific
[ -Ffactor => number,]
[ -Nelem => number,]
@@ -440,6 +470,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Hash specific
[ -Ffactor => number,]
[ -Nelem => number,]
@@ -464,7 +496,7 @@ B<BerkeleyDB::Hash> supports these options:
=item -Property
Used to specify extra flags when opening a database. The following
-flags may be specified by logically OR'ing together one or more of the
+flags may be specified by bitwise OR'ing together one or more of the
following values:
B<DB_DUP>
@@ -731,6 +763,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Btree specific
[ -Minkey => number,]
[ -Compare => code reference,]
@@ -750,6 +784,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Btree specific
[ -Minkey => number,]
[ -Compare => code reference,]
@@ -766,7 +802,7 @@ B<BerkeleyDB::Btree> supports these options:
=item -Property
Used to specify extra flags when opening a database. The following
-flags may be specified by logically OR'ing together one or more of the
+flags may be specified by bitwise OR'ing together one or more of the
following values:
B<DB_DUP>
@@ -978,6 +1014,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Recno specific
[ -Delim => byte,]
[ -Len => number,]
@@ -997,6 +1035,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Recno specific
[ -Delim => byte,]
[ -Len => number,]
@@ -1072,6 +1112,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Queue specific
[ -Len => number,]
[ -Pad => byte,]
@@ -1090,6 +1132,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Queue specific
[ -Len => number,]
[ -Pad => byte,]
@@ -1116,6 +1160,8 @@ The constructor looks like this:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
=head2 An example
@@ -1180,6 +1226,18 @@ When working under a Berkeley DB environment, this parameter
Defaults to no environment.
+=item -Encrypt
+
+If present, this parameter will enable encryption of all data before
+it is written to the database. This parameters must be given a hash
+reference. The format is shown below.
+
+ -Encrypt => { -Password => "abc", Flags => DB_ENCRYPT_AES }
+
+Valid values for the Flags are 0 or C<DB_ENCRYPT_AES>.
+
+This option requires Berkeley DB 4.1 or better.
+
=item -Txn
TODO.
@@ -1215,7 +1273,7 @@ TODO.
=back
-In addition, the following value may be set by logically OR'ing it into
+In addition, the following value may be set by bitwise OR'ing it into
the B<$flags> parameter:
=over 5
@@ -1300,6 +1358,10 @@ database and B<DB_RECNO> for a B<BerkeleyDB::Recno> database. This method
is typically used when a database has been opened with
B<BerkeleyDB::Unknown>.
+=head2 $lock = $db->cds_lock();
+
+TODO.
+
=item $ref = $db->db_stat()
Returns a reference to an associative array containing information about
@@ -1430,7 +1492,7 @@ TODO.
=back
-In addition, the following value may be set by logically OR'ing it into
+In addition, the following value may be set by bitwise OR'ing it into
the B<$flags> parameter:
=over 5
@@ -1731,10 +1793,10 @@ I get asked.
Before Berkeley DB 2.x was written there was only one Perl module that
interfaced to Berkeley DB. That module is called B<DB_File>. Although
-B<DB_File> can be build with Berkeley DB 1.x, 2.x, 3.x or 4.x, it only provides
-an interface to the functionality available in Berkeley DB 1.x. That
-means that it doesn't support transactions, locking or any of the other
-new features available in DB 2.x or better.
+B<DB_File> can be build with Berkeley DB 1.x, 2.x, 3.x or 4.x, it only
+provides an interface to the functionality available in Berkeley DB
+1.x. That means that it doesn't support transactions, locking or any of
+the other new features available in DB 2.x or better.
=head2 How do I store Perl data structures with BerkeleyDB?
@@ -1754,7 +1816,7 @@ The official web site for Berkeley DB is F<http://www.sleepycat.com>.
=head1 COPYRIGHT
-Copyright (c) 1997-2002 Paul Marquess. All rights reserved. This program
+Copyright (c) 1997-2003 Paul Marquess. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
@@ -1781,7 +1843,7 @@ See L<"AUTHOR"> for details.
=head1 AUTHOR
-Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt>.
+Paul Marquess E<lt>pmqs@cpan.orgE<gt>.
Questions about Berkeley DB may be addressed to E<lt>db@sleepycat.comE<gt>.
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.pod.P b/db/perl/BerkeleyDB/BerkeleyDB.pod.P
index 4a848f538..b8c0b996e 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.pod.P
+++ b/db/perl/BerkeleyDB/BerkeleyDB.pod.P
@@ -14,10 +14,10 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$db = tie %hash, 'BerkeleyDB::Btree', [OPTIONS] ;
$db = new BerkeleyDB::Btree [OPTIONS] ;
- $db = tie %hash, 'BerkeleyDB::Recno', [OPTIONS] ;
+ $db = tie @array, 'BerkeleyDB::Recno', [OPTIONS] ;
$db = new BerkeleyDB::Recno [OPTIONS] ;
- $db = tie %hash, 'BerkeleyDB::Queue', [OPTIONS] ;
+ $db = tie @array, 'BerkeleyDB::Queue', [OPTIONS] ;
$db = new BerkeleyDB::Queue [OPTIONS] ;
$db = new BerkeleyDB::Unknown [OPTIONS] ;
@@ -37,7 +37,6 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $db->db_del() ;
$status = $db->db_sync() ;
$status = $db->db_close() ;
- $status = $db->db_close() ;
$status = $db->db_pget()
$hash_ref = $db->db_stat() ;
$status = $db->db_key_range();
@@ -46,6 +45,11 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$boolean = $db->byteswapped() ;
$status = $db->truncate($count) ;
+ $bool = BerkeleyDB::cds_available();
+ $lock = $db->cds_lock();
+ $bool = $db->cds_enabled();
+ $bool = $db->locked();
+
($flag, $old_offset, $old_length) = $db->partial_set($offset, $length) ;
($flag, $old_offset, $old_length) = $db->partial_clear() ;
@@ -84,6 +88,7 @@ BerkeleyDB - Perl extension for Berkeley DB version 2, 3 or 4
$status = $env->set_data_dir() ;
$status = $env->set_tmp_dir() ;
$status = $env->set_verbose() ;
+ $db_env_ptr = $env->DB_ENV() ;
$BerkeleyDB::Error
$BerkeleyDB::db_version
@@ -129,11 +134,16 @@ The B<BerkeleyDB::Env> class provides an interface to the Berkeley DB
function B<db_appinit> in Berkeley DB 2.x or B<db_env_create> and
B<DBENV-E<gt>open> in Berkeley DB 3.x/4.x. Its purpose is to initialise a
number of sub-systems that can then be used in a consistent way in all
-the databases you make use of the environment.
+the databases you make use of in the environment.
If you don't intend using transactions, locking or logging, then you
shouldn't need to make use of B<BerkeleyDB::Env>.
+Note that an environment consists of a number of files that Berkeley DB
+manages behind the scenes for you. When you first use an environment, it
+needs to be explicitly created. This is done by including C<DB_CREATE>
+with the C<Flags> parameter, described below.
+
=head2 Synopsis
$env = new BerkeleyDB::Env
@@ -147,6 +157,8 @@ shouldn't need to make use of B<BerkeleyDB::Env>.
[ -SetFlags => bitmask, ]
[ -LockDetect => number, ]
[ -Verbose => boolean, ]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ]
=over 5
@@ -183,6 +195,18 @@ part of an absolute path.
If present, this parameter should be the hostname of a server that is running
the Berkeley DB RPC server. All databases will be accessed via the RPC server.
+=item -Encrypt
+
+If present, this parameter will enable encryption of all data before
+it is written to the database. This parameters must be given a hash
+reference. The format is shown below.
+
+ -Encrypt => { -Password => "abc", Flags => DB_ENCRYPT_AES }
+
+Valid values for the Flags are 0 or C<DB_ENCRYPT_AES>.
+
+This option requires Berkeley DB 4.1 or better.
+
=item -Cachesize
If present, this parameter sets the size of the environments shared memory
@@ -335,11 +359,15 @@ TODO
Returns the status of the last BerkeleyDB::Env method.
-=item $env->setmutexlocks()
-Only available in Berkeley Db 3.0 or greater. Calls
-B<db_env_set_mutexlocks> when used with Berkeley DB 3.1.x. When used with
-Berkeley DB 3.0 or 3.2 and better it calls B<DBENV-E<gt>set_mutexlocks>.
+=item $env->DB_ENV()
+
+Returns a pointer to the underlying DB_ENV data structure that Berkeley
+DB uses.
+
+=item $env->status()
+
+Returns the status of the last BerkeleyDB::Env method.
=back
@@ -421,6 +449,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Hash specific
[ -Ffactor => number,]
[ -Nelem => number,]
@@ -440,6 +470,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Hash specific
[ -Ffactor => number,]
[ -Nelem => number,]
@@ -464,7 +496,7 @@ B<BerkeleyDB::Hash> supports these options:
=item -Property
Used to specify extra flags when opening a database. The following
-flags may be specified by logically OR'ing together one or more of the
+flags may be specified by bitwise OR'ing together one or more of the
following values:
B<DB_DUP>
@@ -623,6 +655,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Btree specific
[ -Minkey => number,]
[ -Compare => code reference,]
@@ -642,6 +676,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Btree specific
[ -Minkey => number,]
[ -Compare => code reference,]
@@ -658,7 +694,7 @@ B<BerkeleyDB::Btree> supports these options:
=item -Property
Used to specify extra flags when opening a database. The following
-flags may be specified by logically OR'ing together one or more of the
+flags may be specified by bitwise OR'ing together one or more of the
following values:
B<DB_DUP>
@@ -817,6 +853,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Recno specific
[ -Delim => byte,]
[ -Len => number,]
@@ -836,6 +874,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Recno specific
[ -Delim => byte,]
[ -Len => number,]
@@ -878,6 +918,8 @@ Two forms of constructor are supported:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Queue specific
[ -Len => number,]
[ -Pad => byte,]
@@ -896,6 +938,8 @@ and this
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
# BerkeleyDB::Queue specific
[ -Len => number,]
[ -Pad => byte,]
@@ -922,6 +966,8 @@ The constructor looks like this:
[ -Pagesize => number,]
[ -Env => $env,]
[ -Txn => $txn,]
+ [ -Encrypt => { Password => "string",
+ Flags => number }, ],
=head2 An example
@@ -986,6 +1032,18 @@ When working under a Berkeley DB environment, this parameter
Defaults to no environment.
+=item -Encrypt
+
+If present, this parameter will enable encryption of all data before
+it is written to the database. This parameters must be given a hash
+reference. The format is shown below.
+
+ -Encrypt => { -Password => "abc", Flags => DB_ENCRYPT_AES }
+
+Valid values for the Flags are 0 or C<DB_ENCRYPT_AES>.
+
+This option requires Berkeley DB 4.1 or better.
+
=item -Txn
TODO.
@@ -1021,7 +1079,7 @@ TODO.
=back
-In addition, the following value may be set by logically OR'ing it into
+In addition, the following value may be set by bitwise OR'ing it into
the B<$flags> parameter:
=over 5
@@ -1106,6 +1164,10 @@ database and B<DB_RECNO> for a B<BerkeleyDB::Recno> database. This method
is typically used when a database has been opened with
B<BerkeleyDB::Unknown>.
+=head2 $lock = $db->cds_lock();
+
+TODO.
+
=item $ref = $db->db_stat()
Returns a reference to an associative array containing information about
@@ -1236,7 +1298,7 @@ TODO.
=back
-In addition, the following value may be set by logically OR'ing it into
+In addition, the following value may be set by bitwise OR'ing it into
the B<$flags> parameter:
=over 5
@@ -1498,10 +1560,10 @@ I get asked.
Before Berkeley DB 2.x was written there was only one Perl module that
interfaced to Berkeley DB. That module is called B<DB_File>. Although
-B<DB_File> can be build with Berkeley DB 1.x, 2.x, 3.x or 4.x, it only provides
-an interface to the functionality available in Berkeley DB 1.x. That
-means that it doesn't support transactions, locking or any of the other
-new features available in DB 2.x or better.
+B<DB_File> can be build with Berkeley DB 1.x, 2.x, 3.x or 4.x, it only
+provides an interface to the functionality available in Berkeley DB
+1.x. That means that it doesn't support transactions, locking or any of
+the other new features available in DB 2.x or better.
=head2 How do I store Perl data structures with BerkeleyDB?
@@ -1521,7 +1583,7 @@ The official web site for Berkeley DB is F<http://www.sleepycat.com>.
=head1 COPYRIGHT
-Copyright (c) 1997-2002 Paul Marquess. All rights reserved. This program
+Copyright (c) 1997-2003 Paul Marquess. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
@@ -1548,7 +1610,7 @@ See L<"AUTHOR"> for details.
=head1 AUTHOR
-Paul Marquess E<lt>Paul.Marquess@btinternet.comE<gt>.
+Paul Marquess E<lt>pmqs@cpan.orgE<gt>.
Questions about Berkeley DB may be addressed to E<lt>db@sleepycat.comE<gt>.
diff --git a/db/perl/BerkeleyDB/BerkeleyDB.xs b/db/perl/BerkeleyDB/BerkeleyDB.xs
index 531b38a65..ae6410a44 100644
--- a/db/perl/BerkeleyDB/BerkeleyDB.xs
+++ b/db/perl/BerkeleyDB/BerkeleyDB.xs
@@ -1,12 +1,12 @@
/*
- BerkeleyDB.xs -- Perl 5 interface to Berkeley DB version 2 & 3
+ BerkeleyDB.xs -- Perl 5 interface to Berkeley DB version 2, 3 &4
- written by Paul Marquess <Paul.Marquess@btinternet.com>
+ written by Paul Marquess <pmqs@cpan.org>
All comments/suggestions/problems are welcome
- Copyright (c) 1997-2002 Paul Marquess. All rights reserved.
+ Copyright (c) 1997-2003 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -45,6 +45,12 @@ extern "C" {
# ifdef fclose
# undef fclose
# endif
+# ifdef rename
+# undef rename
+# endif
+# ifdef open
+# undef open
+# endif
#endif
/* Being the Berkeley DB we prefer the <sys/cdefs.h> (which will be
@@ -111,6 +117,10 @@ extern "C" {
# define AT_LEAST_DB_4_1
#endif
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 2)
+# define AT_LEAST_DB_4_2
+#endif
+
#ifdef __cplusplus
}
#endif
@@ -128,10 +138,24 @@ extern "C" {
# define DB_QUEUE 4
#endif /* DB_VERSION_MAJOR == 2 */
+#if DB_VERSION_MAJOR == 2
+# define BackRef internal
+#else
+# if DB_VERSION_MAJOR == 3 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 0)
+# define BackRef cj_internal
+# else
+# define BackRef api_internal
+# endif
+#endif
+
#ifdef AT_LEAST_DB_3_2
# define DB_callback DB * db,
+# define getCurrentDB ((BerkeleyDB)db->BackRef)
+# define saveCurrentDB(db)
#else
# define DB_callback
+# define getCurrentDB CurrentDB
+# define saveCurrentDB(db) CurrentDB = db
#endif
#if DB_VERSION_MAJOR > 2
@@ -181,6 +205,8 @@ typedef struct {
int TxnMgrStatus ;
int active ;
bool txn_enabled ;
+ bool opened ;
+ bool cds_enabled;
} BerkeleyDB_ENV_type ;
@@ -211,6 +237,7 @@ typedef struct {
u_int32_t dlen ;
u_int32_t doff ;
int active ;
+ bool cds_enabled;
#ifdef ALLOW_RECNO_OFFSET
int array_base ;
#endif
@@ -246,6 +273,7 @@ typedef struct {
u_int32_t dlen ;
u_int32_t doff ;
int active ;
+ bool cds_enabled;
#ifdef ALLOW_RECNO_OFFSET
int array_base ;
#endif
@@ -337,15 +365,6 @@ hash_delete(char * hash, char * key);
# define flagSet(bitmask) ((flags & DB_OPFLAGS_MASK) == (bitmask))
#endif
-#if DB_VERSION_MAJOR == 2
-# define BackRef internal
-#else
-# if DB_VERSION_MAJOR == 3 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 0)
-# define BackRef cj_internal
-# else
-# define BackRef api_internal
-# endif
-#endif
#define ERR_BUFF "BerkeleyDB::Error"
@@ -460,6 +479,8 @@ hash_delete(char * hash, char * key);
#define ckActive_Database(a) ckActive(a, "Database")
#define ckActive_Cursor(a) ckActive(a, "Cursor")
+#define dieIfEnvOpened(e, m) if (e->opened) softCrash("Cannot call method BerkeleyDB::Env::%s after environment has been opened", m);
+
/* Internal Global Data */
static db_recno_t Value ;
static db_recno_t zero = 0 ;
@@ -869,7 +890,7 @@ btree_compare(DB_callback const DBT * key1, const DBT * key2 )
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->compare, G_SCALAR);
+ count = perl_call_sv(getCurrentDB->compare, G_SCALAR);
SPAGAIN ;
@@ -896,10 +917,12 @@ dup_compare(DB_callback const DBT * key1, const DBT * key2 )
BerkeleyDB keepDB = CurrentDB ;
Trace(("In dup_compare \n")) ;
- if (!CurrentDB)
+ if (!getCurrentDB)
softCrash("Internal Error - No CurrentDB in dup_compare") ;
- if (CurrentDB->dup_compare == NULL)
- softCrash("in dup_compare: no callback specified for database '%s'", CurrentDB->filename) ;
+ if (getCurrentDB->dup_compare == NULL)
+
+
+ softCrash("in dup_compare: no callback specified for database '%s'", getCurrentDB->filename) ;
data1 = (char*) key1->data ;
data2 = (char*) key2->data ;
@@ -924,7 +947,7 @@ dup_compare(DB_callback const DBT * key1, const DBT * key2 )
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->dup_compare, G_SCALAR);
+ count = perl_call_sv(getCurrentDB->dup_compare, G_SCALAR);
SPAGAIN ;
@@ -973,7 +996,7 @@ btree_prefix(DB_callback const DBT * key1, const DBT * key2 )
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->prefix, G_SCALAR);
+ count = perl_call_sv(getCurrentDB->prefix, G_SCALAR);
SPAGAIN ;
@@ -1011,7 +1034,7 @@ hash_cb(DB_callback const void * data, u_int32_t size)
XPUSHs(sv_2mortal(newSVpvn((char*)data,size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->hash, G_SCALAR);
+ count = perl_call_sv(getCurrentDB->hash, G_SCALAR);
SPAGAIN ;
@@ -1038,9 +1061,11 @@ associate_cb(DB_callback const DBT * pkey, const DBT * pdata, DBT * skey)
int retval ;
int count ;
SV * skey_SV ;
+ STRLEN skey_len;
+ char * skey_ptr ;
Trace(("In associate_cb \n")) ;
- if (((BerkeleyDB)db->BackRef)->associated == NULL){
+ if (getCurrentDB->associated == NULL){
Trace(("No Callback registered\n")) ;
return EINVAL ;
}
@@ -1073,7 +1098,7 @@ associate_cb(DB_callback const DBT * pkey, const DBT * pdata, DBT * skey)
PUTBACK ;
Trace(("calling associated cb\n"));
- count = perl_call_sv(((BerkeleyDB)db->BackRef)->associated, G_SCALAR);
+ count = perl_call_sv(getCurrentDB->associated, G_SCALAR);
Trace(("called associated cb\n"));
SPAGAIN ;
@@ -1087,10 +1112,13 @@ associate_cb(DB_callback const DBT * pkey, const DBT * pdata, DBT * skey)
/* retrieve the secondary key */
DBT_clear(*skey);
+ skey_ptr = SvPV(skey_SV, skey_len);
skey->flags = DB_DBT_APPMALLOC;
- skey->size = SvCUR(skey_SV);
- skey->data = (char*)safemalloc(skey->size);
- memcpy(skey->data, SvPVX(skey_SV), skey->size);
+ /* skey->size = SvCUR(skey_SV); */
+ /* skey->data = (char*)safemalloc(skey->size); */
+ skey->size = skey_len;
+ skey->data = (char*)safemalloc(skey_len);
+ memcpy(skey->data, skey_ptr, skey_len);
Trace(("key is %d -- %.*s\n", skey->size, skey->size, skey->data));
FREETMPS ;
@@ -1173,7 +1201,9 @@ my_db_open(
DBTYPE type,
int flags,
int mode,
- DB_INFO * info
+ DB_INFO * info,
+ char * password,
+ int enc_flags
)
{
DB_ENV * env = NULL ;
@@ -1186,6 +1216,7 @@ my_db_open(
dbenv, ref_dbenv, file, subname, type, flags, mode)) ;
CurrentDB = db ;
+
if (dbenv)
env = dbenv->Env ;
@@ -1200,12 +1231,21 @@ my_db_open(
softCrash("Subname needs Berkeley DB 3 or better") ;
#endif
+#ifndef AT_LEAST_DB_4_1
+ if (password)
+ softCrash("-Encrypt needs Berkeley DB 4.x or better") ;
+#endif /* ! AT_LEAST_DB_4_1 */
+
#if DB_VERSION_MAJOR > 2
Status = db_create(&dbp, env, 0) ;
Trace(("db_create returned %s\n", my_db_strerror(Status))) ;
if (Status)
return RETVAL ;
+#ifdef AT_LEAST_DB_3_2
+ dbp->BackRef = db;
+#endif
+
#ifdef AT_LEAST_DB_3_3
if (! env) {
dbp->set_alloc(dbp, safemalloc, MyRealloc, safefree) ;
@@ -1213,6 +1253,19 @@ my_db_open(
}
#endif
+#ifdef AT_LEAST_DB_4_1
+ /* set encryption */
+ if (password)
+ {
+ Status = dbp->set_encrypt(dbp, password, enc_flags);
+ Trace(("DB->set_encrypt passwd = %s, flags %d returned %s\n",
+ password, enc_flags,
+ my_db_strerror(Status))) ;
+ if (Status)
+ return RETVAL ;
+ }
+#endif
+
if (info->re_source) {
Status = dbp->set_re_source(dbp, info->re_source) ;
Trace(("set_re_source [%s] returned %s\n",
@@ -1336,8 +1389,8 @@ my_db_open(
if (info->q_extentsize) {
#ifdef AT_LEAST_DB_3_2
Status = dbp->set_q_extentsize(dbp, info->q_extentsize) ;
- Trace(("set_flags [%d] returned %s\n",
- info->flags, my_db_strerror(Status)));
+ Trace(("set_q_extentsize [%d] returned %s\n",
+ info->q_extentsize, my_db_strerror(Status)));
if (Status)
return RETVAL ;
#else
@@ -1345,6 +1398,7 @@ my_db_open(
#endif
}
+
#ifdef AT_LEAST_DB_4_1
if ((Status = (dbp->open)(dbp, txnid, file, subname, type, flags, mode)) == 0) {
#else
@@ -1355,9 +1409,6 @@ my_db_open(
#endif /* DB_VERSION_MAJOR == 2 */
Trace(("db_opened ok\n"));
-#ifdef AT_LEAST_DB_3_3
- dbp->BackRef = db;
-#endif
RETVAL = db ;
RETVAL->dbp = dbp ;
RETVAL->txn = txnid ;
@@ -1378,6 +1429,7 @@ my_db_open(
hash_store_iv("BerkeleyDB::Term::Db", (char *)RETVAL, 1) ;
Trace((" storing %p %p in BerkeleyDB::Term::Db\n", RETVAL, dbp)) ;
if (dbenv) {
+ RETVAL->cds_enabled = dbenv->cds_enabled ;
RETVAL->parent_env = dbenv ;
dbenv->Status = Status ;
++ dbenv->open_dbs ;
@@ -1527,7 +1579,7 @@ _db_rename(ref)
dbenv = env->Env ;
RETVAL = db_create(&dbp, dbenv, 0) ;
if (RETVAL == 0) {
- RETVAL = dbp->rename(dbp, db, subdb, newname, flags) ;
+ RETVAL = (dbp->rename)(dbp, db, subdb, newname, flags) ;
}
#endif
}
@@ -1536,6 +1588,68 @@ _db_rename(ref)
MODULE = BerkeleyDB::Env PACKAGE = BerkeleyDB::Env PREFIX = env_
+BerkeleyDB::Env::Raw
+create(flags=0)
+ u_int32_t flags
+ CODE:
+ {
+#ifndef AT_LEAST_DB_4_1
+ softCrash("$env->create needs Berkeley DB 4.1 or better") ;
+#else
+ DB_ENV * env ;
+ int status;
+ RETVAL = NULL;
+ Trace(("in BerkeleyDB::Env::create flags=%d\n", flags)) ;
+ status = db_env_create(&env, flags) ;
+ Trace(("db_env_create returned %s\n", my_db_strerror(status))) ;
+ if (status == 0) {
+ ZMALLOC(RETVAL, BerkeleyDB_ENV_type) ;
+ RETVAL->Env = env ;
+ RETVAL->active = TRUE ;
+ RETVAL->opened = FALSE;
+ env->set_alloc(env, safemalloc, MyRealloc, safefree) ;
+ env->set_errcall(env, db_errcall_cb) ;
+ }
+#endif
+ }
+ OUTPUT:
+ RETVAL
+
+int
+open(env, db_home=NULL, flags=0, mode=0777)
+ BerkeleyDB::Env env
+ char * db_home
+ u_int32_t flags
+ int mode
+ CODE:
+#ifndef AT_LEAST_DB_4_1
+ softCrash("$env->create needs Berkeley DB 4.1 or better") ;
+#else
+ RETVAL = env->Env->open(env->Env, db_home, flags, mode);
+ env->opened = TRUE;
+#endif
+ OUTPUT:
+ RETVAL
+
+
+int
+set_encrypt(env, passwd, flags)
+ BerkeleyDB::Env env
+ const char * passwd
+ u_int32_t flags
+ CODE:
+#ifndef AT_LEAST_DB_4_1
+ softCrash("$env->set_encrypt needs Berkeley DB 4.1 or better") ;
+#else
+ dieIfEnvOpened(env, "set_encrypt");
+ RETVAL = env->Env->set_encrypt(env->Env, passwd, flags);
+ env->opened = TRUE;
+#endif
+ OUTPUT:
+ RETVAL
+
+
+
BerkeleyDB::Env::Raw
_db_appinit(self, ref)
@@ -1545,6 +1659,8 @@ _db_appinit(self, ref)
{
HV * hash ;
SV * sv ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
char * home = NULL ;
char * errfile = NULL ;
char * server = NULL ;
@@ -1560,6 +1676,8 @@ _db_appinit(self, ref)
Trace(("in _db_appinit [%s] %d\n", self, ref)) ;
hash = (HV*) SvRV(ref) ;
SetValue_pv(home, "Home", char *) ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
SetValue_pv(config, "Config", char **) ;
SetValue_sv(errprefix, "ErrPrefix") ;
SetValue_iv(flags, "Flags") ;
@@ -1575,6 +1693,10 @@ _db_appinit(self, ref)
if (server)
softCrash("-Server needs Berkeley DB 3.1 or better") ;
#endif /* ! AT_LEAST_DB_3_1 */
+#ifndef AT_LEAST_DB_4_1
+ if (enc_passwd)
+ softCrash("-Encrypt needs Berkeley DB 4.x or better") ;
+#endif /* ! AT_LEAST_DB_4_1 */
Trace(("_db_appinit(config=[%d], home=[%s],errprefix=[%s],flags=[%d]\n",
config, home, errprefix, flags)) ;
#ifdef TRACE
@@ -1614,7 +1736,10 @@ _db_appinit(self, ref)
SetValue_iv(env->db_verbose, "Verbose") ;
env->db_errcall = db_errcall_cb ;
RETVAL->active = TRUE ;
+ RETVAL->opened = TRUE;
+ RETVAL->cds_enabled = (flags & DB_INIT_CDB != 0 ? TRUE : FALSE) ;
status = db_appinit(home, config, env, flags) ;
+ printf(" status = %d errno %d \n", status, errno) ;
Trace((" status = %d env %d Env %d\n", status, RETVAL, env)) ;
if (status == 0)
hash_store_iv("BerkeleyDB::Term::Env", (char *)RETVAL, 1) ;
@@ -1632,6 +1757,9 @@ _db_appinit(self, ref)
#ifndef AT_LEAST_DB_3_1
# define DB_CLIENT 0
#endif
+#ifdef AT_LEAST_DB_4_2
+# define DB_CLIENT DB_RPCCLIENT
+#endif
status = db_env_create(&RETVAL->Env, server ? DB_CLIENT : 0) ;
Trace(("db_env_create flags = %d returned %s\n", flags,
my_db_strerror(status))) ;
@@ -1650,6 +1778,16 @@ _db_appinit(self, ref)
Trace(("set_lk_detect [%d] returned %s\n",
lk_detect, my_db_strerror(status)));
}
+#ifdef AT_LEAST_DB_4_1
+ /* set encryption */
+ if (enc_passwd && status == 0)
+ {
+ status = env->set_encrypt(env, enc_passwd, enc_flags);
+ Trace(("ENV->set_encrypt passwd = %s, flags %d returned %s\n",
+ enc_passwd, enc_flags,
+ my_db_strerror(status))) ;
+ }
+#endif
#ifdef AT_LEAST_DB_4
/* set the server */
if (server && status == 0)
@@ -1700,11 +1838,13 @@ _db_appinit(self, ref)
SetValue_iv(mode, "Mode") ;
env->set_errcall(env, db_errcall_cb) ;
RETVAL->active = TRUE ;
+ RETVAL->cds_enabled = (flags & DB_INIT_CDB != 0 ? TRUE : FALSE) ;
#ifdef IS_DB_3_0_x
status = (env->open)(env, home, config, flags, mode) ;
#else /* > 3.0 */
status = (env->open)(env, home, flags, mode) ;
#endif
+ Trace(("ENV->open(env=%s,home=%s,flags=%d,mode=%d)\n",env,home,flags,mode)) ;
Trace(("ENV->open returned %s\n", my_db_strerror(status))) ;
}
@@ -1720,10 +1860,24 @@ _db_appinit(self, ref)
RETVAL = NULL ;
}
#endif /* DB_VERSION_MAJOR > 2 */
+ {
+ SV * sv_err = perl_get_sv(ERR_BUFF, FALSE);
+ sv_setpv(sv_err, db_strerror(status));
+ }
}
OUTPUT:
RETVAL
+DB_ENV*
+DB_ENV(env)
+ BerkeleyDB::Env env
+ CODE:
+ if (env->active)
+ RETVAL = env->Env ;
+ else
+ RETVAL = NULL;
+
+
void
log_archive(env, flags=0)
u_int32_t flags
@@ -2036,6 +2190,7 @@ set_data_dir(env, dir)
#ifndef AT_LEAST_DB_3_1
softCrash("$env->set_data_dir needs Berkeley DB 3.1 or better") ;
#else
+ dieIfEnvOpened(env, "set_data_dir");
RETVAL = env->Status = env->Env->set_data_dir(env->Env, dir);
#endif
OUTPUT:
@@ -2141,6 +2296,8 @@ _db_open_hash(self, ref)
int mode = 0 ;
BerkeleyDB db ;
BerkeleyDB__Txn txn = NULL ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
Trace(("_db_open_hash start\n")) ;
hash = (HV*) SvRV(ref) ;
@@ -2151,6 +2308,8 @@ _db_open_hash(self, ref)
ref_dbenv = sv ;
SetValue_iv(flags, "Flags") ;
SetValue_iv(mode, "Mode") ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
Zero(&info, 1, DB_INFO) ;
SetValue_iv(info.db_cachesize, "Cachesize") ;
@@ -2174,7 +2333,7 @@ _db_open_hash(self, ref)
croak("DupCompare needs Berkeley DB 2.5.9 or later") ;
#endif
}
- RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_HASH, flags, mode, &info) ;
+ RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_HASH, flags, mode, &info, enc_passwd, enc_flags) ;
Trace(("_db_open_hash end\n")) ;
}
OUTPUT:
@@ -2254,6 +2413,8 @@ _db_open_unknown(ref)
BerkeleyDB RETVAL ;
BerkeleyDB__Txn txn = NULL ;
static char * Names[] = {"", "Btree", "Hash", "Recno"} ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
hash = (HV*) SvRV(ref) ;
SetValue_pv(file, "Filename", char *) ;
@@ -2263,6 +2424,8 @@ _db_open_unknown(ref)
ref_dbenv = sv ;
SetValue_iv(flags, "Flags") ;
SetValue_iv(mode, "Mode") ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
Zero(&info, 1, DB_INFO) ;
SetValue_iv(info.db_cachesize, "Cachesize") ;
@@ -2273,7 +2436,7 @@ _db_open_unknown(ref)
SetValue_iv(info.flags, "Property") ;
ZMALLOC(db, BerkeleyDB_type) ;
- RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_UNKNOWN, flags, mode, &info) ;
+ RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_UNKNOWN, flags, mode, &info, enc_passwd, enc_flags) ;
XPUSHs(sv_2mortal(newSViv(PTR2IV(RETVAL))));
if (RETVAL)
XPUSHs(sv_2mortal(newSVpv(Names[RETVAL->type], 0))) ;
@@ -2302,6 +2465,8 @@ _db_open_btree(self, ref)
int mode = 0 ;
BerkeleyDB db ;
BerkeleyDB__Txn txn = NULL ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
Trace(("In _db_open_btree\n"));
hash = (HV*) SvRV(ref) ;
@@ -2312,6 +2477,8 @@ _db_open_btree(self, ref)
ref_dbenv = sv ;
SetValue_iv(flags, "Flags") ;
SetValue_iv(mode, "Mode") ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
Zero(&info, 1, DB_INFO) ;
SetValue_iv(info.db_cachesize, "Cachesize") ;
@@ -2342,7 +2509,7 @@ _db_open_btree(self, ref)
db->prefix = newSVsv(sv) ;
}
- RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_BTREE, flags, mode, &info) ;
+ RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_BTREE, flags, mode, &info, enc_passwd, enc_flags) ;
}
OUTPUT:
RETVAL
@@ -2432,14 +2599,19 @@ _db_open_recno(self, ref)
int mode = 0 ;
BerkeleyDB db ;
BerkeleyDB__Txn txn = NULL ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
hash = (HV*) SvRV(ref) ;
SetValue_pv(file, "Fname", char*) ;
+ SetValue_pv(subname, "Subname", char *) ;
SetValue_ov(dbenv, "Env", BerkeleyDB__Env) ;
ref_dbenv = sv ;
SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ;
SetValue_iv(flags, "Flags") ;
SetValue_iv(mode, "Mode") ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
Zero(&info, 1, DB_INFO) ;
SetValue_iv(info.db_cachesize, "Cachesize") ;
@@ -2467,7 +2639,7 @@ _db_open_recno(self, ref)
db->array_base = (db->array_base == 0 ? 1 : 0) ;
#endif /* ALLOW_RECNO_OFFSET */
- RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_RECNO, flags, mode, &info) ;
+ RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_RECNO, flags, mode, &info, enc_passwd, enc_flags) ;
}
OUTPUT:
RETVAL
@@ -2495,14 +2667,19 @@ _db_open_queue(self, ref)
int mode = 0 ;
BerkeleyDB db ;
BerkeleyDB__Txn txn = NULL ;
+ char * enc_passwd = NULL ;
+ int enc_flags = 0 ;
hash = (HV*) SvRV(ref) ;
SetValue_pv(file, "Fname", char*) ;
+ SetValue_pv(subname, "Subname", char *) ;
SetValue_ov(dbenv, "Env", BerkeleyDB__Env) ;
ref_dbenv = sv ;
SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ;
SetValue_iv(flags, "Flags") ;
SetValue_iv(mode, "Mode") ;
+ SetValue_pv(enc_passwd,"Enc_Passwd", char *) ;
+ SetValue_iv(enc_flags, "Enc_Flags") ;
Zero(&info, 1, DB_INFO) ;
SetValue_iv(info.db_cachesize, "Cachesize") ;
@@ -2527,7 +2704,7 @@ _db_open_queue(self, ref)
db->array_base = (db->array_base == 0 ? 1 : 0) ;
#endif /* ALLOW_RECNO_OFFSET */
- RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_QUEUE, flags, mode, &info) ;
+ RETVAL = my_db_open(db, ref, ref_dbenv, dbenv, txn, file, subname, DB_QUEUE, flags, mode, &info, enc_passwd, enc_flags) ;
#endif
}
OUTPUT:
@@ -2592,7 +2769,7 @@ db_close(db,flags=0)
BerkeleyDB::Common db
INIT:
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
CODE:
Trace(("BerkeleyDB::Common::db_close %d\n", db));
#ifdef STRICT_CLOSE
@@ -2616,7 +2793,7 @@ void
dab__DESTROY(db)
BerkeleyDB::Common db
CODE:
- CurrentDB = db ;
+ saveCurrentDB(db) ;
Trace(("In BerkeleyDB::Common::_DESTROY db %d dirty=%d\n", db, PL_dirty)) ;
destroyDB(db) ;
Trace(("End of BerkeleyDB::Common::DESTROY \n")) ;
@@ -2631,12 +2808,20 @@ _db_cursor(db, flags=0)
u_int32_t flags
BerkeleyDB::Common db
BerkeleyDB::Cursor RETVAL = NULL ;
+ ALIAS: __db_write_cursor = 1
INIT:
ckActive_Database(db->active) ;
CODE:
{
- DBC * cursor ;
- CurrentDB = db ;
+ DBC * cursor ;
+ saveCurrentDB(db) ;
+ if (ix == 1 && db->cds_enabled) {
+#ifdef AT_LEAST_DB_3
+ flags |= DB_WRITECURSOR;
+#else
+ flags |= DB_RMW;
+#endif
+ }
if ((db->Status = db_cursor(db, db->txn, &cursor, flags)) == 0){
ZMALLOC(RETVAL, BerkeleyDB__Cursor_type) ;
db->open_cursors ++ ;
@@ -2646,6 +2831,7 @@ _db_cursor(db, flags=0)
RETVAL->txn = db->txn ;
RETVAL->type = db->type ;
RETVAL->recno_or_queue = db->recno_or_queue ;
+ RETVAL->cds_enabled = db->cds_enabled ;
RETVAL->filename = my_strdup(db->filename) ;
RETVAL->compare = db->compare ;
RETVAL->dup_compare = db->dup_compare ;
@@ -2693,7 +2879,7 @@ _db_join(db, cursors, flags=0)
DBC ** cursor_list ;
I32 count = av_len(cursors) + 1 ;
int i ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
if (count < 1 )
softCrash("db_join: No cursors in parameter list") ;
cursor_list = (DBC **)safemalloc(sizeof(DBC*) * (count + 1));
@@ -2701,6 +2887,8 @@ _db_join(db, cursors, flags=0)
SV * obj = (SV*) * av_fetch(cursors, i, FALSE) ;
IV tmp = SvIV(getInnerObject(obj)) ;
BerkeleyDB__Cursor cur = INT2PTR(BerkeleyDB__Cursor, tmp);
+ if (cur->dbp == db->dbp)
+ softCrash("attempted to do a self-join");
cursor_list[i] = cur->cursor ;
}
cursor_list[i] = NULL ;
@@ -2761,6 +2949,30 @@ ArrayOffset(db)
OUTPUT:
RETVAL
+bool
+cds_available()
+ CODE:
+#ifndef AT_LEAST_DB_2
+ RETVAL = TRUE;
+#else
+ RETVAL = FALSE;
+#endif
+ OUTPUT:
+ RETVAL
+
+
+bool
+cds_enabled(db)
+ BerkeleyDB::Common db
+ INIT:
+ ckActive_Database(db->active) ;
+ CODE:
+ RETVAL = db->cds_enabled ;
+ OUTPUT:
+ RETVAL
+
+
+
int
type(db)
BerkeleyDB::Common db
@@ -2899,7 +3111,7 @@ db_del(db, key, flags=0)
INIT:
Trace(("db_del db[%p] in [%p] txn[%p] key[%.*s] flags[%d]\n", db->dbp, db, db->txn, key.size, key.data, flags)) ;
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
#ifdef AT_LEAST_DB_3
@@ -2921,7 +3133,7 @@ db_get(db, key, data, flags=0)
DBT_OPT data
CODE:
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
SetPartial(data,db) ;
Trace(("db_get db[%p] in [%p] txn[%p] key [%.*s] flags[%d]\n", db->dbp, db, db->txn, key.size, key.data, flags)) ;
RETVAL = db_get(db, key, data, flags);
@@ -2946,7 +3158,7 @@ db_pget(db, key, pkey, data, flags=0)
#else
Trace(("db_pget db [%p] in [%p] txn [%p] flags [%d]\n", db->dbp, db, db->txn, flags)) ;
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
SetPartial(data,db) ;
DBT_clear(pkey);
RETVAL = db_pget(db, key, pkey, data, flags);
@@ -2968,7 +3180,7 @@ db_put(db, key, data, flags=0)
DBT data
CODE:
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
/* SetPartial(data,db) ; */
Trace(("db_put db[%p] in [%p] txn[%p] key[%.*s] data [%.*s] flags[%d]\n", db->dbp, db, db->txn, key.size, key.data, data.size, data.data, flags)) ;
RETVAL = db_put(db, key, data, flags);
@@ -2995,7 +3207,7 @@ db_key_range(db, key, less, equal, greater, flags=0)
DB_KEY_RANGE range ;
range.less = range.equal = range.greater = 0.0 ;
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
RETVAL = db_key_range(db, key, range, flags);
if (RETVAL == 0) {
less = range.less ;
@@ -3012,13 +3224,13 @@ db_key_range(db, key, less, equal, greater, flags=0)
#define db_fd(d, x) (db->Status = (db->dbp->fd)(db->dbp, &x))
-DualType
+int
db_fd(db)
BerkeleyDB::Common db
INIT:
ckActive_Database(db->active) ;
CODE:
- CurrentDB = db ;
+ saveCurrentDB(db) ;
db_fd(db, RETVAL) ;
OUTPUT:
RETVAL
@@ -3031,7 +3243,7 @@ db_sync(db, flags=0)
BerkeleyDB::Common db
INIT:
ckActive_Database(db->active) ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
void
_Txn(db, txn=NULL)
@@ -3064,7 +3276,7 @@ truncate(db, countp, flags=0)
#ifndef AT_LEAST_DB_3_3
softCrash("truncate needs Berkeley DB 3.3 or later") ;
#else
- CurrentDB = db ;
+ saveCurrentDB(db) ;
RETVAL = db_truncate(db, countp, flags);
#endif
OUTPUT:
@@ -3090,7 +3302,7 @@ associate(db, secondary, callback, flags=0)
#ifndef AT_LEAST_DB_3_3
softCrash("associate needs Berkeley DB 3.3 or later") ;
#else
- CurrentDB = db ;
+ saveCurrentDB(db) ;
/* db->associated = newSVsv(callback) ; */
secondary->associated = newSVsv(callback) ;
/* secondary->dbp->app_private = secondary->associated ; */
@@ -3109,7 +3321,7 @@ _c_dup(db, flags=0)
BerkeleyDB::Cursor db
BerkeleyDB::Cursor RETVAL = NULL ;
INIT:
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Database(db->active) ;
CODE:
{
@@ -3126,6 +3338,7 @@ _c_dup(db, flags=0)
RETVAL->dbp = db->dbp ;
RETVAL->type = db->type ;
RETVAL->recno_or_queue = db->recno_or_queue ;
+ RETVAL->cds_enabled = db->cds_enabled ;
RETVAL->filename = my_strdup(db->filename) ;
RETVAL->compare = db->compare ;
RETVAL->dup_compare = db->dup_compare ;
@@ -3160,7 +3373,7 @@ DualType
_c_close(db)
BerkeleyDB::Cursor db
INIT:
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
hash_delete("BerkeleyDB::Term::Cursor", (char *)db) ;
CODE:
@@ -3176,7 +3389,7 @@ void
_DESTROY(db)
BerkeleyDB::Cursor db
CODE:
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
Trace(("In BerkeleyDB::Cursor::_DESTROY db %d dirty=%d active=%d\n", db, PL_dirty, db->active));
hash_delete("BerkeleyDB::Term::Cursor", (char *)db) ;
if (db->active)
@@ -3202,7 +3415,7 @@ cu_c_del(db, flags=0)
int flags
BerkeleyDB::Cursor db
INIT:
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
OUTPUT:
RETVAL
@@ -3213,12 +3426,14 @@ DualType
cu_c_get(db, key, data, flags=0)
int flags
BerkeleyDB::Cursor db
- DBTKEY_B key
- DBT_B data
+ DBTKEY_B key
+ DBT_B data
INIT:
Trace(("c_get db [%p] in [%p] flags [%d]\n", db->dbp, db, flags)) ;
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
+ /* DBT_clear(key); */
+ /* DBT_clear(data); */
SetPartial(data,db) ;
Trace(("c_get end\n")) ;
OUTPUT:
@@ -3239,7 +3454,7 @@ cu_c_pget(db, key, pkey, data, flags=0)
softCrash("db_c_pget needs at least Berkeley DB 3.3");
#else
Trace(("c_pget db [%d] flags [%d]\n", db, flags)) ;
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
SetPartial(data,db) ;
DBT_clear(pkey);
@@ -3250,7 +3465,7 @@ cu_c_pget(db, key, pkey, data, flags=0)
RETVAL
key
pkey
- data if (! flagSet(DB_JOIN_ITEM)) OutputValue_B(ST(2), data) ;
+ data
@@ -3262,7 +3477,7 @@ cu_c_put(db, key, data, flags=0)
DBTKEY key
DBT data
INIT:
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
/* SetPartial(data,db) ; */
OUTPUT:
@@ -3279,7 +3494,7 @@ cu_c_count(db, count, flags=0)
softCrash("c_count needs at least Berkeley DB 3.1.x");
#else
Trace(("c_get count [%d] flags [%d]\n", db, flags)) ;
- CurrentDB = db->parent_db ;
+ saveCurrentDB(db->parent_db);
ckActive_Cursor(db->active) ;
RETVAL = cu_c_count(db, count, flags) ;
Trace((" c_count got %d duplicates\n", count)) ;
@@ -3549,7 +3764,7 @@ FIRSTKEY(db)
restore at the end.
*/
- CurrentDB = db ;
+ saveCurrentDB(db) ;
DBT_clear(key) ;
DBT_clear(value) ;
/* If necessary create a cursor for FIRSTKEY/NEXTKEY use */
@@ -3581,7 +3796,7 @@ NEXTKEY(db, key)
{
DBT value ;
- CurrentDB = db ;
+ saveCurrentDB(db) ;
DBT_clear(key) ;
DBT_clear(value) ;
key.flags = 0 ;
@@ -3603,7 +3818,7 @@ I32
FETCHSIZE(db)
BerkeleyDB::Common db
CODE:
- CurrentDB = db ;
+ saveCurrentDB(db) ;
RETVAL = GetArrayLength(db) ;
OUTPUT:
RETVAL
diff --git a/db/perl/BerkeleyDB/Changes b/db/perl/BerkeleyDB/Changes
index cbeb1a34d..a0a8d3c13 100644
--- a/db/perl/BerkeleyDB/Changes
+++ b/db/perl/BerkeleyDB/Changes
@@ -1,5 +1,59 @@
Revision history for Perl extension BerkeleyDB.
+0.25 1st November 2003
+
+ * Minor update to dbinfo
+
+ * Fixed a bug in the test harnesses that is only apparent in
+ perl 5.8.2. Original patch courtesy of Michael Schwern.
+
+0.24 27th September 2003
+
+ * Mentioned comp.databases.berkeley-db in README
+
+ * Builds with Berkeley DB 4.2
+
+ * The return type for db->db_fd was wrongly set at DualType -
+ should be int.
+
+0.23 15th June 2003
+
+ * Fixed problem where a secondary index would use the same
+ compare callback as the primary key, regardless of what was
+ defined for the secondary index.
+ Problem spotted by Dave Tallman.
+
+ * Also fixed a problem with the associate callback. If the value
+ for the secondary key was not a string, the secondary key was
+ being set incorrectly. This is now fixed.
+
+ * When built with Berkeley DB 3.2 or better, all callbacks now use
+ the BackRef pointer instead of the global CurrentDB. This was
+ done partially to fix the secondary index problem, above.
+
+ * The test harness was failing under cygwin. Now fixed.
+
+ * Previous release broke TRACE. Fixed.
+
+0.22 17th May 2003
+
+ * win32 problem with open macro fixed.
+
+0.21 12th May 2003
+
+ * adding support for env->set_flags
+ * adding recursion detection
+ * win32 problem with rename fixed.
+ * problem with sub-database name in Recno & Queue fixed.
+ * fixed the mldbm.t test harness to work with perl 5.8.0
+ * added a note about not using a network drive when running the
+ test harness.
+ * fixed c_pget
+ * added BerkeleyDB::Env::DB_ENV method
+ * added support for encryption
+ * the dbinfo script will now indicate if the database is encrypted
+ * The CLEAR method is now CDB safe.
+
0.20 2nd September 2002
* More support for building with Berkeley DB 4.1.x
diff --git a/db/perl/BerkeleyDB/MANIFEST b/db/perl/BerkeleyDB/MANIFEST
index 7da51ef7d..2a646f65d 100644
--- a/db/perl/BerkeleyDB/MANIFEST
+++ b/db/perl/BerkeleyDB/MANIFEST
@@ -24,6 +24,7 @@ t/db-3.1.t
t/db-3.2.t
t/db-3.3.t
t/destroy.t
+t/encrypt.t
t/env.t
t/examples.t
t/examples.t.T
@@ -54,3 +55,4 @@ patches/5.005_02
patches/5.005_03
patches/5.6.0
scan
+META.yml Module meta-data (added by MakeMaker)
diff --git a/db/perl/BerkeleyDB/META.yml b/db/perl/BerkeleyDB/META.yml
new file mode 100644
index 000000000..3b205c9ce
--- /dev/null
+++ b/db/perl/BerkeleyDB/META.yml
@@ -0,0 +1,10 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: BerkeleyDB
+version: 0.25
+version_from: BerkeleyDB.pm
+installdirs: site
+requires:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
diff --git a/db/perl/BerkeleyDB/Makefile.PL b/db/perl/BerkeleyDB/Makefile.PL
index 86da9a845..df72a8cd5 100644
--- a/db/perl/BerkeleyDB/Makefile.PL
+++ b/db/perl/BerkeleyDB/Makefile.PL
@@ -52,7 +52,7 @@ WriteMakefile(
'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'},
($] >= 5.005
? (ABSTRACT_FROM => 'BerkeleyDB.pod',
- AUTHOR => 'Paul Marquess <Paul.Marquess@btinternet.com>')
+ AUTHOR => 'Paul Marquess <pmqs@cpan.org>')
: ()
),
);
@@ -115,7 +115,9 @@ sub ParseCONFIG
$INC_DIR = $ENV{'BERKELEYDB_INCLUDE'} || $Info{'INCLUDE'} ;
$LIB_DIR = $ENV{'BERKELEYDB_LIB'} || $Info{'LIB'} ;
- $DB_NAME = $Info{'DBNAME'} if defined $Info{'DBNAME'} ;
+ $DB_NAME = $ENV{BERKELEYDB_NAME} || $Info{'DBNAME'} ;
+ #$DB_NAME = $ENV{} || $Info{'DBNAME'} if defined $Info{'DBNAME'} ;
+
print "Looks Good.\n" ;
}
diff --git a/db/perl/BerkeleyDB/README b/db/perl/BerkeleyDB/README
index a600e3131..ec3aedff5 100644
--- a/db/perl/BerkeleyDB/README
+++ b/db/perl/BerkeleyDB/README
@@ -1,10 +1,10 @@
BerkeleyDB
- Version 0.20
+ Version 0.25
- 2nd Sept 2002
+ 28th Sept 2003
- Copyright (c) 1997-2002 Paul Marquess. All rights reserved. This
+ Copyright (c) 1997-2003 Paul Marquess. All rights reserved. This
program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
@@ -30,6 +30,10 @@ PREREQUISITES
Before you can build BerkeleyDB you need to have the following
installed on your system:
+ * To run the test harness for this module, you must make sure that the
+ directory where you have untarred this module is NOT a network
+ drive, e.g. NFS or AFS.
+
* Perl 5.004_04 or greater.
* Berkeley DB Version 2.6.4 or greater
@@ -57,7 +61,6 @@ Step 1 : If you are running Solaris 2.5, 2.7 or HP-UX 10 read either
If you are running Linux please read the Linux Notes section
before proceeding.
-
Step 2 : Edit the file config.in to suit you local installation.
Instructions are given in the file.
@@ -279,10 +282,114 @@ Solution: Setting the LIB & INCLUDE variables in config.in to point to the
If you are running Linux, please read the Linux Notes section below.
+
+Solaris build fails with "language optional software package not installed"
+---------------------------------------------------------------------------
+
+If you are trying to build this module under Solaris and you get an
+error message like this
+
+ /usr/ucb/cc: language optional software package not installed
+
+it means that Perl cannot find the C compiler on your system. The cryptic
+message is just Sun's way of telling you that you haven't bought their
+C compiler.
+
+When you build a Perl module that needs a C compiler, the Perl build
+system tries to use the same C compiler that was used to build perl
+itself. In this case your Perl binary was built with a C compiler that
+lived in /usr/ucb.
+
+To continue with building this module, you need to get a C compiler,
+or tell Perl where your C compiler is, if you already have one.
+
+Assuming you have now got a C compiler, what you do next will be dependant
+on what C compiler you have installed. If you have just installed Sun's
+C compiler, you shouldn't have to do anything. Just try rebuilding
+this module.
+
+If you have installed another C compiler, say gcc, you have to tell perl
+how to use it instead of /usr/ucb/cc.
+
+This set of options seems to work if you want to use gcc. Your mileage
+may vary.
+
+ perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" "
+ make test
+
+If that doesn't work for you, it's time to make changes to the Makefile
+by hand. Good luck!
+
+
+
+Solaris build fails with "gcc: unrecognized option `-KPIC'"
+-----------------------------------------------------------
+
+You are running Solaris and you get an error like this when you try to
+build this Perl module
+
+ gcc: unrecognized option `-KPIC'
+
+This symptom usually means that you are using a Perl binary that has been
+built with the Sun C compiler, but you are using gcc to build this module.
+
+When Perl builds modules that need a C compiler, it will attempt to use
+the same C compiler and command line options that was used to build perl
+itself. In this case "-KPIC" is a valid option for the Sun C compiler,
+but not for gcc. The equivalent option for gcc is "-fPIC".
+
+The solution is either:
+
+ 1. Build both Perl and this module with the same C compiler, either
+ by using the Sun C compiler for both or gcc for both.
+
+ 2. Try generating the Makefile for this module like this perl
+
+ perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" " LD=gcc
+ make test
+
+ This second option seems to work when mixing a Perl binary built
+ with the Sun C compiler and this module built with gcc. Your
+ mileage may vary.
+
+
+
+Network Drive
+-------------
+
+BerkeleyDB seems to have built correctly, but you get a series of errors
+like this when you run the test harness:
+
+
+t/btree........NOK 178Can't call method "txn_begin" on an undefined value at t/btree.t line 637.
+t/btree........dubious
+ Test returned status 11 (wstat 2816, 0xb00)
+DIED. FAILED tests 28, 178-244
+ Failed 68/244 tests, 72.13% okay
+t/db-3.0.......NOK 2Can't call method "set_mutexlocks" on an undefined value at t/db-3.0.t line 39.
+t/db-3.0.......dubious
+ Test returned status 11 (wstat 2816, 0xb00)
+DIED. FAILED tests 2-14
+ Failed 13/14 tests, 7.14% okay
+t/db-3.1.......ok
+t/db-3.2.......NOK 5Can't call method "set_flags" on an undefined value at t/db-3.2.t line 62.
+t/db-3.2.......dubious
+ Test returned status 11 (wstat 2816, 0xb00)
+DIED. FAILED tests 3, 5-6
+ Failed 3/6 tests, 50.00% okay
+t/db-3.3.......ok
+
+This pattern of errors happens if you have built the module in a directory
+that is network mounted (e.g. NFS ar AFS).
+
+The solution is to use a local drive. Berkeley DB doesn't support
+network drives.
+
+
Linux Notes
-----------
-Newer versions of Linux (e.g. RedHat 6, SuSe 6) ship with a C library
+Some versions of Linux (e.g. RedHat 6, SuSe 6) ship with a C library
that has version 2.x of Berkeley DB linked into it. This makes it
difficult to build this module with anything other than the version of
Berkeley DB that shipped with your Linux release. If you do try to use
@@ -386,6 +493,7 @@ Sun patch 103187-25 (or later revisions) fixes this problem.
To find out if you have the patch installed, the command "showrev -p"
will display the patches that are currently installed on your system.
+
Solaris 2.7 Notes
-----------------
@@ -426,7 +534,14 @@ following steps should do the trick:
FEEDBACK
--------
+General feedback/questions/bug reports can be sent to me at pmqs@cpan.org.
+
+Alternatively, if you have Usenet access, you can try the
+comp.databases.berkeley-db or comp.lang.perl.modules groups.
+
+
How to report a problem with BerkeleyDB.
+----------------------------------------
To help me help you, I need of the following information:
@@ -441,6 +556,10 @@ To help me help you, I need of the following information:
perl -MBerkeleyDB -e 'print qq{BerkeleyDB ver $BerkeleyDB::VERSION\n}'
+ If you are running windows use this
+
+ perl -MBerkeleyDB -e "print qq{BerkeleyDB ver $BerkeleyDB::VERSION\n}"
+
If you haven't installed BerkeleyDB then search BerkeleyDB.pm for a
line like this:
@@ -451,6 +570,10 @@ To help me help you, I need of the following information:
perl -MBerkeleyDB -e 'print BerkeleyDB::DB_VERSION_STRING.qq{\n}'
+ If you are running windows use this
+
+ perl -MBerkeleyDB -e "print BerkeleyDB::DB_VERSION_STRING.qq{\n}"
+
If you haven't installed BerkeleyDB then search db.h for a line
like this:
@@ -480,5 +603,5 @@ CHANGES
See the Changes file.
-Paul Marquess <Paul.Marquess@btinternet.com>
+Paul Marquess <pmqs@cpan.org>
diff --git a/db/perl/BerkeleyDB/config.in b/db/perl/BerkeleyDB/config.in
index fd1bb1cae..f7eb07765 100644
--- a/db/perl/BerkeleyDB/config.in
+++ b/db/perl/BerkeleyDB/config.in
@@ -7,16 +7,34 @@
# Change the path below to point to the directory where db.h is
# installed on your system.
-INCLUDE = /usr/local/include
+#INCLUDE = /usr/local/include
#INCLUDE = /usr/local/BerkeleyDB/include
+#INCLUDE = ./libraries/2.7.5/include
+#INCLUDE = ./libraries/3.0.55/include
+#INCLUDE = ./libraries/3.1.17/include
+#INCLUDE = ./libraries/3.3.11/include
+#INCLUDE = ./libraries/4.1.12/include
+#INCLUDE = ./libraries/4.1.24.NC/include
+#INCLUDE = ./libraries/4.1.25/include
+INCLUDE = ./libraries/4.2.41/include
# 2. Where is libdb?
#
# Change the path below to point to the directory where libdb is
# installed on your system.
-LIB = /usr/local/lib
+#LIB = /usr/local/lib
#LIB = /usr/local/BerkeleyDB/lib
+#LIB = ./libraries/2.7.5/lib
+#LIB = ./libraries/3.0.55/lib
+#LIB = ./libraries/3.1.17/lib
+#LIB = ./libraries/3.3.11/lib
+#LIB = ./libraries/4.1.12/lib
+#LIB = ./libraries/4.1.24.NC/lib
+#LIB = ./libraries/4.1.25/lib
+LIB = ./libraries/4.2.41/lib
+
+#LIB = ./libraries/1.85/lib
# 3. Is the library called libdb?
#
diff --git a/db/perl/BerkeleyDB/constants.h b/db/perl/BerkeleyDB/constants.h
index d86cef155..02e04a7e8 100644
--- a/db/perl/BerkeleyDB/constants.h
+++ b/db/perl/BerkeleyDB/constants.h
@@ -245,9 +245,9 @@ static int
constant_9 (pTHX_ const char *name, IV *iv_return) {
/* When generated this function returned values for the list of names given
here. However, subsequent manual editing may have added or removed some.
- DB_APPEND DB_BEFORE DB_CLIENT DB_COMMIT DB_CREATE DB_CURLSN DB_DIRECT
- DB_EXTENT DB_GETREC DB_NOCOPY DB_NOMMAP DB_NOSYNC DB_RDONLY DB_RECNUM
- DB_THREAD DB_VERIFY */
+ DB_APPEND DB_BEFORE DB_CHKSUM DB_CLIENT DB_COMMIT DB_CREATE DB_CURLSN
+ DB_DIRECT DB_EXTENT DB_GETREC DB_NOCOPY DB_NOMMAP DB_NOSYNC DB_RDONLY
+ DB_RECNUM DB_THREAD DB_VERIFY */
/* Offset 7 gives the best switch position. */
switch (name[7]) {
case 'A':
@@ -408,6 +408,15 @@ constant_9 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'U':
+ if (memEQ(name, "DB_CHKSUM", 9)) {
+ /* ^ */
+#ifdef DB_CHKSUM
+ *iv_return = DB_CHKSUM;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_RECNUM", 9)) {
/* ^ */
#ifdef DB_RECNUM
@@ -642,12 +651,13 @@ static int
constant_11 (pTHX_ const char *name, IV *iv_return) {
/* When generated this function returned values for the list of names given
here. However, subsequent manual editing may have added or removed some.
- DB_APP_INIT DB_ARCH_ABS DB_ARCH_LOG DB_FIXEDLEN DB_GET_BOTH DB_INIT_CDB
- DB_INIT_LOG DB_INIT_TXN DB_KEYEMPTY DB_KEYEXIST DB_KEYFIRST DB_LOCKDOWN
- DB_LOCK_GET DB_LOCK_PUT DB_LOGMAGIC DB_LOG_DISK DB_MULTIPLE DB_NEXT_DUP
- DB_NOSERVER DB_NOTFOUND DB_OK_BTREE DB_OK_QUEUE DB_OK_RECNO DB_POSITION
- DB_QAMMAGIC DB_RENUMBER DB_SNAPSHOT DB_TRUNCATE DB_TXNMAGIC DB_TXN_LOCK
- DB_TXN_REDO DB_TXN_SYNC DB_TXN_UNDO DB_WRNOSYNC DB_YIELDCPU */
+ DB_APP_INIT DB_ARCH_ABS DB_ARCH_LOG DB_FILEOPEN DB_FIXEDLEN DB_GET_BOTH
+ DB_INIT_CDB DB_INIT_LOG DB_INIT_REP DB_INIT_TXN DB_KEYEMPTY DB_KEYEXIST
+ DB_KEYFIRST DB_LOCKDOWN DB_LOCK_GET DB_LOCK_PUT DB_LOGMAGIC DB_LOG_DISK
+ DB_LOG_PERM DB_MULTIPLE DB_NEXT_DUP DB_NOSERVER DB_NOTFOUND DB_OK_BTREE
+ DB_OK_QUEUE DB_OK_RECNO DB_POSITION DB_QAMMAGIC DB_RENUMBER DB_SNAPSHOT
+ DB_TRUNCATE DB_TXNMAGIC DB_TXN_LOCK DB_TXN_REDO DB_TXN_SYNC DB_TXN_UNDO
+ DB_WRNOSYNC DB_YIELDCPU */
/* Offset 8 gives the best switch position. */
switch (name[8]) {
case 'A':
@@ -722,6 +732,15 @@ constant_11 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'E':
+ if (memEQ(name, "DB_LOG_PERM", 11)) {
+ /* ^ */
+#ifdef DB_LOG_PERM
+ *iv_return = DB_LOG_PERM;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_OK_QUEUE", 11)) {
/* ^ */
#ifdef DB_OK_QUEUE
@@ -901,6 +920,15 @@ constant_11 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'P':
+ if (memEQ(name, "DB_FILEOPEN", 11)) {
+ /* ^ */
+#ifdef DB_FILEOPEN
+ *iv_return = DB_FILEOPEN;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_KEYEMPTY", 11)) {
/* ^ */
#ifdef DB_KEYEMPTY
@@ -933,6 +961,15 @@ constant_11 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'R':
+ if (memEQ(name, "DB_INIT_REP", 11)) {
+ /* ^ */
+#ifdef DB_INIT_REP
+ *iv_return = DB_INIT_REP;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_KEYFIRST", 11)) {
/* ^ */
#ifdef DB_KEYFIRST
@@ -1019,8 +1056,9 @@ constant_12 (pTHX_ const char *name, IV *iv_return) {
DB_LOCK_RW_N DB_LOGOLDVER DB_MAX_PAGES DB_MPOOL_NEW DB_NEEDSPLIT
DB_NODUPDATA DB_NOLOCKING DB_NORECURSE DB_OVERWRITE DB_PAGEYIELD
DB_PAGE_LOCK DB_PERMANENT DB_POSITIONI DB_PRINTABLE DB_QAMOLDVER
- DB_SET_RANGE DB_SET_RECNO DB_SWAPBYTES DB_TEMPORARY DB_TXN_ABORT
- DB_TXN_APPLY DB_TXN_PRINT DB_WRITELOCK DB_WRITEOPEN DB_XA_CREATE */
+ DB_RPCCLIENT DB_SET_RANGE DB_SET_RECNO DB_SWAPBYTES DB_TEMPORARY
+ DB_TXN_ABORT DB_TXN_APPLY DB_TXN_PRINT DB_WRITELOCK DB_WRITEOPEN
+ DB_XA_CREATE */
/* Offset 3 gives the best switch position. */
switch (name[3]) {
case 'A':
@@ -1326,6 +1364,17 @@ constant_12 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'R':
+ if (memEQ(name, "DB_RPCCLIENT", 12)) {
+ /* ^ */
+#ifdef DB_RPCCLIENT
+ *iv_return = DB_RPCCLIENT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'S':
if (memEQ(name, "DB_SET_RANGE", 12)) {
/* ^ */
@@ -1444,11 +1493,12 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
DB_AGGRESSIVE DB_BTREEMAGIC DB_CHECKPOINT DB_DIRECT_LOG DB_DIRTY_READ
DB_DONOTINDEX DB_ENV_CREATE DB_ENV_NOMMAP DB_ENV_THREAD DB_HASHOLDVER
DB_INCOMPLETE DB_INIT_MPOOL DB_LOCK_NORUN DB_LOCK_RIW_N DB_LOCK_TRADE
- DB_LOGVERSION DB_LOG_LOCKED DB_MPOOL_LAST DB_MUTEXDEBUG DB_MUTEXLOCKS
- DB_NEXT_NODUP DB_NOORDERCHK DB_PREV_NODUP DB_PR_HEADERS DB_QAMVERSION
- DB_RDWRMASTER DB_REGISTERED DB_REP_CLIENT DB_REP_MASTER DB_SEQUENTIAL
+ DB_LOGVERSION DB_LOG_CHKPNT DB_LOG_COMMIT DB_LOG_LOCKED DB_LOG_NOCOPY
+ DB_MPOOL_LAST DB_MUTEXDEBUG DB_MUTEXLOCKS DB_NEXT_NODUP DB_NOORDERCHK
+ DB_PREV_NODUP DB_PR_HEADERS DB_QAMVERSION DB_RDWRMASTER DB_REGISTERED
+ DB_REP_CLIENT DB_REP_CREATE DB_REP_ISPERM DB_REP_MASTER DB_SEQUENTIAL
DB_STAT_CLEAR DB_SYSTEM_MEM DB_TXNVERSION DB_TXN_NOSYNC DB_TXN_NOWAIT
- DB_VERIFY_BAD */
+ DB_VERIFY_BAD DB_debug_FLAG DB_user_BEGIN */
/* Offset 5 gives the best switch position. */
switch (name[5]) {
case 'A':
@@ -1542,6 +1592,24 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_LOG_CHKPNT", 13)) {
+ /* ^ */
+#ifdef DB_LOG_CHKPNT
+ *iv_return = DB_LOG_CHKPNT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_LOG_COMMIT", 13)) {
+ /* ^ */
+#ifdef DB_LOG_COMMIT
+ *iv_return = DB_LOG_COMMIT;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_LOG_LOCKED", 13)) {
/* ^ */
#ifdef DB_LOG_LOCKED
@@ -1551,6 +1619,15 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_LOG_NOCOPY", 13)) {
+ /* ^ */
+#ifdef DB_LOG_NOCOPY
+ *iv_return = DB_LOG_NOCOPY;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_REGISTERED", 13)) {
/* ^ */
#ifdef DB_REGISTERED
@@ -1651,6 +1728,24 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_CREATE", 13)) {
+ /* ^ */
+#ifdef DB_REP_CREATE
+ *iv_return = DB_REP_CREATE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_REP_ISPERM", 13)) {
+ /* ^ */
+#ifdef DB_REP_ISPERM
+ *iv_return = DB_REP_ISPERM;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_REP_MASTER", 13)) {
/* ^ */
#ifdef DB_REP_MASTER
@@ -1812,6 +1907,28 @@ constant_13 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'b':
+ if (memEQ(name, "DB_debug_FLAG", 13)) {
+ /* ^ */
+#ifdef DB_debug_FLAG
+ *iv_return = DB_debug_FLAG;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'e':
+ if (memEQ(name, "DB_user_BEGIN", 13)) {
+ /* ^ */
+#ifdef DB_user_BEGIN
+ *iv_return = DB_user_BEGIN;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
}
return PERL_constant_NOTFOUND;
}
@@ -1820,16 +1937,16 @@ static int
constant_14 (pTHX_ const char *name, IV *iv_return) {
/* When generated this function returned values for the list of names given
here. However, subsequent manual editing may have added or removed some.
- DB_AUTO_COMMIT DB_BTREEOLDVER DB_CHKSUM_SHA1 DB_EID_INVALID DB_ENCRYPT_AES
- DB_ENV_APPINIT DB_ENV_DBLOCAL DB_ENV_LOCKING DB_ENV_LOGGING DB_ENV_NOPANIC
- DB_ENV_PRIVATE DB_FILE_ID_LEN DB_HANDLE_LOCK DB_HASHVERSION DB_INVALID_EID
- DB_JOIN_NOSORT DB_LOCKVERSION DB_LOCK_EXPIRE DB_LOCK_NOWAIT DB_LOCK_OLDEST
- DB_LOCK_RANDOM DB_LOCK_RECORD DB_LOCK_REMOVE DB_LOCK_SWITCH DB_MAX_RECORDS
- DB_MPOOL_CLEAN DB_MPOOL_DIRTY DB_NOOVERWRITE DB_NOSERVER_ID DB_ODDFILESIZE
- DB_OLD_VERSION DB_OPEN_CALLED DB_RECORDCOUNT DB_RECORD_LOCK DB_REGION_ANON
- DB_REGION_INIT DB_REGION_NAME DB_RENAMEMAGIC DB_REP_NEWSITE DB_REP_UNAVAIL
- DB_REVSPLITOFF DB_RUNRECOVERY DB_SET_TXN_NOW DB_USE_ENVIRON DB_WRITECURSOR
- DB_XIDDATASIZE */
+ DB_ARCH_REMOVE DB_AUTO_COMMIT DB_BTREEOLDVER DB_CHKSUM_SHA1 DB_EID_INVALID
+ DB_ENCRYPT_AES DB_ENV_APPINIT DB_ENV_DBLOCAL DB_ENV_LOCKING DB_ENV_LOGGING
+ DB_ENV_NOPANIC DB_ENV_PRIVATE DB_FILE_ID_LEN DB_HANDLE_LOCK DB_HASHVERSION
+ DB_INVALID_EID DB_JOIN_NOSORT DB_LOCKVERSION DB_LOCK_EXPIRE DB_LOCK_NOWAIT
+ DB_LOCK_OLDEST DB_LOCK_RANDOM DB_LOCK_RECORD DB_LOCK_REMOVE DB_LOCK_SWITCH
+ DB_MAX_RECORDS DB_MPOOL_CLEAN DB_MPOOL_DIRTY DB_NOOVERWRITE DB_NOSERVER_ID
+ DB_ODDFILESIZE DB_OLD_VERSION DB_OPEN_CALLED DB_RECORDCOUNT DB_RECORD_LOCK
+ DB_REGION_ANON DB_REGION_INIT DB_REGION_NAME DB_RENAMEMAGIC DB_REP_NEWSITE
+ DB_REP_NOTPERM DB_REP_UNAVAIL DB_REVSPLITOFF DB_RUNRECOVERY DB_SET_TXN_NOW
+ DB_USE_ENVIRON DB_WRITECURSOR DB_XIDDATASIZE */
/* Offset 9 gives the best switch position. */
switch (name[9]) {
case 'A':
@@ -1938,6 +2055,15 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
}
break;
case 'E':
+ if (memEQ(name, "DB_ARCH_REMOVE", 14)) {
+ /* ^ */
+#ifdef DB_ARCH_REMOVE
+ *iv_return = DB_ARCH_REMOVE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
if (memEQ(name, "DB_LOCK_RECORD", 14)) {
/* ^ */
#ifdef DB_LOCK_RECORD
@@ -2154,6 +2280,15 @@ constant_14 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_NOTPERM", 14)) {
+ /* ^ */
+#ifdef DB_REP_NOTPERM
+ *iv_return = DB_REP_NOTPERM;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'U':
if (memEQ(name, "DB_WRITECURSOR", 14)) {
@@ -2293,9 +2428,10 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
DB_APPLY_LOGREG DB_BTREEVERSION DB_CONSUME_WAIT DB_ENV_LOCKDOWN
DB_ENV_PANIC_OK DB_ENV_YIELDCPU DB_LOCK_DEFAULT DB_LOCK_INHERIT
DB_LOCK_NOTHELD DB_LOCK_PUT_ALL DB_LOCK_PUT_OBJ DB_LOCK_TIMEOUT
- DB_LOCK_UPGRADE DB_MPOOL_CREATE DB_MPOOL_EXTENT DB_MULTIPLE_KEY
- DB_OPFLAGS_MASK DB_ORDERCHKONLY DB_PRIORITY_LOW DB_REGION_MAGIC
- DB_REP_LOGSONLY DB_REP_OUTDATED DB_SURPRISE_KID DB_TEST_POSTLOG
+ DB_LOCK_UPGRADE DB_LOG_WRNOSYNC DB_MPOOL_CREATE DB_MPOOL_EXTENT
+ DB_MPOOL_NOFILE DB_MPOOL_UNLINK DB_MULTIPLE_KEY DB_OPFLAGS_MASK
+ DB_ORDERCHKONLY DB_PRIORITY_LOW DB_REGION_MAGIC DB_REP_LOGSONLY
+ DB_REP_NOBUFFER DB_REP_OUTDATED DB_SURPRISE_KID DB_TEST_POSTLOG
DB_TEST_PREOPEN DB_TXN_GETPGNOS DB_TXN_LOCK_2PL DB_TXN_LOG_MASK
DB_TXN_LOG_REDO DB_TXN_LOG_UNDO DB_VERIFY_FATAL */
/* Offset 10 gives the best switch position. */
@@ -2459,6 +2595,17 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'N':
+ if (memEQ(name, "DB_MPOOL_UNLINK", 15)) {
+ /* ^ */
+#ifdef DB_MPOOL_UNLINK
+ *iv_return = DB_MPOOL_UNLINK;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'O':
if (memEQ(name, "DB_APPLY_LOGREG", 15)) {
/* ^ */
@@ -2469,6 +2616,24 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_LOG_WRNOSYNC", 15)) {
+ /* ^ */
+#ifdef DB_LOG_WRNOSYNC
+ *iv_return = DB_LOG_WRNOSYNC;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_MPOOL_NOFILE", 15)) {
+ /* ^ */
+#ifdef DB_MPOOL_NOFILE
+ *iv_return = DB_MPOOL_NOFILE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'P':
if (memEQ(name, "DB_TXN_GETPGNOS", 15)) {
@@ -2559,6 +2724,17 @@ constant_15 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'U':
+ if (memEQ(name, "DB_REP_NOBUFFER", 15)) {
+ /* ^ */
+#ifdef DB_REP_NOBUFFER
+ *iv_return = DB_REP_NOBUFFER;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'X':
if (memEQ(name, "DB_MPOOL_EXTENT", 15)) {
/* ^ */
@@ -3076,24 +3252,25 @@ constant_17 (pTHX_ const char *name, IV *iv_return, const char **pv_return) {
here. However, subsequent manual editing may have added or removed some.
DB_ENV_DIRECT_LOG DB_ENV_REP_CLIENT DB_ENV_REP_MASTER DB_ENV_STANDALONE
DB_ENV_SYSTEM_MEM DB_ENV_TXN_NOSYNC DB_ENV_USER_ALLOC DB_GET_BOTH_RANGE
- DB_LOG_SILENT_ERR DB_RPC_SERVERPROG DB_RPC_SERVERVERS DB_TEST_ELECTINIT
- DB_TEST_ELECTSEND DB_TEST_PRERENAME DB_TXN_POPENFILES DB_VERSION_STRING */
- /* Offset 14 gives the best switch position. */
- switch (name[14]) {
+ DB_LOG_AUTOREMOVE DB_LOG_SILENT_ERR DB_NO_AUTO_COMMIT DB_RPC_SERVERPROG
+ DB_RPC_SERVERVERS DB_TEST_ELECTINIT DB_TEST_ELECTSEND DB_TEST_PRERENAME
+ DB_TXN_POPENFILES DB_VERSION_STRING */
+ /* Offset 13 gives the best switch position. */
+ switch (name[13]) {
case 'A':
- if (memEQ(name, "DB_TEST_PRERENAME", 17)) {
- /* ^ */
-#ifdef DB_TEST_PRERENAME
- *iv_return = DB_TEST_PRERENAME;
+ if (memEQ(name, "DB_GET_BOTH_RANGE", 17)) {
+ /* ^ */
+#ifdef DB_GET_BOTH_RANGE
+ *iv_return = DB_GET_BOTH_RANGE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'E':
+ case 'I':
if (memEQ(name, "DB_ENV_REP_CLIENT", 17)) {
- /* ^ */
+ /* ^ */
#ifdef DB_ENV_REP_CLIENT
*iv_return = DB_ENV_REP_CLIENT;
return PERL_constant_ISIV;
@@ -3101,146 +3278,164 @@ constant_17 (pTHX_ const char *name, IV *iv_return, const char **pv_return) {
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_LOG_SILENT_ERR", 17)) {
- /* ^ */
-#ifdef DB_LOG_SILENT_ERR
- *iv_return = DB_LOG_SILENT_ERR;
+ if (memEQ(name, "DB_TEST_ELECTINIT", 17)) {
+ /* ^ */
+#ifdef DB_TEST_ELECTINIT
+ *iv_return = DB_TEST_ELECTINIT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_RPC_SERVERVERS", 17)) {
- /* ^ */
-#ifdef DB_RPC_SERVERVERS
- *iv_return = DB_RPC_SERVERVERS;
+ if (memEQ(name, "DB_TXN_POPENFILES", 17)) {
+ /* ^ */
+#if (DB_VERSION_MAJOR > 3) || \
+ (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR > 3) || \
+ (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR == 3 && \
+ DB_VERSION_PATCH >= 4)
+ *iv_return = DB_TXN_POPENFILES;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TEST_ELECTSEND", 17)) {
- /* ^ */
-#ifdef DB_TEST_ELECTSEND
- *iv_return = DB_TEST_ELECTSEND;
+ break;
+ case 'L':
+ if (memEQ(name, "DB_ENV_STANDALONE", 17)) {
+ /* ^ */
+#ifdef DB_ENV_STANDALONE
+ *iv_return = DB_ENV_STANDALONE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'I':
- if (memEQ(name, "DB_VERSION_STRING", 17)) {
- /* ^ */
-#ifdef DB_VERSION_STRING
- *pv_return = DB_VERSION_STRING;
- return PERL_constant_ISPV;
+ if (memEQ(name, "DB_ENV_USER_ALLOC", 17)) {
+ /* ^ */
+#ifdef DB_ENV_USER_ALLOC
+ *iv_return = DB_ENV_USER_ALLOC;
+ return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'L':
- if (memEQ(name, "DB_ENV_DIRECT_LOG", 17)) {
- /* ^ */
-#ifdef DB_ENV_DIRECT_LOG
- *iv_return = DB_ENV_DIRECT_LOG;
+ case 'M':
+ if (memEQ(name, "DB_LOG_AUTOREMOVE", 17)) {
+ /* ^ */
+#ifdef DB_LOG_AUTOREMOVE
+ *iv_return = DB_LOG_AUTOREMOVE;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_ENV_USER_ALLOC", 17)) {
- /* ^ */
-#ifdef DB_ENV_USER_ALLOC
- *iv_return = DB_ENV_USER_ALLOC;
+ if (memEQ(name, "DB_NO_AUTO_COMMIT", 17)) {
+ /* ^ */
+#ifdef DB_NO_AUTO_COMMIT
+ *iv_return = DB_NO_AUTO_COMMIT;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TXN_POPENFILES", 17)) {
- /* ^ */
-#if (DB_VERSION_MAJOR > 3) || \
- (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR > 3) || \
- (DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR == 3 && \
- DB_VERSION_PATCH >= 4)
- *iv_return = DB_TXN_POPENFILES;
+ break;
+ case 'N':
+ if (memEQ(name, "DB_TEST_PRERENAME", 17)) {
+ /* ^ */
+#ifdef DB_TEST_PRERENAME
+ *iv_return = DB_TEST_PRERENAME;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'M':
- if (memEQ(name, "DB_ENV_SYSTEM_MEM", 17)) {
- /* ^ */
-#ifdef DB_ENV_SYSTEM_MEM
- *iv_return = DB_ENV_SYSTEM_MEM;
+ case 'P':
+ if (memEQ(name, "DB_RPC_SERVERPROG", 17)) {
+ /* ^ */
+#ifdef DB_RPC_SERVERPROG
+ *iv_return = DB_RPC_SERVERPROG;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'N':
- if (memEQ(name, "DB_GET_BOTH_RANGE", 17)) {
- /* ^ */
-#ifdef DB_GET_BOTH_RANGE
- *iv_return = DB_GET_BOTH_RANGE;
+ case 'R':
+ if (memEQ(name, "DB_VERSION_STRING", 17)) {
+ /* ^ */
+#ifdef DB_VERSION_STRING
+ *pv_return = DB_VERSION_STRING;
+ return PERL_constant_ISPV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'S':
+ if (memEQ(name, "DB_ENV_REP_MASTER", 17)) {
+ /* ^ */
+#ifdef DB_ENV_REP_MASTER
+ *iv_return = DB_ENV_REP_MASTER;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- if (memEQ(name, "DB_TEST_ELECTINIT", 17)) {
- /* ^ */
-#ifdef DB_TEST_ELECTINIT
- *iv_return = DB_TEST_ELECTINIT;
+ if (memEQ(name, "DB_ENV_TXN_NOSYNC", 17)) {
+ /* ^ */
+#ifdef DB_ENV_TXN_NOSYNC
+ *iv_return = DB_ENV_TXN_NOSYNC;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'O':
- if (memEQ(name, "DB_ENV_STANDALONE", 17)) {
- /* ^ */
-#ifdef DB_ENV_STANDALONE
- *iv_return = DB_ENV_STANDALONE;
+ if (memEQ(name, "DB_TEST_ELECTSEND", 17)) {
+ /* ^ */
+#ifdef DB_TEST_ELECTSEND
+ *iv_return = DB_TEST_ELECTSEND;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'R':
- if (memEQ(name, "DB_RPC_SERVERPROG", 17)) {
- /* ^ */
-#ifdef DB_RPC_SERVERPROG
- *iv_return = DB_RPC_SERVERPROG;
+ case 'V':
+ if (memEQ(name, "DB_RPC_SERVERVERS", 17)) {
+ /* ^ */
+#ifdef DB_RPC_SERVERVERS
+ *iv_return = DB_RPC_SERVERVERS;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'T':
- if (memEQ(name, "DB_ENV_REP_MASTER", 17)) {
- /* ^ */
-#ifdef DB_ENV_REP_MASTER
- *iv_return = DB_ENV_REP_MASTER;
+ case '_':
+ if (memEQ(name, "DB_ENV_DIRECT_LOG", 17)) {
+ /* ^ */
+#ifdef DB_ENV_DIRECT_LOG
+ *iv_return = DB_ENV_DIRECT_LOG;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
- break;
- case 'Y':
- if (memEQ(name, "DB_ENV_TXN_NOSYNC", 17)) {
- /* ^ */
-#ifdef DB_ENV_TXN_NOSYNC
- *iv_return = DB_ENV_TXN_NOSYNC;
+ if (memEQ(name, "DB_ENV_SYSTEM_MEM", 17)) {
+ /* ^ */
+#ifdef DB_ENV_SYSTEM_MEM
+ *iv_return = DB_ENV_SYSTEM_MEM;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_LOG_SILENT_ERR", 17)) {
+ /* ^ */
+#ifdef DB_LOG_SILENT_ERR
+ *iv_return = DB_LOG_SILENT_ERR;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -3256,10 +3451,12 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
/* When generated this function returned values for the list of names given
here. However, subsequent manual editing may have added or removed some.
DB_ALREADY_ABORTED DB_ENV_AUTO_COMMIT DB_ENV_OPEN_CALLED
- DB_ENV_REGION_INIT DB_LOCK_NOTGRANTED DB_MPOOL_NEW_GROUP
- DB_PR_RECOVERYTEST DB_SET_TXN_TIMEOUT DB_TEST_ELECTVOTE1
- DB_TEST_ELECTVOTE2 DB_TEST_ELECTWAIT1 DB_TEST_ELECTWAIT2
- DB_TEST_POSTRENAME DB_TEST_PREDESTROY DB_TEST_PREEXTOPEN */
+ DB_ENV_REGION_INIT DB_LOCK_NOTGRANTED DB_LOG_NOT_DURABLE
+ DB_MPOOL_NEW_GROUP DB_PR_RECOVERYTEST DB_REP_HANDLE_DEAD
+ DB_SET_TXN_TIMEOUT DB_TEST_ELECTVOTE1 DB_TEST_ELECTVOTE2
+ DB_TEST_ELECTWAIT1 DB_TEST_ELECTWAIT2 DB_TEST_POSTRENAME
+ DB_TEST_PREDESTROY DB_TEST_PREEXTOPEN DB_TIME_NOTGRANTED
+ DB_TXN_NOT_DURABLE */
/* Offset 13 gives the best switch position. */
switch (name[13]) {
case 'A':
@@ -3281,6 +3478,15 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_TIME_NOTGRANTED", 18)) {
+ /* ^ */
+#ifdef DB_TIME_NOTGRANTED
+ *iv_return = DB_TIME_NOTGRANTED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
case 'E':
if (memEQ(name, "DB_TEST_POSTRENAME", 18)) {
@@ -3335,6 +3541,26 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
#endif
}
break;
+ case 'R':
+ if (memEQ(name, "DB_LOG_NOT_DURABLE", 18)) {
+ /* ^ */
+#ifdef DB_LOG_NOT_DURABLE
+ *iv_return = DB_LOG_NOT_DURABLE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ if (memEQ(name, "DB_TXN_NOT_DURABLE", 18)) {
+ /* ^ */
+#ifdef DB_TXN_NOT_DURABLE
+ *iv_return = DB_TXN_NOT_DURABLE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
case 'S':
if (memEQ(name, "DB_TEST_PREDESTROY", 18)) {
/* ^ */
@@ -3418,6 +3644,15 @@ constant_18 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_REP_HANDLE_DEAD", 18)) {
+ /* ^ */
+#ifdef DB_REP_HANDLE_DEAD
+ *iv_return = DB_REP_HANDLE_DEAD;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
}
return PERL_constant_NOTFOUND;
@@ -3743,49 +3978,52 @@ static int
constant_21 (pTHX_ const char *name, IV *iv_return) {
/* When generated this function returned values for the list of names given
here. However, subsequent manual editing may have added or removed some.
- DB_LOCK_UPGRADE_WRITE DB_PRIORITY_VERY_HIGH DB_TEST_POSTEXTDELETE
- DB_TEST_POSTEXTUNLINK DB_TXN_BACKWARD_ALLOC */
- /* Offset 16 gives the best switch position. */
- switch (name[16]) {
- case 'A':
- if (memEQ(name, "DB_TXN_BACKWARD_ALLOC", 21)) {
- /* ^ */
+ DB_ENV_LOG_AUTOREMOVE DB_LOCK_UPGRADE_WRITE DB_PRIORITY_VERY_HIGH
+ DB_TEST_POSTEXTDELETE DB_TEST_POSTEXTUNLINK DB_TXN_BACKWARD_ALLOC */
+ /* Offset 19 gives the best switch position. */
+ switch (name[19]) {
+ case 'G':
+ if (memEQ(name, "DB_PRIORITY_VERY_HIGH", 21)) {
+ /* ^ */
#if (DB_VERSION_MAJOR > 4) || \
(DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 1) || \
(DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 1 && \
DB_VERSION_PATCH >= 17)
- *iv_return = DB_TXN_BACKWARD_ALLOC;
+ *iv_return = DB_PRIORITY_VERY_HIGH;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'E':
- if (memEQ(name, "DB_TEST_POSTEXTDELETE", 21)) {
- /* ^ */
-#ifdef DB_TEST_POSTEXTDELETE
- *iv_return = DB_TEST_POSTEXTDELETE;
+ case 'N':
+ if (memEQ(name, "DB_TEST_POSTEXTUNLINK", 21)) {
+ /* ^ */
+#ifdef DB_TEST_POSTEXTUNLINK
+ *iv_return = DB_TEST_POSTEXTUNLINK;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'N':
- if (memEQ(name, "DB_TEST_POSTEXTUNLINK", 21)) {
- /* ^ */
-#ifdef DB_TEST_POSTEXTUNLINK
- *iv_return = DB_TEST_POSTEXTUNLINK;
+ case 'O':
+ if (memEQ(name, "DB_TXN_BACKWARD_ALLOC", 21)) {
+ /* ^ */
+#if (DB_VERSION_MAJOR > 4) || \
+ (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 1) || \
+ (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 1 && \
+ DB_VERSION_PATCH >= 17)
+ *iv_return = DB_TXN_BACKWARD_ALLOC;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
#endif
}
break;
- case 'W':
+ case 'T':
if (memEQ(name, "DB_LOCK_UPGRADE_WRITE", 21)) {
- /* ^ */
+ /* ^ */
#if (DB_VERSION_MAJOR > 3) || \
(DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR > 3) || \
(DB_VERSION_MAJOR == 3 && DB_VERSION_MINOR == 3 && \
@@ -3796,15 +4034,77 @@ constant_21 (pTHX_ const char *name, IV *iv_return) {
return PERL_constant_NOTDEF;
#endif
}
+ if (memEQ(name, "DB_TEST_POSTEXTDELETE", 21)) {
+ /* ^ */
+#ifdef DB_TEST_POSTEXTDELETE
+ *iv_return = DB_TEST_POSTEXTDELETE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
break;
- case '_':
- if (memEQ(name, "DB_PRIORITY_VERY_HIGH", 21)) {
- /* ^ */
-#if (DB_VERSION_MAJOR > 4) || \
- (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR > 1) || \
- (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR == 1 && \
- DB_VERSION_PATCH >= 17)
- *iv_return = DB_PRIORITY_VERY_HIGH;
+ case 'V':
+ if (memEQ(name, "DB_ENV_LOG_AUTOREMOVE", 21)) {
+ /* ^ */
+#ifdef DB_ENV_LOG_AUTOREMOVE
+ *iv_return = DB_ENV_LOG_AUTOREMOVE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ }
+ return PERL_constant_NOTFOUND;
+}
+
+static int
+constant_22 (pTHX_ const char *name, IV *iv_return) {
+ /* When generated this function returned values for the list of names given
+ here. However, subsequent manual editing may have added or removed some.
+ DB_ENV_RPCCLIENT_GIVEN DB_ENV_TIME_NOTGRANTED DB_ENV_TXN_NOT_DURABLE
+ DB_TXN_LOCK_OPTIMISTIC */
+ /* Offset 21 gives the best switch position. */
+ switch (name[21]) {
+ case 'C':
+ if (memEQ(name, "DB_TXN_LOCK_OPTIMISTIC", 22)) {
+ /* ^ */
+#ifdef DB_TXN_LOCK_OPTIMISTIC
+ *iv_return = DB_TXN_LOCK_OPTIMISTIC;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'D':
+ if (memEQ(name, "DB_ENV_TIME_NOTGRANTED", 22)) {
+ /* ^ */
+#ifdef DB_ENV_TIME_NOTGRANTED
+ *iv_return = DB_ENV_TIME_NOTGRANTED;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'E':
+ if (memEQ(name, "DB_ENV_TXN_NOT_DURABLE", 22)) {
+ /* ^ */
+#ifdef DB_ENV_TXN_NOT_DURABLE
+ *iv_return = DB_ENV_TXN_NOT_DURABLE;
+ return PERL_constant_ISIV;
+#else
+ return PERL_constant_NOTDEF;
+#endif
+ }
+ break;
+ case 'N':
+ if (memEQ(name, "DB_ENV_RPCCLIENT_GIVEN", 22)) {
+ /* ^ */
+#ifdef DB_ENV_RPCCLIENT_GIVEN
+ *iv_return = DB_ENV_RPCCLIENT_GIVEN;
return PERL_constant_ISIV;
#else
return PERL_constant_NOTDEF;
@@ -3828,54 +4128,59 @@ constant (pTHX_ const char *name, STRLEN len, IV *iv_return, const char **pv_ret
Regenerate these constant functions by feeding this entire source file to
perl -x
-#!/home/paul/perl/install/redhat6.1/5.8.0/bin/perl5.8.0 -w
+#!/usr/bin/perl5.8.0 -w
use ExtUtils::Constant qw (constant_types C_constant XS_constant);
my $types = {map {($_, 1)} qw(IV PV)};
my @names = (qw(DB_AFTER DB_AGGRESSIVE DB_ALREADY_ABORTED DB_APPEND
DB_APPLY_LOGREG DB_APP_INIT DB_ARCH_ABS DB_ARCH_DATA DB_ARCH_LOG
- DB_AUTO_COMMIT DB_BEFORE DB_BROADCAST_EID DB_BTREEMAGIC
- DB_BTREEOLDVER DB_BTREEVERSION DB_CACHED_COUNTS DB_CDB_ALLDB
- DB_CHECKPOINT DB_CHKSUM_SHA1 DB_CLIENT DB_CL_WRITER DB_COMMIT
- DB_CONSUME DB_CONSUME_WAIT DB_CREATE DB_CURLSN DB_CURRENT
- DB_CXX_NO_EXCEPTIONS DB_DELETED DB_DELIMITER DB_DIRECT
- DB_DIRECT_DB DB_DIRECT_LOG DB_DIRTY_READ DB_DONOTINDEX DB_DUP
- DB_DUPCURSOR DB_DUPSORT DB_EID_BROADCAST DB_EID_INVALID
- DB_ENCRYPT DB_ENCRYPT_AES DB_ENV_APPINIT DB_ENV_AUTO_COMMIT
- DB_ENV_CDB DB_ENV_CDB_ALLDB DB_ENV_CREATE DB_ENV_DBLOCAL
- DB_ENV_DIRECT_DB DB_ENV_DIRECT_LOG DB_ENV_FATAL DB_ENV_LOCKDOWN
- DB_ENV_LOCKING DB_ENV_LOGGING DB_ENV_NOLOCKING DB_ENV_NOMMAP
+ DB_ARCH_REMOVE DB_AUTO_COMMIT DB_BEFORE DB_BROADCAST_EID
+ DB_BTREEMAGIC DB_BTREEOLDVER DB_BTREEVERSION DB_CACHED_COUNTS
+ DB_CDB_ALLDB DB_CHECKPOINT DB_CHKSUM DB_CHKSUM_SHA1 DB_CLIENT
+ DB_CL_WRITER DB_COMMIT DB_CONSUME DB_CONSUME_WAIT DB_CREATE
+ DB_CURLSN DB_CURRENT DB_CXX_NO_EXCEPTIONS DB_DELETED
+ DB_DELIMITER DB_DIRECT DB_DIRECT_DB DB_DIRECT_LOG DB_DIRTY_READ
+ DB_DONOTINDEX DB_DUP DB_DUPCURSOR DB_DUPSORT DB_EID_BROADCAST
+ DB_EID_INVALID DB_ENCRYPT DB_ENCRYPT_AES DB_ENV_APPINIT
+ DB_ENV_AUTO_COMMIT DB_ENV_CDB DB_ENV_CDB_ALLDB DB_ENV_CREATE
+ DB_ENV_DBLOCAL DB_ENV_DIRECT_DB DB_ENV_DIRECT_LOG DB_ENV_FATAL
+ DB_ENV_LOCKDOWN DB_ENV_LOCKING DB_ENV_LOGGING
+ DB_ENV_LOG_AUTOREMOVE DB_ENV_NOLOCKING DB_ENV_NOMMAP
DB_ENV_NOPANIC DB_ENV_OPEN_CALLED DB_ENV_OVERWRITE
DB_ENV_PANIC_OK DB_ENV_PRIVATE DB_ENV_REGION_INIT
DB_ENV_REP_CLIENT DB_ENV_REP_LOGSONLY DB_ENV_REP_MASTER
DB_ENV_RPCCLIENT DB_ENV_RPCCLIENT_GIVEN DB_ENV_STANDALONE
- DB_ENV_SYSTEM_MEM DB_ENV_THREAD DB_ENV_TXN DB_ENV_TXN_NOSYNC
+ DB_ENV_SYSTEM_MEM DB_ENV_THREAD DB_ENV_TIME_NOTGRANTED
+ DB_ENV_TXN DB_ENV_TXN_NOSYNC DB_ENV_TXN_NOT_DURABLE
DB_ENV_TXN_WRITE_NOSYNC DB_ENV_USER_ALLOC DB_ENV_YIELDCPU
- DB_EXCL DB_EXTENT DB_FAST_STAT DB_FCNTL_LOCKING DB_FILE_ID_LEN
- DB_FIRST DB_FIXEDLEN DB_FLUSH DB_FORCE DB_GETREC DB_GET_BOTH
- DB_GET_BOTHC DB_GET_BOTH_RANGE DB_GET_RECNO DB_HANDLE_LOCK
- DB_HASHMAGIC DB_HASHOLDVER DB_HASHVERSION DB_INCOMPLETE
- DB_INIT_CDB DB_INIT_LOCK DB_INIT_LOG DB_INIT_MPOOL DB_INIT_TXN
- DB_INVALID_EID DB_JAVA_CALLBACK DB_JOINENV DB_JOIN_ITEM
- DB_JOIN_NOSORT DB_KEYEMPTY DB_KEYEXIST DB_KEYFIRST DB_KEYLAST
- DB_LAST DB_LOCKDOWN DB_LOCKMAGIC DB_LOCKVERSION DB_LOCK_CONFLICT
- DB_LOCK_DEADLOCK DB_LOCK_DEFAULT DB_LOCK_EXPIRE
- DB_LOCK_FREE_LOCKER DB_LOCK_MAXLOCKS DB_LOCK_MINLOCKS
- DB_LOCK_MINWRITE DB_LOCK_NORUN DB_LOCK_NOTEXIST
+ DB_EXCL DB_EXTENT DB_FAST_STAT DB_FCNTL_LOCKING DB_FILEOPEN
+ DB_FILE_ID_LEN DB_FIRST DB_FIXEDLEN DB_FLUSH DB_FORCE DB_GETREC
+ DB_GET_BOTH DB_GET_BOTHC DB_GET_BOTH_RANGE DB_GET_RECNO
+ DB_HANDLE_LOCK DB_HASHMAGIC DB_HASHOLDVER DB_HASHVERSION
+ DB_INCOMPLETE DB_INIT_CDB DB_INIT_LOCK DB_INIT_LOG DB_INIT_MPOOL
+ DB_INIT_REP DB_INIT_TXN DB_INVALID_EID DB_JAVA_CALLBACK
+ DB_JOINENV DB_JOIN_ITEM DB_JOIN_NOSORT DB_KEYEMPTY DB_KEYEXIST
+ DB_KEYFIRST DB_KEYLAST DB_LAST DB_LOCKDOWN DB_LOCKMAGIC
+ DB_LOCKVERSION DB_LOCK_CONFLICT DB_LOCK_DEADLOCK DB_LOCK_DEFAULT
+ DB_LOCK_EXPIRE DB_LOCK_FREE_LOCKER DB_LOCK_MAXLOCKS
+ DB_LOCK_MINLOCKS DB_LOCK_MINWRITE DB_LOCK_NORUN DB_LOCK_NOTEXIST
DB_LOCK_NOTGRANTED DB_LOCK_NOTHELD DB_LOCK_NOWAIT DB_LOCK_OLDEST
DB_LOCK_RANDOM DB_LOCK_RECORD DB_LOCK_REMOVE DB_LOCK_RIW_N
DB_LOCK_RW_N DB_LOCK_SET_TIMEOUT DB_LOCK_SWITCH DB_LOCK_UPGRADE
DB_LOCK_YOUNGEST DB_LOGC_BUF_SIZE DB_LOGFILEID_INVALID
- DB_LOGMAGIC DB_LOGOLDVER DB_LOGVERSION DB_LOG_DISK DB_LOG_LOCKED
- DB_LOG_SILENT_ERR DB_MAX_PAGES DB_MAX_RECORDS DB_MPOOL_CLEAN
+ DB_LOGMAGIC DB_LOGOLDVER DB_LOGVERSION DB_LOG_AUTOREMOVE
+ DB_LOG_CHKPNT DB_LOG_COMMIT DB_LOG_DISK DB_LOG_LOCKED
+ DB_LOG_NOCOPY DB_LOG_NOT_DURABLE DB_LOG_PERM DB_LOG_SILENT_ERR
+ DB_LOG_WRNOSYNC DB_MAX_PAGES DB_MAX_RECORDS DB_MPOOL_CLEAN
DB_MPOOL_CREATE DB_MPOOL_DIRTY DB_MPOOL_DISCARD DB_MPOOL_EXTENT
- DB_MPOOL_LAST DB_MPOOL_NEW DB_MPOOL_NEW_GROUP DB_MPOOL_PRIVATE
- DB_MULTIPLE DB_MULTIPLE_KEY DB_MUTEXDEBUG DB_MUTEXLOCKS
- DB_NEEDSPLIT DB_NEXT DB_NEXT_DUP DB_NEXT_NODUP DB_NOCOPY
- DB_NODUPDATA DB_NOLOCKING DB_NOMMAP DB_NOORDERCHK DB_NOOVERWRITE
- DB_NOPANIC DB_NORECURSE DB_NOSERVER DB_NOSERVER_HOME
- DB_NOSERVER_ID DB_NOSYNC DB_NOTFOUND DB_ODDFILESIZE DB_OK_BTREE
- DB_OK_HASH DB_OK_QUEUE DB_OK_RECNO DB_OLD_VERSION DB_OPEN_CALLED
+ DB_MPOOL_LAST DB_MPOOL_NEW DB_MPOOL_NEW_GROUP DB_MPOOL_NOFILE
+ DB_MPOOL_PRIVATE DB_MPOOL_UNLINK DB_MULTIPLE DB_MULTIPLE_KEY
+ DB_MUTEXDEBUG DB_MUTEXLOCKS DB_NEEDSPLIT DB_NEXT DB_NEXT_DUP
+ DB_NEXT_NODUP DB_NOCOPY DB_NODUPDATA DB_NOLOCKING DB_NOMMAP
+ DB_NOORDERCHK DB_NOOVERWRITE DB_NOPANIC DB_NORECURSE DB_NOSERVER
+ DB_NOSERVER_HOME DB_NOSERVER_ID DB_NOSYNC DB_NOTFOUND
+ DB_NO_AUTO_COMMIT DB_ODDFILESIZE DB_OK_BTREE DB_OK_HASH
+ DB_OK_QUEUE DB_OK_RECNO DB_OLD_VERSION DB_OPEN_CALLED
DB_OPFLAGS_MASK DB_ORDERCHKONLY DB_OVERWRITE DB_PAD DB_PAGEYIELD
DB_PAGE_LOCK DB_PAGE_NOTFOUND DB_PANIC_ENVIRONMENT DB_PERMANENT
DB_POSITION DB_POSITIONI DB_PREV DB_PREV_NODUP DB_PRINTABLE
@@ -3884,11 +4189,12 @@ my @names = (qw(DB_AFTER DB_AGGRESSIVE DB_ALREADY_ABORTED DB_APPEND
DB_RECNUM DB_RECORDCOUNT DB_RECORD_LOCK DB_RECOVER
DB_RECOVER_FATAL DB_REGION_ANON DB_REGION_INIT DB_REGION_MAGIC
DB_REGION_NAME DB_REGISTERED DB_RENAMEMAGIC DB_RENUMBER
- DB_REP_CLIENT DB_REP_DUPMASTER DB_REP_HOLDELECTION
- DB_REP_LOGSONLY DB_REP_MASTER DB_REP_NEWMASTER DB_REP_NEWSITE
+ DB_REP_CLIENT DB_REP_CREATE DB_REP_DUPMASTER DB_REP_HANDLE_DEAD
+ DB_REP_HOLDELECTION DB_REP_ISPERM DB_REP_LOGSONLY DB_REP_MASTER
+ DB_REP_NEWMASTER DB_REP_NEWSITE DB_REP_NOBUFFER DB_REP_NOTPERM
DB_REP_OUTDATED DB_REP_PERMANENT DB_REP_UNAVAIL DB_REVSPLITOFF
- DB_RMW DB_RPC_SERVERPROG DB_RPC_SERVERVERS DB_RUNRECOVERY
- DB_SALVAGE DB_SECONDARY_BAD DB_SEQUENTIAL DB_SET
+ DB_RMW DB_RPCCLIENT DB_RPC_SERVERPROG DB_RPC_SERVERVERS
+ DB_RUNRECOVERY DB_SALVAGE DB_SECONDARY_BAD DB_SEQUENTIAL DB_SET
DB_SET_LOCK_TIMEOUT DB_SET_RANGE DB_SET_RECNO DB_SET_TXN_NOW
DB_SET_TXN_TIMEOUT DB_SNAPSHOT DB_STAT_CLEAR DB_SURPRISE_KID
DB_SWAPBYTES DB_SYSTEM_MEM DB_TEMPORARY DB_TEST_ELECTINIT
@@ -3899,18 +4205,20 @@ my @names = (qw(DB_AFTER DB_AGGRESSIVE DB_ALREADY_ABORTED DB_APPEND
DB_TEST_POSTRENAME DB_TEST_POSTSYNC DB_TEST_PREDESTROY
DB_TEST_PREEXTDELETE DB_TEST_PREEXTOPEN DB_TEST_PREEXTUNLINK
DB_TEST_PREOPEN DB_TEST_PRERENAME DB_TEST_SUBDB_LOCKS DB_THREAD
- DB_TIMEOUT DB_TRUNCATE DB_TXNMAGIC DB_TXNVERSION DB_TXN_CKP
- DB_TXN_LOCK DB_TXN_LOCK_2PL DB_TXN_LOCK_MASK
- DB_TXN_LOCK_OPTIMIST DB_TXN_LOCK_OPTIMISTIC DB_TXN_LOG_MASK
- DB_TXN_LOG_REDO DB_TXN_LOG_UNDO DB_TXN_LOG_UNDOREDO
- DB_TXN_NOSYNC DB_TXN_NOWAIT DB_TXN_REDO DB_TXN_SYNC DB_TXN_UNDO
+ DB_TIMEOUT DB_TIME_NOTGRANTED DB_TRUNCATE DB_TXNMAGIC
+ DB_TXNVERSION DB_TXN_CKP DB_TXN_LOCK DB_TXN_LOCK_2PL
+ DB_TXN_LOCK_MASK DB_TXN_LOCK_OPTIMIST DB_TXN_LOCK_OPTIMISTIC
+ DB_TXN_LOG_MASK DB_TXN_LOG_REDO DB_TXN_LOG_UNDO
+ DB_TXN_LOG_UNDOREDO DB_TXN_NOSYNC DB_TXN_NOT_DURABLE
+ DB_TXN_NOWAIT DB_TXN_REDO DB_TXN_SYNC DB_TXN_UNDO
DB_TXN_WRITE_NOSYNC DB_UNRESOLVED_CHILD DB_UPDATE_SECONDARY
DB_UPGRADE DB_USE_ENVIRON DB_USE_ENVIRON_ROOT DB_VERB_CHKPOINT
DB_VERB_DEADLOCK DB_VERB_RECOVERY DB_VERB_REPLICATION
DB_VERB_WAITSFOR DB_VERIFY DB_VERIFY_BAD DB_VERIFY_FATAL
DB_VERSION_MAJOR DB_VERSION_MINOR DB_VERSION_PATCH
DB_VRFY_FLAGMASK DB_WRITECURSOR DB_WRITELOCK DB_WRITEOPEN
- DB_WRNOSYNC DB_XA_CREATE DB_XIDDATASIZE DB_YIELDCPU),
+ DB_WRNOSYNC DB_XA_CREATE DB_XIDDATASIZE DB_YIELDCPU
+ DB_debug_FLAG DB_user_BEGIN),
{name=>"DB_BTREE", type=>"IV", macro=>["#if (DB_VERSION_MAJOR > 2) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 0) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && \\\n DB_VERSION_PATCH >= 0)\n", "#endif\n"]},
{name=>"DB_HASH", type=>"IV", macro=>["#if (DB_VERSION_MAJOR > 2) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 0) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && \\\n DB_VERSION_PATCH >= 0)\n", "#endif\n"]},
{name=>"DB_LOCK_DUMP", type=>"IV", macro=>["#if (DB_VERSION_MAJOR > 2) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR > 0) || \\\n (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && \\\n DB_VERSION_PATCH >= 0)\n", "#endif\n"]},
@@ -4002,33 +4310,7 @@ __END__
return constant_21 (aTHX_ name, iv_return);
break;
case 22:
- /* Names all of length 22. */
- /* DB_ENV_RPCCLIENT_GIVEN DB_TXN_LOCK_OPTIMISTIC */
- /* Offset 8 gives the best switch position. */
- switch (name[8]) {
- case 'O':
- if (memEQ(name, "DB_TXN_LOCK_OPTIMISTIC", 22)) {
- /* ^ */
-#ifdef DB_TXN_LOCK_OPTIMISTIC
- *iv_return = DB_TXN_LOCK_OPTIMISTIC;
- return PERL_constant_ISIV;
-#else
- return PERL_constant_NOTDEF;
-#endif
- }
- break;
- case 'P':
- if (memEQ(name, "DB_ENV_RPCCLIENT_GIVEN", 22)) {
- /* ^ */
-#ifdef DB_ENV_RPCCLIENT_GIVEN
- *iv_return = DB_ENV_RPCCLIENT_GIVEN;
- return PERL_constant_ISIV;
-#else
- return PERL_constant_NOTDEF;
-#endif
- }
- break;
- }
+ return constant_22 (aTHX_ name, iv_return);
break;
case 23:
if (memEQ(name, "DB_ENV_TXN_WRITE_NOSYNC", 23)) {
diff --git a/db/perl/BerkeleyDB/dbinfo b/db/perl/BerkeleyDB/dbinfo
index af2c45fac..421d36c62 100755
--- a/db/perl/BerkeleyDB/dbinfo
+++ b/db/perl/BerkeleyDB/dbinfo
@@ -4,10 +4,10 @@
# a database file
#
# Author: Paul Marquess <Paul.Marquess@btinternet.com>
-# Version: 1.03
-# Date 17th September 2000
+# Version: 1.05
+# Date 1sh November 2003
#
-# Copyright (c) 1998-2002 Paul Marquess. All rights reserved.
+# Copyright (c) 1998-2003 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
@@ -22,39 +22,39 @@ my %Data =
Type => "Btree",
Versions =>
{
- 1 => "Unknown (older than 1.71)",
- 2 => "Unknown (older than 1.71)",
- 3 => "1.71 -> 1.85, 1.86",
- 4 => "Unknown",
- 5 => "2.0.0 -> 2.3.0",
- 6 => "2.3.1 -> 2.7.7",
- 7 => "3.0.x",
- 8 => "3.1.x -> 4.0.x",
- 9 => "4.1.x or greater",
+ 1 => [0, "Unknown (older than 1.71)"],
+ 2 => [0, "Unknown (older than 1.71)"],
+ 3 => [0, "1.71 -> 1.85, 1.86"],
+ 4 => [0, "Unknown"],
+ 5 => [0, "2.0.0 -> 2.3.0"],
+ 6 => [0, "2.3.1 -> 2.7.7"],
+ 7 => [0, "3.0.x"],
+ 8 => [0, "3.1.x -> 4.0.x"],
+ 9 => [1, "4.1.x or greater"],
}
},
0x061561 => {
Type => "Hash",
Versions =>
{
- 1 => "Unknown (older than 1.71)",
- 2 => "1.71 -> 1.85",
- 3 => "1.86",
- 4 => "2.0.0 -> 2.1.0",
- 5 => "2.2.6 -> 2.7.7",
- 6 => "3.0.x",
- 7 => "3.1.x -> 4.0.x",
- 8 => "4.1.x or greater",
+ 1 => [0, "Unknown (older than 1.71)"],
+ 2 => [0, "1.71 -> 1.85"],
+ 3 => [0, "1.86"],
+ 4 => [0, "2.0.0 -> 2.1.0"],
+ 5 => [0, "2.2.6 -> 2.7.7"],
+ 6 => [0, "3.0.x"],
+ 7 => [0, "3.1.x -> 4.0.x"],
+ 8 => [1, "4.1.x or greater"],
}
},
0x042253 => {
Type => "Queue",
Versions =>
{
- 1 => "3.0.x",
- 2 => "3.1.x",
- 3 => "3.2.x -> 4.0.x",
- 4 => "4.1.x or greater",
+ 1 => [0, "3.0.x"],
+ 2 => [0, "3.1.x"],
+ 3 => [0, "3.2.x -> 4.0.x"],
+ 4 => [1, "4.1.x or greater"],
}
},
) ;
@@ -65,17 +65,26 @@ print "testing file $ARGV[0]...\n\n" ;
open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
my $buff ;
-read F, $buff, 20 ;
+read F, $buff, 30 ;
-my (@info) = unpack("NNNNN", $buff) ;
-my (@info1) = unpack("VVVVV", $buff) ;
-my ($magic, $version, $endian) ;
-if ($Data{$info[0]}) # first try DB 1.x format
+my (@info) = unpack("NNNNNNC", $buff) ;
+my (@info1) = unpack("VVVVVVC", $buff) ;
+my ($magic, $version, $endian, $encrypt) ;
+
+if ($Data{$info[0]}) # first try DB 1.x format, big endian
{
$magic = $info[0] ;
$version = $info[1] ;
- $endian = "Unknown" ;
+ $endian = "Big Endian" ;
+ $encrypt = "Not Supported";
+}
+elsif ($Data{$info1[0]}) # first try DB 1.x format, little endian
+{
+ $magic = $info1[0] ;
+ $version = $info1[1] ;
+ $endian = "Little Endian" ;
+ $encrypt = "Not Supported";
}
elsif ($Data{$info[3]}) # next DB 2.x big endian
{
@@ -96,8 +105,15 @@ my $type = $Data{$magic} ;
$magic = sprintf "%06X", $magic ;
my $ver_string = "Unknown" ;
-$ver_string = $type->{Versions}{$version}
- if defined $type->{Versions}{$version} ;
+
+if ( defined $type->{Versions}{$version} )
+{
+ $ver_string = $type->{Versions}{$version}[1];
+ if ($type->{Versions}{$version}[0] )
+ { $encrypt = $info[6] ? "Enabled" : "Disabled" }
+ else
+ { $encrypt = "Not Supported" }
+}
print <<EOM ;
File Type: Berkeley DB $type->{Type} file.
@@ -105,6 +121,7 @@ File Version ID: $version
Built with Berkeley DB: $ver_string
Byte Order: $endian
Magic: $magic
+Encryption: $encrypt
EOM
close F ;
diff --git a/db/perl/BerkeleyDB/mkconsts b/db/perl/BerkeleyDB/mkconsts
index 7e0964333..2aca7c6dc 100644
--- a/db/perl/BerkeleyDB/mkconsts
+++ b/db/perl/BerkeleyDB/mkconsts
@@ -678,6 +678,43 @@ use constant IGNORE => 'ignore' ;
DB_TXN_GETPGNOS => '4.1.17',
DB_TXN_PRINT => '4.1.17',
+
+ #########
+ # 4.2.41
+ #########
+
+ DB_AM_NOT_DURABLE => IGNORE,
+ DB_AM_REPLICATION => IGNORE,
+ DB_ARCH_REMOVE => DEFINE,
+ DB_CHKSUM => DEFINE,
+ DB_ENV_LOG_AUTOREMOVE => DEFINE,
+ DB_ENV_TIME_NOTGRANTED => DEFINE,
+ DB_ENV_TXN_NOT_DURABLE => DEFINE,
+ DB_FILEOPEN => DEFINE,
+ DB_INIT_REP => DEFINE,
+ DB_LOG_AUTOREMOVE => DEFINE,
+ DB_LOG_CHKPNT => DEFINE,
+ DB_LOG_COMMIT => DEFINE,
+ DB_LOG_NOCOPY => DEFINE,
+ DB_LOG_NOT_DURABLE => DEFINE,
+ DB_LOG_PERM => DEFINE,
+ DB_LOG_WRNOSYNC => DEFINE,
+ DB_MPOOL_NOFILE => DEFINE,
+ DB_MPOOL_UNLINK => DEFINE,
+ DB_NO_AUTO_COMMIT => DEFINE,
+ DB_REP_CREATE => DEFINE,
+ DB_REP_HANDLE_DEAD => DEFINE,
+ DB_REP_ISPERM => DEFINE,
+ DB_REP_NOBUFFER => DEFINE,
+ DB_REP_NOTPERM => DEFINE,
+ DB_RPCCLIENT => DEFINE,
+ DB_TIME_NOTGRANTED => DEFINE,
+ DB_TXN_NOT_DURABLE => DEFINE,
+ DB_debug_FLAG => DEFINE,
+ DB_user_BEGIN => DEFINE,
+ MP_FILEID_SET => IGNORE,
+ TXN_RESTORED => IGNORE,
+
) ;
sub enum_Macro
diff --git a/db/perl/BerkeleyDB/patches/5.004 b/db/perl/BerkeleyDB/patches/5.004
index 143ec95af..0665d1f6c 100644
--- a/db/perl/BerkeleyDB/patches/5.004
+++ b/db/perl/BerkeleyDB/patches/5.004
@@ -1,44 +1,93 @@
-diff perl5.004.orig/Configure perl5.004/Configure
-190a191
-> perllibs=''
-9904a9906,9913
-> : Remove libraries needed only for extensions
-> : The appropriate ext/Foo/Makefile.PL will add them back in, if
-> : necessary.
-> set X `echo " $libs " |
-> sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
-> shift
-> perllibs="$*"
->
-10372a10382
-> perllibs='$perllibs'
-diff perl5.004.orig/Makefile.SH perl5.004/Makefile.SH
-122c122
-< libs = $libs $cryptlib
----
-> libs = $perllibs $cryptlib
-Common subdirectories: perl5.004.orig/Porting and perl5.004/Porting
-Common subdirectories: perl5.004.orig/cygwin32 and perl5.004/cygwin32
-Common subdirectories: perl5.004.orig/eg and perl5.004/eg
-Common subdirectories: perl5.004.orig/emacs and perl5.004/emacs
-Common subdirectories: perl5.004.orig/ext and perl5.004/ext
-Common subdirectories: perl5.004.orig/h2pl and perl5.004/h2pl
-Common subdirectories: perl5.004.orig/hints and perl5.004/hints
-Common subdirectories: perl5.004.orig/lib and perl5.004/lib
-diff perl5.004.orig/myconfig perl5.004/myconfig
-38c38
-< libs=$libs
----
-> libs=$perllibs
-Common subdirectories: perl5.004.orig/os2 and perl5.004/os2
-diff perl5.004.orig/patchlevel.h perl5.004/patchlevel.h
-40a41
-> ,"NODB-1.0 - remove -ldb from core perl binary."
-Common subdirectories: perl5.004.orig/plan9 and perl5.004/plan9
-Common subdirectories: perl5.004.orig/pod and perl5.004/pod
-Common subdirectories: perl5.004.orig/qnx and perl5.004/qnx
-Common subdirectories: perl5.004.orig/t and perl5.004/t
-Common subdirectories: perl5.004.orig/utils and perl5.004/utils
-Common subdirectories: perl5.004.orig/vms and perl5.004/vms
-Common subdirectories: perl5.004.orig/win32 and perl5.004/win32
-Common subdirectories: perl5.004.orig/x2p and perl5.004/x2p
+diff -rc perl5.004.orig/Configure perl5.004/Configure
+*** perl5.004.orig/Configure 1997-05-13 18:20:34.000000000 +0100
+--- perl5.004/Configure 2003-04-26 16:36:53.000000000 +0100
+***************
+*** 188,193 ****
+--- 188,194 ----
+ mv=''
+ nroff=''
+ perl=''
++ perllibs=''
+ pg=''
+ pmake=''
+ pr=''
+***************
+*** 9902,9907 ****
+--- 9903,9916 ----
+ shift
+ extensions="$*"
+
++ : Remove libraries needed only for extensions
++ : The appropriate ext/Foo/Makefile.PL will add them back in, if
++ : necessary.
++ set X `echo " $libs " |
++ sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
++ shift
++ perllibs="$*"
++
+ : Remove build directory name from cppstdin so it can be used from
+ : either the present location or the final installed location.
+ echo " "
+***************
+*** 10370,10375 ****
+--- 10379,10385 ----
+ patchlevel='$patchlevel'
+ path_sep='$path_sep'
+ perl='$perl'
++ perllibs='$perllibs'
+ perladmin='$perladmin'
+ perlpath='$perlpath'
+ pg='$pg'
+diff -rc perl5.004.orig/Makefile.SH perl5.004/Makefile.SH
+*** perl5.004.orig/Makefile.SH 1997-05-01 15:22:39.000000000 +0100
+--- perl5.004/Makefile.SH 2003-04-26 16:37:23.000000000 +0100
+***************
+*** 119,125 ****
+ ext = \$(dynamic_ext) \$(static_ext)
+ DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
+
+! libs = $libs $cryptlib
+
+ public = perl $suidperl utilities translators
+
+--- 119,125 ----
+ ext = \$(dynamic_ext) \$(static_ext)
+ DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
+
+! libs = $perllibs $cryptlib
+
+ public = perl $suidperl utilities translators
+
+diff -rc perl5.004.orig/myconfig perl5.004/myconfig
+*** perl5.004.orig/myconfig 1996-12-21 01:13:20.000000000 +0000
+--- perl5.004/myconfig 2003-04-26 16:37:51.000000000 +0100
+***************
+*** 35,41 ****
+ Linker and Libraries:
+ ld='$ld', ldflags ='$ldflags'
+ libpth=$libpth
+! libs=$libs
+ libc=$libc, so=$so
+ useshrplib=$useshrplib, libperl=$libperl
+ Dynamic Linking:
+--- 35,41 ----
+ Linker and Libraries:
+ ld='$ld', ldflags ='$ldflags'
+ libpth=$libpth
+! libs=$perllibs
+ libc=$libc, so=$so
+ useshrplib=$useshrplib, libperl=$libperl
+ Dynamic Linking:
+diff -rc perl5.004.orig/patchlevel.h perl5.004/patchlevel.h
+*** perl5.004.orig/patchlevel.h 1997-05-15 23:15:17.000000000 +0100
+--- perl5.004/patchlevel.h 2003-04-26 16:38:11.000000000 +0100
+***************
+*** 38,43 ****
+--- 38,44 ----
+ */
+ static char *local_patches[] = {
+ NULL
++ ,"NODB-1.0 - remove -ldb from core perl binary."
+ ,NULL
+ };
+
diff --git a/db/perl/BerkeleyDB/ppport.h b/db/perl/BerkeleyDB/ppport.h
index f73adb28c..42fd002b8 100644
--- a/db/perl/BerkeleyDB/ppport.h
+++ b/db/perl/BerkeleyDB/ppport.h
@@ -37,7 +37,7 @@
# define PL_na na
# define PL_perldb perldb
# define PL_rsfp_filters rsfp_filters
-# define PL_rsfpv rsfp
+# define PL_rsfp rsfp
# define PL_stdingv stdingv
# define PL_sv_no sv_no
# define PL_sv_undef sv_undef
@@ -279,4 +279,66 @@ SV *sv;
#endif /* START_MY_CXT */
+#if 1
+#ifdef DBM_setFilter
+#undef DBM_setFilter
+#undef DBM_ckFilter
+#endif
+#endif
+
+#ifndef DBM_setFilter
+
+/*
+ The DBM_setFilter & DBM_ckFilter macros are only used by
+ the *DB*_File modules
+*/
+
+#define DBM_setFilter(db_type,code) \
+ { \
+ if (db_type) \
+ RETVAL = sv_mortalcopy(db_type) ; \
+ ST(0) = RETVAL ; \
+ if (db_type && (code == &PL_sv_undef)) { \
+ SvREFCNT_dec(db_type) ; \
+ db_type = NULL ; \
+ } \
+ else if (code) { \
+ if (db_type) \
+ sv_setsv(db_type, code) ; \
+ else \
+ db_type = newSVsv(code) ; \
+ } \
+ }
+
+#define DBM_ckFilter(arg,type,name) \
+ if (db->type) { \
+ /* printf("Filtering %s\n", name); */ \
+ if (db->filtering) { \
+ croak("recursion detected in %s", name) ; \
+ } \
+ ENTER ; \
+ SAVETMPS ; \
+ SAVEINT(db->filtering) ; \
+ db->filtering = TRUE ; \
+ SAVESPTR(DEFSV) ; \
+ if (name[7] == 's') \
+ arg = newSVsv(arg); \
+ DEFSV = arg ; \
+ SvTEMP_off(arg) ; \
+ PUSHMARK(SP) ; \
+ PUTBACK ; \
+ (void) perl_call_sv(db->type, G_DISCARD); \
+ arg = DEFSV ; \
+ SPAGAIN ; \
+ PUTBACK ; \
+ FREETMPS ; \
+ LEAVE ; \
+ if (name[7] == 's'){ \
+ arg = sv_2mortal(arg); \
+ } \
+ SvOKp(arg); \
+ }
+
+#endif /* DBM_setFilter */
+
#endif /* _P_P_PORTABILITY_H_ */
diff --git a/db/perl/BerkeleyDB/scan b/db/perl/BerkeleyDB/scan
index eb064950b..6e6b32071 100644
--- a/db/perl/BerkeleyDB/scan
+++ b/db/perl/BerkeleyDB/scan
@@ -28,6 +28,8 @@ chdir "libraries" || die "Cannot chdir into './libraries': $!\n";
foreach my $name (sort tuple glob "[2-9]*")
{
+ next if $name =~ /NC$/;
+
my $inc = "$name/include/db.h" ;
next unless -f $inc ;
diff --git a/db/perl/BerkeleyDB/t/btree.t b/db/perl/BerkeleyDB/t/btree.t
index fd6ed8f12..03ae1e5f1 100644
--- a/db/perl/BerkeleyDB/t/btree.t
+++ b/db/perl/BerkeleyDB/t/btree.t
@@ -127,6 +127,7 @@ umask(0) ;
my ($k, $v) ;
ok 33, my $db = new BerkeleyDB::Btree -Filename => $Dfile,
-Flags => DB_CREATE ;
+print "[$db] [$!] $BerkeleyDB::Error\n" ;
# create some data
my %data = (
@@ -783,7 +784,7 @@ umask(0) ;
require Exporter ;
use BerkeleyDB;
- @ISA=qw(BerkeleyDB::Btree);
+ @ISA=qw(BerkeleyDB BerkeleyDB::Btree );
@EXPORT = @BerkeleyDB::EXPORT ;
sub db_put {
diff --git a/db/perl/BerkeleyDB/t/db-3.0.t b/db/perl/BerkeleyDB/t/db-3.0.t
index 0a213e5d4..017a759e3 100644
--- a/db/perl/BerkeleyDB/t/db-3.0.t
+++ b/db/perl/BerkeleyDB/t/db-3.0.t
@@ -17,7 +17,7 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3) {
- print "1..0 # Skipped - this needs Berkeley DB 3.x or better\n" ;
+ print "1..0 # Skip: this needs Berkeley DB 3.x or better\n" ;
exit 0 ;
}
}
@@ -52,14 +52,17 @@ umask(0);
-Flags => DB_CREATE ;
# create some data
- my %data = (
- "red" => 2,
+ my @data = (
"green" => "house",
+ "red" => 2,
"blue" => "sea",
) ;
my $ret = 0 ;
- while (($k, $v) = each %data) {
+ while (@data)
+ {
+ my $k = shift @data ;
+ my $v = shift @data ;
$ret += $db->db_put($k, $v) ;
}
ok 5, $ret == 0 ;
@@ -77,7 +80,7 @@ umask(0);
ok 9, $dup_cursor ;
# move original cursor off green/house
- $cursor->c_get($k, $v, DB_NEXT) ;
+ my $s = $cursor->c_get($k, $v, DB_NEXT) ;
ok 10, $k ne "green" ;
ok 11, $v ne "house" ;
diff --git a/db/perl/BerkeleyDB/t/db-3.1.t b/db/perl/BerkeleyDB/t/db-3.1.t
index bc0516f05..d4a3c3dda 100644
--- a/db/perl/BerkeleyDB/t/db-3.1.t
+++ b/db/perl/BerkeleyDB/t/db-3.1.t
@@ -17,7 +17,7 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3.1) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.1.x or better\n" ;
+ print "1..0 # Skip: this needs Berkeley DB 3.1.x or better\n" ;
exit 0 ;
}
}
diff --git a/db/perl/BerkeleyDB/t/db-3.2.t b/db/perl/BerkeleyDB/t/db-3.2.t
index 38c68f42e..d5a24a5b5 100644
--- a/db/perl/BerkeleyDB/t/db-3.2.t
+++ b/db/perl/BerkeleyDB/t/db-3.2.t
@@ -17,7 +17,7 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3.2) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.2.x or better\n" ;
+ print "1..0 # Skip: this needs Berkeley DB 3.2.x or better\n" ;
exit 0 ;
}
}
diff --git a/db/perl/BerkeleyDB/t/db-3.3.t b/db/perl/BerkeleyDB/t/db-3.3.t
index e18686343..e13050ff0 100644
--- a/db/perl/BerkeleyDB/t/db-3.3.t
+++ b/db/perl/BerkeleyDB/t/db-3.3.t
@@ -17,14 +17,14 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3.3) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.3.x or better\n" ;
+ print "1..0 # Skip: this needs Berkeley DB 3.3.x or better\n" ;
exit 0 ;
}
}
umask(0);
-print "1..37\n";
+print "1..44\n";
{
# db->truncate
@@ -172,3 +172,69 @@ print "1..37\n";
# db->associate -- same again but when DB_DUP is specified.
+
+{
+ # db->associate -- secondary keys, each with a user defined sort
+
+ sub sec_key2
+ {
+ my $pkey = shift ;
+ my $pdata = shift ;
+ #print "in sec_key2 [$pkey][$pdata]\n";
+
+ $_[0] = length $pdata ;
+ return 0;
+ }
+
+ my ($Dfile1, $Dfile2);
+ my $lex = new LexFile $Dfile1, $Dfile2 ;
+ my %hash ;
+ my $status;
+ my ($k, $v, $pk) = ('','','');
+
+ # create primary database
+ ok 38, my $primary = new BerkeleyDB::Btree -Filename => $Dfile1,
+ -Compare => sub { return $_[0] cmp $_[1]},
+ -Flags => DB_CREATE ;
+
+ # create secondary database
+ ok 39, my $secondary = new BerkeleyDB::Btree -Filename => $Dfile2,
+ -Compare => sub { return $_[0] <=> $_[1]},
+ -Property => DB_DUP,
+ -Flags => DB_CREATE ;
+
+ # associate primary with secondary
+ ok 40, $primary->associate($secondary, \&sec_key2) == 0;
+
+ # add data to the primary
+ my %data = (
+ "red" => "flag",
+ "orange"=> "custard",
+ "green" => "house",
+ "blue" => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ my $r = $primary->db_put($k, $v) ;
+ #print "put [$r] $BerkeleyDB::Error\n";
+ $ret += $r;
+ }
+ ok 41, $ret == 0 ;
+ #print "ret $ret\n";
+
+ #print "Primary\n" ; dumpdb($primary) ;
+ #print "Secondary\n" ; dumpdb($secondary) ;
+
+ # check the records in the secondary
+ ok 42, countRecords($secondary) == 4 ;
+
+ my $p_data = joinkeys($primary, " ");
+ #print "primary [$p_data]\n" ;
+ ok 43, $p_data eq join " ", sort { $a cmp $b } keys %data ;
+ my $s_data = joinkeys($secondary, " ");
+ #print "secondary [$s_data]\n" ;
+ ok 44, $s_data eq join " ", sort { $a <=> $b } map { length } values %data ;
+
+}
+
diff --git a/db/perl/BerkeleyDB/t/encrypt.t b/db/perl/BerkeleyDB/t/encrypt.t
new file mode 100644
index 000000000..9ff74058b
--- /dev/null
+++ b/db/perl/BerkeleyDB/t/encrypt.t
@@ -0,0 +1,647 @@
+#!./perl -w
+
+# ID: %I%, %G%
+
+use strict ;
+
+BEGIN {
+ unless(grep /blib/, @INC) {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib';
+ }
+}
+
+use BerkeleyDB;
+use t::util ;
+
+BEGIN
+{
+ if ($BerkeleyDB::db_version < 4.1) {
+ print "1..0 # Skip: this needs Berkeley DB 4.1.x or better\n" ;
+ exit 0 ;
+ }
+
+ # Is encryption available?
+ my $env = new BerkeleyDB::Env
+ -Encrypt => {Password => "abc",
+ Flags => DB_ENCRYPT_AES
+ };
+
+ if ($BerkeleyDB::Error =~ /Operation not supported/)
+ {
+ print "1..0 # Skip: encryption support not present\n" ;
+ exit 0 ;
+ }
+}
+
+umask(0);
+
+print "1..80\n";
+
+{
+ eval
+ {
+ my $env = new BerkeleyDB::Env
+ -Encrypt => 1,
+ -Flags => DB_CREATE ;
+ };
+ ok 1, $@ =~ /^Encrypt parameter must be a hash reference at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Env
+ -Encrypt => {},
+ -Flags => DB_CREATE ;
+ };
+ ok 2, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Env
+ -Encrypt => {Password => "fred"},
+ -Flags => DB_CREATE ;
+ };
+ ok 3, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Env
+ -Encrypt => {Flags => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 4, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Env
+ -Encrypt => {Fred => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 5, $@ =~ /^\Qunknown key value(s) Fred at/;
+
+}
+
+{
+ # new BerkeleyDB::Env -Encrypt =>
+
+ # create an environment with a Home
+ my $home = "./fred" ;
+ #mkdir $home;
+ ok 6, my $lexD = new LexDir($home) ;
+ ok 7, my $env = new BerkeleyDB::Env
+ -Home => $home,
+ -Encrypt => {Password => "abc",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Flags => DB_CREATE | DB_INIT_MPOOL ;
+
+print "$BerkeleyDB::Error\n" ;
+
+
+ my $Dfile = "abc.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 8, my $db = new BerkeleyDB::Hash -Filename => $Dfile,
+ -Env => $env,
+ -Flags => DB_CREATE,
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ "red" => 2,
+ "green" => "house",
+ "blue" => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 9, $ret == 0 ;
+
+ # check there are three records
+ ok 10, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # once the database is created, do not need to specify DB_ENCRYPT
+ ok 11, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ -Env => $env,
+ -Flags => DB_CREATE ;
+ $v = '';
+ ok 12, ! $db1->db_get("red", $v) ;
+ ok 13, $v eq $data{"red"},
+ undef $db1;
+ undef $env;
+
+ # open a database without specifying encryption
+ ok 14, ! new BerkeleyDB::Hash -Filename => "$home/$Dfile";
+
+ ok 15, ! new BerkeleyDB::Env
+ -Home => $home,
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Flags => DB_CREATE | DB_INIT_MPOOL ;
+}
+
+{
+ eval
+ {
+ my $env = new BerkeleyDB::Hash
+ -Encrypt => 1,
+ -Flags => DB_CREATE ;
+ };
+ ok 16, $@ =~ /^Encrypt parameter must be a hash reference at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Hash
+ -Encrypt => {},
+ -Flags => DB_CREATE ;
+ };
+ ok 17, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Hash
+ -Encrypt => {Password => "fred"},
+ -Flags => DB_CREATE ;
+ };
+ ok 18, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Hash
+ -Encrypt => {Flags => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 19, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Hash
+ -Encrypt => {Fred => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 20, $@ =~ /^\Qunknown key value(s) Fred at/;
+
+}
+
+{
+ eval
+ {
+ my $env = new BerkeleyDB::Btree
+ -Encrypt => 1,
+ -Flags => DB_CREATE ;
+ };
+ ok 21, $@ =~ /^Encrypt parameter must be a hash reference at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Btree
+ -Encrypt => {},
+ -Flags => DB_CREATE ;
+ };
+ ok 22, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Btree
+ -Encrypt => {Password => "fred"},
+ -Flags => DB_CREATE ;
+ };
+ ok 23, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Btree
+ -Encrypt => {Flags => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 24, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Btree
+ -Encrypt => {Fred => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 25, $@ =~ /^\Qunknown key value(s) Fred at/;
+
+}
+
+{
+ eval
+ {
+ my $env = new BerkeleyDB::Queue
+ -Encrypt => 1,
+ -Flags => DB_CREATE ;
+ };
+ ok 26, $@ =~ /^Encrypt parameter must be a hash reference at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Queue
+ -Encrypt => {},
+ -Flags => DB_CREATE ;
+ };
+ ok 27, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Queue
+ -Encrypt => {Password => "fred"},
+ -Flags => DB_CREATE ;
+ };
+ ok 28, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Queue
+ -Encrypt => {Flags => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 29, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Queue
+ -Encrypt => {Fred => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 30, $@ =~ /^\Qunknown key value(s) Fred at/;
+
+}
+
+{
+ eval
+ {
+ my $env = new BerkeleyDB::Recno
+ -Encrypt => 1,
+ -Flags => DB_CREATE ;
+ };
+ ok 31, $@ =~ /^Encrypt parameter must be a hash reference at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Recno
+ -Encrypt => {},
+ -Flags => DB_CREATE ;
+ };
+ ok 32, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Recno
+ -Encrypt => {Password => "fred"},
+ -Flags => DB_CREATE ;
+ };
+ ok 33, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Recno
+ -Encrypt => {Flags => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 34, $@ =~ /^Must specify Password and Flags with Encrypt parameter at/;
+
+ eval
+ {
+ my $env = new BerkeleyDB::Recno
+ -Encrypt => {Fred => 1},
+ -Flags => DB_CREATE ;
+ };
+ ok 35, $@ =~ /^\Qunknown key value(s) Fred at/;
+
+}
+
+
+{
+ # new BerkeleyDB::Hash -Encrypt =>
+
+ my $Dfile = "abcd.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 36, my $db = new BerkeleyDB::Hash
+ -Filename => $Dfile,
+ -Flags => DB_CREATE,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ "red" => 2,
+ "green" => "house",
+ "blue" => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 37, $ret == 0 ;
+
+ # check there are three records
+ ok 38, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # attempt to open a database without specifying encryption
+ ok 39, ! new BerkeleyDB::Hash -Filename => $Dfile,
+ -Flags => DB_CREATE ;
+
+
+ # try opening with the wrong password
+ ok 40, ! new BerkeleyDB::Hash -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ # read the encrypted data
+ ok 41, my $db1 = new BerkeleyDB::Hash -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ $v = '';
+ ok 42, ! $db1->db_get("red", $v) ;
+ ok 43, $v eq $data{"red"};
+ # check there are three records
+ ok 44, countRecords($db1) == 3 ;
+ undef $db1;
+}
+
+{
+ # new BerkeleyDB::Btree -Encrypt =>
+
+ my $Dfile = "abcd.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 45, my $db = new BerkeleyDB::Btree
+ -Filename => $Dfile,
+ -Flags => DB_CREATE,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ "red" => 2,
+ "green" => "house",
+ "blue" => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 46, $ret == 0 ;
+
+ # check there are three records
+ ok 47, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # attempt to open a database without specifying encryption
+ ok 48, ! new BerkeleyDB::Btree -Filename => $Dfile,
+ -Flags => DB_CREATE ;
+
+
+ # try opening with the wrong password
+ ok 49, ! new BerkeleyDB::Btree -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ # read the encrypted data
+ ok 50, my $db1 = new BerkeleyDB::Btree -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ $v = '';
+ ok 51, ! $db1->db_get("red", $v) ;
+ ok 52, $v eq $data{"red"};
+ # check there are three records
+ ok 53, countRecords($db1) == 3 ;
+ undef $db1;
+}
+
+{
+ # new BerkeleyDB::Queue -Encrypt =>
+
+ my $Dfile = "abcd.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 54, my $db = new BerkeleyDB::Queue
+ -Filename => $Dfile,
+ -Len => 5,
+ -Pad => "x",
+ -Flags => DB_CREATE,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ 1 => 2,
+ 2 => "house",
+ 3 => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 55, $ret == 0 ;
+
+ # check there are three records
+ ok 56, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # attempt to open a database without specifying encryption
+ ok 57, ! new BerkeleyDB::Queue -Filename => $Dfile,
+ -Len => 5,
+ -Pad => "x",
+ -Flags => DB_CREATE ;
+
+
+ # try opening with the wrong password
+ ok 58, ! new BerkeleyDB::Queue -Filename => $Dfile,
+ -Len => 5,
+ -Pad => "x",
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ # read the encrypted data
+ ok 59, my $db1 = new BerkeleyDB::Queue -Filename => $Dfile,
+ -Len => 5,
+ -Pad => "x",
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ $v = '';
+ ok 60, ! $db1->db_get(3, $v) ;
+ ok 61, $v eq fillout($data{3}, 5, 'x');
+ # check there are three records
+ ok 62, countRecords($db1) == 3 ;
+ undef $db1;
+}
+
+{
+ # new BerkeleyDB::Recno -Encrypt =>
+
+ my $Dfile = "abcd.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 63, my $db = new BerkeleyDB::Recno
+ -Filename => $Dfile,
+ -Flags => DB_CREATE,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ 1 => 2,
+ 2 => "house",
+ 3 => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 64, $ret == 0 ;
+
+ # check there are three records
+ ok 65, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # attempt to open a database without specifying encryption
+ ok 66, ! new BerkeleyDB::Recno -Filename => $Dfile,
+ -Flags => DB_CREATE ;
+
+
+ # try opening with the wrong password
+ ok 67, ! new BerkeleyDB::Recno -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ # read the encrypted data
+ ok 68, my $db1 = new BerkeleyDB::Recno -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ $v = '';
+ ok 69, ! $db1->db_get(3, $v) ;
+ ok 70, $v eq $data{3};
+ # check there are three records
+ ok 71, countRecords($db1) == 3 ;
+ undef $db1;
+}
+
+{
+ # new BerkeleyDB::Unknown -Encrypt =>
+
+ my $Dfile = "abcd.enc";
+ my $lex = new LexFile $Dfile ;
+ my %hash ;
+ my ($k, $v) ;
+ ok 72, my $db = new BerkeleyDB::Hash
+ -Filename => $Dfile,
+ -Flags => DB_CREATE,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+ # create some data
+ my %data = (
+ "red" => 2,
+ "green" => "house",
+ "blue" => "sea",
+ ) ;
+
+ my $ret = 0 ;
+ while (($k, $v) = each %data) {
+ $ret += $db->db_put($k, $v) ;
+ }
+ ok 73, $ret == 0 ;
+
+ # check there are three records
+ ok 74, countRecords($db) == 3 ;
+
+ undef $db;
+
+ # attempt to open a database without specifying encryption
+ ok 75, ! new BerkeleyDB::Unknown -Filename => $Dfile,
+ -Flags => DB_CREATE ;
+
+
+ # try opening with the wrong password
+ ok 76, ! new BerkeleyDB::Unknown -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "def",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ # read the encrypted data
+ ok 77, my $db1 = new BerkeleyDB::Unknown -Filename => $Dfile,
+ -Filename => $Dfile,
+ -Encrypt => {Password => "beta",
+ Flags => DB_ENCRYPT_AES
+ },
+ -Property => DB_ENCRYPT ;
+
+
+ $v = '';
+ ok 78, ! $db1->db_get("red", $v) ;
+ ok 79, $v eq $data{"red"};
+ # check there are three records
+ ok 80, countRecords($db1) == 3 ;
+ undef $db1;
+}
+
diff --git a/db/perl/BerkeleyDB/t/env.t b/db/perl/BerkeleyDB/t/env.t
index 3905abfae..fd69db279 100644
--- a/db/perl/BerkeleyDB/t/env.t
+++ b/db/perl/BerkeleyDB/t/env.t
@@ -14,20 +14,22 @@ BEGIN {
use BerkeleyDB;
use t::util ;
-print "1..47\n";
+print "1..50\n";
my $Dfile = "dbhash.tmp";
umask(0);
+my $version_major = 0;
+
{
# db version stuff
my ($major, $minor, $patch) = (0, 0, 0) ;
ok 1, my $VER = BerkeleyDB::DB_VERSION_STRING ;
- ok 2, my $ver = BerkeleyDB::db_version($major, $minor, $patch) ;
+ ok 2, my $ver = BerkeleyDB::db_version($version_major, $minor, $patch) ;
ok 3, $VER eq $ver ;
- ok 4, $major > 1 ;
+ ok 4, $version_major > 1 ;
ok 5, defined $minor ;
ok 6, defined $patch ;
}
@@ -43,7 +45,8 @@ umask(0);
eval ' $env = new BerkeleyDB::Env (-Config => {"fred" => " "} ) ; ' ;
ok 9, !$env ;
- ok 10, $BerkeleyDB::Error =~ /^illegal name-value pair/ ;
+ ok 10, $BerkeleyDB::Error =~ /^(illegal name-value pair|Invalid argument)/ ;
+ #print " $BerkeleyDB::Error\n";
}
{
@@ -152,7 +155,6 @@ umask(0);
{
# -ErrPrefix
- use IO ;
my $home = "./fred" ;
ok 32, my $lexD = new LexDir($home) ;
my $errfile = "./errfile" ;
@@ -212,6 +214,22 @@ umask(0);
}
+{
+ # attempt to open a new environment without DB_CREATE
+ # should fail with Berkeley DB 3.x or better.
+
+ my $home = "./fred" ;
+ ok 48, my $lexD = new LexDir($home) ;
+ chdir "./fred" ;
+ my $env = new BerkeleyDB::Env -Home => $home, -Flags => DB_CREATE ;
+ ok 49, $version_major == 2 ? $env : ! $env ;
+ ok 50, $version_major == 2 ? 1
+ : $BerkeleyDB::Error =~ /No such file or directory/ ;
+ #print " $BerkeleyDB::Error\n";
+ chdir ".." ;
+ undef $env ;
+}
+
# test -Verbose
# test -Flags
# db_value_set
diff --git a/db/perl/BerkeleyDB/t/filter.t b/db/perl/BerkeleyDB/t/filter.t
index 47a7c107a..ff1435ae7 100644
--- a/db/perl/BerkeleyDB/t/filter.t
+++ b/db/perl/BerkeleyDB/t/filter.t
@@ -14,7 +14,7 @@ BEGIN {
use BerkeleyDB;
use t::util ;
-print "1..46\n";
+print "1..52\n";
my $Dfile = "dbhash.tmp";
unlink $Dfile;
@@ -80,6 +80,7 @@ umask(0) ;
($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ;
ok 8, $h{"Fred"} eq "[Jxe]";
+ print "$h{'Fred'}\n";
# fk sk fv sv
ok 9, checkOutput( "", "fred", "[Jxe]", "") ;
@@ -207,11 +208,123 @@ umask(0) ;
$db->filter_store_key (sub { $_ = $h{$_} }) ;
eval '$h{1} = 1234' ;
- ok 46, $@ =~ /^BerkeleyDB Aborting: recursion detected in filter_store_key at/ ;
- #print "[$@]\n" ;
+ ok 46, $@ =~ /^recursion detected in filter_store_key at/ ;
undef $db ;
untie %h;
unlink $Dfile;
}
+{
+ # Check that DBM Filter can cope with read-only $_
+
+ #use warnings ;
+ use strict ;
+ my (%h, $db) ;
+ unlink $Dfile;
+
+ ok 47, $db = tie %h, 'BerkeleyDB::Hash',
+ -Filename => $Dfile,
+ -Flags => DB_CREATE;
+
+ $db->filter_fetch_key (sub { }) ;
+ $db->filter_store_key (sub { }) ;
+ $db->filter_fetch_value (sub { }) ;
+ $db->filter_store_value (sub { }) ;
+
+ $_ = "original" ;
+
+ $h{"fred"} = "joe" ;
+ ok(48, $h{"fred"} eq "joe");
+
+ eval { grep { $h{$_} } (1, 2, 3) };
+ ok (49, ! $@);
+
+
+ # delete the filters
+ $db->filter_fetch_key (undef);
+ $db->filter_store_key (undef);
+ $db->filter_fetch_value (undef);
+ $db->filter_store_value (undef);
+
+ $h{"fred"} = "joe" ;
+
+ ok(50, $h{"fred"} eq "joe");
+
+ ok(51, $db->FIRSTKEY() eq "fred") ;
+
+ eval { grep { $h{$_} } (1, 2, 3) };
+ ok (52, ! $@);
+
+ undef $db ;
+ untie %h;
+ unlink $Dfile;
+}
+
+if(0)
+{
+ # Filter without tie
+ use strict ;
+ my (%h, $db) ;
+
+ unlink $Dfile;
+ ok 53, $db = tie %h, 'BerkeleyDB::Hash',
+ -Filename => $Dfile,
+ -Flags => DB_CREATE;
+
+ my %result = () ;
+
+ sub INC { return ++ $_[0] }
+ sub DEC { return -- $_[0] }
+ #$db->filter_fetch_key (sub { warn "FFK $_\n"; $_ = INC($_); warn "XX\n" }) ;
+ #$db->filter_store_key (sub { warn "FSK $_\n"; $_ = DEC($_); warn "XX\n" }) ;
+ #$db->filter_fetch_value (sub { warn "FFV $_\n"; $_ = INC($_); warn "XX\n"}) ;
+ #$db->filter_store_value (sub { warn "FSV $_\n"; $_ = DEC($_); warn "XX\n" }) ;
+
+ $db->filter_fetch_key (sub { warn "FFK $_\n"; $_ = pack("i", $_); warn "XX\n" }) ;
+ $db->filter_store_key (sub { warn "FSK $_\n"; $_ = unpack("i", $_); warn "XX\n" }) ;
+ $db->filter_fetch_value (sub { warn "FFV $_\n"; $_ = pack("i", $_); warn "XX\n"}) ;
+ #$db->filter_store_value (sub { warn "FSV $_\n"; $_ = unpack("i", $_); warn "XX\n" }) ;
+
+ #$db->filter_fetch_key (sub { ++ $_ }) ;
+ #$db->filter_store_key (sub { -- $_ }) ;
+ #$db->filter_fetch_value (sub { ++ $_ }) ;
+ #$db->filter_store_value (sub { -- $_ }) ;
+
+ my ($k, $v) = (0,0);
+ ok 54, ! $db->db_put(3,5);
+ exit;
+ ok 55, ! $db->db_get(3, $v);
+ ok 56, $v == 5 ;
+
+ $h{4} = 7 ;
+ ok 57, $h{4} == 7;
+
+ $k = 10;
+ $v = 30;
+ $h{$k} = $v ;
+ ok 58, $k == 10;
+ ok 59, $v == 30;
+ ok 60, $h{$k} == 30;
+
+ $k = 3;
+ ok 61, ! $db->db_get($k, $v, DB_GET_BOTH);
+ ok 62, $k == 3 ;
+ ok 63, $v == 5 ;
+
+ my $cursor = $db->db_cursor();
+
+ my %tmp = ();
+ while ($cursor->c_get($k, $v, DB_NEXT) == 0)
+ {
+ $tmp{$k} = $v;
+ }
+
+ ok 64, keys %tmp == 3 ;
+ ok 65, $tmp{3} == 5;
+
+ undef $cursor ;
+ undef $db ;
+ untie %h;
+ unlink $Dfile;
+}
diff --git a/db/perl/BerkeleyDB/t/hash.t b/db/perl/BerkeleyDB/t/hash.t
index 0e683851c..f2c5caf5a 100644
--- a/db/perl/BerkeleyDB/t/hash.t
+++ b/db/perl/BerkeleyDB/t/hash.t
@@ -118,6 +118,7 @@ umask(0) ;
undef $env ;
}
+
{
# override default hash
my $lex = new LexFile $Dfile ;
@@ -664,7 +665,7 @@ umask(0) ;
require Exporter ;
use BerkeleyDB;
- @ISA=qw(BerkeleyDB::Hash);
+ @ISA=qw(BerkeleyDB BerkeleyDB::Hash);
@EXPORT = @BerkeleyDB::EXPORT ;
sub db_put {
diff --git a/db/perl/BerkeleyDB/t/join.t b/db/perl/BerkeleyDB/t/join.t
index ed9b6a269..0f1881065 100644
--- a/db/perl/BerkeleyDB/t/join.t
+++ b/db/perl/BerkeleyDB/t/join.t
@@ -21,7 +21,7 @@ if ($BerkeleyDB::db_ver < 2.005002)
}
-print "1..37\n";
+print "1..41\n";
my $Dfile1 = "dbhash1.tmp";
my $Dfile2 = "dbhash2.tmp";
@@ -46,18 +46,24 @@ umask(0) ;
# no cursors supplied
eval '$cursor = $db1->db_join() ;' ;
- ok 2, $@ =~ /Usage: \$db->BerkeleyDB::Common::db_join\Q([cursors], flags=0)/;
+ ok 2, $@ =~ /Usage: \$db->BerkeleyDB::db_join\Q([cursors], flags=0)/;
# empty list
eval '$cursor = $db1->db_join([]) ;' ;
ok 3, $@ =~ /db_join: No cursors in parameter list/;
- # cursor list, isn't a []
+ # cursor list, isn not a []
eval '$cursor = $db1->db_join({}) ;' ;
- ok 4, $@ =~ /cursors is not an array reference at/ ;
+ ok 4, $@ =~ /db_join: first parameter is not an array reference/;
eval '$cursor = $db1->db_join(\1) ;' ;
- ok 5, $@ =~ /cursors is not an array reference at/ ;
+ ok 5, $@ =~ /db_join: first parameter is not an array reference/;
+
+ my ($a, $b) = ("a", "b");
+ $a = bless [], "fred";
+ $b = bless [], "fred";
+ eval '$cursor = $db1->db_join($a, $b) ;' ;
+ ok 6, $@ =~ /db_join: first parameter is not an array reference/;
}
@@ -72,13 +78,13 @@ umask(0) ;
my $status ;
my $home = "./fred" ;
- ok 6, my $lexD = new LexDir($home);
- ok 7, my $env = new BerkeleyDB::Env -Home => $home,
+ ok 7, my $lexD = new LexDir($home);
+ ok 8, my $env = new BerkeleyDB::Env -Home => $home,
-Flags => DB_CREATE|DB_INIT_TXN
|DB_INIT_MPOOL;
#|DB_INIT_MPOOL| DB_INIT_LOCK;
- ok 8, my $txn = $env->txn_begin() ;
- ok 9, my $db1 = tie %hash1, 'BerkeleyDB::Hash',
+ ok 9, my $txn = $env->txn_begin() ;
+ ok 10, my $db1 = tie %hash1, 'BerkeleyDB::Hash',
-Filename => $Dfile1,
-Flags => DB_CREATE,
-DupCompare => sub { $_[0] cmp $_[1] },
@@ -87,7 +93,7 @@ umask(0) ;
-Txn => $txn ;
;
- ok 10, my $db2 = tie %hash2, 'BerkeleyDB::Hash',
+ ok 11, my $db2 = tie %hash2, 'BerkeleyDB::Hash',
-Filename => $Dfile2,
-Flags => DB_CREATE,
-DupCompare => sub { $_[0] cmp $_[1] },
@@ -95,7 +101,7 @@ umask(0) ;
-Env => $env,
-Txn => $txn ;
- ok 11, my $db3 = tie %hash3, 'BerkeleyDB::Btree',
+ ok 12, my $db3 = tie %hash3, 'BerkeleyDB::Btree',
-Filename => $Dfile3,
-Flags => DB_CREATE,
-DupCompare => sub { $_[0] cmp $_[1] },
@@ -104,7 +110,7 @@ umask(0) ;
-Txn => $txn ;
- ok 12, addData($db1, qw( apple Convenience
+ ok 13, addData($db1, qw( apple Convenience
peach Shopway
pear Farmer
raspberry Shopway
@@ -113,7 +119,7 @@ umask(0) ;
blueberry Farmer
));
- ok 13, addData($db2, qw( red apple
+ ok 14, addData($db2, qw( red apple
red raspberry
red strawberry
yellow peach
@@ -121,7 +127,7 @@ umask(0) ;
green gooseberry
blue blueberry)) ;
- ok 14, addData($db3, qw( expensive apple
+ ok 15, addData($db3, qw( expensive apple
reasonable raspberry
expensive strawberry
reasonable peach
@@ -129,13 +135,13 @@ umask(0) ;
expensive gooseberry
reasonable blueberry)) ;
- ok 15, my $cursor2 = $db2->db_cursor() ;
+ ok 16, my $cursor2 = $db2->db_cursor() ;
my $k = "red" ;
my $v = "" ;
- ok 16, $cursor2->c_get($k, $v, DB_SET) == 0 ;
+ ok 17, $cursor2->c_get($k, $v, DB_SET) == 0 ;
# Two way Join
- ok 17, my $cursor1 = $db1->db_join([$cursor2]) ;
+ ok 18, my $cursor1 = $db1->db_join([$cursor2]) ;
my %expected = qw( apple Convenience
raspberry Shopway
@@ -148,20 +154,20 @@ umask(0) ;
if defined $expected{$k} && $expected{$k} eq $v ;
#print "[$k] [$v]\n" ;
}
- ok 18, keys %expected == 0 ;
- ok 19, $cursor1->status() == DB_NOTFOUND ;
+ ok 19, keys %expected == 0 ;
+ ok 20, $cursor1->status() == DB_NOTFOUND ;
# Three way Join
- ok 20, $cursor2 = $db2->db_cursor() ;
+ ok 21, $cursor2 = $db2->db_cursor() ;
$k = "red" ;
$v = "" ;
- ok 21, $cursor2->c_get($k, $v, DB_SET) == 0 ;
+ ok 22, $cursor2->c_get($k, $v, DB_SET) == 0 ;
- ok 22, my $cursor3 = $db3->db_cursor() ;
+ ok 23, my $cursor3 = $db3->db_cursor() ;
$k = "expensive" ;
$v = "" ;
- ok 23, $cursor3->c_get($k, $v, DB_SET) == 0 ;
- ok 24, $cursor1 = $db1->db_join([$cursor2, $cursor3]) ;
+ ok 24, $cursor3->c_get($k, $v, DB_SET) == 0 ;
+ ok 25, $cursor1 = $db1->db_join([$cursor2, $cursor3]) ;
%expected = qw( apple Convenience
strawberry Shopway
@@ -173,21 +179,21 @@ umask(0) ;
if defined $expected{$k} && $expected{$k} eq $v ;
#print "[$k] [$v]\n" ;
}
- ok 25, keys %expected == 0 ;
- ok 26, $cursor1->status() == DB_NOTFOUND ;
+ ok 26, keys %expected == 0 ;
+ ok 27, $cursor1->status() == DB_NOTFOUND ;
# test DB_JOIN_ITEM
# #################
- ok 27, $cursor2 = $db2->db_cursor() ;
+ ok 28, $cursor2 = $db2->db_cursor() ;
$k = "red" ;
$v = "" ;
- ok 28, $cursor2->c_get($k, $v, DB_SET) == 0 ;
+ ok 29, $cursor2->c_get($k, $v, DB_SET) == 0 ;
- ok 29, $cursor3 = $db3->db_cursor() ;
+ ok 30, $cursor3 = $db3->db_cursor() ;
$k = "expensive" ;
$v = "" ;
- ok 30, $cursor3->c_get($k, $v, DB_SET) == 0 ;
- ok 31, $cursor1 = $db1->db_join([$cursor2, $cursor3]) ;
+ ok 31, $cursor3->c_get($k, $v, DB_SET) == 0 ;
+ ok 32, $cursor1 = $db1->db_join([$cursor2, $cursor3]) ;
%expected = qw( apple 1
strawberry 1
@@ -201,16 +207,24 @@ umask(0) ;
if defined $expected{$k} ;
#print "[$k]\n" ;
}
- ok 32, keys %expected == 0 ;
- ok 33, $cursor1->status() == DB_NOTFOUND ;
+ ok 33, keys %expected == 0 ;
+ ok 34, $cursor1->status() == DB_NOTFOUND ;
- ok 34, $cursor1->c_close() == 0 ;
- ok 35, $cursor2->c_close() == 0 ;
- ok 36, $cursor3->c_close() == 0 ;
+ ok 35, $cursor1->c_close() == 0 ;
+ ok 36, $cursor2->c_close() == 0 ;
+ ok 37, $cursor3->c_close() == 0 ;
- ok 37, ($status = $txn->txn_commit) == 0;
+ ok 38, ($status = $txn->txn_commit) == 0;
undef $txn ;
+
+ ok 39, my $cursor1a = $db1->db_cursor() ;
+ eval { $cursor1 = $db1->db_join([$cursor1a]) };
+ ok 40, $@ =~ /BerkeleyDB Aborting: attempted to do a self-join at/;
+ eval { $cursor1 = $db1->db_join([$cursor1]) } ;
+ ok 41, $@ =~ /BerkeleyDB Aborting: attempted to do a self-join at/;
+
+ undef $cursor1a;
#undef $cursor1;
#undef $cursor2;
#undef $cursor3;
@@ -222,4 +236,5 @@ umask(0) ;
untie %hash2 ;
untie %hash3 ;
}
+
print "# at the end\n";
diff --git a/db/perl/BerkeleyDB/t/mldbm.t b/db/perl/BerkeleyDB/t/mldbm.t
index d35f7e158..215d34f42 100644
--- a/db/perl/BerkeleyDB/t/mldbm.t
+++ b/db/perl/BerkeleyDB/t/mldbm.t
@@ -5,22 +5,22 @@ use strict ;
BEGIN
{
if ($] < 5.005) {
- print "1..0 # This is Perl $], skipping test\n" ;
+ print "1..0 # Skip: this is Perl $], skipping test\n" ;
exit 0 ;
}
eval { require Data::Dumper ; };
if ($@) {
- print "1..0 # Data::Dumper is not installed on this system.\n";
+ print "1..0 # Skip: Data::Dumper is not installed on this system.\n";
exit 0 ;
}
if ($Data::Dumper::VERSION < 2.08) {
- print "1..0 # Data::Dumper 2.08 or better required (found $Data::Dumper::VERSION).\n";
+ print "1..0 # Skip: Data::Dumper 2.08 or better required (found $Data::Dumper::VERSION).\n";
exit 0 ;
}
eval { require MLDBM ; };
if ($@) {
- print "1..0 # MLDBM is not installed on this system.\n";
+ print "1..0 # Skip: MLDBM is not installed on this system.\n";
exit 0 ;
}
}
@@ -57,36 +57,9 @@ print "1..12\n";
$o{d} = "{once upon a time}";
$o{e} = 1024;
$o{f} = 1024.1024;
- my $first = Data::Dumper->new([@o{qw(a b c)}], [qw(a b c)])->Quotekeys(0)->Dump;
- my $second = <<'EOT';
-$a = [
- 1,
- {
- a => $a,
- b => $a->[1],
- c => [
- \'c'
- ]
- },
- $a->[1]{c}
- ];
-$b = {
- a => [
- 1,
- $b,
- [
- \'c'
- ]
- ],
- b => $b,
- c => $b->{a}[2]
- };
-$c = [
- \'c'
- ];
-EOT
- ::ok 3, $first eq $second ;
+ my $struct = [@o{qw(a b c)}];
+ ::ok 3, ::_compare([$a, $b, $c], $struct);
::ok 4, $o{d} eq "{once upon a time}" ;
::ok 5, $o{e} == 1024 ;
::ok 6, $o{f} eq 1024.1024 ;
@@ -124,36 +97,9 @@ EOT
$o{d} = "{once upon a time}";
$o{e} = 1024;
$o{f} = 1024.1024;
- my $first = Data::Dumper->new([@o{qw(a b c)}], [qw(a b c)])->Quotekeys(0)->Dump;
- my $second = <<'EOT';
-$a = [
- 1,
- {
- a => $a,
- b => $a->[1],
- c => [
- \'c'
- ]
- },
- $a->[1]{c}
- ];
-$b = {
- a => [
- 1,
- $b,
- [
- \'c'
- ]
- ],
- b => $b,
- c => $b->{a}[2]
- };
-$c = [
- \'c'
- ];
-EOT
- ::ok 9, $first eq $second ;
+ my $struct = [@o{qw(a b c)}];
+ ::ok 9, ::_compare([$a, $b, $c], $struct);
::ok 10, $o{d} eq "{once upon a time}" ;
::ok 11, $o{e} == 1024 ;
::ok 12, $o{f} eq 1024.1024 ;
diff --git a/db/perl/BerkeleyDB/t/queue.t b/db/perl/BerkeleyDB/t/queue.t
index 86add129c..53753cd45 100644
--- a/db/perl/BerkeleyDB/t/queue.t
+++ b/db/perl/BerkeleyDB/t/queue.t
@@ -17,23 +17,13 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3.3) {
- print "1..0 # Skipping test, Queue needs Berkeley DB 3.3.x or better\n" ;
+ print "1..0 # Skip: Queue needs Berkeley DB 3.3.x or better\n" ;
exit 0 ;
}
}
-print "1..201\n";
+print "1..200\n";
-sub fillout
-{
- my $var = shift ;
- my $length = shift ;
- my $pad = shift || " " ;
- my $template = $pad x $length ;
- substr($template, 0, length($var)) = $var ;
- return $template ;
-}
-
my $Dfile = "dbhash.tmp";
my $Dfile2 = "dbhash2.tmp";
my $Dfile3 = "dbhash3.tmp";
@@ -85,29 +75,32 @@ umask(0) ;
ok 11, $db->db_put(2, "value") == 0 ;
ok 12, $db->db_get(2, $value) == 0 ;
ok 13, $value eq fillout("value", $rec_len, $pad) ;
- ok 14, $db->db_del(1) == 0 ;
- ok 15, ($status = $db->db_get(1, $value)) == DB_KEYEMPTY ;
- ok 16, $db->status() == DB_KEYEMPTY ;
- ok 17, $db->status() eq $DB_errors{'DB_KEYEMPTY'} ;
+ ok 14, $db->db_put(3, "value") == 0 ;
+ ok 15, $db->db_get(3, $value) == 0 ;
+ ok 16, $value eq fillout("value", $rec_len, $pad) ;
+ ok 17, $db->db_del(2) == 0 ;
+ ok 18, ($status = $db->db_get(2, $value)) == DB_KEYEMPTY ;
+ ok 19, $db->status() == DB_KEYEMPTY ;
+ ok 20, $db->status() eq $DB_errors{'DB_KEYEMPTY'} ;
- ok 18, ($status = $db->db_get(7, $value)) == DB_NOTFOUND ;
- ok 19, $db->status() == DB_NOTFOUND ;
- ok 20, $db->status() eq $DB_errors{'DB_NOTFOUND'} ;
+ ok 21, ($status = $db->db_get(7, $value)) == DB_NOTFOUND ;
+ ok 22, $db->status() == DB_NOTFOUND ;
+ ok 23, $db->status() eq $DB_errors{'DB_NOTFOUND'} ;
- ok 21, $db->db_sync() == 0 ;
+ ok 24, $db->db_sync() == 0 ;
# Check NOOVERWRITE will make put fail when attempting to overwrite
# an existing record.
- ok 22, $db->db_put( 2, 'x', DB_NOOVERWRITE) == DB_KEYEXIST ;
- ok 23, $db->status() eq $DB_errors{'DB_KEYEXIST'} ;
- ok 24, $db->status() == DB_KEYEXIST ;
+ ok 25, $db->db_put( 1, 'x', DB_NOOVERWRITE) == DB_KEYEXIST ;
+ ok 26, $db->status() eq $DB_errors{'DB_KEYEXIST'} ;
+ ok 27, $db->status() == DB_KEYEXIST ;
# check that the value of the key has not been changed by the
# previous test
- ok 25, $db->db_get(2, $value) == 0 ;
- ok 26, $value eq fillout("value", $rec_len, $pad) ;
+ ok 28, $db->db_get(1, $value) == 0 ;
+ ok 29, $value eq fillout("some value", $rec_len, $pad) ;
}
@@ -120,20 +113,20 @@ umask(0) ;
my $home = "./fred" ;
my $rec_len = 11 ;
- ok 27, my $lexD = new LexDir($home);
+ ok 30, my $lexD = new LexDir($home);
- ok 28, my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
+ ok 31, my $env = new BerkeleyDB::Env -Flags => DB_CREATE|DB_INIT_MPOOL,
-Home => $home ;
- ok 29, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok 32, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Env => $env,
-Flags => DB_CREATE,
-Len => $rec_len;
# Add a k/v pair
my $value ;
- ok 30, $db->db_put(1, "some value") == 0 ;
- ok 31, $db->db_get(1, $value) == 0 ;
- ok 32, $value eq fillout("some value", $rec_len) ;
+ ok 33, $db->db_put(1, "some value") == 0 ;
+ ok 34, $db->db_get(1, $value) == 0 ;
+ ok 35, $value eq fillout("some value", $rec_len) ;
undef $db ;
undef $env ;
}
@@ -146,7 +139,7 @@ umask(0) ;
my @array ;
my ($k, $v) ;
my $rec_len = 5 ;
- ok 33, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok 36, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
-Len => $rec_len;
@@ -165,10 +158,10 @@ umask(0) ;
$ret += $db->db_put($i, $data[$i]) ;
$data{$i} = $data[$i] ;
}
- ok 34, $ret == 0 ;
+ ok 37, $ret == 0 ;
# create the cursor
- ok 35, my $cursor = $db->db_cursor() ;
+ ok 38, my $cursor = $db->db_cursor() ;
$k = 0 ; $v = "" ;
my %copy = %data;
@@ -182,10 +175,10 @@ umask(0) ;
{ ++ $extras }
}
- ok 36, $cursor->status() == DB_NOTFOUND ;
- ok 37, $cursor->status() eq $DB_errors{'DB_NOTFOUND'} ;
- ok 38, keys %copy == 0 ;
- ok 39, $extras == 0 ;
+ ok 39, $cursor->status() == DB_NOTFOUND ;
+ ok 40, $cursor->status() eq $DB_errors{'DB_NOTFOUND'} ;
+ ok 41, keys %copy == 0 ;
+ ok 42, $extras == 0 ;
# sequence backwards
%copy = %data ;
@@ -199,12 +192,12 @@ umask(0) ;
else
{ ++ $extras }
}
- ok 40, $status == DB_NOTFOUND ;
- ok 41, $status eq $DB_errors{'DB_NOTFOUND'} ;
- ok 42, $cursor->status() == $status ;
- ok 43, $cursor->status() eq $status ;
- ok 44, keys %copy == 0 ;
- ok 45, $extras == 0 ;
+ ok 43, $status == DB_NOTFOUND ;
+ ok 44, $status eq $DB_errors{'DB_NOTFOUND'} ;
+ ok 45, $cursor->status() == $status ;
+ ok 46, $cursor->status() eq $status ;
+ ok 47, keys %copy == 0 ;
+ ok 48, $extras == 0 ;
}
{
@@ -214,37 +207,32 @@ umask(0) ;
my @array ;
my $db ;
my $rec_len = 10 ;
- ok 46, $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
+ ok 49, $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
-Len => $rec_len;
- ok 47, my $cursor = (tied @array)->db_cursor() ;
+ ok 50, my $cursor = (tied @array)->db_cursor() ;
# check the database is empty
my $count = 0 ;
my ($k, $v) = (0,"") ;
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
++ $count ;
}
- ok 48, $cursor->status() == DB_NOTFOUND ;
- ok 49, $count == 0 ;
+ ok 51, $cursor->status() == DB_NOTFOUND ;
+ ok 52, $count == 0 ;
- ok 50, @array == 0 ;
+ ok 53, @array == 0 ;
# Add a k/v pair
my $value ;
$array[1] = "some value";
- ok 51, (tied @array)->status() == 0 ;
- ok 52, $array[1] eq fillout("some value", $rec_len);
- ok 53, defined $array[1];
ok 54, (tied @array)->status() == 0 ;
- ok 55, !defined $array[3];
- ok 56, (tied @array)->status() == DB_NOTFOUND ;
-
- ok 57, (tied @array)->db_del(1) == 0 ;
- ok 58, (tied @array)->status() == 0 ;
- ok 59, ! defined $array[1];
- ok 60, (tied @array)->status() == DB_KEYEMPTY ;
+ ok 55, $array[1] eq fillout("some value", $rec_len);
+ ok 56, defined $array[1];
+ ok 57, (tied @array)->status() == 0 ;
+ ok 58, !defined $array[3];
+ ok 59, (tied @array)->status() == DB_NOTFOUND ;
$array[1] = 2 ;
$array[10] = 20 ;
@@ -259,9 +247,9 @@ umask(0) ;
$values += $v ;
++ $count ;
}
- ok 61, $count == 3 ;
- ok 62, $keys == 1011 ;
- ok 63, $values == 2022 ;
+ ok 60, $count == 3 ;
+ ok 61, $keys == 1011 ;
+ ok 62, $values == 2022 ;
# unshift isn't allowed
# eval {
@@ -273,51 +261,51 @@ umask(0) ;
$array[1] = "green" ;
$array[2] = "blue" ;
$array[4] = 2 ;
- ok 64, $array[0] eq fillout("red", $rec_len) ;
- ok 65, $cursor->c_get($k, $v, DB_FIRST) == 0 ;
- ok 66, $k == 0 ;
- ok 67, $v eq fillout("red", $rec_len) ;
- ok 68, $array[1] eq fillout("green", $rec_len) ;
- ok 69, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
- ok 70, $k == 1 ;
- ok 71, $v eq fillout("green", $rec_len) ;
- ok 72, $array[2] eq fillout("blue", $rec_len) ;
- ok 73, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
- ok 74, $k == 2 ;
- ok 75, $v eq fillout("blue", $rec_len) ;
- ok 76, $array[4] == 2 ;
- ok 77, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
- ok 78, $k == 4 ;
- ok 79, $v == 2 ;
+ ok 63, $array[0] eq fillout("red", $rec_len) ;
+ ok 64, $cursor->c_get($k, $v, DB_FIRST) == 0 ;
+ ok 65, $k == 0 ;
+ ok 66, $v eq fillout("red", $rec_len) ;
+ ok 67, $array[1] eq fillout("green", $rec_len) ;
+ ok 68, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok 69, $k == 1 ;
+ ok 70, $v eq fillout("green", $rec_len) ;
+ ok 71, $array[2] eq fillout("blue", $rec_len) ;
+ ok 72, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok 73, $k == 2 ;
+ ok 74, $v eq fillout("blue", $rec_len) ;
+ ok 75, $array[4] == 2 ;
+ ok 76, $cursor->c_get($k, $v, DB_NEXT) == 0 ;
+ ok 77, $k == 4 ;
+ ok 78, $v == 2 ;
# shift
- ok 80, ($FA ? shift @array : $db->shift()) eq fillout("red", $rec_len) ;
- ok 81, ($FA ? shift @array : $db->shift()) eq fillout("green", $rec_len) ;
- ok 82, ($FA ? shift @array : $db->shift()) eq fillout("blue", $rec_len) ;
- ok 83, ($FA ? shift @array : $db->shift()) == 2 ;
+ ok 79, ($FA ? shift @array : $db->shift()) eq fillout("red", $rec_len) ;
+ ok 80, ($FA ? shift @array : $db->shift()) eq fillout("green", $rec_len) ;
+ ok 81, ($FA ? shift @array : $db->shift()) eq fillout("blue", $rec_len) ;
+ ok 82, ($FA ? shift @array : $db->shift()) == 2 ;
# push
$FA ? push @array, "the", "end"
: $db->push("the", "end") ;
- ok 84, $cursor->c_get($k, $v, DB_LAST) == 0 ;
- ok 85, $k == 1002 ;
- ok 86, $v eq fillout("end", $rec_len) ;
- ok 87, $cursor->c_get($k, $v, DB_PREV) == 0 ;
- ok 88, $k == 1001 ;
- ok 89, $v eq fillout("the", $rec_len) ;
- ok 90, $cursor->c_get($k, $v, DB_PREV) == 0 ;
- ok 91, $k == 1000 ;
- ok 92, $v == 2000 ;
+ ok 83, $cursor->c_get($k, $v, DB_LAST) == 0 ;
+ ok 84, $k == 1002 ;
+ ok 85, $v eq fillout("end", $rec_len) ;
+ ok 86, $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok 87, $k == 1001 ;
+ ok 88, $v eq fillout("the", $rec_len) ;
+ ok 89, $cursor->c_get($k, $v, DB_PREV) == 0 ;
+ ok 90, $k == 1000 ;
+ ok 91, $v == 2000 ;
# pop
- ok 93, ( $FA ? pop @array : $db->pop ) eq fillout("end", $rec_len) ;
- ok 94, ( $FA ? pop @array : $db->pop ) eq fillout("the", $rec_len) ;
- ok 95, ( $FA ? pop @array : $db->pop ) == 2000 ;
+ ok 92, ( $FA ? pop @array : $db->pop ) eq fillout("end", $rec_len) ;
+ ok 93, ( $FA ? pop @array : $db->pop ) eq fillout("the", $rec_len) ;
+ ok 94, ( $FA ? pop @array : $db->pop ) == 2000 ;
# now clear the array
$FA ? @array = ()
: $db->clear() ;
- ok 96, $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
+ ok 95, $cursor->c_get($k, $v, DB_FIRST) == DB_NOTFOUND ;
undef $cursor ;
undef $db ;
@@ -331,12 +319,12 @@ umask(0) ;
my $fd ;
my $value ;
my $rec_len = 15 ;
- ok 97, my $db = tie @array, 'BerkeleyDB::Queue',
+ ok 96, my $db = tie @array, 'BerkeleyDB::Queue',
-Len => $rec_len;
- ok 98, $db->db_put(1, "some value") == 0 ;
- ok 99, $db->db_get(1, $value) == 0 ;
- ok 100, $value eq fillout("some value", $rec_len) ;
+ ok 97, $db->db_put(1, "some value") == 0 ;
+ ok 98, $db->db_get(1, $value) == 0 ;
+ ok 99, $value eq fillout("some value", $rec_len) ;
}
@@ -347,7 +335,7 @@ umask(0) ;
my $lex = new LexFile $Dfile ;
my $value ;
my $rec_len = 8 ;
- ok 101, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok 100, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
-Pad => " " ;
@@ -366,65 +354,65 @@ umask(0) ;
my $r = $db->db_put($i, $data[$i]) ;
$ret += $r ;
}
- ok 102, $ret == 0 ;
+ ok 101, $ret == 0 ;
# do a partial get
my ($pon, $off, $len) = $db->partial_set(0,2) ;
- ok 103, ! $pon && $off == 0 && $len == 0 ;
- ok 104, $db->db_get(1, $value) == 0 && $value eq "bo" ;
- ok 105, $db->db_get(2, $value) == 0 && $value eq "ho" ;
- ok 106, $db->db_get(3, $value) == 0 && $value eq "se" ;
+ ok 102, ! $pon && $off == 0 && $len == 0 ;
+ ok 103, $db->db_get(1, $value) == 0 && $value eq "bo" ;
+ ok 104, $db->db_get(2, $value) == 0 && $value eq "ho" ;
+ ok 105, $db->db_get(3, $value) == 0 && $value eq "se" ;
# do a partial get, off end of data
($pon, $off, $len) = $db->partial_set(3,2) ;
- ok 107, $pon ;
- ok 108, $off == 0 ;
- ok 109, $len == 2 ;
- ok 110, $db->db_get(1, $value) == 0 && $value eq fillout("t", 2) ;
- ok 111, $db->db_get(2, $value) == 0 && $value eq "se" ;
- ok 112, $db->db_get(3, $value) == 0 && $value eq " " ;
+ ok 106, $pon ;
+ ok 107, $off == 0 ;
+ ok 108, $len == 2 ;
+ ok 109, $db->db_get(1, $value) == 0 && $value eq fillout("t", 2) ;
+ ok 110, $db->db_get(2, $value) == 0 && $value eq "se" ;
+ ok 111, $db->db_get(3, $value) == 0 && $value eq " " ;
# switch of partial mode
($pon, $off, $len) = $db->partial_clear() ;
- ok 113, $pon ;
- ok 114, $off == 3 ;
- ok 115, $len == 2 ;
- ok 116, $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
- ok 117, $db->db_get(2, $value) == 0 && $value eq fillout("house", $rec_len) ;
- ok 118, $db->db_get(3, $value) == 0 && $value eq fillout("sea", $rec_len) ;
+ ok 112, $pon ;
+ ok 113, $off == 3 ;
+ ok 114, $len == 2 ;
+ ok 115, $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
+ ok 116, $db->db_get(2, $value) == 0 && $value eq fillout("house", $rec_len) ;
+ ok 117, $db->db_get(3, $value) == 0 && $value eq fillout("sea", $rec_len) ;
# now partial put
$db->partial_set(0,2) ;
- ok 119, $db->db_put(1, "") != 0 ;
- ok 120, $db->db_put(2, "AB") == 0 ;
- ok 121, $db->db_put(3, "XY") == 0 ;
- ok 122, $db->db_put(4, "KLM") != 0 ;
- ok 123, $db->db_put(4, "KL") == 0 ;
+ ok 118, $db->db_put(1, "") != 0 ;
+ ok 119, $db->db_put(2, "AB") == 0 ;
+ ok 120, $db->db_put(3, "XY") == 0 ;
+ ok 121, $db->db_put(4, "KLM") != 0 ;
+ ok 122, $db->db_put(4, "KL") == 0 ;
($pon, $off, $len) = $db->partial_clear() ;
- ok 124, $pon ;
- ok 125, $off == 0 ;
- ok 126, $len == 2 ;
- ok 127, $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
- ok 128, $db->db_get(2, $value) == 0 && $value eq fillout("ABuse", $rec_len) ;
- ok 129, $db->db_get(3, $value) == 0 && $value eq fillout("XYa", $rec_len) ;
- ok 130, $db->db_get(4, $value) == 0 && $value eq fillout("KL", $rec_len) ;
+ ok 123, $pon ;
+ ok 124, $off == 0 ;
+ ok 125, $len == 2 ;
+ ok 126, $db->db_get(1, $value) == 0 && $value eq fillout("boat", $rec_len) ;
+ ok 127, $db->db_get(2, $value) == 0 && $value eq fillout("ABuse", $rec_len) ;
+ ok 128, $db->db_get(3, $value) == 0 && $value eq fillout("XYa", $rec_len) ;
+ ok 129, $db->db_get(4, $value) == 0 && $value eq fillout("KL", $rec_len) ;
# now partial put
($pon, $off, $len) = $db->partial_set(3,2) ;
- ok 131, ! $pon ;
- ok 132, $off == 0 ;
- ok 133, $len == 0 ;
- ok 134, $db->db_put(1, "PP") == 0 ;
- ok 135, $db->db_put(2, "Q") != 0 ;
- ok 136, $db->db_put(3, "XY") == 0 ;
- ok 137, $db->db_put(4, "TU") == 0 ;
+ ok 130, ! $pon ;
+ ok 131, $off == 0 ;
+ ok 132, $len == 0 ;
+ ok 133, $db->db_put(1, "PP") == 0 ;
+ ok 134, $db->db_put(2, "Q") != 0 ;
+ ok 135, $db->db_put(3, "XY") == 0 ;
+ ok 136, $db->db_put(4, "TU") == 0 ;
$db->partial_clear() ;
- ok 138, $db->db_get(1, $value) == 0 && $value eq fillout("boaPP", $rec_len) ;
- ok 139, $db->db_get(2, $value) == 0 && $value eq fillout("ABuse",$rec_len) ;
- ok 140, $db->db_get(3, $value) == 0 && $value eq fillout("XYaXY", $rec_len) ;
- ok 141, $db->db_get(4, $value) == 0 && $value eq fillout("KL TU", $rec_len) ;
+ ok 137, $db->db_get(1, $value) == 0 && $value eq fillout("boaPP", $rec_len) ;
+ ok 138, $db->db_get(2, $value) == 0 && $value eq fillout("ABuse",$rec_len) ;
+ ok 139, $db->db_get(3, $value) == 0 && $value eq fillout("XYaXY", $rec_len) ;
+ ok 140, $db->db_get(4, $value) == 0 && $value eq fillout("KL TU", $rec_len) ;
}
{
@@ -435,7 +423,7 @@ umask(0) ;
my @array ;
my $value ;
my $rec_len = 8 ;
- ok 142, my $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
+ ok 141, my $db = tie @array, 'BerkeleyDB::Queue', -Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
-Pad => " " ;
@@ -455,59 +443,59 @@ umask(0) ;
$status += $db->status() ;
}
- ok 143, $status == 0 ;
+ ok 142, $status == 0 ;
# do a partial get
$db->partial_set(0,2) ;
- ok 144, $array[1] eq fillout("bo", 2) ;
- ok 145, $array[2] eq fillout("ho", 2) ;
- ok 146, $array[3] eq fillout("se", 2) ;
+ ok 143, $array[1] eq fillout("bo", 2) ;
+ ok 144, $array[2] eq fillout("ho", 2) ;
+ ok 145, $array[3] eq fillout("se", 2) ;
# do a partial get, off end of data
$db->partial_set(3,2) ;
- ok 147, $array[1] eq fillout("t", 2) ;
- ok 148, $array[2] eq fillout("se", 2) ;
- ok 149, $array[3] eq fillout("", 2) ;
+ ok 146, $array[1] eq fillout("t", 2) ;
+ ok 147, $array[2] eq fillout("se", 2) ;
+ ok 148, $array[3] eq fillout("", 2) ;
# switch of partial mode
$db->partial_clear() ;
- ok 150, $array[1] eq fillout("boat", $rec_len) ;
- ok 151, $array[2] eq fillout("house", $rec_len) ;
- ok 152, $array[3] eq fillout("sea", $rec_len) ;
+ ok 149, $array[1] eq fillout("boat", $rec_len) ;
+ ok 150, $array[2] eq fillout("house", $rec_len) ;
+ ok 151, $array[3] eq fillout("sea", $rec_len) ;
# now partial put
$db->partial_set(0,2) ;
$array[1] = "" ;
- ok 153, $db->status() != 0 ;
+ ok 152, $db->status() != 0 ;
$array[2] = "AB" ;
- ok 154, $db->status() == 0 ;
+ ok 153, $db->status() == 0 ;
$array[3] = "XY" ;
- ok 155, $db->status() == 0 ;
+ ok 154, $db->status() == 0 ;
$array[4] = "KL" ;
- ok 156, $db->status() == 0 ;
+ ok 155, $db->status() == 0 ;
$db->partial_clear() ;
- ok 157, $array[1] eq fillout("boat", $rec_len) ;
- ok 158, $array[2] eq fillout("ABuse", $rec_len) ;
- ok 159, $array[3] eq fillout("XYa", $rec_len) ;
- ok 160, $array[4] eq fillout("KL", $rec_len) ;
+ ok 156, $array[1] eq fillout("boat", $rec_len) ;
+ ok 157, $array[2] eq fillout("ABuse", $rec_len) ;
+ ok 158, $array[3] eq fillout("XYa", $rec_len) ;
+ ok 159, $array[4] eq fillout("KL", $rec_len) ;
# now partial put
$db->partial_set(3,2) ;
$array[1] = "PP" ;
- ok 161, $db->status() == 0 ;
+ ok 160, $db->status() == 0 ;
$array[2] = "Q" ;
- ok 162, $db->status() != 0 ;
+ ok 161, $db->status() != 0 ;
$array[3] = "XY" ;
- ok 163, $db->status() == 0 ;
+ ok 162, $db->status() == 0 ;
$array[4] = "TU" ;
- ok 164, $db->status() == 0 ;
+ ok 163, $db->status() == 0 ;
$db->partial_clear() ;
- ok 165, $array[1] eq fillout("boaPP", $rec_len) ;
- ok 166, $array[2] eq fillout("ABuse", $rec_len) ;
- ok 167, $array[3] eq fillout("XYaXY", $rec_len) ;
- ok 168, $array[4] eq fillout("KL TU", $rec_len) ;
+ ok 164, $array[1] eq fillout("boaPP", $rec_len) ;
+ ok 165, $array[2] eq fillout("ABuse", $rec_len) ;
+ ok 166, $array[3] eq fillout("XYaXY", $rec_len) ;
+ ok 167, $array[4] eq fillout("KL TU", $rec_len) ;
}
{
@@ -518,13 +506,13 @@ umask(0) ;
my $value ;
my $home = "./fred" ;
- ok 169, my $lexD = new LexDir($home);
+ ok 168, my $lexD = new LexDir($home);
my $rec_len = 9 ;
- ok 170, my $env = new BerkeleyDB::Env -Home => $home,
+ ok 169, my $env = new BerkeleyDB::Env -Home => $home,
-Flags => DB_CREATE|DB_INIT_TXN|
DB_INIT_MPOOL|DB_INIT_LOCK ;
- ok 171, my $txn = $env->txn_begin() ;
- ok 172, my $db1 = tie @array, 'BerkeleyDB::Queue',
+ ok 170, my $txn = $env->txn_begin() ;
+ ok 171, my $db1 = tie @array, 'BerkeleyDB::Queue',
-Filename => $Dfile,
-ArrayBase => 0,
-Flags => DB_CREATE ,
@@ -534,8 +522,8 @@ umask(0) ;
-Pad => " " ;
- ok 173, $txn->txn_commit() == 0 ;
- ok 174, $txn = $env->txn_begin() ;
+ ok 172, $txn->txn_commit() == 0 ;
+ ok 173, $txn = $env->txn_begin() ;
$db1->Txn($txn);
# create some data
@@ -550,31 +538,31 @@ umask(0) ;
for ($i = 0 ; $i < @data ; ++$i) {
$ret += $db1->db_put($i, $data[$i]) ;
}
- ok 175, $ret == 0 ;
+ ok 174, $ret == 0 ;
# should be able to see all the records
- ok 176, my $cursor = $db1->db_cursor() ;
+ ok 175, my $cursor = $db1->db_cursor() ;
my ($k, $v) = (0, "") ;
my $count = 0 ;
# sequence forwards
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
++ $count ;
}
- ok 177, $count == 3 ;
+ ok 176, $count == 3 ;
undef $cursor ;
# now abort the transaction
- ok 178, $txn->txn_abort() == 0 ;
+ ok 177, $txn->txn_abort() == 0 ;
# there shouldn't be any records in the database
$count = 0 ;
# sequence forwards
- ok 179, $cursor = $db1->db_cursor() ;
+ ok 178, $cursor = $db1->db_cursor() ;
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
++ $count ;
}
- ok 180, $count == 0 ;
+ ok 179, $count == 0 ;
undef $txn ;
undef $cursor ;
@@ -592,7 +580,7 @@ umask(0) ;
my @array ;
my ($k, $v) ;
my $rec_len = 7 ;
- ok 181, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
+ ok 180, my $db = new BerkeleyDB::Queue -Filename => $Dfile,
-Flags => DB_CREATE,
-Pagesize => 4 * 1024,
-Len => $rec_len,
@@ -600,8 +588,8 @@ umask(0) ;
;
my $ref = $db->db_stat() ;
- ok 182, $ref->{$recs} == 0;
- ok 183, $ref->{'qs_pagesize'} == 4 * 1024;
+ ok 181, $ref->{$recs} == 0;
+ ok 182, $ref->{'qs_pagesize'} == 4 * 1024;
# create some data
my @data = (
@@ -615,10 +603,10 @@ umask(0) ;
for ($i = $db->ArrayOffset ; @data ; ++$i) {
$ret += $db->db_put($i, shift @data) ;
}
- ok 184, $ret == 0 ;
+ ok 183, $ret == 0 ;
$ref = $db->db_stat() ;
- ok 185, $ref->{$recs} == 3;
+ ok 184, $ref->{$recs} == 3;
}
{
@@ -638,7 +626,7 @@ umask(0) ;
require Exporter ;
use BerkeleyDB;
- @ISA=qw(BerkeleyDB::Queue);
+ @ISA=qw(BerkeleyDB BerkeleyDB::Queue);
@EXPORT = @BerkeleyDB::EXPORT ;
sub db_put {
@@ -669,7 +657,7 @@ EOM
BEGIN { push @INC, '.'; }
eval 'use SubDB ; ';
- main::ok 186, $@ eq "" ;
+ main::ok 185, $@ eq "" ;
my @h ;
my $X ;
my $rec_len = 34 ;
@@ -682,24 +670,24 @@ EOM
);
' ;
- main::ok 187, $@ eq "" ;
+ main::ok 186, $@ eq "" ;
my $ret = eval '$h[1] = 3 ; return $h[1] ' ;
- main::ok 188, $@ eq "" ;
- main::ok 189, $ret == 7 ;
+ main::ok 187, $@ eq "" ;
+ main::ok 188, $ret == 7 ;
my $value = 0;
$ret = eval '$X->db_put(1, 4) ; $X->db_get(1, $value) ; return $value' ;
- main::ok 190, $@ eq "" ;
- main::ok 191, $ret == 10 ;
+ main::ok 189, $@ eq "" ;
+ main::ok 190, $ret == 10 ;
$ret = eval ' DB_NEXT eq main::DB_NEXT ' ;
- main::ok 192, $@ eq "" ;
- main::ok 193, $ret == 1 ;
+ main::ok 191, $@ eq "" ;
+ main::ok 192, $ret == 1 ;
$ret = eval '$X->A_new_method(1) ' ;
- main::ok 194, $@ eq "" ;
- main::ok 195, $ret eq "[[10]]" ;
+ main::ok 193, $@ eq "" ;
+ main::ok 194, $ret eq "[[10]]" ;
undef $X ;
untie @h ;
@@ -714,7 +702,7 @@ EOM
my @array ;
my $value ;
my $rec_len = 21 ;
- ok 196, my $db = tie @array, 'BerkeleyDB::Queue',
+ ok 195, my $db = tie @array, 'BerkeleyDB::Queue',
-Filename => $Dfile,
-Flags => DB_CREATE ,
-Len => $rec_len,
@@ -725,9 +713,9 @@ EOM
$array[3] = "ghi" ;
my $k = 0 ;
- ok 197, $db->db_put($k, "fred", DB_APPEND) == 0 ;
- ok 198, $k == 4 ;
- ok 199, $array[4] eq fillout("fred", $rec_len) ;
+ ok 196, $db->db_put($k, "fred", DB_APPEND) == 0 ;
+ ok 197, $k == 4 ;
+ ok 198, $array[4] eq fillout("fred", $rec_len) ;
undef $db ;
untie @array ;
@@ -739,7 +727,7 @@ EOM
my @array ;
my $db ;
my $rec_len = 21 ;
- ok 200, $db = tie @array, 'BerkeleyDB::Queue',
+ ok 199, $db = tie @array, 'BerkeleyDB::Queue',
-Flags => DB_CREATE ,
-ArrayBase => 0,
-Len => $rec_len,
@@ -748,7 +736,7 @@ EOM
$FA ? push @array, "first"
: $db->push("first") ;
- ok 201, ($FA ? pop @array : $db->pop()) eq fillout("first", $rec_len) ;
+ ok 200, ($FA ? pop @array : $db->pop()) eq fillout("first", $rec_len) ;
undef $db;
untie @array ;
diff --git a/db/perl/BerkeleyDB/t/recno.t b/db/perl/BerkeleyDB/t/recno.t
index 64b1803f7..74e9d3100 100644
--- a/db/perl/BerkeleyDB/t/recno.t
+++ b/db/perl/BerkeleyDB/t/recno.t
@@ -578,7 +578,7 @@ umask(0) ;
require Exporter ;
use BerkeleyDB;
- @ISA=qw(BerkeleyDB::Recno);
+ @ISA=qw(BerkeleyDB BerkeleyDB::Recno);
@EXPORT = @BerkeleyDB::EXPORT ;
sub db_put {
diff --git a/db/perl/BerkeleyDB/t/strict.t b/db/perl/BerkeleyDB/t/strict.t
index ab41d44cb..b873da18b 100644
--- a/db/perl/BerkeleyDB/t/strict.t
+++ b/db/perl/BerkeleyDB/t/strict.t
@@ -113,6 +113,8 @@ umask(0);
eval { $db->db_close() ; } ;
ok 24, $@ =~ /BerkeleyDB Aborting: attempted to close a database while a transaction was still open at/ ;
#print "[$@]\n" ;
+ $txn->txn_abort();
+ $db->db_close();
}
{
@@ -147,6 +149,7 @@ umask(0);
my $lex = new LexFile $Dfile ;
my %hash ;
my $status ;
+ my $home = 'fred1';
ok 33, my $lexD = new LexDir($home);
ok 34, my $env = new BerkeleyDB::Env -Home => $home,
diff --git a/db/perl/BerkeleyDB/t/subdb.t b/db/perl/BerkeleyDB/t/subdb.t
index 23016d646..4e56332eb 100644
--- a/db/perl/BerkeleyDB/t/subdb.t
+++ b/db/perl/BerkeleyDB/t/subdb.t
@@ -15,7 +15,7 @@ use t::util ;
BEGIN
{
if ($BerkeleyDB::db_version < 3) {
- print "1..0 # Skipping test, this needs Berkeley DB 3.x or better\n" ;
+ print "1..0 # Skip: this needs Berkeley DB 3.x or better\n" ;
exit 0 ;
}
}
diff --git a/db/perl/BerkeleyDB/t/util.pm b/db/perl/BerkeleyDB/t/util.pm
index 1a1449751..63c1d28fc 100644
--- a/db/perl/BerkeleyDB/t/util.pm
+++ b/db/perl/BerkeleyDB/t/util.pm
@@ -122,6 +122,16 @@ $FA = 0 ;
}
}
+sub normalise
+{
+ my $data = shift ;
+ $data =~ s#\r\n#\n#g
+ if $^O eq 'cygwin' ;
+
+ return $data ;
+}
+
+
sub docat
{
my $file = shift;
@@ -129,6 +139,7 @@ sub docat
open(CAT,$file) || die "Cannot open $file:$!";
my $result = <CAT>;
close(CAT);
+ $result = normalise($result);
return $result;
}
@@ -140,6 +151,7 @@ sub docat_del
my $result = <CAT> || "" ;
close(CAT);
unlink $file ;
+ $result = normalise($result);
return $result;
}
@@ -176,6 +188,41 @@ sub joiner
(scalar(@data), join($sep, @data)) ;
}
+sub joinkeys
+{
+ my $db = shift ;
+ my $sep = shift || " " ;
+ my ($k, $v) = (0, "") ;
+ my @data = () ;
+
+ my $cursor = $db->db_cursor() or return () ;
+ for ( my $status = $cursor->c_get($k, $v, DB_FIRST) ;
+ $status == 0 ;
+ $status = $cursor->c_get($k, $v, DB_NEXT)) {
+ push @data, $k ;
+ }
+
+ return join($sep, @data) ;
+
+}
+
+sub dumpdb
+{
+ my $db = shift ;
+ my $sep = shift || " " ;
+ my ($k, $v) = (0, "") ;
+ my @data = () ;
+
+ my $cursor = $db->db_cursor() or return () ;
+ for ( my $status = $cursor->c_get($k, $v, DB_FIRST) ;
+ $status == 0 ;
+ $status = $cursor->c_get($k, $v, DB_NEXT)) {
+ print " [$k][$v]\n" ;
+ }
+
+
+}
+
sub countRecords
{
my $db = shift ;
@@ -217,4 +264,59 @@ sub ok
}
+# These two subs lifted directly from MLDBM.pm
+#
+sub _compare {
+ use vars qw(%compared);
+ local %compared;
+ return _cmp(@_);
+}
+
+sub _cmp {
+ my($a, $b) = @_;
+
+ # catch circular loops
+ return(1) if $compared{$a.'&*&*&*&*&*'.$b}++;
+# print "$a $b\n";
+# print &Data::Dumper::Dumper($a, $b);
+
+ if(ref($a) and ref($a) eq ref($b)) {
+ if(eval { @$a }) {
+# print "HERE ".@$a." ".@$b."\n";
+ @$a == @$b or return 0;
+# print @$a, ' ', @$b, "\n";
+# print "HERE2\n";
+
+ for(0..@$a-1) {
+ &_cmp($a->[$_], $b->[$_]) or return 0;
+ }
+ } elsif(eval { %$a }) {
+ keys %$a == keys %$b or return 0;
+ for (keys %$a) {
+ &_cmp($a->{$_}, $b->{$_}) or return 0;
+ }
+ } elsif(eval { $$a }) {
+ &_cmp($$a, $$b) or return 0;
+ } else {
+ die("data $a $b not handled");
+ }
+ return 1;
+ } elsif(! ref($a) and ! ref($b)) {
+ return ($a eq $b);
+ } else {
+ return 0;
+ }
+
+}
+
+sub fillout
+{
+ my $var = shift ;
+ my $length = shift ;
+ my $pad = shift || " " ;
+ my $template = $pad x $length ;
+ substr($template, 0, length($var)) = $var ;
+ return $template ;
+}
+
1;
diff --git a/db/perl/BerkeleyDB/typemap b/db/perl/BerkeleyDB/typemap
index 81ead2c36..96685a3b1 100644
--- a/db/perl/BerkeleyDB/typemap
+++ b/db/perl/BerkeleyDB/typemap
@@ -2,7 +2,7 @@
#
# SCCS: %I%, %G%
#
-# written by Paul Marquess <Paul.Marquess@btinternet.com>
+# written by Paul Marquess <pmqs@cpan.org>
#
#################################### DB SECTION
#
@@ -61,6 +61,7 @@ BerkeleyDB_TxnMgr_type * T_IV
BerkeleyDB_Txn_type * T_IV
BerkeleyDB__Cursor_type * T_IV
DB * T_IV
+DB_ENV * T_IV
INPUT
@@ -173,46 +174,56 @@ T_PTROBJ_AV
croak(\"$var is not of type ${ntype}\")
T_dbtkeydatum
- DBM_ckFilter($arg, filter_store_key, \"filter_store_key\");
- DBT_clear($var) ;
- if (db->recno_or_queue) {
- Value = GetRecnoKey(db, SvIV($arg)) ;
- $var.data = & Value;
- $var.size = (int)sizeof(db_recno_t);
- }
- else {
- $var.data = SvPV($arg, PL_na);
- $var.size = (int)PL_na;
+ {
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
+ DBT_clear($var) ;
+ if (db->recno_or_queue) {
+ Value = GetRecnoKey(db, SvIV(my_sv)) ;
+ $var.data = & Value;
+ $var.size = (int)sizeof(db_recno_t);
+ }
+ else {
+ $var.data = SvPV(my_sv, PL_na);
+ $var.size = (int)PL_na;
+ }
}
T_dbtkeydatum_btree
- DBM_ckFilter($arg, filter_store_key, \"filter_store_key\");
- DBT_clear($var) ;
- if (db->recno_or_queue ||
- (db->type == DB_BTREE && flagSet(DB_SET_RECNO))) {
- Value = GetRecnoKey(db, SvIV($arg)) ;
- $var.data = & Value;
- $var.size = (int)sizeof(db_recno_t);
- }
- else {
- $var.data = SvPV($arg, PL_na);
- $var.size = (int)PL_na;
+ {
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_key, \"filter_store_key\");
+ DBT_clear($var) ;
+ if (db->recno_or_queue ||
+ (db->type == DB_BTREE && flagSet(DB_SET_RECNO))) {
+ Value = GetRecnoKey(db, SvIV(my_sv)) ;
+ $var.data = & Value;
+ $var.size = (int)sizeof(db_recno_t);
+ }
+ else {
+ $var.data = SvPV(my_sv, PL_na);
+ $var.size = (int)PL_na;
+ }
}
T_dbtdatum
- DBM_ckFilter($arg, filter_store_value, \"filter_store_value\");
- DBT_clear($var) ;
- $var.data = SvPV($arg, PL_na);
- $var.size = (int)PL_na;
- $var.flags = db->partial ;
- $var.dlen = db->dlen ;
- $var.doff = db->doff ;
+ {
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
+ DBT_clear($var) ;
+ $var.data = SvPV(my_sv, PL_na);
+ $var.size = (int)PL_na;
+ $var.flags = db->partial ;
+ $var.dlen = db->dlen ;
+ $var.doff = db->doff ;
+ }
T_dbtdatum_opt
DBT_clear($var) ;
if (flagSet(DB_GET_BOTH)) {
- DBM_ckFilter($arg, filter_store_value, \"filter_store_value\");
- $var.data = SvPV($arg, PL_na);
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
+ $var.data = SvPV(my_sv, PL_na);
$var.size = (int)PL_na;
$var.flags = db->partial ;
$var.dlen = db->dlen ;
@@ -222,8 +233,9 @@ T_dbtdatum_opt
T_dbtdatum_btree
DBT_clear($var) ;
if (flagSet(DB_GET_BOTH)) {
- DBM_ckFilter($arg, filter_store_value, \"filter_store_value\");
- $var.data = SvPV($arg, PL_na);
+ SV* my_sv = $arg ;
+ DBM_ckFilter(my_sv, filter_store_value, \"filter_store_value\");
+ $var.data = SvPV(my_sv, PL_na);
$var.size = (int)PL_na;
$var.flags = db->partial ;
$var.dlen = db->dlen ;
diff --git a/db/perl/DB_File/Changes b/db/perl/DB_File/Changes
index 7883cbdfe..848d26a85 100644
--- a/db/perl/DB_File/Changes
+++ b/db/perl/DB_File/Changes
@@ -1,4 +1,21 @@
+1.807 1st November 2003
+
+ * Fixed minor typos on pod documetation - reported by Jeremy Mates &
+ Mark Jason Dominus.
+
+ * dbinfo updated to report when a database is encrypted.
+
+1.806 22nd October 2002
+
+ * Fixed problem when trying to build with a multi-threaded perl.
+
+ * Tidied up the recursion detetion code.
+
+ * merged core patch 17844 - missing dTHX declarations.
+
+ * merged core patch 17838
+
1.805 1st September 2002
* Added support to allow DB_File to build with Berkeley DB 4.1.X
diff --git a/db/perl/DB_File/DB_File.pm b/db/perl/DB_File/DB_File.pm
index 49004ffa1..54e0b527b 100644
--- a/db/perl/DB_File/DB_File.pm
+++ b/db/perl/DB_File/DB_File.pm
@@ -1,10 +1,10 @@
# DB_File.pm -- Perl 5 interface to Berkeley DB
#
-# written by Paul Marquess (Paul.Marquess@btinternet.com)
-# last modified 1st September 2002
-# version 1.805
+# written by Paul Marquess (pmqs@cpan.org)
+# last modified 22nd October 2002
+# version 1.807
#
-# Copyright (c) 1995-2002 Paul Marquess. All rights reserved.
+# Copyright (c) 1995-2003 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
@@ -165,7 +165,7 @@ our ($db_version, $use_XSLoader, $splice_end_array);
use Carp;
-$VERSION = "1.805" ;
+$VERSION = "1.807" ;
{
local $SIG{__WARN__} = sub {$splice_end_array = "@_";};
@@ -966,7 +966,7 @@ Duplicate keys are entirely defined by the comparison function.
In the case-insensitive example above, the keys: 'KEY' and 'key'
would be considered duplicates, and assigning to the second one
would overwrite the first. If duplicates are allowed for (with the
-R_DUPS flag discussed below), only a single copy of duplicate keys
+R_DUP flag discussed below), only a single copy of duplicate keys
is stored in the database --- so (again with example above) assigning
three values to the keys: 'KEY', 'Key', and 'key' would leave just
the first key: 'KEY' in the database with three values. For some
@@ -1362,7 +1362,7 @@ still have bval default to C<"\n"> for variable length records, and
space for fixed length records.
Also note that the bval option only allows you to specify a single byte
-as a delimeter.
+as a delimiter.
=head2 A Simple Example
@@ -1454,7 +1454,7 @@ Returns the number of elements in the array.
=item B<$X-E<gt>splice(offset, length, elements);>
-Returns a splice of the the array.
+Returns a splice of the array.
=back
@@ -2252,7 +2252,7 @@ compile properly on IRIX 5.3.
=head1 COPYRIGHT
-Copyright (c) 1995-2002 Paul Marquess. All rights reserved. This program
+Copyright (c) 1995-2003 Paul Marquess. All rights reserved. This program
is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
@@ -2284,7 +2284,7 @@ L<dbmfilter>
=head1 AUTHOR
The DB_File interface was written by Paul Marquess
-E<lt>Paul.Marquess@btinternet.comE<gt>.
+E<lt>pmqs@cpan.org<gt>.
Questions about the DB system itself may be addressed to
E<lt>db@sleepycat.com<gt>.
diff --git a/db/perl/DB_File/DB_File.xs b/db/perl/DB_File/DB_File.xs
index fba8dede7..3f097de8d 100644
--- a/db/perl/DB_File/DB_File.xs
+++ b/db/perl/DB_File/DB_File.xs
@@ -2,13 +2,13 @@
DB_File.xs -- Perl 5 interface to Berkeley DB
- written by Paul Marquess <Paul.Marquess@btinternet.com>
- last modified 1st September 2002
- version 1.805
+ written by Paul Marquess <pmqs@cpan.org>
+ last modified 22nd October 2002
+ version 1.807
All comments/suggestions/problems are welcome
- Copyright (c) 1995-2002 Paul Marquess. All rights reserved.
+ Copyright (c) 1995-2003 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
@@ -105,6 +105,8 @@
1.805 - recursion detection added to the callbacks
Support for 4.1.X added.
Filter code can now cope with read-only $_
+ 1.806 - recursion detection beefed up.
+ 1.807 - no change
*/
@@ -505,7 +507,6 @@ u_int flags ;
static void
tidyUp(DB_File db)
{
- /* db_DESTROY(db); */
db->aborted = TRUE ;
}
@@ -543,7 +544,6 @@ const DBT * key2 ;
void * data1, * data2 ;
int retval ;
int count ;
- DB_File keep_CurrentDB = CurrentDB;
if (CurrentDB->in_compare) {
@@ -567,6 +567,10 @@ const DBT * key2 ;
ENTER ;
SAVETMPS;
+ SAVESPTR(CurrentDB);
+ CurrentDB->in_compare = FALSE;
+ SAVEINT(CurrentDB->in_compare);
+ CurrentDB->in_compare = TRUE;
PUSHMARK(SP) ;
EXTEND(SP,2) ;
@@ -574,13 +578,8 @@ const DBT * key2 ;
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- CurrentDB->in_compare = TRUE;
-
count = perl_call_sv(CurrentDB->compare, G_SCALAR);
- CurrentDB = keep_CurrentDB;
- CurrentDB->in_compare = FALSE;
-
SPAGAIN ;
if (count != 1){
@@ -630,7 +629,6 @@ const DBT * key2 ;
char * data1, * data2 ;
int retval ;
int count ;
- DB_File keep_CurrentDB = CurrentDB;
if (CurrentDB->in_prefix){
tidyUp(CurrentDB);
@@ -653,6 +651,10 @@ const DBT * key2 ;
ENTER ;
SAVETMPS;
+ SAVESPTR(CurrentDB);
+ CurrentDB->in_prefix = FALSE;
+ SAVEINT(CurrentDB->in_prefix);
+ CurrentDB->in_prefix = TRUE;
PUSHMARK(SP) ;
EXTEND(SP,2) ;
@@ -660,13 +662,8 @@ const DBT * key2 ;
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- CurrentDB->in_prefix = TRUE;
-
count = perl_call_sv(CurrentDB->prefix, G_SCALAR);
- CurrentDB = keep_CurrentDB;
- CurrentDB->in_prefix = FALSE;
-
SPAGAIN ;
if (count != 1){
@@ -719,9 +716,8 @@ HASH_CB_SIZE_TYPE size ;
#endif
dSP ;
dMY_CXT;
- int retval ;
+ int retval = 0;
int count ;
- DB_File keep_CurrentDB = CurrentDB;
if (CurrentDB->in_hash){
tidyUp(CurrentDB);
@@ -736,19 +732,19 @@ HASH_CB_SIZE_TYPE size ;
/* DGH - Next two lines added to fix corrupted stack problem */
ENTER ;
SAVETMPS;
+ SAVESPTR(CurrentDB);
+ CurrentDB->in_hash = FALSE;
+ SAVEINT(CurrentDB->in_hash);
+ CurrentDB->in_hash = TRUE;
PUSHMARK(SP) ;
+
XPUSHs(sv_2mortal(newSVpvn((char*)data,size)));
PUTBACK ;
- keep_CurrentDB->in_hash = TRUE;
-
count = perl_call_sv(CurrentDB->hash, G_SCALAR);
- CurrentDB = keep_CurrentDB;
- CurrentDB->in_hash = FALSE;
-
SPAGAIN ;
if (count != 1){
@@ -765,6 +761,7 @@ HASH_CB_SIZE_TYPE size ;
return (retval) ;
}
+#if 0
static void
#ifdef CAN_PROTOTYPE
db_errcall_cb(const char * db_errpfx, char * buffer)
@@ -774,6 +771,9 @@ const char * db_errpfx;
char * buffer;
#endif
{
+#ifdef dTHX
+ dTHX;
+#endif
SV * sv = perl_get_sv(ERR_BUFF, FALSE) ;
if (sv) {
if (db_errpfx)
@@ -782,6 +782,7 @@ char * buffer;
sv_setpv(sv, buffer) ;
}
}
+#endif
#if defined(TRACE) && defined(BERKELEY_DB_1_OR_2)
@@ -817,7 +818,7 @@ INFO * recno ;
printf (" cachesize = %d\n", recno->db_RE_cachesize) ;
printf (" psize = %d\n", recno->db_RE_psize) ;
printf (" lorder = %d\n", recno->db_RE_lorder) ;
- printf (" reclen = %ul\n", (unsigned long)recno->db_RE_reclen) ;
+ printf (" reclen = %lu\n", (unsigned long)recno->db_RE_reclen) ;
printf (" bval = %d 0x%x\n", recno->db_RE_bval, recno->db_RE_bval) ;
printf (" bfname = %d [%s]\n", recno->db_RE_bfname, recno->db_RE_bfname) ;
}
@@ -1428,7 +1429,7 @@ SV * sv ;
/* printf("open returned %d %s\n", status, db_strerror(status)) ; */
if (status == 0) {
- RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;
+ /* RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;*/
status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
0) ;
@@ -1455,7 +1456,10 @@ INCLUDE: constants.xs
BOOT:
{
- SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ;
+#ifdef dTHX
+ dTHX;
+#endif
+ /* SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ; */
MY_CXT_INIT;
__getBerkeleyDBInfo() ;
diff --git a/db/perl/DB_File/MANIFEST b/db/perl/DB_File/MANIFEST
index b3e1a7bd8..06b70ee68 100644
--- a/db/perl/DB_File/MANIFEST
+++ b/db/perl/DB_File/MANIFEST
@@ -28,3 +28,4 @@ t/db-hash.t
t/db-recno.t
typemap
version.c
+META.yml Module meta-data (added by MakeMaker)
diff --git a/db/perl/DB_File/META.yml b/db/perl/DB_File/META.yml
new file mode 100644
index 000000000..7c8ad993d
--- /dev/null
+++ b/db/perl/DB_File/META.yml
@@ -0,0 +1,10 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: DB_File
+version: 1.807
+version_from: DB_File.pm
+installdirs: site
+requires:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
diff --git a/db/perl/DB_File/Makefile.PL b/db/perl/DB_File/Makefile.PL
index 4c1565d8d..8bb3598f5 100644
--- a/db/perl/DB_File/Makefile.PL
+++ b/db/perl/DB_File/Makefile.PL
@@ -214,7 +214,7 @@ sub ParseCONFIG
$INC_DIR = $ENV{'DB_FILE_INCLUDE'} || $Info{'INCLUDE'} ;
$LIB_DIR = $ENV{'DB_FILE_LIB'} || $Info{'LIB'} ;
- $DB_NAME = $Info{'DBNAME'} if defined $Info{'DBNAME'} ;
+ $DB_NAME = $ENV{'DB_FILE_NAME'} || $Info{'DBNAME'} ;
$COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API"
if (defined $ENV{'DB_FILE_COMPAT185'} &&
$ENV{'DB_FILE_COMPAT185'} =~ /^\s*(on|true|1)\s*$/i) ||
diff --git a/db/perl/DB_File/README b/db/perl/DB_File/README
index b09aa9d8a..b0693335b 100644
--- a/db/perl/DB_File/README
+++ b/db/perl/DB_File/README
@@ -1,10 +1,10 @@
DB_File
- Version 1.805
+ Version 1.807
- 1st Sep 2002
+ 1st Nov 2003
- Copyright (c) 1995-2002 Paul Marquess. All rights reserved. This
+ Copyright (c) 1995-2003 Paul Marquess. All rights reserved. This
program is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
@@ -96,6 +96,12 @@ INSTALLATION
make install
+UPDATES
+=======
+
+The most recent version of DB_File is always available at
+
+ http://www.cpan.org/modules/by-module/DB_File/
TROUBLESHOOTING
===============
@@ -220,6 +226,78 @@ Solution: Setting the LIB & INCLUDE variables in config.in to point to the
below.
+Solaris build fails with "language optional software package not installed"
+---------------------------------------------------------------------------
+
+If you are trying to build this module under Solaris and you get an
+error message like this
+
+ /usr/ucb/cc: language optional software package not installed
+
+it means that Perl cannot find the C compiler on your system. The cryptic
+message is just Sun's way of telling you that you haven't bought their
+C compiler.
+
+When you build a Perl module that needs a C compiler, the Perl build
+system tries to use the same C compiler that was used to build perl
+itself. In this case your Perl binary was built with a C compiler that
+lived in /usr/ucb.
+
+To continue with building this module, you need to get a C compiler,
+or tell Perl where your C compiler is, if you already have one.
+
+Assuming you have now got a C compiler, what you do next will be dependant
+on what C compiler you have installed. If you have just installed Sun's
+C compiler, you shouldn't have to do anything. Just try rebuilding
+this module.
+
+If you have installed another C compiler, say gcc, you have to tell perl
+how to use it instead of /usr/ucb/cc.
+
+This set of options seems to work if you want to use gcc. Your mileage
+may vary.
+
+ perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" "
+ make test
+
+If that doesn't work for you, it's time to make changes to the Makefile
+by hand. Good luck!
+
+
+
+Solaris build fails with "gcc: unrecognized option `-KPIC'"
+-----------------------------------------------------------
+
+You are running Solaris and you get an error like this when you try to
+build this Perl module
+
+ gcc: unrecognized option `-KPIC'
+
+This symptom usually means that you are using a Perl binary that has been
+built with the Sun C compiler, but you are using gcc to build this module.
+
+When Perl builds modules that need a C compiler, it will attempt to use
+the same C compiler and command line options that was used to build perl
+itself. In this case "-KPIC" is a valid option for the Sun C compiler,
+but not for gcc. The equivalent option for gcc is "-fPIC".
+
+The solution is either:
+
+ 1. Build both Perl and this module with the same C compiler, either
+ by using the Sun C compiler for both or gcc for both.
+
+ 2. Try generating the Makefile for this module like this perl
+
+ perl Makefile.PL CC=gcc CCCDLFLAGS=-fPIC OPTIMIZE=" " LD=gcc
+ make test
+
+ This second option seems to work when mixing a Perl binary built
+ with the Sun C compiler and this module built with gcc. Your
+ mileage may vary.
+
+
+
+
Linux Notes
-----------
@@ -381,7 +459,15 @@ to compile properly on IRIX 5.3.
FEEDBACK
========
+General feedback/questions/bug reports can be sent to me at pmqs@cpan.org.
+
+Alternatively, if you have Usenet access, you can try the
+comp.databases.berkeley-db or comp.lang.perl.modules groups.
+
+
+
How to report a problem with DB_File.
+-------------------------------------
When reporting any problem, I need the information requested below.
@@ -401,6 +487,10 @@ When reporting any problem, I need the information requested below.
perl -e 'use DB_File; print qq{DB_File ver $DB_File::VERSION\n}'
+ If you are running windows use this
+
+ perl -e "use DB_File; print qq{DB_File ver $DB_File::VERSION\n}"
+
If you haven't installed DB_File then search DB_File.pm for a line
like this:
@@ -416,6 +506,10 @@ When reporting any problem, I need the information requested below.
perl -e 'use DB_File; print qq{Berkeley DB ver $DB_File::db_ver\n}'
+ If you are running windows use this
+
+ perl -e "use DB_File; print qq{Berkeley DB ver $DB_File::db_ver\n}"
+
4. A copy the file config.in from the DB_File main source directory.
5. A listing of directories where Berkeley DB is installed.
@@ -455,4 +549,4 @@ CHANGES
See the Changes file.
-Paul Marquess <Paul.Marquess@btinternet.com>
+Paul Marquess <pmqs@cpan.org>
diff --git a/db/perl/DB_File/dbinfo b/db/perl/DB_File/dbinfo
index af2c45fac..421d36c62 100644
--- a/db/perl/DB_File/dbinfo
+++ b/db/perl/DB_File/dbinfo
@@ -4,10 +4,10 @@
# a database file
#
# Author: Paul Marquess <Paul.Marquess@btinternet.com>
-# Version: 1.03
-# Date 17th September 2000
+# Version: 1.05
+# Date 1sh November 2003
#
-# Copyright (c) 1998-2002 Paul Marquess. All rights reserved.
+# Copyright (c) 1998-2003 Paul Marquess. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
@@ -22,39 +22,39 @@ my %Data =
Type => "Btree",
Versions =>
{
- 1 => "Unknown (older than 1.71)",
- 2 => "Unknown (older than 1.71)",
- 3 => "1.71 -> 1.85, 1.86",
- 4 => "Unknown",
- 5 => "2.0.0 -> 2.3.0",
- 6 => "2.3.1 -> 2.7.7",
- 7 => "3.0.x",
- 8 => "3.1.x -> 4.0.x",
- 9 => "4.1.x or greater",
+ 1 => [0, "Unknown (older than 1.71)"],
+ 2 => [0, "Unknown (older than 1.71)"],
+ 3 => [0, "1.71 -> 1.85, 1.86"],
+ 4 => [0, "Unknown"],
+ 5 => [0, "2.0.0 -> 2.3.0"],
+ 6 => [0, "2.3.1 -> 2.7.7"],
+ 7 => [0, "3.0.x"],
+ 8 => [0, "3.1.x -> 4.0.x"],
+ 9 => [1, "4.1.x or greater"],
}
},
0x061561 => {
Type => "Hash",
Versions =>
{
- 1 => "Unknown (older than 1.71)",
- 2 => "1.71 -> 1.85",
- 3 => "1.86",
- 4 => "2.0.0 -> 2.1.0",
- 5 => "2.2.6 -> 2.7.7",
- 6 => "3.0.x",
- 7 => "3.1.x -> 4.0.x",
- 8 => "4.1.x or greater",
+ 1 => [0, "Unknown (older than 1.71)"],
+ 2 => [0, "1.71 -> 1.85"],
+ 3 => [0, "1.86"],
+ 4 => [0, "2.0.0 -> 2.1.0"],
+ 5 => [0, "2.2.6 -> 2.7.7"],
+ 6 => [0, "3.0.x"],
+ 7 => [0, "3.1.x -> 4.0.x"],
+ 8 => [1, "4.1.x or greater"],
}
},
0x042253 => {
Type => "Queue",
Versions =>
{
- 1 => "3.0.x",
- 2 => "3.1.x",
- 3 => "3.2.x -> 4.0.x",
- 4 => "4.1.x or greater",
+ 1 => [0, "3.0.x"],
+ 2 => [0, "3.1.x"],
+ 3 => [0, "3.2.x -> 4.0.x"],
+ 4 => [1, "4.1.x or greater"],
}
},
) ;
@@ -65,17 +65,26 @@ print "testing file $ARGV[0]...\n\n" ;
open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!\n" ;
my $buff ;
-read F, $buff, 20 ;
+read F, $buff, 30 ;
-my (@info) = unpack("NNNNN", $buff) ;
-my (@info1) = unpack("VVVVV", $buff) ;
-my ($magic, $version, $endian) ;
-if ($Data{$info[0]}) # first try DB 1.x format
+my (@info) = unpack("NNNNNNC", $buff) ;
+my (@info1) = unpack("VVVVVVC", $buff) ;
+my ($magic, $version, $endian, $encrypt) ;
+
+if ($Data{$info[0]}) # first try DB 1.x format, big endian
{
$magic = $info[0] ;
$version = $info[1] ;
- $endian = "Unknown" ;
+ $endian = "Big Endian" ;
+ $encrypt = "Not Supported";
+}
+elsif ($Data{$info1[0]}) # first try DB 1.x format, little endian
+{
+ $magic = $info1[0] ;
+ $version = $info1[1] ;
+ $endian = "Little Endian" ;
+ $encrypt = "Not Supported";
}
elsif ($Data{$info[3]}) # next DB 2.x big endian
{
@@ -96,8 +105,15 @@ my $type = $Data{$magic} ;
$magic = sprintf "%06X", $magic ;
my $ver_string = "Unknown" ;
-$ver_string = $type->{Versions}{$version}
- if defined $type->{Versions}{$version} ;
+
+if ( defined $type->{Versions}{$version} )
+{
+ $ver_string = $type->{Versions}{$version}[1];
+ if ($type->{Versions}{$version}[0] )
+ { $encrypt = $info[6] ? "Enabled" : "Disabled" }
+ else
+ { $encrypt = "Not Supported" }
+}
print <<EOM ;
File Type: Berkeley DB $type->{Type} file.
@@ -105,6 +121,7 @@ File Version ID: $version
Built with Berkeley DB: $ver_string
Byte Order: $endian
Magic: $magic
+Encryption: $encrypt
EOM
close F ;
diff --git a/db/perl/DB_File/patches/5.004 b/db/perl/DB_File/patches/5.004
index 143ec95af..0665d1f6c 100644
--- a/db/perl/DB_File/patches/5.004
+++ b/db/perl/DB_File/patches/5.004
@@ -1,44 +1,93 @@
-diff perl5.004.orig/Configure perl5.004/Configure
-190a191
-> perllibs=''
-9904a9906,9913
-> : Remove libraries needed only for extensions
-> : The appropriate ext/Foo/Makefile.PL will add them back in, if
-> : necessary.
-> set X `echo " $libs " |
-> sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
-> shift
-> perllibs="$*"
->
-10372a10382
-> perllibs='$perllibs'
-diff perl5.004.orig/Makefile.SH perl5.004/Makefile.SH
-122c122
-< libs = $libs $cryptlib
----
-> libs = $perllibs $cryptlib
-Common subdirectories: perl5.004.orig/Porting and perl5.004/Porting
-Common subdirectories: perl5.004.orig/cygwin32 and perl5.004/cygwin32
-Common subdirectories: perl5.004.orig/eg and perl5.004/eg
-Common subdirectories: perl5.004.orig/emacs and perl5.004/emacs
-Common subdirectories: perl5.004.orig/ext and perl5.004/ext
-Common subdirectories: perl5.004.orig/h2pl and perl5.004/h2pl
-Common subdirectories: perl5.004.orig/hints and perl5.004/hints
-Common subdirectories: perl5.004.orig/lib and perl5.004/lib
-diff perl5.004.orig/myconfig perl5.004/myconfig
-38c38
-< libs=$libs
----
-> libs=$perllibs
-Common subdirectories: perl5.004.orig/os2 and perl5.004/os2
-diff perl5.004.orig/patchlevel.h perl5.004/patchlevel.h
-40a41
-> ,"NODB-1.0 - remove -ldb from core perl binary."
-Common subdirectories: perl5.004.orig/plan9 and perl5.004/plan9
-Common subdirectories: perl5.004.orig/pod and perl5.004/pod
-Common subdirectories: perl5.004.orig/qnx and perl5.004/qnx
-Common subdirectories: perl5.004.orig/t and perl5.004/t
-Common subdirectories: perl5.004.orig/utils and perl5.004/utils
-Common subdirectories: perl5.004.orig/vms and perl5.004/vms
-Common subdirectories: perl5.004.orig/win32 and perl5.004/win32
-Common subdirectories: perl5.004.orig/x2p and perl5.004/x2p
+diff -rc perl5.004.orig/Configure perl5.004/Configure
+*** perl5.004.orig/Configure 1997-05-13 18:20:34.000000000 +0100
+--- perl5.004/Configure 2003-04-26 16:36:53.000000000 +0100
+***************
+*** 188,193 ****
+--- 188,194 ----
+ mv=''
+ nroff=''
+ perl=''
++ perllibs=''
+ pg=''
+ pmake=''
+ pr=''
+***************
+*** 9902,9907 ****
+--- 9903,9916 ----
+ shift
+ extensions="$*"
+
++ : Remove libraries needed only for extensions
++ : The appropriate ext/Foo/Makefile.PL will add them back in, if
++ : necessary.
++ set X `echo " $libs " |
++ sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'`
++ shift
++ perllibs="$*"
++
+ : Remove build directory name from cppstdin so it can be used from
+ : either the present location or the final installed location.
+ echo " "
+***************
+*** 10370,10375 ****
+--- 10379,10385 ----
+ patchlevel='$patchlevel'
+ path_sep='$path_sep'
+ perl='$perl'
++ perllibs='$perllibs'
+ perladmin='$perladmin'
+ perlpath='$perlpath'
+ pg='$pg'
+diff -rc perl5.004.orig/Makefile.SH perl5.004/Makefile.SH
+*** perl5.004.orig/Makefile.SH 1997-05-01 15:22:39.000000000 +0100
+--- perl5.004/Makefile.SH 2003-04-26 16:37:23.000000000 +0100
+***************
+*** 119,125 ****
+ ext = \$(dynamic_ext) \$(static_ext)
+ DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
+
+! libs = $libs $cryptlib
+
+ public = perl $suidperl utilities translators
+
+--- 119,125 ----
+ ext = \$(dynamic_ext) \$(static_ext)
+ DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
+
+! libs = $perllibs $cryptlib
+
+ public = perl $suidperl utilities translators
+
+diff -rc perl5.004.orig/myconfig perl5.004/myconfig
+*** perl5.004.orig/myconfig 1996-12-21 01:13:20.000000000 +0000
+--- perl5.004/myconfig 2003-04-26 16:37:51.000000000 +0100
+***************
+*** 35,41 ****
+ Linker and Libraries:
+ ld='$ld', ldflags ='$ldflags'
+ libpth=$libpth
+! libs=$libs
+ libc=$libc, so=$so
+ useshrplib=$useshrplib, libperl=$libperl
+ Dynamic Linking:
+--- 35,41 ----
+ Linker and Libraries:
+ ld='$ld', ldflags ='$ldflags'
+ libpth=$libpth
+! libs=$perllibs
+ libc=$libc, so=$so
+ useshrplib=$useshrplib, libperl=$libperl
+ Dynamic Linking:
+diff -rc perl5.004.orig/patchlevel.h perl5.004/patchlevel.h
+*** perl5.004.orig/patchlevel.h 1997-05-15 23:15:17.000000000 +0100
+--- perl5.004/patchlevel.h 2003-04-26 16:38:11.000000000 +0100
+***************
+*** 38,43 ****
+--- 38,44 ----
+ */
+ static char *local_patches[] = {
+ NULL
++ ,"NODB-1.0 - remove -ldb from core perl binary."
+ ,NULL
+ };
+
diff --git a/db/perl/DB_File/t/db-btree.t b/db/perl/DB_File/t/db-btree.t
index a990a5c4b..643e8fba5 100644
--- a/db/perl/DB_File/t/db-btree.t
+++ b/db/perl/DB_File/t/db-btree.t
@@ -24,7 +24,7 @@ BEGIN {
&& $Config{db_version_patch} == 0) {
warn <<EOM;
#
-# This test is known to crash in Mac OS X versions 10.1.4 (or earlier)
+# This test is known to crash in Mac OS X versions 10.2 (or earlier)
# because of the buggy Berkeley DB version included with the OS.
#
EOM
@@ -36,6 +36,8 @@ use Fcntl;
print "1..177\n";
+unlink glob "__db.*";
+
sub ok
{
my $no = shift ;
@@ -1384,28 +1386,30 @@ EOM
}
-{
- # recursion detection in btree
- my %hash ;
- unlink $Dfile;
- my $dbh = new DB_File::BTREEINFO ;
- $dbh->{compare} = sub { $hash{3} = 4 ; length $_[0] } ;
-
-
- my (%h);
- ok(164, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
-
- eval { $hash{1} = 2;
- $hash{4} = 5;
- };
-
- ok(165, $@ =~ /^DB_File btree_compare: recursion detected/);
- {
- no warnings;
- untie %hash;
- }
- unlink $Dfile;
-}
+#{
+# # recursion detection in btree
+# my %hash ;
+# unlink $Dfile;
+# my $dbh = new DB_File::BTREEINFO ;
+# $dbh->{compare} = sub { $hash{3} = 4 ; length $_[0] } ;
+#
+#
+# my (%h);
+# ok(164, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
+#
+# eval { $hash{1} = 2;
+# $hash{4} = 5;
+# };
+#
+# ok(165, $@ =~ /^DB_File btree_compare: recursion detected/);
+# {
+# no warnings;
+# untie %hash;
+# }
+# unlink $Dfile;
+#}
+ok(164,1);
+ok(165,1);
{
# Check that two callbacks don't interact
diff --git a/db/perl/DB_File/t/db-hash.t b/db/perl/DB_File/t/db-hash.t
index 10623cc82..5f687a75d 100644
--- a/db/perl/DB_File/t/db-hash.t
+++ b/db/perl/DB_File/t/db-hash.t
@@ -25,6 +25,8 @@ use Fcntl;
print "1..143\n";
+unlink glob "__db.*";
+
sub ok
{
my $no = shift ;
@@ -854,28 +856,32 @@ EOM
}
-{
- # recursion detection in hash
- my %hash ;
- unlink $Dfile;
- my $dbh = new DB_File::HASHINFO ;
- $dbh->{hash} = sub { $hash{3} = 4 ; length $_[0] } ;
-
-
- my (%h);
- ok(127, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
- eval { $hash{1} = 2;
- $hash{4} = 5;
- };
-
- ok(128, $@ =~ /^DB_File hash callback: recursion detected/);
- {
- no warnings;
- untie %hash;
- }
- unlink $Dfile;
-}
+#{
+# # recursion detection in hash
+# my %hash ;
+# my $Dfile = "xxx.db";
+# unlink $Dfile;
+# my $dbh = new DB_File::HASHINFO ;
+# $dbh->{hash} = sub { $hash{3} = 4 ; length $_[0] } ;
+#
+#
+# ok(127, tie(%hash, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $dbh ) );
+#
+# eval { $hash{1} = 2;
+# $hash{4} = 5;
+# };
+#
+# ok(128, $@ =~ /^DB_File hash callback: recursion detected/);
+# {
+# no warnings;
+# untie %hash;
+# }
+# unlink $Dfile;
+#}
+
+ok(127,1);
+ok(128,1);
{
# Check that two hash's don't interact
@@ -931,6 +937,7 @@ EOM
ok(137, $warn_count == 0);
$warn_count = 0;
+ untie %hash1;
unlink $Dfile;
}
@@ -940,6 +947,7 @@ EOM
use warnings ;
use strict ;
my (%h, $db) ;
+ my $Dfile = "xxy.db";
unlink $Dfile;
ok(138, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
@@ -978,4 +986,5 @@ EOM
unlink $Dfile;
}
+
exit ;
diff --git a/db/perl/DB_File/t/db-recno.t b/db/perl/DB_File/t/db-recno.t
index 5390b5493..f2cd97bbf 100644
--- a/db/perl/DB_File/t/db-recno.t
+++ b/db/perl/DB_File/t/db-recno.t
@@ -104,7 +104,7 @@ sub bad_one
print STDERR <<EOM ;
#
# Some older versions of Berkeley DB version 1 will fail db-recno
-# tests 61, 63 and 65.
+# tests 61, 63, 64 and 65.
EOM
if ($^O eq 'darwin'
&& $Config{db_version_major} == 1
@@ -112,7 +112,7 @@ EOM
&& $Config{db_version_patch} == 0) {
print STDERR <<EOM ;
#
-# For example Mac OS X 10.1.4 (or earlier) has such an old
+# For example Mac OS X 10.2 (or earlier) has such an old
# version of Berkeley DB.
EOM
}
@@ -1347,6 +1347,8 @@ sub test_splice {
. Dumper(\@array) . ' vs ' . Dumper(\@h))
if list_diff(\@array, \@h);
+ unlink $tmp;
+
return undef; # success
}
diff --git a/db/qam/qam.c b/db/qam/qam.c
index 0c9f45304..f90ccce07 100644
--- a/db/qam/qam.c
+++ b/db/qam/qam.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam.c,v 11.72 2001/01/16 20:10:55 ubell Exp $";
+static const char revid[] = "$Id: qam.c,v 11.159 2003/11/18 21:32:17 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,20 +18,21 @@ static const char revid[] = "$Id: qam.c,v 11.72 2001/01/16 20:10:55 ubell Exp $"
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_am.h"
-#include "mp.h"
-#include "lock.h"
-#include "log.h"
-#include "btree.h"
-#include "qam.h"
-
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/btree.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+
+static int __qam_bulk __P((DBC *, DBT *, u_int32_t));
static int __qam_c_close __P((DBC *, db_pgno_t, int *));
static int __qam_c_del __P((DBC *));
static int __qam_c_destroy __P((DBC *));
static int __qam_c_get __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
static int __qam_c_put __P((DBC *, DBT *, DBT *, u_int32_t, db_pgno_t *));
+static int __qam_consume __P((DBC *, QMETA *, db_recno_t));
static int __qam_getno __P((DB *, const DBT *, db_recno_t *));
/*
@@ -61,17 +62,16 @@ __qam_position(dbc, recnop, mode, exactp)
pg = QAM_RECNO_PAGE(dbp, *recnop);
if ((ret = __db_lget(dbc, 0, pg, mode == QAM_READ ?
- DB_LOCK_READ : DB_LOCK_WRITE, 0, &cp->lock)) != 0)
+ DB_LOCK_READ : DB_LOCK_WRITE, 0, &cp->lock)) != 0)
return (ret);
cp->page = NULL;
*exactp = 0;
if ((ret = __qam_fget(dbp, &pg,
- mode == QAM_WRITE ? DB_MPOOL_CREATE : 0,
- &cp->page)) != 0) {
+ mode == QAM_WRITE ? DB_MPOOL_CREATE : 0, &cp->page)) != 0) {
/* We did not fetch it, we can release the lock. */
(void)__LPUT(dbc, cp->lock);
- cp->lock.off = LOCK_INVALID;
- if (mode != QAM_WRITE && (ret == EINVAL || ret == ENOENT))
+ if (mode != QAM_WRITE &&
+ (ret == DB_PAGE_NOTFOUND || ret == ENOENT))
return (0);
return (ret);
}
@@ -88,7 +88,7 @@ __qam_position(dbc, recnop, mode, exactp)
}
qp = QAM_GET_RECORD(dbp, cp->page, cp->indx);
- *exactp = F_ISSET(qp, QAM_VALID);
+ *exactp = F_ISSET(qp, QAM_VALID) ? 1 : 0;
return (ret);
}
@@ -112,38 +112,36 @@ __qam_pitem(dbc, pagep, indx, recno, data)
db_recno_t recno;
DBT *data;
{
+ DB_ENV *dbenv;
DB *dbp;
DBT olddata, pdata, *datap;
QAMDATA *qp;
QUEUE *t;
- u_int32_t size;
u_int8_t *dest, *p;
int alloced, ret;
- alloced = ret = 0;
-
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
t = (QUEUE *)dbp->q_internal;
+ alloced = ret = 0;
if (data->size > t->re_len)
- goto len_err;
-
+ return (__db_rec_toobig(dbenv, data->size, t->re_len));
qp = QAM_GET_RECORD(dbp, pagep, indx);
p = qp->data;
- size = data->size;
datap = data;
if (F_ISSET(data, DB_DBT_PARTIAL)) {
if (data->doff + data->dlen > t->re_len) {
- alloced = data->dlen;
- goto len_err;
- }
- if (data->size != data->dlen) {
-len_err: __db_err(dbp->dbenv,
- "Length improper for fixed length record %lu",
- (u_long)(alloced ? alloced : data->size));
+ __db_err(dbenv,
+ "%s: data offset plus length larger than record size of %lu",
+ "Record length error", (u_long)t->re_len);
return (EINVAL);
}
+
+ if (data->size != data->dlen)
+ return (__db_rec_repl(dbenv, data->size, data->dlen));
+
if (data->size == t->re_len)
goto no_partial;
@@ -159,12 +157,12 @@ len_err: __db_err(dbp->dbenv,
* to log so that both this and the recovery code is simpler.
*/
- if (DB_LOGGING(dbc) || !F_ISSET(qp, QAM_VALID)) {
+ if (DBC_LOGGING(dbc) || !F_ISSET(qp, QAM_VALID)) {
datap = &pdata;
memset(datap, 0, sizeof(*datap));
- if ((ret = __os_malloc(dbp->dbenv,
- t->re_len, NULL, &datap->data)) != 0)
+ if ((ret = __os_malloc(dbenv,
+ t->re_len, &datap->data)) != 0)
return (ret);
alloced = 1;
datap->size = t->re_len;
@@ -188,14 +186,14 @@ len_err: __db_err(dbp->dbenv,
}
no_partial:
- if (DB_LOGGING(dbc)) {
+ if (DBC_LOGGING(dbc)) {
olddata.size = 0;
if (F_ISSET(qp, QAM_SET)) {
olddata.data = qp->data;
olddata.size = t->re_len;
}
- if ((ret = __qam_add_log(dbp->dbenv, dbc->txn, &LSN(pagep),
- 0, dbp->log_fileid, &LSN(pagep), pagep->pgno,
+ if ((ret = __qam_add_log(dbp, dbc->txn, &LSN(pagep),
+ 0, &LSN(pagep), pagep->pgno,
indx, recno, datap, qp->flags,
olddata.size == 0 ? NULL : &olddata)) != 0)
goto err;
@@ -207,7 +205,7 @@ no_partial:
memset(p + datap->size, t->re_pad, t->re_len - datap->size);
err: if (alloced)
- __os_free(datap->data, t->re_len);
+ __os_free(dbenv, datap->data);
return (ret);
}
@@ -223,23 +221,37 @@ __qam_c_put(dbc, key, data, flags, pgnop)
u_int32_t flags;
db_pgno_t *pgnop;
{
- QUEUE_CURSOR *cp;
DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
QMETA *meta;
+ QUEUE_CURSOR *cp;
db_pgno_t pg;
db_recno_t new_cur, new_first;
u_int32_t opcode;
int exact, ret, t_ret;
- COMPQUIET(key, NULL);
-
dbp = dbc->dbp;
+ mpf = dbp->mpf;
if (pgnop != NULL)
*pgnop = PGNO_INVALID;
cp = (QUEUE_CURSOR *)dbc->internal;
+ switch (flags) {
+ case DB_KEYFIRST:
+ case DB_KEYLAST:
+ if ((ret = __qam_getno(dbp, key, &cp->recno)) != 0)
+ return (ret);
+ /* FALLTHROUGH */
+ case DB_CURRENT:
+ break;
+ default:
+ /* The interface shouldn't let anything else through. */
+ DB_ASSERT(0);
+ return (__db_ferr(dbp->dbenv, "__qam_c_put", flags));
+ }
+
/* Write lock the record. */
if ((ret = __db_lget(dbc,
0, cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock)) != 0)
@@ -252,29 +264,14 @@ __qam_c_put(dbc, key, data, flags, pgnop)
return (ret);
}
- if (exact && flags == DB_NOOVERWRITE) {
- ret = __TLPUT(dbc, lock);
- /* Doing record locking, release the page lock */
- if ((t_ret = __LPUT(dbc, cp->lock)) == 0)
- cp->lock.off = LOCK_INVALID;
- else
- if (ret == 0)
- ret = t_ret;
- if ((t_ret =
- __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0 && ret == 0)
- ret = t_ret;
- cp->page = NULL;
- return (ret == 0 ? DB_KEYEXIST : ret);
- }
-
/* Put the item on the page. */
ret = __qam_pitem(dbc, (QPAGE *)cp->page, cp->indx, cp->recno, data);
/* Doing record locking, release the page lock */
if ((t_ret = __LPUT(dbc, cp->lock)) != 0 && ret == 0)
ret = t_ret;
- if ((t_ret =
- __qam_fput(dbp, cp->pgno, cp->page, DB_MPOOL_DIRTY)) && ret == 0)
+ if ((t_ret = __qam_fput(
+ dbp, cp->pgno, cp->page, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
cp->page = NULL;
cp->lock = lock;
@@ -284,11 +281,15 @@ __qam_c_put(dbc, key, data, flags, pgnop)
/* We may need to reset the head or tail of the queue. */
pg = ((QUEUE *)dbp->q_internal)->q_meta;
- if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0)
+
+ /*
+ * Get the meta page first, we don't want to write lock it while
+ * trying to pin it.
+ */
+ if ((ret = __memp_fget(mpf, &pg, 0, &meta)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &meta)) != 0) {
- /* We did not fetch it, we can release the lock. */
- (void)__LPUT(dbc, lock);
+ if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0) {
+ (void)__memp_fput(mpf, meta, 0);
return (ret);
}
@@ -313,7 +314,8 @@ __qam_c_put(dbc, key, data, flags, pgnop)
} else {
if (QAM_BEFORE_FIRST(meta, cp->recno) &&
(meta->first_recno <= meta->cur_recno ||
- meta->first_recno - cp->recno < cp->recno - meta->cur_recno)) {
+ meta->first_recno - cp->recno <
+ cp->recno - meta->cur_recno)) {
new_first = cp->recno;
opcode |= QAM_SETFIRST;
}
@@ -321,7 +323,8 @@ __qam_c_put(dbc, key, data, flags, pgnop)
if (meta->cur_recno == cp->recno ||
(QAM_AFTER_CURRENT(meta, cp->recno) &&
(meta->first_recno <= meta->cur_recno ||
- cp->recno - meta->cur_recno <= meta->first_recno - cp->recno))) {
+ cp->recno - meta->cur_recno <=
+ meta->first_recno - cp->recno))) {
new_cur = cp->recno + 1;
if (new_cur == RECNO_OOB)
new_cur++;
@@ -329,10 +332,12 @@ __qam_c_put(dbc, key, data, flags, pgnop)
}
}
- if (opcode != 0 && DB_LOGGING(dbc)) {
- ret = __qam_mvptr_log(dbp->dbenv, dbc->txn, &meta->dbmeta.lsn,
- 0, opcode, dbp->log_fileid, meta->first_recno, new_first,
- meta->cur_recno, new_cur, &meta->dbmeta.lsn);
+ if (opcode != 0 && DBC_LOGGING(dbc)) {
+ ret = __qam_mvptr_log(dbp, dbc->txn, &meta->dbmeta.lsn,
+ 0, opcode, meta->first_recno, new_first,
+ meta->cur_recno, new_cur, &meta->dbmeta.lsn, PGNO_BASE_MD);
+ if (ret != 0)
+ opcode = 0;
}
if (opcode & QAM_SETCUR)
@@ -340,9 +345,8 @@ __qam_c_put(dbc, key, data, flags, pgnop)
if (opcode & QAM_SETFIRST)
meta->first_recno = new_first;
- if ((t_ret =
- memp_fput(dbp->mpf, meta, opcode != 0 ? DB_MPOOL_DIRTY : 0)) != 0 &&
- ret == 0)
+ if ((t_ret = __memp_fput(
+ mpf, meta, opcode != 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
ret = t_ret;
/* Don't hold the meta page long term. */
@@ -352,70 +356,42 @@ __qam_c_put(dbc, key, data, flags, pgnop)
}
/*
- * __qam_put --
- * Add a record to the queue.
- * If we are doing anything but appending, just call qam_c_put to do the
- * work. Otherwise we fast path things here.
+ * __qam_append --
+ * Perform a put(DB_APPEND) in queue.
*
- * PUBLIC: int __qam_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ * PUBLIC: int __qam_append __P((DBC *, DBT *, DBT *));
*/
int
-__qam_put(dbp, txn, key, data, flags)
- DB *dbp;
- DB_TXN *txn;
+__qam_append(dbc, key, data)
+ DBC *dbc;
DBT *key, *data;
- u_int32_t flags;
{
- QUEUE_CURSOR *cp;
- DBC *dbc;
+ DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
QMETA *meta;
QPAGE *page;
QUEUE *qp;
+ QUEUE_CURSOR *cp;
db_pgno_t pg;
db_recno_t recno;
int ret, t_ret;
- PANIC_CHECK(dbp->dbenv);
- DB_CHECK_TXN(dbp, txn);
-
- /* Allocate a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
-
- DEBUG_LWRITE(dbc, dbc->txn, "qam_put", key, data, flags);
-
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (QUEUE_CURSOR *)dbc->internal;
- /* Check for invalid flags. */
- if ((ret = __db_putchk(dbp,
- key, data, flags, F_ISSET(dbp, DB_AM_RDONLY), 0)) != 0)
- goto done;
-
- /* If not appending, then just call the cursor routine */
- if (flags != DB_APPEND) {
- if ((ret = __qam_getno(dbp, key, &cp->recno)) != 0)
- goto done;
-
- ret = __qam_c_put(dbc, NULL, data, flags, NULL);
- goto done;
- }
-
- /* Write lock the meta page. */
pg = ((QUEUE *)dbp->q_internal)->q_meta;
- if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0)
- goto done;
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &meta)) != 0) {
- /* We did not fetch it, we can release the lock. */
- (void)__LPUT(dbc, lock);
- goto done;
- }
-
- /* Record that we are going to allocate a record. */
- if (DB_LOGGING(dbc)) {
- __qam_inc_log(dbp->dbenv,
- dbc->txn, &meta->dbmeta.lsn,
- 0, dbp->log_fileid, &meta->dbmeta.lsn);
+ /*
+ * Get the meta page first, we don't want to write lock it while
+ * trying to pin it.
+ */
+ if ((ret = __memp_fget(mpf, &pg, 0, &meta)) != 0)
+ return (ret);
+ /* Write lock the meta page. */
+ if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0) {
+ (void)__memp_fput(mpf, meta, 0);
+ return (ret);
}
/* Get the next record number. */
@@ -436,16 +412,24 @@ __qam_put(dbp, txn, key, data, flags)
meta->first_recno = recno;
/* Lock the record and release meta page lock. */
- if ((ret = __db_lget(dbc,
- 1, recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock)) != 0)
- goto err;
+ ret = __db_lget(dbc, LCK_COUPLE_ALWAYS,
+ recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock);
/*
* The application may modify the data based on the selected record
- * number.
+ * number. We always want to call this even if we ultimately end
+ * up aborting, because we are allocating a record number, regardless.
*/
- if (flags == DB_APPEND && dbc->dbp->db_append_recno != NULL &&
- (ret = dbc->dbp->db_append_recno(dbc->dbp, data, recno)) != 0) {
+ if (dbc->dbp->db_append_recno != NULL &&
+ (t_ret = dbc->dbp->db_append_recno(dbc->dbp, data, recno)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+
+ /*
+ * Capture errors from either the lock couple or the call to
+ * dbp->db_append_recno.
+ */
+ if (ret != 0) {
(void)__LPUT(dbc, lock);
goto err;
}
@@ -484,16 +468,20 @@ __qam_put(dbp, txn, key, data, flags)
/* Return the record number to the user. */
if (ret == 0)
- ret = __db_retcopy(dbp, key,
- &recno, sizeof(recno), &dbc->rkey.data, &dbc->rkey.ulen);
+ ret = __db_retcopy(dbp->dbenv, key,
+ &recno, sizeof(recno), &dbc->rkey->data, &dbc->rkey->ulen);
+
+ /* Position the cursor on this record. */
+ cp->recno = recno;
/* See if we are leaving the extent. */
qp = (QUEUE *) dbp->q_internal;
- if (qp->page_ext != 0
- && (recno % (qp->page_ext * qp->rec_page) == 0
- || recno == UINT32_T_MAX)) {
- if ((ret =
- __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &lock)) != 0)
+ if (qp->page_ext != 0 &&
+ (recno % (qp->page_ext * qp->rec_page) == 0 ||
+ recno == UINT32_T_MAX)) {
+ if ((ret = __db_lget(dbc,
+ 0, ((QUEUE *)dbp->q_internal)->q_meta,
+ DB_LOCK_WRITE, 0, &lock)) != 0)
goto err;
if (!QAM_AFTER_CURRENT(meta, recno))
ret = __qam_fclose(dbp, pg);
@@ -502,13 +490,7 @@ __qam_put(dbp, txn, key, data, flags)
err:
/* Release the meta page. */
- if ((t_ret
- = memp_fput(dbp->mpf, meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
- ret = t_ret;
-
-done:
- /* Discard the cursor. */
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0 && ret == 0)
ret = t_ret;
return (ret);
@@ -522,50 +504,57 @@ static int
__qam_c_del(dbc)
DBC *dbc;
{
- QUEUE_CURSOR *cp;
DB *dbp;
DBT data;
- DB_LOCK lock;
+ DB_LOCK lock, metalock;
+ DB_MPOOLFILE *mpf;
PAGE *pagep;
QAMDATA *qp;
QMETA *meta;
+ QUEUE_CURSOR *cp;
db_pgno_t pg;
+ db_recno_t first;
int exact, ret, t_ret;
dbp = dbc->dbp;
+ mpf = dbp->mpf;
cp = (QUEUE_CURSOR *)dbc->internal;
pg = ((QUEUE *)dbp->q_internal)->q_meta;
- if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_READ, 0, &lock)) != 0)
+ /*
+ * Get the meta page first, we don't want to write lock it while
+ * trying to pin it.
+ */
+ if ((ret = __memp_fget(mpf, &pg, 0, &meta)) != 0)
return (ret);
- if ((ret = memp_fget(dbp->mpf, &pg, 0, &meta)) != 0) {
- /* We did not fetch it, we can release the lock. */
- (void)__LPUT(dbc, lock);
+ /* Write lock the meta page. */
+ if ((ret = __db_lget(dbc, 0, pg, DB_LOCK_READ, 0, &metalock)) != 0) {
+ (void)__memp_fput(mpf, meta, 0);
return (ret);
}
if (QAM_NOT_VALID(meta, cp->recno))
ret = DB_NOTFOUND;
+ first = meta->first_recno;
+
/* Don't hold the meta page long term. */
- if ((t_ret = __LPUT(dbc, lock)) != 0 && ret == 0)
- ret = t_ret;
- if ((t_ret = memp_fput(dbp->mpf, meta, 0)) != 0 && ret == 0)
+ if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
ret = t_ret;
if (ret != 0)
- return (ret);
+ goto err1;
if ((ret = __db_lget(dbc,
0, cp->recno, DB_LOCK_WRITE, DB_LOCK_RECORD, &lock)) != 0)
- return (ret);
+ goto err1;
cp->lock_mode = DB_LOCK_WRITE;
/* Find the record ; delete only deletes exact matches. */
if ((ret = __qam_position(dbc,
&cp->recno, QAM_WRITE, &exact)) != 0) {
cp->lock = lock;
- return (ret);
+ goto err1;
}
if (!exact) {
ret = DB_NOTFOUND;
@@ -575,21 +564,18 @@ __qam_c_del(dbc)
pagep = cp->page;
qp = QAM_GET_RECORD(dbp, pagep, cp->indx);
- if (DB_LOGGING(dbc)) {
- if (((QUEUE *)dbp->q_internal)->page_ext == 0
- || ((QUEUE *)dbp->q_internal)->re_len == 0) {
- if ((ret =
- __qam_del_log(dbp->dbenv,
- dbc->txn, &LSN(pagep), 0,
- dbp->log_fileid, &LSN(pagep),
+ if (DBC_LOGGING(dbc)) {
+ if (((QUEUE *)dbp->q_internal)->page_ext == 0 ||
+ ((QUEUE *)dbp->q_internal)->re_len == 0) {
+ if ((ret = __qam_del_log(dbp,
+ dbc->txn, &LSN(pagep), 0, &LSN(pagep),
pagep->pgno, cp->indx, cp->recno)) != 0)
goto err1;
} else {
data.size = ((QUEUE *)dbp->q_internal)->re_len;
data.data = qp->data;
- if ((ret =
- __qam_delext_log(dbp->dbenv, dbc->txn,
- &LSN(pagep), 0, dbp->log_fileid, &LSN(pagep),
+ if ((ret = __qam_delext_log(dbp,
+ dbc->txn, &LSN(pagep), 0, &LSN(pagep),
pagep->pgno, cp->indx, cp->recno, &data)) != 0)
goto err1;
}
@@ -597,60 +583,28 @@ __qam_c_del(dbc)
F_CLR(qp, QAM_VALID);
-err1:
- if ((t_ret = __qam_fput(
- dbp, cp->pgno, cp->page, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0)
- return (ret ? ret : t_ret);
- cp->page = NULL;
- /* Doing record locking, release the page lock */
- if ((t_ret = __LPUT(dbc, cp->lock)) != 0) {
- cp->lock = lock;
- return (ret ? ret : t_ret);
+ if (cp->recno == first) {
+ pg = ((QUEUE *)dbp->q_internal)->q_meta;
+ if ((ret =
+ __db_lget(dbc, 0, pg, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ goto err1;
+ ret = __qam_consume(dbc, meta, first);
+ if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
+ ret = t_ret;
}
- cp->lock = lock;
- return (ret);
-}
-/*
- * __qam_delete --
- * Queue db->del function.
- *
- * PUBLIC: int __qam_delete __P((DB *, DB_TXN *, DBT *, u_int32_t));
- */
-int
-__qam_delete(dbp, txn, key, flags)
- DB *dbp;
- DB_TXN *txn;
- DBT *key;
- u_int32_t flags;
-{
- QUEUE_CURSOR *cp;
- DBC *dbc;
- int ret, t_ret;
-
- PANIC_CHECK(dbp->dbenv);
- DB_CHECK_TXN(dbp, txn);
-
- /* Check for invalid flags. */
- if ((ret =
- __db_delchk(dbp, key, flags, F_ISSET(dbp, DB_AM_RDONLY))) != 0)
- return (ret);
-
- /* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, txn, &dbc, DB_WRITELOCK)) != 0)
- return (ret);
-
- DEBUG_LWRITE(dbc, txn, "qam_delete", key, NULL, flags);
-
- cp = (QUEUE_CURSOR *)dbc->internal;
- if ((ret = __qam_getno(dbp, key, &cp->recno)) != 0)
- goto err;
-
- ret = __qam_c_del(dbc);
+err1:
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if (cp->page != NULL && (t_ret = __qam_fput(dbp, cp->pgno,
+ cp->page, ret == 0 ? DB_MPOOL_DIRTY : 0)) != 0 && ret == 0)
+ ret = t_ret;
+ cp->page = NULL;
- /* Release the cursor. */
-err: if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ /* Doing record locking, release the page lock */
+ if ((t_ret = __LPUT(dbc, cp->lock)) != 0 && ret == 0)
ret = t_ret;
+ cp->lock = lock;
return (ret);
}
@@ -671,39 +625,41 @@ __qam_c_get(dbc, key, data, flags, pgnop)
db_pgno_t *pgnop;
{
DB *dbp;
- DB_LOCK lock, pglock, metalock, save_lock;
+ DBC *dbcdup;
DBT tmp;
+ DB_ENV *dbenv;
+ DB_LOCK lock, pglock, metalock;
+ DB_MPOOLFILE *mpf;
PAGE *pg;
QAMDATA *qp;
QMETA *meta;
QUEUE *t;
QUEUE_CURSOR *cp;
- db_indx_t save_indx;
db_lockmode_t lock_mode;
- db_pgno_t metapno, save_page;
- db_recno_t current, first, save_recno;
+ db_pgno_t metapno;
+ db_recno_t first;
qam_position_mode mode;
- u_int32_t rec_extent;
int exact, is_first, locked, ret, t_ret, wait, with_delete;
- int put_mode, meta_dirty, retrying, skip_again, wrapped;
+ int put_mode, retrying;
- cp = (QUEUE_CURSOR *)dbc->internal;
dbp = dbc->dbp;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ cp = (QUEUE_CURSOR *)dbc->internal;
- PANIC_CHECK(dbp->dbenv);
+ PANIC_CHECK(dbenv);
wait = 0;
with_delete = 0;
retrying = 0;
- rec_extent = 0;
lock_mode = DB_LOCK_READ;
- mode = QAM_READ;
+ meta = NULL;
put_mode = 0;
t_ret = 0;
*pgnop = 0;
pg = NULL;
- skip_again = 0;
+ mode = QAM_READ;
if (F_ISSET(dbc, DBC_RMW)) {
lock_mode = DB_LOCK_WRITE;
mode = QAM_WRITE;
@@ -714,7 +670,6 @@ __qam_c_get(dbc, key, data, flags, pgnop)
flags = DB_CONSUME;
}
if (flags == DB_CONSUME) {
- DB_CHECK_TXN(dbp, dbc->txn);
with_delete = 1;
flags = DB_FIRST;
lock_mode = DB_LOCK_WRITE;
@@ -724,30 +679,29 @@ __qam_c_get(dbc, key, data, flags, pgnop)
DEBUG_LREAD(dbc, dbc->txn, "qam_c_get",
flags == DB_SET || flags == DB_SET_RANGE ? key : NULL, NULL, flags);
+ /* Make lint and friends happy. */
+ locked = 0;
+
is_first = 0;
t = (QUEUE *)dbp->q_internal;
- /* get the meta page */
metapno = t->q_meta;
- if ((ret = __db_lget(dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
+
+ /*
+ * Get the meta page first, we don't want to write lock it while
+ * trying to pin it. This is because someone my have it pinned
+ * but not locked.
+ */
+ if ((ret = __memp_fget(mpf, &metapno, 0, &meta)) != 0)
return (ret);
+ if ((ret = __db_lget(dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
+ goto err;
locked = 1;
- if ((ret = memp_fget(dbp->mpf, &metapno, 0, &meta)) != 0) {
- /* We did not fetch it, we can release the lock. */
- (void)__LPUT(dbc, metalock);
- return (ret);
- }
first = 0;
- /* Make lint and friends happy. */
- meta_dirty = 0;
-
/* Release any previous lock if not in a transaction. */
- if (cp->lock.off != LOCK_INVALID) {
- (void)__TLPUT(dbc, cp->lock);
- cp->lock.off = LOCK_INVALID;
- }
+ (void)__TLPUT(dbc, cp->lock);
retry: /* Update the record number. */
switch (flags) {
@@ -764,6 +718,87 @@ retry: /* Update the record number. */
/* Wrap around, skipping zero. */
if (cp->recno == RECNO_OOB)
cp->recno++;
+ /*
+ * Check to see if we are out of data.
+ */
+ if (cp->recno == meta->cur_recno ||
+ QAM_AFTER_CURRENT(meta, cp->recno)) {
+ pg = NULL;
+ if (!wait) {
+ ret = DB_NOTFOUND;
+ goto err;
+ }
+ flags = DB_FIRST;
+ /*
+ * If first is not set, then we skipped
+ * a locked record, go back and find it.
+ * If we find a locked record again
+ * wait for it.
+ */
+ if (first == 0) {
+ retrying = 1;
+ goto retry;
+ }
+
+ if (CDB_LOCKING(dbenv)) {
+ /* Drop the metapage before we wait. */
+ if ((ret =
+ __memp_fput(mpf, meta, 0)) != 0)
+ goto err;
+ meta = NULL;
+ if ((ret = __lock_get(
+ dbenv, dbc->locker,
+ DB_LOCK_SWITCH, &dbc->lock_dbt,
+ DB_LOCK_WAIT, &dbc->mylock)) != 0)
+ goto err;
+
+ if ((ret = __memp_fget(mpf,
+ &metapno, 0, &meta)) != 0)
+ goto err;
+ if ((ret = __lock_get(
+ dbenv, dbc->locker,
+ DB_LOCK_UPGRADE, &dbc->lock_dbt,
+ DB_LOCK_WRITE, &dbc->mylock)) != 0)
+ goto err;
+ goto retry;
+ }
+ /*
+ * Wait for someone to update the meta page.
+ * This will probably mean there is something
+ * in the queue. We then go back up and
+ * try again.
+ */
+ if (locked == 0) {
+ if ((ret = __db_lget(dbc, 0, metapno,
+ lock_mode, 0, &metalock)) != 0)
+ goto err;
+ locked = 1;
+ if (cp->recno != RECNO_OOB &&
+ !QAM_AFTER_CURRENT(meta, cp->recno))
+ goto retry;
+ }
+ /* Drop the metapage before we wait. */
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
+ goto err;
+ meta = NULL;
+ if ((ret = __db_lget(dbc,
+ 0, metapno, DB_LOCK_WAIT,
+ DB_LOCK_SWITCH, &metalock)) != 0) {
+ if (ret == DB_LOCK_DEADLOCK)
+ ret = DB_LOCK_NOTGRANTED;
+ goto err;
+ }
+ if ((ret = __memp_fget(
+ mpf, &metapno, 0, &meta)) != 0)
+ goto err;
+ if ((ret = __lock_get(dbenv,
+ dbc->locker, DB_LOCK_UPGRADE,
+ &dbc->lock_dbt, DB_LOCK_WRITE,
+ &metalock)) != 0)
+ goto err;
+ locked = 1;
+ goto retry;
+ }
break;
}
/* FALLTHROUGH */
@@ -778,8 +813,8 @@ retry: /* Update the record number. */
case DB_PREV:
case DB_PREV_NODUP:
if (cp->recno != RECNO_OOB) {
- if (QAM_BEFORE_FIRST(meta, cp->recno)
- || cp->recno == meta->first_recno) {
+ if (cp->recno == meta->first_recno ||
+ QAM_BEFORE_FIRST(meta, cp->recno)) {
ret = DB_NOTFOUND;
goto err;
}
@@ -799,74 +834,20 @@ retry: /* Update the record number. */
if (cp->recno == RECNO_OOB)
cp->recno--;
break;
- case DB_GET_BOTH:
case DB_SET:
case DB_SET_RANGE:
- if ((ret = __qam_getno(dbp, key, &cp->recno)) != 0)
+ case DB_GET_BOTH:
+ case DB_GET_BOTH_RANGE:
+ if ((ret = __qam_getno(dbp,
+ key, &cp->recno)) != 0)
+ goto err;
+ if (QAM_NOT_VALID(meta, cp->recno)) {
+ ret = DB_NOTFOUND;
goto err;
+ }
break;
default:
- ret = __db_unknown_flag(dbp->dbenv, "__qam_c_get", flags);
- goto err;
- }
-
- /*
- * Check to see if we are out of data. Current points to
- * the first free slot.
- */
- if (cp->recno == meta->cur_recno ||
- QAM_AFTER_CURRENT(meta, cp->recno)) {
- ret = DB_NOTFOUND;
- pg = NULL;
- if (wait) {
- flags = DB_FIRST;
- /*
- * If first is not set, then we skipped a
- * locked record, go back and find it.
- * If we find a locked record again
- * wait for it.
- */
- if (first == 0) {
- retrying = 1;
- goto retry;
- }
- if (CDB_LOCKING(dbp->dbenv)) {
- if ((ret = lock_get(dbp->dbenv, dbc->locker,
- DB_LOCK_SWITCH, &dbc->lock_dbt,
- DB_LOCK_WAIT, &dbc->mylock)) != 0)
- goto err;
- if ((ret = lock_get(dbp->dbenv, dbc->locker,
- DB_LOCK_UPGRADE, &dbc->lock_dbt, DB_LOCK_WRITE,
- &dbc->mylock)) != 0)
- goto err;
- goto retry;
- }
- /*
- * Wait for someone to update the meta page.
- * This will probably mean there is something
- * in the queue. We then go back up and
- * try again.
- */
- if (locked == 0) {
- if ((ret = __db_lget( dbc,
- 0, metapno, lock_mode, 0, &metalock)) != 0)
- goto err;
- locked = 1;
- if (cp->recno != RECNO_OOB &&
- !QAM_AFTER_CURRENT(meta, cp->recno))
- goto retry;
- }
- if ((ret = __db_lget(dbc, 0, metapno,
- DB_LOCK_WAIT, DB_LOCK_SWITCH, &metalock)) != 0)
- goto err;
- if ((ret = lock_get(dbp->dbenv, dbc->locker,
- DB_LOCK_UPGRADE, &dbc->lock_dbt, DB_LOCK_WRITE,
- &metalock)) != 0)
- goto err;
- locked = 1;
- goto retry;
- }
-
+ ret = __db_unknown_flag(dbenv, "__qam_c_get", flags);
goto err;
}
@@ -881,13 +862,17 @@ retry: /* Update the record number. */
if ((ret = __db_lget(dbc, 0, cp->recno, lock_mode,
(with_delete && !retrying) ?
DB_LOCK_NOWAIT | DB_LOCK_RECORD : DB_LOCK_RECORD,
- &lock)) == DB_LOCK_NOTGRANTED && with_delete) {
+ &lock)) == DB_LOCK_DEADLOCK && with_delete) {
#ifdef QDEBUG
- __db_logmsg(dbp->dbenv,
+ __db_logmsg(dbenv,
dbc->txn, "Queue S", 0, "%x %d %d %d",
dbc->locker, cp->recno, first, meta->first_recno);
#endif
first = 0;
+ if ((ret =
+ __db_lget(dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
+ goto err;
+ locked = 1;
goto retry;
}
@@ -929,9 +914,9 @@ retry: /* Update the record number. */
cp->lock_mode = lock_mode;
if (!exact) {
- if (flags == DB_NEXT || flags == DB_NEXT_NODUP
- || flags == DB_PREV || flags == DB_PREV_NODUP
- || flags == DB_LAST) {
+ if (flags == DB_NEXT || flags == DB_NEXT_NODUP ||
+ flags == DB_PREV || flags == DB_PREV_NODUP ||
+ flags == DB_LAST) {
/* Release locks and try again. */
if (pg != NULL)
(void)__qam_fput(dbp, cp->pgno, pg, 0);
@@ -951,18 +936,20 @@ retry: /* Update the record number. */
}
/* Return the key if the user didn't give us one. */
- if (key != NULL && flags != DB_SET && flags != DB_GET_BOTH &&
- (ret = __db_retcopy(dbp, key, &cp->recno, sizeof(cp->recno),
- &dbc->rkey.data, &dbc->rkey.ulen)) != 0)
- goto err1;
-
- if (key != NULL)
+ if (key != NULL) {
+ if (flags != DB_GET_BOTH && flags != DB_GET_BOTH_RANGE &&
+ flags != DB_SET && flags != DB_SET_RANGE &&
+ (ret = __db_retcopy(dbp->dbenv,
+ key, &cp->recno, sizeof(cp->recno),
+ &dbc->rkey->data, &dbc->rkey->ulen)) != 0)
+ goto err1;
F_SET(key, DB_DBT_ISSET);
+ }
qp = QAM_GET_RECORD(dbp, pg, cp->indx);
/* Return the data item. */
- if (flags == DB_GET_BOTH) {
+ if (flags == DB_GET_BOTH || flags == DB_GET_BOTH_RANGE) {
/*
* Need to compare
*/
@@ -973,8 +960,10 @@ retry: /* Update the record number. */
goto err1;
}
}
- if (data != NULL && (ret = __db_retcopy(dbp, data,
- qp->data, t->re_len, &dbc->rdata.data, &dbc->rdata.ulen)) != 0)
+ if (data != NULL &&
+ !F_ISSET(dbc, DBC_MULTIPLE|DBC_MULTIPLE_KEY) &&
+ (ret = __db_retcopy(dbp->dbenv, data,
+ qp->data, t->re_len, &dbc->rdata->data, &dbc->rdata->ulen)) != 0)
goto err1;
if (data != NULL)
@@ -982,18 +971,53 @@ retry: /* Update the record number. */
/* Finally, if we are doing DB_CONSUME mark the record. */
if (with_delete) {
- if (DB_LOGGING(dbc)) {
+ /*
+ * Assert that we're not a secondary index. Doing a DB_CONSUME
+ * on a secondary makes very little sense, since one can't
+ * DB_APPEND there; attempting one should be forbidden by
+ * the interface.
+ */
+ DB_ASSERT(!F_ISSET(dbp, DB_AM_SECONDARY));
+
+ /*
+ * Check and see if we *have* any secondary indices.
+ * If we do, we're a primary, so call __db_c_del_primary
+ * to delete the references to the item we're about to
+ * delete.
+ *
+ * Note that we work on a duplicated cursor, since the
+ * __db_ret work has already been done, so it's not safe
+ * to perform any additional ops on this cursor.
+ */
+ if (LIST_FIRST(&dbp->s_secondaries) != NULL) {
+ if ((ret = __db_c_idup(dbc,
+ &dbcdup, DB_POSITION)) != 0)
+ goto err1;
+
+ if ((ret = __db_c_del_primary(dbcdup)) != 0) {
+ /*
+ * The __db_c_del_primary return is more
+ * interesting.
+ */
+ (void)__db_c_close(dbcdup);
+ goto err1;
+ }
+
+ if ((ret = __db_c_close(dbcdup)) != 0)
+ goto err1;
+ }
+
+ if (DBC_LOGGING(dbc)) {
if (t->page_ext == 0 || t->re_len == 0) {
- if ((ret = __qam_del_log(dbp->dbenv, dbc->txn,
- &LSN(pg), 0, dbp->log_fileid, &LSN(pg),
+ if ((ret = __qam_del_log(dbp, dbc->txn,
+ &LSN(pg), 0, &LSN(pg),
pg->pgno, cp->indx, cp->recno)) != 0)
goto err1;
} else {
tmp.data = qp->data;
tmp.size = t->re_len;
- if ((ret =
- __qam_delext_log(dbp->dbenv, dbc->txn,
- &LSN(pg), 0, dbp->log_fileid, &LSN(pg),
+ if ((ret = __qam_delext_log(dbp,
+ dbc->txn, &LSN(pg), 0, &LSN(pg),
pg->pgno, cp->indx, cp->recno, &tmp)) != 0)
goto err1;
}
@@ -1003,7 +1027,7 @@ retry: /* Update the record number. */
put_mode = DB_MPOOL_DIRTY;
if ((ret = __LPUT(dbc, pglock)) != 0)
- goto err;
+ goto err1;
/*
* Now we need to update the metapage
@@ -1021,8 +1045,9 @@ retry: /* Update the record number. */
dbc, 0, metapno, lock_mode, 0, &metalock)) != 0)
goto err1;
locked = 1;
+
#ifdef QDEBUG
- __db_logmsg(dbp->dbenv,
+ __db_logmsg(dbenv,
dbc->txn, "Queue D", 0, "%x %d %d %d",
dbc->locker, cp->recno, first, meta->first_recno);
#endif
@@ -1037,190 +1062,394 @@ retry: /* Update the record number. */
if (first != meta->first_recno)
goto done;
- save_page = cp->pgno;
- save_indx = cp->indx;
- save_recno = cp->recno;
- save_lock = cp->lock;
+ if ((ret = __qam_consume(dbc, meta, first)) != 0)
+ goto err1;
+ }
- /*
- * If we skipped some deleted records, we need to
- * reposition on the first one. Get a lock
- * in case someone is trying to put it back.
- */
- if (first != cp->recno) {
- ret = __db_lget(dbc, 0, first, DB_LOCK_READ,
- DB_LOCK_NOWAIT | DB_LOCK_RECORD, &lock);
- if (ret == DB_LOCK_NOTGRANTED) {
- ret = 0;
- goto done;
- }
- if (ret != 0)
- goto err1;
- if ((ret =
- __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
- goto err1;
- cp->page = NULL;
- put_mode = 0;
- if ((ret = __qam_position(dbc,
- &first, QAM_READ, &exact)) != 0 || exact != 0) {
- (void)__LPUT(dbc, lock);
- goto err1;
- }
- if ((ret =__LPUT(dbc, lock)) != 0)
- goto err1;
- if ((ret = __LPUT(dbc, cp->lock)) != 0)
- goto err1;
+done:
+err1: if (cp->page != NULL) {
+ t_ret = __qam_fput(dbp, cp->pgno, cp->page, put_mode);
+
+ if (!ret)
+ ret = t_ret;
+ /* Doing record locking, release the page lock */
+ t_ret = __LPUT(dbc, pglock);
+ cp->page = NULL;
+ }
+
+err: if (!ret)
+ ret = t_ret;
+ if (meta) {
+
+ /* release the meta page */
+ t_ret = __memp_fput(mpf, meta, 0);
+
+ if (!ret)
+ ret = t_ret;
+
+ /* Don't hold the meta page long term. */
+ if (locked)
+ t_ret = __LPUT(dbc, metalock);
+ }
+ DB_ASSERT(!LOCK_ISSET(metalock));
+
+ /*
+ * There is no need to keep the record locked if we are
+ * not in a transaction.
+ */
+ if (t_ret == 0)
+ t_ret = __TLPUT(dbc, cp->lock);
+
+ if (!ret)
+ ret = t_ret;
+
+ return ((ret == DB_LOCK_NOTGRANTED &&
+ !F_ISSET(dbenv, DB_ENV_TIME_NOTGRANTED)) ?
+ DB_LOCK_DEADLOCK : ret);
+}
+
+/*
+ * __qam_consume -- try to reset the head of the queue.
+ *
+ */
+
+static int
+__qam_consume(dbc, meta, first)
+ DBC *dbc;
+ QMETA *meta;
+ db_recno_t first;
+{
+ DB *dbp;
+ DB_LOCK lock, save_lock;
+ DB_MPOOLFILE *mpf;
+ QUEUE_CURSOR *cp;
+ db_indx_t save_indx;
+ db_pgno_t save_page;
+ db_recno_t current, save_recno;
+ u_int32_t rec_extent;
+ int exact, put_mode, ret, t_ret, wrapped;
+
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ cp = (QUEUE_CURSOR *)dbc->internal;
+ put_mode = DB_MPOOL_DIRTY;
+ ret = t_ret = 0;
+
+ save_page = cp->pgno;
+ save_indx = cp->indx;
+ save_recno = cp->recno;
+ save_lock = cp->lock;
+
+ /*
+ * If we skipped some deleted records, we need to
+ * reposition on the first one. Get a lock
+ * in case someone is trying to put it back.
+ */
+ if (first != cp->recno) {
+ ret = __db_lget(dbc, 0, first, DB_LOCK_READ,
+ DB_LOCK_NOWAIT | DB_LOCK_RECORD, &lock);
+ if (ret == DB_LOCK_DEADLOCK) {
+ ret = 0;
+ goto done;
}
+ if (ret != 0)
+ goto done;
+ if ((ret =
+ __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
+ goto done;
+ cp->page = NULL;
+ put_mode = 0;
+ if ((ret = __qam_position(dbc,
+ &first, QAM_READ, &exact)) != 0 || exact != 0) {
+ (void)__LPUT(dbc, lock);
+ goto done;
+ }
+ if ((ret =__LPUT(dbc, lock)) != 0)
+ goto done;
+ if ((ret = __LPUT(dbc, cp->lock)) != 0)
+ goto done;
+ }
- current = meta->cur_recno;
- wrapped = 0;
- if (first > current)
- wrapped = 1;
- rec_extent = meta->page_ext * meta->rec_page;
+ current = meta->cur_recno;
+ wrapped = 0;
+ if (first > current)
+ wrapped = 1;
+ rec_extent = meta->page_ext * meta->rec_page;
- /* Loop until we find a record or hit current */
- for (;;) {
- /*
- * Check to see if we are moving off the extent
- * and remove the extent.
- * If we are moving off a page we need to
- * get rid of the buffer.
- * Wait for the lagging readers to move off the
- * page.
- */
- if (rec_extent != 0
- && ((exact = first % rec_extent == 0)
- || first % meta->rec_page == 0
- || first == UINT32_T_MAX)) {
- if (exact == 1 && (ret = __db_lget(dbc,
- 0, cp->pgno, DB_LOCK_WRITE, 0, &cp->lock)) != 0)
- break;
+ /* Loop until we find a record or hit current */
+ for (;;) {
+ /*
+ * Check to see if we are moving off the extent
+ * and remove the extent.
+ * If we are moving off a page we need to
+ * get rid of the buffer.
+ * Wait for the lagging readers to move off the
+ * page.
+ */
+ if (cp->page != NULL && rec_extent != 0 &&
+ ((exact = (first % rec_extent == 0)) ||
+ first % meta->rec_page == 0 ||
+ first == UINT32_T_MAX)) {
+ if (exact == 1 && (ret = __db_lget(dbc,
+ 0, cp->pgno, DB_LOCK_WRITE, 0, &cp->lock)) != 0)
+ break;
#ifdef QDEBUG
- __db_logmsg(dbp->dbenv,
- dbc->txn, "Queue R", 0, "%x %d %d %d",
- dbc->locker, cp->pgno, first, meta->first_recno);
+ __db_logmsg(dbp->dbenv,
+ dbc->txn, "Queue R", 0, "%x %d %d %d",
+ dbc->locker, cp->pgno, first, meta->first_recno);
#endif
- put_mode |= DB_MPOOL_DISCARD;
- if ((ret = __qam_fput(dbp,
- cp->pgno, cp->page, put_mode)) != 0)
- break;
- cp->page = NULL;
-
- if (exact == 1) {
- ret = __qam_fremove(dbp, cp->pgno);
- t_ret = __LPUT(dbc, cp->lock);
- }
- if (ret != 0)
- break;
- if (t_ret != 0) {
- ret = t_ret;
- break;
- }
- } else if ((ret =
- __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
+ put_mode |= DB_MPOOL_DISCARD;
+ if ((ret = __qam_fput(dbp,
+ cp->pgno, cp->page, put_mode)) != 0)
break;
cp->page = NULL;
- first++;
- if (first == RECNO_OOB) {
- wrapped = 0;
- first++;
- }
-
- /*
- * LOOP EXIT when we come move to the current
- * pointer.
- */
- if (!wrapped && first >= current)
- break;
- ret = __db_lget(dbc, 0, first, DB_LOCK_READ,
- DB_LOCK_NOWAIT | DB_LOCK_RECORD, &lock);
- if (ret == DB_LOCK_NOTGRANTED) {
- ret = 0;
- break;
+ if (exact == 1) {
+ ret = __qam_fremove(dbp, cp->pgno);
+ t_ret = __LPUT(dbc, cp->lock);
}
if (ret != 0)
break;
-
- if ((ret = __qam_position(dbc,
- &first, QAM_READ, &exact)) != 0) {
- (void)__LPUT(dbc, lock);
- break;
- }
- put_mode = 0;
- if ((ret =__LPUT(dbc, lock)) != 0
- || (ret = __LPUT(dbc, cp->lock)) != 0 ||exact) {
- if ((t_ret = __qam_fput(dbp, cp->pgno,
- cp->page, put_mode)) != 0 && ret == 0)
- ret = t_ret;
- cp->page = NULL;
+ if (t_ret != 0) {
+ ret = t_ret;
break;
}
+ } else if (cp->page != NULL && (ret =
+ __qam_fput(dbp, cp->pgno, cp->page, put_mode)) != 0)
+ break;
+ cp->page = NULL;
+ first++;
+ if (first == RECNO_OOB) {
+ wrapped = 0;
+ first++;
}
- cp->pgno = save_page;
- cp->indx = save_indx;
- cp->recno = save_recno;
- cp->lock = save_lock;
-
/*
- * We have advanced as far as we can.
- * Advance first_recno to this point.
+ * LOOP EXIT when we come move to the current
+ * pointer.
*/
- if (meta->first_recno != first) {
+ if (!wrapped && first >= current)
+ break;
+
+ ret = __db_lget(dbc, 0, first, DB_LOCK_READ,
+ DB_LOCK_NOWAIT | DB_LOCK_RECORD, &lock);
+ if (ret == DB_LOCK_DEADLOCK) {
+ ret = 0;
+ break;
+ }
+ if (ret != 0)
+ break;
+
+ if ((ret = __qam_position(dbc,
+ &first, QAM_READ, &exact)) != 0) {
+ (void)__LPUT(dbc, lock);
+ break;
+ }
+ put_mode = 0;
+ if ((ret =__LPUT(dbc, lock)) != 0 ||
+ (ret = __LPUT(dbc, cp->lock)) != 0 || exact) {
+ if ((t_ret = __qam_fput(dbp, cp->pgno,
+ cp->page, put_mode)) != 0 && ret == 0)
+ ret = t_ret;
+ cp->page = NULL;
+ break;
+ }
+ }
+
+ cp->pgno = save_page;
+ cp->indx = save_indx;
+ cp->recno = save_recno;
+ cp->lock = save_lock;
+
+ /*
+ * We have advanced as far as we can.
+ * Advance first_recno to this point.
+ */
+ if (ret == 0 && meta->first_recno != first) {
#ifdef QDEBUG
__db_logmsg(dbp->dbenv, dbc->txn, "Queue M",
0, "%x %d %d %d", dbc->locker, cp->recno,
first, meta->first_recno);
#endif
- if (DB_LOGGING(dbc))
- if ((ret =
- __qam_incfirst_log(dbp->dbenv,
- dbc->txn, &meta->dbmeta.lsn, 0,
- dbp->log_fileid, cp->recno)) != 0)
- goto err;
- meta->first_recno = first;
- meta_dirty = 1;
- }
+ if (DBC_LOGGING(dbc))
+ if ((ret = __qam_incfirst_log(dbp,
+ dbc->txn, &meta->dbmeta.lsn, 0,
+ cp->recno, PGNO_BASE_MD)) != 0)
+ goto done;
+ meta->first_recno = first;
+ (void)__memp_fset(mpf, meta, DB_MPOOL_DIRTY);
}
done:
-err1: if (cp->page != NULL) {
- t_ret = __qam_fput(dbp, cp->pgno, cp->page, put_mode);
+ return (ret);
+}
- if (!ret)
- ret = t_ret;
- /* Doing record locking, release the page lock */
- t_ret = __LPUT(dbc, pglock);
- cp->page = NULL;
+static int
+__qam_bulk(dbc, data, flags)
+ DBC *dbc;
+ DBT *data;
+ u_int32_t flags;
+{
+ DB *dbp;
+ DB_LOCK metalock;
+ DB_MPOOLFILE *mpf;
+ PAGE *pg;
+ QMETA *meta;
+ QAMDATA *qp;
+ QUEUE_CURSOR *cp;
+ db_indx_t indx;
+ db_pgno_t metapno;
+ qam_position_mode mode;
+ int32_t *endp, *offp;
+ u_int8_t *dbuf, *dp, *np;
+ int exact, recs, re_len, ret, t_ret, valid;
+ int is_key, need_pg, pagesize, size, space;
+
+ dbp = dbc->dbp;
+ mpf = dbp->mpf;
+ cp = (QUEUE_CURSOR *)dbc->internal;
+
+ mode = QAM_READ;
+ if (F_ISSET(dbc, DBC_RMW))
+ mode = QAM_WRITE;
+
+ pagesize = dbp->pgsize;
+ re_len = ((QUEUE *)dbp->q_internal)->re_len;
+ recs = ((QUEUE *)dbp->q_internal)->rec_page;
+ metapno = ((QUEUE *)dbp->q_internal)->q_meta;
+
+ is_key = LF_ISSET(DB_MULTIPLE_KEY) ? 1 : 0;
+ size = 0;
+
+ if ((ret = __db_lget(dbc, 0, metapno, DB_LOCK_READ, 0, &metalock)) != 0)
+ return (ret);
+ if ((ret = __memp_fget(mpf, &metapno, 0, &meta)) != 0) {
+ /* We did not fetch it, we can release the lock. */
+ (void)__LPUT(dbc, metalock);
+ return (ret);
}
-err: if (!ret)
- ret = t_ret;
- if (meta) {
+ dbuf = data->data;
+ np = dp = dbuf;
- /* release the meta page */
- t_ret = memp_fput(
- dbp->mpf, meta, meta_dirty ? DB_MPOOL_DIRTY : 0);
+ /* Keep track of space that is left. There is an termination entry */
+ space = data->ulen;
+ space -= sizeof(*offp);
- if (!ret)
- ret = t_ret;
+ /* Build the offset/size table form the end up. */
+ endp = (int32_t *) ((u_int8_t *)dbuf + data->ulen);
+ endp--;
+ offp = endp;
- /* Don't hold the meta page long term. */
- if (locked)
- t_ret = __LPUT(dbc, metalock);
+next_pg:
+ /* Wrap around, skipping zero. */
+ if (cp->recno == RECNO_OOB)
+ cp->recno++;
+ if ((ret = __qam_position(dbc, &cp->recno, mode, &exact)) != 0)
+ goto done;
+
+ pg = cp->page;
+ indx = cp->indx;
+ need_pg = 1;
+
+ do {
+ /*
+ * If this page is a nonexistent page at the end of an
+ * extent, pg may be NULL. A NULL page has no valid records,
+ * so just keep looping as though qp exists and isn't QAM_VALID;
+ * calling QAM_GET_RECORD is unsafe.
+ */
+ valid = 0;
+
+ if (pg != NULL) {
+ qp = QAM_GET_RECORD(dbp, pg, indx);
+ if (F_ISSET(qp, QAM_VALID)) {
+ valid = 1;
+ space -= (is_key ? 3 : 2) * sizeof(*offp);
+ if (space < 0)
+ goto get_space;
+ if (need_pg) {
+ dp = np;
+ size = pagesize - QPAGE_SZ(dbp);
+ if (space < size) {
+get_space:
+ if (offp == endp) {
+ data->size =
+ ALIGN(size +
+ pagesize,
+ sizeof(u_int32_t));
+ ret = ENOMEM;
+ break;
+ }
+ if (indx != 0)
+ indx--;
+ cp->recno--;
+ space = 0;
+ break;
+ }
+ memcpy(dp,
+ (char *)pg + QPAGE_SZ(dbp), size);
+ need_pg = 0;
+ space -= size;
+ np += size;
+ }
+ if (is_key)
+ *offp-- = cp->recno;
+ *offp-- = (int32_t)((u_int8_t*)qp -
+ (u_int8_t*)pg - QPAGE_SZ(dbp) +
+ dp - dbuf + SSZA(QAMDATA, data));
+ *offp-- = re_len;
+ }
+ }
+ if (!valid && is_key == 0) {
+ *offp-- = 0;
+ *offp-- = 0;
+ }
+ cp->recno++;
+ } while (++indx < recs && cp->recno != RECNO_OOB &&
+ cp->recno != meta->cur_recno &&
+ !QAM_AFTER_CURRENT(meta, cp->recno));
+
+ if ((t_ret = __TLPUT(dbc, cp->lock)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (cp->page != NULL) {
+ if ((t_ret =
+ __qam_fput(dbp, cp->pgno, cp->page, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ cp->page = NULL;
}
- DB_ASSERT(metalock.off == LOCK_INVALID);
+
+ if (ret == 0 && space > 0 &&
+ (indx >= recs || cp->recno == RECNO_OOB) &&
+ cp->recno != meta->cur_recno &&
+ !QAM_AFTER_CURRENT(meta, cp->recno))
+ goto next_pg;
/*
- * There is no need to keep the record locked if we are
- * not in a transaction.
+ * Correct recno in two cases:
+ * 1) If we just wrapped fetch must start at record 1 not a FIRST.
+ * 2) We ran out of space exactly at the end of a page.
*/
- if (t_ret == 0)
- t_ret = __TLPUT(dbc, cp->lock);
+ if (cp->recno == RECNO_OOB || (space == 0 && indx == recs))
+ cp->recno--;
+
+ if (is_key == 1)
+ *offp = RECNO_OOB;
+ else
+ *offp = -1;
- return (ret ? ret : t_ret);
+done:
+ /* release the meta page */
+ t_ret = __memp_fput(mpf, meta, 0);
+
+ if (!ret)
+ ret = t_ret;
+
+ t_ret = __LPUT(dbc, metalock);
+
+ return (ret);
}
/*
@@ -1241,15 +1470,12 @@ __qam_c_close(dbc, root_pgno, rmroot)
cp = (QUEUE_CURSOR *)dbc->internal;
/* Discard any locks not acquired inside of a transaction. */
- if (cp->lock.off != LOCK_INVALID) {
- (void)__TLPUT(dbc, cp->lock);
- cp->lock.off = LOCK_INVALID;
- }
+ (void)__TLPUT(dbc, cp->lock);
+ LOCK_INIT(cp->lock);
cp->page = NULL;
cp->pgno = PGNO_INVALID;
cp->indx = 0;
- cp->lock.off = LOCK_INVALID;
cp->lock_mode = DB_LOCK_NG;
cp->recno = RECNO_OOB;
cp->flags = 0;
@@ -1277,7 +1503,7 @@ __qam_c_dup(orig_dbc, new_dbc)
/* reget the long term lock if we are not in a xact */
if (orig_dbc->txn != NULL ||
- !STD_LOCKING(orig_dbc) || orig->lock.off == LOCK_INVALID)
+ !STD_LOCKING(orig_dbc) || !LOCK_ISSET(orig->lock))
return (0);
return (__db_lget(new_dbc,
@@ -1310,11 +1536,13 @@ __qam_c_init(dbc)
/* Initialize methods. */
dbc->c_close = __db_c_close;
- dbc->c_count = __db_c_count;
- dbc->c_del = __db_c_del;
- dbc->c_dup = __db_c_dup;
- dbc->c_get = __db_c_get;
- dbc->c_put = __db_c_put;
+ dbc->c_count = __db_c_count_pp;
+ dbc->c_del = __db_c_del_pp;
+ dbc->c_dup = __db_c_dup_pp;
+ dbc->c_get = __db_c_get_pp;
+ dbc->c_pget = __db_c_pget_pp;
+ dbc->c_put = __db_c_put_pp;
+ dbc->c_am_bulk = __qam_bulk;
dbc->c_am_close = __qam_c_close;
dbc->c_am_del = __qam_c_del;
dbc->c_am_destroy = __qam_c_destroy;
@@ -1334,7 +1562,7 @@ __qam_c_destroy(dbc)
DBC *dbc;
{
/* Discard the structures. */
- __os_free(dbc->internal, sizeof(QUEUE_CURSOR));
+ __os_free(dbc->dbp->dbenv, dbc->internal);
return (0);
}
@@ -1355,3 +1583,72 @@ __qam_getno(dbp, key, rep)
}
return (0);
}
+
+/*
+ * __qam_truncate --
+ * Truncate a queue database
+ *
+ * PUBLIC: int __qam_truncate __P((DBC *, u_int32_t *));
+ */
+int
+__qam_truncate(dbc, countp)
+ DBC *dbc;
+ u_int32_t *countp;
+{
+ DB *dbp;
+ DB_LOCK metalock;
+ DB_MPOOLFILE *mpf;
+ QMETA *meta;
+ QUEUE_CURSOR *cp;
+ db_pgno_t metapno;
+ int count, ret, t_ret;
+
+ dbp = dbc->dbp;
+
+ /* Walk the queue, counting rows. */
+ count = 0;
+ while ((ret = __qam_c_get(dbc, NULL, NULL, DB_CONSUME, &metapno)) == 0)
+ count++;
+
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ else
+ return (ret);
+
+ cp = (QUEUE_CURSOR *)dbc->internal;
+ /* Remove the last extent file. */
+ if (cp->pgno != 0 &&
+ ((QUEUE *)dbp->q_internal)->page_ext != 0 &&
+ (ret = __qam_fremove(dbp, cp->pgno)) != 0)
+ return (ret);
+
+ /* Update the meta page. */
+ metapno = ((QUEUE *)dbp->q_internal)->q_meta;
+ if ((ret =
+ __db_lget(dbc, 0, metapno, DB_LOCK_WRITE, 0, &metalock)) != 0)
+ return (ret);
+
+ mpf = dbp->mpf;
+ if ((ret = __memp_fget(mpf, &metapno, 0, &meta)) != 0) {
+ /* We did not fetch it, we can release the lock. */
+ (void)__LPUT(dbc, metalock);
+ return (ret);
+ }
+ if (DBC_LOGGING(dbc)) {
+ ret = __qam_mvptr_log(dbp, dbc->txn, &meta->dbmeta.lsn, 0,
+ QAM_SETCUR | QAM_SETFIRST | QAM_TRUNCATE, meta->first_recno,
+ 1, meta->cur_recno, 1, &meta->dbmeta.lsn, PGNO_BASE_MD);
+ }
+ if (ret == 0)
+ meta->first_recno = meta->cur_recno = 1;
+
+ if ((t_ret = __memp_fput(mpf,
+ meta, ret == 0 ? DB_MPOOL_DIRTY: 0)) != 0 && ret == 0)
+ ret = t_ret;
+ if ((t_ret = __LPUT(dbc, metalock)) != 0 && ret == 0)
+ ret = t_ret;
+
+ *countp = count;
+
+ return (ret);
+}
diff --git a/db/qam/qam.src b/db/qam/qam.src
index 507d7a652..34eada651 100644
--- a/db/qam/qam.src
+++ b/db/qam/qam.src
@@ -1,13 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: qam.src,v 11.15 2001/01/16 20:10:55 ubell Exp $
+ * $Id: qam.src,v 11.31 2003/11/14 05:32:38 ubell Exp $
*/
-PREFIX qam
+PREFIX __qam
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
@@ -15,59 +16,52 @@ INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "qam.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/qam.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
- * inc
- * Used when we increment a record number. These do not actually
- * tell you what record number you got, just that you incremented
- * the record number. These operations are never undone.
- */
-BEGIN inc 76
-ARG fileid int32_t ld
-POINTER lsn DB_LSN * lu
-END
-
-/*
* incfirst
* Used when we increment first_recno.
*/
-BEGIN incfirst 77
-ARG fileid int32_t ld
+BEGIN incfirst 84
+DB fileid int32_t ld
ARG recno db_recno_t lu
+ARG meta_pgno db_pgno_t lu
END
/*
* mvptr
* Used when we change one or both of cur_recno and first_recno.
*/
-BEGIN mvptr 78
+BEGIN mvptr 85
ARG opcode u_int32_t lu
-ARG fileid int32_t ld
+DB fileid int32_t ld
ARG old_first db_recno_t lu
ARG new_first db_recno_t lu
ARG old_cur db_recno_t lu
ARG new_cur db_recno_t lu
POINTER metalsn DB_LSN * lu
+ARG meta_pgno db_pgno_t lu
END
+
/*
* del
* Used when we delete a record.
* recno is the record that is being deleted.
*/
BEGIN del 79
-ARG fileid int32_t ld
+DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
@@ -81,7 +75,7 @@ END
* data is the record itself.
*/
BEGIN add 80
-ARG fileid int32_t ld
+DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
@@ -92,30 +86,12 @@ DBT olddata DBT s
END
/*
- * delete
- * Used when we remove a Queue extent file.
- */
-BEGIN delete 81
-DBT name DBT s
-POINTER lsn DB_LSN * lu
-END
-
-/*
- * rename
- * Used when we rename a Queue extent file.
- */
-BEGIN rename 82
-DBT name DBT s
-DBT newname DBT s
-END
-
-/*
* delext
* Used when we delete a record in extent based queue.
* recno is the record that is being deleted.
*/
BEGIN delext 83
-ARG fileid int32_t ld
+DB fileid int32_t ld
POINTER lsn DB_LSN * lu
ARG pgno db_pgno_t lu
ARG indx u_int32_t lu
diff --git a/db/qam/qam_auto.c b/db/qam/qam_auto.c
index cfdba3195..a108e347a 100644
--- a/db/qam/qam_auto.c
+++ b/db/qam/qam_auto.c
@@ -5,189 +5,213 @@
#include <sys/types.h>
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "qam.h"
-#include "txn.h"
-
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+/*
+ * PUBLIC: int __qam_incfirst_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, db_recno_t, db_pgno_t));
+ */
int
-__qam_inc_log(dbenv, txnid, ret_lsnp, flags,
- fileid, lsn)
- DB_ENV *dbenv;
+__qam_incfirst_log(dbp, txnid, ret_lsnp, flags, recno, meta_pgno)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
- DB_LSN * lsn;
+ db_recno_t recno;
+ db_pgno_t meta_pgno;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_qam_inc;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___qam_incfirst;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(*lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (lsn != NULL)
- memcpy(bp, lsn, sizeof(*lsn));
- else
- memset(bp, 0, sizeof(*lsn));
- bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__qam_inc_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __qam_inc_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __qam_inc_read(dbenv, dbtp->data, &argp)) != 0)
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_inc: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tlsn: [%lu][%lu]\n",
- (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-int
-__qam_inc_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __qam_inc_args **argpp;
-{
- __qam_inc_args *argp;
- u_int8_t *bp;
- int ret;
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)recno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
- ret = __os_malloc(dbenv, sizeof(__qam_inc_args) +
- sizeof(DB_TXN), NULL, &argp);
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->lsn, bp, sizeof(argp->lsn));
- bp += sizeof(argp->lsn);
- *argpp = argp;
- return (0);
+ (void)__qam_incfirst_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_incfirst_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
int
-__qam_incfirst_log(dbenv, txnid, ret_lsnp, flags,
- fileid, recno)
+__qam_incfirst_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- db_recno_t recno;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
+ TXN_RECS *t;
int ret;
- u_int8_t *bp;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- rectype = DB_qam_incfirst;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(recno);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &recno, sizeof(recno));
- bp += sizeof(recno);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __qam_incfirst_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__qam_incfirst_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -197,31 +221,35 @@ __qam_incfirst_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__qam_incfirst_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __qam_incfirst_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_incfirst: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__qam_incfirst%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\trecno: %lu\n", (u_long)argp->recno);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\trecno: %lu\n", (u_long)argp->recno);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __qam_incfirst_read __P((DB_ENV *, void *,
+ * PUBLIC: __qam_incfirst_args **));
+ */
int
__qam_incfirst_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -229,105 +257,271 @@ __qam_incfirst_read(dbenv, recbuf, argpp)
__qam_incfirst_args **argpp;
{
__qam_incfirst_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_incfirst_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__qam_incfirst_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->recno, bp, sizeof(argp->recno));
- bp += sizeof(argp->recno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->recno = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __qam_mvptr_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, db_recno_t, db_recno_t, db_recno_t,
+ * PUBLIC: db_recno_t, DB_LSN *, db_pgno_t));
+ */
int
-__qam_mvptr_log(dbenv, txnid, ret_lsnp, flags,
- opcode, fileid, old_first, new_first, old_cur, new_cur,
- metalsn)
- DB_ENV *dbenv;
+__qam_mvptr_log(dbp, txnid, ret_lsnp, flags,
+ opcode, old_first, new_first, old_cur, new_cur,
+ metalsn, meta_pgno)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
- int32_t fileid;
db_recno_t old_first;
db_recno_t new_first;
db_recno_t old_cur;
db_recno_t new_cur;
DB_LSN * metalsn;
+ db_pgno_t meta_pgno;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_qam_mvptr;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___qam_mvptr;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(fileid)
- + sizeof(old_first)
- + sizeof(new_first)
- + sizeof(old_cur)
- + sizeof(new_cur)
- + sizeof(*metalsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*metalsn)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- memcpy(bp, &old_first, sizeof(old_first));
- bp += sizeof(old_first);
- memcpy(bp, &new_first, sizeof(new_first));
- bp += sizeof(new_first);
- memcpy(bp, &old_cur, sizeof(old_cur));
- bp += sizeof(old_cur);
- memcpy(bp, &new_cur, sizeof(new_cur));
- bp += sizeof(new_cur);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)old_first;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)new_first;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)old_cur;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)new_cur;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (metalsn != NULL)
memcpy(bp, metalsn, sizeof(*metalsn));
else
memset(bp, 0, sizeof(*metalsn));
bp += sizeof(*metalsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)meta_pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__qam_mvptr_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_mvptr_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__qam_mvptr_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __qam_mvptr_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__qam_mvptr_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -337,37 +531,40 @@ __qam_mvptr_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__qam_mvptr_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __qam_mvptr_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_mvptr: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__qam_mvptr%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\told_first: %lu\n", (u_long)argp->old_first);
- printf("\tnew_first: %lu\n", (u_long)argp->new_first);
- printf("\told_cur: %lu\n", (u_long)argp->old_cur);
- printf("\tnew_cur: %lu\n", (u_long)argp->new_cur);
- printf("\tmetalsn: [%lu][%lu]\n",
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\told_first: %lu\n", (u_long)argp->old_first);
+ (void)printf("\tnew_first: %lu\n", (u_long)argp->new_first);
+ (void)printf("\told_cur: %lu\n", (u_long)argp->old_cur);
+ (void)printf("\tnew_cur: %lu\n", (u_long)argp->new_cur);
+ (void)printf("\tmetalsn: [%lu][%lu]\n",
(u_long)argp->metalsn.file, (u_long)argp->metalsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tmeta_pgno: %lu\n", (u_long)argp->meta_pgno);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __qam_mvptr_read __P((DB_ENV *, void *, __qam_mvptr_args **));
+ */
int
__qam_mvptr_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -375,106 +572,269 @@ __qam_mvptr_read(dbenv, recbuf, argpp)
__qam_mvptr_args **argpp;
{
__qam_mvptr_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_mvptr_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__qam_mvptr_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
- memcpy(&argp->old_first, bp, sizeof(argp->old_first));
- bp += sizeof(argp->old_first);
- memcpy(&argp->new_first, bp, sizeof(argp->new_first));
- bp += sizeof(argp->new_first);
- memcpy(&argp->old_cur, bp, sizeof(argp->old_cur));
- bp += sizeof(argp->old_cur);
- memcpy(&argp->new_cur, bp, sizeof(argp->new_cur));
- bp += sizeof(argp->new_cur);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->old_first = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_first = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->old_cur = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->new_cur = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->metalsn, bp, sizeof(argp->metalsn));
bp += sizeof(argp->metalsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->meta_pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __qam_del_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_recno_t));
+ */
int
-__qam_del_log(dbenv, txnid, ret_lsnp, flags,
- fileid, lsn, pgno, indx, recno)
- DB_ENV *dbenv;
+__qam_del_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
DB_LSN * lsn;
db_pgno_t pgno;
u_int32_t indx;
db_recno_t recno;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_qam_del;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___qam_del;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(pgno)
- + sizeof(indx)
- + sizeof(recno);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &recno, sizeof(recno));
- bp += sizeof(recno);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)recno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__qam_del_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_del_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__qam_del_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __qam_del_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__qam_del_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -484,35 +844,37 @@ __qam_del_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__qam_del_args *argp;
- u_int32_t i;
- u_int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __qam_del_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_del: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__qam_del%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\trecno: %lu\n", (u_long)argp->recno);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\trecno: %lu\n", (u_long)argp->recno);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __qam_del_read __P((DB_ENV *, void *, __qam_del_args **));
+ */
int
__qam_del_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -520,44 +882,60 @@ __qam_del_read(dbenv, recbuf, argpp)
__qam_del_args **argpp;
{
__qam_del_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_del_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__qam_del_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->recno, bp, sizeof(argp->recno));
- bp += sizeof(argp->recno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->recno = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __qam_add_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_recno_t,
+ * PUBLIC: const DBT *, u_int32_t, const DBT *));
+ */
int
-__qam_add_log(dbenv, txnid, ret_lsnp, flags,
- fileid, lsn, pgno, indx, recno, data,
- vflag, olddata)
- DB_ENV *dbenv;
+__qam_add_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data,
+ vflag, olddata)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- int32_t fileid;
DB_LSN * lsn;
db_pgno_t pgno;
u_int32_t indx;
@@ -567,55 +945,117 @@ __qam_add_log(dbenv, txnid, ret_lsnp, flags,
const DBT *olddata;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_qam_add;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___qam_add;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
+ + sizeof(u_int32_t)
+ sizeof(*lsn)
- + sizeof(pgno)
- + sizeof(indx)
- + sizeof(recno)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (data == NULL ? 0 : data->size)
- + sizeof(vflag)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (olddata == NULL ? 0 : olddata->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &recno, sizeof(recno));
- bp += sizeof(recno);
+
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)recno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (data == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -626,8 +1066,11 @@ __qam_add_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, data->data, data->size);
bp += data->size;
}
- memcpy(bp, &vflag, sizeof(vflag));
- bp += sizeof(vflag);
+
+ uinttmp = (u_int32_t)vflag;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (olddata == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -638,14 +1081,92 @@ __qam_add_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, olddata->data, olddata->size);
bp += olddata->size;
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__qam_add_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_add_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__qam_add_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __qam_add_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__qam_add_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -656,53 +1177,51 @@ __qam_add_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__qam_add_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __qam_add_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_add: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__qam_add%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\trecno: %lu\n", (u_long)argp->recno);
- printf("\tdata: ");
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\trecno: %lu\n", (u_long)argp->recno);
+ (void)printf("\tdata: ");
for (i = 0; i < argp->data.size; i++) {
ch = ((u_int8_t *)argp->data.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\tvflag: %lu\n", (u_long)argp->vflag);
- printf("\tolddata: ");
+ (void)printf("\n");
+ (void)printf("\tvflag: %lu\n", (u_long)argp->vflag);
+ (void)printf("\tolddata: ");
for (i = 0; i < argp->olddata.size; i++) {
ch = ((u_int8_t *)argp->olddata.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __qam_add_read __P((DB_ENV *, void *, __qam_add_args **));
+ */
int
__qam_add_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -710,422 +1229,287 @@ __qam_add_read(dbenv, recbuf, argpp)
__qam_add_args **argpp;
{
__qam_add_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_add_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__qam_add_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->recno, bp, sizeof(argp->recno));
- bp += sizeof(argp->recno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->recno = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->data, 0, sizeof(argp->data));
memcpy(&argp->data.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->data.data = bp;
bp += argp->data.size;
- memcpy(&argp->vflag, bp, sizeof(argp->vflag));
- bp += sizeof(argp->vflag);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->vflag = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->olddata, 0, sizeof(argp->olddata));
memcpy(&argp->olddata.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->olddata.data = bp;
bp += argp->olddata.size;
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __qam_delext_log __P((DB *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, db_pgno_t, u_int32_t, db_recno_t,
+ * PUBLIC: const DBT *));
+ */
int
-__qam_delete_log(dbenv, txnid, ret_lsnp, flags,
- name, lsn)
- DB_ENV *dbenv;
+__qam_delext_log(dbp, txnid, ret_lsnp, flags, lsn, pgno, indx, recno, data)
+ DB *dbp;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- const DBT *name;
DB_LSN * lsn;
+ db_pgno_t pgno;
+ u_int32_t indx;
+ db_recno_t recno;
+ const DBT *data;
{
DBT logrec;
+ DB_ENV *dbenv;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
-
- rectype = DB_qam_delete;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ int is_durable, ret;
+
+ dbenv = dbp->dbenv;
+ rectype = DB___qam_delext;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) ||
+ F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
+ if (F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE) && txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
- + sizeof(*lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(*lsn)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (data == NULL ? 0 : data->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- if (name == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
- }
+
+ DB_ASSERT(dbp->log_filename != NULL);
+ if (dbp->log_filename->id == DB_LOGFILEID_INVALID &&
+ (ret = __dbreg_lazy_id(dbp)) != 0)
+ return (ret);
+
+ uinttmp = (u_int32_t)dbp->log_filename->id;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (lsn != NULL)
memcpy(bp, lsn, sizeof(*lsn));
else
memset(bp, 0, sizeof(*lsn));
bp += sizeof(*lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
-}
-
-int
-__qam_delete_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __qam_delete_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __qam_delete_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]qam_delete: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tlsn: [%lu][%lu]\n",
- (u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__qam_delete_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __qam_delete_args **argpp;
-{
- __qam_delete_args *argp;
- u_int8_t *bp;
- int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_delete_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- memcpy(&argp->lsn, bp, sizeof(argp->lsn));
- bp += sizeof(argp->lsn);
- *argpp = argp;
- return (0);
-}
+ uinttmp = (u_int32_t)pgno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
-int
-__qam_rename_log(dbenv, txnid, ret_lsnp, flags,
- name, newname)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- const DBT *name;
- const DBT *newname;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
+ uinttmp = (u_int32_t)indx;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
- rectype = DB_qam_rename;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(u_int32_t) + (name == NULL ? 0 : name->size)
- + sizeof(u_int32_t) + (newname == NULL ? 0 : newname->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ uinttmp = (u_int32_t)recno;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- if (name == NULL) {
+ if (data == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
} else {
- memcpy(bp, &name->size, sizeof(name->size));
- bp += sizeof(name->size);
- memcpy(bp, name->data, name->size);
- bp += name->size;
+ memcpy(bp, &data->size, sizeof(data->size));
+ bp += sizeof(data->size);
+ memcpy(bp, data->data, data->size);
+ bp += data->size;
}
- if (newname == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &newname->size, sizeof(newname->size));
- bp += sizeof(newname->size);
- memcpy(bp, newname->data, newname->size);
- bp += newname->size;
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
}
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__qam_delext_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_delext_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__qam_rename_print(dbenv, dbtp, lsnp, notused2, notused3)
+__qam_delext_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DBT *dbtp;
+ DBT *rec;
DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
+ db_recops notused1;
+ void *summary;
{
- __qam_rename_args *argp;
- u_int32_t i;
- u_int ch;
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ t = (TXN_RECS *)summary;
- if ((ret = __qam_rename_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- printf("[%lu][%lu]qam_rename: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\tname: ");
- for (i = 0; i < argp->name.size; i++) {
- ch = ((u_int8_t *)argp->name.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tnewname: ");
- for (i = 0; i < argp->newname.size; i++) {
- ch = ((u_int8_t *)argp->newname.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-int
-__qam_rename_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __qam_rename_args **argpp;
-{
- __qam_rename_args *argp;
- u_int8_t *bp;
- int ret;
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
- ret = __os_malloc(dbenv, sizeof(__qam_rename_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memset(&argp->name, 0, sizeof(argp->name));
- memcpy(&argp->name.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->name.data = bp;
- bp += argp->name.size;
- memset(&argp->newname, 0, sizeof(argp->newname));
- memcpy(&argp->newname.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->newname.data = bp;
- bp += argp->newname.size;
- *argpp = argp;
- return (0);
-}
+ t->npages++;
-int
-__qam_delext_log(dbenv, txnid, ret_lsnp, flags,
- fileid, lsn, pgno, indx, recno, data)
- DB_ENV *dbenv;
- DB_TXN *txnid;
- DB_LSN *ret_lsnp;
- u_int32_t flags;
- int32_t fileid;
- DB_LSN * lsn;
- db_pgno_t pgno;
- u_int32_t indx;
- db_recno_t recno;
- const DBT *data;
-{
- DBT logrec;
- DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
- u_int8_t *bp;
-
- rectype = DB_qam_delext;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
- if (txnid == NULL) {
- ZERO_LSN(null_lsn);
- lsnp = &null_lsn;
- } else
- lsnp = &txnid->last_lsn;
- logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(fileid)
- + sizeof(*lsn)
- + sizeof(pgno)
- + sizeof(indx)
- + sizeof(recno)
- + sizeof(u_int32_t) + (data == NULL ? 0 : data->size);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
-
- bp = logrec.data;
- memcpy(bp, &rectype, sizeof(rectype));
- bp += sizeof(rectype);
- memcpy(bp, &txn_num, sizeof(txn_num));
- bp += sizeof(txn_num);
- memcpy(bp, lsnp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(bp, &fileid, sizeof(fileid));
- bp += sizeof(fileid);
- if (lsn != NULL)
- memcpy(bp, lsn, sizeof(*lsn));
- else
- memset(bp, 0, sizeof(*lsn));
- bp += sizeof(*lsn);
- memcpy(bp, &pgno, sizeof(pgno));
- bp += sizeof(pgno);
- memcpy(bp, &indx, sizeof(indx));
- bp += sizeof(indx);
- memcpy(bp, &recno, sizeof(recno));
- bp += sizeof(recno);
- if (data == NULL) {
- zero = 0;
- memcpy(bp, &zero, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- } else {
- memcpy(bp, &data->size, sizeof(data->size));
- bp += sizeof(data->size);
- memcpy(bp, data->data, data->size);
- bp += data->size;
- }
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
- return (ret);
+ return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __qam_delext_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__qam_delext_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -1136,43 +1520,44 @@ __qam_delext_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__qam_delext_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __qam_delext_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]qam_delext: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__qam_delext%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tfileid: %ld\n", (long)argp->fileid);
- printf("\tlsn: [%lu][%lu]\n",
+ (void)printf("\tfileid: %ld\n", (long)argp->fileid);
+ (void)printf("\tlsn: [%lu][%lu]\n",
(u_long)argp->lsn.file, (u_long)argp->lsn.offset);
- printf("\tpgno: %lu\n", (u_long)argp->pgno);
- printf("\tindx: %lu\n", (u_long)argp->indx);
- printf("\trecno: %lu\n", (u_long)argp->recno);
- printf("\tdata: ");
+ (void)printf("\tpgno: %lu\n", (u_long)argp->pgno);
+ (void)printf("\tindx: %lu\n", (u_long)argp->indx);
+ (void)printf("\trecno: %lu\n", (u_long)argp->recno);
+ (void)printf("\tdata: ");
for (i = 0; i < argp->data.size; i++) {
ch = ((u_int8_t *)argp->data.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
}
- printf("\n");
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __qam_delext_read __P((DB_ENV *, void *, __qam_delext_args **));
+ */
int
__qam_delext_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -1180,103 +1565,142 @@ __qam_delext_read(dbenv, recbuf, argpp)
__qam_delext_args **argpp;
{
__qam_delext_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__qam_delext_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__qam_delext_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->fileid, bp, sizeof(argp->fileid));
- bp += sizeof(argp->fileid);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->fileid = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memcpy(&argp->lsn, bp, sizeof(argp->lsn));
bp += sizeof(argp->lsn);
- memcpy(&argp->pgno, bp, sizeof(argp->pgno));
- bp += sizeof(argp->pgno);
- memcpy(&argp->indx, bp, sizeof(argp->indx));
- bp += sizeof(argp->indx);
- memcpy(&argp->recno, bp, sizeof(argp->recno));
- bp += sizeof(argp->recno);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->pgno = (db_pgno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->indx = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->recno = (db_recno_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->data, 0, sizeof(argp->data));
memcpy(&argp->data.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->data.data = bp;
bp += argp->data.size;
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __qam_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__qam_init_print(dbenv)
+__qam_init_print(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __qam_inc_print, DB_qam_inc)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_incfirst_print, DB_qam_incfirst)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_mvptr_print, DB_qam_mvptr)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_incfirst_print, DB___qam_incfirst)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_del_print, DB_qam_del)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_mvptr_print, DB___qam_mvptr)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_add_print, DB_qam_add)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_del_print, DB___qam_del)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_delete_print, DB_qam_delete)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_add_print, DB___qam_add)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_rename_print, DB_qam_rename)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_delext_print, DB_qam_delext)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_delext_print, DB___qam_delext)) != 0)
return (ret);
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __qam_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__qam_init_recover(dbenv)
+__qam_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __qam_inc_recover, DB_qam_inc)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_incfirst_getpgnos, DB___qam_incfirst)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_incfirst_recover, DB_qam_incfirst)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_mvptr_getpgnos, DB___qam_mvptr)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_mvptr_recover, DB_qam_mvptr)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_del_getpgnos, DB___qam_del)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_del_recover, DB_qam_del)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_add_getpgnos, DB___qam_add)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_add_recover, DB_qam_add)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_delext_getpgnos, DB___qam_delext)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_delete_recover, DB_qam_delete)) != 0)
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __qam_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__qam_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_incfirst_recover, DB___qam_incfirst)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_mvptr_recover, DB___qam_mvptr)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_rename_recover, DB_qam_rename)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_del_recover, DB___qam_del)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __qam_delext_recover, DB_qam_delext)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_add_recover, DB___qam_add)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __qam_delext_recover, DB___qam_delext)) != 0)
return (ret);
return (0);
}
-
diff --git a/db/qam/qam_conv.c b/db/qam/qam_conv.c
index 2eb1c7227..ee5f23b50 100644
--- a/db/qam/qam_conv.c
+++ b/db/qam/qam_conv.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_conv.c,v 11.6 2000/11/16 23:40:57 ubell Exp $";
+static const char revid[] = "$Id: qam_conv.c,v 11.16 2003/01/08 05:37:19 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,10 +16,10 @@ static const char revid[] = "$Id: qam_conv.c,v 11.6 2000/11/16 23:40:57 ubell Ex
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "qam.h"
-#include "db_swap.h"
-#include "db_am.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/db_am.h"
+#include "dbinc/qam.h"
/*
* __qam_mswap --
@@ -43,6 +43,8 @@ __qam_mswap(pg)
SWAP32(p); /* re_pad */
SWAP32(p); /* rec_page */
SWAP32(p); /* page_ext */
+ p += 91 * sizeof(u_int32_t); /* unused */
+ SWAP32(p); /* crypto_magic */
return (0);
}
@@ -68,7 +70,7 @@ __qam_pgin_out(dbenv, pg, pp, cookie)
COMPQUIET(pg, 0);
COMPQUIET(dbenv, NULL);
pginfo = (DB_PGINFO *)cookie->data;
- if (!pginfo->needswap)
+ if (!F_ISSET(pginfo, DB_AM_SWAP))
return (0);
h = pp;
diff --git a/db/qam/qam_files.c b/db/qam/qam_files.c
index e53a3bf24..b6fd42dd0 100644
--- a/db/qam/qam_files.c
+++ b/db/qam/qam_files.c
@@ -1,67 +1,74 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_files.c,v 1.16 2001/01/19 18:01:59 bostic Exp $";
+static const char revid[] = "$Id: qam_files.c,v 1.72 2003/10/03 21:21:54 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_am.h"
-#include "lock.h"
-#include "btree.h"
-#include "qam.h"
-#include "mp.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/fop.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+
+#define QAM_EXNAME(Q, I, B, L) \
+ snprintf((B), (L), \
+ QUEUE_EXTENT, (Q)->dir, PATH_SEPARATOR[0], (Q)->name, (I))
/*
- * __qam_fprobe -- calcluate and open extent
+ * __qam_fprobe -- calculate and open extent
*
- * Calculate which extent the page is in, open and create
- * if necessary.
+ * Calculate which extent the page is in, open and create if necessary.
*
- * PUBLIC: int __qam_fprobe __P((DB *, db_pgno_t, void *, qam_probe_mode, int));
+ * PUBLIC: int __qam_fprobe
+ * PUBLIC: __P((DB *, db_pgno_t, void *, qam_probe_mode, u_int32_t));
*/
-
int
__qam_fprobe(dbp, pgno, addrp, mode, flags)
DB *dbp;
db_pgno_t pgno;
void *addrp;
qam_probe_mode mode;
- int flags;
+ u_int32_t flags;
{
DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
MPFARRAY *array;
QUEUE *qp;
- u_int32_t extid, maxext;
- char buf[256];
- int numext, offset, oldext, openflags, ret;
+ u_int8_t fid[DB_FILE_ID_LEN];
+ u_int32_t extid, maxext, openflags;
+ char buf[MAXPATHLEN];
+ int ftype, numext, offset, oldext, ret;
+ dbenv = dbp->dbenv;
qp = (QUEUE *)dbp->q_internal;
+ ret = 0;
+
if (qp->page_ext == 0) {
mpf = dbp->mpf;
- if (mode == QAM_PROBE_GET)
- return (memp_fget(mpf, &pgno, flags, addrp));
- return (memp_fput(mpf, addrp, flags));
+ return (mode == QAM_PROBE_GET ?
+ __memp_fget(mpf, &pgno, flags, addrp) :
+ __memp_fput(mpf, addrp, flags));
}
- dbenv = dbp->dbenv;
mpf = NULL;
- ret = 0;
/*
* Need to lock long enough to find the mpf or create the file.
@@ -69,7 +76,7 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
* in that file.
*/
MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- extid = (pgno - 1) / qp->page_ext;
+ extid = QAM_PAGE_EXTENT(dbp, pgno);
/* Array1 will always be in use if array2 is in use. */
array = &qp->array1;
@@ -92,36 +99,53 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
/*
* Check to see if the requested extent is outside the range of
- * extents in the array. This is true by defualt if there are
+ * extents in the array. This is true by default if there are
* no extents here yet.
*/
if (offset < 0 || (unsigned) offset >= array->n_extent) {
oldext = array->n_extent;
- numext = array->hi_extent - array->low_extent + 1;
- if (offset < 0
- && (unsigned) -offset + numext <= array->n_extent) {
- /* If we can fit this one in, move the array up */
+ numext = array->hi_extent - array->low_extent + 1;
+ if (offset < 0 &&
+ (unsigned) -offset + numext <= array->n_extent) {
+ /*
+ * If we can fit this one into the existing array by
+ * shifting the existing entries then we do not have
+ * to allocate.
+ */
memmove(&array->mpfarray[-offset],
array->mpfarray, numext
* sizeof(array->mpfarray[0]));
memset(array->mpfarray, 0, -offset
- * sizeof(array->mpfarray[0]));
+ * sizeof(array->mpfarray[0]));
offset = 0;
} else if ((u_int32_t)offset == array->n_extent &&
mode != QAM_PROBE_MPF && array->mpfarray[0].pinref == 0) {
- /* We can close the bottom extent. */
+ /*
+ * If this is at the end of the array and the file at
+ * the begining has a zero pin count we can close
+ * the bottom extent and put this one at the end.
+ * TODO: If this process is "slow" then it might be
+ * appending but miss one or more extents.
+ * We could check to see if all the extents
+ * are unpinned and close them in the else
+ * clause below.
+ */
mpf = array->mpfarray[0].mpf;
- if (mpf != NULL && (ret = memp_fclose(mpf)) != 0)
+ if (mpf != NULL && (ret = __memp_fclose(mpf, 0)) != 0)
goto err;
memmove(&array->mpfarray[0], &array->mpfarray[1],
- (array->n_extent - 1) * sizeof (array->mpfarray[0]));
+ (array->n_extent - 1) * sizeof(array->mpfarray[0]));
array->low_extent++;
array->hi_extent++;
offset--;
array->mpfarray[offset].mpf = NULL;
array->mpfarray[offset].pinref = 0;
} else {
- /* See if we have wrapped around the queue. */
+ /*
+ * See if we have wrapped around the queue.
+ * If it has then allocate the second array.
+ * Otherwise just expand the one we are using.
+ */
maxext = (u_int32_t) UINT32_T_MAX
/ (qp->page_ext * qp->rec_page);
if ((u_int32_t) abs(offset) >= maxext/2) {
@@ -143,51 +167,84 @@ __qam_fprobe(dbp, pgno, addrp, mode, flags)
alloc:
if ((ret = __os_realloc(dbenv,
array->n_extent * sizeof(struct __qmpf),
- NULL, &array->mpfarray)) != 0)
+ &array->mpfarray)) != 0)
goto err;
if (offset < 0) {
+ /*
+ * Move the array up and put the new one
+ * in the first slot.
+ */
offset = -offset;
- memmove(&array->mpfarray[offset], array->mpfarray,
+ memmove(&array->mpfarray[offset],
+ array->mpfarray,
numext * sizeof(array->mpfarray[0]));
memset(array->mpfarray, 0,
offset * sizeof(array->mpfarray[0]));
memset(&array->mpfarray[numext + offset], 0,
- (array->n_extent - (numext + offset))
- * sizeof(array->mpfarray[0]));
+ (array->n_extent - (numext + offset))
+ * sizeof(array->mpfarray[0]));
offset = 0;
}
else
+ /* Clear the new part of the array. */
memset(&array->mpfarray[oldext], 0,
(array->n_extent - oldext) *
sizeof(array->mpfarray[0]));
}
}
+ /* Update the low and hi range of saved extents. */
if (extid < array->low_extent)
array->low_extent = extid;
if (extid > array->hi_extent)
array->hi_extent = extid;
+
+ /* If the extent file is not yet open, open it. */
if (array->mpfarray[offset].mpf == NULL) {
- snprintf(buf,
- sizeof(buf), QUEUE_EXTENT, qp->dir, qp->name, extid);
+ QAM_EXNAME(qp, extid, buf, sizeof(buf));
+ if ((ret = __memp_fcreate(
+ dbenv, &array->mpfarray[offset].mpf)) != 0)
+ goto err;
+ mpf = array->mpfarray[offset].mpf;
+ (void)__memp_set_lsn_offset(mpf, 0);
+ (void)__memp_set_pgcookie(mpf, &qp->pgcookie);
+ (void)__memp_get_ftype(dbp->mpf, &ftype);
+ (void)__memp_set_ftype(mpf, ftype);
+
+ /* Set up the fileid for this extent. */
+ __qam_exid(dbp, fid, extid);
+ (void)__memp_set_fileid(mpf, fid);
openflags = DB_EXTENT;
if (LF_ISSET(DB_MPOOL_CREATE))
openflags |= DB_CREATE;
if (F_ISSET(dbp, DB_AM_RDONLY))
openflags |= DB_RDONLY;
- qp->finfo.fileid = NULL;
- if ((ret = __memp_fopen(dbenv->mp_handle,
- NULL, buf, openflags, qp->mode, dbp->pgsize,
- 1, &qp->finfo, &array->mpfarray[offset].mpf)) != 0)
+ if (F_ISSET(dbenv, DB_ENV_DIRECT_DB))
+ openflags |= DB_DIRECT;
+ if ((ret = __memp_fopen(
+ mpf, NULL, buf, openflags, qp->mode, dbp->pgsize)) != 0) {
+ array->mpfarray[offset].mpf = NULL;
+ (void)__memp_fclose(mpf, 0);
goto err;
+ }
}
+ /*
+ * We have found the right file. Update its ref count
+ * before dropping the dbp mutex so it does not go away.
+ */
mpf = array->mpfarray[offset].mpf;
if (mode == QAM_PROBE_GET)
array->mpfarray[offset].pinref++;
+
+ /*
+ * If we may create the page, then we are writing,
+ * the file may nolonger be empty after this operation
+ * so we clear the UNLINK flag.
+ */
if (LF_ISSET(DB_MPOOL_CREATE))
- __memp_clear_unlink(mpf);
+ (void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 0);
err:
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
@@ -200,10 +257,12 @@ err:
pgno--;
pgno %= qp->page_ext;
if (mode == QAM_PROBE_GET)
- return (memp_fget(mpf,
- &pgno, flags | DB_MPOOL_EXTENT, addrp));
- ret = memp_fput(mpf, addrp, flags);
+ return (__memp_fget(mpf, &pgno, flags, addrp));
+ ret = __memp_fput(mpf, addrp, flags);
MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
+ /* Recalculate because we dropped the lock. */
+ offset = extid - array->low_extent;
+ DB_ASSERT(array->mpfarray[offset].pinref > 0);
array->mpfarray[offset].pinref--;
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
}
@@ -218,7 +277,6 @@ err:
*
* PUBLIC: int __qam_fclose __P((DB *, db_pgno_t));
*/
-
int
__qam_fclose(dbp, pgnoaddr)
DB *dbp;
@@ -237,7 +295,7 @@ __qam_fclose(dbp, pgnoaddr)
MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- extid = (pgnoaddr - 1) / qp->page_ext;
+ extid = QAM_PAGE_EXTENT(dbp, pgnoaddr);
array = &qp->array1;
if (array->low_extent > extid || array->hi_extent < extid)
array = &qp->array2;
@@ -251,12 +309,13 @@ __qam_fclose(dbp, pgnoaddr)
mpf = array->mpfarray[offset].mpf;
array->mpfarray[offset].mpf = NULL;
- ret = memp_fclose(mpf);
+ ret = __memp_fclose(mpf, 0);
done:
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
return (ret);
}
+
/*
* __qam_fremove -- remove an extent.
*
@@ -266,7 +325,6 @@ done:
*
* PUBLIC: int __qam_fremove __P((DB *, db_pgno_t));
*/
-
int
__qam_fremove(dbp, pgnoaddr)
DB *dbp;
@@ -278,7 +336,7 @@ __qam_fremove(dbp, pgnoaddr)
QUEUE *qp;
u_int32_t extid;
#if CONFIG_TEST
- char buf[256], *real_name;
+ char buf[MAXPATHLEN], *real_name;
#endif
int offset, ret;
@@ -288,7 +346,7 @@ __qam_fremove(dbp, pgnoaddr)
MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
- extid = (pgnoaddr - 1) / qp->page_ext;
+ extid = QAM_PAGE_EXTENT(dbp, pgnoaddr);
array = &qp->array1;
if (array->low_extent > extid || array->hi_extent < extid)
array = &qp->array2;
@@ -299,23 +357,34 @@ __qam_fremove(dbp, pgnoaddr)
#if CONFIG_TEST
real_name = NULL;
/* Find the real name of the file. */
- snprintf(buf, sizeof(buf),
- QUEUE_EXTENT, qp->dir, qp->name, extid);
+ QAM_EXNAME(qp, extid, buf, sizeof(buf));
if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, buf, 0, NULL, &real_name)) != 0)
+ DB_APP_DATA, buf, 0, NULL, &real_name)) != 0)
goto err;
#endif
+ /*
+ * The log must be flushed before the file is deleted. We depend on
+ * the log record of the last delete to recreate the file if we crash.
+ */
+ if (LOGGING_ON(dbenv) && (ret = __log_flush(dbenv, NULL)) != 0)
+ goto err;
+
mpf = array->mpfarray[offset].mpf;
array->mpfarray[offset].mpf = NULL;
- __memp_set_unlink(mpf);
- if ((ret = memp_fclose(mpf)) != 0)
+ (void)__memp_set_flags(mpf, DB_MPOOL_UNLINK, 1);
+ if ((ret = __memp_fclose(mpf, 0)) != 0)
goto err;
+ /*
+ * If the file is at the bottom of the array
+ * shift things down and adjust the end points.
+ */
if (offset == 0) {
memmove(array->mpfarray, &array->mpfarray[1],
(array->hi_extent - array->low_extent)
* sizeof(array->mpfarray[0]));
- array->mpfarray[array->hi_extent - array->low_extent].mpf = NULL;
+ array->mpfarray[
+ array->hi_extent - array->low_extent].mpf = NULL;
if (array->low_extent != array->hi_extent)
array->low_extent++;
} else {
@@ -327,7 +396,7 @@ err:
MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
#if CONFIG_TEST
if (real_name != NULL)
- __os_freestr(real_name);
+ __os_free(dbenv, real_name);
#endif
return (ret);
}
@@ -336,86 +405,31 @@ err:
* __qam_sync --
* Flush the database cache.
*
- * PUBLIC: int __qam_sync __P((DB *, u_int32_t));
+ * PUBLIC: int __qam_sync __P((DB *));
*/
int
-__qam_sync(dbp, flags)
+__qam_sync(dbp)
DB *dbp;
- u_int32_t flags;
{
DB_ENV *dbenv;
DB_MPOOLFILE *mpf;
- MPFARRAY *array;
- QUEUE *qp;
- QUEUE_FILELIST *filelist;
- struct __qmpf *mpfp;
- u_int32_t i;
- int done, ret;
dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
- PANIC_CHECK(dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->sync");
-
- if ((ret = __db_syncchk(dbp, flags)) != 0)
- return (ret);
-
- /* Read-only trees never need to be sync'd. */
- if (F_ISSET(dbp, DB_AM_RDONLY))
- return (0);
-
- /* If the tree was never backed by a database file, we're done. */
- if (F_ISSET(dbp, DB_AM_INMEM))
- return (0);
-
- /* Flush any dirty pages from the cache to the backing file. */
- if ((ret = memp_fsync(dbp->mpf)) != 0)
- return (ret);
-
- qp = (QUEUE *)dbp->q_internal;
- if (qp->page_ext == 0)
- return (0);
-
- /* We do this for the side effect of opening all active extents. */
- if ((ret = __qam_gen_filelist(dbp, &filelist)) != 0)
- return (ret);
-
- if (filelist == NULL)
- return (0);
-
- __os_free(filelist, 0);
-
- done = 0;
- qp = (QUEUE *)dbp->q_internal;
- array = &qp->array1;
-
- MUTEX_THREAD_LOCK(dbenv, dbp->mutexp);
-again:
- mpfp = array->mpfarray;
- for (i = array->low_extent; i <= array->hi_extent; i++, mpfp++)
- if ((mpf = mpfp->mpf) != NULL) {
- if ((ret = memp_fsync(mpf)) != 0)
- goto err;
- /*
- * If we are the only ones with this file open
- * then close it so it might be removed.
- */
- if (mpfp->pinref == 0) {
- mpfp->mpf = NULL;
- if ((ret = memp_fclose(mpf)) != 0)
- goto err;
- }
- }
-
- if (done == 0 && qp->array2.n_extent != 0) {
- array = &qp->array2;
- done = 1;
- goto again;
- }
+ /*
+ * We need to flush all extent files. There is no easy way to find
+ * all the extents for this queue which are currently open. For now
+ * just flush the whole cache. An alternative would be to have a
+ * call into the cache layer that would flush all of the queue extent
+ * files it has open (there's a flag when we open a queue extent file,
+ * so the cache layer can identify them).
+ */
-err:
- MUTEX_THREAD_UNLOCK(dbenv, dbp->mutexp);
- return (ret);
+ if (((QUEUE *)dbp->q_internal)->page_ext == 0)
+ return (__memp_fsync(mpf));
+ else
+ return (__memp_sync(dbenv, NULL));
}
/*
@@ -431,16 +445,19 @@ __qam_gen_filelist(dbp, filelistp)
QUEUE_FILELIST **filelistp;
{
DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
QUEUE *qp;
QMETA *meta;
- db_pgno_t i, last, start, stop;
- db_recno_t current, first;
+ size_t extent_cnt;
+ db_recno_t i, current, first, stop, rec_extent;
QUEUE_FILELIST *fp;
int ret;
dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
qp = (QUEUE *)dbp->q_internal;
*filelistp = NULL;
+
if (qp->page_ext == 0)
return (0);
@@ -448,56 +465,333 @@ __qam_gen_filelist(dbp, filelistp)
if (qp->name == NULL)
return (0);
- /* Find out the page number of the last page in the database. */
+ /* Find out the first and last record numbers in the database. */
i = PGNO_BASE_MD;
- if ((ret = memp_fget(dbp->mpf, &i, 0, &meta)) != 0) {
- (void)dbp->close(dbp, 0);
+ if ((ret = __memp_fget(mpf, &i, 0, &meta)) != 0)
return (ret);
- }
current = meta->cur_recno;
first = meta->first_recno;
- if ((ret = memp_fput(dbp->mpf, meta, 0)) != 0) {
- (void)dbp->close(dbp, 0);
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
return (ret);
- }
- last = QAM_RECNO_PAGE(dbp, current);
- start = QAM_RECNO_PAGE(dbp, first);
-
- /* Allocate the worst case plus 1 for null termination. */
- if (last >= start)
- ret = last - start + 2;
+ /*
+ * Allocate the extent array. Calculate the worst case number of
+ * pages and convert that to a count of extents. The count of
+ * extents has 3 or 4 extra slots:
+ * roundoff at first (e.g., current record in extent);
+ * roundoff at current (e.g., first record in extent);
+ * NULL termination; and
+ * UINT32_T_MAX wraparound (the last extent can be small).
+ */
+ rec_extent = qp->rec_page * qp->page_ext;
+ if (current >= first)
+ extent_cnt = (current - first) / rec_extent + 3;
else
- ret = last + (QAM_RECNO_PAGE(dbp, UINT32_T_MAX) - start) + 1;
+ extent_cnt =
+ (current + (UINT32_T_MAX - first)) / rec_extent + 4;
if ((ret = __os_calloc(dbenv,
- ret, sizeof(QUEUE_FILELIST), filelistp)) != 0)
+ extent_cnt, sizeof(QUEUE_FILELIST), filelistp)) != 0)
return (ret);
fp = *filelistp;
- i = start;
- if (last >= start)
- stop = last;
- else
- stop = QAM_RECNO_PAGE(dbp, UINT32_T_MAX);
+
again:
- for (; i <= last; i += qp->page_ext) {
- if ((ret = __qam_fprobe(dbp,
- i, &fp->mpf, QAM_PROBE_MPF, 0)) != 0) {
+ if (current >= first)
+ stop = current;
+ else
+ stop = UINT32_T_MAX;
+
+ /*
+ * Make sure that first is at the same offset in the extent as stop.
+ * This guarantees that the stop will be reached in the loop below,
+ * even if it is the only record in its extent. This calculation is
+ * safe because first won't move out of its extent.
+ */
+ first -= first % rec_extent;
+ first += stop % rec_extent;
+
+ for (i = first; i >= first && i <= stop; i += rec_extent) {
+ if ((ret = __qam_fprobe(dbp, QAM_RECNO_PAGE(dbp, i), &fp->mpf,
+ QAM_PROBE_MPF, 0)) != 0) {
if (ret == ENOENT)
continue;
return (ret);
}
- fp->id = (i - 1) / qp->page_ext;
+ fp->id = QAM_RECNO_EXTENT(dbp, i);
fp++;
+ DB_ASSERT((size_t)(fp - *filelistp) < extent_cnt);
}
- if (last < start) {
- i = 1;
- stop = last;
- start = 0;
+ if (current < first) {
+ first = 1;
goto again;
}
return (0);
}
+
+/*
+ * __qam_extent_names -- generate a list of extent files names.
+ *
+ * PUBLIC: int __qam_extent_names __P((DB_ENV *, char *, char ***));
+ */
+int
+__qam_extent_names(dbenv, name, namelistp)
+ DB_ENV *dbenv;
+ char *name;
+ char ***namelistp;
+{
+ DB *dbp;
+ QUEUE *qp;
+ QUEUE_FILELIST *filelist, *fp;
+ char buf[MAXPATHLEN], **cp, *freep;
+ int cnt, len, ret;
+
+ *namelistp = NULL;
+ filelist = NULL;
+ if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ return (ret);
+ if ((ret = __db_open(dbp,
+ NULL, name, NULL, DB_QUEUE, DB_RDONLY, 0, PGNO_BASE_MD)) != 0)
+ return (ret);
+ qp = dbp->q_internal;
+ if (qp->page_ext == 0)
+ goto done;
+
+ if ((ret = __qam_gen_filelist(dbp, &filelist)) != 0)
+ goto done;
+
+ if (filelist == NULL)
+ goto done;
+
+ cnt = 0;
+ for (fp = filelist; fp->mpf != NULL; fp++)
+ cnt++;
+
+ /* QUEUE_EXTENT contains extra chars, but add 6 anyway for the int. */
+ len = (u_int32_t)(cnt * (sizeof(**namelistp)
+ + strlen(QUEUE_EXTENT) + strlen(qp->dir) + strlen(qp->name) + 6));
+
+ if ((ret =
+ __os_malloc(dbp->dbenv, len, namelistp)) != 0)
+ goto done;
+ cp = *namelistp;
+ freep = (char *)(cp + cnt + 1);
+ for (fp = filelist; fp->mpf != NULL; fp++) {
+ QAM_EXNAME(qp, fp->id, buf, sizeof(buf));
+ len = (u_int32_t)strlen(buf);
+ *cp++ = freep;
+ strcpy(freep, buf);
+ freep += len + 1;
+ }
+ *cp = NULL;
+
+done:
+ if (filelist != NULL)
+ __os_free(dbp->dbenv, filelist);
+ (void)__db_close(dbp, NULL, DB_NOSYNC);
+
+ return (ret);
+}
+
+/*
+ * __qam_exid --
+ * Generate a fileid for an extent based on the fileid of the main
+ * file. Since we do not log schema creates/deletes explicitly, the log
+ * never captures the fileid of an extent file. In order that masters and
+ * replicas have the same fileids (so they can explicitly delete them), we
+ * use computed fileids for the extent files of Queue files.
+ *
+ * An extent file id retains the low order 12 bytes of the file id and
+ * overwrites the dev/inode fields, placing a 0 in the inode field, and
+ * the extent number in the dev field.
+ *
+ * PUBLIC: void __qam_exid __P((DB *, u_int8_t *, u_int32_t));
+ */
+void
+__qam_exid(dbp, fidp, exnum)
+ DB *dbp;
+ u_int8_t *fidp;
+ u_int32_t exnum;
+{
+ int i;
+ u_int8_t *p;
+
+ /* Copy the fileid from the master. */
+ memcpy(fidp, dbp->fileid, DB_FILE_ID_LEN);
+
+ /* The first four bytes are the inode or the FileIndexLow; 0 it. */
+ for (i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = 0;
+
+ /* The next four bytes are the dev/FileIndexHigh; insert the exnum . */
+ for (p = (u_int8_t *)&exnum, i = sizeof(u_int32_t); i > 0; --i)
+ *fidp++ = *p++;
+}
+
+/*
+ * __qam_nameop --
+ * Remove or rename extent files associated with a particular file.
+ * This is to remove or rename (both in mpool and the file system) any
+ * extent files associated with the given dbp.
+ * This is either called from the QUEUE remove or rename methods or
+ * when undoing a transaction that created the database.
+ *
+ * PUBLIC: int __qam_nameop __P((DB *, DB_TXN *, const char *, qam_name_op));
+ */
+int __qam_nameop(dbp, txn, newname, op)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *newname;
+ qam_name_op op;
+{
+ DB_ENV *dbenv;
+ QUEUE *qp;
+ char buf[MAXPATHLEN], nbuf[MAXPATHLEN], sepsave;
+ char *endname, *endpath, *exname, *fullname, **names;
+ char *ndir, *namep, *new, *cp;
+ int cnt, exlen, fulllen, i, len, ret, t_ret;
+ u_int8_t fid[DB_FILE_ID_LEN];
+ u_int32_t exid;
+
+ ret = t_ret = 0;
+ dbenv = dbp->dbenv;
+ qp = (QUEUE *)dbp->q_internal;
+ namep = exname = fullname = NULL;
+
+ /* If this isn't a queue with extents, we're done. */
+ if (qp->page_ext == 0)
+ return (0);
+
+ /*
+ * Generate the list of all queue extents for this file (from the
+ * file system) and then cycle through removing them and evicting
+ * from mpool. We have two modes of operation here. If we are
+ * undoing log operations, then do not write log records and try
+ * to keep going even if we encounter failures in nameop. If we
+ * are in mainline code, then return as soon as we have a problem.
+ * Memory allocation errors (__db_appname, __os_malloc) are always
+ * considered failure.
+ */
+
+ /*
+ * Set buf to : dir/__dbq.NAME.0 and fullname to HOME/dir/__dbq.NAME.0
+ * or, in the case of an absolute path: /dir/__dbq.NAME.0
+ */
+ QAM_EXNAME(qp, 0, buf, sizeof(buf));
+ if ((ret =
+ __db_appname(dbenv, DB_APP_DATA, buf, 0, NULL, &fullname)) != 0)
+ return (ret);
+
+ /* We should always have a path separator here. */
+ if ((endpath = __db_rpath(fullname)) == NULL) {
+ ret = EINVAL;
+ goto err;
+ }
+ sepsave = *endpath;
+ *endpath = '\0';
+
+ /*
+ * Get the list of all names in the directory and restore the
+ * path separator.
+ */
+ if ((ret = __os_dirlist(dbenv, fullname, &names, &cnt)) != 0)
+ goto err;
+ *endpath = sepsave;
+
+ /* If there aren't any names, don't allocate any space. */
+ if (cnt == 0)
+ goto err;
+
+ /*
+ * Now, make endpath reference the queue extent names upon which
+ * we can match. Then we set the end of the path to be the
+ * beginning of the extent number, and we can compare the bytes
+ * between endpath and endname (__dbq.NAME.).
+ */
+ endpath++;
+ endname = strrchr(endpath, '.');
+ if (endname == NULL) {
+ ret = EINVAL;
+ goto err;
+ }
+ ++endname;
+ *endname = '\0';
+ len = strlen(endpath);
+ fulllen = strlen(fullname);
+
+ /* Allocate space for a full extent name. */
+ exlen = fulllen + 20;
+ if ((ret = __os_malloc(dbenv, exlen, &exname)) != 0)
+ goto err;
+
+ ndir = new = NULL;
+ if (newname != NULL) {
+ if ((ret = __os_strdup(dbenv, newname, &namep)) != 0)
+ goto err;
+ ndir = namep;
+ if ((new = __db_rpath(namep)) != NULL)
+ *new++ = '\0';
+ else {
+ new = namep;
+ ndir = PATH_DOT;
+ }
+ }
+ for (i = 0; i < cnt; i++) {
+ /* Check if this is a queue extent file. */
+ if (strncmp(names[i], endpath, len) != 0)
+ continue;
+ /* Make sure we have all numbers. foo.db vs. foo.db.0. */
+ for (cp = &names[i][len]; *cp != '\0'; cp++)
+ if (!isdigit(*cp))
+ break;
+ if (*cp != '\0')
+ continue;
+
+ /*
+ * We have a queue extent file. We need to generate its
+ * name and its fileid.
+ */
+
+ exid = atol(names[i] + len);
+ __qam_exid(dbp, fid, exid);
+
+ switch (op) {
+ case QAM_NAME_DISCARD:
+ snprintf(exname, exlen,
+ "%s%s", fullname, names[i] + len);
+ if ((t_ret = __memp_nameop(dbenv,
+ fid, NULL, exname, NULL)) != 0 && ret == 0)
+ ret = t_ret;
+ break;
+
+ case QAM_NAME_RENAME:
+ snprintf(nbuf, sizeof(nbuf), QUEUE_EXTENT,
+ ndir, PATH_SEPARATOR[0], new, exid);
+ QAM_EXNAME(qp, exid, buf, sizeof(buf));
+ if ((ret = __fop_rename(dbenv,
+ txn, buf, nbuf, fid, DB_APP_DATA,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ?
+ DB_LOG_NOT_DURABLE : 0)) != 0)
+ goto err;
+ break;
+
+ case QAM_NAME_REMOVE:
+ QAM_EXNAME(qp, exid, buf, sizeof(buf));
+ if ((ret = __fop_remove(dbenv, txn, fid, buf,
+ DB_APP_DATA, F_ISSET(dbp, DB_AM_NOT_DURABLE) ?
+ DB_LOG_NOT_DURABLE : 0)) != 0)
+ goto err;
+ break;
+ }
+ }
+
+err: if (fullname != NULL)
+ __os_free(dbenv, fullname);
+ if (exname != NULL)
+ __os_free(dbenv, exname);
+ if (namep != NULL)
+ __os_free(dbenv, namep);
+ return (ret);
+}
diff --git a/db/qam/qam_method.c b/db/qam/qam_method.c
index 1c94f4b8d..b0270f767 100644
--- a/db/qam/qam_method.c
+++ b/db/qam/qam_method.c
@@ -1,34 +1,34 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_method.c,v 11.17 2001/01/10 04:50:54 ubell Exp $";
+static const char revid[] = "$Id: qam_method.c,v 11.64 2003/10/01 20:03:43 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_int.h"
-#include "db_shash.h"
-#include "db_am.h"
-#include "qam.h"
-#include "db.h"
-#include "mp.h"
-#include "lock.h"
-#include "log.h"
-
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/fop.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/txn.h"
+
+static int __qam_get_extentsize __P((DB *, u_int32_t *));
static int __qam_set_extentsize __P((DB *, u_int32_t));
-static int __qam_remove_callback __P((DB *, void *));
struct __qam_cookie {
DB_LSN lsn;
@@ -52,6 +52,7 @@ __qam_db_create(dbp)
if ((ret = __os_calloc(dbp->dbenv, 1, sizeof(QUEUE), &t)) != 0)
return (ret);
dbp->q_internal = t;
+ dbp->get_q_extentsize = __qam_get_extentsize;
dbp->set_q_extentsize = __qam_set_extentsize;
t->re_pad = ' ';
@@ -63,11 +64,12 @@ __qam_db_create(dbp)
* __qam_db_close --
* Queue specific discard of the DB structure.
*
- * PUBLIC: int __qam_db_close __P((DB *));
+ * PUBLIC: int __qam_db_close __P((DB *, u_int32_t));
*/
int
-__qam_db_close(dbp)
+__qam_db_close(dbp, flags)
DB *dbp;
+ u_int32_t flags;
{
DB_MPOOLFILE *mpf;
MPFARRAY *array;
@@ -77,7 +79,8 @@ __qam_db_close(dbp)
int ret, t_ret;
ret = 0;
- t = dbp->q_internal;
+ if ((t = dbp->q_internal) == NULL)
+ return (0);
array = &t->array1;
again:
@@ -87,11 +90,12 @@ again:
i <= array->hi_extent; i++, mpfp++) {
mpf = mpfp->mpf;
mpfp->mpf = NULL;
- if (mpf != NULL &&
- (t_ret = memp_fclose(mpf)) != 0 && ret == 0)
+ if (mpf != NULL && (t_ret = __memp_fclose(mpf,
+ LF_ISSET(DB_AM_DISCARD) ? DB_MPOOL_DISCARD : 0))
+ != 0 && ret == 0)
ret = t_ret;
}
- __os_free(array->mpfarray, 0);
+ __os_free(dbp->dbenv, array->mpfarray);
}
if (t->array2.n_extent != 0) {
array = &t->array2;
@@ -99,23 +103,37 @@ again:
goto again;
}
+ if (LF_ISSET(DB_AM_DISCARD) &&
+ (t_ret = __qam_nameop(dbp, NULL,
+ NULL, QAM_NAME_DISCARD)) != 0 && ret == 0)
+ ret = t_ret;
+
if (t->path != NULL)
- __os_free(t->path, 0);
- __os_free(t, sizeof(QUEUE));
+ __os_free(dbp->dbenv, t->path);
+ __os_free(dbp->dbenv, t);
dbp->q_internal = NULL;
return (ret);
}
static int
+__qam_get_extentsize(dbp, q_extentsizep)
+ DB *dbp;
+ u_int32_t *q_extentsizep;
+{
+ *q_extentsizep = ((QUEUE*)dbp->q_internal)->page_ext;
+ return (0);
+}
+
+static int
__qam_set_extentsize(dbp, extentsize)
DB *dbp;
u_int32_t extentsize;
{
- DB_ILLEGAL_AFTER_OPEN(dbp, "set_extentsize");
+ DB_ILLEGAL_AFTER_OPEN(dbp, "DB->set_extentsize");
if (extentsize < 1) {
- __db_err(dbp->dbenv, "Extent size must be at least 1.");
+ __db_err(dbp->dbenv, "Extent size must be at least 1");
return (EINVAL);
}
@@ -128,29 +146,35 @@ __qam_set_extentsize(dbp, extentsize)
* __db_prqueue --
* Print out a queue
*
- * PUBLIC: int __db_prqueue __P((DB *, u_int32_t));
+ * PUBLIC: int __db_prqueue __P((DB *, FILE *, u_int32_t));
*/
int
-__db_prqueue(dbp, flags)
+__db_prqueue(dbp, fp, flags)
DB *dbp;
+ FILE *fp;
u_int32_t flags;
{
+ DB_MPOOLFILE *mpf;
PAGE *h;
QMETA *meta;
db_pgno_t first, i, last, pg_ext, stop;
- int ret;
+ int ret, t_ret;
+
+ mpf = dbp->mpf;
/* Find out the page number of the last page in the database. */
i = PGNO_BASE_MD;
- if ((ret = memp_fget(dbp->mpf, &i, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &i, 0, &meta)) != 0)
return (ret);
first = QAM_RECNO_PAGE(dbp, meta->first_recno);
last = QAM_RECNO_PAGE(dbp, meta->cur_recno);
- if ((ret = __db_prpage(dbp, (PAGE *)meta, flags)) != 0)
- return (ret);
- if ((ret = memp_fput(dbp->mpf, meta, 0)) != 0)
+ ret = __db_prpage(dbp, (PAGE *)meta, fp, flags);
+ if ((t_ret = __memp_fput(mpf, meta, 0)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if (ret != 0)
return (ret);
i = first;
@@ -162,20 +186,20 @@ __db_prqueue(dbp, flags)
/* Dump each page. */
begin:
for (; i <= stop; ++i) {
- if ((ret = __qam_fget(dbp, &i, DB_MPOOL_EXTENT, &h)) != 0) {
+ if ((ret = __qam_fget(dbp, &i, 0, &h)) != 0) {
pg_ext = ((QUEUE *)dbp->q_internal)->page_ext;
if (pg_ext == 0) {
- if (ret == EINVAL && first == last)
+ if (ret == DB_PAGE_NOTFOUND && first == last)
return (0);
return (ret);
}
- if (ret == ENOENT || ret == EINVAL) {
+ if (ret == ENOENT || ret == DB_PAGE_NOTFOUND) {
i += pg_ext - ((i - 1) % pg_ext) - 1;
continue;
}
return (ret);
}
- (void)__db_prpage(dbp, h, flags);
+ (void)__db_prpage(dbp, h, fp, flags);
if ((ret = __qam_fput(dbp, i, h, 0)) != 0)
return (ret);
}
@@ -193,31 +217,26 @@ begin:
* __qam_remove
* Remove method for a Queue.
*
- * PUBLIC: int __qam_remove __P((DB *, const char *,
- * PUBLIC: const char *, DB_LSN *, int (**)(DB *, void*), void **));
+ * PUBLIC: int __qam_remove __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, const char *, DB_LSN *));
*/
int
-__qam_remove(dbp, name, subdb, lsnp, callbackp, cookiep)
+__qam_remove(dbp, txn, name, subdb, lsnp)
DB *dbp;
+ DB_TXN *txn;
const char *name, *subdb;
DB_LSN *lsnp;
- int (**callbackp) __P((DB *, void *));
- void **cookiep;
{
- DBT namedbt;
DB_ENV *dbenv;
- DB_LSN lsn;
- MPFARRAY *ap;
+ DB *tmpdbp;
QUEUE *qp;
- int ret;
- char *backup, buf[256], *real_back, *real_name;
- QUEUE_FILELIST *filelist, *fp;
- struct __qam_cookie *qam_cookie;
+ int ret, needclose, t_ret;
+
+ COMPQUIET(lsnp, NULL);
dbenv = dbp->dbenv;
ret = 0;
- backup = real_back = real_name = NULL;
- filelist = NULL;
+ needclose = 0;
PANIC_CHECK(dbenv);
@@ -226,148 +245,62 @@ __qam_remove(dbp, name, subdb, lsnp, callbackp, cookiep)
*/
if (subdb != NULL) {
__db_err(dbenv,
- "Queue does not support multiple databases per file.");
+ "Queue does not support multiple databases per file");
ret = EINVAL;
- goto done;
+ goto err;
}
- qp = (QUEUE *)dbp->q_internal;
-
- if (qp->page_ext != 0 &&
- (ret = __qam_gen_filelist(dbp, &filelist)) != 0)
- goto done;
-
- if (filelist == NULL)
- goto done;
-
- for (fp = filelist; fp->mpf != NULL; fp++) {
- snprintf(buf,
- sizeof(buf), QUEUE_EXTENT, qp->dir, qp->name, fp->id);
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, buf, 0, NULL, &real_name)) != 0)
- goto done;
- if (LOGGING_ON(dbenv)) {
- memset(&namedbt, 0, sizeof(namedbt));
- namedbt.data = (char *)buf;
- namedbt.size = strlen(buf) + 1;
-
- if ((ret =
- __qam_delete_log(dbenv, dbp->open_txn,
- &lsn, DB_FLUSH, &namedbt, lsnp)) != 0) {
- __db_err(dbenv,
- "%s: %s", name, db_strerror(ret));
- goto done;
- }
- }
- (void)__memp_fremove(fp->mpf);
- if ((ret = memp_fclose(fp->mpf)) != 0)
- goto done;
- if (qp->array2.n_extent == 0 || qp->array2.low_extent > fp->id)
- ap = &qp->array1;
- else
- ap = &qp->array2;
- ap->mpfarray[fp->id - ap->low_extent].mpf = NULL;
-
- /* Create name for backup file. */
- if (TXN_ON(dbenv)) {
- if ((ret = __db_backup_name(dbenv,
- buf, &backup, lsnp)) != 0)
- goto done;
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, backup, 0, NULL, &real_back)) != 0)
- goto done;
- if ((ret = __os_rename(dbenv,
- real_name, real_back)) != 0)
- goto done;
- __os_freestr(real_back);
- real_back = NULL;
- }
- else
- if ((ret = __os_unlink(dbenv, real_name)) != 0)
- goto done;
- __os_freestr(real_name);
- real_name = NULL;
+ /*
+ * Since regular remove no longer opens the database, we may have
+ * to do it here.
+ */
+ if (F_ISSET(dbp, DB_AM_OPEN_CALLED))
+ tmpdbp = dbp;
+ else {
+ if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
+ return (ret);
+ /*
+ * We need to make sure we don't self-deadlock, so give
+ * this dbp the same locker as the incoming one.
+ */
+ tmpdbp->lid = dbp->lid;
+
+ /*
+ * If this is a transactional dbp and the open fails, then
+ * the transactional abort will close the dbp. If it's not
+ * a transactional open, then we always have to close it
+ * even if the open fails. Once the open has succeeded,
+ * then we will always want to close it.
+ */
+ if (txn == NULL)
+ needclose = 1;
+ if ((ret = __db_open(tmpdbp,
+ txn, name, NULL, DB_QUEUE, 0, 0, PGNO_BASE_MD)) != 0)
+ goto err;
+ needclose = 1;
}
- if ((ret= __os_malloc(dbenv,
- sizeof(struct __qam_cookie), NULL, &qam_cookie)) != 0)
- goto done;
- qam_cookie->lsn = *lsnp;
- qam_cookie->filelist = filelist;
- *cookiep = qam_cookie;
- *callbackp = __qam_remove_callback;
-
-done:
- if (ret != 0 && filelist != NULL)
- __os_free(filelist, 0);
- if (real_back != NULL)
- __os_freestr(real_back);
- if (real_name != NULL)
- __os_freestr(real_name);
- if (backup != NULL)
- __os_freestr(backup);
-
- return (ret);
-}
-
-static int
-__qam_remove_callback(dbp, cookie)
- DB *dbp;
- void *cookie;
-{
- DB_ENV *dbenv;
- DB_LSN *lsnp;
- QUEUE *qp;
- QUEUE_FILELIST *filelist, *fp;
- char *backup, buf[256], *real_back;
- int ret;
- qp = (QUEUE *)dbp->q_internal;
- if (qp->page_ext == 0)
- return (__os_unlink(dbp->dbenv, cookie));
+ qp = (QUEUE *)tmpdbp->q_internal;
- dbenv = dbp->dbenv;
- lsnp = &((struct __qam_cookie *)cookie)->lsn;
- filelist = fp = ((struct __qam_cookie *)cookie)->filelist;
- real_back = backup = NULL;
- if ((ret =
- __db_backup_name(dbenv, qp->name, &backup, lsnp)) != 0)
- goto err;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto err;
- if ((ret = __os_unlink(dbp->dbenv, real_back)) != 0)
- goto err;
+ if (qp->page_ext != 0)
+ ret = __qam_nameop(tmpdbp, txn, NULL, QAM_NAME_REMOVE);
- __os_freestr(backup);
- __os_freestr(real_back);
+err: if (needclose) {
+ /*
+ * Since we copied the lid from the dbp, we'd better not
+ * free it here.
+ */
+ tmpdbp->lid = DB_LOCK_INVALIDID;
- if (fp == NULL)
- return (0);
+ /* We need to remove the lockevent we associated with this. */
+ if (txn != NULL)
+ __txn_remlock(dbenv,
+ txn, &tmpdbp->handle_lock, DB_LOCK_INVALIDID);
- for (; fp->mpf != NULL; fp++) {
- snprintf(buf,
- sizeof(buf), QUEUE_EXTENT, qp->dir, qp->name, fp->id);
- real_back = backup = NULL;
- if ((ret = __db_backup_name(dbenv, buf, &backup, lsnp)) != 0)
- goto err;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto err;
- ret = __os_unlink(dbenv, real_back);
- __os_freestr(real_back);
- __os_freestr(backup);
+ if ((t_ret =
+ __db_close(tmpdbp, txn, DB_NOSYNC)) != 0 && ret == 0)
+ ret = t_ret;
}
- __os_free(filelist, 0);
- __os_free(cookie, sizeof (struct __qam_cookie));
-
- return (0);
-
-err:
- if (backup != NULL)
- __os_freestr(backup);
-
- if (real_back != NULL)
- __os_freestr(real_back);
return (ret);
}
@@ -376,97 +309,65 @@ err:
* __qam_rename
* Rename method for Queue.
*
- * PUBLIC: int __qam_rename __P((DB *,
+ * PUBLIC: int __qam_rename __P((DB *, DB_TXN *,
* PUBLIC: const char *, const char *, const char *));
*/
int
-__qam_rename(dbp, filename, subdb, newname)
+__qam_rename(dbp, txn, filename, subdb, newname)
DB *dbp;
+ DB_TXN *txn;
const char *filename, *subdb, *newname;
{
- DBT namedbt, newnamedbt;
DB_ENV *dbenv;
- DB_LSN newlsn;
- MPFARRAY *ap;
+ DB *tmpdbp;
QUEUE *qp;
- QUEUE_FILELIST *fp, *filelist;
- char buf[256], nbuf[256], *namep, *real_name, *real_newname;
- int ret;
+ int ret, needclose, t_ret;
dbenv = dbp->dbenv;
ret = 0;
- real_name = real_newname = NULL;
- filelist = NULL;
-
- qp = (QUEUE *)dbp->q_internal;
+ needclose = 0;
if (subdb != NULL) {
__db_err(dbenv,
- "Queue does not support multiple databases per file.");
+ "Queue does not support multiple databases per file");
ret = EINVAL;
goto err;
}
- if (qp->page_ext != 0 &&
- (ret = __qam_gen_filelist(dbp, &filelist)) != 0)
- goto err;
- if ((namep = __db_rpath(newname)) != NULL)
- newname = namep + 1;
-
- for (fp = filelist; fp != NULL && fp->mpf != NULL; fp++) {
- if ((ret = __memp_fremove(fp->mpf)) != 0)
- goto err;
- if ((ret = memp_fclose(fp->mpf)) != 0)
- goto err;
- if (qp->array2.n_extent == 0 || qp->array2.low_extent > fp->id)
- ap = &qp->array1;
- else
- ap = &qp->array2;
- ap->mpfarray[fp->id - ap->low_extent].mpf = NULL;
- snprintf(buf,
- sizeof(buf), QUEUE_EXTENT, qp->dir, qp->name, fp->id);
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, buf, 0, NULL, &real_name)) != 0)
- goto err;
- snprintf(nbuf,
- sizeof(nbuf), QUEUE_EXTENT, qp->dir, newname, fp->id);
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, nbuf, 0, NULL, &real_newname)) != 0)
- goto err;
- if (LOGGING_ON(dbenv)) {
- memset(&namedbt, 0, sizeof(namedbt));
- namedbt.data = (char *)buf;
- namedbt.size = strlen(buf) + 1;
-
- memset(&newnamedbt, 0, sizeof(namedbt));
- newnamedbt.data = (char *)nbuf;
- newnamedbt.size = strlen(nbuf) + 1;
-
- if ((ret =
- __qam_rename_log(dbenv,
- dbp->open_txn, &newlsn, 0,
- &namedbt, &newnamedbt)) != 0) {
- __db_err(dbenv, "%s: %s", filename, db_strerror(ret));
- goto err;
- }
- if ((ret = __log_filelist_update(dbenv, dbp,
- dbp->log_fileid, newname, NULL)) != 0)
- goto err;
- }
- if ((ret = __os_rename(dbenv, real_name, real_newname)) != 0)
+ /*
+ * Since regular rename no longer opens the database, we may have
+ * to do it here.
+ */
+ if (F_ISSET(dbp, DB_AM_OPEN_CALLED))
+ tmpdbp = dbp;
+ else {
+ if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
+ return (ret);
+ /* Copy the incoming locker so we don't self-deadlock. */
+ tmpdbp->lid = dbp->lid;
+ needclose = 1;
+ if ((ret = __db_open(tmpdbp,
+ txn, filename, NULL, DB_QUEUE, 0, 0, PGNO_BASE_MD)) != 0)
goto err;
- __os_freestr(real_name);
- __os_freestr(real_newname);
- real_name = real_newname = NULL;
}
-err:
- if (real_name != NULL)
- __os_freestr(real_name);
- if (real_newname != NULL)
- __os_freestr(real_newname);
- if (filelist != NULL)
- __os_free(filelist, 0);
+ qp = (QUEUE *)tmpdbp->q_internal;
+ if (qp->page_ext != 0)
+ ret = __qam_nameop(tmpdbp, txn, newname, QAM_NAME_RENAME);
+
+err: if (needclose) {
+ /* We copied this, so we mustn't free it. */
+ tmpdbp->lid = DB_LOCK_INVALIDID;
+
+ /* We need to remove the lockevent we associated with this. */
+ if (txn != NULL)
+ __txn_remlock(dbenv,
+ txn, &tmpdbp->handle_lock, DB_LOCK_INVALIDID);
+
+ if ((t_ret =
+ __db_close(tmpdbp, txn, DB_NOSYNC)) != 0 && ret == 0)
+ ret = t_ret;
+ }
return (ret);
}
diff --git a/db/qam/qam_open.c b/db/qam/qam_open.c
index 73346439f..53b9e17a1 100644
--- a/db/qam/qam_open.c
+++ b/db/qam/qam_open.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_open.c,v 11.31 2000/12/20 17:59:29 ubell Exp $";
+static const char revid[] = "$Id: qam_open.c,v 11.66 2003/09/25 01:35:38 margo Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,198 +18,150 @@ static const char revid[] = "$Id: qam_open.c,v 11.31 2000/12/20 17:59:29 ubell E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_swap.h"
-#include "db_am.h"
-#include "lock.h"
-#include "qam.h"
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_swap.h"
+#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include "dbinc/fop.h"
+
+static int __qam_init_meta __P((DB *, QMETA *));
/*
* __qam_open
*
- * PUBLIC: int __qam_open __P((DB *, const char *, db_pgno_t, int, u_int32_t));
+ * PUBLIC: int __qam_open __P((DB *,
+ * PUBLIC: DB_TXN *, const char *, db_pgno_t, int, u_int32_t));
*/
int
-__qam_open(dbp, name, base_pgno, mode, flags)
+__qam_open(dbp, txn, name, base_pgno, mode, flags)
DB *dbp;
+ DB_TXN *txn;
const char *name;
db_pgno_t base_pgno;
int mode;
u_int32_t flags;
{
- QUEUE *t;
DBC *dbc;
+ DB_ENV *dbenv;
DB_LOCK metalock;
- DB_LSN orig_lsn;
+ DB_MPOOLFILE *mpf;
QMETA *qmeta;
- int locked;
+ QUEUE *t;
int ret, t_ret;
- ret = 0;
- locked = 0;
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
t = dbp->q_internal;
+ ret = 0;
+ qmeta = NULL;
if (name == NULL && t->page_ext != 0) {
- __db_err(dbp->dbenv,
- "Extent size may not be specified for in-memory queue database.");
+ __db_err(dbenv,
+ "Extent size may not be specified for in-memory queue database");
return (EINVAL);
}
+
/* Initialize the remaining fields/methods of the DB. */
- dbp->del = __qam_delete;
- dbp->put = __qam_put;
- dbp->stat = __qam_stat;
- dbp->sync = __qam_sync;
dbp->db_am_remove = __qam_remove;
dbp->db_am_rename = __qam_rename;
- metalock.off = LOCK_INVALID;
-
/*
* Get a cursor. If DB_CREATE is specified, we may be creating
* pages, and to do that safely in CDB we need a write cursor.
* In STD_LOCKING mode, we'll synchronize using the meta page
* lock instead.
*/
- if ((ret = dbp->cursor(dbp, dbp->open_txn,
- &dbc, LF_ISSET(DB_CREATE) && CDB_LOCKING(dbp->dbenv) ?
+ if ((ret = __db_cursor(dbp, txn, &dbc,
+ LF_ISSET(DB_CREATE) && CDB_LOCKING(dbenv) ?
DB_WRITECURSOR : 0)) != 0)
return (ret);
- /* Get, and optionally create the metadata page. */
+ /*
+ * Get the meta data page. It must exist, because creates of
+ * files/databases come in through the __qam_new_file interface
+ * and queue doesn't support subdatabases.
+ */
if ((ret =
__db_lget(dbc, 0, base_pgno, DB_LOCK_READ, 0, &metalock)) != 0)
goto err;
- if ((ret = memp_fget(
- dbp->mpf, &base_pgno, DB_MPOOL_CREATE, (PAGE **)&qmeta)) != 0)
+ if ((ret = __memp_fget(mpf, &base_pgno, 0, &qmeta)) != 0)
goto err;
- /*
- * If the magic number is correct, we're not creating the tree.
- * Correct any fields that may not be right. Note, all of the
- * local flags were set by DB->open.
- */
-again: if (qmeta->dbmeta.magic == DB_QAMMAGIC) {
- t->re_pad = qmeta->re_pad;
- t->re_len = qmeta->re_len;
- t->rec_page = qmeta->rec_page;
- t->page_ext = qmeta->page_ext;
-
- (void)memp_fput(dbp->mpf, (PAGE *)qmeta, 0);
- goto done;
- }
-
- /* If we're doing CDB; we now have to get the write lock. */
- if (CDB_LOCKING(dbp->dbenv)) {
- DB_ASSERT(LF_ISSET(DB_CREATE));
- if ((ret = lock_get(dbp->dbenv, dbc->locker, DB_LOCK_UPGRADE,
- &dbc->lock_dbt, DB_LOCK_WRITE, &dbc->mylock)) != 0)
- goto err;
- }
-
- /*
- * If we are doing locking, relase the read lock
- * and get a write lock. We want to avoid deadlock.
- */
- if (locked == 0 && STD_LOCKING(dbc)) {
- if ((ret = __LPUT(dbc, metalock)) != 0)
- goto err;
- if ((ret = __db_lget(dbc,
- 0, base_pgno, DB_LOCK_WRITE, 0, &metalock)) != 0)
- goto err;
- locked = 1;
- goto again;
- }
- /* Initialize the tree structure metadata information. */
- orig_lsn = qmeta->dbmeta.lsn;
- memset(qmeta, 0, sizeof(QMETA));
- ZERO_LSN(qmeta->dbmeta.lsn);
- qmeta->dbmeta.pgno = base_pgno;
- qmeta->dbmeta.magic = DB_QAMMAGIC;
- qmeta->dbmeta.version = DB_QAMVERSION;
- qmeta->dbmeta.pagesize = dbp->pgsize;
- qmeta->dbmeta.type = P_QAMMETA;
- qmeta->re_pad = t->re_pad;
- qmeta->re_len = t->re_len;
- qmeta->rec_page = CALC_QAM_RECNO_PER_PAGE(dbp);
- qmeta->cur_recno = 1;
- qmeta->first_recno = 1;
- qmeta->page_ext = t->page_ext;
- t->rec_page = qmeta->rec_page;
- memcpy(qmeta->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
-
- /* Verify that we can fit at least one record per page. */
- if (QAM_RECNO_PER_PAGE(dbp) < 1) {
- __db_err(dbp->dbenv,
- "Record size of %lu too large for page size of %lu",
- (u_long)t->re_len, (u_long)dbp->pgsize);
- (void)memp_fput(dbp->mpf, (PAGE *)qmeta, 0);
+ /* If the magic number is incorrect, that's a fatal error. */
+ if (qmeta->dbmeta.magic != DB_QAMMAGIC) {
+ __db_err(dbenv, "%s: unexpected file type or format", name);
ret = EINVAL;
goto err;
}
- if ((ret = __db_log_page(dbp,
- name, &orig_lsn, base_pgno, (PAGE *)qmeta)) != 0)
- goto err;
+ /* Setup information needed to open extents. */
+ t->page_ext = qmeta->page_ext;
- /* Release the metadata page. */
- if ((ret = memp_fput(dbp->mpf, (PAGE *)qmeta, DB_MPOOL_DIRTY)) != 0)
+ if (t->page_ext != 0 && (ret = __qam_set_ext_data(dbp, name)) != 0)
goto err;
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTLOG, ret, name);
- /*
- * Flush the metadata page to disk.
- *
- * !!!
- * It's not useful to return not-yet-flushed here -- convert it to
- * an error.
- */
- if ((ret = memp_fsync(dbp->mpf)) == DB_INCOMPLETE) {
- __db_err(dbp->dbenv, "Flush of metapage failed");
- ret = EINVAL;
- }
- DB_TEST_RECOVERY(dbp, DB_TEST_POSTSYNC, ret, name);
+ if (mode == 0)
+ mode = __db_omode("rwrw--");
+ t->mode = mode;
+ t->re_pad = qmeta->re_pad;
+ t->re_len = qmeta->re_len;
+ t->rec_page = qmeta->rec_page;
-done: t->q_meta = base_pgno;
+ t->q_meta = base_pgno;
t->q_root = base_pgno + 1;
- /* Setup information needed to open extents. */
- if (t->page_ext != 0) {
- t->finfo.pgcookie = &t->pgcookie;
- t->finfo.fileid = NULL;
- t->finfo.lsn_offset = 0;
-
- t->pginfo.db_pagesize = dbp->pgsize;
- t->pginfo.needswap = F_ISSET(dbp, DB_AM_SWAP);
- t->pgcookie.data = &t->pginfo;
- t->pgcookie.size = sizeof(DB_PGINFO);
-
- if ((ret = __os_strdup(dbp->dbenv, name, &t->path)) != 0)
- goto err;
- t->dir = t->path;
- if ((t->name = __db_rpath(t->path)) == NULL) {
- t->name = t->path;
- t->dir = PATH_DOT;
- } else
- *t->name++ = '\0';
-
- if (mode == 0)
- mode = __db_omode("rwrw--");
- t->mode = mode;
- }
+err: if (qmeta != NULL &&
+ (t_ret = __memp_fput(mpf, qmeta, 0)) != 0 && ret == 0)
+ ret = t_ret;
-err:
-DB_TEST_RECOVERY_LABEL
/* Don't hold the meta page long term. */
(void)__LPUT(dbc, metalock);
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if ((t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
/*
+ * __qam_set_ext_data --
+ * Setup DBP data for opening queue extents.
+ *
+ * PUBLIC: int __qam_set_ext_data __P((DB*, const char *));
+ */
+int
+__qam_set_ext_data(dbp, name)
+ DB *dbp;
+ const char *name;
+{
+ QUEUE *t;
+ int ret;
+
+ t = dbp->q_internal;
+ t->pginfo.db_pagesize = dbp->pgsize;
+ t->pginfo.flags =
+ F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
+ t->pginfo.type = dbp->type;
+ t->pgcookie.data = &t->pginfo;
+ t->pgcookie.size = sizeof(DB_PGINFO);
+
+ if ((ret = __os_strdup(dbp->dbenv, name, &t->path)) != 0)
+ return (ret);
+ t->dir = t->path;
+ if ((t->name = __db_rpath(t->path)) == NULL) {
+ t->name = t->path;
+ t->dir = PATH_DOT;
+ } else
+ *t->name++ = '\0';
+
+ return (0);
+}
+
+/*
* __qam_metachk --
*
* PUBLIC: int __qam_metachk __P((DB *, const char *, QMETA *));
@@ -225,6 +177,7 @@ __qam_metachk(dbp, name, qmeta)
int ret;
dbenv = dbp->dbenv;
+ ret = 0;
/*
* At this point, all we know is that the magic number is for a Queue.
@@ -241,6 +194,7 @@ __qam_metachk(dbp, name, qmeta)
name, (u_long)vers);
return (DB_OLD_VERSION);
case 3:
+ case 4:
break;
default:
__db_err(dbenv,
@@ -264,5 +218,132 @@ __qam_metachk(dbp, name, qmeta)
/* Copy the file's ID. */
memcpy(dbp->fileid, qmeta->dbmeta.uid, DB_FILE_ID_LEN);
+ /* Set up AM-specific methods that do not require an open. */
+ dbp->db_am_rename = __qam_rename;
+ dbp->db_am_remove = __qam_remove;
+
+ return (ret);
+}
+
+/*
+ * __qam_init_meta --
+ * Initialize the meta-data for a Queue database.
+ */
+static int
+__qam_init_meta(dbp, meta)
+ DB *dbp;
+ QMETA *meta;
+{
+ QUEUE *t;
+
+ t = dbp->q_internal;
+
+ memset(meta, 0, sizeof(QMETA));
+ LSN_NOT_LOGGED(meta->dbmeta.lsn);
+ meta->dbmeta.pgno = PGNO_BASE_MD;
+ meta->dbmeta.last_pgno = 0;
+ meta->dbmeta.magic = DB_QAMMAGIC;
+ meta->dbmeta.version = DB_QAMVERSION;
+ meta->dbmeta.pagesize = dbp->pgsize;
+ if (F_ISSET(dbp, DB_AM_CHKSUM))
+ FLD_SET(meta->dbmeta.metaflags, DBMETA_CHKSUM);
+ if (F_ISSET(dbp, DB_AM_ENCRYPT)) {
+ meta->dbmeta.encrypt_alg =
+ ((DB_CIPHER *)dbp->dbenv->crypto_handle)->alg;
+ DB_ASSERT(meta->dbmeta.encrypt_alg != 0);
+ meta->crypto_magic = meta->dbmeta.magic;
+ }
+ meta->dbmeta.type = P_QAMMETA;
+ meta->re_pad = t->re_pad;
+ meta->re_len = t->re_len;
+ meta->rec_page = CALC_QAM_RECNO_PER_PAGE(dbp);
+ meta->cur_recno = 1;
+ meta->first_recno = 1;
+ meta->page_ext = t->page_ext;
+ t->rec_page = meta->rec_page;
+ memcpy(meta->dbmeta.uid, dbp->fileid, DB_FILE_ID_LEN);
+
+ /* Verify that we can fit at least one record per page. */
+ if (QAM_RECNO_PER_PAGE(dbp) < 1) {
+ __db_err(dbp->dbenv,
+ "Record size of %lu too large for page size of %lu",
+ (u_long)t->re_len, (u_long)dbp->pgsize);
+ return (EINVAL);
+ }
+
return (0);
}
+
+/*
+ * __qam_new_file --
+ * Create the necessary pages to begin a new queue database file.
+ *
+ * This code appears more complex than it is because of the two cases (named
+ * and unnamed). The way to read the code is that for each page being created,
+ * there are three parts: 1) a "get page" chunk (which either uses malloc'd
+ * memory or calls __memp_fget), 2) the initialization, and 3) the "put page"
+ * chunk which either does a fop write or an __memp_fput.
+ *
+ * PUBLIC: int __qam_new_file __P((DB *, DB_TXN *, DB_FH *, const char *));
+ */
+int
+__qam_new_file(dbp, txn, fhp, name)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_FH *fhp;
+ const char *name;
+{
+ QMETA *meta;
+ DB_ENV *dbenv;
+ DB_MPOOLFILE *mpf;
+ DB_PGINFO pginfo;
+ DBT pdbt;
+ db_pgno_t pgno;
+ int ret;
+ void *buf;
+
+ dbenv = dbp->dbenv;
+ mpf = dbp->mpf;
+ buf = NULL;
+ meta = NULL;
+
+ /* Build meta-data page. */
+
+ if (name == NULL) {
+ pgno = PGNO_BASE_MD;
+ ret = __memp_fget(mpf, &pgno, DB_MPOOL_CREATE, &meta);
+ } else {
+ ret = __os_calloc(dbp->dbenv, 1, dbp->pgsize, &buf);
+ meta = (QMETA *)buf;
+ }
+ if (ret != 0)
+ return (ret);
+
+ if ((ret = __qam_init_meta(dbp, meta)) != 0)
+ goto err;
+
+ if (name == NULL)
+ ret = __memp_fput(mpf, meta, DB_MPOOL_DIRTY);
+ else {
+ pginfo.db_pagesize = dbp->pgsize;
+ pginfo.flags =
+ F_ISSET(dbp, (DB_AM_CHKSUM | DB_AM_ENCRYPT | DB_AM_SWAP));
+ pginfo.type = DB_QUEUE;
+ pdbt.data = &pginfo;
+ pdbt.size = sizeof(pginfo);
+ if ((ret = __db_pgout(dbenv, PGNO_BASE_MD, meta, &pdbt)) != 0)
+ goto err;
+ ret = __fop_write(dbenv, txn, name,
+ DB_APP_DATA, fhp, dbp->pgsize, 0, 0, buf, dbp->pgsize, 1,
+ F_ISSET(dbp, DB_AM_NOT_DURABLE) ? DB_LOG_NOT_DURABLE : 0);
+ }
+ if (ret != 0)
+ goto err;
+ meta = NULL;
+
+err: if (name != NULL)
+ __os_free(dbenv, buf);
+ else if (meta != NULL)
+ (void)__memp_fput(mpf, meta, 0);
+ return (ret);
+}
diff --git a/db/qam/qam_rec.c b/db/qam/qam_rec.c
index 4d330f586..d846118ac 100644
--- a/db/qam/qam_rec.c
+++ b/db/qam/qam_rec.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_rec.c,v 11.34 2001/01/19 18:01:59 bostic Exp $";
+static const char revid[] = "$Id: qam_rec.c,v 11.75 2003/08/17 23:38:14 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,91 +18,13 @@ static const char revid[] = "$Id: qam_rec.c,v 11.34 2001/01/19 18:01:59 bostic E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "lock.h"
-#include "db_am.h"
-#include "qam.h"
-#include "log.h"
-
-/*
- * __qam_inc_recover --
- * Recovery function for inc.
- *
- * PUBLIC: int __qam_inc_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__qam_inc_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __qam_inc_args *argp;
- DB *file_dbp;
- DBC *dbc;
- DB_LOCK lock;
- DB_MPOOLFILE *mpf;
- QMETA *meta;
- db_pgno_t metapg;
- int cmp_p, modified, ret;
-
- COMPQUIET(info, NULL);
- REC_PRINT(__qam_inc_print);
- REC_INTRO(__qam_inc_read, 1);
-
- metapg = ((QUEUE *)file_dbp->q_internal)->q_meta;
-
- if ((ret = __db_lget(dbc,
- LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
- goto done;
- if ((ret = memp_fget(mpf, &metapg, 0, &meta)) != 0) {
- if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
- &metapg, DB_MPOOL_CREATE, &meta)) != 0) {
- (void)__LPUT(dbc, lock);
- goto out;
- }
- meta->dbmeta.pgno = metapg;
- meta->dbmeta.type = P_QAMMETA;
-
- } else {
- *lsnp = argp->prev_lsn;
- ret = 0;
- (void)__LPUT(dbc, lock);
- goto out;
- }
- }
-
- modified = 0;
- cmp_p = log_compare(&LSN(meta), &argp->lsn);
- CHECK_LSN(op, cmp_p, &LSN(meta), &argp->lsn);
-
- /*
- * The cur_recno never goes backwards. It is a point of
- * contention among appenders. If one fails cur_recno will
- * most likely be beyond that one when it aborts.
- * We move it ahead on either an abort or a commit
- * and make the LSN reflect that fact.
- */
- if (cmp_p == 0) {
- modified = 1;
- meta->cur_recno++;
- if (meta->cur_recno == RECNO_OOB)
- meta->cur_recno++;
- meta->dbmeta.lsn = *lsnp;
- }
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)))
- goto out;
-
- (void)__LPUT(dbc, lock);
-
-done: *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: REC_CLOSE;
-}
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
+#include "dbinc/log.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
/*
* __qam_incfirst_recover --
@@ -123,13 +45,13 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
DB *file_dbp;
DBC *dbc;
DB_LOCK lock;
+ DB_LSN trunc_lsn;
DB_MPOOLFILE *mpf;
QMETA *meta;
QUEUE_CURSOR *cp;
db_pgno_t metapg;
int exact, modified, ret, rec_ext;
- COMPQUIET(info, NULL);
REC_PRINT(__qam_incfirst_print);
REC_INTRO(__qam_incfirst_read, 1);
@@ -138,9 +60,9 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
goto done;
- if ((ret = memp_fget(mpf, &metapg, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = __memp_fget(mpf,
&metapg, DB_MPOOL_CREATE, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto out;
@@ -167,6 +89,14 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
meta->first_recno = argp->recno;
modified = 1;
}
+
+ trunc_lsn = ((DB_TXNHEAD *)info)->trunc_lsn;
+ /* if we are truncating, update the LSN */
+ if (!IS_ZERO_LSN(trunc_lsn) &&
+ log_compare(&LSN(meta), &trunc_lsn) > 0) {
+ LSN(meta) = trunc_lsn;
+ modified = 1;
+ }
} else {
if (log_compare(&LSN(meta), lsnp) < 0) {
LSN(meta) = *lsnp;
@@ -178,11 +108,11 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
cp = (QUEUE_CURSOR *)dbc->internal;
if (meta->first_recno == RECNO_OOB)
meta->first_recno++;
- while (meta->first_recno != meta->cur_recno
- && !QAM_BEFORE_FIRST(meta, argp->recno + 1)) {
+ while (meta->first_recno != meta->cur_recno &&
+ !QAM_BEFORE_FIRST(meta, argp->recno + 1)) {
if ((ret = __qam_position(dbc,
&meta->first_recno, QAM_READ, &exact)) != 0)
- goto out;
+ goto err;
if (cp->page != NULL)
__qam_fput(file_dbp, cp->pgno, cp->page, 0);
@@ -192,7 +122,7 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
rec_ext != 0 && meta->first_recno % rec_ext == 0)
if ((ret =
__qam_fremove(file_dbp, cp->pgno)) != 0)
- goto out;
+ goto err;
meta->first_recno++;
if (meta->first_recno == RECNO_OOB)
meta->first_recno++;
@@ -200,14 +130,19 @@ __qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
}
}
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)))
- goto out;
+ if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
+ goto err1;
(void)__LPUT(dbc, lock);
done: *lsnp = argp->prev_lsn;
ret = 0;
+ if (0) {
+err: (void)__memp_fput(mpf, meta, 0);
+err1: (void)__LPUT(dbc, lock);
+ }
+
out: REC_CLOSE;
}
@@ -229,13 +164,13 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
__qam_mvptr_args *argp;
DB *file_dbp;
DBC *dbc;
+ DB_LSN trunc_lsn;
DB_LOCK lock;
DB_MPOOLFILE *mpf;
QMETA *meta;
db_pgno_t metapg;
- int cmp_p, modified, ret;
+ int cmp_n, cmp_p, modified, ret;
- COMPQUIET(info, NULL);
REC_PRINT(__qam_mvptr_print);
REC_INTRO(__qam_mvptr_read, 1);
@@ -244,9 +179,9 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
goto done;
- if ((ret = memp_fget(mpf, &metapg, 0, &meta)) != 0) {
+ if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
if (DB_REDO(op)) {
- if ((ret = memp_fget(mpf,
+ if ((ret = __memp_fget(mpf,
&metapg, DB_MPOOL_CREATE, &meta)) != 0) {
(void)__LPUT(dbc, lock);
goto out;
@@ -262,13 +197,31 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
}
modified = 0;
- cmp_p = log_compare(&meta->dbmeta.lsn, &argp->metalsn);
+ cmp_n = log_compare(lsnp, &LSN(meta));
+ cmp_p = log_compare(&LSN(meta), &argp->metalsn);
/*
- * We never undo a movement of one of the pointers.
- * Just move them along regardless of abort/commit.
+ * Under normal circumstances, we never undo a movement of one of
+ * the pointers. Just move them along regardless of abort/commit.
+ *
+ * If we're undoing a truncate, we need to reset the pointers to
+ * their state before the truncate.
*/
- if (cmp_p == 0) {
+ if (DB_UNDO(op)) {
+ if ((argp->opcode & QAM_TRUNCATE) && cmp_n <= 0) {
+ meta->first_recno = argp->old_first;
+ meta->cur_recno = argp->old_cur;
+ LSN(meta) = argp->metalsn;
+ modified = 1;
+ }
+ /* If the page lsn is beyond the truncate point, move it back */
+ trunc_lsn = ((DB_TXNHEAD *)info)->trunc_lsn;
+ if (!IS_ZERO_LSN(trunc_lsn) &&
+ log_compare(&trunc_lsn, &LSN(meta)) < 0) {
+ LSN(meta) = argp->metalsn;
+ modified = 1;
+ }
+ } else if (op == DB_TXN_APPLY || cmp_p == 0) {
if (argp->opcode & QAM_SETFIRST)
meta->first_recno = argp->new_first;
@@ -279,7 +232,7 @@ __qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
meta->dbmeta.lsn = *lsnp;
}
- if ((ret = memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)))
+ if ((ret = __memp_fput(mpf, meta, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
(void)__LPUT(dbc, lock);
@@ -289,6 +242,7 @@ done: *lsnp = argp->prev_lsn;
out: REC_CLOSE;
}
+
/*
* __qam_del_recover --
* Recovery function for del.
@@ -321,7 +275,7 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
REC_INTRO(__qam_del_read, 1);
if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
goto out;
modified = 0;
@@ -338,20 +292,20 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
metapg = ((QUEUE *)file_dbp->q_internal)->q_meta;
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
- return (ret);
- if ((ret = memp_fget(file_dbp->mpf, &metapg, 0, &meta)) != 0) {
+ goto err;
+ if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
(void)__LPUT(dbc, lock);
- goto done;
+ goto err;
}
if (meta->first_recno == RECNO_OOB ||
- (QAM_BEFORE_FIRST(meta, argp->recno)
- && (meta->first_recno <= meta->cur_recno
- || meta->first_recno -
+ (QAM_BEFORE_FIRST(meta, argp->recno) &&
+ (meta->first_recno <= meta->cur_recno ||
+ meta->first_recno -
argp->recno < argp->recno - meta->cur_recno))) {
meta->first_recno = argp->recno;
- (void)memp_fput(file_dbp->mpf, meta, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, meta, DB_MPOOL_DIRTY);
} else
- (void)memp_fput(file_dbp->mpf, meta, 0);
+ (void)__memp_fput(mpf, meta, 0);
(void)__LPUT(dbc, lock);
/* Need to undo delete - mark the record as present */
@@ -366,10 +320,10 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
* is harmless in queue except when we're determining
* what we need to roll forward during recovery. [#2588]
*/
- if (op == DB_TXN_BACKWARD_ROLL && cmp_n < 0)
+ if (op == DB_TXN_BACKWARD_ROLL && cmp_n <= 0)
LSN(pagep) = argp->lsn;
modified = 1;
- } else if (cmp_n > 0 && DB_REDO(op)) {
+ } else if (op == DB_TXN_APPLY || (cmp_n > 0 && DB_REDO(op))) {
/* Need to redo delete - clear the valid bit */
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
F_CLR(qp, QAM_VALID);
@@ -377,14 +331,18 @@ __qam_del_recover(dbenv, dbtp, lsnp, op, info)
modified = 1;
}
if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)))
+ argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
ret = 0;
+ if (0) {
+err: (void)__qam_fput(file_dbp, argp->pgno, pagep, 0);
+ }
out: REC_CLOSE;
}
+
/*
* __qam_delext_recover --
* Recovery function for del in an extent based queue.
@@ -415,9 +373,19 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
REC_PRINT(__qam_delext_print);
REC_INTRO(__qam_delext_read, 1);
- if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
+ if ((ret = __qam_fget(file_dbp, &argp->pgno, 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND && ret != ENOENT)
+ goto out;
+ /*
+ * If we are redoing a delete and the page is not there
+ * we are done.
+ */
+ if (DB_REDO(op))
+ goto done;
+ if ((ret = __qam_fget(file_dbp,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ }
modified = 0;
if (pagep->pgno == PGNO_INVALID) {
@@ -433,25 +401,25 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
metapg = ((QUEUE *)file_dbp->q_internal)->q_meta;
if ((ret = __db_lget(dbc,
LCK_ROLLBACK, metapg, DB_LOCK_WRITE, 0, &lock)) != 0)
- return (ret);
- if ((ret = memp_fget(file_dbp->mpf, &metapg, 0, &meta)) != 0) {
+ goto err;
+ if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0) {
(void)__LPUT(dbc, lock);
- goto done;
+ goto err;
}
if (meta->first_recno == RECNO_OOB ||
- (QAM_BEFORE_FIRST(meta, argp->recno)
- && (meta->first_recno <= meta->cur_recno
- || meta->first_recno -
+ (QAM_BEFORE_FIRST(meta, argp->recno) &&
+ (meta->first_recno <= meta->cur_recno ||
+ meta->first_recno -
argp->recno < argp->recno - meta->cur_recno))) {
meta->first_recno = argp->recno;
- (void)memp_fput(file_dbp->mpf, meta, DB_MPOOL_DIRTY);
+ (void)__memp_fput(mpf, meta, DB_MPOOL_DIRTY);
} else
- (void)memp_fput(file_dbp->mpf, meta, 0);
+ (void)__memp_fput(mpf, meta, 0);
(void)__LPUT(dbc, lock);
if ((ret = __qam_pitem(dbc, pagep,
argp->indx, argp->recno, &argp->data)) != 0)
- goto done;
+ goto err;
/*
* Move the LSN back to this point; do not move it forward.
@@ -461,10 +429,10 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
* is harmless in queue except when we're determining
* what we need to roll forward during recovery. [#2588]
*/
- if (op == DB_TXN_BACKWARD_ROLL && cmp_n < 0)
+ if (op == DB_TXN_BACKWARD_ROLL && cmp_n <= 0)
LSN(pagep) = argp->lsn;
modified = 1;
- } else if (cmp_n > 0 && DB_REDO(op)) {
+ } else if (op == DB_TXN_APPLY || (cmp_n > 0 && DB_REDO(op))) {
/* Need to redo delete - clear the valid bit */
qp = QAM_GET_RECORD(file_dbp, pagep, argp->indx);
F_CLR(qp, QAM_VALID);
@@ -472,12 +440,15 @@ __qam_delext_recover(dbenv, dbtp, lsnp, op, info)
modified = 1;
}
if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)))
+ argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
ret = 0;
+ if (0) {
+err: (void)__qam_fput(file_dbp, argp->pgno, pagep, 0);
+ }
out: REC_CLOSE;
}
@@ -485,7 +456,8 @@ out: REC_CLOSE;
* __qam_add_recover --
* Recovery function for add.
*
- * PUBLIC: int __qam_add_recover __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ * PUBLIC: int __qam_add_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
*/
int
__qam_add_recover(dbenv, dbtp, lsnp, op, info)
@@ -503,16 +475,26 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
QMETA *meta;
QPAGE *pagep;
db_pgno_t metapg;
- int cmp_n, modified, ret;
+ int cmp_n, meta_dirty, modified, ret;
COMPQUIET(info, NULL);
REC_PRINT(__qam_add_print);
REC_INTRO(__qam_add_read, 1);
modified = 0;
- if ((ret = __qam_fget(file_dbp,
- &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
- goto out;
+ if ((ret = __qam_fget(file_dbp, &argp->pgno, 0, &pagep)) != 0) {
+ if (ret != DB_PAGE_NOTFOUND && ret != ENOENT)
+ goto out;
+ /*
+ * If we are undoing an append and the page is not there
+ * we are done.
+ */
+ if (DB_UNDO(op))
+ goto done;
+ if ((ret = __qam_fget(file_dbp,
+ &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
+ goto out;
+ }
if (pagep->pgno == PGNO_INVALID) {
pagep->pgno = argp->pgno;
@@ -522,25 +504,34 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
cmp_n = log_compare(lsnp, &LSN(pagep));
- if (cmp_n > 0 && DB_REDO(op)) {
- /* Need to redo add - put the record on page */
- if ((ret = __qam_pitem(dbc, pagep, argp->indx, argp->recno,
- &argp->data)) != 0)
- goto err;
- LSN(pagep) = *lsnp;
- modified = 1;
- /* Make sure first pointer includes this record. */
+ if (DB_REDO(op)) {
+ /* Fix meta-data page. */
metapg = ((QUEUE *)file_dbp->q_internal)->q_meta;
- if ((ret = memp_fget(mpf, &metapg, 0, &meta)) != 0)
+ if ((ret = __memp_fget(mpf, &metapg, 0, &meta)) != 0)
goto err;
+ meta_dirty = 0;
if (QAM_BEFORE_FIRST(meta, argp->recno)) {
meta->first_recno = argp->recno;
- if ((ret = memp_fput(mpf, meta, DB_MPOOL_DIRTY)) != 0)
- goto err;
- } else
- if ((ret = memp_fput(mpf, meta, 0)) != 0)
- goto err;
+ meta_dirty = 1;
+ }
+ if (argp->recno == meta->cur_recno ||
+ QAM_AFTER_CURRENT(meta, argp->recno)) {
+ meta->cur_recno = argp->recno + 1;
+ meta_dirty = 1;
+ }
+ if ((ret = __memp_fput(mpf,
+ meta, meta_dirty? DB_MPOOL_DIRTY : 0)) != 0)
+ goto err;
+ /* Now update the actual page if necessary. */
+ if (op == DB_TXN_APPLY || cmp_n > 0) {
+ /* Need to redo add - put the record on page */
+ if ((ret = __qam_pitem(dbc,
+ pagep, argp->indx, argp->recno, &argp->data)) != 0)
+ goto err;
+ LSN(pagep) = *lsnp;
+ modified = 1;
+ }
} else if (DB_UNDO(op)) {
/*
* Need to undo add
@@ -572,161 +563,20 @@ __qam_add_recover(dbenv, dbtp, lsnp, op, info)
* is harmless in queue except when we're determining
* what we need to roll forward during recovery. [#2588]
*/
- if (op == DB_TXN_BACKWARD_ROLL && cmp_n < 0)
+ if (op == DB_TXN_BACKWARD_ROLL && cmp_n <= 0)
LSN(pagep) = argp->lsn;
}
-err: if ((ret = __qam_fput(file_dbp,
- argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)))
+ if ((ret = __qam_fput(file_dbp,
+ argp->pgno, pagep, modified ? DB_MPOOL_DIRTY : 0)) != 0)
goto out;
done: *lsnp = argp->prev_lsn;
ret = 0;
-out: REC_CLOSE;
-}
-/*
- * __qam_delete_recover --
- * Recovery function for delete of an extent.
- *
- * PUBLIC: int __qam_delete_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__qam_delete_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __qam_delete_args *argp;
- int ret;
- char *backup, *real_back, *real_name;
-
- COMPQUIET(info, NULL);
-
- REC_PRINT(__qam_delete_print);
-
- backup = real_back = real_name = NULL;
- if ((ret = __qam_delete_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
-
- if (DB_REDO(op)) {
- /*
- * On a recovery, as we recreate what was going on, we
- * recreate the creation of the file. And so, even though
- * it committed, we need to delete it. Try to delete it,
- * but it is not an error if that delete fails.
- */
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_name, NULL) == 0) {
- if ((ret = __os_unlink(dbenv, real_name)) != 0)
- goto out;
- }
- } else if (DB_UNDO(op)) {
- /*
- * Trying to undo. File may or may not have been deleted.
- * Try to move the backup to the original. If the backup
- * exists, then this is right. If it doesn't exist, then
- * nothing will happen and that's OK.
- */
- if ((ret = __db_backup_name(dbenv, argp->name.data,
- &backup, &argp->lsn)) != 0)
- goto out;
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, backup, 0, NULL, &real_back)) != 0)
- goto out;
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_back, NULL) == 0)
- if ((ret =
- __os_rename(dbenv, real_back, real_name)) != 0)
- goto out;
- }
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: if (argp != NULL)
- __os_free(argp, 0);
- if (backup != NULL)
- __os_freestr(backup);
- if (real_back != NULL)
- __os_freestr(real_back);
- if (real_name != NULL)
- __os_freestr(real_name);
- return (ret);
-}
-/*
- * __qam_rename_recover --
- * Recovery function for rename.
- *
- * PUBLIC: int __qam_rename_recover
- * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- */
-int
-__qam_rename_recover(dbenv, dbtp, lsnp, op, info)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops op;
- void *info;
-{
- __qam_rename_args *argp;
- char *new_name, *real_name;
- int ret;
-
- COMPQUIET(info, NULL);
-
- REC_PRINT(__qam_rename_print);
-
- new_name = real_name = NULL;
-
- if ((ret = __qam_rename_read(dbenv, dbtp->data, &argp)) != 0)
- goto out;
-
- if (DB_REDO(op)) {
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->name.data, 0, NULL, &real_name)) != 0)
- goto out;
- if (__os_exists(real_name, NULL) == 0) {
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, argp->newname.data,
- 0, NULL, &new_name)) != 0)
- goto out;
- if ((ret = __os_rename(dbenv,
- real_name, new_name)) != 0)
- goto out;
- }
- } else {
- if ((ret = __db_appname(dbenv, DB_APP_DATA,
- NULL, argp->newname.data, 0, NULL, &new_name)) != 0)
- goto out;
- if (__os_exists(new_name, NULL) == 0) {
- if ((ret = __db_appname(dbenv,
- DB_APP_DATA, NULL, argp->name.data,
- 0, NULL, &real_name)) != 0)
- goto out;
- if ((ret = __os_rename(dbenv,
- new_name, real_name)) != 0)
- goto out;
- }
+ if (0) {
+err: (void)__qam_fput(file_dbp, argp->pgno, pagep, 0);
}
- *lsnp = argp->prev_lsn;
- ret = 0;
-
-out: if (argp != NULL)
- __os_free(argp, 0);
-
- if (new_name != NULL)
- __os_free(new_name, 0);
-
- if (real_name != NULL)
- __os_free(real_name, 0);
-
- return (ret);
+out: REC_CLOSE;
}
diff --git a/db/qam/qam_stat.c b/db/qam/qam_stat.c
index 865f477c1..bc6409e2f 100644
--- a/db/qam/qam_stat.c
+++ b/db/qam/qam_stat.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_stat.c,v 11.16 2001/01/10 04:50:54 ubell Exp $";
+static const char revid[] = "$Id: qam_stat.c,v 11.38 2003/09/04 18:06:48 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,87 +18,71 @@ static const char revid[] = "$Id: qam_stat.c,v 11.16 2001/01/10 04:50:54 ubell E
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_shash.h"
-#include "db_am.h"
-#include "lock.h"
-#include "qam.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
/*
* __qam_stat --
* Gather/print the qam statistics
*
- * PUBLIC: int __qam_stat __P((DB *, void *, void *(*)(size_t), u_int32_t));
+ * PUBLIC: int __qam_stat __P((DBC *, void *, u_int32_t));
*/
int
-__qam_stat(dbp, spp, db_malloc, flags)
- DB *dbp;
+__qam_stat(dbc, spp, flags)
+ DBC *dbc;
void *spp;
- void *(*db_malloc) __P((size_t));
u_int32_t flags;
{
- QUEUE *t;
- DBC *dbc;
+ DB *dbp;
DB_LOCK lock;
+ DB_MPOOLFILE *mpf;
DB_QUEUE_STAT *sp;
PAGE *h;
QAMDATA *qp, *ep;
QMETA *meta;
+ QUEUE *t;
db_indx_t indx;
db_pgno_t first, last, pgno, pg_ext, stop;
u_int32_t re_len;
- int ret, t_ret;
+ int ret;
- PANIC_CHECK(dbp->dbenv);
- DB_ILLEGAL_BEFORE_OPEN(dbp, "DB->stat");
+ dbp = dbc->dbp;
- t = dbp->q_internal;
+ LOCK_INIT(lock);
+ mpf = dbp->mpf;
sp = NULL;
- lock.off = LOCK_INVALID;
-
- /* Check for invalid flags. */
- if ((ret = __db_statchk(dbp, flags)) != 0)
- return (ret);
+ t = dbp->q_internal;
if (spp == NULL)
return (0);
- /* Acquire a cursor. */
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
- return (ret);
-
- DEBUG_LWRITE(dbc, NULL, "qam_stat", NULL, NULL, flags);
-
/* Allocate and clear the structure. */
- if ((ret = __os_malloc(dbp->dbenv, sizeof(*sp), db_malloc, &sp)) != 0)
+ if ((ret = __os_umalloc(dbp->dbenv, sizeof(*sp), &sp)) != 0)
goto err;
memset(sp, 0, sizeof(*sp));
re_len = ((QUEUE *)dbp->q_internal)->re_len;
- if (flags == DB_CACHED_COUNTS) {
- if ((ret = __db_lget(dbc,
- 0, t->q_meta, DB_LOCK_READ, 0, &lock)) != 0)
- goto err;
- if ((ret =
- memp_fget(dbp->mpf, &t->q_meta, 0, (PAGE **)&meta)) != 0)
- goto err;
- sp->qs_nkeys = meta->dbmeta.key_count;
- sp->qs_ndata = meta->dbmeta.record_count;
-
- goto done;
- }
/* Determine the last page of the database. */
- if ((ret = __db_lget(dbc,
- 0, t->q_meta, DB_LOCK_READ, 0, &lock)) != 0)
+ if ((ret = __db_lget(dbc, 0, t->q_meta, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &t->q_meta, 0, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->q_meta, 0, &meta)) != 0)
goto err;
+ if (flags == DB_FAST_STAT || flags == DB_CACHED_COUNTS) {
+ sp->qs_nkeys = meta->dbmeta.key_count;
+ sp->qs_ndata = meta->dbmeta.record_count;
+ goto meta_only;
+ }
+
first = QAM_RECNO_PAGE(dbp, meta->first_recno);
last = QAM_RECNO_PAGE(dbp, meta->cur_recno);
- if ((ret = memp_fput(dbp->mpf, meta, 0)) != 0)
+ if ((ret = __memp_fput(mpf, meta, 0)) != 0)
goto err;
(void)__LPUT(dbc, lock);
@@ -114,20 +98,23 @@ begin:
/* Walk through the pages and count. */
for (; pgno <= stop; ++pgno) {
if ((ret =
- __db_lget(dbc,
- 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
+ __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lock)) != 0)
goto err;
- ret = __qam_fget(dbp, &pgno, DB_MPOOL_EXTENT, &h);
+ ret = __qam_fget(dbp, &pgno, 0, &h);
if (ret == ENOENT) {
pgno += pg_ext - 1;
continue;
}
- if (ret == EINVAL) {
+ if (ret == DB_PAGE_NOTFOUND) {
+ if (pg_ext == 0) {
+ if (pgno != stop && first != last)
+ goto err;
+ ret = 0;
+ break;
+ }
pgno += pg_ext - ((pgno - 1) % pg_ext) - 1;
continue;
}
- if (ret == EIO && first == last && pg_ext == 0)
- break;
if (ret != 0)
goto err;
@@ -147,6 +134,8 @@ begin:
goto err;
(void)__LPUT(dbc, lock);
}
+
+ (void)__LPUT(dbc, lock);
if (first > last) {
pgno = 1;
stop = last;
@@ -159,26 +148,28 @@ begin:
0, t->q_meta, F_ISSET(dbp, DB_AM_RDONLY) ?
DB_LOCK_READ : DB_LOCK_WRITE, 0, &lock)) != 0)
goto err;
- if ((ret = memp_fget(dbp->mpf, &t->q_meta, 0, (PAGE **)&meta)) != 0)
+ if ((ret = __memp_fget(mpf, &t->q_meta, 0, &meta)) != 0)
goto err;
+ if (!F_ISSET(dbp, DB_AM_RDONLY))
+ meta->dbmeta.key_count =
+ meta->dbmeta.record_count = sp->qs_ndata;
+ sp->qs_nkeys = sp->qs_ndata;
+
+meta_only:
/* Get the metadata fields. */
sp->qs_magic = meta->dbmeta.magic;
sp->qs_version = meta->dbmeta.version;
sp->qs_metaflags = meta->dbmeta.flags;
sp->qs_pagesize = meta->dbmeta.pagesize;
+ sp->qs_extentsize = meta->page_ext;
sp->qs_re_len = meta->re_len;
sp->qs_re_pad = meta->re_pad;
sp->qs_first_recno = meta->first_recno;
sp->qs_cur_recno = meta->cur_recno;
- sp->qs_nkeys = sp->qs_ndata;
- if (!F_ISSET(dbp, DB_AM_RDONLY))
- meta->dbmeta.key_count =
- meta->dbmeta.record_count = sp->qs_ndata;
-done:
/* Discard the meta-data page. */
- if ((ret = memp_fput(dbp->mpf,
+ if ((ret = __memp_fput(mpf,
meta, F_ISSET(dbp, DB_AM_RDONLY) ? 0 : DB_MPOOL_DIRTY)) != 0)
goto err;
(void)__LPUT(dbc, lock);
@@ -188,14 +179,10 @@ done:
if (0) {
err: if (sp != NULL)
- __os_free(sp, sizeof(*sp));
+ __os_ufree(dbp->dbenv, sp);
}
- if (lock.off != LOCK_INVALID)
- (void)__LPUT(dbc, lock);
-
- if ((t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
- ret = t_ret;
+ (void)__LPUT(dbc, lock);
return (ret);
}
diff --git a/db/qam/qam_stub.c b/db/qam/qam_stub.c
new file mode 100644
index 000000000..941aacfb4
--- /dev/null
+++ b/db/qam/qam_stub.c
@@ -0,0 +1,338 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: qam_stub.c,v 1.7 2003/10/28 18:52:34 bostic Exp $";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/qam.h"
+
+/*
+ * If the library wasn't compiled with the Queue access method, various
+ * routines aren't available. Stub them here, returning an appropriate
+ * error.
+ */
+
+/*
+ * __db_no_queue_am --
+ * Error when a Berkeley DB build doesn't include the access method.
+ *
+ * PUBLIC: int __db_no_queue_am __P((DB_ENV *));
+ */
+int
+__db_no_queue_am(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv,
+ "library build did not include support for the Queue access method");
+ return (DB_OPNOTSUP);
+}
+
+int
+__db_prqueue(dbp, fp, flags)
+ DB *dbp;
+ FILE *fp;
+ u_int32_t flags;
+{
+ COMPQUIET(fp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_31_qammeta(dbp, real_name, buf)
+ DB *dbp;
+ char *real_name;
+ u_int8_t *buf;
+{
+ COMPQUIET(real_name, NULL);
+ COMPQUIET(buf, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_32_qammeta(dbp, real_name, buf)
+ DB *dbp;
+ char *real_name;
+ u_int8_t *buf;
+{
+ COMPQUIET(real_name, NULL);
+ COMPQUIET(buf, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_append(dbc, key, data)
+ DBC *dbc;
+ DBT *key, *data;
+{
+ COMPQUIET(key, NULL);
+ COMPQUIET(data, NULL);
+ return (__db_no_queue_am(dbc->dbp->dbenv));
+}
+
+int
+__qam_c_dup(orig_dbc, new_dbc)
+ DBC *orig_dbc, *new_dbc;
+{
+ COMPQUIET(new_dbc, NULL);
+ return (__db_no_queue_am(orig_dbc->dbp->dbenv));
+}
+
+int
+__qam_c_init(dbc)
+ DBC *dbc;
+{
+ return (__db_no_queue_am(dbc->dbp->dbenv));
+}
+
+int
+__qam_db_close(dbp, flags)
+ DB *dbp;
+ u_int32_t flags;
+{
+ COMPQUIET(dbp, NULL);
+ COMPQUIET(flags, 0);
+ return (0);
+}
+
+int
+__qam_db_create(dbp)
+ DB *dbp;
+{
+ COMPQUIET(dbp, NULL);
+ return (0);
+}
+
+int
+__qam_extent_names(dbenv, name, namelistp)
+ DB_ENV *dbenv;
+ char *name;
+ char ***namelistp;
+{
+ COMPQUIET(name, NULL);
+ COMPQUIET(namelistp, NULL);
+ return (__db_no_queue_am(dbenv));
+}
+
+int
+__qam_gen_filelist(dbp, filelistp)
+ DB *dbp;
+ QUEUE_FILELIST **filelistp;
+{
+ COMPQUIET(filelistp, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_init_getpgnos(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__qam_init_print(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__qam_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(dtabp, NULL);
+ COMPQUIET(dtabsizep, NULL);
+ return (0);
+}
+
+int
+__qam_metachk(dbp, name, qmeta)
+ DB *dbp;
+ const char *name;
+ QMETA *qmeta;
+{
+ COMPQUIET(name, NULL);
+ COMPQUIET(qmeta, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_new_file(dbp, txn, fhp, name)
+ DB *dbp;
+ DB_TXN *txn;
+ DB_FH *fhp;
+ const char *name;
+{
+ COMPQUIET(txn, NULL);
+ COMPQUIET(fhp, NULL);
+ COMPQUIET(name, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_open(dbp, txn, name, base_pgno, mode, flags)
+ DB *dbp;
+ DB_TXN *txn;
+ const char *name;
+ db_pgno_t base_pgno;
+ int mode;
+ u_int32_t flags;
+{
+ COMPQUIET(txn, NULL);
+ COMPQUIET(name, NULL);
+ COMPQUIET(base_pgno, 0);
+ COMPQUIET(mode, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_pgin_out(dbenv, pg, pp, cookie)
+ DB_ENV *dbenv;
+ db_pgno_t pg;
+ void *pp;
+ DBT *cookie;
+{
+ COMPQUIET(pg, 0);
+ COMPQUIET(pp, NULL);
+ COMPQUIET(cookie, NULL);
+ return (__db_no_queue_am(dbenv));
+}
+
+int
+__qam_salvage(dbp, vdp, pgno, h, handle, callback, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ PAGE *h;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(h, NULL);
+ COMPQUIET(handle, NULL);
+ COMPQUIET(callback, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_set_ext_data(dbp, name)
+ DB *dbp;
+ const char *name;
+{
+ COMPQUIET(name, NULL);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_stat(dbc, spp, flags)
+ DBC *dbc;
+ void *spp;
+ u_int32_t flags;
+{
+ COMPQUIET(spp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbc->dbp->dbenv));
+}
+
+int
+__qam_sync(dbp)
+ DB *dbp;
+{
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_truncate(dbc, countp)
+ DBC *dbc;
+ u_int32_t *countp;
+{
+ COMPQUIET(dbc, NULL);
+ COMPQUIET(countp, NULL);
+ return (__db_no_queue_am(dbc->dbp->dbenv));
+}
+
+int
+__qam_vrfy_data(dbp, vdp, h, pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ QPAGE *h;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(h, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_vrfy_meta(dbp, vdp, meta, pgno, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ QMETA *meta;
+ db_pgno_t pgno;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(meta, NULL);
+ COMPQUIET(pgno, 0);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_vrfy_structure(dbp, vdp, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
+
+int
+__qam_vrfy_walkqueue(dbp, vdp, handle, callback, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ COMPQUIET(vdp, NULL);
+ COMPQUIET(handle, NULL);
+ COMPQUIET(callback, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_no_queue_am(dbp->dbenv));
+}
diff --git a/db/qam/qam_upgrade.c b/db/qam/qam_upgrade.c
index f49bfe88d..b10b4696a 100644
--- a/db/qam/qam_upgrade.c
+++ b/db/qam/qam_upgrade.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_upgrade.c,v 11.7 2000/11/30 00:58:44 ubell Exp $";
+static const char revid[] = "$Id: qam_upgrade.c,v 11.14 2003/01/08 05:37:44 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,10 +18,9 @@ static const char revid[] = "$Id: qam_upgrade.c,v 11.7 2000/11/30 00:58:44 ubell
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_swap.h"
-#include "db_am.h"
-#include "db_upgrade.h"
+#include "dbinc/db_upgrade.h"
+#include "dbinc/db_page.h"
+#include "dbinc/qam.h"
/*
* __qam_31_qammeta --
diff --git a/db/qam/qam_verify.c b/db/qam/qam_verify.c
index a9a467d67..ddbc9525f 100644
--- a/db/qam/qam_verify.c
+++ b/db/qam/qam_verify.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: qam_verify.c,v 1.17 2000/12/12 17:39:35 bostic Exp $";
+static const char revid[] = "$Id: qam_verify.c,v 1.45 2003/08/12 19:51:55 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,10 +17,14 @@ static const char revid[] = "$Id: qam_verify.c,v 1.17 2000/12/12 17:39:35 bostic
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_verify.h"
-#include "qam.h"
-#include "db_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_verify.h"
+#include "dbinc/db_am.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/mp.h"
+#include "dbinc/qam.h"
+#include <stdlib.h>
+#include <string.h>
/*
* __qam_vrfy_meta --
@@ -37,8 +41,19 @@ __qam_vrfy_meta(dbp, vdp, meta, pgno, flags)
db_pgno_t pgno;
u_int32_t flags;
{
+ DB_ENV *dbenv;
+ QUEUE *qp;
VRFY_PAGEINFO *pip;
- int isbad, ret, t_ret;
+ db_pgno_t *extents, extid, first, last;
+ size_t len;
+ int count, i, isbad, nextents, ret, t_ret;
+ char *buf, **names;
+
+ dbenv = dbp->dbenv;
+ first = last = 0;
+ buf = NULL;
+ names = NULL;
+ qp = (QUEUE *)dbp->q_internal;
if ((ret = __db_vrfy_getpageinfo(vdp, pgno, &pip)) != 0)
return (ret);
@@ -49,39 +64,121 @@ __qam_vrfy_meta(dbp, vdp, meta, pgno, flags)
* something very odd is going on.
*/
if (!F_ISSET(pip, VRFY_INCOMPLETE))
- EPRINT((dbp->dbenv, "Queue databases must be one-per-file."));
+ EPRINT((dbenv, "Page %lu: queue databases must be one-per-file",
+ (u_long)pgno));
/*
- * cur_recno/rec_page
- * Cur_recno may be one beyond the end of the page and
- * we start numbering from 1.
+ * Because the metapage pointers are rolled forward by
+ * aborting transactions, the extent of the queue may
+ * extend beyond the allocated pages, so we do
+ * not check that meta_current is within the allocated
+ * pages.
*/
- if (vdp->last_pgno > 0 && meta->cur_recno > 0 &&
- meta->cur_recno - 1 > meta->rec_page * vdp->last_pgno) {
- EPRINT((dbp->dbenv,
- "Current recno %lu references record past last page number %lu",
- meta->cur_recno, vdp->last_pgno));
- isbad = 1;
- }
/*
* re_len: If this is bad, we can't safely verify queue data pages, so
* return DB_VERIFY_FATAL
*/
if (ALIGN(meta->re_len + sizeof(QAMDATA) - 1, sizeof(u_int32_t)) *
- meta->rec_page + sizeof(QPAGE) > dbp->pgsize) {
- EPRINT((dbp->dbenv,
- "Queue record length %lu impossibly high for page size and records per page",
- meta->re_len));
+ meta->rec_page + QPAGE_SZ(dbp) > dbp->pgsize) {
+ EPRINT((dbenv,
+ "Page %lu: queue record length %lu too high for page size and recs/page",
+ (u_long)pgno, (u_long)meta->re_len));
ret = DB_VERIFY_FATAL;
goto err;
} else {
- vdp->re_len = meta->re_len;
- vdp->rec_page = meta->rec_page;
+ /*
+ * We initialize the Queue internal pointer; we may need
+ * it when handling extents. It would get set up in open,
+ * if we called open normally, but we don't.
+ */
+ qp->re_len = vdp->re_len = meta->re_len;
+ qp->rec_page = vdp->rec_page = meta->rec_page;
+ qp->page_ext = vdp->page_ext = meta->page_ext;
}
-err: if ((t_ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 && ret == 0)
+ /*
+ * There's no formal maximum extentsize, and a 0 value represents
+ * no extents, so there's nothing to verify.
+ *
+ * Note that since QUEUE databases can't have subdatabases, it's an
+ * error to see more than one QUEUE metadata page in a single
+ * verifier run. Theoretically, this should really be a structure
+ * rather than a per-page check, but since we're setting qp fields
+ * here (and have only one qp to set) we raise the alarm now if
+ * this assumption fails. (We need the qp info to be reasonable
+ * before we do per-page verification of queue extents.)
+ */
+ if (F_ISSET(vdp, VRFY_QMETA_SET)) {
+ isbad = 1;
+ EPRINT((dbenv,
+ "Page %lu: database contains multiple Queue metadata pages",
+ (u_long)pgno));
+ goto err;
+ }
+ F_SET(vdp, VRFY_QMETA_SET);
+ qp->page_ext = meta->page_ext;
+ dbp->pgsize = meta->dbmeta.pagesize;
+ qp->q_meta = pgno;
+ qp->q_root = pgno + 1;
+ vdp->first_recno = meta->first_recno;
+ vdp->last_recno = meta->cur_recno;
+ if (qp->page_ext != 0) {
+ first = QAM_RECNO_EXTENT(dbp, vdp->first_recno);
+ last = QAM_RECNO_EXTENT(dbp, vdp->last_recno);
+ }
+
+ /*
+ * Look in the data directory to see if there are any extents
+ * around that are not in the range of the queue. If so,
+ * then report that and look there if we are salvaging.
+ */
+
+ if ((ret = __db_appname(dbenv,
+ DB_APP_DATA, qp->dir, 0, NULL, &buf)) != 0)
+ goto err;
+ if ((ret = __os_dirlist(dbenv, buf, &names, &count)) != 0)
+ goto err;
+ __os_free(dbenv, buf);
+ buf = NULL;
+
+ len = strlen(QUEUE_EXTENT_HEAD) + strlen(qp->name) + 1;
+ if ((ret = __os_malloc(dbenv, len, &buf)) != 0)
+ goto err;
+ len = snprintf(buf, len, QUEUE_EXTENT_HEAD, qp->name);
+ nextents = 0;
+ extents = NULL;
+ for (i = 0; i < count; i++) {
+ if (strncmp(names[i], buf, len) == 0) {
+ /* Only save extents out of bounds. */
+ extid = atoi(&names[i][len]);
+ if (qp->page_ext != 0 &&
+ (last > first ?
+ (extid >= first && extid <= last) :
+ (extid >= first || extid <= last)))
+ continue;
+ if (extents == NULL &&
+ (ret = __os_malloc(dbenv,
+ (count - i) * sizeof(extid), &extents)) != 0)
+ goto err;
+ extents[nextents] = extid;
+ nextents++;
+ }
+ }
+ if (nextents > 0)
+ __db_err(dbenv,
+ "Warning: %d extra extent files found", nextents);
+ vdp->nextents = nextents;
+ vdp->extents = extents;
+
+err: if ((t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0 && ret == 0)
ret = t_ret;
+ if (names != NULL)
+ __os_dirfree(dbenv, names, count);
+ if (buf != NULL)
+ __os_free(dbenv, buf);
+ if (ret != 0 && extents != NULL)
+ __os_free(dbenv, extents);
return (ret == 0 && isbad == 1 ? DB_VERIFY_BAD : ret);
}
@@ -104,7 +201,6 @@ __qam_vrfy_data(dbp, vdp, h, pgno, flags)
struct __queue fakeq;
QAMDATA *qp;
db_recno_t i;
- u_int8_t qflags;
/*
* Not much to do here, except make sure that flags are reasonable.
@@ -114,23 +210,22 @@ __qam_vrfy_data(dbp, vdp, h, pgno, flags)
* some gross games to fake it out.
*/
fakedb.q_internal = &fakeq;
+ fakedb.flags = dbp->flags;
fakeq.re_len = vdp->re_len;
for (i = 0; i < vdp->rec_page; i++) {
qp = QAM_GET_RECORD(&fakedb, h, i);
if ((u_int8_t *)qp >= (u_int8_t *)h + dbp->pgsize) {
EPRINT((dbp->dbenv,
- "Queue record %lu extends past end of page %lu",
- i, pgno));
+ "Page %lu: queue record %lu extends past end of page",
+ (u_long)pgno, (u_long)i));
return (DB_VERIFY_BAD);
}
- qflags = qp->flags;
- qflags &= !(QAM_VALID | QAM_SET);
- if (qflags != 0) {
+ if (qp->flags & ~(QAM_VALID | QAM_SET)) {
EPRINT((dbp->dbenv,
- "Queue record %lu on page %lu has bad flags",
- i, pgno));
+ "Page %lu: queue record %lu has bad flags (%#lx)",
+ (u_long)pgno, (u_long)i, (u_long)qp->flags));
return (DB_VERIFY_BAD);
}
}
@@ -161,7 +256,8 @@ __qam_vrfy_structure(dbp, vdp, flags)
if (pip->type != P_QAMMETA) {
EPRINT((dbp->dbenv,
- "Queue database has no meta page"));
+ "Page %lu: queue database has no meta page",
+ (u_long)PGNO_BASE_MD));
isbad = 1;
goto err;
}
@@ -174,21 +270,251 @@ __qam_vrfy_structure(dbp, vdp, flags)
if (!LF_ISSET(DB_SALVAGE))
__db_vrfy_struct_feedback(dbp, vdp);
- if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0 ||
+ if ((ret = __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0 ||
(ret = __db_vrfy_getpageinfo(vdp, i, &pip)) != 0)
return (ret);
if (!F_ISSET(pip, VRFY_IS_ALLZEROES) &&
pip->type != P_QAMDATA) {
EPRINT((dbp->dbenv,
- "Queue database page %lu of incorrect type %lu",
- i, pip->type));
+ "Page %lu: queue database page of incorrect type %lu",
+ (u_long)i, (u_long)pip->type));
isbad = 1;
goto err;
} else if ((ret = __db_vrfy_pgset_inc(vdp->pgset, i)) != 0)
goto err;
}
-err: if ((ret = __db_vrfy_putpageinfo(vdp, pip)) != 0)
+err: if ((ret = __db_vrfy_putpageinfo(dbp->dbenv, vdp, pip)) != 0)
return (ret);
return (isbad == 1 ? DB_VERIFY_BAD : 0);
}
+
+/*
+ * __qam_vrfy_walkqueue --
+ * Do a "walkpages" per-page verification pass over the set of Queue
+ * extent pages.
+ *
+ * PUBLIC: int __qam_vrfy_walkqueue __P((DB *, VRFY_DBINFO *, void *,
+ * PUBLIC: int (*)(void *, const void *), u_int32_t));
+ */
+int
+__qam_vrfy_walkqueue(dbp, vdp, handle, callback, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ PAGE *h;
+ QUEUE *qp;
+ VRFY_PAGEINFO *pip;
+ db_pgno_t first, i, last, pg_ext, stop;
+ int isbad, nextents, ret, t_ret;
+
+ isbad = ret = t_ret = 0;
+
+ pip = NULL;
+ dbenv = dbp->dbenv;
+ qp = dbp->q_internal;
+
+ pg_ext = qp->page_ext;
+
+ /* If this database has no extents, we've seen all the pages already. */
+ if (pg_ext == 0)
+ return (0);
+
+ first = QAM_RECNO_PAGE(dbp, vdp->first_recno);
+ last = QAM_RECNO_PAGE(dbp, vdp->last_recno);
+
+ i = first;
+ if (first > last)
+ stop = QAM_RECNO_PAGE(dbp, UINT32_T_MAX);
+ else
+ stop = last;
+ nextents = vdp->nextents;
+
+ /* Verify/salvage each page. */
+begin:
+ for (; i <= stop; i++) {
+ /*
+ * If DB_SALVAGE is set, we inspect our database of completed
+ * pages, and skip any we've already printed in the subdb pass.
+ */
+ if (LF_ISSET(DB_SALVAGE) && (__db_salvage_isdone(vdp, i) != 0))
+ continue;
+ if ((t_ret = __qam_fget(dbp, &i, 0, &h)) != 0) {
+ if (t_ret == ENOENT || t_ret == DB_PAGE_NOTFOUND) {
+ i += pg_ext - ((i - 1) % pg_ext) - 1;
+ continue;
+ }
+
+ /*
+ * If an individual page get fails, keep going iff
+ * we're salvaging.
+ */
+ if (LF_ISSET(DB_SALVAGE)) {
+ if (ret == 0)
+ ret = t_ret;
+ continue;
+ } else
+ return (t_ret);
+ }
+
+ if (LF_ISSET(DB_SALVAGE)) {
+ /*
+ * We pretty much don't want to quit unless a
+ * bomb hits. May as well return that something
+ * was screwy, however.
+ */
+ if ((t_ret = __db_salvage(dbp,
+ vdp, i, h, handle, callback, flags)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ isbad = 1;
+ }
+ } else {
+ /*
+ * If we are not salvaging, and we get any error
+ * other than DB_VERIFY_BAD, return immediately;
+ * it may not be safe to proceed. If we get
+ * DB_VERIFY_BAD, keep going; listing more errors
+ * may make it easier to diagnose problems and
+ * determine the magnitude of the corruption.
+ */
+
+ if ((ret = __db_vrfy_common(dbp,
+ vdp, h, i, flags)) == DB_VERIFY_BAD)
+ isbad = 1;
+ else if (ret != 0)
+ goto err;
+
+ __db_vrfy_struct_feedback(dbp, vdp);
+
+ if ((ret = __db_vrfy_getpageinfo(vdp, i, &pip)) != 0)
+ return (ret);
+ if (F_ISSET(pip, VRFY_IS_ALLZEROES))
+ goto put;
+ if (pip->type != P_QAMDATA) {
+ EPRINT((dbenv,
+ "Page %lu: queue database page of incorrect type %lu",
+ (u_long)i, (u_long)pip->type));
+ isbad = 1;
+ goto err;
+ }
+ if ((ret =
+ __db_vrfy_pgset_inc(vdp->pgset, i)) != 0)
+ goto err;
+ if ((ret = __qam_vrfy_data(dbp, vdp,
+ (QPAGE *)h, i, flags)) == DB_VERIFY_BAD)
+ isbad = 1;
+ else if (ret != 0)
+ goto err;
+
+put: if ((ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
+ goto err;
+ pip = NULL;
+ }
+
+ /* Again, keep going iff we're salvaging. */
+ if ((t_ret = __qam_fput(dbp, i, h, 0)) != 0) {
+ if (LF_ISSET(DB_SALVAGE)) {
+ if (ret == 0)
+ ret = t_ret;
+ continue;
+ } else
+ return (t_ret);
+ }
+ }
+
+ if (first > last) {
+ i = 1;
+ stop = last;
+ first = last;
+ goto begin;
+ }
+
+ /*
+ * Now check to see if there were any lingering
+ * extents and dump their data.
+ */
+
+ if (LF_ISSET(DB_SALVAGE) && nextents != 0) {
+ nextents--;
+ i = 1 +
+ vdp->extents[nextents] * vdp->page_ext;
+ stop = i + vdp->page_ext;
+ goto begin;
+ }
+
+ if (0) {
+err: if ((t_ret = __qam_fput(dbp, i, h, 0)) != 0)
+ return (ret == 0 ? t_ret : ret);
+ if (pip != NULL &&
+ (t_ret = __db_vrfy_putpageinfo(dbenv, vdp, pip)) != 0)
+ return (ret == 0 ? t_ret : ret);
+ }
+ return ((isbad == 1 && ret == 0) ? DB_VERIFY_BAD : ret);
+}
+
+/*
+ * __qam_salvage --
+ * Safely dump out all recnos and data on a queue page.
+ *
+ * PUBLIC: int __qam_salvage __P((DB *, VRFY_DBINFO *, db_pgno_t, PAGE *,
+ * PUBLIC: void *, int (*)(void *, const void *), u_int32_t));
+ */
+int
+__qam_salvage(dbp, vdp, pgno, h, handle, callback, flags)
+ DB *dbp;
+ VRFY_DBINFO *vdp;
+ db_pgno_t pgno;
+ PAGE *h;
+ void *handle;
+ int (*callback) __P((void *, const void *));
+ u_int32_t flags;
+{
+ DBT dbt, key;
+ QAMDATA *qp, *qep;
+ db_recno_t recno;
+ int ret, err_ret, t_ret;
+ u_int32_t pagesize, qlen;
+ u_int32_t i;
+
+ memset(&dbt, 0, sizeof(DBT));
+ memset(&key, 0, sizeof(DBT));
+
+ err_ret = ret = 0;
+
+ pagesize = (u_int32_t)dbp->mpf->mfp->stat.st_pagesize;
+ qlen = ((QUEUE *)dbp->q_internal)->re_len;
+ dbt.size = qlen;
+ key.data = &recno;
+ key.size = sizeof(recno);
+ recno = (pgno - 1) * QAM_RECNO_PER_PAGE(dbp) + 1;
+ i = 0;
+ qep = (QAMDATA *)((u_int8_t *)h + pagesize - qlen);
+ for (qp = QAM_GET_RECORD(dbp, h, i); qp < qep;
+ recno++, i++, qp = QAM_GET_RECORD(dbp, h, i)) {
+ if (F_ISSET(qp, ~(QAM_VALID|QAM_SET)))
+ continue;
+ if (!F_ISSET(qp, QAM_SET))
+ continue;
+
+ if (!LF_ISSET(DB_AGGRESSIVE) && !F_ISSET(qp, QAM_VALID))
+ continue;
+
+ dbt.data = qp->data;
+ if ((ret = __db_prdbt(&key,
+ 0, " ", handle, callback, 1, vdp)) != 0)
+ err_ret = ret;
+
+ if ((ret = __db_prdbt(&dbt,
+ 0, " ", handle, callback, 0, vdp)) != 0)
+ err_ret = ret;
+ }
+
+ if ((t_ret = __db_salvage_markdone(vdp, pgno)) != 0)
+ return (t_ret);
+ return ((ret == 0 && err_ret != 0) ? err_ret : ret);
+}
diff --git a/db/rep/rep_method.c b/db/rep/rep_method.c
index f7a205fe6..dadaff072 100644
--- a/db/rep/rep_method.c
+++ b/db/rep/rep_method.c
@@ -1,13 +1,13 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: rep_method.c,v 1.78 2002/09/10 12:58:07 bostic Exp ";
+static const char revid[] = "$Id: rep_method.c,v 1.134 2003/11/13 15:41:51 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,14 +19,12 @@ static const char revid[] = "Id: rep_method.c,v 1.78 2002/09/10 12:58:07 bostic
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
#include "db_int.h"
#include "dbinc/db_page.h"
-#include "dbinc/db_am.h"
+#include "dbinc/btree.h"
#include "dbinc/log.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
#ifdef HAVE_RPC
@@ -38,13 +36,16 @@ static int __rep_abort_prepared __P((DB_ENV *));
static int __rep_bt_cmp __P((DB *, const DBT *, const DBT *));
static int __rep_client_dbinit __P((DB_ENV *, int));
static int __rep_elect __P((DB_ENV *, int, int, u_int32_t, int *));
-static int __rep_elect_init __P((DB_ENV *, DB_LSN *, int, int, int, int *));
+static int __rep_elect_init
+ __P((DB_ENV *, DB_LSN *, int, int, int *, u_int32_t *));
static int __rep_flush __P((DB_ENV *));
static int __rep_restore_prepared __P((DB_ENV *));
+static int __rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
static int __rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
static int __rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
static int __rep_set_rep_transport __P((DB_ENV *, int,
- int (*)(DB_ENV *, const DBT *, const DBT *, int, u_int32_t)));
+ int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t)));
static int __rep_start __P((DB_ENV *, DBT *, u_int32_t));
static int __rep_stat __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
static int __rep_wait __P((DB_ENV *, u_int32_t, int *, u_int32_t));
@@ -59,18 +60,14 @@ int
__rep_dbenv_create(dbenv)
DB_ENV *dbenv;
{
- DB_REP *db_rep;
- int ret;
-
#ifdef HAVE_RPC
if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- COMPQUIET(db_rep, NULL);
- COMPQUIET(ret, 0);
dbenv->rep_elect = __dbcl_rep_elect;
dbenv->rep_flush = __dbcl_rep_flush;
dbenv->rep_process_message = __dbcl_rep_process_message;
dbenv->rep_start = __dbcl_rep_start;
dbenv->rep_stat = __dbcl_rep_stat;
+ dbenv->get_rep_limit = __dbcl_rep_get_limit;
dbenv->set_rep_limit = __dbcl_rep_set_limit;
dbenv->set_rep_request = __dbcl_rep_set_request;
dbenv->set_rep_transport = __dbcl_rep_set_rep_transport;
@@ -83,32 +80,60 @@ __rep_dbenv_create(dbenv)
dbenv->rep_process_message = __rep_process_message;
dbenv->rep_start = __rep_start;
dbenv->rep_stat = __rep_stat;
+ dbenv->get_rep_limit = __rep_get_limit;
dbenv->set_rep_limit = __rep_set_limit;
dbenv->set_rep_request = __rep_set_request;
dbenv->set_rep_transport = __rep_set_rep_transport;
- /*
- * !!!
- * Our caller has not yet had the opportunity to reset the panic
- * state or turn off mutex locking, and so we can neither check
- * the panic state or acquire a mutex in the DB_ENV create path.
- */
-
- if ((ret = __os_calloc(dbenv, 1, sizeof(DB_REP), &db_rep)) != 0)
- return (ret);
- dbenv->rep_handle = db_rep;
-
- /* Initialize the per-process replication structure. */
- db_rep->rep_send = NULL;
}
return (0);
}
/*
+ * __rep_open --
+ * Replication-specific initialization of the DB_ENV structure.
+ *
+ * PUBLIC: int __rep_open __P((DB_ENV *));
+ */
+int
+__rep_open(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ int ret;
+
+ if ((ret = __os_calloc(dbenv, 1, sizeof(DB_REP), &db_rep)) != 0)
+ return (ret);
+ dbenv->rep_handle = db_rep;
+ ret = __rep_region_init(dbenv);
+ return (ret);
+}
+
+/*
* __rep_start --
* Become a master or client, and start sending messages to participate
* in the replication environment. Must be called after the environment
* is open.
+ *
+ * We must protect rep_start, which may change the world, with the rest
+ * of the DB library. Each API interface will count itself as it enters
+ * the library. Rep_start checks the following:
+ *
+ * rep->msg_th - this is the count of threads currently in rep_process_message
+ * rep->start_th - this is set if a thread is in rep_start.
+ * rep->handle_cnt - number of threads actively using a dbp in library.
+ * rep->txn_cnt - number of active txns.
+ * REP_F_READY - Replication flag that indicates that we wish to run
+ * recovery, and want to prohibit new transactions from entering and cause
+ * existing ones to return immediately (with a DB_LOCK_DEADLOCK error).
+ *
+ * There is also the rep->timestamp which is updated whenever significant
+ * events (i.e., new masters, log rollback, etc). Upon creation, a handle
+ * is associated with the current timestamp. Each time a handle enters the
+ * library it must check if the handle timestamp is the same as the one
+ * stored in the replication region. This prevents the use of handles on
+ * clients that reference non-existent files whose creation was backed out
+ * during a synchronizing recovery.
*/
static int
__rep_start(dbenv, dbt, flags)
@@ -120,11 +145,12 @@ __rep_start(dbenv, dbt, flags)
DB_LSN lsn;
DB_REP *db_rep;
REP *rep;
- int announce, init_db, redo_prepared, ret;
+ u_int32_t repflags;
+ int announce, init_db, redo_prepared, ret, sleep_cnt, t_ret, was_client;
PANIC_CHECK(dbenv);
- ENV_ILLEGAL_BEFORE_OPEN(dbenv, "rep_start");
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "rep_stat", DB_INIT_TXN);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->rep_start");
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_start", DB_INIT_REP);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
@@ -149,24 +175,59 @@ __rep_start(dbenv, dbt, flags)
return (ret);
/* We need a transport function. */
- if (db_rep->rep_send == NULL) {
+ if (dbenv->rep_send == NULL) {
__db_err(dbenv,
"DB_ENV->set_rep_transport must be called before DB_ENV->rep_start");
return (EINVAL);
}
-
- /* We'd better not have any logged files open if we are a client. */
- if (LF_ISSET(DB_REP_CLIENT) && (ret = __dbreg_nofiles(dbenv)) != 0) {
- __db_err(dbenv, "DB_ENV->rep_start called with open files");
+
+ /*
+ * If we are about to become (or stay) a master. Let's flush the log
+ * to close any potential holes that might happen when upgrading from
+ * client to master status.
+ */
+ if (LF_ISSET(DB_REP_MASTER) && (ret = __log_flush(dbenv, NULL)) != 0)
return (ret);
+
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ /*
+ * We only need one thread to start-up replication, so if
+ * there is another thread in rep_start, we'll let it finish
+ * its work and have this thread simply return.
+ */
+ if (rep->start_th != 0) {
+ /*
+ * There is already someone in rep_start. Return.
+ */
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Thread already in rep_start");
+#endif
+ goto err;
+ } else
+ rep->start_th = 1;
+
+ /*
+ * We are about to delete the replication database. We need to
+ * make sure that no one else is in the midst of processing a
+ * replication message.
+ */
+ for (sleep_cnt = 0; rep->msg_th != 0;) {
+ if (++sleep_cnt % 60 == 0)
+ __db_err(dbenv,
+ "DB_ENV->rep_start waiting %d minutes for replication message thread",
+ sleep_cnt / 60);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ (void)__os_sleep(dbenv, 1, 0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
}
- MUTEX_LOCK(dbenv, db_rep->mutexp);
if (rep->eid == DB_EID_INVALID)
rep->eid = dbenv->rep_eid;
if (LF_ISSET(DB_REP_MASTER)) {
- if (F_ISSET(dbenv, DB_ENV_REP_CLIENT)) {
+ was_client = F_ISSET(rep, REP_F_UPGRADE);
+ if (was_client) {
/*
* If we're upgrading from having been a client,
* preclose, so that we close our temporary database.
@@ -180,72 +241,92 @@ __rep_start(dbenv, dbt, flags)
* that opened them becomes a master again.
*/
if ((ret = __rep_preclose(dbenv, 0)) != 0)
- return (ret);
-
- /*
- * Now write a __txn_recycle record so that
- * clients don't get confused with our txnids
- * and txnids of previous masters.
- */
- F_CLR(dbenv, DB_ENV_REP_CLIENT);
- if ((ret = __txn_reset(dbenv)) != 0)
- return (ret);
+ goto errunlock;
}
redo_prepared = 0;
if (!F_ISSET(rep, REP_F_MASTER)) {
/* Master is not yet set. */
- if (F_ISSET(rep, REP_ISCLIENT)) {
- F_CLR(rep, REP_ISCLIENT);
- rep->gen = ++rep->w_gen;
+ if (was_client) {
+ if (rep->w_gen > rep->recover_gen)
+ rep->gen = ++rep->w_gen;
+ else if (rep->gen > rep->recover_gen)
+ rep->gen++;
+ else
+ rep->gen = rep->recover_gen + 1;
+ /*
+ * There could have been any number of failed
+ * elections, so jump the gen if we need to now.
+ */
+ if (rep->egen > rep->gen)
+ rep->gen = rep->egen;
redo_prepared = 1;
} else if (rep->gen == 0)
- rep->gen = 1;
+ rep->gen = rep->recover_gen + 1;
+ if (F_ISSET(rep, REP_F_MASTERELECT)) {
+ __rep_elect_done(dbenv, rep);
+ F_CLR(rep, REP_F_MASTERELECT);
+ }
+ if (rep->egen <= rep->gen)
+ rep->egen = rep->gen + 1;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "New master gen %lu, egen %lu",
+ (u_long)rep->gen, (u_long)rep->egen);
+#endif
}
-
- F_SET(rep, REP_F_MASTER);
- F_SET(dbenv, DB_ENV_REP_MASTER);
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ rep->master_id = rep->eid;
+ /*
+ * Note, setting flags below implicitly clears out
+ * REP_F_NOARCHIVE, REP_F_INIT and REP_F_READY.
+ */
+ rep->flags = REP_F_MASTER;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
dblp = (DB_LOG *)dbenv->lg_handle;
R_LOCK(dbenv, &dblp->reginfo);
lsn = ((LOG *)dblp->reginfo.primary)->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
/*
- * Send the NEWMASTER message, then restore prepared txns
- * if and only if we just upgraded from being a client.
+ * Send the NEWMASTER message first so that clients know
+ * subsequent messages are coming from the right master.
+ * We need to perform all actions below no master what
+ * regarding errors.
+ */
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0);
+ ret = 0;
+ if (was_client)
+ ret = __txn_reset(dbenv);
+ /*
+ * Take a transaction checkpoint so that our new generation
+ * number get written to the log.
*/
- if ((ret = __rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0)) == 0 &&
- redo_prepared)
- ret = __rep_restore_prepared(dbenv);
+ if ((t_ret = __txn_checkpoint(dbenv, 0, 0, DB_FORCE)) != 0 &&
+ ret == 0)
+ ret = t_ret;
+ if (redo_prepared &&
+ (t_ret = __rep_restore_prepared(dbenv)) != 0 && ret == 0)
+ ret = t_ret;
} else {
- F_CLR(dbenv, DB_ENV_REP_MASTER);
- F_SET(dbenv, DB_ENV_REP_CLIENT);
- if (LF_ISSET(DB_REP_LOGSONLY))
- F_SET(dbenv, DB_ENV_REP_LOGSONLY);
-
- announce = !F_ISSET(rep, REP_ISCLIENT) ||
- rep->master_id == DB_EID_INVALID;
init_db = 0;
- if (!F_ISSET(rep, REP_ISCLIENT)) {
- F_CLR(rep, REP_F_MASTER);
- if (LF_ISSET(DB_REP_LOGSONLY))
- F_SET(rep, REP_F_LOGSONLY);
- else
- F_SET(rep, REP_F_UPGRADE);
+ was_client = F_ISSET(rep, REP_ISCLIENT);
+ announce = !was_client || rep->master_id == DB_EID_INVALID;
- /*
- * We initialize the client's generation number to 0.
- * Upon startup, it looks for a master and updates the
- * generation number as necessary, exactly as it does
- * during normal operation and a master failure.
- */
- rep->gen = 0;
+ /* Zero out everything except recovery and tally flags. */
+ repflags = F_ISSET(rep, REP_F_NOARCHIVE |
+ REP_F_READY | REP_F_RECOVER | REP_F_TALLY);
+ if (LF_ISSET(DB_REP_LOGSONLY))
+ FLD_SET(repflags, REP_F_LOGSONLY);
+ else
+ FLD_SET(repflags, REP_F_UPGRADE);
+
+ rep->flags = repflags;
+ if (!was_client) {
rep->master_id = DB_EID_INVALID;
init_db = 1;
}
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
/*
* Abort any prepared transactions that were restored
@@ -256,10 +337,10 @@ __rep_start(dbenv, dbt, flags)
* records come in. Aborts will simply be ignored.
*/
if ((ret = __rep_abort_prepared(dbenv)) != 0)
- return (ret);
+ goto errlock;
if ((ret = __rep_client_dbinit(dbenv, init_db)) != 0)
- return (ret);
+ goto errlock;
/*
* If this client created a newly replicated environment,
@@ -270,9 +351,22 @@ __rep_start(dbenv, dbt, flags)
* simply join in.
*/
if (announce)
- ret = __rep_send_message(dbenv,
+ (void)__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_NEWCLIENT, NULL, dbt, 0);
}
+
+ /*
+ * We have separate labels for errors. If we're returning an
+ * error before we've set start_th, we use 'err'. If
+ * we are erroring while holding the rep_mutex, then we use
+ * 'errunlock' label. If we're erroring without holding the rep
+ * mutex we must use 'errlock'.
+ */
+errlock:
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+errunlock:
+ rep->start_th = 0;
+err: MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
return (ret);
}
@@ -308,34 +402,36 @@ __rep_client_dbinit(dbenv, startup)
MUTEX_LOCK(dbenv, db_rep->db_mutexp);
if (startup) {
- if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ if ((ret = db_create(&dbp, dbenv, DB_REP_CREATE)) != 0)
goto err;
/*
* Ignore errors, because if the file doesn't exist, this
* is perfectly OK.
*/
- (void)dbp->remove(dbp, REPDBNAME, NULL, 0);
+ (void)__db_remove(dbp, NULL, REPDBNAME, NULL, DB_FORCE);
}
- if ((ret = db_create(&dbp, dbenv, 0)) != 0)
+ if ((ret = db_create(&dbp, dbenv, DB_REP_CREATE)) != 0)
goto err;
- if ((ret = dbp->set_bt_compare(dbp, __rep_bt_cmp)) != 0)
+ if ((ret = __bam_set_bt_compare(dbp, __rep_bt_cmp)) != 0)
goto err;
/* Allow writes to this database on a client. */
F_SET(dbp, DB_AM_CL_WRITER);
- flags = (F_ISSET(dbenv, DB_ENV_THREAD) ? DB_THREAD : 0) |
- (startup ? DB_CREATE : 0);
- if ((ret = dbp->open(dbp, NULL,
- "__db.rep.db", NULL, DB_BTREE, flags, 0)) != 0)
+ flags = DB_NO_AUTO_COMMIT |
+ (startup ? DB_CREATE : 0) |
+ (F_ISSET(dbenv, DB_ENV_THREAD) ? DB_THREAD : 0);
+
+ if ((ret = __db_open(dbp, NULL,
+ REPDBNAME, NULL, DB_BTREE, flags, 0, PGNO_BASE_MD)) != 0)
goto err;
db_rep->rep_db = dbp;
if (0) {
err: if (dbp != NULL &&
- (t_ret = dbp->close(dbp, DB_NOSYNC)) != 0 && ret == 0)
+ (t_ret = __db_close(dbp, NULL, DB_NOSYNC)) != 0 && ret == 0)
ret = t_ret;
db_rep->rep_db = NULL;
}
@@ -416,12 +512,12 @@ __rep_abort_prepared(dbenv)
if (do_aborts) {
op = DB_FIRST;
do {
- if ((ret = dbenv->txn_recover(dbenv,
+ if ((ret = __txn_recover(dbenv,
prep, PREPLISTSIZE, &count, op)) != 0)
return (ret);
for (i = 0; i < count; i++) {
p = &prep[i];
- if ((ret = p->txn->abort(p->txn)) != 0)
+ if ((ret = __txn_abort(p->txn)) != 0)
return (ret);
}
op = DB_NEXT;
@@ -462,7 +558,7 @@ __rep_restore_prepared(dbenv)
ZERO_LSN(ckp_lsn);
ZERO_LSN(lsn);
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
/*
@@ -478,7 +574,7 @@ __rep_restore_prepared(dbenv)
*/
memset(&rec, 0, sizeof(DBT));
if ((ret = __txn_getckp(dbenv, &lsn)) == 0) {
- if ((ret = logc->get(logc, &lsn, &rec, DB_SET)) != 0) {
+ if ((ret = __log_c_get(logc, &lsn, &rec, DB_SET)) != 0) {
__db_err(dbenv,
"Checkpoint record at LSN [%lu][%lu] not found",
(u_long)lsn.file, (u_long)lsn.offset);
@@ -495,13 +591,13 @@ __rep_restore_prepared(dbenv)
ckp_lsn = ckp_args->ckp_lsn;
__os_free(dbenv, ckp_args);
- if ((ret = logc->get(logc, &ckp_lsn, &rec, DB_SET)) != 0) {
+ if ((ret = __log_c_get(logc, &ckp_lsn, &rec, DB_SET)) != 0) {
__db_err(dbenv,
"Checkpoint LSN record [%lu][%lu] not found",
(u_long)ckp_lsn.file, (u_long)ckp_lsn.offset);
goto err;
}
- } else if ((ret = logc->get(logc, &lsn, &rec, DB_FIRST)) != 0) {
+ } else if ((ret = __log_c_get(logc, &lsn, &rec, DB_FIRST)) != 0) {
if (ret == DB_NOTFOUND) {
/* An empty log means no PBNYC txns. */
ret = 0;
@@ -524,7 +620,7 @@ __rep_restore_prepared(dbenv)
(u_int8_t *)rec.data + sizeof(u_int32_t), sizeof(low_txn));
if (low_txn != 0)
break;
- } while ((ret = logc->get(logc, &lsn, &rec, DB_NEXT)) == 0);
+ } while ((ret = __log_c_get(logc, &lsn, &rec, DB_NEXT)) == 0);
/* If there are no txns, there are no PBNYC txns. */
if (ret == DB_NOTFOUND) {
@@ -534,7 +630,7 @@ __rep_restore_prepared(dbenv)
goto err;
/* Now, the high txnid. */
- if ((ret = logc->get(logc, &lsn, &rec, DB_LAST)) != 0) {
+ if ((ret = __log_c_get(logc, &lsn, &rec, DB_LAST)) != 0) {
/*
* Note that DB_NOTFOUND is unacceptable here because we
* had to have looked at some log record to get this far.
@@ -548,7 +644,7 @@ __rep_restore_prepared(dbenv)
(u_int8_t *)rec.data + sizeof(u_int32_t), sizeof(hi_txn));
if (hi_txn != 0)
break;
- } while ((ret = logc->get(logc, &lsn, &rec, DB_PREV)) == 0);
+ } while ((ret = __log_c_get(logc, &lsn, &rec, DB_PREV)) == 0);
if (ret == DB_NOTFOUND) {
ret = 0;
goto done;
@@ -570,9 +666,9 @@ __rep_restore_prepared(dbenv)
* Since all PBNYC txns still held locks on the old master and
* were isolated, this should be safe.
*/
- for (ret = logc->get(logc, &lsn, &rec, DB_LAST);
+ for (ret = __log_c_get(logc, &lsn, &rec, DB_LAST);
ret == 0 && log_compare(&lsn, &ckp_lsn) > 0;
- ret = logc->get(logc, &lsn, &rec, DB_PREV)) {
+ ret = __log_c_get(logc, &lsn, &rec, DB_PREV)) {
memcpy(&rectype, rec.data, sizeof(rectype));
switch (rectype) {
case DB___txn_regop:
@@ -587,7 +683,7 @@ __rep_restore_prepared(dbenv)
ret = __db_txnlist_find(dbenv,
txninfo, regop_args->txnid->txnid);
- if (ret == DB_NOTFOUND)
+ if (ret == TXN_NOTFOUND)
ret = __db_txnlist_add(dbenv, txninfo,
regop_args->txnid->txnid,
regop_args->opcode, &lsn);
@@ -595,19 +691,25 @@ __rep_restore_prepared(dbenv)
break;
case DB___txn_xa_regop:
/*
- * It's a prepare. If we haven't put the
- * txn on our list yet, it hasn't been
- * resolved, so apply and restore it.
+ * It's a prepare. If its not aborted and
+ * we haven't put the txn on our list yet, it
+ * hasn't been resolved, so apply and restore it.
*/
if ((ret = __txn_xa_regop_read(dbenv, rec.data,
&prep_args)) != 0)
goto err;
ret = __db_txnlist_find(dbenv, txninfo,
prep_args->txnid->txnid);
- if (ret == DB_NOTFOUND)
- if ((ret = __rep_process_txn(dbenv, &rec)) == 0)
+ if (ret == TXN_NOTFOUND) {
+ if (prep_args->opcode == TXN_ABORT)
+ ret = __db_txnlist_add(dbenv, txninfo,
+ prep_args->txnid->txnid,
+ prep_args->opcode, &lsn);
+ else if ((ret =
+ __rep_process_txn(dbenv, &rec)) == 0)
ret = __txn_restore_txn(dbenv,
&lsn, prep_args);
+ }
__os_free(dbenv, prep_args);
break;
default:
@@ -620,7 +722,7 @@ __rep_restore_prepared(dbenv)
ret = 0;
done:
-err: t_ret = logc->close(logc, 0);
+err: t_ret = __log_c_close(logc);
if (txninfo != NULL)
__db_txnlist_end(dbenv, txninfo);
@@ -628,6 +730,34 @@ err: t_ret = logc->close(logc, 0);
return (ret == 0 ? t_ret : ret);
}
+static int
+__rep_get_limit(dbenv, gbytesp, bytesp)
+ DB_ENV *dbenv;
+ u_int32_t *gbytesp, *bytesp;
+{
+ DB_REP *db_rep;
+ REP *rep;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_get_limit",
+ DB_INIT_REP);
+
+ if (!REP_ON(dbenv)) {
+ __db_err(dbenv,
+ "DB_ENV->get_rep_limit: database environment not properly initialized");
+ return (__db_panic(dbenv, EINVAL));
+ }
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ if (gbytesp != NULL)
+ *gbytesp = rep->gbytes;
+ if (bytesp != NULL)
+ *bytesp = rep->bytes;
+
+ return (0);
+}
+
/*
* __rep_set_limit --
* Set a limit on the amount of data that will be sent during a single
@@ -636,28 +766,31 @@ err: t_ret = logc->close(logc, 0);
static int
__rep_set_limit(dbenv, gbytes, bytes)
DB_ENV *dbenv;
- u_int32_t gbytes;
- u_int32_t bytes;
+ u_int32_t gbytes, bytes;
{
DB_REP *db_rep;
REP *rep;
PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->rep_set_limit");
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_set_limit",
+ DB_INIT_REP);
- if ((db_rep = dbenv->rep_handle) == NULL) {
+ if (!REP_ON(dbenv)) {
__db_err(dbenv,
"DB_ENV->set_rep_limit: database environment not properly initialized");
return (__db_panic(dbenv, EINVAL));
}
+ db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
if (bytes > GIGABYTE) {
gbytes += bytes / GIGABYTE;
bytes = bytes % GIGABYTE;
}
rep->gbytes = gbytes;
rep->bytes = bytes;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
return (0);
}
@@ -671,8 +804,7 @@ __rep_set_limit(dbenv, gbytes, bytes)
static int
__rep_set_request(dbenv, min, max)
DB_ENV *dbenv;
- u_int32_t min;
- u_int32_t max;
+ u_int32_t min, max;
{
LOG *lp;
DB_LOG *dblp;
@@ -680,24 +812,32 @@ __rep_set_request(dbenv, min, max)
REP *rep;
PANIC_CHECK(dbenv);
+ ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->rep_set_request");
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_set_request",
+ DB_INIT_REP);
- if ((db_rep = dbenv->rep_handle) == NULL) {
+ if (!REP_ON(dbenv)) {
__db_err(dbenv,
"DB_ENV->set_rep_request: database environment not properly initialized");
return (__db_panic(dbenv, EINVAL));
}
+ db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ /*
+ * Note we acquire the rep_mutexp or the db_mutexp as needed.
+ */
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
rep->request_gap = min;
rep->max_gap = max;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
dblp = dbenv->lg_handle;
if (dblp != NULL && (lp = dblp->reginfo.primary) != NULL) {
- R_LOCK(dbenv, &dblp->reginfo);
lp->wait_recs = 0;
lp->rcvd_recs = 0;
- R_UNLOCK(dbenv, &dblp->reginfo);
}
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
return (0);
}
@@ -710,32 +850,22 @@ static int
__rep_set_rep_transport(dbenv, eid, f_send)
DB_ENV *dbenv;
int eid;
- int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, int, u_int32_t));
+ int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t));
{
- DB_REP *db_rep;
-
PANIC_CHECK(dbenv);
- if ((db_rep = dbenv->rep_handle) == NULL) {
- __db_err(dbenv,
- "DB_ENV->set_rep_transport: database environment not properly initialized");
- return (__db_panic(dbenv, EINVAL));
- }
-
if (f_send == NULL) {
__db_err(dbenv,
"DB_ENV->set_rep_transport: no send function specified");
return (EINVAL);
}
-
if (eid < 0) {
__db_err(dbenv,
"DB_ENV->set_rep_transport: eid must be greater than or equal to 0");
return (EINVAL);
}
-
- db_rep->rep_send = f_send;
-
+ dbenv->rep_send = f_send;
dbenv->rep_eid = eid;
return (0);
}
@@ -756,11 +886,11 @@ __rep_elect(dbenv, nsites, priority, timeout, eidp)
DB_LSN lsn;
DB_REP *db_rep;
REP *rep;
- int in_progress, ret, send_vote, tiebreaker;
- u_int32_t pid, sec, usec;
+ int done, in_progress, ret, send_vote, tiebreaker;
+ u_int32_t egen, orig_tally, pid, sec, usec;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "rep_elect", DB_INIT_TXN);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_elect", DB_INIT_REP);
/* Error checking. */
if (nsites <= 0) {
@@ -782,45 +912,95 @@ __rep_elect(dbenv, nsites, priority, timeout, eidp)
lsn = ((LOG *)dblp->reginfo.primary)->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
- /* Generate a randomized tiebreaker value. */
- __os_id(&pid);
- if ((ret = __os_clock(dbenv, &sec, &usec)) != 0)
- return (ret);
- tiebreaker = pid ^ sec ^ usec ^ (u_int)rand() ^ P_TO_UINT32(&pid);
-
+ orig_tally = 0;
if ((ret = __rep_elect_init(dbenv,
- &lsn, nsites, priority, tiebreaker, &in_progress)) != 0) {
+ &lsn, nsites, priority, &in_progress, &orig_tally)) != 0) {
if (ret == DB_REP_NEWMASTER) {
ret = 0;
*eidp = dbenv->rep_eid;
}
- return (ret);
+ goto err;
}
-
- if (!in_progress) {
+ /*
+ * If another thread is in the middle of an election we
+ * just quietly return and not interfere.
+ */
+ if (in_progress) {
+ *eidp = dbenv->rep_eid;
+ return (0);
+ }
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0);
+ ret = __rep_wait(dbenv, timeout/4, eidp, REP_F_EPHASE1);
+ switch (ret) {
+ case 0:
+ /* Check if we found a master. */
+ if (*eidp != DB_EID_INVALID) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose,
+ DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Found master %d", *eidp);
+#endif
+ return (0);
+ }
+ /*
+ * If we didn't find a master, continue
+ * the election.
+ */
+ break;
+ case DB_TIMEOUT:
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
- __db_err(dbenv, "Beginning an election");
+ __db_err(dbenv,
+ "Did not find master. Sending vote1");
#endif
- if ((ret = __rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_ELECT, NULL, NULL, 0)) != 0)
+ break;
+ default:
goto err;
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTSEND, ret, NULL);
}
+ /* Generate a randomized tiebreaker value. */
+restart:
+ __os_id(&pid);
+ if ((ret = __os_clock(dbenv, &sec, &usec)) != 0)
+ return (ret);
+ tiebreaker = pid ^ sec ^ usec ^ (u_int)rand() ^ P_TO_UINT32(&pid);
- /* Now send vote */
- if ((ret =
- __rep_send_vote(dbenv, &lsn, nsites, priority, tiebreaker)) != 0)
- goto err;
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTVOTE1, ret, NULL);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ F_SET(rep, REP_F_EPHASE1 | REP_F_NOARCHIVE);
+ F_CLR(rep, REP_F_TALLY);
+
+ /* Tally our own vote */
+ if (__rep_tally(dbenv, rep, rep->eid, &rep->sites, rep->egen,
+ rep->tally_off) != 0)
+ goto lockdone;
+ __rep_cmp_vote(dbenv, rep, &rep->eid, &lsn, priority, rep->gen,
+ tiebreaker);
+
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Beginning an election");
+#endif
+ /* Now send vote */
+ send_vote = DB_EID_INVALID;
+ egen = rep->egen;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ __rep_send_vote(dbenv, &lsn, nsites, priority, tiebreaker, egen,
+ DB_EID_BROADCAST, REP_VOTE1);
ret = __rep_wait(dbenv, timeout, eidp, REP_F_EPHASE1);
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTWAIT1, ret, NULL);
switch (ret) {
case 0:
/* Check if election complete or phase complete. */
- if (*eidp != DB_EID_INVALID)
+ if (*eidp != DB_EID_INVALID) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose,
+ DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Ended election phase 1 %d", ret);
+#endif
return (0);
+ }
goto phase2;
case DB_TIMEOUT:
break;
@@ -833,17 +1013,42 @@ __rep_elect(dbenv, nsites, priority, timeout, eidp)
* votes to pick a winner and if so, to send out a vote to
* the winner.
*/
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- send_vote = DB_EID_INVALID;
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ /*
+ * If our egen changed while we were waiting. We need to
+ * essentially reinitialize our election.
+ */
+ if (egen != rep->egen) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Egen changed from %lu to %lu",
+ (u_long)egen, (u_long)rep->egen);
+#endif
+ goto restart;
+ }
if (rep->sites > rep->nsites / 2) {
+
/* We think we've seen enough to cast a vote. */
send_vote = rep->winner;
- if (rep->winner == rep->eid)
- rep->votes++;
- F_CLR(rep, REP_F_EPHASE1);
+ /*
+ * See if we won. This will make sure we
+ * don't count ourselves twice if we're racing
+ * with incoming votes.
+ */
+ if (rep->winner == rep->eid) {
+ (void)__rep_tally(dbenv, rep, rep->eid, &rep->votes,
+ egen, rep->v2tally_off);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Counted my vote %d", rep->votes);
+#endif
+ }
F_SET(rep, REP_F_EPHASE2);
+ F_CLR(rep, REP_F_EPHASE1);
}
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
if (send_vote == DB_EID_INVALID) {
/* We do not have enough votes to elect. */
#ifdef DIAGNOSTIC
@@ -855,39 +1060,74 @@ __rep_elect(dbenv, nsites, priority, timeout, eidp)
ret = DB_REP_UNAVAIL;
goto err;
- }
+ } else {
+ /*
+ * We have seen enough vote1's. Now we need to wait
+ * for all the vote2's.
+ */
+ if (send_vote != rep->eid) {
#ifdef DIAGNOSTIC
- if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION) &&
- send_vote != rep->eid)
- __db_err(dbenv, "Sending vote");
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION) &&
+ send_vote != rep->eid)
+ __db_err(dbenv, "Sending vote");
#endif
+ __rep_send_vote(dbenv, NULL, 0, 0, 0, egen,
+ send_vote, REP_VOTE2);
- if (send_vote != rep->eid && (ret = __rep_send_message(dbenv,
- send_vote, REP_VOTE2, NULL, NULL, 0)) != 0)
- goto err;
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTVOTE2, ret, NULL);
-
-phase2: ret = __rep_wait(dbenv, timeout, eidp, REP_F_EPHASE2);
- DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTWAIT2, ret, NULL);
- switch (ret) {
- case 0:
- return (0);
- case DB_TIMEOUT:
- ret = DB_REP_UNAVAIL;
- break;
- default:
- goto err;
+ }
+phase2:
+ ret = __rep_wait(dbenv, timeout, eidp, REP_F_EPHASE2);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose,
+ DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Ended election phase 2 %d", ret);
+#endif
+ switch (ret) {
+ case 0:
+ return (0);
+ case DB_TIMEOUT:
+ ret = DB_REP_UNAVAIL;
+ break;
+ default:
+ goto err;
+ }
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ done = rep->votes > rep->nsites / 2;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "After phase 2: done %d, votes %d, nsites %d",
+ done, rep->votes, rep->nsites);
+#endif
+ if (send_vote == rep->eid && done) {
+ __rep_elect_master(dbenv, rep, eidp);
+ ret = 0;
+ goto lockdone;
+ }
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
-DB_TEST_RECOVERY_LABEL
-err: MUTEX_LOCK(dbenv, db_rep->mutexp);
- ELECTION_DONE(rep);
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+err: MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+lockdone:
+ /*
+ * If we get here because of a non-election error, then we
+ * did not tally our vote. The only non-election error is
+ * from elect_init where we were unable to grow_sites. In
+ * that case we do not want to discard all known election info.
+ */
+ if (ret == 0 || ret == DB_REP_UNAVAIL)
+ __rep_elect_done(dbenv, rep);
+ else if (orig_tally)
+ F_SET(rep, orig_tally);
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
- __db_err(dbenv, "Ended election with %d", ret);
+ __db_err(dbenv,
+ "Ended election with %d, sites %d, egen %lu, flags 0x%lx",
+ ret, rep->sites, (u_long)rep->egen, (u_long)rep->flags);
#endif
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
return (ret);
}
@@ -897,14 +1137,16 @@ err: MUTEX_LOCK(dbenv, db_rep->mutexp);
* already in progress; makes it 0 otherwise.
*/
static int
-__rep_elect_init(dbenv, lsnp, nsites, priority, tiebreaker, beginp)
+__rep_elect_init(dbenv, lsnp, nsites, priority, beginp, otally)
DB_ENV *dbenv;
DB_LSN *lsnp;
- int nsites, priority, tiebreaker, *beginp;
+ int nsites, priority;
+ int *beginp;
+ u_int32_t *otally;
{
DB_REP *db_rep;
REP *rep;
- int ret, *tally;
+ int ret;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
@@ -915,14 +1157,16 @@ __rep_elect_init(dbenv, lsnp, nsites, priority, tiebreaker, beginp)
rep->stat.st_elections++;
/* If we are already a master; simply broadcast that fact and return. */
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (F_ISSET(rep, REP_F_MASTER)) {
(void)__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_NEWMASTER, lsnp, NULL, 0);
rep->stat.st_elections_won++;
return (DB_REP_NEWMASTER);
}
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (otally != NULL)
+ *otally = F_ISSET(rep, REP_F_TALLY);
*beginp = IN_ELECTION(rep);
if (!*beginp) {
/*
@@ -937,35 +1181,41 @@ __rep_elect_init(dbenv, lsnp, nsites, priority, tiebreaker, beginp)
DB_ENV_TEST_RECOVERY(dbenv, DB_TEST_ELECTINIT, ret, NULL);
rep->nsites = nsites;
rep->priority = priority;
- rep->votes = 0;
rep->master_id = DB_EID_INVALID;
- F_SET(rep, REP_F_EPHASE1);
-
- /* We have always heard from ourselves. */
- rep->sites = 1;
- tally = R_ADDR((REGINFO *)dbenv->reginfo, rep->tally_off);
- tally[0] = rep->eid;
-
- if (priority != 0) {
- /* Make ourselves the winner to start. */
- rep->winner = rep->eid;
- rep->w_priority = priority;
- rep->w_gen = rep->gen;
- rep->w_lsn = *lsnp;
- rep->w_tiebreaker = tiebreaker;
- } else {
- rep->winner = DB_EID_INVALID;
- rep->w_priority = 0;
- rep->w_gen = 0;
- ZERO_LSN(rep->w_lsn);
- rep->w_tiebreaker = 0;
- }
}
DB_TEST_RECOVERY_LABEL
-err: MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+err: MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
return (ret);
}
+/*
+ * __rep_elect_master
+ * Set up for new master from election. Must be called with
+ * the db_rep->rep_mutex held.
+ *
+ * PUBLIC: void __rep_elect_master __P((DB_ENV *, REP *, int *));
+ */
+void
+__rep_elect_master(dbenv, rep, eidp)
+ DB_ENV *dbenv;
+ REP *rep;
+ int *eidp;
+{
+ rep->master_id = rep->eid;
+ F_SET(rep, REP_F_MASTERELECT);
+ if (eidp != NULL)
+ *eidp = rep->master_id;
+ rep->stat.st_elections_won++;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Got enough votes to win; election done; winner is %d, gen %lu",
+ rep->master_id, (u_long)rep->gen);
+#else
+ COMPQUIET(dbenv, NULL);
+#endif
+}
+
static int
__rep_wait(dbenv, timeout, eidp, flags)
DB_ENV *dbenv;
@@ -975,7 +1225,7 @@ __rep_wait(dbenv, timeout, eidp, flags)
{
DB_REP *db_rep;
REP *rep;
- int done, ret;
+ int done;
u_int32_t sleeptime;
done = 0;
@@ -991,13 +1241,12 @@ __rep_wait(dbenv, timeout, eidp, flags)
if (sleeptime == 0)
sleeptime++;
while (timeout > 0) {
- if ((ret = __os_sleep(dbenv, 0, sleeptime)) != 0)
- return (ret);
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ (void)__os_sleep(dbenv, 0, sleeptime);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
done = !F_ISSET(rep, flags) && rep->master_id != DB_EID_INVALID;
*eidp = rep->master_id;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
if (done)
return (0);
@@ -1025,21 +1274,21 @@ __rep_flush(dbenv)
int ret, t_ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "rep_stat", DB_INIT_TXN);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_flush", DB_INIT_REP);
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
memset(&rec, 0, sizeof(rec));
memset(&lsn, 0, sizeof(lsn));
- if ((ret = logc->get(logc, &lsn, &rec, DB_LAST)) != 0)
+ if ((ret = __log_c_get(logc, &lsn, &rec, DB_LAST)) != 0)
goto err;
- ret = __rep_send_message(dbenv,
+ (void)__rep_send_message(dbenv,
DB_EID_BROADCAST, REP_LOG, &lsn, &rec, 0);
-err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
@@ -1059,11 +1308,11 @@ __rep_stat(dbenv, statp, flags)
DB_REP_STAT *stats;
LOG *lp;
REP *rep;
- u_int32_t queued;
- int ret;
+ u_int32_t queued, repflags;
+ int dolock, ret;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "rep_stat", DB_INIT_TXN);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_stat", DB_INIT_REP);
db_rep = dbenv->rep_handle;
rep = db_rep->region;
@@ -1079,11 +1328,23 @@ __rep_stat(dbenv, statp, flags)
if ((ret = __os_umalloc(dbenv, sizeof(DB_REP_STAT), &stats)) != 0)
return (ret);
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ /*
+ * Read without holding the lock. If we are in client
+ * recovery, we copy just the stats struct so we won't
+ * block. We only copy out those stats that don't
+ * require acquiring any mutex.
+ */
+ repflags = rep->flags;
+ if (FLD_ISSET(repflags, REP_F_RECOVER))
+ dolock = 0;
+ else {
+ dolock = 1;
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ }
memcpy(stats, &rep->stat, sizeof(*stats));
/* Copy out election stats. */
- if (IN_ELECTION(rep)) {
+ if (IN_ELECTION_TALLY(rep)) {
if (F_ISSET(rep, REP_F_EPHASE1))
stats->st_election_status = 1;
else if (F_ISSET(rep, REP_F_EPHASE2))
@@ -1120,13 +1381,18 @@ __rep_stat(dbenv, statp, flags)
rep->stat.st_log_queued = rep->stat.st_log_queued_total =
rep->stat.st_log_queued_max = queued;
}
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+
+ if (dolock) {
+ stats->st_in_recovery = 0;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ } else
+ stats->st_in_recovery = 1;
/*
* Log-related replication info is stored in the log system and
* protected by the log region lock.
*/
- R_LOCK(dbenv, &dblp->reginfo);
if (F_ISSET(rep, REP_ISCLIENT)) {
stats->st_next_lsn = lp->ready_lsn;
stats->st_waiting_lsn = lp->waiting_lsn;
@@ -1137,7 +1403,8 @@ __rep_stat(dbenv, statp, flags)
ZERO_LSN(stats->st_next_lsn);
ZERO_LSN(stats->st_waiting_lsn);
}
- R_UNLOCK(dbenv, &dblp->reginfo);
+ if (dolock)
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
*statp = stats;
return (0);
diff --git a/db/rep/rep_record.c b/db/rep/rep_record.c
index 5fe684355..cb6d83bc4 100644
--- a/db/rep/rep_record.c
+++ b/db/rep/rep_record.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: rep_record.c,v 1.111 2002/09/11 19:39:11 bostic Exp ";
+static const char revid[] = "$Id: rep_record.c,v 1.193 2003/11/14 05:32:31 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,19 +18,109 @@ static const char revid[] = "Id: rep_record.c,v 1.111 2002/09/11 19:39:11 bostic
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/db_am.h"
+#include "dbinc/lock.h"
#include "dbinc/log.h"
-#include "dbinc/rep.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
-static int __rep_apply __P((DB_ENV *, REP_CONTROL *, DBT *));
+static int __rep_apply __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *));
static int __rep_collect_txn __P((DB_ENV *, DB_LSN *, LSN_COLLECTION *));
+static int __rep_dorecovery __P((DB_ENV *, DB_LSN *, DB_LSN *));
static int __rep_lsn_cmp __P((const void *, const void *));
-static int __rep_newfile __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *));
+static int __rep_newfile __P((DB_ENV *, REP_CONTROL *, DB_LSN *));
+static int __rep_verify_match __P((DB_ENV *, REP_CONTROL *, time_t));
-#define IS_SIMPLE(R) ((R) != DB___txn_regop && \
+#define IS_SIMPLE(R) ((R) != DB___txn_regop && (R) != DB___txn_xa_regop && \
(R) != DB___txn_ckp && (R) != DB___dbreg_register)
+/* Used to consistently designate which messages ought to be received where. */
+
+#ifdef DIAGNOSTIC
+#define MASTER_ONLY(rep, rp) do { \
+ if (!F_ISSET(rep, REP_F_MASTER)) { \
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) { \
+ __db_err(dbenv, "Master record received on client"); \
+ __rep_print_message(dbenv, \
+ *eidp, rp, "rep_process_message"); \
+ } \
+ ret = EINVAL; \
+ goto errlock; \
+ } \
+} while (0)
+
+#define CLIENT_ONLY(rep, rp) do { \
+ if (!F_ISSET(rep, REP_ISCLIENT)) { \
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) { \
+ __db_err(dbenv, "Client record received on master"); \
+ __rep_print_message(dbenv, \
+ *eidp, rp, "rep_process_message"); \
+ } \
+ (void)__rep_send_message(dbenv, \
+ DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0); \
+ ret = DB_REP_DUPMASTER; \
+ goto errlock; \
+ } \
+} while (0)
+
+#define MASTER_CHECK(dbenv, eid, rep) \
+do { \
+ if (rep->master_id == DB_EID_INVALID) { \
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) \
+ __db_err(dbenv, \
+ "Received record from %d, master is INVALID",\
+ eid); \
+ ret = 0; \
+ (void)__rep_send_message(dbenv, \
+ DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0); \
+ goto errlock; \
+ } \
+ if (eid != rep->master_id) { \
+ __db_err(dbenv, \
+ "Received master record from %d, master is %d", \
+ eid, rep->master_id); \
+ ret = EINVAL; \
+ goto errlock; \
+ } \
+} while (0)
+#else
+#define MASTER_ONLY(rep, rp) do { \
+ if (!F_ISSET(rep, REP_F_MASTER)) { \
+ ret = EINVAL; \
+ goto errlock; \
+ } \
+} while (0)
+
+#define CLIENT_ONLY(rep, rp) do { \
+ if (!F_ISSET(rep, REP_ISCLIENT)) { \
+ (void)__rep_send_message(dbenv, \
+ DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0); \
+ ret = DB_REP_DUPMASTER; \
+ goto errlock; \
+ } \
+} while (0)
+
+#define MASTER_CHECK(dbenv, eid, rep) \
+do { \
+ if (rep->master_id == DB_EID_INVALID) { \
+ ret = 0; \
+ (void)__rep_send_message(dbenv, \
+ DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0); \
+ goto errlock; \
+ } \
+ if (eid != rep->master_id) { \
+ __db_err(dbenv, \
+ "Received master record from %d, master is %d", \
+ eid, rep->master_id); \
+ ret = EINVAL; \
+ goto errlock; \
+ } \
+} while (0)
+#endif
+
+#define ANYSITE(rep)
+
/*
* __rep_process_message --
*
@@ -41,30 +131,37 @@ static int __rep_newfile __P((DB_ENV *, REP_CONTROL *, DBT *, DB_LSN *));
* eidp: contains the machine id of the sender of the message;
* in the case of a DB_NEWMASTER message, returns the eid
* of the new master.
+ * ret_lsnp: On DB_REP_ISPERM and DB_REP_NOTPERM returns, contains the
+ * lsn of the maximum permanent or current not permanent log record
+ * (respectively).
*
- * PUBLIC: int __rep_process_message __P((DB_ENV *, DBT *, DBT *, int *));
+ * PUBLIC: int __rep_process_message __P((DB_ENV *, DBT *, DBT *, int *,
+ * PUBLIC: DB_LSN *));
*/
int
-__rep_process_message(dbenv, control, rec, eidp)
+__rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
DB_ENV *dbenv;
DBT *control, *rec;
int *eidp;
+ DB_LSN *ret_lsnp;
{
DB_LOG *dblp;
DB_LOGC *logc;
- DB_LSN init_lsn, lsn, newfilelsn, oldfilelsn;
+ DB_LSN endlsn, lsn, oldfilelsn;
DB_REP *db_rep;
- DBT *d, data_dbt, lsndbt, mylog;
+ DBT *d, data_dbt, mylog;
LOG *lp;
REP *rep;
REP_CONTROL *rp;
REP_VOTE_INFO *vi;
- u_int32_t bytes, gen, gbytes, type, unused;
- int check_limit, cmp, done, do_req, i;
- int master, old, recovering, ret, t_ret, *tally;
+ u_int32_t bytes, egen, flags, gen, gbytes, type;
+ int check_limit, cmp, done, do_req;
+ int master, old, recovering, ret, t_ret;
+ time_t savetime;
PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "rep_stat", DB_INIT_TXN);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->rep_handle, "rep_process_message",
+ DB_INIT_REP);
/* Control argument must be non-Null. */
if (control == NULL || control->size == 0) {
@@ -73,37 +170,73 @@ __rep_process_message(dbenv, control, rec, eidp)
return (EINVAL);
}
+ if (!IS_REP_MASTER(dbenv) && !IS_REP_CLIENT(dbenv)) {
+ __db_err(dbenv,
+ "Environment not configured as replication master or client");
+ return (EINVAL);
+ }
+
ret = 0;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
+ rp = (REP_CONTROL *)control->data;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ /*
+ * Acquire the replication lock.
+ */
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (rep->start_th != 0) {
+ /*
+ * If we're racing with a thread in rep_start, then
+ * just ignore the message and return.
+ */
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (F_ISSET(rp, DB_LOG_PERM)) {
+ if (ret_lsnp != NULL)
+ *ret_lsnp = rp->lsn;
+ return (DB_REP_NOTPERM);
+ } else
+ return (0);
+ }
+ if (rep->in_recovery != 0) {
+ /*
+ * If we're racing with a thread in __db_apprec,
+ * just ignore the message and return.
+ */
+ rep->stat.st_msgs_recover++;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ return (0);
+ }
+ rep->msg_th++;
gen = rep->gen;
- recovering = F_ISSET(rep, REP_F_RECOVER);
+ recovering = rep->in_recovery ||
+ F_ISSET(rep, REP_F_READY | REP_F_RECOVER);
+ savetime = rep->timestamp;
rep->stat.st_msgs_processed++;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
-
- rp = (REP_CONTROL *)control->data;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
-#if 0
- __rep_print_message(dbenv, *eidp, rp, "rep_process_message");
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __rep_print_message(dbenv, *eidp, rp, "rep_process_message");
#endif
/* Complain if we see an improper version number. */
if (rp->rep_version != DB_REPVERSION) {
__db_err(dbenv,
- "unexpected replication message version %d, expected %d",
- rp->rep_version, DB_REPVERSION);
- return (EINVAL);
+ "unexpected replication message version %lu, expected %d",
+ (u_long)rp->rep_version, DB_REPVERSION);
+ ret = EINVAL;
+ goto errlock;
}
if (rp->log_version != DB_LOGVERSION) {
__db_err(dbenv,
- "unexpected log record version %d, expected %d",
- rp->log_version, DB_LOGVERSION);
- return (EINVAL);
+ "unexpected log record version %lu, expected %d",
+ (u_long)rp->log_version, DB_LOGVERSION);
+ ret = EINVAL;
+ goto errlock;
}
/*
@@ -112,39 +245,89 @@ __rep_process_message(dbenv, control, rec, eidp)
* to get in sync.
*/
if (rp->gen < gen && rp->rectype != REP_ALIVE_REQ &&
- rp->rectype != REP_NEWCLIENT && rp->rectype != REP_MASTER_REQ) {
+ rp->rectype != REP_NEWCLIENT && rp->rectype != REP_MASTER_REQ &&
+ rp->rectype != REP_DUPMASTER) {
/*
* We don't hold the rep mutex, and could miscount if we race.
*/
rep->stat.st_msgs_badgen++;
- return (0);
+ goto errlock;
+ }
+
+ if (rp->gen > gen) {
+ /*
+ * If I am a master and am out of date with a lower generation
+ * number, I am in bad shape and should downgrade.
+ */
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ rep->stat.st_dupmasters++;
+ ret = DB_REP_DUPMASTER;
+ if (rp->rectype != REP_DUPMASTER)
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_DUPMASTER,
+ NULL, NULL, 0);
+ goto errlock;
+ }
+
+ /*
+ * I am a client and am out of date. If this is an election,
+ * or a response from the first site I contacted, then I can
+ * accept the generation number and participate in future
+ * elections and communication. Otherwise, I need to hear about
+ * a new master and sync up.
+ */
+ if (rp->rectype == REP_ALIVE ||
+ rp->rectype == REP_VOTE1 || rp->rectype == REP_VOTE2) {
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Updating gen from %lu to %lu",
+ (u_long)gen, (u_long)rp->gen);
+#endif
+ gen = rep->gen = rp->gen;
+ if (rep->egen <= gen)
+ rep->egen = rep->gen + 1;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Updating egen to %lu",
+ (u_long)rep->egen);
+#endif
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ } else if (rp->rectype != REP_NEWMASTER) {
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0);
+ goto errlock;
+ }
+
+ /*
+ * If you get here, then you're a client and either you're
+ * in an election or you have a NEWMASTER or an ALIVE message
+ * whose processing will do the right thing below.
+ */
+
}
- if (rp->gen > gen && rp->rectype != REP_ALIVE &&
- rp->rectype != REP_NEWMASTER)
- return (__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_MASTER_REQ, NULL, NULL, 0));
/*
* We need to check if we're in recovery and if we are
- * then we need to ignore any messages except VERIFY, VOTE,
- * ELECT (the master might fail while we are recovering), and
- * ALIVE_REQ.
+ * then we need to ignore any messages except VERIFY*, VOTE*,
+ * NEW* and ALIVE_REQ.
*/
- if (recovering)
- switch(rp->rectype) {
+ if (recovering) {
+ switch (rp->rectype) {
+ case REP_VERIFY:
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ cmp = log_compare(&lp->verify_lsn, &rp->lsn);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (cmp != 0)
+ goto skip;
+ break;
case REP_ALIVE:
case REP_ALIVE_REQ:
- case REP_ELECT:
+ case REP_DUPMASTER:
case REP_NEWCLIENT:
case REP_NEWMASTER:
case REP_NEWSITE:
- case REP_VERIFY:
- R_LOCK(dbenv, &dblp->reginfo);
- cmp = log_compare(&lp->verify_lsn, &rp->lsn);
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (cmp != 0)
- goto skip;
- /* FALLTHROUGH */
+ case REP_VERIFY_FAIL:
case REP_VOTE1:
case REP_VOTE2:
break;
@@ -156,206 +339,287 @@ skip: /*
rep->stat.st_msgs_recover++;
/* Check for need to retransmit. */
- R_LOCK(dbenv, &dblp->reginfo);
- do_req = *eidp == rep->master_id &&
- ++lp->rcvd_recs >= lp->wait_recs;
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ do_req = ++lp->rcvd_recs >= lp->wait_recs;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
if (do_req) {
lp->wait_recs *= 2;
- if (lp->wait_recs + rep->max_gap)
+ if (lp->wait_recs > rep->max_gap)
lp->wait_recs = rep->max_gap;
lp->rcvd_recs = 0;
lsn = lp->verify_lsn;
}
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (do_req)
- ret = __rep_send_message(dbenv, *eidp,
- REP_VERIFY_REQ, &lsn, NULL, 0);
-
- return (ret);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (do_req) {
+ /*
+ * Don't respond to a MASTER_REQ with
+ * a MASTER_REQ.
+ */
+ if (rep->master_id == DB_EID_INVALID &&
+ rp->rectype != REP_MASTER_REQ)
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST,
+ REP_MASTER_REQ,
+ NULL, NULL, 0);
+ else if (*eidp == rep->master_id)
+ (void)__rep_send_message(
+ dbenv, *eidp,
+ REP_VERIFY_REQ,
+ &lsn, NULL, 0);
+ }
+ goto errlock;
}
+ }
- switch(rp->rectype) {
+ switch (rp->rectype) {
case REP_ALIVE:
- ANYSITE(dbenv);
- if (rp->gen > gen && rp->flags)
- return (__rep_new_master(dbenv, rp, *eidp));
+ ANYSITE(rep);
+ egen = *(u_int32_t *)rec->data;
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Received ALIVE egen of %lu, mine %lu",
+ (u_long)egen, (u_long)rep->egen);
+#endif
+ if (egen > rep->egen)
+ rep->egen = egen;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
break;
case REP_ALIVE_REQ:
- ANYSITE(dbenv);
+ ANYSITE(rep);
dblp = dbenv->lg_handle;
R_LOCK(dbenv, &dblp->reginfo);
lsn = ((LOG *)dblp->reginfo.primary)->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
- return (__rep_send_message(dbenv,
- *eidp, REP_ALIVE, &lsn, NULL,
- F_ISSET(dbenv, DB_ENV_REP_MASTER) ? 1 : 0));
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ egen = rep->egen;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ data_dbt.data = &egen;
+ data_dbt.size = sizeof(egen);
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_ALIVE, &lsn, &data_dbt, 0);
+ goto errlock;
+ case REP_DUPMASTER:
+ if (F_ISSET(rep, REP_F_MASTER))
+ ret = DB_REP_DUPMASTER;
+ goto errlock;
case REP_ALL_REQ:
- MASTER_ONLY(dbenv);
+ MASTER_ONLY(rep, rp);
gbytes = bytes = 0;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
gbytes = rep->gbytes;
bytes = rep->bytes;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
check_limit = gbytes != 0 || bytes != 0;
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
- return (ret);
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto errlock;
memset(&data_dbt, 0, sizeof(data_dbt));
oldfilelsn = lsn = rp->lsn;
type = REP_LOG;
- for (ret = logc->get(logc, &rp->lsn, &data_dbt, DB_SET);
+ flags = IS_ZERO_LSN(rp->lsn) ||
+ IS_INIT_LSN(rp->lsn) ? DB_FIRST : DB_SET;
+ for (ret = __log_c_get(logc, &lsn, &data_dbt, flags);
ret == 0 && type == REP_LOG;
- ret = logc->get(logc, &lsn, &data_dbt, DB_NEXT)) {
+ ret = __log_c_get(logc, &lsn, &data_dbt, DB_NEXT)) {
/*
- * lsn.offset will only be 0 if this is the
- * beginning of the log; DB_SET, but not DB_NEXT,
- * can set the log cursor to [n][0].
+ * When a log file changes, we'll have a real log
+ * record with some lsn [n][m], and we'll also want
+ * to send a NEWFILE message with lsn [n-1][MAX].
*/
- if (lsn.offset == 0)
- ret = __rep_send_message(dbenv, *eidp,
- REP_NEWFILE, &lsn, NULL, 0);
- else {
+ if (lsn.file != oldfilelsn.file)
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_NEWFILE, &oldfilelsn, NULL, 0);
+ if (check_limit) {
/*
- * DB_NEXT will never run into offsets
- * of 0; thus, when a log file changes,
- * we'll have a real log record with
- * some lsn [n][m], and we'll also want to send
- * a NEWFILE message with lsn [n][0].
- * So that the client can detect gaps,
- * send in the rec parameter the
- * last LSN in the old file.
+ * data_dbt.size is only the size of the log
+ * record; it doesn't count the size of the
+ * control structure. Factor that in as well
+ * so we're not off by a lot if our log records
+ * are small.
*/
- if (lsn.file != oldfilelsn.file) {
- newfilelsn.file = lsn.file;
- newfilelsn.offset = 0;
-
- memset(&lsndbt, 0, sizeof(DBT));
- lsndbt.size = sizeof(DB_LSN);
- lsndbt.data = &oldfilelsn;
-
- if ((ret = __rep_send_message(dbenv,
- *eidp, REP_NEWFILE, &newfilelsn,
- &lsndbt, 0)) != 0)
- break;
- }
- if (check_limit) {
+ while (bytes <
+ data_dbt.size + sizeof(REP_CONTROL)) {
+ if (gbytes > 0) {
+ bytes += GIGABYTE;
+ --gbytes;
+ continue;
+ }
/*
- * data_dbt.size is only the size of
- * the log record; it doesn't count
- * the size of the control structure.
- * Factor that in as well so we're
- * not off by a lot if our log
- * records are small.
+ * We don't hold the rep mutex,
+ * and may miscount.
*/
- while (bytes < data_dbt.size +
- sizeof(REP_CONTROL)) {
- if (gbytes > 0) {
- bytes += GIGABYTE;
- --gbytes;
- continue;
- }
- /*
- * We don't hold the rep mutex,
- * and may miscount.
- */
- rep->stat.st_nthrottles++;
- type = REP_LOG_MORE;
- goto send;
- }
- bytes -= (data_dbt.size +
- sizeof(REP_CONTROL));
+ rep->stat.st_nthrottles++;
+ type = REP_LOG_MORE;
+ goto send;
}
-send: ret = __rep_send_message(dbenv, *eidp,
- type, &lsn, &data_dbt, 0);
+ bytes -= (data_dbt.size + sizeof(REP_CONTROL));
}
+send: if (__rep_send_message(dbenv,
+ *eidp, type, &lsn, &data_dbt, 0) != 0)
+ break;
+
/*
- * In case we're about to change files and need it
- * for a NEWFILE message, save the current LSN.
+ * If we are about to change files, then we'll need the
+ * last LSN in the previous file. Save it here.
*/
oldfilelsn = lsn;
+ oldfilelsn.offset += logc->c_len;
}
if (ret == DB_NOTFOUND)
ret = 0;
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
- return (ret);
- case REP_ELECT:
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- rep->gen++;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- return (__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0));
- }
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- ret = IN_ELECTION(rep) ? 0 : DB_REP_HOLDELECTION;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- return (ret);
+ goto errlock;
#ifdef NOTYET
case REP_FILE: /* TODO */
- CLIENT_ONLY(dbenv);
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
break;
case REP_FILE_REQ:
- MASTER_ONLY(dbenv);
- return (__rep_send_file(dbenv, rec, *eidp));
- break;
+ MASTER_ONLY(rep, rp);
+ ret = __rep_send_file(dbenv, rec, *eidp);
+ goto errlock;
#endif
case REP_LOG:
case REP_LOG_MORE:
- CLIENT_ONLY(dbenv);
- if ((ret = __rep_apply(dbenv, rp, rec)) != 0)
- return (ret);
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
+ if ((ret = __rep_apply(dbenv, rp, rec, ret_lsnp)) != 0)
+ goto errlock;
if (rp->rectype == REP_LOG_MORE) {
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
master = rep->master_id;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
R_LOCK(dbenv, &dblp->reginfo);
lsn = lp->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
- ret = __rep_send_message(dbenv, master,
- REP_ALL_REQ, &lsn, NULL, 0);
+ /*
+ * If the master_id is invalid, this means that since
+ * the last record was sent, somebody declared an
+ * election and we may not have a master to request
+ * things of.
+ *
+ * This is not an error; when we find a new master,
+ * we'll re-negotiate where the end of the log is and
+ * try to bring ourselves up to date again anyway.
+ */
+ if (master == DB_EID_INVALID)
+ ret = 0;
+ else
+ if (__rep_send_message(dbenv,
+ master, REP_ALL_REQ, &lsn, NULL, 0) != 0)
+ break;
}
- return (ret);
+ goto errlock;
case REP_LOG_REQ:
- MASTER_ONLY(dbenv);
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
- return (ret);
- memset(&data_dbt, 0, sizeof(data_dbt));
- lsn = rp->lsn;
-
+ MASTER_ONLY(rep, rp);
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION) &&
+ rec != NULL && rec->size != 0) {
+ __db_err(dbenv,
+ "[%lu][%lu]: LOG_REQ max lsn: [%lu][%lu]",
+ (u_long) rp->lsn.file, (u_long)rp->lsn.offset,
+ (u_long)((DB_LSN *)rec->data)->file,
+ (u_long)((DB_LSN *)rec->data)->offset);
+ }
+#endif
/*
* There are three different cases here.
* 1. We asked for a particular LSN and got it.
- * 2. We asked for an LSN of X,0 which is invalid and got the
- * first log record in a particular file.
- * 3. We asked for an LSN and it's not found because it is
+ * 2. We asked for an LSN and it's not found because it is
* beyond the end of a log file and we need a NEWFILE msg.
+ * and then the record that was requested.
+ * 3. We asked for an LSN and it simply doesn't exist, but
+ * doesn't meet any of those other criteria, in which case
+ * it's an error (that should never happen).
+ * If we have a valid LSN and the request has a data_dbt with
+ * it, then we need to send all records up to the LSN in the
+ * data dbt.
+ */
+ lsn = rp->lsn;
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto errlock;
+ memset(&data_dbt, 0, sizeof(data_dbt));
+ ret = __log_c_get(logc, &rp->lsn, &data_dbt, DB_SET);
+
+ if (ret == 0) /* Case 1 */
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_LOG, &rp->lsn, &data_dbt, 0);
+ else if (ret == DB_NOTFOUND) {
+ R_LOCK(dbenv, &dblp->reginfo);
+ endlsn = lp->lsn;
+ R_UNLOCK(dbenv, &dblp->reginfo);
+ if (endlsn.file > lsn.file) {
+ /*
+ * Case 2:
+ * Need to find the LSN of the last record in
+ * file lsn.file so that we can send it with
+ * the NEWFILE call. In order to do that, we
+ * need to try to get {lsn.file + 1, 0} and
+ * then backup.
+ */
+ endlsn.file = lsn.file + 1;
+ endlsn.offset = 0;
+ if ((ret = __log_c_get(logc,
+ &endlsn, &data_dbt, DB_SET)) != 0 ||
+ (ret = __log_c_get(logc,
+ &endlsn, &data_dbt, DB_PREV)) != 0) {
+ if (FLD_ISSET(dbenv->verbose,
+ DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Unable to get prev of [%lu][%lu]",
+ (u_long)lsn.file,
+ (u_long)lsn.offset);
+ ret = DB_REP_OUTDATED;
+ } else {
+ endlsn.offset += logc->c_len;
+ (void)__rep_send_message(dbenv, *eidp,
+ REP_NEWFILE, &endlsn, NULL, 0);
+ }
+ } else {
+ /* Case 3 */
+ DB_ASSERT(0);
+ __db_err(dbenv,
+ "Request for LSN [%lu][%lu] fails",
+ (u_long)lsn.file, (u_long)lsn.offset);
+ ret = EINVAL;
+ }
+ }
+
+ /*
+ * XXX
+ * Note that we are not observing the limits here that
+ * we observe on ALL_REQs. If we think that we need to,
+ * then we need to figure out how to convey back to the
+ * client the max_lsn with the LOG_MORE message and I
+ * can't quite figure out how to do that.
*/
- ret = logc->get(logc, &rp->lsn, &data_dbt, DB_SET);
- cmp = log_compare(&lsn, &rp->lsn);
-
- if (ret == 0 && cmp == 0) /* Case 1 */
- ret = __rep_send_message(dbenv, *eidp,
- REP_LOG, &rp->lsn, &data_dbt, 0);
- else if (ret == DB_NOTFOUND ||
- (ret == 0 && cmp < 0 && rp->lsn.offset == 0))
- /* Cases 2 and 3: Send a NEWFILE message. */
- ret = __rep_send_message(dbenv, *eidp,
- REP_NEWFILE, &lsn, NULL, 0);
-
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+ while (ret == 0 && rec != NULL && rec->size != 0) {
+ if ((ret =
+ __log_c_get(logc, &lsn, &data_dbt, DB_NEXT)) != 0) {
+ if (ret == DB_NOTFOUND)
+ ret = 0;
+ break;;
+ }
+ if (log_compare(&lsn, (DB_LSN *)rec->data) >= 0)
+ break;
+ if (__rep_send_message(dbenv,
+ *eidp, REP_LOG, &lsn, &data_dbt, 0) != 0)
+ break;
+ }
+
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
- return (ret);
+ goto errlock;
case REP_NEWSITE:
/* We don't hold the rep mutex, and may miscount. */
rep->stat.st_newsites++;
/* This is a rebroadcast; simply tell the application. */
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (F_ISSET(rep, REP_F_MASTER)) {
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
R_LOCK(dbenv, &dblp->reginfo);
@@ -364,164 +628,138 @@ send: ret = __rep_send_message(dbenv, *eidp,
(void)__rep_send_message(dbenv,
*eidp, REP_NEWMASTER, &lsn, NULL, 0);
}
- return (DB_REP_NEWSITE);
+ ret = DB_REP_NEWSITE;
+ goto errlock;
case REP_NEWCLIENT:
/*
* This message was received and should have resulted in the
* application entering the machine ID in its machine table.
* We respond to this with an ALIVE to send relevant information
- * to the new client. But first, broadcast the new client's
- * record to all the clients.
+ * to the new client (if we are a master, we'll send a
+ * NEWMASTER, so we only need to send the ALIVE if we're a
+ * client). But first, broadcast the new client's record to
+ * all the clients.
*/
- if ((ret = __rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_NEWSITE, &rp->lsn, rec, 0)) != 0)
- return (ret);
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWSITE, &rp->lsn, rec, 0);
- if (F_ISSET(dbenv, DB_ENV_REP_CLIENT))
- return (0);
+ ret = DB_REP_NEWSITE;
- /* FALLTHROUGH */
+ if (F_ISSET(rep, REP_F_UPGRADE)) {
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ egen = rep->egen;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ data_dbt.data = &egen;
+ data_dbt.size = sizeof(egen);
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_ALIVE, &rp->lsn, &data_dbt, 0);
+ goto errlock;
+ }
+ /* FALLTHROUGH */
case REP_MASTER_REQ:
- ANYSITE(dbenv);
- if (F_ISSET(dbenv, DB_ENV_REP_CLIENT))
- return (0);
- dblp = dbenv->lg_handle;
- lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- return (__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0));
+ if (F_ISSET(rep, REP_F_MASTER)) {
+ R_LOCK(dbenv, &dblp->reginfo);
+ lsn = lp->lsn;
+ R_UNLOCK(dbenv, &dblp->reginfo);
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_NEWMASTER, &lsn, NULL, 0);
+ }
+ /*
+ * Otherwise, clients just ignore it.
+ */
+ goto errlock;
case REP_NEWFILE:
- CLIENT_ONLY(dbenv);
- return (__rep_apply(dbenv, rp, rec));
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
+ ret = __rep_apply(dbenv, rp, rec, ret_lsnp);
+ goto errlock;
case REP_NEWMASTER:
- ANYSITE(dbenv);
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER) &&
+ ANYSITE(rep);
+ if (F_ISSET(rep, REP_F_MASTER) &&
*eidp != dbenv->rep_eid) {
/* We don't hold the rep mutex, and may miscount. */
rep->stat.st_dupmasters++;
- return (DB_REP_DUPMASTER);
+ ret = DB_REP_DUPMASTER;
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_DUPMASTER, NULL, NULL, 0);
+ goto errlock;
}
- return (__rep_new_master(dbenv, rp, *eidp));
+ ret = __rep_new_master(dbenv, rp, *eidp);
+ goto errlock;
case REP_PAGE: /* TODO */
- CLIENT_ONLY(dbenv);
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
break;
case REP_PAGE_REQ: /* TODO */
- MASTER_ONLY(dbenv);
+ MASTER_ONLY(rep, rp);
break;
case REP_PLIST: /* TODO */
- CLIENT_ONLY(dbenv);
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
break;
case REP_PLIST_REQ: /* TODO */
- MASTER_ONLY(dbenv);
+ MASTER_ONLY(rep, rp);
break;
case REP_VERIFY:
- CLIENT_ONLY(dbenv);
+ CLIENT_ONLY(rep, rp);
+ MASTER_CHECK(dbenv, *eidp, rep);
DB_ASSERT((F_ISSET(rep, REP_F_RECOVER) &&
!IS_ZERO_LSN(lp->verify_lsn)) ||
(!F_ISSET(rep, REP_F_RECOVER) &&
IS_ZERO_LSN(lp->verify_lsn)));
if (IS_ZERO_LSN(lp->verify_lsn))
- return (0);
+ goto errlock;
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
- return (ret);
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto errlock;
memset(&mylog, 0, sizeof(mylog));
- if ((ret = logc->get(logc, &rp->lsn, &mylog, DB_SET)) != 0)
+ if ((ret = __log_c_get(logc, &rp->lsn, &mylog, DB_SET)) != 0)
goto rep_verify_err;
if (mylog.size == rec->size &&
memcmp(mylog.data, rec->data, rec->size) == 0) {
- /*
- * If we're a logs-only client, we can simply truncate
- * the log to the point where it last agreed with the
- * master's; otherwise, recover to that point.
- */
- R_LOCK(dbenv, &dblp->reginfo);
- ZERO_LSN(lp->verify_lsn);
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (F_ISSET(dbenv, DB_ENV_REP_LOGSONLY)) {
- INIT_LSN(init_lsn);
- if ((ret = dbenv->log_flush(dbenv,
- &rp->lsn)) != 0 ||
- (ret = __log_vtruncate(dbenv,
- &rp->lsn, &init_lsn)) != 0)
- goto rep_verify_err;
- } else if ((ret = __db_apprec(dbenv, &rp->lsn, 0)) != 0)
- goto rep_verify_err;
-
- /*
- * The log has been truncated (either by __db_apprec or
- * directly). We want to make sure we're waiting for
- * the LSN at the new end-of-log, not some later point.
- */
- R_LOCK(dbenv, &dblp->reginfo);
- lp->ready_lsn = lp->lsn;
- ZERO_LSN(lp->waiting_lsn);
- R_UNLOCK(dbenv, &dblp->reginfo);
-
- /*
- * Discard any log records we have queued; we're
- * about to re-request them, and can't trust the
- * ones in the queue.
- */
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- if ((ret = db_rep->rep_db->truncate(db_rep->rep_db,
- NULL, &unused, 0)) != 0) {
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- goto rep_verify_err;
- }
- rep->stat.st_log_queued = 0;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
-
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- F_CLR(rep, REP_F_RECOVER);
-
- /*
- * If the master_id is invalid, this means that since
- * the last record was sent, somebody declared an
- * election and we may not have a master to request
- * things of.
- *
- * This is not an error; when we find a new master,
- * we'll re-negotiate where the end of the log is and
- * try to bring ourselves up to date again anyway.
- */
- if ((master = rep->master_id) == DB_EID_INVALID) {
- DB_ASSERT(IN_ELECTION(rep));
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- ret = 0;
- } else {
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- ret = __rep_send_message(dbenv, master,
- REP_ALL_REQ, &rp->lsn, NULL, 0);
- }
+ ret = __rep_verify_match(dbenv, rp, savetime);
} else if ((ret =
- logc->get(logc, &lsn, &mylog, DB_PREV)) == 0) {
- R_LOCK(dbenv, &dblp->reginfo);
+ __log_c_get(logc, &lsn, &mylog, DB_PREV)) == 0) {
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
lp->verify_lsn = lsn;
lp->rcvd_recs = 0;
lp->wait_recs = rep->request_gap;
- R_UNLOCK(dbenv, &dblp->reginfo);
- ret = __rep_send_message(dbenv,
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ (void)__rep_send_message(dbenv,
*eidp, REP_VERIFY_REQ, &lsn, NULL, 0);
+ } else if (ret == DB_NOTFOUND) {
+ /* We've either run out of records because
+ * logs have been removed or we've rolled back
+ * all the way to the beginning. In both cases
+ * we to return DB_REP_OUTDATED; in the latter
+ * we don't think these sites were every part of
+ * the same environment and we'll say so.
+ */
+ ret = DB_REP_OUTDATED;
+ if (rp->lsn.file != 1)
+ __db_err(dbenv,
+ "Too few log files to sync with master");
+ else
+ __db_err(dbenv,
+ "Client was never part of master's environment");
}
-rep_verify_err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+rep_verify_err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
- return (ret);
+ goto errlock;
case REP_VERIFY_FAIL:
rep->stat.st_outdated++;
- return (DB_REP_OUTDATED);
+ ret = DB_REP_OUTDATED;
+ goto errlock;
case REP_VERIFY_REQ:
- MASTER_ONLY(dbenv);
+ MASTER_ONLY(rep, rp);
type = REP_VERIFY;
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
- return (ret);
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto errlock;
d = &data_dbt;
memset(d, 0, sizeof(data_dbt));
F_SET(logc, DB_LOG_SILENT_ERR);
- ret = logc->get(logc, &rp->lsn, d, DB_SET);
+ ret = __log_c_get(logc, &rp->lsn, d, DB_SET);
/*
* If the LSN was invalid, then we might get a not
* found, we might get an EIO, we could get anything.
@@ -538,12 +776,11 @@ rep_verify_err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
if (ret != 0)
d = NULL;
- ret = __rep_send_message(dbenv, *eidp, type, &rp->lsn, d, 0);
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
- ret = t_ret;
- return (ret);
+ (void)__rep_send_message(dbenv, *eidp, type, &rp->lsn, d, 0);
+ ret = __log_c_close(logc);
+ goto errlock;
case REP_VOTE1:
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (F_ISSET(rep, REP_F_MASTER)) {
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
__db_err(dbenv, "Master received vote");
@@ -551,91 +788,130 @@ rep_verify_err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
R_LOCK(dbenv, &dblp->reginfo);
lsn = lp->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
- return (__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0));
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_NEWMASTER, &lsn, NULL, 0);
+ goto errlock;
}
vi = (REP_VOTE_INFO *)rec->data;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
/*
- * If you get a vote and you're not in an election, simply
- * return an indicator to hold an election which will trigger
- * this site to send its vote again.
+ * If we get a vote from a later election gen, we
+ * clear everything from the current one, and we'll
+ * start over by tallying it.
*/
- if (!IN_ELECTION(rep)) {
+ if (vi->egen < rep->egen) {
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
__db_err(dbenv,
- "Not in election, but received vote1");
+ "Received old vote %lu, egen %lu, ignoring vote1",
+ (u_long)vi->egen, (u_long)rep->egen);
#endif
- ret = DB_REP_HOLDELECTION;
- goto unlock;
+ goto errunlock;
}
-
- if (F_ISSET(rep, REP_F_EPHASE2))
- goto unlock;
+ if (vi->egen > rep->egen) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Received VOTE1 from egen %lu, my egen %lu; reset",
+ (u_long)vi->egen, (u_long)rep->egen);
+#endif
+ __rep_elect_done(dbenv, rep);
+ rep->egen = vi->egen;
+ }
+ if (!IN_ELECTION(rep))
+ F_SET(rep, REP_F_TALLY);
/* Check if this site knows about more sites than we do. */
if (vi->nsites > rep->nsites)
rep->nsites = vi->nsites;
- /* Check if we've heard from this site already. */
- tally = R_ADDR((REGINFO *)dbenv->reginfo, rep->tally_off);
- for (i = 0; i < rep->sites; i++) {
- if (tally[i] == *eidp)
- /* Duplicate vote. */
- goto unlock;
- }
-
/*
- * We are keeping vote, let's see if that changes our count of
- * the number of sites.
+ * We are keeping the vote, let's see if that changes our
+ * count of the number of sites.
*/
if (rep->sites + 1 > rep->nsites)
rep->nsites = rep->sites + 1;
if (rep->nsites > rep->asites &&
- (ret = __rep_grow_sites(dbenv, rep->nsites)) != 0)
- goto unlock;
+ (ret = __rep_grow_sites(dbenv, rep->nsites)) != 0) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Grow sites returned error %d", ret);
+#endif
+ goto errunlock;
+ }
- tally[rep->sites] = *eidp;
- rep->sites++;
+ /*
+ * Ignore vote1's if we're in phase 2.
+ */
+ if (F_ISSET(rep, REP_F_EPHASE2)) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "In phase 2, ignoring vote1");
+#endif
+ goto errunlock;
+ }
/*
- * Change winners if the incoming record has a higher
- * priority, or an equal priority but a larger LSN, or
- * an equal priority and LSN but higher "tiebreaker" value.
+ * Record this vote. If we get back non-zero, we
+ * ignore the vote.
*/
+ if ((ret = __rep_tally(dbenv, rep, *eidp, &rep->sites,
+ vi->egen, rep->tally_off)) != 0) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Tally returned %d, sites %d",
+ ret, rep->sites);
+#endif
+ ret = 0;
+ goto errunlock;
+ }
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) {
__db_err(dbenv,
- "%s(eid)%d (pri)%d (gen)%d (sites)%d [%d,%d]",
- "Existing vote: ",
- rep->winner, rep->w_priority, rep->w_gen,
- rep->sites, rep->w_lsn.file, rep->w_lsn.offset);
- __db_err(dbenv,
- "Incoming vote: (eid)%d (pri)%d (gen)%d [%d,%d]",
- *eidp, vi->priority, rp->gen, rp->lsn.file,
- rp->lsn.offset);
+ "Incoming vote: (eid)%d (pri)%d (gen)%lu (egen)%lu [%lu,%lu]",
+ *eidp, vi->priority,
+ (u_long)rp->gen, (u_long)vi->egen,
+ (u_long)rp->lsn.file, (u_long)rp->lsn.offset);
+ if (rep->sites > 1)
+ __db_err(dbenv,
+ "Existing vote: (eid)%d (pri)%d (gen)%lu (sites)%d [%lu,%lu]",
+ rep->winner, rep->w_priority,
+ (u_long)rep->w_gen, rep->sites,
+ (u_long)rep->w_lsn.file,
+ (u_long)rep->w_lsn.offset);
}
#endif
- cmp = log_compare(&rp->lsn, &rep->w_lsn);
- if (vi->priority > rep->w_priority ||
- (vi->priority != 0 && vi->priority == rep->w_priority &&
- (cmp > 0 ||
- (cmp == 0 && vi->tiebreaker > rep->w_tiebreaker)))) {
+ __rep_cmp_vote(dbenv, rep, eidp, &rp->lsn, vi->priority,
+ rp->gen, vi->tiebreaker);
+ /*
+ * If you get a vote and you're not in an election, we've
+ * already recorded this vote. But that is all we need
+ * to do.
+ */
+ if (!IN_ELECTION(rep)) {
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
- __db_err(dbenv, "Accepting new vote");
+ __db_err(dbenv,
+ "Not in election, but received vote1 0x%x",
+ rep->flags);
#endif
- rep->winner = *eidp;
- rep->w_priority = vi->priority;
- rep->w_lsn = rp->lsn;
- rep->w_gen = rp->gen;
+ ret = DB_REP_HOLDELECTION;
+ goto errunlock;
}
+
master = rep->winner;
lsn = rep->w_lsn;
- done = rep->sites == rep->nsites && rep->w_priority != 0;
+ /*
+ * We need to check sites == nsites, not more than half
+ * like we do in __rep_elect and the VOTE2 code below. The
+ * reason is that we want to process all the incoming votes
+ * and not short-circuit once we reach more than half. The
+ * real winner's vote may be in the last half.
+ */
+ done = rep->sites >= rep->nsites && rep->w_priority != 0;
if (done) {
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) {
@@ -644,21 +920,21 @@ rep_verify_err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
master, master == rep->eid ? "(self)" : "");
}
#endif
- F_CLR(rep, REP_F_EPHASE1);
+ egen = rep->egen;
F_SET(rep, REP_F_EPHASE2);
- }
-
- if (done && master == rep->eid) {
- rep->votes++;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- return (0);
- }
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ F_CLR(rep, REP_F_EPHASE1);
+ if (master == rep->eid) {
+ (void)__rep_tally(dbenv, rep, rep->eid,
+ &rep->votes, egen, rep->v2tally_off);
+ goto errunlock;
+ }
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- /* Vote for someone else. */
- if (done)
- return (__rep_send_message(dbenv,
- master, REP_VOTE2, NULL, NULL, 0));
+ /* Vote for someone else. */
+ __rep_send_vote(dbenv, NULL, 0, 0, 0, egen,
+ master, REP_VOTE2);
+ } else
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
/* Election is still going on. */
break;
@@ -666,76 +942,104 @@ rep_verify_err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
__db_err(dbenv, "We received a vote%s",
- F_ISSET(dbenv, DB_ENV_REP_MASTER) ?
+ F_ISSET(rep, REP_F_MASTER) ?
" (master)" : "");
#endif
- if (F_ISSET(dbenv, DB_ENV_REP_MASTER)) {
+ if (F_ISSET(rep, REP_F_MASTER)) {
R_LOCK(dbenv, &dblp->reginfo);
lsn = lp->lsn;
R_UNLOCK(dbenv, &dblp->reginfo);
rep->stat.st_elections_won++;
- return (__rep_send_message(dbenv,
- *eidp, REP_NEWMASTER, &lsn, NULL, 0));
+ (void)__rep_send_message(dbenv,
+ *eidp, REP_NEWMASTER, &lsn, NULL, 0);
+ goto errlock;
}
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
/* If we have priority 0, we should never get a vote. */
DB_ASSERT(rep->priority != 0);
- if (!IN_ELECTION(rep)) {
-#ifdef DIAGNOSTIC
- if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
- __db_err(dbenv, "Not in election, got vote");
-#endif
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- return (DB_REP_HOLDELECTION);
- }
- /* avoid counting duplicates. */
- rep->votes++;
- done = rep->votes > rep->nsites / 2;
- if (done) {
- rep->master_id = rep->eid;
- rep->gen = rep->w_gen + 1;
- ELECTION_DONE(rep);
- F_CLR(rep, REP_F_UPGRADE);
- F_SET(rep, REP_F_MASTER);
- *eidp = rep->master_id;
+ /*
+ * We might be the last to the party and we haven't had
+ * time to tally all the vote1's, but others have and
+ * decided we're the winner. So, if we're in the process
+ * of tallying sites, keep the vote so that when our
+ * election thread catches up we'll have the votes we
+ * already received.
+ */
+ vi = (REP_VOTE_INFO *)rec->data;
+ if (!IN_ELECTION_TALLY(rep) && vi->egen >= rep->egen) {
#ifdef DIAGNOSTIC
if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
__db_err(dbenv,
- "Got enough votes to win; election done; winner is %d",
- rep->master_id);
+ "Not in election gen %lu, at %lu, got vote",
+ (u_long)vi->egen, (u_long)rep->egen);
#endif
+ ret = DB_REP_HOLDELECTION;
+ goto errunlock;
}
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- if (done) {
- R_LOCK(dbenv, &dblp->reginfo);
- lsn = lp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- /* Declare me the winner. */
+ /*
+ * Record this vote. In a VOTE2, the only valid entry
+ * in the REP_VOTE_INFO is the election generation.
+ *
+ * There are several things which can go wrong that we
+ * need to account for:
+ * 1. If we receive a latent VOTE2 from an earlier election,
+ * we want to ignore it.
+ * 2. If we receive a VOTE2 from a site from which we never
+ * received a VOTE1, we want to ignore it.
+ * 3. If we have received a duplicate VOTE2 from this election
+ * from the same site we want to ignore it.
+ * 4. If this is from the current election and someone is
+ * really voting for us, then we finally get to record it.
+ */
+ /*
+ * __rep_cmp_vote2 checks for cases 1 and 2.
+ */
+ if ((ret = __rep_cmp_vote2(dbenv, rep, *eidp, vi->egen)) != 0) {
+ ret = 0;
+ goto errunlock;
+ }
+ /*
+ * __rep_tally takes care of cases 3 and 4.
+ */
+ if ((ret = __rep_tally(dbenv, rep, *eidp, &rep->votes,
+ vi->egen, rep->v2tally_off)) != 0) {
+ ret = 0;
+ goto errunlock;
+ }
+ done = rep->votes > rep->nsites / 2;
#ifdef DIAGNOSTIC
- if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
- __db_err(dbenv, "I won, sending NEWMASTER");
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Counted vote %d", rep->votes);
#endif
- rep->stat.st_elections_won++;
- if ((ret = __rep_send_message(dbenv, DB_EID_BROADCAST,
- REP_NEWMASTER, &lsn, NULL, 0)) != 0)
- break;
- return (DB_REP_NEWMASTER);
- }
+ if (done) {
+ __rep_elect_master(dbenv, rep, eidp);
+ ret = DB_REP_NEWMASTER;
+ goto errunlock;
+ } else
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
break;
default:
__db_err(dbenv,
"DB_ENV->rep_process_message: unknown replication message: type %lu",
(u_long)rp->rectype);
- return (EINVAL);
+ ret = EINVAL;
+ goto errlock;
}
- return (0);
-
-unlock: MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ /*
+ * If we already hold rep_mutexp then we goto 'errunlock'
+ * Otherwise we goto 'errlock' to acquire it before we
+ * decrement our message thread count.
+ */
+errlock:
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+errunlock:
+ rep->msg_th--;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
return (ret);
}
@@ -748,43 +1052,46 @@ unlock: MUTEX_UNLOCK(dbenv, db_rep->mutexp);
* process and manage incoming log records.
*/
static int
-__rep_apply(dbenv, rp, rec)
+__rep_apply(dbenv, rp, rec, ret_lsnp)
DB_ENV *dbenv;
REP_CONTROL *rp;
DBT *rec;
+ DB_LSN *ret_lsnp;
{
__dbreg_register_args dbreg_args;
__txn_ckp_args ckp_args;
DB_REP *db_rep;
- DBT control_dbt, key_dbt, lsn_dbt, nextrec_dbt, rec_dbt;
+ DBT control_dbt, key_dbt, lsn_dbt;
+ DBT max_lsn_dbt, *max_lsn_dbtp, nextrec_dbt, rec_dbt;
DB *dbp;
DBC *dbc;
DB_LOG *dblp;
- DB_LSN ckp_lsn, lsn, newfile_lsn, next_lsn, waiting_lsn;
+ DB_LSN ckp_lsn, max_lsn, next_lsn;
LOG *lp;
REP *rep;
- REP_CONTROL lsn_rc;
+ REP_CONTROL *grp;
u_int32_t rectype, txnid;
- int cmp, do_req, eid, have_mutex, ret, t_ret;
+ int cmp, do_req, eid, gap, ret, t_ret;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
dbp = db_rep->rep_db;
dbc = NULL;
- have_mutex = ret = 0;
+ ret = gap = 0;
memset(&control_dbt, 0, sizeof(control_dbt));
memset(&rec_dbt, 0, sizeof(rec_dbt));
+ max_lsn_dbtp = NULL;
/*
* If this is a log record and it's the next one in line, simply
* write it to the log. If it's a "normal" log record, i.e., not
* a COMMIT or CHECKPOINT or something that needs immediate processing,
- * just return. If it's a COMMIT, CHECKPOINT or LOG_REGISTER (i.e.,
- * not SIMPLE), handle it now. If it's a NEWFILE record, then we
- * have to be prepared to deal with a logfile change.
+ * just return. If it's a COMMIT, CHECKPOINT, LOG_REGISTER, PREPARE
+ * (i.e., not SIMPLE), handle it now. If it's a NEWFILE record,
+ * then we have to be prepared to deal with a logfile change.
*/
dblp = dbenv->lg_handle;
- R_LOCK(dbenv, &dblp->reginfo);
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
lp = dblp->reginfo.primary;
cmp = log_compare(&rp->lsn, &lp->ready_lsn);
@@ -803,14 +1110,16 @@ __rep_apply(dbenv, rp, rec)
if (cmp == 0) {
/* We got the log record that we are expecting. */
if (rp->rectype == REP_NEWFILE) {
-newfile: ret = __rep_newfile(dbenv, rp, rec, &lp->ready_lsn);
+ ret = __rep_newfile(dbenv, rp, &lp->ready_lsn);
/* Make this evaluate to a simple rectype. */
rectype = 0;
} else {
- DB_ASSERT(log_compare(&rp->lsn, &lp->lsn) == 0);
+ if (F_ISSET(rp, DB_LOG_PERM)) {
+ gap = 1;
+ max_lsn = rp->lsn;
+ }
ret = __log_rep_put(dbenv, &rp->lsn, rec);
- lp->ready_lsn = lp->lsn;
memcpy(&rectype, rec->data, sizeof(rectype));
if (ret == 0)
/*
@@ -819,195 +1128,110 @@ newfile: ret = __rep_newfile(dbenv, rp, rec, &lp->ready_lsn);
*/
rep->stat.st_log_records++;
}
+ /*
+ * If we get the record we are expecting, reset
+ * the count of records we've received and are applying
+ * towards the request interval.
+ */
+ lp->rcvd_recs = 0;
+
while (ret == 0 && IS_SIMPLE(rectype) &&
log_compare(&lp->ready_lsn, &lp->waiting_lsn) == 0) {
/*
* We just filled in a gap in the log record stream.
* Write subsequent records to the log.
*/
-gap_check: lp->wait_recs = 0;
+gap_check: max_lsn_dbtp = NULL;
+ lp->wait_recs = 0;
lp->rcvd_recs = 0;
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (have_mutex == 0) {
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- have_mutex = 1;
- }
+ ZERO_LSN(lp->max_wait_lsn);
if (dbc == NULL &&
- (ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
+ (ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
goto err;
/* The DBTs need to persist through another call. */
F_SET(&control_dbt, DB_DBT_REALLOC);
F_SET(&rec_dbt, DB_DBT_REALLOC);
- if ((ret = dbc->c_get(dbc,
+ if ((ret = __db_c_get(dbc,
&control_dbt, &rec_dbt, DB_RMW | DB_FIRST)) != 0)
goto err;
rp = (REP_CONTROL *)control_dbt.data;
rec = &rec_dbt;
memcpy(&rectype, rec->data, sizeof(rectype));
- R_LOCK(dbenv, &dblp->reginfo);
- /*
- * We need to check again, because it's possible that
- * some other thread of control changed the waiting_lsn
- * or removed that record from the database.
- */
- if (log_compare(&lp->ready_lsn, &rp->lsn) == 0) {
- if (rp->rectype != REP_NEWFILE) {
- DB_ASSERT(log_compare
- (&rp->lsn, &lp->lsn) == 0);
- ret = __log_rep_put(dbenv,
- &rp->lsn, rec);
- lp->ready_lsn = lp->lsn;
-
- /*
- * We may miscount if we race, since we
- * don't currently hold the rep mutex.
- */
- if (ret == 0)
- rep->stat.st_log_records++;
- } else {
- ret = __rep_newfile(dbenv,
- rp, rec, &lp->ready_lsn);
- rectype = 0;
- }
- waiting_lsn = lp->waiting_lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- if ((ret = dbc->c_del(dbc, 0)) != 0)
- goto err;
-
- /*
- * We may miscount, as we don't hold the rep
- * mutex.
- */
- --rep->stat.st_log_queued;
-
+ if (rp->rectype != REP_NEWFILE) {
+ ret = __log_rep_put(dbenv, &rp->lsn, rec);
/*
- * Update waiting_lsn. We need to move it
- * forward to the LSN of the next record
- * in the queue.
- */
- memset(&lsn_dbt, 0, sizeof(lsn_dbt));
- F_SET(&lsn_dbt, DB_DBT_USERMEM);
- lsn_dbt.data = &lsn_rc;
- lsn_dbt.ulen = sizeof(lsn_rc);
- memset(&lsn_rc, 0, sizeof(lsn_rc));
-
- /*
- * If the next item in the database is a log
- * record--the common case--we're not
- * interested in its contents, just in its LSN.
- * If it's a newfile message, though, the
- * data field may be the LSN of the last
- * record in the old file, and we need to use
- * that to determine whether or not there's
- * a gap.
- *
- * Optimize both these cases by doing a partial
- * get of the data item. If it's a newfile
- * record, we'll get the whole LSN, and if
- * it's not, we won't waste time allocating.
+ * We may miscount if we race, since we
+ * don't currently hold the rep mutex.
*/
- memset(&nextrec_dbt, 0, sizeof(nextrec_dbt));
- F_SET(&nextrec_dbt,
- DB_DBT_USERMEM | DB_DBT_PARTIAL);
- nextrec_dbt.ulen =
- nextrec_dbt.dlen = sizeof(newfile_lsn);
- ZERO_LSN(newfile_lsn);
- nextrec_dbt.data = &newfile_lsn;
-
- ret = dbc->c_get(dbc,
- &lsn_dbt, &nextrec_dbt, DB_NEXT);
- if (ret != DB_NOTFOUND && ret != 0)
- goto err;
-
- R_LOCK(dbenv, &dblp->reginfo);
- if (ret == DB_NOTFOUND) {
- /*
- * Do a quick double-check to make
- * sure waiting_lsn hasn't changed.
- * It's possible that between the
- * DB_NOTFOUND return and the R_LOCK,
- * some record was added to the
- * database, and we don't want to lose
- * sight of the fact that it's there.
- */
- if (log_compare(&waiting_lsn,
- &lp->waiting_lsn) == 0)
- ZERO_LSN(
- lp->waiting_lsn);
+ if (ret == 0)
+ rep->stat.st_log_records++;
+ } else {
+ ret = __rep_newfile(dbenv, rp, &lp->ready_lsn);
+ rectype = 0;
+ }
+ if ((ret = __db_c_del(dbc, 0)) != 0)
+ goto err;
- /*
- * Whether or not the current record is
- * simple, there's no next one, and
- * therefore we haven't got anything
- * else to do right now. Break out.
- */
- break;
- }
+ /*
+ * If we just processed a permanent log record, make
+ * sure that we note that we've done so and that we
+ * save its LSN.
+ */
+ if (F_ISSET(rp, DB_LOG_PERM)) {
+ gap = 1;
+ max_lsn = rp->lsn;
+ }
+ /*
+ * We may miscount, as we don't hold the rep
+ * mutex.
+ */
+ --rep->stat.st_log_queued;
- DB_ASSERT(lsn_dbt.size == sizeof(lsn_rc));
+ /*
+ * Update waiting_lsn. We need to move it
+ * forward to the LSN of the next record
+ * in the queue.
+ *
+ * If the next item in the database is a log
+ * record--the common case--we're not
+ * interested in its contents, just in its LSN.
+ * Optimize by doing a partial get of the data item.
+ */
+ memset(&nextrec_dbt, 0, sizeof(nextrec_dbt));
+ F_SET(&nextrec_dbt, DB_DBT_PARTIAL);
+ nextrec_dbt.ulen = nextrec_dbt.dlen = 0;
- /*
- * NEWFILE records have somewhat convoluted
- * semantics, so there are five cases
- * pertaining to what the newly-gotten record
- * is and what we want to do about it.
- *
- * 1) This isn't a NEWFILE record. Advance
- * waiting_lsn and proceed.
- *
- * 2) NEWFILE, no LSN stored as the datum,
- * lsn_rc.lsn == ready_lsn. The NEWFILE
- * record is next, so set waiting_lsn =
- * ready_lsn.
- *
- * 3) NEWFILE, no LSN stored as the datum, but
- * lsn_rc.lsn > ready_lsn. There's still a
- * gap; set waiting_lsn = lsn_rc.lsn.
- *
- * 4) NEWFILE, newfile_lsn in datum, and it's <
- * ready_lsn. (If the datum is non-empty,
- * it's the LSN of the last record in a log
- * file, not the end of the log, and
- * lsn_rc.lsn is the LSN of the start of
- * the new file--we didn't have the end of
- * the old log handy when we sent the
- * record.) No gap--we're ready to
- * proceed. Set both waiting and ready_lsn
- * to lsn_rc.lsn.
- *
- * 5) NEWFILE, newfile_lsn in datum, and it's >=
- * ready_lsn. We're still missing at
- * least one record; set waiting_lsn,
- * but not ready_lsn, to lsn_rc.lsn.
- */
- if (lsn_rc.rectype == REP_NEWFILE &&
- nextrec_dbt.size > 0 && log_compare(
- &newfile_lsn, &lp->ready_lsn) < 0)
- /* Case 4. */
- lp->ready_lsn =
- lp->waiting_lsn = lsn_rc.lsn;
- else {
- /* Cases 1, 2, 3, and 5. */
- DB_ASSERT(log_compare(&lsn_rc.lsn,
- &lp->ready_lsn) >= 0);
- lp->waiting_lsn = lsn_rc.lsn;
- }
+ memset(&lsn_dbt, 0, sizeof(lsn_dbt));
+ ret = __db_c_get(dbc, &lsn_dbt, &nextrec_dbt, DB_NEXT);
+ if (ret != DB_NOTFOUND && ret != 0)
+ goto err;
+ if (ret == DB_NOTFOUND) {
+ ZERO_LSN(lp->waiting_lsn);
/*
- * If the current rectype is simple, we're
- * done with it, and we should check and see
- * whether the next record queued is the next
- * one we're ready for. This is just the loop
- * condition, so we continue.
- *
- * Otherwise, we need to break out of this loop
- * and process this record first.
+ * Whether or not the current record is
+ * simple, there's no next one, and
+ * therefore we haven't got anything
+ * else to do right now. Break out.
*/
- if (!IS_SIMPLE(rectype))
- break;
+ break;
}
+ grp = (REP_CONTROL *)lsn_dbt.data;
+ lp->waiting_lsn = grp->lsn;
+
+ /*
+ * If the current rectype is simple, we're done with it,
+ * and we should check and see whether the next record
+ * queued is the next one we're ready for. This is
+ * just the loop condition, so we continue.
+ *
+ * If this record isn't simple, then we need to
+ * process it before continuing.
+ */
+ if (!IS_SIMPLE(rectype))
+ break;
}
/*
@@ -1017,69 +1241,64 @@ gap_check: lp->wait_recs = 0;
do_req = 0;
if (!IS_ZERO_LSN(lp->waiting_lsn) &&
log_compare(&lp->ready_lsn, &lp->waiting_lsn) != 0) {
+ /*
+ * We got a record and processed it, but we may
+ * still be waiting for more records.
+ */
next_lsn = lp->ready_lsn;
do_req = ++lp->rcvd_recs >= lp->wait_recs;
if (do_req) {
lp->wait_recs = rep->request_gap;
lp->rcvd_recs = 0;
+ if (log_compare(&rp->lsn,
+ &lp->max_wait_lsn) == 0) {
+ /*
+ * This single record was requested
+ * so ask for the rest of the gap.
+ */
+ lp->max_wait_lsn = lp->waiting_lsn;
+ memset(&max_lsn_dbt,
+ 0, sizeof(max_lsn_dbt));
+ max_lsn_dbt.data = &lp->waiting_lsn;
+ max_lsn_dbt.size =
+ sizeof(lp->waiting_lsn);
+ max_lsn_dbtp = &max_lsn_dbt;
+ }
}
+ } else {
+ lp->wait_recs = 0;
+ ZERO_LSN(lp->max_wait_lsn);
}
- R_UNLOCK(dbenv, &dblp->reginfo);
- if (dbc != NULL) {
- if ((ret = dbc->c_close(dbc)) != 0)
+ if (dbc != NULL)
+ if ((ret = __db_c_close(dbc)) != 0)
goto err;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
- have_mutex = 0;
- }
dbc = NULL;
if (do_req) {
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
eid = db_rep->region->master_id;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
if (eid != DB_EID_INVALID) {
rep->stat.st_log_requested++;
- if ((ret = __rep_send_message(dbenv,
- eid, REP_LOG_REQ, &next_lsn, NULL, 0)) != 0)
- goto err;
+ (void)__rep_send_message(dbenv, eid,
+ REP_LOG_REQ, &next_lsn, max_lsn_dbtp, 0);
}
}
} else if (cmp > 0) {
/*
* The LSN is higher than the one we were waiting for.
- * If it is a NEWFILE message, this may not mean that
- * there's a gap; in some cases, NEWFILE messages contain
- * the LSN of the beginning of the new file instead
- * of the end of the old.
- *
- * In these cases, the rec DBT will contain the last LSN
- * of the old file, so we can tell whether there's a gap.
- */
- if (rp->rectype == REP_NEWFILE &&
- rp->lsn.file == lp->ready_lsn.file + 1 &&
- rp->lsn.offset == 0) {
- DB_ASSERT(rec != NULL && rec->data != NULL &&
- rec->size == sizeof(DB_LSN));
- memcpy(&lsn, rec->data, sizeof(DB_LSN));
- if (log_compare(&lp->ready_lsn, &lsn) > 0)
- /*
- * The last LSN in the old file is smaller
- * than the one we're expecting, so there's
- * no gap--the one we're expecting just
- * doesn't exist.
- */
- goto newfile;
- }
-
- /*
- * This record isn't in sequence; add it to the table and
- * update waiting_lsn if necessary.
+ * This record isn't in sequence; add it to the temporary
+ * database, update waiting_lsn if necessary, and perform
+ * calculations to determine if we should issue requests
+ * for new records.
*/
memset(&key_dbt, 0, sizeof(key_dbt));
key_dbt.data = rp;
key_dbt.size = sizeof(*rp);
+ R_LOCK(dbenv, &dblp->reginfo);
next_lsn = lp->lsn;
+ R_UNLOCK(dbenv, &dblp->reginfo);
do_req = 0;
if (lp->wait_recs == 0) {
/*
@@ -1090,43 +1309,54 @@ gap_check: lp->wait_recs = 0;
*/
lp->wait_recs = rep->request_gap;
lp->rcvd_recs = 0;
+ ZERO_LSN(lp->max_wait_lsn);
}
if (++lp->rcvd_recs >= lp->wait_recs) {
/*
* If we've waited long enough, request the record
- * and double the wait interval.
+ * (or set of records) and double the wait interval.
*/
do_req = 1;
- lp->wait_recs <<= 1;
lp->rcvd_recs = 0;
+ lp->wait_recs *= 2;
if (lp->wait_recs > rep->max_gap)
lp->wait_recs = rep->max_gap;
+
+ /*
+ * If we've never requested this record, then request
+ * everything between it and the first record we have.
+ * If we have requested this record, then only request
+ * this record, not the entire gap.
+ */
+ if (IS_ZERO_LSN(lp->max_wait_lsn)) {
+ lp->max_wait_lsn = lp->waiting_lsn;
+ memset(&max_lsn_dbt, 0, sizeof(max_lsn_dbt));
+ max_lsn_dbt.data = &lp->waiting_lsn;
+ max_lsn_dbt.size = sizeof(lp->waiting_lsn);
+ max_lsn_dbtp = &max_lsn_dbt;
+ } else {
+ max_lsn_dbtp = NULL;
+ lp->max_wait_lsn = next_lsn;
+ }
}
- R_UNLOCK(dbenv, &dblp->reginfo);
- MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- ret = dbp->put(dbp, NULL, &key_dbt, rec, 0);
+ ret = __db_put(dbp, NULL, &key_dbt, rec, 0);
rep->stat.st_log_queued++;
rep->stat.st_log_queued_total++;
if (rep->stat.st_log_queued_max < rep->stat.st_log_queued)
rep->stat.st_log_queued_max = rep->stat.st_log_queued;
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
if (ret != 0)
- return (ret);
+ goto done;
- R_LOCK(dbenv, &dblp->reginfo);
if (IS_ZERO_LSN(lp->waiting_lsn) ||
log_compare(&rp->lsn, &lp->waiting_lsn) < 0)
lp->waiting_lsn = rp->lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
if (do_req) {
/* Request the LSN we are still waiting for. */
- MUTEX_LOCK(dbenv, db_rep->mutexp);
-
- /* May as well do this after we grab the mutex. */
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
eid = db_rep->region->master_id;
/*
@@ -1141,21 +1371,34 @@ gap_check: lp->wait_recs = 0;
*/
if (eid != DB_EID_INVALID) {
rep->stat.st_log_requested++;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- ret = __rep_send_message(dbenv,
- eid, REP_LOG_REQ, &next_lsn, NULL, 0);
- } else
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ (void)__rep_send_message(dbenv, eid,
+ REP_LOG_REQ, &next_lsn, max_lsn_dbtp, 0);
+ } else {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ (void)__rep_send_message(dbenv,
+ DB_EID_BROADCAST, REP_MASTER_REQ,
+ NULL, NULL, 0);
+ }
}
- return (ret);
- } else {
- R_UNLOCK(dbenv, &dblp->reginfo);
/*
+ * If this is permanent; let the caller know that we have
+ * not yet written it to disk, but we've accepted it.
+ */
+ if (ret == 0 && F_ISSET(rp, DB_LOG_PERM)) {
+ if (ret_lsnp != NULL)
+ *ret_lsnp = rp->lsn;
+ ret = DB_REP_NOTPERM;
+ }
+ goto done;
+ } else {
+ /*
* We may miscount if we race, since we
* don't currently hold the rep mutex.
*/
rep->stat.st_log_duplicated++;
+ goto done;
}
if (ret != 0 || cmp < 0 || (cmp == 0 && IS_SIMPLE(rectype)))
goto done;
@@ -1164,7 +1407,7 @@ gap_check: lp->wait_recs = 0;
* If we got here, then we've got a log record in rp and rec that
* we need to process.
*/
- switch(rectype) {
+ switch (rectype) {
case DB___dbreg_register:
/*
* DB opens occur in the context of a transaction, so we can
@@ -1180,7 +1423,7 @@ gap_check: lp->wait_recs = 0;
((u_int8_t *)&dbreg_args.txnid - (u_int8_t *)&dbreg_args),
sizeof(u_int32_t));
if (txnid == TXN_INVALID &&
- !F_ISSET(dbenv, DB_ENV_REP_LOGSONLY))
+ !F_ISSET(rep, REP_F_LOGSONLY))
ret = __db_dispatch(dbenv, dbenv->recover_dtab,
dbenv->recover_dtab_size, rec, &rp->lsn,
DB_TXN_APPLY, NULL);
@@ -1190,20 +1433,25 @@ gap_check: lp->wait_recs = 0;
memcpy(&ckp_lsn, (u_int8_t *)rec->data +
((u_int8_t *)&ckp_args.ckp_lsn - (u_int8_t *)&ckp_args),
sizeof(DB_LSN));
- if (!F_ISSET(dbenv, DB_ENV_REP_LOGSONLY))
- ret = dbenv->memp_sync(dbenv, &ckp_lsn);
+ if (!F_ISSET(rep, REP_F_LOGSONLY))
+ ret = __memp_sync(dbenv, &ckp_lsn);
else
/*
* We ought to make sure the logs on a logs-only
* replica get flushed now and again.
*/
- ret = dbenv->log_flush(dbenv, &ckp_lsn);
+ ret = __log_flush(dbenv, &ckp_lsn);
/* Update the last_ckp in the txn region. */
if (ret == 0)
__txn_updateckp(dbenv, &rp->lsn);
+ else {
+ __db_err(dbenv, "Error syncing ckp [%lu][%lu]",
+ (u_long)ckp_lsn.file, (u_long)ckp_lsn.offset);
+ __db_panic(dbenv, ret);
+ }
break;
case DB___txn_regop:
- if (!F_ISSET(dbenv, DB_ENV_REP_LOGSONLY))
+ if (!F_ISSET(rep, REP_F_LOGSONLY))
do {
/*
* If an application is doing app-specific
@@ -1216,6 +1464,18 @@ gap_check: lp->wait_recs = 0;
*/
ret = __rep_process_txn(dbenv, rec);
} while (ret == DB_LOCK_DEADLOCK);
+
+ /* Now flush the log unless we're running TXN_NOSYNC. */
+ if (ret == 0 && !F_ISSET(dbenv, DB_ENV_TXN_NOSYNC))
+ ret = __log_flush(dbenv, NULL);
+ if (ret != 0) {
+ __db_err(dbenv, "Error processing txn [%lu][%lu]",
+ (u_long)rp->lsn.file, (u_long)rp->lsn.offset);
+ __db_panic(dbenv, ret);
+ }
+ break;
+ case DB___txn_xa_regop:
+ ret = __log_flush(dbenv, NULL);
break;
default:
goto err;
@@ -1223,23 +1483,40 @@ gap_check: lp->wait_recs = 0;
/* Check if we need to go back into the table. */
if (ret == 0) {
- R_LOCK(dbenv, &dblp->reginfo);
if (log_compare(&lp->ready_lsn, &lp->waiting_lsn) == 0)
goto gap_check;
- R_UNLOCK(dbenv, &dblp->reginfo);
}
done:
-err: if (dbc != NULL && (t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+err: if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
- if (have_mutex)
- MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (ret == 0 && F_ISSET(dbenv, DB_ENV_LOG_AUTOREMOVE) &&
+ rp->rectype == REP_NEWFILE)
+ __log_autoremove(dbenv);
if (control_dbt.data != NULL)
__os_ufree(dbenv, control_dbt.data);
if (rec_dbt.data != NULL)
__os_ufree(dbenv, rec_dbt.data);
-
+ if (ret == 0 && gap) {
+ if (ret_lsnp != NULL)
+ *ret_lsnp = max_lsn;
+ ret = DB_REP_ISPERM;
+ }
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) {
+ if (ret == DB_REP_ISPERM)
+ __db_err(dbenv, "Returning ISPERM [%lu][%lu]",
+ (u_long)ret_lsnp->file, (u_long)ret_lsnp->offset);
+ else if (ret == DB_REP_NOTPERM)
+ __db_err(dbenv, "Returning NOTPERM [%lu][%lu]",
+ (u_long)ret_lsnp->file, (u_long)ret_lsnp->offset);
+ else if (ret != 0)
+ __db_err(dbenv, "Returning %d [%lu][%lu]", ret,
+ (u_long)ret_lsnp->file, (u_long)ret_lsnp->offset);
+ }
+#endif
return (ret);
}
@@ -1256,7 +1533,7 @@ __rep_process_txn(dbenv, rec)
DB_ENV *dbenv;
DBT *rec;
{
- DBT data_dbt;
+ DBT data_dbt, *lock_dbt;
DB_LOCKREQ req, *lvp;
DB_LOGC *logc;
DB_LSN prev_lsn, *lsnp;
@@ -1265,10 +1542,8 @@ __rep_process_txn(dbenv, rec)
REP *rep;
__txn_regop_args *txn_args;
__txn_xa_regop_args *prep_args;
- u_int32_t lockid, op, rectype;
+ u_int32_t lockid, rectype;
int i, ret, t_ret;
- int (**dtab)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- size_t dtabsize;
void *txninfo;
db_rep = dbenv->rep_handle;
@@ -1284,10 +1559,8 @@ __rep_process_txn(dbenv, rec)
* There are two phases: First, we have to traverse
* backwards through the log records gathering the list
* of all LSNs in the transaction. Once we have this information,
- * we can loop through, acquire the locks we need for each record,
- * and then apply it.
+ * we can loop through and then apply it.
*/
- dtab = NULL;
/*
* We may be passed a prepare (if we're restoring a prepare
@@ -1303,11 +1576,12 @@ __rep_process_txn(dbenv, rec)
*/
if ((ret = __txn_regop_read(dbenv, rec->data, &txn_args)) != 0)
return (ret);
- op = txn_args->opcode;
- prev_lsn = txn_args->prev_lsn;
- __os_free(dbenv, txn_args);
- if (op != TXN_COMMIT)
+ if (txn_args->opcode != TXN_COMMIT) {
+ __os_free(dbenv, txn_args);
return (0);
+ }
+ prev_lsn = txn_args->prev_lsn;
+ lock_dbt = &txn_args->locks;
} else {
/* We're a prepare. */
DB_ASSERT(rectype == DB___txn_xa_regop);
@@ -1316,20 +1590,21 @@ __rep_process_txn(dbenv, rec)
__txn_xa_regop_read(dbenv, rec->data, &prep_args)) != 0)
return (ret);
prev_lsn = prep_args->prev_lsn;
- __os_free(dbenv, prep_args);
+ lock_dbt = &prep_args->locks;
}
- /* Phase 1. Get a list of the LSNs in this transaction, and sort it. */
- if ((ret = __rep_collect_txn(dbenv, &prev_lsn, &lc)) != 0)
- return (ret);
- qsort(lc.array, lc.nlsns, sizeof(DB_LSN), __rep_lsn_cmp);
+ /* Get locks. */
+ if ((ret = __lock_id(dbenv, &lockid)) != 0)
+ goto err1;
- if ((ret = dbenv->lock_id(dbenv, &lockid)) != 0)
+ if ((ret =
+ __lock_get_list(dbenv, lockid, 0, DB_LOCK_WRITE, lock_dbt)) != 0)
goto err;
- /* Initialize the getpgno dispatch table. */
- if ((ret = __rep_lockpgno_init(dbenv, &dtab, &dtabsize)) != 0)
+ /* Phase 1. Get a list of the LSNs in this transaction, and sort it. */
+ if ((ret = __rep_collect_txn(dbenv, &prev_lsn, &lc)) != 0)
goto err;
+ qsort(lc.array, lc.nlsns, sizeof(DB_LSN), __rep_lsn_cmp);
/*
* The set of records for a transaction may include dbreg_register
@@ -1340,34 +1615,40 @@ __rep_process_txn(dbenv, rec)
goto err;
/* Phase 2: Apply updates. */
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
goto err;
for (lsnp = &lc.array[0], i = 0; i < lc.nlsns; i++, lsnp++) {
- if ((ret = __rep_lockpages(dbenv,
- dtab, dtabsize, lsnp, NULL, NULL, lockid)) != 0)
- goto err;
- if ((ret = logc->get(logc, lsnp, &data_dbt, DB_SET)) != 0)
+ if ((ret = __log_c_get(logc, lsnp, &data_dbt, DB_SET)) != 0) {
+ __db_err(dbenv, "failed to read the log at [%lu][%lu]",
+ (u_long)lsnp->file, (u_long)lsnp->offset);
goto err;
+ }
if ((ret = __db_dispatch(dbenv, dbenv->recover_dtab,
dbenv->recover_dtab_size, &data_dbt, lsnp,
- DB_TXN_APPLY, txninfo)) != 0)
+ DB_TXN_APPLY, txninfo)) != 0) {
+ __db_err(dbenv, "transaction failed at [%lu][%lu]",
+ (u_long)lsnp->file, (u_long)lsnp->offset);
goto err;
+ }
}
err: memset(&req, 0, sizeof(req));
req.op = DB_LOCK_PUT_ALL;
- if ((t_ret = dbenv->lock_vec(dbenv, lockid,
- DB_LOCK_FREE_LOCKER, &req, 1, &lvp)) != 0 && ret == 0)
+ if ((t_ret =
+ __lock_vec(dbenv, lockid, 0, &req, 1, &lvp)) != 0 && ret == 0)
+ ret = t_ret;
+
+ if ((t_ret = __lock_id_free(dbenv, lockid)) != 0 && ret == 0)
ret = t_ret;
+err1: if (rectype == DB___txn_regop)
+ __os_free(dbenv, txn_args);
+ else
+ __os_free(dbenv, prep_args);
if (lc.nalloc != 0)
__os_free(dbenv, lc.array);
- if ((t_ret =
- dbenv->lock_id_free(dbenv, lockid)) != 0 && ret == 0)
- ret = t_ret;
-
- if (logc != NULL && (t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+ if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
if (txninfo != NULL)
@@ -1376,9 +1657,6 @@ err: memset(&req, 0, sizeof(req));
if (F_ISSET(&data_dbt, DB_DBT_REALLOC) && data_dbt.data != NULL)
__os_ufree(dbenv, data_dbt.data);
- if (dtab != NULL)
- __os_free(dbenv, dtab);
-
if (ret == 0)
/*
* We don't hold the rep mutex, and could miscount if we race.
@@ -1410,11 +1688,11 @@ __rep_collect_txn(dbenv, lsnp, lc)
memset(&data, 0, sizeof(data));
F_SET(&data, DB_DBT_REALLOC);
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
while (!IS_ZERO_LSN(*lsnp) &&
- (ret = logc->get(logc, lsnp, &data, DB_SET)) == 0) {
+ (ret = __log_c_get(logc, lsnp, &data, DB_SET)) == 0) {
memcpy(&rectype, data.data, sizeof(rectype));
if (rectype == DB___txn_child) {
if ((ret = __txn_child_read(dbenv,
@@ -1448,9 +1726,12 @@ __rep_collect_txn(dbenv, lsnp, lc)
if (ret != 0)
goto err;
- }
+ }
+ if (ret != 0)
+ __db_err(dbenv, "collect failed at: [%lu][%lu]",
+ (u_long)lsnp->file, (u_long)lsnp->offset);
-err: if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
if (data.data != NULL)
__os_ufree(dbenv, data.data);
@@ -1471,39 +1752,23 @@ __rep_lsn_cmp(lsn1, lsn2)
/*
* __rep_newfile --
- * NEWFILE messages can contain either the last LSN of the old file
- * or the first LSN of the new one, depending on which we have available
- * when the message is sent. When applying a NEWFILE message, make sure
- * we haven't already swapped files, as it's possible (given the right sequence
- * of out-of-order messages) to wind up with a NEWFILE message of each
- * variety, and __rep_apply won't detect the two as duplicates of each other.
+ * NEWFILE messages have the LSN of the last record in the previous
+ * log file. When applying a NEWFILE message, make sure we haven't already
+ * swapped files.
*/
static int
-__rep_newfile(dbenv, rc, msgdbt, lsnp)
+__rep_newfile(dbenv, rc, lsnp)
DB_ENV *dbenv;
REP_CONTROL *rc;
- DBT *msgdbt;
DB_LSN *lsnp;
{
DB_LOG *dblp;
LOG *lp;
- u_int32_t newfile;
dblp = dbenv->lg_handle;
lp = dblp->reginfo.primary;
- /*
- * A NEWFILE message containing the old file's LSN will be
- * accompanied by a NULL rec DBT; one containing the new one's LSN
- * will need to supply the last record in the old file by
- * sending it in the rec DBT.
- */
- if (msgdbt == NULL || msgdbt->size == 0)
- newfile = rc->lsn.file + 1;
- else
- newfile = rc->lsn.file;
-
- if (newfile > lp->lsn.file)
+ if (rc->lsn.file + 1 > lp->lsn.file)
return (__log_newfile(dblp, lsnp));
else {
/* We've already applied this NEWFILE. Just ignore it. */
@@ -1511,3 +1776,410 @@ __rep_newfile(dbenv, rc, msgdbt, lsnp)
return (0);
}
}
+
+/*
+ * __rep_tally --
+ * PUBLIC: int __rep_tally __P((DB_ENV *, REP *, int, int *,
+ * PUBLIC: u_int32_t, u_int32_t));
+ *
+ * Handle incoming vote1 message on a client. Called with the db_rep
+ * mutex held. This function will return 0 if we successfully tally
+ * the vote and non-zero if the vote is ignored. This will record
+ * both VOTE1 and VOTE2 records, depending on which region offset the
+ * caller passed in.
+ */
+int
+__rep_tally(dbenv, rep, eid, countp, egen, vtoff)
+ DB_ENV *dbenv;
+ REP *rep;
+ int eid, *countp;
+ u_int32_t egen, vtoff;
+{
+ REP_VTALLY *tally, *vtp;
+ int i;
+
+#ifndef DIAGNOSTIC
+ COMPQUIET(rep, NULL);
+#endif
+
+ tally = R_ADDR((REGINFO *)dbenv->reginfo, vtoff);
+ i = 0;
+ vtp = &tally[i];
+ while (i < *countp) {
+ /*
+ * Ignore votes from earlier elections (i.e. we've heard
+ * from this site in this election, but its vote from an
+ * earlier election got delayed and we received it now).
+ * However, if we happened to hear from an earlier vote
+ * and we recorded it and we're now hearing from a later
+ * election we want to keep the updated one. Note that
+ * updating the entry will not increase the count.
+ * Also ignore votes that are duplicates.
+ */
+ if (vtp->eid == eid) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Tally found[%d] (%d, %lu), this vote (%d, %lu)",
+ i, vtp->eid, (u_long)vtp->egen,
+ eid, (u_long)egen);
+#endif
+ if (vtp->egen >= egen)
+ return (1);
+ else {
+ vtp->egen = egen;
+ return (0);
+ }
+ }
+ i++;
+ vtp = &tally[i];
+ }
+ /*
+ * If we get here, we have a new voter we haven't
+ * seen before. Tally this vote.
+ */
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION)) {
+ if (vtoff == rep->tally_off)
+ __db_err(dbenv, "Tallying VOTE1[%d] (%d, %lu)",
+ i, eid, (u_long)egen);
+ else
+ __db_err(dbenv, "Tallying VOTE2[%d] (%d, %lu)",
+ i, eid, (u_long)egen);
+ }
+#endif
+ vtp->eid = eid;
+ vtp->egen = egen;
+ (*countp)++;
+ return (0);
+}
+
+/*
+ * __rep_cmp_vote --
+ * PUBLIC: void __rep_cmp_vote __P((DB_ENV *, REP *, int *, DB_LSN *,
+ * PUBLIC: int, int, int));
+ *
+ * Compare incoming vote1 message on a client. Called with the db_rep
+ * mutex held.
+ */
+void
+__rep_cmp_vote(dbenv, rep, eidp, lsnp, priority, gen, tiebreaker)
+ DB_ENV *dbenv;
+ REP *rep;
+ int *eidp;
+ DB_LSN *lsnp;
+ int priority, gen, tiebreaker;
+{
+ int cmp;
+
+#ifndef DIAGNOSTIC
+ COMPQUIET(dbenv, NULL);
+#endif
+ cmp = log_compare(lsnp, &rep->w_lsn);
+ /*
+ * If we've seen more than one, compare us to the best so far.
+ * If we're the first, make ourselves the winner to start.
+ */
+ if (rep->sites > 1 && priority != 0) {
+ /*
+ * LSN is primary determinant. Then priority if LSNs
+ * are equal, then tiebreaker if both are equal.
+ */
+ if (cmp > 0 ||
+ (cmp == 0 && (priority > rep->w_priority ||
+ (priority == rep->w_priority &&
+ (tiebreaker > rep->w_tiebreaker))))) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Accepting new vote");
+#endif
+ rep->winner = *eidp;
+ rep->w_priority = priority;
+ rep->w_lsn = *lsnp;
+ rep->w_gen = gen;
+ rep->w_tiebreaker = tiebreaker;
+ }
+ } else if (rep->sites == 1) {
+ if (priority != 0) {
+ /* Make ourselves the winner to start. */
+ rep->winner = *eidp;
+ rep->w_priority = priority;
+ rep->w_gen = gen;
+ rep->w_lsn = *lsnp;
+ rep->w_tiebreaker = tiebreaker;
+ } else {
+ rep->winner = DB_EID_INVALID;
+ rep->w_priority = 0;
+ rep->w_gen = 0;
+ ZERO_LSN(rep->w_lsn);
+ rep->w_tiebreaker = 0;
+ }
+ }
+ return;
+}
+
+/*
+ * __rep_cmp_vote2 --
+ * PUBLIC: int __rep_cmp_vote2 __P((DB_ENV *, REP *, int, u_int32_t));
+ *
+ * Compare incoming vote2 message with vote1's we've recorded. Called
+ * with the db_rep mutex held. We return 0 if the VOTE2 is from a
+ * site we've heard from and it is from this election. Otherwise we return 1.
+ */
+int
+__rep_cmp_vote2(dbenv, rep, eid, egen)
+ DB_ENV *dbenv;
+ REP *rep;
+ int eid;
+ u_int32_t egen;
+{
+ int i;
+ REP_VTALLY *tally, *vtp;
+
+ tally = R_ADDR((REGINFO *)dbenv->reginfo, rep->tally_off);
+ i = 0;
+ vtp = &tally[i];
+ for (i = 0; i < rep->sites; i++) {
+ vtp = &tally[i];
+ if (vtp->eid == eid && vtp->egen == egen) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Found matching vote1 (%d, %lu), at %d of %d",
+ eid, (u_long)egen, i, rep->sites);
+#endif
+ return (0);
+ }
+ }
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Did not find vote1 for eid %d, egen %lu",
+ eid, (u_long)egen);
+#endif
+ return (1);
+}
+
+static int
+__rep_dorecovery(dbenv, lsnp, trunclsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp, *trunclsnp;
+{
+ DB_LSN lsn;
+ DBT mylog;
+ DB_LOGC *logc;
+ int ret, t_ret, undo;
+ u_int32_t rectype;
+ __txn_regop_args *txnrec;
+
+ /* Figure out if we are backing out any commited transactions. */
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+
+ memset(&mylog, 0, sizeof(mylog));
+ undo = 0;
+ while (undo == 0 &&
+ (ret = __log_c_get(logc, &lsn, &mylog, DB_PREV)) == 0 &&
+ log_compare(&lsn, lsnp) > 0) {
+ memcpy(&rectype, mylog.data, sizeof(rectype));
+ if (rectype == DB___txn_regop) {
+ if ((ret =
+ __txn_regop_read(dbenv, mylog.data, &txnrec)) != 0)
+ goto err;
+ if (txnrec->opcode != TXN_ABORT) {
+ undo = 1;
+ }
+ __os_free(dbenv, txnrec);
+ }
+ }
+
+ ret = __db_apprec(dbenv, lsnp, trunclsnp, undo, 0);
+
+err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
+
+/*
+ * __rep_verify_match --
+ * We have just received a matching log record during verification.
+ * Figure out if we're going to need to run recovery. If so, wait until
+ * everything else has exited the library. If not, set up the world
+ * correctly and move forward.
+ */
+static int
+__rep_verify_match(dbenv, rp, savetime)
+ DB_ENV *dbenv;
+ REP_CONTROL *rp;
+ time_t savetime;
+{
+ DB_LOG *dblp;
+ DB_LSN ckplsn, trunclsn;
+ DB_REP *db_rep;
+ LOG *lp;
+ REP *rep;
+ int done, master, ret, wait_cnt;
+ u_int32_t unused;
+
+ dblp = dbenv->lg_handle;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ lp = dblp->reginfo.primary;
+ ret = 0;
+
+ /*
+ * Check if the savetime is different than our current time stamp.
+ * If it is, then we're racing with another thread trying to recover
+ * and we lost. We must give up.
+ */
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ done = savetime != rep->timestamp;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (done) {
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ return (0);
+ }
+
+ ZERO_LSN(lp->verify_lsn);
+
+ /* Check if we our log is already up to date. */
+ R_LOCK(dbenv, &dblp->reginfo);
+ done = rp->lsn.file == lp->lsn.file &&
+ rp->lsn.offset + lp->len == lp->lsn.offset;
+ if (done) {
+ lp->ready_lsn = lp->lsn;
+ ZERO_LSN(lp->waiting_lsn);
+ }
+ R_UNLOCK(dbenv, &dblp->reginfo);
+ if (done)
+ goto finish; /* Yes, holding the mutex. */
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+
+ if (F_ISSET(rep, REP_F_LOGSONLY)) {
+ /*
+ * If we're a logs-only client, we can simply truncate
+ * the log to the point where it last agreed with the
+ * master's.
+ */
+ INIT_LSN(ckplsn);
+ if ((ret = __log_flush(dbenv, &rp->lsn)) != 0 || (ret =
+ __log_vtruncate(dbenv, &rp->lsn, &ckplsn, &trunclsn)) != 0)
+ return (ret);
+ } else {
+ /*
+ * Make sure the world hasn't changed while we tried to get
+ * the lock. If it hasn't then it's time for us to kick all
+ * operations out of DB and run recovery.
+ */
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (F_ISSET(rep, REP_F_READY) || rep->in_recovery != 0) {
+ rep->stat.st_msgs_recover++;
+ goto errunlock;
+ }
+
+ /* Phase 1: set REP_F_READY and wait for op_cnt to go to 0. */
+ F_SET(rep, REP_F_READY);
+ for (wait_cnt = 0; rep->op_cnt != 0;) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ __os_sleep(dbenv, 1, 0);
+#ifdef DIAGNOSTIC
+ if (++wait_cnt % 60 == 0)
+ __db_err(dbenv,
+ "Waiting for txn_cnt to run replication recovery for %d minutes",
+ wait_cnt / 60);
+#endif
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ }
+
+ /*
+ * Phase 2: set in_recovery and wait for handle count to go
+ * to 0 and for the number of threads in __rep_process_message
+ * to go to 1 (us).
+ */
+ rep->in_recovery = 1;
+ for (wait_cnt = 0; rep->handle_cnt != 0 || rep->msg_th > 1;) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ __os_sleep(dbenv, 1, 0);
+#ifdef DIAGNOSTIC
+ if (++wait_cnt % 60 == 0)
+ __db_err(dbenv,
+"Waiting for handle/thread count to run replication recovery for %d minutes",
+ wait_cnt / 60);
+#endif
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ }
+
+ /* OK, everyone is out, we can now run recovery. */
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+
+ if ((ret = __rep_dorecovery(dbenv, &rp->lsn, &trunclsn)) != 0) {
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ rep->in_recovery = 0;
+ F_CLR(rep, REP_F_READY);
+ goto errunlock;
+ }
+ }
+
+ /*
+ * The log has been truncated (either directly by us or by __db_apprec)
+ * We want to make sure we're waiting for the LSN at the new end-of-log,
+ * not some later point.
+ */
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ lp->ready_lsn = trunclsn;
+finish: ZERO_LSN(lp->waiting_lsn);
+ lp->wait_recs = 0;
+ lp->rcvd_recs = 0;
+ ZERO_LSN(lp->verify_lsn);
+
+ /*
+ * Discard any log records we have queued; we're about to re-request
+ * them, and can't trust the ones in the queue. We need to set the
+ * DB_AM_RECOVER bit in this handle, so that the operation doesn't
+ * deadlock.
+ */
+ F_SET(db_rep->rep_db, DB_AM_RECOVER);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ ret = __db_truncate(db_rep->rep_db, NULL, &unused, 0);
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ F_CLR(db_rep->rep_db, DB_AM_RECOVER);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ rep->stat.st_log_queued = 0;
+ rep->in_recovery = 0;
+ F_CLR(rep, REP_F_NOARCHIVE | REP_F_READY | REP_F_RECOVER);
+
+ if (ret != 0)
+ goto errunlock;
+
+ /*
+ * If the master_id is invalid, this means that since
+ * the last record was sent, somebody declared an
+ * election and we may not have a master to request
+ * things of.
+ *
+ * This is not an error; when we find a new master,
+ * we'll re-negotiate where the end of the log is and
+ * try to bring ourselves up to date again anyway.
+ *
+ * !!!
+ * We cannot assert the election flags though because
+ * somebody may have declared an election and then
+ * got an error, thus clearing the election flags
+ * but we still have an invalid master_id.
+ */
+ master = rep->master_id;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (master == DB_EID_INVALID)
+ ret = 0;
+ else
+ (void)__rep_send_message(dbenv,
+ master, REP_ALL_REQ, &rp->lsn, NULL, 0);
+ if (0) {
+errunlock:
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ }
+ return (ret);
+}
diff --git a/db/rep/rep_region.c b/db/rep/rep_region.c
index 38b3d1791..10a001b4b 100644
--- a/db/rep/rep_region.c
+++ b/db/rep/rep_region.c
@@ -1,23 +1,34 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: rep_region.c,v 1.29 2002/08/06 04:50:36 bostic Exp ";
+static const char revid[] = "$Id: rep_region.c,v 1.42 2003/09/04 18:06:49 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
+#if TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
#endif
#include <string.h>
+#endif
#include "db_int.h"
-#include "dbinc/rep.h"
+#include "dbinc/db_page.h"
#include "dbinc/log.h"
+#include "dbinc/db_am.h"
/*
* __rep_region_init --
@@ -49,6 +60,7 @@ __rep_region_init(dbenv)
goto err;
memset(rep, 0, sizeof(*rep));
rep->tally_off = INVALID_ROFF;
+ rep->v2tally_off = INVALID_ROFF;
renv->rep_off = R_OFFSET(infop, rep);
if ((ret = __db_mutex_setup(dbenv, infop, &rep->mutex,
@@ -81,6 +93,7 @@ __rep_region_init(dbenv)
rep->eid = DB_EID_INVALID;
rep->master_id = DB_EID_INVALID;
rep->gen = 0;
+ rep->egen = rep->gen + 1;
/*
* Set default values for the min and max log records that we
@@ -88,11 +101,13 @@ __rep_region_init(dbenv)
*/
rep->request_gap = DB_REP_REQUEST_GAP;
rep->max_gap = DB_REP_MAX_GAP;
+ F_SET(rep, REP_F_NOARCHIVE);
+ (void)time(&rep->timestamp);
} else
rep = R_ADDR(infop, renv->rep_off);
MUTEX_UNLOCK(dbenv, &renv->mutex);
- db_rep->mutexp = &rep->mutex;
+ db_rep->rep_mutexp = &rep->mutex;
db_rep->db_mutexp = R_ADDR(infop, rep->db_mutex_off);
db_rep->region = rep;
@@ -116,11 +131,11 @@ __rep_region_destroy(dbenv)
int ret, t_ret;
ret = t_ret = 0;
- db_rep = (DB_REP *)dbenv->rep_handle;
+ db_rep = dbenv->rep_handle;
if (db_rep != NULL) {
- if (db_rep->mutexp != NULL)
- ret = __db_mutex_destroy(db_rep->mutexp);
+ if (db_rep->rep_mutexp != NULL)
+ ret = __db_mutex_destroy(db_rep->rep_mutexp);
if (db_rep->db_mutexp != NULL)
t_ret = __db_mutex_destroy(db_rep->db_mutexp);
}
@@ -129,6 +144,21 @@ __rep_region_destroy(dbenv)
}
/*
+ * __rep_dbenv_refresh --
+ * Replication-specific refresh of the DB_ENV structure.
+ *
+ * PUBLIC: void __rep_dbenv_refresh __P((DB_ENV *));
+ */
+void
+__rep_dbenv_refresh(dbenv)
+ DB_ENV *dbenv;
+{
+ if (REP_ON(dbenv))
+ ((DB_REP *)dbenv->rep_handle)->region = NULL;
+ return;
+}
+
+/*
* __rep_dbenv_close --
* Replication-specific destruction of the DB_ENV structure.
*
@@ -138,13 +168,10 @@ int
__rep_dbenv_close(dbenv)
DB_ENV *dbenv;
{
- DB_REP *db_rep;
-
- db_rep = (DB_REP *)dbenv->rep_handle;
-
- if (db_rep != NULL) {
- __os_free(dbenv, db_rep);
+ if (REP_ON(dbenv)) {
+ __os_free(dbenv, dbenv->rep_handle);
dbenv->rep_handle = NULL;
+ dbenv->rep_send = NULL;
}
return (0);
@@ -170,12 +197,13 @@ __rep_preclose(dbenv, do_closefiles)
ret = t_ret = 0;
/* If replication is not initialized, we have nothing to do. */
- if ((db_rep = (DB_REP *)dbenv->rep_handle) == NULL)
+ if (!REP_ON(dbenv))
return (0);
+ db_rep = dbenv->rep_handle;
if ((dbp = db_rep->rep_db) != NULL) {
MUTEX_LOCK(dbenv, db_rep->db_mutexp);
- ret = dbp->close(dbp, 0);
+ ret = __db_close(dbp, NULL, DB_NOSYNC);
db_rep->rep_db = NULL;
MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
}
diff --git a/db/rep/rep_stub.c b/db/rep/rep_stub.c
new file mode 100644
index 000000000..664e4c2c3
--- /dev/null
+++ b/db/rep/rep_stub.c
@@ -0,0 +1,331 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1996-2003
+ * Sleepycat Software. All rights reserved.
+ */
+#include "db_config.h"
+
+#ifndef lint
+static const char revid[] = "$Id: rep_stub.c,v 1.9 2003/11/14 05:32:31 ubell Exp $";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+
+/*
+ * If the library wasn't compiled with replication support, various routines
+ * aren't available. Stub them here, returning an appropriate error.
+ */
+
+static int __db_norep __P((DB_ENV *));
+static int __rep_elect __P((DB_ENV *, int, int, u_int32_t, int *));
+static int __rep_flush __P((DB_ENV *));
+static int __rep_start __P((DB_ENV *, DBT *, u_int32_t));
+static int __rep_stat __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
+static int __rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
+static int __rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
+static int __rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
+static int __rep_set_rep_transport __P((DB_ENV *, int,
+ int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t)));
+
+/*
+ * __db_norep --
+ * Error when a Berkeley DB build doesn't include the access method.
+ */
+static int
+__db_norep(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv,
+ "library build did not include support for replication");
+ return (DB_OPNOTSUP);
+}
+
+int
+__db_default_getpgnos(dbenv, lsnp, summary)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+ void *summary;
+{
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(summary, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__db_rep_enter(dbp, checkgen, doreturn)
+ DB *dbp;
+ int checkgen, doreturn;
+{
+ COMPQUIET(checkgen, 0);
+ COMPQUIET(doreturn, 0);
+ return (__db_norep(dbp->dbenv));
+}
+
+void
+__db_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
+
+void
+__env_rep_enter(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
+
+void
+__env_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
+
+void
+__op_rep_enter(dbenv)
+ DB_ENV *dbenv;
+{
+ return;
+}
+
+void
+__op_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ return;
+}
+
+int
+__rep_dbenv_close(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_dbenv_create(dbenv)
+ DB_ENV *dbenv;
+{
+ dbenv->rep_elect = __rep_elect;
+ dbenv->rep_flush = __rep_flush;
+ dbenv->rep_process_message = __rep_process_message;
+ dbenv->rep_start = __rep_start;
+ dbenv->rep_stat = __rep_stat;
+ dbenv->get_rep_limit = __rep_get_limit;
+ dbenv->set_rep_limit = __rep_set_limit;
+ dbenv->set_rep_request = __rep_set_request;
+ dbenv->set_rep_transport = __rep_set_rep_transport;
+ return (0);
+}
+
+void
+__rep_dbenv_refresh(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
+
+static int
+__rep_elect(dbenv, nsites, priority, timeout, eidp)
+ DB_ENV *dbenv;
+ int nsites, priority;
+ u_int32_t timeout;
+ int *eidp;
+{
+ COMPQUIET(nsites, 0);
+ COMPQUIET(priority, 0);
+ COMPQUIET(timeout, 0);
+ COMPQUIET(eidp, NULL);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_flush(dbenv)
+ DB_ENV *dbenv;
+{
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_get_limit(dbenv, gbytesp, bytesp)
+ DB_ENV *dbenv;
+ u_int32_t *gbytesp, *bytesp;
+{
+ COMPQUIET(gbytesp, NULL);
+ COMPQUIET(bytesp, NULL);
+ return (__db_norep(dbenv));
+}
+
+void
+__rep_get_gen(dbenv, genp)
+ DB_ENV *dbenv;
+ u_int32_t *genp;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(genp, NULL);
+ return;
+}
+
+int
+__rep_is_client(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_noarchive(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_open(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_preclose(dbenv, do_closefiles)
+ DB_ENV *dbenv;
+ int do_closefiles;
+{
+ COMPQUIET(do_closefiles, 0);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_process_message(dbenv, control, rec, eidp, ret_lsnp)
+ DB_ENV *dbenv;
+ DBT *control, *rec;
+ int *eidp;
+ DB_LSN *ret_lsnp;
+{
+ COMPQUIET(control, NULL);
+ COMPQUIET(rec, NULL);
+ COMPQUIET(eidp, NULL);
+ COMPQUIET(ret_lsnp, NULL);
+ return (__db_norep(dbenv));
+}
+
+int
+__rep_region_destroy(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_region_init(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return (0);
+}
+
+int
+__rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
+ DB_ENV *dbenv;
+ int eid;
+ u_int32_t rtype;
+ DB_LSN *lsnp;
+ const DBT *dbtp;
+ u_int32_t flags;
+{
+ COMPQUIET(eid, 0);
+ COMPQUIET(rtype, 0);
+ COMPQUIET(lsnp, NULL);
+ COMPQUIET(dbtp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_set_limit(dbenv, gbytes, bytes)
+ DB_ENV *dbenv;
+ u_int32_t gbytes, bytes;
+{
+ COMPQUIET(gbytes, 0);
+ COMPQUIET(bytes, 0);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_set_rep_transport(dbenv, eid, f_send)
+ DB_ENV *dbenv;
+ int eid;
+ int (*f_send) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *,
+ int, u_int32_t));
+{
+ COMPQUIET(eid, 0);
+ COMPQUIET(f_send, NULL);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_set_request(dbenv, min, max)
+ DB_ENV *dbenv;
+ u_int32_t min, max;
+{
+ COMPQUIET(min, 0);
+ COMPQUIET(max, 0);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_start(dbenv, dbt, flags)
+ DB_ENV *dbenv;
+ DBT *dbt;
+ u_int32_t flags;
+{
+ COMPQUIET(dbt, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_norep(dbenv));
+}
+
+static int
+__rep_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_REP_STAT **statp;
+ u_int32_t flags;
+{
+ COMPQUIET(statp, NULL);
+ COMPQUIET(flags, 0);
+ return (__db_norep(dbenv));
+}
+
+void
+__txn_rep_enter(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
+
+void
+__txn_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ COMPQUIET(dbenv, NULL);
+ return;
+}
diff --git a/db/rep/rep_util.c b/db/rep/rep_util.c
index 880b13c09..678edbcee 100644
--- a/db/rep/rep_util.c
+++ b/db/rep/rep_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: rep_util.c,v 1.51 2002/09/05 02:30:00 margo Exp ";
+static const char revid[] = "$Id: rep_util.c,v 1.103 2003/11/14 05:32:32 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,12 +18,13 @@ static const char revid[] = "Id: rep_util.c,v 1.51 2002/09/05 02:30:00 margo Exp
#include "db_int.h"
#include "dbinc/db_page.h"
+#include "dbinc/db_shash.h"
#include "dbinc/btree.h"
#include "dbinc/fop.h"
#include "dbinc/hash.h"
#include "dbinc/log.h"
+#include "dbinc/lock.h"
#include "dbinc/qam.h"
-#include "dbinc/rep.h"
#include "dbinc/txn.h"
/*
@@ -31,8 +32,6 @@ static const char revid[] = "Id: rep_util.c,v 1.51 2002/09/05 02:30:00 margo Exp
* Miscellaneous replication-related utility functions, including
* those called by other subsystems.
*/
-static int __rep_cmp_bylsn __P((const void *, const void *));
-static int __rep_cmp_bypage __P((const void *, const void *));
#ifdef REP_DIAGNOSTIC
static void __rep_print_logmsg __P((DB_ENV *, const DBT *, DB_LSN *));
@@ -88,8 +87,8 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
REP *rep;
DBT cdbt, scrap_dbt;
REP_CONTROL cntrl;
- u_int32_t send_flags;
int ret;
+ u_int32_t myflags, rectype;
db_rep = dbenv->rep_handle;
rep = db_rep->region;
@@ -104,9 +103,9 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
cntrl.flags = flags;
cntrl.rep_version = DB_REPVERSION;
cntrl.log_version = DB_LOGVERSION;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
cntrl.gen = rep->gen;
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
memset(&cdbt, 0, sizeof(cdbt));
cdbt.data = &cntrl;
@@ -118,16 +117,43 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
dbtp = &scrap_dbt;
}
- send_flags = (LF_ISSET(DB_PERMANENT) ? DB_REP_PERMANENT : 0);
-
-#if 0
- __rep_print_message(dbenv, eid, &cntrl, "rep_send_message");
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __rep_print_message(dbenv, eid, &cntrl, "rep_send_message");
#endif
#ifdef REP_DIAGNOSTIC
if (rtype == REP_LOG)
__rep_print_logmsg(dbenv, dbtp, lsnp);
#endif
- ret = db_rep->rep_send(dbenv, &cdbt, dbtp, eid, send_flags);
+ /*
+ * There are three types of records: commit and checkpoint records
+ * that affect database durability, regular log records that might
+ * be buffered on the master before being transmitted, and control
+ * messages which don't require the guarantees of permanency, but
+ * should not be buffered.
+ */
+ myflags = 0;
+ if (LF_ISSET(DB_LOG_PERM))
+ myflags = DB_REP_PERMANENT;
+ else if (rtype != REP_LOG)
+ myflags = DB_REP_NOBUFFER;
+ else {
+ /*
+ * Check if this is a log record we just read that
+ * may need a DB_LOG_PERM. This is of type REP_LOG,
+ * so we know that dbtp is a log record.
+ */
+ memcpy(&rectype, dbtp->data, sizeof(rectype));
+ if (rectype == DB___txn_regop || rectype == DB___txn_ckp)
+ F_SET(&cntrl, DB_LOG_PERM);
+ }
+
+ /*
+ * We set the LSN above to something valid. Give the master the
+ * actual LSN so that they can coordinate with permanent records from
+ * the client if they want to.
+ */
+ ret = dbenv->rep_send(dbenv, &cdbt, dbtp, &cntrl.lsn, eid, myflags);
/*
* We don't hold the rep lock, so this could miscount if we race.
@@ -139,6 +165,10 @@ __rep_send_message(dbenv, eid, rtype, lsnp, dbtp, flags)
else
rep->stat.st_msgs_send_failures++;
+#ifdef DIAGNOSTIC
+ if (ret != 0 && FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "rep_send_function returned: %d", ret);
+#endif
return (ret);
}
@@ -168,8 +198,8 @@ __rep_print_logmsg(dbenv, logdbt, lsnp)
(void)__db_init_print(dbenv, &ptab, &ptabsize);
(void)__dbreg_init_print(dbenv, &ptab, &ptabsize);
(void)__fop_init_print(dbenv, &ptab, &ptabsize);
- (void)__qam_init_print(dbenv, &ptab, &ptabsize);
(void)__ham_init_print(dbenv, &ptab, &ptabsize);
+ (void)__qam_init_print(dbenv, &ptab, &ptabsize);
(void)__txn_init_print(dbenv, &ptab, &ptabsize);
}
@@ -207,19 +237,62 @@ __rep_new_master(dbenv, cntrl, eid)
db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- ELECTION_DONE(rep);
+ ret = 0;
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ __rep_elect_done(dbenv, rep);
change = rep->gen != cntrl->gen || rep->master_id != eid;
if (change) {
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Updating gen from %lu to %lu from master %d",
+ (u_long)rep->gen, (u_long)cntrl->gen, eid);
+#endif
rep->gen = cntrl->gen;
+ if (rep->egen <= rep->gen)
+ rep->egen = rep->gen + 1;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv,
+ "Updating egen to %lu", (u_long)rep->egen);
+#endif
rep->master_id = eid;
- F_SET(rep, REP_F_RECOVER);
rep->stat.st_master_changes++;
+ F_SET(rep, REP_F_NOARCHIVE | REP_F_RECOVER);
}
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- if (!change)
- return (0);
+ dblp = dbenv->lg_handle;
+ lp = dblp->reginfo.primary;
+ R_LOCK(dbenv, &dblp->reginfo);
+ last_lsn = lsn = lp->lsn;
+ if (last_lsn.offset > sizeof(LOGP))
+ last_lsn.offset -= lp->len;
+ R_UNLOCK(dbenv, &dblp->reginfo);
+
+ if (!change) {
+ /*
+ * If there wasn't a change, we might still have some
+ * catching up or verification to do.
+ */
+ ret = 0;
+ if (F_ISSET(rep, REP_F_RECOVER)) {
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
+ lsn = lp->verify_lsn;
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ if (!IS_ZERO_LSN(lsn))
+ (void)__rep_send_message(dbenv, eid,
+ REP_VERIFY_REQ, &last_lsn, NULL, 0);
+ } else {
+ if (log_compare(&lsn, &cntrl->lsn) < 0)
+ (void)__rep_send_message(dbenv,
+ eid, REP_ALL_REQ, &lsn, NULL, 0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ F_CLR(rep, REP_F_NOARCHIVE);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ }
+ return (ret);
+ }
/*
* If the master changed, we need to start the process of
@@ -229,471 +302,469 @@ __rep_new_master(dbenv, cntrl, eid)
* the master is not, then we just need to request all the log
* records from the master.
*/
- dblp = dbenv->lg_handle;
- lp = dblp->reginfo.primary;
- R_LOCK(dbenv, &dblp->reginfo);
- last_lsn = lsn = lp->lsn;
- if (last_lsn.offset > sizeof(LOGP))
- last_lsn.offset -= lp->len;
- R_UNLOCK(dbenv, &dblp->reginfo);
if (IS_INIT_LSN(lsn) || IS_ZERO_LSN(lsn)) {
-empty: MUTEX_LOCK(dbenv, db_rep->mutexp);
- F_CLR(rep, REP_F_RECOVER);
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
-
- if (IS_INIT_LSN(cntrl->lsn))
- ret = 0;
- else
- ret = __rep_send_message(dbenv, rep->master_id,
+empty: MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ F_CLR(rep, REP_F_NOARCHIVE | REP_F_READY | REP_F_RECOVER);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+
+ if (!IS_INIT_LSN(cntrl->lsn))
+ (void)__rep_send_message(dbenv, rep->master_id,
REP_ALL_REQ, &lsn, NULL, 0);
- if (ret == 0)
- ret = DB_REP_NEWMASTER;
- return (ret);
+ return (DB_REP_NEWMASTER);
} else if (last_lsn.offset <= sizeof(LOGP)) {
/*
* We have just changed log files and need to set lastlsn
* to the last record in the previous log files.
*/
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
return (ret);
memset(&dbt, 0, sizeof(dbt));
- ret = logc->get(logc, &last_lsn, &dbt, DB_LAST);
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+ ret = __log_c_get(logc, &last_lsn, &dbt, DB_LAST);
+ if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
if (ret == DB_NOTFOUND)
goto empty;
- if (ret != 0)
+ if (ret != 0) {
+ /*
+ * We failed here and if we set recover above,
+ * we'd better clear it, because we haven't
+ * set the verify LSN
+ */
+ if (change) {
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ F_CLR(rep, REP_F_RECOVER);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ }
return (ret);
+ }
}
- R_LOCK(dbenv, &dblp->reginfo);
+ MUTEX_LOCK(dbenv, db_rep->db_mutexp);
lp->verify_lsn = last_lsn;
- R_UNLOCK(dbenv, &dblp->reginfo);
- if ((ret = __rep_send_message(dbenv,
- eid, REP_VERIFY_REQ, &last_lsn, NULL, 0)) != 0)
- return (ret);
+ MUTEX_UNLOCK(dbenv, db_rep->db_mutexp);
+ (void)__rep_send_message(dbenv,
+ eid, REP_VERIFY_REQ, &last_lsn, NULL, 0);
return (DB_REP_NEWMASTER);
}
/*
- * __rep_lockpgno_init
- * Create a dispatch table for acquiring locks on each log record.
+ * __rep_is_client
+ * Used by other subsystems to figure out if this is a replication
+ * client site.
*
- * PUBLIC: int __rep_lockpgno_init __P((DB_ENV *,
- * PUBLIC: int (***)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *),
- * PUBLIC: size_t *));
+ * PUBLIC: int __rep_is_client __P((DB_ENV *));
*/
int
-__rep_lockpgno_init(dbenv, dtabp, dtabsizep)
+__rep_is_client(dbenv)
DB_ENV *dbenv;
- int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- size_t *dtabsizep;
{
+ DB_REP *db_rep;
+ REP *rep;
int ret;
- /* Initialize dispatch table. */
- *dtabsizep = 0;
- *dtabp = NULL;
- if ((ret = __bam_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __crdel_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __db_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __dbreg_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __fop_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __qam_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __ham_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0 ||
- (ret = __txn_init_getpgnos(dbenv, dtabp, dtabsizep)) != 0)
- return (ret);
+ if (!REP_ON(dbenv))
+ return (0);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- return (0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ ret = F_ISSET(rep, REP_F_UPGRADE | REP_F_LOGSONLY);
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ return (ret);
}
/*
- * __rep_unlockpages --
- * Unlock the pages locked in __rep_lockpages.
+ * __rep_noarchive
+ * Used by log_archive to determine if it is okay to remove
+ * log files.
*
- * PUBLIC: int __rep_unlockpages __P((DB_ENV *, u_int32_t));
+ * PUBLIC: int __rep_noarchive __P((DB_ENV *));
*/
int
-__rep_unlockpages(dbenv, lid)
+__rep_noarchive(dbenv)
DB_ENV *dbenv;
- u_int32_t lid;
{
- DB_LOCKREQ req, *lvp;
+ DB_REP *db_rep;
+ REP *rep;
- req.op = DB_LOCK_PUT_ALL;
- return (dbenv->lock_vec(dbenv, lid, 0, &req, 1, &lvp));
+ if (!REP_ON(dbenv))
+ return (0);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+
+ return (F_ISSET(rep, REP_F_NOARCHIVE));
}
/*
- * __rep_lockpages --
- * Called to gather and lock pages in preparation for both
- * single transaction apply as well as client synchronization
- * with a new master. A non-NULL key_lsn means that we're locking
- * in order to apply a single log record during client recovery
- * to the joint LSN. A non-NULL max_lsn means that we are applying
- * a transaction whose commit is at max_lsn.
+ * __rep_send_vote
+ * Send this site's vote for the election.
*
- * PUBLIC: int __rep_lockpages __P((DB_ENV *,
- * PUBLIC: int (**)(DB_ENV *, DBT *, DB_LSN *, db_recops, void *),
- * PUBLIC: size_t, DB_LSN *, DB_LSN *, TXN_RECS *, u_int32_t));
+ * PUBLIC: void __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int,
+ * PUBLIC: u_int32_t, int, u_int32_t));
*/
-int
-__rep_lockpages(dbenv, dtab, dtabsize, key_lsn, max_lsn, recs, lid)
+void
+__rep_send_vote(dbenv, lsnp, nsites, pri, tiebreaker, egen, eid, vtype)
DB_ENV *dbenv;
- int (**dtab)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
- size_t dtabsize;
- DB_LSN *key_lsn, *max_lsn;
- TXN_RECS *recs;
- u_int32_t lid;
+ DB_LSN *lsnp;
+ int eid, nsites, pri, tiebreaker;
+ u_int32_t egen, vtype;
{
- DBT data_dbt, lo;
- DB_LOCK l;
- DB_LOCKREQ *lvp;
- DB_LOGC *logc;
- DB_LSN tmp_lsn;
- TXN_RECS tmp, *t;
- db_pgno_t cur_pgno;
- linfo_t locks;
- int i, ret, t_ret, unique;
- u_int32_t cur_fid;
-
- /*
- * There are two phases: First, we have to traverse backwards through
- * the log records gathering the list of all the pages accessed. Once
- * we have this information we can acquire all the locks we need.
- */
-
- /* Initialization */
- memset(&locks, 0, sizeof(locks));
- ret = 0;
-
- t = recs != NULL ? recs : &tmp;
- t->npages = t->nalloc = 0;
- t->array = NULL;
-
- /*
- * We've got to be in one mode or the other; else life will either
- * be excessively boring or overly exciting.
- */
- DB_ASSERT(key_lsn != NULL || max_lsn != NULL);
- DB_ASSERT(key_lsn == NULL || max_lsn == NULL);
-
- /*
- * Phase 1: Fill in the pgno array.
- */
- memset(&data_dbt, 0, sizeof(data_dbt));
- if (F_ISSET(dbenv, DB_ENV_THREAD))
- F_SET(&data_dbt, DB_DBT_REALLOC);
-
- /* Single transaction apply. */
- if (max_lsn != NULL) {
- DB_ASSERT(0); /* XXX */
- /*
- tmp_lsn = *max_lsn;
- if ((ret = __rep_apply_thread(dbenv, dtab, dtabsize,
- &data_dbt, &tmp_lsn, t)) != 0)
- goto err;
- */
- }
+ DBT vote_dbt;
+ REP_VOTE_INFO vi;
- /* In recovery. */
- if (key_lsn != NULL) {
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
- goto err;
- ret = logc->get(logc, key_lsn, &data_dbt, DB_SET);
+ memset(&vi, 0, sizeof(vi));
- /* Save lsn values, since dispatch functions can change them. */
- tmp_lsn = *key_lsn;
- ret = __db_dispatch(dbenv,
- dtab, dtabsize, &data_dbt, &tmp_lsn, DB_TXN_GETPGNOS, t);
+ vi.egen = egen;
+ vi.priority = pri;
+ vi.nsites = nsites;
+ vi.tiebreaker = tiebreaker;
- if ((t_ret = logc->close(logc, 0)) != 0 && ret == 0)
- ret = t_ret;
+ memset(&vote_dbt, 0, sizeof(vote_dbt));
+ vote_dbt.data = &vi;
+ vote_dbt.size = sizeof(vi);
- /*
- * If ret == DB_DELETED, this record refers to a temporary
- * file and there's nothing to apply.
- */
- if (ret == DB_DELETED) {
- ret = 0;
- goto out;
- } else if (ret != 0)
- goto err;
- }
+ (void)__rep_send_message(dbenv, eid, vtype, lsnp, &vote_dbt, 0);
+}
- if (t->npages == 0)
- goto out;
-
- /* Phase 2: Write lock all the pages. */
-
- /* Sort the entries in the array by page number. */
- qsort(t->array, t->npages, sizeof(LSN_PAGE), __rep_cmp_bypage);
-
- /* Count the number of unique pages. */
- cur_fid = DB_LOGFILEID_INVALID;
- cur_pgno = PGNO_INVALID;
- unique = 0;
- for (i = 0; i < t->npages; i++) {
- if (F_ISSET(&t->array[i], LSN_PAGE_NOLOCK))
- continue;
- if (t->array[i].pgdesc.pgno != cur_pgno ||
- t->array[i].fid != cur_fid) {
- cur_pgno = t->array[i].pgdesc.pgno;
- cur_fid = t->array[i].fid;
- unique++;
- }
- }
+/*
+ * __rep_elect_done
+ * Clear all election information for this site. Assumes the
+ * caller hold rep_mutex.
+ *
+ * PUBLIC: void __rep_elect_done __P((DB_ENV *, REP *));
+ */
+void
+__rep_elect_done(dbenv, rep)
+ DB_ENV *dbenv;
+ REP *rep;
+{
+ int inelect;
- if (unique == 0)
- goto out;
+#ifndef DIAGNOSTIC
+ COMPQUIET(dbenv, NULL);
+#endif
- /* Handle single lock case specially, else allocate space for locks. */
- if (unique == 1) {
- memset(&lo, 0, sizeof(lo));
- lo.data = &t->array[0].pgdesc;
- lo.size = sizeof(t->array[0].pgdesc);
- ret = dbenv->lock_get(dbenv, lid, 0, &lo, DB_LOCK_WRITE, &l);
- goto out2;
- }
+ inelect = IN_ELECTION_TALLY(rep);
+ F_CLR(rep, REP_F_EPHASE1 | REP_F_EPHASE2 | REP_F_TALLY);
+ rep->sites = 0;
+ rep->votes = 0;
+ if (inelect)
+ rep->egen++;
+#ifdef DIAGNOSTIC
+ if (FLD_ISSET(dbenv->verbose, DB_VERB_REPLICATION))
+ __db_err(dbenv, "Election done; egen %lu", (u_long)rep->egen);
+#endif
+}
- /* Multi-lock case. */
- locks.n = unique;
- if ((ret = __os_calloc(dbenv,
- unique, sizeof(DB_LOCKREQ), &locks.reqs)) != 0)
- goto err;
- if ((ret = __os_calloc(dbenv, unique, sizeof(DBT), &locks.objs)) != 0)
- goto err;
+/*
+ * __rep_grow_sites --
+ * Called to allocate more space in the election tally information.
+ * Called with the rep mutex held. We need to call the region mutex, so
+ * we need to make sure that we *never* acquire those mutexes in the
+ * opposite order.
+ *
+ * PUBLIC: int __rep_grow_sites __P((DB_ENV *dbenv, int nsites));
+ */
+int
+__rep_grow_sites(dbenv, nsites)
+ DB_ENV *dbenv;
+ int nsites;
+{
+ REGENV *renv;
+ REGINFO *infop;
+ REP *rep;
+ int nalloc, ret, *tally;
- unique = 0;
- cur_fid = DB_LOGFILEID_INVALID;
- cur_pgno = PGNO_INVALID;
- for (i = 0; i < t->npages; i++) {
- if (F_ISSET(&t->array[i], LSN_PAGE_NOLOCK))
- continue;
- if (t->array[i].pgdesc.pgno != cur_pgno ||
- t->array[i].fid != cur_fid) {
- cur_pgno = t->array[i].pgdesc.pgno;
- cur_fid = t->array[i].fid;
- locks.reqs[unique].op = DB_LOCK_GET;
- locks.reqs[unique].mode = DB_LOCK_WRITE;
- locks.reqs[unique].obj = &locks.objs[unique];
- locks.objs[unique].data = &t->array[i].pgdesc;
- locks.objs[unique].size = sizeof(t->array[i].pgdesc);
- unique++;
- }
- }
+ rep = ((DB_REP *)dbenv->rep_handle)->region;
- /* Finally, get the locks. */
- if ((ret =
- dbenv->lock_vec(dbenv, lid, 0, locks.reqs, unique, &lvp)) != 0) {
- /*
- * If we were unsuccessful, unlock any locks we acquired before
- * the error and return the original error value.
- */
- (void)__rep_unlockpages(dbenv, lid);
- }
+ /*
+ * Allocate either twice the current allocation or nsites,
+ * whichever is more.
+ */
-err:
-out: if (locks.objs != NULL)
- __os_free(dbenv, locks.objs);
- if (locks.reqs != NULL)
- __os_free(dbenv, locks.reqs);
+ nalloc = 2 * rep->asites;
+ if (nalloc < nsites)
+ nalloc = nsites;
+ infop = dbenv->reginfo;
+ renv = infop->primary;
+ MUTEX_LOCK(dbenv, &renv->mutex);
/*
- * Before we return, sort by LSN so that we apply records in the
- * right order.
+ * We allocate 2 tally regions, one for tallying VOTE1's and
+ * one for VOTE2's. Always grow them in tandem, because if we
+ * get more VOTE1's we'll always expect more VOTE2's then too.
*/
- qsort(t->array, t->npages, sizeof(LSN_PAGE), __rep_cmp_bylsn);
-
-out2: if ((ret != 0 || recs == NULL) && t->nalloc != 0) {
- __os_free(dbenv, t->array);
- t->array = NULL;
- t->npages = t->nalloc = 0;
+ if ((ret = __db_shalloc(infop->addr,
+ nalloc * sizeof(REP_VTALLY), sizeof(REP_VTALLY),
+ &tally)) == 0) {
+ if (rep->tally_off != INVALID_ROFF)
+ __db_shalloc_free(infop->addr,
+ R_ADDR(infop, rep->tally_off));
+ rep->tally_off = R_OFFSET(infop, tally);
+ if ((ret = __db_shalloc(infop->addr,
+ nalloc * sizeof(REP_VTALLY), sizeof(REP_VTALLY),
+ &tally)) == 0) {
+ /* Success */
+ if (rep->v2tally_off != INVALID_ROFF)
+ __db_shalloc_free(infop->addr,
+ R_ADDR(infop, rep->v2tally_off));
+ rep->v2tally_off = R_OFFSET(infop, tally);
+ rep->asites = nalloc;
+ rep->nsites = nsites;
+ } else {
+ /*
+ * We were unable to allocate both. So, we must
+ * free the first one and reinitialize. If
+ * v2tally_off is valid, it is from an old
+ * allocation and we are clearing it all out due
+ * to the error.
+ */
+ if (rep->v2tally_off != INVALID_ROFF)
+ __db_shalloc_free(infop->addr,
+ R_ADDR(infop, rep->v2tally_off));
+ __db_shalloc_free(infop->addr,
+ R_ADDR(infop, rep->tally_off));
+ rep->v2tally_off = rep->tally_off = INVALID_ROFF;
+ rep->asites = 0;
+ rep->nsites = 0;
+ }
}
-
- if (F_ISSET(&data_dbt, DB_DBT_REALLOC) && data_dbt.data != NULL)
- __os_ufree(dbenv, data_dbt.data);
-
+ MUTEX_UNLOCK(dbenv, &renv->mutex);
return (ret);
}
/*
- * __rep_cmp_bypage and __rep_cmp_bylsn --
- * Sort functions for qsort. "bypage" sorts first by page numbers and
- * then by the LSN. "bylsn" sorts first by the LSN, then by page numbers.
+ * __env_rep_enter --
+ *
+ * Check if we are in the middle of replication initialization and/or
+ * recovery, and if so, disallow operations. If operations are allowed,
+ * increment handle-counts, so that we do not start recovery while we
+ * are operating in the library.
+ *
+ * PUBLIC: void __env_rep_enter __P((DB_ENV *));
*/
-static int
-__rep_cmp_bypage(a, b)
- const void *a, *b;
+void
+__env_rep_enter(dbenv)
+ DB_ENV *dbenv;
{
- LSN_PAGE *ap, *bp;
-
- ap = (LSN_PAGE *)a;
- bp = (LSN_PAGE *)b;
-
- if (ap->fid < bp->fid)
- return (-1);
-
- if (ap->fid > bp->fid)
- return (1);
+ DB_REP *db_rep;
+ REP *rep;
+ int cnt;
- if (ap->pgdesc.pgno < bp->pgdesc.pgno)
- return (-1);
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return;
- if (ap->pgdesc.pgno > bp->pgdesc.pgno)
- return (1);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- if (ap->lsn.file < bp->lsn.file)
- return (-1);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ for (cnt = 0; rep->in_recovery;) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ (void)__os_sleep(dbenv, 1, 0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (++cnt % 60 == 0)
+ __db_err(dbenv,
+ "DB_ENV handle waiting %d minutes for replication recovery to complete",
+ cnt / 60);
+ }
+ rep->handle_cnt++;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+}
- if (ap->lsn.file > bp->lsn.file)
- return (1);
+/*
+ * __env_rep_exit --
+ *
+ * Decrement handle count upon routine exit.
+ *
+ * PUBLIC: void __env_rep_exit __P((DB_ENV *));
+ */
+void
+__env_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REP *rep;
- if (ap->lsn.offset < bp->lsn.offset)
- return (-1);
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return;
- if (ap->lsn.offset > bp->lsn.offset)
- return (1);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- return (0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ rep->handle_cnt--;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
-static int
-__rep_cmp_bylsn(a, b)
- const void *a, *b;
+/*
+ * __db_rep_enter --
+ * Called in replicated environments to keep track of in-use handles
+ * and prevent any concurrent operation during recovery. If checkgen is
+ * non-zero, then we verify that the dbp has the same handle as the env.
+ * If return_now is non-zero, we'll return DB_DEADLOCK immediately, else we'll
+ * sleep before returning DB_DEADLOCK.
+ *
+ * PUBLIC: int __db_rep_enter __P((DB *, int, int));
+ */
+int
+__db_rep_enter(dbp, checkgen, return_now)
+ DB *dbp;
+ int checkgen, return_now;
{
- LSN_PAGE *ap, *bp;
-
- ap = (LSN_PAGE *)a;
- bp = (LSN_PAGE *)b;
+ DB_ENV *dbenv;
+ DB_REP *db_rep;
+ REP *rep;
- if (ap->lsn.file < bp->lsn.file)
- return (-1);
+ dbenv = dbp->dbenv;
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return (0);
- if (ap->lsn.file > bp->lsn.file)
- return (1);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- if (ap->lsn.offset < bp->lsn.offset)
- return (-1);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (F_ISSET(rep, REP_F_READY)) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ if (!return_now)
+ (void)__os_sleep(dbenv, 5, 0);
+ return (DB_LOCK_DEADLOCK);
+ }
- if (ap->lsn.offset > bp->lsn.offset)
- return (1);
+ if (checkgen && dbp->timestamp != rep->timestamp) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ __db_err(dbenv, "%s %s",
+ "replication recovery unrolled committed transactions;",
+ "open DB and DBcursor handles must be closed");
+ return (DB_REP_HANDLE_DEAD);
+ }
+ rep->handle_cnt++;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
- if (ap->fid < bp->fid)
- return (-1);
+ return (0);
+}
- if (ap->fid > bp->fid)
- return (1);
+/*
+ * __db_rep_exit --
+ * Decrement handle counts.
+ *
+ * PUBLIC: void __db_rep_exit __P((DB_ENV *));
+ */
+void
+__db_rep_exit(dbenv)
+ DB_ENV *dbenv;
+{
+ DB_REP *db_rep;
+ REP *rep;
- if (ap->pgdesc.pgno < bp->pgdesc.pgno)
- return (-1);
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return;
- if (ap->pgdesc.pgno > bp->pgdesc.pgno)
- return (1);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- return (0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ rep->handle_cnt--;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
/*
- * __rep_is_client
- * Used by other subsystems to figure out if this is a replication
- * client sites.
+ * __op_rep_enter --
*
- * PUBLIC: int __rep_is_client __P((DB_ENV *));
+ * Check if we are in the middle of replication initialization and/or
+ * recovery, and if so, disallow new multi-step operations, such as
+ * transaction and memp gets. If operations are allowed,
+ * increment the op_cnt, so that we do not start recovery while we have
+ * active operations.
+ *
+ * PUBLIC: void __op_rep_enter __P((DB_ENV *));
*/
-int
-__rep_is_client(dbenv)
+void
+__op_rep_enter(dbenv)
DB_ENV *dbenv;
{
DB_REP *db_rep;
REP *rep;
- int ret;
+ int cnt;
- if ((db_rep = dbenv->rep_handle) == NULL)
- return (0);
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return;
+
+ db_rep = dbenv->rep_handle;
rep = db_rep->region;
- MUTEX_LOCK(dbenv, db_rep->mutexp);
- ret = F_ISSET(rep, REP_F_UPGRADE | REP_F_LOGSONLY);
- MUTEX_UNLOCK(dbenv, db_rep->mutexp);
- return (ret);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ for (cnt = 0; F_ISSET(rep, REP_F_READY);) {
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
+ (void)__os_sleep(dbenv, 5, 0);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (++cnt % 60 == 0)
+ __db_err(dbenv,
+ "__op_rep_enter waiting %d minutes for op count to drain",
+ cnt / 60);
+ }
+ rep->op_cnt++;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
/*
- * __rep_send_vote
- * Send this site's vote for the election.
+ * __op_rep_exit --
+ *
+ * Decrement op count upon transaction commit/abort/discard or
+ * memp_fput.
*
- * PUBLIC: int __rep_send_vote __P((DB_ENV *, DB_LSN *, int, int, int));
+ * PUBLIC: void __op_rep_exit __P((DB_ENV *));
*/
-int
-__rep_send_vote(dbenv, lsnp, nsites, pri, tiebreaker)
+void
+__op_rep_exit(dbenv)
DB_ENV *dbenv;
- DB_LSN *lsnp;
- int nsites, pri, tiebreaker;
{
- DBT vote_dbt;
- REP_VOTE_INFO vi;
+ DB_REP *db_rep;
+ REP *rep;
- memset(&vi, 0, sizeof(vi));
+ /* Check if locks have been globally turned off. */
+ if (F_ISSET(dbenv, DB_ENV_NOLOCKING))
+ return;
- vi.priority = pri;
- vi.nsites = nsites;
- vi.tiebreaker = tiebreaker;
-
- memset(&vote_dbt, 0, sizeof(vote_dbt));
- vote_dbt.data = &vi;
- vote_dbt.size = sizeof(vi);
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- return (__rep_send_message(dbenv,
- DB_EID_BROADCAST, REP_VOTE1, lsnp, &vote_dbt, 0));
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ DB_ASSERT(rep->op_cnt > 0);
+ rep->op_cnt--;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
/*
- * __rep_grow_sites --
- * Called to allocate more space in the election tally information.
- * Called with the rep mutex held. We need to call the region mutex, so
- * we need to make sure that we *never* acquire those mutexes in the
- * opposite order.
+ * __rep_get_gen --
*
- * PUBLIC: int __rep_grow_sites __P((DB_ENV *dbenv, int nsites));
+ * Get the generation number from a replicated environment.
+ *
+ * PUBLIC: void __rep_get_gen __P((DB_ENV *, u_int32_t *));
*/
-int
-__rep_grow_sites(dbenv, nsites)
+void
+__rep_get_gen(dbenv, genp)
DB_ENV *dbenv;
- int nsites;
+ u_int32_t *genp;
{
- REGENV *renv;
- REGINFO *infop;
+ DB_REP *db_rep;
REP *rep;
- int nalloc, ret, *tally;
-
- rep = ((DB_REP *)dbenv->rep_handle)->region;
- /*
- * Allocate either twice the current allocation or nsites,
- * whichever is more.
- */
-
- nalloc = 2 * rep->asites;
- if (nalloc < nsites)
- nalloc = nsites;
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
- infop = dbenv->reginfo;
- renv = infop->primary;
- MUTEX_LOCK(dbenv, &renv->mutex);
- if ((ret = __db_shalloc(infop->addr,
- sizeof(nalloc * sizeof(int)), sizeof(int), &tally)) == 0) {
- if (rep->tally_off != INVALID_ROFF)
- __db_shalloc_free(infop->addr,
- R_ADDR(infop, rep->tally_off));
- rep->asites = nalloc;
- rep->nsites = nsites;
- rep->tally_off = R_OFFSET(infop, tally);
- }
- MUTEX_UNLOCK(dbenv, &renv->mutex);
- return (ret);
+ MUTEX_LOCK(dbenv, db_rep->rep_mutexp);
+ if (rep->recover_gen > rep->gen)
+ *genp = rep->recover_gen;
+ else
+ *genp = rep->gen;
+ MUTEX_UNLOCK(dbenv, db_rep->rep_mutexp);
}
#ifdef NOTYET
@@ -726,10 +797,11 @@ __rep_send_file(dbenv, rec, eid)
if ((ret = db_create(&dbp, dbenv, 0)) != 0)
goto err;
- if ((ret = dbp->open(dbp, rec->data, NULL, DB_UNKNOWN, 0, 0)) != 0)
+ if ((ret = __db_open(
+ dbp, rec->data, NULL, DB_UNKNOWN, 0, 0, PGNO_BASE_MD)) != 0)
goto err;
- if ((ret = dbp->cursor(dbp, NULL, &dbc, 0)) != 0)
+ if ((ret = __db_cursor(dbp, NULL, &dbc, 0)) != 0)
goto err;
/*
* Force last_pgno to some value that will let us read the meta-dat
@@ -741,7 +813,7 @@ __rep_send_file(dbenv, rec, eid)
if ((ret = __db_lget(dbc, 0, pgno, DB_LOCK_READ, 0, &lk)) != 0)
goto err;
- if ((ret = mpf->get(mpf, &pgno, 0, &pagep)) != 0)
+ if ((ret = __memp_fget(mpf, &pgno, 0, &pagep)) != 0)
goto err;
if (pgno == 0)
@@ -749,10 +821,10 @@ __rep_send_file(dbenv, rec, eid)
rec_dbt.data = pagep;
rec_dbt.size = dbp->pgsize;
- if ((ret = __rep_send_message(dbenv, eid,
- REP_FILE, NULL, &rec_dbt, pgno == last_pgno)) != 0)
- goto err;
- ret = mpf->put(mpf, pagep, 0);
+ if (__rep_send_message(dbenv, eid,
+ REP_FILE, NULL, &rec_dbt, pgno == last_pgno) != 0)
+ break;
+ ret = __memp_fput(mpf, pagep, 0);
pagep = NULL;
if (ret != 0)
goto err;
@@ -764,17 +836,18 @@ __rep_send_file(dbenv, rec, eid)
err: if (LOCK_ISSET(lk) && (t_ret = __LPUT(dbc, lk)) != 0 && ret == 0)
ret = t_ret;
- if (dbc != NULL && (t_ret = dbc->c_close(dbc)) != 0 && ret == 0)
+ if (dbc != NULL && (t_ret = __db_c_close(dbc)) != 0 && ret == 0)
ret = t_ret;
- if (pagep != NULL && (t_ret = mpf->put(mpf, pagep, 0)) != 0 && ret == 0)
+ if (pagep != NULL &&
+ (t_ret = __memp_fput(mpf, pagep, 0)) != 0 && ret == 0)
ret = t_ret;
- if (dbp != NULL && (t_ret = dbp->close(dbp, 0)) != 0 && ret == 0)
+ if (dbp != NULL && (t_ret = __db_close(dbp, NULL, 0)) != 0 && ret == 0)
ret = t_ret;
return (ret);
}
#endif
-#if 0
+#ifdef DIAGNOSTIC
/*
* PUBLIC: void __rep_print_message __P((DB_ENV *, int, REP_CONTROL *, char *));
*/
@@ -796,8 +869,8 @@ __rep_print_message(dbenv, eid, rp, str)
case REP_ALL_REQ:
type = "all_req";
break;
- case REP_ELECT:
- type = "elect";
+ case REP_DUPMASTER:
+ type = "dupmaster";
break;
case REP_FILE:
type = "file";
@@ -860,8 +933,8 @@ __rep_print_message(dbenv, eid, rp, str)
type = "NOTYPE";
break;
}
- printf("%s %s: gen = %d eid %d, type %s, LSN [%u][%u]\n",
- dbenv->db_home, str, rp->gen, eid, type, rp->lsn.file,
- rp->lsn.offset);
+ __db_err(dbenv, "%s %s: gen = %lu eid %d, type %s, LSN [%lu][%lu]",
+ dbenv->db_home, str, (u_long)rp->gen,
+ eid, type, (u_long)rp->lsn.file, (u_long)rp->lsn.offset);
}
#endif
diff --git a/db/rpc_client/client.c b/db/rpc_client/client.c
index 70744f54b..f61e357ba 100644
--- a/db/rpc_client/client.c
+++ b/db/rpc_client/client.c
@@ -1,92 +1,171 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: client.c,v 1.21 2000/11/30 00:58:44 ubell Exp $";
+static const char revid[] = "$Id: client.c,v 1.54 2003/06/14 17:56:01 bostic Exp $";
#endif /* not lint */
#ifdef HAVE_RPC
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#ifdef HAVE_VXWORKS
+#include <rpcLib.h>
+#endif
#include <rpc/rpc.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#endif
-#include "db_server.h"
#include "db_int.h"
-#include "txn.h"
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/txn.h"
+
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+
+static int __dbcl_c_destroy __P((DBC *));
+static int __dbcl_txn_close __P((DB_ENV *));
/*
- * __dbclenv_server --
+ * __dbcl_envrpcserver --
* Initialize an environment's server.
*
- * PUBLIC: int __dbcl_envserver __P((DB_ENV *, char *, long, long, u_int32_t));
+ * PUBLIC: int __dbcl_envrpcserver
+ * PUBLIC: __P((DB_ENV *, void *, const char *, long, long, u_int32_t));
*/
int
-__dbcl_envserver(dbenv, host, tsec, ssec, flags)
+__dbcl_envrpcserver(dbenv, clnt, host, tsec, ssec, flags)
DB_ENV *dbenv;
- char *host;
+ void *clnt;
+ const char *host;
long tsec, ssec;
u_int32_t flags;
{
CLIENT *cl;
- __env_create_msg req;
- __env_create_reply *replyp;
struct timeval tp;
- int ret;
COMPQUIET(flags, 0);
#ifdef HAVE_VXWORKS
- if ((ret = rpcTaskInit()) != 0) {
+ if (rpcTaskInit() != 0) {
__db_err(dbenv, "Could not initialize VxWorks RPC");
return (ERROR);
}
#endif
- if ((cl =
- clnt_create(host, DB_SERVERPROG, DB_SERVERVERS, "tcp")) == NULL) {
- __db_err(dbenv, clnt_spcreateerror(host));
- return (DB_NOSERVER);
- }
- dbenv->cl_handle = cl;
-
- if (tsec != 0) {
- tp.tv_sec = tsec;
- tp.tv_usec = 0;
- (void)clnt_control(cl, CLSET_TIMEOUT, (char *)&tp);
+ if (RPC_ON(dbenv)) {
+ __db_err(dbenv, "Already set an RPC handle");
+ return (EINVAL);
}
-
- req.timeout = ssec;
/*
- * CALL THE SERVER
+ * Only create the client and set its timeout if the user
+ * did not pass us a client structure to begin with.
*/
- if ((replyp = __db_env_create_1(&req, cl)) == NULL) {
- __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
- return (DB_NOSERVER);
+ if (clnt == NULL) {
+ if ((cl = clnt_create((char *)host, DB_RPC_SERVERPROG,
+ DB_RPC_SERVERVERS, "tcp")) == NULL) {
+ __db_err(dbenv, clnt_spcreateerror((char *)host));
+ return (DB_NOSERVER);
+ }
+ if (tsec != 0) {
+ tp.tv_sec = tsec;
+ tp.tv_usec = 0;
+ (void)clnt_control(cl, CLSET_TIMEOUT, (char *)&tp);
+ }
+ } else {
+ cl = (CLIENT *)clnt;
+ F_SET(dbenv, DB_ENV_RPCCLIENT_GIVEN);
}
+ dbenv->cl_handle = cl;
- /*
- * Process reply and free up our space from request
- * SUCCESS: Store ID from server.
- */
- if ((ret = replyp->status) != 0)
+ return (__dbcl_env_create(dbenv, ssec));
+}
+
+/*
+ * __dbcl_env_close_wrap --
+ * Wrapper function for DB_ENV->close function for clients.
+ * We need a wrapper function to deal with the case where we
+ * either don't call dbenv->open or close gets an error.
+ * We need to release the handle no matter what.
+ *
+ * PUBLIC: int __dbcl_env_close_wrap
+ * PUBLIC: __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbcl_env_close_wrap(dbenv, flags)
+ DB_ENV * dbenv;
+ u_int32_t flags;
+{
+ int ret, t_ret;
+
+ ret = __dbcl_env_close(dbenv, flags);
+ t_ret = __dbcl_refresh(dbenv);
+ if (ret == 0 && t_ret != 0)
+ ret = t_ret;
+ return (ret);
+}
+
+/*
+ * __dbcl_env_open_wrap --
+ * Wrapper function for DB_ENV->open function for clients.
+ * We need a wrapper function to deal with DB_USE_ENVIRON* flags
+ * and we don't want to complicate the generated code for env_open.
+ *
+ * PUBLIC: int __dbcl_env_open_wrap
+ * PUBLIC: __P((DB_ENV *, const char *, u_int32_t, int));
+ */
+int
+__dbcl_env_open_wrap(dbenv, home, flags, mode)
+ DB_ENV * dbenv;
+ const char * home;
+ u_int32_t flags;
+ int mode;
+{
+ int ret;
+
+ if (LF_ISSET(DB_THREAD)) {
+ __db_err(dbenv, "DB_THREAD not allowed on RPC clients");
+ return (EINVAL);
+ }
+ if ((ret = __db_home(dbenv, home, flags)) != 0)
return (ret);
+ return (__dbcl_env_open(dbenv, dbenv->db_home, flags, mode));
+}
- dbenv->cl_id = replyp->envcl_id;
- return (0);
+/*
+ * __dbcl_db_open_wrap --
+ * Wrapper function for DB->open function for clients.
+ * We need a wrapper function to error on DB_THREAD flag.
+ * and we don't want to complicate the generated code.
+ *
+ * PUBLIC: int __dbcl_db_open_wrap
+ * PUBLIC: __P((DB *, DB_TXN *, const char *, const char *,
+ * PUBLIC: DBTYPE, u_int32_t, int));
+ */
+int
+__dbcl_db_open_wrap(dbp, txnp, name, subdb, type, flags, mode)
+ DB * dbp;
+ DB_TXN * txnp;
+ const char * name;
+ const char * subdb;
+ DBTYPE type;
+ u_int32_t flags;
+ int mode;
+{
+ if (LF_ISSET(DB_THREAD)) {
+ __db_err(dbp->dbenv, "DB_THREAD not allowed on RPC clients");
+ return (EINVAL);
+ }
+ return (__dbcl_db_open(dbp, txnp, name, subdb, type, flags, mode));
}
/*
@@ -114,17 +193,50 @@ __dbcl_refresh(dbenv)
ret = __dbcl_txn_close(dbenv);
dbenv->tx_handle = NULL;
}
- if (cl != NULL)
+ if (!F_ISSET(dbenv, DB_ENV_RPCCLIENT_GIVEN) && cl != NULL)
clnt_destroy(cl);
dbenv->cl_handle = NULL;
+ if (dbenv->db_home != NULL) {
+ __os_free(dbenv, dbenv->db_home);
+ dbenv->db_home = NULL;
+ }
+ return (ret);
+}
+
+/*
+ * __dbcl_retcopy --
+ * Copy the returned data into the user's DBT, handling allocation flags,
+ * but not DB_DBT_PARTIAL.
+ *
+ * PUBLIC: int __dbcl_retcopy __P((DB_ENV *, DBT *,
+ * PUBLIC: void *, u_int32_t, void **, u_int32_t *));
+ */
+int
+__dbcl_retcopy(dbenv, dbt, data, len, memp, memsize)
+ DB_ENV *dbenv;
+ DBT *dbt;
+ void *data;
+ u_int32_t len;
+ void **memp;
+ u_int32_t *memsize;
+{
+ int ret;
+ u_int32_t orig_flags;
+
+ /*
+ * The RPC server handles DB_DBT_PARTIAL, so we mask it out here to
+ * avoid the handling of partials in __db_retcopy.
+ */
+ orig_flags = dbt->flags;
+ F_CLR(dbt, DB_DBT_PARTIAL);
+ ret = __db_retcopy(dbenv, dbt, data, len, memp, memsize);
+ dbt->flags = orig_flags;
return (ret);
}
/*
* __dbcl_txn_close --
* Clean up an environment's transactions.
- *
- * PUBLIC: int __dbcl_txn_close __P((DB_ENV *));
*/
int
__dbcl_txn_close(dbenv)
@@ -147,7 +259,7 @@ __dbcl_txn_close(dbenv)
while ((txnp = TAILQ_FIRST(&tmgrp->txn_chain)) != NULL)
__dbcl_txn_end(txnp);
- __os_free(tmgrp, sizeof(*tmgrp));
+ __os_free(dbenv, tmgrp);
return (ret);
}
@@ -187,18 +299,57 @@ __dbcl_txn_end(txnp)
if (txnp->parent != NULL)
TAILQ_REMOVE(&txnp->parent->kids, txnp, klinks);
TAILQ_REMOVE(&mgr->txn_chain, txnp, links);
- __os_free(txnp, sizeof(*txnp));
+ __os_free(dbenv, txnp);
+}
+
+/*
+ * __dbcl_txn_setup --
+ * Setup a client transaction structure.
+ *
+ * PUBLIC: void __dbcl_txn_setup __P((DB_ENV *, DB_TXN *, DB_TXN *, u_int32_t));
+ */
+void
+__dbcl_txn_setup(dbenv, txn, parent, id)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ DB_TXN *parent;
+ u_int32_t id;
+{
+ txn->mgrp = dbenv->tx_handle;
+ txn->parent = parent;
+ txn->txnid = id;
+
+ /*
+ * XXX
+ * In DB library the txn_chain is protected by the mgrp->mutexp.
+ * However, that mutex is implemented in the environments shared
+ * memory region. The client library does not support all of the
+ * region - that just get forwarded to the server. Therefore,
+ * the chain is unprotected here, but properly protected on the
+ * server.
+ */
+ TAILQ_INSERT_TAIL(&txn->mgrp->txn_chain, txn, links);
+
+ TAILQ_INIT(&txn->kids);
- return;
+ if (parent != NULL)
+ TAILQ_INSERT_HEAD(&parent->kids, txn, klinks);
+
+ txn->abort = __dbcl_txn_abort;
+ txn->commit = __dbcl_txn_commit;
+ txn->discard = __dbcl_txn_discard;
+ txn->id = __txn_id;
+ txn->prepare = __dbcl_txn_prepare;
+ txn->set_timeout = __dbcl_txn_timeout;
+
+ txn->flags = TXN_MALLOC;
}
/*
* __dbcl_c_destroy --
* Destroy a cursor.
- *
- * PUBLIC: int __dbcl_c_destroy __P((DBC *));
*/
-int
+static int
__dbcl_c_destroy(dbc)
DBC *dbc;
{
@@ -207,7 +358,14 @@ __dbcl_c_destroy(dbc)
dbp = dbc->dbp;
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
- __os_free(dbc, sizeof(*dbc));
+ /* Discard any memory used to store returned data. */
+ if (dbc->my_rskey.data != NULL)
+ __os_free(dbc->dbp->dbenv, dbc->my_rskey.data);
+ if (dbc->my_rkey.data != NULL)
+ __os_free(dbc->dbp->dbenv, dbc->my_rkey.data);
+ if (dbc->my_rdata.data != NULL)
+ __os_free(dbc->dbp->dbenv, dbc->my_rdata.data);
+ __os_free(NULL, dbc);
return (0);
}
@@ -219,24 +377,23 @@ __dbcl_c_destroy(dbc)
* PUBLIC: void __dbcl_c_refresh __P((DBC *));
*/
void
-__dbcl_c_refresh(dbcp)
- DBC *dbcp;
+__dbcl_c_refresh(dbc)
+ DBC *dbc;
{
DB *dbp;
- dbp = dbcp->dbp;
- dbcp->flags = 0;
- dbcp->cl_id = 0;
+ dbp = dbc->dbp;
+ dbc->flags = 0;
+ dbc->cl_id = 0;
/*
* If dbp->cursor fails locally, we use a local dbc so that
* we can close it. In that case, dbp will be NULL.
*/
if (dbp != NULL) {
- TAILQ_REMOVE(&dbp->active_queue, dbcp, links);
- TAILQ_INSERT_TAIL(&dbp->free_queue, dbcp, links);
+ TAILQ_REMOVE(&dbp->active_queue, dbc, links);
+ TAILQ_INSERT_TAIL(&dbp->free_queue, dbc, links);
}
- return;
}
/*
@@ -246,13 +403,13 @@ __dbcl_c_refresh(dbcp)
* PUBLIC: int __dbcl_c_setup __P((long, DB *, DBC **));
*/
int
-__dbcl_c_setup(cl_id, dbp, dbcpp)
+__dbcl_c_setup(cl_id, dbp, dbcp)
long cl_id;
DB *dbp;
- DBC **dbcpp;
+ DBC **dbcp;
{
DBC *dbc, tmpdbc;
- int ret, t_ret;
+ int ret;
if ((dbc = TAILQ_FIRST(&dbp->free_queue)) != NULL)
TAILQ_REMOVE(&dbp->free_queue, dbc, links);
@@ -260,12 +417,12 @@ __dbcl_c_setup(cl_id, dbp, dbcpp)
if ((ret =
__os_calloc(dbp->dbenv, 1, sizeof(DBC), &dbc)) != 0) {
/*
- * If we die here, set up a tmp dbc to call the
- * server to shut down that cursor.
- */
+ * If we die here, set up a tmp dbc to call the
+ * server to shut down that cursor.
+ */
tmpdbc.dbp = NULL;
tmpdbc.cl_id = cl_id;
- t_ret = __dbcl_dbc_close(&tmpdbc);
+ (void)__dbcl_dbc_close(&tmpdbc);
return (ret);
}
dbc->c_close = __dbcl_dbc_close;
@@ -273,62 +430,14 @@ __dbcl_c_setup(cl_id, dbp, dbcpp)
dbc->c_del = __dbcl_dbc_del;
dbc->c_dup = __dbcl_dbc_dup;
dbc->c_get = __dbcl_dbc_get;
+ dbc->c_pget = __dbcl_dbc_pget;
dbc->c_put = __dbcl_dbc_put;
dbc->c_am_destroy = __dbcl_c_destroy;
}
dbc->cl_id = cl_id;
dbc->dbp = dbp;
TAILQ_INSERT_TAIL(&dbp->active_queue, dbc, links);
- *dbcpp = dbc;
- return (0);
-}
-
-/*
- * __dbcl_retcopy --
- * Copy the returned data into the user's DBT, handling special flags
- * as they apply to a client. Modeled after __db_retcopy().
- *
- * PUBLIC: int __dbcl_retcopy __P((DB_ENV *, DBT *, void *, u_int32_t));
- */
-int
-__dbcl_retcopy(dbenv, dbt, data, len)
- DB_ENV *dbenv;
- DBT *dbt;
- void *data;
- u_int32_t len;
-{
- int ret;
-
- /*
- * No need to handle DB_DBT_PARTIAL here, server already did.
- */
- dbt->size = len;
-
- /*
- * Allocate memory to be owned by the application: DB_DBT_MALLOC
- * and DB_DBT_REALLOC. Always allocate even if we're copying 0 bytes.
- * Or use memory specified by application: DB_DBT_USERMEM.
- */
- if (F_ISSET(dbt, DB_DBT_MALLOC)) {
- if ((ret = __os_malloc(dbenv, len, NULL, &dbt->data)) != 0)
- return (ret);
- } else if (F_ISSET(dbt, DB_DBT_REALLOC)) {
- if ((ret = __os_realloc(dbenv, len, NULL, &dbt->data)) != 0)
- return (ret);
- } else if (F_ISSET(dbt, DB_DBT_USERMEM)) {
- if (len != 0 && (dbt->data == NULL || dbt->ulen < len))
- return (ENOMEM);
- } else {
- /*
- * If no user flags, then set the DBT to point to the
- * returned data pointer and return.
- */
- dbt->data = data;
- return (0);
- }
-
- if (len != 0)
- memcpy(dbt->data, data, len);
+ *dbcp = dbc;
return (0);
}
@@ -363,9 +472,16 @@ __dbcl_dbclose_common(dbp)
TAILQ_INIT(&dbp->free_queue);
TAILQ_INIT(&dbp->active_queue);
+ /* Discard any memory used to store returned data. */
+ if (dbp->my_rskey.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rskey.data);
+ if (dbp->my_rkey.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rkey.data);
+ if (dbp->my_rdata.data != NULL)
+ __os_free(dbp->dbenv, dbp->my_rdata.data);
memset(dbp, CLEAR_BYTE, sizeof(*dbp));
- __os_free(dbp, sizeof(*dbp));
+ __os_free(NULL, dbp);
return (ret);
}
#endif /* HAVE_RPC */
diff --git a/db/rpc_client/db_server_clnt.c b/db/rpc_client/db_server_clnt.c
index 680a26144..9b2ec6413 100644
--- a/db/rpc_client/db_server_clnt.c
+++ b/db/rpc_client/db_server_clnt.c
@@ -1,17 +1,42 @@
#include "db_config.h"
+
#ifdef HAVE_RPC
/*
* Please do not edit this file.
* It was generated using rpcgen.
*/
-#include "db_server.h"
+#ifndef NO_SYSTEM_INCLUDES
+#include <rpc/rpc.h>
+
+#include <strings.h>
+#endif
+
+#include "db_int.h"
+#include "dbinc_auto/db_server.h"
/* Default timeout can be changed using clnt_control() */
static struct timeval TIMEOUT = { 25, 0 };
+__env_get_cachesize_reply *
+__db_env_get_cachesize_4002(argp, clnt)
+ __env_get_cachesize_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_get_cachesize_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_get_cachesize,
+ (xdrproc_t) xdr___env_get_cachesize_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_get_cachesize_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__env_cachesize_reply *
-__db_env_cachesize_1(argp, clnt)
+__db_env_cachesize_4002(argp, clnt)
__env_cachesize_msg *argp;
CLIENT *clnt;
{
@@ -28,7 +53,7 @@ __db_env_cachesize_1(argp, clnt)
}
__env_close_reply *
-__db_env_close_1(argp, clnt)
+__db_env_close_4002(argp, clnt)
__env_close_msg *argp;
CLIENT *clnt;
{
@@ -45,7 +70,7 @@ __db_env_close_1(argp, clnt)
}
__env_create_reply *
-__db_env_create_1(argp, clnt)
+__db_env_create_4002(argp, clnt)
__env_create_msg *argp;
CLIENT *clnt;
{
@@ -61,8 +86,93 @@ __db_env_create_1(argp, clnt)
return (&clnt_res);
}
+__env_dbremove_reply *
+__db_env_dbremove_4002(argp, clnt)
+ __env_dbremove_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_dbremove_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_dbremove,
+ (xdrproc_t) xdr___env_dbremove_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_dbremove_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__env_dbrename_reply *
+__db_env_dbrename_4002(argp, clnt)
+ __env_dbrename_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_dbrename_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_dbrename,
+ (xdrproc_t) xdr___env_dbrename_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_dbrename_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__env_get_encrypt_flags_reply *
+__db_env_get_encrypt_flags_4002(argp, clnt)
+ __env_get_encrypt_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_get_encrypt_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_get_encrypt_flags,
+ (xdrproc_t) xdr___env_get_encrypt_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_get_encrypt_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__env_encrypt_reply *
+__db_env_encrypt_4002(argp, clnt)
+ __env_encrypt_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_encrypt_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_encrypt,
+ (xdrproc_t) xdr___env_encrypt_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_encrypt_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__env_get_flags_reply *
+__db_env_get_flags_4002(argp, clnt)
+ __env_get_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_get_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_get_flags,
+ (xdrproc_t) xdr___env_get_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_get_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__env_flags_reply *
-__db_env_flags_1(argp, clnt)
+__db_env_flags_4002(argp, clnt)
__env_flags_msg *argp;
CLIENT *clnt;
{
@@ -78,8 +188,42 @@ __db_env_flags_1(argp, clnt)
return (&clnt_res);
}
+__env_get_home_reply *
+__db_env_get_home_4002(argp, clnt)
+ __env_get_home_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_get_home_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_get_home,
+ (xdrproc_t) xdr___env_get_home_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_get_home_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__env_get_open_flags_reply *
+__db_env_get_open_flags_4002(argp, clnt)
+ __env_get_open_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __env_get_open_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_env_get_open_flags,
+ (xdrproc_t) xdr___env_get_open_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___env_get_open_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__env_open_reply *
-__db_env_open_1(argp, clnt)
+__db_env_open_4002(argp, clnt)
__env_open_msg *argp;
CLIENT *clnt;
{
@@ -96,7 +240,7 @@ __db_env_open_1(argp, clnt)
}
__env_remove_reply *
-__db_env_remove_1(argp, clnt)
+__db_env_remove_4002(argp, clnt)
__env_remove_msg *argp;
CLIENT *clnt;
{
@@ -113,7 +257,7 @@ __db_env_remove_1(argp, clnt)
}
__txn_abort_reply *
-__db_txn_abort_1(argp, clnt)
+__db_txn_abort_4002(argp, clnt)
__txn_abort_msg *argp;
CLIENT *clnt;
{
@@ -130,7 +274,7 @@ __db_txn_abort_1(argp, clnt)
}
__txn_begin_reply *
-__db_txn_begin_1(argp, clnt)
+__db_txn_begin_4002(argp, clnt)
__txn_begin_msg *argp;
CLIENT *clnt;
{
@@ -147,7 +291,7 @@ __db_txn_begin_1(argp, clnt)
}
__txn_commit_reply *
-__db_txn_commit_1(argp, clnt)
+__db_txn_commit_4002(argp, clnt)
__txn_commit_msg *argp;
CLIENT *clnt;
{
@@ -163,8 +307,76 @@ __db_txn_commit_1(argp, clnt)
return (&clnt_res);
}
+__txn_discard_reply *
+__db_txn_discard_4002(argp, clnt)
+ __txn_discard_msg *argp;
+ CLIENT *clnt;
+{
+ static __txn_discard_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_txn_discard,
+ (xdrproc_t) xdr___txn_discard_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___txn_discard_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__txn_prepare_reply *
+__db_txn_prepare_4002(argp, clnt)
+ __txn_prepare_msg *argp;
+ CLIENT *clnt;
+{
+ static __txn_prepare_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_txn_prepare,
+ (xdrproc_t) xdr___txn_prepare_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___txn_prepare_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__txn_recover_reply *
+__db_txn_recover_4002(argp, clnt)
+ __txn_recover_msg *argp;
+ CLIENT *clnt;
+{
+ static __txn_recover_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_txn_recover,
+ (xdrproc_t) xdr___txn_recover_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___txn_recover_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__db_associate_reply *
+__db_db_associate_4002(argp, clnt)
+ __db_associate_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_associate_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_associate,
+ (xdrproc_t) xdr___db_associate_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_associate_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_bt_maxkey_reply *
-__db_db_bt_maxkey_1(argp, clnt)
+__db_db_bt_maxkey_4002(argp, clnt)
__db_bt_maxkey_msg *argp;
CLIENT *clnt;
{
@@ -180,8 +392,25 @@ __db_db_bt_maxkey_1(argp, clnt)
return (&clnt_res);
}
+__db_get_bt_minkey_reply *
+__db_db_get_bt_minkey_4002(argp, clnt)
+ __db_get_bt_minkey_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_bt_minkey_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_bt_minkey,
+ (xdrproc_t) xdr___db_get_bt_minkey_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_bt_minkey_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_bt_minkey_reply *
-__db_db_bt_minkey_1(argp, clnt)
+__db_db_bt_minkey_4002(argp, clnt)
__db_bt_minkey_msg *argp;
CLIENT *clnt;
{
@@ -198,7 +427,7 @@ __db_db_bt_minkey_1(argp, clnt)
}
__db_close_reply *
-__db_db_close_1(argp, clnt)
+__db_db_close_4002(argp, clnt)
__db_close_msg *argp;
CLIENT *clnt;
{
@@ -215,7 +444,7 @@ __db_db_close_1(argp, clnt)
}
__db_create_reply *
-__db_db_create_1(argp, clnt)
+__db_db_create_4002(argp, clnt)
__db_create_msg *argp;
CLIENT *clnt;
{
@@ -232,7 +461,7 @@ __db_db_create_1(argp, clnt)
}
__db_del_reply *
-__db_db_del_1(argp, clnt)
+__db_db_del_4002(argp, clnt)
__db_del_msg *argp;
CLIENT *clnt;
{
@@ -248,8 +477,59 @@ __db_db_del_1(argp, clnt)
return (&clnt_res);
}
+__db_get_encrypt_flags_reply *
+__db_db_get_encrypt_flags_4002(argp, clnt)
+ __db_get_encrypt_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_encrypt_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_encrypt_flags,
+ (xdrproc_t) xdr___db_get_encrypt_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_encrypt_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__db_encrypt_reply *
+__db_db_encrypt_4002(argp, clnt)
+ __db_encrypt_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_encrypt_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_encrypt,
+ (xdrproc_t) xdr___db_encrypt_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_encrypt_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__db_get_extentsize_reply *
+__db_db_get_extentsize_4002(argp, clnt)
+ __db_get_extentsize_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_extentsize_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_extentsize,
+ (xdrproc_t) xdr___db_get_extentsize_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_extentsize_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_extentsize_reply *
-__db_db_extentsize_1(argp, clnt)
+__db_db_extentsize_4002(argp, clnt)
__db_extentsize_msg *argp;
CLIENT *clnt;
{
@@ -265,8 +545,25 @@ __db_db_extentsize_1(argp, clnt)
return (&clnt_res);
}
+__db_get_flags_reply *
+__db_db_get_flags_4002(argp, clnt)
+ __db_get_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_flags,
+ (xdrproc_t) xdr___db_get_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_flags_reply *
-__db_db_flags_1(argp, clnt)
+__db_db_flags_4002(argp, clnt)
__db_flags_msg *argp;
CLIENT *clnt;
{
@@ -283,7 +580,7 @@ __db_db_flags_1(argp, clnt)
}
__db_get_reply *
-__db_db_get_1(argp, clnt)
+__db_db_get_4002(argp, clnt)
__db_get_msg *argp;
CLIENT *clnt;
{
@@ -299,8 +596,59 @@ __db_db_get_1(argp, clnt)
return (&clnt_res);
}
+__db_get_name_reply *
+__db_db_get_name_4002(argp, clnt)
+ __db_get_name_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_name_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_name,
+ (xdrproc_t) xdr___db_get_name_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_name_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__db_get_open_flags_reply *
+__db_db_get_open_flags_4002(argp, clnt)
+ __db_get_open_flags_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_open_flags_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_open_flags,
+ (xdrproc_t) xdr___db_get_open_flags_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_open_flags_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
+__db_get_h_ffactor_reply *
+__db_db_get_h_ffactor_4002(argp, clnt)
+ __db_get_h_ffactor_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_h_ffactor_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_h_ffactor,
+ (xdrproc_t) xdr___db_get_h_ffactor_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_h_ffactor_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_h_ffactor_reply *
-__db_db_h_ffactor_1(argp, clnt)
+__db_db_h_ffactor_4002(argp, clnt)
__db_h_ffactor_msg *argp;
CLIENT *clnt;
{
@@ -316,8 +664,25 @@ __db_db_h_ffactor_1(argp, clnt)
return (&clnt_res);
}
+__db_get_h_nelem_reply *
+__db_db_get_h_nelem_4002(argp, clnt)
+ __db_get_h_nelem_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_h_nelem_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_h_nelem,
+ (xdrproc_t) xdr___db_get_h_nelem_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_h_nelem_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_h_nelem_reply *
-__db_db_h_nelem_1(argp, clnt)
+__db_db_h_nelem_4002(argp, clnt)
__db_h_nelem_msg *argp;
CLIENT *clnt;
{
@@ -334,7 +699,7 @@ __db_db_h_nelem_1(argp, clnt)
}
__db_key_range_reply *
-__db_db_key_range_1(argp, clnt)
+__db_db_key_range_4002(argp, clnt)
__db_key_range_msg *argp;
CLIENT *clnt;
{
@@ -350,8 +715,25 @@ __db_db_key_range_1(argp, clnt)
return (&clnt_res);
}
+__db_get_lorder_reply *
+__db_db_get_lorder_4002(argp, clnt)
+ __db_get_lorder_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_lorder_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_lorder,
+ (xdrproc_t) xdr___db_get_lorder_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_lorder_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_lorder_reply *
-__db_db_lorder_1(argp, clnt)
+__db_db_lorder_4002(argp, clnt)
__db_lorder_msg *argp;
CLIENT *clnt;
{
@@ -368,7 +750,7 @@ __db_db_lorder_1(argp, clnt)
}
__db_open_reply *
-__db_db_open_1(argp, clnt)
+__db_db_open_4002(argp, clnt)
__db_open_msg *argp;
CLIENT *clnt;
{
@@ -384,8 +766,25 @@ __db_db_open_1(argp, clnt)
return (&clnt_res);
}
+__db_get_pagesize_reply *
+__db_db_get_pagesize_4002(argp, clnt)
+ __db_get_pagesize_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_pagesize_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_pagesize,
+ (xdrproc_t) xdr___db_get_pagesize_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_pagesize_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_pagesize_reply *
-__db_db_pagesize_1(argp, clnt)
+__db_db_pagesize_4002(argp, clnt)
__db_pagesize_msg *argp;
CLIENT *clnt;
{
@@ -401,8 +800,25 @@ __db_db_pagesize_1(argp, clnt)
return (&clnt_res);
}
+__db_pget_reply *
+__db_db_pget_4002(argp, clnt)
+ __db_pget_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_pget_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_pget,
+ (xdrproc_t) xdr___db_pget_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_pget_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_put_reply *
-__db_db_put_1(argp, clnt)
+__db_db_put_4002(argp, clnt)
__db_put_msg *argp;
CLIENT *clnt;
{
@@ -418,8 +834,25 @@ __db_db_put_1(argp, clnt)
return (&clnt_res);
}
+__db_get_re_delim_reply *
+__db_db_get_re_delim_4002(argp, clnt)
+ __db_get_re_delim_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_re_delim_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_re_delim,
+ (xdrproc_t) xdr___db_get_re_delim_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_re_delim_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_re_delim_reply *
-__db_db_re_delim_1(argp, clnt)
+__db_db_re_delim_4002(argp, clnt)
__db_re_delim_msg *argp;
CLIENT *clnt;
{
@@ -435,8 +868,25 @@ __db_db_re_delim_1(argp, clnt)
return (&clnt_res);
}
+__db_get_re_len_reply *
+__db_db_get_re_len_4002(argp, clnt)
+ __db_get_re_len_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_re_len_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_re_len,
+ (xdrproc_t) xdr___db_get_re_len_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_re_len_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_re_len_reply *
-__db_db_re_len_1(argp, clnt)
+__db_db_re_len_4002(argp, clnt)
__db_re_len_msg *argp;
CLIENT *clnt;
{
@@ -453,7 +903,7 @@ __db_db_re_len_1(argp, clnt)
}
__db_re_pad_reply *
-__db_db_re_pad_1(argp, clnt)
+__db_db_re_pad_4002(argp, clnt)
__db_re_pad_msg *argp;
CLIENT *clnt;
{
@@ -469,8 +919,25 @@ __db_db_re_pad_1(argp, clnt)
return (&clnt_res);
}
+__db_get_re_pad_reply *
+__db_db_get_re_pad_4002(argp, clnt)
+ __db_get_re_pad_msg *argp;
+ CLIENT *clnt;
+{
+ static __db_get_re_pad_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_db_get_re_pad,
+ (xdrproc_t) xdr___db_get_re_pad_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_get_re_pad_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__db_remove_reply *
-__db_db_remove_1(argp, clnt)
+__db_db_remove_4002(argp, clnt)
__db_remove_msg *argp;
CLIENT *clnt;
{
@@ -487,7 +954,7 @@ __db_db_remove_1(argp, clnt)
}
__db_rename_reply *
-__db_db_rename_1(argp, clnt)
+__db_db_rename_4002(argp, clnt)
__db_rename_msg *argp;
CLIENT *clnt;
{
@@ -504,7 +971,7 @@ __db_db_rename_1(argp, clnt)
}
__db_stat_reply *
-__db_db_stat_1(argp, clnt)
+__db_db_stat_4002(argp, clnt)
__db_stat_msg *argp;
CLIENT *clnt;
{
@@ -520,34 +987,34 @@ __db_db_stat_1(argp, clnt)
return (&clnt_res);
}
-__db_swapped_reply *
-__db_db_swapped_1(argp, clnt)
- __db_swapped_msg *argp;
+__db_sync_reply *
+__db_db_sync_4002(argp, clnt)
+ __db_sync_msg *argp;
CLIENT *clnt;
{
- static __db_swapped_reply clnt_res;
+ static __db_sync_reply clnt_res;
memset((char *)&clnt_res, 0, sizeof (clnt_res));
- if (clnt_call(clnt, __DB_db_swapped,
- (xdrproc_t) xdr___db_swapped_msg, (caddr_t) argp,
- (xdrproc_t) xdr___db_swapped_reply, (caddr_t) &clnt_res,
+ if (clnt_call(clnt, __DB_db_sync,
+ (xdrproc_t) xdr___db_sync_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_sync_reply, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
return (&clnt_res);
}
-__db_sync_reply *
-__db_db_sync_1(argp, clnt)
- __db_sync_msg *argp;
+__db_truncate_reply *
+__db_db_truncate_4002(argp, clnt)
+ __db_truncate_msg *argp;
CLIENT *clnt;
{
- static __db_sync_reply clnt_res;
+ static __db_truncate_reply clnt_res;
memset((char *)&clnt_res, 0, sizeof (clnt_res));
- if (clnt_call(clnt, __DB_db_sync,
- (xdrproc_t) xdr___db_sync_msg, (caddr_t) argp,
- (xdrproc_t) xdr___db_sync_reply, (caddr_t) &clnt_res,
+ if (clnt_call(clnt, __DB_db_truncate,
+ (xdrproc_t) xdr___db_truncate_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___db_truncate_reply, (caddr_t) &clnt_res,
TIMEOUT) != RPC_SUCCESS) {
return (NULL);
}
@@ -555,7 +1022,7 @@ __db_db_sync_1(argp, clnt)
}
__db_cursor_reply *
-__db_db_cursor_1(argp, clnt)
+__db_db_cursor_4002(argp, clnt)
__db_cursor_msg *argp;
CLIENT *clnt;
{
@@ -572,7 +1039,7 @@ __db_db_cursor_1(argp, clnt)
}
__db_join_reply *
-__db_db_join_1(argp, clnt)
+__db_db_join_4002(argp, clnt)
__db_join_msg *argp;
CLIENT *clnt;
{
@@ -589,7 +1056,7 @@ __db_db_join_1(argp, clnt)
}
__dbc_close_reply *
-__db_dbc_close_1(argp, clnt)
+__db_dbc_close_4002(argp, clnt)
__dbc_close_msg *argp;
CLIENT *clnt;
{
@@ -606,7 +1073,7 @@ __db_dbc_close_1(argp, clnt)
}
__dbc_count_reply *
-__db_dbc_count_1(argp, clnt)
+__db_dbc_count_4002(argp, clnt)
__dbc_count_msg *argp;
CLIENT *clnt;
{
@@ -623,7 +1090,7 @@ __db_dbc_count_1(argp, clnt)
}
__dbc_del_reply *
-__db_dbc_del_1(argp, clnt)
+__db_dbc_del_4002(argp, clnt)
__dbc_del_msg *argp;
CLIENT *clnt;
{
@@ -640,7 +1107,7 @@ __db_dbc_del_1(argp, clnt)
}
__dbc_dup_reply *
-__db_dbc_dup_1(argp, clnt)
+__db_dbc_dup_4002(argp, clnt)
__dbc_dup_msg *argp;
CLIENT *clnt;
{
@@ -657,7 +1124,7 @@ __db_dbc_dup_1(argp, clnt)
}
__dbc_get_reply *
-__db_dbc_get_1(argp, clnt)
+__db_dbc_get_4002(argp, clnt)
__dbc_get_msg *argp;
CLIENT *clnt;
{
@@ -673,8 +1140,25 @@ __db_dbc_get_1(argp, clnt)
return (&clnt_res);
}
+__dbc_pget_reply *
+__db_dbc_pget_4002(argp, clnt)
+ __dbc_pget_msg *argp;
+ CLIENT *clnt;
+{
+ static __dbc_pget_reply clnt_res;
+
+ memset((char *)&clnt_res, 0, sizeof (clnt_res));
+ if (clnt_call(clnt, __DB_dbc_pget,
+ (xdrproc_t) xdr___dbc_pget_msg, (caddr_t) argp,
+ (xdrproc_t) xdr___dbc_pget_reply, (caddr_t) &clnt_res,
+ TIMEOUT) != RPC_SUCCESS) {
+ return (NULL);
+ }
+ return (&clnt_res);
+}
+
__dbc_put_reply *
-__db_dbc_put_1(argp, clnt)
+__db_dbc_put_4002(argp, clnt)
__dbc_put_msg *argp;
CLIENT *clnt;
{
diff --git a/db/rpc_client/gen_client.c b/db/rpc_client/gen_client.c
index 7cc598e7d..b27644e8e 100644
--- a/db/rpc_client/gen_client.c
+++ b/db/rpc_client/gen_client.c
@@ -4,23 +4,119 @@
#ifdef HAVE_RPC
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+
#include <rpc/rpc.h>
#include <rpc/xdr.h>
-#include <errno.h>
#include <string.h>
#endif
-#include "db_server.h"
#include "db_int.h"
-#include "db_page.h"
-#include "db_ext.h"
-#include "mp.h"
-#include "rpc_client_ext.h"
-#include "txn.h"
+#include "dbinc/txn.h"
+
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+
+static int __dbcl_noserver __P((DB_ENV *));
+
+static int
+__dbcl_noserver(dbenv)
+ DB_ENV *dbenv;
+{
+ __db_err(dbenv, "No server environment");
+ return (DB_NOSERVER);
+}
+
+static int __dbcl_rpc_illegal __P((DB_ENV *, char *));
+
+static int
+__dbcl_rpc_illegal(dbenv, name)
+ DB_ENV *dbenv;
+ char *name;
+{
+ __db_err(dbenv, "%s method unsupported in RPC environments", name);
+ return (DB_OPNOTSUP);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_alloc __P((DB_ENV *, void *(*)(size_t),
+ * PUBLIC: void *(*)(void *, size_t), void (*)(void *)));
+ */
+int
+__dbcl_env_alloc(dbenv, func0, func1, func2)
+ DB_ENV * dbenv;
+ void *(*func0) __P((size_t));
+ void *(*func1) __P((void *, size_t));
+ void (*func2) __P((void *));
+{
+ COMPQUIET(func0, 0);
+ COMPQUIET(func1, 0);
+ COMPQUIET(func2, 0);
+ return (__dbcl_rpc_illegal(dbenv, "env_alloc"));
+}
-#include "gen_client_ext.h"
+/*
+ * PUBLIC: int __dbcl_set_app_dispatch __P((DB_ENV *, int (*)(DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops)));
+ */
+int
+__dbcl_set_app_dispatch(dbenv, func0)
+ DB_ENV * dbenv;
+ int (*func0) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+{
+ COMPQUIET(func0, 0);
+ return (__dbcl_rpc_illegal(dbenv, "set_app_dispatch"));
+}
+/*
+ * PUBLIC: int __dbcl_env_get_cachesize __P((DB_ENV *, u_int32_t *,
+ * PUBLIC: u_int32_t *, int *));
+ */
+int
+__dbcl_env_get_cachesize(dbenv, gbytesp, bytesp, ncachep)
+ DB_ENV * dbenv;
+ u_int32_t * gbytesp;
+ u_int32_t * bytesp;
+ int * ncachep;
+{
+ CLIENT *cl;
+ __env_get_cachesize_msg msg;
+ __env_get_cachesize_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+
+ replyp = __db_env_get_cachesize_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (gbytesp != NULL)
+ *gbytesp = replyp->gbytes;
+ if (bytesp != NULL)
+ *bytesp = replyp->bytes;
+ if (ncachep != NULL)
+ *ncachep = replyp->ncache;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_get_cachesize_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_cachesize __P((DB_ENV *, u_int32_t, u_int32_t, int));
+ */
int
__dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)
DB_ENV * dbenv;
@@ -29,31 +125,25 @@ __dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)
int ncache;
{
CLIENT *cl;
- __env_cachesize_msg req;
- static __env_cachesize_reply *replyp = NULL;
+ __env_cachesize_msg msg;
+ __env_cachesize_reply *replyp = NULL;
int ret;
ret = 0;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___env_cachesize_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbenv == NULL)
- req.dbenvcl_id = 0;
+ msg.dbenvcl_id = 0;
else
- req.dbenvcl_id = dbenv->cl_id;
- req.gbytes = gbytes;
- req.bytes = bytes;
- req.ncache = ncache;
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.gbytes = gbytes;
+ msg.bytes = bytes;
+ msg.ncache = ncache;
- replyp = __db_env_cachesize_1(&req, cl);
+ replyp = __db_env_cachesize_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -61,58 +151,98 @@ __dbcl_env_cachesize(dbenv, gbytes, bytes, ncache)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_cachesize_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_env_close __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_env_close(dbenv, flags)
DB_ENV * dbenv;
u_int32_t flags;
{
CLIENT *cl;
- __env_close_msg req;
- static __env_close_reply *replyp = NULL;
+ __env_close_msg msg;
+ __env_close_reply *replyp = NULL;
int ret;
ret = 0;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___env_close_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbenv == NULL)
- req.dbenvcl_id = 0;
+ msg.dbenvcl_id = 0;
else
- req.dbenvcl_id = dbenv->cl_id;
- req.flags = flags;
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.flags = flags;
- replyp = __db_env_close_1(&req, cl);
+ replyp = __db_env_close_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_env_close_ret(dbenv, flags, replyp));
+ ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_close_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_env_create __P((DB_ENV *, long));
+ */
int
-__dbcl_rpc_illegal(dbenv, name)
- DB_ENV *dbenv;
- char *name;
+__dbcl_env_create(dbenv, timeout)
+ DB_ENV * dbenv;
+ long timeout;
{
- __db_err(dbenv,
- "%s method meaningless in RPC environment", name);
- return (__db_eopnotsup(dbenv));
+ CLIENT *cl;
+ __env_create_msg msg;
+ __env_create_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ msg.timeout = timeout;
+
+ replyp = __db_env_create_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_env_create_ret(dbenv, timeout, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_create_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_get_data_dirs __P((DB_ENV *, const char ***));
+ */
+int
+__dbcl_get_data_dirs(dbenv, dirpp)
+ DB_ENV * dbenv;
+ const char *** dirpp;
+{
+ COMPQUIET(dirpp, NULL);
+ return (__dbcl_rpc_illegal(dbenv, "get_data_dirs"));
}
+/*
+ * PUBLIC: int __dbcl_set_data_dir __P((DB_ENV *, const char *));
+ */
int
__dbcl_set_data_dir(dbenv, dir)
DB_ENV * dbenv;
@@ -122,6 +252,205 @@ __dbcl_set_data_dir(dbenv, dir)
return (__dbcl_rpc_illegal(dbenv, "set_data_dir"));
}
+/*
+ * PUBLIC: int __dbcl_env_dbremove __P((DB_ENV *, DB_TXN *, const char *,
+ * PUBLIC: const char *, u_int32_t));
+ */
+int
+__dbcl_env_dbremove(dbenv, txnp, name, subdb, flags)
+ DB_ENV * dbenv;
+ DB_TXN * txnp;
+ const char * name;
+ const char * subdb;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __env_dbremove_msg msg;
+ __env_dbremove_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ if (name == NULL)
+ msg.name = "";
+ else
+ msg.name = (char *)name;
+ if (subdb == NULL)
+ msg.subdb = "";
+ else
+ msg.subdb = (char *)subdb;
+ msg.flags = flags;
+
+ replyp = __db_env_dbremove_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_dbremove_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_dbrename __P((DB_ENV *, DB_TXN *, const char *,
+ * PUBLIC: const char *, const char *, u_int32_t));
+ */
+int
+__dbcl_env_dbrename(dbenv, txnp, name, subdb, newname, flags)
+ DB_ENV * dbenv;
+ DB_TXN * txnp;
+ const char * name;
+ const char * subdb;
+ const char * newname;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __env_dbrename_msg msg;
+ __env_dbrename_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ if (name == NULL)
+ msg.name = "";
+ else
+ msg.name = (char *)name;
+ if (subdb == NULL)
+ msg.subdb = "";
+ else
+ msg.subdb = (char *)subdb;
+ if (newname == NULL)
+ msg.newname = "";
+ else
+ msg.newname = (char *)newname;
+ msg.flags = flags;
+
+ replyp = __db_env_dbrename_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_dbrename_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_get_encrypt_flags __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_env_get_encrypt_flags(dbenv, flagsp)
+ DB_ENV * dbenv;
+ u_int32_t * flagsp;
+{
+ CLIENT *cl;
+ __env_get_encrypt_flags_msg msg;
+ __env_get_encrypt_flags_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+
+ replyp = __db_env_get_encrypt_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_get_encrypt_flags_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_encrypt __P((DB_ENV *, const char *, u_int32_t));
+ */
+int
+__dbcl_env_encrypt(dbenv, passwd, flags)
+ DB_ENV * dbenv;
+ const char * passwd;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __env_encrypt_msg msg;
+ __env_encrypt_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+ if (passwd == NULL)
+ msg.passwd = "";
+ else
+ msg.passwd = (char *)passwd;
+ msg.flags = flags;
+
+ replyp = __db_env_encrypt_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_encrypt_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_set_feedback __P((DB_ENV *, void (*)(DB_ENV *, int,
+ * PUBLIC: int)));
+ */
int
__dbcl_env_set_feedback(dbenv, func0)
DB_ENV * dbenv;
@@ -131,6 +460,48 @@ __dbcl_env_set_feedback(dbenv, func0)
return (__dbcl_rpc_illegal(dbenv, "env_set_feedback"));
}
+/*
+ * PUBLIC: int __dbcl_env_get_flags __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_env_get_flags(dbenv, flagsp)
+ DB_ENV * dbenv;
+ u_int32_t * flagsp;
+{
+ CLIENT *cl;
+ __env_get_flags_msg msg;
+ __env_get_flags_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+
+ replyp = __db_env_get_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_get_flags_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_flags __P((DB_ENV *, u_int32_t, int));
+ */
int
__dbcl_env_flags(dbenv, flags, onoff)
DB_ENV * dbenv;
@@ -138,30 +509,24 @@ __dbcl_env_flags(dbenv, flags, onoff)
int onoff;
{
CLIENT *cl;
- __env_flags_msg req;
- static __env_flags_reply *replyp = NULL;
+ __env_flags_msg msg;
+ __env_flags_reply *replyp = NULL;
int ret;
ret = 0;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___env_flags_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbenv == NULL)
- req.dbenvcl_id = 0;
+ msg.dbenvcl_id = 0;
else
- req.dbenvcl_id = dbenv->cl_id;
- req.flags = flags;
- req.onoff = onoff;
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.flags = flags;
+ msg.onoff = onoff;
- replyp = __db_env_flags_1(&req, cl);
+ replyp = __db_env_flags_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -169,9 +534,26 @@ __dbcl_env_flags(dbenv, flags, onoff)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_flags_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_get_lg_bsize __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lg_bsize(dbenv, bsizep)
+ DB_ENV * dbenv;
+ u_int32_t * bsizep;
+{
+ COMPQUIET(bsizep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lg_bsize"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lg_bsize __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lg_bsize(dbenv, bsize)
DB_ENV * dbenv;
@@ -181,6 +563,21 @@ __dbcl_set_lg_bsize(dbenv, bsize)
return (__dbcl_rpc_illegal(dbenv, "set_lg_bsize"));
}
+/*
+ * PUBLIC: int __dbcl_get_lg_dir __P((DB_ENV *, const char * *));
+ */
+int
+__dbcl_get_lg_dir(dbenv, dirp)
+ DB_ENV * dbenv;
+ const char * * dirp;
+{
+ COMPQUIET(dirp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lg_dir"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lg_dir __P((DB_ENV *, const char *));
+ */
int
__dbcl_set_lg_dir(dbenv, dir)
DB_ENV * dbenv;
@@ -190,6 +587,21 @@ __dbcl_set_lg_dir(dbenv, dir)
return (__dbcl_rpc_illegal(dbenv, "set_lg_dir"));
}
+/*
+ * PUBLIC: int __dbcl_get_lg_max __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lg_max(dbenv, maxp)
+ DB_ENV * dbenv;
+ u_int32_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lg_max"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lg_max __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lg_max(dbenv, max)
DB_ENV * dbenv;
@@ -199,6 +611,48 @@ __dbcl_set_lg_max(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_lg_max"));
}
+/*
+ * PUBLIC: int __dbcl_get_lg_regionmax __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lg_regionmax(dbenv, maxp)
+ DB_ENV * dbenv;
+ u_int32_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lg_regionmax"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lg_regionmax __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbcl_set_lg_regionmax(dbenv, max)
+ DB_ENV * dbenv;
+ u_int32_t max;
+{
+ COMPQUIET(max, 0);
+ return (__dbcl_rpc_illegal(dbenv, "set_lg_regionmax"));
+}
+
+/*
+ * PUBLIC: int __dbcl_get_lk_conflicts __P((DB_ENV *, const u_int8_t **,
+ * PUBLIC: int *));
+ */
+int
+__dbcl_get_lk_conflicts(dbenv, conflicts, modes)
+ DB_ENV * dbenv;
+ const u_int8_t ** conflicts;
+ int * modes;
+{
+ COMPQUIET(conflicts, 0);
+ COMPQUIET(modes, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lk_conflicts"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lk_conflict __P((DB_ENV *, u_int8_t *, int));
+ */
int
__dbcl_set_lk_conflict(dbenv, conflicts, modes)
DB_ENV * dbenv;
@@ -210,6 +664,21 @@ __dbcl_set_lk_conflict(dbenv, conflicts, modes)
return (__dbcl_rpc_illegal(dbenv, "set_lk_conflict"));
}
+/*
+ * PUBLIC: int __dbcl_get_lk_detect __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lk_detect(dbenv, detectp)
+ DB_ENV * dbenv;
+ u_int32_t * detectp;
+{
+ COMPQUIET(detectp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lk_detect"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lk_detect __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lk_detect(dbenv, detect)
DB_ENV * dbenv;
@@ -219,6 +688,9 @@ __dbcl_set_lk_detect(dbenv, detect)
return (__dbcl_rpc_illegal(dbenv, "set_lk_detect"));
}
+/*
+ * PUBLIC: int __dbcl_set_lk_max __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lk_max(dbenv, max)
DB_ENV * dbenv;
@@ -228,6 +700,21 @@ __dbcl_set_lk_max(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_lk_max"));
}
+/*
+ * PUBLIC: int __dbcl_get_lk_max_locks __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lk_max_locks(dbenv, maxp)
+ DB_ENV * dbenv;
+ u_int32_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lk_max_locks"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lk_max_locks __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lk_max_locks(dbenv, max)
DB_ENV * dbenv;
@@ -237,6 +724,21 @@ __dbcl_set_lk_max_locks(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_lk_max_locks"));
}
+/*
+ * PUBLIC: int __dbcl_get_lk_max_lockers __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lk_max_lockers(dbenv, maxp)
+ DB_ENV * dbenv;
+ u_int32_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lk_max_lockers"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lk_max_lockers __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lk_max_lockers(dbenv, max)
DB_ENV * dbenv;
@@ -246,6 +748,21 @@ __dbcl_set_lk_max_lockers(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_lk_max_lockers"));
}
+/*
+ * PUBLIC: int __dbcl_get_lk_max_objects __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_lk_max_objects(dbenv, maxp)
+ DB_ENV * dbenv;
+ u_int32_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_lk_max_objects"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_lk_max_objects __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_lk_max_objects(dbenv, max)
DB_ENV * dbenv;
@@ -255,6 +772,49 @@ __dbcl_set_lk_max_objects(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_lk_max_objects"));
}
+/*
+ * PUBLIC: int __dbcl_get_mp_maxwrite __P((DB_ENV *, int *, int *));
+ */
+int
+__dbcl_get_mp_maxwrite(dbenv, nwritep, nsleepp)
+ DB_ENV * dbenv;
+ int * nwritep;
+ int * nsleepp;
+{
+ COMPQUIET(nwritep, 0);
+ COMPQUIET(nsleepp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_mp_maxwrite"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_mp_maxwrite __P((DB_ENV *, int, int));
+ */
+int
+__dbcl_set_mp_maxwrite(dbenv, nwrite, nsleep)
+ DB_ENV * dbenv;
+ int nwrite;
+ int nsleep;
+{
+ COMPQUIET(nwrite, 0);
+ COMPQUIET(nsleep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "set_mp_maxwrite"));
+}
+
+/*
+ * PUBLIC: int __dbcl_get_mp_mmapsize __P((DB_ENV *, size_t *));
+ */
+int
+__dbcl_get_mp_mmapsize(dbenv, mmapsizep)
+ DB_ENV * dbenv;
+ size_t * mmapsizep;
+{
+ COMPQUIET(mmapsizep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_mp_mmapsize"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_mp_mmapsize __P((DB_ENV *, size_t));
+ */
int
__dbcl_set_mp_mmapsize(dbenv, mmapsize)
DB_ENV * dbenv;
@@ -264,15 +824,87 @@ __dbcl_set_mp_mmapsize(dbenv, mmapsize)
return (__dbcl_rpc_illegal(dbenv, "set_mp_mmapsize"));
}
+/*
+ * PUBLIC: int __dbcl_env_get_home __P((DB_ENV *, const char * *));
+ */
+int
+__dbcl_env_get_home(dbenv, homep)
+ DB_ENV * dbenv;
+ const char * * homep;
+{
+ CLIENT *cl;
+ __env_get_home_msg msg;
+ __env_get_home_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+
+ replyp = __db_env_get_home_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (homep != NULL)
+ *homep = replyp->home;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_get_home_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_env_get_open_flags __P((DB_ENV *, u_int32_t *));
+ */
int
-__dbcl_set_mutex_locks(dbenv, do_lock)
+__dbcl_env_get_open_flags(dbenv, flagsp)
DB_ENV * dbenv;
- int do_lock;
+ u_int32_t * flagsp;
{
- COMPQUIET(do_lock, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_mutex_locks"));
+ CLIENT *cl;
+ __env_get_open_flags_msg msg;
+ __env_get_open_flags_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+
+ replyp = __db_env_get_open_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_get_open_flags_reply, (void *)replyp);
+ return (ret);
}
+/*
+ * PUBLIC: int __dbcl_env_open __P((DB_ENV *, const char *, u_int32_t, int));
+ */
int
__dbcl_env_open(dbenv, home, flags, mode)
DB_ENV * dbenv;
@@ -281,44 +913,43 @@ __dbcl_env_open(dbenv, home, flags, mode)
int mode;
{
CLIENT *cl;
- __env_open_msg req;
- static __env_open_reply *replyp = NULL;
+ __env_open_msg msg;
+ __env_open_reply *replyp = NULL;
int ret;
ret = 0;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___env_open_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbenv == NULL)
- req.dbenvcl_id = 0;
+ msg.dbenvcl_id = 0;
else
- req.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (home == NULL)
- req.home = "";
+ msg.home = "";
else
- req.home = (char *)home;
- req.flags = flags;
- req.mode = mode;
+ msg.home = (char *)home;
+ msg.flags = flags;
+ msg.mode = mode;
- replyp = __db_env_open_1(&req, cl);
+ replyp = __db_env_open_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_env_open_ret(dbenv, home, flags, mode, replyp));
+ ret = __dbcl_env_open_ret(dbenv, home, flags, mode, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_open_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_env_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int)));
+ */
int
__dbcl_env_paniccall(dbenv, func0)
DB_ENV * dbenv;
@@ -328,15 +959,9 @@ __dbcl_env_paniccall(dbenv, func0)
return (__dbcl_rpc_illegal(dbenv, "env_paniccall"));
}
-int
-__dbcl_set_recovery_init(dbenv, func0)
- DB_ENV * dbenv;
- int (*func0) __P((DB_ENV *));
-{
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_recovery_init"));
-}
-
+/*
+ * PUBLIC: int __dbcl_env_remove __P((DB_ENV *, const char *, u_int32_t));
+ */
int
__dbcl_env_remove(dbenv, home, flags)
DB_ENV * dbenv;
@@ -344,43 +969,54 @@ __dbcl_env_remove(dbenv, home, flags)
u_int32_t flags;
{
CLIENT *cl;
- __env_remove_msg req;
- static __env_remove_reply *replyp = NULL;
+ __env_remove_msg msg;
+ __env_remove_reply *replyp = NULL;
int ret;
ret = 0;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___env_remove_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbenv == NULL)
- req.dbenvcl_id = 0;
+ msg.dbenvcl_id = 0;
else
- req.dbenvcl_id = dbenv->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (home == NULL)
- req.home = "";
+ msg.home = "";
else
- req.home = (char *)home;
- req.flags = flags;
+ msg.home = (char *)home;
+ msg.flags = flags;
- replyp = __db_env_remove_1(&req, cl);
+ replyp = __db_env_remove_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_env_remove_ret(dbenv, home, flags, replyp));
+ ret = __dbcl_env_remove_ret(dbenv, home, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___env_remove_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_get_shm_key __P((DB_ENV *, long *));
+ */
+int
+__dbcl_get_shm_key(dbenv, shm_keyp)
+ DB_ENV * dbenv;
+ long * shm_keyp;
+{
+ COMPQUIET(shm_keyp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_shm_key"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_shm_key __P((DB_ENV *, long));
+ */
int
__dbcl_set_shm_key(dbenv, shm_key)
DB_ENV * dbenv;
@@ -390,6 +1026,73 @@ __dbcl_set_shm_key(dbenv, shm_key)
return (__dbcl_rpc_illegal(dbenv, "set_shm_key"));
}
+/*
+ * PUBLIC: int __dbcl_get_tas_spins __P((DB_ENV *, u_int32_t *));
+ */
+int
+__dbcl_get_tas_spins(dbenv, tas_spinsp)
+ DB_ENV * dbenv;
+ u_int32_t * tas_spinsp;
+{
+ COMPQUIET(tas_spinsp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_tas_spins"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_tas_spins __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbcl_set_tas_spins(dbenv, tas_spins)
+ DB_ENV * dbenv;
+ u_int32_t tas_spins;
+{
+ COMPQUIET(tas_spins, 0);
+ return (__dbcl_rpc_illegal(dbenv, "set_tas_spins"));
+}
+
+/*
+ * PUBLIC: int __dbcl_get_timeout __P((DB_ENV *, u_int32_t *, u_int32_t));
+ */
+int
+__dbcl_get_timeout(dbenv, timeoutp, flags)
+ DB_ENV * dbenv;
+ u_int32_t * timeoutp;
+ u_int32_t flags;
+{
+ COMPQUIET(timeoutp, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_timeout"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_timeout __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__dbcl_set_timeout(dbenv, timeout, flags)
+ DB_ENV * dbenv;
+ u_int32_t timeout;
+ u_int32_t flags;
+{
+ COMPQUIET(timeout, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "set_timeout"));
+}
+
+/*
+ * PUBLIC: int __dbcl_get_tmp_dir __P((DB_ENV *, const char * *));
+ */
+int
+__dbcl_get_tmp_dir(dbenv, dirp)
+ DB_ENV * dbenv;
+ const char * * dirp;
+{
+ COMPQUIET(dirp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_tmp_dir"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_tmp_dir __P((DB_ENV *, const char *));
+ */
int
__dbcl_set_tmp_dir(dbenv, dir)
DB_ENV * dbenv;
@@ -399,15 +1102,21 @@ __dbcl_set_tmp_dir(dbenv, dir)
return (__dbcl_rpc_illegal(dbenv, "set_tmp_dir"));
}
+/*
+ * PUBLIC: int __dbcl_get_tx_max __P((DB_ENV *, u_int32_t *));
+ */
int
-__dbcl_set_tx_recover(dbenv, func0)
+__dbcl_get_tx_max(dbenv, maxp)
DB_ENV * dbenv;
- int (*func0) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
+ u_int32_t * maxp;
{
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "set_tx_recover"));
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_tx_max"));
}
+/*
+ * PUBLIC: int __dbcl_set_tx_max __P((DB_ENV *, u_int32_t));
+ */
int
__dbcl_set_tx_max(dbenv, max)
DB_ENV * dbenv;
@@ -417,6 +1126,21 @@ __dbcl_set_tx_max(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_tx_max"));
}
+/*
+ * PUBLIC: int __dbcl_get_tx_timestamp __P((DB_ENV *, time_t *));
+ */
+int
+__dbcl_get_tx_timestamp(dbenv, maxp)
+ DB_ENV * dbenv;
+ time_t * maxp;
+{
+ COMPQUIET(maxp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_tx_timestamp"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_tx_timestamp __P((DB_ENV *, time_t *));
+ */
int
__dbcl_set_tx_timestamp(dbenv, max)
DB_ENV * dbenv;
@@ -426,6 +1150,23 @@ __dbcl_set_tx_timestamp(dbenv, max)
return (__dbcl_rpc_illegal(dbenv, "set_tx_timestamp"));
}
+/*
+ * PUBLIC: int __dbcl_get_verbose __P((DB_ENV *, u_int32_t, int *));
+ */
+int
+__dbcl_get_verbose(dbenv, which, onoffp)
+ DB_ENV * dbenv;
+ u_int32_t which;
+ int * onoffp;
+{
+ COMPQUIET(which, 0);
+ COMPQUIET(onoffp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "get_verbose"));
+}
+
+/*
+ * PUBLIC: int __dbcl_set_verbose __P((DB_ENV *, u_int32_t, int));
+ */
int
__dbcl_set_verbose(dbenv, which, onoff)
DB_ENV * dbenv;
@@ -437,165 +1178,512 @@ __dbcl_set_verbose(dbenv, which, onoff)
return (__dbcl_rpc_illegal(dbenv, "set_verbose"));
}
+/*
+ * PUBLIC: int __dbcl_txn_abort __P((DB_TXN *));
+ */
int
__dbcl_txn_abort(txnp)
DB_TXN * txnp;
{
CLIENT *cl;
- __txn_abort_msg req;
- static __txn_abort_reply *replyp = NULL;
+ __txn_abort_msg msg;
+ __txn_abort_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = txnp->mgrp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___txn_abort_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.txnpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
+ msg.txnpcl_id = txnp->txnid;
- replyp = __db_txn_abort_1(&req, cl);
+ replyp = __db_txn_abort_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_txn_abort_ret(txnp, replyp));
+ ret = __dbcl_txn_abort_ret(txnp, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_abort_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **,
+ * PUBLIC: u_int32_t));
+ */
int
-__dbcl_txn_begin(envp, parent, txnpp, flags)
- DB_ENV * envp;
+__dbcl_txn_begin(dbenv, parent, txnpp, flags)
+ DB_ENV * dbenv;
DB_TXN * parent;
DB_TXN ** txnpp;
u_int32_t flags;
{
CLIENT *cl;
- __txn_begin_msg req;
- static __txn_begin_reply *replyp = NULL;
+ __txn_begin_msg msg;
+ __txn_begin_reply *replyp = NULL;
int ret;
ret = 0;
- if (envp == NULL || envp->cl_handle == NULL) {
- __db_err(envp, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___txn_begin_reply, (void *)replyp);
- replyp = NULL;
- }
- cl = (CLIENT *)envp->cl_handle;
+ cl = (CLIENT *)dbenv->cl_handle;
- if (envp == NULL)
- req.envpcl_id = 0;
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
else
- req.envpcl_id = envp->cl_id;
+ msg.dbenvcl_id = dbenv->cl_id;
if (parent == NULL)
- req.parentcl_id = 0;
+ msg.parentcl_id = 0;
else
- req.parentcl_id = parent->txnid;
- req.flags = flags;
+ msg.parentcl_id = parent->txnid;
+ msg.flags = flags;
- replyp = __db_txn_begin_1(&req, cl);
+ replyp = __db_txn_begin_4002(&msg, cl);
if (replyp == NULL) {
- __db_err(envp, clnt_sperror(cl, "Berkeley DB"));
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp));
+ ret = __dbcl_txn_begin_ret(dbenv, parent, txnpp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_begin_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_txn_checkpoint __P((DB_ENV *, u_int32_t, u_int32_t,
+ * PUBLIC: u_int32_t));
+ */
int
-__dbcl_txn_checkpoint(dbenv, kbyte, min)
+__dbcl_txn_checkpoint(dbenv, kbyte, min, flags)
DB_ENV * dbenv;
u_int32_t kbyte;
u_int32_t min;
+ u_int32_t flags;
{
COMPQUIET(kbyte, 0);
COMPQUIET(min, 0);
+ COMPQUIET(flags, 0);
return (__dbcl_rpc_illegal(dbenv, "txn_checkpoint"));
}
+/*
+ * PUBLIC: int __dbcl_txn_commit __P((DB_TXN *, u_int32_t));
+ */
int
__dbcl_txn_commit(txnp, flags)
DB_TXN * txnp;
u_int32_t flags;
{
CLIENT *cl;
- __txn_commit_msg req;
- static __txn_commit_reply *replyp = NULL;
+ __txn_commit_msg msg;
+ __txn_commit_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = txnp->mgrp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___txn_commit_reply, (void *)replyp);
- replyp = NULL;
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
+
+ replyp = __db_txn_commit_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = __dbcl_txn_commit_ret(txnp, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_commit_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_txn_discard __P((DB_TXN *, u_int32_t));
+ */
+int
+__dbcl_txn_discard(txnp, flags)
+ DB_TXN * txnp;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __txn_discard_msg msg;
+ __txn_discard_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = txnp->mgrp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.txnpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
- req.flags = flags;
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
- replyp = __db_txn_commit_1(&req, cl);
+ replyp = __db_txn_discard_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_txn_commit_ret(txnp, flags, replyp));
+ ret = __dbcl_txn_discard_ret(txnp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_discard_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_txn_prepare __P((DB_TXN *, u_int8_t *));
+ */
int
-__dbcl_txn_prepare(txnp)
+__dbcl_txn_prepare(txnp, gid)
DB_TXN * txnp;
+ u_int8_t * gid;
{
+ CLIENT *cl;
+ __txn_prepare_msg msg;
+ __txn_prepare_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = txnp->mgrp->dbenv;
- return (__dbcl_rpc_illegal(dbenv, "txn_prepare"));
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ memcpy(msg.gid, gid, 128);
+
+ replyp = __db_txn_prepare_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_prepare_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_txn_recover __P((DB_ENV *, DB_PREPLIST *, long, long *,
+ * PUBLIC: u_int32_t));
+ */
+int
+__dbcl_txn_recover(dbenv, preplist, count, retp, flags)
+ DB_ENV * dbenv;
+ DB_PREPLIST * preplist;
+ long count;
+ long * retp;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __txn_recover_msg msg;
+ __txn_recover_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
+ else
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.count = count;
+ msg.flags = flags;
+
+ replyp = __db_txn_recover_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___txn_recover_reply, (void *)replyp);
+ return (ret);
}
+/*
+ * PUBLIC: int __dbcl_txn_stat __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
+ */
int
-__dbcl_txn_stat(dbenv, statp, func0)
+__dbcl_txn_stat(dbenv, statp, flags)
DB_ENV * dbenv;
DB_TXN_STAT ** statp;
- void *(*func0) __P((size_t));
+ u_int32_t flags;
{
COMPQUIET(statp, 0);
- COMPQUIET(func0, 0);
+ COMPQUIET(flags, 0);
return (__dbcl_rpc_illegal(dbenv, "txn_stat"));
}
+/*
+ * PUBLIC: int __dbcl_txn_timeout __P((DB_TXN *, u_int32_t, u_int32_t));
+ */
+int
+__dbcl_txn_timeout(txnp, timeout, flags)
+ DB_TXN * txnp;
+ u_int32_t timeout;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+
+ dbenv = txnp->mgrp->dbenv;
+ COMPQUIET(timeout, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "txn_timeout"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_elect __P((DB_ENV *, int, int, u_int32_t, int *));
+ */
+int
+__dbcl_rep_elect(dbenv, nsites, pri, timeout, idp)
+ DB_ENV * dbenv;
+ int nsites;
+ int pri;
+ u_int32_t timeout;
+ int * idp;
+{
+ COMPQUIET(nsites, 0);
+ COMPQUIET(pri, 0);
+ COMPQUIET(timeout, 0);
+ COMPQUIET(idp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_elect"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_flush __P((DB_ENV *));
+ */
+int
+__dbcl_rep_flush(dbenv)
+ DB_ENV * dbenv;
+{
+ return (__dbcl_rpc_illegal(dbenv, "rep_flush"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_process_message __P((DB_ENV *, DBT *, DBT *, int *,
+ * PUBLIC: DB_LSN *));
+ */
+int
+__dbcl_rep_process_message(dbenv, rec, control, idp, ret_lsnp)
+ DB_ENV * dbenv;
+ DBT * rec;
+ DBT * control;
+ int * idp;
+ DB_LSN * ret_lsnp;
+{
+ COMPQUIET(rec, NULL);
+ COMPQUIET(control, NULL);
+ COMPQUIET(idp, 0);
+ COMPQUIET(ret_lsnp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_process_message"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_get_limit __P((DB_ENV *, u_int32_t *, u_int32_t *));
+ */
+int
+__dbcl_rep_get_limit(dbenv, mbytesp, bytesp)
+ DB_ENV * dbenv;
+ u_int32_t * mbytesp;
+ u_int32_t * bytesp;
+{
+ COMPQUIET(mbytesp, 0);
+ COMPQUIET(bytesp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_get_limit"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_set_limit __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__dbcl_rep_set_limit(dbenv, mbytes, bytes)
+ DB_ENV * dbenv;
+ u_int32_t mbytes;
+ u_int32_t bytes;
+{
+ COMPQUIET(mbytes, 0);
+ COMPQUIET(bytes, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_set_limit"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_set_request __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
+int
+__dbcl_rep_set_request(dbenv, min, max)
+ DB_ENV * dbenv;
+ u_int32_t min;
+ u_int32_t max;
+{
+ COMPQUIET(min, 0);
+ COMPQUIET(max, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_set_request"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_set_rep_transport __P((DB_ENV *, int,
+ * PUBLIC: int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)));
+ */
+int
+__dbcl_rep_set_rep_transport(dbenv, id, func0)
+ DB_ENV * dbenv;
+ int id;
+ int (*func0) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t));
+{
+ COMPQUIET(id, 0);
+ COMPQUIET(func0, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_set_rep_transport"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_start __P((DB_ENV *, DBT *, u_int32_t));
+ */
+int
+__dbcl_rep_start(dbenv, cdata, flags)
+ DB_ENV * dbenv;
+ DBT * cdata;
+ u_int32_t flags;
+{
+ COMPQUIET(cdata, NULL);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_start"));
+}
+
+/*
+ * PUBLIC: int __dbcl_rep_stat __P((DB_ENV *, DB_REP_STAT **, u_int32_t));
+ */
+int
+__dbcl_rep_stat(dbenv, statp, flags)
+ DB_ENV * dbenv;
+ DB_REP_STAT ** statp;
+ u_int32_t flags;
+{
+ COMPQUIET(statp, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "rep_stat"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_alloc __P((DB *, void *(*)(size_t), void *(*)(void *,
+ * PUBLIC: size_t), void (*)(void *)));
+ */
+int
+__dbcl_db_alloc(dbp, func0, func1, func2)
+ DB * dbp;
+ void *(*func0) __P((size_t));
+ void *(*func1) __P((void *, size_t));
+ void (*func2) __P((void *));
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(func0, 0);
+ COMPQUIET(func1, 0);
+ COMPQUIET(func2, 0);
+ return (__dbcl_rpc_illegal(dbenv, "db_alloc"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_associate __P((DB *, DB_TXN *, DB *, int (*)(DB *,
+ * PUBLIC: const DBT *, const DBT *, DBT *), u_int32_t));
+ */
+int
+__dbcl_db_associate(dbp, txnp, sdbp, func0, flags)
+ DB * dbp;
+ DB_TXN * txnp;
+ DB * sdbp;
+ int (*func0) __P((DB *, const DBT *, const DBT *, DBT *));
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __db_associate_msg msg;
+ __db_associate_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (func0 != NULL) {
+ __db_err(dbenv, "User functions not supported in RPC");
+ return (EINVAL);
+ }
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ if (sdbp == NULL)
+ msg.sdbpcl_id = 0;
+ else
+ msg.sdbpcl_id = sdbp->cl_id;
+ msg.flags = flags;
+
+ replyp = __db_db_associate_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_associate_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_bt_compare __P((DB *, int (*)(DB *, const DBT *,
+ * PUBLIC: const DBT *)));
+ */
int
__dbcl_db_bt_compare(dbp, func0)
DB * dbp;
@@ -608,80 +1696,115 @@ __dbcl_db_bt_compare(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_bt_compare"));
}
+/*
+ * PUBLIC: int __dbcl_db_bt_maxkey __P((DB *, u_int32_t));
+ */
int
__dbcl_db_bt_maxkey(dbp, maxkey)
DB * dbp;
u_int32_t maxkey;
{
CLIENT *cl;
- __db_bt_maxkey_msg req;
- static __db_bt_maxkey_reply *replyp = NULL;
+ __db_bt_maxkey_msg msg;
+ __db_bt_maxkey_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_bt_maxkey_reply, (void *)replyp);
- replyp = NULL;
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.maxkey = maxkey;
+
+ replyp = __db_db_bt_maxkey_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_bt_maxkey_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_bt_minkey __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_bt_minkey(dbp, minkeyp)
+ DB * dbp;
+ u_int32_t * minkeyp;
+{
+ CLIENT *cl;
+ __db_get_bt_minkey_msg msg;
+ __db_get_bt_minkey_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.maxkey = maxkey;
+ msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_bt_maxkey_1(&req, cl);
+ replyp = __db_db_get_bt_minkey_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
+ if (minkeyp != NULL)
+ *minkeyp = replyp->minkey;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_bt_minkey_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_bt_minkey __P((DB *, u_int32_t));
+ */
int
__dbcl_db_bt_minkey(dbp, minkey)
DB * dbp;
u_int32_t minkey;
{
CLIENT *cl;
- __db_bt_minkey_msg req;
- static __db_bt_minkey_reply *replyp = NULL;
+ __db_bt_minkey_msg msg;
+ __db_bt_minkey_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_bt_minkey_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.minkey = minkey;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.minkey = minkey;
- replyp = __db_db_bt_minkey_1(&req, cl);
+ replyp = __db_db_bt_minkey_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -689,9 +1812,15 @@ __dbcl_db_bt_minkey(dbp, minkey)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_bt_minkey_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_bt_prefix __P((DB *, size_t(*)(DB *, const DBT *,
+ * PUBLIC: const DBT *)));
+ */
int
__dbcl_db_bt_prefix(dbp, func0)
DB * dbp;
@@ -704,6 +1833,10 @@ __dbcl_db_bt_prefix(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_bt_prefix"));
}
+/*
+ * PUBLIC: int __dbcl_db_set_append_recno __P((DB *, int (*)(DB *, DBT *,
+ * PUBLIC: db_recno_t)));
+ */
int
__dbcl_db_set_append_recno(dbp, func0)
DB * dbp;
@@ -716,6 +1849,29 @@ __dbcl_db_set_append_recno(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_set_append_recno"));
}
+/*
+ * PUBLIC: int __dbcl_db_get_cachesize __P((DB *, u_int32_t *, u_int32_t *,
+ * PUBLIC: int *));
+ */
+int
+__dbcl_db_get_cachesize(dbp, gbytesp, bytesp, ncachep)
+ DB * dbp;
+ u_int32_t * gbytesp;
+ u_int32_t * bytesp;
+ int * ncachep;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(gbytesp, 0);
+ COMPQUIET(bytesp, 0);
+ COMPQUIET(ncachep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "db_get_cachesize"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_cachesize __P((DB *, u_int32_t, u_int32_t, int));
+ */
int
__dbcl_db_cachesize(dbp, gbytes, bytes, ncache)
DB * dbp;
@@ -732,48 +1888,88 @@ __dbcl_db_cachesize(dbp, gbytes, bytes, ncache)
return (__dbcl_rpc_illegal(dbenv, "db_cachesize"));
}
+/*
+ * PUBLIC: int __dbcl_db_close __P((DB *, u_int32_t));
+ */
int
__dbcl_db_close(dbp, flags)
DB * dbp;
u_int32_t flags;
{
CLIENT *cl;
- __db_close_msg req;
- static __db_close_reply *replyp = NULL;
+ __db_close_msg msg;
+ __db_close_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_close_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.flags = flags;
+
+ replyp = __db_db_close_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_db_close_ret(dbp, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_close_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_create __P((DB *, DB_ENV *, u_int32_t));
+ */
+int
+__dbcl_db_create(dbp, dbenv, flags)
+ DB * dbp;
+ DB_ENV * dbenv;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __db_create_msg msg;
+ __db_create_reply *replyp = NULL;
+ int ret;
+
+ ret = 0;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(dbenv));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbenv == NULL)
+ msg.dbenvcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.flags = flags;
+ msg.dbenvcl_id = dbenv->cl_id;
+ msg.flags = flags;
- replyp = __db_db_close_1(&req, cl);
+ replyp = __db_db_create_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_close_ret(dbp, flags, replyp));
+ ret = __dbcl_db_create_ret(dbp, dbenv, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_create_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
+ */
int
__dbcl_db_del(dbp, txnp, key, flags)
DB * dbp;
@@ -782,41 +1978,137 @@ __dbcl_db_del(dbp, txnp, key, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_del_msg req;
- static __db_del_reply *replyp = NULL;
+ __db_del_msg msg;
+ __db_del_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.flags = flags;
+
+ replyp = __db_db_del_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
xdr_free((xdrproc_t)xdr___db_del_reply, (void *)replyp);
- replyp = NULL;
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_dup_compare __P((DB *, int (*)(DB *, const DBT *,
+ * PUBLIC: const DBT *)));
+ */
+int
+__dbcl_db_dup_compare(dbp, func0)
+ DB * dbp;
+ int (*func0) __P((DB *, const DBT *, const DBT *));
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(func0, 0);
+ return (__dbcl_rpc_illegal(dbenv, "db_dup_compare"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_encrypt_flags __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_encrypt_flags(dbp, flagsp)
+ DB * dbp;
+ u_int32_t * flagsp;
+{
+ CLIENT *cl;
+ __db_get_encrypt_flags_msg msg;
+ __db_get_encrypt_flags_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_encrypt_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_encrypt_flags_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_encrypt __P((DB *, const char *, u_int32_t));
+ */
+int
+__dbcl_db_encrypt(dbp, passwd, flags)
+ DB * dbp;
+ const char * passwd;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __db_encrypt_msg msg;
+ __db_encrypt_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.dbpcl_id = dbp->cl_id;
+ if (passwd == NULL)
+ msg.passwd = "";
else
- req.txnpcl_id = txnp->txnid;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.flags = flags;
+ msg.passwd = (char *)passwd;
+ msg.flags = flags;
- replyp = __db_db_del_1(&req, cl);
+ replyp = __db_db_encrypt_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -824,41 +2116,80 @@ __dbcl_db_del(dbp, txnp, key, flags)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_encrypt_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get_extentsize __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_extentsize(dbp, extentsizep)
+ DB * dbp;
+ u_int32_t * extentsizep;
+{
+ CLIENT *cl;
+ __db_get_extentsize_msg msg;
+ __db_get_extentsize_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_extentsize_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (extentsizep != NULL)
+ *extentsizep = replyp->extentsize;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_extentsize_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_extentsize __P((DB *, u_int32_t));
+ */
int
__dbcl_db_extentsize(dbp, extentsize)
DB * dbp;
u_int32_t extentsize;
{
CLIENT *cl;
- __db_extentsize_msg req;
- static __db_extentsize_reply *replyp = NULL;
+ __db_extentsize_msg msg;
+ __db_extentsize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_extentsize_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.extentsize = extentsize;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.extentsize = extentsize;
- replyp = __db_db_extentsize_1(&req, cl);
+ replyp = __db_db_extentsize_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -866,9 +2197,14 @@ __dbcl_db_extentsize(dbp, extentsize)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_extentsize_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_fd __P((DB *, int *));
+ */
int
__dbcl_db_fd(dbp, fdp)
DB * dbp;
@@ -881,6 +2217,9 @@ __dbcl_db_fd(dbp, fdp)
return (__dbcl_rpc_illegal(dbenv, "db_fd"));
}
+/*
+ * PUBLIC: int __dbcl_db_feedback __P((DB *, void (*)(DB *, int, int)));
+ */
int
__dbcl_db_feedback(dbp, func0)
DB * dbp;
@@ -893,38 +2232,75 @@ __dbcl_db_feedback(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_feedback"));
}
+/*
+ * PUBLIC: int __dbcl_db_get_flags __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_flags(dbp, flagsp)
+ DB * dbp;
+ u_int32_t * flagsp;
+{
+ CLIENT *cl;
+ __db_get_flags_msg msg;
+ __db_get_flags_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_flags_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_flags __P((DB *, u_int32_t));
+ */
int
__dbcl_db_flags(dbp, flags)
DB * dbp;
u_int32_t flags;
{
CLIENT *cl;
- __db_flags_msg req;
- static __db_flags_reply *replyp = NULL;
+ __db_flags_msg msg;
+ __db_flags_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_flags_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.flags = flags;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.flags = flags;
- replyp = __db_db_flags_1(&req, cl);
+ replyp = __db_db_flags_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -932,9 +2308,14 @@ __dbcl_db_flags(dbp, flags)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_flags_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ */
int
__dbcl_db_get(dbp, txnp, key, data, flags)
DB * dbp;
@@ -944,88 +2325,207 @@ __dbcl_db_get(dbp, txnp, key, data, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_get_msg req;
- static __db_get_reply *replyp = NULL;
+ __db_get_msg msg;
+ __db_get_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_db_get_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp);
+out:
+ if (replyp != NULL)
xdr_free((xdrproc_t)xdr___db_get_reply, (void *)replyp);
- replyp = NULL;
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_name __P((DB *, const char * *, const char * *));
+ */
+int
+__dbcl_db_get_name(dbp, filenamep, dbnamep)
+ DB * dbp;
+ const char * * filenamep;
+ const char * * dbnamep;
+{
+ CLIENT *cl;
+ __db_get_name_msg msg;
+ __db_get_name_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_name_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = replyp->status;
+ if (filenamep != NULL)
+ *filenamep = replyp->filename;
+ if (dbnamep != NULL)
+ *dbnamep = replyp->dbname;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_name_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_open_flags __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_open_flags(dbp, flagsp)
+ DB * dbp;
+ u_int32_t * flagsp;
+{
+ CLIENT *cl;
+ __db_get_open_flags_msg msg;
+ __db_get_open_flags_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_open_flags_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (flagsp != NULL)
+ *flagsp = replyp->flags;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_open_flags_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_h_ffactor __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_h_ffactor(dbp, ffactorp)
+ DB * dbp;
+ u_int32_t * ffactorp;
+{
+ CLIENT *cl;
+ __db_get_h_ffactor_msg msg;
+ __db_get_h_ffactor_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.datadlen = data->dlen;
- req.datadoff = data->doff;
- req.dataflags = data->flags;
- req.datadata.datadata_val = data->data;
- req.datadata.datadata_len = data->size;
- req.flags = flags;
+ msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_get_1(&req, cl);
+ replyp = __db_db_get_h_ffactor_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp));
+ ret = replyp->status;
+ if (ffactorp != NULL)
+ *ffactorp = replyp->ffactor;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_h_ffactor_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_h_ffactor __P((DB *, u_int32_t));
+ */
int
__dbcl_db_h_ffactor(dbp, ffactor)
DB * dbp;
u_int32_t ffactor;
{
CLIENT *cl;
- __db_h_ffactor_msg req;
- static __db_h_ffactor_reply *replyp = NULL;
+ __db_h_ffactor_msg msg;
+ __db_h_ffactor_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_h_ffactor_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.ffactor = ffactor;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.ffactor = ffactor;
- replyp = __db_db_h_ffactor_1(&req, cl);
+ replyp = __db_db_h_ffactor_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -1033,9 +2533,15 @@ __dbcl_db_h_ffactor(dbp, ffactor)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_h_ffactor_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_h_hash __P((DB *, u_int32_t(*)(DB *, const void *,
+ * PUBLIC: u_int32_t)));
+ */
int
__dbcl_db_h_hash(dbp, func0)
DB * dbp;
@@ -1048,38 +2554,75 @@ __dbcl_db_h_hash(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_h_hash"));
}
+/*
+ * PUBLIC: int __dbcl_db_get_h_nelem __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_h_nelem(dbp, nelemp)
+ DB * dbp;
+ u_int32_t * nelemp;
+{
+ CLIENT *cl;
+ __db_get_h_nelem_msg msg;
+ __db_get_h_nelem_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_h_nelem_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (nelemp != NULL)
+ *nelemp = replyp->nelem;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_h_nelem_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_h_nelem __P((DB *, u_int32_t));
+ */
int
__dbcl_db_h_nelem(dbp, nelem)
DB * dbp;
u_int32_t nelem;
{
CLIENT *cl;
- __db_h_nelem_msg req;
- static __db_h_nelem_reply *replyp = NULL;
+ __db_h_nelem_msg msg;
+ __db_h_nelem_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_h_nelem_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.nelem = nelem;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.nelem = nelem;
- replyp = __db_db_h_nelem_1(&req, cl);
+ replyp = __db_db_h_nelem_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -1087,9 +2630,15 @@ __dbcl_db_h_nelem(dbp, nelem)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_h_nelem_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_key_range __P((DB *, DB_TXN *, DBT *, DB_KEY_RANGE *,
+ * PUBLIC: u_int32_t));
+ */
int
__dbcl_db_key_range(dbp, txnp, key, range, flags)
DB * dbp;
@@ -1099,108 +2648,136 @@ __dbcl_db_key_range(dbp, txnp, key, range, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_key_range_msg req;
- static __db_key_range_reply *replyp = NULL;
+ __db_key_range_msg msg;
+ __db_key_range_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_key_range_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.txnpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.flags = flags;
-
- replyp = __db_db_key_range_1(&req, cl);
+ msg.txnpcl_id = txnp->txnid;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.flags = flags;
+
+ replyp = __db_db_key_range_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp));
+ ret = __dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_key_range_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get_lorder __P((DB *, int *));
+ */
int
-__dbcl_db_lorder(dbp, lorder)
+__dbcl_db_get_lorder(dbp, lorderp)
DB * dbp;
- int lorder;
+ int * lorderp;
{
CLIENT *cl;
- __db_lorder_msg req;
- static __db_lorder_reply *replyp = NULL;
+ __db_get_lorder_msg msg;
+ __db_get_lorder_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_lorder_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.lorder = lorder;
+ msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_lorder_1(&req, cl);
+ replyp = __db_db_get_lorder_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
+ if (lorderp != NULL)
+ *lorderp = replyp->lorder;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_lorder_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_lorder __P((DB *, int));
+ */
int
-__dbcl_db_malloc(dbp, func0)
+__dbcl_db_lorder(dbp, lorder)
DB * dbp;
- void *(*func0) __P((size_t));
+ int lorder;
{
+ CLIENT *cl;
+ __db_lorder_msg msg;
+ __db_lorder_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_malloc"));
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.lorder = lorder;
+
+ replyp = __db_db_lorder_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_lorder_reply, (void *)replyp);
+ return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_open __P((DB *, DB_TXN *, const char *, const char *,
+ * PUBLIC: DBTYPE, u_int32_t, int));
+ */
int
-__dbcl_db_open(dbp, name, subdb, type, flags, mode)
+__dbcl_db_open(dbp, txnp, name, subdb, type, flags, mode)
DB * dbp;
+ DB_TXN * txnp;
const char * name;
const char * subdb;
DBTYPE type;
@@ -1208,84 +2785,120 @@ __dbcl_db_open(dbp, name, subdb, type, flags, mode)
int mode;
{
CLIENT *cl;
- __db_open_msg req;
- static __db_open_reply *replyp = NULL;
+ __db_open_msg msg;
+ __db_open_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_open_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
if (name == NULL)
- req.name = "";
+ msg.name = "";
else
- req.name = (char *)name;
+ msg.name = (char *)name;
if (subdb == NULL)
- req.subdb = "";
+ msg.subdb = "";
else
- req.subdb = (char *)subdb;
- req.type = type;
- req.flags = flags;
- req.mode = mode;
+ msg.subdb = (char *)subdb;
+ msg.type = type;
+ msg.flags = flags;
+ msg.mode = mode;
- replyp = __db_db_open_1(&req, cl);
+ replyp = __db_db_open_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp));
+ ret = __dbcl_db_open_ret(dbp, txnp, name, subdb, type, flags, mode, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_open_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get_pagesize __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_pagesize(dbp, pagesizep)
+ DB * dbp;
+ u_int32_t * pagesizep;
+{
+ CLIENT *cl;
+ __db_get_pagesize_msg msg;
+ __db_get_pagesize_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_pagesize_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (pagesizep != NULL)
+ *pagesizep = replyp->pagesize;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_pagesize_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_pagesize __P((DB *, u_int32_t));
+ */
int
__dbcl_db_pagesize(dbp, pagesize)
DB * dbp;
u_int32_t pagesize;
{
CLIENT *cl;
- __db_pagesize_msg req;
- static __db_pagesize_reply *replyp = NULL;
+ __db_pagesize_msg msg;
+ __db_pagesize_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_pagesize_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.pagesize = pagesize;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.pagesize = pagesize;
- replyp = __db_db_pagesize_1(&req, cl);
+ replyp = __db_db_pagesize_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -1293,9 +2906,14 @@ __dbcl_db_pagesize(dbp, pagesize)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_pagesize_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_panic __P((DB *, void (*)(DB_ENV *, int)));
+ */
int
__dbcl_db_panic(dbp, func0)
DB * dbp;
@@ -1308,6 +2926,76 @@ __dbcl_db_panic(dbp, func0)
return (__dbcl_rpc_illegal(dbenv, "db_panic"));
}
+/*
+ * PUBLIC: int __dbcl_db_pget __P((DB *, DB_TXN *, DBT *, DBT *, DBT *,
+ * PUBLIC: u_int32_t));
+ */
+int
+__dbcl_db_pget(dbp, txnp, skey, pkey, data, flags)
+ DB * dbp;
+ DB_TXN * txnp;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __db_pget_msg msg;
+ __db_pget_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
+ else
+ msg.txnpcl_id = txnp->txnid;
+ msg.skeydlen = skey->dlen;
+ msg.skeydoff = skey->doff;
+ msg.skeyulen = skey->ulen;
+ msg.skeyflags = skey->flags;
+ msg.skeydata.skeydata_val = skey->data;
+ msg.skeydata.skeydata_len = skey->size;
+ msg.pkeydlen = pkey->dlen;
+ msg.pkeydoff = pkey->doff;
+ msg.pkeyulen = pkey->ulen;
+ msg.pkeyflags = pkey->flags;
+ msg.pkeydata.pkeydata_val = pkey->data;
+ msg.pkeydata.pkeydata_len = pkey->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_db_pget_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_db_pget_ret(dbp, txnp, skey, pkey, data, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_pget_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
+ */
int
__dbcl_db_put(dbp, txnp, key, data, flags)
DB * dbp;
@@ -1317,142 +3005,203 @@ __dbcl_db_put(dbp, txnp, key, data, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_put_msg req;
- static __db_put_reply *replyp = NULL;
+ __db_put_msg msg;
+ __db_put_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_put_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.txnpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.datadlen = data->dlen;
- req.datadoff = data->doff;
- req.dataflags = data->flags;
- req.datadata.datadata_val = data->data;
- req.datadata.datadata_len = data->size;
- req.flags = flags;
-
- replyp = __db_db_put_1(&req, cl);
+ msg.txnpcl_id = txnp->txnid;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_db_put_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp));
+ ret = __dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_put_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get_re_delim __P((DB *, int *));
+ */
int
-__dbcl_db_realloc(dbp, func0)
+__dbcl_db_get_re_delim(dbp, delimp)
DB * dbp;
- void *(*func0) __P((void *, size_t));
+ int * delimp;
{
+ CLIENT *cl;
+ __db_get_re_delim_msg msg;
+ __db_get_re_delim_reply *replyp = NULL;
+ int ret;
DB_ENV *dbenv;
+ ret = 0;
dbenv = dbp->dbenv;
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "db_realloc"));
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+
+ replyp = __db_db_get_re_delim_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = replyp->status;
+ if (delimp != NULL)
+ *delimp = replyp->delim;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_re_delim_reply, (void *)replyp);
+ return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_re_delim __P((DB *, int));
+ */
int
__dbcl_db_re_delim(dbp, delim)
DB * dbp;
int delim;
{
CLIENT *cl;
- __db_re_delim_msg req;
- static __db_re_delim_reply *replyp = NULL;
+ __db_re_delim_msg msg;
+ __db_re_delim_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_re_delim_reply, (void *)replyp);
- replyp = NULL;
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.delim = delim;
+
+ replyp = __db_db_re_delim_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_re_delim_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_re_len __P((DB *, u_int32_t *));
+ */
+int
+__dbcl_db_get_re_len(dbp, lenp)
+ DB * dbp;
+ u_int32_t * lenp;
+{
+ CLIENT *cl;
+ __db_get_re_len_msg msg;
+ __db_get_re_len_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.delim = delim;
+ msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_re_delim_1(&req, cl);
+ replyp = __db_db_get_re_len_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
+ if (lenp != NULL)
+ *lenp = replyp->len;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_re_len_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_re_len __P((DB *, u_int32_t));
+ */
int
__dbcl_db_re_len(dbp, len)
DB * dbp;
u_int32_t len;
{
CLIENT *cl;
- __db_re_len_msg req;
- static __db_re_len_reply *replyp = NULL;
+ __db_re_len_msg msg;
+ __db_re_len_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_re_len_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.len = len;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.len = len;
- replyp = __db_db_re_len_1(&req, cl);
+ replyp = __db_db_re_len_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -1460,51 +3209,110 @@ __dbcl_db_re_len(dbp, len)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_re_len_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_re_pad __P((DB *, int));
+ */
int
__dbcl_db_re_pad(dbp, pad)
DB * dbp;
int pad;
{
CLIENT *cl;
- __db_re_pad_msg req;
- static __db_re_pad_reply *replyp = NULL;
+ __db_re_pad_msg msg;
+ __db_re_pad_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_re_pad_reply, (void *)replyp);
- replyp = NULL;
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbp == NULL)
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ msg.pad = pad;
+
+ replyp = __db_db_re_pad_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
}
+ ret = replyp->status;
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_re_pad_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_re_pad __P((DB *, int *));
+ */
+int
+__dbcl_db_get_re_pad(dbp, padp)
+ DB * dbp;
+ int * padp;
+{
+ CLIENT *cl;
+ __db_get_re_pad_msg msg;
+ __db_get_re_pad_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
+
+ ret = 0;
+ dbenv = dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.pad = pad;
+ msg.dbpcl_id = dbp->cl_id;
- replyp = __db_db_re_pad_1(&req, cl);
+ replyp = __db_db_get_re_pad_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
ret = replyp->status;
+ if (padp != NULL)
+ *padp = replyp->pad;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_get_re_pad_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_get_re_source __P((DB *, const char * *));
+ */
+int
+__dbcl_db_get_re_source(dbp, re_sourcep)
+ DB * dbp;
+ const char * * re_sourcep;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(re_sourcep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "db_get_re_source"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_re_source __P((DB *, const char *));
+ */
int
__dbcl_db_re_source(dbp, re_source)
DB * dbp;
@@ -1517,6 +3325,10 @@ __dbcl_db_re_source(dbp, re_source)
return (__dbcl_rpc_illegal(dbenv, "db_re_source"));
}
+/*
+ * PUBLIC: int __dbcl_db_remove __P((DB *, const char *, const char *,
+ * PUBLIC: u_int32_t));
+ */
int
__dbcl_db_remove(dbp, name, subdb, flags)
DB * dbp;
@@ -1525,50 +3337,49 @@ __dbcl_db_remove(dbp, name, subdb, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_remove_msg req;
- static __db_remove_reply *replyp = NULL;
+ __db_remove_msg msg;
+ __db_remove_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_remove_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
if (name == NULL)
- req.name = "";
+ msg.name = "";
else
- req.name = (char *)name;
+ msg.name = (char *)name;
if (subdb == NULL)
- req.subdb = "";
+ msg.subdb = "";
else
- req.subdb = (char *)subdb;
- req.flags = flags;
+ msg.subdb = (char *)subdb;
+ msg.flags = flags;
- replyp = __db_db_remove_1(&req, cl);
+ replyp = __db_db_remove_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_remove_ret(dbp, name, subdb, flags, replyp));
+ ret = __dbcl_db_remove_ret(dbp, name, subdb, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_remove_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_rename __P((DB *, const char *, const char *,
+ * PUBLIC: const char *, u_int32_t));
+ */
int
__dbcl_db_rename(dbp, name, subdb, newname, flags)
DB * dbp;
@@ -1578,132 +3389,118 @@ __dbcl_db_rename(dbp, name, subdb, newname, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_rename_msg req;
- static __db_rename_reply *replyp = NULL;
+ __db_rename_msg msg;
+ __db_rename_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_rename_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
if (name == NULL)
- req.name = "";
+ msg.name = "";
else
- req.name = (char *)name;
+ msg.name = (char *)name;
if (subdb == NULL)
- req.subdb = "";
+ msg.subdb = "";
else
- req.subdb = (char *)subdb;
+ msg.subdb = (char *)subdb;
if (newname == NULL)
- req.newname = "";
+ msg.newname = "";
else
- req.newname = (char *)newname;
- req.flags = flags;
+ msg.newname = (char *)newname;
+ msg.flags = flags;
- replyp = __db_db_rename_1(&req, cl);
+ replyp = __db_db_rename_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp));
+ ret = __dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_rename_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_stat __P((DB *, void *, u_int32_t));
+ */
int
-__dbcl_db_stat(dbp, sp, func0, flags)
+__dbcl_db_stat(dbp, sp, flags)
DB * dbp;
void * sp;
- void *(*func0) __P((size_t));
u_int32_t flags;
{
CLIENT *cl;
- __db_stat_msg req;
- static __db_stat_reply *replyp = NULL;
+ __db_stat_msg msg;
+ __db_stat_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_stat_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
- if (func0 != NULL) {
- __db_err(sp, "User functions not supported in RPC.");
- return (EINVAL);
- }
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.flags = flags;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.flags = flags;
- replyp = __db_db_stat_1(&req, cl);
+ replyp = __db_db_stat_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_stat_ret(dbp, sp, func0, flags, replyp));
+ ret = __dbcl_db_stat_ret(dbp, sp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_stat_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_sync __P((DB *, u_int32_t));
+ */
int
-__dbcl_db_swapped(dbp)
+__dbcl_db_sync(dbp, flags)
DB * dbp;
+ u_int32_t flags;
{
CLIENT *cl;
- __db_swapped_msg req;
- static __db_swapped_reply *replyp = NULL;
+ __db_sync_msg msg;
+ __db_sync_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_swapped_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
+ msg.flags = flags;
- replyp = __db_db_swapped_1(&req, cl);
+ replyp = __db_db_sync_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -1711,51 +3508,61 @@ __dbcl_db_swapped(dbp)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_sync_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_truncate __P((DB *, DB_TXN *, u_int32_t *,
+ * PUBLIC: u_int32_t));
+ */
int
-__dbcl_db_sync(dbp, flags)
+__dbcl_db_truncate(dbp, txnp, countp, flags)
DB * dbp;
+ DB_TXN * txnp;
+ u_int32_t * countp;
u_int32_t flags;
{
CLIENT *cl;
- __db_sync_msg req;
- static __db_sync_reply *replyp = NULL;
+ __db_truncate_msg msg;
+ __db_truncate_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_sync_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
+ else
+ msg.dbpcl_id = dbp->cl_id;
+ if (txnp == NULL)
+ msg.txnpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- req.flags = flags;
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
- replyp = __db_db_sync_1(&req, cl);
+ replyp = __db_db_truncate_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- ret = replyp->status;
+ ret = __dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_truncate_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_upgrade __P((DB *, const char *, u_int32_t));
+ */
int
__dbcl_db_upgrade(dbp, fname, flags)
DB * dbp;
@@ -1770,6 +3577,31 @@ __dbcl_db_upgrade(dbp, fname, flags)
return (__dbcl_rpc_illegal(dbenv, "db_upgrade"));
}
+/*
+ * PUBLIC: int __dbcl_db_verify __P((DB *, const char *, const char *, FILE *,
+ * PUBLIC: u_int32_t));
+ */
+int
+__dbcl_db_verify(dbp, fname, subdb, outfile, flags)
+ DB * dbp;
+ const char * fname;
+ const char * subdb;
+ FILE * outfile;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbp->dbenv;
+ COMPQUIET(fname, NULL);
+ COMPQUIET(subdb, NULL);
+ COMPQUIET(outfile, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "db_verify"));
+}
+
+/*
+ * PUBLIC: int __dbcl_db_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
+ */
int
__dbcl_db_cursor(dbp, txnp, dbcpp, flags)
DB * dbp;
@@ -1778,48 +3610,44 @@ __dbcl_db_cursor(dbp, txnp, dbcpp, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_cursor_msg req;
- static __db_cursor_reply *replyp = NULL;
+ __db_cursor_msg msg;
+ __db_cursor_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_cursor_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
+ msg.dbpcl_id = dbp->cl_id;
if (txnp == NULL)
- req.txnpcl_id = 0;
+ msg.txnpcl_id = 0;
else
- req.txnpcl_id = txnp->txnid;
- req.flags = flags;
+ msg.txnpcl_id = txnp->txnid;
+ msg.flags = flags;
- replyp = __db_db_cursor_1(&req, cl);
+ replyp = __db_db_cursor_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp));
+ ret = __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_cursor_reply, (void *)replyp);
return (ret);
}
-static int __dbcl_db_join_curslist __P((__db_join_curslist **, DBC **));
-static void __dbcl_db_join_cursfree __P((__db_join_curslist **));
+/*
+ * PUBLIC: int __dbcl_db_join __P((DB *, DBC **, DBC **, u_int32_t));
+ */
int
__dbcl_db_join(dbp, curs, dbcp, flags)
DB * dbp;
@@ -1828,136 +3656,90 @@ __dbcl_db_join(dbp, curs, dbcp, flags)
u_int32_t flags;
{
CLIENT *cl;
- __db_join_msg req;
- static __db_join_reply *replyp = NULL;
+ __db_join_msg msg;
+ __db_join_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
+ DBC ** cursp;
+ int cursi;
+ u_int32_t * cursq;
ret = 0;
- dbenv = NULL;
dbenv = dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___db_join_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbp == NULL)
- req.dbpcl_id = 0;
+ msg.dbpcl_id = 0;
else
- req.dbpcl_id = dbp->cl_id;
- if ((ret = __dbcl_db_join_curslist(&req.curslist, curs)) != 0)
- goto out;
- req.flags = flags;
-
- replyp = __db_db_join_1(&req, cl);
+ msg.dbpcl_id = dbp->cl_id;
+ for (cursi = 0, cursp = curs; *cursp != 0; cursi++, cursp++)
+ ;
+ msg.curs.curs_len = cursi;
+ if ((ret = __os_calloc(dbenv,
+ msg.curs.curs_len, sizeof(u_int32_t), &msg.curs.curs_val)) != 0)
+ return (ret);
+ for (cursq = msg.curs.curs_val, cursp = curs; cursi--; cursq++, cursp++)
+ *cursq = (*cursp)->cl_id;
+ msg.flags = flags;
+
+ replyp = __db_db_join_4002(&msg, cl);
+ __os_free(dbenv, msg.curs.curs_val);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- __dbcl_db_join_cursfree(&req.curslist);
- return (__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp));
-out:
- __dbcl_db_join_cursfree(&req.curslist);
- return (ret);
-}
-
-int
-__dbcl_db_join_curslist(locp, pp)
- __db_join_curslist **locp;
- DBC ** pp;
-{
- DBC ** p;
- u_int32_t *q;
- int ret;
- __db_join_curslist *nl, **nlp;
-
- *locp = NULL;
- if (pp == NULL)
- return (0);
- nlp = locp;
- for (p = pp; *p != 0; p++) {
- if ((ret = __os_malloc(NULL, sizeof(*nl), NULL, nlp)) != 0)
- goto out;
- nl = *nlp;
- nl->next = NULL;
- nl->ent.ent_val = NULL;
- nl->ent.ent_len = 0;
- if ((ret = __os_malloc(NULL, sizeof(u_int32_t), NULL, &nl->ent.ent_val)) != 0)
- goto out;
- q = (u_int32_t *)nl->ent.ent_val;
- *q = (*p)->cl_id;
- nl->ent.ent_len = sizeof(u_int32_t);
- nlp = &nl->next;
- }
- return (0);
+ ret = __dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp);
out:
- __dbcl_db_join_cursfree(locp);
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___db_join_reply, (void *)replyp);
return (ret);
}
-void
-__dbcl_db_join_cursfree(locp)
- __db_join_curslist **locp;
-{
- __db_join_curslist *nl, *nl1;
-
- if (locp == NULL)
- return;
- for (nl = *locp; nl != NULL; nl = nl1) {
- nl1 = nl->next;
- if (nl->ent.ent_val)
- __os_free(nl->ent.ent_val, nl->ent.ent_len);
- __os_free(nl, sizeof(*nl));
- }
-}
-
+/*
+ * PUBLIC: int __dbcl_dbc_close __P((DBC *));
+ */
int
__dbcl_dbc_close(dbc)
DBC * dbc;
{
CLIENT *cl;
- __dbc_close_msg req;
- static __dbc_close_reply *replyp = NULL;
+ __dbc_close_msg msg;
+ __dbc_close_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_close_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
+ msg.dbccl_id = dbc->cl_id;
- replyp = __db_dbc_close_1(&req, cl);
+ replyp = __db_dbc_close_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_dbc_close_ret(dbc, replyp));
+ ret = __dbcl_dbc_close_ret(dbc, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_close_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_count __P((DBC *, db_recno_t *, u_int32_t));
+ */
int
__dbcl_dbc_count(dbc, countp, flags)
DBC * dbc;
@@ -1965,74 +3747,65 @@ __dbcl_dbc_count(dbc, countp, flags)
u_int32_t flags;
{
CLIENT *cl;
- __dbc_count_msg req;
- static __dbc_count_reply *replyp = NULL;
+ __dbc_count_msg msg;
+ __dbc_count_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_count_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
- req.flags = flags;
+ msg.dbccl_id = dbc->cl_id;
+ msg.flags = flags;
- replyp = __db_dbc_count_1(&req, cl);
+ replyp = __db_dbc_count_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_dbc_count_ret(dbc, countp, flags, replyp));
+ ret = __dbcl_dbc_count_ret(dbc, countp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_count_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_del __P((DBC *, u_int32_t));
+ */
int
__dbcl_dbc_del(dbc, flags)
DBC * dbc;
u_int32_t flags;
{
CLIENT *cl;
- __dbc_del_msg req;
- static __dbc_del_reply *replyp = NULL;
+ __dbc_del_msg msg;
+ __dbc_del_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_del_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
- req.flags = flags;
+ msg.dbccl_id = dbc->cl_id;
+ msg.flags = flags;
- replyp = __db_dbc_del_1(&req, cl);
+ replyp = __db_dbc_del_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
@@ -2040,9 +3813,14 @@ __dbcl_dbc_del(dbc, flags)
}
ret = replyp->status;
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_del_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_dup __P((DBC *, DBC **, u_int32_t));
+ */
int
__dbcl_dbc_dup(dbc, dbcp, flags)
DBC * dbc;
@@ -2050,42 +3828,40 @@ __dbcl_dbc_dup(dbc, dbcp, flags)
u_int32_t flags;
{
CLIENT *cl;
- __dbc_dup_msg req;
- static __dbc_dup_reply *replyp = NULL;
+ __dbc_dup_msg msg;
+ __dbc_dup_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_dup_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
- req.flags = flags;
+ msg.dbccl_id = dbc->cl_id;
+ msg.flags = flags;
- replyp = __db_dbc_dup_1(&req, cl);
+ replyp = __db_dbc_dup_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp));
+ ret = __dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_dup_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_get __P((DBC *, DBT *, DBT *, u_int32_t));
+ */
int
__dbcl_dbc_get(dbc, key, data, flags)
DBC * dbc;
@@ -2094,52 +3870,113 @@ __dbcl_dbc_get(dbc, key, data, flags)
u_int32_t flags;
{
CLIENT *cl;
- __dbc_get_msg req;
- static __dbc_get_reply *replyp = NULL;
+ __dbc_get_msg msg;
+ __dbc_get_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_get_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.datadlen = data->dlen;
- req.datadoff = data->doff;
- req.dataflags = data->flags;
- req.datadata.datadata_val = data->data;
- req.datadata.datadata_len = data->size;
- req.flags = flags;
+ msg.dbccl_id = dbc->cl_id;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_dbc_get_4002(&msg, cl);
+ if (replyp == NULL) {
+ __db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
+ ret = DB_NOSERVER;
+ goto out;
+ }
+ ret = __dbcl_dbc_get_ret(dbc, key, data, flags, replyp);
+out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_get_reply, (void *)replyp);
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_dbc_pget __P((DBC *, DBT *, DBT *, DBT *, u_int32_t));
+ */
+int
+__dbcl_dbc_pget(dbc, skey, pkey, data, flags)
+ DBC * dbc;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+{
+ CLIENT *cl;
+ __dbc_pget_msg msg;
+ __dbc_pget_reply *replyp = NULL;
+ int ret;
+ DB_ENV *dbenv;
- replyp = __db_dbc_get_1(&req, cl);
+ ret = 0;
+ dbenv = dbc->dbp->dbenv;
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
+
+ cl = (CLIENT *)dbenv->cl_handle;
+
+ if (dbc == NULL)
+ msg.dbccl_id = 0;
+ else
+ msg.dbccl_id = dbc->cl_id;
+ msg.skeydlen = skey->dlen;
+ msg.skeydoff = skey->doff;
+ msg.skeyulen = skey->ulen;
+ msg.skeyflags = skey->flags;
+ msg.skeydata.skeydata_val = skey->data;
+ msg.skeydata.skeydata_len = skey->size;
+ msg.pkeydlen = pkey->dlen;
+ msg.pkeydoff = pkey->doff;
+ msg.pkeyulen = pkey->ulen;
+ msg.pkeyflags = pkey->flags;
+ msg.pkeydata.pkeydata_val = pkey->data;
+ msg.pkeydata.pkeydata_len = pkey->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_dbc_pget_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_dbc_get_ret(dbc, key, data, flags, replyp));
+ ret = __dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_pget_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_put __P((DBC *, DBT *, DBT *, u_int32_t));
+ */
int
__dbcl_dbc_put(dbc, key, data, flags)
DBC * dbc;
@@ -2148,52 +3985,52 @@ __dbcl_dbc_put(dbc, key, data, flags)
u_int32_t flags;
{
CLIENT *cl;
- __dbc_put_msg req;
- static __dbc_put_reply *replyp = NULL;
+ __dbc_put_msg msg;
+ __dbc_put_reply *replyp = NULL;
int ret;
DB_ENV *dbenv;
ret = 0;
- dbenv = NULL;
dbenv = dbc->dbp->dbenv;
- if (dbenv == NULL || dbenv->cl_handle == NULL) {
- __db_err(dbenv, "No server environment.");
- return (DB_NOSERVER);
- }
+ if (dbenv == NULL || !RPC_ON(dbenv))
+ return (__dbcl_noserver(NULL));
- if (replyp != NULL) {
- xdr_free((xdrproc_t)xdr___dbc_put_reply, (void *)replyp);
- replyp = NULL;
- }
cl = (CLIENT *)dbenv->cl_handle;
if (dbc == NULL)
- req.dbccl_id = 0;
+ msg.dbccl_id = 0;
else
- req.dbccl_id = dbc->cl_id;
- req.keydlen = key->dlen;
- req.keydoff = key->doff;
- req.keyflags = key->flags;
- req.keydata.keydata_val = key->data;
- req.keydata.keydata_len = key->size;
- req.datadlen = data->dlen;
- req.datadoff = data->doff;
- req.dataflags = data->flags;
- req.datadata.datadata_val = data->data;
- req.datadata.datadata_len = data->size;
- req.flags = flags;
-
- replyp = __db_dbc_put_1(&req, cl);
+ msg.dbccl_id = dbc->cl_id;
+ msg.keydlen = key->dlen;
+ msg.keydoff = key->doff;
+ msg.keyulen = key->ulen;
+ msg.keyflags = key->flags;
+ msg.keydata.keydata_val = key->data;
+ msg.keydata.keydata_len = key->size;
+ msg.datadlen = data->dlen;
+ msg.datadoff = data->doff;
+ msg.dataulen = data->ulen;
+ msg.dataflags = data->flags;
+ msg.datadata.datadata_val = data->data;
+ msg.datadata.datadata_len = data->size;
+ msg.flags = flags;
+
+ replyp = __db_dbc_put_4002(&msg, cl);
if (replyp == NULL) {
__db_err(dbenv, clnt_sperror(cl, "Berkeley DB"));
ret = DB_NOSERVER;
goto out;
}
- return (__dbcl_dbc_put_ret(dbc, key, data, flags, replyp));
+ ret = __dbcl_dbc_put_ret(dbc, key, data, flags, replyp);
out:
+ if (replyp != NULL)
+ xdr_free((xdrproc_t)xdr___dbc_put_reply, (void *)replyp);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_lock_detect __P((DB_ENV *, u_int32_t, u_int32_t, int *));
+ */
int
__dbcl_lock_detect(dbenv, flags, atype, aborted)
DB_ENV * dbenv;
@@ -2207,6 +4044,10 @@ __dbcl_lock_detect(dbenv, flags, atype, aborted)
return (__dbcl_rpc_illegal(dbenv, "lock_detect"));
}
+/*
+ * PUBLIC: int __dbcl_lock_get __P((DB_ENV *, u_int32_t, u_int32_t,
+ * PUBLIC: const DBT *, db_lockmode_t, DB_LOCK *));
+ */
int
__dbcl_lock_get(dbenv, locker, flags, obj, mode, lock)
DB_ENV * dbenv;
@@ -2224,6 +4065,9 @@ __dbcl_lock_get(dbenv, locker, flags, obj, mode, lock)
return (__dbcl_rpc_illegal(dbenv, "lock_get"));
}
+/*
+ * PUBLIC: int __dbcl_lock_id __P((DB_ENV *, u_int32_t *));
+ */
int
__dbcl_lock_id(dbenv, idp)
DB_ENV * dbenv;
@@ -2233,6 +4077,21 @@ __dbcl_lock_id(dbenv, idp)
return (__dbcl_rpc_illegal(dbenv, "lock_id"));
}
+/*
+ * PUBLIC: int __dbcl_lock_id_free __P((DB_ENV *, u_int32_t));
+ */
+int
+__dbcl_lock_id_free(dbenv, id)
+ DB_ENV * dbenv;
+ u_int32_t id;
+{
+ COMPQUIET(id, 0);
+ return (__dbcl_rpc_illegal(dbenv, "lock_id_free"));
+}
+
+/*
+ * PUBLIC: int __dbcl_lock_put __P((DB_ENV *, DB_LOCK *));
+ */
int
__dbcl_lock_put(dbenv, lock)
DB_ENV * dbenv;
@@ -2242,17 +4101,24 @@ __dbcl_lock_put(dbenv, lock)
return (__dbcl_rpc_illegal(dbenv, "lock_put"));
}
+/*
+ * PUBLIC: int __dbcl_lock_stat __P((DB_ENV *, DB_LOCK_STAT **, u_int32_t));
+ */
int
-__dbcl_lock_stat(dbenv, statp, func0)
+__dbcl_lock_stat(dbenv, statp, flags)
DB_ENV * dbenv;
DB_LOCK_STAT ** statp;
- void *(*func0) __P((size_t));
+ u_int32_t flags;
{
COMPQUIET(statp, 0);
- COMPQUIET(func0, 0);
+ COMPQUIET(flags, 0);
return (__dbcl_rpc_illegal(dbenv, "lock_stat"));
}
+/*
+ * PUBLIC: int __dbcl_lock_vec __P((DB_ENV *, u_int32_t, u_int32_t,
+ * PUBLIC: DB_LOCKREQ *, int, DB_LOCKREQ **));
+ */
int
__dbcl_lock_vec(dbenv, locker, flags, list, nlist, elistp)
DB_ENV * dbenv;
@@ -2270,19 +4136,37 @@ __dbcl_lock_vec(dbenv, locker, flags, list, nlist, elistp)
return (__dbcl_rpc_illegal(dbenv, "lock_vec"));
}
+/*
+ * PUBLIC: int __dbcl_log_archive __P((DB_ENV *, char ***, u_int32_t));
+ */
int
-__dbcl_log_archive(dbenv, listp, flags, func0)
+__dbcl_log_archive(dbenv, listp, flags)
DB_ENV * dbenv;
char *** listp;
u_int32_t flags;
- void *(*func0) __P((size_t));
{
COMPQUIET(listp, 0);
COMPQUIET(flags, 0);
- COMPQUIET(func0, 0);
return (__dbcl_rpc_illegal(dbenv, "log_archive"));
}
+/*
+ * PUBLIC: int __dbcl_log_cursor __P((DB_ENV *, DB_LOGC **, u_int32_t));
+ */
+int
+__dbcl_log_cursor(dbenv, logcp, flags)
+ DB_ENV * dbenv;
+ DB_LOGC ** logcp;
+ u_int32_t flags;
+{
+ COMPQUIET(logcp, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "log_cursor"));
+}
+
+/*
+ * PUBLIC: int __dbcl_log_file __P((DB_ENV *, const DB_LSN *, char *, size_t));
+ */
int
__dbcl_log_file(dbenv, lsn, namep, len)
DB_ENV * dbenv;
@@ -2296,6 +4180,9 @@ __dbcl_log_file(dbenv, lsn, namep, len)
return (__dbcl_rpc_illegal(dbenv, "log_file"));
}
+/*
+ * PUBLIC: int __dbcl_log_flush __P((DB_ENV *, const DB_LSN *));
+ */
int
__dbcl_log_flush(dbenv, lsn)
DB_ENV * dbenv;
@@ -2305,190 +4192,434 @@ __dbcl_log_flush(dbenv, lsn)
return (__dbcl_rpc_illegal(dbenv, "log_flush"));
}
+/*
+ * PUBLIC: int __dbcl_log_put __P((DB_ENV *, DB_LSN *, const DBT *,
+ * PUBLIC: u_int32_t));
+ */
int
-__dbcl_log_get(dbenv, lsn, data, flags)
+__dbcl_log_put(dbenv, lsn, data, flags)
DB_ENV * dbenv;
DB_LSN * lsn;
- DBT * data;
+ const DBT * data;
u_int32_t flags;
{
COMPQUIET(lsn, 0);
COMPQUIET(data, NULL);
COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "log_get"));
+ return (__dbcl_rpc_illegal(dbenv, "log_put"));
}
+/*
+ * PUBLIC: int __dbcl_log_stat __P((DB_ENV *, DB_LOG_STAT **, u_int32_t));
+ */
int
-__dbcl_log_put(dbenv, lsn, data, flags)
+__dbcl_log_stat(dbenv, statp, flags)
DB_ENV * dbenv;
- DB_LSN * lsn;
- const DBT * data;
+ DB_LOG_STAT ** statp;
u_int32_t flags;
{
- COMPQUIET(lsn, 0);
- COMPQUIET(data, NULL);
+ COMPQUIET(statp, 0);
COMPQUIET(flags, 0);
- return (__dbcl_rpc_illegal(dbenv, "log_put"));
+ return (__dbcl_rpc_illegal(dbenv, "log_stat"));
}
+/*
+ * PUBLIC: int __dbcl_memp_register __P((DB_ENV *, int, int (*)(DB_ENV *,
+ * PUBLIC: db_pgno_t, void *, DBT *), int (*)(DB_ENV *, db_pgno_t, void *, DBT *)));
+ */
int
-__dbcl_log_register(dbenv, dbp, namep)
+__dbcl_memp_register(dbenv, ftype, func0, func1)
DB_ENV * dbenv;
- DB * dbp;
- const char * namep;
+ int ftype;
+ int (*func0) __P((DB_ENV *, db_pgno_t, void *, DBT *));
+ int (*func1) __P((DB_ENV *, db_pgno_t, void *, DBT *));
{
- COMPQUIET(dbp, 0);
- COMPQUIET(namep, NULL);
- return (__dbcl_rpc_illegal(dbenv, "log_register"));
+ COMPQUIET(ftype, 0);
+ COMPQUIET(func0, 0);
+ COMPQUIET(func1, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_register"));
}
+/*
+ * PUBLIC: int __dbcl_memp_stat __P((DB_ENV *, DB_MPOOL_STAT **,
+ * PUBLIC: DB_MPOOL_FSTAT ***, u_int32_t));
+ */
int
-__dbcl_log_stat(dbenv, statp, func0)
+__dbcl_memp_stat(dbenv, gstatp, fstatp, flags)
DB_ENV * dbenv;
- DB_LOG_STAT ** statp;
- void *(*func0) __P((size_t));
+ DB_MPOOL_STAT ** gstatp;
+ DB_MPOOL_FSTAT *** fstatp;
+ u_int32_t flags;
{
- COMPQUIET(statp, 0);
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "log_stat"));
+ COMPQUIET(gstatp, 0);
+ COMPQUIET(fstatp, 0);
+ COMPQUIET(flags, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_stat"));
}
+/*
+ * PUBLIC: int __dbcl_memp_sync __P((DB_ENV *, DB_LSN *));
+ */
int
-__dbcl_log_unregister(dbenv, dbp)
+__dbcl_memp_sync(dbenv, lsn)
DB_ENV * dbenv;
- DB * dbp;
+ DB_LSN * lsn;
{
- COMPQUIET(dbp, 0);
- return (__dbcl_rpc_illegal(dbenv, "log_unregister"));
+ COMPQUIET(lsn, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_sync"));
}
+/*
+ * PUBLIC: int __dbcl_memp_trickle __P((DB_ENV *, int, int *));
+ */
int
-__dbcl_memp_fclose(mpf)
- DB_MPOOLFILE * mpf;
+__dbcl_memp_trickle(dbenv, pct, nwrotep)
+ DB_ENV * dbenv;
+ int pct;
+ int * nwrotep;
{
- DB_ENV *dbenv;
-
- dbenv = mpf->dbmp->dbenv;
- return (__dbcl_rpc_illegal(dbenv, "memp_fclose"));
+ COMPQUIET(pct, 0);
+ COMPQUIET(nwrotep, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_trickle"));
}
+/*
+ * PUBLIC: int __dbcl_memp_fget __P((DB_MPOOLFILE *, u_int32_t *, u_int32_t,
+ * PUBLIC: void *));
+ */
int
-__dbcl_memp_fget(mpf, pgno, flags, pagep)
- DB_MPOOLFILE * mpf;
- db_pgno_t * pgno;
+__dbcl_memp_fget(dbmfp, pgnoaddr, flags, addrp)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t * pgnoaddr;
u_int32_t flags;
- void ** pagep;
+ void * addrp;
{
DB_ENV *dbenv;
- dbenv = mpf->dbmp->dbenv;
- COMPQUIET(pgno, 0);
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(pgnoaddr, 0);
COMPQUIET(flags, 0);
- COMPQUIET(pagep, 0);
+ COMPQUIET(addrp, 0);
return (__dbcl_rpc_illegal(dbenv, "memp_fget"));
}
+/*
+ * PUBLIC: int __dbcl_memp_fopen __P((DB_MPOOLFILE *, const char *, u_int32_t,
+ * PUBLIC: int, size_t));
+ */
int
-__dbcl_memp_fopen(dbenv, file, flags, mode, pagesize, finfop, mpf)
- DB_ENV * dbenv;
- const char * file;
+__dbcl_memp_fopen(dbmfp, path, flags, mode, pagesize)
+ DB_MPOOLFILE * dbmfp;
+ const char * path;
u_int32_t flags;
int mode;
size_t pagesize;
- DB_MPOOL_FINFO * finfop;
- DB_MPOOLFILE ** mpf;
{
- COMPQUIET(file, NULL);
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(path, 0);
COMPQUIET(flags, 0);
COMPQUIET(mode, 0);
COMPQUIET(pagesize, 0);
- COMPQUIET(finfop, 0);
- COMPQUIET(mpf, 0);
return (__dbcl_rpc_illegal(dbenv, "memp_fopen"));
}
+/*
+ * PUBLIC: int __dbcl_memp_fput __P((DB_MPOOLFILE *, void *, u_int32_t));
+ */
int
-__dbcl_memp_fput(mpf, pgaddr, flags)
- DB_MPOOLFILE * mpf;
+__dbcl_memp_fput(dbmfp, pgaddr, flags)
+ DB_MPOOLFILE * dbmfp;
void * pgaddr;
u_int32_t flags;
{
DB_ENV *dbenv;
- dbenv = mpf->dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
COMPQUIET(pgaddr, 0);
COMPQUIET(flags, 0);
return (__dbcl_rpc_illegal(dbenv, "memp_fput"));
}
+/*
+ * PUBLIC: int __dbcl_memp_fset __P((DB_MPOOLFILE *, void *, u_int32_t));
+ */
int
-__dbcl_memp_fset(mpf, pgaddr, flags)
- DB_MPOOLFILE * mpf;
+__dbcl_memp_fset(dbmfp, pgaddr, flags)
+ DB_MPOOLFILE * dbmfp;
void * pgaddr;
u_int32_t flags;
{
DB_ENV *dbenv;
- dbenv = mpf->dbmp->dbenv;
+ dbenv = dbmfp->dbenv;
COMPQUIET(pgaddr, 0);
COMPQUIET(flags, 0);
return (__dbcl_rpc_illegal(dbenv, "memp_fset"));
}
+/*
+ * PUBLIC: int __dbcl_memp_get_clear_len __P((DB_MPOOLFILE *, u_int32_t *));
+ */
int
-__dbcl_memp_fsync(mpf)
- DB_MPOOLFILE * mpf;
+__dbcl_memp_get_clear_len(dbmfp, clear_lenp)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t * clear_lenp;
{
DB_ENV *dbenv;
- dbenv = mpf->dbmp->dbenv;
- return (__dbcl_rpc_illegal(dbenv, "memp_fsync"));
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(clear_lenp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_clear_len"));
}
+/*
+ * PUBLIC: int __dbcl_memp_set_clear_len __P((DB_MPOOLFILE *, u_int32_t));
+ */
int
-__dbcl_memp_register(dbenv, ftype, func0, func1)
- DB_ENV * dbenv;
+__dbcl_memp_set_clear_len(dbmfp, clear_len)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t clear_len;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(clear_len, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_clear_len"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_get_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+ */
+int
+__dbcl_memp_get_fileid(dbmfp, fileid)
+ DB_MPOOLFILE * dbmfp;
+ u_int8_t * fileid;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(fileid, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_fileid"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_fileid __P((DB_MPOOLFILE *, u_int8_t *));
+ */
+int
+__dbcl_memp_set_fileid(dbmfp, fileid)
+ DB_MPOOLFILE * dbmfp;
+ u_int8_t * fileid;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(fileid, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_fileid"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_get_flags __P((DB_MPOOLFILE *, u_int32_t *));
+ */
+int
+__dbcl_memp_get_flags(dbmfp, flagsp)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t * flagsp;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(flagsp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_flags"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_flags __P((DB_MPOOLFILE *, u_int32_t, int));
+ */
+int
+__dbcl_memp_set_flags(dbmfp, flags, onoff)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t flags;
+ int onoff;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(flags, 0);
+ COMPQUIET(onoff, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_flags"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_get_ftype __P((DB_MPOOLFILE *, int *));
+ */
+int
+__dbcl_memp_get_ftype(dbmfp, ftype)
+ DB_MPOOLFILE * dbmfp;
+ int * ftype;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(ftype, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_ftype"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_ftype __P((DB_MPOOLFILE *, int));
+ */
+int
+__dbcl_memp_set_ftype(dbmfp, ftype)
+ DB_MPOOLFILE * dbmfp;
int ftype;
- int (*func0) __P((DB_ENV *, db_pgno_t, void *, DBT *));
- int (*func1) __P((DB_ENV *, db_pgno_t, void *, DBT *));
{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
COMPQUIET(ftype, 0);
- COMPQUIET(func0, 0);
- COMPQUIET(func1, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_register"));
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_ftype"));
}
+/*
+ * PUBLIC: int __dbcl_memp_get_lsn_offset __P((DB_MPOOLFILE *, int32_t *));
+ */
int
-__dbcl_memp_stat(dbenv, gstatp, fstatp, func0)
- DB_ENV * dbenv;
- DB_MPOOL_STAT ** gstatp;
- DB_MPOOL_FSTAT *** fstatp;
- void *(*func0) __P((size_t));
+__dbcl_memp_get_lsn_offset(dbmfp, lsn_offsetp)
+ DB_MPOOLFILE * dbmfp;
+ int32_t * lsn_offsetp;
{
- COMPQUIET(gstatp, 0);
- COMPQUIET(fstatp, 0);
- COMPQUIET(func0, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_stat"));
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(lsn_offsetp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_lsn_offset"));
}
+/*
+ * PUBLIC: int __dbcl_memp_set_lsn_offset __P((DB_MPOOLFILE *, int32_t));
+ */
int
-__dbcl_memp_sync(dbenv, lsn)
- DB_ENV * dbenv;
- DB_LSN * lsn;
+__dbcl_memp_set_lsn_offset(dbmfp, lsn_offset)
+ DB_MPOOLFILE * dbmfp;
+ int32_t lsn_offset;
{
- COMPQUIET(lsn, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_sync"));
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(lsn_offset, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_lsn_offset"));
}
+/*
+ * PUBLIC: int __dbcl_memp_get_maxsize __P((DB_MPOOLFILE *, u_int32_t *,
+ * PUBLIC: u_int32_t *));
+ */
int
-__dbcl_memp_trickle(dbenv, pct, nwrotep)
- DB_ENV * dbenv;
- int pct;
- int * nwrotep;
+__dbcl_memp_get_maxsize(dbmfp, gbytesp, bytesp)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t * gbytesp;
+ u_int32_t * bytesp;
{
- COMPQUIET(pct, 0);
- COMPQUIET(nwrotep, 0);
- return (__dbcl_rpc_illegal(dbenv, "memp_trickle"));
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(gbytesp, 0);
+ COMPQUIET(bytesp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_maxsize"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_maxsize __P((DB_MPOOLFILE *, u_int32_t,
+ * PUBLIC: u_int32_t));
+ */
+int
+__dbcl_memp_set_maxsize(dbmfp, gbytes, bytes)
+ DB_MPOOLFILE * dbmfp;
+ u_int32_t gbytes;
+ u_int32_t bytes;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(gbytes, 0);
+ COMPQUIET(bytes, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_maxsize"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_get_pgcookie __P((DB_MPOOLFILE *, DBT *));
+ */
+int
+__dbcl_memp_get_pgcookie(dbmfp, pgcookie)
+ DB_MPOOLFILE * dbmfp;
+ DBT * pgcookie;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(pgcookie, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_pgcookie"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_pgcookie __P((DB_MPOOLFILE *, DBT *));
+ */
+int
+__dbcl_memp_set_pgcookie(dbmfp, pgcookie)
+ DB_MPOOLFILE * dbmfp;
+ DBT * pgcookie;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(pgcookie, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_pgcookie"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_get_priority __P((DB_MPOOLFILE *,
+ * PUBLIC: DB_CACHE_PRIORITY *));
+ */
+int
+__dbcl_memp_get_priority(dbmfp, priorityp)
+ DB_MPOOLFILE * dbmfp;
+ DB_CACHE_PRIORITY * priorityp;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(priorityp, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_get_priority"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_set_priority __P((DB_MPOOLFILE *,
+ * PUBLIC: DB_CACHE_PRIORITY));
+ */
+int
+__dbcl_memp_set_priority(dbmfp, priority)
+ DB_MPOOLFILE * dbmfp;
+ DB_CACHE_PRIORITY priority;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ COMPQUIET(priority, 0);
+ return (__dbcl_rpc_illegal(dbenv, "memp_set_priority"));
+}
+
+/*
+ * PUBLIC: int __dbcl_memp_fsync __P((DB_MPOOLFILE *));
+ */
+int
+__dbcl_memp_fsync(dbmfp)
+ DB_MPOOLFILE * dbmfp;
+{
+ DB_ENV *dbenv;
+
+ dbenv = dbmfp->dbenv;
+ return (__dbcl_rpc_illegal(dbenv, "memp_fsync"));
}
#endif /* HAVE_RPC */
diff --git a/db/rpc_client/gen_client_ret.c b/db/rpc_client/gen_client_ret.c
index 17e3f195f..e825279f6 100644
--- a/db/rpc_client/gen_client_ret.c
+++ b/db/rpc_client/gen_client_ret.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000
- * Sleepycat Software. All rights reserved.
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: gen_client_ret.c,v 1.29 2000/12/31 19:26:23 bostic Exp $";
+static const char revid[] = "$Id: gen_client_ret.c,v 1.59 2003/06/14 17:56:02 bostic Exp $";
#endif /* not lint */
#ifdef HAVE_RPC
@@ -19,35 +19,38 @@ static const char revid[] = "$Id: gen_client_ret.c,v 1.29 2000/12/31 19:26:23 bo
#include <string.h>
#endif
-#include "db_server.h"
#include "db_int.h"
-#include "db_page.h"
-#include "txn.h"
-#include "db_ext.h"
-#include "rpc_client_ext.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/txn.h"
-static void __db_db_stat_statsfree __P((u_int32_t *));
-static int __db_db_stat_statslist __P((__db_stat_statsreplist *, u_int32_t **));
+#include "dbinc_auto/db_server.h"
+#include "dbinc_auto/rpc_client_ext.h"
+/*
+ * PUBLIC: int __dbcl_env_create_ret
+ * PUBLIC: __P((DB_ENV *, long, __env_create_reply *));
+ */
int
-__dbcl_env_close_ret(dbenv, flags, replyp)
- DB_ENV *dbenv;
- u_int32_t flags;
- __env_close_reply *replyp;
+__dbcl_env_create_ret(dbenv, timeout, replyp)
+ DB_ENV * dbenv;
+ long timeout;
+ __env_create_reply *replyp;
{
- int ret;
- COMPQUIET(flags, 0);
+ COMPQUIET(timeout, 0);
- ret = __dbcl_refresh(dbenv);
- __os_free(dbenv, sizeof(*dbenv));
- if (replyp->status == 0 && ret != 0)
- return (ret);
- else
+ if (replyp->status != 0)
return (replyp->status);
+ dbenv->cl_id = replyp->envcl_id;
+ return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_env_open_ret __P((DB_ENV *,
+ * PUBLIC: const char *, u_int32_t, int, __env_open_reply *));
+ */
int
__dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
DB_ENV *dbenv;
@@ -68,6 +71,7 @@ __dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
if (replyp->status != 0)
return (replyp->status);
+ dbenv->cl_id = replyp->envcl_id;
/*
* If the user requested transactions, then we have some
* local client-side setup to do also.
@@ -84,6 +88,10 @@ __dbcl_env_open_ret(dbenv, home, flags, mode, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_env_remove_ret
+ * PUBLIC: __P((DB_ENV *, const char *, u_int32_t, __env_remove_reply *));
+ */
int
__dbcl_env_remove_ret(dbenv, home, flags, replyp)
DB_ENV *dbenv;
@@ -97,13 +105,16 @@ __dbcl_env_remove_ret(dbenv, home, flags, replyp)
COMPQUIET(flags, 0);
ret = __dbcl_refresh(dbenv);
- __os_free(dbenv, sizeof(*dbenv));
+ __os_free(NULL, dbenv);
if (replyp->status == 0 && ret != 0)
return (ret);
else
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_abort_ret __P((DB_TXN *, __txn_abort_reply *));
+ */
int
__dbcl_txn_abort_ret(txnp, replyp)
DB_TXN *txnp;
@@ -113,6 +124,10 @@ __dbcl_txn_abort_ret(txnp, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_begin_ret __P((DB_ENV *,
+ * PUBLIC: DB_TXN *, DB_TXN **, u_int32_t, __txn_begin_reply *));
+ */
int
__dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
DB_ENV *envp;
@@ -130,29 +145,15 @@ __dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp)
if ((ret = __os_calloc(envp, 1, sizeof(DB_TXN), &txn)) != 0)
return (ret);
- txn->txnid = replyp->txnidcl_id;
- txn->mgrp = envp->tx_handle;
- txn->parent = parent;
- TAILQ_INIT(&txn->kids);
- txn->flags = TXN_MALLOC;
- if (parent != NULL)
- TAILQ_INSERT_HEAD(&parent->kids, txn, klinks);
-
- /*
- * XXX
- * In DB library the txn_chain is protected by the mgrp->mutexp.
- * However, that mutex is implemented in the environments shared
- * memory region. The client library does not support all of the
- * region - that just get forwarded to the server. Therefore,
- * the chain is unprotected here, but properly protected on the
- * server.
- */
- TAILQ_INSERT_TAIL(&txn->mgrp->txn_chain, txn, links);
-
+ __dbcl_txn_setup(envp, txn, parent, replyp->txnidcl_id);
*txnpp = txn;
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_commit_ret
+ * PUBLIC: __P((DB_TXN *, u_int32_t, __txn_commit_reply *));
+ */
int
__dbcl_txn_commit_ret(txnp, flags, replyp)
DB_TXN *txnp;
@@ -165,6 +166,83 @@ __dbcl_txn_commit_ret(txnp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_txn_discard_ret __P((DB_TXN *, u_int32_t,
+ * PUBLIC: __txn_discard_reply *));
+ */
+int
+__dbcl_txn_discard_ret(txnp, flags, replyp)
+ DB_TXN * txnp;
+ u_int32_t flags;
+ __txn_discard_reply *replyp;
+{
+ COMPQUIET(flags, 0);
+
+ __dbcl_txn_end(txnp);
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_txn_recover_ret __P((DB_ENV *, DB_PREPLIST *, long,
+ * PUBLIC: long *, u_int32_t, __txn_recover_reply *));
+ */
+int
+__dbcl_txn_recover_ret(dbenv, preplist, count, retp, flags, replyp)
+ DB_ENV * dbenv;
+ DB_PREPLIST * preplist;
+ long count;
+ long * retp;
+ u_int32_t flags;
+ __txn_recover_reply *replyp;
+{
+ DB_PREPLIST *prep;
+ DB_TXN *txnarray, *txn;
+ u_int32_t i, *txnid;
+ int ret;
+ u_int8_t *gid;
+
+ COMPQUIET(flags, 0);
+ COMPQUIET(count, 0);
+
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ *retp = (long) replyp->retcount;
+
+ if (replyp->retcount == 0)
+ return (replyp->status);
+
+ if ((ret = __os_calloc(dbenv, replyp->retcount, sizeof(DB_TXN),
+ &txnarray)) != 0)
+ return (ret);
+ /*
+ * We have a bunch of arrays that need to iterate in
+ * lockstep with each other.
+ */
+ i = 0;
+ txn = txnarray;
+ txnid = (u_int32_t *)replyp->txn.txn_val;
+ gid = (u_int8_t *)replyp->gid.gid_val;
+ prep = preplist;
+ while (i++ < replyp->retcount) {
+ __dbcl_txn_setup(dbenv, txn, NULL, *txnid);
+ prep->txn = txn;
+ memcpy(&prep->gid, gid, DB_XIDDATASIZE);
+ /*
+ * Now increment all our array pointers.
+ */
+ txn++;
+ gid += DB_XIDDATASIZE;
+ txnid++;
+ prep++;
+ }
+
+ return (0);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_close_ret __P((DB *, u_int32_t, __db_close_reply *));
+ */
int
__dbcl_db_close_ret(dbp, flags, replyp)
DB *dbp;
@@ -183,6 +261,30 @@ __dbcl_db_close_ret(dbp, flags, replyp)
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_create_ret
+ * PUBLIC: __P((DB *, DB_ENV *, u_int32_t, __db_create_reply *));
+ */
+int
+__dbcl_db_create_ret(dbp, dbenv, flags, replyp)
+ DB * dbp;
+ DB_ENV * dbenv;
+ u_int32_t flags;
+ __db_create_reply *replyp;
+{
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(flags, 0);
+
+ if (replyp->status != 0)
+ return (replyp->status);
+ dbp->cl_id = replyp->dbcl_id;
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_get_ret
+ * PUBLIC: __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t, __db_get_reply *));
+ */
int
__dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp)
DB *dbp;
@@ -206,20 +308,26 @@ __dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp)
oldkey = key->data;
ret = __dbcl_retcopy(dbenv, key, replyp->keydata.keydata_val,
- replyp->keydata.keydata_len);
+ replyp->keydata.keydata_len, &dbp->my_rkey.data,
+ &dbp->my_rkey.ulen);
if (ret)
return (ret);
ret = __dbcl_retcopy(dbenv, data, replyp->datadata.datadata_val,
- replyp->datadata.datadata_len);
+ replyp->datadata.datadata_len, &dbp->my_rdata.data,
+ &dbp->my_rdata.ulen);
/*
* If an error on copying 'data' and we allocated for 'key'
* free it before returning the error.
*/
if (ret && oldkey != NULL)
- __os_free(key->data, key->size);
+ __os_free(dbenv, key->data);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_key_range_ret __P((DB *, DB_TXN *,
+ * PUBLIC: DBT *, DB_KEY_RANGE *, u_int32_t, __db_key_range_reply *));
+ */
int
__dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp)
DB *dbp;
@@ -242,32 +350,114 @@ __dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_open_ret __P((DB *, DB_TXN *, const char *,
+ * PUBLIC: const char *, DBTYPE, u_int32_t, int, __db_open_reply *));
+ */
int
-__dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp)
+__dbcl_db_open_ret(dbp, txn, name, subdb, type, flags, mode, replyp)
DB *dbp;
+ DB_TXN *txn;
const char *name, *subdb;
DBTYPE type;
u_int32_t flags;
int mode;
__db_open_reply *replyp;
{
+ COMPQUIET(txn, NULL);
COMPQUIET(name, NULL);
COMPQUIET(subdb, NULL);
COMPQUIET(type, 0);
COMPQUIET(flags, 0);
COMPQUIET(mode, 0);
- dbp->type = replyp->type;
+ if (replyp->status == 0) {
+ dbp->cl_id = replyp->dbcl_id;
+ dbp->type = replyp->type;
+ /*
+ * We get back the database's byteorder on the server.
+ * Determine if our byteorder is the same or not by
+ * calling __db_set_lorder.
+ *
+ * XXX
+ * This MUST come before we set the flags because
+ * __db_set_lorder checks that it is called before
+ * the open flag is set.
+ */
+ (void)__db_set_lorder(dbp, replyp->lorder);
+
+ /*
+ * XXX
+ * This is only for Tcl which peeks at the dbp flags.
+ * When dbp->get_flags exists, this should go away.
+ */
+ dbp->flags = replyp->dbflags;
+ }
+ return (replyp->status);
+}
+
+/*
+ * PUBLIC: int __dbcl_db_pget_ret __P((DB *, DB_TXN *, DBT *, DBT *, DBT *,
+ * PUBLIC: u_int32_t, __db_pget_reply *));
+ */
+int
+__dbcl_db_pget_ret(dbp, txnp, skey, pkey, data, flags, replyp)
+ DB * dbp;
+ DB_TXN * txnp;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+ __db_pget_reply *replyp;
+{
+ DB_ENV *dbenv;
+ int ret;
+ void *oldskey, *oldpkey;
+
+ COMPQUIET(txnp, NULL);
+ COMPQUIET(flags, 0);
+ ret = 0;
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ dbenv = dbp->dbenv;
+
+ oldskey = skey->data;
+ ret = __dbcl_retcopy(dbenv, skey, replyp->skeydata.skeydata_val,
+ replyp->skeydata.skeydata_len, &dbp->my_rskey.data,
+ &dbp->my_rskey.ulen);
+ if (ret)
+ return (ret);
+
+ oldpkey = pkey->data;
+ ret = __dbcl_retcopy(dbenv, pkey, replyp->pkeydata.pkeydata_val,
+ replyp->pkeydata.pkeydata_len, &dbp->my_rkey.data,
+ &dbp->my_rkey.ulen);
+ if (ret && oldskey != NULL) {
+ __os_free(dbenv, skey->data);
+ return (ret);
+ }
+ ret = __dbcl_retcopy(dbenv, data, replyp->datadata.datadata_val,
+ replyp->datadata.datadata_len, &dbp->my_rdata.data,
+ &dbp->my_rdata.ulen);
/*
- * XXX
- * This is only for Tcl which peeks at the dbp flags.
- * When dbp->get_flags exists, this should go away.
+ * If an error on copying 'data' and we allocated for '*key'
+ * free it before returning the error.
*/
- dbp->flags = replyp->dbflags;
- return (replyp->status);
+ if (ret) {
+ if (oldskey != NULL)
+ __os_free(dbenv, skey->data);
+ if (oldpkey != NULL)
+ __os_free(dbenv, pkey->data);
+ }
+ return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_put_ret
+ * PUBLIC: __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t, __db_put_reply *));
+ */
int
__dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp)
DB *dbp;
@@ -289,6 +479,10 @@ __dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp)
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_remove_ret __P((DB *,
+ * PUBLIC: const char *, const char *, u_int32_t, __db_remove_reply *));
+ */
int
__dbcl_db_remove_ret(dbp, name, subdb, flags, replyp)
DB *dbp;
@@ -310,12 +504,16 @@ __dbcl_db_remove_ret(dbp, name, subdb, flags, replyp)
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_rename_ret __P((DB *, const char *,
+ * PUBLIC: const char *, const char *, u_int32_t, __db_rename_reply *));
+ */
int
__dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp)
DB *dbp;
const char *name, *subdb, *newname;
u_int32_t flags;
- __db_remove_reply *replyp;
+ __db_rename_reply *replyp;
{
int ret;
@@ -332,82 +530,66 @@ __dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp)
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_db_stat_ret
+ * PUBLIC: __P((DB *, void *, u_int32_t, __db_stat_reply *));
+ */
int
-__dbcl_db_stat_ret(dbp, sp, func, flags, replyp)
+__dbcl_db_stat_ret(dbp, sp, flags, replyp)
DB *dbp;
void *sp;
- void *(*func) __P((size_t));
u_int32_t flags;
__db_stat_reply *replyp;
{
- int ret;
- u_int32_t *__db_statslist;
+ int len, ret;
+ u_int32_t i, *q, *p, *retsp;
- COMPQUIET(dbp, NULL);
- COMPQUIET(func, NULL);
COMPQUIET(flags, 0);
- if (replyp->status != 0)
+ if (replyp->status != 0 || sp == NULL)
return (replyp->status);
- if ((ret =
- __db_db_stat_statslist(replyp->statslist, &__db_statslist)) != 0)
- return (ret);
-
- if (sp == NULL)
- __db_db_stat_statsfree(__db_statslist);
- else
- *(u_int32_t **)sp = __db_statslist;
- return (replyp->status);
-}
-
-static int
-__db_db_stat_statslist(locp, ppp)
- __db_stat_statsreplist *locp;
- u_int32_t **ppp;
-{
- u_int32_t *pp;
- int cnt, ret, size;
- __db_stat_statsreplist *nl;
-
- for (cnt = 0, nl = locp; nl != NULL; cnt++, nl = nl->next)
- ;
-
- if (cnt == 0) {
- *ppp = NULL;
- return (0);
- }
- size = sizeof(*pp) * cnt;
- if ((ret = __os_malloc(NULL, size, NULL, ppp)) != 0)
+ len = replyp->stats.stats_len * sizeof(u_int32_t);
+ if ((ret = __os_umalloc(dbp->dbenv, len, &retsp)) != 0)
return (ret);
- memset(*ppp, 0, size);
- for (pp = *ppp, nl = locp; nl != NULL; nl = nl->next, pp++) {
- *pp = *(u_int32_t *)nl->ent.ent_val;
- }
+ for (i = 0, q = retsp, p = (u_int32_t *)replyp->stats.stats_val;
+ i < replyp->stats.stats_len; i++, q++, p++)
+ *q = *p;
+ *(u_int32_t **)sp = retsp;
return (0);
}
-static void
-__db_db_stat_statsfree(pp)
- u_int32_t *pp;
+/*
+ * PUBLIC: int __dbcl_db_truncate_ret __P((DB *, DB_TXN *, u_int32_t *,
+ * PUBLIC: u_int32_t, __db_truncate_reply *));
+ */
+int
+__dbcl_db_truncate_ret(dbp, txnp, countp, flags, replyp)
+ DB *dbp;
+ DB_TXN *txnp;
+ u_int32_t *countp, flags;
+ __db_truncate_reply *replyp;
{
- size_t size;
- u_int32_t *p;
+ COMPQUIET(dbp, NULL);
+ COMPQUIET(txnp, NULL);
+ COMPQUIET(flags, 0);
- if (pp == NULL)
- return;
- size = sizeof(*p);
- for (p = pp; *p != 0; p++)
- size += sizeof(*p);
+ if (replyp->status != 0)
+ return (replyp->status);
+ *countp = replyp->count;
- __os_free(pp, size);
+ return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_db_cursor_ret
+ * PUBLIC: __P((DB *, DB_TXN *, DBC **, u_int32_t, __db_cursor_reply *));
+ */
int
-__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
+__dbcl_db_cursor_ret(dbp, txnp, dbcp, flags, replyp)
DB *dbp;
DB_TXN *txnp;
- DBC **dbcpp;
+ DBC **dbcp;
u_int32_t flags;
__db_cursor_reply *replyp;
{
@@ -417,13 +599,17 @@ __dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp)
if (replyp->status != 0)
return (replyp->status);
- return (__dbcl_c_setup(replyp->dbcidcl_id, dbp, dbcpp));
+ return (__dbcl_c_setup(replyp->dbcidcl_id, dbp, dbcp));
}
+/*
+ * PUBLIC: int __dbcl_db_join_ret
+ * PUBLIC: __P((DB *, DBC **, DBC **, u_int32_t, __db_join_reply *));
+ */
int
-__dbcl_db_join_ret(dbp, curs, dbcpp, flags, replyp)
+__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp)
DB *dbp;
- DBC **curs, **dbcpp;
+ DBC **curs, **dbcp;
u_int32_t flags;
__db_join_reply *replyp;
{
@@ -440,21 +626,25 @@ __dbcl_db_join_ret(dbp, curs, dbcpp, flags, replyp)
* client-side cursor/db relationship to know what cursors
* are open in the db, and to store their ID. Nothing else.
*/
- return (__dbcl_c_setup(replyp->dbcidcl_id, dbp, dbcpp));
+ return (__dbcl_c_setup(replyp->dbcidcl_id, dbp, dbcp));
}
+/*
+ * PUBLIC: int __dbcl_dbc_close_ret __P((DBC *, __dbc_close_reply *));
+ */
int
-__dbcl_dbc_close_ret(dbcp, replyp)
- DBC *dbcp;
+__dbcl_dbc_close_ret(dbc, replyp)
+ DBC *dbc;
__dbc_close_reply *replyp;
{
- DB *dbp;
-
- dbp = dbcp->dbp;
- __dbcl_c_refresh(dbcp);
+ __dbcl_c_refresh(dbc);
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_count_ret
+ * PUBLIC: __P((DBC *, db_recno_t *, u_int32_t, __dbc_count_reply *));
+ */
int
__dbcl_dbc_count_ret(dbc, countp, flags, replyp)
DBC *dbc;
@@ -472,9 +662,13 @@ __dbcl_dbc_count_ret(dbc, countp, flags, replyp)
return (replyp->status);
}
+/*
+ * PUBLIC: int __dbcl_dbc_dup_ret
+ * PUBLIC: __P((DBC *, DBC **, u_int32_t, __dbc_dup_reply *));
+ */
int
-__dbcl_dbc_dup_ret(dbcp, dbcpp, flags, replyp)
- DBC *dbcp, **dbcpp;
+__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp)
+ DBC *dbc, **dbcp;
u_int32_t flags;
__dbc_dup_reply *replyp;
{
@@ -483,12 +677,16 @@ __dbcl_dbc_dup_ret(dbcp, dbcpp, flags, replyp)
if (replyp->status != 0)
return (replyp->status);
- return (__dbcl_c_setup(replyp->dbcidcl_id, dbcp->dbp, dbcpp));
+ return (__dbcl_c_setup(replyp->dbcidcl_id, dbc->dbp, dbcp));
}
+/*
+ * PUBLIC: int __dbcl_dbc_get_ret
+ * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_get_reply *));
+ */
int
-__dbcl_dbc_get_ret(dbcp, key, data, flags, replyp)
- DBC *dbcp;
+__dbcl_dbc_get_ret(dbc, key, data, flags, replyp)
+ DBC *dbc;
DBT *key, *data;
u_int32_t flags;
__dbc_get_reply *replyp;
@@ -503,27 +701,89 @@ __dbcl_dbc_get_ret(dbcp, key, data, flags, replyp)
if (replyp->status != 0)
return (replyp->status);
- dbenv = dbcp->dbp->dbenv;
+ dbenv = dbc->dbp->dbenv;
oldkey = key->data;
ret = __dbcl_retcopy(dbenv, key, replyp->keydata.keydata_val,
- replyp->keydata.keydata_len);
+ replyp->keydata.keydata_len, &dbc->my_rkey.data,
+ &dbc->my_rkey.ulen);
if (ret)
return (ret);
ret = __dbcl_retcopy(dbenv, data, replyp->datadata.datadata_val,
- replyp->datadata.datadata_len);
+ replyp->datadata.datadata_len, &dbc->my_rdata.data,
+ &dbc->my_rdata.ulen);
/*
* If an error on copying 'data' and we allocated for 'key'
* free it before returning the error.
*/
if (ret && oldkey != NULL)
- __os_free(key->data, key->size);
+ __os_free(dbenv, key->data);
return (ret);
}
+/*
+ * PUBLIC: int __dbcl_dbc_pget_ret __P((DBC *, DBT *, DBT *, DBT *, u_int32_t,
+ * PUBLIC: __dbc_pget_reply *));
+ */
int
-__dbcl_dbc_put_ret(dbcp, key, data, flags, replyp)
- DBC *dbcp;
+__dbcl_dbc_pget_ret(dbc, skey, pkey, data, flags, replyp)
+ DBC * dbc;
+ DBT * skey;
+ DBT * pkey;
+ DBT * data;
+ u_int32_t flags;
+ __dbc_pget_reply *replyp;
+{
+ DB_ENV *dbenv;
+ int ret;
+ void *oldskey, *oldpkey;
+
+ COMPQUIET(flags, 0);
+
+ ret = 0;
+ if (replyp->status != 0)
+ return (replyp->status);
+
+ dbenv = dbc->dbp->dbenv;
+
+ oldskey = skey->data;
+ ret = __dbcl_retcopy(dbenv, skey, replyp->skeydata.skeydata_val,
+ replyp->skeydata.skeydata_len, &dbc->my_rskey.data,
+ &dbc->my_rskey.ulen);
+ if (ret)
+ return (ret);
+
+ oldpkey = pkey->data;
+ ret = __dbcl_retcopy(dbenv, pkey, replyp->pkeydata.pkeydata_val,
+ replyp->pkeydata.pkeydata_len, &dbc->my_rkey.data,
+ &dbc->my_rkey.ulen);
+ if (ret && oldskey != NULL) {
+ __os_free(dbenv, skey->data);
+ return (ret);
+ }
+ ret = __dbcl_retcopy(dbenv, data, replyp->datadata.datadata_val,
+ replyp->datadata.datadata_len, &dbc->my_rdata.data,
+ &dbc->my_rdata.ulen);
+ /*
+ * If an error on copying 'data' and we allocated for '*key'
+ * free it before returning the error.
+ */
+ if (ret) {
+ if (oldskey != NULL)
+ __os_free(dbenv, skey->data);
+ if (oldpkey != NULL)
+ __os_free(dbenv, pkey->data);
+ }
+ return (ret);
+}
+
+/*
+ * PUBLIC: int __dbcl_dbc_put_ret
+ * PUBLIC: __P((DBC *, DBT *, DBT *, u_int32_t, __dbc_put_reply *));
+ */
+int
+__dbcl_dbc_put_ret(dbc, key, data, flags, replyp)
+ DBC *dbc;
DBT *key, *data;
u_int32_t flags;
__dbc_put_reply *replyp;
@@ -533,7 +793,7 @@ __dbcl_dbc_put_ret(dbcp, key, data, flags, replyp)
if (replyp->status != 0)
return (replyp->status);
- if (replyp->status == 0 && dbcp->dbp->type == DB_RECNO &&
+ if (replyp->status == 0 && dbc->dbp->type == DB_RECNO &&
(flags == DB_AFTER || flags == DB_BEFORE))
*(db_recno_t *)key->data =
*(db_recno_t *)replyp->keydata.keydata_val;
diff --git a/db/rpc_server/c/db_server_proc.c b/db/rpc_server/c/db_server_proc.c
index 207e160c3..b24ae2fc0 100644
--- a/db/rpc_server/c/db_server_proc.c
+++ b/db/rpc_server/c/db_server_proc.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,7 +9,7 @@
#ifdef HAVE_RPC
#ifndef lint
-static const char revid[] = "Id: db_server_proc.c,v 1.92 2002/07/29 15:21:20 sue Exp ";
+static const char revid[] = "$Id: db_server_proc.c,v 1.96 2003/04/24 16:25:08 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -25,6 +25,28 @@ static const char revid[] = "Id: db_server_proc.c,v 1.92 2002/07/29 15:21:20 sue
#include "dbinc/db_server_int.h"
#include "dbinc_auto/rpc_server_ext.h"
+/* BEGIN __env_get_cachesize_proc */
+/*
+ * PUBLIC: void __env_get_cachesize_proc __P((long,
+ * PUBLIC: __env_get_cachesize_reply *));
+ */
+void
+__env_get_cachesize_proc(dbenvcl_id,
+ replyp)
+ long dbenvcl_id;
+ __env_get_cachesize_reply *replyp;
+/* END __env_get_cachesize_proc */
+{
+ DB_ENV *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_cachesize(dbenv, &replyp->gbytes,
+ &replyp->bytes, &replyp->ncache);
+}
+
/* BEGIN __env_cachesize_proc */
/*
* PUBLIC: void __env_cachesize_proc __P((long, u_int32_t, u_int32_t,
@@ -178,6 +200,26 @@ __env_dbrename_proc(dbenvcl_id, txnpcl_id, name,
return;
}
+/* BEGIN __env_get_encrypt_flags_proc */
+/*
+ * PUBLIC: void __env_get_encrypt_flags_proc __P((long,
+ * PUBLIC: __env_get_encrypt_flags_reply *));
+ */
+void
+__env_get_encrypt_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_encrypt_flags_reply *replyp;
+/* END __env_get_encrypt_flags_proc */
+{
+ DB_ENV *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_encrypt_flags(dbenv, &replyp->flags);
+}
+
/* BEGIN __env_encrypt_proc */
/*
* PUBLIC: void __env_encrypt_proc __P((long, char *, u_int32_t,
@@ -204,6 +246,25 @@ __env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)
return;
}
+/* BEGIN __env_get_flags_proc */
+/*
+ * PUBLIC: void __env_get_flags_proc __P((long, __env_get_flags_reply *));
+ */
+void
+__env_get_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_flags_reply *replyp;
+/* END __env_get_flags_proc */
+{
+ DB_ENV *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_flags(dbenv, &replyp->flags);
+}
+
/* BEGIN __env_flags_proc */
/*
* PUBLIC: void __env_flags_proc __P((long, u_int32_t, u_int32_t,
@@ -233,6 +294,47 @@ __env_flags_proc(dbenvcl_id, flags, onoff, replyp)
replyp->status = ret;
return;
}
+
+/* BEGIN __env_get_home_proc */
+/*
+ * PUBLIC: void __env_get_home_proc __P((long, __env_get_home_reply *));
+ */
+void
+__env_get_home_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_home_reply *replyp;
+/* END __env_get_home_proc */
+{
+ DB_ENV *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_home(dbenv,
+ (const char **)&replyp->home);
+}
+
+/* BEGIN __env_get_open_flags_proc */
+/*
+ * PUBLIC: void __env_get_open_flags_proc __P((long,
+ * PUBLIC: __env_get_open_flags_reply *));
+ */
+void
+__env_get_open_flags_proc(dbenvcl_id, replyp)
+ long dbenvcl_id;
+ __env_get_open_flags_reply *replyp;
+/* END __env_get_open_flags_proc */
+{
+ DB_ENV *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_open_flags(dbenv, &replyp->flags);
+}
+
/* BEGIN __env_open_proc */
/*
* PUBLIC: void __env_open_proc __P((long, char *, u_int32_t, u_int32_t,
@@ -256,7 +358,7 @@ __env_open_proc(dbenvcl_id, home, flags,
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
- fullhome = get_home(home);
+ fullhome = get_fullhome(home);
if (fullhome == NULL) {
ret = DB_NOSERVER_HOME;
goto out;
@@ -323,7 +425,7 @@ __env_remove_proc(dbenvcl_id, home, flags, replyp)
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
dbenv = (DB_ENV *)dbenv_ctp->ct_anyp;
- fullhome = get_home(home);
+ fullhome = get_fullhome(home);
if (fullhome == NULL) {
replyp->status = DB_NOSERVER_HOME;
return;
@@ -655,7 +757,6 @@ __db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id,
} else
txnp = NULL;
-
/*
* We do not support DB_CREATE for associate. Users
* can only access secondary indices on a read-only basis,
@@ -670,6 +771,26 @@ __db_associate_proc(dbpcl_id, txnpcl_id, sdbpcl_id,
return;
}
+/* BEGIN __db_get_bt_minkey_proc */
+/*
+ * PUBLIC: void __db_get_bt_minkey_proc __P((long,
+ * PUBLIC: __db_get_bt_minkey_reply *));
+ */
+void
+__db_get_bt_minkey_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_bt_minkey_reply *replyp;
+/* END __db_get_bt_minkey_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_bt_minkey(dbp, &replyp->minkey);
+}
+
/* BEGIN __db_bt_minkey_proc */
/*
* PUBLIC: void __db_bt_minkey_proc __P((long, u_int32_t,
@@ -803,6 +924,26 @@ __db_del_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
+/* BEGIN __db_get_encrypt_flags_proc */
+/*
+ * PUBLIC: void __db_get_encrypt_flags_proc __P((long,
+ * PUBLIC: __db_get_encrypt_flags_reply *));
+ */
+void
+__db_get_encrypt_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_encrypt_flags_reply *replyp;
+/* END __db_get_encrypt_flags_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_encrypt_flags(dbp, &replyp->flags);
+}
+
/* BEGIN __db_encrypt_proc */
/*
* PUBLIC: void __db_encrypt_proc __P((long, char *, u_int32_t,
@@ -828,6 +969,26 @@ __db_encrypt_proc(dbpcl_id, passwd, flags, replyp)
return;
}
+/* BEGIN __db_get_extentsize_proc */
+/*
+ * PUBLIC: void __db_get_extentsize_proc __P((long,
+ * PUBLIC: __db_get_extentsize_reply *));
+ */
+void
+__db_get_extentsize_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_extentsize_reply *replyp;
+/* END __db_get_extentsize_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_q_extentsize(dbp, &replyp->extentsize);
+}
+
/* BEGIN __db_extentsize_proc */
/*
* PUBLIC: void __db_extentsize_proc __P((long, u_int32_t,
@@ -853,6 +1014,25 @@ __db_extentsize_proc(dbpcl_id, extentsize, replyp)
return;
}
+/* BEGIN __db_get_flags_proc */
+/*
+ * PUBLIC: void __db_get_flags_proc __P((long, __db_get_flags_reply *));
+ */
+void
+__db_get_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_flags_reply *replyp;
+/* END __db_get_flags_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_flags(dbp, &replyp->flags);
+}
+
/* BEGIN __db_flags_proc */
/*
* PUBLIC: void __db_flags_proc __P((long, u_int32_t, __db_flags_reply *));
@@ -1028,6 +1208,26 @@ err: replyp->keydata.keydata_val = NULL;
return;
}
+/* BEGIN __db_get_h_ffactor_proc */
+/*
+ * PUBLIC: void __db_get_h_ffactor_proc __P((long,
+ * PUBLIC: __db_get_h_ffactor_reply *));
+ */
+void
+__db_get_h_ffactor_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_h_ffactor_reply *replyp;
+/* END __db_get_h_ffactor_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_h_ffactor(dbp, &replyp->ffactor);
+}
+
/* BEGIN __db_h_ffactor_proc */
/*
* PUBLIC: void __db_h_ffactor_proc __P((long, u_int32_t,
@@ -1053,6 +1253,25 @@ __db_h_ffactor_proc(dbpcl_id, ffactor, replyp)
return;
}
+/* BEGIN __db_get_h_nelem_proc */
+/*
+ * PUBLIC: void __db_get_h_nelem_proc __P((long, __db_get_h_nelem_reply *));
+ */
+void
+__db_get_h_nelem_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_h_nelem_reply *replyp;
+/* END __db_get_h_nelem_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_h_nelem(dbp, &replyp->nelem);
+}
+
/* BEGIN __db_h_nelem_proc */
/*
* PUBLIC: void __db_h_nelem_proc __P((long, u_int32_t,
@@ -1132,6 +1351,25 @@ __db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,
return;
}
+/* BEGIN __db_get_lorder_proc */
+/*
+ * PUBLIC: void __db_get_lorder_proc __P((long, __db_get_lorder_reply *));
+ */
+void
+__db_get_lorder_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_lorder_reply *replyp;
+/* END __db_get_lorder_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_lorder(dbp, &replyp->lorder);
+}
+
/* BEGIN __db_lorder_proc */
/*
* PUBLIC: void __db_lorder_proc __P((long, u_int32_t, __db_lorder_reply *));
@@ -1156,6 +1394,46 @@ __db_lorder_proc(dbpcl_id, lorder, replyp)
return;
}
+/* BEGIN __db_get_name_proc */
+/*
+ * PUBLIC: void __db_get_name_proc __P((long, __db_get_name_reply *));
+ */
+void
+__db_get_name_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_name_reply *replyp;
+/* END __db_get_name_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_dbname(dbp,
+ (const char **)&replyp->filename, (const char **)&replyp->dbname);
+}
+
+/* BEGIN __db_get_open_flags_proc */
+/*
+ * PUBLIC: void __db_get_open_flags_proc __P((long,
+ * PUBLIC: __db_get_open_flags_reply *));
+ */
+void
+__db_get_open_flags_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_open_flags_reply *replyp;
+/* END __db_get_open_flags_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_open_flags(dbp, &replyp->flags);
+}
+
/* BEGIN __db_open_proc */
/*
* PUBLIC: void __db_open_proc __P((long, long, char *, char *, u_int32_t,
@@ -1246,6 +1524,25 @@ out:
return;
}
+/* BEGIN __db_get_pagesize_proc */
+/*
+ * PUBLIC: void __db_get_pagesize_proc __P((long, __db_get_pagesize_reply *));
+ */
+void
+__db_get_pagesize_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_pagesize_reply *replyp;
+/* END __db_get_pagesize_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_pagesize(dbp, &replyp->pagesize);
+}
+
/* BEGIN __db_pagesize_proc */
/*
* PUBLIC: void __db_pagesize_proc __P((long, u_int32_t,
@@ -1573,6 +1870,25 @@ err: replyp->keydata.keydata_val = NULL;
return;
}
+/* BEGIN __db_get_re_delim_proc */
+/*
+ * PUBLIC: void __db_get_re_delim_proc __P((long, __db_get_re_delim_reply *));
+ */
+void
+__db_get_re_delim_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_delim_reply *replyp;
+/* END __db_get_re_delim_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_delim(dbp, &replyp->delim);
+}
+
/* BEGIN __db_re_delim_proc */
/*
* PUBLIC: void __db_re_delim_proc __P((long, u_int32_t,
@@ -1598,6 +1914,25 @@ __db_re_delim_proc(dbpcl_id, delim, replyp)
return;
}
+/* BEGIN __db_get_re_len_proc */
+/*
+ * PUBLIC: void __db_get_re_len_proc __P((long, __db_get_re_len_reply *));
+ */
+void
+__db_get_re_len_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_len_reply *replyp;
+/* END __db_get_re_len_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_len(dbp, &replyp->len);
+}
+
/* BEGIN __db_re_len_proc */
/*
* PUBLIC: void __db_re_len_proc __P((long, u_int32_t, __db_re_len_reply *));
@@ -1622,6 +1957,25 @@ __db_re_len_proc(dbpcl_id, len, replyp)
return;
}
+/* BEGIN __db_get_re_pad_proc */
+/*
+ * PUBLIC: void __db_get_re_pad_proc __P((long, __db_get_re_pad_reply *));
+ */
+void
+__db_get_re_pad_proc(dbpcl_id, replyp)
+ long dbpcl_id;
+ __db_get_re_pad_reply *replyp;
+/* END __db_get_re_pad_proc */
+{
+ DB *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (DB *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_pad(dbp, &replyp->pad);
+}
+
/* BEGIN __db_re_pad_proc */
/*
* PUBLIC: void __db_re_pad_proc __P((long, u_int32_t, __db_re_pad_reply *));
diff --git a/db/rpc_server/c/db_server_proc.sed b/db/rpc_server/c/db_server_proc.sed
index e11b2c33c..3f4f25775 100644
--- a/db/rpc_server/c/db_server_proc.sed
+++ b/db/rpc_server/c/db_server_proc.sed
@@ -1,3 +1,15 @@
+/^\/\* BEGIN __env_get_cachesize_proc/,/^\/\* END __env_get_cachesize_proc/c\
+/* BEGIN __env_get_cachesize_proc */\
+/*\
+\ * PUBLIC: void __env_get_cachesize_proc __P((long,\
+\ * PUBLIC: __env_get_cachesize_reply *));\
+\ */\
+void\
+__env_get_cachesize_proc(dbenvcl_id,\
+\ \ replyp)\
+\ long dbenvcl_id;\
+\ __env_get_cachesize_reply *replyp;\
+/* END __env_get_cachesize_proc */
/^\/\* BEGIN __env_cachesize_proc/,/^\/\* END __env_cachesize_proc/c\
/* BEGIN __env_cachesize_proc */\
/*\
@@ -67,6 +79,17 @@ __env_dbrename_proc(dbenvcl_id, txnpcl_id, name,\
\ u_int32_t flags;\
\ __env_dbrename_reply *replyp;\
/* END __env_dbrename_proc */
+/^\/\* BEGIN __env_get_encrypt_flags_proc/,/^\/\* END __env_get_encrypt_flags_proc/c\
+/* BEGIN __env_get_encrypt_flags_proc */\
+/*\
+\ * PUBLIC: void __env_get_encrypt_flags_proc __P((long,\
+\ * PUBLIC: __env_get_encrypt_flags_reply *));\
+\ */\
+void\
+__env_get_encrypt_flags_proc(dbenvcl_id, replyp)\
+\ long dbenvcl_id;\
+\ __env_get_encrypt_flags_reply *replyp;\
+/* END __env_get_encrypt_flags_proc */
/^\/\* BEGIN __env_encrypt_proc/,/^\/\* END __env_encrypt_proc/c\
/* BEGIN __env_encrypt_proc */\
/*\
@@ -80,6 +103,16 @@ __env_encrypt_proc(dbenvcl_id, passwd, flags, replyp)\
\ u_int32_t flags;\
\ __env_encrypt_reply *replyp;\
/* END __env_encrypt_proc */
+/^\/\* BEGIN __env_get_flags_proc/,/^\/\* END __env_get_flags_proc/c\
+/* BEGIN __env_get_flags_proc */\
+/*\
+\ * PUBLIC: void __env_get_flags_proc __P((long, __env_get_flags_reply *));\
+\ */\
+void\
+__env_get_flags_proc(dbenvcl_id, replyp)\
+\ long dbenvcl_id;\
+\ __env_get_flags_reply *replyp;\
+/* END __env_get_flags_proc */
/^\/\* BEGIN __env_flags_proc/,/^\/\* END __env_flags_proc/c\
/* BEGIN __env_flags_proc */\
/*\
@@ -93,6 +126,27 @@ __env_flags_proc(dbenvcl_id, flags, onoff, replyp)\
\ u_int32_t onoff;\
\ __env_flags_reply *replyp;\
/* END __env_flags_proc */
+/^\/\* BEGIN __env_get_home_proc/,/^\/\* END __env_get_home_proc/c\
+/* BEGIN __env_get_home_proc */\
+/*\
+\ * PUBLIC: void __env_get_home_proc __P((long, __env_get_home_reply *));\
+\ */\
+void\
+__env_get_home_proc(dbenvcl_id, replyp)\
+\ long dbenvcl_id;\
+\ __env_get_home_reply *replyp;\
+/* END __env_get_home_proc */
+/^\/\* BEGIN __env_get_open_flags_proc/,/^\/\* END __env_get_open_flags_proc/c\
+/* BEGIN __env_get_open_flags_proc */\
+/*\
+\ * PUBLIC: void __env_get_open_flags_proc __P((long,\
+\ * PUBLIC: __env_get_open_flags_reply *));\
+\ */\
+void\
+__env_get_open_flags_proc(dbenvcl_id, replyp)\
+\ long dbenvcl_id;\
+\ __env_get_open_flags_reply *replyp;\
+/* END __env_get_open_flags_proc */
/^\/\* BEGIN __env_open_proc/,/^\/\* END __env_open_proc/c\
/* BEGIN __env_open_proc */\
/*\
@@ -223,6 +277,17 @@ __db_bt_maxkey_proc(dbpcl_id, maxkey, replyp)\
\ u_int32_t maxkey;\
\ __db_bt_maxkey_reply *replyp;\
/* END __db_bt_maxkey_proc */
+/^\/\* BEGIN __db_get_bt_minkey_proc/,/^\/\* END __db_get_bt_minkey_proc/c\
+/* BEGIN __db_get_bt_minkey_proc */\
+/*\
+\ * PUBLIC: void __db_get_bt_minkey_proc __P((long,\
+\ * PUBLIC: __db_get_bt_minkey_reply *));\
+\ */\
+void\
+__db_get_bt_minkey_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_bt_minkey_reply *replyp;\
+/* END __db_get_bt_minkey_proc */
/^\/\* BEGIN __db_bt_minkey_proc/,/^\/\* END __db_bt_minkey_proc/c\
/* BEGIN __db_bt_minkey_proc */\
/*\
@@ -278,6 +343,17 @@ __db_del_proc(dbpcl_id, txnpcl_id, keydlen,\
\ u_int32_t flags;\
\ __db_del_reply *replyp;\
/* END __db_del_proc */
+/^\/\* BEGIN __db_get_encrypt_flags_proc/,/^\/\* END __db_get_encrypt_flags_proc/c\
+/* BEGIN __db_get_encrypt_flags_proc */\
+/*\
+\ * PUBLIC: void __db_get_encrypt_flags_proc __P((long,\
+\ * PUBLIC: __db_get_encrypt_flags_reply *));\
+\ */\
+void\
+__db_get_encrypt_flags_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_encrypt_flags_reply *replyp;\
+/* END __db_get_encrypt_flags_proc */
/^\/\* BEGIN __db_encrypt_proc/,/^\/\* END __db_encrypt_proc/c\
/* BEGIN __db_encrypt_proc */\
/*\
@@ -291,6 +367,17 @@ __db_encrypt_proc(dbpcl_id, passwd, flags, replyp)\
\ u_int32_t flags;\
\ __db_encrypt_reply *replyp;\
/* END __db_encrypt_proc */
+/^\/\* BEGIN __db_get_extentsize_proc/,/^\/\* END __db_get_extentsize_proc/c\
+/* BEGIN __db_get_extentsize_proc */\
+/*\
+\ * PUBLIC: void __db_get_extentsize_proc __P((long,\
+\ * PUBLIC: __db_get_extentsize_reply *));\
+\ */\
+void\
+__db_get_extentsize_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_extentsize_reply *replyp;\
+/* END __db_get_extentsize_proc */
/^\/\* BEGIN __db_extentsize_proc/,/^\/\* END __db_extentsize_proc/c\
/* BEGIN __db_extentsize_proc */\
/*\
@@ -303,6 +390,16 @@ __db_extentsize_proc(dbpcl_id, extentsize, replyp)\
\ u_int32_t extentsize;\
\ __db_extentsize_reply *replyp;\
/* END __db_extentsize_proc */
+/^\/\* BEGIN __db_get_flags_proc/,/^\/\* END __db_get_flags_proc/c\
+/* BEGIN __db_get_flags_proc */\
+/*\
+\ * PUBLIC: void __db_get_flags_proc __P((long, __db_get_flags_reply *));\
+\ */\
+void\
+__db_get_flags_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_flags_reply *replyp;\
+/* END __db_get_flags_proc */
/^\/\* BEGIN __db_flags_proc/,/^\/\* END __db_flags_proc/c\
/* BEGIN __db_flags_proc */\
/*\
@@ -344,6 +441,38 @@ __db_get_proc(dbpcl_id, txnpcl_id, keydlen,\
\ __db_get_reply *replyp;\
\ int * freep;\
/* END __db_get_proc */
+/^\/\* BEGIN __db_get_name_proc/,/^\/\* END __db_get_name_proc/c\
+/* BEGIN __db_get_name_proc */\
+/*\
+\ * PUBLIC: void __db_get_name_proc __P((long, __db_get_name_reply *));\
+\ */\
+void\
+__db_get_name_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_name_reply *replyp;\
+/* END __db_get_name_proc */
+/^\/\* BEGIN __db_get_open_flags_proc/,/^\/\* END __db_get_open_flags_proc/c\
+/* BEGIN __db_get_open_flags_proc */\
+/*\
+\ * PUBLIC: void __db_get_open_flags_proc __P((long,\
+\ * PUBLIC: __db_get_open_flags_reply *));\
+\ */\
+void\
+__db_get_open_flags_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_open_flags_reply *replyp;\
+/* END __db_get_open_flags_proc */
+/^\/\* BEGIN __db_get_h_ffactor_proc/,/^\/\* END __db_get_h_ffactor_proc/c\
+/* BEGIN __db_get_h_ffactor_proc */\
+/*\
+\ * PUBLIC: void __db_get_h_ffactor_proc __P((long,\
+\ * PUBLIC: __db_get_h_ffactor_reply *));\
+\ */\
+void\
+__db_get_h_ffactor_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_h_ffactor_reply *replyp;\
+/* END __db_get_h_ffactor_proc */
/^\/\* BEGIN __db_h_ffactor_proc/,/^\/\* END __db_h_ffactor_proc/c\
/* BEGIN __db_h_ffactor_proc */\
/*\
@@ -356,6 +485,16 @@ __db_h_ffactor_proc(dbpcl_id, ffactor, replyp)\
\ u_int32_t ffactor;\
\ __db_h_ffactor_reply *replyp;\
/* END __db_h_ffactor_proc */
+/^\/\* BEGIN __db_get_h_nelem_proc/,/^\/\* END __db_get_h_nelem_proc/c\
+/* BEGIN __db_get_h_nelem_proc */\
+/*\
+\ * PUBLIC: void __db_get_h_nelem_proc __P((long, __db_get_h_nelem_reply *));\
+\ */\
+void\
+__db_get_h_nelem_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_h_nelem_reply *replyp;\
+/* END __db_get_h_nelem_proc */
/^\/\* BEGIN __db_h_nelem_proc/,/^\/\* END __db_h_nelem_proc/c\
/* BEGIN __db_h_nelem_proc */\
/*\
@@ -389,6 +528,16 @@ __db_key_range_proc(dbpcl_id, txnpcl_id, keydlen,\
\ u_int32_t flags;\
\ __db_key_range_reply *replyp;\
/* END __db_key_range_proc */
+/^\/\* BEGIN __db_get_lorder_proc/,/^\/\* END __db_get_lorder_proc/c\
+/* BEGIN __db_get_lorder_proc */\
+/*\
+\ * PUBLIC: void __db_get_lorder_proc __P((long, __db_get_lorder_reply *));\
+\ */\
+void\
+__db_get_lorder_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_lorder_reply *replyp;\
+/* END __db_get_lorder_proc */
/^\/\* BEGIN __db_lorder_proc/,/^\/\* END __db_lorder_proc/c\
/* BEGIN __db_lorder_proc */\
/*\
@@ -418,6 +567,16 @@ __db_open_proc(dbpcl_id, txnpcl_id, name,\
\ u_int32_t mode;\
\ __db_open_reply *replyp;\
/* END __db_open_proc */
+/^\/\* BEGIN __db_get_pagesize_proc/,/^\/\* END __db_get_pagesize_proc/c\
+/* BEGIN __db_get_pagesize_proc */\
+/*\
+\ * PUBLIC: void __db_get_pagesize_proc __P((long, __db_get_pagesize_reply *));\
+\ */\
+void\
+__db_get_pagesize_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_pagesize_reply *replyp;\
+/* END __db_get_pagesize_proc */
/^\/\* BEGIN __db_pagesize_proc/,/^\/\* END __db_pagesize_proc/c\
/* BEGIN __db_pagesize_proc */\
/*\
@@ -499,6 +658,16 @@ __db_put_proc(dbpcl_id, txnpcl_id, keydlen,\
\ __db_put_reply *replyp;\
\ int * freep;\
/* END __db_put_proc */
+/^\/\* BEGIN __db_get_re_delim_proc/,/^\/\* END __db_get_re_delim_proc/c\
+/* BEGIN __db_get_re_delim_proc */\
+/*\
+\ * PUBLIC: void __db_get_re_delim_proc __P((long, __db_get_re_delim_reply *));\
+\ */\
+void\
+__db_get_re_delim_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_re_delim_reply *replyp;\
+/* END __db_get_re_delim_proc */
/^\/\* BEGIN __db_re_delim_proc/,/^\/\* END __db_re_delim_proc/c\
/* BEGIN __db_re_delim_proc */\
/*\
@@ -511,6 +680,16 @@ __db_re_delim_proc(dbpcl_id, delim, replyp)\
\ u_int32_t delim;\
\ __db_re_delim_reply *replyp;\
/* END __db_re_delim_proc */
+/^\/\* BEGIN __db_get_re_len_proc/,/^\/\* END __db_get_re_len_proc/c\
+/* BEGIN __db_get_re_len_proc */\
+/*\
+\ * PUBLIC: void __db_get_re_len_proc __P((long, __db_get_re_len_reply *));\
+\ */\
+void\
+__db_get_re_len_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_re_len_reply *replyp;\
+/* END __db_get_re_len_proc */
/^\/\* BEGIN __db_re_len_proc/,/^\/\* END __db_re_len_proc/c\
/* BEGIN __db_re_len_proc */\
/*\
@@ -533,6 +712,16 @@ __db_re_pad_proc(dbpcl_id, pad, replyp)\
\ u_int32_t pad;\
\ __db_re_pad_reply *replyp;\
/* END __db_re_pad_proc */
+/^\/\* BEGIN __db_get_re_pad_proc/,/^\/\* END __db_get_re_pad_proc/c\
+/* BEGIN __db_get_re_pad_proc */\
+/*\
+\ * PUBLIC: void __db_get_re_pad_proc __P((long, __db_get_re_pad_reply *));\
+\ */\
+void\
+__db_get_re_pad_proc(dbpcl_id, replyp)\
+\ long dbpcl_id;\
+\ __db_get_re_pad_reply *replyp;\
+/* END __db_get_re_pad_proc */
/^\/\* BEGIN __db_remove_proc/,/^\/\* END __db_remove_proc/c\
/* BEGIN __db_remove_proc */\
/*\
diff --git a/db/rpc_server/c/db_server_svc.c b/db/rpc_server/c/db_server_svc.c
index 96dd959ec..3aca06a61 100644
--- a/db/rpc_server/c/db_server_svc.c
+++ b/db/rpc_server/c/db_server_svc.c
@@ -25,61 +25,79 @@
#endif
static void
-db_rpc_serverprog_4001(rqstp, transp)
+db_rpc_serverprog_4002(rqstp, transp)
struct svc_req *rqstp;
register SVCXPRT *transp;
{
union {
- __env_cachesize_msg __db_env_cachesize_4001_arg;
- __env_close_msg __db_env_close_4001_arg;
- __env_create_msg __db_env_create_4001_arg;
- __env_dbremove_msg __db_env_dbremove_4001_arg;
- __env_dbrename_msg __db_env_dbrename_4001_arg;
- __env_encrypt_msg __db_env_encrypt_4001_arg;
- __env_flags_msg __db_env_flags_4001_arg;
- __env_open_msg __db_env_open_4001_arg;
- __env_remove_msg __db_env_remove_4001_arg;
- __txn_abort_msg __db_txn_abort_4001_arg;
- __txn_begin_msg __db_txn_begin_4001_arg;
- __txn_commit_msg __db_txn_commit_4001_arg;
- __txn_discard_msg __db_txn_discard_4001_arg;
- __txn_prepare_msg __db_txn_prepare_4001_arg;
- __txn_recover_msg __db_txn_recover_4001_arg;
- __db_associate_msg __db_db_associate_4001_arg;
- __db_bt_maxkey_msg __db_db_bt_maxkey_4001_arg;
- __db_bt_minkey_msg __db_db_bt_minkey_4001_arg;
- __db_close_msg __db_db_close_4001_arg;
- __db_create_msg __db_db_create_4001_arg;
- __db_del_msg __db_db_del_4001_arg;
- __db_encrypt_msg __db_db_encrypt_4001_arg;
- __db_extentsize_msg __db_db_extentsize_4001_arg;
- __db_flags_msg __db_db_flags_4001_arg;
- __db_get_msg __db_db_get_4001_arg;
- __db_h_ffactor_msg __db_db_h_ffactor_4001_arg;
- __db_h_nelem_msg __db_db_h_nelem_4001_arg;
- __db_key_range_msg __db_db_key_range_4001_arg;
- __db_lorder_msg __db_db_lorder_4001_arg;
- __db_open_msg __db_db_open_4001_arg;
- __db_pagesize_msg __db_db_pagesize_4001_arg;
- __db_pget_msg __db_db_pget_4001_arg;
- __db_put_msg __db_db_put_4001_arg;
- __db_re_delim_msg __db_db_re_delim_4001_arg;
- __db_re_len_msg __db_db_re_len_4001_arg;
- __db_re_pad_msg __db_db_re_pad_4001_arg;
- __db_remove_msg __db_db_remove_4001_arg;
- __db_rename_msg __db_db_rename_4001_arg;
- __db_stat_msg __db_db_stat_4001_arg;
- __db_sync_msg __db_db_sync_4001_arg;
- __db_truncate_msg __db_db_truncate_4001_arg;
- __db_cursor_msg __db_db_cursor_4001_arg;
- __db_join_msg __db_db_join_4001_arg;
- __dbc_close_msg __db_dbc_close_4001_arg;
- __dbc_count_msg __db_dbc_count_4001_arg;
- __dbc_del_msg __db_dbc_del_4001_arg;
- __dbc_dup_msg __db_dbc_dup_4001_arg;
- __dbc_get_msg __db_dbc_get_4001_arg;
- __dbc_pget_msg __db_dbc_pget_4001_arg;
- __dbc_put_msg __db_dbc_put_4001_arg;
+ __env_get_cachesize_msg __db_env_get_cachesize_4002_arg;
+ __env_cachesize_msg __db_env_cachesize_4002_arg;
+ __env_close_msg __db_env_close_4002_arg;
+ __env_create_msg __db_env_create_4002_arg;
+ __env_dbremove_msg __db_env_dbremove_4002_arg;
+ __env_dbrename_msg __db_env_dbrename_4002_arg;
+ __env_get_encrypt_flags_msg __db_env_get_encrypt_flags_4002_arg;
+ __env_encrypt_msg __db_env_encrypt_4002_arg;
+ __env_get_flags_msg __db_env_get_flags_4002_arg;
+ __env_flags_msg __db_env_flags_4002_arg;
+ __env_get_home_msg __db_env_get_home_4002_arg;
+ __env_get_open_flags_msg __db_env_get_open_flags_4002_arg;
+ __env_open_msg __db_env_open_4002_arg;
+ __env_remove_msg __db_env_remove_4002_arg;
+ __txn_abort_msg __db_txn_abort_4002_arg;
+ __txn_begin_msg __db_txn_begin_4002_arg;
+ __txn_commit_msg __db_txn_commit_4002_arg;
+ __txn_discard_msg __db_txn_discard_4002_arg;
+ __txn_prepare_msg __db_txn_prepare_4002_arg;
+ __txn_recover_msg __db_txn_recover_4002_arg;
+ __db_associate_msg __db_db_associate_4002_arg;
+ __db_bt_maxkey_msg __db_db_bt_maxkey_4002_arg;
+ __db_get_bt_minkey_msg __db_db_get_bt_minkey_4002_arg;
+ __db_bt_minkey_msg __db_db_bt_minkey_4002_arg;
+ __db_close_msg __db_db_close_4002_arg;
+ __db_create_msg __db_db_create_4002_arg;
+ __db_del_msg __db_db_del_4002_arg;
+ __db_get_encrypt_flags_msg __db_db_get_encrypt_flags_4002_arg;
+ __db_encrypt_msg __db_db_encrypt_4002_arg;
+ __db_get_extentsize_msg __db_db_get_extentsize_4002_arg;
+ __db_extentsize_msg __db_db_extentsize_4002_arg;
+ __db_get_flags_msg __db_db_get_flags_4002_arg;
+ __db_flags_msg __db_db_flags_4002_arg;
+ __db_get_msg __db_db_get_4002_arg;
+ __db_get_name_msg __db_db_get_name_4002_arg;
+ __db_get_open_flags_msg __db_db_get_open_flags_4002_arg;
+ __db_get_h_ffactor_msg __db_db_get_h_ffactor_4002_arg;
+ __db_h_ffactor_msg __db_db_h_ffactor_4002_arg;
+ __db_get_h_nelem_msg __db_db_get_h_nelem_4002_arg;
+ __db_h_nelem_msg __db_db_h_nelem_4002_arg;
+ __db_key_range_msg __db_db_key_range_4002_arg;
+ __db_get_lorder_msg __db_db_get_lorder_4002_arg;
+ __db_lorder_msg __db_db_lorder_4002_arg;
+ __db_open_msg __db_db_open_4002_arg;
+ __db_get_pagesize_msg __db_db_get_pagesize_4002_arg;
+ __db_pagesize_msg __db_db_pagesize_4002_arg;
+ __db_pget_msg __db_db_pget_4002_arg;
+ __db_put_msg __db_db_put_4002_arg;
+ __db_get_re_delim_msg __db_db_get_re_delim_4002_arg;
+ __db_re_delim_msg __db_db_re_delim_4002_arg;
+ __db_get_re_len_msg __db_db_get_re_len_4002_arg;
+ __db_re_len_msg __db_db_re_len_4002_arg;
+ __db_re_pad_msg __db_db_re_pad_4002_arg;
+ __db_get_re_pad_msg __db_db_get_re_pad_4002_arg;
+ __db_remove_msg __db_db_remove_4002_arg;
+ __db_rename_msg __db_db_rename_4002_arg;
+ __db_stat_msg __db_db_stat_4002_arg;
+ __db_sync_msg __db_db_sync_4002_arg;
+ __db_truncate_msg __db_db_truncate_4002_arg;
+ __db_cursor_msg __db_db_cursor_4002_arg;
+ __db_join_msg __db_db_join_4002_arg;
+ __dbc_close_msg __db_dbc_close_4002_arg;
+ __dbc_count_msg __db_dbc_count_4002_arg;
+ __dbc_del_msg __db_dbc_del_4002_arg;
+ __dbc_dup_msg __db_dbc_dup_4002_arg;
+ __dbc_get_msg __db_dbc_get_4002_arg;
+ __dbc_pget_msg __db_dbc_pget_4002_arg;
+ __dbc_put_msg __db_dbc_put_4002_arg;
} argument;
char *result;
bool_t (*xdr_argument)(), (*xdr_result)();
@@ -91,304 +109,412 @@ db_rpc_serverprog_4001(rqstp, transp)
(char *)NULL);
return;
+ case __DB_env_get_cachesize:
+ xdr_argument = xdr___env_get_cachesize_msg;
+ xdr_result = xdr___env_get_cachesize_reply;
+ local = (char *(*)()) __db_env_get_cachesize_4002;
+ break;
+
case __DB_env_cachesize:
xdr_argument = xdr___env_cachesize_msg;
xdr_result = xdr___env_cachesize_reply;
- local = (char *(*)()) __db_env_cachesize_4001;
+ local = (char *(*)()) __db_env_cachesize_4002;
break;
case __DB_env_close:
xdr_argument = xdr___env_close_msg;
xdr_result = xdr___env_close_reply;
- local = (char *(*)()) __db_env_close_4001;
+ local = (char *(*)()) __db_env_close_4002;
break;
case __DB_env_create:
xdr_argument = xdr___env_create_msg;
xdr_result = xdr___env_create_reply;
- local = (char *(*)()) __db_env_create_4001;
+ local = (char *(*)()) __db_env_create_4002;
break;
case __DB_env_dbremove:
xdr_argument = xdr___env_dbremove_msg;
xdr_result = xdr___env_dbremove_reply;
- local = (char *(*)()) __db_env_dbremove_4001;
+ local = (char *(*)()) __db_env_dbremove_4002;
break;
case __DB_env_dbrename:
xdr_argument = xdr___env_dbrename_msg;
xdr_result = xdr___env_dbrename_reply;
- local = (char *(*)()) __db_env_dbrename_4001;
+ local = (char *(*)()) __db_env_dbrename_4002;
+ break;
+
+ case __DB_env_get_encrypt_flags:
+ xdr_argument = xdr___env_get_encrypt_flags_msg;
+ xdr_result = xdr___env_get_encrypt_flags_reply;
+ local = (char *(*)()) __db_env_get_encrypt_flags_4002;
break;
case __DB_env_encrypt:
xdr_argument = xdr___env_encrypt_msg;
xdr_result = xdr___env_encrypt_reply;
- local = (char *(*)()) __db_env_encrypt_4001;
+ local = (char *(*)()) __db_env_encrypt_4002;
+ break;
+
+ case __DB_env_get_flags:
+ xdr_argument = xdr___env_get_flags_msg;
+ xdr_result = xdr___env_get_flags_reply;
+ local = (char *(*)()) __db_env_get_flags_4002;
break;
case __DB_env_flags:
xdr_argument = xdr___env_flags_msg;
xdr_result = xdr___env_flags_reply;
- local = (char *(*)()) __db_env_flags_4001;
+ local = (char *(*)()) __db_env_flags_4002;
+ break;
+
+ case __DB_env_get_home:
+ xdr_argument = xdr___env_get_home_msg;
+ xdr_result = xdr___env_get_home_reply;
+ local = (char *(*)()) __db_env_get_home_4002;
+ break;
+
+ case __DB_env_get_open_flags:
+ xdr_argument = xdr___env_get_open_flags_msg;
+ xdr_result = xdr___env_get_open_flags_reply;
+ local = (char *(*)()) __db_env_get_open_flags_4002;
break;
case __DB_env_open:
xdr_argument = xdr___env_open_msg;
xdr_result = xdr___env_open_reply;
- local = (char *(*)()) __db_env_open_4001;
+ local = (char *(*)()) __db_env_open_4002;
break;
case __DB_env_remove:
xdr_argument = xdr___env_remove_msg;
xdr_result = xdr___env_remove_reply;
- local = (char *(*)()) __db_env_remove_4001;
+ local = (char *(*)()) __db_env_remove_4002;
break;
case __DB_txn_abort:
xdr_argument = xdr___txn_abort_msg;
xdr_result = xdr___txn_abort_reply;
- local = (char *(*)()) __db_txn_abort_4001;
+ local = (char *(*)()) __db_txn_abort_4002;
break;
case __DB_txn_begin:
xdr_argument = xdr___txn_begin_msg;
xdr_result = xdr___txn_begin_reply;
- local = (char *(*)()) __db_txn_begin_4001;
+ local = (char *(*)()) __db_txn_begin_4002;
break;
case __DB_txn_commit:
xdr_argument = xdr___txn_commit_msg;
xdr_result = xdr___txn_commit_reply;
- local = (char *(*)()) __db_txn_commit_4001;
+ local = (char *(*)()) __db_txn_commit_4002;
break;
case __DB_txn_discard:
xdr_argument = xdr___txn_discard_msg;
xdr_result = xdr___txn_discard_reply;
- local = (char *(*)()) __db_txn_discard_4001;
+ local = (char *(*)()) __db_txn_discard_4002;
break;
case __DB_txn_prepare:
xdr_argument = xdr___txn_prepare_msg;
xdr_result = xdr___txn_prepare_reply;
- local = (char *(*)()) __db_txn_prepare_4001;
+ local = (char *(*)()) __db_txn_prepare_4002;
break;
case __DB_txn_recover:
xdr_argument = xdr___txn_recover_msg;
xdr_result = xdr___txn_recover_reply;
- local = (char *(*)()) __db_txn_recover_4001;
+ local = (char *(*)()) __db_txn_recover_4002;
break;
case __DB_db_associate:
xdr_argument = xdr___db_associate_msg;
xdr_result = xdr___db_associate_reply;
- local = (char *(*)()) __db_db_associate_4001;
+ local = (char *(*)()) __db_db_associate_4002;
break;
case __DB_db_bt_maxkey:
xdr_argument = xdr___db_bt_maxkey_msg;
xdr_result = xdr___db_bt_maxkey_reply;
- local = (char *(*)()) __db_db_bt_maxkey_4001;
+ local = (char *(*)()) __db_db_bt_maxkey_4002;
+ break;
+
+ case __DB_db_get_bt_minkey:
+ xdr_argument = xdr___db_get_bt_minkey_msg;
+ xdr_result = xdr___db_get_bt_minkey_reply;
+ local = (char *(*)()) __db_db_get_bt_minkey_4002;
break;
case __DB_db_bt_minkey:
xdr_argument = xdr___db_bt_minkey_msg;
xdr_result = xdr___db_bt_minkey_reply;
- local = (char *(*)()) __db_db_bt_minkey_4001;
+ local = (char *(*)()) __db_db_bt_minkey_4002;
break;
case __DB_db_close:
xdr_argument = xdr___db_close_msg;
xdr_result = xdr___db_close_reply;
- local = (char *(*)()) __db_db_close_4001;
+ local = (char *(*)()) __db_db_close_4002;
break;
case __DB_db_create:
xdr_argument = xdr___db_create_msg;
xdr_result = xdr___db_create_reply;
- local = (char *(*)()) __db_db_create_4001;
+ local = (char *(*)()) __db_db_create_4002;
break;
case __DB_db_del:
xdr_argument = xdr___db_del_msg;
xdr_result = xdr___db_del_reply;
- local = (char *(*)()) __db_db_del_4001;
+ local = (char *(*)()) __db_db_del_4002;
+ break;
+
+ case __DB_db_get_encrypt_flags:
+ xdr_argument = xdr___db_get_encrypt_flags_msg;
+ xdr_result = xdr___db_get_encrypt_flags_reply;
+ local = (char *(*)()) __db_db_get_encrypt_flags_4002;
break;
case __DB_db_encrypt:
xdr_argument = xdr___db_encrypt_msg;
xdr_result = xdr___db_encrypt_reply;
- local = (char *(*)()) __db_db_encrypt_4001;
+ local = (char *(*)()) __db_db_encrypt_4002;
+ break;
+
+ case __DB_db_get_extentsize:
+ xdr_argument = xdr___db_get_extentsize_msg;
+ xdr_result = xdr___db_get_extentsize_reply;
+ local = (char *(*)()) __db_db_get_extentsize_4002;
break;
case __DB_db_extentsize:
xdr_argument = xdr___db_extentsize_msg;
xdr_result = xdr___db_extentsize_reply;
- local = (char *(*)()) __db_db_extentsize_4001;
+ local = (char *(*)()) __db_db_extentsize_4002;
+ break;
+
+ case __DB_db_get_flags:
+ xdr_argument = xdr___db_get_flags_msg;
+ xdr_result = xdr___db_get_flags_reply;
+ local = (char *(*)()) __db_db_get_flags_4002;
break;
case __DB_db_flags:
xdr_argument = xdr___db_flags_msg;
xdr_result = xdr___db_flags_reply;
- local = (char *(*)()) __db_db_flags_4001;
+ local = (char *(*)()) __db_db_flags_4002;
break;
case __DB_db_get:
xdr_argument = xdr___db_get_msg;
xdr_result = xdr___db_get_reply;
- local = (char *(*)()) __db_db_get_4001;
+ local = (char *(*)()) __db_db_get_4002;
+ break;
+
+ case __DB_db_get_name:
+ xdr_argument = xdr___db_get_name_msg;
+ xdr_result = xdr___db_get_name_reply;
+ local = (char *(*)()) __db_db_get_name_4002;
+ break;
+
+ case __DB_db_get_open_flags:
+ xdr_argument = xdr___db_get_open_flags_msg;
+ xdr_result = xdr___db_get_open_flags_reply;
+ local = (char *(*)()) __db_db_get_open_flags_4002;
+ break;
+
+ case __DB_db_get_h_ffactor:
+ xdr_argument = xdr___db_get_h_ffactor_msg;
+ xdr_result = xdr___db_get_h_ffactor_reply;
+ local = (char *(*)()) __db_db_get_h_ffactor_4002;
break;
case __DB_db_h_ffactor:
xdr_argument = xdr___db_h_ffactor_msg;
xdr_result = xdr___db_h_ffactor_reply;
- local = (char *(*)()) __db_db_h_ffactor_4001;
+ local = (char *(*)()) __db_db_h_ffactor_4002;
+ break;
+
+ case __DB_db_get_h_nelem:
+ xdr_argument = xdr___db_get_h_nelem_msg;
+ xdr_result = xdr___db_get_h_nelem_reply;
+ local = (char *(*)()) __db_db_get_h_nelem_4002;
break;
case __DB_db_h_nelem:
xdr_argument = xdr___db_h_nelem_msg;
xdr_result = xdr___db_h_nelem_reply;
- local = (char *(*)()) __db_db_h_nelem_4001;
+ local = (char *(*)()) __db_db_h_nelem_4002;
break;
case __DB_db_key_range:
xdr_argument = xdr___db_key_range_msg;
xdr_result = xdr___db_key_range_reply;
- local = (char *(*)()) __db_db_key_range_4001;
+ local = (char *(*)()) __db_db_key_range_4002;
+ break;
+
+ case __DB_db_get_lorder:
+ xdr_argument = xdr___db_get_lorder_msg;
+ xdr_result = xdr___db_get_lorder_reply;
+ local = (char *(*)()) __db_db_get_lorder_4002;
break;
case __DB_db_lorder:
xdr_argument = xdr___db_lorder_msg;
xdr_result = xdr___db_lorder_reply;
- local = (char *(*)()) __db_db_lorder_4001;
+ local = (char *(*)()) __db_db_lorder_4002;
break;
case __DB_db_open:
xdr_argument = xdr___db_open_msg;
xdr_result = xdr___db_open_reply;
- local = (char *(*)()) __db_db_open_4001;
+ local = (char *(*)()) __db_db_open_4002;
+ break;
+
+ case __DB_db_get_pagesize:
+ xdr_argument = xdr___db_get_pagesize_msg;
+ xdr_result = xdr___db_get_pagesize_reply;
+ local = (char *(*)()) __db_db_get_pagesize_4002;
break;
case __DB_db_pagesize:
xdr_argument = xdr___db_pagesize_msg;
xdr_result = xdr___db_pagesize_reply;
- local = (char *(*)()) __db_db_pagesize_4001;
+ local = (char *(*)()) __db_db_pagesize_4002;
break;
case __DB_db_pget:
xdr_argument = xdr___db_pget_msg;
xdr_result = xdr___db_pget_reply;
- local = (char *(*)()) __db_db_pget_4001;
+ local = (char *(*)()) __db_db_pget_4002;
break;
case __DB_db_put:
xdr_argument = xdr___db_put_msg;
xdr_result = xdr___db_put_reply;
- local = (char *(*)()) __db_db_put_4001;
+ local = (char *(*)()) __db_db_put_4002;
+ break;
+
+ case __DB_db_get_re_delim:
+ xdr_argument = xdr___db_get_re_delim_msg;
+ xdr_result = xdr___db_get_re_delim_reply;
+ local = (char *(*)()) __db_db_get_re_delim_4002;
break;
case __DB_db_re_delim:
xdr_argument = xdr___db_re_delim_msg;
xdr_result = xdr___db_re_delim_reply;
- local = (char *(*)()) __db_db_re_delim_4001;
+ local = (char *(*)()) __db_db_re_delim_4002;
+ break;
+
+ case __DB_db_get_re_len:
+ xdr_argument = xdr___db_get_re_len_msg;
+ xdr_result = xdr___db_get_re_len_reply;
+ local = (char *(*)()) __db_db_get_re_len_4002;
break;
case __DB_db_re_len:
xdr_argument = xdr___db_re_len_msg;
xdr_result = xdr___db_re_len_reply;
- local = (char *(*)()) __db_db_re_len_4001;
+ local = (char *(*)()) __db_db_re_len_4002;
break;
case __DB_db_re_pad:
xdr_argument = xdr___db_re_pad_msg;
xdr_result = xdr___db_re_pad_reply;
- local = (char *(*)()) __db_db_re_pad_4001;
+ local = (char *(*)()) __db_db_re_pad_4002;
+ break;
+
+ case __DB_db_get_re_pad:
+ xdr_argument = xdr___db_get_re_pad_msg;
+ xdr_result = xdr___db_get_re_pad_reply;
+ local = (char *(*)()) __db_db_get_re_pad_4002;
break;
case __DB_db_remove:
xdr_argument = xdr___db_remove_msg;
xdr_result = xdr___db_remove_reply;
- local = (char *(*)()) __db_db_remove_4001;
+ local = (char *(*)()) __db_db_remove_4002;
break;
case __DB_db_rename:
xdr_argument = xdr___db_rename_msg;
xdr_result = xdr___db_rename_reply;
- local = (char *(*)()) __db_db_rename_4001;
+ local = (char *(*)()) __db_db_rename_4002;
break;
case __DB_db_stat:
xdr_argument = xdr___db_stat_msg;
xdr_result = xdr___db_stat_reply;
- local = (char *(*)()) __db_db_stat_4001;
+ local = (char *(*)()) __db_db_stat_4002;
break;
case __DB_db_sync:
xdr_argument = xdr___db_sync_msg;
xdr_result = xdr___db_sync_reply;
- local = (char *(*)()) __db_db_sync_4001;
+ local = (char *(*)()) __db_db_sync_4002;
break;
case __DB_db_truncate:
xdr_argument = xdr___db_truncate_msg;
xdr_result = xdr___db_truncate_reply;
- local = (char *(*)()) __db_db_truncate_4001;
+ local = (char *(*)()) __db_db_truncate_4002;
break;
case __DB_db_cursor:
xdr_argument = xdr___db_cursor_msg;
xdr_result = xdr___db_cursor_reply;
- local = (char *(*)()) __db_db_cursor_4001;
+ local = (char *(*)()) __db_db_cursor_4002;
break;
case __DB_db_join:
xdr_argument = xdr___db_join_msg;
xdr_result = xdr___db_join_reply;
- local = (char *(*)()) __db_db_join_4001;
+ local = (char *(*)()) __db_db_join_4002;
break;
case __DB_dbc_close:
xdr_argument = xdr___dbc_close_msg;
xdr_result = xdr___dbc_close_reply;
- local = (char *(*)()) __db_dbc_close_4001;
+ local = (char *(*)()) __db_dbc_close_4002;
break;
case __DB_dbc_count:
xdr_argument = xdr___dbc_count_msg;
xdr_result = xdr___dbc_count_reply;
- local = (char *(*)()) __db_dbc_count_4001;
+ local = (char *(*)()) __db_dbc_count_4002;
break;
case __DB_dbc_del:
xdr_argument = xdr___dbc_del_msg;
xdr_result = xdr___dbc_del_reply;
- local = (char *(*)()) __db_dbc_del_4001;
+ local = (char *(*)()) __db_dbc_del_4002;
break;
case __DB_dbc_dup:
xdr_argument = xdr___dbc_dup_msg;
xdr_result = xdr___dbc_dup_reply;
- local = (char *(*)()) __db_dbc_dup_4001;
+ local = (char *(*)()) __db_dbc_dup_4002;
break;
case __DB_dbc_get:
xdr_argument = xdr___dbc_get_msg;
xdr_result = xdr___dbc_get_reply;
- local = (char *(*)()) __db_dbc_get_4001;
+ local = (char *(*)()) __db_dbc_get_4002;
break;
case __DB_dbc_pget:
xdr_argument = xdr___dbc_pget_msg;
xdr_result = xdr___dbc_pget_reply;
- local = (char *(*)()) __db_dbc_pget_4001;
+ local = (char *(*)()) __db_dbc_pget_4002;
break;
case __DB_dbc_put:
xdr_argument = xdr___dbc_put_msg;
xdr_result = xdr___dbc_put_reply;
- local = (char *(*)()) __db_dbc_put_4001;
+ local = (char *(*)()) __db_dbc_put_4002;
break;
default:
@@ -423,7 +549,7 @@ void __dbsrv_main()
fprintf(stderr, "cannot create tcp service.");
exit(1);
}
- if (!svc_register(transp, DB_RPC_SERVERPROG, DB_RPC_SERVERVERS, db_rpc_serverprog_4001, IPPROTO_TCP)) {
+ if (!svc_register(transp, DB_RPC_SERVERPROG, DB_RPC_SERVERVERS, db_rpc_serverprog_4002, IPPROTO_TCP)) {
fprintf(stderr, "unable to register (DB_RPC_SERVERPROG, DB_RPC_SERVERVERS, tcp).");
exit(1);
}
diff --git a/db/rpc_server/c/db_server_util.c b/db/rpc_server/c/db_server_util.c
index 859a6b0d9..5023eb7bf 100644
--- a/db/rpc_server/c/db_server_util.c
+++ b/db/rpc_server/c/db_server_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_server_util.c,v 1.59 2002/03/27 04:32:50 bostic Exp ";
+static const char revid[] = "$Id: db_server_util.c,v 1.65 2003/04/24 18:54:13 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -56,7 +56,7 @@ static long __dbsrv_idleto = DB_SERVER_IDLETIMEOUT;
static char *logfile = NULL;
static char *prog;
-static void usage __P((char *));
+static void usage __P((void));
static void version_check __P((void));
int __dbsrv_verbose = 0;
@@ -141,7 +141,7 @@ main(argc, argv)
__dbsrv_verbose = 1;
break;
default:
- usage(prog);
+ usage();
}
/*
* Check default timeout against maximum timeout
@@ -155,7 +155,7 @@ main(argc, argv)
*/
if (__dbsrv_defto > __dbsrv_idleto)
fprintf(stderr,
- "%s: WARNING: Idle timeout %ld is less than resource timeout %ld\n",
+ "%s: WARNING: Idle timeout %ld is less than resource timeout %ld\n",
prog, __dbsrv_idleto, __dbsrv_defto);
LIST_INIT(&__dbsrv_head);
@@ -185,13 +185,14 @@ main(argc, argv)
printf("%s: Ready to receive requests\n", prog);
__dbsrv_main();
- /* NOTREACHED */
abort();
+
+ /* NOTREACHED */
+ return (0);
}
static void
-usage(prog)
- char *prog;
+usage()
{
fprintf(stderr, "usage: %s %s\n\t%s\n", prog,
"[-Vv] [-h home] [-P passwd]",
@@ -504,7 +505,8 @@ __dbsrv_sharedb(db_ctp, name, subdb, type, flags)
}
/*
- * PUBLIC: ct_entry *__dbsrv_shareenv __P((ct_entry *, home_entry *, u_int32_t));
+ * PUBLIC: ct_entry *__dbsrv_shareenv
+ * PUBLIC: __P((ct_entry *, home_entry *, u_int32_t));
*/
ct_entry *
__dbsrv_shareenv(env_ctp, home, flags)
@@ -696,8 +698,11 @@ add_home(home)
* to assure hp->name points to the last component.
*/
hp->name = __db_rpath(home);
- *(hp->name) = '\0';
- hp->name++;
+ if (hp->name != NULL) {
+ *(hp->name) = '\0';
+ hp->name++;
+ } else
+ hp->name = home;
while (*(hp->name) == '\0') {
hp->name = __db_rpath(home);
*(hp->name) = '\0';
@@ -745,14 +750,16 @@ add_passwd(passwd)
}
/*
- * PUBLIC: home_entry *get_home __P((char *));
+ * PUBLIC: home_entry *get_fullhome __P((char *));
*/
home_entry *
-get_home(name)
+get_fullhome(name)
char *name;
{
home_entry *hp;
+ if (name == NULL)
+ return (NULL);
for (hp = LIST_FIRST(&__dbsrv_home); hp != NULL;
hp = LIST_NEXT(hp, entries))
if (strcmp(name, hp->name) == 0)
diff --git a/db/rpc_server/c/db_server_xdr.c b/db/rpc_server/c/db_server_xdr.c
index 3c89ed092..ac050da3c 100644
--- a/db/rpc_server/c/db_server_xdr.c
+++ b/db/rpc_server/c/db_server_xdr.c
@@ -8,12 +8,42 @@
#ifndef NO_SYSTEM_INCLUDES
#include <rpc/rpc.h>
+
+#include <strings.h>
#endif
#include "db_int.h"
#include "dbinc_auto/db_server.h"
bool_t
+xdr___env_get_cachesize_msg(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_cachesize_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbenvcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_cachesize_reply(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_cachesize_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->gbytes))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->bytes))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->ncache))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___env_cachesize_msg(xdrs, objp)
register XDR *xdrs;
__env_cachesize_msg *objp;
@@ -152,6 +182,30 @@ xdr___env_dbrename_reply(xdrs, objp)
}
bool_t
+xdr___env_get_encrypt_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_encrypt_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbenvcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_encrypt_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_encrypt_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___env_encrypt_msg(xdrs, objp)
register XDR *xdrs;
__env_encrypt_msg *objp;
@@ -178,6 +232,30 @@ xdr___env_encrypt_reply(xdrs, objp)
}
bool_t
+xdr___env_get_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbenvcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___env_flags_msg(xdrs, objp)
register XDR *xdrs;
__env_flags_msg *objp;
@@ -204,6 +282,54 @@ xdr___env_flags_reply(xdrs, objp)
}
bool_t
+xdr___env_get_home_msg(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_home_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbenvcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_home_reply(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_home_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_string(xdrs, &objp->home, ~0))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_open_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_open_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbenvcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___env_get_open_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __env_get_open_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___env_open_msg(xdrs, objp)
register XDR *xdrs;
__env_open_msg *objp;
@@ -467,6 +593,30 @@ xdr___db_bt_maxkey_reply(xdrs, objp)
}
bool_t
+xdr___db_get_bt_minkey_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_bt_minkey_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_bt_minkey_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_bt_minkey_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->minkey))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_bt_minkey_msg(xdrs, objp)
register XDR *xdrs;
__db_bt_minkey_msg *objp;
@@ -577,6 +727,30 @@ xdr___db_del_reply(xdrs, objp)
}
bool_t
+xdr___db_get_encrypt_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_encrypt_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_encrypt_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_encrypt_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_encrypt_msg(xdrs, objp)
register XDR *xdrs;
__db_encrypt_msg *objp;
@@ -603,6 +777,30 @@ xdr___db_encrypt_reply(xdrs, objp)
}
bool_t
+xdr___db_get_extentsize_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_extentsize_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_extentsize_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_extentsize_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->extentsize))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_extentsize_msg(xdrs, objp)
register XDR *xdrs;
__db_extentsize_msg *objp;
@@ -627,6 +825,30 @@ xdr___db_extentsize_reply(xdrs, objp)
}
bool_t
+xdr___db_get_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_flags_msg(xdrs, objp)
register XDR *xdrs;
__db_flags_msg *objp;
@@ -701,6 +923,80 @@ xdr___db_get_reply(xdrs, objp)
}
bool_t
+xdr___db_get_name_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_name_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_name_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_name_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_string(xdrs, &objp->filename, ~0))
+ return (FALSE);
+ if (!xdr_string(xdrs, &objp->dbname, ~0))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_open_flags_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_open_flags_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_open_flags_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_open_flags_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->flags))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_h_ffactor_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_h_ffactor_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_h_ffactor_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_h_ffactor_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->ffactor))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_h_ffactor_msg(xdrs, objp)
register XDR *xdrs;
__db_h_ffactor_msg *objp;
@@ -725,6 +1021,30 @@ xdr___db_h_ffactor_reply(xdrs, objp)
}
bool_t
+xdr___db_get_h_nelem_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_h_nelem_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_h_nelem_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_h_nelem_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->nelem))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_h_nelem_msg(xdrs, objp)
register XDR *xdrs;
__db_h_nelem_msg *objp;
@@ -791,6 +1111,30 @@ xdr___db_key_range_reply(xdrs, objp)
}
bool_t
+xdr___db_get_lorder_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_lorder_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_lorder_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_lorder_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->lorder))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_lorder_msg(xdrs, objp)
register XDR *xdrs;
__db_lorder_msg *objp;
@@ -857,6 +1201,30 @@ xdr___db_open_reply(xdrs, objp)
}
bool_t
+xdr___db_get_pagesize_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_pagesize_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_pagesize_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_pagesize_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->pagesize))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_pagesize_msg(xdrs, objp)
register XDR *xdrs;
__db_pagesize_msg *objp;
@@ -991,6 +1359,30 @@ xdr___db_put_reply(xdrs, objp)
}
bool_t
+xdr___db_get_re_delim_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_delim_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_re_delim_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_delim_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->delim))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_re_delim_msg(xdrs, objp)
register XDR *xdrs;
__db_re_delim_msg *objp;
@@ -1015,6 +1407,30 @@ xdr___db_re_delim_reply(xdrs, objp)
}
bool_t
+xdr___db_get_re_len_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_len_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_re_len_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_len_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->len))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_re_len_msg(xdrs, objp)
register XDR *xdrs;
__db_re_len_msg *objp;
@@ -1063,6 +1479,30 @@ xdr___db_re_pad_reply(xdrs, objp)
}
bool_t
+xdr___db_get_re_pad_msg(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_pad_msg *objp;
+{
+
+ if (!xdr_u_int(xdrs, &objp->dbpcl_id))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
+xdr___db_get_re_pad_reply(xdrs, objp)
+ register XDR *xdrs;
+ __db_get_re_pad_reply *objp;
+{
+
+ if (!xdr_int(xdrs, &objp->status))
+ return (FALSE);
+ if (!xdr_u_int(xdrs, &objp->pad))
+ return (FALSE);
+ return (TRUE);
+}
+
+bool_t
xdr___db_remove_msg(xdrs, objp)
register XDR *xdrs;
__db_remove_msg *objp;
diff --git a/db/rpc_server/c/gen_db_server.c b/db/rpc_server/c/gen_db_server.c
index 0181fb06d..1e18c6388 100644
--- a/db/rpc_server/c/gen_db_server.c
+++ b/db/rpc_server/c/gen_db_server.c
@@ -16,11 +16,29 @@
#include "dbinc_auto/rpc_server_ext.h"
/*
- * PUBLIC: __env_cachesize_reply *__db_env_cachesize_4001
+ * PUBLIC: __env_get_cachesize_reply *__db_env_get_cachesize_4002
+ * PUBLIC: __P((__env_get_cachesize_msg *, struct svc_req *));
+ */
+__env_get_cachesize_reply *
+__db_env_get_cachesize_4002(msg, req)
+ __env_get_cachesize_msg *msg;
+ struct svc_req *req;
+{
+ static __env_get_cachesize_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __env_get_cachesize_proc(msg->dbenvcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __env_cachesize_reply *__db_env_cachesize_4002
* PUBLIC: __P((__env_cachesize_msg *, struct svc_req *));
*/
__env_cachesize_reply *
-__db_env_cachesize_4001(msg, req)
+__db_env_cachesize_4002(msg, req)
__env_cachesize_msg *msg;
struct svc_req *req;
{
@@ -37,11 +55,11 @@ __db_env_cachesize_4001(msg, req)
}
/*
- * PUBLIC: __env_close_reply *__db_env_close_4001 __P((__env_close_msg *,
+ * PUBLIC: __env_close_reply *__db_env_close_4002 __P((__env_close_msg *,
* PUBLIC: struct svc_req *));
*/
__env_close_reply *
-__db_env_close_4001(msg, req)
+__db_env_close_4002(msg, req)
__env_close_msg *msg;
struct svc_req *req;
{
@@ -56,11 +74,11 @@ __db_env_close_4001(msg, req)
}
/*
- * PUBLIC: __env_create_reply *__db_env_create_4001 __P((__env_create_msg *,
+ * PUBLIC: __env_create_reply *__db_env_create_4002 __P((__env_create_msg *,
* PUBLIC: struct svc_req *));
*/
__env_create_reply *
-__db_env_create_4001(msg, req)
+__db_env_create_4002(msg, req)
__env_create_msg *msg;
struct svc_req *req;
{
@@ -74,11 +92,11 @@ __db_env_create_4001(msg, req)
}
/*
- * PUBLIC: __env_dbremove_reply *__db_env_dbremove_4001
+ * PUBLIC: __env_dbremove_reply *__db_env_dbremove_4002
* PUBLIC: __P((__env_dbremove_msg *, struct svc_req *));
*/
__env_dbremove_reply *
-__db_env_dbremove_4001(msg, req)
+__db_env_dbremove_4002(msg, req)
__env_dbremove_msg *msg;
struct svc_req *req;
{
@@ -96,11 +114,11 @@ __db_env_dbremove_4001(msg, req)
}
/*
- * PUBLIC: __env_dbrename_reply *__db_env_dbrename_4001
+ * PUBLIC: __env_dbrename_reply *__db_env_dbrename_4002
* PUBLIC: __P((__env_dbrename_msg *, struct svc_req *));
*/
__env_dbrename_reply *
-__db_env_dbrename_4001(msg, req)
+__db_env_dbrename_4002(msg, req)
__env_dbrename_msg *msg;
struct svc_req *req;
{
@@ -119,11 +137,29 @@ __db_env_dbrename_4001(msg, req)
}
/*
- * PUBLIC: __env_encrypt_reply *__db_env_encrypt_4001
+ * PUBLIC: __env_get_encrypt_flags_reply *__db_env_get_encrypt_flags_4002
+ * PUBLIC: __P((__env_get_encrypt_flags_msg *, struct svc_req *));
+ */
+__env_get_encrypt_flags_reply *
+__db_env_get_encrypt_flags_4002(msg, req)
+ __env_get_encrypt_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __env_get_encrypt_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __env_get_encrypt_flags_proc(msg->dbenvcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __env_encrypt_reply *__db_env_encrypt_4002
* PUBLIC: __P((__env_encrypt_msg *, struct svc_req *));
*/
__env_encrypt_reply *
-__db_env_encrypt_4001(msg, req)
+__db_env_encrypt_4002(msg, req)
__env_encrypt_msg *msg;
struct svc_req *req;
{
@@ -139,11 +175,29 @@ __db_env_encrypt_4001(msg, req)
}
/*
- * PUBLIC: __env_flags_reply *__db_env_flags_4001 __P((__env_flags_msg *,
+ * PUBLIC: __env_get_flags_reply *__db_env_get_flags_4002
+ * PUBLIC: __P((__env_get_flags_msg *, struct svc_req *));
+ */
+__env_get_flags_reply *
+__db_env_get_flags_4002(msg, req)
+ __env_get_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __env_get_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __env_get_flags_proc(msg->dbenvcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __env_flags_reply *__db_env_flags_4002 __P((__env_flags_msg *,
* PUBLIC: struct svc_req *));
*/
__env_flags_reply *
-__db_env_flags_4001(msg, req)
+__db_env_flags_4002(msg, req)
__env_flags_msg *msg;
struct svc_req *req;
{
@@ -159,11 +213,47 @@ __db_env_flags_4001(msg, req)
}
/*
- * PUBLIC: __env_open_reply *__db_env_open_4001 __P((__env_open_msg *,
+ * PUBLIC: __env_get_home_reply *__db_env_get_home_4002
+ * PUBLIC: __P((__env_get_home_msg *, struct svc_req *));
+ */
+__env_get_home_reply *
+__db_env_get_home_4002(msg, req)
+ __env_get_home_msg *msg;
+ struct svc_req *req;
+{
+ static __env_get_home_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __env_get_home_proc(msg->dbenvcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __env_get_open_flags_reply *__db_env_get_open_flags_4002
+ * PUBLIC: __P((__env_get_open_flags_msg *, struct svc_req *));
+ */
+__env_get_open_flags_reply *
+__db_env_get_open_flags_4002(msg, req)
+ __env_get_open_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __env_get_open_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __env_get_open_flags_proc(msg->dbenvcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __env_open_reply *__db_env_open_4002 __P((__env_open_msg *,
* PUBLIC: struct svc_req *));
*/
__env_open_reply *
-__db_env_open_4001(msg, req)
+__db_env_open_4002(msg, req)
__env_open_msg *msg;
struct svc_req *req;
{
@@ -180,11 +270,11 @@ __db_env_open_4001(msg, req)
}
/*
- * PUBLIC: __env_remove_reply *__db_env_remove_4001 __P((__env_remove_msg *,
+ * PUBLIC: __env_remove_reply *__db_env_remove_4002 __P((__env_remove_msg *,
* PUBLIC: struct svc_req *));
*/
__env_remove_reply *
-__db_env_remove_4001(msg, req)
+__db_env_remove_4002(msg, req)
__env_remove_msg *msg;
struct svc_req *req;
{
@@ -200,11 +290,11 @@ __db_env_remove_4001(msg, req)
}
/*
- * PUBLIC: __txn_abort_reply *__db_txn_abort_4001 __P((__txn_abort_msg *,
+ * PUBLIC: __txn_abort_reply *__db_txn_abort_4002 __P((__txn_abort_msg *,
* PUBLIC: struct svc_req *));
*/
__txn_abort_reply *
-__db_txn_abort_4001(msg, req)
+__db_txn_abort_4002(msg, req)
__txn_abort_msg *msg;
struct svc_req *req;
{
@@ -218,11 +308,11 @@ __db_txn_abort_4001(msg, req)
}
/*
- * PUBLIC: __txn_begin_reply *__db_txn_begin_4001 __P((__txn_begin_msg *,
+ * PUBLIC: __txn_begin_reply *__db_txn_begin_4002 __P((__txn_begin_msg *,
* PUBLIC: struct svc_req *));
*/
__txn_begin_reply *
-__db_txn_begin_4001(msg, req)
+__db_txn_begin_4002(msg, req)
__txn_begin_msg *msg;
struct svc_req *req;
{
@@ -238,11 +328,11 @@ __db_txn_begin_4001(msg, req)
}
/*
- * PUBLIC: __txn_commit_reply *__db_txn_commit_4001 __P((__txn_commit_msg *,
+ * PUBLIC: __txn_commit_reply *__db_txn_commit_4002 __P((__txn_commit_msg *,
* PUBLIC: struct svc_req *));
*/
__txn_commit_reply *
-__db_txn_commit_4001(msg, req)
+__db_txn_commit_4002(msg, req)
__txn_commit_msg *msg;
struct svc_req *req;
{
@@ -257,11 +347,11 @@ __db_txn_commit_4001(msg, req)
}
/*
- * PUBLIC: __txn_discard_reply *__db_txn_discard_4001
+ * PUBLIC: __txn_discard_reply *__db_txn_discard_4002
* PUBLIC: __P((__txn_discard_msg *, struct svc_req *));
*/
__txn_discard_reply *
-__db_txn_discard_4001(msg, req)
+__db_txn_discard_4002(msg, req)
__txn_discard_msg *msg;
struct svc_req *req;
{
@@ -276,11 +366,11 @@ __db_txn_discard_4001(msg, req)
}
/*
- * PUBLIC: __txn_prepare_reply *__db_txn_prepare_4001
+ * PUBLIC: __txn_prepare_reply *__db_txn_prepare_4002
* PUBLIC: __P((__txn_prepare_msg *, struct svc_req *));
*/
__txn_prepare_reply *
-__db_txn_prepare_4001(msg, req)
+__db_txn_prepare_4002(msg, req)
__txn_prepare_msg *msg;
struct svc_req *req;
{
@@ -295,11 +385,11 @@ __db_txn_prepare_4001(msg, req)
}
/*
- * PUBLIC: __txn_recover_reply *__db_txn_recover_4001
+ * PUBLIC: __txn_recover_reply *__db_txn_recover_4002
* PUBLIC: __P((__txn_recover_msg *, struct svc_req *));
*/
__txn_recover_reply *
-__db_txn_recover_4001(msg, req)
+__db_txn_recover_4002(msg, req)
__txn_recover_msg *msg;
struct svc_req *req;
{
@@ -324,11 +414,11 @@ __db_txn_recover_4001(msg, req)
}
/*
- * PUBLIC: __db_associate_reply *__db_db_associate_4001
+ * PUBLIC: __db_associate_reply *__db_db_associate_4002
* PUBLIC: __P((__db_associate_msg *, struct svc_req *));
*/
__db_associate_reply *
-__db_db_associate_4001(msg, req)
+__db_db_associate_4002(msg, req)
__db_associate_msg *msg;
struct svc_req *req;
{
@@ -345,11 +435,11 @@ __db_db_associate_4001(msg, req)
}
/*
- * PUBLIC: __db_bt_maxkey_reply *__db_db_bt_maxkey_4001
+ * PUBLIC: __db_bt_maxkey_reply *__db_db_bt_maxkey_4002
* PUBLIC: __P((__db_bt_maxkey_msg *, struct svc_req *));
*/
__db_bt_maxkey_reply *
-__db_db_bt_maxkey_4001(msg, req)
+__db_db_bt_maxkey_4002(msg, req)
__db_bt_maxkey_msg *msg;
struct svc_req *req;
{
@@ -364,11 +454,29 @@ __db_db_bt_maxkey_4001(msg, req)
}
/*
- * PUBLIC: __db_bt_minkey_reply *__db_db_bt_minkey_4001
+ * PUBLIC: __db_get_bt_minkey_reply *__db_db_get_bt_minkey_4002
+ * PUBLIC: __P((__db_get_bt_minkey_msg *, struct svc_req *));
+ */
+__db_get_bt_minkey_reply *
+__db_db_get_bt_minkey_4002(msg, req)
+ __db_get_bt_minkey_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_bt_minkey_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_bt_minkey_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_bt_minkey_reply *__db_db_bt_minkey_4002
* PUBLIC: __P((__db_bt_minkey_msg *, struct svc_req *));
*/
__db_bt_minkey_reply *
-__db_db_bt_minkey_4001(msg, req)
+__db_db_bt_minkey_4002(msg, req)
__db_bt_minkey_msg *msg;
struct svc_req *req;
{
@@ -383,11 +491,11 @@ __db_db_bt_minkey_4001(msg, req)
}
/*
- * PUBLIC: __db_close_reply *__db_db_close_4001 __P((__db_close_msg *,
+ * PUBLIC: __db_close_reply *__db_db_close_4002 __P((__db_close_msg *,
* PUBLIC: struct svc_req *));
*/
__db_close_reply *
-__db_db_close_4001(msg, req)
+__db_db_close_4002(msg, req)
__db_close_msg *msg;
struct svc_req *req;
{
@@ -402,11 +510,11 @@ __db_db_close_4001(msg, req)
}
/*
- * PUBLIC: __db_create_reply *__db_db_create_4001 __P((__db_create_msg *,
+ * PUBLIC: __db_create_reply *__db_db_create_4002 __P((__db_create_msg *,
* PUBLIC: struct svc_req *));
*/
__db_create_reply *
-__db_db_create_4001(msg, req)
+__db_db_create_4002(msg, req)
__db_create_msg *msg;
struct svc_req *req;
{
@@ -421,11 +529,11 @@ __db_db_create_4001(msg, req)
}
/*
- * PUBLIC: __db_del_reply *__db_db_del_4001 __P((__db_del_msg *,
+ * PUBLIC: __db_del_reply *__db_db_del_4002 __P((__db_del_msg *,
* PUBLIC: struct svc_req *));
*/
__db_del_reply *
-__db_db_del_4001(msg, req)
+__db_db_del_4002(msg, req)
__db_del_msg *msg;
struct svc_req *req;
{
@@ -447,11 +555,29 @@ __db_db_del_4001(msg, req)
}
/*
- * PUBLIC: __db_encrypt_reply *__db_db_encrypt_4001 __P((__db_encrypt_msg *,
+ * PUBLIC: __db_get_encrypt_flags_reply *__db_db_get_encrypt_flags_4002
+ * PUBLIC: __P((__db_get_encrypt_flags_msg *, struct svc_req *));
+ */
+__db_get_encrypt_flags_reply *
+__db_db_get_encrypt_flags_4002(msg, req)
+ __db_get_encrypt_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_encrypt_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_encrypt_flags_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_encrypt_reply *__db_db_encrypt_4002 __P((__db_encrypt_msg *,
* PUBLIC: struct svc_req *));
*/
__db_encrypt_reply *
-__db_db_encrypt_4001(msg, req)
+__db_db_encrypt_4002(msg, req)
__db_encrypt_msg *msg;
struct svc_req *req;
{
@@ -467,11 +593,29 @@ __db_db_encrypt_4001(msg, req)
}
/*
- * PUBLIC: __db_extentsize_reply *__db_db_extentsize_4001
+ * PUBLIC: __db_get_extentsize_reply *__db_db_get_extentsize_4002
+ * PUBLIC: __P((__db_get_extentsize_msg *, struct svc_req *));
+ */
+__db_get_extentsize_reply *
+__db_db_get_extentsize_4002(msg, req)
+ __db_get_extentsize_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_extentsize_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_extentsize_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_extentsize_reply *__db_db_extentsize_4002
* PUBLIC: __P((__db_extentsize_msg *, struct svc_req *));
*/
__db_extentsize_reply *
-__db_db_extentsize_4001(msg, req)
+__db_db_extentsize_4002(msg, req)
__db_extentsize_msg *msg;
struct svc_req *req;
{
@@ -486,11 +630,29 @@ __db_db_extentsize_4001(msg, req)
}
/*
- * PUBLIC: __db_flags_reply *__db_db_flags_4001 __P((__db_flags_msg *,
+ * PUBLIC: __db_get_flags_reply *__db_db_get_flags_4002
+ * PUBLIC: __P((__db_get_flags_msg *, struct svc_req *));
+ */
+__db_get_flags_reply *
+__db_db_get_flags_4002(msg, req)
+ __db_get_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_flags_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_flags_reply *__db_db_flags_4002 __P((__db_flags_msg *,
* PUBLIC: struct svc_req *));
*/
__db_flags_reply *
-__db_db_flags_4001(msg, req)
+__db_db_flags_4002(msg, req)
__db_flags_msg *msg;
struct svc_req *req;
{
@@ -505,11 +667,11 @@ __db_db_flags_4001(msg, req)
}
/*
- * PUBLIC: __db_get_reply *__db_db_get_4001 __P((__db_get_msg *,
+ * PUBLIC: __db_get_reply *__db_db_get_4002 __P((__db_get_msg *,
* PUBLIC: struct svc_req *));
*/
__db_get_reply *
-__db_db_get_4001(msg, req)
+__db_db_get_4002(msg, req)
__db_get_msg *msg;
struct svc_req *req;
{
@@ -546,11 +708,65 @@ __db_db_get_4001(msg, req)
}
/*
- * PUBLIC: __db_h_ffactor_reply *__db_db_h_ffactor_4001
+ * PUBLIC: __db_get_name_reply *__db_db_get_name_4002
+ * PUBLIC: __P((__db_get_name_msg *, struct svc_req *));
+ */
+__db_get_name_reply *
+__db_db_get_name_4002(msg, req)
+ __db_get_name_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_name_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_name_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_get_open_flags_reply *__db_db_get_open_flags_4002
+ * PUBLIC: __P((__db_get_open_flags_msg *, struct svc_req *));
+ */
+__db_get_open_flags_reply *
+__db_db_get_open_flags_4002(msg, req)
+ __db_get_open_flags_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_open_flags_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_open_flags_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_get_h_ffactor_reply *__db_db_get_h_ffactor_4002
+ * PUBLIC: __P((__db_get_h_ffactor_msg *, struct svc_req *));
+ */
+__db_get_h_ffactor_reply *
+__db_db_get_h_ffactor_4002(msg, req)
+ __db_get_h_ffactor_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_h_ffactor_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_h_ffactor_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_h_ffactor_reply *__db_db_h_ffactor_4002
* PUBLIC: __P((__db_h_ffactor_msg *, struct svc_req *));
*/
__db_h_ffactor_reply *
-__db_db_h_ffactor_4001(msg, req)
+__db_db_h_ffactor_4002(msg, req)
__db_h_ffactor_msg *msg;
struct svc_req *req;
{
@@ -565,11 +781,29 @@ __db_db_h_ffactor_4001(msg, req)
}
/*
- * PUBLIC: __db_h_nelem_reply *__db_db_h_nelem_4001 __P((__db_h_nelem_msg *,
+ * PUBLIC: __db_get_h_nelem_reply *__db_db_get_h_nelem_4002
+ * PUBLIC: __P((__db_get_h_nelem_msg *, struct svc_req *));
+ */
+__db_get_h_nelem_reply *
+__db_db_get_h_nelem_4002(msg, req)
+ __db_get_h_nelem_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_h_nelem_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_h_nelem_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_h_nelem_reply *__db_db_h_nelem_4002 __P((__db_h_nelem_msg *,
* PUBLIC: struct svc_req *));
*/
__db_h_nelem_reply *
-__db_db_h_nelem_4001(msg, req)
+__db_db_h_nelem_4002(msg, req)
__db_h_nelem_msg *msg;
struct svc_req *req;
{
@@ -584,11 +818,11 @@ __db_db_h_nelem_4001(msg, req)
}
/*
- * PUBLIC: __db_key_range_reply *__db_db_key_range_4001
+ * PUBLIC: __db_key_range_reply *__db_db_key_range_4002
* PUBLIC: __P((__db_key_range_msg *, struct svc_req *));
*/
__db_key_range_reply *
-__db_db_key_range_4001(msg, req)
+__db_db_key_range_4002(msg, req)
__db_key_range_msg *msg;
struct svc_req *req;
{
@@ -610,11 +844,29 @@ __db_db_key_range_4001(msg, req)
}
/*
- * PUBLIC: __db_lorder_reply *__db_db_lorder_4001 __P((__db_lorder_msg *,
+ * PUBLIC: __db_get_lorder_reply *__db_db_get_lorder_4002
+ * PUBLIC: __P((__db_get_lorder_msg *, struct svc_req *));
+ */
+__db_get_lorder_reply *
+__db_db_get_lorder_4002(msg, req)
+ __db_get_lorder_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_lorder_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_lorder_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_lorder_reply *__db_db_lorder_4002 __P((__db_lorder_msg *,
* PUBLIC: struct svc_req *));
*/
__db_lorder_reply *
-__db_db_lorder_4001(msg, req)
+__db_db_lorder_4002(msg, req)
__db_lorder_msg *msg;
struct svc_req *req;
{
@@ -629,11 +881,11 @@ __db_db_lorder_4001(msg, req)
}
/*
- * PUBLIC: __db_open_reply *__db_db_open_4001 __P((__db_open_msg *,
+ * PUBLIC: __db_open_reply *__db_db_open_4002 __P((__db_open_msg *,
* PUBLIC: struct svc_req *));
*/
__db_open_reply *
-__db_db_open_4001(msg, req)
+__db_db_open_4002(msg, req)
__db_open_msg *msg;
struct svc_req *req;
{
@@ -653,11 +905,29 @@ __db_db_open_4001(msg, req)
}
/*
- * PUBLIC: __db_pagesize_reply *__db_db_pagesize_4001
+ * PUBLIC: __db_get_pagesize_reply *__db_db_get_pagesize_4002
+ * PUBLIC: __P((__db_get_pagesize_msg *, struct svc_req *));
+ */
+__db_get_pagesize_reply *
+__db_db_get_pagesize_4002(msg, req)
+ __db_get_pagesize_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_pagesize_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_pagesize_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_pagesize_reply *__db_db_pagesize_4002
* PUBLIC: __P((__db_pagesize_msg *, struct svc_req *));
*/
__db_pagesize_reply *
-__db_db_pagesize_4001(msg, req)
+__db_db_pagesize_4002(msg, req)
__db_pagesize_msg *msg;
struct svc_req *req;
{
@@ -672,11 +942,11 @@ __db_db_pagesize_4001(msg, req)
}
/*
- * PUBLIC: __db_pget_reply *__db_db_pget_4001 __P((__db_pget_msg *,
+ * PUBLIC: __db_pget_reply *__db_db_pget_4002 __P((__db_pget_msg *,
* PUBLIC: struct svc_req *));
*/
__db_pget_reply *
-__db_db_pget_4001(msg, req)
+__db_db_pget_4002(msg, req)
__db_pget_msg *msg;
struct svc_req *req;
{
@@ -720,11 +990,11 @@ __db_db_pget_4001(msg, req)
}
/*
- * PUBLIC: __db_put_reply *__db_db_put_4001 __P((__db_put_msg *,
+ * PUBLIC: __db_put_reply *__db_db_put_4002 __P((__db_put_msg *,
* PUBLIC: struct svc_req *));
*/
__db_put_reply *
-__db_db_put_4001(msg, req)
+__db_db_put_4002(msg, req)
__db_put_msg *msg;
struct svc_req *req;
{
@@ -760,11 +1030,29 @@ __db_db_put_4001(msg, req)
}
/*
- * PUBLIC: __db_re_delim_reply *__db_db_re_delim_4001
+ * PUBLIC: __db_get_re_delim_reply *__db_db_get_re_delim_4002
+ * PUBLIC: __P((__db_get_re_delim_msg *, struct svc_req *));
+ */
+__db_get_re_delim_reply *
+__db_db_get_re_delim_4002(msg, req)
+ __db_get_re_delim_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_re_delim_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_re_delim_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_re_delim_reply *__db_db_re_delim_4002
* PUBLIC: __P((__db_re_delim_msg *, struct svc_req *));
*/
__db_re_delim_reply *
-__db_db_re_delim_4001(msg, req)
+__db_db_re_delim_4002(msg, req)
__db_re_delim_msg *msg;
struct svc_req *req;
{
@@ -779,11 +1067,29 @@ __db_db_re_delim_4001(msg, req)
}
/*
- * PUBLIC: __db_re_len_reply *__db_db_re_len_4001 __P((__db_re_len_msg *,
+ * PUBLIC: __db_get_re_len_reply *__db_db_get_re_len_4002
+ * PUBLIC: __P((__db_get_re_len_msg *, struct svc_req *));
+ */
+__db_get_re_len_reply *
+__db_db_get_re_len_4002(msg, req)
+ __db_get_re_len_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_re_len_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_re_len_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_re_len_reply *__db_db_re_len_4002 __P((__db_re_len_msg *,
* PUBLIC: struct svc_req *));
*/
__db_re_len_reply *
-__db_db_re_len_4001(msg, req)
+__db_db_re_len_4002(msg, req)
__db_re_len_msg *msg;
struct svc_req *req;
{
@@ -798,11 +1104,11 @@ __db_db_re_len_4001(msg, req)
}
/*
- * PUBLIC: __db_re_pad_reply *__db_db_re_pad_4001 __P((__db_re_pad_msg *,
+ * PUBLIC: __db_re_pad_reply *__db_db_re_pad_4002 __P((__db_re_pad_msg *,
* PUBLIC: struct svc_req *));
*/
__db_re_pad_reply *
-__db_db_re_pad_4001(msg, req)
+__db_db_re_pad_4002(msg, req)
__db_re_pad_msg *msg;
struct svc_req *req;
{
@@ -817,11 +1123,29 @@ __db_db_re_pad_4001(msg, req)
}
/*
- * PUBLIC: __db_remove_reply *__db_db_remove_4001 __P((__db_remove_msg *,
+ * PUBLIC: __db_get_re_pad_reply *__db_db_get_re_pad_4002
+ * PUBLIC: __P((__db_get_re_pad_msg *, struct svc_req *));
+ */
+__db_get_re_pad_reply *
+__db_db_get_re_pad_4002(msg, req)
+ __db_get_re_pad_msg *msg;
+ struct svc_req *req;
+{
+ static __db_get_re_pad_reply reply; /* must be static */
+ COMPQUIET(req, NULL);
+
+ __db_get_re_pad_proc(msg->dbpcl_id,
+ &reply);
+
+ return (&reply);
+}
+
+/*
+ * PUBLIC: __db_remove_reply *__db_db_remove_4002 __P((__db_remove_msg *,
* PUBLIC: struct svc_req *));
*/
__db_remove_reply *
-__db_db_remove_4001(msg, req)
+__db_db_remove_4002(msg, req)
__db_remove_msg *msg;
struct svc_req *req;
{
@@ -838,11 +1162,11 @@ __db_db_remove_4001(msg, req)
}
/*
- * PUBLIC: __db_rename_reply *__db_db_rename_4001 __P((__db_rename_msg *,
+ * PUBLIC: __db_rename_reply *__db_db_rename_4002 __P((__db_rename_msg *,
* PUBLIC: struct svc_req *));
*/
__db_rename_reply *
-__db_db_rename_4001(msg, req)
+__db_db_rename_4002(msg, req)
__db_rename_msg *msg;
struct svc_req *req;
{
@@ -860,11 +1184,11 @@ __db_db_rename_4001(msg, req)
}
/*
- * PUBLIC: __db_stat_reply *__db_db_stat_4001 __P((__db_stat_msg *,
+ * PUBLIC: __db_stat_reply *__db_db_stat_4002 __P((__db_stat_msg *,
* PUBLIC: struct svc_req *));
*/
__db_stat_reply *
-__db_db_stat_4001(msg, req)
+__db_db_stat_4002(msg, req)
__db_stat_msg *msg;
struct svc_req *req;
{
@@ -887,11 +1211,11 @@ __db_db_stat_4001(msg, req)
}
/*
- * PUBLIC: __db_sync_reply *__db_db_sync_4001 __P((__db_sync_msg *,
+ * PUBLIC: __db_sync_reply *__db_db_sync_4002 __P((__db_sync_msg *,
* PUBLIC: struct svc_req *));
*/
__db_sync_reply *
-__db_db_sync_4001(msg, req)
+__db_db_sync_4002(msg, req)
__db_sync_msg *msg;
struct svc_req *req;
{
@@ -906,11 +1230,11 @@ __db_db_sync_4001(msg, req)
}
/*
- * PUBLIC: __db_truncate_reply *__db_db_truncate_4001
+ * PUBLIC: __db_truncate_reply *__db_db_truncate_4002
* PUBLIC: __P((__db_truncate_msg *, struct svc_req *));
*/
__db_truncate_reply *
-__db_db_truncate_4001(msg, req)
+__db_db_truncate_4002(msg, req)
__db_truncate_msg *msg;
struct svc_req *req;
{
@@ -926,11 +1250,11 @@ __db_db_truncate_4001(msg, req)
}
/*
- * PUBLIC: __db_cursor_reply *__db_db_cursor_4001 __P((__db_cursor_msg *,
+ * PUBLIC: __db_cursor_reply *__db_db_cursor_4002 __P((__db_cursor_msg *,
* PUBLIC: struct svc_req *));
*/
__db_cursor_reply *
-__db_db_cursor_4001(msg, req)
+__db_db_cursor_4002(msg, req)
__db_cursor_msg *msg;
struct svc_req *req;
{
@@ -946,11 +1270,11 @@ __db_db_cursor_4001(msg, req)
}
/*
- * PUBLIC: __db_join_reply *__db_db_join_4001 __P((__db_join_msg *,
+ * PUBLIC: __db_join_reply *__db_db_join_4002 __P((__db_join_msg *,
* PUBLIC: struct svc_req *));
*/
__db_join_reply *
-__db_db_join_4001(msg, req)
+__db_db_join_4002(msg, req)
__db_join_msg *msg;
struct svc_req *req;
{
@@ -967,11 +1291,11 @@ __db_db_join_4001(msg, req)
}
/*
- * PUBLIC: __dbc_close_reply *__db_dbc_close_4001 __P((__dbc_close_msg *,
+ * PUBLIC: __dbc_close_reply *__db_dbc_close_4002 __P((__dbc_close_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_close_reply *
-__db_dbc_close_4001(msg, req)
+__db_dbc_close_4002(msg, req)
__dbc_close_msg *msg;
struct svc_req *req;
{
@@ -985,11 +1309,11 @@ __db_dbc_close_4001(msg, req)
}
/*
- * PUBLIC: __dbc_count_reply *__db_dbc_count_4001 __P((__dbc_count_msg *,
+ * PUBLIC: __dbc_count_reply *__db_dbc_count_4002 __P((__dbc_count_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_count_reply *
-__db_dbc_count_4001(msg, req)
+__db_dbc_count_4002(msg, req)
__dbc_count_msg *msg;
struct svc_req *req;
{
@@ -1004,11 +1328,11 @@ __db_dbc_count_4001(msg, req)
}
/*
- * PUBLIC: __dbc_del_reply *__db_dbc_del_4001 __P((__dbc_del_msg *,
+ * PUBLIC: __dbc_del_reply *__db_dbc_del_4002 __P((__dbc_del_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_del_reply *
-__db_dbc_del_4001(msg, req)
+__db_dbc_del_4002(msg, req)
__dbc_del_msg *msg;
struct svc_req *req;
{
@@ -1023,11 +1347,11 @@ __db_dbc_del_4001(msg, req)
}
/*
- * PUBLIC: __dbc_dup_reply *__db_dbc_dup_4001 __P((__dbc_dup_msg *,
+ * PUBLIC: __dbc_dup_reply *__db_dbc_dup_4002 __P((__dbc_dup_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_dup_reply *
-__db_dbc_dup_4001(msg, req)
+__db_dbc_dup_4002(msg, req)
__dbc_dup_msg *msg;
struct svc_req *req;
{
@@ -1042,11 +1366,11 @@ __db_dbc_dup_4001(msg, req)
}
/*
- * PUBLIC: __dbc_get_reply *__db_dbc_get_4001 __P((__dbc_get_msg *,
+ * PUBLIC: __dbc_get_reply *__db_dbc_get_4002 __P((__dbc_get_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_get_reply *
-__db_dbc_get_4001(msg, req)
+__db_dbc_get_4002(msg, req)
__dbc_get_msg *msg;
struct svc_req *req;
{
@@ -1082,11 +1406,11 @@ __db_dbc_get_4001(msg, req)
}
/*
- * PUBLIC: __dbc_pget_reply *__db_dbc_pget_4001 __P((__dbc_pget_msg *,
+ * PUBLIC: __dbc_pget_reply *__db_dbc_pget_4002 __P((__dbc_pget_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_pget_reply *
-__db_dbc_pget_4001(msg, req)
+__db_dbc_pget_4002(msg, req)
__dbc_pget_msg *msg;
struct svc_req *req;
{
@@ -1129,11 +1453,11 @@ __db_dbc_pget_4001(msg, req)
}
/*
- * PUBLIC: __dbc_put_reply *__db_dbc_put_4001 __P((__dbc_put_msg *,
+ * PUBLIC: __dbc_put_reply *__db_dbc_put_4002 __P((__dbc_put_msg *,
* PUBLIC: struct svc_req *));
*/
__dbc_put_reply *
-__db_dbc_put_4001(msg, req)
+__db_dbc_put_4002(msg, req)
__dbc_put_msg *msg;
struct svc_req *req;
{
diff --git a/db/rpc_server/cxx/db_server_cxxproc.cpp b/db/rpc_server/cxx/db_server_cxxproc.cpp
index 0ba1fd50c..105114fa2 100644
--- a/db/rpc_server/cxx/db_server_cxxproc.cpp
+++ b/db/rpc_server/cxx/db_server_cxxproc.cpp
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
@@ -9,7 +9,7 @@
#ifdef HAVE_RPC
#ifndef lint
-static const char revid[] = "Id: db_server_cxxproc.cpp,v 1.12 2002/08/09 01:56:08 bostic Exp ";
+static const char revid[] = "$Id: db_server_cxxproc.cpp,v 1.15 2003/04/23 20:43:09 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -29,7 +29,21 @@ extern "C" {
#include "dbinc_auto/rpc_server_ext.h"
}
-/* BEGIN __env_cachesize_proc */
+extern "C" void
+__env_get_cachesize_proc(
+ long dbenvcl_id,
+ __env_get_cachesize_reply *replyp)
+{
+ DbEnv *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_cachesize(&replyp->gbytes,
+ &replyp->bytes, (int *)&replyp->ncache);
+}
+
extern "C" void
__env_cachesize_proc(
long dbenvcl_id,
@@ -37,7 +51,6 @@ __env_cachesize_proc(
u_int32_t bytes,
u_int32_t ncache,
__env_cachesize_reply *replyp)
-/* END __env_cachesize_proc */
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -52,13 +65,11 @@ __env_cachesize_proc(
return;
}
-/* BEGIN __env_close_proc */
extern "C" void
__env_close_proc(
long dbenvcl_id,
u_int32_t flags,
__env_close_reply *replyp)
-/* END __env_close_proc */
{
ct_entry *dbenv_ctp;
@@ -67,12 +78,10 @@ __env_close_proc(
return;
}
-/* BEGIN __env_create_proc */
extern "C" void
__env_create_proc(
u_int32_t timeout,
__env_create_reply *replyp)
-/* END __env_create_proc */
{
DbEnv *dbenv;
ct_entry *ctp;
@@ -94,7 +103,6 @@ __env_create_proc(
return;
}
-/* BEGIN __env_dbremove_proc */
extern "C" void
__env_dbremove_proc(
long dbenvcl_id,
@@ -103,7 +111,6 @@ __env_dbremove_proc(
char *subdb,
u_int32_t flags,
__env_dbremove_reply *replyp)
-/* END __env_dbremove_proc */
{
int ret;
DbEnv *dbenv;
@@ -125,7 +132,6 @@ __env_dbremove_proc(
return;
}
-/* BEGIN __env_dbrename_proc */
void
__env_dbrename_proc(
long dbenvcl_id,
@@ -135,7 +141,6 @@ __env_dbrename_proc(
char *newname,
u_int32_t flags,
__env_dbrename_reply *replyp)
-/* END __env_dbrename_proc */
{
int ret;
DbEnv *dbenv;
@@ -157,14 +162,26 @@ __env_dbrename_proc(
return;
}
-/* BEGIN __env_encrypt_proc */
+extern "C" void
+__env_get_encrypt_flags_proc(
+ long dbenvcl_id,
+ __env_get_encrypt_flags_reply *replyp)
+{
+ DbEnv *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_encrypt_flags(&replyp->flags);
+}
+
extern "C" void
__env_encrypt_proc(
long dbenvcl_id,
char *passwd,
u_int32_t flags,
__env_encrypt_reply *replyp)
-/* END __env_encrypt_proc */
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -179,14 +196,26 @@ __env_encrypt_proc(
return;
}
-/* BEGIN __env_flags_proc */
+extern "C" void
+__env_get_flags_proc(
+ long dbenvcl_id,
+ __env_get_flags_reply *replyp)
+{
+ DbEnv *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_flags(&replyp->flags);
+}
+
extern "C" void
__env_flags_proc(
long dbenvcl_id,
u_int32_t flags,
u_int32_t onoff,
__env_flags_reply *replyp)
-/* END __env_flags_proc */
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -204,7 +233,35 @@ __env_flags_proc(
replyp->status = ret;
return;
}
-/* BEGIN __env_open_proc */
+
+extern "C" void
+__env_get_home_proc(
+ long dbenvcl_id,
+ __env_get_home_reply *replyp)
+{
+ DbEnv *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_home((const char **)&replyp->home);
+}
+
+extern "C" void
+__env_get_open_flags_proc(
+ long dbenvcl_id,
+ __env_get_open_flags_reply *replyp)
+{
+ DbEnv *dbenv;
+ ct_entry *dbenv_ctp;
+
+ ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
+ dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
+
+ replyp->status = dbenv->get_open_flags(&replyp->flags);
+}
+
extern "C" void
__env_open_proc(
long dbenvcl_id,
@@ -212,7 +269,6 @@ __env_open_proc(
u_int32_t flags,
u_int32_t mode,
__env_open_reply *replyp)
-/* END __env_open_proc */
{
DbEnv *dbenv;
ct_entry *dbenv_ctp, *new_ctp;
@@ -222,7 +278,7 @@ __env_open_proc(
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
- fullhome = get_home(home);
+ fullhome = get_fullhome(home);
if (fullhome == NULL) {
ret = DB_NOSERVER_HOME;
goto out;
@@ -268,14 +324,12 @@ out: replyp->status = ret;
return;
}
-/* BEGIN __env_remove_proc */
extern "C" void
__env_remove_proc(
long dbenvcl_id,
char *home,
u_int32_t flags,
__env_remove_reply *replyp)
-/* END __env_remove_proc */
{
DbEnv *dbenv;
ct_entry *dbenv_ctp;
@@ -284,7 +338,7 @@ __env_remove_proc(
ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV);
dbenv = (DbEnv *)dbenv_ctp->ct_anyp;
- fullhome = get_home(home);
+ fullhome = get_fullhome(home);
if (fullhome == NULL) {
replyp->status = DB_NOSERVER_HOME;
return;
@@ -296,12 +350,10 @@ __env_remove_proc(
return;
}
-/* BEGIN __txn_abort_proc */
extern "C" void
__txn_abort_proc(
long txnpcl_id,
__txn_abort_reply *replyp)
-/* END __txn_abort_proc */
{
DbTxn *txnp;
ct_entry *txnp_ctp;
@@ -316,14 +368,12 @@ __txn_abort_proc(
return;
}
-/* BEGIN __txn_begin_proc */
extern "C" void
__txn_begin_proc(
long dbenvcl_id,
long parentcl_id,
u_int32_t flags,
__txn_begin_reply *replyp)
-/* END __txn_begin_proc */
{
DbEnv *dbenv;
DbTxn *parent, *txnp;
@@ -361,13 +411,11 @@ __txn_begin_proc(
return;
}
-/* BEGIN __txn_commit_proc */
extern "C" void
__txn_commit_proc(
long txnpcl_id,
u_int32_t flags,
__txn_commit_reply *replyp)
-/* END __txn_commit_proc */
{
DbTxn *txnp;
ct_entry *txnp_ctp;
@@ -383,13 +431,11 @@ __txn_commit_proc(
return;
}
-/* BEGIN __txn_discard_proc */
extern "C" void
__txn_discard_proc(
long txnpcl_id,
u_int32_t flags,
__txn_discard_reply *replyp)
-/* END __txn_discard_proc */
{
DbTxn *txnp;
ct_entry *txnp_ctp;
@@ -405,13 +451,11 @@ __txn_discard_proc(
return;
}
-/* BEGIN __txn_prepare_proc */
extern "C" void
__txn_prepare_proc(
long txnpcl_id,
u_int8_t *gid,
__txn_prepare_reply *replyp)
-/* END __txn_prepare_proc */
{
DbTxn *txnp;
ct_entry *txnp_ctp;
@@ -425,7 +469,6 @@ __txn_prepare_proc(
return;
}
-/* BEGIN __txn_recover_proc */
extern "C" void
__txn_recover_proc(
long dbenvcl_id,
@@ -433,7 +476,6 @@ __txn_recover_proc(
u_int32_t flags,
__txn_recover_reply *replyp,
int * freep)
-/* END __txn_recover_proc */
{
DbEnv *dbenv;
DbPreplist *dbprep, *p;
@@ -535,13 +577,11 @@ out2:
return;
}
-/* BEGIN __db_bt_maxkey_proc */
extern "C" void
__db_bt_maxkey_proc(
long dbpcl_id,
u_int32_t maxkey,
__db_bt_maxkey_reply *replyp)
-/* END __db_bt_maxkey_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -556,7 +596,6 @@ __db_bt_maxkey_proc(
return;
}
-/* BEGIN __db_associate_proc */
extern "C" void
__db_associate_proc(
long dbpcl_id,
@@ -564,7 +603,6 @@ __db_associate_proc(
long sdbpcl_id,
u_int32_t flags,
__db_associate_reply *replyp)
-/* END __db_associate_proc */
{
Db *dbp, *sdbp;
DbTxn *txnp;
@@ -595,13 +633,25 @@ __db_associate_proc(
return;
}
-/* BEGIN __db_bt_minkey_proc */
+extern "C" void
+__db_get_bt_minkey_proc(
+ long dbpcl_id,
+ __db_get_bt_minkey_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_bt_minkey(&replyp->minkey);
+}
+
extern "C" void
__db_bt_minkey_proc(
long dbpcl_id,
u_int32_t minkey,
__db_bt_minkey_reply *replyp)
-/* END __db_bt_minkey_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -616,13 +666,11 @@ __db_bt_minkey_proc(
return;
}
-/* BEGIN __db_close_proc */
extern "C" void
__db_close_proc(
long dbpcl_id,
u_int32_t flags,
__db_close_reply *replyp)
-/* END __db_close_proc */
{
ct_entry *dbp_ctp;
@@ -631,13 +679,11 @@ __db_close_proc(
return;
}
-/* BEGIN __db_create_proc */
extern "C" void
__db_create_proc(
long dbenvcl_id,
u_int32_t flags,
__db_create_reply *replyp)
-/* END __db_create_proc */
{
Db *dbp;
DbEnv *dbenv;
@@ -664,7 +710,6 @@ __db_create_proc(
return;
}
-/* BEGIN __db_del_proc */
extern "C" void
__db_del_proc(
long dbpcl_id,
@@ -677,7 +722,6 @@ __db_del_proc(
u_int32_t keysize,
u_int32_t flags,
__db_del_reply *replyp)
-/* END __db_del_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -705,14 +749,26 @@ __db_del_proc(
return;
}
-/* BEGIN __db_encrypt_proc */
+extern "C" void
+__db_get_encrypt_flags_proc(
+ long dbpcl_id,
+ __db_get_encrypt_flags_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_encrypt_flags(&replyp->flags);
+}
+
extern "C" void
__db_encrypt_proc(
long dbpcl_id,
char *passwd,
u_int32_t flags,
__db_encrypt_reply *replyp)
-/* END __db_encrypt_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -726,13 +782,25 @@ __db_encrypt_proc(
return;
}
-/* BEGIN __db_extentsize_proc */
+extern "C" void
+__db_get_extentsize_proc(
+ long dbpcl_id,
+ __db_get_extentsize_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_q_extentsize(&replyp->extentsize);
+}
+
extern "C" void
__db_extentsize_proc(
long dbpcl_id,
u_int32_t extentsize,
__db_extentsize_reply *replyp)
-/* END __db_extentsize_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -747,13 +815,25 @@ __db_extentsize_proc(
return;
}
-/* BEGIN __db_flags_proc */
+extern "C" void
+__db_get_flags_proc(
+ long dbpcl_id,
+ __db_get_flags_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_flags(&replyp->flags);
+}
+
extern "C" void
__db_flags_proc(
long dbpcl_id,
u_int32_t flags,
__db_flags_reply *replyp)
-/* END __db_flags_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -769,7 +849,6 @@ __db_flags_proc(
return;
}
-/* BEGIN __db_get_proc */
extern "C" void
__db_get_proc(
long dbpcl_id,
@@ -789,7 +868,6 @@ __db_get_proc(
u_int32_t flags,
__db_get_reply *replyp,
int * freep)
-/* END __db_get_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -906,13 +984,25 @@ err: replyp->keydata.keydata_val = NULL;
return;
}
-/* BEGIN __db_h_ffactor_proc */
+extern "C" void
+__db_get_h_ffactor_proc(
+ long dbpcl_id,
+ __db_get_h_ffactor_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_h_ffactor(&replyp->ffactor);
+}
+
extern "C" void
__db_h_ffactor_proc(
long dbpcl_id,
u_int32_t ffactor,
__db_h_ffactor_reply *replyp)
-/* END __db_h_ffactor_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -927,13 +1017,25 @@ __db_h_ffactor_proc(
return;
}
-/* BEGIN __db_h_nelem_proc */
+extern "C" void
+__db_get_h_nelem_proc(
+ long dbpcl_id,
+ __db_get_h_nelem_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_h_nelem(&replyp->nelem);
+}
+
extern "C" void
__db_h_nelem_proc(
long dbpcl_id,
u_int32_t nelem,
__db_h_nelem_reply *replyp)
-/* END __db_h_nelem_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -948,7 +1050,6 @@ __db_h_nelem_proc(
return;
}
-/* BEGIN __db_key_range_proc */
extern "C" void
__db_key_range_proc(
long dbpcl_id,
@@ -961,7 +1062,6 @@ __db_key_range_proc(
u_int32_t keysize,
u_int32_t flags,
__db_key_range_reply *replyp)
-/* END __db_key_range_proc */
{
Db *dbp;
DB_KEY_RANGE range;
@@ -993,13 +1093,25 @@ __db_key_range_proc(
return;
}
-/* BEGIN __db_lorder_proc */
+extern "C" void
+__db_get_lorder_proc(
+ long dbpcl_id,
+ __db_get_lorder_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_lorder((int *)&replyp->lorder);
+}
+
extern "C" void
__db_lorder_proc(
long dbpcl_id,
u_int32_t lorder,
__db_lorder_reply *replyp)
-/* END __db_lorder_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1014,7 +1126,35 @@ __db_lorder_proc(
return;
}
-/* BEGIN __db_open_proc */
+extern "C" void
+__db_get_name_proc(
+ long dbpcl_id,
+ __db_get_name_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_dbname(
+ (const char **)&replyp->filename, (const char **)&replyp->dbname);
+}
+
+extern "C" void
+__db_get_open_flags_proc(
+ long dbpcl_id,
+ __db_get_open_flags_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_open_flags(&replyp->flags);
+}
+
extern "C" void
__db_open_proc(
long dbpcl_id,
@@ -1025,7 +1165,6 @@ __db_open_proc(
u_int32_t flags,
u_int32_t mode,
__db_open_reply *replyp)
-/* END __db_open_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -1098,13 +1237,25 @@ out:
return;
}
-/* BEGIN __db_pagesize_proc */
+extern "C" void
+__db_get_pagesize_proc(
+ long dbpcl_id,
+ __db_get_pagesize_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_pagesize(&replyp->pagesize);
+}
+
extern "C" void
__db_pagesize_proc(
long dbpcl_id,
u_int32_t pagesize,
__db_pagesize_reply *replyp)
-/* END __db_pagesize_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1119,7 +1270,6 @@ __db_pagesize_proc(
return;
}
-/* BEGIN __db_pget_proc */
extern "C" void
__db_pget_proc(
long dbpcl_id,
@@ -1145,7 +1295,6 @@ __db_pget_proc(
u_int32_t flags,
__db_pget_reply *replyp,
int * freep)
-/* END __db_pget_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -1289,7 +1438,6 @@ err: replyp->skeydata.skeydata_val = NULL;
return;
}
-/* BEGIN __db_put_proc */
extern "C" void
__db_put_proc(
long dbpcl_id,
@@ -1309,7 +1457,6 @@ __db_put_proc(
u_int32_t flags,
__db_put_reply *replyp,
int * freep)
-/* END __db_put_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -1379,13 +1526,25 @@ err: replyp->keydata.keydata_val = NULL;
return;
}
-/* BEGIN __db_re_delim_proc */
+extern "C" void
+__db_get_re_delim_proc(
+ long dbpcl_id,
+ __db_get_re_delim_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_delim((int *)&replyp->delim);
+}
+
extern "C" void
__db_re_delim_proc(
long dbpcl_id,
u_int32_t delim,
__db_re_delim_reply *replyp)
-/* END __db_re_delim_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1400,13 +1559,25 @@ __db_re_delim_proc(
return;
}
-/* BEGIN __db_re_len_proc */
+extern "C" void
+__db_get_re_len_proc(
+ long dbpcl_id,
+ __db_get_re_len_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_len(&replyp->len);
+}
+
extern "C" void
__db_re_len_proc(
long dbpcl_id,
u_int32_t len,
__db_re_len_reply *replyp)
-/* END __db_re_len_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1421,13 +1592,25 @@ __db_re_len_proc(
return;
}
-/* BEGIN __db_re_pad_proc */
+void
+__db_get_re_pad_proc(
+ long dbpcl_id,
+ __db_get_re_pad_reply *replyp)
+{
+ Db *dbp;
+ ct_entry *dbp_ctp;
+
+ ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB);
+ dbp = (Db *)dbp_ctp->ct_anyp;
+
+ replyp->status = dbp->get_re_pad((int *)&replyp->pad);
+}
+
extern "C" void
__db_re_pad_proc(
long dbpcl_id,
u_int32_t pad,
__db_re_pad_reply *replyp)
-/* END __db_re_pad_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1442,7 +1625,6 @@ __db_re_pad_proc(
return;
}
-/* BEGIN __db_remove_proc */
extern "C" void
__db_remove_proc(
long dbpcl_id,
@@ -1450,7 +1632,6 @@ __db_remove_proc(
char *subdb,
u_int32_t flags,
__db_remove_reply *replyp)
-/* END __db_remove_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1466,7 +1647,6 @@ __db_remove_proc(
return;
}
-/* BEGIN __db_rename_proc */
extern "C" void
__db_rename_proc(
long dbpcl_id,
@@ -1475,7 +1655,6 @@ __db_rename_proc(
char *newname,
u_int32_t flags,
__db_rename_reply *replyp)
-/* END __db_rename_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1491,14 +1670,12 @@ __db_rename_proc(
return;
}
-/* BEGIN __db_stat_proc */
extern "C" void
__db_stat_proc(
long dbpcl_id,
u_int32_t flags,
__db_stat_reply *replyp,
int * freep)
-/* END __db_stat_proc */
{
Db *dbp;
DBTYPE type;
@@ -1547,13 +1724,11 @@ out:
return;
}
-/* BEGIN __db_sync_proc */
extern "C" void
__db_sync_proc(
long dbpcl_id,
u_int32_t flags,
__db_sync_reply *replyp)
-/* END __db_sync_proc */
{
Db *dbp;
ct_entry *dbp_ctp;
@@ -1568,14 +1743,12 @@ __db_sync_proc(
return;
}
-/* BEGIN __db_truncate_proc */
extern "C" void
__db_truncate_proc(
long dbpcl_id,
long txnpcl_id,
u_int32_t flags,
__db_truncate_reply *replyp)
-/* END __db_truncate_proc */
{
Db *dbp;
DbTxn *txnp;
@@ -1598,14 +1771,12 @@ __db_truncate_proc(
return;
}
-/* BEGIN __db_cursor_proc */
extern "C" void
__db_cursor_proc(
long dbpcl_id,
long txnpcl_id,
u_int32_t flags,
__db_cursor_reply *replyp)
-/* END __db_cursor_proc */
{
Db *dbp;
Dbc *dbc;
@@ -1642,7 +1813,6 @@ __db_cursor_proc(
return;
}
-/* BEGIN __db_join_proc */
extern "C" void
__db_join_proc(
long dbpcl_id,
@@ -1650,7 +1820,6 @@ __db_join_proc(
u_int32_t curslen,
u_int32_t flags,
__db_join_reply *replyp)
-/* END __db_join_proc */
{
Db *dbp;
Dbc **jcurs, **c;
@@ -1743,12 +1912,10 @@ out:
return;
}
-/* BEGIN __dbc_close_proc */
extern "C" void
__dbc_close_proc(
long dbccl_id,
__dbc_close_reply *replyp)
-/* END __dbc_close_proc */
{
ct_entry *dbc_ctp;
@@ -1757,13 +1924,11 @@ __dbc_close_proc(
return;
}
-/* BEGIN __dbc_count_proc */
extern "C" void
__dbc_count_proc(
long dbccl_id,
u_int32_t flags,
__dbc_count_reply *replyp)
-/* END __dbc_count_proc */
{
Dbc *dbc;
ct_entry *dbc_ctp;
@@ -1780,13 +1945,11 @@ __dbc_count_proc(
return;
}
-/* BEGIN __dbc_del_proc */
extern "C" void
__dbc_del_proc(
long dbccl_id,
u_int32_t flags,
__dbc_del_reply *replyp)
-/* END __dbc_del_proc */
{
Dbc *dbc;
ct_entry *dbc_ctp;
@@ -1801,13 +1964,11 @@ __dbc_del_proc(
return;
}
-/* BEGIN __dbc_dup_proc */
extern "C" void
__dbc_dup_proc(
long dbccl_id,
u_int32_t flags,
__dbc_dup_reply *replyp)
-/* END __dbc_dup_proc */
{
Dbc *dbc, *newdbc;
ct_entry *dbc_ctp, *new_ctp;
@@ -1840,7 +2001,6 @@ __dbc_dup_proc(
return;
}
-/* BEGIN __dbc_get_proc */
extern "C" void
__dbc_get_proc(
long dbccl_id,
@@ -1859,7 +2019,6 @@ __dbc_get_proc(
u_int32_t flags,
__dbc_get_reply *replyp,
int * freep)
-/* END __dbc_get_proc */
{
Dbc *dbc;
DbEnv *dbenv;
@@ -1967,7 +2126,6 @@ err: replyp->keydata.keydata_val = NULL;
return;
}
-/* BEGIN __dbc_pget_proc */
extern "C" void
__dbc_pget_proc(
long dbccl_id,
@@ -1992,7 +2150,6 @@ __dbc_pget_proc(
u_int32_t flags,
__dbc_pget_reply *replyp,
int * freep)
-/* END __dbc_pget_proc */
{
Dbc *dbc;
DbEnv *dbenv;
@@ -2131,7 +2288,6 @@ err: replyp->skeydata.skeydata_val = NULL;
return;
}
-/* BEGIN __dbc_put_proc */
extern "C" void
__dbc_put_proc(
long dbccl_id,
@@ -2150,7 +2306,6 @@ __dbc_put_proc(
u_int32_t flags,
__dbc_put_reply *replyp,
int * freep)
-/* END __dbc_put_proc */
{
Db *dbp;
Dbc *dbc;
diff --git a/db/rpc_server/cxx/db_server_cxxutil.cpp b/db/rpc_server/cxx/db_server_cxxutil.cpp
index 404440d48..cf2156c06 100644
--- a/db/rpc_server/cxx/db_server_cxxutil.cpp
+++ b/db/rpc_server/cxx/db_server_cxxutil.cpp
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: db_server_cxxutil.cpp,v 1.8 2002/05/23 07:49:34 mjc Exp ";
+static const char revid[] = "$Id: db_server_cxxutil.cpp,v 1.11 2003/04/23 20:44:47 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -640,8 +640,11 @@ add_home(char *home)
* to assure hp->name points to the last component.
*/
hp->name = __db_rpath(home);
- *(hp->name) = '\0';
- hp->name++;
+ if (hp->name != NULL) {
+ *(hp->name) = '\0';
+ hp->name++;
+ } else
+ hp->name = home;
while (*(hp->name) == '\0') {
hp->name = __db_rpath(home);
*(hp->name) = '\0';
@@ -686,10 +689,13 @@ add_passwd(char *passwd)
}
extern "C" home_entry *
-get_home(char *name)
+get_fullhome(char *name)
{
home_entry *hp;
+ if (name == NULL)
+ return (NULL);
+
for (hp = LIST_FIRST(&__dbsrv_home); hp != NULL;
hp = LIST_NEXT(hp, entries))
if (strcmp(name, hp->name) == 0)
diff --git a/db/rpc_server/db_server.x b/db/rpc_server/db_server.x
index 6bdff201f..a2b0cd666 100644
--- a/db/rpc_server/db_server.x
+++ b/db/rpc_server/db_server.x
@@ -1,5 +1,17 @@
/* Do not edit: automatically built by gen_rpc.awk. */
+struct __env_get_cachesize_msg {
+ unsigned int dbenvcl_id;
+};
+
+struct __env_get_cachesize_reply {
+ /* num return vars: 3 */
+ int status;
+ unsigned int gbytes;
+ unsigned int bytes;
+ unsigned int ncache;
+};
+
struct __env_cachesize_msg {
unsigned int dbenvcl_id;
unsigned int gbytes;
@@ -8,7 +20,8 @@ struct __env_cachesize_msg {
};
struct __env_cachesize_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __env_close_msg {
@@ -17,7 +30,8 @@ struct __env_close_msg {
};
struct __env_close_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __env_create_msg {
@@ -25,10 +39,69 @@ struct __env_create_msg {
};
struct __env_create_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int envcl_id;
};
+struct __env_dbremove_msg {
+ unsigned int dbenvcl_id;
+ unsigned int txnpcl_id;
+ string name<>;
+ string subdb<>;
+ unsigned int flags;
+};
+
+struct __env_dbremove_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __env_dbrename_msg {
+ unsigned int dbenvcl_id;
+ unsigned int txnpcl_id;
+ string name<>;
+ string subdb<>;
+ string newname<>;
+ unsigned int flags;
+};
+
+struct __env_dbrename_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __env_get_encrypt_flags_msg {
+ unsigned int dbenvcl_id;
+};
+
+struct __env_get_encrypt_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
+};
+
+struct __env_encrypt_msg {
+ unsigned int dbenvcl_id;
+ string passwd<>;
+ unsigned int flags;
+};
+
+struct __env_encrypt_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __env_get_flags_msg {
+ unsigned int dbenvcl_id;
+};
+
+struct __env_get_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
+};
+
struct __env_flags_msg {
unsigned int dbenvcl_id;
unsigned int flags;
@@ -36,7 +109,28 @@ struct __env_flags_msg {
};
struct __env_flags_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __env_get_home_msg {
+ unsigned int dbenvcl_id;
+};
+
+struct __env_get_home_reply {
+ /* num return vars: 1 */
+ int status;
+ string home<>;
+};
+
+struct __env_get_open_flags_msg {
+ unsigned int dbenvcl_id;
+};
+
+struct __env_get_open_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
};
struct __env_open_msg {
@@ -47,7 +141,9 @@ struct __env_open_msg {
};
struct __env_open_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
+ unsigned int envcl_id;
};
struct __env_remove_msg {
@@ -57,7 +153,8 @@ struct __env_remove_msg {
};
struct __env_remove_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __txn_abort_msg {
@@ -65,17 +162,19 @@ struct __txn_abort_msg {
};
struct __txn_abort_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __txn_begin_msg {
- unsigned int envpcl_id;
+ unsigned int dbenvcl_id;
unsigned int parentcl_id;
unsigned int flags;
};
struct __txn_begin_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int txnidcl_id;
};
@@ -85,7 +184,54 @@ struct __txn_commit_msg {
};
struct __txn_commit_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __txn_discard_msg {
+ unsigned int txnpcl_id;
+ unsigned int flags;
+};
+
+struct __txn_discard_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __txn_prepare_msg {
+ unsigned int txnpcl_id;
+ opaque gid[128];
+};
+
+struct __txn_prepare_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __txn_recover_msg {
+ unsigned int dbenvcl_id;
+ unsigned int count;
+ unsigned int flags;
+};
+
+struct __txn_recover_reply {
+ /* num return vars: 3 */
+ int status;
+ unsigned int txn<>;
+ opaque gid<>;
+ unsigned int retcount;
+};
+
+struct __db_associate_msg {
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
+ unsigned int sdbpcl_id;
+ unsigned int flags;
+};
+
+struct __db_associate_reply {
+ /* num return vars: 0 */
+ int status;
};
struct __db_bt_maxkey_msg {
@@ -94,7 +240,18 @@ struct __db_bt_maxkey_msg {
};
struct __db_bt_maxkey_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_bt_minkey_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_bt_minkey_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int minkey;
};
struct __db_bt_minkey_msg {
@@ -103,7 +260,8 @@ struct __db_bt_minkey_msg {
};
struct __db_bt_minkey_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_close_msg {
@@ -112,17 +270,19 @@ struct __db_close_msg {
};
struct __db_close_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_create_msg {
+ unsigned int dbenvcl_id;
unsigned int flags;
- unsigned int envpcl_id;
};
struct __db_create_reply {
- unsigned int status;
- unsigned int dbpcl_id;
+ /* num return vars: 1 */
+ int status;
+ unsigned int dbcl_id;
};
struct __db_del_msg {
@@ -130,13 +290,46 @@ struct __db_del_msg {
unsigned int txnpcl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int flags;
};
struct __db_del_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_encrypt_flags_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_encrypt_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
+};
+
+struct __db_encrypt_msg {
+ unsigned int dbpcl_id;
+ string passwd<>;
+ unsigned int flags;
+};
+
+struct __db_encrypt_reply {
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_extentsize_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_extentsize_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int extentsize;
};
struct __db_extentsize_msg {
@@ -145,7 +338,18 @@ struct __db_extentsize_msg {
};
struct __db_extentsize_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_flags_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
};
struct __db_flags_msg {
@@ -154,7 +358,8 @@ struct __db_flags_msg {
};
struct __db_flags_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_get_msg {
@@ -162,28 +367,73 @@ struct __db_get_msg {
unsigned int txnpcl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int datadlen;
unsigned int datadoff;
+ unsigned int dataulen;
unsigned int dataflags;
opaque datadata<>;
unsigned int flags;
};
struct __db_get_reply {
- unsigned int status;
+ /* num return vars: 2 */
+ int status;
opaque keydata<>;
opaque datadata<>;
};
+struct __db_get_name_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_name_reply {
+ /* num return vars: 2 */
+ int status;
+ string filename<>;
+ string dbname<>;
+};
+
+struct __db_get_open_flags_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_open_flags_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int flags;
+};
+
+struct __db_get_h_ffactor_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_h_ffactor_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int ffactor;
+};
+
struct __db_h_ffactor_msg {
unsigned int dbpcl_id;
unsigned int ffactor;
};
struct __db_h_ffactor_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_h_nelem_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_h_nelem_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int nelem;
};
struct __db_h_nelem_msg {
@@ -192,7 +442,8 @@ struct __db_h_nelem_msg {
};
struct __db_h_nelem_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_key_range_msg {
@@ -200,29 +451,43 @@ struct __db_key_range_msg {
unsigned int txnpcl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int flags;
};
struct __db_key_range_reply {
- unsigned int status;
+ /* num return vars: 3 */
+ int status;
double less;
double equal;
double greater;
};
+struct __db_get_lorder_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_lorder_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int lorder;
+};
+
struct __db_lorder_msg {
unsigned int dbpcl_id;
unsigned int lorder;
};
struct __db_lorder_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_open_msg {
unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
string name<>;
string subdb<>;
unsigned int type;
@@ -231,9 +496,22 @@ struct __db_open_msg {
};
struct __db_open_reply {
- unsigned int status;
+ /* num return vars: 4 */
+ int status;
+ unsigned int dbcl_id;
unsigned int type;
unsigned int dbflags;
+ unsigned int lorder;
+};
+
+struct __db_get_pagesize_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_pagesize_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int pagesize;
};
struct __db_pagesize_msg {
@@ -242,7 +520,37 @@ struct __db_pagesize_msg {
};
struct __db_pagesize_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_pget_msg {
+ unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
+ unsigned int skeydlen;
+ unsigned int skeydoff;
+ unsigned int skeyulen;
+ unsigned int skeyflags;
+ opaque skeydata<>;
+ unsigned int pkeydlen;
+ unsigned int pkeydoff;
+ unsigned int pkeyulen;
+ unsigned int pkeyflags;
+ opaque pkeydata<>;
+ unsigned int datadlen;
+ unsigned int datadoff;
+ unsigned int dataulen;
+ unsigned int dataflags;
+ opaque datadata<>;
+ unsigned int flags;
+};
+
+struct __db_pget_reply {
+ /* num return vars: 3 */
+ int status;
+ opaque skeydata<>;
+ opaque pkeydata<>;
+ opaque datadata<>;
};
struct __db_put_msg {
@@ -250,27 +558,51 @@ struct __db_put_msg {
unsigned int txnpcl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int datadlen;
unsigned int datadoff;
+ unsigned int dataulen;
unsigned int dataflags;
opaque datadata<>;
unsigned int flags;
};
struct __db_put_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
opaque keydata<>;
};
+struct __db_get_re_delim_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_re_delim_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int delim;
+};
+
struct __db_re_delim_msg {
unsigned int dbpcl_id;
unsigned int delim;
};
struct __db_re_delim_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_re_len_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_re_len_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int len;
};
struct __db_re_len_msg {
@@ -279,7 +611,8 @@ struct __db_re_len_msg {
};
struct __db_re_len_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_re_pad_msg {
@@ -288,7 +621,18 @@ struct __db_re_pad_msg {
};
struct __db_re_pad_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
+};
+
+struct __db_get_re_pad_msg {
+ unsigned int dbpcl_id;
+};
+
+struct __db_get_re_pad_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int pad;
};
struct __db_remove_msg {
@@ -299,7 +643,8 @@ struct __db_remove_msg {
};
struct __db_remove_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_rename_msg {
@@ -311,7 +656,8 @@ struct __db_rename_msg {
};
struct __db_rename_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __db_stat_msg {
@@ -319,31 +665,32 @@ struct __db_stat_msg {
unsigned int flags;
};
-struct __db_stat_statsreplist {
- opaque ent<>;
- __db_stat_statsreplist *next;
-};
-
struct __db_stat_reply {
- unsigned int status;
- __db_stat_statsreplist *statslist;
+ /* num return vars: 1 */
+ int status;
+ unsigned int stats<>;
};
-struct __db_swapped_msg {
+struct __db_sync_msg {
unsigned int dbpcl_id;
+ unsigned int flags;
};
-struct __db_swapped_reply {
- unsigned int status;
+struct __db_sync_reply {
+ /* num return vars: 0 */
+ int status;
};
-struct __db_sync_msg {
+struct __db_truncate_msg {
unsigned int dbpcl_id;
+ unsigned int txnpcl_id;
unsigned int flags;
};
-struct __db_sync_reply {
- unsigned int status;
+struct __db_truncate_reply {
+ /* num return vars: 1 */
+ int status;
+ unsigned int count;
};
struct __db_cursor_msg {
@@ -353,23 +700,20 @@ struct __db_cursor_msg {
};
struct __db_cursor_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int dbcidcl_id;
};
-struct __db_join_curslist {
- opaque ent<>;
- __db_join_curslist *next;
-};
-
struct __db_join_msg {
unsigned int dbpcl_id;
- __db_join_curslist *curslist;
+ unsigned int curs<>;
unsigned int flags;
};
struct __db_join_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int dbcidcl_id;
};
@@ -378,7 +722,8 @@ struct __dbc_close_msg {
};
struct __dbc_close_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __dbc_count_msg {
@@ -387,7 +732,8 @@ struct __dbc_count_msg {
};
struct __dbc_count_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int dupcount;
};
@@ -397,7 +743,8 @@ struct __dbc_del_msg {
};
struct __dbc_del_reply {
- unsigned int status;
+ /* num return vars: 0 */
+ int status;
};
struct __dbc_dup_msg {
@@ -406,7 +753,8 @@ struct __dbc_dup_msg {
};
struct __dbc_dup_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
unsigned int dbcidcl_id;
};
@@ -414,79 +762,141 @@ struct __dbc_get_msg {
unsigned int dbccl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int datadlen;
unsigned int datadoff;
+ unsigned int dataulen;
unsigned int dataflags;
opaque datadata<>;
unsigned int flags;
};
struct __dbc_get_reply {
- unsigned int status;
+ /* num return vars: 2 */
+ int status;
opaque keydata<>;
opaque datadata<>;
};
+struct __dbc_pget_msg {
+ unsigned int dbccl_id;
+ unsigned int skeydlen;
+ unsigned int skeydoff;
+ unsigned int skeyulen;
+ unsigned int skeyflags;
+ opaque skeydata<>;
+ unsigned int pkeydlen;
+ unsigned int pkeydoff;
+ unsigned int pkeyulen;
+ unsigned int pkeyflags;
+ opaque pkeydata<>;
+ unsigned int datadlen;
+ unsigned int datadoff;
+ unsigned int dataulen;
+ unsigned int dataflags;
+ opaque datadata<>;
+ unsigned int flags;
+};
+
+struct __dbc_pget_reply {
+ /* num return vars: 3 */
+ int status;
+ opaque skeydata<>;
+ opaque pkeydata<>;
+ opaque datadata<>;
+};
+
struct __dbc_put_msg {
unsigned int dbccl_id;
unsigned int keydlen;
unsigned int keydoff;
+ unsigned int keyulen;
unsigned int keyflags;
opaque keydata<>;
unsigned int datadlen;
unsigned int datadoff;
+ unsigned int dataulen;
unsigned int dataflags;
opaque datadata<>;
unsigned int flags;
};
struct __dbc_put_reply {
- unsigned int status;
+ /* num return vars: 1 */
+ int status;
opaque keydata<>;
};
-program DB_SERVERPROG {
- version DB_SERVERVERS {
- __env_cachesize_reply __DB_env_cachesize(__env_cachesize_msg) = 1;
- __env_close_reply __DB_env_close(__env_close_msg) = 2;
- __env_create_reply __DB_env_create(__env_create_msg) = 3;
- __env_flags_reply __DB_env_flags(__env_flags_msg) = 4;
- __env_open_reply __DB_env_open(__env_open_msg) = 5;
- __env_remove_reply __DB_env_remove(__env_remove_msg) = 6;
- __txn_abort_reply __DB_txn_abort(__txn_abort_msg) = 7;
- __txn_begin_reply __DB_txn_begin(__txn_begin_msg) = 8;
- __txn_commit_reply __DB_txn_commit(__txn_commit_msg) = 9;
- __db_bt_maxkey_reply __DB_db_bt_maxkey(__db_bt_maxkey_msg) = 10;
- __db_bt_minkey_reply __DB_db_bt_minkey(__db_bt_minkey_msg) = 11;
- __db_close_reply __DB_db_close(__db_close_msg) = 12;
- __db_create_reply __DB_db_create(__db_create_msg) = 13;
- __db_del_reply __DB_db_del(__db_del_msg) = 14;
- __db_extentsize_reply __DB_db_extentsize(__db_extentsize_msg) = 15;
- __db_flags_reply __DB_db_flags(__db_flags_msg) = 16;
- __db_get_reply __DB_db_get(__db_get_msg) = 17;
- __db_h_ffactor_reply __DB_db_h_ffactor(__db_h_ffactor_msg) = 18;
- __db_h_nelem_reply __DB_db_h_nelem(__db_h_nelem_msg) = 19;
- __db_key_range_reply __DB_db_key_range(__db_key_range_msg) = 20;
- __db_lorder_reply __DB_db_lorder(__db_lorder_msg) = 21;
- __db_open_reply __DB_db_open(__db_open_msg) = 22;
- __db_pagesize_reply __DB_db_pagesize(__db_pagesize_msg) = 23;
- __db_put_reply __DB_db_put(__db_put_msg) = 24;
- __db_re_delim_reply __DB_db_re_delim(__db_re_delim_msg) = 25;
- __db_re_len_reply __DB_db_re_len(__db_re_len_msg) = 26;
- __db_re_pad_reply __DB_db_re_pad(__db_re_pad_msg) = 27;
- __db_remove_reply __DB_db_remove(__db_remove_msg) = 28;
- __db_rename_reply __DB_db_rename(__db_rename_msg) = 29;
- __db_stat_reply __DB_db_stat(__db_stat_msg) = 30;
- __db_swapped_reply __DB_db_swapped(__db_swapped_msg) = 31;
- __db_sync_reply __DB_db_sync(__db_sync_msg) = 32;
- __db_cursor_reply __DB_db_cursor(__db_cursor_msg) = 33;
- __db_join_reply __DB_db_join(__db_join_msg) = 34;
- __dbc_close_reply __DB_dbc_close(__dbc_close_msg) = 35;
- __dbc_count_reply __DB_dbc_count(__dbc_count_msg) = 36;
- __dbc_del_reply __DB_dbc_del(__dbc_del_msg) = 37;
- __dbc_dup_reply __DB_dbc_dup(__dbc_dup_msg) = 38;
- __dbc_get_reply __DB_dbc_get(__dbc_get_msg) = 39;
- __dbc_put_reply __DB_dbc_put(__dbc_put_msg) = 40;
- } = 1;
+program DB_RPC_SERVERPROG {
+ version DB_RPC_SERVERVERS {
+ __env_get_cachesize_reply __DB_env_get_cachesize(__env_get_cachesize_msg) = 1;
+ __env_cachesize_reply __DB_env_cachesize(__env_cachesize_msg) = 2;
+ __env_close_reply __DB_env_close(__env_close_msg) = 3;
+ __env_create_reply __DB_env_create(__env_create_msg) = 4;
+ __env_dbremove_reply __DB_env_dbremove(__env_dbremove_msg) = 5;
+ __env_dbrename_reply __DB_env_dbrename(__env_dbrename_msg) = 6;
+ __env_get_encrypt_flags_reply __DB_env_get_encrypt_flags(__env_get_encrypt_flags_msg) = 7;
+ __env_encrypt_reply __DB_env_encrypt(__env_encrypt_msg) = 8;
+ __env_get_flags_reply __DB_env_get_flags(__env_get_flags_msg) = 9;
+ __env_flags_reply __DB_env_flags(__env_flags_msg) = 10;
+ __env_get_home_reply __DB_env_get_home(__env_get_home_msg) = 11;
+ __env_get_open_flags_reply __DB_env_get_open_flags(__env_get_open_flags_msg) = 12;
+ __env_open_reply __DB_env_open(__env_open_msg) = 13;
+ __env_remove_reply __DB_env_remove(__env_remove_msg) = 14;
+ __txn_abort_reply __DB_txn_abort(__txn_abort_msg) = 15;
+ __txn_begin_reply __DB_txn_begin(__txn_begin_msg) = 16;
+ __txn_commit_reply __DB_txn_commit(__txn_commit_msg) = 17;
+ __txn_discard_reply __DB_txn_discard(__txn_discard_msg) = 18;
+ __txn_prepare_reply __DB_txn_prepare(__txn_prepare_msg) = 19;
+ __txn_recover_reply __DB_txn_recover(__txn_recover_msg) = 20;
+ __db_associate_reply __DB_db_associate(__db_associate_msg) = 21;
+ __db_bt_maxkey_reply __DB_db_bt_maxkey(__db_bt_maxkey_msg) = 22;
+ __db_get_bt_minkey_reply __DB_db_get_bt_minkey(__db_get_bt_minkey_msg) = 23;
+ __db_bt_minkey_reply __DB_db_bt_minkey(__db_bt_minkey_msg) = 24;
+ __db_close_reply __DB_db_close(__db_close_msg) = 25;
+ __db_create_reply __DB_db_create(__db_create_msg) = 26;
+ __db_del_reply __DB_db_del(__db_del_msg) = 27;
+ __db_get_encrypt_flags_reply __DB_db_get_encrypt_flags(__db_get_encrypt_flags_msg) = 28;
+ __db_encrypt_reply __DB_db_encrypt(__db_encrypt_msg) = 29;
+ __db_get_extentsize_reply __DB_db_get_extentsize(__db_get_extentsize_msg) = 30;
+ __db_extentsize_reply __DB_db_extentsize(__db_extentsize_msg) = 31;
+ __db_get_flags_reply __DB_db_get_flags(__db_get_flags_msg) = 32;
+ __db_flags_reply __DB_db_flags(__db_flags_msg) = 33;
+ __db_get_reply __DB_db_get(__db_get_msg) = 34;
+ __db_get_name_reply __DB_db_get_name(__db_get_name_msg) = 35;
+ __db_get_open_flags_reply __DB_db_get_open_flags(__db_get_open_flags_msg) = 36;
+ __db_get_h_ffactor_reply __DB_db_get_h_ffactor(__db_get_h_ffactor_msg) = 37;
+ __db_h_ffactor_reply __DB_db_h_ffactor(__db_h_ffactor_msg) = 38;
+ __db_get_h_nelem_reply __DB_db_get_h_nelem(__db_get_h_nelem_msg) = 39;
+ __db_h_nelem_reply __DB_db_h_nelem(__db_h_nelem_msg) = 40;
+ __db_key_range_reply __DB_db_key_range(__db_key_range_msg) = 41;
+ __db_get_lorder_reply __DB_db_get_lorder(__db_get_lorder_msg) = 42;
+ __db_lorder_reply __DB_db_lorder(__db_lorder_msg) = 43;
+ __db_open_reply __DB_db_open(__db_open_msg) = 44;
+ __db_get_pagesize_reply __DB_db_get_pagesize(__db_get_pagesize_msg) = 45;
+ __db_pagesize_reply __DB_db_pagesize(__db_pagesize_msg) = 46;
+ __db_pget_reply __DB_db_pget(__db_pget_msg) = 47;
+ __db_put_reply __DB_db_put(__db_put_msg) = 48;
+ __db_get_re_delim_reply __DB_db_get_re_delim(__db_get_re_delim_msg) = 49;
+ __db_re_delim_reply __DB_db_re_delim(__db_re_delim_msg) = 50;
+ __db_get_re_len_reply __DB_db_get_re_len(__db_get_re_len_msg) = 51;
+ __db_re_len_reply __DB_db_re_len(__db_re_len_msg) = 52;
+ __db_re_pad_reply __DB_db_re_pad(__db_re_pad_msg) = 53;
+ __db_get_re_pad_reply __DB_db_get_re_pad(__db_get_re_pad_msg) = 54;
+ __db_remove_reply __DB_db_remove(__db_remove_msg) = 55;
+ __db_rename_reply __DB_db_rename(__db_rename_msg) = 56;
+ __db_stat_reply __DB_db_stat(__db_stat_msg) = 57;
+ __db_sync_reply __DB_db_sync(__db_sync_msg) = 58;
+ __db_truncate_reply __DB_db_truncate(__db_truncate_msg) = 59;
+ __db_cursor_reply __DB_db_cursor(__db_cursor_msg) = 60;
+ __db_join_reply __DB_db_join(__db_join_msg) = 61;
+ __dbc_close_reply __DB_dbc_close(__dbc_close_msg) = 62;
+ __dbc_count_reply __DB_dbc_count(__dbc_count_msg) = 63;
+ __dbc_del_reply __DB_dbc_del(__dbc_del_msg) = 64;
+ __dbc_dup_reply __DB_dbc_dup(__dbc_dup_msg) = 65;
+ __dbc_get_reply __DB_dbc_get(__dbc_get_msg) = 66;
+ __dbc_pget_reply __DB_dbc_pget(__dbc_pget_msg) = 67;
+ __dbc_put_reply __DB_dbc_put(__dbc_put_msg) = 68;
+ } = 4002;
} = 351457;
diff --git a/db/rpc_server/java/DbDispatcher.java b/db/rpc_server/java/DbDispatcher.java
index a4f93b80c..435d0145e 100644
--- a/db/rpc_server/java/DbDispatcher.java
+++ b/db/rpc_server/java/DbDispatcher.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: DbDispatcher.java,v 1.5 2002/08/09 01:56:08 bostic Exp
+ * $Id: DbDispatcher.java,v 1.2 2003/12/15 21:44:36 jbj Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -24,10 +24,10 @@ public abstract class DbDispatcher extends DbServerStub
abstract int addDb(RpcDb rdb);
abstract int addTxn(RpcDbTxn rtxn);
abstract int addCursor(RpcDbc rdbc);
- abstract void delEnv(RpcDbEnv rdbenv);
- abstract void delDb(RpcDb rdb);
- abstract void delTxn(RpcDbTxn rtxn);
- abstract void delCursor(RpcDbc rdbc);
+ abstract void delEnv(RpcDbEnv rdbenv, boolean dispose);
+ abstract void delDb(RpcDb rdb, boolean dispose);
+ abstract void delTxn(RpcDbTxn rtxn, boolean dispose);
+ abstract void delCursor(RpcDbc rdbc, boolean dispose);
abstract RpcDbEnv getEnv(int envid);
abstract RpcDb getDb(int dbid);
abstract RpcDbTxn getTxn(int txnbid);
@@ -40,7 +40,7 @@ public abstract class DbDispatcher extends DbServerStub
//// Db methods
- public __db_associate_reply __DB_db_associate_4001(__db_associate_msg args)
+ public __db_associate_reply __DB_db_associate_4002(__db_associate_msg args)
{
__db_associate_reply reply = new __db_associate_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -51,7 +51,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_bt_maxkey_reply __DB_db_bt_maxkey_4001(__db_bt_maxkey_msg args)
+ public __db_bt_maxkey_reply __DB_db_bt_maxkey_4002(__db_bt_maxkey_msg args)
{
__db_bt_maxkey_reply reply = new __db_bt_maxkey_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -62,7 +62,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_bt_minkey_reply __DB_db_bt_minkey_4001(__db_bt_minkey_msg args)
+ public __db_get_bt_minkey_reply __DB_db_get_bt_minkey_4002(__db_get_bt_minkey_msg args)
+ {
+ __db_get_bt_minkey_reply reply = new __db_get_bt_minkey_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_bt_minkey(this, args, reply);
+ return reply;
+ }
+
+ public __db_bt_minkey_reply __DB_db_bt_minkey_4002(__db_bt_minkey_msg args)
{
__db_bt_minkey_reply reply = new __db_bt_minkey_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -73,7 +84,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_close_reply __DB_db_close_4001(__db_close_msg args)
+ public __db_close_reply __DB_db_close_4002(__db_close_msg args)
{
__db_close_reply reply = new __db_close_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -84,7 +95,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_create_reply __DB_db_create_4001(__db_create_msg args)
+ public __db_create_reply __DB_db_create_4002(__db_create_msg args)
{
__db_create_reply reply = new __db_create_reply();
RpcDb rdb = new RpcDb(getEnv(args.dbenvcl_id));
@@ -95,7 +106,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_cursor_reply __DB_db_cursor_4001(__db_cursor_msg args)
+ public __db_cursor_reply __DB_db_cursor_4002(__db_cursor_msg args)
{
__db_cursor_reply reply = new __db_cursor_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -106,7 +117,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_del_reply __DB_db_del_4001(__db_del_msg args)
+ public __db_del_reply __DB_db_del_4002(__db_del_msg args)
{
__db_del_reply reply = new __db_del_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -117,7 +128,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_encrypt_reply __DB_db_encrypt_4001(__db_encrypt_msg args)
+ public __db_get_encrypt_flags_reply __DB_db_get_encrypt_flags_4002(__db_get_encrypt_flags_msg args)
+ {
+ __db_get_encrypt_flags_reply reply = new __db_get_encrypt_flags_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_encrypt_flags(this, args, reply);
+ return reply;
+ }
+
+ public __db_encrypt_reply __DB_db_encrypt_4002(__db_encrypt_msg args)
{
__db_encrypt_reply reply = new __db_encrypt_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -128,7 +150,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_extentsize_reply __DB_db_extentsize_4001(__db_extentsize_msg args)
+ public __db_get_extentsize_reply __DB_db_get_extentsize_4002(__db_get_extentsize_msg args)
+ {
+ __db_get_extentsize_reply reply = new __db_get_extentsize_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_q_extentsize(this, args, reply);
+ return reply;
+ }
+
+ public __db_extentsize_reply __DB_db_extentsize_4002(__db_extentsize_msg args)
{
__db_extentsize_reply reply = new __db_extentsize_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -139,7 +172,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_flags_reply __DB_db_flags_4001(__db_flags_msg args)
+ public __db_get_flags_reply __DB_db_get_flags_4002(__db_get_flags_msg args)
+ {
+ __db_get_flags_reply reply = new __db_get_flags_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_flags(this, args, reply);
+ return reply;
+ }
+
+ public __db_flags_reply __DB_db_flags_4002(__db_flags_msg args)
{
__db_flags_reply reply = new __db_flags_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -150,7 +194,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_get_reply __DB_db_get_4001(__db_get_msg args)
+ public __db_get_reply __DB_db_get_4002(__db_get_msg args)
{
__db_get_reply reply = new __db_get_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -161,7 +205,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_h_ffactor_reply __DB_db_h_ffactor_4001(__db_h_ffactor_msg args)
+ public __db_get_h_ffactor_reply __DB_db_get_h_ffactor_4002(__db_get_h_ffactor_msg args)
+ {
+ __db_get_h_ffactor_reply reply = new __db_get_h_ffactor_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_h_ffactor(this, args, reply);
+ return reply;
+ }
+
+ public __db_h_ffactor_reply __DB_db_h_ffactor_4002(__db_h_ffactor_msg args)
{
__db_h_ffactor_reply reply = new __db_h_ffactor_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -172,7 +227,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_h_nelem_reply __DB_db_h_nelem_4001(__db_h_nelem_msg args)
+ public __db_get_h_nelem_reply __DB_db_get_h_nelem_4002(__db_get_h_nelem_msg args)
+ {
+ __db_get_h_nelem_reply reply = new __db_get_h_nelem_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_h_nelem(this, args, reply);
+ return reply;
+ }
+
+ public __db_h_nelem_reply __DB_db_h_nelem_4002(__db_h_nelem_msg args)
{
__db_h_nelem_reply reply = new __db_h_nelem_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -183,7 +249,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_join_reply __DB_db_join_4001(__db_join_msg args)
+ public __db_join_reply __DB_db_join_4002(__db_join_msg args)
{
__db_join_reply reply = new __db_join_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -194,7 +260,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_key_range_reply __DB_db_key_range_4001(__db_key_range_msg args)
+ public __db_key_range_reply __DB_db_key_range_4002(__db_key_range_msg args)
{
__db_key_range_reply reply = new __db_key_range_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -205,7 +271,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_lorder_reply __DB_db_lorder_4001(__db_lorder_msg args)
+ public __db_get_lorder_reply __DB_db_get_lorder_4002(__db_get_lorder_msg args)
+ {
+ __db_get_lorder_reply reply = new __db_get_lorder_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_lorder(this, args, reply);
+ return reply;
+ }
+
+ public __db_lorder_reply __DB_db_lorder_4002(__db_lorder_msg args)
{
__db_lorder_reply reply = new __db_lorder_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -216,7 +293,29 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_open_reply __DB_db_open_4001(__db_open_msg args)
+ public __db_get_name_reply __DB_db_get_name_4002(__db_get_name_msg args)
+ {
+ __db_get_name_reply reply = new __db_get_name_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_name(this, args, reply);
+ return reply;
+ }
+
+ public __db_get_open_flags_reply __DB_db_get_open_flags_4002(__db_get_open_flags_msg args)
+ {
+ __db_get_open_flags_reply reply = new __db_get_open_flags_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_open_flags(this, args, reply);
+ return reply;
+ }
+
+ public __db_open_reply __DB_db_open_4002(__db_open_msg args)
{
__db_open_reply reply = new __db_open_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -227,7 +326,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_pagesize_reply __DB_db_pagesize_4001(__db_pagesize_msg args)
+ public __db_get_pagesize_reply __DB_db_get_pagesize_4002(__db_get_pagesize_msg args)
+ {
+ __db_get_pagesize_reply reply = new __db_get_pagesize_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_pagesize(this, args, reply);
+ return reply;
+ }
+
+ public __db_pagesize_reply __DB_db_pagesize_4002(__db_pagesize_msg args)
{
__db_pagesize_reply reply = new __db_pagesize_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -238,7 +348,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_pget_reply __DB_db_pget_4001(__db_pget_msg args)
+ public __db_pget_reply __DB_db_pget_4002(__db_pget_msg args)
{
__db_pget_reply reply = new __db_pget_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -249,7 +359,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_put_reply __DB_db_put_4001(__db_put_msg args)
+ public __db_put_reply __DB_db_put_4002(__db_put_msg args)
{
__db_put_reply reply = new __db_put_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -260,7 +370,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_remove_reply __DB_db_remove_4001(__db_remove_msg args)
+ public __db_remove_reply __DB_db_remove_4002(__db_remove_msg args)
{
__db_remove_reply reply = new __db_remove_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -271,7 +381,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_rename_reply __DB_db_rename_4001(__db_rename_msg args)
+ public __db_rename_reply __DB_db_rename_4002(__db_rename_msg args)
{
__db_rename_reply reply = new __db_rename_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -282,7 +392,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_re_delim_reply __DB_db_re_delim_4001(__db_re_delim_msg args)
+ public __db_get_re_delim_reply __DB_db_get_re_delim_4002(__db_get_re_delim_msg args)
+ {
+ __db_get_re_delim_reply reply = new __db_get_re_delim_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_re_delim(this, args, reply);
+ return reply;
+ }
+
+ public __db_re_delim_reply __DB_db_re_delim_4002(__db_re_delim_msg args)
{
__db_re_delim_reply reply = new __db_re_delim_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -293,7 +414,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_re_len_reply __DB_db_re_len_4001(__db_re_len_msg args)
+ public __db_get_re_len_reply __DB_db_get_re_len_4002(__db_get_re_len_msg args)
+ {
+ __db_get_re_len_reply reply = new __db_get_re_len_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_re_len(this, args, reply);
+ return reply;
+ }
+
+ public __db_re_len_reply __DB_db_re_len_4002(__db_re_len_msg args)
{
__db_re_len_reply reply = new __db_re_len_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -304,7 +436,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_re_pad_reply __DB_db_re_pad_4001(__db_re_pad_msg args)
+ public __db_get_re_pad_reply __DB_db_get_re_pad_4002(__db_get_re_pad_msg args)
+ {
+ __db_get_re_pad_reply reply = new __db_get_re_pad_reply();
+ RpcDb rdb = getDb(args.dbpcl_id);
+ if (rdb == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdb.get_re_pad(this, args, reply);
+ return reply;
+ }
+
+ public __db_re_pad_reply __DB_db_re_pad_4002(__db_re_pad_msg args)
{
__db_re_pad_reply reply = new __db_re_pad_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -315,7 +458,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_stat_reply __DB_db_stat_4001(__db_stat_msg args)
+ public __db_stat_reply __DB_db_stat_4002(__db_stat_msg args)
{
__db_stat_reply reply = new __db_stat_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -326,7 +469,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_sync_reply __DB_db_sync_4001(__db_sync_msg args)
+ public __db_sync_reply __DB_db_sync_4002(__db_sync_msg args)
{
__db_sync_reply reply = new __db_sync_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -337,7 +480,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __db_truncate_reply __DB_db_truncate_4001(__db_truncate_msg args)
+ public __db_truncate_reply __DB_db_truncate_4002(__db_truncate_msg args)
{
__db_truncate_reply reply = new __db_truncate_reply();
RpcDb rdb = getDb(args.dbpcl_id);
@@ -350,7 +493,7 @@ public abstract class DbDispatcher extends DbServerStub
//// Cursor methods
- public __dbc_close_reply __DB_dbc_close_4001(__dbc_close_msg args)
+ public __dbc_close_reply __DB_dbc_close_4002(__dbc_close_msg args)
{
__dbc_close_reply reply = new __dbc_close_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
@@ -361,7 +504,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_count_reply __DB_dbc_count_4001(__dbc_count_msg args)
+ public __dbc_count_reply __DB_dbc_count_4002(__dbc_count_msg args)
{
__dbc_count_reply reply = new __dbc_count_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
@@ -372,7 +515,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_del_reply __DB_dbc_del_4001(__dbc_del_msg args)
+ public __dbc_del_reply __DB_dbc_del_4002(__dbc_del_msg args)
{
__dbc_del_reply reply = new __dbc_del_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
@@ -383,7 +526,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_dup_reply __DB_dbc_dup_4001(__dbc_dup_msg args)
+ public __dbc_dup_reply __DB_dbc_dup_4002(__dbc_dup_msg args)
{
__dbc_dup_reply reply = new __dbc_dup_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
@@ -394,7 +537,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_get_reply __DB_dbc_get_4001(__dbc_get_msg args)
+ public __dbc_get_reply __DB_dbc_get_4002(__dbc_get_msg args)
{
__dbc_get_reply reply = new __dbc_get_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
@@ -405,7 +548,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_pget_reply __DB_dbc_pget_4001(__dbc_pget_msg args) {
+ public __dbc_pget_reply __DB_dbc_pget_4002(__dbc_pget_msg args) {
__dbc_pget_reply reply = new __dbc_pget_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
if (rdbc == null)
@@ -415,7 +558,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __dbc_put_reply __DB_dbc_put_4001(__dbc_put_msg args) {
+ public __dbc_put_reply __DB_dbc_put_4002(__dbc_put_msg args) {
__dbc_put_reply reply = new __dbc_put_reply();
RpcDbc rdbc = getCursor(args.dbccl_id);
if (rdbc == null)
@@ -427,7 +570,18 @@ public abstract class DbDispatcher extends DbServerStub
//// Environment methods
- public __env_cachesize_reply __DB_env_cachesize_4001(__env_cachesize_msg args)
+ public __env_get_cachesize_reply __DB_env_get_cachesize_4002(__env_get_cachesize_msg args)
+ {
+ __env_get_cachesize_reply reply = new __env_get_cachesize_reply();
+ RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
+ if (rdbenv == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdbenv.get_cachesize(this, args, reply);
+ return reply;
+ }
+
+ public __env_cachesize_reply __DB_env_cachesize_4002(__env_cachesize_msg args)
{
__env_cachesize_reply reply = new __env_cachesize_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -438,7 +592,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_close_reply __DB_env_close_4001(__env_close_msg args)
+ public __env_close_reply __DB_env_close_4002(__env_close_msg args)
{
__env_close_reply reply = new __env_close_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -449,7 +603,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_create_reply __DB_env_create_4001(__env_create_msg args)
+ public __env_create_reply __DB_env_create_4002(__env_create_msg args)
{
__env_create_reply reply = new __env_create_reply();
RpcDbEnv rdbenv = new RpcDbEnv();
@@ -457,7 +611,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_dbremove_reply __DB_env_dbremove_4001(__env_dbremove_msg args)
+ public __env_dbremove_reply __DB_env_dbremove_4002(__env_dbremove_msg args)
{
__env_dbremove_reply reply = new __env_dbremove_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -468,7 +622,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_dbrename_reply __DB_env_dbrename_4001(__env_dbrename_msg args)
+ public __env_dbrename_reply __DB_env_dbrename_4002(__env_dbrename_msg args)
{
__env_dbrename_reply reply = new __env_dbrename_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -479,7 +633,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_encrypt_reply __DB_env_encrypt_4001(__env_encrypt_msg args)
+ public __env_get_encrypt_flags_reply __DB_env_get_encrypt_flags_4002(__env_get_encrypt_flags_msg args)
+ {
+ __env_get_encrypt_flags_reply reply = new __env_get_encrypt_flags_reply();
+ RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
+ if (rdbenv == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdbenv.get_encrypt_flags(this, args, reply);
+ return reply;
+ }
+
+ public __env_encrypt_reply __DB_env_encrypt_4002(__env_encrypt_msg args)
{
__env_encrypt_reply reply = new __env_encrypt_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -490,7 +655,18 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_flags_reply __DB_env_flags_4001(__env_flags_msg args)
+ public __env_get_flags_reply __DB_env_get_flags_4002(__env_get_flags_msg args)
+ {
+ __env_get_flags_reply reply = new __env_get_flags_reply();
+ RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
+ if (rdbenv == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdbenv.get_flags(this, args, reply);
+ return reply;
+ }
+
+ public __env_flags_reply __DB_env_flags_4002(__env_flags_msg args)
{
__env_flags_reply reply = new __env_flags_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -501,7 +677,29 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_open_reply __DB_env_open_4001(__env_open_msg args)
+ public __env_get_home_reply __DB_env_get_home_4002(__env_get_home_msg args)
+ {
+ __env_get_home_reply reply = new __env_get_home_reply();
+ RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
+ if (rdbenv == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdbenv.get_home(this, args, reply);
+ return reply;
+ }
+
+ public __env_get_open_flags_reply __DB_env_get_open_flags_4002(__env_get_open_flags_msg args)
+ {
+ __env_get_open_flags_reply reply = new __env_get_open_flags_reply();
+ RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
+ if (rdbenv == null)
+ reply.status = Db.DB_NOSERVER_ID;
+ else
+ rdbenv.get_open_flags(this, args, reply);
+ return reply;
+ }
+
+ public __env_open_reply __DB_env_open_4002(__env_open_msg args)
{
__env_open_reply reply = new __env_open_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -512,7 +710,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __env_remove_reply __DB_env_remove_4001(__env_remove_msg args)
+ public __env_remove_reply __DB_env_remove_4002(__env_remove_msg args)
{
__env_remove_reply reply = new __env_remove_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
@@ -525,7 +723,7 @@ public abstract class DbDispatcher extends DbServerStub
//// Transaction methods
- public __txn_abort_reply __DB_txn_abort_4001(__txn_abort_msg args)
+ public __txn_abort_reply __DB_txn_abort_4002(__txn_abort_msg args)
{
__txn_abort_reply reply = new __txn_abort_reply();
RpcDbTxn rdbtxn = getTxn(args.txnpcl_id);
@@ -536,7 +734,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __txn_begin_reply __DB_txn_begin_4001(__txn_begin_msg args)
+ public __txn_begin_reply __DB_txn_begin_4002(__txn_begin_msg args)
{
__txn_begin_reply reply = new __txn_begin_reply();
RpcDbTxn rdbtxn = new RpcDbTxn(getEnv(args.dbenvcl_id), null);
@@ -544,7 +742,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __txn_commit_reply __DB_txn_commit_4001(__txn_commit_msg args)
+ public __txn_commit_reply __DB_txn_commit_4002(__txn_commit_msg args)
{
__txn_commit_reply reply = new __txn_commit_reply();
RpcDbTxn rdbtxn = getTxn(args.txnpcl_id);
@@ -555,7 +753,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __txn_discard_reply __DB_txn_discard_4001(__txn_discard_msg args)
+ public __txn_discard_reply __DB_txn_discard_4002(__txn_discard_msg args)
{
__txn_discard_reply reply = new __txn_discard_reply();
RpcDbTxn rdbtxn = getTxn(args.txnpcl_id);
@@ -566,7 +764,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __txn_prepare_reply __DB_txn_prepare_4001(__txn_prepare_msg args)
+ public __txn_prepare_reply __DB_txn_prepare_4002(__txn_prepare_msg args)
{
__txn_prepare_reply reply = new __txn_prepare_reply();
RpcDbTxn rdbtxn = getTxn(args.txnpcl_id);
@@ -577,7 +775,7 @@ public abstract class DbDispatcher extends DbServerStub
return reply;
}
- public __txn_recover_reply __DB_txn_recover_4001(__txn_recover_msg args)
+ public __txn_recover_reply __DB_txn_recover_4002(__txn_recover_msg args)
{
__txn_recover_reply reply = new __txn_recover_reply();
RpcDbEnv rdbenv = getEnv(args.dbenvcl_id);
diff --git a/db/rpc_server/java/DbServer.java b/db/rpc_server/java/DbServer.java
index 7e3b1ca0a..1690cb8ce 100644
--- a/db/rpc_server/java/DbServer.java
+++ b/db/rpc_server/java/DbServer.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: DbServer.java,v 1.5 2002/08/09 01:56:09 bostic Exp
+ * $Id: DbServer.java,v 1.2 2003/12/15 21:44:37 jbj Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -44,14 +44,14 @@ public class DbServer extends DbDispatcher
long newnow = System.currentTimeMillis();
// DbServer.err.println("Dispatching RPC call " + procedure + " after delay of " + (newnow - now));
now = newnow;
- // DbServer.err.flush();
- super.dispatchOncRpcCall(call, program, version, procedure);
-
try {
- doTimeouts();
+ super.dispatchOncRpcCall(call, program, version, procedure);
} catch(Throwable t) {
- System.err.println("Caught " + t + " during doTimeouts()");
- t.printStackTrace(System.err);
+ System.err.println("Caught " + t + " while dispatching RPC call " + procedure);
+ t.printStackTrace(DbServer.err);
+ } finally {
+ doTimeouts();
+ DbServer.err.flush();
}
}
@@ -92,53 +92,66 @@ public class DbServer extends DbDispatcher
return id;
}
- void delEnv(RpcDbEnv rdbenv)
+ void delEnv(RpcDbEnv rdbenv, boolean dispose)
{
+ env_list.del(rdbenv);
+
// cursors and transactions will already have been cleaned up
for(LocalIterator i = db_list.iterator(); i.hasNext(); ) {
RpcDb rdb = (RpcDb)i.next();
if (rdb != null && rdb.rdbenv == rdbenv)
- delDb(rdb);
+ delDb(rdb, true);
}
- env_list.del(rdbenv);
- rdbenv.dispose();
+ if (dispose)
+ rdbenv.dispose();
}
- void delDb(RpcDb rdb)
+ void delDb(RpcDb rdb, boolean dispose)
{
db_list.del(rdb);
- rdb.dispose();
for(LocalIterator i = cursor_list.iterator(); i.hasNext(); ) {
RpcDbc rdbc = (RpcDbc)i.next();
- if (rdbc != null && rdbc.timer == rdb)
+ if (rdbc != null && rdbc.timer == rdb) {
i.remove();
+ rdbc.dispose();
+ }
}
+
+ if (dispose)
+ rdb.dispose();
}
- void delTxn(RpcDbTxn rtxn)
+ void delTxn(RpcDbTxn rtxn, boolean dispose)
{
txn_list.del(rtxn);
- rtxn.dispose();
for(LocalIterator i = cursor_list.iterator(); i.hasNext(); ) {
RpcDbc rdbc = (RpcDbc)i.next();
- if (rdbc != null && rdbc.timer == rtxn)
+ if (rdbc != null && rdbc.timer == rtxn) {
i.remove();
+ rdbc.dispose();
+ }
}
for(LocalIterator i = txn_list.iterator(); i.hasNext(); ) {
RpcDbTxn rtxn_child = (RpcDbTxn)i.next();
- if (rtxn_child != null && rtxn_child.timer == rtxn)
+ if (rtxn_child != null && rtxn_child.timer == rtxn) {
i.remove();
+ rtxn_child.dispose();
+ }
}
+
+ if (dispose)
+ rtxn.dispose();
}
- void delCursor(RpcDbc rdbc)
+ void delCursor(RpcDbc rdbc, boolean dispose)
{
cursor_list.del(rdbc);
- rdbc.dispose();
+ if (dispose)
+ rdbc.dispose();
}
RpcDbEnv getEnv(int envid)
@@ -192,7 +205,7 @@ public class DbServer extends DbDispatcher
// DbServer.err.println("Examining " + rdbc + ", time left = " + (end_time - now));
if (end_time < now) {
DbServer.err.println("Cleaning up " + rdbc);
- delCursor(rdbc);
+ delCursor(rdbc, true);
} else if (end_time < hint)
hint = end_time;
}
@@ -206,7 +219,7 @@ public class DbServer extends DbDispatcher
// DbServer.err.println("Examining " + rtxn + ", time left = " + (end_time - now));
if (end_time < now) {
DbServer.err.println("Cleaning up " + rtxn);
- delTxn(rtxn);
+ delTxn(rtxn, true);
} else if (end_time < hint)
hint = end_time;
}
@@ -220,7 +233,7 @@ public class DbServer extends DbDispatcher
// DbServer.err.println("Examining " + rdbenv + ", time left = " + (end_time - now));
if (end_time < now) {
DbServer.err.println("Cleaning up " + rdbenv);
- delEnv(rdbenv);
+ delEnv(rdbenv, true);
}
}
@@ -232,6 +245,7 @@ public class DbServer extends DbDispatcher
}
// Some constants that aren't available elsewhere
+ static final int EINVAL = 22;
static final int DB_SERVER_FLAGMASK = Db.DB_LOCKDOWN |
Db.DB_PRIVATE | Db.DB_RECOVER | Db.DB_RECOVER_FATAL |
Db.DB_SYSTEM_MEM | Db.DB_USE_ENVIRON |
@@ -243,6 +257,22 @@ public class DbServer extends DbDispatcher
Db.DB_NOMMAP | Db.DB_RDONLY;
static final int DB_SERVER_DBNOSHARE = Db.DB_EXCL | Db.DB_TRUNCATE;
+ static Vector homes = new Vector();
+
+ static void add_home(String home) {
+ File f = new File(home);
+ try { home = f.getCanonicalPath(); } catch(IOException e) {}
+ homes.addElement(home);
+ }
+
+ static boolean check_home(String home) {
+ if (home == null)
+ return false;
+ File f = new File(home);
+ try { home = f.getCanonicalPath(); } catch(IOException e) {}
+ return homes.contains(home);
+ }
+
public static void main(String[] args)
{
System.out.println("Starting DbServer...");
@@ -252,7 +282,7 @@ public class DbServer extends DbDispatcher
switch (args[i].charAt(1)) {
case 'h':
- ++i; // add_home(args[++i]);
+ add_home(args[++i]);
break;
case 'I':
idleto = Long.parseLong(args[++i]) * 1000L;
@@ -279,6 +309,7 @@ public class DbServer extends DbDispatcher
try {
DbServer.err = new PrintWriter(new FileOutputStream("JavaRPCServer.trace", true));
+ // DbServer.err = new PrintWriter(System.err);
DbServer server = new DbServer();
server.run();
} catch (Throwable e) {
diff --git a/db/rpc_server/java/FreeList.java b/db/rpc_server/java/FreeList.java
index d7eedd746..05a18fdf6 100644
--- a/db/rpc_server/java/FreeList.java
+++ b/db/rpc_server/java/FreeList.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: FreeList.java,v 1.3 2002/08/09 01:56:09 bostic Exp
+ * $Id: FreeList.java,v 1.5 2003/01/08 05:45:34 bostic Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -31,8 +31,8 @@ class FreeList
if (free_head == null) {
pos = items.size();
items.addElement(obj);
- if (pos % 1000 == 0)
- DbServer.err.println(this + " grew to size " + pos);
+ if (pos + 1 % 1000 == 0)
+ DbServer.err.println(this + " grew to size " + (pos + 1));
} else {
pos = free_head.getIndex();
free_head = (FreeIndex)items.elementAt(pos);
diff --git a/db/rpc_server/java/LocalIterator.java b/db/rpc_server/java/LocalIterator.java
index 498ded344..7822c0695 100644
--- a/db/rpc_server/java/LocalIterator.java
+++ b/db/rpc_server/java/LocalIterator.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: LocalIterator.java,v 1.2 2002/08/09 01:56:09 bostic Exp
+ * $Id: LocalIterator.java,v 1.3 2003/01/08 05:45:38 bostic Exp $
*/
package com.sleepycat.db.rpcserver;
diff --git a/db/rpc_server/java/README b/db/rpc_server/java/README
index c2d8f3abd..48d7a86cb 100644
--- a/db/rpc_server/java/README
+++ b/db/rpc_server/java/README
@@ -1,4 +1,7 @@
-Berkeley DB Java RPC server, copyright (C) 2002 Sleepycat Software
+Berkeley DB Java RPC server.
+
+Copyright (c) 2002-2003
+ Sleepycat Software. All rights reserved.
The Java implementation of the Berkeley DB RPC server is intended
primarily for testing purposes. It provides the same interface
diff --git a/db/rpc_server/java/RpcDb.java b/db/rpc_server/java/RpcDb.java
index 19320c179..065e843b2 100644
--- a/db/rpc_server/java/RpcDb.java
+++ b/db/rpc_server/java/RpcDb.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: RpcDb.java,v 1.8 2002/08/09 01:56:09 bostic Exp
+ * $Id: RpcDb.java,v 1.16 2003/10/29 16:02:56 mjc Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -58,7 +58,9 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ } catch(IllegalArgumentException e) {
+ reply.status = DbServer.EINVAL;
}
}
@@ -71,14 +73,16 @@ public class RpcDb extends Timer
}
try {
+ server.delDb(this, false);
db.close(args.flags);
- db = null;
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ } catch(IllegalArgumentException e) {
+ reply.status = DbServer.EINVAL;
} finally {
- server.delDb(this);
+ db = null;
}
}
@@ -91,7 +95,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -108,7 +112,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -119,16 +123,16 @@ public class RpcDb extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_doff(args.keydoff);
- key.set_ulen(args.keyulen);
- key.set_flags(args.keyflags);
+ key.setPartialLength(args.keydlen);
+ key.setPartialOffset(args.keydoff);
+ key.setUserBufferLength(args.keyulen);
+ key.setFlags(args.keyflags);
- db.del(txn, key, args.flags);
+ db.delete(txn, key, args.flags);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -139,43 +143,43 @@ public class RpcDb extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_doff(args.keydoff);
- key.set_ulen(args.keyulen);
- key.set_flags(Db.DB_DBT_MALLOC |
+ key.setPartialLength(args.keydlen);
+ key.setPartialOffset(args.keydoff);
+ key.setUserBufferLength(args.keyulen);
+ key.setFlags(Db.DB_DBT_MALLOC |
(args.keyflags & Db.DB_DBT_PARTIAL));
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_doff(args.datadoff);
- data.set_ulen(args.dataulen);
+ data.setPartialLength(args.datadlen);
+ data.setPartialOffset(args.datadoff);
+ data.setUserBufferLength(args.dataulen);
if ((args.flags & Db.DB_MULTIPLE) != 0) {
- if (data.get_data().length == 0)
- data.set_data(new byte[data.get_ulen()]);
- data.set_flags(Db.DB_DBT_USERMEM |
+ if (data.getData().length == 0)
+ data.setData(new byte[data.getUserBufferLength()]);
+ data.setFlags(Db.DB_DBT_USERMEM |
(args.dataflags & Db.DB_DBT_PARTIAL));
} else
- data.set_flags(Db.DB_DBT_MALLOC |
+ data.setFlags(Db.DB_DBT_MALLOC |
(args.dataflags & Db.DB_DBT_PARTIAL));
reply.status = db.get(txn, key, data, args.flags);
- if (key.get_data() == args.keydata ||
- key.get_data().length != key.get_size()) {
- reply.keydata = new byte[key.get_size()];
- System.arraycopy(key.get_data(), 0, reply.keydata, 0, key.get_size());
+ if (key.getData() == args.keydata ||
+ key.getData().length != key.getSize()) {
+ reply.keydata = new byte[key.getSize()];
+ System.arraycopy(key.getData(), 0, reply.keydata, 0, key.getSize());
} else
- reply.keydata = key.get_data();
+ reply.keydata = key.getData();
- if (data.get_data() == args.datadata ||
- data.get_data().length != data.get_size()) {
- reply.datadata = new byte[data.get_size()];
- System.arraycopy(data.get_data(), 0, reply.datadata, 0, data.get_size());
+ if (data.getData() == args.datadata ||
+ data.getData().length != data.getSize()) {
+ reply.datadata = new byte[data.getSize()];
+ System.arraycopy(data.getData(), 0, reply.datadata, 0, data.getSize());
} else
- reply.datadata = data.get_data();
+ reply.datadata = data.getData();
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
reply.keydata = reply.datadata = empty;
}
}
@@ -221,7 +225,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -232,21 +236,21 @@ public class RpcDb extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_doff(args.keydoff);
- key.set_ulen(args.keyulen);
- key.set_flags(args.keyflags);
+ key.setPartialLength(args.keydlen);
+ key.setPartialOffset(args.keydoff);
+ key.setUserBufferLength(args.keyulen);
+ key.setFlags(args.keyflags);
DbKeyRange range = new DbKeyRange();
- db.key_range(txn, key, range, args.flags);
+ db.keyRange(txn, key, range, args.flags);
reply.status = 0;
reply.less = range.less;
reply.equal = range.equal;
reply.greater = range.greater;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -274,10 +278,10 @@ public class RpcDb extends Timer
if (matchFound) {
++rdb.refcount;
reply.dbcl_id = ((FreeList.FreeListIterator)i).current;
- reply.type = rdb.db.get_type();
+ reply.type = rdb.db.getDbType();
reply.dbflags = rdb.db.get_flags_raw();
// FIXME: not possible to work out byteorder from Java?
- reply.lorder = rdb.db.get_byteswapped() ? 4321 : 1234;
+ reply.lorder = rdb.db.isByteSwapped() ? 4321 : 1234;
reply.status = 0;
DbServer.err.println("Sharing Db: " + reply.dbcl_id);
@@ -286,6 +290,31 @@ public class RpcDb extends Timer
return matchFound;
}
+ public void get_name(DbDispatcher server,
+ __db_get_name_msg args, __db_get_name_reply reply)
+ {
+ try {
+ reply.filename = db.getFileName();
+ reply.dbname = db.getDatabaseName();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_open_flags(DbDispatcher server,
+ __db_get_open_flags_msg args, __db_get_open_flags_reply reply)
+ {
+ try {
+ reply.flags = db.getOpenFlags();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
public void open(DbDispatcher server,
__db_open_msg args, __db_open_reply reply)
{
@@ -296,23 +325,21 @@ public class RpcDb extends Timer
openflags = args.flags & DbServer.DB_SERVER_DBFLAGS;
if (findSharedDb(server, reply)) {
- db.close(0);
- db = null;
- server.delDb(this);
+ server.delDb(this, true);
} else {
DbServer.err.println("Calling db.open(" + null + ", " + dbname + ", " + subdbname + ", " + args.type + ", " + Integer.toHexString(args.flags) + ", " + args.mode + ")");
db.open(null, dbname, subdbname, args.type, args.flags, args.mode);
reply.dbcl_id = args.dbpcl_id;
- reply.type = this.type = db.get_type();
+ reply.type = this.type = db.getDbType();
reply.dbflags = db.get_flags_raw();
// FIXME: not possible to work out byteorder from Java?
- reply.lorder = db.get_byteswapped() ? 4321 : 1234;
+ reply.lorder = db.isByteSwapped() ? 4321 : 1234;
reply.status = 0;
}
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} catch(FileNotFoundException e) {
e.printStackTrace(DbServer.err);
reply.status = Db.DB_NOTFOUND;
@@ -328,53 +355,53 @@ public class RpcDb extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
Dbt skey = new Dbt(args.skeydata);
- skey.set_dlen(args.skeydlen);
- skey.set_doff(args.skeydoff);
- skey.set_ulen(args.skeyulen);
- skey.set_flags(Db.DB_DBT_MALLOC |
+ skey.setPartialLength(args.skeydlen);
+ skey.setPartialOffset(args.skeydoff);
+ skey.setUserBufferLength(args.skeyulen);
+ skey.setFlags(Db.DB_DBT_MALLOC |
(args.skeyflags & Db.DB_DBT_PARTIAL));
Dbt pkey = new Dbt(args.pkeydata);
- pkey.set_dlen(args.pkeydlen);
- pkey.set_doff(args.pkeydoff);
- pkey.set_ulen(args.pkeyulen);
- pkey.set_flags(Db.DB_DBT_MALLOC |
+ pkey.setPartialLength(args.pkeydlen);
+ pkey.setPartialOffset(args.pkeydoff);
+ pkey.setUserBufferLength(args.pkeyulen);
+ pkey.setFlags(Db.DB_DBT_MALLOC |
(args.pkeyflags & Db.DB_DBT_PARTIAL));
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_doff(args.datadoff);
- data.set_ulen(args.dataulen);
- data.set_flags(Db.DB_DBT_MALLOC |
+ data.setPartialLength(args.datadlen);
+ data.setPartialOffset(args.datadoff);
+ data.setUserBufferLength(args.dataulen);
+ data.setFlags(Db.DB_DBT_MALLOC |
(args.dataflags & Db.DB_DBT_PARTIAL));
- db.pget(txn, skey, pkey, data, args.flags);
+ db.get(txn, skey, pkey, data, args.flags);
- if (skey.get_data() == args.skeydata ||
- skey.get_data().length != skey.get_size()) {
- reply.skeydata = new byte[skey.get_size()];
- System.arraycopy(skey.get_data(), 0, reply.skeydata, 0, skey.get_size());
+ if (skey.getData() == args.skeydata ||
+ skey.getData().length != skey.getSize()) {
+ reply.skeydata = new byte[skey.getSize()];
+ System.arraycopy(skey.getData(), 0, reply.skeydata, 0, skey.getSize());
} else
- reply.skeydata = skey.get_data();
+ reply.skeydata = skey.getData();
- if (pkey.get_data() == args.pkeydata ||
- pkey.get_data().length != pkey.get_size()) {
- reply.pkeydata = new byte[pkey.get_size()];
- System.arraycopy(pkey.get_data(), 0, reply.pkeydata, 0, pkey.get_size());
+ if (pkey.getData() == args.pkeydata ||
+ pkey.getData().length != pkey.getSize()) {
+ reply.pkeydata = new byte[pkey.getSize()];
+ System.arraycopy(pkey.getData(), 0, reply.pkeydata, 0, pkey.getSize());
} else
- reply.pkeydata = pkey.get_data();
+ reply.pkeydata = pkey.getData();
- if (data.get_data() == args.datadata ||
- data.get_data().length != data.get_size()) {
- reply.datadata = new byte[data.get_size()];
- System.arraycopy(data.get_data(), 0, reply.datadata, 0, data.get_size());
+ if (data.getData() == args.datadata ||
+ data.getData().length != data.getSize()) {
+ reply.datadata = new byte[data.getSize()];
+ System.arraycopy(data.getData(), 0, reply.datadata, 0, data.getSize());
} else
- reply.datadata = data.get_data();
+ reply.datadata = data.getData();
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
reply.skeydata = reply.pkeydata = reply.datadata = empty;
}
}
@@ -387,17 +414,17 @@ public class RpcDb extends Timer
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_doff(args.keydoff);
- key.set_ulen(args.keyulen);
- key.set_flags(Db.DB_DBT_MALLOC |
+ key.setPartialLength(args.keydlen);
+ key.setPartialOffset(args.keydoff);
+ key.setUserBufferLength(args.keyulen);
+ key.setFlags(Db.DB_DBT_MALLOC |
(args.keyflags & Db.DB_DBT_PARTIAL));
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_doff(args.datadoff);
- data.set_ulen(args.dataulen);
- data.set_flags(args.dataflags);
+ data.setPartialLength(args.datadlen);
+ data.setPartialOffset(args.datadoff);
+ data.setUserBufferLength(args.dataulen);
+ data.setFlags(args.dataflags & Db.DB_DBT_PARTIAL);
reply.status = db.put(txn, key, data, args.flags);
@@ -406,19 +433,21 @@ public class RpcDb extends Timer
* Otherwise just status.
*/
if ((args.flags & Db.DB_APPEND) != 0) {
- if (key.get_data() == args.keydata ||
- key.get_data().length != key.get_size()) {
- reply.keydata = new byte[key.get_size()];
- System.arraycopy(key.get_data(), 0, reply.keydata, 0, key.get_size());
+ if (key.getData() == args.keydata ||
+ key.getData().length != key.getSize()) {
+ reply.keydata = new byte[key.getSize()];
+ System.arraycopy(key.getData(), 0, reply.keydata, 0, key.getSize());
} else
- reply.keydata = key.get_data();
+ reply.keydata = key.getData();
} else
reply.keydata = empty;
} catch(DbException e) {
reply.keydata = empty;
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
DbServer.err.println("Exception, setting status to " + reply.status);
e.printStackTrace(DbServer.err);
+ } catch(IllegalArgumentException e) {
+ reply.status = DbServer.EINVAL;
}
}
@@ -433,12 +462,12 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} catch(FileNotFoundException e) {
e.printStackTrace(DbServer.err);
reply.status = Db.DB_NOTFOUND;
} finally {
- server.delDb(this);
+ server.delDb(this, false);
}
}
@@ -454,12 +483,12 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} catch(FileNotFoundException e) {
e.printStackTrace(DbServer.err);
reply.status = Db.DB_NOTFOUND;
} finally {
- server.delDb(this);
+ server.delDb(this, false);
}
}
@@ -471,7 +500,19 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_bt_minkey(DbDispatcher server,
+ __db_get_bt_minkey_msg args, __db_get_bt_minkey_reply reply)
+ {
+ try {
+ reply.minkey = db.getBtreeMinKey();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -479,11 +520,23 @@ public class RpcDb extends Timer
__db_bt_minkey_msg args, __db_bt_minkey_reply reply)
{
try {
- db.set_bt_minkey(args.minkey);
+ db.setBtreeMinKey(args.minkey);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_encrypt_flags(DbDispatcher server,
+ __db_get_encrypt_flags_msg args, __db_get_encrypt_flags_reply reply)
+ {
+ try {
+ reply.flags = db.getEncryptFlags();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -491,11 +544,23 @@ public class RpcDb extends Timer
__db_encrypt_msg args, __db_encrypt_reply reply)
{
try {
- db.set_encrypt(args.passwd, args.flags);
+ db.setEncrypted(args.passwd, args.flags);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_flags(DbDispatcher server,
+ __db_get_flags_msg args, __db_get_flags_reply reply)
+ {
+ try {
+ reply.flags = db.getFlags();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -504,12 +569,24 @@ public class RpcDb extends Timer
{
try {
// DbServer.err.println("Calling db.setflags(" + Integer.toHexString(args.flags) + ")");
- db.set_flags(args.flags);
+ db.setFlags(args.flags);
setflags |= args.flags;
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_h_ffactor(DbDispatcher server,
+ __db_get_h_ffactor_msg args, __db_get_h_ffactor_reply reply)
+ {
+ try {
+ reply.ffactor = db.getHashFillFactor();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -517,11 +594,23 @@ public class RpcDb extends Timer
__db_h_ffactor_msg args, __db_h_ffactor_reply reply)
{
try {
- db.set_h_ffactor(args.ffactor);
+ db.setHashFillFactor(args.ffactor);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_h_nelem(DbDispatcher server,
+ __db_get_h_nelem_msg args, __db_get_h_nelem_reply reply)
+ {
+ try {
+ reply.nelem = db.getHashNumElements();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -529,11 +618,23 @@ public class RpcDb extends Timer
__db_h_nelem_msg args, __db_h_nelem_reply reply)
{
try {
- db.set_h_nelem(args.nelem);
+ db.setHashNumElements(args.nelem);
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_lorder(DbDispatcher server,
+ __db_get_lorder_msg args, __db_get_lorder_reply reply)
+ {
+ try {
+ reply.lorder = db.getByteOrder();
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -541,11 +642,23 @@ public class RpcDb extends Timer
__db_lorder_msg args, __db_lorder_reply reply)
{
try {
- db.set_lorder(args.lorder);
+ db.setByteOrder(args.lorder);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_pagesize(DbDispatcher server,
+ __db_get_pagesize_msg args, __db_get_pagesize_reply reply)
+ {
+ try {
+ reply.pagesize = db.getPageSize();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -553,11 +666,23 @@ public class RpcDb extends Timer
__db_pagesize_msg args, __db_pagesize_reply reply)
{
try {
- db.set_pagesize(args.pagesize);
+ db.setPageSize(args.pagesize);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_q_extentsize(DbDispatcher server,
+ __db_get_extentsize_msg args, __db_get_extentsize_reply reply)
+ {
+ try {
+ reply.extentsize = db.getQueueExtentSize();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -565,11 +690,23 @@ public class RpcDb extends Timer
__db_extentsize_msg args, __db_extentsize_reply reply)
{
try {
- db.set_q_extentsize(args.extentsize);
+ db.setQueueExtentSize(args.extentsize);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_re_delim(DbDispatcher server,
+ __db_get_re_delim_msg args, __db_get_re_delim_reply reply)
+ {
+ try {
+ reply.delim = db.getRecordDelimiter();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -577,11 +714,23 @@ public class RpcDb extends Timer
__db_re_delim_msg args, __db_re_delim_reply reply)
{
try {
- db.set_re_delim(args.delim);
+ db.setRecordDelimiter(args.delim);
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_re_len(DbDispatcher server,
+ __db_get_re_len_msg args, __db_get_re_len_reply reply)
+ {
+ try {
+ reply.len = db.getRecordLength();
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -589,11 +738,23 @@ public class RpcDb extends Timer
__db_re_len_msg args, __db_re_len_reply reply)
{
try {
- db.set_re_len(args.len);
+ db.setRecordLength(args.len);
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_re_pad(DbDispatcher server,
+ __db_get_re_pad_msg args, __db_get_re_pad_reply reply)
+ {
+ try {
+ reply.pad = db.getRecordPad();
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -601,11 +762,11 @@ public class RpcDb extends Timer
__db_re_pad_msg args, __db_re_pad_reply reply)
{
try {
- db.set_re_pad(args.pad);
+ db.setRecordPad(args.pad);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -661,7 +822,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
reply.stats = new int[0];
}
}
@@ -674,7 +835,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -688,7 +849,7 @@ public class RpcDb extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
}
diff --git a/db/rpc_server/java/RpcDbEnv.java b/db/rpc_server/java/RpcDbEnv.java
index 3dbaea7c1..2245ce0e9 100644
--- a/db/rpc_server/java/RpcDbEnv.java
+++ b/db/rpc_server/java/RpcDbEnv.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: RpcDbEnv.java,v 1.5 2002/08/09 01:56:10 bostic Exp
+ * $Id: RpcDbEnv.java,v 1.12 2003/10/20 21:13:59 mjc Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -46,14 +46,16 @@ public class RpcDbEnv extends Timer
}
try {
+ server.delEnv(this, false);
dbenv.close(args.flags);
- dbenv = null;
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ } catch (IllegalArgumentException e) {
+ reply.status = DbServer.EINVAL;
} finally {
- server.delEnv(this);
+ dbenv = null;
}
}
@@ -62,9 +64,14 @@ public class RpcDbEnv extends Timer
{
this.idletime = (args.timeout != 0) ? args.timeout : DbServer.idleto;
this.timeout = DbServer.defto;
- dbenv = new DbEnv(0);
- reply.envcl_id = server.addEnv(this);
- reply.status = 0;
+ try {
+ dbenv = new DbEnv(0);
+ reply.envcl_id = server.addEnv(this);
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
}
public void dbremove(DbDispatcher server,
@@ -76,11 +83,13 @@ public class RpcDbEnv extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
- dbenv.dbremove(txn, args.name, args.subdb, args.flags);
+ dbenv.dbRemove(txn, args.name, args.subdb, args.flags);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ } catch(FileNotFoundException fnfe) {
+ reply.status = Db.DB_NOTFOUND;
}
}
@@ -94,11 +103,13 @@ public class RpcDbEnv extends Timer
RpcDbTxn rtxn = server.getTxn(args.txnpcl_id);
DbTxn txn = (rtxn != null) ? rtxn.txn : null;
- dbenv.dbrename(txn, args.name, args.subdb, args.newname, args.flags);
+ dbenv.dbRename(txn, args.name, args.subdb, args.newname, args.flags);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ } catch(FileNotFoundException fnfe) {
+ reply.status = Db.DB_NOTFOUND;
}
}
@@ -140,6 +151,30 @@ public class RpcDbEnv extends Timer
return matchFound;
}
+ public void get_home(DbDispatcher server,
+ __env_get_home_msg args, __env_get_home_reply reply)
+ {
+ try {
+ reply.home = dbenv.getDbEnvHome();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_open_flags(DbDispatcher server,
+ __env_get_open_flags_msg args, __env_get_open_flags_reply reply)
+ {
+ try {
+ reply.flags = dbenv.getOpenFlags();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
public void open(DbDispatcher server,
__env_open_msg args, __env_open_reply reply)
{
@@ -147,11 +182,11 @@ public class RpcDbEnv extends Timer
home = (args.home.length() > 0) ? args.home : null;
/*
- * If they are using locking do deadlock detection for them,
- * internally.
+ * If they are using locking do deadlock detection for
+ * them, internally.
*/
if ((args.flags & Db.DB_INIT_LOCK) != 0)
- dbenv.set_lk_detect(Db.DB_LOCK_DEFAULT);
+ dbenv.setLockDetect(Db.DB_LOCK_DEFAULT);
// adjust flags for RPC
int newflags = (args.flags & ~DbServer.DB_SERVER_FLAGMASK);
@@ -160,16 +195,15 @@ public class RpcDbEnv extends Timer
if (findSharedDbEnv(server, reply)) {
dbenv.close(0);
dbenv = null;
- server.delEnv(this);
- } else {
- // TODO: check home?
+ } else if (DbServer.check_home(home)) {
dbenv.open(home, newflags, args.mode);
reply.status = 0;
reply.envcl_id = args.dbenvcl_id;
- }
+ } else
+ reply.status = Db.DB_NOSERVER_HOME;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} catch(FileNotFoundException e) {
reply.status = Db.DB_NOTFOUND;
}
@@ -189,11 +223,26 @@ public class RpcDbEnv extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} catch(FileNotFoundException e) {
reply.status = Db.DB_NOTFOUND;
} finally {
- server.delEnv(this);
+ server.delEnv(this, false);
+ }
+ }
+
+ public void get_cachesize(DbDispatcher server,
+ __env_get_cachesize_msg args, __env_get_cachesize_reply reply)
+ {
+ try {
+ long cachesize = dbenv.getCacheSize();
+ reply.gbytes = (int)(cachesize / 1073741824);
+ reply.bytes = (int)(cachesize % 1073741824);
+ reply.ncache = dbenv.getCacheSizeNcache();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -201,11 +250,25 @@ public class RpcDbEnv extends Timer
__env_cachesize_msg args, __env_cachesize_reply reply)
{
try {
- dbenv.set_cachesize(args.gbytes, args.bytes, args.ncache);
+ long bytes = (long)args.gbytes * 1024*1024*1024;
+ bytes += args.bytes;
+ dbenv.setCacheSize(bytes, args.ncache);
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_encrypt_flags(DbDispatcher server,
+ __env_get_encrypt_flags_msg args, __env_get_encrypt_flags_reply reply)
+ {
+ try {
+ reply.flags = dbenv.getEncryptFlags();
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
}
}
@@ -213,11 +276,23 @@ public class RpcDbEnv extends Timer
__env_encrypt_msg args, __env_encrypt_reply reply)
{
try {
- dbenv.set_encrypt(args.passwd, args.flags);
+ dbenv.setEncrypted(args.passwd, args.flags);
+ reply.status = 0;
+ } catch(DbException e) {
+ e.printStackTrace(DbServer.err);
+ reply.status = e.getErrno();
+ }
+ }
+
+ public void get_flags(DbDispatcher server,
+ __env_get_flags_msg args, __env_get_flags_reply reply)
+ {
+ try {
+ reply.flags = dbenv.getFlags();
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -225,7 +300,7 @@ public class RpcDbEnv extends Timer
__env_flags_msg args, __env_flags_reply reply)
{
try {
- dbenv.set_flags(args.flags, args.onoff != 0);
+ dbenv.setFlags(args.flags, args.onoff != 0);
if (args.onoff != 0)
onflags |= args.flags;
else
@@ -233,7 +308,7 @@ public class RpcDbEnv extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -242,7 +317,7 @@ public class RpcDbEnv extends Timer
__txn_recover_msg args, __txn_recover_reply reply)
{
try {
- DbPreplist[] prep_list = dbenv.txn_recover(args.count, args.flags);
+ DbPreplist[] prep_list = dbenv.txnRecover(args.count, args.flags);
if (prep_list != null && prep_list.length > 0) {
int count = prep_list.length;
reply.retcount = count;
@@ -258,7 +333,7 @@ public class RpcDbEnv extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
}
diff --git a/db/rpc_server/java/RpcDbTxn.java b/db/rpc_server/java/RpcDbTxn.java
index feaa4d7d9..3115dbe46 100644
--- a/db/rpc_server/java/RpcDbTxn.java
+++ b/db/rpc_server/java/RpcDbTxn.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: RpcDbTxn.java,v 1.2 2002/08/09 01:56:10 bostic Exp
+ * $Id: RpcDbTxn.java,v 1.6 2003/10/20 21:13:59 mjc Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -49,9 +49,9 @@ public class RpcDbTxn extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} finally {
- server.delTxn(this);
+ server.delTxn(this, false);
}
}
@@ -67,7 +67,7 @@ public class RpcDbTxn extends Timer
RpcDbTxn rparent = server.getTxn(args.parentcl_id);
DbTxn parent = (rparent != null) ? rparent.txn : null;
- txn = dbenv.txn_begin(parent, args.flags);
+ txn = dbenv.txnBegin(parent, args.flags);
if (rparent != null)
timer = rparent.timer;
@@ -75,7 +75,7 @@ public class RpcDbTxn extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -88,9 +88,9 @@ public class RpcDbTxn extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} finally {
- server.delTxn(this);
+ server.delTxn(this, false);
}
}
@@ -103,9 +103,9 @@ public class RpcDbTxn extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} finally {
- server.delTxn(this);
+ server.delTxn(this, false);
}
}
@@ -117,7 +117,7 @@ public class RpcDbTxn extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
}
diff --git a/db/rpc_server/java/RpcDbc.java b/db/rpc_server/java/RpcDbc.java
index 9419e792f..a5a0a44ef 100644
--- a/db/rpc_server/java/RpcDbc.java
+++ b/db/rpc_server/java/RpcDbc.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: RpcDbc.java,v 1.3 2002/08/09 01:56:10 bostic Exp
+ * $Id: RpcDbc.java,v 1.9 2003/10/29 16:02:57 mjc Exp $
*/
package com.sleepycat.db.rpcserver;
@@ -64,9 +64,9 @@ public class RpcDbc extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
} finally {
- server.delCursor(this);
+ server.delCursor(this, false);
}
}
@@ -78,7 +78,7 @@ public class RpcDbc extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -86,10 +86,10 @@ public class RpcDbc extends Timer
__dbc_del_msg args, __dbc_del_reply reply)
{
try {
- reply.status = dbc.del(args.flags);
+ reply.status = dbc.delete(args.flags);
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -106,7 +106,7 @@ public class RpcDbc extends Timer
reply.status = 0;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -115,42 +115,42 @@ public class RpcDbc extends Timer
{
try {
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_ulen(args.keyulen);
- key.set_doff(args.keydoff);
- key.set_flags(Db.DB_DBT_MALLOC |
+ key.setPartialLength(args.keydlen);
+ key.setUserBufferLength(args.keyulen);
+ key.setPartialOffset(args.keydoff);
+ key.setFlags(Db.DB_DBT_MALLOC |
(args.keyflags & Db.DB_DBT_PARTIAL));
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_ulen(args.dataulen);
- data.set_doff(args.datadoff);
+ data.setPartialLength(args.datadlen);
+ data.setUserBufferLength(args.dataulen);
+ data.setPartialOffset(args.datadoff);
if ((args.flags & Db.DB_MULTIPLE) != 0 ||
(args.flags & Db.DB_MULTIPLE_KEY) != 0) {
- if (data.get_data().length == 0)
- data.set_data(new byte[data.get_ulen()]);
- data.set_flags(Db.DB_DBT_USERMEM |
+ if (data.getData().length == 0)
+ data.setData(new byte[data.getUserBufferLength()]);
+ data.setFlags(Db.DB_DBT_USERMEM |
(args.dataflags & Db.DB_DBT_PARTIAL));
} else
- data.set_flags(Db.DB_DBT_MALLOC |
+ data.setFlags(Db.DB_DBT_MALLOC |
(args.dataflags & Db.DB_DBT_PARTIAL));
reply.status = dbc.get(key, data, args.flags);
- if (key.get_data() == args.keydata) {
- reply.keydata = new byte[key.get_size()];
- System.arraycopy(key.get_data(), 0, reply.keydata, 0, key.get_size());
+ if (key.getData() == args.keydata) {
+ reply.keydata = new byte[key.getSize()];
+ System.arraycopy(key.getData(), 0, reply.keydata, 0, key.getSize());
} else
- reply.keydata = key.get_data();
+ reply.keydata = key.getData();
- if (data.get_data() == args.datadata) {
- reply.datadata = new byte[data.get_size()];
- System.arraycopy(data.get_data(), 0, reply.datadata, 0, data.get_size());
+ if (data.getData() == args.datadata) {
+ reply.datadata = new byte[data.getSize()];
+ System.arraycopy(data.getData(), 0, reply.datadata, 0, data.getSize());
} else
- reply.datadata = data.get_data();
+ reply.datadata = data.getData();
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
reply.keydata = reply.datadata = empty;
}
}
@@ -160,48 +160,48 @@ public class RpcDbc extends Timer
{
try {
Dbt skey = new Dbt(args.skeydata);
- skey.set_dlen(args.skeydlen);
- skey.set_doff(args.skeydoff);
- skey.set_ulen(args.skeyulen);
- skey.set_flags(Db.DB_DBT_MALLOC |
+ skey.setPartialLength(args.skeydlen);
+ skey.setPartialOffset(args.skeydoff);
+ skey.setUserBufferLength(args.skeyulen);
+ skey.setFlags(Db.DB_DBT_MALLOC |
(args.skeyflags & Db.DB_DBT_PARTIAL));
Dbt pkey = new Dbt(args.pkeydata);
- pkey.set_dlen(args.pkeydlen);
- pkey.set_doff(args.pkeydoff);
- pkey.set_ulen(args.pkeyulen);
- pkey.set_flags(Db.DB_DBT_MALLOC |
+ pkey.setPartialLength(args.pkeydlen);
+ pkey.setPartialOffset(args.pkeydoff);
+ pkey.setUserBufferLength(args.pkeyulen);
+ pkey.setFlags(Db.DB_DBT_MALLOC |
(args.pkeyflags & Db.DB_DBT_PARTIAL));
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_doff(args.datadoff);
- data.set_ulen(args.dataulen);
- data.set_flags(Db.DB_DBT_MALLOC |
+ data.setPartialLength(args.datadlen);
+ data.setPartialOffset(args.datadoff);
+ data.setUserBufferLength(args.dataulen);
+ data.setFlags(Db.DB_DBT_MALLOC |
(args.dataflags & Db.DB_DBT_PARTIAL));
- reply.status = dbc.pget(skey, pkey, data, args.flags);
+ reply.status = dbc.get(skey, pkey, data, args.flags);
- if (skey.get_data() == args.skeydata) {
- reply.skeydata = new byte[skey.get_size()];
- System.arraycopy(skey.get_data(), 0, reply.skeydata, 0, skey.get_size());
+ if (skey.getData() == args.skeydata) {
+ reply.skeydata = new byte[skey.getSize()];
+ System.arraycopy(skey.getData(), 0, reply.skeydata, 0, skey.getSize());
} else
- reply.skeydata = skey.get_data();
+ reply.skeydata = skey.getData();
- if (pkey.get_data() == args.pkeydata) {
- reply.pkeydata = new byte[pkey.get_size()];
- System.arraycopy(pkey.get_data(), 0, reply.pkeydata, 0, pkey.get_size());
+ if (pkey.getData() == args.pkeydata) {
+ reply.pkeydata = new byte[pkey.getSize()];
+ System.arraycopy(pkey.getData(), 0, reply.pkeydata, 0, pkey.getSize());
} else
- reply.pkeydata = pkey.get_data();
+ reply.pkeydata = pkey.getData();
- if (data.get_data() == args.datadata) {
- reply.datadata = new byte[data.get_size()];
- System.arraycopy(data.get_data(), 0, reply.datadata, 0, data.get_size());
+ if (data.getData() == args.datadata) {
+ reply.datadata = new byte[data.getSize()];
+ System.arraycopy(data.getData(), 0, reply.datadata, 0, data.getSize());
} else
- reply.datadata = data.get_data();
+ reply.datadata = data.getData();
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
}
}
@@ -210,28 +210,31 @@ public class RpcDbc extends Timer
{
try {
Dbt key = new Dbt(args.keydata);
- key.set_dlen(args.keydlen);
- key.set_ulen(args.keyulen);
- key.set_doff(args.keydoff);
- key.set_flags(args.keyflags & Db.DB_DBT_PARTIAL);
+ key.setPartialLength(args.keydlen);
+ key.setUserBufferLength(args.keyulen);
+ key.setPartialOffset(args.keydoff);
+ key.setFlags(args.keyflags & Db.DB_DBT_PARTIAL);
Dbt data = new Dbt(args.datadata);
- data.set_dlen(args.datadlen);
- data.set_ulen(args.dataulen);
- data.set_doff(args.datadoff);
- data.set_flags(args.dataflags);
+ data.setPartialLength(args.datadlen);
+ data.setUserBufferLength(args.dataulen);
+ data.setPartialOffset(args.datadoff);
+ data.setFlags(args.dataflags & Db.DB_DBT_PARTIAL);
reply.status = dbc.put(key, data, args.flags);
if (reply.status == 0 &&
(args.flags == Db.DB_AFTER || args.flags == Db.DB_BEFORE) &&
- rdb.db.get_type() == Db.DB_RECNO)
- reply.keydata = key.get_data();
+ rdb.db.getDbType() == Db.DB_RECNO)
+ reply.keydata = key.getData();
else
reply.keydata = empty;
} catch(DbException e) {
e.printStackTrace(DbServer.err);
- reply.status = e.get_errno();
+ reply.status = e.getErrno();
+ reply.keydata = empty;
+ } catch(IllegalArgumentException e) {
+ reply.status = DbServer.EINVAL;
reply.keydata = empty;
}
}
diff --git a/db/rpc_server/java/Timer.java b/db/rpc_server/java/Timer.java
index 5aa133d28..0b828277b 100644
--- a/db/rpc_server/java/Timer.java
+++ b/db/rpc_server/java/Timer.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*
- * Id: Timer.java,v 1.1 2002/01/03 02:59:39 mjc Exp
+ * $Id: Timer.java,v 1.2 2003/01/08 05:45:53 bostic Exp $
*/
package com.sleepycat.db.rpcserver;
diff --git a/db/rpc_server/java/gen/DbServerStub.java b/db/rpc_server/java/gen/DbServerStub.java
index 90fc13a6d..f963c52dc 100644
--- a/db/rpc_server/java/gen/DbServerStub.java
+++ b/db/rpc_server/java/gen/DbServerStub.java
@@ -1,5 +1,5 @@
/*
- * Automatically generated by jrpcgen 0.95.1 on 3/19/02 10:30 AM
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
* jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
* See http://acplt.org/ks/remotetea.html for details
*/
@@ -21,7 +21,7 @@ public abstract class DbServerStub extends OncRpcServerStub implements OncRpcDis
public DbServerStub(int port)
throws OncRpcException, IOException {
info = new OncRpcServerTransportRegistrationInfo [] {
- new OncRpcServerTransportRegistrationInfo(db_server.DB_RPC_SERVERPROG, 4001),
+ new OncRpcServerTransportRegistrationInfo(db_server.DB_RPC_SERVERPROG, 4002),
};
transports = new OncRpcServerTransport [] {
new OncRpcUdpServerTransport(this, port, info, 32768),
@@ -31,355 +31,481 @@ public abstract class DbServerStub extends OncRpcServerStub implements OncRpcDis
public void dispatchOncRpcCall(OncRpcCallInformation call, int program, int version, int procedure)
throws OncRpcException, IOException {
- if ( version == 4001 ) {
+ if ( version == 4002 ) {
switch ( procedure ) {
case 1: {
- __env_cachesize_msg args$ = new __env_cachesize_msg();
+ __env_get_cachesize_msg args$ = new __env_get_cachesize_msg();
call.retrieveCall(args$);
- __env_cachesize_reply result$ = __DB_env_cachesize_4001(args$);
+ __env_get_cachesize_reply result$ = __DB_env_get_cachesize_4002(args$);
call.reply(result$);
break;
}
case 2: {
- __env_close_msg args$ = new __env_close_msg();
+ __env_cachesize_msg args$ = new __env_cachesize_msg();
call.retrieveCall(args$);
- __env_close_reply result$ = __DB_env_close_4001(args$);
+ __env_cachesize_reply result$ = __DB_env_cachesize_4002(args$);
call.reply(result$);
break;
}
case 3: {
- __env_create_msg args$ = new __env_create_msg();
+ __env_close_msg args$ = new __env_close_msg();
call.retrieveCall(args$);
- __env_create_reply result$ = __DB_env_create_4001(args$);
+ __env_close_reply result$ = __DB_env_close_4002(args$);
call.reply(result$);
break;
}
case 4: {
- __env_dbremove_msg args$ = new __env_dbremove_msg();
+ __env_create_msg args$ = new __env_create_msg();
call.retrieveCall(args$);
- __env_dbremove_reply result$ = __DB_env_dbremove_4001(args$);
+ __env_create_reply result$ = __DB_env_create_4002(args$);
call.reply(result$);
break;
}
case 5: {
- __env_dbrename_msg args$ = new __env_dbrename_msg();
+ __env_dbremove_msg args$ = new __env_dbremove_msg();
call.retrieveCall(args$);
- __env_dbrename_reply result$ = __DB_env_dbrename_4001(args$);
+ __env_dbremove_reply result$ = __DB_env_dbremove_4002(args$);
call.reply(result$);
break;
}
case 6: {
- __env_encrypt_msg args$ = new __env_encrypt_msg();
+ __env_dbrename_msg args$ = new __env_dbrename_msg();
call.retrieveCall(args$);
- __env_encrypt_reply result$ = __DB_env_encrypt_4001(args$);
+ __env_dbrename_reply result$ = __DB_env_dbrename_4002(args$);
call.reply(result$);
break;
}
case 7: {
- __env_flags_msg args$ = new __env_flags_msg();
+ __env_get_encrypt_flags_msg args$ = new __env_get_encrypt_flags_msg();
call.retrieveCall(args$);
- __env_flags_reply result$ = __DB_env_flags_4001(args$);
+ __env_get_encrypt_flags_reply result$ = __DB_env_get_encrypt_flags_4002(args$);
call.reply(result$);
break;
}
case 8: {
- __env_open_msg args$ = new __env_open_msg();
+ __env_encrypt_msg args$ = new __env_encrypt_msg();
call.retrieveCall(args$);
- __env_open_reply result$ = __DB_env_open_4001(args$);
+ __env_encrypt_reply result$ = __DB_env_encrypt_4002(args$);
call.reply(result$);
break;
}
case 9: {
- __env_remove_msg args$ = new __env_remove_msg();
+ __env_get_flags_msg args$ = new __env_get_flags_msg();
call.retrieveCall(args$);
- __env_remove_reply result$ = __DB_env_remove_4001(args$);
+ __env_get_flags_reply result$ = __DB_env_get_flags_4002(args$);
call.reply(result$);
break;
}
case 10: {
- __txn_abort_msg args$ = new __txn_abort_msg();
+ __env_flags_msg args$ = new __env_flags_msg();
call.retrieveCall(args$);
- __txn_abort_reply result$ = __DB_txn_abort_4001(args$);
+ __env_flags_reply result$ = __DB_env_flags_4002(args$);
call.reply(result$);
break;
}
case 11: {
- __txn_begin_msg args$ = new __txn_begin_msg();
+ __env_get_home_msg args$ = new __env_get_home_msg();
call.retrieveCall(args$);
- __txn_begin_reply result$ = __DB_txn_begin_4001(args$);
+ __env_get_home_reply result$ = __DB_env_get_home_4002(args$);
call.reply(result$);
break;
}
case 12: {
- __txn_commit_msg args$ = new __txn_commit_msg();
+ __env_get_open_flags_msg args$ = new __env_get_open_flags_msg();
call.retrieveCall(args$);
- __txn_commit_reply result$ = __DB_txn_commit_4001(args$);
+ __env_get_open_flags_reply result$ = __DB_env_get_open_flags_4002(args$);
call.reply(result$);
break;
}
case 13: {
- __txn_discard_msg args$ = new __txn_discard_msg();
+ __env_open_msg args$ = new __env_open_msg();
call.retrieveCall(args$);
- __txn_discard_reply result$ = __DB_txn_discard_4001(args$);
+ __env_open_reply result$ = __DB_env_open_4002(args$);
call.reply(result$);
break;
}
case 14: {
- __txn_prepare_msg args$ = new __txn_prepare_msg();
+ __env_remove_msg args$ = new __env_remove_msg();
call.retrieveCall(args$);
- __txn_prepare_reply result$ = __DB_txn_prepare_4001(args$);
+ __env_remove_reply result$ = __DB_env_remove_4002(args$);
call.reply(result$);
break;
}
case 15: {
- __txn_recover_msg args$ = new __txn_recover_msg();
+ __txn_abort_msg args$ = new __txn_abort_msg();
call.retrieveCall(args$);
- __txn_recover_reply result$ = __DB_txn_recover_4001(args$);
+ __txn_abort_reply result$ = __DB_txn_abort_4002(args$);
call.reply(result$);
break;
}
case 16: {
- __db_associate_msg args$ = new __db_associate_msg();
+ __txn_begin_msg args$ = new __txn_begin_msg();
call.retrieveCall(args$);
- __db_associate_reply result$ = __DB_db_associate_4001(args$);
+ __txn_begin_reply result$ = __DB_txn_begin_4002(args$);
call.reply(result$);
break;
}
case 17: {
- __db_bt_maxkey_msg args$ = new __db_bt_maxkey_msg();
+ __txn_commit_msg args$ = new __txn_commit_msg();
call.retrieveCall(args$);
- __db_bt_maxkey_reply result$ = __DB_db_bt_maxkey_4001(args$);
+ __txn_commit_reply result$ = __DB_txn_commit_4002(args$);
call.reply(result$);
break;
}
case 18: {
- __db_bt_minkey_msg args$ = new __db_bt_minkey_msg();
+ __txn_discard_msg args$ = new __txn_discard_msg();
call.retrieveCall(args$);
- __db_bt_minkey_reply result$ = __DB_db_bt_minkey_4001(args$);
+ __txn_discard_reply result$ = __DB_txn_discard_4002(args$);
call.reply(result$);
break;
}
case 19: {
- __db_close_msg args$ = new __db_close_msg();
+ __txn_prepare_msg args$ = new __txn_prepare_msg();
call.retrieveCall(args$);
- __db_close_reply result$ = __DB_db_close_4001(args$);
+ __txn_prepare_reply result$ = __DB_txn_prepare_4002(args$);
call.reply(result$);
break;
}
case 20: {
- __db_create_msg args$ = new __db_create_msg();
+ __txn_recover_msg args$ = new __txn_recover_msg();
call.retrieveCall(args$);
- __db_create_reply result$ = __DB_db_create_4001(args$);
+ __txn_recover_reply result$ = __DB_txn_recover_4002(args$);
call.reply(result$);
break;
}
case 21: {
- __db_del_msg args$ = new __db_del_msg();
+ __db_associate_msg args$ = new __db_associate_msg();
call.retrieveCall(args$);
- __db_del_reply result$ = __DB_db_del_4001(args$);
+ __db_associate_reply result$ = __DB_db_associate_4002(args$);
call.reply(result$);
break;
}
case 22: {
- __db_encrypt_msg args$ = new __db_encrypt_msg();
+ __db_bt_maxkey_msg args$ = new __db_bt_maxkey_msg();
call.retrieveCall(args$);
- __db_encrypt_reply result$ = __DB_db_encrypt_4001(args$);
+ __db_bt_maxkey_reply result$ = __DB_db_bt_maxkey_4002(args$);
call.reply(result$);
break;
}
case 23: {
- __db_extentsize_msg args$ = new __db_extentsize_msg();
+ __db_get_bt_minkey_msg args$ = new __db_get_bt_minkey_msg();
call.retrieveCall(args$);
- __db_extentsize_reply result$ = __DB_db_extentsize_4001(args$);
+ __db_get_bt_minkey_reply result$ = __DB_db_get_bt_minkey_4002(args$);
call.reply(result$);
break;
}
case 24: {
- __db_flags_msg args$ = new __db_flags_msg();
+ __db_bt_minkey_msg args$ = new __db_bt_minkey_msg();
call.retrieveCall(args$);
- __db_flags_reply result$ = __DB_db_flags_4001(args$);
+ __db_bt_minkey_reply result$ = __DB_db_bt_minkey_4002(args$);
call.reply(result$);
break;
}
case 25: {
- __db_get_msg args$ = new __db_get_msg();
+ __db_close_msg args$ = new __db_close_msg();
call.retrieveCall(args$);
- __db_get_reply result$ = __DB_db_get_4001(args$);
+ __db_close_reply result$ = __DB_db_close_4002(args$);
call.reply(result$);
break;
}
case 26: {
- __db_h_ffactor_msg args$ = new __db_h_ffactor_msg();
+ __db_create_msg args$ = new __db_create_msg();
call.retrieveCall(args$);
- __db_h_ffactor_reply result$ = __DB_db_h_ffactor_4001(args$);
+ __db_create_reply result$ = __DB_db_create_4002(args$);
call.reply(result$);
break;
}
case 27: {
- __db_h_nelem_msg args$ = new __db_h_nelem_msg();
+ __db_del_msg args$ = new __db_del_msg();
call.retrieveCall(args$);
- __db_h_nelem_reply result$ = __DB_db_h_nelem_4001(args$);
+ __db_del_reply result$ = __DB_db_del_4002(args$);
call.reply(result$);
break;
}
case 28: {
- __db_key_range_msg args$ = new __db_key_range_msg();
+ __db_get_encrypt_flags_msg args$ = new __db_get_encrypt_flags_msg();
call.retrieveCall(args$);
- __db_key_range_reply result$ = __DB_db_key_range_4001(args$);
+ __db_get_encrypt_flags_reply result$ = __DB_db_get_encrypt_flags_4002(args$);
call.reply(result$);
break;
}
case 29: {
- __db_lorder_msg args$ = new __db_lorder_msg();
+ __db_encrypt_msg args$ = new __db_encrypt_msg();
call.retrieveCall(args$);
- __db_lorder_reply result$ = __DB_db_lorder_4001(args$);
+ __db_encrypt_reply result$ = __DB_db_encrypt_4002(args$);
call.reply(result$);
break;
}
case 30: {
- __db_open_msg args$ = new __db_open_msg();
+ __db_get_extentsize_msg args$ = new __db_get_extentsize_msg();
call.retrieveCall(args$);
- __db_open_reply result$ = __DB_db_open_4001(args$);
+ __db_get_extentsize_reply result$ = __DB_db_get_extentsize_4002(args$);
call.reply(result$);
break;
}
case 31: {
- __db_pagesize_msg args$ = new __db_pagesize_msg();
+ __db_extentsize_msg args$ = new __db_extentsize_msg();
call.retrieveCall(args$);
- __db_pagesize_reply result$ = __DB_db_pagesize_4001(args$);
+ __db_extentsize_reply result$ = __DB_db_extentsize_4002(args$);
call.reply(result$);
break;
}
case 32: {
- __db_pget_msg args$ = new __db_pget_msg();
+ __db_get_flags_msg args$ = new __db_get_flags_msg();
call.retrieveCall(args$);
- __db_pget_reply result$ = __DB_db_pget_4001(args$);
+ __db_get_flags_reply result$ = __DB_db_get_flags_4002(args$);
call.reply(result$);
break;
}
case 33: {
- __db_put_msg args$ = new __db_put_msg();
+ __db_flags_msg args$ = new __db_flags_msg();
call.retrieveCall(args$);
- __db_put_reply result$ = __DB_db_put_4001(args$);
+ __db_flags_reply result$ = __DB_db_flags_4002(args$);
call.reply(result$);
break;
}
case 34: {
- __db_re_delim_msg args$ = new __db_re_delim_msg();
+ __db_get_msg args$ = new __db_get_msg();
call.retrieveCall(args$);
- __db_re_delim_reply result$ = __DB_db_re_delim_4001(args$);
+ __db_get_reply result$ = __DB_db_get_4002(args$);
call.reply(result$);
break;
}
case 35: {
- __db_re_len_msg args$ = new __db_re_len_msg();
+ __db_get_name_msg args$ = new __db_get_name_msg();
call.retrieveCall(args$);
- __db_re_len_reply result$ = __DB_db_re_len_4001(args$);
+ __db_get_name_reply result$ = __DB_db_get_name_4002(args$);
call.reply(result$);
break;
}
case 36: {
- __db_re_pad_msg args$ = new __db_re_pad_msg();
+ __db_get_open_flags_msg args$ = new __db_get_open_flags_msg();
call.retrieveCall(args$);
- __db_re_pad_reply result$ = __DB_db_re_pad_4001(args$);
+ __db_get_open_flags_reply result$ = __DB_db_get_open_flags_4002(args$);
call.reply(result$);
break;
}
case 37: {
- __db_remove_msg args$ = new __db_remove_msg();
+ __db_get_h_ffactor_msg args$ = new __db_get_h_ffactor_msg();
call.retrieveCall(args$);
- __db_remove_reply result$ = __DB_db_remove_4001(args$);
+ __db_get_h_ffactor_reply result$ = __DB_db_get_h_ffactor_4002(args$);
call.reply(result$);
break;
}
case 38: {
- __db_rename_msg args$ = new __db_rename_msg();
+ __db_h_ffactor_msg args$ = new __db_h_ffactor_msg();
call.retrieveCall(args$);
- __db_rename_reply result$ = __DB_db_rename_4001(args$);
+ __db_h_ffactor_reply result$ = __DB_db_h_ffactor_4002(args$);
call.reply(result$);
break;
}
case 39: {
- __db_stat_msg args$ = new __db_stat_msg();
+ __db_get_h_nelem_msg args$ = new __db_get_h_nelem_msg();
call.retrieveCall(args$);
- __db_stat_reply result$ = __DB_db_stat_4001(args$);
+ __db_get_h_nelem_reply result$ = __DB_db_get_h_nelem_4002(args$);
call.reply(result$);
break;
}
case 40: {
- __db_sync_msg args$ = new __db_sync_msg();
+ __db_h_nelem_msg args$ = new __db_h_nelem_msg();
call.retrieveCall(args$);
- __db_sync_reply result$ = __DB_db_sync_4001(args$);
+ __db_h_nelem_reply result$ = __DB_db_h_nelem_4002(args$);
call.reply(result$);
break;
}
case 41: {
- __db_truncate_msg args$ = new __db_truncate_msg();
+ __db_key_range_msg args$ = new __db_key_range_msg();
call.retrieveCall(args$);
- __db_truncate_reply result$ = __DB_db_truncate_4001(args$);
+ __db_key_range_reply result$ = __DB_db_key_range_4002(args$);
call.reply(result$);
break;
}
case 42: {
- __db_cursor_msg args$ = new __db_cursor_msg();
+ __db_get_lorder_msg args$ = new __db_get_lorder_msg();
call.retrieveCall(args$);
- __db_cursor_reply result$ = __DB_db_cursor_4001(args$);
+ __db_get_lorder_reply result$ = __DB_db_get_lorder_4002(args$);
call.reply(result$);
break;
}
case 43: {
- __db_join_msg args$ = new __db_join_msg();
+ __db_lorder_msg args$ = new __db_lorder_msg();
call.retrieveCall(args$);
- __db_join_reply result$ = __DB_db_join_4001(args$);
+ __db_lorder_reply result$ = __DB_db_lorder_4002(args$);
call.reply(result$);
break;
}
case 44: {
- __dbc_close_msg args$ = new __dbc_close_msg();
+ __db_open_msg args$ = new __db_open_msg();
call.retrieveCall(args$);
- __dbc_close_reply result$ = __DB_dbc_close_4001(args$);
+ __db_open_reply result$ = __DB_db_open_4002(args$);
call.reply(result$);
break;
}
case 45: {
- __dbc_count_msg args$ = new __dbc_count_msg();
+ __db_get_pagesize_msg args$ = new __db_get_pagesize_msg();
call.retrieveCall(args$);
- __dbc_count_reply result$ = __DB_dbc_count_4001(args$);
+ __db_get_pagesize_reply result$ = __DB_db_get_pagesize_4002(args$);
call.reply(result$);
break;
}
case 46: {
- __dbc_del_msg args$ = new __dbc_del_msg();
+ __db_pagesize_msg args$ = new __db_pagesize_msg();
call.retrieveCall(args$);
- __dbc_del_reply result$ = __DB_dbc_del_4001(args$);
+ __db_pagesize_reply result$ = __DB_db_pagesize_4002(args$);
call.reply(result$);
break;
}
case 47: {
- __dbc_dup_msg args$ = new __dbc_dup_msg();
+ __db_pget_msg args$ = new __db_pget_msg();
call.retrieveCall(args$);
- __dbc_dup_reply result$ = __DB_dbc_dup_4001(args$);
+ __db_pget_reply result$ = __DB_db_pget_4002(args$);
call.reply(result$);
break;
}
case 48: {
- __dbc_get_msg args$ = new __dbc_get_msg();
+ __db_put_msg args$ = new __db_put_msg();
call.retrieveCall(args$);
- __dbc_get_reply result$ = __DB_dbc_get_4001(args$);
+ __db_put_reply result$ = __DB_db_put_4002(args$);
call.reply(result$);
break;
}
case 49: {
- __dbc_pget_msg args$ = new __dbc_pget_msg();
+ __db_get_re_delim_msg args$ = new __db_get_re_delim_msg();
call.retrieveCall(args$);
- __dbc_pget_reply result$ = __DB_dbc_pget_4001(args$);
+ __db_get_re_delim_reply result$ = __DB_db_get_re_delim_4002(args$);
call.reply(result$);
break;
}
case 50: {
+ __db_re_delim_msg args$ = new __db_re_delim_msg();
+ call.retrieveCall(args$);
+ __db_re_delim_reply result$ = __DB_db_re_delim_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 51: {
+ __db_get_re_len_msg args$ = new __db_get_re_len_msg();
+ call.retrieveCall(args$);
+ __db_get_re_len_reply result$ = __DB_db_get_re_len_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 52: {
+ __db_re_len_msg args$ = new __db_re_len_msg();
+ call.retrieveCall(args$);
+ __db_re_len_reply result$ = __DB_db_re_len_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 53: {
+ __db_re_pad_msg args$ = new __db_re_pad_msg();
+ call.retrieveCall(args$);
+ __db_re_pad_reply result$ = __DB_db_re_pad_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 54: {
+ __db_get_re_pad_msg args$ = new __db_get_re_pad_msg();
+ call.retrieveCall(args$);
+ __db_get_re_pad_reply result$ = __DB_db_get_re_pad_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 55: {
+ __db_remove_msg args$ = new __db_remove_msg();
+ call.retrieveCall(args$);
+ __db_remove_reply result$ = __DB_db_remove_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 56: {
+ __db_rename_msg args$ = new __db_rename_msg();
+ call.retrieveCall(args$);
+ __db_rename_reply result$ = __DB_db_rename_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 57: {
+ __db_stat_msg args$ = new __db_stat_msg();
+ call.retrieveCall(args$);
+ __db_stat_reply result$ = __DB_db_stat_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 58: {
+ __db_sync_msg args$ = new __db_sync_msg();
+ call.retrieveCall(args$);
+ __db_sync_reply result$ = __DB_db_sync_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 59: {
+ __db_truncate_msg args$ = new __db_truncate_msg();
+ call.retrieveCall(args$);
+ __db_truncate_reply result$ = __DB_db_truncate_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 60: {
+ __db_cursor_msg args$ = new __db_cursor_msg();
+ call.retrieveCall(args$);
+ __db_cursor_reply result$ = __DB_db_cursor_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 61: {
+ __db_join_msg args$ = new __db_join_msg();
+ call.retrieveCall(args$);
+ __db_join_reply result$ = __DB_db_join_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 62: {
+ __dbc_close_msg args$ = new __dbc_close_msg();
+ call.retrieveCall(args$);
+ __dbc_close_reply result$ = __DB_dbc_close_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 63: {
+ __dbc_count_msg args$ = new __dbc_count_msg();
+ call.retrieveCall(args$);
+ __dbc_count_reply result$ = __DB_dbc_count_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 64: {
+ __dbc_del_msg args$ = new __dbc_del_msg();
+ call.retrieveCall(args$);
+ __dbc_del_reply result$ = __DB_dbc_del_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 65: {
+ __dbc_dup_msg args$ = new __dbc_dup_msg();
+ call.retrieveCall(args$);
+ __dbc_dup_reply result$ = __DB_dbc_dup_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 66: {
+ __dbc_get_msg args$ = new __dbc_get_msg();
+ call.retrieveCall(args$);
+ __dbc_get_reply result$ = __DB_dbc_get_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 67: {
+ __dbc_pget_msg args$ = new __dbc_pget_msg();
+ call.retrieveCall(args$);
+ __dbc_pget_reply result$ = __DB_dbc_pget_4002(args$);
+ call.reply(result$);
+ break;
+ }
+ case 68: {
__dbc_put_msg args$ = new __dbc_put_msg();
call.retrieveCall(args$);
- __dbc_put_reply result$ = __DB_dbc_put_4001(args$);
+ __dbc_put_reply result$ = __DB_dbc_put_4002(args$);
call.reply(result$);
break;
}
@@ -391,105 +517,141 @@ public abstract class DbServerStub extends OncRpcServerStub implements OncRpcDis
}
}
- public abstract __env_cachesize_reply __DB_env_cachesize_4001(__env_cachesize_msg arg1);
+ public abstract __env_get_cachesize_reply __DB_env_get_cachesize_4002(__env_get_cachesize_msg arg1);
+
+ public abstract __env_cachesize_reply __DB_env_cachesize_4002(__env_cachesize_msg arg1);
+
+ public abstract __env_close_reply __DB_env_close_4002(__env_close_msg arg1);
+
+ public abstract __env_create_reply __DB_env_create_4002(__env_create_msg arg1);
+
+ public abstract __env_dbremove_reply __DB_env_dbremove_4002(__env_dbremove_msg arg1);
+
+ public abstract __env_dbrename_reply __DB_env_dbrename_4002(__env_dbrename_msg arg1);
+
+ public abstract __env_get_encrypt_flags_reply __DB_env_get_encrypt_flags_4002(__env_get_encrypt_flags_msg arg1);
+
+ public abstract __env_encrypt_reply __DB_env_encrypt_4002(__env_encrypt_msg arg1);
+
+ public abstract __env_get_flags_reply __DB_env_get_flags_4002(__env_get_flags_msg arg1);
+
+ public abstract __env_flags_reply __DB_env_flags_4002(__env_flags_msg arg1);
+
+ public abstract __env_get_home_reply __DB_env_get_home_4002(__env_get_home_msg arg1);
+
+ public abstract __env_get_open_flags_reply __DB_env_get_open_flags_4002(__env_get_open_flags_msg arg1);
+
+ public abstract __env_open_reply __DB_env_open_4002(__env_open_msg arg1);
+
+ public abstract __env_remove_reply __DB_env_remove_4002(__env_remove_msg arg1);
+
+ public abstract __txn_abort_reply __DB_txn_abort_4002(__txn_abort_msg arg1);
+
+ public abstract __txn_begin_reply __DB_txn_begin_4002(__txn_begin_msg arg1);
+
+ public abstract __txn_commit_reply __DB_txn_commit_4002(__txn_commit_msg arg1);
+
+ public abstract __txn_discard_reply __DB_txn_discard_4002(__txn_discard_msg arg1);
+
+ public abstract __txn_prepare_reply __DB_txn_prepare_4002(__txn_prepare_msg arg1);
- public abstract __env_close_reply __DB_env_close_4001(__env_close_msg arg1);
+ public abstract __txn_recover_reply __DB_txn_recover_4002(__txn_recover_msg arg1);
- public abstract __env_create_reply __DB_env_create_4001(__env_create_msg arg1);
+ public abstract __db_associate_reply __DB_db_associate_4002(__db_associate_msg arg1);
- public abstract __env_dbremove_reply __DB_env_dbremove_4001(__env_dbremove_msg arg1);
+ public abstract __db_bt_maxkey_reply __DB_db_bt_maxkey_4002(__db_bt_maxkey_msg arg1);
- public abstract __env_dbrename_reply __DB_env_dbrename_4001(__env_dbrename_msg arg1);
+ public abstract __db_get_bt_minkey_reply __DB_db_get_bt_minkey_4002(__db_get_bt_minkey_msg arg1);
- public abstract __env_encrypt_reply __DB_env_encrypt_4001(__env_encrypt_msg arg1);
+ public abstract __db_bt_minkey_reply __DB_db_bt_minkey_4002(__db_bt_minkey_msg arg1);
- public abstract __env_flags_reply __DB_env_flags_4001(__env_flags_msg arg1);
+ public abstract __db_close_reply __DB_db_close_4002(__db_close_msg arg1);
- public abstract __env_open_reply __DB_env_open_4001(__env_open_msg arg1);
+ public abstract __db_create_reply __DB_db_create_4002(__db_create_msg arg1);
- public abstract __env_remove_reply __DB_env_remove_4001(__env_remove_msg arg1);
+ public abstract __db_del_reply __DB_db_del_4002(__db_del_msg arg1);
- public abstract __txn_abort_reply __DB_txn_abort_4001(__txn_abort_msg arg1);
+ public abstract __db_get_encrypt_flags_reply __DB_db_get_encrypt_flags_4002(__db_get_encrypt_flags_msg arg1);
- public abstract __txn_begin_reply __DB_txn_begin_4001(__txn_begin_msg arg1);
+ public abstract __db_encrypt_reply __DB_db_encrypt_4002(__db_encrypt_msg arg1);
- public abstract __txn_commit_reply __DB_txn_commit_4001(__txn_commit_msg arg1);
+ public abstract __db_get_extentsize_reply __DB_db_get_extentsize_4002(__db_get_extentsize_msg arg1);
- public abstract __txn_discard_reply __DB_txn_discard_4001(__txn_discard_msg arg1);
+ public abstract __db_extentsize_reply __DB_db_extentsize_4002(__db_extentsize_msg arg1);
- public abstract __txn_prepare_reply __DB_txn_prepare_4001(__txn_prepare_msg arg1);
+ public abstract __db_get_flags_reply __DB_db_get_flags_4002(__db_get_flags_msg arg1);
- public abstract __txn_recover_reply __DB_txn_recover_4001(__txn_recover_msg arg1);
+ public abstract __db_flags_reply __DB_db_flags_4002(__db_flags_msg arg1);
- public abstract __db_associate_reply __DB_db_associate_4001(__db_associate_msg arg1);
+ public abstract __db_get_reply __DB_db_get_4002(__db_get_msg arg1);
- public abstract __db_bt_maxkey_reply __DB_db_bt_maxkey_4001(__db_bt_maxkey_msg arg1);
+ public abstract __db_get_name_reply __DB_db_get_name_4002(__db_get_name_msg arg1);
- public abstract __db_bt_minkey_reply __DB_db_bt_minkey_4001(__db_bt_minkey_msg arg1);
+ public abstract __db_get_open_flags_reply __DB_db_get_open_flags_4002(__db_get_open_flags_msg arg1);
- public abstract __db_close_reply __DB_db_close_4001(__db_close_msg arg1);
+ public abstract __db_get_h_ffactor_reply __DB_db_get_h_ffactor_4002(__db_get_h_ffactor_msg arg1);
- public abstract __db_create_reply __DB_db_create_4001(__db_create_msg arg1);
+ public abstract __db_h_ffactor_reply __DB_db_h_ffactor_4002(__db_h_ffactor_msg arg1);
- public abstract __db_del_reply __DB_db_del_4001(__db_del_msg arg1);
+ public abstract __db_get_h_nelem_reply __DB_db_get_h_nelem_4002(__db_get_h_nelem_msg arg1);
- public abstract __db_encrypt_reply __DB_db_encrypt_4001(__db_encrypt_msg arg1);
+ public abstract __db_h_nelem_reply __DB_db_h_nelem_4002(__db_h_nelem_msg arg1);
- public abstract __db_extentsize_reply __DB_db_extentsize_4001(__db_extentsize_msg arg1);
+ public abstract __db_key_range_reply __DB_db_key_range_4002(__db_key_range_msg arg1);
- public abstract __db_flags_reply __DB_db_flags_4001(__db_flags_msg arg1);
+ public abstract __db_get_lorder_reply __DB_db_get_lorder_4002(__db_get_lorder_msg arg1);
- public abstract __db_get_reply __DB_db_get_4001(__db_get_msg arg1);
+ public abstract __db_lorder_reply __DB_db_lorder_4002(__db_lorder_msg arg1);
- public abstract __db_h_ffactor_reply __DB_db_h_ffactor_4001(__db_h_ffactor_msg arg1);
+ public abstract __db_open_reply __DB_db_open_4002(__db_open_msg arg1);
- public abstract __db_h_nelem_reply __DB_db_h_nelem_4001(__db_h_nelem_msg arg1);
+ public abstract __db_get_pagesize_reply __DB_db_get_pagesize_4002(__db_get_pagesize_msg arg1);
- public abstract __db_key_range_reply __DB_db_key_range_4001(__db_key_range_msg arg1);
+ public abstract __db_pagesize_reply __DB_db_pagesize_4002(__db_pagesize_msg arg1);
- public abstract __db_lorder_reply __DB_db_lorder_4001(__db_lorder_msg arg1);
+ public abstract __db_pget_reply __DB_db_pget_4002(__db_pget_msg arg1);
- public abstract __db_open_reply __DB_db_open_4001(__db_open_msg arg1);
+ public abstract __db_put_reply __DB_db_put_4002(__db_put_msg arg1);
- public abstract __db_pagesize_reply __DB_db_pagesize_4001(__db_pagesize_msg arg1);
+ public abstract __db_get_re_delim_reply __DB_db_get_re_delim_4002(__db_get_re_delim_msg arg1);
- public abstract __db_pget_reply __DB_db_pget_4001(__db_pget_msg arg1);
+ public abstract __db_re_delim_reply __DB_db_re_delim_4002(__db_re_delim_msg arg1);
- public abstract __db_put_reply __DB_db_put_4001(__db_put_msg arg1);
+ public abstract __db_get_re_len_reply __DB_db_get_re_len_4002(__db_get_re_len_msg arg1);
- public abstract __db_re_delim_reply __DB_db_re_delim_4001(__db_re_delim_msg arg1);
+ public abstract __db_re_len_reply __DB_db_re_len_4002(__db_re_len_msg arg1);
- public abstract __db_re_len_reply __DB_db_re_len_4001(__db_re_len_msg arg1);
+ public abstract __db_re_pad_reply __DB_db_re_pad_4002(__db_re_pad_msg arg1);
- public abstract __db_re_pad_reply __DB_db_re_pad_4001(__db_re_pad_msg arg1);
+ public abstract __db_get_re_pad_reply __DB_db_get_re_pad_4002(__db_get_re_pad_msg arg1);
- public abstract __db_remove_reply __DB_db_remove_4001(__db_remove_msg arg1);
+ public abstract __db_remove_reply __DB_db_remove_4002(__db_remove_msg arg1);
- public abstract __db_rename_reply __DB_db_rename_4001(__db_rename_msg arg1);
+ public abstract __db_rename_reply __DB_db_rename_4002(__db_rename_msg arg1);
- public abstract __db_stat_reply __DB_db_stat_4001(__db_stat_msg arg1);
+ public abstract __db_stat_reply __DB_db_stat_4002(__db_stat_msg arg1);
- public abstract __db_sync_reply __DB_db_sync_4001(__db_sync_msg arg1);
+ public abstract __db_sync_reply __DB_db_sync_4002(__db_sync_msg arg1);
- public abstract __db_truncate_reply __DB_db_truncate_4001(__db_truncate_msg arg1);
+ public abstract __db_truncate_reply __DB_db_truncate_4002(__db_truncate_msg arg1);
- public abstract __db_cursor_reply __DB_db_cursor_4001(__db_cursor_msg arg1);
+ public abstract __db_cursor_reply __DB_db_cursor_4002(__db_cursor_msg arg1);
- public abstract __db_join_reply __DB_db_join_4001(__db_join_msg arg1);
+ public abstract __db_join_reply __DB_db_join_4002(__db_join_msg arg1);
- public abstract __dbc_close_reply __DB_dbc_close_4001(__dbc_close_msg arg1);
+ public abstract __dbc_close_reply __DB_dbc_close_4002(__dbc_close_msg arg1);
- public abstract __dbc_count_reply __DB_dbc_count_4001(__dbc_count_msg arg1);
+ public abstract __dbc_count_reply __DB_dbc_count_4002(__dbc_count_msg arg1);
- public abstract __dbc_del_reply __DB_dbc_del_4001(__dbc_del_msg arg1);
+ public abstract __dbc_del_reply __DB_dbc_del_4002(__dbc_del_msg arg1);
- public abstract __dbc_dup_reply __DB_dbc_dup_4001(__dbc_dup_msg arg1);
+ public abstract __dbc_dup_reply __DB_dbc_dup_4002(__dbc_dup_msg arg1);
- public abstract __dbc_get_reply __DB_dbc_get_4001(__dbc_get_msg arg1);
+ public abstract __dbc_get_reply __DB_dbc_get_4002(__dbc_get_msg arg1);
- public abstract __dbc_pget_reply __DB_dbc_pget_4001(__dbc_pget_msg arg1);
+ public abstract __dbc_pget_reply __DB_dbc_pget_4002(__dbc_pget_msg arg1);
- public abstract __dbc_put_reply __DB_dbc_put_4001(__dbc_put_msg arg1);
+ public abstract __dbc_put_reply __DB_dbc_put_4002(__dbc_put_msg arg1);
}
// End of DbServerStub.java
diff --git a/db/rpc_server/java/gen/__db_get_bt_minkey_msg.java b/db/rpc_server/java/gen/__db_get_bt_minkey_msg.java
new file mode 100644
index 000000000..6cf11f930
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_bt_minkey_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_bt_minkey_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_bt_minkey_msg() {
+ }
+
+ public __db_get_bt_minkey_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_bt_minkey_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_bt_minkey_reply.java b/db/rpc_server/java/gen/__db_get_bt_minkey_reply.java
new file mode 100644
index 000000000..62fd2590e
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_bt_minkey_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_bt_minkey_reply implements XdrAble {
+ public int status;
+ public int minkey;
+
+ public __db_get_bt_minkey_reply() {
+ }
+
+ public __db_get_bt_minkey_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(minkey);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ minkey = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_bt_minkey_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_encrypt_flags_msg.java b/db/rpc_server/java/gen/__db_get_encrypt_flags_msg.java
new file mode 100644
index 000000000..f302b4e27
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_encrypt_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_encrypt_flags_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_encrypt_flags_msg() {
+ }
+
+ public __db_get_encrypt_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_encrypt_flags_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_encrypt_flags_reply.java b/db/rpc_server/java/gen/__db_get_encrypt_flags_reply.java
new file mode 100644
index 000000000..840112db1
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_encrypt_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_encrypt_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __db_get_encrypt_flags_reply() {
+ }
+
+ public __db_get_encrypt_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_encrypt_flags_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_extentsize_msg.java b/db/rpc_server/java/gen/__db_get_extentsize_msg.java
new file mode 100644
index 000000000..c963be7b3
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_extentsize_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_extentsize_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_extentsize_msg() {
+ }
+
+ public __db_get_extentsize_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_extentsize_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_extentsize_reply.java b/db/rpc_server/java/gen/__db_get_extentsize_reply.java
new file mode 100644
index 000000000..4f97e35c2
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_extentsize_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_extentsize_reply implements XdrAble {
+ public int status;
+ public int extentsize;
+
+ public __db_get_extentsize_reply() {
+ }
+
+ public __db_get_extentsize_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(extentsize);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ extentsize = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_extentsize_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_flags_msg.java b/db/rpc_server/java/gen/__db_get_flags_msg.java
new file mode 100644
index 000000000..f8a7a0e50
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_flags_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_flags_msg() {
+ }
+
+ public __db_get_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_flags_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_flags_reply.java b/db/rpc_server/java/gen/__db_get_flags_reply.java
new file mode 100644
index 000000000..9c2ac44ee
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __db_get_flags_reply() {
+ }
+
+ public __db_get_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_flags_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_h_ffactor_msg.java b/db/rpc_server/java/gen/__db_get_h_ffactor_msg.java
new file mode 100644
index 000000000..deb3723aa
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_h_ffactor_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_h_ffactor_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_h_ffactor_msg() {
+ }
+
+ public __db_get_h_ffactor_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_h_ffactor_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_h_ffactor_reply.java b/db/rpc_server/java/gen/__db_get_h_ffactor_reply.java
new file mode 100644
index 000000000..30b769cb3
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_h_ffactor_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_h_ffactor_reply implements XdrAble {
+ public int status;
+ public int ffactor;
+
+ public __db_get_h_ffactor_reply() {
+ }
+
+ public __db_get_h_ffactor_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(ffactor);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ ffactor = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_h_ffactor_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_h_nelem_msg.java b/db/rpc_server/java/gen/__db_get_h_nelem_msg.java
new file mode 100644
index 000000000..cef259967
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_h_nelem_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_h_nelem_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_h_nelem_msg() {
+ }
+
+ public __db_get_h_nelem_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_h_nelem_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_h_nelem_reply.java b/db/rpc_server/java/gen/__db_get_h_nelem_reply.java
new file mode 100644
index 000000000..c01c329ad
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_h_nelem_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_h_nelem_reply implements XdrAble {
+ public int status;
+ public int nelem;
+
+ public __db_get_h_nelem_reply() {
+ }
+
+ public __db_get_h_nelem_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(nelem);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ nelem = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_h_nelem_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_lorder_msg.java b/db/rpc_server/java/gen/__db_get_lorder_msg.java
new file mode 100644
index 000000000..dc6ca97f5
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_lorder_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_lorder_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_lorder_msg() {
+ }
+
+ public __db_get_lorder_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_lorder_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_lorder_reply.java b/db/rpc_server/java/gen/__db_get_lorder_reply.java
new file mode 100644
index 000000000..e6d302920
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_lorder_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_lorder_reply implements XdrAble {
+ public int status;
+ public int lorder;
+
+ public __db_get_lorder_reply() {
+ }
+
+ public __db_get_lorder_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(lorder);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ lorder = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_lorder_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_name_msg.java b/db/rpc_server/java/gen/__db_get_name_msg.java
new file mode 100644
index 000000000..77008ba3d
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_name_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_name_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_name_msg() {
+ }
+
+ public __db_get_name_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_name_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_name_reply.java b/db/rpc_server/java/gen/__db_get_name_reply.java
new file mode 100644
index 000000000..853157f47
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_name_reply.java
@@ -0,0 +1,38 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_name_reply implements XdrAble {
+ public int status;
+ public String filename;
+ public String dbname;
+
+ public __db_get_name_reply() {
+ }
+
+ public __db_get_name_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeString(filename);
+ xdr.xdrEncodeString(dbname);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ filename = xdr.xdrDecodeString();
+ dbname = xdr.xdrDecodeString();
+ }
+
+}
+// End of __db_get_name_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_open_flags_msg.java b/db/rpc_server/java/gen/__db_get_open_flags_msg.java
new file mode 100644
index 000000000..372e07bf0
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_open_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_open_flags_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_open_flags_msg() {
+ }
+
+ public __db_get_open_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_open_flags_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_open_flags_reply.java b/db/rpc_server/java/gen/__db_get_open_flags_reply.java
new file mode 100644
index 000000000..354b97a69
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_open_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_open_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __db_get_open_flags_reply() {
+ }
+
+ public __db_get_open_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_open_flags_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_pagesize_msg.java b/db/rpc_server/java/gen/__db_get_pagesize_msg.java
new file mode 100644
index 000000000..b8fa483a4
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_pagesize_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_pagesize_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_pagesize_msg() {
+ }
+
+ public __db_get_pagesize_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_pagesize_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_pagesize_reply.java b/db/rpc_server/java/gen/__db_get_pagesize_reply.java
new file mode 100644
index 000000000..2a1442b9c
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_pagesize_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_pagesize_reply implements XdrAble {
+ public int status;
+ public int pagesize;
+
+ public __db_get_pagesize_reply() {
+ }
+
+ public __db_get_pagesize_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(pagesize);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ pagesize = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_pagesize_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_re_delim_msg.java b/db/rpc_server/java/gen/__db_get_re_delim_msg.java
new file mode 100644
index 000000000..bd0ac3acd
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_delim_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_delim_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_re_delim_msg() {
+ }
+
+ public __db_get_re_delim_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_delim_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_re_delim_reply.java b/db/rpc_server/java/gen/__db_get_re_delim_reply.java
new file mode 100644
index 000000000..000a44816
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_delim_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_delim_reply implements XdrAble {
+ public int status;
+ public int delim;
+
+ public __db_get_re_delim_reply() {
+ }
+
+ public __db_get_re_delim_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(delim);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ delim = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_delim_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_re_len_msg.java b/db/rpc_server/java/gen/__db_get_re_len_msg.java
new file mode 100644
index 000000000..afc7d7ba6
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_len_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_len_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_re_len_msg() {
+ }
+
+ public __db_get_re_len_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_len_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_re_len_reply.java b/db/rpc_server/java/gen/__db_get_re_len_reply.java
new file mode 100644
index 000000000..688f75a4b
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_len_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_len_reply implements XdrAble {
+ public int status;
+ public int len;
+
+ public __db_get_re_len_reply() {
+ }
+
+ public __db_get_re_len_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(len);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ len = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_len_reply.java
diff --git a/db/rpc_server/java/gen/__db_get_re_pad_msg.java b/db/rpc_server/java/gen/__db_get_re_pad_msg.java
new file mode 100644
index 000000000..f8678ccce
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_pad_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_pad_msg implements XdrAble {
+ public int dbpcl_id;
+
+ public __db_get_re_pad_msg() {
+ }
+
+ public __db_get_re_pad_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbpcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbpcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_pad_msg.java
diff --git a/db/rpc_server/java/gen/__db_get_re_pad_reply.java b/db/rpc_server/java/gen/__db_get_re_pad_reply.java
new file mode 100644
index 000000000..88d682854
--- /dev/null
+++ b/db/rpc_server/java/gen/__db_get_re_pad_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __db_get_re_pad_reply implements XdrAble {
+ public int status;
+ public int pad;
+
+ public __db_get_re_pad_reply() {
+ }
+
+ public __db_get_re_pad_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(pad);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ pad = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __db_get_re_pad_reply.java
diff --git a/db/rpc_server/java/gen/__env_get_cachesize_msg.java b/db/rpc_server/java/gen/__env_get_cachesize_msg.java
new file mode 100644
index 000000000..f7ae42fac
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_cachesize_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_cachesize_msg implements XdrAble {
+ public int dbenvcl_id;
+
+ public __env_get_cachesize_msg() {
+ }
+
+ public __env_get_cachesize_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbenvcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbenvcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_cachesize_msg.java
diff --git a/db/rpc_server/java/gen/__env_get_cachesize_reply.java b/db/rpc_server/java/gen/__env_get_cachesize_reply.java
new file mode 100644
index 000000000..9604f59ef
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_cachesize_reply.java
@@ -0,0 +1,41 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_cachesize_reply implements XdrAble {
+ public int status;
+ public int gbytes;
+ public int bytes;
+ public int ncache;
+
+ public __env_get_cachesize_reply() {
+ }
+
+ public __env_get_cachesize_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(gbytes);
+ xdr.xdrEncodeInt(bytes);
+ xdr.xdrEncodeInt(ncache);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ gbytes = xdr.xdrDecodeInt();
+ bytes = xdr.xdrDecodeInt();
+ ncache = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_cachesize_reply.java
diff --git a/db/rpc_server/java/gen/__env_get_encrypt_flags_msg.java b/db/rpc_server/java/gen/__env_get_encrypt_flags_msg.java
new file mode 100644
index 000000000..cb87819bc
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_encrypt_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_encrypt_flags_msg implements XdrAble {
+ public int dbenvcl_id;
+
+ public __env_get_encrypt_flags_msg() {
+ }
+
+ public __env_get_encrypt_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbenvcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbenvcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_encrypt_flags_msg.java
diff --git a/db/rpc_server/java/gen/__env_get_encrypt_flags_reply.java b/db/rpc_server/java/gen/__env_get_encrypt_flags_reply.java
new file mode 100644
index 000000000..a13740bff
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_encrypt_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_encrypt_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __env_get_encrypt_flags_reply() {
+ }
+
+ public __env_get_encrypt_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_encrypt_flags_reply.java
diff --git a/db/rpc_server/java/gen/__env_get_flags_msg.java b/db/rpc_server/java/gen/__env_get_flags_msg.java
new file mode 100644
index 000000000..6580e004f
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_flags_msg implements XdrAble {
+ public int dbenvcl_id;
+
+ public __env_get_flags_msg() {
+ }
+
+ public __env_get_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbenvcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbenvcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_flags_msg.java
diff --git a/db/rpc_server/java/gen/__env_get_flags_reply.java b/db/rpc_server/java/gen/__env_get_flags_reply.java
new file mode 100644
index 000000000..e8bded8b4
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __env_get_flags_reply() {
+ }
+
+ public __env_get_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_flags_reply.java
diff --git a/db/rpc_server/java/gen/__env_get_home_msg.java b/db/rpc_server/java/gen/__env_get_home_msg.java
new file mode 100644
index 000000000..5f51318b8
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_home_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_home_msg implements XdrAble {
+ public int dbenvcl_id;
+
+ public __env_get_home_msg() {
+ }
+
+ public __env_get_home_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbenvcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbenvcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_home_msg.java
diff --git a/db/rpc_server/java/gen/__env_get_home_reply.java b/db/rpc_server/java/gen/__env_get_home_reply.java
new file mode 100644
index 000000000..e86bded2d
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_home_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_home_reply implements XdrAble {
+ public int status;
+ public String home;
+
+ public __env_get_home_reply() {
+ }
+
+ public __env_get_home_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeString(home);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ home = xdr.xdrDecodeString();
+ }
+
+}
+// End of __env_get_home_reply.java
diff --git a/db/rpc_server/java/gen/__env_get_open_flags_msg.java b/db/rpc_server/java/gen/__env_get_open_flags_msg.java
new file mode 100644
index 000000000..dc9960b1f
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_open_flags_msg.java
@@ -0,0 +1,32 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_open_flags_msg implements XdrAble {
+ public int dbenvcl_id;
+
+ public __env_get_open_flags_msg() {
+ }
+
+ public __env_get_open_flags_msg(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(dbenvcl_id);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ dbenvcl_id = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_open_flags_msg.java
diff --git a/db/rpc_server/java/gen/__env_get_open_flags_reply.java b/db/rpc_server/java/gen/__env_get_open_flags_reply.java
new file mode 100644
index 000000000..bc581e6a5
--- /dev/null
+++ b/db/rpc_server/java/gen/__env_get_open_flags_reply.java
@@ -0,0 +1,35 @@
+/*
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
+ * jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
+ * See http://acplt.org/ks/remotetea.html for details
+ */
+package com.sleepycat.db.rpcserver;
+import org.acplt.oncrpc.*;
+import java.io.IOException;
+
+public class __env_get_open_flags_reply implements XdrAble {
+ public int status;
+ public int flags;
+
+ public __env_get_open_flags_reply() {
+ }
+
+ public __env_get_open_flags_reply(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ xdrDecode(xdr);
+ }
+
+ public void xdrEncode(XdrEncodingStream xdr)
+ throws OncRpcException, IOException {
+ xdr.xdrEncodeInt(status);
+ xdr.xdrEncodeInt(flags);
+ }
+
+ public void xdrDecode(XdrDecodingStream xdr)
+ throws OncRpcException, IOException {
+ status = xdr.xdrDecodeInt();
+ flags = xdr.xdrDecodeInt();
+ }
+
+}
+// End of __env_get_open_flags_reply.java
diff --git a/db/rpc_server/java/gen/db_server.java b/db/rpc_server/java/gen/db_server.java
index a14a77028..52157dfb4 100644
--- a/db/rpc_server/java/gen/db_server.java
+++ b/db/rpc_server/java/gen/db_server.java
@@ -1,5 +1,5 @@
/*
- * Automatically generated by jrpcgen 0.95.1 on 3/19/02 10:30 AM
+ * Automatically generated by jrpcgen 0.95.1 on 3/26/03 6:40 PM
* jrpcgen is part of the "Remote Tea" ONC/RPC package for Java
* See http://acplt.org/ks/remotetea.html for details
*/
@@ -11,57 +11,75 @@ import java.io.IOException;
* A collection of constants used by the "db_server" ONC/RPC program.
*/
public interface db_server {
- public static final int __DB_db_close_4001 = 19;
- public static final int __DB_db_flags_4001 = 24;
- public static final int __DB_dbc_dup_4001 = 47;
- public static final int __DB_db_encrypt_4001 = 22;
- public static final int __DB_env_dbrename_4001 = 5;
- public static final int __DB_env_remove_4001 = 9;
- public static final int __DB_dbc_pget_4001 = 49;
- public static final int __DB_env_cachesize_4001 = 1;
- public static final int __DB_db_lorder_4001 = 29;
- public static final int __DB_db_key_range_4001 = 28;
- public static final int __DB_db_bt_minkey_4001 = 18;
- public static final int __DB_db_sync_4001 = 40;
- public static final int __DB_dbc_close_4001 = 44;
- public static final int __DB_db_join_4001 = 43;
- public static final int __DB_db_pagesize_4001 = 31;
- public static final int DB_RPC_SERVERVERS = 4001;
- public static final int __DB_db_open_4001 = 30;
- public static final int __DB_dbc_get_4001 = 48;
- public static final int __DB_db_cursor_4001 = 42;
- public static final int __DB_txn_commit_4001 = 12;
- public static final int __DB_dbc_del_4001 = 46;
- public static final int __DB_env_create_4001 = 3;
- public static final int __DB_env_open_4001 = 8;
- public static final int __DB_txn_prepare_4001 = 14;
- public static final int __DB_db_pget_4001 = 32;
- public static final int __DB_db_stat_4001 = 39;
- public static final int __DB_db_h_nelem_4001 = 27;
- public static final int __DB_db_remove_4001 = 37;
- public static final int __DB_db_re_delim_4001 = 34;
- public static final int __DB_db_re_pad_4001 = 36;
- public static final int __DB_txn_abort_4001 = 10;
- public static final int __DB_txn_recover_4001 = 15;
- public static final int __DB_db_get_4001 = 25;
- public static final int __DB_db_extentsize_4001 = 23;
+ public static final int __DB_db_get_re_delim_4002 = 49;
+ public static final int __DB_db_close_4002 = 25;
+ public static final int __DB_db_flags_4002 = 33;
+ public static final int __DB_dbc_dup_4002 = 65;
+ public static final int __DB_db_get_open_flags_4002 = 36;
+ public static final int __DB_db_encrypt_4002 = 29;
+ public static final int __DB_env_remove_4002 = 14;
+ public static final int __DB_env_dbrename_4002 = 6;
+ public static final int __DB_dbc_pget_4002 = 67;
+ public static final int __DB_env_get_cachesize_4002 = 1;
+ public static final int __DB_env_cachesize_4002 = 2;
+ public static final int __DB_db_get_lorder_4002 = 42;
+ public static final int __DB_db_lorder_4002 = 43;
+ public static final int __DB_db_key_range_4002 = 41;
+ public static final int __DB_env_get_open_flags_4002 = 12;
+ public static final int __DB_db_bt_minkey_4002 = 24;
+ public static final int __DB_db_sync_4002 = 58;
+ public static final int __DB_dbc_close_4002 = 62;
+ public static final int __DB_db_join_4002 = 61;
+ public static final int __DB_db_pagesize_4002 = 46;
+ public static final int DB_RPC_SERVERVERS = 4002;
+ public static final int __DB_db_open_4002 = 44;
+ public static final int __DB_db_get_extentsize_4002 = 30;
+ public static final int __DB_dbc_get_4002 = 66;
+ public static final int __DB_db_cursor_4002 = 60;
+ public static final int __DB_txn_commit_4002 = 17;
+ public static final int __DB_dbc_del_4002 = 64;
+ public static final int __DB_env_create_4002 = 4;
+ public static final int __DB_env_open_4002 = 13;
+ public static final int __DB_txn_prepare_4002 = 19;
+ public static final int __DB_db_get_re_pad_4002 = 54;
+ public static final int __DB_db_pget_4002 = 47;
+ public static final int __DB_db_stat_4002 = 57;
+ public static final int __DB_db_h_nelem_4002 = 40;
+ public static final int __DB_db_remove_4002 = 55;
+ public static final int __DB_db_get_flags_4002 = 32;
+ public static final int __DB_db_re_delim_4002 = 50;
+ public static final int __DB_db_re_pad_4002 = 53;
+ public static final int __DB_env_get_flags_4002 = 9;
+ public static final int __DB_txn_abort_4002 = 15;
+ public static final int __DB_env_get_encrypt_flags_4002 = 7;
+ public static final int __DB_db_get_encrypt_flags_4002 = 28;
+ public static final int __DB_db_get_h_ffactor_4002 = 37;
+ public static final int __DB_txn_recover_4002 = 20;
+ public static final int __DB_db_get_4002 = 34;
+ public static final int __DB_db_extentsize_4002 = 31;
+ public static final int __DB_db_get_h_nelem_4002 = 39;
public static final int DB_RPC_SERVERPROG = 351457;
- public static final int __DB_dbc_put_4001 = 50;
- public static final int __DB_db_truncate_4001 = 41;
- public static final int __DB_db_del_4001 = 21;
- public static final int __DB_db_bt_maxkey_4001 = 17;
- public static final int __DB_env_dbremove_4001 = 4;
- public static final int __DB_txn_discard_4001 = 13;
- public static final int __DB_db_re_len_4001 = 35;
- public static final int __DB_env_close_4001 = 2;
- public static final int __DB_env_flags_4001 = 7;
- public static final int __DB_db_rename_4001 = 38;
- public static final int __DB_db_associate_4001 = 16;
- public static final int __DB_txn_begin_4001 = 11;
- public static final int __DB_env_encrypt_4001 = 6;
- public static final int __DB_db_h_ffactor_4001 = 26;
- public static final int __DB_db_put_4001 = 33;
- public static final int __DB_db_create_4001 = 20;
- public static final int __DB_dbc_count_4001 = 45;
+ public static final int __DB_dbc_put_4002 = 68;
+ public static final int __DB_db_get_re_len_4002 = 51;
+ public static final int __DB_db_truncate_4002 = 59;
+ public static final int __DB_db_del_4002 = 27;
+ public static final int __DB_db_bt_maxkey_4002 = 22;
+ public static final int __DB_env_dbremove_4002 = 5;
+ public static final int __DB_db_get_pagesize_4002 = 45;
+ public static final int __DB_db_get_name_4002 = 35;
+ public static final int __DB_txn_discard_4002 = 18;
+ public static final int __DB_db_re_len_4002 = 52;
+ public static final int __DB_env_close_4002 = 3;
+ public static final int __DB_env_flags_4002 = 10;
+ public static final int __DB_db_rename_4002 = 56;
+ public static final int __DB_db_get_bt_minkey_4002 = 23;
+ public static final int __DB_db_associate_4002 = 21;
+ public static final int __DB_txn_begin_4002 = 16;
+ public static final int __DB_env_encrypt_4002 = 8;
+ public static final int __DB_db_h_ffactor_4002 = 38;
+ public static final int __DB_db_put_4002 = 48;
+ public static final int __DB_db_create_4002 = 26;
+ public static final int __DB_env_get_home_4002 = 11;
+ public static final int __DB_dbc_count_4002 = 63;
}
// End of db_server.java
diff --git a/db/rpc_server/rpc.src b/db/rpc_server/rpc.src
index 5dd252051..065e4524e 100644
--- a/db/rpc_server/rpc.src
+++ b/db/rpc_server/rpc.src
@@ -1,17 +1,17 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rpc.src,v 1.85 2003/06/30 17:54:49 sue Exp $
#
-# $Id: rpc.src,v 1.30 2000/12/20 21:53:05 ubell Exp $
# Syntax:
-# BEGIN function_name RPC # {CODE | NOCLNTCODE | RETCODE | NOFUNC}
+# BEGIN function_name {CODE | RETCODE | NOFUNC}
# CODE: generate XDR and client code, return status
# Used for functions that just return a status and nothing else.
# RETCODE:generate XDR and client code, call return function
# (generate template return function)
# Used for functions that returns data.
-# NOCLNTCODE: generate only XDR and server functions
-# Used for functions that are "different" on the client.
-# Primarily used for envcreate (which is called from
-# the dbenv->set_server method on the client side) and
-# dbcreate, which is called from non-generated code.
# NOFUNC: generate a client "unsupported function" with right args
# Used for unsupported functions.
#
@@ -19,9 +19,10 @@
# IGNORE: not passed to server
# STRING: string passed to server
# DBT: DBT arg passed to server
-# LIST: opaque list passed to server (NULL-terminated opaque list)
+# LIST: list passed to server (NULL-terminated list of something)
# INT: integer passed to server
# ID: cl_id from arg passed to server
+# GID: global id passed to server
# CONST: do not generate COMPQUIET (for NOFUNC only)
# FUNCPROT prototype
# FUNCARG functiontype
@@ -38,11 +39,12 @@
# All messages automatically return "status" and return that from
# the call to the function. RET's are additional things the server
# may return. RET is like ARG but does not need the IGNORE option.
-# RET {STRING | INT | DBT | LIST | ID} varname [STRING | INT | ID]
+# ARETs are RETs which are returned in arguments by the client.
+# {RET | ARET} {STRING | INT | DBT | LIST | ID} varname [GID | INT | ID]
# STRING: string from server
# DBT: DBT arg from server
-# LIST: opaque list from server (NULL-terminated opaque list)
-# Must have list type of STRING, ID or INT specified
+# LIST: list from server (NULL-terminated list)
+# Must have list type of GID, ID or INT specified
# INT: integer from server
# ID: id from server stored in cl_id
# END function end.
@@ -50,122 +52,264 @@
#
# Environment functions
#
-BEGIN env_cachesize 1 CODE
+BEGIN env_alloc NOFUNC
+ARG ID DB_ENV * dbenv
+FUNCPROT void *(*)(size_t)
+FUNCARG void *(*func0) __P((size_t))
+FUNCPROT void *(*)(void *, size_t)
+FUNCARG void *(*func1) __P((void *, size_t))
+FUNCPROT void (*)(void *)
+FUNCARG void (*func2) __P((void *))
+END
+BEGIN set_app_dispatch NOFUNC
+ARG ID DB_ENV * dbenv
+FUNCPROT int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)
+FUNCARG int (*func0) __P((DB_ENV *, DBT *, DB_LSN *, db_recops))
+END
+BEGIN env_get_cachesize CODE
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t gbytes
+ARET INT u_int32_t bytes
+ARET INT int ncache
+END
+BEGIN env_cachesize CODE
ARG ID DB_ENV * dbenv
ARG INT u_int32_t gbytes
ARG INT u_int32_t bytes
ARG INT int ncache
END
-BEGIN env_close 1 RETCODE
+BEGIN env_close CODE
ARG ID DB_ENV * dbenv
ARG INT u_int32_t flags
END
-BEGIN env_create 1 NOCLNTCODE
+BEGIN env_create RETCODE
+ARG IGNORE DB_ENV * dbenv
ARG INT long timeout
RET ID long env
END
-BEGIN set_data_dir 1 NOFUNC
+BEGIN get_data_dirs NOFUNC
+ARG ID DB_ENV * dbenv
+ARG STRING const char *** dirpp
+END
+BEGIN set_data_dir NOFUNC
ARG ID DB_ENV * dbenv
ARG STRING const char * dir
END
-BEGIN env_set_feedback 1 NOFUNC
+BEGIN env_dbremove CODE
+ARG ID DB_ENV * dbenv
+ARG ID DB_TXN * txnp
+ARG STRING const char * name
+ARG STRING const char * subdb
+ARG INT u_int32_t flags
+END
+BEGIN env_dbrename CODE
+ARG ID DB_ENV * dbenv
+ARG ID DB_TXN * txnp
+ARG STRING const char * name
+ARG STRING const char * subdb
+ARG STRING const char * newname
+ARG INT u_int32_t flags
+END
+BEGIN env_get_encrypt_flags CODE
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t flags
+END
+BEGIN env_encrypt CODE
+ARG ID DB_ENV * dbenv
+ARG STRING const char * passwd
+ARG INT u_int32_t flags
+END
+BEGIN env_set_feedback NOFUNC
ARG ID DB_ENV * dbenv
FUNCPROT void (*)(DB_ENV *, int, int)
FUNCARG void (*func0) __P((DB_ENV *, int, int))
END
-BEGIN env_flags 1 CODE
+BEGIN env_get_flags CODE
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t flags
+END
+BEGIN env_flags CODE
ARG ID DB_ENV * dbenv
ARG INT u_int32_t flags
ARG INT int onoff
END
-BEGIN set_lg_bsize 1 NOFUNC
+BEGIN get_lg_bsize NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t bsize
+END
+BEGIN set_lg_bsize NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t bsize
END
-BEGIN set_lg_dir 1 NOFUNC
+BEGIN get_lg_dir NOFUNC
+ARG ID DB_ENV * dbenv
+ARET STRING const char * dir
+END
+BEGIN set_lg_dir NOFUNC
ARG ID DB_ENV * dbenv
ARG STRING const char * dir
END
-BEGIN set_lg_max 1 NOFUNC
+BEGIN get_lg_max NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t max
+END
+BEGIN set_lg_max NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_lk_conflict 1 NOFUNC
+BEGIN get_lg_regionmax NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t max
+END
+BEGIN set_lg_regionmax NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t max
+END
+BEGIN get_lk_conflicts NOFUNC
+ARG ID DB_ENV * dbenv
+ARG IGNORE const u_int8_t ** conflicts
+ARG IGNORE int * modes
+END
+BEGIN set_lk_conflict NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int8_t * conflicts
ARG INT int modes
END
-BEGIN set_lk_detect 1 NOFUNC
+BEGIN get_lk_detect NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t detect
+END
+BEGIN set_lk_detect NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t detect
END
-BEGIN set_lk_max 1 NOFUNC
+BEGIN set_lk_max NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_lk_max_locks 1 NOFUNC
+BEGIN get_lk_max_locks NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t max
+END
+BEGIN set_lk_max_locks NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_lk_max_lockers 1 NOFUNC
+BEGIN get_lk_max_lockers NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t max
+END
+BEGIN set_lk_max_lockers NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_lk_max_objects 1 NOFUNC
+BEGIN get_lk_max_objects NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t max
+END
+BEGIN set_lk_max_objects NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_mp_mmapsize 1 NOFUNC
+BEGIN get_mp_maxwrite NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT int nwrite
+ARET INT int nsleep
+END
+BEGIN set_mp_maxwrite NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT int nwrite
+ARG INT int nsleep
+END
+BEGIN get_mp_mmapsize NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT size_t mmapsize
+END
+BEGIN set_mp_mmapsize NOFUNC
ARG ID DB_ENV * dbenv
ARG INT size_t mmapsize
END
-BEGIN set_mutex_locks 1 NOFUNC
+BEGIN env_get_home CODE
ARG ID DB_ENV * dbenv
-ARG INT int do_lock
+ARET STRING const char * home
END
-BEGIN env_open 1 RETCODE
+BEGIN env_get_open_flags CODE
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t flags
+END
+BEGIN env_open RETCODE
ARG ID DB_ENV * dbenv
ARG STRING const char * home
ARG INT u_int32_t flags
ARG INT int mode
+RET ID long env
END
-BEGIN env_paniccall 1 NOFUNC
+BEGIN env_paniccall NOFUNC
ARG ID DB_ENV * dbenv
FUNCPROT void (*)(DB_ENV *, int)
FUNCARG void (*func0) __P((DB_ENV *, int))
END
-BEGIN set_recovery_init 1 NOFUNC
-ARG ID DB_ENV * dbenv
-FUNCPROT int (*)(DB_ENV *)
-FUNCARG int (*func0) __P((DB_ENV *))
-END
-BEGIN env_remove 1 RETCODE
+BEGIN env_remove RETCODE
ARG ID DB_ENV * dbenv
ARG STRING const char * home
ARG INT u_int32_t flags
END
-BEGIN set_shm_key 1 NOFUNC
+BEGIN get_shm_key NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT long shm_key
+END
+BEGIN set_shm_key NOFUNC
ARG ID DB_ENV * dbenv
ARG INT long shm_key
END
-BEGIN set_tmp_dir 1 NOFUNC
+BEGIN get_tas_spins NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t tas_spins
+END
+BEGIN set_tas_spins NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t tas_spins
+END
+BEGIN get_timeout NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t timeout
+ARG INT u_int32_t flags
+END
+BEGIN set_timeout NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t timeout
+ARG INT u_int32_t flags
+END
+BEGIN get_tmp_dir NOFUNC
+ARG ID DB_ENV * dbenv
+ARET STRING const char * dir
+END
+BEGIN set_tmp_dir NOFUNC
ARG ID DB_ENV * dbenv
ARG STRING const char * dir
END
-BEGIN set_tx_recover 1 NOFUNC
+BEGIN get_tx_max NOFUNC
ARG ID DB_ENV * dbenv
-FUNCPROT int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)
-FUNCARG int (*func0) __P((DB_ENV *, DBT *, DB_LSN *, db_recops))
+ARET INT u_int32_t max
END
-BEGIN set_tx_max 1 NOFUNC
+BEGIN set_tx_max NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t max
END
-BEGIN set_tx_timestamp 1 NOFUNC
+BEGIN get_tx_timestamp NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT time_t max
+END
+BEGIN set_tx_timestamp NOFUNC
ARG ID DB_ENV * dbenv
ARG INT time_t * max
END
-BEGIN set_verbose 1 NOFUNC
+BEGIN get_verbose NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t which
+ARET INT int onoff
+END
+BEGIN set_verbose NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t which
ARG INT int onoff
@@ -173,100 +317,221 @@ END
#
# Transaction functions
#
-BEGIN txn_abort 1 RETCODE
+BEGIN txn_abort RETCODE
ARG ID DB_TXN * txnp
END
-BEGIN txn_begin 1 RETCODE
-ARG ID DB_ENV * envp
+BEGIN txn_begin RETCODE
+ARG ID DB_ENV * dbenv
ARG ID DB_TXN * parent
ARG IGNORE DB_TXN ** txnpp
ARG INT u_int32_t flags
RET ID long txnid
END
-BEGIN txn_checkpoint 1 NOFUNC
+BEGIN txn_checkpoint NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t kbyte
ARG INT u_int32_t min
+ARG INT u_int32_t flags
+END
+BEGIN txn_commit RETCODE
+ARG ID DB_TXN * txnp
+ARG INT u_int32_t flags
END
-BEGIN txn_commit 1 RETCODE
+BEGIN txn_discard RETCODE
ARG ID DB_TXN * txnp
ARG INT u_int32_t flags
END
-BEGIN txn_prepare 1 NOFUNC
+BEGIN txn_prepare CODE
ARG ID DB_TXN * txnp
+ARG GID u_int8_t * gid
+END
+BEGIN txn_recover RETCODE
+ARG ID DB_ENV * dbenv
+ARG IGNORE DB_PREPLIST * preplist
+ARG INT long count
+ARG IGNORE long * retp
+ARG INT u_int32_t flags
+RET LIST DB_TXN * txn ID
+RET LIST u_int8_t * gid GID
+RET INT long retcount
END
-BEGIN txn_stat 1 NOFUNC
+BEGIN txn_stat NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_TXN_STAT ** statp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
+ARG INT u_int32_t flags
+END
+BEGIN txn_timeout NOFUNC
+ARG ID DB_TXN * txnp
+ARG INT u_int32_t timeout
+ARG INT u_int32_t flags
+END
+#
+# Replication functions
+#
+BEGIN rep_elect NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT int nsites
+ARG INT int pri
+ARG INT u_int32_t timeout
+ARG IGNORE int * idp
+END
+BEGIN rep_flush NOFUNC
+ARG ID DB_ENV * dbenv
+END
+BEGIN rep_process_message NOFUNC
+ARG ID DB_ENV * dbenv
+ARG DBT DBT * rec
+ARG DBT DBT * control
+ARG IGNORE int * idp
+ARG IGNORE DB_LSN * ret_lsnp
+END
+BEGIN rep_get_limit NOFUNC
+ARG ID DB_ENV * dbenv
+ARET INT u_int32_t mbytes
+ARET INT u_int32_t bytes
+END
+BEGIN rep_set_limit NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t mbytes
+ARG INT u_int32_t bytes
+END
+BEGIN rep_set_request NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t min
+ARG INT u_int32_t max
+END
+BEGIN rep_set_rep_transport NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT int id
+FUNCPROT int (*)(DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t)
+FUNCARG int (*func0) __P((DB_ENV *, const DBT *, const DBT *, const DB_LSN *, int, u_int32_t))
+END
+BEGIN rep_start NOFUNC
+ARG ID DB_ENV * dbenv
+ARG DBT DBT * cdata
+ARG INT u_int32_t flags
+END
+BEGIN rep_stat NOFUNC
+ARG ID DB_ENV * dbenv
+ARG IGNORE DB_REP_STAT ** statp
+ARG INT u_int32_t flags
END
#
# Database functions
#
-BEGIN db_bt_compare 1 NOFUNC
+BEGIN db_alloc NOFUNC
+ARG ID DB * dbp
+FUNCPROT void *(*)(size_t)
+FUNCARG void *(*func0) __P((size_t))
+FUNCPROT void *(*)(void *, size_t)
+FUNCARG void *(*func1) __P((void *, size_t))
+FUNCPROT void (*)(void *)
+FUNCARG void (*func2) __P((void *))
+END
+BEGIN db_associate CODE
+ARG ID DB * dbp
+ARG ID DB_TXN * txnp
+ARG ID DB * sdbp
+FUNCPROT int (*)(DB *, const DBT *, const DBT *, DBT *)
+FUNCARG int (*func0) __P((DB *, const DBT *, const DBT *, DBT *))
+ARG INT u_int32_t flags
+END
+BEGIN db_bt_compare NOFUNC
ARG ID DB * dbp
FUNCPROT int (*)(DB *, const DBT *, const DBT *)
FUNCARG int (*func0) __P((DB *, const DBT *, const DBT *))
END
-BEGIN db_bt_maxkey 1 CODE
+BEGIN db_bt_maxkey CODE
ARG ID DB * dbp
ARG INT u_int32_t maxkey
END
-BEGIN db_bt_minkey 1 CODE
+BEGIN db_get_bt_minkey CODE
+ARG ID DB * dbp
+ARET INT u_int32_t minkey
+END
+BEGIN db_bt_minkey CODE
ARG ID DB * dbp
ARG INT u_int32_t minkey
END
-BEGIN db_bt_prefix 1 NOFUNC
+BEGIN db_bt_prefix NOFUNC
ARG ID DB * dbp
FUNCPROT size_t(*)(DB *, const DBT *, const DBT *)
FUNCARG size_t (*func0) __P((DB *, const DBT *, const DBT *))
END
-BEGIN db_set_append_recno 1 NOFUNC
+BEGIN db_set_append_recno NOFUNC
ARG ID DB * dbp
FUNCPROT int (*)(DB *, DBT *, db_recno_t)
FUNCARG int (*func0) __P((DB *, DBT *, db_recno_t))
END
-BEGIN db_cachesize 1 NOFUNC
+BEGIN db_get_cachesize NOFUNC
+ARG ID DB * dbp
+ARET INT u_int32_t gbytes
+ARET INT u_int32_t bytes
+ARET INT int ncache
+END
+BEGIN db_cachesize NOFUNC
ARG ID DB * dbp
ARG INT u_int32_t gbytes
ARG INT u_int32_t bytes
ARG INT int ncache
END
-BEGIN db_close 1 RETCODE
+BEGIN db_close RETCODE
ARG ID DB * dbp
ARG INT u_int32_t flags
END
-BEGIN db_create 1 NOCLNTCODE
+BEGIN db_create RETCODE
+ARG IGNORE DB * dbp
+ARG ID DB_ENV * dbenv
ARG INT u_int32_t flags
-ARG ID DB_ENV * envp
-RET ID long dbp
+RET ID long db
END
-BEGIN db_del 1 CODE
+BEGIN db_del CODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
ARG INT u_int32_t flags
END
-BEGIN db_extentsize 1 CODE
+BEGIN db_dup_compare NOFUNC
+ARG ID DB * dbp
+FUNCPROT int (*)(DB *, const DBT *, const DBT *)
+FUNCARG int (*func0) __P((DB *, const DBT *, const DBT *))
+END
+BEGIN db_get_encrypt_flags CODE
+ARG ID DB * dbp
+ARET INT u_int32_t flags
+END
+BEGIN db_encrypt CODE
+ARG ID DB * dbp
+ARG STRING const char * passwd
+ARG INT u_int32_t flags
+END
+BEGIN db_get_extentsize CODE
+ARG ID DB * dbp
+ARET INT u_int32_t extentsize
+END
+BEGIN db_extentsize CODE
ARG ID DB * dbp
ARG INT u_int32_t extentsize
END
-BEGIN db_fd 1 NOFUNC
+BEGIN db_fd NOFUNC
ARG ID DB * dbp
ARG IGNORE int * fdp
END
-BEGIN db_feedback 1 NOFUNC
+BEGIN db_feedback NOFUNC
ARG ID DB * dbp
FUNCPROT void (*)(DB *, int, int)
FUNCARG void (*func0) __P((DB *, int, int))
END
-BEGIN db_flags 1 CODE
+BEGIN db_get_flags CODE
+ARG ID DB * dbp
+ARET INT u_int32_t flags
+END
+BEGIN db_flags CODE
ARG ID DB * dbp
ARG INT u_int32_t flags
END
-BEGIN db_get 1 RETCODE
+BEGIN db_get RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
@@ -275,20 +540,37 @@ ARG INT u_int32_t flags
RET DBT DBT * key
RET DBT DBT * data
END
-BEGIN db_h_ffactor 1 CODE
+BEGIN db_get_name CODE
+ARG ID DB * dbp
+ARET STRING const char * filename
+ARET STRING const char * dbname
+END
+BEGIN db_get_open_flags CODE
+ARG ID DB * dbp
+ARET INT u_int32_t flags
+END
+BEGIN db_get_h_ffactor CODE
+ARG ID DB * dbp
+ARET INT u_int32_t ffactor
+END
+BEGIN db_h_ffactor CODE
ARG ID DB * dbp
ARG INT u_int32_t ffactor
END
-BEGIN db_h_hash 1 NOFUNC
+BEGIN db_h_hash NOFUNC
ARG ID DB * dbp
FUNCPROT u_int32_t(*)(DB *, const void *, u_int32_t)
FUNCARG u_int32_t (*func0) __P((DB *, const void *, u_int32_t))
END
-BEGIN db_h_nelem 1 CODE
+BEGIN db_get_h_nelem CODE
+ARG ID DB * dbp
+ARET INT u_int32_t nelem
+END
+BEGIN db_h_nelem CODE
ARG ID DB * dbp
ARG INT u_int32_t nelem
END
-BEGIN db_key_range 1 RETCODE
+BEGIN db_key_range RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
@@ -298,14 +580,13 @@ RET DBL double less
RET DBL double equal
RET DBL double greater
END
-BEGIN db_lorder 1 CODE
+BEGIN db_get_lorder CODE
ARG ID DB * dbp
-ARG INT int lorder
+ARET INT int lorder
END
-BEGIN db_malloc 1 NOFUNC
+BEGIN db_lorder CODE
ARG ID DB * dbp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
+ARG INT int lorder
END
# XXX
# The line:
@@ -313,26 +594,44 @@ END
# should go away when a get_flags method exists. It is
# needed now because Tcl looks at dbp->flags.
#
-BEGIN db_open 1 RETCODE
+BEGIN db_open RETCODE
ARG ID DB * dbp
+ARG ID DB_TXN * txnp
ARG STRING const char * name
ARG STRING const char * subdb
ARG INT DBTYPE type
ARG INT u_int32_t flags
ARG INT int mode
+RET ID long db
RET INT DBTYPE type
RET INT u_int32_t dbflags
+RET INT int lorder
+END
+BEGIN db_get_pagesize CODE
+ARG ID DB * dbp
+ARET INT u_int32_t pagesize
END
-BEGIN db_pagesize 1 CODE
+BEGIN db_pagesize CODE
ARG ID DB * dbp
ARG INT u_int32_t pagesize
END
-BEGIN db_panic 1 NOFUNC
+BEGIN db_panic NOFUNC
ARG ID DB * dbp
FUNCPROT void (*)(DB_ENV *, int)
FUNCARG void (*func0) __P((DB_ENV *, int))
END
-BEGIN db_put 1 RETCODE
+BEGIN db_pget RETCODE
+ARG ID DB * dbp
+ARG ID DB_TXN * txnp
+ARG DBT DBT * skey
+ARG DBT DBT * pkey
+ARG DBT DBT * data
+ARG INT u_int32_t flags
+RET DBT DBT * skey
+RET DBT DBT * pkey
+RET DBT DBT * data
+END
+BEGIN db_put RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG DBT DBT * key
@@ -340,97 +639,117 @@ ARG DBT DBT * data
ARG INT u_int32_t flags
RET DBT DBT * key
END
-BEGIN db_realloc 1 NOFUNC
+BEGIN db_get_re_delim CODE
ARG ID DB * dbp
-FUNCPROT void *(*)(void *, size_t)
-FUNCARG void *(*func0) __P((void *, size_t))
+ARET INT int delim
END
-BEGIN db_re_delim 1 CODE
+BEGIN db_re_delim CODE
ARG ID DB * dbp
ARG INT int delim
END
-BEGIN db_re_len 1 CODE
+BEGIN db_get_re_len CODE
+ARG ID DB * dbp
+ARET INT u_int32_t len
+END
+BEGIN db_re_len CODE
ARG ID DB * dbp
ARG INT u_int32_t len
END
-BEGIN db_re_pad 1 CODE
+BEGIN db_re_pad CODE
ARG ID DB * dbp
ARG INT int pad
END
-BEGIN db_re_source 1 NOFUNC
+BEGIN db_get_re_pad CODE
+ARG ID DB * dbp
+ARET INT int pad
+END
+BEGIN db_get_re_source NOFUNC
+ARG ID DB * dbp
+ARET STRING const char * re_source
+END
+BEGIN db_re_source NOFUNC
ARG ID DB * dbp
ARG STRING const char * re_source
END
-BEGIN db_remove 1 RETCODE
+BEGIN db_remove RETCODE
ARG ID DB * dbp
ARG STRING const char * name
ARG STRING const char * subdb
ARG INT u_int32_t flags
END
-BEGIN db_rename 1 RETCODE
+BEGIN db_rename RETCODE
ARG ID DB * dbp
ARG STRING const char * name
ARG STRING const char * subdb
ARG STRING const char * newname
ARG INT u_int32_t flags
END
-BEGIN db_stat 1 RETCODE
+BEGIN db_stat RETCODE
ARG ID DB * dbp
ARG IGNORE void * sp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
ARG INT u_int32_t flags
RET LIST u_int32_t * stats INT
END
-BEGIN db_swapped 1 CODE
+BEGIN db_sync CODE
+ARG ID DB * dbp
+ARG INT u_int32_t flags
+END
+BEGIN db_truncate RETCODE
ARG ID DB * dbp
+ARG ID DB_TXN * txnp
+ARG IGNORE u_int32_t * countp
+ARG INT u_int32_t flags
+RET INT u_int32_t count
END
-BEGIN db_sync 1 CODE
+BEGIN db_upgrade NOFUNC
ARG ID DB * dbp
+ARG STRING const char * fname
ARG INT u_int32_t flags
END
-BEGIN db_upgrade 1 NOFUNC
+BEGIN db_verify NOFUNC
ARG ID DB * dbp
ARG STRING const char * fname
+ARG STRING const char * subdb
+ARG IGNORE FILE * outfile
ARG INT u_int32_t flags
END
#
# Cursor functions
#
-BEGIN db_cursor 1 RETCODE
+BEGIN db_cursor RETCODE
ARG ID DB * dbp
ARG ID DB_TXN * txnp
ARG IGNORE DBC ** dbcpp
ARG INT u_int32_t flags
RET ID long dbcid
END
-BEGIN db_join 1 RETCODE
+BEGIN db_join RETCODE
ARG ID DB * dbp
ARG LIST DBC ** curs ID
ARG IGNORE DBC ** dbcp
ARG INT u_int32_t flags
RET ID long dbcid
END
-BEGIN dbc_close 1 RETCODE
+BEGIN dbc_close RETCODE
ARG ID DBC * dbc
END
-BEGIN dbc_count 1 RETCODE
+BEGIN dbc_count RETCODE
ARG ID DBC * dbc
ARG IGNORE db_recno_t * countp
ARG INT u_int32_t flags
RET INT db_recno_t dupcount
END
-BEGIN dbc_del 1 CODE
+BEGIN dbc_del CODE
ARG ID DBC * dbc
ARG INT u_int32_t flags
END
-BEGIN dbc_dup 1 RETCODE
+BEGIN dbc_dup RETCODE
ARG ID DBC * dbc
ARG IGNORE DBC ** dbcp
ARG INT u_int32_t flags
RET ID long dbcid
END
-BEGIN dbc_get 1 RETCODE
+BEGIN dbc_get RETCODE
ARG ID DBC * dbc
ARG DBT DBT * key
ARG DBT DBT * data
@@ -438,7 +757,17 @@ ARG INT u_int32_t flags
RET DBT DBT * key
RET DBT DBT * data
END
-BEGIN dbc_put 1 RETCODE
+BEGIN dbc_pget RETCODE
+ARG ID DBC * dbc
+ARG DBT DBT * skey
+ARG DBT DBT * pkey
+ARG DBT DBT * data
+ARG INT u_int32_t flags
+RET DBT DBT * skey
+RET DBT DBT * pkey
+RET DBT DBT * data
+END
+BEGIN dbc_put RETCODE
ARG ID DBC * dbc
ARG DBT DBT * key
ARG DBT DBT * data
@@ -452,13 +781,13 @@ END
#
# Locking subsystem
#
-BEGIN lock_detect 1 NOFUNC
+BEGIN lock_detect NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t flags
ARG INT u_int32_t atype
ARG IGNORE int * aborted
END
-BEGIN lock_get 1 NOFUNC
+BEGIN lock_get NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t locker
ARG INT u_int32_t flags
@@ -466,21 +795,24 @@ ARG CONST const DBT * obj
ARG INT db_lockmode_t mode
ARG IGNORE DB_LOCK * lock
END
-BEGIN lock_id 1 NOFUNC
+BEGIN lock_id NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t * idp
END
-BEGIN lock_put 1 NOFUNC
+BEGIN lock_id_free NOFUNC
+ARG ID DB_ENV * dbenv
+ARG INT u_int32_t id
+END
+BEGIN lock_put NOFUNC
ARG ID DB_ENV * dbenv
ARG ID DB_LOCK * lock
END
-BEGIN lock_stat 1 NOFUNC
+BEGIN lock_stat NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_LOCK_STAT ** statp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
+ARG INT u_int32_t flags
END
-BEGIN lock_vec 1 NOFUNC
+BEGIN lock_vec NOFUNC
ARG ID DB_ENV * dbenv
ARG INT u_int32_t locker
ARG INT u_int32_t flags
@@ -491,89 +823,46 @@ END
#
# Logging subsystem
#
-BEGIN log_archive 1 NOFUNC
+BEGIN log_archive NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE char *** listp
ARG INT u_int32_t flags
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
+END
+BEGIN log_cursor NOFUNC
+ARG ID DB_ENV * dbenv
+ARG IGNORE DB_LOGC ** logcp
+ARG INT u_int32_t flags
END
#
# Don't do log_compare. It doesn't have an env we can get at,
# and it doesn't manipulate DB internal information.
#
-BEGIN log_file 1 NOFUNC
+BEGIN log_file NOFUNC
ARG ID DB_ENV * dbenv
ARG CONST const DB_LSN * lsn
ARG STRING char * namep
ARG INT size_t len
END
-BEGIN log_flush 1 NOFUNC
+BEGIN log_flush NOFUNC
ARG ID DB_ENV * dbenv
ARG CONST const DB_LSN * lsn
END
-BEGIN log_get 1 NOFUNC
+BEGIN log_put NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_LSN * lsn
-ARG DBT DBT * data
-ARG INT u_int32_t flags
-END
-BEGIN log_put 1 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG IGNORE DB_LSN * lsn
-ARG CONST const DBT * data
+ARG DBT const DBT * data
ARG INT u_int32_t flags
END
-BEGIN log_register 1 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG ID DB * dbp
-ARG CONST const char * namep
-END
-BEGIN log_stat 1 NOFUNC
+BEGIN log_stat NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_LOG_STAT ** statp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
-END
-BEGIN log_unregister 1 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG ID DB * dbp
+ARG INT u_int32_t flags
END
+
#
-# Mpool Subsystem
+# DB_MPOOL methods.
#
-BEGIN memp_fclose 1 NOFUNC
-ARG ID DB_MPOOLFILE * mpf
-END
-BEGIN memp_fget 1 NOFUNC
-ARG ID DB_MPOOLFILE * mpf
-ARG IGNORE db_pgno_t * pgno
-ARG INT u_int32_t flags
-ARG IGNORE void ** pagep
-END
-BEGIN memp_fopen 1 NOFUNC
-ARG ID DB_ENV * dbenv
-ARG CONST const char * file
-ARG INT u_int32_t flags
-ARG INT int mode
-ARG INT size_t pagesize
-ARG IGNORE DB_MPOOL_FINFO * finfop
-ARG IGNORE DB_MPOOLFILE ** mpf
-END
-BEGIN memp_fput 1 NOFUNC
-ARG ID DB_MPOOLFILE * mpf
-ARG IGNORE void * pgaddr
-ARG INT u_int32_t flags
-END
-BEGIN memp_fset 1 NOFUNC
-ARG ID DB_MPOOLFILE * mpf
-ARG IGNORE void * pgaddr
-ARG INT u_int32_t flags
-END
-BEGIN memp_fsync 1 NOFUNC
-ARG ID DB_MPOOLFILE * mpf
-END
-BEGIN memp_register 1 NOFUNC
+BEGIN memp_register NOFUNC
ARG ID DB_ENV * dbenv
ARG INT int ftype
FUNCPROT int (*)(DB_ENV *, db_pgno_t, void *, DBT *)
@@ -581,19 +870,115 @@ FUNCARG int (*func0) __P((DB_ENV *, db_pgno_t, void *, DBT *))
FUNCPROT int (*)(DB_ENV *, db_pgno_t, void *, DBT *)
FUNCARG int (*func1) __P((DB_ENV *, db_pgno_t, void *, DBT *))
END
-BEGIN memp_stat 1 NOFUNC
+BEGIN memp_stat NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_MPOOL_STAT ** gstatp
ARG IGNORE DB_MPOOL_FSTAT *** fstatp
-FUNCPROT void *(*)(size_t)
-FUNCARG void *(*func0) __P((size_t))
+ARG INT u_int32_t flags
END
-BEGIN memp_sync 1 NOFUNC
+BEGIN memp_sync NOFUNC
ARG ID DB_ENV * dbenv
ARG IGNORE DB_LSN * lsn
END
-BEGIN memp_trickle 1 NOFUNC
+BEGIN memp_trickle NOFUNC
ARG ID DB_ENV * dbenv
ARG INT int pct
ARG IGNORE int * nwrotep
END
+
+#
+# DB_MPOOLFILE methods.
+#
+BEGIN memp_fget NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t * pgnoaddr
+ARG IGNORE u_int32_t flags
+ARG IGNORE void * addrp
+END
+BEGIN memp_fopen NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE const char * path
+ARG IGNORE u_int32_t flags
+ARG IGNORE int mode
+ARG IGNORE size_t pagesize
+END
+BEGIN memp_fput NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE void * pgaddr
+ARG IGNORE u_int32_t flags
+END
+BEGIN memp_fset NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE void * pgaddr
+ARG IGNORE u_int32_t flags
+END
+BEGIN memp_get_clear_len NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t * clear_lenp
+END
+BEGIN memp_set_clear_len NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t clear_len
+END
+BEGIN memp_get_fileid NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int8_t * fileid
+END
+BEGIN memp_set_fileid NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int8_t * fileid
+END
+BEGIN memp_get_flags NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t * flagsp
+END
+BEGIN memp_set_flags NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t flags
+ARG IGNORE int onoff
+END
+BEGIN memp_get_ftype NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE int * ftype
+END
+BEGIN memp_set_ftype NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE int ftype
+END
+BEGIN memp_get_lsn_offset NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE int32_t * lsn_offsetp
+END
+BEGIN memp_set_lsn_offset NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE int32_t lsn_offset
+END
+BEGIN memp_get_maxsize NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t * gbytesp
+ARG IGNORE u_int32_t * bytesp
+END
+BEGIN memp_set_maxsize NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE u_int32_t gbytes
+ARG IGNORE u_int32_t bytes
+END
+BEGIN memp_get_pgcookie NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE DBT * pgcookie
+END
+BEGIN memp_set_pgcookie NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE DBT * pgcookie
+END
+BEGIN memp_get_priority NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE DB_CACHE_PRIORITY * priorityp
+END
+BEGIN memp_set_priority NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+ARG IGNORE DB_CACHE_PRIORITY priority
+END
+BEGIN memp_fsync NOFUNC
+ARG ID DB_MPOOLFILE * dbmfp
+END
diff --git a/db/tcl/docs/db.html b/db/tcl/docs/db.html
index c75ab6ecf..8ef5e032a 100644
--- a/db/tcl/docs/db.html
+++ b/db/tcl/docs/db.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
@@ -8,184 +9,154 @@
<H2>
<A NAME="Database Commands"></A>Database Commands</H2>
-The database commands provide a conduit into the DB method functions.&nbsp;
-They are all fairly straightforward and I describe them in terms of their
-DB functions briefly here, with a link to the DB page where appropriate.&nbsp;
-The first set of commands are those I believe will be the primary functions
-used by most databases.&nbsp; Some are directly related to their DB counterparts,
-and some are higher level functions that are useful to provide the user.
-<P><B>> berkdb open [-env <I>env</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-btree|-hash|-recno|-queue|-unknown]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-create] [-excl] [-nommap] [-rdonly] [-truncate]
-[-mode
-<I>mode</I>] [-errfile <I>filename</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-dup] [-dupsort] [-recnum] [-renumber] [-revsplitoff]
-[-snapshot]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-extent <I>size</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-ffactor <I>density</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-nelem <I>size</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lorder <I>order</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-delim <I>delim</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-len <I>len</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-pad <I>pad</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-source <I>file</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-minkey <I>minkey</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-cachesize {<I>gbytes bytes ncaches</I>}]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-pagesize <I>pagesize</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [--]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [<I>filename </I>[<I>subdbname</I>]]</B>
-<P>This command will invoke the <A HREF="../../docs/api_c/db_create.html">db_create</A>
-function.&nbsp; If the command is given the <B>-env</B> option, then we
-will accordingly creating the database within the context of that environment.&nbsp;
-After it successfully gets a handle to a database, we bind it to a new
-Tcl command of the form <B><I>dbX, </I></B>where X is an integer starting
-at 0 (e.g. <B>db0, db1, </B>etc).&nbsp; We use the <I>Tcl_CreateObjCommand()&nbsp;</I>
-to create the top level database function.&nbsp; It is through this handle
-that the user can access all of the commands described in the <A HREF="#Database Commands">Database
-Commands</A> section.&nbsp; Internally, the database handle is sent as
-the <I>ClientData</I> portion of the new command set so that all future
-database calls access the appropriate handle.
-<P>After parsing all of the optional arguments affecting the setup of the
-database and making the appropriate calls to DB to manipulate those values,
-we open the database for the user. It&nbsp; translates to the
-<A HREF="../../docs/api_c/db_open.html">DB->open</A>
-method call after parsing all of the various optional arguments.&nbsp;
-We automatically set the DB_THREAD flag.&nbsp; The arguments are:
-<UL>
-<LI>
-<B>-- </B>- Terminate the list of options and use remaining arguments as
-the file or subdb names (thus allowing the use of filenames beginning with
-a dash '-')</LI>
-
-<LI>
-<B>-btree</B> - DB_BTREE database</LI>
-
-<LI>
-<B>-hash</B> -&nbsp; DB_HASH database</LI>
-
-<LI>
-<B>-recno&nbsp;</B> - DB_RECNO database</LI>
-
-<LI>
-<B>-queue</B> - DB_QUEUE database</LI>
-
-<LI>
-<B>-create</B> selects the DB_CREATE flag&nbsp; to create underlying files</LI>
-
-<LI>
-<B>-excl</B> selects the DB_EXCL flag&nbsp; to exclusively create underlying
-files</LI>
-
-<LI>
-<B>-nommap</B> selects the DB_NOMMAP flag to forbid mmaping of files</LI>
-
-<LI>
-<B>-rdonly</B> selects the DB_RDONLY flag for opening in read-only mode</LI>
-
-<LI>
-<B>-truncate</B> selects the DB_TRUNCATE flag to truncate the database</LI>
-
-<LI>
-<B>-mode<I> mode</I></B> specifies the mode for created files</LI>
-
-<LI>
-<B>-errfile </B>specifies the error file to use for this environment to
-<B><I>filename</I></B>
-by calling <A HREF="../../docs/api_c/db_set_errfile.html">DB->set_errfile</A><B><I>.
-</I></B>If
-the file already exists then we will append to the end of the file</LI>
-
-<LI>
-<B>-dup </B>selects the DB_DUP flag to permit duplicates in the database</LI>
-
-<LI>
-<B>-dupsort</B> selects the DB_DUPSORT flag to support sorted duplicates</LI>
-
-<LI>
-<B>-recnum</B> selects the DB_RECNUM flag to support record numbers in
-btrees</LI>
-
-<LI>
-<B>-renumber </B>selects the DB_RENUMBER flag to support mutable record
-numbers</LI>
+The database commands provide a fairly straightforward mapping to the
+DB method functions.
-<LI>
-<B>-revsplitoff </B>selects the DB_REVSPLITOFF flag to suppress reverse
-splitting of pages on deletion</LI>
-
-<LI>
-<B>-snapshot </B>selects the DB_SNAPSHOT flag to support database snapshots</LI>
-
-<LI>
-<B>-extent </B>sets the size of a Queue database extent to the given <B><I>size
-</I></B>using
-the <A HREF="../../docs/api_c/db_set_q_extentsize.html">DB->set_q_extentsize</A>
-method</LI>
-
-<LI>
-<B>-ffactor</B> sets the hash table key density to the given <B><I>density
-</I></B>using
-the <A HREF="../../docs/api_c/db_set_h_ffactor.html">DB->set_h_ffactor</A>
-method</LI>
-
-<LI>
-<B>-nelem </B>sets the hash table size estimate to the given <B><I>size
-</I></B>using
-the <A HREF="../../docs/api_c/db_set_h_nelem.html">DB->set_h_nelem</A>
-method</LI>
-
-<LI>
-<B>-lorder </B>sets the byte order for integers stored in the database
-meta-data to the given <B><I>order</I></B> using the <A HREF="../../docs/api_c/db_set_lorder.html">DB->set_lorder</A>
-method</LI>
-
-<LI>
-<B>-delim </B>sets the delimiting byte for variable length records to
-<B><I>delim</I></B>
-using the <A HREF="../../docs/api_c/db_set_re_delim.html">DB->set_re_delim</A>
-method</LI>
-
-<LI>
-<B>-len </B>sets the length of fixed-length records to <B><I>len</I></B>
-using the <A HREF="../../docs/api_c/db_set_re_len.html">DB->set_re_len</A>
-method</LI>
-
-<LI>
-<B>-pad </B>sets the pad character used for fixed length records to
-<B><I>pad</I></B>&nbsp;
-using the <A HREF="../../docs/db_set_re_pad.html">DB->set_re_pad</A> method</LI>
-
-<LI>
-<B>-source </B>sets the backing source file name to <B><I>file</I></B>
-using the <A HREF="../../docs/api_c/db_set_re_source.html">DB->set_re_source</A>
-method</LI>
-
-<LI>
-<B>-minkey </B>sets the minimum number of keys per Btree page to <B><I>minkey</I></B>
-using the <A HREF="../../docs/api_c/db_set_bt_minkey.html">DB->set_bt_minkey</A>
-method</LI>
-
-<LI>
-<B>-cachesize </B>sets the size of the database cache to the size&nbsp;
-specified by <B><I>gbytes </I></B>and <B><I>bytes, </I></B>broken up into
-<B><I>ncaches</I></B>
-number of caches using the <A HREF="../../docs/api_c/db_set_cachesize.html">DB->set_cachesize</A>
-method</LI>
-
-<LI>
-<B>-pagesize </B>sets the size of the database page to <B><I>pagesize </I></B>using
-the <A HREF="../../docs/api_c/db_set_pagesize.html">DB->set_pagesize</A>
-method</LI>
-
-<LI>
-<B><I>filename</I></B> indicates the name of the database</LI>
-
-<LI>
-<B><I>subdbname</I></B> indicate the name of the sub-database</LI>
-</UL>
+<P>
+<B>> berkdb open</B>
+<dl>
+
+<dt><B>[-btcompare <I>proc</I>]</B><dd>
+Sets the Btree comparison function to the Tcl procedure named
+<I>proc</I> using the
+<A HREF="../../docs/api_c/db_set_bt_compare.html">DB->set_bt_compare</A>
+method.
+
+<dt><B>[-btree|-hash|-recno|-queue|-unknown]</B><dd>
+</td><td>
+Select the database type:<br>
+DB_BTREE, DB_HASH, DB_RECNO, DB_QUEUE or DB_UNKNOWN.
+
+
+<dt><B>[-cachesize {<I>gbytes bytes ncaches</I>}]</B><dd>
+Sets the size of the database cache to the size specified by
+<I>gbytes</I> and <I>bytes</I>, broken up into <I>ncaches</I> number of
+caches using the
+<A HREF="../../docs/api_c/db_set_cachesize.html">DB->set_cachesize</A>
+method.
+
+<dt><B>[-create]</B><dd>
+Selects the DB_CREATE flag to create underlying files.
+
+<dt><B>[-delim <I>delim</I>]</B><dd>
+Sets the delimiting byte for variable length records to <I>delim</I>
+using the
+<A HREF="../../docs/api_c/db_set_re_delim.html">DB->set_re_delim</A>
+method.
+
+<dt><B>[-dup]</B><dd>
+Selects the DB_DUP flag to permit duplicates in the database.
+
+<dt><B>[-dupcompare <I>proc</I>]</B><dd>
+Sets the duplicate data comparison function to the Tcl procedure named
+<I>proc</I> using the
+<A HREF="../../docs/api_c/db_set_dup_compare.html">DB->set_dup_compare</A>
+method.
+
+<dt><B>[-dupsort]</B><dd>
+Selects the DB_DUPSORT flag to support sorted duplicates.
+
+<dt><B>[-env <I>env</I>]</B><dd>
+The database environment.
+
+<dt><B>[-errfile <I>filename</I>]</B><dd>
+Specifies the error file to use for this environment to <I>filename</I>
+by calling
+<A HREF="../../docs/api_c/db_set_errfile.html">DB->set_errfile</A>.
+If the file already exists then we will append to the end of the file.
+
+<dt><B>[-excl]</B><dd>
+Selects the DB_EXCL flag to exclusively create underlying files.
+
+<dt><B>[-extent <I>size</I>]</B><dd>
+Sets the size of a Queue database extent to the given <I>size</I> using
+the
+<A HREF="../../docs/api_c/db_set_q_extentsize.html">DB->set_q_extentsize</A>
+method.
+
+<dt><B>[-ffactor <I>density</I>]</B><dd>
+Sets the hash table key density to the given <I>density</I> using the
+<A HREF="../../docs/api_c/db_set_h_ffactor.html">DB->set_h_ffactor</A>
+method.
+
+<dt><B>[-hashproc <I>proc</I>]</B><dd>
+Sets a user-defined hash function to the Tcl procedure named <I>proc</I>
+using the
+<A HREF="../../docs/api_c/db_set_h_hash.html">DB->set_h_hash</A> method.
+
+<dt><B>[-len <I>len</I>]</B><dd>
+Sets the length of fixed-length records to <I>len</I> using the
+<A HREF="../../docs/api_c/db_set_re_len.html">DB->set_re_len</A>
+method.
+
+<dt><B>[-lorder <I>order</I>]</B><dd>
+Sets the byte order for integers stored in the database meta-data to
+the given <I>order</I> using the
+<A HREF="../../docs/api_c/db_set_lorder.html">DB->set_lorder</A>
+method.
+
+<dt><B>[-minkey <I>minkey</I>]</B><dd>
+Sets the minimum number of keys per Btree page to <I>minkey</I> using
+the
+<A HREF="../../docs/api_c/db_set_bt_minkey.html">DB->set_bt_minkey</A>
+method.
+
+<dt><B>[-mode <I>mode</I>]</B><dd>
+Specifies the mode for created files.
+
+<dt><B>[-nelem <I>size</I>]</B><dd>
+Sets the hash table size estimate to the given <I>size</I> using the
+<A HREF="../../docs/api_c/db_set_h_nelem.html">DB->set_h_nelem</A>
+method.
+
+<dt><B>[-nommap]</B><dd>
+Selects the DB_NOMMAP flag to forbid mmaping of files.
+
+<dt><B>[-pad <I>pad</I>]</B><dd>
+Sets the pad character used for fixed length records to <I>pad</I> using
+the
+<A HREF="../../docs/db_set_re_pad.html">DB->set_re_pad</A> method.
+
+<dt><B>[-pagesize <I>pagesize</I>]</B><dd>
+Sets the size of the database page to <I>pagesize</I> using the
+<A HREF="../../docs/api_c/db_set_pagesize.html">DB->set_pagesize</A>
+method.
+
+<dt><B>[-rdonly]</B><dd>
+Selects the DB_RDONLY flag for opening in read-only mode.
+
+<dt><B>[-recnum]</B><dd>
+Selects the DB_RECNUM flag to support record numbers in Btrees.
+
+<dt><B>[-renumber]</B><dd>
+Selects the DB_RENUMBER flag to support mutable record numbers.
+
+<dt><B>[-revsplitoff]</B><dd>
+Selects the DB_REVSPLITOFF flag to suppress reverse splitting of pages
+on deletion.
+
+<dt><B>[-snapshot]</B><dd>
+Selects the DB_SNAPSHOT flag to support database snapshots.
+
+<dt><B>[-source <I>file</I>]</B><dd>
+Sets the backing source file name to <I>file</I> using the
+<A HREF="../../docs/api_c/db_set_re_source.html">DB->set_re_source</A>
+method.
+
+<dt><B>[-truncate]</B><dd>
+Selects the DB_TRUNCATE flag to truncate the database.
+
+<dt><B>[--]</B><dd>
+Terminate the list of options and use remaining arguments as the file
+or subdb names (thus allowing the use of filenames beginning with a dash
+'-').
+
+<dt><B>[<I>filename </I>[<I>subdbname</I>]]</B><dd>
+The names of the database and sub-database.
+</dl>
<HR WIDTH="100%">
-<BR><B>&nbsp;berkdb upgrade [-dupsort] [-env <I>env</I>] [--] [<I>filename</I>]</B>
+<B>> berkdb upgrade [-dupsort] [-env <I>env</I>] [--] [<I>filename</I>]</B>
<P>This command will invoke the <A HREF="../../docs/api_c/db_upgrade.html">DB->upgrade</A>
function.&nbsp; If the command is given the <B>-env</B> option, then we
will accordingly upgrade the database filename within the context of that
@@ -193,14 +164,21 @@ environment. The <B>-dupsort</B> option selects the DB_DUPSORT flag for
upgrading. The use of --<B> </B>terminates the list of options, thus allowing
filenames beginning with a dash.
<P>
-<HR WIDTH="100%"><B>> berkdb verify [-env <I>env</I>] [--] [<I>filename</I>]</B>
+
+<HR WIDTH="100%">
+<B>> berkdb verify [-env <I>env</I>] [--] [<I>filename</I>]</B>
<P>This command will invoke the <A HREF="../../docs/api_c/db_verify.html">DB->verify</A>
function.&nbsp; If the command is given the <B>-env</B> option, then we
will accordingly verify the database filename within the context of that
environment.&nbsp; The use of --<B> </B>terminates the list of options,
thus allowing filenames beginning with a dash.
<P>
-<HR WIDTH="100%"><B>> <I>db</I> join [-nosort] <I>db0.c0 db1.c0</I> ...</B>
+
+<HR WIDTH="100%"><B>> <I>db</I> del</B>
+<P>There are no undocumented options.
+
+<HR WIDTH="100%">
+<B>> <I>db</I> join [-nosort] <I>db0.c0 db1.c0</I> ...</B>
<P>This command will invoke the <A HREF="../../docs/api_c/db_join.html">db_join</A>
function.&nbsp; After it successfully joins a database, we bind it to a
new Tcl command of the form <B><I>dbN.cX, </I></B>where X is an integer
@@ -215,7 +193,33 @@ number of data items they reference.&nbsp; It results in the DB_JOIN_NOSORT
flag being set.</LI>
</UL>
-<HR WIDTH="100%"><B>> <I>db</I> get_join [-nosort] {db key} {db key} ...</B>
+<P>
+This command will invoke the
+<A HREF="../../docs/api_c/db_create.html">db_create</A> function. If
+the command is given the <B>-env</B> option, then we will accordingly
+creating the database within the context of that environment. After it
+successfully gets a handle to a database, we bind it to a new Tcl
+command of the form <B><I>dbX, </I></B>where X is an integer starting
+at 0 (e.g. <B>db0, db1, </B>etc).
+
+<p>
+We use the <I>Tcl_CreateObjCommand()</I> to create the top level
+database function. It is through this handle that the user can access
+all of the commands described in the <A HREF="#Database Commands">
+Database Commands</A> section. Internally, the database handle
+is sent as the <I>ClientData</I> portion of the new command set so that
+all future database calls access the appropriate handle.
+
+<P>
+After parsing all of the optional arguments affecting the setup of the
+database and making the appropriate calls to DB to manipulate those
+values, we open the database for the user. It translates to the
+<A HREF="../../docs/api_c/db_open.html">DB->open</A> method call after
+parsing all of the various optional arguments. We automatically set the
+DB_THREAD flag. The arguments are:
+
+<HR WIDTH="100%">
+<B>> <I>db</I> get_join [-nosort] {db key} {db key} ...</B>
<P>This command performs a join operation on the keys specified and returns
a list of the joined {key data} pairs.
<P>The options are:
@@ -226,41 +230,34 @@ number of data items they reference.&nbsp; It results in the DB_JOIN_NOSORT
flag being set.</LI>
</UL>
-<HR WIDTH="100%"><B>> <I>db</I> keyrange [-txn <I>id</I>] key</B>
+<HR WIDTH="100%">
+<B>> <I>db</I> keyrange [-txn <I>id</I>] key</B>
<P>This command returns the range for the given <B>key</B>.&nbsp; It returns
a list of 3 double elements of the form {<B><I>less equal greater</I></B>}
where <B><I>less</I></B> is the percentage of keys less than the given
key, <B><I>equal</I></B> is the percentage equal to the given key and <B><I>greater</I></B>
is the percentage greater than the given key.&nbsp; If the -txn option
is specified it performs this operation under transaction protection.
-<BR>
-<HR WIDTH="100%"><B>> <I>db</I> put</B>
-<P>The <B>undocumented</B> options are:
-<UL>
-<LI>
-<B>-nodupdata</B> This flag causes DB not to insert the key/data pair if
-it already exists, that is, both the key and data items are already in
-the database. The -nodupdata flag may only be specified if the underlying
-database has been configured to support sorted duplicates.</LI>
-</UL>
-<HR WIDTH="100%"><B>> <I>db</I> stat</B>
+<HR WIDTH="100%"><B>> <I>db</I> put</B>
<P>The <B>undocumented</B> options are:
-<UL>
-<LI>
-<B>-cachedcounts</B> This flag causes DB to return the cached key/record
-counts, similar to the DB_CACHED_COUNTS flags to DB->stat.</LI>
-</UL>
+<dl>
+<dt><B>-nodupdata</B><dd>
+This flag causes DB not to insert the key/data pair if it already
+exists, that is, both the key and data items are already in the
+database. The -nodupdata flag may only be specified if the underlying
+database has been configured to support sorted duplicates.
+</dl>
<HR WIDTH="100%"><B>> <I>dbc</I> put</B>
<P>The <B>undocumented</B> options are:
-<UL>
-<LI>
-<B>-nodupdata</B> This flag causes DB not to insert the key/data pair if
-it already exists, that is, both the key and data items are already in
-the database. The -nodupdata flag may only be specified if the underlying
-database has been configured to support sorted duplicates.</LI>
-</UL>
+<dl>
+<dt><B>-nodupdata</B><dd>
+This flag causes DB not to insert the key/data pair if it already
+exists, that is, both the key and data items are already in the
+database. The -nodupdata flag may only be specified if the underlying
+database has been configured to support sorted duplicates.
+</dl>
</BODY>
</HTML>
diff --git a/db/tcl/docs/env.html b/db/tcl/docs/env.html
index a1bd08fd1..6ac534dba 100644
--- a/db/tcl/docs/env.html
+++ b/db/tcl/docs/env.html
@@ -1,303 +1,354 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="GENERATOR" CONTENT="Mozilla/4.08 [en] (X11; I; FreeBSD 3.3-RELEASE i386) [Netscape]">
-</HEAD>
-<BODY>
-
-<H2>
-Environment Commands</H2>
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<h2>
+Environment Commands</h2>
Environments provide a structure for creating a consistent environment
for processes using one or more of the features of Berkeley DB.&nbsp; Unlike
some of the database commands, the environment commands are very low level.
-<BR>
-<HR WIDTH="100%">
-<P>The user may create and open a new DB environment&nbsp; by invoking:
-<P><B>> berkdb env</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-cdb] [-cdb_alldb] [-lock] [-log] [-txn [nosync]]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-create] [-home<I> directory</I>] [-mode <I>mode</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-data_dir <I>directory</I>] [-log_dir <I>directory</I>]
-[-tmp_dir <I>directory</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-nommap] [-private] [-recover] [-recover_fatal]
-[-system_mem] [-errfile <I>filename</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-use_environ] [-use_environ_root] [-verbose
-{<I>which </I>on|off}]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-region_init]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-cachesize {<I>gbytes bytes ncaches</I>}]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-mmapsize<I> size</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-log_max <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-log_buffer <I>size</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_conflict {<I>nmodes </I>{<I>matrix</I>}}]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_detect default|oldest|random|youngest]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_max <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_max_locks <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_max_lockers <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-lock_max_objects <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-txn_max <I>max</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-client_timeout <I>seconds</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-server_timeout <I>seconds</I>]</B>
-<BR><B>&nbsp;&nbsp;&nbsp; [-server <I>hostname</I>]</B>
-<BR>&nbsp;
-<P>This command opens up an environment.&nbsp;&nbsp; We automatically set
+<br>
+<hr WIDTH="100%">
+<p>The user may create and open a new DB environment&nbsp; by invoking:
+<p><b>> berkdb env</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-cdb] [-cdb_alldb] [-lock] [-log] [-txn [nosync]]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-create] [-home<i> directory</i>] [-mode <i>mode</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-data_dir <i>directory</i>] [-log_dir <i>directory</i>]
+[-tmp_dir <i>directory</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-nommap] [-private] [-recover] [-recover_fatal]
+[-system_mem] [-errfile <i>filename</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-use_environ] [-use_environ_root] [-verbose
+{<i>which </i>on|off}]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-region_init]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-cachesize {<i>gbytes bytes ncaches</i>}]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-mmapsize<i> size</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-log_max <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-log_buffer <i>size</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_conflict {<i>nmodes </i>{<i>matrix</i>}}]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_detect default|oldest|random|youngest]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_max <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_max_locks <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_max_lockers <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_max_objects <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-lock_timeout <i>timeout</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-overwrite]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-txn_max <i>max</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-txn_timeout <i>timeout</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-client_timeout <i>seconds</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-server_timeout <i>seconds</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-server <i>hostname</i>]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-rep_master] [-rep_client]</b>
+<br><b>&nbsp;&nbsp;&nbsp; [-rep_transport <i>{ machineid sendproc }</i>]</b>
+<br>&nbsp;
+<p>This command opens up an environment.&nbsp;&nbsp; We automatically set
the DB_THREAD and the DB_INIT_MPOOL flags.&nbsp; The arguments are:
-<UL>
-<LI>
-<B>-cdb</B> selects the DB_INIT_CDB flag for Concurrent Data Store</LI>
-
-<LI>
-<B>-cdb_alldb</B> selects the DB_CDB_ALLDB flag for Concurrent Data Store</LI>
-
-<LI>
-<B>-lock</B> selects the DB_INIT_LOCK flag for the locking subsystem</LI>
-
-<LI>
-<B>-log</B> selects the DB_INIT_LOG flag for the logging subsystem</LI>
-
-<LI>
-<B>-txn</B> selects the DB_INIT_TXN, DB_INIT_LOCK and DB_INIT_LOG flags
-for the transaction subsystem.&nbsp; If <B>nosync</B> is specified, then
-it will also select DB_TXN_NOSYNC to indicate no flushes of log on commits</LI>
-
-<LI>
-<B>-create </B>selects the DB_CREATE flag to create underlying files</LI>
-
-<LI>
-<B>-home <I>directory </I></B>selects the home directory of the environment</LI>
-
-<LI>
-<B>-data_dir <I>directory </I></B>selects the data file directory of the
-environment by calling <A HREF="../../docs/api_c/env_set_data_dir.html">DBENV->set_data_dir</A>.</LI>
-
-<LI>
-<B>-log_dir <I>directory </I></B>selects the log file directory of the
-environment&nbsp; by calling <A HREF="../../docs/api_c/env_set_lg_dir.html">DBENV->set_lg_dir</A>.</LI>
-
-<LI>
-<B>-tmp_dir <I>directory </I></B>selects the temporary file directory of
-the environment&nbsp; by calling <A HREF="../../docs/api_c/env_set_tmp_dir.so">DBENV->set_tmp_dir</A>.</LI>
-
-<LI>
-<B>-mode <I>mode </I></B>sets the permissions of created files to <B><I>mode</I></B></LI>
-
-<LI>
-<B>-nommap</B> selects the DB_NOMMAP flag to disallow using mmap'ed files</LI>
-
-<LI>
-<B>-private</B> selects the DB_PRIVATE flag for a private environment</LI>
-
-<LI>
-<B>-recover</B> selects the DB_RECOVER flag for recovery</LI>
-
-<LI>
-<B>-recover_fatal</B> selects the DB_RECOVER_FATAL flag for catastrophic
-recovery</LI>
-
-<LI>
-<B>-system_mem</B> selects the DB_SYSTEM_MEM flag to use system memory</LI>
-
-<LI>
-<B>-errfile </B>specifies the error file to use for this environment to
-<B><I>filename</I></B>
-by calling <A HREF="../../docs/api_c/env_set_errfile.html">DBENV->set_errfile</A><B><I>.
-</I></B>If
-the file already exists then we will append to the end of the file</LI>
-
-<LI>
-<B>-use_environ</B> selects the DB_USE_ENVIRON flag to affect file naming</LI>
-
-<LI>
-<B>-use_environ_root</B> selects the DB_USE_ENVIRON_ROOT flag to have the
-root environment affect file naming</LI>
-
-<LI>
-<B>-verbose</B> produces verbose error output for the given which subsystem,
-using the <A HREF="../../docs/api_c/dbenv_set_verbose.html">DBENV->set_verbose</A>
-method.&nbsp;&nbsp; See the description of <A HREF="#> <env> verbose which on|off">verbose</A>
-below for valid <B><I>which </I></B>values</LI>
-
-<LI>
-<B>-region_init </B>specifies that the user wants to page fault the region
-in on startup using the <A HREF="../../docs/api_c/env_set_region_init.html">DBENV->set_region_init</A>
-method call</LI>
-
-<LI>
-<B>-cachesize </B>sets the size of the database cache to the size&nbsp;
-specified by <B><I>gbytes </I></B>and <B><I>bytes, </I></B>broken up into
-<B><I>ncaches</I></B>
-number of caches using the <A HREF="../../docs/api_c/env_set_cachesize.html">DBENV->set_cachesize</A>
-method</LI>
-
-<LI>
-<B>-mmapsize </B>sets the size of the database page to <B><I>size </I></B>using
-the <A HREF="../../docs/api_c/env_set_mp_mmapsize.html">DBENV->set_mp_mmapsize</A>
-method</LI>
-
-<LI>
-<B>-log_max </B>sets the maximum size of the log file to <B><I>max</I></B>
-using the <A HREF="../../docs/api_c/env_set_lg_max.html">DBENV->set_lg_max</A>
-call</LI>
-
-<LI>
-<B>-log_buffer </B>sets the size of the log file in bytes to <B><I>size</I></B>
-using the <A HREF="../../docs/api_c/env_set_lg_bsize.html">DBENV->set_lg_bsize</A>
-call</LI>
-
-<LI>
-<B>-lock_conflict </B>sets the number of lock modes to <B><I>nmodes</I></B>
-and sets the locking policy for those modes to the <B><I>conflict_matrix</I></B>
-given using the <A HREF="../../docs/api_c/env_set_lk_conflict.html">DBENV->set_lk_conflict</A>
-method call</LI>
-
-<LI>
-<B>-lock_detect </B>sets the deadlock detection policy to the given policy
-using the <A HREF="../../docs/env_set_lk_detect.html">DBENV->set_lk_detect</A>
-method call.&nbsp; The policy choices are:</LI>
-
-<UL>
-<LI>
-<B>default</B> selects the DB_LOCK_DEFAULT policy for default detection</LI>
-
-<LI>
-<B>oldest </B>selects DB_LOCK_OLDEST to abort the oldest locker on a deadlock</LI>
-
-<LI>
-<B>random</B> selects DB_LOCK_RANDOM to abort a random locker on a deadlock</LI>
-
-<LI>
-<B>youngest</B> selects DB_LOCK_YOUNGEST to abort the youngest locker on
-a deadlock</LI>
-</UL>
-
-<LI>
-<B>-lock_max </B>sets the maximum size of the lock table to <B><I>max </I></B>using
-the <A HREF="../../docs/api_c/env_set_lk_max.html">DBENV->set_lk_max</A>
-method call</LI>
-
-<LI>
-<B>-lock_max_locks </B>sets the maximum number of locks to <B><I>max </I></B>using
-the <A HREF="../../docs/api_c/env_set_lk_max_locks.html">DBENV->set_lk_max_locks</A>
-method call</LI>
-
-<LI>
-<B>-lock_max_lockers </B>sets the maximum number of locking entities to
-<B><I>max </I></B>using the <A HREF="../../docs/api_c/env_set_lk_max_lockers.html">DBENV->set_lk_max_lockers</A>
-method call</LI>
-
-<LI>
-<B>-lock_max_objects </B>sets the maximum number of simultaneously locked
-objects to <B><I>max </I></B>using the <A HREF="../../docs/api_c/env_set_lk_max_objects.html">DBENV->set_lk_max_objects</A>
-method call</LI>
-
-<LI>
-<B>-txn_max </B>sets the maximum size of the transaction table to <B><I>max</I></B>
-using the <A HREF="../../docs/api_c/env_set_txn_max.html">DBENV->set_txn_max</A>
-method call</LI>
-
-<LI>
-<B>-client_timeout</B> sets the timeout value for the client waiting for
-a reply from the server for RPC operations to <B><I>seconds</I></B>.</LI>
-
-<LI>
-<B>-server_timeout</B> sets the timeout value for the server to determine
-an idle client is gone to <B><I>seconds</I></B>.</LI>
-
-<LI>
-<B>&nbsp;-server </B>specifies the <B><I>hostname</I></B> of the server
-to connect to in the <A HREF="../../docs/api_c/env_set_server.html">DBENV->set_server</A>
-call.</LI>
-</UL>
-This command will invoke the <A HREF="../../docs/api_c/env_create.html">db_env_create</A>
+<ul>
+<li>
+<b>-cdb</b> selects the DB_INIT_CDB flag for Concurrent Data Store</li>
+
+<li>
+<b>-cdb_alldb</b> selects the DB_CDB_ALLDB flag for Concurrent Data Store</li>
+
+<li>
+<b>-lock</b> selects the DB_INIT_LOCK flag for the locking subsystem</li>
+
+<li>
+<b>-log</b> selects the DB_INIT_LOG flag for the logging subsystem</li>
+
+<li>
+<b>-txn</b> selects the DB_INIT_TXN, DB_INIT_LOCK and DB_INIT_LOG flags
+for the transaction subsystem.&nbsp; If <b>nosync</b> is specified, then
+it will also select DB_TXN_NOSYNC to indicate no flushes of log on commits</li>
+
+<li>
+<b>-create </b>selects the DB_CREATE flag to create underlying files</li>
+
+<li>
+<b>-home <i>directory </i></b>selects the home directory of the environment</li>
+
+<li>
+<b>-data_dir <i>directory </i></b>selects the data file directory of the
+environment by calling <a href="../../docs/api_c/env_set_data_dir.html">DBENV->set_data_dir</a>.</li>
+
+<li>
+<b>-log_dir <i>directory </i></b>selects the log file directory of the
+environment&nbsp; by calling <a href="../../docs/api_c/env_set_lg_dir.html">DBENV->set_lg_dir</a>.</li>
+
+<li>
+<b>-tmp_dir <i>directory </i></b>selects the temporary file directory of
+the environment&nbsp; by calling <a href="../../docs/api_c/env_set_tmp_dir.so">DBENV->set_tmp_dir</a>.</li>
+
+<li>
+<b>-mode <i>mode </i></b>sets the permissions of created files to <b><i>mode</i></b></li>
+
+<li>
+<b>-nommap</b> selects the DB_NOMMAP flag to disallow using mmap'ed files</li>
+
+<li>
+<b>-private</b> selects the DB_PRIVATE flag for a private environment</li>
+
+<li>
+<b>-recover</b> selects the DB_RECOVER flag for recovery</li>
+
+<li>
+<b>-recover_fatal</b> selects the DB_RECOVER_FATAL flag for catastrophic
+recovery</li>
+
+<li>
+<b>-system_mem</b> selects the DB_SYSTEM_MEM flag to use system memory</li>
+
+<li>
+<b>-errfile </b>specifies the error file to use for this environment to
+<b><i>filename</i></b>
+by calling <a href="../../docs/api_c/env_set_errfile.html">DBENV->set_errfile</a><b><i>.
+</i></b>If
+the file already exists then we will append to the end of the file</li>
+
+<li>
+<b>-use_environ</b> selects the DB_USE_ENVIRON flag to affect file naming</li>
+
+<li>
+<b>-use_environ_root</b> selects the DB_USE_ENVIRON_ROOT flag to have the
+root environment affect file naming</li>
+
+<li>
+<b>-verbose</b> produces verbose error output for the given which subsystem,
+using the <a href="../../docs/api_c/dbenv_set_verbose.html">DBENV->set_verbose</a>
+method.&nbsp;&nbsp; See the description of <a href="#> <env> verbose which on|off">verbose</a>
+below for valid <b><i>which </i></b>values</li>
+
+<li>
+<b>-region_init </b>specifies that the user wants to page fault the region
+in on startup using the <a href="../../docs/api_c/env_set_region_init.html">DBENV->set_region_init</a>
+method call</li>
+
+<li>
+<b>-cachesize </b>sets the size of the database cache to the size&nbsp;
+specified by <b><i>gbytes </i></b>and <b><i>bytes, </i></b>broken up into
+<b><i>ncaches</i></b>
+number of caches using the <a href="../../docs/api_c/env_set_cachesize.html">DBENV->set_cachesize</a>
+method</li>
+
+<li>
+<b>-mmapsize </b>sets the size of the database page to <b><i>size </i></b>using
+the <a href="../../docs/api_c/env_set_mp_mmapsize.html">DBENV->set_mp_mmapsize</a>
+method</li>
+
+<li>
+<b>-log_max </b>sets the maximum size of the log file to <b><i>max</i></b>
+using the <a href="../../docs/api_c/env_set_lg_max.html">DBENV->set_lg_max</a>
+call</li>
+
+<li>
+<b>-log_regionmax </b>sets the size of the log region to <b><i>max</i></b>
+using the <a href="../../docs/api_c/env_set_lg_regionmax.html">DBENV->set_lg_regionmax</a>
+call</li>
+
+<li>
+<b>-log_buffer </b>sets the size of the log file in bytes to <b><i>size</i></b>
+using the <a href="../../docs/api_c/env_set_lg_bsize.html">DBENV->set_lg_bsize</a>
+call</li>
+
+<li>
+<b>-lock_conflict </b>sets the number of lock modes to <b><i>nmodes</i></b>
+and sets the locking policy for those modes to the <b><i>conflict_matrix</i></b>
+given using the <a href="../../docs/api_c/env_set_lk_conflict.html">DBENV->set_lk_conflict</a>
+method call</li>
+
+<li>
+<b>-lock_detect </b>sets the deadlock detection policy to the given policy
+using the <a href="../../docs/env_set_lk_detect.html">DBENV->set_lk_detect</a>
+method call.&nbsp; The policy choices are:</li>
+
+<ul>
+<li>
+<b>default</b> selects the DB_LOCK_DEFAULT policy for default detection</li>
+
+<li>
+<b>oldest </b>selects DB_LOCK_OLDEST to abort the oldest locker on a deadlock</li>
+
+<li>
+<b>random</b> selects DB_LOCK_RANDOM to abort a random locker on a deadlock</li>
+
+<li>
+<b>youngest</b> selects DB_LOCK_YOUNGEST to abort the youngest locker on
+a deadlock</li>
+</ul>
+
+<li>
+<b>-lock_max </b>sets the maximum size of the lock table to <b><i>max </i></b>using
+the <a href="../../docs/api_c/env_set_lk_max.html">DBENV->set_lk_max</a>
+method call</li>
+
+<li>
+<b>-lock_max_locks </b>sets the maximum number of locks to <b><i>max </i></b>using
+the <a href="../../docs/api_c/env_set_lk_max_locks.html">DBENV->set_lk_max_locks</a>
+method call</li>
+
+<li>
+<b>-lock_max_lockers </b>sets the maximum number of locking entities to
+<b><i>max
+</i></b>using the <a href="../../docs/api_c/env_set_lk_max_lockers.html">DBENV->set_lk_max_lockers</a>
+method call</li>
+
+<li>
+<b>-lock_max_objects </b>sets the maximum number of simultaneously locked
+objects to <b><i>max </i></b>using the <a href="../../docs/api_c/env_set_lk_max_objects.html">DBENV->set_lk_max_objects</a>
+method call</li>
+
+<li>
+<b>-lock_timeout </b>sets the timeout for locks in the environment</li>
+
+<li>
+<b>-overwrite </b>sets DB_OVERWRITE flag</li>
+
+<li>
+<b>-txn_max </b>sets the maximum size of the transaction table to <b><i>max</i></b>
+using the <a href="../../docs/api_c/env_set_txn_max.html">DBENV->set_txn_max</a>
+method call</li>
+
+<li>
+<b>-txn_timeout </b>sets the timeout for transactions in the environment</li>
+
+<li>
+<b>-client_timeout</b> sets the timeout value for the client waiting for
+a reply from the server for RPC operations to <b><i>seconds</i></b>.</li>
+
+<li>
+<b>-server_timeout</b> sets the timeout value for the server to determine
+an idle client is gone to <b><i>seconds</i></b>.</li>
+
+<li>
+<b>-server </b>specifies the <b><i>hostname</i></b> of the server
+to connect to in the <a href="../../docs/api_c/env_set_server.html">DBENV->set_server</a>
+call.</li>
+
+<li>
+<b>-rep_client </b>sets the newly created environment to be a
+replication client, using the <a href="../../docs/api_c/rep_client.html">
+DBENV->rep_client</a> call.</li>
+
+<li>
+<b>-rep_master </b>sets the newly created environment to be a
+replication master, using the <a href="../../docs/api_c/rep_master.html">
+DBENV->rep_master</a> call.</li>
+
+<li>
+<b>-rep_transport </b>specifies the replication transport function,
+using the
+<a href="../../docs/api_c/rep_transport.html">DBENV->set_rep_transport</a>
+call. This site's machine ID is set to <b><i>machineid</i></b> and
+the send function, a Tcl proc, is set to <b><i>sendproc</i></b>.</li>
+
+</ul>
+
+This command will invoke the <a href="../../docs/api_c/env_create.html">db_env_create</a>
function.&nbsp; After it successfully gets a handle to an environment,
-we bind it to a new Tcl command of the form <B><I>envX</I></B>, where X
-is an integer starting at&nbsp; 0 (e.g. <B>env0, env1, </B>etc).&nbsp;
-We use the <I>Tcl_CreateObjCommand()</I> to create the top level environment
+we bind it to a new Tcl command of the form <b><i>envX</i></b>, where X
+is an integer starting at&nbsp; 0 (e.g. <b>env0, env1, </b>etc).&nbsp;
+We use the <i>Tcl_CreateObjCommand()</i> to create the top level environment
command function.&nbsp; It is through this handle that the user can access
-all the commands described in the <A HREF="#Environment Commands">Environment
-Commands</A> section.&nbsp; Internally, the handle we get back from DB
-will be stored as the <I>ClientData</I> portion of the new command set
+all the commands described in the <a href="#Environment Commands">Environment
+Commands</a> section.&nbsp; Internally, the handle we get back from DB
+will be stored as the <i>ClientData</i> portion of the new command set
so that all future environment calls will have that handle readily available.&nbsp;
-Then we call the <A HREF="../../docs/api_c/env_open.html">DBENV->open</A>
+Then we call the <a href="../../docs/api_c/env_open.html">DBENV->open</a>
method call and possibly some number of setup calls as described above.
-<P>
-<HR WIDTH="100%">
-<BR><A NAME="> <env> verbose which on|off"></A><B>> &lt;env> verbose <I>which</I>
-on|off</B>
-<P>This command controls the use of debugging output for the environment.&nbsp;
-This command directly translates to a call to the <A HREF="../../docs/api_c/dbenv_set_verbose.html">DBENV->set_verbose</A>
+<p>
+<hr WIDTH="100%">
+<br><a NAME="> <env> verbose which on|off"></a><b>> &lt;env> verbose <i>which</i>
+on|off</b>
+<p>This command controls the use of debugging output for the environment.&nbsp;
+This command directly translates to a call to the <a href="../../docs/api_c/dbenv_set_verbose.html">DBENV->set_verbose</a>
method call.&nbsp; It returns either a 0 (for success), a DB error message
or it throws a Tcl error with a system message.&nbsp; The user specifies
-<B><I>which</I></B>
+<b><i>which</i></b>
subsystem to control, and indicates whether debug messages should be turned
-<B>on</B>
-or <B>off</B> for that subsystem.&nbsp; The value of <B><I>which</I></B>
+<b>on</b>
+or <b>off</b> for that subsystem.&nbsp; The value of <b><i>which</i></b>
must be one of the following:
-<UL>
-<LI>
-<B>chkpt</B> - Chooses the checkpointing code by using the DB_VERB_CHKPOINT
-value</LI>
-
-<LI>
-<B>deadlock </B>- Chooses the deadlocking code by using the DB_VERB_DEADLOCK
-value</LI>
-
-<LI>
-<B>recovery </B>- Chooses the recovery code by using the DB_VERB_RECOVERY
-value</LI>
-
-<LI>
-<B>wait </B>- Chooses the waitsfor code by using the DB_VERB_WAITSFOR value</LI>
-</UL>
-
-<HR WIDTH="100%">
-<P><A NAME="> <env> close"></A><B>> &lt;env> close</B>
-<P>This command closes an environment and deletes the handle.&nbsp; This
-command directly translates to a call to the <A HREF="../../docs/api_c/env_close.html">DBENV->close</A>
+<ul>
+<li>
+<b>chkpt</b> - Chooses the checkpointing code by using the DB_VERB_CHKPOINT
+value</li>
+
+<li>
+<b>deadlock </b>- Chooses the deadlocking code by using the DB_VERB_DEADLOCK
+value</li>
+
+<li>
+<b>recovery </b>- Chooses the recovery code by using the DB_VERB_RECOVERY
+value</li>
+
+<li>
+<b>wait </b>- Chooses the waitsfor code by using the DB_VERB_WAITSFOR value</li>
+</ul>
+
+<hr WIDTH="100%">
+<p><a NAME="> <env> close"></a><b>> &lt;env> close</b>
+<p>This command closes an environment and deletes the handle.&nbsp; This
+command directly translates to a call to the <a href="../../docs/api_c/env_close.html">DBENV->close</a>
method call.&nbsp; It returns either a 0 (for success), a DB error message
or it throws a Tcl error with a system message.
-<P>Additionally, since the handle is no longer valid, we will call <I>Tcl_DeleteCommand()
-</I>so
+<p>Additionally, since the handle is no longer valid, we will call <i>Tcl_DeleteCommand()
+</i>so
that further uses of the handle will be dealt with properly by Tcl itself.
-<P>Also, the close command will automatically abort any <A HREF="txn.html">transactions</A>
-and close any <A HREF="mpool.html">mpool</A> memory files.&nbsp; As such
+<p>Also, the close command will automatically abort any <a href="txn.html">transactions</a>
+and close any <a href="mpool.html">mpool</a> memory files.&nbsp; As such
we must maintain a list of open transaction and mpool handles so that we
-can call <I>Tcl_DeleteCommand</I> on those as well.
-<P>
-<HR WIDTH="100%">
-<BR><B>> berkdb envremove [-data_dir <I>directory</I>] [-force] [-home
-<I>directory</I>]
--log_dir <I>directory</I>] [-tmp_dir <I>directory</I>] [-use_environ] [-use_environ_root]</B>
-<P>This command removes the environment if it is not in use and deletes
-the handle.&nbsp; This command directly translates to a call to the <A HREF="../../docs/api_c/env_remove.html">DBENV->remove</A>
+can call <i>Tcl_DeleteCommand</i> on those as well.
+<p>
+<hr WIDTH="100%">
+
+<b>> berkdb envremove<br>
+[-data_dir <i>directory</i>]<br>
+[-force]<br>
+[-home <i>directory</i>]<br>
+[-log_dir <i>directory</i>]<br>
+[-overwrite]<br>
+[-tmp_dir <i>directory</i>]<br>
+[-use_environ]<br>
+[-use_environ_root]</b>
+
+<p>This command removes the environment if it is not in use and deletes
+the handle.&nbsp; This command directly translates to a call to the <a href="../../docs/api_c/env_remove.html">DBENV->remove</a>
method call.&nbsp; It returns either a 0 (for success), a DB error message
or it throws a Tcl error with a system message.&nbsp; The arguments are:
-<UL>
-<LI>
-<B>-force</B> selects the DB_FORCE flag to remove even if other processes
-have the environment open</LI>
+<ul>
+<li>
+<b>-force</b> selects the DB_FORCE flag to remove even if other processes
+have the environment open</li>
+
+<li>
+<b>-home <i>directory</i> </b>specifies the home directory of the environment</li>
-<LI>
-<B>-home <I>directory</I> </B>specifies the home directory of the environment</LI>
+<li>
+<b>-data_dir <i>directory </i></b>selects the data file directory of the
+environment by calling <a href="../../docs/api_c/env_set_data_dir.html">DBENV->set_data_dir</a>.</li>
-<LI>
-<B>-data_dir <I>directory </I></B>selects the data file directory of the
-environment by calling <A HREF="../../docs/api_c/env_set_data_dir.html">DBENV->set_data_dir</A>.</LI>
+<li>
+<b>-log_dir <i>directory </i></b>selects the log file directory of the
+environment&nbsp; by calling <a href="../../docs/api_c/env_set_lg_dir.html">DBENV->set_lg_dir</a>.</li>
-<LI>
-<B>-log_dir <I>directory </I></B>selects the log file directory of the
-environment&nbsp; by calling <A HREF="../../docs/api_c/env_set_lg_dir.html">DBENV->set_lg_dir</A>.</LI>
+<li>
+<b>-overwrite </b>sets DB_OVERWRITE flag</li>
-<LI>
-<B>-tmp_dir <I>directory </I></B>selects the temporary file directory of
-the environment&nbsp; by calling <A HREF="../../docs/api_c/env_set_tmp_dir.so">DBENV->set_tmp_dir</A>.</LI>
+<li>
+<b>-tmp_dir <i>directory </i></b>selects the temporary file directory of
+the environment&nbsp; by calling <a href="../../docs/api_c/env_set_tmp_dir.so">DBENV->set_tmp_dir</a>.</li>
-<LI>
-<B>-use_environ </B>selects the DB_USE_ENVIRON flag to affect file naming</LI>
+<li>
+<b>-use_environ </b>selects the DB_USE_ENVIRON flag to affect file naming</li>
-<LI>
-<B>-use_environ_root</B> selects the DB_USE_ENVIRON_ROOT flag to affect
-file naming</LI>
-</UL>
+<li>
+<b>-use_environ_root</b> selects the DB_USE_ENVIRON_ROOT flag to affect
+file naming</li>
+</ul>
-</BODY>
-</HTML>
+</body>
+</html>
diff --git a/db/tcl/docs/historic.html b/db/tcl/docs/historic.html
index 216dc456b..cbea28b20 100644
--- a/db/tcl/docs/historic.html
+++ b/db/tcl/docs/historic.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
diff --git a/db/tcl/docs/index.html b/db/tcl/docs/index.html
index 2866c1e23..2b4598b55 100644
--- a/db/tcl/docs/index.html
+++ b/db/tcl/docs/index.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
@@ -29,6 +30,9 @@ Complete Tcl Interface for Berkeley DB</H1></CENTER>
<A HREF="./mpool.html">Memory Pool commands</A></LI>
<LI>
+<A HREF="./rep.html">Replication commands</A></LI>
+
+<LI>
<A HREF="./txn.html">Transaction commands</A></LI>
</UL>
diff --git a/db/tcl/docs/library.html b/db/tcl/docs/library.html
index abd656d8e..eb313b042 100644
--- a/db/tcl/docs/library.html
+++ b/db/tcl/docs/library.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
diff --git a/db/tcl/docs/lock.html b/db/tcl/docs/lock.html
index 87a20e9a6..4e9a13a3f 100644
--- a/db/tcl/docs/lock.html
+++ b/db/tcl/docs/lock.html
@@ -1,187 +1,207 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="GENERATOR" CONTENT="Mozilla/4.08 [en] (X11; I; FreeBSD 2.2.8-19990120-SNAP i386) [Netscape]">
-</HEAD>
-<BODY>
-
-<H2>
-<A NAME="Locking Commands"></A>Locking Commands</H2>
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
+
+<h2>
+<a NAME="Locking Commands"></a>Locking Commands</h2>
Most locking commands work with the environment handle.&nbsp; However,
when a user gets a lock we create a new lock handle that they then use
with in a similar manner to all the other handles to release the lock.&nbsp;
We present the general locking functions first, and then those that manipulate
locks.
-<P><B>> &lt;env> lock_detect [-lock_conflict] [default|oldest|youngest|random]</B>
-<P>This command runs the deadlock detector.&nbsp; It directly translates
-to the <A HREF="../../docs/api_c/lock_detect.html">lock_detect</A> DB call.&nbsp;
+<p><b>> &lt;env> lock_detect [default|oldest|youngest|random]</b>
+<p>This command runs the deadlock detector.&nbsp; It directly translates
+to the <a href="../../docs/api_c/lock_detect.html">lock_detect</a> DB call.&nbsp;
It returns either a 0 (for success), a DB error message or it throws a
Tcl error with a system message.&nbsp; The first argument sets the policy
for deadlock as follows:
-<UL>
-<LI>
-<B>default</B> selects the DB_LOCK_DEFAULT policy for default detection
-(default if not specified)</LI>
-
-<LI>
-<B>oldest </B>selects DB_LOCK_OLDEST to abort the oldest locker on a deadlock</LI>
-
-<LI>
-<B>random</B> selects DB_LOCK_RANDOM to abort a random locker on a deadlock</LI>
-
-<LI>
-<B>youngest</B> selects DB_LOCK_YOUNGEST to abort the youngest locker on
-a deadlock</LI>
-</UL>
-The second argument, <B>-lock_conflict</B>, selects the DB_LOCK_CONFLICT
-flag to only run the detector if a lock conflict has occurred since the
-last time the detector was run.
-<HR WIDTH="100%">
-<BR><B>> &lt;env> lock_stat</B>
-<P>This command returns a list of name/value pairs where the names correspond
+<ul>
+<li>
+<b>default</b> selects the DB_LOCK_DEFAULT policy for default detection
+(default if not specified)</li>
+
+<li>
+<b>oldest </b>selects DB_LOCK_OLDEST to abort the oldest locker on a deadlock</li>
+
+<li>
+<b>random</b> selects DB_LOCK_RANDOM to abort a random locker on a deadlock</li>
+
+<li>
+<b>youngest</b> selects DB_LOCK_YOUNGEST to abort the youngest locker on
+a deadlock</li>
+</ul>
+
+<hr WIDTH="100%">
+<br><b>> &lt;env> lock_stat</b>
+<p>This command returns a list of name/value pairs where the names correspond
to the C-structure field names of DB_LOCK_STAT and the values are the data
-returned.&nbsp; This command is a direct translation of the <A HREF="../../docs/api_c/lock_stat.html">lock_stat</A>
+returned.&nbsp; This command is a direct translation of the <a href="../../docs/api_c/lock_stat.html">lock_stat</a>
DB call.
-<HR WIDTH="100%">
-<BR><A NAME="> <env> lock_id"></A><B>> &lt;env> lock_id</B>
-<P>This command returns a unique locker ID value.&nbsp; It directly translates
-to the <A HREF="../../docs/api_c/lock_id.html">lock_id</A> DB call.
-<HR WIDTH="100%">
-<BR><A NAME="> <env> lock_get"></A><B>> &lt;env> lock_get [-nowait]<I>lockmode
-locker obj</I></B>
-<P>This command gets a lock. It will invoke the <A HREF="../../docs/api_c/lock_get.html">lock_get</A>
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_id"></a><b>> &lt;env> lock_id</b>
+<p>This command returns a unique locker ID value.&nbsp; It directly translates
+to the <a href="../../docs/api_c/lock_id.html">lock_id</a> DB call.
+<br>
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_id"></a><b>> &lt;env> lock_id_free&nbsp; </b><i>locker</i>
+<p>This command frees the locker allockated by the lock_id call. It directly
+translates to the&nbsp; <a href="../../docs/api_c/lock_id.html">lock_id_free
+</a>DB
+call.
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_id"></a><b>> &lt;env> lock_id_set&nbsp; </b><i>current
+max</i>
+<p>This&nbsp; is a diagnostic command to set the locker id that will get
+allocated next and the maximum id that
+<br>will trigger the id reclaim algorithm.
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_get"></a><b>> &lt;env> lock_get [-nowait]<i>lockmode
+locker obj</i></b>
+<p>This command gets a lock. It will invoke the <a href="../../docs/api_c/lock_get.html">lock_get</a>
function.&nbsp; After it successfully gets a handle to a lock, we bind
-it to a new Tcl command of the form <B><I>$env.lockX</I></B>, where X is
-an integer starting at&nbsp; 0 (e.g. <B>$env.lock0, $env.lock1, </B>etc).&nbsp;
-We use the <I>Tcl_CreateObjCommand()</I> to create the top level locking
+it to a new Tcl command of the form <b><i>$env.lockX</i></b>, where X is
+an integer starting at&nbsp; 0 (e.g. <b>$env.lock0, $env.lock1, </b>etc).&nbsp;
+We use the <i>Tcl_CreateObjCommand()</i> to create the top level locking
command function.&nbsp; It is through this handle that the user can release
the lock.&nbsp; Internally, the handle we get back from DB will be stored
-as the <I>ClientData</I> portion of the new command set so that future
+as the <i>ClientData</i> portion of the new command set so that future
locking calls will have that handle readily available.
-<P>The arguments are:
-<UL>
-<LI>
-<B><I>locker</I></B> specifies the locker ID returned from the <A HREF="#> <env> lock_id">lock_id</A>
-command</LI>
+<p>The arguments are:
+<ul>
+<li>
+<b><i>locker</i></b> specifies the locker ID returned from the <a href="#> <env> lock_id">lock_id</a>
+command</li>
-<LI>
-<B><I>obj</I></B> specifies an object to lock</LI>
+<li>
+<b><i>obj</i></b> specifies an object to lock</li>
-<LI>
-the <B><I>lock mode</I></B> is specified as one of the following:</LI>
+<li>
+the <b><i>lock mode</i></b> is specified as one of the following:</li>
-<UL>
-<LI>
-<B>ng </B>specifies DB_LOCK_NG for not granted (always 0)</LI>
+<ul>
+<li>
+<b>ng </b>specifies DB_LOCK_NG for not granted (always 0)</li>
-<LI>
-<B>read</B> specifies DB_LOCK_READ for a read (shared) lock</LI>
+<li>
+<b>read</b> specifies DB_LOCK_READ for a read (shared) lock</li>
-<LI>
-<B>write</B> specifies DB_LOCK_WRITE for an exclusive write lock</LI>
+<li>
+<b>write</b> specifies DB_LOCK_WRITE for an exclusive write lock</li>
-<LI>
-<B>iwrite </B>specifies DB_LOCK_IWRITE for intent for exclusive write lock</LI>
+<li>
+<b>iwrite </b>specifies DB_LOCK_IWRITE for intent for exclusive write lock</li>
-<LI>
-<B>iread </B>specifies DB_LOCK_IREAD for intent for shared read lock</LI>
+<li>
+<b>iread </b>specifies DB_LOCK_IREAD for intent for shared read lock</li>
-<LI>
-<B>iwr </B>specifies DB_LOCK_IWR for intent for eread and write lock</LI>
-</UL>
+<li>
+<b>iwr </b>specifies DB_LOCK_IWR for intent for eread and write lock</li>
+</ul>
-<LI>
-<B>-nowait</B> selects the DB_LOCK_NOWAIT to indicate that we do not want
-to wait on the lock</LI>
-</UL>
+<li>
+<b>-nowait</b> selects the DB_LOCK_NOWAIT to indicate that we do not want
+to wait on the lock</li>
+</ul>
-<HR WIDTH="100%">
-<BR><B>> &lt;lock> put</B>
-<P>This command releases the lock referenced by the command.&nbsp; It is
-a direct translation of the <A HREF="../../docs/api_c/lock_put.html">lock_put</A>
+<hr WIDTH="100%">
+<br><b>> &lt;lock> put</b>
+<p>This command releases the lock referenced by the command.&nbsp; It is
+a direct translation of the <a href="../../docs/api_c/lock_put.html">lock_put</a>
function.&nbsp; It returns either a 0 (for success), a DB error message
or it throws a Tcl error with a system message.&nbsp; Additionally, since
the handle is no longer valid, we will call
-<I>Tcl_DeleteCommand()
-</I>so
+<i>Tcl_DeleteCommand()
+</i>so
that further uses of the handle will be dealt with properly by Tcl itself.
-<BR>
-<HR WIDTH="100%">
-<BR><A NAME="> <env> lock_vec"></A><B>> &lt;env> lock_vec [-nowait] <I>locker
-</I>{get|put|put_all|put_obj
-[<I>obj</I>] [<I>lockmode</I>] [<I>lock</I>]} ...</B>
-<P>This command performs a series of lock calls.&nbsp; It is a direct translation
-of the <A HREF="../../docs/api_c/lock_vec.html">lock_vec</A> function.&nbsp;
+<br>
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_vec"></a><b>> &lt;env> lock_vec [-nowait] <i>locker
+</i>{get|put|put_all|put_obj
+[<i>obj</i>] [<i>lockmode</i>] [<i>lock</i>]} ...</b>
+<p>This command performs a series of lock calls.&nbsp; It is a direct translation
+of the <a href="../../docs/api_c/lock_vec.html">lock_vec</a> function.&nbsp;
This command will return a list of the return values from each operation
specified in the argument list.&nbsp; For the 'put' operations the entry
in the return value list is either a 0 (for success) or an error.&nbsp;
-For the 'get' operation, the entry is the lock widget handle, <B>$env.lockN</B>
-(as described above in <A HREF="#> <env> lock_get">&lt;env> lock_get</A>)
+For the 'get' operation, the entry is the lock widget handle, <b>$env.lockN</b>
+(as described above in <a href="#> <env> lock_get">&lt;env> lock_get</a>)
or an error.&nbsp; If an error occurs, the return list will contain the
return values for all the successful operations up the erroneous one and
the error code for that operation.&nbsp; Subsequent operations will be
ignored.
-<P>As for the other operations, if we are doing a 'get' we will create
+<p>As for the other operations, if we are doing a 'get' we will create
the commands and if we are doing a 'put' we will have to delete the commands.&nbsp;
Additionally, we will have to do this after the call to the DB lock_vec
and iterate over the results, creating and/or deleting Tcl commands.&nbsp;
It is possible that we may return a lock widget from a get operation that
-is considered invalid, if, for instance, there was a <B>put_all</B> operation
+is considered invalid, if, for instance, there was a <b>put_all</b> operation
performed later in the vector of operations.&nbsp; The arguments are:
-<UL>
-<LI>
-<B><I>locker</I></B> specifies the locker ID returned from the <A HREF="#> <env> lock_id">lock_id</A>
-command</LI>
+<ul>
+<li>
+<b><i>locker</i></b> specifies the locker ID returned from the <a href="#> <env> lock_id">lock_id</a>
+command</li>
-<LI>
-<B>-nowait</B> selects the DB_LOCK_NOWAIT to indicate that we do not want
-to wait on the lock</LI>
+<li>
+<b>-nowait</b> selects the DB_LOCK_NOWAIT to indicate that we do not want
+to wait on the lock</li>
-<LI>
+<li>
the lock vectors are tuple consisting of {an operation, lock object, lock
-mode, lock handle} where what is required is based on the operation desired:</LI>
-
-<UL>
-<LI>
-<B>get</B> specifes DB_LOCK_GET to get a lock.&nbsp; Requires a tuple <B>{get
-<I>obj</I>
-<I>mode</I>}
-</B>where
-<B><I>mode</I></B>
-is:</LI>
-
-<UL>
-<LI>
-<B>ng </B>specifies DB_LOCK_NG for not granted (always 0)</LI>
-
-<LI>
-<B>read</B> specifies DB_LOCK_READ for a read (shared) lock</LI>
-
-<LI>
-<B>write</B> specifies DB_LOCK_WRITE for an exclusive write lock</LI>
-
-<LI>
-<B>iwrite </B>specifies DB_LOCK_IWRITE for intent for exclusive write lock</LI>
-
-<LI>
-<B>iread </B>specifies DB_LOCK_IREAD for intent for shared read lock</LI>
-
-<LI>
-<B>iwr </B>specifies DB_LOCK_IWR for intent for eread and write lock</LI>
-</UL>
-
-<LI>
-<B>put</B> specifies DB_LOCK_PUT to release a <B><I>lock</I></B>.&nbsp;
-Requires a tuple <B>{put <I>lock}</I></B></LI>
-
-<LI>
-<B>put_all </B>specifies DB_LOCK_PUT_ALL to release all locks held by <B><I>locker</I></B>.&nbsp;
-Requires a tuple <B>{put_all}</B></LI>
-
-<LI>
-<B>put_obj</B> specifies DB_LOCK_PUT_OBJ to release all locks held by <B><I>locker</I></B>
-associated with the given <B><I>obj</I></B>.&nbsp; Requires a tuple <B>{put_obj
-<I>obj</I>}</B></LI>
-</UL>
-</UL>
+mode, lock handle} where what is required is based on the operation desired:</li>
+
+<ul>
+<li>
+<b>get</b> specifes DB_LOCK_GET to get a lock.&nbsp; Requires a tuple <b>{get
+<i>objmode</i>}
+</b>where
+<b><i>mode</i></b>
+is:</li>
+
+<ul>
+<li>
+<b>ng </b>specifies DB_LOCK_NG for not granted (always 0)</li>
+
+<li>
+<b>read</b> specifies DB_LOCK_READ for a read (shared) lock</li>
+
+<li>
+<b>write</b> specifies DB_LOCK_WRITE for an exclusive write lock</li>
+
+<li>
+<b>iwrite </b>specifies DB_LOCK_IWRITE for intent for exclusive write lock</li>
+
+<li>
+<b>iread </b>specifies DB_LOCK_IREAD for intent for shared read lock</li>
+
+<li>
+<b>iwr </b>specifies DB_LOCK_IWR for intent for eread and write lock</li>
+</ul>
+
+<li>
+<b>put</b> specifies DB_LOCK_PUT to release a <b><i>lock</i></b>.&nbsp;
+Requires a tuple <b>{put <i>lock}</i></b></li>
+
+<li>
+<b>put_all </b>specifies DB_LOCK_PUT_ALL to release all locks held by <b><i>locker</i></b>.&nbsp;
+Requires a tuple <b>{put_all}</b></li>
+
+<li>
+<b>put_obj</b> specifies DB_LOCK_PUT_OBJ to release all locks held by <b><i>locker</i></b>
+associated with the given <b><i>obj</i></b>.&nbsp; Requires a tuple <b>{put_obj
+<i>obj}</i></b></li>
+</ul>
+</ul>
+
+<hr WIDTH="100%">
+<br><a NAME="> <env> lock_vec"></a><b>> &lt;env> lock_timeout <i>timeout</i></b>
+<p>This command sets the lock timeout for all future locks in this environment.&nbsp;
+The timeout is in micorseconds.
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>
diff --git a/db/tcl/docs/log.html b/db/tcl/docs/log.html
index 35ecfc2f5..de9edb838 100644
--- a/db/tcl/docs/log.html
+++ b/db/tcl/docs/log.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
@@ -100,7 +101,7 @@ given <B><I>lsn</I></B></LI>
<HR WIDTH="100%">
<BR><A NAME="> <env> log_put"></A><B>> &lt;env> log_put<I> </I>[-checkpoint]
-[-curlsn] [-flush] <I>record</I></B>
+[-flush] <I>record</I></B>
<P>This command stores a <B><I>record</I></B> into the log and returns
the LSN of the log record.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/log_put.html">log_put</A>
function.&nbsp; It returns either an LSN or it throws a Tcl error with
@@ -110,29 +111,10 @@ a system message.&nbsp;<B> </B>The arguments are:
<B>-checkpoint </B>selects the DB_CHECKPOINT flag</LI>
<LI>
-<B>-curlsn</B> selects the DB_CURLSN flag to return the LSN of the next
-record</LI>
-
-<LI>
<B>-flush </B>selects the DB_FLUSH flag to flush the log to disk.</LI>
</UL>
<HR WIDTH="100%">
-<BR><A NAME="> <env> log_register"></A><B>> &lt;env> log_register <I>db</I>
-<I>file</I></B>
-<P>This command registers a <B><I>file</I></B> and <B><I>db</I></B> with
-the log manager.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/log_register.html">log_register</A>
-function.&nbsp; It returns either a 0 (for success), a DB error message
-or it throws a Tcl error with a system message.
-<BR>
-<HR WIDTH="100%">
-<BR><A NAME="> <env> log_unregister"></A><B>> &lt;env> log_unregister <I>db</I></B>
-<P>This command unregisters the file specified by the database handle <B><I>db
-</I></B>from the log manager.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/log_unregister.html">log_unregister</A>
-function.&nbsp; It returns either a 0 (for success), a DB error message
-or it throws a Tcl error with a system message.
-<BR>
-<HR WIDTH="100%">
<BR><B>> &lt;env> log_stat</B>
<P>This command returns&nbsp; the statistics associated with the logging
subsystem.&nbsp; It is a direct call to the <A HREF="../../docs/api_c/log_stat.html">log_stat</A>
diff --git a/db/tcl/docs/mpool.html b/db/tcl/docs/mpool.html
index 666219306..84bb7beaa 100644
--- a/db/tcl/docs/mpool.html
+++ b/db/tcl/docs/mpool.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
diff --git a/db/tcl/docs/rep.html b/db/tcl/docs/rep.html
index 079fe443a..47686d3d5 100644
--- a/db/tcl/docs/rep.html
+++ b/db/tcl/docs/rep.html
@@ -1,4 +1,4 @@
-<!--Copyright 1999-2002 by Sleepycat Software, Inc.-->
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
<!--All rights reserved.-->
<html>
<head>
diff --git a/db/tcl/docs/test.html b/db/tcl/docs/test.html
index 10cf09efb..cfaaf0de3 100644
--- a/db/tcl/docs/test.html
+++ b/db/tcl/docs/test.html
@@ -1,4 +1,5 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
diff --git a/db/tcl/docs/txn.html b/db/tcl/docs/txn.html
index 863c9a875..0a6b6f7dd 100644
--- a/db/tcl/docs/txn.html
+++ b/db/tcl/docs/txn.html
@@ -1,56 +1,70 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
- <META NAME="GENERATOR" CONTENT="Mozilla/4.08 [en] (X11; I; FreeBSD 2.2.8-19990120-SNAP i386) [Netscape]">
-</HEAD>
-<BODY>
+<!--Copyright 1999-2003 by Sleepycat Software, Inc.-->
+<!--All rights reserved.-->
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="GENERATOR" content="Mozilla/4.75 [en] (X11; U; Linux 2.2.16-22 i686) [Netscape]">
+</head>
+<body>
-<H2>
-<A NAME="Transaction Commands"></A>Transaction Commands</H2>
+<h2>
+<a NAME="Transaction Commands"></a>Transaction Commands</h2>
Transactions are used in a manner similar to the other subsystems.&nbsp;
We create a handle to the transaction and&nbsp; then use it for a variety
of operations.&nbsp; Some of the transaction commands use the environment
instead.&nbsp; Those are presented first.&nbsp; The transaction command
handle returned is the handle used by the various commands that can be
-transaction protected, such as <A HREF="../../docs/api_tcl/db_cursor.html">cursors</A>.<BR>
-
-<HR WIDTH="100%">
-<P><B>> &lt;env> txn_checkpoint [-kbyte <I>kb</I>] [-min <I>min</I>]</B>
-<P>This command causes a checkpoint of the transaction region.&nbsp; It
-is a direct translation of the <A HREF="../../docs/api_c/txn_checkpoint.html">txn_checkpoint
-</A>function.&nbsp;
+transaction protected, such as <a href="../../docs/api_tcl/db_cursor.html">cursors</a>.
+<br>
+<hr WIDTH="100%">
+<p><b>> &lt;env> txn_checkpoint [-kbyte <i>kb</i>] [-min <i>min</i>]</b>
+<p>This command causes a checkpoint of the transaction region.&nbsp; It
+is a direct translation of the <a href="../../docs/api_c/txn_checkpoint.html">txn_checkpoint
+</a>function.&nbsp;
It returns either a 0 (for success), a DB error message or it throws a
Tcl error with a system message.&nbsp; The arguments are:
-<UL>
-<LI>
-<B>-kbyte </B>causes the checkpoint to occur only if <B><I>kb</I></B> kilobytes
-of log data has been written since the last checkpoint</LI>
+<ul>
+<li>
+<b>-force</b>causes the checkpoint to occur regardless of inactivity
+
+<li>
+<b>-kbyte</b>causes the checkpoint to occur only if <b><i>kb</i></b> kilobytes
+of log data has been written since the last checkpoint
-<LI>
-<B>-min</B> causes the checkpoint to occur only if <B><I>min</I></B> minutes
-have passed since the last checkpoint</LI>
-</UL>
+<li>
+<b>-min</b> causes the checkpoint to occur only if <b><i>min</i></b> minutes
+have passed since the last checkpoint
+</ul>
-<HR WIDTH="100%">
-<BR><B>> &lt;env> txn_stat</B>
-<P>This command returns transaction statistics.&nbsp; It is a direct translation
-of the <A HREF="../../docs/api_c/txn_stat.html">txn_stat</A> function.&nbsp;
+<hr WIDTH="100%">
+<br><b>> &lt;env> txn_stat</b>
+<p>This command returns transaction statistics.&nbsp; It is a direct translation
+of the <a href="../../docs/api_c/txn_stat.html">txn_stat</a> function.&nbsp;
It will return a list of name/value pairs that correspond to the DB_TXN_STAT
structure.
-<HR WIDTH="100%">
-<BR><B>>&nbsp; &lt;txn> id</B>
-<P>This command returns the transaction id.&nbsp; It is a direct call to
-the <A HREF="../../docs/api_c/txn_id.html">txn_id</A> function.&nbsp; The
-typical use of this identifier is as the <B><I>locker</I></B> value for
-the <A HREF="lock.html">lock_get</A> and <A HREF="lock.html">lock_vec</A>
+<hr WIDTH="100%">
+<br><b>> &lt;env> txn_id_set&nbsp;</b><i> current max</i>
+<p>This is a diagnosic command that sets the next transaction id to be
+allocated and the maximum transaction
+<br>id, which is the point at which the relcaimation algorthm is triggered.
+<hr WIDTH="100%">
+<br><b>>&nbsp; &lt;txn> id</b>
+<p>This command returns the transaction id.&nbsp; It is a direct call to
+the <a href="../../docs/api_c/txn_id.html">txn_id</a> function.&nbsp; The
+typical use of this identifier is as the <b><i>locker</i></b> value for
+the <a href="lock.html">lock_get</a> and <a href="lock.html">lock_vec</a>
calls.
-<HR WIDTH="100%">
-<BR><B>> &lt;txn> prepare</B>
-<P>This command initiates a two-phase commit.&nbsp; It is a direct call
-to the <A HREF="../../docs/api_c/txn_prepare.html">txn_prepare</A> function.&nbsp;
+<hr WIDTH="100%">
+<br><b>> &lt;txn> prepare</b>
+<p>This command initiates a two-phase commit.&nbsp; It is a direct call
+to the <a href="../../docs/api_c/txn_prepare.html">txn_prepare</a> function.&nbsp;
It returns either a 0 (for success), a DB error message or it throws a
Tcl error with a system message.
-<HR WIDTH="100%">
-</BODY>
-</HTML>
+<hr WIDTH="100%"><a NAME="> <env> lock_vec"></a><b>> &lt;env> txn_timeout
+<i>timeout</i></b>
+<p>This command sets thetransaction timeout for transactions started in
+the future in this environment.&nbsp; The timeout is in micorseconds.
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>
diff --git a/db/tcl/tcl_compat.c b/db/tcl/tcl_compat.c
index 41caee95c..8a25c618b 100644
--- a/db/tcl/tcl_compat.c
+++ b/db/tcl/tcl_compat.c
@@ -1,16 +1,18 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_compat.c,v 11.22 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: tcl_compat.c,v 11.41 2003/03/10 18:22:09 bostic Exp $";
#endif /* not lint */
+#if CONFIG_TEST
+
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
@@ -23,12 +25,7 @@ static const char revid[] = "$Id: tcl_compat.c,v 11.22 2001/01/11 18:19:55 bosti
#define DB_DBM_HSEARCH 1
#include "db_int.h"
-#include "tcl_db.h"
-
-/*
- * Prototypes for procedures defined later in this file:
- */
-static int mutex_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
+#include "dbinc/tcl_db.h"
/*
* bdb_HCommand --
@@ -42,7 +39,7 @@ bdb_HCommand(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *hcmds[] = {
+ static const char *hcmds[] = {
"hcreate",
"hdestroy",
"hsearch",
@@ -53,7 +50,7 @@ bdb_HCommand(interp, objc, objv)
HHDESTROY,
HHSEARCH
};
- static char *srchacts[] = {
+ static const char *srchacts[] = {
"enter",
"find",
NULL
@@ -91,7 +88,7 @@ bdb_HCommand(interp, objc, objv)
if (result == TCL_OK) {
_debug_check();
ret = hcreate(nelem) == 0 ? 1: 0;
- _ReturnSetup(interp, ret, "hcreate");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "hcreate");
}
break;
case HHSEARCH:
@@ -104,17 +101,17 @@ bdb_HCommand(interp, objc, objv)
}
item.key = Tcl_GetStringFromObj(objv[2], NULL);
item.data = Tcl_GetStringFromObj(objv[3], NULL);
- action = 0;
if (Tcl_GetIndexFromObj(interp, objv[4], srchacts,
"action", TCL_EXACT, &actindex) != TCL_OK)
return (IS_HELP(objv[4]));
switch ((enum srchacts)actindex) {
- case ACT_FIND:
- action = FIND;
- break;
case ACT_ENTER:
action = ENTER;
break;
+ default:
+ case ACT_FIND:
+ action = FIND;
+ break;
}
_debug_check();
hres = hsearch(item, action);
@@ -165,7 +162,7 @@ bdb_NdbmOpen(interp, objc, objv, dbpp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DBM **dbpp; /* Dbm pointer */
{
- static char *ndbopen[] = {
+ static const char *ndbopen[] = {
"-create",
"-mode",
"-rdonly",
@@ -182,7 +179,7 @@ bdb_NdbmOpen(interp, objc, objv, dbpp)
};
u_int32_t open_flags;
- int endarg, i, mode, optindex, read_only, result;
+ int endarg, i, mode, optindex, read_only, result, ret;
char *arg, *db;
result = TCL_OK;
@@ -281,7 +278,9 @@ bdb_NdbmOpen(interp, objc, objv, dbpp)
open_flags |= O_RDWR;
_debug_check();
if ((*dbpp = dbm_open(db, open_flags, mode)) == NULL) {
- result = _ReturnSetup(interp, Tcl_GetErrno(), "db open");
+ ret = Tcl_GetErrno();
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db open");
goto error;
}
return (TCL_OK);
@@ -308,7 +307,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
int flag; /* Which db interface */
DBM *dbm; /* DBM pointer */
{
- static char *dbmcmds[] = {
+ static const char *dbmcmds[] = {
"dbmclose",
"dbminit",
"delete",
@@ -327,7 +326,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
DBMNEXT,
DBMSTORE
};
- static char *stflag[] = {
+ static const char *stflag[] = {
"insert", "replace",
NULL
};
@@ -335,10 +334,13 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
STINSERT, STREPLACE
};
datum key, data;
- int cmdindex, stindex, result, ret;
+ void *dtmp, *ktmp;
+ u_int32_t size;
+ int cmdindex, freedata, freekey, stindex, result, ret;
char *name, *t;
result = TCL_OK;
+ freekey = freedata = 0;
/*
* Get the command name index from the object based on the cmds
* defined above. This SHOULD NOT fail because we already checked
@@ -365,7 +367,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
"Bad interface flag for command", TCL_STATIC);
return (TCL_ERROR);
}
- _ReturnSetup(interp, ret, "dbmclose");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "dbmclose");
break;
case DBMINIT:
/*
@@ -383,7 +385,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
TCL_STATIC);
return (TCL_ERROR);
}
- _ReturnSetup(interp, ret, "dbminit");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "dbminit");
break;
case DBMFETCH:
/*
@@ -393,7 +395,14 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
Tcl_WrongNumArgs(interp, 2, objv, "key");
return (TCL_ERROR);
}
- key.dptr = (char *)Tcl_GetByteArrayFromObj(objv[2], &key.dsize);
+ if ((ret = _CopyObjBytes(
+ interp, objv[2], &ktmp, &size, &freekey)) != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "dbm fetch");
+ goto out;
+ }
+ key.dsize = size;
+ key.dptr = (char *)ktmp;
_debug_check();
if (flag == DBTCL_DBM)
data = fetch(key);
@@ -402,16 +411,17 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
else {
Tcl_SetResult(interp,
"Bad interface flag for command", TCL_STATIC);
- return (TCL_ERROR);
+ result = TCL_ERROR;
+ goto out;
}
if (data.dptr == NULL ||
- (ret = __os_malloc(NULL, data.dsize + 1, NULL, &t)) != 0)
+ (ret = __os_malloc(NULL, data.dsize + 1, &t)) != 0)
Tcl_SetResult(interp, "-1", TCL_STATIC);
else {
memcpy(t, data.dptr, data.dsize);
t[data.dsize] = '\0';
Tcl_SetResult(interp, t, TCL_VOLATILE);
- __os_free(t, data.dsize + 1);
+ __os_free(NULL, t);
}
break;
case DBMSTORE:
@@ -426,9 +436,22 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
Tcl_WrongNumArgs(interp, 2, objv, "key data action");
return (TCL_ERROR);
}
- key.dptr = (char *)Tcl_GetByteArrayFromObj(objv[2], &key.dsize);
- data.dptr =
- (char *)Tcl_GetByteArrayFromObj(objv[3], &data.dsize);
+ if ((ret = _CopyObjBytes(
+ interp, objv[2], &ktmp, &size, &freekey)) != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "dbm fetch");
+ goto out;
+ }
+ key.dsize = size;
+ key.dptr = (char *)ktmp;
+ if ((ret = _CopyObjBytes(
+ interp, objv[3], &dtmp, &size, &freedata)) != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "dbm fetch");
+ goto out;
+ }
+ data.dsize = size;
+ data.dptr = (char *)dtmp;
_debug_check();
if (flag == DBTCL_DBM)
ret = store(key, data);
@@ -450,7 +473,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
"Bad interface flag for command", TCL_STATIC);
return (TCL_ERROR);
}
- _ReturnSetup(interp, ret, "store");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "store");
break;
case DBMDELETE:
/*
@@ -460,7 +483,14 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
Tcl_WrongNumArgs(interp, 2, objv, "key");
return (TCL_ERROR);
}
- key.dptr = (char *)Tcl_GetByteArrayFromObj(objv[2], &key.dsize);
+ if ((ret = _CopyObjBytes(
+ interp, objv[2], &ktmp, &size, &freekey)) != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "dbm fetch");
+ goto out;
+ }
+ key.dsize = size;
+ key.dptr = (char *)ktmp;
_debug_check();
if (flag == DBTCL_DBM)
ret = delete(key);
@@ -471,7 +501,7 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
"Bad interface flag for command", TCL_STATIC);
return (TCL_ERROR);
}
- _ReturnSetup(interp, ret, "delete");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "delete");
break;
case DBMFIRST:
/*
@@ -492,13 +522,13 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
return (TCL_ERROR);
}
if (key.dptr == NULL ||
- (ret = __os_malloc(NULL, key.dsize + 1, NULL, &t)) != 0)
+ (ret = __os_malloc(NULL, key.dsize + 1, &t)) != 0)
Tcl_SetResult(interp, "-1", TCL_STATIC);
else {
memcpy(t, key.dptr, key.dsize);
t[key.dsize] = '\0';
Tcl_SetResult(interp, t, TCL_VOLATILE);
- __os_free(t, key.dsize + 1);
+ __os_free(NULL, t);
}
break;
case DBMNEXT:
@@ -511,8 +541,14 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
Tcl_WrongNumArgs(interp, 2, objv, NULL);
return (TCL_ERROR);
}
- key.dptr = (char *)
- Tcl_GetByteArrayFromObj(objv[2], &key.dsize);
+ if ((ret = _CopyObjBytes(
+ interp, objv[2], &ktmp, &size, &freekey)) != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "dbm fetch");
+ goto out;
+ }
+ key.dsize = size;
+ key.dptr = (char *)ktmp;
data = nextkey(key);
} else if (flag == DBTCL_NDBM) {
if (objc != 2) {
@@ -526,16 +562,21 @@ bdb_DbmCommand(interp, objc, objv, flag, dbm)
return (TCL_ERROR);
}
if (data.dptr == NULL ||
- (ret = __os_malloc(NULL, data.dsize + 1, NULL, &t)) != 0)
+ (ret = __os_malloc(NULL, data.dsize + 1, &t)) != 0)
Tcl_SetResult(interp, "-1", TCL_STATIC);
else {
memcpy(t, data.dptr, data.dsize);
t[data.dsize] = '\0';
Tcl_SetResult(interp, t, TCL_VOLATILE);
- __os_free(t, data.dsize + 1);
+ __os_free(NULL, t);
}
break;
}
+out:
+ if (freedata)
+ (void)__os_free(NULL, dtmp);
+ if (freekey)
+ (void)__os_free(NULL, ktmp);
return (result);
}
@@ -552,7 +593,7 @@ ndbm_Cmd(clientData, interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *ndbcmds[] = {
+ static const char *ndbcmds[] = {
"clearerr",
"close",
"delete",
@@ -636,7 +677,8 @@ ndbm_Cmd(clientData, interp, objc, objv)
_debug_check();
ret = dbm_clearerr(dbp);
if (ret)
- _ReturnSetup(interp, ret, "clearerr");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "clearerr");
else
res = Tcl_NewIntObj(ret);
break;
@@ -675,7 +717,8 @@ ndbm_Cmd(clientData, interp, objc, objv)
_debug_check();
ret = dbm_error(dbp);
Tcl_SetErrno(ret);
- Tcl_SetResult(interp, Tcl_PosixError(interp), TCL_STATIC);
+ Tcl_SetResult(interp,
+ (char *)Tcl_PosixError(interp), TCL_STATIC);
break;
case NDBRDONLY:
/*
@@ -688,7 +731,7 @@ ndbm_Cmd(clientData, interp, objc, objv)
_debug_check();
ret = dbm_rdonly(dbp);
if (ret)
- _ReturnSetup(interp, ret, "rdonly");
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "rdonly");
else
res = Tcl_NewIntObj(ret);
break;
@@ -701,355 +744,4 @@ ndbm_Cmd(clientData, interp, objc, objv)
Tcl_SetObjResult(interp, res);
return (result);
}
-
-/*
- * bdb_RandCommand --
- * Implements rand* functions.
- *
- * PUBLIC: int bdb_RandCommand __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
- */
-int
-bdb_RandCommand(interp, objc, objv)
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
-{
- static char *rcmds[] = {
- "rand", "random_int", "srand",
- NULL
- };
- enum rcmds {
- RRAND, RRAND_INT, RSRAND
- };
- long t;
- int cmdindex, hi, lo, result, ret;
- Tcl_Obj *res;
- char msg[MSG_SIZE];
-
- result = TCL_OK;
- /*
- * Get the command name index from the object based on the cmds
- * defined above. This SHOULD NOT fail because we already checked
- * in the 'berkdb' command.
- */
- if (Tcl_GetIndexFromObj(interp,
- objv[1], rcmds, "command", TCL_EXACT, &cmdindex) != TCL_OK)
- return (IS_HELP(objv[1]));
-
- res = NULL;
- switch ((enum rcmds)cmdindex) {
- case RRAND:
- /*
- * Must be 0 args. Error if different.
- */
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 2, objv, NULL);
- return (TCL_ERROR);
- }
- ret = rand();
- res = Tcl_NewIntObj(ret);
- break;
- case RRAND_INT:
- /*
- * Must be 4 args. Error if different.
- */
- if (objc != 4) {
- Tcl_WrongNumArgs(interp, 2, objv, "lo hi");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &lo);
- if (result != TCL_OK)
- break;
- result = Tcl_GetIntFromObj(interp, objv[3], &hi);
- if (result == TCL_OK) {
-#ifndef RAND_MAX
-#define RAND_MAX 0x7fffffff
-#endif
- t = rand();
- if (t > RAND_MAX) {
- snprintf(msg, MSG_SIZE,
- "Max random is higher than %ld\n",
- (long)RAND_MAX);
- Tcl_SetResult(interp, msg, TCL_VOLATILE);
- result = TCL_ERROR;
- break;
- }
- _debug_check();
- ret = (int)(((double)t / ((double)(RAND_MAX) + 1)) *
- (hi - lo + 1));
- ret += lo;
- res = Tcl_NewIntObj(ret);
- }
- break;
- case RSRAND:
- /*
- * Must be 1 arg. Error if different.
- */
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "seed");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &lo);
- if (result == TCL_OK) {
- srand((u_int)lo);
- res = Tcl_NewIntObj(0);
- }
- break;
- }
- /*
- * Only set result if we have a res. Otherwise, lower
- * functions have already done so.
- */
- if (result == TCL_OK && res)
- Tcl_SetObjResult(interp, res);
- return (result);
-}
-
-/*
- *
- * tcl_Mutex --
- * Opens an env mutex.
- *
- * PUBLIC: int tcl_Mutex __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *,
- * PUBLIC: DBTCL_INFO *));
- */
-int
-tcl_Mutex(interp, objc, objv, envp, envip)
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
- DB_ENV *envp; /* Environment pointer */
- DBTCL_INFO *envip; /* Info pointer */
-{
- DBTCL_INFO *ip;
- Tcl_Obj *res;
- _MUTEX_DATA *md;
- int i, mode, nitems, result, ret;
- char newname[MSG_SIZE];
-
- md = NULL;
- result = TCL_OK;
- mode = nitems = ret = 0;
- memset(newname, 0, MSG_SIZE);
-
- if (objc != 4) {
- Tcl_WrongNumArgs(interp, 2, objv, "mode nitems");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &mode);
- if (result != TCL_OK)
- return (TCL_ERROR);
- result = Tcl_GetIntFromObj(interp, objv[3], &nitems);
- if (result != TCL_OK)
- return (TCL_ERROR);
-
- snprintf(newname, sizeof(newname),
- "%s.mutex%d", envip->i_name, envip->i_envmutexid);
- ip = _NewInfo(interp, NULL, newname, I_MUTEX);
- if (ip == NULL) {
- Tcl_SetResult(interp, "Could not set up info",
- TCL_STATIC);
- return (TCL_ERROR);
- }
- /*
- * Set up mutex.
- */
- /*
- * Map in the region.
- *
- * XXX
- * We don't bother doing this "right", i.e., using the shalloc
- * functions, just grab some memory knowing that it's correctly
- * aligned.
- */
- _debug_check();
- if (__os_calloc(NULL, 1, sizeof(_MUTEX_DATA), &md) != 0)
- goto posixout;
- md->env = envp;
- md->n_mutex = nitems;
- md->size = sizeof(_MUTEX_ENTRY) * nitems;
-
- md->reginfo.type = REGION_TYPE_MUTEX;
- md->reginfo.id = INVALID_REGION_TYPE;
- md->reginfo.mode = mode;
- md->reginfo.flags = REGION_CREATE_OK | REGION_JOIN_OK;
- if ((ret = __db_r_attach(envp, &md->reginfo, md->size)) != 0)
- goto posixout;
- md->marray = md->reginfo.addr;
-
- /* Initialize a created region. */
- if (F_ISSET(&md->reginfo, REGION_CREATE))
- for (i = 0; i < nitems; i++) {
- md->marray[i].val = 0;
- if ((ret =
- __db_mutex_init(envp, &md->marray[i].m, i, 0)) != 0)
- goto posixout;
- }
- R_UNLOCK(envp, &md->reginfo);
-
- /*
- * Success. Set up return. Set up new info
- * and command widget for this mutex.
- */
- envip->i_envmutexid++;
- ip->i_parent = envip;
- _SetInfoData(ip, md);
- Tcl_CreateObjCommand(interp, newname,
- (Tcl_ObjCmdProc *)mutex_Cmd, (ClientData)md, NULL);
- res = Tcl_NewStringObj(newname, strlen(newname));
- Tcl_SetObjResult(interp, res);
-
- return (TCL_OK);
-
-posixout:
- if (ret > 0)
- Tcl_PosixError(interp);
- result = _ReturnSetup(interp, ret, "mutex");
- _DeleteInfo(ip);
-
- if (md != NULL) {
- if (md->reginfo.addr != NULL)
- (void)__db_r_detach(md->env,
- &md->reginfo, F_ISSET(&md->reginfo, REGION_CREATE));
- __os_free(md, sizeof(*md));
- }
- return (result);
-}
-
-/*
- * mutex_Cmd --
- * Implements the "mutex" widget.
- */
-static int
-mutex_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Mutex handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
-{
- static char *mxcmds[] = {
- "close",
- "get",
- "getval",
- "release",
- "setval",
- NULL
- };
- enum mxcmds {
- MXCLOSE,
- MXGET,
- MXGETVAL,
- MXRELE,
- MXSETVAL
- };
- DB_ENV *dbenv;
- DBTCL_INFO *envip, *mpip;
- _MUTEX_DATA *mp;
- Tcl_Obj *res;
- int cmdindex, id, result, newval;
-
- Tcl_ResetResult(interp);
- mp = (_MUTEX_DATA *)clientData;
- mpip = _PtrToInfo((void *)mp);
- envip = mpip->i_parent;
- dbenv = envip->i_envp;
- result = TCL_OK;
-
- if (mp == NULL) {
- Tcl_SetResult(interp, "NULL mp pointer", TCL_STATIC);
- return (TCL_ERROR);
- }
- if (mpip == NULL) {
- Tcl_SetResult(interp, "NULL mp info pointer", TCL_STATIC);
- return (TCL_ERROR);
- }
-
- /*
- * Get the command name index from the object based on the dbcmds
- * defined above.
- */
- if (Tcl_GetIndexFromObj(interp,
- objv[1], mxcmds, "command", TCL_EXACT, &cmdindex) != TCL_OK)
- return (IS_HELP(objv[1]));
-
- res = NULL;
- switch ((enum mxcmds)cmdindex) {
- case MXCLOSE:
- if (objc != 2) {
- Tcl_WrongNumArgs(interp, 1, objv, NULL);
- return (TCL_ERROR);
- }
- _debug_check();
- (void)__db_r_detach(mp->env, &mp->reginfo, 0);
- res = Tcl_NewIntObj(0);
- (void)Tcl_DeleteCommand(interp, mpip->i_name);
- _DeleteInfo(mpip);
- __os_free(mp, sizeof(*mp));
- break;
- case MXRELE:
- /*
- * Check for 1 arg. Error if different.
- */
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "id");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &id);
- if (result != TCL_OK)
- break;
- MUTEX_UNLOCK(dbenv, &mp->marray[id].m);
- res = Tcl_NewIntObj(0);
- break;
- case MXGET:
- /*
- * Check for 1 arg. Error if different.
- */
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "id");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &id);
- if (result != TCL_OK)
- break;
- MUTEX_LOCK(dbenv, &mp->marray[id].m, mp->env->lockfhp);
- res = Tcl_NewIntObj(0);
- break;
- case MXGETVAL:
- /*
- * Check for 1 arg. Error if different.
- */
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "id");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &id);
- if (result != TCL_OK)
- break;
- res = Tcl_NewIntObj(mp->marray[id].val);
- break;
- case MXSETVAL:
- /*
- * Check for 2 args. Error if different.
- */
- if (objc != 4) {
- Tcl_WrongNumArgs(interp, 2, objv, "id val");
- return (TCL_ERROR);
- }
- result = Tcl_GetIntFromObj(interp, objv[2], &id);
- if (result != TCL_OK)
- break;
- result = Tcl_GetIntFromObj(interp, objv[3], &newval);
- if (result != TCL_OK)
- break;
- mp->marray[id].val = newval;
- res = Tcl_NewIntObj(0);
- break;
- }
- /*
- * Only set result if we have a res. Otherwise, lower
- * functions have already done so.
- */
- if (result == TCL_OK && res)
- Tcl_SetObjResult(interp, res);
- return (result);
-}
+#endif /* CONFIG_TEST */
diff --git a/db/tcl/tcl_db.c b/db/tcl/tcl_db.c
index 8e7215a27..c5270e656 100644
--- a/db/tcl/tcl_db.c
+++ b/db/tcl/tcl_db.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_db.c,v 11.55 2000/11/28 20:12:31 bostic Exp $";
+static const char revid[] = "$Id: tcl_db.c,v 11.128 2003/11/18 21:36:02 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,24 +20,66 @@ static const char revid[] = "$Id: tcl_db.c,v 11.55 2000/11/28 20:12:31 bostic Ex
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc/tcl_db.h"
/*
* Prototypes for procedures defined later in this file:
*/
+static int tcl_DbAssociate __P((Tcl_Interp *,
+ int, Tcl_Obj * CONST*, DB *));
static int tcl_DbClose __P((Tcl_Interp *,
int, Tcl_Obj * CONST*, DB *, DBTCL_INFO *));
static int tcl_DbDelete __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
-static int tcl_DbGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+static int tcl_DbGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *, int));
+#if CONFIG_TEST
static int tcl_DbKeyRange __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+#endif
static int tcl_DbPut __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
static int tcl_DbStat __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+static int tcl_DbTruncate __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
static int tcl_DbCursor __P((Tcl_Interp *,
int, Tcl_Obj * CONST*, DB *, DBC **));
static int tcl_DbJoin __P((Tcl_Interp *,
int, Tcl_Obj * CONST*, DB *, DBC **));
+static int tcl_DbGetFlags __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+static int tcl_DbGetOpenFlags __P((Tcl_Interp *,
+ int, Tcl_Obj * CONST*, DB *));
static int tcl_DbGetjoin __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
static int tcl_DbCount __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB *));
+static int tcl_second_call __P((DB *, const DBT *, const DBT *, DBT *));
+
+/*
+ * _DbInfoDelete --
+ *
+ * PUBLIC: void _DbInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
+ */
+void
+_DbInfoDelete(interp, dbip)
+ Tcl_Interp *interp;
+ DBTCL_INFO *dbip;
+{
+ DBTCL_INFO *nextp, *p;
+ /*
+ * First we have to close any open cursors. Then we close
+ * our db.
+ */
+ for (p = LIST_FIRST(&__db_infohead); p != NULL; p = nextp) {
+ nextp = LIST_NEXT(p, entries);
+ /*
+ * Check if this is a cursor info structure and if
+ * it is, if it belongs to this DB. If so, remove
+ * its commands and info structure.
+ */
+ if (p->i_parent == dbip && p->i_type == I_DBC) {
+ (void)Tcl_DeleteCommand(interp, p->i_name);
+ _DeleteInfo(p);
+ }
+ }
+ (void)Tcl_DeleteCommand(interp, dbip->i_name);
+ _DeleteInfo(dbip);
+}
/*
*
@@ -53,50 +95,95 @@ db_Cmd(clientData, interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *dbcmds[] = {
+ static const char *dbcmds[] = {
+#if CONFIG_TEST
+ "keyrange",
+ "pget",
+ "rpcid",
+ "test",
+#endif
+ "associate",
"close",
"count",
"cursor",
"del",
"get",
+ "get_bt_minkey",
+ "get_cachesize",
+ "get_dbname",
+ "get_encrypt_flags",
+ "get_env",
+ "get_errpfx",
+ "get_flags",
+ "get_h_ffactor",
+ "get_h_nelem",
"get_join",
+ "get_lorder",
+ "get_open_flags",
+ "get_pagesize",
+ "get_q_extentsize",
+ "get_re_delim",
+ "get_re_len",
+ "get_re_pad",
+ "get_re_source",
"get_type",
"is_byteswapped",
"join",
- "keyrange",
"put",
"stat",
"sync",
-#if CONFIG_TEST
- "test",
-#endif
+ "truncate",
NULL
};
enum dbcmds {
+#if CONFIG_TEST
+ DBKEYRANGE,
+ DBPGET,
+ DBRPCID,
+ DBTEST,
+#endif
+ DBASSOCIATE,
DBCLOSE,
DBCOUNT,
DBCURSOR,
DBDELETE,
DBGET,
+ DBGETBTMINKEY,
+ DBGETCACHESIZE,
+ DBGETDBNAME,
+ DBGETENCRYPTFLAGS,
+ DBGETENV,
+ DBGETERRPFX,
+ DBGETFLAGS,
+ DBGETHFFACTOR,
+ DBGETHNELEM,
DBGETJOIN,
+ DBGETLORDER,
+ DBGETOPENFLAGS,
+ DBGETPAGESIZE,
+ DBGETQEXTENTSIZE,
+ DBGETREDELIM,
+ DBGETRELEN,
+ DBGETREPAD,
+ DBGETRESOURCE,
DBGETTYPE,
DBSWAPPED,
DBJOIN,
- DBKEYRANGE,
DBPUT,
DBSTAT,
- DBSYNC
-#if CONFIG_TEST
- , DBTEST
-#endif
+ DBSYNC,
+ DBTRUNCATE
};
DB *dbp;
+ DB_ENV *dbenv;
DBC *dbc;
- DBTCL_INFO *dbip;
- DBTCL_INFO *ip;
- Tcl_Obj *res;
- int cmdindex, result, ret;
+ DBTCL_INFO *dbip, *ip;
+ DBTYPE type;
+ Tcl_Obj *res, *myobjv[3];
+ int cmdindex, intval, ncache, result, ret;
char newname[MSG_SIZE];
+ u_int32_t bytes, gbytes, value;
+ const char *strval, *filename, *dbname, *envid;
Tcl_ResetResult(interp);
dbp = (DB *)clientData;
@@ -126,6 +213,34 @@ db_Cmd(clientData, interp, objc, objv)
res = NULL;
switch ((enum dbcmds)cmdindex) {
+#if CONFIG_TEST
+ case DBKEYRANGE:
+ result = tcl_DbKeyRange(interp, objc, objv, dbp);
+ break;
+ case DBPGET:
+ result = tcl_DbGet(interp, objc, objv, dbp, 1);
+ break;
+ case DBRPCID:
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ /*
+ * !!! Retrieve the client ID from the dbp handle directly.
+ * This is for testing purposes only. It is dbp-private data.
+ */
+ res = Tcl_NewLongObj(dbp->cl_id);
+ break;
+ case DBTEST:
+ result = tcl_EnvTest(interp, objc, objv, dbp->dbenv);
+ break;
+#endif
+ case DBASSOCIATE:
+ result = tcl_DbAssociate(interp, objc, objv, dbp);
+ break;
case DBCLOSE:
result = tcl_DbClose(interp, objc, objv, dbp, dbip);
break;
@@ -133,10 +248,7 @@ db_Cmd(clientData, interp, objc, objv)
result = tcl_DbDelete(interp, objc, objv, dbp);
break;
case DBGET:
- result = tcl_DbGet(interp, objc, objv, dbp);
- break;
- case DBKEYRANGE:
- result = tcl_DbKeyRange(interp, objc, objv, dbp);
+ result = tcl_DbGet(interp, objc, objv, dbp, 0);
break;
case DBPUT:
result = tcl_DbPut(interp, objc, objv, dbp);
@@ -153,8 +265,8 @@ db_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- ret = dbp->get_byteswapped(dbp);
- res = Tcl_NewIntObj(ret);
+ ret = dbp->get_byteswapped(dbp, &intval);
+ res = Tcl_NewIntObj(intval);
break;
case DBGETTYPE:
/*
@@ -165,14 +277,14 @@ db_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- ret = dbp->get_type(dbp);
- if (ret == DB_BTREE)
+ ret = dbp->get_type(dbp, &type);
+ if (type == DB_BTREE)
res = Tcl_NewStringObj("btree", strlen("btree"));
- else if (ret == DB_HASH)
+ else if (type == DB_HASH)
res = Tcl_NewStringObj("hash", strlen("hash"));
- else if (ret == DB_RECNO)
+ else if (type == DB_RECNO)
res = Tcl_NewStringObj("recno", strlen("recno"));
- else if (ret == DB_QUEUE)
+ else if (type == DB_QUEUE)
res = Tcl_NewStringObj("queue", strlen("queue"));
else {
Tcl_SetResult(interp,
@@ -245,14 +357,174 @@ db_Cmd(clientData, interp, objc, objv)
result = TCL_ERROR;
}
break;
+ case DBGETBTMINKEY:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_bt_minkey(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_bt_minkey")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case DBGETCACHESIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_cachesize(dbp, &gbytes, &bytes, &ncache);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_cachesize")) == TCL_OK) {
+ myobjv[0] = Tcl_NewIntObj(gbytes);
+ myobjv[1] = Tcl_NewIntObj(bytes);
+ myobjv[2] = Tcl_NewIntObj(ncache);
+ res = Tcl_NewListObj(3, myobjv);
+ }
+ break;
+ case DBGETDBNAME:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_dbname(dbp, &filename, &dbname);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_dbname")) == TCL_OK) {
+ myobjv[0] = Tcl_NewStringObj(filename,
+ strlen(filename));
+ myobjv[1] = Tcl_NewStringObj(dbname, strlen(dbname));
+ res = Tcl_NewListObj(2, myobjv);
+ }
+ break;
+ case DBGETENCRYPTFLAGS:
+ result = tcl_EnvGetEncryptFlags(interp, objc, objv, dbp->dbenv);
+ break;
+ case DBGETENV:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_env(dbp, &dbenv);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_env")) == TCL_OK) {
+ if (dbenv != NULL && (ip = _PtrToInfo(dbenv)) != NULL) {
+ envid = ip->i_name;
+ res = Tcl_NewStringObj(envid, strlen(envid));
+ } else
+ Tcl_ResetResult(interp);
+ }
+ break;
+ case DBGETERRPFX:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ dbp->get_errpfx(dbp, &strval);
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case DBGETFLAGS:
+ result = tcl_DbGetFlags(interp, objc, objv, dbp);
+ break;
+ case DBGETHFFACTOR:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_h_ffactor(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_h_ffactor")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case DBGETHNELEM:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_h_nelem(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_h_nelem")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
case DBGETJOIN:
result = tcl_DbGetjoin(interp, objc, objv, dbp);
break;
-#if CONFIG_TEST
- case DBTEST:
- result = tcl_EnvTest(interp, objc, objv, dbp->dbenv);
+ case DBGETLORDER:
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = dbp->get_lorder(dbp, &intval);
+ res = Tcl_NewIntObj(intval);
+ break;
+ case DBGETOPENFLAGS:
+ result = tcl_DbGetOpenFlags(interp, objc, objv, dbp);
+ break;
+ case DBGETPAGESIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_pagesize(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_pagesize")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case DBGETQEXTENTSIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_q_extentsize(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_q_extentsize")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case DBGETREDELIM:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_re_delim(dbp, &intval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_re_delim")) == TCL_OK)
+ res = Tcl_NewIntObj(intval);
+ break;
+ case DBGETRELEN:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_re_len(dbp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_re_len")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case DBGETREPAD:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_re_pad(dbp, &result);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_re_pad")) == TCL_OK)
+ res = Tcl_NewIntObj(result);
+ break;
+ case DBGETRESOURCE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbp->get_re_source(dbp, &strval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_re_source")) == TCL_OK)
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case DBTRUNCATE:
+ result = tcl_DbTruncate(interp, objc, objv, dbp);
break;
-#endif
}
/*
* Only set result if we have a res. Otherwise, lower
@@ -277,7 +549,7 @@ tcl_DbStat(interp, objc, objv, dbp)
DB_HASH_STAT *hsp;
DB_QUEUE_STAT *qsp;
void *sp;
- Tcl_Obj *res;
+ Tcl_Obj *res, *flaglist, *myobjv[2];
DBTYPE type;
u_int32_t flag;
int result, ret;
@@ -287,16 +559,14 @@ tcl_DbStat(interp, objc, objv, dbp)
flag = 0;
if (objc > 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?-recordcount?");
+ Tcl_WrongNumArgs(interp, 2, objv, "?-faststat?");
return (TCL_ERROR);
}
if (objc == 3) {
arg = Tcl_GetStringFromObj(objv[2], NULL);
- if (strcmp(arg, "-recordcount") == 0)
- flag = DB_RECORDCOUNT;
- else if (strcmp(arg, "-cachedcounts") == 0)
- flag = DB_CACHED_COUNTS;
+ if (strcmp(arg, "-faststat") == 0)
+ flag = DB_FAST_STAT;
else {
Tcl_SetResult(interp,
"db stat: unknown arg", TCL_STATIC);
@@ -305,17 +575,18 @@ tcl_DbStat(interp, objc, objv, dbp)
}
_debug_check();
- ret = dbp->stat(dbp, &sp, NULL, flag);
- result = _ReturnSetup(interp, ret, "db stat");
+ ret = dbp->stat(dbp, &sp, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db stat");
if (result == TCL_ERROR)
return (result);
- type = dbp->get_type(dbp);
+ (void)dbp->get_type(dbp, &type);
/*
* Have our stats, now construct the name value
* list pairs and free up the memory.
*/
res = Tcl_NewObj();
+
/*
* MAKE_STAT_LIST assumes 'res' and 'error' label.
*/
@@ -326,42 +597,48 @@ tcl_DbStat(interp, objc, objv, dbp)
MAKE_STAT_LIST("Page size", hsp->hash_pagesize);
MAKE_STAT_LIST("Number of keys", hsp->hash_nkeys);
MAKE_STAT_LIST("Number of records", hsp->hash_ndata);
- MAKE_STAT_LIST("Estim. number of elements", hsp->hash_nelem);
MAKE_STAT_LIST("Fill factor", hsp->hash_ffactor);
MAKE_STAT_LIST("Buckets", hsp->hash_buckets);
- MAKE_STAT_LIST("Free pages", hsp->hash_free);
- MAKE_STAT_LIST("Bytes free", hsp->hash_bfree);
- MAKE_STAT_LIST("Number of big pages", hsp->hash_bigpages);
- MAKE_STAT_LIST("Big pages bytes free", hsp->hash_big_bfree);
- MAKE_STAT_LIST("Overflow pages", hsp->hash_overflows);
- MAKE_STAT_LIST("Overflow bytes free", hsp->hash_ovfl_free);
- MAKE_STAT_LIST("Duplicate pages", hsp->hash_dup);
- MAKE_STAT_LIST("Duplicate pages bytes free",
- hsp->hash_dup_free);
+ if (flag != DB_FAST_STAT) {
+ MAKE_STAT_LIST("Free pages", hsp->hash_free);
+ MAKE_STAT_LIST("Bytes free", hsp->hash_bfree);
+ MAKE_STAT_LIST("Number of big pages",
+ hsp->hash_bigpages);
+ MAKE_STAT_LIST("Big pages bytes free",
+ hsp->hash_big_bfree);
+ MAKE_STAT_LIST("Overflow pages", hsp->hash_overflows);
+ MAKE_STAT_LIST("Overflow bytes free",
+ hsp->hash_ovfl_free);
+ MAKE_STAT_LIST("Duplicate pages", hsp->hash_dup);
+ MAKE_STAT_LIST("Duplicate pages bytes free",
+ hsp->hash_dup_free);
+ }
} else if (type == DB_QUEUE) {
qsp = (DB_QUEUE_STAT *)sp;
MAKE_STAT_LIST("Magic", qsp->qs_magic);
MAKE_STAT_LIST("Version", qsp->qs_version);
MAKE_STAT_LIST("Page size", qsp->qs_pagesize);
- MAKE_STAT_LIST("Number of records", qsp->qs_ndata);
- MAKE_STAT_LIST("Number of pages", qsp->qs_pages);
- MAKE_STAT_LIST("Bytes free", qsp->qs_pgfree);
+ MAKE_STAT_LIST("Extent size", qsp->qs_extentsize);
+ MAKE_STAT_LIST("Number of records", qsp->qs_nkeys);
MAKE_STAT_LIST("Record length", qsp->qs_re_len);
MAKE_STAT_LIST("Record pad", qsp->qs_re_pad);
MAKE_STAT_LIST("First record number", qsp->qs_first_recno);
MAKE_STAT_LIST("Last record number", qsp->qs_cur_recno);
+ if (flag != DB_FAST_STAT) {
+ MAKE_STAT_LIST("Number of pages", qsp->qs_pages);
+ MAKE_STAT_LIST("Bytes free", qsp->qs_pgfree);
+ }
} else { /* BTREE and RECNO are same stats */
bsp = (DB_BTREE_STAT *)sp;
+ MAKE_STAT_LIST("Magic", bsp->bt_magic);
+ MAKE_STAT_LIST("Version", bsp->bt_version);
MAKE_STAT_LIST("Number of keys", bsp->bt_nkeys);
MAKE_STAT_LIST("Number of records", bsp->bt_ndata);
- if (flag != DB_RECORDCOUNT) {
- MAKE_STAT_LIST("Magic", bsp->bt_magic);
- MAKE_STAT_LIST("Version", bsp->bt_version);
- MAKE_STAT_LIST("Flags", bsp->bt_metaflags);
- MAKE_STAT_LIST("Minimum keys per page", bsp->bt_minkey);
- MAKE_STAT_LIST("Fixed record length", bsp->bt_re_len);
- MAKE_STAT_LIST("Record pad", bsp->bt_re_pad);
- MAKE_STAT_LIST("Page size", bsp->bt_pagesize);
+ MAKE_STAT_LIST("Minimum keys per page", bsp->bt_minkey);
+ MAKE_STAT_LIST("Fixed record length", bsp->bt_re_len);
+ MAKE_STAT_LIST("Record pad", bsp->bt_re_pad);
+ MAKE_STAT_LIST("Page size", bsp->bt_pagesize);
+ if (flag != DB_FAST_STAT) {
MAKE_STAT_LIST("Levels", bsp->bt_levels);
MAKE_STAT_LIST("Internal pages", bsp->bt_int_pg);
MAKE_STAT_LIST("Leaf pages", bsp->bt_leaf_pg);
@@ -378,9 +655,27 @@ tcl_DbStat(interp, objc, objv, dbp)
bsp->bt_over_pgfree);
}
}
+
+ /*
+ * Construct a {name {flag1 flag2 ... flagN}} list for the
+ * dbp flags. These aren't access-method dependent, but they
+ * include all the interesting flags, and the integer value
+ * isn't useful from Tcl--return the strings instead.
+ */
+ myobjv[0] = Tcl_NewStringObj("Flags", strlen("Flags"));
+ myobjv[1] = _GetFlagsList(interp, dbp->flags, __db_inmemdbflags);
+ flaglist = Tcl_NewListObj(2, myobjv);
+ if (flaglist == NULL) {
+ result = TCL_ERROR;
+ goto error;
+ }
+ if ((result =
+ Tcl_ListObjAppendElement(interp, res, flaglist)) != TCL_OK)
+ goto error;
+
Tcl_SetObjResult(interp, res);
error:
- __os_free(sp, 0);
+ (void)__os_ufree(dbp->dbenv, sp);
return (result);
}
@@ -395,50 +690,62 @@ tcl_DbClose(interp, objc, objv, dbp, dbip)
DB *dbp; /* Database pointer */
DBTCL_INFO *dbip; /* Info pointer */
{
- DBTCL_INFO *p, *nextp;
+ static const char *dbclose[] = {
+ "-nosync", "--", NULL
+ };
+ enum dbclose {
+ TCL_DBCLOSE_NOSYNC,
+ TCL_DBCLOSE_ENDARG
+ };
u_int32_t flag;
- int result, ret;
+ int endarg, i, optindex, result, ret;
char *arg;
result = TCL_OK;
+ endarg = 0;
flag = 0;
- if (objc > 3) {
+ if (objc > 4) {
Tcl_WrongNumArgs(interp, 2, objv, "?-nosync?");
return (TCL_ERROR);
}
- if (objc == 3) {
- arg = Tcl_GetStringFromObj(objv[2], NULL);
- if (strcmp(arg, "-nosync") == 0)
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i], dbclose,
+ "option", TCL_EXACT, &optindex) != TCL_OK) {
+ arg = Tcl_GetStringFromObj(objv[i], NULL);
+ if (arg[0] == '-')
+ return (IS_HELP(objv[i]));
+ else
+ Tcl_ResetResult(interp);
+ break;
+ }
+ i++;
+ switch ((enum dbclose)optindex) {
+ case TCL_DBCLOSE_NOSYNC:
flag = DB_NOSYNC;
- else {
- Tcl_SetResult(interp,
- "dbclose: unknown arg", TCL_STATIC);
- return (TCL_ERROR);
+ break;
+ case TCL_DBCLOSE_ENDARG:
+ endarg = 1;
+ break;
}
- }
-
- /*
- * First we have to close any open cursors. Then we close
- * our db.
- */
- for (p = LIST_FIRST(&__db_infohead); p != NULL; p = nextp) {
- nextp = LIST_NEXT(p, entries);
/*
- * Check if this is a cursor info structure and if
- * it is, if it belongs to this DB. If so, remove
- * its commands and info structure.
+ * If, at any time, parsing the args we get an error,
+ * bail out and return.
*/
- if (p->i_parent == dbip && p->i_type == I_DBC) {
- (void)Tcl_DeleteCommand(interp, p->i_name);
- _DeleteInfo(p);
- }
+ if (result != TCL_OK)
+ return (result);
+ if (endarg)
+ break;
}
- (void)Tcl_DeleteCommand(interp, dbip->i_name);
- _DeleteInfo(dbip);
+ _DbInfoDelete(interp, dbip);
_debug_check();
+
+ /* Paranoia. */
+ dbp->api_internal = NULL;
+
ret = (dbp)->close(dbp, flag);
- result = _ReturnSetup(interp, ret, "db close");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db close");
return (result);
}
@@ -452,22 +759,28 @@ tcl_DbPut(interp, objc, objv, dbp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB *dbp; /* Database pointer */
{
- static char *dbputopts[] = {
- "-append",
+ static const char *dbputopts[] = {
+#if CONFIG_TEST
"-nodupdata",
+#endif
+ "-append",
+ "-auto_commit",
"-nooverwrite",
"-partial",
"-txn",
NULL
};
enum dbputopts {
- DBPUT_APPEND,
+#if CONFIG_TEST
DBGET_NODUPDATA,
+#endif
+ DBPUT_APPEND,
+ DBPUT_AUTO_COMMIT,
DBPUT_NOOVER,
DBPUT_PART,
DBPUT_TXN
};
- static char *dbputapp[] = {
+ static const char *dbputapp[] = {
"-append", NULL
};
enum dbputapp { DBPUT_APPEND0 };
@@ -475,9 +788,11 @@ tcl_DbPut(interp, objc, objv, dbp)
DBTYPE type;
DB_TXN *txn;
Tcl_Obj **elemv, *res;
+ void *dtmp, *ktmp;
db_recno_t recno;
u_int32_t flag;
- int elemc, end, i, itmp, optindex, result, ret;
+ int auto_commit, elemc, end, freekey, freedata;
+ int i, optindex, result, ret;
char *arg, msg[MSG_SIZE];
txn = NULL;
@@ -488,6 +803,7 @@ tcl_DbPut(interp, objc, objv, dbp)
return (TCL_ERROR);
}
+ freekey = freedata = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
@@ -496,7 +812,7 @@ tcl_DbPut(interp, objc, objv, dbp)
* and must be setup up to contain a db_recno_t. Otherwise the
* key is a "string".
*/
- type = dbp->get_type(dbp);
+ (void)dbp->get_type(dbp, &type);
/*
* We need to determine where the end of required args are. If we
@@ -527,12 +843,19 @@ tcl_DbPut(interp, objc, objv, dbp)
* defined above.
*/
i = 2;
+ auto_commit = 0;
while (i < end) {
if (Tcl_GetIndexFromObj(interp, objv[i],
dbputopts, "option", TCL_EXACT, &optindex) != TCL_OK)
return (IS_HELP(objv[i]));
i++;
switch ((enum dbputopts)optindex) {
+#if CONFIG_TEST
+ case DBGET_NODUPDATA:
+ FLAG_CHECK(flag);
+ flag = DB_NODUPDATA;
+ break;
+#endif
case DBPUT_TXN:
if (i > (end - 1)) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
@@ -548,14 +871,13 @@ tcl_DbPut(interp, objc, objv, dbp)
result = TCL_ERROR;
}
break;
+ case DBPUT_AUTO_COMMIT:
+ auto_commit = 1;
+ break;
case DBPUT_APPEND:
FLAG_CHECK(flag);
flag = DB_APPEND;
break;
- case DBGET_NODUPDATA:
- FLAG_CHECK(flag);
- flag = DB_NODUPDATA;
- break;
case DBPUT_NOOVER:
FLAG_CHECK(flag);
flag = DB_NOOVERWRITE;
@@ -579,12 +901,10 @@ tcl_DbPut(interp, objc, objv, dbp)
break;
}
data.flags = DB_DBT_PARTIAL;
- result = Tcl_GetIntFromObj(interp, elemv[0], &itmp);
- data.doff = itmp;
+ result = _GetUInt32(interp, elemv[0], &data.doff);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, elemv[1], &itmp);
- data.dlen = itmp;
+ result = _GetUInt32(interp, elemv[1], &data.dlen);
/*
* NOTE: We don't check result here because all we'd
* do is break anyway, and we are doing that. If you
@@ -612,40 +932,43 @@ tcl_DbPut(interp, objc, objv, dbp)
if (flag == DB_APPEND)
recno = 0;
else {
- result = Tcl_GetIntFromObj(interp, objv[objc-2], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[objc-2], &recno);
if (result != TCL_OK)
return (result);
}
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[objc-2], &itmp);
- key.size = itmp;
+ ret = _CopyObjBytes(interp, objv[objc-2], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBPUT(ret), "db put");
+ return (result);
+ }
+ key.data = ktmp;
}
- /*
- * XXX
- * Tcl 8.1 Tcl_GetByteArrayFromObj/Tcl_GetIntFromObj bug.
- *
- * This line (and the line for key.data above) were moved from
- * the beginning of the function to here.
- *
- * There is a bug in Tcl 8.1 and byte arrays in that if it happens
- * to use an object as both a byte array and something else like
- * an int, and you've done a Tcl_GetByteArrayFromObj, then you
- * do a Tcl_GetIntFromObj, your memory is deleted.
- *
- * Workaround is to make sure all Tcl_GetByteArrayFromObj calls
- * are done last.
- */
- data.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- data.size = itmp;
+ if (auto_commit)
+ flag |= DB_AUTO_COMMIT;
+ ret = _CopyObjBytes(interp, objv[objc-1], &dtmp,
+ &data.size, &freedata);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBPUT(ret), "db put");
+ goto out;
+ }
+ data.data = dtmp;
_debug_check();
ret = dbp->put(dbp, txn, &key, &data, flag);
- result = _ReturnSetup(interp, ret, "db put");
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBPUT(ret), "db put");
if (ret == 0 &&
(type == DB_RECNO || type == DB_QUEUE) && flag == DB_APPEND) {
- res = Tcl_NewIntObj(recno);
+ res = Tcl_NewWideIntObj((Tcl_WideInt)recno);
Tcl_SetObjResult(interp, res);
}
+out:
+ if (freedata)
+ (void)__os_free(dbp->dbenv, dtmp);
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
return (result);
}
@@ -653,13 +976,19 @@ tcl_DbPut(interp, objc, objv, dbp)
* tcl_db_get --
*/
static int
-tcl_DbGet(interp, objc, objv, dbp)
+tcl_DbGet(interp, objc, objv, dbp, ispget)
Tcl_Interp *interp; /* Interpreter */
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
DB *dbp; /* Database pointer */
+ int ispget; /* 1 for pget, 0 for get */
{
- static char *dbgetopts[] = {
+ static const char *dbgetopts[] = {
+#if CONFIG_TEST
+ "-dirty",
+ "-multi",
+#endif
+ "-auto_commit",
"-consume",
"-consume_wait",
"-get_both",
@@ -668,9 +997,15 @@ tcl_DbGet(interp, objc, objv, dbp)
"-recno",
"-rmw",
"-txn",
+ "--",
NULL
};
enum dbgetopts {
+#if CONFIG_TEST
+ DBGET_DIRTY,
+ DBGET_MULTI,
+#endif
+ DBGET_AUTO_COMMIT,
DBGET_CONSUME,
DBGET_CONSUME_WAIT,
DBGET_BOTH,
@@ -678,20 +1013,27 @@ tcl_DbGet(interp, objc, objv, dbp)
DBGET_PART,
DBGET_RECNO,
DBGET_RMW,
- DBGET_TXN
+ DBGET_TXN,
+ DBGET_ENDARG
};
DBC *dbc;
- DBT key, data, save;
- DBTYPE type;
+ DBT key, pkey, data, save;
+ DBTYPE ptype, type;
DB_TXN *txn;
Tcl_Obj **elemv, *retlist;
- db_recno_t recno;
- u_int32_t flag, cflag, isdup, rmw;
- int elemc, end, i, itmp, optindex, result, ret, useglob, userecno;
+ void *dtmp, *ktmp;
+ u_int32_t aflag, flag, cflag, isdup, mflag, rmw;
+ int elemc, end, endarg, freekey, freedata, i;
+ int optindex, result, ret, useglob, useprecno, userecno;
char *arg, *pattern, *prefix, msg[MSG_SIZE];
+ db_recno_t precno, recno;
+#if CONFIG_TEST
+ int bufsize;
+#endif
result = TCL_OK;
- cflag = flag = rmw = 0;
+ freekey = freedata = 0;
+ aflag = cflag = endarg = flag = mflag = rmw = 0;
useglob = userecno = 0;
txn = NULL;
pattern = prefix = NULL;
@@ -705,23 +1047,44 @@ tcl_DbGet(interp, objc, objv, dbp)
memset(&data, 0, sizeof(data));
memset(&save, 0, sizeof(save));
+ /* For the primary key in a pget call. */
+ memset(&pkey, 0, sizeof(pkey));
+
/*
* Get the command name index from the object based on the options
* defined above.
*/
i = 2;
- type = dbp->get_type(dbp);
+ (void)dbp->get_type(dbp, &type);
end = objc;
while (i < end) {
if (Tcl_GetIndexFromObj(interp, objv[i], dbgetopts, "option",
TCL_EXACT, &optindex) != TCL_OK) {
- if (IS_HELP(objv[i]) == TCL_OK)
- return (TCL_OK);
- Tcl_ResetResult(interp);
+ arg = Tcl_GetStringFromObj(objv[i], NULL);
+ if (arg[0] == '-') {
+ result = IS_HELP(objv[i]);
+ goto out;
+ } else
+ Tcl_ResetResult(interp);
break;
}
i++;
switch ((enum dbgetopts)optindex) {
+#if CONFIG_TEST
+ case DBGET_DIRTY:
+ rmw |= DB_DIRTY_READ;
+ break;
+ case DBGET_MULTI:
+ mflag |= DB_MULTIPLE;
+ result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ break;
+#endif
+ case DBGET_AUTO_COMMIT:
+ aflag |= DB_AUTO_COMMIT;
+ break;
case DBGET_BOTH:
/*
* Change 'end' and make sure we aren't already past
@@ -738,7 +1101,7 @@ tcl_DbGet(interp, objc, objv, dbp)
flag = DB_GET_BOTH;
break;
case DBGET_TXN:
- if (i == end - 1) {
+ if (i >= end) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
result = TCL_ERROR;
break;
@@ -770,10 +1133,11 @@ tcl_DbGet(interp, objc, objv, dbp)
if (type != DB_RECNO && type != DB_QUEUE) {
FLAG_CHECK(flag);
flag = DB_SET_RECNO;
+ key.flags |= DB_DBT_MALLOC;
}
break;
case DBGET_RMW:
- rmw = DB_RMW;
+ rmw |= DB_RMW;
break;
case DBGET_PART:
end = objc - 1;
@@ -795,12 +1159,10 @@ tcl_DbGet(interp, objc, objv, dbp)
break;
}
save.flags = DB_DBT_PARTIAL;
- result = Tcl_GetIntFromObj(interp, elemv[0], &itmp);
- save.doff = itmp;
+ result = _GetUInt32(interp, elemv[0], &save.doff);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, elemv[1], &itmp);
- save.dlen = itmp;
+ result = _GetUInt32(interp, elemv[1], &save.dlen);
/*
* NOTE: We don't check result here because all we'd
* do is break anyway, and we are doing that. If you
@@ -809,15 +1171,50 @@ tcl_DbGet(interp, objc, objv, dbp)
* lines above and copy that.)
*/
break;
- }
+ case DBGET_ENDARG:
+ endarg = 1;
+ break;
+ } /* switch */
if (result != TCL_OK)
break;
+ if (endarg)
+ break;
}
if (result != TCL_OK)
goto out;
if (type == DB_RECNO || type == DB_QUEUE)
userecno = 1;
+
+ /*
+ * Check args we have left versus the flags we were given.
+ * We might have 0, 1 or 2 left. If we have 0, it must
+ * be DB_CONSUME*, if 2, then DB_GET_BOTH, all others should
+ * be 1.
+ */
+ if (((flag == DB_CONSUME || flag == DB_CONSUME_WAIT) && i != objc) ||
+ (flag == DB_GET_BOTH && i != objc - 2)) {
+ Tcl_SetResult(interp,
+ "Wrong number of key/data given based on flags specified\n",
+ TCL_STATIC);
+ result = TCL_ERROR;
+ goto out;
+ } else if (flag == 0 && i != objc - 1) {
+ Tcl_SetResult(interp,
+ "Wrong number of key/data given\n", TCL_STATIC);
+ result = TCL_ERROR;
+ goto out;
+ }
+
+ /*
+ * Find out whether the primary key should also be a recno.
+ */
+ if (ispget && dbp->s_primary != NULL) {
+ (void)dbp->s_primary->get_type(dbp->s_primary, &ptype);
+ useprecno = ptype == DB_RECNO || ptype == DB_QUEUE;
+ } else
+ useprecno = 0;
+
/*
* Check for illegal combos of options.
*/
@@ -849,106 +1246,205 @@ tcl_DbGet(interp, objc, objv, dbp)
/*
* isdup is used to know if we support duplicates. If not, we
* can just do a db->get call and avoid using cursors.
- * XXX
- * When there is a db->get_flags method, it should be used.
- * isdup = dbp->get_flags(dbp) & DB_DUP;
- * For now we illegally peek.
- * XXX
*/
- isdup = dbp->flags & DB_AM_DUP;
+ if ((ret = dbp->get_flags(dbp, &isdup)) != 0) {
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db get");
+ goto out;
+ }
+ isdup &= DB_DUP;
/*
* If the database doesn't support duplicates or we're performing
* ops that don't require returning multiple items, use DB->get
* instead of a cursor operation.
*/
- if (pattern == NULL && (isdup == 0 ||
+ if (pattern == NULL && (isdup == 0 || mflag != 0 ||
flag == DB_SET_RECNO || flag == DB_GET_BOTH ||
flag == DB_CONSUME || flag == DB_CONSUME_WAIT)) {
if (flag == DB_GET_BOTH) {
if (userecno) {
- result = Tcl_GetIntFromObj(interp,
- objv[(objc - 2)], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp,
+ objv[(objc - 2)], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
- return (result);
+ goto out;
} else {
- key.data =
- Tcl_GetByteArrayFromObj(objv[objc-2],
- &itmp);
- key.size = itmp;
+ /*
+ * Some get calls (SET_*) can change the
+ * key pointers. So, we need to store
+ * the allocated key space in a tmp.
+ */
+ ret = _CopyObjBytes(interp, objv[objc-2],
+ &ktmp, &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBGET(ret), "db get");
+ goto out;
+ }
+ key.data = ktmp;
}
/*
* Already checked args above. Fill in key and save.
* Save is used in the dbp->get call below to fill in
* data.
+ *
+ * If the "data" here is really a primary key--that
+ * is, if we're in a pget--and that primary key
+ * is a recno, treat it appropriately as an int.
*/
- save.data =
- Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- save.size = itmp;
+ if (useprecno) {
+ result = _GetUInt32(interp,
+ objv[objc - 1], &precno);
+ if (result == TCL_OK) {
+ save.data = &precno;
+ save.size = sizeof(db_recno_t);
+ } else
+ goto out;
+ } else {
+ ret = _CopyObjBytes(interp, objv[objc-1],
+ &dtmp, &save.size, &freedata);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBGET(ret), "db get");
+ goto out;
+ }
+ save.data = dtmp;
+ }
} else if (flag != DB_CONSUME && flag != DB_CONSUME_WAIT) {
if (userecno) {
- result = Tcl_GetIntFromObj(
- interp, objv[(objc - 1)], &itmp);
- recno = itmp;
+ result = _GetUInt32(
+ interp, objv[(objc - 1)], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
- return (result);
+ goto out;
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- key.size = itmp;
+ /*
+ * Some get calls (SET_*) can change the
+ * key pointers. So, we need to store
+ * the allocated key space in a tmp.
+ */
+ ret = _CopyObjBytes(interp, objv[objc-1],
+ &ktmp, &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBGET(ret), "db get");
+ goto out;
+ }
+ key.data = ktmp;
+ }
+#if CONFIG_TEST
+ if (mflag & DB_MULTIPLE) {
+ if ((ret = __os_malloc(dbp->dbenv,
+ bufsize, &save.data)) != 0) {
+ Tcl_SetResult(interp,
+ db_strerror(ret), TCL_STATIC);
+ goto out;
+ }
+ save.ulen = bufsize;
+ F_CLR(&save, DB_DBT_MALLOC);
+ F_SET(&save, DB_DBT_USERMEM);
}
+#endif
}
- memset(&data, 0, sizeof(data));
data = save;
- _debug_check();
-
- ret = dbp->get(dbp, txn, &key, &data, flag | rmw);
- result = _ReturnSetup(interp, ret, "db get");
+ if (ispget) {
+ if (flag == DB_GET_BOTH) {
+ pkey.data = save.data;
+ pkey.size = save.size;
+ data.data = NULL;
+ data.size = 0;
+ }
+ F_SET(&pkey, DB_DBT_MALLOC);
+ _debug_check();
+ ret = dbp->pget(dbp,
+ txn, &key, &pkey, &data, flag | rmw);
+ } else {
+ _debug_check();
+ ret = dbp->get(dbp,
+ txn, &key, &data, flag | aflag | rmw | mflag);
+ }
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBGET(ret),
+ "db get");
if (ret == 0) {
/*
* Success. Return a list of the form {name value}
* If it was a recno in key.data, we need to convert
* into a string/object representation of that recno.
*/
- if (type == DB_RECNO || type == DB_QUEUE)
- result = _SetListRecnoElem(interp, retlist,
- *(db_recno_t *)key.data, data.data,
- data.size);
- else
- result = _SetListElem(interp, retlist,
- key.data, key.size, data.data, data.size);
- /*
- * Free space from DB_DBT_MALLOC
- */
- __os_free(data.data, data.size);
+ if (mflag & DB_MULTIPLE)
+ result = _SetMultiList(interp,
+ retlist, &key, &data, type, flag);
+ else if (type == DB_RECNO || type == DB_QUEUE)
+ if (ispget)
+ result = _Set3DBTList(interp,
+ retlist, &key, 1, &pkey,
+ useprecno, &data);
+ else
+ result = _SetListRecnoElem(interp,
+ retlist, *(db_recno_t *)key.data,
+ data.data, data.size);
+ else {
+ if (ispget)
+ result = _Set3DBTList(interp,
+ retlist, &key, 0, &pkey,
+ useprecno, &data);
+ else
+ result = _SetListElem(interp, retlist,
+ key.data, key.size,
+ data.data, data.size);
+ }
}
+ /*
+ * Free space from DBT.
+ *
+ * If we set DB_DBT_MALLOC, we need to free the space if
+ * and only if we succeeded (and thus if DB allocated
+ * anything). If DB_DBT_MALLOC is not set, this is a bulk
+ * get buffer, and needs to be freed no matter what.
+ */
+ if (F_ISSET(&key, DB_DBT_MALLOC) && ret == 0)
+ (void)__os_ufree(dbp->dbenv, key.data);
+ if (F_ISSET(&data, DB_DBT_MALLOC) && ret == 0)
+ (void)__os_ufree(dbp->dbenv, data.data);
+ else if (!F_ISSET(&data, DB_DBT_MALLOC))
+ __os_free(dbp->dbenv, data.data);
+ if (ispget && ret == 0)
+ (void)__os_ufree(dbp->dbenv, pkey.data);
if (result == TCL_OK)
Tcl_SetObjResult(interp, retlist);
goto out;
}
if (userecno) {
- result = Tcl_GetIntFromObj(interp, objv[(objc - 1)], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[(objc - 1)], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
- return (result);
+ goto out;
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- key.size = itmp;
+ /*
+ * Some get calls (SET_*) can change the
+ * key pointers. So, we need to store
+ * the allocated key space in a tmp.
+ */
+ ret = _CopyObjBytes(interp, objv[objc-1], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBGET(ret), "db get");
+ return (result);
+ }
+ key.data = ktmp;
}
ret = dbp->cursor(dbp, txn, &dbc, 0);
- result = _ReturnSetup(interp, ret, "db cursor");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db cursor");
if (result == TCL_ERROR)
goto out;
@@ -988,11 +1484,26 @@ tcl_DbGet(interp, objc, objv, dbp)
cflag = DB_SET_RANGE;
} else
cflag = DB_SET;
- _debug_check();
- ret = dbc->c_get(dbc, &key, &data, cflag | rmw);
- result = _ReturnSetup(interp, ret, "db get (cursor)");
+ if (ispget) {
+ _debug_check();
+ F_SET(&pkey, DB_DBT_MALLOC);
+ ret = dbc->c_pget(dbc, &key, &pkey, &data, cflag | rmw);
+ } else {
+ _debug_check();
+ ret = dbc->c_get(dbc, &key, &data, cflag | rmw);
+ }
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBCGET(ret),
+ "db get (cursor)");
if (result == TCL_ERROR)
goto out1;
+ if (ret == 0 && pattern &&
+ memcmp(key.data, prefix, strlen(prefix)) != 0) {
+ /*
+ * Free space from DB_DBT_MALLOC
+ */
+ (void)__os_ufree(dbp->dbenv, data.data);
+ goto out1;
+ }
if (pattern)
cflag = DB_NEXT;
else
@@ -1002,36 +1513,46 @@ tcl_DbGet(interp, objc, objv, dbp)
/*
* Build up our {name value} sublist
*/
- result = _SetListElem(interp, retlist,
- key.data, key.size,
- data.data, data.size);
+ if (ispget)
+ result = _Set3DBTList(interp, retlist, &key, 0,
+ &pkey, useprecno, &data);
+ else
+ result = _SetListElem(interp, retlist,
+ key.data, key.size, data.data, data.size);
/*
* Free space from DB_DBT_MALLOC
*/
- __os_free(data.data, data.size);
+ if (ispget)
+ (void)__os_ufree(dbp->dbenv, pkey.data);
+ (void)__os_ufree(dbp->dbenv, data.data);
if (result != TCL_OK)
break;
/*
* Append {name value} to return list
*/
memset(&key, 0, sizeof(key));
+ memset(&pkey, 0, sizeof(pkey));
memset(&data, 0, sizeof(data));
/*
* Restore any "partial" info we have saved.
*/
data = save;
- ret = dbc->c_get(dbc, &key, &data, cflag | rmw);
+ if (ispget) {
+ F_SET(&pkey, DB_DBT_MALLOC);
+ ret = dbc->c_pget(dbc, &key, &pkey, &data, cflag | rmw);
+ } else
+ ret = dbc->c_get(dbc, &key, &data, cflag | rmw);
if (ret == 0 && pattern &&
memcmp(key.data, prefix, strlen(prefix)) != 0) {
/*
* Free space from DB_DBT_MALLOC
*/
- __os_free(data.data, data.size);
+ (void)__os_ufree(dbp->dbenv, data.data);
break;
}
}
- dbc->c_close(dbc);
out1:
+ dbc->c_close(dbc);
if (result == TCL_OK)
Tcl_SetObjResult(interp, retlist);
out:
@@ -1041,7 +1562,11 @@ out:
* have multiple nuls at the end, so we free using __os_free().
*/
if (prefix != NULL)
- __os_free(prefix,0);
+ __os_free(dbp->dbenv, prefix);
+ if (freedata)
+ (void)__os_free(dbp->dbenv, dtmp);
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
return (result);
}
@@ -1055,12 +1580,14 @@ tcl_DbDelete(interp, objc, objv, dbp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB *dbp; /* Database pointer */
{
- static char *dbdelopts[] = {
+ static const char *dbdelopts[] = {
+ "-auto_commit",
"-glob",
"-txn",
NULL
};
enum dbdelopts {
+ DBDEL_AUTO_COMMIT,
DBDEL_GLOB,
DBDEL_TXN
};
@@ -1068,12 +1595,14 @@ tcl_DbDelete(interp, objc, objv, dbp)
DBT key, data;
DBTYPE type;
DB_TXN *txn;
+ void *ktmp;
db_recno_t recno;
- int i, itmp, optindex, result, ret;
+ int freekey, i, optindex, result, ret;
u_int32_t flag;
char *arg, *pattern, *prefix, msg[MSG_SIZE];
result = TCL_OK;
+ freekey = 0;
flag = 0;
pattern = prefix = NULL;
txn = NULL;
@@ -1084,17 +1613,17 @@ tcl_DbDelete(interp, objc, objv, dbp)
memset(&key, 0, sizeof(key));
/*
- * The first arg must be -txn, -glob or a list of keys.
+ * The first arg must be -auto_commit, -glob, -txn or a list of keys.
*/
i = 2;
while (i < objc) {
if (Tcl_GetIndexFromObj(interp, objv[i], dbdelopts, "option",
TCL_EXACT, &optindex) != TCL_OK) {
/*
- * If we don't have a -glob or -txn, then the
- * remaining args must be exact keys.
- * Reset the result so we don't get
- * an errant error message if there is another error.
+ * If we don't have a -auto_commit, -glob or -txn,
+ * then the remaining args must be exact keys.
+ * Reset the result so we don't get an errant error
+ * message if there is another error.
*/
if (IS_HELP(objv[i]) == TCL_OK)
return (TCL_OK);
@@ -1121,6 +1650,9 @@ tcl_DbDelete(interp, objc, objv, dbp)
result = TCL_ERROR;
}
break;
+ case DBDEL_AUTO_COMMIT:
+ flag |= DB_AUTO_COMMIT;
+ break;
case DBDEL_GLOB:
/*
* Get the pattern. Get the prefix and use cursors to
@@ -1143,17 +1675,6 @@ tcl_DbDelete(interp, objc, objv, dbp)
if (result != TCL_OK)
goto out;
-
- /*
- * If we have a pattern AND more keys to process, then there
- * is an error. Either we have some number of exact keys,
- * or we have a pattern.
- */
- if (pattern != NULL && i != objc) {
- Tcl_WrongNumArgs(interp, 2, objv, "?args? -glob pattern | key");
- result = TCL_ERROR;
- goto out;
- }
/*
* XXX
* For consistency with get, we have decided for the moment, to
@@ -1163,11 +1684,33 @@ tcl_DbDelete(interp, objc, objv, dbp)
* than one, and at that time we'd make delete be consistent. In
* any case, the code is already here and there is no need to remove,
* just check that we only have one arg left.
+ *
+ * If we have a pattern AND more keys to process, there is an error.
+ * Either we have some number of exact keys, or we have a pattern.
+ *
+ * If we have a pattern and an auto commit flag, there is an error.
*/
- if (pattern == NULL && i != (objc - 1)) {
- Tcl_WrongNumArgs(interp, 2, objv, "?args? -glob pattern | key");
- result = TCL_ERROR;
- goto out;
+ if (pattern == NULL) {
+ if (i != (objc - 1)) {
+ Tcl_WrongNumArgs(
+ interp, 2, objv, "?args? -glob pattern | key");
+ result = TCL_ERROR;
+ goto out;
+ }
+ } else {
+ if (i != objc) {
+ Tcl_WrongNumArgs(
+ interp, 2, objv, "?args? -glob pattern | key");
+ result = TCL_ERROR;
+ goto out;
+ }
+ if (flag & DB_AUTO_COMMIT) {
+ Tcl_SetResult(interp,
+ "Cannot use -auto_commit and patterns.\n",
+ TCL_STATIC);
+ result = TCL_ERROR;
+ goto out;
+ }
}
/*
@@ -1177,32 +1720,39 @@ tcl_DbDelete(interp, objc, objv, dbp)
* If it is a RECNO database, the key is a record number and must be
* setup up to contain a db_recno_t. Otherwise the key is a "string".
*/
- type = dbp->get_type(dbp);
+ (void)dbp->get_type(dbp, &type);
ret = 0;
while (i < objc && ret == 0) {
memset(&key, 0, sizeof(key));
if (type == DB_RECNO || type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(interp, objv[i++], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[i++], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
return (result);
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[i++], &itmp);
- key.size = itmp;
+ ret = _CopyObjBytes(interp, objv[i++], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBDEL(ret), "db del");
+ return (result);
+ }
+ key.data = ktmp;
}
_debug_check();
- ret = dbp->del(dbp, txn, &key, 0);
+ ret = dbp->del(dbp, txn, &key, flag);
/*
* If we have any error, set up return result and stop
* processing keys.
*/
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
if (ret != 0)
break;
}
- result = _ReturnSetup(interp, ret, "db del");
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBDEL(ret), "db del");
/*
* At this point we've either finished or, if we have a pattern,
@@ -1212,7 +1762,8 @@ tcl_DbDelete(interp, objc, objv, dbp)
if (pattern) {
ret = dbp->cursor(dbp, txn, &dbc, 0);
if (ret != 0) {
- result = _ReturnSetup(interp, ret, "db cursor");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db cursor");
goto out;
}
/*
@@ -1244,7 +1795,8 @@ tcl_DbDelete(interp, objc, objv, dbp)
_debug_check();
ret = dbc->c_del(dbc, 0);
if (ret != 0) {
- result = _ReturnSetup(interp, ret, "db c_del");
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCDEL(ret), "db c_del");
break;
}
/*
@@ -1262,9 +1814,9 @@ tcl_DbDelete(interp, objc, objv, dbp)
* by copying and condensing another string. Thus prefix may
* have multiple nuls at the end, so we free using __os_free().
*/
- __os_free(prefix,0);
+ __os_free(dbp->dbenv, prefix);
dbc->c_close(dbc);
- result = _ReturnSetup(interp, ret, "db del");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db del");
}
out:
return (result);
@@ -1281,12 +1833,20 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
DB *dbp; /* Database pointer */
DBC **dbcp; /* Return cursor pointer */
{
- static char *dbcuropts[] = {
- "-txn", "-update",
+ static const char *dbcuropts[] = {
+#if CONFIG_TEST
+ "-dirty",
+ "-update",
+#endif
+ "-txn",
NULL
};
enum dbcuropts {
- DBCUR_TXN, DBCUR_UPDATE
+#if CONFIG_TEST
+ DBCUR_DIRTY,
+ DBCUR_UPDATE,
+#endif
+ DBCUR_TXN
};
DB_TXN *txn;
u_int32_t flag;
@@ -1296,11 +1856,6 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
result = TCL_OK;
flag = 0;
txn = NULL;
- /*
- * If the user asks for -glob or -recno, it MUST be the second
- * last arg given. If it isn't given, then we must check if
- * they gave us a correct key.
- */
i = 2;
while (i < objc) {
if (Tcl_GetIndexFromObj(interp, objv[i], dbcuropts, "option",
@@ -1310,6 +1865,14 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
}
i++;
switch ((enum dbcuropts)optindex) {
+#if CONFIG_TEST
+ case DBCUR_DIRTY:
+ flag |= DB_DIRTY_READ;
+ break;
+ case DBCUR_UPDATE:
+ flag |= DB_WRITECURSOR;
+ break;
+#endif
case DBCUR_TXN:
if (i == objc) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
@@ -1325,9 +1888,6 @@ tcl_DbCursor(interp, objc, objv, dbp, dbcp)
result = TCL_ERROR;
}
break;
- case DBCUR_UPDATE:
- flag = DB_WRITECURSOR;
- break;
}
if (result != TCL_OK)
break;
@@ -1344,6 +1904,192 @@ out:
}
/*
+ * tcl_DbAssociate --
+ * Call DB->associate().
+ */
+static int
+tcl_DbAssociate(interp, objc, objv, dbp)
+ Tcl_Interp *interp;
+ int objc;
+ Tcl_Obj *CONST objv[];
+ DB *dbp;
+{
+ static const char *dbaopts[] = {
+ "-auto_commit",
+ "-create",
+ "-txn",
+ NULL
+ };
+ enum dbaopts {
+ DBA_AUTO_COMMIT,
+ DBA_CREATE,
+ DBA_TXN
+ };
+ DB *sdbp;
+ DB_TXN *txn;
+ DBTCL_INFO *sdbip;
+ int i, optindex, result, ret;
+ char *arg, msg[MSG_SIZE];
+ u_int32_t flag;
+
+ txn = NULL;
+ result = TCL_OK;
+ flag = 0;
+ if (objc < 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "[callback] secondary");
+ return (TCL_ERROR);
+ }
+
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i], dbaopts, "option",
+ TCL_EXACT, &optindex) != TCL_OK) {
+ result = IS_HELP(objv[i]);
+ if (result == TCL_OK)
+ return (result);
+ result = TCL_OK;
+ Tcl_ResetResult(interp);
+ break;
+ }
+ i++;
+ switch ((enum dbaopts)optindex) {
+ case DBA_AUTO_COMMIT:
+ flag |= DB_AUTO_COMMIT;
+ break;
+ case DBA_CREATE:
+ flag |= DB_CREATE;
+ break;
+ case DBA_TXN:
+ if (i > (objc - 1)) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Associate: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
+ }
+ }
+ if (result != TCL_OK)
+ return (result);
+
+ /*
+ * Better be 1 or 2 args left. The last arg must be the sdb
+ * handle. If 2 args then objc-2 is the callback proc, else
+ * we have a NULL callback.
+ */
+ /* Get the secondary DB handle. */
+ arg = Tcl_GetStringFromObj(objv[objc - 1], NULL);
+ sdbp = NAME_TO_DB(arg);
+ if (sdbp == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Associate: Invalid database handle: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ return (TCL_ERROR);
+ }
+
+ /*
+ * The callback is simply a Tcl object containing the name
+ * of the callback proc, which is the second-to-last argument.
+ *
+ * Note that the callback needs to go in the *secondary* DB handle's
+ * info struct; we may have multiple secondaries with different
+ * callbacks.
+ */
+ sdbip = (DBTCL_INFO *)sdbp->api_internal;
+ if (i != objc - 1) {
+ /*
+ * We have 2 args, get the callback.
+ */
+ sdbip->i_second_call = objv[objc - 2];
+ Tcl_IncrRefCount(sdbip->i_second_call);
+
+ /* Now call associate. */
+ _debug_check();
+ ret = dbp->associate(dbp, txn, sdbp, tcl_second_call, flag);
+ } else {
+ /*
+ * We have a NULL callback.
+ */
+ sdbip->i_second_call = NULL;
+ ret = dbp->associate(dbp, txn, sdbp, NULL, flag);
+ }
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "associate");
+
+ return (result);
+}
+
+/*
+ * tcl_second_call --
+ * Callback function for secondary indices. Get the callback
+ * out of ip->i_second_call and call it.
+ */
+static int
+tcl_second_call(dbp, pkey, data, skey)
+ DB *dbp;
+ const DBT *pkey, *data;
+ DBT *skey;
+{
+ DBTCL_INFO *ip;
+ Tcl_Interp *interp;
+ Tcl_Obj *pobj, *dobj, *objv[3];
+ int len, result, ret;
+ void *retbuf, *databuf;
+
+ ip = (DBTCL_INFO *)dbp->api_internal;
+ interp = ip->i_interp;
+ objv[0] = ip->i_second_call;
+
+ /*
+ * Create two ByteArray objects, with the contents of the pkey
+ * and data DBTs that are our inputs.
+ */
+ pobj = Tcl_NewByteArrayObj(pkey->data, pkey->size);
+ Tcl_IncrRefCount(pobj);
+ dobj = Tcl_NewByteArrayObj(data->data, data->size);
+ Tcl_IncrRefCount(dobj);
+
+ objv[1] = pobj;
+ objv[2] = dobj;
+
+ result = Tcl_EvalObjv(interp, 3, objv, 0);
+
+ Tcl_DecrRefCount(pobj);
+ Tcl_DecrRefCount(dobj);
+
+ if (result != TCL_OK) {
+ __db_err(dbp->dbenv,
+ "Tcl callback function failed with code %d", result);
+ return (EINVAL);
+ }
+
+ retbuf =
+ Tcl_GetByteArrayFromObj(Tcl_GetObjResult(interp), &len);
+
+ /*
+ * retbuf is owned by Tcl; copy it into malloc'ed memory.
+ * We need to use __os_umalloc rather than ufree because this will
+ * be freed by DB using __os_ufree--the DB_DBT_APPMALLOC flag
+ * tells DB to free application-allocated memory.
+ */
+ if ((ret = __os_umalloc(dbp->dbenv, len, &databuf)) != 0)
+ return (ret);
+ memcpy(databuf, retbuf, len);
+
+ skey->data = databuf;
+ skey->size = len;
+ F_SET(skey, DB_DBT_APPMALLOC);
+
+ return (0);
+}
+
+/*
* tcl_db_join --
*/
static int
@@ -1354,7 +2100,7 @@ tcl_DbJoin(interp, objc, objv, dbp, dbcp)
DB *dbp; /* Database pointer */
DBC **dbcp; /* Cursor pointer */
{
- static char *dbjopts[] = {
+ static const char *dbjopts[] = {
"-nosort",
NULL
};
@@ -1399,7 +2145,7 @@ tcl_DbJoin(interp, objc, objv, dbp, dbcp)
* Allocate one more for NULL ptr at end of list.
*/
size = sizeof(DBC *) * ((objc - adj) + 1);
- ret = __os_malloc(dbp->dbenv, size, NULL, &listp);
+ ret = __os_malloc(dbp->dbenv, size, &listp);
if (ret != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
return (TCL_ERROR);
@@ -1420,10 +2166,10 @@ tcl_DbJoin(interp, objc, objv, dbp, dbcp)
listp[j] = NULL;
_debug_check();
ret = dbp->join(dbp, listp, dbcp, flag);
- result = _ReturnSetup(interp, ret, "db join");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db join");
out:
- __os_free(listp, size);
+ __os_free(dbp->dbenv, listp);
return (result);
}
@@ -1437,13 +2183,17 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB *dbp; /* Database pointer */
{
- static char *dbgetjopts[] = {
+ static const char *dbgetjopts[] = {
+#if CONFIG_TEST
"-nosort",
+#endif
"-txn",
NULL
};
enum dbgetjopts {
+#if CONFIG_TEST
DBGETJ_NOSORT,
+#endif
DBGETJ_TXN
};
DB_TXN *txn;
@@ -1452,12 +2202,14 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
DBC *dbc;
DBT key, data;
Tcl_Obj **elemv, *retlist;
+ void *ktmp;
u_int32_t flag;
- int adj, elemc, i, itmp, j, optindex, result, ret, size;
+ int adj, elemc, freekey, i, j, optindex, result, ret, size;
char *arg, msg[MSG_SIZE];
result = TCL_OK;
flag = 0;
+ freekey = 0;
if (objc < 3) {
Tcl_WrongNumArgs(interp, 2, objv, "{db1 key1} {db2 key2} ...");
return (TCL_ERROR);
@@ -1478,10 +2230,12 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
}
i++;
switch ((enum dbgetjopts)optindex) {
+#if CONFIG_TEST
case DBGETJ_NOSORT:
flag |= DB_JOIN_NOSORT;
adj++;
break;
+#endif
case DBGETJ_TXN:
if (i == objc) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
@@ -1503,7 +2257,7 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
if (result != TCL_OK)
return (result);
size = sizeof(DBC *) * ((objc - adj) + 1);
- ret = __os_malloc(NULL, size, NULL, &listp);
+ ret = __os_malloc(NULL, size, &listp);
if (ret != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
return (TCL_ERROR);
@@ -1535,22 +2289,28 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
goto out;
}
ret = elemdbp->cursor(elemdbp, txn, &listp[j], 0);
- if ((result = _ReturnSetup(interp, ret, "db cursor")) ==
- TCL_ERROR)
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db cursor")) == TCL_ERROR)
goto out;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
- key.data = Tcl_GetByteArrayFromObj(elemv[elemc-1], &itmp);
- key.size = itmp;
+ ret = _CopyObjBytes(interp, elemv[elemc-1], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "db join");
+ goto out;
+ }
+ key.data = ktmp;
ret = (listp[j])->c_get(listp[j], &key, &data, DB_SET);
- if ((result = _ReturnSetup(interp, ret, "db cget")) ==
- TCL_ERROR)
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_DBCGET(ret),
+ "db cget")) == TCL_ERROR)
goto out;
}
listp[j] = NULL;
_debug_check();
ret = dbp->join(dbp, listp, &dbc, flag);
- result = _ReturnSetup(interp, ret, "db join");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db join");
if (result == TCL_ERROR)
goto out;
@@ -1568,20 +2328,131 @@ tcl_DbGetjoin(interp, objc, objv, dbp)
result = _SetListElem(interp, retlist,
key.data, key.size,
data.data, data.size);
- __os_free(key.data, key.size);
- __os_free(data.data, data.size);
+ (void)__os_ufree(dbp->dbenv, key.data);
+ (void)__os_ufree(dbp->dbenv, data.data);
}
}
dbc->c_close(dbc);
if (result == TCL_OK)
Tcl_SetObjResult(interp, retlist);
out:
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
while (j) {
if (listp[j])
(listp[j])->c_close(listp[j]);
j--;
}
- __os_free(listp, size);
+ __os_free(dbp->dbenv, listp);
+ return (result);
+}
+
+/*
+ * tcl_DbGetFlags --
+ */
+static int
+tcl_DbGetFlags(interp, objc, objv, dbp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB *dbp; /* Database pointer */
+{
+ int i, ret, result;
+ u_int32_t flags;
+ char buf[512];
+ Tcl_Obj *res;
+
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } db_flags[] = {
+ { DB_CHKSUM, "-chksum" },
+ { DB_DUP, "-dup" },
+ { DB_DUPSORT, "-dupsort" },
+ { DB_ENCRYPT, "-encrypt" },
+ { DB_TXN_NOT_DURABLE, "-notdurable" },
+ { DB_RECNUM, "-recnum" },
+ { DB_RENUMBER, "-renumber" },
+ { DB_REVSPLITOFF, "-revsplitoff" },
+ { DB_SNAPSHOT, "-snapshot" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ ret = dbp->get_flags(dbp, &flags);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_flags")) == TCL_OK) {
+ buf[0] = '\0';
+
+ for (i = 0; db_flags[i].flag != 0; i++)
+ if (LF_ISSET(db_flags[i].flag)) {
+ if (strlen(buf) > 0)
+ strncat(buf, " ", sizeof(buf));
+ strncat(buf, db_flags[i].arg, sizeof(buf));
+ }
+
+ res = Tcl_NewStringObj(buf, strlen(buf));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * tcl_DbGetOpenFlags --
+ */
+static int
+tcl_DbGetOpenFlags(interp, objc, objv, dbp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB *dbp; /* Database pointer */
+{
+ int i, ret, result;
+ u_int32_t flags;
+ char buf[512];
+ Tcl_Obj *res;
+
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } open_flags[] = {
+ { DB_AUTO_COMMIT, "-auto_commit" },
+ { DB_CREATE, "-create" },
+ { DB_DIRTY_READ, "-dirty" },
+ { DB_EXCL, "-excl" },
+ { DB_NOMMAP, "-nommap" },
+ { DB_RDONLY, "-rdonly" },
+ { DB_THREAD, "-thread" },
+ { DB_TRUNCATE, "-truncate" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ ret = dbp->get_open_flags(dbp, &flags);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db get_open_flags")) == TCL_OK) {
+ buf[0] = '\0';
+
+ for (i = 0; open_flags[i].flag != 0; i++)
+ if (LF_ISSET(open_flags[i].flag)) {
+ if (strlen(buf) > 0)
+ strncat(buf, " ", sizeof(buf));
+ strncat(buf, open_flags[i].arg, sizeof(buf));
+ }
+
+ res = Tcl_NewStringObj(buf, strlen(buf));
+ Tcl_SetObjResult(interp, res);
+ }
+
return (result);
}
@@ -1598,68 +2469,80 @@ tcl_DbCount(interp, objc, objv, dbp)
Tcl_Obj *res;
DBC *dbc;
DBT key, data;
+ void *ktmp;
db_recno_t count, recno;
- int itmp, len, result, ret;
+ int freekey, result, ret;
- result = TCL_OK;
- count = 0;
res = NULL;
+ count = 0;
+ freekey = ret = 0;
+ result = TCL_OK;
+
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "key");
return (TCL_ERROR);
}
- memset(&key, 0, sizeof(key));
-
/*
* Get the count for our key.
* We do this by getting a cursor for this DB. Moving the cursor
* to the set location, and getting a count on that cursor.
*/
- ret = 0;
memset(&key, 0, sizeof(key));
memset(&data, 0, sizeof(data));
+
/*
* If it's a queue or recno database, we must make sure to
* treat the key as a recno rather than as a byte string.
*/
if (dbp->type == DB_RECNO || dbp->type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(interp, objv[2], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[2], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
return (result);
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[2], &len);
- key.size = len;
+ ret = _CopyObjBytes(interp, objv[2], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "db count");
+ return (result);
+ }
+ key.data = ktmp;
}
_debug_check();
ret = dbp->cursor(dbp, NULL, &dbc, 0);
if (ret != 0) {
- result = _ReturnSetup(interp, ret, "db cursor");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db cursor");
goto out;
}
/*
* Move our cursor to the key.
*/
ret = dbc->c_get(dbc, &key, &data, DB_SET);
- if (ret == DB_NOTFOUND)
+ if (ret == DB_KEYEMPTY || ret == DB_NOTFOUND)
count = 0;
else {
ret = dbc->c_count(dbc, &count, 0);
if (ret != 0) {
- result = _ReturnSetup(interp, ret, "db cursor");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db c count");
goto out;
}
}
- res = Tcl_NewIntObj(count);
+ res = Tcl_NewWideIntObj((Tcl_WideInt)count);
Tcl_SetObjResult(interp, res);
out:
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
+ (void)dbc->c_close(dbc);
return (result);
}
+#if CONFIG_TEST
/*
* tcl_DbKeyRange --
*/
@@ -1670,7 +2553,7 @@ tcl_DbKeyRange(interp, objc, objv, dbp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB *dbp; /* Database pointer */
{
- static char *dbkeyropts[] = {
+ static const char *dbkeyropts[] = {
"-txn",
NULL
};
@@ -1682,13 +2565,15 @@ tcl_DbKeyRange(interp, objc, objv, dbp)
DBT key;
DBTYPE type;
Tcl_Obj *myobjv[3], *retlist;
+ void *ktmp;
db_recno_t recno;
u_int32_t flag;
- int i, itmp, myobjc, optindex, result, ret;
+ int freekey, i, myobjc, optindex, result, ret;
char *arg, msg[MSG_SIZE];
result = TCL_OK;
flag = 0;
+ freekey = 0;
if (objc < 3) {
Tcl_WrongNumArgs(interp, 2, objv, "?-txn id? key");
return (TCL_ERROR);
@@ -1727,7 +2612,7 @@ tcl_DbKeyRange(interp, objc, objv, dbp)
}
if (result != TCL_OK)
return (result);
- type = dbp->get_type(dbp);
+ (void)dbp->get_type(dbp, &type);
ret = 0;
/*
* Make sure we have a key.
@@ -1739,20 +2624,25 @@ tcl_DbKeyRange(interp, objc, objv, dbp)
}
memset(&key, 0, sizeof(key));
if (type == DB_RECNO || type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(interp, objv[i], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[i], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
return (result);
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[i++], &itmp);
- key.size = itmp;
+ ret = _CopyObjBytes(interp, objv[i++], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "db keyrange");
+ return (result);
+ }
+ key.data = ktmp;
}
_debug_check();
ret = dbp->key_range(dbp, txn, &key, &range, flag);
- result = _ReturnSetup(interp, ret, "db join");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db keyrange");
if (result == TCL_ERROR)
goto out;
@@ -1767,5 +2657,84 @@ tcl_DbKeyRange(interp, objc, objv, dbp)
if (result == TCL_OK)
Tcl_SetObjResult(interp, retlist);
out:
+ if (freekey)
+ (void)__os_free(dbp->dbenv, ktmp);
+ return (result);
+}
+#endif
+
+/*
+ * tcl_DbTruncate --
+ */
+static int
+tcl_DbTruncate(interp, objc, objv, dbp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB *dbp; /* Database pointer */
+{
+ static const char *dbcuropts[] = {
+ "-auto_commit",
+ "-txn",
+ NULL
+ };
+ enum dbcuropts {
+ DBTRUNC_AUTO_COMMIT,
+ DBTRUNC_TXN
+ };
+ DB_TXN *txn;
+ Tcl_Obj *res;
+ u_int32_t count, flag;
+ int i, optindex, result, ret;
+ char *arg, msg[MSG_SIZE];
+
+ txn = NULL;
+ flag = 0;
+ result = TCL_OK;
+
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i], dbcuropts, "option",
+ TCL_EXACT, &optindex) != TCL_OK) {
+ result = IS_HELP(objv[i]);
+ goto out;
+ }
+ i++;
+ switch ((enum dbcuropts)optindex) {
+ case DBTRUNC_AUTO_COMMIT:
+ flag |= DB_AUTO_COMMIT;
+ break;
+ case DBTRUNC_TXN:
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Truncate: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
+ }
+ if (result != TCL_OK)
+ break;
+ }
+ if (result != TCL_OK)
+ goto out;
+
+ _debug_check();
+ ret = dbp->truncate(dbp, txn, &count, flag);
+ if (ret != 0)
+ result = _ErrorSetup(interp, ret, "db truncate");
+
+ else {
+ res = Tcl_NewWideIntObj((Tcl_WideInt)count);
+ Tcl_SetObjResult(interp, res);
+ }
+out:
return (result);
}
diff --git a/db/tcl/tcl_db_pkg.c b/db/tcl/tcl_db_pkg.c
index f83b5a7d2..260dfb232 100644
--- a/db/tcl/tcl_db_pkg.c
+++ b/db/tcl/tcl_db_pkg.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_db_pkg.c,v 11.76 2001/01/19 18:02:36 bostic Exp $";
+static const char revid[] = "$Id: tcl_db_pkg.c,v 11.164 2003/11/14 18:45:11 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,10 +19,17 @@ static const char revid[] = "$Id: tcl_db_pkg.c,v 11.76 2001/01/19 18:02:36 bosti
#include <tcl.h>
#endif
+#if CONFIG_TEST
#define DB_DBM_HSEARCH 1
+#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/db_page.h"
+#include "dbinc/hash.h"
+#include "dbinc/tcl_db.h"
+
+/* XXX we must declare global data in just one place */
+DBTCL_GLOBAL __dbtcl_global;
/*
* Prototypes for procedures defined later in this file:
@@ -35,11 +42,25 @@ static int bdb_DbOpen __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
DBTCL_INFO *, DB **));
static int bdb_DbRemove __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
static int bdb_DbRename __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
+static int bdb_Version __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
+
+#if CONFIG_TEST
static int bdb_DbUpgrade __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
static int bdb_DbVerify __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
-static int bdb_Version __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
static int bdb_Handles __P((Tcl_Interp *, int, Tcl_Obj * CONST*));
+static int tcl_bt_compare __P((DB *, const DBT *, const DBT *));
+static int tcl_compare_callback __P((DB *, const DBT *, const DBT *,
+ Tcl_Obj *, char *));
+static void tcl_db_free __P((void *));
+static void * tcl_db_malloc __P((size_t));
+static void * tcl_db_realloc __P((void *, size_t));
+static int tcl_dup_compare __P((DB *, const DBT *, const DBT *));
+static u_int32_t tcl_h_hash __P((DB *, const void *, u_int32_t));
+static int tcl_rep_send __P((DB_ENV *,
+ const DBT *, const DBT *, const DB_LSN *, int, u_int32_t));
+#endif
+
/*
* Db_tcl_Init --
*
@@ -54,8 +75,10 @@ Db_tcl_Init(interp)
* to be made available. */
{
int code;
+ char pkg[12];
- code = Tcl_PkgProvide(interp, "Db_tcl", "1.0");
+ snprintf(pkg, sizeof(pkg), "%d.%d", DB_VERSION_MAJOR, DB_VERSION_MINOR);
+ code = Tcl_PkgProvide(interp, "Db_tcl", pkg);
if (code != TCL_OK)
return (code);
@@ -95,21 +118,25 @@ berkdb_Cmd(notused, interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *berkdbcmds[] = {
+ static const char *berkdbcmds[] = {
+#if CONFIG_TEST
+ "dbverify",
+ "handles",
+ "upgrade",
+#endif
"dbremove",
"dbrename",
- "dbverify",
"env",
"envremove",
- "handles",
"open",
- "upgrade",
"version",
+#if CONFIG_TEST
/* All below are compatibility functions */
"hcreate", "hsearch", "hdestroy",
"dbminit", "fetch", "store",
"delete", "firstkey", "nextkey",
"ndbm_open", "dbmclose",
+#endif
/* All below are convenience functions */
"rand", "random_int", "srand",
"debug_check",
@@ -119,28 +146,34 @@ berkdb_Cmd(notused, interp, objc, objv)
* All commands enums below ending in X are compatibility
*/
enum berkdbcmds {
+#if CONFIG_TEST
+ BDB_DBVERIFY,
+ BDB_HANDLES,
+ BDB_UPGRADE,
+#endif
BDB_DBREMOVE,
BDB_DBRENAME,
- BDB_DBVERIFY,
BDB_ENV,
BDB_ENVREMOVE,
- BDB_HANDLES,
BDB_OPEN,
- BDB_UPGRADE,
BDB_VERSION,
+#if CONFIG_TEST
BDB_HCREATEX, BDB_HSEARCHX, BDB_HDESTROYX,
BDB_DBMINITX, BDB_FETCHX, BDB_STOREX,
BDB_DELETEX, BDB_FIRSTKEYX, BDB_NEXTKEYX,
BDB_NDBMOPENX, BDB_DBMCLOSEX,
+#endif
BDB_RANDX, BDB_RAND_INTX, BDB_SRANDX,
BDB_DBGCKX
};
static int env_id = 0;
static int db_id = 0;
- static int ndbm_id = 0;
DB *dbp;
+#if CONFIG_TEST
DBM *ndbmp;
+ static int ndbm_id = 0;
+#endif
DBTCL_INFO *ip;
DB_ENV *envp;
Tcl_Obj *res;
@@ -166,13 +199,21 @@ berkdb_Cmd(notused, interp, objc, objv)
return (IS_HELP(objv[1]));
res = NULL;
switch ((enum berkdbcmds)cmdindex) {
- case BDB_VERSION:
- _debug_check();
- result = bdb_Version(interp, objc, objv);
+#if CONFIG_TEST
+ case BDB_DBVERIFY:
+ result = bdb_DbVerify(interp, objc, objv);
break;
case BDB_HANDLES:
result = bdb_Handles(interp, objc, objv);
break;
+ case BDB_UPGRADE:
+ result = bdb_DbUpgrade(interp, objc, objv);
+ break;
+#endif
+ case BDB_VERSION:
+ _debug_check();
+ result = bdb_Version(interp, objc, objv);
+ break;
case BDB_ENV:
snprintf(newname, sizeof(newname), "env%d", env_id);
ip = _NewInfo(interp, NULL, newname, I_ENV);
@@ -201,12 +242,6 @@ berkdb_Cmd(notused, interp, objc, objv)
case BDB_DBRENAME:
result = bdb_DbRename(interp, objc, objv);
break;
- case BDB_UPGRADE:
- result = bdb_DbUpgrade(interp, objc, objv);
- break;
- case BDB_DBVERIFY:
- result = bdb_DbVerify(interp, objc, objv);
- break;
case BDB_ENVREMOVE:
result = tcl_EnvRemove(interp, objc, objv, NULL, NULL);
break;
@@ -232,6 +267,7 @@ berkdb_Cmd(notused, interp, objc, objv)
result = TCL_ERROR;
}
break;
+#if CONFIG_TEST
case BDB_HCREATEX:
case BDB_HSEARCHX:
case BDB_HDESTROYX:
@@ -268,6 +304,7 @@ berkdb_Cmd(notused, interp, objc, objv)
result = TCL_ERROR;
}
break;
+#endif
case BDB_RANDX:
case BDB_RAND_INTX:
case BDB_SRANDX:
@@ -296,7 +333,7 @@ berkdb_Cmd(notused, interp, objc, objv)
* 1. Call db_env_create to create the env handle.
* 2. Parse args tracking options.
* 3. Make any pre-open setup calls necessary.
- * 4. Call DBENV->open to open the env.
+ * 4. Call DB_ENV->open to open the env.
* 5. Return env widget handle to user.
*/
static int
@@ -307,16 +344,13 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
DBTCL_INFO *ip; /* Our internal info */
DB_ENV **env; /* Environment pointer */
{
- static char *envopen[] = {
- "-cachesize",
+ static const char *envopen[] = {
+#if CONFIG_TEST
+ "-alloc",
+ "-auto_commit",
"-cdb",
"-cdb_alldb",
"-client_timeout",
- "-create",
- "-data_dir",
- "-errfile",
- "-errpfx",
- "-home",
"-lock",
"-lock_conflict",
"-lock_detect",
@@ -324,28 +358,50 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
"-lock_max_locks",
"-lock_max_lockers",
"-lock_max_objects",
+ "-lock_timeout",
"-log",
"-log_buffer",
- "-log_dir",
"-log_max",
+ "-log_regionmax",
+ "-log_remove",
"-mmapsize",
- "-mode",
"-nommap",
- "-private",
- "-recover",
- "-recover_fatal",
+ "-notdurable",
+ "-overwrite",
"-region_init",
+ "-rep_client",
+ "-rep_logsonly",
+ "-rep_master",
+ "-rep_transport",
"-server",
"-server_timeout",
+ "-thread",
+ "-time_notgranted",
+ "-txn_timeout",
+ "-txn_timestamp",
+ "-verbose",
+ "-wrnosync",
+#endif
+ "-cachesize",
+ "-create",
+ "-data_dir",
+ "-encryptaes",
+ "-encryptany",
+ "-errfile",
+ "-errpfx",
+ "-home",
+ "-log_dir",
+ "-mode",
+ "-private",
+ "-recover",
+ "-recover_fatal",
"-shm_key",
"-system_mem",
"-tmp_dir",
"-txn",
"-txn_max",
- "-txn_timestamp",
"-use_environ",
"-use_environ_root",
- "-verbose",
NULL
};
/*
@@ -354,15 +410,12 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
* which is close to but not quite alphabetical.
*/
enum envopen {
- ENV_CACHESIZE,
+#if CONFIG_TEST
+ ENV_ALLOC,
+ ENV_AUTO_COMMIT,
ENV_CDB,
ENV_CDB_ALLDB,
ENV_CLIENT_TO,
- ENV_CREATE,
- ENV_DATA_DIR,
- ENV_ERRFILE,
- ENV_ERRPFX,
- ENV_HOME,
ENV_LOCK,
ENV_CONFLICT,
ENV_DETECT,
@@ -370,52 +423,85 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
ENV_LOCK_MAX_LOCKS,
ENV_LOCK_MAX_LOCKERS,
ENV_LOCK_MAX_OBJECTS,
+ ENV_LOCK_TIMEOUT,
ENV_LOG,
ENV_LOG_BUFFER,
- ENV_LOG_DIR,
ENV_LOG_MAX,
+ ENV_LOG_REGIONMAX,
+ ENV_LOG_REMOVE,
ENV_MMAPSIZE,
- ENV_MODE,
ENV_NOMMAP,
- ENV_PRIVATE,
- ENV_RECOVER,
- ENV_RECOVER_FATAL,
+ ENV_NOTDURABLE,
+ ENV_OVERWRITE,
ENV_REGION_INIT,
+ ENV_REP_CLIENT,
+ ENV_REP_LOGSONLY,
+ ENV_REP_MASTER,
+ ENV_REP_TRANSPORT,
ENV_SERVER,
ENV_SERVER_TO,
+ ENV_THREAD,
+ ENV_TIME_NOTGRANTED,
+ ENV_TXN_TIMEOUT,
+ ENV_TXN_TIME,
+ ENV_VERBOSE,
+ ENV_WRNOSYNC,
+#endif
+ ENV_CACHESIZE,
+ ENV_CREATE,
+ ENV_DATA_DIR,
+ ENV_ENCRYPT_AES,
+ ENV_ENCRYPT_ANY,
+ ENV_ERRFILE,
+ ENV_ERRPFX,
+ ENV_HOME,
+ ENV_LOG_DIR,
+ ENV_MODE,
+ ENV_PRIVATE,
+ ENV_RECOVER,
+ ENV_RECOVER_FATAL,
ENV_SHM_KEY,
ENV_SYSTEM_MEM,
ENV_TMP_DIR,
ENV_TXN,
ENV_TXN_MAX,
- ENV_TXN_TIME,
ENV_USE_ENVIRON,
- ENV_USE_ENVIRON_ROOT,
- ENV_VERBOSE
+ ENV_USE_ENVIRON_ROOT
};
- Tcl_Obj **myobjv, **myobjv1;
- time_t time;
- u_int32_t detect, gbytes, bytes, ncaches, open_flags, set_flag, size;
- u_int8_t *conflicts;
- int i, intarg, itmp, j, logbufset, logmaxset;
- int mode, myobjc, nmodes, optindex, result, ret, temp;
+ Tcl_Obj **myobjv;
+ u_int32_t cr_flags, gbytes, bytes, ncaches, logbufset, logmaxset;
+ u_int32_t open_flags, rep_flags, set_flags, uintarg;
+ int i, mode, myobjc, optindex, result, ret;
long client_to, server_to, shm;
- char *arg, *home, *server;
+ char *arg, *home, *passwd, *server;
+#if CONFIG_TEST
+ Tcl_Obj **myobjv1;
+ time_t timestamp;
+ u_int32_t detect, size;
+ u_int8_t *conflicts;
+ int intarg, j, nmodes, temp;
+#endif
result = TCL_OK;
mode = 0;
- set_flag = 0;
+ rep_flags = set_flags = cr_flags = 0;
home = NULL;
+
/*
* XXX
* If/when our Tcl interface becomes thread-safe, we should enable
- * DB_THREAD here. Note that DB_THREAD currently does not work
- * with log_get -next, -prev; if we wish to enable DB_THREAD,
- * those must either be made thread-safe first or we must come up with
- * a workaround. (We used to specify DB_THREAD if and only if
- * logging was not configured.)
+ * DB_THREAD here in all cases. For now, we turn it on later in this
+ * function, and only when we're in testing and we specify the
+ * -thread flag, so that we can exercise MUTEX_THREAD_LOCK cases.
+ *
+ * In order to become truly thread-safe, we need to look at making sure
+ * DBTCL_INFO structs are safe to share across threads (they're not
+ * mutex-protected) before we declare the Tcl interface thread-safe.
+ * Meanwhile, there's no strong reason to enable DB_THREAD when not
+ * testing.
*/
open_flags = DB_JOINENV;
+
logmaxset = logbufset = 0;
if (objc <= 2) {
@@ -436,6 +522,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
continue;
}
switch ((enum envopen)optindex) {
+#if CONFIG_TEST
case ENV_SERVER:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
@@ -443,6 +530,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = TCL_ERROR;
break;
}
+ FLD_SET(cr_flags, DB_RPCCLIENT);
server = Tcl_GetStringFromObj(objv[i++], NULL);
break;
case ENV_SERVER_TO:
@@ -452,6 +540,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = TCL_ERROR;
break;
}
+ FLD_SET(cr_flags, DB_RPCCLIENT);
result = Tcl_GetLongFromObj(interp, objv[i++],
&server_to);
break;
@@ -462,20 +551,29 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = TCL_ERROR;
break;
}
+ FLD_SET(cr_flags, DB_RPCCLIENT);
result = Tcl_GetLongFromObj(interp, objv[i++],
&client_to);
break;
+#endif
default:
break;
}
}
+ if (result != TCL_OK)
+ return (TCL_ERROR);
+ ret = db_env_create(env, cr_flags);
+ if (ret)
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_env_create"));
+ /*
+ * From here on we must 'goto error' in order to clean up the
+ * env from db_env_create.
+ */
if (server != NULL) {
- ret = db_env_create(env, DB_CLIENT);
- if (ret)
- return (_ReturnSetup(interp, ret, "db_env_create"));
(*env)->set_errpfx((*env), ip->i_name);
(*env)->set_errcall((*env), _ErrorFunc);
- if ((ret = (*env)->set_server((*env), server,
+ if ((ret = (*env)->set_rpc_server((*env), NULL, server,
client_to, server_to, 0)) != 0) {
result = TCL_ERROR;
goto error;
@@ -485,19 +583,20 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
* Create the environment handle before parsing the args
* since we'll be modifying the environment as we parse.
*/
- ret = db_env_create(env, 0);
- if (ret)
- return (_ReturnSetup(interp, ret, "db_env_create"));
(*env)->set_errpfx((*env), ip->i_name);
(*env)->set_errcall((*env), _ErrorFunc);
}
+ /* Hang our info pointer on the env handle, so we can do callbacks. */
+ (*env)->app_private = ip;
+
/*
* Get the command name index from the object based on the bdbcmds
* defined above.
*/
i = 2;
while (i < objc) {
+ Tcl_ResetResult(interp);
if (Tcl_GetIndexFromObj(interp, objv[i], envopen, "option",
TCL_EXACT, &optindex) != TCL_OK) {
result = IS_HELP(objv[i]);
@@ -505,6 +604,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
}
i++;
switch ((enum envopen)optindex) {
+#if CONFIG_TEST
case ENV_SERVER:
case ENV_SERVER_TO:
case ENV_CLIENT_TO:
@@ -513,208 +613,29 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
*/
i++;
break;
+ case ENV_ALLOC:
+ /*
+ * Use a Tcl-local alloc and free function so that
+ * we're sure to test whether we use umalloc/ufree in
+ * the right places.
+ */
+ (void)(*env)->set_alloc(*env,
+ tcl_db_malloc, tcl_db_realloc, tcl_db_free);
+ break;
+ case ENV_AUTO_COMMIT:
+ FLD_SET(set_flags, DB_AUTO_COMMIT);
+ break;
case ENV_CDB:
FLD_SET(open_flags, DB_INIT_CDB | DB_INIT_MPOOL);
FLD_CLR(open_flags, DB_JOINENV);
break;
case ENV_CDB_ALLDB:
- FLD_SET(set_flag, DB_CDB_ALLDB);
+ FLD_SET(set_flags, DB_CDB_ALLDB);
break;
case ENV_LOCK:
FLD_SET(open_flags, DB_INIT_LOCK | DB_INIT_MPOOL);
FLD_CLR(open_flags, DB_JOINENV);
break;
- case ENV_LOG:
- FLD_SET(open_flags, DB_INIT_LOG | DB_INIT_MPOOL);
- FLD_CLR(open_flags, DB_JOINENV);
- break;
- case ENV_TXN:
- FLD_SET(open_flags, DB_INIT_LOCK |
- DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN);
- FLD_CLR(open_flags, DB_JOINENV);
- /* Make sure we have an arg to check against! */
- if (i < objc) {
- arg = Tcl_GetStringFromObj(objv[i], NULL);
- if (strcmp(arg, "nosync") == 0) {
- FLD_SET(set_flag, DB_TXN_NOSYNC);
- i++;
- }
- }
- break;
- case ENV_CREATE:
- FLD_SET(open_flags, DB_CREATE | DB_INIT_MPOOL);
- FLD_CLR(open_flags, DB_JOINENV);
- break;
- case ENV_HOME:
- /* Make sure we have an arg to check against! */
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-home dir?");
- result = TCL_ERROR;
- break;
- }
- home = Tcl_GetStringFromObj(objv[i++], NULL);
- break;
- case ENV_MODE:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-mode mode?");
- result = TCL_ERROR;
- break;
- }
- /*
- * Don't need to check result here because
- * if TCL_ERROR, the error message is already
- * set up, and we'll bail out below. If ok,
- * the mode is set and we go on.
- */
- result = Tcl_GetIntFromObj(interp, objv[i++], &mode);
- break;
- case ENV_NOMMAP:
- FLD_SET(set_flag, DB_NOMMAP);
- break;
- case ENV_PRIVATE:
- FLD_SET(open_flags, DB_PRIVATE | DB_INIT_MPOOL);
- FLD_CLR(open_flags, DB_JOINENV);
- break;
- case ENV_RECOVER:
- FLD_SET(open_flags, DB_RECOVER);
- break;
- case ENV_RECOVER_FATAL:
- FLD_SET(open_flags, DB_RECOVER_FATAL);
- break;
- case ENV_SYSTEM_MEM:
- FLD_SET(open_flags, DB_SYSTEM_MEM);
- break;
- case ENV_USE_ENVIRON_ROOT:
- FLD_SET(open_flags, DB_USE_ENVIRON_ROOT);
- break;
- case ENV_USE_ENVIRON:
- FLD_SET(open_flags, DB_USE_ENVIRON);
- break;
- case ENV_VERBOSE:
- result = Tcl_ListObjGetElements(interp, objv[i],
- &myobjc, &myobjv);
- if (result == TCL_OK)
- i++;
- else
- break;
- if (myobjc != 2) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-verbose {which on|off}?");
- result = TCL_ERROR;
- break;
- }
- result = tcl_EnvVerbose(interp, *env,
- myobjv[0], myobjv[1]);
- break;
- case ENV_REGION_INIT:
- _debug_check();
- ret = db_env_set_region_init(1);
- result = _ReturnSetup(interp, ret, "region_init");
- break;
- case ENV_CACHESIZE:
- result = Tcl_ListObjGetElements(interp, objv[i],
- &myobjc, &myobjv);
- if (result == TCL_OK)
- i++;
- else
- break;
- j = 0;
- if (myobjc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-cachesize {gbytes bytes ncaches}?");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetIntFromObj(interp, myobjv[0], &itmp);
- gbytes = itmp;
- if (result != TCL_OK)
- break;
- result = Tcl_GetIntFromObj(interp, myobjv[1], &itmp);
- bytes = itmp;
- if (result != TCL_OK)
- break;
- result = Tcl_GetIntFromObj(interp, myobjv[2], &itmp);
- ncaches = itmp;
- if (result != TCL_OK)
- break;
- _debug_check();
- ret = (*env)->set_cachesize(*env, gbytes, bytes,
- ncaches);
- result = _ReturnSetup(interp, ret, "set_cachesize");
- break;
- case ENV_MMAPSIZE:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-mmapsize size?");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
- if (result == TCL_OK) {
- _debug_check();
- ret = (*env)->set_mp_mmapsize(*env,
- (size_t)intarg);
- result = _ReturnSetup(interp, ret, "mmapsize");
- }
- break;
- case ENV_SHM_KEY:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-shm_key key?");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetLongFromObj(interp, objv[i++], &shm);
- if (result == TCL_OK) {
- _debug_check();
- ret = (*env)->set_shm_key(*env, shm);
- result = _ReturnSetup(interp, ret, "shm_key");
- }
- break;
- case ENV_LOG_MAX:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-log_max max?");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
- if (result == TCL_OK && logbufset) {
- _debug_check();
- ret = (*env)->set_lg_max(*env,
- (u_int32_t)intarg);
- result = _ReturnSetup(interp, ret, "log_max");
- logbufset = 0;
- } else
- logmaxset = intarg;
- break;
- case ENV_LOG_BUFFER:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "?-log_buffer size?");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
- if (result == TCL_OK) {
- _debug_check();
- ret = (*env)->set_lg_bsize(*env,
- (u_int32_t)intarg);
- result = _ReturnSetup(interp, ret, "log_bsize");
- logbufset = 1;
- if (logmaxset) {
- _debug_check();
- ret = (*env)->set_lg_max(*env,
- (u_int32_t)logmaxset);
- result = _ReturnSetup(interp, ret,
- "log_max");
- logmaxset = 0;
- logbufset = 0;
- }
- }
- break;
case ENV_CONFLICT:
/*
* Get conflict list. List is:
@@ -747,7 +668,7 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
break;
}
size = sizeof(u_int8_t) * nmodes*nmodes;
- ret = __os_malloc(*env, size, NULL, &conflicts);
+ ret = __os_malloc(*env, size, &conflicts);
if (ret != 0) {
result = TCL_ERROR;
break;
@@ -757,15 +678,16 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
&temp);
conflicts[j] = temp;
if (result != TCL_OK) {
- __os_free(conflicts, size);
+ __os_free(NULL, conflicts);
break;
}
}
_debug_check();
ret = (*env)->set_lk_conflicts(*env,
(u_int8_t *)conflicts, nmodes);
- __os_free(conflicts, size);
- result = _ReturnSetup(interp, ret, "set_lk_conflicts");
+ __os_free(NULL, conflicts);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_lk_conflicts");
break;
case ENV_DETECT:
if (i >= objc) {
@@ -777,6 +699,14 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
arg = Tcl_GetStringFromObj(objv[i++], NULL);
if (strcmp(arg, "default") == 0)
detect = DB_LOCK_DEFAULT;
+ else if (strcmp(arg, "expire") == 0)
+ detect = DB_LOCK_EXPIRE;
+ else if (strcmp(arg, "maxlocks") == 0)
+ detect = DB_LOCK_MAXLOCKS;
+ else if (strcmp(arg, "minlocks") == 0)
+ detect = DB_LOCK_MINLOCKS;
+ else if (strcmp(arg, "minwrites") == 0)
+ detect = DB_LOCK_MINWRITE;
else if (strcmp(arg, "oldest") == 0)
detect = DB_LOCK_OLDEST;
else if (strcmp(arg, "youngest") == 0)
@@ -791,7 +721,8 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
}
_debug_check();
ret = (*env)->set_lk_detect(*env, detect);
- result = _ReturnSetup(interp, ret, "lock_detect");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock_detect");
break;
case ENV_LOCK_MAX:
case ENV_LOCK_MAX_LOCKS:
@@ -803,61 +734,390 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
switch ((enum envopen)optindex) {
case ENV_LOCK_MAX:
ret = (*env)->set_lk_max(*env,
- (u_int32_t)intarg);
+ uintarg);
break;
case ENV_LOCK_MAX_LOCKS:
ret = (*env)->set_lk_max_locks(*env,
- (u_int32_t)intarg);
+ uintarg);
break;
case ENV_LOCK_MAX_LOCKERS:
ret = (*env)->set_lk_max_lockers(*env,
- (u_int32_t)intarg);
+ uintarg);
break;
case ENV_LOCK_MAX_OBJECTS:
ret = (*env)->set_lk_max_objects(*env,
- (u_int32_t)intarg);
+ uintarg);
break;
default:
break;
}
- result = _ReturnSetup(interp, ret, "lock_max");
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock_max");
}
break;
- case ENV_TXN_MAX:
+ case ENV_TXN_TIME:
+ case ENV_TXN_TIMEOUT:
+ case ENV_LOCK_TIMEOUT:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-txn_max max?");
+ "?-txn_timestamp time?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = Tcl_GetLongFromObj(interp, objv[i++],
+ (long *)&timestamp);
+ if (result == TCL_OK) {
+ _debug_check();
+ if (optindex == ENV_TXN_TIME)
+ ret = (*env)->
+ set_tx_timestamp(*env, &timestamp);
+ else
+ ret = (*env)->set_timeout(*env,
+ (db_timeout_t)timestamp,
+ optindex == ENV_TXN_TIMEOUT ?
+ DB_SET_TXN_TIMEOUT :
+ DB_SET_LOCK_TIMEOUT);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "txn_timestamp");
+ }
+ break;
+ case ENV_LOG:
+ FLD_SET(open_flags, DB_INIT_LOG | DB_INIT_MPOOL);
+ FLD_CLR(open_flags, DB_JOINENV);
+ break;
+ case ENV_LOG_BUFFER:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-log_buffer size?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = (*env)->set_lg_bsize(*env, uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "log_bsize");
+ logbufset = 1;
+ if (logmaxset) {
+ _debug_check();
+ ret = (*env)->set_lg_max(*env,
+ logmaxset);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "log_max");
+ logmaxset = 0;
+ logbufset = 0;
+ }
+ }
+ break;
+ case ENV_LOG_MAX:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-log_max max?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK && logbufset) {
+ _debug_check();
+ ret = (*env)->set_lg_max(*env, uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "log_max");
+ logbufset = 0;
+ } else
+ logmaxset = uintarg;
+ break;
+ case ENV_LOG_REGIONMAX:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-log_regionmax size?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = (*env)->set_lg_regionmax(*env, uintarg);
+ result =
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "log_regionmax");
+ }
+ break;
+ case ENV_LOG_REMOVE:
+ FLD_SET(set_flags, DB_LOG_AUTOREMOVE);
+ break;
+ case ENV_MMAPSIZE:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-mmapsize size?");
result = TCL_ERROR;
break;
}
result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*env)->set_tx_max(*env,
- (u_int32_t)intarg);
- result = _ReturnSetup(interp, ret, "txn_max");
+ ret = (*env)->set_mp_mmapsize(*env,
+ (size_t)intarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "mmapsize");
}
break;
- case ENV_TXN_TIME:
+ case ENV_NOMMAP:
+ FLD_SET(set_flags, DB_NOMMAP);
+ break;
+ case ENV_OVERWRITE:
+ FLD_SET(set_flags, DB_OVERWRITE);
+ break;
+ case ENV_REGION_INIT:
+ _debug_check();
+ ret = (*env)->set_flags(*env, DB_REGION_INIT, 1);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "region_init");
+ break;
+ case ENV_REP_CLIENT:
+ rep_flags = DB_REP_CLIENT;
+ FLD_SET(open_flags, DB_INIT_REP);
+ break;
+ case ENV_REP_LOGSONLY:
+ rep_flags = DB_REP_LOGSONLY;
+ FLD_SET(open_flags, DB_INIT_REP);
+ break;
+ case ENV_REP_MASTER:
+ rep_flags = DB_REP_MASTER;
+ FLD_SET(open_flags, DB_INIT_REP);
+ break;
+ case ENV_REP_TRANSPORT:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-txn_timestamp time?");
+ "-rep_transport {envid sendproc}");
result = TCL_ERROR;
break;
}
- result = Tcl_GetLongFromObj(interp, objv[i++],
- (long *)&time);
+
+ /*
+ * Store the objects containing the machine ID
+ * and the procedure name. We don't need to crack
+ * the send procedure out now, but we do convert the
+ * machine ID to an int, since set_rep_transport needs
+ * it. Even so, it'll be easier later to deal with
+ * the Tcl_Obj *, so we save that, not the int.
+ *
+ * Note that we Tcl_IncrRefCount both objects
+ * independently; Tcl is free to discard the list
+ * that they're bundled into.
+ */
+ result = Tcl_ListObjGetElements(interp, objv[i++],
+ &myobjc, &myobjv);
+ if (myobjc != 2) {
+ Tcl_SetResult(interp,
+ "List must be {envid sendproc}",
+ TCL_STATIC);
+ result = TCL_ERROR;
+ break;
+ }
+
+ FLD_SET(open_flags, DB_INIT_REP);
+ /*
+ * Check that the machine ID is an int. Note that
+ * we do want to use GetIntFromObj; the machine
+ * ID is explicitly an int, not a u_int32_t.
+ */
+ ip->i_rep_eid = myobjv[0];
+ Tcl_IncrRefCount(ip->i_rep_eid);
+ result = Tcl_GetIntFromObj(interp,
+ ip->i_rep_eid, &intarg);
+ if (result != TCL_OK)
+ break;
+
+ ip->i_rep_send = myobjv[1];
+ Tcl_IncrRefCount(ip->i_rep_send);
+ _debug_check();
+ ret = (*env)->set_rep_transport(*env,
+ intarg, tcl_rep_send);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_rep_transport");
+ break;
+ case ENV_THREAD:
+ /* Enable DB_THREAD when specified in testing. */
+ FLD_SET(open_flags, DB_THREAD);
+ break;
+ case ENV_TIME_NOTGRANTED:
+ FLD_SET(set_flags, DB_TIME_NOTGRANTED);
+ break;
+ case ENV_VERBOSE:
+ result = Tcl_ListObjGetElements(interp, objv[i],
+ &myobjc, &myobjv);
+ if (result == TCL_OK)
+ i++;
+ else
+ break;
+ if (myobjc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-verbose {which on|off}?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = tcl_EnvVerbose(interp, *env,
+ myobjv[0], myobjv[1]);
+ break;
+ case ENV_NOTDURABLE:
+ FLD_SET(set_flags, DB_TXN_NOT_DURABLE);
+ break;
+ case ENV_WRNOSYNC:
+ FLD_SET(set_flags, DB_TXN_WRITE_NOSYNC);
+ break;
+#endif
+ case ENV_TXN:
+ FLD_SET(open_flags, DB_INIT_LOCK |
+ DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN);
+ FLD_CLR(open_flags, DB_JOINENV);
+ /* Make sure we have an arg to check against! */
+ if (i < objc) {
+ arg = Tcl_GetStringFromObj(objv[i], NULL);
+ if (strcmp(arg, "nosync") == 0) {
+ FLD_SET(set_flags, DB_TXN_NOSYNC);
+ i++;
+ }
+ }
+ break;
+ case ENV_CREATE:
+ FLD_SET(open_flags, DB_CREATE | DB_INIT_MPOOL);
+ FLD_CLR(open_flags, DB_JOINENV);
+ break;
+ case ENV_ENCRYPT_AES:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptaes passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ _debug_check();
+ ret = (*env)->set_encrypt(*env, passwd, DB_ENCRYPT_AES);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ break;
+ case ENV_ENCRYPT_ANY:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptany passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ _debug_check();
+ ret = (*env)->set_encrypt(*env, passwd, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ break;
+ case ENV_HOME:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-home dir?");
+ result = TCL_ERROR;
+ break;
+ }
+ home = Tcl_GetStringFromObj(objv[i++], NULL);
+ break;
+ case ENV_MODE:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-mode mode?");
+ result = TCL_ERROR;
+ break;
+ }
+ /*
+ * Don't need to check result here because
+ * if TCL_ERROR, the error message is already
+ * set up, and we'll bail out below. If ok,
+ * the mode is set and we go on.
+ */
+ result = Tcl_GetIntFromObj(interp, objv[i++], &mode);
+ break;
+ case ENV_PRIVATE:
+ FLD_SET(open_flags, DB_PRIVATE | DB_INIT_MPOOL);
+ FLD_CLR(open_flags, DB_JOINENV);
+ break;
+ case ENV_RECOVER:
+ FLD_SET(open_flags, DB_RECOVER);
+ break;
+ case ENV_RECOVER_FATAL:
+ FLD_SET(open_flags, DB_RECOVER_FATAL);
+ break;
+ case ENV_SYSTEM_MEM:
+ FLD_SET(open_flags, DB_SYSTEM_MEM);
+ break;
+ case ENV_USE_ENVIRON_ROOT:
+ FLD_SET(open_flags, DB_USE_ENVIRON_ROOT);
+ break;
+ case ENV_USE_ENVIRON:
+ FLD_SET(open_flags, DB_USE_ENVIRON);
+ break;
+ case ENV_CACHESIZE:
+ result = Tcl_ListObjGetElements(interp, objv[i],
+ &myobjc, &myobjv);
+ if (result == TCL_OK)
+ i++;
+ else
+ break;
+ if (myobjc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-cachesize {gbytes bytes ncaches}?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, myobjv[0], &gbytes);
+ if (result != TCL_OK)
+ break;
+ result = _GetUInt32(interp, myobjv[1], &bytes);
+ if (result != TCL_OK)
+ break;
+ result = _GetUInt32(interp, myobjv[2], &ncaches);
+ if (result != TCL_OK)
+ break;
+ _debug_check();
+ ret = (*env)->set_cachesize(*env, gbytes, bytes,
+ ncaches);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_cachesize");
+ break;
+ case ENV_SHM_KEY:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-shm_key key?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = Tcl_GetLongFromObj(interp, objv[i++], &shm);
if (result == TCL_OK) {
_debug_check();
- ret = (*env)->set_tx_timestamp(*env, &time);
+ ret = (*env)->set_shm_key(*env, shm);
result = _ReturnSetup(interp, ret,
- "txn_timestamp");
+ DB_RETOK_STD(ret), "shm_key");
+ }
+ break;
+ case ENV_TXN_MAX:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-txn_max max?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = (*env)->set_tx_max(*env, uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "txn_max");
}
break;
case ENV_ERRFILE:
@@ -871,9 +1131,16 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
/*
* If the user already set one, close it.
*/
- if (ip->i_err != NULL)
+ if (ip->i_err != NULL &&
+ ip->i_err != stdout && ip->i_err != stderr)
fclose(ip->i_err);
- ip->i_err = fopen(arg, "a");
+
+ if (strcmp(arg, "/dev/stdout") == 0)
+ ip->i_err = stdout;
+ else if (strcmp(arg, "/dev/stderr") == 0)
+ ip->i_err = stderr;
+ else
+ ip->i_err = fopen(arg, "a");
if (ip->i_err != NULL) {
_debug_check();
(*env)->set_errfile(*env, ip->i_err);
@@ -891,11 +1158,11 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
* If the user already set one, free it.
*/
if (ip->i_errpfx != NULL)
- __os_freestr(ip->i_errpfx);
+ __os_free(NULL, ip->i_errpfx);
if ((ret =
__os_strdup(*env, arg, &ip->i_errpfx)) != 0) {
result = _ReturnSetup(interp, ret,
- "__os_strdup");
+ DB_RETOK_STD(ret), "__os_strdup");
break;
}
if (ip->i_errpfx != NULL) {
@@ -913,7 +1180,8 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
arg = Tcl_GetStringFromObj(objv[i++], NULL);
_debug_check();
ret = (*env)->set_data_dir(*env, arg);
- result = _ReturnSetup(interp, ret, "set_data_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_data_dir");
break;
case ENV_LOG_DIR:
if (i >= objc) {
@@ -925,7 +1193,8 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
arg = Tcl_GetStringFromObj(objv[i++], NULL);
_debug_check();
ret = (*env)->set_lg_dir(*env, arg);
- result = _ReturnSetup(interp, ret, "set_lg_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_lg_dir");
break;
case ENV_TMP_DIR:
if (i >= objc) {
@@ -937,7 +1206,8 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
arg = Tcl_GetStringFromObj(objv[i++], NULL);
_debug_check();
ret = (*env)->set_tmp_dir(*env, arg);
- result = _ReturnSetup(interp, ret, "set_tmp_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_tmp_dir");
break;
}
/*
@@ -959,15 +1229,17 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
if (logmaxset) {
_debug_check();
ret = (*env)->set_lg_max(*env, (u_int32_t)logmaxset);
- result = _ReturnSetup(interp, ret, "log_max");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "log_max");
}
if (result != TCL_OK)
goto error;
- if (set_flag) {
- ret = (*env)->set_flags(*env, set_flag, 1);
- result = _ReturnSetup(interp, ret, "set_flags");
+ if (set_flags) {
+ ret = (*env)->set_flags(*env, set_flags, 1);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
if (result == TCL_ERROR)
goto error;
/*
@@ -985,11 +1257,17 @@ bdb_EnvOpen(interp, objc, objv, ip, env)
*/
_debug_check();
ret = (*env)->open(*env, home, open_flags, mode);
- result = _ReturnSetup(interp, ret, "env open");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "env open");
-error:
- if (result == TCL_ERROR) {
- if (ip->i_err) {
+ if (rep_flags != 0 && result == TCL_OK) {
+ _debug_check();
+ ret = (*env)->rep_start(*env, NULL, rep_flags);
+ result = _ReturnSetup(interp,
+ ret, DB_RETOK_STD(ret), "rep_start");
+ }
+
+error: if (result == TCL_ERROR) {
+ if (ip->i_err && ip->i_err != stdout && ip->i_err != stderr) {
fclose(ip->i_err);
ip->i_err = NULL;
}
@@ -1020,19 +1298,37 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
DBTCL_INFO *ip; /* Our internal info */
DB **dbp; /* DB handle */
{
- static char *bdbenvopen[] = {
+ static const char *bdbenvopen[] = {
"-env", NULL
};
enum bdbenvopen {
TCL_DB_ENV0
};
- static char *bdbopen[] = {
+ static const char *bdbopen[] = {
+#if CONFIG_TEST
+ "-btcompare",
+ "-dirty",
+ "-dupcompare",
+ "-hashproc",
+ "-lorder",
+ "-minkey",
+ "-nommap",
+ "-notdurable",
+ "-revsplitoff",
+ "-test",
+ "-thread",
+#endif
+ "-auto_commit",
"-btree",
"-cachesize",
+ "-chksum",
"-create",
"-delim",
"-dup",
"-dupsort",
+ "-encrypt",
+ "-encryptaes",
+ "-encryptany",
"-env",
"-errfile",
"-errpfx",
@@ -1041,11 +1337,9 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
"-ffactor",
"-hash",
"-len",
- "-lorder",
- "-minkey",
+ "-maxsize",
"-mode",
"-nelem",
- "-nommap",
"-pad",
"-pagesize",
"-queue",
@@ -1053,22 +1347,39 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
"-recno",
"-recnum",
"-renumber",
- "-revsplitoff",
"-snapshot",
"-source",
"-truncate",
- "-test",
+ "-txn",
"-unknown",
"--",
NULL
};
enum bdbopen {
+#if CONFIG_TEST
+ TCL_DB_BTCOMPARE,
+ TCL_DB_DIRTY,
+ TCL_DB_DUPCOMPARE,
+ TCL_DB_HASHPROC,
+ TCL_DB_LORDER,
+ TCL_DB_MINKEY,
+ TCL_DB_NOMMAP,
+ TCL_DB_NOTDURABLE,
+ TCL_DB_REVSPLIT,
+ TCL_DB_TEST,
+ TCL_DB_THREAD,
+#endif
+ TCL_DB_AUTO_COMMIT,
TCL_DB_BTREE,
TCL_DB_CACHESIZE,
+ TCL_DB_CHKSUM,
TCL_DB_CREATE,
TCL_DB_DELIM,
TCL_DB_DUP,
TCL_DB_DUPSORT,
+ TCL_DB_ENCRYPT,
+ TCL_DB_ENCRYPT_AES,
+ TCL_DB_ENCRYPT_ANY,
TCL_DB_ENV,
TCL_DB_ERRFILE,
TCL_DB_ERRPFX,
@@ -1077,11 +1388,9 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
TCL_DB_FFACTOR,
TCL_DB_HASH,
TCL_DB_LEN,
- TCL_DB_LORDER,
- TCL_DB_MINKEY,
+ TCL_DB_MAXSIZE,
TCL_DB_MODE,
TCL_DB_NELEM,
- TCL_DB_NOMMAP,
TCL_DB_PAD,
TCL_DB_PAGESIZE,
TCL_DB_QUEUE,
@@ -1089,28 +1398,27 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
TCL_DB_RECNO,
TCL_DB_RECNUM,
TCL_DB_RENUMBER,
- TCL_DB_REVSPLIT,
TCL_DB_SNAPSHOT,
TCL_DB_SOURCE,
TCL_DB_TRUNCATE,
- TCL_DB_TEST,
+ TCL_DB_TXN,
TCL_DB_UNKNOWN,
TCL_DB_ENDARG
};
DBTCL_INFO *envip, *errip;
+ DB_TXN *txn;
DBTYPE type;
DB_ENV *envp;
Tcl_Obj **myobjv;
- u_int32_t gbytes, bytes, ncaches, open_flags;
- int endarg, i, intarg, itmp, j, mode, myobjc;
- int optindex, result, ret, set_err, set_flag, set_pfx, subdblen;
+ u_int32_t gbytes, bytes, ncaches, open_flags, uintarg;
+ int endarg, i, intarg, mode, myobjc;
+ int optindex, result, ret, set_err, set_flags, set_pfx, subdblen;
u_char *subdbtmp;
- char *arg, *db, *subdb;
- extern u_int32_t __ham_test __P((DB *, const void *, u_int32_t));
+ char *arg, *db, *passwd, *subdb, msg[MSG_SIZE];
type = DB_UNKNOWN;
- endarg = mode = set_err = set_flag = set_pfx = 0;
+ endarg = mode = set_err = set_flags = set_pfx = 0;
result = TCL_OK;
subdbtmp = NULL;
db = subdb = NULL;
@@ -1118,10 +1426,20 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
/*
* XXX
* If/when our Tcl interface becomes thread-safe, we should enable
- * DB_THREAD here. See comment in bdb_EnvOpen().
+ * DB_THREAD here in all cases. For now, we turn it on later in this
+ * function, and only when we're in testing and we specify the
+ * -thread flag, so that we can exercise MUTEX_THREAD_LOCK cases.
+ *
+ * In order to become truly thread-safe, we need to look at making sure
+ * DBTCL_INFO structs are safe to share across threads (they're not
+ * mutex-protected) before we declare the Tcl interface thread-safe.
+ * Meanwhile, there's no strong reason to enable DB_THREAD when not
+ * testing.
*/
open_flags = 0;
+
envp = NULL;
+ txn = NULL;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?args?");
@@ -1162,7 +1480,11 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
*/
ret = db_create(dbp, envp, 0);
if (ret)
- return (_ReturnSetup(interp, ret, "db_create"));
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_create"));
+
+ /* Hang our info pointer on the DB handle, so we can do callbacks. */
+ (*dbp)->api_internal = ip;
/*
* XXX Remove restriction when err stuff is not tied to env.
@@ -1193,6 +1515,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
*/
i = 2;
while (i < objc) {
+ Tcl_ResetResult(interp);
if (Tcl_GetIndexFromObj(interp, objv[i], bdbopen, "option",
TCL_EXACT, &optindex) != TCL_OK) {
arg = Tcl_GetStringFromObj(objv[i], NULL);
@@ -1205,12 +1528,141 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
}
i++;
switch ((enum bdbopen)optindex) {
+#if CONFIG_TEST
+ case TCL_DB_BTCOMPARE:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-btcompare compareproc");
+ result = TCL_ERROR;
+ break;
+ }
+
+ /*
+ * Store the object containing the procedure name.
+ * We don't need to crack it out now--we'll want
+ * to bundle it up to pass into Tcl_EvalObjv anyway.
+ * Tcl's object refcounting will--I hope--take care
+ * of the memory management here.
+ */
+ ip->i_btcompare = objv[i++];
+ Tcl_IncrRefCount(ip->i_btcompare);
+ _debug_check();
+ ret = (*dbp)->set_bt_compare(*dbp, tcl_bt_compare);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_bt_compare");
+ break;
+ case TCL_DB_DIRTY:
+ open_flags |= DB_DIRTY_READ;
+ break;
+ case TCL_DB_DUPCOMPARE:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-dupcompare compareproc");
+ result = TCL_ERROR;
+ break;
+ }
+
+ /*
+ * Store the object containing the procedure name.
+ * See TCL_DB_BTCOMPARE.
+ */
+ ip->i_dupcompare = objv[i++];
+ Tcl_IncrRefCount(ip->i_dupcompare);
+ _debug_check();
+ ret = (*dbp)->set_dup_compare(*dbp, tcl_dup_compare);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_dup_compare");
+ break;
+ case TCL_DB_HASHPROC:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-hashproc hashproc");
+ result = TCL_ERROR;
+ break;
+ }
+
+ /*
+ * Store the object containing the procedure name.
+ * See TCL_DB_BTCOMPARE.
+ */
+ ip->i_hashproc = objv[i++];
+ Tcl_IncrRefCount(ip->i_hashproc);
+ _debug_check();
+ ret = (*dbp)->set_h_hash(*dbp, tcl_h_hash);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_h_hash");
+ break;
+ case TCL_DB_LORDER:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-lorder 1234|4321");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = (*dbp)->set_lorder(*dbp, uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "set_lorder");
+ }
+ break;
+ case TCL_DB_MINKEY:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "-minkey minkey");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetUInt32(interp, objv[i++], &uintarg);
+ if (result == TCL_OK) {
+ _debug_check();
+ ret = (*dbp)->set_bt_minkey(*dbp, uintarg);
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "set_bt_minkey");
+ }
+ break;
+ case TCL_DB_NOMMAP:
+ open_flags |= DB_NOMMAP;
+ break;
+ case TCL_DB_NOTDURABLE:
+ set_flags |= DB_TXN_NOT_DURABLE;
+ break;
+ case TCL_DB_REVSPLIT:
+ set_flags |= DB_REVSPLITOFF;
+ break;
+ case TCL_DB_TEST:
+ (*dbp)->set_h_hash(*dbp, __ham_test);
+ break;
+ case TCL_DB_THREAD:
+ /* Enable DB_THREAD when specified in testing. */
+ open_flags |= DB_THREAD;
+ break;
+#endif
+ case TCL_DB_AUTO_COMMIT:
+ open_flags |= DB_AUTO_COMMIT;
+ break;
case TCL_DB_ENV:
/*
* Already parsed this, skip it and the env pointer.
*/
i++;
continue;
+ case TCL_DB_TXN:
+ if (i > (objc - 1)) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Put: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
case TCL_DB_BTREE:
if (type != DB_UNKNOWN) {
Tcl_SetResult(interp,
@@ -1267,9 +1719,6 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
case TCL_DB_TRUNCATE:
open_flags |= DB_TRUNCATE;
break;
- case TCL_DB_TEST:
- (*dbp)->set_h_hash(*dbp, __ham_test);
- break;
case TCL_DB_MODE:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
@@ -1285,26 +1734,54 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
*/
result = Tcl_GetIntFromObj(interp, objv[i++], &mode);
break;
- case TCL_DB_NOMMAP:
- open_flags |= DB_NOMMAP;
- break;
case TCL_DB_DUP:
- set_flag |= DB_DUP;
+ set_flags |= DB_DUP;
break;
case TCL_DB_DUPSORT:
- set_flag |= DB_DUPSORT;
+ set_flags |= DB_DUPSORT;
break;
case TCL_DB_RECNUM:
- set_flag |= DB_RECNUM;
+ set_flags |= DB_RECNUM;
break;
case TCL_DB_RENUMBER:
- set_flag |= DB_RENUMBER;
- break;
- case TCL_DB_REVSPLIT:
- set_flag |= DB_REVSPLITOFF;
+ set_flags |= DB_RENUMBER;
break;
case TCL_DB_SNAPSHOT:
- set_flag |= DB_SNAPSHOT;
+ set_flags |= DB_SNAPSHOT;
+ break;
+ case TCL_DB_CHKSUM:
+ set_flags |= DB_CHKSUM;
+ break;
+ case TCL_DB_ENCRYPT:
+ set_flags |= DB_ENCRYPT;
+ break;
+ case TCL_DB_ENCRYPT_AES:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptaes passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ _debug_check();
+ ret = (*dbp)->set_encrypt(*dbp, passwd, DB_ENCRYPT_AES);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ break;
+ case TCL_DB_ENCRYPT_ANY:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptany passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ _debug_check();
+ ret = (*dbp)->set_encrypt(*dbp, passwd, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
break;
case TCL_DB_FFACTOR:
if (i >= objc) {
@@ -1313,13 +1790,12 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_h_ffactor(*dbp,
- (u_int32_t)intarg);
+ ret = (*dbp)->set_h_ffactor(*dbp, uintarg);
result = _ReturnSetup(interp, ret,
- "set_h_ffactor");
+ DB_RETOK_STD(ret), "set_h_ffactor");
}
break;
case TCL_DB_NELEM:
@@ -1329,60 +1805,58 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_h_nelem(*dbp,
- (u_int32_t)intarg);
+ ret = (*dbp)->set_h_nelem(*dbp, uintarg);
result = _ReturnSetup(interp, ret,
- "set_h_nelem");
+ DB_RETOK_STD(ret), "set_h_nelem");
}
break;
- case TCL_DB_LORDER:
+ case TCL_DB_DELIM:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "-lorder 1234|4321");
+ "-delim delim");
result = TCL_ERROR;
break;
}
result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_lorder(*dbp,
- (u_int32_t)intarg);
+ ret = (*dbp)->set_re_delim(*dbp, intarg);
result = _ReturnSetup(interp, ret,
- "set_lorder");
+ DB_RETOK_STD(ret), "set_re_delim");
}
break;
- case TCL_DB_DELIM:
+ case TCL_DB_LEN:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "-delim delim");
+ "-len length");
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_re_delim(*dbp, intarg);
+ ret = (*dbp)->set_re_len(*dbp, uintarg);
result = _ReturnSetup(interp, ret,
- "set_re_delim");
+ DB_RETOK_STD(ret), "set_re_len");
}
break;
- case TCL_DB_LEN:
+ case TCL_DB_MAXSIZE:
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
"-len length");
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_re_len(*dbp,
- (u_int32_t)intarg);
+ ret = (*dbp)->mpf->set_maxsize(
+ (*dbp)->mpf, 0, uintarg);
result = _ReturnSetup(interp, ret,
- "set_re_len");
+ DB_RETOK_STD(ret), "set_re_len");
}
break;
case TCL_DB_PAD:
@@ -1397,7 +1871,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
_debug_check();
ret = (*dbp)->set_re_pad(*dbp, intarg);
result = _ReturnSetup(interp, ret,
- "set_re_pad");
+ DB_RETOK_STD(ret), "set_re_pad");
}
break;
case TCL_DB_SOURCE:
@@ -1410,7 +1884,8 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
arg = Tcl_GetStringFromObj(objv[i++], NULL);
_debug_check();
ret = (*dbp)->set_re_source(*dbp, arg);
- result = _ReturnSetup(interp, ret, "set_re_source");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_re_source");
break;
case TCL_DB_EXTENT:
if (i >= objc) {
@@ -1419,28 +1894,12 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
- if (result == TCL_OK) {
- _debug_check();
- ret = (*dbp)->set_q_extentsize(*dbp,
- (u_int32_t)intarg);
- result = _ReturnSetup(interp, ret,
- "set_q_extentsize");
- }
- break;
- case TCL_DB_MINKEY:
- if (i >= objc) {
- Tcl_WrongNumArgs(interp, 2, objv,
- "-minkey minkey");
- result = TCL_ERROR;
- break;
- }
- result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);
+ result = _GetUInt32(interp, objv[i++], &uintarg);
if (result == TCL_OK) {
_debug_check();
- ret = (*dbp)->set_bt_minkey(*dbp, intarg);
+ ret = (*dbp)->set_q_extentsize(*dbp, uintarg);
result = _ReturnSetup(interp, ret,
- "set_bt_minkey");
+ DB_RETOK_STD(ret), "set_q_extentsize");
}
break;
case TCL_DB_CACHESIZE:
@@ -1448,30 +1907,26 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
&myobjc, &myobjv);
if (result != TCL_OK)
break;
- j = 0;
if (myobjc != 3) {
Tcl_WrongNumArgs(interp, 2, objv,
"?-cachesize {gbytes bytes ncaches}?");
result = TCL_ERROR;
break;
}
- result = Tcl_GetIntFromObj(interp, myobjv[0], &itmp);
- gbytes = itmp;
+ result = _GetUInt32(interp, myobjv[0], &gbytes);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, myobjv[1], &itmp);
- bytes = itmp;
+ result = _GetUInt32(interp, myobjv[1], &bytes);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, myobjv[2], &itmp);
- ncaches = itmp;
+ result = _GetUInt32(interp, myobjv[2], &ncaches);
if (result != TCL_OK)
break;
_debug_check();
ret = (*dbp)->set_cachesize(*dbp, gbytes, bytes,
ncaches);
result = _ReturnSetup(interp, ret,
- "set_cachesize");
+ DB_RETOK_STD(ret), "set_cachesize");
break;
case TCL_DB_PAGESIZE:
if (i >= objc) {
@@ -1486,7 +1941,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
ret = (*dbp)->set_pagesize(*dbp,
(size_t)intarg);
result = _ReturnSetup(interp, ret,
- "set pagesize");
+ DB_RETOK_STD(ret), "set pagesize");
}
break;
case TCL_DB_ERRFILE:
@@ -1500,9 +1955,15 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
/*
* If the user already set one, close it.
*/
- if (errip->i_err != NULL)
+ if (errip->i_err != NULL &&
+ errip->i_err != stdout && errip->i_err != stderr)
fclose(errip->i_err);
- errip->i_err = fopen(arg, "a");
+ if (strcmp(arg, "/dev/stdout") == 0)
+ errip->i_err = stdout;
+ else if (strcmp(arg, "/dev/stderr") == 0)
+ errip->i_err = stderr;
+ else
+ errip->i_err = fopen(arg, "a");
if (errip->i_err != NULL) {
_debug_check();
(*dbp)->set_errfile(*dbp, errip->i_err);
@@ -1521,11 +1982,11 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
* If the user already set one, free it.
*/
if (errip->i_errpfx != NULL)
- __os_freestr(errip->i_errpfx);
+ __os_free(NULL, errip->i_errpfx);
if ((ret = __os_strdup((*dbp)->dbenv,
arg, &errip->i_errpfx)) != 0) {
result = _ReturnSetup(interp, ret,
- "__os_strdup");
+ DB_RETOK_STD(ret), "__os_strdup");
break;
}
if (errip->i_errpfx != NULL) {
@@ -1567,7 +2028,7 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
if ((ret = __os_malloc(envp,
- subdblen + 1, NULL, &subdb)) != 0) {
+ subdblen + 1, &subdb)) != 0) {
Tcl_SetResult(interp, db_strerror(ret),
TCL_STATIC);
return (0);
@@ -1576,9 +2037,10 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
subdb[subdblen] = '\0';
}
}
- if (set_flag) {
- ret = (*dbp)->set_flags(*dbp, set_flag);
- result = _ReturnSetup(interp, ret, "set_flags");
+ if (set_flags) {
+ ret = (*dbp)->set_flags(*dbp, set_flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
if (result == TCL_ERROR)
goto error;
/*
@@ -1596,13 +2058,14 @@ bdb_DbOpen(interp, objc, objv, ip, dbp)
_debug_check();
/* Open the database. */
- ret = (*dbp)->open(*dbp, db, subdb, type, open_flags, mode);
- result = _ReturnSetup(interp, ret, "db open");
+ ret = (*dbp)->open(*dbp, txn, db, subdb, type, open_flags, mode);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db open");
error:
if (subdb)
- __os_free(subdb, subdblen + 1);
+ __os_free(envp, subdb);
if (result == TCL_ERROR) {
+ (void)(*dbp)->close(*dbp, 0);
/*
* If we opened and set up the error file in the environment
* on this open, but we failed for some other reason, clean
@@ -1614,15 +2077,15 @@ error:
* if (ip->i_err)
* fclose(ip->i_err);
*/
- if (set_err && errip && errip->i_err != NULL) {
+ if (set_err && errip && errip->i_err != NULL &&
+ errip->i_err != stdout && errip->i_err != stderr) {
fclose(errip->i_err);
errip->i_err = NULL;
}
if (set_pfx && errip && errip->i_errpfx != NULL) {
- __os_freestr(errip->i_errpfx);
+ __os_free(envp, errip->i_errpfx);
errip->i_errpfx = NULL;
}
- (void)(*dbp)->close(*dbp, 0);
*dbp = NULL;
}
return (result);
@@ -1630,7 +2093,7 @@ error:
/*
* bdb_DbRemove --
- * Implements the DB->remove command.
+ * Implements the DB_ENV->remove and DB->remove command.
*/
static int
bdb_DbRemove(interp, objc, objv)
@@ -1638,25 +2101,42 @@ bdb_DbRemove(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *bdbrem[] = {
- "-env", "--", NULL
+ static const char *bdbrem[] = {
+ "-auto_commit",
+ "-encrypt",
+ "-encryptaes",
+ "-encryptany",
+ "-env",
+ "-txn",
+ "--",
+ NULL
};
enum bdbrem {
+ TCL_DBREM_AUTOCOMMIT,
+ TCL_DBREM_ENCRYPT,
+ TCL_DBREM_ENCRYPT_AES,
+ TCL_DBREM_ENCRYPT_ANY,
TCL_DBREM_ENV,
+ TCL_DBREM_TXN,
TCL_DBREM_ENDARG
};
- DB_ENV *envp;
DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
int endarg, i, optindex, result, ret, subdblen;
+ u_int32_t enc_flag, iflags, set_flags;
u_char *subdbtmp;
- char *arg, *db, *subdb;
+ char *arg, *db, msg[MSG_SIZE], *passwd, *subdb;
- envp = NULL;
+ db = subdb = NULL;
dbp = NULL;
+ endarg = 0;
+ envp = NULL;
+ iflags = enc_flag = set_flags = 0;
+ passwd = NULL;
result = TCL_OK;
subdbtmp = NULL;
- db = subdb = NULL;
- endarg = 0;
+ txn = NULL;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?args? filename ?database?");
@@ -1681,6 +2161,36 @@ bdb_DbRemove(interp, objc, objv)
}
i++;
switch ((enum bdbrem)optindex) {
+ case TCL_DBREM_AUTOCOMMIT:
+ iflags |= DB_AUTO_COMMIT;
+ _debug_check();
+ break;
+ case TCL_DBREM_ENCRYPT:
+ set_flags |= DB_ENCRYPT;
+ _debug_check();
+ break;
+ case TCL_DBREM_ENCRYPT_AES:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptaes passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = DB_ENCRYPT_AES;
+ break;
+ case TCL_DBREM_ENCRYPT_ANY:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptany passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = 0;
+ break;
case TCL_DBREM_ENV:
arg = Tcl_GetStringFromObj(objv[i++], NULL);
envp = NAME_TO_ENV(arg);
@@ -1694,6 +2204,21 @@ bdb_DbRemove(interp, objc, objv)
case TCL_DBREM_ENDARG:
endarg = 1;
break;
+ case TCL_DBREM_TXN:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Put: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
}
/*
* If, at any time, parsing the args we get an error,
@@ -1721,7 +2246,7 @@ bdb_DbRemove(interp, objc, objv)
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
if ((ret = __os_malloc(envp, subdblen + 1,
- NULL, &subdb)) != 0) { Tcl_SetResult(interp,
+ &subdb)) != 0) { Tcl_SetResult(interp,
db_strerror(ret), TCL_STATIC);
return (0);
}
@@ -1733,28 +2258,48 @@ bdb_DbRemove(interp, objc, objv)
result = TCL_ERROR;
goto error;
}
- ret = db_create(&dbp, envp, 0);
- if (ret) {
- result = _ReturnSetup(interp, ret, "db_create");
- goto error;
+ if (envp == NULL) {
+ ret = db_create(&dbp, envp, 0);
+ if (ret) {
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_create");
+ goto error;
+ }
+
+ if (passwd != NULL) {
+ ret = dbp->set_encrypt(dbp, passwd, enc_flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ }
+ if (set_flags != 0) {
+ ret = dbp->set_flags(dbp, set_flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
+ }
}
+
/*
- * No matter what, we NULL out dbp after this call.
+ * The dbremove method is a destructor, NULL out the dbp.
*/
- ret = dbp->remove(dbp, db, subdb, 0);
- result = _ReturnSetup(interp, ret, "db remove");
+ _debug_check();
+ if (dbp == NULL)
+ ret = envp->dbremove(envp, txn, db, subdb, iflags);
+ else
+ ret = dbp->remove(dbp, db, subdb, 0);
+
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db remove");
dbp = NULL;
error:
if (subdb)
- __os_free(subdb, subdblen + 1);
- if (result == TCL_ERROR && dbp)
+ __os_free(envp, subdb);
+ if (result == TCL_ERROR && dbp != NULL)
(void)dbp->close(dbp, 0);
return (result);
}
/*
* bdb_DbRename --
- * Implements the DB->rename command.
+ * Implements the DB_ENV->dbrename and DB->rename commands.
*/
static int
bdb_DbRename(interp, objc, objv)
@@ -1762,25 +2307,42 @@ bdb_DbRename(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *bdbmv[] = {
- "-env", "--", NULL
+ static const char *bdbmv[] = {
+ "-auto_commit",
+ "-encrypt",
+ "-encryptaes",
+ "-encryptany",
+ "-env",
+ "-txn",
+ "--",
+ NULL
};
enum bdbmv {
+ TCL_DBMV_AUTOCOMMIT,
+ TCL_DBMV_ENCRYPT,
+ TCL_DBMV_ENCRYPT_AES,
+ TCL_DBMV_ENCRYPT_ANY,
TCL_DBMV_ENV,
+ TCL_DBMV_TXN,
TCL_DBMV_ENDARG
};
- DB_ENV *envp;
DB *dbp;
+ DB_ENV *envp;
+ DB_TXN *txn;
+ u_int32_t enc_flag, iflags, set_flags;
int endarg, i, newlen, optindex, result, ret, subdblen;
u_char *subdbtmp;
- char *arg, *db, *newname, *subdb;
+ char *arg, *db, msg[MSG_SIZE], *newname, *passwd, *subdb;
- envp = NULL;
+ db = newname = subdb = NULL;
dbp = NULL;
+ endarg = 0;
+ envp = NULL;
+ iflags = enc_flag = set_flags = 0;
+ passwd = NULL;
result = TCL_OK;
subdbtmp = NULL;
- db = newname = subdb = NULL;
- endarg = 0;
+ txn = NULL;
if (objc < 2) {
Tcl_WrongNumArgs(interp,
@@ -1806,6 +2368,36 @@ bdb_DbRename(interp, objc, objv)
}
i++;
switch ((enum bdbmv)optindex) {
+ case TCL_DBMV_AUTOCOMMIT:
+ iflags |= DB_AUTO_COMMIT;
+ _debug_check();
+ break;
+ case TCL_DBMV_ENCRYPT:
+ set_flags |= DB_ENCRYPT;
+ _debug_check();
+ break;
+ case TCL_DBMV_ENCRYPT_AES:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptaes passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = DB_ENCRYPT_AES;
+ break;
+ case TCL_DBMV_ENCRYPT_ANY:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptany passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = 0;
+ break;
case TCL_DBMV_ENV:
arg = Tcl_GetStringFromObj(objv[i++], NULL);
envp = NAME_TO_ENV(arg);
@@ -1819,6 +2411,21 @@ bdb_DbRename(interp, objc, objv)
case TCL_DBMV_ENDARG:
endarg = 1;
break;
+ case TCL_DBMV_TXN:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "Put: Invalid txn: %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ result = TCL_ERROR;
+ }
+ break;
}
/*
* If, at any time, parsing the args we get an error,
@@ -1846,7 +2453,7 @@ bdb_DbRename(interp, objc, objv)
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
if ((ret = __os_malloc(envp, subdblen + 1,
- NULL, &subdb)) != 0) {
+ &subdb)) != 0) {
Tcl_SetResult(interp,
db_strerror(ret), TCL_STATIC);
return (0);
@@ -1857,7 +2464,7 @@ bdb_DbRename(interp, objc, objv)
subdbtmp =
Tcl_GetByteArrayFromObj(objv[i++], &newlen);
if ((ret = __os_malloc(envp, newlen + 1,
- NULL, &newname)) != 0) {
+ &newname)) != 0) {
Tcl_SetResult(interp,
db_strerror(ret), TCL_STATIC);
return (0);
@@ -1865,31 +2472,51 @@ bdb_DbRename(interp, objc, objv)
memcpy(newname, subdbtmp, newlen);
newname[newlen] = '\0';
} else {
- Tcl_WrongNumArgs(interp, 3, objv, "?args? filename ?database? ?newname?");
+ Tcl_WrongNumArgs(
+ interp, 3, objv, "?args? filename ?database? ?newname?");
result = TCL_ERROR;
goto error;
}
- ret = db_create(&dbp, envp, 0);
- if (ret) {
- result = _ReturnSetup(interp, ret, "db_create");
- goto error;
+ if (envp == NULL) {
+ ret = db_create(&dbp, envp, 0);
+ if (ret) {
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_create");
+ goto error;
+ }
+ if (passwd != NULL) {
+ ret = dbp->set_encrypt(dbp, passwd, enc_flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ }
+ if (set_flags != 0) {
+ ret = dbp->set_flags(dbp, set_flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
+ }
}
+
/*
- * No matter what, we NULL out dbp after this call.
+ * The dbrename method is a destructor, NULL out the dbp.
*/
- ret = dbp->rename(dbp, db, subdb, newname, 0);
- result = _ReturnSetup(interp, ret, "db rename");
+ _debug_check();
+ if (dbp == NULL)
+ ret = envp->dbrename(envp, txn, db, subdb, newname, iflags);
+ else
+ ret = dbp->rename(dbp, db, subdb, newname, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db rename");
dbp = NULL;
error:
if (subdb)
- __os_free(subdb, subdblen + 1);
+ __os_free(envp, subdb);
if (newname)
- __os_free(newname, newlen + 1);
- if (result == TCL_ERROR && dbp)
+ __os_free(envp, newname);
+ if (result == TCL_ERROR && dbp != NULL)
(void)dbp->close(dbp, 0);
return (result);
}
+#if CONFIG_TEST
/*
* bdb_DbVerify --
* Implements the DB->verify command.
@@ -1900,10 +2527,20 @@ bdb_DbVerify(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *bdbverify[] = {
- "-env", "-errfile", "-errpfx", "--", NULL
+ static const char *bdbverify[] = {
+ "-encrypt",
+ "-encryptaes",
+ "-encryptany",
+ "-env",
+ "-errfile",
+ "-errpfx",
+ "--",
+ NULL
};
enum bdbvrfy {
+ TCL_DBVRFY_ENCRYPT,
+ TCL_DBVRFY_ENCRYPT_AES,
+ TCL_DBVRFY_ENCRYPT_ANY,
TCL_DBVRFY_ENV,
TCL_DBVRFY_ERRFILE,
TCL_DBVRFY_ERRPFX,
@@ -1912,15 +2549,18 @@ bdb_DbVerify(interp, objc, objv)
DB_ENV *envp;
DB *dbp;
FILE *errf;
- int endarg, i, optindex, result, ret, flags;
- char *arg, *db, *errpfx;
+ u_int32_t enc_flag, flags, set_flags;
+ int endarg, i, optindex, result, ret;
+ char *arg, *db, *errpfx, *passwd;
envp = NULL;
dbp = NULL;
+ passwd = NULL;
result = TCL_OK;
db = errpfx = NULL;
errf = NULL;
flags = endarg = 0;
+ enc_flag = set_flags = 0;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?args? filename");
@@ -1945,6 +2585,32 @@ bdb_DbVerify(interp, objc, objv)
}
i++;
switch ((enum bdbvrfy)optindex) {
+ case TCL_DBVRFY_ENCRYPT:
+ set_flags |= DB_ENCRYPT;
+ _debug_check();
+ break;
+ case TCL_DBVRFY_ENCRYPT_AES:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptaes passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = DB_ENCRYPT_AES;
+ break;
+ case TCL_DBVRFY_ENCRYPT_ANY:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-encryptany passwd?");
+ result = TCL_ERROR;
+ break;
+ }
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = 0;
+ break;
case TCL_DBVRFY_ENV:
arg = Tcl_GetStringFromObj(objv[i++], NULL);
envp = NAME_TO_ENV(arg);
@@ -1967,9 +2633,14 @@ bdb_DbVerify(interp, objc, objv)
/*
* If the user already set one, close it.
*/
- if (errf != NULL)
+ if (errf != NULL && errf != stdout && errf != stderr)
fclose(errf);
- errf = fopen(arg, "a");
+ if (strcmp(arg, "/dev/stdout") == 0)
+ errf = stdout;
+ else if (strcmp(arg, "/dev/stderr") == 0)
+ errf = stderr;
+ else
+ errf = fopen(arg, "a");
break;
case TCL_DBVRFY_ERRPFX:
if (i >= objc) {
@@ -1983,10 +2654,10 @@ bdb_DbVerify(interp, objc, objv)
* If the user already set one, free it.
*/
if (errpfx != NULL)
- __os_freestr(errpfx);
+ __os_free(envp, errpfx);
if ((ret = __os_strdup(NULL, arg, &errpfx)) != 0) {
result = _ReturnSetup(interp, ret,
- "__os_strdup");
+ DB_RETOK_STD(ret), "__os_strdup");
break;
}
break;
@@ -2017,26 +2688,43 @@ bdb_DbVerify(interp, objc, objv)
}
ret = db_create(&dbp, envp, 0);
if (ret) {
- result = _ReturnSetup(interp, ret, "db_create");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_create");
goto error;
}
+ if (passwd != NULL) {
+ ret = dbp->set_encrypt(dbp, passwd, enc_flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ }
+
+ if (set_flags != 0) {
+ ret = dbp->set_flags(dbp, set_flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
+ }
if (errf != NULL)
dbp->set_errfile(dbp, errf);
if (errpfx != NULL)
dbp->set_errpfx(dbp, errpfx);
+ /*
+ * The verify method is a destructor, NULL out the dbp.
+ */
ret = dbp->verify(dbp, db, NULL, NULL, flags);
- result = _ReturnSetup(interp, ret, "db verify");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db verify");
+ dbp = NULL;
error:
- if (errf != NULL)
+ if (errf != NULL && errf != stdout && errf != stderr)
fclose(errf);
if (errpfx != NULL)
- __os_freestr(errpfx);
+ __os_free(envp, errpfx);
if (dbp)
(void)dbp->close(dbp, 0);
return (result);
}
+#endif
/*
* bdb_Version --
@@ -2048,7 +2736,7 @@ bdb_Version(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *bdbver[] = {
+ static const char *bdbver[] = {
"-string", NULL
};
enum bdbver {
@@ -2113,6 +2801,7 @@ error:
return (result);
}
+#if CONFIG_TEST
/*
* bdb_Handles --
* Implements the handles command.
@@ -2155,7 +2844,7 @@ bdb_DbUpgrade(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *bdbupg[] = {
+ static const char *bdbupg[] = {
"-dupsort", "-env", "--", NULL
};
enum bdbupg {
@@ -2165,7 +2854,8 @@ bdb_DbUpgrade(interp, objc, objv)
};
DB_ENV *envp;
DB *dbp;
- int endarg, i, optindex, result, ret, flags;
+ u_int32_t flags;
+ int endarg, i, optindex, result, ret;
char *arg, *db;
envp = NULL;
@@ -2233,14 +2923,299 @@ bdb_DbUpgrade(interp, objc, objv)
}
ret = db_create(&dbp, envp, 0);
if (ret) {
- result = _ReturnSetup(interp, ret, "db_create");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_create");
goto error;
}
ret = dbp->upgrade(dbp, db, flags);
- result = _ReturnSetup(interp, ret, "db upgrade");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db upgrade");
error:
if (dbp)
(void)dbp->close(dbp, 0);
return (result);
}
+
+/*
+ * tcl_bt_compare and tcl_dup_compare --
+ * These two are basically identical internally, so may as well
+ * share code. The only differences are the name used in error
+ * reporting and the Tcl_Obj representing their respective procs.
+ */
+static int
+tcl_bt_compare(dbp, dbta, dbtb)
+ DB *dbp;
+ const DBT *dbta, *dbtb;
+{
+ return (tcl_compare_callback(dbp, dbta, dbtb,
+ ((DBTCL_INFO *)dbp->api_internal)->i_btcompare, "bt_compare"));
+}
+
+static int
+tcl_dup_compare(dbp, dbta, dbtb)
+ DB *dbp;
+ const DBT *dbta, *dbtb;
+{
+ return (tcl_compare_callback(dbp, dbta, dbtb,
+ ((DBTCL_INFO *)dbp->api_internal)->i_dupcompare, "dup_compare"));
+}
+
+/*
+ * tcl_compare_callback --
+ * Tcl callback for set_bt_compare and set_dup_compare. What this
+ * function does is stuff the data fields of the two DBTs into Tcl ByteArray
+ * objects, then call the procedure stored in ip->i_btcompare on the two
+ * objects. Then we return that procedure's result as the comparison.
+ */
+static int
+tcl_compare_callback(dbp, dbta, dbtb, procobj, errname)
+ DB *dbp;
+ const DBT *dbta, *dbtb;
+ Tcl_Obj *procobj;
+ char *errname;
+{
+ DBTCL_INFO *ip;
+ Tcl_Interp *interp;
+ Tcl_Obj *a, *b, *resobj, *objv[3];
+ int result, cmp;
+
+ ip = (DBTCL_INFO *)dbp->api_internal;
+ interp = ip->i_interp;
+ objv[0] = procobj;
+
+ /*
+ * Create two ByteArray objects, with the two data we've been passed.
+ * This will involve a copy, which is unpleasantly slow, but there's
+ * little we can do to avoid this (I think).
+ */
+ a = Tcl_NewByteArrayObj(dbta->data, dbta->size);
+ Tcl_IncrRefCount(a);
+ b = Tcl_NewByteArrayObj(dbtb->data, dbtb->size);
+ Tcl_IncrRefCount(b);
+
+ objv[1] = a;
+ objv[2] = b;
+
+ result = Tcl_EvalObjv(interp, 3, objv, 0);
+ if (result != TCL_OK) {
+ /*
+ * XXX
+ * If this or the next Tcl call fails, we're doomed.
+ * There's no way to return an error from comparison functions,
+ * no way to determine what the correct sort order is, and
+ * so no way to avoid corrupting the database if we proceed.
+ * We could play some games stashing return values on the
+ * DB handle, but it's not worth the trouble--no one with
+ * any sense is going to be using this other than for testing,
+ * and failure typically means that the bt_compare proc
+ * had a syntax error in it or something similarly dumb.
+ *
+ * So, drop core. If we're not running with diagnostic
+ * mode, panic--and always return a negative number. :-)
+ */
+panic: __db_err(dbp->dbenv, "Tcl %s callback failed", errname);
+ DB_ASSERT(0);
+ return (__db_panic(dbp->dbenv, DB_RUNRECOVERY));
+ }
+
+ resobj = Tcl_GetObjResult(interp);
+ result = Tcl_GetIntFromObj(interp, resobj, &cmp);
+ if (result != TCL_OK)
+ goto panic;
+
+ Tcl_DecrRefCount(a);
+ Tcl_DecrRefCount(b);
+ return (cmp);
+}
+
+/*
+ * tcl_h_hash --
+ * Tcl callback for the hashing function. See tcl_compare_callback--
+ * this works much the same way, only we're given a buffer and a length
+ * instead of two DBTs.
+ */
+static u_int32_t
+tcl_h_hash(dbp, buf, len)
+ DB *dbp;
+ const void *buf;
+ u_int32_t len;
+{
+ DBTCL_INFO *ip;
+ Tcl_Interp *interp;
+ Tcl_Obj *objv[2];
+ int result, hval;
+
+ ip = (DBTCL_INFO *)dbp->api_internal;
+ interp = ip->i_interp;
+ objv[0] = ip->i_hashproc;
+
+ /*
+ * Create a ByteArray for the buffer.
+ */
+ objv[1] = Tcl_NewByteArrayObj((void *)buf, len);
+ Tcl_IncrRefCount(objv[1]);
+ result = Tcl_EvalObjv(interp, 2, objv, 0);
+ if (result != TCL_OK) {
+ /*
+ * XXX
+ * We drop core on error. See the comment in
+ * tcl_compare_callback.
+ */
+panic: __db_err(dbp->dbenv, "Tcl h_hash callback failed");
+ DB_ASSERT(0);
+ return (__db_panic(dbp->dbenv, DB_RUNRECOVERY));
+ }
+
+ result = Tcl_GetIntFromObj(interp, Tcl_GetObjResult(interp), &hval);
+ if (result != TCL_OK)
+ goto panic;
+
+ Tcl_DecrRefCount(objv[1]);
+ return (hval);
+}
+
+/*
+ * tcl_rep_send --
+ * Replication send callback.
+ */
+static int
+tcl_rep_send(dbenv, control, rec, lsnp, eid, flags)
+ DB_ENV *dbenv;
+ const DBT *control, *rec;
+ const DB_LSN *lsnp;
+ int eid;
+ u_int32_t flags;
+{
+#define TCLDB_SENDITEMS 7
+ DBTCL_INFO *ip;
+ Tcl_Interp *interp;
+ Tcl_Obj *control_o, *eid_o, *flags_o, *lsn_o, *origobj, *rec_o;
+ Tcl_Obj *myobjv[2], *resobj, *objv[TCLDB_SENDITEMS];
+ int myobjc, result, ret;
+
+ ip = (DBTCL_INFO *)dbenv->app_private;
+ interp = ip->i_interp;
+ objv[0] = ip->i_rep_send;
+
+ control_o = Tcl_NewByteArrayObj(control->data, control->size);
+ Tcl_IncrRefCount(control_o);
+
+ rec_o = Tcl_NewByteArrayObj(rec->data, rec->size);
+ Tcl_IncrRefCount(rec_o);
+
+ eid_o = Tcl_NewIntObj(eid);
+ Tcl_IncrRefCount(eid_o);
+
+ if (LF_ISSET(DB_REP_PERMANENT))
+ flags_o = Tcl_NewStringObj("perm", strlen("perm"));
+ else if (LF_ISSET(DB_REP_NOBUFFER))
+ flags_o = Tcl_NewStringObj("nobuffer", strlen("nobuffer"));
+ else
+ flags_o = Tcl_NewStringObj("none", strlen("none"));
+ Tcl_IncrRefCount(flags_o);
+
+ myobjc = 2;
+ myobjv[0] = Tcl_NewLongObj((long)lsnp->file);
+ myobjv[1] = Tcl_NewLongObj((long)lsnp->offset);
+ lsn_o = Tcl_NewListObj(myobjc, myobjv);
+
+ objv[1] = control_o;
+ objv[2] = rec_o;
+ objv[3] = ip->i_rep_eid; /* From ID */
+ objv[4] = eid_o; /* To ID */
+ objv[5] = flags_o; /* Flags */
+ objv[6] = lsn_o; /* LSN */
+
+ /*
+ * We really want to return the original result to the
+ * user. So, save the result obj here, and then after
+ * we've taken care of the Tcl_EvalObjv, set the result
+ * back to this original result.
+ */
+ origobj = Tcl_GetObjResult(interp);
+ Tcl_IncrRefCount(origobj);
+ result = Tcl_EvalObjv(interp, TCLDB_SENDITEMS, objv, 0);
+ if (result != TCL_OK) {
+ /*
+ * XXX
+ * This probably isn't the right error behavior, but
+ * this error should only happen if the Tcl callback is
+ * somehow invalid, which is a fatal scripting bug.
+ */
+err: __db_err(dbenv, "Tcl rep_send failure");
+ return (EINVAL);
+ }
+
+ resobj = Tcl_GetObjResult(interp);
+ result = Tcl_GetIntFromObj(interp, resobj, &ret);
+ if (result != TCL_OK)
+ goto err;
+
+ Tcl_SetObjResult(interp, origobj);
+ Tcl_DecrRefCount(origobj);
+ Tcl_DecrRefCount(control_o);
+ Tcl_DecrRefCount(rec_o);
+ Tcl_DecrRefCount(eid_o);
+ Tcl_DecrRefCount(flags_o);
+
+ return (ret);
+}
+#endif
+
+#ifdef CONFIG_TEST
+/*
+ * tcl_db_malloc, tcl_db_realloc, tcl_db_free --
+ * Tcl-local malloc, realloc, and free functions to use for user data
+ * to exercise umalloc/urealloc/ufree. Allocate the memory as a Tcl object
+ * so we're sure to exacerbate and catch any shared-library issues.
+ */
+static void *
+tcl_db_malloc(size)
+ size_t size;
+{
+ Tcl_Obj *obj;
+ void *buf;
+
+ obj = Tcl_NewObj();
+ if (obj == NULL)
+ return (NULL);
+ Tcl_IncrRefCount(obj);
+
+ Tcl_SetObjLength(obj, size + sizeof(Tcl_Obj *));
+ buf = Tcl_GetString(obj);
+ memcpy(buf, &obj, sizeof(&obj));
+
+ buf = (Tcl_Obj **)buf + 1;
+ return (buf);
+}
+
+static void *
+tcl_db_realloc(ptr, size)
+ void *ptr;
+ size_t size;
+{
+ Tcl_Obj *obj;
+
+ if (ptr == NULL)
+ return (tcl_db_malloc(size));
+
+ obj = *(Tcl_Obj **)((Tcl_Obj **)ptr - 1);
+ Tcl_SetObjLength(obj, size + sizeof(Tcl_Obj *));
+
+ ptr = Tcl_GetString(obj);
+ memcpy(ptr, &obj, sizeof(&obj));
+
+ ptr = (Tcl_Obj **)ptr + 1;
+ return (ptr);
+}
+
+static void
+tcl_db_free(ptr)
+ void *ptr;
+{
+ Tcl_Obj *obj;
+
+ obj = *(Tcl_Obj **)((Tcl_Obj **)ptr - 1);
+ Tcl_DecrRefCount(obj);
+}
+#endif
diff --git a/db/tcl/tcl_dbcursor.c b/db/tcl/tcl_dbcursor.c
index 26e7b58c6..489c387bc 100644
--- a/db/tcl/tcl_dbcursor.c
+++ b/db/tcl/tcl_dbcursor.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_dbcursor.c,v 11.26 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: tcl_dbcursor.c,v 11.57 2003/05/17 15:15:45 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,14 +20,14 @@ static const char revid[] = "$Id: tcl_dbcursor.c,v 11.26 2001/01/11 18:19:55 bos
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/tcl_db.h"
/*
* Prototypes for procedures defined later in this file:
*/
-static int tcl_DbcDup __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
-static int tcl_DbcGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
-static int tcl_DbcPut __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
+static int tcl_DbcDup __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
+static int tcl_DbcGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *, int));
+static int tcl_DbcPut __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
/*
* PUBLIC: int dbc_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
@@ -37,12 +37,15 @@ static int tcl_DbcPut __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DBC *));
*/
int
dbc_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Cursor handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Cursor handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *dbccmds[] = {
+ static const char *dbccmds[] = {
+#if CONFIG_TEST
+ "pget",
+#endif
"close",
"del",
"dup",
@@ -51,6 +54,9 @@ dbc_Cmd(clientData, interp, objc, objv)
NULL
};
enum dbccmds {
+#if CONFIG_TEST
+ DBCPGET,
+#endif
DBCCLOSE,
DBCDELETE,
DBCDUP,
@@ -87,6 +93,11 @@ dbc_Cmd(clientData, interp, objc, objv)
TCL_EXACT, &cmdindex) != TCL_OK)
return (IS_HELP(objv[1]));
switch ((enum dbccmds)cmdindex) {
+#if CONFIG_TEST
+ case DBCPGET:
+ result = tcl_DbcGet(interp, objc, objv, dbc, 1);
+ break;
+#endif
case DBCCLOSE:
/*
* No args for this. Error if there are some.
@@ -97,7 +108,8 @@ dbc_Cmd(clientData, interp, objc, objv)
}
_debug_check();
ret = dbc->c_close(dbc);
- result = _ReturnSetup(interp, ret, "dbc close");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "dbc close");
if (result == TCL_OK) {
(void)Tcl_DeleteCommand(interp, dbip->i_name);
_DeleteInfo(dbip);
@@ -113,13 +125,14 @@ dbc_Cmd(clientData, interp, objc, objv)
}
_debug_check();
ret = dbc->c_del(dbc, 0);
- result = _ReturnSetup(interp, ret, "dbc delete");
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBCDEL(ret),
+ "dbc delete");
break;
case DBCDUP:
result = tcl_DbcDup(interp, objc, objv, dbc);
break;
case DBCGET:
- result = tcl_DbcGet(interp, objc, objv, dbc);
+ result = tcl_DbcGet(interp, objc, objv, dbc, 0);
break;
case DBCPUT:
result = tcl_DbcPut(interp, objc, objv, dbc);
@@ -138,15 +151,27 @@ tcl_DbcPut(interp, objc, objv, dbc)
Tcl_Obj *CONST objv[]; /* The argument objects */
DBC *dbc; /* Cursor pointer */
{
- static char *dbcutopts[] = {
- "-after", "-before", "-current",
- "-keyfirst", "-keylast", "-nodupdata",
+ static const char *dbcutopts[] = {
+#if CONFIG_TEST
+ "-nodupdata",
+#endif
+ "-after",
+ "-before",
+ "-current",
+ "-keyfirst",
+ "-keylast",
"-partial",
NULL
};
enum dbcutopts {
- DBCPUT_AFTER, DBCPUT_BEFORE, DBCPUT_CURRENT,
- DBCPUT_KEYFIRST,DBCPUT_KEYLAST, DBCPUT_NODUPDATA,
+#if CONFIG_TEST
+ DBCPUT_NODUPDATA,
+#endif
+ DBCPUT_AFTER,
+ DBCPUT_BEFORE,
+ DBCPUT_CURRENT,
+ DBCPUT_KEYFIRST,
+ DBCPUT_KEYLAST,
DBCPUT_PART
};
DB *thisdbp;
@@ -154,12 +179,14 @@ tcl_DbcPut(interp, objc, objv, dbc)
DBTCL_INFO *dbcip, *dbip;
DBTYPE type;
Tcl_Obj **elemv, *res;
+ void *dtmp, *ktmp;
db_recno_t recno;
u_int32_t flag;
- int elemc, i, itmp, optindex, result, ret;
+ int elemc, freekey, freedata, i, optindex, result, ret;
result = TCL_OK;
flag = 0;
+ freekey = freedata = 0;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args? ?key?");
@@ -190,6 +217,12 @@ tcl_DbcPut(interp, objc, objv, dbc)
}
i++;
switch ((enum dbcutopts)optindex) {
+#if CONFIG_TEST
+ case DBCPUT_NODUPDATA:
+ FLAG_CHECK(flag);
+ flag = DB_NODUPDATA;
+ break;
+#endif
case DBCPUT_AFTER:
FLAG_CHECK(flag);
flag = DB_AFTER;
@@ -210,10 +243,6 @@ tcl_DbcPut(interp, objc, objv, dbc)
FLAG_CHECK(flag);
flag = DB_KEYLAST;
break;
- case DBCPUT_NODUPDATA:
- FLAG_CHECK(flag);
- flag = DB_NODUPDATA;
- break;
case DBCPUT_PART:
if (i > (objc - 2)) {
Tcl_WrongNumArgs(interp, 2, objv,
@@ -233,12 +262,10 @@ tcl_DbcPut(interp, objc, objv, dbc)
break;
}
data.flags |= DB_DBT_PARTIAL;
- result = Tcl_GetIntFromObj(interp, elemv[0], &itmp);
- data.doff = itmp;
+ result = _GetUInt32(interp, elemv[0], &data.doff);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, elemv[1], &itmp);
- data.dlen = itmp;
+ result = _GetUInt32(interp, elemv[1], &data.dlen);
/*
* NOTE: We don't check result here because all we'd
* do is break anyway, and we are doing that. If you
@@ -269,7 +296,7 @@ tcl_DbcPut(interp, objc, objv, dbc)
return (result);
}
thisdbp = dbip->i_dbp;
- type = thisdbp->get_type(thisdbp);
+ (void)thisdbp->get_type(thisdbp, &type);
}
/*
* When we get here, we better have:
@@ -300,29 +327,45 @@ tcl_DbcPut(interp, objc, objv, dbc)
goto out;
}
if (type == DB_RECNO || type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(interp, objv[objc-2], &itmp);
- recno = itmp;
+ result = _GetUInt32(interp, objv[objc-2], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
return (result);
} else {
- key.data = Tcl_GetByteArrayFromObj(objv[objc-2], &itmp);
- key.size = itmp;
+ ret = _CopyObjBytes(interp, objv[objc-2], &ktmp,
+ &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCPUT(ret), "dbc put");
+ return (result);
+ }
+ key.data = ktmp;
}
}
- data.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- data.size = itmp;
+ ret = _CopyObjBytes(interp, objv[objc-1], &dtmp,
+ &data.size, &freedata);
+ data.data = dtmp;
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCPUT(ret), "dbc put");
+ goto out;
+ }
_debug_check();
ret = dbc->c_put(dbc, &key, &data, flag);
- result = _ReturnSetup(interp, ret, "dbc put");
- if (ret == 0 && (flag == DB_AFTER || flag == DB_BEFORE)
- && type == DB_RECNO) {
- res = Tcl_NewIntObj(*(db_recno_t *)key.data);
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBCPUT(ret),
+ "dbc put");
+ if (ret == 0 &&
+ (flag == DB_AFTER || flag == DB_BEFORE) && type == DB_RECNO) {
+ res = Tcl_NewWideIntObj((Tcl_WideInt)*(db_recno_t *)key.data);
Tcl_SetObjResult(interp, res);
}
out:
+ if (freedata)
+ (void)__os_free(NULL, dtmp);
+ if (freekey)
+ (void)__os_free(NULL, ktmp);
return (result);
}
@@ -330,13 +373,20 @@ out:
* tcl_dbc_get --
*/
static int
-tcl_DbcGet(interp, objc, objv, dbc)
+tcl_DbcGet(interp, objc, objv, dbc, ispget)
Tcl_Interp *interp; /* Interpreter */
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
DBC *dbc; /* Cursor pointer */
+ int ispget; /* 1 for pget, 0 for get */
{
- static char *dbcgetopts[] = {
+ static const char *dbcgetopts[] = {
+#if CONFIG_TEST
+ "-dirty",
+ "-get_both_range",
+ "-multi",
+ "-multi_key",
+#endif
"-current",
"-first",
"-get_both",
@@ -356,6 +406,12 @@ tcl_DbcGet(interp, objc, objv, dbc)
NULL
};
enum dbcgetopts {
+#if CONFIG_TEST
+ DBCGET_DIRTY,
+ DBCGET_BOTH_RANGE,
+ DBCGET_MULTI,
+ DBCGET_MULTI_KEY,
+#endif
DBCGET_CURRENT,
DBCGET_FIRST,
DBCGET_BOTH,
@@ -374,16 +430,21 @@ tcl_DbcGet(interp, objc, objv, dbc)
DBCGET_SETRECNO
};
DB *thisdbp;
- DBT key, data;
+ DBT key, data, pdata;
DBTCL_INFO *dbcip, *dbip;
- DBTYPE type;
+ DBTYPE ptype, type;
Tcl_Obj **elemv, *myobj, *retlist;
- db_recno_t recno;
- u_int32_t flag;
- int elemc, i, itmp, optindex, result, ret;
+ void *dtmp, *ktmp;
+ db_recno_t precno, recno;
+ u_int32_t flag, op;
+ int elemc, freekey, freedata, i, optindex, result, ret;
+#if CONFIG_TEST
+ int bufsize;
+#endif
result = TCL_OK;
flag = 0;
+ freekey = freedata = 0;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args? ?key?");
@@ -413,63 +474,101 @@ tcl_DbcGet(interp, objc, objv, dbc)
}
i++;
switch ((enum dbcgetopts)optindex) {
+#if CONFIG_TEST
+ case DBCGET_DIRTY:
+ flag |= DB_DIRTY_READ;
+ break;
+ case DBCGET_BOTH_RANGE:
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
+ flag |= DB_GET_BOTH_RANGE;
+ break;
+ case DBCGET_MULTI:
+ flag |= DB_MULTIPLE;
+ result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ break;
+ case DBCGET_MULTI_KEY:
+ flag |= DB_MULTIPLE_KEY;
+ result = Tcl_GetIntFromObj(interp, objv[i], &bufsize);
+ if (result != TCL_OK)
+ goto out;
+ i++;
+ break;
+#endif
case DBCGET_RMW:
flag |= DB_RMW;
break;
case DBCGET_CURRENT:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_CURRENT;
break;
case DBCGET_FIRST:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_FIRST;
break;
case DBCGET_LAST:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_LAST;
break;
case DBCGET_NEXT:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_NEXT;
break;
case DBCGET_PREV:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_PREV;
break;
case DBCGET_PREVNODUP:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_PREV_NODUP;
break;
case DBCGET_NEXTNODUP:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_NEXT_NODUP;
break;
case DBCGET_NEXTDUP:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_NEXT_DUP;
break;
case DBCGET_BOTH:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_GET_BOTH;
break;
case DBCGET_RECNO:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_GET_RECNO;
break;
case DBCGET_JOIN:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_JOIN_ITEM;
break;
case DBCGET_SET:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_SET;
break;
case DBCGET_SETRANGE:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_SET_RANGE;
break;
case DBCGET_SETRECNO:
- FLAG_CHECK2(flag, DB_RMW);
+ FLAG_CHECK2(flag,
+ DB_RMW|DB_MULTIPLE|DB_MULTIPLE_KEY|DB_DIRTY_READ);
flag |= DB_SET_RECNO;
break;
case DBCGET_PART:
@@ -491,12 +590,10 @@ tcl_DbcGet(interp, objc, objv, dbc)
break;
}
data.flags |= DB_DBT_PARTIAL;
- result = Tcl_GetIntFromObj(interp, elemv[0], &itmp);
- data.doff = itmp;
+ result = _GetUInt32(interp, elemv[0], &data.doff);
if (result != TCL_OK)
break;
- result = Tcl_GetIntFromObj(interp, elemv[1], &itmp);
- data.dlen = itmp;
+ result = _GetUInt32(interp, elemv[1], &data.dlen);
/*
* NOTE: We don't check result here because all we'd
* do is break anyway, and we are doing that. If you
@@ -518,9 +615,10 @@ tcl_DbcGet(interp, objc, objv, dbc)
* a string.
*/
dbcip = _PtrToInfo(dbc);
- if (dbcip == NULL)
+ if (dbcip == NULL) {
type = DB_UNKNOWN;
- else {
+ ptype = DB_UNKNOWN;
+ } else {
dbip = dbcip->i_parent;
if (dbip == NULL) {
Tcl_SetResult(interp, "Cursor without parent database",
@@ -529,15 +627,25 @@ tcl_DbcGet(interp, objc, objv, dbc)
goto out;
}
thisdbp = dbip->i_dbp;
- type = thisdbp->get_type(thisdbp);
+ (void)thisdbp->get_type(thisdbp, &type);
+ if (ispget && thisdbp->s_primary != NULL)
+ (void)thisdbp->
+ s_primary->get_type(thisdbp->s_primary, &ptype);
+ else
+ ptype = DB_UNKNOWN;
}
/*
* When we get here, we better have:
- * 2 args, key and data if GET_BOTH was specified.
+ * 2 args, key and data if GET_BOTH/GET_BOTH_RANGE was specified.
* 1 arg if -set, -set_range or -set_recno
* 0 in all other cases.
*/
- if ((flag & DB_OPFLAGS_MASK) == DB_GET_BOTH) {
+ op = flag & DB_OPFLAGS_MASK;
+ switch (op) {
+ case DB_GET_BOTH:
+#if CONFIG_TEST
+ case DB_GET_BOTH_RANGE:
+#endif
if (i != (objc - 2)) {
Tcl_WrongNumArgs(interp, 2, objv,
"?-args? -get_both key data");
@@ -545,82 +653,162 @@ tcl_DbcGet(interp, objc, objv, dbc)
goto out;
} else {
if (type == DB_RECNO || type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(
- interp, objv[objc-2], &itmp);
- recno = itmp;
+ result = _GetUInt32(
+ interp, objv[objc-2], &recno);
if (result == TCL_OK) {
key.data = &recno;
key.size = sizeof(db_recno_t);
} else
goto out;
} else {
- key.data = Tcl_GetByteArrayFromObj(
- objv[objc - 2], &itmp);
- key.size = itmp;
+ /*
+ * Some get calls (SET_*) can change the
+ * key pointers. So, we need to store
+ * the allocated key space in a tmp.
+ */
+ ret = _CopyObjBytes(interp, objv[objc-2],
+ &ktmp, &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCGET(ret), "dbc get");
+ return (result);
+ }
+ key.data = ktmp;
+ }
+ if (ptype == DB_RECNO || ptype == DB_QUEUE) {
+ result = _GetUInt32(
+ interp, objv[objc-1], &precno);
+ if (result == TCL_OK) {
+ data.data = &precno;
+ data.size = sizeof(db_recno_t);
+ } else
+ goto out;
+ } else {
+ ret = _CopyObjBytes(interp, objv[objc-1],
+ &dtmp, &data.size, &freedata);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCGET(ret), "dbc get");
+ goto out;
+ }
+ data.data = dtmp;
}
- data.data =
- Tcl_GetByteArrayFromObj(objv[objc - 1], &itmp);
- data.size = itmp;
}
- } else if ((flag & DB_OPFLAGS_MASK) == DB_SET ||
- (flag & DB_OPFLAGS_MASK) == DB_SET_RANGE ||
- (flag & DB_OPFLAGS_MASK) == DB_SET_RECNO) {
+ break;
+ case DB_SET:
+ case DB_SET_RANGE:
+ case DB_SET_RECNO:
if (i != (objc - 1)) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args? key");
result = TCL_ERROR;
goto out;
}
- data.flags |= DB_DBT_MALLOC;
- if ((flag & DB_OPFLAGS_MASK) == DB_SET_RECNO ||
+#if CONFIG_TEST
+ if (flag & (DB_MULTIPLE|DB_MULTIPLE_KEY)) {
+ (void)__os_malloc(NULL, bufsize, &data.data);
+ data.ulen = bufsize;
+ data.flags |= DB_DBT_USERMEM;
+ } else
+#endif
+ data.flags |= DB_DBT_MALLOC;
+ if (op == DB_SET_RECNO ||
type == DB_RECNO || type == DB_QUEUE) {
- result = Tcl_GetIntFromObj(interp,
- objv[objc - 1], (int *)&recno);
+ result = _GetUInt32(interp, objv[objc - 1], &recno);
key.data = &recno;
key.size = sizeof(db_recno_t);
} else {
- key.data =
- Tcl_GetByteArrayFromObj(objv[objc - 1], &itmp);
- key.size = itmp;
+ /*
+ * Some get calls (SET_*) can change the
+ * key pointers. So, we need to store
+ * the allocated key space in a tmp.
+ */
+ ret = _CopyObjBytes(interp, objv[objc-1],
+ &ktmp, &key.size, &freekey);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_DBCGET(ret), "dbc get");
+ return (result);
+ }
+ key.data = ktmp;
}
- } else {
+ break;
+ default:
if (i != objc) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args?");
result = TCL_ERROR;
goto out;
}
key.flags |= DB_DBT_MALLOC;
- data.flags |= DB_DBT_MALLOC;
+#if CONFIG_TEST
+ if (flag & (DB_MULTIPLE|DB_MULTIPLE_KEY)) {
+ (void)__os_malloc(NULL, bufsize, &data.data);
+ data.ulen = bufsize;
+ data.flags |= DB_DBT_USERMEM;
+ } else
+#endif
+ data.flags |= DB_DBT_MALLOC;
}
_debug_check();
- ret = dbc->c_get(dbc, &key, &data, flag);
- result = _ReturnSetup(interp, ret, "dbc get");
+ memset(&pdata, 0, sizeof(DBT));
+ if (ispget) {
+ F_SET(&pdata, DB_DBT_MALLOC);
+ ret = dbc->c_pget(dbc, &key, &data, &pdata, flag);
+ } else
+ ret = dbc->c_get(dbc, &key, &data, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_DBCGET(ret), "dbc get");
if (result == TCL_ERROR)
goto out;
retlist = Tcl_NewListObj(0, NULL);
if (ret == DB_NOTFOUND)
goto out1;
- if ((flag & DB_OPFLAGS_MASK) == DB_GET_RECNO) {
+ if (op == DB_GET_RECNO) {
recno = *((db_recno_t *)data.data);
- myobj = Tcl_NewIntObj((int)recno);
+ myobj = Tcl_NewWideIntObj((Tcl_WideInt)recno);
result = Tcl_ListObjAppendElement(interp, retlist, myobj);
} else {
- if ((type == DB_RECNO || type == DB_QUEUE) && key.data != NULL)
- result = _SetListRecnoElem(interp, retlist,
- *(db_recno_t *)key.data, data.data, data.size);
- else
- result = _SetListElem(interp, retlist,
- key.data, key.size, data.data, data.size);
+ if (flag & (DB_MULTIPLE|DB_MULTIPLE_KEY))
+ result = _SetMultiList(interp,
+ retlist, &key, &data, type, flag);
+ else if ((type == DB_RECNO || type == DB_QUEUE) &&
+ key.data != NULL) {
+ if (ispget)
+ result = _Set3DBTList(interp, retlist, &key, 1,
+ &data,
+ (ptype == DB_RECNO || ptype == DB_QUEUE),
+ &pdata);
+ else
+ result = _SetListRecnoElem(interp, retlist,
+ *(db_recno_t *)key.data,
+ data.data, data.size);
+ } else {
+ if (ispget)
+ result = _Set3DBTList(interp, retlist, &key, 0,
+ &data,
+ (ptype == DB_RECNO || ptype == DB_QUEUE),
+ &pdata);
+ else
+ result = _SetListElem(interp, retlist,
+ key.data, key.size, data.data, data.size);
+ }
}
- if (key.flags & DB_DBT_MALLOC)
- __os_free(key.data, key.size);
- if (data.flags & DB_DBT_MALLOC)
- __os_free(data.data, data.size);
+ if (key.data != NULL && F_ISSET(&key, DB_DBT_MALLOC))
+ __os_ufree(dbc->dbp->dbenv, key.data);
+ if (data.data != NULL && F_ISSET(&data, DB_DBT_MALLOC))
+ __os_ufree(dbc->dbp->dbenv, data.data);
+ if (pdata.data != NULL && F_ISSET(&pdata, DB_DBT_MALLOC))
+ __os_ufree(dbc->dbp->dbenv, pdata.data);
out1:
if (result == TCL_OK)
Tcl_SetObjResult(interp, retlist);
out:
+ if (data.data != NULL && flag & (DB_MULTIPLE|DB_MULTIPLE_KEY))
+ __os_free(dbc->dbp->dbenv, data.data);
+ if (freedata)
+ (void)__os_free(NULL, dtmp);
+ if (freekey)
+ (void)__os_free(NULL, ktmp);
return (result);
}
@@ -635,14 +823,13 @@ tcl_DbcDup(interp, objc, objv, dbc)
Tcl_Obj *CONST objv[]; /* The argument objects */
DBC *dbc; /* Cursor pointer */
{
- static char *dbcdupopts[] = {
+ static const char *dbcdupopts[] = {
"-position",
NULL
};
enum dbcdupopts {
DBCDUP_POS
};
- DB *thisdbp;
DBC *newdbc;
DBTCL_INFO *dbcip, *newdbcip, *dbip;
Tcl_Obj *res;
@@ -709,7 +896,6 @@ tcl_DbcDup(interp, objc, objv, dbc)
result = TCL_ERROR;
goto out;
}
- thisdbp = dbip->i_dbp;
}
/*
* Now duplicate the cursor. If successful, we need to create
@@ -731,7 +917,8 @@ tcl_DbcDup(interp, objc, objv, dbc)
_SetInfoData(newdbcip, newdbc);
Tcl_SetObjResult(interp, res);
} else {
- result = _ReturnSetup(interp, ret, "db dup");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db dup");
_DeleteInfo(newdbcip);
}
} else {
diff --git a/db/tcl/tcl_env.c b/db/tcl/tcl_env.c
index cb7b0d974..21b82890b 100644
--- a/db/tcl/tcl_env.c
+++ b/db/tcl/tcl_env.c
@@ -1,30 +1,43 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_env.c,v 11.33 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: tcl_env.c,v 11.105 2003/09/04 20:45:44 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
#include <stdlib.h>
+#include <string.h>
#include <tcl.h>
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/db_shash.h"
+#include "dbinc/lock.h"
+#include "dbinc/txn.h"
+#include "dbinc/tcl_db.h"
/*
* Prototypes for procedures defined later in this file:
*/
-static void _EnvInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
+static void _EnvInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
+static int env_DbRemove __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_DbRename __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_GetFlags __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_GetOpenFlag
+ __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_GetLockDetect
+ __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_GetTimeout __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+static int env_GetVerbose __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
/*
* PUBLIC: int env_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
@@ -34,86 +47,180 @@ static void _EnvInfoDelete __P((Tcl_Interp *, DBTCL_INFO *));
*/
int
env_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Env handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Env handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *envcmds[] = {
- "close",
+ static const char *envcmds[] = {
+#if CONFIG_TEST
+ "attributes",
"lock_detect",
"lock_id",
+ "lock_id_free",
+ "lock_id_set",
"lock_get",
"lock_stat",
+ "lock_timeout",
"lock_vec",
"log_archive",
"log_compare",
+ "log_cursor",
"log_file",
"log_flush",
"log_get",
"log_put",
- "log_register",
"log_stat",
- "log_unregister",
"mpool",
"mpool_stat",
"mpool_sync",
"mpool_trickle",
"mutex",
-#if CONFIG_TEST
+ "rep_elect",
+ "rep_flush",
+ "rep_limit",
+ "rep_process_message",
+ "rep_request",
+ "rep_start",
+ "rep_stat",
+ "rpcid",
+ "set_flags",
"test",
+ "txn_id_set",
+ "txn_recover",
+ "txn_stat",
+ "txn_timeout",
+ "verbose",
#endif
+ "close",
+ "dbremove",
+ "dbrename",
+ "get_cachesize",
+ "get_data_dirs",
+ "get_encrypt_flags",
+ "get_errpfx",
+ "get_flags",
+ "get_home",
+ "get_lg_bsize",
+ "get_lg_dir",
+ "get_lg_max",
+ "get_lg_regionmax",
+ "get_lk_detect",
+ "get_lk_max_lockers",
+ "get_lk_max_locks",
+ "get_lk_max_objects",
+ "get_mp_mmapsize",
+ "get_open_flags",
+ "get_rep_limit",
+ "get_shm_key",
+ "get_tas_spins",
+ "get_timeout",
+ "get_tmp_dir",
+ "get_tx_max",
+ "get_tx_timestamp",
+ "get_verbose",
"txn",
"txn_checkpoint",
- "txn_stat",
- "verbose",
NULL
};
enum envcmds {
- ENVCLOSE,
+#if CONFIG_TEST
+ ENVATTR,
ENVLKDETECT,
ENVLKID,
+ ENVLKFREEID,
+ ENVLKSETID,
ENVLKGET,
ENVLKSTAT,
+ ENVLKTIMEOUT,
ENVLKVEC,
ENVLOGARCH,
ENVLOGCMP,
+ ENVLOGCURSOR,
ENVLOGFILE,
ENVLOGFLUSH,
ENVLOGGET,
ENVLOGPUT,
- ENVLOGREG,
ENVLOGSTAT,
- ENVLOGUNREG,
ENVMP,
ENVMPSTAT,
ENVMPSYNC,
ENVTRICKLE,
ENVMUTEX,
-#if CONFIG_TEST
+ ENVREPELECT,
+ ENVREPFLUSH,
+ ENVREPLIMIT,
+ ENVREPPROCMESS,
+ ENVREPREQUEST,
+ ENVREPSTART,
+ ENVREPSTAT,
+ ENVRPCID,
+ ENVSETFLAGS,
ENVTEST,
+ ENVTXNSETID,
+ ENVTXNRECOVER,
+ ENVTXNSTAT,
+ ENVTXNTIMEOUT,
+ ENVVERB,
#endif
+ ENVCLOSE,
+ ENVDBREMOVE,
+ ENVDBRENAME,
+ ENVGETCACHESIZE,
+ ENVGETDATADIRS,
+ ENVGETENCRYPTFLAGS,
+ ENVGETERRPFX,
+ ENVGETFLAGS,
+ ENVGETHOME,
+ ENVGETLGBSIZE,
+ ENVGETLGDIR,
+ ENVGETLGMAX,
+ ENVGETLGREGIONMAX,
+ ENVGETLKDETECT,
+ ENVGETLKMAXLOCKERS,
+ ENVGETLKMAXLOCKS,
+ ENVGETLKMAXOBJECTS,
+ ENVGETMPMMAPSIZE,
+ ENVGETOPENFLAG,
+ ENVGETREPLIMIT,
+ ENVGETSHMKEY,
+ ENVGETTASSPINS,
+ ENVGETTIMEOUT,
+ ENVGETTMPDIR,
+ ENVGETTXMAX,
+ ENVGETTXTIMESTAMP,
+ ENVGETVERBOSE,
ENVTXN,
- ENVTXNCKP,
- ENVTXNSTAT,
- ENVVERB
+ ENVTXNCKP
};
DBTCL_INFO *envip;
- DB_ENV *envp;
- Tcl_Obj *res;
- u_int32_t newval;
- int cmdindex, result, ret;
+ DB_ENV *dbenv;
+ Tcl_Obj *res, *myobjv[3];
+ char newname[MSG_SIZE];
+ int cmdindex, i, ncache, result, ret;
+ u_int32_t bytes, gbytes, value;
+ size_t size;
+ long shm_key;
+ time_t timeval;
+ const char *strval, **dirs;
+#if CONFIG_TEST
+ DBTCL_INFO *logcip;
+ DB_LOGC *logc;
+ u_int32_t lockid;
+ long newval, otherval;
+#endif
Tcl_ResetResult(interp);
- envp = (DB_ENV *)clientData;
- envip = _PtrToInfo((void *)envp);
+ dbenv = (DB_ENV *)clientData;
+ envip = _PtrToInfo((void *)dbenv);
result = TCL_OK;
+ memset(newname, 0, MSG_SIZE);
if (objc <= 1) {
Tcl_WrongNumArgs(interp, 1, objv, "command cmdargs");
return (TCL_ERROR);
}
- if (envp == NULL) {
+ if (dbenv == NULL) {
Tcl_SetResult(interp, "NULL env pointer", TCL_STATIC);
return (TCL_ERROR);
}
@@ -131,33 +238,15 @@ env_Cmd(clientData, interp, objc, objv)
return (IS_HELP(objv[1]));
res = NULL;
switch ((enum envcmds)cmdindex) {
- case ENVCLOSE:
- /*
- * No args for this. Error if there are some.
- */
- if (objc > 2) {
- Tcl_WrongNumArgs(interp, 2, objv, NULL);
- return (TCL_ERROR);
- }
- /*
- * Any transactions will be aborted, and an mpools
- * closed automatically. We must delete any txn
- * and mp widgets we have here too for this env.
- * NOTE: envip is freed when we come back from
- * this function. Set it to NULL to make sure no
- * one tries to use it later.
- */
- _EnvInfoDelete(interp, envip);
- envip = NULL;
- _debug_check();
- ret = envp->close(envp, 0);
- result = _ReturnSetup(interp, ret, "env close");
- break;
+#if CONFIG_TEST
case ENVLKDETECT:
- result = tcl_LockDetect(interp, objc, objv, envp);
+ result = tcl_LockDetect(interp, objc, objv, dbenv);
break;
case ENVLKSTAT:
- result = tcl_LockStat(interp, objc, objv, envp);
+ result = tcl_LockStat(interp, objc, objv, dbenv);
+ break;
+ case ENVLKTIMEOUT:
+ result = tcl_LockTimeout(interp, objc, objv, dbenv);
break;
case ENVLKID:
/*
@@ -168,73 +257,187 @@ env_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- ret = lock_id(envp, &newval);
- result = _ReturnSetup(interp, ret, "lock_id");
+ ret = dbenv->lock_id(dbenv, &lockid);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock_id");
if (result == TCL_OK)
- res = Tcl_NewIntObj((int)newval);
+ res = Tcl_NewWideIntObj((Tcl_WideInt)lockid);
+ break;
+ case ENVLKFREEID:
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 3, objv, NULL);
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[2], (long *)&newval);
+ if (result != TCL_OK)
+ return (result);
+ ret = dbenv->lock_id_free(dbenv, newval);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock id_free");
+ break;
+ case ENVLKSETID:
+ if (objc != 4) {
+ Tcl_WrongNumArgs(interp, 4, objv, "current max");
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[2], (long *)&newval);
+ if (result != TCL_OK)
+ return (result);
+ result = Tcl_GetLongFromObj(interp, objv[3], (long *)&otherval);
+ if (result != TCL_OK)
+ return (result);
+ ret = __lock_id_set(dbenv, newval, otherval);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock id_free");
break;
case ENVLKGET:
- result = tcl_LockGet(interp, objc, objv, envp);
+ result = tcl_LockGet(interp, objc, objv, dbenv);
break;
case ENVLKVEC:
- result = tcl_LockVec(interp, objc, objv, envp);
+ result = tcl_LockVec(interp, objc, objv, dbenv);
break;
case ENVLOGARCH:
- result = tcl_LogArchive(interp, objc, objv, envp);
+ result = tcl_LogArchive(interp, objc, objv, dbenv);
break;
case ENVLOGCMP:
result = tcl_LogCompare(interp, objc, objv);
break;
+ case ENVLOGCURSOR:
+ snprintf(newname, sizeof(newname),
+ "%s.logc%d", envip->i_name, envip->i_envlogcid);
+ logcip = _NewInfo(interp, NULL, newname, I_LOGC);
+ if (logcip != NULL) {
+ ret = dbenv->log_cursor(dbenv, &logc, 0);
+ if (ret == 0) {
+ result = TCL_OK;
+ envip->i_envlogcid++;
+ /*
+ * We do NOT want to set i_parent to
+ * envip here because log cursors are
+ * not "tied" to the env. That is, they
+ * are NOT closed if the env is closed.
+ */
+ Tcl_CreateObjCommand(interp, newname,
+ (Tcl_ObjCmdProc *)logc_Cmd,
+ (ClientData)logc, NULL);
+ res =
+ Tcl_NewStringObj(newname, strlen(newname));
+ _SetInfoData(logcip, logc);
+ } else {
+ _DeleteInfo(logcip);
+ result = _ErrorSetup(interp, ret, "log cursor");
+ }
+ } else {
+ Tcl_SetResult(interp,
+ "Could not set up info", TCL_STATIC);
+ result = TCL_ERROR;
+ }
+ break;
case ENVLOGFILE:
- result = tcl_LogFile(interp, objc, objv, envp);
+ result = tcl_LogFile(interp, objc, objv, dbenv);
break;
case ENVLOGFLUSH:
- result = tcl_LogFlush(interp, objc, objv, envp);
+ result = tcl_LogFlush(interp, objc, objv, dbenv);
break;
case ENVLOGGET:
- result = tcl_LogGet(interp, objc, objv, envp);
+ result = tcl_LogGet(interp, objc, objv, dbenv);
break;
case ENVLOGPUT:
- result = tcl_LogPut(interp, objc, objv, envp);
- break;
- case ENVLOGREG:
- result = tcl_LogRegister(interp, objc, objv, envp);
- break;
- case ENVLOGUNREG:
- result = tcl_LogUnregister(interp, objc, objv, envp);
+ result = tcl_LogPut(interp, objc, objv, dbenv);
break;
case ENVLOGSTAT:
- result = tcl_LogStat(interp, objc, objv, envp);
+ result = tcl_LogStat(interp, objc, objv, dbenv);
break;
case ENVMPSTAT:
- result = tcl_MpStat(interp, objc, objv, envp);
+ result = tcl_MpStat(interp, objc, objv, dbenv);
break;
case ENVMPSYNC:
- result = tcl_MpSync(interp, objc, objv, envp);
+ result = tcl_MpSync(interp, objc, objv, dbenv);
break;
case ENVTRICKLE:
- result = tcl_MpTrickle(interp, objc, objv, envp);
+ result = tcl_MpTrickle(interp, objc, objv, dbenv);
break;
case ENVMP:
- result = tcl_Mp(interp, objc, objv, envp, envip);
+ result = tcl_Mp(interp, objc, objv, dbenv, envip);
break;
- case ENVTXNCKP:
- result = tcl_TxnCheckpoint(interp, objc, objv, envp);
+ case ENVREPELECT:
+ result = tcl_RepElect(interp, objc, objv, dbenv);
+ break;
+ case ENVREPFLUSH:
+ result = tcl_RepFlush(interp, objc, objv, dbenv);
+ break;
+ case ENVREPLIMIT:
+ result = tcl_RepLimit(interp, objc, objv, dbenv);
+ break;
+ case ENVREPPROCMESS:
+ result = tcl_RepProcessMessage(interp, objc, objv, dbenv);
+ break;
+ case ENVREPREQUEST:
+ result = tcl_RepRequest(interp, objc, objv, dbenv);
+ break;
+ case ENVREPSTART:
+ result = tcl_RepStart(interp, objc, objv, dbenv);
+ break;
+ case ENVREPSTAT:
+ result = tcl_RepStat(interp, objc, objv, dbenv);
+ break;
+ case ENVRPCID:
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ /*
+ * !!! Retrieve the client ID from the dbp handle directly.
+ * This is for testing purposes only. It is dbp-private data.
+ */
+ res = Tcl_NewLongObj(dbenv->cl_id);
+ break;
+ case ENVTXNSETID:
+ if (objc != 4) {
+ Tcl_WrongNumArgs(interp, 4, objv, "current max");
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[2], (long *)&newval);
+ if (result != TCL_OK)
+ return (result);
+ result = Tcl_GetLongFromObj(interp, objv[3], (long *)&otherval);
+ if (result != TCL_OK)
+ return (result);
+ ret = __txn_id_set(dbenv, newval, otherval);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock id_free");
+ break;
+ case ENVTXNRECOVER:
+ result = tcl_TxnRecover(interp, objc, objv, dbenv, envip);
break;
case ENVTXNSTAT:
- result = tcl_TxnStat(interp, objc, objv, envp);
+ result = tcl_TxnStat(interp, objc, objv, dbenv);
break;
- case ENVTXN:
- result = tcl_Txn(interp, objc, objv, envp, envip);
+ case ENVTXNTIMEOUT:
+ result = tcl_TxnTimeout(interp, objc, objv, dbenv);
break;
case ENVMUTEX:
- result = tcl_Mutex(interp, objc, objv, envp, envip);
+ result = tcl_Mutex(interp, objc, objv, dbenv, envip);
+ break;
+ case ENVATTR:
+ result = tcl_EnvAttr(interp, objc, objv, dbenv);
+ break;
+ case ENVSETFLAGS:
+ /*
+ * Two args for this. Error if different.
+ */
+ if (objc != 4) {
+ Tcl_WrongNumArgs(interp, 2, objv, "which on|off");
+ return (TCL_ERROR);
+ }
+ result = tcl_EnvSetFlags(interp, dbenv, objv[2], objv[3]);
break;
-#if CONFIG_TEST
case ENVTEST:
- result = tcl_EnvTest(interp, objc, objv, envp);
+ result = tcl_EnvTest(interp, objc, objv, dbenv);
break;
-#endif
case ENVVERB:
/*
* Two args for this. Error if different.
@@ -243,7 +446,250 @@ env_Cmd(clientData, interp, objc, objv)
Tcl_WrongNumArgs(interp, 2, objv, NULL);
return (TCL_ERROR);
}
- result = tcl_EnvVerbose(interp, envp, objv[2], objv[3]);
+ result = tcl_EnvVerbose(interp, dbenv, objv[2], objv[3]);
+ break;
+#endif
+ case ENVCLOSE:
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ /*
+ * Any transactions will be aborted, and an mpools
+ * closed automatically. We must delete any txn
+ * and mp widgets we have here too for this env.
+ * NOTE: envip is freed when we come back from
+ * this function. Set it to NULL to make sure no
+ * one tries to use it later.
+ */
+ _debug_check();
+ ret = dbenv->close(dbenv, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env close");
+ _EnvInfoDelete(interp, envip);
+ envip = NULL;
+ break;
+ case ENVDBREMOVE:
+ result = env_DbRemove(interp, objc, objv, dbenv);
+ break;
+ case ENVDBRENAME:
+ result = env_DbRename(interp, objc, objv, dbenv);
+ break;
+ case ENVGETCACHESIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_cachesize(dbenv, &gbytes, &bytes, &ncache);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_cachesize")) == TCL_OK) {
+ myobjv[0] = Tcl_NewIntObj(gbytes);
+ myobjv[1] = Tcl_NewIntObj(bytes);
+ myobjv[2] = Tcl_NewIntObj(ncache);
+ res = Tcl_NewListObj(3, myobjv);
+ }
+ break;
+ case ENVGETDATADIRS:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_data_dirs(dbenv, &dirs);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_data_dirs")) == TCL_OK) {
+ res = Tcl_NewListObj(0, NULL);
+ for (i = 0; result == TCL_OK && dirs[i] != NULL; i++)
+ result = Tcl_ListObjAppendElement(interp, res,
+ Tcl_NewStringObj(dirs[i], strlen(dirs[i])));
+ }
+ break;
+ case ENVGETENCRYPTFLAGS:
+ result = tcl_EnvGetEncryptFlags(interp, objc, objv, dbenv);
+ break;
+ case ENVGETERRPFX:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ dbenv->get_errpfx(dbenv, &strval);
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case ENVGETFLAGS:
+ result = env_GetFlags(interp, objc, objv, dbenv);
+ break;
+ case ENVGETHOME:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_home(dbenv, &strval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_home")) == TCL_OK)
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case ENVGETLGBSIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lg_bsize(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lg_bsize")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETLGDIR:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lg_dir(dbenv, &strval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lg_dir")) == TCL_OK)
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case ENVGETLGMAX:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lg_max(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lg_max")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETLGREGIONMAX:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lg_regionmax(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lg_regionmax")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETLKDETECT:
+ result = env_GetLockDetect(interp, objc, objv, dbenv);
+ break;
+ case ENVGETLKMAXLOCKERS:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lk_max_lockers(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lk_max_lockers")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETLKMAXLOCKS:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lk_max_locks(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lk_max_locks")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETLKMAXOBJECTS:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lk_max_objects(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lk_max_objects")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETMPMMAPSIZE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_mp_mmapsize(dbenv, &size);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_mp_mmapsize")) == TCL_OK)
+ res = Tcl_NewIntObj(size);
+ break;
+ case ENVGETOPENFLAG:
+ result = env_GetOpenFlag(interp, objc, objv, dbenv);
+ break;
+ case ENVGETREPLIMIT:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_rep_limit(dbenv, &gbytes, &bytes);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_rep_limit")) == TCL_OK) {
+ myobjv[0] = Tcl_NewIntObj(gbytes);
+ myobjv[1] = Tcl_NewIntObj(bytes);
+ res = Tcl_NewListObj(2, myobjv);
+ }
+ break;
+ case ENVGETSHMKEY:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_shm_key(dbenv, &shm_key);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env shm_key")) == TCL_OK)
+ res = Tcl_NewLongObj(shm_key);
+ break;
+ case ENVGETTASSPINS:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_tas_spins(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_tas_spins")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETTIMEOUT:
+ result = env_GetTimeout(interp, objc, objv, dbenv);
+ break;
+ case ENVGETTMPDIR:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_tmp_dir(dbenv, &strval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_tmp_dir")) == TCL_OK)
+ res = Tcl_NewStringObj(strval, strlen(strval));
+ break;
+ case ENVGETTXMAX:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_tx_max(dbenv, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_tx_max")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case ENVGETTXTIMESTAMP:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_tx_timestamp(dbenv, &timeval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_tx_timestamp")) == TCL_OK)
+ res = Tcl_NewLongObj((long)timeval);
+ break;
+ case ENVGETVERBOSE:
+ result = env_GetVerbose(interp, objc, objv, dbenv);
+ break;
+ case ENVTXN:
+ result = tcl_Txn(interp, objc, objv, dbenv, envip);
+ break;
+ case ENVTXNCKP:
+ result = tcl_TxnCheckpoint(interp, objc, objv, dbenv);
break;
}
/*
@@ -262,44 +708,56 @@ env_Cmd(clientData, interp, objc, objv)
* tcl_EnvRemove --
*/
int
-tcl_EnvRemove(interp, objc, objv, envp, envip)
+tcl_EnvRemove(interp, objc, objv, dbenv, envip)
Tcl_Interp *interp; /* Interpreter */
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
- DB_ENV *envp; /* Env pointer */
+ DB_ENV *dbenv; /* Env pointer */
DBTCL_INFO *envip; /* Info pointer */
{
- static char *envremopts[] = {
+ static const char *envremopts[] = {
+#if CONFIG_TEST
+ "-overwrite",
+ "-server",
+#endif
"-data_dir",
+ "-encryptaes",
+ "-encryptany",
"-force",
"-home",
"-log_dir",
- "-server",
"-tmp_dir",
"-use_environ",
"-use_environ_root",
NULL
};
enum envremopts {
+#if CONFIG_TEST
+ ENVREM_OVERWRITE,
+ ENVREM_SERVER,
+#endif
ENVREM_DATADIR,
+ ENVREM_ENCRYPT_AES,
+ ENVREM_ENCRYPT_ANY,
ENVREM_FORCE,
ENVREM_HOME,
ENVREM_LOGDIR,
- ENVREM_SERVER,
ENVREM_TMPDIR,
ENVREM_USE_ENVIRON,
ENVREM_USE_ENVIRON_ROOT
};
DB_ENV *e;
- u_int32_t cflag, flag, forceflag;
+ u_int32_t cflag, enc_flag, flag, forceflag, sflag;
int i, optindex, result, ret;
- char *datadir, *home, *logdir, *server, *tmpdir;
+ char *datadir, *home, *logdir, *passwd, *server, *tmpdir;
result = TCL_OK;
- cflag = flag = forceflag = 0;
+ cflag = flag = forceflag = sflag = 0;
home = NULL;
+ passwd = NULL;
datadir = logdir = tmpdir = NULL;
server = NULL;
+ enc_flag = 0;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 2, objv, "?args?");
@@ -315,30 +773,59 @@ tcl_EnvRemove(interp, objc, objv, envp, envip)
}
i++;
switch ((enum envremopts)optindex) {
- case ENVREM_FORCE:
- forceflag |= DB_FORCE;
+#if CONFIG_TEST
+ case ENVREM_SERVER:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-server name?");
+ result = TCL_ERROR;
+ break;
+ }
+ server = Tcl_GetStringFromObj(objv[i++], NULL);
+ cflag = DB_RPCCLIENT;
break;
- case ENVREM_HOME:
+#endif
+ case ENVREM_ENCRYPT_AES:
/* Make sure we have an arg to check against! */
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-home dir?");
+ "?-encryptaes passwd?");
result = TCL_ERROR;
break;
}
- home = Tcl_GetStringFromObj(objv[i++], NULL);
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = DB_ENCRYPT_AES;
break;
- case ENVREM_SERVER:
+ case ENVREM_ENCRYPT_ANY:
/* Make sure we have an arg to check against! */
if (i >= objc) {
Tcl_WrongNumArgs(interp, 2, objv,
- "?-server name?");
+ "?-encryptany passwd?");
result = TCL_ERROR;
break;
}
- server = Tcl_GetStringFromObj(objv[i++], NULL);
- cflag = DB_CLIENT;
+ passwd = Tcl_GetStringFromObj(objv[i++], NULL);
+ enc_flag = 0;
break;
+ case ENVREM_FORCE:
+ forceflag |= DB_FORCE;
+ break;
+ case ENVREM_HOME:
+ /* Make sure we have an arg to check against! */
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-home dir?");
+ result = TCL_ERROR;
+ break;
+ }
+ home = Tcl_GetStringFromObj(objv[i++], NULL);
+ break;
+#if CONFIG_TEST
+ case ENVREM_OVERWRITE:
+ sflag |= DB_OVERWRITE;
+ break;
+#endif
case ENVREM_USE_ENVIRON:
flag |= DB_USE_ENVIRON;
break;
@@ -382,38 +869,56 @@ tcl_EnvRemove(interp, objc, objv, envp, envip)
}
/*
- * If envp is NULL, we don't have an open env and we need to open
+ * If dbenv is NULL, we don't have an open env and we need to open
* one of the user. Don't bother with the info stuff.
*/
- if (envp == NULL) {
+ if (dbenv == NULL) {
if ((ret = db_env_create(&e, cflag)) != 0) {
- result = _ReturnSetup(interp, ret, "db_env_create");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "db_env_create");
goto error;
}
if (server != NULL) {
- ret = e->set_server(e, server, 0, 0, 0);
- result = _ReturnSetup(interp, ret, "set_server");
+ _debug_check();
+ ret = e->set_rpc_server(e, NULL, server, 0, 0, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_rpc_server");
if (result != TCL_OK)
goto error;
}
if (datadir != NULL) {
_debug_check();
ret = e->set_data_dir(e, datadir);
- result = _ReturnSetup(interp, ret, "set_data_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_data_dir");
if (result != TCL_OK)
goto error;
}
if (logdir != NULL) {
_debug_check();
ret = e->set_lg_dir(e, logdir);
- result = _ReturnSetup(interp, ret, "set_log_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_log_dir");
if (result != TCL_OK)
goto error;
}
if (tmpdir != NULL) {
_debug_check();
ret = e->set_tmp_dir(e, tmpdir);
- result = _ReturnSetup(interp, ret, "set_tmp_dir");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_tmp_dir");
+ if (result != TCL_OK)
+ goto error;
+ }
+ if (passwd != NULL) {
+ ret = e->set_encrypt(e, passwd, enc_flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_encrypt");
+ }
+ if (sflag != 0 && (ret = e->set_flags(e, sflag, 1)) != 0) {
+ _debug_check();
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_flags");
if (result != TCL_OK)
goto error;
}
@@ -425,7 +930,7 @@ tcl_EnvRemove(interp, objc, objv, envp, envip)
*/
_EnvInfoDelete(interp, envip);
envip = NULL;
- e = envp;
+ e = dbenv;
}
flag |= forceflag;
@@ -435,7 +940,8 @@ tcl_EnvRemove(interp, objc, objv, envp, envip)
*/
_debug_check();
ret = e->remove(e, home, flag);
- result = _ReturnSetup(interp, ret, "env remove");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env remove");
error:
return (result);
}
@@ -452,7 +958,7 @@ _EnvInfoDelete(interp, envip)
* any open subsystems in this env. We will:
* 1. Abort any transactions (which aborts any nested txns).
* 2. Close any mpools (which will put any pages itself).
- * 3. Put any locks.
+ * 3. Put any locks and close log cursors.
* 4. Close the error file.
*/
for (p = LIST_FIRST(&__db_infohead); p != NULL; p = nextp) {
@@ -461,6 +967,11 @@ _EnvInfoDelete(interp, envip)
* env. If so, remove its commands and info structure.
* We do not close/abort/whatever here, because we
* don't want to replicate DB behavior.
+ *
+ * NOTE: Only those types that can nest need to be
+ * itemized in the switch below. That is txns and mps.
+ * Other types like log cursors and locks will just
+ * get cleaned up here.
*/
if (p->i_parent == envip) {
switch (p->i_type) {
@@ -486,6 +997,7 @@ _EnvInfoDelete(interp, envip)
_DeleteInfo(envip);
}
+#if CONFIG_TEST
/*
* PUBLIC: int tcl_EnvVerbose __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *,
* PUBLIC: Tcl_Obj *));
@@ -493,16 +1005,17 @@ _EnvInfoDelete(interp, envip)
* tcl_EnvVerbose --
*/
int
-tcl_EnvVerbose(interp, envp, which, onoff)
+tcl_EnvVerbose(interp, dbenv, which, onoff)
Tcl_Interp *interp; /* Interpreter */
- DB_ENV *envp; /* Env pointer */
+ DB_ENV *dbenv; /* Env pointer */
Tcl_Obj *which; /* Which subsystem */
Tcl_Obj *onoff; /* On or off */
{
- static char *verbwhich[] = {
+ static const char *verbwhich[] = {
"chkpt",
"deadlock",
"recovery",
+ "rep",
"wait",
NULL
};
@@ -510,9 +1023,10 @@ tcl_EnvVerbose(interp, envp, which, onoff)
ENVVERB_CHK,
ENVVERB_DEAD,
ENVVERB_REC,
+ ENVVERB_REP,
ENVVERB_WAIT
};
- static char *verbonoff[] = {
+ static const char *verbonoff[] = {
"off",
"on",
NULL
@@ -538,6 +1052,9 @@ tcl_EnvVerbose(interp, envp, which, onoff)
case ENVVERB_REC:
wh = DB_VERB_RECOVERY;
break;
+ case ENVVERB_REP:
+ wh = DB_VERB_REPLICATION;
+ break;
case ENVVERB_WAIT:
wh = DB_VERB_WAITSFOR;
break;
@@ -557,24 +1074,232 @@ tcl_EnvVerbose(interp, envp, which, onoff)
default:
return (TCL_ERROR);
}
- ret = envp->set_verbose(envp, wh, on);
- return (_ReturnSetup(interp, ret, "env set verbose"));
+ ret = dbenv->set_verbose(dbenv, wh, on);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env set verbose"));
}
+#endif
#if CONFIG_TEST
/*
+ * PUBLIC: int tcl_EnvAttr __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
+ *
+ * tcl_EnvAttr --
+ * Return a list of the env's attributes
+ */
+int
+tcl_EnvAttr(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv; /* Env pointer */
+{
+ int result;
+ Tcl_Obj *myobj, *retlist;
+
+ result = TCL_OK;
+
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ retlist = Tcl_NewListObj(0, NULL);
+ /*
+ * XXX
+ * We peek at the dbenv to determine what subsystems
+ * we have available in this env.
+ */
+ myobj = Tcl_NewStringObj("-home", strlen("-home"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ myobj = Tcl_NewStringObj(dbenv->db_home, strlen(dbenv->db_home));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ if (CDB_LOCKING(dbenv)) {
+ myobj = Tcl_NewStringObj("-cdb", strlen("-cdb"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (CRYPTO_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-crypto", strlen("-crypto"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (LOCKING_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-lock", strlen("-lock"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (LOGGING_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-log", strlen("-log"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (MPOOL_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-mpool", strlen("-mpool"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (RPC_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-rpc", strlen("-rpc"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (REP_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-rep", strlen("-rep"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ if (TXN_ON(dbenv)) {
+ myobj = Tcl_NewStringObj("-txn", strlen("-txn"));
+ if ((result = Tcl_ListObjAppendElement(interp,
+ retlist, myobj)) != TCL_OK)
+ goto err;
+ }
+ Tcl_SetObjResult(interp, retlist);
+err:
+ return (result);
+}
+
+/*
+ * PUBLIC: int tcl_EnvSetFlags __P((Tcl_Interp *, DB_ENV *, Tcl_Obj *,
+ * PUBLIC: Tcl_Obj *));
+ *
+ * tcl_EnvSetFlags --
+ * Set flags in an env.
+ */
+int
+tcl_EnvSetFlags(interp, dbenv, which, onoff)
+ Tcl_Interp *interp; /* Interpreter */
+ DB_ENV *dbenv; /* Env pointer */
+ Tcl_Obj *which; /* Which subsystem */
+ Tcl_Obj *onoff; /* On or off */
+{
+ static const char *sfwhich[] = {
+ "-auto_commit",
+ "-direct_db",
+ "-direct_log",
+ "-log_remove",
+ "-nolock",
+ "-nommap",
+ "-nopanic",
+ "-nosync",
+ "-notdurable",
+ "-overwrite",
+ "-panic",
+ "-wrnosync",
+ NULL
+ };
+ enum sfwhich {
+ ENVSF_AUTOCOMMIT,
+ ENVSF_DIRECTDB,
+ ENVSF_DIRECTLOG,
+ ENVSF_LOG_REMOVE,
+ ENVSF_NOLOCK,
+ ENVSF_NOMMAP,
+ ENVSF_NOPANIC,
+ ENVSF_NOSYNC,
+ ENVSF_NOTDURABLE,
+ ENVSF_OVERWRITE,
+ ENVSF_PANIC,
+ ENVSF_WRNOSYNC
+ };
+ static const char *sfonoff[] = {
+ "off",
+ "on",
+ NULL
+ };
+ enum sfonoff {
+ ENVSF_OFF,
+ ENVSF_ON
+ };
+ int on, optindex, ret;
+ u_int32_t wh;
+
+ if (Tcl_GetIndexFromObj(interp, which, sfwhich, "option",
+ TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(which));
+
+ switch ((enum sfwhich)optindex) {
+ case ENVSF_AUTOCOMMIT:
+ wh = DB_AUTO_COMMIT;
+ break;
+ case ENVSF_DIRECTDB:
+ wh = DB_DIRECT_DB;
+ break;
+ case ENVSF_DIRECTLOG:
+ wh = DB_DIRECT_LOG;
+ break;
+ case ENVSF_LOG_REMOVE:
+ wh = DB_LOG_AUTOREMOVE;
+ break;
+ case ENVSF_NOLOCK:
+ wh = DB_NOLOCKING;
+ break;
+ case ENVSF_NOMMAP:
+ wh = DB_NOMMAP;
+ break;
+ case ENVSF_NOTDURABLE:
+ wh = DB_TXN_NOT_DURABLE;
+ break;
+ case ENVSF_NOSYNC:
+ wh = DB_TXN_NOSYNC;
+ break;
+ case ENVSF_NOPANIC:
+ wh = DB_NOPANIC;
+ break;
+ case ENVSF_PANIC:
+ wh = DB_PANIC_ENVIRONMENT;
+ break;
+ case ENVSF_OVERWRITE:
+ wh = DB_OVERWRITE;
+ break;
+ case ENVSF_WRNOSYNC:
+ wh = DB_TXN_WRITE_NOSYNC;
+ break;
+ default:
+ return (TCL_ERROR);
+ }
+ if (Tcl_GetIndexFromObj(interp, onoff, sfonoff, "option",
+ TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(onoff));
+ switch ((enum sfonoff)optindex) {
+ case ENVSF_OFF:
+ on = 0;
+ break;
+ case ENVSF_ON:
+ on = 1;
+ break;
+ default:
+ return (TCL_ERROR);
+ }
+ ret = dbenv->set_flags(dbenv, wh, on);
+ return (_ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env set verbose"));
+}
+
+/*
* PUBLIC: int tcl_EnvTest __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_ENV *));
*
* tcl_EnvTest --
*/
int
-tcl_EnvTest(interp, objc, objv, envp)
+tcl_EnvTest(interp, objc, objv, dbenv)
Tcl_Interp *interp; /* Interpreter */
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
- DB_ENV *envp; /* Env pointer */
+ DB_ENV *dbenv; /* Env pointer */
{
- static char *envtestcmd[] = {
+ static const char *envtestcmd[] = {
"abort",
"copy",
NULL
@@ -583,30 +1308,35 @@ tcl_EnvTest(interp, objc, objv, envp)
ENVTEST_ABORT,
ENVTEST_COPY
};
- static char *envtestat[] = {
+ static const char *envtestat[] = {
+ "electinit",
"none",
+ "predestroy",
"preopen",
- "prerename",
+ "postdestroy",
"postlog",
"postlogmeta",
"postopen",
- "postrename",
"postsync",
+ "subdb_lock",
NULL
};
enum envtestat {
+ ENVTEST_ELECTINIT,
ENVTEST_NONE,
+ ENVTEST_PREDESTROY,
ENVTEST_PREOPEN,
- ENVTEST_PRERENAME,
+ ENVTEST_POSTDESTROY,
ENVTEST_POSTLOG,
ENVTEST_POSTLOGMETA,
ENVTEST_POSTOPEN,
- ENVTEST_POSTRENAME,
- ENVTEST_POSTSYNC
+ ENVTEST_POSTSYNC,
+ ENVTEST_SUBDB_LOCKS
};
int *loc, optindex, result, testval;
result = TCL_OK;
+ loc = NULL;
if (objc != 4) {
Tcl_WrongNumArgs(interp, 2, objv, "abort|copy location");
@@ -623,10 +1353,10 @@ tcl_EnvTest(interp, objc, objv, envp)
}
switch ((enum envtestcmd)optindex) {
case ENVTEST_ABORT:
- loc = &envp->test_abort;
+ loc = &dbenv->test_abort;
break;
case ENVTEST_COPY:
- loc = &envp->test_copy;
+ loc = &dbenv->test_copy;
break;
default:
Tcl_SetResult(interp, "Illegal store location", TCL_STATIC);
@@ -642,14 +1372,18 @@ tcl_EnvTest(interp, objc, objv, envp)
return (result);
}
switch ((enum envtestat)optindex) {
+ case ENVTEST_ELECTINIT:
+ DB_ASSERT(loc == &dbenv->test_abort);
+ testval = DB_TEST_ELECTINIT;
+ break;
case ENVTEST_NONE:
testval = 0;
break;
case ENVTEST_PREOPEN:
testval = DB_TEST_PREOPEN;
break;
- case ENVTEST_PRERENAME:
- testval = DB_TEST_PRERENAME;
+ case ENVTEST_PREDESTROY:
+ testval = DB_TEST_PREDESTROY;
break;
case ENVTEST_POSTLOG:
testval = DB_TEST_POSTLOG;
@@ -660,12 +1394,16 @@ tcl_EnvTest(interp, objc, objv, envp)
case ENVTEST_POSTOPEN:
testval = DB_TEST_POSTOPEN;
break;
- case ENVTEST_POSTRENAME:
- testval = DB_TEST_POSTRENAME;
+ case ENVTEST_POSTDESTROY:
+ testval = DB_TEST_POSTDESTROY;
break;
case ENVTEST_POSTSYNC:
testval = DB_TEST_POSTSYNC;
break;
+ case ENVTEST_SUBDB_LOCKS:
+ DB_ASSERT(loc == &dbenv->test_abort);
+ testval = DB_TEST_SUBDB_LOCKS;
+ break;
default:
Tcl_SetResult(interp, "Illegal test location", TCL_STATIC);
return (TCL_ERROR);
@@ -676,3 +1414,599 @@ tcl_EnvTest(interp, objc, objv, envp)
return (result);
}
#endif
+
+/*
+ * env_DbRemove --
+ * Implements the ENV->dbremove command.
+ */
+static int
+env_DbRemove(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ static const char *envdbrem[] = {
+ "-auto_commit",
+ "-txn",
+ "--",
+ NULL
+ };
+ enum envdbrem {
+ TCL_EDBREM_COMMIT,
+ TCL_EDBREM_TXN,
+ TCL_EDBREM_ENDARG
+ };
+ DB_TXN *txn;
+ u_int32_t flag;
+ int endarg, i, optindex, result, ret, subdblen;
+ u_char *subdbtmp;
+ char *arg, *db, *subdb, msg[MSG_SIZE];
+
+ txn = NULL;
+ result = TCL_OK;
+ subdbtmp = NULL;
+ db = subdb = NULL;
+ endarg = 0;
+ flag = 0;
+
+ if (objc < 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?args? filename ?database?");
+ return (TCL_ERROR);
+ }
+
+ /*
+ * We must first parse for the environment flag, since that
+ * is needed for db_create. Then create the db handle.
+ */
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i], envdbrem,
+ "option", TCL_EXACT, &optindex) != TCL_OK) {
+ arg = Tcl_GetStringFromObj(objv[i], NULL);
+ if (arg[0] == '-') {
+ result = IS_HELP(objv[i]);
+ goto error;
+ } else
+ Tcl_ResetResult(interp);
+ break;
+ }
+ i++;
+ switch ((enum envdbrem)optindex) {
+ case TCL_EDBREM_COMMIT:
+ flag |= DB_AUTO_COMMIT;
+ break;
+ case TCL_EDBREM_TXN:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "env dbremove: Invalid txn %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ return (TCL_ERROR);
+ }
+ break;
+ case TCL_EDBREM_ENDARG:
+ endarg = 1;
+ break;
+ }
+ /*
+ * If, at any time, parsing the args we get an error,
+ * bail out and return.
+ */
+ if (result != TCL_OK)
+ goto error;
+ if (endarg)
+ break;
+ }
+ if (result != TCL_OK)
+ goto error;
+ /*
+ * Any args we have left, (better be 1 or 2 left) are
+ * file names. If there is 1, a db name, if 2 a db and subdb name.
+ */
+ if ((i != (objc - 1)) || (i != (objc - 2))) {
+ /*
+ * Dbs must be NULL terminated file names, but subdbs can
+ * be anything. Use Strings for the db name and byte
+ * arrays for the subdb.
+ */
+ db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (i != objc) {
+ subdbtmp =
+ Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
+ if ((ret = __os_malloc(dbenv, subdblen + 1,
+ &subdb)) != 0) {
+ Tcl_SetResult(interp,
+ db_strerror(ret), TCL_STATIC);
+ return (0);
+ }
+ memcpy(subdb, subdbtmp, subdblen);
+ subdb[subdblen] = '\0';
+ }
+ } else {
+ Tcl_WrongNumArgs(interp, 2, objv, "?args? filename ?database?");
+ result = TCL_ERROR;
+ goto error;
+ }
+ ret = dbenv->dbremove(dbenv, txn, db, subdb, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env dbremove");
+error:
+ if (subdb)
+ __os_free(dbenv, subdb);
+ return (result);
+}
+
+/*
+ * env_DbRename --
+ * Implements the ENV->dbrename command.
+ */
+static int
+env_DbRename(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ static const char *envdbmv[] = {
+ "-auto_commit",
+ "-txn",
+ "--",
+ NULL
+ };
+ enum envdbmv {
+ TCL_EDBMV_COMMIT,
+ TCL_EDBMV_TXN,
+ TCL_EDBMV_ENDARG
+ };
+ DB_TXN *txn;
+ u_int32_t flag;
+ int endarg, i, newlen, optindex, result, ret, subdblen;
+ u_char *subdbtmp;
+ char *arg, *db, *newname, *subdb, msg[MSG_SIZE];
+
+ txn = NULL;
+ result = TCL_OK;
+ subdbtmp = NULL;
+ db = newname = subdb = NULL;
+ endarg = 0;
+ flag = 0;
+
+ if (objc < 2) {
+ Tcl_WrongNumArgs(interp, 3, objv,
+ "?args? filename ?database? ?newname?");
+ return (TCL_ERROR);
+ }
+
+ /*
+ * We must first parse for the environment flag, since that
+ * is needed for db_create. Then create the db handle.
+ */
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i], envdbmv,
+ "option", TCL_EXACT, &optindex) != TCL_OK) {
+ arg = Tcl_GetStringFromObj(objv[i], NULL);
+ if (arg[0] == '-') {
+ result = IS_HELP(objv[i]);
+ goto error;
+ } else
+ Tcl_ResetResult(interp);
+ break;
+ }
+ i++;
+ switch ((enum envdbmv)optindex) {
+ case TCL_EDBMV_COMMIT:
+ flag |= DB_AUTO_COMMIT;
+ break;
+ case TCL_EDBMV_TXN:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");
+ result = TCL_ERROR;
+ break;
+ }
+ arg = Tcl_GetStringFromObj(objv[i++], NULL);
+ txn = NAME_TO_TXN(arg);
+ if (txn == NULL) {
+ snprintf(msg, MSG_SIZE,
+ "env dbrename: Invalid txn %s\n", arg);
+ Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ return (TCL_ERROR);
+ }
+ break;
+ case TCL_EDBMV_ENDARG:
+ endarg = 1;
+ break;
+ }
+ /*
+ * If, at any time, parsing the args we get an error,
+ * bail out and return.
+ */
+ if (result != TCL_OK)
+ goto error;
+ if (endarg)
+ break;
+ }
+ if (result != TCL_OK)
+ goto error;
+ /*
+ * Any args we have left, (better be 2 or 3 left) are
+ * file names. If there is 2, a db name, if 3 a db and subdb name.
+ */
+ if ((i != (objc - 2)) || (i != (objc - 3))) {
+ /*
+ * Dbs must be NULL terminated file names, but subdbs can
+ * be anything. Use Strings for the db name and byte
+ * arrays for the subdb.
+ */
+ db = Tcl_GetStringFromObj(objv[i++], NULL);
+ if (i == objc - 2) {
+ subdbtmp =
+ Tcl_GetByteArrayFromObj(objv[i++], &subdblen);
+ if ((ret = __os_malloc(dbenv, subdblen + 1,
+ &subdb)) != 0) {
+ Tcl_SetResult(interp,
+ db_strerror(ret), TCL_STATIC);
+ return (0);
+ }
+ memcpy(subdb, subdbtmp, subdblen);
+ subdb[subdblen] = '\0';
+ }
+ subdbtmp =
+ Tcl_GetByteArrayFromObj(objv[i++], &newlen);
+ if ((ret = __os_malloc(dbenv, newlen + 1,
+ &newname)) != 0) {
+ Tcl_SetResult(interp,
+ db_strerror(ret), TCL_STATIC);
+ return (0);
+ }
+ memcpy(newname, subdbtmp, newlen);
+ newname[newlen] = '\0';
+ } else {
+ Tcl_WrongNumArgs(interp, 3, objv,
+ "?args? filename ?database? ?newname?");
+ result = TCL_ERROR;
+ goto error;
+ }
+ ret = dbenv->dbrename(dbenv, txn, db, subdb, newname, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env dbrename");
+error:
+ if (subdb)
+ __os_free(dbenv, subdb);
+ if (newname)
+ __os_free(dbenv, newname);
+ return (result);
+}
+
+/*
+ * env_GetFlags --
+ * Implements the ENV->get_flags command.
+ */
+static int
+env_GetFlags(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ int i, ret, result;
+ u_int32_t flags;
+ char buf[512];
+ Tcl_Obj *res;
+
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } open_flags[] = {
+ { DB_AUTO_COMMIT, "-auto_commit" },
+ { DB_CDB_ALLDB, "-cdb_alldb" },
+ { DB_DIRECT_DB, "-direct_db" },
+ { DB_DIRECT_LOG, "-direct_log" },
+ { DB_LOG_AUTOREMOVE, "-log_remove" },
+ { DB_NOLOCKING, "-nolock" },
+ { DB_NOMMAP, "-nommap" },
+ { DB_NOPANIC, "-nopanic" },
+ { DB_OVERWRITE, "-overwrite" },
+ { DB_PANIC_ENVIRONMENT, "-panic" },
+ { DB_REGION_INIT, "-region_init" },
+ { DB_TXN_NOSYNC, "-nosync" },
+ { DB_TXN_NOT_DURABLE, "-notdurable" },
+ { DB_TXN_WRITE_NOSYNC, "-wrnosync" },
+ { DB_YIELDCPU, "-yield" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ ret = dbenv->get_flags(dbenv, &flags);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_flags")) == TCL_OK) {
+ buf[0] = '\0';
+
+ for (i = 0; open_flags[i].flag != 0; i++)
+ if (LF_ISSET(open_flags[i].flag)) {
+ if (strlen(buf) > 0)
+ strncat(buf, " ", sizeof(buf));
+ strncat(buf, open_flags[i].arg, sizeof(buf));
+ }
+
+ res = Tcl_NewStringObj(buf, strlen(buf));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * env_GetOpenFlag --
+ * Implements the ENV->get_open_flags command.
+ */
+static int
+env_GetOpenFlag(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ int i, ret, result;
+ u_int32_t flags;
+ char buf[512];
+ Tcl_Obj *res;
+
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } open_flags[] = {
+ { DB_INIT_CDB, "-cdb" },
+ { DB_INIT_LOCK, "-lock" },
+ { DB_INIT_LOG, "-log" },
+ { DB_INIT_MPOOL, "-mpool" },
+ { DB_INIT_TXN, "-txn" },
+ { DB_RECOVER, "-recover" },
+ { DB_RECOVER_FATAL, "-recover_fatal" },
+ { DB_USE_ENVIRON, "-use_environ" },
+ { DB_USE_ENVIRON_ROOT, "-use_environ_root" },
+ { DB_CREATE, "-create" },
+ { DB_LOCKDOWN, "-lockdown" },
+ { DB_PRIVATE, "-private" },
+ { DB_SYSTEM_MEM, "-system_mem" },
+ { DB_THREAD, "-thread" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ ret = dbenv->get_open_flags(dbenv, &flags);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_open_flags")) == TCL_OK) {
+ buf[0] = '\0';
+
+ for (i = 0; open_flags[i].flag != 0; i++)
+ if (LF_ISSET(open_flags[i].flag)) {
+ if (strlen(buf) > 0)
+ strncat(buf, " ", sizeof(buf));
+ strncat(buf, open_flags[i].arg, sizeof(buf));
+ }
+
+ res = Tcl_NewStringObj(buf, strlen(buf));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * PUBLIC: int tcl_EnvGetEncryptFlags __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
+ * PUBLIC: DB_ENV *));
+ *
+ * tcl_EnvGetEncryptFlags --
+ * Implements the ENV->get_encrypt_flags command.
+ */
+int
+tcl_EnvGetEncryptFlags(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv; /* Database pointer */
+{
+ int i, ret, result;
+ u_int32_t flags;
+ char buf[512];
+ Tcl_Obj *res;
+
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } encrypt_flags[] = {
+ { DB_ENCRYPT_AES, "-encryptaes" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ ret = dbenv->get_encrypt_flags(dbenv, &flags);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_encrypt_flags")) == TCL_OK) {
+ buf[0] = '\0';
+
+ for (i = 0; encrypt_flags[i].flag != 0; i++)
+ if (LF_ISSET(encrypt_flags[i].flag)) {
+ if (strlen(buf) > 0)
+ strncat(buf, " ", sizeof(buf));
+ strncat(buf, encrypt_flags[i].arg, sizeof(buf));
+ }
+
+ res = Tcl_NewStringObj(buf, strlen(buf));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * env_GetLockDetect --
+ * Implements the ENV->get_lk_detect command.
+ */
+static int
+env_GetLockDetect(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ int i, ret, result;
+ u_int32_t lk_detect;
+ const char *answer;
+ Tcl_Obj *res;
+ static const struct {
+ u_int32_t flag;
+ char *name;
+ } lk_detect_returns[] = {
+ { DB_LOCK_DEFAULT, "default" },
+ { DB_LOCK_EXPIRE, "expire" },
+ { DB_LOCK_MAXLOCKS, "maxlocks" },
+ { DB_LOCK_MINLOCKS, "minlocks" },
+ { DB_LOCK_MINWRITE, "minwrite" },
+ { DB_LOCK_OLDEST, "oldest" },
+ { DB_LOCK_RANDOM, "random" },
+ { DB_LOCK_YOUNGEST, "youngest" },
+ { 0, NULL }
+ };
+
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = dbenv->get_lk_detect(dbenv, &lk_detect);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_lk_detect")) == TCL_OK) {
+ answer = "unknown";
+ for (i = 0; lk_detect_returns[i].flag != 0; i++)
+ if (lk_detect == lk_detect_returns[i].flag)
+ answer = lk_detect_returns[i].name;
+
+ res = Tcl_NewStringObj(answer, strlen(answer));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * env_GetTimeout --
+ * Implements the ENV->get_timeout command.
+ */
+static int
+env_GetTimeout(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ int i, ret, result;
+ u_int32_t which;
+ const char *arg;
+ db_timeout_t timeout;
+ Tcl_Obj *res;
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } timeout_flags[] = {
+ { DB_SET_TXN_TIMEOUT, "txn" },
+ { DB_SET_LOCK_TIMEOUT, "lock" },
+ { 0, NULL }
+ };
+
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ arg = Tcl_GetStringFromObj(objv[2], NULL);
+ which = 0;
+ for (i = 0; timeout_flags[i].flag != 0; i++)
+ if (strcmp(arg, timeout_flags[i].arg) == 0)
+ which = timeout_flags[i].flag;
+ if (which == 0) {
+ ret = EINVAL;
+ goto err;
+ }
+
+ ret = dbenv->get_timeout(dbenv, &timeout, which);
+err: if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_timeout")) == TCL_OK) {
+ res = Tcl_NewLongObj(timeout);
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
+
+/*
+ * env_GetVerbose --
+ * Implements the ENV->get_open_flags command.
+ */
+static int
+env_GetVerbose(interp, objc, objv, dbenv)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *dbenv;
+{
+ int i, onoff, ret, result;
+ u_int32_t which;
+ const char *arg, *answer;
+ Tcl_Obj *res;
+ static const struct {
+ u_int32_t flag;
+ char *arg;
+ } verbose_flags[] = {
+ { DB_VERB_CHKPOINT, "chkpt" },
+ { DB_VERB_DEADLOCK, "deadlock" },
+ { DB_VERB_RECOVERY, "recovery" },
+ { DB_VERB_REPLICATION, "rep" },
+ { DB_VERB_WAITSFOR, "wait" },
+ { 0, NULL }
+ };
+
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+
+ arg = Tcl_GetStringFromObj(objv[2], NULL);
+ which = 0;
+ for (i = 0; verbose_flags[i].flag != 0; i++)
+ if (strcmp(arg, verbose_flags[i].arg) == 0)
+ which = verbose_flags[i].flag;
+ if (which == 0) {
+ ret = EINVAL;
+ goto err;
+ }
+
+ ret = dbenv->get_verbose(dbenv, which, &onoff);
+err: if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "env get_timeout")) == 0) {
+ answer = onoff ? "on" : "off";
+ res = Tcl_NewStringObj(answer, strlen(answer));
+ Tcl_SetObjResult(interp, res);
+ }
+
+ return (result);
+}
diff --git a/db/tcl/tcl_internal.c b/db/tcl/tcl_internal.c
index bdab60f4a..896c4a3e3 100644
--- a/db/tcl/tcl_internal.c
+++ b/db/tcl/tcl_internal.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_internal.c,v 11.27 2000/05/22 18:36:51 sue Exp $";
+static const char revid[] = "$Id: tcl_internal.c,v 11.59 2003/08/14 17:55:29 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,10 +20,10 @@ static const char revid[] = "$Id: tcl_internal.c,v 11.27 2000/05/22 18:36:51 sue
#endif
#include "db_int.h"
-#include "tcl_db.h"
-#include "db_page.h"
-#include "db_am.h"
-#include "db_ext.h"
+#include "dbinc/tcl_db.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_am.h"
+#include "dbinc_auto/db_ext.h"
/*
*
@@ -46,6 +46,16 @@ static const char revid[] = "$Id: tcl_internal.c,v 11.27 2000/05/22 18:36:51 sue
/*
* Prototypes for procedures defined later in this file:
*/
+static void tcl_flag_callback __P((u_int32_t, const FN *, void *));
+
+/*
+ * Private structure type used to pass both an interp and an object into
+ * a callback's single void *.
+ */
+struct __tcl_callback_bundle {
+ Tcl_Interp *interp;
+ Tcl_Obj *obj;
+};
#define GLOB_CHAR(c) ((c) == '*' || (c) == '?')
@@ -68,14 +78,14 @@ _NewInfo(interp, anyp, name, type)
DBTCL_INFO *p;
int i, ret;
- if ((ret = __os_malloc(NULL, sizeof(DBTCL_INFO), NULL, &p)) != 0) {
+ if ((ret = __os_malloc(NULL, sizeof(DBTCL_INFO), &p)) != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
return (NULL);
}
if ((ret = __os_strdup(NULL, name, &p->i_name)) != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
- __os_free(p, sizeof(DBTCL_INFO));
+ __os_free(NULL, p);
return (NULL);
}
p->i_interp = interp;
@@ -87,6 +97,12 @@ _NewInfo(interp, anyp, name, type)
p->i_err = NULL;
p->i_errpfx = NULL;
p->i_lockobj.data = NULL;
+ p->i_btcompare = NULL;
+ p->i_dupcompare = NULL;
+ p->i_hashproc = NULL;
+ p->i_second_call = NULL;
+ p->i_rep_eid = NULL;
+ p->i_rep_send = NULL;
for (i = 0; i < MAX_ID; i++)
p->i_otherid[i] = 0;
@@ -111,22 +127,6 @@ _NameToPtr(name)
}
/*
- * PUBLIC: char *_PtrToName __P((CONST void *));
- */
-char *
-_PtrToName(ptr)
- CONST void *ptr;
-{
- DBTCL_INFO *p;
-
- for (p = LIST_FIRST(&__db_infohead); p != NULL;
- p = LIST_NEXT(p, entries))
- if (p->i_anyp == ptr)
- return (p->i_name);
- return (NULL);
-}
-
-/*
* PUBLIC: DBTCL_INFO *_PtrToInfo __P((CONST void *));
*/
DBTCL_INFO *
@@ -183,15 +183,27 @@ _DeleteInfo(p)
return;
LIST_REMOVE(p, entries);
if (p->i_lockobj.data != NULL)
- __os_free(p->i_lockobj.data, p->i_lockobj.size);
- if (p->i_err != NULL) {
+ __os_free(NULL, p->i_lockobj.data);
+ if (p->i_err != NULL && p->i_err != stderr) {
fclose(p->i_err);
p->i_err = NULL;
}
if (p->i_errpfx != NULL)
- __os_freestr(p->i_errpfx);
- __os_freestr(p->i_name);
- __os_free(p, sizeof(DBTCL_INFO));
+ __os_free(NULL, p->i_errpfx);
+ if (p->i_btcompare != NULL)
+ Tcl_DecrRefCount(p->i_btcompare);
+ if (p->i_dupcompare != NULL)
+ Tcl_DecrRefCount(p->i_dupcompare);
+ if (p->i_hashproc != NULL)
+ Tcl_DecrRefCount(p->i_hashproc);
+ if (p->i_second_call != NULL)
+ Tcl_DecrRefCount(p->i_second_call);
+ if (p->i_rep_eid != NULL)
+ Tcl_DecrRefCount(p->i_rep_eid);
+ if (p->i_rep_send != NULL)
+ Tcl_DecrRefCount(p->i_rep_send);
+ __os_free(NULL, p->i_name);
+ __os_free(NULL, p);
return;
}
@@ -258,7 +270,7 @@ _SetListRecnoElem(interp, list, elem1, elem2, e2size)
int myobjc;
myobjc = 2;
- myobjv[0] = Tcl_NewIntObj(elem1);
+ myobjv[0] = Tcl_NewWideIntObj((Tcl_WideInt)elem1);
myobjv[1] = Tcl_NewByteArrayObj(elem2, e2size);
thislist = Tcl_NewListObj(myobjc, myobjv);
if (thislist == NULL)
@@ -268,6 +280,113 @@ _SetListRecnoElem(interp, list, elem1, elem2, e2size)
}
/*
+ * _Set3DBTList --
+ * This is really analogous to both _SetListElem and
+ * _SetListRecnoElem--it's used for three-DBT lists returned by
+ * DB->pget and DBC->pget(). We'd need a family of four functions
+ * to handle all the recno/non-recno cases, however, so we make
+ * this a little more aware of the internals and do the logic inside.
+ *
+ * XXX
+ * One of these days all these functions should probably be cleaned up
+ * to eliminate redundancy and bring them into the standard DB
+ * function namespace.
+ *
+ * PUBLIC: int _Set3DBTList __P((Tcl_Interp *, Tcl_Obj *, DBT *, int,
+ * PUBLIC: DBT *, int, DBT *));
+ */
+int
+_Set3DBTList(interp, list, elem1, is1recno, elem2, is2recno, elem3)
+ Tcl_Interp *interp;
+ Tcl_Obj *list;
+ DBT *elem1, *elem2, *elem3;
+ int is1recno, is2recno;
+{
+
+ Tcl_Obj *myobjv[3], *thislist;
+
+ if (is1recno)
+ myobjv[0] = Tcl_NewWideIntObj(
+ (Tcl_WideInt)*(db_recno_t *)elem1->data);
+ else
+ myobjv[0] =
+ Tcl_NewByteArrayObj((u_char *)elem1->data, elem1->size);
+
+ if (is2recno)
+ myobjv[1] = Tcl_NewWideIntObj(
+ (Tcl_WideInt)*(db_recno_t *)elem2->data);
+ else
+ myobjv[1] =
+ Tcl_NewByteArrayObj((u_char *)elem2->data, elem2->size);
+
+ myobjv[2] = Tcl_NewByteArrayObj((u_char *)elem3->data, elem3->size);
+
+ thislist = Tcl_NewListObj(3, myobjv);
+
+ if (thislist == NULL)
+ return (TCL_ERROR);
+ return (Tcl_ListObjAppendElement(interp, list, thislist));
+}
+
+/*
+ * _SetMultiList -- build a list for return from multiple get.
+ *
+ * PUBLIC: int _SetMultiList __P((Tcl_Interp *,
+ * PUBLIC: Tcl_Obj *, DBT *, DBT*, DBTYPE, u_int32_t));
+ */
+int
+_SetMultiList(interp, list, key, data, type, flag)
+ Tcl_Interp *interp;
+ Tcl_Obj *list;
+ DBT *key, *data;
+ DBTYPE type;
+ u_int32_t flag;
+{
+ db_recno_t recno;
+ u_int32_t dlen, klen;
+ int result;
+ void *pointer, *dp, *kp;
+
+ recno = 0;
+ dlen = 0;
+ kp = NULL;
+
+ DB_MULTIPLE_INIT(pointer, data);
+ result = TCL_OK;
+
+ if (type == DB_RECNO || type == DB_QUEUE)
+ recno = *(db_recno_t *) key->data;
+ else
+ kp = key->data;
+ klen = key->size;
+ do {
+ if (flag & DB_MULTIPLE_KEY) {
+ if (type == DB_RECNO || type == DB_QUEUE)
+ DB_MULTIPLE_RECNO_NEXT(pointer,
+ data, recno, dp, dlen);
+ else
+ DB_MULTIPLE_KEY_NEXT(pointer,
+ data, kp, klen, dp, dlen);
+ } else
+ DB_MULTIPLE_NEXT(pointer, data, dp, dlen);
+
+ if (pointer == NULL)
+ break;
+
+ if (type == DB_RECNO || type == DB_QUEUE) {
+ result =
+ _SetListRecnoElem(interp, list, recno, dp, dlen);
+ recno++;
+ /* Wrap around and skip zero. */
+ if (recno == 0)
+ recno++;
+ } else
+ result = _SetListElem(interp, list, kp, klen, dp, dlen);
+ } while (result == TCL_OK);
+
+ return (result);
+}
+/*
* PUBLIC: int _GetGlobPrefix __P((char *, char **));
*/
int
@@ -299,12 +418,12 @@ _GetGlobPrefix(pattern, prefix)
}
/*
- * PUBLIC: int _ReturnSetup __P((Tcl_Interp *, int, char *));
+ * PUBLIC: int _ReturnSetup __P((Tcl_Interp *, int, int, char *));
*/
int
-_ReturnSetup(interp, ret, errmsg)
+_ReturnSetup(interp, ret, ok, errmsg)
Tcl_Interp *interp;
- int ret;
+ int ret, ok;
char *errmsg;
{
char *msg;
@@ -327,12 +446,9 @@ _ReturnSetup(interp, ret, errmsg)
msg = db_strerror(ret);
Tcl_AppendResult(interp, msg, NULL);
- switch (ret) {
- case DB_NOTFOUND:
- case DB_KEYEXIST:
- case DB_KEYEMPTY:
+ if (ok)
return (TCL_OK);
- default:
+ else {
Tcl_SetErrorCode(interp, "BerkeleyDB", msg, NULL);
return (TCL_ERROR);
}
@@ -375,7 +491,7 @@ _ErrorFunc(pfx, msg)
* If we cannot allocate enough to put together the prefix
* and message then give them just the message.
*/
- if (__os_malloc(NULL, size, NULL, &err) != 0) {
+ if (__os_malloc(NULL, size, &err) != 0) {
Tcl_AddErrorInfo(interp, msg);
Tcl_AppendResult(interp, msg, "\n", NULL);
return;
@@ -383,7 +499,7 @@ _ErrorFunc(pfx, msg)
snprintf(err, size, "%s: %s", pfx, msg);
Tcl_AddErrorInfo(interp, err);
Tcl_AppendResult(interp, err, "\n", NULL);
- __os_free(err, size);
+ __os_free(NULL, err);
return;
}
@@ -399,8 +515,9 @@ _GetLsn(interp, obj, lsn)
DB_LSN *lsn;
{
Tcl_Obj **myobjv;
- int itmp, myobjc, result;
char msg[MSG_SIZE];
+ int myobjc, result;
+ u_int32_t tmp;
result = Tcl_ListObjGetElements(interp, obj, &myobjc, &myobjv);
if (result == TCL_ERROR)
@@ -411,15 +528,125 @@ _GetLsn(interp, obj, lsn)
Tcl_SetResult(interp, msg, TCL_VOLATILE);
return (result);
}
- result = Tcl_GetIntFromObj(interp, myobjv[0], &itmp);
+ result = _GetUInt32(interp, myobjv[0], &tmp);
if (result == TCL_ERROR)
return (result);
- lsn->file = itmp;
- result = Tcl_GetIntFromObj(interp, myobjv[1], &itmp);
- lsn->offset = itmp;
+ lsn->file = tmp;
+ result = _GetUInt32(interp, myobjv[1], &tmp);
+ lsn->offset = tmp;
return (result);
}
+/*
+ * _GetUInt32 --
+ * Get a u_int32_t from a Tcl object. Tcl_GetIntFromObj does the
+ * right thing most of the time, but on machines where a long is 8 bytes
+ * and an int is 4 bytes, it errors on integers between the maximum
+ * int32_t and the maximum u_int32_t. This is correct, but we generally
+ * want a u_int32_t in the end anyway, so we use Tcl_GetLongFromObj and do
+ * the bounds checking ourselves.
+ *
+ * This code looks much like Tcl_GetIntFromObj, only with a different
+ * bounds check. It's essentially Tcl_GetUnsignedIntFromObj, which
+ * unfortunately doesn't exist.
+ *
+ * PUBLIC: int _GetUInt32 __P((Tcl_Interp *, Tcl_Obj *, u_int32_t *));
+ */
+int
+_GetUInt32(interp, obj, resp)
+ Tcl_Interp *interp;
+ Tcl_Obj *obj;
+ u_int32_t *resp;
+{
+ int result;
+ long ltmp;
+
+ result = Tcl_GetLongFromObj(interp, obj, &ltmp);
+ if (result != TCL_OK)
+ return (result);
+
+ if ((unsigned long)ltmp != (u_int32_t)ltmp) {
+ if (interp != NULL) {
+ Tcl_ResetResult(interp);
+ Tcl_AppendToObj(Tcl_GetObjResult(interp),
+ "integer value too large for u_int32_t", -1);
+ }
+ return (TCL_ERROR);
+ }
+
+ *resp = (u_int32_t)ltmp;
+ return (TCL_OK);
+}
+
+/*
+ * tcl_flag_callback --
+ * Callback for db_pr.c functions that contain the FN struct mapping
+ * flag values to meaningful strings. This function appends a Tcl_Obj
+ * containing each pertinent flag string to the specified Tcl list.
+ */
+static void
+tcl_flag_callback(flags, fn, vtcbp)
+ u_int32_t flags;
+ const FN *fn;
+ void *vtcbp;
+{
+ const FN *fnp;
+ Tcl_Interp *interp;
+ Tcl_Obj *newobj, *listobj;
+ int result;
+ struct __tcl_callback_bundle *tcbp;
+
+ tcbp = (struct __tcl_callback_bundle *)vtcbp;
+ interp = tcbp->interp;
+ listobj = tcbp->obj;
+
+ for (fnp = fn; fnp->mask != 0; ++fnp)
+ if (LF_ISSET(fnp->mask)) {
+ newobj = Tcl_NewStringObj(fnp->name, strlen(fnp->name));
+ result =
+ Tcl_ListObjAppendElement(interp, listobj, newobj);
+
+ /*
+ * Tcl_ListObjAppendElement is defined to return TCL_OK
+ * unless listobj isn't actually a list (or convertible
+ * into one). If this is the case, we screwed up badly
+ * somehow.
+ */
+ DB_ASSERT(result == TCL_OK);
+ }
+}
+
+/*
+ * _GetFlagsList --
+ * Get a new Tcl object, containing a list of the string values
+ * associated with a particular set of flag values, given a function
+ * that can extract the right names for the right flags.
+ *
+ * PUBLIC: Tcl_Obj *_GetFlagsList __P((Tcl_Interp *, u_int32_t,
+ * PUBLIC: void (*)(u_int32_t, void *,
+ * PUBLIC: void (*)(u_int32_t, const FN *, void *))));
+ */
+Tcl_Obj *
+_GetFlagsList(interp, flags, func)
+ Tcl_Interp *interp;
+ u_int32_t flags;
+ void (*func)
+ __P((u_int32_t, void *, void (*)(u_int32_t, const FN *, void *)));
+{
+ Tcl_Obj *newlist;
+ struct __tcl_callback_bundle tcb;
+
+ newlist = Tcl_NewObj();
+
+ memset(&tcb, 0, sizeof(tcb));
+ tcb.interp = interp;
+ tcb.obj = newlist;
+
+ func(flags, &tcb, tcl_flag_callback);
+
+ return (newlist);
+}
+
int __debug_stop, __debug_on, __debug_print, __debug_test;
/*
@@ -432,9 +659,65 @@ _debug_check()
return;
if (__debug_print != 0) {
- printf("\r%6d:", __debug_on);
+ printf("\r%7d:", __debug_on);
fflush(stdout);
}
if (__debug_on++ == __debug_test || __debug_stop)
__db_loadme();
}
+
+/*
+ * XXX
+ * Tcl 8.1+ Tcl_GetByteArrayFromObj/Tcl_GetIntFromObj bug.
+ *
+ * There is a bug in Tcl 8.1+ and byte arrays in that if it happens
+ * to use an object as both a byte array and something else like
+ * an int, and you've done a Tcl_GetByteArrayFromObj, then you
+ * do a Tcl_GetIntFromObj, your memory is deleted.
+ *
+ * Workaround is for all byte arrays we want to use, if it can be
+ * represented as an integer, we copy it so that we don't lose the
+ * memory.
+ */
+/*
+ * PUBLIC: int _CopyObjBytes __P((Tcl_Interp *, Tcl_Obj *obj, void **,
+ * PUBLIC: u_int32_t *, int *));
+ */
+int
+_CopyObjBytes(interp, obj, newp, sizep, freep)
+ Tcl_Interp *interp;
+ Tcl_Obj *obj;
+ void **newp;
+ u_int32_t *sizep;
+ int *freep;
+{
+ void *tmp, *new;
+ int i, len, ret;
+
+ /*
+ * If the object is not an int, then just return the byte
+ * array because it won't be transformed out from under us.
+ * If it is a number, we need to copy it.
+ */
+ *freep = 0;
+ ret = Tcl_GetIntFromObj(interp, obj, &i);
+ tmp = Tcl_GetByteArrayFromObj(obj, &len);
+ *sizep = len;
+ if (ret == TCL_ERROR) {
+ Tcl_ResetResult(interp);
+ *newp = tmp;
+ return (0);
+ }
+
+ /*
+ * If we get here, we have an integer that might be reused
+ * at some other point so we cannot count on GetByteArray
+ * keeping our pointer valid.
+ */
+ if ((ret = __os_malloc(NULL, len, &new)) != 0)
+ return (ret);
+ memcpy(new, tmp, len);
+ *newp = new;
+ *freep = 1;
+ return (0);
+}
diff --git a/db/tcl/tcl_lock.c b/db/tcl/tcl_lock.c
index 89f6eeb2b..0385a0fdf 100644
--- a/db/tcl/tcl_lock.c
+++ b/db/tcl/tcl_lock.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_lock.c,v 11.21 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: tcl_lock.c,v 11.53 2003/11/26 23:14:22 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,11 +20,12 @@ static const char revid[] = "$Id: tcl_lock.c,v 11.21 2001/01/11 18:19:55 bostic
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/tcl_db.h"
/*
* Prototypes for procedures defined later in this file:
*/
+#if CONFIG_TEST
static int lock_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
static int _LockMode __P((Tcl_Interp *, Tcl_Obj *, db_lockmode_t *));
static int _GetThisLock __P((Tcl_Interp *, DB_ENV *, u_int32_t,
@@ -32,16 +33,6 @@ static int _GetThisLock __P((Tcl_Interp *, DB_ENV *, u_int32_t,
static void _LockPutInfo __P((Tcl_Interp *, db_lockop_t, DB_LOCK *,
u_int32_t, DBT *));
-static char *lkmode[] = {
- "ng", "read", "write",
- "iwrite", "iread", "iwr",
- NULL
-};
-enum lkmode {
- LK_NG, LK_READ, LK_WRITE,
- LK_IWRITE, LK_IREAD, LK_IWR
-};
-
/*
* tcl_LockDetect --
*
@@ -55,17 +46,23 @@ tcl_LockDetect(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *ldopts[] = {
- "-lock_conflict",
+ static const char *ldopts[] = {
+ "expire",
"default",
+ "maxlocks",
+ "minlocks",
+ "minwrites",
"oldest",
"random",
"youngest",
NULL
};
enum ldopts {
- LD_CONFLICT,
+ LD_EXPIRE,
LD_DEFAULT,
+ LD_MAXLOCKS,
+ LD_MINLOCKS,
+ LD_MINWRITES,
LD_OLDEST,
LD_RANDOM,
LD_YOUNGEST
@@ -82,10 +79,26 @@ tcl_LockDetect(interp, objc, objv, envp)
return (IS_HELP(objv[i]));
i++;
switch ((enum ldopts)optindex) {
+ case LD_EXPIRE:
+ FLAG_CHECK(policy);
+ policy = DB_LOCK_EXPIRE;
+ break;
case LD_DEFAULT:
FLAG_CHECK(policy);
policy = DB_LOCK_DEFAULT;
break;
+ case LD_MAXLOCKS:
+ FLAG_CHECK(policy);
+ policy = DB_LOCK_MAXLOCKS;
+ break;
+ case LD_MINWRITES:
+ FLAG_CHECK(policy);
+ policy = DB_LOCK_MINWRITE;
+ break;
+ case LD_MINLOCKS:
+ FLAG_CHECK(policy);
+ policy = DB_LOCK_MINLOCKS;
+ break;
case LD_OLDEST:
FLAG_CHECK(policy);
policy = DB_LOCK_OLDEST;
@@ -98,15 +111,12 @@ tcl_LockDetect(interp, objc, objv, envp)
FLAG_CHECK(policy);
policy = DB_LOCK_RANDOM;
break;
- case LD_CONFLICT:
- flag |= DB_LOCK_CONFLICT;
- break;
}
}
_debug_check();
- ret = lock_detect(envp, flag, policy, NULL);
- result = _ReturnSetup(interp, ret, "lock detect");
+ ret = envp->lock_detect(envp, flag, policy, NULL);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "lock detect");
return (result);
}
@@ -123,7 +133,7 @@ tcl_LockGet(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *lgopts[] = {
+ static const char *lgopts[] = {
"-nowait",
NULL
};
@@ -132,12 +142,14 @@ tcl_LockGet(interp, objc, objv, envp)
};
DBT obj;
Tcl_Obj *res;
+ void *otmp;
db_lockmode_t mode;
u_int32_t flag, lockid;
- int itmp, optindex, result;
+ int freeobj, optindex, result, ret;
char newname[MSG_SIZE];
result = TCL_OK;
+ freeobj = 0;
memset(newname, 0, MSG_SIZE);
if (objc != 5 && objc != 6) {
Tcl_WrongNumArgs(interp, 2, objv, "?-nowait? mode id obj");
@@ -152,28 +164,19 @@ tcl_LockGet(interp, objc, objv, envp)
memset(&obj, 0, sizeof(obj));
if ((result =
- Tcl_GetIntFromObj(interp, objv[objc-2], &itmp)) != TCL_OK)
+ _GetUInt32(interp, objv[objc-2], &lockid)) != TCL_OK)
return (result);
- lockid = itmp;
- /*
- * XXX
- * Tcl 8.1 Tcl_GetByteArrayFromObj/Tcl_GetIntFromObj bug.
- *
- * The line below was originally before the Tcl_GetIntFromObj.
- *
- * There is a bug in Tcl 8.1 and byte arrays in that if it happens
- * to use an object as both a byte array and something else like
- * an int, and you've done a Tcl_GetByteArrayFromObj, then you
- * do a Tcl_GetIntFromObj, your memory is deleted.
- *
- * Workaround is to make sure all Tcl_GetByteArrayFromObj calls
- * are done last.
- */
- obj.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- obj.size = itmp;
- if ((result = _LockMode(interp, objv[(objc - 3)], &mode)) != TCL_OK)
+ ret = _CopyObjBytes(interp, objv[objc-1], &otmp,
+ &obj.size, &freeobj);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock get");
return (result);
+ }
+ obj.data = otmp;
+ if ((result = _LockMode(interp, objv[(objc - 3)], &mode)) != TCL_OK)
+ goto out;
/*
* Any left over arg is the flag.
@@ -195,6 +198,9 @@ tcl_LockGet(interp, objc, objv, envp)
res = Tcl_NewStringObj(newname, strlen(newname));
Tcl_SetObjResult(interp, res);
}
+out:
+ if (freeobj)
+ (void)__os_free(envp, otmp);
return (result);
}
@@ -224,8 +230,8 @@ tcl_LockStat(interp, objc, objv, envp)
return (TCL_ERROR);
}
_debug_check();
- ret = lock_stat(envp, &sp, NULL);
- result = _ReturnSetup(interp, ret, "lock stat");
+ ret = envp->lock_stat(envp, &sp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "lock stat");
if (result == TCL_ERROR)
return (result);
/*
@@ -237,9 +243,11 @@ tcl_LockStat(interp, objc, objv, envp)
* MAKE_STAT_LIST assumes 'res' and 'error' label.
*/
MAKE_STAT_LIST("Region size", sp->st_regsize);
- MAKE_STAT_LIST("Max locks", sp->st_maxlocks);
- MAKE_STAT_LIST("Max lockers", sp->st_maxlockers);
- MAKE_STAT_LIST("Max objects", sp->st_maxobjects);
+ MAKE_STAT_LIST("Last allocated locker ID", sp->st_id);
+ MAKE_STAT_LIST("Current maximum unused locker ID", sp->st_cur_maxid);
+ MAKE_STAT_LIST("Maximum locks", sp->st_maxlocks);
+ MAKE_STAT_LIST("Maximum lockers", sp->st_maxlockers);
+ MAKE_STAT_LIST("Maximum objects", sp->st_maxobjects);
MAKE_STAT_LIST("Lock modes", sp->st_nmodes);
MAKE_STAT_LIST("Current number of locks", sp->st_nlocks);
MAKE_STAT_LIST("Maximum number of locks so far", sp->st_maxnlocks);
@@ -250,12 +258,49 @@ tcl_LockStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Number of conflicts", sp->st_nconflicts);
MAKE_STAT_LIST("Lock requests", sp->st_nrequests);
MAKE_STAT_LIST("Lock releases", sp->st_nreleases);
+ MAKE_STAT_LIST("Lock requests that would have waited", sp->st_nnowaits);
MAKE_STAT_LIST("Deadlocks detected", sp->st_ndeadlocks);
MAKE_STAT_LIST("Number of region lock waits", sp->st_region_wait);
MAKE_STAT_LIST("Number of region lock nowaits", sp->st_region_nowait);
+ MAKE_STAT_LIST("Lock timeout value", sp->st_locktimeout);
+ MAKE_STAT_LIST("Number of lock timeouts", sp->st_nlocktimeouts);
+ MAKE_STAT_LIST("Transaction timeout value", sp->st_txntimeout);
+ MAKE_STAT_LIST("Number of transaction timeouts", sp->st_ntxntimeouts);
Tcl_SetObjResult(interp, res);
error:
- __os_free(sp, sizeof(*sp));
+ (void)__os_ufree(envp, sp);
+ return (result);
+}
+
+/*
+ * tcl_LockTimeout --
+ *
+ * PUBLIC: int tcl_LockTimeout __P((Tcl_Interp *, int,
+ * PUBLIC: Tcl_Obj * CONST*, DB_ENV *));
+ */
+int
+tcl_LockTimeout(interp, objc, objv, envp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *envp; /* Environment pointer */
+{
+ long timeout;
+ int result, ret;
+
+ /*
+ * One arg, the timeout.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?timeout?");
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[2], &timeout);
+ if (result != TCL_OK)
+ return (result);
+ _debug_check();
+ ret = envp->set_timeout(envp, (u_int32_t)timeout, DB_SET_LOCK_TIMEOUT);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "lock timeout");
return (result);
}
@@ -265,12 +310,12 @@ error:
*/
static int
lock_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Lock handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Lock handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *lkcmds[] = {
+ static const char *lkcmds[] = {
"put",
NULL
};
@@ -315,11 +360,12 @@ lock_Cmd(clientData, interp, objc, objv)
switch ((enum lkcmds)cmdindex) {
case LKPUT:
_debug_check();
- ret = lock_put(env, lock);
- result = _ReturnSetup(interp, ret, "lock put");
+ ret = env->lock_put(env, lock);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock put");
(void)Tcl_DeleteCommand(interp, lkip->i_name);
_DeleteInfo(lkip);
- __os_free(lock, sizeof(DB_LOCK));
+ __os_free(env, lock);
break;
}
return (result);
@@ -332,38 +378,49 @@ lock_Cmd(clientData, interp, objc, objv)
*/
int
tcl_LockVec(interp, objc, objv, envp)
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* environment pointer */
{
- static char *lvopts[] = {
+ static const char *lvopts[] = {
"-nowait",
NULL
};
enum lvopts {
LVNOWAIT
};
- static char *lkops[] = {
- "get", "put", "put_all", "put_obj",
+ static const char *lkops[] = {
+ "get",
+ "put",
+ "put_all",
+ "put_obj",
+ "timeout",
NULL
};
enum lkops {
- LKGET, LKPUT, LKPUTALL, LKPUTOBJ
+ LKGET,
+ LKPUT,
+ LKPUTALL,
+ LKPUTOBJ,
+ LKTIMEOUT
};
+
DB_LOCK *lock;
DB_LOCKREQ list;
DBT obj;
Tcl_Obj **myobjv, *res, *thisop;
- db_lockmode_t mode;
+ void *otmp;
u_int32_t flag, lockid;
- int i, itmp, myobjc, optindex, result, ret;
+ int freeobj, i, myobjc, optindex, result, ret;
char *lockname, msg[MSG_SIZE], newname[MSG_SIZE];
result = TCL_OK;
memset(newname, 0, MSG_SIZE);
+ memset(&list, 0, sizeof(DB_LOCKREQ));
flag = 0;
- mode = 0;
+ freeobj = 0;
+
/*
* If -nowait is given, it MUST be first arg.
*/
@@ -385,10 +442,9 @@ tcl_LockVec(interp, objc, objv, envp)
/*
* Our next arg MUST be the locker ID.
*/
- result = Tcl_GetIntFromObj(interp, objv[i++], &itmp);
+ result = _GetUInt32(interp, objv[i++], &lockid);
if (result != TCL_OK)
return (result);
- lockid = itmp;
/*
* All other remaining args are operation tuples.
@@ -429,26 +485,19 @@ tcl_LockVec(interp, objc, objv, envp)
result = _LockMode(interp, myobjv[2], &list.mode);
if (result != TCL_OK)
goto error;
- /*
- * XXX
- * Tcl 8.1 Tcl_GetByteArrayFromObj/Tcl_GetIntFromObj
- * bug.
- *
- * There is a bug in Tcl 8.1 and byte arrays in that if
- * it happens to use an object as both a byte array and
- * something else like an int, and you've done a
- * Tcl_GetByteArrayFromObj, then you do a
- * Tcl_GetIntFromObj, your memory is deleted.
- *
- * Workaround is to make sure all
- * Tcl_GetByteArrayFromObj calls are done last.
- */
- obj.data = Tcl_GetByteArrayFromObj(myobjv[1], &itmp);
- obj.size = itmp;
+ ret = _CopyObjBytes(interp, myobjv[1], &otmp,
+ &obj.size, &freeobj);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock vec");
+ return (result);
+ }
+ obj.data = otmp;
ret = _GetThisLock(interp, envp, lockid, flag,
&obj, list.mode, newname);
if (ret != 0) {
- result = _ReturnSetup(interp, ret, "lock vec");
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock vec");
thisop = Tcl_NewIntObj(ret);
(void)Tcl_ListObjAppendElement(interp, res,
thisop);
@@ -456,6 +505,10 @@ tcl_LockVec(interp, objc, objv, envp)
}
thisop = Tcl_NewStringObj(newname, strlen(newname));
(void)Tcl_ListObjAppendElement(interp, res, thisop);
+ if (freeobj) {
+ (void)__os_free(envp, otmp);
+ freeobj = 0;
+ }
continue;
case LKPUT:
if (myobjc != 2) {
@@ -493,17 +546,27 @@ tcl_LockVec(interp, objc, objv, envp)
goto error;
}
list.op = DB_LOCK_PUT_OBJ;
- obj.data = Tcl_GetByteArrayFromObj(myobjv[1], &itmp);
- obj.size = itmp;
+ ret = _CopyObjBytes(interp, myobjv[1], &otmp,
+ &obj.size, &freeobj);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock vec");
+ return (result);
+ }
+ obj.data = otmp;
list.obj = &obj;
break;
+ case LKTIMEOUT:
+ list.op = DB_LOCK_TIMEOUT;
+ break;
+
}
/*
* We get here, we have set up our request, now call
* lock_vec.
*/
_debug_check();
- ret = lock_vec(envp, lockid, flag, &list, 1, NULL);
+ ret = envp->lock_vec(envp, lockid, flag, &list, 1, NULL);
/*
* Now deal with whether or not the operation succeeded.
* Get's were done above, all these are only puts.
@@ -511,7 +574,12 @@ tcl_LockVec(interp, objc, objv, envp)
thisop = Tcl_NewIntObj(ret);
result = Tcl_ListObjAppendElement(interp, res, thisop);
if (ret != 0 && result == TCL_OK)
- result = _ReturnSetup(interp, ret, "lock put");
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "lock put");
+ if (freeobj) {
+ (void)__os_free(envp, otmp);
+ freeobj = 0;
+ }
/*
* We did a put of some kind. Since we did that,
* we have to delete the commands associated with
@@ -532,6 +600,23 @@ _LockMode(interp, obj, mode)
Tcl_Obj *obj;
db_lockmode_t *mode;
{
+ static const char *lkmode[] = {
+ "ng",
+ "read",
+ "write",
+ "iwrite",
+ "iread",
+ "iwr",
+ NULL
+ };
+ enum lkmode {
+ LK_NG,
+ LK_READ,
+ LK_WRITE,
+ LK_IWRITE,
+ LK_IREAD,
+ LK_IWR
+ };
int optindex;
if (Tcl_GetIndexFromObj(interp, obj, lkmode, "option",
@@ -581,7 +666,7 @@ _LockPutInfo(interp, op, lock, lockid, objp)
found = 1;
if (found) {
(void)Tcl_DeleteCommand(interp, p->i_name);
- __os_free(p->i_lock, sizeof(DB_LOCK));
+ __os_free(NULL, p->i_lock);
_DeleteInfo(p);
}
}
@@ -615,16 +700,16 @@ _GetThisLock(interp, envp, lockid, flag, objp, mode, newname)
TCL_STATIC);
return (TCL_ERROR);
}
- ret = __os_malloc(envp, sizeof(DB_LOCK), NULL, &lock);
+ ret = __os_malloc(envp, sizeof(DB_LOCK), &lock);
if (ret != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
return (TCL_ERROR);
}
_debug_check();
- ret = lock_get(envp, lockid, flag, objp, mode, lock);
- result = _ReturnSetup(interp, ret, "lock get");
+ ret = envp->lock_get(envp, lockid, flag, objp, mode, lock);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "lock get");
if (result == TCL_ERROR) {
- __os_free(lock, sizeof(DB_LOCK));
+ __os_free(envp, lock);
_DeleteInfo(ip);
return (result);
}
@@ -632,12 +717,12 @@ _GetThisLock(interp, envp, lockid, flag, objp, mode, newname)
* Success. Set up return. Set up new info
* and command widget for this lock.
*/
- ret = __os_malloc(envp, objp->size, NULL, &ip->i_lockobj.data);
+ ret = __os_malloc(envp, objp->size, &ip->i_lockobj.data);
if (ret != 0) {
Tcl_SetResult(interp, "Could not duplicate obj",
TCL_STATIC);
- (void)lock_put(envp, lock);
- __os_free(lock, sizeof(DB_LOCK));
+ (void)envp->lock_put(envp, lock);
+ __os_free(envp, lock);
_DeleteInfo(ip);
result = TCL_ERROR;
goto error;
@@ -653,3 +738,4 @@ _GetThisLock(interp, envp, lockid, flag, objp, mode, newname)
error:
return (result);
}
+#endif
diff --git a/db/tcl/tcl_log.c b/db/tcl/tcl_log.c
index 20f8e8c02..dcb4fcbbd 100644
--- a/db/tcl/tcl_log.c
+++ b/db/tcl/tcl_log.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_log.c,v 11.21 2000/11/30 00:58:45 ubell Exp $";
+static const char revid[] = "$Id: tcl_log.c,v 11.58 2003/04/24 16:25:54 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,7 +20,12 @@ static const char revid[] = "$Id: tcl_log.c,v 11.21 2000/11/30 00:58:45 ubell Ex
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/log.h"
+#include "dbinc/tcl_db.h"
+#include "dbinc/txn.h"
+
+#ifdef CONFIG_TEST
+static int tcl_LogcGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*, DB_LOGC *));
/*
* tcl_LogArchive --
@@ -35,12 +40,12 @@ tcl_LogArchive(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *archopts[] = {
- "-arch_abs", "-arch_data", "-arch_log",
+ static const char *archopts[] = {
+ "-arch_abs", "-arch_data", "-arch_log", "-arch_remove",
NULL
};
enum archopts {
- ARCH_ABS, ARCH_DATA, ARCH_LOG
+ ARCH_ABS, ARCH_DATA, ARCH_LOG, ARCH_REMOVE
};
Tcl_Obj *fileobj, *res;
u_int32_t flag;
@@ -69,12 +74,15 @@ tcl_LogArchive(interp, objc, objv, envp)
case ARCH_LOG:
flag |= DB_ARCH_LOG;
break;
+ case ARCH_REMOVE:
+ flag |= DB_ARCH_REMOVE;
+ break;
}
}
_debug_check();
list = NULL;
- ret = log_archive(envp, &list, flag, NULL);
- result = _ReturnSetup(interp, ret, "log archive");
+ ret = envp->log_archive(envp, &list, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "log archive");
if (result == TCL_OK) {
res = Tcl_NewListObj(0, NULL);
for (file = list; file != NULL && *file != NULL; file++) {
@@ -86,7 +94,7 @@ tcl_LogArchive(interp, objc, objv, envp)
Tcl_SetObjResult(interp, res);
}
if (list != NULL)
- __os_free(list, 0);
+ __os_ufree(envp, list);
return (result);
}
@@ -166,24 +174,24 @@ tcl_LogFile(interp, objc, objv, envp)
name = NULL;
while (ret == ENOMEM) {
if (name != NULL)
- __os_free(name, len/2);
- ret = __os_malloc(envp, len, NULL, &name);
+ __os_free(envp, name);
+ ret = __os_malloc(envp, len, &name);
if (ret != 0) {
Tcl_SetResult(interp, db_strerror(ret), TCL_STATIC);
break;
}
_debug_check();
- ret = log_file(envp, &lsn, name, len);
+ ret = envp->log_file(envp, &lsn, name, len);
len *= 2;
}
- result = _ReturnSetup(interp, ret, "log_file");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "log_file");
if (ret == 0) {
res = Tcl_NewStringObj(name, strlen(name));
Tcl_SetObjResult(interp, res);
}
if (name != NULL)
- __os_free(name, len/2);
+ __os_free(envp, name);
return (result);
}
@@ -222,8 +230,8 @@ tcl_LogFlush(interp, objc, objv, envp)
lsnp = NULL;
_debug_check();
- ret = log_flush(envp, lsnp);
- result = _ReturnSetup(interp, ret, "log_flush");
+ ret = envp->log_flush(envp, lsnp);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "log_flush");
return (result);
}
@@ -240,111 +248,13 @@ tcl_LogGet(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *loggetopts[] = {
- "-checkpoint", "-current", "-first",
- "-last", "-next", "-prev",
- "-set",
- NULL
- };
- enum loggetopts {
- LOGGET_CKP, LOGGET_CUR, LOGGET_FIRST,
- LOGGET_LAST, LOGGET_NEXT, LOGGET_PREV,
- LOGGET_SET
- };
- DB_LSN lsn;
- DBT data;
- Tcl_Obj *dataobj, *lsnlist, *myobjv[2], *res;
- u_int32_t flag;
- int i, myobjc, optindex, result, ret;
-
- result = TCL_OK;
- flag = 0;
- if (objc < 3) {
- Tcl_WrongNumArgs(interp, 2, objv, "?-args? lsn");
- return (TCL_ERROR);
- }
-
- /*
- * Get the command name index from the object based on the options
- * defined above.
- */
- i = 2;
- while (i < objc) {
- if (Tcl_GetIndexFromObj(interp, objv[i],
- loggetopts, "option", TCL_EXACT, &optindex) != TCL_OK)
- return (IS_HELP(objv[i]));
- i++;
- switch ((enum loggetopts)optindex) {
- case LOGGET_CKP:
- FLAG_CHECK(flag);
- flag |= DB_CHECKPOINT;
- break;
- case LOGGET_CUR:
- FLAG_CHECK(flag);
- flag |= DB_CURRENT;
- break;
- case LOGGET_FIRST:
- FLAG_CHECK(flag);
- flag |= DB_FIRST;
- break;
- case LOGGET_LAST:
- FLAG_CHECK(flag);
- flag |= DB_LAST;
- break;
- case LOGGET_NEXT:
- FLAG_CHECK(flag);
- flag |= DB_NEXT;
- break;
- case LOGGET_PREV:
- FLAG_CHECK(flag);
- flag |= DB_PREV;
- break;
- case LOGGET_SET:
- FLAG_CHECK(flag);
- flag |= DB_SET;
- if (i == objc) {
- Tcl_WrongNumArgs(interp, 2, objv, "?-set lsn?");
- result = TCL_ERROR;
- break;
- }
- result = _GetLsn(interp, objv[i++], &lsn);
- break;
- }
- }
-
- if (result == TCL_ERROR)
- return (result);
- memset(&data, 0, sizeof(data));
- data.flags |= DB_DBT_MALLOC;
- _debug_check();
- ret = log_get(envp, &lsn, &data, flag);
- res = Tcl_NewListObj(0, NULL);
- result = _ReturnSetup(interp, ret, "log_get");
- if (ret == 0) {
- /*
- * Success. Set up return list as {LSN data} where LSN
- * is a sublist {file offset}.
- */
- myobjc = 2;
- myobjv[0] = Tcl_NewIntObj(lsn.file);
- myobjv[1] = Tcl_NewIntObj(lsn.offset);
- lsnlist = Tcl_NewListObj(myobjc, myobjv);
- if (lsnlist == NULL) {
- if (data.data != NULL)
- __os_free(data.data, data.size);
- return (TCL_ERROR);
- }
- result = Tcl_ListObjAppendElement(interp, res, lsnlist);
- dataobj = Tcl_NewStringObj(data.data, data.size);
- result = Tcl_ListObjAppendElement(interp, res, dataobj);
- }
- if (data.data != NULL)
- __os_free(data.data, data.size);
+ COMPQUIET(objv, NULL);
+ COMPQUIET(objc, 0);
+ COMPQUIET(envp, NULL);
- if (result == TCL_OK)
- Tcl_SetObjResult(interp, res);
- return (result);
+ Tcl_SetResult(interp, "FAIL: log_get deprecated\n", TCL_STATIC);
+ return (TCL_ERROR);
}
/*
@@ -360,21 +270,23 @@ tcl_LogPut(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *logputopts[] = {
- "-checkpoint", "-curlsn", "-flush",
+ static const char *logputopts[] = {
+ "-flush",
NULL
};
enum logputopts {
- LOGPUT_CKP, LOGPUT_CUR, LOGPUT_FLUSH
+ LOGPUT_FLUSH
};
DB_LSN lsn;
DBT data;
Tcl_Obj *intobj, *res;
+ void *dtmp;
u_int32_t flag;
- int itmp, optindex, result, ret;
+ int freedata, optindex, result, ret;
result = TCL_OK;
flag = 0;
+ freedata = 0;
if (objc < 3) {
Tcl_WrongNumArgs(interp, 2, objv, "?-args? record");
return (TCL_ERROR);
@@ -384,8 +296,14 @@ tcl_LogPut(interp, objc, objv, envp)
* Data/record must be the last arg.
*/
memset(&data, 0, sizeof(data));
- data.data = Tcl_GetByteArrayFromObj(objv[objc-1], &itmp);
- data.size = itmp;
+ ret = _CopyObjBytes(interp, objv[objc-1], &dtmp,
+ &data.size, &freedata);
+ if (ret != 0) {
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_STD(ret), "log put");
+ return (result);
+ }
+ data.data = dtmp;
/*
* Get the command name index from the object based on the options
@@ -397,12 +315,6 @@ tcl_LogPut(interp, objc, objv, envp)
return (IS_HELP(objv[2]));
}
switch ((enum logputopts)optindex) {
- case LOGPUT_CKP:
- flag = DB_CHECKPOINT;
- break;
- case LOGPUT_CUR:
- flag = DB_CURLSN;
- break;
case LOGPUT_FLUSH:
flag = DB_FLUSH;
break;
@@ -413,69 +325,20 @@ tcl_LogPut(interp, objc, objv, envp)
return (result);
_debug_check();
- ret = log_put(envp, &lsn, &data, flag);
- result = _ReturnSetup(interp, ret, "log_put");
+ ret = envp->log_put(envp, &lsn, &data, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "log_put");
if (result == TCL_ERROR)
return (result);
res = Tcl_NewListObj(0, NULL);
- intobj = Tcl_NewIntObj(lsn.file);
+ intobj = Tcl_NewWideIntObj((Tcl_WideInt)lsn.file);
result = Tcl_ListObjAppendElement(interp, res, intobj);
- intobj = Tcl_NewIntObj(lsn.offset);
+ intobj = Tcl_NewWideIntObj((Tcl_WideInt)lsn.offset);
result = Tcl_ListObjAppendElement(interp, res, intobj);
Tcl_SetObjResult(interp, res);
+ if (freedata)
+ (void)__os_free(NULL, dtmp);
return (result);
}
-
-/*
- * tcl_LogRegister --
- *
- * PUBLIC: int tcl_LogRegister __P((Tcl_Interp *, int,
- * PUBLIC: Tcl_Obj * CONST*, DB_ENV *));
- */
-int
-tcl_LogRegister(interp, objc, objv, envp)
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
- DB_ENV *envp; /* Environment pointer */
-{
- DB *dbp;
- Tcl_Obj *res;
- int result, ret;
- char *arg, msg[MSG_SIZE];
-
- result = TCL_OK;
- if (objc != 4) {
- Tcl_WrongNumArgs(interp, 2, objv, "db filename");
- return (TCL_ERROR);
- }
- /*
- * First comes the DB.
- */
- arg = Tcl_GetStringFromObj(objv[2], NULL);
- dbp = NAME_TO_DB(arg);
- if (dbp == NULL) {
- snprintf(msg, MSG_SIZE,
- "LogRegister: Invalid db: %s\n", arg);
- Tcl_SetResult(interp, msg, TCL_VOLATILE);
- return (TCL_ERROR);
- }
-
- /*
- * Next is the filename.
- */
- arg = Tcl_GetStringFromObj(objv[3], NULL);
-
- _debug_check();
- ret = log_register(envp, dbp, arg);
- result = _ReturnSetup(interp, ret, "log_register");
- if (result == TCL_OK) {
- res = Tcl_NewIntObj((int)dbp->log_fileid);
- Tcl_SetObjResult(interp, res);
- }
- return (result);
-}
-
/*
* tcl_LogStat --
*
@@ -502,8 +365,8 @@ tcl_LogStat(interp, objc, objv, envp)
return (TCL_ERROR);
}
_debug_check();
- ret = log_stat(envp, &sp, NULL);
- result = _ReturnSetup(interp, ret, "log stat");
+ ret = envp->log_stat(envp, &sp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "log stat");
if (result == TCL_ERROR)
return (result);
@@ -520,7 +383,7 @@ tcl_LogStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Region size", sp->st_regsize);
MAKE_STAT_LIST("Log file mode", sp->st_mode);
MAKE_STAT_LIST("Log record cache size", sp->st_lg_bsize);
- MAKE_STAT_LIST("Maximum log file size", sp->st_lg_max);
+ MAKE_STAT_LIST("Current log file size", sp->st_lg_size);
MAKE_STAT_LIST("Mbytes written", sp->st_w_mbytes);
MAKE_STAT_LIST("Bytes written (over Mb)", sp->st_w_bytes);
MAKE_STAT_LIST("Mbytes written since checkpoint", sp->st_wc_mbytes);
@@ -532,50 +395,219 @@ tcl_LogStat(interp, objc, objv, envp)
MAKE_STAT_LIST("Times log flushed", sp->st_scount);
MAKE_STAT_LIST("Current log file number", sp->st_cur_file);
MAKE_STAT_LIST("Current log file offset", sp->st_cur_offset);
+ MAKE_STAT_LIST("On-disk log file number", sp->st_disk_file);
+ MAKE_STAT_LIST("On-disk log file offset", sp->st_disk_offset);
+ MAKE_STAT_LIST("Max commits in a log flush", sp->st_maxcommitperflush);
+ MAKE_STAT_LIST("Min commits in a log flush", sp->st_mincommitperflush);
MAKE_STAT_LIST("Number of region lock waits", sp->st_region_wait);
MAKE_STAT_LIST("Number of region lock nowaits", sp->st_region_nowait);
Tcl_SetObjResult(interp, res);
error:
- __os_free(sp, sizeof(*sp));
+ (void)__os_ufree(envp, sp);
return (result);
}
/*
- * tcl_LogUnregister --
+ * logc_Cmd --
+ * Implements the log cursor command.
*
- * PUBLIC: int tcl_LogUnregister __P((Tcl_Interp *, int,
- * PUBLIC: Tcl_Obj * CONST*, DB_ENV *));
+ * PUBLIC: int logc_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
*/
int
-tcl_LogUnregister(interp, objc, objv, envp)
+logc_Cmd(clientData, interp, objc, objv)
+ ClientData clientData; /* Cursor handle */
Tcl_Interp *interp; /* Interpreter */
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
- DB_ENV *envp; /* Environment pointer */
{
- DB *dbp;
- char *arg, msg[MSG_SIZE];
- int result, ret;
+ static const char *logccmds[] = {
+ "close",
+ "get",
+ NULL
+ };
+ enum logccmds {
+ LOGCCLOSE,
+ LOGCGET
+ };
+ DB_LOGC *logc;
+ DBTCL_INFO *logcip;
+ int cmdindex, result, ret;
+ Tcl_ResetResult(interp);
+ logc = (DB_LOGC *)clientData;
+ logcip = _PtrToInfo((void *)logc);
result = TCL_OK;
+
+ if (objc <= 1) {
+ Tcl_WrongNumArgs(interp, 1, objv, "command cmdargs");
+ return (TCL_ERROR);
+ }
+ if (logc == NULL) {
+ Tcl_SetResult(interp, "NULL logc pointer", TCL_STATIC);
+ return (TCL_ERROR);
+ }
+ if (logcip == NULL) {
+ Tcl_SetResult(interp, "NULL logc info pointer", TCL_STATIC);
+ return (TCL_ERROR);
+ }
+
/*
- * 1 arg for this. Error if more or less.
+ * Get the command name index from the object based on the berkdbcmds
+ * defined above.
*/
- if (objc != 3) {
- Tcl_WrongNumArgs(interp, 2, objv, NULL);
- return (TCL_ERROR);
+ if (Tcl_GetIndexFromObj(interp, objv[1], logccmds, "command",
+ TCL_EXACT, &cmdindex) != TCL_OK)
+ return (IS_HELP(objv[1]));
+ switch ((enum logccmds)cmdindex) {
+ case LOGCCLOSE:
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc > 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = logc->close(logc, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "logc close");
+ if (result == TCL_OK) {
+ (void)Tcl_DeleteCommand(interp, logcip->i_name);
+ _DeleteInfo(logcip);
+ }
+ break;
+ case LOGCGET:
+ result = tcl_LogcGet(interp, objc, objv, logc);
+ break;
}
- arg = Tcl_GetStringFromObj(objv[2], NULL);
- dbp = NAME_TO_DB(arg);
- if (dbp == NULL) {
- snprintf(msg, MSG_SIZE,
- "log_unregister: Invalid db identifier: %s\n", arg);
- Tcl_SetResult(interp, msg, TCL_VOLATILE);
+ return (result);
+}
+
+static int
+tcl_LogcGet(interp, objc, objv, logc)
+ Tcl_Interp *interp;
+ int objc;
+ Tcl_Obj * CONST *objv;
+ DB_LOGC *logc;
+{
+ static const char *logcgetopts[] = {
+ "-current",
+ "-first",
+ "-last",
+ "-next",
+ "-prev",
+ "-set",
+ NULL
+ };
+ enum logcgetopts {
+ LOGCGET_CURRENT,
+ LOGCGET_FIRST,
+ LOGCGET_LAST,
+ LOGCGET_NEXT,
+ LOGCGET_PREV,
+ LOGCGET_SET
+ };
+ DB_LSN lsn;
+ DBT data;
+ Tcl_Obj *dataobj, *lsnlist, *myobjv[2], *res;
+ u_int32_t flag;
+ int i, myobjc, optindex, result, ret;
+
+ result = TCL_OK;
+ res = NULL;
+ flag = 0;
+
+ if (objc < 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-args? lsn");
return (TCL_ERROR);
}
+
+ /*
+ * Get the command name index from the object based on the options
+ * defined above.
+ */
+ i = 2;
+ while (i < objc) {
+ if (Tcl_GetIndexFromObj(interp, objv[i],
+ logcgetopts, "option", TCL_EXACT, &optindex) != TCL_OK)
+ return (IS_HELP(objv[i]));
+ i++;
+ switch ((enum logcgetopts)optindex) {
+ case LOGCGET_CURRENT:
+ FLAG_CHECK(flag);
+ flag |= DB_CURRENT;
+ break;
+ case LOGCGET_FIRST:
+ FLAG_CHECK(flag);
+ flag |= DB_FIRST;
+ break;
+ case LOGCGET_LAST:
+ FLAG_CHECK(flag);
+ flag |= DB_LAST;
+ break;
+ case LOGCGET_NEXT:
+ FLAG_CHECK(flag);
+ flag |= DB_NEXT;
+ break;
+ case LOGCGET_PREV:
+ FLAG_CHECK(flag);
+ flag |= DB_PREV;
+ break;
+ case LOGCGET_SET:
+ FLAG_CHECK(flag);
+ flag |= DB_SET;
+ if (i == objc) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?-set lsn?");
+ result = TCL_ERROR;
+ break;
+ }
+ result = _GetLsn(interp, objv[i++], &lsn);
+ break;
+ }
+ }
+
+ if (result == TCL_ERROR)
+ return (result);
+
+ memset(&data, 0, sizeof(data));
+
_debug_check();
- ret = log_unregister(envp, dbp);
- result = _ReturnSetup(interp, ret, "log_unregister");
+ ret = logc->get(logc, &lsn, &data, flag);
+
+ res = Tcl_NewListObj(0, NULL);
+ if (res == NULL)
+ goto memerr;
+
+ if (ret == 0) {
+ /*
+ * Success. Set up return list as {LSN data} where LSN
+ * is a sublist {file offset}.
+ */
+ myobjc = 2;
+ myobjv[0] = Tcl_NewWideIntObj((Tcl_WideInt)lsn.file);
+ myobjv[1] = Tcl_NewWideIntObj((Tcl_WideInt)lsn.offset);
+ lsnlist = Tcl_NewListObj(myobjc, myobjv);
+ if (lsnlist == NULL)
+ goto memerr;
+
+ result = Tcl_ListObjAppendElement(interp, res, lsnlist);
+ dataobj = Tcl_NewStringObj(data.data, data.size);
+ if (dataobj == NULL) {
+ goto memerr;
+ }
+ result = Tcl_ListObjAppendElement(interp, res, dataobj);
+ } else
+ result = _ReturnSetup(interp, ret, DB_RETOK_LGGET(ret),
+ "DB_LOGC->get");
+
+ Tcl_SetObjResult(interp, res);
+
+ if (0) {
+memerr: if (res != NULL)
+ Tcl_DecrRefCount(res);
+ Tcl_SetResult(interp, "allocation failed", TCL_STATIC);
+ }
return (result);
}
+#endif
diff --git a/db/tcl/tcl_mp.c b/db/tcl/tcl_mp.c
index b424deea2..9bfd83095 100644
--- a/db/tcl/tcl_mp.c
+++ b/db/tcl/tcl_mp.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_mp.c,v 11.24 2001/01/09 16:13:59 sue Exp $";
+static const char revid[] = "$Id: tcl_mp.c,v 11.50 2003/09/04 20:45:45 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,11 +20,12 @@ static const char revid[] = "$Id: tcl_mp.c,v 11.24 2001/01/09 16:13:59 sue Exp $
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/tcl_db.h"
/*
* Prototypes for procedures defined later in this file:
*/
+#if CONFIG_TEST
static int mp_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
static int pg_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
static int tcl_MpGet __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
@@ -35,6 +36,7 @@ static int tcl_PgInit __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
void *, DBTCL_INFO *));
static int tcl_PgIsset __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
void *, DBTCL_INFO *));
+#endif
/*
* _MpInfoDelete --
@@ -45,7 +47,7 @@ static int tcl_PgIsset __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
*/
void
_MpInfoDelete(interp, mpip)
- Tcl_Interp *interp; /* Interpreter */
+ Tcl_Interp *interp; /* Interpreter */
DBTCL_INFO *mpip; /* Info for mp */
{
DBTCL_INFO *nextp, *p;
@@ -63,6 +65,7 @@ _MpInfoDelete(interp, mpip)
}
}
+#if CONFIG_TEST
/*
* tcl_MpSync --
*
@@ -76,25 +79,28 @@ tcl_MpSync(interp, objc, objv, envp)
DB_ENV *envp; /* Environment pointer */
{
- DB_LSN lsn;
+ DB_LSN lsn, *lsnp;
int result, ret;
result = TCL_OK;
+ lsnp = NULL;
/*
* No flags, must be 3 args.
*/
- if (objc != 3) {
+ if (objc == 3) {
+ result = _GetLsn(interp, objv[2], &lsn);
+ if (result == TCL_ERROR)
+ return (result);
+ lsnp = &lsn;
+ }
+ else if (objc != 2) {
Tcl_WrongNumArgs(interp, 2, objv, "lsn");
return (TCL_ERROR);
}
- result = _GetLsn(interp, objv[2], &lsn);
- if (result == TCL_ERROR)
- return (result);
-
_debug_check();
- ret = memp_sync(envp, &lsn);
- result = _ReturnSetup(interp, ret, "memp sync");
+ ret = envp->memp_sync(envp, lsnp);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "memp sync");
return (result);
}
@@ -132,8 +138,8 @@ tcl_MpTrickle(interp, objc, objv, envp)
return (result);
_debug_check();
- ret = memp_trickle(envp, percent, &pages);
- result = _ReturnSetup(interp, ret, "memp trickle");
+ ret = envp->memp_trickle(envp, percent, &pages);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "memp trickle");
if (result == TCL_ERROR)
return (result);
@@ -157,7 +163,7 @@ tcl_Mp(interp, objc, objv, envp, envip)
DB_ENV *envp; /* Environment pointer */
DBTCL_INFO *envip; /* Info pointer */
{
- static char *mpopts[] = {
+ static const char *mpopts[] = {
"-create",
"-mode",
"-nommap",
@@ -264,29 +270,39 @@ tcl_Mp(interp, objc, objv, envp, envip)
TCL_STATIC);
return (TCL_ERROR);
}
+
+ _debug_check();
+ if ((ret = envp->memp_fcreate(envp, &mpf, 0)) != 0) {
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "mpool");
+ _DeleteInfo(ip);
+ goto error;
+ }
+
/*
- * XXX finfop is NULL here. Interface currently doesn't
- * have all the stuff. Should expand interface.
+ * XXX
+ * Interface doesn't currently support DB_MPOOLFILE configuration.
*/
- _debug_check();
- ret = memp_fopen(envp, file, flag, mode, (size_t)pgsize, NULL, &mpf);
- if (ret != 0) {
- result = _ReturnSetup(interp, ret, "mpool");
+ if ((ret = mpf->open(mpf, file, flag, mode, (size_t)pgsize)) != 0) {
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "mpool");
_DeleteInfo(ip);
- } else {
- /*
- * Success. Set up return. Set up new info
- * and command widget for this mpool.
- */
- envip->i_envmpid++;
- ip->i_parent = envip;
- ip->i_pgsz = pgsize;
- _SetInfoData(ip, mpf);
- Tcl_CreateObjCommand(interp, newname,
- (Tcl_ObjCmdProc *)mp_Cmd, (ClientData)mpf, NULL);
- res = Tcl_NewStringObj(newname, strlen(newname));
- Tcl_SetObjResult(interp, res);
+
+ (void)mpf->close(mpf, 0);
+ goto error;
}
+
+ /*
+ * Success. Set up return. Set up new info and command widget for
+ * this mpool.
+ */
+ envip->i_envmpid++;
+ ip->i_parent = envip;
+ ip->i_pgsz = pgsize;
+ _SetInfoData(ip, mpf);
+ Tcl_CreateObjCommand(interp, newname,
+ (Tcl_ObjCmdProc *)mp_Cmd, (ClientData)mpf, NULL);
+ res = Tcl_NewStringObj(newname, strlen(newname));
+ Tcl_SetObjResult(interp, res);
+
error:
return (result);
}
@@ -320,8 +336,8 @@ tcl_MpStat(interp, objc, objv, envp)
return (TCL_ERROR);
}
_debug_check();
- ret = memp_stat(envp, &sp, &fsp, NULL);
- result = _ReturnSetup(interp, ret, "memp stat");
+ ret = envp->memp_stat(envp, &sp, &fsp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "memp stat");
if (result == TCL_ERROR)
return (result);
@@ -333,35 +349,48 @@ tcl_MpStat(interp, objc, objv, envp)
/*
* MAKE_STAT_LIST assumes 'res' and 'error' label.
*/
- MAKE_STAT_LIST("Region size", sp->st_regsize);
MAKE_STAT_LIST("Cache size (gbytes)", sp->st_gbytes);
MAKE_STAT_LIST("Cache size (bytes)", sp->st_bytes);
- MAKE_STAT_LIST("Cache hits", sp->st_cache_hit);
- MAKE_STAT_LIST("Cache misses", sp->st_cache_miss);
MAKE_STAT_LIST("Number of caches", sp->st_ncache);
+ MAKE_STAT_LIST("Region size", sp->st_regsize);
MAKE_STAT_LIST("Pages mapped into address space", sp->st_map);
+ MAKE_STAT_LIST("Cache hits", sp->st_cache_hit);
+ MAKE_STAT_LIST("Cache misses", sp->st_cache_miss);
MAKE_STAT_LIST("Pages created", sp->st_page_create);
MAKE_STAT_LIST("Pages read in", sp->st_page_in);
MAKE_STAT_LIST("Pages written", sp->st_page_out);
MAKE_STAT_LIST("Clean page evictions", sp->st_ro_evict);
MAKE_STAT_LIST("Dirty page evictions", sp->st_rw_evict);
+ MAKE_STAT_LIST("Dirty pages trickled", sp->st_page_trickle);
+ MAKE_STAT_LIST("Cached pages", sp->st_pages);
+ MAKE_STAT_LIST("Cached clean pages", sp->st_page_clean);
+ MAKE_STAT_LIST("Cached dirty pages", sp->st_page_dirty);
MAKE_STAT_LIST("Hash buckets", sp->st_hash_buckets);
MAKE_STAT_LIST("Hash lookups", sp->st_hash_searches);
MAKE_STAT_LIST("Longest hash chain found", sp->st_hash_longest);
MAKE_STAT_LIST("Hash elements examined", sp->st_hash_examined);
- MAKE_STAT_LIST("Cached clean pages", sp->st_page_clean);
- MAKE_STAT_LIST("Cached dirty pages", sp->st_page_dirty);
- MAKE_STAT_LIST("Dirty pages trickled", sp->st_page_trickle);
- MAKE_STAT_LIST("Number of region lock waits", sp->st_region_wait);
+ MAKE_STAT_LIST("Number of hash bucket nowaits", sp->st_hash_nowait);
+ MAKE_STAT_LIST("Number of hash bucket waits", sp->st_hash_wait);
+ MAKE_STAT_LIST("Maximum number of hash bucket waits",
+ sp->st_hash_max_wait);
MAKE_STAT_LIST("Number of region lock nowaits", sp->st_region_nowait);
+ MAKE_STAT_LIST("Number of region lock waits", sp->st_region_wait);
+ MAKE_STAT_LIST("Page allocations", sp->st_alloc);
+ MAKE_STAT_LIST("Buckets examined during allocation",
+ sp->st_alloc_buckets);
+ MAKE_STAT_LIST("Maximum buckets examined during allocation",
+ sp->st_alloc_max_buckets);
+ MAKE_STAT_LIST("Pages examined during allocation", sp->st_alloc_pages);
+ MAKE_STAT_LIST("Maximum pages examined during allocation",
+ sp->st_alloc_max_pages);
+
/*
* Save global stat list as res1. The MAKE_STAT_LIST
* macro assumes 'res' so we'll use that to build up
* our per-file sublist.
*/
res1 = res;
- savefsp = fsp;
- for (; fsp != NULL && *fsp != NULL; fsp++) {
+ for (savefsp = fsp; fsp != NULL && *fsp != NULL; fsp++) {
res = Tcl_NewObj();
result = _SetListElem(interp, res, "File Name",
strlen("File Name"), (*fsp)->file_name,
@@ -369,16 +398,16 @@ tcl_MpStat(interp, objc, objv, envp)
if (result != TCL_OK)
goto error;
MAKE_STAT_LIST("Page size", (*fsp)->st_pagesize);
- MAKE_STAT_LIST("Cache Hits", (*fsp)->st_cache_hit);
- MAKE_STAT_LIST("Cache Misses", (*fsp)->st_cache_miss);
MAKE_STAT_LIST("Pages mapped into address space",
(*fsp)->st_map);
+ MAKE_STAT_LIST("Cache hits", (*fsp)->st_cache_hit);
+ MAKE_STAT_LIST("Cache misses", (*fsp)->st_cache_miss);
MAKE_STAT_LIST("Pages created", (*fsp)->st_page_create);
MAKE_STAT_LIST("Pages read in", (*fsp)->st_page_in);
MAKE_STAT_LIST("Pages written", (*fsp)->st_page_out);
/*
- * Now that we have a complete "per-file" stat
- * list, append that to the other list.
+ * Now that we have a complete "per-file" stat list, append
+ * that to the other list.
*/
result = Tcl_ListObjAppendElement(interp, res1, res);
if (result != TCL_OK)
@@ -386,9 +415,9 @@ tcl_MpStat(interp, objc, objv, envp)
}
Tcl_SetObjResult(interp, res1);
error:
- __os_free(sp, sizeof(*sp));
+ (void)__os_ufree(envp, sp);
if (savefsp != NULL)
- __os_free(savefsp, 0);
+ (void)__os_ufree(envp, savefsp);
return (result);
}
@@ -398,23 +427,41 @@ error:
*/
static int
mp_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Mp handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Mp handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *mpcmds[] = {
- "close", "fsync", "get",
+ static const char *mpcmds[] = {
+ "close",
+ "fsync",
+ "get",
+ "get_clear_len",
+ "get_fileid",
+ "get_ftype",
+ "get_lsn_offset",
+ "get_pgcookie",
NULL
};
enum mpcmds {
- MPCLOSE, MPFSYNC, MPGET
+ MPCLOSE,
+ MPFSYNC,
+ MPGET,
+ MPGETCLEARLEN,
+ MPGETFILEID,
+ MPGETFTYPE,
+ MPGETLSNOFFSET,
+ MPGETPGCOOKIE
};
DB_MPOOLFILE *mp;
- int cmdindex, length, result, ret;
+ int cmdindex, ftype, length, result, ret;
DBTCL_INFO *mpip;
Tcl_Obj *res;
char *obj_name;
+ u_int32_t value;
+ int32_t intval;
+ u_int8_t fileid[DB_FILE_ID_LEN];
+ DBT cookie;
Tcl_ResetResult(interp);
mp = (DB_MPOOLFILE *)clientData;
@@ -447,8 +494,9 @@ mp_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- ret = memp_fclose(mp);
- result = _ReturnSetup(interp, ret, "mp close");
+ ret = mp->close(mp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp close");
_MpInfoDelete(interp, mpip);
(void)Tcl_DeleteCommand(interp, mpip->i_name);
_DeleteInfo(mpip);
@@ -459,12 +507,65 @@ mp_Cmd(clientData, interp, objc, objv)
return (TCL_ERROR);
}
_debug_check();
- ret = memp_fsync(mp);
+ ret = mp->sync(mp);
res = Tcl_NewIntObj(ret);
break;
case MPGET:
result = tcl_MpGet(interp, objc, objv, mp, mpip);
break;
+ case MPGETCLEARLEN:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = mp->get_clear_len(mp, &value);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp get_clear_len")) == TCL_OK)
+ res = Tcl_NewIntObj(value);
+ break;
+ case MPGETFILEID:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = mp->get_fileid(mp, fileid);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp get_fileid")) == TCL_OK)
+ res = Tcl_NewStringObj((char *)fileid,
+ (int)DB_FILE_ID_LEN);
+ break;
+ case MPGETFTYPE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = mp->get_ftype(mp, &ftype);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp get_ftype")) == TCL_OK)
+ res = Tcl_NewIntObj(ftype);
+ break;
+ case MPGETLSNOFFSET:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ ret = mp->get_lsn_offset(mp, &intval);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp get_lsn_offset")) == TCL_OK)
+ res = Tcl_NewIntObj(intval);
+ break;
+ case MPGETPGCOOKIE:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ memset(&cookie, 0, sizeof(DBT));
+ ret = mp->get_pgcookie(mp, &cookie);
+ if ((result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "mp get_pgcookie")) == TCL_OK)
+ res = Tcl_NewByteArrayObj((u_char *)cookie.data,
+ cookie.size);
+ break;
}
/*
* Only set result if we have a res. Otherwise, lower
@@ -486,12 +587,16 @@ tcl_MpGet(interp, objc, objv, mp, mpip)
DB_MPOOLFILE *mp; /* mp pointer */
DBTCL_INFO *mpip; /* mp info pointer */
{
- static char *mpget[] = {
- "-create", "-last", "-new",
+ static const char *mpget[] = {
+ "-create",
+ "-last",
+ "-new",
NULL
};
enum mpget {
- MPGET_CREATE, MPGET_LAST, MPGET_NEW
+ MPGET_CREATE,
+ MPGET_LAST,
+ MPGET_NEW
};
DBTCL_INFO *ip;
@@ -559,8 +664,8 @@ tcl_MpGet(interp, objc, objv, mp, mpip)
}
_debug_check();
pgno = ipgno;
- ret = memp_fget(mp, &pgno, flag, &page);
- result = _ReturnSetup(interp, ret, "mpool get");
+ ret = mp->get(mp, &pgno, flag, &page);
+ result = _ReturnSetup(interp, ret, DB_RETOK_MPGET(ret), "mpool get");
if (result == TCL_ERROR)
_DeleteInfo(ip);
else {
@@ -588,12 +693,12 @@ error:
*/
static int
pg_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Page handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Page handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *pgcmds[] = {
+ static const char *pgcmds[] = {
"init",
"is_setto",
"pgnum",
@@ -648,10 +753,10 @@ pg_Cmd(clientData, interp, objc, objv)
res = NULL;
switch ((enum pgcmds)cmdindex) {
case PGNUM:
- res = Tcl_NewIntObj(pgip->i_pgno);
+ res = Tcl_NewWideIntObj((Tcl_WideInt)pgip->i_pgno);
break;
case PGSIZE:
- res = Tcl_NewLongObj(pgip->i_pgsz);
+ res = Tcl_NewWideIntObj((Tcl_WideInt)pgip->i_pgsz);
break;
case PGSET:
case PGPUT:
@@ -665,11 +770,12 @@ pg_Cmd(clientData, interp, objc, objv)
result = tcl_PgIsset(interp, objc, objv, page, pgip);
break;
}
+
/*
* Only set result if we have a res. Otherwise, lower
* functions have already done so.
*/
- if (result == TCL_OK && res)
+ if (result == TCL_OK && res != NULL)
Tcl_SetObjResult(interp, res);
return (result);
}
@@ -684,12 +790,16 @@ tcl_Pg(interp, objc, objv, page, mp, pgip, putop)
DBTCL_INFO *pgip; /* Info pointer */
int putop; /* Operation */
{
- static char *pgopt[] = {
- "-clean", "-dirty", "-discard",
+ static const char *pgopt[] = {
+ "-clean",
+ "-dirty",
+ "-discard",
NULL
};
enum pgopt {
- PGCLEAN, PGDIRTY, PGDISCARD
+ PGCLEAN,
+ PGDIRTY,
+ PGDISCARD
};
u_int32_t flag;
int i, optindex, result, ret;
@@ -717,11 +827,11 @@ tcl_Pg(interp, objc, objv, page, mp, pgip, putop)
_debug_check();
if (putop)
- ret = memp_fput(mp, page, flag);
+ ret = mp->put(mp, page, flag);
else
- ret = memp_fset(mp, page, flag);
+ ret = mp->set(mp, page, flag);
- result = _ReturnSetup(interp, ret, "page");
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "page");
if (putop) {
(void)Tcl_DeleteCommand(interp, pgip->i_name);
@@ -756,7 +866,8 @@ tcl_PgInit(interp, objc, objv, page, pgip)
s = Tcl_GetByteArrayFromObj(objv[2], &length);
if (s == NULL)
return (TCL_ERROR);
- memcpy(page, s, ((size_t)length < pgsz) ? length : pgsz);
+ memcpy(page, s,
+ ((size_t)length < pgsz) ? (size_t)length : pgsz);
result = TCL_OK;
} else {
p = (long *)page;
@@ -795,8 +906,8 @@ tcl_PgIsset(interp, objc, objv, page, pgip)
return (TCL_ERROR);
result = TCL_OK;
- if (memcmp(page,
- s, ((size_t)length < pgsz) ? length : pgsz ) != 0) {
+ if (memcmp(page, s,
+ ((size_t)length < pgsz) ? (size_t)length : pgsz ) != 0) {
res = Tcl_NewIntObj(0);
Tcl_SetObjResult(interp, res);
return (result);
@@ -820,3 +931,4 @@ tcl_PgIsset(interp, objc, objv, page, pgip)
Tcl_SetObjResult(interp, res);
return (result);
}
+#endif
diff --git a/db/tcl/tcl_rep.c b/db/tcl/tcl_rep.c
index b1198fa05..0d0fd30fd 100644
--- a/db/tcl/tcl_rep.c
+++ b/db/tcl/tcl_rep.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2002
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: tcl_rep.c,v 11.85 2002/08/06 04:45:44 bostic Exp ";
+static const char revid[] = "$Id: tcl_rep.c,v 11.93 2003/09/12 16:23:13 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -185,7 +185,7 @@ tcl_RepStart(interp, objc, objv, dbenv)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *dbenv;
{
- static char *tclrpstrt[] = {
+ static const char *tclrpstrt[] = {
"-client",
"-master",
NULL
@@ -249,10 +249,12 @@ tcl_RepProcessMessage(interp, objc, objv, dbenv)
DB_ENV *dbenv; /* Environment pointer */
{
DBT control, rec;
- Tcl_Obj *res;
+ DB_LSN permlsn;
+ Tcl_Obj *lsnlist, *myobjv[2], *res;
void *ctmp, *rtmp;
+ char *msg;
int eid;
- int freectl, freerec, result, ret;
+ int freectl, freerec, myobjc, result, ret;
if (objc != 5) {
Tcl_WrongNumArgs(interp, 5, objv, "id control rec");
@@ -283,21 +285,80 @@ tcl_RepProcessMessage(interp, objc, objv, dbenv)
}
rec.data = rtmp;
_debug_check();
- ret = dbenv->rep_process_message(dbenv, &control, &rec, &eid);
- result = _ReturnSetup(interp, ret, DB_RETOK_REPPMSG(ret),
+ ret = dbenv->rep_process_message(dbenv, &control, &rec, &eid, &permlsn);
+ /*
+ * !!!
+ * The TCL API diverges from the C++/Java APIs here. For us, it
+ * is OK to get DUPMASTER and HOLDELECTION for testing purposes.
+ */
+ result = _ReturnSetup(interp, ret,
+ DB_RETOK_REPPMSG(ret) || ret == DB_REP_DUPMASTER ||
+ ret == DB_REP_HOLDELECTION,
"env rep_process_message");
+ if (result != TCL_OK)
+ goto out;
+
/*
- * If we have a new master, return its environment ID.
- *
- * XXX
- * We should do something prettier to differentiate success
- * from an env ID, and figure out how to represent HOLDELECTION.
+ * We have a valid return. We need to return a variety of information.
+ * It will be one of the following:
+ * {0 0} - Make a 0 return a list for consistent return structure.
+ * {DUPMASTER 0} - DUPMASTER, no other info needed.
+ * {HOLDELECTION 0} - HOLDELECTION, no other info needed.
+ * {NEWMASTER #} - NEWMASTER and its ID.
+ * {NEWSITE 0} - NEWSITE, no other info needed.
+ * {ISPERM {LSN list}} - ISPERM and the perm LSN.
+ * {NOTPERM {LSN list}} - NOTPERM and this msg's LSN.
*/
- if (result == TCL_OK && ret == DB_REP_NEWMASTER) {
- res = Tcl_NewIntObj(eid);
- Tcl_SetObjResult(interp, res);
+ myobjc = 2;
+ switch (ret) {
+ case 0:
+ myobjv[0] = Tcl_NewIntObj(0);
+ myobjv[1] = Tcl_NewIntObj(0);
+ break;
+ case DB_REP_DUPMASTER:
+ myobjv[0] = Tcl_NewByteArrayObj("DUPMASTER",
+ strlen("DUPMASTER"));
+ myobjv[1] = Tcl_NewIntObj(0);
+ break;
+ case DB_REP_HOLDELECTION:
+ myobjv[0] = Tcl_NewByteArrayObj("HOLDELECTION",
+ strlen("HOLDELECTION"));
+ myobjv[1] = Tcl_NewIntObj(0);
+ break;
+ case DB_REP_ISPERM:
+ myobjv[0] = Tcl_NewLongObj((long)permlsn.file);
+ myobjv[1] = Tcl_NewLongObj((long)permlsn.offset);
+ lsnlist = Tcl_NewListObj(myobjc, myobjv);
+ myobjv[0] = Tcl_NewByteArrayObj("ISPERM", strlen("ISPERM"));
+ myobjv[1] = lsnlist;
+ break;
+ case DB_REP_NEWMASTER:
+ myobjv[0] = Tcl_NewByteArrayObj("NEWMASTER",
+ strlen("NEWMASTER"));
+ myobjv[1] = Tcl_NewIntObj(eid);
+ break;
+ case DB_REP_NEWSITE:
+ myobjv[0] = Tcl_NewByteArrayObj("NEWSITE", strlen("NEWSITE"));
+ myobjv[1] = Tcl_NewIntObj(0);
+ break;
+ case DB_REP_NOTPERM:
+ myobjv[0] = Tcl_NewLongObj((long)permlsn.file);
+ myobjv[1] = Tcl_NewLongObj((long)permlsn.offset);
+ lsnlist = Tcl_NewListObj(myobjc, myobjv);
+ myobjv[0] = Tcl_NewByteArrayObj("NOTPERM", strlen("NOTPERM"));
+ myobjv[1] = lsnlist;
+ break;
+ default:
+ msg = db_strerror(ret);
+ Tcl_AppendResult(interp, msg, NULL);
+ Tcl_SetErrorCode(interp, "BerkeleyDB", msg, NULL);
+ result = TCL_ERROR;
+ goto out;
}
+ res = Tcl_NewListObj(myobjc, myobjv);
+ if (res != NULL)
+ Tcl_SetObjResult(interp, res);
out:
if (freectl)
(void)__os_free(NULL, ctmp);
@@ -368,6 +429,7 @@ tcl_RepStat(interp, objc, objv, dbenv)
MAKE_STAT_LIST("Environment ID", sp->st_env_id);
MAKE_STAT_LIST("Environment priority", sp->st_env_priority);
MAKE_STAT_LIST("Generation number", sp->st_gen);
+ MAKE_STAT_LIST("In recovery", sp->st_in_recovery);
MAKE_STAT_LIST("Duplicate log records received", sp->st_log_duplicated);
MAKE_STAT_LIST("Current log records queued", sp->st_log_queued);
MAKE_STAT_LIST("Maximum log records queued", sp->st_log_queued_max);
@@ -399,7 +461,7 @@ tcl_RepStat(interp, objc, objv, dbenv)
Tcl_SetObjResult(interp, res);
error:
- free(sp);
+ (void)__os_ufree(dbenv, sp);
return (result);
}
#endif
diff --git a/db/tcl/tcl_txn.c b/db/tcl/tcl_txn.c
index dfe6b6cf6..5686b7192 100644
--- a/db/tcl/tcl_txn.c
+++ b/db/tcl/tcl_txn.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999, 2000
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: tcl_txn.c,v 11.24 2000/12/31 19:26:23 bostic Exp $";
+static const char revid[] = "$Id: tcl_txn.c,v 11.63 2003/04/24 16:25:54 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -20,13 +20,11 @@ static const char revid[] = "$Id: tcl_txn.c,v 11.24 2000/12/31 19:26:23 bostic E
#endif
#include "db_int.h"
-#include "tcl_db.h"
+#include "dbinc/tcl_db.h"
-/*
- * Prototypes for procedures defined later in this file:
- */
-static int tcl_TxnCommit __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
- DB_TXN *, DBTCL_INFO *));
+static int tcl_TxnCommit __P((Tcl_Interp *,
+ int, Tcl_Obj * CONST *, DB_TXN *, DBTCL_INFO *));
+static int txn_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST *));
/*
* _TxnInfoDelete --
@@ -39,7 +37,7 @@ static int tcl_TxnCommit __P((Tcl_Interp *, int, Tcl_Obj * CONST*,
*/
void
_TxnInfoDelete(interp, txnip)
- Tcl_Interp *interp; /* Interpreter */
+ Tcl_Interp *interp; /* Interpreter */
DBTCL_INFO *txnip; /* Info for txn */
{
DBTCL_INFO *nextp, *p;
@@ -71,16 +69,22 @@ tcl_TxnCheckpoint(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
- static char *txnckpopts[] = {
- "-kbyte", "-min",
+ static const char *txnckpopts[] = {
+ "-force",
+ "-kbyte",
+ "-min",
NULL
};
enum txnckpopts {
- TXNCKP_KB, TXNCKP_MIN
+ TXNCKP_FORCE,
+ TXNCKP_KB,
+ TXNCKP_MIN
};
+ u_int32_t flags;
int i, kb, min, optindex, result, ret;
result = TCL_OK;
+ flags = 0;
kb = min = 0;
/*
@@ -95,6 +99,9 @@ tcl_TxnCheckpoint(interp, objc, objv, envp)
}
i++;
switch ((enum txnckpopts)optindex) {
+ case TXNCKP_FORCE:
+ flags = DB_FORCE;
+ break;
case TXNCKP_KB:
if (i == objc) {
Tcl_WrongNumArgs(interp, 2, objv,
@@ -115,8 +122,9 @@ tcl_TxnCheckpoint(interp, objc, objv, envp)
}
}
_debug_check();
- ret = txn_checkpoint(envp, (u_int32_t)kb, (u_int32_t)min, 0);
- result = _ReturnSetup(interp, ret, "txn checkpoint");
+ ret = envp->txn_checkpoint(envp, (u_int32_t)kb, (u_int32_t)min, flags);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn checkpoint");
return (result);
}
@@ -134,7 +142,12 @@ tcl_Txn(interp, objc, objv, envp, envip)
DB_ENV *envp; /* Environment pointer */
DBTCL_INFO *envip; /* Info pointer */
{
- static char *txnopts[] = {
+ static const char *txnopts[] = {
+#if CONFIG_TEST
+ "-dirty",
+ "-lock_timeout",
+ "-txn_timeout",
+#endif
"-nosync",
"-nowait",
"-parent",
@@ -142,10 +155,15 @@ tcl_Txn(interp, objc, objv, envp, envip)
NULL
};
enum txnopts {
- TXN_NOSYNC,
- TXN_NOWAIT,
- TXN_PARENT,
- TXN_SYNC
+#if CONFIG_TEST
+ TXNDIRTY,
+ TXN_LOCK_TIMEOUT,
+ TXN_TIMEOUT,
+#endif
+ TXNNOSYNC,
+ TXNNOWAIT,
+ TXNPARENT,
+ TXNSYNC
};
DBTCL_INFO *ip;
DB_TXN *parent;
@@ -154,12 +172,19 @@ tcl_Txn(interp, objc, objv, envp, envip)
u_int32_t flag;
int i, optindex, result, ret;
char *arg, msg[MSG_SIZE], newname[MSG_SIZE];
+#if CONFIG_TEST
+ db_timeout_t lk_time, tx_time;
+ u_int32_t lk_timeflag, tx_timeflag;
+#endif
result = TCL_OK;
memset(newname, 0, MSG_SIZE);
parent = NULL;
flag = 0;
+#if CONFIG_TEST
+ lk_timeflag = tx_timeflag = 0;
+#endif
i = 2;
while (i < objc) {
if (Tcl_GetIndexFromObj(interp, objv[i],
@@ -168,7 +193,37 @@ tcl_Txn(interp, objc, objv, envp, envip)
}
i++;
switch ((enum txnopts)optindex) {
- case TXN_PARENT:
+#ifdef CONFIG_TEST
+ case TXNDIRTY:
+ flag |= DB_DIRTY_READ;
+ break;
+ case TXN_LOCK_TIMEOUT:
+ lk_timeflag = DB_SET_LOCK_TIMEOUT;
+ goto getit;
+ case TXN_TIMEOUT:
+ tx_timeflag = DB_SET_TXN_TIMEOUT;
+getit:
+ if (i >= objc) {
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "?-txn_timestamp time?");
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[i++],
+ (long *)(optindex == TXN_LOCK_TIMEOUT ?
+ &lk_time : &tx_time));
+ if (result != TCL_OK)
+ return (TCL_ERROR);
+ break;
+#endif
+ case TXNNOSYNC:
+ FLAG_CHECK2(flag, DB_DIRTY_READ);
+ flag |= DB_TXN_NOSYNC;
+ break;
+ case TXNNOWAIT:
+ FLAG_CHECK2(flag, DB_DIRTY_READ);
+ flag |= DB_TXN_NOWAIT;
+ break;
+ case TXNPARENT:
if (i == objc) {
Tcl_WrongNumArgs(interp, 2, objv,
"?-parent txn?");
@@ -185,18 +240,10 @@ tcl_Txn(interp, objc, objv, envp, envip)
return (TCL_ERROR);
}
break;
- case TXN_NOWAIT:
- FLAG_CHECK(flag);
- flag |= DB_TXN_NOWAIT;
- break;
- case TXN_SYNC:
- FLAG_CHECK(flag);
+ case TXNSYNC:
+ FLAG_CHECK2(flag, DB_DIRTY_READ);
flag |= DB_TXN_SYNC;
break;
- case TXN_NOSYNC:
- FLAG_CHECK(flag);
- flag |= DB_TXN_NOSYNC;
- break;
}
}
snprintf(newname, sizeof(newname), "%s.txn%d",
@@ -208,8 +255,9 @@ tcl_Txn(interp, objc, objv, envp, envip)
return (TCL_ERROR);
}
_debug_check();
- ret = txn_begin(envp, parent, &txn, flag);
- result = _ReturnSetup(interp, ret, "txn");
+ ret = envp->txn_begin(envp, parent, &txn, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn");
if (result == TCL_ERROR)
_DeleteInfo(ip);
else {
@@ -227,6 +275,26 @@ tcl_Txn(interp, objc, objv, envp, envip)
(Tcl_ObjCmdProc *)txn_Cmd, (ClientData)txn, NULL);
res = Tcl_NewStringObj(newname, strlen(newname));
Tcl_SetObjResult(interp, res);
+#if CONFIG_TEST
+ if (tx_timeflag != 0) {
+ ret = txn->set_timeout(txn, tx_time, tx_timeflag);
+ if (ret != 0) {
+ result =
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_timeout");
+ _DeleteInfo(ip);
+ }
+ }
+ if (lk_timeflag != 0) {
+ ret = txn->set_timeout(txn, lk_time, lk_timeflag);
+ if (ret != 0) {
+ result =
+ _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "set_timeout");
+ _DeleteInfo(ip);
+ }
+ }
+#endif
}
return (result);
}
@@ -244,21 +312,6 @@ tcl_TxnStat(interp, objc, objv, envp)
Tcl_Obj *CONST objv[]; /* The argument objects */
DB_ENV *envp; /* Environment pointer */
{
-#define MAKE_STAT_LSN(s, lsn) \
-do { \
- myobjc = 2; \
- myobjv[0] = Tcl_NewIntObj((lsn)->file); \
- myobjv[1] = Tcl_NewIntObj((lsn)->offset); \
- lsnlist = Tcl_NewListObj(myobjc, myobjv); \
- myobjc = 2; \
- myobjv[0] = Tcl_NewStringObj((s), strlen(s)); \
- myobjv[1] = lsnlist; \
- thislist = Tcl_NewListObj(myobjc, myobjv); \
- result = Tcl_ListObjAppendElement(interp, res, thislist); \
- if (result != TCL_OK) \
- goto error; \
-} while (0);
-
DBTCL_INFO *ip;
DB_TXN_ACTIVE *p;
DB_TXN_STAT *sp;
@@ -275,8 +328,9 @@ do { \
return (TCL_ERROR);
}
_debug_check();
- ret = txn_stat(envp, &sp, NULL);
- result = _ReturnSetup(interp, ret, "txn stat");
+ ret = envp->txn_stat(envp, &sp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn stat");
if (result == TCL_ERROR)
return (result);
@@ -290,14 +344,15 @@ do { \
*/
MAKE_STAT_LIST("Region size", sp->st_regsize);
MAKE_STAT_LSN("LSN of last checkpoint", &sp->st_last_ckp);
- MAKE_STAT_LSN("LSN of pending checkpoint", &sp->st_pending_ckp);
MAKE_STAT_LIST("Time of last checkpoint", sp->st_time_ckp);
MAKE_STAT_LIST("Last txn ID allocated", sp->st_last_txnid);
MAKE_STAT_LIST("Max Txns", sp->st_maxtxns);
MAKE_STAT_LIST("Number aborted txns", sp->st_naborts);
MAKE_STAT_LIST("Number active txns", sp->st_nactive);
+ MAKE_STAT_LIST("Maximum active txns", sp->st_maxnactive);
MAKE_STAT_LIST("Number txns begun", sp->st_nbegins);
MAKE_STAT_LIST("Number committed txns", sp->st_ncommits);
+ MAKE_STAT_LIST("Number restored txns", sp->st_nrestores);
MAKE_STAT_LIST("Number of region lock waits", sp->st_region_wait);
MAKE_STAT_LIST("Number of region lock nowaits", sp->st_region_nowait);
for (i = 0, p = sp->st_txnarray; i < sp->st_nactive; i++, p++)
@@ -306,7 +361,7 @@ do { \
if (ip->i_type != I_TXN)
continue;
if (ip->i_type == I_TXN &&
- (txn_id(ip->i_txnp) == p->txnid)) {
+ (ip->i_txnp->id(ip->i_txnp) == p->txnid)) {
MAKE_STAT_LSN(ip->i_name, &p->lsn);
if (p->parentid != 0)
MAKE_STAT_STRLIST("Parent",
@@ -318,40 +373,80 @@ do { \
}
Tcl_SetObjResult(interp, res);
error:
- __os_free(sp, sizeof(*sp));
+ (void)__os_ufree(envp, sp);
return (result);
}
/*
- * txn_Cmd --
- * Implements the "txn" widget.
+ * tcl_TxnTimeout --
*
- * PUBLIC: int txn_Cmd __P((ClientData, Tcl_Interp *, int, Tcl_Obj * CONST*));
+ * PUBLIC: int tcl_TxnTimeout __P((Tcl_Interp *, int,
+ * PUBLIC: Tcl_Obj * CONST*, DB_ENV *));
*/
int
+tcl_TxnTimeout(interp, objc, objv, envp)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *envp; /* Environment pointer */
+{
+ long timeout;
+ int result, ret;
+
+ /*
+ * One arg, the timeout.
+ */
+ if (objc != 3) {
+ Tcl_WrongNumArgs(interp, 2, objv, "?timeout?");
+ return (TCL_ERROR);
+ }
+ result = Tcl_GetLongFromObj(interp, objv[2], &timeout);
+ if (result != TCL_OK)
+ return (result);
+ _debug_check();
+ ret = envp->set_timeout(envp, (u_int32_t)timeout, DB_SET_TXN_TIMEOUT);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "lock timeout");
+ return (result);
+}
+
+/*
+ * txn_Cmd --
+ * Implements the "txn" widget.
+ */
+static int
txn_Cmd(clientData, interp, objc, objv)
- ClientData clientData; /* Txn handle */
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ ClientData clientData; /* Txn handle */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *txncmds[] = {
- "abort",
- "commit",
+ static const char *txncmds[] = {
+#if CONFIG_TEST
+ "discard",
"id",
"prepare",
+#endif
+ "abort",
+ "commit",
NULL
};
enum txncmds {
- TXNABORT,
- TXNCOMMIT,
+#if CONFIG_TEST
+ TXNDISCARD,
TXNID,
- TXNPREPARE
+ TXNPREPARE,
+#endif
+ TXNABORT,
+ TXNCOMMIT
};
DBTCL_INFO *txnip;
DB_TXN *txnp;
Tcl_Obj *res;
int cmdindex, result, ret;
+#if CONFIG_TEST
+ u_int8_t *gid;
+#endif
Tcl_ResetResult(interp);
txnp = (DB_TXN *)clientData;
@@ -376,38 +471,64 @@ txn_Cmd(clientData, interp, objc, objv)
res = NULL;
switch ((enum txncmds)cmdindex) {
+#if CONFIG_TEST
+ case TXNDISCARD:
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, NULL);
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = txnp->discard(txnp, 0);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn discard");
+ _TxnInfoDelete(interp, txnip);
+ (void)Tcl_DeleteCommand(interp, txnip->i_name);
+ _DeleteInfo(txnip);
+ break;
case TXNID:
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, NULL);
return (TCL_ERROR);
}
_debug_check();
- ret = txn_id(txnp);
+ ret = txnp->id(txnp);
res = Tcl_NewIntObj(ret);
break;
case TXNPREPARE:
- if (objc != 2) {
+ if (objc != 3) {
Tcl_WrongNumArgs(interp, 1, objv, NULL);
return (TCL_ERROR);
}
_debug_check();
- ret = txn_prepare(txnp);
- result = _ReturnSetup(interp, ret, "txn prepare");
- break;
- case TXNCOMMIT:
- result = tcl_TxnCommit(interp, objc, objv, txnp, txnip);
+ gid = (u_int8_t *)Tcl_GetByteArrayFromObj(objv[2], NULL);
+ ret = txnp->prepare(txnp, gid);
+ /*
+ * !!!
+ * DB_TXN->prepare commits all outstanding children. But it
+ * does NOT destroy the current txn handle. So, we must call
+ * _TxnInfoDelete to recursively remove all nested txn handles,
+ * we do not call _DeleteInfo on ourselves.
+ */
_TxnInfoDelete(interp, txnip);
- (void)Tcl_DeleteCommand(interp, txnip->i_name);
- _DeleteInfo(txnip);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn prepare");
break;
+#endif
case TXNABORT:
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, NULL);
return (TCL_ERROR);
}
_debug_check();
- ret = txn_abort(txnp);
- result = _ReturnSetup(interp, ret, "txn abort");
+ ret = txnp->abort(txnp);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn abort");
+ _TxnInfoDelete(interp, txnip);
+ (void)Tcl_DeleteCommand(interp, txnip->i_name);
+ _DeleteInfo(txnip);
+ break;
+ case TXNCOMMIT:
+ result = tcl_TxnCommit(interp, objc, objv, txnp, txnip);
_TxnInfoDelete(interp, txnip);
(void)Tcl_DeleteCommand(interp, txnip->i_name);
_DeleteInfo(txnip);
@@ -424,13 +545,13 @@ txn_Cmd(clientData, interp, objc, objv)
static int
tcl_TxnCommit(interp, objc, objv, txnp, txnip)
- Tcl_Interp *interp; /* Interpreter */
- int objc; /* How many arguments? */
- Tcl_Obj *CONST objv[]; /* The argument objects */
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
DB_TXN *txnp; /* Transaction pointer */
DBTCL_INFO *txnip; /* Info pointer */
{
- static char *commitopt[] = {
+ static const char *commitopt[] = {
"-nosync",
"-sync",
NULL
@@ -467,7 +588,88 @@ tcl_TxnCommit(interp, objc, objv, txnp, txnip)
}
_debug_check();
- ret = txn_commit(txnp, flag);
- result = _ReturnSetup(interp, ret, "txn commit");
+ ret = txnp->commit(txnp, flag);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn commit");
+ return (result);
+}
+
+#if CONFIG_TEST
+/*
+ * tcl_TxnRecover --
+ *
+ * PUBLIC: int tcl_TxnRecover __P((Tcl_Interp *, int,
+ * PUBLIC: Tcl_Obj * CONST*, DB_ENV *, DBTCL_INFO *));
+ */
+int
+tcl_TxnRecover(interp, objc, objv, envp, envip)
+ Tcl_Interp *interp; /* Interpreter */
+ int objc; /* How many arguments? */
+ Tcl_Obj *CONST objv[]; /* The argument objects */
+ DB_ENV *envp; /* Environment pointer */
+ DBTCL_INFO *envip; /* Info pointer */
+{
+#define DO_PREPLIST(count) \
+for (i = 0; i < count; i++) { \
+ snprintf(newname, sizeof(newname), "%s.txn%d", \
+ envip->i_name, envip->i_envtxnid); \
+ ip = _NewInfo(interp, NULL, newname, I_TXN); \
+ if (ip == NULL) { \
+ Tcl_SetResult(interp, "Could not set up info", \
+ TCL_STATIC); \
+ return (TCL_ERROR); \
+ } \
+ envip->i_envtxnid++; \
+ ip->i_parent = envip; \
+ p = &prep[i]; \
+ _SetInfoData(ip, p->txn); \
+ Tcl_CreateObjCommand(interp, newname, \
+ (Tcl_ObjCmdProc *)txn_Cmd, (ClientData)p->txn, NULL); \
+ result = _SetListElem(interp, res, newname, strlen(newname), \
+ p->gid, DB_XIDDATASIZE); \
+ if (result != TCL_OK) \
+ goto error; \
+}
+
+ DBTCL_INFO *ip;
+ DB_PREPLIST prep[DBTCL_PREP], *p;
+ Tcl_Obj *res;
+ long count, i;
+ int result, ret;
+ char newname[MSG_SIZE];
+
+ result = TCL_OK;
+ /*
+ * No args for this. Error if there are some.
+ */
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 2, objv, NULL);
+ return (TCL_ERROR);
+ }
+ _debug_check();
+ ret = envp->txn_recover(envp, prep, DBTCL_PREP, &count, DB_FIRST);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn recover");
+ if (result == TCL_ERROR)
+ return (result);
+ res = Tcl_NewObj();
+ DO_PREPLIST(count);
+
+ /*
+ * If count returned is the maximum size we have, then there
+ * might be more. Keep going until we get them all.
+ */
+ while (count == DBTCL_PREP) {
+ ret = envp->txn_recover(
+ envp, prep, DBTCL_PREP, &count, DB_NEXT);
+ result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),
+ "txn recover");
+ if (result == TCL_ERROR)
+ return (result);
+ DO_PREPLIST(count);
+ }
+ Tcl_SetObjResult(interp, res);
+error:
return (result);
}
+#endif
diff --git a/db/tcl/tcl_util.c b/db/tcl/tcl_util.c
index b6d46b71f..08b169cd9 100644
--- a/db/tcl/tcl_util.c
+++ b/db/tcl/tcl_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1999-2001
+ * Copyright (c) 1999-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: tcl_util.c,v 11.35 2002/08/06 06:21:42 bostic Exp ";
+static const char revid[] = "$Id: tcl_util.c,v 11.38 2003/04/23 18:54:40 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -40,7 +40,7 @@ bdb_RandCommand(interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *rcmds[] = {
+ static const char *rcmds[] = {
"rand", "random_int", "srand",
NULL
};
@@ -235,8 +235,7 @@ posixout:
if (md != NULL) {
if (md->reginfo.addr != NULL)
- (void)__db_r_detach(md->env,
- &md->reginfo, F_ISSET(&md->reginfo, REGION_CREATE));
+ (void)__db_r_detach(md->env, &md->reginfo, 0);
__os_free(md->env, md);
}
return (result);
@@ -253,7 +252,7 @@ mutex_Cmd(clientData, interp, objc, objv)
int objc; /* How many arguments? */
Tcl_Obj *CONST objv[]; /* The argument objects */
{
- static char *mxcmds[] = {
+ static const char *mxcmds[] = {
"close",
"get",
"getval",
diff --git a/db/test/README b/db/test/README
new file mode 100644
index 000000000..601958f4d
--- /dev/null
+++ b/db/test/README
@@ -0,0 +1,148 @@
+Rules for the Berkeley DB and Berkeley DB-XML test suites
+
+1. Test Naming
+
+The primary script for running Berkeley DB scripts is named
+'test.tcl'. The primary script for running DB-XML is named
+'xmltest.tcl'.
+
+Tests are named with a (prefix, test number) combination. The
+prefix indicates the type of test (lock, log, xml, etc.). The
+prefix 'test' is used for plain vanilla DB testing. Test numbers
+are 3 digits long, starting with 001.
+
+Procedures common to a group of tests, or to all tests, are placed
+in files named 'xxxutils.tcl'. At the moment, we have the following
+utilities files:
+
+testutils.tcl Utilities common to all DB tests
+reputils.tcl Utilities for replication testing.
+siutils.tcl Utilities for secondary index testing.
+xmlutils.tcl Utilities for XML testing.
+
+2. Internal test structure
+
+Each line within a test should be no more than 80 characters long.
+
+Each test starts with a section like the following:
+
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: README,v 1.5 2003/09/04 23:41:09 bostic Exp $
+#
+# TEST test001
+# TEST Small keys/data
+# TEST Put/get per key
+# TEST Dump file
+# TEST Close, reopen
+# TEST Dump file
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+
+First we refer to the license and assert copyright, then comes the CVS
+header string. The section of lines beginning # TEST is used to
+automatically maintain the TESTS file, a listing of all tests and
+what they do. Use this section to briefly describe the test's purpose
+and structure.
+
+Next comes the main procedure of the test, which has the same name
+as the tcl file. The test should be liberally commented, and also
+should use 'puts' to send messages to the output file.
+
+Sections of a test are identified with letters: test001.a, test001.b,
+test001.c.
+
+Here's some typical output:
+
+ puts "Test$tnum: $method ($args) $nentries equal key/data pairs"
+ puts "\tTest$tnum.a: put/get loop"
+ puts "\tTest$tnum.b: dump file"
+ puts "\tTest$tnum.c: close, open, and dump file"
+ puts "\tTest$tnum.d: close, open, and dump file in reverse direction"
+
+The reporting of the current value of the args is particularly
+useful, allowing us to say at a glance that "testxxx is failing in
+btree" or whatever. Each line of output must begin with the test name.
+We use this to separate expected informational output from errors.
+
+Ancillary procedures follow the main procedure. Procedures used
+by more than one test should go into the appropriate XXXutils.tcl
+file.
+
+3. Reporting failures
+
+Failures in tests are reported with a message starting with the
+prefix "FAIL:". Failures in tests are usually caught with the
+error_check_good and error_check_bad routines to compare an
+actual return value to an expected return value. These routines
+take care of putting the "FAIL:" prefix on the message.
+
+4. Running tests
+
+Any single test can be run from the tclsh prompt by typing the
+name of the test. If it's a test from the 'testxxx' group, you
+should also specify the method you'd like to test:
+
+ log001
+ test001 btree
+
+To run one of the 'testxxx' tests for all methods, use the
+run_test procedure:
+
+ run_test test001
+
+Any group of tests (the subsystems lock, log, test, etc.) can be
+run by typing
+
+ r $sub
+
+where sub is the name of the subsystem.
+
+For any of the following methods
+
+run_method
+run_secmethod
+run_secenv
+run_reptest
+run_repmethod
+run_envmethod
+run_recd
+
+you can type
+
+run (suffix method start stop).
+
+For example, to run test010 through test020 in btree using
+run_method:
+
+ run method btree 10 20
+
+Or the same tests in repmethod:
+
+ run repmethod btree 10 20
+
+Notice the missing underbar.
+
+If you omit the start and stop numbers, you'll get all the tests:
+
+ run method btree
+
+run_recd is a special case, in that it runs the recdxxx tests;
+all the others run the testxxx tests.
+
+To run the standard test suite, type run_std at the tclsh prompt.
+To run all the tests, type run_all.
+
+If you are running run_std or run_all, you may use the run_parallel
+interface to speed things up or to test under conditions of high
+system load. Run_parallel creates a list of all tests in the run,
+reorders the tests randomly, then runs the tests in a number of
+parallel processes. To run run_std in five processes type
+
+ run_parallel 5 run_std
diff --git a/db/test/TESTS b/db/test/TESTS
index a585bdddc..3a0cac999 100644
--- a/db/test/TESTS
+++ b/db/test/TESTS
@@ -1,448 +1,1641 @@
-# $Id: TESTS,v 11.34 2000/11/06 19:31:56 sue Exp $
+# Automatically built by dist/s_test; may require local editing.
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+bigfile001
+ Create a database greater than 4 GB in size. Close, verify.
+ Grow the database somewhat. Close, reverify. Lather, rinse,
+ repeat. Since it will not work on all systems, this test is
+ not run by default.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+bigfile002
+ This one should be faster and not require so much disk space,
+ although it doesn't test as extensively. Create an mpool file
+ with 1K pages. Dirty page 6000000. Sync.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dbm
+ Historic DBM interface test. Use the first 1000 entries from the
+ dictionary. Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Then reopen the file, re-retrieve everything. Finally, delete
+ everything.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dead001
+ Use two different configurations to test deadlock detection among a
+ variable number of processes. One configuration has the processes
+ deadlocked in a ring. The other has the processes all deadlocked on
+ a single resource.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dead002
+ Same test as dead001, but use "detect on every collision" instead
+ of separate deadlock detector.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dead003
+
+ Same test as dead002, but explicitly specify DB_LOCK_OLDEST and
+ DB_LOCK_YOUNGEST. Verify the correct lock was aborted/granted.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dead006
+ use timeouts rather than the normal dd algorithm.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+dead007
+ Tests for locker and txn id wraparound.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env001
+ Test of env remove interface (formerly env_remove).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env002
+ Test of DB_LOG_DIR and env name resolution.
+ With an environment path specified using -home, and then again
+ with it specified by the environment variable DB_HOME:
+ 1) Make sure that the set_lg_dir option is respected
+ a) as a relative pathname.
+ b) as an absolute pathname.
+ 2) Make sure that the DB_LOG_DIR db_config argument is respected,
+ again as relative and absolute pathnames.
+ 3) Make sure that if -both- db_config and a file are present,
+ only the file is respected (see doc/env/naming.html).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env003
+ Test DB_TMP_DIR and env name resolution
+ With an environment path specified using -home, and then again
+ with it specified by the environment variable DB_HOME:
+ 1) Make sure that the DB_TMP_DIR config file option is respected
+ a) as a relative pathname.
+ b) as an absolute pathname.
+ 2) Make sure that the -tmp_dir config option is respected,
+ again as relative and absolute pathnames.
+ 3) Make sure that if -both- -tmp_dir and a file are present,
+ only the file is respected (see doc/env/naming.html).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env004
+ Test multiple data directories. Do a bunch of different opens
+ to make sure that the files are detected in different directories.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env005
+ Test that using subsystems without initializing them correctly
+ returns an error. Cannot test mpool, because it is assumed in
+ the Tcl code.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env006
+ Make sure that all the utilities exist and run.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env007
+ Test DB_CONFIG config file options for berkdb env.
+ 1) Make sure command line option is respected
+ 2) Make sure that config file option is respected
+ 3) Make sure that if -both- DB_CONFIG and the set_<whatever>
+ method is used, only the file is respected.
+ Then test all known config options.
+ Also test config options on berkdb open. This isn't
+ really env testing, but there's no better place to put it.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env008
+ Test environments and subdirectories.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env009
+ Test calls to all the various stat functions. We have several
+ sprinkled throughout the test suite, but this will ensure that
+ we run all of them at least once.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env010
+ Run recovery in an empty directory, and then make sure we can still
+ create a database in that directory.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+env011
+ Run with region overwrite flag.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop001.tcl
+ Test file system operations, combined in a transaction. [#7363]
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop002.tcl
+ Test file system operations in the presence of bad permissions.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop003
+
+ Test behavior of create and truncate for compatibility
+ with sendmail.
+ 1. DB_TRUNCATE is not allowed with locking or transactions.
+ 2. Can -create into zero-length existing file.
+ 3. Can -create into non-zero-length existing file if and
+ only if DB_TRUNCATE is specified.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop004
+ Test of DB->rename().
+ (formerly test075)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop005
+ Test of DB->remove()
+ Formerly test080.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+fop006.tcl
+ Test file system operations in multiple simultaneous
+ transactions. Start one transaction, do a file operation.
+ Start a second transaction, do a file operation. Abort
+ or commit txn1, then abort or commit txn2, and check for
+ appropriate outcome.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+jointest
+ Test duplicate assisted joins. Executes 1, 2, 3 and 4-way joins
+ with differing index orders and selectivity.
+
+ We'll test 2-way, 3-way, and 4-way joins and figure that if those
+ work, everything else does as well. We'll create test databases
+ called join1.db, join2.db, join3.db, and join4.db. The number on
+ the database describes the duplication -- duplicates are of the
+ form 0, N, 2N, 3N, ... where N is the number of the database.
+ Primary.db is the primary database, and null.db is the database
+ that has no matching duplicates.
+
+ We should test this on all btrees, all hash, and a combination thereof
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock001
+ Make sure that the basic lock tests work. Do some simple gets
+ and puts for a single locker.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock002
+ Exercise basic multi-process aspects of lock.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock003
+ Exercise multi-process aspects of lock. Generate a bunch of parallel
+ testers that try to randomly obtain locks; make sure that the locks
+ correctly protect corresponding objects.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock004
+ Test locker ids wraping around.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock005
+ Check that page locks are being released properly.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+lock006
+ Test lock_vec interface. We do all the same things that
+ lock001 does, using lock_vec instead of lock_get and lock_put,
+ plus a few more things like lock-coupling.
+ 1. Get and release one at a time.
+ 2. Release with put_obj (all locks for a given locker/obj).
+ 3. Release with put_all (all locks for a given locker).
+ Regularly check lock_stat to verify all locks have been
+ released.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log001
+ Read/write log records.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log002
+ Tests multiple logs
+ Log truncation
+ LSN comparison and file functionality.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log003
+ Verify that log_flush is flushing records correctly.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log004
+ Make sure that if we do PREVs on a log, but the beginning of the
+ log has been truncated, we do the right thing.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log005
+ Check that log file sizes can change on the fly.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+log006
+ Test log file auto-remove.
+ Test normal operation.
+ Test a long-lived txn.
+ Test log_archive flags.
+ Test db_archive flags.
+ Test turning on later.
+ Test setting via DB_CONFIG.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+memp001
+ Randomly updates pages.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+memp002
+ Tests multiple processes accessing and modifying the same files.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+memp003
+ Test reader-only/writer process combinations; we use the access methods
+ for testing.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+memp004
+ Test that small read-only databases are mapped into memory.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+mutex001
+ Test basic mutex functionality
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+mutex002
+ Test basic mutex synchronization
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+mutex003
+ Generate a bunch of parallel testers that try to randomly obtain locks.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd001
+ Per-operation recovery tests for non-duplicate, non-split
+ messages. Makes sure that we exercise redo, undo, and do-nothing
+ condition. Any test that appears with the message (change state)
+ indicates that we've already run the particular test, but we are
+ running it again so that we can change the state of the data base
+ to prepare for the next test (this applies to all other recovery
+ tests as well).
+
+ These are the most basic recovery tests. We do individual recovery
+ tests for each operation in the access method interface. First we
+ create a file and capture the state of the database (i.e., we copy
+ it. Then we run a transaction containing a single operation. In
+ one test, we abort the transaction and compare the outcome to the
+ original copy of the file. In the second test, we restore the
+ original copy of the database and then run recovery and compare
+ this against the actual database.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd002
+ Split recovery tests. For every known split log message, makes sure
+ that we exercise redo, undo, and do-nothing condition.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd003
+ Duplicate recovery tests. For every known duplicate log message,
+ makes sure that we exercise redo, undo, and do-nothing condition.
+
+ Test all the duplicate log messages and recovery operations. We make
+ sure that we exercise all possible recovery actions: redo, undo, undo
+ but no fix necessary and redo but no fix necessary.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd004
+ Big key test where big key gets elevated to internal page.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd005
+ Verify reuse of file ids works on catastrophic recovery.
+
+ Make sure that we can do catastrophic recovery even if we open
+ files using the same log file id.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd006
+ Nested transactions.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd007
+ File create/delete tests.
+
+ This is a recovery test for create/delete of databases. We have
+ hooks in the database so that we can abort the process at various
+ points and make sure that the transaction doesn't commit. We
+ then need to recover and make sure the file is correctly existing
+ or not, as the case may be.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd008
+ Test deeply nested transactions and many-child transactions.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd009
+ Verify record numbering across split/reverse splits and recovery.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd010
+ Test stability of btree duplicates across btree off-page dup splits
+ and reverse splits and across recovery.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd011
+ Verify that recovery to a specific timestamp works.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd012
+ Test of log file ID management. [#2288]
+ Test recovery handling of file opens and closes.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd013
+ Test of cursor adjustment on child transaction aborts. [#2373]
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd014
+ This is a recovery test for create/delete of queue extents. We
+ then need to recover and make sure the file is correctly existing
+ or not, as the case may be.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd015
+ This is a recovery test for testing lots of prepared txns.
+ This test is to force the use of txn_recover to call with the
+ DB_FIRST flag and then DB_NEXT.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd016
+ Test recovery after checksum error.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd017
+ Test recovery and security. This is basically a watered
+ down version of recd001 just to verify that encrypted environments
+ can be recovered.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd018
+ Test recover of closely interspersed checkpoints and commits.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+recd019
+ Test txn id wrap-around and recovery.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep001
+ Replication rename and forced-upgrade test.
+
+ Run a modified version of test001 in a replicated master
+ environment; verify that the database on the client is correct.
+ Next, remove the database, close the master, upgrade the
+ client, reopen the master, and make sure the new master can
+ correctly run test001 and propagate it in the other direction.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep002
+ Basic replication election test.
+
+ Run a modified version of test001 in a replicated master environment;
+ hold an election among a group of clients to make sure they select
+ a proper master from amongst themselves, in various scenarios.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep003
+ Repeated shutdown/restart replication test
+
+ Run a quick put test in a replicated master environment; start up,
+ shut down, and restart client processes, with and without recovery.
+ To ensure that environment state is transient, use DB_PRIVATE.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep004
+ Test of DB_REP_LOGSONLY.
+
+ Run a quick put test in a master environment that has one logs-only
+ client. Shut down, then run catastrophic recovery in the logs-only
+ client and check that the database is present and populated.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep005
+ Replication election test with error handling.
+
+ Run a modified version of test001 in a replicated master environment;
+ hold an election among a group of clients to make sure they select
+ a proper master from amongst themselves, forcing errors at various
+ locations in the election path.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep006
+ Replication and non-rep env handles.
+
+ Run a modified version of test001 in a replicated master environment;
+ verify that the database on the client is correct.
+ Next, create a non-rep env handle to the master env.
+ Attempt to open the database r/w to force error.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep007
+ Replication and bad LSNs
+
+ Run a modified version of test001 in a replicated master env.
+ Close the client. Make additional changes to master.
+ Close the master. Open the client as the new master.
+ Make several different changes. Open the old master as
+ the client. Verify periodically that contents are correct.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep008
+ Replication, back up and synchronizing
+
+ Run a modified version of test001 in a replicated master environment;
+ Close master and client.
+ Copy the master log to the client.
+ Clean the master.
+ Reopen the master and client.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep009
+ Replication and DUPMASTERs
+ Run test001 in a replicated environment.
+
+ Declare one of the clients to also be a master.
+ Close a client, clean it and then declare it a 2nd master.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep010
+ Replication and ISPERM
+
+ With consecutive message processing, make sure every
+ DB_REP_PERMANENT is responded to with an ISPERM when
+ processed. With gaps in the processing, make sure
+ every DB_REP_PERMANENT is responded to with an ISPERM
+ or a NOTPERM. Verify in both cases that the LSN returned
+ with ISPERM is found in the log.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep011
+ Replication: test open handle across an upgrade.
+
+ Open and close test database in master environment.
+ Update the client. Check client, and leave the handle
+ to the client open as we close the masterenv and upgrade
+ the client to master. Reopen the old master as client
+ and catch up. Test that we can still do a put to the
+ handle we created on the master while it was still a
+ client, and then make sure that the change can be
+ propagated back to the new client.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep012
+ Replication and dead DB handles.
+
+ Run a modified version of test001 in a replicated master env.
+ Make additional changes to master, but not to the client.
+ Downgrade the master and upgrade the client with open db handles.
+ Verify that the roll back on clients gives dead db handles.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rep013
+ Replication and swapping master/clients with open dbs.
+
+ Run a modified version of test001 in a replicated master env.
+ Make additional changes to master, but not to the client.
+ Swap master and client.
+ Verify that the roll back on clients gives dead db handles.
+ Swap and verify several times.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rpc001
+ Test RPC server timeouts for cursor, txn and env handles.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rpc002
+ Test invalid RPC functions and make sure we error them correctly
+ Test server home directory error cases
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Access method tests
+rpc003
+ Test RPC and secondary indices.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rpc004
+ Test RPC server and security
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-test001 Small keys/data
- Put/get per key
- Dump file
- Close, reopen
- Dump file
+rpc005
+ Test RPC server handle ID sharing
-test002 Small keys/medium data
- Put/get per key
- Dump file
- Close, reopen
- Dump file
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rsrc001
+ Recno backing file test. Try different patterns of adding
+ records and making sure that the corresponding file matches.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rsrc002
+ Recno backing file test #2: test of set_re_delim. Specify a backing
+ file with colon-delimited records, and make sure they are correctly
+ interpreted.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rsrc003
+ Recno backing file test. Try different patterns of adding
+ records and making sure that the corresponding file matches.
-test003 Small keys/large data
- Put/get per key
- Dump file
- Close, reopen
- Dump file
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+rsrc004
+ Recno backing file test for EOF-terminated records.
-test004 Small keys/medium data
- Put/get per key
- Sequential (cursor) get/delete
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+scr###
+ The scr### directories are shell scripts that test a variety of
+ things, including things about the distribution itself. These
+ tests won't run on most systems, so don't even try to run them.
-test005 Small keys/medium data
- Put/get per key
- Close, reopen
- Sequential (cursor) get/delete
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb001 Tests mixing db and subdb operations
+ Tests mixing db and subdb operations
+ Create a db, add data, try to create a subdb.
+ Test naming db and subdb with a leading - for correct parsing
+ Existence check -- test use of -excl with subdbs
-test006 Small keys/medium data
- Put/get per key
- Keyed delete and verify
+ Test non-subdb and subdb operations
+ Test naming (filenames begin with -)
+ Test existence (cannot create subdb of same name with -excl)
-test007 Small keys/medium data
- Put/get per key
- Close, reopen
- Keyed delete
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb002
+ Tests basic subdb functionality
+ Small keys, small data
+ Put/get per key
+ Dump file
+ Close, reopen
+ Dump file
+
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
+ Then repeat using an environment.
-test008 Small keys/large data
- Put/get per key
- Loop through keys by steps (which change)
- ... delete each key at step
- ... add each key back
- ... change step
- Confirm that overflow pages are getting reused
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb003
+ Tests many subdbs
+ Creates many subdbs and puts a small amount of
+ data in each (many defaults to 1000)
-test009 Small keys/large data
- Same as test008; close and reopen database
+ Use the first 1000 entries from the dictionary as subdbnames.
+ Insert each with entry as name of subdatabase and a partial list
+ as key/data. After all are entered, retrieve all; compare output
+ to original. Close file, reopen, do retrieve and re-verify.
-test010 Duplicate test
- Small key/data pairs.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb004
+ Tests large subdb names
+ subdb name = filecontents,
+ key = filename, data = filecontents
+ Put/get per key
+ Dump file
+ Dump subdbs, verify data and subdb name match
+
+ Create 1 db with many large subdbs. Use the contents as subdb names.
+ Take the source files and dbtest executable and enter their names as
+ the key with their contents as data. After all are entered, retrieve
+ all; compare output to original. Close file, reopen, do retrieve and
+ re-verify.
-test011 Duplicate test
- Small key/data pairs.
- Test DB_KEYFIRST, DB_KEYLAST, DB_BEFORE and DB_AFTER.
- To test off-page duplicates, run with small pagesize.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb005
+ Tests cursor operations in subdbs
+ Put/get per key
+ Verify cursor operations work within subdb
+ Verify cursor operations do not work across subdbs
-test012 Large keys/small data
- Same as test003 except use big keys (source files and
- executables) and small data (the file/executable names).
-test013 Partial put test
- Overwrite entire records using partial puts. Make sure
- that NOOVERWRITE flag works.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb006
+ Tests intra-subdb join
-test014 Exercise partial puts on short data
- Run 5 combinations of numbers of characters to replace,
- and number of times to increase the size by.
+ We'll test 2-way, 3-way, and 4-way joins and figure that if those work,
+ everything else does as well. We'll create test databases called
+ sub1.db, sub2.db, sub3.db, and sub4.db. The number on the database
+ describes the duplication -- duplicates are of the form 0, N, 2N, 3N,
+ ... where N is the number of the database. Primary.db is the primary
+ database, and sub0.db is the database that has no matching duplicates.
+ All of these are within a single database.
-test015 Partial put test
- Partial put test where the key does not initially exist.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb007
+ Tests page size difference errors between subdbs.
+ Test 3 different scenarios for page sizes.
+ 1. Create/open with a default page size, 2nd subdb create with
+ specified different one, should error.
+ 2. Create/open with specific page size, 2nd subdb create with
+ different one, should error.
+ 3. Create/open with specified page size, 2nd subdb create with
+ same specified size, should succeed.
+ (4th combo of using all defaults is a basic test, done elsewhere)
-test016 Partial put test
- Partial put where the datum gets shorter as a result of
- the put.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb008
+ Tests explicit setting of lorders for subdatabases -- the
+ lorder should be ignored.
-test017 Basic offpage duplicate test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb009
+ Test DB->rename() method for subdbs
-test018 Offpage duplicate test
- Key_{first,last,before,after} offpage duplicates.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb010
+ Test DB->remove() method and DB->truncate() for subdbs
-test019 Partial get test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb011
+ Test deleting Subdbs with overflow pages
+ Create 1 db with many large subdbs.
+ Test subdatabases with overflow pages.
-test020 In-Memory database tests.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdb012
+ Test subdbs with locking and transactions
+ Tests creating and removing subdbs while handles
+ are open works correctly, and in the face of txns.
-test021 Btree range tests.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdbtest001
+ Tests multiple access methods in one subdb
+ Open several subdbs, each with a different access method
+ Small keys, small data
+ Put/get per key per subdb
+ Dump file, verify per subdb
+ Close, reopen per subdb
+ Dump file, verify per subdb
+
+ Make several subdb's of different access methods all in one DB.
+ Rotate methods and repeat [#762].
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
-test022 Test of DB->getbyteswapped().
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sdbtest002
+ Tests multiple access methods in one subdb access by multiple
+ processes.
+ Open several subdbs, each with a different access method
+ Small keys, small data
+ Put/get per key per subdb
+ Fork off several child procs to each delete selected
+ data from their subdb and then exit
+ Dump file, verify contents of each subdb is correct
+ Close, reopen per subdb
+ Dump file, verify per subdb
+
+ Make several subdb's of different access methods all in one DB.
+ Fork of some child procs to each manipulate one subdb and when
+ they are finished, verify the contents of the databases.
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
-test023 Duplicate test
- Exercise deletes and cursor operations within a
- duplicate set.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sec001
+ Test of security interface
-test024 Record number retrieval test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sec002
+ Test of security interface and catching errors in the
+ face of attackers overwriting parts of existing files.
-test025 DB_APPEND flag test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si001
+ Basic secondary index put/delete test
-test026 Small keys/medium data w/duplicates
- Put/get per key.
- Loop through keys -- delete each key
- ... test that cursors delete duplicates correctly
+ Put data in primary db and check that pget on secondary
+ index finds the right entries. Alter the primary in the
+ following ways, checking for correct data each time:
+ Overwrite data in primary database.
+ Delete half of entries through primary.
+ Delete half of remaining entries through secondary.
+ Append data (for record-based primaries only).
-test027 Off-page duplicate test
- Test026 with parameters to force off-page duplicates.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si002
+ Basic cursor-based secondary index put/delete test
-test028 Cursor delete test
- Test put operations after deleting through a cursor.
+ Cursor put data in primary db and check that pget
+ on secondary index finds the right entries.
+ Overwrite while walking primary, check pget again.
+ Overwrite while walking secondary (use c_pget), check
+ pget again.
+ Cursor delete half of entries through primary, check.
+ Cursor delete half of remainder through secondary, check.
-test029 Record renumbering
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si003
+ si001 with secondaries created and closed mid-test
+ Basic secondary index put/delete test with secondaries
+ created mid-test.
-test030 DB_NEXT_DUP functionality
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si004
+ si002 with secondaries created and closed mid-test
+ Basic cursor-based secondary index put/delete test, with
+ secondaries created mid-test.
-test031 Duplicate sorting functionality
- Make sure DB_NODUPDATA works.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+si005
+ Basic secondary index put/delete test with transactions
-test032 DB_GET_BOTH
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+sijointest: Secondary index and join test.
+ This used to be si005.tcl.
-test033 DB_GET_BOTH without comparison function
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test001
+ Small keys/data
+ Put/get per key
+ Dump file
+ Close, reopen
+ Dump file
+
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
-test034 Test032 with off-page duplicates
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test002
+ Small keys/medium data
+ Put/get per key
+ Dump file
+ Close, reopen
+ Dump file
+
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and a fixed, medium length data string;
+ retrieve each. After all are entered, retrieve all; compare output
+ to original. Close file, reopen, do retrieve and re-verify.
-test035 Test033 with off-page duplicates
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test003
+ Small keys/large data
+ Put/get per key
+ Dump file
+ Close, reopen
+ Dump file
+
+ Take the source files and dbtest executable and enter their names
+ as the key with their contents as data. After all are entered,
+ retrieve all; compare output to original. Close file, reopen, do
+ retrieve and re-verify.
-test036 Test KEYFIRST and KEYLAST when the key doesn't exist
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test004
+ Small keys/medium data
+ Put/get per key
+ Sequential (cursor) get/delete
-test037 Test DB_RMW
+ Check that cursor operations work. Create a database.
+ Read through the database sequentially using cursors and
+ delete each element.
-test038 DB_GET_BOTH on deleted items
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test005
+ Small keys/medium data
+ Put/get per key
+ Close, reopen
+ Sequential (cursor) get/delete
-test039 DB_GET_BOTH on deleted items without comparison function
+ Check that cursor operations work. Create a database; close
+ it and reopen it. Then read through the database sequentially
+ using cursors and delete each element.
-test040 Test038 with off-page duplicates
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test006
+ Small keys/medium data
+ Put/get per key
+ Keyed delete and verify
-test041 Test039 with off-page duplicates
+ Keyed delete test.
+ Create database.
+ Go through database, deleting all entries by key.
+ Then do the same for unsorted and sorted dups.
-test042 Concurrent Data Store test
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test007
+ Small keys/medium data
+ Put/get per key
+ Close, reopen
+ Keyed delete
-test043 Recno renumbering and implicit creation test
+ Check that delete operations work. Create a database; close
+ database and reopen it. Then issues delete by key for each
+ entry. (Test006 plus reopen)
-test044 Small system integration tests
- Test proper functioning of the checkpoint daemon,
- recovery, transactions, etc.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test008
+ Small keys/large data
+ Put/get per key
+ Loop through keys by steps (which change)
+ ... delete each key at step
+ ... add each key back
+ ... change step
+ Confirm that overflow pages are getting reused
+
+ Take the source files and dbtest executable and enter their names as
+ the key with their contents as data. After all are entered, begin
+ looping through the entries; deleting some pairs and then readding them.
-test045 Small random tester
- Runs a number of random add/delete/retrieve operations.
- Tests both successful conditions and error conditions.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test009
+ Small keys/large data
+ Same as test008; close and reopen database
-test046 Overwrite test of small/big key/data with cursor checks.
+ Check that we reuse overflow pages. Create database with lots of
+ big key/data pairs. Go through and delete and add keys back
+ randomly. Then close the DB and make sure that we have everything
+ we think we should.
-test047 Cursor get test with SET_RANGE option.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test010
+ Duplicate test
+ Small key/data pairs.
-test048 Cursor stability across Btree splits.
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; add duplicate records for each.
+ After all are entered, retrieve all; verify output.
+ Close file, reopen, do retrieve and re-verify.
+ This does not work for recno
-test049 Cursor operations on unitialized cursors.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test011
+ Duplicate test
+ Small key/data pairs.
+ Test DB_KEYFIRST, DB_KEYLAST, DB_BEFORE and DB_AFTER.
+ To test off-page duplicates, run with small pagesize.
-test050 Cursor overwrite test for Recno.
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; add duplicate records for each.
+ Then do some key_first/key_last add_before, add_after operations.
+ This does not work for recno
-test051 Fixed-length record Recno test.
+ To test if dups work when they fall off the main page, run this with
+ a very tiny page size.
-test052 Renumbering record Recno test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test012
+ Large keys/small data
+ Same as test003 except use big keys (source files and
+ executables) and small data (the file/executable names).
-test053 DB_REVSPLITOFF flag test
+ Take the source files and dbtest executable and enter their contents
+ as the key with their names as data. After all are entered, retrieve
+ all; compare output to original. Close file, reopen, do retrieve and
+ re-verify.
-test054 Cursor maintenance during key/data deletion.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test013
+ Partial put test
+ Overwrite entire records using partial puts.
+ Make surethat NOOVERWRITE flag works.
-test054 Basic cursor operations.
+ 1. Insert 10000 keys and retrieve them (equal key/data pairs).
+ 2. Attempt to overwrite keys with NO_OVERWRITE set (expect error).
+ 3. Actually overwrite each one with its datum reversed.
-test055 Cursor maintenance during key deletes.
+ No partial testing here.
-test056 Cursor maintenance during deletes.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test014
+ Exercise partial puts on short data
+ Run 5 combinations of numbers of characters to replace,
+ and number of times to increase the size by.
-test057 Cursor maintenance during key deletes.
+ Partial put test, small data, replacing with same size. The data set
+ consists of the first nentries of the dictionary. We will insert them
+ (and retrieve them) as we do in test 1 (equal key/data pairs). Then
+ we'll try to perform partial puts of some characters at the beginning,
+ some at the end, and some at the middle.
-test058 Verify that deleting and reading duplicates results in
- correct ordering.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test015
+ Partial put test
+ Partial put test where the key does not initially exist.
-test059 Cursor ops work with a partial length of 0.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test016
+ Partial put test
+ Partial put where the datum gets shorter as a result of the put.
-test060 Test of the DB_EXCL flag to DB->open().
+ Partial put test where partial puts make the record smaller.
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and a fixed, medium length data string;
+ retrieve each. After all are entered, go back and do partial puts,
+ replacing a random-length string with the key value.
+ Then verify.
-test061 Test of txn abort and commit for in-memory databases.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test017
+ Basic offpage duplicate test.
-test062 Test of partial puts (using DB_CURRENT) onto duplicate pages.
+ Run duplicates with small page size so that we test off page duplicates.
+ Then after we have an off-page database, test with overflow pages too.
-test063 Test of the DB_RDONLY flag to DB->open
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test018
+ Offpage duplicate test
+ Key_{first,last,before,after} offpage duplicates.
+ Run duplicates with small page size so that we test off page
+ duplicates.
-test064 Test of DB->get_type
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test019
+ Partial get test.
-test065 Test of DB->stat(DB_RECORDCOUNT)
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test020
+ In-Memory database tests.
-test066 Test of cursor overwrites of DB_CURRENT w/ duplicates.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test021
+ Btree range tests.
-test067 Test of DB_CURRENT partial puts onto almost empty duplicate
- pages, with and without DB_DUP_SORT.
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self, reversed as key and self as data.
+ After all are entered, retrieve each using a cursor SET_RANGE, and
+ getting about 20 keys sequentially after it (in some cases we'll
+ run out towards the end of the file).
-test068 Test of DB_BEFORE and DB_AFTER with partial puts.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test022
+ Test of DB->getbyteswapped().
-test069 Test of DB_CURRENT partial puts without duplicates--
- test067 w/ small ndups.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test023
+ Duplicate test
+ Exercise deletes and cursor operations within a duplicate set.
+ Add a key with duplicates (first time on-page, second time off-page)
+ Number the dups.
+ Delete dups and make sure that CURRENT/NEXT/PREV work correctly.
-test070 Test of DB_CONSUME (Four consumers, 1000 items.)
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test024
+ Record number retrieval test.
+ Test the Btree and Record number get-by-number functionality.
-test071 Test of DB_CONSUME (One consumer, 10000 items.)
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test025
+ DB_APPEND flag test.
-test072 Cursor stability test when dups are moved off-page
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test026
+ Small keys/medium data w/duplicates
+ Put/get per key.
+ Loop through keys -- delete each key
+ ... test that cursors delete duplicates correctly
-test073 Test of cursor stability on duplicate pages.
+ Keyed delete test through cursor. If ndups is small; this will
+ test on-page dups; if it's large, it will test off-page dups.
-test074 Test of DB_NEXT_NODUP.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test027
+ Off-page duplicate test
+ Test026 with parameters to force off-page duplicates.
-test075 Test of DB->rename().
- (formerly test of DB_TRUNCATE cached page invalidation [#1487])
+ Check that delete operations work. Create a database; close
+ database and reopen it. Then issues delete by key for each
+ entry.
-test076 Test creation of many small databases in a single environment.
- [#1528].
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test028
+ Cursor delete test
+ Test put operations after deleting through a cursor.
-test077 Test of DB_GET_RECNO [#1206].
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test029
+ Test the Btree and Record number renumbering.
-test078 Test of DBC->c_count().
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test030
+ Test DB_NEXT_DUP Functionality.
-test079 Test of deletes in large trees. (test006 w/ sm. pagesize).
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test031
+ Duplicate sorting functionality
+ Make sure DB_NODUPDATA works.
+
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and "ndups" duplicates
+ For the data field, prepend random five-char strings (see test032)
+ that we force the duplicate sorting code to do something.
+ Along the way, test that we cannot insert duplicate duplicates
+ using DB_NODUPDATA.
+
+ By setting ndups large, we can make this an off-page test
+ After all are entered, retrieve all; verify output.
+ Close file, reopen, do retrieve and re-verify.
+ This does not work for recno
-test080 Test of DB->remove()
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test032
+ DB_GET_BOTH, DB_GET_BOTH_RANGE
-test081 Test off-page duplicates and overflow pages together with
- very large keys (key/data as file contents).
+ Use the first 10,000 entries from the dictionary. Insert each with
+ self as key and "ndups" duplicates. For the data field, prepend the
+ letters of the alphabet in a random order so we force the duplicate
+ sorting code to do something. By setting ndups large, we can make
+ this an off-page test.
-test082 Test of DB_PREV_NODUP (uses test074).
+ Test the DB_GET_BOTH functionality by retrieving each dup in the file
+ explicitly. Test the DB_GET_BOTH_RANGE functionality by retrieving
+ the unique key prefix (cursor only). Finally test the failure case.
-test083 Test of DB->key_range.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test033
+ DB_GET_BOTH without comparison function
-test084 Sanity test of large (64K) pages.
+ Use the first 10,000 entries from the dictionary. Insert each with
+ self as key and data; add duplicate records for each. After all are
+ entered, retrieve all and verify output using DB_GET_BOTH (on DB and
+ DBC handles) and DB_GET_BOTH_RANGE (on a DBC handle) on existent and
+ nonexistent keys.
-test085 Test of cursor behavior when a cursor is pointing to a deleted
- btree key which then has duplicates added. [#2473]
+ XXX
+ This does not work for rbtree.
-test086 Test of cursor stability across btree splits/rsplits with
- subtransaction aborts (a variant of test048). [#2373]
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test034
+ test032 with off-page duplicates
+ DB_GET_BOTH, DB_GET_BOTH_RANGE functionality with off-page duplicates.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test035
+ Test033 with off-page duplicates
+ DB_GET_BOTH functionality with off-page duplicates.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Cursor Join.
+test036
+ Test KEYFIRST and KEYLAST when the key doesn't exist
+ Put nentries key/data pairs (from the dictionary) using a cursor
+ and KEYFIRST and KEYLAST (this tests the case where use use cursor
+ put for non-existent keys).
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-jointest Test duplicate assisted joins.
- Executes 1, 2, 3 and 4-way joins with differing
- index orders and selectivity.
+test037
+ Test DB_RMW
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Deadlock detection.
+test038
+ DB_GET_BOTH, DB_GET_BOTH_RANGE on deleted items
+
+ Use the first 10,000 entries from the dictionary. Insert each with
+ self as key and "ndups" duplicates. For the data field, prepend the
+ letters of the alphabet in a random order so we force the duplicate
+ sorting code to do something. By setting ndups large, we can make
+ this an off-page test
+
+ Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving
+ each dup in the file explicitly. Then remove each duplicate and try
+ the retrieval again.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-dead001 Use two different configurations to test deadlock
- detection among a variable number of processes. One
- configuration has the processes deadlocked in a ring.
- The other has the processes all deadlocked on a single
- resource.
+test039
+ DB_GET_BOTH/DB_GET_BOTH_RANGE on deleted items without comparison
+ function.
-dead002 Same test as dead001, but use "detect on every collision"
- instead of separate deadlock detector.
+ Use the first 10,000 entries from the dictionary. Insert each with
+ self as key and "ndups" duplicates. For the data field, prepend the
+ letters of the alphabet in a random order so we force the duplicate
+ sorting code to do something. By setting ndups large, we can make
+ this an off-page test.
-dead003 Same test as dead002, but explicitly specify oldest or
- youngest. Verify the correct lock was aborted/granted.
+ Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving
+ each dup in the file explicitly. Then remove each duplicate and try
+ the retrieval again.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Lock tests
+test040
+ Test038 with off-page duplicates
+ DB_GET_BOTH functionality with off-page duplicates.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test041
+ Test039 with off-page duplicates
+ DB_GET_BOTH functionality with off-page duplicates.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-lock001 Basic lock test, gets/puts. Contention without waiting.
+test042
+ Concurrent Data Store test (CDB)
-lock002 Multi-process lock tests.
+ Multiprocess DB test; verify that locking is working for the
+ concurrent access method product.
-lock003 Multiprocess random lock test.
+ Use the first "nentries" words from the dictionary. Insert each with
+ self as key and a fixed, medium length data string. Then fire off
+ multiple processes that bang on the database. Each one should try to
+ read and write random keys. When they rewrite, they'll append their
+ pid to the data string (sometimes doing a rewrite sometimes doing a
+ partial put). Some will use cursors to traverse through a few keys
+ before finding one to write.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Logging test
+test043
+ Recno renumbering and implicit creation test
+ Test the Record number implicit creation and renumbering options.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-log001 Read/write log records.
+test044
+ Small system integration tests
+ Test proper functioning of the checkpoint daemon,
+ recovery, transactions, etc.
+
+ System integration DB test: verify that locking, recovery, checkpoint,
+ and all the other utilities basically work.
+
+ The test consists of $nprocs processes operating on $nfiles files. A
+ transaction consists of adding the same key/data pair to some random
+ number of these files. We generate a bimodal distribution in key size
+ with 70% of the keys being small (1-10 characters) and the remaining
+ 30% of the keys being large (uniform distribution about mean $key_avg).
+ If we generate a key, we first check to make sure that the key is not
+ already in the dataset. If it is, we do a lookup.
-log002 Tests multiple logs
- Log truncation
- lsn comparison and file functionality.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test045
+ Small random tester
+ Runs a number of random add/delete/retrieve operations.
+ Tests both successful conditions and error conditions.
-log003 Verify that log_flush is flushing records correctly.
+ Run the random db tester on the specified access method.
-log004 Prev on log when beginning of log has been truncated.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test046
+ Overwrite test of small/big key/data with cursor checks.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Mpool test
+test047
+ DBcursor->c_get get test with SET_RANGE option.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-memp001 Randomly updates pages.
+test048
+ Cursor stability across Btree splits.
-memp002 Tests multiple processes accessing and modifying the same
- files.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test049
+ Cursor operations on uninitialized cursors.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Recovery
+test050
+ Overwrite test of small/big key/data with cursor checks for Recno.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-recd001 Per-operation recovery tests for non-duplicate, non-split
- messages. Makes sure that we exercise redo, undo, and
- do-nothing condition. Any test that appears with the
- message (change state) indicates that we've already run
- the particular test, but we are running it again so that
- we can change the state of the data base to prepare for
- the next test (this applies to all other recovery tests
- as well).
+test051
+ Fixed-length record Recno test.
+ 0. Test various flags (legal and illegal) to open
+ 1. Test partial puts where dlen != size (should fail)
+ 2. Partial puts for existent record -- replaces at beg, mid, and
+ end of record, as well as full replace
-recd002 Split recovery tests. For every known split log message,
- makes sure that we exercise redo, undo, and do-nothing
- condition.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test052
+ Renumbering record Recno test.
-recd003 Duplicate recovery tests. For every known duplicate log
- message, makes sure that we exercise redo, undo, and
- do-nothing condition.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test053
+ Test of the DB_REVSPLITOFF flag in the Btree and Btree-w-recnum
+ methods.
-recd004 Big key test where big key gets elevated to internal page.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test054
+ Cursor maintenance during key/data deletion.
+
+ This test checks for cursor maintenance in the presence of deletes.
+ There are N different scenarios to tests:
+ 1. No duplicates. Cursor A deletes a key, do a GET for the key.
+ 2. No duplicates. Cursor is positioned right before key K, Delete K,
+ do a next on the cursor.
+ 3. No duplicates. Cursor is positioned on key K, do a regular delete
+ of K, do a current get on K.
+ 4. Repeat 3 but do a next instead of current.
+ 5. Duplicates. Cursor A is on the first item of a duplicate set, A
+ does a delete. Then we do a non-cursor get.
+ 6. Duplicates. Cursor A is in a duplicate set and deletes the item.
+ do a delete of the entire Key. Test cursor current.
+ 7. Continue last test and try cursor next.
+ 8. Duplicates. Cursor A is in a duplicate set and deletes the item.
+ Cursor B is in the same duplicate set and deletes a different item.
+ Verify that the cursor is in the right place.
+ 9. Cursors A and B are in the place in the same duplicate set. A
+ deletes its item. Do current on B.
+ 10. Continue 8 and do a next on B.
-recd005 Verify reuse of file ids works on catastrophic recovery.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test055
+ Basic cursor operations.
+ This test checks basic cursor operations.
+ There are N different scenarios to tests:
+ 1. (no dups) Set cursor, retrieve current.
+ 2. (no dups) Set cursor, retrieve next.
+ 3. (no dups) Set cursor, retrieve prev.
-recd006 Nested transactions.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test056
+ Cursor maintenance during deletes.
+ Check if deleting a key when a cursor is on a duplicate of that
+ key works.
-recd007 File create/delete tests.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test057
+ Cursor maintenance during key deletes.
+ Check if we handle the case where we delete a key with the cursor on
+ it and then add the same key. The cursor should not get the new item
+ returned, but the item shouldn't disappear.
+ Run test tests, one where the overwriting put is done with a put and
+ one where it's done with a cursor put.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test058
+ Verify that deleting and reading duplicates results in correct ordering.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test059
+ Cursor ops work with a partial length of 0.
+ Make sure that we handle retrieves of zero-length data items correctly.
+ The following ops, should allow a partial data retrieve of 0-length.
+ db_get
+ db_cget FIRST, NEXT, LAST, PREV, CURRENT, SET, SET_RANGE
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test060
+ Test of the DB_EXCL flag to DB->open().
+ 1) Attempt to open and create a nonexistent database; verify success.
+ 2) Attempt to reopen it; verify failure.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test061
+ Test of txn abort and commit for in-memory databases.
+ a) Put + abort: verify absence of data
+ b) Put + commit: verify presence of data
+ c) Overwrite + abort: verify that data is unchanged
+ d) Overwrite + commit: verify that data has changed
+ e) Delete + abort: verify that data is still present
+ f) Delete + commit: verify that data has been deleted
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test062
+ Test of partial puts (using DB_CURRENT) onto duplicate pages.
+ Insert the first 200 words into the dictionary 200 times each with
+ self as key and <random letter>:self as data. Use partial puts to
+ append self again to data; verify correctness.
-recd008 Test deeply nested transactions.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test063
+ Test of the DB_RDONLY flag to DB->open
+ Attempt to both DB->put and DBC->c_put into a database
+ that has been opened DB_RDONLY, and check for failure.
-recd009 Verify record numbering across split/reverse splits
- and recovery.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test064
+ Test of DB->get_type
+ Create a database of type specified by method.
+ Make sure DB->get_type returns the right thing with both a normal
+ and DB_UNKNOWN open.
-recd010 Verify duplicates across split/reverse splits
- and recovery.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test065
+ Test of DB->stat(DB_FASTSTAT)
-recd011 Verify that recovery to a specific timestamp works.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test066
+ Test of cursor overwrites of DB_CURRENT w/ duplicates.
-recd012 Test of log file ID management. [#2288]
+ Make sure a cursor put to DB_CURRENT acts as an overwrite in a
+ database with duplicates.
-recd013 Test of cursor adjustment on child transaction aborts. [#2373]
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test067
+ Test of DB_CURRENT partial puts onto almost empty duplicate
+ pages, with and without DB_DUP_SORT.
+
+ Test of DB_CURRENT partial puts on almost-empty duplicate pages.
+ This test was written to address the following issue, #2 in the
+ list of issues relating to bug #0820:
+
+ 2. DBcursor->put, DB_CURRENT flag, off-page duplicates, hash and btree:
+ In Btree, the DB_CURRENT overwrite of off-page duplicate records
+ first deletes the record and then puts the new one -- this could
+ be a problem if the removal of the record causes a reverse split.
+ Suggested solution is to acquire a cursor to lock down the current
+ record, put a new record after that record, and then delete using
+ the held cursor.
+
+ It also tests the following, #5 in the same list of issues:
+ 5. DBcursor->put, DB_AFTER/DB_BEFORE/DB_CURRENT flags, DB_DBT_PARTIAL
+ set, duplicate comparison routine specified.
+ The partial change does not change how data items sort, but the
+ record to be put isn't built yet, and that record supplied is the
+ one that's checked for ordering compatibility.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Subdatabase tests
+test068
+ Test of DB_BEFORE and DB_AFTER with partial puts.
+ Make sure DB_BEFORE and DB_AFTER work properly with partial puts, and
+ check that they return EINVAL if DB_DUPSORT is set or if DB_DUP is not.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test069
+ Test of DB_CURRENT partial puts without duplicates-- test067 w/
+ small ndups to ensure that partial puts to DB_CURRENT work
+ correctly in the absence of duplicate pages.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test070
+ Test of DB_CONSUME (Four consumers, 1000 items.)
+
+ Fork off six processes, four consumers and two producers.
+ The producers will each put 20000 records into a queue;
+ the consumers will each get 10000.
+ Then, verify that no record was lost or retrieved twice.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-subdb001 Tests mixing db and subdb operations
- Create a db, add data, try to create a subdb.
- Test naming db and subdb with a leading - for
- correct parsing
- Existence check -- test use of -excl with subdbs
+test071
+ Test of DB_CONSUME (One consumer, 10000 items.)
+ This is DB Test 70, with one consumer, one producers, and 10000 items.
-subdb002 Tests basic subdb functionality
- Small keys, small data
- Put/get per key
- Dump file
- Close, reopen
- Dump file
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test072
+ Test of cursor stability when duplicates are moved off-page.
-subdb003 Tests many subdbs
- Creates many subdbs and puts a small amount of
- data in each (many defaults to 2000)
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test073
+ Test of cursor stability on duplicate pages.
+
+ Does the following:
+ a. Initialize things by DB->putting ndups dups and
+ setting a reference cursor to point to each.
+ b. c_put ndups dups (and correspondingly expanding
+ the set of reference cursors) after the last one, making sure
+ after each step that all the reference cursors still point to
+ the right item.
+ c. Ditto, but before the first one.
+ d. Ditto, but after each one in sequence first to last.
+ e. Ditto, but after each one in sequence from last to first.
+ occur relative to the new datum)
+ f. Ditto for the two sequence tests, only doing a
+ DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
+ new one.
-subdb004 Tests large subdb names
- subdb name = filecontents,
- key = filename, data = filecontents
- Put/get per key
- Dump file
- Dump subdbs, verify data and subdb name match
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test074
+ Test of DB_NEXT_NODUP.
-subdb005 Tests cursor operations in subdbs
- Put/get per key
- Verify cursor operations work within subdb
- Verify cursor operations do not work across subdbs
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test075
+ Test of DB->rename().
+ (formerly test of DB_TRUNCATE cached page invalidation [#1487])
-subdb006 Tests intra-subdb join
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test076
+ Test creation of many small databases in a single environment. [#1528].
-subdb007 Tests page size differences between subdbs
- Open several subdbs, each with a different pagesize
- Small keys, small data
- Put/get per key per subdb
- Dump file, verify per subdb
- Close, reopen per subdb
- Dump file, verify per subdb
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test077
+ Test of DB_GET_RECNO [#1206].
-subdb008 Tests lorder differences between subdbs
- Open several subdbs, each with a different/random lorder
- Small keys, small data
- Put/get per key per subdb
- Dump file, verify per subdb
- Close, reopen per subdb
- Dump file, verify per subdb
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test078
+ Test of DBC->c_count(). [#303]
-subdb009 Test DB->rename() method for subdbs
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test079
+ Test of deletes in large trees. (test006 w/ sm. pagesize).
-subdb010 Test DB->remove() method for subdbs
+ Check that delete operations work in large btrees. 10000 entries
+ and a pagesize of 512 push this out to a four-level btree, with a
+ small fraction of the entries going on overflow pages.
-subdbtest001 Tests multiple access methods in one subdb
- Open several subdbs, each with a different access method
- Small keys, small data
- Put/get per key per subdb
- Dump file, verify per subdb
- Close, reopen per subdb
- Dump file, verify per subdb
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test080
+ Test of DB->remove()
-subdbtest002 Tests multiple access methods in one subdb access by
- multiple processes
- Open several subdbs, each with a different access method
- Small keys, small data
- Put/get per key per subdb
- Fork off several child procs to each delete selected
- data from their subdb and then exit
- Dump file, verify contents of each subdb is correct
- Close, reopen per subdb
- Dump file, verify per subdb
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test081
+ Test off-page duplicates and overflow pages together with
+ very large keys (key/data as file contents).
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Transaction tests
+test082
+ Test of DB_PREV_NODUP (uses test074).
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-txn001 Begin, commit, abort testing.
+test083
+ Test of DB->key_range.
-txn002 Verify that read-only transactions do not write log records.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test084
+ Basic sanity test (test001) with large (64K) pages.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Environment tests
+test085
+ Test of cursor behavior when a cursor is pointing to a deleted
+ btree key which then has duplicates added. [#2473]
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-env001 Test of env remove interface (formerly env_remove).
+test086
+ Test of cursor stability across btree splits/rsplits with
+ subtransaction aborts (a variant of test048). [#2373]
-env002 Test of DB_LOG_DIR and env name resolution.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test087
+ Test of cursor stability when converting to and modifying
+ off-page duplicate pages with subtransaction aborts. [#2373]
+
+ Does the following:
+ a. Initialize things by DB->putting ndups dups and
+ setting a reference cursor to point to each. Do each put twice,
+ first aborting, then committing, so we're sure to abort the move
+ to off-page dups at some point.
+ b. c_put ndups dups (and correspondingly expanding
+ the set of reference cursors) after the last one, making sure
+ after each step that all the reference cursors still point to
+ the right item.
+ c. Ditto, but before the first one.
+ d. Ditto, but after each one in sequence first to last.
+ e. Ditto, but after each one in sequence from last to first.
+ occur relative to the new datum)
+ f. Ditto for the two sequence tests, only doing a
+ DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
+ new one.
-env003 Test of DB_TMP_DIR and env name resolution.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test088
+ Test of cursor stability across btree splits with very
+ deep trees (a variant of test048). [#2514]
-env004 Multiple data directories test.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test089
+ Concurrent Data Store test (CDB)
-env005 Test for using subsystems without initializing them correctly.
+ Enhanced CDB testing to test off-page dups, cursor dups and
+ cursor operations like c_del then c_get.
-env006 Smoke test that the utilities all run.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test090
+ Test for functionality near the end of the queue using test001.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-RPC tests
+test091
+ Test of DB_CONSUME_WAIT.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-[RPC tests also include running all Access Method tests for all methods
-via an RPC server]
+test092
+ Test of DB_DIRTY_READ [#3395]
+
+ We set up a database with nentries in it. We then open the
+ database read-only twice. One with dirty read and one without.
+ We open the database for writing and update some entries in it.
+ Then read those new entries via db->get (clean and dirty), and
+ via cursors (clean and dirty).
-rpc001 Test RPC server timeouts for cursor, txn and env handles.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test093
+ Test using set_bt_compare.
-rpc002 Test unsupported functions
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-Recno backing file tests
+test094
+ Test using set_dup_compare.
+
+ Use the first 10,000 entries from the dictionary.
+ Insert each with self as key and data; retrieve each.
+ After all are entered, retrieve all; compare output to original.
+ Close file, reopen, do retrieve and re-verify.
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-rsrc001 Basic backing file test (put/get)
+test095
+ Bulk get test for methods supporting dups. [#2934]
-rsrc002 Test of set_re_delim
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test096
+ Db->truncate test.
+ For all methods:
+ Test that truncate empties an existing database.
+ Test that truncate-write in an aborted txn doesn't
+ change the original contents.
+ Test that truncate-write in a committed txn does
+ overwrite the original contents.
+ For btree and hash, do the same in a database with offpage dups.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test097
+ Open up a large set of database files simultaneously.
+ Adjust for local file descriptor resource limits.
+ Then use the first 1000 entries from the dictionary.
+ Insert each with self as key and a fixed, medium length data string;
+ retrieve each. After all are entered, retrieve all; compare output
+ to original.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test098
+ Test of DB_GET_RECNO and secondary indices. Open a primary and
+ a secondary, and do a normal cursor get followed by a get_recno.
+ (This is a smoke test for "Bug #1" in [#5811].)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test099
+
+ Test of DB->get and DBC->c_get with set_recno and get_recno.
+
+ Populate a small btree -recnum database.
+ After all are entered, retrieve each using -recno with DB->get.
+ Open a cursor and do the same for DBC->c_get with set_recno.
+ Verify that set_recno sets the record number position properly.
+ Verify that get_recno returns the correct record numbers.
+
+ Using the same database, open 3 cursors and position one at
+ the beginning, one in the middle, and one at the end. Delete
+ by cursor and check that record renumbering is done properly.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test100
+ Test for functionality near the end of the queue
+ using test025 (DB_APPEND).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test101
+ Test for functionality near the end of the queue
+ using test070 (DB_CONSUME).
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test102
+ Bulk get test for record-based methods. [#2934]
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test103
+ Test bulk get when record numbers wrap around.
+
+ Load database with items starting before and ending after
+ the record number wrap around point. Run bulk gets (-multi_key)
+ with various buffer sizes and verify the contents returned match
+ the results from a regular cursor get.
+
+ Then delete items to create a sparse database and make sure it
+ still works. Test both -multi and -multi_key since they behave
+ differently.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+test106
+
+
+
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn001
+ Begin, commit, abort testing.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn002
+ Verify that read-only transactions do not write log records.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn003
+ Test abort/commit/prepare of txns with outstanding child txns.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn004
+ Test of wraparound txnids (txn001)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn005
+ Test transaction ID wraparound and recovery.
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn008
+ Test of wraparound txnids (txn002)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn009
+ Test of wraparound txnids (txn003)
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn010
+ Test DB_ENV->txn_checkpoint arguments/flags
+
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+txn011
+ Test durable and non-durable txns.
+ Test a mixed env (with both durable and non-durable
+ dbs), then a purely non-durable env. Make sure commit
+ and abort work, and that only the log records we
+ expect are written.
+ Test that we can't get a durable handle on a ND
+ database, or vice versa. Test that all subdb's
+ must be of the same type (D or ND).
diff --git a/db/test/archive.tcl b/db/test/archive.tcl
index 9fdbe82d1..d28aafe70 100644
--- a/db/test/archive.tcl
+++ b/db/test/archive.tcl
@@ -1,33 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: archive.tcl,v 11.14 2000/10/27 13:23:55 sue Exp $
+# $Id: archive.tcl,v 11.21 2003/01/08 05:49:18 bostic Exp $
#
# Options are:
# -checkrec <checkpoint frequency"
# -dir <dbhome directory>
# -maxfilesize <maxsize of log file>
-# -stat
-proc archive_usage {} {
- puts "archive -checkrec <checkpt freq> -dir <directory> \
- -maxfilesize <max size of log files>"
-}
-proc archive_command { args } {
- source ./include.tcl
-
- # Catch a list of files output by db_archive.
- catch { eval exec $util_path/db_archive $args } output
-
- if { $is_windows_test == 1 || 1 } {
- # On Windows, convert all filenames to use forward slashes.
- regsub -all {[\\]} $output / output
- }
-
- # Output the [possibly-transformed] list.
- return $output
-}
proc archive { args } {
global alphabet
source ./include.tcl
@@ -35,17 +16,16 @@ proc archive { args } {
# Set defaults
set maxbsize [expr 8 * 1024]
set maxfile [expr 32 * 1024]
- set dostat 0
set checkrec 500
for { set i 0 } { $i < [llength $args] } {incr i} {
switch -regexp -- [lindex $args $i] {
-c.* { incr i; set checkrec [lindex $args $i] }
-d.* { incr i; set testdir [lindex $args $i] }
-m.* { incr i; set maxfile [lindex $args $i] }
- -s.* { set dostat 1 }
default {
- puts -nonewline "FAIL:[timestamp] Usage: "
- archive_usage
+ puts "FAIL:[timestamp] archive usage"
+ puts "usage: archive -checkrec <checkpt freq> \
+ -dir <directory> -maxfilesize <max size of log files>"
return
}
@@ -53,16 +33,20 @@ proc archive { args } {
}
# Clean out old log if it existed
+ puts "Archive: Log archive test"
puts "Unlinking log: error message OK"
env_cleanup $testdir
# Now run the various functionality tests
set eflags "-create -txn -home $testdir \
-log_buffer $maxbsize -log_max $maxfile"
- set dbenv [eval {berkdb env} $eflags]
+ set dbenv [eval {berkdb_env} $eflags]
error_check_bad dbenv $dbenv NULL
error_check_good dbenv [is_substr $dbenv env] 1
+ set logc [$dbenv log_cursor]
+ error_check_good log_cursor [is_valid_logc $logc $dbenv] TRUE
+
# The basic test structure here is that we write a lot of log
# records (enough to fill up 100 log files; each log file it
# small). We take periodic checkpoints. Between each pair
@@ -75,7 +59,7 @@ proc archive { args } {
# open data file and CDx is close datafile.
set baserec "1:$alphabet:2:$alphabet:3:$alphabet:4:$alphabet"
- puts "Archive.a: Writing log records; checkpoint every $checkrec records"
+ puts "\tArchive.a: Writing log records; checkpoint every $checkrec records"
set nrecs $maxfile
set rec 0:$baserec
@@ -111,7 +95,7 @@ proc archive { args } {
if { [expr $i % $checkrec] == 0 } {
# Take a checkpoint
$dbenv txn_checkpoint
- set ckp_file [lindex [lindex [$dbenv log_get -last] 0] 0]
+ set ckp_file [lindex [lindex [$logc get -last] 0] 0]
catch { archive_command -h $testdir -a } res_log_full
if { [string first db_archive $res_log_full] == 0 } {
set res_log_full ""
@@ -125,7 +109,7 @@ proc archive { args } {
res_data_full
catch { archive_command -h $testdir -s } res_data
error_check_good nlogfiles [llength $res_alllog] \
- [lindex [lindex [$dbenv log_get -last] 0] 0]
+ [lindex [lindex [$logc get -last] 0] 0]
error_check_good logs_match [llength $res_log_full] \
[llength $res_log]
error_check_good data_match [llength $res_data_full] \
@@ -206,21 +190,35 @@ proc archive { args } {
}
}
# Commit any transactions still running.
- puts "Archive: Commit any transactions still running."
+ puts "\tArchive.b: Commit any transactions still running."
foreach t $txnlist {
error_check_good txn_commit:$t [$t commit] 0
}
# Close any files that are still open.
- puts "Archive: Close open files."
+ puts "\tArchive.c: Close open files."
foreach d $dblist {
error_check_good db_close:$db [$d close] 0
}
# Close and unlink the file
+ error_check_good log_cursor_close [$logc close] 0
reset_env $dbenv
+}
+
+proc archive_command { args } {
+ source ./include.tcl
+
+ # Catch a list of files output by db_archive.
+ catch { eval exec $util_path/db_archive $args } output
- puts "Archive: Complete."
+ if { $is_windows_test == 1 || 1 } {
+ # On Windows, convert all filenames to use forward slashes.
+ regsub -all {[\\]} $output / output
+ }
+
+ # Output the [possibly-transformed] list.
+ return $output
}
proc min { a b } {
diff --git a/db/test/bigfile001.tcl b/db/test/bigfile001.tcl
index 3c46ac8a5..fa40b82b9 100644
--- a/db/test/bigfile001.tcl
+++ b/db/test/bigfile001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: bigfile001.tcl,v 11.7 2002/08/10 13:39:26 bostic Exp
+# $Id: bigfile001.tcl,v 11.8 2003/01/08 05:49:20 bostic Exp $
#
# TEST bigfile001
# TEST Create a database greater than 4 GB in size. Close, verify.
diff --git a/db/test/bigfile002.tcl b/db/test/bigfile002.tcl
index 36e21933c..6a12cf554 100644
--- a/db/test/bigfile002.tcl
+++ b/db/test/bigfile002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: bigfile002.tcl,v 11.7 2002/08/10 13:39:26 bostic Exp
+# $Id: bigfile002.tcl,v 11.8 2003/01/08 05:49:21 bostic Exp $
#
# TEST bigfile002
# TEST This one should be faster and not require so much disk space,
diff --git a/db/test/byteorder.tcl b/db/test/byteorder.tcl
index d9e44e1d2..4cd789a39 100644
--- a/db/test/byteorder.tcl
+++ b/db/test/byteorder.tcl
@@ -1,23 +1,34 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: byteorder.tcl,v 11.7 2000/11/16 23:56:18 ubell Exp $
+# $Id: byteorder.tcl,v 11.14 2003/08/28 19:59:13 sandstro Exp $
#
# Byte Order Test
# Use existing tests and run with both byte orders.
proc byteorder { method {nentries 1000} } {
+ source ./include.tcl
puts "Byteorder: $method $nentries"
- eval {test001 $method $nentries 0 "01" -lorder 1234}
- eval {test001 $method $nentries 0 "01" -lorder 4321}
+ eval {test001 $method $nentries 0 0 "01" -lorder 1234}
+ eval {verify_dir $testdir}
+ eval {test001 $method $nentries 0 0 "01" -lorder 4321}
+ eval {verify_dir $testdir}
eval {test003 $method -lorder 1234}
+ eval {verify_dir $testdir}
eval {test003 $method -lorder 4321}
+ eval {verify_dir $testdir}
eval {test010 $method $nentries 5 10 -lorder 1234}
+ eval {verify_dir $testdir}
eval {test010 $method $nentries 5 10 -lorder 4321}
+ eval {verify_dir $testdir}
eval {test011 $method $nentries 5 11 -lorder 1234}
+ eval {verify_dir $testdir}
eval {test011 $method $nentries 5 11 -lorder 4321}
+ eval {verify_dir $testdir}
eval {test018 $method $nentries -lorder 1234}
+ eval {verify_dir $testdir}
eval {test018 $method $nentries -lorder 4321}
+ eval {verify_dir $testdir}
}
diff --git a/db/test/conscript.tcl b/db/test/conscript.tcl
index 11d0eb58e..324babf39 100644
--- a/db/test/conscript.tcl
+++ b/db/test/conscript.tcl
@@ -1,15 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: conscript.tcl,v 11.12 2000/12/01 04:28:36 ubell Exp $
+# $Id: conscript.tcl,v 11.24 2003/05/19 17:33:16 bostic Exp $
#
# Script for DB_CONSUME test (test070.tcl).
# Usage: conscript dir file runtype nitems outputfile tnum args
# dir: DBHOME directory
# file: db file on which to operate
-# runtype: PRODUCE or CONSUME--which am I?
+# runtype: PRODUCE, CONSUME or WAIT -- which am I?
# nitems: number of items to put or get
# outputfile: where to log consumer results
# tnum: test number
@@ -19,7 +19,7 @@ proc consumescript_produce { db_cmd nitems tnum args } {
global mydata
set pid [pid]
- puts "\tTest0$tnum: Producer $pid starting, producing $nitems items."
+ puts "\tTest$tnum: Producer $pid starting, producing $nitems items."
set db [eval $db_cmd]
error_check_good db_open:$pid [is_valid_db $db] TRUE
@@ -28,30 +28,31 @@ proc consumescript_produce { db_cmd nitems tnum args } {
set ret 0
for { set ndx 0 } { $ndx < $nitems } { incr ndx } {
set oret $ret
+ if { 0xffffffff > 0 && $oret > 0x7fffffff } {
+ incr oret [expr 0 - 0x100000000]
+ }
set ret [$db put -append [chop_data q $mydata]]
error_check_good db_put \
- [expr $ret > 0 ? $oret < $ret : \
- $oret < 0 ? $oret < $ret : $oret > $ret] 1
+ [expr $oret > $ret ? \
+ ($oret > 0x7fffffff && $ret < 0x7fffffff) : 1] 1
}
- # XXX: We permit incomplete syncs because they seem to
- # be unavoidable and not damaging.
+
set ret [catch {$db close} res]
- error_check_good db_close:$pid [expr ($ret == 0) ||\
- ([is_substr $res DB_INCOMPLETE] == 1)] 1
- puts "\t\tTest0$tnum: Producer $pid finished."
+ error_check_good db_close:$pid $ret 0
+ puts "\t\tTest$tnum: Producer $pid finished."
}
proc consumescript_consume { db_cmd nitems tnum outputfile mode args } {
source ./include.tcl
global mydata
set pid [pid]
- puts "\tTest0$tnum: Consumer $pid starting, seeking $nitems items."
+ puts "\tTest$tnum: Consumer $pid starting, seeking $nitems items."
set db [eval $db_cmd]
error_check_good db_open:$pid [is_valid_db $db] TRUE
- set oid [open $outputfile w]
+ set oid [open $outputfile a]
for { set ndx 0 } { $ndx < $nitems } { } {
set ret [$db get $mode]
@@ -67,11 +68,10 @@ proc consumescript_consume { db_cmd nitems tnum outputfile mode args } {
}
error_check_good output_close:$pid [close $oid] ""
- # XXX: see above note.
+
set ret [catch {$db close} res]
- error_check_good db_close:$pid [expr ($ret == 0) ||\
- ([is_substr $res DB_INCOMPLETE] == 1)] 1
- puts "\t\tTest0$tnum: Consumer $pid finished."
+ error_check_good db_close:$pid $ret 0
+ puts "\t\tTest$tnum: Consumer $pid finished."
}
source ./include.tcl
@@ -99,7 +99,7 @@ set args [lindex [lrange $argv 6 end] 0]
set mydata "consumer data"
# Open env
-set dbenv [berkdb env -home $dir ]
+set dbenv [berkdb_env -home $dir ]
error_check_good db_env_create [is_valid_env $dbenv] TRUE
# Figure out db opening command.
@@ -117,7 +117,8 @@ if { $runtype == "PRODUCE" } {
consumescript_consume $db_cmd $nitems $tnum $outputfile -consume_wait \
$args
} else {
- error_check_good bad_args $runtype "either PRODUCE, CONSUME or WAIT"
+ error_check_good bad_args $runtype \
+ "either PRODUCE, CONSUME, or WAIT"
}
error_check_good env_close [$dbenv close] 0
exit
diff --git a/db/test/dbm.tcl b/db/test/dbm.tcl
index 41a5da1f1..4eefa648b 100644
--- a/db/test/dbm.tcl
+++ b/db/test/dbm.tcl
@@ -1,16 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: dbm.tcl,v 11.12 2000/08/25 14:21:50 sue Exp $
+# $Id: dbm.tcl,v 11.16 2003/01/08 05:49:27 bostic Exp $
#
-# Historic DBM interface test.
-# Use the first 1000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Then reopen the file, re-retrieve everything.
-# Finally, delete everything.
+# TEST dbm
+# TEST Historic DBM interface test. Use the first 1000 entries from the
+# TEST dictionary. Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Then reopen the file, re-retrieve everything. Finally, delete
+# TEST everything.
proc dbm { { nentries 1000 } } {
source ./include.tcl
diff --git a/db/test/dbscript.tcl b/db/test/dbscript.tcl
index 3a51b4363..96da0c3f6 100644
--- a/db/test/dbscript.tcl
+++ b/db/test/dbscript.tcl
@@ -1,12 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: dbscript.tcl,v 11.10 2000/04/21 18:36:21 krinsky Exp $
+# $Id: dbscript.tcl,v 11.15 2003/01/08 05:49:29 bostic Exp $
#
# Random db tester.
# Usage: dbscript file numops min_del max_add key_avg data_avgdups
+# method: method (we pass this in so that fixed-length records work)
# file: db file on which to operate
# numops: number of operations to do
# ncurs: number of cursors
@@ -22,26 +23,25 @@ source ./include.tcl
source $test_path/test.tcl
source $test_path/testutils.tcl
-set alphabet "abcdefghijklmnopqrstuvwxyz"
-
set usage "dbscript file numops ncurs min_del max_add key_avg data_avg dups errpcnt"
# Verify usage
-if { $argc != 9 } {
+if { $argc != 10 } {
puts stderr "FAIL:[timestamp] Usage: $usage"
exit
}
# Initialize arguments
-set file [lindex $argv 0]
-set numops [ lindex $argv 1 ]
-set ncurs [ lindex $argv 2 ]
-set min_del [ lindex $argv 3 ]
-set max_add [ lindex $argv 4 ]
-set key_avg [ lindex $argv 5 ]
-set data_avg [ lindex $argv 6 ]
-set dups [ lindex $argv 7 ]
-set errpct [ lindex $argv 8 ]
+set method [lindex $argv 0]
+set file [lindex $argv 1]
+set numops [ lindex $argv 2 ]
+set ncurs [ lindex $argv 3 ]
+set min_del [ lindex $argv 4 ]
+set max_add [ lindex $argv 5 ]
+set key_avg [ lindex $argv 6 ]
+set data_avg [ lindex $argv 7 ]
+set dups [ lindex $argv 8 ]
+set errpct [ lindex $argv 9 ]
berkdb srand $rand_init
@@ -68,7 +68,7 @@ if {$cerr != 0} {
puts $cret
return
}
-set method [$db get_type]
+# set method [$db get_type]
set record_based [is_record_based $method]
# Initialize globals including data
diff --git a/db/test/ddoyscript.tcl b/db/test/ddoyscript.tcl
index 4c2ad35d9..3dad59822 100644
--- a/db/test/ddoyscript.tcl
+++ b/db/test/ddoyscript.tcl
@@ -1,15 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: ddoyscript.tcl,v 11.1 2001/03/29 15:51:05 margo Exp
+# $Id: ddoyscript.tcl,v 11.7 2003/01/08 05:49:30 bostic Exp $
#
# Deadlock detector script tester.
# Usage: ddoyscript dir lockerid numprocs
# dir: DBHOME directory
# lockerid: Lock id for this locker
# numprocs: Total number of processes running
+# myid: id of this process --
+# the order that the processes are created is the same
+# in which their lockerid's were allocated so we know
+# that there is a locker age relationship that is isomorphic
+# with the order releationship of myid's.
source ./include.tcl
source $test_path/test.tcl
@@ -18,7 +23,7 @@ source $test_path/testutils.tcl
set usage "ddoyscript dir lockerid numprocs oldoryoung"
# Verify usage
-if { $argc != 4 } {
+if { $argc != 5 } {
puts stderr "FAIL:[timestamp] Usage: $usage"
exit
}
@@ -28,18 +33,19 @@ set dir [lindex $argv 0]
set lockerid [ lindex $argv 1 ]
set numprocs [ lindex $argv 2 ]
set old_or_young [lindex $argv 3]
+set myid [lindex $argv 4]
-set myenv [berkdb env -lock -home $dir -create -mode 0644]
+set myenv [berkdb_env -lock -home $dir -create -mode 0644]
error_check_bad lock_open $myenv NULL
error_check_good lock_open [is_substr $myenv "env"] 1
# There are two cases here -- oldest/youngest or a ring locker.
-if { $lockerid == 0 || $lockerid == [expr $numprocs - 1] } {
+if { $myid == 0 || $myid == [expr $numprocs - 1] } {
set waitobj NULL
set ret 0
- if { $lockerid == 0 } {
+ if { $myid == 0 } {
set objid 2
if { $old_or_young == "o" } {
set waitobj [expr $numprocs - 1]
@@ -52,7 +58,7 @@ if { $lockerid == 0 || $lockerid == [expr $numprocs - 1] } {
}
# Acquire own read lock
- if {[catch {$myenv lock_get read $lockerid $lockerid} selflock] != 0} {
+ if {[catch {$myenv lock_get read $lockerid $myid} selflock] != 0} {
puts $errorInfo
} else {
error_check_good selfget:$objid [is_substr $selflock $myenv] 1
@@ -98,7 +104,7 @@ if { $lockerid == 0 || $lockerid == [expr $numprocs - 1] } {
set ret ERROR
}
} else {
- error_check_good selfput:oy:$lockerid $err 0
+ error_check_good selfput:oy:$myid $err 0
if { $ret == 0 } {
set ret 1
}
@@ -120,21 +126,21 @@ if { $lockerid == 0 || $lockerid == [expr $numprocs - 1] } {
} else {
# Make sure that we succeed if we're locking the same object as
# oldest or youngest.
- if { [expr $lockerid % 2] == 0 } {
+ if { [expr $myid % 2] == 0 } {
set mode read
} else {
set mode write
}
# Obtain first lock (should always succeed).
- if {[catch {$myenv lock_get $mode $lockerid $lockerid} lock1] != 0} {
+ if {[catch {$myenv lock_get $mode $lockerid $myid} lock1] != 0} {
puts $errorInfo
} else {
- error_check_good lockget:$lockerid [is_substr $lock1 $myenv] 1
+ error_check_good lockget:$myid [is_substr $lock1 $myenv] 1
}
tclsleep 30
- set nextobj [expr $lockerid + 1]
+ set nextobj [expr $myid + 1]
if { $nextobj == [expr $numprocs - 1] } {
set nextobj 1
}
@@ -161,5 +167,6 @@ if { $lockerid == 0 || $lockerid == [expr $numprocs - 1] } {
}
puts $ret
+error_check_good lock_id_free [$myenv lock_id_free $lockerid] 0
error_check_good envclose [$myenv close] 0
exit
diff --git a/db/test/ddscript.tcl b/db/test/ddscript.tcl
index 9b139a4cb..2d4bd722c 100644
--- a/db/test/ddscript.tcl
+++ b/db/test/ddscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: ddscript.tcl,v 11.7 2000/05/08 19:26:37 sue Exp $
+# $Id: ddscript.tcl,v 11.13 2003/01/08 05:49:30 bostic Exp $
#
# Deadlock detector script tester.
# Usage: ddscript dir test lockerid objid numprocs
@@ -32,12 +32,13 @@ set lockerid [ lindex $argv 2 ]
set objid [ lindex $argv 3 ]
set numprocs [ lindex $argv 4 ]
-set myenv [berkdb env -lock -home $dir -create -mode 0644]
+set myenv [berkdb_env -lock -home $dir -create -mode 0644 ]
error_check_bad lock_open $myenv NULL
error_check_good lock_open [is_substr $myenv "env"] 1
puts [eval $tnum $myenv $lockerid $objid $numprocs]
+error_check_good lock_id_free [$myenv lock_id_free $lockerid] 0
error_check_good envclose [$myenv close] 0
exit
diff --git a/db/test/dead001.tcl b/db/test/dead001.tcl
index 9e7c71f6a..868a22b51 100644
--- a/db/test/dead001.tcl
+++ b/db/test/dead001.tcl
@@ -1,56 +1,67 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: dead001.tcl,v 11.17 2000/11/05 14:23:55 dda Exp $
+# $Id: dead001.tcl,v 11.36 2003/05/18 14:09:38 bostic Exp $
#
-# Deadlock Test 1.
-# We create various deadlock scenarios for different numbers of lockers
-# and see if we can get the world cleaned up suitably.
-proc dead001 { { procs "2 4 10" } {tests "ring clump" } } {
+# TEST dead001
+# TEST Use two different configurations to test deadlock detection among a
+# TEST variable number of processes. One configuration has the processes
+# TEST deadlocked in a ring. The other has the processes all deadlocked on
+# TEST a single resource.
+proc dead001 { { procs "2 4 10" } {tests "ring clump" } \
+ {timeout 0} {tnum "001"} } {
source ./include.tcl
+ global lock_curid
+ global lock_maxid
- puts "Dead001: Deadlock detector tests"
+ puts "Dead$tnum: Deadlock detector tests"
env_cleanup $testdir
# Create the environment.
- puts "\tDead001.a: creating environment"
- set env [berkdb env -create -mode 0644 -lock -home $testdir]
+ puts "\tDead$tnum.a: creating environment"
+ set env [berkdb_env -create \
+ -mode 0644 -lock -lock_timeout $timeout -home $testdir]
error_check_good lock_env:open [is_valid_env $env] TRUE
- error_check_good lock_env:close [$env close] 0
-
- set dpid [exec $util_path/db_deadlock -vw -h $testdir \
- >& $testdir/dd.out &]
-
foreach t $tests {
- set pidlist ""
foreach n $procs {
+ if {$timeout == 0 } {
+ set dpid [exec $util_path/db_deadlock -vw \
+ -h $testdir >& $testdir/dd.out &]
+ } else {
+ set dpid [exec $util_path/db_deadlock -vw \
+ -ae -h $testdir >& $testdir/dd.out &]
+ }
- sentinel_init
+ sentinel_init
+ set pidlist ""
+ set ret [$env lock_id_set $lock_curid $lock_maxid]
+ error_check_good lock_id_set $ret 0
# Fire off the tests
- puts "\tDead001: $n procs of test $t"
+ puts "\tDead$tnum: $n procs of test $t"
for { set i 0 } { $i < $n } { incr i } {
+ set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead001.log.$i \
- ddscript.tcl $testdir $t $i $i $n"
+ $testdir/dead$tnum.log.$i \
+ ddscript.tcl $testdir $t $locker $i $n"
set p [exec $tclsh_path \
$test_path/wrap.tcl \
- ddscript.tcl $testdir/dead001.log.$i \
- $testdir $t $i $i $n &]
+ ddscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $t $locker $i $n &]
lappend pidlist $p
}
- watch_procs 5
+ watch_procs $pidlist 5
# Now check output
set dead 0
set clean 0
set other 0
for { set i 0 } { $i < $n } { incr i } {
- set did [open $testdir/dead001.log.$i]
+ set did [open $testdir/dead$tnum.log.$i]
while { [gets $did val] != -1 } {
switch $val {
DEADLOCK { incr dead }
@@ -60,17 +71,18 @@ proc dead001 { { procs "2 4 10" } {tests "ring clump" } } {
}
close $did
}
- puts "dead check..."
- dead_check $t $n $dead $clean $other
+ tclkill $dpid
+ puts "\tDead$tnum: dead check..."
+ dead_check $t $n $timeout $dead $clean $other
}
}
- exec $KILL $dpid
# Windows needs files closed before deleting files, so pause a little
- tclsleep 2
+ tclsleep 3
fileremove -f $testdir/dd.out
# Remove log files
for { set i 0 } { $i < $n } { incr i } {
- fileremove -f $testdir/dead001.log.$i
+ fileremove -f $testdir/dead$tnum.log.$i
}
+ error_check_good lock_env:close [$env close] 0
}
diff --git a/db/test/dead002.tcl b/db/test/dead002.tcl
index 83cc6c7d5..56b4556cc 100644
--- a/db/test/dead002.tcl
+++ b/db/test/dead002.tcl
@@ -1,52 +1,63 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: dead002.tcl,v 11.15 2000/08/25 14:21:50 sue Exp $
+# $Id: dead002.tcl,v 11.28 2003/09/04 23:41:09 bostic Exp $
#
-# Deadlock Test 2.
-# Identical to Test 1 except that instead of running a standalone deadlock
-# detector, we create the region with "detect on every wait"
-proc dead002 { { procs "2 4 10" } {tests "ring clump" } } {
+# TEST dead002
+# TEST Same test as dead001, but use "detect on every collision" instead
+# TEST of separate deadlock detector.
+proc dead002 { { procs "2 4 10" } {tests "ring clump" } \
+ {timeout 0} {tnum 002} } {
source ./include.tcl
- puts "Dead002: Deadlock detector tests"
+ puts "Dead$tnum: Deadlock detector tests (detect on every collision)"
env_cleanup $testdir
# Create the environment.
- puts "\tDead002.a: creating environment"
- set env [berkdb env \
- -create -mode 0644 -home $testdir -lock -lock_detect default]
+ puts "\tDead$tnum.a: creating environment"
+ set lmode "default"
+ if { $timeout != 0 } {
+ set lmode "expire"
+ }
+ set env [berkdb_env \
+ -create -mode 0644 -home $testdir \
+ -lock -lock_timeout $timeout -lock_detect $lmode]
error_check_good lock_env:open [is_valid_env $env] TRUE
- error_check_good lock_env:close [$env close] 0
foreach t $tests {
- set pidlist ""
foreach n $procs {
+ set pidlist ""
sentinel_init
# Fire off the tests
- puts "\tDead002: $n procs of test $t"
+ puts "\tDead$tnum: $n procs of test $t"
for { set i 0 } { $i < $n } { incr i } {
+ set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead002.log.$i \
- ddscript.tcl $testdir $t $i $i $n"
+ $testdir/dead$tnum.log.$i \
+ ddscript.tcl $testdir $t $locker $i $n"
set p [exec $tclsh_path \
$test_path/wrap.tcl \
- ddscript.tcl $testdir/dead002.log.$i \
- $testdir $t $i $i $n &]
+ ddscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $t $locker $i $n &]
lappend pidlist $p
+ # If we're running with timeouts, pause so that
+ # locks will have a chance to time out.
+ if { $timeout != 0 } {
+ tclsleep 1
+ }
}
- watch_procs 5
+ watch_procs $pidlist 5
# Now check output
set dead 0
set clean 0
set other 0
for { set i 0 } { $i < $n } { incr i } {
- set did [open $testdir/dead002.log.$i]
+ set did [open $testdir/dead$tnum.log.$i]
while { [gets $did val] != -1 } {
switch $val {
DEADLOCK { incr dead }
@@ -56,13 +67,16 @@ proc dead002 { { procs "2 4 10" } {tests "ring clump" } } {
}
close $did
}
- dead_check $t $n $dead $clean $other
+
+ puts "\tDead$tnum: dead check ..."
+ dead_check $t $n $timeout $dead $clean $other
}
}
fileremove -f $testdir/dd.out
# Remove log files
for { set i 0 } { $i < $n } { incr i } {
- fileremove -f $testdir/dead002.log.$i
+ fileremove -f $testdir/dead$tnum.log.$i
}
+ error_check_good lock_env:close [$env close] 0
}
diff --git a/db/test/dead003.tcl b/db/test/dead003.tcl
index 4075eb44f..e073df337 100644
--- a/db/test/dead003.tcl
+++ b/db/test/dead003.tcl
@@ -1,56 +1,61 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: dead003.tcl,v 1.8 2000/08/25 14:21:50 sue Exp $
+# $Id: dead003.tcl,v 1.19 2003/05/28 14:33:48 sandstro Exp $
#
-# Deadlock Test 3.
-# Test DB_LOCK_OLDEST and DB_LOCK_YOUNGEST
-# Identical to Test 2 except that we create the region with "detect on
-# every wait" with first the "oldest" and then "youngest".
-proc dead003 { { procs "2 4 10" } {tests "ring clump" } } {
+# TEST dead003
+# TEST
+# TEST Same test as dead002, but explicitly specify DB_LOCK_OLDEST and
+# TEST DB_LOCK_YOUNGEST. Verify the correct lock was aborted/granted.
+proc dead003 { {procs "2 4 10"} {tests "ring clump"} {tnum "003"} } {
source ./include.tcl
+ global lock_curid
+ global lock_maxid
set detects { oldest youngest }
- puts "Dead003: Deadlock detector tests: $detects"
+ puts "Dead$tnum: Deadlock detector tests: $detects"
# Create the environment.
foreach d $detects {
env_cleanup $testdir
- puts "\tDead003.a: creating environment for $d"
- set env [berkdb env \
+ puts "\tDead$tnum.a: creating environment for $d"
+ set env [berkdb_env \
-create -mode 0644 -home $testdir -lock -lock_detect $d]
error_check_good lock_env:open [is_valid_env $env] TRUE
- error_check_good lock_env:close [$env close] 0
foreach t $tests {
- set pidlist ""
foreach n $procs {
- sentinel_init
+ set pidlist ""
+ sentinel_init
+ set ret [$env lock_id_set \
+ $lock_curid $lock_maxid]
+ error_check_good lock_id_set $ret 0
# Fire off the tests
- puts "\tDead003: $n procs of test $t"
+ puts "\tDead$tnum: $n procs of test $t"
for { set i 0 } { $i < $n } { incr i } {
+ set locker [$env lock_id]
puts "$tclsh_path\
test_path/ddscript.tcl $testdir \
- $t $i $i $n >& \
- $testdir/dead003.log.$i"
+ $t $locker $i $n >& \
+ $testdir/dead$tnum.log.$i"
set p [exec $tclsh_path \
$test_path/wrap.tcl \
ddscript.tcl \
- $testdir/dead003.log.$i $testdir \
- $t $i $i $n &]
+ $testdir/dead$tnum.log.$i $testdir \
+ $t $locker $i $n &]
lappend pidlist $p
}
- watch_procs 5
+ watch_procs $pidlist 5
# Now check output
set dead 0
set clean 0
set other 0
for { set i 0 } { $i < $n } { incr i } {
- set did [open $testdir/dead003.log.$i]
+ set did [open $testdir/dead$tnum.log.$i]
while { [gets $did val] != -1 } {
switch $val {
DEADLOCK { incr dead }
@@ -60,13 +65,14 @@ proc dead003 { { procs "2 4 10" } {tests "ring clump" } } {
}
close $did
}
- dead_check $t $n $dead $clean $other
+ puts "\tDead$tnum: dead check..."
+ dead_check $t $n 0 $dead $clean $other
#
# If we get here we know we have the
# correct number of dead/clean procs, as
# checked by dead_check above. Now verify
# that the right process was the one.
- puts "\tDead003: Verify $d locks were aborted"
+ puts "\tDead$tnum: Verify $d locks were aborted"
set l ""
if { $d == "oldest" } {
set l [expr $n - 1]
@@ -74,7 +80,7 @@ proc dead003 { { procs "2 4 10" } {tests "ring clump" } } {
if { $d == "youngest" } {
set l 0
}
- set did [open $testdir/dead003.log.$l]
+ set did [open $testdir/dead$tnum.log.$l]
while { [gets $did val] != -1 } {
error_check_good check_abort \
$val 1
@@ -86,7 +92,8 @@ proc dead003 { { procs "2 4 10" } {tests "ring clump" } } {
fileremove -f $testdir/dd.out
# Remove log files
for { set i 0 } { $i < $n } { incr i } {
- fileremove -f $testdir/dead003.log.$i
+ fileremove -f $testdir/dead$tnum.log.$i
}
+ error_check_good lock_env:close [$env close] 0
}
}
diff --git a/db/test/dead004.tcl b/db/test/dead004.tcl
index f6b00e8c0..2ebd50c71 100644
--- a/db/test/dead004.tcl
+++ b/db/test/dead004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: dead004.tcl,v 11.1 2001/03/29 15:51:05 margo Exp
+# $Id: dead004.tcl,v 11.14 2003/05/28 14:33:48 sandstro Exp $
#
# Deadlock Test 4.
# This test is designed to make sure that we handle youngest and oldest
@@ -20,44 +20,46 @@
# a lock on (N+1) mod 4. The deadlock detector ought to pick locker 1 or 4
# to abort and not 0 or 5.
-proc dead004 { } {
+proc dead004 { {tnum "004"} } {
source ./include.tcl
-
+ global lock_curid
+ global lock_maxid
foreach a { o y } {
- puts "Dead004: Deadlock detector test -a $a"
+ puts "Dead$tnum: Deadlock detector test -a $a"
env_cleanup $testdir
# Create the environment.
- puts "\tDead004.a: creating environment"
- set env [berkdb env -create -mode 0644 -lock -home $testdir]
+ puts "\tDead$tnum.a: creating environment"
+ set env [berkdb_env -create -mode 0644 -lock -home $testdir]
error_check_good lock_env:open [is_valid_env $env] TRUE
- error_check_good lock_env:close [$env close] 0
-
set dpid [exec $util_path/db_deadlock -v -t 5 -a $a \
-h $testdir >& $testdir/dd.out &]
- set pidlist ""
set procs 6
foreach n $procs {
- sentinel_init
+ sentinel_init
+ set pidlist ""
+ set ret [$env lock_id_set $lock_curid $lock_maxid]
+ error_check_good lock_id_set $ret 0
# Fire off the tests
- puts "\tDead004: $n procs"
+ puts "\tDead$tnum: $n procs"
for { set i 0 } { $i < $n } { incr i } {
+ set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead004.log.$i \
- ddoyscript.tcl $testdir $i $n $a"
+ $testdir/dead$tnum.log.$i \
+ ddoyscript.tcl $testdir $locker $n $a $i"
set p [exec $tclsh_path \
$test_path/wrap.tcl \
- ddoyscript.tcl $testdir/dead004.log.$i \
- $testdir $i $n $a &]
+ ddoyscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $locker $n $a $i &]
lappend pidlist $p
}
- watch_procs 5
+ watch_procs $pidlist 5
}
# Now check output
@@ -65,7 +67,7 @@ proc dead004 { } {
set clean 0
set other 0
for { set i 0 } { $i < $n } { incr i } {
- set did [open $testdir/dead004.log.$i]
+ set did [open $testdir/dead$tnum.log.$i]
while { [gets $did val] != -1 } {
switch $val {
DEADLOCK { incr dead }
@@ -75,23 +77,23 @@ proc dead004 { } {
}
close $did
}
- puts "dead check..."
- dead_check oldyoung $n $dead $clean $other
+ tclkill $dpid
+
+ puts "\tDead$tnum: dead check..."
+ dead_check oldyoung $n 0 $dead $clean $other
# Now verify that neither the oldest nor the
# youngest were the deadlock.
- set did [open $testdir/dead004.log.0]
+ set did [open $testdir/dead$tnum.log.0]
error_check_bad file:young [gets $did val] -1
error_check_good read:young $val 1
close $did
- set did [open $testdir/dead004.log.[expr $procs - 1]]
+ set did [open $testdir/dead$tnum.log.[expr $procs - 1]]
error_check_bad file:old [gets $did val] -1
error_check_good read:old $val 1
close $did
- exec $KILL $dpid
-
# Windows needs files closed before deleting files,
# so pause a little
tclsleep 2
@@ -99,7 +101,8 @@ proc dead004 { } {
# Remove log files
for { set i 0 } { $i < $n } { incr i } {
- fileremove -f $testdir/dead004.log.$i
+ fileremove -f $testdir/dead$tnum.log.$i
}
+ error_check_good lock_env:close [$env close] 0
}
-}
+}
diff --git a/db/test/dead005.tcl b/db/test/dead005.tcl
index a5cab91d8..4a465faa8 100644
--- a/db/test/dead005.tcl
+++ b/db/test/dead005.tcl
@@ -1,60 +1,57 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: dead005.tcl,v 11.1 2001/03/30 21:39:04 margo Exp
+# $Id: dead005.tcl,v 11.13 2003/05/28 14:33:48 sandstro Exp $
#
# Deadlock Test 5.
# Test out the minlocks, maxlocks, and minwrites options
# to the deadlock detector.
-proc dead005 { { procs "4 6 10" } {tests "maxlocks minwrites minlocks" } } {
+proc dead005 { { procs "4 6 10" } {tests "maxlocks minwrites minlocks" } \
+ { tnum "005" } } {
source ./include.tcl
- puts "Dead005: minlocks, maxlocks, and minwrites deadlock detection tests"
+ puts "Dead$tnum: minlocks, maxlocks, and minwrites deadlock detection tests"
foreach t $tests {
- puts "Dead005.$t: creating environment"
+ puts "Dead$tnum.$t: creating environment"
env_cleanup $testdir
# Create the environment.
- set env [berkdb env -create -mode 0644 -lock -home $testdir]
+ set env [berkdb_env -create -mode 0644 -lock -home $testdir]
error_check_good lock_env:open [is_valid_env $env] TRUE
-
- error_check_good lock_env:close [$env close] 0
-
case $t {
minlocks { set to n }
maxlocks { set to m }
minwrites { set to w }
}
- set dpid [exec $util_path/db_deadlock -vw -h $testdir -a $to\
- >& $testdir/dd.out &]
-
- set pidlist ""
foreach n $procs {
-
- sentinel_init
+ set dpid [exec $util_path/db_deadlock -vw -h $testdir \
+ -a $to >& $testdir/dd.out &]
+ sentinel_init
+ set pidlist ""
# Fire off the tests
- puts "\tDead005: $t test with $n procs"
+ puts "\tDead$tnum: $t test with $n procs"
for { set i 0 } { $i < $n } { incr i } {
+ set locker [$env lock_id]
puts "$tclsh_path $test_path/wrap.tcl \
- $testdir/dead005.log.$i \
- ddscript.tcl $testdir $t $i $i $n"
+ $testdir/dead$tnum.log.$i \
+ ddscript.tcl $testdir $t $locker $i $n"
set p [exec $tclsh_path \
$test_path/wrap.tcl \
- ddscript.tcl $testdir/dead005.log.$i \
- $testdir $t $i $i $n &]
+ ddscript.tcl $testdir/dead$tnum.log.$i \
+ $testdir $t $locker $i $n &]
lappend pidlist $p
}
- watch_procs 5
+ watch_procs $pidlist 5
# Now check output
set dead 0
set clean 0
set other 0
for { set i 0 } { $i < $n } { incr i } {
- set did [open $testdir/dead005.log.$i]
+ set did [open $testdir/dead$tnum.log.$i]
while { [gets $did val] != -1 } {
switch $val {
DEADLOCK { incr dead }
@@ -64,8 +61,9 @@ proc dead005 { { procs "4 6 10" } {tests "maxlocks minwrites minlocks" } } {
}
close $did
}
- puts "dead check..."
- dead_check $t $n $dead $clean $other
+ tclkill $dpid
+ puts "\tDead$tnum: dead check..."
+ dead_check $t $n 0 $dead $clean $other
# Now verify that the correct participant
# got deadlocked.
switch $t {
@@ -73,12 +71,12 @@ proc dead005 { { procs "4 6 10" } {tests "maxlocks minwrites minlocks" } } {
minwrites {set f 1}
maxlocks {set f [expr $n - 1]}
}
- set did [open $testdir/dead005.log.$f]
+ set did [open $testdir/dead$tnum.log.$f]
error_check_bad file:$t [gets $did val] -1
error_check_good read($f):$t $val DEADLOCK
close $did
}
- exec $KILL $dpid
+ error_check_good lock_env:close [$env close] 0
# Windows needs files closed before deleting them, so pause
tclsleep 2
fileremove -f $testdir/dd.out
@@ -87,5 +85,4 @@ proc dead005 { { procs "4 6 10" } {tests "maxlocks minwrites minlocks" } } {
fileremove -f $testdir/dead001.log.$i
}
}
-
}
diff --git a/db/test/dead006.tcl b/db/test/dead006.tcl
index 456ec6efb..46d2e2f03 100644
--- a/db/test/dead006.tcl
+++ b/db/test/dead006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: dead006.tcl,v 1.4 2002/01/11 15:53:21 bostic Exp
+# $Id: dead006.tcl,v 1.5 2003/01/08 05:49:39 bostic Exp $
#
# TEST dead006
# TEST use timeouts rather than the normal dd algorithm.
diff --git a/db/test/dead007.tcl b/db/test/dead007.tcl
index c729454ec..4569832ff 100644
--- a/db/test/dead007.tcl
+++ b/db/test/dead007.tcl
@@ -1,34 +1,36 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: dead007.tcl,v 1.3 2002/01/11 15:53:22 bostic Exp
+# $Id: dead007.tcl,v 1.5 2003/05/28 14:33:49 sandstro Exp $
#
# TEST dead007
-# TEST use timeouts rather than the normal dd algorithm.
-proc dead007 { } {
+# TEST Tests for locker and txn id wraparound.
+proc dead007 { {tnum "007"} } {
source ./include.tcl
global lock_curid
global lock_maxid
set save_curid $lock_curid
set save_maxid $lock_maxid
- puts "Dead007.a -- wrap around"
+ puts "Dead$tnum.a -- wrap around"
set lock_curid [expr $lock_maxid - 2]
- dead001 "2 10"
+ dead001 "2 10" "ring clump" "0" $tnum
## Oldest/youngest breaks when the id wraps
# dead003 "4 10"
- dead004
+ dead004 $tnum
- puts "Dead007.b -- extend space"
+ puts "Dead$tnum.b -- extend space"
set lock_maxid [expr $lock_maxid - 3]
set lock_curid [expr $lock_maxid - 1]
- dead001 "4 10"
+ dead001 "4 10" "ring clump" "0" $tnum
## Oldest/youngest breaks when the id wraps
# dead003 "10"
- dead004
+ dead004 $tnum
set lock_curid $save_curid
set lock_maxid $save_maxid
+ # Return the empty string so we don't return lock_maxid.
+ return ""
}
diff --git a/db/test/env001.tcl b/db/test/env001.tcl
index 008373301..b4718cc13 100644
--- a/db/test/env001.tcl
+++ b/db/test/env001.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env001.tcl,v 11.21 2000/11/09 19:24:08 sue Exp $
+# $Id: env001.tcl,v 11.27 2003/01/08 05:49:42 bostic Exp $
#
-# Test of env remove interface.
+# TEST env001
+# TEST Test of env remove interface (formerly env_remove).
proc env001 { } {
global errorInfo
global errorCode
@@ -20,12 +21,12 @@ proc env001 { } {
# Try opening without Create flag should error
puts "\tEnv001.a: Open without create (should fail)."
- catch {set env [berkdb env -home $testdir]} ret
+ catch {set env [berkdb_env_noerr -home $testdir]} ret
error_check_good env:fail [is_substr $ret "no such file"] 1
# Now try opening with create
puts "\tEnv001.b: Open with create."
- set env [berkdb env -create -mode 0644 -home $testdir]
+ set env [berkdb_env -create -mode 0644 -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
@@ -40,7 +41,7 @@ proc env001 { } {
puts "\tEnv001.d: Remove on closed environments."
if { $is_windows_test != 1 } {
puts "\t\tEnv001.d.1: Verify re-open."
- set env [berkdb env -home $testdir]
+ set env [berkdb_env -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
@@ -56,7 +57,7 @@ proc env001 { } {
puts "\tEnv001.e: Remove on open environments."
puts "\t\tEnv001.e.1: Env is open by single proc,\
remove no force."
- set env [berkdb env -create -mode 0644 -home $testdir]
+ set env [berkdb_env -create -mode 0644 -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
set stat [catch {berkdb envremove -home $testdir} ret]
@@ -68,7 +69,7 @@ proc env001 { } {
"\t\tEnv001.e.2: Env is open by single proc, remove with force."
# Now that envremove doesn't do a close, this won't work on Windows.
if { $is_windows_test != 1 && $is_hp_test != 1} {
- set env [berkdb env -create -mode 0644 -home $testdir]
+ set env [berkdb_env_noerr -create -mode 0644 -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
set stat [catch {berkdb envremove -force -home $testdir} ret]
@@ -77,19 +78,22 @@ proc env001 { } {
# Even though the underlying env is gone, we need to close
# the handle.
#
- catch {$env close}
+ set stat [catch {$env close} ret]
+ error_check_bad env:close_after_remove $stat 0
+ error_check_good env:close_after_remove \
+ [is_substr $ret "recovery"] 1
}
puts "\t\tEnv001.e.3: Env is open by 2 procs, remove no force."
# should fail
- set env [berkdb env -create -mode 0644 -home $testdir]
+ set env [berkdb_env -create -mode 0644 -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
set f1 [open |$tclsh_path r+]
puts $f1 "source $test_path/test.tcl"
- set remote_env [send_cmd $f1 "berkdb env -home $testdir"]
+ set remote_env [send_cmd $f1 "berkdb_env_noerr -home $testdir"]
error_check_good remote:env_open [is_valid_env $remote_env] TRUE
# First close our env, but leave remote open
error_check_good env:close [$env close] 0
@@ -110,13 +114,13 @@ proc env001 { } {
# are open, so we skip this test for Windows. On UNIX, it should
# succeed
if { $is_windows_test != 1 && $is_hp_test != 1 } {
- set env [berkdb env -create -mode 0644 -home $testdir]
+ set env [berkdb_env_noerr -create -mode 0644 -home $testdir]
error_check_bad env:$testdir $env NULL
error_check_good env:$testdir [is_substr $env "env"] 1
set f1 [open |$tclsh_path r+]
puts $f1 "source $test_path/test.tcl"
- set remote_env [send_cmd $f1 "berkdb env -home $testdir"]
+ set remote_env [send_cmd $f1 "berkdb_env -home $testdir"]
error_check_good remote:env_open [is_valid_env $remote_env] TRUE
catch {berkdb envremove -force -home $testdir} ret
@@ -124,7 +128,10 @@ proc env001 { } {
#
# We still need to close our handle.
#
- catch {$env close} ret
+ set stat [catch {$env close} ret]
+ error_check_bad env:close_after_error $stat 0
+ error_check_good env:close_after_error \
+ [is_substr $ret recovery] 1
# Close down remote process
set err [catch { close $f1 } result]
@@ -137,7 +144,7 @@ proc env001 { } {
file mkdir $testdir/NEWDIR
}
set eflags "-create -home $testdir/NEWDIR -mode 0644"
- set env [eval {berkdb env} $eflags]
+ set env [eval {berkdb_env} $eflags]
error_check_bad env:open $env NULL
error_check_good env:close [$env close] 0
error_check_good berkdb:envremove \
diff --git a/db/test/env002.tcl b/db/test/env002.tcl
index a37ddea17..8f38157d2 100644
--- a/db/test/env002.tcl
+++ b/db/test/env002.tcl
@@ -1,21 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env002.tcl,v 11.11 2000/08/25 14:21:50 sue Exp $
+# $Id: env002.tcl,v 11.16 2003/01/08 05:49:42 bostic Exp $
#
-# Env Test 002
-# Test set_lg_dir and env name resolution
-# With an environment path specified using -home, and then again
-# with it specified by the environment variable DB_HOME:
-# 1) Make sure that the set_lg_dir option is respected
-# a) as a relative pathname.
-# b) as an absolute pathname.
-# 2) Make sure that the DB_LOG_DIR db_config argument is respected,
-# again as relative and absolute pathnames.
-# 3) Make sure that if -both- db_config and a file are present,
-# only the file is respected (see doc/env/naming.html).
+# TEST env002
+# TEST Test of DB_LOG_DIR and env name resolution.
+# TEST With an environment path specified using -home, and then again
+# TEST with it specified by the environment variable DB_HOME:
+# TEST 1) Make sure that the set_lg_dir option is respected
+# TEST a) as a relative pathname.
+# TEST b) as an absolute pathname.
+# TEST 2) Make sure that the DB_LOG_DIR db_config argument is respected,
+# TEST again as relative and absolute pathnames.
+# TEST 3) Make sure that if -both- db_config and a file are present,
+# TEST only the file is respected (see doc/env/naming.html).
proc env002 { } {
# env002 is essentially just a small driver that runs
# env002_body--formerly the entire test--twice; once, it
@@ -30,7 +30,7 @@ proc env002 { } {
puts "Env002: set_lg_dir test."
- puts "\tEnv002: Running with -home argument to berkdb env."
+ puts "\tEnv002: Running with -home argument to berkdb_env."
env002_body "-home $testdir"
puts "\tEnv002: Running with environment variable DB_HOME set."
@@ -125,8 +125,8 @@ proc env002_run_test { major minor msg env_args log_path} {
# Create an environment, with logging, and scribble some
# stuff in a [btree] database in it.
- # puts [concat {berkdb env -create -log -private} $env_args]
- set dbenv [eval {berkdb env -create -log -private} $env_args]
+ # puts [concat {berkdb_env -create -log -private} $env_args]
+ set dbenv [eval {berkdb_env -create -log -private} $env_args]
error_check_good env_open [is_valid_env $dbenv] TRUE
set db [berkdb_open -env $dbenv -create -btree -mode 0644 $testfile]
error_check_good db_open [is_valid_db $db] TRUE
diff --git a/db/test/env003.tcl b/db/test/env003.tcl
index 01e0b6188..e6a0b6feb 100644
--- a/db/test/env003.tcl
+++ b/db/test/env003.tcl
@@ -1,21 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env003.tcl,v 11.12 2000/08/25 14:21:50 sue Exp $
+# $Id: env003.tcl,v 11.22 2003/01/08 05:49:43 bostic Exp $
#
-# Env Test 003
-# Test DB_TMP_DIR and env name resolution
-# With an environment path specified using -home, and then again
-# with it specified by the environment variable DB_HOME:
-# 1) Make sure that the DB_TMP_DIR config file option is respected
-# a) as a relative pathname.
-# b) as an absolute pathname.
-# 2) Make sure that the DB_TMP_DIR db_config argument is respected,
-# again as relative and absolute pathnames.
-# 3) Make sure that if -both- db_config and a file are present,
-# only the file is respected (see doc/env/naming.html).
+# TEST env003
+# TEST Test DB_TMP_DIR and env name resolution
+# TEST With an environment path specified using -home, and then again
+# TEST with it specified by the environment variable DB_HOME:
+# TEST 1) Make sure that the DB_TMP_DIR config file option is respected
+# TEST a) as a relative pathname.
+# TEST b) as an absolute pathname.
+# TEST 2) Make sure that the -tmp_dir config option is respected,
+# TEST again as relative and absolute pathnames.
+# TEST 3) Make sure that if -both- -tmp_dir and a file are present,
+# TEST only the file is respected (see doc/env/naming.html).
proc env003 { } {
# env003 is essentially just a small driver that runs
# env003_body twice. First, it supplies a "home" argument
@@ -29,7 +29,7 @@ proc env003 { } {
puts "Env003: DB_TMP_DIR test."
- puts "\tEnv003: Running with -home argument to berkdb env."
+ puts "\tEnv003: Running with -home argument to berkdb_env."
env003_body "-home $testdir"
puts "\tEnv003: Running with environment variable DB_HOME set."
@@ -44,7 +44,6 @@ proc env003 { } {
set env(DB_HOME) $testdir/bogus_home
env003_body "-use_environ -home $testdir"
unset env(DB_HOME)
-
}
proc env003_body { home_arg } {
@@ -52,7 +51,6 @@ proc env003_body { home_arg } {
env_cleanup $testdir
set tmpdir "tmpfiles_in_here"
-
file mkdir $testdir/$tmpdir
# Set up full path to $tmpdir for when we test absolute paths.
@@ -61,63 +59,44 @@ proc env003_body { home_arg } {
set fulltmpdir [pwd]
cd $curdir
- # Run test with the temp dir. nonexistent--it checks for failure.
- env_cleanup $testdir
-
+ # Create DB_CONFIG
env003_make_config $tmpdir
# Run the meat of the test.
env003_run_test a 1 "relative path, config file" $home_arg \
$testdir/$tmpdir
- env_cleanup $testdir
-
env003_make_config $fulltmpdir
# Run the test again
env003_run_test a 2 "absolute path, config file" $home_arg \
$fulltmpdir
- env_cleanup $testdir
-
# Now we try without a config file, but instead with db_config
# relative paths
env003_run_test b 1 "relative path, db_config" "$home_arg \
-tmp_dir $tmpdir -data_dir ." \
$testdir/$tmpdir
- env_cleanup $testdir
-
- # absolute
+ # absolute paths
env003_run_test b 2 "absolute path, db_config" "$home_arg \
-tmp_dir $fulltmpdir -data_dir ." \
$fulltmpdir
- env_cleanup $testdir
-
# Now, set db_config -and- have a # DB_CONFIG file, and make
# sure only the latter is honored.
- # Make a temp directory that actually does exist to supply
- # as a bogus argument--the test checks for -nonexistent- temp
- # dirs., as success is harder to detect.
file mkdir $testdir/bogus
env003_make_config $tmpdir
- # note that we supply an -existent- tmp dir to db_config as
- # a red herring
env003_run_test c 1 "relative path, both db_config and file" \
"$home_arg -tmp_dir $testdir/bogus -data_dir ." \
$testdir/$tmpdir
- env_cleanup $testdir
- file mkdir $fulltmpdir
file mkdir $fulltmpdir/bogus
- env003_make_config $fulltmpdir/nonexistent
+ env003_make_config $fulltmpdir
- # note that we supply an -existent- tmp dir to db_config as
- # a red herring
- env003_run_test c 2 "relative path, both db_config and file" \
+ env003_run_test c 2 "absolute path, both db_config and file" \
"$home_arg -tmp_dir $fulltmpdir/bogus -data_dir ." \
$fulltmpdir
}
@@ -131,40 +110,33 @@ proc env003_run_test { major minor msg env_args tmp_path} {
# Create an environment and small-cached in-memory database to
# use.
- set dbenv [eval {berkdb env -create -home $testdir} $env_args \
- {-cachesize {0 40960 1}}]
+ set dbenv [eval {berkdb_env -create -home $testdir} $env_args \
+ {-cachesize {0 50000 1}}]
error_check_good env_open [is_valid_env $dbenv] TRUE
- set db [berkdb_open_noerr -env $dbenv -create -btree]
+
+ set db [berkdb_open -env $dbenv -create -btree]
error_check_good db_open [is_valid_db $db] TRUE
# Fill the database with more than its cache can fit.
- # !!!
- # This is actually trickier than it sounds. The tempfile
- # gets unlinked as soon as it's created, so there's no straightforward
- # way to check for its existence. Instead, we make sure
- # DB_TMP_DIR points somewhere bogus, and make sure that the temp
- # dir. does -not- exist. But to do this, we have to know
- # which call to DB->put is going to fail--the temp file is
- # created lazily, so the failure only occurs when the cache finally
- # overflows.
- # The data we've conjured up will fit nicely once, but the second
- # call will overflow the cache. Thus we check for success once,
- # then failure.
#
- set key1 "key1"
- set key2 "key2"
- set data [repeat $alphabet 1000]
-
- # First put should succeed.
- error_check_good db_put_1 [$db put $key1 $data] 0
+ # When CONFIG_TEST is defined, the tempfile is left linked so
+ # we can check for its existence. Size the data to overfill
+ # the cache--the temp file is created lazily, so it is created
+ # when the cache overflows.
+ #
+ set key "key"
+ set data [repeat $alphabet 2000]
+ error_check_good db_put [$db put $key $data] 0
- # Second one should return ENOENT.
- set errorCode NONE
- catch {$db put $key2 $data} res
- error_check_good db_put_2 [is_substr $errorCode ENOENT] 1
+ # Check for exactly one temp file.
+ set ret [glob -nocomplain $tmp_path/BDB*]
+ error_check_good temp_file_exists [llength $ret] 1
+ # Can't remove temp file until db is closed on Windows.
error_check_good db_close [$db close] 0
+ fileremove -f $ret
error_check_good env_close [$dbenv close] 0
+
}
proc env003_make_config { tmpdir } {
diff --git a/db/test/env004.tcl b/db/test/env004.tcl
index 82cc8dd25..0d44b8df9 100644
--- a/db/test/env004.tcl
+++ b/db/test/env004.tcl
@@ -1,13 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env004.tcl,v 11.14 2000/08/25 14:21:50 sue Exp $
+# $Id: env004.tcl,v 11.19 2003/01/08 05:49:45 bostic Exp $
#
-# Env Test 4
-# Test multiple data directories. Do a bunch of different opens
-# to make sure that the files are detected in different directories.
+# TEST env004
+# TEST Test multiple data directories. Do a bunch of different opens
+# TEST to make sure that the files are detected in different directories.
proc env004 { } {
source ./include.tcl
@@ -38,19 +38,19 @@ proc env004 { } {
set fulldir [pwd]
cd $curdir
- set e [berkdb env -create -private -home $testdir]
+ set e [berkdb_env -create -private -home $testdir]
error_check_good dbenv [is_valid_env $e] TRUE
ddir_test $fulldir $method $e $args
error_check_good env_close [$e close] 0
- puts "\tEnv004.b: Multiple data directories in berkdb env call."
+ puts "\tEnv004.b: Multiple data directories in berkdb_env call."
env_cleanup $testdir
file mkdir $testdir/data1
file mkdir $testdir/data2
file mkdir $testdir/data3
# Now call dbenv with config specified
- set e [berkdb env -create -private \
+ set e [berkdb_env -create -private \
-data_dir . -data_dir data1 -data_dir data2 \
-data_dir data3 -home $testdir]
error_check_good dbenv [is_valid_env $e] TRUE
diff --git a/db/test/env005.tcl b/db/test/env005.tcl
index 4ad941993..89481cfa4 100644
--- a/db/test/env005.tcl
+++ b/db/test/env005.tcl
@@ -1,14 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env005.tcl,v 11.8 2000/08/25 14:21:50 sue Exp $
+# $Id: env005.tcl,v 11.19 2003/08/05 13:14:28 sandstro Exp $
#
-# Env Test 5
-# Test that using subsystems without initializing them correctly
-# returns an error. Cannot test mpool, because it is assumed
-# in the Tcl code.
+# TEST env005
+# TEST Test that using subsystems without initializing them correctly
+# TEST returns an error. Cannot test mpool, because it is assumed in
+# TEST the Tcl code.
proc env005 { } {
source ./include.tcl
@@ -16,8 +16,7 @@ proc env005 { } {
env_cleanup $testdir
puts "\tEnv005.a: Creating env with no subsystems."
-
- set e [berkdb env -create -home $testdir]
+ set e [berkdb_env_noerr -create -home $testdir]
error_check_good dbenv [is_valid_env $e] TRUE
set db [berkdb_open -create -btree $testdir/env005.db]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -27,17 +26,17 @@ proc env005 { } {
{ "lock_get read 1 1" "Env005.b1"}
{ "lock_id" "Env005.b2"}
{ "lock_stat" "Env005.b3"}
+ { "lock_timeout 100" "Env005.b4"}
{ "log_archive" "Env005.c0"}
- { "log_file {1 1}" "Env005.c1"}
- { "log_flush" "Env005.c2"}
- { "log_get -first" "Env005.c3"}
+ { "log_cursor" "Env005.c1"}
+ { "log_file {1 1}" "Env005.c2"}
+ { "log_flush" "Env005.c3"}
{ "log_put record" "Env005.c4"}
- { "log_register $db xxx" "Env005.c5"}
- { "log_stat" "Env005.c6"}
- { "log_unregister $db" "Env005.c7"}
+ { "log_stat" "Env005.c5"}
{ "txn" "Env005.d0"}
{ "txn_checkpoint" "Env005.d1"}
{ "txn_stat" "Env005.d2"}
+ { "txn_timeout 100" "Env005.d3"}
}
foreach pair $rlist {
diff --git a/db/test/env006.tcl b/db/test/env006.tcl
index 1a39886ca..434e4fac6 100644
--- a/db/test/env006.tcl
+++ b/db/test/env006.tcl
@@ -1,14 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env006.tcl,v 11.5 2000/10/27 13:23:55 sue Exp $
-#
-# Env Test 6
-# DB Utility Check
-# Make sure that all the utilities exist and run.
+# $Id: env006.tcl,v 11.9 2003/01/08 05:49:48 bostic Exp $
#
+# TEST env006
+# TEST Make sure that all the utilities exist and run.
proc env006 { } {
source ./include.tcl
@@ -23,6 +21,8 @@ proc env006 { } {
{ "db_printlog" "Env006.f"}
{ "db_recover" "Env006.g"}
{ "db_stat" "Env006.h"}
+ { "db_upgrade" "Env006.h"}
+ { "db_verify" "Env006.h"}
}
foreach pair $rlist {
set cmd [lindex $pair 0]
diff --git a/db/test/env007.tcl b/db/test/env007.tcl
index b8ddea75c..a52220fcb 100644
--- a/db/test/env007.tcl
+++ b/db/test/env007.tcl
@@ -1,43 +1,73 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env007.tcl,v 11.5 2000/08/25 14:21:50 sue Exp $
+# $Id: env007.tcl,v 11.31 2003/11/20 14:32:51 sandstro Exp $
#
-# Env Test 007
-# Test various config file options.
-# 1) Make sure command line option is respected
-# 2) Make sure that config file option is respected
-# 3) Make sure that if -both- DB_CONFIG and the set_<whatever>
-# method is used, only the file is respected.
+# TEST env007
+# TEST Test DB_CONFIG config file options for berkdb env.
+# TEST 1) Make sure command line option is respected
+# TEST 2) Make sure that config file option is respected
+# TEST 3) Make sure that if -both- DB_CONFIG and the set_<whatever>
+# TEST method is used, only the file is respected.
+# TEST Then test all known config options.
+# TEST Also test config options on berkdb open. This isn't
+# TEST really env testing, but there's no better place to put it.
proc env007 { } {
- # env007 is essentially just a small driver that runs
- # env007_body twice. First, it supplies a "set" argument
- # to use with environment opens, and the second time it sets
- # DB_CONFIG instead.
- # Note that env007_body itself calls env007_run_test to run
- # the body of the actual test.
-
+ global errorInfo
+ global passwd
+ global has_crypto
source ./include.tcl
- puts "Env007: DB_CONFIG test."
+ puts "Env007: DB_CONFIG and getters test."
+ puts "Env007.a: Test berkdb env options using getters and stat."
- #
- # Test only those options we can easily check via stat
+ # Set up options we can check via stat or getters. Structure
+ # of the list is:
+ # 0. Arg used in berkdb env command
+ # 1. Arg used in DB_CONFIG file
+ # 2. Value assigned in berkdb env command
+ # 3. Value assigned in DB_CONFIG file
+ # 4. Message output during test
+ # 5. Stat command to run (empty if we can't get the info
+ # from stat).
+ # 6. String to search for in stat output
+ # 7. Arg used in getter
#
set rlist {
- { " -txn_max " "set_tx_max" "19" "31" "Env007.a: Txn Max"
- "txn_stat" "Max Txns"}
- { " -lock_max " "set_lk_max" "19" "31" "Env007.b: Lock Max"
- "lock_stat" "Max locks"}
- { " -log_buffer " "set_lg_bsize" "65536" "131072" "Env007.c: Log Bsize"
- "log_stat" "Log record cache size"}
- { " -log_max " "set_lg_max" "8388608" "9437184" "Env007.d: Log Max"
- "log_stat" "Maximum log file size"}
+ { " -txn_max " "set_tx_max" "19" "31" "Env007.a1: Txn Max"
+ "txn_stat" "Max Txns" "get_tx_max" }
+ { " -lock_max_locks " "set_lk_max_locks" "17" "29" "Env007.a2: Lock Max"
+ "lock_stat" "Maximum locks" "get_lk_max_locks" }
+ { " -lock_max_lockers " "set_lk_max_lockers" "1500" "2000"
+ "Env007.a3: Max Lockers" "lock_stat" "Maximum lockers"
+ "get_lk_max_lockers" }
+ { " -lock_max_objects " "set_lk_max_objects" "1500" "2000"
+ "Env007.a4: Max Objects" "lock_stat" "Maximum objects"
+ "get_lk_max_objects" }
+ { " -log_buffer " "set_lg_bsize" "65536" "131072" "Env007.a5: Log Bsize"
+ "log_stat" "Log record cache size" "get_lg_bsize" }
+ { " -log_max " "set_lg_max" "8388608" "9437184" "Env007.a6: Log Max"
+ "log_stat" "Current log file size" "get_lg_max" }
+ { " -cachesize " "set_cachesize" "0 536870912 1" "1 0 1"
+ "Env007.a7: Cachesize" "" "" "get_cachesize" }
+ { " -lock_timeout " "set_lock_timeout" "100" "120"
+ "Env007.a8: Lock Timeout" "" "" "get_timeout lock" }
+ { " -log_regionmax " "set_lg_regionmax" "8388608" "4194304"
+ "Env007.a9: Log Regionmax" "" "" "get_lg_regionmax" }
+ { " -mmapsize " "set_mp_mmapsize" "12582912" "8388608"
+ "Env007.a10: Mmapsize" "" "" "get_mp_mmapsize" }
+ { " -shm_key " "set_shm_key" "15" "35" "Env007.a11: Shm Key"
+ "" "" "get_shm_key" }
+ { " -tmp_dir " "set_tmp_dir" "." "./TEMPDIR" "Env007.a12: Temp dir"
+ "" "" "get_tmp_dir" }
+ { " -txn_timeout " "set_txn_timeout" "100" "120"
+ "Env007.a13: Txn timeout" "" "" "get_timeout txn" }
}
- set e "berkdb env -create -mode 0644 -home $testdir -log -lock -txn "
+ set e "berkdb_env -create -mode 0644 -home $testdir -txn "
+ set qnxexclude {set_cachesize}
foreach item $rlist {
set envarg [lindex $item 0]
set configarg [lindex $item 1]
@@ -46,32 +76,441 @@ proc env007 { } {
set msg [lindex $item 4]
set statcmd [lindex $item 5]
set statstr [lindex $item 6]
+ set getter [lindex $item 7]
+ if { $is_qnx_test &&
+ [lsearch $qnxexclude $configarg] != -1 } {
+ puts "\tSkip $configarg for QNX"
+ continue
+ }
env_cleanup $testdir
# First verify using just env args
puts "\t$msg Environment argument only"
- set env [eval $e $envarg $envval]
+ set env [eval $e $envarg {$envval}]
error_check_good envopen:0 [is_valid_env $env] TRUE
- env007_check $env $statcmd $statstr $envval
+ error_check_good get_envval [eval $env $getter] $envval
+ if { $statcmd != "" } {
+ env007_check $env $statcmd $statstr $envval
+ }
error_check_good envclose:0 [$env close] 0
env_cleanup $testdir
env007_make_config $configarg $configval
- # verify using just config file
+ # Verify using just config file
puts "\t$msg Config file only"
set env [eval $e]
error_check_good envopen:1 [is_valid_env $env] TRUE
- env007_check $env $statcmd $statstr $configval
+ error_check_good get_configval1 [eval $env $getter] $configval
+ if { $statcmd != "" } {
+ env007_check $env $statcmd $statstr $configval
+ }
error_check_good envclose:1 [$env close] 0
- # First verify using just env args
+ # Now verify using env args and config args
puts "\t$msg Environment arg and config file"
- set env [eval $e $envarg $envval]
+ set env [eval $e $envarg {$envval}]
error_check_good envopen:2 [is_valid_env $env] TRUE
- env007_check $env $statcmd $statstr $configval
+ # Getter should retrieve config val, not envval.
+ error_check_good get_configval2 [eval $env $getter] $configval
+ if { $statcmd != "" } {
+ env007_check $env $statcmd $statstr $configval
+ }
error_check_good envclose:2 [$env close] 0
}
+
+ #
+ # Test all options that can be set in DB_CONFIG. Write it out
+ # to the file and make sure we can open the env. This execs
+ # the config file code. Also check with a getter that the
+ # expected value is returned.
+ #
+ puts "\tEnv007.b: Test berkdb env config options using getters\
+ and env open."
+
+ # The cfglist variable contains options that can be set in DB_CONFIG.
+ set cfglist {
+ { "set_data_dir" "." "get_data_dirs" "." }
+ { "set_flags" "db_auto_commit" "get_flags" "-auto_commit" }
+ { "set_flags" "db_cdb_alldb" "get_flags" "-cdb_alldb" }
+ { "set_flags" "db_direct_db" "get_flags" "-direct_db" }
+ { "set_flags" "db_direct_log" "get_flags" "-direct_log" }
+ { "set_flags" "db_log_autoremove" "get_flags" "-log_remove" }
+ { "set_flags" "db_nolocking" "get_flags" "-nolock" }
+ { "set_flags" "db_nommap" "get_flags" "-nommap" }
+ { "set_flags" "db_nopanic" "get_flags" "-nopanic" }
+ { "set_flags" "db_overwrite" "get_flags" "-overwrite" }
+ { "set_flags" "db_region_init" "get_flags" "-region_init" }
+ { "set_flags" "db_txn_nosync" "get_flags" "-nosync" }
+ { "set_flags" "db_txn_write_nosync" "get_flags" "-wrnosync" }
+ { "set_flags" "db_yieldcpu" "get_flags" "-yield" }
+ { "set_lg_bsize" "65536" "get_lg_bsize" "65536" }
+ { "set_lg_dir" "." "get_lg_dir" "." }
+ { "set_lg_max" "8388608" "get_lg_max" "8388608" }
+ { "set_lg_regionmax" "65536" "get_lg_regionmax" "65536" }
+ { "set_lk_detect" "db_lock_default" "get_lk_detect" "default" }
+ { "set_lk_detect" "db_lock_expire" "get_lk_detect" "expire" }
+ { "set_lk_detect" "db_lock_maxlocks" "get_lk_detect" "maxlocks" }
+ { "set_lk_detect" "db_lock_minlocks" "get_lk_detect" "minlocks" }
+ { "set_lk_detect" "db_lock_minwrite" "get_lk_detect" "minwrite" }
+ { "set_lk_detect" "db_lock_oldest" "get_lk_detect" "oldest" }
+ { "set_lk_detect" "db_lock_random" "get_lk_detect" "random" }
+ { "set_lk_detect" "db_lock_youngest" "get_lk_detect" "youngest" }
+ { "set_lk_max_lockers" "1500" "get_lk_max_lockers" "1500" }
+ { "set_lk_max_locks" "29" "get_lk_max_locks" "29" }
+ { "set_lk_max_objects" "1500" "get_lk_max_objects" "1500" }
+ { "set_lock_timeout" "100" "get_timeout lock" "100" }
+ { "set_mp_mmapsize" "12582912" "get_mp_mmapsize" "12582912" }
+ { "set_region_init" "1" "get_flags" "-region_init" }
+ { "set_shm_key" "15" "get_shm_key" "15" }
+ { "set_tas_spins" "15" "get_tas_spins" "15" }
+ { "set_tmp_dir" "." "get_tmp_dir" "." }
+ { "set_tx_max" "31" "get_tx_max" "31" }
+ { "set_txn_timeout" "50" "get_timeout txn" "50" }
+ { "set_verbose" "db_verb_chkpoint" "get_verbose chkpt" "on" }
+ { "set_verbose" "db_verb_deadlock" "get_verbose deadlock" "on" }
+ { "set_verbose" "db_verb_recovery" "get_verbose recovery" "on" }
+ { "set_verbose" "db_verb_replication" "get_verbose rep" "on" }
+ { "set_verbose" "db_verb_waitsfor" "get_verbose wait" "on" }
+ }
+
+ env_cleanup $testdir
+ set e "berkdb_env -create -mode 0644 -home $testdir -txn"
+ set qnxexclude {db_direct_db db_direct_log}
+ foreach item $cfglist {
+ env_cleanup $testdir
+ set configarg [lindex $item 0]
+ set configval [lindex $item 1]
+ set getter [lindex $item 2]
+ set getval [lindex $item 3]
+
+ if { $is_qnx_test &&
+ [lsearch $qnxexclude $configval] != -1} {
+ puts "\t\t Skip $configarg $configval for QNX"
+ continue
+ }
+ env007_make_config $configarg $configval
+
+ # Verify using config file
+ puts "\t\t $configarg $configval"
+ if {[catch { set env [eval $e]} res] != 0} {
+ puts "FAIL: $res"
+ continue
+ }
+ error_check_good envvalid:1 [is_valid_env $env] TRUE
+ error_check_good getter:1 [eval $env $getter] $getval
+ error_check_good envclose:1 [$env close] 0
+ }
+
+ puts "\tEnv007.c: Test berkdb env options using getters and env open."
+ # The envopenlist variable contains options that can be set using
+ # berkdb env. We always set -mpool.
+ set envopenlist {
+ { "-cdb" "" "-cdb" "get_open_flags" }
+ { "-errpfx" "FOO" "FOO" "get_errpfx" }
+ { "-lock" "" "-lock" "get_open_flags" }
+ { "-log" "" "-log" "get_open_flags" }
+ { "" "" "-mpool" "get_open_flags" }
+ { "-system_mem" "-shm_key 1" "-system_mem" "get_open_flags" }
+ { "-txn" "" "-txn" "get_open_flags" }
+ { "-recover" "-txn" "-recover" "get_open_flags" }
+ { "-recover_fatal" "-txn" "-recover_fatal" "get_open_flags" }
+ { "-use_environ" "" "-use_environ" "get_open_flags" }
+ { "-use_environ_root" "" "-use_environ_root" "get_open_flags" }
+ { "" "" "-create" "get_open_flags" }
+ { "-private" "" "-private" "get_open_flags" }
+ { "-thread" "" "-thread" "get_open_flags" }
+ { "-txn_timestamp" "100000000" "100000000" "get_tx_timestamp" }
+ }
+
+ if { $has_crypto == 1 } {
+ lappend envopenlist \
+ { "-encryptaes" "$passwd" "-encryptaes" "get_encrypt_flags" }
+ }
+
+ set e "berkdb_env -create -mode 0644 -home $testdir"
+ set qnxexclude {-system_mem}
+ foreach item $envopenlist {
+ set envarg [lindex $item 0]
+ set envval [lindex $item 1]
+ set retval [lindex $item 2]
+ set getter [lindex $item 3]
+
+ if { $is_qnx_test &&
+ [lsearch $qnxexclude $envarg] != -1} {
+ puts "\t\t Skip $envarg for QNX"
+ continue
+ }
+ env_cleanup $testdir
+ # Set up env
+ set env [eval $e $envarg $envval]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ # Check that getter retrieves expected retval.
+ set get_retval [eval $env $getter]
+ if { [is_substr $get_retval $retval] != 1 } {
+ puts "FAIL: $retval\
+ should be a substring of $get_retval"
+ continue
+ }
+ error_check_good envclose [$env close] 0
+
+ # The -encryptany flag can only be tested on an existing
+ # environment that supports encryption, so do it here.
+ if { $has_crypto == 1 } {
+ if { $envarg == "-encryptaes" } {
+ set env [eval berkdb_env -home $testdir\
+ -encryptany $passwd]
+ error_check_good get_encryptany \
+ [eval $env get_encrypt_flags] "-encryptaes"
+ error_check_good env_close [$env close] 0
+ }
+ }
+ }
+
+ puts "\tEnv007.d: Test berkdb env options using set_flags and getters."
+
+ # The flaglist variable contains options that can be set using
+ # $env set_flags.
+ set flaglist {
+ { "-direct_db" }
+ { "-direct_log" }
+ { "-log_remove" }
+ { "-nolock" }
+ { "-nommap" }
+ { "-nopanic" }
+ { "-nosync" }
+ { "-overwrite" }
+ { "-panic" }
+ { "-wrnosync" }
+ }
+ set e "berkdb_env -create -mode 0644 -home $testdir"
+ set qnxexclude {-direct_db -direct_log}
+ foreach item $flaglist {
+ set flag [lindex $item 0]
+ if { $is_qnx_test &&
+ [lsearch $qnxexclude $flag] != -1} {
+ puts "\t\t Skip $flag for QNX"
+ continue
+ }
+ env_cleanup $testdir
+
+ # Set up env
+ set env [eval $e]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ # Use set_flags to turn on new env characteristics.
+ error_check_good "flag $flag on" [$env set_flags $flag on] 0
+ # Check that getter retrieves expected retval.
+ set get_retval [eval $env get_flags]
+ if { [is_substr $get_retval $flag] != 1 } {
+ puts "FAIL: $flag should be a substring of $get_retval"
+ continue
+ }
+ # Use set_flags to turn off env characteristics, make sure
+ # they are gone.
+ error_check_good "flag $flag off" [$env set_flags $flag off] 0
+ set get_retval [eval $env get_flags]
+ if { [is_substr $get_retval $flag] == 1 } {
+ puts "FAIL: $flag should not be in $get_retval"
+ continue
+ }
+
+ error_check_good envclose [$env close] 0
+ }
+
+ puts "\tEnv007.e: Test env get_home."
+ env_cleanup $testdir
+ # Set up env
+ set env [eval $e]
+ error_check_good env_open [is_valid_env $env] TRUE
+ # Test for correct value.
+ set get_retval [eval $env get_home]
+ error_check_good get_home $get_retval $testdir
+ error_check_good envclose [$env close] 0
+
+ puts "\tEnv007.f: Test that bad config values are rejected."
+ set cfglist {
+ { "set_cachesize" "1048576" }
+ { "set_flags" "db_xxx" }
+ { "set_flags" "1" }
+ { "set_flags" "db_txn_nosync x" }
+ { "set_lg_bsize" "db_xxx" }
+ { "set_lg_max" "db_xxx" }
+ { "set_lg_regionmax" "db_xxx" }
+ { "set_lk_detect" "db_xxx" }
+ { "set_lk_detect" "1" }
+ { "set_lk_detect" "db_lock_youngest x" }
+ { "set_lk_max" "db_xxx" }
+ { "set_lk_max_locks" "db_xxx" }
+ { "set_lk_max_lockers" "db_xxx" }
+ { "set_lk_max_objects" "db_xxx" }
+ { "set_mp_mmapsize" "db_xxx" }
+ { "set_region_init" "db_xxx" }
+ { "set_shm_key" "db_xxx" }
+ { "set_tas_spins" "db_xxx" }
+ { "set_tx_max" "db_xxx" }
+ { "set_verbose" "db_xxx" }
+ { "set_verbose" "1" }
+ { "set_verbose" "db_verb_recovery x" }
+ }
+
+ set e "berkdb_env_noerr -create -mode 0644 \
+ -home $testdir -log -lock -txn "
+ foreach item $cfglist {
+ set configarg [lindex $item 0]
+ set configval [lindex $item 1]
+
+ env007_make_config $configarg $configval
+
+ # verify using just config file
+ set stat [catch {eval $e} ret]
+ error_check_good envopen $stat 1
+ error_check_good error [is_substr $errorInfo \
+ "incorrect arguments for name-value pair"] 1
+ }
+
+ puts "\tEnv007.g: Config name error set_xxx"
+ set e "berkdb_env_noerr -create -mode 0644 \
+ -home $testdir -log -lock -txn "
+ env007_make_config "set_xxx" 1
+ set stat [catch {eval $e} ret]
+ error_check_good envopen $stat 1
+ error_check_good error [is_substr $errorInfo \
+ "unrecognized name-value pair"] 1
+
+ puts "\tEnv007.h: Test berkdb open flags and getters."
+ # Check options that we configure with berkdb open and
+ # query via getters. Structure of the list is:
+ # 0. Flag used in berkdb open command
+ # 1. Value specified to flag
+ # 2. Specific method, if needed
+ # 3. Arg used in getter
+
+ set olist {
+ { "-minkey" "4" " -btree " "get_bt_minkey" }
+ { "-cachesize" "0 1048576 1" "" "get_cachesize" }
+ { "" "FILENAME DBNAME" "" "get_dbname" }
+ { "" "" "" "get_env" }
+ { "-errpfx" "ERROR:" "" "get_errpfx" }
+ { "" "-chksum" "" "get_flags" }
+ { "-delim" "58" "-recno" "get_re_delim" }
+ { "" "-dup" "" "get_flags" }
+ { "" "-dup -dupsort" "" "get_flags" }
+ { "" "-recnum" "" "get_flags" }
+ { "" "-revsplitoff" "" "get_flags" }
+ { "" "-renumber" "-recno" "get_flags" }
+ { "" "-snapshot" "-recno" "get_flags" }
+ { "" "-create" "" "get_open_flags" }
+ { "" "-create -dirty" "" "get_open_flags" }
+ { "" "-create -excl" "" "get_open_flags" }
+ { "" "-create -nommap" "" "get_open_flags" }
+ { "" "-create -thread" "" "get_open_flags" }
+ { "" "-create -truncate" "" "get_open_flags" }
+ { "-ffactor" "40" " -hash " "get_h_ffactor" }
+ { "-lorder" "4321" "" "get_lorder" }
+ { "-nelem" "10000" " -hash " "get_h_nelem" }
+ { "-pagesize" "4096" "" "get_pagesize" }
+ { "-extent" "4" "-queue" "get_q_extentsize" }
+ { "-len" "20" "-recno" "get_re_len" }
+ { "-pad" "0" "-recno" "get_re_pad" }
+ { "-source" "include.tcl" "-recno" "get_re_source" }
+ }
+
+ set o "berkdb_open -create -mode 0644"
+ foreach item $olist {
+ cleanup $testdir NULL
+ set flag [lindex $item 0]
+ set flagval [lindex $item 1]
+ set method [lindex $item 2]
+ if { $method == "" } {
+ set method " -btree "
+ }
+ set getter [lindex $item 3]
+
+ # Check that open is successful with the flag.
+ # The option -cachesize requires grouping for $flagval.
+ if { $flag == "-cachesize" } {
+ set db [eval $o $method $flag {$flagval}\
+ $testdir/a.db]
+ } else {
+ set db [eval $o $method $flag $flagval\
+ $testdir/a.db]
+ }
+ error_check_good dbopen:0 [is_valid_db $db] TRUE
+
+ # Check that getter retrieves the correct value.
+ # Cachesizes under 500MB are adjusted upward to
+ # about 25% so just make sure we're in the right
+ # ballpark, between 1.2 and 1.3 of the original value.
+ if { $flag == "-cachesize" } {
+ set retval [eval $db $getter]
+ set retbytes [lindex $retval 1]
+ set setbytes [lindex $flagval 1]
+ error_check_good cachesize_low\
+ [expr $retbytes > [expr $setbytes * 6 / 5]] 1
+ error_check_good cachesize_high\
+ [expr $retbytes < [expr $setbytes * 13 / 10]] 1
+ } else {
+ error_check_good get_flagval \
+ [eval $db $getter] $flagval
+ }
+ error_check_good dbclose:0 [$db close] 0
+ }
+
+ puts "\tEnv007.i: Test berkdb_open -rdonly."
+ # This test is done separately because -rdonly can only be specified
+ # on an already existing database.
+ set flag "-rdonly"
+ set db [eval berkdb_open $flag $testdir/a.db]
+ error_check_good open_rdonly [is_valid_db $db] TRUE
+
+ error_check_good get_rdonly [eval $db get_open_flags] $flag
+ error_check_good dbclose:0 [$db close] 0
+
+ puts "\tEnv007.j: Test berkdb open flags and getters\
+ requiring environments."
+ # Check options that we configure with berkdb open and
+ # query via getters. Structure of the list is:
+ # 0. Flag used in berkdb open command
+ # 1. Value specified to flag
+ # 2. Specific method, if needed
+ # 3. Arg used in getter
+ # 4. Additional flags needed in setting up env
+
+ set elist {
+ { "" "-auto_commit" "" "get_open_flags" "" }
+ }
+
+ if { $has_crypto == 1 } {
+ lappend elist \
+ { "" "-encrypt" "" "get_flags" "-encryptaes $passwd" }
+ }
+
+ set e "berkdb_env -create -home $testdir -txn "
+ set o "berkdb_open -create -btree -mode 0644 "
+ foreach item $elist {
+ env_cleanup $testdir
+ set flag [lindex $item 0]
+ set flagval [lindex $item 1]
+ set method [lindex $item 2]
+ if { $method == "" } {
+ set method " -btree "
+ }
+ set getter [lindex $item 3]
+ set envflag [lindex $item 4]
+
+ # Check that open is successful with the flag.
+ set env [eval $e $envflag]
+ set db [eval $o -env $env $flag $flagval a.db]
+ error_check_good dbopen:0 [is_valid_db $db] TRUE
+
+ # Check that getter retrieves the correct value
+ set get_flagval [eval $db $getter]
+ error_check_good get_flagval [is_substr $get_flagval $flagval] 1
+ error_check_good dbclose [$db close] 0
+ error_check_good envclose [$env close] 0
+ }
}
proc env007_check { env statcmd statstr testval } {
diff --git a/db/test/env008.tcl b/db/test/env008.tcl
index 645f07f63..83bcb3c3b 100644
--- a/db/test/env008.tcl
+++ b/db/test/env008.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: env008.tcl,v 11.2 2000/10/30 19:00:38 sue Exp $
+# $Id: env008.tcl,v 11.7 2003/01/08 05:49:51 bostic Exp $
#
-# Test of env and subdirs.
+# TEST env008
+# TEST Test environments and subdirectories.
proc env008 { } {
global errorInfo
global errorCode
@@ -21,9 +22,8 @@ proc env008 { } {
puts "Env008: Test of environments and subdirectories."
- # Try opening without Create flag should error
puts "\tEnv008.a: Create env and db."
- set env [berkdb env -create -mode 0644 -home $testdir -txn]
+ set env [berkdb_env -create -mode 0644 -home $testdir -txn]
error_check_good env [is_valid_env $env] TRUE
puts "\tEnv008.b: Remove db in subdir."
diff --git a/db/test/env009.tcl b/db/test/env009.tcl
index 818763929..fd009af55 100644
--- a/db/test/env009.tcl
+++ b/db/test/env009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: env009.tcl,v 11.5 2002/08/12 20:40:36 sandstro Exp
+# $Id: env009.tcl,v 11.6 2003/01/08 05:49:54 bostic Exp $
#
# TEST env009
# TEST Test calls to all the various stat functions. We have several
diff --git a/db/test/env010.tcl b/db/test/env010.tcl
index 76d6731b9..0cba2881a 100644
--- a/db/test/env010.tcl
+++ b/db/test/env010.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: env010.tcl,v 1.4 2002/02/20 17:08:21 sandstro Exp
+# $Id: env010.tcl,v 1.6 2003/07/01 14:42:58 bostic Exp $
#
# TEST env010
# TEST Run recovery in an empty directory, and then make sure we can still
@@ -28,7 +28,8 @@ proc env010 { } {
puts "\tEnv010: Creating env for $rmethod test."
env_cleanup $testdir/EMPTYDIR
- set e [berkdb_env -create -home $testdir/EMPTYDIR -$rmethod]
+ set e [berkdb_env \
+ -create -home $testdir/EMPTYDIR -txn -$rmethod]
error_check_good dbenv [is_valid_env $e] TRUE
# Open and close a database
diff --git a/db/test/env011.tcl b/db/test/env011.tcl
index 56742a08e..99d4cdc4e 100644
--- a/db/test/env011.tcl
+++ b/db/test/env011.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: env011.tcl,v 1.2 2002/02/20 17:08:21 sandstro Exp
+# $Id: env011.tcl,v 1.3 2003/01/08 05:49:57 bostic Exp $
#
# TEST env011
# TEST Run with region overwrite flag.
diff --git a/db/test/fop001.tcl b/db/test/fop001.tcl
new file mode 100644
index 000000000..840e4a690
--- /dev/null
+++ b/db/test/fop001.tcl
@@ -0,0 +1,139 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop001.tcl,v 1.15 2003/09/04 23:41:10 bostic Exp $
+#
+# TEST fop001.tcl
+# TEST Test file system operations, combined in a transaction. [#7363]
+proc fop001 { } {
+ source ./include.tcl
+
+ puts "\nFop001: Multiple file system ops in one transaction"
+
+ set exists {a b}
+ set noexist {foo bar}
+ set open {}
+ set cases {}
+ set ops {rename remove open open_create open_excl truncate}
+
+ # Set up all sensible two-op cases (op1 succeeds).
+ foreach retval { 0 "file exists" "no such file" "file is open" } {
+ foreach op1 {rename remove open open_excl \
+ open_create truncate} {
+ foreach op2 $ops {
+ append cases " " [create_tests $op1 $op2 \
+ $exists $noexist $open $retval]
+ }
+ }
+ }
+
+ # Set up evil two-op cases (op1 fails). Omit open_create
+ # and truncate from op1 list -- open_create always succeeds
+ # and truncate requires a successful open.
+ foreach retval { 0 "file exists" "no such file" "file is open" } {
+ foreach op1 { rename remove open open_excl } {
+ foreach op2 $ops {
+ append cases " " [create_badtests $op1 $op2 \
+ $exists $noexist $open $retval]
+ }
+ }
+ }
+
+ # The structure of each case is:
+ # {{op1 {args} result} {op2 {args} result}}
+ # A result of "0" indicates no error is expected.
+ # Otherwise, the result is the expected error message.
+ #
+ # Comment this loop out to remove the list of cases.
+# set i 1
+# foreach case $cases {
+# puts "\tFop001:$i: $case"
+# incr i
+# }
+
+ set testid 0
+
+ # Run all the cases
+ foreach case $cases {
+ env_cleanup $testdir
+ incr testid
+
+ # Extract elements of the case
+ set op1 [lindex [lindex $case 0] 0]
+ set args1 [lindex [lindex $case 0] 1]
+ set res1 [lindex [lindex $case 0] 2]
+
+ set op2 [lindex [lindex $case 1] 0]
+ set args2 [lindex [lindex $case 1] 1]
+ set res2 [lindex [lindex $case 1] 2]
+
+ puts "\tFop001.$testid: $op1 ($args1), then $op2 ($args2)."
+
+ # Create transactional environment.
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good is_valid_env [is_valid_env $env] TRUE
+
+ # Create two databases
+ set dba [berkdb_open -create -btree -env $env -auto_commit a.db]
+ error_check_good dba_open [is_valid_db $dba] TRUE
+ error_check_good dba_put [$dba put -auto_commit 1 a] 0
+ error_check_good dba_close [$dba close] 0
+
+ set dbb [berkdb_open -create -btree -env $env -auto_commit b.db]
+ error_check_good dbb_open [is_valid_db $dbb] TRUE
+ error_check_good dbb_put [$dbb put -auto_commit 1 b] 0
+ error_check_good dbb_close [$dbb close] 0
+
+ foreach end {abort commit} {
+ # Start transaction
+ set txn [$env txn]
+
+ # Execute and check operation 1
+ set result1 [do_op $op1 $args1 $txn $env]
+ if {$res1 == 0} {
+ error_check_good op1_should_succeed $result1 $res1
+ } else {
+ set error [extract_error $result1]
+ error_check_good op1_wrong_failure $error $res1
+ }
+
+ # Execute and check operation 2
+ set result2 [do_op $op2 $args2 $txn $env]
+ if {$res2 == 0} {
+ error_check_good op2_should_succeed $result2 $res2
+ } else {
+ set error [extract_error $result2]
+ error_check_good op2_wrong_failure $error $res2
+ }
+
+ # End transaction
+ error_check_good txn_$end [$txn $end] 0
+
+ # If the txn was aborted, we still have the original two
+ # databases.
+ if {$end == "abort"} {
+ error_check_good a_exists \
+ [file exists $testdir/a.db] 1
+ error_check_good b_exists \
+ [file exists $testdir/b.db] 1
+ }
+ }
+
+ # Close any open db handles. We had to wait until now
+ # because you can't close a database inside a transaction.
+ set handles [berkdb handles]
+ foreach handle $handles {
+ if {[string range $handle 0 1] == "db" } {
+ error_check_good db_close [$handle close] 0
+ }
+ }
+ # Clean up for next case
+ error_check_good env_close [$env close] 0
+ error_check_good envremove [berkdb envremove -home $testdir] 0
+ env_cleanup $testdir
+ }
+}
+
+
diff --git a/db/test/fop002.tcl b/db/test/fop002.tcl
new file mode 100644
index 000000000..a4b6a9da7
--- /dev/null
+++ b/db/test/fop002.tcl
@@ -0,0 +1,130 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop002.tcl,v 1.5 2003/09/08 16:41:06 sandstro Exp $
+#
+# TEST fop002.tcl
+# TEST Test file system operations in the presence of bad permissions.
+proc fop002 { } {
+ source ./include.tcl
+
+ env_cleanup $testdir
+ puts "\nFop002: File system ops and permissions. "
+ if { $is_windows_test == 1 } {
+ puts "\tSkipping permissions test for Windows platform."
+ return
+ }
+
+ # Create database with -rw-r--r-- permissions.
+ set perms "0644"
+ set testfile $testdir/a.db
+ set destfile $testdir/b.db
+
+ set db [berkdb_open -create -btree -mode $perms $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_put [$db put 1 a] 0
+ error_check_good db_close [$db close] 0
+
+ # Eliminate all read and write permission, and try to execute
+ # file ops. They should fail.
+ set res [exec chmod 0000 $testfile]
+ error_check_good remove_permissions [llength $res] 0
+ # Put remove last on the list of ops since it should succeed
+ # at the end of the test, removing the test file.
+ set ops [list open_create open rename remove]
+ set rdonly 0
+
+ puts "\tFop002.a: Test with neither read nor write permission."
+ foreach op $ops {
+ puts "\t\tFop002.a: Testing $op for failure."
+ switch $op {
+ open {
+ test_$op $testfile $rdonly 1
+ }
+ rename {
+ test_$op $testfile $destfile 1
+ }
+ open_create -
+ remove {
+ test_$op $testfile 1
+ }
+ }
+ }
+
+ # Change permissions to read-only.
+ puts "\tFop002.b: Test with read-only permission."
+ set rdonly 1
+
+ set res [exec chmod 0444 $testfile]
+ error_check_good set_readonly [llength $res] 0
+
+ foreach op $ops {
+ puts "\t\tFop002.b: Testing $op for success."
+ switch $op {
+ open {
+ test_$op $testfile $rdonly 0
+ }
+ rename {
+ test_$op $testfile $destfile 0
+ # Move it back so later tests work
+ test_$op $destfile $testfile 0
+ }
+ open_create {
+ puts "\t\tSkipping open_create with read-only."
+ }
+ remove {
+ test_$op $testfile 0
+ }
+ }
+ }
+}
+
+proc test_remove { testfile {expectfail 0} } {
+ catch { berkdb dbremove $testfile } res
+ if { $expectfail == 1 } {
+ error_check_good remove_err $res "db remove:permission denied"
+ } else {
+ error_check_good remove $res 0
+ }
+}
+
+proc test_rename { testfile destfile {expectfail 0} } {
+ catch { berkdb dbrename $testfile $destfile } res
+ if { $expectfail == 1 } {
+ error_check_good rename_err $res "db rename:permission denied"
+ } else {
+ error_check_good rename $res 0
+ }
+}
+
+proc test_open_create { testfile {expectfail 0} } {
+ set stat [catch { set db \
+ [berkdb_open -create -btree $testfile]} res]
+ if { $expectfail == 1 } {
+ error_check_good open_create_err $res \
+ "db open:permission denied"
+ } else {
+ error_check_good open_create $stat 0
+ # Since we succeeded, we have to close the db.
+ error_check_good db_close [$db close] 0
+ }
+}
+
+proc test_open { testfile {readonly 0} {expectfail 0} } {
+ if { $readonly == 1 } {
+ set stat [catch {set db \
+ [berkdb_open -rdonly -btree $testfile]} res]
+ } else {
+ set stat [catch {set db [berkdb_open -btree $testfile]} res]
+ }
+ if { $expectfail == 1 } {
+ error_check_good open_err $res \
+ "db open:permission denied"
+ } else {
+ error_check_good db_open $stat 0
+ error_check_good db_close [$db close] 0
+ }
+}
+
diff --git a/db/test/fop003.tcl b/db/test/fop003.tcl
new file mode 100644
index 000000000..cd60043fa
--- /dev/null
+++ b/db/test/fop003.tcl
@@ -0,0 +1,83 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop003.tcl,v 1.4 2003/09/08 16:54:10 sandstro Exp $
+#
+# TEST fop003
+# TEST
+# TEST Test behavior of create and truncate for compatibility
+# TEST with sendmail.
+# TEST 1. DB_TRUNCATE is not allowed with locking or transactions.
+# TEST 2. Can -create into zero-length existing file.
+# TEST 3. Can -create into non-zero-length existing file if and
+# TEST only if DB_TRUNCATE is specified.
+proc fop003 { } {
+ global errorInfo
+ source ./include.tcl
+ env_cleanup $testdir
+
+ set tnum "003"
+ set testfile fop$tnum.db
+ puts "Fop$tnum: Test of required behavior for sendmail."
+
+ puts "\tFop$tnum.a: -truncate is not allowed within\
+ txn or locking env."
+ set envflags "lock txn"
+ foreach flag $envflags {
+ set env [berkdb_env_noerr -create -home $testdir -$flag]
+ set db [berkdb_open_noerr -create -btree -env $env $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_close [$db close] 0
+ catch {[berkdb_open_noerr -truncate -btree -env $env \
+ $testfile]} res
+ error_check_good "$flag env not allowed" [is_substr $res \
+ "DB_TRUNCATE illegal with locking specified"] 1
+ error_check_good dbremove [$env dbremove $testfile] 0
+ error_check_good env_close [$env close] 0
+ error_check_good envremove [berkdb envremove -home $testdir] 0
+ }
+
+ puts "\tFop$tnum.b: -create is allowed on open of existing\
+ zero-length file."
+ # Create an empty file, then open with -create. We get an
+ # error message warning us that this does not look like a
+ # DB file, but the open should succeed.
+ set fd [open $testdir/foo w]
+ close $fd
+ catch {set db [berkdb_open_noerr -create -btree $testdir/foo]} res
+ error_check_good open_fail [is_substr $errorInfo \
+ "unexpected file type or format"] 1
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_close [$db close] 0
+
+ puts "\tFop$tnum.c: -create is ignored on open of existing\
+ non-zero-length file."
+ # Create a db file. Close and reopen with -create. Make
+ # sure that we still have the same file by checking the contents.
+ set key "key"
+ set data "data"
+ set file "file.db"
+ set db [berkdb_open -create -btree $testdir/$file]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_put [$db put $key $data] 0
+ error_check_good db_close [$db close] 0
+ set db [berkdb_open -create -btree $testdir/$file]
+ error_check_good db_open2 [is_valid_db $db] TRUE
+ set ret [$db get $key]
+ error_check_good db_get [lindex [lindex $ret 0] 1] $data
+ error_check_good db_close2 [$db close] 0
+
+ puts "\tFop$tnum.d: -create is allowed on open -truncate of\
+ existing non-zero-length file."
+ # Use the file we already have with -truncate flag. The open
+ # should be successful, and when we query for the key that
+ # used to be there, we should get nothing.
+ set db [berkdb_open -create -truncate -btree $testdir/$file]
+ error_check_good db_open3 [is_valid_db $db] TRUE
+ set ret [$db get $key]
+ error_check_good db_get [lindex [lindex $ret 0] 1] ""
+ error_check_good db_close3 [$db close] 0
+
+}
diff --git a/db/test/fop004.tcl b/db/test/fop004.tcl
new file mode 100644
index 000000000..0818170ef
--- /dev/null
+++ b/db/test/fop004.tcl
@@ -0,0 +1,203 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop004.tcl,v 11.1 2003/06/16 20:31:32 sandstro Exp $
+#
+# TEST fop004
+# TEST Test of DB->rename().
+# TEST (formerly test075)
+proc fop004 { { method btree } { tnum "004" } args } {
+ global encrypt
+ global errorCode
+ global errorInfo
+
+ source ./include.tcl
+
+ puts "Fop$tnum: ($args): Test of DB->rename()"
+ # If we are using an env, then testfile should just be the
+ # db name. Otherwise it is the test directory and the name.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ # If we are using an env, then skip this test.
+ # It needs its own.
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Skipping fop004 for env $env"
+ return
+ }
+ if { $encrypt != 0 } {
+ puts "Skipping fop004 for security"
+ return
+ }
+
+ # Define absolute pathnames
+ set curdir [pwd]
+ cd $testdir
+ set fulldir [pwd]
+ cd $curdir
+ set reldir $testdir
+
+ # Set up absolute and relative pathnames for test
+ set paths [list $fulldir $reldir]
+ foreach path $paths {
+ puts "\tFop$tnum: starting test of $path path"
+ set oldfile $path/fop$tnum-old.db
+ set newfile $path/fop$tnum.db
+ set env NULL
+ set envargs ""
+
+ # Loop through test using the following rename options
+ # 1. no environment, not in transaction
+ # 2. with environment, not in transaction
+ # 3. rename with auto-commit
+ # 4. rename in committed transaction
+ # 5. rename in aborted transaction
+
+ foreach op "noenv env auto commit abort" {
+
+ puts "\tFop$tnum.a: Create/rename file with $op"
+
+ # Make sure we're starting with a clean slate.
+
+ if { $op == "noenv" } {
+ cleanup $path $env
+ if { $env == "NULL" } {
+ error_check_bad "$oldfile exists" \
+ [file exists $oldfile] 1
+ error_check_bad "$newfile exists" \
+ [file exists $newfile] 1
+ }
+ }
+
+ if { $op == "env" } {
+ env_cleanup $path
+ set env [berkdb_env -create -home $path]
+ set envargs "-env $env"
+ error_check_good env_open [is_valid_env $env] TRUE
+ }
+
+ if { $op == "auto" || $op == "commit" || $op == "abort" } {
+ env_cleanup $path
+ set env [berkdb_env -create -home $path -txn]
+ set envargs "-env $env"
+ error_check_good env_open [is_valid_env $env] TRUE
+ }
+
+ puts "\t\tFop$tnum.a.1: create"
+ set db [eval {berkdb_open -create -mode 0644} \
+ -$method $envargs $args $oldfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 0
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 1
+ }
+
+ # The nature of the key and data are unimportant;
+ # use numeric key to record-based methods don't need
+ # special treatment.
+ set key 1
+ set data [pad_data $method data]
+
+ error_check_good dbput [$db put $key $data] 0
+ error_check_good dbclose [$db close] 0
+
+ puts "\t\tFop$tnum.a.2: rename"
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 0
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 1
+ }
+
+ # Regular renames use berkdb dbrename but transaction
+ # protected renames must use $env dbrename.
+ if { $op == "noenv" || $op == "env" } {
+ error_check_good rename_file [eval {berkdb dbrename} \
+ $envargs $oldfile $newfile] 0
+ } elseif { $op == "auto" } {
+ error_check_good rename_file [eval {$env dbrename} \
+ -auto_commit $oldfile $newfile] 0
+ } else {
+ # $op is "abort" or "commit"
+ set txn [$env txn]
+ error_check_good rename_file [eval {$env dbrename} \
+ -txn $txn $oldfile $newfile] 0
+ error_check_good txn_$op [$txn $op] 0
+ }
+
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 1
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 0
+ }
+
+ puts "\t\tFop$tnum.a.3: check"
+ # Open again with create to make sure we're not caching or
+ # anything silly. In the normal case (no env), we already
+ # know the file doesn't exist.
+ set odb [eval {berkdb_open -create -mode 0644} \
+ $envargs -$method $args $oldfile]
+ set ndb [eval {berkdb_open -create -mode 0644} \
+ $envargs -$method $args $newfile]
+ error_check_good odb_open [is_valid_db $odb] TRUE
+ error_check_good ndb_open [is_valid_db $ndb] TRUE
+
+ # The DBT from the "old" database should be empty,
+ # not the "new" one, except in the case of an abort.
+ set odbt [$odb get $key]
+ if { $op == "abort" } {
+ error_check_good odbt_has_data [llength $odbt] 1
+ } else {
+ set ndbt [$ndb get $key]
+ error_check_good odbt_empty [llength $odbt] 0
+ error_check_bad ndbt_empty [llength $ndbt] 0
+ error_check_good ndbt [lindex \
+ [lindex $ndbt 0] 1] $data
+ }
+ error_check_good odb_close [$odb close] 0
+ error_check_good ndb_close [$ndb close] 0
+
+ # Now there's both an old and a new. Rename the
+ # "new" to the "old" and make sure that fails.
+ #
+ # XXX Ideally we'd do this test even when there's
+ # an external environment, but that env has
+ # errpfx/errfile set now. :-(
+ puts "\tFop$tnum.b: Make sure rename fails\
+ instead of overwriting"
+ if { $env != "NULL" } {
+ error_check_good env_close [$env close] 0
+ set env [berkdb_env_noerr -home $path]
+ error_check_good env_open2 \
+ [is_valid_env $env] TRUE
+ set ret [catch {eval {berkdb dbrename} \
+ -env $env $newfile $oldfile} res]
+ error_check_bad rename_overwrite $ret 0
+ error_check_good rename_overwrite_ret \
+ [is_substr $errorCode EEXIST] 1
+ }
+
+ # Verify and then start over from a clean slate.
+ verify_dir $path "\tFop$tnum.c: "
+ cleanup $path $env
+ if { $env != "NULL" } {
+ error_check_good env_close [$env close] 0
+ }
+ if { $env == "NULL" } {
+ error_check_bad "$oldfile exists" \
+ [file exists $oldfile] 1
+ error_check_bad "$newfile exists" \
+ [file exists $newfile] 1
+
+ set oldfile fop$tnum-old.db
+ set newfile test$tnum.db
+ }
+ }
+ }
+}
diff --git a/db/test/fop005.tcl b/db/test/fop005.tcl
new file mode 100644
index 000000000..39a808df1
--- /dev/null
+++ b/db/test/fop005.tcl
@@ -0,0 +1,129 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop005.tcl,v 11.2 2003/09/04 23:41:10 bostic Exp $
+#
+# TEST fop005
+# TEST Test of DB->remove()
+# TEST Formerly test080.
+proc fop005 { { method btree } {tnum "005"} args } {
+ source ./include.tcl
+
+ set args [convert_args $method $args]
+
+ puts "Fop$tnum: Test of DB->remove()"
+
+ # Determine full path
+ set curdir [pwd]
+ cd $testdir
+ set fulldir [pwd]
+ cd $curdir
+
+ # Test both relative and absolute path
+ set paths [list $fulldir $testdir]
+
+ set encrypt 0
+ set encargs ""
+ set args [split_encargs $args encargs]
+
+ # If we are using an env, then skip this test.
+ # It needs its own.
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set e [lindex $args $eindex]
+ puts "Skipping fop005 for env $e"
+ return
+ }
+
+ foreach path $paths {
+
+ set dbfile test$tnum.db
+ set testfile $path/$dbfile
+ set eargs $encargs
+
+ # Loop through test using the following remove options
+ # 1. no environment, not in transaction
+ # 2. with environment, not in transaction
+ # 3. rename with auto-commit
+ # 4. rename in committed transaction
+ # 5. rename in aborted transaction
+
+ foreach op "noenv env auto commit abort" {
+
+ # Make sure we're starting with a clean slate.
+ env_cleanup $testdir
+ if { $op == "noenv" } {
+ set dbfile $testfile
+ set e NULL
+ set envargs ""
+ } else {
+ if { $op == "env" } {
+ set largs ""
+ } else {
+ set largs " -txn"
+ }
+ if { $encargs != "" } {
+ set eargs " -encrypt "
+ }
+ set e [eval {berkdb_env -create -home $path} \
+ $encargs $largs]
+ set envargs "-env $e"
+ error_check_good env_open [is_valid_env $e] TRUE
+ }
+
+ puts "\tFop$tnum: dbremove with $op in $path"
+ puts "\tFop$tnum.a.1: Create file"
+ set db [eval {berkdb_open -create -mode 0644} \
+ -$method $envargs $eargs $args {$dbfile}]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ # The nature of the key and data are unimportant;
+ # use numeric key so record-based methods don't need
+ # special treatment.
+ set key 1
+ set data [pad_data $method data]
+
+ error_check_good dbput [$db put $key $data] 0
+ error_check_good dbclose [$db close] 0
+ error_check_good file_exists_before \
+ [file exists $testfile] 1
+
+ # Use berkdb dbremove for non-transactional tests
+ # and $env dbremove for transactional tests
+ puts "\tFop$tnum.a.2: Remove file"
+ if { $op == "noenv" || $op == "env" } {
+ error_check_good remove_$op [eval \
+ {berkdb dbremove} $eargs $envargs $dbfile] 0
+ } elseif { $op == "auto" } {
+ error_check_good remove_$op \
+ [eval {$e dbremove} -auto_commit $dbfile] 0
+ } else {
+ # $op is "abort" or "commit"
+ set txn [$e txn]
+ error_check_good remove_$op \
+ [eval {$e dbremove} -txn $txn $dbfile] 0
+ error_check_good txn_$op [$txn $op] 0
+ }
+
+ puts "\tFop$tnum.a.3: Check that file is gone"
+ # File should now be gone, unless the op is an abort.
+ if { $op != "abort" } {
+ error_check_good exists_after \
+ [file exists $testfile] 0
+ } else {
+ error_check_good exists_after \
+ [file exists $testfile] 1
+ }
+
+ if { $e != "NULL" } {
+ error_check_good env_close [$e close] 0
+ }
+
+ set dbfile fop$tnum-old.db
+ set testfile $path/$dbfile
+ }
+ }
+}
diff --git a/db/test/fop006.tcl b/db/test/fop006.tcl
new file mode 100644
index 000000000..127a327fa
--- /dev/null
+++ b/db/test/fop006.tcl
@@ -0,0 +1,138 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fop006.tcl,v 1.7 2003/09/11 13:11:45 sandstro Exp $
+#
+# TEST fop006.tcl
+# TEST Test file system operations in multiple simultaneous
+# TEST transactions. Start one transaction, do a file operation.
+# TEST Start a second transaction, do a file operation. Abort
+# TEST or commit txn1, then abort or commit txn2, and check for
+# TEST appropriate outcome.
+proc fop006 { } {
+ source ./include.tcl
+
+ env_cleanup $testdir
+ puts "\nFop006: File system ops in multiple transactions"
+
+ set exists {a b}
+ set noexist {foo bar}
+ set open {}
+ set cases {}
+ set ops {open open_create open_excl rename remove truncate}
+
+ # Set up cases where op1 is successful.
+ foreach retval { 0 "file exists" "no such file" } {
+ foreach end1 {abort commit} {
+ foreach op1 $ops {
+ foreach op2 $ops {
+ append cases " " [create_tests\
+ $op1 $op2 $exists $noexist\
+ $open $retval $end1]
+ }
+ }
+ }
+ }
+
+ # Set up evil two-op cases (op1 fails). Omit open_create
+ # and truncate from op1 list -- open_create always succeeds
+ # and truncate requires a successful open.
+ foreach retval { 0 "file exists" "no such file" } {
+ foreach op1 { rename remove open open_excl } {
+ foreach op2 $ops {
+ append cases " " [create_badtests $op1 $op2 \
+ $exists $noexist $open $retval $end1]
+ }
+ }
+ }
+
+ # The structure of each case is:
+ # {{op1 {args} result end} {op2 {args} result}}
+ # A result of "0" indicates no error is expected. Otherwise,
+ # the result is the expected error message. The value of "end"
+ # indicates whether the transaction will be aborted or committed.
+ #
+ # Comment this loop out to remove the list of cases.
+# set i 1
+# foreach case $cases {
+# puts "\tFop006.$i: $case"
+# incr i
+# }
+
+ set testid 0
+
+ # Run all the cases
+ foreach case $cases {
+ incr testid
+
+ # Extract elements of the case
+ set op1 [lindex [lindex $case 0] 0]
+ set args1 [lindex [lindex $case 0] 1]
+ set res1 [lindex [lindex $case 0] 2]
+ set end1 [lindex [lindex $case 0] 3]
+
+ set op2 [lindex [lindex $case 1] 0]
+ set args2 [lindex [lindex $case 1] 1]
+ set res2 [lindex [lindex $case 1] 2]
+
+ puts "\tFop006.$testid: $op1 ($args1) $res1 $end1;\
+ $op2 ($args2) $res2."
+
+ foreach end2 { abort commit } {
+ # Create transactional environment.
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good is_valid_env [is_valid_env $env] TRUE
+
+ # Create databases
+ set db [berkdb_open\
+ -create -btree -env $env -auto_commit a.db]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_put [$db put -auto_commit 1 a] 0
+ error_check_good db_close [$db close] 0
+
+ set db [berkdb_open\
+ -create -btree -env $env -auto_commit b.db]
+ error_check_good db_open [is_valid_db $db] TRUE
+ error_check_good db_put [$db put -auto_commit 1 a] 0
+ error_check_good db_close [$db close] 0
+
+ # Start transaction 1 and perform a file op.
+ set txn1 [$env txn]
+ error_check_good \
+ txn_begin [is_valid_txn $txn1 $env] TRUE
+ set result1 [do_op $op1 $args1 $txn1 $env]
+ if {$res1 == 0} {
+ error_check_good \
+ op1_should_succeed $result1 $res1
+ } else {
+ set error [extract_error $result1]
+ error_check_good op1_wrong_failure $error $res1
+ }
+
+ # Start transaction 2 before ending transaction 1.
+ set pid [exec $tclsh_path $test_path/wrap.tcl \
+ fopscript.tcl $testdir/fop006.log \
+ $op2 $end2 $res2 $args2 &]
+
+ # End transaction 1 and close any open db handles.
+ # Txn2 will now unblock and finish.
+ error_check_good txn1_$end1 [$txn1 $end1] 0
+ set handles [berkdb handles]
+ foreach handle $handles {
+ if {[string range $handle 0 1] == "db" } {
+ error_check_good \
+ db_close [$handle close] 0
+ }
+ }
+ watch_procs $pid 1 60 1
+
+ # Clean up for next case
+ error_check_good env_close [$env close] 0
+ error_check_good \
+ envremove [berkdb envremove -home $testdir] 0
+ env_cleanup $testdir
+ }
+ }
+}
diff --git a/db/test/fopscript.tcl b/db/test/fopscript.tcl
new file mode 100644
index 000000000..e368b233d
--- /dev/null
+++ b/db/test/fopscript.tcl
@@ -0,0 +1,64 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: fopscript.tcl,v 1.3 2003/09/04 23:41:11 bostic Exp $
+#
+# Fop006 script - test of fileops in multiple transactions
+# Usage: fopscript
+# op: file operation to perform
+# end: how to end the transaction (abort or commit)
+# result: expected result of the transaction
+# args: name(s) of files to operate on
+
+source ./include.tcl
+source $test_path/test.tcl
+source $test_path/testutils.tcl
+
+set usage "fopscript op end result args"
+
+# Verify usage
+if { $argc != 4 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set op [ lindex $argv 0 ]
+set end [ lindex $argv 1 ]
+set result [ lindex $argv 2 ]
+set args [ lindex $argv 3 ]
+
+# Join the env
+set dbenv [eval berkdb_env -home $testdir]
+error_check_good envopen [is_valid_env $dbenv] TRUE
+
+# Start transaction
+puts "\tFopscript.a: begin 2nd transaction (will block)"
+set txn2 [$dbenv txn]
+error_check_good txn2_begin [is_valid_txn $txn2 $dbenv] TRUE
+# Execute op2
+set op2result [do_op $op $args $txn2 $dbenv]
+# End txn2
+error_check_good txn2_end [$txn2 $end] 0
+if {$result == 0} {
+ error_check_good op2_should_succeed $op2result $result
+} else {
+ set error [extract_error $op2result]
+ error_check_good op2_wrong_failure $error $result
+}
+
+# Close any open db handles. We had to wait until now
+# because you can't close a database inside a transaction.
+set handles [berkdb handles]
+foreach handle $handles {
+ if {[string range $handle 0 1] == "db" } {
+ error_check_good db_close [$handle close] 0
+ }
+}
+
+# Close the env
+error_check_good dbenv_close [$dbenv close] 0
+puts "\tFopscript completed successfully"
+
diff --git a/db/test/foputils.tcl b/db/test/foputils.tcl
new file mode 100644
index 000000000..b0031c537
--- /dev/null
+++ b/db/test/foputils.tcl
@@ -0,0 +1,365 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: foputils.tcl,v 11.3 2003/09/04 23:41:11 bostic Exp $
+#
+proc do_op {op args txn env} {
+ switch -exact $op {
+ rename { do_rename $args $txn $env }
+ remove { do_remove $args $txn $env }
+ open_create { do_create $args $txn $env }
+ open { do_open $args $txn $env }
+ open_excl { do_create_excl $args $txn $env }
+ truncate { do_truncate $args $txn $env }
+ default { puts "FAIL: operation $op not recognized" }
+ }
+}
+
+proc do_rename {args txn env} {
+ # Pull db names out of $args
+ set oldname [lindex $args 0]
+ set newname [lindex $args 1]
+
+ if {[catch {eval $env dbrename -txn $txn \
+ $oldname.db $newname.db} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc do_remove {args txn env} {
+ if {[catch {eval $env dbremove -txn $txn $args.db} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc do_create {args txn env} {
+ if {[catch {eval berkdb_open -create -btree -env $env \
+ -txn $txn $args.db} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc do_open {args txn env} {
+ if {[catch {eval berkdb_open -btree -env $env \
+ -txn $txn $args.db} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc do_create_excl {args txn env} {
+ if {[catch {eval berkdb_open -create -excl -btree -env $env \
+ -txn $txn $args.db} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc do_truncate {args txn env} {
+ # First we have to get a handle. We omit the -create flag
+ # because testing of truncate is meaningful only in cases
+ # where the database already exists.
+ set db [berkdb_open -btree -env $env -txn $txn $args.db]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ if {[catch {$db truncate -txn $txn} result]} {
+ return $result
+ } else {
+ return 0
+ }
+}
+
+proc create_tests { op1 op2 exists noexist open retval { end1 "" } } {
+ set retlist {}
+ switch $op1 {
+ rename {
+ # Use first element from exists list
+ set from [lindex $exists 0]
+ # Use first element from noexist list
+ set to [lindex $noexist 0]
+
+ # This is the first operation, which should succeed
+ set op1ret [list $op1 "$from $to" 0 $end1]
+
+ # Adjust 'exists' and 'noexist' list if and only if
+ # txn1 was not aborted.
+ if { $end1 != "abort" } {
+ set exists [lreplace $exists 0 0 $to]
+ set noexist [lreplace $noexist 0 0 $from]
+ }
+ }
+ remove {
+ set from [lindex $exists 0]
+ set op1ret [list $op1 $from 0 $end1]
+
+ if { $end1 != "abort" } {
+ set exists [lreplace $exists 0 0]
+ set noexist [lreplace $noexist 0 0 $from]
+ }
+ }
+ open_create -
+ open -
+ truncate {
+ set from [lindex $exists 0]
+ set op1ret [list $op1 $from 0 $end1]
+
+ if { $end1 != "abort" } {
+ set exists [lreplace $exists 0 0]
+ set open [list $from]
+ }
+
+ # Eliminate the 1st element in noexist: it is
+ # equivalent to the 2nd element (neither ever exists).
+ set noexist [lreplace $noexist 0 0]
+ }
+ open_excl {
+ # Use first element from noexist list
+ set from [lindex $noexist 0]
+ set op1ret [list $op1 $from 0 $end1]
+
+ if { $end1 != "abort" } {
+ set noexist [lreplace $noexist 0 0]
+ set open [list $from]
+ }
+
+ # Eliminate the 1st element in exists: it is
+ # equivalent to the 2nd element (both already exist).
+ set exists [lreplace $exists 0 0]
+ }
+ }
+
+ # Generate possible second operations given the return value.
+ set op2list [create_op2 $op2 $exists $noexist $open $retval]
+
+ foreach o $op2list {
+ lappend retlist [list $op1ret $o]
+ }
+ return $retlist
+}
+
+proc create_badtests { op1 op2 exists noexist open retval {end1 ""} } {
+ set retlist {}
+ switch $op1 {
+ rename {
+ # Use first element from exists list
+ set from [lindex $exists 0]
+ # Use first element from noexist list
+ set to [lindex $noexist 0]
+
+ # This is the first operation, which should fail
+ set op1list1 \
+ [list $op1 "$to $to" "no such file" $end1]
+ set op1list2 \
+ [list $op1 "$to $from" "no such file" $end1]
+ set op1list3 \
+ [list $op1 "$from $from" "file exists" $end1]
+ set op1list [list $op1list1 $op1list2 $op1list3]
+
+ # Generate second operations given the return value.
+ set op2list [create_op2 \
+ $op2 $exists $noexist $open $retval]
+ foreach op1 $op1list {
+ foreach op2 $op2list {
+ lappend retlist [list $op1 $op2]
+ }
+ }
+ return $retlist
+ }
+ remove -
+ open -
+ truncate {
+ set file [lindex $noexist 0]
+ set op1list [list $op1 $file "no such file" $end1]
+
+ set op2list [create_op2 \
+ $op2 $exists $noexist $open $retval]
+ foreach op2 $op2list {
+ lappend retlist [list $op1list $op2]
+ }
+ return $retlist
+ }
+ open_excl {
+ set file [lindex $exists 0]
+ set op1list [list $op1 $file "file exists" $end1]
+ set op2list [create_op2 \
+ $op2 $exists $noexist $open $retval]
+ foreach op2 $op2list {
+ lappend retlist [list $op1list $op2]
+ }
+ return $retlist
+ }
+ }
+}
+
+proc create_op2 { op2 exists noexist open retval } {
+ set retlist {}
+ switch $op2 {
+ rename {
+ # Successful renames arise from renaming existing
+ # to non-existing files.
+ if { $retval == 0 } {
+ set old $exists
+ set new $noexist
+ set retlist \
+ [build_retlist $op2 $old $new $retval]
+ }
+ # "File exists" errors arise from renaming existing
+ # to existing files.
+ if { $retval == "file exists" } {
+ set old $exists
+ set new $exists
+ set retlist \
+ [build_retlist $op2 $old $new $retval]
+ }
+ # "No such file" errors arise from renaming files
+ # that don't exist.
+ if { $retval == "no such file" } {
+ set old $noexist
+ set new $exists
+ set retlist1 \
+ [build_retlist $op2 $old $new $retval]
+
+ set old $noexist
+ set new $noexist
+ set retlist2 \
+ [build_retlist $op2 $old $new $retval]
+
+ set retlist [concat $retlist1 $retlist2]
+ }
+ # "File open" errors arise from trying to rename
+ # open files.
+ if { $retval == "file is open" } {
+ set old $open
+ set new $noexist
+ set retlist \
+ [build_retlist $op2 $old $new $retval]
+ }
+ }
+ remove {
+ # Successful removes result from removing existing
+ # files.
+ if { $retval == 0 } {
+ set file $exists
+ }
+ # "File exists" does not happen in remove.
+ if { $retval == "file exists" } {
+ return
+ }
+ # "No such file" errors arise from trying to remove
+ # files that don't exist.
+ if { $retval == "no such file" } {
+ set file $noexist
+ }
+ # "File is open" errors arise from trying to remove
+ # open files.
+ if { $retval == "file is open" } {
+ set file $open
+ }
+ set retlist [build_retlist $op2 $file "" $retval]
+ }
+ open_create {
+ # Open_create should be successful with existing,
+ # open, or non-existing files.
+ if { $retval == 0 } {
+ set file [concat $exists $open $noexist]
+ }
+ # "File exists", "file is open", and "no such file"
+ # do not happen in open_create.
+ if { $retval == "file exists" || \
+ $retval == "file is open" || \
+ $retval == "no such file" } {
+ return
+ }
+ set retlist [build_retlist $op2 $file "" $retval]
+ }
+ open {
+ # Open should be successful with existing or open files.
+ if { $retval == 0 } {
+ set file [concat $exists $open]
+ }
+ # "No such file" errors arise from trying to open
+ # non-existent files.
+ if { $retval == "no such file" } {
+ set file $noexist
+ }
+ # "File exists" and "file is open" do not happen
+ # in open.
+ if { $retval == "file exists" || \
+ $retval == "file is open" } {
+ return
+ }
+ set retlist [build_retlist $op2 $file "" $retval]
+ }
+ open_excl {
+ # Open_excl should be successful with non-existent files.
+ if { $retval == 0 } {
+ set file $noexist
+ }
+ # "File exists" errors arise from trying to open
+ # existing files.
+ if { $retval == "file exists" } {
+ set file [concat $exists $open]
+ }
+ # "No such file" and "file is open" do not happen
+ # in open_excl.
+ if { $retval == "no such file" || \
+ $retval == "file is open" } {
+ return
+ }
+ set retlist [build_retlist $op2 $file "" $retval]
+ }
+ truncate {
+ # Truncate should be successful with existing files.
+ if { $retval == 0 } {
+ set file $exists
+ }
+ # No other return values are meaningful to test since
+ # do_truncate starts with an open and we've already
+ # tested open.
+ if { $retval == "file is open" || \
+ $retval == "file exists" || \
+ $retval == "no such file" } {
+ return
+ }
+ set retlist [build_retlist $op2 $file "" $retval]
+ }
+ }
+ return $retlist
+}
+
+proc build_retlist { op2 file1 file2 retval } {
+ set retlist {}
+ if { $file2 == "" } {
+ foreach f1 $file1 {
+ lappend retlist [list $op2 $f1 $retval]
+ }
+ } else {
+ foreach f1 $file1 {
+ foreach f2 $file2 {
+ lappend retlist [list $op2 "$f1 $f2" $retval]
+ }
+ }
+ }
+ return $retlist
+}
+
+proc extract_error { message } {
+ if { [is_substr $message "exists"] == 1 } {
+ set message "file exists"
+ } elseif {[is_substr $message "no such file"] == 1 } {
+ set message "no such file"
+ } elseif {[is_substr $message "file is open"] == 1 } {
+ set message "file is open"
+ }
+ return $message
+}
diff --git a/db/test/hsearch.tcl b/db/test/hsearch.tcl
index 0afee7fb2..4ef89f0f2 100644
--- a/db/test/hsearch.tcl
+++ b/db/test/hsearch.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: hsearch.tcl,v 11.7 2000/08/25 14:21:50 sue Exp $
+# $Id: hsearch.tcl,v 11.10 2003/01/08 05:49:58 bostic Exp $
#
# Historic Hsearch interface test.
# Use the first 1000 entries from the dictionary.
diff --git a/db/test/include.tcl b/db/test/include.tcl
index e5084d650..00ca814d1 100644
--- a/db/test/include.tcl
+++ b/db/test/include.tcl
@@ -1,19 +1,23 @@
+# Automatically built by dist/s_test; may require local editing.
+
set tclsh_path @TCL_TCLSH@
-set tcllib .libs/libdb_tcl-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@SOSUFFIX@
+set tcllib .libs/libdb_tcl-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@@LIBTSO_MODSUFFIX@
+
set rpc_server localhost
set rpc_path .
-set test_path @srcdir@/../test
+set rpc_testdir $rpc_path/TESTDIR
-set KILL "@db_cv_path_kill@"
+set src_root @srcdir@/..
+set test_path @srcdir@/../test
-# DO NOT EDIT BELOW THIS LINE: automatically built by dist/s_tcl.
+global testdir
+set testdir ./TESTDIR
global dict
-global testdir
global util_path
-set testdir ./TESTDIR
-set rpc_testdir $rpc_path/TESTDIR
global is_hp_test
global is_qnx_test
global is_windows_test
+
+set KILL "@db_cv_path_kill@"
diff --git a/db/test/join.tcl b/db/test/join.tcl
index ebf33b8cd..bb2288a53 100644
--- a/db/test/join.tcl
+++ b/db/test/join.tcl
@@ -1,19 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: join.tcl,v 11.17 2000/08/25 14:21:51 sue Exp $
+# $Id: join.tcl,v 11.22 2003/01/08 05:49:58 bostic Exp $
#
-# We'll test 2-way, 3-way, and 4-way joins and figure that if those work,
-# everything else does as well. We'll create test databases called
-# join1.db, join2.db, join3.db, and join4.db. The number on the database
-# describes the duplication -- duplicates are of the form 0, N, 2N, 3N, ...
-# where N is the number of the database. Primary.db is the primary database,
-# and null.db is the database that has no matching duplicates.
-#
-# We should test this on all btrees, all hash, and a combination thereof
-# Join test.
+# TEST jointest
+# TEST Test duplicate assisted joins. Executes 1, 2, 3 and 4-way joins
+# TEST with differing index orders and selectivity.
+# TEST
+# TEST We'll test 2-way, 3-way, and 4-way joins and figure that if those
+# TEST work, everything else does as well. We'll create test databases
+# TEST called join1.db, join2.db, join3.db, and join4.db. The number on
+# TEST the database describes the duplication -- duplicates are of the
+# TEST form 0, N, 2N, 3N, ... where N is the number of the database.
+# TEST Primary.db is the primary database, and null.db is the database
+# TEST that has no matching duplicates.
+# TEST
+# TEST We should test this on all btrees, all hash, and a combination thereof
proc jointest { {psize 8192} {with_dup_dups 0} {flags 0} } {
global testdir
global rand_init
@@ -24,7 +28,7 @@ proc jointest { {psize 8192} {with_dup_dups 0} {flags 0} } {
# Use one environment for all database opens so we don't
# need oodles of regions.
- set env [berkdb env -create -home $testdir]
+ set env [berkdb_env -create -home $testdir]
error_check_good env_open [is_valid_env $env] TRUE
# With the new offpage duplicate code, we don't support
diff --git a/db/test/lock001.tcl b/db/test/lock001.tcl
index d571a9872..3a4b4f69d 100644
--- a/db/test/lock001.tcl
+++ b/db/test/lock001.tcl
@@ -1,67 +1,28 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: lock001.tcl,v 11.11 2000/08/25 14:21:51 sue Exp $
+# $Id: lock001.tcl,v 11.20 2003/01/08 05:50:00 bostic Exp $
#
-# Test driver for lock tests.
-# General Multi Random
-# Options are:
-# -dir <directory in which to store mpool> Y Y Y
-# -iterations <iterations> Y N Y
-# -ldegree <number of locks per iteration> N N Y
-# -maxlocks <locks in table> Y Y Y
-# -objs <number of objects> N N Y
-# -procs <number of processes to run> N N Y
-# -reads <read ratio> N N Y
-# -seeds <list of seed values for processes> N N Y
-# -wait <wait interval after getting locks> N N Y
-# -conflicts <conflict matrix; a list of lists> Y Y Y
-proc lock_usage {} {
- puts stderr "randomlock\n\t-dir <dir>\n\t-iterations <iterations>"
- puts stderr "\t-conflicts <conflict matrix>"
- puts stderr "\t-ldegree <locks per iteration>\n\t-maxlocks <n>"
- puts stderr "\t-objs <objects>\n\t-procs <nprocs>\n\t-reads <%reads>"
- puts stderr "\t-seeds <list of seeds>\n\t-wait <max wait interval>"
- return
-}
-proc locktest { args } {
+# TEST lock001
+# TEST Make sure that the basic lock tests work. Do some simple gets
+# TEST and puts for a single locker.
+proc lock001 { {iterations 1000} {maxlocks 1000} } {
source ./include.tcl
+ global lock_curid
+ global lock_maxid
+
+ set save_curid $lock_curid
+ set save_maxid $lock_maxid
# Set defaults
# Adjusted to make exact match of isqrt
#set conflicts { 3 0 0 0 0 0 1 0 1 1}
#set conflicts { 3 0 0 0 0 1 0 1 1}
+
set conflicts { 0 0 0 0 0 1 0 1 1}
- set iterations 1000
- set ldegree 5
- set maxlocks 1000
- set objs 75
- set procs 5
- set reads 65
- set seeds {}
- set wait 5
- for { set i 0 } { $i < [llength $args] } {incr i} {
- switch -regexp -- [lindex $args $i] {
- -c.* { incr i; set conflicts [linkdex $args $i] }
- -d.* { incr i; set testdir [lindex $args $i] }
- -i.* { incr i; set iterations [lindex $args $i] }
- -l.* { incr i; set ldegree [lindex $args $i] }
- -m.* { incr i; set maxlocks [lindex $args $i] }
- -o.* { incr i; set objs [lindex $args $i] }
- -p.* { incr i; set procs [lindex $args $i] }
- -r.* { incr i; set reads [lindex $args $i] }
- -s.* { incr i; set seeds [lindex $args $i] }
- -w.* { incr i; set wait [lindex $args $i] }
- default {
- puts -nonewline "FAIL:[timestamp] Usage: "
- lock_usage
- return
- }
- }
- }
set nmodes [isqrt [llength $conflicts]]
# Cleanup
@@ -70,26 +31,15 @@ proc locktest { args } {
# Open the region we'll use for testing.
set eflags "-create -lock -home $testdir -mode 0644 \
-lock_max $maxlocks -lock_conflict {$nmodes {$conflicts}}"
- set env [eval {berkdb env} $eflags]
- lock001 $env $iterations $nmodes
- reset_env $env
- env_cleanup $testdir
-
- lock002 $maxlocks $conflicts
-
- lock003 $testdir $iterations \
- $maxlocks $procs $ldegree $objs $reads $wait $conflicts $seeds
-}
-
-# Make sure that the basic lock tests work. Do some simple gets and puts for
-# a single locker.
-proc lock001 {env iter nmodes} {
- source ./include.tcl
+ set env [eval {berkdb_env} $eflags]
+ error_check_good env [is_valid_env $env] TRUE
+ error_check_good lock_id_set \
+ [$env lock_id_set $lock_curid $lock_maxid] 0
puts "Lock001: test basic lock operations"
- set locker 999
+ set locker [$env lock_id]
# Get and release each type of lock
- puts "Lock001.a: get and release each type of lock"
+ puts "\tLock001.a: get and release each type of lock"
foreach m {ng write read} {
set obj obj$m
set lockp [$env lock_get $m $locker $obj]
@@ -101,7 +51,7 @@ proc lock001 {env iter nmodes} {
# Get a bunch of locks for the same locker; these should work
set obj OBJECT
- puts "Lock001.b: Get a bunch of locks for the same locker"
+ puts "\tLock001.b: Get a bunch of locks for the same locker"
foreach m {ng write read} {
set lockp [$env lock_get $m $locker $obj ]
lappend locklist $lockp
@@ -112,7 +62,7 @@ proc lock001 {env iter nmodes} {
set locklist {}
# Check that reference counted locks work
- puts "Lock001.c: reference counted locks."
+ puts "\tLock001.c: reference counted locks."
for {set i 0} { $i < 10 } {incr i} {
set lockp [$env lock_get -nowait write $locker $obj]
error_check_good lock_get:c [is_blocked $lockp] 0
@@ -131,10 +81,10 @@ proc lock001 {env iter nmodes} {
}
# Change the locker
- set locker [incr locker]
+ set locker [$env lock_id]
set blocklist {}
# Skip NO_LOCK lock.
- puts "Lock001.e: Change the locker, acquire read and write."
+ puts "\tLock001.d: Change the locker, acquire read and write."
foreach i {write read} {
catch {$env lock_get -nowait $i $locker $obj} ret
error_check_good lock_get:e [is_substr $ret "not granted"] 1
@@ -146,7 +96,7 @@ proc lock001 {env iter nmodes} {
# Now re-acquire blocking locks
set locklist {}
- puts "Lock001.f: Re-acquire blocking locks."
+ puts "\tLock001.e: Re-acquire blocking locks."
foreach i {write read} {
set lockp [$env lock_get -nowait $i $locker $obj ]
error_check_good lock_get:f [is_substr $lockp $env] 1
@@ -156,8 +106,10 @@ proc lock001 {env iter nmodes} {
# Now release new locks
release_list $locklist
+ error_check_good free_id [$env lock_id_free $locker] 0
+
+ error_check_good envclose [$env close] 0
- puts "Lock001 Complete."
}
# Blocked locks appear as lockmgrN.lockM\nBLOCKED
diff --git a/db/test/lock002.tcl b/db/test/lock002.tcl
index b433730b1..54ec8de42 100644
--- a/db/test/lock002.tcl
+++ b/db/test/lock002.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: lock002.tcl,v 11.10 2000/08/25 14:21:51 sue Exp $
+# $Id: lock002.tcl,v 11.20 2003/01/08 05:50:02 bostic Exp $
#
-# Exercise basic multi-process aspects of lock.
+# TEST lock002
+# TEST Exercise basic multi-process aspects of lock.
proc lock002 { {maxlocks 1000} {conflicts {0 0 0 0 0 1 0 1 1} } } {
source ./include.tcl
@@ -24,22 +25,25 @@ proc lock002 { {maxlocks 1000} {conflicts {0 0 0 0 0 1 0 1 1} } } {
# detach from it, etc.
proc mlock_open { maxl nmodes conflicts } {
source ./include.tcl
+ global lock_curid
+ global lock_maxid
- puts "Lock002.a multi-process open/close test"
+ puts "\tLock002.a multi-process open/close test"
# Open/Create region here. Then close it and try to open from
# other test process.
- set env_cmd [concat "berkdb env -create -mode 0644 \
+ set env_cmd [concat "berkdb_env -create -mode 0644 \
-lock -lock_max $maxl -lock_conflict" \
[list [list $nmodes $conflicts]] "-home $testdir"]
set local_env [eval $env_cmd]
+ $local_env lock_id_set $lock_curid $lock_maxid
error_check_good env_open [is_valid_env $local_env] TRUE
set ret [$local_env close]
error_check_good env_close $ret 0
# Open from other test process
- set env_cmd "berkdb env -mode 0644 -home $testdir"
+ set env_cmd "berkdb_env -mode 0644 -home $testdir"
set f1 [open |$tclsh_path r+]
puts $f1 "source $test_path/test.tcl"
@@ -58,7 +62,7 @@ proc mlock_open { maxl nmodes conflicts } {
error_check_good remote:lock_close $ret 0
# Try opening for create. Will succeed because region exists.
- set env_cmd [concat "berkdb env -create -mode 0644 \
+ set env_cmd [concat "berkdb_env -create -mode 0644 \
-lock -lock_max $maxl -lock_conflict" \
[list [list $nmodes $conflicts]] "-home $testdir"]
set local_env [eval $env_cmd]
@@ -76,10 +80,10 @@ proc mlock_open { maxl nmodes conflicts } {
proc mlock_wait { } {
source ./include.tcl
- puts "Lock002.b multi-process get/put wait test"
+ puts "\tLock002.b multi-process get/put wait test"
# Open region locally
- set env_cmd "berkdb env -lock -home $testdir"
+ set env_cmd "berkdb_env -lock -home $testdir"
set local_env [eval $env_cmd]
error_check_good env_open [is_valid_env $local_env] TRUE
@@ -95,15 +99,15 @@ proc mlock_wait { } {
# remotely. We hold the locks for several seconds
# so that we can use timestamps to figure out if the
# other process waited.
- set locker 1
- set local_lock [$local_env lock_get write $locker object1]
+ set locker1 [$local_env lock_id]
+ set local_lock [$local_env lock_get write $locker1 object1]
error_check_good lock_get [is_valid_lock $local_lock $local_env] TRUE
# Now request a lock that we expect to hang; generate
# timestamps so we can tell if it actually hangs.
- set locker 2
+ set locker2 [send_cmd $f1 "$remote_env lock_id"]
set remote_lock [send_timed_cmd $f1 1 \
- "set lock \[$remote_env lock_get write $locker object1\]"]
+ "set lock \[$remote_env lock_get write $locker2 object1\]"]
# Now sleep before releasing lock
tclsleep 5
@@ -127,8 +131,7 @@ proc mlock_wait { } {
set ret [send_cmd $f1 "$remote_lock put"]
- set locker 1
- set local_lock [$local_env lock_get write $locker object1]
+ set local_lock [$local_env lock_get write $locker1 object1]
error_check_good lock_get:time \
[expr [expr [timestamp -r] - $start] > 2] 1
error_check_good lock_get:local \
@@ -139,6 +142,8 @@ proc mlock_wait { } {
error_check_good lock_put:remote $result 0
# Clean up remote
+ set result [send_cmd $f1 "$remote_env lock_id_free $locker2" ]
+ error_check_good remote_free_id $result 0
set ret [send_cmd $f1 "reset_env $remote_env"]
close $f1
@@ -146,6 +151,7 @@ proc mlock_wait { } {
# Now close up locally
set ret [$local_lock put]
error_check_good lock_put $ret 0
+ error_check_good lock_id_free [$local_env lock_id_free $locker1] 0
reset_env $local_env
}
diff --git a/db/test/lock003.tcl b/db/test/lock003.tcl
index 539b6d0ff..610ba41f6 100644
--- a/db/test/lock003.tcl
+++ b/db/test/lock003.tcl
@@ -1,48 +1,101 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: lock003.tcl,v 11.16 2000/08/25 14:21:51 sue Exp $
+# $Id: lock003.tcl,v 11.27 2003/09/16 19:01:37 sandstro Exp $
#
-# Exercise multi-process aspects of lock. Generate a bunch of parallel
-# testers that try to randomly obtain locks.
-proc lock003 { dir {iter 500} {max 1000} {procs 5} {ldegree 5} {objs 75} \
- {reads 65} {wait 1} {conflicts { 3 0 0 0 0 0 1 0 1 1}} {seeds {}} } {
+# TEST lock003
+# TEST Exercise multi-process aspects of lock. Generate a bunch of parallel
+# TEST testers that try to randomly obtain locks; make sure that the locks
+# TEST correctly protect corresponding objects.
+proc lock003 { {iter 500} {max 1000} {procs 5} } {
source ./include.tcl
+ global lock_curid
+ global lock_maxid
+
+ set ldegree 5
+ set objs 75
+ set reads 65
+ set wait 1
+ set conflicts { 0 0 0 0 0 1 0 1 1}
+ set seeds {}
puts "Lock003: Multi-process random lock test"
# Clean up after previous runs
- env_cleanup $dir
+ env_cleanup $testdir
# Open/create the lock region
- set e [berkdb env -create -lock -home $dir]
+ puts "\tLock003.a: Create environment"
+ set e [berkdb_env -create -lock -home $testdir]
error_check_good env_open [is_substr $e env] 1
+ $e lock_id_set $lock_curid $lock_maxid
- set ret [$e close]
- error_check_good env_close $ret 0
+ error_check_good env_close [$e close] 0
# Now spawn off processes
set pidlist {}
+
for { set i 0 } {$i < $procs} {incr i} {
if { [llength $seeds] == $procs } {
set s [lindex $seeds $i]
}
- puts "$tclsh_path\
- $test_path/wrap.tcl \
- lockscript.tcl $dir/$i.lockout\
- $dir $iter $objs $wait $ldegree $reads &"
+# puts "$tclsh_path\
+# $test_path/wrap.tcl \
+# lockscript.tcl $testdir/$i.lockout\
+# $testdir $iter $objs $wait $ldegree $reads &"
set p [exec $tclsh_path $test_path/wrap.tcl \
lockscript.tcl $testdir/lock003.$i.out \
- $dir $iter $objs $wait $ldegree $reads &]
+ $testdir $iter $objs $wait $ldegree $reads &]
lappend pidlist $p
}
- puts "Lock003: $procs independent processes now running"
- watch_procs 30 10800
+ puts "\tLock003.b: $procs independent processes now running"
+ watch_procs $pidlist 30 10800
+
+ # Check for test failure
+ set errstrings [eval findfail [glob $testdir/lock003.*.out]]
+ foreach str $errstrings {
+ puts "FAIL: error message in .out file: $str"
+ }
+
# Remove log files
for { set i 0 } {$i < $procs} {incr i} {
- fileremove -f $dir/$i.lockout
+ fileremove -f $testdir/lock003.$i.out
}
}
+
+# Create and destroy flag files to show we have an object locked, and
+# verify that the correct files exist or don't exist given that we've
+# just read or write locked a file.
+proc lock003_create { rw obj } {
+ source ./include.tcl
+
+ set pref $testdir/L3FLAG
+ set f [open $pref.$rw.[pid].$obj w]
+ close $f
+}
+
+proc lock003_destroy { obj } {
+ source ./include.tcl
+
+ set pref $testdir/L3FLAG
+ set f [glob -nocomplain $pref.*.[pid].$obj]
+ error_check_good l3_destroy [llength $f] 1
+ fileremove $f
+}
+
+proc lock003_vrfy { rw obj } {
+ source ./include.tcl
+
+ set pref $testdir/L3FLAG
+ if { [string compare $rw "write"] == 0 } {
+ set fs [glob -nocomplain $pref.*.*.$obj]
+ error_check_good "number of other locks on $obj" [llength $fs] 0
+ } else {
+ set fs [glob -nocomplain $pref.write.*.$obj]
+ error_check_good "number of write locks on $obj" [llength $fs] 0
+ }
+}
+
diff --git a/db/test/lock004.tcl b/db/test/lock004.tcl
index bef1700a4..b283fad57 100644
--- a/db/test/lock004.tcl
+++ b/db/test/lock004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: lock004.tcl,v 11.5 2002/04/25 19:30:30 sue Exp
+# $Id: lock004.tcl,v 11.6 2003/01/08 05:50:08 bostic Exp $
#
# TEST lock004
# TEST Test locker ids wraping around.
diff --git a/db/test/lock005.tcl b/db/test/lock005.tcl
index 33032afcc..497e07b80 100644
--- a/db/test/lock005.tcl
+++ b/db/test/lock005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: lock005.tcl,v 1.7 2002/08/08 15:38:07 bostic Exp
+# $Id: lock005.tcl,v 1.9 2003/04/16 17:50:48 ubell Exp $
#
# TEST lock005
# TEST Check that page locks are being released properly.
@@ -41,7 +41,7 @@ proc lock005 { } {
# ... and try to get a record from the first txn (should fail)
set ret [catch {$db get -txn $txn2 $recno1} res]
error_check_good dbget_wrong_record \
- [is_substr $res "Lock not granted"] 1
+ [is_substr $res "deadlock"] 1
# End transactions
error_check_good txn1commit [$txn1 commit] 0
diff --git a/db/test/lock006.tcl b/db/test/lock006.tcl
new file mode 100644
index 000000000..e8636fe1e
--- /dev/null
+++ b/db/test/lock006.tcl
@@ -0,0 +1,187 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: lock006.tcl,v 11.2 2003/09/04 23:41:11 bostic Exp $
+#
+# TEST lock006
+# TEST Test lock_vec interface. We do all the same things that
+# TEST lock001 does, using lock_vec instead of lock_get and lock_put,
+# TEST plus a few more things like lock-coupling.
+# TEST 1. Get and release one at a time.
+# TEST 2. Release with put_obj (all locks for a given locker/obj).
+# TEST 3. Release with put_all (all locks for a given locker).
+# TEST Regularly check lock_stat to verify all locks have been
+# TEST released.
+proc lock006 { } {
+ source ./include.tcl
+ global lock_curid
+ global lock_maxid
+
+ set save_curid $lock_curid
+ set save_maxid $lock_maxid
+
+ # Cleanup
+ env_cleanup $testdir
+
+ # Open the region we'll use for testing.
+ set eflags "-create -lock -home $testdir"
+ set env [eval {berkdb_env} $eflags]
+ error_check_good env [is_valid_env $env] TRUE
+ error_check_good lock_id_set \
+ [$env lock_id_set $lock_curid $lock_maxid] 0
+
+ puts "Lock006: test basic lock operations using lock_vec interface"
+ set locker [$env lock_id]
+ set modes {ng write read iwrite iread iwr}
+
+ # Get and release each type of lock.
+ puts "\tLock006.a: get and release one at a time"
+ foreach m $modes {
+ set obj obj$m
+ set lockp [$env lock_vec $locker "get $obj $m"]
+ error_check_good lock_vec_get:a [is_blocked $lockp] 0
+ error_check_good lock_vec_get:a [is_valid_lock $lockp $env] TRUE
+ error_check_good lock_vec_put:a \
+ [$env lock_vec $locker "put $lockp"] 0
+ }
+ how_many_locks 0 $env
+
+ # Get a bunch of locks for the same locker; these should work
+ set obj OBJECT
+ puts "\tLock006.b: Get many locks for 1 locker,\
+ release with put_all."
+ foreach m $modes {
+ set lockp [$env lock_vec $locker "get $obj $m"]
+ error_check_good lock_vec_get:b [is_blocked $lockp] 0
+ error_check_good lock_vec_get:b [is_valid_lock $lockp $env] TRUE
+ }
+ how_many_locks 6 $env
+ error_check_good release [$env lock_vec $locker put_all] 0
+ how_many_locks 0 $env
+
+ puts "\tLock006.c: Get many locks for 1 locker,\
+ release with put_obj."
+ foreach m $modes {
+ set lockp [$env lock_vec $locker "get $obj $m"]
+ error_check_good lock_vec_get:b [is_blocked $lockp] 0
+ error_check_good lock_vec_get:b [is_valid_lock $lockp $env] TRUE
+ }
+ error_check_good release [$env lock_vec $locker "put_obj $obj"] 0
+# how_many_locks 0 $env
+ how_many_locks 6 $env
+
+ # Get many locks for the same locker on more than one object.
+ # Release with put_all.
+ set obj2 OBJECT2
+ puts "\tLock006.d: Get many locks on 2 objects for 1 locker,\
+ release with put_all."
+ foreach m $modes {
+ set lockp [$env lock_vec $locker "get $obj $m"]
+ error_check_good lock_vec_get:b [is_blocked $lockp] 0
+ error_check_good lock_vec_get:b [is_valid_lock $lockp $env] TRUE
+ }
+ foreach m $modes {
+ set lockp [$env lock_vec $locker "get $obj2 $m"]
+ error_check_good lock_vec_get:b [is_blocked $lockp] 0
+ error_check_good lock_vec_get:b [is_valid_lock $lockp $env] TRUE
+ }
+ error_check_good release [$env lock_vec $locker put_all] 0
+# how_many_locks 0 $env
+ how_many_locks 6 $env
+
+ # Check that reference counted locks work.
+ puts "\tLock006.e: reference counted locks."
+ for {set i 0} { $i < 10 } {incr i} {
+ set lockp [$env lock_vec -nowait $locker "get $obj write"]
+ error_check_good lock_vec_get:c [is_blocked $lockp] 0
+ error_check_good lock_vec_get:c [is_valid_lock $lockp $env] TRUE
+ }
+ error_check_good put_all [$env lock_vec $locker put_all] 0
+# how_many_locks 0 $env
+ how_many_locks 6 $env
+
+ # Lock-coupling. Get a lock on object 1. Get a lock on object 2,
+ # release object 1, and so on.
+ puts "\tLock006.f: Lock-coupling."
+ set locker2 [$env lock_id]
+
+ foreach m { read write iwrite iread iwr } {
+ set lockp [$env lock_vec $locker "get OBJ0 $m"]
+ set iter 0
+ set nobjects 10
+ while { $iter < 3 } {
+ for { set i 1 } { $i <= $nobjects } { incr i } {
+ set lockv [$env lock_vec $locker \
+ "get OBJ$i $m" "put $lockp"]
+
+ # Make sure another locker can get an exclusive
+ # lock on the object just released.
+ set lock2p [$env lock_vec -nowait $locker2 \
+ "get OBJ[expr $i - 1] write" ]
+ error_check_good release_lock2 [$env lock_vec \
+ $locker2 "put $lock2p"] 0
+
+ # Make sure another locker can't get an exclusive
+ # lock on the object just locked.
+ catch {$env lock_vec -nowait $locker2 \
+ "get OBJ$i write"} ret
+ error_check_good not_granted \
+ [is_substr $ret "not granted"] 1
+
+ set lockp [lindex $lockv 0]
+ if { $i == $nobjects } {
+ incr iter
+ }
+ }
+ }
+ error_check_good lock_put [$env lock_vec $locker "put $lockp"] 0
+# how_many_locks 0 $env
+ how_many_locks 6 $env
+ }
+
+ # Finally try some failing locks. Set up a write lock on object.
+ foreach m { write } {
+ set lockp [$env lock_vec $locker "get $obj $m"]
+ error_check_good lock_vec_get:d [is_blocked $lockp] 0
+ error_check_good lock_vec_get:d [is_valid_lock $lockp $env] TRUE
+ }
+
+ # Change the locker
+ set newlocker [$env lock_id]
+ # Skip NO_LOCK.
+ puts "\tLock006.g: Change the locker, try to acquire read and write."
+ foreach m { read write iwrite iread iwr } {
+ catch {$env lock_vec -nowait $newlocker "get $obj $m"} ret
+ error_check_good lock_vec_get:d [is_substr $ret "not granted"] 1
+ }
+
+ # Now release original locks
+ error_check_good put_all [$env lock_vec $locker {put_all}] 0
+ error_check_good free_id [$env lock_id_free $locker] 0
+
+ # Now re-acquire blocking locks
+ puts "\tLock006.h: Re-acquire blocking locks."
+ foreach m { read write iwrite iread iwr } {
+ set lockp [$env lock_vec -nowait $newlocker "get $obj $m"]
+ error_check_good lock_get:e [is_valid_lock $lockp $env] TRUE
+ error_check_good lock_get:e [is_blocked $lockp] 0
+ }
+
+ # Now release new locks
+ error_check_good put_all [$env lock_vec $newlocker {put_all}] 0
+ error_check_good free_id [$env lock_id_free $newlocker] 0
+
+ error_check_good envclose [$env close] 0
+
+}
+
+# Blocked locks appear as lockmgrN.lockM\nBLOCKED
+proc is_blocked { l } {
+ if { [string compare $l BLOCKED ] == 0 } {
+ return 1
+ } else {
+ return 0
+ }
+}
diff --git a/db/test/lockscript.tcl b/db/test/lockscript.tcl
index bd07d80b5..ea582cc13 100644
--- a/db/test/lockscript.tcl
+++ b/db/test/lockscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: lockscript.tcl,v 11.11 2000/03/24 19:53:39 krinsky Exp $
+# $Id: lockscript.tcl,v 11.18 2003/01/08 05:50:10 bostic Exp $
#
# Random lock tester.
# Usage: lockscript dir numiters numobjs sleepint degree readratio
@@ -32,25 +32,28 @@ set numobjs [ lindex $argv 2 ]
set sleepint [ lindex $argv 3 ]
set degree [ lindex $argv 4 ]
set readratio [ lindex $argv 5 ]
-set locker [pid]
# Initialize random number generator
global rand_init
berkdb srand $rand_init
+
+catch { berkdb_env -create -lock -home $dir } e
+error_check_good env_open [is_substr $e env] 1
+catch { $e lock_id } locker
+error_check_good locker [is_valid_locker $locker] TRUE
+
puts -nonewline "Beginning execution for $locker: $numiters $numobjs "
puts "$sleepint $degree $readratio"
flush stdout
-set e [berkdb env -create -lock -home $dir]
-error_check_good env_open [is_substr $e env] 1
-
for { set iter 0 } { $iter < $numiters } { incr iter } {
set nlocks [berkdb random_int 1 $degree]
# We will always lock objects in ascending order to avoid
# deadlocks.
set lastobj 1
set locklist {}
+ set objlist {}
for { set lnum 0 } { $lnum < $nlocks } { incr lnum } {
# Pick lock parameters
set obj [berkdb random_int $lastobj $numobjs]
@@ -61,20 +64,46 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
} else {
set rw write
}
- puts "[timestamp] $locker $lnum: $rw $obj"
+ puts "[timestamp -c] $locker $lnum: $rw $obj"
# Do get; add to list
- set lockp [$e lock_get $rw $locker $obj]
+ catch {$e lock_get $rw $locker $obj} lockp
+ error_check_good lock_get [is_valid_lock $lockp $e] TRUE
+
+ # Create a file to flag that we've a lock of the given
+ # type, after making sure only other read locks exist
+ # (if we're read locking) or no other locks exist (if
+ # we're writing).
+ lock003_vrfy $rw $obj
+ lock003_create $rw $obj
+ lappend objlist [list $obj $rw]
+
lappend locklist $lockp
if {$lastobj > $numobjs} {
break
}
}
# Pick sleep interval
- tclsleep [berkdb random_int 1 $sleepint]
+ puts "[timestamp -c] $locker sleeping"
+ # We used to sleep 1 to $sleepint seconds. This makes the test
+ # run for hours. Instead, make it sleep for 10 to $sleepint * 100
+ # milliseconds, for a maximum sleep time of 0.5 s.
+ after [berkdb random_int 10 [expr $sleepint * 100]]
+ puts "[timestamp -c] $locker awake"
# Now release locks
- puts "[timestamp] $locker released locks"
+ puts "[timestamp -c] $locker released locks"
+
+ # Delete our locking flag files, then reverify. (Note that the
+ # locking flag verification function assumes that our own lock
+ # is not currently flagged.)
+ foreach pair $objlist {
+ set obj [lindex $pair 0]
+ set rw [lindex $pair 1]
+ lock003_destroy $obj
+ lock003_vrfy $rw $obj
+ }
+
release_list $locklist
flush stdout
}
@@ -82,7 +111,7 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
set ret [$e close]
error_check_good env_close $ret 0
-puts "[timestamp] $locker Complete"
+puts "[timestamp -c] $locker Complete"
flush stdout
exit
diff --git a/db/test/log001.tcl b/db/test/log001.tcl
index 732a539ff..163968915 100644
--- a/db/test/log001.tcl
+++ b/db/test/log001.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: log001.tcl,v 11.29 2002/04/30 20:27:56 sue Exp
+# $Id: log001.tcl,v 11.31 2003/01/08 05:50:11 bostic Exp $
#
# TEST log001
# TEST Read/write log records.
proc log001 { } {
global passwd
+ global has_crypto
global rand_init
berkdb srand $rand_init
@@ -17,10 +18,16 @@ proc log001 { } {
set max [expr 1024 * 128]
log001_body $max $iter 1
log001_body $max $iter 0
- log001_body $max $iter 1 "-encryptaes $passwd"
- log001_body $max $iter 0 "-encryptaes $passwd"
log001_body $max [expr $iter * 15] 1
log001_body $max [expr $iter * 15] 0
+
+ # Skip remainder of test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+
+ log001_body $max $iter 1 "-encryptaes $passwd"
+ log001_body $max $iter 0 "-encryptaes $passwd"
log001_body $max [expr $iter * 15] 1 "-encryptaes $passwd"
log001_body $max [expr $iter * 15] 0 "-encryptaes $passwd"
}
diff --git a/db/test/log002.tcl b/db/test/log002.tcl
index 6b0604ea8..cec46acf8 100644
--- a/db/test/log002.tcl
+++ b/db/test/log002.tcl
@@ -1,17 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: log002.tcl,v 11.28 2002/04/29 20:07:54 sue Exp
+# $Id: log002.tcl,v 11.30 2003/04/18 14:39:10 sandstro Exp $
#
-
# TEST log002
# TEST Tests multiple logs
# TEST Log truncation
# TEST LSN comparison and file functionality.
proc log002 { } {
source ./include.tcl
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
puts "Log002: Multiple log test w/trunc, file, compare functionality"
diff --git a/db/test/log003.tcl b/db/test/log003.tcl
index 6dec40702..b0140b57b 100644
--- a/db/test/log003.tcl
+++ b/db/test/log003.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: log003.tcl,v 11.28 2002/04/29 20:07:54 sue Exp
+# $Id: log003.tcl,v 11.30 2003/04/18 14:39:10 sandstro Exp $
#
-
# TEST log003
# TEST Verify that log_flush is flushing records correctly.
proc log003 { } {
source ./include.tcl
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
puts "Log003: Verify log_flush behavior"
diff --git a/db/test/log004.tcl b/db/test/log004.tcl
index 6524d8e59..6b983dc51 100644
--- a/db/test/log004.tcl
+++ b/db/test/log004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: log004.tcl,v 11.28 2002/04/29 20:07:54 sue Exp
+# $Id: log004.tcl,v 11.29 2003/01/08 05:50:23 bostic Exp $
#
# TEST log004
diff --git a/db/test/log005.tcl b/db/test/log005.tcl
index d890295c3..0ed9c133d 100644
--- a/db/test/log005.tcl
+++ b/db/test/log005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: log005.tcl,v 11.1 2002/05/30 22:16:49 bostic Exp
+# $Id: log005.tcl,v 11.2 2003/01/08 05:50:24 bostic Exp $
#
# TEST log005
# TEST Check that log file sizes can change on the fly.
diff --git a/db/test/log006.tcl b/db/test/log006.tcl
new file mode 100644
index 000000000..4b964a73d
--- /dev/null
+++ b/db/test/log006.tcl
@@ -0,0 +1,226 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: log006.tcl,v 11.5 2003/09/04 23:41:11 bostic Exp $
+#
+# TEST log006
+# TEST Test log file auto-remove.
+# TEST Test normal operation.
+# TEST Test a long-lived txn.
+# TEST Test log_archive flags.
+# TEST Test db_archive flags.
+# TEST Test turning on later.
+# TEST Test setting via DB_CONFIG.
+proc log006 { } {
+ source ./include.tcl
+
+ puts "Log006: Check auto-remove of log files."
+ env_cleanup $testdir
+
+ # Open the environment, set auto-remove flag. Use smaller log
+ # files to make more of them.
+ puts "\tLog006.a: open environment, populate database."
+ set env [berkdb_env_noerr -log_remove \
+ -create -home $testdir -log_buffer 10000 -log_max 100000 -txn]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ log006_put $testdir $env
+
+ #
+ # Check log files. Using the small log file size, we should
+ # have made a lot of log files, check that we have a reasonable
+ # number left, less than 12.
+ #
+ set log_expect 12
+ puts "\tLog006.b: Check log files removed."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ set remlen [llength $lfiles]
+ error_check_good lfiles_len [expr $remlen < $log_expect] 1
+ error_check_good lfiles [lsearch $lfiles $testdir/log.0000000001] -1
+ # Save last log file for later check.
+ # Files may not be sorted, sort them and then save the last filename.
+ set oldfile [lindex [lsort -ascii $lfiles] end]
+
+ #
+ # Rerun log006_put with a long lived txn. This unresolved txn will
+ # mean that no files will be able to be removed.
+ #
+ puts "\tLog006.c: Rerun put loop with long-lived transaction."
+ set txn [$env txn]
+ error_check_good txn [is_valid_txn $txn $env] TRUE
+ log006_put $testdir $env
+
+ puts "\tLog006.d: Check log files not removed."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good lfiles2_len [expr [llength $lfiles] > $remlen] 1
+ set lfiles [lsort -ascii $lfiles]
+ error_check_good lfiles_chk [lsearch $lfiles $oldfile] 0
+ error_check_good txn_commit [$txn commit] 0
+ error_check_good ckp1 [$env txn_checkpoint] 0
+ error_check_good ckp2 [$env txn_checkpoint] 0
+
+ puts "\tLog006.e: Run log_archive with -auto_remove flag."
+ # When we're done, only the last log file should remain.
+ set lfiles [glob -nocomplain $testdir/log.*]
+ set oldfile [lindex [lsort -ascii $lfiles] end]
+
+ # First, though, verify mutual-exclusiveness of flag.
+ foreach f {-arch_abs -arch_data -arch_log} {
+ set stat [catch {eval $env log_archive -arch_remove $f} ret]
+ error_check_good stat $stat 1
+ error_check_good la:$f:fail [is_substr $ret "illegal flag"] 1
+ }
+ # Now run it for real.
+ set stat [catch {$env log_archive -arch_remove} ret]
+ error_check_good stat $stat 0
+
+ puts "\tLog006.f: Check only $oldfile remains."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good 1log [llength $lfiles] 1
+ error_check_good lfiles_chk [lsearch $lfiles $oldfile] 0
+
+ puts "\tLog006.g: Rerun put loop with long-lived transaction."
+ set txn [$env txn]
+ error_check_good txn [is_valid_txn $txn $env] TRUE
+ log006_put $testdir $env
+ error_check_good txn_commit [$txn commit] 0
+ error_check_good ckp1 [$env txn_checkpoint] 0
+ error_check_good ckp2 [$env txn_checkpoint] 0
+ error_check_good env_close [$env close] 0
+
+ #
+ # Test db_archive's auto-remove flag.
+ # After we are done, only the last log file should be there.
+ # First check that the delete flag cannot be used with any
+ # of the other flags.
+ #
+ puts "\tLog006.h: Run db_archive with delete flag."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ set oldfile [lindex [lsort -ascii $lfiles] end]
+ #
+ # Again, first check illegal flag combinations with db_archive.
+ #
+ foreach f {-a -l -s} {
+ set stat [catch {exec $util_path/db_archive $f -d -h $testdir} \
+ ret]
+ error_check_good stat $stat 1
+ error_check_good la:fail [is_substr $ret "illegal flag"] 1
+ }
+ set stat [catch {exec $util_path/db_archive -d -h $testdir} ret]
+ error_check_good stat $stat 0
+
+ puts "\tLog006.i: Check only $oldfile remains."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good 1log [llength $lfiles] 1
+ error_check_good lfiles_chk [lsearch $lfiles $oldfile] 0
+
+ #
+ # Now rerun some parts with other env settings tested.
+ #
+ env_cleanup $testdir
+
+ # First test that the option can be turned on later.
+ # 1. Open env w/o auto-remove.
+ # 2. Run log006_put.
+ # 3. Verify log files all there.
+ # 4. Call env set_flags to turn it on.
+ # 5. Run log006_put.
+ # 6. Verify log files removed.
+ puts "\tLog006.j: open environment w/o auto remove, populate database."
+ set env [berkdb_env -recover \
+ -create -home $testdir -log_buffer 10000 -log_max 100000 -txn]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ log006_put $testdir $env
+
+ puts "\tLog006.k: Check log files not removed."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good lfiles2_len [expr [llength $lfiles] > $remlen] 1
+ set lfiles [lsort -ascii $lfiles]
+ error_check_good lfiles [lsearch $lfiles $testdir/log.0000000001] 0
+
+ puts "\tLog006.l: turn on auto remove and repopulate database."
+ error_check_good sf [$env set_flags -log_remove on] 0
+
+ log006_put $testdir $env
+
+ puts "\tLog006.m: Check log files removed."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good lfiles_len [expr [llength $lfiles] < $log_expect] 1
+ error_check_good lfiles [lsearch $lfiles $testdir/log.0000000001] -1
+ error_check_good env_close [$env close] 0
+
+ #
+ # Configure via DB_CONFIG.
+ #
+ env_cleanup $testdir
+
+ puts "\tLog006.n: Test setting via DB_CONFIG."
+ # Open the environment, w/o remove flag, but DB_CONFIG.
+ set cid [open $testdir/DB_CONFIG w]
+ puts $cid "set_flags db_log_autoremove"
+ close $cid
+ set env [berkdb_env -recover \
+ -create -home $testdir -log_buffer 10000 -log_max 100000 -txn]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ log006_put $testdir $env
+
+ puts "\tLog006.o: Check log files removed."
+ set lfiles [glob -nocomplain $testdir/log.*]
+ error_check_good lfiles_len [expr [llength $lfiles] < $log_expect] 1
+ error_check_good lfiles [lsearch $lfiles $testdir/log.0000000001] -1
+ error_check_good env_close [$env close] 0
+
+}
+
+#
+# Modified from test003.
+#
+proc log006_put { testdir env } {
+
+ set testfile log006.db
+ set limit 100
+
+ cleanup $testdir $env
+ #
+ # Specify a pagesize so we can control how many log files
+ # are created and left over.
+ #
+ set db [eval {berkdb_open_noerr -create -mode 0644} \
+ -env $env -auto_commit -pagesize 8192 -btree $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set file_list [get_file_list]
+ if { [llength $file_list] > $limit } {
+ set file_list [lrange $file_list 1 $limit]
+ }
+ set len [llength $file_list]
+ set count 0
+ foreach f $file_list {
+ if { [string compare [file type $f] "file"] != 0 } {
+ continue
+ }
+ set key $f
+ # Should really catch errors
+ set fid [open $f r]
+ fconfigure $fid -translation binary
+ set data [read $fid]
+ close $fid
+
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set ret [eval {$db put} $txn {$key $data}]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ if { $count % 10 == 0 } {
+ error_check_good ckp($count) [$env txn_checkpoint] 0
+ }
+
+ incr count
+ }
+ error_check_good db_close [$db close] 0
+}
diff --git a/db/test/logtrack.list b/db/test/logtrack.list
index ba7f34a6d..eff97b151 100644
--- a/db/test/logtrack.list
+++ b/db/test/logtrack.list
@@ -1,27 +1,22 @@
-PREFIX crdel
-BEGIN fileopen 141
+PREFIX __crdel
BEGIN metasub 142
-BEGIN metapage 143
-DEPRECATED old_delete 144
-BEGIN rename 145
-BEGIN delete 146
-PREFIX db
+PREFIX __db
BEGIN addrem 41
-DEPRECATED split 42
BEGIN big 43
BEGIN ovref 44
BEGIN relink 45
-DEPRECATED addpage 46
BEGIN debug 47
BEGIN noop 48
-PREFIX bam
-BEGIN pg_alloc 51
-DEPRECATED pg_alloc1 60
-BEGIN pg_free 52
-DEPRECATED pg_free1 61
-DEPRECATED split1 53
+BEGIN pg_alloc 49
+BEGIN pg_free 50
+BEGIN cksum 51
+BEGIN pg_freedata 52
+BEGIN pg_prepare 53
+BEGIN pg_new 54
+PREFIX __dbreg
+BEGIN register 2
+PREFIX __bam
BEGIN split 62
-DEPRECATED rsplit1 54
BEGIN rsplit 63
BEGIN adj 55
BEGIN cadjust 56
@@ -30,39 +25,25 @@ BEGIN repl 58
BEGIN root 59
BEGIN curadj 64
BEGIN rcuradj 65
-PREFIX ham
+PREFIX __ham
BEGIN insdel 21
BEGIN newpage 22
-DEPRECATED splitmeta 23
BEGIN splitdata 24
BEGIN replace 25
-DEPRECATED newpgno 26
-DEPRECATED ovfl 27
BEGIN copypage 28
BEGIN metagroup 29
-DEPRECATED groupalloc1 30
-DEPRECATED groupalloc2 31
BEGIN groupalloc 32
BEGIN curadj 33
BEGIN chgpg 34
-PREFIX log
-DEPRECATED register1 1
-BEGIN register 2
-PREFIX qam
-BEGIN inc 76
-BEGIN incfirst 77
-BEGIN mvptr 78
+PREFIX __qam
+BEGIN incfirst 84
+BEGIN mvptr 85
BEGIN del 79
BEGIN add 80
-BEGIN delete 81
-BEGIN rename 82
BEGIN delext 83
-PREFIX txn
-DEPRECATED old_regop 6
+PREFIX __txn
BEGIN regop 10
-DEPRECATED old_ckp 7
BEGIN ckp 11
-DEPRECATED xa_regop_old 8
-BEGIN xa_regop 13
-DEPRECATED child_old 9
BEGIN child 12
+BEGIN xa_regop 13
+BEGIN recycle 14
diff --git a/db/test/logtrack.tcl b/db/test/logtrack.tcl
index cea4912e6..2dbb82c71 100644
--- a/db/test/logtrack.tcl
+++ b/db/test/logtrack.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: logtrack.tcl,v 11.6 2000/10/27 15:30:39 krinsky Exp $
+# $Id: logtrack.tcl,v 11.13 2003/07/16 13:48:05 bostic Exp $
#
# logtrack.tcl: A collection of routines, formerly implemented in Perl
# as log.pl, to track which log record types the test suite hits.
@@ -35,20 +35,26 @@ proc logtrack_init { } {
# records were seen.
proc logtrack_read { dirname } {
global ltsname tmpname util_path
+ global encrypt passwd
set seendb [berkdb_open $ltsname]
error_check_good seendb_open [is_valid_db $seendb] TRUE
file delete -force $tmpname
- set ret [catch {exec $util_path/db_printlog -N \
- -h "$dirname" > $tmpname} res]
+ set pargs " -N -h $dirname "
+ if { $encrypt > 0 } {
+ append pargs " -P $passwd "
+ }
+ set ret [catch {eval exec $util_path/db_printlog $pargs > $tmpname} res]
error_check_good printlog $ret 0
error_check_good tmpfile_exists [file exists $tmpname] 1
set f [open $tmpname r]
while { [gets $f record] >= 0 } {
- regexp {\[[^\]]*\]\[[^\]]*\]([^\:]*)\:} $record whl name
- error_check_good seendb_put [$seendb put $name ""] 0
+ set r [regexp {\[[^\]]*\]\[[^\]]*\]([^\:]*)\:} $record whl name]
+ if { $r == 1 } {
+ error_check_good seendb_put [$seendb put $name ""] 0
+ }
}
close $f
file delete -force $tmpname
@@ -73,7 +79,7 @@ proc logtrack_summary { } {
set pref ""
while { [gets $f line] >= 0 } {
# Get the keyword, the first thing on the line:
- # BEGIN/DEPRECATED/PREFIX
+ # BEGIN/DEPRECATED/IGNORED/PREFIX
set keyword [lindex $line 0]
if { [string compare $keyword PREFIX] == 0 } {
@@ -92,7 +98,8 @@ proc logtrack_summary { } {
error_check_good exist_put [$existdb put \
${pref}_[lindex $line 1] ""] 0
- } elseif { [string compare $keyword DEPRECATED] == 0 } {
+ } elseif { [string compare $keyword DEPRECATED] == 0 ||
+ [string compare $keyword IGNORED] == 0 } {
error_check_good deprec_put [$deprecdb put \
${pref}_[lindex $line 1] ""] 0
}
@@ -103,7 +110,7 @@ proc logtrack_summary { } {
while { [llength [set dbt [$ec get -next]]] != 0 } {
set rec [lindex [lindex $dbt 0] 0]
if { [$seendb count $rec] == 0 } {
- puts "FAIL: log record type $rec not seen"
+ puts "WARNING: log record type $rec: not tested"
}
}
error_check_good exist_curs_close [$ec close] 0
@@ -114,9 +121,10 @@ proc logtrack_summary { } {
set rec [lindex [lindex $dbt 0] 0]
if { [$existdb count $rec] == 0 } {
if { [$deprecdb count $rec] == 0 } {
- puts "FAIL: unknown log record type $rec seen"
+ puts "WARNING: log record type $rec: unknown"
} else {
- puts "FAIL: deprecated log record type $rec seen"
+ puts \
+ "WARNING: log record type $rec: deprecated"
}
}
}
diff --git a/db/test/mdbscript.tcl b/db/test/mdbscript.tcl
index 368aad371..fca46dbcd 100644
--- a/db/test/mdbscript.tcl
+++ b/db/test/mdbscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: mdbscript.tcl,v 11.23 2000/10/09 02:26:11 krinsky Exp $
+# $Id: mdbscript.tcl,v 11.32 2003/09/29 18:19:19 sandstro Exp $
#
# Process script for the multi-process db tester.
@@ -78,24 +78,30 @@ puts "$procid process id"
puts "$procs processes"
set klock NOLOCK
+
+# Note: all I/O operations, and especially flush, are expensive
+# on Win2000 at least with Tcl version 8.3.2. So we'll avoid
+# flushes in the main part of the loop below.
flush stdout
-set dbenv [berkdb env -create -cdb -home $dir]
-#set dbenv [berkdb env -create -cdb -log -home $dir]
+set dbenv [berkdb_env -create -cdb -home $dir]
+#set dbenv [berkdb_env -create -cdb -log -home $dir]
error_check_good dbenv [is_valid_env $dbenv] TRUE
+set locker [ $dbenv lock_id ]
+
set db [berkdb_open -env $dbenv -create -mode 0644 $omethod $file]
error_check_good dbopen [is_valid_db $db] TRUE
# Init globals (no data)
set nkeys [db_init $db 0]
puts "Initial number of keys: $nkeys"
-error_check_good db_init $nkeys $nentries
tclsleep 5
proc get_lock { k } {
global dbenv
global procid
+ global locker
global klock
global DB_LOCK_WRITE
global DB_LOCK_NOWAIT
@@ -103,7 +109,7 @@ proc get_lock { k } {
global exception_handled
# Make sure that the key isn't in the middle of
# a delete operation
- if {[catch {$dbenv lock_get -nowait write $procid $k} klock] != 0 } {
+ if {[catch {$dbenv lock_get -nowait write $locker $k} klock] != 0 } {
set exception_handled 1
error_check_good \
@@ -117,6 +123,23 @@ proc get_lock { k } {
return 0
}
+# If we are renumbering, then each time we delete an item, the number of
+# items in the file is temporarily decreased, so the highest record numbers
+# do not exist. To make sure this doesn't happen, we never generate the
+# highest few record numbers as keys.
+#
+# For record-based methods, record numbers begin at 1, while for other keys,
+# we begin at 0 to index into an array.
+proc rand_key { method nkeys renum procs} {
+ if { $renum == 1 } {
+ return [berkdb random_int 1 [expr $nkeys - $procs]]
+ } elseif { [is_record_based $method] == 1 } {
+ return [berkdb random_int 1 $nkeys]
+ } else {
+ return [berkdb random_int 0 [expr $nkeys - 1]]
+ }
+}
+
# On each iteration we're going to randomly pick a key.
# 1. We'll either get it (verifying that its contents are reasonable).
# 2. Put it (using an overwrite to make the data be datastr:ID).
@@ -136,7 +159,7 @@ set dlen [string length $datastr]
for { set i 0 } { $i < $iter } { incr i } {
set op [berkdb random_int 0 5]
puts "iteration $i operation $op"
- flush stdout
+ set close_cursor 0
if {[catch {
switch $op {
0 {
@@ -337,7 +360,6 @@ for { set i 0 } { $i < $iter } { incr i } {
set fnl [string first "\n" $errorInfo]
set theError [string range $errorInfo 0 [expr $fnl - 1]]
- flush stdout
if { [string compare $klock NOLOCK] != 0 } {
catch {$klock put}
}
@@ -348,11 +370,11 @@ for { set i 0 } { $i < $iter } { incr i } {
if {[string first FAIL $theError] == 0 && \
$exception_handled != 1} {
+ flush stdout
error "FAIL:[timestamp] test042: key $k: $theError"
}
set exception_handled 0
} else {
- flush stdout
if { [string compare $klock NOLOCK] != 0 } {
error_check_good "$klock put" [$klock put] 0
set klock NOLOCK
@@ -360,14 +382,11 @@ for { set i 0 } { $i < $iter } { incr i } {
}
}
-if {[catch {$db close} ret] != 0 } {
- error_check_good close [is_substr $errorInfo "DB_INCOMPLETE"] 1
- puts "Warning: sync incomplete on close ([pid])"
-} else {
- error_check_good close $ret 0
-}
-$dbenv close
+error_check_good db_close_catch [catch {$db close} ret] 0
+error_check_good db_close $ret 0
+error_check_good dbenv_close [$dbenv close] 0
+flush stdout
exit
puts "[timestamp] [pid] Complete"
diff --git a/db/test/memp001.tcl b/db/test/memp001.tcl
index 3ac80a29d..9eb128da2 100644
--- a/db/test/memp001.tcl
+++ b/db/test/memp001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: memp001.tcl,v 11.50 2002/08/07 16:46:28 bostic Exp
+# $Id: memp001.tcl,v 11.52 2003/08/27 13:51:34 sue Exp $
#
# TEST memp001
@@ -174,7 +174,7 @@ proc mem_chk { flags } {
env_cleanup $testdir
set cachearg " -cachesize {0 400000 3}"
- set ret [catch {eval {berkdb_env -create -mode 0644}\
+ set ret [catch {eval {berkdb_env_noerr -create -mode 0644}\
$cachearg {-region_init -home $testdir} $flags} env]
if { $ret != 0 } {
# If the env open failed, it may be because we're on a platform
diff --git a/db/test/memp002.tcl b/db/test/memp002.tcl
index 7c028a8a2..367dda00c 100644
--- a/db/test/memp002.tcl
+++ b/db/test/memp002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: memp002.tcl,v 11.46 2002/04/30 17:26:06 sue Exp
+# $Id: memp002.tcl,v 11.48 2003/01/08 05:50:32 bostic Exp $
#
# TEST memp002
@@ -56,7 +56,7 @@ proc memp002_body { flags } {
lappend pidlist $p
}
puts "Memp002: $procs independent processes now running"
- watch_procs
+ watch_procs $pidlist
reset_env $e
}
diff --git a/db/test/memp003.tcl b/db/test/memp003.tcl
index d6fc765fc..1ef7b720c 100644
--- a/db/test/memp003.tcl
+++ b/db/test/memp003.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: memp003.tcl,v 11.46 2002/04/30 17:26:06 sue Exp
+# $Id: memp003.tcl,v 11.50 2003/05/22 13:32:10 bostic Exp $
#
-
# TEST memp003
# TEST Test reader-only/writer process combinations; we use the access methods
# TEST for testing.
proc memp003 { } {
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
#
# Multiple processes not supported by private memory so don't
# run memp003_body with -private.
@@ -42,7 +43,7 @@ proc memp003_body { flags } {
error_check_good dbenv [is_valid_env $dbenv] TRUE
# First open and create the file.
- set db [berkdb_open -env $dbenv -create -truncate \
+ set db [berkdb_open -env $dbenv -create \
-mode 0644 -pagesize $psize -btree $testfile]
error_check_good dbopen/RW [is_valid_db $db] TRUE
diff --git a/db/test/memp004.tcl b/db/test/memp004.tcl
new file mode 100644
index 000000000..2c47eb089
--- /dev/null
+++ b/db/test/memp004.tcl
@@ -0,0 +1,83 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: memp004.tcl,v 1.4 2003/01/20 05:07:07 mjc Exp $
+#
+
+# TEST memp004
+# TEST Test that small read-only databases are mapped into memory.
+proc memp004 { } {
+ global is_qnx_test
+ source ./include.tcl
+
+ puts "Memp004: Test of memory-mapped read-only databases"
+
+ if { $is_qnx_test } {
+ puts "Memp004: skipping for QNX"
+ return
+ }
+
+ env_cleanup $testdir
+ set testfile memp004.db
+
+ # Create an environment.
+ puts "memp004.a: Create an environment and database"
+ set dbenv [eval {berkdb_env -create -home $testdir -private}]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+ set db [berkdb_open -env $dbenv -create -mode 0644 -btree $testfile]
+ error_check_good dbopen/$testfile/RW [is_valid_db $db] TRUE
+
+ # Put each key/data pair.
+ set did [open $dict]
+ set keys ""
+ set count 0
+ while { [gets $did str] != -1 && $count < 1000 } {
+ lappend keys $str
+
+ set ret [eval {$db put} {$str $str}]
+ error_check_good put $ret 0
+
+ incr count
+ }
+ close $did
+ error_check_good close [$db close] 0
+
+ # Discard the environment.
+ error_check_good close [$dbenv close] 0
+
+ puts "memp004.b: Re-create the environment and open database read-only"
+ set dbenv [eval {berkdb_env -create -home $testdir}]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+ set db [berkdb_open -env $dbenv -rdonly $testfile]
+ error_check_good dbopen/$testfile/RO [is_substr $db db] 1
+
+ # Read a couple of keys.
+ set c [eval {$db cursor}]
+ for { set i 0 } { $i < 500 } { incr i } {
+ set ret [$c get -next]
+ }
+
+ puts "memp004.c: Check mpool statistics"
+ set tmp [memp004_stat $dbenv "Pages mapped into address space"]
+ error_check_good "mmap check: $tmp >= 500" [expr $tmp >= 500] 1
+
+ error_check_good db_close [$db close] 0
+ reset_env $dbenv
+}
+
+# memp004_stat --
+# Return the current mpool statistics.
+proc memp004_stat { env s } {
+ set stat [$env mpool_stat]
+ foreach statpair $stat {
+ set statmsg [lindex $statpair 0]
+ set statval [lindex $statpair 1]
+ if {[is_substr $statmsg $s] != 0} {
+ return $statval
+ }
+ }
+ puts "FAIL: memp004: stat string $s not found"
+ return 0
+}
diff --git a/db/test/mpoolscript.tcl b/db/test/mpoolscript.tcl
index 8695254c2..aab81745b 100644
--- a/db/test/mpoolscript.tcl
+++ b/db/test/mpoolscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: mpoolscript.tcl,v 11.12 2000/05/05 15:23:47 sue Exp $
+# $Id: mpoolscript.tcl,v 11.17 2003/01/08 05:50:40 bostic Exp $
#
# Random multiple process mpool tester.
# Usage: mpoolscript dir id numiters numfiles numpages sleepint
@@ -61,7 +61,7 @@ foreach i $pgsizes {
}
set cache [list 0 [expr $maxprocs * ([lindex $pgsizes 0] + $max)] 1]
-set env_cmd {berkdb env -lock -cachesize $cache -home $dir}
+set env_cmd {berkdb_env -lock -cachesize $cache -home $dir}
set e [eval $env_cmd $flags]
error_check_good env_open [is_valid_env $e] TRUE
@@ -78,7 +78,8 @@ foreach psize $pgsizes {
puts "Establishing long-term pin on file 0 page $id for process $id"
# Set up the long-pin page
-set lock [$e lock_get write $id 0:$id]
+set locker [$e lock_id]
+set lock [$e lock_get write $locker 0:$id]
error_check_good lock_get [is_valid_lock $lock $e] TRUE
set mp [lindex $mpools 0]
@@ -109,7 +110,7 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
set mpf [lindex $mpools $fnum]
for { set p 0 } { $p < $numpages } { incr p } {
- set lock [$e lock_get write $id $fnum:$p]
+ set lock [$e lock_get write $locker $fnum:$p]
error_check_good lock_get:$fnum:$p \
[is_valid_lock $lock $e] TRUE
diff --git a/db/test/mutex001.tcl b/db/test/mutex001.tcl
index f6a36c58b..1d01afb82 100644
--- a/db/test/mutex001.tcl
+++ b/db/test/mutex001.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: mutex001.tcl,v 11.23 2002/04/30 19:37:36 sue Exp
+# $Id: mutex001.tcl,v 11.24 2003/01/08 05:50:42 bostic Exp $
#
# TEST mutex001
diff --git a/db/test/mutex002.tcl b/db/test/mutex002.tcl
index c8bf7d17e..ba6fb536a 100644
--- a/db/test/mutex002.tcl
+++ b/db/test/mutex002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: mutex002.tcl,v 11.23 2002/04/30 19:37:36 sue Exp
+# $Id: mutex002.tcl,v 11.24 2003/01/08 05:50:46 bostic Exp $
#
# TEST mutex002
diff --git a/db/test/mutex003.tcl b/db/test/mutex003.tcl
index b6503ed1b..e40f9b067 100644
--- a/db/test/mutex003.tcl
+++ b/db/test/mutex003.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: mutex003.tcl,v 11.23 2002/04/30 19:37:37 sue Exp
+# $Id: mutex003.tcl,v 11.25 2003/01/08 05:50:50 bostic Exp $
#
# TEST mutex003
@@ -32,7 +32,7 @@ proc mutex003 { } {
# Now spawn off processes
puts "\tMutex003.b: Create $procs processes"
- set proclist {}
+ set pidlist {}
for { set i 0 } {$i < $procs} {incr i} {
puts "$tclsh_path\
$test_path/mutexscript.tcl $testdir\
@@ -40,10 +40,10 @@ proc mutex003 { } {
set p [exec $tclsh_path $test_path/wrap.tcl \
mutexscript.tcl $testdir/$i.mutexout $testdir\
$iter $nmutex $wait $mdegree &]
- lappend proclist $p
+ lappend pidlist $p
}
puts "\tMutex003.c: $procs independent processes now running"
- watch_procs
+ watch_procs $pidlist
error_check_good env_close [$env close] 0
# Remove output files
for { set i 0 } {$i < $procs} {incr i} {
diff --git a/db/test/mutexscript.tcl b/db/test/mutexscript.tcl
index 9a49e4711..d761acb7e 100644
--- a/db/test/mutexscript.tcl
+++ b/db/test/mutexscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: mutexscript.tcl,v 11.12 2000/11/21 22:14:56 dda Exp $
+# $Id: mutexscript.tcl,v 11.17 2003/01/08 05:50:53 bostic Exp $
#
# Random mutex tester.
# Usage: mutexscript dir numiters mlocks sleepint degree
@@ -43,7 +43,7 @@ puts " $numiters $nmutex $sleepint $degree"
flush stdout
# Open the environment and the mutex
-set e [berkdb env -create -mode 0644 -lock -home $dir]
+set e [berkdb_env -create -mode 0644 -lock -home $dir]
error_check_good evn_open [is_valid_env $e] TRUE
set mutex [$e mutex 0644 $nmutex]
@@ -73,8 +73,8 @@ for { set iter 0 } { $iter < $numiters } { incr iter } {
}
}
- # Pick sleep interval
- tclsleep [ berkdb random_int 1 $sleepint ]
+ # Sleep for 10 to (100*$sleepint) ms.
+ after [berkdb random_int 10 [expr $sleepint * 100]]
# Now release locks
foreach i $mlist {
diff --git a/db/test/ndbm.tcl b/db/test/ndbm.tcl
index a6286de02..7074d7aa3 100644
--- a/db/test/ndbm.tcl
+++ b/db/test/ndbm.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: ndbm.tcl,v 11.13 2000/08/25 14:21:51 sue Exp $
+# $Id: ndbm.tcl,v 11.17 2003/01/08 05:50:56 bostic Exp $
#
# Historic NDBM interface test.
# Use the first 1000 entries from the dictionary.
@@ -80,11 +80,14 @@ proc ndbm { { nentries 1000 } } {
error_check_good NDBM:diff($t3,$t2) \
[filecmp $t3 $t2] 0
- puts "\tNDBM.c: pagf/dirf test"
- set fd [$db pagfno]
- error_check_bad pagf $fd -1
- set fd [$db dirfno]
- error_check_bad dirf $fd -1
+ # File descriptors tests won't work under Windows.
+ if { $is_windows_test != 1 } {
+ puts "\tNDBM.c: pagf/dirf test"
+ set fd [$db pagfno]
+ error_check_bad pagf $fd -1
+ set fd [$db dirfno]
+ error_check_bad dirf $fd -1
+ }
puts "\tNDBM.d: close, open, and dump file"
diff --git a/db/test/parallel.tcl b/db/test/parallel.tcl
index 919dcaae9..e9c4c1df5 100644
--- a/db/test/parallel.tcl
+++ b/db/test/parallel.tcl
@@ -1,6 +1,9 @@
# Code to load up the tests in to the Queue database
-# Id: parallel.tcl,v 11.28 2002/09/05 17:23:06 sandstro Exp
+# $Id: parallel.tcl,v 11.43 2003/10/24 20:43:19 sandstro Exp $
proc load_queue { file {dbdir RUNQUEUE} nitems } {
+ global serial_tests
+ global num_serial
+ global num_parallel
puts -nonewline "Loading run queue with $nitems items..."
flush stdout
@@ -8,9 +11,15 @@ proc load_queue { file {dbdir RUNQUEUE} nitems } {
set env [berkdb_env -create -lock -home $dbdir]
error_check_good dbenv [is_valid_env $env] TRUE
- set db [eval {berkdb_open -env $env -create -truncate \
- -mode 0644 -len 120 -queue queue.db} ]
+ # Open two databases, one for tests that may be run
+ # in parallel, the other for tests we want to run
+ # while only a single process is testing.
+ set db [eval {berkdb_open -env $env -create \
+ -mode 0644 -len 200 -queue queue.db} ]
error_check_good dbopen [is_valid_db $db] TRUE
+ set serialdb [eval {berkdb_open -env $env -create \
+ -mode 0644 -len 200 -queue serialqueue.db} ]
+ error_check_good dbopen [is_valid_db $serialdb] TRUE
set fid [open $file]
@@ -27,9 +36,26 @@ proc load_queue { file {dbdir RUNQUEUE} nitems } {
puts -nonewline "randomizing..."
flush stdout
for { set i 0 } { $i < $count } { incr i } {
- set j [berkdb random_int $i [expr $count - 1]]
-
set tmp $testarr($i)
+
+ # RPC test is very long so force it to run first
+ # in full runs. If we find 'r rpc' as we walk the
+ # array, arrange to put it in slot 0 ...
+ if { [is_substr $tmp "r rpc"] == 1 && \
+ [string match $nitems ALL] } {
+ set j 0
+ } else {
+ set j [berkdb random_int $i [expr $count - 1]]
+ }
+ # ... and if 'r rpc' is selected to be swapped with the
+ # current item in the array, skip the swap. If we
+ # did the swap and moved to the next item, "r rpc" would
+ # never get moved to slot 0.
+ if { [is_substr $testarr($j) "r rpc"] && \
+ [string match $nitems ALL] } {
+ continue
+ }
+
set testarr($i) $testarr($j)
set testarr($j) $tmp
}
@@ -42,15 +68,29 @@ proc load_queue { file {dbdir RUNQUEUE} nitems } {
puts "loading..."
flush stdout
+ set num_serial 0
+ set num_parallel 0
for { set i 0 } { $i < $maxload } { incr i } {
set str $testarr($i)
- set ret [eval {$db put -append $str} ]
- error_check_good put:$db $ret [expr $i + 1]
+ # Push serial tests into serial testing db, others
+ # into parallel db.
+ if { [is_serial $str] } {
+ set ret [eval {$serialdb put -append $str}]
+ error_check_good put:serialdb [expr $ret > 0] 1
+ incr num_serial
+ } else {
+ set ret [eval {$db put -append $str}]
+ error_check_good put:paralleldb [expr $ret > 0] 1
+ incr num_parallel
+ }
}
- puts "Loaded $maxload records (out of $count)."
+ error_check_good maxload $maxload [expr $num_serial + $num_parallel]
+ puts "Loaded $maxload records: $num_serial in serial,\
+ $num_parallel in parallel."
close $fid
$db close
+ $serialdb close
$env close
}
@@ -64,10 +104,23 @@ proc init_runqueue { {dbdir RUNQUEUE} nitems list} {
load_queue ALL.OUT $dbdir $nitems
file delete TEST.LIST
file rename ALL.OUT TEST.LIST
-# file delete ALL.OUT
}
proc run_parallel { nprocs {list run_all} {nitems ALL} } {
+ global num_serial
+ global num_parallel
+
+ # Forcibly remove stuff from prior runs, if it's still there.
+ fileremove -f ./RUNQUEUE
+ set dirs [glob -nocomplain ./PARALLEL_TESTDIR.*]
+ set files [glob -nocomplain ALL.OUT.*]
+ foreach file $files {
+ fileremove -f $file
+ }
+ foreach dir $dirs {
+ fileremove -f $dir
+ }
+
set basename ./PARALLEL_TESTDIR
set queuedir ./RUNQUEUE
source ./include.tcl
@@ -77,16 +130,19 @@ proc run_parallel { nprocs {list run_all} {nitems ALL} } {
init_runqueue $queuedir $nitems $list
set basedir [pwd]
- set pidlist {}
set queuedir ../../[string range $basedir \
[string last "/" $basedir] end]/$queuedir
+ # Run serial tests in parallel testdir 0.
+ run_queue 0 $basename.0 $queuedir serial $num_serial
+
+ set pidlist {}
+ # Run parallel tests in testdirs 1 through n.
for { set i 1 } { $i <= $nprocs } { incr i } {
- fileremove -f ALL.OUT.$i
set ret [catch {
set p [exec $tclsh_path << \
- "source $test_path/test.tcl;\
- run_queue $i $basename.$i $queuedir $nitems" &]
+ "source $test_path/test.tcl; run_queue $i \
+ $basename.$i $queuedir parallel $num_parallel" &]
lappend pidlist $p
set f [open $testdir/begin.$p w]
close $f
@@ -95,10 +151,12 @@ proc run_parallel { nprocs {list run_all} {nitems ALL} } {
watch_procs $pidlist 300 360000
set failed 0
- for { set i 1 } { $i <= $nprocs } { incr i } {
- if { [check_failed_run ALL.OUT.$i] != 0 } {
- set failed 1
- puts "Regression tests failed in process $i."
+ for { set i 0 } { $i <= $nprocs } { incr i } {
+ if { [file exists ALL.OUT.$i] == 1 } {
+ if { [check_failed_run ALL.OUT.$i] != 0 } {
+ set failed 1
+ puts "Regression tests failed in process $i."
+ }
}
}
if { $failed == 0 } {
@@ -106,12 +164,12 @@ proc run_parallel { nprocs {list run_all} {nitems ALL} } {
}
}
-proc run_queue { i rundir queuedir nitems } {
+proc run_queue { i rundir queuedir {qtype parallel} {nitems 0} } {
set builddir [pwd]
file delete $builddir/ALL.OUT.$i
cd $rundir
- puts "Parallel run_queue process $i (pid [pid]) starting."
+ puts "Starting $qtype run_queue process $i (pid [pid])."
source ./include.tcl
global env
@@ -119,15 +177,24 @@ proc run_queue { i rundir queuedir nitems } {
set dbenv [berkdb_env -create -lock -home $queuedir]
error_check_good dbenv [is_valid_env $dbenv] TRUE
- set db [eval {berkdb_open -env $dbenv \
- -mode 0644 -len 120 -queue queue.db} ]
- error_check_good dbopen [is_valid_db $db] TRUE
+ if { $qtype == "parallel" } {
+ set db [eval {berkdb_open -env $dbenv \
+ -mode 0644 -queue queue.db} ]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ } elseif { $qtype == "serial" } {
+ set db [eval {berkdb_open -env $dbenv \
+ -mode 0644 -queue serialqueue.db} ]
+ error_check_good serialdbopen [is_valid_db $db] TRUE
+ } else {
+ puts "FAIL: queue type $qtype not recognized"
+ }
- set dbc [eval $db cursor]
+ set dbc [eval $db cursor]
error_check_good cursor [is_valid_cursor $dbc $db] TRUE
set count 0
set waitcnt 0
+ set starttime [timestamp -r]
while { $waitcnt < 5 } {
set line [$db get -consume]
@@ -140,10 +207,22 @@ proc run_queue { i rundir queuedir nitems } {
regsub {TESTDIR} $cmd $tdir cmd
puts $o $cmd
close $o
- if { [expr {$num % 10} == 0] } {
- puts "Starting test $num of $nitems"
+ if { [expr {$num % 10} == 0] && $nitems != 0 } {
+ puts -nonewline \
+ "Starting test $num of $nitems $qtype items. "
+ set now [timestamp -r]
+ set elapsed [expr $now - $starttime]
+ set esttotal [expr $nitems * $elapsed / $num]
+ set remaining [expr $esttotal - $elapsed]
+ if { $remaining < 3600 } {
+ puts "\tRough guess: less than 1\
+ hour left."
+ } else {
+ puts "\tRough guess: \
+ [expr $remaining / 3600] hour(s) left."
+ }
}
- #puts "Process $i, record $num:\n$cmd"
+# puts "Process $i, record $num:\n$cmd"
set env(PURIFYOPTIONS) \
"-log-file=./test$num.%p -follow-child-processes -messages=first"
set env(PURECOVOPTIONS) \
@@ -166,7 +245,10 @@ proc run_queue { i rundir queuedir nitems } {
}
}
- puts "Process $i: $count commands executed"
+ set now [timestamp -r]
+ set elapsed [expr $now - $starttime]
+ puts "Process $i: $count commands executed in [format %02u:%02u \
+ [expr $elapsed / 3600] [expr ($elapsed % 3600) / 60]]"
$dbc close
$db close
@@ -183,6 +265,7 @@ proc run_queue { i rundir queuedir nitems } {
set f [open $builddir/$testdir/end.[pid] w]
close $f
+ cd $builddir
}
proc mkparalleldirs { nprocs basename queuedir } {
@@ -194,7 +277,7 @@ proc mkparalleldirs { nprocs basename queuedir } {
} else {
set EXE ".exe"
}
- for { set i 1 } { $i <= $nprocs } { incr i } {
+ for { set i 0 } { $i <= $nprocs } { incr i } {
set destdir $basename.$i
catch {file mkdir $destdir}
puts "Created $destdir"
diff --git a/db/test/recd001.tcl b/db/test/recd001.tcl
index bbf515901..90e62c13a 100644
--- a/db/test/recd001.tcl
+++ b/db/test/recd001.tcl
@@ -1,19 +1,27 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd001.tcl,v 11.28 2000/12/07 19:13:46 sue Exp $
+# $Id: recd001.tcl,v 11.42 2003/04/24 23:38:51 mjc Exp $
#
-# Recovery Test 1.
-# These are the most basic recovery tests. We do individual recovery
-# tests for each operation in the access method interface. First we
-# create a file and capture the state of the database (i.e., we copy
-# it. Then we run a transaction containing a single operation. In
-# one test, we abort the transaction and compare the outcome to the
-# original copy of the file. In the second test, we restore the
-# original copy of the database and then run recovery and compare
-# this against the actual database.
+# TEST recd001
+# TEST Per-operation recovery tests for non-duplicate, non-split
+# TEST messages. Makes sure that we exercise redo, undo, and do-nothing
+# TEST condition. Any test that appears with the message (change state)
+# TEST indicates that we've already run the particular test, but we are
+# TEST running it again so that we can change the state of the data base
+# TEST to prepare for the next test (this applies to all other recovery
+# TEST tests as well).
+# TEST
+# TEST These are the most basic recovery tests. We do individual recovery
+# TEST tests for each operation in the access method interface. First we
+# TEST create a file and capture the state of the database (i.e., we copy
+# TEST it. Then we run a transaction containing a single operation. In
+# TEST one test, we abort the transaction and compare the outcome to the
+# TEST original copy of the file. In the second test, we restore the
+# TEST original copy of the database and then run recovery and compare
+# TEST this against the actual database.
proc recd001 { method {select 0} args} {
global fixed_len
source ./include.tcl
@@ -43,7 +51,7 @@ proc recd001 { method {select 0} args} {
set flags "-create -txn -home $testdir"
puts "\tRecd001.a.0: creating environment"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set dbenv [eval $env_cmd]
error_check_good dbenv [is_valid_env $dbenv] TRUE
@@ -103,10 +111,10 @@ proc recd001 { method {select 0} args} {
{ {DB del -txn TXNID $key} "Recd001.g: big data delete"}
{ {DB put -txn TXNID $key $data} "Recd001.h: put (change state)"}
{ {DB put -txn TXNID $key $newdata} "Recd001.i: overwrite"}
- { {DB put -txn TXNID -partial {$off $len} $key $partial_grow}
+ { {DB put -txn TXNID -partial "$off $len" $key $partial_grow}
"Recd001.j: partial put growing"}
{ {DB put -txn TXNID $key $newdata} "Recd001.k: overwrite (fix)"}
- { {DB put -txn TXNID -partial {$off $len} $key $partial_shrink}
+ { {DB put -txn TXNID -partial "$off $len" $key $partial_shrink}
"Recd001.l: partial put shrinking"}
{ {DB put -txn TXNID -append $data} "Recd001.m: put -append"}
{ {DB get -txn TXNID -consume} "Recd001.n: db get -consume"}
@@ -124,6 +132,7 @@ proc recd001 { method {select 0} args} {
set newdata NEWrecd001_dataNEW
set off 3
set len 12
+
set partial_grow replacement_record_grow
set partial_shrink xxx
if { [is_fixed_length $method] == 1 } {
@@ -165,16 +174,69 @@ proc recd001 { method {select 0} args} {
# }
op_recover abort $testdir $env_cmd $testfile $cmd $msg
op_recover commit $testdir $env_cmd $testfile $cmd $msg
- op_recover prepare $testdir $env_cmd $testfile2 $cmd $msg
- op_recover prepare-abort $testdir $env_cmd $testfile2 $cmd $msg
- op_recover prepare-commit $testdir $env_cmd $testfile2 $cmd $msg
+ #
+ # Note that since prepare-discard ultimately aborts
+ # the txn, it must come before prepare-commit.
+ #
+ op_recover prepare-abort $testdir $env_cmd $testfile2 \
+ $cmd $msg
+ op_recover prepare-discard $testdir $env_cmd $testfile2 \
+ $cmd $msg
+ op_recover prepare-commit $testdir $env_cmd $testfile2 \
+ $cmd $msg
}
set fixed_len $orig_fixed_len
- puts "\tRecd001.o: Verify db_printlog can read logfile"
- set tmpfile $testdir/printlog.out
- set stat [catch {exec $util_path/db_printlog -h $testdir \
- > $tmpfile} ret]
- error_check_good db_printlog $stat 0
- fileremove $tmpfile
+ if { [is_fixed_length $method] == 1 } {
+ puts "Skipping remainder of test for fixed length methods"
+ return
+ }
+
+ #
+ # Check partial extensions. If we add a key/data to the database
+ # and then expand it using -partial, then recover, recovery was
+ # failing in #3944. Check that scenario here.
+ #
+ # !!!
+ # We loop here because on each iteration, we need to clean up
+ # the old env (i.e. this test does not depend on earlier runs).
+ # If we run it without cleaning up the env inbetween, we do not
+ # test the scenario of #3944.
+ #
+ set len [string length $data]
+ set len2 256
+ set part_data [replicate "abcdefgh" 32]
+ set p [list 0 $len]
+ set cmd [subst \
+ {DB put -txn TXNID -partial "$len $len2" $key $part_data}]
+ set msg "Recd001.o: partial put prepopulated/expanding"
+ foreach op {abort commit prepare-abort prepare-discard prepare-commit} {
+ env_cleanup $testdir
+
+ set dbenv [eval $env_cmd]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+ set t [$dbenv txn]
+ error_check_good txn_begin [is_valid_txn $t $dbenv] TRUE
+ set oflags "-create $omethod -mode 0644 \
+ -env $dbenv -txn $t $opts $testfile"
+ set db [eval {berkdb_open} $oflags]
+ error_check_good db_open [is_valid_db $db] TRUE
+ set oflags "-create $omethod -mode 0644 \
+ -env $dbenv -txn $t $opts $testfile2"
+ set db2 [eval {berkdb_open} $oflags]
+ error_check_good db_open [is_valid_db $db2] TRUE
+
+ set ret [$db put -txn $t -partial $p $key $data]
+ error_check_good dbput $ret 0
+
+ set ret [$db2 put -txn $t -partial $p $key $data]
+ error_check_good dbput $ret 0
+ error_check_good txncommit [$t commit] 0
+ error_check_good dbclose [$db close] 0
+ error_check_good dbclose [$db2 close] 0
+ error_check_good dbenvclose [$dbenv close] 0
+
+ op_recover $op $testdir $env_cmd $testfile $cmd $msg
+ }
+ return
}
diff --git a/db/test/recd002.tcl b/db/test/recd002.tcl
index ffcec6527..afdb838c2 100644
--- a/db/test/recd002.tcl
+++ b/db/test/recd002.tcl
@@ -1,11 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd002.tcl,v 11.22 2000/12/11 17:24:54 sue Exp $
+# $Id: recd002.tcl,v 11.31 2003/01/08 05:51:06 bostic Exp $
#
-# Recovery Test #2. Verify that splits can be recovered.
+# TEST recd002
+# TEST Split recovery tests. For every known split log message, makes sure
+# TEST that we exercise redo, undo, and do-nothing condition.
proc recd002 { method {select 0} args} {
source ./include.tcl
global rand_init
@@ -37,7 +39,7 @@ proc recd002 { method {select 0} args} {
"-create -txn -lock_max 2000 -home $testdir"
puts "\tRecd002.a: creating environment"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_bad dbenv $dbenv NULL
@@ -80,9 +82,14 @@ proc recd002 { method {select 0} args} {
}
op_recover abort $testdir $env_cmd $testfile $cmd $msg
op_recover commit $testdir $env_cmd $testfile $cmd $msg
- op_recover prepare $testdir $env_cmd $testfile2 $cmd $msg
+ #
+ # Note that since prepare-discard ultimately aborts
+ # the txn, it must come before prepare-commit.
+ #
op_recover prepare-abort $testdir $env_cmd $testfile2 \
$cmd $msg
+ op_recover prepare-discard $testdir $env_cmd $testfile2 \
+ $cmd $msg
op_recover prepare-commit $testdir $env_cmd $testfile2 \
$cmd $msg
}
diff --git a/db/test/recd003.tcl b/db/test/recd003.tcl
index af7097c89..68d88fbc7 100644
--- a/db/test/recd003.tcl
+++ b/db/test/recd003.tcl
@@ -1,14 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd003.tcl,v 11.22 2000/12/07 19:13:46 sue Exp $
+# $Id: recd003.tcl,v 11.31 2003/01/08 05:51:11 bostic Exp $
#
-# Recovery Test 3.
-# Test all the duplicate log messages and recovery operations. We make
-# sure that we exercise all possible recovery actions: redo, undo, undo
-# but no fix necessary and redo but no fix necessary.
+# TEST recd003
+# TEST Duplicate recovery tests. For every known duplicate log message,
+# TEST makes sure that we exercise redo, undo, and do-nothing condition.
+# TEST
+# TEST Test all the duplicate log messages and recovery operations. We make
+# TEST sure that we exercise all possible recovery actions: redo, undo, undo
+# TEST but no fix necessary and redo but no fix necessary.
proc recd003 { method {select 0} args } {
source ./include.tcl
global rand_init
@@ -31,7 +34,7 @@ proc recd003 { method {select 0} args } {
set eflags "-create -txn -home $testdir"
puts "\tRecd003.a: creating environment"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_bad dbenv $dbenv NULL
@@ -95,9 +98,14 @@ proc recd003 { method {select 0} args } {
}
op_recover abort $testdir $env_cmd $testfile $cmd $msg
op_recover commit $testdir $env_cmd $testfile $cmd $msg
- op_recover prepare $testdir $env_cmd $testfile2 $cmd $msg
+ #
+ # Note that since prepare-discard ultimately aborts
+ # the txn, it must come before prepare-commit.
+ #
op_recover prepare-abort $testdir $env_cmd $testfile2 \
$cmd $msg
+ op_recover prepare-discard $testdir $env_cmd $testfile2 \
+ $cmd $msg
op_recover prepare-commit $testdir $env_cmd $testfile2 \
$cmd $msg
}
diff --git a/db/test/recd004.tcl b/db/test/recd004.tcl
index 012dd80f6..378e0d3ef 100644
--- a/db/test/recd004.tcl
+++ b/db/test/recd004.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd004.tcl,v 11.21 2000/12/11 17:24:55 sue Exp $
+# $Id: recd004.tcl,v 11.30 2003/01/08 05:51:15 bostic Exp $
#
-# Recovery Test #4.
-# Verify that we work correctly when big keys get elevated.
+# TEST recd004
+# TEST Big key test where big key gets elevated to internal page.
proc recd004 { method {select 0} args} {
source ./include.tcl
global rand_init
@@ -32,7 +32,7 @@ proc recd004 { method {select 0} args} {
set testfile2 recd004-2.db
set eflags "-create -txn -home $testdir"
puts "\tRecd004.a: creating environment"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_bad dbenv $dbenv NULL
@@ -74,9 +74,14 @@ proc recd004 { method {select 0} args} {
}
op_recover abort $testdir $env_cmd $testfile $cmd $msg
op_recover commit $testdir $env_cmd $testfile $cmd $msg
- op_recover prepare $testdir $env_cmd $testfile2 $cmd $msg
+ #
+ # Note that since prepare-discard ultimately aborts
+ # the txn, it must come before prepare-commit.
+ #
op_recover prepare-abort $testdir $env_cmd $testfile2 \
$cmd $msg
+ op_recover prepare-discard $testdir $env_cmd $testfile2 \
+ $cmd $msg
op_recover prepare-commit $testdir $env_cmd $testfile2 \
$cmd $msg
}
diff --git a/db/test/recd005.tcl b/db/test/recd005.tcl
index 06a346f44..49e2e449f 100644
--- a/db/test/recd005.tcl
+++ b/db/test/recd005.tcl
@@ -1,13 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd005.tcl,v 11.27 2000/12/15 21:41:38 ubell Exp $
+# $Id: recd005.tcl,v 11.35 2003/01/08 05:51:17 bostic Exp $
#
-# Recovery Test 5.
-# Make sure that we can do catastrophic recovery even if we open
-# files using the same log file id.
+# TEST recd005
+# TEST Verify reuse of file ids works on catastrophic recovery.
+# TEST
+# TEST Make sure that we can do catastrophic recovery even if we open
+# TEST files using the same log file id.
proc recd005 { method args} {
source ./include.tcl
global rand_init
@@ -15,7 +17,7 @@ proc recd005 { method args} {
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Recd005: $method catastropic recovery"
+ puts "Recd005: $method catastrophic recovery"
berkdb srand $rand_init
@@ -38,7 +40,7 @@ proc recd005 { method args} {
puts "\tRecd005.$tnum: $s1 $s2 $op1 $op2"
puts "\tRecd005.$tnum.a: creating environment"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_bad dbenv $dbenv NULL
@@ -147,12 +149,11 @@ proc do_one_file { dir method env env_cmd filename num op } {
# Save the initial file and open the environment and the first file
file copy -force $dir/$filename $dir/$filename.init
copy_extent_file $dir $filename init
- set oflags "-unknown -env $env"
+ set oflags "-auto_commit -unknown -env $env"
set db [eval {berkdb_open} $oflags $filename]
# Dump out file contents for initial case
- set tflags ""
- open_and_dump_file $filename $env $tflags $init_file nop \
+ open_and_dump_file $filename $env $init_file nop \
dump_file_direction "-first" "-next"
set txn [$env txn]
@@ -167,7 +168,7 @@ proc do_one_file { dir method env env_cmd filename num op } {
error_check_good sync:$db [$db sync] 0
file copy -force $dir/$filename $dir/$filename.afterop
copy_extent_file $dir $filename afterop
- open_and_dump_file $testdir/$filename.afterop NULL $tflags \
+ open_and_dump_file $testdir/$filename.afterop NULL \
$afterop_file nop dump_file_direction "-first" "-next"
error_check_good txn_$op:$txn [$txn $op] 0
@@ -179,7 +180,7 @@ proc do_one_file { dir method env env_cmd filename num op } {
# Dump out file and save a copy.
error_check_good sync:$db [$db sync] 0
- open_and_dump_file $testdir/$filename NULL $tflags $final_file nop \
+ open_and_dump_file $testdir/$filename NULL $final_file nop \
dump_file_direction "-first" "-next"
file copy -force $dir/$filename $dir/$filename.final
copy_extent_file $dir $filename final
@@ -211,8 +212,7 @@ proc check_file { dir env_cmd filename op } {
set afterop_file $dir/$filename.t2
set final_file $dir/$filename.t3
- set tflags ""
- open_and_dump_file $testdir/$filename NULL $tflags $final_file nop \
+ open_and_dump_file $testdir/$filename NULL $final_file nop \
dump_file_direction "-first" "-next"
if { $op == "abort" } {
filesort $init_file $init_file.sort
@@ -227,5 +227,4 @@ proc check_file { dir env_cmd filename op } {
diff(pre-commit,post-$op):diff($afterop_file,$final_file) \
[filecmp $afterop_file.sort $final_file.sort] 0
}
-
}
diff --git a/db/test/recd006.tcl b/db/test/recd006.tcl
index 14f01cc0b..6f8ee567a 100644
--- a/db/test/recd006.tcl
+++ b/db/test/recd006.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd006.tcl,v 11.21 2000/12/07 19:13:46 sue Exp $
+# $Id: recd006.tcl,v 11.27 2003/01/08 05:51:31 bostic Exp $
#
-# Recovery Test 6.
-# Test nested transactions.
+# TEST recd006
+# TEST Nested transactions.
proc recd006 { method {select 0} args} {
global kvals
source ./include.tcl
@@ -83,7 +83,7 @@ proc recd006 { method {select 0} args} {
set eflags "-create -txn -home $testdir"
puts "\tRecd006.b: creating environment"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_bad dbenv $dbenv NULL
@@ -176,7 +176,7 @@ proc nesttest { db parent env do p1 p2 child1 child2} {
# OK, do child 1
set kid1 [$env txn -parent $parent]
- error_check_good kid1 [is_valid_widget $kid1 $env.txn] TRUE
+ error_check_good kid1 [is_valid_txn $kid1 $env] TRUE
# Reading write-locked parent object should be OK
#puts "\tRead write-locked parent object for kid1."
@@ -193,7 +193,7 @@ proc nesttest { db parent env do p1 p2 child1 child2} {
# Now start child2
#puts "\tBegin txn for kid2."
set kid2 [$env txn -parent $parent]
- error_check_good kid2 [is_valid_widget $kid2 $env.txn] TRUE
+ error_check_good kid2 [is_valid_txn $kid2 $env] TRUE
# Getting anything in the p1 set should deadlock, so let's
# work on the p2 set.
diff --git a/db/test/recd007.tcl b/db/test/recd007.tcl
index d077ae19f..7c24978e3 100644
--- a/db/test/recd007.tcl
+++ b/db/test/recd007.tcl
@@ -1,16 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd007.tcl,v 11.38 2000/12/20 21:39:23 krinsky Exp $
+# $Id: recd007.tcl,v 11.62 2003/10/14 14:55:36 sue Exp $
#
-# Recovery Test 7.
-# This is a recovery test for create/delete of databases. We have
-# hooks in the database so that we can abort the process at various
-# points and make sure that the transaction doesn't commit. We
-# then need to recover and make sure the file is correctly existing
-# or not, as the case may be.
+# TEST recd007
+# TEST File create/delete tests.
+# TEST
+# TEST This is a recovery test for create/delete of databases. We have
+# TEST hooks in the database so that we can abort the process at various
+# TEST points and make sure that the transaction doesn't commit. We
+# TEST then need to recover and make sure the file is correctly existing
+# TEST or not, as the case may be.
proc recd007 { method args} {
global fixed_len
source ./include.tcl
@@ -28,10 +30,10 @@ proc recd007 { method args} {
set flags "-create -txn -home $testdir"
puts "\tRecd007.a: creating environment"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set env [eval $env_cmd]
- #
+
# We need to create a database to get the pagesize (either
# the default or whatever might have been specified).
# Then remove it so we can compute fixed_len and create the
@@ -53,8 +55,10 @@ proc recd007 { method args} {
# Convert the args again because fixed_len is now real.
set opts [convert_args $method ""]
+ set save_opts $opts
+ set moreopts {" -lorder 1234 " " -lorder 1234 -chksum " \
+ " -lorder 4321 " " -lorder 4321 -chksum "}
- #
# List of recovery tests: {HOOKS MSG} pairs
# Where each HOOK is a list of {COPY ABORT}
#
@@ -84,30 +88,46 @@ proc recd007 { method args} {
foreach pair $rlist {
set cmd [lindex $pair 0]
set msg [lindex $pair 1]
+ #
+ # Run natively
+ #
file_recover_create $testdir $env_cmd $omethod \
- $opts $testfile $cmd $msg
+ $save_opts $testfile $cmd $msg
+ foreach o $moreopts {
+ set opts $save_opts
+ append opts $o
+ file_recover_create $testdir $env_cmd $omethod \
+ $opts $testfile $cmd $msg
+ }
}
set rlist {
- { {"none" "prerename"} "Recd007.l0: none/prerename"}
- { {"none" "postrename"} "Recd007.l1: none/postrename"}
- { {"prerename" "none"} "Recd007.m0: prerename/none"}
- { {"postrename" "none"} "Recd007.m1: postrename/none"}
- { {"prerename" "prerename"} "Recd007.n: prerename/prerename"}
- { {"prerename" "postrename"} "Recd007.o: prerename/postrename"}
- { {"postrename" "postrename"} "Recd007.p: postrename/postrename"}
- }
- foreach op { dbremove dbrename } {
+ { {"none" "predestroy"} "Recd007.l0: none/predestroy"}
+ { {"none" "postdestroy"} "Recd007.l1: none/postdestroy"}
+ { {"predestroy" "none"} "Recd007.m0: predestroy/none"}
+ { {"postdestroy" "none"} "Recd007.m1: postdestroy/none"}
+ { {"predestroy" "predestroy"} "Recd007.n: predestroy/predestroy"}
+ { {"predestroy" "postdestroy"} "Recd007.o: predestroy/postdestroy"}
+ { {"postdestroy" "postdestroy"} "Recd007.p: postdestroy/postdestroy"}
+ }
+ foreach op { dbremove dbrename dbtruncate } {
foreach pair $rlist {
set cmd [lindex $pair 0]
set msg [lindex $pair 1]
file_recover_delete $testdir $env_cmd $omethod \
- $opts $testfile $cmd $msg $op
+ $save_opts $testfile $cmd $msg $op
+ foreach o $moreopts {
+ set opts $save_opts
+ append opts $o
+ file_recover_delete $testdir $env_cmd $omethod \
+ $opts $testfile $cmd $msg $op
+ }
}
}
if { $is_windows_test != 1 } {
- do_file_recover_delmk $testdir $env_cmd $omethod $opts $testfile
+ set env_cmd "berkdb_env_noerr $flags"
+ do_file_recover_delmk $testdir $env_cmd $method $opts $testfile
}
puts "\tRecd007.r: Verify db_printlog can read logfile"
@@ -124,17 +144,17 @@ proc file_recover_create { dir env_cmd method opts dbfile cmd msg } {
# 1. Creating just a database
# 2. Creating a database with a subdb
# 3. Creating a 2nd subdb in a database
- puts "\t$msg create with a database"
+ puts "\t$msg ($opts) create with a database"
do_file_recover_create $dir $env_cmd $method $opts $dbfile \
0 $cmd $msg
if { [is_queue $method] == 1 } {
puts "\tSkipping subdatabase tests for method $method"
return
}
- puts "\t$msg create with a database and subdb"
+ puts "\t$msg ($opts) create with a database and subdb"
do_file_recover_create $dir $env_cmd $method $opts $dbfile \
1 $cmd $msg
- puts "\t$msg create with a database and 2nd subdb"
+ puts "\t$msg ($opts) create with a database and 2nd subdb"
do_file_recover_create $dir $env_cmd $method $opts $dbfile \
2 $cmd $msg
@@ -150,6 +170,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
}
env_cleanup $dir
+ set dflags "-dar"
# Open the environment and set the copy/abort locations
set env [eval $env_cmd]
set copy [lindex $cmd 0]
@@ -167,17 +188,16 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
return
}
- #
# Basically non-existence is our initial state. When we
# abort, it is also our final state.
#
switch $sub {
0 {
- set oflags "-create $method -mode 0644 \
+ set oflags "-create $method -auto_commit -mode 0644 \
-env $env $opts $dbfile"
}
1 {
- set oflags "-create $method -mode 0644 \
+ set oflags "-create $method -auto_commit -mode 0644 \
-env $env $opts $dbfile sub0"
}
2 {
@@ -185,14 +205,14 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
# If we are aborting here, then we need to
# create a first subdb, then create a second
#
- set oflags "-create $method -mode 0644 \
+ set oflags "-create $method -auto_commit -mode 0644 \
-env $env $opts $dbfile sub0"
set db [eval {berkdb_open} $oflags]
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
set init_file $dir/$dbfile.init
catch { file copy -force $dir/$dbfile $init_file } res
- set oflags "-create $method -mode 0644 \
+ set oflags "-create $method -auto_commit -mode 0644 \
-env $env $opts $dbfile sub1"
}
default {
@@ -214,8 +234,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
# Sync the mpool so any changes to the file that are
# in mpool get written to the disk file before the
# diff.
- puts "\t\tSyncing"
- $env mpool_sync "0 0"
+ $env mpool_sync
#
# If we don't abort, then we expect success.
@@ -238,7 +257,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
} else {
error_check_good \
diff(init,postcreate):diff($init_file,$dir/$dbfile)\
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
}
} else {
#
@@ -289,7 +308,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
#
error_check_good \
diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
#
# Need a new copy to get the right LSN into the file.
#
@@ -300,7 +319,6 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
}
}
- #
# If we didn't make a copy, then we are done.
#
if {[string first "none" $copy] != -1} {
@@ -310,11 +328,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
#
# Now move the .afterop file to $dbfile. Run recovery again.
#
- file copy -force $dir/$dbfile.afterop $dir/$dbfile
-
- if { [is_queue $method] == 1 } {
- move_file_extent $dir $dbfile afterop copy
- }
+ copy_afterop $dir
berkdb debug_check
puts -nonewline "\t\tAbout to run recovery ... "
@@ -339,7 +353,7 @@ proc do_file_recover_create { dir env_cmd method opts dbfile sub cmd msg } {
#
error_check_good \
diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
}
}
@@ -350,17 +364,17 @@ proc file_recover_delete { dir env_cmd method opts dbfile cmd msg op } {
# 1. Deleting/Renaming just a database
# 2. Deleting/Renaming a database with a subdb
# 3. Deleting/Renaming a 2nd subdb in a database
- puts "\t$msg $op with a database"
+ puts "\t$msg $op ($opts) with a database"
do_file_recover_delete $dir $env_cmd $method $opts $dbfile \
0 $cmd $msg $op
if { [is_queue $method] == 1 } {
puts "\tSkipping subdatabase tests for method $method"
return
}
- puts "\t$msg $op with a database and subdb"
+ puts "\t$msg $op ($opts) with a database and subdb"
do_file_recover_delete $dir $env_cmd $method $opts $dbfile \
1 $cmd $msg $op
- puts "\t$msg $op with a database and 2nd subdb"
+ puts "\t$msg $op ($opts) with a database and 2nd subdb"
do_file_recover_delete $dir $env_cmd $method $opts $dbfile \
2 $cmd $msg $op
@@ -384,43 +398,61 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
error_check_good abort_location [is_valid_delete_loc $abort] 1
if { [is_record_based $method] == 1 } {
- set key 1
+ set key1 1
+ set key2 2
} else {
- set key recd007_key
+ set key1 recd007_key1
+ set key2 recd007_key2
}
- set data1 recd007_data
- set data2 NEWrecd007_data2
+ set data1 recd007_data0
+ set data2 recd007_data1
+ set data3 NEWrecd007_data2
#
# Depending on what sort of subdb we want, if any, our
# args to the open call will be different (and if we
# want a 2nd subdb, we create the first here.
#
+ # XXX
+ # For dbtruncate, we want oflags to have "$env" in it,
+ # not have the value currently in 'env'. That is why
+ # the '$' is protected below. Later on we use oflags
+ # but with a new $env we just opened.
+ #
switch $sub {
0 {
- set oflags "-create $method -mode 0644 \
- -env $env $opts $dbfile"
+ set subdb ""
+ set new $dbfile.new
+ set dflags "-dar"
+ set oflags "-create $method -auto_commit -mode 0644 \
+ -env \$env $opts $dbfile"
}
1 {
- set oflags "-create $method -mode 0644 \
- -env $env $opts $dbfile sub0"
+ set subdb sub0
+ set new $subdb.new
+ set dflags ""
+ set oflags "-create $method -auto_commit -mode 0644 \
+ -env \$env $opts $dbfile $subdb"
}
2 {
#
# If we are aborting here, then we need to
# create a first subdb, then create a second
#
- set oflags "-create $method -mode 0644 \
- -env $env $opts $dbfile sub0"
+ set subdb sub1
+ set new $subdb.new
+ set dflags ""
+ set oflags "-create $method -auto_commit -mode 0644 \
+ -env \$env $opts $dbfile sub0"
set db [eval {berkdb_open} $oflags]
error_check_good db_open [is_valid_db $db] TRUE
set txn [$env txn]
- set ret [$db put -txn $txn $key $data2]
+ set ret [$db put -txn $txn $key1 $data1]
error_check_good db_put $ret 0
error_check_good commit [$txn commit] 0
error_check_good db_close [$db close] 0
- set oflags "-create $method -mode 0644 \
- -env $env $opts $dbfile sub1"
+ set oflags "-create $method -auto_commit -mode 0644 \
+ -env \$env $opts $dbfile $subdb"
}
default {
puts "\tBad value $sub for sub"
@@ -443,11 +475,15 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
set db [eval {berkdb_open} $oflags]
error_check_good db_open [is_valid_db $db] TRUE
set txn [$env txn]
- set ret [$db put -txn $txn $key $data1]
+ set ret [$db put -txn $txn $key1 $data1]
+ error_check_good db_put $ret 0
+ set ret [$db put -txn $txn $key2 $data2]
error_check_good db_put $ret 0
error_check_good commit [$txn commit] 0
error_check_good db_close [$db close] 0
+ $env mpool_sync
+
set init_file $dir/$dbfile.init
catch { file copy -force $dir/$dbfile $init_file } res
@@ -459,16 +495,51 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
# If we don't abort, then we expect success.
# If we abort, we expect no file removed.
#
- if { [string compare $op dbremove] == 0 } {
- set ret [catch { berkdb $op -env $env $dbfile } remret]
+ switch $op {
+ "dbrename" {
+ set ret [catch { eval {berkdb} $op -env $env -auto_commit \
+ $dbfile $subdb $new } remret]
+ }
+ "dbremove" {
+ set ret [catch { eval {berkdb} $op -env $env -auto_commit \
+ $dbfile $subdb } remret]
+ }
+ "dbtruncate" {
+ set txn [$env txn]
+ set db [eval {berkdb_open_noerr -env} \
+ $env -auto_commit $dbfile $subdb]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ error_check_good txnbegin [is_valid_txn $txn $env] TRUE
+ set ret [catch {$db truncate -txn $txn} remret]
+ }
+ }
+ $env mpool_sync
+ if { $abort == "none" } {
+ if { $op == "dbtruncate" } {
+ error_check_good txncommit [$txn commit] 0
+ error_check_good dbclose [$db close] 0
+ }
+ #
+ # Operation was committed, verify it.
+ #
+ puts "\t\tCommand executed and committed."
+ error_check_good $op $ret 0
+ #
+ # If a dbtruncate, check that truncate returned the number
+ # of items previously in the database.
+ #
+ if { [string compare $op "dbtruncate"] == 0 } {
+ error_check_good remret $remret 2
+ }
+ recd007_check $op $sub $dir $dbfile $subdb $new $env $oflags
} else {
- set ret [catch { berkdb $op -env $env $dbfile $dbfile.new } \
- remret]
- }
- if {[string first "none" $abort] == -1} {
#
# Operation was aborted, verify it did not change.
#
+ if { $op == "dbtruncate" } {
+ error_check_good txnabort [$txn abort] 0
+ error_check_good dbclose [$db close] 0
+ }
puts "\t\tCommand executed and aborted."
error_check_good $op $ret 1
@@ -479,30 +550,16 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
error_check_good post$op.1 [file exists $dir/$dbfile] 1
error_check_good \
diff(init,post$op.2):diff($init_file,$dir/$dbfile)\
- [dbdump_diff $init_file $dir/$dbfile] 0
- } else {
- #
- # Operation was committed, verify it does
- # not exist.
- #
- puts "\t\tCommand executed and committed."
- error_check_good $op $ret 0
- #
- # Check that the file does not exist or correct
- # file exists.
- #
- error_check_good $op [file exists $dir/$dbfile] 0
- if { [string compare $op dbrename] == 0 } {
- error_check_good $op [file exists $dir/$dbfile.new] 1
- }
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
}
+ $env mpool_sync
error_check_good env_close [$env close] 0
catch { file copy -force $dir/$dbfile $init_file } res
-
if { [is_queue $method] == 1} {
copy_extent_file $dir $dbfile init
}
+
#
# Run recovery here. Should be a no-op. Verify that
# the file still doesn't exist or change (depending on abort)
@@ -517,20 +574,24 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
error "FAIL: Recovery error: $result."
return
}
+
puts "complete"
- if { [string first "none" $abort] != -1} {
+
+ if { $abort == "none" } {
#
- # Operation was committed, verify it still does
- # not exist.
+ # Operate was committed.
#
- error_check_good after_recover1 [file exists $dir/$dbfile] 0
+ set env [eval $env_cmd]
+ recd007_check $op $sub $dir $dbfile $subdb $new $env $oflags
+ error_check_good env_close [$env close] 0
} else {
#
# Operation was aborted, verify it did not change.
#
+ berkdb debug_check
error_check_good \
diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
}
#
@@ -541,15 +602,10 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
}
#
- # Now move the .afterop file to $dbfile. Run recovery again.
+ # Now restore the .afterop file(s) to their original name.
+ # Run recovery again.
#
- set filecopy [glob $dir/*.afterop]
- set afterop [lindex $filecopy 0]
- file rename -force $afterop $dir/$dbfile
- set afterop [string range $afterop \
- [expr [string last "/" $afterop] + 1] \
- [string last "." $afterop]]
- move_file_extent $dir $dbfile afterop rename
+ copy_afterop $dir
berkdb debug_check
puts -nonewline "\t\tAbout to run recovery ... "
@@ -563,18 +619,16 @@ proc do_file_recover_delete { dir env_cmd method opts dbfile sub cmd msg op } {
puts "complete"
if { [string first "none" $abort] != -1} {
- #
- # Operation was committed, verify it still does
- # not exist.
- #
- error_check_good after_recover2 [file exists $dir/$dbfile] 0
+ set env [eval $env_cmd]
+ recd007_check $op $sub $dir $dbfile $subdb $new $env $oflags
+ error_check_good env_close [$env close] 0
} else {
#
# Operation was aborted, verify it did not change.
#
error_check_good \
diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff $dflags $init_file $dir $dbfile] 0
}
}
@@ -597,11 +651,13 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
if { $log_log_record_types == 1} {
logtrack_read $dir
}
+ set omethod [convert_method $method]
puts "\tRecd007.q: Delete and recreate a database"
env_cleanup $dir
# Open the environment and set the copy/abort locations
set env [eval $env_cmd]
+ error_check_good env_open [is_valid_env $env] TRUE
if { [is_record_based $method] == 1 } {
set key 1
@@ -611,13 +667,14 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
set data1 recd007_data
set data2 NEWrecd007_data2
- set oflags "-create $method -mode 0644 -env $env $opts $dbfile"
+ set oflags \
+ "-create $omethod -auto_commit -mode 0644 $opts $dbfile"
#
# Open our db, add some data, close and copy as our
# init file.
#
- set db [eval {berkdb_open} $oflags]
+ set db [eval {berkdb_open_noerr} -env $env $oflags]
error_check_good db_open [is_valid_db $db] TRUE
set txn [$env txn]
set ret [$db put -txn $txn $key $data1]
@@ -625,7 +682,9 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
error_check_good commit [$txn commit] 0
error_check_good db_close [$db close] 0
- set ret [catch { berkdb dbremove -env $env $dbfile } remret]
+ set ret \
+ [catch { berkdb dbremove -env $env -auto_commit $dbfile } remret]
+
#
# Operation was committed, verify it does
# not exist.
@@ -637,10 +696,10 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
#
# Now create a new db with the same name.
#
- set db [eval {berkdb_open} $oflags]
+ set db [eval {berkdb_open_noerr} -env $env $oflags]
error_check_good db_open [is_valid_db $db] TRUE
set txn [$env txn]
- set ret [$db put -txn $txn $key $data1]
+ set ret [$db put -txn $txn $key [chop_data $method $data2]]
error_check_good db_put $ret 0
error_check_good commit [$txn commit] 0
error_check_good db_sync [$db sync] 0
@@ -663,9 +722,29 @@ proc do_file_recover_delmk { dir env_cmd method opts dbfile } {
# up the Tcl widgets.
#
set stat [catch {$db close} ret]
+ error_check_bad dbclose_after_remove $stat 0
+ error_check_good dbclose_after_remove [is_substr $ret recovery] 1
set stat [catch {$env close} ret]
+ error_check_bad envclose_after_remove $stat 0
+ error_check_good envclose_after_remove [is_substr $ret recovery] 1
+ #
+ # Reopen env and db and verify 2nd database is there.
+ #
+ set env [eval $env_cmd]
+ error_check_good env_open [is_valid_env $env] TRUE
+ set db [eval {berkdb_open} -env $env $oflags]
+ error_check_good db_open [is_valid_db $db] TRUE
+ set ret [$db get $key]
+ error_check_good dbget [llength $ret] 1
+ set kd [lindex $ret 0]
+ error_check_good key [lindex $kd 0] $key
+ error_check_good data2 [lindex $kd 1] [pad_data $method $data2]
+
+ error_check_good dbclose [$db close] 0
+ error_check_good envclose [$env close] 0
}
+
proc is_valid_create_loc { loc } {
switch $loc {
none -
@@ -683,8 +762,8 @@ proc is_valid_create_loc { loc } {
proc is_valid_delete_loc { loc } {
switch $loc {
none -
- prerename -
- postrename -
+ predestroy -
+ postdestroy -
postremcall
{ return 1 }
default
@@ -697,23 +776,23 @@ proc is_valid_delete_loc { loc } {
# just a free/invalid page.
# Return 1 if they are different, 0 if logically the same (or identical).
#
-proc dbdump_diff { initfile dbfile } {
+proc dbdump_diff { flags initfile dir dbfile } {
source ./include.tcl
set initdump $initfile.dump
set dbdump $dbfile.dump
- set stat [catch {exec $util_path/db_dump -dar -f $initdump \
+ set stat [catch {eval {exec $util_path/db_dump} $flags -f $initdump \
$initfile} ret]
error_check_good dbdump.init $stat 0
# Do a dump without the freelist which should eliminate any
# recovery differences.
- set stat [catch {exec $util_path/db_dump -dar -f $dbdump $dbfile} \
- ret]
+ set stat [catch {eval {exec $util_path/db_dump} $flags -f $dir/$dbdump \
+ $dir/$dbfile} ret]
error_check_good dbdump.db $stat 0
- set stat [filecmp $dbdump $initdump]
+ set stat [filecmp $dir/$dbdump $initdump]
if {$stat == 0} {
return 0
@@ -721,3 +800,105 @@ proc dbdump_diff { initfile dbfile } {
puts "diff: $dbdump $initdump gives:\n$ret"
return 1
}
+
+proc recd007_check { op sub dir dbfile subdb new env oflags } {
+ #
+ # No matter how many subdbs we have, dbtruncate will always
+ # have a file, and if we open our particular db, it should
+ # have no entries.
+ #
+ if { $sub == 0 } {
+ if { $op == "dbremove" } {
+ error_check_good $op:not-exist \
+ [file exists $dir/$dbfile] 0
+ } elseif { $op == "dbrename"} {
+ error_check_good $op:exist \
+ [file exists $dir/$dbfile] 0
+ error_check_good $op:exist2 \
+ [file exists $dir/$dbfile.new] 1
+ } else {
+ error_check_good $op:exist \
+ [file exists $dir/$dbfile] 1
+ set db [eval {berkdb_open} $oflags]
+ error_check_good db_open [is_valid_db $db] TRUE
+ set dbc [$db cursor]
+ error_check_good dbc_open \
+ [is_valid_cursor $dbc $db] TRUE
+ set ret [$dbc get -first]
+ error_check_good dbget1 [llength $ret] 0
+ error_check_good dbc_close [$dbc close] 0
+ error_check_good db_close [$db close] 0
+ }
+ return
+ } else {
+ set t1 $dir/t1
+ #
+ # If we have subdbs, check that all but the last one
+ # are there, and the last one is correctly operated on.
+ #
+ set db [berkdb_open -rdonly -env $env $dbfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set c [eval {$db cursor}]
+ error_check_good db_cursor [is_valid_cursor $c $db] TRUE
+ set d [$c get -last]
+ if { $op == "dbremove" } {
+ if { $sub == 1 } {
+ error_check_good subdb:rem [llength $d] 0
+ } else {
+ error_check_bad subdb:rem [llength $d] 0
+ set sdb [lindex [lindex $d 0] 0]
+ error_check_bad subdb:rem1 $sdb $subdb
+ }
+ } elseif { $op == "dbrename"} {
+ set sdb [lindex [lindex $d 0] 0]
+ error_check_good subdb:ren $sdb $new
+ if { $sub != 1 } {
+ set d [$c get -prev]
+ error_check_bad subdb:ren [llength $d] 0
+ set sdb [lindex [lindex $d 0] 0]
+ error_check_good subdb:ren1 \
+ [is_substr "new" $sdb] 0
+ }
+ } else {
+ set sdb [lindex [lindex $d 0] 0]
+ set dbt [berkdb_open -rdonly -env $env $dbfile $sdb]
+ error_check_good db_open [is_valid_db $dbt] TRUE
+ set dbc [$dbt cursor]
+ error_check_good dbc_open \
+ [is_valid_cursor $dbc $dbt] TRUE
+ set ret [$dbc get -first]
+ error_check_good dbget2 [llength $ret] 0
+ error_check_good dbc_close [$dbc close] 0
+ error_check_good db_close [$dbt close] 0
+ if { $sub != 1 } {
+ set d [$c get -prev]
+ error_check_bad subdb:ren [llength $d] 0
+ set sdb [lindex [lindex $d 0] 0]
+ set dbt [berkdb_open -rdonly -env $env \
+ $dbfile $sdb]
+ error_check_good db_open [is_valid_db $dbt] TRUE
+ set dbc [$db cursor]
+ error_check_good dbc_open \
+ [is_valid_cursor $dbc $db] TRUE
+ set ret [$dbc get -first]
+ error_check_bad dbget3 [llength $ret] 0
+ error_check_good dbc_close [$dbc close] 0
+ error_check_good db_close [$dbt close] 0
+ }
+ }
+ error_check_good dbcclose [$c close] 0
+ error_check_good db_close [$db close] 0
+ }
+}
+
+proc copy_afterop { dir } {
+ set r [catch { set filecopy [glob $dir/*.afterop] } res]
+ if { $r == 1 } {
+ return
+ }
+ foreach f $filecopy {
+ set orig [string range $f 0 \
+ [expr [string last "." $f] - 1]]
+ catch { file rename -force $f $orig} res
+ }
+}
diff --git a/db/test/recd008.tcl b/db/test/recd008.tcl
index b75605b04..95480c31f 100644
--- a/db/test/recd008.tcl
+++ b/db/test/recd008.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd008.tcl,v 1.22 2000/12/07 19:13:46 sue Exp $
+# $Id: recd008.tcl,v 1.27 2003/01/08 05:51:41 bostic Exp $
#
-# Recovery Test 8.
-# Test deeply nested transactions and many-child transactions.
+# TEST recd008
+# TEST Test deeply nested transactions and many-child transactions.
proc recd008 { method {breadth 4} {depth 4} args} {
global kvals
source ./include.tcl
@@ -59,7 +59,7 @@ proc recd008 { method {breadth 4} {depth 4} args} {
set eflags "-mode 0644 -create -txn_max $txn_max \
-txn -home $testdir"
- set env_cmd "berkdb env $eflags"
+ set env_cmd "berkdb_env $eflags"
set dbenv [eval $env_cmd]
error_check_good env_open [is_valid_env $dbenv] TRUE
diff --git a/db/test/recd009.tcl b/db/test/recd009.tcl
index 2b4943734..0f42d11be 100644
--- a/db/test/recd009.tcl
+++ b/db/test/recd009.tcl
@@ -1,13 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd009.tcl,v 1.13 2000/12/07 19:13:46 sue Exp $
+# $Id: recd009.tcl,v 1.19 2003/01/08 05:51:44 bostic Exp $
#
-# Recovery Test 9.
-# Test stability of record numbers across splits
-# and reverse splits and across recovery.
+# TEST recd009
+# TEST Verify record numbering across split/reverse splits and recovery.
proc recd009 { method {select 0} args} {
global fixed_len
source ./include.tcl
@@ -31,11 +30,11 @@ proc recd009 { method {select 0} args} {
puts "\tRecd009.a: Create $method environment and database."
set flags "-create -txn -home $testdir"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set dbenv [eval $env_cmd]
error_check_good dbenv [is_valid_env $dbenv] TRUE
- set oflags "-env $dbenv -create -mode 0644 $opts $method"
+ set oflags "-env $dbenv -pagesize 8192 -create -mode 0644 $opts $method"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
diff --git a/db/test/recd010.tcl b/db/test/recd010.tcl
index 4fd1aefbb..1078d743b 100644
--- a/db/test/recd010.tcl
+++ b/db/test/recd010.tcl
@@ -1,20 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd010.tcl,v 1.14 2000/12/11 17:24:55 sue Exp $
+# $Id: recd010.tcl,v 1.20 2003/01/08 05:51:48 bostic Exp $
#
-# Recovery Test 10.
-# Test stability of btree duplicates across btree off-page dup splits
-# and reverse splits and across recovery.
+# TEST recd010
+# TEST Test stability of btree duplicates across btree off-page dup splits
+# TEST and reverse splits and across recovery.
proc recd010 { method {select 0} args} {
- global fixed_len
- global kvals
- global kvals_dups
- source ./include.tcl
-
- if { [is_dbtree $method] != 1 && [is_ddbtree $method] != 1} {
+ if { [is_btree $method] != 1 } {
puts "Recd010 skipping for method $method."
return
}
@@ -24,11 +19,24 @@ proc recd010 { method {select 0} args} {
puts "Recd010: skipping for specific pagesizes"
return
}
+ set largs $args
+ append largs " -dup "
+ recd010_main $method $select $largs
+ append largs " -dupsort "
+ recd010_main $method $select $largs
+}
- set opts [convert_args $method $args]
+proc recd010_main { method select largs } {
+ global fixed_len
+ global kvals
+ global kvals_dups
+ source ./include.tcl
+
+
+ set opts [convert_args $method $largs]
set method [convert_method $method]
- puts "\tRecd010 ($opts): Test duplicates across splits and recovery"
+ puts "Recd010 ($opts): Test duplicates across splits and recovery"
set testfile recd010.db
env_cleanup $testdir
@@ -41,10 +49,10 @@ proc recd010 { method {select 0} args} {
set data "data"
set key "recd010_key"
- puts "\tRecd010.a: Create $method environment and database."
+ puts "\tRecd010.a: Create environment and database."
set flags "-create -txn -home $testdir"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set dbenv [eval $env_cmd]
error_check_good dbenv [is_valid_env $dbenv] TRUE
@@ -69,17 +77,17 @@ proc recd010 { method {select 0} args} {
return
}
set rlist {
- { {recd010_split DB TXNID 1 $method 2 $mkeys}
+ { {recd010_split DB TXNID 1 2 $mkeys}
"Recd010.c: btree split 2 large dups"}
- { {recd010_split DB TXNID 0 $method 2 $mkeys}
+ { {recd010_split DB TXNID 0 2 $mkeys}
"Recd010.d: btree reverse split 2 large dups"}
- { {recd010_split DB TXNID 1 $method 10 $mkeys}
+ { {recd010_split DB TXNID 1 10 $mkeys}
"Recd010.e: btree split 10 dups"}
- { {recd010_split DB TXNID 0 $method 10 $mkeys}
+ { {recd010_split DB TXNID 0 10 $mkeys}
"Recd010.f: btree reverse split 10 dups"}
- { {recd010_split DB TXNID 1 $method 100 $mkeys}
+ { {recd010_split DB TXNID 1 100 $mkeys}
"Recd010.g: btree split 100 dups"}
- { {recd010_split DB TXNID 0 $method 100 $mkeys}
+ { {recd010_split DB TXNID 0 100 $mkeys}
"Recd010.h: btree reverse split 100 dups"}
}
@@ -100,7 +108,7 @@ proc recd010 { method {select 0} args} {
op_recover commit $testdir $env_cmd $testfile $cmd $msg
recd010_check $testdir $testfile $opts commit $reverse $firstkeys
}
- puts "\tRecd010.e: Verify db_printlog can read logfile"
+ puts "\tRecd010.i: Verify db_printlog can read logfile"
set tmpfile $testdir/printlog.out
set stat [catch {exec $util_path/db_printlog -h $testdir \
> $tmpfile} ret]
@@ -178,7 +186,14 @@ proc recd010_check { tdir testfile opts op reverse origdups } {
for {set d [$dbc get -set $key$ki]} { [llength $d] != 0 } {
set d [$dbc get -nextdup]} {
set thisdata [lindex [lindex $d 0] 1]
- error_check_good dup_check $thisdata $data$datacnt
+ if { $datacnt < 10 } {
+ set pdata $data.$ki.00$datacnt
+ } elseif { $datacnt < 100 } {
+ set pdata $data.$ki.0$datacnt
+ } else {
+ set pdata $data.$ki.$datacnt
+ }
+ error_check_good dup_check $thisdata $pdata
incr datacnt
}
error_check_good dup_count $datacnt $numdups
@@ -202,7 +217,7 @@ proc recd010_check { tdir testfile opts op reverse origdups } {
error_check_good db_close [$db close] 0
}
-proc recd010_split { db txn split method nkeys mkeys } {
+proc recd010_split { db txn split nkeys mkeys } {
global errorCode
global kvals
global kvals_dups
@@ -220,7 +235,14 @@ proc recd010_split { db txn split method nkeys mkeys } {
"\tRecd010_split: Add $nkeys keys, with $numdups duplicates each to force split."
for {set k 0} { $k < $nkeys } { incr k } {
for {set i 0} { $i < $numdups } { incr i } {
- set ret [$db put -txn $txn $key$k $data$i]
+ if { $i < 10 } {
+ set pdata $data.$k.00$i
+ } elseif { $i < 100 } {
+ set pdata $data.$k.0$i
+ } else {
+ set pdata $data.$k.$i
+ }
+ set ret [$db put -txn $txn $key$k $pdata]
error_check_good dbput:more $ret 0
}
}
diff --git a/db/test/recd011.tcl b/db/test/recd011.tcl
index a6fc26974..60458a791 100644
--- a/db/test/recd011.tcl
+++ b/db/test/recd011.tcl
@@ -1,39 +1,46 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd011.tcl,v 11.13 2000/12/06 17:09:54 sue Exp $
+# $Id: recd011.tcl,v 11.25 2003/08/21 16:44:06 ubell Exp $
#
-# Recovery Test 11.
-# Test recovery to a specific timestamp.
+# TEST recd011
+# TEST Verify that recovery to a specific timestamp works.
proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
source ./include.tcl
+ global rand_init
+ berkdb srand $rand_init
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 11
+ set tnum "011"
- puts "Recd0$tnum ($args): Test recovery to a specific timestamp."
+ puts "Recd$tnum ($method $args): Test recovery to a specific timestamp."
- set testfile recd0$tnum.db
+ set testfile recd$tnum.db
env_cleanup $testdir
set i 0
if { [is_record_based $method] == 1 } {
set key 1
+ set bigkey 1001
} else {
set key KEY
+ set bigkey BIGKEY
}
- puts "\tRecd0$tnum.a: Create environment and database."
- set flags "-create -txn -home $testdir"
+ puts "\tRecd$tnum.a: Create environment and database."
+ set bufsize [expr 8 * 1024]
+ set maxsize [expr 8 * $bufsize]
+ set flags "-create -txn -home $testdir -log_buffer $bufsize \
+ -log_max $maxsize"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set dbenv [eval $env_cmd]
error_check_good dbenv [is_valid_env $dbenv] TRUE
- set oflags "-env $dbenv -create -mode 0644 $args $omethod"
+ set oflags "-auto_commit -env $dbenv -create -mode 0644 $args $omethod"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -41,18 +48,29 @@ proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
puts "\t\tInitial Checkpoint"
error_check_good "Initial Checkpoint" [$dbenv txn_checkpoint] 0
- puts "\tRecd0$tnum.b ($niter iterations):\
+ puts "\tRecd$tnum.b ($niter iterations):\
Transaction-protected increment loop."
for { set i 0 } { $i <= $niter } { incr i } {
+ set str [random_data 4096 0 NOTHING]
set data $i
+ set bigdata $i$str
# Put, in a txn.
set txn [$dbenv txn]
error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
error_check_good db_put \
[$db put -txn $txn $key [chop_data $method $data]] 0
+ error_check_good db_put \
+ [$db put -txn $txn $bigkey [chop_data $method $bigdata]] 0
error_check_good txn_commit [$txn commit] 0
+ # We need to sleep before taking the timestamp to guarantee
+ # that the timestamp is *after* this transaction commits.
+ # Since the resolution of the system call used by Berkeley DB
+ # is less than a second, rounding to the nearest second can
+ # otherwise cause off-by-one errors in the test.
+ tclsleep $sleep_time
+
set timeof($i) [timestamp -r]
# If an appropriate period has elapsed, checkpoint.
@@ -61,7 +79,8 @@ proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
error_check_good ckpt($i) [$dbenv txn_checkpoint] 0
}
- # sleep for N seconds.
+ # Sleep again to ensure that the next operation definitely
+ # occurs after the timestamp.
tclsleep $sleep_time
}
error_check_good db_close [$db close] 0
@@ -69,14 +88,15 @@ proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
# Now, loop through and recover to each timestamp, verifying the
# expected increment.
- puts "\tRecd0$tnum.c: Recover to each timestamp and check."
- for { set i 0 } { $i <= $niter } { incr i } {
+ puts "\tRecd$tnum.c: Recover to each timestamp and check."
+ for { set i $niter } { $i >= 0 } { incr i -1 } {
# Run db_recover.
- berkdb debug_check
set t [clock format $timeof($i) -format "%y%m%d%H%M.%S"]
+ # puts $t
+ berkdb debug_check
set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
- error_check_good db_recover($i,$t) $ret 0
+ error_check_good db_recover($i,$t,$r) $ret 0
# Now open the db and check the timestamp.
set db [eval {berkdb_open} $testdir/$testfile]
@@ -91,13 +111,14 @@ proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
# Finally, recover to a time well before the first timestamp
# and well after the last timestamp. The latter should
- # be just like the last timestamp; the former should fail.
- puts "\tRecd0$tnum.d: Recover to before the first timestamp."
+ # be just like the timestamp of the last test performed;
+ # the former should fail.
+ puts "\tRecd$tnum.d: Recover to before the first timestamp."
set t [clock format [expr $timeof(0) - 1000] -format "%y%m%d%H%M.%S"]
set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
error_check_bad db_recover(before,$t) $ret 0
- puts "\tRecd0$tnum.e: Recover to after the last timestamp."
+ puts "\tRecd$tnum.e: Recover to after the last timestamp."
set t [clock format \
[expr $timeof($niter) + 1000] -format "%y%m%d%H%M.%S"]
set ret [catch {exec $util_path/db_recover -h $testdir -t $t} r]
@@ -108,8 +129,8 @@ proc recd011 { method {niter 200} {ckpt_freq 15} {sleep_time 1} args } {
error_check_good db_open(after) [is_valid_db $db] TRUE
set dbt [$db get $key]
- set datum [lindex [lindex $dbt 0] 1]
+ set datum2 [lindex [lindex $dbt 0] 1]
- error_check_good timestamp_recover $datum [pad_data $method $niter]
+ error_check_good timestamp_recover $datum2 $datum
error_check_good db_close [$db close] 0
}
diff --git a/db/test/recd012.tcl b/db/test/recd012.tcl
index 19dd7b011..d855b5425 100644
--- a/db/test/recd012.tcl
+++ b/db/test/recd012.tcl
@@ -1,32 +1,32 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd012.tcl,v 11.14 2000/12/11 17:24:55 sue Exp $
+# $Id: recd012.tcl,v 11.29 2003/01/08 05:51:53 bostic Exp $
#
-# Recovery Test 12.
-# Test recovery handling of file opens and closes.
+# TEST recd012
+# TEST Test of log file ID management. [#2288]
+# TEST Test recovery handling of file opens and closes.
proc recd012 { method {start 0} \
{niter 49} {noutiter 25} {niniter 100} {ndbs 5} args } {
source ./include.tcl
- set tnum 12
+ set tnum "012"
set pagesize 512
if { $is_qnx_test } {
set niter 40
}
- puts "Recd0$tnum $method ($args): Test recovery file management."
+ puts "Recd$tnum $method ($args): Test recovery file management."
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
puts "Recd012: skipping for specific pagesizes"
return
}
-
+
for { set i $start } { $i <= $niter } { incr i } {
-
env_cleanup $testdir
# For repeatability, we pass in the iteration number
@@ -35,13 +35,13 @@ proc recd012 { method {start 0} \
# This lets us re-run a potentially failing iteration
# without having to start from the beginning and work
# our way to it.
- #
+ #
# The number of databases ranges from 4 to 8 and is
# a function of $niter
-# set ndbs [expr ($i % 5) + 4]
-
+ # set ndbs [expr ($i % 5) + 4]
+
recd012_body \
- $method $ndbs $i $noutiter $niniter $pagesize $tnum $args
+ $method $ndbs $i $noutiter $niniter $pagesize $tnum $args
}
}
@@ -52,11 +52,18 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
set largs [convert_args $method $largs]
set omethod [convert_method $method]
- puts "\tRecd0$tnum $method ($largs): Iteration $iter"
- puts "\t\tRecd0$tnum.a: Create environment and $ndbs databases."
+ puts "\tRecd$tnum $method ($largs): Iteration $iter"
+ puts "\t\tRecd$tnum.a: Create environment and $ndbs databases."
+
+ # We run out of lockers during some of the recovery runs, so
+ # we need to make sure that we specify a DB_CONFIG that will
+ # give us enough lockers.
+ set f [open $testdir/DB_CONFIG w]
+ puts $f "set_lk_max_lockers 5000"
+ close $f
set flags "-create -txn -home $testdir"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
error_check_good env_remove [berkdb envremove -home $testdir] 0
set dbenv [eval $env_cmd]
error_check_good dbenv [is_valid_env $dbenv] TRUE
@@ -67,9 +74,12 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
# Initialize database that keeps track of number of open files (so
# we don't run out of descriptors).
set ofname of.db
- set ofdb [berkdb_open -env $dbenv\
+ set txn [$dbenv txn]
+ error_check_good open_txn_begin [is_valid_txn $txn $dbenv] TRUE
+ set ofdb [berkdb_open -env $dbenv -txn $txn\
-create -dup -mode 0644 -btree -pagesize 512 $ofname]
error_check_good of_open [is_valid_db $ofdb] TRUE
+ error_check_good open_txn_commit [$txn commit] 0
set oftxn [$dbenv txn]
error_check_good of_txn [is_valid_txn $oftxn $dbenv] TRUE
error_check_good of_put [$ofdb put -txn $oftxn $recd012_ofkey 1] 0
@@ -80,34 +90,34 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
# Create ndbs databases to work in, and a file listing db names to
# pick from.
- set f [open TESTDIR/dblist w]
- set oflags \
- "-env $dbenv -create -mode 0644 -pagesize $psz $largs $omethod"
+ set f [open $testdir/dblist w]
+
+ set oflags "-auto_commit -env $dbenv \
+ -create -mode 0644 -pagesize $psz $largs $omethod"
for { set i 0 } { $i < $ndbs } { incr i } {
# 50-50 chance of being a subdb, unless we're a queue.
if { [berkdb random_int 0 1] || [is_queue $method] } {
# not a subdb
- set dbname recd0$tnum-$i.db
+ set dbname recd$tnum-$i.db
} else {
# subdb
- set dbname "recd0$tnum-subdb.db s$i"
+ set dbname "recd$tnum-subdb.db s$i"
}
puts $f $dbname
set db [eval berkdb_open $oflags $dbname]
error_check_good db($i) [is_valid_db $db] TRUE
error_check_good db($i)_close [$db close] 0
- }
+ }
close $f
-
error_check_good env_close [$dbenv close] 0
-
+
# Now we get to the meat of things. Our goal is to do some number
# of opens, closes, updates, and shutdowns (simulated here by a
# close of all open handles and a close/reopen of the environment,
# with or without an envremove), matching the regular expression
#
# ((O[OUC]+S)+R+V)
- #
+ #
# We'll repeat the inner + a random number up to $niniter times,
# and the outer + a random number up to $noutiter times.
#
@@ -116,23 +126,22 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
# all handles properly. The environment will be left lying around
# before we run recovery 50% of the time.
set out [berkdb random_int 1 $noutiter]
- puts "\t\tRecd0$tnum.b: Performing $out recoveries of up to $niniter\
- ops."
+ puts \
+ "\t\tRecd$tnum.b: Performing $out recoveries of up to $niniter ops."
for { set i 0 } { $i < $out } { incr i } {
set child [open "|$tclsh_path" w]
-
- # For performance, don't source everything,
+
+ # For performance, don't source everything,
# just what we'll need.
puts $child "load $tcllib"
puts $child "set fixed_len $fixed_len"
- puts $child "source ../test/testutils.tcl"
- puts $child "source ../test/recd0$tnum.tcl"
+ puts $child "source $src_root/test/testutils.tcl"
+ puts $child "source $src_root/test/recd$tnum.tcl"
set rnd [expr $iter * 10000 + $i * 100 + $rand_init]
# Go.
- # puts "recd012_dochild {$env_cmd} $rnd $i $niniter\
- # $ndbs $tnum $method $ofname $largs"
+ berkdb debug_check
puts $child "recd012_dochild {$env_cmd} $rnd $i $niniter\
$ndbs $tnum $method $ofname $largs"
close $child
@@ -140,35 +149,35 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
# Run recovery 0-3 times.
set nrecs [berkdb random_int 0 3]
for { set j 0 } { $j < $nrecs } { incr j } {
+ berkdb debug_check
set ret [catch {exec $util_path/db_recover \
-h $testdir} res]
- if { $ret != 0 } {
+ if { $ret != 0 } {
puts "FAIL: db_recover returned with nonzero\
exit status, output as follows:"
file mkdir /tmp/12out
set fd [open /tmp/12out/[pid] w]
- puts $fd $res
+ puts $fd $res
close $fd
}
error_check_good recover($j) $ret 0
}
-
}
- # Run recovery one final time; it doesn't make sense to
+ # Run recovery one final time; it doesn't make sense to
# check integrity if we do not.
set ret [catch {exec $util_path/db_recover -h $testdir} res]
- if { $ret != 0 } {
+ if { $ret != 0 } {
puts "FAIL: db_recover returned with nonzero\
exit status, output as follows:"
- puts $res
+ puts $res
}
# Make sure each datum is the correct filename.
- puts "\t\tRecd0$tnum.c: Checking data integrity."
- set dbenv [berkdb env -create -private -home $testdir]
+ puts "\t\tRecd$tnum.c: Checking data integrity."
+ set dbenv [berkdb_env -create -private -home $testdir]
error_check_good env_open_integrity [is_valid_env $dbenv] TRUE
- set f [open TESTDIR/dblist r]
+ set f [open $testdir/dblist r]
set i 0
while { [gets $f dbinfo] > 0 } {
set db [eval berkdb_open -env $dbenv $dbinfo]
@@ -188,21 +197,21 @@ proc recd012_body { method {ndbs 5} iter noutiter niniter psz tnum {largs ""} }
close $f
error_check_good env_close_integrity [$dbenv close] 0
-
# Verify
- error_check_good verify [verify_dir $testdir "\t\tRecd0$tnum.d: "] 0
+ error_check_good verify \
+ [verify_dir $testdir "\t\tRecd$tnum.d: " 0 0 1] 0
}
-
proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
ofname args } {
global recd012_ofkey
+ source ./include.tcl
if { [is_record_based $method] } {
set keybase ""
} else {
set keybase .[repeat abcdefghijklmnopqrstuvwxyz 4]
}
-
+
# Initialize our random number generator, repeatably based on an arg.
berkdb srand $rnd
@@ -212,7 +221,11 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
# Find out how many databases appear to be open in the log--we
# don't want recovery to run out of filehandles.
- set ofdb [berkdb_open -env $dbenv $ofname]
+ set txn [$dbenv txn]
+ error_check_good child_txn_begin [is_valid_txn $txn $dbenv] TRUE
+ set ofdb [berkdb_open -env $dbenv -txn $txn $ofname]
+ error_check_good child_txn_commit [$txn commit] 0
+
set oftxn [$dbenv txn]
error_check_good of_txn [is_valid_txn $oftxn $dbenv] TRUE
set dbt [$ofdb get -txn $oftxn $recd012_ofkey]
@@ -222,14 +235,14 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
error_check_good of_commit [$oftxn commit] 0
# Read our dbnames
- set f [open TESTDIR/dblist r]
+ set f [open $testdir/dblist r]
set i 0
while { [gets $f dbname($i)] > 0 } {
incr i
}
close $f
- # We now have $ndbs extant databases.
+ # We now have $ndbs extant databases.
# Open one of them, just to get us started.
set opendbs {}
set oflags "-env $dbenv $args"
@@ -254,14 +267,13 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
set num_open [llength $opendbs]
if { $num_open == 0 } {
# If none are open, do an open first.
-
recd012_open
}
set n [berkdb random_int 0 [expr $num_open - 1]]
set pair [lindex $opendbs $n]
set udb [lindex $pair 0]
set uname [lindex $pair 1]
-
+
set key [berkdb random_int 1000 1999]$keybase
set data [chop_data $method $uname]
error_check_good put($uname,$udb,$key,$data) \
@@ -273,12 +285,11 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
[$curtxn commit] 0
set curtxn [$dbenv txn]
error_check_good txn_reopen \
- [is_valid_txn $curtxn $dbenv] TRUE
+ [is_valid_txn $curtxn $dbenv] TRUE
}
}
2 {
# Close.
-
if { [llength $opendbs] == 0 } {
# If none are open, open instead of closing.
recd012_open
@@ -286,34 +297,32 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
}
# Commit curtxn first, lest we self-deadlock.
- error_check_good txn_recommit \
- [$curtxn commit] 0
+ error_check_good txn_recommit [$curtxn commit] 0
# Do it.
set which [berkdb random_int 0 \
[expr [llength $opendbs] - 1]]
-
+
set db [lindex [lindex $opendbs $which] 0]
error_check_good db_choice [is_valid_db $db] TRUE
global errorCode errorInfo
error_check_good db_close \
[[lindex [lindex $opendbs $which] 0] close] 0
+
set opendbs [lreplace $opendbs $which $which]
incr nopenfiles -1
-
-
+
# Reopen txn.
set curtxn [$dbenv txn]
error_check_good txn_reopen \
[is_valid_txn $curtxn $dbenv] TRUE
-
}
}
# One time in two hundred, checkpoint.
if { [berkdb random_int 0 199] == 0 } {
- puts "\t\t\tRecd0$tnum:\
+ puts "\t\t\tRecd$tnum:\
Random checkpoint after operation $outiter.$j."
error_check_good txn_ckpt \
[$dbenv txn_checkpoint] 0
@@ -335,12 +344,12 @@ proc recd012_dochild { env_cmd rnd outiter niniter ndbs tnum method\
[$ofdb put -txn $oftxn $recd012_ofkey $nopenfiles] 0
error_check_good of_commit [$oftxn commit] 0
error_check_good ofdb_close [$ofdb close] 0
-}
+}
proc recd012_open { } {
- # This is basically an inline and has to modify curtxn,
+ # This is basically an inline and has to modify curtxn,
# so use upvars.
- upvar curtxn curtxn
+ upvar curtxn curtxn
upvar ndbs ndbs
upvar dbname dbname
upvar dbenv dbenv
@@ -361,21 +370,21 @@ proc recd012_open { } {
# Do it.
set which [berkdb random_int 0 [expr $ndbs - 1]]
- set db [eval berkdb_open \
- $oflags $dbname($which)]
+
+ set db [eval berkdb_open -auto_commit $oflags $dbname($which)]
+
lappend opendbs [list $db $dbname($which)]
# Reopen txn.
set curtxn [$dbenv txn]
- error_check_good txn_reopen \
- [is_valid_txn $curtxn $dbenv] TRUE
+ error_check_good txn_reopen [is_valid_txn $curtxn $dbenv] TRUE
incr nopenfiles
}
# Update the database containing the number of files that db_recover has
# to contend with--we want to avoid letting it run out of file descriptors.
-# We do this by keeping track of the number of unclosed opens since the
+# We do this by keeping track of the number of unclosed opens since the
# checkpoint before last.
# $recd012_ofkey stores this current value; the two dups available
# at $recd012_ofckptkey store the number of opens since the last checkpoint
@@ -399,7 +408,7 @@ proc recd012_nopenfiles_ckpt { env db nopenfiles } {
error_check_good del [$dbc del] 0
set nopenfiles [expr $nopenfiles - $discard]
-
+
# Get the next ckpt value
set dbt [$dbc get -nextdup]
error_check_good set2 [llength $dbt] 1
@@ -410,10 +419,10 @@ proc recd012_nopenfiles_ckpt { env db nopenfiles } {
# Put this new number at the end of the dup set.
error_check_good put [$dbc put -keylast $recd012_ofckptkey $sincelast] 0
-
+
# We should never deadlock since we're the only one in this db.
error_check_good dbc_close [$dbc close] 0
- error_check_good txn_commit [$txn commit] 0
+ error_check_good txn_commit [$txn commit] 0
return $nopenfiles
}
diff --git a/db/test/recd013.tcl b/db/test/recd013.tcl
index d134d487f..075d4b2ef 100644
--- a/db/test/recd013.tcl
+++ b/db/test/recd013.tcl
@@ -1,22 +1,22 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd013.tcl,v 11.10 2000/12/11 17:24:55 sue Exp $
+# $Id: recd013.tcl,v 11.20 2003/01/08 05:51:57 bostic Exp $
#
-# Recovery Test 13.
-# Smoke test of aborted cursor adjustments.
+# TEST recd013
+# TEST Test of cursor adjustment on child transaction aborts. [#2373]
#
# XXX
# Other tests that cover more specific variants of the same issue
# are in the access method tests for now. This is probably wrong; we
# put this one here because they're closely based on and intertwined
# with other, non-transactional cursor stability tests that are among
-# the access method tests, and because we need at least one test to
+# the access method tests, and because we need at least one test to
# fit under recd and keep logtrack from complaining. We'll sort out the mess
# later; the important thing, for now, is that everything that needs to gets
-# tested. (This really shouldn't be under recd at all, since it doesn't
+# tested. (This really shouldn't be under recd at all, since it doesn't
# run recovery!)
proc recd013 { method { nitems 100 } args } {
source ./include.tcl
@@ -24,17 +24,17 @@ proc recd013 { method { nitems 100 } args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 13
+ set tnum "013"
set pgsz 512
- puts "Recd0$tnum $method ($args): Test of aborted cursor adjustments."
+ puts "Recd$tnum $method ($args): Test of aborted cursor adjustments."
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
puts "Recd013: skipping for specific pagesizes"
return
}
- set testfile recd0$tnum.db
+ set testfile recd$tnum.db
env_cleanup $testdir
set i 0
@@ -44,15 +44,16 @@ proc recd013 { method { nitems 100 } args } {
set keybase "key"
}
- puts "\tRecd0$tnum.a:\
+ puts "\tRecd$tnum.a:\
Create environment, database, and parent transaction."
set flags "-create -txn -home $testdir"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
set env [eval $env_cmd]
error_check_good dbenv [is_valid_env $env] TRUE
- set oflags "-env $env -create -mode 0644 -pagesize $pgsz $args $omethod"
+ set oflags \
+ "-auto_commit -env $env -create -mode 0644 -pagesize $pgsz $args $omethod"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -63,21 +64,46 @@ proc recd013 { method { nitems 100 } args } {
for { set i 1 } { $i <= 2 * $nitems } { incr i 2 } {
set key $keybase$i
set data [chop_data $method $i$alphabet]
+
+ # First, try to put the item in a child transaction,
+ # then abort and verify all the cursors we've done up until
+ # now.
+ set ctxn [$env txn -parent $txn]
+ error_check_good child_txn($i) [is_valid_txn $ctxn $env] TRUE
+ error_check_good fake_put($i) [$db put -txn $ctxn $key $data] 0
+ error_check_good ctxn_abort($i) [$ctxn abort] 0
+ for { set j 1 } { $j < $i } { incr j 2 } {
+ error_check_good dbc_get($j) [$dbc($j) get -current] \
+ [list [list $keybase$j \
+ [pad_data $method $j$alphabet]]]
+ }
+
+ # Then put for real.
error_check_good init_put($i) [$db put -txn $txn $key $data] 0
+
+ # Set a cursor of the parent txn to each item.
+ set dbc($i) [$db cursor -txn $txn]
+ error_check_good dbc_getset($i) \
+ [$dbc($i) get -set $key] \
+ [list [list $keybase$i [pad_data $method $i$alphabet]]]
+
+ # And verify all the cursors, including the one we just
+ # created.
+ for { set j 1 } { $j <= $i } { incr j 2 } {
+ error_check_good dbc_get($j) [$dbc($j) get -current] \
+ [list [list $keybase$j \
+ [pad_data $method $j$alphabet]]]
+ }
}
- error_check_good init_txn_commit [$txn commit] 0
- # Create an initial txn; set a cursor of that txn to each item.
- set txn [$env txn]
- error_check_good txn [is_valid_txn $txn $env] TRUE
+ puts "\t\tRecd$tnum.a.1: Verify cursor stability after init."
for { set i 1 } { $i <= 2 * $nitems } { incr i 2 } {
- set dbc($i) [$db cursor -txn $txn]
- error_check_good dbc_getset($i) [$dbc($i) get -set $keybase$i] \
+ error_check_good dbc_get($i) [$dbc($i) get -current] \
[list [list $keybase$i [pad_data $method $i$alphabet]]]
}
-
- puts "\tRecd0$tnum.b: Put test."
- puts "\t\tRecd0$tnum.b.1: Put items."
+
+ puts "\tRecd$tnum.b: Put test."
+ puts "\t\tRecd$tnum.b.1: Put items."
set ctxn [$env txn -parent $txn]
error_check_good txn [is_valid_txn $ctxn $env] TRUE
for { set i 2 } { $i <= 2 * $nitems } { incr i 2 } {
@@ -99,8 +125,8 @@ proc recd013 { method { nitems 100 } args } {
error_check_good curs_close [$curs close] 0
}
}
-
- puts "\t\tRecd0$tnum.b.2: Verify cursor stability after abort."
+
+ puts "\t\tRecd$tnum.b.2: Verify cursor stability after abort."
error_check_good ctxn_abort [$ctxn abort] 0
for { set i 1 } { $i <= 2 * $nitems } { incr i 2 } {
@@ -120,9 +146,9 @@ proc recd013 { method { nitems 100 } args } {
error_check_good db_sync [$db sync] 0
error_check_good db_verify \
- [verify_dir $testdir "\t\tRecd0$tnum.b.3: "] 0
+ [verify_dir $testdir "\t\tRecd$tnum.b.3: "] 0
- # Now put back all the even records, this time in the parent.
+ # Now put back all the even records, this time in the parent.
# Commit and re-begin the transaction so we can abort and
# get back to a nice full database.
for { set i 2 } { $i <= 2 * $nitems } { incr i 2 } {
@@ -135,10 +161,10 @@ proc recd013 { method { nitems 100 } args } {
error_check_good txn [is_valid_txn $txn $env] TRUE
# Delete test. Set a cursor to each record. Delete the even ones
- # in the parent and check cursor stability. Then open a child
+ # in the parent and check cursor stability. Then open a child
# transaction, and delete the odd ones. Verify that the database
- # is empty
- puts "\tRecd0$tnum.c: Delete test."
+ # is empty.
+ puts "\tRecd$tnum.c: Delete test."
unset dbc
# Create cursors pointing at each item.
@@ -149,8 +175,9 @@ proc recd013 { method { nitems 100 } args } {
error_check_good dbc_getset($i) [$dbc($i) get -set $keybase$i] \
[list [list $keybase$i [pad_data $method $i$alphabet]]]
}
-
- puts "\t\tRecd0$tnum.c.1: Delete even items in parent txn."
+
+ puts "\t\tRecd$tnum.c.1: Delete even items in child txn and abort."
+
if { [is_rrecno $method] != 1 } {
set init 2
set bound [expr 2 * $nitems]
@@ -162,9 +189,25 @@ proc recd013 { method { nitems 100 } args } {
set bound [expr $nitems + 1]
set step 1
}
+
+ set ctxn [$env txn -parent $txn]
for { set i $init } { $i <= $bound } { incr i $step } {
- error_check_good del($i) [$db del -txn $txn $keybase$i] 0
+ error_check_good del($i) [$db del -txn $ctxn $keybase$i] 0
}
+ error_check_good ctxn_abort [$ctxn abort] 0
+
+ # Verify that no items are deleted.
+ for { set i 1 } { $i <= 2 * $nitems } { incr i } {
+ error_check_good dbc_get($i) [$dbc($i) get -current] \
+ [list [list $keybase$i [pad_data $method $i$alphabet]]]
+ }
+
+ puts "\t\tRecd$tnum.c.2: Delete even items in child txn and commit."
+ set ctxn [$env txn -parent $txn]
+ for { set i $init } { $i <= $bound } { incr i $step } {
+ error_check_good del($i) [$db del -txn $ctxn $keybase$i] 0
+ }
+ error_check_good ctxn_commit [$ctxn commit] 0
# Verify that even items are deleted and odd items are not.
for { set i 1 } { $i <= 2 * $nitems } { incr i 2 } {
@@ -181,10 +224,10 @@ proc recd013 { method { nitems 100 } args } {
[list [list "" ""]]
}
- puts "\t\tRecd0$tnum.c.2: Delete odd items in child txn."
+ puts "\t\tRecd$tnum.c.3: Delete odd items in child txn."
set ctxn [$env txn -parent $txn]
-
+
for { set i 1 } { $i <= 2 * $nitems } { incr i 2 } {
if { [is_rrecno $method] != 1 } {
set j $i
@@ -196,14 +239,14 @@ proc recd013 { method { nitems 100 } args } {
}
error_check_good del($i) [$db del -txn $ctxn $keybase$j] 0
}
-
+
# Verify that everyone's deleted.
for { set i 1 } { $i <= 2 * $nitems } { incr i } {
error_check_good get_deleted($i) \
[llength [$db get -txn $ctxn $keybase$i]] 0
}
- puts "\t\tRecd0$tnum.c.3: Verify cursor stability after abort."
+ puts "\t\tRecd$tnum.c.4: Verify cursor stability after abort."
error_check_good ctxn_abort [$ctxn abort] 0
# Verify that even items are deleted and odd items are not.
@@ -229,16 +272,16 @@ proc recd013 { method { nitems 100 } args } {
# Sync and verify.
error_check_good db_sync [$db sync] 0
error_check_good db_verify \
- [verify_dir $testdir "\t\tRecd0$tnum.c.4: "] 0
+ [verify_dir $testdir "\t\tRecd$tnum.c.5: "] 0
- puts "\tRecd0$tnum.d: Clean up."
+ puts "\tRecd$tnum.d: Clean up."
error_check_good txn_commit [$txn commit] 0
error_check_good db_close [$db close] 0
error_check_good env_close [$env close] 0
error_check_good verify_dir \
- [verify_dir $testdir "\t\tRecd0$tnum.d.1: "] 0
+ [verify_dir $testdir "\t\tRecd$tnum.d.1: "] 0
- if { $log_log_record_types == 1 } {
+ if { $log_log_record_types == 1 } {
logtrack_read $testdir
}
}
diff --git a/db/test/recd014.tcl b/db/test/recd014.tcl
index 83b3920de..c47e13ec0 100644
--- a/db/test/recd014.tcl
+++ b/db/test/recd014.tcl
@@ -1,16 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: recd014.tcl,v 1.9 2001/01/11 17:16:04 sue Exp $
+# $Id: recd014.tcl,v 1.20 2003/01/08 05:52:01 bostic Exp $
#
-# Recovery Test 14.
-# This is a recovery test for create/delete of queue extents. We have
-# hooks in the database so that we can abort the process at various
-# points and make sure that the extent file does or does not exist. We
-# then need to recover and make sure the file is correctly existing
-# or not, as the case may be.
+# TEST recd014
+# TEST This is a recovery test for create/delete of queue extents. We
+# TEST then need to recover and make sure the file is correctly existing
+# TEST or not, as the case may be.
proc recd014 { method args} {
global fixed_len
source ./include.tcl
@@ -51,7 +49,7 @@ proc recd014 { method args} {
set flags "-create -txn -home $testdir"
puts "\tRecd014.a: creating environment"
- set env_cmd "berkdb env $flags"
+ set env_cmd "berkdb_env $flags"
puts "\tRecd014.b: Create test commit"
ext_recover_create $testdir $env_cmd $omethod \
@@ -61,21 +59,14 @@ proc recd014 { method args} {
$opts $testfile abort
puts "\tRecd014.c: Consume test commit"
- ext_recover_delete $testdir $env_cmd $omethod \
- $opts $testfile consume commit
+ ext_recover_consume $testdir $env_cmd $omethod \
+ $opts $testfile commit
puts "\tRecd014.c: Consume test abort"
- ext_recover_delete $testdir $env_cmd $omethod \
- $opts $testfile consume abort
-
- puts "\tRecd014.d: Delete test commit"
- ext_recover_delete $testdir $env_cmd $omethod \
- $opts $testfile delete commit
- puts "\tRecd014.d: Delete test abort"
- ext_recover_delete $testdir $env_cmd $omethod \
- $opts $testfile delete abort
+ ext_recover_consume $testdir $env_cmd $omethod \
+ $opts $testfile abort
set fixed_len $orig_fixed_len
- puts "\tRecd014.e: Verify db_printlog can read logfile"
+ puts "\tRecd014.d: Verify db_printlog can read logfile"
set tmpfile $testdir/printlog.out
set stat [catch {exec $util_path/db_printlog -h $testdir \
> $tmpfile} ret]
@@ -105,7 +96,11 @@ proc ext_recover_create { dir env_cmd method opts dbfile txncmd } {
set t [$env txn]
error_check_good txn_begin [is_valid_txn $t $env] TRUE
- set ret [catch {eval {berkdb_open} $oflags} db]
+ set ret [catch {eval {berkdb_open} -txn $t $oflags} db]
+ error_check_good txn_commit [$t commit] 0
+
+ set t [$env txn]
+ error_check_good txn_begin [is_valid_txn $t $env] TRUE
#
# The command to execute to create an extent is a put.
@@ -123,7 +118,7 @@ proc ext_recover_create { dir env_cmd method opts dbfile txncmd } {
puts "\t\tSyncing"
error_check_good db_sync [$db sync] 0
- catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res
+ catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res
copy_extent_file $dir $dbfile afterop
error_check_good txn_$txncmd:$t [$t $txncmd] 0
@@ -149,7 +144,10 @@ proc ext_recover_create { dir env_cmd method opts dbfile txncmd } {
catch { file copy -force $dir/$dbfile $init_file } res
copy_extent_file $dir $dbfile init
}
+ set t [$env txn]
+ error_check_good txn_begin [is_valid_txn $t $env] TRUE
error_check_good db_close [$db close] 0
+ error_check_good txn_commit [$t commit] 0
error_check_good env_close [$env close] 0
#
@@ -241,7 +239,7 @@ proc ext_create_check { dir txncmd init_file dbfile oflags putrecno } {
#
error_check_good \
diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff "-dar" $init_file $dir $dbfile] 0
} else {
#
# Operation aborted. The file is there, but make
@@ -255,8 +253,7 @@ proc ext_create_check { dir txncmd init_file dbfile oflags putrecno } {
}
}
-
-proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
+proc ext_recover_consume { dir env_cmd method opts dbfile txncmd} {
global log_log_record_types
global alphabet
source ./include.tcl
@@ -269,55 +266,52 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
env_cleanup $dir
# Open the environment and set the copy/abort locations
set env [eval $env_cmd]
-
- set oflags "-create $method -mode 0644 -pagesize 512 \
+
+ set oflags "-create -auto_commit $method -mode 0644 -pagesize 512 \
-env $env $opts $dbfile"
-
+
#
# Open our db, add some data, close and copy as our
# init file.
#
set db [eval {berkdb_open} $oflags]
error_check_good db_open [is_valid_db $db] TRUE
-
+
set extnum 0
set data [chop_data $method [replicate $alphabet 512]]
set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
- set putrecno [$db put -append $data]
+ set putrecno [$db put -txn $txn -append $data]
error_check_good db_put $putrecno 1
error_check_good commit [$txn commit] 0
error_check_good db_close [$db close] 0
-
+
puts "\t\tExecuting command"
-
+
set init_file $dir/$dbfile.init
catch { file copy -force $dir/$dbfile $init_file } res
copy_extent_file $dir $dbfile init
-
+
#
# If we don't abort, then we expect success.
# If we abort, we expect no file removed until recovery is run.
#
set db [eval {berkdb_open} $oflags]
error_check_good db_open [is_valid_db $db] TRUE
-
+
set t [$env txn]
error_check_good txn_begin [is_valid_txn $t $env] TRUE
- if { [string compare $op "delete"] == 0 } {
- set dbcmd "$db del -txn $t $putrecno"
- } else {
- set dbcmd "$db get -txn $t -consume"
- }
+ set dbcmd "$db get -txn $t -consume"
set ret [eval $dbcmd]
error_check_good db_sync [$db sync] 0
- catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res
+ catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res
copy_extent_file $dir $dbfile afterop
error_check_good txn_$txncmd:$t [$t $txncmd] 0
+ error_check_good db_sync [$db sync] 0
set dbq [make_ext_filename $dir $dbfile $extnum]
if {$txncmd == "abort"} {
#
@@ -330,20 +324,10 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
# Since we aborted the txn, we should be able
# to get to our original entry.
#
- error_check_good post$op.1 [file exists $dbq] 1
-
- set xdb [eval {berkdb_open} $oflags]
- error_check_good db_open [is_valid_db $xdb] TRUE
- set kd [$xdb get $putrecno]
- set key [lindex [lindex $kd 0] 0]
- error_check_good dbget_key $key $putrecno
- set retdata [lindex [lindex $kd 0] 1]
- error_check_good dbget_data $data $retdata
- error_check_good db_close [$xdb close] 0
-
+ error_check_good postconsume.1 [file exists $dbq] 1
error_check_good \
- diff(init,post$op.2):diff($init_file,$dir/$dbfile)\
- [dbdump_diff $init_file $dir/$dbfile] 0
+ diff(init,postconsume.2):diff($init_file,$dir/$dbfile)\
+ [dbdump_diff "-dar" $init_file $dir $dbfile] 0
} else {
#
# Operation was committed, verify it does
@@ -353,14 +337,8 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
#
# Check file existence. Consume operations remove
# the extent when we move off, which we should have
- # done. Delete operations won't remove the extent
- # until we run recovery.
- #
- if { [string compare $op "delete"] == 0 } {
- error_check_good ${op}_exists [file exists $dbq] 1
- } else {
- error_check_good ${op}_exists [file exists $dbq] 0
- }
+ # done.
+ error_check_good consume_exists [file exists $dbq] 0
}
error_check_good db_close [$db close] 0
error_check_good env_close [$env close] 0
@@ -384,7 +362,7 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
#
error_check_good \
diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff "-dar" $init_file $dir $dbfile] 0
} else {
#
# Operation was committed, verify it does
@@ -396,7 +374,7 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
#
# Run recovery here. Re-do the operation.
- # Verify that the file doesn't exist
+ # Verify that the file doesn't exist
# (if we committed) or change (if we aborted)
# when we are done.
#
@@ -418,14 +396,14 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
#
error_check_good \
diff(initial,post-recover1):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff "-dar" $init_file $dir $dbfile] 0
} else {
#
# Operation was committed, verify it does
# not exist. Both operations should result
# in no file existing now that we've run recovery.
#
- error_check_good after_recover1 [file exists $dbq] 0
+ error_check_good after_recover2 [file exists $dbq] 0
}
#
@@ -456,12 +434,12 @@ proc ext_recover_delete { dir env_cmd method opts dbfile op txncmd} {
#
error_check_good \
diff(initial,post-recover2):diff($init_file,$dir/$dbfile) \
- [dbdump_diff $init_file $dir/$dbfile] 0
+ [dbdump_diff "-dar" $init_file $dir $dbfile] 0
} else {
#
# Operation was committed, verify it still does
# not exist.
#
- error_check_good after_recover2 [file exists $dbq] 0
+ error_check_good after_recover3 [file exists $dbq] 0
}
}
diff --git a/db/test/recd015.tcl b/db/test/recd015.tcl
index 91d496a2c..b9aca8720 100644
--- a/db/test/recd015.tcl
+++ b/db/test/recd015.tcl
@@ -1,31 +1,50 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2001
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd015.tcl,v 1.3 2001/05/05 14:08:14 margo Exp
+# $Id: recd015.tcl,v 1.15 2003/04/18 14:39:09 sandstro Exp $
#
-# Recovery Test 15.
-# This is a recovery test for testing lots of prepared txns.
-# This test is to force the use of txn_recover to call with the
-# DB_FIRST flag and then DB_NEXT.
+# TEST recd015
+# TEST This is a recovery test for testing lots of prepared txns.
+# TEST This test is to force the use of txn_recover to call with the
+# TEST DB_FIRST flag and then DB_NEXT.
proc recd015 { method args } {
source ./include.tcl
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Recd015: $method ($args) large number of prepared txns test"
+ puts "Recd015: $method ($args) prepared txns test"
# Create the database and environment.
- env_cleanup $testdir
+ set numtxns 1
+ set testfile NULL
+
+ set env_cmd "berkdb_env -create -txn -home $testdir"
+ set msg "\tRecd015.a"
+ puts "$msg Simple test to prepare $numtxns txn "
+ foreach op { abort commit discard } {
+ env_cleanup $testdir
+ recd015_body $env_cmd $testfile $numtxns $msg $op
+ }
+
+ #
+ # Now test large numbers of prepared txns to test DB_NEXT
+ # on txn_recover.
+ #
set numtxns 250
set testfile recd015.db
set txnmax [expr $numtxns + 5]
-
- puts "\tRecd015.a: Executing child proc to prepare $numtxns txns"
- set env_cmd "berkdb env -create -txn_max $txnmax -txn -home $testdir"
+ #
+ # For this test we create our database ahead of time so that we
+ # don't need to send methods and args to the script.
+ #
+ env_cleanup $testdir
+ set env_cmd "berkdb_env -create -txn_max $txnmax -txn -home $testdir"
set env [eval $env_cmd]
error_check_good dbenv [is_valid_env $env] TRUE
set db [eval {berkdb_open -create} $omethod -env $env $args $testfile]
@@ -33,33 +52,50 @@ proc recd015 { method args } {
error_check_good dbclose [$db close] 0
error_check_good envclose [$env close] 0
- set gidf $testdir/gidfile
+ set msg "\tRecd015.b"
+ puts "$msg Large test to prepare $numtxns txn "
+ foreach op { abort commit discard } {
+ recd015_body $env_cmd $testfile $numtxns $msg $op
+ }
+
+ set stat [catch {exec $util_path/db_printlog -h $testdir \
+ > $testdir/LOG } ret]
+ error_check_good db_printlog $stat 0
+ fileremove $testdir/LOG
+}
+
+proc recd015_body { env_cmd testfile numtxns msg op } {
+ source ./include.tcl
+ sentinel_init
+ set gidf $testdir/gidfile
fileremove -f $gidf
- set proclist {}
- set p [exec $tclsh_path $test_path/wrap.tcl recd15script.tcl \
+ set pidlist {}
+ puts "$msg.0: Executing child script to prepare txns"
+ berkdb debug_check
+ set p [exec $tclsh_path $test_path/wrap.tcl recd15scr.tcl \
$testdir/recdout $env_cmd $testfile $gidf $numtxns &]
- lappend proclist $p
- watch_procs 5
+ lappend pidlist $p
+ watch_procs $pidlist 5
set f1 [open $testdir/recdout r]
set r [read $f1]
puts $r
close $f1
fileremove -f $testdir/recdout
-
berkdb debug_check
- puts -nonewline "\tRecd15.d: Running recovery ... "
+ puts -nonewline "$msg.1: Running recovery ... "
flush stdout
berkdb debug_check
- set env_cmd \
- "berkdb env -recover -create -txn_max $txnmax -txn -home $testdir"
- set env [eval $env_cmd]
+ set env [eval $env_cmd -recover]
error_check_good dbenv-recover [is_valid_env $env] TRUE
puts "complete"
+ puts "$msg.2: getting txns from txn_recover"
set txnlist [$env txn_recover]
+ error_check_good txnlist_len [llength $txnlist] $numtxns
+
set gfd [open $gidf r]
set i 0
while { [gets $gfd gid] != -1 } {
@@ -71,23 +107,56 @@ proc recd015 { method args } {
# Make sure we have as many as we expect
error_check_good num_gids $i $numtxns
- #
- # Note that this assumes the txn_recover gives them back to
- # us in the order we prepared them. If that is an invalid
- # assumption we can spit out the GIDs below to a new file,
- # sort them both to temp files and compare that way.
set i 0
- puts "\tRecd15.e: Comparing GIDs "
+ puts "$msg.3: comparing GIDs and $op txns"
foreach tpair $txnlist {
set txn [lindex $tpair 0]
set gid [lindex $tpair 1]
error_check_good gidcompare $gid $gids($i)
- error_check_good txnabort [$txn abort] 0
+ error_check_good txn:$op [$txn $op] 0
incr i
}
- set stat [catch {exec $util_path/db_printlog -h $testdir \
- > $testdir/LOG } ret]
- error_check_good db_printlog $stat 0
- fileremove $testdir/LOG
-}
+ if { $op != "discard" } {
+ error_check_good envclose [$env close] 0
+ return
+ }
+ #
+ # If we discarded, now do it again and randomly resolve some
+ # until all txns are resolved.
+ #
+ puts "$msg.4: resolving/discarding txns"
+ set txnlist [$env txn_recover]
+ set len [llength $txnlist]
+ set opval(1) "abort"
+ set opcnt(1) 0
+ set opval(2) "commit"
+ set opcnt(2) 0
+ set opval(3) "discard"
+ set opcnt(3) 0
+ while { $len != 0 } {
+ set opicnt(1) 0
+ set opicnt(2) 0
+ set opicnt(3) 0
+ #
+ # Abort/commit or discard them randomly until
+ # all are resolved.
+ #
+ for { set i 0 } { $i < $len } { incr i } {
+ set t [lindex $txnlist $i]
+ set txn [lindex $t 0]
+ set newop [berkdb random_int 1 3]
+ set ret [$txn $opval($newop)]
+ error_check_good txn_$opval($newop):$i $ret 0
+ incr opcnt($newop)
+ incr opicnt($newop)
+ }
+# puts "$opval(1): $opicnt(1) Total: $opcnt(1)"
+# puts "$opval(2): $opicnt(2) Total: $opcnt(2)"
+# puts "$opval(3): $opicnt(3) Total: $opcnt(3)"
+ set txnlist [$env txn_recover]
+ set len [llength $txnlist]
+ }
+
+ error_check_good envclose [$env close] 0
+}
diff --git a/db/test/recd016.tcl b/db/test/recd016.tcl
index e76cba059..7357f86db 100644
--- a/db/test/recd016.tcl
+++ b/db/test/recd016.tcl
@@ -1,183 +1,177 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd016.tcl,v 11.8 2002/09/05 17:23:07 sandstro Exp
+# $Id: recd016.tcl,v 11.11 2003/01/08 05:52:06 bostic Exp $
#
# TEST recd016
-# TEST This is a recovery test for testing running recovery while
-# TEST recovery is already running. While bad things may or may not
-# TEST happen, if recovery is then run properly, things should be correct.
-proc recd016 { method args } {
+# TEST Test recovery after checksum error.
+proc recd016 { method args} {
+ global fixed_len
+ global log_log_record_types
+ global datastr
source ./include.tcl
- set args [convert_args $method $args]
- set omethod [convert_method $method]
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Recd016: skipping for specific pagesizes"
+ return
+ }
+ if { [is_queueext $method] == 1 } {
+ puts "Recd016: skipping for method $method"
+ return
+ }
- puts "Recd016: $method ($args) simultaneous recovery test"
- puts "Recd016: Skipping; waiting on SR #6277"
- return
+ puts "Recd016: $method recovery after checksum error"
# Create the database and environment.
+ env_cleanup $testdir
+
set testfile recd016.db
+ set flags "-create -txn -home $testdir"
+
+ puts "\tRecd016.a: creating environment"
+ set env_cmd "berkdb_env $flags"
+ set dbenv [eval $env_cmd]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+
+ set pgsize 512
+ set orig_fixed_len $fixed_len
+ set fixed_len [expr $pgsize / 4]
+ set opts [convert_args $method $args]
+ set omethod [convert_method $method]
+ set oflags "-create $omethod -mode 0644 \
+ -auto_commit -chksum -pagesize $pgsize $opts $testfile"
+ set db [eval {berkdb_open} -env $dbenv $oflags]
#
- # For this test we create our database ahead of time so that we
- # don't need to send methods and args to the script.
+ # Put some data.
#
- cleanup $testdir NULL
+ set nument 50
+ puts "\tRecd016.b: Put some data"
+ for { set i 1 } { $i <= $nument } { incr i } {
+ # Use 'i' as key so method doesn't matter
+ set key $i
+ set data $i$datastr
+
+ # Put, in a txn.
+ set txn [$dbenv txn]
+ error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
+ error_check_good db_put \
+ [$db put -txn $txn $key [chop_data $method $data]] 0
+ error_check_good txn_commit [$txn commit] 0
+ }
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$dbenv close] 0
+ #
+ # We need to remove the env so that we don't get cached
+ # pages.
+ #
+ error_check_good env_remove [berkdb envremove -home $testdir] 0
+ puts "\tRecd016.c: Overwrite part of database"
#
- # Use a smaller log to make more files and slow down recovery.
+ # First just touch some bits in the file. We want to go
+ # through the paging system, so touch some data pages,
+ # like the middle of page 2.
+ # We should get a checksum error for the checksummed file.
#
- set gflags ""
- set pflags ""
- set log_max [expr 256 * 1024]
- set nentries 10000
- set nrec 6
- set t1 $testdir/t1
- set t2 $testdir/t2
- set t3 $testdir/t3
- set t4 $testdir/t4
- set t5 $testdir/t5
- # Since we are using txns, we need at least 1 lock per
- # record (for queue). So set lock_max accordingly.
- set lkmax [expr $nentries * 2]
-
- puts "\tRecd016.a: Create environment and database"
- set env_cmd "berkdb_env -create -log_max $log_max \
- -lock_max $lkmax -txn -home $testdir"
- set env [eval $env_cmd]
- error_check_good dbenv [is_valid_env $env] TRUE
- set db [eval {berkdb_open -create} \
- $omethod -auto_commit -env $env $args $testfile]
- error_check_good dbopen [is_valid_db $db] TRUE
- set did [open $dict]
- set abid [open $t4 w]
-
- if { [is_record_based $method] == 1 } {
- set checkfunc recd016_recno.check
- append gflags " -recno"
- } else {
- set checkfunc recd016.check
- }
- puts "\tRecd016.b: put/get loop"
- # Here is the loop where we put and get each key/data pair
- set count 0
- while { [gets $did str] != -1 && $count < $nentries } {
- if { [is_record_based $method] == 1 } {
- global kvals
-
- set key [expr $count + 1]
- if { 0xffffffff > 0 && $key > 0xffffffff } {
- set key [expr $key - 0x100000000]
- }
- if { $key == 0 || $key - 0xffffffff == 1 } {
- incr key
- incr count
- }
- set kvals($key) [pad_data $method $str]
- } else {
- set key $str
- set str [reverse $str]
- }
- #
- # Start a transaction. Alternately abort and commit them.
- # This will create a bigger log for recovery to collide.
- #
- set txn [$env txn]
- set ret [eval \
- {$db put} -txn $txn $pflags {$key [chop_data $method $str]}]
- error_check_good put $ret 0
-
- if {[expr $count % 2] == 0} {
- set ret [$txn commit]
- error_check_good txn_commit $ret 0
- set ret [eval {$db get} $gflags {$key}]
- error_check_good commit_get \
- $ret [list [list $key [pad_data $method $str]]]
+ set pg 2
+ set fid [open $testdir/$testfile r+]
+ fconfigure $fid -translation binary
+ set seeklen [expr $pgsize * $pg + 200]
+ seek $fid $seeklen start
+ set byte [read $fid 1]
+ binary scan $byte c val
+ set newval [expr ~$val]
+ set newbyte [binary format c $newval]
+ seek $fid $seeklen start
+ puts -nonewline $fid $newbyte
+ close $fid
+
+ #
+ # Verify we get the checksum error. When we get it, it should
+ # log the error as well, so when we run recovery we'll need to
+ # do catastrophic recovery. We do this in a sub-process so that
+ # the files are closed after the panic.
+ #
+ set f1 [open |$tclsh_path r+]
+ puts $f1 "source $test_path/test.tcl"
+
+ set env_cmd "berkdb_env_noerr $flags"
+ set dbenv [send_cmd $f1 $env_cmd]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+
+ set db [send_cmd $f1 "{berkdb_open_noerr} -env $dbenv $oflags"]
+ error_check_good db [is_valid_db $db] TRUE
+
+ # We need to set non-blocking mode so that after each command
+ # we can read all the remaining output from that command and
+ # we can know what the output from one command is.
+ fconfigure $f1 -blocking 0
+ set ret [read $f1]
+ set got_err 0
+ for { set i 1 } { $i <= $nument } { incr i } {
+ set stat [send_cmd $f1 "catch {$db get $i} r"]
+ set getret [send_cmd $f1 "puts \$r"]
+ set ret [read $f1]
+ if { $stat == 1 } {
+ error_check_good dbget:fail [is_substr $getret \
+ "checksum error: page $pg"] 1
+ set got_err 1
+ break
} else {
- set ret [$txn abort]
- error_check_good txn_abort $ret 0
- set ret [eval {$db get} $gflags {$key}]
- error_check_good abort_get [llength $ret] 0
- puts $abid $key
+ set key [lindex [lindex $getret 0] 0]
+ set data [lindex [lindex $getret 0] 1]
+ error_check_good keychk $key $i
+ error_check_good datachk $data \
+ [pad_data $method $i$datastr]
}
- incr count
}
- close $did
- close $abid
- error_check_good dbclose [$db close] 0
- error_check_good envclose [$env close] 0
-
- set pidlist {}
- puts "\tRecd016.c: Start up $nrec recovery processes at once"
- for {set i 0} {$i < $nrec} {incr i} {
- set p [exec $util_path/db_recover -h $testdir -c &]
- lappend pidlist $p
- }
- watch_procs $pidlist 5
- #
- # Now that they are all done run recovery correctly
- puts "\tRecd016.d: Run recovery process"
- set stat [catch {exec $util_path/db_recover -h $testdir -c} result]
- if { $stat == 1 } {
- error "FAIL: Recovery error: $result."
+ error_check_good got_chksum $got_err 1
+ set ret [send_cmd $f1 "$db close"]
+ set extra [read $f1]
+ error_check_good db:fail [is_substr $ret "run recovery"] 1
+
+ set ret [send_cmd $f1 "$dbenv close"]
+ error_check_good env_close:fail [is_substr $ret "run recovery"] 1
+ close $f1
+
+ # Keep track of the log types we've seen
+ if { $log_log_record_types == 1} {
+ logtrack_read $testdir
}
- puts "\tRecd016.e: Open, dump and check database"
- # Now compare the keys to see if they match the dictionary (or ints)
- if { [is_record_based $method] == 1 } {
- set oid [open $t2 w]
- for {set i 1} {$i <= $nentries} {incr i} {
- set j $i
- if { 0xffffffff > 0 && $j > 0xffffffff } {
- set j [expr $j - 0x100000000]
- }
- if { $j == 0 } {
- incr i
- incr j
- }
- puts $oid $j
- }
- close $oid
- } else {
- set q q
- filehead $nentries $dict $t2
- }
- filesort $t2 $t3
- file rename -force $t3 $t2
- filesort $t4 $t3
- file rename -force $t3 $t4
- fileextract $t2 $t4 $t3
- file rename -force $t3 $t5
-
- set env [eval $env_cmd]
- error_check_good dbenv [is_valid_env $env] TRUE
-
- open_and_dump_file $testfile $env $t1 $checkfunc \
- dump_file_direction "-first" "-next"
- filesort $t1 $t3
- error_check_good envclose [$env close] 0
-
- error_check_good Recd016:diff($t5,$t3) \
- [filecmp $t5 $t3] 0
-
- set stat [catch {exec $util_path/db_printlog -h $testdir \
- > $testdir/LOG } ret]
- error_check_good db_printlog $stat 0
- fileremove $testdir/LOG
-}
-
-# Check function for recd016; keys and data are identical
-proc recd016.check { key data } {
- error_check_good "key/data mismatch" $data [reverse $key]
-}
+ puts "\tRecd016.d: Run normal recovery"
+ set ret [catch {exec $util_path/db_recover -h $testdir} r]
+ error_check_good db_recover $ret 1
+ error_check_good dbrec:fail \
+ [is_substr $r "checksum error"] 1
-proc recd016_recno.check { key data } {
- global kvals
+ catch {fileremove $testdir/$testfile} ret
+ puts "\tRecd016.e: Run catastrophic recovery"
+ set ret [catch {exec $util_path/db_recover -c -h $testdir} r]
+ error_check_good db_recover $ret 0
- error_check_good key"$key"_exists [info exists kvals($key)] 1
- error_check_good "key/data mismatch, key $key" $data $kvals($key)
+ #
+ # Now verify the data was reconstructed correctly.
+ #
+ set env_cmd "berkdb_env_noerr $flags"
+ set dbenv [eval $env_cmd]
+ error_check_good dbenv [is_valid_env $dbenv] TRUE
+
+ set db [eval {berkdb_open} -env $dbenv $oflags]
+ error_check_good db [is_valid_db $db] TRUE
+
+ for { set i 1 } { $i <= $nument } { incr i } {
+ set stat [catch {$db get $i} ret]
+ error_check_good stat $stat 0
+ set key [lindex [lindex $ret 0] 0]
+ set data [lindex [lindex $ret 0] 1]
+ error_check_good keychk $key $i
+ error_check_good datachk $data [pad_data $method $i$datastr]
+ }
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$dbenv close] 0
}
diff --git a/db/test/recd017.tcl b/db/test/recd017.tcl
index ac0b5b4f0..4935f4adf 100644
--- a/db/test/recd017.tcl
+++ b/db/test/recd017.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd017.tcl,v 11.3 2002/04/29 15:15:30 sandstro Exp
+# $Id: recd017.tcl,v 11.6 2003/01/08 05:52:09 bostic Exp $
#
# TEST recd017
# TEST Test recovery and security. This is basically a watered
@@ -13,8 +13,15 @@ proc recd017 { method {select 0} args} {
global fixed_len
global encrypt
global passwd
+ global has_crypto
source ./include.tcl
+ # Skip test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ puts "Skipping recd017 for non-crypto release."
+ return
+ }
+
set orig_fixed_len $fixed_len
set opts [convert_args $method $args]
set omethod [convert_method $method]
@@ -69,6 +76,7 @@ proc recd017 { method {select 0} args} {
# Create the databases and close the environment.
# cannot specify db truncate in txn protected env!!!
set opts [convert_args $method ""]
+ convert_encrypt $env_cmd
set omethod [convert_method $method]
set oflags "-create $omethod -mode 0644 \
-env $dbenv -encrypt $opts $testfile"
diff --git a/db/test/recd018.tcl b/db/test/recd018.tcl
index b36781ca2..fa2f28e1a 100644
--- a/db/test/recd018.tcl
+++ b/db/test/recd018.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2002
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd018.tcl,v 11.2 2002/03/13 21:04:20 sue Exp
+# $Id: recd018.tcl,v 11.4 2003/01/08 05:52:11 bostic Exp $
#
# TEST recd018
# TEST Test recover of closely interspersed checkpoints and commits.
@@ -15,11 +15,11 @@ proc recd018 { method {ndbs 10} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 18
+ set tnum "018"
- puts "Recd0$tnum ($args): $method recovery of checkpoints and commits."
+ puts "Recd$tnum ($args): $method recovery of checkpoints and commits."
- set tname recd0$tnum.db
+ set tname recd$tnum.db
env_cleanup $testdir
set i 0
@@ -31,7 +31,7 @@ proc recd018 { method {ndbs 10} args } {
set key2 KEY2
}
- puts "\tRecd0$tnum.a: Create environment and database."
+ puts "\tRecd$tnum.a: Create environment and database."
set flags "-create -txn -home $testdir"
set env_cmd "berkdb_env $flags"
@@ -52,7 +52,7 @@ proc recd018 { method {ndbs 10} args } {
# Do a commit immediately followed by a checkpoint after each one.
error_check_good "Initial Checkpoint" [$dbenv txn_checkpoint] 0
- puts "\tRecd0$tnum.b Put/Commit/Checkpoint to $ndbs databases"
+ puts "\tRecd$tnum.b Put/Commit/Checkpoint to $ndbs databases"
for { set i 0 } { $i < $ndbs } { incr i } {
set testfile $tname.$i
set data $i
@@ -81,11 +81,11 @@ proc recd018 { method {ndbs 10} args } {
# Now, loop through and recover to each timestamp, verifying the
# expected increment.
- puts "\tRecd0$tnum.c: Run recovery (no-op)"
+ puts "\tRecd$tnum.c: Run recovery (no-op)"
set ret [catch {exec $util_path/db_recover -h $testdir} r]
error_check_good db_recover $ret 0
- puts "\tRecd0$tnum.d: Run recovery (initial file)"
+ puts "\tRecd$tnum.d: Run recovery (initial file)"
for { set i 0 } {$i < $ndbs } { incr i } {
set testfile $tname.$i
set file $testdir/$testfile.init
@@ -96,7 +96,7 @@ proc recd018 { method {ndbs 10} args } {
set ret [catch {exec $util_path/db_recover -h $testdir} r]
error_check_good db_recover $ret 0
- puts "\tRecd0$tnum.e: Run recovery (after file)"
+ puts "\tRecd$tnum.e: Run recovery (after file)"
for { set i 0 } {$i < $ndbs } { incr i } {
set testfile $tname.$i
set file $testdir/$testfile.afterop
diff --git a/db/test/recd019.tcl b/db/test/recd019.tcl
index faff985d4..280be1eac 100644
--- a/db/test/recd019.tcl
+++ b/db/test/recd019.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd019.tcl,v 11.3 2002/08/08 15:38:07 bostic Exp
+# $Id: recd019.tcl,v 11.4 2003/01/08 05:52:14 bostic Exp $
#
# TEST recd019
# TEST Test txn id wrap-around and recovery.
diff --git a/db/test/recd020.tcl b/db/test/recd020.tcl
deleted file mode 100644
index 5fd0e1e55..000000000
--- a/db/test/recd020.tcl
+++ /dev/null
@@ -1,180 +0,0 @@
-# See the file LICENSE for redistribution information.
-#
-# Copyright (c) 1996-2002
-# Sleepycat Software. All rights reserved.
-#
-# Id: recd020.tcl,v 11.8 2002/08/08 15:38:08 bostic Exp
-#
-# TEST recd020
-# TEST Test recovery after checksum error.
-proc recd020 { method args} {
- global fixed_len
- global log_log_record_types
- global datastr
- source ./include.tcl
-
- set pgindex [lsearch -exact $args "-pagesize"]
- if { $pgindex != -1 } {
- puts "Recd020: skipping for specific pagesizes"
- return
- }
- if { [is_queueext $method] == 1 } {
- puts "Recd020: skipping for method $method"
- return
- }
-
- puts "Recd020: $method recovery after checksum error"
-
- # Create the database and environment.
- env_cleanup $testdir
-
- set testfile recd020.db
- set flags "-create -txn -home $testdir"
-
- puts "\tRecd020.a: creating environment"
- set env_cmd "berkdb_env $flags"
- set dbenv [eval $env_cmd]
- error_check_good dbenv [is_valid_env $dbenv] TRUE
-
- set pgsize 512
- set orig_fixed_len $fixed_len
- set fixed_len [expr $pgsize / 4]
- set opts [convert_args $method $args]
- set omethod [convert_method $method]
- set oflags "-create $omethod -mode 0644 \
- -auto_commit -chksum -pagesize $pgsize $opts $testfile"
- set db [eval {berkdb_open} -env $dbenv $oflags]
-
- #
- # Put some data.
- #
- set nument 50
- puts "\tRecd020.b: Put some data"
- for { set i 1 } { $i <= $nument } { incr i } {
- # Use 'i' as key so method doesn't matter
- set key $i
- set data $i$datastr
-
- # Put, in a txn.
- set txn [$dbenv txn]
- error_check_good txn_begin [is_valid_txn $txn $dbenv] TRUE
- error_check_good db_put \
- [$db put -txn $txn $key [chop_data $method $data]] 0
- error_check_good txn_commit [$txn commit] 0
- }
- error_check_good db_close [$db close] 0
- error_check_good env_close [$dbenv close] 0
- #
- # We need to remove the env so that we don't get cached
- # pages.
- #
- error_check_good env_remove [berkdb envremove -home $testdir] 0
-
- puts "\tRecd020.c: Overwrite part of database"
- #
- # First just touch some bits in the file. We want to go
- # through the paging system, so touch some data pages,
- # like the middle of page 2.
- # We should get a checksum error for the checksummed file.
- #
- set pg 2
- set fid [open $testdir/$testfile r+]
- fconfigure $fid -translation binary
- set seeklen [expr $pgsize * $pg + 200]
- seek $fid $seeklen start
- set byte [read $fid 1]
- binary scan $byte c val
- set newval [expr ~$val]
- set newbyte [binary format c $newval]
- seek $fid $seeklen start
- puts -nonewline $fid $newbyte
- close $fid
-
- #
- # Verify we get the checksum error. When we get it, it should
- # log the error as well, so when we run recovery we'll need to
- # do catastrophic recovery. We do this in a sub-process so that
- # the files are closed after the panic.
- #
- set f1 [open |$tclsh_path r+]
- puts $f1 "source $test_path/test.tcl"
-
- set env_cmd "berkdb_env_noerr $flags"
- set dbenv [send_cmd $f1 $env_cmd]
- error_check_good dbenv [is_valid_env $dbenv] TRUE
-
- set db [send_cmd $f1 "{berkdb_open_noerr} -env $dbenv $oflags"]
- error_check_good db [is_valid_db $db] TRUE
-
- # We need to set non-blocking mode so that after each command
- # we can read all the remaining output from that command and
- # we can know what the output from one command is.
- fconfigure $f1 -blocking 0
- set ret [read $f1]
- set got_err 0
- for { set i 1 } { $i <= $nument } { incr i } {
- set stat [send_cmd $f1 "catch {$db get $i} r"]
- set getret [send_cmd $f1 "puts \$r"]
- set ret [read $f1]
- if { $stat == 1 } {
- error_check_good dbget:fail [is_substr $getret \
- "checksum error: catastrophic recovery required"] 1
- set got_err 1
- # Now verify that it was an error on the page we set.
- error_check_good dbget:pg$pg [is_substr $ret \
- "failed for page $pg"] 1
- break
- } else {
- set key [lindex [lindex $getret 0] 0]
- set data [lindex [lindex $getret 0] 1]
- error_check_good keychk $key $i
- error_check_good datachk $data \
- [pad_data $method $i$datastr]
- }
- }
- error_check_good got_chksum $got_err 1
- set ret [send_cmd $f1 "$db close"]
- set extra [read $f1]
- error_check_good db:fail [is_substr $ret "run recovery"] 1
-
- set ret [send_cmd $f1 "$dbenv close"]
- error_check_good env_close:fail [is_substr $ret "run recovery"] 1
- close $f1
-
- # Keep track of the log types we've seen
- if { $log_log_record_types == 1} {
- logtrack_read $testdir
- }
-
- puts "\tRecd020.d: Run normal recovery"
- set ret [catch {exec $util_path/db_recover -h $testdir} r]
- error_check_good db_recover $ret 1
- error_check_good dbrec:fail \
- [is_substr $r "checksum error: catastrophic recovery required"] 1
-
- catch {fileremove $testdir/$testfile} ret
- puts "\tRecd020.e: Run catastrophic recovery"
- set ret [catch {exec $util_path/db_recover -c -h $testdir} r]
- error_check_good db_recover $ret 0
-
- #
- # Now verify the data was reconstructed correctly.
- #
- set env_cmd "berkdb_env_noerr $flags"
- set dbenv [eval $env_cmd]
- error_check_good dbenv [is_valid_env $dbenv] TRUE
-
- set db [eval {berkdb_open} -env $dbenv $oflags]
- error_check_good db [is_valid_db $db] TRUE
-
- for { set i 1 } { $i <= $nument } { incr i } {
- set stat [catch {$db get $i} ret]
- error_check_good stat $stat 0
- set key [lindex [lindex $ret 0] 0]
- set data [lindex [lindex $ret 0] 1]
- error_check_good keychk $key $i
- error_check_good datachk $data [pad_data $method $i$datastr]
- }
- error_check_good db_close [$db close] 0
- error_check_good env_close [$dbenv close] 0
-}
diff --git a/db/test/recd15scr.tcl b/db/test/recd15scr.tcl
index a4039d31b..df807a7fa 100644
--- a/db/test/recd15scr.tcl
+++ b/db/test/recd15scr.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recd15scr.tcl,v 1.5 2002/01/30 13:18:04 margo Exp
+# $Id: recd15scr.tcl,v 1.6 2003/01/08 05:52:16 bostic Exp $
#
# Recd15 - lots of txns - txn prepare script
# Usage: recd15script envcmd dbcmd gidf numtxns
diff --git a/db/test/recdscript.tcl b/db/test/recdscript.tcl
index 8747ce003..7a47387be 100644
--- a/db/test/recdscript.tcl
+++ b/db/test/recdscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: recdscript.tcl,v 11.3 2001/05/02 20:28:55 krinsky Exp
+# $Id: recdscript.tcl,v 11.5 2003/01/08 05:52:18 bostic Exp $
#
# Recovery txn prepare script
# Usage: recdscript op dir envcmd dbfile cmd
diff --git a/db/test/rep001.tcl b/db/test/rep001.tcl
index ea552d118..844a42f8e 100644
--- a/db/test/rep001.tcl
+++ b/db/test/rep001.tcl
@@ -1,28 +1,34 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rep001.tcl,v 1.16 2002/08/26 17:52:19 margo Exp
+# $Id: rep001.tcl,v 1.23 2003/09/04 23:41:12 bostic Exp $
#
# TEST rep001
# TEST Replication rename and forced-upgrade test.
# TEST
-# TEST Run a modified version of test001 in a replicated master environment;
-# TEST verify that the database on the client is correct.
-# TEST Next, remove the database, close the master, upgrade the
-# TEST client, reopen the master, and make sure the new master can correctly
-# TEST run test001 and propagate it in the other direction.
+# TEST Run a modified version of test001 in a replicated master
+# TEST environment; verify that the database on the client is correct.
+# TEST Next, remove the database, close the master, upgrade the
+# TEST client, reopen the master, and make sure the new master can
+# TEST correctly run test001 and propagate it in the other direction.
-proc rep001 { method { niter 1000 } { tnum "01" } args } {
+proc rep001 { method { niter 1000 } { tnum "001" } args } {
global passwd
+ global has_crypto
- puts "Rep0$tnum: Replication sanity test."
+ puts "Rep$tnum: Replication sanity test."
set envargs ""
rep001_sub $method $niter $tnum $envargs $args
- puts "Rep0$tnum: Replication and security sanity test."
+ # Skip remainder of test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+
+ puts "Rep$tnum: Replication and security sanity test."
append envargs " -encryptaes $passwd "
append args " -encrypt "
rep001_sub $method $niter $tnum $envargs $args
@@ -53,18 +59,18 @@ proc rep001_sub { method niter tnum envargs largs } {
repladd 1
set masterenv \
[eval {berkdb_env -create -lock_max 2500 -log_max 1000000} \
- $envargs {-home $masterdir -txn -rep_master -rep_transport \
+ $envargs {-home $masterdir -txn nosync -rep_master -rep_transport \
[list 1 replsend]}]
error_check_good master_env [is_valid_env $masterenv] TRUE
# Open a client
repladd 2
- set clientenv [eval {berkdb_env -create} $envargs -txn -lock_max 2500 \
- {-home $clientdir -rep_client -rep_transport [list 2 replsend]}]
+ set clientenv [eval {berkdb_env -create} $envargs -txn nosync \
+ -lock_max 2500 {-home $clientdir -rep_client -rep_transport \
+ [list 2 replsend]}]
error_check_good client_env [is_valid_env $clientenv] TRUE
# Bring the client online by processing the startup messages.
- set donenow 0
while { 1 } {
set nproced 0
@@ -76,22 +82,9 @@ proc rep001_sub { method niter tnum envargs largs } {
}
}
- # Open a test database on the master (so we can test having handles
- # open across an upgrade).
- puts "\tRep0$tnum.a:\
- Opening test database for post-upgrade client logging test."
- set master_upg_db [berkdb_open \
- -create -auto_commit -btree -env $masterenv rep0$tnum-upg.db]
- set puttxn [$masterenv txn]
- error_check_good master_upg_db_put \
- [$master_upg_db put -txn $puttxn hello world] 0
- error_check_good puttxn_commit [$puttxn commit] 0
- error_check_good master_upg_db_close [$master_upg_db close] 0
-
# Run a modified test001 in the master (and update client).
- puts "\tRep0$tnum.b: Running test001 in replicated env."
- eval test001 $method $niter 0 $tnum 1 -env $masterenv $largs
- set donenow 0
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $largs
while { 1 } {
set nproced 0
@@ -103,28 +96,22 @@ proc rep001_sub { method niter tnum envargs largs } {
}
}
- # Open the cross-upgrade database on the client and check its contents.
- set client_upg_db [berkdb_open \
- -create -auto_commit -btree -env $clientenv rep0$tnum-upg.db]
- error_check_good client_upg_db_get [$client_upg_db get hello] \
- [list [list hello world]]
- # !!! We use this handle later. Don't close it here.
-
- # Verify the database in the client dir.
- puts "\tRep0$tnum.c: Verifying client database contents."
+ # Verify the database in the client dir. We assume we know
+ # the name of the database created by test001 -- it is
+ # test$tnum.db.
+ puts "\tRep$tnum.b: Verifying client database contents."
set testdir [get_home $masterenv]
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
- open_and_dump_file test0$tnum.db $clientenv $t1 \
+ open_and_dump_file test$tnum.db $clientenv $t1 \
$checkfunc dump_file_direction "-first" "-next"
# Remove the file (and update client).
- puts "\tRep0$tnum.d: Remove the file on the master and close master."
+ puts "\tRep$tnum.c: Remove the file on the master and close master."
error_check_good remove \
- [$masterenv dbremove -auto_commit test0$tnum.db] 0
+ [$masterenv dbremove -auto_commit test$tnum.db] 0
error_check_good masterenv_close [$masterenv close] 0
- set donenow 0
while { 1 } {
set nproced 0
@@ -136,15 +123,13 @@ proc rep001_sub { method niter tnum envargs largs } {
}
}
- # Don't get confused in Tcl.
- puts "\tRep0$tnum.e: Upgrade client."
+ puts "\tRep$tnum.d: Upgrade client."
set newmasterenv $clientenv
error_check_good upgrade_client [$newmasterenv rep_start -master] 0
# Run test001 in the new master
- puts "\tRep0$tnum.f: Running test001 in new master."
- eval test001 $method $niter 0 $tnum 1 -env $newmasterenv $largs
- set donenow 0
+ puts "\tRep$tnum.e: Running test001 in new master."
+ eval test001 $method $niter 0 0 $tnum -env $newmasterenv $largs
while { 1 } {
set nproced 0
@@ -155,14 +140,13 @@ proc rep001_sub { method niter tnum envargs largs } {
}
}
- puts "\tRep0$tnum.g: Reopen old master as client and catch up."
+ puts "\tRep$tnum.f: Reopen old master as client and catch up."
# Throttle master so it can't send everything at once
$newmasterenv rep_limit 0 [expr 64 * 1024]
set newclientenv [eval {berkdb_env -create -recover} $envargs \
- -txn -lock_max 2500 \
+ -txn nosync -lock_max 2500 \
{-home $masterdir -rep_client -rep_transport [list 1 replsend]}]
error_check_good newclient_env [is_valid_env $newclientenv] TRUE
- set donenow 0
while { 1 } {
set nproced 0
@@ -179,10 +163,9 @@ proc rep001_sub { method niter tnum envargs largs } {
error_check_bad nthrottles $nthrottles 0
# Run a modified test001 in the new master (and update client).
- puts "\tRep0$tnum.h: Running test001 in new master."
+ puts "\tRep$tnum.g: Running test001 in new master."
eval test001 $method \
- $niter $niter $tnum 1 -env $newmasterenv $largs
- set donenow 0
+ $niter $niter 1 $tnum -env $newmasterenv $largs
while { 1 } {
set nproced 0
@@ -194,41 +177,13 @@ proc rep001_sub { method niter tnum envargs largs } {
}
}
- # Test put to the database handle we opened back when the new master
- # was a client.
- puts "\tRep0$tnum.i: Test put to handle opened before upgrade."
- set puttxn [$newmasterenv txn]
- error_check_good client_upg_db_put \
- [$client_upg_db put -txn $puttxn hello there] 0
- error_check_good puttxn_commit [$puttxn commit] 0
- set donenow 0
- while { 1 } {
- set nproced 0
-
- incr nproced [replprocessqueue $newclientenv 1]
- incr nproced [replprocessqueue $newmasterenv 2]
-
- if { $nproced == 0 } {
- break
- }
- }
-
- # Close the new master's handle for the upgrade-test database; we
- # don't need it. Then check to make sure the client did in fact
- # update the database.
- error_check_good client_upg_db_close [$client_upg_db close] 0
- set newclient_upg_db [berkdb_open -env $newclientenv rep0$tnum-upg.db]
- error_check_good newclient_upg_db_get [$newclient_upg_db get hello] \
- [list [list hello there]]
- error_check_good newclient_upg_db_close [$newclient_upg_db close] 0
-
# Verify the database in the client dir.
- puts "\tRep0$tnum.j: Verifying new client database contents."
+ puts "\tRep$tnum.h: Verifying new client database contents."
set testdir [get_home $newmasterenv]
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
- open_and_dump_file test0$tnum.db $newclientenv $t1 \
+ open_and_dump_file test$tnum.db $newclientenv $t1 \
$checkfunc dump_file_direction "-first" "-next"
if { [string compare [convert_method $method] -recno] != 0 } {
@@ -244,6 +199,6 @@ proc rep001_sub { method niter tnum envargs largs } {
set encrypt 1
}
error_check_good verify \
- [verify_dir $clientdir "\tRep0$tnum.k: " 0 0 1] 0
+ [verify_dir $clientdir "\tRep$tnum.k: " 0 0 1] 0
replclose $testdir/MSGQUEUEDIR
}
diff --git a/db/test/rep002.tcl b/db/test/rep002.tcl
index a10862073..34a7eebc6 100644
--- a/db/test/rep002.tcl
+++ b/db/test/rep002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002
+# Copyright (c) 2002-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rep002.tcl,v 11.11 2002/08/08 18:13:12 sue Exp
+# $Id: rep002.tcl,v 11.25 2003/10/14 14:38:34 sandstro Exp $
#
# TEST rep002
# TEST Basic replication election test.
@@ -12,11 +12,11 @@
# TEST hold an election among a group of clients to make sure they select
# TEST a proper master from amongst themselves, in various scenarios.
-proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
+proc rep002 { method { niter 10 } { nclients 3 } { tnum "002" } args } {
source ./include.tcl
- global elect_timeout
+ global elect_timeout elect_serial
- set elect_timeout 1000000
+ set elect_timeout 5000000
if { [is_record_based $method] == 1 } {
puts "Rep002: Skipping for method $method."
@@ -36,12 +36,17 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
file mkdir $clientdir($i)
}
- puts "Rep0$tnum: Replication election test with $nclients clients."
+ puts "Rep$tnum: Replication election test with $nclients clients."
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env -create -log_max 1000000 -home \
- $masterdir -txn -rep_master -rep_transport \[list 1 replsend\]"
+ set env_cmd(M) "berkdb_env_noerr -create -log_max 1000000 \
+ -home $masterdir -errpfx MASTER \
+ -txn nosync -rep_master -rep_transport \[list 1 replsend\]"
+# set env_cmd(M) "berkdb_env_noerr -create -log_max 1000000 \
+# -home $masterdir -errpfx MASTER -errfile /dev/stderr \
+# -verbose {rep on} -txn nosync -rep_master \
+# -rep_transport \[list 1 replsend\]"
set masterenv [eval $env_cmd(M)]
error_check_good master_env [is_valid_env $masterenv] TRUE
@@ -49,16 +54,21 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
for { set i 0 } { $i < $nclients } { incr i } {
set envid [expr $i + 2]
repladd $envid
- set env_cmd($i) "berkdb_env -create -home $clientdir($i) \
- -txn -rep_client -rep_transport \[list $envid replsend\]"
+ set env_cmd($i) "berkdb_env_noerr -create -home $clientdir($i) \
+ -txn nosync -rep_client -errpfx CLIENT$i \
+ -rep_transport \[list $envid replsend\]"
+# set env_cmd($i) "berkdb_env_noerr -create -home $clientdir($i) \
+# -verbose {rep on} -errfile /dev/stderr \
+# -txn nosync -rep_client -errpfx CLIENT$i \
+# -rep_transport \[list $envid replsend\]"
set clientenv($i) [eval $env_cmd($i)]
error_check_good \
client_env($i) [is_valid_env $clientenv($i)] TRUE
}
# Run a modified test001 in the master.
- puts "\tRep0$tnum.a: Running test001 in replicated env."
- eval test001 $method $niter 0 $tnum 0 -env $masterenv $args
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $args
# Loop, processing first the master's messages, then the client's,
# until both queues are empty.
@@ -67,7 +77,7 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
incr nproced [replprocessqueue $masterenv 1]
- for { set i 0 } { $i < $nclients } { incr i } {
+ for { set i 0 } { $i < $nclients } { incr i } {
set envid [expr $i + 2]
incr nproced [replprocessqueue $clientenv($i) $envid]
}
@@ -79,12 +89,12 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
# Verify the database in the client dir.
for { set i 0 } { $i < $nclients } { incr i } {
- puts "\tRep0$tnum.b: Verifying contents of client database $i."
+ puts "\tRep$tnum.b: Verifying contents of client database $i."
set testdir [get_home $masterenv]
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
- open_and_dump_file test0$tnum.db $clientenv($i) $testdir/t1 \
+ open_and_dump_file test$tnum.db $clientenv($i) $testdir/t1 \
test001.check dump_file_direction "-first" "-next"
if { [string compare [convert_method $method] -recno] != 0 } {
@@ -92,59 +102,76 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
}
error_check_good diff_files($t2,$t3) [filecmp $t2 $t3] 0
- verify_dir $clientdir($i) "\tRep0$tnum.c: " 0 0 1
+ verify_dir $clientdir($i) "\tRep$tnum.c: " 0 0 1
}
# Start an election in the first client.
- puts "\tRep0$tnum.d: Starting election without dead master."
-
- set elect_pipe(0) [start_election \
- $qdir $env_cmd(0) [expr $nclients + 1] 20 $elect_timeout]
-
- tclsleep 1
-
- # We want to verify all the clients but the one that declared an
- # election get the election message.
- # We also want to verify that the master declares the election
+ puts "\tRep$tnum.d: Starting election with existing master."
+ # We want to verify that the master declares the election
# over by fiat, even if everyone uses a lower priority than 20.
- # Loop and process all messages, keeping track of which
- # sites got a HOLDELECTION and checking that the returned newmaster,
+ # Loop and process all messages, keeping track of which
+ # sites got a HOLDELECTION and checking that the returned newmaster,
# if any, is 1 (the master's replication ID).
set got_hold_elect(M) 0
- for { set i 0 } { $i < $nclients } { incr i } {
- set got_hold_elect($i) 0
+ for { set i 0 } { $i < $nclients } { incr i } {
+ set got_hold_elect($i) 0
+ set elect_pipe($i) INVALID
}
+ set elect_pipe(0) [start_election C0 \
+ $qdir $env_cmd(0) [expr $nclients + 1] 20 $elect_timeout]
+
+ tclsleep 2
+
+ set got_master 0
while { 1 } {
set nproced 0
set he 0
set nm 0
-
+ set nm2 0
+
incr nproced [replprocessqueue $masterenv 1 0 he nm]
if { $he == 1 } {
- set elect_pipe(M) [start_election $qdir \
+ incr elect_serial
+ set elect_pipe(M) [start_election CM $qdir \
$env_cmd(M) [expr $nclients + 1] 0 $elect_timeout]
set got_hold_elect(M) 1
}
if { $nm != 0 } {
error_check_good newmaster_is_master $nm 1
+ set got_master $nm
+ }
+ if { $nm2 != 0 } {
+ error_check_good newmaster_is_master $nm2 1
+ set got_master $nm2
}
- for { set i 0 } { $i < $nclients } { incr i } {
+ for { set i 0 } { $i < $nclients } { incr i } {
set he 0
set envid [expr $i + 2]
incr nproced \
[replprocessqueue $clientenv($i) $envid 0 he nm]
+ set child_done [check_election $elect_pipe($i) nm2]
if { $he == 1 } {
# error_check_bad client(0)_in_elect $i 0
- set elect_pipe(M) [start_election $qdir \
+ if { $elect_pipe($i) != "INVALID" } {
+ close_election $elect_pipe($i)
+ }
+ incr elect_serial
+ set pfx CHILD$i.$elect_serial
+ set elect_pipe($i) [start_election $pfx $qdir \
$env_cmd($i) [expr $nclients + 1] 0 \
$elect_timeout]
set got_hold_elect($i) 1
}
if { $nm != 0 } {
error_check_good newmaster_is_master $nm 1
+ set got_master $nm
+ }
+ if { $nm2 != 0 } {
+ error_check_good newmaster_is_master $nm2 1
+ set got_master $nm2
}
}
@@ -152,21 +179,12 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
break
}
}
-
- error_check_good got_hold_elect(master) $got_hold_elect(M) 0
- unset got_hold_elect(M)
- # error_check_good got_hold_elect(0) $got_hold_elect(0) 0
- unset got_hold_elect(0)
- for { set i 1 } { $i < $nclients } { incr i } {
- error_check_good got_hold_elect($i) $got_hold_elect($i) 1
- unset got_hold_elect($i)
- }
-
+ error_check_good got_master $got_master 1
cleanup_elections
# We need multiple clients to proceed from here.
if { $nclients < 2 } {
- puts "\tRep0$tnum: Skipping for less than two clients."
+ puts "\tRep$tnum: Skipping for less than two clients."
error_check_good masterenv_close [$masterenv close] 0
for { set i 0 } { $i < $nclients } { incr i } {
error_check_good clientenv_close($i) \
@@ -193,17 +211,18 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
# Now hold another election in the first client, this time with
# a dead master.
- puts "\tRep0$tnum.e: Starting election with dead master."
+ puts "\tRep$tnum.e: Starting election with dead master."
error_check_good masterenv_close [$masterenv close] 0
for { set i 0 } { $i < $nclients } { incr i } {
replclear [expr $i + 2]
}
- set elect_pipe(0) [start_election \
- $qdir $env_cmd(0) [expr $nclients + 1] 20 $elect_timeout]
+ incr elect_serial
+ set elect_pipe(0) [start_election C0 \
+ $qdir $env_cmd(0) $nclients 20 $elect_timeout]
- tclsleep 1
+ tclsleep 2
# Process messages, and verify that the client with the highest
# priority--client #1--wins.
@@ -213,10 +232,21 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
set nproced 0
set he 0
set nm 0
-
- for { set i 0 } { $i < $nclients } { incr i } {
+
+ for { set i 0 } { $i < $nclients } { incr i } {
set he 0
set envid [expr $i + 2]
+ set child_done [check_election $elect_pipe($i) nm2]
+ if { $got_newmaster == 0 && $nm2 != 0} {
+ error_check_good newmaster_is_master $nm2 \
+ [expr 1 + 2]
+ set got_newmaster $nm2
+ if { $nm2 == $envid } {
+ error_check_good make_master($i) \
+ [$clientenv($i) rep_start -master] \
+ 0
+ }
+ }
incr nproced \
[replprocessqueue $clientenv($i) $envid 0 he nm]
if { $he == 1 } {
@@ -229,9 +259,11 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
set pri 10
}
# error_check_bad client(0)_in_elect $i 0
- set elect_pipe(M) [start_election $qdir \
- $env_cmd($i) [expr $nclients + 1] $pri \
- $elect_timeout]
+ incr elect_serial
+ set pfx CHILD$i.$elect_serial
+ set elect_pipe($i) [start_election $pfx \
+ $qdir $env_cmd($i) $nclients \
+ $pri $elect_timeout]
set got_hold_elect($i) 1
}
if { $nm != 0 } {
@@ -260,6 +292,8 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
} else {
tclsleep 1
}
+ } else {
+ set tries 10
}
}
@@ -274,5 +308,3 @@ proc rep002 { method { niter 10 } { nclients 3 } { tnum "02" } args } {
replclose $testdir/MSGQUEUEDIR
}
-
-proc reptwo { args } { eval rep002 $args }
diff --git a/db/test/rep003.tcl b/db/test/rep003.tcl
index 26d868b3e..8cee906f9 100644
--- a/db/test/rep003.tcl
+++ b/db/test/rep003.tcl
@@ -1,18 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002
+# Copyright (c) 2002-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rep003.tcl,v 11.9 2002/08/09 02:23:50 margo Exp
+# $Id: rep003.tcl,v 11.13 2003/09/04 23:41:12 bostic Exp $
#
# TEST rep003
# TEST Repeated shutdown/restart replication test
# TEST
-# TEST Run a quick put test in a replicated master environment; start up,
+# TEST Run a quick put test in a replicated master environment; start up,
# TEST shut down, and restart client processes, with and without recovery.
# TEST To ensure that environment state is transient, use DB_PRIVATE.
-proc rep003 { method { tnum "03" } args } {
+proc rep003 { method { tnum "003" } args } {
source ./include.tcl
global testdir rep003_dbname rep003_omethod rep003_oargs
@@ -21,7 +21,7 @@ proc rep003 { method { tnum "03" } args } {
set rep003_dbname rep003.db
if { [is_record_based $method] } {
- puts "Rep0$tnum: Skipping for method $method"
+ puts "Rep$tnum: Skipping for method $method"
return
}
@@ -32,11 +32,11 @@ proc rep003 { method { tnum "03" } args } {
set masterdir $testdir/MASTERDIR
file mkdir $masterdir
-
+
set clientdir $testdir/CLIENTDIR
file mkdir $clientdir
- puts "Rep0$tnum: Replication repeated-startup test"
+ puts "Rep$tnum: Replication repeated-startup test"
# Open a master.
repladd 1
@@ -44,7 +44,7 @@ proc rep003 { method { tnum "03" } args } {
-home $masterdir -txn -rep_master -rep_transport [list 1 replsend]]
error_check_good master_env [is_valid_env $masterenv] TRUE
- puts "\tRep0$tnum.a: Simple client startup test."
+ puts "\tRep$tnum.a: Simple client startup test."
# Put item one.
rep003_put $masterenv A1 a-one
@@ -78,7 +78,7 @@ proc rep003 { method { tnum "03" } args } {
replclear 2
# Now reopen the client after doing another put.
- puts "\tRep0$tnum.b: Client restart."
+ puts "\tRep$tnum.b: Client restart."
rep003_put $masterenv B1 b-one
unset clientenv
@@ -86,6 +86,25 @@ proc rep003 { method { tnum "03" } args } {
-rep_client -rep_transport [list 2 replsend]]
error_check_good client_env [is_valid_env $clientenv] TRUE
+ # Loop letting the client and master sync up and get the
+ # environment initialized
+
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # The items from part A should be present at all times--
+ # if we roll them back, we've screwed up. [#5709]
+ rep003_check $clientenv A1 a-one
+ rep003_check $clientenv A2 a-two
+
rep003_put $masterenv B2 b-two
# Loop, processing first the master's messages, then the client's,
@@ -93,14 +112,14 @@ proc rep003 { method { tnum "03" } args } {
while { 1 } {
set nproced 0
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
# The items from part A should be present at all times--
# if we roll them back, we've screwed up. [#5709]
rep003_check $clientenv A1 a-one
rep003_check $clientenv A2 a-two
- incr nproced [replprocessqueue $masterenv 1]
- incr nproced [replprocessqueue $clientenv 2]
-
if { $nproced == 0 } {
break
}
@@ -114,7 +133,7 @@ proc rep003 { method { tnum "03" } args } {
replclear 2
# Now reopen the client after a recovery.
- puts "\tRep0$tnum.c: Client restart after recovery."
+ puts "\tRep$tnum.c: Client restart after recovery."
rep003_put $masterenv C1 c-one
unset clientenv
@@ -122,6 +141,26 @@ proc rep003 { method { tnum "03" } args } {
-recover -rep_client -rep_transport [list 2 replsend]]
error_check_good client_env [is_valid_env $clientenv] TRUE
+ # Loop, processing first the master's messages, then the client's,
+ # until both queues are empty.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # The items from part A should be present at all times--
+ # if we roll them back, we've screwed up. [#5709]
+ rep003_check $clientenv A1 a-one
+ rep003_check $clientenv A2 a-two
+ rep003_check $clientenv B1 b-one
+ rep003_check $clientenv B2 b-two
+
rep003_put $masterenv C2 c-two
# Loop, processing first the master's messages, then the client's,
@@ -133,7 +172,7 @@ proc rep003 { method { tnum "03" } args } {
# if we roll them back, we've screwed up. [#5709]
rep003_check $clientenv A1 a-one
rep003_check $clientenv A2 a-two
- rep003_check $clientenv B1 b-one
+ rep003_check $clientenv B1 b-one
rep003_check $clientenv B2 b-two
incr nproced [replprocessqueue $masterenv 1]
@@ -152,7 +191,7 @@ proc rep003 { method { tnum "03" } args } {
replclear 2
# Now reopen the client after a catastrophic recovery.
- puts "\tRep0$tnum.d: Client restart after catastrophic recovery."
+ puts "\tRep$tnum.d: Client restart after catastrophic recovery."
rep003_put $masterenv D1 d-one
unset clientenv
@@ -160,6 +199,18 @@ proc rep003 { method { tnum "03" } args } {
-recover_fatal -rep_client -rep_transport [list 2 replsend]]
error_check_good client_env [is_valid_env $clientenv] TRUE
+ # Loop, processing first the master's messages, then the client's,
+ # until both queues are empty.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
rep003_put $masterenv D2 d-two
# Loop, processing first the master's messages, then the client's,
@@ -171,9 +222,9 @@ proc rep003 { method { tnum "03" } args } {
# if we roll them back, we've screwed up. [#5709]
rep003_check $clientenv A1 a-one
rep003_check $clientenv A2 a-two
- rep003_check $clientenv B1 b-one
+ rep003_check $clientenv B1 b-one
rep003_check $clientenv B2 b-two
- rep003_check $clientenv C1 c-one
+ rep003_check $clientenv C1 c-one
rep003_check $clientenv C2 c-two
incr nproced [replprocessqueue $masterenv 1]
diff --git a/db/test/rep004.tcl b/db/test/rep004.tcl
index a5433dd21..57f1e43e5 100644
--- a/db/test/rep004.tcl
+++ b/db/test/rep004.tcl
@@ -1,8 +1,9 @@
+# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002
+# Copyright (c) 2002-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rep004.tcl,v 1.5 2002/08/08 18:13:12 sue Exp
+# $Id: rep004.tcl,v 1.2 2003/12/15 21:44:40 jbj Exp $
#
# TEST rep004
# TEST Test of DB_REP_LOGSONLY.
@@ -11,17 +12,17 @@
# TEST client. Shut down, then run catastrophic recovery in the logs-only
# TEST client and check that the database is present and populated.
-proc rep004 { method { nitems 10 } { tnum "04" } args } {
+proc rep004 { method { nitems 10 } { tnum "004" } args } {
source ./include.tcl
global testdir
env_cleanup $testdir
- set dbname rep0$tnum.db
+ set dbname rep$tnum.db
set omethod [convert_method $method]
set oargs [convert_args $method $args]
- puts "Rep0$tnum: Test of logs-only replication clients"
+ puts "Rep$tnum: Test of logs-only replication clients"
replsetup $testdir/MSGQUEUEDIR
set masterdir $testdir/MASTERDIR
@@ -48,7 +49,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good client_env [is_valid_env $clientenv] TRUE
- puts "\tRep0$tnum.a: Populate database."
+ puts "\tRep$tnum.a: Populate database."
set db [eval {berkdb open -create -mode 0644 -auto_commit} \
-env $masterenv $oargs $omethod $dbname]
@@ -71,7 +72,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good txn($count) [is_valid_txn $txn $masterenv] TRUE
set ret [eval \
- {$db put} -txn $txn {$key [chop_data $method $data]}]
+ {$db put} -txn $txn {$key [chop_data $method $data]}]
error_check_good put($count) $ret 0
error_check_good commit($count) [$txn commit] 0
@@ -79,8 +80,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
incr count
}
- puts "\tRep0$tnum.b: Sync up clients."
- set donenow 0
+ puts "\tRep$tnum.b: Sync up clients."
while { 1 } {
set nproced 0
@@ -94,7 +94,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
}
- puts "\tRep0$tnum.c: Get master and logs-only client ahead."
+ puts "\tRep$tnum.c: Get master and logs-only client ahead."
set newcount 0
while { [gets $did str] != -1 && $newcount < $nitems } {
if { [is_record_based $method] == 1 } {
@@ -111,7 +111,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good txn($count) [is_valid_txn $txn $masterenv] TRUE
set ret [eval \
- {$db put} -txn $txn {$key [chop_data $method $data]}]
+ {$db put} -txn $txn {$key [chop_data $method $data]}]
error_check_good put($count) $ret 0
error_check_good commit($count) [$txn commit] 0
@@ -122,8 +122,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good db_close [$db close] 0
- puts "\tRep0$tnum.d: Sync up logs-only client only, then fail over."
- set donenow 0
+ puts "\tRep$tnum.d: Sync up logs-only client only, then fail over."
while { 1 } {
set nproced 0
@@ -138,10 +137,9 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
# "Crash" the master, and fail over to the upgradeable client.
error_check_good masterenv_close [$masterenv close] 0
- replclear 3
+ replclear 3
error_check_good upgrade_client [$clientenv rep_start -master] 0
- set donenow 0
while { 1 } {
set nproced 0
@@ -155,10 +153,10 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good loenv_close [$loenv close] 0
- puts "\tRep0$tnum.e: Run catastrophic recovery on logs-only client."
+ puts "\tRep$tnum.e: Run catastrophic recovery on logs-only client."
set loenv [berkdb_env -create -home $logsonlydir -txn -recover_fatal]
- puts "\tRep0$tnum.f: Verify logs-only client contents."
+ puts "\tRep$tnum.f: Verify logs-only client contents."
set lodb [eval {berkdb open} -env $loenv $oargs $omethod $dbname]
set loc [$lodb cursor]
@@ -176,7 +174,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
# Reset new master cursor.
error_check_good cc_close [$cc close] 0
set cc [$cdb cursor]
-
+
for { set lodbt [$loc get -first] } \
{ [llength $lodbt] > 0 } { set lodbt [$loc get -next] } {
set cdbt [$cc get -next]
@@ -191,7 +189,7 @@ proc rep004 { method { nitems 10 } { tnum "04" } args } {
error_check_good cc_close [$cc close] 0
error_check_good cdb_close [$cdb close] 0
error_check_good clientenv_close [$clientenv close] 0
-
+
close $did
replclose $testdir/MSGQUEUEDIR
diff --git a/db/test/rep005.tcl b/db/test/rep005.tcl
index 2c3911dab..a13b893c2 100644
--- a/db/test/rep005.tcl
+++ b/db/test/rep005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002
+# Copyright (c) 2002-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rep005.tcl,v 11.3 2002/08/08 18:13:13 sue Exp
+# $Id: rep005.tcl,v 11.29 2003/10/27 15:19:18 sandstro Exp $
#
# TEST rep005
# TEST Replication election test with error handling.
@@ -13,14 +13,18 @@
# TEST a proper master from amongst themselves, forcing errors at various
# TEST locations in the election path.
-proc rep005 { method { niter 10 } { tnum "05" } args } {
+proc rep005 { method args } {
source ./include.tcl
- if { [is_record_based $method] == 1 } {
+ if { [is_btree $method] == 0 } {
puts "Rep005: Skipping for method $method."
return
}
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
+ set tnum "005"
+ set niter 10
set nclients 3
env_cleanup $testdir
@@ -35,12 +39,24 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
file mkdir $clientdir($i)
}
- puts "Rep0$tnum: Replication election test with $nclients clients."
+ puts -nonewline \
+ "Rep$tnum: Replication election error test with $nclients clients."
+ puts -nonewline \
+ " Started at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
# Open a master.
repladd 1
- set env_cmd(M) "berkdb_env -create -log_max 1000000 -home \
- $masterdir -txn -rep_master -rep_transport \[list 1 replsend\]"
+ set env_cmd(M) "berkdb_env -create -log_max 1000000 -home $masterdir \
+ -txn nosync -rep_master -rep_transport \[list 1 replsend\]"
+# To debug elections, uncomment the line below and further below
+# for the clients to turn on verbose. Also edit reputils.tcl
+# in proc start_election and swap the 2 commented lines with
+# their counterpart.
+# set env_cmd(M) "berkdb_env_noerr -create -log_max 1000000 \
+# -home $masterdir -txn nosync -rep_master \
+# -verbose {rep on} -errpfx MASTER -errfile /dev/stderr \
+# -rep_transport \[list 1 replsend\]"
set masterenv [eval $env_cmd(M)]
error_check_good master_env [is_valid_env $masterenv] TRUE
@@ -49,15 +65,20 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
set envid [expr $i + 2]
repladd $envid
set env_cmd($i) "berkdb_env -create -home $clientdir($i) \
- -txn -rep_client -rep_transport \[list $envid replsend\]"
+ -txn nosync -rep_client \
+ -rep_transport \[list $envid replsend\]"
+# set env_cmd($i) "berkdb_env_noerr -create -home $clientdir($i) \
+# -verbose {rep on} -errpfx CLIENT$i -errfile /dev/stderr \
+# -txn nosync -rep_client \
+# -rep_transport \[list $envid replsend\]"
set clientenv($i) [eval $env_cmd($i)]
error_check_good \
client_env($i) [is_valid_env $clientenv($i)] TRUE
}
# Run a modified test001 in the master.
- puts "\tRep0$tnum.a: Running test001 in replicated env."
- eval test001 $method $niter 0 $tnum 0 -env $masterenv $args
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $args
# Loop, processing first the master's messages, then the client's,
# until both queues are empty.
@@ -66,7 +87,7 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
incr nproced [replprocessqueue $masterenv 1]
- for { set i 0 } { $i < $nclients } { incr i } {
+ for { set i 0 } { $i < $nclients } { incr i } {
set envid [expr $i + 2]
incr nproced [replprocessqueue $clientenv($i) $envid]
}
@@ -78,12 +99,12 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
# Verify the database in the client dir.
for { set i 0 } { $i < $nclients } { incr i } {
- puts "\tRep0$tnum.b: Verifying contents of client database $i."
+ puts "\tRep$tnum.b: Verifying contents of client database $i."
set testdir [get_home $masterenv]
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
- open_and_dump_file test0$tnum.db $clientenv($i) $testdir/t1 \
+ open_and_dump_file test$tnum.db $clientenv($i) $testdir/t1 \
test001.check dump_file_direction "-first" "-next"
if { [string compare [convert_method $method] -recno] != 0 } {
@@ -91,7 +112,7 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
}
error_check_good diff_files($t2,$t3) [filecmp $t2 $t3] 0
- verify_dir $clientdir($i) "\tRep0$tnum.c: " 0 0 1
+ verify_dir $clientdir($i) "\tRep$tnum.c: " 0 0 1
}
# Make sure all the clients are synced up and ready to be good
@@ -119,17 +140,27 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
# We set up the error list for each client. We know that the
# first client is the one calling the election, therefore, add
# the error location on sending the message (electsend) for that one.
- set m "Rep0$tnum"
+ set m "Rep$tnum"
set count 0
- foreach c0 { electinit electsend electvote1 electwait1 electvote2 \
- electwait2 } {
- foreach c1 { electinit electvote1 electwait1 electvote2 \
- electwait2 } {
- foreach c2 { electinit electvote1 electwait1 \
- electvote2 electwait2 } {
+ set win -1
+ #
+ # A full test can take a long time to run. For normal testing
+ # pare it down a lot so that it runs in a shorter time.
+ #
+ set c0err { none electinit none none }
+ set c1err $c0err
+ set c2err $c0err
+ set numtests [expr [llength $c0err] * [llength $c1err] * \
+ [llength $c2err]]
+ puts "\t$m.d: Starting $numtests election with error tests"
+ set last_win -1
+ set win -1
+ foreach c0 $c0err {
+ foreach c1 $c1err {
+ foreach c2 $c2err {
set elist [list $c0 $c1 $c2]
rep005_elect env_cmd clientenv $qdir $m \
- $count $elist
+ $count win last_win $elist
incr count
}
}
@@ -140,57 +171,133 @@ proc rep005 { method { niter 10 } { tnum "05" } args } {
}
replclose $testdir/MSGQUEUEDIR
+ puts -nonewline \
+ "Rep$tnum: Completed at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
}
-proc rep005_elect { ecmd cenv qdir msg count elist } {
- global elect_timeout
+proc rep005_elect { ecmd cenv qdir msg count winner lsn_lose elist } {
+ global elect_timeout elect_serial
+ global is_windows_test
upvar $ecmd env_cmd
upvar $cenv clientenv
+ upvar $winner win
+ upvar $lsn_lose last_win
- set elect_timeout 1000000
+ set elect_timeout 5000000
set nclients [llength $elist]
+ set nsites [expr $nclients + 1]
- for { set i 0 } { $i < $nclients } { incr i } {
+ set cl_list {}
+ for { set i 0 } { $i < $nclients } { incr i } {
set err_cmd($i) [lindex $elist $i]
+ set elect_pipe($i) INVALID
+ replclear [expr $i + 2]
+ lappend cl_list $i
+ }
+
+ # Select winner. We want to test biggest LSN wins, and secondarily
+ # highest priority wins. If we already have a master, make sure
+ # we don't start a client in that master.
+ set el 0
+ if { $win == -1 } {
+ if { $last_win != -1 } {
+ set cl_list [lreplace $cl_list $last_win $last_win]
+ set el $last_win
+ }
+ set windex [berkdb random_int 1 [expr [llength $cl_list] - 1]]
+ set win [lindex $cl_list $windex]
+ } else {
+ # Easy case, if we have a master, the winner must be the
+ # same one as last time, just use $win.
+ # If client0 is the current existing master, start the
+ # election in client 1.
+ if {$win == 0} {
+ set el 1
+ }
+ }
+ # Winner has priority 100. If we are testing LSN winning, the
+ # make sure the lowest LSN client has the highest priority.
+ # Everyone else has priority 10.
+ for { set i 0 } { $i < $nclients } { incr i } {
+ if { $i == $win } {
+ set pri($i) 100
+ } elseif { $i == $last_win } {
+ set pri($i) 200
+ } else {
+ set pri($i) 10
+ }
}
- puts "\t$msg.d.$count: Starting election with errors $elist"
- set elect_pipe(0) [start_election $qdir $env_cmd(0) \
- [expr $nclients + 1] 20 $elect_timeout $err_cmd(0)]
- tclsleep 1
+ puts "\t$msg.d.$count: Start election (win=client$win) $elist"
+ incr elect_serial
+ set pfx "CHILD$el.$elect_serial"
+ # Windows requires a longer timeout.
+ if { $is_windows_test == 1 } {
+ set elect_timeout [expr $elect_timeout * 3]
+ }
+ set elect_pipe($el) [start_election $pfx $qdir $env_cmd($el) \
+ $nsites $pri($el) $elect_timeout $err_cmd($el)]
+
+ tclsleep 2
- # Process messages, and verify that the client with the highest
- # priority--client #1--wins.
set got_newmaster 0
set tries 10
while { 1 } {
set nproced 0
set he 0
set nm 0
-
- for { set i 0 } { $i < $nclients } { incr i } {
+ set nm2 0
+
+ for { set i 0 } { $i < $nclients } { incr i } {
set he 0
set envid [expr $i + 2]
-# puts "Processing queue for client $i"
+ set child_done [check_election $elect_pipe($i) nm2]
+ if { $got_newmaster == 0 && $nm2 != 0 } {
+ error_check_good newmaster_is_master $nm2 \
+ [expr $win + 2]
+ set got_newmaster $nm2
+
+ # If this env is the new master, it needs to
+ # configure itself as such--this is a different
+ # env handle from the one that performed the
+ # election.
+ if { $nm2 == $envid } {
+ error_check_good make_master($i) \
+ [$clientenv($i) rep_start -master] \
+ 0
+ }
+ }
incr nproced \
[replprocessqueue $clientenv($i) $envid 0 he nm]
+# puts "Tries $tries: Processed queue for client $i, $nproced msgs he $he nm $nm nm2 $nm2"
if { $he == 1 } {
- # Client #1 has priority 100; everyone else
- if { $i == 1 } {
- set pri 100
- } else {
- set pri 10
+ #
+ # Only close down the election pipe if the
+ # previously created one is done and
+ # waiting for new commands, otherwise
+ # if we try to close it while it's in
+ # progress we hang this main tclsh.
+ #
+ if { $elect_pipe($i) != "INVALID" && \
+ $child_done == 1 } {
+ close_election $elect_pipe($i)
+ set elect_pipe($i) "INVALID"
}
- # error_check_bad client(0)_in_elect $i 0
# puts "Starting election on client $i"
- set elect_pipe($i) [start_election $qdir \
- $env_cmd($i) [expr $nclients + 1] $pri \
- $elect_timeout $err_cmd($i)]
- set got_hold_elect($i) 1
+ if { $elect_pipe($i) == "INVALID" } {
+ incr elect_serial
+ set pfx "CHILD$i.$elect_serial"
+ set elect_pipe($i) [start_election \
+ $pfx $qdir \
+ $env_cmd($i) $nsites $pri($i) \
+ $elect_timeout $err_cmd($i)]
+ set got_hold_elect($i) 1
+ }
}
if { $nm != 0 } {
error_check_good newmaster_is_master $nm \
- [expr 1 + 2]
+ [expr $win + 2]
set got_newmaster $nm
# If this env is the new master, it needs to
@@ -201,6 +308,17 @@ proc rep005_elect { ecmd cenv qdir msg count elist } {
error_check_good make_master($i) \
[$clientenv($i) rep_start -master] \
0
+ if { [expr $count % 10] == 0 } {
+ set dbname rep005.$count.db
+ set db [berkdb_open -env \
+ $clientenv($i) \
+ -auto_commit \
+ -create -btree $dbname]
+ error_check_good dbopen \
+ [is_valid_db $db] TRUE
+ error_check_good dbclose \
+ [$db close] 0
+ }
}
}
}
@@ -214,12 +332,78 @@ proc rep005_elect { ecmd cenv qdir msg count elist } {
} else {
tclsleep 1
}
+ } else {
+ set tries 10
}
}
# Verify that client #1 is actually the winner.
- error_check_good "client 1 wins" $got_newmaster [expr 1 + 2]
+ error_check_good "client $win wins" $got_newmaster [expr $win + 2]
cleanup_elections
+ #
+ # Make sure that we've really processed all the post-election
+ # sync-up messages.
+ #
+ while { 1 } {
+ set nproced 0
+ for { set i 0 } { $i < $nclients } { incr i } {
+ incr nproced [replprocessqueue $clientenv($i) \
+ [expr $i + 2] 0]
+ }
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ #
+ # Sometimes test elections with an existing master.
+ # Other times test elections without master by closing the
+ # master we just elected and creating a new client.
+ # We want to weight it to close the new master. So, use
+ # a list to cause closing about 70% of the time.
+ #
+ set close_list { 0 0 0 1 1 1 1 1 1 1}
+ set close_len [expr [llength $close_list] - 1]
+ set close_index [berkdb random_int 0 $close_len]
+ if { [lindex $close_list $close_index] == 1 } {
+ puts -nonewline "\t$msg.e.$count: Closing "
+ error_check_good newmaster_close [$clientenv($win) close] 0
+ #
+ # If the next test should win via LSN then remove the
+ # env before starting the new client so that we
+ # can guarantee this client doesn't win the next one.
+ set lsn_win { 0 0 0 0 1 1 1 1 1 1 }
+ set lsn_len [expr [llength $lsn_win] - 1]
+ set lsn_index [berkdb random_int 0 $lsn_len]
+ if { [lindex $lsn_win $lsn_index] == 1 } {
+ set last_win $win
+ set dirindex [lsearch -exact $env_cmd($win) "-home"]
+ incr dirindex
+ set lsn_dir [lindex $env_cmd($win) $dirindex]
+ env_cleanup $lsn_dir
+ puts -nonewline "and cleaning "
+ } else {
+ set last_win -1
+ }
+ puts "new master, new client $win"
+ set clientenv($win) [eval $env_cmd($win)]
+ error_check_good cl($win) [is_valid_env $clientenv($win)] TRUE
+ set win -1
+ #
+ # Since we started a new client we want to give them
+ # all a chance to process everything outstanding before
+ # the election on the next iteration.
+ while { 1 } {
+ set nproced 0
+ for { set i 0 } { $i < $nclients } { incr i } {
+ incr nproced [replprocessqueue $clientenv($i) \
+ [expr $i + 2] 0]
+ }
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ }
}
diff --git a/db/test/rep006.tcl b/db/test/rep006.tcl
new file mode 100644
index 000000000..07233ef1f
--- /dev/null
+++ b/db/test/rep006.tcl
@@ -0,0 +1,132 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2006-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep006.tcl,v 11.7 2003/08/28 19:59:14 sandstro Exp $
+#
+# TEST rep006
+# TEST Replication and non-rep env handles.
+# TEST
+# TEST Run a modified version of test001 in a replicated master environment;
+# TEST verify that the database on the client is correct.
+# TEST Next, create a non-rep env handle to the master env.
+# TEST Attempt to open the database r/w to force error.
+
+proc rep006 { method { niter 1000 } { tnum "006" } args } {
+ global passwd
+ global has_crypto
+
+ puts "Rep$tnum: Replication and non-rep env handles"
+
+ set envargs ""
+ rep006_sub $method $niter $tnum $envargs $args
+}
+
+proc rep006_sub { method niter tnum envargs largs } {
+ source ./include.tcl
+ global testdir
+ global encrypt
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ if { [is_record_based $method] == 1 } {
+ set checkfunc test001_recno.check
+ } else {
+ set checkfunc test001.check
+ }
+
+ # Open a master.
+ repladd 1
+ set masterenv \
+ [eval {berkdb_env -create -lock_max 2500 -log_max 1000000} \
+ $envargs {-home $masterdir -txn nosync -rep_master -rep_transport \
+ [list 1 replsend]}]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set clientenv [eval {berkdb_env -create} $envargs -txn nosync \
+ -lock_max 2500 \
+ {-home $clientdir -rep_client -rep_transport [list 2 replsend]}]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Run a modified test001 in the master (and update client).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $largs
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Verify the database in the client dir.
+ puts "\tRep$tnum.b: Verifying client database contents."
+ set testdir [get_home $masterenv]
+ set t1 $testdir/t1
+ set t2 $testdir/t2
+ set t3 $testdir/t3
+ open_and_dump_file test$tnum.db $clientenv $t1 \
+ $checkfunc dump_file_direction "-first" "-next"
+
+ puts "\tRep$tnum.c: Verifying non-master db_checkpoint."
+ set stat [catch {exec $util_path/db_checkpoint -h $masterdir -1} ret]
+ error_check_good open_err $stat 1
+ error_check_good open_err1 [is_substr $ret "attempting to modify"] 1
+
+ puts "\tRep$tnum.d: Verifying non-master access."
+ set rdenv \
+ [eval {berkdb_env_noerr} $envargs {-home $masterdir}]
+ error_check_good rdenv [is_valid_env $rdenv] TRUE
+ #
+ # Open the db read/write which will cause it to try to
+ # write out a log record, which should fail.
+ #
+ set stat [catch {berkdb_open_noerr -env $rdenv test$tnum.db} ret]
+ error_check_good open_err $stat 1
+ error_check_good open_err1 [is_substr $ret "attempting to modify"] 1
+ error_check_good rdenv_close [$rdenv close] 0
+
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+
+ error_check_good verify \
+ [verify_dir $clientdir "\tRep$tnum.e: " 0 0 1] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep007.tcl b/db/test/rep007.tcl
new file mode 100644
index 000000000..4f4c8d1f4
--- /dev/null
+++ b/db/test/rep007.tcl
@@ -0,0 +1,303 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep007.tcl,v 11.15 2003/09/25 01:35:39 margo Exp $
+#
+# TEST rep007
+# TEST Replication and bad LSNs
+# TEST
+# TEST Run a modified version of test001 in a replicated master env.
+# TEST Close the client. Make additional changes to master.
+# TEST Close the master. Open the client as the new master.
+# TEST Make several different changes. Open the old master as
+# TEST the client. Verify periodically that contents are correct.
+proc rep007 { method { niter 10 } { tnum "007" } args } {
+ global testdir
+
+ puts "Rep$tnum: Replication and bad LSNs."
+ set orig_tdir $testdir
+ set largs $args
+
+ set omethod [convert_method $method]
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR.2
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -home $clientdir2 -rep_transport \[list 3 replsend\] \
+# -verbose {rep on}"
+ set cl2env [eval $cl2_envcmd -rep_client]
+ error_check_good client2_env [is_valid_env $cl2env] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $largs
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Databases should now have identical contents. We assume we
+ # know the name of the file created by test001, "test$tnum.db".
+ set dbname "test$tnum.db"
+ if { [is_hash $method] == 0 } {
+ set db1 [berkdb_open -env $masterenv -auto_commit $dbname]
+ set db2 [berkdb_open -env $clientenv -auto_commit $dbname]
+ set db3 [berkdb_open -env $cl2env -auto_commit $dbname]
+
+ error_check_good compare1and2 \
+ [db_compare $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
+ error_check_good compare1and3 \
+ [db_compare $db1 $db3 $masterdir/$dbname $clientdir2/$dbname] 0
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good db3_close [$db3 close] 0
+ }
+
+ puts "\tRep$tnum.b: Close client 1 and make master changes."
+ error_check_good client_close [$clientenv close] 0
+
+ # Change master and propagate changes to client 2.
+ set start $niter
+ eval test001 $method $niter $start 1 $tnum -env $masterenv $largs
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # We need to do a deletion here to cause meta-page updates,
+ # particularly for queue. Delete the first pair and remember
+ # what it is -- it should come back after the master is closed
+ # and reopened as a client.
+ set db1 [berkdb_open -env $masterenv -auto_commit $dbname]
+ error_check_good dbopen [is_valid_db $db1] TRUE
+ set txn [$masterenv txn]
+ set c [$db1 cursor -txn $txn]
+ error_check_good db_cursor [is_valid_cursor $c $db1] TRUE
+ set first [$c get -first]
+ set pair [lindex [$c get -first] 0]
+ set key [lindex $pair 0]
+ set data [lindex $pair 1]
+ error_check_bad dbcget [llength $key] 0
+ error_check_good cursor_del [$c del] 0
+ error_check_good dbcclose [$c close] 0
+ error_check_good txn_commit [$txn commit] 0
+ error_check_good db1_close [$db1 close] 0
+ #
+ # Process the messages to get them out of the db. This also
+ # propagates the delete to client 2.
+ #
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ # Nuke those for closed client
+ replclear 2
+
+ # Databases 1 and 3 should now have identical contents.
+ # Database 2 should be different. First check 1 and 3. We
+ # have to wait to check 2 until the env is open again.
+ set db1 [berkdb_open -env $masterenv -auto_commit $dbname]
+ set db3 [berkdb_open -env $cl2env -auto_commit $dbname]
+
+ error_check_good compare1and3 \
+ [db_compare $db1 $db3 $masterdir/$dbname $clientdir2/$dbname] 0
+ error_check_good db1_close [$db1 close] 0
+
+ puts "\tRep$tnum.c: Close master, reopen client as master."
+ error_check_good master_close [$masterenv close] 0
+
+ set newmasterenv [eval $cl_envcmd -rep_master]
+ # Now we can check that database 2 does not match 3.
+ if { [is_hash $method] == 0 } {
+ set db2 [berkdb_open -env $newmasterenv -auto_commit $dbname]
+
+ catch {db_compare $db2 $db3 $clientdir/$dbname \
+ $clientdir2/$dbname} res
+ error_check_bad compare2and3_must_fail $res 0
+ error_check_good db2_close [$db2 close] 0
+ }
+ error_check_good db3_close [$db3 close] 0
+
+ puts "\tRep$tnum.d: Make incompatible changes to new master."
+ set db [berkdb_open -env $newmasterenv -auto_commit -create $omethod \
+ test007.db]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set t [$newmasterenv txn]
+ # Force in a pair {10 10}. This works for all access
+ # methods and won't overwrite the old first pair for record-based.
+ set ret [$db put -txn $t 10 [chop_data $method 10]]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ error_check_good dbclose [$db close] 0
+
+ eval test001 $method $niter $start 1 $tnum -env $newmasterenv $largs
+ set cl2rec 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $newmasterenv 2]
+ incr nproced [replprocessqueue $cl2env 3]
+ # At some point in the processing, client2 should be
+ # in recovery.
+ set stat [$cl2env rep_stat]
+ if { [is_substr $stat "{{In recovery} 1}"] } {
+ set cl2rec 1
+ }
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Nuke those for closed old master
+ replclear 1
+
+ #
+ # Check that cl2 stats showed we were in recovery and now that
+ # we're done, we should be out of it.
+ #
+ error_check_good cl2rec $cl2rec 1
+ set stat [$cl2env rep_stat]
+ error_check_good cl2recover [is_substr $stat "{{In recovery} 0}"] 1
+
+ # Databases 2 and 3 should now match.
+ set db2 [berkdb_open -env $newmasterenv -auto_commit $dbname]
+ set db3 [berkdb_open -env $cl2env -auto_commit $dbname]
+
+ error_check_good compare2and3 \
+ [db_compare $db2 $db3 $clientdir/$dbname $clientdir2/$dbname] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good db3_close [$db3 close] 0
+
+ puts "\tRep$tnum.e: Open old master as client."
+ set newclientenv [eval $ma_envcmd -rep_client -recover]
+ # Bring the newclient online by processing the startup messages.
+ set ncrec 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $newmasterenv 2]
+ incr nproced [replprocessqueue $newclientenv 1]
+ set stat [$newclientenv rep_stat]
+ if { [is_substr $stat "{{In recovery} 1}"] } {
+ set ncrec 1
+ }
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ error_check_good ncrec $ncrec 1
+ set stat [$newclientenv rep_stat]
+ error_check_good nc2recover [is_substr $stat "{{In recovery} 0}"] 1
+
+ # The pair we deleted earlier from the master should now
+ # have reappeared.
+ set db1 [berkdb_open -env $newclientenv -auto_commit $dbname]
+ error_check_good dbopen [is_valid_db $db1] TRUE
+ set ret [$db1 get -get_both $key [pad_data $method $data]]
+ error_check_good get_both $ret [list $pair]
+ error_check_good db1_close [$db1 close] 0
+
+ set start [expr $niter * 2]
+ eval test001 $method $niter $start 1 $tnum -env $newmasterenv $largs
+
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $newmasterenv 2]
+ incr nproced [replprocessqueue $newclientenv 1]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Now all 3 should match again.
+ set db1 [berkdb_open -env $newclientenv -auto_commit $dbname]
+ set db2 [berkdb_open -env $newmasterenv -auto_commit $dbname]
+ set db3 [berkdb_open -env $cl2env -auto_commit $dbname]
+
+ error_check_good compare1and2 \
+ [db_compare $db1 $db2 $masterdir/$dbname $clientdir/$dbname] 0
+ error_check_good compare1and3 \
+ [db_compare $db1 $db3 $masterdir/$dbname $clientdir2/$dbname] 0
+ error_check_good db1_close [$db1 close] 0
+ error_check_good db2_close [$db2 close] 0
+ error_check_good db3_close [$db3 close] 0
+
+ error_check_good newmasterenv_close [$newmasterenv close] 0
+ error_check_good newclientenv_close [$newclientenv close] 0
+ error_check_good cl2_close [$cl2env close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/rep008.tcl b/db/test/rep008.tcl
new file mode 100644
index 000000000..7db50ca85
--- /dev/null
+++ b/db/test/rep008.tcl
@@ -0,0 +1,114 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep008.tcl,v 1.3 2003/08/28 19:59:15 sandstro Exp $
+#
+# TEST rep008
+# TEST Replication, back up and synchronizing
+# TEST
+# TEST Run a modified version of test001 in a replicated master environment;
+# TEST Close master and client.
+# TEST Copy the master log to the client.
+# TEST Clean the master.
+# TEST Reopen the master and client.
+proc rep008 { method { niter 10 } { tnum "008" } args } {
+ global testdir
+
+ puts "Rep$tnum: Replication backup and synchronizing"
+ set largs $args
+
+ env_cleanup $testdir
+
+ if { [is_btree $method] == 0 } {
+ puts "Rep008: Skipping for method $method."
+ return
+ }
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Run a modified test001 in the master (and update client).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $largs
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ puts "\tRep$tnum.b: Close client and master. Copy logs."
+ error_check_good client_close [$clientenv close] 0
+ error_check_good master_close [$masterenv close] 0
+ file copy -force $masterdir/log.0000000001 $testdir/log.save
+
+ puts "\tRep$tnum.c: Clean master and reopen"
+ env_cleanup $masterdir
+ env_cleanup $clientdir
+ file copy -force $testdir/log.save $clientdir/log.0000000001
+ set masterenv [eval $ma_envcmd -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ set clientenv [eval $cl_envcmd -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ #
+ # Process the messages to get them out of the db.
+ #
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep009.tcl b/db/test/rep009.tcl
new file mode 100644
index 000000000..fd97e6cf5
--- /dev/null
+++ b/db/test/rep009.tcl
@@ -0,0 +1,165 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep009.tcl,v 11.3 2003/08/28 19:59:15 sandstro Exp $
+#
+# TEST rep009
+# TEST Replication and DUPMASTERs
+# TEST Run test001 in a replicated environment.
+# TEST
+# TEST Declare one of the clients to also be a master.
+# TEST Close a client, clean it and then declare it a 2nd master.
+proc rep009 { method { niter 10 } { tnum "009" } args } {
+
+ puts "Rep$tnum: Replication DUPMASTER test."
+
+ if { [is_btree $method] == 0 } {
+ puts "Rep009: Skipping for method $method."
+ return
+ }
+ set largs $args
+ rep009_body $method $niter $tnum 0 $largs
+ rep009_body $method $niter $tnum 1 $largs
+
+}
+
+proc rep009_body { method niter tnum clean largs } {
+ global testdir
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR.2
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $ma_envcmd -rep_master]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -verbose {rep on} \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $cl_envcmd -rep_client]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env -create -txn nosync -lock_max 2500 \
+# -home $clientdir2 -rep_transport \[list 3 replsend\] \
+# -verbose {rep on}"
+ set cl2env [eval $cl2_envcmd -rep_client]
+ error_check_good client2_env [is_valid_env $cl2env] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Run a modified test001 in the master (and update client).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval test001 $method $niter 0 0 $tnum -env $masterenv $largs
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ puts "\tRep$tnum.b: Declare a client to be a master."
+ if { $clean } {
+ error_check_good clientenv_close [$clientenv close] 0
+ env_cleanup $clientdir
+ set clientenv [eval $cl_envcmd -rep_master]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+ } else {
+ error_check_good client_master [$clientenv rep_start -master] 0
+ }
+
+ #
+ # Process the messages to get them out of the db.
+ #
+ for { set i 1 } { $i <= 3 } { incr i } {
+ set seen_dup($i) 0
+ }
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1 0 he nm dup1 err1]
+ incr nproced [replprocessqueue $clientenv 2 0 he nm dup2 err2]
+ incr nproced [replprocessqueue $cl2env 3 0 he nm dup3 err3]
+ if { $dup1 != 0 } {
+ set seen_dup(1) 1
+ error_check_good downgrade1 \
+ [$masterenv rep_start -client] 0
+ }
+ if { $dup2 != 0 } {
+ set seen_dup(2) 1
+ error_check_good downgrade1 \
+ [$clientenv rep_start -client] 0
+ }
+ #
+ # We might get errors after downgrading as the former
+ # masters might get old messages from other clients.
+ # If we get an error make sure it is after downgrade.
+ if { $err1 != 0 } {
+ error_check_good seen_dup1_err $seen_dup(1) 1
+ error_check_good err1str [is_substr \
+ $err1 "invalid argument"] 1
+ }
+ if { $err2 != 0 } {
+ error_check_good seen_dup2_err $seen_dup(2) 1
+ error_check_good err2str [is_substr \
+ $err2 "invalid argument"] 1
+ }
+ #
+ # This should never happen. We'll check below.
+ #
+ if { $dup3 != 0 } {
+ set seen_dup(3) 1
+ }
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ error_check_good seen_dup1 $seen_dup(1) 1
+ error_check_good seen_dup2 $seen_dup(2) 1
+ error_check_bad seen_dup3 $seen_dup(3) 1
+
+ puts "\tRep$tnum.c: Close environments"
+ error_check_good master_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+ error_check_good cl2_close [$cl2env close] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep010.tcl b/db/test/rep010.tcl
new file mode 100644
index 000000000..8ee6de0eb
--- /dev/null
+++ b/db/test/rep010.tcl
@@ -0,0 +1,183 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep010.tcl,v 11.3 2003/10/31 20:15:43 sandstro Exp $
+#
+# TEST rep010
+# TEST Replication and ISPERM
+# TEST
+# TEST With consecutive message processing, make sure every
+# TEST DB_REP_PERMANENT is responded to with an ISPERM when
+# TEST processed. With gaps in the processing, make sure
+# TEST every DB_REP_PERMANENT is responded to with an ISPERM
+# TEST or a NOTPERM. Verify in both cases that the LSN returned
+# TEST with ISPERM is found in the log.
+proc rep010 { method { niter 100 } { tnum "010" } args } {
+ source ./include.tcl
+ global perm_sent_list
+ global perm_rec_list
+ global rand_init
+ berkdb srand $rand_init
+ puts "Rep$tnum: Replication and ISPERM ($method)"
+
+ env_cleanup $testdir
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Open a master.
+ repladd 1
+ set env_cmd(M) "berkdb_env_noerr -create -lock_max 2500 \
+ -log_max 1000000 \
+ -home $masterdir -txn nosync -rep_master \
+ -rep_transport \[list 1 replsend\]"
+ set masterenv [eval $env_cmd(M)]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set env_cmd(C) "berkdb_env_noerr -create -home $clientdir \
+ -txn nosync -rep_client \
+ -rep_transport \[list 2 replsend\]"
+ set clientenv [eval $env_cmd(C)]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online.
+ rep010_procmessages $masterenv $clientenv
+
+ # Open database in master, propagate to client.
+ set dbname rep010.db
+ set db1 [eval "berkdb_open -create $omethod -auto_commit \
+ -env $masterenv $args $dbname"]
+ rep010_procmessages $masterenv $clientenv
+
+ puts "\tRep$tnum.a: Process messages with no gaps."
+ # Initialize lists of permanent LSNs sent and received.
+ set perm_sent_list {}
+ set perm_rec_list {}
+
+ # Feed operations one at a time to master and immediately
+ # update client.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set t [$masterenv txn]
+ error_check_good db_put \
+ [eval $db1 put -txn $t $i [chop_data $method data$i]] 0
+ error_check_good txn_commit [$t commit] 0
+ rep010_procmessages $masterenv $clientenv
+ }
+
+ # Replace data.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set t [$masterenv txn]
+ set ret \
+ [$db1 get -get_both -txn $t $i [pad_data $method data$i]]
+ error_check_good db_put \
+ [$db1 put -txn $t $i [chop_data $method newdata$i]] 0
+ error_check_good txn_commit [$t commit] 0
+ rep010_procmessages $masterenv $clientenv
+ }
+
+ # Try some aborts. These do not write permanent messages.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set t [$masterenv txn]
+ error_check_good db_put [$db1 put -txn $t $i abort$i] 0
+ error_check_good txn_abort [$t abort] 0
+ rep010_procmessages $masterenv $clientenv
+ }
+
+ puts "\tRep$tnum.b: Process messages with gaps."
+ # Reinitialize lists of permanent LSNs sent and received.
+ set perm_sent_list {}
+ set perm_rec_list {}
+
+ # To test gaps in message processing, run and commit a whole
+ # bunch of transactions, then process the messages with skips.
+ for { set i 1 } { $i <= $niter } { incr i } {
+ set t [$masterenv txn]
+ error_check_good db_put [$db1 put -txn $t $i data$i] 0
+ error_check_good txn_commit [$t commit] 0
+ }
+ set skip [berkdb random_int 2 8]
+ rep010_procmessages $masterenv $clientenv $skip
+
+ # Clean up.
+ error_check_good db1_close [$db1 close] 0
+ error_check_good masterenv_close [$masterenv close] 0
+ error_check_good clientenv_close [$clientenv close] 0
+
+ replclose $testdir/MSGQUEUEDIR
+}
+
+proc rep010_procmessages { masterenv clientenv {skip_interval 0} } {
+ global perm_response
+ global perm_sent_list
+ global perm_rec_list
+
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1 $skip_interval]
+ incr nproced [replprocessqueue $clientenv 2 $skip_interval]
+
+ # In this test, the ISPERM and NOTPERM messages are
+ # sent by the client back to the master. Verify that we
+ # get ISPERM when the client is caught up to the master
+ # (i.e. last client LSN in the log matches the LSN returned
+ # with the ISPERM), and that when we get NOTPERM, the client
+ # is not caught up.
+
+ # Create a list of the LSNs in the client log.
+ set lsnlist {}
+ set logc [$clientenv log_cursor]
+ error_check_good logc \
+ [is_valid_logc $logc $clientenv] TRUE
+ for { set logrec [$logc get -first] } { [llength $logrec] != 0 } \
+ { set logrec [$logc get -next] } {
+ lappend lsnlist [lindex [lindex $logrec 0] 1]
+ }
+ set lastloglsn [lindex $lsnlist end]
+
+ # Parse perm_response to find the LSN returned with
+ # ISPERM or NOTPERM.
+ set permtype [lindex $perm_response 0]
+ set messagelsn [lindex [lindex $perm_response 1] 1]
+
+ if { $perm_response != "" } {
+ if { $permtype == "NOTPERM" } {
+ # If we got a NOTPERM, the returned LSN has to
+ # be greater than the last LSN in the log.
+ error_check_good \
+ notpermlsn [expr $messagelsn > $lastloglsn] 1
+ } elseif { $permtype == "ISPERM" } {
+ # If we got an ISPERM, the returned LSN has to
+ # be in the log.
+ error_check_bad \
+ ispermlsn [lsearch $lsnlist $messagelsn] -1
+ } else {
+ puts "FAIL: unexpected message type $permtype"
+ }
+ }
+
+ error_check_good logc_close [$logc close] 0
+
+ # If we've finished processing all the messages, check
+ # that the last received permanent message LSN matches the
+ # last sent permanent message LSN.
+ if { $nproced == 0 } {
+ set last_sent [string index $perm_sent_list end]
+ set last_received [string index $perm_rec_list end]
+ error_check_good last_message $last_sent $last_received
+ break
+ }
+ }
+}
+
diff --git a/db/test/rep011.tcl b/db/test/rep011.tcl
new file mode 100644
index 000000000..4714a9e98
--- /dev/null
+++ b/db/test/rep011.tcl
@@ -0,0 +1,168 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep011.tcl,v 1.3 2003/09/26 16:05:13 sandstro Exp $
+#
+# TEST rep011
+# TEST Replication: test open handle across an upgrade.
+# TEST
+# TEST Open and close test database in master environment.
+# TEST Update the client. Check client, and leave the handle
+# TEST to the client open as we close the masterenv and upgrade
+# TEST the client to master. Reopen the old master as client
+# TEST and catch up. Test that we can still do a put to the
+# TEST handle we created on the master while it was still a
+# TEST client, and then make sure that the change can be
+# TEST propagated back to the new client.
+
+proc rep011 { method { tnum "011" } args } {
+ global passwd
+
+ puts "Rep$tnum.a: Test upgrade of open handles ($method)."
+
+ set envargs ""
+ rep011_sub $method $tnum $envargs $args
+
+ puts "Rep$tnum.b: Open handle upgrade test with encryption ($method)."
+ append envargs " -encryptaes $passwd "
+ append args " -encrypt "
+ rep011_sub $method $tnum $envargs $args
+}
+
+proc rep011_sub { method tnum envargs largs } {
+ source ./include.tcl
+ global testdir
+ global encrypt
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+
+ file mkdir $masterdir
+ file mkdir $clientdir
+
+ # Open a master.
+ repladd 1
+ set masterenv \
+ [eval {berkdb_env -create -lock_max 2500 -log_max 1000000} \
+ $envargs {-home $masterdir -txn nosync -rep_master -rep_transport \
+ [list 1 replsend]}]
+ error_check_good master_env [is_valid_env $masterenv] TRUE
+
+ # Open a client
+ repladd 2
+ set clientenv [eval {berkdb_env -create} $envargs -txn nosync \
+ -lock_max 2500 {-home $clientdir -rep_client -rep_transport \
+ [list 2 replsend]}]
+ error_check_good client_env [is_valid_env $clientenv] TRUE
+
+ # Bring the client online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Open a test database on the master so we can test having
+ # handles open across an upgrade.
+ puts "\tRep$tnum.a:\
+ Opening test database for post-upgrade client logging test."
+ set master_upg_db [berkdb_open \
+ -create -auto_commit -btree -env $masterenv rep$tnum-upg.db]
+ set puttxn [$masterenv txn]
+ error_check_good master_upg_db_put \
+ [$master_upg_db put -txn $puttxn hello world] 0
+ error_check_good puttxn_commit [$puttxn commit] 0
+ error_check_good master_upg_db_close [$master_upg_db close] 0
+
+ # Update the client.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv 1]
+ incr nproced [replprocessqueue $clientenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Open the cross-upgrade database on the client and check its contents.
+ set client_upg_db [berkdb_open \
+ -create -auto_commit -btree -env $clientenv rep$tnum-upg.db]
+ error_check_good client_upg_db_get [$client_upg_db get hello] \
+ [list [list hello world]]
+ # !!! We use this handle later. Don't close it here.
+
+ # Close master.
+ puts "\tRep$tnum.b: Close master."
+ error_check_good masterenv_close [$masterenv close] 0
+
+ puts "\tRep$tnum.c: Upgrade client."
+ set newmasterenv $clientenv
+ error_check_good upgrade_client [$newmasterenv rep_start -master] 0
+
+ puts "\tRep$tnum.d: Reopen old master as client and catch up."
+ set newclientenv [eval {berkdb_env -create -recover} $envargs \
+ -txn nosync -lock_max 2500 \
+ {-home $masterdir -rep_client -rep_transport [list 1 replsend]}]
+ error_check_good newclient_env [is_valid_env $newclientenv] TRUE
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $newclientenv 1]
+ incr nproced [replprocessqueue $newmasterenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Test put to the database handle we opened back when the new master
+ # was a client.
+ puts "\tRep$tnum.e: Test put to handle opened before upgrade."
+ set puttxn [$newmasterenv txn]
+ error_check_good client_upg_db_put \
+ [$client_upg_db put -txn $puttxn hello there] 0
+ error_check_good puttxn_commit [$puttxn commit] 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $newclientenv 1]
+ incr nproced [replprocessqueue $newmasterenv 2]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ # Close the new master's handle for the upgrade-test database; we
+ # don't need it. Then check to make sure the client did in fact
+ # update the database.
+ puts "\tRep$tnum.f: Test that client did update the database."
+ error_check_good client_upg_db_close [$client_upg_db close] 0
+ set newclient_upg_db [berkdb_open -env $newclientenv rep$tnum-upg.db]
+ error_check_good newclient_upg_db_get [$newclient_upg_db get hello] \
+ [list [list hello there]]
+ error_check_good newclient_upg_db_close [$newclient_upg_db close] 0
+
+ error_check_good newmasterenv_close [$newmasterenv close] 0
+ error_check_good newclientenv_close [$newclientenv close] 0
+
+ if { [lsearch $envargs "-encrypta*"] !=-1 } {
+ set encrypt 1
+ }
+ error_check_good verify \
+ [verify_dir $clientdir "\tRep$tnum.g: " 0 0 1] 0
+ replclose $testdir/MSGQUEUEDIR
+}
diff --git a/db/test/rep012.tcl b/db/test/rep012.tcl
new file mode 100644
index 000000000..ebfa253bb
--- /dev/null
+++ b/db/test/rep012.tcl
@@ -0,0 +1,168 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep012.tcl,v 11.6 2003/11/18 14:21:17 sue Exp $
+#
+# TEST rep012
+# TEST Replication and dead DB handles.
+# TEST
+# TEST Run a modified version of test001 in a replicated master env.
+# TEST Make additional changes to master, but not to the client.
+# TEST Downgrade the master and upgrade the client with open db handles.
+# TEST Verify that the roll back on clients gives dead db handles.
+proc rep012 { method { niter 10 } { tnum "012" } args } {
+ global testdir
+
+ puts "Rep$tnum: Replication and dead ($method) db handles."
+ set orig_tdir $testdir
+ set largs $args
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR.2
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV0 \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV0 -verbose {rep on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set env0 [eval $ma_envcmd -rep_master]
+ set masterenv $env0
+ error_check_good master_env [is_valid_env $env0] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV1 \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV1 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set env1 [eval $cl_envcmd -rep_client]
+ set clientenv $env1
+ error_check_good client_env [is_valid_env $env1] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV2 \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV2 -verbose {rep on} -errfile /dev/stderr \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set cl2env [eval $cl2_envcmd -rep_client]
+ error_check_good client2_env [is_valid_env $cl2env] TRUE
+
+ set testfile "test$tnum.db"
+ set largs [convert_args $method $args]
+ set omethod [convert_method $method]
+ set env0db [eval {berkdb_open_noerr -env $env0 -auto_commit \
+ -create -mode 0644} $largs $omethod $testfile]
+ set masterdb $env0db
+ error_check_good dbopen [is_valid_db $env0db] TRUE
+
+ # Bring the clients online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env0 1]
+ incr nproced [replprocessqueue $env1 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ set env1db [eval {berkdb_open_noerr -env $env1 -auto_commit \
+ -mode 0644} $largs $omethod $testfile]
+ set clientdb $env1db
+ error_check_good dbopen [is_valid_db $env1db] TRUE
+ set env2db [eval {berkdb_open_noerr -env $cl2env -auto_commit \
+ -mode 0644} $largs $omethod $testfile]
+ error_check_good dbopen [is_valid_db $env2db] TRUE
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval rep_test $method $masterenv $masterdb $niter 0 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env0 1]
+ incr nproced [replprocessqueue $env1 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ set nstart $niter
+ puts "\tRep$tnum.b: Run test in master and client 2 only"
+ eval rep_test $method $masterenv $masterdb $niter $nstart 1
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env0 1]
+ # Ignore those for $env1
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ # Nuke those for client about to become master.
+ replclear 2
+ tclsleep 3
+ puts "\tRep$tnum.c: Swap envs"
+ set tmp $masterenv
+ set masterenv $clientenv
+ set clientenv $tmp
+ error_check_good downgrade [$clientenv rep_start -client] 0
+ error_check_good upgrade [$masterenv rep_start -master] 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env0 1]
+ incr nproced [replprocessqueue $env1 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ #
+ # At this point, env0 should have rolled back across a txn commit.
+ # If we do any operation on env0db, we should get an error that
+ # the handle is dead.
+ puts "\tRep$tnum.d: Try to access db handle after rollback"
+ set stat1 [catch {$env0db stat} ret1]
+ error_check_good stat1 $stat1 1
+ error_check_good dead1 [is_substr $ret1 DB_REP_HANDLE_DEAD] 1
+
+ set stat3 [catch {$env2db stat} ret3]
+ error_check_good stat3 $stat3 1
+ error_check_good dead3 [is_substr $ret3 DB_REP_HANDLE_DEAD] 1
+
+ puts "\tRep$tnum.e: Closing"
+ error_check_good env0db [$env0db close] 0
+ error_check_good env1db [$env1db close] 0
+ error_check_good cl2db [$env2db close] 0
+ error_check_good env0_close [$env0 close] 0
+ error_check_good env1_close [$env1 close] 0
+ error_check_good cl2_close [$cl2env close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/rep013.tcl b/db/test/rep013.tcl
new file mode 100644
index 000000000..6dde33a59
--- /dev/null
+++ b/db/test/rep013.tcl
@@ -0,0 +1,229 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: rep013.tcl,v 11.4 2003/10/16 14:26:41 sue Exp $
+#
+# TEST rep013
+# TEST Replication and swapping master/clients with open dbs.
+# TEST
+# TEST Run a modified version of test001 in a replicated master env.
+# TEST Make additional changes to master, but not to the client.
+# TEST Swap master and client.
+# TEST Verify that the roll back on clients gives dead db handles.
+# TEST Swap and verify several times.
+proc rep013 { method { niter 10 } { tnum "013" } args } {
+ global testdir
+
+ puts "Rep$tnum: Replication and ($method) master/client swapping."
+ set orig_tdir $testdir
+ set largs $args
+
+ env_cleanup $testdir
+
+ replsetup $testdir/MSGQUEUEDIR
+
+ set masterdir $testdir/MASTERDIR
+ set clientdir $testdir/CLIENTDIR
+ set clientdir2 $testdir/CLIENTDIR.2
+ file mkdir $masterdir
+ file mkdir $clientdir
+ file mkdir $clientdir2
+
+ set nswap 6
+
+ # Open a master.
+ repladd 1
+ set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV1 \
+ -home $masterdir -rep_transport \[list 1 replsend\]"
+# set ma_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV1 -verbose {recovery on} -errfile /dev/stderr \
+# -home $masterdir -rep_transport \[list 1 replsend\]"
+ set env1 [eval $ma_envcmd -rep_master]
+ error_check_good master_env [is_valid_env $env1] TRUE
+
+ # Open two clients
+ repladd 2
+ set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV2 \
+ -home $clientdir -rep_transport \[list 2 replsend\]"
+# set cl_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV2 -verbose {recovery on} -errfile /dev/stderr \
+# -home $clientdir -rep_transport \[list 2 replsend\]"
+ set env2 [eval $cl_envcmd -rep_client]
+ error_check_good client_env [is_valid_env $env2] TRUE
+
+ repladd 3
+ set cl2_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+ -errpfx ENV3 \
+ -home $clientdir2 -rep_transport \[list 3 replsend\]"
+# set cl2_envcmd "berkdb_env_noerr -create -txn nosync -lock_max 2500 \
+# -errpfx ENV3 -verbose {recovery on} -errfile /dev/stderr \
+# -home $clientdir2 -rep_transport \[list 3 replsend\]"
+ set cl2env [eval $cl2_envcmd -rep_client]
+ error_check_good client2_env [is_valid_env $cl2env] TRUE
+
+ set testfile "test$tnum.db"
+
+ set largs [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ set env1db_cmd "berkdb_open_noerr -env $env1 -auto_commit \
+ -create -mode 0644 $largs $omethod $testfile"
+ set env1db [eval $env1db_cmd]
+ error_check_good dbopen [is_valid_db $env1db] TRUE
+
+ #
+ # Verify that a client creating a database gets an error.
+ #
+ set stat [catch {berkdb_open_noerr -env $env2 -auto_commit \
+ -create -mode 0644 $largs $omethod $testfile} ret]
+ error_check_good create_cl $stat 1
+ error_check_good cr_str [is_substr $ret "invalid"] 1
+
+ # Bring the clients online by processing the startup messages.
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env1 1]
+ incr nproced [replprocessqueue $env2 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ set env2db_cmd "berkdb_open_noerr -env $env2 -auto_commit \
+ -mode 0644 $largs $omethod $testfile"
+ set env2db [eval $env2db_cmd]
+ error_check_good dbopen [is_valid_db $env2db] TRUE
+ set env3db_cmd "berkdb_open_noerr -env $cl2env -auto_commit \
+ -mode 0644 $largs $omethod $testfile"
+ set env3db [eval $env3db_cmd]
+ error_check_good dbopen [is_valid_db $env3db] TRUE
+
+ #
+ # Set up all the master/client data we're going to need
+ # to keep track of and swap.
+ #
+ set masterenv $env1
+ set masterdb $env1db
+ set mid 1
+ set clientenv $env2
+ set clientdb $env2db
+ set cid 2
+ set mdb_cmd "berkdb_open_noerr -env $masterenv -auto_commit \
+ -mode 0644 $args $omethod $testfile"
+ set cdb_cmd "berkdb_open_noerr -env $clientenv -auto_commit \
+ -mode 0644 $args $omethod $testfile"
+
+ # Run a modified test001 in the master (and update clients).
+ puts "\tRep$tnum.a: Running test001 in replicated env."
+ eval rep_test $method $masterenv $masterdb $niter 0 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env1 1]
+ incr nproced [replprocessqueue $env2 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+
+ set nstart 0
+ for { set i 0 } { $i < $nswap } { incr i } {
+ puts "\tRep$tnum.b.$i: Check for bad db handles"
+ set dbl {masterdb clientdb env3db}
+ set dbcmd {$mdb_cmd $cdb_cmd $env3db_cmd}
+
+ set stat [catch {$masterdb stat} ret]
+ if { $stat == 1 } {
+ error_check_good dead [is_substr $ret \
+ DB_REP_HANDLE_DEAD] 1
+ error_check_good close [$masterdb close] 0
+ set masterdb [eval $mdb_cmd]
+ error_check_good dbopen [is_valid_db $masterdb] TRUE
+ }
+
+ set stat [catch {$clientdb stat} ret]
+ if { $stat == 1 } {
+ error_check_good dead [is_substr $ret \
+ DB_REP_HANDLE_DEAD] 1
+ error_check_good close [$clientdb close] 0
+ set clientdb [eval $cdb_cmd]
+ error_check_good dbopen [is_valid_db $clientdb] TRUE
+ }
+
+ set stat [catch {$env3db stat} ret]
+ if { $stat == 1 } {
+ error_check_good dead [is_substr $ret \
+ DB_REP_HANDLE_DEAD] 1
+ error_check_good close [$env3db close] 0
+ set env3db [eval $env3db_cmd]
+ error_check_good dbopen [is_valid_db $env3db] TRUE
+ }
+
+ set nstart [expr $nstart + $niter]
+ puts "\tRep$tnum.c.$i: Run test in master and client2 only"
+ eval rep_test $method $masterenv $masterdb $niter $nstart 1
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $masterenv $mid]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ # Nuke those for client about to become master.
+ replclear $cid
+
+ # Swap all the info we need.
+ set tmp $masterenv
+ set masterenv $clientenv
+ set clientenv $tmp
+
+ set tmp $masterdb
+ set masterdb $clientdb
+ set clientdb $tmp
+
+ set tmp $mid
+ set mid $cid
+ set cid $tmp
+
+ set tmp $mdb_cmd
+ set mdb_cmd $cdb_cmd
+ set cdb_cmd $tmp
+
+ puts "\tRep$tnum.d.$i: Swap: master $mid, client $cid"
+ error_check_good downgrade [$clientenv rep_start -client] 0
+ error_check_good upgrade [$masterenv rep_start -master] 0
+ while { 1 } {
+ set nproced 0
+
+ incr nproced [replprocessqueue $env1 1]
+ incr nproced [replprocessqueue $env2 2]
+ incr nproced [replprocessqueue $cl2env 3]
+
+ if { $nproced == 0 } {
+ break
+ }
+ }
+ }
+ puts "\tRep$tnum.e: Closing"
+ error_check_good masterdb [$masterdb close] 0
+ error_check_good clientdb [$clientdb close] 0
+ error_check_good cl2db [$env3db close] 0
+ error_check_good env1_close [$env1 close] 0
+ error_check_good env2_close [$env2 close] 0
+ error_check_good cl2_close [$cl2env close] 0
+ replclose $testdir/MSGQUEUEDIR
+ set testdir $orig_tdir
+ return
+}
diff --git a/db/test/reputils.tcl b/db/test/reputils.tcl
index ed0aa786d..8406dbe21 100644
--- a/db/test/reputils.tcl
+++ b/db/test/reputils.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: reputils.tcl,v 11.34 2002/08/12 17:54:18 sandstro Exp
+# $Id: reputils.tcl,v 11.58 2003/10/31 20:15:43 sandstro Exp $
#
# Replication testing utilities
@@ -33,7 +33,10 @@ global queueenv
# messages.
global queuedbs
global machids
-
+global perm_sent_list
+set perm_sent_list {}
+global perm_rec_list
+set perm_rec_list {}
global elect_timeout
set elect_timeout 50000000
set drop 0
@@ -41,8 +44,7 @@ set drop 0
# Create the directory structure for replication testing.
# Open the master and client environments; store these in the global repenv
# Return the master's environment: "-env masterenv"
-#
-proc repl_envsetup { envargs largs tnum {nclients 1} {droppct 0} { oob 0 } } {
+proc repl_envsetup { envargs largs test {nclients 1} {droppct 0} { oob 0 } } {
source ./include.tcl
global clientdir
global drop drop_msg
@@ -75,9 +77,10 @@ proc repl_envsetup { envargs largs tnum {nclients 1} {droppct 0} { oob 0 } } {
# but big enough so that the tests that use binary files
# as keys/data can run.
#
- set lmax [expr 3 * 1024 * 1024]
- set masterenv [eval {berkdb_env -create -log_max $lmax} $envargs \
- {-home $masterdir -txn -rep_master -rep_transport \
+ set logmax [expr 3 * 1024 * 1024]
+ set masterenv [eval {berkdb_env -create -log_max $logmax} $envargs \
+ -lock_max 10000 \
+ {-home $masterdir -txn nosync -rep_master -rep_transport \
[list 1 replsend]}]
error_check_good master_env [is_valid_env $masterenv] TRUE
set repenv(master) $masterenv
@@ -86,9 +89,9 @@ proc repl_envsetup { envargs largs tnum {nclients 1} {droppct 0} { oob 0 } } {
for { set i 0 } { $i < $nclients } { incr i } {
set envid [expr $i + 2]
repladd $envid
- set clientenv [eval {berkdb_env -create} $envargs -txn \
+ set clientenv [eval {berkdb_env -create} $envargs -txn nosync \
{-cachesize { 0 10000000 0 }} -lock_max 10000 \
- {-home $clientdir($i) -rep_client -rep_transport \
+ { -home $clientdir($i) -rep_client -rep_transport \
[list $envid replsend]}]
error_check_good client_env [is_valid_env $clientenv] TRUE
set repenv($i) $clientenv
@@ -97,7 +100,7 @@ proc repl_envsetup { envargs largs tnum {nclients 1} {droppct 0} { oob 0 } } {
append largs " -env $masterenv "
# Process startup messages
- repl_envprocq $tnum $nclients $oob
+ repl_envprocq $test $nclients $oob
return $largs
}
@@ -109,8 +112,7 @@ proc repl_envsetup { envargs largs tnum {nclients 1} {droppct 0} { oob 0 } } {
# with out-of-order delivery. The replprocess procedure actually does
# the real work of processing the queue -- this routine simply iterates
# over the various queues and does the initial setup.
-
-proc repl_envprocq { tnum { nclients 1 } { oob 0 }} {
+proc repl_envprocq { test { nclients 1 } { oob 0 }} {
global repenv
global drop
@@ -122,9 +124,8 @@ proc repl_envprocq { tnum { nclients 1 } { oob 0 }} {
}
error_check_good i_nclients $nclients $i
- set name [format "Repl%03d" $tnum]
berkdb debug_check
- puts -nonewline "\t$name: Processing master/$i client queues"
+ puts -nonewline "\t$test: Processing master/$i client queues"
set rand_skip 0
if { $oob } {
puts " out-of-order"
@@ -182,7 +183,7 @@ proc repl_envprocq { tnum { nclients 1 } { oob 0 }} {
set do_check 0
$masterenv rep_flush
berkdb debug_check
- puts "\t$name: Flushing Master"
+ puts "\t$test: Flushing Master"
} else {
break
}
@@ -200,8 +201,7 @@ proc repl_envprocq { tnum { nclients 1 } { oob 0 }} {
# Verify that the directories in the master are exactly replicated in
# each of the client environments.
-
-proc repl_envver0 { tnum method { nclients 1 } } {
+proc repl_envver0 { test method { nclients 1 } } {
global clientdir
global masterdir
global repenv
@@ -212,7 +212,6 @@ proc repl_envver0 { tnum method { nclients 1 } } {
set t2 $masterdir/t2
set t3 $masterdir/t3
set omethod [convert_method $method]
- set name [format "Repl%03d" $tnum]
#
# We are interested in the keys of whatever databases are present
@@ -237,8 +236,7 @@ proc repl_envver0 { tnum method { nclients 1 } } {
file rename -force $t3 $t2
}
for { set i 0 } { $i < $nclients } { incr i } {
- puts "\t$name: Verifying client $i database \
- $testfile contents."
+ puts "\t$test: Verifying client $i database $testfile contents."
open_and_dump_file $testfile $repenv($i) \
$t1 repl_noop dump_file_direction "-first" "-next"
@@ -254,14 +252,12 @@ proc repl_envver0 { tnum method { nclients 1 } } {
# Remove all the elements from the master and verify that these
# deletions properly propagated to the clients.
-
-proc repl_verdel { tnum method { nclients 1 } } {
+proc repl_verdel { test method { nclients 1 } } {
global clientdir
global masterdir
global repenv
# Delete all items in the master.
- set name [format "Repl%03d" $tnum]
set cwd [pwd]
cd $masterdir
set stat [catch {glob test*.db} dbs]
@@ -270,7 +266,7 @@ proc repl_verdel { tnum method { nclients 1 } } {
return
}
foreach testfile $dbs {
- puts "\t$name: Deleting all items from the master."
+ puts "\t$test: Deleting all items from the master."
set txn [$repenv(master) txn]
error_check_good txn_begin [is_valid_txn $txn \
$repenv(master)] TRUE
@@ -287,11 +283,11 @@ proc repl_verdel { tnum method { nclients 1 } } {
error_check_good txn_commit [$txn commit] 0
error_check_good db_close [$db close] 0
- repl_envprocq $tnum $nclients
+ repl_envprocq $test $nclients
# Check clients.
for { set i 0 } { $i < $nclients } { incr i } {
- puts "\t$name: Verifying emptiness of client database $i."
+ puts "\t$test: Verifying client database $i is empty."
set db [berkdb_open -env $repenv($i) $testfile]
error_check_good reopen_client($i) \
@@ -316,7 +312,7 @@ proc repl_noop { k d } {
}
# Close all the master and client environments in a replication test directory.
-proc repl_envclose { tnum envargs } {
+proc repl_envclose { test envargs } {
source ./include.tcl
global clientdir
global encrypt
@@ -333,9 +329,8 @@ proc repl_envclose { tnum envargs } {
# process messages in order to flush all the clients.
set drop 0
set do_check 0
- set name [format "Repl%03d" $tnum]
berkdb debug_check
- puts "\t$name: Checkpointing master."
+ puts "\t$test: Checkpointing master."
error_check_good masterenv_ckp [$repenv(master) txn_checkpoint] 0
# Count clients.
@@ -344,13 +339,13 @@ proc repl_envclose { tnum envargs } {
break
}
}
- repl_envprocq $tnum $ncli
+ repl_envprocq $test $ncli
error_check_good masterenv_close [$repenv(master) close] 0
- verify_dir $masterdir "\t$name: " 0 0 1
+ verify_dir $masterdir "\t$test: " 0 0 1
for { set i 0 } { $i < $ncli } { incr i } {
error_check_good client($i)_close [$repenv($i) close] 0
- verify_dir $clientdir($i) "\t$name: " 0 0 1
+ verify_dir $clientdir($i) "\t$test: " 0 0 1
}
replclose $testdir/MSGQUEUEDIR
@@ -374,7 +369,7 @@ proc replsetup { queuedir } {
file mkdir $queuedir
set queueenv \
- [berkdb_env -create -txn -lock_max 20000 -home $queuedir]
+ [berkdb_env -create -txn nosync -lock_max 20000 -home $queuedir]
error_check_good queueenv [is_valid_env $queueenv] TRUE
if { [info exists queuedbs] } {
@@ -386,9 +381,15 @@ proc replsetup { queuedir } {
}
# Send function for replication.
-proc replsend { control rec fromid toid } {
+proc replsend { control rec fromid toid flags lsn } {
global queuedbs queueenv machids
global drop drop_msg
+ global perm_sent_list
+
+ if { $flags == "perm" } {
+# puts "replsend sent perm message, LSN $lsn"
+ lappend perm_sent_list $lsn
+ }
#
# If we are testing with dropped messages, then we drop every
@@ -466,10 +467,12 @@ proc repladd { machid } {
# We traverse the entire queue, but since we skip some messages, we
# may end up leaving things in the queue, which should get picked up
# on a later run.
-
-proc replprocessqueue { dbenv machid { skip_interval 0 } \
- { hold_electp NONE } { newmasterp NONE } } {
+proc replprocessqueue { dbenv machid { skip_interval 0 } { hold_electp NONE } \
+ { newmasterp NONE } { dupmasterp NONE } { errp NONE } } {
global queuedbs queueenv errorCode
+ global perm_response
+ set perm_response ""
+ global perm_rec_list
# hold_electp is a call-by-reference variable which lets our caller
# know we need to hold an election.
@@ -485,6 +488,20 @@ proc replprocessqueue { dbenv machid { skip_interval 0 } \
}
set newmaster 0
+ # dupmasterp is a call-by-reference variable which lets our caller
+ # know we have a duplicate master.
+ if { [string compare $dupmasterp NONE] != 0 } {
+ upvar $dupmasterp dupmaster
+ }
+ set dupmaster 0
+
+ # errp is a call-by-reference variable which lets our caller
+ # know we have gotten an error (that they expect).
+ if { [string compare $errp NONE] != 0 } {
+ upvar $errp errorp
+ }
+ set errorp 0
+
set nproced 0
set txn [$queueenv txn]
@@ -534,9 +551,19 @@ proc replprocessqueue { dbenv machid { skip_interval 0 } \
set dbc [$queuedbs($machid) cursor -txn $txn]
set dbt [$dbc get -set $recno]
+ # Save all ISPERM and NOTPERM responses so we can compare their
+ # LSNs to the LSN in the log. The variable perm_response holds
+ # the response.
+ #
+ if { [is_substr $res ISPERM] || [is_substr $res NOTPERM] } {
+ set perm_response $res
+ set lsn [lindex $perm_response 1]
+ lappend perm_rec_list $lsn
+ }
+
if { $ret != 0 } {
- if { [is_substr $res DB_REP_HOLDELECTION] } {
- set hold_elect 1
+ if { [string compare $errp NONE] != 0 } {
+ set errorp $res
} else {
error "FAIL:[timestamp]\
rep_process_message returned $res"
@@ -547,21 +574,43 @@ proc replprocessqueue { dbenv machid { skip_interval 0 } \
$dbc del
- if { $ret == 0 && $res != 0 } {
- if { [is_substr $res DB_REP_NEWSITE] } {
- # NEWSITE; do nothing.
- } else {
- set newmaster $res
+ if { $ret == 0 } {
+ set rettype [lindex $res 0]
+ set retval [lindex $res 1]
+ #
+ # Do nothing for 0 and NEWSITE
+ #
+ if { [is_substr $rettype HOLDELECTION] } {
+ set hold_elect 1
+ }
+ if { [is_substr $rettype DUPMASTER] } {
+ set dupmaster 1
+ }
+ if { [is_substr $rettype NOTPERM] || \
+ [is_substr $rettype ISPERM] } {
+ set lsnfile [lindex $retval 0]
+ set lsnoff [lindex $retval 1]
+ }
+ if { [is_substr $rettype NEWMASTER] } {
+ set newmaster $retval
# Break as soon as we get a NEWMASTER message;
# our caller needs to handle it.
break
}
}
+ if { $errorp == 1 } {
+ # Break also on an error, caller wants to handle it.
+ break
+ }
if { $hold_elect == 1 } {
# Break also on a HOLDELECTION, for the same reason.
break
}
+ if { $dupmaster == 1 } {
+ # Break also on a HOLDELECTION, for the same reason.
+ break
+ }
}
@@ -609,38 +658,88 @@ global elections_in_progress
set elect_serial 0
# Start an election in a sub-process.
-proc start_election { qdir envstring nsites pri timeout {err "none"}} {
+proc start_election { pfx qdir envstring nsites pri timeout {err "none"}} {
source ./include.tcl
global elect_serial elect_timeout elections_in_progress machids
- incr elect_serial
-
- set t [open "|$tclsh_path >& $testdir/ELECTION_OUTPUT.$elect_serial" w]
+ set filelist {}
+ set ret [catch {glob $testdir/ELECTION*.$elect_serial} result]
+ if { $ret == 0 } {
+ set filelist [concat $filelist $result]
+ }
+ foreach f $filelist {
+ fileremove -f $f
+ }
- puts $t "source $test_path/test.tcl"
- puts $t "replsetup $qdir"
- foreach i $machids { puts $t "repladd $i" }
- puts $t "set env_cmd \{$envstring\}"
- puts $t "set dbenv \[eval \$env_cmd -errfile \
- $testdir/ELECTION_ERRFILE.$elect_serial -errpfx FAIL: \]"
-# puts "Start election err $err, env $envstring"
- puts $t "\$dbenv test abort $err"
- puts $t "set res \[catch \{\$dbenv rep_elect $nsites $pri \
+ set oid [open $testdir/ELECTION_SOURCE.$elect_serial w]
+
+ puts $oid "source $test_path/test.tcl"
+ puts $oid "replsetup $qdir"
+ foreach i $machids { puts $oid "repladd $i" }
+ puts $oid "set env_cmd \{$envstring\}"
+ puts $oid "set dbenv \[eval \$env_cmd -errfile \
+ $testdir/ELECTION_ERRFILE.$elect_serial -errpfx $pfx \]"
+# puts $oid "set dbenv \[eval \$env_cmd -errfile \
+# /dev/stdout -errpfx $pfx \]"
+ puts $oid "\$dbenv test abort $err"
+ puts $oid "set res \[catch \{\$dbenv rep_elect $nsites $pri \
$elect_timeout\} ret\]"
+ puts $oid "set r \[open \$testdir/ELECTION_RESULT.$elect_serial w\]"
+ puts $oid "if \{\$res == 0 \} \{"
+ puts $oid "puts \$r \"NEWMASTER \$ret\""
+ puts $oid "\} else \{"
+ puts $oid "puts \$r \"ERROR \$ret\""
+ puts $oid "\}"
if { $err != "none" } {
- puts $t "\$dbenv test abort none"
- puts $t "set res \[catch \{\$dbenv rep_elect $nsites $pri \
+ puts $oid "\$dbenv test abort none"
+ puts $oid "set res \[catch \{\$dbenv rep_elect $nsites $pri \
$elect_timeout\} ret\]"
+ puts $oid "if \{\$res == 0 \} \{"
+ puts $oid "puts \$r \"NEWMASTER \$ret\""
+ puts $oid "\} else \{"
+ puts $oid "puts \$r \"ERROR \$ret\""
+ puts $oid "\}"
}
+ puts $oid "close \$r"
+ close $oid
+
+ set t [open "|$tclsh_path >& $testdir/ELECTION_OUTPUT.$elect_serial" w]
+# set t [open "|$tclsh_path" w]
+ puts $t "source ./include.tcl"
+ puts $t "source $testdir/ELECTION_SOURCE.$elect_serial"
flush $t
set elections_in_progress($elect_serial) $t
return $elect_serial
}
+proc check_election { id newmasterp } {
+ source ./include.tcl
+
+ if { $id == "INVALID" } {
+ return 0
+ }
+ upvar $newmasterp newmaster
+ set newmaster 0
+ set res [catch {open $testdir/ELECTION_RESULT.$id} nmid]
+ if { $res != 0 } {
+ return 0
+ }
+ while { [gets $nmid val] != -1 } {
+# puts "result $id: $val"
+ set str [lindex $val 0]
+ if { [is_substr $str NEWMASTER] } {
+ set newmaster [lindex $val 1]
+ }
+ }
+ close $nmid
+ return 1
+}
+
proc close_election { i } {
global elections_in_progress
set t $elections_in_progress($i)
+ puts $t "replclose \$testdir/MSGQUEUEDIR"
puts $t "\$dbenv close"
close $t
unset elections_in_progress($i)
@@ -657,3 +756,75 @@ proc cleanup_elections { } {
set elect_serial 0
}
+
+#
+# This is essentially a copy of test001, but it only does the put/get
+# loop AND it takes an already-opened db handle.
+#
+proc rep_test { method env db {nentries 10000} {start 0} {skip 1} } {
+ source ./include.tcl
+
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ # If we are not using an external env, then test setting
+ # the database cache size and using multiple caches.
+ puts "\t\tRep_test: $method $nentries key/data pairs starting at $start"
+ set did [open $dict]
+
+ # The "start" variable determines the record number to start
+ # with, if we're using record numbers. The "skip" variable
+ # determines whether to start with the first entry in the
+ # dict file (if skip = 0) or skip over "start" entries (skip = 1).
+ # Skip is set to 1 to get different key/data pairs for
+ # different iterations of replication tests. Skip must be set
+ # to 0 if we're running a test that uses 10000 iterations,
+ # otherwise we run out of data to read in.
+
+ if { $skip == 1 } {
+ for { set count 0 } { $count < $start } { incr count } {
+ gets $did str
+ }
+ }
+ set pflags ""
+ set gflags ""
+ set txn ""
+
+ if { [is_record_based $method] == 1 } {
+ append gflags " -recno"
+ }
+ puts "\t\tRep_test.a: put/get loop"
+ # Here is the loop where we put and get each key/data pair
+ set count 0
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ global kvals
+
+ set key [expr $count + 1 + $start]
+ if { 0xffffffff > 0 && $key > 0xffffffff } {
+ set key [expr $key - 0x100000000]
+ }
+ if { $key == 0 || $key - 0xffffffff == 1 } {
+ incr key
+ incr count
+ }
+ set kvals($key) [pad_data $method $str]
+ } else {
+ set key $str
+ set str [reverse $str]
+ }
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set ret [eval \
+ {$db put} $txn $pflags {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ if { $count % 5 == 0 } {
+ error_check_good txn_checkpoint($count) \
+ [$env txn_checkpoint] 0
+ }
+ incr count
+ }
+ close $did
+}
diff --git a/db/test/rpc001.tcl b/db/test/rpc001.tcl
index 331a18cfb..5ce449f42 100644
--- a/db/test/rpc001.tcl
+++ b/db/test/rpc001.tcl
@@ -1,17 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: rpc001.tcl,v 11.23 2001/01/02 20:04:56 sue Exp $
-#
-# Test RPC specifics, primarily that unsupported functions return
-# errors and such.
+# $Id: rpc001.tcl,v 11.38 2003/09/19 16:53:25 sandstro Exp $
#
+# TEST rpc001
+# TEST Test RPC server timeouts for cursor, txn and env handles.
proc rpc001 { } {
global __debug_on
global __debug_print
global errorInfo
+ global rpc_svc
source ./include.tcl
#
@@ -20,234 +20,238 @@ proc rpc001 { } {
set ttime 5
set itime 10
puts "Rpc001: Server timeouts: resource $ttime sec, idle $itime sec"
- if { [string compare $rpc_server "localhost"] == 0 } {
- set dpid [exec $util_path/berkeley_db_svc \
- -h $rpc_testdir -t $ttime -I $itime &]
- } else {
- set dpid [exec rsh $rpc_server $rpc_path/berkeley_db_svc \
- -h $rpc_testdir -t $ttime -I $itime&]
- }
+ set dpid [rpc_server_start 0 30 "-t $ttime" "-I $itime"]
puts "\tRpc001.a: Started server, pid $dpid"
- tclsleep 2
- remote_cleanup $rpc_server $rpc_testdir $testdir
- puts "\tRpc001.b: Creating environment"
-
- set testfile "rpc001.db"
- set home [file tail $rpc_testdir]
+ #
+ # Wrap the whole test in a catch statement so we can still kill
+ # the rpc server even if the test fails.
+ #
+ set status [catch {
+ tclsleep 2
+ remote_cleanup $rpc_server $rpc_testdir $testdir
- set env [eval {berkdb env -create -mode 0644 -home $home \
- -server $rpc_server -client_timeout 10000 -txn}]
- error_check_good lock_env:open [is_valid_env $env] TRUE
+ puts "\tRpc001.b: Creating environment"
- puts "\tRpc001.c: Opening a database"
- #
- # NOTE: the type of database doesn't matter, just use btree.
- set db [eval {berkdb_open -create -btree -mode 0644} \
- -env $env $testfile]
- error_check_good dbopen [is_valid_db $db] TRUE
+ set testfile "rpc001.db"
+ set home [file tail $rpc_testdir]
- set curs_list {}
- set txn_list {}
- puts "\tRpc001.d: Basic timeout test"
- puts "\tRpc001.d1: Starting a transaction"
- set txn [$env txn]
- error_check_good txn_begin [is_valid_txn $txn $env] TRUE
- lappend txn_list $txn
-
- puts "\tRpc001.d2: Open a cursor in that transaction"
- set dbc [$db cursor -txn $txn]
- error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
- lappend curs_list $dbc
-
- puts "\tRpc001.d3: Duplicate that cursor"
- set dbc [$dbc dup]
- error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
- lappend curs_list $dbc
-
- puts "\tRpc001.d4: Starting a nested transaction"
- set txn [$env txn -parent $txn]
- error_check_good txn_begin [is_valid_txn $txn $env] TRUE
- set txn_list [linsert $txn_list 0 $txn]
-
- puts "\tRpc001.d5: Create a cursor, no transaction"
- set dbc [$db cursor]
- error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
- lappend curs_list $dbc
-
- puts "\tRpc001.d6: Timeout cursor and transactions"
- set sleeptime [expr $ttime + 2]
- tclsleep $sleeptime
+ set env [eval {berkdb_env -create -mode 0644 -home $home \
+ -server $rpc_server -client_timeout 10000 -txn}]
+ error_check_good lock_env:open [is_valid_env $env] TRUE
- #
- # Perform a generic db operations to cause the timeout routine
- # to trigger.
- #
- set stat [catch {$db stat} ret]
- error_check_good dbstat $stat 0
+ puts "\tRpc001.c: Opening a database"
+ #
+ # NOTE: the type of database doesn't matter, just use btree.
+ set db [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set curs_list {}
+ set txn_list {}
+ puts "\tRpc001.d: Basic timeout test"
+ puts "\tRpc001.d1: Starting a transaction"
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+ lappend txn_list $txn
- #
- # Check that every handle we opened above is timed out
- #
- foreach c $curs_list {
- set stat [catch {$c close} ret]
- error_check_good dbc_close:$c $stat 1
- error_check_good dbc_timeout:$c \
- [is_substr $errorInfo "DB_NOSERVER_ID"] 1
- }
- foreach t $txn_list {
- set stat [catch {$t commit} ret]
- error_check_good txn_commit:$t $stat 1
- error_check_good txn_timeout:$t \
- [is_substr $errorInfo "DB_NOSERVER_ID"] 1
- }
+ puts "\tRpc001.d2: Open a cursor in that transaction"
+ set dbc [$db cursor -txn $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ lappend curs_list $dbc
- set txn_list {}
- set ntxns 8
- puts "\tRpc001.e: Nested ($ntxns x $ntxns) transaction activity test"
- puts "\tRpc001.e1: Starting parent transaction"
- set txn [$env txn]
- error_check_good txn_begin [is_valid_txn $txn $env] TRUE
- set txn_list [linsert $txn_list 0 $txn]
- set last_txn $txn
- set parent_txn $txn
+ puts "\tRpc001.d3: Duplicate that cursor"
+ set dbc [$dbc dup]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ lappend curs_list $dbc
- #
- # First set a breadth of 'ntxns'
- # We need 2 from this set for testing later on. Just set them
- # up separately first.
- #
- puts "\tRpc001.e2: Creating $ntxns child transactions"
- set child0 [$env txn -parent $parent_txn]
- error_check_good txn_begin [is_valid_txn $child0 $env] TRUE
- set child1 [$env txn -parent $parent_txn]
- error_check_good txn_begin [is_valid_txn $child1 $env] TRUE
-
- for {set i 2} {$i < $ntxns} {incr i} {
- set txn [$env txn -parent $parent_txn]
+ puts "\tRpc001.d4: Starting a nested transaction"
+ set txn [$env txn -parent $txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
set txn_list [linsert $txn_list 0 $txn]
- }
- #
- # Now make one 'ntxns' deeply nested.
- # Add one more for testing later on separately.
- #
- puts "\tRpc001.e3: Creating $ntxns nested child transactions"
- for {set i 0} {$i < $ntxns} {incr i} {
- set txn [$env txn -parent $last_txn]
+ puts "\tRpc001.d5: Create a cursor, no transaction"
+ set dbc [$db cursor]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ lappend curs_list $dbc
+
+ puts "\tRpc001.d6: Timeout cursor and transactions"
+ set sleeptime [expr $ttime + 2]
+ tclsleep $sleeptime
+
+ #
+ # Perform a generic db operations to cause the timeout routine
+ # to trigger.
+ #
+ set stat [catch {$db stat} ret]
+ error_check_good dbstat $stat 0
+
+ #
+ # Check that every handle we opened above is timed out
+ #
+ foreach c $curs_list {
+ set stat [catch {$c close} ret]
+ error_check_good dbc_close:$c $stat 1
+ error_check_good dbc_timeout:$c \
+ [is_substr $errorInfo "DB_NOSERVER_ID"] 1
+ }
+ foreach t $txn_list {
+ set stat [catch {$t commit} ret]
+ error_check_good txn_commit:$t $stat 1
+ error_check_good txn_timeout:$t \
+ [is_substr $errorInfo "DB_NOSERVER_ID"] 1
+ }
+
+ set txn_list {}
+ set ntxns 8
+ puts "\tRpc001.e: Nested ($ntxns x $ntxns) txn activity test"
+ puts "\tRpc001.e1: Starting parent transaction"
+ set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
set txn_list [linsert $txn_list 0 $txn]
set last_txn $txn
- }
- set last_parent $last_txn
- set last_txn [$env txn -parent $last_parent]
- error_check_good txn_begin [is_valid_txn $last_txn $env] TRUE
+ set parent_txn $txn
- puts "\tRpc001.e4: Open a cursor in deepest transaction"
- set dbc [$db cursor -txn $last_txn]
- error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ #
+ # First set a breadth of 'ntxns'
+ # We need 2 from this set for testing later on. Just set them
+ # up separately first.
+ #
+ puts "\tRpc001.e2: Creating $ntxns child transactions"
+ set child0 [$env txn -parent $parent_txn]
+ error_check_good txn_begin [is_valid_txn $child0 $env] TRUE
+ set child1 [$env txn -parent $parent_txn]
+ error_check_good txn_begin [is_valid_txn $child1 $env] TRUE
- puts "\tRpc001.e5: Duplicate that cursor"
- set dbcdup [$dbc dup]
- error_check_good db_cursor [is_valid_cursor $dbcdup $db] TRUE
- lappend curs_list $dbcdup
+ for {set i 2} {$i < $ntxns} {incr i} {
+ set txn [$env txn -parent $parent_txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+ set txn_list [linsert $txn_list 0 $txn]
+ }
- puts "\tRpc001.f: Timeout then activate duplicate cursor"
- tclsleep $sleeptime
- set stat [catch {$dbcdup close} ret]
- error_check_good dup_close:$dbcdup $stat 0
- error_check_good dup_close:$dbcdup $ret 0
+ #
+ # Now make one 'ntxns' deeply nested.
+ # Add one more for testing later on separately.
+ #
+ puts "\tRpc001.e3: Creating $ntxns nested child transactions"
+ for {set i 0} {$i < $ntxns} {incr i} {
+ set txn [$env txn -parent $last_txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+ set txn_list [linsert $txn_list 0 $txn]
+ set last_txn $txn
+ }
+ set last_parent $last_txn
+ set last_txn [$env txn -parent $last_parent]
+ error_check_good txn_begin [is_valid_txn $last_txn $env] TRUE
- #
- # Make sure that our parent txn is not timed out. We will
- # try to begin another child tnx using the parent. We expect
- # that to succeed. Immediately commit that txn.
- #
- set stat [catch {$env txn -parent $parent_txn} newchild]
- error_check_good newchildtxn $stat 0
- error_check_good newcommit [$newchild commit] 0
+ puts "\tRpc001.e4: Open a cursor in deepest transaction"
+ set dbc [$db cursor -txn $last_txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
- puts "\tRpc001.g: Timeout, then activate cursor"
- tclsleep $sleeptime
- set stat [catch {$dbc close} ret]
- error_check_good dbc_close:$dbc $stat 0
- error_check_good dbc_close:$dbc $ret 0
+ puts "\tRpc001.e5: Duplicate that cursor"
+ set dbcdup [$dbc dup]
+ error_check_good db_cursor [is_valid_cursor $dbcdup $db] TRUE
+ lappend curs_list $dbcdup
- #
- # Make sure that our parent txn is not timed out. We will
- # try to begin another child tnx using the parent. We expect
- # that to succeed. Immediately commit that txn.
- #
- set stat [catch {$env txn -parent $parent_txn} newchild]
- error_check_good newchildtxn $stat 0
- error_check_good newcommit [$newchild commit] 0
+ puts "\tRpc001.f: Timeout then activate duplicate cursor"
+ tclsleep $sleeptime
+ set stat [catch {$dbcdup close} ret]
+ error_check_good dup_close:$dbcdup $stat 0
+ error_check_good dup_close:$dbcdup $ret 0
- puts "\tRpc001.h: Timeout, then activate child txn"
- tclsleep $sleeptime
- set stat [catch {$child0 commit} ret]
- error_check_good child_commit $stat 0
- error_check_good child_commit:$child0 $ret 0
+ #
+ # Make sure that our parent txn is not timed out. We will
+ # try to begin another child tnx using the parent. We expect
+ # that to succeed. Immediately commit that txn.
+ #
+ set stat [catch {$env txn -parent $parent_txn} newchild]
+ error_check_good newchildtxn $stat 0
+ error_check_good newcommit [$newchild commit] 0
- #
- #
- # Make sure that our nested txn is not timed out. We will
- # try to begin another child tnx using the parent. We expect
- # that to succeed. Immediately commit that txn.
- #
- set stat [catch {$env txn -parent $last_parent} newchild]
- error_check_good newchildtxn $stat 0
- error_check_good newcommit [$newchild commit] 0
+ puts "\tRpc001.g: Timeout, then activate cursor"
+ tclsleep $sleeptime
+ set stat [catch {$dbc close} ret]
+ error_check_good dbc_close:$dbc $stat 0
+ error_check_good dbc_close:$dbc $ret 0
+
+ #
+ # Make sure that our parent txn is not timed out. We will
+ # try to begin another child tnx using the parent. We expect
+ # that to succeed. Immediately commit that txn.
+ #
+ set stat [catch {$env txn -parent $parent_txn} newchild]
+ error_check_good newchildtxn $stat 0
+ error_check_good newcommit [$newchild commit] 0
- puts "\tRpc001.i: Timeout, then activate nested txn"
- tclsleep $sleeptime
- set stat [catch {$last_txn commit} ret]
- error_check_good lasttxn_commit $stat 0
- error_check_good lasttxn_commit:$child0 $ret 0
+ puts "\tRpc001.h: Timeout, then activate child txn"
+ tclsleep $sleeptime
+ set stat [catch {$child0 commit} ret]
+ error_check_good child_commit $stat 0
+ error_check_good child_commit:$child0 $ret 0
- #
- # Make sure that our child txn is not timed out. We should
- # be able to commit it.
- #
- set stat [catch {$child1 commit} ret]
- error_check_good child_commit:$child1 $stat 0
- error_check_good child_commit:$child1 $ret 0
+ #
+ #
+ # Make sure that our nested txn is not timed out. We will
+ # try to begin another child tnx using the parent. We expect
+ # that to succeed. Immediately commit that txn.
+ #
+ set stat [catch {$env txn -parent $last_parent} newchild]
+ error_check_good newchildtxn $stat 0
+ error_check_good newcommit [$newchild commit] 0
- #
- # Clean up. They were inserted in LIFO order, so we should
- # just be able to commit them all.
- foreach t $txn_list {
- set stat [catch {$t commit} ret]
- error_check_good txn_commit:$t $stat 0
- error_check_good txn_commit:$t $ret 0
- }
+ puts "\tRpc001.i: Timeout, then activate nested txn"
+ tclsleep $sleeptime
+ set stat [catch {$last_txn commit} ret]
+ error_check_good lasttxn_commit $stat 0
+ error_check_good lasttxn_commit:$child0 $ret 0
- set stat [catch {$db close} ret]
- error_check_good db_close $stat 0
+ #
+ # Make sure that our child txn is not timed out. We should
+ # be able to commit it.
+ #
+ set stat [catch {$child1 commit} ret]
+ error_check_good child_commit:$child1 $stat 0
+ error_check_good child_commit:$child1 $ret 0
- rpc_timeoutjoin $env "Rpc001.j" $sleeptime 0
- rpc_timeoutjoin $env "Rpc001.k" $sleeptime 1
+ #
+ # Clean up. They were inserted in LIFO order, so we should
+ # just be able to commit them all.
+ foreach t $txn_list {
+ set stat [catch {$t commit} ret]
+ error_check_good txn_commit:$t $stat 0
+ error_check_good txn_commit:$t $ret 0
+ }
- #
- # We need a 2nd env just to do an op to timeout the env.
- #
- set env1 [eval {berkdb env -create -mode 0644 -home $home \
- -server $rpc_server -client_timeout 10000 -txn}]
- error_check_good lock_env:open [is_valid_env $env1] TRUE
+ set stat [catch {$db close} ret]
+ error_check_good db_close $stat 0
- puts "\tRpc001.l: Timeout idle env handle"
- set sleeptime [expr $itime + 2]
- tclsleep $sleeptime
+ rpc_timeoutjoin $env "Rpc001.j" $sleeptime 0
+ rpc_timeoutjoin $env "Rpc001.k" $sleeptime 1
- set stat [catch {$env1 close} ret]
- error_check_good env1_close $stat 0
+ #
+ # We need a 2nd env just to do an op to timeout the env.
+ # Make the flags different so we don't end up sharing a handle.
+ #
+ set env1 [eval {berkdb_env -create -mode 0644 -home $home \
+ -server $rpc_server -client_timeout 10000}]
+ error_check_good lock_env:open [is_valid_env $env1] TRUE
+
+ puts "\tRpc001.l: Timeout idle env handle"
+ set sleeptime [expr $itime + 2]
+ tclsleep $sleeptime
- set stat [catch {$env close} ret]
- error_check_good env_close $stat 1
- error_check_good env_timeout \
- [is_substr $errorInfo "DB_NOSERVER_ID"] 1
+ set stat [catch {$env1 close} ret]
+ error_check_good env1_close $stat 0
- exec $KILL $dpid
+ set stat [catch {$env close} ret]
+ error_check_good env_close $stat 1
+ error_check_good env_timeout \
+ [is_substr $errorInfo "DB_NOSERVER_ID"] 1
+ } res]
+ if { $status != 0 } {
+ puts $res
+ }
+ tclkill $dpid
}
proc rpc_timeoutjoin {env msg sleeptime use_txn} {
@@ -257,8 +261,10 @@ proc rpc_timeoutjoin {env msg sleeptime use_txn} {
puts -nonewline "\t$msg: Test join cursors and timeouts"
if { $use_txn } {
puts " (using txns)"
+ set txnflag "-auto_commit"
} else {
puts " (without txns)"
+ set txnflag ""
}
#
# Set up a simple set of join databases
@@ -278,32 +284,32 @@ proc rpc_timeoutjoin {env msg sleeptime use_txn} {
{apple pie} {raspberry pie} {lemon pie}
}
set fdb [eval {berkdb_open -create -btree -mode 0644} \
- -env $env -dup fruit.db]
+ $txnflag -env $env -dup fruit.db]
error_check_good dbopen [is_valid_db $fdb] TRUE
set pdb [eval {berkdb_open -create -btree -mode 0644} \
- -env $env -dup price.db]
+ $txnflag -env $env -dup price.db]
error_check_good dbopen [is_valid_db $pdb] TRUE
set ddb [eval {berkdb_open -create -btree -mode 0644} \
- -env $env -dup dessert.db]
+ $txnflag -env $env -dup dessert.db]
error_check_good dbopen [is_valid_db $ddb] TRUE
foreach kd $fruit {
set k [lindex $kd 0]
set d [lindex $kd 1]
- set ret [$fdb put $k $d]
+ set ret [eval {$fdb put} $txnflag {$k $d}]
error_check_good fruit_put $ret 0
}
error_check_good sync [$fdb sync] 0
foreach kd $price {
set k [lindex $kd 0]
set d [lindex $kd 1]
- set ret [$pdb put $k $d]
+ set ret [eval {$pdb put} $txnflag {$k $d}]
error_check_good price_put $ret 0
}
error_check_good sync [$pdb sync] 0
foreach kd $dessert {
set k [lindex $kd 0]
set d [lindex $kd 1]
- set ret [$ddb put $k $d]
+ set ret [eval {$ddb put} $txnflag {$k $d}]
error_check_good dessert_put $ret 0
}
error_check_good sync [$ddb sync] 0
@@ -326,7 +332,7 @@ proc rpc_join {env msg sleep fdb pdb ddb use_txn op} {
#
set curs_list {}
set txn_list {}
- set msgnum [expr $op * 2 + 1]
+ set msgnum [expr $op * 2 + 1]
if { $use_txn } {
puts "\t$msg$msgnum: Set up txns and join cursor"
set txn [$env txn]
@@ -346,7 +352,7 @@ proc rpc_join {env msg sleep fdb pdb ddb use_txn op} {
#
# Start a cursor, (using txn child0 in the fruit and price dbs, if
- # needed). # Just pick something simple to join on.
+ # needed). # Just pick something simple to join on.
# Then call join on the dessert db.
#
set fkey yellow
@@ -372,7 +378,7 @@ proc rpc_join {env msg sleep fdb pdb ddb use_txn op} {
set ret [$jdbc get]
error_check_bad jget [llength $ret] 0
- set msgnum [expr $op * 2 + 2]
+ set msgnum [expr $op * 2 + 2]
if { $op == 1 } {
puts -nonewline "\t$msg$msgnum: Timeout all cursors"
if { $use_txn } {
diff --git a/db/test/rpc002.tcl b/db/test/rpc002.tcl
index 6b11914c2..5ec4b7748 100644
--- a/db/test/rpc002.tcl
+++ b/db/test/rpc002.tcl
@@ -1,16 +1,18 @@
-# See the file LICENSE for redistribution information.
+# Sel the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: rpc002.tcl,v 1.7 2000/10/27 13:23:56 sue Exp $
+# $Id: rpc002.tcl,v 1.23 2003/09/19 16:53:26 sandstro Exp $
#
-# RPC Test 2
-# Test invalid RPC functions and make sure we error them correctly
+# TEST rpc002
+# TEST Test invalid RPC functions and make sure we error them correctly
+# TEST Test server home directory error cases
proc rpc002 { } {
global __debug_on
global __debug_print
global errorInfo
+ global rpc_svc
source ./include.tcl
set testfile "rpc002.db"
@@ -18,127 +20,142 @@ proc rpc002 { } {
#
# First start the server.
#
- puts "Rpc002: Unsupported interface test"
- if { [string compare $rpc_server "localhost"] == 0 } {
- set dpid [exec $util_path/berkeley_db_svc -h $rpc_testdir &]
- } else {
- set dpid [exec rsh $rpc_server $rpc_path/berkeley_db_svc \
- -h $rpc_testdir &]
- }
+ puts "Rpc002: Error and Unsupported interface test"
+ set dpid [rpc_server_start]
puts "\tRpc002.a: Started server, pid $dpid"
- tclsleep 2
- remote_cleanup $rpc_server $rpc_testdir $testdir
- puts "\tRpc002.b: Unsupported env options"
#
- # Test each "pre-open" option for env's. These need to be
- # tested on the 'berkdb env' line.
+ # Wrap the whole test in a catch statement so we can still
+ # kill the rpc server even if the test fails.
#
- set rlist {
- { "-data_dir $rpc_testdir" "Rpc002.b0"}
- { "-log_buffer 512" "Rpc002.b1"}
- { "-log_dir $rpc_testdir" "Rpc002.b2"}
- { "-log_max 100" "Rpc002.b3"}
- { "-lock_conflict {3 {0 0 0 0 0 1 0 1 1}}" "Rpc002.b4"}
- { "-lock_detect default" "Rpc002.b5"}
- { "-lock_max 100" "Rpc002.b6"}
- { "-mmapsize 100" "Rpc002.b7"}
- { "-shm_key 100" "Rpc002.b9"}
- { "-tmp_dir $rpc_testdir" "Rpc002.b10"}
- { "-txn_max 100" "Rpc002.b11"}
- { "-txn_timestamp 100" "Rpc002.b12"}
- { "-verbose {recovery on}" "Rpc002.b13"}
- }
+ set status [catch {
+ tclsleep 2
+ remote_cleanup $rpc_server $rpc_testdir $testdir
- set e "berkdb env -create -mode 0644 -home $home -server $rpc_server \
- -client_timeout 10000 -txn"
- foreach pair $rlist {
- set cmd [lindex $pair 0]
- set msg [lindex $pair 1]
- puts "\t$msg: $cmd"
+ puts "\tRpc002.b: Unsupported env options"
+ #
+ # Test each "pre-open" option for env's. These need to be
+ # tested on the 'berkdb_env' line.
+ #
+ set rlist {
+ { "-data_dir $rpc_testdir" "Rpc002.b0"}
+ { "-log_buffer 512" "Rpc002.b1"}
+ { "-log_dir $rpc_testdir" "Rpc002.b2"}
+ { "-log_max 100" "Rpc002.b3"}
+ { "-lock_conflict {3 {0 0 0 0 0 1 0 1 1}}" "Rpc002.b4"}
+ { "-lock_detect default" "Rpc002.b5"}
+ { "-lock_max 100" "Rpc002.b6"}
+ { "-mmapsize 100" "Rpc002.b7"}
+ { "-shm_key 100" "Rpc002.b9"}
+ { "-tmp_dir $rpc_testdir" "Rpc002.b10"}
+ { "-txn_max 100" "Rpc002.b11"}
+ { "-txn_timestamp 100" "Rpc002.b12"}
+ { "-verbose {recovery on}" "Rpc002.b13"}
+ }
- set stat [catch {eval $e $cmd} ret]
- error_check_good $cmd $stat 1
- error_check_good $cmd.err \
- [is_substr $errorInfo "meaningless in RPC env"] 1
- }
+ set e "berkdb_env_noerr -create -mode 0644 -home $home \
+ -server $rpc_server -client_timeout 10000 -txn"
- #
- # Open an env with all the subsystems (-txn implies all
- # the rest)
- #
- puts "\tRpc002.c: Unsupported env related interfaces"
- set env [eval {berkdb env -create -mode 0644 -home $home \
- -server $rpc_server -client_timeout 10000 -txn}]
- error_check_good envopen [is_valid_env $env] TRUE
- set dbcmd "berkdb_open_noerr -create -btree -mode 0644 -env $env \
- $testfile"
- set db [eval $dbcmd]
- error_check_good dbopen [is_valid_db $db] TRUE
+ foreach pair $rlist {
+ set cmd [lindex $pair 0]
+ set msg [lindex $pair 1]
+ puts "\t$msg: $cmd"
- #
- # Test each "post-open" option relating to envs, txns, locks,
- # logs and mpools.
- #
- set rlist {
- { " lock_detect default" "Rpc002.c0"}
- { " lock_get read 1 $env" "Rpc002.c1"}
- { " lock_id" "Rpc002.c2"}
- { " lock_stat" "Rpc002.c3"}
- { " lock_vec 1 {get $env read}" "Rpc002.c4"}
- { " log_archive" "Rpc002.c5"}
- { " log_file {0 0}" "Rpc002.c6"}
- { " log_flush" "Rpc002.c7"}
- { " log_get -current" "Rpc002.c8"}
- { " log_register $db $testfile" "Rpc002.c9"}
- { " log_stat" "Rpc002.c10"}
- { " log_unregister $db" "Rpc002.c11"}
- { " mpool -create -pagesize 512" "Rpc002.c12"}
- { " mpool_stat" "Rpc002.c13"}
- { " mpool_sync {0 0}" "Rpc002.c14"}
- { " mpool_trickle 50" "Rpc002.c15"}
- { " txn_checkpoint -min 1" "Rpc002.c16"}
- { " txn_stat" "Rpc002.c17"}
- }
+ set stat [catch {eval $e $cmd} ret]
+ error_check_good $cmd $stat 1
+ error_check_good $cmd.err [is_substr $errorInfo \
+ "unsupported in RPC environments"] 1
+ }
- foreach pair $rlist {
- set cmd [lindex $pair 0]
- set msg [lindex $pair 1]
- puts "\t$msg: $cmd"
+ #
+ # Open an env with all the subsystems (-txn implies all
+ # the rest)
+ #
+ puts "\tRpc002.c: Unsupported env related interfaces"
+ set env [eval {berkdb_env_noerr -create -mode 0644 -home $home \
+ -server $rpc_server -client_timeout 10000 -txn}]
+ error_check_good envopen [is_valid_env $env] TRUE
+ set dbcmd "berkdb_open_noerr -create -btree -mode 0644 \
+ -env $env $testfile"
+ set db [eval $dbcmd]
+ error_check_good dbopen [is_valid_db $db] TRUE
- set stat [catch {eval $env $cmd} ret]
- error_check_good $cmd $stat 1
- error_check_good $cmd.err \
- [is_substr $errorInfo "meaningless in RPC env"] 1
- }
- error_check_good dbclose [$db close] 0
+ #
+ # Test each "post-open" option relating to envs, txns, locks,
+ # logs and mpools.
+ #
+ set rlist {
+ { " lock_detect default" "Rpc002.c0"}
+ { " lock_get read 1 $env" "Rpc002.c1"}
+ { " lock_id" "Rpc002.c2"}
+ { " lock_stat" "Rpc002.c3"}
+ { " lock_vec 1 {get $env read}" "Rpc002.c4"}
+ { " log_archive" "Rpc002.c5"}
+ { " log_file {0 0}" "Rpc002.c6"}
+ { " log_flush" "Rpc002.c7"}
+ { " log_cursor" "Rpc002.c8"}
+ { " log_stat" "Rpc002.c9"}
+ { " mpool -create -pagesize 512" "Rpc002.c10"}
+ { " mpool_stat" "Rpc002.c11"}
+ { " mpool_sync {0 0}" "Rpc002.c12"}
+ { " mpool_trickle 50" "Rpc002.c13"}
+ { " txn_checkpoint -min 1" "Rpc002.c14"}
+ { " txn_stat" "Rpc002.c15"}
+ }
- #
- # The database operations that aren't supported are few
- # because mostly they are the ones Tcl doesn't support
- # either so we have no way to get at them. Test what we can.
- #
- puts "\tRpc002.d: Unsupported database related interfaces"
- #
- # NOTE: the type of database doesn't matter, just use btree.
- #
- puts "\tRpc002.d0: -cachesize"
- set dbcmd "berkdb_open_noerr -create -btree -mode 0644 -env $env \
- -cachesize {0 65536 0} $testfile"
- set stat [catch {eval $dbcmd} ret]
- error_check_good dbopen_cache $stat 1
- error_check_good dbopen_cache_err \
- [is_substr $errorInfo "meaningless in RPC env"] 1
+ foreach pair $rlist {
+ set cmd [lindex $pair 0]
+ set msg [lindex $pair 1]
+ puts "\t$msg: $cmd"
- puts "\tRpc002.d1: Try to upgrade a database"
- #
- # NOTE: the type of database doesn't matter, just use btree.
- set stat [catch {eval {berkdb upgrade -env} $env $testfile} ret]
- error_check_good dbupgrade $stat 1
- error_check_good dbupgrade_err \
- [is_substr $errorInfo "meaningless in RPC env"] 1
+ set stat [catch {eval $env $cmd} ret]
+ error_check_good $cmd $stat 1
+ error_check_good $cmd.err [is_substr $errorInfo \
+ "unsupported in RPC environments"] 1
+ }
+ error_check_good dbclose [$db close] 0
+
+ #
+ # The database operations that aren't supported are few
+ # because mostly they are the ones Tcl doesn't support
+ # either so we have no way to get at them. Test what we can.
+ #
+ puts "\tRpc002.d: Unsupported database related interfaces"
+ #
+ # NOTE: the type of database doesn't matter, just use btree.
+ #
+ puts "\tRpc002.d0: -cachesize"
+ set dbcmd "berkdb_open_noerr -create -btree -mode 0644 \
+ -env $env -cachesize {0 65536 0} $testfile"
+ set stat [catch {eval $dbcmd} ret]
+ error_check_good dbopen_cache $stat 1
+ error_check_good dbopen_cache_err \
+ [is_substr $errorInfo "unsupported in RPC environments"] 1
- error_check_good envclose [$env close] 0
+ puts "\tRpc002.d1: Try to upgrade a database"
+ #
+ # NOTE: the type of database doesn't matter, just use btree.
+ set stat [catch {eval {berkdb upgrade -env} $env $testfile} ret]
+ error_check_good dbupgrade $stat 1
+ error_check_good dbupgrade_err [is_substr $errorInfo \
+ "unsupported in RPC environments"] 1
+ error_check_good envclose [$env close] 0
- exec $KILL $dpid
+ puts "\tRpc002.e: Open env with unsupported home dir"
+ set stat [catch {eval {berkdb_env_noerr -create -mode 0644 \
+ -home XXX -server $rpc_server -client_timeout 10000 \
+ -txn}} ret]
+ error_check_good env2open $stat 1
+ error_check_good envfail [is_substr $ret "Home unrecognized"] 1
+
+ puts "\tRpc002.f: Open env with a NULL home dir"
+ set stat [catch {eval {berkdb_env_noerr -create -mode 0644 \
+ -server $rpc_server -client_timeout 10000 -txn}} ret]
+ error_check_good env2open $stat 1
+ error_check_good envfail [is_substr $ret "Home unrecognized"] 1
+ } res]
+ if { $status != 0 } {
+ puts $res
+ }
+ tclkill $dpid
}
diff --git a/db/test/rpc003.tcl b/db/test/rpc003.tcl
index 9b462fa63..61c45f832 100644
--- a/db/test/rpc003.tcl
+++ b/db/test/rpc003.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rpc003.tcl,v 11.9 2002/07/16 20:53:03 bostic Exp
+# $Id: rpc003.tcl,v 11.14 2003/09/19 16:53:26 sandstro Exp $
#
-# Test RPC and secondary indices.
+# TEST rpc003
+# TEST Test RPC and secondary indices.
proc rpc003 { } {
source ./include.tcl
global dict nsecondaries
@@ -85,63 +86,74 @@ proc rpc003 { } {
# We have set up our databases, so now start the server and
# read them over RPC.
#
- set dpid [exec $util_path/$rpc_svc -h $rpc_testdir &]
+ set dpid [rpc_server_start]
puts "\tRpc003.c: Started server, pid $dpid"
- tclsleep 2
-
- set home [file tail $rpc_testdir]
- set env [eval {berkdb_env_noerr -create -mode 0644 -home $home \
- -server $rpc_server}]
- error_check_good lock_env:open [is_valid_env $env] TRUE
#
- # Attempt to send in a NULL callback to associate. It will fail
- # if the primary and secondary are not both read-only.
+ # Wrap the remainder of the test in a catch statement so we
+ # can still kill the rpc server even if the test fails.
#
- set msg "\tRpc003.d"
- puts "$msg: Using r/w primary and r/w secondary"
- set popen "berkdb_open_noerr -env $env $pomethod $pargs $pname"
- set sopen "berkdb_open_noerr -create -env $env \
- [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
- rpc003_assoc_err $popen $sopen $msg
-
- set msg "\tRpc003.e"
- puts "$msg: Using r/w primary and read-only secondary"
- set popen "berkdb_open_noerr -env $env $pomethod $pargs $pname"
- set sopen "berkdb_open_noerr -env $env -rdonly \
- [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
- rpc003_assoc_err $popen $sopen $msg
-
- set msg "\tRpc003.f"
- puts "$msg: Using read-only primary and r/w secondary"
- set popen "berkdb_open_noerr -env $env $pomethod -rdonly $pargs $pname"
- set sopen "berkdb_open_noerr -create -env $env \
- [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
- rpc003_assoc_err $popen $sopen $msg
-
- # Open and associate the secondaries
- puts "\tRpc003.g: Checking secondaries, both read-only"
- set pdb [eval {berkdb_open_noerr -env} $env \
- -rdonly $pomethod $pargs $pname]
- error_check_good primary_open2 [is_valid_db $pdb] TRUE
-
- set sdbs {}
- for { set i 0 } { $i < [llength $omethods] } { incr i } {
- set sdb [eval {berkdb_open -env} $env -rdonly \
- [lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
- error_check_good second_open2($i) [is_valid_db $sdb] TRUE
- error_check_good db_associate2($i) \
- [eval {$pdb associate} "" $sdb] 0
- lappend sdbs $sdb
- }
- check_secondaries $pdb $sdbs $nentries keys data "Rpc003.h"
+ set status [catch {
+ tclsleep 2
+ set home [file tail $rpc_testdir]
+ set env [eval {berkdb_env_noerr -create -mode 0644 \
+ -home $home -server $rpc_server}]
+ error_check_good lock_env:open [is_valid_env $env] TRUE
+
+ #
+ # Attempt to send in a NULL callback to associate. It will
+ # fail if the primary and secondary are not both read-only.
+ #
+ set msg "\tRpc003.d"
+ puts "$msg: Using r/w primary and r/w secondary"
+ set popen "berkdb_open_noerr -env $env $pomethod $pargs $pname"
+ set sopen "berkdb_open_noerr -create -env $env \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
+ rpc003_assoc_err $popen $sopen $msg
+
+ set msg "\tRpc003.e"
+ puts "$msg: Using r/w primary and read-only secondary"
+ set popen "berkdb_open_noerr -env $env $pomethod $pargs $pname"
+ set sopen "berkdb_open_noerr -env $env -rdonly \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
+ rpc003_assoc_err $popen $sopen $msg
+
+ set msg "\tRpc003.f"
+ puts "$msg: Using read-only primary and r/w secondary"
+ set popen "berkdb_open_noerr -env $env \
+ $pomethod -rdonly $pargs $pname"
+ set sopen "berkdb_open_noerr -create -env $env \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db"
+ rpc003_assoc_err $popen $sopen $msg
+
+ # Open and associate the secondaries
+ puts "\tRpc003.g: Checking secondaries, both read-only"
+ set pdb [eval {berkdb_open_noerr -env} $env \
+ -rdonly $pomethod $pargs $pname]
+ error_check_good primary_open2 [is_valid_db $pdb] TRUE
+
+ set sdbs {}
+ for { set i 0 } { $i < [llength $omethods] } { incr i } {
+ set sdb [eval {berkdb_open -env} $env -rdonly \
+ [lindex $omethods $i] [lindex $argses $i] \
+ $snamebase.$i.db]
+ error_check_good second_open2($i) \
+ [is_valid_db $sdb] TRUE
+ error_check_good db_associate2($i) \
+ [eval {$pdb associate} "" $sdb] 0
+ lappend sdbs $sdb
+ }
+ check_secondaries $pdb $sdbs $nentries keys data "Rpc003.h"
- foreach sdb $sdbs {
- error_check_good secondary_close [$sdb close] 0
+ foreach sdb $sdbs {
+ error_check_good secondary_close [$sdb close] 0
+ }
+ error_check_good primary_close [$pdb close] 0
+ error_check_good env_close [$env close] 0
+ } res]
+ if { $status != 0 } {
+ puts $res
}
- error_check_good primary_close [$pdb close] 0
- error_check_good env_close [$env close] 0
-
tclkill $dpid
}
diff --git a/db/test/rpc004.tcl b/db/test/rpc004.tcl
index 563b61e98..6bdf227f4 100644
--- a/db/test/rpc004.tcl
+++ b/db/test/rpc004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rpc004.tcl,v 11.6 2002/07/16 20:53:03 bostic Exp
+# $Id: rpc004.tcl,v 11.11 2003/09/19 16:53:26 sandstro Exp $
#
# TEST rpc004
# TEST Test RPC server and security
@@ -12,65 +12,76 @@ proc rpc004 { } {
global __debug_print
global errorInfo
global passwd
+ global has_crypto
global rpc_svc
source ./include.tcl
puts "Rpc004: RPC server + security"
- cleanup $testdir NULL
- if { [string compare $rpc_server "localhost"] == 0 } {
- set dpid [exec $util_path/$rpc_svc \
- -h $rpc_testdir -P $passwd &]
- } else {
- set dpid [exec rsh $rpc_server $rpc_path/$rpc_svc \
- -h $rpc_testdir -P $passwd &]
+ # Skip test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ puts "Skipping test rpc004 for non-crypto release."
+ return
}
+
+ cleanup $testdir NULL
+ set dpid [rpc_server_start 1]
puts "\tRpc004.a: Started server, pid $dpid"
- tclsleep 2
- remote_cleanup $rpc_server $rpc_testdir $testdir
- puts "\tRpc004.b: Creating environment"
+ #
+ # Wrap the test in a catch statement so we can still kill
+ # the rpc server even if the test fails.
+ #
+ set status [catch {
+ tclsleep 2
+ remote_cleanup $rpc_server $rpc_testdir $testdir
+
+ puts "\tRpc004.b: Creating environment"
- set testfile "rpc004.db"
- set testfile1 "rpc004a.db"
- set home [file tail $rpc_testdir]
+ set testfile "rpc004.db"
+ set testfile1 "rpc004a.db"
+ set home [file tail $rpc_testdir]
- set env [eval {berkdb_env -create -mode 0644 -home $home \
- -server $rpc_server -encryptaes $passwd -txn}]
- error_check_good lock_env:open [is_valid_env $env] TRUE
+ set env [eval {berkdb_env -create -mode 0644 -home $home \
+ -server $rpc_server -encryptaes $passwd -txn}]
+ error_check_good lock_env:open [is_valid_env $env] TRUE
- puts "\tRpc004.c: Opening a non-encrypted database"
- #
- # NOTE: the type of database doesn't matter, just use btree.
- set db [eval {berkdb_open -auto_commit -create -btree -mode 0644} \
- -env $env $testfile]
- error_check_good dbopen [is_valid_db $db] TRUE
+ puts "\tRpc004.c: Opening a non-encrypted database"
+ #
+ # NOTE: the type of database doesn't matter, just use btree.
+ set db [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
- puts "\tRpc004.d: Opening an encrypted database"
- set db1 [eval {berkdb_open -auto_commit -create -btree -mode 0644} \
- -env $env -encrypt $testfile1]
- error_check_good dbopen [is_valid_db $db1] TRUE
+ puts "\tRpc004.d: Opening an encrypted database"
+ set db1 [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env -encrypt $testfile1]
+ error_check_good dbopen [is_valid_db $db1] TRUE
- set txn [$env txn]
- error_check_good txn [is_valid_txn $txn $env] TRUE
- puts "\tRpc004.e: Put/get on both databases"
- set key "key"
- set data "data"
+ set txn [$env txn]
+ error_check_good txn [is_valid_txn $txn $env] TRUE
+ puts "\tRpc004.e: Put/get on both databases"
+ set key "key"
+ set data "data"
- set ret [$db put -txn $txn $key $data]
- error_check_good db_put $ret 0
- set ret [$db get -txn $txn $key]
- error_check_good db_get $ret [list [list $key $data]]
- set ret [$db1 put -txn $txn $key $data]
- error_check_good db1_put $ret 0
- set ret [$db1 get -txn $txn $key]
- error_check_good db1_get $ret [list [list $key $data]]
+ set ret [$db put -txn $txn $key $data]
+ error_check_good db_put $ret 0
+ set ret [$db get -txn $txn $key]
+ error_check_good db_get $ret [list [list $key $data]]
+ set ret [$db1 put -txn $txn $key $data]
+ error_check_good db1_put $ret 0
+ set ret [$db1 get -txn $txn $key]
+ error_check_good db1_get $ret [list [list $key $data]]
- error_check_good txn_commit [$txn commit] 0
- error_check_good db_close [$db close] 0
- error_check_good db1_close [$db1 close] 0
- error_check_good env_close [$env close] 0
+ error_check_good txn_commit [$txn commit] 0
+ error_check_good db_close [$db close] 0
+ error_check_good db1_close [$db1 close] 0
+ error_check_good env_close [$env close] 0
- # Cleanup our environment because it's encrypted
- remote_cleanup $rpc_server $rpc_testdir $testdir
+ # Cleanup our environment because it's encrypted
+ remote_cleanup $rpc_server $rpc_testdir $testdir
+ } res]
+ if { $status != 0 } {
+ puts $res
+ }
tclkill $dpid
}
diff --git a/db/test/rpc005.tcl b/db/test/rpc005.tcl
index da6226e16..6cf0938b0 100644
--- a/db/test/rpc005.tcl
+++ b/db/test/rpc005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rpc005.tcl,v 11.4 2002/07/16 20:53:03 bostic Exp
+# $Id: rpc005.tcl,v 11.8 2003/09/19 16:53:26 sandstro Exp $
#
# TEST rpc005
# TEST Test RPC server handle ID sharing
@@ -15,123 +15,133 @@ proc rpc005 { } {
source ./include.tcl
puts "Rpc005: RPC server handle sharing"
- if { [string compare $rpc_server "localhost"] == 0 } {
- set dpid [exec $util_path/$rpc_svc \
- -h $rpc_testdir &]
- } else {
- set dpid [exec rsh $rpc_server $rpc_path/$rpc_svc \
- -h $rpc_testdir &]
- }
+ set dpid [rpc_server_start]
puts "\tRpc005.a: Started server, pid $dpid"
- tclsleep 2
- remote_cleanup $rpc_server $rpc_testdir $testdir
- puts "\tRpc005.b: Creating environment"
-
- set testfile "rpc005.db"
- set testfile1 "rpc005a.db"
- set subdb1 "subdb1"
- set subdb2 "subdb2"
- set home [file tail $rpc_testdir]
-
- set env [eval {berkdb_env -create -mode 0644 -home $home \
- -server $rpc_server -txn}]
- error_check_good lock_env:open [is_valid_env $env] TRUE
-
- puts "\tRpc005.c: Compare identical and different configured envs"
- set env_ident [eval {berkdb_env -home $home \
- -server $rpc_server -txn}]
- error_check_good lock_env:open [is_valid_env $env_ident] TRUE
-
- set env_diff [eval {berkdb_env -home $home \
- -server $rpc_server -txn nosync}]
- error_check_good lock_env:open [is_valid_env $env_diff] TRUE
-
- error_check_good ident:id [$env rpcid] [$env_ident rpcid]
- error_check_bad diff:id [$env rpcid] [$env_diff rpcid]
-
- error_check_good envclose [$env_diff close] 0
- error_check_good envclose [$env_ident close] 0
-
- puts "\tRpc005.d: Opening a database"
- set db [eval {berkdb_open -auto_commit -create -btree -mode 0644} \
- -env $env $testfile]
- error_check_good dbopen [is_valid_db $db] TRUE
-
- puts "\tRpc005.e: Compare identical and different configured dbs"
- set db_ident [eval {berkdb_open -btree} -env $env $testfile]
- error_check_good dbopen [is_valid_db $db_ident] TRUE
-
- set db_diff [eval {berkdb_open -btree} -env $env -rdonly $testfile]
- error_check_good dbopen [is_valid_db $db_diff] TRUE
-
- set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly $testfile]
- error_check_good dbopen [is_valid_db $db_diff2] TRUE
-
- error_check_good ident:id [$db rpcid] [$db_ident rpcid]
- error_check_bad diff:id [$db rpcid] [$db_diff rpcid]
- error_check_good ident2:id [$db_diff rpcid] [$db_diff2 rpcid]
-
- error_check_good db_close [$db_ident close] 0
- error_check_good db_close [$db_diff close] 0
- error_check_good db_close [$db_diff2 close] 0
- error_check_good db_close [$db close] 0
-
- puts "\tRpc005.f: Compare with a database and subdatabases"
- set db [eval {berkdb_open -auto_commit -create -btree -mode 0644} \
- -env $env $testfile1 $subdb1]
- error_check_good dbopen [is_valid_db $db] TRUE
- set dbid [$db rpcid]
-
- set db2 [eval {berkdb_open -auto_commit -create -btree -mode 0644} \
- -env $env $testfile1 $subdb2]
- error_check_good dbopen [is_valid_db $db2] TRUE
- set db2id [$db2 rpcid]
- error_check_bad 2subdb:id $dbid $db2id
-
- set db_ident [eval {berkdb_open -btree} -env $env $testfile1 $subdb1]
- error_check_good dbopen [is_valid_db $db_ident] TRUE
- set identid [$db_ident rpcid]
-
- set db_ident2 [eval {berkdb_open -btree} -env $env $testfile1 $subdb2]
- error_check_good dbopen [is_valid_db $db_ident2] TRUE
- set ident2id [$db_ident2 rpcid]
-
- set db_diff1 [eval {berkdb_open -btree} -env $env -rdonly \
- $testfile1 $subdb1]
- error_check_good dbopen [is_valid_db $db_diff1] TRUE
- set diff1id [$db_diff1 rpcid]
-
- set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly \
- $testfile1 $subdb2]
- error_check_good dbopen [is_valid_db $db_diff2] TRUE
- set diff2id [$db_diff2 rpcid]
-
- set db_diff [eval {berkdb_open -unknown} -env $env -rdonly $testfile1]
- error_check_good dbopen [is_valid_db $db_diff] TRUE
- set diffid [$db_diff rpcid]
-
- set db_diff2a [eval {berkdb_open -btree} -env $env -rdonly \
- $testfile1 $subdb2]
- error_check_good dbopen [is_valid_db $db_diff2a] TRUE
- set diff2aid [$db_diff2a rpcid]
-
- error_check_good ident:id $dbid $identid
- error_check_good ident2:id $db2id $ident2id
- error_check_bad diff:id $dbid $diffid
- error_check_bad diff2:id $db2id $diffid
- error_check_bad diff3:id $diff2id $diffid
- error_check_bad diff4:id $diff1id $diffid
- error_check_good diff2a:id $diff2id $diff2aid
-
- error_check_good db_close [$db_ident close] 0
- error_check_good db_close [$db_ident2 close] 0
- error_check_good db_close [$db_diff close] 0
- error_check_good db_close [$db_diff1 close] 0
- error_check_good db_close [$db_diff2 close] 0
- error_check_good db_close [$db_diff2a close] 0
- error_check_good db_close [$db2 close] 0
- error_check_good db_close [$db close] 0
- error_check_good env_close [$env close] 0
+ #
+ # Wrap the test in a catch statement so we can still kill
+ # the rpc server even if the test fails.
+ #
+ set status [catch {
+ tclsleep 2
+ remote_cleanup $rpc_server $rpc_testdir $testdir
+ puts "\tRpc005.b: Creating environment"
+
+ set testfile "rpc005.db"
+ set testfile1 "rpc005a.db"
+ set subdb1 "subdb1"
+ set subdb2 "subdb2"
+ set home [file tail $rpc_testdir]
+
+ set env [eval {berkdb_env -create -mode 0644 -home $home \
+ -server $rpc_server -txn}]
+ error_check_good lock_env:open [is_valid_env $env] TRUE
+
+ puts "\tRpc005.c: Compare identical and different \
+ configured envs"
+ set env_ident [eval {berkdb_env -home $home \
+ -server $rpc_server -txn}]
+ error_check_good lock_env:open [is_valid_env $env_ident] TRUE
+
+ set env_diff [eval {berkdb_env -home $home \
+ -server $rpc_server -txn nosync}]
+ error_check_good lock_env:open [is_valid_env $env_diff] TRUE
+
+ error_check_good ident:id [$env rpcid] [$env_ident rpcid]
+ error_check_bad diff:id [$env rpcid] [$env_diff rpcid]
+
+ error_check_good envclose [$env_diff close] 0
+ error_check_good envclose [$env_ident close] 0
+
+ puts "\tRpc005.d: Opening a database"
+ set db [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ puts "\tRpc005.e: Compare identical and different \
+ configured dbs"
+ set db_ident [eval {berkdb_open -btree} -env $env $testfile]
+ error_check_good dbopen [is_valid_db $db_ident] TRUE
+
+ set db_diff [eval {berkdb_open -btree} -env $env -rdonly \
+ $testfile]
+ error_check_good dbopen [is_valid_db $db_diff] TRUE
+
+ set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly \
+ $testfile]
+ error_check_good dbopen [is_valid_db $db_diff2] TRUE
+
+ error_check_good ident:id [$db rpcid] [$db_ident rpcid]
+ error_check_bad diff:id [$db rpcid] [$db_diff rpcid]
+ error_check_good ident2:id [$db_diff rpcid] [$db_diff2 rpcid]
+
+ error_check_good db_close [$db_ident close] 0
+ error_check_good db_close [$db_diff close] 0
+ error_check_good db_close [$db_diff2 close] 0
+ error_check_good db_close [$db close] 0
+
+ puts "\tRpc005.f: Compare with a database and subdatabases"
+ set db [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env $testfile1 $subdb1]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set dbid [$db rpcid]
+
+ set db2 [eval {berkdb_open -auto_commit -create -btree \
+ -mode 0644} -env $env $testfile1 $subdb2]
+ error_check_good dbopen [is_valid_db $db2] TRUE
+ set db2id [$db2 rpcid]
+ error_check_bad 2subdb:id $dbid $db2id
+
+ set db_ident [eval {berkdb_open -btree} -env $env \
+ $testfile1 $subdb1]
+ error_check_good dbopen [is_valid_db $db_ident] TRUE
+ set identid [$db_ident rpcid]
+
+ set db_ident2 [eval {berkdb_open -btree} -env $env \
+ $testfile1 $subdb2]
+ error_check_good dbopen [is_valid_db $db_ident2] TRUE
+ set ident2id [$db_ident2 rpcid]
+
+ set db_diff1 [eval {berkdb_open -btree} -env $env -rdonly \
+ $testfile1 $subdb1]
+ error_check_good dbopen [is_valid_db $db_diff1] TRUE
+ set diff1id [$db_diff1 rpcid]
+
+ set db_diff2 [eval {berkdb_open -btree} -env $env -rdonly \
+ $testfile1 $subdb2]
+ error_check_good dbopen [is_valid_db $db_diff2] TRUE
+ set diff2id [$db_diff2 rpcid]
+
+ set db_diff [eval {berkdb_open -unknown} -env $env -rdonly \
+ $testfile1]
+ error_check_good dbopen [is_valid_db $db_diff] TRUE
+ set diffid [$db_diff rpcid]
+
+ set db_diff2a [eval {berkdb_open -btree} -env $env -rdonly \
+ $testfile1 $subdb2]
+ error_check_good dbopen [is_valid_db $db_diff2a] TRUE
+ set diff2aid [$db_diff2a rpcid]
+
+ error_check_good ident:id $dbid $identid
+ error_check_good ident2:id $db2id $ident2id
+ error_check_bad diff:id $dbid $diffid
+ error_check_bad diff2:id $db2id $diffid
+ error_check_bad diff3:id $diff2id $diffid
+ error_check_bad diff4:id $diff1id $diffid
+ error_check_good diff2a:id $diff2id $diff2aid
+
+ error_check_good db_close [$db_ident close] 0
+ error_check_good db_close [$db_ident2 close] 0
+ error_check_good db_close [$db_diff close] 0
+ error_check_good db_close [$db_diff1 close] 0
+ error_check_good db_close [$db_diff2 close] 0
+ error_check_good db_close [$db_diff2a close] 0
+ error_check_good db_close [$db2 close] 0
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+ } res]
+ if { $status != 0 } {
+ puts $res
+ }
tclkill $dpid
}
diff --git a/db/test/rsrc001.tcl b/db/test/rsrc001.tcl
index 6d76044f4..704c765ee 100644
--- a/db/test/rsrc001.tcl
+++ b/db/test/rsrc001.tcl
@@ -1,13 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: rsrc001.tcl,v 11.18 2001/01/18 06:41:03 krinsky Exp $
+# $Id: rsrc001.tcl,v 11.24 2003/01/08 05:52:43 bostic Exp $
#
-# Recno backing file test.
-# Try different patterns of adding records and making sure that the
-# corresponding file matches
+# TEST rsrc001
+# TEST Recno backing file test. Try different patterns of adding
+# TEST records and making sure that the corresponding file matches.
proc rsrc001 { } {
source ./include.tcl
@@ -47,7 +47,7 @@ proc rsrc001 { } {
# Now fill out the backing file and create the check file.
set oid1 [open $testdir/rsrc.txt a]
set oid2 [open $testdir/check.txt w]
-
+
# This one was already put into rsrc.txt.
puts $oid2 $rec1
@@ -154,15 +154,15 @@ proc rsrc001 { } {
set rec "Last record with reopen"
puts $oid $rec
- incr key
+ incr key
set ret [eval {$db put} $txn {$key $rec}]
error_check_good put_byno_with_reopen $ret 0
puts "\tRsrc001.g:\
- Put several beyond end of file, after reopen."
+ Put several beyond end of file, after reopen with snapshot."
error_check_good db_close [$db close] 0
set db [eval {berkdb_open -create -mode 0644\
- -recno -source $testdir/rsrc.txt} $testfile]
+ -snapshot -recno -source $testdir/rsrc.txt} $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set rec "Really really last record with reopen"
@@ -171,7 +171,7 @@ proc rsrc001 { } {
puts $oid ""
puts $oid $rec
- incr key
+ incr key
incr key
incr key
incr key
@@ -179,8 +179,6 @@ proc rsrc001 { } {
set ret [eval {$db put} $txn {$key $rec}]
error_check_good put_byno_with_reopen $ret 0
-
-
error_check_good db_sync [$db sync] 0
error_check_good db_sync [$db sync] 0
diff --git a/db/test/rsrc002.tcl b/db/test/rsrc002.tcl
index d3b45c9a7..908083333 100644
--- a/db/test/rsrc002.tcl
+++ b/db/test/rsrc002.tcl
@@ -1,13 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: rsrc002.tcl,v 11.11 2000/11/29 15:01:06 sue Exp $
+# $Id: rsrc002.tcl,v 11.15 2003/01/08 05:52:45 bostic Exp $
#
-# Recno backing file test #2: test of set_re_delim.
-# Specify a backing file with colon-delimited records,
-# and make sure they are correctly interpreted.
+# TEST rsrc002
+# TEST Recno backing file test #2: test of set_re_delim. Specify a backing
+# TEST file with colon-delimited records, and make sure they are correctly
+# TEST interpreted.
proc rsrc002 { } {
source ./include.tcl
diff --git a/db/test/rsrc003.tcl b/db/test/rsrc003.tcl
index c93b3bbde..2aee9db11 100644
--- a/db/test/rsrc003.tcl
+++ b/db/test/rsrc003.tcl
@@ -1,13 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: rsrc003.tcl,v 11.1 2000/11/29 18:28:49 sue Exp $
+# $Id: rsrc003.tcl,v 11.6 2003/01/08 05:52:47 bostic Exp $
#
-# Recno backing file test.
-# Try different patterns of adding records and making sure that the
-# corresponding file matches
+# TEST rsrc003
+# TEST Recno backing file test. Try different patterns of adding
+# TEST records and making sure that the corresponding file matches.
proc rsrc003 { } {
source ./include.tcl
global fixed_len
@@ -26,7 +26,7 @@ proc rsrc003 { } {
set bigrec3 [replicate "This is record 3 " 512]
set orig_fixed_len $fixed_len
- set rlist {
+ set rlist {
{{$rec1 $rec2 $rec3} "small records" }
{{$bigrec1 $bigrec2 $bigrec3} "large records" }}
@@ -65,26 +65,26 @@ proc rsrc003 { } {
puts \
"Rsrc003: Testing with disk-backed database with $msg."
}
-
+
puts -nonewline \
"\tRsrc003.a: Read file, rewrite last record;"
puts " write it out and diff"
set db [eval {berkdb_open -create -mode 0644 -recno \
-len $reclen -source $testdir/rsrc.txt} $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
-
+
# Read the last record; replace it (don't change it).
# Then close the file and diff the two files.
set txn ""
set dbc [eval {$db cursor} $txn]
error_check_good db_cursor \
[is_valid_cursor $dbc $db] TRUE
-
+
set rec [$dbc get -last]
error_check_good get_last [llength [lindex $rec 0]] 2
set key [lindex [lindex $rec 0] 0]
set data [lindex [lindex $rec 0] 1]
-
+
# Get the last record from the text file
set oid [open $testdir/rsrc.txt]
set laststr ""
@@ -95,17 +95,17 @@ proc rsrc003 { } {
close $oid
set data [sanitize_record $data]
error_check_good getlast $data $laststr
-
+
set ret [eval {$db put} $txn {$key $data}]
error_check_good replace_last $ret 0
-
+
error_check_good curs_close [$dbc close] 0
error_check_good db_sync [$db sync] 0
error_check_good db_sync [$db sync] 0
error_check_good \
diff1($testdir/rsrc.txt,$testdir/check.txt) \
[filecmp $testdir/rsrc.txt $testdir/check.txt] 0
-
+
puts -nonewline "\tRsrc003.b: "
puts "Append some records in tree and verify in file."
set oid [open $testdir/check.txt a]
@@ -124,7 +124,7 @@ proc rsrc003 { } {
set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
error_check_good \
diff2($testdir/{rsrc.txt,check.txt}) $ret 0
-
+
puts "\tRsrc003.c: Append by record number"
set oid [open $testdir/check.txt a]
for {set i 1} {$i < 10} {incr i} {
@@ -136,14 +136,14 @@ proc rsrc003 { } {
set ret [eval {$db put} $txn {$key $rec}]
error_check_good put_byno $ret 0
}
-
+
error_check_good db_sync [$db sync] 0
error_check_good db_sync [$db sync] 0
close $oid
set ret [filecmp $testdir/rsrc.txt $testdir/check.txt]
error_check_good \
diff3($testdir/{rsrc.txt,check.txt}) $ret 0
-
+
puts \
"\tRsrc003.d: Verify proper syncing of changes on close."
error_check_good Rsrc003:db_close [$db close] 0
@@ -171,4 +171,3 @@ proc rsrc003 { } {
set fixed_len $orig_fixed_len
return
}
-
diff --git a/db/test/rsrc004.tcl b/db/test/rsrc004.tcl
index 1ee3d836d..d391cac0a 100644
--- a/db/test/rsrc004.tcl
+++ b/db/test/rsrc004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: rsrc004.tcl,v 11.3 2002/01/11 15:53:33 bostic Exp
+# $Id: rsrc004.tcl,v 11.4 2003/01/08 05:52:49 bostic Exp $
#
# TEST rsrc004
# TEST Recno backing file test for EOF-terminated records.
diff --git a/db/test/scr001/chk.code b/db/test/scr001/chk.code
index f520491cd..af1af5ab3 100644
--- a/db/test/scr001/chk.code
+++ b/db/test/scr001/chk.code
@@ -1,12 +1,12 @@
#!/bin/sh -
#
-# Id: chk.code,v 1.10 2002/02/04 16:03:26 bostic Exp
+# $Id: chk.code,v 1.13 2003/11/21 02:10:42 bostic Exp $
#
# Check to make sure that the code samples in the documents build.
-d=../..
+d=../../../db.docs
-[ -d $d/docs_src ] || {
+[ -d $d ] || {
echo 'FAIL: cannot find source distribution directory.'
exit 1
}
@@ -15,7 +15,8 @@ d=../..
exit 1
}
-for i in `find $d/docs_src -name '*.cs'`; do
+exitv=0
+for i in `find $d -name '*.cs'`; do
echo " compiling $i"
sed -e 's/m4_include(\(.*\))/#include <\1>/g' \
-e 's/m4_[a-z]*[(\[)]*//g' \
@@ -26,12 +27,12 @@ for i in `find $d/docs_src -name '*.cs'`; do
-e 's/__LB__/[/g' \
-e 's/__LT__/</g' \
-e 's/__RB__/]/g' < $i > t.c
- if cc -Wall -Werror -I.. t.c ../libdb.a -o t; then
+ if cc -pthread -Wall -Werror -I.. t.c ../libdb.a -o t; then
:
else
echo "FAIL: unable to compile $i"
- exit 1
+ exitv=1
fi
done
-exit 0
+exit $exitv
diff --git a/db/test/scr002/chk.def b/db/test/scr002/chk.def
index 2a8a88c44..7d5e6670f 100644
--- a/db/test/scr002/chk.def
+++ b/db/test/scr002/chk.def
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.def,v 1.9 2002/03/27 04:32:57 bostic Exp
+# $Id: chk.def,v 1.9 2002/03/27 04:32:57 bostic Exp $
#
# Check to make sure we haven't forgotten to add any interfaces
# to the Win32 libdb.def file.
diff --git a/db/test/scr003/chk.define b/db/test/scr003/chk.define
index b4c4e4b10..9645470b1 100644
--- a/db/test/scr003/chk.define
+++ b/db/test/scr003/chk.define
@@ -1,8 +1,9 @@
#!/bin/sh -
#
-# Id: chk.define,v 1.21 2002/03/27 04:32:58 bostic Exp
+# $Id: chk.define,v 1.23 2003/06/30 14:22:57 bostic Exp $
#
# Check to make sure that all #defines are actually used.
+# Check to make sure that all #defines start in column 1.
d=../..
@@ -16,12 +17,19 @@ t1=__1
t2=__2
t3=__3
+find $d -name '*.c' -o -name '*.cpp' |
+ xargs egrep '^[ ][ ]*#' > $t1
+test -s $t1 && {
+ cat $t1
+ echo "FAIL: found #defines with leading white space."
+ exit 1
+}
+
egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
- sed -e '/db_185.in/d' -e '/xa.h/d' |
+ sed -e '/db_185.in/d' -e '/queue.h/d' -e '/xa.h/d' |
awk '{print $2}' |
sed -e '/^B_DELETE/d' \
-e '/^B_MAX/d' \
- -e '/^CIRCLEQ_/d' \
-e '/^DB_BTREEOLDVER/d' \
-e '/^DB_HASHOLDVER/d' \
-e '/^DB_LOCKVERSION/d' \
@@ -31,7 +39,6 @@ egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
-e '/^DB_UNUSED/d' \
-e '/^DEFINE_DB_CLASS/d' \
-e '/^HASH_UNUSED/d' \
- -e '/^LIST_/d' \
-e '/^LOG_OP/d' \
-e '/^MINFILL/d' \
-e '/^MUTEX_FIELDS/d' \
@@ -45,9 +52,6 @@ egrep '^#define' $d/dbinc/*.h $d/dbinc/*.in |
-e '/^QPAGE_CHKSUM/d' \
-e '/^QPAGE_NORMAL/d' \
-e '/^QPAGE_SEC/d' \
- -e '/^SH_CIRCLEQ_/d' \
- -e '/^SH_LIST_/d' \
- -e '/^SH_TAILQ_/d' \
-e '/^SIZEOF_PAGE/d' \
-e '/^TAILQ_/d' \
-e '/^WRAPPED_CLASS/d' \
diff --git a/db/test/scr004/chk.javafiles b/db/test/scr004/chk.javafiles
index c85a35604..98fb1aff2 100644
--- a/db/test/scr004/chk.javafiles
+++ b/db/test/scr004/chk.javafiles
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.javafiles,v 1.5 2002/01/30 19:50:52 bostic Exp
+# $Id: chk.javafiles,v 1.7 2003/08/01 18:14:45 gburd Exp $
#
# Check to make sure we haven't forgotten to add any Java files to the list
# of source files in the Makefile.
@@ -13,14 +13,13 @@ d=../..
}
f=$d/dist/Makefile.in
-j=$d/java/src/com/sleepycat
t1=__1
t2=__2
-find $j/db/ $j/examples $d/rpc_server/java -name \*.java -print |
- sed -e 's/^.*\///' | sort > $t1
-tr ' \t' '\n' < $f | sed -e '/\.java$/!d' -e 's/^.*\///' | sort > $t2
+find $d/java $d/examples_java $d/rpc_server/java -name \*.java -print |
+ sed -e 's/^.*\///' | sort -u > $t1
+tr ' \t' '\n' < $f | sed -e '/\.java$/!d' -e 's/^.*\///' | sort -u > $t2
cmp $t1 $t2 > /dev/null || {
echo "<<< java source files >>> Makefile"
diff --git a/db/test/scr005/chk.nl b/db/test/scr005/chk.nl
index 4ad1b3c7c..c6ccaab69 100644
--- a/db/test/scr005/chk.nl
+++ b/db/test/scr005/chk.nl
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.nl,v 1.6 2002/01/07 15:12:12 bostic Exp
+# $Id: chk.nl,v 1.7 2003/09/30 19:16:42 bostic Exp $
#
# Check to make sure that there are no trailing newlines in __db_err calls.
@@ -54,7 +54,8 @@ chk(fp, name)
++line;
continue;
}
- if (ch != '_') continue;
+ if (!isspace(ch)) continue;
+ if ((ch = getc(fp)) != '_') continue;
if ((ch = getc(fp)) != '_') continue;
if ((ch = getc(fp)) != 'd') continue;
if ((ch = getc(fp)) != 'b') continue;
@@ -62,6 +63,7 @@ chk(fp, name)
if ((ch = getc(fp)) != 'e') continue;
if ((ch = getc(fp)) != 'r') continue;
if ((ch = getc(fp)) != 'r') continue;
+ if ((ch = getc(fp)) != '(') continue;
while ((ch = getc(fp)) != '"') {
if (ch == EOF)
return (exitv);
diff --git a/db/test/scr006/chk.offt b/db/test/scr006/chk.offt
index 9b23445b7..909d4966a 100644
--- a/db/test/scr006/chk.offt
+++ b/db/test/scr006/chk.offt
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.offt,v 1.9 2001/10/26 13:40:15 bostic Exp
+# $Id: chk.offt,v 1.10 2003/01/08 20:22:13 bostic Exp $
#
# Make sure that no off_t's have snuck into the release.
@@ -20,7 +20,7 @@ sed -e "/#undef off_t/d" \
-e "/mp_fopen.c:.*where an off_t is 32-bits/d" \
-e "/mutex\/tm.c:/d" \
-e "/os_map.c:.*(off_t)0))/d" \
- -e "/os_rw.c:.*(off_t)db_iop->pgno/d" \
+ -e "/os_rw.c:/d" \
-e "/os_seek.c:.*off_t offset;/d" \
-e "/os_seek.c:.*offset = /d" \
-e "/test_perf\/perf_misc.c:/d" \
diff --git a/db/test/scr007/chk.proto b/db/test/scr007/chk.proto
index 043f7176e..0593506ad 100644
--- a/db/test/scr007/chk.proto
+++ b/db/test/scr007/chk.proto
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.proto,v 1.8 2002/03/27 04:32:59 bostic Exp
+# $Id: chk.proto,v 1.9 2003/02/27 19:18:39 bostic Exp $
#
# Check to make sure that prototypes are actually needed.
@@ -32,7 +32,7 @@ egrep '__P' $d/dbinc_auto/*.h |
find $d -name '*.in' -o -name '*.[ch]' -o -name '*.cpp' > $t2
for i in `cat $t1`; do
- c=$(egrep -low $i $(cat $t2) | wc -l)
+ c=$(egrep -Hlw $i $(cat $t2) | wc -l)
echo "$i: $c"
done | egrep ' 1$' > $t3
diff --git a/db/test/scr008/chk.pubdef b/db/test/scr008/chk.pubdef
index 4f59e831b..a5ba2beae 100644
--- a/db/test/scr008/chk.pubdef
+++ b/db/test/scr008/chk.pubdef
@@ -3,6 +3,7 @@
# Reconcile the list of public defines with the man pages and the Java files.
d=../..
+docs=../../../db.docs
[ -f $d/LICENSE ] || {
echo 'FAIL: cannot find source distribution directory.'
@@ -13,8 +14,13 @@ p=$d/dist/pubdef.in
exitv=0
-# Check that pubdef.in has everything listed in m4.links.
-f=$d/docs_src/m4/m4.links
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that pubdef.in has everything listed in m4.links.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
+f=$docs/m4/m4.links
sed -n \
-e 's/^\$1, \(DB_[^,]*\).*/\1/p' \
-e d < $f |
@@ -27,8 +33,13 @@ while read name; do
fi
done
-# Check that m4.links has everything listed in pubdef.in.
-f=$d/docs_src/m4/m4.links
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that m4.links has everything listed in pubdef.in.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
+f=$docs/m4/m4.links
sed '/^#/d' $p |
while read name isdoc isinc isjava; do
if `egrep -w "^.1, $name" $f > /dev/null`; then
@@ -44,10 +55,15 @@ while read name isdoc isinc isjava; do
fi
done
-# Check that pubdef.in has everything listed in db.in.
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that pubdef.in has everything listed in db.in.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
f=$d/dbinc/db.in
sed -n \
- -e 's/^#define[ ]*\(DB_[A-Z_0-9]*\).*/\1/p' \
+ -e 's/^#define[ ]*\(DB_[A-Z_0-9][A-Z_0-9]*\).*/\1/p' \
-e 's/^[ ]*\(DB_[A-Z_]*\)=[0-9].*/\1/p' \
-e d < $f |
while read name; do
@@ -59,7 +75,12 @@ while read name; do
fi
done
-# Check that db.in has everything listed in pubdef.in.
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that db.in has everything listed in pubdef.in.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
f=$d/dbinc/db.in
sed '/^#/d' $p |
while read name isdoc isinc isjava; do
@@ -77,8 +98,13 @@ while read name isdoc isinc isjava; do
fi
done
-# Check that pubdef.in has everything listed in DbConstants.java.
-f=$d/java/src/com/sleepycat/db/DbConstants.java
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that pubdef.in has everything listed in DbConstants.java.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
+f=$d/java/src/com/sleepycat/db/release/DbConstants.java
sed -n -e 's/.*static final int[ ]*\([^ ]*\).*/\1/p' < $f |
while read name; do
if `egrep -w "$name" $p > /dev/null`; then
@@ -89,8 +115,13 @@ while read name; do
fi
done
-# Check that DbConstants.java has everything listed in pubdef.in.
-f=$d/java/src/com/sleepycat/db/DbConstants.java
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that DbConstants.java has everything listed in pubdef.in.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
+f=$d/java/src/com/sleepycat/db/release/DbConstants.java
sed '/^#/d' $p |
while read name isdoc isinc isjava; do
if `egrep -w "static final int[ ]$name =" $f > /dev/null`; then
@@ -106,7 +137,12 @@ while read name isdoc isinc isjava; do
fi
done
-# Check that pubdef.in has everything listed in Db.java.
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that pubdef.in has everything listed in Db.java.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
f=$d/java/src/com/sleepycat/db/Db.java
sed -n -e 's/.*static final int[ ]*\([^ ;]*\).*/\1/p' < $f |
while read name; do
@@ -127,53 +163,48 @@ while read name; do
fi
done
-# Check that Db.java has all of the Java case values listed in pubdef.in.
-# Any J entries should appear twice -- once as a static final int, with
-# no initialization value, and once assigned to the DbConstants value. Any
-# C entries should appear once as a static final int, with an initialization
-# value.
+cat <<END_OF_TEXT
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Check that Db.java has all of the Java case values listed in pubdef.in.
+Any C entries should appear assigned to an initialization value.
+Any J entries should appear assigned to the DbConstants value.
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+END_OF_TEXT
+
f=$d/java/src/com/sleepycat/db/Db.java
sed '/^#/d' $p |
while read name isdoc isinc isjava; do
- if `egrep -w "static final int[ ]$name;$" $f > /dev/null`; then
- [ "X$isjava" != "XJ" ] && {
- echo "$name should not appear in $f"
+ case "$isjava" in
+ C)
+ if `egrep \
+ "public final static int[ ]$name = [0-9-]*;" \
+ $f > /dev/null`; then
+ :
+ else
+ echo "SFI (C type): $name does not appear in $f"
exitv=1
- }
- else
- [ "X$isjava" = "XJ" ] && {
- echo "$name does not appear in $f"
+ fi;;
+ J)
+ if `egrep \
+ "public final static int[ ]$name;" $f > /dev/null`; then
+ :
+ else
+ echo "SFI (J type): $name does not appear in $f"
exitv=1
- }
- fi
-done
-sed '/^#/d' $p |
-while read name isdoc isinc isjava; do
- if `egrep -w "= DbConstants.$name;" $f > /dev/null`; then
- [ "X$isjava" != "XJ" ] && {
- echo "$name should not appear in $f"
- exitv=1
- }
- else
- [ "X$isjava" = "XJ" ] && {
- echo "$name does not appear in $f"
+ fi
+ if `egrep \
+ "$name = DbConstants.$name;" $f > /dev/null`; then
+ :
+ else
+ echo "DbConstants: $name does not appear in $f"
exitv=1
- }
- fi
-done
-sed '/^#/d' $p |
-while read name isdoc isinc isjava; do
- if `egrep "static final int[ ]$name =.*;" $f > /dev/null`; then
- [ "X$isjava" != "XC" ] && {
- echo "$name should not appear in $f"
- exitv=1
- }
- else
- [ "X$isjava" = "XC" ] && {
- echo "$name does not appear in $f"
- exitv=1
- }
- fi
+ fi;;
+ \*)
+ ;;
+ *)
+ echo "Unknown isjava field: $isjava"
+ exit 1;;
+ esac
done
exit $exitv
diff --git a/db/test/scr009/chk.srcfiles b/db/test/scr009/chk.srcfiles
index c2cb3990f..abff76a61 100644
--- a/db/test/scr009/chk.srcfiles
+++ b/db/test/scr009/chk.srcfiles
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.srcfiles,v 1.10 2002/02/04 22:25:33 bostic Exp
+# $Id: chk.srcfiles,v 1.11 2003/01/09 19:13:17 bostic Exp $
#
# Check to make sure we haven't forgotten to add any files to the list
# of source files Win32 uses to build its dsp files.
@@ -22,6 +22,7 @@ sed -e '/^[ #]/d' \
find $d -type f |
sed -e 's/^\.\.\/\.\.\///' \
-e '/^build[^_]/d' \
+ -e '/^libdb_java\/java_stat_auto.c/d' \
-e '/^test\//d' \
-e '/^test_server/d' \
-e '/^test_thread/d' \
diff --git a/db/test/scr010/chk.str b/db/test/scr010/chk.str
index 15eb9c299..493071a49 100644
--- a/db/test/scr010/chk.str
+++ b/db/test/scr010/chk.str
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.str,v 1.5 2001/10/12 17:55:36 bostic Exp
+# $Id: chk.str,v 1.6 2003/01/08 21:04:53 bostic Exp $
#
# Check spelling in quoted strings.
@@ -19,7 +19,7 @@ sed -e '/^#include/d' \
-e 's/^[^"]*//' \
-e 's/%s/ /g' \
-e 's/[^"]*$//' \
- -e 's/\\[nt]/ /g' $d/*/*.c $d/*/*.cpp |
+ -e 's/\\[nt]/ /g' `find $d -name '*.c' -o -name '*.cpp' -o -name '*.java'` |
spell | sort | comm -23 /dev/stdin spell.ok > $t1
test -s $t1 && {
diff --git a/db/test/scr010/spell.ok b/db/test/scr010/spell.ok
index 18af8d130..5039ee05f 100644
--- a/db/test/scr010/spell.ok
+++ b/db/test/scr010/spell.ok
@@ -1,15 +1,20 @@
AES
AJVX
+ALLBACK
ALLDB
API
APP
AccessExample
Acflmo
Aclmop
+Adata
Ahlm
Ahm
+ArithmeticException
+BC
BCFILprRsvVxX
BCc
+BDBXXXXX
BDBXXXXXX
BH
BI
@@ -17,9 +22,15 @@ BII
BINTERNAL
BTREE
Bc
+Bdata
BerkeleyDB
+BindingSpeedTest
BtRecExample
Btree
+BtreeStat
+BulkAccessExample
+CALLBACK
+CC
CD
CDB
CDS
@@ -27,11 +38,17 @@ CDdFILTVvX
CFILpRsv
CFLprsvVxX
CFh
+CHKPOINT
CHKSUM
+CLASSPATH
CLpsvxX
CONFIG
+Callback
CdFILTvX
+Ch
ClassNotFoundException
+CloseHandle
+CollectionTest
Config
DBC
DBENV
@@ -72,7 +89,9 @@ DbLsn
DbMemoryException
DbMpoolFStat
DbMpoolFile
+DbMpoolFileStat
DbMpoolStat
+DbOutputStreamErrcall
DbPreplist
DbQueueStat
DbRecoveryInit
@@ -80,49 +99,75 @@ DbRepStat
DbRepTransport
DbRunRecoveryException
DbSecondaryKeyCreate
+DbServer
DbTxn
DbTxnRecover
DbTxnStat
DbUtil
+DbXA
DbXAResource
DbXid
Dbc
Dbt
Dde
Deref'ing
+EID
EIO
EIRT
EIi
ENV
+Egen
EnvExample
EnvInfoDelete
+ExceptionWrapperTest
Exp
+FD
+FILEOPEN
FIXEDLEN
+FOREACH
Fd
Ff
Fh
FileNotFoundException
+ForeignKeyTest
+FreeList
+Gentles
GetFileInformationByHandle
GetJavaVM
GetJoin
+Gh
+GotRange
HOFFSET
HOLDELECTION
Hashtable
+IIL
+IL
ILo
ILprR
INDX
INIT
+IOException
IREAD
+ISPERM
ISSET
IWR
IWRITE
Ik
+IllegalArgumentException
+IndexOutOfBoundsException
+JKL
+JZ
+JavaIO
+JavaRPCServer
+JoinTest
KEYEMPTY
KEYEXIST
+KL
KeyRange
LBTREE
LOCKDOWN
LOGC
+LORDER
LRECNO
LRU
LSN
@@ -131,13 +176,24 @@ Ljava
Ll
LockExample
LogRegister
+LogStat
LpRsS
LprRsS
+MAMAMIA
+MAXLOCKS
MEM
+MINLOCKS
+MINWRITE
MMDDhhmm
+MNO
MPOOL
MPOOLFILE
+MYDIRECTORY
MapViewOfFile
+MarshalledEntity
+MarshalledKey
+MarshalledTupleData
+MarshalledTupleKeyEntity
Maxid
Mb
Mbytes
@@ -156,10 +212,12 @@ NOMMAP
NOMORE
NOORDERCHK
NOPANIC
+NORUN
NOSERVER
NOSYNC
NOTFOUND
NOTGRANTED
+NOTPERM
NOTYPE
NOWAIT
NP
@@ -168,37 +226,61 @@ NoqV
NqV
NrV
NsV
+NullPointerException
OLDVERSION
ORDERCHKONLY
Offpage
OpenFileMapping
+OutOfMemoryError
OutputStream
PGNO
PID
+PKG
PREV
+PartKey
+PartValue
Pgno
+QUOTESERVER
RECNO
RECNOSYNC
RECNUM
+REQ
RINTERNAL
RMW
RPC
RT
RUNRECOVERY
+RangeExceeded
+RangeKeyNotEqual
+RangeNotFound
Recno
+RecordNumberFormat
RepElectResult
RepProcessMessage
+RepStat
+RuntimeException
SERVERPROG
SERVERVERS
SETFD
SHA
+SIGPIPE
SS
+SerialBindingTest
+ShipmentKey
+ShipmentValue
Shm
+Signalling
Sleepycat
+StoredClassCatalogTest
+StringDbt
Subdatabase
+SupplierKey
+SupplierValue
TDS
TESTDIR
+TESTXADIR
TID
+TM
TMP
TMPDIR
TODO
@@ -208,18 +290,36 @@ TXNID
TXNs
Tcl
TempFolder
+TestAppendRecno
+TestAssociate
+TestDbtFlags
+TestGetSetMethods
TestKeyRange
TestLogc
+TestOpenEmpty
+TestRpcServer
+TestSerial
+TestXAServlet
TpcbExample
+TransactionTest
+TransactionTests
Tt
+TupleBindingTest
+TupleFormatTest
+TupleOrderingTest
+TupleSerialDbFactoryTest
Txn
+TxnStat
Txnid
Txns
UID
UNAVAIL
USERMEM
Unencrypted
+UnknownError
UnmapViewOfFile
+UtfOps
+UtfTest
VM
VX
Vv
@@ -228,21 +328,41 @@ VvXxZ
Vvw
Vx
VxWorks
+WLInitialContextFactory
Waitsfor
+X's
XA
XAException
+XAResource
+XID
Xid
XxZ
YIELDCPU
YY
+ZED
+aa
+aaA
+aaB
+aaC
+aaD
+aaa
+aab
+aac
+aad
+ab
abc
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
abcdef
abs
+actualData
+actualKey
+acurs
addpage
addr
addrem
+adh
adj
+adlsVv
afterop
ahr
alldb
@@ -250,13 +370,25 @@ alloc
alsVv
amx
anum
+appexit
appl
appname
+apprec
archivedir
arg
args
+arr
ata
+autocommit
+autoremove
+badgen
badkey
+bak
+bb
+bba
+bcurs
+bdb
+beginKey
berkdb
berkeley
bfname
@@ -265,20 +397,28 @@ bigpages
bnum
bostic
bqual
+br
+bs
bsize
bt
btcompare
btrec
btree
buf
+bufsize
bylsn
bypage
+byteLen
+bytesToChars
byteswap
byteswapped
bytevalue
cachesize
cadjust
+callback
callpgin
+catalogtest
+ccurs
cd
cdb
cdel
@@ -288,6 +428,7 @@ celmNrtVZ
celmNtV
celmNtVZ
cget
+charLen
charkey
charset
chgpg
@@ -296,43 +437,57 @@ chkpt
chksum
ckp
cksum
+classID
clearerr
clientrun
cmdargs
+cmp
cnt
+com
compareproc
compat
conf
config
+conv
copypage
cp
crdel
creat
+crypto
curadj
curlsn
datalen
db
dbc
+dbcl
dbclient
dbclose
+dbdemo
dbe
dbenv
+dbinc
dbkill
dbm
dbmclose
dbminit
+dbname
dbobj
dbopen
dbp
+dbq
dbreg
dbremove
dbrename
dbs
+dbsizes
dbt
dbtruncate
dbverify
+dbx
dd
+deadfile
def
+defg
del
delext
delim
@@ -341,36 +496,53 @@ df
dh
dir
dirfno
+dirname
+dirs
dist
dists
dlen
+dll
+doTimeouts
+docRoot
ds
dsize
dup
dup'ed
dupcompare
+dupmaster
+dupmasters
dups
dupset
dupsort
+efg
efh
+egen
eid
electinit
electsend
+electtally
electvote
electwait
+elem
encryptaes
encryptany
+endKey
endian
+entityBinding
env
+envcl
envid
envremove
eof
errcall
errfile
errno
+errorret
errpfx
excl
+ext
extentsize
+faq
faststat
fclose
fcntl
@@ -388,41 +560,60 @@ fiv
flushcommit
foo
fopen
+format's
formatID
fput
+freedata
freelist
+freq
fset
fstat
fsync
ftype
func
fv
+fwd
gbytes
+gc
gc'ed
+gdb
gen
getBranchQualifier
+getBytes
+getCurrentKey
+getDbtString
getFormatId
getGlobalTransactionId
+getString
+getrusage
gettime
gettimeofday
gettype
getval
+ghi
gid
+gotkey
groupalloc
gtrid
+handle's
hashproc
hcreate
hdestroy
hdr
+hijkl
hostname
+href
hsearch
icursor
idletimeout
ids
idup
iitem
+ik
inc
incfirst
+incr
+indexKey
indx
init
inlen
@@ -437,10 +628,16 @@ itemorder
iter
iwr
iwrite
+java
javax
+jhi
+jndi
kb
kbyte
kbytes
+keyBinding
+keyFormat
+keyName
keyfirst
keygroup
keygroups
@@ -460,14 +657,19 @@ lang
lastid
ld
len
+les
lf
lg
libdb
+libfile
+libname
lk
llsn
localhost
localtime
+lockdown
lockid
+locktimeout
logc
logclean
logfile
@@ -491,10 +693,13 @@ lx
mNP
mNs
machid
+machtab
+maj
makedup
malloc
margo
maxcommitperflush
+maxid
maxkey
maxlockers
maxlocks
@@ -504,8 +709,10 @@ maxnlocks
maxnobjects
maxobjects
maxops
+maxsize
maxtimeout
maxtxns
+maxwrite
mbytes
mem
memp
@@ -522,6 +729,7 @@ minlocks
minwrite
minwrites
mis
+misc
mjc
mkdir
mlock
@@ -530,11 +738,13 @@ mmapped
mmapsize
mmetalsn
mmpgno
+moremiddle
mp
mpf
mpgno
mpool
msg
+msgs
munmap
mutex
mutexes
@@ -551,6 +761,7 @@ naborts
nactive
nbegins
nbytes
+ncache
ncaches
ncommits
nconflicts
@@ -570,6 +781,7 @@ newname
newpage
newpgno
newsite
+newsites
nextdup
nextkey
nextlsn
@@ -580,15 +792,18 @@ nitems
nkeys
nlockers
nlocks
+nlocktimeouts
nlsn
nmodes
nnext
nnextlsn
nnowaits
nobjects
+nobuffer
nodup
nodupdata
nogrant
+nolock
nolocking
nommap
noop
@@ -596,6 +811,7 @@ nooverwrite
nopanic
nosort
nosync
+notdurable
notfound
notgranted
nowait
@@ -610,20 +826,28 @@ nrestores
nsites
ntasks
nthreads
+nthrottles
+ntxntimeouts
num
+numberOfKeysRead
numdup
obj
+objectArrayToString
offpage
ok
olddata
olditem
oldname
+op
opd
+opensub
opflags
opmods
+ops
orig
os
osynch
+outbuf
outlen
ovfl
ovflpoint
@@ -640,6 +864,7 @@ paniccall
panicstate
parentid
passwd
+pct
perf
perfdb
pflag
@@ -654,9 +879,11 @@ pgnum
pgout
pgsize
pid
+pk
pkey
plist
pn
+pos
postdestroy
postlog
postlogmeta
@@ -671,22 +898,28 @@ prevlsn
prevnodup
prheader
pri
+primaryKey
printlog
proc
procs
pthread
pthreads
ptype
+putall
+putobj
pv
qV
qam
qs
qtest
+quotedStr
rRV
rRs
rV
rand
rcuradj
+rdbc
+rdbenv
rdonly
readd
readonly
@@ -702,12 +935,17 @@ regionmax
regop
regsize
relink
+rem
+renum
repl
+repquote
+req
revsplitoff
rf
rkey
rlsn
rm
+rmdir
rmid
rmw
ro
@@ -715,8 +953,11 @@ rootent
rootlsn
rpc
rpcid
+rpcserver
rs
rsplit
+rtxn
+rundb
runlog
rw
rwrw
@@ -725,12 +966,19 @@ sS
sV
sVv
scount
+seckey
secon
+secondaryKeyCreate
secs
sendproc
+sep
seq
+servlet
+setErrorHandler
+setflags
setto
setval
+sgenrand
sh
shalloc
shm
@@ -739,26 +987,44 @@ shmctl
shmdt
shmem
shmget
+shownull
shr
+singleKey
+sizeof
sleepycat
+slumber'd
splitdata
splitmeta
srand
stat
+stats
+stddev
+stderr
+stdmode
+stdout
str
strcmp
strdup
strerror
+stringToBytes
strlen
+subList
subdatabase
subdb
+subdbname
sv
svc
+swigCPtr
tV
tVZ
+tailq
tas
tcl
tcp
+tearDown
+testName
+testdata
+testdigits
thr
threadID
tid
@@ -770,8 +1036,10 @@ tmp
tmpdir
tmutex
tnum
+toHexString
tp
tpcb
+tput
treeorder
ttpcbddlk
ttpcbi
@@ -782,6 +1050,7 @@ txn
txnarray
txnid
txns
+txntimeout
txt
ubell
ud
@@ -789,6 +1058,9 @@ uid
ulen
uncorrect
undeleting
+unindexed
+uniq
+unix
unmap
unpinned
upd
@@ -798,8 +1070,12 @@ usecs
usr
util
vVxXZ
+vVxXyZ
vZ
val
+valueBinding
+valueFormat
+valueOf
var
vec
ver
@@ -815,11 +1091,15 @@ walkpages
wb
wc
wcount
+weblogic
wordlist
writeable
wrnosync
wt
xa
xid
+xml
xxx
+xyz
yieldcpu
+zend
diff --git a/db/test/scr011/chk.tags b/db/test/scr011/chk.tags
index cfdc9b8b8..65e9288ea 100644
--- a/db/test/scr011/chk.tags
+++ b/db/test/scr011/chk.tags
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.tags,v 1.10 2001/10/12 17:55:36 bostic Exp
+# $Id: chk.tags,v 1.12 2003/02/27 19:44:39 bostic Exp $
#
# Check to make sure we don't need any more symbolic links to tags files.
@@ -24,10 +24,12 @@ t2=__2
-e '/^docs_book$/d' \
-e '/^docs_src$/d' \
-e '/^java$/d' \
+ -e '/^examples_java$/d' \
-e '/^perl$/d' \
-e '/^test$/d' \
-e '/^test_cxx$/d' \
-e '/^test_purify$/d' \
+ -e '/^test_server$/d' \
-e '/^test_thread$/d' \
-e '/^test_vxworks$/d') > $t1
diff --git a/db/test/scr012/chk.vx_code b/db/test/scr012/chk.vx_code
index 64413b884..8d7ca608f 100644
--- a/db/test/scr012/chk.vx_code
+++ b/db/test/scr012/chk.vx_code
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.vx_code,v 1.6 2002/03/27 20:20:25 bostic Exp
+# $Id: chk.vx_code,v 1.6 2002/03/27 20:20:25 bostic Exp $
#
# Check to make sure the auto-generated utility code in the VxWorks build
# directory compiles.
diff --git a/db/test/scr013/chk.stats b/db/test/scr013/chk.stats
index 2f752e1c2..71894930b 100644
--- a/db/test/scr013/chk.stats
+++ b/db/test/scr013/chk.stats
@@ -1,12 +1,13 @@
#!/bin/sh -
#
-# Id: chk.stats,v 1.6 2002/08/19 18:35:18 bostic Exp
+# $Id: chk.stats,v 1.7 2003/11/21 02:31:41 bostic Exp $
#
# Check to make sure all of the stat structure members are included in
# all of the possible formats.
# Top-level directory.
d=../..
+docs=../../../db.docs
# Path names are from a top-level directory.
[ -f $d/README ] || {
@@ -47,7 +48,7 @@ inc()
continue
fi
for j in $2; do
- if egrep -w $i $d/$j > /dev/null; then
+ if egrep -w $i $j > /dev/null; then
:;
else
echo " $1: $i not found in $j."
@@ -58,19 +59,19 @@ inc()
}
inc "__db_bt_stat" \
- "tcl/tcl_db.c db_stat/db_stat.c docs_src/db/db_stat.so"
+ "$d/tcl/tcl_db.c $d/db_stat/db_stat.c $docs/db/db_stat.so"
inc "__db_h_stat" \
- "tcl/tcl_db.c db_stat/db_stat.c docs_src/db/db_stat.so"
+ "$d/tcl/tcl_db.c $d/db_stat/db_stat.c $docs/db/db_stat.so"
inc "__db_qam_stat" \
- "tcl/tcl_db.c db_stat/db_stat.c docs_src/db/db_stat.so"
+ "$d/tcl/tcl_db.c $d/db_stat/db_stat.c $docs/db/db_stat.so"
inc __db_lock_stat \
- "tcl/tcl_lock.c db_stat/db_stat.c docs_src/lock/lock_stat.so"
+ "$d/tcl/tcl_lock.c $d/db_stat/db_stat.c $docs/lock/lock_stat.so"
inc __db_log_stat \
- "tcl/tcl_log.c db_stat/db_stat.c docs_src/log/log_stat.so"
+ "$d/tcl/tcl_log.c $d/db_stat/db_stat.c $docs/log/log_stat.so"
inc __db_mpool_stat \
- "tcl/tcl_mp.c db_stat/db_stat.c docs_src/memp/memp_stat.so"
+ "$d/tcl/tcl_mp.c $d/db_stat/db_stat.c $docs/memp/memp_stat.so"
inc __db_txn_stat \
- "tcl/tcl_txn.c db_stat/db_stat.c docs_src/txn/txn_stat.so"
+ "$d/tcl/tcl_txn.c $d/db_stat/db_stat.c $docs/txn/txn_stat.so"
# Check to make sure the elements from a man page appears in db.in.
man()
@@ -90,25 +91,25 @@ man()
}
sed -e '/m4_stat(/!d' \
- -e 's/.*m4_stat(\([^)]*\)).*/\1/' < $d/docs_src/db/db_stat.so > $t
+ -e 's/.*m4_stat(\([^)]*\)).*/\1/' < $docs/db/db_stat.so > $t
man "checking db_stat.so against db.h"
sed -e '/m4_stat(/!d' \
-e 's/.*m4_stat(\([^)]*\)).*/\1/' \
- -e 's/.* //' < $d/docs_src/lock/lock_stat.so > $t
+ -e 's/.* //' < $docs/lock/lock_stat.so > $t
man "checking lock_stat.so against db.h"
sed -e '/m4_stat[12](/!d' \
- -e 's/.*m4_stat[12](\([^)]*\)).*/\1/' < $d/docs_src/log/log_stat.so > $t
+ -e 's/.*m4_stat[12](\([^)]*\)).*/\1/' < $docs/log/log_stat.so > $t
man "checking log_stat.so against db.h"
sed -e '/m4_stat[123](/!d' \
- -e 's/.*m4_stat[123](\([^)]*\)).*/\1/' < $d/docs_src/memp/memp_stat.so > $t
+ -e 's/.*m4_stat[123](\([^)]*\)).*/\1/' < $docs/memp/memp_stat.so > $t
man "checking memp_stat.so against db.h"
sed -e '/m4_stat(/!d' \
-e 's/.*m4_stat(.*, \([^)]*\)).*/\1/' \
- -e 's/__[LR]B__//g' < $d/docs_src/txn/txn_stat.so > $t
+ -e 's/__[LR]B__//g' < $docs/txn/txn_stat.so > $t
man "checking txn_stat.so against db.h"
exit $exitv
diff --git a/db/test/scr014/chk.err b/db/test/scr014/chk.err
index 88f5a5459..72b4a6271 100644
--- a/db/test/scr014/chk.err
+++ b/db/test/scr014/chk.err
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.err,v 1.3 2002/03/27 04:33:05 bostic Exp
+# $Id: chk.err,v 1.3 2002/03/27 04:33:05 bostic Exp $
#
# Check to make sure all of the error values have corresponding error
# message strings in db_strerror().
diff --git a/db/test/scr015/README b/db/test/scr015/README
index 9c8a42e86..75a356eea 100644
--- a/db/test/scr015/README
+++ b/db/test/scr015/README
@@ -1,4 +1,4 @@
-# Id: README,v 1.1 2001/05/31 23:09:11 dda Exp
+# $Id: README,v 1.1 2001/05/31 23:09:11 dda Exp $
Use the scripts testall or testone to run all, or just one of the C++
tests. You must be in this directory to run them. For example,
diff --git a/db/test/scr015/TestConstruct01.cpp b/db/test/scr015/TestConstruct01.cpp
index 602ce67c2..17bebf5f1 100644
--- a/db/test/scr015/TestConstruct01.cpp
+++ b/db/test/scr015/TestConstruct01.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestConstruct01.cpp,v 1.5 2002/01/23 14:26:40 bostic Exp
+ * $Id: TestConstruct01.cpp,v 1.7 2003/01/11 16:09:52 dda Exp $
*/
/*
@@ -252,13 +252,6 @@ void t6(int except_flag)
}
delete penv;
- // Make sure we get a message from C++ layer reminding us to close.
- cerr << "expected error: ";
- {
- DbEnv foo(DB_CXX_NO_EXCEPTIONS);
- foo.open(CONSTRUCT01_DBDIR, DB_CREATE, 0);
- }
- cerr << "should have received error.\n";
cout << " finished.\n";
}
diff --git a/db/test/scr015/TestConstruct01.testerr b/db/test/scr015/TestConstruct01.testerr
index 1ba627d10..e69de29bb 100644
--- a/db/test/scr015/TestConstruct01.testerr
+++ b/db/test/scr015/TestConstruct01.testerr
@@ -1,4 +0,0 @@
-expected error: DbEnv::_destroy_check: open DbEnv object destroyed
-should have received error.
-expected error: DbEnv::_destroy_check: open DbEnv object destroyed
-should have received error.
diff --git a/db/test/scr015/TestExceptInclude.cpp b/db/test/scr015/TestExceptInclude.cpp
deleted file mode 100644
index a6fcb9018..000000000
--- a/db/test/scr015/TestExceptInclude.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1997-2002
- * Sleepycat Software. All rights reserved.
- *
- * Id: TestExceptInclude.cpp,v 1.4 2002/07/05 22:17:59 dda Exp
- */
-
-/* We should be able to include cxx_except.h without db_cxx.h,
- * and use the DbException class. We do need db.h to get a few
- * typedefs defined that the DbException classes use.
- *
- * This program does nothing, it's just here to make sure
- * the compilation works.
- */
-#include <db.h>
-#include <cxx_except.h>
-
-int main(int argc, char *argv[])
-{
- DbException *dbe = new DbException("something");
- DbMemoryException *dbme = new DbMemoryException("anything");
-
- dbe = dbme;
-}
-
diff --git a/db/test/scr015/TestGetSetMethods.cpp b/db/test/scr015/TestGetSetMethods.cpp
index cb5cb1ed1..a38592522 100644
--- a/db/test/scr015/TestGetSetMethods.cpp
+++ b/db/test/scr015/TestGetSetMethods.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestGetSetMethods.cpp,v 1.4 2002/01/11 15:53:59 bostic Exp
+ * $Id: TestGetSetMethods.cpp,v 1.5 2003/01/08 05:54:20 bostic Exp $
*/
/*
diff --git a/db/test/scr015/TestKeyRange.cpp b/db/test/scr015/TestKeyRange.cpp
index 3a296c703..c0684340f 100644
--- a/db/test/scr015/TestKeyRange.cpp
+++ b/db/test/scr015/TestKeyRange.cpp
@@ -1,15 +1,16 @@
-/*NOTE: AccessExample changed to test Db.key_range.
- * We made a global change of /AccessExample/TestKeyRange/,
- * the only other changes are marked with comments that
- * are notated as 'ADDED'.
- */
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestKeyRange.cpp,v 1.4 2002/01/23 14:26:41 bostic Exp
+ * $Id: TestKeyRange.cpp,v 1.5 2003/01/08 05:54:20 bostic Exp $
+ */
+
+/*
+ * NOTE: AccessExample changed to test Db.key_range. We made a global
+ * change of /AccessExample/TestKeyRange/, the only other changes are
+ * marked with comments that are notated as 'ADDED'.
*/
#ifndef NO_SYSTEM_INCLUDES
diff --git a/db/test/scr015/TestLogc.cpp b/db/test/scr015/TestLogc.cpp
index 3ea36e884..a609443e0 100644
--- a/db/test/scr015/TestLogc.cpp
+++ b/db/test/scr015/TestLogc.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestLogc.cpp,v 1.6 2002/01/23 14:26:41 bostic Exp
+ * $Id: TestLogc.cpp,v 1.7 2003/01/08 05:54:20 bostic Exp $
*/
/*
diff --git a/db/test/scr015/TestSimpleAccess.cpp b/db/test/scr015/TestSimpleAccess.cpp
index fbb8d9136..9c4693391 100644
--- a/db/test/scr015/TestSimpleAccess.cpp
+++ b/db/test/scr015/TestSimpleAccess.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestSimpleAccess.cpp,v 1.5 2002/01/23 14:26:41 bostic Exp
+ * $Id: TestSimpleAccess.cpp,v 1.6 2003/01/08 05:54:21 bostic Exp $
*/
/*
diff --git a/db/test/scr015/TestTruncate.cpp b/db/test/scr015/TestTruncate.cpp
index 6faa8f604..e88f30a95 100644
--- a/db/test/scr015/TestTruncate.cpp
+++ b/db/test/scr015/TestTruncate.cpp
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestTruncate.cpp,v 1.5 2002/01/23 14:26:41 bostic Exp
+ * $Id: TestTruncate.cpp,v 1.6 2003/01/08 05:54:21 bostic Exp $
*/
/*
diff --git a/db/test/scr015/chk.cxxtests b/db/test/scr015/chk.cxxtests
index fbc5f9197..1534fe932 100644
--- a/db/test/scr015/chk.cxxtests
+++ b/db/test/scr015/chk.cxxtests
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.cxxtests,v 1.5 2002/07/05 22:17:59 dda Exp
+# $Id: chk.cxxtests,v 1.7 2003/11/21 02:36:36 bostic Exp $
#
# Check to make sure that regression tests for C++ run.
@@ -17,7 +17,7 @@ cd ..
echo 'FAIL: chk.cxxtests must be run from a local build directory.'
exit 1
}
-[ -d ../docs_src ] || {
+[ -d ../env ] || {
echo 'FAIL: chk.cxxtests must be run from a local build directory.'
exit 1
}
diff --git a/db/test/scr015/ignore b/db/test/scr015/ignore
index cdf4c87c1..55ce82ae3 100644
--- a/db/test/scr015/ignore
+++ b/db/test/scr015/ignore
@@ -1,4 +1,4 @@
#
-# Id: ignore,v 1.3 2001/10/12 13:02:32 dda Exp
+# $Id: ignore,v 1.3 2001/10/12 13:02:32 dda Exp $
#
# A list of tests to ignore
diff --git a/db/test/scr015/testall b/db/test/scr015/testall
index e9883c4c3..a2d493a8b 100644
--- a/db/test/scr015/testall
+++ b/db/test/scr015/testall
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: testall,v 1.3 2001/09/13 14:49:36 dda Exp
+# $Id: testall,v 1.3 2001/09/13 14:49:36 dda Exp $
#
# Run all the C++ regression tests
diff --git a/db/test/scr015/testone b/db/test/scr015/testone
index e9e8c6b93..3bbba3f90 100644
--- a/db/test/scr015/testone
+++ b/db/test/scr015/testone
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: testone,v 1.3 2001/09/11 19:14:16 dda Exp
+# $Id: testone,v 1.5 2002/07/05 22:17:59 dda Exp $
#
# Run just one C++ regression test, the single argument
# is the basename of the test, e.g. TestRpcServer
@@ -77,6 +77,7 @@ name="$1"
# compile
rm -rf TESTDIR; mkdir TESTDIR
cd ./TESTDIR
+
${CXX} ${CXXFLAGS} -o $name ../$name.cpp ${LIBS} > ../$name.compileout 2>&1
if [ $? != 0 -o -s ../$name.compileout ]; then
error "compilation of $name failed, see $name.compileout"
diff --git a/db/test/scr016/CallbackTest.java b/db/test/scr016/CallbackTest.java
index eede964a0..14abcf44f 100644
--- a/db/test/scr016/CallbackTest.java
+++ b/db/test/scr016/CallbackTest.java
@@ -7,7 +7,7 @@ public class CallbackTest
{
try {
Db db = new Db(null, 0);
- db.set_bt_compare(new BtreeCompare());
+ db.setBtreeCompare(new BtreeCompare());
db.open(null, "test.db", "", Db.DB_BTREE, Db.DB_CREATE, 0666);
StringDbt[] keys = new StringDbt[10];
StringDbt[] datas = new StringDbt[10];
@@ -37,11 +37,11 @@ class BtreeCompare
/* A weird comparator, for example.
* In fact, it may not be legal, since it's not monotonically increasing.
*/
- public int bt_compare(Db db, Dbt dbt1, Dbt dbt2)
+ public int compare(Db db, Dbt dbt1, Dbt dbt2)
{
System.out.println("compare function called");
- byte b1[] = dbt1.get_data();
- byte b2[] = dbt2.get_data();
+ byte b1[] = dbt1.getData();
+ byte b2[] = dbt2.getData();
System.out.println(" " + (new String(b1)) + ", " + (new String(b2)));
int len1 = b1.length;
int len2 = b2.length;
@@ -61,23 +61,23 @@ class StringDbt extends Dbt
{
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ setData(value.getBytes());
+ setSize(value.length());
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
}
diff --git a/db/test/scr016/README b/db/test/scr016/README
index 0b8a87ef0..226a8aa3b 100644
--- a/db/test/scr016/README
+++ b/db/test/scr016/README
@@ -1,4 +1,4 @@
-# Id: README,v 1.2 2001/05/31 23:09:10 dda Exp
+# $Id: README,v 1.2 2001/05/31 23:09:10 dda Exp $
Use the scripts testall or testone to run all, or just one of the Java
tests. You must be in this directory to run them. For example,
diff --git a/db/test/scr016/TestAppendRecno.java b/db/test/scr016/TestAppendRecno.java
index 6caf576f9..ebdf562ae 100644
--- a/db/test/scr016/TestAppendRecno.java
+++ b/db/test/scr016/TestAppendRecno.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestAppendRecno.java,v 1.4 2002/08/16 19:35:53 dda Exp
+ * $Id: TestAppendRecno.java,v 1.5 2003/01/08 05:54:21 bostic Exp $
*/
package com.sleepycat.test;
diff --git a/db/test/scr016/TestAssociate.java b/db/test/scr016/TestAssociate.java
index 9c2ec891b..99c986b11 100644
--- a/db/test/scr016/TestAssociate.java
+++ b/db/test/scr016/TestAssociate.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestAssociate.java,v 1.4 2002/08/16 19:35:54 dda Exp
+ * $Id: TestAssociate.java,v 1.7 2003/06/18 18:46:48 gburd Exp $
*/
package com.sleepycat.test;
@@ -247,7 +247,7 @@ public class TestAssociate
*/
public static class Capitalize implements DbSecondaryKeyCreate
{
- public int secondary_key_create(Db secondary, Dbt key, Dbt value,
+ public int secondaryKeyCreate(Db secondary, Dbt key, Dbt value,
Dbt result)
throws DbException
{
@@ -258,7 +258,7 @@ public class TestAssociate
else if (saveddb2.equals(secondary)) {
which = "secondary";
}
- System.out.println("secondary_key_create, Db: " + shownull(secondary) + "(" + which + "), key: " + show_dbt(key) + ", data: " + show_dbt(value));
+ System.out.println("secondaryKeyCreate, Db: " + shownull(secondary) + "(" + which + "), key: " + show_dbt(key) + ", data: " + show_dbt(value));
int len = key.get_size();
byte[] arr = key.get_data();
boolean capped = true;
@@ -289,7 +289,7 @@ public class TestAssociate
}
}
- public int dup_compare(Db db, Dbt dbt1, Dbt dbt2)
+ public int compareDuplicates(Db db, Dbt dbt1, Dbt dbt2)
{
System.out.println("compare");
int sz1 = dbt1.get_size();
diff --git a/db/test/scr016/TestCallback.java b/db/test/scr016/TestCallback.java
new file mode 100644
index 000000000..e396d5261
--- /dev/null
+++ b/db/test/scr016/TestCallback.java
@@ -0,0 +1,147 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestCallback.java,v 1.2 2003/10/24 01:23:19 mjc Exp $
+ */
+
+/*
+ * Simple tests for DbErrorHandler, DbFeedbackHandler, DbPanicHandler
+ */
+
+package com.sleepycat.test;
+
+import com.sleepycat.db.*;
+import java.io.FileNotFoundException;
+
+public class TestCallback
+ implements DbFeedbackHandler, DbErrorHandler, DbPanicHandler,
+ DbEnvFeedbackHandler, DbBtreeCompare
+{
+ public void run()
+ throws DbException, FileNotFoundException
+ {
+ DbEnv dbenv = new DbEnv(0);
+ dbenv.setFeedbackHandler(this);
+ dbenv.setPanicHandler(this);
+ dbenv.setErrorHandler(this);
+ dbenv.open(".", Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL | Db.DB_INIT_LOG
+ | Db.DB_INIT_TXN | Db.DB_CREATE, 0);
+ Db db = new Db(dbenv, 0);
+ db.setFeedbackHandler(this);
+ //db.setPanicHandler(this);
+ //db.setErrorHandler(this);
+ db.open(null, "my.db", null, Db.DB_BTREE, Db.DB_CREATE, 0644);
+
+ TestUtil.populate(db);
+ dbenv.txnCheckpoint(0, 0, Db.DB_FORCE);
+
+ System.out.println("before compare");
+ try {
+ db.setBtreeCompare(null);
+ }
+ catch (IllegalArgumentException dbe)
+ {
+ System.out.println("got expected exception: " + dbe);
+ // ignore
+ }
+ System.out.println("after compare");
+
+ /*
+ // Pretend we crashed, and reopen the environment
+ db = null;
+ dbenv = null;
+
+ dbenv = new DbEnv(0);
+ dbenv.setFeedbackHandler(this);
+ dbenv.open(".", Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL | Db.DB_INIT_LOG
+ | Db.DB_INIT_TXN | Db.DB_RECOVER, 0);
+ */
+
+ dbenv.setFlags(Db.DB_PANIC_ENVIRONMENT, true);
+ System.out.println("before panic");
+ try {
+ Dbt key = new Dbt("foo".getBytes());
+ Dbt data = new Dbt();
+ db.get(null, key, data, 0);
+ }
+ catch (DbException dbe2)
+ {
+ System.out.println("got expected exception: " + dbe2);
+ // ignore
+ }
+ System.out.println("after panic");
+
+ }
+
+ public static void main(String[] args)
+ {
+ try {
+ (new TestCallback()).run();
+ }
+ catch (DbException dbe) {
+ System.err.println("Db Exception: " + dbe);
+ }
+ catch (FileNotFoundException fnfe) {
+ System.err.println("FileNotFoundException: " + fnfe);
+ }
+ System.out.println("finished test");
+ }
+
+ public void panic(DbEnv dbenv, DbException e)
+ {
+ System.out.println("CALLBACK: panic(" +
+ envStr(dbenv) + ", " + e + ")");
+ }
+
+ public void error(String prefix, String str)
+ {
+ System.out.println("CALLBACK: error(" + quotedStr(prefix) +
+ ", " + quotedStr(str) + ")");
+ }
+
+ public void feedback(Db db, int opcode, int pct)
+ {
+ System.out.println("CALLBACK: (db) feedback(" +
+ dbStr(db) + ", " + opcode + ", " + pct + ")");
+ }
+
+ public void feedback(DbEnv dbenv, int opcode, int pct)
+ {
+ System.out.println("CALLBACK: (env) feedback(" +
+ envStr(dbenv) + ", " + opcode + ", " + pct + ")");
+ }
+
+ public String quotedStr(String s)
+ {
+ if (s == null)
+ return "null";
+ else
+ return "\"" + s + "\"";
+ }
+
+ public String envStr(DbEnv dbenv)
+ {
+ if (dbenv == null)
+ return "null";
+ else
+ return "DbEnv";
+ }
+
+ public String dbStr(Db db)
+ {
+ if (db == null)
+ return "null";
+ else
+ return "Db";
+ }
+
+ public int compare(Db db, Dbt dbt1, Dbt dbt2)
+ {
+ System.out.println("**ERROR** btree compare should never be called" +
+ " in this test");
+ return 0;
+ }
+}
diff --git a/db/test/scr016/TestCallback.testout b/db/test/scr016/TestCallback.testout
new file mode 100644
index 000000000..43692818d
--- /dev/null
+++ b/db/test/scr016/TestCallback.testout
@@ -0,0 +1,13 @@
+got data: data
+get using bad key: DB_NOTFOUND: No matching key/data pair found
+before compare
+CALLBACK: error(null, "DB->set_bt_compare: method not permitted after handle's open method")
+got expected exception: java.lang.IllegalArgumentException: Invalid argument
+after compare
+CALLBACK: error(null, "PANIC_SET")
+before panic
+CALLBACK: error(null, "PANIC: fatal region error detected; run recovery")
+CALLBACK: panic(DbEnv, com.sleepycat.db.DbRunRecoveryException: DB_RUNRECOVERY: Fatal error, run database recovery: DB_RUNRECOVERY: Fatal error, run database recovery)
+got expected exception: com.sleepycat.db.DbRunRecoveryException: DB_RUNRECOVERY: Fatal error, run database recovery: DB_RUNRECOVERY: Fatal error, run database recovery
+after panic
+finished test
diff --git a/db/test/scr016/TestClosedDb.java b/db/test/scr016/TestClosedDb.java
index efd6938a9..d94b90fc1 100644
--- a/db/test/scr016/TestClosedDb.java
+++ b/db/test/scr016/TestClosedDb.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestClosedDb.java,v 1.4 2002/01/23 14:29:51 bostic Exp
+ * $Id: TestClosedDb.java,v 1.7 2003/10/24 01:23:19 mjc Exp $
*/
/*
@@ -34,7 +34,7 @@ public class TestClosedDb
Dbt goodkeydbt = new Dbt("key".getBytes());
Dbt badkeydbt = new Dbt("badkey".getBytes());
Dbt resultdbt = new Dbt();
- resultdbt.set_flags(Db.DB_DBT_MALLOC);
+ resultdbt.setFlags(Db.DB_DBT_MALLOC);
int ret;
@@ -45,8 +45,8 @@ public class TestClosedDb
db.get(null, goodkeydbt, resultdbt, 0);
System.out.println("Error - did not expect to get this far.");
}
- catch (DbException dbe) {
- System.out.println("Got expected Db Exception: " + dbe);
+ catch (IllegalArgumentException dbe) {
+ System.out.println("Got expected exception: " + dbe);
}
System.out.println("finished test");
}
diff --git a/db/test/scr016/TestClosedDb.testout b/db/test/scr016/TestClosedDb.testout
index ce13883f6..ffa537136 100644
--- a/db/test/scr016/TestClosedDb.testout
+++ b/db/test/scr016/TestClosedDb.testout
@@ -1,2 +1,2 @@
-Got expected Db Exception: com.sleepycat.db.DbException: null object: Invalid argument
+Got expected exception: java.lang.IllegalArgumentException: call on closed handle
finished test
diff --git a/db/test/scr016/TestConstruct01.java b/db/test/scr016/TestConstruct01.java
index 0d207f886..f7623051c 100644
--- a/db/test/scr016/TestConstruct01.java
+++ b/db/test/scr016/TestConstruct01.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestConstruct01.java,v 1.6 2002/01/23 14:29:51 bostic Exp
+ * $Id: TestConstruct01.java,v 1.9 2003/01/27 03:38:29 mjc Exp $
*/
/*
@@ -123,7 +123,7 @@ public class TestConstruct01
Dbt key = new Dbt(outbuf, 0, i);
Dbt data = new Dbt(outbuf, 0, i);
- //DEBUGOUT("Put: " + (char)outbuf[0] + ": " + new String(outbuf));
+ //DEBUGOUT("Put: " + (char)outbuf[0] + ": " + new String(outbuf, 0, i));
db.put(null, key, data, Db.DB_NOOVERWRITE);
// Acquire a cursor for the table.
@@ -139,8 +139,10 @@ public class TestConstruct01
//DEBUGOUT("Dbc.get");
while (dbcp.get(readkey, readdata, Db.DB_NEXT) == 0) {
- String key_string = new String(readkey.get_data());
- String data_string = new String(readdata.get_data());
+ String key_string =
+ new String(readkey.get_data(), 0, readkey.get_size());
+ String data_string =
+ new String(readdata.get_data(), 0, readkey.get_size());
//DEBUGOUT("Got: " + key_string + ": " + data_string);
int len = key_string.length();
if (len <= 0 || key_string.charAt(len-1) != 'x') {
@@ -179,6 +181,7 @@ public class TestConstruct01
System.out.print(" expected more keys, bitmap is: " + expected + "\n");
ERR("missing keys in database");
}
+
dbcp.close();
db.close(0);
}
@@ -433,7 +436,7 @@ public class TestConstruct01
//
System.gc();
System.runFinalization();
- VERBOSEOUT("gc complete");
+ VERBOSEOUT("gc complete, bytes free == " + Runtime.getRuntime().freeMemory());
}
}
diff --git a/db/test/scr016/TestConstruct01.testout b/db/test/scr016/TestConstruct01.testout
index 5d2041cd1..2de13da00 100644
--- a/db/test/scr016/TestConstruct01.testout
+++ b/db/test/scr016/TestConstruct01.testout
@@ -1,3 +1,3 @@
ALL TESTS SUCCESSFUL
delta for total mem: <10
-delta for free mem: <10000
+delta for free mem: <1000
diff --git a/db/test/scr016/TestConstruct02.java b/db/test/scr016/TestConstruct02.java
index fa4b28aef..467d6322e 100644
--- a/db/test/scr016/TestConstruct02.java
+++ b/db/test/scr016/TestConstruct02.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestConstruct02.java,v 1.6 2002/08/16 19:35:54 dda Exp
+ * $Id: TestConstruct02.java,v 1.7 2003/01/08 05:54:25 bostic Exp $
*/
/*
diff --git a/db/test/scr016/TestDbtFlags.java b/db/test/scr016/TestDbtFlags.java
index 469b8f0ff..22a592f57 100644
--- a/db/test/scr016/TestDbtFlags.java
+++ b/db/test/scr016/TestDbtFlags.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestDbtFlags.java,v 1.4 2002/08/16 19:35:54 dda Exp
+ * $Id: TestDbtFlags.java,v 1.7 2003/09/04 23:41:20 bostic Exp $
*/
package com.sleepycat.test;
@@ -25,7 +25,7 @@ public class TestDbtFlags
/*zippy quotes for test input*/
static final String[] input_lines = {
- "If we shadows have offended",
+ "If we shadows have offended",
"Think but this, and all is mended",
"That you have but slumber'd here",
"While these visions did appear",
@@ -97,8 +97,8 @@ public class TestDbtFlags
// Create the database object.
// There is no environment for this simple example.
Db table = new Db(null, 0);
- table.set_error_stream(System.err);
- table.set_errpfx("TestDbtFlags");
+ table.setErrorStream(System.err);
+ table.setErrorPrefix("TestDbtFlags");
table.open(null, FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
//
@@ -165,12 +165,12 @@ public class TestDbtFlags
*/
System.err.println("exception, iteration " + iteration_count +
": " + dme);
- System.err.println(" key size: " + key.get_size() +
- " ulen: " + key.get_ulen());
- System.err.println(" data size: " + key.get_size() +
- " ulen: " + key.get_ulen());
+ System.err.println(" key size: " + key.getSize() +
+ " ulen: " + key.getUserBufferLength());
+ System.err.println(" data size: " + key.getSize() +
+ " ulen: " + key.getUserBufferLength());
- dme.get_dbt().set_size(buf_size);
+ dme.getDbt().setSize(buf_size);
StringDbt tempkey = new StringDbt(Db.DB_DBT_MALLOC, -1);
StringDbt tempdata = new StringDbt(Db.DB_DBT_MALLOC, -1);
if ((dbreturn = iterator.get(tempkey, tempdata, Db.DB_NEXT)) != 0) {
@@ -202,36 +202,36 @@ public class TestDbtFlags
StringDbt(int flags, int buf_size)
{
this.saved_flags = flags;
- set_flags(saved_flags);
+ setFlags(saved_flags);
if (buf_size != -1) {
- set_data(new byte[buf_size]);
- set_ulen(buf_size);
+ setData(new byte[buf_size]);
+ setUserBufferLength(buf_size);
}
}
StringDbt(String value, int flags)
{
this.saved_flags = flags;
- set_flags(saved_flags);
+ setFlags(saved_flags);
set_string(value);
}
void set_string(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ setData(value.getBytes());
+ setSize(value.length());
check_flags();
}
String get_string()
{
check_flags();
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
void check_flags()
{
- int actual_flags = get_flags();
+ int actual_flags = getFlags();
if (actual_flags != saved_flags) {
System.err.println("flags botch: expected " + saved_flags +
", got " + actual_flags);
diff --git a/db/test/scr016/TestGetSetMethods.java b/db/test/scr016/TestGetSetMethods.java
index 71bdebe0f..1ac9d5926 100644
--- a/db/test/scr016/TestGetSetMethods.java
+++ b/db/test/scr016/TestGetSetMethods.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2000-2002
+ * Copyright (c) 2000-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestGetSetMethods.java,v 1.3 2002/01/11 15:54:02 bostic Exp
+ * $Id: TestGetSetMethods.java,v 1.6 2003/05/28 08:29:46 mjc Exp $
*/
/*
@@ -26,21 +26,21 @@ public class TestGetSetMethods
DbTxn dbtxn;
byte[][] conflicts = new byte[10][10];
- dbenv.set_timeout(0x90000000,
+ dbenv.setTimeout(0x90000000,
Db.DB_SET_LOCK_TIMEOUT);
- dbenv.set_lg_bsize(0x1000);
- dbenv.set_lg_dir(".");
- dbenv.set_lg_max(0x10000000);
- dbenv.set_lg_regionmax(0x100000);
- dbenv.set_lk_conflicts(conflicts);
- dbenv.set_lk_detect(Db.DB_LOCK_DEFAULT);
+ dbenv.setLogBufferSize(0x1000);
+ dbenv.setLogDir(".");
+ dbenv.setLogMax(0x10000000);
+ dbenv.setLogRegionMax(0x100000);
+ dbenv.setLockConflicts(conflicts);
+ dbenv.setLockDetect(Db.DB_LOCK_DEFAULT);
// exists, but is deprecated:
// dbenv.set_lk_max(0);
- dbenv.set_lk_max_lockers(100);
- dbenv.set_lk_max_locks(10);
- dbenv.set_lk_max_objects(1000);
- dbenv.set_mp_mmapsize(0x10000);
- dbenv.set_tas_spins(1000);
+ dbenv.setLockMaxLockers(100);
+ dbenv.setLockMaxLocks(10);
+ dbenv.setLockMaxObjects(1000);
+ dbenv.setMemoryPoolMapSize(0x10000);
+ dbenv.setTestAndSetSpins(1000);
// Need to open the environment so we
// can get a transaction.
@@ -50,39 +50,39 @@ public class TestGetSetMethods
Db.DB_INIT_MPOOL,
0644);
- dbtxn = dbenv.txn_begin(null, Db.DB_TXN_NOWAIT);
- dbtxn.set_timeout(0xA0000000, Db.DB_SET_TXN_TIMEOUT);
+ dbtxn = dbenv.txnBegin(null, Db.DB_TXN_NOWAIT);
+ dbtxn.setTimeout(0xA0000000, Db.DB_SET_TXN_TIMEOUT);
dbtxn.abort();
dbenv.close(0);
// We get a db, one for each type.
// That's because once we call (for instance)
- // set_bt_maxkey, DB 'knows' that this is a
+ // setBtreeMinKey, DB 'knows' that this is a
// Btree Db, and it cannot be used to try Hash
// or Recno functions.
//
Db db_bt = new Db(null, 0);
- db_bt.set_bt_maxkey(10000);
- db_bt.set_bt_minkey(100);
- db_bt.set_cachesize(0, 0x100000, 0);
+ db_bt.setBtreeMinKey(100);
+ db_bt.setCacheSize(0x100000, 0);
db_bt.close(0);
Db db_h = new Db(null, 0);
- db_h.set_h_ffactor(0x10);
- db_h.set_h_nelem(100);
- db_h.set_lorder(0);
- db_h.set_pagesize(0x10000);
+ db_h.setHashFillFactor(0x10);
+ db_h.setHashNumElements(100);
+ db_h.setByteOrder(0);
+ db_h.setPageSize(0x10000);
db_h.close(0);
Db db_re = new Db(null, 0);
- db_re.set_re_delim('@');
- db_re.set_re_pad(10);
- db_re.set_re_source("re.in");
+ db_re.setRecordDelimiter('@');
+ db_re.setRecordPad(10);
+ db_re.setRecordSource("re.in");
+ db_re.setRecordLength(1000);
db_re.close(0);
Db db_q = new Db(null, 0);
- db_q.set_q_extentsize(200);
+ db_q.setQueueExtentSize(200);
db_q.close(0);
}
diff --git a/db/test/scr016/TestKeyRange.java b/db/test/scr016/TestKeyRange.java
index 330663146..43003ab62 100644
--- a/db/test/scr016/TestKeyRange.java
+++ b/db/test/scr016/TestKeyRange.java
@@ -1,13 +1,15 @@
-/*NOTE: TestKeyRange is AccessExample changed to test Db.key_range.
- * See comments with ADDED for specific areas of change.
- */
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestKeyRange.java,v 1.4 2002/08/16 19:35:55 dda Exp
+ * $Id: TestKeyRange.java,v 1.6 2003/05/06 17:09:43 dda Exp $
+ */
+
+/*
+ * NOTE: TestKeyRange is AccessExample changed to test Db.key_range.
+ * See comments with ADDED for specific areas of change.
*/
package com.sleepycat.test;
@@ -103,8 +105,8 @@ public class TestKeyRange
// Create the database object.
// There is no environment for this simple example.
Db table = new Db(null, 0);
- table.set_error_stream(System.err);
- table.set_errpfx("TestKeyRange");
+ table.setErrorStream(System.err);
+ table.setErrorPrefix("TestKeyRange");
table.open(null, FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
//
@@ -143,7 +145,7 @@ public class TestKeyRange
{
if (count++ > 0) {
DbKeyRange range = new DbKeyRange();
- table.key_range(null, key, range, 0);
+ table.keyRange(null, key, range, 0);
System.out.println("less: " + range.less);
System.out.println("equal: " + range.equal);
System.out.println("greater: " + range.greater);
@@ -180,24 +182,24 @@ public class TestKeyRange
{
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ setData(value.getBytes());
+ setSize(value.length());
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
}
}
diff --git a/db/test/scr016/TestLockVec.java b/db/test/scr016/TestLockVec.java
index 06024e4ed..4b0abc897 100644
--- a/db/test/scr016/TestLockVec.java
+++ b/db/test/scr016/TestLockVec.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestLockVec.java,v 1.4 2002/08/16 19:35:55 dda Exp
+ * $Id: TestLockVec.java,v 1.6 2003/05/06 17:09:43 dda Exp $
*/
/*
@@ -40,8 +40,8 @@ public class TestLockVec
Db.DB_CREATE | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL, 0);
dbenv2.open(".",
Db.DB_CREATE | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL, 0);
- locker1 = dbenv1.lock_id();
- locker2 = dbenv1.lock_id();
+ locker1 = dbenv1.lockId();
+ locker2 = dbenv1.lockId();
Db db1 = new Db(dbenv1, 0);
db1.open(null, "my.db", null, Db.DB_BTREE, Db.DB_CREATE, 0);
Db db2 = new Db(dbenv2, 0);
@@ -73,7 +73,7 @@ public class TestLockVec
catch (DbException dbe1) {
expectedErrs += 1;
}
- DbLock tmplock = dbenv1.lock_get(locker1, Db.DB_LOCK_NOWAIT,
+ DbLock tmplock = dbenv1.lockGet(locker1, Db.DB_LOCK_NOWAIT,
Akey, Db.DB_LOCK_READ);
lock_check_held(dbenv2, Akey, Db.DB_LOCK_READ);
try {
@@ -86,7 +86,7 @@ public class TestLockVec
System.err.println("lock check mechanism is broken");
System.exit(1);
}
- dbenv1.lock_put(tmplock);
+ dbenv1.lockPut(tmplock);
/* Now on with the test, a series of lock_vec requests,
* with checks between each call.
@@ -103,7 +103,7 @@ public class TestLockVec
reqs[2] = new DbLockRequest(Db.DB_LOCK_GET, Db.DB_LOCK_READ,
Bkeyagain, null);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 3);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 3);
/* Locks held: A(W), B(R), B(R) */
lock_check_held(dbenv2, Bkey, Db.DB_LOCK_READ);
@@ -111,10 +111,10 @@ public class TestLockVec
System.out.println("put a couple");
/* Request: put A, B(first) */
- reqs[0].set_op(Db.DB_LOCK_PUT);
- reqs[1].set_op(Db.DB_LOCK_PUT);
+ reqs[0].setOp(Db.DB_LOCK_PUT);
+ reqs[1].setOp(Db.DB_LOCK_PUT);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 2);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 2);
/* Locks held: B(R) */
lock_check_free(dbenv2, Akey);
@@ -122,9 +122,9 @@ public class TestLockVec
System.out.println("put one more, test index offset");
/* Request: put B(second) */
- reqs[2].set_op(Db.DB_LOCK_PUT);
+ reqs[2].setOp(Db.DB_LOCK_PUT);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 2, 1);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 2, 1);
/* Locks held: <none> */
lock_check_free(dbenv2, Akey);
@@ -138,7 +138,7 @@ public class TestLockVec
Akeyagain, null);
reqs[2] = new DbLockRequest(Db.DB_LOCK_GET, Db.DB_LOCK_READ,
Bkey, null);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 3);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 3);
/* Locks held: A(R), B(R), B(R) */
lock_check_held(dbenv2, Akey, Db.DB_LOCK_READ);
@@ -150,7 +150,7 @@ public class TestLockVec
Bkey, null);
reqs[2] = new DbLockRequest(Db.DB_LOCK_PUT_OBJ, 0,
Akey, null);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 1, 2);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 1, 2);
/* Locks held: B(R), B(R) */
lock_check_free(dbenv2, Akey);
@@ -160,7 +160,7 @@ public class TestLockVec
/* Request: get A(W) */
reqs[0] = new DbLockRequest(Db.DB_LOCK_GET, Db.DB_LOCK_WRITE,
Akey, null);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 1);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 1);
/* Locks held: A(W), B(R), B(R) */
lock_check_held(dbenv2, Akey, Db.DB_LOCK_WRITE);
@@ -170,7 +170,7 @@ public class TestLockVec
/* Request: putall */
reqs[0] = new DbLockRequest(Db.DB_LOCK_PUT_ALL, 0,
null, null);
- dbenv1.lock_vec(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 1);
+ dbenv1.lockVector(locker1, Db.DB_LOCK_NOWAIT, reqs, 0, 1);
lock_check_free(dbenv2, Akey);
lock_check_free(dbenv2, Bkey);
@@ -198,9 +198,9 @@ public class TestLockVec
static void lock_check_free(DbEnv dbenv, Dbt dbt)
throws DbException
{
- DbLock tmplock = dbenv.lock_get(locker2, Db.DB_LOCK_NOWAIT,
- dbt, Db.DB_LOCK_WRITE);
- dbenv.lock_put(tmplock);
+ DbLock tmplock = dbenv.lockGet(locker2, Db.DB_LOCK_NOWAIT,
+ dbt, Db.DB_LOCK_WRITE);
+ dbenv.lockPut(tmplock);
}
/* Verify that the lock is held with the mode, throw an exception if not.
@@ -215,15 +215,15 @@ public class TestLockVec
try {
if (mode == Db.DB_LOCK_WRITE) {
- never = dbenv.lock_get(locker2, Db.DB_LOCK_NOWAIT,
- dbt, Db.DB_LOCK_READ);
+ never = dbenv.lockGet(locker2, Db.DB_LOCK_NOWAIT,
+ dbt, Db.DB_LOCK_READ);
}
else if (mode == Db.DB_LOCK_READ) {
- DbLock rlock = dbenv.lock_get(locker2, Db.DB_LOCK_NOWAIT,
- dbt, Db.DB_LOCK_READ);
- dbenv.lock_put(rlock);
- never = dbenv.lock_get(locker2, Db.DB_LOCK_NOWAIT,
- dbt, Db.DB_LOCK_WRITE);
+ DbLock rlock = dbenv.lockGet(locker2, Db.DB_LOCK_NOWAIT,
+ dbt, Db.DB_LOCK_READ);
+ dbenv.lockPut(rlock);
+ never = dbenv.lockGet(locker2, Db.DB_LOCK_NOWAIT,
+ dbt, Db.DB_LOCK_WRITE);
}
else {
throw new DbException("lock_check_held bad mode");
@@ -236,7 +236,7 @@ public class TestLockVec
/* make sure we failed */
if (never != null) {
try {
- dbenv.lock_put(never);
+ dbenv.lockPut(never);
}
catch (DbException dbe2) {
System.err.println("Got some real troubles now");
diff --git a/db/test/scr016/TestLogc.java b/db/test/scr016/TestLogc.java
index afd870917..2914d5e45 100644
--- a/db/test/scr016/TestLogc.java
+++ b/db/test/scr016/TestLogc.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestLogc.java,v 1.7 2002/08/16 19:35:55 dda Exp
+ * $Id: TestLogc.java,v 1.8 2003/01/08 05:54:26 bostic Exp $
*/
/*
diff --git a/db/test/scr016/TestOpenEmpty.java b/db/test/scr016/TestOpenEmpty.java
index 14b2368d7..e83bff323 100644
--- a/db/test/scr016/TestOpenEmpty.java
+++ b/db/test/scr016/TestOpenEmpty.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestOpenEmpty.java,v 1.4 2002/08/16 19:35:55 dda Exp
+ * $Id: TestOpenEmpty.java,v 1.7 2003/09/04 23:41:21 bostic Exp $
*/
package com.sleepycat.test;
@@ -12,6 +12,7 @@ package com.sleepycat.test;
import com.sleepycat.db.*;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;
@@ -47,6 +48,11 @@ public class TestOpenEmpty
System.err.println("TestOpenEmpty: " + fnfe.toString());
System.exit(1);
}
+ catch (Exception ex)
+ {
+ System.err.println("TestOpenEmpty: " + ex.toString());
+ System.exit(1);
+ }
System.exit(0);
}
@@ -96,14 +102,18 @@ public class TestOpenEmpty
// Remove the previous database.
new File(FileName).delete();
- try { (new java.io.FileOutputStream(FileName)).close(); }
+ try {
+ FileOutputStream os = new FileOutputStream(FileName);
+ os.write("abc".getBytes());
+ os.close();
+ }
catch (IOException ioe) { }
// Create the database object.
// There is no environment for this simple example.
Db table = new Db(null, 0);
- table.set_error_stream(System.err);
- table.set_errpfx("TestOpenEmpty");
+ table.setErrorStream(System.err);
+ table.setErrorPrefix("TestOpenEmpty");
table.open(null, FileName, null, Db.DB_BTREE, Db.DB_CREATE, 0644);
//
@@ -166,24 +176,24 @@ public class TestOpenEmpty
{
StringDbt()
{
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
StringDbt(String value)
{
setString(value);
- set_flags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
+ setFlags(Db.DB_DBT_MALLOC); // tell Db to allocate on retrieval
}
void setString(String value)
{
- set_data(value.getBytes());
- set_size(value.length());
+ setData(value.getBytes());
+ setSize(value.length());
}
String getString()
{
- return new String(get_data(), 0, get_size());
+ return new String(getData(), 0, getSize());
}
}
}
diff --git a/db/test/scr016/TestOpenEmpty.testerr b/db/test/scr016/TestOpenEmpty.testerr
index dd3e01c7a..c08da27b3 100644
--- a/db/test/scr016/TestOpenEmpty.testerr
+++ b/db/test/scr016/TestOpenEmpty.testerr
@@ -1,2 +1,2 @@
TestOpenEmpty: access.db: unexpected file type or format
-TestOpenEmpty: com.sleepycat.db.DbException: Invalid argument: Invalid argument
+TestOpenEmpty: java.lang.IllegalArgumentException: Invalid argument
diff --git a/db/test/scr016/TestReplication.java b/db/test/scr016/TestReplication.java
index 3716b28b5..665c0b0c6 100644
--- a/db/test/scr016/TestReplication.java
+++ b/db/test/scr016/TestReplication.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestReplication.java,v 1.3 2002/01/23 14:29:51 bostic Exp
+ * $Id: TestReplication.java,v 1.6 2003/09/04 23:41:21 bostic Exp $
*/
/*
@@ -39,7 +39,7 @@ public class TestReplication extends Thread
{
(new File(name)).mkdir();
}
-
+
// The client thread runs this
public void run()
@@ -66,7 +66,7 @@ public class TestReplication extends Thread
while (running) {
int msgtype = 0;
-
+
System.err.println("c30");
synchronized (queue) {
if (queue.size() == 0) {
@@ -79,7 +79,7 @@ public class TestReplication extends Thread
byte[] data;
System.err.println("c50 " + msgtype);
-
+
switch (msgtype) {
case -1:
running = false;
@@ -105,12 +105,12 @@ public class TestReplication extends Thread
rec.set_size(0);
break;
}
-
+
}
}
System.err.println("c60");
if (msgtype == 3 || msgtype == 4) {
- System.out.println("cLIENT: Got message");
+ System.out.println("client: Got message");
client_env.rep_process_message(control, rec,
processMsg);
}
@@ -140,9 +140,9 @@ public class TestReplication extends Thread
System.err.println("Unexpected envid = " + envid);
return 0;
}
-
+
int nbytes = 0;
-
+
synchronized (queue) {
System.out.println("Sending message");
byte[] data = control.get_data();
@@ -153,11 +153,11 @@ public class TestReplication extends Thread
System.arraycopy(data, 0, newdata, 0, data.length);
queue.addElement(newdata);
}
- else
+ else
{
queue.addElement(new Integer(2));
}
-
+
data = rec.get_data();
if (data != null && data.length > 0) {
queue.addElement(new Integer(3));
@@ -166,7 +166,7 @@ public class TestReplication extends Thread
System.arraycopy(data, 0, newdata, 0, data.length);
queue.addElement(newdata);
}
- else
+ else
{
queue.addElement(new Integer(4));
}
@@ -184,14 +184,14 @@ public class TestReplication extends Thread
{
}
}
-
+
public void send_terminator()
{
synchronized (queue) {
queue.addElement(new Integer(-1));
}
}
-
+
public void master()
{
try {
@@ -256,7 +256,7 @@ class TimelimitThread extends Thread
{
long nmillis;
boolean finished = false;
-
+
TimelimitThread(long nmillis)
{
this.nmillis = nmillis;
@@ -266,12 +266,12 @@ class TimelimitThread extends Thread
{
finished = true;
}
-
+
public void run()
{
long targetTime = System.currentTimeMillis() + nmillis;
long curTime;
-
+
while (!finished &&
((curTime = System.currentTimeMillis()) < targetTime)) {
long diff = targetTime - curTime;
diff --git a/db/test/scr016/TestRpcServer.java b/db/test/scr016/TestRpcServer.java
index 553770035..69ec54fe1 100644
--- a/db/test/scr016/TestRpcServer.java
+++ b/db/test/scr016/TestRpcServer.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestRpcServer.java,v 1.3 2002/01/11 15:54:03 bostic Exp
+ * $Id: TestRpcServer.java,v 1.4 2003/01/08 05:54:28 bostic Exp $
*/
package com.sleepycat.test;
diff --git a/db/test/scr016/TestSameDbt.java b/db/test/scr016/TestSameDbt.java
index e9bb3d40f..c8f3b55a3 100644
--- a/db/test/scr016/TestSameDbt.java
+++ b/db/test/scr016/TestSameDbt.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestSameDbt.java,v 1.4 2002/01/23 14:29:51 bostic Exp
+ * $Id: TestSameDbt.java,v 1.5 2003/01/08 05:54:28 bostic Exp $
*/
/*
diff --git a/db/test/scr016/TestSimpleAccess.java b/db/test/scr016/TestSimpleAccess.java
index 6bc82e9d7..f0d7f9384 100644
--- a/db/test/scr016/TestSimpleAccess.java
+++ b/db/test/scr016/TestSimpleAccess.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestSimpleAccess.java,v 1.5 2002/08/16 19:35:55 dda Exp
+ * $Id: TestSimpleAccess.java,v 1.6 2003/01/08 05:54:29 bostic Exp $
*/
/*
diff --git a/db/test/scr016/TestStat.java b/db/test/scr016/TestStat.java
index 036e6290c..d7436a656 100644
--- a/db/test/scr016/TestStat.java
+++ b/db/test/scr016/TestStat.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestStat.java,v 1.1 2002/08/16 19:35:56 dda Exp
+ * $Id: TestStat.java,v 1.9 2003/08/07 15:48:03 mjc Exp $
*/
/*
@@ -21,11 +21,22 @@ public class TestStat
public static void main(String[] args)
{
int envflags =
- Db.DB_INIT_MPOOL | Db.DB_INIT_LOCK |
- Db.DB_INIT_LOG | Db.DB_INIT_TXN | Db.DB_CREATE;
+ Db.DB_INIT_MPOOL | Db.DB_INIT_LOCK | Db.DB_INIT_LOG |
+ Db.DB_INIT_REP | Db.DB_INIT_TXN | Db.DB_CREATE;
try {
DbEnv dbenv = new DbEnv(0);
dbenv.open(".", envflags, 0);
+
+ // Use a separate environment that has no activity
+ // to do the replication stats. We don't want to get
+ // into configuring a real replication environment here.
+ DbEnv repenv = new DbEnv(0);
+ repenv.open(".", envflags, 0);
+
+ // Keep a couple transactions open so DbTxnStat active
+ // array will have some entries.
+ DbTxn dbtxn1 = dbenv.txnBegin(null, 0);
+ DbTxn dbtxn2 = dbenv.txnBegin(dbtxn1, 0);
Db db = new Db(dbenv, 0);
db.open(null, "my.db", null, Db.DB_BTREE, Db.DB_CREATE, 0);
@@ -35,12 +46,38 @@ public class TestStat
System.out.println(" bt_magic: " + stat.bt_magic);
System.out.println("LogStat:");
- DbLogStat logstat = dbenv.log_stat(0);
+ DbLogStat logstat = dbenv.logStat(0);
System.out.println(" st_magic: " + logstat.st_magic);
System.out.println(" st_cur_file: " + logstat.st_cur_file);
+ System.out.println("TxnStat:");
+ DbTxnStat txnstat = dbenv.txnStat(0);
+ System.out.println(" st_ncommits: " + txnstat.st_ncommits);
+ System.out.println(" st_nactive: " + txnstat.st_nactive);
+
+ DbTxnStat.Active active0 = txnstat.st_txnarray[0];
+ DbTxnStat.Active active1 = txnstat.st_txnarray[1];
+ if (active0.txnid != active1.parentid &&
+ active1.txnid != active0.parentid) {
+ System.out.println("Missing PARENT/CHILD txn relationship:");
+ System.out.println(" st_active[0].txnid: " + active0.txnid);
+ System.out.println(" st_active[0].parentid: " +
+ active0.parentid);
+ System.out.println(" st_active[1].txnid: " + active1.txnid);
+ System.out.println(" st_active[1].parentid: " +
+ active1.parentid);
+ }
+
+ System.out.println("DbMpoolStat:");
+ DbMpoolStat mpstat = dbenv.memoryPoolStat(0);
+ System.out.println(" st_gbytes: " + mpstat.st_gbytes);
+
+ System.out.println("DbMpoolFileStat:");
+ DbMpoolFStat[] mpfstat = dbenv.memoryPoolFileStat(0);
+ System.out.println(" num files: " + mpfstat.length);
+
System.out.println("RepStat:");
- DbRepStat repstat = dbenv.rep_stat(0);
+ DbRepStat repstat = repenv.replicationStat(0);
System.out.println(" st_status: " + repstat.st_status);
System.out.println(" st_log_duplication: " +
repstat.st_log_duplicated);
diff --git a/db/test/scr016/TestStat.testout b/db/test/scr016/TestStat.testout
index caf9db1fb..bd21aa763 100644
--- a/db/test/scr016/TestStat.testout
+++ b/db/test/scr016/TestStat.testout
@@ -5,6 +5,13 @@ BtreeStat:
LogStat:
st_magic: 264584
st_cur_file: 1
+TxnStat:
+ st_ncommits: 0
+ st_nactive: 2
+DbMpoolStat:
+ st_gbytes: 0
+DbMpoolFileStat:
+ num files: 1
RepStat:
st_status: 0
st_log_duplication: 0
diff --git a/db/test/scr016/TestTruncate.java b/db/test/scr016/TestTruncate.java
index 387899841..6f43d9920 100644
--- a/db/test/scr016/TestTruncate.java
+++ b/db/test/scr016/TestTruncate.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestTruncate.java,v 1.4 2002/01/23 14:29:52 bostic Exp
+ * $Id: TestTruncate.java,v 1.7 2003/05/06 17:09:43 dda Exp $
*/
/*
@@ -34,7 +34,7 @@ public class TestTruncate
Dbt goodkeydbt = new Dbt("key".getBytes());
Dbt badkeydbt = new Dbt("badkey".getBytes());
Dbt resultdbt = new Dbt();
- resultdbt.set_flags(Db.DB_DBT_MALLOC);
+ resultdbt.setFlags(Db.DB_DBT_MALLOC);
int ret;
@@ -43,7 +43,7 @@ public class TestTruncate
}
else {
String result =
- new String(resultdbt.get_data(), 0, resultdbt.get_size());
+ new String(resultdbt.getData(), 0, resultdbt.getSize());
System.out.println("got data: " + result);
}
@@ -53,7 +53,7 @@ public class TestTruncate
}
else {
String result =
- new String(resultdbt.get_data(), 0, resultdbt.get_size());
+ new String(resultdbt.getData(), 0, resultdbt.getSize());
System.out.println("*** got data using bad key!!: " + result);
}
@@ -63,12 +63,12 @@ public class TestTruncate
System.out.println("truncate returns " + nrecords);
if ((ret = db.get(null, goodkeydbt, resultdbt, 0)) != 0) {
// We expect this...
- System.out.println("after trunctate get: " +
+ System.out.println("after truncate get: " +
DbEnv.strerror(ret));
}
else {
String result =
- new String(resultdbt.get_data(), 0, resultdbt.get_size());
+ new String(resultdbt.getData(), 0, resultdbt.getSize());
System.out.println("got data: " + result);
}
diff --git a/db/test/scr016/TestTruncate.testout b/db/test/scr016/TestTruncate.testout
index 23f291df7..0a4bc9816 100644
--- a/db/test/scr016/TestTruncate.testout
+++ b/db/test/scr016/TestTruncate.testout
@@ -2,5 +2,5 @@ got data: data
get using bad key: DB_NOTFOUND: No matching key/data pair found
truncating data...
truncate returns 1
-after trunctate get: DB_NOTFOUND: No matching key/data pair found
+after truncate get: DB_NOTFOUND: No matching key/data pair found
finished test
diff --git a/db/test/scr016/TestUtil.java b/db/test/scr016/TestUtil.java
index 00d99a03c..7f4b9f797 100644
--- a/db/test/scr016/TestUtil.java
+++ b/db/test/scr016/TestUtil.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997-2002
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestUtil.java,v 1.1 2002/08/16 19:35:56 dda Exp
+ * $Id: TestUtil.java,v 1.4 2003/09/04 23:41:21 bostic Exp $
*/
/*
@@ -25,32 +25,32 @@ public class TestUtil
Dbt keydbt = new Dbt("key".getBytes());
Dbt datadbt = new Dbt("data".getBytes());
db.put(null, keydbt, datadbt, 0);
-
+
// Now, retrieve. We could use keydbt over again,
// but that wouldn't be typical in an application.
Dbt goodkeydbt = new Dbt("key".getBytes());
Dbt badkeydbt = new Dbt("badkey".getBytes());
Dbt resultdbt = new Dbt();
- resultdbt.set_flags(Db.DB_DBT_MALLOC);
-
+ resultdbt.setFlags(Db.DB_DBT_MALLOC);
+
int ret;
-
+
if ((ret = db.get(null, goodkeydbt, resultdbt, 0)) != 0) {
System.out.println("get: " + DbEnv.strerror(ret));
}
else {
String result =
- new String(resultdbt.get_data(), 0, resultdbt.get_size());
+ new String(resultdbt.getData(), 0, resultdbt.getSize());
System.out.println("got data: " + result);
}
-
+
if ((ret = db.get(null, badkeydbt, resultdbt, 0)) != 0) {
// We expect this...
System.out.println("get using bad key: " + DbEnv.strerror(ret));
}
else {
String result =
- new String(resultdbt.get_data(), 0, resultdbt.get_size());
+ new String(resultdbt.getData(), 0, resultdbt.getSize());
System.out.println("*** got data using bad key!!: " + result);
}
}
diff --git a/db/test/scr016/TestXAServlet.java b/db/test/scr016/TestXAServlet.java
index 505fc84f0..b81d1d1b6 100644
--- a/db/test/scr016/TestXAServlet.java
+++ b/db/test/scr016/TestXAServlet.java
@@ -1,10 +1,10 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1997, 1998, 1999, 2000
+ * Copyright (c) 1997-2003
* Sleepycat Software. All rights reserved.
*
- * Id: TestXAServlet.java,v 1.1 2002/04/24 03:26:33 dda Exp
+ * $Id: TestXAServlet.java,v 1.3 2003/09/04 23:41:21 bostic Exp $
*/
/*
@@ -143,7 +143,7 @@ public class TestXAServlet extends HttpServlet
key = "key" + counter;
if (value == null || value.equals(""))
value = "value" + counter;
-
+
out.println("Adding (\"" + key + "\", \"" + value + "\")");
System.out.println("XA transaction begin");
@@ -209,7 +209,7 @@ public class TestXAServlet extends HttpServlet
e.printStackTrace();
}
}
-
+
private static Xid getBogusXid()
throws XAException
{
@@ -304,7 +304,7 @@ public class TestXAServlet extends HttpServlet
throws NamingException
{
Hashtable env = new Hashtable();
- env.put(Context.INITIAL_CONTEXT_FACTORY,
+ env.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
diff --git a/db/test/scr016/chk.javatests b/db/test/scr016/chk.javatests
index 9319de703..2e2217dc7 100644
--- a/db/test/scr016/chk.javatests
+++ b/db/test/scr016/chk.javatests
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.javatests,v 1.5 2002/08/16 19:35:56 dda Exp
+# $Id: chk.javatests,v 1.6 2003/11/21 02:35:46 bostic Exp $
#
# Check to make sure that regression tests for Java run.
@@ -26,7 +26,7 @@ cd ..
echo 'FAIL: chk.javatests must be run from a local build directory.'
exit 1
}
-[ -d ../docs_src ] || {
+[ -d ../env ] || {
echo 'FAIL: chk.javatests must be run from a local build directory.'
exit 1
}
diff --git a/db/test/scr016/ignore b/db/test/scr016/ignore
index 5282f4180..03469ecdc 100644
--- a/db/test/scr016/ignore
+++ b/db/test/scr016/ignore
@@ -1,20 +1,23 @@
#
-# Id: ignore,v 1.4 2002/08/16 19:35:56 dda Exp
+# $Id: ignore,v 1.7 2003/08/07 15:48:03 mjc Exp $
#
# A list of tests to ignore
-# TestRpcServer is not debugged
+# These tests are not debugged
TestRpcServer
-
-# TestReplication is not debugged
TestReplication
# These are currently not working
TestAppendRecno
TestAssociate
TestLogc
+TestConstruct01
TestConstruct02
+# We no longer check to see that a Dbt is used more than
+# once simultaneously. It's no longer a disastrous error.
+TestSameDbt
+
# TestUtil is used by the other tests, it does not stand on its own
TestUtil
diff --git a/db/test/scr016/testall b/db/test/scr016/testall
index 5439ec22c..a4e1b5a8c 100644
--- a/db/test/scr016/testall
+++ b/db/test/scr016/testall
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: testall,v 1.4 2001/09/13 14:49:37 dda Exp
+# $Id: testall,v 1.4 2001/09/13 14:49:37 dda Exp $
#
# Run all the Java regression tests
diff --git a/db/test/scr016/testone b/db/test/scr016/testone
index 1937b4404..ff654da3a 100644
--- a/db/test/scr016/testone
+++ b/db/test/scr016/testone
@@ -1,5 +1,5 @@
#!/bin/sh -
-# Id: testone,v 1.5 2002/08/16 19:35:56 dda Exp
+# $Id: testone,v 1.7 2003/05/06 17:09:44 dda Exp $
#
# Run just one Java regression test, the single argument
# is the classname within this package.
@@ -83,12 +83,16 @@ fi
rm -rf TESTDIR; mkdir TESTDIR
cd ./TESTDIR
mkdir -p $classdir
-${JAVAC} -d $classdir ../$name.java ../TestUtil.java > ../$name.compileout 2>&1
-if [ $? != 0 -o -s ../$name.compileout ]; then
+${JAVAC} -deprecation -d $classdir ../$name.java ../TestUtil.java > ../$name.compileout 2>&1
+ERR=$?
+if [ $ERR != 0 -o -s ../$name.compileout ]; then
error "compilation of $name failed, see $name.compileout"
- exit 1
+ if [ "$ERR" != 0 ]; then
+ exit 1
+ fi
+else
+ rm -f ../$name.compileout
fi
-rm -f ../$name.compileout
# find input and error file
infile=../$name.testin
diff --git a/db/test/scr017/chk.db185 b/db/test/scr017/chk.db185
index 810ba59b1..e6bfef845 100644
--- a/db/test/scr017/chk.db185
+++ b/db/test/scr017/chk.db185
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.db185,v 1.2 2001/10/12 17:55:38 bostic Exp
+# $Id: chk.db185,v 1.3 2003/09/30 19:31:36 bostic Exp $
#
# Check to make sure we can run DB 1.85 code.
@@ -23,4 +23,7 @@ else
exit 1
fi
+# Clean up so the next test doesn't get confused.
+rm -rf *
+
exit 0
diff --git a/db/test/scr018/chk.comma b/db/test/scr018/chk.comma
index d15e3cf4d..42df48d18 100644
--- a/db/test/scr018/chk.comma
+++ b/db/test/scr018/chk.comma
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.comma,v 1.1 2001/11/03 18:43:49 bostic Exp
+# $Id: chk.comma,v 1.1 2001/11/03 18:43:49 bostic Exp $
#
# Look for trailing commas in declarations. Some compilers can't handle:
# enum {
diff --git a/db/test/scr019/chk.include b/db/test/scr019/chk.include
index 1f469677b..444217bed 100644
--- a/db/test/scr019/chk.include
+++ b/db/test/scr019/chk.include
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.include,v 1.3 2002/03/27 04:33:09 bostic Exp
+# $Id: chk.include,v 1.3 2002/03/27 04:33:09 bostic Exp $
#
# Check for inclusion of files already included in db_int.h.
diff --git a/db/test/scr020/chk.inc b/db/test/scr020/chk.inc
index 258bf3c4d..24c1a47c1 100644
--- a/db/test/scr020/chk.inc
+++ b/db/test/scr020/chk.inc
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.inc,v 1.1 2002/02/10 17:14:33 bostic Exp
+# $Id: chk.inc,v 1.2 2003/08/01 16:49:29 bostic Exp $
#
# Check for inclusion of db_config.h after "const" or other includes.
@@ -16,12 +16,13 @@ t1=__1
t2=__2
(cd $d && find . -name '*.[chys]' -o -name '*.cpp' |
- xargs egrep -l '#include.*db_config.h') > $t1
+ xargs egrep -l '#include.*db_config.h') | tee /tmp/o |
+ sed -e '/dbdemo.c$/d' \
+ -e '/db_java_wrap.c$/d' > $t1
-:> $t2
-for i in `cat $t1`; do
- egrep -w 'db_config.h|const' /dev/null $d/$i | head -1 >> $t2
-done
+(for i in `cat $t1`; do
+ egrep -w 'db_config.h|const' /dev/null $d/$i | head -1
+done) > $t2
if egrep const $t2 > /dev/null; then
echo 'FAIL: found const before include of db_config.h'
diff --git a/db/test/scr021/chk.flags b/db/test/scr021/chk.flags
index a108b7b8e..f0be09283 100644
--- a/db/test/scr021/chk.flags
+++ b/db/test/scr021/chk.flags
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.flags,v 1.6 2002/08/08 15:29:11 bostic Exp
+# $Id: chk.flags,v 1.10 2003/09/30 19:33:14 bostic Exp $
#
# Check flag name-spaces.
@@ -8,11 +8,16 @@ d=../..
t1=__1
+echo ===============================================
+echo Checking for DB_ENV flags.
+echo ===============================================
# Check for DB_ENV flags.
(grep 'F_ISSET([^ ]*dbenv,' $d/*/*.[chys];
grep 'F_SET([^ ]*dbenv,' $d/*/*.[chys];
grep 'F_CLR([^ ]*dbenv,' $d/*/*.[chys]) |
- sed -e '/DB_ENV_/d' -e '/F_SET([^ ]*dbenv, db_env_reset)/d' > $t1
+ sed -e '/DB_ENV_/d' \
+ -e '/env_method.c.*mapped_flag/d' \
+ -e '/F_SET([^ ]*dbenv, db_env_reset)/d' > $t1
[ -s $t1 ] && {
cat $t1
exit 1
@@ -20,6 +25,7 @@ t1=__1
grep 'DB_ENV_' $d/*/*.c |
sed -e '/F_.*dbenv,/d' \
+ -e '/env_method.c.*outflagsp,/d' \
-e '/DB_ENV_TEST_RECOVERY(.*DB_TEST_/d' \
-e '/\/libdb_java\//d' > $t1
[ -s $t1 ] && {
@@ -27,12 +33,17 @@ sed -e '/F_.*dbenv,/d' \
exit 1
}
+echo ===============================================
+echo Checking for DB flags.
+echo ===============================================
# Check for DB flags.
(grep 'F_ISSET([^ ]*dbp,' $d/*/*.[chys];
grep 'F_SET([^ ]*dbp,' $d/*/*.[chys];
grep 'F_CLR([^ ]*dbp,' $d/*/*.[chys]) |
sed -e '/DB_AM_/d' \
- -e '/db.c:.*F_SET.*F_ISSET(subdbp,/d' > $t1
+ -e '/db_method.c.*mapped_flag/d' \
+ -e '/db.c:.*F_SET.*F_ISSET(subdbp,/d' \
+ -e '/db.c:.*F_ISSET(dbp,/d' > $t1
[ -s $t1 ] && {
cat $t1
exit 1
@@ -40,22 +51,30 @@ sed -e '/F_.*dbenv,/d' \
grep 'DB_AM_' $d/*/*.c |
sed -e '/F_.*dbp/d' \
+ -e '/F_.*db_rep->rep_db,/d' \
-e '/"DB->open", dbp->flags, DB_AM_DUP,/d' \
-e '/"DB_NODUPDATA" behavior for databases with/d' \
-e '/If DB_AM_OPEN_CALLED is not set, then we/d' \
-e '/This was checked in set_flags when DB_AM_ENCRYPT/d' \
-e '/XA_ABORT, we can safely set DB_AM_RECOVER/d' \
+ -e '/ DB_AM_RECNUM\./d' \
+ -e '/ DB_AM_RECOVER set\./d' \
-e '/isdup = dbp->flags & DB_AM_DUP/d' \
-e '/otherwise we simply do/d' \
-e '/pginfo/d' \
- -e '/rep_record.c:.*F_SET(rep_db, DB_AM_CL_WRITER)/d' \
+ -e '/_method.c.*outflagsp,/d' \
-e '/setting DB_AM_RECOVER, we guarantee that we don/d' \
+ -e '/the DB_AM_SWAP flag. However, we use/d' \
+ -e '/DB_AM_RECOVER bit in this handle, so that the/d' \
-e '/:[ {]*DB_AM_/d' > $t1
[ -s $t1 ] && {
cat $t1
exit 1
}
+echo ===============================================
+echo Checking for DBC flags.
+echo ===============================================
# Check for DBC flags.
(grep 'F_ISSET([^ ]*dbc,' $d/*/*.[chys];
grep 'F_SET([^ ]*dbc,' $d/*/*.[chys];
@@ -69,10 +88,12 @@ sed -e '/F_.*dbp/d' \
grep 'DBC_' $d/*/*.c |
sed -e '/F_.*dbc/d' \
-e '/DBC_INTERNAL/d' \
+ -e '/DBC_LOGGING/d' \
-e '/Do the actual get. Set DBC_TRANSIENT/d' \
-e '/If DBC_WRITEDUP is set, the cursor is an in/d' \
-e '/The DBC_TRANSIENT flag indicates that we/d' \
-e '/This function replaces the DBC_CONTINUE and DBC_KEYSET/d' \
+ -e '/dbc_n->flags .. dbc_orig->flags . .DBC_OWN_LID/d' \
-e '/db_cam.c:.*F_CLR(opd, DBC_ACTIVE);/d' \
-e '/{ DBC_/d' > $t1
[ -s $t1 ] && {
@@ -80,6 +101,9 @@ sed -e '/F_.*dbc/d' \
exit 1
}
+echo ===============================================
+echo Checking macros.
+echo ===============================================
# Check for bad use of macros.
egrep 'case .*F_SET\(|case .*F_CLR\(' $d/*/*.c > $t1
egrep 'for .*F_SET\(|for .*F_CLR\(' $d/*/*.c >> $t1
diff --git a/db/test/scr022/chk.rr b/db/test/scr022/chk.rr
index f73500afc..3a42c05cc 100644
--- a/db/test/scr022/chk.rr
+++ b/db/test/scr022/chk.rr
@@ -1,6 +1,6 @@
#!/bin/sh -
#
-# Id: chk.rr,v 1.1 2002/04/19 15:13:05 bostic Exp
+# $Id: chk.rr,v 1.3 2003/08/01 17:01:11 bostic Exp $
d=../..
@@ -9,8 +9,9 @@ t1=__1
# Check for DB_RUNRECOVERY being specified instead of a call to db_panic.
egrep DB_RUNRECOVERY $d/*/*.c |
sed -e '/common\/db_err.c:/d' \
- -e '/libdb_java\/java_util.c:/d' \
+ -e '/case DB_RUNRECOVERY:/d' \
-e '/db_dispatch.c:.*if (ret == DB_RUNRECOVERY/d' \
+ -e '/os_errno.c:.*evalue == DB_RUNRECOVERY/d' \
-e '/txn.c:.* \* DB_RUNRECOVERY and we need to/d' \
-e '/__db_panic(.*, DB_RUNRECOVERY)/d' > $t1
[ -s $t1 ] && {
diff --git a/db/test/scr023/chk.q b/db/test/scr023/chk.q
new file mode 100644
index 000000000..62b4fdc23
--- /dev/null
+++ b/db/test/scr023/chk.q
@@ -0,0 +1,26 @@
+#!/bin/sh -
+#
+# $Id: chk.q,v 1.1 2002/10/09 18:42:21 bostic Exp $
+#
+# Check to make sure the queue macros pass our tests.
+
+[ -f ../libdb.a ] || (cd .. && make libdb.a) || {
+ echo 'FAIL: unable to find or build libdb.a'
+ exit 1
+}
+
+if cc -g -Wall -I../../dbinc q.c ../libdb.a -o t; then
+ :
+else
+ echo "FAIL: unable to compile test program q.c"
+ exit 1
+fi
+
+if ./t; then
+ :
+else
+ echo "FAIL: test program failed"
+ exit 1
+fi
+
+exit 0
diff --git a/db/test/scr023/q.c b/db/test/scr023/q.c
new file mode 100644
index 000000000..401c7bd65
--- /dev/null
+++ b/db/test/scr023/q.c
@@ -0,0 +1,834 @@
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "queue.h"
+#include "shqueue.h"
+
+typedef enum {
+ FORWARD_WALK_FAILED = 1,
+ FOREACH_WALK_FAILED,
+ LIST_END_NOT_MARKED_FAILURE,
+ PREV_WALK_FAILED,
+ REVERSE_FOREACH_WALK_FAILED,
+ EXPECTED_HEAD_FAILED
+} FAILURE_REASON;
+
+const char *failure_reason_names[] = {
+ "",
+ "walking the list using the _NEXT forward failed",
+ "walking the list using the _FOREACH macro failed",
+ "what was expected to be the last element wasn't marked as such",
+ "walking the list using the _PREV macro failed",
+ "walking the list using the _REVERSE_FOREACH macro failed",
+ "expected to be at the head of the list"
+};
+
+SH_LIST_HEAD(sh_lq);
+struct sh_le {
+ char content;
+ SH_LIST_ENTRY sh_les;
+};
+
+/* create a string from the content of a list queue */
+char *
+sh_l_as_string(l)
+ struct sh_lq *l;
+{
+ static char buf[1024];
+ struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
+ int i = 1;
+
+ buf[0] = '"';
+ while (ele != NULL) {
+ buf[i] = ele->content;
+ ele = SH_LIST_NEXT(ele, sh_les, sh_le);
+ if (ele != NULL)
+ buf[++i] = ' ';
+ i++;
+ }
+ buf[i++] = '"';
+ buf[i] = '\0';
+ return buf;
+}
+
+/* init a list queue */
+struct sh_lq *
+sh_l_init(items)
+ const char *items;
+{
+ const char *c = items;
+ struct sh_le *ele = NULL, *last_ele = (struct sh_le*)-1;
+ struct sh_lq *l = calloc(1, sizeof(struct sh_lq));
+
+ SH_LIST_INIT(l);
+
+ while (*c != '\0') {
+ if (c[0] != ' ') {
+ last_ele = ele;
+ ele = calloc(1, sizeof(struct sh_le));
+ ele->content = c[0];
+ if (SH_LIST_EMPTY(l))
+ SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
+ else
+ SH_LIST_INSERT_AFTER(
+ last_ele, ele, sh_les, sh_le);
+ }
+ c++;
+ }
+ return (l);
+}
+
+struct sh_lq *
+sh_l_remove_head(l)
+ struct sh_lq *l;
+{
+ struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
+
+ SH_LIST_REMOVE_HEAD(l, sh_les, sh_le);
+ if (ele != NULL)
+ free(ele);
+
+ return (l);
+}
+
+struct sh_lq *
+sh_l_remove_tail(l)
+ struct sh_lq *l;
+{
+ struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
+
+ if (SH_LIST_EMPTY(l))
+ return (l);
+
+ while (SH_LIST_NEXT(ele, sh_les, sh_le) != NULL)
+ ele = SH_LIST_NEXT(ele, sh_les, sh_le);
+
+ if (ele) {
+ SH_LIST_REMOVE(ele, sh_les, sh_le);
+ free(ele);
+ }
+ return (l);
+}
+
+struct sh_lq *
+sh_l_remove_item(l, item)
+ struct sh_lq *l;
+ const char *item;
+{
+ struct sh_le *ele = SH_LIST_FIRST(l, sh_le);
+
+ while (ele != NULL) {
+ if (ele->content == item[0])
+ break;
+ ele = SH_LIST_NEXT(ele, sh_les, sh_le);
+ }
+ if (ele)
+ SH_LIST_REMOVE(ele, sh_les, sh_le);
+ return (l);
+}
+
+struct sh_lq *
+sh_l_insert_head(l, item)
+ struct sh_lq *l;
+ const char *item;
+{
+ struct sh_le *ele = calloc(1, sizeof(struct sh_le));
+
+ ele->content = item[0];
+ SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
+
+ return (l);
+}
+
+struct sh_lq *
+sh_l_insert_tail(l, item)
+ struct sh_lq *l;
+ const char *item;
+{
+ struct sh_le *ele = NULL;
+ struct sh_le *last_ele = SH_LIST_FIRST(l, sh_le);
+
+ if (last_ele != NULL)
+ while (SH_LIST_NEXT(last_ele, sh_les, sh_le) != NULL)
+ last_ele = SH_LIST_NEXT(last_ele, sh_les, sh_le);
+
+ if (last_ele == NULL) {
+ ele = calloc(1, sizeof(struct sh_le));
+ ele->content = item[0];
+ SH_LIST_INSERT_HEAD(l, ele, sh_les, sh_le);
+ } else {
+ ele = calloc(1, sizeof(struct sh_le));
+ ele->content = item[0];
+ SH_LIST_INSERT_AFTER(last_ele, ele, sh_les, sh_le);
+ }
+
+ return (l);
+}
+
+struct sh_lq *
+sh_l_insert_before(l, item, before_item)
+ struct sh_lq *l;
+ const char *item;
+ const char *before_item;
+{
+ struct sh_le *ele = NULL;
+ struct sh_le *before_ele = SH_LIST_FIRST(l, sh_le);
+
+ while (before_ele != NULL) {
+ if (before_ele->content == before_item[0])
+ break;
+ before_ele = SH_LIST_NEXT(before_ele, sh_les, sh_le);
+ }
+ if (before_ele != NULL) {
+ ele = calloc(1, sizeof(struct sh_le));
+ ele->content = item[0];
+ SH_LIST_INSERT_BEFORE(l, before_ele, ele, sh_les, sh_le);
+ }
+ return (l);
+}
+
+struct sh_lq *
+sh_l_insert_after(l, item, after_item)
+ struct sh_lq *l;
+ const char *item;
+ const char *after_item;
+{
+ struct sh_le *ele = NULL;
+ struct sh_le *after_ele = SH_LIST_FIRST(l, sh_le);
+
+ while (after_ele != NULL) {
+ if (after_ele->content == after_item[0])
+ break;
+ after_ele = SH_LIST_NEXT(after_ele, sh_les, sh_le);
+ }
+ if (after_ele != NULL) {
+ ele = calloc(1, sizeof(struct sh_le));
+ ele->content = item[0];
+ SH_LIST_INSERT_AFTER(after_ele, ele, sh_les, sh_le);
+ }
+ return (l);
+}
+
+void
+sh_l_discard(l)
+ struct sh_lq *l;
+{
+ struct sh_le *ele = NULL;
+
+ while ((ele = SH_LIST_FIRST(l, sh_le)) != NULL) {
+ SH_LIST_REMOVE(ele, sh_les, sh_le);
+ free(ele);
+ }
+
+ free(l);
+}
+
+int
+sh_l_verify(l, items)
+ struct sh_lq *l;
+ const char *items;
+{
+ const char *c = items;
+ struct sh_le *ele = NULL, *lele = NULL;
+ int i = 0, nele = 0;
+
+ while (*c != '\0') {
+ if (c[0] != ' ')
+ nele++;
+ c++;
+ }
+
+ /* use the FOREACH macro to walk the list */
+ c = items;
+ i = 0;
+ SH_LIST_FOREACH(ele, l, sh_les, sh_le) {
+ if (ele->content != c[0])
+ return (FOREACH_WALK_FAILED);
+ i++;
+ c +=2;
+ }
+ if (i != nele)
+ return (FOREACH_WALK_FAILED);
+ i = 0;
+ if (items[0] != '\0') {
+ /* walk the list forward */
+ c = items;
+ ele = SH_LIST_FIRST(l, sh_le);
+ while (*c != '\0') {
+ lele = ele;
+ if (c[0] != ' ') {
+ if (ele->content != c[0])
+ return (FORWARD_WALK_FAILED);
+ i++;
+ ele = SH_LIST_NEXT(ele, sh_les, sh_le);
+ }
+ c++;
+ }
+ ele = lele;
+
+ if (i != nele)
+ return (FOREACH_WALK_FAILED);
+
+ /* ele should be the last element in the list... */
+ /* ... so sle_next should be -1 */
+ if (ele->sh_les.sle_next != -1)
+ return (LIST_END_NOT_MARKED_FAILURE);
+
+ /* and NEXT needs to be NULL */
+ if (SH_LIST_NEXT(ele, sh_les, sh_le) != NULL)
+ return (LIST_END_NOT_MARKED_FAILURE);
+
+ /*
+ * walk the list backwards using PREV macro, first move c
+ * back a bit
+ */
+ c--;
+ i = 0;
+ while (c >= items) {
+ if (c[0] != ' ') {
+ lele = ele;
+ if (ele->content != c[0])
+ return (PREV_WALK_FAILED);
+ ele = SH_LIST_PREV(ele, sh_les, sh_le);
+ i++;
+ }
+ c--;
+ }
+ ele = lele;
+
+ if (i != nele)
+ return (PREV_WALK_FAILED);
+
+ if (ele != SH_LIST_FIRST(l, sh_le))
+ return (EXPECTED_HEAD_FAILED);
+ }
+ return (0);
+}
+
+SH_TAILQ_HEAD(sh_tq);
+struct sh_te {
+ char content;
+ SH_TAILQ_ENTRY sh_tes;
+};
+
+/* create a string from the content of a list queue */
+char *
+sh_t_as_string(l)
+ struct sh_tq *l;
+{
+ static char buf[1024];
+ struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
+ int i = 1;
+
+ buf[0] = '"';
+ while (ele != NULL) {
+ buf[i] = ele->content;
+ ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
+ if (ele != NULL)
+ buf[++i] = ' ';
+ i++;
+ }
+ buf[i++] = '"';
+ buf[i] = '\0';
+ return (buf);
+}
+
+/* init a tail queue */
+struct sh_tq *
+sh_t_init(items)
+ const char *items;
+{
+ const char *c = items;
+ struct sh_te *ele = NULL, *last_ele = (struct sh_te*)-1;
+ struct sh_tq *l = calloc(1, sizeof(struct sh_tq));
+
+ SH_TAILQ_INIT(l);
+
+ while (*c != '\0') {
+ if (c[0] != ' ') {
+ ele = calloc(1, sizeof(struct sh_te));
+ ele->content = c[0];
+
+ if (SH_TAILQ_EMPTY(l))
+ SH_TAILQ_INSERT_HEAD(l, ele, sh_tes, sh_te);
+ else
+ SH_TAILQ_INSERT_AFTER(
+ l, last_ele, ele, sh_tes, sh_te);
+ last_ele = ele;
+ }
+ c++;
+ }
+ return (l);
+}
+
+struct sh_tq *
+sh_t_remove_head(l)
+ struct sh_tq *l;
+{
+ struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
+
+ if (ele != NULL)
+ SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
+
+ free(ele);
+
+ return (l);
+}
+
+struct sh_tq *
+sh_t_remove_tail(l)
+ struct sh_tq *l;
+{
+ struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
+
+ if (SH_TAILQ_EMPTY(l))
+ return(l);
+
+ while (SH_TAILQ_NEXT(ele, sh_tes, sh_te) != NULL)
+ ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
+
+ if (ele != NULL) {
+ SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
+ free(ele);
+ }
+
+ return (l);
+}
+
+struct sh_tq *
+sh_t_remove_item(l, item)
+ struct sh_tq *l;
+ const char *item;
+{
+ struct sh_te *ele = SH_TAILQ_FIRST(l, sh_te);
+
+ while (ele != NULL) {
+ if (ele->content == item[0])
+ break;
+ ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
+ }
+ if (ele != NULL)
+ SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
+
+ return (l);
+}
+
+struct sh_tq *
+sh_t_insert_head(l, item)
+ struct sh_tq *l;
+ const char *item;
+{
+ struct sh_te *ele = calloc(1, sizeof(struct sh_te));
+
+ ele->content = item[0];
+ SH_TAILQ_INSERT_HEAD(l, ele, sh_tes, sh_te);
+
+ return (l);
+}
+
+struct sh_tq *
+sh_t_insert_tail(l, item)
+ struct sh_tq *l;
+ const char *item;
+{
+ struct sh_te *ele = 0;
+ ele = calloc(1, sizeof(struct sh_te));
+ ele->content = item[0];
+ SH_TAILQ_INSERT_TAIL(l, ele, sh_tes);
+ return l;
+}
+
+struct sh_tq *
+sh_t_insert_before(l, item, before_item)
+ struct sh_tq *l;
+ const char *item;
+ const char *before_item;
+{
+ struct sh_te *ele = NULL;
+ struct sh_te *before_ele = SH_TAILQ_FIRST(l, sh_te);
+
+ while (before_ele != NULL) {
+ if (before_ele->content == before_item[0])
+ break;
+ before_ele = SH_TAILQ_NEXT(before_ele, sh_tes, sh_te);
+ }
+
+ if (before_ele != NULL) {
+ ele = calloc(1, sizeof(struct sh_te));
+ ele->content = item[0];
+ SH_TAILQ_INSERT_BEFORE(l, before_ele, ele, sh_tes, sh_te);
+ }
+
+ return (l);
+}
+
+struct sh_tq *
+sh_t_insert_after(l, item, after_item)
+ struct sh_tq *l;
+ const char *item;
+ const char *after_item;
+{
+ struct sh_te *ele = NULL;
+ struct sh_te *after_ele = SH_TAILQ_FIRST(l, sh_te);
+
+ while (after_ele != NULL) {
+ if (after_ele->content == after_item[0])
+ break;
+ after_ele = SH_TAILQ_NEXT(after_ele, sh_tes, sh_te);
+ }
+
+ if (after_ele != NULL) {
+ ele = calloc(1, sizeof(struct sh_te));
+ ele->content = item[0];
+ SH_TAILQ_INSERT_AFTER(l, after_ele, ele, sh_tes, sh_te);
+ }
+
+ return (l);
+}
+
+void
+sh_t_discard(l)
+ struct sh_tq *l;
+{
+ struct sh_te *ele = NULL;
+
+ while ((ele = SH_TAILQ_FIRST(l, sh_te)) != NULL) {
+ SH_TAILQ_REMOVE(l, ele, sh_tes, sh_te);
+ free(ele);
+ }
+ free(l);
+}
+
+int
+sh_t_verify(l, items)
+ struct sh_tq *l;
+ const char *items;
+{
+ const char *c = items, *b = NULL;
+ struct sh_te *ele = NULL, *lele = NULL;
+ int i = 0, nele = 0;
+
+ while (*c != '\0') {
+ if (c[0] != ' ')
+ nele++;
+ c++;
+ }
+
+ /* use the FOREACH macro to walk the list */
+ c = items;
+ i = 0;
+ SH_TAILQ_FOREACH(ele, l, sh_tes, sh_te) {
+ if (ele->content != c[0])
+ return (FOREACH_WALK_FAILED);
+ i++;
+ c +=2;
+ }
+ if (i != nele)
+ return (FOREACH_WALK_FAILED);
+ i = 0;
+ if (items[0] != '\0') {
+ /* walk the list forward */
+ c = items;
+ ele = SH_TAILQ_FIRST(l, sh_te);
+ while (*c != '\0') {
+ lele = ele;
+ if (c[0] != ' ') {
+ if (ele->content != c[0])
+ return (FORWARD_WALK_FAILED);
+ i++;
+ ele = SH_TAILQ_NEXT(ele, sh_tes, sh_te);
+ }
+ c++;
+ }
+
+ if (i != nele)
+ return (FOREACH_WALK_FAILED);
+
+ if (lele != SH_TAILQ_LAST(l, sh_tes, sh_te))
+ return (LIST_END_NOT_MARKED_FAILURE);
+ ele = lele;
+
+ /* ele should be the last element in the list... */
+ /* ... so sle_next should be -1 */
+ if (ele->sh_tes.stqe_next != -1)
+ return (LIST_END_NOT_MARKED_FAILURE);
+
+ /* and NEXT needs to be NULL */
+ if (SH_TAILQ_NEXT(ele, sh_tes, sh_te) != NULL)
+ return (LIST_END_NOT_MARKED_FAILURE);
+
+ /* walk the list backwards using SH_LIST_PREV macro */
+ c--;
+ b = c;
+ i = 0;
+ while (c >= items) {
+ if (c[0] != ' ') {
+ lele = ele;
+ if (ele->content != c[0])
+ return (PREV_WALK_FAILED);
+ ele = SH_TAILQ_PREV(l, ele, sh_tes, sh_te);
+ i++;
+ }
+ c--;
+ }
+ ele = lele;
+
+ if (i != nele)
+ return (PREV_WALK_FAILED);
+
+ if (ele != SH_TAILQ_FIRST(l, sh_te))
+ return (-1);
+
+ /* c should be the last character in the array, walk backwards
+ from here using FOREACH_REVERSE and check the values again */
+ c = b;
+ i = 0;
+ ele = SH_TAILQ_LAST(l, sh_tes, sh_te);
+ SH_TAILQ_FOREACH_REVERSE(ele, l, sh_tes, sh_te) {
+ if (ele->content != c[0])
+ return (REVERSE_FOREACH_WALK_FAILED);
+ i++;
+ c -=2;
+ }
+ if (i != nele)
+ return (REVERSE_FOREACH_WALK_FAILED);
+ }
+ return (0);
+}
+
+int
+sh_t_verify_TAILQ_LAST(l, items)
+ struct sh_tq *l;
+ const char *items;
+{
+ const char *c = items;
+ struct sh_te *ele = NULL;
+
+ c = items;
+ while (*c != '\0') {
+ c++;
+ }
+ if (c == items) {
+ /* items is empty, so last should be NULL */
+ if (SH_TAILQ_LAST(l, sh_tes, sh_te) != NULL)
+ return (-1);
+ } else {
+ c--;
+ ele = SH_TAILQ_LAST(l, sh_tes, sh_te);
+ if (ele->content != c[0])
+ return (-1);
+ }
+ return (0);
+}
+
+typedef void *qds_t;
+struct {
+ const char *name;
+ qds_t *(*f_init)(const char *);
+ qds_t *(*f_remove_head)(qds_t *);
+ qds_t *(*f_remove_tail)(qds_t *);
+ qds_t *(*f_remove_item)(qds_t *, const char *);
+ qds_t *(*f_insert_head)(qds_t *, const char *);
+ qds_t *(*f_insert_tail)(qds_t *, const char *);
+ qds_t *(*f_insert_before)(qds_t *, const char *, const char *);
+ qds_t *(*f_insert_after)(qds_t *, const char *, const char *);
+ qds_t *(*f_discard)(qds_t *);
+ char *(*f_as_string)(qds_t *);
+ int (*f_verify)(qds_t *, const char *);
+} qfns[]= {
+{ "sh_list",
+ (qds_t*(*)(const char *))sh_l_init,
+ (qds_t*(*)(qds_t *))sh_l_remove_head,
+ (qds_t*(*)(qds_t *))sh_l_remove_tail,
+ (qds_t*(*)(qds_t *, const char *))sh_l_remove_item,
+ (qds_t*(*)(qds_t *, const char *))sh_l_insert_head,
+ (qds_t*(*)(qds_t *, const char *))sh_l_insert_tail,
+ (qds_t*(*)(qds_t *, const char *, const char *))sh_l_insert_before,
+ (qds_t*(*)(qds_t *, const char *, const char *))sh_l_insert_after,
+ (qds_t*(*)(qds_t *))sh_l_discard,
+ (char *(*)(qds_t *))sh_l_as_string,
+ (int(*)(qds_t *, const char *))sh_l_verify },
+{ "sh_tailq",
+ (qds_t*(*)(const char *))sh_t_init,
+ (qds_t*(*)(qds_t *))sh_t_remove_head,
+ (qds_t*(*)(qds_t *))sh_t_remove_tail,
+ (qds_t*(*)(qds_t *, const char *))sh_t_remove_item,
+ (qds_t*(*)(qds_t *, const char *))sh_t_insert_head,
+ (qds_t*(*)(qds_t *, const char *))sh_t_insert_tail,
+ (qds_t*(*)(qds_t *, const char *, const char *))sh_t_insert_before,
+ (qds_t*(*)(qds_t *, const char *, const char *))sh_t_insert_after,
+ (qds_t*(*)(qds_t *))sh_t_discard,
+ (char *(*)(qds_t *))sh_t_as_string,
+ (int(*)(qds_t *, const char *))sh_t_verify }
+};
+
+typedef enum {
+ INSERT_BEFORE,
+ INSERT_AFTER,
+ INSERT_HEAD,
+ INSERT_TAIL,
+ REMOVE_HEAD,
+ REMOVE_ITEM,
+ REMOVE_TAIL,
+} OP;
+
+const char *op_names[] = {
+ "INSERT_BEFORE",
+ "INSERT_AFTER",
+ "INSERT_HEAD",
+ "INSERT_TAIL",
+ "REMOVE_HEAD",
+ "REMOVE_ITEM",
+ "REMOVE_TAIL" };
+
+struct {
+ char *init; /* initial state. */
+ char *final; /* final state. */
+ char *elem; /* element to operate on */
+ char *insert; /* element to insert */
+ OP op; /* operation. */
+} ops[] = {
+
+ /* most operations on a empty list */
+ { "", "", NULL, NULL, REMOVE_HEAD },
+ { "", "", NULL, NULL, REMOVE_TAIL },
+ { "", "A", NULL, "A", INSERT_HEAD },
+ { "", "A", NULL, "A", INSERT_TAIL },
+
+ /* all operations on a one element list */
+ { "A", "", NULL, NULL, REMOVE_HEAD },
+ { "A", "", NULL, NULL, REMOVE_TAIL },
+ { "A", "", "A", NULL, REMOVE_ITEM },
+ { "B", "A B", NULL, "A", INSERT_HEAD },
+ { "A", "A B", NULL, "B", INSERT_TAIL },
+ { "B", "A B", "B", "A", INSERT_BEFORE },
+ { "A", "A B", "A", "B", INSERT_AFTER },
+
+ /* all operations on a two element list */
+ { "A B", "B", NULL, NULL, REMOVE_HEAD },
+ { "A B", "A", NULL, NULL, REMOVE_TAIL },
+ { "A B", "A", "B", NULL, REMOVE_ITEM },
+ { "A B", "B", "A", NULL, REMOVE_ITEM },
+ { "B C", "A B C", NULL, "A", INSERT_HEAD },
+ { "A B", "A B C", NULL, "C", INSERT_TAIL },
+ { "B C", "A B C", "B", "A", INSERT_BEFORE },
+ { "A C", "A B C", "C", "B", INSERT_BEFORE },
+ { "A C", "A B C", "A", "B", INSERT_AFTER },
+ { "A C", "A C B", "C", "B", INSERT_AFTER },
+
+ /* all operations on a three element list */
+
+ { "A B C", "B C", NULL, NULL, REMOVE_HEAD },
+ { "A B C", "A B", NULL, NULL, REMOVE_TAIL },
+ { "A B C", "A B", "C", NULL, REMOVE_ITEM },
+ { "A B C", "A C", "B", NULL, REMOVE_ITEM },
+ { "A B C", "B C", "A", NULL, REMOVE_ITEM },
+ { "B C D", "A B C D", NULL, "A", INSERT_HEAD },
+ { "A B C", "A B C D", NULL, "D", INSERT_TAIL },
+ { "A B C", "X A B C", "A", "X", INSERT_BEFORE },
+ { "A B C", "A X B C", "B", "X", INSERT_BEFORE },
+ { "A B C", "A B X C", "C", "X", INSERT_BEFORE },
+ { "A B C", "A X B C", "A", "X", INSERT_AFTER },
+ { "A B C", "A B X C", "B", "X", INSERT_AFTER },
+ { "A B C", "A B C X", "C", "X", INSERT_AFTER },
+};
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ void *list;
+ int fc, tc; /* tc is total count, fc is failed count */
+ int eval, i, t, result;
+
+ eval = 0;
+ for (t = 0; t < sizeof(qfns) / sizeof(qfns[0]); ++t) {
+ fc = tc = 0;
+ printf("TESTING: %s\n", qfns[t].name);
+
+ for (i = 0; i < sizeof(ops) / sizeof(ops[0]); i++) {
+ list = qfns[t].f_init(ops[i].init);
+ result = qfns[t].f_verify(list, ops[i].init);
+ if (result == 0) {
+ fc++;
+ putchar('.');
+ } else {
+ putchar('+'); /* + means failed before op */
+ printf("\nVerify failed: %s\n",
+ failure_reason_names[result]);
+ eval = 1;
+ }
+ if (!strcmp("sh_tailq", qfns[t].name)) {
+ result =
+ sh_t_verify_TAILQ_LAST(list, ops[i].init);
+ }
+#ifdef VERBOSE
+ printf("\ncase %d %s in %s init: \"%s\" desired: \"%s\" elem: \"%s\" insert: \"%s\"\n",
+ i, op_names[ops[i].op], qfns[t].name,
+ ops[i].init, ops[i].final,
+ ops[i].elem, ops[i].insert);
+ fflush(stdout);
+#endif
+ tc++;
+ switch (ops[i].op) {
+ case REMOVE_HEAD:
+ qfns[t].f_remove_head(list);
+ break;
+ case REMOVE_TAIL:
+ qfns[t].f_remove_tail(list);
+ break;
+ case REMOVE_ITEM:
+ qfns[t].f_remove_item(list, ops[i].elem);
+ break;
+ case INSERT_HEAD:
+ qfns[t].f_insert_head(list, ops[i].insert);
+ break;
+ case INSERT_TAIL:
+ qfns[t].f_insert_tail(list, ops[i].insert);
+ break;
+ case INSERT_BEFORE:
+ qfns[t].f_insert_before(
+ list, ops[i].insert, ops[i].elem);
+ break;
+ case INSERT_AFTER:
+ qfns[t].f_insert_after(
+ list, ops[i].insert, ops[i].elem);
+ break;
+ }
+ if (!strcmp("sh_tailq", op_names[ops[i].op])) {
+ result = sh_t_verify_TAILQ_LAST(list,
+ ops[i].final);
+ }
+ if (result == 0)
+ result = qfns[t].f_verify(list, ops[i].final);
+ if (result == 0) {
+ fc++;
+ putchar('.');
+ } else {
+ putchar('*'); /* * means failed after op */
+ printf("\ncase %d %s in %s init: \"%s\" desired: \"%s\" elem: \"%s\" insert: \"%s\" got: %s - %s\n",
+ i, op_names[ops[i].op], qfns[t].name,
+ ops[i].init, ops[i].final,
+ ops[i].elem, ops[i].insert,
+ qfns[t].f_as_string(list),
+ failure_reason_names[result]);
+ fflush(stdout);
+ eval = 1;
+ }
+
+ tc++;
+ qfns[t].f_discard(list);
+ }
+
+ printf("\t%0.2f%% passed (%d/%d).\n",
+ (((double)fc/tc) * 100), fc, tc);
+ }
+ return (eval);
+}
diff --git a/db/test/scr024/Makefile b/db/test/scr024/Makefile
new file mode 100644
index 000000000..bbd2f1b81
--- /dev/null
+++ b/db/test/scr024/Makefile
@@ -0,0 +1,51 @@
+TESTCLASSES=\
+ ./src/com/sleepycat/bdb/bind/serial/test/MarshalledObject.java\
+ ./src/com/sleepycat/bdb/bind/serial/test/NullClassCatalog.java\
+ ./src/com/sleepycat/bdb/bind/serial/test/SerialBindingTest.java\
+ ./src/com/sleepycat/bdb/bind/serial/test/Suite.java\
+ ./src/com/sleepycat/bdb/bind/serial/test/TestClassCatalog.java\
+ ./src/com/sleepycat/bdb/bind/test/BindingSpeedTest.java\
+ ./src/com/sleepycat/bdb/bind/test/Suite.java\
+ ./src/com/sleepycat/bdb/bind/tuple/test/MarshalledObject.java\
+ ./src/com/sleepycat/bdb/bind/tuple/test/Suite.java\
+ ./src/com/sleepycat/bdb/bind/tuple/test/TupleBindingTest.java\
+ ./src/com/sleepycat/bdb/bind/tuple/test/TupleFormatTest.java\
+ ./src/com/sleepycat/bdb/bind/tuple/test/TupleOrderingTest.java\
+ ./src/com/sleepycat/bdb/serial/test/StoredClassCatalogTest.java\
+ ./src/com/sleepycat/bdb/serial/test/Suite.java\
+ ./src/com/sleepycat/bdb/serial/test/TestSerial.java\
+ ./src/com/sleepycat/bdb/serial/test/TupleSerialDbFactoryTest.java\
+ ./src/com/sleepycat/bdb/test/CollectionTest.java\
+ ./src/com/sleepycat/bdb/test/DbTestUtil.java\
+ ./src/com/sleepycat/bdb/test/ForeignKeyTest.java\
+ ./src/com/sleepycat/bdb/test/JoinTest.java\
+ ./src/com/sleepycat/bdb/test/KeyRangeTest.java\
+ ./src/com/sleepycat/bdb/test/NullTransactionRunner.java\
+ ./src/com/sleepycat/bdb/test/Suite.java\
+ ./src/com/sleepycat/bdb/test/TestDataBinding.java\
+ ./src/com/sleepycat/bdb/test/TestEntity.java\
+ ./src/com/sleepycat/bdb/test/TestEntityBinding.java\
+ ./src/com/sleepycat/bdb/test/TestEnv.java\
+ ./src/com/sleepycat/bdb/test/TestKeyAssigner.java\
+ ./src/com/sleepycat/bdb/test/TestKeyExtractor.java\
+ ./src/com/sleepycat/bdb/test/TestStore.java\
+ ./src/com/sleepycat/bdb/test/TransactionTest.java\
+ ./src/com/sleepycat/bdb/util/test/ExceptionWrapperTest.java\
+ ./src/com/sleepycat/bdb/util/test/Suite.java\
+ ./src/com/sleepycat/bdb/util/test/UtfTest.java
+
+all: dbtest.jar
+
+dbtest.jar: classesdir
+ javac -classpath ${DB_JAR}:${REQUIRED_JARS} \
+ -d ./classes ${TESTCLASSES}
+ jar cf ./dbtest.jar -C ./classes ./com/sleepycat
+ jar uf ./dbtest.jar -C ./src ./com/sleepycat/bdb/serial/test/testdata
+
+classesdir:
+ [ -d ./classes ] || (mkdir ./classes)
+
+clean:
+ [ -d ./classes ] && rm -rf ./classes
+ [ -f ./dbtest.jar ] && rm ./dbtest.jar
+
diff --git a/db/test/scr024/README b/db/test/scr024/README
new file mode 100644
index 000000000..a6d763781
--- /dev/null
+++ b/db/test/scr024/README
@@ -0,0 +1,16 @@
+
+This directory contains a set of tests written in Java run by JUnit. To be
+able to run them you must first set the following environment variables.
+
+example sh:
+JUNIT_JAR="$HOME/tools/junit3.8.1/junit.jar"
+export JUNIT_JAR
+XMLAPI_JAR="$HOME/tools/ant/lib/xml-apis.jar"
+export XMLAPI_JAR
+XMLIMPL_JAR="$HOME/tools/ant/lib/xercesImpl.jar"
+export XMLIMPL_JAR
+
+example csh:
+setenv JUNIT_JAR $HOME/tools/junit3.8.1/junit.jar
+setenv XMLAPI_JAR $HOME/tools/ant/lib/xml-apis.jar
+setenv XMLIMPL_JAR $HOME/tools/ant/lib/xercesImpl.jar
diff --git a/db/test/scr024/chk.bdb b/db/test/scr024/chk.bdb
new file mode 100644
index 000000000..2fa5cd7cf
--- /dev/null
+++ b/db/test/scr024/chk.bdb
@@ -0,0 +1,73 @@
+#!/bin/sh -
+#
+# $Id: chk.bdb,v 1.7 2003/10/24 01:23:20 mjc Exp $
+#
+# Check to make sure the Greybird/bdb Java API pass our tests.
+
+# The tests are really the combination of two (soon to be three)
+# things; 1. the test code, 2. junit, (3. some coverage tool).
+# The tests will pass if we are able to run the examples using the
+# junit testing tool and get XXX% code coverage (100 would be nice).
+#
+
+# NOTES:
+# This test requires three JARs not included with the Berkeley DB
+# distribution. JUnit (junit.jar), XML APIs (xml-apis.jar) and
+# Xerces (xercesImpl.jar). I've been using the 8/31/2002 version
+# of JUnit. You can download these JARs from http://jakarta.apache.org/
+#
+# JUNIT_JAR=/Users/gburd/Unix/opt/junit/junit.jar
+# XMLAPI_JAR=/Users/gburd/Unix/opt/ant/lib/xml-apis.jar
+# XMLIMPL_JAR=/Users/gburd/Unix/opt/ant/lib/xerxesImpl.jar
+
+[ "x$JUNIT_JAR" = "x" ] && {
+ echo 'FAIL: unset environment variable JUNIT_JAR for junit.jar.'
+ exit 1
+}
+
+[ -f $JUNIT_JAR ] || {
+ echo 'FAIL: JUNIT_JAR not a valid path to the junit.jar.'
+ exit 1
+}
+
+[ "x$XMLAPI_JAR" = "x" ] && {
+ echo 'FAIL: unset environment variable XMLAPI_JAR for xml-apis.jar.'
+ exit 1
+}
+
+[ -f $XMLAPI_JAR ] || {
+ echo 'FAIL: XMLAPI_JAR not a valid path to the xml-apis.jar.'
+ exit 1
+}
+
+[ "x$XMLIMPL_JAR" = "x" ] && {
+ echo 'FAIL: unset environment variable XMLIMPL_JAR for xerxesImpl.jar.'
+ exit 1
+}
+
+[ -f $XMLIMPL_JAR ] || {
+ echo 'FAIL: XMLIMPL_JAR is not a valid path to the file xerxesImpl.jar.'
+ exit 1
+}
+
+d=..
+REQUIRED_JARS=$JUNIT_JAR:$XMLAPI_JAR:$XMLIMPL_JAR
+DB_JAR=$d/db.jar
+export DB_JAR
+export REQUIRED_JARS
+
+make clean
+
+[ -f ./dbtest.jar ] || (make dbtest.jar) || {
+ echo 'FAIL: unable to find or build dbtest.jar'
+ exit 1
+}
+
+if java -cp $REQUIRED_JARS:$DB_JAR:./dbtest.jar com.sleepycat.bdb.test.Suite ; then
+ :
+else
+ echo "FAIL: test program failed"
+ exit 1
+fi
+
+exit 0
diff --git a/db/test/scr024/coverage/README b/db/test/scr024/coverage/README
new file mode 100644
index 000000000..fa3944326
--- /dev/null
+++ b/db/test/scr024/coverage/README
@@ -0,0 +1,25 @@
+The Ant build.xml file in this directory compiles all db Java sources (except
+examples), runs the test suite using Clover to instrument the sources, and then
+generates the Clover coverage reports.
+
+You must place clover.jar in your Ant lib directory as well as placing
+clover.jar and velocity.jar in this directory. (Using a classpathref in the
+Ant javac task doesn't seem to work.)
+
+$ cp <YOUR-CLOVER-INSTALL>/clover.jar .
+$ cp <YOUR-CLOVER-INSTALL>/velocity.jar .
+$ cp clover.jar <YOUR-ANT-DIRECTORY>/lib
+$ ant all
+
+'ant all' will delete all output files, compile and run the tests, and then
+generate the reports.
+
+'ant' will compile sources that need compiling and run the tests to collect
+coverage information.
+
+'ant report' will generate the reports against the current coverage database.
+
+The build.xml file works when run from db/test/scr024/coverage but it should
+also work when run from a build directory copied by the TCL test harness, e.g.,
+db/build_unix/TESTDIR/coverage.
+
diff --git a/db/test/scr024/coverage/build.xml b/db/test/scr024/coverage/build.xml
new file mode 100644
index 000000000..1975f8364
--- /dev/null
+++ b/db/test/scr024/coverage/build.xml
@@ -0,0 +1,111 @@
+<!-- $Id: build.xml,v 1.14 2003/10/17 03:06:34 mhayes Exp $ -->
+<project name="clover" default="test" basedir=".">
+
+ <property name="db" location="../../.."/>
+ <property name="src" location="${db}/java/src"/>
+ <property name="test.src" location="${db}/test/scr024/src"/>
+ <property name="examples.src" location="${db}/examples_java/src"/>
+ <property name="clover.initstring" location="reports/clover.db"/>
+ <property name="clover.excludes" value="**/test/** com/sleepycat/examples/** com/sleepycat/db/**"/>
+ <property name="build.compiler"
+ value="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
+
+ <target name="all" depends="clean,test,report"/>
+
+ <target name="clean">
+ <delete dir="classes"/>
+ <delete dir="tmp"/>
+ <delete dir="reports"/>
+ </target>
+
+ <target name="init">
+ <mkdir dir="classes"/>
+ <mkdir dir="tmp"/>
+ <mkdir dir="reports"/>
+ </target>
+
+ <path id="clover.classpath">
+ <pathelement location="clover.jar"/>
+ <pathelement location="velocity.jar"/>
+ </path>
+
+ <path id="classpath">
+ <pathelement location="classes"/>
+ <path refid="clover.classpath"/>
+ </path>
+
+ <target name="build" depends="init">
+ <javac destdir="classes" debug="on" srcdir="${src}">
+ <src path="${test.src}"/>
+ <src path="${examples.src}"/>
+ <exclude name="com/sleepycat/**/release/**"/>
+ <exclude name="com/sleepycat/db/xa/**"/> <!-- PENDING(gburd): test XA -->
+ </javac>
+ <copy todir="classes">
+ <fileset dir="${test.src}">
+ <include name="**/testdata/**"/>
+ </fileset>
+ </copy>
+ </target>
+
+ <target name="test" depends="build">
+ <junit fork="yes" dir="." printsummary="on" haltonfailure="on"
+ showoutput="on">
+ <formatter type="xml"/>
+ <classpath>
+ <path refid="classpath"/>
+ </classpath>
+ <!--
+ <test name="com.sleepycat.bdb.util.test.Suite" todir="reports"/>
+ <test name="com.sleepycat.bdb.test.CollectionTest" todir="reports"/>
+ -->
+ <test name="com.sleepycat.bdb.test.Suite" todir="reports"/>
+ </junit>
+ </target>
+
+ <target name="examples" depends="build">
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="basic"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="index"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="entity"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="tuple"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="sentity"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="marshal"/>
+ </antcall>
+ <antcall target="one_shipment_example">
+ <param name="param_name" value="factory"/>
+ </antcall>
+ <echo message=""/>
+ <echo message="=== HelloDatabaseWorld ==="/>
+ <java dir="." fork="yes" classpathref="classpath"
+ classname="com.sleepycat.examples.bdb.helloworld.HelloDatabaseWorld"/>
+ </target>
+
+ <target name="one_shipment_example">
+ <echo message="=== ${param_name} ==="/>
+ <delete dir="tmp"/>
+ <mkdir dir="tmp"/>
+ <java dir="." fork="yes" classpathref="classpath"
+ classname="com.sleepycat.examples.bdb.shipment.${param_name}.Sample"/>
+ </target>
+
+ <target name="report">
+ <java classname="com.cortexeb.tools.clover.reporters.html.HtmlReporter"
+ fork="true">
+ <arg line="--outputdir reports --showSrc --initstring ${clover.initstring} --title 'Berkeley DB Java BDB API'"/>
+ <classpath refid="clover.classpath"/>
+ </java>
+ </target>
+
+</project>
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/MarshalledObject.java b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/MarshalledObject.java
new file mode 100644
index 000000000..80a6827a9
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/MarshalledObject.java
@@ -0,0 +1,115 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledObject.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial.test;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * @author Mark Hayes
+ */
+public class MarshalledObject
+ implements Serializable, MarshalledTupleKeyEntity {
+
+ private String data;
+ private transient String primaryKey;
+ private String indexKey1;
+ private String indexKey2;
+
+ public MarshalledObject(String data, String primaryKey,
+ String indexKey1, String indexKey2) {
+ this.data = data;
+ this.primaryKey = primaryKey;
+ this.indexKey1 = indexKey1;
+ this.indexKey2 = indexKey2;
+ }
+
+ public boolean equals(Object o) {
+
+ try {
+ MarshalledObject other = (MarshalledObject) o;
+
+ return this.data.equals(other.data) &&
+ this.primaryKey.equals(other.primaryKey) &&
+ this.indexKey1.equals(other.indexKey1) &&
+ this.indexKey2.equals(other.indexKey2);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ public String getData() {
+
+ return data;
+ }
+
+ public String getPrimaryKey() {
+
+ return primaryKey;
+ }
+
+ public String getIndexKey1() {
+
+ return indexKey1;
+ }
+
+ public String getIndexKey2() {
+
+ return indexKey2;
+ }
+
+ public int expectedKeyLength() {
+
+ return primaryKey.length() + 1;
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(primaryKey);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ primaryKey = keyInput.readString();
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if ("1".equals(keyName)) {
+ if (indexKey1.length() > 0)
+ keyOutput.writeString(indexKey1);
+ } else if ("2".equals(keyName)) {
+ if (indexKey2.length() > 0)
+ keyOutput.writeString(indexKey2);
+ } else {
+ throw new IllegalArgumentException("Unknown keyName: " + keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if ("1".equals(keyName)) {
+ indexKey1 = "";
+ } else if ("2".equals(keyName)) {
+ indexKey2 = "";
+ } else {
+ throw new IllegalArgumentException("Unknown keyName: " + keyName);
+ }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/NullClassCatalog.java b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/NullClassCatalog.java
new file mode 100644
index 000000000..a46abe10a
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/NullClassCatalog.java
@@ -0,0 +1,49 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: NullClassCatalog.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial.test;
+
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import java.io.ObjectStreamClass;
+import java.io.IOException;
+import java.math.BigInteger;
+
+/**
+NullCatalog is a dummy Catalog implementation that simply
+returns large (8 byte) class IDs so that ObjectOutput
+can be simulated when computing a serialized size.
+
+@author Mark Hayes
+*/
+class NullClassCatalog implements ClassCatalog {
+
+ private long id = Long.MAX_VALUE;
+
+ public void close()
+ throws IOException {
+ }
+
+ public byte[] getClassID(String className)
+ throws IOException {
+
+ return BigInteger.valueOf(id--).toByteArray();
+ }
+
+ public ObjectStreamClass getClassFormat(String className)
+ throws IOException, ClassNotFoundException {
+
+ return null; // ObjectInput not supported
+ }
+
+ public ObjectStreamClass getClassFormat(byte[] classID)
+ throws IOException, ClassNotFoundException {
+
+ return null; // ObjectInput not supported
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/SerialBindingTest.java b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/SerialBindingTest.java
new file mode 100644
index 000000000..69726cb6f
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/SerialBindingTest.java
@@ -0,0 +1,298 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: SerialBindingTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.SimpleBuffer;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.bdb.bind.serial.SerialInput;
+import com.sleepycat.bdb.bind.serial.SerialSerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialSerialKeyExtractor;
+import com.sleepycat.bdb.bind.serial.TupleSerialMarshalledBinding;
+import com.sleepycat.bdb.bind.serial.TupleSerialMarshalledKeyExtractor;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+import java.io.IOException;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class SerialBindingTest extends TestCase {
+
+ private ClassCatalog catalog;
+ private DataBuffer buffer;
+ private DataBuffer keyBuffer;
+ private DataBuffer indexKeyBuffer;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(SerialBindingTest.class);
+ return suite;
+ }
+
+ public SerialBindingTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("SerialBindingTest." + getName());
+ catalog = new TestClassCatalog();
+ buffer = new SimpleBuffer();
+ keyBuffer = new SimpleBuffer();
+ indexKeyBuffer = new SimpleBuffer();
+ }
+
+ public void runTest()
+ throws Throwable {
+
+ try {
+ super.runTest();
+ } catch (Exception e) {
+ throw ExceptionUnwrapper.unwrap(e);
+ }
+ }
+
+ private void primitiveBindingTest(Object val)
+ throws IOException {
+
+ Class cls = val.getClass();
+ SerialFormat format = new SerialFormat(catalog, cls);
+ DataBinding binding = new SerialBinding(format);
+ assertSame(format, binding.getDataFormat());
+
+ binding.objectToData(val, buffer);
+ assertTrue(buffer.getDataLength() > 0);
+
+ Object val2 = binding.dataToObject(buffer);
+ assertSame(cls, val2.getClass());
+ assertEquals(val, val2);
+
+ Object valWithWrongCls = (cls == String.class)
+ ? ((Object) new Integer(0)) : ((Object) new String(""));
+ try {
+ binding.objectToData(valWithWrongCls, buffer);
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ public void testPrimitiveBindings()
+ throws IOException {
+
+ primitiveBindingTest("abc");
+ primitiveBindingTest(new Character('a'));
+ primitiveBindingTest(new Boolean(true));
+ primitiveBindingTest(new Byte((byte) 123));
+ primitiveBindingTest(new Short((short) 123));
+ primitiveBindingTest(new Integer(123));
+ primitiveBindingTest(new Long(123));
+ primitiveBindingTest(new Float(123.123));
+ primitiveBindingTest(new Double(123.123));
+ }
+
+ public void testSerialSerialBinding()
+ throws IOException {
+
+ SerialFormat keyFormat = new SerialFormat(catalog, String.class);
+ SerialFormat valueFormat = new SerialFormat(catalog, String.class);
+ EntityBinding binding = new MySerialSerialBinding(keyFormat,
+ valueFormat);
+ assertSame(keyFormat, binding.getKeyFormat());
+ assertSame(valueFormat, binding.getValueFormat());
+
+ String val = "key#value?indexKey";
+ binding.objectToValue(val, buffer);
+ assertTrue(buffer.getDataLength() > 0);
+ binding.objectToKey(val, keyBuffer);
+ assertTrue(keyBuffer.getDataLength() > 0);
+
+ Object result = binding.dataToObject(keyBuffer, buffer);
+ assertEquals(val, result);
+ }
+
+ public void testSerialSerialKeyExtractor()
+ throws IOException {
+
+ SerialFormat keyFormat = new SerialFormat(catalog, String.class);
+ SerialFormat valueFormat = new SerialFormat(catalog, String.class);
+ SerialFormat indexKeyFormat = new SerialFormat(catalog, String.class);
+ EntityBinding binding = new MySerialSerialBinding(keyFormat,
+ valueFormat);
+ KeyExtractor extractor = new MySerialSerialExtractor(keyFormat,
+ valueFormat,
+ indexKeyFormat);
+ assertSame(keyFormat, extractor.getPrimaryKeyFormat());
+ assertSame(valueFormat, extractor.getValueFormat());
+ assertSame(indexKeyFormat, extractor.getIndexKeyFormat());
+
+ String val = "key#value?indexKey";
+ binding.objectToValue(val, buffer);
+ binding.objectToKey(val, keyBuffer);
+
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ assertEquals("indexKey", indexKeyFormat.dataToObject(indexKeyBuffer));
+
+ extractor.clearIndexKey(buffer);
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ assertEquals(0, indexKeyBuffer.getDataLength());
+ }
+
+ // also tests TupleSerialBinding since TupleSerialMarshalledBinding extends
+ // it
+ public void testTupleSerialMarshalledBinding()
+ throws IOException {
+
+ TupleFormat keyFormat = new TupleFormat();
+ SerialFormat valueFormat = new SerialFormat(catalog,
+ MarshalledObject.class);
+ TupleFormat indexKeyFormat = new TupleFormat();
+
+ EntityBinding binding =
+ new TupleSerialMarshalledBinding(keyFormat, valueFormat);
+ assertSame(valueFormat, binding.getValueFormat());
+ assertSame(keyFormat, binding.getKeyFormat());
+
+ MarshalledObject val = new MarshalledObject("abc", "primary",
+ "index1", "index2");
+ binding.objectToValue(val, buffer);
+ assertTrue(buffer.getDataLength() > 0);
+ binding.objectToKey(val, keyBuffer);
+ assertEquals(val.expectedKeyLength(), keyBuffer.getDataLength());
+
+ Object result = binding.dataToObject(keyBuffer, buffer);
+ assertTrue(result instanceof MarshalledObject);
+ val = (MarshalledObject) result;
+ assertEquals("abc", val.getData());
+ assertEquals("primary", val.getPrimaryKey());
+ assertEquals("index1", val.getIndexKey1());
+ assertEquals("index2", val.getIndexKey2());
+ }
+
+ // also tests TupleSerialKeyExtractor since
+ // TupleSerialMarshalledKeyExtractor extends it
+ public void testTupleSerialMarshalledKeyExtractor()
+ throws IOException {
+
+ TupleFormat keyFormat = new TupleFormat();
+ SerialFormat valueFormat = new SerialFormat(catalog,
+ MarshalledObject.class);
+ TupleFormat indexKeyFormat = new TupleFormat();
+ TupleSerialMarshalledBinding binding =
+ new TupleSerialMarshalledBinding(keyFormat, valueFormat);
+
+ KeyExtractor extractor =
+ new TupleSerialMarshalledKeyExtractor(binding, indexKeyFormat, "1",
+ false, true);
+ assertSame(valueFormat, extractor.getValueFormat());
+ assertNull(extractor.getPrimaryKeyFormat());
+ assertSame(indexKeyFormat, extractor.getIndexKeyFormat());
+
+ MarshalledObject val = new MarshalledObject("abc", "primary",
+ "index1", "index2");
+ binding.objectToValue(val, buffer);
+ binding.objectToKey(val, keyBuffer);
+
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ TupleInput in = indexKeyFormat.dataToInput(indexKeyBuffer);
+ assertEquals("index1", in.readString());
+
+ extractor.clearIndexKey(buffer);
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ assertEquals(0, indexKeyBuffer.getDataLength());
+ }
+
+ private static class MySerialSerialBinding extends SerialSerialBinding {
+
+ private MySerialSerialBinding(SerialFormat keyFormat,
+ SerialFormat valueFormat) {
+
+ super(keyFormat, valueFormat);
+ }
+
+ public Object dataToObject(Object keyInput, Object valueInput)
+ throws IOException {
+
+ return "" + keyInput + '#' + valueInput;
+ }
+
+ public Object objectToKey(Object object)
+ throws IOException {
+
+ String s = (String) object;
+ int i = s.indexOf('#');
+ if (i < 0 || i == s.length() - 1)
+ throw new IllegalArgumentException(s);
+ else
+ return s.substring(0, i);
+ }
+
+ public Object objectToValue(Object object)
+ throws IOException {
+
+ String s = (String) object;
+ int i = s.indexOf('#');
+ if (i < 0 || i == s.length() - 1)
+ throw new IllegalArgumentException(s);
+ else
+ return s.substring(i + 1);
+ }
+ }
+
+ private static class MySerialSerialExtractor
+ extends SerialSerialKeyExtractor {
+
+ private MySerialSerialExtractor(SerialFormat primaryKeyFormat,
+ SerialFormat valueFormat,
+ SerialFormat indexKeyFormat) {
+
+ super(primaryKeyFormat, valueFormat, indexKeyFormat);
+ }
+
+ public Object extractIndexKey(Object primaryKeyInput,
+ Object valueInput)
+ throws IOException {
+
+ String s = (String) valueInput;
+ int i = s.indexOf('?');
+ if (i < 0 || i == s.length() - 1)
+ return null;
+ else
+ return s.substring(i + 1);
+ }
+
+ public Object clearIndexKey(Object valueData)
+ throws IOException {
+
+ String s = (String) valueData;
+ int i = s.indexOf('?');
+ if (i < 0 || i == s.length() - 1)
+ return null;
+ else
+ return s.substring(0, i);
+ }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/Suite.java
new file mode 100644
index 000000000..a452d2a38
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/Suite.java
@@ -0,0 +1,34 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(SerialBindingTest.suite());
+ return suite;
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/TestClassCatalog.java b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/TestClassCatalog.java
new file mode 100644
index 000000000..6703e364e
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/serial/test/TestClassCatalog.java
@@ -0,0 +1,74 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestClassCatalog.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.serial.test;
+
+import com.sleepycat.bdb.bind.serial.ClassCatalog;
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import java.io.IOException;
+import java.io.ObjectStreamClass;
+import java.util.HashMap;
+
+/**
+ * @author Mark Hayes
+ */
+public class TestClassCatalog implements ClassCatalog {
+
+ private HashMap idToDescMap = new HashMap();
+ private HashMap nameToIdMap = new HashMap();
+ private HashMap nameToDescMap = new HashMap();
+ private int nextId = 1;
+
+ public TestClassCatalog() {
+ }
+
+ public void close()
+ throws IOException {
+ }
+
+ public synchronized byte[] getClassID(String className)
+ throws IOException {
+
+ try {
+ byte[] id = (byte[]) nameToIdMap.get(className);
+ if (id == null) {
+ Class cls = Class.forName(className);
+ ObjectStreamClass desc = ObjectStreamClass.lookup(cls);
+
+ String strId = String.valueOf(nextId);
+ id = strId.getBytes();
+ nextId += 1;
+
+ idToDescMap.put(strId, desc);
+ nameToIdMap.put(className, id);
+ nameToDescMap.put(className, desc);
+ }
+ return id;
+ } catch (ClassNotFoundException e) {
+ throw new IOExceptionWrapper(e);
+ }
+ }
+
+ public synchronized ObjectStreamClass getClassFormat(String className)
+ throws IOException {
+
+ throw new IOException("unimplemented");
+ }
+
+ public synchronized ObjectStreamClass getClassFormat(byte[] id)
+ throws IOException {
+
+ String strId = new String(id);
+ ObjectStreamClass desc = (ObjectStreamClass) idToDescMap.get(strId);
+ if (desc == null) {
+ throw new IOException("classID not found");
+ }
+ return desc;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/test/BindingSpeedTest.java b/db/test/scr024/src/com/sleepycat/bdb/bind/test/BindingSpeedTest.java
new file mode 100644
index 000000000..12c97e377
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/test/BindingSpeedTest.java
@@ -0,0 +1,302 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: BindingSpeedTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.test;
+
+import com.sleepycat.bdb.bind.DataType;
+import com.sleepycat.bdb.bind.serial.SerialInput;
+import com.sleepycat.bdb.bind.serial.SerialOutput;
+import com.sleepycat.bdb.bind.serial.test.TestClassCatalog;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.util.FastInputStream;
+import com.sleepycat.bdb.util.FastOutputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.Writer;
+import javax.xml.parsers.SAXParserFactory;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+
+/**
+ * @author Mark Hayes
+ */
+public class BindingSpeedTest extends TestCase {
+
+ static final String JAVA_UNSHARED = "java-unshared".intern();
+ static final String JAVA_SHARED = "java-shared".intern();
+ static final String XML_SAX = "xml-sax".intern();
+ static final String TUPLE = "tuple".intern();
+
+ static final int RUN_COUNT = 1000;
+ static final boolean VERBOSE = false;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run (suite());
+ }
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(new BindingSpeedTest(JAVA_UNSHARED));
+ suite.addTest(new BindingSpeedTest(JAVA_SHARED));
+ suite.addTest(new BindingSpeedTest(XML_SAX));
+ suite.addTest(new BindingSpeedTest(TUPLE));
+ return suite;
+ }
+
+ private String command;
+ private FastOutputStream fo;
+ private TupleOutput to;
+ private TestClassCatalog jtc;
+ private byte[] buf;
+ private XMLReader parser;
+
+ public BindingSpeedTest(String name) {
+
+ super("BindingSpeedTest." + name);
+ command = name;
+ }
+
+ public void runTest()
+ throws Exception {
+
+ System.out.println(getName());
+
+ boolean isTuple = false;
+ boolean isXmlSax = false;
+ boolean isSerial = false;
+ boolean isShared = false;
+ boolean isFixed = false;
+
+ int expectSize;
+
+ if (command == TUPLE) {
+ isTuple = true;
+ expectSize = 29;
+ } else if (command == XML_SAX) {
+ isXmlSax = true;
+ expectSize = 122;
+ } else if (command == JAVA_UNSHARED) {
+ isSerial = true;
+ expectSize = 181;
+ } else if (command == JAVA_SHARED) {
+ isSerial = true;
+ isShared = true;
+ expectSize = 41;
+ } else {
+ throw new Exception("invalid command: " + command);
+ }
+
+ // Do initialization
+
+ if (isTuple) {
+ initTuple();
+ } else if (isXmlSax) {
+ initXmlSax();
+ } else if (isSerial) {
+ if (isShared) {
+ initSerialShared();
+ } else {
+ initSerialUnshared();
+ }
+ }
+
+ // Prime the Java compiler
+
+ int size = 0;
+ for (int i = 0; i < RUN_COUNT; i += 1) {
+
+ if (isTuple) {
+ size = runTuple();
+ } else if (isXmlSax) {
+ size = runXmlSax();
+ } else if (isSerial) {
+ if (isShared) {
+ size = runSerialShared();
+ } else {
+ size = runSerialUnshared();
+ }
+ }
+ }
+
+ // Then run the timing tests
+
+ long startTime = System.currentTimeMillis();
+
+ for (int i = 0; i < RUN_COUNT; i += 1) {
+ if (isTuple) {
+ size = runTuple();
+ } else if (isXmlSax) {
+ size = runXmlSax();
+ } else if (isSerial) {
+ if (isShared) {
+ size = runSerialShared();
+ } else {
+ size = runSerialUnshared();
+ }
+ }
+ }
+
+ long stopTime = System.currentTimeMillis();
+
+ assertEquals("data size not expected", expectSize, size);
+
+ if (VERBOSE) {
+ System.out.println(command);
+ System.out.println("data size: " + size);
+ System.out.println("run time: " +
+ ((stopTime - startTime) / (double) RUN_COUNT));
+ }
+ }
+
+ void initSerialUnshared()
+ throws Exception {
+
+ fo = new FastOutputStream();
+ }
+
+ int runSerialUnshared()
+ throws Exception {
+
+ fo.reset();
+ ObjectOutputStream oos = new ObjectOutputStream(fo);
+ oos.writeObject(new Data());
+ byte[] bytes = fo.toByteArray();
+ FastInputStream fi = new FastInputStream(bytes);
+ ObjectInputStream ois = new ObjectInputStream(fi);
+ ois.readObject();
+ return bytes.length;
+ }
+
+ void initSerialShared()
+ throws Exception {
+
+ jtc = new TestClassCatalog();
+ fo = new FastOutputStream();
+ }
+
+ int runSerialShared()
+ throws Exception {
+
+ fo.reset();
+ SerialOutput oos = new SerialOutput(fo, jtc);
+ oos.writeObject(new Data());
+ byte[] bytes = fo.toByteArray();
+ FastInputStream fi = new FastInputStream(bytes);
+ SerialInput ois = new SerialInput(fi, jtc);
+ ois.readObject();
+ return (bytes.length - SerialOutput.getStreamHeader().length);
+ }
+
+ void initTuple()
+ throws Exception {
+
+ buf = new byte[500];
+ to = new TupleOutput(buf);
+ }
+
+ int runTuple()
+ throws Exception {
+
+ to.reset();
+ new Data().writeTuple(to);
+
+ TupleInput ti = new TupleInput(
+ to.getBufferBytes(), to.getBufferOffset(),
+ to.getBufferLength());
+ new Data().readTuple(ti);
+
+ return to.getBufferLength();
+ }
+
+ void initXmlSax()
+ throws Exception {
+
+ buf = new byte[500];
+ fo = new FastOutputStream();
+ SAXParserFactory saxFactory = SAXParserFactory.newInstance();
+ saxFactory.setNamespaceAware(true);
+ parser = saxFactory.newSAXParser().getXMLReader();
+ }
+
+ int runXmlSax()
+ throws Exception {
+
+ fo.reset();
+ OutputStreamWriter writer = new OutputStreamWriter(fo);
+ new Data().writeXmlText(writer);
+
+ byte[] bytes = fo.toByteArray();
+ FastInputStream fi = new FastInputStream(bytes);
+ InputSource input = new InputSource(fi);
+ parser.parse(input);
+
+ //InputStreamReader reader = new InputStreamReader(fi);
+ //new Data().readXmlText(??);
+
+ return bytes.length;
+ }
+
+ static class Data implements Serializable {
+
+ String field1 = "field1";
+ String field2 = "field2";
+ int field3 = 333;
+ int field4 = 444;
+ String field5 = "field5";
+
+ void readTuple(TupleInput _input)
+ throws IOException {
+
+ field1 = _input.readString();
+ field2 = _input.readString();
+ field3 = _input.readInt();
+ field4 = _input.readInt();
+ field5 = _input.readString();
+ }
+
+ void writeTuple(TupleOutput _output)
+ throws IOException {
+
+ _output.writeString(field1);
+ _output.writeString(field2);
+ _output.writeInt(field3);
+ _output.writeInt(field4);
+ _output.writeString(field5);
+ }
+
+ void writeXmlText(Writer writer)
+ throws IOException {
+
+ writer.write("<Data><Field1>");
+ writer.write(field1);
+ writer.write("</Field1><Field2>");
+ writer.write(field2);
+ writer.write("</Field2><Field3>");
+ writer.write(String.valueOf(field3));
+ writer.write("</Field3><Field4>");
+ writer.write(String.valueOf(field4));
+ writer.write("</Field4><Field5>");
+ writer.write(field5);
+ writer.write("</Field5></Data>");
+ writer.flush();
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/bind/test/Suite.java
new file mode 100644
index 000000000..f4a750278
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/test/Suite.java
@@ -0,0 +1,36 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(com.sleepycat.bdb.bind.tuple.test.Suite.suite());
+ suite.addTest(com.sleepycat.bdb.bind.serial.test.Suite.suite());
+ suite.addTest(BindingSpeedTest.suite());
+ return suite;
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/MarshalledObject.java b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/MarshalledObject.java
new file mode 100644
index 000000000..e8d53ffc0
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/MarshalledObject.java
@@ -0,0 +1,127 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: MarshalledObject.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple.test;
+
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleData;
+import com.sleepycat.bdb.bind.tuple.MarshalledTupleKeyEntity;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+public class MarshalledObject
+ implements MarshalledTupleData, MarshalledTupleKeyEntity {
+
+ private String data;
+ private String primaryKey;
+ private String indexKey1;
+ private String indexKey2;
+
+ public MarshalledObject() {
+ }
+
+ MarshalledObject(String data, String primaryKey,
+ String indexKey1, String indexKey2) {
+
+ this.data = data;
+ this.primaryKey = primaryKey;
+ this.indexKey1 = indexKey1;
+ this.indexKey2 = indexKey2;
+ }
+
+ String getData() {
+
+ return data;
+ }
+
+ String getPrimaryKey() {
+
+ return primaryKey;
+ }
+
+ String getIndexKey1() {
+
+ return indexKey1;
+ }
+
+ String getIndexKey2() {
+
+ return indexKey2;
+ }
+
+ int expectedDataLength() {
+
+ return data.length() + 1 +
+ indexKey1.length() + 1 +
+ indexKey2.length() + 1;
+ }
+
+ int expectedKeyLength() {
+
+ return primaryKey.length() + 1;
+ }
+
+ public void marshalData(TupleOutput dataOutput)
+ throws IOException {
+
+ dataOutput.writeString(data);
+ dataOutput.writeString(indexKey1);
+ dataOutput.writeString(indexKey2);
+ }
+
+ public void unmarshalData(TupleInput dataInput)
+ throws IOException {
+
+ data = dataInput.readString();
+ indexKey1 = dataInput.readString();
+ indexKey2 = dataInput.readString();
+ }
+
+ public void marshalPrimaryKey(TupleOutput keyOutput)
+ throws IOException {
+
+ keyOutput.writeString(primaryKey);
+ }
+
+ public void unmarshalPrimaryKey(TupleInput keyInput)
+ throws IOException {
+
+ primaryKey = keyInput.readString();
+ }
+
+ public void marshalIndexKey(String keyName, TupleOutput keyOutput)
+ throws IOException {
+
+ if ("1".equals(keyName)) {
+ if (indexKey1.length() > 0)
+ keyOutput.writeString(indexKey1);
+ } else if ("2".equals(keyName)) {
+ if (indexKey1.length() > 0)
+ keyOutput.writeString(indexKey2);
+ } else {
+ throw new IllegalArgumentException("Unknown keyName: " + keyName);
+ }
+ }
+
+ public void clearIndexKey(String keyName)
+ throws IOException {
+
+ if ("1".equals(keyName)) {
+ indexKey1 = "";
+ } else if ("2".equals(keyName)) {
+ indexKey2 = "";
+ } else {
+ throw new IllegalArgumentException("Unknown keyName: " + keyName);
+ }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/Suite.java
new file mode 100644
index 000000000..1a6dbe4c2
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/Suite.java
@@ -0,0 +1,36 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(TupleFormatTest.suite());
+ suite.addTest(TupleOrderingTest.suite());
+ suite.addTest(TupleBindingTest.suite());
+ return suite;
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleBindingTest.java b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleBindingTest.java
new file mode 100644
index 000000000..202257d58
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleBindingTest.java
@@ -0,0 +1,210 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleBindingTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import com.sleepycat.bdb.bind.SimpleBuffer;
+import com.sleepycat.bdb.bind.tuple.TupleBinding;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleInputBinding;
+import com.sleepycat.bdb.bind.tuple.TupleMarshalledBinding;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledBinding;
+import com.sleepycat.bdb.bind.tuple.TupleTupleMarshalledKeyExtractor;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+import java.io.IOException;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class TupleBindingTest extends TestCase {
+
+ private TupleFormat format;
+ private TupleFormat keyFormat;
+ private TupleFormat indexKeyFormat;
+ private DataBuffer buffer;
+ private DataBuffer keyBuffer;
+ private DataBuffer indexKeyBuffer;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(TupleBindingTest.class);
+ return suite;
+ }
+
+ public TupleBindingTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("TupleBindingTest." + getName());
+ format = new TupleFormat();
+ keyFormat = new TupleFormat();
+ indexKeyFormat = new TupleFormat();
+ buffer = new SimpleBuffer();
+ keyBuffer = new SimpleBuffer();
+ indexKeyBuffer = new SimpleBuffer();
+ }
+
+ public void runTest()
+ throws Throwable {
+
+ try {
+ super.runTest();
+ } catch (Exception e) {
+ throw ExceptionUnwrapper.unwrap(e);
+ }
+ }
+
+ private void primitiveBindingTest(Object val, int byteSize)
+ throws IOException {
+
+ Class cls = val.getClass();
+ DataBinding binding = TupleBinding.getPrimitiveBinding(cls, format);
+ assertSame(format, binding.getDataFormat());
+
+ binding.objectToData(val, buffer);
+ assertEquals(byteSize, buffer.getDataLength());
+
+ Object val2 = binding.dataToObject(buffer);
+ assertSame(cls, val2.getClass());
+ assertEquals(val, val2);
+
+ Object valWithWrongCls = (cls == String.class)
+ ? ((Object) new Integer(0)) : ((Object) new String(""));
+ try {
+ binding.objectToData(valWithWrongCls, buffer);
+ }
+ catch (ClassCastException expected) {}
+ }
+
+ public void testPrimitiveBindings()
+ throws IOException {
+
+ primitiveBindingTest("abc", 4);
+ primitiveBindingTest(new Character('a'), 2);
+ primitiveBindingTest(new Boolean(true), 1);
+ primitiveBindingTest(new Byte((byte) 123), 1);
+ primitiveBindingTest(new Short((short) 123), 2);
+ primitiveBindingTest(new Integer(123), 4);
+ primitiveBindingTest(new Long(123), 8);
+ primitiveBindingTest(new Float(123.123), 4);
+ primitiveBindingTest(new Double(123.123), 8);
+ }
+
+ public void testTupleInputBinding()
+ throws IOException {
+
+ DataBinding binding = new TupleInputBinding(format);
+ assertSame(format, binding.getDataFormat());
+
+ TupleOutput out = new TupleOutput();
+ out.writeString("abc");
+ binding.objectToData(new TupleInput(out), buffer);
+ assertEquals(4, buffer.getDataLength());
+
+ Object result = binding.dataToObject(buffer);
+ assertTrue(result instanceof TupleInput);
+ TupleInput in = (TupleInput) result;
+ assertEquals("abc", in.readString());
+ assertEquals(0, in.available());
+ }
+
+ // also tests TupleBinding since TupleMarshalledBinding extends it
+ public void testTupleMarshalledBinding()
+ throws IOException {
+
+ DataBinding binding =
+ new TupleMarshalledBinding(format, MarshalledObject.class);
+ assertSame(format, binding.getDataFormat());
+
+ MarshalledObject val = new MarshalledObject("abc", "", "", "");
+ binding.objectToData(val, buffer);
+ assertEquals(val.expectedDataLength(), buffer.getDataLength());
+
+ Object result = binding.dataToObject(buffer);
+ assertTrue(result instanceof MarshalledObject);
+ val = (MarshalledObject) result;
+ assertEquals("abc", val.getData());
+ }
+
+ // also tests TupleTupleBinding since TupleTupleMarshalledBinding extends
+ // it
+ public void testTupleTupleMarshalledBinding()
+ throws IOException {
+
+ EntityBinding binding =
+ new TupleTupleMarshalledBinding(keyFormat, format,
+ MarshalledObject.class);
+ assertSame(format, binding.getValueFormat());
+ assertSame(keyFormat, binding.getKeyFormat());
+
+ MarshalledObject val = new MarshalledObject("abc", "primary",
+ "index1", "index2");
+ binding.objectToValue(val, buffer);
+ assertEquals(val.expectedDataLength(), buffer.getDataLength());
+ binding.objectToKey(val, keyBuffer);
+ assertEquals(val.expectedKeyLength(), keyBuffer.getDataLength());
+
+ Object result = binding.dataToObject(keyBuffer, buffer);
+ assertTrue(result instanceof MarshalledObject);
+ val = (MarshalledObject) result;
+ assertEquals("abc", val.getData());
+ assertEquals("primary", val.getPrimaryKey());
+ assertEquals("index1", val.getIndexKey1());
+ assertEquals("index2", val.getIndexKey2());
+ }
+
+ // also tests TupleTupleKeyExtractor since TupleTupleMarshalledKeyExtractor
+ // extends it
+ public void testTupleTupleMarshalledKeyExtractor()
+ throws IOException {
+
+ TupleTupleMarshalledBinding binding =
+ new TupleTupleMarshalledBinding(keyFormat, format,
+ MarshalledObject.class);
+ KeyExtractor extractor =
+ new TupleTupleMarshalledKeyExtractor(binding, indexKeyFormat, "1",
+ false, true);
+ assertSame(format, extractor.getValueFormat());
+ assertNull(extractor.getPrimaryKeyFormat());
+ assertSame(indexKeyFormat, extractor.getIndexKeyFormat());
+
+ MarshalledObject val = new MarshalledObject("abc", "primary",
+ "index1", "index2");
+ binding.objectToValue(val, buffer);
+ binding.objectToKey(val, keyBuffer);
+
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ TupleInput in = indexKeyFormat.dataToInput(indexKeyBuffer);
+ assertEquals("index1", in.readString());
+
+ extractor.clearIndexKey(buffer);
+ extractor.extractIndexKey(keyBuffer, buffer, indexKeyBuffer);
+ assertEquals(0, indexKeyBuffer.getDataLength());
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleFormatTest.java b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleFormatTest.java
new file mode 100644
index 000000000..71c9b49b4
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleFormatTest.java
@@ -0,0 +1,721 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleFormatTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.SimpleBuffer;
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleInput;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import java.util.Arrays;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class TupleFormatTest extends TestCase {
+
+ private TupleFormat format;
+ private TupleInput in;
+ private TupleOutput out;
+ private DataBuffer buffer;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(TupleFormatTest.class);
+ return suite;
+ }
+
+ public TupleFormatTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("TupleFormatTest." + getName());
+ format = new TupleFormat();
+ buffer = new SimpleBuffer();
+ out = format.newOutput();
+ }
+
+ private void copyOutputToInput() {
+
+ format.outputToData(out, buffer);
+ assertEquals(out.size(), buffer.getDataLength());
+ in = format.dataToInput(buffer);
+ assertEquals(in.available(), buffer.getDataLength());
+ assertEquals(in.getBufferLength(), buffer.getDataLength());
+ }
+
+ private void stringTest(String val)
+ throws IOException {
+
+ out.reset();
+ out.writeString(val);
+ assertEquals(val.length() + 1, out.size()); // assume 1-byte chars
+ copyOutputToInput();
+ assertEquals(val, in.readString());
+ assertEquals(0, in.available());
+ }
+
+ public void testString()
+ throws IOException {
+
+ stringTest("");
+ stringTest("a");
+ stringTest("abc");
+
+ out.reset();
+ out.writeString("abc");
+ out.writeString("defg");
+ assertEquals(9, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readString());
+ assertEquals("defg", in.readString());
+ assertEquals(0, in.available());
+
+ out.reset();
+ out.writeString("abc");
+ out.writeString("defg");
+ out.writeString("hijkl");
+ assertEquals(15, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readString());
+ assertEquals("defg", in.readString());
+ assertEquals("hijkl", in.readString());
+ assertEquals(0, in.available());
+ }
+
+ private void fixedStringTest(char[] val)
+ throws IOException {
+
+ out.reset();
+ out.writeString(val);
+ assertEquals(val.length, out.size()); // assume 1 byte chars
+ copyOutputToInput();
+ char[] val2 = new char[val.length];
+ in.readString(val2);
+ assertTrue(Arrays.equals(val, val2));
+ assertEquals(0, in.available());
+ in.reset();
+ String val3 = in.readString(val.length);
+ assertTrue(Arrays.equals(val, val3.toCharArray()));
+ assertEquals(0, in.available());
+ }
+
+ public void testFixedString()
+ throws IOException {
+
+ fixedStringTest(new char[0]);
+ fixedStringTest(new char[] {'a'});
+ fixedStringTest(new char[] {'a', 'b', 'c'});
+
+ out.reset();
+ out.writeString(new char[] {'a', 'b', 'c'});
+ out.writeString(new char[] {'d', 'e', 'f', 'g'});
+ assertEquals(7, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readString(3));
+ assertEquals("defg", in.readString(4));
+ assertEquals(0, in.available());
+
+ out.reset();
+ out.writeString(new char[] {'a', 'b', 'c'});
+ out.writeString(new char[] {'d', 'e', 'f', 'g'});
+ out.writeString(new char[] {'h', 'i', 'j', 'k', 'l'});
+ assertEquals(12, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readString(3));
+ assertEquals("defg", in.readString(4));
+ assertEquals("hijkl", in.readString(5));
+ assertEquals(0, in.available());
+ }
+
+ private void charsTest(char[] val)
+ throws IOException {
+
+ for (int mode = 0; mode < 2; mode += 1) {
+ out.reset();
+ switch (mode) {
+ case 0: out.writeChars(val); break;
+ case 1: out.writeChars(new String(val)); break;
+ default: throw new IllegalStateException();
+ }
+ assertEquals(val.length * 2, out.size());
+ copyOutputToInput();
+ char[] val2 = new char[val.length];
+ in.readChars(val2);
+ assertTrue(Arrays.equals(val, val2));
+ assertEquals(0, in.available());
+ in.reset();
+ String val3 = in.readChars(val.length);
+ assertTrue(Arrays.equals(val, val3.toCharArray()));
+ assertEquals(0, in.available());
+ }
+ }
+
+ public void testChars()
+ throws IOException {
+
+ charsTest(new char[0]);
+ charsTest(new char[] {'a'});
+ charsTest(new char[] {'a', 'b', 'c'});
+
+ out.reset();
+ out.writeChars("abc");
+ out.writeChars("defg");
+ assertEquals(7 * 2, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readChars(3));
+ assertEquals("defg", in.readChars(4));
+ assertEquals(0, in.available());
+
+ out.reset();
+ out.writeChars("abc");
+ out.writeChars("defg");
+ out.writeChars("hijkl");
+ assertEquals(12 * 2, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readChars(3));
+ assertEquals("defg", in.readChars(4));
+ assertEquals("hijkl", in.readChars(5));
+ assertEquals(0, in.available());
+ }
+
+ private void bytesTest(char[] val)
+ throws IOException {
+
+ char[] valBytes = new char[val.length];
+ for (int i = 0; i < val.length; i += 1)
+ valBytes[i] = (char) (val[i] & 0xFF);
+
+ for (int mode = 0; mode < 2; mode += 1) {
+ out.reset();
+ switch (mode) {
+ case 0: out.writeBytes(val); break;
+ case 1: out.writeBytes(new String(val)); break;
+ default: throw new IllegalStateException();
+ }
+ assertEquals(val.length, out.size());
+ copyOutputToInput();
+ char[] val2 = new char[val.length];
+ in.readBytes(val2);
+ assertTrue(Arrays.equals(valBytes, val2));
+ assertEquals(0, in.available());
+ in.reset();
+ String val3 = in.readBytes(val.length);
+ assertTrue(Arrays.equals(valBytes, val3.toCharArray()));
+ assertEquals(0, in.available());
+ }
+ }
+
+ public void testBytes()
+ throws IOException {
+
+ bytesTest(new char[0]);
+ bytesTest(new char[] {'a'});
+ bytesTest(new char[] {'a', 'b', 'c'});
+ bytesTest(new char[] {0x7F00, 0x7FFF, 0xFF00, 0xFFFF});
+
+ out.reset();
+ out.writeBytes("abc");
+ out.writeBytes("defg");
+ assertEquals(7, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readBytes(3));
+ assertEquals("defg", in.readBytes(4));
+ assertEquals(0, in.available());
+
+ out.reset();
+ out.writeBytes("abc");
+ out.writeBytes("defg");
+ out.writeBytes("hijkl");
+ assertEquals(12, out.size());
+ copyOutputToInput();
+ assertEquals("abc", in.readBytes(3));
+ assertEquals("defg", in.readBytes(4));
+ assertEquals("hijkl", in.readBytes(5));
+ assertEquals(0, in.available());
+ }
+
+ private void booleanTest(boolean val)
+ throws IOException {
+
+ out.reset();
+ out.writeBoolean(val);
+ assertEquals(1, out.size());
+ copyOutputToInput();
+ assertEquals(val, in.readBoolean());
+ assertEquals(0, in.available());
+ }
+
+ public void testBoolean()
+ throws IOException {
+
+ booleanTest(true);
+ booleanTest(false);
+
+ out.reset();
+ out.writeBoolean(true);
+ out.writeBoolean(false);
+ assertEquals(2, out.size());
+ copyOutputToInput();
+ assertEquals(true, in.readBoolean());
+ assertEquals(false, in.readBoolean());
+ assertEquals(0, in.available());
+
+ out.reset();
+ out.writeBoolean(true);
+ out.writeBoolean(false);
+ out.writeBoolean(true);
+ assertEquals(3, out.size());
+ copyOutputToInput();
+ assertEquals(true, in.readBoolean());
+ assertEquals(false, in.readBoolean());
+ assertEquals(true, in.readBoolean());
+ assertEquals(0, in.available());
+ }
+
+ private void unsignedByteTest(int val)
+ throws IOException {
+
+ unsignedByteTest(val, val);
+ }
+
+ private void unsignedByteTest(int val, int expected)
+ throws IOException {
+
+ out.reset();
+ out.writeUnsignedByte(val);
+ assertEquals(1, out.size());
+ copyOutputToInput();
+ assertEquals(expected, in.readUnsignedByte());
+ }
+
+ public void testUnsignedByte()
+ throws IOException {
+
+ unsignedByteTest(0);
+ unsignedByteTest(1);
+ unsignedByteTest(254);
+ unsignedByteTest(255);
+ unsignedByteTest(256, 0);
+ unsignedByteTest(-1, 255);
+ unsignedByteTest(-2, 254);
+ unsignedByteTest(-255, 1);
+
+ out.reset();
+ out.writeUnsignedByte(0);
+ out.writeUnsignedByte(1);
+ out.writeUnsignedByte(255);
+ assertEquals(3, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readUnsignedByte());
+ assertEquals(1, in.readUnsignedByte());
+ assertEquals(255, in.readUnsignedByte());
+ assertEquals(0, in.available());
+ }
+
+ private void unsignedShortTest(int val)
+ throws IOException {
+
+ unsignedShortTest(val, val);
+ }
+
+ private void unsignedShortTest(int val, int expected)
+ throws IOException {
+
+ out.reset();
+ out.writeUnsignedShort(val);
+ assertEquals(2, out.size());
+ copyOutputToInput();
+ assertEquals(expected, in.readUnsignedShort());
+ }
+
+ public void testUnsignedShort()
+ throws IOException {
+
+ unsignedShortTest(0);
+ unsignedShortTest(1);
+ unsignedShortTest(255);
+ unsignedShortTest(256);
+ unsignedShortTest(257);
+ unsignedShortTest(Short.MAX_VALUE - 1);
+ unsignedShortTest(Short.MAX_VALUE);
+ unsignedShortTest(Short.MAX_VALUE + 1);
+ unsignedShortTest(0xFFFF - 1);
+ unsignedShortTest(0xFFFF);
+ unsignedShortTest(0xFFFF + 1, 0);
+ unsignedShortTest(0x7FFF0000, 0);
+ unsignedShortTest(0xFFFF0000, 0);
+ unsignedShortTest(-1, 0xFFFF);
+ unsignedShortTest(-2, 0xFFFF - 1);
+ unsignedShortTest(-0xFFFF, 1);
+
+ out.reset();
+ out.writeUnsignedShort(0);
+ out.writeUnsignedShort(1);
+ out.writeUnsignedShort(0xFFFF);
+ assertEquals(6, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readUnsignedShort());
+ assertEquals(1, in.readUnsignedShort());
+ assertEquals(0xFFFF, in.readUnsignedShort());
+ assertEquals(0, in.available());
+ }
+
+ private void unsignedIntTest(long val)
+ throws IOException {
+
+ unsignedIntTest(val, val);
+ }
+
+ private void unsignedIntTest(long val, long expected)
+ throws IOException {
+
+ out.reset();
+ out.writeUnsignedInt(val);
+ assertEquals(4, out.size());
+ copyOutputToInput();
+ assertEquals(expected, in.readUnsignedInt());
+ }
+
+ public void testUnsignedInt()
+ throws IOException {
+
+ unsignedIntTest(0L);
+ unsignedIntTest(1L);
+ unsignedIntTest(255L);
+ unsignedIntTest(256L);
+ unsignedIntTest(257L);
+ unsignedIntTest(Short.MAX_VALUE - 1L);
+ unsignedIntTest(Short.MAX_VALUE);
+ unsignedIntTest(Short.MAX_VALUE + 1L);
+ unsignedIntTest(Integer.MAX_VALUE - 1L);
+ unsignedIntTest(Integer.MAX_VALUE);
+ unsignedIntTest(Integer.MAX_VALUE + 1L);
+ unsignedIntTest(0xFFFFFFFFL - 1L);
+ unsignedIntTest(0xFFFFFFFFL);
+ unsignedIntTest(0xFFFFFFFFL + 1L, 0L);
+ unsignedIntTest(0x7FFFFFFF00000000L, 0L);
+ unsignedIntTest(0xFFFFFFFF00000000L, 0L);
+ unsignedIntTest(-1, 0xFFFFFFFFL);
+ unsignedIntTest(-2, 0xFFFFFFFFL - 1L);
+ unsignedIntTest(-0xFFFFFFFFL, 1L);
+
+ out.reset();
+ out.writeUnsignedInt(0L);
+ out.writeUnsignedInt(1L);
+ out.writeUnsignedInt(0xFFFFFFFFL);
+ assertEquals(12, out.size());
+ copyOutputToInput();
+ assertEquals(0L, in.readUnsignedInt());
+ assertEquals(1L, in.readUnsignedInt());
+ assertEquals(0xFFFFFFFFL, in.readUnsignedInt());
+ assertEquals(0L, in.available());
+ }
+
+ private void byteTest(int val)
+ throws IOException {
+
+ out.reset();
+ out.writeByte(val);
+ assertEquals(1, out.size());
+ copyOutputToInput();
+ assertEquals((byte) val, in.readByte());
+ }
+
+ public void testByte()
+ throws IOException {
+
+ byteTest(0);
+ byteTest(1);
+ byteTest(-1);
+ byteTest(Byte.MAX_VALUE - 1);
+ byteTest(Byte.MAX_VALUE);
+ byteTest(Byte.MAX_VALUE + 1);
+ byteTest(Byte.MIN_VALUE + 1);
+ byteTest(Byte.MIN_VALUE);
+ byteTest(Byte.MIN_VALUE - 1);
+ byteTest(0x7F);
+ byteTest(0xFF);
+ byteTest(0x7FFF);
+ byteTest(0xFFFF);
+ byteTest(0x7FFFFFFF);
+ byteTest(0xFFFFFFFF);
+
+ out.reset();
+ out.writeByte(0);
+ out.writeByte(1);
+ out.writeByte(-1);
+ assertEquals(3, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readByte());
+ assertEquals(1, in.readByte());
+ assertEquals(-1, in.readByte());
+ assertEquals(0, in.available());
+ }
+
+ private void shortTest(int val)
+ throws IOException {
+
+ out.reset();
+ out.writeShort(val);
+ assertEquals(2, out.size());
+ copyOutputToInput();
+ assertEquals((short) val, in.readShort());
+ }
+
+ public void testShort()
+ throws IOException {
+
+ shortTest(0);
+ shortTest(1);
+ shortTest(-1);
+ shortTest(Short.MAX_VALUE - 1);
+ shortTest(Short.MAX_VALUE);
+ shortTest(Short.MAX_VALUE + 1);
+ shortTest(Short.MIN_VALUE + 1);
+ shortTest(Short.MIN_VALUE);
+ shortTest(Short.MIN_VALUE - 1);
+ shortTest(0x7F);
+ shortTest(0xFF);
+ shortTest(0x7FFF);
+ shortTest(0xFFFF);
+ shortTest(0x7FFFFFFF);
+ shortTest(0xFFFFFFFF);
+
+ out.reset();
+ out.writeShort(0);
+ out.writeShort(1);
+ out.writeShort(-1);
+ assertEquals(3 * 2, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readShort());
+ assertEquals(1, in.readShort());
+ assertEquals(-1, in.readShort());
+ assertEquals(0, in.available());
+ }
+
+ private void intTest(int val)
+ throws IOException {
+
+ out.reset();
+ out.writeInt(val);
+ assertEquals(4, out.size());
+ copyOutputToInput();
+ assertEquals((int) val, in.readInt());
+ }
+
+ public void testInt()
+ throws IOException {
+
+ intTest(0);
+ intTest(1);
+ intTest(-1);
+ intTest(Integer.MAX_VALUE - 1);
+ intTest(Integer.MAX_VALUE);
+ intTest(Integer.MAX_VALUE + 1);
+ intTest(Integer.MIN_VALUE + 1);
+ intTest(Integer.MIN_VALUE);
+ intTest(Integer.MIN_VALUE - 1);
+ intTest(0x7F);
+ intTest(0xFF);
+ intTest(0x7FFF);
+ intTest(0xFFFF);
+ intTest(0x7FFFFFFF);
+ intTest(0xFFFFFFFF);
+
+ out.reset();
+ out.writeInt(0);
+ out.writeInt(1);
+ out.writeInt(-1);
+ assertEquals(3 * 4, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readInt());
+ assertEquals(1, in.readInt());
+ assertEquals(-1, in.readInt());
+ assertEquals(0, in.available());
+ }
+
+ private void longTest(long val)
+ throws IOException {
+
+ out.reset();
+ out.writeLong(val);
+ assertEquals(8, out.size());
+ copyOutputToInput();
+ assertEquals((long) val, in.readLong());
+ }
+
+ public void testLong()
+ throws IOException {
+
+ longTest(0);
+ longTest(1);
+ longTest(-1);
+ longTest(Long.MAX_VALUE - 1);
+ longTest(Long.MAX_VALUE);
+ longTest(Long.MAX_VALUE + 1);
+ longTest(Long.MIN_VALUE + 1);
+ longTest(Long.MIN_VALUE);
+ longTest(Long.MIN_VALUE - 1);
+ longTest(0x7F);
+ longTest(0xFF);
+ longTest(0x7FFF);
+ longTest(0xFFFF);
+ longTest(0x7FFFFFFF);
+ longTest(0xFFFFFFFF);
+ longTest(0x7FFFFFFFFFFFFFFFL);
+ longTest(0xFFFFFFFFFFFFFFFFL);
+
+ out.reset();
+ out.writeLong(0);
+ out.writeLong(1);
+ out.writeLong(-1);
+ assertEquals(3 * 8, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readLong());
+ assertEquals(1, in.readLong());
+ assertEquals(-1, in.readLong());
+ assertEquals(0, in.available());
+ }
+
+ private void floatTest(double val)
+ throws IOException {
+
+ out.reset();
+ out.writeFloat((float) val);
+ assertEquals(4, out.size());
+ copyOutputToInput();
+ if (Double.isNaN(val))
+ assertTrue(Float.isNaN(in.readFloat()));
+ else
+ assertEquals((float) val, in.readFloat(), 0);
+ }
+
+ public void testFloat()
+ throws IOException {
+
+ floatTest(0);
+ floatTest(1);
+ floatTest(-1);
+ floatTest(1.0);
+ floatTest(0.1);
+ floatTest(-1.0);
+ floatTest(-0.1);
+ floatTest(Float.NaN);
+ floatTest(Float.NEGATIVE_INFINITY);
+ floatTest(Float.POSITIVE_INFINITY);
+ floatTest(Short.MAX_VALUE);
+ floatTest(Short.MIN_VALUE);
+ floatTest(Integer.MAX_VALUE);
+ floatTest(Integer.MIN_VALUE);
+ floatTest(Long.MAX_VALUE);
+ floatTest(Long.MIN_VALUE);
+ floatTest(Float.MAX_VALUE);
+ floatTest(Float.MAX_VALUE + 1);
+ floatTest(Float.MIN_VALUE + 1);
+ floatTest(Float.MIN_VALUE);
+ floatTest(Float.MIN_VALUE - 1);
+ floatTest(0x7F);
+ floatTest(0xFF);
+ floatTest(0x7FFF);
+ floatTest(0xFFFF);
+ floatTest(0x7FFFFFFF);
+ floatTest(0xFFFFFFFF);
+ floatTest(0x7FFFFFFFFFFFFFFFL);
+ floatTest(0xFFFFFFFFFFFFFFFFL);
+
+ out.reset();
+ out.writeFloat(0);
+ out.writeFloat(1);
+ out.writeFloat(-1);
+ assertEquals(3 * 4, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readFloat(), 0);
+ assertEquals(1, in.readFloat(), 0);
+ assertEquals(-1, in.readFloat(), 0);
+ assertEquals(0, in.available(), 0);
+ }
+
+ private void doubleTest(double val)
+ throws IOException {
+
+ out.reset();
+ out.writeDouble((double) val);
+ assertEquals(8, out.size());
+ copyOutputToInput();
+ if (Double.isNaN(val))
+ assertTrue(Double.isNaN(in.readDouble()));
+ else
+ assertEquals((double) val, in.readDouble(), 0);
+ }
+
+ public void testDouble()
+ throws IOException {
+
+ doubleTest(0);
+ doubleTest(1);
+ doubleTest(-1);
+ doubleTest(1.0);
+ doubleTest(0.1);
+ doubleTest(-1.0);
+ doubleTest(-0.1);
+ doubleTest(Double.NaN);
+ doubleTest(Double.NEGATIVE_INFINITY);
+ doubleTest(Double.POSITIVE_INFINITY);
+ doubleTest(Short.MAX_VALUE);
+ doubleTest(Short.MIN_VALUE);
+ doubleTest(Integer.MAX_VALUE);
+ doubleTest(Integer.MIN_VALUE);
+ doubleTest(Long.MAX_VALUE);
+ doubleTest(Long.MIN_VALUE);
+ doubleTest(Float.MAX_VALUE);
+ doubleTest(Float.MIN_VALUE);
+ doubleTest(Double.MAX_VALUE - 1);
+ doubleTest(Double.MAX_VALUE);
+ doubleTest(Double.MAX_VALUE + 1);
+ doubleTest(Double.MIN_VALUE + 1);
+ doubleTest(Double.MIN_VALUE);
+ doubleTest(Double.MIN_VALUE - 1);
+ doubleTest(0x7F);
+ doubleTest(0xFF);
+ doubleTest(0x7FFF);
+ doubleTest(0xFFFF);
+ doubleTest(0x7FFFFFFF);
+ doubleTest(0xFFFFFFFF);
+ doubleTest(0x7FFFFFFFFFFFFFFFL);
+ doubleTest(0xFFFFFFFFFFFFFFFFL);
+
+ out.reset();
+ out.writeDouble(0);
+ out.writeDouble(1);
+ out.writeDouble(-1);
+ assertEquals(3 * 8, out.size());
+ copyOutputToInput();
+ assertEquals(0, in.readDouble(), 0);
+ assertEquals(1, in.readDouble(), 0);
+ assertEquals(-1, in.readDouble(), 0);
+ assertEquals(0, in.available(), 0);
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleOrderingTest.java b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleOrderingTest.java
new file mode 100644
index 000000000..ae9ef74b3
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/bind/tuple/test/TupleOrderingTest.java
@@ -0,0 +1,317 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleOrderingTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.bind.tuple.test;
+
+import com.sleepycat.bdb.bind.tuple.TupleFormat;
+import com.sleepycat.bdb.bind.tuple.TupleOutput;
+import java.io.IOException;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class TupleOrderingTest extends TestCase {
+
+ private TupleFormat format;
+ private TupleOutput out;
+ private byte[] prevBuf;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(TupleOrderingTest.class);
+ return suite;
+ }
+
+ public TupleOrderingTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("TupleOrderingTest." + getName());
+ format = new TupleFormat();
+ out = format.newOutput();
+ prevBuf = null;
+ }
+
+ /*
+ Each tuple written must be strictly less than (by comparison of bytes) the
+ tuple written just before it. The check() method compares bytes just
+ written to those written before the previous call to check().
+ */
+
+ private void check() {
+
+ check(-1);
+ }
+
+ private void check(int dataIndex) {
+
+ byte[] buf = new byte[out.size()];
+ System.arraycopy(out.getBufferBytes(), out.getBufferOffset(),
+ buf, 0, buf.length);
+ if (prevBuf != null) {
+ int errOffset = -1;
+ int len = Math.min(prevBuf.length, buf.length);
+ boolean areEqual = true;
+ for (int i = 0; i < len; i += 1) {
+ int val1 = prevBuf[i] & 0xFF;
+ int val2 = buf[i] & 0xFF;
+ if (val1 < val2) {
+ areEqual = false;
+ break;
+ } else if (val1 > val2) {
+ errOffset = i;
+ break;
+ }
+ }
+ if (areEqual) {
+ if (prevBuf.length < buf.length) {
+ areEqual = false;
+ } else if (prevBuf.length > buf.length) {
+ areEqual = false;
+ errOffset = buf.length + 1;
+ }
+ }
+ if (errOffset != -1 || areEqual) {
+ StringBuffer msg = new StringBuffer();
+ if (errOffset != -1)
+ msg.append("Left >= right at byte offset " + errOffset);
+ else if (areEqual)
+ msg.append("Bytes are equal");
+ else
+ throw new IllegalStateException();
+ msg.append("\nLeft hex bytes: ");
+ for (int i = 0; i < prevBuf.length; i += 1) {
+ msg.append(' ');
+ int val = prevBuf[i] & 0xFF;
+ if ((val & 0xF0) == 0) msg.append('0');
+ msg.append(Integer.toHexString(val));
+ }
+ msg.append("\nRight hex bytes:");
+ for (int i = 0; i < buf.length; i += 1) {
+ msg.append(' ');
+ int val = buf[i] & 0xFF;
+ if ((val & 0xF0) == 0) msg.append('0');
+ msg.append(Integer.toHexString(val));
+ }
+ if (dataIndex >= 0) {
+ msg.append("\nData index: " + dataIndex);
+ }
+ fail(msg.toString());
+ }
+ }
+ prevBuf = buf;
+ out.reset();
+ }
+
+ private void reset() {
+
+ prevBuf = null;
+ out.reset();
+ }
+
+ public void testString()
+ throws IOException {
+
+ final String[] DATA = {
+ "", "a", "ab", "b", "bb", "bba",
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeString(DATA[i]);
+ check(i);
+ }
+ reset();
+ out.writeString("a");
+ check();
+ out.writeString("a");
+ out.writeString("");
+ check();
+ out.writeString("a");
+ out.writeString("");
+ out.writeString("a");
+ check();
+ out.writeString("a");
+ out.writeString("b");
+ check();
+ out.writeString("aa");
+ check();
+ out.writeString("b");
+ check();
+ }
+
+ public void testFixedString()
+ throws IOException {
+
+ final char[][] DATA = {
+ {}, {'a'}, {'a', 'b'}, {'b'}, {'b', 'b'}, {0x7F}, {0xFF},
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeString(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testChars()
+ throws IOException {
+
+ final char[][] DATA = {
+ {}, {0}, {'a'}, {'a', 0}, {'a', 'b'}, {'b'}, {'b', 'b'},
+ {0x7F}, {0x7F, 0}, {0xFF}, {0xFF, 0},
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeChars(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testBytes()
+ throws IOException {
+
+ final char[][] DATA = {
+ {}, {0}, {'a'}, {'a', 0}, {'a', 'b'}, {'b'}, {'b', 'b'},
+ {0x7F}, {0xFF},
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeBytes(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testBoolean()
+ throws IOException {
+
+ final boolean[] DATA = {
+ false, true
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeBoolean(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testUnsignedByte()
+ throws IOException {
+
+ final int[] DATA = {
+ 0, 1, 0x7F, 0xFF
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeUnsignedByte(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testUnsignedShort()
+ throws IOException {
+
+ final int[] DATA = {
+ 0, 1, 0xFE, 0xFF, 0x800, 0x7FFF, 0xFFFF
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeUnsignedShort(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testUnsignedInt()
+ throws IOException {
+
+ final long[] DATA = {
+ 0, 1, 0xFE, 0xFF, 0x800, 0x7FFF, 0xFFFF, 0x80000,
+ 0x7FFFFFFF, 0x80000000, 0xFFFFFFFF
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeUnsignedInt(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testByte()
+ throws IOException {
+
+ final byte[] DATA = {
+ Byte.MIN_VALUE, Byte.MIN_VALUE + 1,
+ -1, 0, 1,
+ Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeByte(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testShort()
+ throws IOException {
+
+ final short[] DATA = {
+ Short.MIN_VALUE, Short.MIN_VALUE + 1,
+ Byte.MIN_VALUE, Byte.MIN_VALUE + 1,
+ -1, 0, 1,
+ Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
+ Short.MAX_VALUE - 1, Short.MAX_VALUE,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeShort(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testInt()
+ throws IOException {
+
+ final int[] DATA = {
+ Integer.MIN_VALUE, Integer.MIN_VALUE + 1,
+ Short.MIN_VALUE, Short.MIN_VALUE + 1,
+ Byte.MIN_VALUE, Byte.MIN_VALUE + 1,
+ -1, 0, 1,
+ Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
+ Short.MAX_VALUE - 1, Short.MAX_VALUE,
+ Integer.MAX_VALUE - 1, Integer.MAX_VALUE,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeInt(DATA[i]);
+ check(i);
+ }
+ }
+
+ public void testLong()
+ throws IOException {
+
+ final long[] DATA = {
+ Long.MIN_VALUE, Long.MIN_VALUE + 1,
+ Integer.MIN_VALUE, Integer.MIN_VALUE + 1,
+ Short.MIN_VALUE, Short.MIN_VALUE + 1,
+ Byte.MIN_VALUE, Byte.MIN_VALUE + 1,
+ -1, 0, 1,
+ Byte.MAX_VALUE - 1, Byte.MAX_VALUE,
+ Short.MAX_VALUE - 1, Short.MAX_VALUE,
+ Integer.MAX_VALUE - 1, Integer.MAX_VALUE,
+ Long.MAX_VALUE - 1, Long.MAX_VALUE,
+ };
+ for (int i = 0; i < DATA.length; i += 1) {
+ out.writeLong(DATA[i]);
+ check(i);
+ }
+ }
+
+ // floats and doubles are not ordered deterministically
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/README b/db/test/scr024/src/com/sleepycat/bdb/serial/test/README
new file mode 100644
index 000000000..7d01f8e42
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/README
@@ -0,0 +1,27 @@
+The StoredClassCatalogTest uses database files in the testdata directory to
+verify that old versions of a class can be deserialized using information in
+the class catalog.
+
+If the package name of the TestSerial class changes, or something else changes
+that would cause the serialVersionUID to change, follow these steps to
+recreate the database files:
+
+1. Rename TestSerial.java to 'x' or anything out of the way.
+2. Copy TestSerial.java.original to TestSerial.java.
+3. Comment out the serialVersionUID declaration in TestSerial.java.
+4. Delete the two catalogtest-* databases in the source testdata directory.
+5. Make and run the test.
+6. When the tests run they should print this warning:
+ *** WARNING: First time initialization can only be performed using a special
+ TestSerial class ***
+ If they don't, the existing database files are being used somehow, probably
+ because they are being found in the test jar file, which should have been
+ rebuilt without them.
+7. Copy the two catalog files generated by the test from the test output dir:
+ db-test/StoredClassCatalogTest-bdb/catalogtest-*
+ to the source testdata directory.
+8. Generate the serialVersionUID using:
+ serialver -classpath ... com.sleepycat.bdb.serial.test.TestSerial
+ and copy the result into both copies of the TestSerial.java file.
+9. Rename TestSerial.java to TestSerial.java.original and x to TestSerial.java.
+10. Make and run the tests again. They should pass with no warning message.
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/StoredClassCatalogTest.java b/db/test/scr024/src/com/sleepycat/bdb/serial/test/StoredClassCatalogTest.java
new file mode 100644
index 000000000..c9f350738
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/StoredClassCatalogTest.java
@@ -0,0 +1,197 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: StoredClassCatalogTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.serial.test;
+
+import com.sleepycat.bdb.bind.serial.SerialBinding;
+import com.sleepycat.bdb.bind.serial.SerialFormat;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredMap;
+import com.sleepycat.bdb.test.DbTestUtil;
+import com.sleepycat.bdb.test.TestEnv;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+import java.io.File;
+import java.util.Map;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class StoredClassCatalogTest extends TestCase
+ implements TransactionWorker {
+
+ private static final String CATALOG_FILE = "catalogtest-catalog.db";
+ private static final String STORE_FILE = "catalogtest-store.db";
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ for (int i = 0; i < TestEnv.ALL.length; i += 1) {
+ suite.addTest(new StoredClassCatalogTest(TestEnv.ALL[i]));
+ }
+ return suite;
+ }
+
+ private TestEnv testEnv;
+ private DbEnv env;
+ private StoredClassCatalog catalog;
+ private StoredClassCatalog catalog2;
+ private DataStore store;
+ private Map map;
+ private TransactionRunner runner;
+ private boolean dataExists;
+ private int openFlags;
+
+ public StoredClassCatalogTest(TestEnv testEnv) {
+
+ super("StoredClassCatalogTest-" + testEnv.getName());
+ this.testEnv = testEnv;
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(getName());
+ env = testEnv.open(getName());
+ runner = new TransactionRunner(env);
+ File dir = testEnv.getDirectory(getName());
+
+ openFlags = Db.DB_CREATE;
+ if (testEnv.isTxnMode())
+ openFlags |= Db.DB_AUTO_COMMIT;
+
+ if (DbTestUtil.copyResource(getClass(), CATALOG_FILE, dir) &&
+ DbTestUtil.copyResource(getClass(), STORE_FILE, dir)) {
+ dataExists = true;
+ }
+ catalog = new StoredClassCatalog(env, CATALOG_FILE,
+ null, openFlags);
+ catalog2 = new StoredClassCatalog(env, "new_catalog.db", null,
+ openFlags);
+
+ SerialFormat keyFormat = new SerialFormat(catalog,
+ String.class);
+ SerialFormat valueFormat = new SerialFormat(catalog,
+ TestSerial.class);
+ store = new DataStore(openDb(STORE_FILE),
+ keyFormat, valueFormat, null);
+
+ SerialBinding keyBinding = new SerialBinding(keyFormat);
+ SerialBinding valueBinding = new SerialBinding(valueFormat);
+ map = new StoredMap(store, keyBinding, valueBinding, true);
+ }
+
+ private Db openDb(String file)
+ throws Exception {
+
+ Db db = new Db(env, 0);
+ db.open(null, file, null, Db.DB_BTREE, openFlags, 0);
+ return db;
+ }
+
+ public void tearDown() {
+
+ try {
+ if (catalog != null) {
+ catalog.close();
+ catalog.close(); // should have no effect
+ catalog = null;
+ }
+ if (catalog2 != null) {
+ catalog2.close();
+ catalog2 = null;
+ }
+ if (store != null) {
+ store.close();
+ store = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.out.println("Ignored exception during tearDown: " + e);
+ }
+ }
+
+ public void runTest()
+ throws Exception {
+
+ runner.run(this);
+ }
+
+ public void doWork()
+ throws Exception {
+
+ if (dataExists) {
+ doTest();
+ } else {
+ firstTimeInit();
+ }
+ }
+
+ private void doTest()
+ throws Exception {
+
+ TestSerial one = (TestSerial) map.get("one");
+ TestSerial two = (TestSerial) map.get("two");
+ assertNotNull(one);
+ assertNotNull(two);
+ assertEquals(one, two.getOther());
+ assertNull(one.getStringField());
+ assertNull(two.getStringField());
+
+ TestSerial three = new TestSerial(two);
+ assertNotNull(three.getStringField());
+ map.put("three", three);
+ three = (TestSerial) map.get("three");
+ assertEquals(two, three.getOther());
+
+ // getClassFormat(String) is not normally called via bindings
+ assertNotNull(catalog.getClassFormat(TestSerial.class.getName()));
+ assertNotNull(catalog.getClassFormat(TestSerial.class.getName()));
+
+ // test with empty catalog
+ assertNotNull(catalog2.getClassFormat(TestSerial.class.getName()));
+ assertNotNull(catalog2.getClassFormat(TestSerial.class.getName()));
+ }
+
+ private void firstTimeInit() {
+
+ System.out.println("*** WARNING: First time initialization can " +
+ "only be performed using a special TestSerial class ***");
+ TestSerial one = new TestSerial(null);
+ TestSerial two = new TestSerial(one);
+ assertNull(one.getStringField());
+ assertNull(two.getStringField());
+ map.put("one", one);
+ map.put("two", two);
+ one = (TestSerial) map.get("one");
+ two = (TestSerial) map.get("two");
+ assertEquals(one, two.getOther());
+ assertNull(one.getStringField());
+ assertNull(two.getStringField());
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/serial/test/Suite.java
new file mode 100644
index 000000000..2b182efc7
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/Suite.java
@@ -0,0 +1,33 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.serial.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(StoredClassCatalogTest.suite());
+ suite.addTest(TupleSerialDbFactoryTest.suite());
+ return suite;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java
new file mode 100644
index 000000000..d49585b33
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java
@@ -0,0 +1,67 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestSerial.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.serial.test;
+
+/**
+ * @author Mark Hayes
+ */
+class TestSerial implements java.io.Serializable {
+
+ static final long serialVersionUID = -3738980000390384920L;
+
+ private int i = 123;
+ private TestSerial other;
+
+ // The following field 's' was added after this class was compiled and
+ // serialized instances were saved in resource files. This allows testing
+ // that the original stored instances can be deserialized after changing
+ // the class. The serialVersionUID is needed for this according to Java
+ // serialization rules, and was generated with the serialver tool.
+ //
+ private String s = "string";
+
+ TestSerial(TestSerial other) {
+
+ this.other = other;
+ }
+
+ TestSerial getOther() {
+
+ return other;
+ }
+
+ int getIntField() {
+
+ return i;
+ }
+
+ String getStringField() {
+
+ return s; // this returned null before field 's' was added.
+ }
+
+ public boolean equals(Object object) {
+
+ try {
+ TestSerial o = (TestSerial) object;
+ if ((o.other == null) ? (this.other != null)
+ : (!o.other.equals(this.other)))
+ return false;
+ if (this.i != o.i)
+ return false;
+ // the following test was not done before field 's' was added
+ if ((o.s == null) ? (this.s != null)
+ : (!o.s.equals(this.s)))
+ return false;
+ return true;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java.original b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java.original
new file mode 100644
index 000000000..bcb6e43e5
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TestSerial.java.original
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestSerial.java.original,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.serial.test;
+
+class TestSerial implements java.io.Serializable
+{
+ static final long serialVersionUID = -3738980000390384920L;
+
+ private int i = 123;
+ private TestSerial other;
+
+ // The following field 's' was added after this class was compiled and
+ // serialized instances were saved in resource files. This allows testing
+ // that the original stored instances can be deserialized after changing
+ // the class. The serialVersionUID is needed for this according to Java
+ // serialization rules, and was generated with the serialver tool.
+ //
+ //private String s = "string";
+
+ TestSerial(TestSerial other)
+ {
+ this.other = other;
+ }
+
+ TestSerial getOther()
+ {
+ return other;
+ }
+
+ int getIntField()
+ {
+ return i;
+ }
+
+ String getStringField()
+ {
+ return null; // this returned null before field 's' was added.
+ }
+
+ public boolean equals(Object object)
+ {
+ try
+ {
+ TestSerial o = (TestSerial) object;
+ if ((o.other == null) ? (this.other != null)
+ : (!o.other.equals(this.other)))
+ return false;
+ if (this.i != o.i)
+ return false;
+ // the following test was not done before field 's' was added
+ /*
+ if ((o.s == null) ? (this.s != null)
+ : (!o.s.equals(this.s)))
+ return false;
+ */
+ return true;
+ }
+ catch (ClassCastException e)
+ {
+ return false;
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/TupleSerialDbFactoryTest.java b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TupleSerialDbFactoryTest.java
new file mode 100644
index 000000000..2d1c72b19
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/TupleSerialDbFactoryTest.java
@@ -0,0 +1,202 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TupleSerialDbFactoryTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.serial.test;
+
+import com.sleepycat.bdb.bind.serial.test.MarshalledObject;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.factory.TupleSerialDbFactory;
+import com.sleepycat.bdb.test.TestEnv;
+import java.util.Map;
+import java.util.SortedMap;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class TupleSerialDbFactoryTest extends TestCase
+ implements TransactionWorker {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ for (int i = 0; i < TestEnv.ALL.length; i += 1) {
+ for (int sorted = 0; sorted < 2; sorted += 1) {
+ suite.addTest(new TupleSerialDbFactoryTest(TestEnv.ALL[i],
+ sorted != 0));
+ }
+ }
+ return suite;
+ }
+
+ private TestEnv testEnv;
+ private DbEnv env;
+ private StoredClassCatalog catalog;
+ private TransactionRunner runner;
+ private TupleSerialDbFactory factory;
+ private DataStore store1;
+ private DataStore store2;
+ private DataIndex index1;
+ private ForeignKeyIndex index2;
+ private boolean isSorted;
+ private Map storeMap1;
+ private Map storeMap2;
+ private Map indexMap1;
+ private Map indexMap2;
+
+ public TupleSerialDbFactoryTest(TestEnv testEnv, boolean isSorted) {
+
+ super(null);
+
+ this.testEnv = testEnv;
+ this.isSorted = isSorted;
+
+ String name = "TupleSerialDbFactoryTest-" + testEnv.getName();
+ name += isSorted ? "-sorted" : "-unsorted";
+ setName(name);
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(getName());
+ env = testEnv.open(getName());
+ runner = new TransactionRunner(env);
+ createDatabase();
+ }
+
+ public void tearDown() {
+
+ try {
+ if (store1 != null) {
+ store1.close();
+ store1 = null;
+ }
+ if (store2 != null) {
+ store2.close();
+ store2 = null;
+ }
+ if (catalog != null) {
+ catalog.close();
+ catalog = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ } catch (Exception e) {
+ System.out.println("Ignored exception during tearDown: " + e);
+ }
+ }
+
+ public void runTest()
+ throws Exception {
+
+ runner.run(this);
+ }
+
+ public void doWork()
+ throws Exception {
+
+ createViews();
+ writeAndRead();
+ }
+
+ private void createDatabase()
+ throws Exception {
+
+ int openFlags = Db.DB_CREATE;
+ if (testEnv.isTxnMode())
+ openFlags |= Db.DB_AUTO_COMMIT;
+
+ catalog = new StoredClassCatalog(env, "catalog.db", null, openFlags);
+ factory = new TupleSerialDbFactory(catalog);
+ assertSame(catalog, factory.getCatalog());
+
+ int type = isSorted ? Db.DB_BTREE : Db.DB_HASH;
+ Db db;
+
+ db = new Db(env, 0);
+ db.open(null, "store1.db", null, type, openFlags, 0);
+ store1 = factory.newDataStore(db, MarshalledObject.class, null);
+
+ db = new Db(env, 0);
+ db.open(null, "index1.db", null, type, openFlags, 0);
+ index1 = factory.newDataIndex(store1, db, "1", false, true);
+
+ db = new Db(env, 0);
+ db.open(null, "store2.db", null, type, openFlags, 0);
+ store2 = factory.newDataStore(db, MarshalledObject.class, null);
+
+ db = new Db(env, 0);
+ db.open(null, "index2.db", null, type, openFlags, 0);
+ index2 = factory.newForeignKeyIndex(store2, db, "2", false, true,
+ store1,
+ ForeignKeyIndex.ON_DELETE_CASCADE);
+ }
+
+ private void createViews()
+ throws Exception {
+
+ if (isSorted) {
+ storeMap1 = factory.newSortedMap(store1, String.class, true);
+ storeMap2 = factory.newSortedMap(store2, String.class, true);
+ indexMap1 = factory.newSortedMap(index1, String.class, true);
+ indexMap2 = factory.newSortedMap(index2, String.class, true);
+ } else {
+ storeMap1 = factory.newMap(store1, String.class, true);
+ storeMap2 = factory.newMap(store2, String.class, true);
+ indexMap1 = factory.newMap(index1, String.class, true);
+ indexMap2 = factory.newMap(index2, String.class, true);
+ }
+ }
+
+ private void writeAndRead()
+ throws Exception {
+
+ MarshalledObject o1 = new MarshalledObject("data1", "pk1", "ik1", "");
+ assertNull(storeMap1.put(null, o1));
+
+ assertEquals(o1, storeMap1.get("pk1"));
+ assertEquals(o1, indexMap1.get("ik1"));
+
+ MarshalledObject o2 = new MarshalledObject("data2", "pk2", "", "pk1");
+ assertNull(storeMap2.put(null, o2));
+
+ assertEquals(o2, storeMap2.get("pk2"));
+ assertEquals(o2, indexMap2.get("pk1"));
+
+ /*
+ * store1 contains o1 with primary key "pk1" and index key "ik1"
+ * store2 contains o2 with primary key "pk2" and foreign key "pk1"
+ * which is the primary key of store1
+ */
+
+ storeMap1.remove("pk1");
+ assertNull(storeMap1.get("pk1"));
+ assertNull(indexMap1.get("ik1"));
+ assertNull(storeMap2.get("pk2"));
+ assertNull(indexMap2.get("pk1"));
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-catalog.db b/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-catalog.db
new file mode 100644
index 000000000..76a288164
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-catalog.db
Binary files differ
diff --git a/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-store.db b/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-store.db
new file mode 100644
index 000000000..70bef8298
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/serial/test/testdata/catalogtest-store.db
Binary files differ
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/CollectionTest.java b/db/test/scr024/src/com/sleepycat/bdb/test/CollectionTest.java
new file mode 100644
index 000000000..25b0fc063
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/CollectionTest.java
@@ -0,0 +1,2695 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: CollectionTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.CurrentTransaction;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.MapEntry;
+import com.sleepycat.bdb.collection.StoredCollection;
+import com.sleepycat.bdb.collection.StoredCollections;
+import com.sleepycat.bdb.collection.StoredContainer;
+import com.sleepycat.bdb.collection.StoredEntrySet;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.bdb.collection.StoredKeySet;
+import com.sleepycat.bdb.collection.StoredValueSet;
+import com.sleepycat.bdb.collection.StoredList;
+import com.sleepycat.bdb.collection.StoredMap;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.collection.StoredSortedEntrySet;
+import com.sleepycat.bdb.collection.StoredSortedKeySet;
+import com.sleepycat.bdb.collection.StoredSortedValueSet;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class CollectionTest extends TestCase {
+
+ private static final int NONE = 0;
+ private static final int SUB = 1;
+ private static final int HEAD = 2;
+ private static final int TAIL = 3;
+
+ private static final int MAX_KEY = 6; // must be a multiple of 2
+
+ private int beginKey = 1;
+ private int endKey = MAX_KEY;
+
+ private DbEnv env;
+ private CurrentTransaction currentTxn;
+ private DataStore store;
+ private DataIndex index;
+ private boolean isEntityBinding;
+ private boolean isAutoCommit;
+ private TestStore testStore;
+ private String testName;
+ private DataBinding keyBinding;
+ private DataBinding valueBinding;
+ private EntityBinding entityBinding;
+ private TransactionRunner readRunner;
+ private TransactionRunner writeRunner;
+ private TransactionRunner writeIterRunner;
+ private TestEnv testEnv;
+
+ private StoredMap map;
+ private StoredMap imap; // insertable map (primary store for indexed map)
+ private StoredSortedMap smap; // sorted map (null or equal to map)
+ private StoredMap saveMap;
+ private StoredSortedMap saveSMap;
+ private int rangeType;
+ private StoredList list;
+ private StoredList ilist; // insertable list (primary store for index list)
+ private StoredList saveList;
+ private StoredKeySet keySet;
+ private StoredValueSet valueSet;
+
+ /**
+ * Runs a command line collection test.
+ * @see #usage
+ */
+ public static void main(String[] args)
+ throws Exception {
+
+ if (args.length == 1 &&
+ (args[0].equals("-h") || args[0].equals("-help"))) {
+ usage();
+ } else {
+ junit.textui.TestRunner.run(suite(args));
+ }
+ }
+
+ private static void usage() {
+
+ System.out.println(
+ "Usage: java com.sleepycat.bdb.test.CollectionTest\n" +
+ " -h | -help\n" +
+ " [testName]...\n" +
+ " where testName has the format:\n" +
+ " <env>-<store>-{entity|value}\n" +
+ " <env> is:\n" +
+ " bdb | cdb | txn\n" +
+ " <store> is:\n" +
+ " btree-uniq | btree-dup | btree-dupsort | btree-recnum |\n" +
+ " hash-uniq | hash-dup | hash-dupsort |\n" +
+ " queue | recno | recno-renum\n" +
+ " For example: bdb-btree-uniq-entity\n" +
+ " If no arguments are given then all tests are run.");
+ System.exit(2);
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ return suite(null);
+ }
+
+ static Test suite(String[] args)
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ for (int i = 0; i < TestEnv.ALL.length; i += 1) {
+ for (int j = 0; j < TestStore.ALL.length; j += 1) {
+ for (int k = 0; k < 2; k += 1) {
+ boolean entityBinding = (k != 0);
+
+ addTest(args, suite, new CollectionTest(
+ TestEnv.ALL[i], TestStore.ALL[j],
+ entityBinding, false));
+
+ if (TestEnv.ALL[i] == TestEnv.TXN) {
+ addTest(args, suite, new CollectionTest(
+ TestEnv.ALL[i], TestStore.ALL[j],
+ entityBinding, true));
+ }
+ }
+ }
+ }
+ return suite;
+ }
+
+ private static void addTest(String[] args, TestSuite suite,
+ CollectionTest test) {
+
+ if (args == null || args.length == 0) {
+ suite.addTest(test);
+ } else {
+ for (int t = 0; t < args.length; t += 1) {
+ if (args[t].equals(test.testName)) {
+ suite.addTest(test);
+ break;
+ }
+ }
+ }
+ }
+
+ public CollectionTest(TestEnv testEnv, TestStore testStore,
+ boolean isEntityBinding, boolean isAutoCommit) {
+
+ super(null);
+
+ this.testEnv = testEnv;
+ this.testStore = testStore;
+ this.isEntityBinding = isEntityBinding;
+ this.isAutoCommit = isAutoCommit;
+
+ keyBinding = testStore.getKeyBinding();
+ valueBinding = testStore.getValueBinding();
+ entityBinding = testStore.getEntityBinding();
+
+ testName = testEnv.getName() + '-' + testStore.getName() +
+ (isEntityBinding ? "-entity" : "-value") +
+ (isAutoCommit ? "-autocommit" : "");
+ setName(testName);
+ }
+
+ public void runTest()
+ throws Exception {
+
+ System.out.println(DbTestUtil.qualifiedTestName(this));
+ try {
+ env = testEnv.open(testName);
+ currentTxn = CurrentTransaction.getInstance(env);
+
+ // For testing auto-commit, use a normal (transactional) runner for
+ // all reading and for writing via an iterator, and a do-nothing
+ // runner for writing via collections; if auto-commit is tested,
+ // the per-collection auto-commit property will be set elsewhere.
+ //
+ TransactionRunner normalRunner = new TransactionRunner(env);
+ TransactionRunner nullRunner = new NullTransactionRunner(env);
+ readRunner = nullRunner;
+ writeIterRunner = normalRunner;
+ if (isAutoCommit)
+ writeRunner = nullRunner;
+ else
+ writeRunner = normalRunner;
+
+ store = testStore.open(env, "unindexed.db");
+ testUnindexed();
+ store.close();
+
+ TestStore indexOf = testStore.getIndexOf();
+ if (indexOf != null) {
+ store = indexOf.open(env, "indexed.db");
+ index = testStore.openIndex(store, "index.db");
+ testIndexed();
+ store.close();
+ }
+ env.close(0);
+ } catch (Exception e) {
+ throw ExceptionUnwrapper.unwrap(e);
+ }
+ }
+
+ void testCreation(StoredContainer cont)
+ throws Exception {
+
+ assertEquals(index != null, cont.isIndexed());
+ assertEquals(testStore.isOrdered(), cont.isOrdered());
+ assertEquals(testStore.areKeysRenumbered(), cont.areKeysRenumbered());
+ assertEquals(testStore.areDuplicatesAllowed(),
+ cont.areDuplicatesAllowed());
+ assertEquals(isAutoCommit, cont.isAutoCommit());
+ assertEquals(testEnv == TestEnv.TXN, cont.isTransactional());
+ try {
+ cont.size();
+ fail();
+ }
+ catch (UnsupportedOperationException expected) {}
+ }
+
+ void testMapCreation(Map map)
+ throws Exception {
+
+ assertTrue(map.values() instanceof Set);
+ assertEquals(testStore.isOrdered(),
+ map.keySet() instanceof SortedSet);
+ assertEquals(testStore.isOrdered(),
+ map.entrySet() instanceof SortedSet);
+ assertEquals(testStore.isOrdered() &&
+ (isEntityBinding || index != null),
+ map.values() instanceof SortedSet);
+ }
+
+ void testUnindexed()
+ throws Exception {
+
+ // create primary map
+ if (testStore.isOrdered()) {
+ if (isEntityBinding) {
+ smap = new StoredSortedMap(store, keyBinding,
+ entityBinding, true);
+ valueSet = new StoredSortedValueSet(store, entityBinding,
+ true);
+ } else {
+ smap = new StoredSortedMap(store, keyBinding,
+ valueBinding, true);
+ // non-indexed sorted value set is not possible since key
+ // cannot be derived for performing subSet, etc.
+ }
+ keySet = new StoredSortedKeySet(store, keyBinding, true);
+ map = smap;
+ } else {
+ if (isEntityBinding) {
+ map = new StoredMap(store, keyBinding, entityBinding, true);
+ valueSet = new StoredValueSet(store, entityBinding, true);
+ } else {
+ map = new StoredMap(store, keyBinding, valueBinding, true);
+ valueSet = new StoredValueSet(store, valueBinding, true);
+ }
+ smap = null;
+ keySet = new StoredKeySet(store, keyBinding, true);
+ }
+ imap = map;
+
+ // create primary list
+ if (testStore.hasRecNumAccess()) {
+ if (isEntityBinding) {
+ ilist = new StoredList(store, entityBinding, true);
+ } else {
+ ilist = new StoredList(store, valueBinding, true);
+ }
+ list = ilist;
+ } else {
+ try {
+ if (isEntityBinding) {
+ ilist = new StoredList(store, entityBinding, true);
+ } else {
+ ilist = new StoredList(store, valueBinding, true);
+ }
+ fail();
+ } catch (IllegalArgumentException expected) {}
+ }
+
+ setAutoCommit();
+ testCreation(map);
+ if (list != null) {
+ testCreation(list);
+ assertNotNull(smap);
+ }
+ testMapCreation(map);
+ addAll();
+ testAll();
+ }
+
+ void testIndexed()
+ throws Exception {
+
+ // create primary map
+ if (isEntityBinding) {
+ map = new StoredMap(store, keyBinding, entityBinding, true);
+ } else {
+ map = new StoredMap(store, keyBinding, valueBinding, true);
+ }
+ imap = map;
+ smap = null;
+ // create primary list
+ if (testStore.hasRecNumAccess()) {
+ if (isEntityBinding) {
+ list = new StoredList(store, entityBinding, true);
+ } else {
+ list = new StoredList(store, valueBinding, true);
+ }
+ ilist = list;
+ }
+
+ setAutoCommit();
+ addAll();
+ readAll();
+
+ // create indexed map (keySet/valueSet)
+ if (testStore.isOrdered()) {
+ if (isEntityBinding) {
+ map = smap = new StoredSortedMap(index, keyBinding,
+ entityBinding, true);
+ valueSet = new StoredSortedValueSet(index, entityBinding,
+ true);
+ } else {
+ map = smap = new StoredSortedMap(index, keyBinding,
+ valueBinding, true);
+ valueSet = new StoredSortedValueSet(index, valueBinding, true);
+ }
+ keySet = new StoredSortedKeySet(index, keyBinding, true);
+ } else {
+ if (isEntityBinding) {
+ map = new StoredMap(index, keyBinding, entityBinding, true);
+ valueSet = new StoredValueSet(index, entityBinding, true);
+ } else {
+ map = new StoredMap(index, keyBinding, valueBinding, true);
+ valueSet = new StoredValueSet(index, valueBinding, true);
+ }
+ smap = null;
+ keySet = new StoredKeySet(index, keyBinding, true);
+ }
+
+ // create indexed list
+ if (testStore.hasRecNumAccess()) {
+ if (isEntityBinding) {
+ list = new StoredList(index, entityBinding, true);
+ } else {
+ list = new StoredList(index, valueBinding, true);
+ }
+ } else {
+ try {
+ if (isEntityBinding) {
+ list = new StoredList(index, entityBinding, true);
+ } else {
+ list = new StoredList(index, valueBinding, true);
+ }
+ fail();
+ }
+ catch (IllegalArgumentException expected) {}
+ }
+
+ setAutoCommit();
+ testCreation(map);
+ testCreation((StoredContainer) map.values());
+ testCreation((StoredContainer) map.keySet());
+ testCreation((StoredContainer) map.entrySet());
+ if (list != null) {
+ testCreation(list);
+ assertNotNull(smap);
+ }
+ testMapCreation(map);
+ testAll();
+ }
+
+ void setAutoCommit() {
+
+ if (isAutoCommit) {
+ if (map != null)
+ map = (StoredMap)
+ StoredCollections.autoCommitMap(map);
+ if (imap != null)
+ imap = (StoredMap)
+ StoredCollections.autoCommitMap(imap);
+ if (smap != null)
+ smap = (StoredSortedMap)
+ StoredCollections.autoCommitSortedMap(smap);
+ if (keySet != null)
+ keySet = (StoredKeySet)
+ StoredCollections.autoCommitSet(keySet);
+ if (valueSet != null)
+ valueSet = (StoredValueSet)
+ StoredCollections.autoCommitSet(valueSet);
+ if (list != null)
+ list = (StoredList)
+ StoredCollections.autoCommitList(list);
+ if (ilist != null)
+ ilist = (StoredList)
+ StoredCollections.autoCommitList(ilist);
+ }
+ }
+
+ void testAll()
+ throws Exception {
+
+ checkKeySetAndValueSet();
+ readAll();
+ updateAll();
+ readAll();
+ if (!map.areKeysRenumbered()) {
+ removeOdd();
+ readEven();
+ addOdd();
+ readAll();
+ removeOddIter();
+ readEven();
+ if (imap.areDuplicatesAllowed()) {
+ addOddDup();
+ } else {
+ addOdd();
+ }
+ readAll();
+ removeOddEntry();
+ readEven();
+ addOdd();
+ readAll();
+ if (isEntityBinding) {
+ removeOddEntity();
+ readEven();
+ addOddEntity();
+ readAll();
+ }
+ bulkOperations();
+ }
+ if (isListAddAllowed()) {
+ removeOddList();
+ readEvenList();
+ addOddList();
+ readAll();
+ if (!isEntityBinding) {
+ removeOddListValue();
+ readEvenList();
+ addOddList();
+ readAll();
+ }
+ }
+ if (list != null) {
+ bulkListOperations();
+ } else {
+ listOperationsNotAllowed();
+ }
+ if (smap != null) {
+ readWriteRange(SUB, 1, 1);
+ readWriteRange(HEAD, 1, 1);
+ readWriteRange(SUB, 1, MAX_KEY);
+ readWriteRange(HEAD, 1, MAX_KEY);
+ readWriteRange(TAIL, 1, MAX_KEY);
+ readWriteRange(SUB, 1, 3);
+ readWriteRange(HEAD, 1, 3);
+ readWriteRange(SUB, 2, 2);
+ readWriteRange(SUB, 2, MAX_KEY);
+ readWriteRange(TAIL, 2, MAX_KEY);
+ readWriteRange(SUB, MAX_KEY, MAX_KEY);
+ readWriteRange(TAIL, MAX_KEY, MAX_KEY);
+ readWriteRange(SUB, MAX_KEY + 1, MAX_KEY + 1);
+ readWriteRange(TAIL, MAX_KEY + 1, MAX_KEY + 1);
+ readWriteRange(SUB, 0, 0);
+ readWriteRange(HEAD, 0, 0);
+ }
+ updateAll();
+ readAll();
+ if (map.areDuplicatesAllowed()) {
+ readWriteDuplicates();
+ readAll();
+ } else {
+ duplicatesNotAllowed();
+ readAll();
+ }
+ if (testEnv.isCdbMode()) {
+ testCdbLocking();
+ }
+ removeAll();
+ if (isListAddAllowed()) {
+ testIterAddList();
+ clearAll();
+ }
+ if (imap.areDuplicatesAllowed()) {
+ testIterAddDuplicates();
+ clearAll();
+ }
+ if (isListAddAllowed()) {
+ addAllList();
+ readAll();
+ removeAllList();
+ }
+ appendAll();
+ }
+
+ void checkKeySetAndValueSet() {
+
+ // use bulk operations to check that explicitly constructed
+ // keySet/valueSet are equivalent
+ assertTrue(imap.keySet().equals(keySet));
+ if (valueSet != null)
+ assertTrue(imap.values().equals(valueSet));
+ }
+
+ void addAll()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertTrue(imap.isEmpty());
+ Iterator iter = imap.entrySet().iterator();
+ try {
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ assertEquals(0, imap.keySet().toArray().length);
+ assertEquals(0, imap.keySet().toArray(new Object[0]).length);
+ assertEquals(0, imap.entrySet().toArray().length);
+ assertEquals(0, imap.entrySet().toArray(new Object[0]).length);
+ assertEquals(0, imap.values().toArray().length);
+ assertEquals(0, imap.values().toArray(new Object[0]).length);
+
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(imap.get(key));
+ assertTrue(!imap.keySet().contains(key));
+ assertTrue(!imap.values().contains(val));
+ assertNull(imap.put(key, val));
+ assertEquals(val, imap.get(key));
+ assertTrue(imap.keySet().contains(key));
+ assertTrue(imap.values().contains(val));
+ assertTrue(imap.duplicates(key).contains(val));
+ if (!imap.areDuplicatesAllowed()) {
+ assertEquals(val, imap.put(key, val));
+ }
+ checkDupsSize(1, imap.duplicates(key));
+ }
+ assertTrue(!imap.isEmpty());
+ }
+ });
+ }
+
+ void appendAll()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertTrue(imap.isEmpty());
+
+ TestKeyAssigner keyAssigner =
+ (TestKeyAssigner) store.getKeyAssigner();
+ if (keyAssigner != null) keyAssigner.reset();
+
+ for (int i = beginKey; i <= endKey; i += 1) {
+ boolean useList = (i & 1) == 0;
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(imap.get(key));
+ if (keyAssigner != null) {
+ if (useList && ilist != null)
+ assertEquals(i - 1, ilist.append(val));
+ else
+ assertEquals(key, imap.append(val));
+ assertEquals(val, imap.get(key));
+ } else {
+ Long recnoKey;
+ if (useList && ilist != null)
+ recnoKey = new Long(ilist.append(val) + 1);
+ else
+ recnoKey = (Long) imap.append(val);
+ assertNotNull(recnoKey);
+ Object recnoVal;
+ if (isEntityBinding)
+ recnoVal = makeEntity(recnoKey.intValue(), i);
+ else
+ recnoVal = val;
+ assertEquals(recnoVal, imap.get(recnoKey));
+ }
+ }
+ }
+ });
+ }
+
+ void updateAll()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ if (!imap.areDuplicatesAllowed()) {
+ assertEquals(val, imap.put(key, val));
+ }
+ if (isEntityBinding) {
+ assertTrue(!imap.values().add(val));
+ }
+ checkDupsSize(1, imap.duplicates(key));
+ if (ilist != null) {
+ int idx = i - 1;
+ assertEquals(val, ilist.set(idx, val));
+ }
+ }
+ updateIter(map.entrySet());
+ updateIter(map.values());
+ if (beginKey <= endKey) {
+ ListIterator iter = (ListIterator) map.keySet().iterator();
+ try {
+ assertNotNull(iter.next());
+ iter.set(makeKey(beginKey));
+ fail();
+ } catch (UnsupportedOperationException e) {
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ if (list != null) updateIter(list);
+ }
+ });
+ }
+
+ void updateIter(final Collection coll)
+ throws Exception {
+
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ ListIterator iter = (ListIterator) coll.iterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ assertTrue(iter.hasNext());
+ Object obj = iter.next();
+ if (index != null) {
+ try {
+ setValuePlusOne(iter, obj);
+ fail();
+ }
+ catch (UnsupportedOperationException e) {}
+ } else if
+ (((StoredCollection) coll).areDuplicatesOrdered()) {
+ try {
+ setValuePlusOne(iter, obj);
+ fail();
+ } catch (IllegalArgumentException e) {}
+ } else {
+ setValuePlusOne(iter, obj);
+ }
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ });
+ }
+
+ void setValuePlusOne(ListIterator iter, Object obj) {
+
+ if (obj instanceof Map.Entry) {
+ Map.Entry entry = (Map.Entry) obj;
+ Long key = (Long) entry.getKey();
+ Object oldVal = entry.getValue();
+ Object val = makeVal(key.intValue() + 1);
+ if (isEntityBinding) {
+ try {
+ // must fail on attempt to change the key via an entity
+ entry.setValue(val);
+ fail();
+ }
+ catch (IllegalArgumentException e) {}
+ val = makeEntity(key.intValue(), key.intValue() + 1);
+ }
+ entry.setValue(val);
+ assertEquals(val, entry.getValue());
+ assertEquals(val, map.get(key));
+ assertTrue(map.duplicates(key).contains(val));
+ checkDupsSize(1, map.duplicates(key));
+ entry.setValue(oldVal);
+ assertEquals(oldVal, entry.getValue());
+ assertEquals(oldVal, map.get(key));
+ assertTrue(map.duplicates(key).contains(oldVal));
+ checkDupsSize(1, map.duplicates(key));
+ } else {
+ Object oldVal = obj;
+ Long key = makeKey(intVal(obj));
+ Object val = makeVal(key.intValue() + 1);
+ if (isEntityBinding) {
+ try {
+ // must fail on attempt to change the key via an entity
+ iter.set(val);
+ fail();
+ }
+ catch (IllegalArgumentException e) {}
+ val = makeEntity(key.intValue(), key.intValue() + 1);
+ }
+ iter.set(val);
+ assertEquals(val, map.get(key));
+ assertTrue(map.duplicates(key).contains(val));
+ checkDupsSize(1, map.duplicates(key));
+ iter.set(oldVal);
+ assertEquals(oldVal, map.get(key));
+ assertTrue(map.duplicates(key).contains(oldVal));
+ checkDupsSize(1, map.duplicates(key));
+ }
+ }
+
+ void removeAll()
+ throws Exception {
+
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertTrue(!map.isEmpty());
+ ListIterator iter = null;
+ try {
+ if (list != null)
+ iter = list.listIterator();
+ else
+ iter = (ListIterator) map.values().iterator();
+ iteratorSetAndRemoveNotAllowed(iter);
+
+ assertNotNull(iter.next());
+ iter.remove();
+ iteratorSetAndRemoveNotAllowed(iter);
+
+ if (index == null) {
+ Object val = iter.next();
+ assertNotNull(val);
+ iter.set(val);
+
+ if (map.areDuplicatesAllowed()) {
+ iter.add(makeVal(intVal(val), intVal(val) + 1));
+ iteratorSetAndRemoveNotAllowed(iter);
+ }
+ }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ map.clear();
+ assertTrue(map.isEmpty());
+ assertTrue(map.entrySet().isEmpty());
+ assertTrue(map.keySet().isEmpty());
+ assertTrue(map.values().isEmpty());
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(map.get(key));
+ assertTrue(!map.duplicates(key).contains(val));
+ checkDupsSize(0, map.duplicates(key));
+ }
+ }
+ });
+ }
+
+ void clearAll()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ map.clear();
+ assertTrue(map.isEmpty());
+ }
+ });
+ }
+
+ void iteratorSetAndRemoveNotAllowed(ListIterator i) {
+
+ try {
+ i.remove();
+ fail();
+ } catch (IllegalStateException e) {}
+
+ if (index == null) {
+ try {
+ Object val = makeVal(1);
+ i.set(val);
+ fail();
+ }
+ catch (IllegalStateException e) {}
+ }
+ }
+
+ void removeOdd()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ boolean toggle = false;
+ for (int i = beginKey; i <= endKey; i += 2) {
+ toggle = !toggle;
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ if (toggle) {
+ assertTrue(map.keySet().contains(key));
+ assertTrue(map.keySet().remove(key));
+ assertTrue(!map.keySet().contains(key));
+ } else {
+ assertTrue(map.containsValue(val));
+ Object oldVal = map.remove(key);
+ assertEquals(oldVal, val);
+ assertTrue(!map.containsKey(key));
+ assertTrue(!map.containsValue(val));
+ }
+ assertNull(map.get(key));
+ assertTrue(!map.duplicates(key).contains(val));
+ checkDupsSize(0, map.duplicates(key));
+ }
+ }
+ });
+ }
+
+ void removeOddEntity()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 2) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertTrue(map.values().contains(val));
+ assertTrue(map.values().remove(val));
+ assertTrue(!map.values().contains(val));
+ assertNull(map.get(key));
+ assertTrue(!map.duplicates(key).contains(val));
+ checkDupsSize(0, map.duplicates(key));
+ }
+ }
+ });
+ }
+
+ void removeOddEntry()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 2) {
+ Long key = makeKey(i);
+ Object val = mapEntry(i);
+ assertTrue(map.entrySet().contains(val));
+ assertTrue(map.entrySet().remove(val));
+ assertTrue(!map.entrySet().contains(val));
+ assertNull(map.get(key));
+ }
+ }
+ });
+ }
+
+ void removeOddIter()
+ throws Exception {
+
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ Iterator iter = map.keySet().iterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ assertTrue(iter.hasNext());
+ Long key = (Long) iter.next();
+ assertNotNull(key);
+ if (map instanceof SortedMap) {
+ assertEquals(makeKey(i), key);
+ }
+ if ((key.intValue() & 1) != 0) {
+ iter.remove();
+ }
+ }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ });
+ }
+
+ void removeOddList()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 2) {
+ // remove by index
+ // (with entity binding, embbeded keys in values are
+ // being changed so we can't use values for comparison)
+ int idx = (i - beginKey) / 2;
+ Object val = makeVal(i);
+ if (!isEntityBinding) {
+ assertTrue(list.contains(val));
+ assertEquals(val, list.get(idx));
+ assertEquals(idx, list.indexOf(val));
+ }
+ assertNotNull(list.get(idx));
+ if (isEntityBinding) {
+ assertNotNull(list.remove(idx));
+ } else {
+ assertTrue(list.contains(val));
+ assertEquals(val, list.remove(idx));
+ }
+ assertTrue(!list.remove(val));
+ assertTrue(!list.contains(val));
+ assertTrue(!val.equals(list.get(idx)));
+ }
+ }
+ });
+ }
+
+ void removeOddListValue()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 2) {
+ // for non-entity case remove by value
+ // (with entity binding, embbeded keys in values are
+ // being changed so we can't use values for comparison)
+ int idx = (i - beginKey) / 2;
+ Object val = makeVal(i);
+ assertTrue(list.contains(val));
+ assertEquals(val, list.get(idx));
+ assertEquals(idx, list.indexOf(val));
+ assertTrue(list.remove(val));
+ assertTrue(!list.remove(val));
+ assertTrue(!list.contains(val));
+ assertTrue(!val.equals(list.get(idx)));
+ }
+ }
+ });
+ }
+
+ void addOdd()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ // add using Map.put()
+ for (int i = beginKey; i <= endKey; i += 2) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(imap.get(key));
+ assertNull(imap.put(key, val));
+ assertEquals(val, imap.get(key));
+ assertTrue(imap.duplicates(key).contains(val));
+ checkDupsSize(1, imap.duplicates(key));
+ if (isEntityBinding) {
+ assertTrue(!imap.values().add(val));
+ }
+ if (!imap.areDuplicatesAllowed()) {
+ assertEquals(val, imap.put(key, val));
+ }
+ }
+ }
+ });
+ }
+
+ void addOddEntity()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ // add using Map.values().add()
+ for (int i = beginKey; i <= endKey; i += 2) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(imap.get(key));
+ assertTrue(!imap.values().contains(val));
+ assertTrue(imap.values().add(val));
+ assertEquals(val, imap.get(key));
+ assertTrue(imap.values().contains(val));
+ assertTrue(imap.duplicates(key).contains(val));
+ checkDupsSize(1, imap.duplicates(key));
+ if (isEntityBinding) {
+ assertTrue(!imap.values().add(val));
+ }
+ }
+ }
+ });
+ }
+
+ void addOddDup()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ // add using Map.duplicates().add()
+ for (int i = beginKey; i <= endKey; i += 2) {
+ Long key = makeKey(i);
+ Object val = makeVal(i);
+ assertNull(imap.get(key));
+ assertTrue(!imap.values().contains(val));
+ assertTrue(imap.duplicates(key).add(val));
+ assertEquals(val, imap.get(key));
+ assertTrue(imap.values().contains(val));
+ assertTrue(imap.duplicates(key).contains(val));
+ checkDupsSize(1, imap.duplicates(key));
+ assertTrue(!imap.duplicates(key).add(val));
+ if (isEntityBinding) {
+ assertTrue(!imap.values().add(val));
+ }
+ }
+ }
+ });
+ }
+
+ void addOddList()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 2) {
+ int idx = i - beginKey;
+ Object val = makeVal(i);
+ assertTrue(!list.contains(val));
+ assertTrue(!val.equals(list.get(idx)));
+ list.add(idx, val);
+ assertTrue(list.contains(val));
+ assertEquals(val, list.get(idx));
+ }
+ }
+ });
+ }
+
+ void addAllList()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ int idx = i - beginKey;
+ Object val = makeVal(i);
+ assertTrue(!list.contains(val));
+ assertTrue(list.add(val));
+ assertTrue(list.contains(val));
+ assertEquals(val, list.get(idx));
+ }
+ }
+ });
+ }
+
+ void removeAllList()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertTrue(!list.isEmpty());
+ list.clear();
+ assertTrue(list.isEmpty());
+ for (int i = beginKey; i <= endKey; i += 1) {
+ int idx = i - beginKey;
+ Object val = makeVal(i);
+ assertNull(list.get(idx));
+ }
+ }
+ });
+ }
+
+ void testIterAddList()
+ throws Exception {
+
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ ListIterator i = list.listIterator();
+ try {
+ assertTrue(!i.hasNext());
+ i.add(makeVal(3));
+ assertTrue(!i.hasNext());
+ assertTrue(i.hasPrevious());
+ assertEquals(3, intVal(i.previous()));
+
+ i.add(makeVal(1));
+ assertTrue(i.hasPrevious());
+ assertTrue(i.hasNext());
+ assertEquals(1, intVal(i.previous()));
+ assertTrue(i.hasNext());
+ assertEquals(1, intVal(i.next()));
+ assertTrue(i.hasNext());
+ assertEquals(3, intVal(i.next()));
+ assertEquals(3, intVal(i.previous()));
+
+ assertTrue(i.hasNext());
+ i.add(makeVal(2));
+ assertTrue(i.hasNext());
+ assertTrue(i.hasPrevious());
+ assertEquals(2, intVal(i.previous()));
+ assertTrue(i.hasNext());
+ assertEquals(2, intVal(i.next()));
+ assertTrue(i.hasNext());
+ assertEquals(3, intVal(i.next()));
+
+ assertTrue(!i.hasNext());
+ i.add(makeVal(4));
+ i.add(makeVal(5));
+ assertTrue(!i.hasNext());
+ assertEquals(5, intVal(i.previous()));
+ assertEquals(4, intVal(i.previous()));
+ assertEquals(3, intVal(i.previous()));
+ assertEquals(2, intVal(i.previous()));
+ assertEquals(1, intVal(i.previous()));
+ assertTrue(!i.hasPrevious());
+ } finally {
+ StoredIterator.close(i);
+ }
+ }
+ });
+ }
+
+ void testIterAddDuplicates()
+ throws Exception {
+
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertNull(imap.put(makeKey(1), makeVal(1)));
+ ListIterator i =
+ (ListIterator) imap.duplicates(makeKey(1)).iterator();
+ try {
+ if (imap.areDuplicatesOrdered()) {
+ i.add(makeVal(1, 4));
+ i.add(makeVal(1, 2));
+ i.add(makeVal(1, 3));
+ while (i.hasPrevious()) i.previous();
+ assertEquals(1, intVal(i.next()));
+ assertEquals(2, intVal(i.next()));
+ assertEquals(3, intVal(i.next()));
+ assertEquals(4, intVal(i.next()));
+ assertTrue(!i.hasNext());
+ } else {
+ assertEquals(1, intVal(i.next()));
+ i.add(makeVal(1, 2));
+ i.add(makeVal(1, 3));
+ assertTrue(!i.hasNext());
+ assertTrue(i.hasPrevious());
+ assertEquals(3, intVal(i.previous()));
+ assertEquals(2, intVal(i.previous()));
+ assertEquals(1, intVal(i.previous()));
+ assertTrue(!i.hasPrevious());
+ i.add(makeVal(1, 4));
+ i.add(makeVal(1, 5));
+ assertTrue(i.hasNext());
+ assertEquals(5, intVal(i.previous()));
+ assertEquals(4, intVal(i.previous()));
+ assertTrue(!i.hasPrevious());
+ assertEquals(4, intVal(i.next()));
+ assertEquals(5, intVal(i.next()));
+ assertEquals(1, intVal(i.next()));
+ assertEquals(2, intVal(i.next()));
+ assertEquals(3, intVal(i.next()));
+ assertTrue(!i.hasNext());
+ }
+ } finally {
+ StoredIterator.close(i);
+ }
+ }
+ });
+ }
+
+ void readAll()
+ throws Exception {
+
+ readRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ // map
+
+ assertNotNull(map.toString());
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = makeKey(i);
+ Object val = map.get(key);
+ assertEquals(makeVal(i), val);
+ assertTrue(map.containsKey(key));
+ assertTrue(map.containsValue(val));
+ assertTrue(map.keySet().contains(key));
+ assertTrue(map.values().contains(val));
+ assertTrue(map.duplicates(key).contains(val));
+ checkDupsSize(1, map.duplicates(key));
+ }
+ assertNull(map.get(makeKey(-1)));
+ assertNull(map.get(makeKey(0)));
+ assertNull(map.get(makeKey(beginKey - 1)));
+ assertNull(map.get(makeKey(endKey + 1)));
+ checkDupsSize(0, map.duplicates(makeKey(-1)));
+ checkDupsSize(0, map.duplicates(makeKey(0)));
+ checkDupsSize(0, map.duplicates(makeKey(beginKey - 1)));
+ checkDupsSize(0, map.duplicates(makeKey(endKey + 1)));
+
+ // entrySet
+
+ Set set = map.entrySet();
+ assertNotNull(set.toString());
+ assertEquals(beginKey > endKey, set.isEmpty());
+ Iterator iter = set.iterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ assertTrue(iter.hasNext());
+ Map.Entry entry = (Map.Entry) iter.next();
+ Long key = (Long) entry.getKey();
+ Object val = entry.getValue();
+ if (map instanceof SortedMap) {
+ assertEquals(intKey(key), i);
+ }
+ assertEquals(intKey(key), intVal(val));
+ assertTrue(set.contains(entry));
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ Map.Entry[] entries =
+ (Map.Entry[]) set.toArray(new Map.Entry[0]);
+ assertNotNull(entries);
+ assertEquals(endKey - beginKey + 1, entries.length);
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Map.Entry entry = entries[i - beginKey];
+ assertNotNull(entry);
+ if (map instanceof SortedMap) {
+ assertEquals(makeKey(i), entry.getKey());
+ assertEquals(makeVal(i), entry.getValue());
+ }
+ }
+ readIterator(set, set.iterator(), beginKey, endKey);
+ if (smap != null) {
+ SortedSet sset = (SortedSet) set;
+ if (beginKey == 1 && endKey >= 1) {
+ readIterator(sset, sset.subSet(mapEntry(1),
+ mapEntry(2))
+ .iterator(), 1, 1);
+ }
+ if (beginKey <= 2 && endKey >= 2) {
+ readIterator(sset, sset.subSet(mapEntry(2),
+ mapEntry(3))
+ .iterator(), 2, 2);
+ }
+ if (beginKey <= endKey) {
+ readIterator(sset, sset.subSet(
+ mapEntry(endKey),
+ mapEntry(endKey + 1))
+ .iterator(),
+ endKey, endKey);
+ }
+ if (isSubMap()) {
+ if (beginKey <= endKey) {
+ if (rangeType != TAIL) {
+ try {
+ sset.subSet(mapEntry(endKey + 1),
+ mapEntry(endKey + 2));
+ fail();
+ } catch (IllegalArgumentException e) {}
+ }
+ if (rangeType != HEAD) {
+ try {
+ sset.subSet(mapEntry(0),
+ mapEntry(1));
+ fail();
+ } catch (IllegalArgumentException e) {}
+ }
+ }
+ } else {
+ readIterator(sset, sset.subSet(
+ mapEntry(endKey + 1),
+ mapEntry(endKey + 2))
+ .iterator(),
+ endKey, endKey - 1);
+ readIterator(sset, sset.subSet(mapEntry(0),
+ mapEntry(1))
+ .iterator(),
+ 0, -1);
+ }
+ }
+
+ // keySet
+
+ set = map.keySet();
+ assertNotNull(set.toString());
+ assertEquals(beginKey > endKey, set.isEmpty());
+ iter = set.iterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ assertTrue(iter.hasNext());
+ Long key = (Long) iter.next();
+ assertTrue(set.contains(key));
+ Object val = map.get(key);
+ if (map instanceof SortedMap) {
+ assertEquals(key, makeKey(i));
+ }
+ assertEquals(intKey(key), intVal(val));
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ Long[] keys = (Long[]) set.toArray(new Long[0]);
+ assertNotNull(keys);
+ assertEquals(endKey - beginKey + 1, keys.length);
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = keys[i - beginKey];
+ assertNotNull(key);
+ if (map instanceof SortedMap) {
+ assertEquals(makeKey(i), key);
+ }
+ }
+ readIterator(set, set.iterator(), beginKey, endKey);
+
+ // values
+
+ Collection coll = map.values();
+ assertNotNull(coll.toString());
+ assertEquals(beginKey > endKey, coll.isEmpty());
+ iter = coll.iterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ assertTrue(iter.hasNext());
+ Object val = iter.next();
+ if (map instanceof SortedMap) {
+ assertEquals(makeVal(i), val);
+ }
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ Object[] values = coll.toArray();
+ assertNotNull(values);
+ assertEquals(endKey - beginKey + 1, values.length);
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Object val = values[i - beginKey];
+ assertNotNull(val);
+ if (map instanceof SortedMap) {
+ assertEquals(makeVal(i), val);
+ }
+ }
+ readIterator(coll, coll.iterator(), beginKey, endKey);
+
+ // list
+
+ if (list != null) {
+ assertNotNull(list.toString());
+ assertEquals(beginKey > endKey, list.isEmpty());
+ for (int i = beginKey; i <= endKey; i += 1) {
+ int idx = i - beginKey;
+ Object val = list.get(idx);
+ assertEquals(makeVal(i), val);
+ assertTrue(list.contains(val));
+ assertEquals(idx, list.indexOf(val));
+ assertEquals(idx, list.lastIndexOf(val));
+ }
+ ListIterator li = list.listIterator();
+ try {
+ for (int i = beginKey; i <= endKey; i += 1) {
+ int idx = i - beginKey;
+ assertTrue(li.hasNext());
+ assertEquals(idx, li.nextIndex());
+ Object val = li.next();
+ assertEquals(makeVal(i), val);
+ assertEquals(idx, li.previousIndex());
+ }
+ assertTrue(!li.hasNext());
+ } finally {
+ StoredIterator.close(li);
+ }
+ if (beginKey < endKey) {
+ li = list.listIterator(1);
+ try {
+ for (int i = beginKey + 1; i <= endKey; i += 1) {
+ int idx = i - beginKey;
+ assertTrue(li.hasNext());
+ assertEquals(idx, li.nextIndex());
+ Object val = li.next();
+ assertEquals(makeVal(i), val);
+ assertEquals(idx, li.previousIndex());
+ }
+ assertTrue(!li.hasNext());
+ } finally {
+ StoredIterator.close(li);
+ }
+ }
+ values = list.toArray();
+ assertNotNull(values);
+ assertEquals(endKey - beginKey + 1, values.length);
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Object val = values[i - beginKey];
+ assertNotNull(val);
+ assertEquals(makeVal(i), val);
+ }
+ readIterator(list, list.iterator(), beginKey, endKey);
+ }
+
+ // first/last
+
+ if (smap != null) {
+ if (beginKey <= endKey &&
+ beginKey >= 1 && beginKey <= MAX_KEY) {
+ assertEquals(makeKey(beginKey),
+ smap.firstKey());
+ assertEquals(makeKey(beginKey),
+ ((SortedSet) smap.keySet()).first());
+ Object entry = ((SortedSet) smap.entrySet()).first();
+ assertEquals(makeKey(beginKey),
+ ((Map.Entry) entry).getKey());
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(makeVal(beginKey),
+ ((SortedSet) smap.values()).first());
+ }
+ } else {
+ assertNull(smap.firstKey());
+ assertNull(((SortedSet) smap.keySet()).first());
+ assertNull(((SortedSet) smap.entrySet()).first());
+ if (smap.values() instanceof SortedSet) {
+ assertNull(((SortedSet) smap.values()).first());
+ }
+ }
+ if (beginKey <= endKey &&
+ endKey >= 1 && endKey <= MAX_KEY) {
+ assertEquals(makeKey(endKey),
+ smap.lastKey());
+ assertEquals(makeKey(endKey),
+ ((SortedSet) smap.keySet()).last());
+ Object entry = ((SortedSet) smap.entrySet()).last();
+ assertEquals(makeKey(endKey),
+ ((Map.Entry) entry).getKey());
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(makeVal(endKey),
+ ((SortedSet) smap.values()).last());
+ }
+ } else {
+ assertNull(smap.lastKey());
+ assertNull(((SortedSet) smap.keySet()).last());
+ assertNull(((SortedSet) smap.entrySet()).last());
+ if (smap.values() instanceof SortedSet) {
+ assertNull(((SortedSet) smap.values()).last());
+ }
+ }
+ }
+ }
+ });
+ }
+
+ void readEven()
+ throws Exception {
+
+ readRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ int readBegin = ((beginKey & 1) != 0) ?
+ (beginKey + 1) : beginKey;
+ int readEnd = ((endKey & 1) != 0) ? (endKey - 1) : endKey;
+ int readIncr = 2;
+
+ // map
+
+ for (int i = beginKey; i <= endKey; i += 1) {
+ Long key = makeKey(i);
+ if ((i & 1) == 0) {
+ Object val = map.get(key);
+ assertEquals(makeVal(i), val);
+ assertTrue(map.containsKey(key));
+ assertTrue(map.containsValue(val));
+ assertTrue(map.keySet().contains(key));
+ assertTrue(map.values().contains(val));
+ assertTrue(map.duplicates(key).contains(val));
+ checkDupsSize(1, map.duplicates(key));
+ } else {
+ Object val = makeVal(i);
+ assertTrue(!map.containsKey(key));
+ assertTrue(!map.containsValue(val));
+ assertTrue(!map.keySet().contains(key));
+ assertTrue(!map.values().contains(val));
+ assertTrue(!map.duplicates(key).contains(val));
+ checkDupsSize(0, map.duplicates(key));
+ }
+ }
+
+ // entrySet
+
+ Set set = map.entrySet();
+ assertEquals(beginKey > endKey, set.isEmpty());
+ Iterator iter = set.iterator();
+ try {
+ for (int i = readBegin; i <= readEnd; i += readIncr) {
+ assertTrue(iter.hasNext());
+ Map.Entry entry = (Map.Entry) iter.next();
+ Long key = (Long) entry.getKey();
+ Object val = entry.getValue();
+ if (map instanceof SortedMap) {
+ assertEquals(intKey(key), i);
+ }
+ assertEquals(intKey(key), intVal(val));
+ assertTrue(set.contains(entry));
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+
+ // keySet
+
+ set = map.keySet();
+ assertEquals(beginKey > endKey, set.isEmpty());
+ iter = set.iterator();
+ try {
+ for (int i = readBegin; i <= readEnd; i += readIncr) {
+ assertTrue(iter.hasNext());
+ Long key = (Long) iter.next();
+ assertTrue(set.contains(key));
+ Object val = map.get(key);
+ if (map instanceof SortedMap) {
+ assertEquals(key, makeKey(i));
+ }
+ assertEquals(intKey(key), intVal(val));
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+
+ // values
+
+ Collection coll = map.values();
+ assertEquals(beginKey > endKey, coll.isEmpty());
+ iter = coll.iterator();
+ try {
+ for (int i = readBegin; i <= readEnd; i += readIncr) {
+ assertTrue(iter.hasNext());
+ Object val = iter.next();
+ if (map instanceof SortedMap) {
+ assertEquals(makeVal(i), val);
+ }
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+
+
+ // list not used since keys may not be renumbered for this
+ // method to work in general
+
+ // first/last
+
+ if (smap != null) {
+ if (readBegin <= readEnd &&
+ readBegin >= 1 && readBegin <= MAX_KEY) {
+ assertEquals(makeKey(readBegin),
+ smap.firstKey());
+ assertEquals(makeKey(readBegin),
+ ((SortedSet) smap.keySet()).first());
+ Object entry = ((SortedSet) smap.entrySet()).first();
+ assertEquals(makeKey(readBegin),
+ ((Map.Entry) entry).getKey());
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(makeVal(readBegin),
+ ((SortedSet) smap.values()).first());
+ }
+ } else {
+ assertNull(smap.firstKey());
+ assertNull(((SortedSet) smap.keySet()).first());
+ assertNull(((SortedSet) smap.entrySet()).first());
+ if (smap.values() instanceof SortedSet) {
+ assertNull(((SortedSet) smap.values()).first());
+ }
+ }
+ if (readBegin <= readEnd &&
+ readEnd >= 1 && readEnd <= MAX_KEY) {
+ assertEquals(makeKey(readEnd),
+ smap.lastKey());
+ assertEquals(makeKey(readEnd),
+ ((SortedSet) smap.keySet()).last());
+ Object entry = ((SortedSet) smap.entrySet()).last();
+ assertEquals(makeKey(readEnd),
+ ((Map.Entry) entry).getKey());
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(makeVal(readEnd),
+ ((SortedSet) smap.values()).last());
+ }
+ } else {
+ assertNull(smap.lastKey());
+ assertNull(((SortedSet) smap.keySet()).last());
+ assertNull(((SortedSet) smap.entrySet()).last());
+ if (smap.values() instanceof SortedSet) {
+ assertNull(((SortedSet) smap.values()).last());
+ }
+ }
+ }
+ }
+ });
+ }
+
+ void readEvenList()
+ throws Exception {
+
+ readRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ int readBegin = ((beginKey & 1) != 0) ?
+ (beginKey + 1) : beginKey;
+ int readEnd = ((endKey & 1) != 0) ? (endKey - 1) : endKey;
+ int readIncr = 2;
+
+ assertEquals(beginKey > endKey, list.isEmpty());
+ ListIterator iter = list.listIterator();
+ try {
+ int idx = 0;
+ for (int i = readBegin; i <= readEnd; i += readIncr) {
+ assertTrue(iter.hasNext());
+ assertEquals(idx, iter.nextIndex());
+ Object val = iter.next();
+ assertEquals(idx, iter.previousIndex());
+ if (isEntityBinding) {
+ assertEquals(i, intVal(val));
+ } else {
+ assertEquals(makeVal(i), val);
+ }
+ idx += 1;
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ });
+ }
+
+ void readIterator(Collection coll, Iterator iter,
+ int beginValue, int endValue) {
+
+ ListIterator li = (ListIterator) iter;
+ boolean isList = (coll instanceof List);
+ Iterator clone = null;
+ try {
+ // at beginning
+ assertTrue(!li.hasPrevious());
+ try { li.previous(); } catch (NoSuchElementException e) {}
+ if (isList) assertEquals(-1, li.previousIndex());
+ if (endValue < beginValue) {
+ // is empty
+ assertTrue(!iter.hasNext());
+ try { iter.next(); } catch (NoSuchElementException e) {}
+ if (isList) assertEquals(Integer.MAX_VALUE, li.nextIndex());
+ }
+ // loop thru all and collect in array
+ StoredIterator si = (StoredIterator) iter;
+ int[] values = new int[endValue - beginValue + 1];
+ for (int i = beginValue; i <= endValue; i += 1) {
+ assertTrue(iter.hasNext());
+ int idx = i - beginKey;
+ if (isList) assertEquals(idx, li.nextIndex());
+ int value = intIter(coll, iter.next());
+ if (isList) assertEquals(idx, li.previousIndex());
+ values[i - beginValue] = value;
+ if (si.getCollection().isOrdered()) {
+ assertEquals(i, value);
+ } else {
+ assertTrue(value >= beginValue);
+ assertTrue(value <= endValue);
+ }
+ }
+ // at end
+ assertTrue(!iter.hasNext());
+ try { iter.next(); } catch (NoSuchElementException e) {}
+ if (isList) assertEquals(Integer.MAX_VALUE, li.nextIndex());
+ // clone at same position
+ clone = StoredCollections.iterator(iter);
+ assertTrue(!clone.hasNext());
+ // loop thru in reverse
+ for (int i = endValue; i >= beginValue; i -= 1) {
+ assertTrue(li.hasPrevious());
+ int idx = i - beginKey;
+ if (isList) assertEquals(idx, li.previousIndex());
+ int value = intIter(coll, li.previous());
+ if (isList) assertEquals(idx, li.nextIndex());
+ assertEquals(values[i - beginValue], value);
+ }
+ // clone should not have changed
+ assertTrue(!clone.hasNext());
+ // at beginning
+ assertTrue(!li.hasPrevious());
+ try { li.previous(); } catch (NoSuchElementException e) {}
+ if (isList) assertEquals(-1, li.previousIndex());
+ // loop thru with some back-and-forth
+ for (int i = beginValue; i <= endValue; i += 1) {
+ assertTrue(iter.hasNext());
+ int idx = i - beginKey;
+ if (isList) assertEquals(idx, li.nextIndex());
+ Object obj = iter.next();
+ if (isList) assertEquals(idx, li.previousIndex());
+ assertEquals(obj, li.previous());
+ if (isList) assertEquals(idx, li.nextIndex());
+ assertEquals(obj, iter.next());
+ if (isList) assertEquals(idx, li.previousIndex());
+ int value = intIter(coll, obj);
+ assertEquals(values[i - beginValue], value);
+ }
+ // at end
+ assertTrue(!iter.hasNext());
+ try { iter.next(); } catch (NoSuchElementException e) {}
+ if (isList) assertEquals(Integer.MAX_VALUE, li.nextIndex());
+ } finally {
+ StoredIterator.close(iter);
+ StoredIterator.close(clone);
+ }
+ }
+
+ void bulkOperations()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ HashMap hmap = new HashMap();
+ for (int i = beginKey; i <= endKey; i += 1) {
+ hmap.put(makeKey(i), makeVal(i));
+ }
+ assertTrue(map.equals(hmap));
+ assertTrue(map.entrySet().equals(hmap.entrySet()));
+ assertTrue(map.keySet().equals(hmap.keySet()));
+ assertTrue(map.values().equals(hmap.values()));
+
+ assertTrue(map.entrySet().containsAll(hmap.entrySet()));
+ assertTrue(map.keySet().containsAll(hmap.keySet()));
+ assertTrue(map.values().containsAll(hmap.values()));
+
+ map.clear();
+ assertTrue(map.isEmpty());
+ imap.putAll(hmap);
+ assertTrue(map.equals(hmap));
+
+ assertTrue(map.entrySet().removeAll(hmap.entrySet()));
+ assertTrue(map.entrySet().isEmpty());
+ assertTrue(!map.entrySet().removeAll(hmap.entrySet()));
+ assertTrue(imap.entrySet().addAll(hmap.entrySet()));
+ assertTrue(map.entrySet().containsAll(hmap.entrySet()));
+ assertTrue(!imap.entrySet().addAll(hmap.entrySet()));
+ assertTrue(map.equals(hmap));
+
+ assertTrue(!map.entrySet().retainAll(hmap.entrySet()));
+ assertTrue(map.equals(hmap));
+ assertTrue(map.entrySet().retainAll(Collections.EMPTY_SET));
+ assertTrue(map.isEmpty());
+ imap.putAll(hmap);
+ assertTrue(map.equals(hmap));
+
+ assertTrue(map.values().removeAll(hmap.values()));
+ assertTrue(map.values().isEmpty());
+ assertTrue(!map.values().removeAll(hmap.values()));
+ if (isEntityBinding) {
+ assertTrue(imap.values().addAll(hmap.values()));
+ assertTrue(map.values().containsAll(hmap.values()));
+ assertTrue(!imap.values().addAll(hmap.values()));
+ } else {
+ imap.putAll(hmap);
+ }
+ assertTrue(map.equals(hmap));
+
+ assertTrue(!map.values().retainAll(hmap.values()));
+ assertTrue(map.equals(hmap));
+ assertTrue(map.values().retainAll(Collections.EMPTY_SET));
+ assertTrue(map.isEmpty());
+ imap.putAll(hmap);
+ assertTrue(map.equals(hmap));
+
+ assertTrue(map.keySet().removeAll(hmap.keySet()));
+ assertTrue(map.keySet().isEmpty());
+ assertTrue(!map.keySet().removeAll(hmap.keySet()));
+ assertTrue(imap.keySet().addAll(hmap.keySet()));
+ assertTrue(imap.keySet().containsAll(hmap.keySet()));
+ if (index != null) assertTrue(map.keySet().isEmpty());
+ assertTrue(!imap.keySet().addAll(hmap.keySet()));
+ // restore values to non-null
+ imap.clear();
+ imap.putAll(hmap);
+ assertTrue(map.equals(hmap));
+
+ assertTrue(!map.keySet().retainAll(hmap.keySet()));
+ assertTrue(map.equals(hmap));
+ assertTrue(map.keySet().retainAll(Collections.EMPTY_SET));
+ assertTrue(map.isEmpty());
+ imap.putAll(hmap);
+ assertTrue(map.equals(hmap));
+ }
+ });
+ }
+
+ void bulkListOperations()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ ArrayList alist = new ArrayList();
+ for (int i = beginKey; i <= endKey; i += 1) {
+ alist.add(makeVal(i));
+ }
+
+ assertTrue(list.equals(alist));
+ assertTrue(list.containsAll(alist));
+
+ if (isListAddAllowed()) {
+ list.clear();
+ assertTrue(list.isEmpty());
+ assertTrue(ilist.addAll(alist));
+ assertTrue(list.equals(alist));
+ }
+
+ assertTrue(!list.retainAll(alist));
+ assertTrue(list.equals(alist));
+
+ if (isListAddAllowed()) {
+ assertTrue(list.retainAll(Collections.EMPTY_SET));
+ assertTrue(list.isEmpty());
+ assertTrue(ilist.addAll(alist));
+ assertTrue(list.equals(alist));
+ }
+
+ if (isListAddAllowed() && !isEntityBinding) {
+ // deleteeting in a renumbered list with entity binding will
+ // change the values dynamically, making it very difficult
+ // to test
+ assertTrue(list.removeAll(alist));
+ assertTrue(list.isEmpty());
+ assertTrue(!list.removeAll(alist));
+ assertTrue(ilist.addAll(alist));
+ assertTrue(list.containsAll(alist));
+ assertTrue(list.equals(alist));
+ }
+
+ if (isListAddAllowed() && !isEntityBinding) {
+ // addAll at an index is also very difficult to test with
+ // an entity binding
+
+ // addAll at first index
+ ilist.addAll(beginKey, alist);
+ assertTrue(list.containsAll(alist));
+ assertEquals(2 * alist.size(), countElements(list));
+ for (int i = beginKey; i <= endKey; i += 1)
+ ilist.remove(beginKey);
+ assertTrue(list.equals(alist));
+
+ // addAll at last index
+ ilist.addAll(endKey, alist);
+ assertTrue(list.containsAll(alist));
+ assertEquals(2 * alist.size(), countElements(list));
+ for (int i = beginKey; i <= endKey; i += 1)
+ ilist.remove(endKey);
+ assertTrue(list.equals(alist));
+
+ // addAll in the middle
+ ilist.addAll(endKey - 1, alist);
+ assertTrue(list.containsAll(alist));
+ assertEquals(2 * alist.size(), countElements(list));
+ for (int i = beginKey; i <= endKey; i += 1)
+ ilist.remove(endKey - 1);
+ assertTrue(list.equals(alist));
+ }
+ }
+ });
+ }
+
+ void readWriteRange(final int type, final int rangeBegin,
+ final int rangeEnd)
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ setRange(type, rangeBegin, rangeEnd);
+ createOutOfRange(rangeBegin, rangeEnd);
+ if (rangeType != TAIL)
+ writeOutOfRange(new Long(rangeEnd + 1));
+ if (rangeType != HEAD)
+ writeOutOfRange(new Long(rangeBegin - 1));
+ if (rangeBegin <= rangeEnd) updateAll();
+ readAll();
+ clearRange();
+ }
+ });
+ }
+
+ void setRange(int type, int rangeBegin, int rangeEnd) {
+
+ rangeType = type;
+ saveMap = map;
+ saveSMap = smap;
+ saveList = list;
+ int listBegin = rangeBegin - beginKey;
+ boolean canMakeSubList = (list != null && listBegin>= 0);
+ if (!canMakeSubList) list = null;
+ if (list != null) {
+ try {
+ list.subList(-1, 0);
+ fail();
+ } catch (IndexOutOfBoundsException e) { }
+ }
+ switch (type) {
+
+ case SUB:
+ smap = (StoredSortedMap) smap.subMap(makeKey(rangeBegin),
+ makeKey(rangeEnd + 1));
+ if (canMakeSubList) {
+ list = (StoredList) list.subList(listBegin,
+ rangeEnd + 1 - beginKey);
+ }
+ // check for equivalent ranges
+ assertEquals(smap,
+ ((StoredSortedMap) saveSMap).subMap(
+ makeKey(rangeBegin), true,
+ makeKey(rangeEnd + 1), false));
+ assertEquals(smap.entrySet(),
+ ((StoredSortedEntrySet) saveSMap.entrySet()).subSet(
+ mapEntry(rangeBegin), true,
+ mapEntry(rangeEnd + 1), false));
+ assertEquals(smap.keySet(),
+ ((StoredSortedKeySet) saveSMap.keySet()).subSet(
+ makeKey(rangeBegin), true,
+ makeKey(rangeEnd + 1), false));
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(smap.values(),
+ ((StoredSortedValueSet) saveSMap.values()).subSet(
+ makeVal(rangeBegin), true,
+ makeVal(rangeEnd + 1), false));
+ }
+ break;
+ case HEAD:
+ smap = (StoredSortedMap) smap.headMap(makeKey(rangeEnd + 1));
+ if (canMakeSubList) {
+ list = (StoredList) list.subList(0,
+ rangeEnd + 1 - beginKey);
+ }
+ // check for equivalent ranges
+ assertEquals(smap,
+ ((StoredSortedMap) saveSMap).headMap(
+ makeKey(rangeEnd + 1), false));
+ assertEquals(smap.entrySet(),
+ ((StoredSortedEntrySet) saveSMap.entrySet()).headSet(
+ mapEntry(rangeEnd + 1), false));
+ assertEquals(smap.keySet(),
+ ((StoredSortedKeySet) saveSMap.keySet()).headSet(
+ makeKey(rangeEnd + 1), false));
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(smap.values(),
+ ((StoredSortedValueSet) saveSMap.values()).headSet(
+ makeVal(rangeEnd + 1), false));
+ }
+ break;
+ case TAIL:
+ smap = (StoredSortedMap) smap.tailMap(makeKey(rangeBegin));
+ if (canMakeSubList) {
+ list = (StoredList) list.subList(listBegin,
+ MAX_KEY + 1 - beginKey);
+ }
+ // check for equivalent ranges
+ assertEquals(smap,
+ ((StoredSortedMap) saveSMap).tailMap(
+ makeKey(rangeBegin), true));
+ assertEquals(smap.entrySet(),
+ ((StoredSortedEntrySet) saveSMap.entrySet()).tailSet(
+ mapEntry(rangeBegin), true));
+ assertEquals(smap.keySet(),
+ ((StoredSortedKeySet) saveSMap.keySet()).tailSet(
+ makeKey(rangeBegin), true));
+ if (smap.values() instanceof SortedSet) {
+ assertEquals(smap.values(),
+ ((StoredSortedValueSet) saveSMap.values()).tailSet(
+ makeVal(rangeBegin), true));
+ }
+ break;
+ default: throw new RuntimeException();
+ }
+ map = smap;
+ beginKey = rangeBegin;
+ if (rangeBegin < 1 || rangeEnd > MAX_KEY) {
+ endKey = rangeBegin - 1; // force empty range for readAll()
+ } else {
+ endKey = rangeEnd;
+ }
+ }
+
+ void clearRange() {
+
+ rangeType = NONE;
+ beginKey = 1;
+ endKey = MAX_KEY;
+ map = saveMap;
+ smap = saveSMap;
+ list = saveList;
+ }
+
+ void createOutOfRange(int rangeBegin, int rangeEnd)
+ throws Exception {
+
+ // map
+
+ if (rangeType != TAIL) {
+ try {
+ smap.subMap(makeKey(rangeBegin), makeKey(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ smap.headMap(makeKey(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ checkDupsSize(0, smap.duplicates(makeKey(rangeEnd + 2)));
+ }
+ if (rangeType != HEAD) {
+ try {
+ smap.subMap(makeKey(rangeBegin - 1), makeKey(rangeEnd + 1));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ smap.tailMap(makeKey(rangeBegin - 1));
+ fail();
+ }
+ catch (IllegalArgumentException e) { }
+ checkDupsSize(0, smap.duplicates(makeKey(rangeBegin - 1)));
+ }
+
+ // keySet
+
+ if (rangeType != TAIL) {
+ SortedSet sset = (SortedSet) map.keySet();
+ try {
+ sset.subSet(makeKey(rangeBegin), makeKey(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.headSet(makeKey(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.subSet(makeKey(rangeEnd + 1),
+ makeKey(rangeEnd + 2)).iterator();
+ fail();
+ } catch (IllegalArgumentException e) { }
+ }
+ if (rangeType != HEAD) {
+ SortedSet sset = (SortedSet) map.keySet();
+ try {
+ sset.subSet(makeKey(rangeBegin - 1), makeKey(rangeEnd + 1));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.tailSet(makeKey(rangeBegin - 1));
+ fail();
+ }
+ catch (IllegalArgumentException e) { }
+ try {
+ sset.subSet(makeKey(rangeBegin - 1),
+ makeKey(rangeBegin)).iterator();
+ fail();
+ }
+ catch (IllegalArgumentException e) { }
+ }
+
+ // entrySet
+
+ if (rangeType != TAIL) {
+ SortedSet sset = (SortedSet) map.entrySet();
+ try {
+ sset.subSet(mapEntry(rangeBegin), mapEntry(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.headSet(mapEntry(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.subSet(mapEntry(rangeEnd + 1),
+ mapEntry(rangeEnd + 2)).iterator();
+ fail();
+ } catch (IllegalArgumentException e) { }
+ }
+ if (rangeType != HEAD) {
+ SortedSet sset = (SortedSet) map.entrySet();
+ try {
+ sset.subSet(mapEntry(rangeBegin - 1), mapEntry(rangeEnd + 1));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.tailSet(mapEntry(rangeBegin - 1));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.subSet(mapEntry(rangeBegin - 1),
+ mapEntry(rangeBegin)).iterator();
+ fail();
+ }
+ catch (IllegalArgumentException e) { }
+ }
+
+ // values
+
+ if (map.values() instanceof SortedSet) {
+ SortedSet sset = (SortedSet) map.values();
+ if (rangeType != TAIL) {
+ try {
+ sset.subSet(makeVal(rangeBegin),
+ makeVal(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.headSet(makeVal(rangeEnd + 2));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ }
+ if (rangeType != HEAD) {
+ try {
+ sset.subSet(makeVal(rangeBegin - 1),
+ makeVal(rangeEnd + 1));
+ fail();
+ } catch (IllegalArgumentException e) { }
+ try {
+ sset.tailSet(makeVal(rangeBegin - 1));
+ fail();
+ }
+ catch (IllegalArgumentException e) { }
+ }
+ }
+
+ // list
+
+ if (list != null) {
+ int size = rangeEnd - rangeBegin + 1;
+ try {
+ list.subList(0, size + 1);
+ fail();
+ } catch (IndexOutOfBoundsException e) { }
+ try {
+ list.subList(-1, size);
+ fail();
+ } catch (IndexOutOfBoundsException e) { }
+ try {
+ list.subList(2, 1);
+ fail();
+ } catch (IndexOutOfBoundsException e) { }
+ try {
+ list.subList(size, size);
+ fail();
+ }
+ catch (IndexOutOfBoundsException e) { }
+ }
+ }
+
+ void writeOutOfRange(Long badNewKey)
+ throws Exception {
+
+ try {
+ map.put(badNewKey, makeVal(badNewKey));
+ fail();
+ } catch (IllegalArgumentException e) {
+ assertTrue(index == null);
+ } catch (UnsupportedOperationException e) {
+ assertTrue(index != null);
+ }
+ try {
+ map.keySet().add(badNewKey);
+ fail();
+ } catch (IllegalArgumentException e) {
+ assertTrue(index == null);
+ } catch (UnsupportedOperationException e) {
+ assertTrue(index != null);
+ }
+ try {
+ map.values().add(makeEntity(badNewKey));
+ fail();
+ } catch (IllegalArgumentException e) {
+ assertTrue(isEntityBinding && index == null);
+ } catch (UnsupportedOperationException e) {
+ assertTrue(!(isEntityBinding && index == null));
+ }
+ if (list != null) {
+ int i = badNewKey.intValue() - beginKey;
+ try {
+ list.set(i, makeVal(i));
+ fail();
+ } catch (IndexOutOfBoundsException e) {
+ assertTrue(index == null);
+ } catch (UnsupportedOperationException e) {
+ assertTrue(index != null);
+ }
+ try {
+ list.add(i, makeVal(badNewKey));
+ fail();
+ }
+ catch (UnsupportedOperationException e) {
+ }
+ }
+ }
+
+ void readWriteDuplicates()
+ throws Exception {
+
+ writeRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ if (index == null) {
+ readWritePrimaryDuplicates(beginKey);
+ readWritePrimaryDuplicates(beginKey + 1);
+ readWritePrimaryDuplicates(endKey);
+ readWritePrimaryDuplicates(endKey - 1);
+ } else {
+ readWriteIndexedDuplicates(beginKey);
+ readWriteIndexedDuplicates(beginKey + 1);
+ readWriteIndexedDuplicates(endKey);
+ readWriteIndexedDuplicates(endKey - 1);
+ }
+ }
+ });
+ }
+
+ void readWritePrimaryDuplicates(int i)
+ throws Exception {
+
+ Collection dups;
+ // make duplicate values
+ final Long key = makeKey(i);
+ final Object[] values = new Object[5];
+ for (int j = 0; j < values.length; j += 1) {
+ values[j] = isEntityBinding
+ ? makeEntity(i, i + j)
+ : makeVal(i + j);
+ }
+ // add duplicates
+ outerLoop: for (int writeMode = 0;; writeMode += 1) {
+ //System.out.println("write mode " + writeMode);
+ switch (writeMode) {
+ case 0:
+ case 1: {
+ // write with Map.put()
+ for (int j = 1; j < values.length; j += 1) {
+ map.put(key, values[j]);
+ }
+ break;
+ }
+ case 2: {
+ // write with Map.duplicates().add()
+ dups = map.duplicates(key);
+ for (int j = 1; j < values.length; j += 1) {
+ dups.add(values[j]);
+ }
+ break;
+ }
+ case 3: {
+ // write with Map.duplicates().iterator().add()
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ Collection dups = map.duplicates(key);
+ Iterator iter = dups.iterator();
+ assertEquals(values[0], iter.next());
+ assertTrue(!iter.hasNext());
+ try {
+ for (int j = 1; j < values.length; j += 1) {
+ ((ListIterator) iter).add(values[j]);
+ }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ });
+ break;
+ }
+ case 4: {
+ // write with Map.values().add()
+ if (!isEntityBinding) continue;
+ Collection set = map.values();
+ for (int j = 1; j < values.length; j += 1) {
+ set.add(values[j]);
+ }
+ break;
+ }
+ default: {
+ break outerLoop;
+ }
+ }
+ // read duplicates
+ readDuplicates(i, key, values);
+ // remove duplicates
+ switch (writeMode) {
+ case 0: {
+ // remove with Map.remove()
+ map.remove(key); // remove all values
+ map.put(key, values[0]); // put back original value
+ break;
+ }
+ case 1: {
+ // remove with Map.keySet().remove()
+ map.keySet().remove(key); // remove all values
+ map.put(key, values[0]); // put back original value
+ break;
+ }
+ case 2: {
+ // remove with Map.duplicates().clear()
+ dups = map.duplicates(key);
+ dups.clear(); // remove all values
+ dups.add(values[0]); // put back original value
+ break;
+ }
+ case 3: {
+ // remove with Map.duplicates().iterator().remove()
+ writeIterRunner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ Collection dups = map.duplicates(key);
+ Iterator iter = dups.iterator();
+ try {
+ for (int j = 0; j < values.length; j += 1) {
+ assertEquals(values[j], iter.next());
+ if (j != 0) iter.remove();
+ }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+ });
+ break;
+ }
+ case 4: {
+ // remove with Map.values().remove()
+ if (!isEntityBinding) throw new IllegalStateException();
+ Collection set = map.values();
+ for (int j = 1; j < values.length; j += 1) {
+ set.remove(values[j]);
+ }
+ break;
+ }
+ default: throw new IllegalStateException();
+ }
+ // verify that only original value is present
+ dups = map.duplicates(key);
+ assertTrue(dups.contains(values[0]));
+ for (int j = 1; j < values.length; j += 1) {
+ assertTrue(!dups.contains(values[j]));
+ }
+ }
+ }
+
+ void readWriteIndexedDuplicates(int i)
+ throws Exception {
+
+ Object key = makeKey(i);
+ Object[] values = new Object[3];
+ values[0] = makeVal(i);
+ for (int j = 1; j < values.length; j += 1) {
+ values[j] = isEntityBinding
+ ? makeEntity(endKey + j, i)
+ : makeVal(i);
+ }
+ // add duplicates
+ for (int j = 1; j < values.length; j += 1) {
+ imap.put(makeKey(endKey + j), values[j]);
+ }
+ // read duplicates
+ readDuplicates(i, key, values);
+ // remove duplicates
+ for (int j = 1; j < values.length; j += 1) {
+ imap.remove(makeKey(endKey + j));
+ }
+ checkDupsSize(1, map.duplicates(key));
+ }
+
+ void readDuplicates(int i, Object key, Object[] values) {
+
+ boolean isOrdered = map.isOrdered();
+ Collection dups;
+ Iterator iter;
+ // read with Map.duplicates().iterator()
+ dups = map.duplicates(key);
+ iter = dups.iterator();
+ try {
+ for (int j = 0; j < values.length; j += 1) {
+ assertTrue(iter.hasNext());
+ Object val = iter.next();
+ assertEquals(values[j], val);
+ }
+ assertTrue(!iter.hasNext());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ // read with Map.values().iterator()
+ Collection clone = ((StoredCollection) map.values()).toList();
+ iter = map.values().iterator();
+ try {
+ for (int j = beginKey; j < i; j += 1) {
+ Object val = iter.next();
+ assertTrue(clone.remove(makeVal(j)));
+ if (isOrdered) assertEquals(makeVal(j), val);
+ }
+ for (int j = 0; j < values.length; j += 1) {
+ Object val = iter.next();
+ assertTrue(clone.remove(values[j]));
+ if (isOrdered) assertEquals(values[j], val);
+ }
+ for (int j = i + 1; j <= endKey; j += 1) {
+ Object val = iter.next();
+ assertTrue(clone.remove(makeVal(j)));
+ if (isOrdered) assertEquals(makeVal(j), val);
+ }
+ assertTrue(!iter.hasNext());
+ assertTrue(clone.isEmpty());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ // read with Map.entrySet().iterator()
+ clone = ((StoredCollection) map.entrySet()).toList();
+ iter = map.entrySet().iterator();
+ try {
+ for (int j = beginKey; j < i; j += 1) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ assertTrue(clone.remove(mapEntry(j)));
+ if (isOrdered) {
+ assertEquals(makeVal(j), entry.getValue());
+ assertEquals(makeKey(j), entry.getKey());
+ }
+ }
+ for (int j = 0; j < values.length; j += 1) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ assertTrue(clone.remove(mapEntry(makeKey(i), values[j])));
+ if (isOrdered) {
+ assertEquals(values[j], entry.getValue());
+ assertEquals(makeKey(i), entry.getKey());
+ }
+ }
+ for (int j = i + 1; j <= endKey; j += 1) {
+ Map.Entry entry = (Map.Entry) iter.next();
+ assertTrue(clone.remove(mapEntry(j)));
+ if (isOrdered) {
+ assertEquals(makeVal(j), entry.getValue());
+ assertEquals(makeKey(j), entry.getKey());
+ }
+ }
+ assertTrue(!iter.hasNext());
+ assertTrue(clone.isEmpty());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ // read with Map.keySet().iterator()
+ clone = ((StoredCollection) map.keySet()).toList();
+ iter = map.keySet().iterator();
+ try {
+ for (int j = beginKey; j < i; j += 1) {
+ Object val = iter.next();
+ assertTrue(clone.remove(makeKey(j)));
+ if (isOrdered) assertEquals(makeKey(j), val);
+ }
+ if (true) {
+ // only one key is iterated for all duplicates
+ Object val = iter.next();
+ assertTrue(clone.remove(makeKey(i)));
+ if (isOrdered) assertEquals(makeKey(i), val);
+ }
+ for (int j = i + 1; j <= endKey; j += 1) {
+ Object val = iter.next();
+ assertTrue(clone.remove(makeKey(j)));
+ if (isOrdered) assertEquals(makeKey(j), val);
+ }
+ assertTrue(!iter.hasNext());
+ assertTrue(clone.isEmpty());
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+
+ void duplicatesNotAllowed() {
+
+ Collection dups = map.duplicates(makeKey(beginKey));
+ try {
+ dups.add(makeVal(beginKey));
+ fail();
+ } catch (UnsupportedOperationException expected) { }
+ ListIterator iter = (ListIterator) dups.iterator();
+ try {
+ iter.add(makeVal(beginKey));
+ fail();
+ } catch (UnsupportedOperationException expected) {
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+
+ void listOperationsNotAllowed() {
+
+ ListIterator iter = (ListIterator) map.values().iterator();
+ try {
+ try {
+ iter.nextIndex();
+ fail();
+ } catch (UnsupportedOperationException expected) { }
+ try {
+ iter.previousIndex();
+ fail();
+ } catch (UnsupportedOperationException expected) { }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ }
+
+ void testCdbLocking() {
+
+ Iterator readIterator;
+ Iterator writeIterator;
+ StoredKeySet set = (StoredKeySet) map.keySet();
+
+ // can open two CDB read cursors
+ readIterator = set.iterator(false);
+ try {
+ Iterator readIterator2 = set.iterator(false);
+ StoredIterator.close(readIterator2);
+ } finally {
+ StoredIterator.close(readIterator);
+ }
+
+ // can open two CDB write cursors
+ writeIterator = set.iterator(true);
+ try {
+ Iterator writeIterator2 = set.iterator(true);
+ StoredIterator.close(writeIterator2);
+ } finally {
+ StoredIterator.close(writeIterator);
+ }
+
+ // cannot open CDB write cursor when read cursor is open,
+ readIterator = set.iterator(false);
+ try {
+ writeIterator = set.iterator(true);
+ fail();
+ StoredIterator.close(writeIterator);
+ } catch (IllegalStateException e) {
+ } finally {
+ StoredIterator.close(readIterator);
+ }
+
+ if (index == null) {
+ // cannot put() with read cursor open
+ readIterator = set.iterator(false);
+ try {
+ map.put(makeKey(1), makeVal(1));
+ fail();
+ } catch (IllegalStateException e) {
+ } finally {
+ StoredIterator.close(readIterator);
+ }
+
+ // cannot put() with write cursor open with RECNO/QUEUE only
+ writeIterator = set.iterator(true);
+ try {
+ if (testStore.isQueueOrRecno()) {
+ try {
+ map.put(makeKey(1), makeVal(1));
+ fail();
+ } catch (IllegalStateException e) {}
+ } else {
+ map.put(makeKey(1), makeVal(1));
+ }
+ } finally {
+ StoredIterator.close(writeIterator);
+ }
+ }
+ }
+
+ Object makeVal(int key) {
+
+ if (isEntityBinding)
+ return makeEntity(key);
+ else
+ return new Long(key + 100);
+ }
+
+ Object makeVal(int key, int val) {
+
+ if (isEntityBinding)
+ return makeEntity(key, val);
+ else
+ return makeVal(val);
+ }
+
+ Object makeEntity(int key, int val) {
+
+ return new TestEntity(key, val + 100);
+ }
+
+ int intVal(Object val) {
+
+ if (isEntityBinding)
+ return ((TestEntity) val).value - 100;
+ else
+ return ((Long) val).intValue() - 100;
+ }
+
+ int intKey(Object key) {
+
+ return ((Long) key).intValue();
+ }
+
+ Object makeVal(Long key) {
+
+ return makeVal(key.intValue());
+ }
+
+ Object makeEntity(int key) {
+
+ return makeEntity(key, key);
+ }
+
+ Object makeEntity(Long key) {
+
+ return makeEntity(key.intValue());
+ }
+
+ int intIter(Collection coll, Object value) {
+
+ if (coll instanceof StoredKeySet) {
+ return intKey(value);
+ } else {
+ if (coll instanceof StoredEntrySet) {
+ value = ((Map.Entry) value).getValue();
+ }
+ return intVal(value);
+ }
+ }
+
+ Map.Entry mapEntry(Object key, Object val) {
+
+ return new MapEntry(key, val);
+ }
+
+ Map.Entry mapEntry(int key) {
+
+ return new MapEntry(makeKey(key), makeVal(key));
+ }
+
+ Long makeKey(int key) {
+
+ return new Long(key);
+ }
+
+ boolean isSubMap() {
+
+ return rangeType != NONE;
+ }
+
+ void checkDupsSize(int expected, Collection coll) {
+
+ assertEquals(expected, coll.size());
+ if (coll instanceof StoredCollection) {
+ StoredIterator i = ((StoredCollection) coll).iterator(false);
+ try {
+ int actual = 0;
+ if (i.hasNext()) {
+ i.next();
+ actual = i.count();
+ }
+ assertEquals(expected, actual);
+ } finally {
+ StoredIterator.close(i);
+ }
+ }
+ }
+
+ private boolean isListAddAllowed() {
+
+ return list != null && testStore.isQueueOrRecno() &&
+ list.areKeysRenumbered();
+ }
+
+ private int countElements(Collection coll) {
+
+ int count = 0;
+ Iterator iter = coll.iterator();
+ try {
+ while (iter.hasNext()) {
+ iter.next();
+ count += 1;
+ }
+ } finally {
+ StoredIterator.close(iter);
+ }
+ return count;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/DbTestUtil.java b/db/test/scr024/src/com/sleepycat/bdb/test/DbTestUtil.java
new file mode 100644
index 000000000..d0eb78d7c
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/DbTestUtil.java
@@ -0,0 +1,93 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: DbTestUtil.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import junit.framework.TestCase;
+
+/**
+ * @author Mark Hayes
+ */
+public class DbTestUtil {
+
+ public static File getNewDir()
+ throws IOException {
+
+ return getNewDir("test-dir");
+ }
+
+ public static File getNewDir(String name)
+ throws IOException {
+
+ File dir = new File("tmp", name);
+ if (dir.isDirectory()) {
+ String[] files = dir.list();
+ if (files != null) {
+ for (int i = 0; i < files.length; i += 1) {
+ new File(dir, files[i]).delete();
+ }
+ }
+ } else {
+ dir.delete();
+ dir.mkdirs();
+ }
+ return dir;
+ }
+
+ public static File getNewFile()
+ throws IOException {
+
+ return getNewFile("test-file");
+ }
+
+ public static File getNewFile(String name)
+ throws IOException {
+
+ return getNewFile(new File("tmp"), name);
+ }
+
+ public static File getNewFile(File dir, String name)
+ throws IOException {
+
+ File file = new File(dir, name);
+ file.delete();
+ return file;
+ }
+
+ public static boolean copyResource(Class cls, String fileName, File toDir)
+ throws IOException {
+
+ InputStream in = cls.getResourceAsStream("testdata/" + fileName);
+ if (in == null) return false;
+ in = new BufferedInputStream(in);
+ File file = new File(toDir, fileName);
+ OutputStream out = new FileOutputStream(file);
+ out = new BufferedOutputStream(out);
+ int c;
+ while ((c = in.read()) >= 0) out.write(c);
+ in.close();
+ out.close();
+ return true;
+ }
+
+ public static String qualifiedTestName(TestCase test) {
+
+ String s = test.getClass().getName();
+ int i = s.lastIndexOf('.');
+ if (i >= 0) s = s.substring(i + 1);
+ return s + '.' + test.getName();
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/ForeignKeyTest.java b/db/test/scr024/src/com/sleepycat/bdb/test/ForeignKeyTest.java
new file mode 100644
index 000000000..1eda4616a
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/ForeignKeyTest.java
@@ -0,0 +1,239 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ForeignKeyTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.serial.test.MarshalledObject;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.ForeignKeyIndex;
+import com.sleepycat.bdb.IntegrityConstraintException;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.factory.TupleSerialDbFactory;
+import com.sleepycat.bdb.test.TestEnv;
+import java.util.Map;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class ForeignKeyTest extends TestCase
+ implements TransactionWorker {
+
+ private static final int[] ON_DELETE = {
+ ForeignKeyIndex.ON_DELETE_ABORT,
+ ForeignKeyIndex.ON_DELETE_CLEAR,
+ ForeignKeyIndex.ON_DELETE_CASCADE,
+ };
+ private static final String[] ON_DELETE_LABEL = {
+ "ON_DELETE_ABORT",
+ "ON_DELETE_CLEAR",
+ "ON_DELETE_CASCADE",
+ };
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ for (int i = 0; i < TestEnv.ALL.length; i += 1) {
+ for (int j = 0; j < ON_DELETE.length; j += 1) {
+ suite.addTest(new ForeignKeyTest(TestEnv.ALL[i],
+ ON_DELETE[j],
+ ON_DELETE_LABEL[j]));
+ }
+ }
+ return suite;
+ }
+
+ private TestEnv testEnv;
+ private DbEnv env;
+ private TransactionRunner runner;
+ private StoredClassCatalog catalog;
+ private TupleSerialDbFactory factory;
+ private DataStore store1;
+ private DataStore store2;
+ private DataIndex index1;
+ private ForeignKeyIndex index2;
+ private Map storeMap1;
+ private Map storeMap2;
+ private Map indexMap1;
+ private Map indexMap2;
+ private int onDelete;
+ private int openFlags;
+
+ public ForeignKeyTest(TestEnv testEnv, int onDelete,
+ String onDeleteLabel) {
+
+ super("ForeignKeyTest-" + testEnv.getName() + '-' + onDeleteLabel);
+
+ this.testEnv = testEnv;
+ this.onDelete = onDelete;
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(getName());
+ env = testEnv.open(getName());
+ openFlags = Db.DB_CREATE;
+ if (testEnv.isTxnMode())
+ openFlags |= Db.DB_AUTO_COMMIT;
+ runner = new TransactionRunner(env);
+ createDatabase();
+ }
+
+ public void tearDown() {
+
+ try {
+ if (store1 != null) {
+ store1.close();
+ store1 = null;
+ }
+ if (store2 != null) {
+ store2.close();
+ store2 = null;
+ }
+ if (catalog != null) {
+ catalog.close();
+ catalog = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ } catch (Exception e) {
+ System.out.println("Ignored exception during tearDown: " + e);
+ }
+ }
+
+ public void runTest()
+ throws Exception {
+
+ runner.run(this);
+ }
+
+ public void doWork()
+ throws Exception {
+
+ createViews();
+ writeAndRead();
+ }
+
+ private void createDatabase()
+ throws Exception {
+
+ catalog = new StoredClassCatalog(env, "catalog.db", null, openFlags);
+ factory = new TupleSerialDbFactory(catalog);
+ assertSame(catalog, factory.getCatalog());
+
+ store1 = factory.newDataStore(openDb("store1.db"),
+ MarshalledObject.class, null);
+
+ index1 = factory.newDataIndex(store1, openDb("index1.db"),
+ "1", false, true);
+
+ store2 = factory.newDataStore(openDb("store2.db"),
+ MarshalledObject.class, null);
+
+ index2 = factory.newForeignKeyIndex(store2, openDb("index2.db"),
+ "2", false, true, store1, onDelete);
+
+ assertSame(index2.getForeignStore(), store1);
+ assertEquals(index2.getDeleteAction(), onDelete);
+ }
+
+ private Db openDb(String file)
+ throws Exception {
+
+ Db db = new Db(env, 0);
+ db.open(null, file, null, Db.DB_HASH, openFlags, 0);
+ return db;
+ }
+
+ private void createViews()
+ throws Exception {
+
+ storeMap1 = factory.newMap(store1, String.class, true);
+ storeMap2 = factory.newMap(store2, String.class, true);
+ indexMap1 = factory.newMap(index1, String.class, true);
+ indexMap2 = factory.newMap(index2, String.class, true);
+ }
+
+ private void writeAndRead()
+ throws Exception {
+
+ MarshalledObject o1 = new MarshalledObject("data1", "pk1", "ik1", "");
+ assertNull(storeMap1.put(null, o1));
+
+ assertEquals(o1, storeMap1.get("pk1"));
+ assertEquals(o1, indexMap1.get("ik1"));
+
+ MarshalledObject o2 = new MarshalledObject("data2", "pk2", "", "pk1");
+ assertNull(storeMap2.put(null, o2));
+
+ assertEquals(o2, storeMap2.get("pk2"));
+ assertEquals(o2, indexMap2.get("pk1"));
+
+ /*
+ * store1 contains o1 with primary key "pk1" and index key "ik1"
+ * store2 contains o2 with primary key "pk2" and foreign key "pk1"
+ * which is the primary key of store1
+ */
+
+ switch (onDelete) {
+
+ case ForeignKeyIndex.ON_DELETE_ABORT:
+ try {
+ storeMap1.remove("pk1");
+ fail();
+ }
+ catch (IntegrityConstraintException expected) {}
+ o2 = new MarshalledObject("data2", "pk2", "", "");
+ assertNotNull(storeMap2.put(null, o2));
+ assertEquals(o2, storeMap2.get("pk2"));
+ assertNull(indexMap2.get("pk1"));
+ storeMap1.remove("pk1");
+ assertNull(storeMap1.get("pk1"));
+ assertNull(indexMap1.get("ik1"));
+ break;
+ case ForeignKeyIndex.ON_DELETE_CLEAR:
+ storeMap1.remove("pk1");
+ assertNull(storeMap1.get("pk1"));
+ assertNull(indexMap1.get("ik1"));
+ o2 = (MarshalledObject) storeMap2.get("pk2");
+ assertNotNull(o2);
+ assertEquals("data2", o2.getData());
+ assertEquals("pk2", o2.getPrimaryKey());
+ assertEquals("", o2.getIndexKey1());
+ assertEquals("", o2.getIndexKey2());
+ break;
+ case ForeignKeyIndex.ON_DELETE_CASCADE:
+ storeMap1.remove("pk1");
+ assertNull(storeMap1.get("pk1"));
+ assertNull(indexMap1.get("ik1"));
+ assertNull(storeMap2.get("pk2"));
+ assertNull(indexMap2.get("pk1"));
+ break;
+ default:
+ throw new IllegalStateException();
+ }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/JoinTest.java b/db/test/scr024/src/com/sleepycat/bdb/test/JoinTest.java
new file mode 100644
index 000000000..0da2c0422
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/JoinTest.java
@@ -0,0 +1,192 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2000-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: JoinTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.serial.test.MarshalledObject;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.StoredClassCatalog;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredCollection;
+import com.sleepycat.bdb.collection.StoredContainer;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.bdb.collection.StoredMap;
+import com.sleepycat.bdb.factory.TupleSerialDbFactory;
+import com.sleepycat.bdb.test.TestEnv;
+import java.util.Map;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+/**
+ * @author Mark Hayes
+ */
+public class JoinTest extends TestCase
+ implements TransactionWorker {
+
+ private static final String MATCH_DATA = "d4"; // matches both keys = "yes"
+ private static final String MATCH_KEY = "k4"; // matches both keys = "yes"
+ private static final String[] VALUES = {"yes", "yes"};
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ return new JoinTest();
+ }
+
+ private DbEnv env;
+ private TransactionRunner runner;
+ private StoredClassCatalog catalog;
+ private TupleSerialDbFactory factory;
+ private DataStore store;
+ private DataIndex index1;
+ private DataIndex index2;
+ private StoredMap storeMap;
+ private StoredMap indexMap1;
+ private StoredMap indexMap2;
+
+ public JoinTest() {
+
+ super("JoinTest");
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(getName());
+ env = TestEnv.TXN.open(getName());
+ runner = new TransactionRunner(env);
+ createDatabase();
+ }
+
+ public void tearDown() {
+
+ try {
+ if (store != null) {
+ store.close();
+ store = null;
+ }
+ if (catalog != null) {
+ catalog.close();
+ catalog = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ } catch (Exception e) {
+ System.out.println("Ignored exception during tearDown: " + e);
+ }
+ }
+
+ public void runTest()
+ throws Exception {
+
+ runner.run(this);
+ }
+
+ public void doWork()
+ throws Exception {
+
+ createViews();
+ writeAndRead();
+ }
+
+ private void createDatabase()
+ throws Exception {
+
+ catalog = new StoredClassCatalog(env, "catalog.db", null,
+ Db.DB_CREATE | Db.DB_AUTO_COMMIT);
+ factory = new TupleSerialDbFactory(catalog);
+ assertSame(catalog, factory.getCatalog());
+
+ store = factory.newDataStore(openDb("store.db", false),
+ MarshalledObject.class, null);
+
+ index1 = factory.newDataIndex(store, openDb("index1.db", true),
+ "1", false, true);
+
+ index2 = factory.newDataIndex(store, openDb("index2.db", true),
+ "2", false, true);
+ }
+
+ private Db openDb(String file, boolean dups)
+ throws Exception {
+
+ Db db = new Db(env, 0);
+ if (dups)
+ db.setFlags(Db.DB_DUPSORT);
+ db.open(null, file, null, Db.DB_HASH,
+ Db.DB_CREATE | Db.DB_AUTO_COMMIT, 0);
+ return db;
+ }
+
+ private void createViews()
+ throws Exception {
+
+ storeMap = factory.newMap(store, String.class, true);
+ indexMap1 = factory.newMap(index1, String.class, true);
+ indexMap2 = factory.newMap(index2, String.class, true);
+ }
+
+ private void writeAndRead()
+ throws Exception {
+
+ // write records: Data, PrimaryKey, IndexKey1, IndexKey2
+ assertNull(storeMap.put(null,
+ new MarshalledObject("d1", "k1", "no", "yes")));
+ assertNull(storeMap.put(null,
+ new MarshalledObject("d2", "k2", "no", "no")));
+ assertNull(storeMap.put(null,
+ new MarshalledObject("d3", "k3", "no", "yes")));
+ assertNull(storeMap.put(null,
+ new MarshalledObject("d4", "k4", "yes", "yes")));
+ assertNull(storeMap.put(null,
+ new MarshalledObject("d5", "k5", "yes", "no")));
+
+ Object o;
+ Map.Entry e;
+
+ // join values with index maps
+ o = doJoin((StoredCollection) storeMap.values());
+ assertEquals(MATCH_DATA, ((MarshalledObject) o).getData());
+
+ // join keySet with index maps
+ o = doJoin((StoredCollection) storeMap.keySet());
+ assertEquals(MATCH_KEY, o);
+
+ // join entrySet with index maps
+ o = doJoin((StoredCollection) storeMap.entrySet());
+ e = (Map.Entry) o;
+ assertEquals(MATCH_KEY, e.getKey());
+ assertEquals(MATCH_DATA, ((MarshalledObject) e.getValue()).getData());
+ }
+
+ private Object doJoin(StoredCollection coll) {
+
+ StoredContainer[] indices = { indexMap1, indexMap2 };
+ StoredIterator i = coll.join(indices, VALUES);
+ try {
+ assertTrue(i.hasNext());
+ Object result = i.next();
+ assertNotNull(result);
+ assertFalse(i.hasNext());
+ return result;
+ } finally { i.close(); }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/KeyRangeTest.java b/db/test/scr024/src/com/sleepycat/bdb/test/KeyRangeTest.java
new file mode 100644
index 000000000..bddb75851
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/KeyRangeTest.java
@@ -0,0 +1,260 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: KeyRangeTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.ByteArrayBinding;
+import com.sleepycat.bdb.bind.ByteArrayFormat;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.DataCursor;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.DataView;
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Arrays;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class KeyRangeTest extends TestCase {
+
+ private static boolean VERBOSE = false;
+
+ private DbEnv env;
+ private DataStore store;
+ private DataView view;
+ private DataCursor cursor;
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite() {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(new KeyRangeTest());
+ return suite;
+ }
+
+ public KeyRangeTest() {
+
+ super("all-tests");
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(DbTestUtil.qualifiedTestName(this));
+ File dir = DbTestUtil.getNewDir();
+ ByteArrayFormat dataFormat = new ByteArrayFormat();
+ ByteArrayBinding dataBinding = new ByteArrayBinding(dataFormat);
+
+ int envFlags = Db.DB_INIT_MPOOL | Db.DB_CREATE;
+ env = new DbEnv(0);
+ env.open(dir.getAbsolutePath(), envFlags, 0);
+ Db db = new Db(env, 0);
+ db.open(null, "test.db", null, Db.DB_BTREE, Db.DB_CREATE, 0);
+ store = new DataStore(db, dataFormat, dataFormat, null);
+ view = new DataView(store, null, dataBinding, dataBinding, null, true);
+ }
+
+ public void tearDown()
+ throws Exception {
+
+ store.close();
+ env.close(0);
+ }
+
+ public void runTest() throws Exception {
+
+ final byte FF = (byte) 0xFF;
+
+ byte[][] keyBytes = {
+ /* 0 */ {1},
+ /* 1 */ {FF},
+ /* 2 */ {FF, 0},
+ /* 3 */ {FF, 0x7F},
+ /* 4 */ {FF, FF},
+ /* 5 */ {FF, FF, 0},
+ /* 6 */ {FF, FF, 0x7F},
+ /* 7 */ {FF, FF, FF},
+ };
+ byte[][] keys = new byte[keyBytes.length][];
+ final int end = keyBytes.length - 1;
+ for (int i = 0; i <= end; i++) {
+ keys[i] = keyBytes[i];
+ view.put(keys[i], keyBytes[i], 0, null);
+ }
+ byte[][] extremeKeyBytes = {
+ /* 0 */ {0},
+ /* 1 */ {FF, FF, FF, FF},
+ };
+ byte[][] extremeKeys = new byte[extremeKeyBytes.length][];
+ for (int i = 0; i < extremeKeys.length; i++) {
+ extremeKeys[i] = extremeKeyBytes[i];
+ }
+
+ // with empty range
+
+ cursor = new DataCursor(view, false);
+ expectRange(keyBytes, 0, end);
+ cursor.close();
+
+ // begin key only, inclusive
+
+ for (int i = 0; i <= end; i++) {
+ cursor = new DataCursor(view, false, keys[i], true, null, false);
+ expectRange(keyBytes, i, end);
+ cursor.close();
+ }
+
+ // begin key only, exclusive
+
+ for (int i = 0; i <= end; i++) {
+ cursor = new DataCursor(view, false, keys[i], false, null, false);
+ expectRange(keyBytes, i + 1, end);
+ cursor.close();
+ }
+
+ // end key only, inclusive
+
+ for (int i = 0; i <= end; i++) {
+ cursor = new DataCursor(view, false, null, false, keys[i], true);
+ expectRange(keyBytes, 0, i);
+ cursor.close();
+ }
+
+ // end key only, exclusive
+
+ for (int i = 0; i <= end; i++) {
+ cursor = new DataCursor(view, false, null, false, keys[i], false);
+ expectRange(keyBytes, 0, i - 1);
+ cursor.close();
+ }
+
+ // begin and end keys, inclusive and exclusive
+
+ for (int i = 0; i <= end; i++) {
+ for (int j = i; j <= end; j++) {
+ // begin inclusive, end inclusive
+
+ cursor = new DataCursor(view, false, keys[i], true, keys[j],
+ true);
+ expectRange(keyBytes, i, j);
+ cursor.close();
+
+ // begin inclusive, end exclusive
+
+ cursor = new DataCursor(view, false, keys[i], true, keys[j],
+ false);
+ expectRange(keyBytes, i, j - 1);
+ cursor.close();
+
+ // begin exclusive, end inclusive
+
+ cursor = new DataCursor(view, false, keys[i], false, keys[j],
+ true);
+ expectRange(keyBytes, i + 1, j);
+ cursor.close();
+
+ // begin exclusive, end exclusive
+
+ cursor = new DataCursor(view, false, keys[i], false, keys[j],
+ false);
+ expectRange(keyBytes, i + 1, j - 1);
+ cursor.close();
+ }
+ }
+
+ // single key range
+
+ for (int i = 0; i <= end; i++) {
+ cursor = new DataCursor(view, false, keys[i]);
+ expectRange(keyBytes, i, i);
+ cursor.close();
+ }
+
+ // start with lower extreme (before any existing key)
+
+ cursor = new DataCursor(view, false, extremeKeys[0], true, null, false);
+ expectRange(keyBytes, 0, end);
+ cursor.close();
+
+ // start with higher extreme (after any existing key)
+
+ cursor = new DataCursor(view, false, null, false, extremeKeys[1], true);
+ expectRange(keyBytes, 0, end);
+ cursor.close();
+ }
+
+ private void expectRange(byte[][] bytes, int first, int last)
+ throws DbException, IOException {
+
+ for (int pos = Db.DB_FIRST, i = first;; i++, pos = Db.DB_NEXT) {
+ if (checkRange(bytes, first, last, i <= last, true, pos, i))
+ break;
+ }
+
+ for (int pos = Db.DB_LAST, i = last;; i--, pos = Db.DB_PREV) {
+ if (checkRange(bytes, first, last, i >= first, false, pos, i))
+ break;
+ }
+ }
+
+ private boolean checkRange(byte[][] bytes, int first, int last,
+ boolean inRange, boolean forward, int pos,
+ int i)
+ throws DbException, IOException {
+
+ int err = cursor.get(null, null, pos, false);
+
+ // check that moving past ends doesn't move the cursor
+ if (err == 0 && i == first) {
+ int e2 = cursor.get(null, null, Db.DB_PREV, false);
+ assertEquals(Db.DB_NOTFOUND, e2);
+ }
+ if (err == 0 && i == last) {
+ int e2 = cursor.get(null, null, Db.DB_NEXT, false);
+ assertEquals(Db.DB_NOTFOUND, e2);
+ }
+
+ byte[] val = (err == 0) ? ((byte[]) cursor.getCurrentValue()) : null;
+
+ String msg = " " + (forward ? "fwd" : "rev") + " i=" + i +
+ " first=" + first + " last=" + last;
+
+ if (inRange) {
+ assertNotNull("RangeNotFound" + msg, val);
+
+ if (!Arrays.equals(val, bytes[i])){
+ printBytes(val);
+ printBytes(bytes[i]);
+ fail("RangeKeyNotEqual" + msg);
+ }
+ if (VERBOSE) System.out.println("GotRange" + msg);
+ return false;
+ } else {
+ assertEquals("RangeExceeded" + msg, Db.DB_NOTFOUND, err);
+ return true;
+ }
+ }
+
+ private void printBytes(byte[] bytes) {
+
+ System.out.println(new BigInteger(bytes).toString());
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/NullTransactionRunner.java b/db/test/scr024/src/com/sleepycat/bdb/test/NullTransactionRunner.java
new file mode 100644
index 000000000..768da6de3
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/NullTransactionRunner.java
@@ -0,0 +1,33 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: NullTransactionRunner.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+
+class NullTransactionRunner extends TransactionRunner {
+
+ NullTransactionRunner(DbEnv env) {
+
+ super(env);
+ }
+
+ public void run(TransactionWorker worker)
+ throws Exception {
+
+ try {
+ worker.doWork();
+ } catch (Exception e) {
+ throw ExceptionUnwrapper.unwrap(e);
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/test/Suite.java
new file mode 100644
index 000000000..3e8a9a0c2
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/Suite.java
@@ -0,0 +1,40 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(com.sleepycat.bdb.util.test.Suite.suite());
+ suite.addTest(com.sleepycat.bdb.bind.test.Suite.suite());
+ suite.addTest(com.sleepycat.bdb.serial.test.Suite.suite());
+ suite.addTest(TransactionTest.suite());
+ suite.addTest(KeyRangeTest.suite());
+ suite.addTest(ForeignKeyTest.suite());
+ suite.addTest(JoinTest.suite());
+ suite.addTest(CollectionTest.suite());
+ return suite;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestDataBinding.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestDataBinding.java
new file mode 100644
index 000000000..d95a437e4
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestDataBinding.java
@@ -0,0 +1,41 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestDataBinding.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+class TestDataBinding implements DataBinding {
+
+ public Object dataToObject(DataBuffer data)
+ throws IOException {
+
+ if (data.getDataLength() != 1) throw new IllegalStateException();
+ byte val = data.getDataBytes()[data.getDataOffset()];
+ return new Long(val);
+ }
+
+ public void objectToData(Object object, DataBuffer data)
+ throws IOException {
+
+ byte val = ((Number) object).byteValue();
+ data.setData(new byte[] { val }, 0, 1);
+ }
+
+ public DataFormat getDataFormat() {
+
+ return TestStore.BYTE_FORMAT;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestEntity.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestEntity.java
new file mode 100644
index 000000000..2533de386
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestEntity.java
@@ -0,0 +1,45 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestEntity.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+/**
+ * @author Mark Hayes
+ */
+class TestEntity {
+
+ int key;
+ int value;
+
+ TestEntity(int key, int value) {
+
+ this.key = key;
+ this.value = value;
+ }
+
+ public boolean equals(Object o) {
+
+ try {
+ TestEntity e = (TestEntity) o;
+ return e.key == key && e.value == value;
+ } catch (ClassCastException e) {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+
+ return key;
+ }
+
+ public String toString() {
+
+ return "[key " + key + " value " + value + ']';
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestEntityBinding.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestEntityBinding.java
new file mode 100644
index 000000000..2e71962c9
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestEntityBinding.java
@@ -0,0 +1,76 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestEntityBinding.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+class TestEntityBinding implements EntityBinding {
+
+ private boolean isRecNum;
+
+ TestEntityBinding(boolean isRecNum) {
+
+ this.isRecNum = isRecNum;
+ }
+
+ public Object dataToObject(DataBuffer key, DataBuffer value)
+ throws IOException {
+
+ byte keyByte;
+ if (isRecNum) {
+ if (key.getDataLength() != 4) throw new IllegalStateException();
+ keyByte = (byte) TestStore.RECNO_FORMAT.dataToRecordNumber(key);
+ } else {
+ if (key.getDataLength() != 1) throw new IllegalStateException();
+ keyByte = key.getDataBytes()[key.getDataOffset()];
+ }
+ if (value.getDataLength() != 1) throw new IllegalStateException();
+ byte valByte = value.getDataBytes()[value.getDataOffset()];
+ return new TestEntity(keyByte, valByte);
+ }
+
+ public void objectToKey(Object object, DataBuffer key)
+ throws IOException {
+
+ byte val = (byte) ((TestEntity) object).key;
+ if (isRecNum) {
+ TestStore.RECNO_FORMAT.recordNumberToData(val, key);
+ } else {
+ key.setData(new byte[] { val }, 0, 1);
+ }
+ }
+
+ public void objectToValue(Object object, DataBuffer value)
+ throws IOException {
+
+ byte val = (byte) ((TestEntity) object).value;
+ value.setData(new byte[] { val }, 0, 1);
+ }
+
+ public DataFormat getKeyFormat() {
+
+ if (isRecNum) {
+ return TestStore.RECNO_FORMAT;
+ } else {
+ return TestStore.BYTE_FORMAT;
+ }
+ }
+
+ public DataFormat getValueFormat() {
+
+ return TestStore.BYTE_FORMAT;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestEnv.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestEnv.java
new file mode 100644
index 000000000..bcd217181
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestEnv.java
@@ -0,0 +1,71 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestEnv.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+public class TestEnv {
+
+ public static final TestEnv BDB =
+ new TestEnv("bdb", Db.DB_INIT_MPOOL);
+ public static final TestEnv CDB =
+ new TestEnv("cdb", Db.DB_INIT_CDB | Db.DB_INIT_MPOOL);
+ public static final TestEnv TXN =
+ new TestEnv("txn", Db.DB_INIT_TXN | Db.DB_INIT_LOCK | Db.DB_INIT_MPOOL);
+
+ //public static final TestEnv[] ALL = { TXN };
+ public static final TestEnv[] ALL = { BDB, CDB, TXN };
+
+ private String name;
+ private int flags;
+
+ private TestEnv(String name, int flags) {
+
+ this.name = name;
+ this.flags = flags | Db.DB_CREATE;
+ }
+
+ public String getName() {
+
+ return name;
+ }
+
+ public boolean isTxnMode() {
+
+ return (flags & Db.DB_INIT_TXN) != 0;
+ }
+
+ public boolean isCdbMode() {
+
+ return (flags & Db.DB_INIT_CDB) != 0;
+ }
+
+ public DbEnv open(String testName)
+ throws IOException, DbException {
+
+ File dir = getDirectory(testName);
+ DbEnv dbEnv = new DbEnv(0);
+ dbEnv.open(dir.getAbsolutePath(), flags, 0);
+ return dbEnv;
+ }
+
+ public File getDirectory(String testName)
+ throws IOException {
+
+ return DbTestUtil.getNewDir("db-test/" + testName);
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyAssigner.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyAssigner.java
new file mode 100644
index 000000000..897ed121b
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyAssigner.java
@@ -0,0 +1,45 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestKeyAssigner.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.PrimaryKeyAssigner;
+import com.sleepycat.db.DbException;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+class TestKeyAssigner implements PrimaryKeyAssigner {
+
+ private byte next = 1;
+ private boolean isRecNum;
+
+ TestKeyAssigner(boolean isRecNum) {
+
+ this.isRecNum = isRecNum;
+ }
+
+ public void assignKey(DataBuffer keyData)
+ throws DbException, IOException {
+
+ if (isRecNum) {
+ TestStore.RECNO_FORMAT.recordNumberToData(next, keyData);
+ } else {
+ keyData.setData(new byte[] { next }, 0, 1);
+ }
+ next += 1;
+ }
+
+ void reset() {
+
+ next = 1;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyExtractor.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyExtractor.java
new file mode 100644
index 000000000..8f212df1f
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestKeyExtractor.java
@@ -0,0 +1,69 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestKeyExtractor.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.DataBuffer;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.KeyExtractor;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+class TestKeyExtractor implements KeyExtractor {
+
+ private boolean isRecNum;
+
+ TestKeyExtractor(boolean isRecNum) {
+
+ this.isRecNum = isRecNum;
+ }
+
+ public void extractIndexKey(DataBuffer primaryKeyData,
+ DataBuffer valueData, DataBuffer indexKeyData)
+ throws IOException {
+
+ if (valueData.getDataLength() == 0) return;
+ if (valueData.getDataLength() != 1) throw new IllegalStateException();
+ byte val = valueData.getDataBytes()[valueData.getDataOffset()];
+ if (val == 0) return; // fixed-len pad value
+ val -= 100;
+ if (isRecNum) {
+ TestStore.RECNO_FORMAT.recordNumberToData(val, indexKeyData);
+ } else {
+ indexKeyData.setData(new byte[] { val }, 0, 1);
+ }
+ }
+
+ public void clearIndexKey(DataBuffer valueData)
+ throws IOException {
+
+ throw new IOException("not supported");
+ }
+
+ public DataFormat getPrimaryKeyFormat() {
+
+ return null;
+ }
+
+ public DataFormat getValueFormat() {
+
+ return TestStore.BYTE_FORMAT;
+ }
+
+ public DataFormat getIndexKeyFormat() {
+
+ if (isRecNum) {
+ return TestStore.RECNO_FORMAT;
+ } else {
+ return TestStore.BYTE_FORMAT;
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TestStore.java b/db/test/scr024/src/com/sleepycat/bdb/test/TestStore.java
new file mode 100644
index 000000000..d7e7ee693
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TestStore.java
@@ -0,0 +1,209 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TestStore.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.bdb.bind.ByteArrayFormat;
+import com.sleepycat.bdb.bind.DataBinding;
+import com.sleepycat.bdb.bind.DataFormat;
+import com.sleepycat.bdb.bind.EntityBinding;
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbException;
+import com.sleepycat.bdb.CurrentTransaction;
+import com.sleepycat.bdb.RecordNumberBinding;
+import com.sleepycat.bdb.RecordNumberFormat;
+import com.sleepycat.bdb.DataIndex;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.PrimaryKeyAssigner;
+import java.io.IOException;
+
+/**
+ * @author Mark Hayes
+ */
+class TestStore {
+
+ static final ByteArrayFormat BYTE_FORMAT = new ByteArrayFormat();
+ static final RecordNumberFormat RECNO_FORMAT = new RecordNumberFormat();
+ static final TestKeyExtractor BYTE_EXTRACTOR = new TestKeyExtractor(false);
+ static final TestKeyExtractor RECNO_EXTRACTOR = new TestKeyExtractor(true);
+ static final DataBinding VALUE_BINDING = new TestDataBinding();
+ static final DataBinding BYTE_KEY_BINDING = VALUE_BINDING;
+ static final DataBinding RECNO_KEY_BINDING =
+ new RecordNumberBinding(RECNO_FORMAT);
+ static final EntityBinding BYTE_ENTITY_BINDING =
+ new TestEntityBinding(false);
+ static final EntityBinding RECNO_ENTITY_BINDING =
+ new TestEntityBinding(true);
+ static final PrimaryKeyAssigner BYTE_KEY_ASSIGNER =
+ new TestKeyAssigner(false);
+ static final PrimaryKeyAssigner RECNO_KEY_ASSIGNER =
+ new TestKeyAssigner(true);
+
+ static final TestStore BTREE_UNIQ =
+ new TestStore("btree-uniq", Db.DB_BTREE, 0);
+ static final TestStore BTREE_DUP =
+ new TestStore("btree-dup", Db.DB_BTREE, Db.DB_DUP);
+ static final TestStore BTREE_DUPSORT =
+ new TestStore("btree-dupsort", Db.DB_BTREE, Db.DB_DUPSORT);
+ static final TestStore BTREE_RECNUM =
+ new TestStore("btree-recnum", Db.DB_BTREE, Db.DB_RECNUM);
+ static final TestStore HASH_UNIQ =
+ new TestStore("hash-uniq", Db.DB_HASH, 0);
+ static final TestStore HASH_DUP =
+ new TestStore("hash-dup", Db.DB_HASH, Db.DB_DUP);
+ static final TestStore HASH_DUPSORT =
+ new TestStore("hash-dupsort", Db.DB_HASH, Db.DB_DUPSORT);
+ static final TestStore QUEUE =
+ new TestStore("queue", Db.DB_QUEUE, 0);
+ static final TestStore RECNO =
+ new TestStore("recno", Db.DB_RECNO, 0);
+ static final TestStore RECNO_RENUM =
+ new TestStore("recno-renum", Db.DB_RECNO, Db.DB_RENUMBER);
+ static {
+ BTREE_UNIQ.indexOf = BTREE_UNIQ;
+ BTREE_DUP.indexOf = null; // indexes must use sorted duplicates
+ BTREE_DUPSORT.indexOf = BTREE_UNIQ;
+ BTREE_RECNUM.indexOf = BTREE_RECNUM;
+ HASH_UNIQ.indexOf = HASH_UNIQ;
+ HASH_DUP.indexOf = null; // indexes must use sorted duplicates
+ HASH_DUPSORT.indexOf = HASH_UNIQ;
+ QUEUE.indexOf = QUEUE;
+ RECNO.indexOf = RECNO;
+ RECNO_RENUM.indexOf = null; // indexes must have stable keys
+ }
+
+ static final TestStore[] ALL = {
+ BTREE_UNIQ,
+ BTREE_DUP,
+ BTREE_DUPSORT,
+ BTREE_RECNUM,
+ HASH_UNIQ,
+ HASH_DUP,
+ HASH_DUPSORT,
+ QUEUE,
+ RECNO,
+ RECNO_RENUM,
+ /*
+ */
+ };
+
+ private String name;
+ private int type;
+ private int flags;
+ private TestStore indexOf;
+ private boolean isRecNumFormat;
+ private DataFormat keyFormat;
+
+ private TestStore(String name, int type, int flags) {
+
+ this.name = name;
+ this.type = type;
+ this.flags = flags;
+
+ isRecNumFormat = type == Db.DB_QUEUE || type == Db.DB_RECNO ||
+ (type == Db.DB_BTREE && (flags & Db.DB_RECNUM) != 0);
+ if (isRecNumFormat) {
+ keyFormat = RECNO_FORMAT;
+ } else {
+ keyFormat = BYTE_FORMAT;
+ }
+ }
+
+ DataBinding getValueBinding() {
+
+ return VALUE_BINDING;
+ }
+
+ DataBinding getKeyBinding() {
+
+ return isRecNumFormat ? RECNO_KEY_BINDING : BYTE_KEY_BINDING;
+ }
+
+ EntityBinding getEntityBinding() {
+
+ return isRecNumFormat ? RECNO_ENTITY_BINDING : BYTE_ENTITY_BINDING;
+ }
+
+ PrimaryKeyAssigner getKeyAssigner() {
+
+ return isRecNumFormat ? RECNO_KEY_ASSIGNER : BYTE_KEY_ASSIGNER;
+ }
+
+ String getName() {
+
+ return name;
+ }
+
+ boolean isOrdered() {
+
+ return type != Db.DB_HASH;
+ }
+
+ boolean isQueueOrRecno() {
+
+ return type == Db.DB_QUEUE || type == Db.DB_RECNO;
+ }
+
+ boolean areDuplicatesAllowed() {
+
+ return (flags & (Db.DB_DUP | Db.DB_DUPSORT)) != 0;
+ }
+
+ boolean hasRecNumAccess() {
+
+ return isRecNumFormat || (flags & Db.DB_RECNUM) != 0;
+ }
+
+ boolean areKeysRenumbered() {
+
+ return hasRecNumAccess() &&
+ (type == Db.DB_BTREE || (flags & Db.DB_RENUMBER) != 0);
+ }
+
+ TestStore getIndexOf() {
+
+ return indexOf;
+ }
+
+ DataStore open(DbEnv env, String fileName)
+ throws IOException, DbException {
+
+ int fixedLen = (isQueueOrRecno() ? 1 : 0);
+ Db db = openDb(env, fileName, fixedLen);
+ PrimaryKeyAssigner keyAssigner =
+ isQueueOrRecno() ? null : getKeyAssigner();
+ return new DataStore(db, keyFormat, BYTE_FORMAT, keyAssigner);
+ }
+
+ DataIndex openIndex(DataStore store, String fileName)
+ throws IOException, DbException {
+
+ int fixedLen = (isQueueOrRecno() ? 4 : 0);
+ Db db = openDb(store.getEnv(), fileName, fixedLen);
+ return new DataIndex(store, db, keyFormat,
+ (isRecNumFormat ? RECNO_EXTRACTOR : BYTE_EXTRACTOR));
+ }
+
+ private Db openDb(DbEnv env, String fileName, int fixedLen)
+ throws IOException, DbException {
+
+ Db db = new Db(env, 0);
+ db.setFlags(flags);
+ if (fixedLen > 0) {
+ db.setRecordLength(fixedLen);
+ db.setRecordPad(0);
+ }
+ int openFlags = Db.DB_DIRTY_READ | Db.DB_CREATE;
+ if (CurrentTransaction.getInstance(env) != null)
+ openFlags |= Db.DB_AUTO_COMMIT;
+ db.open(null, fileName, null, type, openFlags, 0);
+ return db;
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/test/TransactionTest.java b/db/test/scr024/src/com/sleepycat/bdb/test/TransactionTest.java
new file mode 100644
index 000000000..bd9a1a0e2
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/test/TransactionTest.java
@@ -0,0 +1,613 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: TransactionTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.test;
+
+import com.sleepycat.db.Db;
+import com.sleepycat.db.DbEnv;
+import com.sleepycat.db.DbTxn;
+import com.sleepycat.bdb.CurrentTransaction;
+import com.sleepycat.bdb.DataStore;
+import com.sleepycat.bdb.TransactionRunner;
+import com.sleepycat.bdb.TransactionWorker;
+import com.sleepycat.bdb.collection.StoredContainer;
+import com.sleepycat.bdb.collection.StoredCollections;
+import com.sleepycat.bdb.collection.StoredIterator;
+import com.sleepycat.bdb.collection.StoredList;
+import com.sleepycat.bdb.collection.StoredSortedMap;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class TransactionTest extends TestCase {
+
+ private static final Long ONE = new Long(1);
+ private static final Long TWO = new Long(2);
+ private static final Long THREE = new Long(3);
+
+ /**
+ * Runs a command line collection test.
+ * @see #usage
+ */
+ public static void main(String[] args)
+ throws Exception {
+
+ if (args.length == 1 &&
+ (args[0].equals("-h") || args[0].equals("-help"))) {
+ usage();
+ } else {
+ junit.textui.TestRunner.run(suite());
+ }
+ }
+
+ private static void usage() {
+
+ System.out.println(
+ "Usage: java com.sleepycat.bdb.test.TransactionTest [-h | -help]\n");
+ System.exit(2);
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(TransactionTest.class);
+ return suite;
+ }
+
+ private DbEnv env;
+ private CurrentTransaction currentTxn;
+ private DataStore store;
+ private StoredSortedMap map;
+ private TestStore testStore = TestStore.BTREE_UNIQ;
+
+ public TransactionTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp()
+ throws Exception {
+
+ System.out.println(DbTestUtil.qualifiedTestName(this));
+ env = TestEnv.TXN.open("TransactionTests");
+ currentTxn = CurrentTransaction.getInstance(env);
+ store = testStore.open(env, null);
+ map = new StoredSortedMap(store, testStore.getKeyBinding(),
+ testStore.getValueBinding(), true);
+ }
+
+ public void tearDown() {
+
+ try {
+ if (store != null) {
+ store.close();
+ store = null;
+ }
+ if (env != null) {
+ env.close(0);
+ env = null;
+ }
+ } catch (Exception e) {
+ System.out.println("Ignored exception during tearDown: " + e);
+ }
+ }
+
+ public void testGetters()
+ throws Exception {
+
+ assertNotNull(env);
+ assertNotNull(currentTxn);
+ assertNull(currentTxn.getTxn());
+
+ currentTxn.beginTxn();
+ assertNotNull(currentTxn.getTxn());
+ currentTxn.commitTxn();
+ assertNull(currentTxn.getTxn());
+
+ currentTxn.beginTxn();
+ assertNotNull(currentTxn.getTxn());
+ currentTxn.abortTxn();
+ assertNull(currentTxn.getTxn());
+
+ // dirty-read property should be inherited
+
+ assertTrue(!map.isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.values()).isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.keySet()).isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.entrySet()).isDirtyReadEnabled());
+
+ StoredSortedMap other =
+ (StoredSortedMap) StoredCollections.dirtyReadMap(map);
+ assertTrue(other.isDirtyReadEnabled());
+ assertTrue(((StoredContainer) other.values()).isDirtyReadEnabled());
+ assertTrue(((StoredContainer) other.keySet()).isDirtyReadEnabled());
+ assertTrue(((StoredContainer) other.entrySet()).isDirtyReadEnabled());
+ assertTrue(!map.isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.values()).isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.keySet()).isDirtyReadEnabled());
+ assertTrue(!((StoredContainer) map.entrySet()).isDirtyReadEnabled());
+
+ // auto-commit property should be inherited
+
+ assertTrue(!map.isAutoCommit());
+ assertTrue(!((StoredContainer) map.values()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.keySet()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.entrySet()).isAutoCommit());
+
+ other = (StoredSortedMap) StoredCollections.autoCommitMap(map);
+ assertTrue(other.isAutoCommit());
+ assertTrue(((StoredContainer) other.values()).isAutoCommit());
+ assertTrue(((StoredContainer) other.keySet()).isAutoCommit());
+ assertTrue(((StoredContainer) other.entrySet()).isAutoCommit());
+ assertTrue(!map.isAutoCommit());
+ assertTrue(!((StoredContainer) map.values()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.keySet()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.entrySet()).isAutoCommit());
+
+ // auto-commit property should be ORed with environment auto-commit
+
+ env.setFlags(Db.DB_AUTO_COMMIT, true);
+ assertTrue(map.isAutoCommit());
+ assertTrue(((StoredContainer) map.values()).isAutoCommit());
+ assertTrue(((StoredContainer) map.keySet()).isAutoCommit());
+ assertTrue(((StoredContainer) map.entrySet()).isAutoCommit());
+
+ env.setFlags(Db.DB_AUTO_COMMIT, false);
+ assertTrue(!map.isAutoCommit());
+ assertTrue(!((StoredContainer) map.values()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.keySet()).isAutoCommit());
+ assertTrue(!((StoredContainer) map.entrySet()).isAutoCommit());
+ }
+
+ public void testTransactional()
+ throws Exception {
+
+ // is transactional because DB_AUTO_COMMIT was passed to Db.open()
+ //
+ assertTrue(map.isTransactional());
+ store.close();
+ store = null;
+
+ // is not transactional because is not opened in a transaction
+ //
+ Db db = new Db(env, 0);
+ db.open(null, null, null, Db.DB_BTREE, 0, 0);
+ store = new DataStore(db, TestStore.BYTE_FORMAT,
+ TestStore.BYTE_FORMAT, null);
+ map = new StoredSortedMap(store,
+ testStore.getKeyBinding(), testStore.getValueBinding(), true);
+ assertTrue(!map.isTransactional());
+ map.put(ONE, ONE);
+ readCheck(map, ONE, ONE);
+ store.close();
+
+ // is transactional because is opened in a transaction
+ //
+ currentTxn.beginTxn();
+ db = new Db(env, 0);
+ db.open(currentTxn.getTxn(), null, null, Db.DB_BTREE, 0, 0);
+ currentTxn.commitTxn();
+ store = new DataStore(db, TestStore.BYTE_FORMAT,
+ TestStore.BYTE_FORMAT, null);
+ map = new StoredSortedMap(store,
+ testStore.getKeyBinding(), testStore.getValueBinding(), true);
+ assertTrue(map.isTransactional());
+ currentTxn.beginTxn();
+ map.put(ONE, ONE);
+ readCheck(map, ONE, ONE);
+ currentTxn.commitTxn();
+ }
+
+ public void testExceptions()
+ throws Exception {
+
+ try {
+ currentTxn.commitTxn();
+ fail();
+ } catch (IllegalStateException expected) {}
+
+ try {
+ currentTxn.abortTxn();
+ fail();
+ } catch (IllegalStateException expected) {}
+ }
+
+ public void testNested()
+ throws Exception {
+
+ assertNull(currentTxn.getTxn());
+
+ DbTxn txn1 = currentTxn.beginTxn();
+ assertNotNull(txn1);
+ assertTrue(txn1 == currentTxn.getTxn());
+
+ assertNull(map.get(ONE));
+ assertNull(map.put(ONE, ONE));
+ assertEquals(ONE, map.get(ONE));
+
+ DbTxn txn2 = currentTxn.beginTxn();
+ assertNotNull(txn2);
+ assertTrue(txn2 == currentTxn.getTxn());
+ assertTrue(txn1 != txn2);
+
+ assertNull(map.put(TWO, TWO));
+ assertEquals(TWO, map.get(TWO));
+
+ DbTxn txn3 = currentTxn.beginTxn();
+ assertNotNull(txn3);
+ assertTrue(txn3 == currentTxn.getTxn());
+ assertTrue(txn1 != txn2);
+ assertTrue(txn1 != txn3);
+ assertTrue(txn2 != txn3);
+
+ assertNull(map.put(THREE, THREE));
+ assertEquals(THREE, map.get(THREE));
+
+ DbTxn txn = currentTxn.abortTxn();
+ assertTrue(txn == txn2);
+ assertTrue(txn == currentTxn.getTxn());
+ assertNull(map.get(THREE));
+ assertEquals(TWO, map.get(TWO));
+
+ txn3 = currentTxn.beginTxn();
+ assertNotNull(txn3);
+ assertTrue(txn3 == currentTxn.getTxn());
+ assertTrue(txn1 != txn2);
+ assertTrue(txn1 != txn3);
+ assertTrue(txn2 != txn3);
+
+ assertNull(map.put(THREE, THREE));
+ assertEquals(THREE, map.get(THREE));
+
+ txn = currentTxn.commitTxn();
+ assertTrue(txn == txn2);
+ assertTrue(txn == currentTxn.getTxn());
+ assertEquals(THREE, map.get(THREE));
+ assertEquals(TWO, map.get(TWO));
+
+ txn = currentTxn.commitTxn();
+ assertTrue(txn == txn1);
+ assertTrue(txn == currentTxn.getTxn());
+ assertEquals(THREE, map.get(THREE));
+ assertEquals(TWO, map.get(TWO));
+ assertEquals(ONE, map.get(ONE));
+
+ txn = currentTxn.commitTxn();
+ assertNull(txn);
+ assertNull(currentTxn.getTxn());
+ assertEquals(THREE, map.get(THREE));
+ assertEquals(TWO, map.get(TWO));
+ assertEquals(ONE, map.get(ONE));
+ }
+
+ public void testRunnerCommit()
+ throws Exception {
+
+ commitTest(false);
+ }
+
+ public void testExplicitCommit()
+ throws Exception {
+
+ commitTest(true);
+ }
+
+ private void commitTest(final boolean explicit)
+ throws Exception {
+
+ final TransactionRunner runner = new TransactionRunner(env);
+
+ assertNull(currentTxn.getTxn());
+
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ final DbTxn txn1 = currentTxn.getTxn();
+ assertNotNull(txn1);
+ assertNull(map.put(ONE, ONE));
+ assertEquals(ONE, map.get(ONE));
+
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ final DbTxn txn2 = currentTxn.getTxn();
+ assertNotNull(txn2);
+ assertTrue(txn1 != txn2);
+ assertNull(map.put(TWO, TWO));
+ assertEquals(TWO, map.get(TWO));
+ assertEquals(ONE, map.get(ONE));
+ if (explicit) currentTxn.commitTxn();
+ }
+ });
+
+ DbTxn txn3 = currentTxn.getTxn();
+ assertSame(txn1, txn3);
+
+ assertEquals(TWO, map.get(TWO));
+ assertEquals(ONE, map.get(ONE));
+ }
+ });
+
+ assertNull(currentTxn.getTxn());
+ }
+
+ public void testRunnerAbort()
+ throws Exception {
+
+ abortTest(false);
+ }
+
+ public void testExplicitAbort()
+ throws Exception {
+
+ abortTest(true);
+ }
+
+ private void abortTest(final boolean explicit)
+ throws Exception {
+
+ final TransactionRunner runner = new TransactionRunner(env);
+
+ assertNull(currentTxn.getTxn());
+
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ final DbTxn txn1 = currentTxn.getTxn();
+ assertNotNull(txn1);
+ assertNull(map.put(ONE, ONE));
+ assertEquals(ONE, map.get(ONE));
+
+ try {
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ final DbTxn txn2 = currentTxn.getTxn();
+ assertNotNull(txn2);
+ assertTrue(txn1 != txn2);
+ assertNull(map.put(TWO, TWO));
+ assertEquals(TWO, map.get(TWO));
+ if (explicit)
+ currentTxn.abortTxn();
+ else
+ throw new IllegalArgumentException(
+ "test-abort");
+ }
+ });
+ assertTrue(explicit);
+ } catch (IllegalArgumentException e) {
+ assertTrue(!explicit);
+ assertEquals("test-abort", e.getMessage());
+ }
+
+ DbTxn txn3 = currentTxn.getTxn();
+ assertSame(txn1, txn3);
+
+ assertEquals(ONE, map.get(ONE));
+ assertNull(map.get(TWO));
+ }
+ });
+
+ assertNull(currentTxn.getTxn());
+ }
+
+ public void testDirtyReadCollection()
+ throws Exception {
+
+ StoredSortedMap dirtyMap =
+ (StoredSortedMap) StoredCollections.dirtyReadSortedMap(map);
+
+ // original map is not dirty-read
+ assertTrue(map.isDirtyReadAllowed());
+ assertTrue(!map.isDirtyReadEnabled());
+
+ // all dirty-read containers are dirty-read
+ checkDirtyReadProperty(dirtyMap);
+ checkDirtyReadProperty(StoredCollections.dirtyReadMap(map));
+ checkDirtyReadProperty(StoredCollections.dirtyReadCollection(
+ map.values()));
+ checkDirtyReadProperty(StoredCollections.dirtyReadSet(
+ map.keySet()));
+ checkDirtyReadProperty(StoredCollections.dirtyReadSortedSet(
+ (SortedSet) map.keySet()));
+
+ // create a list just so we can call dirtyReadList()
+ DataStore listStore = TestStore.RECNO_RENUM.open(env, null);
+ List list = new StoredList(listStore, TestStore.VALUE_BINDING, true);
+ checkDirtyReadProperty(StoredCollections.dirtyReadList(list));
+ listStore.close();
+
+ doDirtyRead(dirtyMap);
+ }
+
+ private void checkDirtyReadProperty(Object container) {
+
+ assertTrue(((StoredContainer) container).isDirtyReadAllowed());
+ assertTrue(((StoredContainer) container).isDirtyReadEnabled());
+ }
+
+ public void testDirtyReadTransaction()
+ throws Exception {
+
+ TransactionRunner runner = new TransactionRunner(env);
+ runner.setDirtyRead(true);
+ assertNull(currentTxn.getTxn());
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertNotNull(currentTxn.getTxn());
+ doDirtyRead(map);
+ }
+ });
+ assertNull(currentTxn.getTxn());
+ }
+
+ private synchronized void doDirtyRead(StoredSortedMap dirtyMap)
+ throws Exception {
+
+ // start thread one
+ DirtyReadThreadOne t1 = new DirtyReadThreadOne(env, this);
+ t1.start();
+ wait();
+
+ // put ONE
+ synchronized (t1) { t1.notify(); }
+ wait();
+ readCheck(dirtyMap, ONE, ONE);
+ assertTrue(!dirtyMap.isEmpty());
+
+ // abort ONE
+ synchronized (t1) { t1.notify(); }
+ t1.join();
+ readCheck(dirtyMap, ONE, null);
+ assertTrue(dirtyMap.isEmpty());
+
+ // start thread two
+ DirtyReadThreadTwo t2 = new DirtyReadThreadTwo(env, this);
+ t2.start();
+ wait();
+
+ // put TWO
+ synchronized (t2) { t2.notify(); }
+ wait();
+ readCheck(dirtyMap, TWO, TWO);
+ assertTrue(!dirtyMap.isEmpty());
+
+ // commit TWO
+ synchronized (t2) { t2.notify(); }
+ t2.join();
+ readCheck(dirtyMap, TWO, TWO);
+ assertTrue(!dirtyMap.isEmpty());
+ }
+
+ private static class DirtyReadThreadOne extends Thread {
+
+ private DbEnv env;
+ private CurrentTransaction currentTxn;
+ private TransactionTest parent;
+ private StoredSortedMap map;
+
+ private DirtyReadThreadOne(DbEnv env, TransactionTest parent) {
+
+ this.env = env;
+ this.currentTxn = CurrentTransaction.getInstance(env);
+ this.parent = parent;
+ this.map = parent.map;
+ }
+
+ public synchronized void run() {
+
+ try {
+ assertNull(currentTxn.getTxn());
+ assertNotNull(currentTxn.beginTxn());
+ assertNotNull(currentTxn.getTxn());
+ readCheck(map, ONE, null);
+ synchronized (parent) { parent.notify(); }
+ wait();
+
+ // put ONE
+ assertNull(map.put(ONE, ONE));
+ readCheck(map, ONE, ONE);
+ synchronized (parent) { parent.notify(); }
+ wait();
+
+ // abort ONE
+ assertNull(currentTxn.abortTxn());
+ assertNull(currentTxn.getTxn());
+ } catch (Exception e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+ }
+
+ private static class DirtyReadThreadTwo extends Thread {
+
+ private DbEnv env;
+ private CurrentTransaction currentTxn;
+ private TransactionTest parent;
+ private StoredSortedMap map;
+
+ private DirtyReadThreadTwo(DbEnv env, TransactionTest parent) {
+
+ this.env = env;
+ this.currentTxn = CurrentTransaction.getInstance(env);
+ this.parent = parent;
+ this.map = parent.map;
+ }
+
+ public synchronized void run() {
+
+ try {
+ final TransactionRunner runner = new TransactionRunner(env);
+ final Object thread = this;
+ assertNull(currentTxn.getTxn());
+
+ runner.run(new TransactionWorker() {
+ public void doWork() throws Exception {
+ assertNotNull(currentTxn.getTxn());
+ readCheck(map, TWO, null);
+ synchronized (parent) { parent.notify(); }
+ thread.wait();
+
+ // put TWO
+ assertNull(map.put(TWO, TWO));
+ readCheck(map, TWO, TWO);
+ synchronized (parent) { parent.notify(); }
+ thread.wait();
+
+ // commit TWO
+ }
+ });
+ assertNull(currentTxn.getTxn());
+ } catch (Exception e) {
+ throw new RuntimeExceptionWrapper(e);
+ }
+ }
+ }
+
+ private static void readCheck(StoredSortedMap checkMap, Object key,
+ Object expect) {
+ if (expect == null) {
+ assertNull(checkMap.get(key));
+ assertTrue(checkMap.tailMap(key).isEmpty());
+ assertTrue(!checkMap.tailMap(key).containsKey(key));
+ assertTrue(!checkMap.keySet().contains(key));
+ assertTrue(checkMap.duplicates(key).isEmpty());
+ Iterator i = checkMap.keySet().iterator();
+ try {
+ while (i.hasNext()) {
+ assertTrue(!key.equals(i.next()));
+ }
+ } finally { StoredIterator.close(i); }
+ } else {
+ assertEquals(expect, checkMap.get(key));
+ assertEquals(expect, checkMap.tailMap(key).get(key));
+ assertTrue(!checkMap.tailMap(key).isEmpty());
+ assertTrue(checkMap.tailMap(key).containsKey(key));
+ assertTrue(checkMap.keySet().contains(key));
+ assertTrue(checkMap.values().contains(expect));
+ assertTrue(!checkMap.duplicates(key).isEmpty());
+ assertTrue(checkMap.duplicates(key).contains(expect));
+ Iterator i = checkMap.keySet().iterator();
+ try {
+ boolean found = false;
+ while (i.hasNext()) {
+ if (expect.equals(i.next()))
+ found = true;
+ }
+ assertTrue(found);
+ }
+ finally { StoredIterator.close(i); }
+ }
+ }
+}
diff --git a/db/test/scr024/src/com/sleepycat/bdb/util/test/ExceptionWrapperTest.java b/db/test/scr024/src/com/sleepycat/bdb/util/test/ExceptionWrapperTest.java
new file mode 100644
index 000000000..1d8a4ee24
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/util/test/ExceptionWrapperTest.java
@@ -0,0 +1,100 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: ExceptionWrapperTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util.test;
+
+import com.sleepycat.bdb.util.ExceptionUnwrapper;
+import com.sleepycat.bdb.util.IOExceptionWrapper;
+import com.sleepycat.bdb.util.RuntimeExceptionWrapper;
+import java.io.IOException;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class ExceptionWrapperTest extends TestCase {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(ExceptionWrapperTest.class);
+ return suite;
+ }
+
+ public ExceptionWrapperTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("ExceptionWrapperTest." + getName());
+ }
+
+ public void testIOWrapper()
+ throws Exception {
+
+ try {
+ throw new IOExceptionWrapper(new RuntimeException("msg"));
+ } catch (IOException e) {
+ Exception ee = ExceptionUnwrapper.unwrap(e);
+ assertTrue(ee instanceof RuntimeException);
+ assertEquals("msg", ee.getMessage());
+
+ Throwable t = ExceptionUnwrapper.unwrapAny(e);
+ assertTrue(t instanceof RuntimeException);
+ assertEquals("msg", t.getMessage());
+ }
+ }
+
+ public void testRuntimeWrapper()
+ throws Exception {
+
+ try {
+ throw new RuntimeExceptionWrapper(new IOException("msg"));
+ } catch (RuntimeException e) {
+ Exception ee = ExceptionUnwrapper.unwrap(e);
+ assertTrue(ee instanceof IOException);
+ assertEquals("msg", ee.getMessage());
+
+ Throwable t = ExceptionUnwrapper.unwrapAny(e);
+ assertTrue(t instanceof IOException);
+ assertEquals("msg", t.getMessage());
+ }
+ }
+
+ public void testErrorWrapper()
+ throws Exception {
+
+ try {
+ throw new RuntimeExceptionWrapper(new Error("msg"));
+ } catch (RuntimeException e) {
+ try {
+ ExceptionUnwrapper.unwrap(e);
+ fail();
+ } catch (Error ee) {
+ assertTrue(ee instanceof Error);
+ assertEquals("msg", ee.getMessage());
+ }
+
+ Throwable t = ExceptionUnwrapper.unwrapAny(e);
+ assertTrue(t instanceof Error);
+ assertEquals("msg", t.getMessage());
+ }
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/util/test/Suite.java b/db/test/scr024/src/com/sleepycat/bdb/util/test/Suite.java
new file mode 100644
index 000000000..68d92607d
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/util/test/Suite.java
@@ -0,0 +1,35 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: Suite.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class Suite {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite();
+ suite.addTest(UtfTest.suite());
+ suite.addTest(ExceptionWrapperTest.suite());
+ return suite;
+ }
+}
+
diff --git a/db/test/scr024/src/com/sleepycat/bdb/util/test/UtfTest.java b/db/test/scr024/src/com/sleepycat/bdb/util/test/UtfTest.java
new file mode 100644
index 000000000..c9cbe94ea
--- /dev/null
+++ b/db/test/scr024/src/com/sleepycat/bdb/util/test/UtfTest.java
@@ -0,0 +1,155 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 2002-2003
+ * Sleepycat Software. All rights reserved.
+ *
+ * $Id: UtfTest.java,v 1.1 2003/12/15 21:44:54 jbj Exp $
+ */
+
+package com.sleepycat.bdb.util.test;
+
+import com.sleepycat.bdb.util.FastOutputStream;
+import com.sleepycat.bdb.util.UtfOps;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author Mark Hayes
+ */
+public class UtfTest extends TestCase {
+
+ public static void main(String[] args)
+ throws Exception {
+
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ throws Exception {
+
+ TestSuite suite = new TestSuite(UtfTest.class);
+ return suite;
+ }
+
+ public UtfTest(String name) {
+
+ super(name);
+ }
+
+ public void setUp() {
+
+ System.out.println("UtfTest." + getName());
+ }
+
+ /**
+ * Compares the UtfOps implementation to the java.util.DataOutputStream
+ * (and by implication DataInputStream) implementation, character for
+ * character in the full Unicode set.
+ */
+ public void testMultibyte()
+ throws Exception {
+
+ char c = 0;
+ byte[] buf = new byte[10];
+ byte[] javaBuf = new byte[10];
+ char[] cArray = new char[1];
+ FastOutputStream javaBufStream = new FastOutputStream(javaBuf);
+ DataOutputStream javaOutStream = new DataOutputStream(javaBufStream);
+
+ try {
+ for (int cInt = Character.MIN_VALUE; cInt <= Character.MAX_VALUE;
+ cInt += 1) {
+ c = (char) cInt;
+ cArray[0] = c;
+ int byteLen = UtfOps.getByteLength(cArray);
+
+ javaBufStream.reset();
+ javaOutStream.writeUTF(new String(cArray));
+ int javaByteLen = javaBufStream.size() - 2;
+
+ if (byteLen != javaByteLen) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps size " + byteLen +
+ " != JavaIO size " + javaByteLen);
+ }
+
+ Arrays.fill(buf, (byte) 0);
+ UtfOps.charsToBytes(cArray, 0, buf, 0, 1);
+
+ for (int i = 0; i < byteLen; i += 1) {
+ if (buf[i] != javaBuf[i + 2]) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " byte offset " + i +
+ " UtfOps byte " + Integer.toHexString(buf[i]) +
+ " != JavaIO byte " +
+ Integer.toHexString(javaBuf[i + 2]));
+ }
+ }
+
+ int charLen = UtfOps.getCharLength(buf, 0, byteLen);
+ if (charLen != 1) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps char len " + charLen +
+ " but should be one");
+ }
+
+ cArray[0] = (char) 0;
+ int len = UtfOps.bytesToChars(buf, 0, cArray, 0, byteLen,
+ true);
+ if (len != byteLen) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps bytesToChars(w/byteLen) len " + len +
+ " but should be " + byteLen);
+ }
+
+ if (cArray[0] != c) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps bytesToChars(w/byteLen) char " +
+ Integer.toHexString(cArray[0]));
+ }
+
+ cArray[0] = (char) 0;
+ len = UtfOps.bytesToChars(buf, 0, cArray, 0, 1, false);
+ if (len != byteLen) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps bytesToChars(w/charLen) len " + len +
+ " but should be " + byteLen);
+ }
+
+ if (cArray[0] != c) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps bytesToChars(w/charLen) char " +
+ Integer.toHexString(cArray[0]));
+ }
+
+ String s = new String(cArray, 0, 1);
+ byte[] sBytes = UtfOps.stringToBytes(s);
+ if (sBytes.length != byteLen) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " UtfOps stringToBytes() len " + sBytes.length +
+ " but should be " + byteLen);
+ }
+
+ for (int i = 0; i < byteLen; i += 1) {
+ if (sBytes[i] != javaBuf[i + 2]) {
+ fail("Character 0x" + Integer.toHexString(c) +
+ " byte offset " + i +
+ " UtfOps byte " + Integer.toHexString(sBytes[i]) +
+ " != JavaIO byte " +
+ Integer.toHexString(javaBuf[i + 2]));
+ }
+ }
+ }
+ } catch (Exception e) {
+ System.out.println("Character 0x" + Integer.toHexString(c) +
+ " exception occurred");
+ throw e;
+ }
+ }
+}
+
diff --git a/db/test/scr025/TestMulti.cpp b/db/test/scr025/TestMulti.cpp
new file mode 100644
index 000000000..9ca62bd32
--- /dev/null
+++ b/db/test/scr025/TestMulti.cpp
@@ -0,0 +1,199 @@
+#include "db_cxx.h"
+#include "stdlib.h"
+
+void test1()
+{
+ int numberOfKeysToWrite= 10000;
+ Db db(0,DB_CXX_NO_EXCEPTIONS);
+ db.set_pagesize(512);
+ int err= db.open(0, "test1.db", 0, DB_BTREE, DB_CREATE, 0);
+ {
+ int i= 0;
+ Dbt key(&i,sizeof(i));
+ Dbt data(&i,sizeof(i));
+ for(;i<numberOfKeysToWrite;++i)
+ {
+ db.put(0,&key,&data,0);
+ }
+ }
+
+ {
+ Dbc *dbc;
+ err= db.cursor(0,&dbc,0);
+
+ char *check= (char*)calloc(numberOfKeysToWrite,1);
+ char buffer[8192];
+ int numberOfKeysRead= 0;
+ Dbt multikey(&numberOfKeysRead,sizeof(numberOfKeysRead));
+ Dbt multidata(&buffer,sizeof(buffer));
+ multidata.set_flags(DB_DBT_USERMEM);
+ multidata.set_ulen(sizeof(buffer));
+ err= 0;
+ while(err==0)
+ {
+ err= dbc->get(&multikey,&multidata,DB_NEXT|DB_MULTIPLE_KEY);
+ if(err==0)
+ {
+ Dbt key, data;
+ DbMultipleKeyDataIterator i(multidata);
+ while(err==0 && i.next(key,data))
+ {
+ int actualKey= *((int*)key.get_data());
+ int actualData= *((int*)data.get_data());
+ if(actualKey!=actualData)
+ {
+ std::cout << "Error: key/data mismatch. " << actualKey << "!=" << actualData << std::endl;
+ err= -1;
+ }
+ else
+ {
+ check[actualKey]++;
+ }
+ numberOfKeysRead++;
+ }
+ } else if(err!=DB_NOTFOUND)
+ std::cout << "Error: dbc->get: " << db_strerror(err) << std::endl;
+ }
+ if(numberOfKeysRead!=numberOfKeysToWrite)
+ {
+ std::cout << "Error: key count mismatch. " << numberOfKeysRead << "!=" << numberOfKeysToWrite << std::endl;
+ }
+ for(int n=0;n<numberOfKeysToWrite;++n)
+ {
+ if(check[n]!=1)
+ {
+ std::cout << "Error: key " << n << " was written to the database, but not read back." << std::endl;
+ }
+ }
+ free(check);
+ dbc->close();
+ }
+
+ db.close(0);
+}
+
+void test2()
+{
+ int numberOfKeysToWrite= 10000;
+ Db db(0,DB_CXX_NO_EXCEPTIONS);
+ db.set_flags(DB_DUP);
+ db.set_pagesize(512);
+ int err= db.open(0, "test2.db", 0, DB_BTREE, DB_CREATE, 0);
+
+ {
+ int i= 0;
+ int k= 0;
+ Dbt key(&k,sizeof(k));
+ Dbt data(&i,sizeof(i));
+ for(;i<numberOfKeysToWrite;++i)
+ {
+ err= db.put(0,&key,&data,0);
+ }
+ }
+
+ {
+ Dbc *dbc;
+ err= db.cursor(0,&dbc,0);
+
+ char buffer[8192];
+ int numberOfKeysRead= 0;
+ Dbt multikey(&numberOfKeysRead,sizeof(numberOfKeysRead));
+ Dbt multidata(&buffer,sizeof(buffer));
+ multidata.set_flags(DB_DBT_USERMEM);
+ multidata.set_ulen(sizeof(buffer));
+ err= 0;
+ while(err==0)
+ {
+ err= dbc->get(&multikey,&multidata,DB_NEXT|DB_MULTIPLE);
+ if(err==0)
+ {
+ Dbt data;
+ DbMultipleDataIterator i(multidata);
+ while(err==0 && i.next(data))
+ {
+ int actualData= *((int*)data.get_data());
+ if(numberOfKeysRead!=actualData)
+ {
+ std::cout << "Error: key/data mismatch. " << numberOfKeysRead << "!=" << actualData << std::endl;
+ err= -1;
+ }
+ numberOfKeysRead++;
+ }
+ } else if(err!=DB_NOTFOUND)
+ std::cout << "Error: dbc->get: " << db_strerror(err) << std::endl;
+ }
+ if(numberOfKeysRead!=numberOfKeysToWrite)
+ {
+ std::cout << "Error: key count mismatch. " << numberOfKeysRead << "!=" << numberOfKeysToWrite << std::endl;
+ }
+ dbc->close();
+ }
+ db.close(0);
+}
+
+void test3()
+{
+ int numberOfKeysToWrite= 10000;
+ Db db(0,DB_CXX_NO_EXCEPTIONS);
+ db.set_pagesize(512);
+ int err= db.open(0, "test3.db", 0, DB_RECNO, DB_CREATE, 0);
+
+ {
+ int i= 0;
+ Dbt key;
+ Dbt data(&i,sizeof(i));
+ for(;i<numberOfKeysToWrite;++i)
+ {
+ err= db.put(0,&key,&data,DB_APPEND);
+ }
+ }
+
+ {
+ Dbc *dbc;
+ err= db.cursor(0,&dbc,0);
+
+ char buffer[8192];
+ int numberOfKeysRead= 0;
+ Dbt multikey(&numberOfKeysRead,sizeof(numberOfKeysRead));
+ Dbt multidata(&buffer,sizeof(buffer));
+ multidata.set_flags(DB_DBT_USERMEM);
+ multidata.set_ulen(sizeof(buffer));
+ err= 0;
+ while(err==0)
+ {
+ err= dbc->get(&multikey,&multidata,DB_NEXT|DB_MULTIPLE_KEY);
+ if(err==0)
+ {
+ u_int32_t recno= 0;
+ Dbt data;
+ DbMultipleRecnoDataIterator i(multidata);
+ while(err==0 && i.next(recno,data))
+ {
+ int actualData= *((int*)data.get_data());
+ if(recno!=actualData+1)
+ {
+ std::cout << "Error: recno/data mismatch. " << recno << "!=" << actualData << "+1" << std::endl;
+ err= -1;
+ }
+ numberOfKeysRead++;
+ }
+ } else if(err!=DB_NOTFOUND)
+ std::cout << "Error: dbc->get: " << db_strerror(err) << std::endl;
+ }
+ if(numberOfKeysRead!=numberOfKeysToWrite)
+ {
+ std::cout << "Error: key count mismatch. " << numberOfKeysRead << "!=" << numberOfKeysToWrite << std::endl;
+ }
+ dbc->close();
+ }
+
+ db.close(0);
+}
+
+void main()
+{
+ test1();
+ test2();
+ test3();
+}
+
diff --git a/db/test/scr025/chk.cxxmulti b/db/test/scr025/chk.cxxmulti
new file mode 100644
index 000000000..5e4326b2d
--- /dev/null
+++ b/db/test/scr025/chk.cxxmulti
@@ -0,0 +1,67 @@
+#!/bin/sh -
+#
+# $Id: chk.cxxmulti,v 1.1 2003/03/04 20:52:27 sandstro Exp $
+#
+# Check to make sure that regression tests for C++ run.
+
+TEST_CXX_SRCDIR=../test/scr025 # must be a relative directory
+
+# All paths must be relative to a subdirectory of the build directory
+LIBS="-L.. -ldb -ldb_cxx"
+CXXFLAGS="-I.. -I../../dbinc"
+
+# Test must be run from a local build directory, not from a test
+# directory.
+cd ..
+[ -f db_config.h ] || {
+ echo 'FAIL: chk.cxxtests must be run from a local build directory.'
+ exit 1
+}
+[ -f libdb.a ] || make libdb.a || {
+ echo 'FAIL: unable to build libdb.a'
+ exit 1
+}
+[ -f libdb_cxx.a ] || make libdb_cxx.a || {
+ echo 'FAIL: unable to build libdb_cxx.a'
+ exit 1
+}
+CXX=`sed -e '/^CXX=/!d' -e 's/^CXX=//' -e 's/.*mode=compile *//' Makefile`
+echo " ====== cxx tests using $CXX"
+testnames=`cd $TEST_CXX_SRCDIR; ls *.cpp | sed -e 's/\.cpp$//'`
+
+for testname in $testnames; do
+ if grep -x $testname $TEST_CXX_SRCDIR/ignore > /dev/null; then
+ echo " **** cxx test $testname ignored"
+ continue
+ fi
+
+ echo " ==== cxx test $testname"
+ rm -rf TESTCXX; mkdir TESTCXX
+ cd ./TESTCXX
+ testprefix=../$TEST_CXX_SRCDIR/$testname
+
+ ${CXX} ${CXXFLAGS} -o $testname $testprefix.cpp ${LIBS} > ../$testname.compileout 2>&1 || {
+ echo "FAIL: compilation of $testname failed, see ../$testname.compileout"
+ exit 1
+ }
+ rm -f ../$testname.compileout
+ infile=$testprefix.testin
+ [ -f $infile ] || infile=/dev/null
+ goodoutfile=$testprefix.testout
+ [ -f $goodoutfile ] || goodoutfile=/dev/null
+ gooderrfile=$testprefix.testerr
+ [ -f $gooderrfile ] || gooderrfile=/dev/null
+ ./$testname <$infile >../$testname.out 2>../$testname.err
+ cmp ../$testname.out $goodoutfile > /dev/null || {
+ echo "FAIL: $testname output differs: see ../$testname.out, $goodoutfile"
+ exit 1
+ }
+ cmp ../$testname.err $gooderrfile > /dev/null || {
+ echo "FAIL: $testname error differs: see ../$testname.err, $gooderrfile"
+ exit 1
+ }
+ cd ..
+ rm -f $testname.err $testname.out
+done
+rm -rf TESTCXX
+exit 0
diff --git a/db/test/scr025/ignore b/db/test/scr025/ignore
new file mode 100644
index 000000000..9794284aa
--- /dev/null
+++ b/db/test/scr025/ignore
@@ -0,0 +1,4 @@
+#
+# $Id: ignore,v 1.1 2003/03/04 20:52:27 sandstro Exp $
+#
+# A list of tests to ignore
diff --git a/db/test/scr026/chk.method b/db/test/scr026/chk.method
new file mode 100644
index 000000000..2fbb00bec
--- /dev/null
+++ b/db/test/scr026/chk.method
@@ -0,0 +1,90 @@
+#!/bin/sh -
+#
+# $Id: chk.method,v 1.2 2003/08/01 17:12:39 bostic Exp $
+#
+# Check that DB doesn't call DB or DB_ENV methods internally.
+
+d=../..
+
+t=__1
+
+echo ========================================================
+echo "Check that DB doesn't call DB or DB_ENV methods internally."
+echo ========================================================
+m=`grep '(\*[a-z][_a-z]*)' $d/dbinc/db.in |
+ sed -e 's/^[^(]*(\*//' \
+ -e 's/).*//' \
+ -e '/am_remove/d' \
+ -e '/am_rename/d' \
+ -e '/app_dispatch/d' \
+ -e '/c_am_bulk/d' \
+ -e '/c_am_close/d' \
+ -e '/c_am_del/d' \
+ -e '/c_am_destroy/d' \
+ -e '/c_am_get/d' \
+ -e '/c_am_put/d' \
+ -e '/c_am_writelock/d' \
+ -e '/db_append_recno/d' \
+ -e '/db_errcall/d' \
+ -e '/db_feedback/d' \
+ -e '/db_free/d' \
+ -e '/db_malloc/d' \
+ -e '/db_paniccall/d' \
+ -e '/db_realloc/d' \
+ -e '/dup_compare/d' \
+ -e '/s_callback/d' |
+ sort -u`
+
+(cd $d && for i in $m; do
+ #echo "$i..." > /dev/stderr
+ egrep -- "->$i\(" */*.[ch]
+done) |
+sed \
+ -e '/Wrapper function for/d' \
+ -e '/\/db.h:/d' \
+ -e '/^[^:]*:[ ]*\*[ ]/d' \
+ -e '/^common\/db_getlong.c:/d' \
+ -e '/^common\/util_cache.c:/d' \
+ -e '/^common\/util_log.c:/d' \
+ -e '/^common\/util_sig.c:/d' \
+ -e '/^db185\//d' \
+ -e '/^db_archive\//d' \
+ -e '/^db_checkpoint\//d' \
+ -e '/^db_deadlock\//d' \
+ -e '/^db_dump185\//d' \
+ -e '/^db_dump\//d' \
+ -e '/^db_load\//d' \
+ -e '/^db_printlog\//d' \
+ -e '/^db_recover\//d' \
+ -e '/^db_stat\//d' \
+ -e '/^db_upgrade\//d' \
+ -e '/^db_verify\//d' \
+ -e '/^dbm\//d' \
+ -e '/^examples_c\//d' \
+ -e '/^examples_cxx\//d' \
+ -e '/^examples_java\//d' \
+ -e '/^hsearch\//d' \
+ -e '/^libdb_java\//d' \
+ -e '/^tcl\//d' \
+ -e '/^test\//d' \
+ -e '/^test_perf\//d' \
+ -e '/^test_purify\//d' \
+ -e '/^test_server\//d' \
+ -e '/^test_thread\//d' \
+ -e '/^test_vxworks\//d' \
+ -e '/^xa\//d' \
+ -e '/closeme->close() is a wrapper;/d' \
+ -e '/crypto.c.*db_cipher->close/d' \
+ -e '/db_iface.c:.*(txn->commit(txn, nosync ? DB_TXN_NOSYNC : 0));/d' \
+ -e '/db_iface.c:.*if ((t_ret = txn->abort(txn)) != 0)/d' \
+ -e '/db_iface.c:.*return (dbenv->txn_begin(dbenv, NULL, txnidp, 0));/d' \
+ -e '/rep_util.c:.*ret = dbenv->rep_send(dbenv, &cdbt, dbtp, &cntrl.lsn,/d' \
+>$t
+
+test -s $t && {
+ cat $t
+ echo "FAIL: found DB/DB_ENV method calls DB library."
+ exit 1
+}
+
+exit 0
diff --git a/db/test/scr027/chk.javas b/db/test/scr027/chk.javas
new file mode 100644
index 000000000..b32999209
--- /dev/null
+++ b/db/test/scr027/chk.javas
@@ -0,0 +1,38 @@
+#!/bin/sh -
+#
+# $Id: chk.javas,v 1.4 2003/11/21 02:39:41 bostic Exp $
+#
+# Check to make sure that the java code samples in the documents build.
+
+docs=../../../db.docs
+
+[ -d $d ] || {
+ echo "FAIL: $d: cannot find document sources."
+ exit 1
+}
+[ -f ../db.jar ] || (cd .. && make db.jar) || {
+ echo 'FAIL: unable to find or build db.jar'
+ exit 1
+}
+
+for i in `find $docs -name '*.javas'`; do
+ echo " compiling $i"
+ sed -e 's/m4_[a-z]*[(\[)]*//g' \
+ -e 's/(\[//g' \
+ -e 's/\])//g' \
+ -e 's/dnl//g' \
+ -e 's/[ \t]*public class[ \t]*/ class /g' \
+ -e 's/^[ \t]*\.\.\.[ \t]*$//' \
+ -e 's/__GT__/>/g' \
+ -e 's/__LB__/[/g' \
+ -e 's/__LT__/</g' \
+ -e 's/__RB__/]/g' < $i > t.java
+ if javac -classpath ../db.jar t.java; then
+ :
+ else
+ echo "FAIL: unable to compile $i"
+ exit 1
+ fi
+done
+
+exit 0
diff --git a/db/test/sdb001.tcl b/db/test/sdb001.tcl
index 938b6c10c..269bbb3ed 100644
--- a/db/test/sdb001.tcl
+++ b/db/test/sdb001.tcl
@@ -1,24 +1,42 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb001.tcl,v 11.12 2000/08/25 14:21:52 sue Exp $
+# $Id: sdb001.tcl,v 11.21 2003/10/06 13:56:51 margo Exp $
#
-# Sub DB Test 1 {access method}
-# Test non-subdb and subdb operations
-# Test naming (filenames begin with -)
-# Test existence (cannot create subdb of same name with -excl)
-proc subdb001 { method args } {
+# TEST sdb001 Tests mixing db and subdb operations
+# TEST Tests mixing db and subdb operations
+# TEST Create a db, add data, try to create a subdb.
+# TEST Test naming db and subdb with a leading - for correct parsing
+# TEST Existence check -- test use of -excl with subdbs
+# TEST
+# TEST Test non-subdb and subdb operations
+# TEST Test naming (filenames begin with -)
+# TEST Test existence (cannot create subdb of same name with -excl)
+proc sdb001 { method args } {
source ./include.tcl
+ global errorInfo
set args [convert_args $method $args]
set omethod [convert_method $method]
+ if { [is_queue $method] == 1 } {
+ puts "Subdb001: skipping for method $method"
+ return
+ }
puts "Subdb001: $method ($args) subdb and non-subdb tests"
- # Create the database and open the dictionary
set testfile $testdir/subdb001.db
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ set env NULL
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb001 skipping for env $env"
+ return
+ }
+ # Create the database and open the dictionary
set subdb subdb0
cleanup $testdir NULL
puts "\tSubdb001.a: Non-subdb database and subdb operations"
@@ -27,7 +45,7 @@ proc subdb001 { method args } {
# open/add with a subdb. Should fail.
#
puts "\tSubdb001.a.0: Create db, add data, close, try subdb"
- set db [eval {berkdb_open -create -truncate -mode 0644} \
+ set db [eval {berkdb_open -create -mode 0644} \
$args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -70,6 +88,12 @@ proc subdb001 { method args } {
#
set testfile $testdir/subdb001a.db
puts "\tSubdb001.a.1: Create db, close, try subdb"
+ #
+ # !!!
+ # Using -truncate is illegal when opening for subdbs, but we
+ # can use it here because we are not using subdbs for this
+ # create.
+ #
set db [eval {berkdb_open -create -truncate -mode 0644} $args \
{$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -108,8 +132,9 @@ proc subdb001 { method args } {
# Create 1 db with 1 subdb. Try to create another subdb of
# the same name. Should fail.
#
+
puts "\tSubdb001.c: Existence check"
- set testfile $testdir/subdb001c.db
+ set testfile $testdir/subdb001d.db
set subdb subdb
set ret [catch {eval {berkdb_open -create -excl -mode 0644} $args \
{$omethod $testfile $subdb}} db]
diff --git a/db/test/sdb002.tcl b/db/test/sdb002.tcl
index 11547195c..77b3fc0e6 100644
--- a/db/test/sdb002.tcl
+++ b/db/test/sdb002.tcl
@@ -1,20 +1,54 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb002.tcl,v 11.20 2000/09/20 13:22:04 sue Exp $
+# $Id: sdb002.tcl,v 11.39 2003/09/04 23:41:14 bostic Exp $
#
-# Sub DB Test 2 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-# Then repeat using an environment.
-proc subdb002 { method {nentries 10000} args } {
+# TEST sdb002
+# TEST Tests basic subdb functionality
+# TEST Small keys, small data
+# TEST Put/get per key
+# TEST Dump file
+# TEST Close, reopen
+# TEST Dump file
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+# TEST Then repeat using an environment.
+proc sdb002 { method {nentries 10000} args } {
+ global passwd
+ global has_crypto
+
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ set env NULL
+ incr eindex
+ set env [lindex $args $eindex]
+ puts "Subdb002 skipping for env $env"
+ return
+ }
+ set largs $args
+ subdb002_main $method $nentries $largs
+ append largs " -chksum "
+ subdb002_main $method $nentries $largs
+
+ # Skip remainder of test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+
+ append largs "-encryptaes $passwd "
+ subdb002_main $method $nentries $largs
+}
+
+proc subdb002_main { method nentries largs } {
source ./include.tcl
+ global encrypt
- set largs [convert_args $method $args]
+ set largs [convert_args $method $largs]
set omethod [convert_method $method]
env_cleanup $testdir
@@ -23,8 +57,20 @@ proc subdb002 { method {nentries 10000} args } {
set testfile $testdir/subdb002.db
subdb002_body $method $omethod $nentries $largs $testfile NULL
+ # Run convert_encrypt so that old_encrypt will be reset to
+ # the proper value and cleanup will work.
+ convert_encrypt $largs
+ set encargs ""
+ set largs [split_encargs $largs encargs]
+
cleanup $testdir NULL
- set env [berkdb env -create -mode 0644 -txn -home $testdir]
+ if { [is_queue $omethod] == 1 } {
+ set sdb002_env berkdb_env_noerr
+ } else {
+ set sdb002_env berkdb_env
+ }
+ set env [eval {$sdb002_env -create -cachesize {0 10000000 0} \
+ -mode 0644 -txn} -home $testdir $encargs]
error_check_good env_open [is_valid_env $env] TRUE
puts "Subdb002: $method ($largs) basic subdb tests in an environment"
@@ -36,6 +82,8 @@ proc subdb002 { method {nentries 10000} args } {
}
proc subdb002_body { method omethod nentries largs testfile env } {
+ global encrypt
+ global passwd
source ./include.tcl
# Create the database and open the dictionary
@@ -130,7 +178,7 @@ proc subdb002_body { method omethod nentries largs testfile env } {
puts "\tSubdb002.c: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile $env $t1 $checkfunc \
dump_file_direction "-first" "-next" $subdb
if { [is_record_based $method] != 1 } {
filesort $t1 $t3
@@ -142,7 +190,7 @@ proc subdb002_body { method omethod nentries largs testfile env } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tSubdb002.d: close, open, and dump file in reverse direction"
- open_and_dump_subfile $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile $env $t1 $checkfunc \
dump_file_direction "-last" "-prev" $subdb
if { [is_record_based $method] != 1 } {
@@ -151,6 +199,19 @@ proc subdb002_body { method omethod nentries largs testfile env } {
error_check_good Subdb002:diff($t3,$t2) \
[filecmp $t3 $t2] 0
+
+ puts "\tSubdb002.e: db_dump with subdatabase"
+ set outfile $testdir/subdb002.dump
+ set dumpargs " -f $outfile -s $subdb "
+ if { $encrypt > 0 } {
+ append dumpargs " -P $passwd "
+ }
+ if { $env != "NULL" } {
+ append dumpargs " -h $testdir "
+ }
+ append dumpargs " $testfile"
+ set stat [catch {eval {exec $util_path/db_dump} $dumpargs} ret]
+ error_check_good dbdump.subdb $stat 0
}
# Check function for Subdb002; keys and data are identical
diff --git a/db/test/sdb003.tcl b/db/test/sdb003.tcl
index 32bb93d52..c96a661c2 100644
--- a/db/test/sdb003.tcl
+++ b/db/test/sdb003.tcl
@@ -1,16 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb003.tcl,v 11.17 2000/08/25 14:21:52 sue Exp $
+# $Id: sdb003.tcl,v 11.28 2003/06/06 18:47:54 sandstro Exp $
#
-# Sub DB Test 3 {access method}
-# Use the first 10,000 entries from the dictionary as subdbnames.
-# Insert each with entry as name of subdatabase and a partial list as key/data.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc subdb003 { method {nentries 1000} args } {
+# TEST sdb003
+# TEST Tests many subdbs
+# TEST Creates many subdbs and puts a small amount of
+# TEST data in each (many defaults to 1000)
+# TEST
+# TEST Use the first 1000 entries from the dictionary as subdbnames.
+# TEST Insert each with entry as name of subdatabase and a partial list
+# TEST as key/data. After all are entered, retrieve all; compare output
+# TEST to original. Close file, reopen, do retrieve and re-verify.
+proc sdb003 { method {nentries 1000} args } {
source ./include.tcl
set args [convert_args $method $args]
@@ -23,12 +27,32 @@ proc subdb003 { method {nentries 1000} args } {
puts "Subdb003: $method ($args) many subdb tests"
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb003.db
+ set env NULL
+ } else {
+ set testfile subdb003.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ if { $nentries == 1000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ }
# Create the database and open the dictionary
- set testfile $testdir/subdb003.db
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
- cleanup $testdir NULL
+ cleanup $testdir $env
set pflags ""
set gflags ""
@@ -46,6 +70,9 @@ proc subdb003 { method {nentries 1000} args } {
set ndataent 10
set fdid [open $dict]
while { [gets $fdid str] != -1 && $fcount < $nentries } {
+ if { $str == "" } {
+ continue
+ }
set subdb $str
set db [eval {berkdb_open -create -mode 0644} \
$args {$omethod $testfile $subdb}]
@@ -62,18 +89,35 @@ proc subdb003 { method {nentries 1000} args } {
} else {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set ret [eval {$db get} $gflags {$key}]
- error_check_good get $ret [list [list $key [pad_data $method $str]]]
+ error_check_good get $ret [list [list $key \
+ [pad_data $method $str]]]
incr count
}
close $did
incr fcount
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match
@@ -95,7 +139,7 @@ proc subdb003 { method {nentries 1000} args } {
[filecmp $t3 $t2] 0
# Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile $env $t1 $checkfunc \
dump_file_direction "-first" "-next" $subdb
if { [is_record_based $method] != 1 } {
filesort $t1 $t3
@@ -106,7 +150,7 @@ proc subdb003 { method {nentries 1000} args } {
# Now, reopen the file and run the last test again in the
# reverse direction.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile $env $t1 $checkfunc \
dump_file_direction "-last" "-prev" $subdb
if { [is_record_based $method] != 1 } {
@@ -120,6 +164,7 @@ proc subdb003 { method {nentries 1000} args } {
flush stdout
}
}
+ close $fdid
puts ""
}
diff --git a/db/test/sdb004.tcl b/db/test/sdb004.tcl
index fb63f9d6d..10f0bff4a 100644
--- a/db/test/sdb004.tcl
+++ b/db/test/sdb004.tcl
@@ -1,16 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb004.tcl,v 11.14 2000/08/25 14:21:53 sue Exp $
+# $Id: sdb004.tcl,v 11.24 2003/01/08 05:52:57 bostic Exp $
#
-# SubDB Test 4 {access method}
-# Create 1 db with many large subdbs. Use the contents as subdb names.
-# Take the source files and dbtest executable and enter their names as the
-# key with their contents as data. After all are entered, retrieve all;
-# compare output to original. Close file, reopen, do retrieve and re-verify.
-proc subdb004 { method args} {
+# TEST sdb004
+# TEST Tests large subdb names
+# TEST subdb name = filecontents,
+# TEST key = filename, data = filecontents
+# TEST Put/get per key
+# TEST Dump file
+# TEST Dump subdbs, verify data and subdb name match
+# TEST
+# TEST Create 1 db with many large subdbs. Use the contents as subdb names.
+# TEST Take the source files and dbtest executable and enter their names as
+# TEST the key with their contents as data. After all are entered, retrieve
+# TEST all; compare output to original. Close file, reopen, do retrieve and
+# TEST re-verify.
+proc sdb004 { method args} {
global names
source ./include.tcl
@@ -25,14 +33,34 @@ proc subdb004 { method args} {
puts "Subdb004: $method ($args) \
filecontents=subdbname filename=key filecontents=data pairs"
+ set txnenv 0
+ set envargs ""
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb004.db
+ set env NULL
+ } else {
+ set testfile subdb004.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
# Create the database and open the dictionary
- set testfile $testdir/subdb004.db
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
set t4 $testdir/t4
- cleanup $testdir NULL
+ cleanup $testdir $env
set pflags ""
set gflags ""
set txn ""
@@ -44,8 +72,14 @@ proc subdb004 { method args} {
}
# Here is the loop where we put and get each key/data pair
- set file_list [glob ../*/*.c ./libdb.so.3.0 ./libtool ./libtool.exe]
+ # Note that the subdatabase name is passed in as a char *, not
+ # in a DBT, so it may not contain nulls; use only source files.
+ set file_list [glob $src_root/*/*.c]
set fcount [llength $file_list]
+ if { $txnenv == 1 && $fcount > 100 } {
+ set file_list [lrange $file_list 0 99]
+ set fcount 100
+ }
set count 0
if { [is_record_based $method] == 1 } {
@@ -79,9 +113,17 @@ proc subdb004 { method args} {
set db [eval {berkdb_open -create -mode 0644} \
$args {$omethod $testfile $subdb}]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval \
{$db put} $txn $pflags {$key [chop_data $method $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Should really catch errors
set fid [open $t4 w]
@@ -104,7 +146,15 @@ proc subdb004 { method args} {
# Now we will get each key from the DB and compare the results
# to the original.
# puts "\tSubdb004.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_bin_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
@@ -114,21 +164,30 @@ proc subdb004 { method args} {
# as the data in that subdb and that the filename is the key.
#
puts "\tSubdb004.b: Compare subdb names with key/data"
- set db [berkdb_open -rdonly $testfile]
+ set db [eval {berkdb_open -rdonly} $envargs {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set c [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $c $db] TRUE
for {set d [$c get -first] } { [llength $d] != 0 } \
{set d [$c get -next] } {
set subdbname [lindex [lindex $d 0] 0]
- set subdb [berkdb_open $testfile $subdbname]
+ set subdb [eval {berkdb_open} $args {$testfile $subdbname}]
error_check_good dbopen [is_valid_db $db] TRUE
# Output the subdb name
set ofid [open $t3 w]
fconfigure $ofid -translation binary
- set subdbname [string trimright $subdbname \0]
+ if { [string compare "\0" \
+ [string range $subdbname end end]] == 0 } {
+ set slen [expr [string length $subdbname] - 2]
+ set subdbname [string range $subdbname 1 $slen]
+ }
puts -nonewline $ofid $subdbname
close $ofid
@@ -154,6 +213,9 @@ proc subdb004 { method args} {
error_check_good db_close [$subdb close] 0
}
error_check_good curs_close [$c close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
if { [is_record_based $method] != 1 } {
diff --git a/db/test/sdb005.tcl b/db/test/sdb005.tcl
index 22e4083c4..e5741d297 100644
--- a/db/test/sdb005.tcl
+++ b/db/test/sdb005.tcl
@@ -1,14 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb005.tcl,v 11.12 2000/08/25 14:21:53 sue Exp $
+# $Id: sdb005.tcl,v 11.20 2003/01/08 05:52:59 bostic Exp $
#
-# Test cursor operations between subdbs.
+# TEST sdb005
+# TEST Tests cursor operations in subdbs
+# TEST Put/get per key
+# TEST Verify cursor operations work within subdb
+# TEST Verify cursor operations do not work across subdbs
+# TEST
#
# We should test this on all btrees, all hash, and a combination thereof
-proc subdb005 {method {nentries 100} args } {
+proc sdb005 {method {nentries 100} args } {
source ./include.tcl
set args [convert_args $method $args]
@@ -20,21 +25,50 @@ proc subdb005 {method {nentries 100} args } {
}
puts "Subdb005: $method ( $args ) subdb cursor operations test"
+ set txnenv 0
+ set envargs ""
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb005.db
+ set env NULL
+ } else {
+ set testfile subdb005.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ if { $nentries == 100 } {
+ set nentries 20
+ }
+ }
+ set testdir [get_home $env]
+ }
+
+ cleanup $testdir $env
set txn ""
- cleanup $testdir NULL
set psize 8192
- set testfile $testdir/subdb005.db
set duplist {-1 -1 -1 -1 -1}
build_all_subdb \
- $testfile [list $method] [list $psize] $duplist $nentries $args
+ $testfile [list $method] $psize $duplist $nentries $args
set numdb [llength $duplist]
#
# Get a cursor in each subdb and move past the end of each
# subdb. Make sure we don't end up in another subdb.
#
puts "\tSubdb005.a: Cursor ops - first/prev and last/next"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for {set i 0} {$i < $numdb} {incr i} {
- set db [berkdb_open -unknown $testfile sub$i.db]
+ set db [eval {berkdb_open -unknown} $args {$testfile sub$i.db}]
error_check_good dbopen [is_valid_db $db] TRUE
set db_handle($i) $db
# Used in 005.c test
@@ -54,6 +88,7 @@ proc subdb005 {method {nentries 100} args } {
error_check_good dbc_get [expr [llength $d] != 0] 1
set d [$dbc get -next]
error_check_good dbc_get [expr [llength $d] == 0] 1
+ error_check_good dbc_close [$dbc close] 0
}
#
# Get a key from each subdb and try to get this key in a
@@ -67,15 +102,17 @@ proc subdb005 {method {nentries 100} args } {
}
set db $db_handle($i)
if { [is_record_based $method] == 1 } {
- set d [$db get -recno $db_key($n)]
+ set d [eval {$db get -recno} $txn {$db_key($n)}]
error_check_good \
db_get [expr [llength $d] == 0] 1
} else {
- set d [$db get $db_key($n)]
+ set d [eval {$db get} $txn {$db_key($n)}]
error_check_good db_get [expr [llength $d] == 0] 1
}
}
-
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
#
# Clean up
#
@@ -92,7 +129,7 @@ proc subdb005 {method {nentries 100} args } {
{berkdb_open_noerr -unknown $testfile} ret] 0
puts "\tSubdb005.d: Check contents of DB for subdb names only"
- set db [berkdb_open -unknown -rdonly $testfile]
+ set db [eval {berkdb_open -unknown -rdonly} $envargs {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set subdblist [$db get -glob *]
foreach kd $subdblist {
diff --git a/db/test/sdb006.tcl b/db/test/sdb006.tcl
index 70dee5c73..4265720a1 100644
--- a/db/test/sdb006.tcl
+++ b/db/test/sdb006.tcl
@@ -1,20 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb006.tcl,v 11.12 2000/09/20 13:22:03 sue Exp $
+# $Id: sdb006.tcl,v 11.22 2003/01/08 05:53:00 bostic Exp $
#
-# We'll test 2-way, 3-way, and 4-way joins and figure that if those work,
-# everything else does as well. We'll create test databases called
-# sub1.db, sub2.db, sub3.db, and sub4.db. The number on the database
-# describes the duplication -- duplicates are of the form 0, N, 2N, 3N, ...
-# where N is the number of the database. Primary.db is the primary database,
-# and sub0.db is the database that has no matching duplicates. All of
-# these are within a single database.
+# TEST sdb006
+# TEST Tests intra-subdb join
+# TEST
+# TEST We'll test 2-way, 3-way, and 4-way joins and figure that if those work,
+# TEST everything else does as well. We'll create test databases called
+# TEST sub1.db, sub2.db, sub3.db, and sub4.db. The number on the database
+# TEST describes the duplication -- duplicates are of the form 0, N, 2N, 3N,
+# TEST ... where N is the number of the database. Primary.db is the primary
+# TEST database, and sub0.db is the database that has no matching duplicates.
+# TEST All of these are within a single database.
#
# We should test this on all btrees, all hash, and a combination thereof
-proc subdb006 {method {nentries 100} args } {
+proc sdb006 {method {nentries 100} args } {
source ./include.tcl
global rand_init
@@ -27,8 +30,34 @@ proc subdb006 {method {nentries 100} args } {
return
}
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb006.db
+ set env NULL
+ } else {
+ set testfile subdb006.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ if { $nentries == 100 } {
+ # !!!
+ # nentries must be greater than the number
+ # of do_join_subdb calls below.
+ #
+ set nentries 35
+ }
+ }
+ set testdir [get_home $env]
+ }
berkdb srand $rand_init
+ set oargs $args
foreach opt {" -dup" " -dupsort"} {
append args $opt
@@ -40,10 +69,12 @@ proc subdb006 {method {nentries 100} args } {
#
puts "\tSubdb006.a: Intra-subdb join"
- cleanup $testdir NULL
- set testfile $testdir/subdb006.db
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
- set psize [list 8192]
+ set psize 8192
set duplist {0 50 25 16 12}
set numdb [llength $duplist]
build_all_subdb $testfile [list $method] $psize \
@@ -53,77 +84,85 @@ proc subdb006 {method {nentries 100} args } {
puts "Subdb006: Building the primary database $method"
set oflags "-create -mode 0644 [conv $omethod \
[berkdb random_int 1 2]]"
- set db [eval {berkdb_open} $oflags $testfile primary.db]
+ set db [eval {berkdb_open} $oflags $oargs $testfile primary.db]
error_check_good dbopen [is_valid_db $db] TRUE
for { set i 0 } { $i < 1000 } { incr i } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set key [format "%04d" $i]
- set ret [$db put $key stub]
+ set ret [eval {$db put} $txn {$key stub}]
error_check_good "primary put" $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
error_check_good "primary close" [$db close] 0
set did [open $dict]
gets $did str
- do_join_subdb $testfile primary.db "1 0" $str
+ do_join_subdb $testfile primary.db "1 0" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2 0" $str
+ do_join_subdb $testfile primary.db "2 0" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 0" $str
+ do_join_subdb $testfile primary.db "3 0" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 0" $str
+ do_join_subdb $testfile primary.db "4 0" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1" $str
+ do_join_subdb $testfile primary.db "1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2" $str
+ do_join_subdb $testfile primary.db "2" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3" $str
+ do_join_subdb $testfile primary.db "3" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4" $str
+ do_join_subdb $testfile primary.db "4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1 2" $str
+ do_join_subdb $testfile primary.db "1 2" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1 2 3" $str
+ do_join_subdb $testfile primary.db "1 2 3" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1 2 3 4" $str
+ do_join_subdb $testfile primary.db "1 2 3 4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2 1" $str
+ do_join_subdb $testfile primary.db "2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 2 1" $str
+ do_join_subdb $testfile primary.db "3 2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 3 2 1" $str
+ do_join_subdb $testfile primary.db "4 3 2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1 3" $str
+ do_join_subdb $testfile primary.db "1 3" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 1" $str
+ do_join_subdb $testfile primary.db "3 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "1 4" $str
+ do_join_subdb $testfile primary.db "1 4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 1" $str
+ do_join_subdb $testfile primary.db "4 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2 3" $str
+ do_join_subdb $testfile primary.db "2 3" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 2" $str
+ do_join_subdb $testfile primary.db "3 2" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2 4" $str
+ do_join_subdb $testfile primary.db "2 4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 2" $str
+ do_join_subdb $testfile primary.db "4 2" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 4" $str
+ do_join_subdb $testfile primary.db "3 4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 3" $str
+ do_join_subdb $testfile primary.db "4 3" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "2 3 4" $str
+ do_join_subdb $testfile primary.db "2 3 4" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 4 1" $str
+ do_join_subdb $testfile primary.db "3 4 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 2 1" $str
+ do_join_subdb $testfile primary.db "4 2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "0 2 1" $str
+ do_join_subdb $testfile primary.db "0 2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "3 2 0" $str
+ do_join_subdb $testfile primary.db "3 2 0" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 3 2 1" $str
+ do_join_subdb $testfile primary.db "4 3 2 1" $str $oargs
gets $did str
- do_join_subdb $testfile primary.db "4 3 0 1" $str
+ do_join_subdb $testfile primary.db "4 3 0 1" $str $oargs
close $did
}
diff --git a/db/test/sdb007.tcl b/db/test/sdb007.tcl
index 6b56fd411..af8bfefa3 100644
--- a/db/test/sdb007.tcl
+++ b/db/test/sdb007.tcl
@@ -1,19 +1,25 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb007.tcl,v 11.13 2000/12/11 17:24:55 sue Exp $
+# $Id: sdb007.tcl,v 11.23 2003/11/10 17:41:39 sandstro Exp $
#
-# Sub DB Test 7 {access method}
-# Use the first 10,000 entries from the dictionary spread across each subdb.
-# Use a different page size for every subdb.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc subdb007 { method {nentries 10000} args } {
+# TEST sdb007
+# TEST Tests page size difference errors between subdbs.
+# TEST Test 3 different scenarios for page sizes.
+# TEST 1. Create/open with a default page size, 2nd subdb create with
+# TEST specified different one, should error.
+# TEST 2. Create/open with specific page size, 2nd subdb create with
+# TEST different one, should error.
+# TEST 3. Create/open with specified page size, 2nd subdb create with
+# TEST same specified size, should succeed.
+# TEST (4th combo of using all defaults is a basic test, done elsewhere)
+proc sdb007 { method args } {
source ./include.tcl
+ global is_envmethod
+ set db2args [convert_args -btree $args]
set args [convert_args $method $args]
set omethod [convert_method $method]
@@ -23,101 +29,113 @@ proc subdb007 { method {nentries 10000} args } {
}
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
- puts "Subdb007: skipping for specific pagesizes"
+ puts "Subdb007: skipping for specific page sizes"
return
}
- puts "Subdb007: $method ($args) subdb tests with different pagesizes"
-
- # Create the database and open the dictionary
- set testfile $testdir/subdb007.db
- set t1 $testdir/t1
- set t2 $testdir/t2
- set t3 $testdir/t3
- set t4 $testdir/t4
- cleanup $testdir NULL
-
- set txn ""
- set count 0
-
- if { [is_record_based $method] == 1 } {
- set checkfunc subdb007_recno.check
+ puts "Subdb007: $method ($args) subdb tests with different page sizes"
+
+ set txnenv 0
+ set envargs ""
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb007.db
+ set env NULL
} else {
- set checkfunc subdb007.check
- }
- puts "\tSubdb007.a: create subdbs of different page sizes"
- set psize {8192 4096 2048 1024 512}
- set nsubdbs [llength $psize]
- for { set i 0 } { $i < $nsubdbs } { incr i } {
- lappend duplist -1
- }
- set newent [expr $nentries / $nsubdbs]
- build_all_subdb $testfile [list $method] $psize $duplist $newent $args
-
- # Now we will get each key from the DB and compare the results
- # to the original.
- for { set subdb 0 } { $subdb < $nsubdbs } { incr subdb } {
- puts "\tSubdb007.b: dump file sub$subdb.db"
- set db [berkdb_open -unknown $testfile sub$subdb.db]
- dump_file $db $txn $t1 $checkfunc
- error_check_good db_close [$db close] 0
-
- # Now compare the keys to see if they match the dictionary
- # (or ints)
- if { [is_record_based $method] == 1 } {
- set oid [open $t2 w]
- for {set i 1} {$i <= $newent} {incr i} {
- puts $oid [expr $subdb * $newent + $i]
- }
- close $oid
- file rename -force $t1 $t3
- } else {
- set beg [expr $subdb * $newent]
- incr beg
- set end [expr $beg + $newent - 1]
- filehead $end $dict $t3 $beg
- filesort $t3 $t2
- filesort $t1 $t3
+ set testfile subdb007.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ append db2args " -auto_commit "
}
+ set testdir [get_home $env]
+ }
+ set sub1 "sub1"
+ set sub2 "sub2"
+ cleanup $testdir $env
+ set txn ""
- error_check_good Subdb007:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
-
- puts "\tSubdb007.c: sub$subdb.db: close, open, and dump file"
- # Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
- dump_file_direction "-first" "-next" sub$subdb.db
- if { [is_record_based $method] != 1 } {
- filesort $t1 $t3
+ puts "\tSubdb007.a.0: create subdb with default page size"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {$omethod $testfile $sub1}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ #
+ # Figure out what the default page size is so that we can
+ # guarantee we create it with a different value.
+ set statret [$db stat]
+ set pgsz 0
+ foreach pair $statret {
+ set fld [lindex $pair 0]
+ if { [string compare $fld {Page size}] == 0 } {
+ set pgsz [lindex $pair 1]
}
+ }
+ error_check_good dbclose [$db close] 0
- error_check_good Subdb007:diff($t2,$t3) \
- [filecmp $t2 $t3] 0
+ if { $pgsz == 512 } {
+ set pgsz2 2048
+ } else {
+ set pgsz2 512
+ }
- # Now, reopen the file and run the last test again in the
- # reverse direction.
- puts "\tSubdb007.d: sub$subdb.db:\
- close, open, and dump file in reverse direction"
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
- dump_file_direction "-last" "-prev" sub$subdb.db
+ puts "\tSubdb007.a.1: create 2nd subdb with specified page size"
+ set stat [catch {eval {berkdb_open_noerr -create -btree} \
+ $db2args {-pagesize $pgsz2 $testfile $sub2}} ret]
+ error_check_good subdb:pgsz $stat 1
+ # We'll get a different error if running in an env,
+ # because the env won't have been opened with noerr.
+ # Skip the test for what the error is, just getting the
+ # error is enough.
+ if { $is_envmethod == 0 } {
+ error_check_good subdb:fail [is_substr $ret \
+ "Different pagesize specified"] 1
+ }
- if { [is_record_based $method] != 1 } {
- filesort $t1 $t3
+ set ret [eval {berkdb dbremove} $envargs {$testfile}]
+
+ puts "\tSubdb007.b.0: create subdb with specified page size"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-pagesize $pgsz2 $omethod $testfile $sub1}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ set statret [$db stat]
+ set newpgsz 0
+ foreach pair $statret {
+ set fld [lindex $pair 0]
+ if { [string compare $fld {Page size}] == 0 } {
+ set newpgsz [lindex $pair 1]
}
-
- error_check_good Subdb007:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
}
-}
+ error_check_good pgsize $pgsz2 $newpgsz
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb007.b.1: create 2nd subdb with different page size"
+ set stat [catch {eval {berkdb_open_noerr -create -btree} \
+ $db2args {-pagesize $pgsz $testfile $sub2}} ret]
+ error_check_good subdb:pgsz $stat 1
+ if { $is_envmethod == 0 } {
+ error_check_good subdb:fail [is_substr $ret \
+ "Different pagesize specified"] 1
+ }
-# Check function for Subdb007; keys and data are identical
-proc subdb007.check { key data } {
- error_check_good "key/data mismatch" $data $key
-}
+ set ret [eval {berkdb dbremove} $envargs {$testfile}]
+
+ puts "\tSubdb007.c.0: create subdb with specified page size"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-pagesize $pgsz2 $omethod $testfile $sub1}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb007.c.1: create 2nd subdb with same specified page size"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-pagesize $pgsz2 $omethod $testfile $sub2}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
-proc subdb007_recno.check { key data } {
-global dict
-global kvals
- error_check_good key"$key"_exists [info exists kvals($key)] 1
- error_check_good "key/data mismatch, key $key" $data $kvals($key)
}
diff --git a/db/test/sdb008.tcl b/db/test/sdb008.tcl
index b005f0093..1439e2c2d 100644
--- a/db/test/sdb008.tcl
+++ b/db/test/sdb008.tcl
@@ -1,19 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb008.tcl,v 11.14 2000/08/25 14:21:53 sue Exp $
+# $Id: sdb008.tcl,v 11.30 2003/09/04 23:41:15 bostic Exp $
#
-# Sub DB Test 8 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Use a different or random lorder for each subdb.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc subdb008 { method {nentries 10000} args } {
+# TEST sdb008
+# TEST Tests explicit setting of lorders for subdatabases -- the
+# TEST lorder should be ignored.
+proc sdb008 { method args } {
source ./include.tcl
- global rand_init
set args [convert_args $method $args]
set omethod [convert_method $method]
@@ -22,130 +18,77 @@ proc subdb008 { method {nentries 10000} args } {
puts "Subdb008: skipping for method $method"
return
}
-
- berkdb srand $rand_init
-
- puts "Subdb008: $method ($args) subdb lorder tests"
-
- # Create the database and open the dictionary
- set testfile $testdir/subdb008.db
- set t1 $testdir/t1
- set t2 $testdir/t2
- set t3 $testdir/t3
- set t4 $testdir/t4
- cleanup $testdir NULL
-
- set txn ""
- set pflags ""
- set gflags ""
-
- if { [is_record_based $method] == 1 } {
- set checkfunc subdb008_recno.check
+ set eindex [lsearch -exact $args "-env"]
+
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile1 $testdir/subdb008a.db
+ set testfile2 $testdir/subdb008b.db
+ set env NULL
} else {
- set checkfunc subdb008.check
- }
- set nsubdbs 4
- set lo [list 4321 1234]
- puts "\tSubdb008.a: put/get loop"
- # Here is the loop where we put and get each key/data pair
- for { set i 0 } { $i < $nsubdbs } { incr i } {
- set subdb sub$i.db
- if { $i >= [llength $lo]} {
- set r [berkdb random_int 0 1]
- set order [lindex $lo $r]
- } else {
- set order [lindex $lo $i]
+ set testfile1 subdb008a.db
+ set testfile2 subdb008b.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
}
- set db [eval {berkdb_open -create -mode 0644} \
- $args {-lorder $order $omethod $testfile $subdb}]
- set did [open $dict]
- set count 0
- while { [gets $did str] != -1 && $count < $nentries } {
- if { [is_record_based $method] == 1 } {
- global kvals
-
- set gflags "-recno"
- set key [expr $i * $nentries]
- set key [expr $key + $count + 1]
- set kvals($key) [pad_data $method $str]
- } else {
- set key $str
- }
- set ret [eval {$db put} \
- $txn $pflags {$key [chop_data $method $str]}]
- error_check_good put $ret 0
-
- set ret [eval {$db get} $gflags {$key}]
- error_check_good \
- get $ret [list [list $key [pad_data $method $str]]]
- incr count
- }
- close $did
- error_check_good db_close [$db close] 0
+ set testdir [get_home $env]
}
+ cleanup $testdir $env
- # Now we will get each key from the DB and compare the results
- # to the original.
- for { set subdb 0 } { $subdb < $nsubdbs } { incr subdb } {
- puts "\tSubdb008.b: dump file sub$subdb.db"
- set db [berkdb_open -unknown $testfile sub$subdb.db]
- dump_file $db $txn $t1 $checkfunc
- error_check_good db_close [$db close] 0
-
- # Now compare the keys to see if they match the dictionary
- # (or ints)
- if { [is_record_based $method] == 1 } {
- set oid [open $t2 w]
- for {set i 1} {$i <= $nentries} {incr i} {
- puts $oid [expr $subdb * $nentries + $i]
- }
- close $oid
- file rename -force $t1 $t3
- } else {
- set q q
- filehead $nentries $dict $t3
- filesort $t3 $t2
- filesort $t1 $t3
- }
-
- error_check_good Subdb008:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ puts "Subdb008: $method ($args) subdb tests with different lorders"
- puts "\tSubdb008.c: sub$subdb.db: close, open, and dump file"
- # Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
- dump_file_direction "-first" "-next" sub$subdb.db
- if { [is_record_based $method] != 1 } {
- filesort $t1 $t3
- }
-
- error_check_good Subdb008:diff($t2,$t3) \
- [filecmp $t2 $t3] 0
-
- # Now, reopen the file and run the last test again in the
- # reverse direction.
- puts "\tSubdb008.d: sub$subdb.db:\
- close, open, and dump file in reverse direction"
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
- dump_file_direction "-last" "-prev" sub$subdb.db
-
- if { [is_record_based $method] != 1 } {
- filesort $t1 $t3
- }
-
- error_check_good Subdb008:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ puts "\tSubdb008.a.0: create subdb with system default lorder"
+ set lorder "1234"
+ if { [big_endian] } {
+ set lorder "4321"
}
-}
-
-# Check function for Subdb008; keys and data are identical
-proc subdb008.check { key data } {
- error_check_good "key/data mismatch" $data $key
-}
-
-proc subdb008_recno.check { key data } {
-global dict
-global kvals
- error_check_good key"$key"_exists [info exists kvals($key)] 1
- error_check_good "key/data mismatch, key $key" $data $kvals($key)
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {$omethod $testfile1 "sub1"}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ # Explicitly try to create subdb's of each byte order. In both
+ # cases the subdb should be forced to the byte order of the
+ # parent database.
+ puts "\tSubdb008.a.1: Try to create subdb with -1234 lorder"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-lorder 1234 $omethod $testfile1 "sub2"}]
+ error_check_good lorder_1234 [eval $db get_lorder] $lorder
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb008.a.2: Try to create subdb with -4321 lorder"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-lorder 4321 $omethod $testfile1 "sub3"}]
+ error_check_good lorder_4321 [eval $db get_lorder] $lorder
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb008.b.0: create subdb with non-default lorder"
+ set reverse_lorder "4321"
+ if { [big_endian] } {
+ set reverse_lorder "1234"
+ }
+ set db [eval {berkdb_open -create -mode 0644} \
+ {-lorder $reverse_lorder} $args {$omethod $testfile2 "sub1"}]
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb008.b.1: Try to create subdb with -1234 lorder"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-lorder 1234 $omethod $testfile2 "sub2"}]
+ error_check_good lorder_1234 [eval $db get_lorder] $reverse_lorder
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
+
+ puts "\tSubdb008.b.2: Try to create subdb with -4321 lorder"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $args {-lorder 4321 $omethod $testfile2 "sub3"}]
+ error_check_good lorder_4321 [eval $db get_lorder] $reverse_lorder
+ error_check_good subdb [is_valid_db $db] TRUE
+ error_check_good dbclose [$db close] 0
}
diff --git a/db/test/sdb009.tcl b/db/test/sdb009.tcl
index 060bea643..e20e6f5e2 100644
--- a/db/test/sdb009.tcl
+++ b/db/test/sdb009.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb009.tcl,v 11.4 2000/08/25 14:21:53 sue Exp $
+# $Id: sdb009.tcl,v 11.11 2003/01/08 05:53:05 bostic Exp $
#
-# Subdatabase Test 9 (replacement)
-# Test the DB->rename method.
-proc subdb009 { method args } {
+# TEST sdb009
+# TEST Test DB->rename() method for subdbs
+proc sdb009 { method args } {
global errorCode
source ./include.tcl
+
set omethod [convert_method $method]
set args [convert_args $method $args]
@@ -20,43 +21,72 @@ proc subdb009 { method args } {
return
}
- set file $testdir/subdb009.db
+ set txnenv 0
+ set envargs ""
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb009.db
+ set env NULL
+ } else {
+ set testfile subdb009.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ }
+ set testdir [get_home $env]
+ }
set oldsdb OLDDB
set newsdb NEWDB
# Make sure we're starting from a clean slate.
- cleanup $testdir NULL
- error_check_bad "$file exists" [file exists $file] 1
+ cleanup $testdir $env
+ error_check_bad "$testfile exists" [file exists $testfile] 1
puts "\tSubdb009.a: Create/rename file"
puts "\t\tSubdb009.a.1: create"
set db [eval {berkdb_open -create -mode 0644}\
- $omethod $args $file $oldsdb]
+ $omethod $args {$testfile $oldsdb}]
error_check_good dbopen [is_valid_db $db] TRUE
# The nature of the key and data are unimportant; use numeric key
# so record-based methods don't need special treatment.
+ set txn ""
set key 1
set data [pad_data $method data]
- error_check_good dbput [$db put $key $data] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ error_check_good dbput [eval {$db put} $txn {$key $data}] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good dbclose [$db close] 0
puts "\t\tSubdb009.a.2: rename"
- error_check_good rename_file [eval {berkdb dbrename} $file \
- $oldsdb $newsdb] 0
+ error_check_good rename_file [eval {berkdb dbrename} $envargs \
+ {$testfile $oldsdb $newsdb}] 0
puts "\t\tSubdb009.a.3: check"
# Open again with create to make sure we've really completely
# disassociated the subdb from the old name.
set odb [eval {berkdb_open -create -mode 0644}\
- $omethod $args $file $oldsdb]
+ $omethod $args $testfile $oldsdb]
error_check_good odb_open [is_valid_db $odb] TRUE
set odbt [$odb get $key]
error_check_good odb_close [$odb close] 0
set ndb [eval {berkdb_open -create -mode 0644}\
- $omethod $args $file $newsdb]
+ $omethod $args $testfile $newsdb]
error_check_good ndb_open [is_valid_db $ndb] TRUE
set ndbt [$ndb get $key]
error_check_good ndb_close [$ndb close] 0
@@ -69,7 +99,8 @@ proc subdb009 { method args } {
# Now there's both an old and a new. Rename the "new" to the "old"
# and make sure that fails.
puts "\tSubdb009.b: Make sure rename fails instead of overwriting"
- set ret [catch {eval {berkdb dbrename} $file $oldsdb $newsdb} res]
+ set ret [catch {eval {berkdb dbrename} $envargs $testfile \
+ $oldsdb $newsdb} res]
error_check_bad rename_overwrite $ret 0
error_check_good rename_overwrite_ret [is_substr $errorCode EEXIST] 1
diff --git a/db/test/sdb010.tcl b/db/test/sdb010.tcl
index 6bec78d37..d0892880c 100644
--- a/db/test/sdb010.tcl
+++ b/db/test/sdb010.tcl
@@ -1,46 +1,166 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdb010.tcl,v 11.4 2000/08/25 14:21:53 sue Exp $
+# $Id: sdb010.tcl,v 11.16 2003/01/08 05:53:07 bostic Exp $
#
-# Subdatabase Test 10 {access method}
-# Test of dbremove
-proc subdb010 { method args } {
+# TEST sdb010
+# TEST Test DB->remove() method and DB->truncate() for subdbs
+proc sdb010 { method args } {
global errorCode
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Subdb010: Test of DB->remove()"
+ puts "Subdb010: Test of DB->remove() and DB->truncate"
if { [is_queue $method] == 1 } {
puts "\tSubdb010: Skipping for method $method."
return
}
- cleanup $testdir NULL
+ set txnenv 0
+ set envargs ""
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb010.db
+ set tfpath $testfile
+ set env NULL
+ } else {
+ set testfile subdb010.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ }
+ set testdir [get_home $env]
+ set tfpath $testdir/$testfile
+ }
+ cleanup $testdir $env
- set testfile $testdir/subdb010.db
+ set txn ""
set testdb DATABASE
+ set testdb2 DATABASE2
- set db [eval {berkdb_open -create -truncate -mode 0644} $omethod \
+ set db [eval {berkdb_open -create -mode 0644} $omethod \
$args $testfile $testdb]
error_check_good db_open [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
- error_check_good file_exists_before [file exists $testfile] 1
- error_check_good db_remove [berkdb dbremove $testfile $testdb] 0
+ puts "\tSubdb010.a: Test of DB->remove()"
+ error_check_good file_exists_before [file exists $tfpath] 1
+ error_check_good db_remove [eval {berkdb dbremove} $envargs \
+ $testfile $testdb] 0
# File should still exist.
- error_check_good file_exists_after [file exists $testfile] 1
+ error_check_good file_exists_after [file exists $tfpath] 1
# But database should not.
set ret [catch {eval berkdb_open $omethod $args $testfile $testdb} res]
error_check_bad open_failed ret 0
error_check_good open_failed_ret [is_substr $errorCode ENOENT] 1
+ puts "\tSubdb010.b: Setup for DB->truncate()"
+ # The nature of the key and data are unimportant; use numeric key
+ # so record-based methods don't need special treatment.
+ set key1 1
+ set key2 2
+ set data1 [pad_data $method data1]
+ set data2 [pad_data $method data2]
+
+ set db [eval {berkdb_open -create -mode 0644} $omethod \
+ $args {$testfile $testdb}]
+ error_check_good db_open [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ error_check_good dbput [eval {$db put} $txn {$key1 $data1}] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ set db2 [eval {berkdb_open -create -mode 0644} $omethod \
+ $args $testfile $testdb2]
+ error_check_good db_open [is_valid_db $db2] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ error_check_good dbput [eval {$db2 put} $txn {$key2 $data2}] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ error_check_good db_close [$db close] 0
+ error_check_good db_close [$db2 close] 0
+
+ puts "\tSubdb010.c: truncate"
+ #
+ # Return value should be 1, the count of how many items were
+ # destroyed when we truncated.
+ set db [eval {berkdb_open -create -mode 0644} $omethod \
+ $args $testfile $testdb]
+ error_check_good db_open [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ error_check_good trunc_subdb [eval {$db truncate} $txn] 1
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
+
+ puts "\tSubdb010.d: check"
+ set db [eval {berkdb_open} $args {$testfile $testdb}]
+ error_check_good db_open [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ set kd [$dbc get -first]
+ error_check_good trunc_dbcget [llength $kd] 0
+ error_check_good dbcclose [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ set db2 [eval {berkdb_open} $args {$testfile $testdb2}]
+ error_check_good db_open [is_valid_db $db2] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db2 cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db2] TRUE
+ set kd [$dbc get -first]
+ error_check_bad notrunc_dbcget1 [llength $kd] 0
+ set db2kd [list [list $key2 $data2]]
+ error_check_good key2 $kd $db2kd
+ set kd [$dbc get -next]
+ error_check_good notrunc_dbget2 [llength $kd] 0
+ error_check_good dbcclose [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ error_check_good db_close [$db close] 0
+ error_check_good db_close [$db2 close] 0
puts "\tSubdb010 succeeded."
}
diff --git a/db/test/sdb011.tcl b/db/test/sdb011.tcl
index a28019c4f..a32f990db 100644
--- a/db/test/sdb011.tcl
+++ b/db/test/sdb011.tcl
@@ -1,16 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2001
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: sdb011.tcl,v 11.2 2001/05/02 17:22:56 krinsky Exp
+# $Id: sdb011.tcl,v 11.12 2003/04/18 14:39:09 sandstro Exp $
#
-# SubDB Test 11 {access method}
-# Create 1 db with many large subdbs.
-# Test subdatabases with overflow pages.
-proc subdb011 { method {ndups 13} {nsubdbs 10} args} {
+# TEST sdb011
+# TEST Test deleting Subdbs with overflow pages
+# TEST Create 1 db with many large subdbs.
+# TEST Test subdatabases with overflow pages.
+proc sdb011 { method {ndups 13} {nsubdbs 10} args} {
global names
source ./include.tcl
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
set args [convert_args $method $args]
set omethod [convert_method $method]
@@ -19,20 +22,54 @@ proc subdb011 { method {ndups 13} {nsubdbs 10} args} {
puts "Subdb011: skipping for method $method"
return
}
-
- puts "Subdb011: $method ($args) overflow dups with \
- filename=key filecontents=data pairs"
+ set txnenv 0
+ set envargs ""
+ set max_files 0
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/subdb011.db
+ set env NULL
+ set tfpath $testfile
+ } else {
+ set testfile subdb011.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set envargs " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ append envargs " -auto_commit "
+ set max_files 50
+ if { $ndups == 13 } {
+ set ndups 7
+ }
+ }
+ set testdir [get_home $env]
+ set tfpath $testdir/$testfile
+ }
# Create the database and open the dictionary
- set testfile $testdir/subdb011.db
- cleanup $testdir NULL
+ cleanup $testdir $env
+ set txn ""
# Here is the loop where we put and get each key/data pair
- set file_list [glob ../*/*.c ./libdb.so.3.0 ./libtool ./libtool.exe]
- puts "\tSubdb011.a: Create each subdb and dups"
+ set file_list [get_file_list]
+ if { $max_files != 0 && [llength $file_list] > $max_files } {
+ set fend [expr $max_files - 1]
+ set file_list [lrange $file_list 0 $fend]
+ }
+ set flen [llength $file_list]
+ puts "Subdb011: $method ($args) $ndups overflow dups with \
+ $flen filename=key filecontents=data pairs"
+
+ puts "\tSubdb011.a: Create each of $nsubdbs subdbs and dups"
set slist {}
set i 0
+ set count 0
foreach f $file_list {
set i [expr $i % $nsubdbs]
if { [is_record_based $method] == 1 } {
@@ -53,12 +90,21 @@ proc subdb011 { method {ndups 13} {nsubdbs 10} args} {
error_check_good dbopen [is_valid_db $db] TRUE
for {set dup 0} {$dup < $ndups} {incr dup} {
set data $dup:$filecont
- set ret [eval {$db put} {$key \
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key \
[chop_data $method $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
error_check_good dbclose [$db close] 0
incr i
+ incr count
}
puts "\tSubdb011.b: Verify overflow pages"
@@ -70,14 +116,14 @@ proc subdb011 { method {ndups 13} {nsubdbs 10} args} {
# What everyone else calls overflow pages, hash calls "big
# pages", so we need to special-case hash here. (Hash
- # overflow pages are additional pages after the first in a
+ # overflow pages are additional pages after the first in a
# bucket.)
if { [string compare [$db get_type] hash] == 0 } {
error_check_bad overflow \
[is_substr $stat "{{Number of big pages} 0}"] 1
} else {
error_check_bad overflow \
- [is_substr $stat "{{Overflow pages} 0}"] 1
+ [is_substr $stat "{{Overflow pages} 0}"] 1
}
error_check_good dbclose [$db close] 0
}
@@ -91,8 +137,9 @@ proc subdb011 { method {ndups 13} {nsubdbs 10} args} {
#
# Delete the one we did from the list
set slist [lreplace $slist $sindex $sindex]
- error_check_good file_exists_before [file exists $testfile] 1
- error_check_good db_remove [berkdb dbremove $testfile $subdb] 0
+ error_check_good file_exists_before [file exists $tfpath] 1
+ error_check_good db_remove [eval {berkdb dbremove} $envargs \
+ {$testfile $subdb}] 0
}
}
diff --git a/db/test/sdb012.tcl b/db/test/sdb012.tcl
index ff60c1fae..3e7ceb170 100644
--- a/db/test/sdb012.tcl
+++ b/db/test/sdb012.tcl
@@ -1,16 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: sdb012.tcl,v 1.3 2002/08/08 15:38:10 bostic Exp
+# $Id: sdb012.tcl,v 1.5 2003/01/08 05:53:10 bostic Exp $
#
-# TEST subdb012
+# TEST sdb012
# TEST Test subdbs with locking and transactions
# TEST Tests creating and removing subdbs while handles
# TEST are open works correctly, and in the face of txns.
#
-proc subdb012 { method args } {
+proc sdb012 { method args } {
source ./include.tcl
set args [convert_args $method $args]
diff --git a/db/test/sdbscript.tcl b/db/test/sdbscript.tcl
index 1b099520e..b7981c2bf 100644
--- a/db/test/sdbscript.tcl
+++ b/db/test/sdbscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdbscript.tcl,v 11.7 2000/04/21 18:36:23 krinsky Exp $
+# $Id: sdbscript.tcl,v 11.10 2003/01/08 05:53:13 bostic Exp $
#
# Usage: subdbscript testfile subdbnumber factor
# testfile: name of DB itself
diff --git a/db/test/sdbtest001.tcl b/db/test/sdbtest001.tcl
index e3ff2b032..30a3008d4 100644
--- a/db/test/sdbtest001.tcl
+++ b/db/test/sdbtest001.tcl
@@ -1,18 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdbtest001.tcl,v 11.13 2000/08/25 14:21:53 sue Exp $
+# $Id: sdbtest001.tcl,v 11.20 2003/01/08 05:53:15 bostic Exp $
#
-# Sub DB All-Method Test 1
-# Make several subdb's of different access methods all in one DB.
-# Rotate methods and repeat [#762].
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc subdbtest001 { {nentries 10000} } {
+# TEST sdbtest001
+# TEST Tests multiple access methods in one subdb
+# TEST Open several subdbs, each with a different access method
+# TEST Small keys, small data
+# TEST Put/get per key per subdb
+# TEST Dump file, verify per subdb
+# TEST Close, reopen per subdb
+# TEST Dump file, verify per subdb
+# TEST
+# TEST Make several subdb's of different access methods all in one DB.
+# TEST Rotate methods and repeat [#762].
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+proc sdbtest001 { {nentries 10000} } {
source ./include.tcl
puts "Subdbtest001: many different subdb access methods in one"
@@ -41,16 +49,25 @@ proc subdbtest001 { {nentries 10000} } {
lappend method_list [list "-btree" "-rbtree" "-ddbtree" "-dbtree"]
lappend method_list [list "-dbtree" "-ddbtree" "-btree" "-rbtree"]
lappend method_list [list "-ddbtree" "-dbtree" "-rbtree" "-btree"]
+ set plist [list 512 8192 1024 4096 2048 16384]
+ set mlen [llength $method_list]
+ set plen [llength $plist]
+ while { $plen < $mlen } {
+ set plist [concat $plist $plist]
+ set plen [llength $plist]
+ }
+ set pgsz 0
foreach methods $method_list {
cleanup $testdir NULL
puts "\tSubdbtest001.a: create subdbs of different access methods:"
puts "\tSubdbtest001.a: $methods"
- set psize {8192 4096}
set nsubdbs [llength $methods]
set duplist ""
for { set i 0 } { $i < $nsubdbs } { incr i } {
lappend duplist -1
}
+ set psize [lindex $plist $pgsz]
+ incr pgsz
set newent [expr $nentries / $nsubdbs]
build_all_subdb $testfile $methods $psize $duplist $newent
@@ -95,7 +112,7 @@ proc subdbtest001 { {nentries 10000} } {
puts "\tSubdbtest001.c: sub$subdb.db: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile NULL $t1 $checkfunc \
dump_file_direction "-first" "-next" sub$subdb.db
if { [string compare $method "-recno"] != 0 } {
filesort $t1 $t3
@@ -107,7 +124,7 @@ proc subdbtest001 { {nentries 10000} } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tSubdbtest001.d: sub$subdb.db: close, open, and dump file in reverse direction"
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile NULL $t1 $checkfunc \
dump_file_direction "-last" "-prev" sub$subdb.db
if { [string compare $method "-recno"] != 0 } {
diff --git a/db/test/sdbtest002.tcl b/db/test/sdbtest002.tcl
index b8bad4e70..7085d53b1 100644
--- a/db/test/sdbtest002.tcl
+++ b/db/test/sdbtest002.tcl
@@ -1,19 +1,30 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdbtest002.tcl,v 11.19 2000/08/25 14:21:53 sue Exp $
+# $Id: sdbtest002.tcl,v 11.27 2003/01/08 05:53:16 bostic Exp $
#
-# Sub DB All-Method Test 2
-# Make several subdb's of different access methods all in one DB.
-# Fork of some child procs to each manipulate one subdb and when
-# they are finished, verify the contents of the databases.
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc subdbtest002 { {nentries 10000} } {
+# TEST sdbtest002
+# TEST Tests multiple access methods in one subdb access by multiple
+# TEST processes.
+# TEST Open several subdbs, each with a different access method
+# TEST Small keys, small data
+# TEST Put/get per key per subdb
+# TEST Fork off several child procs to each delete selected
+# TEST data from their subdb and then exit
+# TEST Dump file, verify contents of each subdb is correct
+# TEST Close, reopen per subdb
+# TEST Dump file, verify per subdb
+# TEST
+# TEST Make several subdb's of different access methods all in one DB.
+# TEST Fork of some child procs to each manipulate one subdb and when
+# TEST they are finished, verify the contents of the databases.
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+proc sdbtest002 { {nentries 10000} } {
source ./include.tcl
puts "Subdbtest002: many different subdb access methods in one"
@@ -34,7 +45,7 @@ proc subdbtest002 { {nentries 10000} } {
cleanup $testdir NULL
puts "\tSubdbtest002.a: create subdbs of different access methods:"
puts "\t\t$methods"
- set psize {8192 4096}
+ set psize 4096
set nsubdbs [llength $methods]
set duplist ""
for { set i 0 } { $i < $nsubdbs } { incr i } {
@@ -65,7 +76,7 @@ proc subdbtest002 { {nentries 10000} } {
$testdir/subdb002.log.$subdb $testfile $subdb $nsubdbs &]
lappend pidlist $p
}
- watch_procs 5
+ watch_procs $pidlist 5
for { set subdb 0 } { $subdb < $nsubdbs } { incr subdb } {
set method [lindex $methods $subdb]
@@ -124,7 +135,7 @@ proc subdbtest002 { {nentries 10000} } {
puts "\tSubdbtest002.c: sub$subdb.db: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile NULL $t1 $checkfunc \
dump_file_direction "-first" "-next" sub$subdb.db
if { [string compare $method "-recno"] != 0 } {
filesort $t1 $t3
@@ -136,7 +147,7 @@ proc subdbtest002 { {nentries 10000} } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tSubdbtest002.d: sub$subdb.db: close, open, and dump file in reverse direction"
- open_and_dump_subfile $testfile NULL $txn $t1 $checkfunc \
+ open_and_dump_subfile $testfile NULL $t1 $checkfunc \
dump_file_direction "-last" "-prev" sub$subdb.db
if { [string compare $method "-recno"] != 0 } {
diff --git a/db/test/sdbutils.tcl b/db/test/sdbutils.tcl
index 0cb33b286..cf9f64d2f 100644
--- a/db/test/sdbutils.tcl
+++ b/db/test/sdbutils.tcl
@@ -1,21 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sdbutils.tcl,v 11.9 2000/05/22 12:51:38 bostic Exp $
+# $Id: sdbutils.tcl,v 11.15 2003/01/08 05:53:18 bostic Exp $
#
proc build_all_subdb { dbname methods psize dups {nentries 100} {dbargs ""}} {
set nsubdbs [llength $dups]
- set plen [llength $psize]
set mlen [llength $methods]
set savearg $dbargs
for {set i 0} {$i < $nsubdbs} { incr i } {
set m [lindex $methods [expr $i % $mlen]]
set dbargs $savearg
- set p [lindex $psize [expr $i % $plen]]
subdb_build $dbname $nentries [lindex $dups $i] \
- $i $m $p sub$i.db $dbargs
+ $i $m $psize sub$i.db $dbargs
}
}
@@ -27,6 +25,13 @@ proc subdb_build { name nkeys ndups dup_interval method psize subdb dbargs} {
puts "Method: $method"
+ set txnenv 0
+ set eindex [lsearch -exact $dbargs "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $dbargs $eindex]
+ set txnenv [is_txnenv $env]
+ }
# Create the database and open the dictionary
set oflags "-create -mode 0644 $omethod \
-pagesize $psize $dbargs $name $subdb"
@@ -54,16 +59,32 @@ proc subdb_build { name nkeys ndups dup_interval method psize subdb dbargs} {
}
}
}
+ set txn ""
for { set count 0 } { [gets $did str] != -1 && $count < $nkeys } {
incr count} {
for { set i 0 } { $i < $ndups } { incr i } {
set data [format "%04d" [expr $i * $dup_interval]]
- set ret [$db put $str [chop_data $method $data]]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$str \
+ [chop_data $method $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { $ndups == 0 } {
- set ret [$db put $str [chop_data $method NODUP]]
+ set ret [eval {$db put} $txn {$str \
+ [chop_data $method NODUP]}]
error_check_good put $ret 0
} elseif { $ndups < 0 } {
if { [is_record_based $method] == 1 } {
@@ -71,33 +92,38 @@ proc subdb_build { name nkeys ndups dup_interval method psize subdb dbargs} {
set num [expr $nkeys * $dup_interval]
set num [expr $num + $count + 1]
- set ret [$db put $num [chop_data $method $str]]
+ set ret [eval {$db put} $txn {$num \
+ [chop_data $method $str]}]
set kvals($num) [pad_data $method $str]
error_check_good put $ret 0
} else {
- set ret [$db put $str [chop_data $method $str]]
+ set ret [eval {$db put} $txn \
+ {$str [chop_data $method $str]}]
error_check_good put $ret 0
}
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
close $did
error_check_good close:$name [$db close] 0
}
-proc do_join_subdb { db primary subdbs key } {
+proc do_join_subdb { db primary subdbs key oargs } {
source ./include.tcl
puts "\tJoining: $subdbs on $key"
# Open all the databases
- set p [berkdb_open -unknown $db $primary]
+ set p [eval {berkdb_open -unknown} $oargs $db $primary]
error_check_good "primary open" [is_valid_db $p] TRUE
set dblist ""
set curslist ""
foreach i $subdbs {
- set jdb [berkdb_open -unknown $db sub$i.db]
+ set jdb [eval {berkdb_open -unknown} $oargs $db sub$i.db]
error_check_good "sub$i.db open" [is_valid_db $jdb] TRUE
lappend jlist [list $jdb $key]
diff --git a/db/test/sec001.tcl b/db/test/sec001.tcl
index f6f0ddf33..f49929696 100644
--- a/db/test/sec001.tcl
+++ b/db/test/sec001.tcl
@@ -1,17 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2001
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: sec001.tcl,v 11.7 2002/05/31 16:19:30 sue Exp
+# $Id: sec001.tcl,v 11.9 2003/01/08 05:53:19 bostic Exp $
#
# TEST sec001
# TEST Test of security interface
proc sec001 { } {
global errorInfo
global errorCode
+ global has_crypto
source ./include.tcl
+ # Skip test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ puts "Skipping test sec001 for non-crypto release."
+ return
+ }
set testfile1 env1.db
set testfile2 $testdir/env2.db
diff --git a/db/test/sec002.tcl b/db/test/sec002.tcl
index 0b0e882d2..8ecfb306d 100644
--- a/db/test/sec002.tcl
+++ b/db/test/sec002.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2001
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: sec002.tcl,v 11.3 2002/04/24 19:04:59 bostic Exp
+# $Id: sec002.tcl,v 11.10 2003/09/11 16:55:38 sandstro Exp $
#
# TEST sec002
# TEST Test of security interface and catching errors in the
@@ -11,9 +11,16 @@
proc sec002 { } {
global errorInfo
global errorCode
+ global has_crypto
source ./include.tcl
+ # Skip test if release does not support encryption.
+ if { $has_crypto == 0 } {
+ puts "Skipping test sec002 for non-crypto release."
+ return
+ }
+
set testfile1 $testdir/sec002-1.db
set testfile2 $testdir/sec002-2.db
set testfile3 $testdir/sec002-3.db
@@ -57,6 +64,27 @@ proc sec002 { } {
error_check_good dbclose [$db close] 0
#
+ # If we reopen the normal file with the -chksum flag, there
+ # should be no error and checksumming should be ignored.
+ # If we reopen a checksummed file without the -chksum flag,
+ # checksumming should still be in effect. [#6959]
+ #
+ puts "\tSec002.b: Inheritance of chksum properties"
+ puts "\t\tSec002.b1: Reopen ordinary file with -chksum flag"
+ set db [eval {berkdb_open} -chksum $testfile4]
+ error_check_good open_with_chksum [is_valid_db $db] TRUE
+ set retdata [$db get $key]
+ error_check_good testfile4_get [lindex [lindex $retdata 0] 1] $data
+ error_check_good dbclose [$db close] 0
+
+ puts "\t\tSec002.b2: Reopen checksummed file without -chksum flag"
+ set db [eval {berkdb_open} $testfile3]
+ error_check_good open_wo_chksum [is_valid_db $db] TRUE
+ set retdata [$db get $key]
+ error_check_good testfile3_get [lindex [lindex $retdata 0] 1] $data
+ error_check_good dbclose [$db close] 0
+
+ #
# First just touch some bits in the file. We know that in btree
# meta pages, bytes 92-459 are unused. Scribble on them in both
# an encrypted, and both unencrypted files. We should get
@@ -71,7 +99,7 @@ proc sec002 { } {
set fid [open $testfile4 r+]
lappend fidlist $fid
- puts "\tSec002.b: Overwrite unused space in meta-page"
+ puts "\tSec002.c: Overwrite unused space in meta-page"
foreach f $fidlist {
fconfigure $f -translation binary
seek $f 100 start
@@ -83,7 +111,7 @@ proc sec002 { } {
puts -nonewline $f $newbyte
close $f
}
- puts "\tSec002.c: Reopen modified databases"
+ puts "\tSec002.d: Reopen modified databases"
set stat [catch {berkdb_open_noerr -encryptaes $passwd1 $testfile1} ret]
error_check_good db:$testfile1 $stat 1
error_check_good db:$testfile1:fail \
@@ -98,7 +126,15 @@ proc sec002 { } {
error_check_good db:$testfile4 $stat 0
error_check_good dbclose [$db close] 0
- puts "\tSec002.d: Replace root page in encrypted w/ encrypted"
+ # Skip the remainder of the test for Windows platforms.
+ # Forcing the error which causes DB_RUNRECOVERY to be
+ # returned ends up leaving open files that cannot be removed.
+ if { $is_windows_test == 1 } {
+ puts "Skipping remainder of test for Windows"
+ return
+ }
+
+ puts "\tSec002.e: Replace root page in encrypted w/ encrypted"
set fid1 [open $testfile1 r+]
set fid2 [open $testfile2 r+]
seek $fid1 $pagesize start
@@ -112,13 +148,13 @@ proc sec002 { } {
error_check_good db [is_valid_db $db] TRUE
set stat [catch {$db get $key} ret]
error_check_good dbget $stat 1
- error_check_good db:$testfile2:fail \
- [is_substr $ret "checksum error: catastrophic recovery required"] 1
+ error_check_good db:$testfile2:fail1 \
+ [is_substr $ret "checksum error"] 1
set stat [catch {$db close} ret]
error_check_good dbclose $stat 1
- error_check_good db:$testfile2:fail [is_substr $ret "DB_RUNRECOVERY"] 1
+ error_check_good db:$testfile2:fail2 [is_substr $ret "DB_RUNRECOVERY"] 1
- puts "\tSec002.e: Replace root page in encrypted w/ unencrypted"
+ puts "\tSec002.f: Replace root page in encrypted w/ unencrypted"
set fid2 [open $testfile2 r+]
set fid4 [open $testfile4 r+]
seek $fid2 $pagesize start
@@ -133,11 +169,10 @@ proc sec002 { } {
set stat [catch {$db get $key} ret]
error_check_good dbget $stat 1
error_check_good db:$testfile2:fail \
- [is_substr $ret "checksum error: catastrophic recovery required"] 1
+ [is_substr $ret "checksum error"] 1
set stat [catch {$db close} ret]
error_check_good dbclose $stat 1
error_check_good db:$testfile2:fail [is_substr $ret "DB_RUNRECOVERY"] 1
cleanup $testdir NULL 1
- puts "\tSec002 complete."
}
diff --git a/db/test/shelltest.tcl b/db/test/shelltest.tcl
index 7d6e9f0ee..067d40d16 100644
--- a/db/test/shelltest.tcl
+++ b/db/test/shelltest.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: shelltest.tcl,v 1.20 2002/04/19 15:42:20 bostic Exp
+# $Id: shelltest.tcl,v 1.28 2003/09/04 23:41:15 bostic Exp $
#
# TEST scr###
# TEST The scr### directories are shell scripts that test a variety of
@@ -13,9 +13,10 @@
# shelltest.tcl:
# Code to run shell script tests, to incorporate Java, C++,
# example compilation, etc. test scripts into the Tcl framework.
-proc shelltest { { run_one 0 }} {
+proc shelltest {{ run_one 0 } { xml 0 }} {
source ./include.tcl
global shelltest_list
+ global xmlshelltest_list
set SH /bin/sh
if { [file executable $SH] != 1 } {
@@ -24,6 +25,10 @@ proc shelltest { { run_one 0 }} {
return 0
}
+ if { $xml == 1 } {
+ set shelltest_list $xmlshelltest_list
+ }
+
if { $run_one == 0 } {
puts "Running shell script tests..."
@@ -86,3 +91,8 @@ proc scr019 {} { shelltest 19 }
proc scr020 {} { shelltest 20 }
proc scr021 {} { shelltest 21 }
proc scr022 {} { shelltest 22 }
+proc scr023 {} { shelltest 23 }
+proc scr024 {} { shelltest 24 }
+proc scr025 {} { shelltest 25 }
+proc scr026 {} { shelltest 26 }
+proc scr027 {} { shelltest 27 }
diff --git a/db/test/si001.tcl b/db/test/si001.tcl
index f0fcafdcd..25d665003 100644
--- a/db/test/si001.tcl
+++ b/db/test/si001.tcl
@@ -1,13 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: si001.tcl,v 1.1 2001/04/07 03:18:29 krinsky Exp
+# $Id: si001.tcl,v 1.13 2003/09/04 23:41:15 bostic Exp $
#
-# Sindex001: Basic secondary index put/delete test.
-
-proc sindex001 { methods {nentries 200} {tnum 1} args } {
+# TEST si001
+# TEST Basic secondary index put/delete test
+# TEST
+# TEST Put data in primary db and check that pget on secondary
+# TEST index finds the right entries. Alter the primary in the
+# TEST following ways, checking for correct data each time:
+# TEST Overwrite data in primary database.
+# TEST Delete half of entries through primary.
+# TEST Delete half of remaining entries through secondary.
+# TEST Append data (for record-based primaries only).
+proc si001 { methods {nentries 200} {tnum "001"} args } {
source ./include.tcl
global dict nsecondaries
@@ -24,20 +32,20 @@ proc sindex001 { methods {nentries 200} {tnum 1} args } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
lappend methods $pmethod
}
- }
+ }
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "Sindex00$tnum ($pmethod/$methods) $nentries equal key/data pairs"
+ puts "Si$tnum ($pmethod/$methods) $nentries equal key/data pairs"
env_cleanup $testdir
- set pname "primary00$tnum.db"
- set snamebase "secondary00$tnum"
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
# Open an environment
# XXX if one is not supplied!
- set env [berkdb env -create -home $testdir]
+ set env [berkdb_env -create -home $testdir]
error_check_good env_open [is_valid_env $env] TRUE
# Open the primary.
@@ -45,18 +53,20 @@ proc sindex001 { methods {nentries 200} {tnum 1} args } {
error_check_good primary_open [is_valid_db $pdb] TRUE
# Open and associate the secondaries
- set sdbs {}
+ set sdbs {}
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- puts "\tSindex00$tnum.a: Put loop"
+ puts "\tSi$tnum.a: Put loop"
+ # Open dictionary and leave open until done with test .e so append
+ # won't require configuration for duplicates.
set did [open $dict]
for { set n 0 } { [gets $did str] != -1 && $n < $nentries } { incr n } {
if { [is_record_based $pmethod] == 1 } {
@@ -72,44 +82,89 @@ proc sindex001 { methods {nentries 200} {tnum 1} args } {
set ret [eval {$pdb put} {$key [chop_data $pmethod $datum]}]
error_check_good put($n) $ret 0
}
- close $did
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.a"
- puts "\tSindex00$tnum.b: Put/overwrite loop"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
+
+ puts "\tSi$tnum.b: Put/overwrite loop"
for { set n 0 } { $n < $nentries } { incr n } {
set newd $data($n).$keys($n)
set ret [eval {$pdb put} {$keys($n) [chop_data $pmethod $newd]}]
error_check_good put_overwrite($n) $ret 0
set data($n) [pad_data $pmethod $newd]
}
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.b"
# Delete the second half of the entries through the primary.
- # We do the second half so we can just pass keys(0..n/2)
+ # We do the second half so we can just pass keys(0 ... n/2)
# to check_secondaries.
set half [expr $nentries / 2]
- puts "\tSindex00$tnum.c: Primary delete loop: deleting $half entries"
+ puts "\tSi$tnum.c: Primary delete loop: deleting $half entries"
for { set n $half } { $n < $nentries } { incr n } {
set ret [$pdb del $keys($n)]
error_check_good pdel($n) $ret 0
}
- check_secondaries $pdb $sdbs $half keys data "Sindex00$tnum.c"
+ check_secondaries $pdb $sdbs $half keys data "Si$tnum.c"
# Delete half of what's left, through the first secondary.
set quar [expr $half / 2]
- puts "\tSindex00$tnum.d: Secondary delete loop: deleting $quar entries"
+ puts "\tSi$tnum.d: Secondary delete loop: deleting $quar entries"
set sdb [lindex $sdbs 0]
set callback [callback_n 0]
- for { set n $quar } { $n < $half } { incr n } {
+ for { set n $quar } { $n < $half } { incr n } {
set skey [$callback $keys($n) [pad_data $pmethod $data($n)]]
set ret [$sdb del $skey]
error_check_good sdel($n) $ret 0
}
- check_secondaries $pdb $sdbs $quar keys data "Sindex00$tnum.d"
+ check_secondaries $pdb $sdbs $quar keys data "Si$tnum.d"
+ set left $quar
+
+ # For queue and recno only, test append, adding back a quarter of
+ # the original number of entries.
+ if { [is_record_based $pmethod] == 1 } {
+ puts "\tSi$tnum.e: Append loop: append $quar entries"
+ for { set n $quar } { [gets $did str] != -1 && $n < $half } \
+ { incr n } {
+ set key [expr $n + 1]
+ set datum $str
+ set keys($n) $key
+ set data($n) [pad_data $pmethod $datum]
+
+ set ret [eval {$pdb put} \
+ {$key [chop_data $pmethod $datum]}]
+ error_check_good put($n) $ret 0
+ }
+ check_secondaries $pdb $sdbs $half keys data "Si$tnum.e"
+ set left $half
+ }
+ close $did
+
+ puts "\tSi$tnum.f: Truncate primary"
+ error_check_good truncate [$pdb truncate] $left
+
+ puts "\tSi$tnum.g: Closing/disassociating primary first"
+ error_check_good primary_close [$pdb close] 0
foreach sdb $sdbs {
error_check_good secondary_close [$sdb close] 0
}
+ error_check_good env_close [$env close] 0
+
+ # Reopen with _noerr for test of truncate secondary.
+ puts "\tSi$tnum.h: Truncate secondary (should fail)"
+
+ set env [berkdb_env_noerr -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ set pdb [eval {berkdb_open_noerr -create -env} $env \
+ $pomethod $pargs $pname]
+ set sdb [eval {berkdb_open_noerr -create -env} $env \
+ [lindex $omethods 0] [lindex $argses 0] $snamebase.0.db ]
+ $pdb associate [callback_n 0] $sdb
+
+ set ret [catch {$sdb truncate} ret]
+ error_check_good trunc_secondary $ret 1
+
error_check_good primary_close [$pdb close] 0
+ error_check_good secondary_close [$sdb close] 0
error_check_good env_close [$env close] 0
}
diff --git a/db/test/si002.tcl b/db/test/si002.tcl
index 7a1d8b05a..bc08b85cb 100644
--- a/db/test/si002.tcl
+++ b/db/test/si002.tcl
@@ -1,13 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: si002.tcl,v 1.1 2001/04/07 03:18:30 krinsky Exp
+# $Id: si002.tcl,v 1.9 2003/01/08 05:53:25 bostic Exp $
#
-# Sindex002: Basic cursor-based secondary index put/delete test.
-
-proc sindex002 { methods {nentries 200} {tnum 2} args } {
+# TEST si002
+# TEST Basic cursor-based secondary index put/delete test
+# TEST
+# TEST Cursor put data in primary db and check that pget
+# TEST on secondary index finds the right entries.
+# TEST Overwrite while walking primary, check pget again.
+# TEST Overwrite while walking secondary (use c_pget), check
+# TEST pget again.
+# TEST Cursor delete half of entries through primary, check.
+# TEST Cursor delete half of remainder through secondary, check.
+proc si002 { methods {nentries 200} {tnum "002"} args } {
source ./include.tcl
global dict nsecondaries
@@ -24,20 +32,20 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
lappend methods $pmethod
}
- }
+ }
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "Sindex00$tnum ($pmethod/$methods) $nentries equal key/data pairs"
+ puts "Si$tnum ($pmethod/$methods) $nentries equal key/data pairs"
env_cleanup $testdir
- set pname "primary00$tnum.db"
- set snamebase "secondary00$tnum"
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
# Open an environment
# XXX if one is not supplied!
- set env [berkdb env -create -home $testdir]
+ set env [berkdb_env -create -home $testdir]
error_check_good env_open [is_valid_env $env] TRUE
# Open the primary.
@@ -45,18 +53,18 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
error_check_good primary_open [is_valid_db $pdb] TRUE
# Open and associate the secondaries
- set sdbs {}
+ set sdbs {}
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- puts "\tSindex00$tnum.a: Cursor put (-keyfirst/-keylast) loop"
+ puts "\tSi$tnum.a: Cursor put (-keyfirst/-keylast) loop"
set did [open $dict]
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
@@ -71,7 +79,7 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
set ns($key) $n
set keys($n) $key
set data($n) [pad_data $pmethod $datum]
-
+
if { $n % 2 == 0 } {
set pflag " -keyfirst "
} else {
@@ -84,9 +92,9 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
}
close $did
error_check_good pdbc_close [$pdbc close] 0
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.a"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
- puts "\tSindex00$tnum.b: Cursor put overwrite (-current) loop"
+ puts "\tSi$tnum.b: Cursor put overwrite (-current) loop"
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
for { set dbt [$pdbc get -first] } { [llength $dbt] > 0 } \
@@ -99,9 +107,9 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
set data($ns($key)) [pad_data $pmethod $newd]
}
error_check_good pdbc_close [$pdbc close] 0
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.b"
- puts "\tSindex00$tnum.c: Secondary c_pget/primary put overwrite loop"
+ puts "\tSi$tnum.c: Secondary c_pget/primary put overwrite loop"
# We walk the first secondary, then put-overwrite each primary key/data
# pair we find. This doubles as a DBC->c_pget test.
set sdb [lindex $sdbs 0]
@@ -127,13 +135,13 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
set data($ns($pkey)) [pad_data $pmethod $newd]
}
error_check_good sdbc_close [$sdbc close] 0
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.c"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.c"
# Delete the second half of the entries through the primary.
- # We do the second half so we can just pass keys(0..n/2)
+ # We do the second half so we can just pass keys(0 ... n/2)
# to check_secondaries.
set half [expr $nentries / 2]
- puts "\tSindex00$tnum.d:\
+ puts "\tSi$tnum.d:\
Primary cursor delete loop: deleting $half entries"
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
@@ -143,21 +151,21 @@ proc sindex002 { methods {nentries 200} {tnum 2} args } {
set dbt [$pdbc get -next]
}
error_check_good pdbc_close [$pdbc close] 0
- cursor_check_secondaries $pdb $sdbs $half "Sindex00$tnum.d"
-
+ cursor_check_secondaries $pdb $sdbs $half "Si$tnum.d"
+
# Delete half of what's left, through the first secondary.
set quar [expr $half / 2]
- puts "\tSindex00$tnum.e:\
+ puts "\tSi$tnum.e:\
Secondary cursor delete loop: deleting $quar entries"
set sdb [lindex $sdbs 0]
set sdbc [$sdb cursor]
set dbt [$sdbc get -first]
- for { set i 0 } { [llength $dbt] > 0 && $i < $quar } { incr i } {
+ for { set i 0 } { [llength $dbt] > 0 && $i < $quar } { incr i } {
error_check_good sdbc_del [$sdbc del] 0
set dbt [$sdbc get -next]
}
error_check_good sdbc_close [$sdbc close] 0
- cursor_check_secondaries $pdb $sdbs $quar "Sindex00$tnum.e"
+ cursor_check_secondaries $pdb $sdbs $quar "Si$tnum.e"
foreach sdb $sdbs {
error_check_good secondary_close [$sdb close] 0
diff --git a/db/test/si003.tcl b/db/test/si003.tcl
index bf873db64..dbe999fae 100644
--- a/db/test/si003.tcl
+++ b/db/test/si003.tcl
@@ -1,17 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: si003.tcl,v 1.1 2001/04/07 03:18:30 krinsky Exp
+# $Id: si003.tcl,v 1.9 2003/01/08 05:53:26 bostic Exp $
#
-# Sindex003: Basic secondary index put/delete test with secondaries
-# created mid-test.
-
-proc sindex003 { methods {nentries 200} {tnum 3} args } {
+# TEST si003
+# TEST si001 with secondaries created and closed mid-test
+# TEST Basic secondary index put/delete test with secondaries
+# TEST created mid-test.
+proc si003 { methods {nentries 200} {tnum "003"} args } {
source ./include.tcl
global dict nsecondaries
+ # There's no reason to run this test on large lists.
+ if { $nentries > 1000 } {
+ puts "Skipping si003 for large lists (over 1000 items)"
+ return
+ }
+
# Primary method/args.
set pmethod [lindex $methods 0]
set pargs [convert_args $pmethod $args]
@@ -25,27 +32,27 @@ proc sindex003 { methods {nentries 200} {tnum 3} args } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
lappend methods $pmethod
}
- }
+ }
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "Sindex00$tnum ($pmethod/$methods) $nentries equal key/data pairs"
+ puts "Si$tnum ($pmethod/$methods) $nentries equal key/data pairs"
env_cleanup $testdir
- set pname "primary00$tnum.db"
- set snamebase "secondary00$tnum"
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
# Open an environment
# XXX if one is not supplied!
- set env [eval {berkdb env -create -home $testdir}]
+ set env [eval {berkdb_env -create -home $testdir}]
error_check_good env_open [is_valid_env $env] TRUE
# Open the primary.
set pdb [eval {berkdb_open -create -env} $env $pomethod $pargs $pname]
error_check_good primary_open [is_valid_db $pdb] TRUE
- puts -nonewline "\tSindex00$tnum.a: Put loop ... "
+ puts -nonewline "\tSi$tnum.a: Put loop ... "
set did [open $dict]
for { set n 0 } { [gets $did str] != -1 && $n < $nentries } { incr n } {
if { [is_record_based $pmethod] == 1 } {
@@ -64,20 +71,20 @@ proc sindex003 { methods {nentries 200} {tnum 3} args } {
close $did
# Open and associate the secondaries
- set sdbs {}
+ set sdbs {}
puts "opening secondaries."
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate -create [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.a"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
- puts -nonewline "\tSindex00$tnum.b: Put/overwrite loop ... "
+ puts -nonewline "\tSi$tnum.b: Put/overwrite loop ... "
for { set n 0 } { $n < $nentries } { incr n } {
set newd $data($n).$keys($n)
set ret [eval {$pdb put} {$keys($n) [chop_data $pmethod $newd]}]
@@ -88,51 +95,50 @@ proc sindex003 { methods {nentries 200} {tnum 3} args } {
# Close the secondaries again.
puts "closing secondaries."
for { set sdb [lindex $sdbs end] } { [string length $sdb] > 0 } \
- { set sdb [lindex $sdbs end] } {
+ { set sdb [lindex $sdbs end] } {
error_check_good second_close($sdb) [$sdb close] 0
set sdbs [lrange $sdbs 0 end-1]
check_secondaries \
- $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
+ $pdb $sdbs $nentries keys data "Si$tnum.b"
}
-
# Delete the second half of the entries through the primary.
- # We do the second half so we can just pass keys(0..n/2)
+ # We do the second half so we can just pass keys(0 ... n/2)
# to check_secondaries.
set half [expr $nentries / 2]
puts -nonewline \
- "\tSindex00$tnum.c: Primary delete loop: deleting $half entries ..."
+ "\tSi$tnum.c: Primary delete loop: deleting $half entries ..."
for { set n $half } { $n < $nentries } { incr n } {
set ret [$pdb del $keys($n)]
error_check_good pdel($n) $ret 0
}
-
+
# Open and associate the secondaries
- set sdbs {}
+ set sdbs {}
puts "\n\t\topening secondaries."
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] \
$snamebase.r2.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate -create [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- check_secondaries $pdb $sdbs $half keys data "Sindex00$tnum.c"
+ check_secondaries $pdb $sdbs $half keys data "Si$tnum.c"
# Delete half of what's left, through the first secondary.
set quar [expr $half / 2]
- puts "\tSindex00$tnum.d: Secondary delete loop: deleting $quar entries"
+ puts "\tSi$tnum.d: Secondary delete loop: deleting $quar entries"
set sdb [lindex $sdbs 0]
set callback [callback_n 0]
- for { set n $quar } { $n < $half } { incr n } {
+ for { set n $quar } { $n < $half } { incr n } {
set skey [$callback $keys($n) [pad_data $pmethod $data($n)]]
set ret [$sdb del $skey]
error_check_good sdel($n) $ret 0
}
- check_secondaries $pdb $sdbs $quar keys data "Sindex00$tnum.d"
+ check_secondaries $pdb $sdbs $quar keys data "Si$tnum.d"
foreach sdb $sdbs {
error_check_good secondary_close [$sdb close] 0
diff --git a/db/test/si004.tcl b/db/test/si004.tcl
index 5bea69fd1..5f7b4ff9b 100644
--- a/db/test/si004.tcl
+++ b/db/test/si004.tcl
@@ -1,17 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: si004.tcl,v 1.1 2001/04/07 03:18:30 krinsky Exp
+# $Id: si004.tcl,v 1.9 2003/01/08 05:53:27 bostic Exp $
#
-# Sindex004: Basic cursor-based secondary index put/delete test, with
-# secondaries created mid-test.
-
-proc sindex004 { methods {nentries 200} {tnum 4} args } {
+# TEST si004
+# TEST si002 with secondaries created and closed mid-test
+# TEST Basic cursor-based secondary index put/delete test, with
+# TEST secondaries created mid-test.
+proc si004 { methods {nentries 200} {tnum "004"} args } {
source ./include.tcl
global dict nsecondaries
+ # There's no reason to run this test on large lists.
+ if { $nentries > 1000 } {
+ puts "Skipping si004 for large lists (over 1000 items)."
+ return
+ }
+
# Primary method/args.
set pmethod [lindex $methods 0]
set pargs [convert_args $pmethod $args]
@@ -25,20 +32,20 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
for { set i 0 } { $i < $nsecondaries } { incr i } {
lappend methods $pmethod
}
- }
+ }
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "Sindex00$tnum ($pmethod/$methods) $nentries equal key/data pairs"
+ puts "Si$tnum ($pmethod/$methods) $nentries equal key/data pairs"
env_cleanup $testdir
- set pname "primary00$tnum.db"
- set snamebase "secondary00$tnum"
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
# Open an environment
# XXX if one is not supplied!
- set env [berkdb env -create -home $testdir]
+ set env [berkdb_env -create -home $testdir]
error_check_good env_open [is_valid_env $env] TRUE
# Open the primary.
@@ -46,7 +53,7 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
error_check_good primary_open [is_valid_db $pdb] TRUE
puts -nonewline \
- "\tSindex00$tnum.a: Cursor put (-keyfirst/-keylast) loop ... "
+ "\tSi$tnum.a: Cursor put (-keyfirst/-keylast) loop ... "
set did [open $dict]
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
@@ -61,7 +68,7 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
set ns($key) $n
set keys($n) $key
set data($n) [pad_data $pmethod $datum]
-
+
if { $n % 2 == 0 } {
set pflag " -keyfirst "
} else {
@@ -76,20 +83,20 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
error_check_good pdbc_close [$pdbc close] 0
# Open and associate the secondaries
- set sdbs {}
+ set sdbs {}
puts "\n\t\topening secondaries."
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate -create [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.a"
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
- puts "\tSindex00$tnum.b: Cursor put overwrite (-current) loop"
+ puts "\tSi$tnum.b: Cursor put overwrite (-current) loop"
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
for { set dbt [$pdbc get -first] } { [llength $dbt] > 0 } \
@@ -102,9 +109,9 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
set data($ns($key)) [pad_data $pmethod $newd]
}
error_check_good pdbc_close [$pdbc close] 0
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
-
- puts -nonewline "\tSindex00$tnum.c:\
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.b"
+
+ puts -nonewline "\tSi$tnum.c:\
Secondary c_pget/primary put overwrite loop ... "
# We walk the first secondary, then put-overwrite each primary key/data
# pair we find. This doubles as a DBC->c_pget test.
@@ -135,18 +142,18 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
# Close the secondaries again.
puts "\n\t\tclosing secondaries."
for { set sdb [lindex $sdbs end] } { [string length $sdb] > 0 } \
- { set sdb [lindex $sdbs end] } {
+ { set sdb [lindex $sdbs end] } {
error_check_good second_close($sdb) [$sdb close] 0
set sdbs [lrange $sdbs 0 end-1]
check_secondaries \
- $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
+ $pdb $sdbs $nentries keys data "Si$tnum.c"
}
# Delete the second half of the entries through the primary.
- # We do the second half so we can just pass keys(0..n/2)
+ # We do the second half so we can just pass keys(0 ... n/2)
# to check_secondaries.
set half [expr $nentries / 2]
- puts -nonewline "\tSindex00$tnum.d:\
+ puts -nonewline "\tSi$tnum.d:\
Primary cursor delete loop: deleting $half entries ... "
set pdbc [$pdb cursor]
error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
@@ -155,35 +162,35 @@ proc sindex004 { methods {nentries 200} {tnum 4} args } {
error_check_good pdbc_del [$pdbc del] 0
set dbt [$pdbc get -next]
}
- error_check_good pdbc_close [$pdbc close] 0
+ error_check_good pdbc_close [$pdbc close] 0
- set sdbs {}
+ set sdbs {}
puts "\n\t\topening secondaries."
for { set i 0 } { $i < [llength $omethods] } { incr i } {
set sdb [eval {berkdb_open -create -env} $env \
[lindex $omethods $i] [lindex $argses $i] \
$snamebase.r2.$i.db]
error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
+
error_check_good db_associate($i) \
[$pdb associate -create [callback_n $i] $sdb] 0
lappend sdbs $sdb
}
- cursor_check_secondaries $pdb $sdbs $half "Sindex00$tnum.d"
-
+ cursor_check_secondaries $pdb $sdbs $half "Si$tnum.d"
+
# Delete half of what's left, through the first secondary.
set quar [expr $half / 2]
- puts "\tSindex00$tnum.e:\
+ puts "\tSi$tnum.e:\
Secondary cursor delete loop: deleting $quar entries"
set sdb [lindex $sdbs 0]
set sdbc [$sdb cursor]
set dbt [$sdbc get -first]
- for { set i 0 } { [llength $dbt] > 0 && $i < $quar } { incr i } {
+ for { set i 0 } { [llength $dbt] > 0 && $i < $quar } { incr i } {
error_check_good sdbc_del [$sdbc del] 0
set dbt [$sdbc get -next]
}
error_check_good sdbc_close [$sdbc close] 0
- cursor_check_secondaries $pdb $sdbs $quar "Sindex00$tnum.e"
+ cursor_check_secondaries $pdb $sdbs $quar "Si$tnum.e"
foreach sdb $sdbs {
error_check_good secondary_close [$sdb close] 0
diff --git a/db/test/si005.tcl b/db/test/si005.tcl
index 0cde6f539..e824c808d 100644
--- a/db/test/si005.tcl
+++ b/db/test/si005.tcl
@@ -1,179 +1,135 @@
-
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001-2002
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: si005.tcl,v 11.4 2002/04/29 17:12:03 sandstro Exp
+# $Id: si005.tcl,v 11.7 2003/01/08 05:53:28 bostic Exp $
#
-# Sindex005: Secondary index and join test.
-proc sindex005 { methods {nitems 1000} {tnum 5} args } {
+# TEST si005
+# TEST Basic secondary index put/delete test with transactions
+proc si005 { methods {nentries 200} {tnum "005"} args } {
source ./include.tcl
+ global dict nsecondaries
# Primary method/args.
set pmethod [lindex $methods 0]
set pargs [convert_args $pmethod $args]
set pomethod [convert_method $pmethod]
- # Sindex005 does a join within a simulated database schema
- # in which the primary index maps a record ID to a ZIP code and
- # name in the form "XXXXXname", and there are two secondaries:
- # one mapping ZIP to ID, the other mapping name to ID.
- # The primary may be of any database type; the two secondaries
- # must be either btree or hash.
-
# Method/args for all the secondaries. If only one method
- # was specified, assume the same method for the two secondaries.
+ # was specified, assume the same method and a standard N
+ # secondaries.
set methods [lrange $methods 1 end]
if { [llength $methods] == 0 } {
- for { set i 0 } { $i < 2 } { incr i } {
+ for { set i 0 } { $i < $nsecondaries } { incr i } {
lappend methods $pmethod
}
- } elseif { [llength $methods] != 2 } {
- puts "FAIL: Sindex00$tnum requires exactly two secondaries."
+ }
+
+ # Since this is a transaction test, don't allow nentries to be large.
+ if { $nentries > 1000 } {
+ puts "Skipping si005 for large lists (over 1000 items)."
return
}
set argses [convert_argses $methods $args]
set omethods [convert_methods $methods]
- puts "Sindex00$tnum ($pmethod/$methods) Secondary index join test."
+ puts "Si$tnum ($pmethod/$methods) $nentries equal key/data pairs"
+ puts " with transactions"
env_cleanup $testdir
- set pname "sindex00$tnum-primary.db"
- set zipname "sindex00$tnum-zip.db"
- set namename "sindex00$tnum-name.db"
+ set pname "primary$tnum.db"
+ set snamebase "secondary$tnum"
# Open an environment
# XXX if one is not supplied!
- set env [berkdb_env -create -home $testdir]
+ set env [berkdb_env -create -home $testdir -txn]
error_check_good env_open [is_valid_env $env] TRUE
- # Open the databases.
- set pdb [eval {berkdb_open -create -env} $env $pomethod $pargs $pname]
+ # Open the primary.
+ set pdb [eval {berkdb_open -create -auto_commit -env} $env $pomethod \
+ $pargs $pname]
error_check_good primary_open [is_valid_db $pdb] TRUE
- set zipdb [eval {berkdb_open -create -dup -env} $env \
- [lindex $omethods 0] [lindex $argses 0] $zipname]
- error_check_good zip_open [is_valid_db $zipdb] TRUE
- error_check_good zip_associate [$pdb associate s5_getzip $zipdb] 0
-
- set namedb [eval {berkdb_open -create -dup -env} $env \
- [lindex $omethods 1] [lindex $argses 1] $namename]
- error_check_good name_open [is_valid_db $namedb] TRUE
- error_check_good name_associate [$pdb associate s5_getname $namedb] 0
-
- puts "\tSindex00$tnum.a: Populate database with $nitems \"names\""
- s5_populate $pdb $nitems
- puts "\tSindex00$tnum.b: Perform a join on each \"name\" and \"ZIP\""
- s5_jointest $pdb $zipdb $namedb
-
- error_check_good name_close [$namedb close] 0
- error_check_good zip_close [$zipdb close] 0
- error_check_good primary_close [$pdb close] 0
- error_check_good env_close [$env close] 0
-}
+ # Open and associate the secondaries
+ set sdbs {}
+ for { set i 0 } { $i < [llength $omethods] } { incr i } {
+ set sdb [eval {berkdb_open -create -auto_commit -env} $env \
+ [lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
+ error_check_good second_open($i) [is_valid_db $sdb] TRUE
-proc s5_jointest { pdb zipdb namedb } {
- set pdbc [$pdb cursor]
- error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
- for { set dbt [$pdbc get -first] } { [llength $dbt] > 0 } \
- { set dbt [$pdbc get -next] } {
- set item [lindex [lindex $dbt 0] 1]
- set retlist [s5_dojoin $item $pdb $zipdb $namedb]
+ error_check_good db_associate($i) \
+ [$pdb associate -auto_commit [callback_n $i] $sdb] 0
+ lappend sdbs $sdb
}
-}
-
-proc s5_dojoin { item pdb zipdb namedb } {
- set name [s5_getname "" $item]
- set zip [s5_getzip "" $item]
-
- set zipc [$zipdb cursor]
- error_check_good zipc($item) [is_valid_cursor $zipc $zipdb] TRUE
-
- set namec [$namedb cursor]
- error_check_good namec($item) [is_valid_cursor $namec $namedb] TRUE
-
- set pc [$pdb cursor]
- error_check_good pc($item) [is_valid_cursor $pc $pdb] TRUE
-
- set ret [$zipc get -set $zip]
- set zd [lindex [lindex $ret 0] 1]
- error_check_good zipset($zip) [s5_getzip "" $zd] $zip
-
- set ret [$namec get -set $name]
- set nd [lindex [lindex $ret 0] 1]
- error_check_good nameset($name) [s5_getname "" $nd] $name
-
- set joinc [$pdb join $zipc $namec]
-
- set anyreturned 0
- for { set dbt [$joinc get] } { [llength $dbt] > 0 } \
- { set dbt [$joinc get] } {
- set ritem [lindex [lindex $dbt 0] 1]
- error_check_good returned_item($item) $ritem $item
- incr anyreturned
- }
- error_check_bad anyreturned($item) $anyreturned 0
-
- error_check_good joinc_close($item) [$joinc close] 0
- error_check_good pc_close($item) [$pc close] 0
- error_check_good namec_close($item) [$namec close] 0
- error_check_good zipc_close($item) [$zipc close] 0
-}
-
-proc s5_populate { db nitems } {
- global dict
+ puts "\tSi$tnum.a: Put loop"
set did [open $dict]
- for { set i 1 } { $i <= $nitems } { incr i } {
- gets $did word
- if { [string length $word] < 3 } {
- gets $did word
- if { [string length $word] < 3 } {
- puts "FAIL:\
- unexpected pair of words < 3 chars long"
- }
- }
- set datalist [s5_name2zips $word]
- foreach data $datalist {
- error_check_good db_put($data) [$db put $i $data$word] 0
+ for { set n 0 } { [gets $did str] != -1 && $n < $nentries } { incr n } {
+ if { [is_record_based $pmethod] == 1 } {
+ set key [expr $n + 1]
+ set datum $str
+ } else {
+ set key $str
+ gets $did datum
}
+ set keys($n) $key
+ set data($n) [pad_data $pmethod $datum]
+
+ set txn [$env txn]
+ set ret [eval {$pdb put} -txn $txn \
+ {$key [chop_data $pmethod $datum]}]
+ error_check_good put($n) $ret 0
+ error_check_good txn_commit($n) [$txn commit] 0
}
close $did
-}
-
-proc s5_getzip { key data } { return [string range $data 0 4] }
-proc s5_getname { key data } { return [string range $data 5 end] }
-
-# The dirty secret of this test is that the ZIP code is a function of the
-# name, so we can generate a database and then verify join results easily
-# without having to consult actual data.
-#
-# Any word passed into this function will generate from 1 to 26 ZIP
-# entries, out of the set {00000, 01000 ... 99000}. The number of entries
-# is just the position in the alphabet of the word's first letter; the
-# entries are then hashed to the set {00, 01 ... 99} N different ways.
-proc s5_name2zips { name } {
- global alphabet
-
- set n [expr [string first [string index $name 0] $alphabet] + 1]
- error_check_bad starts_with_abc($name) $n -1
-
- set ret {}
- for { set i 0 } { $i < $n } { incr i } {
- set b 0
- for { set j 1 } { $j < [string length $name] } \
- { incr j } {
- set b [s5_nhash $name $i $j $b]
- }
- lappend ret [format %05u [expr $b % 100]000]
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.a"
+
+ puts "\tSi$tnum.b: Put/overwrite loop"
+ for { set n 0 } { $n < $nentries } { incr n } {
+ set newd $data($n).$keys($n)
+
+ set txn [$env txn]
+ set ret [eval {$pdb put} -txn $txn \
+ {$keys($n) [chop_data $pmethod $newd]}]
+ error_check_good put_overwrite($n) $ret 0
+ set data($n) [pad_data $pmethod $newd]
+ error_check_good txn_commit($n) [$txn commit] 0
}
- return $ret
-}
-proc s5_nhash { name i j b } {
- global alphabet
+ check_secondaries $pdb $sdbs $nentries keys data "Si$tnum.b"
+
+ # Delete the second half of the entries through the primary.
+ # We do the second half so we can just pass keys(0 ... n/2)
+ # to check_secondaries.
+ set half [expr $nentries / 2]
+ puts "\tSi$tnum.c: Primary delete loop: deleting $half entries"
+ for { set n $half } { $n < $nentries } { incr n } {
+ set txn [$env txn]
+ set ret [$pdb del -txn $txn $keys($n)]
+ error_check_good pdel($n) $ret 0
+ error_check_good txn_commit($n) [$txn commit] 0
+ }
+ check_secondaries $pdb $sdbs $half keys data "Si$tnum.c"
+
+ # Delete half of what's left, through the first secondary.
+ set quar [expr $half / 2]
+ puts "\tSi$tnum.d: Secondary delete loop: deleting $quar entries"
+ set sdb [lindex $sdbs 0]
+ set callback [callback_n 0]
+ for { set n $quar } { $n < $half } { incr n } {
+ set skey [$callback $keys($n) [pad_data $pmethod $data($n)]]
+ set txn [$env txn]
+ set ret [$sdb del -txn $txn $skey]
+ error_check_good sdel($n) $ret 0
+ error_check_good txn_commit($n) [$txn commit] 0
+ }
+ check_secondaries $pdb $sdbs $quar keys data "Si$tnum.d"
- set c [string first [string index $name $j] $alphabet']
- return [expr (($b * 991) + ($i * 997) + $c) % 10000000]
+ puts "\tSi$tnum.e: Closing/disassociating primary first"
+ error_check_good primary_close [$pdb close] 0
+ foreach sdb $sdbs {
+ error_check_good secondary_close [$sdb close] 0
+ }
+ error_check_good env_close [$env close] 0
}
diff --git a/db/test/si006.tcl b/db/test/si006.tcl
deleted file mode 100644
index 276d31f24..000000000
--- a/db/test/si006.tcl
+++ /dev/null
@@ -1,129 +0,0 @@
-# See the file LICENSE for redistribution information.
-#
-# Copyright (c) 2001-2002
-# Sleepycat Software. All rights reserved.
-#
-# Id: si006.tcl,v 1.2 2002/05/15 17:18:03 sandstro Exp
-#
-# TEST sindex006
-# TEST Basic secondary index put/delete test with transactions
-proc sindex006 { methods {nentries 200} {tnum 6} args } {
- source ./include.tcl
- global dict nsecondaries
-
- # Primary method/args.
- set pmethod [lindex $methods 0]
- set pargs [convert_args $pmethod $args]
- set pomethod [convert_method $pmethod]
-
- # Method/args for all the secondaries. If only one method
- # was specified, assume the same method and a standard N
- # secondaries.
- set methods [lrange $methods 1 end]
- if { [llength $methods] == 0 } {
- for { set i 0 } { $i < $nsecondaries } { incr i } {
- lappend methods $pmethod
- }
- }
-
- set argses [convert_argses $methods $args]
- set omethods [convert_methods $methods]
-
- puts "Sindex00$tnum ($pmethod/$methods) $nentries equal key/data pairs"
- puts " with transactions"
- env_cleanup $testdir
-
- set pname "primary00$tnum.db"
- set snamebase "secondary00$tnum"
-
- # Open an environment
- # XXX if one is not supplied!
- set env [berkdb_env -create -home $testdir -txn]
- error_check_good env_open [is_valid_env $env] TRUE
-
- # Open the primary.
- set pdb [eval {berkdb_open -create -auto_commit -env} $env $pomethod \
- $pargs $pname]
- error_check_good primary_open [is_valid_db $pdb] TRUE
-
- # Open and associate the secondaries
- set sdbs {}
- for { set i 0 } { $i < [llength $omethods] } { incr i } {
- set sdb [eval {berkdb_open -create -auto_commit -env} $env \
- [lindex $omethods $i] [lindex $argses $i] $snamebase.$i.db]
- error_check_good second_open($i) [is_valid_db $sdb] TRUE
-
- error_check_good db_associate($i) \
- [$pdb associate -auto_commit [callback_n $i] $sdb] 0
- lappend sdbs $sdb
- }
-
- puts "\tSindex00$tnum.a: Put loop"
- set did [open $dict]
- for { set n 0 } { [gets $did str] != -1 && $n < $nentries } { incr n } {
- if { [is_record_based $pmethod] == 1 } {
- set key [expr $n + 1]
- set datum $str
- } else {
- set key $str
- gets $did datum
- }
- set keys($n) $key
- set data($n) [pad_data $pmethod $datum]
-
- set txn [$env txn]
- set ret [eval {$pdb put} -txn $txn \
- {$key [chop_data $pmethod $datum]}]
- error_check_good put($n) $ret 0
- error_check_good txn_commit($n) [$txn commit] 0
- }
- close $did
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.a"
-
- puts "\tSindex00$tnum.b: Put/overwrite loop"
- for { set n 0 } { $n < $nentries } { incr n } {
- set newd $data($n).$keys($n)
-
- set txn [$env txn]
- set ret [eval {$pdb put} -txn $txn \
- {$keys($n) [chop_data $pmethod $newd]}]
- error_check_good put_overwrite($n) $ret 0
- set data($n) [pad_data $pmethod $newd]
- error_check_good txn_commit($n) [$txn commit] 0
- }
- check_secondaries $pdb $sdbs $nentries keys data "Sindex00$tnum.b"
-
- # Delete the second half of the entries through the primary.
- # We do the second half so we can just pass keys(0 ... n/2)
- # to check_secondaries.
- set half [expr $nentries / 2]
- puts "\tSindex00$tnum.c: Primary delete loop: deleting $half entries"
- for { set n $half } { $n < $nentries } { incr n } {
- set txn [$env txn]
- set ret [$pdb del -txn $txn $keys($n)]
- error_check_good pdel($n) $ret 0
- error_check_good txn_commit($n) [$txn commit] 0
- }
- check_secondaries $pdb $sdbs $half keys data "Sindex00$tnum.c"
-
- # Delete half of what's left, through the first secondary.
- set quar [expr $half / 2]
- puts "\tSindex00$tnum.d: Secondary delete loop: deleting $quar entries"
- set sdb [lindex $sdbs 0]
- set callback [callback_n 0]
- for { set n $quar } { $n < $half } { incr n } {
- set skey [$callback $keys($n) [pad_data $pmethod $data($n)]]
- set txn [$env txn]
- set ret [$sdb del -txn $txn $skey]
- error_check_good sdel($n) $ret 0
- error_check_good txn_commit($n) [$txn commit] 0
- }
- check_secondaries $pdb $sdbs $quar keys data "Sindex00$tnum.d"
-
- puts "\tSindex00$tnum.e: Closing/disassociating primary first"
- error_check_good primary_close [$pdb close] 0
- foreach sdb $sdbs {
- error_check_good secondary_close [$sdb close] 0
- }
- error_check_good env_close [$env close] 0
-}
diff --git a/db/test/sijointest.tcl b/db/test/sijointest.tcl
new file mode 100644
index 000000000..94925f1a0
--- /dev/null
+++ b/db/test/sijointest.tcl
@@ -0,0 +1,179 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: sijointest.tcl,v 11.3 2003/01/08 05:53:29 bostic Exp $
+#
+# TEST sijointest: Secondary index and join test.
+# TEST This used to be si005.tcl.
+proc sijointest { methods {nitems 1000} args } {
+ source ./include.tcl
+
+ # Primary method/args.
+ set pmethod [lindex $methods 0]
+ set pargs [convert_args $pmethod $args]
+ set pomethod [convert_method $pmethod]
+
+ # Si005 does a join within a simulated database schema
+ # in which the primary index maps a record ID to a ZIP code and
+ # name in the form "XXXXXname", and there are two secondaries:
+ # one mapping ZIP to ID, the other mapping name to ID.
+ # The primary may be of any database type; the two secondaries
+ # must be either btree or hash.
+
+ # Method/args for all the secondaries. If only one method
+ # was specified, assume the same method for the two secondaries.
+ set methods [lrange $methods 1 end]
+ if { [llength $methods] == 0 } {
+ for { set i 0 } { $i < 2 } { incr i } {
+ lappend methods $pmethod
+ }
+ } elseif { [llength $methods] != 2 } {
+ puts "FAIL: Sijoin requires exactly two secondaries."
+ return
+ }
+
+ set argses [convert_argses $methods $args]
+ set omethods [convert_methods $methods]
+
+ puts "Sijoin ($pmethod/$methods) Secondary index join test."
+ env_cleanup $testdir
+
+ set pname "sijoin-primary.db"
+ set zipname "sijoin-zip.db"
+ set namename "sijoin-name.db"
+
+ # Open an environment
+ # XXX if one is not supplied!
+ set env [berkdb_env -create -home $testdir]
+ error_check_good env_open [is_valid_env $env] TRUE
+
+ # Open the databases.
+ set pdb [eval {berkdb_open -create -env} $env $pomethod $pargs $pname]
+ error_check_good primary_open [is_valid_db $pdb] TRUE
+
+ set zipdb [eval {berkdb_open -create -dup -env} $env \
+ [lindex $omethods 0] [lindex $argses 0] $zipname]
+ error_check_good zip_open [is_valid_db $zipdb] TRUE
+ error_check_good zip_associate [$pdb associate sj_getzip $zipdb] 0
+
+ set namedb [eval {berkdb_open -create -dup -env} $env \
+ [lindex $omethods 1] [lindex $argses 1] $namename]
+ error_check_good name_open [is_valid_db $namedb] TRUE
+ error_check_good name_associate [$pdb associate sj_getname $namedb] 0
+
+ puts "\tSijoin.a: Populate database with $nitems \"names\""
+ sj_populate $pdb $nitems
+ puts "\tSijoin.b: Perform a join on each \"name\" and \"ZIP\""
+ sj_jointest $pdb $zipdb $namedb
+
+ error_check_good name_close [$namedb close] 0
+ error_check_good zip_close [$zipdb close] 0
+ error_check_good primary_close [$pdb close] 0
+ error_check_good env_close [$env close] 0
+}
+
+proc sj_jointest { pdb zipdb namedb } {
+ set pdbc [$pdb cursor]
+ error_check_good pdb_cursor [is_valid_cursor $pdbc $pdb] TRUE
+ for { set dbt [$pdbc get -first] } { [llength $dbt] > 0 } \
+ { set dbt [$pdbc get -next] } {
+ set item [lindex [lindex $dbt 0] 1]
+ set retlist [sj_dojoin $item $pdb $zipdb $namedb]
+ }
+}
+
+proc sj_dojoin { item pdb zipdb namedb } {
+ set name [sj_getname "" $item]
+ set zip [sj_getzip "" $item]
+
+ set zipc [$zipdb cursor]
+ error_check_good zipc($item) [is_valid_cursor $zipc $zipdb] TRUE
+
+ set namec [$namedb cursor]
+ error_check_good namec($item) [is_valid_cursor $namec $namedb] TRUE
+
+ set pc [$pdb cursor]
+ error_check_good pc($item) [is_valid_cursor $pc $pdb] TRUE
+
+ set ret [$zipc get -set $zip]
+ set zd [lindex [lindex $ret 0] 1]
+ error_check_good zipset($zip) [sj_getzip "" $zd] $zip
+
+ set ret [$namec get -set $name]
+ set nd [lindex [lindex $ret 0] 1]
+ error_check_good nameset($name) [sj_getname "" $nd] $name
+
+ set joinc [$pdb join $zipc $namec]
+
+ set anyreturned 0
+ for { set dbt [$joinc get] } { [llength $dbt] > 0 } \
+ { set dbt [$joinc get] } {
+ set ritem [lindex [lindex $dbt 0] 1]
+ error_check_good returned_item($item) $ritem $item
+ incr anyreturned
+ }
+ error_check_bad anyreturned($item) $anyreturned 0
+
+ error_check_good joinc_close($item) [$joinc close] 0
+ error_check_good pc_close($item) [$pc close] 0
+ error_check_good namec_close($item) [$namec close] 0
+ error_check_good zipc_close($item) [$zipc close] 0
+}
+
+proc sj_populate { db nitems } {
+ global dict
+
+ set did [open $dict]
+ for { set i 1 } { $i <= $nitems } { incr i } {
+ gets $did word
+ if { [string length $word] < 3 } {
+ gets $did word
+ if { [string length $word] < 3 } {
+ puts "FAIL:\
+ unexpected pair of words < 3 chars long"
+ }
+ }
+ set datalist [sj_name2zips $word]
+ foreach data $datalist {
+ error_check_good db_put($data) [$db put $i $data$word] 0
+ }
+ }
+ close $did
+}
+
+proc sj_getzip { key data } { return [string range $data 0 4] }
+proc sj_getname { key data } { return [string range $data 5 end] }
+
+# The dirty secret of this test is that the ZIP code is a function of the
+# name, so we can generate a database and then verify join results easily
+# without having to consult actual data.
+#
+# Any word passed into this function will generate from 1 to 26 ZIP
+# entries, out of the set {00000, 01000 ... 99000}. The number of entries
+# is just the position in the alphabet of the word's first letter; the
+# entries are then hashed to the set {00, 01 ... 99} N different ways.
+proc sj_name2zips { name } {
+ global alphabet
+
+ set n [expr [string first [string index $name 0] $alphabet] + 1]
+ error_check_bad starts_with_abc($name) $n -1
+
+ set ret {}
+ for { set i 0 } { $i < $n } { incr i } {
+ set b 0
+ for { set j 1 } { $j < [string length $name] } \
+ { incr j } {
+ set b [sj_nhash $name $i $j $b]
+ }
+ lappend ret [format %05u [expr $b % 100]000]
+ }
+ return $ret
+}
+proc sj_nhash { name i j b } {
+ global alphabet
+
+ set c [string first [string index $name $j] $alphabet']
+ return [expr (($b * 991) + ($i * 997) + $c) % 10000000]
+}
diff --git a/db/test/sindex.tcl b/db/test/sindex.tcl
index bb0effd4c..b66d40fb4 100644
--- a/db/test/sindex.tcl
+++ b/db/test/sindex.tcl
@@ -1,18 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2001
+# Copyright (c) 2001-2003
# Sleepycat Software. All rights reserved.
#
-# Id: sindex.tcl,v 1.1 2001/04/07 03:18:30 krinsky Exp
+# $Id: sindex.tcl,v 1.9 2003/01/08 05:53:30 bostic Exp $
#
# Secondary index test driver and maintenance routines.
-#
-# Breaking from the usual convention, we put the driver function
+#
+# Breaking from the usual convention, we put the driver function
# for the secondary index tests here, in its own file. The reason
-# for this is that it's something which compartmentalizes nicely,
+# for this is that it's something which compartmentalizes nicely,
# has little in common with other driver functions, and
-# is likely to be run on its own from time to time.
-#
+# is likely to be run on its own from time to time.
+#
# The secondary index tests themselves live in si0*.tcl.
# Standard number of secondary indices to create if a single-element
@@ -21,7 +21,7 @@ global nsecondaries
set nsecondaries 2
# Run the secondary index tests.
-proc sindex { {verbose 1} args } {
+proc sindex { {verbose 0} args } {
global verbose_check_secondaries
set verbose_check_secondaries $verbose
@@ -31,8 +31,7 @@ proc sindex { {verbose 1} args } {
# 10K-word list for each key/data pair.)
foreach n { 200 5000 } {
foreach pm { btree hash recno frecno queue queueext } {
- # XXX: ddhash currently does not work due to #3726
- foreach sm { dbtree dhash ddbtree btree hash } {
+ foreach sm { dbtree dhash ddbtree ddhash btree hash } {
sindex001 [list $pm $sm $sm] $n
sindex002 [list $pm $sm $sm] $n
# Skip tests 3 & 4 for large lists;
@@ -41,19 +40,33 @@ proc sindex { {verbose 1} args } {
sindex003 [list $pm $sm $sm] $n
sindex004 [list $pm $sm $sm] $n
}
+
+ sindex006 [list $pm $sm $sm] $n
}
}
}
+ # Run secondary index join test. (There's no point in running
+ # this with both lengths, the primary is unhappy for now with fixed-
+ # length records (XXX), and we need unsorted dups in the secondaries.)
+ foreach pm { btree hash recno } {
+ foreach sm { btree hash } {
+ sindex005 [list $pm $sm $sm] 1000
+ }
+ sindex005 [list $pm btree hash] 1000
+ sindex005 [list $pm hash btree] 1000
+ }
+
+
# Run test with 50 secondaries.
foreach pm { btree hash } {
set methlist [list $pm]
for { set i 0 } { $i < 50 } { incr i } {
- # XXX this should incorporate hash after #3726
- if { $i % 2 == 0 } {
+ # XXX this should incorporate hash after #3726
+ if { $i % 2 == 0 } {
lappend methlist "dbtree"
- } else {
- lappend methlist "ddbtree"
+ } else {
+ lappend methlist "ddbtree"
}
}
sindex001 $methlist 500
@@ -63,8 +76,7 @@ proc sindex { {verbose 1} args } {
}
}
-
-# The callback function we use for each given secondary in most tests
+# The callback function we use for each given secondary in most tests
# is a simple function of its place in the list of secondaries (0-based)
# and the access method (since recnos may need different callbacks).
#
@@ -158,7 +170,7 @@ proc check_secondaries { pdb sdbs nentries keyarr dataarr {pref "Check"} } {
# Given a primary database handle and a list of secondary handles, walk
# through the primary and make sure all the secondaries are correct,
# then walk through the secondaries and make sure the primary is correct.
-#
+#
# This is slightly less rigorous than the normal check_secondaries--we
# use it whenever we don't have up-to-date "keys" and "data" arrays.
proc cursor_check_secondaries { pdb sdbs nentries { pref "Check" } } {
@@ -211,7 +223,7 @@ proc cursor_check_secondaries { pdb sdbs nentries { pref "Check" } } {
}
error_check_good secondary($j)_has_nentries $i $nentries
- # To exercise pget -last/pget -prev, we do it backwards too.
+ # To exercise pget -last/pget -prev, we do it backwards too.
set i 0
for { set dbt [$sdbc pget -last] } { [llength $dbt] > 0 } \
{ set dbt [$sdbc pget -prev] } {
@@ -230,7 +242,7 @@ proc cursor_check_secondaries { pdb sdbs nentries { pref "Check" } } {
# The secondary index tests take a list of the access methods that
# each array ought to use. Convert at one blow into a list of converted
-# argses and omethods for each method in the list.
+# argses and omethods for each method in the list.
proc convert_argses { methods largs } {
set ret {}
foreach m $methods {
diff --git a/db/test/siutils.tcl b/db/test/siutils.tcl
new file mode 100644
index 000000000..cf4b7e476
--- /dev/null
+++ b/db/test/siutils.tcl
@@ -0,0 +1,216 @@
+#See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2001-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: siutils.tcl,v 11.4 2003/09/04 23:41:15 bostic Exp $
+#
+# Secondary index utilities. This file used to be known as
+# sindex.tcl.
+#
+# The secondary index tests themselves live in si0*.tcl.
+#
+# Standard number of secondary indices to create if a single-element
+# list of methods is passed into the secondary index tests.
+global nsecondaries
+set nsecondaries 2
+
+# The callback function we use for each given secondary in most tests
+# is a simple function of its place in the list of secondaries (0-based)
+# and the access method (since recnos may need different callbacks).
+#
+# !!!
+# Note that callbacks 0-3 return unique secondary keys if the input data
+# are unique; callbacks 4 and higher may not, so don't use them with
+# the normal wordlist and secondaries that don't support dups.
+# The callbacks that incorporate a key don't work properly with recno
+# access methods, at least not in the current test framework (the
+# error_check_good lines test for e.g. 1foo, when the database has
+# e.g. 0x010x000x000x00foo).
+proc callback_n { n } {
+ switch $n {
+ 0 { return _s_reversedata }
+ 1 { return _s_noop }
+ 2 { return _s_concatkeydata }
+ 3 { return _s_concatdatakey }
+ 4 { return _s_reverseconcat }
+ 5 { return _s_truncdata }
+ 6 { return _s_alwayscocacola }
+ }
+ return _s_noop
+}
+
+proc _s_reversedata { a b } { return [reverse $b] }
+proc _s_truncdata { a b } { return [string range $b 1 end] }
+proc _s_concatkeydata { a b } { return $a$b }
+proc _s_concatdatakey { a b } { return $b$a }
+proc _s_reverseconcat { a b } { return [reverse $a$b] }
+proc _s_alwayscocacola { a b } { return "Coca-Cola" }
+proc _s_noop { a b } { return $b }
+
+# Should the check_secondary routines print lots of output?
+set verbose_check_secondaries 0
+
+# Given a primary database handle, a list of secondary handles, a
+# number of entries, and arrays of keys and data, verify that all
+# databases have what they ought to.
+proc check_secondaries { pdb sdbs nentries keyarr dataarr {pref "Check"} } {
+ upvar $keyarr keys
+ upvar $dataarr data
+ global verbose_check_secondaries
+
+ # Make sure each key/data pair is in the primary.
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.1: Each key/data pair is in the primary"
+ }
+ for { set i 0 } { $i < $nentries } { incr i } {
+ error_check_good pdb_get($i) [$pdb get $keys($i)] \
+ [list [list $keys($i) $data($i)]]
+ }
+
+ for { set j 0 } { $j < [llength $sdbs] } { incr j } {
+ # Make sure each key/data pair is in this secondary.
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.2:\
+ Each skey/key/data tuple is in secondary #$j"
+ }
+ set sdb [lindex $sdbs $j]
+ for { set i 0 } { $i < $nentries } { incr i } {
+ set skey [[callback_n $j] $keys($i) $data($i)]
+ # Check with pget on the secondary.
+ error_check_good sdb($j)_pget($i) \
+ [$sdb pget -get_both $skey $keys($i)] \
+ [list [list $skey $keys($i) $data($i)]]
+ # Check again with get on the secondary.
+ # Since get_both is not an allowed option
+ # with get on a secondary handle, we can't
+ # get an exact match on callback method 6,
+ # and can't guarantee an exact match on
+ # method 5. We just make sure that one of
+ # the returned key/data pairs is the right one.
+ if { $j == 5 || $j == 6 } {
+ error_check_good sdb($j)_get($i) \
+ [is_substr [$sdb get $skey] \
+ [list [list $skey $data($i)]]] 1
+ } else {
+ error_check_good sdb($j)_get($i) \
+ [$sdb get $skey] \
+ [list [list $skey $data($i)]]
+ }
+ }
+
+ # Make sure this secondary contains only $nentries
+ # items.
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.3: Secondary #$j has $nentries items"
+ }
+ set dbc [$sdb cursor]
+ error_check_good dbc($i) \
+ [is_valid_cursor $dbc $sdb] TRUE
+ for { set k 0 } { [llength [$dbc get -next]] > 0 } \
+ { incr k } { }
+ error_check_good numitems($i) $k $nentries
+ error_check_good dbc($i)_close [$dbc close] 0
+ }
+
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.4: Primary has $nentries items"
+ }
+ set dbc [$pdb cursor]
+ error_check_good pdbc [is_valid_cursor $dbc $pdb] TRUE
+ for { set k 0 } { [llength [$dbc get -next]] > 0 } { incr k } { }
+ error_check_good numitems $k $nentries
+ error_check_good pdbc_close [$dbc close] 0
+}
+
+# Given a primary database handle and a list of secondary handles, walk
+# through the primary and make sure all the secondaries are correct,
+# then walk through the secondaries and make sure the primary is correct.
+#
+# This is slightly less rigorous than the normal check_secondaries--we
+# use it whenever we don't have up-to-date "keys" and "data" arrays.
+proc cursor_check_secondaries { pdb sdbs nentries { pref "Check" } } {
+ global verbose_check_secondaries
+
+ # Make sure each key/data pair in the primary is in each secondary.
+ set pdbc [$pdb cursor]
+ error_check_good ccs_pdbc [is_valid_cursor $pdbc $pdb] TRUE
+ set i 0
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.1:\
+ Key/data in primary => key/data in secondaries"
+ }
+
+ for { set dbt [$pdbc get -first] } { [llength $dbt] > 0 } \
+ { set dbt [$pdbc get -next] } {
+ incr i
+ set pkey [lindex [lindex $dbt 0] 0]
+ set pdata [lindex [lindex $dbt 0] 1]
+ for { set j 0 } { $j < [llength $sdbs] } { incr j } {
+ set sdb [lindex $sdbs $j]
+ # Check with pget.
+ set sdbt [$sdb pget -get_both \
+ [[callback_n $j] $pkey $pdata] $pkey]
+ error_check_good pkey($pkey,$j) \
+ [lindex [lindex $sdbt 0] 1] $pkey
+ error_check_good pdata($pdata,$j) \
+ [lindex [lindex $sdbt 0] 2] $pdata
+ }
+ }
+ error_check_good ccs_pdbc_close [$pdbc close] 0
+ error_check_good primary_has_nentries $i $nentries
+
+ for { set j 0 } { $j < [llength $sdbs] } { incr j } {
+ if { $verbose_check_secondaries } {
+ puts "\t\t$pref.2:\
+ Key/data in secondary #$j => key/data in primary"
+ }
+ set sdb [lindex $sdbs $j]
+ set sdbc [$sdb cursor]
+ error_check_good ccs_sdbc($j) [is_valid_cursor $sdbc $sdb] TRUE
+ set i 0
+ for { set dbt [$sdbc pget -first] } { [llength $dbt] > 0 } \
+ { set dbt [$sdbc pget -next] } {
+ incr i
+ set pkey [lindex [lindex $dbt 0] 1]
+ set pdata [lindex [lindex $dbt 0] 2]
+ error_check_good pdb_get($pkey/$pdata,$j) \
+ [$pdb get -get_both $pkey $pdata] \
+ [list [list $pkey $pdata]]
+ }
+ error_check_good secondary($j)_has_nentries $i $nentries
+
+ # To exercise pget -last/pget -prev, we do it backwards too.
+ set i 0
+ for { set dbt [$sdbc pget -last] } { [llength $dbt] > 0 } \
+ { set dbt [$sdbc pget -prev] } {
+ incr i
+ set pkey [lindex [lindex $dbt 0] 1]
+ set pdata [lindex [lindex $dbt 0] 2]
+ error_check_good pdb_get_bkwds($pkey/$pdata,$j) \
+ [$pdb get -get_both $pkey $pdata] \
+ [list [list $pkey $pdata]]
+ }
+ error_check_good secondary($j)_has_nentries_bkwds $i $nentries
+
+ error_check_good ccs_sdbc_close($j) [$sdbc close] 0
+ }
+}
+
+# The secondary index tests take a list of the access methods that
+# each array ought to use. Convert at one blow into a list of converted
+# argses and omethods for each method in the list.
+proc convert_argses { methods largs } {
+ set ret {}
+ foreach m $methods {
+ lappend ret [convert_args $m $largs]
+ }
+ return $ret
+}
+proc convert_methods { methods } {
+ set ret {}
+ foreach m $methods {
+ lappend ret [convert_method $m]
+ }
+ return $ret
+}
diff --git a/db/test/sysscript.tcl b/db/test/sysscript.tcl
index 1b7545e4c..5f506da0e 100644
--- a/db/test/sysscript.tcl
+++ b/db/test/sysscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: sysscript.tcl,v 11.12 2000/05/22 12:51:38 bostic Exp $
+# $Id: sysscript.tcl,v 11.18 2003/01/08 05:53:32 bostic Exp $
#
# System integration test script.
# This script runs a single process that tests the full functionality of
@@ -31,7 +31,6 @@ source ./include.tcl
source $test_path/test.tcl
source $test_path/testutils.tcl
-set alphabet "abcdefghijklmnopqrstuvwxyz"
set mypid [pid]
set usage "sysscript dir nfiles key_avg data_avg method"
@@ -64,7 +63,7 @@ puts "$data_avg average data length"
flush stdout
# Create local environment
-set dbenv [berkdb env -txn -home $dir]
+set dbenv [berkdb_env -txn -home $dir]
set err [catch {error_check_good $mypid:dbenv [is_substr $dbenv env] 1} ret]
if {$err != 0} {
puts $ret
@@ -74,7 +73,7 @@ if {$err != 0} {
# Now open the files
for { set i 0 } { $i < $nfiles } { incr i } {
set file test044.$i.db
- set db($i) [berkdb open -env $dbenv $method $file]
+ set db($i) [berkdb open -auto_commit -env $dbenv $method $file]
set err [catch {error_check_bad $mypid:dbopen $db($i) NULL} ret]
if {$err != 0} {
puts $ret
diff --git a/db/test/t106script.tcl b/db/test/t106script.tcl
new file mode 100644
index 000000000..026f43f36
--- /dev/null
+++ b/db/test/t106script.tcl
@@ -0,0 +1,332 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1999-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: t106script.tcl,v 1.3 2003/09/04 23:41:15 bostic Exp $
+#
+
+proc t106_initial { nitems nprod id tnum dbenv order args } {
+ source ./include.tcl
+
+ set pid [pid]
+ puts "\tTest$tnum: Producer $pid initializing DBs"
+
+ # Each producer initially loads a small number of items to
+ # each btree database, then enters a RMW loop where it randomly
+ # selects and executes a cursor operations which either:
+ # 1. Read-modify-write an item in db2; or
+ # 2. Read-modify-write an item in both db2 and db3, randomly
+ # selecting between db2 and db3 on which to open first, which to
+ # read first, which to write first, which to close first. This
+ # may create deadlocks so keep trying until it's successful.
+
+ # Open queue database
+ set dbq [eval {berkdb_open -create -queue -env $dbenv\
+ -auto_commit -len 32 queue.db} ]
+ error_check_good dbq_open [is_valid_db $dbq] TRUE
+
+ # Open four btree databases
+ set db1 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile1.db]
+ error_check_good db1_open [is_valid_db $db1] TRUE
+ set db2 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile2.db]
+ error_check_good db2_open [is_valid_db $db2] TRUE
+ set db3 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile3.db]
+ error_check_good db3_open [is_valid_db $db3] TRUE
+ set db4 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile4.db]
+ error_check_good db4_open [is_valid_db $db4] TRUE
+
+ # Initialize databases with $nitems items from each producer.
+ set did [open $dict]
+ for { set i 1 } { $i <= $nitems } { incr i } {
+ set db2data [read $did [berkdb random_int 300 700]]
+ set db3data [read $did [berkdb random_int 500 1000]]
+ set qdata [read $did 32]
+ set suffix _0_$i
+ set db23key "testclient$id$suffix"
+ set suffix _$i
+ set db4key key$id$suffix
+
+ set t [$dbenv txn]
+ set txn "-txn $t"
+ error_check_good db2_put [eval {$db2 put} $txn\
+ {$db23key $db2data}] 0
+ error_check_good db3_put [eval {$db3 put} $txn\
+ {$db23key $db3data}] 0
+ error_check_good db4_put [eval {$db4 put} $txn\
+ {$db4key $db23key}] 0
+
+ set c [$dbenv txn -parent $t]
+ set ctxn "-txn $c"
+ set qrecno [eval {$dbq put -append} $ctxn {$qdata}]
+ error_check_good db1_put [eval {$db1 put} $ctxn\
+ {$qrecno $db2data}] 0
+ error_check_good commit_child [$c commit] 0
+ error_check_good commit_parent [$t commit] 0
+ }
+ close $did
+
+ set ret [catch {$dbq close} res]
+ error_check_good dbq_close:$pid $ret 0
+ set ret [catch {$db1 close} res]
+ error_check_good db1_close:$pid $ret 0
+ set ret [catch {$db2 close} res]
+ error_check_good db2_close:$pid $ret 0
+ set ret [catch {$db3 close} res]
+ error_check_good db3_close:$pid $ret 0
+ set ret [catch {$db4 close} res]
+ error_check_good db4_close:$pid $ret 0
+
+ puts "\t\tTest$tnum: Initializer $pid finished."
+}
+
+proc t106_produce { nitems nprod id tnum dbenv order niter args } {
+ source ./include.tcl
+
+ set pid [pid]
+ set did [open $dict]
+ puts "\tTest$tnum: Producer $pid initializing DBs"
+
+ # Open queue database
+ set dbq [eval {berkdb_open -create -queue -env $dbenv\
+ -auto_commit -len 32 queue.db} ]
+ error_check_good dbq_open [is_valid_db $dbq] TRUE
+
+ # Open four btree databases
+ set db1 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile1.db]
+ error_check_good db1_open [is_valid_db $db1] TRUE
+ set db2 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile2.db]
+ error_check_good db2_open [is_valid_db $db2] TRUE
+ set db3 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile3.db]
+ error_check_good db3_open [is_valid_db $db3] TRUE
+ set db4 [berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile4.db]
+ error_check_good db4_open [is_valid_db $db4] TRUE
+
+ # Now go into RMW phase.
+ for { set i 1 } { $i <= $niter } { incr i } {
+
+ set op [berkdb random_int 1 2]
+ set newdb2data [read $did [berkdb random_int 300 700]]
+ set qdata [read $did 32]
+
+ if { $order == "ordered" } {
+ set n [expr $i % $nitems]
+ if { $n == 0 } {
+ set n $nitems
+ }
+ set suffix _0_$n
+ } else {
+ # Retrieve a random key from the list
+ set suffix _0_[berkdb random_int 1 $nitems]
+ }
+ set key "testclient$id$suffix"
+
+ set t [$dbenv txn]
+ set txn "-txn $t"
+
+ # Now execute op1 or op2
+ if { $op == 1 } {
+ op1 $db2 $key $newdb2data $txn
+ } elseif { $op == 2 } {
+ set newdb3data [read $did [berkdb random_int 500 1000]]
+ op2 $db2 $db3 $key $newdb2data $newdb3data $txn $dbenv
+ } else {
+ puts "FAIL: unrecogized op $op"
+ }
+ set c [$dbenv txn -parent $t]
+ set ctxn "-txn $c"
+ set qrecno [eval {$dbq put -append} $ctxn {$qdata}]
+ error_check_good db1_put [eval {$db1 put} $ctxn\
+ {$qrecno $newdb2data}] 0
+ error_check_good child_commit [$c commit] 0
+ error_check_good parent_commit [$t commit] 0
+ }
+ close $did
+
+ set ret [catch {$dbq close} res]
+ error_check_good dbq_close:$pid $ret 0
+ set ret [catch {$db1 close} res]
+ error_check_good db1_close:$pid $ret 0
+ set ret [catch {$db2 close} res]
+ error_check_good db2_close:$pid $ret 0
+ set ret [catch {$db3 close} res]
+ error_check_good db3_close:$pid $ret 0
+ set ret [catch {$db4 close} res]
+ error_check_good db4_close:$pid $ret 0
+
+ puts "\t\tTest$tnum: Producer $pid finished."
+}
+
+proc t106_consume { nitems tnum outputfile mode dbenv niter args } {
+ source ./include.tcl
+ set pid [pid]
+ puts "\tTest$tnum: Consumer $pid starting ($niter iterations)."
+
+ # Open queue database and btree database 1.
+ set dbq [eval {berkdb_open \
+ -create -queue -env $dbenv -auto_commit -len 32 queue.db} ]
+ error_check_good dbq_open:$pid [is_valid_db $dbq] TRUE
+
+ set db1 [eval {berkdb_open \
+ -create -btree -env $dbenv -auto_commit testfile1.db} ]
+ error_check_good db1_open:$pid [is_valid_db $db1] TRUE
+
+ set oid [open $outputfile a]
+
+ for { set i 1 } { $i <= $nitems } {incr i } {
+ set t [$dbenv txn]
+ set txn "-txn $t"
+ set ret [eval {$dbq get $mode} $txn]
+ set qrecno [lindex [lindex $ret 0] 0]
+ set db1curs [eval {$db1 cursor} $txn]
+ if {[catch {eval $db1curs get -set -rmw $qrecno} res]} {
+ puts "FAIL: $db1curs get: $res"
+ }
+ error_check_good db1curs_del [$db1curs del] 0
+ error_check_good db1curs_close [$db1curs close] 0
+ error_check_good txn_commit [$t commit] 0
+ }
+
+ error_check_good output_close:$pid [close $oid] ""
+
+ set ret [catch {$dbq close} res]
+ error_check_good dbq_close:$pid $ret 0
+ set ret [catch {$db1 close} res]
+ error_check_good db1_close:$pid $ret 0
+ puts "\t\tTest$tnum: Consumer $pid finished."
+}
+
+# op1 overwrites one data item in db2.
+proc op1 { db2 key newdata txn } {
+
+ set db2c [eval {$db2 cursor} $txn]
+puts "in op1, key is $key"
+ set ret [eval {$db2c get -set -rmw $key}]
+ # Make sure we retrieved something
+ error_check_good db2c_get [llength $ret] 1
+ error_check_good db2c_put [eval {$db2c put} -current {$newdata}] 0
+ error_check_good db2c_close [$db2c close] 0
+}
+
+# op 2
+proc op2 { db2 db3 key newdata2 newdata3 txn dbenv } {
+
+ # Randomly choose whether to work on db2 or db3 first for
+ # each operation: open cursor, get, put, close.
+ set open1 [berkdb random_int 0 1]
+ set get1 [berkdb random_int 0 1]
+ set put1 [berkdb random_int 0 1]
+ set close1 [berkdb random_int 0 1]
+puts "open [expr $open1 + 2] first, get [expr $get1 + 2] first,\
+ put [expr $put1 + 2] first, close [expr $close1 + 2] first"
+puts "in op2, key is $key"
+
+ # Open cursor
+ if { $open1 == 0 } {
+ set db2c [eval {$db2 cursor} $txn]
+ set db3c [eval {$db3 cursor} $txn]
+ } else {
+ set db3c [eval {$db3 cursor} $txn]
+ set db2c [eval {$db2 cursor} $txn]
+ }
+ error_check_good db2_cursor [is_valid_cursor $db2c $db2] TRUE
+ error_check_good db3_cursor [is_valid_cursor $db3c $db3] TRUE
+
+ # Do the following until we succeed and don't get DB_DEADLOCK:
+ if { $get1 == 0 } {
+ get_set_rmw $db2c $key $dbenv
+ get_set_rmw $db3c $key $dbenv
+ } else {
+ get_set_rmw $db3c $key $dbenv
+ get_set_rmw $db2c $key $dbenv
+ }
+
+ # Put new data.
+ if { $put1 == 0 } {
+ error_check_good db2c_put [eval {$db2c put} \
+ -current {$newdata2}] 0
+ error_check_good db3c_put [eval {$db3c put} \
+ -current {$newdata3}] 0
+ } else {
+ error_check_good db3c_put [eval {$db3c put} \
+ -current {$newdata3}] 0
+ error_check_good db2c_put [eval {$db2c put} \
+ -current {$newdata2}] 0
+ }
+ if { $close1 == 0 } {
+ error_check_good db2c_close [$db2c close] 0
+ error_check_good db3c_close [$db3c close] 0
+ } else {
+ error_check_good db3c_close [$db3c close] 0
+ error_check_good db2c_close [$db2c close] 0
+ }
+}
+
+proc get_set_rmw { dbcursor key dbenv } {
+
+ while { 1 } {
+ if {[catch {set ret [eval {$dbcursor get -set -rmw} $key]}\
+ res ]} {
+ # If the get failed, break if it failed for any
+ # reason other than deadlock. If we have deadlock,
+ # the deadlock detector should break the deadlock
+ # as we keep trying.
+ if { [is_substr $res DB_LOCK_DEADLOCK] != 1 } {
+ puts "FAIL: get_set_rmw: $res"
+ break
+ }
+ } else {
+ # We succeeded. Go back to the body of the test.
+ break
+ }
+ }
+}
+
+source ./include.tcl
+source $test_path/test.tcl
+
+# Verify usage
+set usage "t106script.tcl dir runtype nitems nprod outputfile id tnum order"
+if { $argc < 10 } {
+ puts stderr "FAIL:[timestamp] Usage: $usage"
+ exit
+}
+
+# Initialize arguments
+set dir [lindex $argv 0]
+set runtype [lindex $argv 1]
+set nitems [lindex $argv 2]
+set nprod [lindex $argv 3]
+set outputfile [lindex $argv 4]
+set id [lindex $argv 5]
+set tnum [lindex $argv 6]
+set order [lindex $argv 7]
+set niter [lindex $argv 8]
+# args is the string "{ -len 20 -pad 0}", so we need to extract the
+# " -len 20 -pad 0" part.
+set args [lindex [lrange $argv 9 end] 0]
+
+# Open env
+set dbenv [berkdb_env -home $dir -txn]
+error_check_good dbenv_open [is_valid_env $dbenv] TRUE
+
+# Invoke initial, produce or consume based on $runtype
+if { $runtype == "INITIAL" } {
+ t106_initial $nitems $nprod $id $tnum $dbenv $order $args
+} elseif { $runtype == "PRODUCE" } {
+ t106_produce $nitems $nprod $id $tnum $dbenv $order $niter $args
+} elseif { $runtype == "WAIT" } {
+ t106_consume $nitems $tnum $outputfile -consume_wait $dbenv $args
+} else {
+ error_check_good bad_args $runtype "either PRODUCE, or WAIT"
+}
+error_check_good env_close [$dbenv close] 0
+exit
diff --git a/db/test/test.tcl b/db/test/test.tcl
index 7678f2fcb..a16b1e669 100644
--- a/db/test/test.tcl
+++ b/db/test/test.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test.tcl,v 11.114 2001/01/09 21:28:52 sue Exp $
+# $Id: test.tcl,v 11.256 2003/11/10 17:41:38 sandstro Exp $
source ./include.tcl
@@ -16,7 +16,7 @@ if { [file exists $testdir] != 1 } {
global __debug_print
global __debug_on
-global util_path
+global __debug_test
#
# Test if utilities work to figure out the path. Most systems
@@ -30,69 +30,21 @@ if { [string first "exec format error" $ret] != -1 } {
set util_path .
}
set __debug_print 0
-set __debug_on 0
+set encrypt 0
+set old_encrypt 0
+set passwd test_passwd
-# This is where the test numbering and parameters now live.
-source $test_path/testparams.tcl
-
-for { set i 1 } { $i <= $deadtests } {incr i} {
- set name [format "dead%03d.tcl" $i]
- source $test_path/$name
-}
-for { set i 1 } { $i <= $envtests } {incr i} {
- set name [format "env%03d.tcl" $i]
- source $test_path/$name
-}
-for { set i 1 } { $i <= $recdtests } {incr i} {
- set name [format "recd%03d.tcl" $i]
- source $test_path/$name
-}
-for { set i 1 } { $i <= $rpctests } {incr i} {
- set name [format "rpc%03d.tcl" $i]
- source $test_path/$name
-}
-for { set i 1 } { $i <= $rsrctests } {incr i} {
- set name [format "rsrc%03d.tcl" $i]
- source $test_path/$name
-}
-for { set i 1 } { $i <= $runtests } {incr i} {
- set name [format "test%03d.tcl" $i]
- # Test numbering may be sparse.
- if { [file exists $test_path/$name] == 1 } {
- source $test_path/$name
- }
-}
-for { set i 1 } { $i <= $subdbtests } {incr i} {
- set name [format "sdb%03d.tcl" $i]
- source $test_path/$name
-}
-
-source $test_path/archive.tcl
-source $test_path/byteorder.tcl
-source $test_path/dbm.tcl
-source $test_path/hsearch.tcl
-source $test_path/join.tcl
-source $test_path/lock001.tcl
-source $test_path/lock002.tcl
-source $test_path/lock003.tcl
-source $test_path/log.tcl
-source $test_path/logtrack.tcl
-source $test_path/mpool.tcl
-source $test_path/mutex.tcl
-source $test_path/ndbm.tcl
-source $test_path/sdbtest001.tcl
-source $test_path/sdbtest002.tcl
-source $test_path/sdbutils.tcl
-source $test_path/testutils.tcl
-source $test_path/txn.tcl
-source $test_path/upgrade.tcl
+# Error stream that (should!) always go to the console, even if we're
+# redirecting to ALL.OUT.
+set consoleerr stderr
set dict $test_path/wordlist
set alphabet "abcdefghijklmnopqrstuvwxyz"
+set datastr "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
# Random number seed.
global rand_init
-set rand_init 1013
+set rand_init 101301
# Default record length and padding character for
# fixed record length access method(s)
@@ -103,50 +55,52 @@ set recd_debug 0
set log_log_record_types 0
set ohandles {}
+# Normally, we're not running an all-tests-in-one-env run. This matters
+# for error stream/error prefix settings in berkdb_open.
+global is_envmethod
+set is_envmethod 0
+
+# For testing locker id wrap around.
+global lock_curid
+global lock_maxid
+set lock_curid 0
+set lock_maxid 2147483647
+global txn_curid
+global txn_maxid
+set txn_curid 2147483648
+set txn_maxid 4294967295
+
+# This is where the test numbering and parameters now live.
+source $test_path/testparams.tcl
+
# Set up any OS-specific values
global tcl_platform
set is_windows_test [is_substr $tcl_platform(os) "Win"]
set is_hp_test [is_substr $tcl_platform(os) "HP-UX"]
set is_qnx_test [is_substr $tcl_platform(os) "QNX"]
+set upgrade_be [big_endian]
+
+# Try to open an encrypted database. If it fails, this release
+# doesn't support encryption, and encryption tests should be skipped.
+set has_crypto 1
+set stat [catch {set db \
+ [eval {berkdb open -create -btree -encryptaes test_passwd} ] } result ]
+if { $stat != 0 } {
+ # Make sure it's the right error for a non-crypto release.
+ error_check_good non_crypto_release \
+ [expr [is_substr $result "operation not supported"] || \
+ [is_substr $result "invalid argument"]] 1
+ set has_crypto 0
+} else {
+ # It is a crypto release. Get rid of the db, we don't need it.
+ error_check_good close_encrypted_db [$db close] 0
+}
# From here on out, test.tcl contains the procs that are used to
# run all or part of the test suite.
-proc run_am { } {
- global runtests
- source ./include.tcl
-
- fileremove -f ALL.OUT
-
- # Access method tests.
- #
- # XXX
- # Broken up into separate tclsh instantiations so we don't require
- # so much memory.
- foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
- puts "Running $i tests"
- for { set j 1 } { $j <= $runtests } {incr j} {
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- run_method -$i $j $j" >>& ALL.OUT } res] {
- set o [open ALL.OUT a]
- puts $o "FAIL: [format "test%03d" $j] $i"
- close $o
- }
- }
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- subdb -$i 0 1" >>& ALL.OUT } res] {
- set o [open ALL.OUT a]
- puts $o "FAIL: subdb -$i test"
- close $o
- }
- }
-}
-
proc run_std { args } {
- global runtests
- global subdbtests
+ global test_names
source ./include.tcl
set exflgs [eval extractflags $args]
@@ -156,6 +110,7 @@ proc run_std { args } {
set display 1
set run 1
set am_only 0
+ set no_am 0
set std_only 1
set rflags {--}
foreach f $flags {
@@ -163,6 +118,10 @@ proc run_std { args } {
A {
set std_only 0
}
+ M {
+ set no_am 1
+ puts "run_std: all but access method tests."
+ }
m {
set am_only 1
puts "run_std: access method tests only."
@@ -183,7 +142,7 @@ proc run_std { args } {
puts -nonewline "Test suite run started at: "
puts [clock format [clock seconds] -format "%H:%M %D"]
puts [berkdb version -string]
-
+
puts -nonewline $o "Test suite run started at: "
puts $o [clock format [clock seconds] -format "%H:%M %D"]
puts $o [berkdb version -string]
@@ -194,18 +153,20 @@ proc run_std { args } {
set test_list {
{"environment" "env"}
{"archive" "archive"}
+ {"file operations" "fop"}
{"locking" "lock"}
{"logging" "log"}
- {"memory pool" "mpool"}
+ {"memory pool" "memp"}
{"mutex" "mutex"}
{"transaction" "txn"}
{"deadlock detection" "dead"}
- {"subdatabase" "subdb_gen"}
+ {"subdatabase" "sdb"}
{"byte-order" "byte"}
{"recno backing file" "rsrc"}
{"DBM interface" "dbm"}
{"NDBM interface" "ndbm"}
{"Hsearch interface" "hsearch"}
+ {"secondary index" "sindex"}
}
if { $am_only == 0 } {
@@ -229,12 +190,22 @@ proc run_std { args } {
# so we don't require so much memory, but I think it's cleaner
# and more useful to do it down inside proc r than here,
# since "r recd" gets done a lot and needs to work.
+ #
+ # Note that we still wrap the test in an exec so that
+ # its output goes to ALL.OUT. run_recd will wrap each test
+ # so that both error streams go to stdout (which here goes
+ # to ALL.OUT); information that run_recd wishes to print
+ # to the "real" stderr, but outside the wrapping for each test,
+ # such as which tests are being skipped, it can still send to
+ # stderr.
puts "Running recovery tests"
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- r $rflags recd" >>& ALL.OUT } res] {
+ if [catch {
+ exec $tclsh_path \
+ << "source $test_path/test.tcl; r $rflags recd" \
+ 2>@ stderr >> ALL.OUT
+ } res] {
set o [open ALL.OUT a]
- puts $o "FAIL: recd test"
+ puts $o "FAIL: recd tests"
close $o
}
@@ -244,49 +215,44 @@ proc run_std { args } {
# Broken up into separate tclsh instantiations so we don't
# require so much memory.
puts "Running join test"
- foreach i "join1 join2 join3 join4 join5 join6" {
+ foreach test "join1 join2 join3 join4 join5 join6" {
if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; r $rflags $i" \
+ << "source $test_path/test.tcl; r $rflags $test" \
>>& ALL.OUT } res] {
set o [open ALL.OUT a]
- puts $o "FAIL: $i test"
+ puts $o "FAIL: $test test"
close $o
}
}
}
- # Access method tests.
- #
- # XXX
- # Broken up into separate tclsh instantiations so we don't require
- # so much memory.
- foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
- puts "Running $i tests"
- for { set j 1 } { $j <= $runtests } {incr j} {
- if { $run == 0 } {
- set o [open ALL.OUT a]
- run_method -$i $j $j $display $run $o
- close $o
- }
- if { $run } {
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- run_method -$i $j $j $display $run" \
- >>& ALL.OUT } res] {
+ if { $no_am == 0 } {
+ # Access method tests.
+ #
+ # XXX
+ # Broken up into separate tclsh instantiations so we don't
+ # require so much memory.
+ foreach method \
+ "btree hash queue queueext recno rbtree frecno rrecno" {
+ puts "Running $method tests"
+ foreach test $test_names(test) {
+ if { $run == 0 } {
set o [open ALL.OUT a]
- puts $o \
- "FAIL: [format "test%03d" $j] $i"
+ run_method -$method $test $display $run $o
close $o
}
+ if { $run } {
+ if [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl; \
+ run_method -$method $test $display $run"\
+ >>& ALL.OUT } res] {
+ set o [open ALL.OUT a]
+ puts $o "FAIL:$test $method"
+ close $o
+ }
+ }
}
}
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- subdb -$i $display $run" >>& ALL.OUT } res] {
- set o [open ALL.OUT a]
- puts $o "FAIL: subdb -$i test"
- close $o
- }
}
# If not actually running, no need to check for failure.
@@ -296,14 +262,8 @@ proc run_std { args } {
return
}
- set failed 0
- set o [open ALL.OUT r]
- while { [gets $o line] >= 0 } {
- if { [regexp {^FAIL} $line] != 0 } {
- set failed 1
- }
- }
- close $o
+ set failed [check_failed_run ALL.OUT]
+
set o [open ALL.OUT a]
if { $failed == 0 } {
puts "Regression Tests Succeeded"
@@ -320,11 +280,25 @@ proc run_std { args } {
close $o
}
+proc check_failed_run { file {text "^FAIL"}} {
+ set failed 0
+ set o [open $file r]
+ while { [gets $o line] >= 0 } {
+ set ret [regexp $text $line]
+ if { $ret != 0 } {
+ set failed 1
+ }
+ }
+ close $o
+
+ return $failed
+}
+
proc r { args } {
- global envtests
- global recdtests
- global subdbtests
- global deadtests
+ global test_names
+ global has_crypto
+ global rand_init
+
source ./include.tcl
set exflgs [eval extractflags $args]
@@ -345,68 +319,42 @@ proc r { args } {
}
if {[catch {
- set l [ lindex $args 0 ]
- switch $l {
- archive {
- if { $display } {
- puts "eval archive [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval archive [lrange $args 1 end]
- }
- }
- byte {
- foreach method \
- "-hash -btree -recno -queue -queueext -frecno" {
- if { $display } {
- puts "byteorder $method"
- }
- if { $run } {
- check_handles
- byteorder $method
- }
- }
- }
- dbm {
+ set sub [ lindex $args 0 ]
+ switch $sub {
+ dead -
+ env -
+ fop -
+ lock -
+ log -
+ memp -
+ mutex -
+ rsrc -
+ sdbtest -
+ txn {
if { $display } {
- puts "dbm"
+ run_subsystem $sub 1 0
}
if { $run } {
- check_handles
- dbm
+ run_subsystem $sub
}
}
- dead {
- for { set i 1 } { $i <= $deadtests } \
- { incr i } {
- if { $display } {
- puts "eval dead00$i\
- [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval dead00$i\
- [lrange $args 1 end]
- }
+ bigfile {
+ foreach test $test_names($sub) {
+ eval run_test $test $display $run
}
}
- env {
- for { set i 1 } { $i <= $envtests } {incr i} {
- if { $display } {
- puts "eval env00$i"
- }
- if { $run } {
- check_handles
- eval env00$i
- }
- }
+ byte {
+ run_test byteorder $display $run
}
- hsearch {
- if { $display } { puts "hsearch" }
+ archive -
+ dbm -
+ hsearch -
+ ndbm -
+ shelltest {
+ if { $display } { puts "r $sub" }
if { $run } {
check_handles
- hsearch
+ $sub
}
}
join {
@@ -419,7 +367,7 @@ proc r { args } {
}
join1 {
if { $display } { puts jointest }
- if { $run } {
+ if { $run } {
check_handles
jointest
}
@@ -467,147 +415,84 @@ proc r { args } {
jointest 512 3
}
}
- lock {
- if { $display } {
- puts \
- "eval locktest [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval locktest [lrange $args 1 end]
- }
- }
- log {
- if { $display } {
- puts "eval logtest [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval logtest [lrange $args 1 end]
- }
- }
- mpool {
- eval r $saveflags mpool1
- eval r $saveflags mpool2
- eval r $saveflags mpool3
- }
- mpool1 {
- if { $display } {
- puts "eval mpool [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval mpool [lrange $args 1 end]
- }
- }
- mpool2 {
- if { $display } {
- puts "eval mpool\
- -mem system [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval mpool\
- -mem system [lrange $args 1 end]
- }
- }
- mpool3 {
- if { $display } {
- puts "eval mpool\
- -mem private [lrange $args 1 end]"
- }
- if { $run } {
- eval mpool\
- -mem private [lrange $args 1 end]
- }
- }
- mutex {
- if { $display } {
- puts "eval mutex [lrange $args 1 end]"
- }
- if { $run } {
- check_handles
- eval mutex [lrange $args 1 end]
- }
+ recd {
+ check_handles
+ run_recds $run $display [lrange $args 1 end]
}
- ndbm {
- if { $display } { puts ndbm }
- if { $run } {
- check_handles
- ndbm
+ rep {
+ foreach test $test_names(rep) {
+ run_test $test $display $run
}
- }
- recd {
- if { $display } { puts run_recds }
- if { $run } {
- check_handles
- run_recds
+ # We seed the random number generator here
+ # instead of in run_repmethod so that we
+ # aren't always reusing the first few
+ # responses from random_int.
+ #
+ berkdb srand $rand_init
+ foreach sub { test sdb } {
+ foreach test $test_names($sub) {
+ eval run_test run_repmethod \
+ $display $run $test
+ }
}
}
rpc {
- # RPC must be run as one unit due to server,
- # so just print "r rpc" in the display case.
- if { $display } { puts "r rpc" }
- if { $run } {
- check_handles
- eval rpc001
- check_handles
- eval rpc002
- if { [catch {run_rpcmethod -txn} ret]\
- != 0 } {
- puts $ret
+ if { $display } { puts "r $sub" }
+ global rpc_svc svc_list
+ set old_rpc_src $rpc_svc
+ foreach rpc_svc $svc_list {
+ if { !$run || \
+ ![file exist $util_path/$rpc_svc] } {
+ continue
}
- foreach method \
- "hash queue queueext recno frecno rrecno rbtree btree" {
- if { [catch {run_rpcmethod \
- -$method} ret] != 0 } {
- puts $ret
- }
+ run_subsystem rpc
+ if { [catch {run_rpcmethod -txn} ret] != 0 } {
+ puts $ret
}
+ run_test run_rpcmethod $display $run
}
+ set rpc_svc $old_rpc_src
}
- rsrc {
- if { $display } { puts "rsrc001\nrsrc002" }
+ sec {
+ # Skip secure mode tests if release
+ # does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+ if { $display } {
+ run_subsystem $sub 1 0
+ }
if { $run } {
- check_handles
- rsrc001
- check_handles
- rsrc002
+ run_subsystem $sub 0 1
}
- }
- subdb {
- eval r $saveflags subdb_gen
-
- foreach method \
- "btree rbtree hash queue queueext recno frecno rrecno" {
- check_handles
- eval subdb -$method $display $run
+ foreach test $test_names(test) {
+ eval run_test run_secmethod \
+ $display $run $test
+ eval run_test run_secenv \
+ $display $run $test
}
}
- subdb_gen {
+ sdb {
if { $display } {
- puts "subdbtest001 ; verify_dir"
- puts "subdbtest002 ; verify_dir"
+ puts "eval r $saveflags sdbtest"
}
if { $run } {
- check_handles
- eval subdbtest001
- verify_dir
- check_handles
- eval subdbtest002
- verify_dir
+ eval r $saveflags sdbtest
+ }
+ foreach test $test_names(sdb) {
+ eval run_test $test $display $run
}
}
- txn {
+ sindex {
if { $display } {
- puts "txntest [lrange $args 1 end]"
+ sindex 1 0
+ sijoin 1 0
}
if { $run } {
- check_handles
- eval txntest [lrange $args 1 end]
+ sindex 0 1
+ sijoin 0 1
}
}
-
btree -
rbtree -
hash -
@@ -616,8 +501,10 @@ proc r { args } {
recno -
frecno -
rrecno {
- eval run_method [lindex $args 0] \
- 1 0 $display $run [lrange $args 1 end]
+ foreach test $test_names(test) {
+ eval run_method [lindex $args 0] $test \
+ $display $run [lrange $args 1 end]
+ }
}
default {
@@ -640,50 +527,72 @@ proc r { args } {
}
}
-proc run_method { method {start 1} {stop 0} {display 0} {run 1} \
+proc run_subsystem { sub { display 0 } { run 1} } {
+ global test_names
+
+ if { [info exists test_names($sub)] != 1 } {
+ puts stderr "Subsystem $sub has no tests specified in\
+ testparams.tcl; skipping."
+ return
+ }
+ foreach test $test_names($sub) {
+ if { $display } {
+ puts "eval $test"
+ }
+ if { $run } {
+ check_handles
+ if {[catch {eval $test} ret] != 0 } {
+ puts "FAIL: run_subsystem: $sub $test: \
+ $ret"
+ }
+ }
+ }
+}
+
+proc run_test { test {display 0} {run 1} args } {
+ source ./include.tcl
+ foreach method "hash queue queueext recno rbtree frecno rrecno btree" {
+ if { $display } {
+ puts "eval $test -$method $args; verify_dir $testdir \"\" 1"
+ }
+ if { $run } {
+ check_handles
+ eval $test -$method $args
+ verify_dir $testdir "" 1
+ }
+ }
+}
+
+proc run_method { method test {display 0} {run 1} \
{ outfile stdout } args } {
global __debug_on
global __debug_print
+ global __debug_test
+ global test_names
global parms
- global runtests
source ./include.tcl
- if { $stop == 0 } {
- set stop $runtests
- }
- if { $run == 1 } {
- puts $outfile "run_method: $method $start $stop $args"
- }
-
if {[catch {
- for { set i $start } { $i <= $stop } {incr i} {
- set name [format "test%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Test%03d $i] disabled in\
- testparams.tcl; skipping."
- continue
- }
- if { $display } {
- puts -nonewline $outfile "eval $name $method"
- puts -nonewline $outfile " $parms($name) $args"
- puts $outfile " ; verify_dir $testdir \"\" 1"
+ if { $display } {
+ puts -nonewline $outfile "eval $test $method"
+ puts -nonewline $outfile " $parms($test) $args"
+ puts $outfile " ; verify_dir $testdir \"\" 1"
+ }
+ if { $run } {
+ check_handles $outfile
+ puts $outfile "[timestamp]"
+ eval $test $method $parms($test) $args
+ if { $__debug_print != 0 } {
+ puts $outfile ""
}
- if { $run } {
- check_handles $outfile
- puts $outfile "[timestamp]"
- eval $name $method $parms($name) $args
- if { $__debug_print != 0 } {
- puts $outfile ""
- }
- # verify all databases the test leaves behind
- verify_dir $testdir "" 1
- if { $__debug_on != 0 } {
- debug
- }
+ # verify all databases the test leaves behind
+ verify_dir $testdir "" 1
+ if { $__debug_on != 0 } {
+ debug $__debug_test
}
- flush stdout
- flush stderr
}
+ flush stdout
+ flush stderr
} res] != 0} {
global errorInfo;
@@ -691,53 +600,43 @@ proc run_method { method {start 1} {stop 0} {display 0} {run 1} \
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_method: $method $i: $theError"
+ run_method: $method $test: $theError"
} else {
error $theError;
}
}
}
-proc run_rpcmethod { type {start 1} {stop 0} {largs ""} } {
+proc run_rpcmethod { method {largs ""} } {
global __debug_on
global __debug_print
+ global __debug_test
+ global test_names
global parms
- global runtests
+ global is_envmethod
+ global rpc_svc
source ./include.tcl
- if { $stop == 0 } {
- set stop $runtests
- }
- puts "run_rpcmethod: $type $start $stop $largs"
+ puts "run_rpcmethod: $method $largs"
set save_largs $largs
- if { [string compare $rpc_server "localhost"] == 0 } {
- set dpid [exec $util_path/berkeley_db_svc -h $rpc_testdir &]
- } else {
- set dpid [exec rsh $rpc_server $rpc_path/berkeley_db_svc \
- -h $rpc_testdir &]
- }
- puts "\tRun_rpcmethod.a: starting server, pid $dpid"
- tclsleep 2
+ set dpid [rpc_server_start]
+ puts "\tRun_rpcmethod.a: started server, pid $dpid"
remote_cleanup $rpc_server $rpc_testdir $testdir
set home [file tail $rpc_testdir]
- set txn ""
+ set is_envmethod 1
set use_txn 0
- if { [string first "txn" $type] != -1 } {
+ if { [string first "txn" $method] != -1 } {
set use_txn 1
}
if { $use_txn == 1 } {
- if { $start == 1 } {
- set ntxns 32
- } else {
- set ntxns $start
- }
+ set ntxns 32
set i 1
check_handles
remote_cleanup $rpc_server $rpc_testdir $testdir
- set env [eval {berkdb env -create -mode 0644 -home $home \
+ set env [eval {berkdb_env -create -mode 0644 -home $home \
-server $rpc_server -client_timeout 10000} -txn]
error_check_good env_open [is_valid_env $env] TRUE
@@ -746,41 +645,41 @@ proc run_rpcmethod { type {start 1} {stop 0} {largs ""} } {
set stat [catch {eval txn001_subb $ntxns $env} res]
}
error_check_good envclose [$env close] 0
+ set stat [catch {eval txn003} res]
} else {
set stat [catch {
- for { set i $start } { $i <= $stop } {incr i} {
- check_handles
- set name [format "test%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Test%03d $i] disabled in\
- testparams.tcl; skipping."
- continue
- }
- remote_cleanup $rpc_server $rpc_testdir $testdir
- #
- # Set server cachesize to 1Mb. Otherwise some
- # tests won't fit (like test084 -btree).
- #
- set env [eval {berkdb env -create -mode 0644 \
- -home $home -server $rpc_server \
- -client_timeout 10000 \
- -cachesize {0 1048576 1} }]
- error_check_good env_open \
- [is_valid_env $env] TRUE
- append largs " -env $env "
-
- puts "[timestamp]"
- eval $name $type $parms($name) $largs
- if { $__debug_print != 0 } {
- puts ""
- }
- if { $__debug_on != 0 } {
- debug
+ foreach sub { test sdb } {
+ foreach test $test_names($sub) {
+ check_handles
+ remote_cleanup $rpc_server \
+ $rpc_testdir $testdir
+ #
+ # Set server cachesize to 1Mb.
+ # Otherwise some tests won't fit.
+ # (like test084 -btree).
+ #
+ set env [eval {berkdb_env -create \
+ -mode 0644 \
+ -home $home -server $rpc_server \
+ -client_timeout 10000 \
+ -cachesize {0 1048576 1}}]
+ error_check_good env_open \
+ [is_valid_env $env] TRUE
+ append largs " -env $env "
+
+ puts "[timestamp]"
+ eval $test $method $parms($test) $largs
+ if { $__debug_print != 0 } {
+ puts ""
+ }
+ if { $__debug_on != 0 } {
+ debug $__debug_test
+ }
+ flush stdout
+ flush stderr
+ set largs $save_largs
+ error_check_good envclose [$env close] 0
}
- flush stdout
- flush stderr
- set largs $save_largs
- error_check_good envclose [$env close] 0
}
} res]
}
@@ -789,49 +688,44 @@ proc run_rpcmethod { type {start 1} {stop 0} {largs ""} } {
set fnl [string first "\n" $errorInfo]
set theError [string range $errorInfo 0 [expr $fnl - 1]]
- exec $KILL $dpid
+ tclkill $dpid
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_rpcmethod: $type $i: $theError"
+ run_rpcmethod: $method: $theError"
} else {
error $theError;
}
}
- exec $KILL $dpid
-
+ set is_envmethod 0
+ tclkill $dpid
}
-proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
+proc run_rpcnoserver { method {largs ""} } {
global __debug_on
global __debug_print
+ global __debug_test
+ global test_names
global parms
- global runtests
+ global is_envmethod
source ./include.tcl
- if { $stop == 0 } {
- set stop $runtests
- }
- puts "run_rpcnoserver: $type $start $stop $largs"
+ puts "run_rpcnoserver: $method $largs"
set save_largs $largs
remote_cleanup $rpc_server $rpc_testdir $testdir
set home [file tail $rpc_testdir]
- set txn ""
+ set is_envmethod 1
set use_txn 0
- if { [string first "txn" $type] != -1 } {
+ if { [string first "txn" $method] != -1 } {
set use_txn 1
}
if { $use_txn == 1 } {
- if { $start == 1 } {
- set ntxns 32
- } else {
- set ntxns $start
- }
+ set ntxns 32
set i 1
check_handles
remote_cleanup $rpc_server $rpc_testdir $testdir
- set env [eval {berkdb env -create -mode 0644 -home $home \
+ set env [eval {berkdb_env -create -mode 0644 -home $home \
-server $rpc_server -client_timeout 10000} -txn]
error_check_good env_open [is_valid_env $env] TRUE
@@ -842,11 +736,10 @@ proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
error_check_good envclose [$env close] 0
} else {
set stat [catch {
- for { set i $start } { $i <= $stop } {incr i} {
+ foreach test $test_names {
check_handles
- set name [format "test%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Test%03d $i] disabled in\
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in \
testparams.tcl; skipping."
continue
}
@@ -855,7 +748,7 @@ proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
# Set server cachesize to 1Mb. Otherwise some
# tests won't fit (like test084 -btree).
#
- set env [eval {berkdb env -create -mode 0644 \
+ set env [eval {berkdb_env -create -mode 0644 \
-home $home -server $rpc_server \
-client_timeout 10000 \
-cachesize {0 1048576 1} }]
@@ -864,12 +757,12 @@ proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
append largs " -env $env "
puts "[timestamp]"
- eval $name $type $parms($name) $largs
+ eval $test $method $parms($test) $largs
if { $__debug_print != 0 } {
puts ""
}
if { $__debug_on != 0 } {
- debug
+ debug $__debug_test
}
flush stdout
flush stderr
@@ -885,62 +778,91 @@ proc run_rpcnoserver { type {start 1} {stop 0} {largs ""} } {
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_rpcnoserver: $type $i: $theError"
+ run_rpcnoserver: $method $i: $theError"
} else {
error $theError;
}
+ set is_envmethod 0
}
}
#
-# Run method tests in one environment. (As opposed to run_envmethod1
-# which runs each test in its own, new environment.)
+# Run method tests in secure mode.
+#
+proc run_secmethod { method test {display 0} {run 1} \
+ { outfile stdout } args } {
+ global passwd
+ global has_crypto
+
+ # Skip secure mode tests if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
+ }
+
+ append largs " -encryptaes $passwd "
+ eval run_method $method $test $display $run $outfile $largs
+}
+
#
-proc run_envmethod { type {start 1} {stop 0} {largs ""} } {
+# Run method tests each in its own, new secure environment.
+#
+proc run_secenv { method test {largs ""} } {
global __debug_on
global __debug_print
+ global __debug_test
+ global is_envmethod
+ global has_crypto
+ global test_names
global parms
- global runtests
+ global passwd
source ./include.tcl
- if { $stop == 0 } {
- set stop $runtests
+ # Skip secure mode tests if release does not support encryption.
+ if { $has_crypto == 0 } {
+ return
}
- puts "run_envmethod: $type $start $stop $largs"
+
+ puts "run_secenv: $method $test $largs"
set save_largs $largs
env_cleanup $testdir
- set txn ""
+ set is_envmethod 1
set stat [catch {
- for { set i $start } { $i <= $stop } {incr i} {
- check_handles
- set env [eval {berkdb env -create -mode 0644 \
- -home $testdir}]
- error_check_good env_open [is_valid_env $env] TRUE
- append largs " -env $env "
+ check_handles
+ set env [eval {berkdb_env -create -mode 0644 -home $testdir \
+ -encryptaes $passwd -cachesize {0 1048576 1}}]
+ error_check_good env_open [is_valid_env $env] TRUE
+ append largs " -env $env "
- puts "[timestamp]"
- set name [format "test%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Test%03d $i] disabled in\
- testparams.tcl; skipping."
- continue
- }
- eval $name $type $parms($name) $largs
- if { $__debug_print != 0 } {
- puts ""
- }
- if { $__debug_on != 0 } {
- debug
- }
- flush stdout
- flush stderr
- set largs $save_largs
- error_check_good envclose [$env close] 0
- error_check_good envremove [berkdb envremove \
- -home $testdir] 0
+ puts "[timestamp]"
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in\
+ testparams.tcl; skipping."
+ continue
+ }
+
+ #
+ # Run each test multiple times in the secure env.
+ # Once with a secure env + clear database
+ # Once with a secure env + secure database
+ #
+ eval $test $method $parms($test) $largs
+ append largs " -encrypt "
+ eval $test $method $parms($test) $largs
+
+ if { $__debug_print != 0 } {
+ puts ""
+ }
+ if { $__debug_on != 0 } {
+ debug $__debug_test
}
+ flush stdout
+ flush stderr
+ set largs $save_largs
+ error_check_good envclose [$env close] 0
+ error_check_good envremove [berkdb envremove \
+ -home $testdir -encryptaes $passwd] 0
} res]
if { $stat != 0} {
global errorInfo;
@@ -949,68 +871,304 @@ proc run_envmethod { type {start 1} {stop 0} {largs ""} } {
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_envmethod: $type $i: $theError"
+ run_secenv: $method $test: $theError"
} else {
error $theError;
}
+ set is_envmethod 0
}
}
-proc subdb { method display run {outfile stdout} args} {
- global subdbtests testdir
+#
+# Run replication method tests in master and client env.
+#
+proc run_reptest { method test {droppct 0} {nclients 1} {do_del 0} \
+ {do_sec 0} {do_oob 0} {largs "" } } {
+ source ./include.tcl
+ global __debug_on
+ global __debug_print
+ global __debug_test
+ global is_envmethod
global parms
+ global passwd
+ global has_crypto
+
+ puts "run_reptest: $method $test"
- for { set i 1 } {$i <= $subdbtests} {incr i} {
- set name [format "subdb%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Subdb%03d $i] disabled in\
+ env_cleanup $testdir
+ set is_envmethod 1
+ set stat [catch {
+ if { $do_sec && $has_crypto } {
+ set envargs "-encryptaes $passwd"
+ append largs " -encrypt "
+ } else {
+ set envargs ""
+ }
+ check_handles
+ #
+ # This will set up the master and client envs
+ # and will return us the args to pass to the
+ # test.
+
+ set largs [repl_envsetup \
+ $envargs $largs $test $nclients $droppct $do_oob]
+
+ puts "[timestamp]"
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in\
testparams.tcl; skipping."
continue
}
- if { $display } {
- puts -nonewline $outfile "eval $name $method"
- puts -nonewline $outfile " $parms($name) $args;"
- puts $outfile "verify_dir $testdir \"\" 1"
+ puts -nonewline \
+ "Repl: $test: dropping $droppct%, $nclients clients "
+ if { $do_del } {
+ puts -nonewline " with delete verification;"
+ } else {
+ puts -nonewline " no delete verification;"
}
- if { $run } {
- check_handles $outfile
- eval $name $method $parms($name) $args
- verify_dir $testdir "" 1
+ if { $do_sec } {
+ puts -nonewline " with security;"
+ } else {
+ puts -nonewline " no security;"
+ }
+ if { $do_oob } {
+ puts -nonewline " with out-of-order msgs;"
+ } else {
+ puts -nonewline " no out-of-order msgs;"
+ }
+ puts ""
+
+ eval $test $method $parms($test) $largs
+
+ if { $__debug_print != 0 } {
+ puts ""
+ }
+ if { $__debug_on != 0 } {
+ debug $__debug_test
}
flush stdout
flush stderr
+ repl_envprocq $test $nclients $do_oob
+ repl_envver0 $test $method $nclients
+ if { $do_del } {
+ repl_verdel $test $method $nclients
+ }
+ repl_envclose $test $envargs
+ } res]
+ if { $stat != 0} {
+ global errorInfo;
+
+ set fnl [string first "\n" $errorInfo]
+ set theError [string range $errorInfo 0 [expr $fnl - 1]]
+ if {[string first FAIL $errorInfo] == -1} {
+ error "FAIL:[timestamp]\
+ run_reptest: $method $test: $theError"
+ } else {
+ error $theError;
+ }
}
+ set is_envmethod 0
}
-proc run_recd { method {start 1} {stop 0} args } {
+#
+# Run replication method tests in master and client env.
+#
+proc run_repmethod { method test {numcl 0} {display 0} {run 1} \
+ {outfile stdout} {largs ""} } {
+ source ./include.tcl
global __debug_on
global __debug_print
+ global __debug_test
+ global is_envmethod
+ global test_names
+ global parms
+ global has_crypto
+ global passwd
+
+ set save_largs $largs
+ env_cleanup $testdir
+
+ # Use an array for number of clients because we really don't
+ # want to evenly-weight all numbers of clients. Favor smaller
+ # numbers but test more clients occasionally.
+ set drop_list { 0 0 0 0 0 1 1 5 5 10 20 }
+ set drop_len [expr [llength $drop_list] - 1]
+ set client_list { 1 1 2 1 1 1 2 2 3 1 }
+ set cl_len [expr [llength $client_list] - 1]
+
+ if { $numcl == 0 } {
+ set clindex [berkdb random_int 0 $cl_len]
+ set nclients [lindex $client_list $clindex]
+ } else {
+ set nclients $numcl
+ }
+ set drindex [berkdb random_int 0 $drop_len]
+ set droppct [lindex $drop_list $drindex]
+ set do_sec [berkdb random_int 0 1]
+ set do_oob [berkdb random_int 0 1]
+ set do_del [berkdb random_int 0 1]
+
+ if { $display == 1 } {
+ puts $outfile "eval run_reptest $method $test $droppct \
+ $nclients $do_del $do_sec $do_oob $largs"
+ }
+ if { $run == 1 } {
+ run_reptest $method $test $droppct $nclients $do_del \
+ $do_sec $do_oob $largs
+ }
+}
+
+#
+# Run method tests, each in its own, new environment. (As opposed to
+# run_envmethod1 which runs all the tests in a single environment.)
+#
+proc run_envmethod { method test {display 0} {run 1} {outfile stdout} \
+ { largs "" } } {
+ global __debug_on
+ global __debug_print
+ global __debug_test
+ global is_envmethod
+ global test_names
global parms
- global recdtests
- global log_log_record_types
source ./include.tcl
- if { $stop == 0 } {
- set stop $recdtests
+ set save_largs $largs
+ set envargs ""
+ env_cleanup $testdir
+
+ if { $display == 1 } {
+ puts $outfile "eval run_envmethod $method \
+ $test 0 1 stdout $largs"
+ }
+
+ # To run a normal test using system memory, call run_envmethod
+ # with the flag -shm.
+ set sindex [lsearch -exact $largs "-shm"]
+ if { $sindex >= 0 } {
+ if { [mem_chk " -system_mem -shm_key 1 "] == 1 } {
+ break
+ } else {
+ append envargs " -system_mem -shm_key 1 "
+ set largs [lreplace $largs $sindex $sindex]
+ }
+ }
+
+ # Test for -thread option and pass to berkdb_env open. Leave in
+ # $largs because -thread can also be passed to an individual
+ # test as an arg. Double the number of lockers because a threaded
+ # env requires more than an ordinary env.
+ if { [lsearch -exact $largs "-thread"] != -1 } {
+ append envargs " -thread -lock_max_lockers 2000 "
}
- puts "run_recd: $method $start $stop $args"
+ # Test for -alloc option and pass to berkdb_env open only.
+ # Remove from largs because -alloc is not an allowed test arg.
+ set aindex [lsearch -exact $largs "-alloc"]
+ if { $aindex >= 0 } {
+ append envargs " -alloc "
+ set largs [lreplace $largs $aindex $aindex]
+ }
+
+ if { $run == 1 } {
+ set is_envmethod 1
+ set stat [catch {
+ check_handles
+ set env [eval {berkdb_env -create -txn \
+ -mode 0644 -home $testdir} $envargs]
+ error_check_good env_open [is_valid_env $env] TRUE
+ append largs " -env $env "
+
+ puts "[timestamp]"
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in\
+ testparams.tcl; skipping."
+ continue
+ }
+ eval $test $method $parms($test) $largs
+
+ if { $__debug_print != 0 } {
+ puts ""
+ }
+ if { $__debug_on != 0 } {
+ debug $__debug_test
+ }
+ flush stdout
+ flush stderr
+ set largs $save_largs
+ error_check_good envclose [$env close] 0
+ error_check_good envremove [berkdb envremove \
+ -home $testdir] 0
+ } res]
+ if { $stat != 0} {
+ global errorInfo;
+
+ set fnl [string first "\n" $errorInfo]
+ set theError [string range $errorInfo 0 [expr $fnl - 1]]
+ if {[string first FAIL $errorInfo] == -1} {
+ error "FAIL:[timestamp]\
+ run_envmethod: $method $test: $theError"
+ } else {
+ error $theError;
+ }
+ }
+ set is_envmethod 0
+ }
+}
+
+proc run_recd { method test {run 1} {display 0} args } {
+ global __debug_on
+ global __debug_print
+ global __debug_test
+ global parms
+ global test_names
+ global log_log_record_types
+ global gen_upgrade_log
+ global upgrade_be
+ global upgrade_dir
+ global upgrade_method
+ global upgrade_name
+ source ./include.tcl
+
+ if { $run == 1 } {
+ puts "run_recd: $method $test $parms($test) $args"
+ }
if {[catch {
- for { set i $start } { $i <= $stop } {incr i} {
+ if { $display } {
+ puts "eval $test $method $parms($test) $args"
+ }
+ if { $run } {
check_handles
+ set upgrade_method $method
+ set upgrade_name $test
puts "[timestamp]"
- set name [format "recd%03d" $i]
# By redirecting stdout to stdout, we make exec
# print output rather than simply returning it.
- exec $tclsh_path << "source $test_path/test.tcl; \
- set log_log_record_types $log_log_record_types; \
- eval $name $method" >@ stdout
+ # By redirecting stderr to stdout too, we make
+ # sure everything winds up in the ALL.OUT file.
+ set ret [catch { exec $tclsh_path << \
+ "source $test_path/test.tcl; \
+ set log_log_record_types $log_log_record_types;\
+ set gen_upgrade_log $gen_upgrade_log;\
+ set upgrade_be $upgrade_be; \
+ set upgrade_dir $upgrade_dir; \
+ set upgrade_method $upgrade_method; \
+ set upgrade_name $upgrade_name; \
+ eval $test $method $parms($test) $args" \
+ >&@ stdout
+ } res]
+
+ # Don't die if the test failed; we want
+ # to just proceed.
+ if { $ret != 0 } {
+ puts "FAIL:[timestamp] $res"
+ }
+
if { $__debug_print != 0 } {
puts ""
}
if { $__debug_on != 0 } {
- debug
+ debug $__debug_test
}
flush stdout
flush stderr
@@ -1022,33 +1180,63 @@ proc run_recd { method {start 1} {stop 0} args } {
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_recd: $method $i: $theError"
+ run_recd: $method: $theError"
} else {
error $theError;
}
}
}
-proc run_recds { } {
+proc run_recds { {run 1} {display 0} args } {
+ source ./include.tcl
global log_log_record_types
+ global test_names
+ global gen_upgrade_log
+ global encrypt
set log_log_record_types 1
logtrack_init
+
foreach method \
"btree rbtree hash queue queueext recno frecno rrecno" {
check_handles
- if { [catch \
- {run_recd -$method} ret ] != 0 } {
- puts $ret
+#set test_names(recd) "recd005 recd017"
+ foreach test $test_names(recd) {
+ # Skip recd017 for non-crypto upgrade testing.
+ # Run only recd017 for crypto upgrade testing.
+ if { $gen_upgrade_log == 1 && $test == "recd017" && \
+ $encrypt == 0 } {
+ puts "Skipping recd017 for non-crypto run."
+ continue
+ }
+ if { $gen_upgrade_log == 1 && $test != "recd017" && \
+ $encrypt == 1 } {
+ puts "Skipping $test for crypto run."
+ continue
+ }
+ if { [catch {eval \
+ run_recd $method $test $run $display \
+ $args} ret ] != 0 } {
+ puts $ret
+ }
+ if { $gen_upgrade_log == 1 } {
+ save_upgrade_files $testdir
+ }
+ }
+ }
+ # We can skip logtrack_summary during the crypto upgrade run -
+ # it doesn't introduce any new log types.
+ if { $run } {
+ if { $gen_upgrade_log == 0 || $encrypt == 0 } {
+ logtrack_summary
}
}
- logtrack_summary
set log_log_record_types 0
}
proc run_all { args } {
- global runtests
- global subdbtests
+ global test_names
+ global has_crypto
source ./include.tcl
fileremove -f ALL.OUT
@@ -1058,6 +1246,8 @@ proc run_all { args } {
set display 1
set run 1
set am_only 0
+ set parallel 0
+ set nparalleltests 0
set rflags {--}
foreach f $flags {
switch $f {
@@ -1091,105 +1281,191 @@ proc run_all { args } {
lappend args -A
eval {run_std} $args
- set test_pagesizes { 512 8192 65536 }
+ set test_pagesizes [get_test_pagesizes]
set args [lindex $exflgs 0]
set save_args $args
foreach pgsz $test_pagesizes {
set args $save_args
- append args " -pagesize $pgsz"
+ append args " -pagesize $pgsz -chksum"
if { $am_only == 0 } {
# Run recovery tests.
#
+ # XXX These don't actually work at multiple pagesizes;
+ # disable them for now.
+ #
# XXX These too are broken into separate tclsh
- # instantiations so we don't require so much
+ # instantiations so we don't require so much
# memory, but I think it's cleaner
# and more useful to do it down inside proc r than here,
# since "r recd" gets done a lot and needs to work.
- puts "Running recovery tests with pagesize $pgsz"
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- r $rflags recd $args" >>& ALL.OUT } res] {
- set o [open ALL.OUT a]
- puts $o "FAIL: recd test"
- close $o
- }
+ #
+ # XXX See comment in run_std for why this only directs
+ # stdout and not stderr. Don't worry--the right stuff
+ # happens.
+ #puts "Running recovery tests with pagesize $pgsz"
+ #if [catch {exec $tclsh_path \
+ # << "source $test_path/test.tcl; \
+ # r $rflags recd $args" \
+ # 2>@ stderr >> ALL.OUT } res] {
+ # set o [open ALL.OUT a]
+ # puts $o "FAIL: recd test:"
+ # puts $o $res
+ # close $o
+ #}
}
-
+
# Access method tests.
- #
+ # Run subdb tests with varying pagesizes too.
# XXX
- # Broken up into separate tclsh instantiations so
+ # Broken up into separate tclsh instantiations so
# we don't require so much memory.
- foreach i \
+ foreach method \
"btree rbtree hash queue queueext recno frecno rrecno" {
- puts "Running $i tests with pagesize $pgsz"
- for { set j 1 } { $j <= $runtests } {incr j} {
+ puts "Running $method tests with pagesize $pgsz"
+ foreach sub {test sdb} {
+ foreach test $test_names($sub) {
+ if { $run == 0 } {
+ set o [open ALL.OUT a]
+ eval {run_method -$method \
+ $test $display $run $o} \
+ $args
+ close $o
+ }
+ if { $run } {
+ if [catch {exec $tclsh_path << \
+ "source $test_path/test.tcl; \
+ eval {run_method -$method \
+ $test $display $run \
+ stdout} $args" \
+ >>& ALL.OUT } res] {
+ set o [open ALL.OUT a]
+ puts $o "FAIL: \
+ -$method $test"
+ close $o
+ }
+ }
+ }
+ }
+ }
+ }
+ set args $save_args
+ #
+ # Run access method tests at default page size in one env.
+ #
+ foreach method "btree rbtree hash queue queueext recno frecno rrecno" {
+ puts "Running $method tests in a txn env"
+ foreach sub {test sdb} {
+ foreach test $test_names($sub) {
if { $run == 0 } {
set o [open ALL.OUT a]
- run_method -$i $j $j $display \
+ run_envmethod -$method $test $display \
$run $o $args
close $o
}
if { $run } {
if [catch {exec $tclsh_path \
<< "source $test_path/test.tcl; \
- run_method -$i $j $j $display \
- $run stdout $args" \
+ run_envmethod -$method $test \
+ $display $run stdout $args" \
>>& ALL.OUT } res] {
set o [open ALL.OUT a]
- puts $o \
- "FAIL: [format \
- "test%03d" $j] $i"
+ puts $o "FAIL: run_envmethod \
+ $method $test"
close $o
}
}
}
-
- #
- # Run subdb tests with varying pagesizes too.
- #
- if { $run == 0 } {
- set o [open ALL.OUT a]
- subdb -$i $display $run $o $args
- close $o
+ }
+ }
+ #
+ # Run access method tests at default page size in thread-enabled env.
+ # We're not truly running threaded tests, just testing the interface.
+ #
+ foreach method "btree rbtree hash queue queueext recno frecno rrecno" {
+ puts "Running $method tests in a threaded txn env"
+ foreach sub {test sdb} {
+ foreach test $test_names($sub) {
+ if { $run == 0 } {
+ set o [open ALL.OUT a]
+ eval {run_envmethod -$method $test \
+ $display $run $o -thread}
+ close $o
+ }
+ if { $run } {
+ if [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl; \
+ eval {run_envmethod -$method $test \
+ $display $run stdout -thread}" \
+ >>& ALL.OUT } res] {
+ set o [open ALL.OUT a]
+ puts $o "FAIL: run_envmethod \
+ $method $test -thread"
+ close $o
+ }
+ }
}
- if { $run == 1 } {
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- subdb -$i $display $run stdout $args" \
- >>& ALL.OUT } res] {
+ }
+ }
+ #
+ # Run access method tests at default page size with -alloc enabled.
+ #
+ foreach method "btree rbtree hash queue queueext recno frecno rrecno" {
+ puts "Running $method tests in an env with -alloc"
+ foreach sub {test sdb} {
+ foreach test $test_names($sub) {
+ if { $run == 0 } {
set o [open ALL.OUT a]
- puts $o "FAIL: subdb -$i test"
+ eval {run_envmethod -$method $test \
+ $display $run $o -alloc}
close $o
}
+ if { $run } {
+ if [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl; \
+ eval {run_envmethod -$method $test \
+ $display $run stdout -alloc}" \
+ >>& ALL.OUT } res] {
+ set o [open ALL.OUT a]
+ puts $o "FAIL: run_envmethod \
+ $method $test -alloc"
+ close $o
+ }
+ }
}
}
}
- set args $save_args
#
- # Run access method tests at default page size in one env.
+ # Run tests using proc r. The replication tests have been
+ # moved from run_std to run_all.
#
- foreach i "btree rbtree hash queue queueext recno frecno rrecno" {
- puts "Running $i tests in an env"
- if { $run == 0 } {
+ set test_list [list {"replication" "rep"}]
+ #
+ # If release supports encryption, run security tests.
+ #
+ if { $has_crypto == 1 } {
+ lappend test_list {"security" "sec"}
+ }
+ #
+ # If configured for RPC, then run rpc tests too.
+ #
+ if { [file exists ./berkeley_db_svc] ||
+ [file exists ./berkeley_db_cxxsvc] ||
+ [file exists ./berkeley_db_javasvc] } {
+ lappend test_list {"RPC" "rpc"}
+ }
+
+ foreach pair $test_list {
+ set msg [lindex $pair 0]
+ set cmd [lindex $pair 1]
+ puts "Running $msg tests"
+ if [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl; \
+ r $rflags $cmd $args" >>& ALL.OUT } res] {
set o [open ALL.OUT a]
- run_envmethod1 -$i 1 $runtests $display \
- $run $o $args
+ puts $o "FAIL: $cmd test"
close $o
}
- if { $run } {
- if [catch {exec $tclsh_path \
- << "source $test_path/test.tcl; \
- run_envmethod1 -$i 1 $runtests $display \
- $run stdout $args" \
- >>& ALL.OUT } res] {
- set o [open ALL.OUT a]
- puts $o \
- "FAIL: run_envmethod1 $i"
- close $o
- }
- }
}
# If not actually running, no need to check for failure.
@@ -1225,62 +1501,90 @@ proc run_all { args } {
# Run method tests in one environment. (As opposed to run_envmethod
# which runs each test in its own, new environment.)
#
-proc run_envmethod1 { method {start 1} {stop 0} {display 0} {run 1} \
- { outfile stdout } args } {
+proc run_envmethod1 { method {display 0} {run 1} { outfile stdout } args } {
global __debug_on
global __debug_print
+ global __debug_test
+ global is_envmethod
+ global test_names
global parms
- global runtests
source ./include.tcl
- if { $stop == 0 } {
- set stop $runtests
- }
if { $run == 1 } {
- puts "run_envmethod1: $method $start $stop $args"
+ puts "run_envmethod1: $method $args"
}
- set txn ""
+ set is_envmethod 1
if { $run == 1 } {
check_handles
env_cleanup $testdir
error_check_good envremove [berkdb envremove -home $testdir] 0
- set env [eval {berkdb env -create -mode 0644 -home $testdir}]
+ set env [eval {berkdb_env -create -cachesize {0 10000000 0}} \
+ {-mode 0644 -home $testdir}]
error_check_good env_open [is_valid_env $env] TRUE
append largs " -env $env "
}
+ if { $display } {
+ # The envmethod1 tests can't be split up, since they share
+ # an env.
+ puts $outfile "eval run_envmethod1 $method $args"
+ }
+
set stat [catch {
- for { set i $start } { $i <= $stop } {incr i} {
- set name [format "test%03d" $i]
- if { [info exists parms($name)] != 1 } {
- puts "[format Test%03d $i] disabled in\
- testparams.tcl; skipping."
+ foreach test $test_names(test) {
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in\
+ testparams.tcl; skipping."
continue
}
- if { $display } {
- puts -nonewline $outfile "eval $name $method"
- puts -nonewline $outfile " $parms($name) $args"
- puts $outfile " ; verify_dir $testdir \"\" 1"
- }
if { $run } {
- check_handles $outfile
puts $outfile "[timestamp]"
- eval $name $method $parms($name) $largs
+ eval $test $method $parms($test) $largs
if { $__debug_print != 0 } {
puts $outfile ""
}
if { $__debug_on != 0 } {
- debug
+ debug $__debug_test
}
}
flush stdout
flush stderr
}
} res]
- if { $run == 1 } {
- error_check_good envclose [$env close] 0
+ if { $stat != 0} {
+ global errorInfo;
+
+ set fnl [string first "\n" $errorInfo]
+ set theError [string range $errorInfo 0 [expr $fnl - 1]]
+ if {[string first FAIL $errorInfo] == -1} {
+ error "FAIL:[timestamp]\
+ run_envmethod: $method $test: $theError"
+ } else {
+ error $theError;
+ }
}
+ set stat [catch {
+ foreach test $test_names(test) {
+ if { [info exists parms($test)] != 1 } {
+ puts stderr "$test disabled in\
+ testparams.tcl; skipping."
+ continue
+ }
+ if { $run } {
+ puts $outfile "[timestamp]"
+ eval $test $method $parms($test) $largs
+ if { $__debug_print != 0 } {
+ puts $outfile ""
+ }
+ if { $__debug_on != 0 } {
+ debug $__debug_test
+ }
+ }
+ flush stdout
+ flush stderr
+ }
+ } res]
if { $stat != 0} {
global errorInfo;
@@ -1288,10 +1592,165 @@ proc run_envmethod1 { method {start 1} {stop 0} {display 0} {run 1} \
set theError [string range $errorInfo 0 [expr $fnl - 1]]
if {[string first FAIL $errorInfo] == -1} {
error "FAIL:[timestamp]\
- run_envmethod1: $method $i: $theError"
+ run_envmethod1: $method $test: $theError"
} else {
error $theError;
}
}
+ if { $run == 1 } {
+ error_check_good envclose [$env close] 0
+ check_handles $outfile
+ }
+ set is_envmethod 0
+
+}
+# Run the secondary index tests.
+proc sindex { {display 0} {run 1} {outfile stdout} {verbose 0} args } {
+ global test_names
+ global testdir
+ global verbose_check_secondaries
+ set verbose_check_secondaries $verbose
+ # Standard number of secondary indices to create if a single-element
+ # list of methods is passed into the secondary index tests.
+ global nsecondaries
+ set nsecondaries 2
+
+ # Run basic tests with a single secondary index and a small number
+ # of keys, then again with a larger number of keys. (Note that
+ # we can't go above 5000, since we use two items from our
+ # 10K-word list for each key/data pair.)
+ foreach n { 200 5000 } {
+ foreach pm { btree hash recno frecno queue queueext } {
+ foreach sm { dbtree dhash ddbtree ddhash btree hash } {
+ foreach test $test_names(si) {
+ if { $display } {
+ puts -nonewline $outfile \
+ "eval $test {\[list\
+ $pm $sm $sm\]} $n ;"
+ puts $outfile " verify_dir \
+ $testdir \"\" 1"
+ }
+ if { $run } {
+ check_handles $outfile
+ eval $test \
+ {[list $pm $sm $sm]} $n
+ verify_dir $testdir "" 1
+ }
+ }
+ }
+ }
+ }
+
+ # Run tests with 20 secondaries.
+ foreach pm { btree hash } {
+ set methlist [list $pm]
+ for { set j 1 } { $j <= 20 } {incr j} {
+ # XXX this should incorporate hash after #3726
+ if { $j % 2 == 0 } {
+ lappend methlist "dbtree"
+ } else {
+ lappend methlist "ddbtree"
+ }
+ }
+ foreach test $test_names(si) {
+ if { $display } {
+ puts "eval $test {\[list $methlist\]} 500"
+ }
+ if { $run } {
+ eval $test {$methlist} 500
+ }
+ }
+ }
+}
+
+# Run secondary index join test. (There's no point in running
+# this with both lengths, the primary is unhappy for now with fixed-
+# length records (XXX), and we need unsorted dups in the secondaries.)
+proc sijoin { {display 0} {run 1} {outfile stdout} } {
+ foreach pm { btree hash recno } {
+ if { $display } {
+ foreach sm { btree hash } {
+ puts $outfile "eval sijointest\
+ {\[list $pm $sm $sm\]} 1000"
+ }
+ puts $outfile "eval sijointest\
+ {\[list $pm btree hash\]} 1000"
+ puts $outfile "eval sijointest\
+ {\[list $pm hash btree\]} 1000"
+ }
+ if { $run } {
+ foreach sm { btree hash } {
+ eval sijointest {[list $pm $sm $sm]} 1000
+ }
+ eval sijointest {[list $pm btree hash]} 1000
+ eval sijointest {[list $pm hash btree]} 1000
+ }
+ }
+}
+
+proc run { proc_suffix method {start 1} {stop 999} } {
+ global test_names
+
+ switch -exact -- $proc_suffix {
+ envmethod -
+ method -
+ recd -
+ repmethod -
+ reptest -
+ secenv -
+ secmethod {
+ # Run_recd runs the recd tests, all others
+ # run the "testxxx" tests.
+ if { $proc_suffix == "recd" } {
+ set testtype recd
+ } else {
+ set testtype test
+ }
+
+ for { set i $start } { $i <= $stop } { incr i } {
+ set name [format "%s%03d" $testtype $i]
+ # If a test number is missing, silently skip
+ # to next test; sparse numbering is allowed.
+ if { [lsearch -exact $test_names($testtype) \
+ $name] == -1 } {
+ continue
+ }
+ run_$proc_suffix $method $name
+ }
+ }
+ default {
+ puts "$proc_suffix is not set up with to be used with run"
+ }
+ }
+}
+
+
+# We want to test all of 512b, 8Kb, and 64Kb pages, but chances are one
+# of these is the default pagesize. We don't want to run all the AM tests
+# twice, so figure out what the default page size is, then return the
+# other two.
+proc get_test_pagesizes { } {
+ # Create an in-memory database.
+ set db [berkdb_open -create -btree]
+ error_check_good gtp_create [is_valid_db $db] TRUE
+ set statret [$db stat]
+ set pgsz 0
+ foreach pair $statret {
+ set fld [lindex $pair 0]
+ if { [string compare $fld {Page size}] == 0 } {
+ set pgsz [lindex $pair 1]
+ }
+ }
+
+ error_check_good gtp_close [$db close] 0
+
+ error_check_bad gtp_pgsz $pgsz 0
+ switch $pgsz {
+ 512 { return {8192 65536} }
+ 8192 { return {512 65536} }
+ 65536 { return {512 8192} }
+ default { return {512 8192 65536} }
+ }
+ error_check_good NOTREACHED 0 1
}
diff --git a/db/test/test001.tcl b/db/test/test001.tcl
index fa8e112d1..31037c777 100644
--- a/db/test/test001.tcl
+++ b/db/test/test001.tcl
@@ -1,76 +1,131 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test001.tcl,v 11.17 2000/12/06 16:08:05 bostic Exp $
+# $Id: test001.tcl,v 11.35 2003/09/08 18:12:56 bostic Exp $
#
-# DB Test 1 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc test001 { method {nentries 10000} {start 0} {tnum "01"} args } {
+# TEST test001
+# TEST Small keys/data
+# TEST Put/get per key
+# TEST Dump file
+# TEST Close, reopen
+# TEST Dump file
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+proc test001 { method {nentries 10000} \
+ {start 0} {skip 1} {tnum "001"} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: $method ($args) $nentries equal key/data pairs"
- if { $start != 0 } {
- puts "\tStarting at $start"
- }
-
# Create the database and open the dictionary
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ # If we are not using an external env, then test setting
+ # the database cache size and using multiple caches.
+ set txnenv 0
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
+ append args " -cachesize {0 1048576 3} "
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ }
+ puts "Test$tnum: $method ($args) $nentries equal key/data pairs"
+ set did [open $dict]
+
+ # The "start" variable determines the record number to start
+ # with, if we're using record numbers. The "skip" variable
+ # determines whether to start with the first entry in the
+ # dict file (if skip = 0) or skip over "start" entries (skip = 1).
+ # Skip is set to 1 to get different key/data pairs for
+ # different iterations of replication tests. Skip must be set
+ # to 0 if we're running a test that uses 10000 iterations,
+ # otherwise we run out of data to read in.
+
+ puts "\tTest$tnum: starting at $start"
+ if { $skip == 1 } {
+ for { set count 0 } { $count < $start } { incr count } {
+ gets $did str
+ }
}
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
+ set temp $testdir/temp
cleanup $testdir $env
+
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args $omethod $testfile]
+ -create -mode 0644} $args $omethod $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- set did [open $dict]
set pflags ""
set gflags ""
set txn ""
- set nentries [expr $nentries + $start]
-
if { [is_record_based $method] == 1 } {
set checkfunc test001_recno.check
append gflags " -recno"
} else {
set checkfunc test001.check
}
- puts "\tTest0$tnum.a: put/get loop"
+ puts "\tTest$tnum.a: put/get loop"
# Here is the loop where we put and get each key/data pair
- set count $start
+ set count 0
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
global kvals
- set key [expr $count + 1]
+ set key [expr $count + 1 + $start]
+ if { 0xffffffff > 0 && $key > 0xffffffff } {
+ set key [expr $key - 0x100000000]
+ }
+ if { $key == 0 || $key - 0xffffffff == 1 } {
+ incr key
+ incr count
+ }
set kvals($key) [pad_data $method $str]
} else {
set key $str
set str [reverse $str]
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval \
{$db put} $txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ if { $count % 50 == 0 } {
+ error_check_good txn_checkpoint($count) \
+ [$env txn_checkpoint] 0
+ }
+ }
set ret [eval {$db get} $gflags {$key}]
error_check_good \
@@ -86,60 +141,74 @@ proc test001 { method {nentries 10000} {start 0} {tnum "01"} args } {
error_check_good getbothBAD [llength $ret] 0
incr count
- if { [expr $count + 1] == 0 } {
- incr count
- }
}
close $did
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: dump file"
+
+ puts "\tTest$tnum.b: dump file"
dump_file $db $txn $t1 $checkfunc
+ #
+ # dump_file should just have been "get" calls, so
+ # aborting a get should really be a no-op. Abort
+ # just for the fun of it.
+ if { $txnenv == 1 } {
+ error_check_good txn [$t abort] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
if { [is_record_based $method] == 1 } {
set oid [open $t2 w]
- for {set i [expr $start + 1]} {$i <= $nentries} {set i [incr i]} {
- if { $i == 0 } {
+ for { set i 1 } { $i <= $nentries } { incr i } {
+ set j [expr $i + $start]
+ if { 0xffffffff > 0 && $j > 0xffffffff } {
+ set j [expr $j - 0x100000000]
+ }
+ if { $j == 0 } {
incr i
+ incr j
}
- puts $oid $i
+ puts $oid $j
}
close $oid
} else {
- set q q
- filehead $nentries $dict $t2
+ filehead [expr $nentries + $start] $dict $t2 [expr $start + 1]
}
- filesort $t2 $t3
- file rename -force $t3 $t2
+ filesort $t2 $temp
+ file rename -force $temp $t2
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
- puts "\tTest0$tnum.c: close, open, and dump file"
+ puts "\tTest$tnum.c: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction "-first" "-next"
if { [string compare $omethod "-recno"] != 0 } {
filesort $t1 $t3
}
- error_check_good Test0$tnum:diff($t2,$t3) \
+ error_check_good Test$tnum:diff($t2,$t3) \
[filecmp $t2 $t3] 0
# Now, reopen the file and run the last test again in the
# reverse direction.
- puts "\tTest0$tnum.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ puts "\tTest$tnum.d: close, open, and dump file in reverse direction"
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction "-last" "-prev"
if { [string compare $omethod "-recno"] != 0 } {
filesort $t1 $t3
}
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
}
diff --git a/db/test/test002.tcl b/db/test/test002.tcl
index 882240b77..c46bc9841 100644
--- a/db/test/test002.tcl
+++ b/db/test/test002.tcl
@@ -1,17 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test002.tcl,v 11.13 2000/08/25 14:21:53 sue Exp $
+# $Id: test002.tcl,v 11.20 2003/01/08 05:53:36 bostic Exp $
#
-# DB Test 2 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and a fixed, medium length data string;
-# retrieve each. After all are entered, retrieve all; compare output
-# to original. Close file, reopen, do retrieve and re-verify.
-
-set datastr abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
+# TEST test002
+# TEST Small keys/medium data
+# TEST Put/get per key
+# TEST Dump file
+# TEST Close, reopen
+# TEST Dump file
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and a fixed, medium length data string;
+# TEST retrieve each. After all are entered, retrieve all; compare output
+# TEST to original. Close file, reopen, do retrieve and re-verify.
proc test002 { method {nentries 10000} args } {
global datastr
@@ -21,8 +25,7 @@ proc test002 { method {nentries 10000} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test002: $method ($args) $nentries key <fixed data> pairs"
-
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -34,14 +37,28 @@ proc test002 { method {nentries 10000} args } {
set testfile test002.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
# Create the database and open the dictionary
+ puts "Test002: $method ($args) $nentries key <fixed data> pairs"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -63,8 +80,16 @@ proc test002 { method {nentries 10000} args } {
} else {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {$key [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set ret [eval {$db get} $gflags {$key}]
@@ -76,7 +101,15 @@ proc test002 { method {nentries 10000} args } {
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest002.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test002.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary
@@ -100,7 +133,7 @@ proc test002 { method {nentries 10000} args } {
# Now, reopen the file and run the last test again.
puts "\tTest002.c: close, open, and dump file"
- open_and_dump_file $testfile $env $txn $t1 test002.check \
+ open_and_dump_file $testfile $env $t1 test002.check \
dump_file_direction "-first" "-next"
if { [string compare $omethod "-recno"] != 0 } {
@@ -111,7 +144,7 @@ proc test002 { method {nentries 10000} args } {
# Now, reopen the file and run the last test again in reverse direction.
puts "\tTest002.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 test002.check \
+ open_and_dump_file $testfile $env $t1 test002.check \
dump_file_direction "-last" "-prev"
if { [string compare $omethod "-recno"] != 0 } {
diff --git a/db/test/test003.tcl b/db/test/test003.tcl
index 013af2d41..db5a385e7 100644
--- a/db/test/test003.tcl
+++ b/db/test/test003.tcl
@@ -1,14 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test003.tcl,v 11.18 2000/08/25 14:21:54 sue Exp $
+# $Id: test003.tcl,v 11.26 2003/01/08 05:53:36 bostic Exp $
#
-# DB Test 3 {access method}
-# Take the source files and dbtest executable and enter their names as the
-# key with their contents as data. After all are entered, retrieve all;
-# compare output to original. Close file, reopen, do retrieve and re-verify.
+# TEST test003
+# TEST Small keys/large data
+# TEST Put/get per key
+# TEST Dump file
+# TEST Close, reopen
+# TEST Dump file
+# TEST
+# TEST Take the source files and dbtest executable and enter their names
+# TEST as the key with their contents as data. After all are entered,
+# TEST retrieve all; compare output to original. Close file, reopen, do
+# TEST retrieve and re-verify.
proc test003 { method args} {
global names
source ./include.tcl
@@ -23,6 +30,8 @@ proc test003 { method args} {
puts "Test003: $method ($args) filename=key filecontents=data pairs"
# Create the database and open the dictionary
+ set limit 0
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -34,6 +43,12 @@ proc test003 { method args} {
set testfile test003.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ set limit 100
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -42,7 +57,7 @@ proc test003 { method args} {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args $omethod $testfile]
+ -create -mode 0644} $args $omethod $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
set gflags ""
@@ -55,11 +70,14 @@ proc test003 { method args} {
}
# Here is the loop where we put and get each key/data pair
- set file_list [ glob \
- { $test_path/../*/*.[ch] } $test_path/*.tcl *.{a,o,lo,exe} \
- $test_path/file.1 ]
-
- puts "\tTest003.a: put/get loop"
+ set file_list [get_file_list]
+ if { $limit } {
+ if { [llength $file_list] > $limit } {
+ set file_list [lrange $file_list 1 $limit]
+ }
+ }
+ set len [llength $file_list]
+ puts "\tTest003.a: put/get loop $len entries"
set count 0
foreach f $file_list {
if { [string compare [file type $f] "file"] != 0 } {
@@ -78,9 +96,17 @@ proc test003 { method args} {
fconfigure $fid -translation binary
set data [read $fid]
close $fid
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Should really catch errors
set fid [open $t4 w]
@@ -104,7 +130,15 @@ proc test003 { method args} {
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest003.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_bin_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the entries in the
@@ -135,7 +169,7 @@ proc test003 { method args} {
# Now, reopen the file and run the last test again.
puts "\tTest003.c: close, open, and dump file"
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_bin_file_direction "-first" "-next"
if { [is_record_based $method] == 1 } {
@@ -147,8 +181,7 @@ proc test003 { method args} {
# Now, reopen the file and run the last test again in reverse direction.
puts "\tTest003.d: close, open, and dump file in reverse direction"
-
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_bin_file_direction "-last" "-prev"
if { [is_record_based $method] == 1 } {
diff --git a/db/test/test004.tcl b/db/test/test004.tcl
index 0b076d6cf..df4a9151d 100644
--- a/db/test/test004.tcl
+++ b/db/test/test004.tcl
@@ -1,50 +1,68 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test004.tcl,v 11.15 2000/08/25 14:21:54 sue Exp $
+# $Id: test004.tcl,v 11.23 2003/01/08 05:53:38 bostic Exp $
#
-# DB Test 4 {access method}
-# Check that cursor operations work. Create a database.
-# Read through the database sequentially using cursors and
-# delete each element.
-proc test004 { method {nentries 10000} {reopen 4} {build_only 0} args} {
+# TEST test004
+# TEST Small keys/medium data
+# TEST Put/get per key
+# TEST Sequential (cursor) get/delete
+# TEST
+# TEST Check that cursor operations work. Create a database.
+# TEST Read through the database sequentially using cursors and
+# TEST delete each element.
+proc test004 { method {nentries 10000} {reopen "004"} {build_only 0} args} {
source ./include.tcl
set do_renumber [is_rrecno $method]
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum test00$reopen
-
- puts -nonewline "$tnum:\
- $method ($args) $nentries delete small key; medium data pairs"
- if {$reopen == 5} {
- puts "(with close)"
- } else {
- puts ""
- }
+ set tnum test$reopen
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test004.db
+ set testfile $testdir/$tnum.db
set env NULL
} else {
- set testfile test004.db
+ set testfile $tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ }
+
+ puts -nonewline "$tnum:\
+ $method ($args) $nentries delete small key; medium data pairs"
+ if {$reopen == "005"} {
+ puts "(with close)"
+ } else {
+ puts ""
}
+
# Create the database and open the dictionary
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644} $args {$omethod $testfile}]
+ set db [eval {berkdb_open -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -60,7 +78,7 @@ proc test004 { method {nentries 10000} {reopen 4} {build_only 0} args} {
# Here is the loop where we put and get each key/data pair
set kvals ""
- puts "\tTest00$reopen.a: put/get loop"
+ puts "\tTest$reopen.a: put/get loop"
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
set key [expr $count + 1]
@@ -71,8 +89,17 @@ proc test004 { method {nentries 10000} {reopen 4} {build_only 0} args} {
set datastr [ make_data_str $str ]
- set ret [eval {$db put} $txn $pflags {$key [chop_data $method $datastr]}]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn $pflags \
+ {$key [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set ret [eval {$db get} $gflags {$key}]
error_check_good "$tnum:put" $ret \
@@ -83,16 +110,21 @@ proc test004 { method {nentries 10000} {reopen 4} {build_only 0} args} {
if { $build_only == 1 } {
return $db
}
- if { $reopen == 5 } {
+ if { $reopen == "005" } {
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $args {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
}
- puts "\tTest00$reopen.b: get/delete loop"
+ puts "\tTest$reopen.b: get/delete loop"
# Now we will get each key from the DB and compare the results
# to the original, then delete it.
set outf [open $t1 w]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set c [eval {$db cursor} $txn]
set count 0
@@ -117,16 +149,19 @@ proc test004 { method {nentries 10000} {reopen 4} {build_only 0} args} {
}
close $outf
error_check_good curs_close [$c close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now compare the keys to see if they match the dictionary
if { [is_record_based $method] == 1 } {
- error_check_good test00$reopen:keys_deleted $count $nentries
+ error_check_good test$reopen:keys_deleted $count $nentries
} else {
set q q
filehead $nentries $dict $t3
filesort $t3 $t2
filesort $t1 $t3
- error_check_good Test00$reopen:diff($t3,$t2) \
+ error_check_good Test$reopen:diff($t3,$t2) \
[filecmp $t3 $t2] 0
}
diff --git a/db/test/test005.tcl b/db/test/test005.tcl
index 4cb5d88df..0b0b72813 100644
--- a/db/test/test005.tcl
+++ b/db/test/test005.tcl
@@ -1,14 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test005.tcl,v 11.4 2000/05/22 12:51:38 bostic Exp $
+# $Id: test005.tcl,v 11.9 2003/01/08 05:53:38 bostic Exp $
#
-# DB Test 5 {access method}
-# Check that cursor operations work. Create a database; close database and
-# reopen it. Then read through the database sequentially using cursors and
-# delete each element.
+# TEST test005
+# TEST Small keys/medium data
+# TEST Put/get per key
+# TEST Close, reopen
+# TEST Sequential (cursor) get/delete
+# TEST
+# TEST Check that cursor operations work. Create a database; close
+# TEST it and reopen it. Then read through the database sequentially
+# TEST using cursors and delete each element.
proc test005 { method {nentries 10000} args } {
- eval {test004 $method $nentries 5 0} $args
+ eval {test004 $method $nentries "005" 0} $args
}
diff --git a/db/test/test006.tcl b/db/test/test006.tcl
index 9364d2a4f..202d4e07b 100644
--- a/db/test/test006.tcl
+++ b/db/test/test006.tcl
@@ -1,118 +1,191 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test006.tcl,v 11.13 2000/08/25 14:21:54 sue Exp $
+# $Id: test006.tcl,v 11.23 2003/09/04 23:41:16 bostic Exp $
#
-# DB Test 6 {access method}
-# Keyed delete test.
-# Create database.
-# Go through database, deleting all entries by key.
-proc test006 { method {nentries 10000} {reopen 0} {tnum 6} args} {
+# TEST test006
+# TEST Small keys/medium data
+# TEST Put/get per key
+# TEST Keyed delete and verify
+# TEST
+# TEST Keyed delete test.
+# TEST Create database.
+# TEST Go through database, deleting all entries by key.
+# TEST Then do the same for unsorted and sorted dups.
+proc test006 { method {nentries 10000} {reopen 0} {tnum "006"} \
+ {ndups 5} args } {
+
+ test006_body $method $nentries $reopen $tnum 1 "" "" $args
+
+ # For methods supporting dups, run the test with sorted and
+ # with unsorted dups.
+ if { [is_btree $method] == 1 || [is_hash $method] == 1 } {
+ foreach {sort flags} {unsorted -dup sorted "-dup -dupsort"} {
+ test006_body $method $nentries $reopen \
+ $tnum $ndups $sort $flags $args
+ }
+ }
+}
+
+proc test006_body { method {nentries 10000} {reopen 0} {tnum "006"} \
+ {ndups 5} sort flags {largs ""} } {
+
source ./include.tcl
set do_renumber [is_rrecno $method]
- set args [convert_args $method $args]
- set omethod [convert_method $method]
+ set largs [convert_args $method $largs]
+ set omethod [convert_method $method]
- if { $tnum < 10 } {
- set tname Test00$tnum
- set dbname test00$tnum
- } else {
- set tname Test0$tnum
- set dbname test0$tnum
- }
- puts -nonewline "$tname: $method ($args) "
- puts -nonewline "$nentries equal small key; medium data pairs"
- if {$reopen == 1} {
- puts " (with close)"
- } else {
- puts ""
- }
+ set tname Test$tnum
+ set dbname test$tnum
# Create the database and open the dictionary
- set eindex [lsearch -exact $args "-env"]
+ set txnenv 0
+ set eindex [lsearch -exact $largs "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/$dbname.db
+ set basename $testdir/$dbname
set env NULL
} else {
- set testfile $dbname.db
+ set basename $dbname
incr eindex
- set env [lindex $args $eindex]
+ set env [lindex $largs $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append largs " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ }
+ puts -nonewline "$tname: $method ($flags $largs) "
+ puts -nonewline "$nentries equal small key; medium data pairs"
+ if {$reopen == 1} {
+ puts " (with close)"
+ } else {
+ puts ""
}
set pflags ""
set gflags ""
set txn ""
- set count 0
if { [is_record_based $method] == 1 } {
- append gflags " -recno"
+ append gflags " -recno"
}
- # Here is the loop where we put and get each key/data pair
-
cleanup $testdir $env
- set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+
+ # Here is the loop where we put and get each key/data pair.
+
+ set count 0
+ set testfile $basename$sort.db
+ set db [eval {berkdb_open -create \
+ -mode 0644} $largs $flags {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
+ puts "\t$tname.a: put/get loop"
set did [open $dict]
while { [gets $did str] != -1 && $count < $nentries } {
- if { [is_record_based $method] == 1 } {
- set key [expr $count + 1 ]
- } else {
- set key $str
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1 ]
+ } else {
+ set key $str
+ }
+
+ set str [make_data_str $str]
+ for { set j 1 } { $j <= $ndups } {incr j} {
+ set datastr $j$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn \
+ [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn $pflags \
+ {$key [chop_data $method $datastr]}]
+ error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn \
+ [$t commit] 0
+ }
}
-
- set datastr [make_data_str $str]
-
- set ret [eval {$db put} \
- $txn $pflags {$key [chop_data $method $datastr]}]
- error_check_good put $ret 0
-
- set ret [eval {$db get} $gflags {$key}]
- error_check_good "$tname: put $datastr got $ret" \
- $ret [list [list $key [pad_data $method $datastr]]]
incr count
}
close $did
+ # Close and reopen database, if testing reopen.
+
if { $reopen == 1 } {
error_check_good db_close [$db close] 0
- set db [eval {berkdb_open} $args {$testfile}]
+ set db [eval {berkdb_open} $largs {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
}
# Now we will get each key from the DB and compare the results
# to the original, then delete it.
- set count 0
- set did [open $dict]
- set key 0
- while { [gets $did str] != -1 && $count < $nentries } {
- if { $do_renumber == 1 } {
- set key 1
- } elseif { [is_record_based $method] == 1 } {
- incr key
- } else {
- set key $str
- }
- set datastr [make_data_str $str]
+ puts "\t$tname.b: get/delete loop"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_substr $dbc $db] 1
+
+ set i 1
+ for { set ret [$dbc get -first] } \
+ { [string length $ret] != 0 } \
+ { set ret [$dbc get -next] } {
+ set key [lindex [lindex $ret 0] 0]
+ set data [lindex [lindex $ret 0] 1]
+ if { $i == 1 } {
+ set curkey $key
+ }
+ error_check_good seq_get:key $key $curkey
- set ret [eval {$db get} $gflags {$key}]
- error_check_good "$tname: get $datastr got $ret" \
- $ret [list [list $key [pad_data $method $datastr]]]
+ if { $i == $ndups } {
+ set i 1
+ } else {
+ incr i
+ }
- set ret [eval {$db del} $txn {$key}]
+ # Now delete the key
+ set ret [$dbc del]
error_check_good db_del:$key $ret 0
- incr count
}
- close $did
-
+ error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
+
+ puts "\t$tname.c: verify empty file"
+ # Double check that file is now empty
+ set db [eval {berkdb_open} $largs $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_substr $dbc $db] 1
+ set ret [$dbc get -first]
+ error_check_good get_on_empty [string length $ret] 0
+ error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+error_check_good db_close [$db close] 0
}
diff --git a/db/test/test007.tcl b/db/test/test007.tcl
index 305740f03..7c858a0c8 100644
--- a/db/test/test007.tcl
+++ b/db/test/test007.tcl
@@ -1,13 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test007.tcl,v 11.5 2000/05/22 12:51:38 bostic Exp $
+# $Id: test007.tcl,v 11.11 2003/01/08 05:53:39 bostic Exp $
#
-# DB Test 7 {access method}
-# Check that delete operations work. Create a database; close database and
-# reopen it. Then issues delete by key for each entry.
-proc test007 { method {nentries 10000} {tnum 7} args} {
- eval {test006 $method $nentries 1 $tnum} $args
+# TEST test007
+# TEST Small keys/medium data
+# TEST Put/get per key
+# TEST Close, reopen
+# TEST Keyed delete
+# TEST
+# TEST Check that delete operations work. Create a database; close
+# TEST database and reopen it. Then issues delete by key for each
+# TEST entry. (Test006 plus reopen)
+proc test007 { method {nentries 10000} {tnum "007"} {ndups 5} args} {
+ eval {test006 $method $nentries 1 $tnum $ndups} $args
}
diff --git a/db/test/test008.tcl b/db/test/test008.tcl
index 34144391c..ee0258eb3 100644
--- a/db/test/test008.tcl
+++ b/db/test/test008.tcl
@@ -1,34 +1,43 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test008.tcl,v 11.17 2000/10/19 17:35:39 sue Exp $
+# $Id: test008.tcl,v 11.25 2003/01/08 05:53:40 bostic Exp $
#
-# DB Test 8 {access method}
-# Take the source files and dbtest executable and enter their names as the
-# key with their contents as data. After all are entered, begin looping
-# through the entries; deleting some pairs and then readding them.
-proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
+# TEST test008
+# TEST Small keys/large data
+# TEST Put/get per key
+# TEST Loop through keys by steps (which change)
+# TEST ... delete each key at step
+# TEST ... add each key back
+# TEST ... change step
+# TEST Confirm that overflow pages are getting reused
+# TEST
+# TEST Take the source files and dbtest executable and enter their names as
+# TEST the key with their contents as data. After all are entered, begin
+# TEST looping through the entries; deleting some pairs and then readding them.
+proc test008 { method {reopen "008"} {debug 0} args} {
source ./include.tcl
- set tnum test00$reopen
+ set tnum test$reopen
set args [convert_args $method $args]
set omethod [convert_method $method]
if { [is_record_based $method] == 1 } {
- puts "Test00$reopen skipping for method $method"
+ puts "Test$reopen skipping for method $method"
return
}
puts -nonewline "$tnum: $method filename=key filecontents=data pairs"
- if {$reopen == 9} {
+ if {$reopen == "009"} {
puts "(with close)"
} else {
puts ""
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -40,6 +49,11 @@ proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
set testfile $tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -48,7 +62,7 @@ proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644} \
+ set db [eval {berkdb_open -create -mode 0644} \
$args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -57,25 +71,41 @@ proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
set txn ""
# Here is the loop where we put and get each key/data pair
- set file_list [glob ../*/*.c ./*.o ./*.lo ./*.exe]
+ set file_list [get_file_list]
set count 0
- puts "\tTest00$reopen.a: Initial put/get loop"
+ puts "\tTest$reopen.a: Initial put/get loop"
foreach f $file_list {
set names($count) $f
set key $f
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
put_file $db $txn $pflags $f
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
get_file $db $txn $gflags $f $t4
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- error_check_good Test00$reopen:diff($f,$t4) \
+ error_check_good Test$reopen:diff($f,$t4) \
[filecmp $f $t4] 0
incr count
}
- if {$reopen == 9} {
+ if {$reopen == "009"} {
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $args $testfile]
@@ -85,26 +115,50 @@ proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
# Now we will get step through keys again (by increments) and
# delete all the entries, then re-insert them.
- puts "\tTest00$reopen.b: Delete re-add loop"
+ puts "\tTest$reopen.b: Delete re-add loop"
foreach i "1 2 4 8 16" {
for {set ndx 0} {$ndx < $count} { incr ndx $i} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db del} $txn {$names($ndx)}]
error_check_good db_del:$names($ndx) $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
for {set ndx 0} {$ndx < $count} { incr ndx $i} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
put_file $db $txn $pflags $names($ndx)
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
- if {$reopen == 9} {
+ if {$reopen == "009"} {
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
}
# Now, reopen the file and make sure the key/data pairs look right.
- puts "\tTest00$reopen.c: Dump contents forward"
+ puts "\tTest$reopen.c: Dump contents forward"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_bin_file $db $txn $t1 test008.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set oid [open $t2.tmp w]
foreach f $file_list {
@@ -115,16 +169,24 @@ proc test008 { method {nentries 10000} {reopen 8} {debug 0} args} {
fileremove $t2.tmp
filesort $t1 $t3
- error_check_good Test00$reopen:diff($t3,$t2) \
+ error_check_good Test$reopen:diff($t3,$t2) \
[filecmp $t3 $t2] 0
# Now, reopen the file and run the last test again in reverse direction.
- puts "\tTest00$reopen.d: Dump contents backward"
+ puts "\tTest$reopen.d: Dump contents backward"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_bin_file_direction $db $txn $t1 test008.check "-last" "-prev"
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
filesort $t1 $t3
- error_check_good Test00$reopen:diff($t3,$t2) \
+ error_check_good Test$reopen:diff($t3,$t2) \
[filecmp $t3 $t2] 0
error_check_good close:$db [$db close] 0
}
diff --git a/db/test/test009.tcl b/db/test/test009.tcl
index e9c01875f..898abf7aa 100644
--- a/db/test/test009.tcl
+++ b/db/test/test009.tcl
@@ -1,15 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test009.tcl,v 11.4 2000/05/22 12:51:38 bostic Exp $
+# $Id: test009.tcl,v 11.10 2003/01/08 05:53:40 bostic Exp $
#
-# DB Test 9 {access method}
-# Check that we reuse overflow pages. Create database with lots of
-# big key/data pairs. Go through and delete and add keys back
-# randomly. Then close the DB and make sure that we have everything
-# we think we should.
-proc test009 { method {nentries 10000} args} {
- eval {test008 $method $nentries 9 0} $args
+# TEST test009
+# TEST Small keys/large data
+# TEST Same as test008; close and reopen database
+# TEST
+# TEST Check that we reuse overflow pages. Create database with lots of
+# TEST big key/data pairs. Go through and delete and add keys back
+# TEST randomly. Then close the DB and make sure that we have everything
+# TEST we think we should.
+proc test009 { method args} {
+ eval {test008 $method "009" 0} $args
}
diff --git a/db/test/test010.tcl b/db/test/test010.tcl
index b3aedb2be..5ad011f24 100644
--- a/db/test/test010.tcl
+++ b/db/test/test010.tcl
@@ -1,18 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test010.tcl,v 11.14 2000/08/25 14:21:54 sue Exp $
+# $Id: test010.tcl,v 11.22 2003/01/08 05:53:40 bostic Exp $
#
-# DB Test 10 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; add duplicate
-# records for each.
-# After all are entered, retrieve all; verify output.
-# Close file, reopen, do retrieve and re-verify.
-# This does not work for recno
-proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
+# TEST test010
+# TEST Duplicate test
+# TEST Small key/data pairs.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; add duplicate records for each.
+# TEST After all are entered, retrieve all; verify output.
+# TEST Close file, reopen, do retrieve and re-verify.
+# TEST This does not work for recno
+proc test010 { method {nentries 10000} {ndups 5} {tnum "010"} args } {
source ./include.tcl
set omethod $method
@@ -21,25 +23,40 @@ proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
if { [is_record_based $method] == 1 || \
[is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
+ puts "Test$tnum skipping for method $method"
return
}
- puts "Test0$tnum: $method ($args) $nentries small dup key/data pairs"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
+ puts "Test$tnum: $method ($args) $nentries \
+ small $ndups dup key/data pairs"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
@@ -47,7 +64,7 @@ proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644 -dup} $args {$omethod $testfile}]
+ -create -mode 0644 -dup} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -58,17 +75,30 @@ proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
set count 0
# Here is the loop where we put and get each key/data pair
- set dbc [eval {$db cursor} $txn]
while { [gets $did str] != -1 && $count < $nentries } {
for { set i 1 } { $i <= $ndups } { incr i } {
set datastr $i:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$str [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Now retrieve all the keys matching this key
set x 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
for {set ret [$dbc get "-set" $str]} \
{[llength $ret] != 0} \
{set ret [$dbc get "-next"] } {
@@ -81,25 +111,37 @@ proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
}
set datastr [lindex [lindex $ret 0] 1]
set d [data_of $datastr]
- error_check_good "Test0$tnum:get" $d $str
+ error_check_good "Test$tnum:get" $d $str
set id [ id_of $datastr ]
- error_check_good "Test0$tnum:dup#" $id $x
+ error_check_good "Test$tnum:dup#" $id $x
incr x
}
- error_check_good "Test0$tnum:ndups:$str" [expr $x - 1] $ndups
+ error_check_good "Test$tnum:ndups:$str" [expr $x - 1] $ndups
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
incr count
}
- error_check_good cursor_close [$dbc close] 0
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.a: Checking file for correct duplicates"
+ puts "\tTest$tnum.a: Checking file for correct duplicates"
set dlist ""
for { set i 1 } { $i <= $ndups } {incr i} {
lappend dlist $i
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now compare the keys to see if they match the dictionary entries
set q q
@@ -107,19 +149,27 @@ proc test010 { method {nentries 10000} {ndups 5} {tnum 10} args } {
filesort $t3 $t2
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- puts "\tTest0$tnum.b: Checking file for correct duplicates after close"
+ puts "\tTest$tnum.b: Checking file for correct duplicates after close"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now compare the keys to see if they match the dictionary entries
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
error_check_good db_close [$db close] 0
diff --git a/db/test/test011.tcl b/db/test/test011.tcl
index 444f6240e..704cc5363 100644
--- a/db/test/test011.tcl
+++ b/db/test/test011.tcl
@@ -1,19 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test011.tcl,v 11.20 2000/08/25 14:21:54 sue Exp $
+# $Id: test011.tcl,v 11.29 2003/01/08 05:53:41 bostic Exp $
#
-# DB Test 11 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; add duplicate
-# records for each.
-# Then do some key_first/key_last add_before, add_after operations.
-# This does not work for recno
-# To test if dups work when they fall off the main page, run this with
-# a very tiny page size.
-proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
+# TEST test011
+# TEST Duplicate test
+# TEST Small key/data pairs.
+# TEST Test DB_KEYFIRST, DB_KEYLAST, DB_BEFORE and DB_AFTER.
+# TEST To test off-page duplicates, run with small pagesize.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; add duplicate records for each.
+# TEST Then do some key_first/key_last add_before, add_after operations.
+# TEST This does not work for recno
+# TEST
+# TEST To test if dups work when they fall off the main page, run this with
+# TEST a very tiny page size.
+proc test011 { method {nentries 10000} {ndups 5} {tnum "011"} args } {
global dlist
global rand_init
source ./include.tcl
@@ -21,15 +26,12 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
set dlist ""
if { [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
+ puts "Test$tnum skipping for method $method"
return
}
if { [is_record_based $method] == 1 } {
test011_recno $method $nentries $tnum $args
return
- } else {
- puts -nonewline "Test0$tnum: $method $nentries small dup "
- puts "key/data pairs, cursor ops"
}
if {$ndups < 5} {
set ndups 5
@@ -41,24 +43,42 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
berkdb srand $rand_init
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
+
+ puts -nonewline "Test$tnum: $method $nentries small $ndups dup "
+ puts "key/data pairs, cursor ops"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644} [concat $args "-dup"] {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -73,8 +93,7 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
# We will add dups with values 1, 3, ... $ndups. Then we'll add
# 0 and $ndups+1 using keyfirst/keylast. We'll add 2 and 4 using
# add before and add after.
- puts "\tTest0$tnum.a: put and get duplicate keys."
- set dbc [eval {$db cursor} $txn]
+ puts "\tTest$tnum.a: put and get duplicate keys."
set i ""
for { set i 1 } { $i <= $ndups } { incr i 2 } {
lappend dlist $i
@@ -83,12 +102,26 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
while { [gets $did str] != -1 && $count < $nentries } {
for { set i 1 } { $i <= $ndups } { incr i 2 } {
set datastr $i:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {$str $datastr}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Now retrieve all the keys matching this key
set x 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
for {set ret [$dbc get "-set" $str ]} \
{[llength $ret] != 0} \
{set ret [$dbc get "-next"] } {
@@ -102,22 +135,33 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
set datastr [lindex [lindex $ret 0] 1]
set d [data_of $datastr]
- error_check_good Test0$tnum:put $d $str
+ error_check_good Test$tnum:put $d $str
set id [ id_of $datastr ]
- error_check_good Test0$tnum:dup# $id $x
+ error_check_good Test$tnum:dup# $id $x
incr x 2
}
- error_check_good Test0$tnum:numdups $x $maxodd
+ error_check_good Test$tnum:numdups $x $maxodd
+ error_check_good curs_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
- error_check_good curs_close [$dbc close] 0
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: \
+ puts "\tTest$tnum.b: \
traverse entire file checking duplicates before close."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now compare the keys to see if they match the dictionary entries
set q q
@@ -125,7 +169,7 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
filesort $t3 $t2
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
error_check_good db_close [$db close] 0
@@ -133,34 +177,74 @@ proc test011 { method {nentries 10000} {ndups 5} {tnum 11} args } {
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- puts "\tTest0$tnum.c: \
+ puts "\tTest$tnum.c: \
traverse entire file checking duplicates after close."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now compare the keys to see if they match the dictionary entries
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
- puts "\tTest0$tnum.d: Testing key_first functionality"
+ puts "\tTest$tnum.d: Testing key_first functionality"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
add_dup $db $txn $nentries "-keyfirst" 0 0
set dlist [linsert $dlist 0 0]
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- puts "\tTest0$tnum.e: Testing key_last functionality"
+ puts "\tTest$tnum.e: Testing key_last functionality"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
add_dup $db $txn $nentries "-keylast" [expr $maxodd - 1] 0
lappend dlist [expr $maxodd - 1]
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- puts "\tTest0$tnum.f: Testing add_before functionality"
+ puts "\tTest$tnum.f: Testing add_before functionality"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
add_dup $db $txn $nentries "-before" 2 3
set dlist [linsert $dlist 2 2]
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- puts "\tTest0$tnum.g: Testing add_after functionality"
+ puts "\tTest$tnum.g: Testing add_after functionality"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
add_dup $db $txn $nentries "-after" 4 4
set dlist [linsert $dlist 4 4]
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
@@ -193,7 +277,7 @@ proc add_dup {db txn nentries flag dataval iter} {
$dbc close
}
-proc test011_recno { method {nentries 10000} {tnum 11} largs } {
+proc test011_recno { method {nentries 10000} {tnum "011"} largs } {
global dlist
source ./include.tcl
@@ -201,7 +285,7 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
set omethod [convert_method $method]
set renum [is_rrecno $method]
- puts "Test0$tnum: \
+ puts "Test$tnum: \
$method ($largs) $nentries test cursor insert functionality"
# Create the database and open the dictionary
@@ -209,13 +293,26 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ set txnenv 0
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $largs $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append largs " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -226,7 +323,7 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
append largs " -renumber"
}
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $largs {$omethod $testfile}]
+ -create -mode 0644} $largs {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -247,15 +344,28 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
# Seed the database with an initial record
gets $did str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn {1 [chop_data $method $str]}]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good put $ret 0
set count 1
set dlist "NULL $str"
# Open a cursor
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- puts "\tTest0$tnum.a: put and get entries"
+ puts "\tTest$tnum.a: put and get entries"
while { [gets $did str] != -1 && $count < $nentries } {
# Pick a random key
set key [berkdb random_int 1 $count]
@@ -312,6 +422,9 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
}
close $did
error_check_good cclose [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Create check key file.
set oid [open $t2 w]
@@ -320,25 +433,33 @@ proc test011_recno { method {nentries 10000} {tnum 11} largs } {
}
close $oid
- puts "\tTest0$tnum.b: dump file"
+ puts "\tTest$tnum.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test011_check
- error_check_good Test0$tnum:diff($t2,$t1) \
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ error_check_good Test$tnum:diff($t2,$t1) \
[filecmp $t2 $t1] 0
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.c: close, open, and dump file"
- open_and_dump_file $testfile $env $txn $t1 test011_check \
+ puts "\tTest$tnum.c: close, open, and dump file"
+ open_and_dump_file $testfile $env $t1 test011_check \
dump_file_direction "-first" "-next"
- error_check_good Test0$tnum:diff($t2,$t1) \
+ error_check_good Test$tnum:diff($t2,$t1) \
[filecmp $t2 $t1] 0
- puts "\tTest0$tnum.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 test011_check \
+ puts "\tTest$tnum.d: close, open, and dump file in reverse direction"
+ open_and_dump_file $testfile $env $t1 test011_check \
dump_file_direction "-last" "-prev"
filesort $t1 $t3 -n
- error_check_good Test0$tnum:diff($t2,$t3) \
+ error_check_good Test$tnum:diff($t2,$t3) \
[filecmp $t2 $t3] 0
}
diff --git a/db/test/test012.tcl b/db/test/test012.tcl
index 87127901e..88e40b7ea 100644
--- a/db/test/test012.tcl
+++ b/db/test/test012.tcl
@@ -1,14 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test012.tcl,v 11.14 2000/08/25 14:21:54 sue Exp $
+# $Id: test012.tcl,v 11.21 2003/01/08 05:53:41 bostic Exp $
#
-# DB Test 12 {access method}
-# Take the source files and dbtest executable and enter their contents as
-# the key with their names as data. After all are entered, retrieve all;
-# compare output to original. Close file, reopen, do retrieve and re-verify.
+# TEST test012
+# TEST Large keys/small data
+# TEST Same as test003 except use big keys (source files and
+# TEST executables) and small data (the file/executable names).
+# TEST
+# TEST Take the source files and dbtest executable and enter their contents
+# TEST as the key with their names as data. After all are entered, retrieve
+# TEST all; compare output to original. Close file, reopen, do retrieve and
+# TEST re-verify.
proc test012 { method args} {
global names
source ./include.tcl
@@ -24,6 +29,7 @@ proc test012 { method args} {
puts "Test012: $method ($args) filename=data filecontents=key pairs"
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -35,6 +41,11 @@ proc test012 { method args} {
set testfile test012.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -44,7 +55,7 @@ proc test012 { method args} {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
@@ -52,22 +63,37 @@ proc test012 { method args} {
set txn ""
# Here is the loop where we put and get each key/data pair
- set file_list [glob $test_path/../\[a-z\]*/*.c \
- $test_path/./*.lo ./*.exe]
+ set file_list [get_file_list]
puts "\tTest012.a: put/get loop"
set count 0
foreach f $file_list {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
put_file_as_key $db $txn $pflags $f
set kd [get_file_as_key $db $txn $gflags $f]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest012.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_binkey_file $db $txn $t1 test012.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the data to see if they match the .o and dbtest files
@@ -85,7 +111,7 @@ proc test012 { method args} {
# Now, reopen the file and run the last test again.
puts "\tTest012.c: close, open, and dump file"
- open_and_dump_file $testfile $env $txn $t1 test012.check \
+ open_and_dump_file $testfile $env $t1 test012.check \
dump_binkey_file_direction "-first" "-next"
filesort $t1 $t3
@@ -95,7 +121,7 @@ proc test012 { method args} {
# Now, reopen the file and run the last test again in reverse direction.
puts "\tTest012.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 test012.check\
+ open_and_dump_file $testfile $env $t1 test012.check\
dump_binkey_file_direction "-last" "-prev"
filesort $t1 $t3
diff --git a/db/test/test013.tcl b/db/test/test013.tcl
index 5812cf8f6..416691ea1 100644
--- a/db/test/test013.tcl
+++ b/db/test/test013.tcl
@@ -1,17 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test013.tcl,v 11.18 2000/08/25 14:21:54 sue Exp $
+# $Id: test013.tcl,v 11.24 2003/01/08 05:53:42 bostic Exp $
#
-# DB Test 13 {access method}
-#
-# 1. Insert 10000 keys and retrieve them (equal key/data pairs).
-# 2. Attempt to overwrite keys with NO_OVERWRITE set (expect error).
-# 3. Actually overwrite each one with its datum reversed.
-#
-# No partial testing here.
+# TEST test013
+# TEST Partial put test
+# TEST Overwrite entire records using partial puts.
+# TEST Make surethat NOOVERWRITE flag works.
+# TEST
+# TEST 1. Insert 10000 keys and retrieve them (equal key/data pairs).
+# TEST 2. Attempt to overwrite keys with NO_OVERWRITE set (expect error).
+# TEST 3. Actually overwrite each one with its datum reversed.
+# TEST
+# TEST No partial testing here.
proc test013 { method {nentries 10000} args } {
global errorCode
global errorInfo
@@ -23,9 +26,8 @@ proc test013 { method {nentries 10000} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test013: $method ($args) $nentries equal key/data pairs, put test"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -37,14 +39,28 @@ proc test013 { method {nentries 10000} args } {
set testfile test013.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ puts "Test013: $method ($args) $nentries equal key/data pairs, put test"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -70,6 +86,11 @@ proc test013 { method {nentries 10000} args } {
} else {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
@@ -77,6 +98,9 @@ proc test013 { method {nentries 10000} args } {
set ret [eval {$db get} $gflags $txn {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $str]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
@@ -93,6 +117,11 @@ proc test013 { method {nentries 10000} args } {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags \
{-nooverwrite $key [chop_data $method $str]}]
error_check_good put [is_substr $ret "DB_KEYEXIST"] 1
@@ -101,6 +130,9 @@ proc test013 { method {nentries 10000} args } {
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $str]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
@@ -116,6 +148,11 @@ proc test013 { method {nentries 10000} args } {
set key $str
}
set rstr [string toupper $str]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} \
$txn $pflags {$key [chop_data $method $rstr]}]
error_check_good put $r 0
@@ -124,13 +161,24 @@ proc test013 { method {nentries 10000} args } {
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $rstr]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
# Now make sure that everything looks OK
puts "\tTest013.d: check entire file contents"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
@@ -153,7 +201,7 @@ proc test013 { method {nentries 10000} args } {
puts "\tTest013.e: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction "-first" "-next"
if { [is_record_based $method] == 0 } {
@@ -166,7 +214,7 @@ proc test013 { method {nentries 10000} args } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tTest013.f: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction "-last" "-prev"
if { [is_record_based $method] == 0 } {
diff --git a/db/test/test014.tcl b/db/test/test014.tcl
index 3ad5335dd..3a13d0964 100644
--- a/db/test/test014.tcl
+++ b/db/test/test014.tcl
@@ -1,17 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test014.tcl,v 11.19 2000/08/25 14:21:54 sue Exp $
+# $Id: test014.tcl,v 11.25 2003/01/08 05:53:42 bostic Exp $
#
-# DB Test 14 {access method}
-#
-# Partial put test, small data, replacing with same size. The data set
-# consists of the first nentries of the dictionary. We will insert them
-# (and retrieve them) as we do in test 1 (equal key/data pairs). Then
-# we'll try to perform partial puts of some characters at the beginning,
-# some at the end, and some at the middle.
+# TEST test014
+# TEST Exercise partial puts on short data
+# TEST Run 5 combinations of numbers of characters to replace,
+# TEST and number of times to increase the size by.
+# TEST
+# TEST Partial put test, small data, replacing with same size. The data set
+# TEST consists of the first nentries of the dictionary. We will insert them
+# TEST (and retrieve them) as we do in test 1 (equal key/data pairs). Then
+# TEST we'll try to perform partial puts of some characters at the beginning,
+# TEST some at the end, and some at the middle.
proc test014 { method {nentries 10000} args } {
set fixed 0
set args [convert_args $method $args]
@@ -71,6 +74,7 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -82,6 +86,18 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
set testfile test014.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -89,7 +105,7 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set gflags ""
@@ -117,7 +133,15 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
global dvals
# initial put
- set ret [$db put $key $str]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $str}]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good dbput $ret 0
set offset [string length $str]
@@ -133,11 +157,28 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
a[set offset]x[set chars]a[set increase] \
$str $data]
set offset [expr $offset + $chars]
- set ret [$db put -partial [list $offset 0] $key $data]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put -partial [list $offset 0]} \
+ $txn {$key $data}]
error_check_good dbput:post $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
} else {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
partial_put $method $db $txn \
$gflags $key $str $chars $increase
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
incr count
}
@@ -145,7 +186,15 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
# Now make sure that everything looks OK
puts "\tTest014.b: check entire file contents"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test014.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
@@ -168,7 +217,7 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
puts "\tTest014.c: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_file $testfile $env $txn \
+ open_and_dump_file $testfile $env \
$t1 test014.check dump_file_direction "-first" "-next"
if { [string compare $omethod "-recno"] != 0 } {
@@ -182,7 +231,7 @@ proc test014_body { method flagp chars increase {nentries 10000} args } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tTest014.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 \
+ open_and_dump_file $testfile $env $t1 \
test014.check dump_file_direction "-last" "-prev"
if { [string compare $omethod "-recno"] != 0 } {
diff --git a/db/test/test015.tcl b/db/test/test015.tcl
index 61abddd37..12d5543de 100644
--- a/db/test/test015.tcl
+++ b/db/test/test015.tcl
@@ -1,14 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test015.tcl,v 11.20 2000/08/25 14:21:54 sue Exp $
+# $Id: test015.tcl,v 11.28 2003/01/08 05:53:43 bostic Exp $
#
-# DB Test 15 {access method}
-# Partial put test when item does not exist.
+# TEST test015
+# TEST Partial put test
+# TEST Partial put test where the key does not initially exist.
proc test015 { method {nentries 7500} { start 0 } args } {
- global fixed_len
+ global fixed_len testdir
set low_range 50
set mid_range 100
@@ -43,6 +44,15 @@ proc test015 { method {nentries 7500} { start 0 } args } {
puts -nonewline "$this: "
eval [concat test015_body $method [lindex $entry 1] \
$nentries $args]
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ set env [lindex $args $eindex]
+ set testdir [get_home $env]
+ }
+puts "Verifying testdir $testdir"
+
+ error_check_good verify [verify_dir $testdir "\tTest015.e: "] 0
}
}
@@ -55,6 +65,7 @@ proc test015_init { } {
proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
global dvals
global fixed_len
+ global testdir
source ./include.tcl
set args [convert_args $method $args]
@@ -71,6 +82,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
puts "Put $rcount strings random offsets between $off_low and $off_hi"
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -82,14 +94,27 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
set testfile test015.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries > 5000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ set retdir $testdir
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
@@ -97,7 +122,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
set txn ""
set count 0
- puts "\tTest015.a: put/get loop"
+ puts "\tTest015.a: put/get loop for $nentries entries"
# Here is the loop where we put and get each key/data pair
# Each put is a partial put of a record that does not exist.
@@ -148,9 +173,17 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
set slen [expr $fixed_len - $off]
set data [eval "binary format a$slen" {$data}]
}
- set ret [eval {$db put} \
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn \
{-partial [list $off [string length $data]] $key $data}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
@@ -158,7 +191,15 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
# Now make sure that everything looks OK
puts "\tTest015.b: check entire file contents"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
@@ -183,7 +224,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
puts "\tTest015.c: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_file $testfile $env $txn $t1 \
+ open_and_dump_file $testfile $env $t1 \
$checkfunc dump_file_direction "-first" "-next"
if { [string compare $omethod "-recno"] != 0 } {
@@ -196,7 +237,7 @@ proc test015_body { method off_low off_hi rcount {nentries 10000} args } {
# Now, reopen the file and run the last test again in the
# reverse direction.
puts "\tTest015.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 \
+ open_and_dump_file $testfile $env $t1 \
$checkfunc dump_file_direction "-last" "-prev"
if { [string compare $omethod "-recno"] != 0 } {
diff --git a/db/test/test016.tcl b/db/test/test016.tcl
index def3c1146..f52f7ab5f 100644
--- a/db/test/test016.tcl
+++ b/db/test/test016.tcl
@@ -1,19 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test016.tcl,v 11.17 2000/08/25 14:21:54 sue Exp $
+# $Id: test016.tcl,v 11.24 2003/01/08 05:53:43 bostic Exp $
#
-# DB Test 16 {access method}
-# Partial put test where partial puts make the record smaller.
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and a fixed, medium length data string;
-# retrieve each. After all are entered, go back and do partial puts,
-# replacing a random-length string with the key value.
-# Then verify.
-
-set datastr abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
+# TEST test016
+# TEST Partial put test
+# TEST Partial put where the datum gets shorter as a result of the put.
+# TEST
+# TEST Partial put test where partial puts make the record smaller.
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and a fixed, medium length data string;
+# TEST retrieve each. After all are entered, go back and do partial puts,
+# TEST replacing a random-length string with the key value.
+# TEST Then verify.
proc test016 { method {nentries 10000} args } {
global datastr
@@ -31,9 +32,8 @@ proc test016 { method {nentries 10000} args } {
return
}
- puts "Test016: $method ($args) $nentries partial put shorten"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -45,13 +45,27 @@ proc test016 { method {nentries 10000} args } {
set testfile test016.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ puts "Test016: $method ($args) $nentries partial put shorten"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
@@ -64,7 +78,6 @@ proc test016 { method {nentries 10000} args } {
}
# Here is the loop where we put and get each key/data pair
-
puts "\tTest016.a: put/get loop"
set did [open $dict]
while { [gets $did str] != -1 && $count < $nentries } {
@@ -73,6 +86,11 @@ proc test016 { method {nentries 10000} args } {
} else {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $datastr]}]
error_check_good put $ret 0
@@ -80,6 +98,9 @@ proc test016 { method {nentries 10000} args } {
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $datastr]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
@@ -103,12 +124,20 @@ proc test016 { method {nentries 10000} args } {
set s2 [string toupper $key]
set s3 [string range $datastr [expr $repl_off + $repl_len] end ]
set dvals($key) [pad_data $method $s1$s2$s3]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn {-partial \
[list $repl_off $repl_len] $key [chop_data $method $s2]}]
error_check_good put $ret 0
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
put $ret [list [list $key [pad_data $method $s1$s2$s3]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
@@ -116,7 +145,15 @@ proc test016 { method {nentries 10000} args } {
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest016.c: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test016.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary
@@ -139,7 +176,7 @@ proc test016 { method {nentries 10000} args } {
# Now, reopen the file and run the last test again.
puts "\tTest016.d: close, open, and dump file"
- open_and_dump_file $testfile $env $txn $t1 test016.check \
+ open_and_dump_file $testfile $env $t1 test016.check \
dump_file_direction "-first" "-next"
if { [ is_record_based $method ] == 0 } {
@@ -150,7 +187,7 @@ proc test016 { method {nentries 10000} args } {
# Now, reopen the file and run the last test again in reverse direction.
puts "\tTest016.e: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 test016.check \
+ open_and_dump_file $testfile $env $t1 test016.check \
dump_file_direction "-last" "-prev"
if { [ is_record_based $method ] == 0 } {
diff --git a/db/test/test017.tcl b/db/test/test017.tcl
index 95fe82e08..b2e13c2bb 100644
--- a/db/test/test017.tcl
+++ b/db/test/test017.tcl
@@ -1,48 +1,54 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test017.tcl,v 11.13 2000/12/11 17:42:18 sue Exp $
+# $Id: test017.tcl,v 11.28 2003/04/16 20:38:33 margo Exp $
#
-# DB Test 17 {access method}
-# Run duplicates with small page size so that we test off page duplicates.
-# Then after we have an off-page database, test with overflow pages too.
-#
-proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
+# TEST test017
+# TEST Basic offpage duplicate test.
+# TEST
+# TEST Run duplicates with small page size so that we test off page duplicates.
+# TEST Then after we have an off-page database, test with overflow pages too.
+proc test017 { method {contents 0} {ndups 19} {tnum "017"} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
+ if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
return
}
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
incr pgindex
if { [lindex $args $pgindex] > 8192 } {
- puts "Test0$tnum: Skipping for large pagesizes"
+ puts "Test$tnum: Skipping for large pagesizes"
return
}
}
- puts "Test0$tnum: $method ($args) Off page duplicate tests with $ndups duplicates"
-
# Create the database and open the dictionary
+ set limit 0
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ set limit 100
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -52,7 +58,7 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644 -dup} $args {$omethod $testfile}]
+ -create -mode 0644 -dup} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
@@ -60,17 +66,25 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
set txn ""
set count 0
+ set file_list [get_file_list 1]
+ if { $txnenv == 1 } {
+ if { [llength $file_list] > $limit } {
+ set file_list [lrange $file_list 0 $limit]
+ }
+ set flen [llength $file_list]
+ reduce_dups flen ndups
+ }
+ puts "Test$tnum: $method ($args) Off page duplicate tests\
+ with $ndups duplicates"
+
set ovfl ""
# Here is the loop where we put and get each key/data pair
- set dbc [eval {$db cursor} $txn]
- puts -nonewline \
- "\tTest0$tnum.a: Creating duplicates with "
+ puts -nonewline "\tTest$tnum.a: Creating duplicates with "
if { $contents != 0 } {
puts "file contents as key/data"
} else {
puts "file name as key/data"
}
- set file_list [glob ../*/*.c ./*.lo]
foreach f $file_list {
if { $contents != 0 } {
set fid [open $f r]
@@ -85,9 +99,17 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
}
for { set i 1 } { $i <= $ndups } { incr i } {
set datastr $i:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$str [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
#
@@ -101,6 +123,12 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
error_check_bad $f:dbget_dups [llength $ret] 0
error_check_good $f:dbget_dups1 [llength $ret] $ndups
set x 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
for {set ret [$dbc get "-set" $str]} \
{[llength $ret] != 0} \
{set ret [$dbc get "-next"] } {
@@ -113,19 +141,22 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
if {[string length $d] == 0} {
break
}
- error_check_good "Test0$tnum:get" $d $str
+ error_check_good "Test$tnum:get" $d $str
set id [ id_of $datastr ]
- error_check_good "Test0$tnum:$f:dup#" $id $x
+ error_check_good "Test$tnum:$f:dup#" $id $x
incr x
}
- error_check_good "Test0$tnum:ndups:$str" [expr $x - 1] $ndups
+ error_check_good "Test$tnum:ndups:$str" [expr $x - 1] $ndups
+ error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
- error_check_good cursor_close [$dbc close] 0
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: Checking file for correct duplicates"
+ puts "\tTest$tnum.b: Checking file for correct duplicates"
set dlist ""
for { set i 1 } { $i <= $ndups } {incr i} {
lappend dlist $i
@@ -145,37 +176,58 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
fileremove $t2.tmp
fileremove $t4.tmp
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
if {$contents == 0} {
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
# Now compare the keys to see if they match the file names
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 test017.check
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t4) \
- [filecmp $t3 $t4] 0
+ error_check_good Test$tnum:diff($t3,$t4) [filecmp $t3 $t4] 0
}
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- puts "\tTest0$tnum.c: Checking file for correct duplicates after close"
+ puts "\tTest$tnum.c: Checking file for correct duplicates after close"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
if {$contents == 0} {
# Now compare the keys to see if they match the filenames
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
}
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.d: Verify off page duplicates and overflow status"
+ puts "\tTest$tnum.d: Verify off page duplicates and overflow status"
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set stat [$db stat]
@@ -192,8 +244,13 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
[is_substr $stat "{{Overflow pages} 0}"] 1
}
} else {
- error_check_bad overflow \
- [is_substr $stat "{{Overflow pages} 0}"] 1
+ if { [is_hash $method] } {
+ error_check_bad overflow \
+ [is_substr $stat "{{Number of big pages} 0}"] 1
+ } else {
+ error_check_bad overflow \
+ [is_substr $stat "{{Overflow pages} 0}"] 1
+ }
}
#
@@ -204,7 +261,8 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
error_check_good db_close [$db close] 0
return
}
- puts "\tTest0$tnum.e: Add overflow duplicate entries"
+
+ puts "\tTest$tnum.e: Add overflow duplicate entries"
set ovfldup [expr $ndups + 1]
foreach f $ovfl {
#
@@ -214,20 +272,41 @@ proc test017 { method {contents 0} {ndups 19} {tnum 17} args } {
fconfigure $fid -translation binary
set fdata [read $fid]
close $fid
- set data $ovfldup:$fdata
+ set data $ovfldup:$fdata:$fdata:$fdata:$fdata
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {$f $data}]
error_check_good ovfl_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ }
+
+ puts "\tTest$tnum.f: Verify overflow duplicate entries"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
}
- puts "\tTest0$tnum.f: Verify overflow duplicate entries"
dup_check $db $txn $t1 $dlist $ovfldup
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
- [filecmp $t3 $t2] 0
+ error_check_good Test$tnum:diff($t3,$t2) [filecmp $t3 $t2] 0
set stat [$db stat]
- error_check_bad overflow1 \
- [is_substr $stat "{{Overflow pages} 0}"] 1
+ if { [is_hash [$db get_type]] } {
+ error_check_bad overflow1_hash [is_substr $stat \
+ "{{Number of big pages} 0}"] 1
+ } else {
+ error_check_bad \
+ overflow1 [is_substr $stat "{{Overflow pages} 0}"] 1
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test018.tcl b/db/test/test018.tcl
index 95493da2d..85f71182d 100644
--- a/db/test/test018.tcl
+++ b/db/test/test018.tcl
@@ -1,13 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test018.tcl,v 11.3 2000/02/14 03:00:18 bostic Exp $
+# $Id: test018.tcl,v 11.9 2003/01/27 18:15:01 sandstro Exp $
#
-# DB Test 18 {access method}
-# Run duplicates with small page size so that we test off page duplicates.
+# TEST test018
+# TEST Offpage duplicate test
+# TEST Key_{first,last,before,after} offpage duplicates.
+# TEST Run duplicates with small page size so that we test off page
+# TEST duplicates.
proc test018 { method {nentries 10000} args} {
puts "Test018: Off page duplicate tests"
- eval {test011 $method $nentries 19 18 -pagesize 512} $args
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test018: Skipping for specific pagesizes"
+ return
+ }
+ eval {test011 $method $nentries 19 "018" -pagesize 512} $args
}
diff --git a/db/test/test019.tcl b/db/test/test019.tcl
index 4031ae2dc..09914ec86 100644
--- a/db/test/test019.tcl
+++ b/db/test/test019.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test019.tcl,v 11.14 2000/08/25 14:21:54 sue Exp $
+# $Id: test019.tcl,v 11.22 2003/01/08 05:53:44 bostic Exp $
#
-# Test019 { access_method nentries }
-# Test the partial get functionality.
+# TEST test019
+# TEST Partial get test.
proc test019 { method {nentries 10000} args } {
global fixed_len
global rand_init
@@ -14,9 +14,8 @@ proc test019 { method {nentries 10000} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test019: $method ($args) $nentries partial get test"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -28,11 +27,25 @@ proc test019 { method {nentries 10000} args } {
set testfile test019.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ puts "Test019: $method ($args) $nentries partial get test"
+
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
berkdb srand $rand_init
@@ -57,6 +70,11 @@ proc test019 { method {nentries 10000} args } {
}
set repl [berkdb random_int $fixed_len 100]
set data [chop_data $method [replicate $str $repl]]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn {-nooverwrite $key $data}]
error_check_good dbput:$key $ret 0
@@ -64,6 +82,9 @@ proc test019 { method {nentries 10000} args } {
error_check_good \
dbget:$key $ret [list [list $key [pad_data $method $data]]]
set kvals($key) $repl
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
close $did
@@ -76,18 +97,23 @@ proc test019 { method {nentries 10000} args } {
} else {
set key $str
}
- set data [replicate $str $kvals($key)]
+ set data [pad_data $method [replicate $str $kvals($key)]]
+
+ set maxndx [expr [string length $data] - 1]
- if { [is_fixed_length $method] == 1 } {
- set maxndx $fixed_len
- } else {
- set maxndx [expr [string length $data] - 1]
- }
set beg [berkdb random_int 0 [expr $maxndx - 1]]
- set len [berkdb random_int 1 [expr $maxndx - $beg]]
+ set len [berkdb random_int 0 [expr $maxndx * 2]]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db get} \
$txn {-partial [list $beg $len]} $gflags {$key}]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# In order for tcl to handle this, we have to overwrite the
# last character with a NULL. That makes the length one less
@@ -95,12 +121,10 @@ proc test019 { method {nentries 10000} args } {
set k [lindex [lindex $ret 0] 0]
set d [lindex [lindex $ret 0] 1]
error_check_good dbget_key $k $key
- # If $d contains some of the padding, we want to get rid of it.
- set firstnull [string first "\0" $d]
- if { $firstnull == -1 } { set firstnull [string length $d] }
- error_check_good dbget_data \
- [string range $d 0 [expr $firstnull - 1]] \
+
+ error_check_good dbget_data $d \
[string range $data $beg [expr $beg + $len - 1]]
+
}
error_check_good db_close [$db close] 0
close $did
diff --git a/db/test/test020.tcl b/db/test/test020.tcl
index 1961d0e02..cf0d8ad6a 100644
--- a/db/test/test020.tcl
+++ b/db/test/test020.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test020.tcl,v 11.12 2000/10/19 23:15:22 ubell Exp $
+# $Id: test020.tcl,v 11.18 2003/01/08 05:53:45 bostic Exp $
#
-# DB Test 20 {access method}
-# Test in-memory databases.
+# TEST test020
+# TEST In-Memory database tests.
proc test020 { method {nentries 10000} args } {
source ./include.tcl
@@ -17,12 +17,11 @@ proc test020 { method {nentries 10000} args } {
puts "Test020 skipping for method $method"
return
}
- puts "Test020: $method ($args) $nentries equal key/data pairs"
-
# Create the database and open the dictionary
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# Check if we are using an env.
@@ -31,10 +30,24 @@ proc test020 { method {nentries 10000} args } {
} else {
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ puts "Test020: $method ($args) $nentries equal key/data pairs"
+
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod}]
+ -create -mode 0644} $args {$omethod}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -60,19 +73,35 @@ proc test020 { method {nentries 10000} args } {
} else {
set key $str
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $str]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest020.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
diff --git a/db/test/test021.tcl b/db/test/test021.tcl
index f9a1fe32f..c1b48e018 100644
--- a/db/test/test021.tcl
+++ b/db/test/test021.tcl
@@ -1,25 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test021.tcl,v 11.10 2000/08/25 14:21:55 sue Exp $
+# $Id: test021.tcl,v 11.16 2003/01/08 05:53:45 bostic Exp $
#
-# DB Test 21 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self, reversed as key and self as data.
-# After all are entered, retrieve each using a cursor SET_RANGE, and getting
-# about 20 keys sequentially after it (in some cases we'll run out towards
-# the end of the file).
+# TEST test021
+# TEST Btree range tests.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self, reversed as key and self as data.
+# TEST After all are entered, retrieve each using a cursor SET_RANGE, and
+# TEST getting about 20 keys sequentially after it (in some cases we'll
+# TEST run out towards the end of the file).
proc test021 { method {nentries 10000} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test021: $method ($args) $nentries equal key/data pairs"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -31,13 +32,27 @@ proc test021 { method {nentries 10000} args } {
set testfile test021.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+ puts "Test021: $method ($args) $nentries equal key/data pairs"
+
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -65,9 +80,17 @@ proc test021 { method {nentries 10000} args } {
set key [reverse $str]
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} \
$txn $pflags {$key [chop_data $method $str]}]
error_check_good db_put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
close $did
@@ -81,6 +104,11 @@ proc test021 { method {nentries 10000} args } {
error_check_good dbopen [is_valid_db $db] TRUE
# Open a cursor
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_substr $dbc $db] 1
@@ -112,6 +140,10 @@ proc test021 { method {nentries 10000} args } {
}
incr i
}
+ error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
close $did
}
diff --git a/db/test/test022.tcl b/db/test/test022.tcl
index f9a4c9663..b160d37c5 100644
--- a/db/test/test022.tcl
+++ b/db/test/test022.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test022.tcl,v 11.10 2000/08/25 14:21:55 sue Exp $
+# $Id: test022.tcl,v 11.15 2003/01/08 05:53:46 bostic Exp $
#
-# Test022: Test of DB->get_byteswapped
+# TEST test022
+# TEST Test of DB->getbyteswapped().
proc test022 { method args } {
source ./include.tcl
@@ -14,6 +15,7 @@ proc test022 { method args } {
puts "Test022 ($args) $omethod: DB->getbyteswapped()"
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -27,6 +29,11 @@ proc test022 { method args } {
set testfile2 "test022b.db"
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
diff --git a/db/test/test023.tcl b/db/test/test023.tcl
index c222bdd83..b0516a344 100644
--- a/db/test/test023.tcl
+++ b/db/test/test023.tcl
@@ -1,14 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test023.tcl,v 11.13 2000/08/25 14:21:55 sue Exp $
+# $Id: test023.tcl,v 11.19 2003/01/08 05:53:46 bostic Exp $
#
-# Duplicate delete test.
-# Add a key with duplicates (first time on-page, second time off-page)
-# Number the dups.
-# Delete dups and make sure that CURRENT/NEXT/PREV work correctly.
+# TEST test023
+# TEST Duplicate test
+# TEST Exercise deletes and cursor operations within a duplicate set.
+# TEST Add a key with duplicates (first time on-page, second time off-page)
+# TEST Number the dups.
+# TEST Delete dups and make sure that CURRENT/NEXT/PREV work correctly.
proc test023 { method args } {
global alphabet
global dupnum
@@ -26,6 +28,7 @@ proc test023 { method args } {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -37,19 +40,29 @@ proc test023 { method args } {
set testfile test023.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644 -dup} $args {$omethod $testfile}]
+ -create -mode 0644 -dup} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set pflags ""
set gflags ""
set txn ""
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
foreach i { onpage offpage } {
if { $i == "onpage" } {
@@ -159,7 +172,7 @@ proc test023 { method args } {
puts "\tTest023.f: Count keys, overwrite current, count again"
# At this point we should have 17 keys the (initial 20 minus
# 3 deletes)
- set dbc2 [$db cursor]
+ set dbc2 [eval {$db cursor} $txn]
error_check_good db_cursor:2 [is_substr $dbc2 $db] 1
set count_check 0
@@ -178,6 +191,7 @@ proc test023 { method args } {
incr count_check
}
error_check_good numdups $count_check 17
+ error_check_good dbc2_close [$dbc2 close] 0
# Done, delete all the keys for next iteration
set ret [eval {$db del} $txn {$key}]
@@ -190,6 +204,9 @@ proc test023 { method args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test024.tcl b/db/test/test024.tcl
index f0b6762cd..d6f11079a 100644
--- a/db/test/test024.tcl
+++ b/db/test/test024.tcl
@@ -1,12 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test024.tcl,v 11.14 2000/08/25 14:21:55 sue Exp $
+# $Id: test024.tcl,v 11.20 2003/01/08 05:53:46 bostic Exp $
#
-# DB Test 24 {method nentries}
-# Test the Btree and Record number get-by-number functionality.
+# TEST test024
+# TEST Record number retrieval test.
+# TEST Test the Btree and Record number get-by-number functionality.
proc test024 { method {nentries 10000} args} {
source ./include.tcl
global rand_init
@@ -25,6 +26,7 @@ proc test024 { method {nentries 10000} args} {
berkdb srand $rand_init
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -36,6 +38,18 @@ proc test024 { method {nentries 10000} args} {
set testfile test024.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
@@ -59,11 +73,11 @@ proc test024 { method {nentries 10000} args} {
set sorted_keys [lsort $keys]
# Create the database
if { [string compare $omethod "-btree"] == 0 } {
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644 -recnum} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
} else {
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
}
@@ -84,12 +98,20 @@ proc test024 { method {nentries 10000} args} {
} else {
set key $k
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $k]}]
error_check_good put $ret 0
set ret [eval {$db get} $txn $gflags {$key}]
error_check_good \
get $ret [list [list $key [pad_data $method $k]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Now we will get each key from the DB and compare the results
@@ -111,13 +133,21 @@ proc test024 { method {nentries 10000} args} {
set gflags " -recno"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for { set k 1 } { $k <= $count } { incr k } {
- set ret [eval {$db get} $txn $gflags {$k}]
+ set ret [eval {$db get} $txn $gflags {$k}]
puts $oid [lindex [lindex $ret 0] 1]
error_check_good recnum_get [lindex [lindex $ret 0] 1] \
[pad_data $method [lindex $sorted_keys [expr $k - 1]]]
}
close $oid
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
error_check_good Test024.c:diff($t1,$t2) \
@@ -128,12 +158,20 @@ proc test024 { method {nentries 10000} args} {
set db [eval {berkdb_open -rdonly} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set oid [open $t2 w]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for { set k 1 } { $k <= $count } { incr k } {
- set ret [eval {$db get} $txn $gflags {$k}]
+ set ret [eval {$db get} $txn $gflags {$k}]
puts $oid [lindex [lindex $ret 0] 1]
error_check_good recnum_get [lindex [lindex $ret 0] 1] \
[pad_data $method [lindex $sorted_keys [expr $k - 1]]]
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $oid
error_check_good db_close [$db close] 0
error_check_good Test024.d:diff($t1,$t2) \
@@ -155,12 +193,20 @@ proc test024 { method {nentries 10000} args} {
close $oid
set oid [open $t2 w]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for { set k $count } { $k > 0 } { incr k -1 } {
- set ret [eval {$db get} $txn $gflags {$k}]
+ set ret [eval {$db get} $txn $gflags {$k}]
puts $oid [lindex [lindex $ret 0] 1]
error_check_good recnum_get [lindex [lindex $ret 0] 1] \
[pad_data $method [lindex $sorted_keys [expr $k - 1]]]
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $oid
error_check_good db_close [$db close] 0
error_check_good Test024.e:diff($t1,$t2) \
@@ -175,12 +221,20 @@ proc test024 { method {nentries 10000} args} {
set kval [lindex $keys [expr $kndx - 1]]
set recno [expr [lsearch $sorted_keys $kval] + 1]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { [is_record_based $method] == 1 } {
set ret [eval {$db del} $txn {$recno}]
} else {
set ret [eval {$db del} $txn {$kval}]
}
error_check_good delete $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Remove the key from the key list
set ndx [expr $kndx - 1]
@@ -192,12 +246,20 @@ proc test024 { method {nentries 10000} args} {
}
# Check that the keys after it have been renumbered
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { $do_renumber == 1 && $recno != $count } {
set r [expr $recno - 1]
set ret [eval {$db get} $txn $gflags {$recno}]
error_check_good get_after_del \
[lindex [lindex $ret 0] 1] [lindex $sorted_keys $r]
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Decrement count
incr count -1
diff --git a/db/test/test025.tcl b/db/test/test025.tcl
index 9f8deecb4..270456e43 100644
--- a/db/test/test025.tcl
+++ b/db/test/test025.tcl
@@ -1,51 +1,64 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test025.tcl,v 11.11 2000/11/16 23:56:18 ubell Exp $
+# $Id: test025.tcl,v 11.21 2003/01/08 05:53:47 bostic Exp $
#
-# DB Test 25 {method nentries}
-# Test the DB_APPEND flag.
-proc test025 { method {nentries 10000} {start 0 } {tnum "25" } args} {
+# TEST test025
+# TEST DB_APPEND flag test.
+proc test025 { method {nentries 10000} {start 0 } {tnum "025"} args} {
global kvals
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: $method ($args)"
+ puts "Test$tnum: $method ($args)"
if { [string compare $omethod "-btree"] == 0 } {
- puts "Test0$tnum skipping for method BTREE"
+ puts "Test$tnum skipping for method BTREE"
return
}
if { [string compare $omethod "-hash"] == 0 } {
- puts "Test0$tnum skipping for method HASH"
+ puts "Test$tnum skipping for method HASH"
return
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
- puts "\tTest0$tnum.a: put/get loop"
+ puts "\tTest$tnum.a: put/get loop"
set gflags " -recno"
set pflags " -append"
set txn ""
@@ -58,22 +71,42 @@ proc test025 { method {nentries 10000} {start 0 } {tnum "25" } args} {
gets $did str
set k [expr $count + 1]
set kvals($k) [pad_data $method $str]
- set ret [eval {$db put} $txn $k {[chop_data $method $str]}]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$k [chop_data $method $str]}]
error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
-
+
while { [gets $did str] != -1 && $count < $nentries } {
set k [expr $count + 1]
set kvals($k) [pad_data $method $str]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {[chop_data $method $str]}]
error_check_good db_put $ret $k
set ret [eval {$db get} $txn $gflags {$k}]
error_check_good \
get $ret [list [list $k [pad_data $method $str]]]
- incr count
- if { [expr $count + 1] == 0 } {
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ # The recno key will be count + 1, so when we hit
+ # UINT32_MAX - 1, reset to 0.
+ if { $count == [expr 0xfffffffe] } {
+ set count 0
+ } else {
incr count
}
}
@@ -81,19 +114,27 @@ proc test025 { method {nentries 10000} {start 0 } {tnum "25" } args} {
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: dump file"
+ puts "\tTest$tnum.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.c: close, open, and dump file"
+ puts "\tTest$tnum.c: close, open, and dump file"
# Now, reopen the file and run the last test again.
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction -first -next
# Now, reopen the file and run the last test again in the
# reverse direction.
- puts "\tTest0$tnum.d: close, open, and dump file in reverse direction"
- open_and_dump_file $testfile $env $txn $t1 $checkfunc \
+ puts "\tTest$tnum.d: close, open, and dump file in reverse direction"
+ open_and_dump_file $testfile $env $t1 $checkfunc \
dump_file_direction -last -prev
}
diff --git a/db/test/test026.tcl b/db/test/test026.tcl
index 6c19c60a2..d1110ec7d 100644
--- a/db/test/test026.tcl
+++ b/db/test/test026.tcl
@@ -1,15 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test026.tcl,v 11.13 2000/11/17 19:07:51 sue Exp $
+# $Id: test026.tcl,v 11.22 2003/01/08 05:53:47 bostic Exp $
#
-# DB Test 26 {access method}
-# Keyed delete test through cursor.
-# If ndups is small; this will test on-page dups; if it's large, it
-# will test off-page dups.
-proc test026 { method {nentries 2000} {ndups 5} {tnum 26} args} {
+# TEST test026
+# TEST Small keys/medium data w/duplicates
+# TEST Put/get per key.
+# TEST Loop through keys -- delete each key
+# TEST ... test that cursors delete duplicates correctly
+# TEST
+# TEST Keyed delete test through cursor. If ndups is small; this will
+# TEST test on-page dups; if it's large, it will test off-page dups.
+proc test026 { method {nentries 2000} {ndups 5} {tnum "026"} args} {
source ./include.tcl
set args [convert_args $method $args]
@@ -17,26 +21,41 @@ proc test026 { method {nentries 2000} {ndups 5} {tnum 26} args} {
if { [is_record_based $method] == 1 || \
[is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
+ puts "Test$tnum skipping for method $method"
return
}
- puts "Test0$tnum: $method ($args) $nentries keys\
- with $ndups dups; cursor delete test"
-
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the defaults down a bit.
+ # If we are wanting a lot of dups, set that
+ # down a bit or repl testing takes very long.
+ #
+ if { $nentries == 2000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
+ puts "Test$tnum: $method ($args) $nentries keys\
+ with $ndups dups; cursor delete test"
set pflags ""
set gflags ""
@@ -45,17 +64,25 @@ proc test026 { method {nentries 2000} {ndups 5} {tnum 26} args} {
# Here is the loop where we put and get each key/data pair
- puts "\tTest0$tnum.a: Put loop"
- set db [eval {berkdb_open -create -truncate \
+ puts "\tTest$tnum.a: Put loop"
+ set db [eval {berkdb_open -create \
-mode 0644} $args {$omethod -dup $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
while { [gets $did str] != -1 && $count < [expr $nentries * $ndups] } {
set datastr [ make_data_str $str ]
for { set j 1 } { $j <= $ndups} {incr j} {
- set ret [eval {$db put} \
- $txn $pflags {$str [chop_data $method $j$datastr]}]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} \
+ $txn $pflags {$str [chop_data $method $j$datastr]}]
error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
incr count
}
}
@@ -68,10 +95,15 @@ proc test026 { method {nentries 2000} {ndups 5} {tnum 26} args} {
# Now we will sequentially traverse the database getting each
# item and deleting it.
set count 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_substr $dbc $db] 1
- puts "\tTest0$tnum.b: Get/delete loop"
+ puts "\tTest$tnum.b: Get/delete loop"
set i 1
for { set ret [$dbc get -first] } {
[string length $ret] != 0 } {
@@ -97,16 +129,27 @@ proc test026 { method {nentries 2000} {ndups 5} {tnum 26} args} {
error_check_good db_del:$key $ret 0
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.c: Verify empty file"
+ puts "\tTest$tnum.c: Verify empty file"
# Double check that file is now empty
set db [eval {berkdb_open} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_substr $dbc $db] 1
set ret [$dbc get -first]
error_check_good get_on_empty [string length $ret] 0
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test027.tcl b/db/test/test027.tcl
index ae4bf64fb..53d5a7d88 100644
--- a/db/test/test027.tcl
+++ b/db/test/test027.tcl
@@ -1,13 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test027.tcl,v 11.4 2000/05/22 12:51:39 bostic Exp $
+# $Id: test027.tcl,v 11.9 2003/01/08 05:53:47 bostic Exp $
#
-# DB Test 27 {access method}
-# Check that delete operations work. Create a database; close database and
-# reopen it. Then issues delete by key for each entry.
+# TEST test027
+# TEST Off-page duplicate test
+# TEST Test026 with parameters to force off-page duplicates.
+# TEST
+# TEST Check that delete operations work. Create a database; close
+# TEST database and reopen it. Then issues delete by key for each
+# TEST entry.
proc test027 { method {nentries 100} args} {
- eval {test026 $method $nentries 100 27} $args
+ eval {test026 $method $nentries 100 "027"} $args
}
diff --git a/db/test/test028.tcl b/db/test/test028.tcl
index b460dd53a..6445332ea 100644
--- a/db/test/test028.tcl
+++ b/db/test/test028.tcl
@@ -1,16 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test028.tcl,v 11.12 2000/08/25 14:21:55 sue Exp $
+# $Id: test028.tcl,v 11.21 2003/01/08 05:53:48 bostic Exp $
#
-# Put after cursor delete test.
+# TEST test028
+# TEST Cursor delete test
+# TEST Test put operations after deleting through a cursor.
proc test028 { method args } {
global dupnum
global dupstr
global alphabet
- global errorInfo
source ./include.tcl
set args [convert_args $method $args]
@@ -30,6 +31,7 @@ proc test028 { method args } {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -41,11 +43,16 @@ proc test028 { method args } {
set testfile test028.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set ndups 20
@@ -57,6 +64,11 @@ proc test028 { method args } {
set gflags " -recno"
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_substr $dbc $db] 1
@@ -129,8 +141,8 @@ proc test028 { method args } {
puts "\tTest028.g: Insert key with duplicates"
for { set count 0 } { $count < $ndups } { incr count } {
- set ret [eval {$db put} \
- $txn {$key [chop_data $method $count$dupstr]}]
+ set ret [eval {$db put} $txn \
+ {$key [chop_data $method $count$dupstr]}]
error_check_good db_put $ret 0
}
@@ -161,7 +173,6 @@ proc test028 { method args } {
if { $count == [expr $ndups - 1] } {
puts "\tTest028.k:\
Duplicate No_Overwrite test"
- set $errorInfo ""
set ret [eval {$db put} $txn \
{-nooverwrite $key $dupstr}]
error_check_good db_put [is_substr \
@@ -179,7 +190,8 @@ proc test028 { method args } {
$txn {-nooverwrite $key 0$dupstr}]
error_check_good db_put $ret 0
for { set count 1 } { $count < $ndups } { incr count } {
- set ret [eval {$db put} $txn {$key $count$dupstr}]
+ set ret [eval {$db put} $txn \
+ {$key $count$dupstr}]
error_check_good db_put $ret 0
}
@@ -192,8 +204,10 @@ proc test028 { method args } {
error_check_good db_del $ret 0
}
}
-
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test029.tcl b/db/test/test029.tcl
index c10815b0b..7b825f199 100644
--- a/db/test/test029.tcl
+++ b/db/test/test029.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test029.tcl,v 11.13 2000/08/25 14:21:55 sue Exp $
+# $Id: test029.tcl,v 11.21 2003/01/08 05:53:48 bostic Exp $
#
-# DB Test 29 {method nentries}
-# Test the Btree and Record number renumbering.
+# TEST test029
+# TEST Test the Btree and Record number renumbering.
proc test029 { method {nentries 10000} args} {
source ./include.tcl
@@ -26,6 +26,7 @@ proc test029 { method {nentries 10000} args} {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -37,6 +38,20 @@ proc test029 { method {nentries 10000} args} {
set testfile test029.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ # Do not set nentries down to 100 until we
+ # fix SR #5958.
+ set nentries 1000
+ }
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -64,11 +79,11 @@ proc test029 { method {nentries 10000} args} {
# Create the database
if { [string compare $omethod "-btree"] == 0 } {
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644 -recnum} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
} else {
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
}
@@ -89,14 +104,19 @@ proc test029 { method {nentries 10000} args} {
} else {
set key $k
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $method $k]}]
error_check_good dbput $ret 0
set ret [eval {$db get} $txn $gflags {$key}]
- if { [string compare [lindex [lindex $ret 0] 1] $k] != 0 } {
- puts "Test029: put key-data $key $k got $ret"
- return
+ error_check_good dbget [lindex [lindex $ret 0] 1] $k
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
}
}
@@ -110,8 +130,16 @@ proc test029 { method {nentries 10000} args} {
set key $first_key
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db del} $txn {$key}]
error_check_good db_del $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now we are ready to retrieve records based on
# record number
@@ -120,28 +148,50 @@ proc test029 { method {nentries 10000} args} {
}
# First try to get the old last key (shouldn't exist)
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db get} $txn $gflags {$last_keynum}]
error_check_good get_after_del $ret [list]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Now try to get what we think should be the last key
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db get} $txn $gflags {[expr $last_keynum - 1]}]
error_check_good \
getn_last_after_del [lindex [lindex $ret 0] 1] $last_key
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Create a cursor; we need it for the next test and we
# need it for recno here.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
# OK, now re-put the first key and make sure that we
# renumber the last key appropriately.
if { [string compare $omethod "-btree"] == 0 } {
- set ret [eval {$db put} $txn {$key [chop_data $method $first_key]}]
+ set ret [eval {$db put} $txn \
+ {$key [chop_data $method $first_key]}]
error_check_good db_put $ret 0
} else {
# Recno
- set ret [eval {$dbc get} $txn {-first}]
- set ret [eval {$dbc put} $txn $pflags {-before $first_key}]
+ set ret [$dbc get -first]
+ set ret [eval {$dbc put} $pflags {-before $first_key}]
error_check_bad dbc_put:DB_BEFORE $ret 0
}
@@ -153,7 +203,7 @@ proc test029 { method {nentries 10000} args} {
# Now delete the first key in the database using a cursor
puts "\tTest029.d: delete with cursor and verify renumber"
- set ret [eval {$dbc get} $txn {-first}]
+ set ret [$dbc get -first]
error_check_good dbc_first $ret [list [list $key $first_key]]
# Now delete at the cursor
@@ -175,10 +225,10 @@ proc test029 { method {nentries 10000} args} {
puts "\tTest029.e: put with cursor and verify renumber"
if { [string compare $omethod "-btree"] == 0 } {
set ret [eval {$dbc put} \
- $txn $pflags {-current $first_key}]
+ $pflags {-current $first_key}]
error_check_good dbc_put:DB_CURRENT $ret 0
} else {
- set ret [eval {$dbc put} $txn $pflags {-before $first_key}]
+ set ret [eval {$dbc put} $pflags {-before $first_key}]
error_check_bad dbc_put:DB_BEFORE $ret 0
}
@@ -188,5 +238,8 @@ proc test029 { method {nentries 10000} args} {
get_after_cursor_reput [lindex [lindex $ret 0] 1] $last_key
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test030.tcl b/db/test/test030.tcl
index 7395adf82..4104c59d4 100644
--- a/db/test/test030.tcl
+++ b/db/test/test030.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test030.tcl,v 11.13 2000/08/25 14:21:55 sue Exp $
+# $Id: test030.tcl,v 11.19 2003/01/08 05:53:49 bostic Exp $
#
-# DB Test 30: Test DB_NEXT_DUP Functionality.
+# TEST test030
+# TEST Test DB_NEXT_DUP Functionality.
proc test030 { method {nentries 10000} args } {
global rand_init
source ./include.tcl
@@ -18,11 +19,10 @@ proc test030 { method {nentries 10000} args } {
puts "Test030 skipping for method $method"
return
}
-
- puts "Test030: $method ($args) $nentries DB_NEXT_DUP testing"
berkdb srand $rand_init
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -36,20 +36,34 @@ proc test030 { method {nentries 10000} args } {
set cntfile cntfile.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+
+ puts "Test030: $method ($args) $nentries DB_NEXT_DUP testing"
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644 -dup} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
# Use a second DB to keep track of how many duplicates
# we enter per key
- set cntdb [eval {berkdb_open -create -truncate \
+ set cntdb [eval {berkdb_open -create \
-mode 0644} $args {-btree $cntfile}]
error_check_good dbopen:cntfile [is_valid_db $db] TRUE
@@ -64,15 +78,30 @@ proc test030 { method {nentries 10000} args } {
set did [open $dict]
puts "\tTest030.a: put and get duplicate keys."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
while { [gets $did str] != -1 && $count < $nentries } {
set ndup [berkdb random_int 1 10]
for { set i 1 } { $i <= $ndup } { incr i 1 } {
+ set ctxn ""
+ if { $txnenv == 1 } {
+ set ct [$env txn]
+ error_check_good txn \
+ [is_valid_txn $ct $env] TRUE
+ set ctxn "-txn $ct"
+ }
set ret [eval {$cntdb put} \
- $txn $pflags {$str [chop_data $method $ndup]}]
+ $ctxn $pflags {$str [chop_data $method $ndup]}]
error_check_good put_cnt $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$ct commit] 0
+ }
set datastr $i:$str
set ret [eval {$db put} \
$txn $pflags {$str [chop_data $method $datastr]}]
@@ -132,8 +161,16 @@ proc test030 { method {nentries 10000} args } {
set lastkey $k
# Figure out how may dups we should have
- set ret [eval {$cntdb get} $txn $pflags {$k}]
+ if { $txnenv == 1 } {
+ set ct [$env txn]
+ error_check_good txn [is_valid_txn $ct $env] TRUE
+ set ctxn "-txn $ct"
+ }
+ set ret [eval {$cntdb get} $ctxn $pflags {$k}]
set ndup [lindex [lindex $ret 0] 1]
+ if { $txnenv == 1 } {
+ error_check_good txn [$ct commit] 0
+ }
set howmany 1
for { set ret [$dbc get -nextdup] } \
@@ -186,6 +223,9 @@ proc test030 { method {nentries 10000} args } {
}
error_check_good cnt_curs_close [$cnt_dbc close] 0
error_check_good db_curs_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good cnt_file_close [$cntdb close] 0
error_check_good db_file_close [$db close] 0
}
diff --git a/db/test/test031.tcl b/db/test/test031.tcl
index 35041541f..fea40a1c4 100644
--- a/db/test/test031.tcl
+++ b/db/test/test031.tcl
@@ -1,22 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test031.tcl,v 11.17 2000/11/06 19:31:55 sue Exp $
+# $Id: test031.tcl,v 11.26 2003/01/08 05:53:49 bostic Exp $
#
-# DB Test 31 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and "ndups" duplicates
-# For the data field, prepend random five-char strings (see test032)
-# that we force the duplicate sorting code to do something.
-# Along the way, test that we cannot insert duplicate duplicates
-# using DB_NODUPDATA.
-# By setting ndups large, we can make this an off-page test
-# After all are entered, retrieve all; verify output.
-# Close file, reopen, do retrieve and re-verify.
-# This does not work for recno
-proc test031 { method {nentries 10000} {ndups 5} {tnum 31} args } {
+# TEST test031
+# TEST Duplicate sorting functionality
+# TEST Make sure DB_NODUPDATA works.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and "ndups" duplicates
+# TEST For the data field, prepend random five-char strings (see test032)
+# TEST that we force the duplicate sorting code to do something.
+# TEST Along the way, test that we cannot insert duplicate duplicates
+# TEST using DB_NODUPDATA.
+# TEST
+# TEST By setting ndups large, we can make this an off-page test
+# TEST After all are entered, retrieve all; verify output.
+# TEST Close file, reopen, do retrieve and re-verify.
+# TEST This does not work for recno
+proc test031 { method {nentries 10000} {ndups 5} {tnum "031"} args } {
global alphabet
global rand_init
source ./include.tcl
@@ -27,39 +31,53 @@ proc test031 { method {nentries 10000} {ndups 5} {tnum 31} args } {
set omethod [convert_method $method]
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set checkdb $testdir/checkdb.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
set checkdb checkdb.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- puts "Test0$tnum: \
- $method ($args) $nentries small sorted dup key/data pairs"
+ puts "Test$tnum: \
+ $method ($args) $nentries small $ndups sorted dup key/data pairs"
if { [is_record_based $method] == 1 || \
[is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $omethod"
+ puts "Test$tnum skipping for method $omethod"
return
}
- set db [eval {berkdb_open -create -truncate \
+ set db [eval {berkdb_open -create \
-mode 0644} $args {$omethod -dup -dupsort $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
set check_db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {-hash $checkdb}]
+ -create -mode 0644} $args {-hash $checkdb}]
error_check_good dbopen:check_db [is_valid_db $check_db] TRUE
set pflags ""
@@ -68,9 +86,14 @@ proc test031 { method {nentries 10000} {ndups 5} {tnum 31} args } {
set count 0
# Here is the loop where we put and get each key/data pair
- puts "\tTest0$tnum.a: Put/get loop, check nodupdata"
+ puts "\tTest$tnum.a: Put/get loop, check nodupdata"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
# Re-initialize random string generator
randstring_init $ndups
@@ -128,17 +151,25 @@ proc test031 { method {nentries 10000} {ndups 5} {tnum 31} args } {
incr x
set lastdup $datastr
}
- error_check_good "Test0$tnum:ndups:$str" $x $ndups
+ error_check_good "Test$tnum:ndups:$str" $x $ndups
incr count
}
error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: Checking file for correct duplicates"
+ puts "\tTest$tnum.b: Checking file for correct duplicates"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open(2) [is_substr $dbc $db] 1
+ error_check_good cursor_open(2) [is_valid_cursor $dbc $db] TRUE
set lastkey "THIS WILL NEVER BE A KEY VALUE"
# no need to delete $lastkey
@@ -189,8 +220,11 @@ proc test031 { method {nentries 10000} {ndups 5} {tnum 31} args } {
set ret [$check_c get -first]
error_check_good check_c:get:$ret [llength $ret] 0
error_check_good check_c:close [$check_c close] 0
- error_check_good check_db:close [$check_db close] 0
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ error_check_good check_db:close [$check_db close] 0
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test032.tcl b/db/test/test032.tcl
index 1504ec5cc..d83988a4b 100644
--- a/db/test/test032.tcl
+++ b/db/test/test032.tcl
@@ -1,21 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test032.tcl,v 11.15 2000/08/25 14:21:55 sue Exp $
+# $Id: test032.tcl,v 11.25 2003/01/08 05:53:50 bostic Exp $
#
-# DB Test 32 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and "ndups" duplicates
-# For the data field, prepend the letters of the alphabet
-# in a random order so that we force the duplicate sorting
-# code to do something.
-# By setting ndups large, we can make this an off-page test
-# After all are entered; test the DB_GET_BOTH functionality
-# first by retrieving each dup in the file explicitly. Then
-# test the failure case.
-proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
+# TEST test032
+# TEST DB_GET_BOTH, DB_GET_BOTH_RANGE
+# TEST
+# TEST Use the first 10,000 entries from the dictionary. Insert each with
+# TEST self as key and "ndups" duplicates. For the data field, prepend the
+# TEST letters of the alphabet in a random order so we force the duplicate
+# TEST sorting code to do something. By setting ndups large, we can make
+# TEST this an off-page test.
+# TEST
+# TEST Test the DB_GET_BOTH functionality by retrieving each dup in the file
+# TEST explicitly. Test the DB_GET_BOTH_RANGE functionality by retrieving
+# TEST the unique key prefix (cursor only). Finally test the failure case.
+proc test032 { method {nentries 10000} {ndups 5} {tnum "032"} args } {
global alphabet rand_init
source ./include.tcl
@@ -25,39 +27,53 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
berkdb srand $rand_init
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set checkdb $testdir/checkdb.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
set checkdb checkdb.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- puts "Test0$tnum:\
- $method ($args) $nentries small sorted dup key/data pairs"
+ puts "Test$tnum:\
+ $method ($args) $nentries small sorted $ndups dup key/data pairs"
if { [is_record_based $method] == 1 || \
[is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $omethod"
+ puts "Test$tnum skipping for method $omethod"
return
}
- set db [eval {berkdb_open -create -truncate -mode 0644 \
+ set db [eval {berkdb_open -create -mode 0644 \
$omethod -dup -dupsort} $args {$testfile} ]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
set check_db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {-hash $checkdb}]
+ -create -mode 0644} $args {-hash $checkdb}]
error_check_good dbopen:check_db [is_valid_db $check_db] TRUE
set pflags ""
@@ -66,9 +82,14 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
set count 0
# Here is the loop where we put and get each key/data pair
- puts "\tTest0$tnum.a: Put/get loop"
+ puts "\tTest$tnum.a: Put/get loop"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
# Re-initialize random string generator
randstring_init $ndups
@@ -101,25 +122,33 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
break
}
if {[string compare $lastdup $datastr] > 0} {
- error_check_good sorted_dups($lastdup,$datastr)\
- 0 1
+ error_check_good \
+ sorted_dups($lastdup,$datastr) 0 1
}
incr x
set lastdup $datastr
}
- error_check_good "Test0$tnum:ndups:$str" $x $ndups
+ error_check_good "Test$tnum:ndups:$str" $x $ndups
incr count
}
error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: Checking file for correct duplicates (no cursor)"
+ puts "\tTest$tnum.b: Checking file for correct duplicates (no cursor)"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set check_c [eval {$check_db cursor} $txn]
error_check_good check_c_open(2) \
- [is_substr $check_c $check_db] 1
+ [is_valid_cursor $check_c $check_db] TRUE
for {set ndx 0} {$ndx < [expr 4 * $ndups]} {incr ndx 4} {
for {set ret [$check_c get -first]} \
@@ -138,10 +167,11 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
}
$db sync
+
# Now repeat the above test using cursor ops
- puts "\tTest0$tnum.c: Checking file for correct duplicates (cursor)"
+ puts "\tTest$tnum.c: Checking file for correct duplicates (cursor)"
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
for {set ndx 0} {$ndx < [expr 4 * $ndups]} {incr ndx 4} {
for {set ret [$check_c get -first]} \
@@ -155,12 +185,16 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
set data $pref:$k
set ret [eval {$dbc get} {-get_both $k $data}]
error_check_good \
- get_both_key:$k $ret [list [list $k $data]]
+ curs_get_both_data:$k $ret [list [list $k $data]]
+
+ set ret [eval {$dbc get} {-get_both_range $k $pref}]
+ error_check_good \
+ curs_get_both_range:$k $ret [list [list $k $data]]
}
}
# Now check the error case
- puts "\tTest0$tnum.d: Check error case (no cursor)"
+ puts "\tTest$tnum.d: Check error case (no cursor)"
for {set ret [$check_c get -first]} \
{[llength $ret] != 0} \
{set ret [$check_c get -next] } {
@@ -174,7 +208,7 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
}
# Now check the error case
- puts "\tTest0$tnum.e: Check error case (cursor)"
+ puts "\tTest$tnum.e: Check error case (cursor)"
for {set ret [$check_c get -first]} \
{[llength $ret] != 0} \
{set ret [$check_c get -next] } {
@@ -188,8 +222,10 @@ proc test032 { method {nentries 10000} {ndups 5} {tnum 32} args } {
}
error_check_good check_c:close [$check_c close] 0
- error_check_good check_db:close [$check_db close] 0
-
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ error_check_good check_db:close [$check_db close] 0
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test033.tcl b/db/test/test033.tcl
index ed46e6bda..d91d845c5 100644
--- a/db/test/test033.tcl
+++ b/db/test/test033.tcl
@@ -1,103 +1,176 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test033.tcl,v 11.11 2000/10/25 15:45:20 sue Exp $
+# $Id: test033.tcl,v 11.26 2003/01/08 05:53:50 bostic Exp $
#
-# DB Test 33 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; add duplicate
-# records for each.
-# After all are entered, retrieve all; verify output by doing
-# DB_GET_BOTH on existing and non-existing keys.
-# This does not work for recno
-proc test033 { method {nentries 10000} {ndups 5} {tnum 33} args } {
+# TEST test033
+# TEST DB_GET_BOTH without comparison function
+# TEST
+# TEST Use the first 10,000 entries from the dictionary. Insert each with
+# TEST self as key and data; add duplicate records for each. After all are
+# TEST entered, retrieve all and verify output using DB_GET_BOTH (on DB and
+# TEST DBC handles) and DB_GET_BOTH_RANGE (on a DBC handle) on existent and
+# TEST nonexistent keys.
+# TEST
+# TEST XXX
+# TEST This does not work for rbtree.
+proc test033 { method {nentries 10000} {ndups 5} {tnum "033"} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
-
- puts "Test0$tnum: $method ($args) $nentries small dup key/data pairs"
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $omethod"
+ if { [is_rbtree $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
return
}
- # Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
+
+ puts "Test$tnum: $method ($args) $nentries small $ndups dup key/data pairs"
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644 \
- $omethod -dup} $args {$testfile}]
+ # Duplicate data entries are not allowed in record based methods.
+ if { [is_record_based $method] == 1 } {
+ set db [eval {berkdb_open -create -mode 0644 \
+ $omethod} $args {$testfile}]
+ } else {
+ set db [eval {berkdb_open -create -mode 0644 \
+ $omethod -dup} $args {$testfile}]
+ }
error_check_good dbopen [is_valid_db $db] TRUE
- set did [open $dict]
set pflags ""
set gflags ""
set txn ""
- set count 0
- puts "\tTest0$tnum.a: Put/get loop."
+ # Allocate a cursor for DB_GET_BOTH_RANGE.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
+
+ puts "\tTest$tnum.a: Put/get loop."
# Here is the loop where we put and get each key/data pair
+ set count 0
+ set did [open $dict]
while { [gets $did str] != -1 && $count < $nentries } {
- for { set i 1 } { $i <= $ndups } { incr i } {
- set datastr $i:$str
- set ret [eval {$db put} \
- $txn $pflags {$str [chop_data $method $datastr]}]
- error_check_good db_put $ret 0
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ set ret [eval {$db put} $txn $pflags \
+ {$key [chop_data $method $str]}]
+ error_check_good put $ret 0
+ } else {
+ for { set i 1 } { $i <= $ndups } { incr i } {
+ set datastr $i:$str
+ set ret [eval {$db put} \
+ $txn $pflags {$str [chop_data $method $datastr]}]
+ error_check_good db_put $ret 0
+ }
}
# Now retrieve all the keys matching this key and dup
- for {set i 1} {$i <= $ndups } { incr i } {
- set datastr $i:$str
- set ret [eval {$db get} $txn {-get_both $str $datastr}]
- error_check_good "Test0$tnum:dup#" [lindex \
- [lindex $ret 0] 1] [pad_data $method $datastr]
+ # for non-record based AMs.
+ if { [is_record_based $method] == 1 } {
+ test033_recno.check $db $dbc $method $str $txn $key
+ } else {
+ test033_check $db $dbc $method $str $txn $ndups
}
-
- # Now retrieve non-existent dup (i is ndups + 1)
- set datastr $i:$str
- set ret [eval {$db get} $txn {-get_both $str $datastr}]
- error_check_good Test0$tnum:dupfailure [llength $ret] 0
incr count
}
+
close $did
- set did [open $dict]
+ puts "\tTest$tnum.b: Verifying DB_GET_BOTH after creation."
set count 0
- puts "\tTest0$tnum.b: Verifying DB_GET_BOTH after creation."
+ set did [open $dict]
while { [gets $did str] != -1 && $count < $nentries } {
- # Now retrieve all the keys matching this key and dup
- for {set i 1} {$i <= $ndups } { incr i } {
- set datastr $i:$str
- set ret [eval {$db get} $txn {-get_both $str $datastr}]
- error_check_good "Test0$tnum:dup#" \
- [lindex [lindex $ret 0] 1] $datastr
+ # Now retrieve all the keys matching this key
+ # for non-record based AMs.
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ test033_recno.check $db $dbc $method $str $txn $key
+ } else {
+ test033_check $db $dbc $method $str $txn $ndups
}
-
- # Now retrieve non-existent dup (i is ndups + 1)
- set datastr $i:$str
- set ret [eval {$db get} $txn {-get_both $str $datastr}]
- error_check_good Test0$tnum:dupfailure [llength $ret] 0
incr count
}
close $did
+ error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
+
+# No testing of dups is done on record-based methods.
+proc test033_recno.check {db dbc method str txn key} {
+ set ret [eval {$db get} $txn {-recno $key}]
+ error_check_good "db_get:$method" \
+ [lindex [lindex $ret 0] 1] [pad_data $method $str]
+ set ret [$dbc get -get_both $key [pad_data $method $str]]
+ error_check_good "db_get_both:$method" \
+ [lindex [lindex $ret 0] 1] [pad_data $method $str]
+}
+
+# Testing of non-record-based methods includes duplicates
+# and get_both_range.
+proc test033_check {db dbc method str txn ndups} {
+ for {set i 1} {$i <= $ndups } { incr i } {
+ set datastr $i:$str
+
+ set ret [eval {$db get} $txn {-get_both $str $datastr}]
+ error_check_good "db_get_both:dup#" \
+ [lindex [lindex $ret 0] 1] $datastr
+
+ set ret [$dbc get -get_both $str $datastr]
+ error_check_good "dbc_get_both:dup#" \
+ [lindex [lindex $ret 0] 1] $datastr
+
+ set ret [$dbc get -get_both_range $str $datastr]
+ error_check_good "dbc_get_both_range:dup#" \
+ [lindex [lindex $ret 0] 1] $datastr
+ }
+
+ # Now retrieve non-existent dup (i is ndups + 1)
+ set datastr $i:$str
+ set ret [eval {$db get} $txn {-get_both $str $datastr}]
+ error_check_good db_get_both:dupfailure [llength $ret] 0
+ set ret [$dbc get -get_both $str $datastr]
+ error_check_good dbc_get_both:dupfailure [llength $ret] 0
+ set ret [$dbc get -get_both_range $str $datastr]
+ error_check_good dbc_get_both_range [llength $ret] 0
+}
diff --git a/db/test/test034.tcl b/db/test/test034.tcl
index b82f369f7..a14098240 100644
--- a/db/test/test034.tcl
+++ b/db/test/test034.tcl
@@ -1,16 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1998, 1999, 2000
+# Copyright (c) 1998-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test034.tcl,v 11.4 2000/02/14 03:00:19 bostic Exp $
+# $Id: test034.tcl,v 11.11 2003/01/27 18:15:01 sandstro Exp $
#
-# DB Test 34 {access method}
-# DB_GET_BOTH functionality with off-page duplicates.
+# TEST test034
+# TEST test032 with off-page duplicates
+# TEST DB_GET_BOTH, DB_GET_BOTH_RANGE functionality with off-page duplicates.
proc test034 { method {nentries 10000} args} {
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test034: Skipping for specific pagesizes"
+ return
+ }
# Test with off-page duplicates
- eval {test032 $method $nentries 20 34 -pagesize 512} $args
+ eval {test032 $method $nentries 20 "034" -pagesize 512} $args
# Test with multiple pages of off-page duplicates
- eval {test032 $method [expr $nentries / 10] 100 34 -pagesize 512} $args
+ eval {test032 $method [expr $nentries / 10] 100 "034" -pagesize 512} \
+ $args
}
diff --git a/db/test/test035.tcl b/db/test/test035.tcl
index e2afef4af..7fa287895 100644
--- a/db/test/test035.tcl
+++ b/db/test/test035.tcl
@@ -1,16 +1,22 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test035.tcl,v 11.3 2000/02/14 03:00:19 bostic Exp $
+# $Id: test035.tcl,v 11.11 2003/01/27 18:15:01 sandstro Exp $
#
-# DB Test 35 {access method}
-# DB_GET_BOTH functionality with off-page duplicates.
+# TEST test035
+# TEST Test033 with off-page duplicates
+# TEST DB_GET_BOTH functionality with off-page duplicates.
proc test035 { method {nentries 10000} args} {
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test035: Skipping for specific pagesizes"
+ return
+ }
# Test with off-page duplicates
- eval {test033 $method $nentries 20 35 -pagesize 512} $args
-
+ eval {test033 $method $nentries 20 "035" -pagesize 512} $args
# Test with multiple pages of off-page duplicates
- eval {test033 $method [expr $nentries / 10] 100 35 -pagesize 512} $args
+ eval {test033 $method [expr $nentries / 10] 100 "035" -pagesize 512} \
+ $args
}
diff --git a/db/test/test036.tcl b/db/test/test036.tcl
index 4d859c065..81b652854 100644
--- a/db/test/test036.tcl
+++ b/db/test/test036.tcl
@@ -1,27 +1,27 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test036.tcl,v 11.13 2000/08/25 14:21:55 sue Exp $
+# $Id: test036.tcl,v 11.19 2003/01/08 05:53:52 bostic Exp $
#
-# DB Test 36 {access method}
-# Put nentries key/data pairs (from the dictionary) using a cursor
-# and KEYFIRST and KEYLAST (this tests the case where use use cursor
-# put for non-existent keys).
+# TEST test036
+# TEST Test KEYFIRST and KEYLAST when the key doesn't exist
+# TEST Put nentries key/data pairs (from the dictionary) using a cursor
+# TEST and KEYFIRST and KEYLAST (this tests the case where use use cursor
+# TEST put for non-existent keys).
proc test036 { method {nentries 10000} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
-
- puts "Test036: $method ($args) $nentries equal key/data pairs"
if { [is_record_based $method] == 1 } {
puts "Test036 skipping for method recno"
return
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -33,13 +33,27 @@ proc test036 { method {nentries 10000} args } {
set testfile test036.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
+
+ puts "Test036: $method ($args) $nentries equal key/data pairs"
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $args {$omethod $testfile}]
+ -create -mode 0644} $args {$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -56,8 +70,13 @@ proc test036 { method {nentries 10000} args } {
}
puts "\tTest036.a: put/get loop KEYFIRST"
# Here is the loop where we put and get each key/data pair
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor [is_substr $dbc $db] 1
+ error_check_good cursor [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
global kvals
@@ -67,7 +86,7 @@ proc test036 { method {nentries 10000} args } {
} else {
set key $str
}
- set ret [eval {$dbc put} $txn $pflags {-keyfirst $key $str}]
+ set ret [eval {$dbc put} $pflags {-keyfirst $key $str}]
error_check_good put $ret 0
set ret [eval {$db get} $txn $gflags {$key}]
@@ -75,10 +94,18 @@ proc test036 { method {nentries 10000} args } {
incr count
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
puts "\tTest036.a: put/get loop KEYLAST"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor [is_substr $dbc $db] 1
+ error_check_good cursor [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
global kvals
@@ -96,12 +123,23 @@ proc test036 { method {nentries 10000} args } {
incr count
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $did
# Now we will get each key from the DB and compare the results
# to the original.
puts "\tTest036.c: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
diff --git a/db/test/test037.tcl b/db/test/test037.tcl
index 31528c6ee..3b5baa5c7 100644
--- a/db/test/test037.tcl
+++ b/db/test/test037.tcl
@@ -1,12 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test037.tcl,v 11.11 2000/08/25 14:21:55 sue Exp $
+# $Id: test037.tcl,v 11.19 2003/01/08 05:53:52 bostic Exp $
#
-# Test037: RMW functionality.
+# TEST test037
+# TEST Test DB_RMW
proc test037 { method {nentries 100} args } {
+ global encrypt
+
source ./include.tcl
set eindex [lsearch -exact $args "-env"]
#
@@ -21,6 +24,8 @@ proc test037 { method {nentries 100} args } {
puts "Test037: RMW $method"
set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
set omethod [convert_method $method]
# Create the database
@@ -28,7 +33,7 @@ proc test037 { method {nentries 100} args } {
set testfile test037.db
set local_env \
- [berkdb env -create -mode 0644 -txn -home $testdir]
+ [eval {berkdb_env -create -mode 0644 -txn} $encargs -home $testdir]
error_check_good dbenv [is_valid_env $local_env] TRUE
set db [eval {berkdb_open \
@@ -73,9 +78,9 @@ proc test037 { method {nentries 100} args } {
puts "\tTest037.b: Setting up environments"
# Open local environment
- set env_cmd [concat berkdb env -create -txn -home $testdir]
+ set env_cmd [concat berkdb_env -create -txn $encargs -home $testdir]
set local_env [eval $env_cmd]
- error_check_good dbenv [is_valid_widget $local_env env] TRUE
+ error_check_good dbenv [is_valid_env $local_env] TRUE
# Open local transaction
set local_txn [$local_env txn]
@@ -101,11 +106,11 @@ proc test037 { method {nentries 100} args } {
set did [open $dict]
set rkey 0
- set db [berkdb_open -env $local_env $testfile]
+ set db [berkdb_open -auto_commit -env $local_env $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set rdb [send_cmd $f1 \
- "berkdb_open -env $remote_env -mode 0644 $testfile"]
- error_check_good remote:dbopen [is_valid_widget $rdb db] TRUE
+ "berkdb_open -auto_commit -env $remote_env -mode 0644 $testfile"]
+ error_check_good remote:dbopen [is_valid_db $rdb] TRUE
puts "\tTest037.d: Testing without RMW"
@@ -142,12 +147,12 @@ proc test037 { method {nentries 100} args } {
# Open local transaction
set local_txn [$local_env txn]
error_check_good \
- txn_open [is_valid_widget $local_txn $local_env.txn] TRUE
+ txn_open [is_valid_txn $local_txn $local_env] TRUE
# Open remote transaction
set remote_txn [send_cmd $f1 "$remote_env txn"]
error_check_good remote:txn_open \
- [is_valid_widget $remote_txn $remote_env.txn] TRUE
+ [is_valid_txn $remote_txn $remote_env] TRUE
# Now, get a key and try to "get" it from both DBs.
error_check_bad "gets on new open" [gets $did str] -1
diff --git a/db/test/test038.tcl b/db/test/test038.tcl
index 2a726f1bc..9b82ffdfb 100644
--- a/db/test/test038.tcl
+++ b/db/test/test038.tcl
@@ -1,21 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test038.tcl,v 11.12 2000/08/25 14:21:56 sue Exp $
+# $Id: test038.tcl,v 11.25 2003/01/08 05:53:52 bostic Exp $
#
-# DB Test 38 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and "ndups" duplicates
-# For the data field, prepend the letters of the alphabet
-# in a random order so that we force the duplicate sorting
-# code to do something.
-# By setting ndups large, we can make this an off-page test
-# After all are entered; test the DB_GET_BOTH functionality
-# first by retrieving each dup in the file explicitly. Then
-# remove each duplicate and try DB_GET_BOTH again.
-proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
+# TEST test038
+# TEST DB_GET_BOTH, DB_GET_BOTH_RANGE on deleted items
+# TEST
+# TEST Use the first 10,000 entries from the dictionary. Insert each with
+# TEST self as key and "ndups" duplicates. For the data field, prepend the
+# TEST letters of the alphabet in a random order so we force the duplicate
+# TEST sorting code to do something. By setting ndups large, we can make
+# TEST this an off-page test
+# TEST
+# TEST Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving
+# TEST each dup in the file explicitly. Then remove each duplicate and try
+# TEST the retrieval again.
+proc test038 { method {nentries 10000} {ndups 5} {tnum "038"} args } {
global alphabet
global rand_init
source ./include.tcl
@@ -25,40 +27,54 @@ proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
+ if { [is_record_based $method] == 1 || \
+ [is_rbtree $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set checkdb $testdir/checkdb.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
set checkdb checkdb.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- puts "Test0$tnum: \
+ puts "Test$tnum: \
$method ($args) $nentries small sorted dup key/data pairs"
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
- return
- }
- set db [eval {berkdb_open -create -truncate -mode 0644 \
+ set db [eval {berkdb_open -create -mode 0644 \
$omethod -dup -dupsort} $args {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
- set check_db [berkdb_open \
- -create -truncate -mode 0644 -hash $checkdb]
+ set check_db [eval {berkdb_open \
+ -create -mode 0644 -hash} $args {$checkdb}]
error_check_good dbopen:check_db [is_valid_db $check_db] TRUE
set pflags ""
@@ -67,9 +83,14 @@ proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
set count 0
# Here is the loop where we put and get each key/data pair
- puts "\tTest0$tnum.a: Put/get loop"
+ puts "\tTest$tnum.a: Put/get loop"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
set dups ""
for { set i 1 } { $i <= $ndups } { incr i } {
@@ -121,18 +142,26 @@ proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
incr x
set lastdup $datastr
}
- error_check_good "Test0$tnum:ndups:$str" $x $ndups
+ error_check_good "Test$tnum:ndups:$str" $x $ndups
incr count
}
error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $did
# Now check the duplicates, then delete then recheck
- puts "\tTest0$tnum.b: Checking and Deleting duplicates"
+ puts "\tTest$tnum.b: Checking and Deleting duplicates"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
set check_c [eval {$check_db cursor} $txn]
- error_check_good cursor_open [is_substr $check_c $check_db] 1
+ error_check_good cursor_open [is_valid_cursor $check_c $check_db] TRUE
for {set ndx 0} {$ndx < $ndups} {incr ndx} {
for {set ret [$check_c get -first]} \
@@ -145,16 +174,37 @@ proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
set nn [expr $ndx * 3]
set pref [string range $d $nn [expr $nn + 1]]
set data $pref:$k
- set ret [eval {$dbc get} $txn {-get_both $k $data}]
+ set ret [$dbc get -get_both $k $data]
+ error_check_good \
+ get_both_key:$k [lindex [lindex $ret 0] 0] $k
+ error_check_good \
+ get_both_data:$k [lindex [lindex $ret 0] 1] $data
+
+ set ret [$dbc get -get_both_range $k $pref]
error_check_good \
get_both_key:$k [lindex [lindex $ret 0] 0] $k
error_check_good \
get_both_data:$k [lindex [lindex $ret 0] 1] $data
+
set ret [$dbc del]
error_check_good del $ret 0
+
set ret [eval {$db get} $txn {-get_both $k $data}]
error_check_good error_case:$k [llength $ret] 0
+ # We should either not find anything (if deleting the
+ # largest duplicate in the set) or a duplicate that
+ # sorts larger than the one we deleted.
+ set ret [$dbc get -get_both_range $k $pref]
+ if { [llength $ret] != 0 } {
+ set datastr [lindex [lindex $ret 0] 1]]
+ if {[string compare \
+ $pref [lindex [lindex $ret 0] 1]] >= 0} {
+ error_check_good \
+ error_case_range:sorted_dups($pref,$datastr) 0 1
+ }
+ }
+
if {$ndx != 0} {
set n [expr ($ndx - 1) * 3]
set pref [string range $d $n [expr $n + 1]]
@@ -167,8 +217,11 @@ proc test038 { method {nentries 10000} {ndups 5} {tnum 38} args } {
}
error_check_good check_c:close [$check_c close] 0
- error_check_good check_db:close [$check_db close] 0
-
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ error_check_good check_db:close [$check_db close] 0
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test039.tcl b/db/test/test039.tcl
index 957468ce5..65865380a 100644
--- a/db/test/test039.tcl
+++ b/db/test/test039.tcl
@@ -1,21 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test039.tcl,v 11.11 2000/08/25 14:21:56 sue Exp $
+# $Id: test039.tcl,v 11.22 2003/01/08 05:53:53 bostic Exp $
#
-# DB Test 39 {access method}
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and "ndups" duplicates
-# For the data field, prepend the letters of the alphabet
-# in a random order so that we force the duplicate sorting
-# code to do something.
-# By setting ndups large, we can make this an off-page test
-# After all are entered; test the DB_GET_BOTH functionality
-# first by retrieving each dup in the file explicitly. Then
-# remove each duplicate and try DB_GET_BOTH again.
-proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
+# TEST test039
+# TEST DB_GET_BOTH/DB_GET_BOTH_RANGE on deleted items without comparison
+# TEST function.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary. Insert each with
+# TEST self as key and "ndups" duplicates. For the data field, prepend the
+# TEST letters of the alphabet in a random order so we force the duplicate
+# TEST sorting code to do something. By setting ndups large, we can make
+# TEST this an off-page test.
+# TEST
+# TEST Test the DB_GET_BOTH and DB_GET_BOTH_RANGE functionality by retrieving
+# TEST each dup in the file explicitly. Then remove each duplicate and try
+# TEST the retrieval again.
+proc test039 { method {nentries 10000} {ndups 5} {tnum "039"} args } {
global alphabet
global rand_init
source ./include.tcl
@@ -25,40 +28,55 @@ proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
+ if { [is_record_based $method] == 1 || \
+ [is_rbtree $method] == 1 } {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set checkdb $testdir/checkdb.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
set checkdb checkdb.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
cleanup $testdir $env
- puts "Test0$tnum: $method $nentries small unsorted dup key/data pairs"
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
- return
- }
+ puts "Test$tnum: $method $nentries \
+ small $ndups unsorted dup key/data pairs"
- set db [eval {berkdb_open -create -truncate -mode 0644 \
+ set db [eval {berkdb_open -create -mode 0644 \
$omethod -dup} $args {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
- set check_db \
- [berkdb_open -create -truncate -mode 0644 -hash $checkdb]
+ set check_db [eval \
+ {berkdb_open -create -mode 0644 -hash} $args {$checkdb}]
error_check_good dbopen:check_db [is_valid_db $check_db] TRUE
set pflags ""
@@ -67,9 +85,14 @@ proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
set count 0
# Here is the loop where we put and get each key/data pair
- puts "\tTest0$tnum.a: Put/get loop"
+ puts "\tTest$tnum.a: Put/get loop"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
while { [gets $did str] != -1 && $count < $nentries } {
set dups ""
for { set i 1 } { $i <= $ndups } { incr i } {
@@ -120,18 +143,26 @@ proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
error_check_good retrieve $datastr $check_data
incr x
}
- error_check_good "Test0$tnum:ndups:$str" $x $ndups
+ error_check_good "Test$tnum:ndups:$str" $x $ndups
incr count
}
error_check_good cursor_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
close $did
# Now check the duplicates, then delete then recheck
- puts "\tTest0$tnum.b: Checking and Deleting duplicates"
+ puts "\tTest$tnum.b: Checking and Deleting duplicates"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
set check_c [eval {$check_db cursor} $txn]
- error_check_good cursor_open [is_substr $check_c $check_db] 1
+ error_check_good cursor_open [is_valid_cursor $check_c $check_db] TRUE
for {set ndx 0} {$ndx < $ndups} {incr ndx} {
for {set ret [$check_c get -first]} \
@@ -144,8 +175,7 @@ proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
set nn [expr $ndx * 3]
set pref [string range $d $nn [expr $nn + 1]]
set data $pref:$k
- set ret \
- [eval {$dbc get} $txn $gflags {-get_both $k $data}]
+ set ret [$dbc get -get_both $k $data]
error_check_good \
get_both_key:$k [lindex [lindex $ret 0] 0] $k
error_check_good \
@@ -154,24 +184,28 @@ proc test039 { method {nentries 10000} {ndups 5} {tnum 39} args } {
set ret [$dbc del]
error_check_good del $ret 0
- set ret \
- [eval {$dbc get} $txn $gflags {-get_both $k $data}]
- error_check_good error_case:$k [llength $ret] 0
+ set ret [$dbc get -get_both $k $data]
+ error_check_good get_both:$k [llength $ret] 0
+
+ set ret [$dbc get -get_both_range $k $data]
+ error_check_good get_both_range:$k [llength $ret] 0
if {$ndx != 0} {
set n [expr ($ndx - 1) * 3]
set pref [string range $d $n [expr $n + 1]]
set data $pref:$k
- set ret [eval {$dbc get} \
- $txn $gflags {-get_both $k $data}]
+ set ret [$dbc get -get_both $k $data]
error_check_good error_case:$k [llength $ret] 0
}
}
}
error_check_good check_c:close [$check_c close] 0
- error_check_good check_db:close [$check_db close] 0
-
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ error_check_good check_db:close [$check_db close] 0
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test040.tcl b/db/test/test040.tcl
index 912e1735d..7151b56b6 100644
--- a/db/test/test040.tcl
+++ b/db/test/test040.tcl
@@ -1,16 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1998, 1999, 2000
+# Copyright (c) 1998-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test040.tcl,v 11.3 2000/02/14 03:00:20 bostic Exp $
+# $Id: test040.tcl,v 11.9 2003/01/27 18:15:01 sandstro Exp $
#
-# DB Test 40 {access method}
-# DB_GET_BOTH functionality with off-page duplicates.
+# TEST test040
+# TEST Test038 with off-page duplicates
+# TEST DB_GET_BOTH functionality with off-page duplicates.
proc test040 { method {nentries 10000} args} {
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test040: skipping for specific pagesizes"
+ return
+ }
# Test with off-page duplicates
- eval {test038 $method $nentries 20 40 -pagesize 512} $args
+ eval {test038 $method $nentries 20 "040" -pagesize 512} $args
# Test with multiple pages of off-page duplicates
- eval {test038 $method [expr $nentries / 10] 100 40 -pagesize 512} $args
+ eval {test038 $method [expr $nentries / 10] 100 "040" -pagesize 512} \
+ $args
}
diff --git a/db/test/test041.tcl b/db/test/test041.tcl
index bba89f49b..45eb2819a 100644
--- a/db/test/test041.tcl
+++ b/db/test/test041.tcl
@@ -1,16 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test041.tcl,v 11.3 2000/02/14 03:00:20 bostic Exp $
+# $Id: test041.tcl,v 11.8 2003/01/08 05:53:54 bostic Exp $
#
-# DB Test 41 {access method}
-# DB_GET_BOTH functionality with off-page duplicates.
+# TEST test041
+# TEST Test039 with off-page duplicates
+# TEST DB_GET_BOTH functionality with off-page duplicates.
proc test041 { method {nentries 10000} args} {
# Test with off-page duplicates
- eval {test039 $method $nentries 20 41 -pagesize 512} $args
+ eval {test039 $method $nentries 20 "041" -pagesize 512} $args
# Test with multiple pages of off-page duplicates
- eval {test039 $method [expr $nentries / 10] 100 41 -pagesize 512} $args
+ eval {test039 $method [expr $nentries / 10] 100 "041" -pagesize 512} \
+ $args
}
diff --git a/db/test/test042.tcl b/db/test/test042.tcl
index 232cb3a6b..ec7bbf344 100644
--- a/db/test/test042.tcl
+++ b/db/test/test042.tcl
@@ -1,27 +1,26 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test042.tcl,v 11.24 2000/08/25 14:21:56 sue Exp $
+# $Id: test042.tcl,v 11.44 2003/09/29 18:19:18 sandstro Exp $
#
-# DB Test 42 {access method}
-#
-# Multiprocess DB test; verify that locking is working for the concurrent
-# access method product.
-#
-# Use the first "nentries" words from the dictionary. Insert each with self
-# as key and a fixed, medium length data string. Then fire off multiple
-# processes that bang on the database. Each one should try to read and write
-# random keys. When they rewrite, they'll append their pid to the data string
-# (sometimes doing a rewrite sometimes doing a partial put). Some will use
-# cursors to traverse through a few keys before finding one to write.
-
-set datastr abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
+# TEST test042
+# TEST Concurrent Data Store test (CDB)
+# TEST
+# TEST Multiprocess DB test; verify that locking is working for the
+# TEST concurrent access method product.
+# TEST
+# TEST Use the first "nentries" words from the dictionary. Insert each with
+# TEST self as key and a fixed, medium length data string. Then fire off
+# TEST multiple processes that bang on the database. Each one should try to
+# TEST read and write random keys. When they rewrite, they'll append their
+# TEST pid to the data string (sometimes doing a rewrite sometimes doing a
+# TEST partial put). Some will use cursors to traverse through a few keys
+# TEST before finding one to write.
proc test042 { method {nentries 1000} args } {
- global datastr
- source ./include.tcl
+ global encrypt
#
# If we are using an env, then skip this test. It needs its own.
@@ -32,10 +31,25 @@ proc test042 { method {nentries 1000} args } {
puts "Test042 skipping for env $env"
return
}
+
set args [convert_args $method $args]
- set omethod [convert_method $method]
+ if { $encrypt != 0 } {
+ puts "Test042 skipping for security"
+ return
+ }
+ test042_body $method $nentries 0 $args
+ test042_body $method $nentries 1 $args
+}
+
+proc test042_body { method nentries alldb args } {
+ source ./include.tcl
- puts "Test042: CDB Test $method $nentries"
+ if { $alldb } {
+ set eflag "-cdb -cdb_alldb"
+ } else {
+ set eflag "-cdb"
+ }
+ puts "Test042: CDB Test ($eflag) $method $nentries"
# Set initial parameters
set do_exit 0
@@ -55,51 +69,32 @@ proc test042 { method {nentries 1000} args } {
}
# Create the database and open the dictionary
- set testfile test042.db
+ set basename test042
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
env_cleanup $testdir
- set env [berkdb env -create -cdb -home $testdir]
- error_check_good dbenv [is_valid_widget $env env] TRUE
-
- set db [eval {berkdb_open -env $env -create -truncate \
- -mode 0644 $omethod} $oargs {$testfile}]
- error_check_good dbopen [is_valid_widget $db db] TRUE
-
- set did [open $dict]
+ set env [eval {berkdb_env -create} $eflag -home $testdir]
+ error_check_good dbenv [is_valid_env $env] TRUE
- set pflags ""
- set gflags ""
- set txn ""
- set count 0
-
- # Here is the loop where we put each key/data pair
- puts "\tTest042.a: put/get loop"
- while { [gets $did str] != -1 && $count < $nentries } {
- if { [is_record_based $method] == 1 } {
- set key [expr $count + 1]
- } else {
- set key $str
+ # Env is created, now set up database
+ test042_dbinit $env $nentries $method $oargs $basename.0.db
+ if { $alldb } {
+ for { set i 1 } {$i < $procs} {incr i} {
+ test042_dbinit $env $nentries $method $oargs \
+ $basename.$i.db
}
- set ret [eval {$db put} \
- $txn $pflags {$key [chop_data $method $datastr]}]
- error_check_good put:$db $ret 0
- incr count
}
- close $did
- error_check_good close:$db [$db close] 0
-
- # Database is created, now set up environment
# Remove old mpools and Open/create the lock and mpool regions
error_check_good env:close:$env [$env close] 0
set ret [berkdb envremove -home $testdir]
error_check_good env_remove $ret 0
- set env [berkdb env -create -cdb -home $testdir]
+ set env [eval {berkdb_env \
+ -create -cachesize {0 1048576 1}} $eflag -home $testdir]
error_check_good dbenv [is_valid_widget $env env] TRUE
if { $do_exit == 1 } {
@@ -112,38 +107,78 @@ proc test042 { method {nentries 1000} args } {
set pidlist {}
for { set i 0 } {$i < $procs} {incr i} {
+ if { $alldb } {
+ set tf $basename.$i.db
+ } else {
+ set tf $basename.0.db
+ }
puts "exec $tclsh_path $test_path/wrap.tcl \
mdbscript.tcl $testdir/test042.$i.log \
- $method $testdir $testfile $nentries $iter $i $procs &"
+ $method $testdir $tf $nentries $iter $i $procs &"
set p [exec $tclsh_path $test_path/wrap.tcl \
mdbscript.tcl $testdir/test042.$i.log $method \
- $testdir $testfile $nentries $iter $i $procs &]
+ $testdir $tf $nentries $iter $i $procs &]
lappend pidlist $p
}
puts "Test042: $procs independent processes now running"
- watch_procs
+ watch_procs $pidlist
+
+ # Make sure we haven't added or lost any entries.
+ set dblist [glob $testdir/$basename.*.db]
+ foreach file $dblist {
+ set tf [file tail $file]
+ set db [eval {berkdb_open -env $env $tf}]
+ set statret [$db stat]
+ foreach pair $statret {
+ set fld [lindex $pair 0]
+ if { [string compare $fld {Number of records}] == 0 } {
+ set numrecs [lindex $pair 1]
+ break
+ }
+ }
+ error_check_good nentries $numrecs $nentries
+ error_check_good db_close [$db close] 0
+ }
# Check for test failure
- set e [eval findfail [glob $testdir/test042.*.log]]
- error_check_good "FAIL: error message(s) in log files" $e 0
+ set errstrings [eval findfail [glob $testdir/test042.*.log]]
+ foreach str $errstrings {
+ puts "FAIL: error message in log file: $str"
+ }
# Test is done, blow away lock and mpool region
reset_env $env
}
-# If we are renumbering, then each time we delete an item, the number of
-# items in the file is temporarily decreased, so the highest record numbers
-# do not exist. To make sure this doesn't happen, we never generate the
-# highest few record numbers as keys.
-#
-# For record-based methods, record numbers begin at 1, while for other keys,
-# we begin at 0 to index into an array.
-proc rand_key { method nkeys renum procs} {
- if { $renum == 1 } {
- return [berkdb random_int 1 [expr $nkeys - $procs]]
- } elseif { [is_record_based $method] == 1 } {
- return [berkdb random_int 1 $nkeys]
- } else {
- return [berkdb random_int 0 [expr $nkeys - 1]]
+proc test042_dbinit { env nentries method oargs tf } {
+ global datastr
+ source ./include.tcl
+
+ set omethod [convert_method $method]
+ set db [eval {berkdb_open -env $env -create \
+ -mode 0644 $omethod} $oargs $tf]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ set did [open $dict]
+
+ set pflags ""
+ set gflags ""
+ set txn ""
+ set count 0
+
+ # Here is the loop where we put each key/data pair
+ puts "\tTest042.a: put loop $tf"
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+ set ret [eval {$db put} \
+ $txn $pflags {$key [chop_data $method $datastr]}]
+ error_check_good put:$db $ret 0
+ incr count
}
+ close $did
+ error_check_good close:$db [$db close] 0
}
diff --git a/db/test/test043.tcl b/db/test/test043.tcl
index 274ec1b71..ee5e1fc2d 100644
--- a/db/test/test043.tcl
+++ b/db/test/test043.tcl
@@ -1,12 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test043.tcl,v 11.12 2000/08/25 14:21:56 sue Exp $
+# $Id: test043.tcl,v 11.18 2003/01/08 05:53:54 bostic Exp $
#
-# DB Test 43 {method nentries}
-# Test the Record number implicit creation and renumbering options.
+# TEST test043
+# TEST Recno renumbering and implicit creation test
+# TEST Test the Record number implicit creation and renumbering options.
proc test043 { method {nentries 10000} args} {
source ./include.tcl
@@ -22,6 +23,7 @@ proc test043 { method {nentries 10000} args} {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -33,11 +35,23 @@ proc test043 { method {nentries 10000} args} {
set testfile test043.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
# Create the database
- set db [eval {berkdb_open -create -truncate -mode 0644} $args \
+ set db [eval {berkdb_open -create -mode 0644} $args \
{$omethod $testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -53,16 +67,29 @@ proc test043 { method {nentries 10000} args} {
}
puts "\tTest043.a: insert keys at $interval record intervals"
while { $count <= $nentries } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$count [chop_data $method $count]}]
error_check_good "$db put $count" $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set last $count
incr count $interval
}
puts "\tTest043.b: get keys using DB_FIRST/DB_NEXT"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
- error_check_good "$db cursor" [is_substr $dbc $db] 1
+ error_check_good "$db cursor" [is_valid_cursor $dbc $db] TRUE
set check 1
for { set rec [$dbc get -first] } { [llength $rec] != 0 } {
@@ -158,5 +185,8 @@ proc test043 { method {nentries 10000} args} {
}
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test044.tcl b/db/test/test044.tcl
index 0be7a7049..0bb250134 100644
--- a/db/test/test044.tcl
+++ b/db/test/test044.tcl
@@ -1,25 +1,31 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test044.tcl,v 11.26 2000/10/27 13:23:56 sue Exp $
+# $Id: test044.tcl,v 11.34 2003/09/16 19:01:36 sandstro Exp $
#
-# DB Test 44 {access method}
-# System integration DB test: verify that locking, recovery, checkpoint,
-# and all the other utilities basically work.
+# TEST test044
+# TEST Small system integration tests
+# TEST Test proper functioning of the checkpoint daemon,
+# TEST recovery, transactions, etc.
+# TEST
+# TEST System integration DB test: verify that locking, recovery, checkpoint,
+# TEST and all the other utilities basically work.
+# TEST
+# TEST The test consists of $nprocs processes operating on $nfiles files. A
+# TEST transaction consists of adding the same key/data pair to some random
+# TEST number of these files. We generate a bimodal distribution in key size
+# TEST with 70% of the keys being small (1-10 characters) and the remaining
+# TEST 30% of the keys being large (uniform distribution about mean $key_avg).
+# TEST If we generate a key, we first check to make sure that the key is not
+# TEST already in the dataset. If it is, we do a lookup.
#
-# The test consists of $nprocs processes operating on $nfiles files. A
-# transaction consists of adding the same key/data pair to some random
-# number of these files. We generate a bimodal distribution in key
-# size with 70% of the keys being small (1-10 characters) and the
-# remaining 30% of the keys being large (uniform distribution about
-# mean $key_avg). If we generate a key, we first check to make sure
-# that the key is not already in the dataset. If it is, we do a lookup.
-#
-# XXX This test uses grow-only files currently!
+# XXX
+# This test uses grow-only files currently!
proc test044 { method {nprocs 5} {nfiles 10} {cont 0} args } {
source ./include.tcl
+ global encrypt
global rand_init
set args [convert_args $method $args]
@@ -35,6 +41,10 @@ proc test044 { method {nprocs 5} {nfiles 10} {cont 0} args } {
puts "Test044 skipping for env $env"
return
}
+ if { $encrypt != 0 } {
+ puts "Test044 skipping for security"
+ return
+ }
puts "Test044: system integration test db $method $nprocs processes \
on $nfiles files"
@@ -62,7 +72,7 @@ proc test044 { method {nprocs 5} {nfiles 10} {cont 0} args } {
# Create an environment
puts "\tTest044.a: creating environment and $nfiles files"
- set dbenv [berkdb env -create -txn -home $testdir]
+ set dbenv [berkdb_env -create -txn -home $testdir]
error_check_good env_open [is_valid_env $dbenv] TRUE
# Create a bunch of files
@@ -97,7 +107,7 @@ proc test044 { method {nprocs 5} {nfiles 10} {cont 0} args } {
set cycle 1
set ncycles 3
while { $cycle <= $ncycles } {
- set dbenv [berkdb env -create -txn -home $testdir]
+ set dbenv [berkdb_env -create -txn -home $testdir]
error_check_good env_open [is_valid_env $dbenv] TRUE
# Fire off deadlock detector and checkpointer
@@ -128,19 +138,18 @@ proc test044 { method {nprocs 5} {nfiles 10} {cont 0} args } {
#
error_check_good env_close [$dbenv close] 0
- exec $KILL -9 $ddpid
- exec $KILL -9 $cppid
- #
- # Use catch so that if any of the children died, we don't
- # stop the script
- #
+ tclkill $ddpid
+ tclkill $cppid
+
foreach p $pidlist {
- set e [catch {eval exec \
- [concat $KILL -9 $p]} res]
+ tclkill $p
}
+
# Check for test failure
- set e [eval findfail [glob $testdir/test044.*.log]]
- error_check_good "FAIL: error message(s) in log files" $e 0
+ set errstrings [eval findfail [glob $testdir/test044.*.log]]
+ foreach str $errstrings {
+ puts "FAIL: error message in log file: $str"
+ }
# Now run recovery
test044_verify $testdir $nfiles
diff --git a/db/test/test045.tcl b/db/test/test045.tcl
index 65f031d02..25e8ae51c 100644
--- a/db/test/test045.tcl
+++ b/db/test/test045.tcl
@@ -1,11 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test045.tcl,v 11.17 2000/10/19 23:15:22 ubell Exp $
+# $Id: test045.tcl,v 11.26 2003/09/16 19:01:36 sandstro Exp $
+#
+# TEST test045
+# TEST Small random tester
+# TEST Runs a number of random add/delete/retrieve operations.
+# TEST Tests both successful conditions and error conditions.
+# TEST
+# TEST Run the random db tester on the specified access method.
#
-# DB Test 45 Run the random db tester on the specified access method.
# Options are:
# -adds <maximum number of keys before you disable adds>
# -cursors <number of cursors>
@@ -17,11 +23,7 @@
# -keyavg <average key size>
proc test045 { method {nops 10000} args } {
source ./include.tcl
-
- if { [is_frecno $method] == 1 } {
- puts "\tSkipping Test045 for method $method."
- return
- }
+ global encrypt
#
# If we are using an env, then skip this test. It needs its own.
@@ -33,6 +35,10 @@ proc test045 { method {nops 10000} args } {
return
}
set args [convert_args $method $args]
+ if { $encrypt != 0 } {
+ puts "Test045 skipping for security"
+ return
+ }
set omethod [convert_method $method]
puts "Test045: Random tester on $method for $nops operations"
@@ -63,7 +69,7 @@ proc test045 { method {nops 10000} args } {
-errpct { incr i; set errpct [lindex $args $i] }
-init { incr i; set init [lindex $args $i] }
-keyavg { incr i; set keyavg [lindex $args $i] }
- -extent { incr i;
+ -extent { incr i;
lappend oargs "-extent" "100" }
default { lappend oargs [lindex $args $i] }
}
@@ -77,7 +83,7 @@ proc test045 { method {nops 10000} args } {
# Run the script with 3 times the number of initial elements to
# set it up.
set db [eval {berkdb_open \
- -create -truncate -mode 0644 $omethod} $oargs {$f}]
+ -create -mode 0644 $omethod} $oargs {$f}]
error_check_good dbopen:$f [is_valid_db $db] TRUE
set r [$db close]
@@ -90,28 +96,31 @@ proc test045 { method {nops 10000} args } {
if { $init != 0 } {
set n [expr 3 * $init]
exec $tclsh_path \
- $test_path/dbscript.tcl $f $n \
+ $test_path/dbscript.tcl $method $f $n \
1 $init $n $keyavg $dataavg $dups 0 -1 \
> $testdir/test045.init
}
# Check for test failure
- set e [findfail $testdir/test045.init]
- error_check_good "FAIL: error message(s) in init file" $e 0
+ set initerrs [findfail $testdir/test045.init]
+ foreach str $initerrs {
+ puts "FAIL: error message in .init file: $str"
+ }
puts "\tTest045.b: Now firing off berkdb rand dbscript, running: "
# Now the database is initialized, run a test
puts "$tclsh_path\
- $test_path/dbscript.tcl $f $nops $cursors $delete $adds \
+ $test_path/dbscript.tcl $method $f $nops $cursors $delete $adds \
$keyavg $dataavg $dups $errpct > $testdir/test045.log"
exec $tclsh_path \
- $test_path/dbscript.tcl $f \
+ $test_path/dbscript.tcl $method $f \
$nops $cursors $delete $adds $keyavg \
$dataavg $dups $errpct \
> $testdir/test045.log
# Check for test failure
- set e [findfail $testdir/test045.log]
- error_check_good "FAIL: error message(s) in log file" $e 0
-
+ set logerrs [findfail $testdir/test045.log]
+ foreach str $logerrs {
+ puts "FAIL: error message in log file: $str"
+ }
}
diff --git a/db/test/test046.tcl b/db/test/test046.tcl
index 3bfed3ef5..d20700706 100644
--- a/db/test/test046.tcl
+++ b/db/test/test046.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test046.tcl,v 11.26 2000/08/25 14:21:56 sue Exp $
+# $Id: test046.tcl,v 11.35 2003/01/08 05:53:55 bostic Exp $
#
-# DB Test 46: Overwrite test of small/big key/data with cursor checks.
+# TEST test046
+# TEST Overwrite test of small/big key/data with cursor checks.
proc test046 { method args } {
global alphabet
global errorInfo
@@ -33,47 +34,68 @@ proc test046 { method args } {
}
puts "\tTest046: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test046.db
+ set testfile $testdir/test046
set env NULL
} else {
- set testfile test046.db
+ set testfile test046
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
set oflags "-create -mode 0644 $args $omethod"
- set db [eval {berkdb_open} $oflags $testfile.a]
+ set db [eval {berkdb_open} $oflags $testfile.a.db]
error_check_good dbopen [is_valid_db $db] TRUE
- # open curs to db
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
-
# keep nkeys even
set nkeys 20
# Fill page w/ small key/data pairs
puts "\tTest046: Fill page with $nkeys small key/data pairs."
for { set i 1 } { $i <= $nkeys } { incr i } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { [is_record_based $method] == 1} {
- set ret [$db put $i $data$i]
+ set ret [eval {$db put} $txn {$i $data$i}]
} elseif { $i < 10 } {
- set ret [$db put [set key]00$i [set data]00$i]
+ set ret [eval {$db put} $txn [set key]00$i \
+ [set data]00$i]
} elseif { $i < 100 } {
- set ret [$db put [set key]0$i [set data]0$i]
+ set ret [eval {$db put} $txn [set key]0$i \
+ [set data]0$i]
} else {
- set ret [$db put $key$i $data$i]
+ set ret [eval {$db put} $txn {$key$i $data$i}]
}
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+ # open curs to db
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_substr $dbc $db] 1
+
# get db order of keys
for {set i 1; set ret [$dbc get -first]} { [llength $ret] != 0} { \
set ret [$dbc get -next]} {
@@ -92,7 +114,7 @@ proc test046 { method args } {
# delete before cursor(n-1), make sure it is gone
set i [expr $i - 1]
- error_check_good db_del [$db del $key_set($i)] 0
+ error_check_good db_del [eval {$db del} $txn {$key_set($i)}] 0
# use set_range to get first key starting at n-1, should
# give us nth--but only works for btree
@@ -120,7 +142,7 @@ proc test046 { method args } {
puts "\t\tTest046.a.2: Delete cursor item by key."
# nth key, which cursor should be on now
set i [incr i]
- set ret [$db del $key_set($i)]
+ set ret [eval {$db del} $txn {$key_set($i)}]
error_check_good db_del $ret 0
# this should return n+1 key/data, curr has nth key/data
@@ -155,7 +177,7 @@ proc test046 { method args } {
set ret [$dbc get -prev]
error_check_bad dbc_get:prev [llength $curr] 0
# delete *after* cursor pos.
- error_check_good db:del [$db del $key_set([incr i])] 0
+ error_check_good db:del [eval {$db del} $txn {$key_set([incr i])}] 0
# make sure item is gone, try to get it
if { [string compare $omethod "-btree"] == 0} {
@@ -211,12 +233,12 @@ proc test046 { method args } {
puts "\t\tTest046.c.1: Insert by key before the cursor."
# i is at curs pos, i=n+1, we want to go BEFORE
set i [incr i -1]
- set ret [$db put $key_set($i) $data_set($i)]
+ set ret [eval {$db put} $txn {$key_set($i) $data_set($i)}]
error_check_good db_put:before $ret 0
puts "\t\tTest046.c.2: Insert by key after the cursor."
set i [incr i +2]
- set ret [$db put $key_set($i) $data_set($i)]
+ set ret [eval {$db put} $txn {$key_set($i) $data_set($i)}]
error_check_good db_put:after $ret 0
puts "\t\tTest046.c.3: Insert by curs with deleted curs (should fail)."
@@ -224,6 +246,9 @@ proc test046 { method args } {
set i [incr i -1]
error_check_good dbc:close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db:close [$db close] 0
if { [is_record_based $method] == 1} {
puts "\t\tSkipping the rest of test for method $method."
@@ -231,9 +256,14 @@ proc test046 { method args } {
return
} else {
# Reopen without printing __db_errs.
- set db [eval {berkdb_open_noerr} $oflags $testfile.a]
+ set db [eval {berkdb_open_noerr} $oflags $testfile.a.db]
error_check_good dbopen [is_valid_db $db] TRUE
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good cursor [is_valid_cursor $dbc $db] TRUE
# should fail with EINVAL (deleted cursor)
@@ -254,7 +284,7 @@ proc test046 { method args } {
Insert by cursor before/after existent cursor."
# can't use before after w/o dup except renumber in recno
# first, restore an item so they don't fail
- #set ret [$db put $key_set($i) $data_set($i)]
+ #set ret [eval {$db put} $txn {$key_set($i) $data_set($i)}]
#error_check_good db_put $ret 0
#set ret [$dbc get -set $key_set($i)]
@@ -275,21 +305,37 @@ proc test046 { method args } {
# overwrites
puts "\tTest046.d.0: Cleanup, close db, open new db with no dups."
error_check_good dbc:close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db:close [$db close] 0
- set db [eval {berkdb_open} $oflags $testfile.d]
+ set db [eval {berkdb_open} $oflags $testfile.d.db]
error_check_good dbopen [is_valid_db $db] TRUE
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
- set nkeys 20
-
# Fill page w/ small key/data pairs
puts "\tTest046.d.0: Fill page with $nkeys small key/data pairs."
for { set i 1 } { $i < $nkeys } { incr i } {
- set ret [$db put $key$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i $data$i}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ set nkeys 20
+
# Prepare cursor on item
set ret [$dbc get -first]
error_check_bad dbc_get:first [llength $ret] 0
@@ -347,14 +393,14 @@ proc test046 { method args } {
if { [string compare $type key_over] == 0 } {
puts "\t\tTest046.d.$i: Key\
Overwrite:($i_pair) by ($w_pair)."
- set ret [$db put \
+ set ret [eval {$db put} $txn \
$"key_init[lindex $i_pair 0]" \
$"data_over[lindex $w_pair 1]"]
error_check_good \
dbput:over:i($i_pair):o($w_pair) $ret 0
# check value
- set ret [$db \
- get $"key_init[lindex $i_pair 0]"]
+ set ret [eval {$db get} $txn \
+ $"key_init[lindex $i_pair 0]"]
error_check_bad \
db:get:check [llength $ret] 0
error_check_good db:get:compare_data \
@@ -382,6 +428,9 @@ proc test046 { method args } {
puts "\tTest046.d.3: Cleanup for next part of test."
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
if { [is_rbtree $method] == 1} {
@@ -391,13 +440,9 @@ proc test046 { method args } {
}
puts "\tTest046.e.1: Open db with sorted dups."
- set db [eval {berkdb_open_noerr} $oflags -dup -dupsort $testfile.e]
+ set db [eval {berkdb_open_noerr} $oflags -dup -dupsort $testfile.e.db]
error_check_good dbopen [is_valid_db $db] TRUE
- # open curs to db
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
-
# keep nkeys even
set nkeys 20
set ndups 20
@@ -406,14 +451,31 @@ proc test046 { method args } {
puts "\tTest046.e.2:\
Put $nkeys small key/data pairs and $ndups sorted dups."
for { set i 0 } { $i < $nkeys } { incr i } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { $i < 10 } {
- set ret [$db put [set key]0$i [set data]0$i]
+ set ret [eval {$db put} $txn [set key]0$i [set data]0$i]
} else {
- set ret [$db put $key$i $data$i]
+ set ret [eval {$db put} $txn {$key$i $data$i}]
}
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ # open curs to db
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_substr $dbc $db] 1
+
# get db order of keys
for {set i 0; set ret [$dbc get -first]} { [llength $ret] != 0} { \
set ret [$dbc get -next]} {
@@ -431,15 +493,15 @@ proc test046 { method args } {
for { set i 0 } { $i < $ndups } { incr i } {
if { $i < 10 } {
- set ret [$db put $keym DUPLICATE_0$i]
+ set ret [eval {$db put} $txn {$keym DUPLICATE_0$i}]
} else {
- set ret [$db put $keym DUPLICATE_$i]
+ set ret [eval {$db put} $txn {$keym DUPLICATE_$i}]
}
error_check_good db_put:DUP($i) $ret 0
}
puts "\tTest046.e.3: Check duplicate duplicates"
- set ret [$db put $keym DUPLICATE_00]
+ set ret [eval {$db put} $txn {$keym DUPLICATE_00}]
error_check_good dbput:dupdup [is_substr $ret "DB_KEYEXIST"] 1
# get dup ordering
@@ -479,19 +541,38 @@ proc test046 { method args } {
#error_check_good \
# dbc_get:current:deleted [is_substr $ret "DB_KEYEMPTY"] 1
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
# restore deleted keys
- error_check_good db_put:1 [$db put $keym $dup_set($i)] 0
- error_check_good db_put:2 [$db put $keym $dup_set([incr i])] 0
- error_check_good db_put:3 [$db put $keym $dup_set([incr i])] 0
+ error_check_good db_put:1 [eval {$db put} $txn {$keym $dup_set($i)}] 0
+ error_check_good db_put:2 [eval {$db put} $txn \
+ {$keym $dup_set([incr i])}] 0
+ error_check_good db_put:3 [eval {$db put} $txn \
+ {$keym $dup_set([incr i])}] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# tested above
# Reopen database without __db_err, reset cursor
error_check_good dbclose [$db close] 0
- set db [eval {berkdb_open_noerr} $oflags -dup -dupsort $testfile.e]
+ set db [eval {berkdb_open_noerr} $oflags -dup -dupsort $testfile.e.db]
error_check_good dbopen [is_valid_db $db] TRUE
- error_check_good db_cursor [is_substr [set dbc [$db cursor]] $db] 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
set ret [$dbc get -set $keym]
error_check_bad dbc_get:set [llength $ret] 0
@@ -519,7 +600,7 @@ proc test046 { method args } {
set i 0
# use "spam" to prevent a duplicate duplicate.
- set ret [$db put $keym $dup_set($i)spam]
+ set ret [eval {$db put} $txn {$keym $dup_set($i)spam}]
error_check_good db_put:before $ret 0
# make sure cursor was maintained
set ret [$dbc get -current]
@@ -530,7 +611,7 @@ proc test046 { method args } {
puts "\t\tTest046.g.2: Insert by key after cursor."
set i [expr $i + 2]
# use "eggs" to prevent a duplicate duplicate
- set ret [$db put $keym $dup_set($i)eggs]
+ set ret [eval {$db put} $txn {$keym $dup_set($i)eggs}]
error_check_good db_put:after $ret 0
# make sure cursor was maintained
set ret [$dbc get -current]
@@ -559,19 +640,29 @@ proc test046 { method args } {
puts "\t\tTest046.h.2: New db (no dupsort)."
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- set db [berkdb_open \
- -create -dup $omethod -mode 0644 -truncate $testfile.h]
+ set db [eval {berkdb_open} \
+ $oflags -dup $testfile.h.db]
error_check_good db_open [is_valid_db $db] TRUE
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
for {set i 0} {$i < $nkeys} {incr i} {
if { $i < 10 } {
- error_check_good db_put [$db put key0$i datum0$i] 0
+ set ret [eval {$db put} $txn {key0$i datum0$i}]
+ error_check_good db_put $ret 0
} else {
- error_check_good db_put [$db put key$i datum$i] 0
+ set ret [eval {$db put} $txn {key$i datum$i}]
+ error_check_good db_put $ret 0
}
if { $i == 0 } {
for {set j 0} {$j < $ndups} {incr j} {
@@ -581,9 +672,11 @@ proc test046 { method args } {
set keyput key$i
}
if { $j < 10 } {
- set ret [$db put $keyput DUP_datum0$j]
+ set ret [eval {$db put} $txn \
+ {$keyput DUP_datum0$j}]
} else {
- set ret [$db put $keyput DUP_datum$j]
+ set ret [eval {$db put} $txn \
+ {$keyput DUP_datum$j}]
}
error_check_good dbput:dup $ret 0
}
@@ -711,6 +804,9 @@ proc test046 { method args } {
puts "\tTest046.i: Cleaning up from test."
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
puts "\tTest046 complete."
diff --git a/db/test/test047.tcl b/db/test/test047.tcl
index 9d11cd3db..824aaa3eb 100644
--- a/db/test/test047.tcl
+++ b/db/test/test047.tcl
@@ -1,68 +1,89 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test047.tcl,v 11.10 2000/08/25 14:21:56 sue Exp $
+# $Id: test047.tcl,v 11.21 2003/03/27 16:34:48 sandstro Exp $
#
-# DB Test 47: test of the SET_RANGE interface to DB->c_get.
+# TEST test047
+# TEST DBcursor->c_get get test with SET_RANGE option.
proc test047 { method args } {
source ./include.tcl
- set tstn 047
+ set tnum 047
+ set args [convert_args $method $args]
if { [is_btree $method] != 1 } {
- puts "Test$tstn skipping for method $method"
+ puts "Test$tnum skipping for method $method"
return
}
set method "-btree"
- puts "\tTest$tstn: Test of SET_RANGE interface to DB->c_get ($method)."
+ puts "\tTest$tnum: Test of SET_RANGE interface to DB->c_get ($method)."
set key "key"
set data "data"
set txn ""
set flags ""
- puts "\tTest$tstn.a: Create $method database."
+ puts "\tTest$tnum.a: Create $method database."
set eindex [lsearch -exact $args "-env"]
+ set txnenv 0
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tstn.db
- set testfile1 $testdir/test0$tstn.a.db
- set testfile2 $testdir/test0$tstn.b.db
+ set testfile $testdir/test$tnum.db
+ set testfile1 $testdir/test$tnum.a.db
+ set testfile2 $testdir/test$tnum.b.db
set env NULL
} else {
- set testfile test0$tstn.db
- set testfile1 test0$tstn.a.db
- set testfile2 test0$tstn.b.db
+ set testfile test$tnum.db
+ set testfile1 test$tnum.a.db
+ set testfile2 test$tnum.b.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 -dup $args $method"
+ set oflags "-create -mode 0644 -dup $args $method"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- # open curs to db
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
-
set nkeys 20
# Fill page w/ small key/data pairs
#
- puts "\tTest$tstn.b: Fill page with $nkeys small key/data pairs."
+ puts "\tTest$tnum.b: Fill page with $nkeys small key/data pairs."
for { set i 0 } { $i < $nkeys } { incr i } {
- set ret [$db put $key$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i $data$i}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- puts "\tTest$tstn.c: Get data with SET_RANGE, then delete by cursor."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ # open curs to db
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+
+ puts "\tTest$tnum.c: Get data with SET_RANGE, then delete by cursor."
set i 0
set ret [$dbc get -set_range $key$i]
error_check_bad dbc_get:set_range [llength $ret] 0
@@ -75,24 +96,28 @@ proc test047 { method args } {
error_check_bad dbc_get(post-delete):set_range [llength $ret] 0
error_check_bad dbc_get(no-match):set_range $ret $curr
- puts "\tTest$tstn.d: \
+ puts "\tTest$tnum.d: \
Use another cursor to fix item on page, delete by db."
- set dbcurs2 [$db cursor]
- error_check_good db:cursor2 [is_substr $dbcurs2 $db] 1
+ set dbcurs2 [eval {$db cursor} $txn]
+ error_check_good db:cursor2 [is_valid_cursor $dbcurs2 $db] TRUE
set ret [$dbcurs2 get -set [lindex [lindex $ret 0] 0]]
error_check_bad dbc_get(2):set [llength $ret] 0
set curr $ret
- error_check_good db:del [$db del [lindex [lindex $ret 0] 0]] 0
+ error_check_good db:del [eval {$db del} $txn \
+ {[lindex [lindex $ret 0] 0]}] 0
# make sure item is gone
set ret [$dbcurs2 get -set_range [lindex [lindex $curr 0] 0]]
error_check_bad dbc2_get:set_range [llength $ret] 0
error_check_bad dbc2_get:set_range $ret $curr
- puts "\tTest$tstn.e: Close for second part of test, close db/cursors."
+ puts "\tTest$tnum.e: Close for second part of test, close db/cursors."
error_check_good dbc:close [$dbc close] 0
error_check_good dbc2:close [$dbcurs2 close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good dbclose [$db close] 0
# open db
@@ -100,35 +125,56 @@ proc test047 { method args } {
error_check_good dbopen2 [is_valid_db $db] TRUE
set nkeys 10
- puts "\tTest$tstn.f: Fill page with $nkeys pairs, one set of dups."
+ puts "\tTest$tnum.f: Fill page with $nkeys pairs, one set of dups."
for {set i 0} { $i < $nkeys } {incr i} {
# a pair
- set ret [$db put $key$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i $data$i}]
error_check_good dbput($i) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
set j 0
for {set i 0} { $i < $nkeys } {incr i} {
# a dup set for same 1 key
- set ret [$db put $key$i DUP_$data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i DUP_$data$i}]
error_check_good dbput($i):dup $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- puts "\tTest$tstn.g: \
+ puts "\tTest$tnum.g: \
Get dups key w/ SET_RANGE, pin onpage with another cursor."
set i 0
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
set ret [$dbc get -set_range $key$i]
error_check_bad dbc_get:set_range [llength $ret] 0
- set dbc2 [$db cursor]
- error_check_good db_cursor2 [is_substr $dbc2 $db] 1
+ set dbc2 [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc2 $db] TRUE
set ret2 [$dbc2 get -set_range $key$i]
error_check_bad dbc2_get:set_range [llength $ret] 0
error_check_good dbc_compare $ret $ret2
- puts "\tTest$tstn.h: \
+ puts "\tTest$tnum.h: \
Delete duplicates' key, use SET_RANGE to get next dup."
set ret [$dbc2 del]
error_check_good dbc2_del $ret 0
@@ -138,34 +184,51 @@ proc test047 { method args } {
error_check_good dbc_close [$dbc close] 0
error_check_good dbc2_close [$dbc2 close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $oflags $testfile2]
error_check_good dbopen [is_valid_db $db] TRUE
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
- set dbc2 [$db cursor]
- error_check_good db_cursor2 [is_substr $dbc2 $db] 1
set nkeys 10
set ndups 1000
- puts "\tTest$tstn.i: Fill page with $nkeys pairs and $ndups dups."
+ puts "\tTest$tnum.i: Fill page with $nkeys pairs and $ndups dups."
for {set i 0} { $i < $nkeys } { incr i} {
# a pair
- set ret [$db put $key$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i $data$i}]
error_check_good dbput $ret 0
# dups for single pair
if { $i == 0} {
for {set j 0} { $j < $ndups } { incr j } {
- set ret [$db put $key$i DUP_$data$i:$j]
+ set ret [eval {$db put} $txn \
+ {$key$i DUP_$data$i:$j}]
error_check_good dbput:dup $ret 0
}
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
set i 0
- puts "\tTest$tstn.j: \
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
+ set dbc2 [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc2 $db] TRUE
+ puts "\tTest$tnum.j: \
Get key of first dup with SET_RANGE, fix with 2 curs."
set ret [$dbc get -set_range $key$i]
error_check_bad dbc_get:set_range [llength $ret] 0
@@ -176,17 +239,20 @@ proc test047 { method args } {
error_check_good dbc_compare $ret $ret2
- puts "\tTest$tstn.k: Delete item by cursor, use SET_RANGE to verify."
+ puts "\tTest$tnum.k: Delete item by cursor, use SET_RANGE to verify."
set ret [$dbc2 del]
error_check_good dbc2_del $ret 0
set ret [$dbc get -set_range $key$i]
error_check_bad dbc_get:set_range [llength $ret] 0
error_check_bad dbc_get:set_range $ret $curr
- puts "\tTest$tstn.l: Cleanup."
+ puts "\tTest$tnum.l: Cleanup."
error_check_good dbc_close [$dbc close] 0
error_check_good dbc2_close [$dbc2 close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest$tstn complete."
+ puts "\tTest$tnum complete."
}
diff --git a/db/test/test048.tcl b/db/test/test048.tcl
index 84c7c47b7..4c1fb0c18 100644
--- a/db/test/test048.tcl
+++ b/db/test/test048.tcl
@@ -1,19 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test048.tcl,v 11.11 2000/12/11 17:42:18 sue Exp $
+# $Id: test048.tcl,v 11.20 2003/03/27 16:34:48 sandstro Exp $
#
-# Test048: Cursor stability across btree splits.
+# TEST test048
+# TEST Cursor stability across Btree splits.
proc test048 { method args } {
global errorCode
source ./include.tcl
- set tstn 048
+ set tnum 048
+ set args [convert_args $method $args]
if { [is_btree $method] != 1 } {
- puts "Test$tstn skipping for method $method."
+ puts "Test$tnum skipping for method $method."
return
}
set pgindex [lsearch -exact $args "-pagesize"]
@@ -27,75 +29,98 @@ proc test048 { method args } {
set method "-btree"
- puts "\tTest$tstn: Test of cursor stability across btree splits."
+ puts "\tTest$tnum: Test of cursor stability across btree splits."
set key "key"
set data "data"
set txn ""
set flags ""
- puts "\tTest$tstn.a: Create $method database."
+ puts "\tTest$tnum.a: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tstn.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tstn.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 $args $method"
+ set oflags "-create -mode 0644 $args $method"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set nkeys 5
# Fill page w/ small key/data pairs, keep at leaf
#
- puts "\tTest$tstn.b: Fill page with $nkeys small key/data pairs."
+ puts "\tTest$tnum.b: Fill page with $nkeys small key/data pairs."
for { set i 0 } { $i < $nkeys } { incr i } {
- set ret [$db put key000$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {key000$i $data$i}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# get db ordering, set cursors
- puts "\tTest$tstn.c: Set cursors on each of $nkeys pairs."
+ puts "\tTest$tnum.c: Set cursors on each of $nkeys pairs."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for {set i 0; set ret [$db get key000$i]} {\
$i < $nkeys && [llength $ret] != 0} {\
incr i; set ret [$db get key000$i]} {
set key_set($i) [lindex [lindex $ret 0] 0]
set data_set($i) [lindex [lindex $ret 0] 1]
- set dbc [$db cursor]
+ set dbc [eval {$db cursor} $txn]
set dbc_set($i) $dbc
- error_check_good db_cursor:$i [is_substr $dbc_set($i) $db] 1
+ error_check_good db_cursor:$i \
+ [is_valid_cursor $dbc_set($i) $db] TRUE
set ret [$dbc_set($i) get -set $key_set($i)]
error_check_bad dbc_set($i)_get:set [llength $ret] 0
}
# if mkeys is above 1000, need to adjust below for lexical order
set mkeys 1000
- puts "\tTest$tstn.d: Add $mkeys pairs to force split."
+ puts "\tTest$tnum.d: Add $mkeys pairs to force split."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 100 } {
- set ret [$db put key0$i $data$i]
+ set ret [eval {$db put} $txn {key0$i $data$i}]
} elseif { $i >= 10 } {
- set ret [$db put key00$i $data$i]
+ set ret [eval {$db put} $txn {key00$i $data$i}]
} else {
- set ret [$db put key000$i $data$i]
+ set ret [eval {$db put} $txn {key000$i $data$i}]
}
error_check_good dbput:more $ret 0
}
- puts "\tTest$tstn.e: Make sure split happened."
- error_check_bad stat:check-split [is_substr [$db stat] \
+ puts "\tTest$tnum.e: Make sure split happened."
+ # XXX We cannot call stat with active txns or we deadlock.
+ if { $txnenv != 1 } {
+ error_check_bad stat:check-split [is_substr [$db stat] \
"{{Internal pages} 0}"] 1
+ }
- puts "\tTest$tstn.f: Check to see that cursors maintained reference."
+ puts "\tTest$tnum.f: Check to see that cursors maintained reference."
for {set i 0} { $i < $nkeys } {incr i} {
set ret [$dbc_set($i) get -current]
error_check_bad dbc$i:get:current [llength $ret] 0
@@ -104,22 +129,21 @@ proc test048 { method args } {
error_check_good dbc$i:get(match) $ret $ret2
}
- puts "\tTest$tstn.g: Delete added keys to force reverse split."
+ puts "\tTest$tnum.g: Delete added keys to force reverse split."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 100 } {
- error_check_good db_del:$i [$db del key0$i] 0
+ error_check_good db_del:$i \
+ [eval {$db del} $txn {key0$i}] 0
} elseif { $i >= 10 } {
- error_check_good db_del:$i [$db del key00$i] 0
+ error_check_good db_del:$i \
+ [eval {$db del} $txn {key00$i}] 0
} else {
- error_check_good db_del:$i [$db del key000$i] 0
+ error_check_good db_del:$i \
+ [eval {$db del} $txn {key000$i}] 0
}
}
- puts "\tTest$tstn.h: Verify reverse split."
- error_check_good stat:check-reverse_split [is_substr [$db stat] \
- "{{Internal pages} 0}"] 1
-
- puts "\tTest$tstn.i: Verify cursor reference."
+ puts "\tTest$tnum.h: Verify cursor reference."
for {set i 0} { $i < $nkeys } {incr i} {
set ret [$dbc_set($i) get -current]
error_check_bad dbc$i:get:current [llength $ret] 0
@@ -128,12 +152,19 @@ proc test048 { method args } {
error_check_good dbc$i:get(match) $ret $ret2
}
- puts "\tTest$tstn.j: Cleanup."
+ puts "\tTest$tnum.i: Cleanup."
# close cursors
for {set i 0} { $i < $nkeys } {incr i} {
error_check_good dbc_close:$i [$dbc_set($i) close] 0
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ puts "\tTest$tnum.j: Verify reverse split."
+ error_check_good stat:check-reverse_split [is_substr [$db stat] \
+ "{{Internal pages} 0}"] 1
+
error_check_good dbclose [$db close] 0
- puts "\tTest$tstn complete."
+ puts "\tTest$tnum complete."
}
diff --git a/db/test/test049.tcl b/db/test/test049.tcl
index aaea3b200..252631229 100644
--- a/db/test/test049.tcl
+++ b/db/test/test049.tcl
@@ -1,23 +1,24 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test049.tcl,v 11.15 2000/08/25 14:21:56 sue Exp $
+# $Id: test049.tcl,v 11.23 2003/03/27 16:34:48 sandstro Exp $
#
-# Test 049: Test of each cursor routine with unitialized cursors
+# TEST test049
+# TEST Cursor operations on uninitialized cursors.
proc test049 { method args } {
global errorInfo
global errorCode
source ./include.tcl
- set tstn 049
+ set tnum 049
set renum [is_rrecno $method]
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "\tTest$tstn: Test of cursor routines with unitialized cursors."
+ puts "\tTest$tnum: Test of cursor routines with uninitialized cursors."
set key "key"
set data "data"
@@ -29,47 +30,67 @@ proc test049 { method args } {
set key ""
}
- puts "\tTest$tstn.a: Create $method database."
+ puts "\tTest$tnum.a: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tstn.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tstn.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 $rflags $omethod $args"
+ set oflags "-create -mode 0644 $rflags $omethod $args"
if { [is_record_based $method] == 0 && [is_rbtree $method] != 1 } {
append oflags " -dup"
}
set db [eval {berkdb_open_noerr} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- set dbc_u [$db cursor]
- error_check_good db:cursor [is_substr $dbc_u $db] 1
-
set nkeys 10
- puts "\tTest$tstn.b: Fill page with $nkeys small key/data pairs."
+ puts "\tTest$tnum.b: Fill page with $nkeys small key/data pairs."
for { set i 1 } { $i <= $nkeys } { incr i } {
- set ret [$db put $key$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i $data$i}]
error_check_good dbput:$i $ret 0
if { $i == 1 } {
for {set j 0} { $j < [expr $nkeys / 2]} {incr j} {
- set ret [$db put $key$i DUPLICATE$j]
+ set ret [eval {$db put} $txn \
+ {$key$i DUPLICATE$j}]
error_check_good dbput:dup:$j $ret 0
}
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# DBC GET
- puts "\tTest$tstn.c: Test dbc->get interfaces..."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc_u [eval {$db cursor} $txn]
+ error_check_good db:cursor [is_valid_cursor $dbc_u $db] TRUE
+
+ puts "\tTest$tnum.c: Test dbc->get interfaces..."
set i 0
foreach flag { current first last next prev nextdup} {
puts "\t\t...dbc->get($flag)"
@@ -95,7 +116,7 @@ proc test049 { method args } {
catch {$dbc_u get -rmw -current } ret
error_check_good dbc_get:rmw [is_substr $errorCode EINVAL] 1
- puts "\tTest$tstn.d: Test dbc->put interface..."
+ puts "\tTest$tnum.d: Test dbc->put interface..."
# partial...depends on another
foreach flag { after before current keyfirst keylast } {
puts "\t\t...dbc->put($flag)"
@@ -112,7 +133,7 @@ proc test049 { method args } {
# now uninitialize cursor
error_check_good dbc_close [$dbc_u close] 0
- set dbc_u [$db cursor]
+ set dbc_u [eval {$db cursor} $txn]
error_check_good \
db_cursor [is_substr $dbc_u $db] 1
}
@@ -149,12 +170,15 @@ proc test049 { method args } {
# XXX dbc->dup, db->join (dbc->get join_item)
# dbc del
- puts "\tTest$tstn.e: Test dbc->del interface."
+ puts "\tTest$tnum.e: Test dbc->del interface."
catch {$dbc_u del} ret
error_check_good dbc_del [is_substr $errorCode EINVAL] 1
error_check_good dbc_close [$dbc_u close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest$tstn complete."
+ puts "\tTest$tnum complete."
}
diff --git a/db/test/test050.tcl b/db/test/test050.tcl
index 4a2d8c8fd..2e224ce01 100644
--- a/db/test/test050.tcl
+++ b/db/test/test050.tcl
@@ -1,11 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test050.tcl,v 11.15 2000/08/25 14:21:57 sue Exp $
+# $Id: test050.tcl,v 11.22 2003/01/08 05:53:57 bostic Exp $
#
-# Test050: Overwrite test of small/big key/data with cursor checks for RECNO
+# TEST test050
+# TEST Overwrite test of small/big key/data with cursor checks for Recno.
proc test050 { method args } {
global alphabet
global errorInfo
@@ -30,6 +31,7 @@ proc test050 { method args } {
set flags ""
puts "\tTest$tstn: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -41,18 +43,19 @@ proc test050 { method args } {
set testfile test0$tstn.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 $args $omethod"
+ set oflags "-create -mode 0644 $args $omethod"
set db [eval {berkdb_open_noerr} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- # open curs to db
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
-
# keep nkeys even
set nkeys 20
@@ -60,9 +63,26 @@ proc test050 { method args } {
#
puts "\tTest$tstn: Fill page with $nkeys small key/data pairs."
for { set i 1 } { $i <= $nkeys } { incr i } {
- set ret [$db put $i [chop_data $method $data$i]]
- error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$i [chop_data $method $data$i]}]
+ error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ }
+
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
}
+ # open curs to db
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
# get db order of keys
for {set i 0; set ret [$dbc get -first]} { [llength $ret] != 0} { \
@@ -83,8 +103,16 @@ proc test050 { method args } {
puts "\t\tTest$tstn.a.1:\
Insert with uninitialized cursor (should fail)."
error_check_good dbc_close [$dbc close] 0
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
catch {$dbc put -before DATA1} ret
error_check_good dbc_put:before:uninit [is_substr $errorCode EINVAL] 1
@@ -169,8 +197,8 @@ proc test050 { method args } {
if { [string compare $type by_key] == 0 } {
puts "\t\tTest$tstn.b.$i:\
Overwrite:($pair):$type"
- set ret [$db put \
- 1 OVER$pair$data[lindex $pair 1]]
+ set ret [eval {$db put} $txn \
+ 1 {OVER$pair$data[lindex $pair 1]}]
error_check_good dbput:over:($pair) $ret 0
} else {
# This is a cursor overwrite
@@ -185,7 +213,9 @@ proc test050 { method args } {
puts "\tTest$tstn.c: Cleanup and close cursor."
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest$tstn complete."
}
diff --git a/db/test/test051.tcl b/db/test/test051.tcl
index 6994526e2..778b9d064 100644
--- a/db/test/test051.tcl
+++ b/db/test/test051.tcl
@@ -1,17 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test051.tcl,v 11.14 2000/08/25 14:21:57 sue Exp $
-#
-# Test51:
-# Test of the fixed recno method.
-# 0. Test various flags (legal and illegal) to open
-# 1. Test partial puts where dlen != size (should fail)
-# 2. Partial puts for existent record -- replaces at beg, mid, and
-# end of record, as well as full replace
+# $Id: test051.tcl,v 11.23 2003/06/18 14:13:11 bostic Exp $
#
+# TEST test051
+# TEST Fixed-length record Recno test.
+# TEST 0. Test various flags (legal and illegal) to open
+# TEST 1. Test partial puts where dlen != size (should fail)
+# TEST 2. Partial puts for existent record -- replaces at beg, mid, and
+# TEST end of record, as well as full replace
proc test051 { method { args "" } } {
global fixed_len
global errorInfo
@@ -28,6 +27,7 @@ proc test051 { method { args "" } } {
}
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -41,19 +41,23 @@ proc test051 { method { args "" } } {
set testfile1 test051a.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 $args"
+ set oflags "-create -mode 0644 $args"
# Test various flags (legal and illegal) to open
puts "\tTest051.a: Test correct flag behavior on open."
set errorCode NONE
foreach f { "-dup" "-dup -dupsort" "-recnum" } {
puts "\t\tTest051.a: Test flag $f"
- error_check_good dbopen:flagtest:catch \
- [catch {set db \
- [eval {berkdb_open_noerr} $oflags $f $omethod \
- $testfile]} ret] 1
+ set stat [catch {eval {berkdb_open_noerr} $oflags $f $omethod \
+ $testfile} ret]
+ error_check_good dbopen:flagtest:catch $stat 1
error_check_good \
dbopen:flagtest:$f [is_substr $errorCode EINVAL] 1
set errorCode NONE
@@ -66,24 +70,28 @@ proc test051 { method { args "" } } {
$db close
} else {
error_check_good \
- dbopen:flagtest:catch [catch {set db [eval \
- {berkdb_open_noerr} $oflags $f \
- $omethod $testfile]} ret] 1
+ dbopen:flagtest:catch [catch {eval {berkdb_open_noerr}\
+ $oflags $f $omethod $testfile} ret] 1
error_check_good \
dbopen:flagtest:$f [is_substr $errorCode EINVAL] 1
}
-
# Test partial puts where dlen != size (should fail)
# it is an error to specify a partial put w/ different
# dlen and size in fixed length recno/queue
set key 1
set data ""
+ set txn ""
set test_char "a"
set db [eval {berkdb_open_noerr} $oflags $omethod $testfile1]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
puts "\tTest051.b: Partial puts with dlen != size."
foreach dlen { 1 16 20 32 } {
foreach doff { 0 10 20 32 } {
@@ -91,15 +99,16 @@ proc test051 { method { args "" } } {
puts "\t\tTest051.e: dlen: $dlen, doff: $doff, \
size: [expr $dlen+1]"
set data [repeat $test_char [expr $dlen + 1]]
- error_check_good catch:put 1 [catch {$db \
- put -partial [list $doff $dlen] $key $data} ret]
- #
+ error_check_good \
+ catch:put 1 [catch {eval {$db put -partial \
+ [list $doff $dlen]} $txn {$key $data}} ret]
+
# We don't get back the server error string just
# the result.
- #
if { $eindex == -1 } {
error_check_good "dbput:partial: dlen < size" \
- [is_substr $errorInfo "Length improper"] 1
+ [is_substr \
+ $errorInfo "Record length error"] 1
} else {
error_check_good "dbput:partial: dlen < size" \
[is_substr $errorCode "EINVAL"] 1
@@ -109,11 +118,13 @@ proc test051 { method { args "" } } {
puts "\t\tTest051.e: dlen: $dlen, doff: $doff, \
size: [expr $dlen-1]"
set data [repeat $test_char [expr $dlen - 1]]
- error_check_good catch:put 1 [catch {$db \
- put -partial [list $doff $dlen] $key $data} ret]
+ error_check_good \
+ catch:put 1 [catch {eval {$db put -partial \
+ [list $doff $dlen]} $txn {$key $data}} ret]
if { $eindex == -1 } {
error_check_good "dbput:partial: dlen > size" \
- [is_substr $errorInfo "Length improper"] 1
+ [is_substr \
+ $errorInfo "Record length error"] 1
} else {
error_check_good "dbput:partial: dlen < size" \
[is_substr $errorCode "EINVAL"] 1
@@ -121,6 +132,9 @@ proc test051 { method { args "" } } {
}
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
$db close
# Partial puts for existent record -- replaces at beg, mid, and
@@ -132,14 +146,24 @@ proc test051 { method { args "" } } {
puts "\t\tTest051.f: First try a put and then a full replace."
set data [repeat "a" $fixed_len]
- set ret [$db put 1 $data]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {1 $data}]
error_check_good dbput $ret 0
- error_check_good dbget $data [lindex [lindex [$db get -recno 1] 0] 1]
+ set ret [eval {$db get} $txn {-recno 1}]
+ error_check_good dbget $data [lindex [lindex $ret 0] 1]
set data [repeat "b" $fixed_len]
- set ret [$db put -partial [list 0 $fixed_len] 1 $data]
+ set ret [eval {$db put -partial [list 0 $fixed_len]} $txn {1 $data}]
error_check_good dbput $ret 0
- error_check_good dbget $data [lindex [lindex [$db get -recno 1] 0] 1]
+ set ret [eval {$db get} $txn {-recno 1}]
+ error_check_good dbget $data [lindex [lindex $ret 0] 1]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set data "InitialData"
set pdata "PUT"
@@ -154,12 +178,21 @@ proc test051 { method { args "" } } {
puts "\t\tTest051.g: Now replace at different offsets ($offlist)."
foreach doff $offlist {
incr key
- set ret [$db put $key $data]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $data}]
error_check_good dbput:init $ret 0
puts "\t\t Test051.g: Replace at offset $doff."
- set ret [$db put -partial [list $doff $dlen] $key $pdata]
+ set ret [eval {$db put -partial [list $doff $dlen]} $txn \
+ {$key $pdata}]
error_check_good dbput:partial $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
if { $doff == 0} {
set beg ""
@@ -186,6 +219,4 @@ proc test051 { method { args "" } } {
}
$db close
-
- puts "\tTest051 complete."
}
diff --git a/db/test/test052.tcl b/db/test/test052.tcl
index 820c99a2b..acce88c37 100644
--- a/db/test/test052.tcl
+++ b/db/test/test052.tcl
@@ -1,12 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test052.tcl,v 11.10 2000/10/06 19:29:52 krinsky Exp $
+# $Id: test052.tcl,v 11.17 2003/01/08 05:53:57 bostic Exp $
#
-# Test52
-# Renumbering recno test.
+# TEST test052
+# TEST Renumbering record Recno test.
proc test052 { method args } {
global alphabet
global errorInfo
@@ -27,6 +27,7 @@ proc test052 { method args } {
set flags ""
puts "\tTest052: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -38,27 +39,45 @@ proc test052 { method args } {
set testfile test052.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set oflags "-create -truncate -mode 0644 $args $omethod"
+ set oflags "-create -mode 0644 $args $omethod"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- # open curs to db
- set dbc [$db cursor]
- error_check_good db_cursor [is_substr $dbc $db] 1
-
# keep nkeys even
set nkeys 20
# Fill page w/ small key/data pairs
puts "\tTest052: Fill page with $nkeys small key/data pairs."
for { set i 1 } { $i <= $nkeys } { incr i } {
- set ret [$db put $i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$i $data$i}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ }
+
+ # open curs to db
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
}
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
# get db order of keys
for {set i 1; set ret [$dbc get -first]} { [llength $ret] != 0} { \
@@ -79,7 +98,7 @@ proc test052 { method args } {
# delete by key before current
set i [incr i -1]
- error_check_good db_del:before [$db del $keys($i)] 0
+ error_check_good db_del:before [eval {$db del} $txn {$keys($i)}] 0
# with renumber, current's data should be constant, but key==--key
set i [incr i +1]
error_check_good dbc:data \
@@ -94,7 +113,7 @@ proc test052 { method args } {
error_check_bad dbc:get [llength $ret] 0
error_check_good dbc:get:curs [lindex [lindex $ret 0] 1] \
$darray([expr $i + 1])
- error_check_good db_del:curr [$db del $keys($i)] 0
+ error_check_good db_del:curr [eval {$db del} $txn {$keys($i)}] 0
set ret [$dbc get -current]
# After a delete, cursor should return DB_NOTFOUND.
@@ -114,7 +133,7 @@ proc test052 { method args } {
# should be { keys($nkeys/2), darray($nkeys/2 + 2) }
set i [expr $nkeys/2]
# deleting data for key after current (key $nkeys/2 + 1)
- error_check_good db_del [$db del $keys([expr $i + 1])] 0
+ error_check_good db_del [eval {$db del} $txn {$keys([expr $i + 1])}] 0
# current should be constant
set ret [$dbc get -current]
@@ -248,6 +267,9 @@ proc test052 { method args } {
$ret [list [list $keys($i) $darray($i)]]
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
puts "\tTest052 complete."
diff --git a/db/test/test053.tcl b/db/test/test053.tcl
index e3a908c90..ae3c5451b 100644
--- a/db/test/test053.tcl
+++ b/db/test/test053.tcl
@@ -1,12 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test053.tcl,v 11.12 2000/12/11 17:24:55 sue Exp $
+# $Id: test053.tcl,v 11.19 2003/01/08 05:53:58 bostic Exp $
#
-# Test53: test of the DB_REVSPLITOFF flag in the btree and
-# Btree-w-recnum methods
+# TEST test053
+# TEST Test of the DB_REVSPLITOFF flag in the Btree and Btree-w-recnum
+# TEST methods.
proc test053 { method args } {
global alphabet
global errorCode
@@ -31,6 +32,7 @@ proc test053 { method args } {
set flags ""
puts "\tTest053.a: Create $omethod $args database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -42,12 +44,17 @@ proc test053 { method args } {
set testfile test053.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
set oflags \
- "-create -truncate -revsplitoff -pagesize 1024 $args $omethod"
+ "-create -revsplitoff -pagesize 1024 $args $omethod"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -77,8 +84,16 @@ proc test053 { method args } {
} else {
set key $keyroot$j
}
- set ret [$db put $key $data]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $data}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
@@ -89,16 +104,29 @@ proc test053 { method args } {
puts "\tTest053.d: Delete all but one key per page."
for {set i 0} { $i < $npages } {incr i } {
for {set j 1} { $j < $nkeys } {incr j } {
- set ret [$db del $key_set($i)0$j]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db del} $txn {$key_set($i)0$j}]
error_check_good dbdel $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
puts "\tTest053.e: Check to make sure all pages are still there."
error_check_good page_count:check \
[is_substr [$db stat] "{Leaf pages} $npages"] 1
- set dbc [$db cursor]
- error_check_good db:cursor [is_substr $dbc $db] 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db:cursor [is_valid_cursor $dbc $db] TRUE
# walk cursor through tree forward, backward.
# delete one key, repeat
@@ -125,7 +153,7 @@ proc test053 { method args } {
puts "\t\tTest053.f.$i:\
Walk through tree with record numbers."
for {set j 1} {$j <= [expr $npages - $i]} {incr j} {
- set curr [$db get -recno $j]
+ set curr [eval {$db get} $txn {-recno $j}]
error_check_bad \
db_get:recno:$j [llength $curr] 0
error_check_good db_get:recno:keys:$j \
@@ -135,10 +163,10 @@ proc test053 { method args } {
}
puts "\tTest053.g.$i:\
Delete single key ([expr $npages - $i] keys left)."
- set ret [$db del $key_set($i)00]
+ set ret [eval {$db del} $txn {$key_set($i)00}]
error_check_good dbdel $ret 0
error_check_good del:check \
- [llength [$db get $key_set($i)00]] 0
+ [llength [eval {$db get} $txn {$key_set($i)00}]] 0
}
# end for loop, verify db_notfound
@@ -149,7 +177,7 @@ proc test053 { method args } {
for {set i 0} { $i < $npages} {incr i} {
puts "\tTest053.i.$i:\
Restore single key ([expr $i + 1] keys in tree)."
- set ret [$db put $key_set($i)00 $data]
+ set ret [eval {$db put} $txn {$key_set($i)00 $data}]
error_check_good dbput $ret 0
puts -nonewline \
@@ -177,7 +205,7 @@ proc test053 { method args } {
puts "\t\tTest053.k.$i:\
Walk through tree with record numbers."
for {set j 1} {$j <= [expr $i + 1]} {incr j} {
- set curr [$db get -recno $j]
+ set curr [eval {$db get} $txn {-recno $j}]
error_check_bad \
db_get:recno:$j [llength $curr] 0
error_check_good db_get:recno:keys:$j \
@@ -188,6 +216,9 @@ proc test053 { method args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
puts "Test053 complete."
diff --git a/db/test/test054.tcl b/db/test/test054.tcl
index 7308f9956..31657fa6d 100644
--- a/db/test/test054.tcl
+++ b/db/test/test054.tcl
@@ -1,32 +1,32 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test054.tcl,v 11.15 2000/08/25 14:21:57 sue Exp $
+# $Id: test054.tcl,v 11.24 2003/01/08 05:53:58 bostic Exp $
#
-# Test054:
-#
-# This test checks for cursor maintenance in the presence of deletes.
-# There are N different scenarios to tests:
-# 1. No duplicates. Cursor A deletes a key, do a GET for the key.
-# 2. No duplicates. Cursor is positioned right before key K, Delete K,
-# do a next on the cursor.
-# 3. No duplicates. Cursor is positioned on key K, do a regular delete of K.
-# do a current get on K.
-# 4. Repeat 3 but do a next instead of current.
-#
-# 5. Duplicates. Cursor A is on the first item of a duplicate set, A
-# does a delete. Then we do a non-cursor get.
-# 6. Duplicates. Cursor A is in a duplicate set and deletes the item.
-# do a delete of the entire Key. Test cursor current.
-# 7. Continue last test and try cursor next.
-# 8. Duplicates. Cursor A is in a duplicate set and deletes the item.
-# Cursor B is in the same duplicate set and deletes a different item.
-# Verify that the cursor is in the right place.
-# 9. Cursors A and B are in the place in the same duplicate set. A deletes
-# its item. Do current on B.
-# 10. Continue 8 and do a next on B.
+# TEST test054
+# TEST Cursor maintenance during key/data deletion.
+# TEST
+# TEST This test checks for cursor maintenance in the presence of deletes.
+# TEST There are N different scenarios to tests:
+# TEST 1. No duplicates. Cursor A deletes a key, do a GET for the key.
+# TEST 2. No duplicates. Cursor is positioned right before key K, Delete K,
+# TEST do a next on the cursor.
+# TEST 3. No duplicates. Cursor is positioned on key K, do a regular delete
+# TEST of K, do a current get on K.
+# TEST 4. Repeat 3 but do a next instead of current.
+# TEST 5. Duplicates. Cursor A is on the first item of a duplicate set, A
+# TEST does a delete. Then we do a non-cursor get.
+# TEST 6. Duplicates. Cursor A is in a duplicate set and deletes the item.
+# TEST do a delete of the entire Key. Test cursor current.
+# TEST 7. Continue last test and try cursor next.
+# TEST 8. Duplicates. Cursor A is in a duplicate set and deletes the item.
+# TEST Cursor B is in the same duplicate set and deletes a different item.
+# TEST Verify that the cursor is in the right place.
+# TEST 9. Cursors A and B are in the place in the same duplicate set. A
+# TEST deletes its item. Do current on B.
+# TEST 10. Continue 8 and do a next on B.
proc test054 { method args } {
global errorInfo
source ./include.tcl
@@ -34,7 +34,7 @@ proc test054 { method args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- append args " -create -truncate -mode 0644"
+ append args " -create -mode 0644"
puts "Test054 ($method $args):\
interspersed cursor and normal operations"
if { [is_record_based $method] == 1 } {
@@ -42,18 +42,29 @@ proc test054 { method args } {
return
}
- # Create the database and open the dictionary
+ # Find the environment in the argument list, we'll need it
+ # later.
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ }
+
+ # Create the database and open the dictionary
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test054.db
+ set testfile $testdir/test054-nodup.db
set env NULL
} else {
- set testfile test054.db
- incr eindex
+ set testfile test054-nodup.db
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -64,15 +75,28 @@ proc test054 { method args } {
set db [eval {berkdb_open} $args {$omethod $testfile}]
error_check_good db_open:nodup [is_valid_db $db] TRUE
- set curs [eval {$db cursor} $txn]
- error_check_good curs_open:nodup [is_substr $curs $db] 1
-
# Put three keys in the database
for { set key 1 } { $key <= 3 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $flags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good curs_open:nodup [is_valid_cursor $curs $db] TRUE
+
# Retrieve keys sequentially so we can figure out their order
set i 1
for {set d [$curs get -first] } \
@@ -82,7 +106,7 @@ proc test054 { method args } {
incr i
}
- # TEST CASE 1
+ # Test case #1.
puts "\tTest054.a1: Delete w/cursor, regular get"
# Now set the cursor on the middle on.
@@ -94,7 +118,7 @@ proc test054 { method args } {
error_check_good curs_get:DB_SET:data $d datum$key_set(2)
# Now do the delete
- set r [eval {$curs del} $txn]
+ set r [$curs del]
error_check_good curs_del $r 0
# Now do the get
@@ -103,17 +127,33 @@ proc test054 { method args } {
# Free up the cursor.
error_check_good cursor_close [eval {$curs close}] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- # TEST CASE 2
+ # Test case #2.
puts "\tTest054.a2: Cursor before K, delete K, cursor next"
# Replace key 2
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn {$key_set(2) datum$key_set(2)}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# Open and position cursor on first item.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set curs [eval {$db cursor} $txn]
- error_check_good curs_open:nodup [is_substr $curs $db] 1
+ error_check_good curs_open:nodup [is_valid_cursor $curs $db] TRUE
# Retrieve keys sequentially so we can figure out their order
set i 1
@@ -143,7 +183,7 @@ proc test054 { method args } {
error_check_good curs_get:DB_NEXT:key $k $key_set(3)
error_check_good curs_get:DB_NEXT:data $d datum$key_set(3)
- # TEST CASE 3
+ # Test case #3.
puts "\tTest054.a3: Cursor on K, delete K, cursor current"
# delete item 3
@@ -153,18 +193,34 @@ proc test054 { method args } {
set ret [$curs get -current]
error_check_good current_after_del $ret [list [list [] []]]
error_check_good cursor_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
puts "\tTest054.a4: Cursor on K, delete K, cursor next"
# Restore keys 2 and 3
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn {$key_set(2) datum$key_set(2)}]
error_check_good put $r 0
set r [eval {$db put} $txn {$key_set(3) datum$key_set(3)}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
# Create the new cursor and put it on 1
set curs [eval {$db cursor} $txn]
- error_check_good curs_open:nodup [is_substr $curs $db] 1
+ error_check_good curs_open:nodup [is_valid_cursor $curs $db] TRUE
set r [$curs get -set $key_set(1)]
error_check_bad cursor_get:DB_SET [llength $r] 0
set k [lindex [lindex $r 0] 0]
@@ -186,6 +242,9 @@ proc test054 { method args } {
# Close cursor
error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now get ready for duplicate tests
@@ -197,19 +256,49 @@ proc test054 { method args } {
puts "\tTest054.b: Duplicate Tests"
append args " -dup"
+
+ # Open a new database for the dup tests so -truncate is not needed.
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/test054-dup.db
+ set env NULL
+ } else {
+ set testfile test054-dup.db
+ set env [lindex $args $eindex]
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
+ set flags ""
+ set txn ""
+
set db [eval {berkdb_open} $args {$omethod $testfile}]
error_check_good db_open:dup [is_valid_db $db] TRUE
- set curs [eval {$db cursor} $txn]
- error_check_good curs_open:dup [is_substr $curs $db] 1
-
# Put three keys in the database
for { set key 1 } { $key <= 3 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $flags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Retrieve keys sequentially so we can figure out their order
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good curs_open:dup [is_valid_cursor $curs $db] TRUE
+
set i 1
for {set d [$curs get -first] } \
{[llength $d] != 0 } \
@@ -224,7 +313,7 @@ proc test054 { method args } {
error_check_good dup:put $r 0
}
- # TEST CASE 5
+ # Test case #5.
puts "\tTest054.b1: Delete dup w/cursor on first item. Get on key."
# Now set the cursor on the first of the duplicate set.
@@ -243,7 +332,7 @@ proc test054 { method args } {
set r [eval {$db get} $txn {$key_set(2)}]
error_check_good get_after_del [lindex [lindex $r 0] 1] dup_1
- # TEST CASE 6
+ # Test case #6.
puts "\tTest054.b2: Now get the next duplicate from the cursor."
# Now do next on cursor
@@ -254,12 +343,12 @@ proc test054 { method args } {
error_check_good curs_get:DB_NEXT:key $k $key_set(2)
error_check_good curs_get:DB_NEXT:data $d dup_1
- # TEST CASE 3
+ # Test case #3.
puts "\tTest054.b3: Two cursors in set; each delete different items"
# Open a new cursor.
set curs2 [eval {$db cursor} $txn]
- error_check_good curs_open [is_substr $curs2 $db] 1
+ error_check_good curs_open [is_valid_cursor $curs2 $db] TRUE
# Set on last of duplicate set.
set r [$curs2 get -set $key_set(3)]
@@ -365,5 +454,8 @@ proc test054 { method args } {
# Close cursor
error_check_good curs_close [$curs close] 0
error_check_good curs2_close [$curs2 close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test055.tcl b/db/test/test055.tcl
index fc5ce4e98..d2c24e787 100644
--- a/db/test/test055.tcl
+++ b/db/test/test055.tcl
@@ -1,16 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test055.tcl,v 11.11 2000/08/25 14:21:57 sue Exp $
+# $Id: test055.tcl,v 11.17 2003/01/08 05:53:58 bostic Exp $
#
-# Test055:
-# This test checks basic cursor operations.
-# There are N different scenarios to tests:
-# 1. (no dups) Set cursor, retrieve current.
-# 2. (no dups) Set cursor, retrieve next.
-# 3. (no dups) Set cursor, retrieve prev.
+# TEST test055
+# TEST Basic cursor operations.
+# TEST This test checks basic cursor operations.
+# TEST There are N different scenarios to tests:
+# TEST 1. (no dups) Set cursor, retrieve current.
+# TEST 2. (no dups) Set cursor, retrieve next.
+# TEST 3. (no dups) Set cursor, retrieve prev.
proc test055 { method args } {
global errorInfo
source ./include.tcl
@@ -21,6 +22,7 @@ proc test055 { method args } {
puts "Test055: $method interspersed cursor and normal operations"
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -32,6 +34,11 @@ proc test055 { method args } {
set testfile test055.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -39,28 +46,41 @@ proc test055 { method args } {
set txn ""
puts "\tTest055.a: No duplicates"
- set db [eval {berkdb_open -create -truncate -mode 0644 $omethod } \
+ set db [eval {berkdb_open -create -mode 0644 $omethod } \
$args {$testfile}]
error_check_good db_open:nodup [is_valid_db $db] TRUE
- set curs [eval {$db cursor} $txn]
- error_check_good curs_open:nodup [is_substr $curs $db] 1
-
# Put three keys in the database
for { set key 1 } { $key <= 3 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $flags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Retrieve keys sequentially so we can figure out their order
set i 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good curs_open:nodup [is_valid_cursor $curs $db] TRUE
+
for {set d [$curs get -first] } { [llength $d] != 0 } {\
set d [$curs get -next] } {
set key_set($i) [lindex [lindex $d 0] 0]
incr i
}
- # TEST CASE 1
+ # Test case #1.
puts "\tTest055.a1: Set cursor, retrieve current"
# Now set the cursor on the middle on.
@@ -81,7 +101,7 @@ proc test055 { method args } {
error_check_good \
curs_get:DB_CURRENT:data $d [pad_data $method datum$key_set(2)]
- # TEST CASE 2
+ # Test case #2.
puts "\tTest055.a2: Set cursor, retrieve previous"
set r [$curs get -prev]
error_check_bad cursor_get:DB_PREV [llength $r] 0
@@ -91,10 +111,10 @@ proc test055 { method args } {
error_check_good \
curs_get:DB_PREV:data $d [pad_data $method datum$key_set(1)]
- #TEST CASE 3
+ # Test case #3.
puts "\tTest055.a2: Set cursor, retrieve next"
- # Now set the cursor on the middle on.
+ # Now set the cursor on the middle one.
set r [$curs get -set $key_set(2)]
error_check_bad cursor_get:DB_SET [llength $r] 0
set k [lindex [lindex $r 0] 0]
@@ -114,5 +134,8 @@ proc test055 { method args } {
# Close cursor and database.
error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test056.tcl b/db/test/test056.tcl
index ade3890c3..11e0757ed 100644
--- a/db/test/test056.tcl
+++ b/db/test/test056.tcl
@@ -1,12 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test056.tcl,v 11.13 2000/08/25 14:21:57 sue Exp $
+# $Id: test056.tcl,v 11.19 2003/01/08 05:53:58 bostic Exp $
#
-# Test056
-# Check if deleting a key when a cursor is on a duplicate of that key works.
+# TEST test056
+# TEST Cursor maintenance during deletes.
+# TEST Check if deleting a key when a cursor is on a duplicate of that
+# TEST key works.
proc test056 { method args } {
global errorInfo
source ./include.tcl
@@ -14,7 +16,7 @@ proc test056 { method args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- append args " -create -truncate -mode 0644 -dup "
+ append args " -create -mode 0644 -dup "
if { [is_record_based $method] == 1 || [is_rbtree $method] } {
puts "Test056: skipping for method $method"
return
@@ -22,6 +24,7 @@ proc test056 { method args } {
puts "Test056: $method delete of key in presence of cursor"
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -33,6 +36,11 @@ proc test056 { method args } {
set testfile test056.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -42,18 +50,31 @@ proc test056 { method args } {
set db [eval {berkdb_open} $args {$omethod $testfile}]
error_check_good db_open:dup [is_valid_db $db] TRUE
- set curs [eval {$db cursor} $txn]
- error_check_good curs_open:dup [is_substr $curs $db] 1
-
puts "\tTest056.a: Key delete with cursor on duplicate."
# Put three keys in the database
for { set key 1 } { $key <= 3 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $flags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Retrieve keys sequentially so we can figure out their order
set i 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good curs_open:dup [is_valid_cursor $curs $db] TRUE
+
for {set d [$curs get -first] } { [llength $d] != 0 } {
set d [$curs get -next] } {
set key_set($i) [lindex [lindex $d 0] 0]
@@ -141,5 +162,8 @@ proc test056 { method args } {
error_check_good curs_get:DB_FIRST:data $d datum$key_set(3)
error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test057.tcl b/db/test/test057.tcl
index 1dc350e32..438dadd27 100644
--- a/db/test/test057.tcl
+++ b/db/test/test057.tcl
@@ -1,16 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test057.tcl,v 11.17 2000/08/25 14:21:57 sue Exp $
+# $Id: test057.tcl,v 11.23 2003/01/08 05:53:59 bostic Exp $
#
-# Test057:
-# Check if we handle the case where we delete a key with the cursor on it
-# and then add the same key. The cursor should not get the new item
-# returned, but the item shouldn't disappear.
-# Run test tests, one where the overwriting put is done with a put and
-# one where it's done with a cursor put.
+# TEST test057
+# TEST Cursor maintenance during key deletes.
+# TEST Check if we handle the case where we delete a key with the cursor on
+# TEST it and then add the same key. The cursor should not get the new item
+# TEST returned, but the item shouldn't disappear.
+# TEST Run test tests, one where the overwriting put is done with a put and
+# TEST one where it's done with a cursor put.
proc test057 { method args } {
global errorInfo
source ./include.tcl
@@ -18,7 +19,7 @@ proc test057 { method args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
- append args " -create -truncate -mode 0644 -dup "
+ append args " -create -mode 0644 -dup "
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
puts "Test057: skipping for method $method"
return
@@ -26,6 +27,7 @@ proc test057 { method args } {
puts "Test057: $method delete and replace in presence of cursor."
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -37,6 +39,11 @@ proc test057 { method args } {
set testfile test057.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -46,20 +53,33 @@ proc test057 { method args } {
set db [eval {berkdb_open} $args {$omethod $testfile}]
error_check_good dbopen:dup [is_valid_db $db] TRUE
- set curs [eval {$db cursor} $txn]
- error_check_good curs_open:dup [is_substr $curs $db] 1
-
puts "\tTest057.a: Set cursor, delete cursor, put with key."
# Put three keys in the database
for { set key 1 } { $key <= 3 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $flags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Retrieve keys sequentially so we can figure out their order
set i 1
- for {set d [$curs get -first] } {[llength $d] != 0 } {\
- set d [$curs get -next] } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good curs_open:dup [is_valid_cursor $curs $db] TRUE
+
+ for {set d [$curs get -first] } {[llength $d] != 0 } \
+ {set d [$curs get -next] } {
set key_set($i) [lindex [lindex $d 0] 0]
incr i
}
@@ -108,7 +128,7 @@ proc test057 { method args } {
puts "\tTest057.b: Set two cursor on a key, delete one, overwrite other"
set curs2 [eval {$db cursor} $txn]
- error_check_good curs2_open [is_substr $curs2 $db] 1
+ error_check_good curs2_open [is_valid_cursor $curs2 $db] TRUE
# Set both cursors on the 4rd key
set r [$curs get -set $key_set(3)]
@@ -221,5 +241,8 @@ proc test057 { method args } {
error_check_good curs2_close [$curs2 close] 0
error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test058.tcl b/db/test/test058.tcl
index 00870a6b5..8d8b0e56e 100644
--- a/db/test/test058.tcl
+++ b/db/test/test058.tcl
@@ -1,10 +1,12 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test058.tcl,v 11.14 2000/08/25 14:21:57 sue Exp $
+# $Id: test058.tcl,v 11.21 2003/01/08 05:53:59 bostic Exp $
#
+# TEST test058
+# TEST Verify that deleting and reading duplicates results in correct ordering.
proc test058 { method args } {
source ./include.tcl
@@ -18,6 +20,8 @@ proc test058 { method args } {
return
}
set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
set omethod [convert_method $method]
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
@@ -28,12 +32,12 @@ proc test058 { method args } {
# environment
env_cleanup $testdir
- set eflags "-create -txn -home $testdir"
- set env [eval {berkdb env} $eflags]
+ set eflags "-create -txn $encargs -home $testdir"
+ set env [eval {berkdb_env} $eflags]
error_check_good env [is_valid_env $env] TRUE
# db open
- set flags "-create -mode 0644 -dup -env $env $args"
+ set flags "-auto_commit -create -mode 0644 -dup -env $env $args"
set db [eval {berkdb_open} $flags $omethod "test058.db"]
error_check_good dbopen [is_valid_db $db] TRUE
diff --git a/db/test/test059.tcl b/db/test/test059.tcl
index f9988c4e2..dcd3e524d 100644
--- a/db/test/test059.tcl
+++ b/db/test/test059.tcl
@@ -1,16 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test059.tcl,v 11.12 2000/08/25 14:21:57 sue Exp $
-#
-# Test059:
-# Make sure that we handle retrieves of zero-length data items correctly.
-# The following ops, should allow a partial data retrieve of 0-length.
-# db_get
-# db_cget FIRST, NEXT, LAST, PREV, CURRENT, SET, SET_RANGE
+# $Id: test059.tcl,v 11.19 2003/01/08 05:53:59 bostic Exp $
#
+# TEST test059
+# TEST Cursor ops work with a partial length of 0.
+# TEST Make sure that we handle retrieves of zero-length data items correctly.
+# TEST The following ops, should allow a partial data retrieve of 0-length.
+# TEST db_get
+# TEST db_cget FIRST, NEXT, LAST, PREV, CURRENT, SET, SET_RANGE
proc test059 { method args } {
source ./include.tcl
@@ -20,6 +20,7 @@ proc test059 { method args } {
puts "Test059: $method 0-length partial data retrieval"
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -31,6 +32,11 @@ proc test059 { method args } {
set testfile test059.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -44,20 +50,33 @@ proc test059 { method args } {
}
puts "\tTest059.a: Populate a database"
- set oflags "-create -truncate -mode 0644 $omethod $args $testfile"
+ set oflags "-create -mode 0644 $omethod $args $testfile"
set db [eval {berkdb_open} $oflags]
error_check_good db_create [is_substr $db db] 1
# Put ten keys in the database
for { set key 1 } { $key <= 10 } {incr key} {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set r [eval {$db put} $txn $pflags {$key datum$key}]
error_check_good put $r 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Retrieve keys sequentially so we can figure out their order
set i 1
- set curs [$db cursor]
- error_check_good db_curs [is_substr $curs $db] 1
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [eval {$db cursor} $txn]
+ error_check_good db_curs [is_valid_cursor $curs $db] TRUE
for {set d [$curs get -first] } { [llength $d] != 0 } {
set d [$curs get -next] } {
@@ -68,7 +87,7 @@ proc test059 { method args } {
puts "\tTest059.a: db get with 0 partial length retrieve"
# Now set the cursor on the middle one.
- set ret [eval {$db get -partial {0 0}} $gflags {$key_set(5)}]
+ set ret [eval {$db get -partial {0 0}} $txn $gflags {$key_set(5)}]
error_check_bad db_get_0 [llength $ret] 0
puts "\tTest059.a: db cget FIRST with 0 partial length retrieve"
@@ -124,5 +143,8 @@ proc test059 { method args } {
}
error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test060.tcl b/db/test/test060.tcl
index 7f7cc71f0..90bc65b1f 100644
--- a/db/test/test060.tcl
+++ b/db/test/test060.tcl
@@ -1,13 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test060.tcl,v 11.6 2000/08/25 14:21:57 sue Exp $
+# $Id: test060.tcl,v 11.11 2003/01/08 05:53:59 bostic Exp $
#
-# Test060: Test of the DB_EXCL flag to DB->open.
-# 1) Attempt to open and create a nonexistent database; verify success.
-# 2) Attempt to reopen it; verify failure.
+# TEST test060
+# TEST Test of the DB_EXCL flag to DB->open().
+# TEST 1) Attempt to open and create a nonexistent database; verify success.
+# TEST 2) Attempt to reopen it; verify failure.
proc test060 { method args } {
global errorCode
source ./include.tcl
@@ -18,6 +19,7 @@ proc test060 { method args } {
puts "Test060: $method ($args) Test of the DB_EXCL flag to DB->open"
# Set the database location and make sure the db doesn't exist yet
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -29,6 +31,11 @@ proc test060 { method args } {
set testfile test060.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
diff --git a/db/test/test061.tcl b/db/test/test061.tcl
index c3187268e..c74686bc9 100644
--- a/db/test/test061.tcl
+++ b/db/test/test061.tcl
@@ -1,20 +1,23 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test061.tcl,v 11.12 2000/10/27 13:23:56 sue Exp $
+# $Id: test061.tcl,v 11.19 2003/01/08 05:54:00 bostic Exp $
#
-# Test061: Test of transaction abort and commit for in-memory databases.
-# a) Put + abort: verify absence of data
-# b) Put + commit: verify presence of data
-# c) Overwrite + abort: verify that data is unchanged
-# d) Overwrite + commit: verify that data has changed
-# e) Delete + abort: verify that data is still present
-# f) Delete + commit: verify that data has been deleted
+# TEST test061
+# TEST Test of txn abort and commit for in-memory databases.
+# TEST a) Put + abort: verify absence of data
+# TEST b) Put + commit: verify presence of data
+# TEST c) Overwrite + abort: verify that data is unchanged
+# TEST d) Overwrite + commit: verify that data has changed
+# TEST e) Delete + abort: verify that data is still present
+# TEST f) Delete + commit: verify that data has been deleted
proc test061 { method args } {
global alphabet
+ global encrypt
global errorCode
+ global passwd
source ./include.tcl
#
@@ -32,6 +35,8 @@ proc test061 { method args } {
puts "Test061 skipping for method $method"
return
}
+ set encargs ""
+ set args [split_encargs $args encargs]
puts "Test061: Transaction abort and commit test for in-memory data."
puts "Test061: $method $args"
@@ -52,12 +57,12 @@ proc test061 { method args } {
env_cleanup $testdir
# create environment
- set eflags "-create -txn -home $testdir"
- set dbenv [eval {berkdb env} $eflags]
+ set eflags "-create -txn $encargs -home $testdir"
+ set dbenv [eval {berkdb_env} $eflags]
error_check_good dbenv [is_valid_env $dbenv] TRUE
# db open -- no file specified, in-memory database
- set flags "-create $args $omethod"
+ set flags "-auto_commit -create $args $omethod"
set db [eval {berkdb_open -env} $dbenv $flags]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -202,14 +207,20 @@ proc test061 { method args } {
error_check_good env_close [eval {$dbenv close}] 0
# Now run db_recover and ensure that it runs cleanly.
+ set utilflag ""
+ if { $encrypt != 0 } {
+ set utilflag "-P $passwd"
+ }
puts "\tTest061.g: Running db_recover -h"
- set ret [catch {exec $util_path/db_recover -h $testdir} res]
+ set ret [catch {eval {exec} $util_path/db_recover -h $testdir \
+ $utilflag} res]
if { $ret != 0 } {
puts "FAIL: db_recover outputted $res"
}
error_check_good db_recover $ret 0
puts "\tTest061.h: Running db_recover -c -h"
- set ret [catch {exec $util_path/db_recover -c -h $testdir} res]
+ set ret [catch {eval {exec} $util_path/db_recover -c -h $testdir \
+ $utilflag} res]
error_check_good db_recover-c $ret 0
}
diff --git a/db/test/test062.tcl b/db/test/test062.tcl
index 43a5e1d39..916d7e4ab 100644
--- a/db/test/test062.tcl
+++ b/db/test/test062.tcl
@@ -1,15 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test062.tcl,v 11.13 2000/12/20 19:02:36 sue Exp $
+# $Id: test062.tcl,v 11.22 2003/01/08 05:54:00 bostic Exp $
#
-# DB Test 62: Test of partial puts onto duplicate pages.
-# Insert the first 200 words into the dictionary 200 times each with
-# self as key and <random letter>:self as data. Use partial puts to
-# append self again to data; verify correctness.
-proc test062 { method {nentries 200} {ndups 200} {tnum 62} args } {
+# TEST test062
+# TEST Test of partial puts (using DB_CURRENT) onto duplicate pages.
+# TEST Insert the first 200 words into the dictionary 200 times each with
+# TEST self as key and <random letter>:self as data. Use partial puts to
+# TEST append self again to data; verify correctness.
+proc test062 { method {nentries 200} {ndups 200} {tnum "062"} args } {
global alphabet
global rand_init
source ./include.tcl
@@ -19,28 +20,42 @@ proc test062 { method {nentries 200} {ndups 200} {tnum 62} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
+ if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
+ puts "Test$tnum skipping for method $omethod"
+ return
+ }
# Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 200 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- puts "Test0$tnum:\
- $method ($args) Partial puts and duplicates."
- if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $omethod"
- return
- }
- set db [eval {berkdb_open -create -truncate -mode 0644 \
+ puts "Test$tnum:\
+ $method ($args) $nentries Partial puts and $ndups duplicates."
+ set db [eval {berkdb_open -create -mode 0644 \
$omethod -dup} $args {$testfile} ]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -51,26 +66,36 @@ proc test062 { method {nentries 200} {ndups 200} {tnum 62} args } {
set count 0
# Here is the loop where we put each key/data pair
- puts "\tTest0$tnum.a: Put loop (initialize database)"
- set dbc [eval {$db cursor} $txn]
- error_check_good cursor_open [is_substr $dbc $db] 1
+ puts "\tTest$tnum.a: Put loop (initialize database)"
while { [gets $did str] != -1 && $count < $nentries } {
for { set i 1 } { $i <= $ndups } { incr i } {
set pref \
[string index $alphabet [berkdb random_int 0 25]]
set datastr $pref:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$str [chop_data $method $datastr]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
set keys($count) $str
incr count
}
- error_check_good cursor_close [$dbc close] 0
close $did
- puts "\tTest0$tnum.b: Partial puts."
+ puts "\tTest$tnum.b: Partial puts."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set dbc [eval {$db cursor} $txn]
error_check_good cursor_open [is_substr $dbc $db] 1
@@ -91,22 +116,22 @@ proc test062 { method {nentries 200} {ndups 200} {tnum 62} args } {
set doff [expr [string length $d] + 2]
set dlen 0
error_check_good data_and_key_sanity $d $k
-
+
set ret [$dbc get -current]
error_check_good before_sanity \
[lindex [lindex $ret 0] 0] \
[string range [lindex [lindex $ret 0] 1] 2 end]
-
+
error_check_good partial_put [eval {$dbc put -current \
-partial [list $doff $dlen] $d}] 0
-
+
set ret [$dbc get -current]
error_check_good partial_put_correct \
[lindex [lindex $ret 0] 1] $orig_d$d
}
}
-
- puts "\tTest0$tnum.c: Double-checking get loop."
+
+ puts "\tTest$tnum.c: Double-checking get loop."
# Double-check that each datum in the regular db has
# been appropriately modified.
@@ -121,5 +146,8 @@ proc test062 { method {nentries 200} {ndups 200} {tnum 62} args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test063.tcl b/db/test/test063.tcl
index 2b9c4c4c7..2e06a4008 100644
--- a/db/test/test063.tcl
+++ b/db/test/test063.tcl
@@ -1,32 +1,39 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test063.tcl,v 11.11 2000/08/25 14:21:58 sue Exp $
+# $Id: test063.tcl,v 11.19 2003/01/08 05:54:00 bostic Exp $
#
-# DB Test 63: Test that the DB_RDONLY flag is respected.
-# Attempt to both DB->put and DBC->c_put into a database
-# that has been opened DB_RDONLY, and check for failure.
+# TEST test063
+# TEST Test of the DB_RDONLY flag to DB->open
+# TEST Attempt to both DB->put and DBC->c_put into a database
+# TEST that has been opened DB_RDONLY, and check for failure.
proc test063 { method args } {
global errorCode
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 63
+ set tnum "063"
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -36,6 +43,7 @@ proc test063 { method args } {
set data2 "more_data"
set gflags ""
+ set txn ""
if { [is_record_based $method] == 1 } {
set key "1"
@@ -43,22 +51,30 @@ proc test063 { method args } {
append gflags " -recno"
}
- puts "Test0$tnum: $method ($args) DB_RDONLY test."
+ puts "Test$tnum: $method ($args) DB_RDONLY test."
# Create a test database.
- puts "\tTest0$tnum.a: Creating test database."
- set db [eval {berkdb_open_noerr -create -truncate -mode 0644} \
+ puts "\tTest$tnum.a: Creating test database."
+ set db [eval {berkdb_open_noerr -create -mode 0644} \
$omethod $args $testfile]
error_check_good db_create [is_valid_db $db] TRUE
# Put and get an item so it's nonempty.
- set ret [eval {$db put} $key [chop_data $method $data]]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key [chop_data $method $data]}]
error_check_good initial_put $ret 0
- set dbt [eval {$db get} $gflags $key]
+ set dbt [eval {$db get} $txn $gflags {$key}]
error_check_good initial_get $dbt \
[list [list $key [pad_data $method $data]]]
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
if { $eindex == -1 } {
@@ -68,25 +84,39 @@ proc test063 { method args } {
error_check_good writable [file writable $testfile] 1
}
- puts "\tTest0$tnum.b: Re-opening DB_RDONLY and attempting to put."
+ puts "\tTest$tnum.b: Re-opening DB_RDONLY and attempting to put."
# Now open it read-only and make sure we can get but not put.
set db [eval {berkdb_open_noerr -rdonly} $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
- set dbt [eval {$db get} $gflags $key]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbt [eval {$db get} $txn $gflags {$key}]
error_check_good db_get $dbt \
[list [list $key [pad_data $method $data]]]
- set ret [catch {eval {$db put} $key2 [chop_data $method $data]} res]
+ set ret [catch {eval {$db put} $txn \
+ {$key2 [chop_data $method $data]}} res]
error_check_good put_failed $ret 1
error_check_good db_put_rdonly [is_substr $errorCode "EACCES"] 1
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set errorCode "NONE"
- puts "\tTest0$tnum.c: Attempting cursor put."
+ puts "\tTest$tnum.c: Attempting cursor put."
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good cursor_create [is_valid_cursor $dbc $db] TRUE
error_check_good cursor_set [$dbc get -first] $dbt
@@ -94,21 +124,21 @@ proc test063 { method args } {
error_check_good c_put_failed $ret 1
error_check_good dbc_put_rdonly [is_substr $errorCode "EACCES"] 1
- set dbt [eval {$db get} $gflags $key2]
+ set dbt [eval {$db get} $gflags {$key2}]
error_check_good db_get_key2 $dbt ""
- puts "\tTest0$tnum.d: Attempting ordinary delete."
+ puts "\tTest$tnum.d: Attempting ordinary delete."
set errorCode "NONE"
- set ret [catch {eval {$db del} $key} 1]
+ set ret [catch {eval {$db del} $txn {$key}} 1]
error_check_good del_failed $ret 1
error_check_good db_del_rdonly [is_substr $errorCode "EACCES"] 1
- set dbt [eval {$db get} $gflags $key]
+ set dbt [eval {$db get} $txn $gflags {$key}]
error_check_good db_get_key $dbt \
[list [list $key [pad_data $method $data]]]
- puts "\tTest0$tnum.e: Attempting cursor delete."
+ puts "\tTest$tnum.e: Attempting cursor delete."
# Just set the cursor to the beginning; we don't care what's there...
# yet.
set dbt2 [$dbc get -first]
@@ -121,9 +151,12 @@ proc test063 { method args } {
set dbt2 [$dbc get -current]
error_check_good db_get_key $dbt2 $dbt
- puts "\tTest0$tnum.f: Close, reopen db; verify unchanged."
+ puts "\tTest$tnum.f: Close, reopen db; verify unchanged."
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
set db [eval {berkdb_open} $omethod $args $testfile]
diff --git a/db/test/test064.tcl b/db/test/test064.tcl
index ad39f4b22..496b80df6 100644
--- a/db/test/test064.tcl
+++ b/db/test/test064.tcl
@@ -1,46 +1,53 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test064.tcl,v 11.8 2000/08/25 14:21:58 sue Exp $
+# $Id: test064.tcl,v 11.15 2003/01/08 05:54:00 bostic Exp $
#
-# DB Test 64: Test of DB->get_type
-# Create a database of type specified by method.
-# Make sure DB->get_type returns the right thing with both a
-# normal and DB_UNKNOWN open.
+# TEST test064
+# TEST Test of DB->get_type
+# TEST Create a database of type specified by method.
+# TEST Make sure DB->get_type returns the right thing with both a normal
+# TEST and DB_UNKNOWN open.
proc test064 { method args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 64
+ set tnum "064"
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- puts "Test0$tnum: $method ($args) DB->get_type test."
+ puts "Test$tnum: $method ($args) DB->get_type test."
# Create a test database.
- puts "\tTest0$tnum.a: Creating test database of type $method."
- set db [eval {berkdb_open -create -truncate -mode 0644} \
+ puts "\tTest$tnum.a: Creating test database of type $method."
+ set db [eval {berkdb_open -create -mode 0644} \
$omethod $args $testfile]
error_check_good db_create [is_valid_db $db] TRUE
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.b: get_type after method specifier."
+ puts "\tTest$tnum.b: get_type after method specifier."
set db [eval {berkdb_open} $omethod $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
@@ -50,7 +57,7 @@ proc test064 { method args } {
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.c: get_type after DB_UNKNOWN."
+ puts "\tTest$tnum.c: get_type after DB_UNKNOWN."
set db [eval {berkdb_open} $args $testfile]
error_check_good db_open [is_valid_db $db] TRUE
diff --git a/db/test/test065.tcl b/db/test/test065.tcl
index 5f236ebbd..284d37e95 100644
--- a/db/test/test065.tcl
+++ b/db/test/test065.tcl
@@ -1,62 +1,76 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test065.tcl,v 11.8 2000/08/25 14:21:58 sue Exp $
+# $Id: test065.tcl,v 11.19 2003/09/04 23:41:17 bostic Exp $
#
-# DB Test 65: Test of DB->stat(DB_RECORDCOUNT)
+# TEST test065
+# TEST Test of DB->stat(DB_FASTSTAT)
proc test065 { method args } {
source ./include.tcl
global errorCode
global alphabet
+ set nentries 10000
set args [convert_args $method $args]
set omethod [convert_method $method]
- set tnum 65
+ set tnum "065"
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- puts "Test0$tnum: $method ($args) DB->stat(DB_RECORDCOUNT) test."
+ puts "Test$tnum: $method ($args) DB->stat(DB_FAST_STAT) test."
- puts "\tTest0$tnum.a: Create database and check it while empty."
+ puts "\tTest$tnum.a: Create database and check it while empty."
- set db [eval {berkdb_open_noerr -create -truncate -mode 0644} \
+ set db [eval {berkdb_open_noerr -create -mode 0644} \
$omethod $args $testfile]
error_check_good db_open [is_valid_db $db] TRUE
- set ret [catch {eval $db stat -recordcount} res]
+ set ret [catch {eval $db stat -faststat} res]
error_check_good db_close [$db close] 0
if { ([is_record_based $method] && ![is_queue $method]) \
|| [is_rbtree $method] } {
- error_check_good recordcount_ok [lindex [lindex $res 0] 1] 0
+ error_check_good recordcount_ok [is_substr $res \
+ "{{Number of keys} 0}"] 1
} else {
- error_check_good \
- recordcount_notok [is_substr $errorCode "EINVAL"] 1
- puts "\tTest0$tnum: Test complete for method $method."
+ puts "\tTest$tnum: Test complete for method $method."
return
}
# If we've got this far, we're on an access method for
- # which DB_RECORDCOUNT makes sense. Thus, we no longer
+ # which record counts makes sense. Thus, we no longer
# catch EINVALs, and no longer care about __db_errs.
set db [eval {berkdb_open -create -mode 0644} $omethod $args $testfile]
- puts "\tTest0$tnum.b: put 10000 keys."
+ puts "\tTest$tnum.b: put $nentries keys."
if { [is_record_based $method] } {
set gflags " -recno "
@@ -66,80 +80,119 @@ proc test065 { method args } {
set keypfx "key"
}
+ set txn ""
set data [pad_data $method $alphabet]
- for { set ndx 1 } { $ndx <= 10000 } { incr ndx } {
- set ret [eval {$db put} $keypfx$ndx $data]
+ for { set ndx 1 } { $ndx <= $nentries } { incr ndx } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$keypfx$ndx $data}]
error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- set ret [$db stat -recordcount]
- error_check_good \
- recordcount_after_puts [lindex [lindex $ret 0] 1] 10000
-
- puts "\tTest0$tnum.c: delete 9000 keys."
- for { set ndx 1 } { $ndx <= 9000 } { incr ndx } {
+ set ret [$db stat -faststat]
+ error_check_good recordcount_after_puts \
+ [is_substr $ret "{{Number of keys} $nentries}"] 1
+
+ puts "\tTest$tnum.c: delete 90% of keys."
+ set end [expr {$nentries / 10 * 9}]
+ for { set ndx 1 } { $ndx <= $end } { incr ndx } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
if { [is_rrecno $method] == 1 } {
# if we're renumbering, when we hit key 5001 we'll
# have deleted 5000 and we'll croak! So delete key
# 1, repeatedly.
- set ret [eval {$db del} [concat $keypfx 1]]
+ set ret [eval {$db del} $txn {[concat $keypfx 1]}]
} else {
- set ret [eval {$db del} $keypfx$ndx]
+ set ret [eval {$db del} $txn {$keypfx$ndx}]
}
error_check_good db_del $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- set ret [$db stat -recordcount]
+ set ret [$db stat -faststat]
if { [is_rrecno $method] == 1 || [is_rbtree $method] == 1 } {
- # We allow renumbering--thus the stat should return 1000
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 1000
+ # We allow renumbering--thus the stat should return 10%
+ # of nentries.
+ error_check_good recordcount_after_dels [is_substr $ret \
+ "{{Number of keys} [expr {$nentries / 10}]}"] 1
} else {
# No renumbering--no change in RECORDCOUNT!
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 10000
+ error_check_good recordcount_after_dels \
+ [is_substr $ret "{{Number of keys} $nentries}"] 1
}
- puts "\tTest0$tnum.d: put 8000 new keys at the beginning."
- for { set ndx 1 } { $ndx <= 8000 } {incr ndx } {
- set ret [eval {$db put} $keypfx$ndx $data]
+ puts "\tTest$tnum.d: put new keys at the beginning."
+ set end [expr {$nentries / 10 * 8}]
+ for { set ndx 1 } { $ndx <= $end } {incr ndx } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$keypfx$ndx $data}]
error_check_good db_put_beginning $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- set ret [$db stat -recordcount]
+ set ret [$db stat -faststat]
if { [is_rrecno $method] == 1 } {
- # With renumbering we're back up to 8000
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 8000
+ # With renumbering we're back up to 80% of $nentries
+ error_check_good recordcount_after_dels [is_substr $ret \
+ "{{Number of keys} [expr {$nentries / 10 * 8}]}"] 1
} elseif { [is_rbtree $method] == 1 } {
- # Total records in a btree is now 9000
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 9000
+ # Total records in a btree is now 90% of $nentries
+ error_check_good recordcount_after_dels [is_substr $ret \
+ "{{Number of keys} [expr {$nentries / 10 * 9}]}"] 1
} else {
# No renumbering--still no change in RECORDCOUNT.
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 10000
+ error_check_good recordcount_after_dels [is_substr $ret \
+ "{{Number of keys} $nentries}"] 1
}
- puts "\tTest0$tnum.e: put 8000 new keys off the end."
- for { set ndx 9001 } { $ndx <= 17000 } {incr ndx } {
- set ret [eval {$db put} $keypfx$ndx $data]
+ puts "\tTest$tnum.e: put new keys at the end."
+ set start [expr {1 + $nentries / 10 * 9}]
+ set end [expr {($nentries / 10 * 9) + ($nentries / 10 * 8)}]
+ for { set ndx $start } { $ndx <= $end } { incr ndx } {
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$keypfx$ndx $data}]
error_check_good db_put_end $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- set ret [$db stat -recordcount]
+ set ret [$db stat -faststat]
if { [is_rbtree $method] != 1 } {
- # If this is a recno database, the record count should
- # be up to 17000, the largest number we've seen, with
+ # If this is a recno database, the record count should be up
+ # to (1.7 x nentries), the largest number we've seen, with
# or without renumbering.
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 17000
+ error_check_good recordcount_after_puts2 [is_substr $ret \
+ "{{Number of keys} [expr {$start - 1 + $nentries / 10 * 8}]}"] 1
} else {
- # In an rbtree, 1000 of those keys were overwrites,
- # so there are 7000 new keys + 9000 old keys == 16000
- error_check_good \
- recordcount_after_dels [lindex [lindex $ret 0] 1] 16000
+ # In an rbtree, 1000 of those keys were overwrites, so there
+ # are (.7 x nentries) new keys and (.9 x nentries) old keys
+ # for a total of (1.6 x nentries).
+ error_check_good recordcount_after_puts2 [is_substr $ret \
+ "{{Number of keys} [expr {$start -1 + $nentries / 10 * 7}]}"] 1
}
error_check_good db_close [$db close] 0
diff --git a/db/test/test066.tcl b/db/test/test066.tcl
index 591c51a4c..5b532bb15 100644
--- a/db/test/test066.tcl
+++ b/db/test/test066.tcl
@@ -1,27 +1,31 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test066.tcl,v 11.7 2000/08/25 14:21:58 sue Exp $
+# $Id: test066.tcl,v 11.14 2003/01/08 05:54:01 bostic Exp $
#
-# DB Test 66: Make sure a cursor put to DB_CURRENT acts as an overwrite in
-# a database with duplicates
+# TEST test066
+# TEST Test of cursor overwrites of DB_CURRENT w/ duplicates.
+# TEST
+# TEST Make sure a cursor put to DB_CURRENT acts as an overwrite in a
+# TEST database with duplicates.
proc test066 { method args } {
set omethod [convert_method $method]
set args [convert_args $method $args]
- set tnum 66
+ set tnum "066"
if { [is_record_based $method] || [is_rbtree $method] } {
- puts "Test0$tnum: Skipping for method $method."
+ puts "Test$tnum: Skipping for method $method."
return
}
- puts "Test0$tnum: Test of cursor put to DB_CURRENT with duplicates."
+ puts "Test$tnum: Test of cursor put to DB_CURRENT with duplicates."
source ./include.tcl
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -33,9 +37,15 @@ proc test066 { method args } {
set testfile test066.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
+ set txn ""
set key "test"
set data "olddata"
@@ -43,10 +53,23 @@ proc test066 { method args } {
$testfile]
error_check_good db_open [is_valid_db $db] TRUE
- set ret [eval {$db put} $key [chop_data $method $data]]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key [chop_data $method $data]}]
error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
set ret [$dbc get -first]
@@ -67,7 +90,10 @@ proc test066 { method args } {
error_check_good db_get_next $ret ""
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum: Test completed successfully."
+ puts "\tTest$tnum: Test completed successfully."
}
diff --git a/db/test/test067.tcl b/db/test/test067.tcl
index c287d7b1e..5615b0430 100644
--- a/db/test/test067.tcl
+++ b/db/test/test067.tcl
@@ -1,27 +1,33 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test067.tcl,v 11.12 2000/08/25 14:21:58 sue Exp $
+# $Id: test067.tcl,v 11.22 2003/07/18 14:11:57 sandstro Exp $
#
-# DB Test 67: Test of DB_CURRENT partial puts on almost-empty duplicate pages.
-# This test was written to address the following issue, #2 in the list of
-# issues relating to bug #0820:
-# 2. DBcursor->put, DB_CURRENT flag, off-page duplicates, hash and btree:
-# In Btree, the DB_CURRENT overwrite of off-page duplicate records
-# first deletes the record and then puts the new one -- this could
-# be a problem if the removal of the record causes a reverse split.
-# Suggested solution is to acquire a cursor to lock down the current
-# record, put a new record after that record, and then delete using
-# the held cursor.
-# It also tests the following, #5 in the same list of issues:
-# 5. DBcursor->put, DB_AFTER/DB_BEFORE/DB_CURRENT flags, DB_DBT_PARTIAL set,
-# duplicate comparison routine specified.
-# The partial change does not change how data items sort, but the
-# record to be put isn't built yet, and that record supplied is the
-# one that's checked for ordering compatibility.
-proc test067 { method {ndups 1000} {tnum 67} args } {
+# TEST test067
+# TEST Test of DB_CURRENT partial puts onto almost empty duplicate
+# TEST pages, with and without DB_DUP_SORT.
+# TEST
+# TEST Test of DB_CURRENT partial puts on almost-empty duplicate pages.
+# TEST This test was written to address the following issue, #2 in the
+# TEST list of issues relating to bug #0820:
+# TEST
+# TEST 2. DBcursor->put, DB_CURRENT flag, off-page duplicates, hash and btree:
+# TEST In Btree, the DB_CURRENT overwrite of off-page duplicate records
+# TEST first deletes the record and then puts the new one -- this could
+# TEST be a problem if the removal of the record causes a reverse split.
+# TEST Suggested solution is to acquire a cursor to lock down the current
+# TEST record, put a new record after that record, and then delete using
+# TEST the held cursor.
+# TEST
+# TEST It also tests the following, #5 in the same list of issues:
+# TEST 5. DBcursor->put, DB_AFTER/DB_BEFORE/DB_CURRENT flags, DB_DBT_PARTIAL
+# TEST set, duplicate comparison routine specified.
+# TEST The partial change does not change how data items sort, but the
+# TEST record to be put isn't built yet, and that record supplied is the
+# TEST one that's checked for ordering compatibility.
+proc test067 { method {ndups 1000} {tnum "067"} args } {
source ./include.tcl
global alphabet
global errorCode
@@ -29,50 +35,84 @@ proc test067 { method {ndups 1000} {tnum 67} args } {
set args [convert_args $method $args]
set omethod [convert_method $method]
+ set txn ""
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ if { $ndups == 1000 } {
+ set ndups 100
+ }
+ }
+ set testdir [get_home $env]
}
- puts "Test0$tnum:\
- $method ($args) Partial puts on near-empty duplicate pages."
+ cleanup $testdir $env
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
- puts "\tTest0$tnum: skipping for method $method."
+ puts "\tTest$tnum: skipping for method $method."
return
}
+ puts "Test$tnum:\
+ $method ($args) Partial puts on near-empty duplicate pages."
+
foreach dupopt { "-dup" "-dup -dupsort" } {
+ #
+ # Testdir might get reset from the env's home dir back
+ # to the default if this calls something that sources
+ # include.tcl, since testdir is a global. Set it correctly
+ # here each time through the loop.
+ #
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644 \
+ set db [eval {berkdb_open -create -mode 0644 \
$omethod} $args $dupopt {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
- puts "\tTest0$tnum.a ($dupopt): Put $ndups duplicates."
+ puts "\tTest$tnum.a ($dupopt): Put $ndups duplicates."
set key "key_test$tnum"
for { set ndx 0 } { $ndx < $ndups } { incr ndx } {
set data $alphabet$ndx
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
# No need for pad_data since we're skipping recno.
- set ret [eval {$db put} $key $data]
+ set ret [eval {$db put} $txn {$key $data}]
error_check_good put($key,$data) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# Sync so we can inspect database if the next section bombs.
error_check_good db_sync [$db sync] 0
- puts "\tTest0$tnum.b ($dupopt):\
+ puts "\tTest$tnum.b ($dupopt):\
Deleting dups (last first), overwriting each."
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good cursor_create [is_valid_cursor $dbc $db] TRUE
set count 0
@@ -109,6 +149,9 @@ proc test067 { method {ndups 1000} {tnum 67} args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
}
diff --git a/db/test/test068.tcl b/db/test/test068.tcl
index 587cd2078..5acda82c2 100644
--- a/db/test/test068.tcl
+++ b/db/test/test068.tcl
@@ -1,46 +1,55 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test068.tcl,v 11.11 2000/08/25 14:21:58 sue Exp $
+# $Id: test068.tcl,v 11.19 2003/01/08 05:54:01 bostic Exp $
#
-# DB Test 68: Test of DB_BEFORE and DB_AFTER and partial puts.
-# Make sure DB_BEFORE and DB_AFTER work properly with partial puts,
-# and check that they return EINVAL if DB_DUPSORT is set or if DB_DUP is not.
+# TEST test068
+# TEST Test of DB_BEFORE and DB_AFTER with partial puts.
+# TEST Make sure DB_BEFORE and DB_AFTER work properly with partial puts, and
+# TEST check that they return EINVAL if DB_DUPSORT is set or if DB_DUP is not.
proc test068 { method args } {
source ./include.tcl
global alphabet
global errorCode
- set tnum 68
- set nkeys 1000
+ set tnum "068"
set args [convert_args $method $args]
set omethod [convert_method $method]
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ set nkeys 1000
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ set nkeys 100
+ }
+ set testdir [get_home $env]
}
- puts "Test0$tnum:\
+ puts "Test$tnum:\
$method ($args) Test of DB_BEFORE/DB_AFTER and partial puts."
if { [is_record_based $method] == 1 } {
- puts "\tTest0$tnum: skipping for method $method."
+ puts "\tTest$tnum: skipping for method $method."
return
}
# Create a list of $nkeys words to insert into db.
- puts "\tTest0$tnum.a: Initialize word list."
+ puts "\tTest$tnum.a: Initialize word list."
+ set txn ""
set wordlist {}
set count 0
set did [open $dict]
@@ -62,17 +71,33 @@ proc test068 { method args } {
}
foreach dupopt $dupoptlist {
+ #
+ # Testdir might be reset in the loop by some proc sourcing
+ # include.tcl. Reset it to the env's home here, before
+ # cleanup.
+ if { $env != "NULL" } {
+ set testdir [get_home $env]
+ }
cleanup $testdir $env
- set db [eval {berkdb_open_noerr -create -truncate -mode 0644 \
+ set db [eval {berkdb_open_noerr -create -mode 0644 \
$omethod} $args $dupopt {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
- puts "\tTest0$tnum.b ($dupopt): DB initialization: put loop."
+ puts "\tTest$tnum.b ($dupopt): DB initialization: put loop."
foreach word $wordlist {
- error_check_good db_put [$db put $word $word] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$word $word}]
+ error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- puts "\tTest0$tnum.c ($dupopt): get loop."
+ puts "\tTest$tnum.c ($dupopt): get loop."
foreach word $wordlist {
# Make sure that the Nth word has been correctly
# inserted, and also that the Nth word is the
@@ -82,10 +107,15 @@ proc test068 { method args } {
error_check_good get_key [list [list $word $word]] $dbt
}
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good cursor_open [is_valid_cursor $dbc $db] TRUE
- puts "\tTest0$tnum.d ($dupopt): DBC->put w/ DB_AFTER."
+ puts "\tTest$tnum.d ($dupopt): DBC->put w/ DB_AFTER."
# Set cursor to the first key; make sure it succeeds.
# With an unsorted wordlist, we can't be sure that the
@@ -105,22 +135,26 @@ proc test068 { method args } {
error_check_good dbc_put_after_fail $ret 1
error_check_good dbc_put_after_einval \
[is_substr $errorCode EINVAL] 1
- puts "\tTest0$tnum ($dupopt): DB_AFTER returns EINVAL."
+ puts "\tTest$tnum ($dupopt): DB_AFTER returns EINVAL."
set errorCode "NONE"
set ret [catch {eval $dbc put -before \
{-partial [list 6 0]} "before"} res]
error_check_good dbc_put_before_fail $ret 1
error_check_good dbc_put_before_einval \
[is_substr $errorCode EINVAL] 1
- puts "\tTest0$tnum ($dupopt): DB_BEFORE returns EINVAL."
- puts "\tTest0$tnum ($dupopt): Correct error returns,\
+ puts "\tTest$tnum ($dupopt): DB_BEFORE returns EINVAL."
+ puts "\tTest$tnum ($dupopt): Correct error returns,\
skipping further test."
# continue with broad foreach
+ error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
continue
}
- puts "\tTest0$tnum.e ($dupopt): DBC->put(DB_AFTER) loop."
+ puts "\tTest$tnum.e ($dupopt): DBC->put(DB_AFTER) loop."
foreach word $wordlist {
# set cursor to $word
set dbt [$dbc get -set $word]
@@ -131,7 +165,7 @@ proc test068 { method args } {
error_check_good dbc_put_after $ret 0
}
- puts "\tTest0$tnum.f ($dupopt): DBC->put(DB_BEFORE) loop."
+ puts "\tTest$tnum.f ($dupopt): DBC->put(DB_BEFORE) loop."
foreach word $wordlist {
# set cursor to $word
set dbt [$dbc get -set $word]
@@ -143,11 +177,19 @@ proc test068 { method args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
eval $db sync
- puts "\tTest0$tnum.g ($dupopt): Verify correctness."
+ puts "\tTest$tnum.g ($dupopt): Verify correctness."
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
# loop through the whole db beginning to end,
@@ -176,6 +218,9 @@ proc test068 { method args } {
incr count
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
}
diff --git a/db/test/test069.tcl b/db/test/test069.tcl
index f3b839de7..420f4d7d6 100644
--- a/db/test/test069.tcl
+++ b/db/test/test069.tcl
@@ -1,14 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test069.tcl,v 11.4 2000/02/14 03:00:21 bostic Exp $
+# $Id: test069.tcl,v 11.9 2003/01/08 05:54:01 bostic Exp $
#
-# DB Test 69: Run DB Test 67 with a small number of dups,
-# to ensure that partial puts to DB_CURRENT work correctly in
-# the absence of duplicate pages.
-
-proc test069 { method {ndups 50} {tnum 69} args } {
+# TEST test069
+# TEST Test of DB_CURRENT partial puts without duplicates-- test067 w/
+# TEST small ndups to ensure that partial puts to DB_CURRENT work
+# TEST correctly in the absence of duplicate pages.
+proc test069 { method {ndups 50} {tnum "069"} args } {
eval test067 $method $ndups $tnum $args
}
diff --git a/db/test/test070.tcl b/db/test/test070.tcl
index befec9ce1..0326cdb17 100644
--- a/db/test/test070.tcl
+++ b/db/test/test070.tcl
@@ -1,19 +1,22 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test070.tcl,v 11.18 2000/12/18 20:04:47 sue Exp $
+# $Id: test070.tcl,v 11.31 2003/09/08 18:12:56 bostic Exp $
#
-# DB Test 70: Test of DB_CONSUME.
-# Fork off six processes, four consumers and two producers.
-# The producers will each put 20000 records into a queue;
-# the consumers will each get 10000.
-# Then, verify that no record was lost or retrieved twice.
+# TEST test070
+# TEST Test of DB_CONSUME (Four consumers, 1000 items.)
+# TEST
+# TEST Fork off six processes, four consumers and two producers.
+# TEST The producers will each put 20000 records into a queue;
+# TEST the consumers will each get 10000.
+# TEST Then, verify that no record was lost or retrieved twice.
proc test070 { method {nconsumers 4} {nproducers 2} \
- {nitems 1000} {mode CONSUME } {start 0} {txn -txn} {tnum 70} args } {
+ {nitems 1000} {mode CONSUME } {start 0} {txn -txn} {tnum "070"} args } {
source ./include.tcl
global alphabet
+ global encrypt
#
# If we are using an env, then skip this test. It needs its own.
@@ -21,28 +24,32 @@ proc test070 { method {nconsumers 4} {nproducers 2} \
if { $eindex != -1 } {
incr eindex
set env [lindex $args $eindex]
- puts "Test0$tnum skipping for env $env"
+ puts "Test$tnum skipping for env $env"
return
}
set omethod [convert_method $method]
set args [convert_args $method $args]
+ if { $encrypt != 0 } {
+ puts "Test$tnum skipping for security"
+ return
+ }
- puts "Test0$tnum: $method ($args) Test of DB_$mode flag to DB->get."
+ puts "Test$tnum: $method ($args) Test of DB_$mode flag to DB->get."
puts "\tUsing $txn environment."
error_check_good enough_consumers [expr $nconsumers > 0] 1
error_check_good enough_producers [expr $nproducers > 0] 1
if { [is_queue $method] != 1 } {
- puts "\tSkipping Test0$tnum for method $method."
+ puts "\tSkipping Test$tnum for method $method."
return
}
env_cleanup $testdir
- set testfile test0$tnum.db
+ set testfile test$tnum.db
# Create environment
- set dbenv [eval {berkdb env -create $txn -home } $testdir]
+ set dbenv [eval {berkdb_env -create $txn -home } $testdir]
error_check_good dbenv_create [is_valid_env $dbenv] TRUE
# Create database
@@ -52,7 +59,7 @@ proc test070 { method {nconsumers 4} {nproducers 2} \
if { $start != 0 } {
error_check_good set_seed [$db put $start "consumer data"] 0
- puts "\tStarting at $start."
+ puts "\tTest$tnum: starting at $start."
} else {
incr start
}
@@ -86,11 +93,11 @@ proc test070 { method {nconsumers 4} {nproducers 2} \
}
# Wait for all children.
- watch_procs 10
+ watch_procs $pidlist 10
# Verify: slurp all record numbers into list, sort, and make
# sure each appears exactly once.
- puts "\tTest0$tnum: Verifying results."
+ puts "\tTest$tnum: Verifying results."
set reclist {}
for { set ndx 0 } { $ndx < $nconsumers } { incr ndx } {
set input $consumerlog$ndx
@@ -103,18 +110,27 @@ proc test070 { method {nconsumers 4} {nproducers 2} \
set sortreclist [lsort -integer $reclist]
set nitems [expr $start + $nitems]
- for { set ndx $start } { $ndx < $nitems } { incr ndx } {
+ for { set ndx $start } { $ndx < $nitems } { set ndx [expr $ndx + 1] } {
+ # Wrap if $ndx goes beyond 32 bits because our
+ # recno wrapped if it did.
+ if { $ndx > 0xffffffff } {
+ set cmp [expr $ndx - 0xffffffff]
+ } else {
+ set cmp [expr $ndx + 0]
+ }
# Skip 0 if we are wrapping around
- if { $ndx == 0 } {
+ if { $cmp == 0 } {
incr ndx
incr nitems
+ incr cmp
}
# Be sure to convert ndx to a number before comparing.
- error_check_good pop_num [lindex $sortreclist 0] [expr $ndx + 0]
+ error_check_good pop_num [lindex $sortreclist 0] $cmp
set sortreclist [lreplace $sortreclist 0 0]
}
error_check_good list_ends_empty $sortreclist {}
+ error_check_good db_close [$db close] 0
error_check_good dbenv_close [$dbenv close] 0
- puts "\tTest0$tnum completed successfully."
+ puts "\tTest$tnum completed successfully."
}
diff --git a/db/test/test071.tcl b/db/test/test071.tcl
index 376c902ec..9a760ed12 100644
--- a/db/test/test071.tcl
+++ b/db/test/test071.tcl
@@ -1,14 +1,15 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test071.tcl,v 11.6 2000/12/01 04:28:36 ubell Exp $
+# $Id: test071.tcl,v 11.13 2003/05/19 17:33:16 bostic Exp $
#
-# DB Test 71: Test of DB_CONSUME.
-# This is DB Test 70, with one consumer, one producers, and 10000 items.
-proc test071 { method {nconsumers 1} {nproducers 1}\
- {nitems 10000} {mode CONSUME} {start 0 } {txn -txn} {tnum 71} args } {
+# TEST test071
+# TEST Test of DB_CONSUME (One consumer, 10000 items.)
+# TEST This is DB Test 70, with one consumer, one producers, and 10000 items.
+proc test071 { method {nconsumers 1} {nproducers 1} {nitems 10000} \
+ {mode CONSUME} {start 0 } {txn -txn} {tnum "071"} args } {
eval test070 $method \
$nconsumers $nproducers $nitems $mode $start $txn $tnum $args
diff --git a/db/test/test072.tcl b/db/test/test072.tcl
index 3ca7415a2..384ef4766 100644
--- a/db/test/test072.tcl
+++ b/db/test/test072.tcl
@@ -1,29 +1,36 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test072.tcl,v 11.13 2000/12/11 17:24:55 sue Exp $
+# $Id: test072.tcl,v 11.31 2003/09/04 23:41:17 bostic Exp $
#
-# DB Test 72: Test of cursor stability when duplicates are moved off-page.
-proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
+# TEST test072
+# TEST Test of cursor stability when duplicates are moved off-page.
+proc test072 { method {pagesize 512} {ndups 20} {tnum "072"} args } {
source ./include.tcl
global alphabet
set omethod [convert_method $method]
set args [convert_args $method $args]
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
- # If we are using an env, then testfile should just be the db name.
- # Otherwise it is the test directory and the name.
+ # If we are using an env, then testfile name should just be
+ # the db name. Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set basename $testdir/test$tnum
set env NULL
} else {
- set testfile test0$tnum.db
+ set basename test$tnum
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
@@ -37,9 +44,7 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
set predatum "1234567890"
set postdatum "0987654321"
- append args " -pagesize $pagesize "
-
- puts -nonewline "Test0$tnum $omethod ($args): "
+ puts -nonewline "Test$tnum $omethod ($args): "
if { [is_record_based $method] || [is_rbtree $method] } {
puts "Skipping for method $method."
return
@@ -49,61 +54,77 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
}
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
- puts "Test0$tnum: skipping for specific pagesizes"
+ puts "Test$tnum: skipping for specific pagesizes"
return
}
- foreach dupopt { "-dup" "-dup -dupsort" } {
- set db [eval {berkdb_open -create -truncate -mode 0644} \
- $omethod $args $dupopt $testfile]
+ append args " -pagesize $pagesize "
+ set txn ""
+
+ set dlist [list "-dup" "-dup -dupsort"]
+ set testid 0
+ foreach dupopt $dlist {
+ incr testid
+ set duptestfile $basename$testid.db
+ set db [eval {berkdb_open -create -mode 0644} \
+ $omethod $args $dupopt {$duptestfile}]
error_check_good "db open" [is_valid_db $db] TRUE
puts \
-"\tTest0$tnum.a: ($dupopt) Set up surrounding keys and cursors."
- error_check_good pre_put [$db put $prekey $predatum] 0
- error_check_good post_put [$db put $postkey $postdatum] 0
- set precursor [$db cursor]
+"\tTest$tnum.a: ($dupopt) Set up surrounding keys and cursors."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$prekey $predatum}]
+ error_check_good pre_put $ret 0
+ set ret [eval {$db put} $txn {$postkey $postdatum}]
+ error_check_good post_put $ret 0
+
+ set precursor [eval {$db cursor} $txn]
error_check_good precursor [is_valid_cursor $precursor \
$db] TRUE
- set postcursor [$db cursor]
+ set postcursor [eval {$db cursor} $txn]
error_check_good postcursor [is_valid_cursor $postcursor \
$db] TRUE
error_check_good preset [$precursor get -set $prekey] \
[list [list $prekey $predatum]]
error_check_good postset [$postcursor get -set $postkey] \
[list [list $postkey $postdatum]]
-
- puts "\tTest0$tnum.b: Put/create cursor/verify all cursor loop."
-
+
+ puts "\tTest$tnum.b: Put/create cursor/verify all cursor loop."
+
for { set i 0 } { $i < $ndups } { incr i } {
set datum [format "%4d$alphabet" [expr $i + 1000]]
set data($i) $datum
-
+
# Uncomment these lines to see intermediate steps.
- error_check_good db_sync($i) [$db sync] 0
- error_check_good db_dump($i) \
- [catch {exec $util_path/db_dump \
- -da $testfile > TESTDIR/out.$i}] 0
-
- error_check_good "db put ($i)" [$db put $key $datum] 0
-
- set dbc($i) [$db cursor]
+ # error_check_good db_sync($i) [$db sync] 0
+ # error_check_good db_dump($i) \
+ # [catch {exec $util_path/db_dump \
+ # -da $duptestfile > $testdir/out.$i}] 0
+
+ set ret [eval {$db put} $txn {$key $datum}]
+ error_check_good "db put ($i)" $ret 0
+
+ set dbc($i) [eval {$db cursor} $txn]
error_check_good "db cursor ($i)"\
[is_valid_cursor $dbc($i) $db] TRUE
-
+
error_check_good "dbc get -get_both ($i)"\
[$dbc($i) get -get_both $key $datum]\
[list [list $key $datum]]
-
+
for { set j 0 } { $j < $i } { incr j } {
set dbt [$dbc($j) get -current]
set k [lindex [lindex $dbt 0] 0]
set d [lindex [lindex $dbt 0] 1]
-
+
#puts "cursor $j after $i: $d"
-
+
eval {$db sync}
-
+
error_check_good\
"cursor $j key correctness after $i puts" \
$k $key
@@ -111,8 +132,8 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
"cursor $j data correctness after $i puts" \
$d $data($j)
}
-
- # Check correctness of pre- and post- cursors. Do an
+
+ # Check correctness of pre- and post- cursors. Do an
# error_check_good on the lengths first so that we don't
# spew garbage as the "got" field and screw up our
# terminal. (It's happened here.)
@@ -121,7 +142,7 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
error_check_good \
"key earlier cursor correctness after $i puts" \
[string length [lindex [lindex $pre_dbt 0] 0]] \
- [string length $prekey]
+ [string length $prekey]
error_check_good \
"data earlier cursor correctness after $i puts" \
[string length [lindex [lindex $pre_dbt 0] 1]] \
@@ -129,12 +150,11 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
error_check_good \
"key later cursor correctness after $i puts" \
[string length [lindex [lindex $post_dbt 0] 0]] \
- [string length $postkey]
+ [string length $postkey]
error_check_good \
"data later cursor correctness after $i puts" \
[string length [lindex [lindex $post_dbt 0] 1]]\
[string length $postdatum]
-
error_check_good \
"earlier cursor correctness after $i puts" \
@@ -143,38 +163,40 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
"later cursor correctness after $i puts" \
$post_dbt [list [list $postkey $postdatum]]
}
-
- puts "\tTest0$tnum.c: Reverse Put/create cursor/verify all cursor loop."
+
+ puts "\tTest$tnum.c: Reverse Put/create cursor/verify all cursor loop."
set end [expr $ndups * 2 - 1]
- for { set i $end } { $i > $ndups } { set i [expr $i - 1] } {
+ for { set i $end } { $i >= $ndups } { set i [expr $i - 1] } {
set datum [format "%4d$alphabet" [expr $i + 1000]]
set data($i) $datum
-
+
# Uncomment these lines to see intermediate steps.
- error_check_good db_sync($i) [$db sync] 0
- error_check_good db_dump($i) \
- [catch {exec $util_path/db_dump \
- -da $testfile > TESTDIR/out.$i}] 0
-
- error_check_good "db put ($i)" [$db put $key $datum] 0
-
- set dbc($i) [$db cursor]
+ # error_check_good db_sync($i) [$db sync] 0
+ # error_check_good db_dump($i) \
+ # [catch {exec $util_path/db_dump \
+ # -da $duptestfile > $testdir/out.$i}] 0
+
+ set ret [eval {$db put} $txn {$key $datum}]
+ error_check_good "db put ($i)" $ret 0
+
+ error_check_bad dbc($i)_stomped [info exists dbc($i)] 1
+ set dbc($i) [eval {$db cursor} $txn]
error_check_good "db cursor ($i)"\
[is_valid_cursor $dbc($i) $db] TRUE
-
+
error_check_good "dbc get -get_both ($i)"\
[$dbc($i) get -get_both $key $datum]\
[list [list $key $datum]]
-
+
for { set j $i } { $j < $end } { incr j } {
set dbt [$dbc($j) get -current]
set k [lindex [lindex $dbt 0] 0]
set d [lindex [lindex $dbt 0] 1]
-
+
#puts "cursor $j after $i: $d"
-
+
eval {$db sync}
-
+
error_check_good\
"cursor $j key correctness after $i puts" \
$k $key
@@ -182,8 +204,8 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
"cursor $j data correctness after $i puts" \
$d $data($j)
}
-
- # Check correctness of pre- and post- cursors. Do an
+
+ # Check correctness of pre- and post- cursors. Do an
# error_check_good on the lengths first so that we don't
# spew garbage as the "got" field and screw up our
# terminal. (It's happened here.)
@@ -192,7 +214,7 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
error_check_good \
"key earlier cursor correctness after $i puts" \
[string length [lindex [lindex $pre_dbt 0] 0]] \
- [string length $prekey]
+ [string length $prekey]
error_check_good \
"data earlier cursor correctness after $i puts" \
[string length [lindex [lindex $pre_dbt 0] 1]] \
@@ -200,12 +222,11 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
error_check_good \
"key later cursor correctness after $i puts" \
[string length [lindex [lindex $post_dbt 0] 0]] \
- [string length $postkey]
+ [string length $postkey]
error_check_good \
"data later cursor correctness after $i puts" \
[string length [lindex [lindex $post_dbt 0] 1]]\
[string length $postdatum]
-
error_check_good \
"earlier cursor correctness after $i puts" \
@@ -216,10 +237,16 @@ proc test072 { method {pagesize 512} {ndups 20} {tnum 72} args } {
}
# Close cursors.
- puts "\tTest0$tnum.d: Closing cursors."
- for { set i 0 } { $i < $ndups } { incr i } {
+ puts "\tTest$tnum.d: Closing cursors."
+ for { set i 0 } { $i <= $end } { incr i } {
error_check_good "dbc close ($i)" [$dbc($i) close] 0
}
+ unset dbc
+ error_check_good precursor_close [$precursor close] 0
+ error_check_good postcursor_close [$postcursor close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good "db close" [$db close] 0
}
}
diff --git a/db/test/test073.tcl b/db/test/test073.tcl
index 12a48b0e4..a7789f0c5 100644
--- a/db/test/test073.tcl
+++ b/db/test/test073.tcl
@@ -1,50 +1,58 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test073.tcl,v 11.17 2000/12/11 17:24:55 sue Exp $
+# $Id: test073.tcl,v 11.25 2003/01/08 05:54:02 bostic Exp $
#
-# DB Test 73: Test of cursor stability on duplicate pages.
-# Does the following:
-# a. Initialize things by DB->putting ndups dups and
-# setting a reference cursor to point to each.
-# b. c_put ndups dups (and correspondingly expanding
-# the set of reference cursors) after the last one, making sure
-# after each step that all the reference cursors still point to
-# the right item.
-# c. Ditto, but before the first one.
-# d. Ditto, but after each one in sequence first to last.
-# e. Ditto, but after each one in sequence from last to first.
-# occur relative to the new datum)
-# f. Ditto for the two sequence tests, only doing a
-# DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
-# new one.
-proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
+# TEST test073
+# TEST Test of cursor stability on duplicate pages.
+# TEST
+# TEST Does the following:
+# TEST a. Initialize things by DB->putting ndups dups and
+# TEST setting a reference cursor to point to each.
+# TEST b. c_put ndups dups (and correspondingly expanding
+# TEST the set of reference cursors) after the last one, making sure
+# TEST after each step that all the reference cursors still point to
+# TEST the right item.
+# TEST c. Ditto, but before the first one.
+# TEST d. Ditto, but after each one in sequence first to last.
+# TEST e. Ditto, but after each one in sequence from last to first.
+# TEST occur relative to the new datum)
+# TEST f. Ditto for the two sequence tests, only doing a
+# TEST DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
+# TEST new one.
+proc test073 { method {pagesize 512} {ndups 50} {tnum "073"} args } {
source ./include.tcl
global alphabet
set omethod [convert_method $method]
set args [convert_args $method $args]
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
set key "the key"
+ set txn ""
-
- puts -nonewline "Test0$tnum $omethod ($args): "
+ puts -nonewline "Test$tnum $omethod ($args): "
if { [is_record_based $method] || [is_rbtree $method] } {
puts "Skipping for method $method."
return
@@ -60,28 +68,42 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
append args " -pagesize $pagesize -dup"
set db [eval {berkdb_open \
- -create -truncate -mode 0644} $omethod $args $testfile]
+ -create -mode 0644} $omethod $args $testfile]
error_check_good "db open" [is_valid_db $db] TRUE
# Number of outstanding keys.
set keys 0
- puts "\tTest0$tnum.a.1: Initializing put loop; $ndups dups, short data."
+ puts "\tTest$tnum.a.1: Initializing put loop; $ndups dups, short data."
for { set i 0 } { $i < $ndups } { incr i } {
set datum [makedatum_t73 $i 0]
- error_check_good "db put ($i)" [$db put $key $datum] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $datum}]
+ error_check_good "db put ($i)" $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
set is_long($i) 0
incr keys
}
- puts "\tTest0$tnum.a.2: Initializing cursor get loop; $keys dups."
+ puts "\tTest$tnum.a.2: Initializing cursor get loop; $keys dups."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
for { set i 0 } { $i < $keys } { incr i } {
set datum [makedatum_t73 $i 0]
- set dbc($i) [$db cursor]
+ set dbc($i) [eval {$db cursor} $txn]
error_check_good "db cursor ($i)"\
[is_valid_cursor $dbc($i) $db] TRUE
error_check_good "dbc get -get_both ($i)"\
@@ -89,7 +111,7 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
[list [list $key $datum]]
}
- puts "\tTest0$tnum.b: Cursor put (DB_KEYLAST); $ndups new dups,\
+ puts "\tTest$tnum.b: Cursor put (DB_KEYLAST); $ndups new dups,\
short data."
for { set i 0 } { $i < $ndups } { incr i } {
@@ -97,7 +119,7 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
# to be added (since they start from zero)
set datum [makedatum_t73 $keys 0]
- set curs [$db cursor]
+ set curs [eval {$db cursor} $txn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
TRUE
error_check_good "c_put(DB_KEYLAST, $keys)"\
@@ -110,7 +132,7 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
verify_t73 is_long dbc $keys $key
}
- puts "\tTest0$tnum.c: Cursor put (DB_KEYFIRST); $ndups new dups,\
+ puts "\tTest$tnum.c: Cursor put (DB_KEYFIRST); $ndups new dups,\
short data."
for { set i 0 } { $i < $ndups } { incr i } {
@@ -118,7 +140,7 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
# to be added (since they start from zero)
set datum [makedatum_t73 $keys 0]
- set curs [$db cursor]
+ set curs [eval {$db cursor} $txn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
TRUE
error_check_good "c_put(DB_KEYFIRST, $keys)"\
@@ -131,14 +153,14 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
verify_t73 is_long dbc $keys $key
}
- puts "\tTest0$tnum.d: Cursor put (DB_AFTER) first to last;\
+ puts "\tTest$tnum.d: Cursor put (DB_AFTER) first to last;\
$keys new dups, short data"
# We want to add a datum after each key from 0 to the current
# value of $keys, which we thus need to save.
set keysnow $keys
for { set i 0 } { $i < $keysnow } { incr i } {
set datum [makedatum_t73 $keys 0]
- set curs [$db cursor]
+ set curs [eval {$db cursor} $txn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
TRUE
@@ -157,12 +179,12 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
verify_t73 is_long dbc $keys $key
}
- puts "\tTest0$tnum.e: Cursor put (DB_BEFORE) last to first;\
+ puts "\tTest$tnum.e: Cursor put (DB_BEFORE) last to first;\
$keys new dups, short data"
for { set i [expr $keys - 1] } { $i >= 0 } { incr i -1 } {
set datum [makedatum_t73 $keys 0]
- set curs [$db cursor]
+ set curs [eval {$db cursor} $txn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
TRUE
@@ -184,13 +206,13 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
}
verify_t73 is_long dbc $keys $key
- puts "\tTest0$tnum.f: Cursor put (DB_CURRENT), first to last,\
+ puts "\tTest$tnum.f: Cursor put (DB_CURRENT), first to last,\
growing $keys data."
set keysnow $keys
for { set i 0 } { $i < $keysnow } { incr i } {
set olddatum [makedatum_t73 $i 0]
set newdatum [makedatum_t73 $i 1]
- set curs [$db cursor]
+ set curs [eval {$db cursor} $txn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
TRUE
@@ -211,10 +233,13 @@ proc test073 { method {pagesize 512} {ndups 50} {tnum 73} args } {
verify_t73 is_long dbc $keys $key
# Close cursors.
- puts "\tTest0$tnum.g: Closing cursors."
+ puts "\tTest$tnum.g: Closing cursors."
for { set i 0 } { $i < $keys } { incr i } {
error_check_good "dbc close ($i)" [$dbc($i) close] 0
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good "db close" [$db close] 0
}
diff --git a/db/test/test074.tcl b/db/test/test074.tcl
index ddc5f1642..26b2a9303 100644
--- a/db/test/test074.tcl
+++ b/db/test/test074.tcl
@@ -1,12 +1,13 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test074.tcl,v 11.10 2000/08/25 14:21:58 sue Exp $
+# $Id: test074.tcl,v 11.19 2003/01/08 05:54:02 bostic Exp $
#
-# DB Test 74: Test of DB_NEXT_NODUP.
-proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} args } {
+# TEST test074
+# TEST Test of DB_NEXT_NODUP.
+proc test074 { method {dir -nextnodup} {nitems 100} {tnum "074"} args } {
source ./include.tcl
global alphabet
global rand_init
@@ -24,32 +25,39 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
set globaldata [repeat $alphabet 4]
}
- puts "Test0$tnum $omethod ($args): Test of $dir"
+ puts "Test$tnum $omethod ($args): Test of $dir"
# First, test non-dup (and not-very-interesting) case with
# all db types.
- puts "\tTest0$tnum.a: No duplicates."
+ puts "\tTest$tnum.a: No duplicates."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum-nodup.db
+ set testfile $testdir/test$tnum-nodup.db
set env NULL
} else {
- set testfile test0$tnum-nodup.db
+ set testfile test$tnum-nodup.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644} $omethod\
+ set db [eval {berkdb_open -create -mode 0644} $omethod\
$args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
+ set txn ""
# Insert nitems items.
- puts "\t\tTest0$tnum.a.1: Put loop."
+ puts "\t\tTest$tnum.a.1: Put loop."
for {set i 1} {$i <= $nitems} {incr i} {
#
# If record based, set key to $i * 2 to leave
@@ -61,14 +69,28 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
set key "key$i"
}
set data "$globaldata$i"
- error_check_good put($i) [$db put $key\
- [chop_data $method $data]] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key \
+ [chop_data $method $data]}]
+ error_check_good put($i) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- puts "\t\tTest0$tnum.a.2: Get($dir)"
+ puts "\t\tTest$tnum.a.2: Get($dir)"
# foundarray($i) is set when key number i is found in the database
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
# Initialize foundarray($i) to zero for all $i
@@ -96,32 +118,43 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
set foundarray($num) 1
}
- puts "\t\tTest0$tnum.a.3: Final key."
+ puts "\t\tTest$tnum.a.3: Final key."
error_check_good last_db_get [$dbc get $dir] [list]
- puts "\t\tTest0$tnum.a.4: Verify loop."
+ puts "\t\tTest$tnum.a.4: Verify loop."
for { set i 1 } { $i <= $nitems } { incr i } {
error_check_good found_key($i) $foundarray($i) 1
}
error_check_good dbc_close(nodup) [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
# If we are a method that doesn't allow dups, verify that
# we get an empty list if we try to use DB_NEXT_DUP
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
- puts "\t\tTest0$tnum.a.5: Check DB_NEXT_DUP for $method."
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ puts "\t\tTest$tnum.a.5: Check DB_NEXT_DUP for $method."
+ set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
set dbt [$dbc get $dir]
error_check_good $method:nextdup [$dbc get -nextdup] [list]
error_check_good dbc_close(nextdup) [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
error_check_good db_close(nodup) [$db close] 0
# Quit here if we're a method that won't allow dups.
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
- puts "\tTest0$tnum: Skipping remainder for method $method."
+ puts "\tTest$tnum: Skipping remainder for method $method."
return
}
@@ -131,19 +164,19 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
# If we are using an env, then testfile should just be the
# db name. Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum$opt.db
+ set testfile $testdir/test$tnum$opt.db
} else {
- set testfile test0$tnum$opt.db
+ set testfile test$tnum$opt.db
}
if { [string compare $opt "-dupsort"] == 0 } {
set opt "-dup -dupsort"
}
- puts "\tTest0$tnum.b: Duplicates ($opt)."
+ puts "\tTest$tnum.b: Duplicates ($opt)."
- puts "\t\tTest0$tnum.b.1 ($opt): Put loop."
- set db [eval {berkdb_open -create -truncate -mode 0644}\
+ puts "\t\tTest$tnum.b.1 ($opt): Put loop."
+ set db [eval {berkdb_open -create -mode 0644}\
$opt $omethod $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
@@ -160,8 +193,17 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
set data "$globaldata$j"
}
- error_check_good put($i,$j) \
- [$db put $key $data] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn \
+ [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $data}]
+ error_check_good put($i,$j) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
@@ -173,9 +215,14 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
# Get loop--after each get, move forward a random increment
# within the duplicate set.
- puts "\t\tTest0$tnum.b.2 ($opt): Get loop."
+ puts "\t\tTest$tnum.b.2 ($opt): Get loop."
set one "001"
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good dbc($opt) [is_valid_cursor $dbc $db] TRUE
for { set i 1 } { $i <= $nitems } { incr i } {
set dbt [$dbc get $dir]
@@ -206,16 +253,19 @@ proc test074 { method {dir -nextnodup} {pagesize 512} {nitems 100} {tnum 74} arg
}
}
- puts "\t\tTest0$tnum.b.3 ($opt): Final key."
+ puts "\t\tTest$tnum.b.3 ($opt): Final key."
error_check_good last_db_get($opt) [$dbc get $dir] [list]
# Verify
- puts "\t\tTest0$tnum.b.4 ($opt): Verify loop."
+ puts "\t\tTest$tnum.b.4 ($opt): Verify loop."
for { set i 1 } { $i <= $nitems } { incr i } {
error_check_good found_key($i) $foundarray($i) 1
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
}
diff --git a/db/test/test075.tcl b/db/test/test075.tcl
index 2aa0e1e25..0380686e1 100644
--- a/db/test/test075.tcl
+++ b/db/test/test075.tcl
@@ -1,195 +1,205 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test075.tcl,v 11.9 2000/08/25 14:21:58 sue Exp $
+# $Id: test075.tcl,v 11.23 2003/01/08 05:54:03 bostic Exp $
#
-# DB Test 75 (replacement)
-# Test the DB->rename method.
-proc test075 { method { tnum 75 } args } {
+# TEST test075
+# TEST Test of DB->rename().
+# TEST (formerly test of DB_TRUNCATE cached page invalidation [#1487])
+proc test075 { method { tnum "075" } args } {
+ global encrypt
global errorCode
+ global errorInfo
+
source ./include.tcl
set omethod [convert_method $method]
set args [convert_args $method $args]
- puts "Test0$tnum: $method ($args): Test of DB->rename()"
-
- # If we are using an env, then testfile should just be the db name.
- # Otherwise it is the test directory and the name.
+ puts "Test$tnum: $method ($args): Test of DB->rename()"
+ # If we are using an env, then testfile should just be the
+ # db name. Otherwise it is the test directory and the name.
set eindex [lsearch -exact $args "-env"]
- if { $eindex == -1 } {
- set oldfile $testdir/test0$tnum-old.db
- set newfile $testdir/test0$tnum.db
- set env NULL
- set renargs ""
- } else {
- set oldfile test0$tnum-old.db
- set newfile test0$tnum.db
- # File existence checks won't work in an env, since $oldfile
- # and $newfile won't be in the current working directory.
- # We use this to skip them, and turn our secondary check
- # (opening the dbs and seeing that all is well) into the main
- # one.
+ if { $eindex != -1 } {
+ # If we are using an env, then skip this test.
+ # It needs its own.
incr eindex
set env [lindex $args $eindex]
- set renargs " -env $env"
- }
-
- # Make sure we're starting from a clean slate.
- cleanup $testdir $env
- if { $env == "NULL" } {
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 1
- }
-
- puts "\tTest0$tnum.a: Create/rename file"
- puts "\t\tTest0$tnum.a.1: create"
- set db [eval {berkdb_open -create -mode 0644} $omethod $args $oldfile]
- error_check_good dbopen [is_valid_db $db] TRUE
-
- if { $env == "NULL" } {
- error_check_bad "$oldfile exists" [file exists $oldfile] 0
- error_check_bad "$newfile exists" [file exists $newfile] 1
- }
-
- # The nature of the key and data are unimportant; use numeric key
- # so record-based methods don't need special treatment.
- set key 1
- set data [pad_data $method data]
-
- error_check_good dbput [$db put $key $data] 0
- error_check_good dbclose [$db close] 0
-
- puts "\t\tTest0$tnum.a.2: rename"
- if { $env == "NULL" } {
- error_check_bad "$oldfile exists" [file exists $oldfile] 0
- error_check_bad "$newfile exists" [file exists $newfile] 1
- }
- error_check_good rename_file [eval {berkdb dbrename}\
- $renargs $oldfile $newfile] 0
- if { $env == "NULL" } {
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 0
+ puts "Skipping test075 for env $env"
+ return
}
-
- puts "\t\tTest0$tnum.a.3: check"
- # Open again with create to make sure we're not caching or anything
- # silly. In the normal case (no env), we already know the file doesn't
- # exist.
- set odb [eval {berkdb_open -create -mode 0644} $omethod $args $oldfile]
- set ndb [eval {berkdb_open -create -mode 0644} $omethod $args $newfile]
- error_check_good odb_open [is_valid_db $odb] TRUE
- error_check_good ndb_open [is_valid_db $ndb] TRUE
-
- set odbt [$odb get $key]
- set ndbt [$ndb get $key]
-
- # The DBT from the "old" database should be empty, not the "new" one.
- error_check_good odbt_empty [llength $odbt] 0
- error_check_bad ndbt_empty [llength $ndbt] 0
-
- error_check_good ndbt [lindex [lindex $ndbt 0] 1] $data
-
- error_check_good odb_close [$odb close] 0
- error_check_good ndb_close [$ndb close] 0
-
- if { $env != "NULL" } {
- puts "\tTest0$tnum: External environment present; \
- skipping remainder"
+ if { $encrypt != 0 } {
+ puts "Skipping test075 for security"
return
}
- # Now there's both an old and a new. Rename the "new" to the "old"
- # and make sure that fails.
- #
- # XXX Ideally we'd do this test even when there's an external
- # environment, but that env has errpfx/errfile set now. :-(
- puts "\tTest0$tnum.b: Make sure rename fails instead of overwriting"
- set ret [catch {eval {berkdb dbrename} $renargs $newfile $oldfile} res]
- error_check_bad rename_overwrite $ret 0
- error_check_good rename_overwrite_ret [is_substr $errorCode EEXIST] 1
-
- # Verify and then start over from a clean slate.
- verify_dir $testdir "\tTest0$tnum.c: "
- cleanup $testdir $env
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 1
-
- set oldfile test0$tnum-old.db
- set newfile test0$tnum.db
-
- puts "\tTest0$tnum.d: Create/rename file in environment"
-
- set env [berkdb env -create -home $testdir]
- error_check_good env_open [is_valid_env $env] TRUE
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 1
-
- puts "\t\tTest0$tnum.d.1: create"
- set db [eval {berkdb_open -create -mode 0644} -env $env\
- $omethod $args $oldfile]
- error_check_good dbopen [is_valid_db $db] TRUE
-
- # We need to make sure that it didn't create/rename into the
- # current directory.
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 1
- error_check_bad "$testdir/$oldfile exists"\
- [file exists $testdir/$oldfile] 0
- error_check_bad "$testdir/$newfile exists"\
- [file exists $testdir/$newfile] 1
-
- error_check_good dbput [$db put $key $data] 0
- error_check_good dbclose [$db close] 0
-
- puts "\t\tTest0$tnum.d.2: rename"
-
- error_check_good rename_file [berkdb dbrename -env $env\
- $oldfile $newfile] 0
- error_check_bad "$oldfile exists" [file exists $oldfile] 1
- error_check_bad "$newfile exists" [file exists $newfile] 1
- error_check_bad "$testdir/$oldfile exists"\
- [file exists $testdir/$oldfile] 1
- error_check_bad "$testdir/$newfile exists"\
- [file exists $testdir/$newfile] 0
-
- puts "\t\tTest0$tnum.d.3: check"
- # Open again with create to make sure we're not caching or anything
- # silly.
- set odb [eval {berkdb_open -create -mode 0644} -env $env\
- $omethod $args $oldfile]
- set ndb [eval {berkdb_open -create -mode 0644} -env $env\
- $omethod $args $newfile]
- error_check_good odb_open [is_valid_db $odb] TRUE
- error_check_good ndb_open [is_valid_db $ndb] TRUE
-
- set odbt [$odb get $key]
- set ndbt [$ndb get $key]
-
- # The DBT from the "old" database should be empty, not the "new" one.
- error_check_good odbt_empty [llength $odbt] 0
- error_check_bad ndbt_empty [llength $ndbt] 0
-
- error_check_good ndbt [lindex [lindex $ndbt 0] 1] $data
-
- error_check_good odb_close [$odb close] 0
- error_check_good ndb_close [$ndb close] 0
-
- # XXX
- # We need to close and reopen the env since berkdb_open has
- # set its errfile/errpfx, and we can't unset that.
- error_check_good env_close [$env close] 0
- set env [berkdb env -home $testdir]
- error_check_good env_open2 [is_valid_env $env] TRUE
-
- puts "\tTest0$tnum.e:\
- Make sure rename fails instead of overwriting in env"
- set ret [catch {eval {berkdb dbrename} -env $env $newfile $oldfile} res]
- error_check_bad rename_overwrite $ret 0
- error_check_good rename_overwrite_ret [is_substr $errorCode EEXIST] 1
-
- error_check_good env_close [$env close] 0
-
- puts "\tTest0$tnum succeeded."
+ # Define absolute pathnames
+ set curdir [pwd]
+ cd $testdir
+ set fulldir [pwd]
+ cd $curdir
+ set reldir $testdir
+
+ # Set up absolute and relative pathnames for test
+ set paths [list $fulldir $reldir]
+ foreach path $paths {
+ puts "\tTest$tnum: starting test of $path path"
+ set oldfile $path/test$tnum-old.db
+ set newfile $path/test$tnum.db
+ set env NULL
+ set envargs ""
+
+ # Loop through test using the following rename options
+ # 1. no environment, not in transaction
+ # 2. with environment, not in transaction
+ # 3. rename with auto-commit
+ # 4. rename in committed transaction
+ # 5. rename in aborted transaction
+
+ foreach op "noenv env auto commit abort" {
+
+ puts "\tTest$tnum.a: Create/rename file with $op"
+
+ # Make sure we're starting with a clean slate.
+
+ if { $op == "noenv" } {
+ cleanup $path $env
+ if { $env == "NULL" } {
+ error_check_bad "$oldfile exists" \
+ [file exists $oldfile] 1
+ error_check_bad "$newfile exists" \
+ [file exists $newfile] 1
+ }
+ }
+
+ if { $op == "env" } {
+ env_cleanup $path
+ set env [berkdb_env -create -home $path]
+ set envargs "-env $env"
+ error_check_good env_open [is_valid_env $env] TRUE
+ }
+
+ if { $op == "auto" || $op == "commit" || $op == "abort" } {
+ env_cleanup $path
+ set env [berkdb_env -create -home $path -txn]
+ set envargs "-env $env"
+ error_check_good env_open [is_valid_env $env] TRUE
+ }
+
+ puts "\t\tTest$tnum.a.1: create"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $omethod $envargs $args $oldfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 0
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 1
+ }
+
+ # The nature of the key and data are unimportant;
+ # use numeric key to record-based methods don't need
+ # special treatment.
+ set key 1
+ set data [pad_data $method data]
+
+ error_check_good dbput [$db put $key $data] 0
+ error_check_good dbclose [$db close] 0
+
+ puts "\t\tTest$tnum.a.2: rename"
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 0
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 1
+ }
+
+ # Regular renames use berkdb dbrename but transaction
+ # protected renames must use $env dbrename.
+ if { $op == "noenv" || $op == "env" } {
+ error_check_good rename_file [eval {berkdb dbrename} \
+ $envargs $oldfile $newfile] 0
+ } elseif { $op == "auto" } {
+ error_check_good rename_file [eval {$env dbrename} \
+ -auto_commit $oldfile $newfile] 0
+ } else {
+ # $op is "abort" or "commit"
+ set txn [$env txn]
+ error_check_good rename_file [eval {$env dbrename} \
+ -txn $txn $oldfile $newfile] 0
+ error_check_good txn_$op [$txn $op] 0
+ }
+
+ if { $env == "NULL" } {
+ error_check_bad \
+ "$oldfile exists" [file exists $oldfile] 1
+ error_check_bad \
+ "$newfile exists" [file exists $newfile] 0
+ }
+
+ puts "\t\tTest$tnum.a.3: check"
+ # Open again with create to make sure we're not caching or
+ # anything silly. In the normal case (no env), we already
+ # know the file doesn't exist.
+ set odb [eval {berkdb_open -create -mode 0644} \
+ $envargs $omethod $args $oldfile]
+ set ndb [eval {berkdb_open -create -mode 0644} \
+ $envargs $omethod $args $newfile]
+ error_check_good odb_open [is_valid_db $odb] TRUE
+ error_check_good ndb_open [is_valid_db $ndb] TRUE
+
+ # The DBT from the "old" database should be empty,
+ # not the "new" one, except in the case of an abort.
+ set odbt [$odb get $key]
+ if { $op == "abort" } {
+ error_check_good odbt_has_data [llength $odbt] 1
+ } else {
+ set ndbt [$ndb get $key]
+ error_check_good odbt_empty [llength $odbt] 0
+ error_check_bad ndbt_empty [llength $ndbt] 0
+ error_check_good ndbt [lindex \
+ [lindex $ndbt 0] 1] $data
+ }
+ error_check_good odb_close [$odb close] 0
+ error_check_good ndb_close [$ndb close] 0
+
+ # Now there's both an old and a new. Rename the
+ # "new" to the "old" and make sure that fails.
+ #
+ # XXX Ideally we'd do this test even when there's
+ # an external environment, but that env has
+ # errpfx/errfile set now. :-(
+ puts "\tTest$tnum.b: Make sure rename fails\
+ instead of overwriting"
+ if { $env != "NULL" } {
+ error_check_good env_close [$env close] 0
+ set env [berkdb_env_noerr -home $path]
+ error_check_good env_open2 \
+ [is_valid_env $env] TRUE
+ set ret [catch {eval {berkdb dbrename} \
+ -env $env $newfile $oldfile} res]
+ error_check_bad rename_overwrite $ret 0
+ error_check_good rename_overwrite_ret \
+ [is_substr $errorCode EEXIST] 1
+ }
+
+ # Verify and then start over from a clean slate.
+ verify_dir $path "\tTest$tnum.c: "
+ cleanup $path $env
+ if { $env != "NULL" } {
+ error_check_good env_close [$env close] 0
+ }
+ if { $env == "NULL" } {
+ error_check_bad "$oldfile exists" \
+ [file exists $oldfile] 1
+ error_check_bad "$newfile exists" \
+ [file exists $newfile] 1
+
+ set oldfile test$tnum-old.db
+ set newfile test$tnum.db
+ }
+ }
+ }
}
diff --git a/db/test/test076.tcl b/db/test/test076.tcl
index 13a919011..2b0135eea 100644
--- a/db/test/test076.tcl
+++ b/db/test/test076.tcl
@@ -1,17 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test076.tcl,v 1.7 2000/08/25 14:21:58 sue Exp $
+# $Id: test076.tcl,v 1.21 2003/08/27 13:57:33 sue Exp $
#
-# DB Test 76: Test creation of many small databases in an env
-proc test076 { method { ndbs 1000 } { tnum 76 } args } {
+# TEST test076
+# TEST Test creation of many small databases in a single environment. [#1528].
+proc test076 { method { ndbs 1000 } { tnum "076" } args } {
+ global is_qnx_test
source ./include.tcl
- set omethod [convert_method $method]
set args [convert_args $method $args]
-
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set omethod [convert_method $method]
if { [is_record_based $method] == 1 } {
set key ""
@@ -20,34 +23,56 @@ proc test076 { method { ndbs 1000 } { tnum 76 } args } {
}
set data "datamoredatamoredata"
- puts -nonewline "Test0$tnum $method ($args): "
- puts -nonewline "Create $ndbs"
- puts " small databases in one env."
-
# Create an env if we weren't passed one.
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
if { $eindex == -1 } {
set deleteenv 1
- set env [eval {berkdb env -create -home} $testdir \
- {-cachesize {0 102400 1}}]
+ env_cleanup $testdir
+ set env [eval {berkdb_env -create -home} $testdir $encargs]
error_check_good env [is_valid_env $env] TRUE
set args "$args -env $env"
} else {
set deleteenv 0
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ if { $ndbs == 1000 } {
+ set ndbs 100
+ }
+ }
+ set testdir [get_home $env]
+ }
+ if { $is_qnx_test && $ndbs > 100 } {
+ set ndbs 100
}
+ puts -nonewline "Test$tnum $method ($args): "
+ puts -nonewline "Create $ndbs"
+ puts " small databases in one env."
+
cleanup $testdir $env
+ set txn ""
for { set i 1 } { $i <= $ndbs } { incr i } {
- set testfile test0$tnum.$i.db
+ set testfile test$tnum.$i.db
- set db [eval {berkdb_open -create -truncate -mode 0644}\
+ set db [eval {berkdb_open -create -mode 0644}\
$args $omethod $testfile]
error_check_good db_open($i) [is_valid_db $db] TRUE
- error_check_good db_put($i) [$db put $key$i \
- [chop_data $method $data$i]] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key$i \
+ [chop_data $method $data$i]}]
+ error_check_good db_put($i) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close($i) [$db close] 0
}
@@ -55,5 +80,5 @@ proc test076 { method { ndbs 1000 } { tnum 76 } args } {
error_check_good env_close [$env close] 0
}
- puts "\tTest0$tnum passed."
+ puts "\tTest$tnum passed."
}
diff --git a/db/test/test077.tcl b/db/test/test077.tcl
index 47248a309..8396ef276 100644
--- a/db/test/test077.tcl
+++ b/db/test/test077.tcl
@@ -1,52 +1,74 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test077.tcl,v 1.4 2000/08/25 14:21:58 sue Exp $
+# $Id: test077.tcl,v 1.13 2003/01/22 20:12:43 sandstro Exp $
#
-# DB Test 77: Test of DB_GET_RECNO [#1206].
-proc test077 { method { nkeys 1000 } { pagesize 512 } { tnum 77 } args } {
+# TEST test077
+# TEST Test of DB_GET_RECNO [#1206].
+proc test077 { method { nkeys 1000 } { tnum "077" } args } {
source ./include.tcl
global alphabet
set omethod [convert_method $method]
set args [convert_args $method $args]
- puts "Test0$tnum: Test of DB_GET_RECNO."
+ puts "Test$tnum: Test of DB_GET_RECNO."
if { [is_rbtree $method] != 1 } {
- puts "\tTest0$tnum: Skipping for method $method."
+ puts "\tTest$tnum: Skipping for method $method."
return
}
set data $alphabet
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644\
- -pagesize $pagesize} $omethod $args {$testfile}]
+ set db [eval {berkdb_open -create -mode 0644} \
+ $omethod $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
- puts "\tTest0$tnum.a: Populating database."
+ puts "\tTest$tnum.a: Populating database."
+ set txn ""
for { set i 1 } { $i <= $nkeys } { incr i } {
set key [format %5d $i]
- error_check_good db_put($key) [$db put $key $data] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$key $data}]
+ error_check_good db_put($key) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
- puts "\tTest0$tnum.b: Verifying record numbers."
+ puts "\tTest$tnum.b: Verifying record numbers."
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good dbc_open [is_valid_cursor $dbc $db] TRUE
set i 1
@@ -64,5 +86,8 @@ proc test077 { method { nkeys 1000 } { pagesize 512 } { tnum 77 } args } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
diff --git a/db/test/test078.tcl b/db/test/test078.tcl
index 9642096fa..e7b8b48cb 100644
--- a/db/test/test078.tcl
+++ b/db/test/test078.tcl
@@ -1,54 +1,74 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test078.tcl,v 1.9 2000/12/11 17:24:55 sue Exp $
+# $Id: test078.tcl,v 1.20 2003/01/08 05:54:03 bostic Exp $
#
-# DB Test 78: Test of DBC->c_count(). [#303]
-proc test078 { method { nkeys 100 } { pagesize 512 } { tnum 78 } args } {
+# TEST test078
+# TEST Test of DBC->c_count(). [#303]
+proc test078 { method { nkeys 100 } { pagesize 512 } { tnum "078" } args } {
source ./include.tcl
global alphabet rand_init
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: Test of key counts."
+ puts "Test$tnum: Test of key counts."
berkdb srand $rand_init
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
+ if { $eindex != -1 } {
+ incr eindex
+ }
+
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum-a.db
set env NULL
} else {
- set testfile test0$tnum.db
- incr eindex
+ set testfile test$tnum-a.db
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
cleanup $testdir $env
- puts "\tTest0$tnum.a: No duplicates, trivial answer."
+ puts "\tTest$tnum.a: No duplicates, trivial answer."
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
puts "Test078: skipping for specific pagesizes"
return
}
- set db [eval {berkdb_open -create -truncate -mode 0644\
+ set db [eval {berkdb_open -create -mode 0644\
-pagesize $pagesize} $omethod $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
+ set txn ""
for { set i 1 } { $i <= $nkeys } { incr i } {
- error_check_good put.a($i) [$db put $i\
- [pad_data $method $alphabet$i]] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$i\
+ [pad_data $method $alphabet$i]}]
+ error_check_good put.a($i) $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good count.a [$db count $i] 1
}
error_check_good db_close.a [$db close] 0
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
puts \
- "\tTest0$tnum.b: Duplicates not supported in $method, skipping."
+ "\tTest$tnum.b: Duplicates not supported in $method, skipping."
return
}
@@ -56,29 +76,49 @@ proc test078 { method { nkeys 100 } { pagesize 512 } { tnum 78 } args } {
set letter [lindex $tuple 0]
set dupopt [lindex $tuple 2]
- puts "\tTest0$tnum.$letter: Duplicates ([lindex $tuple 1])."
+ if { $eindex == -1 } {
+ set testfile $testdir/test$tnum-b.db
+ set env NULL
+ } else {
+ set testfile test$tnum-b.db
+ set env [lindex $args $eindex]
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
+ puts "\tTest$tnum.$letter: Duplicates ([lindex $tuple 1])."
- puts "\t\tTest0$tnum.$letter.1: Populating database."
+ puts "\t\tTest$tnum.$letter.1: Populating database."
- set db [eval {berkdb_open -create -truncate -mode 0644\
+ set db [eval {berkdb_open -create -mode 0644\
-pagesize $pagesize} $dupopt $omethod $args {$testfile}]
error_check_good db_open [is_valid_db $db] TRUE
for { set i 1 } { $i <= $nkeys } { incr i } {
for { set j 0 } { $j < $i } { incr j } {
- error_check_good put.$letter,$i [$db put $i\
- [pad_data $method $j$alphabet]] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn \
+ [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$i\
+ [pad_data $method $j$alphabet]}]
+ error_check_good put.$letter,$i $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
- puts -nonewline "\t\tTest0$tnum.$letter.2: "
+ puts -nonewline "\t\tTest$tnum.$letter.2: "
puts "Verifying dup counts on first dup."
for { set i 1 } { $i < $nkeys } { incr i } {
error_check_good count.$letter,$i \
[$db count $i] $i
}
- puts -nonewline "\t\tTest0$tnum.$letter.3: "
+ puts -nonewline "\t\tTest$tnum.$letter.3: "
puts "Verifying dup counts on random dup."
for { set i 1 } { $i < $nkeys } { incr i } {
set key [berkdb random_int 1 $nkeys]
diff --git a/db/test/test079.tcl b/db/test/test079.tcl
index fe7b978a3..4c2c866b1 100644
--- a/db/test/test079.tcl
+++ b/db/test/test079.tcl
@@ -1,18 +1,29 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test079.tcl,v 11.5 2000/11/16 23:56:18 ubell Exp $
+# $Id: test079.tcl,v 11.11 2003/01/08 05:54:04 bostic Exp $
#
-# DB Test 79 {access method}
-# Check that delete operations work in large btrees. 10000 entries and
-# a pagesize of 512 push this out to a four-level btree, with a small fraction
-# of the entries going on overflow pages.
-proc test079 { method {nentries 10000} {pagesize 512} {tnum 79} args} {
+# TEST test079
+# TEST Test of deletes in large trees. (test006 w/ sm. pagesize).
+# TEST
+# TEST Check that delete operations work in large btrees. 10000 entries
+# TEST and a pagesize of 512 push this out to a four-level btree, with a
+# TEST small fraction of the entries going on overflow pages.
+proc test079 { method {nentries 10000} {pagesize 512} {tnum "079"} \
+ {ndups 20} args} {
if { [ is_queueext $method ] == 1 } {
set method "queue";
lappend args "-extent" "20"
}
- eval {test006 $method $nentries 1 $tnum -pagesize $pagesize} $args
+
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test$tnum: skipping for specific pagesizes"
+ return
+ }
+
+ eval {test006 $method $nentries 1 $tnum $ndups -pagesize \
+ $pagesize} $args
}
diff --git a/db/test/test080.tcl b/db/test/test080.tcl
index 02a6a7242..59aa04685 100644
--- a/db/test/test080.tcl
+++ b/db/test/test080.tcl
@@ -1,41 +1,129 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test080.tcl,v 11.7 2000/10/19 23:15:22 ubell Exp $
+# $Id: test080.tcl,v 11.21 2003/10/03 13:28:17 sandstro Exp $
#
-# DB Test 80 {access method}
-# Test of dbremove
-proc test080 { method {tnum 80} args } {
+# TEST test080
+# TEST Test of DB->remove()
+proc test080 { method {tnum "080"} args } {
source ./include.tcl
set args [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: Test of DB->remove()"
+ puts "Test$tnum: Test of DB->remove()"
+ # Determine full path
+ set curdir [pwd]
+ cd $testdir
+ set fulldir [pwd]
+ cd $curdir
+ # Test both relative and absolute path
+ set paths [list $fulldir $testdir]
+
+ set encrypt 0
+ set encargs ""
+ set args [split_encargs $args encargs]
+
+ # If we are using an env, then skip this test.
+ # It needs its own.
set eindex [lsearch -exact $args "-env"]
if { $eindex != -1 } {
- puts "\tTest0$tnum: Skipping in the presence of an environment"
+ incr eindex
+ set e [lindex $args $eindex]
+ puts "Skipping test080 for env $e"
return
}
- cleanup $testdir NULL
-
- set testfile $testdir/test0$tnum.db
- set db [eval {berkdb_open -create -truncate -mode 0644} $omethod \
- $args {$testfile}]
- error_check_good db_open [is_valid_db $db] TRUE
- for {set i 1} { $i < 1000 } {incr i} {
- $db put $i $i
- }
- error_check_good db_close [$db close] 0
- error_check_good file_exists_before [file exists $testfile] 1
+ foreach path $paths {
+
+ set dbfile test$tnum.db
+ set testfile $path/$dbfile
+ set eargs $encargs
+
+ # Loop through test using the following remove options
+ # 1. no environment, not in transaction
+ # 2. with environment, not in transaction
+ # 3. remove with auto-commit
+ # 4. remove in committed transaction
+ # 5. remove in aborted transaction
+
+ foreach op "noenv env auto commit abort" {
+
+ # Make sure we're starting with a clean slate.
+ env_cleanup $testdir
+ if { $op == "noenv" } {
+ set dbfile $testfile
+ set e NULL
+ set envargs ""
+ } else {
+ if { $op == "env" } {
+ set largs ""
+ } else {
+ set largs " -txn"
+ }
+ if { $encargs != "" } {
+ set eargs " -encrypt "
+ }
+ set e [eval {berkdb_env -create -home $path} \
+ $encargs $largs]
+ set envargs "-env $e"
+ error_check_good env_open [is_valid_env $e] TRUE
+ }
- error_check_good db_remove [berkdb dbremove $testfile] 0
- error_check_good file_exists_after [file exists $testfile] 0
+ puts "\tTest$tnum: dbremove with $op in $path"
+ puts "\tTest$tnum.a.1: Create file"
+ set db [eval {berkdb_open -create -mode 0644} \
+ $omethod $envargs $eargs $args {$dbfile}]
+ error_check_good db_open [is_valid_db $db] TRUE
- puts "\tTest0$tnum succeeded."
+ # The nature of the key and data are unimportant;
+ # use numeric key so record-based methods don't need
+ # special treatment.
+ set key 1
+ set data [pad_data $method data]
+
+ error_check_good dbput [$db put $key $data] 0
+ error_check_good dbclose [$db close] 0
+ error_check_good file_exists_before \
+ [file exists $testfile] 1
+
+ # Use berkdb dbremove for non-transactional tests
+ # and $env dbremove for transactional tests
+ puts "\tTest$tnum.a.2: Remove file"
+ if { $op == "noenv" || $op == "env" } {
+ error_check_good remove_$op [eval \
+ {berkdb dbremove} $eargs $envargs $dbfile] 0
+ } elseif { $op == "auto" } {
+ error_check_good remove_$op \
+ [eval {$e dbremove} -auto_commit $dbfile] 0
+ } else {
+ # $op is "abort" or "commit"
+ set txn [$e txn]
+ error_check_good remove_$op \
+ [eval {$e dbremove} -txn $txn $dbfile] 0
+ error_check_good txn_$op [$txn $op] 0
+ }
+
+ puts "\tTest$tnum.a.3: Check that file is gone"
+ # File should now be gone, unless the op is an abort.
+ if { $op != "abort" } {
+ error_check_good exists_after \
+ [file exists $testfile] 0
+ } else {
+ error_check_good exists_after \
+ [file exists $testfile] 1
+ }
+
+ if { $e != "NULL" } {
+ error_check_good env_close [$e close] 0
+ }
+
+ set dbfile test$tnum-old.db
+ set testfile $path/$dbfile
+ }
+ }
}
diff --git a/db/test/test081.tcl b/db/test/test081.tcl
index 44e708c5d..f3a151be2 100644
--- a/db/test/test081.tcl
+++ b/db/test/test081.tcl
@@ -1,15 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test081.tcl,v 11.3 2000/03/01 15:13:59 krinsky Exp $
+# $Id: test081.tcl,v 11.8 2003/01/08 05:54:04 bostic Exp $
#
-# Test 81.
-# Test off-page duplicates and overflow pages together with
-# very large keys (key/data as file contents).
-#
-proc test081 { method {ndups 13} {tnum 81} args} {
+# TEST test081
+# TEST Test off-page duplicates and overflow pages together with
+# TEST very large keys (key/data as file contents).
+proc test081 { method {ndups 13} {tnum "081"} args} {
source ./include.tcl
eval {test017 $method 1 $ndups $tnum} $args
diff --git a/db/test/test082.tcl b/db/test/test082.tcl
index e8bd4f975..70dd77654 100644
--- a/db/test/test082.tcl
+++ b/db/test/test082.tcl
@@ -1,15 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test082.tcl,v 11.1 2000/04/30 05:05:26 krinsky Exp $
+# $Id: test082.tcl,v 11.7 2003/01/08 05:54:04 bostic Exp $
#
-# Test 82.
-# Test of DB_PREV_NODUP
-proc test082 { method {dir -prevnodup} {pagesize 512} {nitems 100}\
- {tnum 82} args} {
+# TEST test082
+# TEST Test of DB_PREV_NODUP (uses test074).
+proc test082 { method {dir -prevnodup} {nitems 100} {tnum "082"} args} {
source ./include.tcl
- eval {test074 $method $dir $pagesize $nitems $tnum} $args
+ eval {test074 $method $dir $nitems $tnum} $args
}
diff --git a/db/test/test083.tcl b/db/test/test083.tcl
index 7565a5a74..081c1aace 100644
--- a/db/test/test083.tcl
+++ b/db/test/test083.tcl
@@ -1,14 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test083.tcl,v 11.6 2000/12/11 17:24:55 sue Exp $
+# $Id: test083.tcl,v 11.15 2003/04/18 14:39:10 sandstro Exp $
#
-# Test 83.
-# Test of DB->key_range
+# TEST test083
+# TEST Test of DB->key_range.
proc test083 { method {pgsz 512} {maxitems 5000} {step 2} args} {
source ./include.tcl
+
+ global rand_init
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
+
set omethod [convert_method $method]
set args [convert_args $method $args]
@@ -25,6 +29,7 @@ proc test083 { method {pgsz 512} {maxitems 5000} {step 2} args} {
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
if { $eindex == -1 } {
set testfile $testdir/test083.db
@@ -33,6 +38,11 @@ proc test083 { method {pgsz 512} {maxitems 5000} {step 2} args} {
set testfile test083.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
# We assume that numbers will be at most six digits wide
@@ -45,19 +55,22 @@ proc test083 { method {pgsz 512} {maxitems 5000} {step 2} args} {
{ set nitems [expr $nitems * $step] } {
puts "\tTest083.a: Opening new database"
+ if { $env != "NULL"} {
+ set testdir [get_home $env]
+ }
cleanup $testdir $env
- set db [eval {berkdb_open -create -truncate -mode 0644} \
+ set db [eval {berkdb_open -create -mode 0644} \
-pagesize $pgsz $omethod $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- t83_build $db $nitems
- t83_test $db $nitems
+ t83_build $db $nitems $env $txnenv
+ t83_test $db $nitems $env $txnenv
error_check_good db_close [$db close] 0
}
}
-proc t83_build { db nitems } {
+proc t83_build { db nitems env txnenv } {
source ./include.tcl
puts "\tTest083.b: Populating database with $nitems keys"
@@ -73,24 +86,38 @@ proc t83_build { db nitems } {
# just skip the randomization step.
#puts "\t\tTest083.b.2: Randomizing key list"
#set keylist [randomize_list $keylist]
-
#puts "\t\tTest083.b.3: Populating database with randomized keys"
puts "\t\tTest083.b.2: Populating database"
set data [repeat . 50]
-
+ set txn ""
foreach keynum $keylist {
- error_check_good db_put [$db put key[format %6d $keynum] \
- $data] 0
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {key[format %6d $keynum] $data}]
+ error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
}
-proc t83_test { db nitems } {
+proc t83_test { db nitems env txnenv } {
# Look at the first key, then at keys about 1/4, 1/2, 3/4, and
# all the way through the database. Make sure the key_ranges
# aren't off by more than 10%.
- set dbc [$db cursor]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ } else {
+ set txn ""
+ }
+ set dbc [eval {$db cursor} $txn]
error_check_good dbc [is_valid_cursor $dbc $db] TRUE
puts "\tTest083.c: Verifying ranges..."
@@ -129,6 +156,9 @@ proc t83_test { db nitems } {
}
error_check_good dbc_close [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
proc roughly_equal { a b tol } {
diff --git a/db/test/test084.tcl b/db/test/test084.tcl
index 0efd0d17c..71e570903 100644
--- a/db/test/test084.tcl
+++ b/db/test/test084.tcl
@@ -1,27 +1,32 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test084.tcl,v 11.6 2000/12/11 17:24:55 sue Exp $
+# $Id: test084.tcl,v 11.14 2003/08/28 19:59:15 sandstro Exp $
#
-# Test 84.
-# Basic sanity test (test001) with large (64K) pages.
-#
-proc test084 { method {nentries 10000} {tnum 84} {pagesize 65536} args} {
+# TEST test084
+# TEST Basic sanity test (test001) with large (64K) pages.
+proc test084 { method {nentries 10000} {tnum "084"} {pagesize 65536} args} {
source ./include.tcl
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum-empty.db
+ set testfile $testdir/test$tnum-empty.db
set env NULL
} else {
- set testfile test0$tnum-empty.db
+ set testfile test$tnum-empty.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set pgindex [lsearch -exact $args "-pagesize"]
@@ -34,7 +39,7 @@ proc test084 { method {nentries 10000} {tnum 84} {pagesize 65536} args} {
set args "-pagesize $pagesize $args"
- eval {test001 $method $nentries 0 $tnum} $args
+ eval {test001 $method $nentries 0 0 $tnum} $args
set omethod [convert_method $method]
set args [convert_args $method $args]
diff --git a/db/test/test085.tcl b/db/test/test085.tcl
index 09134a00f..6dc775278 100644
--- a/db/test/test085.tcl
+++ b/db/test/test085.tcl
@@ -1,31 +1,39 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test085.tcl,v 1.4 2000/12/11 17:24:55 sue Exp $
+# $Id: test085.tcl,v 1.15 2003/01/08 05:54:05 bostic Exp $
#
-# DB Test 85: Test of cursor behavior when a cursor is pointing to a deleted
-# btree key which then has duplicates added.
-proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
+# TEST test085
+# TEST Test of cursor behavior when a cursor is pointing to a deleted
+# TEST btree key which then has duplicates added. [#2473]
+proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum "085"} args } {
source ./include.tcl
global alphabet
set omethod [convert_method $method]
set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
-
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set pgindex [lsearch -exact $args "-pagesize"]
@@ -45,10 +53,11 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
set predatum "1234567890"
set datum $alphabet
set postdatum "0987654321"
+ set txn ""
append args " -pagesize $pagesize -dup"
- puts -nonewline "Test0$tnum $omethod ($args): "
+ puts -nonewline "Test$tnum $omethod ($args): "
# Skip for all non-btrees. (Rbtrees don't count as btrees, for
# now, since they don't support dups.)
@@ -61,8 +70,8 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
# Repeat the test with both on-page and off-page numbers of dups.
foreach ndups "$onp $offp" {
- # Put operations we want to test on a cursor set to the
- # deleted item, the key to use with them, and what should
+ # Put operations we want to test on a cursor set to the
+ # deleted item, the key to use with them, and what should
# come before and after them given a placement of
# the deleted item at the beginning or end of the dupset.
set final [expr $ndups - 1]
@@ -100,15 +109,22 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
{{-prevnodup} "" $prekey $predatum end}
}
+ set txn ""
foreach pair $getops {
set op [lindex $pair 0]
- puts "\tTest0$tnum: Get ($op) with $ndups duplicates,\
+ puts "\tTest$tnum: Get ($op) with $ndups duplicates,\
cursor at the [lindex $pair 4]."
set db [eval {berkdb_open -create \
- -truncate -mode 0644} $omethod $args $testfile]
+ -mode 0644} $omethod $encargs $args $testfile]
error_check_good "db open" [is_valid_db $db] TRUE
- set dbc [test085_setup $db]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn \
+ [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [test085_setup $db $txn]
set beginning [expr [string compare \
[lindex $pair 4] "beginning"] == 0]
@@ -116,9 +132,10 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
for { set i 0 } { $i < $ndups } { incr i } {
if { $beginning } {
error_check_good db_put($i) \
- [$db put $key [test085_ddatum $i]] 0
+ [eval {$db put} $txn \
+ {$key [test085_ddatum $i]}] 0
} else {
- set c [$db cursor]
+ set c [eval {$db cursor} $txn]
set j [expr $ndups - $i - 1]
error_check_good db_cursor($j) \
[is_valid_cursor $c $db] TRUE
@@ -128,14 +145,14 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
error_check_good c_close [$c close] 0
}
}
-
+
set gargs [lindex $pair 1]
set ekey ""
set edata ""
eval set ekey [lindex $pair 2]
eval set edata [lindex $pair 3]
- set dbt [eval $dbc get $op $gargs]
+ set dbt [eval $dbc get $op $gargs]
if { [string compare $ekey EMPTYLIST] == 0 } {
error_check_good dbt($op,$ndups) \
[llength $dbt] 0
@@ -144,31 +161,56 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
[list [list $ekey $edata]]
}
error_check_good "dbc close" [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good "db close" [$db close] 0
verify_dir $testdir "\t\t"
+
+ # Remove testfile so we can do without truncate flag.
+ # This is okay because we've already done verify and
+ # dump/load.
+ if { $env == "NULL" } {
+ set ret [eval {berkdb dbremove} \
+ $encargs $testfile]
+ } elseif { $txnenv == 1 } {
+ set ret [eval "$env dbremove" \
+ -auto_commit $encargs $testfile]
+ } else {
+ set ret [eval {berkdb dbremove} \
+ -env $env $encargs $testfile]
+ }
+ error_check_good dbremove $ret 0
+
}
foreach pair $putops {
# Open and set up database.
set op [lindex $pair 0]
- puts "\tTest0$tnum: Put ($op) with $ndups duplicates,\
+ puts "\tTest$tnum: Put ($op) with $ndups duplicates,\
cursor at the [lindex $pair 4]."
set db [eval {berkdb_open -create \
- -truncate -mode 0644} $omethod $args $testfile]
+ -mode 0644} $omethod $args $encargs $testfile]
error_check_good "db open" [is_valid_db $db] TRUE
set beginning [expr [string compare \
[lindex $pair 4] "beginning"] == 0]
-
- set dbc [test085_setup $db]
+
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc [test085_setup $db $txn]
# Put duplicates.
for { set i 0 } { $i < $ndups } { incr i } {
if { $beginning } {
error_check_good db_put($i) \
- [$db put $key [test085_ddatum $i]] 0
+ [eval {$db put} $txn \
+ {$key [test085_ddatum $i]}] 0
} else {
- set c [$db cursor]
+ set c [eval {$db cursor} $txn]
set j [expr $ndups - $i - 1]
error_check_good db_cursor($j) \
[is_valid_cursor $c $db] TRUE
@@ -180,17 +222,17 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
}
# Set up cursors for stability test.
- set pre_dbc [$db cursor]
+ set pre_dbc [eval {$db cursor} $txn]
error_check_good pre_set [$pre_dbc get -set $prekey] \
[list [list $prekey $predatum]]
- set post_dbc [$db cursor]
+ set post_dbc [eval {$db cursor} $txn]
error_check_good post_set [$post_dbc get -set $postkey]\
[list [list $postkey $postdatum]]
- set first_dbc [$db cursor]
+ set first_dbc [eval {$db cursor} $txn]
error_check_good first_set \
[$first_dbc get -get_both $key [test085_ddatum 0]] \
[list [list $key [test085_ddatum 0]]]
- set last_dbc [$db cursor]
+ set last_dbc [eval {$db cursor} $txn]
error_check_good last_set \
[$last_dbc get -get_both $key [test085_ddatum \
[expr $ndups - 1]]] \
@@ -227,23 +269,39 @@ proc test085 { method {pagesize 512} {onp 3} {offp 10} {tnum 85} args } {
[$last_dbc get -current] \
[list [list $key [test085_ddatum [expr $ndups -1]]]]
-
foreach c "$pre_dbc $post_dbc $first_dbc $last_dbc" {
error_check_good ${c}_close [$c close] 0
}
error_check_good "dbc close" [$dbc close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good "db close" [$db close] 0
- verify_dir $testdir "\t\t"
+ verify_dir $testdir "\t\t"
+
+ # Remove testfile so we can do without truncate flag.
+ # This is okay because we've already done verify and
+ # dump/load.
+ if { $env == "NULL" } {
+ set ret [eval {berkdb dbremove} \
+ $encargs $testfile]
+ } elseif { $txnenv == 1 } {
+ set ret [eval "$env dbremove" \
+ -auto_commit $encargs $testfile]
+ } else {
+ set ret [eval {berkdb dbremove} \
+ -env $env $encargs $testfile]
+ }
+ error_check_good dbremove $ret 0
}
}
}
-
-# Set up the test database; put $prekey, $key, and $postkey with their
+# Set up the test database; put $prekey, $key, and $postkey with their
# respective data, and then delete $key with a new cursor. Return that
# cursor, still pointing to the deleted item.
-proc test085_setup { db } {
+proc test085_setup { db txn } {
upvar key key
upvar prekey prekey
upvar postkey postkey
@@ -251,13 +309,13 @@ proc test085_setup { db } {
upvar postdatum postdatum
# no one else should ever see this one!
- set datum "bbbbbbbb"
+ set datum "bbbbbbbb"
- error_check_good pre_put [$db put $prekey $predatum] 0
- error_check_good main_put [$db put $key $datum] 0
- error_check_good post_put [$db put $postkey $postdatum] 0
+ error_check_good pre_put [eval {$db put} $txn {$prekey $predatum}] 0
+ error_check_good main_put [eval {$db put} $txn {$key $datum}] 0
+ error_check_good post_put [eval {$db put} $txn {$postkey $postdatum}] 0
- set dbc [$db cursor]
+ set dbc [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
error_check_good dbc_getset [$dbc get -get_both $key $datum] \
diff --git a/db/test/test086.tcl b/db/test/test086.tcl
index dc30de8ec..af7beb054 100644
--- a/db/test/test086.tcl
+++ b/db/test/test086.tcl
@@ -1,25 +1,30 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test086.tcl,v 11.2 2000/08/25 14:21:58 sue Exp $
-
-# Test086: Cursor stability across btree splits w/ subtransaction abort [#2373].
+# $Id: test086.tcl,v 11.11 2003/03/27 16:34:48 sandstro Exp $
+#
+# TEST test086
+# TEST Test of cursor stability across btree splits/rsplits with
+# TEST subtransaction aborts (a variant of test048). [#2373]
proc test086 { method args } {
global errorCode
source ./include.tcl
- set tstn 086
+ set tnum 086
+ set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
if { [is_btree $method] != 1 } {
- puts "Test$tstn skipping for method $method."
+ puts "Test$tnum skipping for method $method."
return
}
set method "-btree"
- puts "\tTest$tstn: Test of cursor stability across aborted\
+ puts "\tTest$tnum: Test of cursor stability across aborted\
btree splits."
set key "key"
@@ -32,26 +37,26 @@ proc test086 { method args } {
# If we are using an env, then this test won't work.
if { $eindex == -1 } {
# But we will be using our own env...
- set testfile test0$tstn.db
+ set testfile test$tnum.db
} else {
- puts "\tTest$tstn: Environment provided; skipping test."
+ puts "\tTest$tnum: Environment provided; skipping test."
return
}
set t1 $testdir/t1
env_cleanup $testdir
- set env [berkdb env -create -home $testdir -txn]
+ set env [eval {berkdb_env -create -home $testdir -txn} $encargs]
error_check_good berkdb_env [is_valid_env $env] TRUE
- puts "\tTest$tstn.a: Create $method database."
- set oflags "-create -env $env -mode 0644 $args $method"
+ puts "\tTest$tnum.a: Create $method database."
+ set oflags "-auto_commit -create -env $env -mode 0644 $args $method"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set nkeys 5
# Fill page w/ small key/data pairs, keep at leaf
#
- puts "\tTest$tstn.b: Fill page with $nkeys small key/data pairs."
+ puts "\tTest$tnum.b: Fill page with $nkeys small key/data pairs."
set txn [$env txn]
error_check_good txn [is_valid_txn $txn $env] TRUE
for { set i 0 } { $i < $nkeys } { incr i } {
@@ -61,7 +66,7 @@ proc test086 { method args } {
error_check_good commit [$txn commit] 0
# get db ordering, set cursors
- puts "\tTest$tstn.c: Set cursors on each of $nkeys pairs."
+ puts "\tTest$tnum.c: Set cursors on each of $nkeys pairs."
set txn [$env txn]
error_check_good txn [is_valid_txn $txn $env] TRUE
for {set i 0; set ret [$db get -txn $txn key000$i]} {\
@@ -82,7 +87,7 @@ proc test086 { method args } {
# if mkeys is above 1000, need to adjust below for lexical order
set mkeys 1000
- puts "\tTest$tstn.d: Add $mkeys pairs to force split."
+ puts "\tTest$tnum.d: Add $mkeys pairs to force split."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 100 } {
set ret [$db put -txn $ctxn key0$i $data$i]
@@ -94,11 +99,10 @@ proc test086 { method args } {
error_check_good dbput:more $ret 0
}
- puts "\tTest$tstn.e: Abort."
+ puts "\tTest$tnum.e: Abort."
error_check_good ctxn_abort [$ctxn abort] 0
-
- puts "\tTest$tstn.f: Check and see that cursors maintained reference."
+ puts "\tTest$tnum.f: Check and see that cursors maintained reference."
for {set i 0} { $i < $nkeys } {incr i} {
set ret [$dbc_set($i) get -current]
error_check_bad dbc$i:get:current [llength $ret] 0
@@ -107,9 +111,9 @@ proc test086 { method args } {
error_check_good dbc$i:get(match) $ret $ret2
}
- # Put (and this time keep) the keys that caused the split.
+ # Put (and this time keep) the keys that caused the split.
# We'll delete them to test reverse splits.
- puts "\tTest$tstn.g: Put back added keys."
+ puts "\tTest$tnum.g: Put back added keys."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 100 } {
set ret [$db put -txn $txn key0$i $data$i]
@@ -121,7 +125,7 @@ proc test086 { method args } {
error_check_good dbput:more $ret 0
}
- puts "\tTest$tstn.h: Delete added keys to force reverse split."
+ puts "\tTest$tnum.h: Delete added keys to force reverse split."
set ctxn [$env txn -parent $txn]
error_check_good ctxn [is_valid_txn $txn $env] TRUE
for {set i $nkeys} { $i < $mkeys } { incr i } {
@@ -136,10 +140,10 @@ proc test086 { method args } {
}
}
- puts "\tTest$tstn.i: Abort."
+ puts "\tTest$tnum.i: Abort."
error_check_good ctxn_abort [$ctxn abort] 0
- puts "\tTest$tstn.j: Verify cursor reference."
+ puts "\tTest$tnum.j: Verify cursor reference."
for {set i 0} { $i < $nkeys } {incr i} {
set ret [$dbc_set($i) get -current]
error_check_bad dbc$i:get:current [llength $ret] 0
@@ -148,7 +152,7 @@ proc test086 { method args } {
error_check_good dbc$i:get(match) $ret $ret2
}
- puts "\tTest$tstn.j: Cleanup."
+ puts "\tTest$tnum.j: Cleanup."
# close cursors
for {set i 0} { $i < $nkeys } {incr i} {
error_check_good dbc_close:$i [$dbc_set($i) close] 0
@@ -158,5 +162,5 @@ proc test086 { method args } {
error_check_good dbclose [$db close] 0
error_check_good envclose [$env close] 0
- puts "\tTest$tstn complete."
+ puts "\tTest$tnum complete."
}
diff --git a/db/test/test087.tcl b/db/test/test087.tcl
index 7096e6c1c..62d55082d 100644
--- a/db/test/test087.tcl
+++ b/db/test/test087.tcl
@@ -1,33 +1,40 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test087.tcl,v 11.6 2000/12/11 17:24:55 sue Exp $
+# $Id: test087.tcl,v 11.17 2003/01/08 05:54:06 bostic Exp $
#
-# DB Test 87: Test of cursor stability on duplicate pages w/aborts.
-# Does the following:
-# a. Initialize things by DB->putting ndups dups and
-# setting a reference cursor to point to each.
-# b. c_put ndups dups (and correspondingly expanding
-# the set of reference cursors) after the last one, making sure
-# after each step that all the reference cursors still point to
-# the right item.
-# c. Ditto, but before the first one.
-# d. Ditto, but after each one in sequence first to last.
-# e. Ditto, but after each one in sequence from last to first.
-# occur relative to the new datum)
-# f. Ditto for the two sequence tests, only doing a
-# DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
-# new one.
-proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
+# TEST test087
+# TEST Test of cursor stability when converting to and modifying
+# TEST off-page duplicate pages with subtransaction aborts. [#2373]
+# TEST
+# TEST Does the following:
+# TEST a. Initialize things by DB->putting ndups dups and
+# TEST setting a reference cursor to point to each. Do each put twice,
+# TEST first aborting, then committing, so we're sure to abort the move
+# TEST to off-page dups at some point.
+# TEST b. c_put ndups dups (and correspondingly expanding
+# TEST the set of reference cursors) after the last one, making sure
+# TEST after each step that all the reference cursors still point to
+# TEST the right item.
+# TEST c. Ditto, but before the first one.
+# TEST d. Ditto, but after each one in sequence first to last.
+# TEST e. Ditto, but after each one in sequence from last to first.
+# TEST occur relative to the new datum)
+# TEST f. Ditto for the two sequence tests, only doing a
+# TEST DBC->c_put(DB_CURRENT) of a larger datum instead of adding a
+# TEST new one.
+proc test087 { method {pagesize 512} {ndups 50} {tnum "087"} args } {
source ./include.tcl
global alphabet
- set omethod [convert_method $method]
set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
+ set omethod [convert_method $method]
- puts "Test0$tnum $omethod ($args): "
+ puts "Test$tnum $omethod ($args): "
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then return
@@ -41,7 +48,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
return
}
env_cleanup $testdir
- set testfile test0$tnum.db
+ set testfile test$tnum.db
set key "the key"
append args " -pagesize $pagesize -dup"
@@ -52,34 +59,38 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
puts "Cursor stability on dup. pages w/ aborts."
}
- set env [berkdb env -create -home $testdir -txn]
+ set env [eval {berkdb_env -create -home $testdir -txn} $encargs]
error_check_good env_create [is_valid_env $env] TRUE
- set db [eval {berkdb_open -env $env \
- -create -mode 0644} $omethod $args $testfile]
+ set db [eval {berkdb_open -auto_commit \
+ -create -env $env -mode 0644} $omethod $args $testfile]
error_check_good "db open" [is_valid_db $db] TRUE
# Number of outstanding keys.
- set keys 0
+ set keys $ndups
- puts "\tTest0$tnum.a.1: Initializing put loop; $ndups dups, short data."
+ puts "\tTest$tnum.a: put/abort/put/commit loop;\
+ $ndups dups, short data."
set txn [$env txn]
error_check_good txn [is_valid_txn $txn $env] TRUE
for { set i 0 } { $i < $ndups } { incr i } {
set datum [makedatum_t73 $i 0]
- error_check_good "db put ($i)" [$db put -txn $txn $key $datum] 0
+ set ctxn [$env txn -parent $txn]
+ error_check_good ctxn(abort,$i) [is_valid_txn $ctxn $env] TRUE
+ error_check_good "db put/abort ($i)" \
+ [$db put -txn $ctxn $key $datum] 0
+ error_check_good ctxn_abort($i) [$ctxn abort] 0
- set is_long($i) 0
- incr keys
- }
- error_check_good txn_commit [$txn commit] 0
+ verify_t73 is_long dbc [expr $i - 1] $key
- puts "\tTest0$tnum.a.2: Initializing cursor get loop; $keys dups."
- set txn [$env txn]
- error_check_good txn [is_valid_txn $txn $env] TRUE
- for { set i 0 } { $i < $keys } { incr i } {
- set datum [makedatum_t73 $i 0]
+ set ctxn [$env txn -parent $txn]
+ error_check_good ctxn(commit,$i) [is_valid_txn $ctxn $env] TRUE
+ error_check_good "db put/commit ($i)" \
+ [$db put -txn $ctxn $key $datum] 0
+ error_check_good ctxn_commit($i) [$ctxn commit] 0
+
+ set is_long($i) 0
set dbc($i) [$db cursor -txn $txn]
error_check_good "db cursor ($i)"\
@@ -87,9 +98,11 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
error_check_good "dbc get -get_both ($i)"\
[$dbc($i) get -get_both $key $datum]\
[list [list $key $datum]]
+
+ verify_t73 is_long dbc $i $key
}
- puts "\tTest0$tnum.b: Cursor put (DB_KEYLAST); $ndups new dups,\
+ puts "\tTest$tnum.b: Cursor put (DB_KEYLAST); $ndups new dups,\
short data."
set ctxn [$env txn -parent $txn]
@@ -97,7 +110,6 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
for { set i 0 } { $i < $ndups } { incr i } {
# !!! keys contains the number of the next dup
# to be added (since they start from zero)
-
set datum [makedatum_t73 $keys 0]
set curs [$db cursor -txn $ctxn]
error_check_good "db cursor create" [is_valid_cursor $curs $db]\
@@ -116,7 +128,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
error_check_good ctxn_abort [$ctxn abort] 0
verify_t73 is_long dbc $keys $key
- puts "\tTest0$tnum.c: Cursor put (DB_KEYFIRST); $ndups new dups,\
+ puts "\tTest$tnum.c: Cursor put (DB_KEYFIRST); $ndups new dups,\
short data."
set ctxn [$env txn -parent $txn]
@@ -140,7 +152,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
error_check_good ctxn_abort [$ctxn abort] 0
verify_t73 is_long dbc $keys $key
- puts "\tTest0$tnum.d: Cursor put (DB_AFTER) first to last;\
+ puts "\tTest$tnum.d: Cursor put (DB_AFTER) first to last;\
$keys new dups, short data"
# We want to add a datum after each key from 0 to the current
# value of $keys, which we thus need to save.
@@ -167,7 +179,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
error_check_good ctxn_abort [$ctxn abort] 0
verify_t73 is_long dbc $keys $key
- puts "\tTest0$tnum.e: Cursor put (DB_BEFORE) last to first;\
+ puts "\tTest$tnum.e: Cursor put (DB_BEFORE) last to first;\
$keys new dups, short data"
set ctxn [$env txn -parent $txn]
error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
@@ -191,7 +203,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
error_check_good ctxn_abort [$ctxn abort] 0
verify_t73 is_long dbc $keys $key
- puts "\tTest0$tnum.f: Cursor put (DB_CURRENT), first to last,\
+ puts "\tTest$tnum.f: Cursor put (DB_CURRENT), first to last,\
growing $keys data."
set ctxn [$env txn -parent $txn]
error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
@@ -221,7 +233,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
# Now delete the first item, abort the deletion, and make sure
# we're still sane.
- puts "\tTest0$tnum.g: Cursor delete first item, then abort delete."
+ puts "\tTest$tnum.g: Cursor delete first item, then abort delete."
set ctxn [$env txn -parent $txn]
error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
set curs [$db cursor -txn $ctxn]
@@ -235,7 +247,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
verify_t73 is_long dbc $keys $key
# Ditto, for the last item.
- puts "\tTest0$tnum.h: Cursor delete last item, then abort delete."
+ puts "\tTest$tnum.h: Cursor delete last item, then abort delete."
set ctxn [$env txn -parent $txn]
error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
set curs [$db cursor -txn $ctxn]
@@ -249,7 +261,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
verify_t73 is_long dbc $keys $key
# Ditto, for all the items.
- puts "\tTest0$tnum.i: Cursor delete all items, then abort delete."
+ puts "\tTest$tnum.i: Cursor delete all items, then abort delete."
set ctxn [$env txn -parent $txn]
error_check_good ctxn($i) [is_valid_txn $ctxn $env] TRUE
set curs [$db cursor -txn $ctxn]
@@ -268,7 +280,7 @@ proc test087 { method {pagesize 512} {ndups 50} {tnum 87} args } {
verify_t73 is_long dbc $keys $key
# Close cursors.
- puts "\tTest0$tnum.j: Closing cursors."
+ puts "\tTest$tnum.j: Closing cursors."
for { set i 0 } { $i < $keys } { incr i } {
error_check_good "dbc close ($i)" [$dbc($i) close] 0
}
diff --git a/db/test/test088.tcl b/db/test/test088.tcl
index d7b0f815a..0760053ef 100644
--- a/db/test/test088.tcl
+++ b/db/test/test088.tcl
@@ -1,17 +1,19 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test088.tcl,v 11.4 2000/12/11 17:24:55 sue Exp $
+# $Id: test088.tcl,v 11.13 2003/01/08 05:54:07 bostic Exp $
#
-# Test088: Cursor stability across btree splits with very deep trees.
-# (Variant of test048, SR #2514.)
+# TEST test088
+# TEST Test of cursor stability across btree splits with very
+# TEST deep trees (a variant of test048). [#2514]
proc test088 { method args } {
global errorCode alphabet
source ./include.tcl
set tstn 088
+ set args [convert_args $method $args]
if { [is_btree $method] != 1 } {
puts "Test$tstn skipping for method $method."
@@ -33,6 +35,7 @@ proc test088 { method args } {
set flags ""
puts "\tTest$tstn.a: Create $method database."
+ set txnenv 0
set eindex [lsearch -exact $args "-env"]
#
# If we are using an env, then testfile should just be the db name.
@@ -44,12 +47,18 @@ proc test088 { method args } {
set testfile test$tstn.db
incr eindex
set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ }
+ set testdir [get_home $env]
}
set t1 $testdir/t1
cleanup $testdir $env
- set ps 512
- set oflags "-create -pagesize $ps -truncate -mode 0644 $args $method"
+ set ps 512
+ set txn ""
+ set oflags "-create -pagesize $ps -mode 0644 $args $method"
set db [eval {berkdb_open} $oflags $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
@@ -58,45 +67,62 @@ proc test088 { method args } {
#
puts "\tTest$tstn.b: Fill page with $nkeys small key/data pairs."
for { set i 0 } { $i < $nkeys } { incr i } {
- set ret [$db put ${key}00000$i $data$i]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {${key}00000$i $data$i}]
error_check_good dbput $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
# get db ordering, set cursors
puts "\tTest$tstn.c: Set cursors on each of $nkeys pairs."
+ # if mkeys is above 1000, need to adjust below for lexical order
+ set mkeys 30000
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set mkeys 300
+ }
for {set i 0; set ret [$db get ${key}00000$i]} {\
$i < $nkeys && [llength $ret] != 0} {\
incr i; set ret [$db get ${key}00000$i]} {
set key_set($i) [lindex [lindex $ret 0] 0]
set data_set($i) [lindex [lindex $ret 0] 1]
- set dbc [$db cursor]
+ set dbc [eval {$db cursor} $txn]
set dbc_set($i) $dbc
error_check_good db_cursor:$i [is_substr $dbc_set($i) $db] 1
set ret [$dbc_set($i) get -set $key_set($i)]
error_check_bad dbc_set($i)_get:set [llength $ret] 0
}
- # if mkeys is above 1000, need to adjust below for lexical order
- set mkeys 30000
puts "\tTest$tstn.d: Add $mkeys pairs to force splits."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 10000 } {
- set ret [$db put ${key}0$i $data$i]
+ set ret [eval {$db put} $txn {${key}0$i $data$i}]
} elseif { $i >= 1000 } {
- set ret [$db put ${key}00$i $data$i]
+ set ret [eval {$db put} $txn {${key}00$i $data$i}]
} elseif { $i >= 100 } {
- set ret [$db put ${key}000$i $data$i]
+ set ret [eval {$db put} $txn {${key}000$i $data$i}]
} elseif { $i >= 10 } {
- set ret [$db put ${key}0000$i $data$i]
+ set ret [eval {$db put} $txn {${key}0000$i $data$i}]
} else {
- set ret [$db put ${key}00000$i $data$i]
+ set ret [eval {$db put} $txn {${key}00000$i $data$i}]
}
error_check_good dbput:more $ret 0
}
puts "\tTest$tstn.e: Make sure splits happened."
- error_check_bad stat:check-split [is_substr [$db stat] \
- "{{Internal pages} 0}"] 1
+ # XXX cannot execute stat in presence of txns and cursors.
+ if { $txnenv == 0 } {
+ error_check_bad stat:check-split [is_substr [$db stat] \
+ "{{Internal pages} 0}"] 1
+ }
puts "\tTest$tstn.f: Check to see that cursors maintained reference."
for {set i 0} { $i < $nkeys } {incr i} {
@@ -110,16 +136,17 @@ proc test088 { method args } {
puts "\tTest$tstn.g: Delete added keys to force reverse splits."
for {set i $nkeys} { $i < $mkeys } { incr i } {
if { $i >= 10000 } {
- error_check_good db_del:$i [$db del ${key}0$i] 0
+ set ret [eval {$db del} $txn {${key}0$i}]
} elseif { $i >= 1000 } {
- error_check_good db_del:$i [$db del ${key}00$i] 0
+ set ret [eval {$db del} $txn {${key}00$i}]
} elseif { $i >= 100 } {
- error_check_good db_del:$i [$db del ${key}000$i] 0
+ set ret [eval {$db del} $txn {${key}000$i}]
} elseif { $i >= 10 } {
- error_check_good db_del:$i [$db del ${key}0000$i] 0
+ set ret [eval {$db del} $txn {${key}0000$i}]
} else {
- error_check_good db_del:$i [$db del ${key}00000$i] 0
+ set ret [eval {$db del} $txn {${key}00000$i}]
}
+ error_check_good dbput:more $ret 0
}
puts "\tTest$tstn.h: Verify cursor reference."
@@ -136,6 +163,9 @@ proc test088 { method args } {
for {set i 0} { $i < $nkeys } {incr i} {
error_check_good dbc_close:$i [$dbc_set($i) close] 0
}
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good dbclose [$db close] 0
puts "\tTest$tstn complete."
diff --git a/db/test/test089.tcl b/db/test/test089.tcl
index 776772050..5b229137d 100644
--- a/db/test/test089.tcl
+++ b/db/test/test089.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test089.tcl,v 11.2 2002/08/08 15:38:12 bostic Exp
+# $Id: test089.tcl,v 11.8 2003/09/04 23:41:17 bostic Exp $
#
# TEST test089
# TEST Concurrent Data Store test (CDB)
@@ -55,7 +55,7 @@ proc test089 { method {nentries 1000} args } {
set count 0
# Here is the loop where we put each key/data pair
- puts "\tTest089.a: put loop"
+ puts "\tTest089.a: Put loop"
set did [open $dict]
while { [gets $did str] != -1 && $count < $nentries } {
if { [is_record_based $method] == 1 } {
@@ -85,13 +85,53 @@ proc test089 { method {nentries 1000} args } {
set env [eval {berkdb_env_noerr -create -cdb} $encargs -home $testdir]
error_check_good dbenv [is_valid_widget $env env] TRUE
- # This tests the failure found in #1923
- puts "\tTest089.b: test delete then get"
+ puts "\tTest089.b: CDB cursor dups"
set db1 [eval {berkdb_open_noerr -env $env -create \
-mode 0644 $omethod} $oargs {$testfile1}]
error_check_good dbopen [is_valid_db $db1] TRUE
+ # Create a read-only cursor and make sure we can't write with it.
+ set dbcr [$db1 cursor]
+ error_check_good dbcursor [is_valid_cursor $dbcr $db1] TRUE
+ set ret [$dbcr get -first]
+ catch { [$dbcr put -current data] } ret
+ error_check_good is_read_only \
+ [is_substr $ret "Write attempted on read-only cursor"] 1
+ error_check_good dbcr_close [$dbcr close] 0
+
+ # Create a write cursor and duplicate it.
+ set dbcw [$db1 cursor -update]
+ error_check_good dbcursor [is_valid_cursor $dbcw $db1] TRUE
+ set dup_dbcw [$dbcw dup]
+ error_check_good dup_write_cursor [is_valid_cursor $dup_dbcw $db1] TRUE
+
+ # Position both cursors at get -first. They should find the same data.
+ set get_first [$dbcw get -first]
+ set get_first_dup [$dup_dbcw get -first]
+ error_check_good dup_read $get_first $get_first_dup
+
+ # Test that the write cursors can both write and that they
+ # read each other's writes correctly. First write reversed
+ # datastr with original cursor and read with dup cursor.
+ error_check_good put_current_orig \
+ [$dbcw put -current [chop_data $method [reverse $datastr]]] 0
+ set reversed [$dup_dbcw get -current]
+ error_check_good check_with_dup [lindex [lindex $reversed 0] 1] \
+ [chop_data $method [reverse $datastr]]
+
+ # Write forward datastr with dup cursor and read with original.
+ error_check_good put_current_dup \
+ [$dup_dbcw put -current [chop_data $method $datastr]] 0
+ set forward [$dbcw get -current]
+ error_check_good check_with_orig $forward $get_first
+
+ error_check_good dbcw_close [$dbcw close] 0
+ error_check_good dup_dbcw_close [$dup_dbcw close] 0
+
+ # This tests the failure found in #1923
+ puts "\tTest089.c: Test delete then get"
+
set dbc [$db1 cursor -update]
error_check_good dbcursor [is_valid_cursor $dbc $db1] TRUE
@@ -100,23 +140,6 @@ proc test089 { method {nentries 1000} args } {
error_check_good dbcdel [$dbc del] 0
}
error_check_good dbc_close [$dbc close] 0
-
- puts "\tTest089.c: CDB cursor dups"
- set dbc [$db1 cursor -update]
- error_check_good dbcursor [is_valid_cursor $dbc $db1] TRUE
- set stat [catch {$dbc dup} ret]
- error_check_bad wr_cdup_stat $stat 0
- error_check_good wr_cdup [is_substr $ret \
- "Cannot duplicate writeable cursor"] 1
-
- set dbc_ro [$db1 cursor]
- error_check_good dbcursor [is_valid_cursor $dbc_ro $db1] TRUE
- set dup_dbc [$dbc_ro dup]
- error_check_good rd_cdup [is_valid_cursor $dup_dbc $db1] TRUE
-
- error_check_good dbc_close [$dbc close] 0
- error_check_good dbc_close [$dbc_ro close] 0
- error_check_good dbc_close [$dup_dbc close] 0
error_check_good db_close [$db1 close] 0
error_check_good env_close [$env close] 0
@@ -136,7 +159,6 @@ proc test089 { method {nentries 1000} args } {
}
proc test089_dup { testdir encargs oargs method nentries } {
-
env_cleanup $testdir
set env [eval {berkdb_env -create -cdb} $encargs -home $testdir]
error_check_good dbenv [is_valid_env $env] TRUE
@@ -157,7 +179,7 @@ proc test089_dup { testdir encargs oargs method nentries } {
puts "\tTest089.e: Fill page with $nkeys keys, with $nentries dups"
for { set k 0 } { $k < $nkeys } { incr k } {
for { set i 0 } { $i < $nentries } { incr i } {
- set ret [$db put $key $i$data$k]
+ set ret [$db put $key$k $i$data$k]
error_check_good dbput $ret 0
}
}
@@ -166,15 +188,77 @@ proc test089_dup { testdir encargs oargs method nentries } {
set stat [$db stat]
error_check_bad stat:offpage [is_substr $stat "{{Internal pages} 0}"] 1
- set dbc [$db cursor -update]
- error_check_good dbcursor [is_valid_cursor $dbc $db] TRUE
+ # This tests the failure reported in #6950. Skip for -dupsort.
+ puts "\tTest089.f: Clear locks for duped off-page dup cursors."
+ if { [is_substr $oargs dupsort] != 1 } {
+ # Create a read cursor, put it on an off-page dup.
+ set dbcr [$db cursor]
+ error_check_good dbcr [is_valid_cursor $dbcr $db] TRUE
+ set offpage [$dbcr get -get_both test089_key4 900data4]
+ error_check_bad offpage [llength $offpage] 0
- puts "\tTest089.f: test delete then get of off-page dups"
- for {set kd [$dbc get -first] } { [llength $kd] != 0 } \
- {set kd [$dbc get -next] } {
- error_check_good dbcdel [$dbc del] 0
+ # Create a write cursor, put it on an off-page dup.
+ set dbcw [$db cursor -update]
+ error_check_good dbcw [is_valid_cursor $dbcw $db] TRUE
+ set offpage [$dbcw get -get_both test089_key3 900data3]
+ error_check_bad offpage [llength $offpage] 0
+
+ # Add a new item using the write cursor, then close the cursor.
+ error_check_good add_dup [$dbcw put -after $data] 0
+ error_check_good close_dbcw [$dbcw close] 0
+
+ # Get next dup with read cursor, then close the cursor.
+ set nextdup [$dbcr get -nextdup]
+ error_check_good close_dbcr [$dbcr close] 0
}
- error_check_good dbc_close [$dbc close] 0
+
+ puts "\tTest089.g: CDB duplicate write cursors with off-page dups"
+ # Create a write cursor and duplicate it.
+ set dbcw [$db cursor -update]
+ error_check_good dbcursor [is_valid_cursor $dbcw $db] TRUE
+ set dup_dbcw [$dbcw dup]
+ error_check_good dup_write_cursor [is_valid_cursor $dup_dbcw $db] TRUE
+
+ # Position both cursors at get -first. They should find the same data.
+ set get_first [$dbcw get -first]
+ set get_first_dup [$dup_dbcw get -first]
+ error_check_good dup_read $get_first $get_first_dup
+
+ # Test with -after and -before. Skip for -dupsort.
+ if { [is_substr $oargs dupsort] != 1 } {
+ # Original and duplicate cursors both point to first item.
+ # Do a put -before of new string with original cursor,
+ # and a put -after of new string with duplicate cursor.
+ set newdata "newdata"
+ error_check_good put_before [$dbcw put -before $newdata] 0
+ error_check_good put_after [$dup_dbcw put -after $newdata] 0
+
+ # Now walk forward with original cursor ...
+ set first [$dbcw get -first]
+ error_check_good check_first [lindex [lindex $first 0] 1] $newdata
+ set next1 [$dbcw get -next]
+ error_check_good check_next1 $next1 $get_first
+ set next2 [$dbcw get -next]
+ error_check_good check_next2 [lindex [lindex $next2 0] 1] $newdata
+
+ # ... and backward with duplicate cursor.
+ set current [$dup_dbcw get -current]
+ error_check_good check_current [lindex [lindex $current 0] 1] $newdata
+ set prev1 [$dup_dbcw get -prev]
+ error_check_good check_prev1 $prev1 $get_first
+ set prev2 [$dup_dbcw get -prev]
+ error_check_good check_prev2 [lindex [lindex $prev2 0] 1] $newdata
+ }
+
+ puts "\tTest089.h: test delete then get of off-page dups"
+ for {set kd [$dbcw get -first] } { [llength $kd] != 0 } \
+ {set kd [$dbcw get -next] } {
+ error_check_good dbcdel [$dbcw del] 0
+ }
+
+ error_check_good dbcw_close [$dbcw close] 0
+ error_check_good dup_dbcw_close [$dup_dbcw close] 0
+
error_check_good db_close [$db close] 0
error_check_good env_close [$env close] 0
}
diff --git a/db/test/test090.tcl b/db/test/test090.tcl
index ed6ec9632..7b2a9ce17 100644
--- a/db/test/test090.tcl
+++ b/db/test/test090.tcl
@@ -1,20 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test090.tcl,v 11.4 2000/12/11 17:24:56 sue Exp $
+# $Id: test090.tcl,v 11.14 2003/08/28 19:59:15 sandstro Exp $
#
-# DB Test 90 {access method}
-# Check for functionality near the end of the queue.
-#
-#
-proc test090 { method {nentries 1000} {txn -txn} {tnum "90"} args} {
+# TEST test090
+# TEST Test for functionality near the end of the queue using test001.
+proc test090 { method {nentries 10000} {tnum "090"} args} {
if { [is_queueext $method ] == 0 } {
- puts "Skipping test0$tnum for $method."
+ puts "Skipping test$tnum for $method."
return;
}
- eval {test001 $method $nentries 4294967000 $tnum} $args
- eval {test025 $method $nentries 4294967000 $tnum} $args
- eval {test070 $method 4 2 $nentries WAIT 4294967000 $txn $tnum} $args
+ eval {test001 $method $nentries 4294967000 0 $tnum} $args
}
diff --git a/db/test/test091.tcl b/db/test/test091.tcl
index 9420b571c..c2a7a1d84 100644
--- a/db/test/test091.tcl
+++ b/db/test/test091.tcl
@@ -1,15 +1,14 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: test091.tcl,v 11.4 2000/12/01 04:28:36 ubell Exp $
-#
-# DB Test 91 {access method}
-# Check for CONSUME_WAIT functionality
+# $Id: test091.tcl,v 11.9 2003/01/08 05:54:09 bostic Exp $
#
+# TEST test091
+# TEST Test of DB_CONSUME_WAIT.
proc test091 { method {nconsumers 4} \
- {nproducers 2} {nitems 1000} {start 0 } {tnum "91"} args} {
+ {nproducers 2} {nitems 1000} {start 0 } {tnum "091"} args} {
if { [is_queue $method ] == 0 } {
puts "Skipping test0$tnum for $method."
return;
diff --git a/db/test/test092.tcl b/db/test/test092.tcl
index 5c35aaa2b..4ec1f25c6 100644
--- a/db/test/test092.tcl
+++ b/db/test/test092.tcl
@@ -1,18 +1,18 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test092.tcl,v 11.2 2001/05/04 19:14:05 sue Exp
+# $Id: test092.tcl,v 11.14 2003/01/08 05:54:09 bostic Exp $
#
-# DB Test 92 {access method}
-#
-# Test DB_DIRTY_READ
-# We set up a database with nentries in it. We then open the database
-# read-only twice. One with dirty read and one without. We open the
-# database for writing and update some entries in it. Then read those
-# new entries via db->get (clean and dirty), and via cursors (clean and
-# dirty).
+# TEST test092
+# TEST Test of DB_DIRTY_READ [#3395]
+# TEST
+# TEST We set up a database with nentries in it. We then open the
+# TEST database read-only twice. One with dirty read and one without.
+# TEST We open the database for writing and update some entries in it.
+# TEST Then read those new entries via db->get (clean and dirty), and
+# TEST via cursors (clean and dirty).
proc test092 { method {nentries 1000} args } {
source ./include.tcl
#
@@ -25,6 +25,8 @@ proc test092 { method {nentries 1000} args } {
return
}
set args [convert_args $method $args]
+ set encargs ""
+ set args [split_encargs $args encargs]
set omethod [convert_method $method]
puts "Test092: Dirty Read Test $method $nentries"
@@ -38,11 +40,13 @@ proc test092 { method {nentries 1000} args } {
env_cleanup $testdir
set lmax [expr $nentries * 2]
- set env [berkdb env -create -lock_max_locks $lmax -txn -home $testdir]
+ set lomax [expr $nentries * 2]
+ set env [eval {berkdb_env -create -txn} $encargs -home $testdir \
+ -lock_max_locks $lmax -lock_max_objects $lomax]
error_check_good dbenv [is_valid_env $env] TRUE
set db [eval {berkdb_open -env $env -create \
- -mode 0644 $omethod} {$testfile}]
+ -mode 0644 $omethod} $args {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
# Here is the loop where we put each key/data pair.
@@ -84,34 +88,33 @@ proc test092 { method {nentries 1000} args } {
set tdr [$env txn -dirty]
error_check_good txnbegin:dr [is_valid_txn $tdr $env] TRUE
-
- set dbtxn [eval {berkdb_open -env $env -dirty \
+ set dbtxn [eval {berkdb_open -auto_commit -env $env -dirty \
-mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbtxn [is_valid_db $dbtxn] TRUE
- set dbcl [eval {berkdb_open -env $env \
+ set dbcl [eval {berkdb_open -auto_commit -env $env \
-rdonly -mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbcl [is_valid_db $dbcl] TRUE
- set dbdr [eval {berkdb_open -env $env -dirty \
+ set dbdr [eval {berkdb_open -auto_commit -env $env -dirty \
-rdonly -mode 0644 $omethod} {$testfile}]
error_check_good dbopen:dbdr [is_valid_db $dbdr] TRUE
set dbccl [$dbcl cursor -txn $tdr]
error_check_good dbcurs:dbcl [is_valid_cursor $dbccl $dbcl] TRUE
-
+
set dbcdr0 [$dbdr cursor]
error_check_good dbcurs:dbdr0 [is_valid_cursor $dbcdr0 $dbdr] TRUE
-
+
set dbcdr1 [$dbdr cursor -dirty]
error_check_good dbcurs:dbdr1 [is_valid_cursor $dbcdr1 $dbdr] TRUE
-
+
#
# Now that we have all of our handles, change all the data in there
# to be the key and data the same, but data is capitalized.
puts "\tTest092.c: put/get data within a txn"
set gflags ""
- if { [is_record_based $method] == 1 } {
+ if { [is_record_based $method] == 1 } {
set checkfunc test092dr_recno.check
append gflags " -recno"
} else {
@@ -172,20 +175,20 @@ proc test092 { method {nentries 1000} args } {
#
# Now abort the modifying transaction and rerun the data checks.
- #
+ #
puts "\tTest092.g: Aborting the write-txn"
error_check_good txnabort [$t abort] 0
set dbccl [$dbcl cursor -txn $tdr]
error_check_good dbcurs:dbcl [is_valid_cursor $dbccl $dbcl] TRUE
-
+
set dbcdr0 [$dbdr cursor]
error_check_good dbcurs:dbdr0 [is_valid_cursor $dbcdr0 $dbdr] TRUE
-
+
set dbcdr1 [$dbdr cursor -dirty]
error_check_good dbcurs:dbdr1 [is_valid_cursor $dbcdr1 $dbdr] TRUE
-
- if { [is_record_based $method] == 1 } {
+
+ if { [is_record_based $method] == 1 } {
set checkfunc test092cl_recno.check
} else {
set checkfunc test092cl.check
@@ -214,7 +217,7 @@ proc test092 { method {nentries 1000} args } {
# Clean checks mean keys and data are identical.
# Dirty checks mean data are uppercase versions of keys.
proc test092cl.check { key data } {
- error_check_good "key/data mismatch" $key $data
+ error_check_good "key/data mismatch" $key $data
}
proc test092cl_recno.check { key data } {
@@ -225,7 +228,7 @@ proc test092cl_recno.check { key data } {
}
proc test092dr.check { key data } {
- error_check_good "key/data mismatch" $key [string tolower $data]
+ error_check_good "key/data mismatch" $key [string tolower $data]
}
proc test092dr_recno.check { key data } {
@@ -233,6 +236,6 @@ proc test092dr_recno.check { key data } {
error_check_good key"$key"_exists [info exists kvals($key)] 1
error_check_good "key/data mismatch, key $key" $data \
- [string touppper $kvals($key)]
+ [string toupper $kvals($key)]
}
diff --git a/db/test/test093.tcl b/db/test/test093.tcl
index 2168f9977..b1ff31d6a 100644
--- a/db/test/test093.tcl
+++ b/db/test/test093.tcl
@@ -1,30 +1,53 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test093.tcl,v 11.6 2001/05/07 13:42:41 krinsky Exp
+# $Id: test093.tcl,v 11.22 2003/01/08 05:54:10 bostic Exp $
#
-# DB Test 93 {access method}
-# Test bt comparison proc.
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc test093 { method {nentries 10000} {tnum "93"} args} {
+# TEST test093
+# TEST Test using set_bt_compare.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+proc test093 { method {nentries 10000} {tnum "093"} args} {
source ./include.tcl
global btvals
global btvalsck
+ global errorInfo
set dbargs [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: $method ($args) $nentries using btcompare"
-
if { [is_btree $method] != 1 } {
- puts "Skipping for method $method."
+ puts "Test$tnum: skipping for method $method."
return
}
+ set txnenv 0
+ set eindex [lsearch -exact $dbargs "-env"]
+ if { $eindex != -1 } {
+ set testfile test$tnum.db
+ incr eindex
+ set env [lindex $dbargs $eindex]
+ set rpcenv [is_rpcenv $env]
+ if { $rpcenv == 1 } {
+ puts "Test$tnum: skipping for RPC"
+ return
+ }
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append dbargs " -auto_commit "
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ cleanup $testdir $env
+ }
+ puts "Test$tnum: $method ($args) $nentries using btcompare"
+
test093_run $omethod $dbargs $nentries $tnum test093_cmp1 test093_sort1
test093_runbig $omethod $dbargs $nentries $tnum \
@@ -42,7 +65,9 @@ proc test093 { method {nentries 10000} {tnum "93"} args} {
if { $eindex == -1 } {
set env NULL
} else {
+ incr eindex
set env [lindex $dbargs $eindex]
+ set testdir [get_home $env]
}
cleanup $testdir $env
}
@@ -52,24 +77,26 @@ proc test093_run { method dbargs nentries tnum cmpfunc sortfunc } {
global btvals
global btvalsck
-
# Create the database and open the dictionary
set eindex [lsearch -exact $dbargs "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ set txnenv 0
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $dbargs $eindex]
+ set txnenv [is_txnenv $env]
+ set testdir [get_home $env]
}
cleanup $testdir $env
set db [eval {berkdb_open -btcompare $cmpfunc \
- -create -truncate -mode 0644} $method $dbargs $testfile]
+ -create -mode 0644} $method $dbargs $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -82,15 +109,23 @@ proc test093_run { method dbargs nentries tnum cmpfunc sortfunc } {
set btvals {}
set btvalsck {}
set checkfunc test093_check
- puts "\tTest0$tnum.a: put/get loop"
+ puts "\tTest$tnum.a: put/get loop"
# Here is the loop where we put and get each key/data pair
set count 0
while { [gets $did str] != -1 && $count < $nentries } {
set key $str
set str [reverse $str]
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval \
{$db put} $txn $pflags {$key [chop_data $method $str]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
lappend btvals $key
@@ -103,8 +138,16 @@ proc test093_run { method dbargs nentries tnum cmpfunc sortfunc } {
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: dump file"
+ puts "\tTest$tnum.b: dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
# Now compare the keys to see if they match the dictionary (or ints)
@@ -114,10 +157,10 @@ proc test093_run { method dbargs nentries tnum cmpfunc sortfunc } {
file rename -force $t3 $t2
filesort $t1 $t3
- error_check_good Test0$tnum:diff($t3,$t2) \
+ error_check_good Test$tnum:diff($t3,$t2) \
[filecmp $t3 $t2] 0
- puts "\tTest0$tnum.c: dump file in order"
+ puts "\tTest$tnum.c: dump file in order"
# Now, reopen the file and run the last test again.
# We open it here, ourselves, because all uses of the db
# need to have the correct comparison func set. Then
@@ -126,13 +169,21 @@ proc test093_run { method dbargs nentries tnum cmpfunc sortfunc } {
set db [eval {berkdb_open -btcompare $cmpfunc -rdonly} \
$dbargs $method $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file_direction $db $txn $t1 $checkfunc "-first" "-next"
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
#
# We need to sort btvals according to the comparison function.
# Once that is done, btvalsck and btvals should be the same.
- puts "\tTest0$tnum.d: check file order"
+ puts "\tTest$tnum.d: check file order"
$sortfunc
@@ -148,39 +199,44 @@ proc test093_runbig { method dbargs nentries tnum cmpfunc sortfunc } {
global btvals
global btvalsck
-
# Create the database and open the dictionary
set eindex [lsearch -exact $dbargs "-env"]
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
+ set txnenv 0
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum.db
incr eindex
set env [lindex $dbargs $eindex]
+ set txnenv [is_txnenv $env]
+ set testdir [get_home $env]
}
cleanup $testdir $env
set db [eval {berkdb_open -btcompare $cmpfunc \
- -create -truncate -mode 0644} $method $dbargs $testfile]
+ -create -mode 0644} $method $dbargs $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
set t4 $testdir/t4
+ set t5 $testdir/t5
set pflags ""
set gflags ""
set txn ""
set btvals {}
set btvalsck {}
set checkfunc test093_checkbig
- puts "\tTest0$tnum.e: big key put/get loop key=filecontents data=filename"
+ puts "\tTest$tnum.e:\
+ big key put/get loop key=filecontents data=filename"
+
# Here is the loop where we put and get each key/data pair
- set file_list [glob ../*/*.c ./libdb.so.3.0 ./libtool ./libtool.exe]
+ set file_list [get_file_list 1]
set count 0
foreach f $file_list {
@@ -189,13 +245,28 @@ proc test093_runbig { method dbargs nentries tnum cmpfunc sortfunc } {
set key [read $fid]
close $fid
+ set key $f$key
+
+ set fcopy [open $t5 w]
+ fconfigure $fcopy -translation binary
+ puts -nonewline $fcopy $key
+ close $fcopy
+
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} $txn $pflags {$key \
[chop_data $method $f]}]
error_check_good put_file $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
lappend btvals $key
- # Should really catch errors
+ # Should really catch errors
set fid [open $t4 w]
fconfigure $fid -translation binary
if [catch {eval {$db get} $gflags {$key}} data] {
@@ -207,18 +278,26 @@ proc test093_runbig { method dbargs nentries tnum cmpfunc sortfunc } {
}
close $fid
error_check_good \
- Test093:diff($f,$t4) [filecmp $f $t4] 0
+ Test093:diff($t5,$t4) [filecmp $t5 $t4] 0
incr count
}
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.f: big dump file"
+ puts "\tTest$tnum.f: big dump file"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file $db $txn $t1 $checkfunc
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
- puts "\tTest0$tnum.g: dump file in order"
+ puts "\tTest$tnum.g: dump file in order"
# Now, reopen the file and run the last test again.
# We open it here, ourselves, because all uses of the db
# need to have the correct comparison func set. Then
@@ -228,13 +307,21 @@ proc test093_runbig { method dbargs nentries tnum cmpfunc sortfunc } {
set db [eval {berkdb_open -btcompare $cmpfunc -rdonly} \
$dbargs $method $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dump_file_direction $db $txn $t1 $checkfunc "-first" "-next"
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
#
# We need to sort btvals according to the comparison function.
# Once that is done, btvalsck and btvals should be the same.
- puts "\tTest0$tnum.h: check file order"
+ puts "\tTest$tnum.h: check file order"
$sortfunc
error_check_good btvals:len [llength $btvals] [llength $btvalsck]
@@ -291,7 +378,7 @@ proc test093_check { key data } {
lappend btvalsck $key
}
-# Check function for test093 big keys;
+# Check function for test093 big keys;
proc test093_checkbig { key data } {
source ./include.tcl
global btvalsck
@@ -300,7 +387,7 @@ proc test093_checkbig { key data } {
fconfigure $fid -translation binary
set cont [read $fid]
close $fid
- error_check_good "key/data mismatch" $key $cont
+ error_check_good "key/data mismatch" $key $data$cont
lappend btvalsck $key
}
diff --git a/db/test/test094.tcl b/db/test/test094.tcl
index a673bb182..1f4cd558a 100644
--- a/db/test/test094.tcl
+++ b/db/test/test094.tcl
@@ -1,46 +1,64 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2001
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test094.tcl,v 11.2 2001/05/07 13:42:41 krinsky Exp
+# $Id: test094.tcl,v 11.19 2003/10/17 13:38:19 sandstro Exp $
#
-# DB Test 94 {access method}
-# Test bt comparison proc.
-# Use the first 10,000 entries from the dictionary.
-# Insert each with self as key and data; retrieve each.
-# After all are entered, retrieve all; compare output to original.
-# Close file, reopen, do retrieve and re-verify.
-proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
+# TEST test094
+# TEST Test using set_dup_compare.
+# TEST
+# TEST Use the first 10,000 entries from the dictionary.
+# TEST Insert each with self as key and data; retrieve each.
+# TEST After all are entered, retrieve all; compare output to original.
+# TEST Close file, reopen, do retrieve and re-verify.
+proc test094 { method {nentries 10000} {ndups 10} {tnum "094"} args} {
source ./include.tcl
+ global errorInfo
set dbargs [convert_args $method $args]
set omethod [convert_method $method]
- puts "Test0$tnum: $method ($args) $ndups dups using dupcompare"
-
if { [is_btree $method] != 1 && [is_hash $method] != 1 } {
- puts "Skipping for method $method."
+ puts "Test$tnum: skipping for method $method."
return
}
- # Create the database and open the dictionary
+ set txnenv 0
set eindex [lsearch -exact $dbargs "-env"]
+ # Create the database and open the dictionary
#
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set testfile $testdir/test0$tnum.db
+ set testfile $testdir/test$tnum-a.db
set env NULL
} else {
- set testfile test0$tnum.db
+ set testfile test$tnum-a.db
incr eindex
set env [lindex $dbargs $eindex]
+ set rpcenv [is_rpcenv $env]
+ if { $rpcenv == 1 } {
+ puts "Test$tnum: skipping for RPC"
+ return
+ }
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append dbargs " -auto_commit "
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ reduce_dups nentries ndups
+ }
+ set testdir [get_home $env]
}
+ puts "Test$tnum: $method ($args) $nentries \
+ with $ndups dups using dupcompare"
+
cleanup $testdir $env
- set db [eval {berkdb_open -dupcompare test094_cmp -dup -dupsort \
- -create -truncate -mode 0644} $omethod $dbargs $testfile]
+ set db [eval {berkdb_open_noerr -dupcompare test094_cmp \
+ -dup -dupsort -create -mode 0644} $omethod $dbargs {$testfile}]
error_check_good dbopen [is_valid_db $db] TRUE
set did [open $dict]
@@ -48,7 +66,7 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
set pflags ""
set gflags ""
set txn ""
- puts "\tTest0$tnum.a: $nentries put/get duplicates loop"
+ puts "\tTest$tnum.a: $nentries put/get duplicates loop"
# Here is the loop where we put and get each key/data pair
set count 0
set dlist {}
@@ -59,9 +77,17 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
set key $str
for {set i 0} {$i < $ndups} {incr i} {
set data $i:$str
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $omethod $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
set ret [eval {$db get} $gflags {$key}]
@@ -71,20 +97,44 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
close $did
# Now we will get each key from the DB and compare the results
# to the original.
- puts "\tTest0$tnum.b: traverse checking duplicates before close"
+ puts "\tTest$tnum.b: traverse checking duplicates before close"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
+ # Set up second testfile so truncate flag is not needed.
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/test$tnum-b.db
+ set env NULL
+ } else {
+ set testfile test$tnum-b.db
+ set env [lindex $dbargs $eindex]
+ set testdir [get_home $env]
+ }
+ cleanup $testdir $env
+
#
# Test dupcompare with data items big enough to force offpage dups.
#
- puts "\tTest0$tnum.c: big key put/get dup loop key=filename data=filecontents"
+ puts "\tTest$tnum.c: big key put/get dup loop key=filename data=filecontents"
set db [eval {berkdb_open -dupcompare test094_cmp -dup -dupsort \
- -create -truncate -mode 0644} $omethod $dbargs $testfile]
+ -create -mode 0644} $omethod $dbargs $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
# Here is the loop where we put and get each key/data pair
- set file_list [glob ../*/*.c ./libdb.so.3.0 ./libtool ./libtool.exe]
+ set file_list [get_file_list 1]
+ if { [llength $file_list] > $nentries } {
+ set file_list [lrange $file_list 1 $nentries]
+ }
set count 0
foreach f $file_list {
@@ -96,9 +146,17 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
set key $f
for {set i 0} {$i < $ndups} {incr i} {
set data $i:$cont
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
set ret [eval {$db put} \
$txn $pflags {$key [chop_data $omethod $data]}]
error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
}
set ret [eval {$db get} $gflags {$key}]
@@ -106,8 +164,17 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
incr count
}
- puts "\tTest0$tnum.d: traverse checking duplicates before close"
+ puts "\tTest$tnum.d: traverse checking duplicates before close"
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
dup_file_check $db $txn $t1 $dlist
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ set testdir [get_home $env]
+ }
error_check_good db_close [$db close] 0
# Clean up the test directory, since there's currently
@@ -120,65 +187,3 @@ proc test094 { method {nentries 10000} {ndups 10} {tnum "94"} args} {
proc test094_cmp { a b } {
return [string compare $b $a]
}
-
-# Check if each key appears exactly [llength dlist] times in the file with
-# the duplicate tags matching those that appear in dlist.
-proc test094_dup_big { db txn tmpfile dlist {extra 0}} {
- source ./include.tcl
-
- set outf [open $tmpfile w]
- # Now we will get each key from the DB and dump to outfile
- set c [eval {$db cursor} $txn]
- set lastkey ""
- set done 0
- while { $done != 1} {
- foreach did $dlist {
- set rec [$c get "-next"]
- if { [string length $rec] == 0 } {
- set done 1
- break
- }
- set key [lindex [lindex $rec 0] 0]
- set fulldata [lindex [lindex $rec 0] 1]
- set id [id_of $fulldata]
- set d [data_of $fulldata]
- if { [string compare $key $lastkey] != 0 && \
- $id != [lindex $dlist 0] } {
- set e [lindex $dlist 0]
- error "FAIL: \tKey \
- $key, expected dup id $e, got $id"
- }
- error_check_good dupget.data $d $key
- error_check_good dupget.id $id $did
- set lastkey $key
- }
- #
- # Some tests add an extra dup (like overflow entries)
- # Check id if it exists.
- if { $extra != 0} {
- set okey $key
- set rec [$c get "-next"]
- if { [string length $rec] != 0 } {
- set key [lindex [lindex $rec 0] 0]
- #
- # If this key has no extras, go back for
- # next iteration.
- if { [string compare $key $lastkey] != 0 } {
- set key $okey
- set rec [$c get "-prev"]
- } else {
- set fulldata [lindex [lindex $rec 0] 1]
- set id [id_of $fulldata]
- set d [data_of $fulldata]
- error_check_bad dupget.data1 $d $key
- error_check_good dupget.id1 $id $extra
- }
- }
- }
- if { $done != 1 } {
- puts $outf $key
- }
- }
- close $outf
- error_check_good curs_close [$c close] 0
-}
diff --git a/db/test/test095.tcl b/db/test/test095.tcl
index 61d20f05e..8f26b08dd 100644
--- a/db/test/test095.tcl
+++ b/db/test/test095.tcl
@@ -1,14 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2002
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test095.tcl,v 11.16 2002/08/08 15:38:12 bostic Exp
+# $Id: test095.tcl,v 11.26 2003/09/11 14:12:34 sue Exp $
#
# TEST test095
-# TEST Bulk get test. [#2934]
-proc test095 { method {nsets 1000} {noverflows 25} {tnum 95} args } {
+# TEST Bulk get test for methods supporting dups. [#2934]
+proc test095 { method {tnum "095"} args } {
+ global is_qnx_test
source ./include.tcl
+
set args [convert_args $method $args]
set omethod [convert_method $method]
@@ -18,13 +20,13 @@ proc test095 { method {nsets 1000} {noverflows 25} {tnum 95} args } {
# If we are using an env, then testfile should just be the db name.
# Otherwise it is the test directory and the name.
if { $eindex == -1 } {
- set basename $testdir/test0$tnum
+ set basename $testdir/test$tnum
set env NULL
# If we've our own env, no reason to swap--this isn't
# an mpool test.
set carg { -cachesize {0 25000000 0} }
} else {
- set basename test0$tnum
+ set basename test$tnum
incr eindex
set env [lindex $args $eindex]
set txnenv [is_txnenv $env]
@@ -37,37 +39,77 @@ proc test095 { method {nsets 1000} {noverflows 25} {tnum 95} args } {
}
cleanup $testdir $env
- puts "Test0$tnum: $method ($args) Bulk get test"
+ puts "Test$tnum: $method ($args) Bulk get test"
+ # Tcl leaves a lot of memory allocated after this test
+ # is run in the tclsh. This ends up being a problem on
+ # QNX runs as later tests then run out of memory.
+ if { $is_qnx_test } {
+ puts "Test$tnum skipping for QNX"
+ return
+ }
if { [is_record_based $method] == 1 || [is_rbtree $method] == 1 } {
- puts "Test0$tnum skipping for method $method"
+ puts "Test$tnum skipping for method $method"
return
}
+ # The test's success is dependent on the relationship between
+ # the amount of data loaded and the buffer sizes we pick, so
+ # these parameters don't belong on the command line.
+ set nsets 300
+ set noverflows 25
+
# We run the meat of the test twice: once with unsorted dups,
# once with sorted dups.
- for { set dflag "-dup"; set sort "unsorted"; set diter 0 } \
- { $diter < 2 } \
- { set dflag "-dup -dupsort"; set sort "sorted"; incr diter } {
+ foreach { dflag sort } { -dup unsorted {-dup -dupsort} sorted } {
set testfile $basename-$sort.db
set did [open $dict]
# Open and populate the database with $nsets sets of dups.
# Each set contains as many dups as its number
- puts "\tTest0$tnum.a:\
+ puts "\tTest$tnum.a:\
Creating database with $nsets sets of $sort dups."
set dargs "$dflag $carg $args"
- set db [eval {berkdb_open -create} $omethod $dargs $testfile]
+ set db [eval {berkdb_open_noerr -create} \
+ $omethod $dargs $testfile]
error_check_good db_open [is_valid_db $db] TRUE
t95_populate $db $did $nsets 0
+ # Determine the pagesize so we can use it to size the buffer.
+ set stat [$db stat]
+ set pagesize [get_pagesize $stat]
+
# Run basic get tests.
- t95_gettest $db $tnum b [expr 8192] 1
- t95_gettest $db $tnum c [expr 10 * 8192] 0
+ #
+ # A small buffer will fail if it is smaller than the pagesize.
+ # Skip small buffer tests if the page size is so small that
+ # we can't define a buffer smaller than the page size.
+ # (Buffers must be 1024 or multiples of 1024.)
+ #
+ # A big buffer of 66560 (64K + 1K) should always be large
+ # enough to contain the data, so the test should succeed
+ # on all platforms. We picked this number because it
+ # is larger than the largest allowed pagesize, so the test
+ # always fills more than a page at some point.
+
+ set maxpage [expr 1024 * 64]
+ set bigbuf [expr $maxpage + 1024]
+ set smallbuf 1024
+
+ if { $pagesize > 1024 } {
+ t95_gettest $db $tnum b $smallbuf 1
+ } else {
+ puts "Skipping small buffer test Test$tnum.b"
+ }
+ t95_gettest $db $tnum c $bigbuf 0
# Run cursor get tests.
- t95_cgettest $db $tnum d [expr 100] 1
- t95_cgettest $db $tnum e [expr 10 * 8192] 0
+ if { $pagesize > 1024 } {
+ t95_cgettest $db $tnum b $smallbuf 1
+ } else {
+ puts "Skipping small buffer test Test$tnum.d"
+ }
+ t95_cgettest $db $tnum e $bigbuf 0
# Run invalid flag combination tests
# Sync and reopen test file so errors won't be sent to stderr
@@ -78,19 +120,23 @@ proc test095 { method {nsets 1000} {noverflows 25} {tnum 95} args } {
error_check_good noerrdb_close [$noerrdb close] 0
# Set up for overflow tests
- set max [expr 4000 * $noverflows]
- puts "\tTest0$tnum.h: Growing\
- database with $noverflows overflow sets (max item size $max)"
- t95_populate $db $did $noverflows 4000
-
- # Run overflow get tests.
- t95_gettest $db $tnum i [expr 10 * 8192] 1
- t95_gettest $db $tnum j [expr $max * 2] 1
+ set max [expr 4096 * $noverflows]
+ puts "\tTest$tnum.h: Add $noverflows overflow sets\
+ to database (max item size $max)"
+ t95_populate $db $did $noverflows 4096
+
+ # Run overflow get tests. The overflow test fails with
+ # our standard big buffer doubled, but succeeds with a
+ # buffer sized to handle $noverflows pairs of data of
+ # size $max.
+ t95_gettest $db $tnum i $bigbuf 1
+ t95_gettest $db $tnum j [expr $bigbuf * 2] 1
t95_gettest $db $tnum k [expr $max * $noverflows * 2] 0
# Run overflow cursor get tests.
- t95_cgettest $db $tnum l [expr 10 * 8192] 1
- t95_cgettest $db $tnum m [expr $max * 2] 0
+ t95_cgettest $db $tnum l $bigbuf 1
+ # Expand buffer to accommodate basekey as well as the padding.
+ t95_cgettest $db $tnum m [expr ($max + 512) * 2] 0
error_check_good db_close [$db close] 0
close $did
@@ -114,116 +160,138 @@ proc t95_cflagtest { db tnum letter bufsize } {
proc t95_gettest_body { db tnum letter bufsize expectfail usecursor } {
global errorCode
- if { $usecursor == 0 } {
- set action "db get -multi"
- } else {
- set action "dbc get -multi -set/-next"
- }
- puts "\tTest0$tnum.$letter: $action with bufsize $bufsize"
-
- set allpassed TRUE
- set saved_err ""
-
- # Cursor for $usecursor.
- if { $usecursor != 0 } {
- set getcurs [$db cursor]
- error_check_good getcurs [is_valid_cursor $getcurs $db] TRUE
- }
-
- # Traverse DB with cursor; do get/c_get(DB_MULTIPLE) on each item.
- set dbc [$db cursor]
- error_check_good is_valid_dbc [is_valid_cursor $dbc $db] TRUE
- for { set dbt [$dbc get -first] } { [llength $dbt] != 0 } \
- { set dbt [$dbc get -nextnodup] } {
- set key [lindex [lindex $dbt 0] 0]
- set datum [lindex [lindex $dbt 0] 1]
-
+ foreach flag { multi multi_key } {
if { $usecursor == 0 } {
- set ret [catch {eval $db get -multi $bufsize $key} res]
- } else {
- set res {}
- for { set ret [catch {eval $getcurs get -multi $bufsize\
- -set $key} tres] } \
- { $ret == 0 && [llength $tres] != 0 } \
- { set ret [catch {eval $getcurs get -multi $bufsize\
- -nextdup} tres]} {
- eval lappend res $tres
+ if { $flag == "multi_key" } {
+ # db->get does not allow multi_key
+ continue
+ } else {
+ set action "db get -$flag"
}
+ } else {
+ set action "dbc get -$flag -set/-next"
}
-
- # If we expect a failure, be more tolerant if the above fails;
- # just make sure it's an ENOMEM, mark it, and move along.
- if { $expectfail != 0 && $ret != 0 } {
- error_check_good multi_failure_errcode \
- [is_substr $errorCode ENOMEM] 1
- set allpassed FALSE
- continue
+ puts "\tTest$tnum.$letter: $action with bufsize $bufsize"
+ set allpassed TRUE
+ set saved_err ""
+
+ # Cursor for $usecursor.
+ if { $usecursor != 0 } {
+ set getcurs [$db cursor]
+ error_check_good getcurs [is_valid_cursor $getcurs $db] TRUE
}
- error_check_good get_multi($key) $ret 0
- t95_verify $res FALSE
- }
- set ret [catch {eval $db get -multi $bufsize} res]
+ # Traverse DB with cursor; do get/c_get($flag) on each item.
+ set dbc [$db cursor]
+ error_check_good is_valid_dbc [is_valid_cursor $dbc $db] TRUE
+ for { set dbt [$dbc get -first] } { [llength $dbt] != 0 } \
+ { set dbt [$dbc get -nextnodup] } {
+ set key [lindex [lindex $dbt 0] 0]
+ set datum [lindex [lindex $dbt 0] 1]
+
+ if { $usecursor == 0 } {
+ set ret [catch {eval $db get -$flag $bufsize $key} res]
+ } else {
+ set res {}
+ for { set ret [catch {eval $getcurs get -$flag $bufsize\
+ -set $key} tres] } \
+ { $ret == 0 && [llength $tres] != 0 } \
+ { set ret [catch {eval $getcurs get -$flag $bufsize\
+ -nextdup} tres]} {
+ eval lappend res $tres
+ }
+ }
- if { $expectfail == 1 } {
- error_check_good allpassed $allpassed FALSE
- puts "\t\tTest0$tnum.$letter:\
- returned at least one ENOMEM (as expected)"
- } else {
- error_check_good allpassed $allpassed TRUE
- puts "\t\tTest0$tnum.$letter: succeeded (as expected)"
- }
+ # If we expect a failure, be more tolerant if the
+ # above fails; just make sure it's an ENOMEM or
+ # and EINVAL (if the buffer is smaller than the
+ # pagesize, it's EINVAL), mark it, and move along.
+ if { $expectfail != 0 && $ret != 0 } {
+ if { [is_substr $errorCode ENOMEM] != 1 && \
+ [is_substr $errorCode EINVAL] != 1 } {
+ error_check_good \
+ "$flag failure errcode" \
+ $errorCode "ENOMEM or EINVAL"
+ }
+ set allpassed FALSE
+ continue
+ }
+ error_check_good "get_$flag ($key)" $ret 0
+ if { $flag == "multi_key" } {
+ t95_verify $res TRUE
+ } else {
+ t95_verify $res FALSE
+ }
+ }
+ set ret [catch {eval $db get -$flag $bufsize} res]
- error_check_good dbc_close [$dbc close] 0
- if { $usecursor != 0 } {
- error_check_good getcurs_close [$getcurs close] 0
+ if { $expectfail == 1 } {
+ error_check_good allpassed $allpassed FALSE
+ puts "\t\tTest$tnum.$letter:\
+ returned at least one ENOMEM (as expected)"
+ } else {
+ error_check_good allpassed $allpassed TRUE
+ puts "\t\tTest$tnum.$letter: succeeded (as expected)"
+ }
+
+ error_check_good dbc_close [$dbc close] 0
+ if { $usecursor != 0 } {
+ error_check_good getcurs_close [$getcurs close] 0
+ }
}
}
-# Test of invalid flag combinations for -multi
+# Test of invalid flag combinations
proc t95_flagtest_body { db tnum letter bufsize usecursor } {
global errorCode
- if { $usecursor == 0 } {
- set action "db get -multi "
- } else {
- set action "dbc get -multi "
- }
- puts "\tTest0$tnum.$letter: $action with invalid flag combinations"
+ foreach flag { multi multi_key } {
+ if { $usecursor == 0 } {
+ if { $flag == "multi_key" } {
+ # db->get does not allow multi_key
+ continue
+ } else {
+ set action "db get -$flag"
+ }
+ } else {
+ set action "dbc get -$flag"
+ }
+ puts "\tTest$tnum.$letter: $action with invalid flag combinations"
- # Cursor for $usecursor.
- if { $usecursor != 0 } {
- set getcurs [$db cursor]
- error_check_good getcurs [is_valid_cursor $getcurs $db] TRUE
- }
+ # Cursor for $usecursor.
+ if { $usecursor != 0 } {
+ set getcurs [$db cursor]
+ error_check_good getcurs [is_valid_cursor $getcurs $db] TRUE
+ }
- if { $usecursor == 0 } {
- # Disallowed flags for basic -multi get
- set badflags [list consume consume_wait {rmw some_key}]
+ if { $usecursor == 0 } {
+ # Disallowed flags for db->get
+ set badflags [list consume consume_wait {rmw some_key}]
- foreach flag $badflags {
- catch {eval $db get -multi $bufsize -$flag} ret
- error_check_good \
- db:get:multi:$flag [is_substr $errorCode EINVAL] 1
+ foreach badflag $badflags {
+ catch {eval $db get -$flag $bufsize -$badflag} ret
+ error_check_good \
+ db:get:$flag:$badflag [is_substr $errorCode EINVAL] 1
+ }
+ } else {
+ # Disallowed flags for db->cget
+ set cbadflags [list last get_recno join_item \
+ {multi_key 1000} prev prevnodup]
+
+ set dbc [$db cursor]
+ $dbc get -first
+ foreach badflag $cbadflags {
+ catch {eval $dbc get -$flag $bufsize -$badflag} ret
+ error_check_good dbc:get:$flag:$badflag \
+ [is_substr $errorCode EINVAL] 1
+ }
+ error_check_good dbc_close [$dbc close] 0
}
- } else {
- # Disallowed flags for cursor -multi get
- set cbadflags [list last get_recno join_item \
- {multi_key 1000} prev prevnodup]
-
- set dbc [$db cursor]
- $dbc get -first
- foreach flag $cbadflags {
- catch {eval $dbc get -multi $bufsize -$flag} ret
- error_check_good dbc:get:multi:$flag \
- [is_substr $errorCode EINVAL] 1
+ if { $usecursor != 0 } {
+ error_check_good getcurs_close [$getcurs close] 0
}
- error_check_good dbc_close [$dbc close] 0
}
- if { $usecursor != 0 } {
- error_check_good getcurs_close [$getcurs close] 0
- }
- puts "\t\tTest0$tnum.$letter completed"
+ puts "\t\tTest$tnum.$letter completed"
}
# Verify that a passed-in list of key/data pairs all match the predicted
@@ -232,7 +300,6 @@ proc t95_verify { res multiple_keys } {
global alphabet
set i 0
-
set orig_key [lindex [lindex $res 0] 0]
set nkeys [string trim $orig_key $alphabet']
set base_key [string trim $orig_key 0123456789]
@@ -241,7 +308,6 @@ proc t95_verify { res multiple_keys } {
while { 1 } {
set key [lindex [lindex $res $i] 0]
set datum [lindex [lindex $res $i] 1]
-
if { $datum_count >= $nkeys } {
if { [llength $key] != 0 } {
# If there are keys beyond $nkeys, we'd
diff --git a/db/test/test096.tcl b/db/test/test096.tcl
index ddbfd6f78..e1cbbb0d2 100644
--- a/db/test/test096.tcl
+++ b/db/test/test096.tcl
@@ -1,13 +1,20 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999-2002
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test096.tcl,v 11.19 2002/08/19 20:09:29 margo Exp
+# $Id: test096.tcl,v 11.24 2003/09/04 23:41:18 bostic Exp $
#
# TEST test096
# TEST Db->truncate test.
-proc test096 { method {pagesize 512} {nentries 50} {ndups 4} args} {
+# TEST For all methods:
+# TEST Test that truncate empties an existing database.
+# TEST Test that truncate-write in an aborted txn doesn't
+# TEST change the original contents.
+# TEST Test that truncate-write in a committed txn does
+# TEST overwrite the original contents.
+# TEST For btree and hash, do the same in a database with offpage dups.
+proc test096 { method {pagesize 512} {nentries 1000} {ndups 19} args} {
global fixed_len
source ./include.tcl
@@ -18,11 +25,6 @@ proc test096 { method {pagesize 512} {nentries 50} {ndups 4} args} {
set omethod [convert_method $method]
puts "Test096: $method db truncate method test"
- if { [is_record_based $method] == 1 || \
- [is_rbtree $method] == 1 } {
- puts "Test096 skipping for method $method"
- return
- }
set pgindex [lsearch -exact $args "-pagesize"]
if { $pgindex != -1 } {
puts "Test096: Skipping for specific pagesizes"
@@ -49,45 +51,25 @@ proc test096 { method {pagesize 512} {nentries 50} {ndups 4} args} {
} else {
env_cleanup $testdir
- #
- # We need an env for exclusive-use testing.
- set env [eval {berkdb_env -create -home $testdir -txn} $encargs]
+ # We need an env for exclusive-use testing. Since we are
+ # using txns, we need at least 1 lock per record for queue.
+ set lockmax [expr $nentries * 2]
+ set env [eval {berkdb_env -create -home $testdir \
+ -lock_max $lockmax -txn} $encargs]
error_check_good env_create [is_valid_env $env] TRUE
set closeenv 1
}
set t1 $testdir/t1
- puts "\tTest096.a: Create $nentries entries"
+ puts "\tTest096.a: Create database with $nentries entries"
set db [eval {berkdb_open -create -auto_commit \
-env $env $omethod -mode 0644} $args $testfile]
error_check_good db_open [is_valid_db $db] TRUE
-
- set did [open $dict]
- set count 0
- set txn ""
- set pflags ""
- set gflags ""
- while { [gets $did str] != -1 && $count < $nentries } {
- set key $str
- set datastr [reverse $str]
- set t [$env txn]
- error_check_good txn [is_valid_txn $t $env] TRUE
- set txn "-txn $t"
- set ret [eval {$db put} \
- $txn $pflags {$key [chop_data $method $datastr]}]
- error_check_good put $ret 0
- error_check_good txn [$t commit] 0
-
- set ret [eval {$db get} $gflags {$key}]
- error_check_good $key:dbget [llength $ret] 1
-
- incr count
- }
- close $did
+ t96_populate $db $omethod $env $nentries
+ error_check_good dbclose [$db close] 0
puts "\tTest096.b: Truncate database"
- error_check_good dbclose [$db close] 0
set dbtr [eval {berkdb_open -create -auto_commit \
-env $env $omethod -mode 0644} $args $testfile]
error_check_good db_open [is_valid_db $dbtr] TRUE
@@ -98,44 +80,64 @@ proc test096 { method {pagesize 512} {nentries 50} {ndups 4} args} {
set db [eval {berkdb_open -env $env} $args $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- set ret [$db get -glob *]
- error_check_good dbget [llength $ret] 0
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number 0
error_check_good dbclose [$db close] 0
error_check_good dbverify [verify_dir $testdir "\tTest096.c: "] 0
- #
- # Remove database, and create a new one with dups.
- #
- puts "\tTest096.d: Create $nentries entries with $ndups duplicates"
+ # Remove and recreate database.
+ puts "\tTest096.d: Recreate database with $nentries entries"
+ set db [eval {berkdb_open -create -auto_commit \
+ -env $env $omethod -mode 0644} $args $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ t96_populate $db $omethod $env $nentries
+ error_check_good dbclose [$db close] 0
+
+ puts "\tTest096.e: Truncate and write in a txn, then abort"
+ txn_truncate $env $omethod $testfile $nentries abort 1
+
+ set db [eval {berkdb_open -env $env} $args $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Database should have original contents since both the truncate
+ # and the write were aborted
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number $nentries
+ error_check_good dbclose [$db close] 0
+
+ error_check_good dbverify [verify_dir $testdir "\tTest096.f: "] 0
+
+ puts "\tTest096.g: Truncate and write in a txn, then commit"
+ txn_truncate $env $omethod $testfile $nentries commit 1
+
+ set db [eval {berkdb_open -env $env} $args $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Database should contain only the new items
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number [expr $nentries / 2]
+ error_check_good dbclose [$db close] 0
+ error_check_good dbverify [verify_dir $testdir "\tTest096.h: "] 0
+
+ # Remove database and create a new one with dups. Skip
+ # the rest of the test for methods not supporting dups.
+ if { [is_record_based $method] == 1 || \
+ [is_rbtree $method] == 1 } {
+ puts "Skipping remainder of test096 for method $method"
+ if { $closeenv == 1 } {
+ error_check_good envclose [$env close] 0
+ }
+ return
+ }
set ret [berkdb dbremove -env $env -auto_commit $testfile]
+
+ puts "\tTest096.i: Create $nentries entries with $ndups duplicates"
set db [eval {berkdb_open -pagesize $pagesize -dup -auto_commit \
-create -env $env $omethod -mode 0644} $args $testfile]
error_check_good db_open [is_valid_db $db] TRUE
- set did [open $dict]
- set count 0
- set txn ""
- set pflags ""
- set gflags ""
- while { [gets $did str] != -1 && $count < $nentries } {
- set key $str
- for { set i 1 } { $i <= $ndups } { incr i } {
- set datastr $i:$str
- set t [$env txn]
- error_check_good txn [is_valid_txn $t $env] TRUE
- set txn "-txn $t"
- set ret [eval {$db put} \
- $txn $pflags {$key [chop_data $method $datastr]}]
- error_check_good put $ret 0
- error_check_good txn [$t commit] 0
- }
- set ret [eval {$db get} $gflags {$key}]
- error_check_bad $key:dbget_dups [llength $ret] 0
- error_check_good $key:dbget_dups1 [llength $ret] $ndups
+ t96_populate $db $omethod $env $nentries $ndups
- incr count
- }
- close $did
set dlist ""
for { set i 1 } {$i <= $ndups} {incr i} {
lappend dlist $i
@@ -145,58 +147,175 @@ proc test096 { method {pagesize 512} {nentries 50} {ndups 4} args} {
set txn "-txn $t"
dup_check $db $txn $t1 $dlist
error_check_good txn [$t commit] 0
- puts "\tTest096.e: Verify off page duplicates status"
+ puts "\tTest096.j: Verify off page duplicates status"
set stat [$db stat]
error_check_bad stat:offpage [is_substr $stat \
"{{Duplicate pages} 0}"] 1
- set recs [expr $ndups * $count]
+ set recs [expr $ndups * $nentries]
error_check_good dbclose [$db close] 0
- puts "\tTest096.f: Truncate database in a txn then abort"
- set txn [$env txn]
+ puts "\tTest096.k: Truncate database in a txn then abort"
+ txn_truncate $env $omethod $testfile $recs abort
- set dbtr [eval {berkdb_open -auto_commit -create \
- -env $env $omethod -mode 0644} $args $testfile]
- error_check_good db_open [is_valid_db $dbtr] TRUE
- error_check_good txnbegin [is_valid_txn $txn $env] TRUE
+ set db [eval {berkdb_open -auto_commit -env $env} $args $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
- set ret [$dbtr truncate -txn $txn]
- error_check_good dbtrunc $ret $recs
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number $recs
+ error_check_good dbclose [$db close] 0
- error_check_good txnabort [$txn abort] 0
- error_check_good db_close [$dbtr close] 0
+ puts "\tTest096.l: Truncate database in a txn then commit"
+ txn_truncate $env $omethod $testfile $recs commit
- set db [eval {berkdb_open -auto_commit -env $env} $args $testfile]
+ set db [berkdb_open -auto_commit -env $env $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- set ret [$db get -glob *]
- error_check_good dbget [llength $ret] $recs
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number 0
error_check_good dbclose [$db close] 0
- puts "\tTest096.g: Truncate database in a txn then commit"
- set txn [$env txn]
- error_check_good txnbegin [is_valid_txn $txn $env] TRUE
+ set testdir [get_home $env]
+ error_check_good dbverify [verify_dir $testdir "\tTest096.m: "] 0
- set dbtr [eval {berkdb_open -auto_commit -create \
- -env $env $omethod -mode 0644} $args $testfile]
- error_check_good db_open [is_valid_db $dbtr] TRUE
+ # Remove database, and create a new one with dups. Test
+ # truncate + write within a transaction.
+ puts "\tTest096.n: Create $nentries entries with $ndups duplicates"
+ set ret [berkdb dbremove -env $env -auto_commit $testfile]
+ set db [eval {berkdb_open -pagesize $pagesize -dup -auto_commit \
+ -create -env $env $omethod -mode 0644} $args $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
- set ret [$dbtr truncate -txn $txn]
- error_check_good dbtrunc $ret $recs
+ t96_populate $db $omethod $env $nentries $ndups
- error_check_good txncommit [$txn commit] 0
- error_check_good db_close [$dbtr close] 0
+ set dlist ""
+ for { set i 1 } {$i <= $ndups} {incr i} {
+ lappend dlist $i
+ }
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ dup_check $db $txn $t1 $dlist
+ error_check_good txn [$t commit] 0
+ puts "\tTest096.o: Verify off page duplicates status"
+ set stat [$db stat]
+ error_check_bad stat:offpage [is_substr $stat \
+ "{{Duplicate pages} 0}"] 1
+
+ set recs [expr $ndups * $nentries]
+ error_check_good dbclose [$db close] 0
+
+ puts "\tTest096.p: Truncate and write in a txn, then abort"
+ txn_truncate $env $omethod $testfile $recs abort 1
+
+ set db [eval {berkdb_open -auto_commit -env $env} $args $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number $recs
+ error_check_good dbclose [$db close] 0
+
+ puts "\tTest096.q: Truncate and write in a txn, then commit"
+ txn_truncate $env $omethod $testfile $recs commit 1
set db [berkdb_open -auto_commit -env $env $testfile]
error_check_good dbopen [is_valid_db $db] TRUE
- set ret [$db get -glob *]
- error_check_good dbget [llength $ret] 0
+ set number [number_of_entries $db $method]
+ error_check_good number_of_entries $number [expr $recs / 2]
error_check_good dbclose [$db close] 0
set testdir [get_home $env]
- error_check_good dbverify [verify_dir $testdir "\tTest096.h: "] 0
+ error_check_good dbverify [verify_dir $testdir "\tTest096.r: "] 0
if { $closeenv == 1 } {
error_check_good envclose [$env close] 0
}
}
+
+proc t96_populate {db method env nentries {ndups 1}} {
+ global datastr
+ global pad_datastr
+ source ./include.tcl
+
+ set did [open $dict]
+ set count 0
+ set txn ""
+ set pflags ""
+ set gflags ""
+
+ if { [is_record_based $method] == 1 } {
+ append gflags "-recno"
+ }
+ set pad_datastr [pad_data $method $datastr]
+ while { [gets $did str] != -1 && $count < $nentries } {
+ if { [is_record_based $method] == 1 } {
+ set key [expr $count + 1]
+ } else {
+ set key $str
+ }
+ if { $ndups > 1 } {
+ for { set i 1 } { $i <= $ndups } { incr i } {
+ set datastr $i:$str
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set ret [eval {$db put} $txn $pflags \
+ {$key [chop_data $method $datastr]}]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ }
+ } else {
+ set datastr [reverse $str]
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ set ret [eval {$db put} \
+ $txn $pflags {$key [chop_data $method $datastr]}]
+ error_check_good put $ret 0
+ error_check_good txn [$t commit] 0
+ }
+ set ret [eval {$db get} $gflags {$key}]
+ error_check_good $key:dbget [llength $ret] $ndups
+ incr count
+ }
+ close $did
+}
+
+proc number_of_entries { db method } {
+ if { [is_record_based $method] == 1 } {
+ set dbc [$db cursor]
+ set last [$dbc get -last]
+ if {[llength $last] == 0} {
+ set number 0
+ } else {
+ set number [lindex [lindex $last 0] 0]
+ }
+ } else {
+ set ret [$db get -glob *]
+ set number [llength $ret]
+ }
+ return $number
+}
+
+# Open database. Truncate in a transaction, optionally with a write
+# included in the transaction as well, then abort or commit. Close database.
+
+proc txn_truncate { env method testfile nentries op {write 0}} {
+ set db [eval {berkdb_open -create -auto_commit \
+ -env $env $method -mode 0644} $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+
+ set txn [$env txn]
+ error_check_good txnbegin [is_valid_txn $txn $env] TRUE
+
+ set ret [$db truncate -txn $txn]
+ error_check_good dbtrunc $ret $nentries
+ if { $write == 1 } {
+ for {set i 1} {$i <= [expr $nentries / 2]} {incr i} {
+ set ret [eval {$db put} -txn $txn \
+ {$i [chop_data $method "aaaaaaaaaa"]}]
+ error_check_good write $ret 0
+ }
+ }
+
+ error_check_good txn$op [$txn $op] 0
+ error_check_good db_close [$db close] 0
+}
diff --git a/db/test/test097.tcl b/db/test/test097.tcl
index ae4a24b88..ac3f23905 100644
--- a/db/test/test097.tcl
+++ b/db/test/test097.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test097.tcl,v 11.7 2002/08/08 15:38:13 bostic Exp
+# $Id: test097.tcl,v 11.10 2003/01/08 05:54:11 bostic Exp $
#
# TEST test097
# TEST Open up a large set of database files simultaneously.
@@ -17,18 +17,15 @@ proc test097 { method {ndbs 500} {nentries 400} args } {
global pad_datastr
source ./include.tcl
- set args [convert_args $method $args]
+ set largs [convert_args $method $args]
set encargs ""
- set args [split_encargs $args encargs]
-
- puts -nonewline "Test097: $method ($args) "
- puts "$nentries entries in at most $ndbs simultaneous databases"
+ set largs [split_encargs $largs encargs]
# Open an environment, with a 1MB cache.
- set eindex [lsearch -exact $args "-env"]
+ set eindex [lsearch -exact $largs "-env"]
if { $eindex != -1 } {
incr eindex
- set env [lindex $args $eindex]
+ set env [lindex $largs $eindex]
puts "Test097: $method: skipping for env $env"
return
}
@@ -38,12 +35,30 @@ proc test097 { method {ndbs 500} {nentries 400} args } {
error_check_good dbenv [is_valid_env $env] TRUE
# Create the database and open the dictionary
- set testfile test097.db
+ set basename test097
set t1 $testdir/t1
set t2 $testdir/t2
set t3 $testdir/t3
+ #
+ # When running with HAVE_MUTEX_SYSTEM_RESOURCES,
+ # we can run out of mutex lock slots due to the nature of this test.
+ # So, for this test, increase the number of pages per extent
+ # to consume fewer resources.
+ #
+ if { [is_queueext $method] } {
+ set numdb [expr $ndbs / 4]
+ set eindex [lsearch -exact $largs "-extent"]
+ error_check_bad extent $eindex -1
+ incr eindex
+ set extval [lindex $largs $eindex]
+ set extval [expr $extval * 4]
+ set largs [lreplace $largs $eindex $eindex $extval]
+ }
+ puts -nonewline "Test097: $method ($largs) "
+ puts "$nentries entries in at most $ndbs simultaneous databases"
+
puts "\tTest097.a: Simultaneous open"
- set numdb [test097_open tdb $ndbs $method $env $testfile $args]
+ set numdb [test097_open tdb $ndbs $method $env $basename $largs]
if { $numdb == 0 } {
puts "\tTest097: Insufficient resources available -- skipping."
error_check_good envclose [$env close] 0
@@ -116,7 +131,7 @@ proc test097.check { key data } {
error_check_good "data mismatch for key $key" $data $pad_datastr
}
-proc test097_open { tdb ndbs method env testfile largs } {
+proc test097_open { tdb ndbs method env basename largs } {
global errorCode
upvar $tdb db
@@ -129,7 +144,7 @@ proc test097_open { tdb ndbs method env testfile largs } {
for { set i 1 } {$i <= $numdb } { incr i } {
set stat [catch {eval {berkdb_open -env $env \
-pagesize 512 -create -mode 0644} \
- $largs {$omethod $testfile.$i}} db($i)]
+ $largs {$omethod $basename.$i.db}} db($i)]
#
# Check if we've reached our limit
#
diff --git a/db/test/test098.tcl b/db/test/test098.tcl
index 9bc249958..4bcf46e95 100644
--- a/db/test/test098.tcl
+++ b/db/test/test098.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2002
+# Copyright (c) 2002-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test098.tcl,v 1.5 2002/07/11 20:38:36 sandstro Exp
+# $Id: test098.tcl,v 1.6 2003/01/08 05:54:11 bostic Exp $
#
# TEST test098
# TEST Test of DB_GET_RECNO and secondary indices. Open a primary and
diff --git a/db/test/test099.tcl b/db/test/test099.tcl
index fb5dd9c91..aa3f0d5b5 100644
--- a/db/test/test099.tcl
+++ b/db/test/test099.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test099.tcl,v 1.2 2002/08/08 15:38:13 bostic Exp
+# $Id: test099.tcl,v 1.6 2003/09/04 23:41:18 bostic Exp $
#
# TEST test099
# TEST
@@ -14,6 +14,11 @@
# TEST Open a cursor and do the same for DBC->c_get with set_recno.
# TEST Verify that set_recno sets the record number position properly.
# TEST Verify that get_recno returns the correct record numbers.
+# TEST
+# TEST Using the same database, open 3 cursors and position one at
+# TEST the beginning, one in the middle, and one at the end. Delete
+# TEST by cursor and check that record renumbering is done properly.
+#
proc test099 { method {nentries 10000} args } {
source ./include.tcl
@@ -70,10 +75,7 @@ proc test099 { method {nentries 10000} args } {
puts "\tTest099.a: put loop"
# Here is the loop where we put each key/data pair
- while { [gets $did str] != -1 && $count < $nentries } {
-# global kvals
-# set key [expr $count]
-# set kvals($key) [pad_data $method $str]
+ while { [gets $did str] != -1 && $count <= $nentries } {
set key $str
if { $txnenv == 1 } {
set t [$env txn]
@@ -113,7 +115,7 @@ proc test099 { method {nentries 10000} args } {
set txn "-txn $t"
}
set dbc [eval {$db cursor} $txn]
- error_check_good db_cursor [is_substr $dbc $db] 1
+ error_check_good db_cursor [is_valid_cursor $dbc $db] TRUE
set did [open $t1]
set recno 1
@@ -169,6 +171,103 @@ proc test099 { method {nentries 10000} args } {
}
error_check_good db_close [$db close] 0
close $did
+
+ puts "\tTest099.d: Test record renumbering with cursor deletes."
+ # Reopen the database, this time with write permission.
+ set db [eval {berkdb_open} $args $omethod $testfile ]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Open three cursors.
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set dbc0 [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc0 $db] TRUE
+ set dbc1 [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc1 $db] TRUE
+ set dbc2 [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_valid_cursor $dbc2 $db] TRUE
+
+ # Initialize cursor positions. Set dbc0 at the beginning,
+ # dbc1 at the middle, and dbc2 at the end.
+ set ret [$dbc0 get -first]
+ error_check_bad dbc0_get_first [llength $ret] 0
+
+ set middle [expr $nentries / 2 + 1]
+ set ret [$dbc1 get -set_recno $middle]
+ error_check_bad dbc1_get_middle [llength $ret] 0
+
+ set ret [$dbc2 get -last]
+ error_check_bad dbc2_get_last [llength $ret] 0
+
+ # At each iteration, delete the first entry, delete the middle
+ # entry, and check the record number for beginning, middle and end.
+ set count 1
+ while { $count <= [expr $nentries / 2] } {
+ # Delete first item.
+ error_check_good dbc0_del [$dbc0 del] 0
+
+ # For non-txn env's, check that db_stat is recalculating
+ # to adjust for items marked for deletion. We can't do this
+ # in txn env's because the live txn will cause deadlock.
+ if { $txnenv == 0 } {
+ set nkeys [expr $nentries - [expr $count * 2] + 1]
+ set stat [$db stat]
+ error_check_good keys_after_delete [is_substr $stat \
+ "{Number of keys} $nkeys"] 1
+ error_check_good records_after_delete [is_substr $stat \
+ "{Number of records} $nkeys"] 1
+
+ # Now delete the same entry again (which should not
+ # change the database) and make sure db->stat returns
+ # the same number of keys and records as before.
+ catch {[$dbc0 del]} result
+
+ set stat [$db stat]
+ error_check_good keys_after_baddelete [is_substr $stat \
+ "{Number of keys} $nkeys"] 1
+ error_check_good recs_after_baddelete [is_substr $stat \
+ "{Number of records} $nkeys"] 1
+ }
+
+ # Reposition cursor to new first item, check that record number
+ # is 1.
+ set ret0 [$dbc0 get -next]
+ error_check_good beginning_recno [$dbc0 get -get_recno] 1
+
+ # Calculate the current middle recno and compare to actual.
+ set middle [$dbc1 get -get_recno]
+ set calcmiddle [expr [expr $nentries / 2] - $count + 1]
+ error_check_good middle_recno $middle $calcmiddle
+
+ # Delete middle item, reposition cursor to next item.
+ error_check_good dbc1_del [$dbc1 del] 0
+ set ret1 [$dbc1 get -next]
+
+ # Calculate the expected end recno and compare to actual.
+ set end [$dbc2 get -get_recno]
+ set calcend [expr $nentries - [expr $count * 2]]
+ # On the last iteration, all items have been deleted so
+ # there is no recno.
+ if { $calcend == 0 } {
+ error_check_good end_recno $end ""
+ } else {
+ error_check_good end_recno $end $calcend
+ }
+ incr count
+ }
+
+ # Close all three cursors.
+ error_check_good cursor_close [$dbc0 close] 0
+ error_check_good cursor_close [$dbc1 close] 0
+ error_check_good cursor_close [$dbc2 close] 0
+
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ error_check_good db_close [$db close] 0
}
# Check function for dumped file; data should be fixed are identical
diff --git a/db/test/test100.tcl b/db/test/test100.tcl
index e72408e8f..69dd0c546 100644
--- a/db/test/test100.tcl
+++ b/db/test/test100.tcl
@@ -1,16 +1,16 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2002
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test100.tcl,v 11.1 2002/08/15 20:55:20 sandstro Exp
+# $Id: test100.tcl,v 11.4 2003/03/14 16:49:58 sue Exp $
#
# TEST test100
# TEST Test for functionality near the end of the queue
# TEST using test025 (DB_APPEND).
-proc test100 { method {nentries 10000} {txn -txn} {tnum "100"} args} {
+proc test100 { method {nentries 10000} {tnum "100"} args} {
if { [is_queueext $method ] == 0 } {
- puts "Skipping test0$tnum for $method."
+ puts "Skipping test$tnum for $method."
return;
}
eval {test025 $method $nentries 4294967000 $tnum} $args
diff --git a/db/test/test101.tcl b/db/test/test101.tcl
index 578171ce6..419307c06 100644
--- a/db/test/test101.tcl
+++ b/db/test/test101.tcl
@@ -1,17 +1,17 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000-2002
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# Id: test101.tcl,v 11.1 2002/08/15 20:55:20 sandstro Exp
+# $Id: test101.tcl,v 11.5 2003/09/04 23:41:18 bostic Exp $
#
# TEST test101
-# TEST Test for functionality near the end of the queue
+# TEST Test for functionality near the end of the queue
# TEST using test070 (DB_CONSUME).
-proc test101 { method {nentries 10000} {txn -txn} {tnum "101"} args} {
+proc test101 { method {nentries 1000} {txn -txn} {tnum "101"} args} {
if { [is_queueext $method ] == 0 } {
- puts "Skipping test0$tnum for $method."
+ puts "Skipping test$tnum for $method."
return;
}
- eval {test070 $method 4 2 1000 WAIT 4294967000 $txn $tnum} $args
+ eval {test070 $method 4 2 $nentries WAIT 4294967000 $txn $tnum} $args
}
diff --git a/db/test/test102.tcl b/db/test/test102.tcl
new file mode 100644
index 000000000..66414639c
--- /dev/null
+++ b/db/test/test102.tcl
@@ -0,0 +1,235 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: test102.tcl,v 1.7 2003/09/04 23:41:18 bostic Exp $
+#
+# TEST test102
+# TEST Bulk get test for record-based methods. [#2934]
+proc test102 { method {nsets 1000} {tnum "102"} args } {
+ source ./include.tcl
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_rbtree $method] == 1 || [is_record_based $method] == 0} {
+ puts "Test$tnum skipping for method $method"
+ return
+ }
+
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set basename $testdir/test$tnum
+ set env NULL
+ # If we've our own env, no reason to swap--this isn't
+ # an mpool test.
+ set carg { -cachesize {0 25000000 0} }
+ } else {
+ set basename test$tnum
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ puts "Skipping for environment with txns"
+ return
+ }
+ set testdir [get_home $env]
+ set carg {}
+ }
+ cleanup $testdir $env
+
+ puts "Test$tnum: $method ($args) Bulk get test"
+
+ # Open and populate the database.
+ puts "\tTest$tnum.a: Creating $method database\
+ with $nsets entries."
+ set dargs "$carg $args"
+ set testfile $basename.db
+ set db [eval {berkdb_open_noerr -create} $omethod $dargs $testfile]
+ error_check_good db_open [is_valid_db $db] TRUE
+ t102_populate $db $method $nsets $txnenv 0
+
+ # Determine the pagesize so we can use it to size the buffer.
+ set stat [$db stat]
+ set pagesize [get_pagesize $stat]
+
+ # Run get tests. The gettest should succeed as long as
+ # the buffer is at least as large as the page size. Test for
+ # failure of a small buffer unless the page size is so small
+ # we can't define a smaller buffer (buffers must be multiples
+ # of 1024). A "big buffer" should succeed in all cases because
+ # we define it to be larger than 65536, the largest page
+ # currently allowed.
+ set maxpage [expr 1024 * 64]
+ set bigbuf [expr $maxpage + 1024]
+ set smallbuf 1024
+
+ # Run regular db->get tests.
+ if { $pagesize > 1024 } {
+ t102_gettest $db $tnum b $smallbuf 1
+ } else {
+ puts "Skipping Test$tnum.b for small pagesize."
+ }
+ t102_gettest $db $tnum c $bigbuf 0
+
+ # Run cursor get tests.
+ if { $pagesize > 1024 } {
+ t102_gettest $db $tnum d $smallbuf 1
+ } else {
+ puts "Skipping Test$tnum.b for small pagesize."
+ }
+ t102_cgettest $db $tnum e $bigbuf 0
+
+ if { [is_fixed_length $method] == 1 } {
+ puts "Skipping overflow tests for fixed-length method $omethod."
+ } else {
+
+ # Set up for overflow tests
+ puts "\tTest$tnum.f: Growing database with overflow sets"
+ t102_populate $db $method [expr $nsets / 100] $txnenv 10000
+
+ # Run overflow get tests. Test should fail for overflow pages
+ # with our standard big buffer but succeed at twice that size.
+ t102_gettest $db $tnum g $bigbuf 1
+ t102_gettest $db $tnum h [expr $bigbuf * 2] 0
+
+ # Run overflow cursor get tests. Test will fail for overflow
+ # pages with 8K buffer but succeed with a large buffer.
+ t102_cgettest $db $tnum i 8192 1
+ t102_cgettest $db $tnum j $bigbuf 0
+ }
+ error_check_good db_close [$db close] 0
+}
+
+proc t102_gettest { db tnum letter bufsize expectfail } {
+ t102_gettest_body $db $tnum $letter $bufsize $expectfail 0
+}
+proc t102_cgettest { db tnum letter bufsize expectfail } {
+ t102_gettest_body $db $tnum $letter $bufsize $expectfail 1
+}
+
+# Basic get test
+proc t102_gettest_body { db tnum letter bufsize expectfail usecursor } {
+ global errorCode
+
+ foreach flag { multi multi_key } {
+ if { $usecursor == 0 } {
+ if { $flag == "multi_key" } {
+ # db->get does not allow multi_key
+ continue
+ } else {
+ set action "db get -$flag"
+ }
+ } else {
+ set action "dbc get -$flag -set/-next"
+ }
+ puts "\tTest$tnum.$letter: $action with bufsize $bufsize"
+
+ set allpassed TRUE
+ set saved_err ""
+
+ # Cursor for $usecursor.
+ if { $usecursor != 0 } {
+ set getcurs [$db cursor]
+ error_check_good \
+ getcurs [is_valid_cursor $getcurs $db] TRUE
+ }
+
+ # Traverse DB with cursor; do get/c_get($flag) on each item.
+ set dbc [$db cursor]
+ error_check_good is_valid_dbc [is_valid_cursor $dbc $db] TRUE
+ for { set dbt [$dbc get -first] } { [llength $dbt] != 0 } \
+ { set dbt [$dbc get -next] } {
+ set key [lindex [lindex $dbt 0] 0]
+ set datum [lindex [lindex $dbt 0] 1]
+
+ if { $usecursor == 0 } {
+ set ret [catch \
+ {eval $db get -$flag $bufsize $key} res]
+ } else {
+ set res {}
+ for { set ret [catch {eval $getcurs get\
+ -$flag $bufsize -set $key} tres] } \
+ { $ret == 0 && [llength $tres] != 0 } \
+ { set ret [catch {eval $getcurs get\
+ -$flag $bufsize -next} tres]} {
+ eval lappend res $tres
+ }
+ }
+
+ # If we expect a failure, be more tolerant if the
+ # above fails; just make sure it's an ENOMEM or
+ # and EINVAL (if the buffer is smaller than the
+ # pagesize, it's EINVAL), mark it, and move along.
+ if { $expectfail != 0 && $ret != 0 } {
+ if { [is_substr $errorCode ENOMEM] != 1 && \
+ [is_substr $errorCode EINVAL] != 1 } {
+ error_check_good \
+ "$flag failure errcode" \
+ $errorCode "ENOMEM or EINVAL"
+ }
+ set allpassed FALSE
+ continue
+ }
+ error_check_good "get_$flag ($key)" $ret 0
+ }
+
+ if { $expectfail == 1 } {
+ error_check_good allpassed $allpassed FALSE
+ puts "\t\tTest$tnum.$letter:\
+ returned at least one ENOMEM (as expected)"
+ } else {
+ error_check_good allpassed $allpassed TRUE
+ puts "\t\tTest$tnum.$letter: succeeded (as expected)"
+ }
+
+ error_check_good dbc_close [$dbc close] 0
+ if { $usecursor != 0 } {
+ error_check_good getcurs_close [$getcurs close] 0
+ }
+ }
+}
+
+proc t102_populate { db method nentries txnenv pad_bytes } {
+ source ./include.tcl
+
+ set did [open $dict]
+ set count 0
+ set txn ""
+ set pflags ""
+ set gflags " -recno "
+
+ while { [gets $did str] != -1 && $count < $nentries } {
+ set key [expr $count + 1]
+ set datastr $str
+ # Create overflow pages only if method is not fixed-length.
+ if { [is_fixed_length $method] == 0 } {
+ append datastr [repeat "a" $pad_bytes]
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} \
+ $txn $pflags {$key [chop_data $method $datastr]}]
+ error_check_good put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ set ret [eval {$db get} $gflags {$key}]
+ error_check_good $key:dbget [llength $ret] 1
+ incr count
+ }
+ close $did
+
+ # This will make debugging easier, and since the database is
+ # read-only from here out, it's cheap.
+ error_check_good db_sync [$db sync] 0
+}
+
diff --git a/db/test/test103.tcl b/db/test/test103.tcl
new file mode 100644
index 000000000..b1da0f977
--- /dev/null
+++ b/db/test/test103.tcl
@@ -0,0 +1,223 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: test103.tcl,v 1.6 2003/09/04 23:41:18 bostic Exp $
+#
+# TEST test103
+# TEST Test bulk get when record numbers wrap around.
+# TEST
+# TEST Load database with items starting before and ending after
+# TEST the record number wrap around point. Run bulk gets (-multi_key)
+# TEST with various buffer sizes and verify the contents returned match
+# TEST the results from a regular cursor get.
+# TEST
+# TEST Then delete items to create a sparse database and make sure it
+# TEST still works. Test both -multi and -multi_key since they behave
+# TEST differently.
+proc test103 { method {nentries 100} {start 4294967250} {tnum "103"} args} {
+ source ./include.tcl
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+ puts "Test$tnum: $method ($args) Test of bulk get with wraparound."
+
+ if { [is_queueext $method] == 0 } {
+ puts "\tSkipping Test$tnum for method $method."
+ return
+ }
+
+ # Create the database and open the dictionary
+ set txnenv 0
+ set eindex [lsearch -exact $args "-env"]
+ #
+ # If we are using an env, then testfile should just be the db name.
+ # Otherwise it is the test directory and the name.
+ if { $eindex == -1 } {
+ set testfile $testdir/test$tnum.db
+ set env NULL
+ } else {
+ set testfile test$tnum.db
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append args " -auto_commit "
+ #
+ # If we are using txns and running with the
+ # default, set the default down a bit.
+ #
+ if { $nentries == 10000 } {
+ set nentries 100
+ }
+ }
+ set testdir [get_home $env]
+ }
+
+ cleanup $testdir $env
+
+ set db [eval {berkdb_open_noerr \
+ -create -mode 0644} $args $omethod $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Find the pagesize so we can use it to size the buffer.
+ set stat [$db stat]
+ set pagesize [get_pagesize $stat]
+
+ set did [open $dict]
+
+ puts "\tTest$tnum.a: put/get loop"
+ set txn ""
+
+ # Here is the loop where we put each key/data pair
+ set count 0
+ set k [expr $start + 1]
+ while { [gets $did str] != -1 && $count < $nentries } {
+ #
+ # We cannot use 'incr' because it gets unhappy since
+ # expr above is using 64-bits.
+ set k [expr $k + 1]
+ #
+ # Detect if we're more than 32 bits now. If so, wrap
+ # our key back to 1.
+ #
+ if { [expr $k > 0xffffffff] } {
+ set k 1
+ }
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set ret [eval {$db put} $txn {$k [chop_data $method $str]}]
+ error_check_good db_put $ret 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+ incr count
+ }
+ close $did
+
+ # Run tests in verbose mode for debugging.
+ set verbose 0
+
+ puts "\tTest$tnum.b: Bulk get with large buffer (retrieves all data)."
+ # Buffer is large enough that everything fits in a single get.
+ check_multi_recno $db [expr $pagesize * $nentries] multi_key $verbose
+
+ puts "\tTest$tnum.c: Bulk get with buffer = (2 x pagesize)."
+ # Buffer gets several items at a get, but not all.
+ check_multi_recno $db [expr $pagesize * 2] multi_key $verbose
+
+ # Skip tests if buffer would be smaller than allowed.
+ if { $pagesize >= 1024 } {
+ puts "\tTest$tnum.d: Bulk get with buffer = pagesize."
+ check_multi_recno $db $pagesize multi_key $verbose
+ }
+
+ if { $pagesize >= 2048 } {
+ puts "\tTest$tnum.e: Bulk get with buffer < pagesize\
+ (returns EINVAL)."
+ catch {
+ check_multi_recno $db [expr $pagesize / 2] \
+ multi_key $verbose
+ } res
+ error_check_good \
+ bufsize_less_than_pagesize [is_substr $res "invalid"] 1
+ }
+
+ # For a sparsely populated database, test with both -multi_key and
+ # -multi. In any sort of record numbered database, -multi does not
+ # return keys, so it returns all items. -multi_key returns both keys
+ # and data so it skips deleted items.
+ puts "\tTest$tnum.f: Delete every 10th item to create sparse database."
+ if { $txnenv == 1 } {
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ set curs [ eval {$db cursor} $txn]
+ error_check_good cursor [is_valid_cursor $curs $db] TRUE
+
+ set count 0
+ for { set kd [$curs get -first] } { $count < $nentries } \
+ { set kd [$curs get -next] } {
+ if { [expr $count % 10 == 0] } {
+ error_check_good cdelete [$curs del] 0
+ }
+ incr count
+ }
+ error_check_good curs_close [$curs close] 0
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
+
+ puts "\tTest$tnum.g: Sparse database, large buffer, multi_key."
+ check_multi_recno $db [expr $pagesize * $nentries] multi_key $verbose
+ puts "\tTest$tnum.h: Sparse database, large buffer, multi."
+ check_multi_recno $db [expr $pagesize * $nentries] multi $verbose
+
+ puts "\tTest$tnum.i: \
+ Sparse database, buffer = (2 x pagesize), multi_key."
+ check_multi_recno $db [expr $pagesize * 2] multi_key $verbose
+ puts "\tTest$tnum.j: Sparse database, buffer = (2 x pagesize), multi."
+ check_multi_recno $db [expr $pagesize * 2] multi $verbose
+
+ if { $pagesize >= 1024 } {
+ puts "\tTest$tnum.k: \
+ Sparse database, buffer = pagesize, multi_key."
+ check_multi_recno $db $pagesize multi_key $verbose
+ puts "\tTest$tnum.k: Sparse database, buffer = pagesize, multi."
+ check_multi_recno $db $pagesize multi $verbose
+ }
+
+ error_check_good db_close [$db close] 0
+}
+
+# The proc check_multi_recno is a modification of the utility routine
+# check_multi_key specifically for recno methods. We use this instead
+# check_multi, even with the -multi flag, because the check_multi utility
+# assumes that dups are being used which can't happen with record-based
+# methods.
+proc check_multi_recno { db size flag {verbose 0}} {
+ source ./include.tcl
+ set c [eval { $db cursor} ]
+ set m [eval { $db cursor} ]
+
+ set j 1
+
+ # Walk the database with -multi_key or -multi bulk get.
+ for {set d [$m get -first -$flag $size] } { [llength $d] != 0 } {
+ set d [$m get -next -$flag $size] } {
+ if {$verbose == 1 } {
+ puts "FETCH $j"
+ incr j
+ }
+ # For each bulk get return, compare the results to what we
+ # get by walking the db with an ordinary cursor get.
+ for {set i 0} { $i < [llength $d] } { incr i } {
+ set kd [lindex $d $i]
+ set k [lindex $kd 0]
+ set data [lindex $kd 1]
+ set len [string length $data]
+
+ if {$verbose == 1 } {
+ puts ">> $k << >> $len << "
+ }
+ # If we hit a deleted item in -multi, skip over it.
+ if { $flag == "multi" && $len == 0 } {
+ continue
+ }
+
+ set check [$c get -next]
+ set cd [lindex $check 0]
+ set ck [lindex $cd 0]
+ set cdata [lindex $cd 1]
+
+ error_check_good key $k $ck
+ error_check_good data_len $len [string length $cdata]
+ error_check_good data $data $cdata
+ }
+ }
+}
diff --git a/db/test/test106.tcl b/db/test/test106.tcl
new file mode 100644
index 000000000..6edcd46cf
--- /dev/null
+++ b/db/test/test106.tcl
@@ -0,0 +1,108 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: test106.tcl,v 1.3 2003/09/04 23:41:19 bostic Exp $
+#
+# TEST test106
+# TEST
+# TEST
+# TEST
+
+proc test106 { method {nitems 100} {niter 200} {tnum "106"} args } {
+ source ./include.tcl
+ global dict
+ global rand_init
+
+ # Set random seed for use in t106script procs op2 and create_data.
+ error_check_good set_random_seed [berkdb srand $rand_init] 0
+
+ set args [convert_args $method $args]
+ set omethod [convert_method $method]
+
+ if { [is_btree $method] != 1 } {
+ puts "\tTest$tnum: Skipping for method $method."
+ return
+ }
+
+ # Skip for specified pagesizes. This test runs at the native
+ # pagesize. (For SR #7964 testing, we may need to force
+ # to 8192.)
+ set pgindex [lsearch -exact $args "-pagesize"]
+ if { $pgindex != -1 } {
+ puts "Test$tnum: Skipping for specific pagesizes"
+ return
+ }
+
+ # This test needs a txn-enabled environment. If one is not
+ # provided, create it.
+ #
+ set eindex [lsearch -exact $args "-env"]
+ if { $eindex == -1 } {
+ set env [berkdb_env -create -home $testdir -txn]
+ } else {
+ incr eindex
+ set env [lindex $args $eindex]
+ set txnenv [is_txnenv $env]
+ if { $txnenv != 1 } {
+ puts "Skipping test$tnum for non-txn environment."
+ return
+ }
+ set testdir [get_home $env]
+ }
+
+
+ cleanup $testdir $env
+
+ # The bulk of the work of this test is done in t106script.tcl.
+ # Here we kick off one consumer, then five producers, then sit
+ # back and wait for them to finish.
+ foreach order { ordered random } {
+ set nproducers 5
+
+ puts "\tTest$tnum.a: Start deadlock detector ($order)."
+ set dpid [exec $util_path/db_deadlock -a o -v -t 5\
+ -h $testdir >& $testdir/dd.out &]
+
+ puts "\tTest$tnum.b: Start consumer process ($order)."
+ sentinel_init
+ set pidlist {}
+ set cpid [exec $tclsh_path $test_path/wrap.tcl t106script.tcl \
+ $testdir/t106script.log.cons.$order.1 $testdir WAIT \
+ 0 $nproducers $testdir/CONSUMERLOG 1 $tnum $order $niter \
+ $args &]
+ lappend pidlist $cpid
+
+ puts "\tTest$tnum.c: Initialize producers ($order)."
+ for { set p 1 } { $p <= $nproducers } { incr p } {
+ set ppid [exec $tclsh_path $test_path/wrap.tcl \
+ t106script.tcl \
+ $testdir/t106script.log.init.$order.$p \
+ $testdir INITIAL $nitems $nproducers \
+ $testdir/INITLOG.$p $p $tnum \
+ $order $niter $args &]
+ lappend pidlist $ppid
+ }
+
+ # Wait for all producers to be initialized before continuing
+ # to the RMW portion of the test.
+ watch_procs $pidlist 10
+
+ sentinel_init
+ set pidlist {}
+ puts "\tTest$tnum.d: Run producers in RMW mode ($order)."
+ for { set p 1 } { $p <= $nproducers } { incr p } {
+ set ppid [exec $tclsh_path $test_path/wrap.tcl \
+ t106script.tcl \
+ $testdir/t106script.log.prod.$order.$p \
+ $testdir PRODUCE $nitems $nproducers \
+ $testdir/PRODUCERLOG.$p $p $tnum \
+ $order $niter $args &]
+ lappend pidlist $ppid
+ }
+
+ watch_procs $pidlist 10
+ tclkill $dpid
+ }
+}
diff --git a/db/test/testparams.tcl b/db/test/testparams.tcl
index 2def6a9d0..bbe508784 100644
--- a/db/test/testparams.tcl
+++ b/db/test/testparams.tcl
@@ -1,45 +1,141 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 2000
+# Copyright (c) 2000-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: testparams.tcl,v 11.39 2001/01/11 17:29:42 sue Exp $
+# $Id: testparams.tcl,v 11.164 2003/10/31 20:17:24 sandstro Exp $
-set deadtests 3
-set envtests 8
-set recdtests 13
-set rsrctests 3
-set runtests 93
-set subdbtests 10
-set rpctests 2
+global serial_tests
+set serial_tests {rep002 rep005}
+set subs {bigfile dead env fop lock log memp mutex recd rep rpc rsrc\
+ sdb sdbtest sec si test txn}
+
+set test_names(bigfile) [list bigfile001 bigfile002]
+set test_names(dead) [list dead001 dead002 dead003 dead004 dead005 dead006 \
+ dead007]
+set test_names(env) [list env001 env002 env003 env004 env005 env006 \
+ env007 env008 env009 env010 env011]
+set test_names(fop) [list fop001 fop002 fop003 fop004 fop005 fop006]
+set test_names(lock) [list lock001 lock002 lock003 lock004 lock005 lock006]
+set test_names(log) [list log001 log002 log003 log004 log005 log006]
+set test_names(memp) [list memp001 memp002 memp003 memp004]
+set test_names(mutex) [list mutex001 mutex002 mutex003]
+set test_names(recd) [list recd001 recd002 recd003 recd004 recd005 recd006 \
+ recd007 recd008 recd009 recd010 recd011 recd012 recd013 recd014 recd015 \
+ recd016 recd017 recd018 recd019]
+set test_names(rep) [list rep001 rep002 rep003 rep004 rep005 rep006 \
+ rep007 rep008 rep009 rep010 rep011 rep012 rep013]
+set test_names(rpc) [list rpc001 rpc002 rpc003 rpc004 rpc005]
+set test_names(rsrc) [list rsrc001 rsrc002 rsrc003 rsrc004]
+set test_names(sdb) [list sdb001 sdb002 sdb003 sdb004 sdb005 sdb006 \
+ sdb007 sdb008 sdb009 sdb010 sdb011 sdb012]
+set test_names(sdbtest) [list sdbtest001 sdbtest002]
+set test_names(sec) [list sec001 sec002]
+set test_names(si) [list si001 si002 si003 si004 si005]
+set test_names(test) [list test001 test002 test003 test004 test005 \
+ test006 test007 test008 test009 test010 test011 test012 test013 test014 \
+ test015 test016 test017 test018 test019 test020 test021 test022 test023 \
+ test024 test025 test026 test027 test028 test029 test030 test031 test032 \
+ test033 test034 test035 test036 test037 test038 test039 test040 test041 \
+ test042 test043 test044 test045 test046 test047 test048 test049 test050 \
+ test051 test052 test053 test054 test055 test056 test057 test058 test059 \
+ test060 test061 test062 test063 test064 test065 test066 test067 test068 \
+ test069 test070 test071 test072 test073 test074 test076 test077 \
+ test078 test079 test081 test082 test083 test084 test085 test086 \
+ test087 test088 test089 test090 test091 test092 test093 test094 test095 \
+ test096 test097 test098 test099 test100 test101 test102 test103 ]
+set test_names(txn) [list txn001 txn002 txn003 txn004 txn005 txn006 \
+ txn007 txn008 txn009 txn010 txn011]
+
+foreach sub $subs {
+ foreach test $test_names($sub) {
+ source $test_path/$test.tcl
+ }
+}
+
+source $test_path/archive.tcl
+source $test_path/byteorder.tcl
+source $test_path/dbm.tcl
+source $test_path/foputils.tcl
+source $test_path/hsearch.tcl
+source $test_path/join.tcl
+source $test_path/logtrack.tcl
+source $test_path/ndbm.tcl
+source $test_path/parallel.tcl
+source $test_path/reputils.tcl
+source $test_path/sdbutils.tcl
+source $test_path/shelltest.tcl
+source $test_path/sijointest.tcl
+source $test_path/siutils.tcl
+source $test_path/testutils.tcl
+source $test_path/upgrade.tcl
+
+set parms(recd001) 0
+set parms(recd002) 0
+set parms(recd003) 0
+set parms(recd004) 0
+set parms(recd005) ""
+set parms(recd006) 0
+set parms(recd007) ""
+set parms(recd008) {4 4}
+set parms(recd009) 0
+set parms(recd010) 0
+set parms(recd011) {200 15 1}
+set parms(recd012) {0 49 25 100 5}
+set parms(recd013) 100
+set parms(recd014) ""
+set parms(recd015) ""
+set parms(recd016) ""
+set parms(recd017) 0
+set parms(recd018) 10
+set parms(recd019) 50
set parms(subdb001) ""
set parms(subdb002) 10000
set parms(subdb003) 1000
set parms(subdb004) ""
set parms(subdb005) 100
set parms(subdb006) 100
-set parms(subdb007) 10000
-set parms(subdb008) 10000
+set parms(subdb007) ""
+set parms(subdb008) ""
set parms(subdb009) ""
set parms(subdb010) ""
-set parms(test001) {10000 0 "01"}
+set parms(subdb011) {13 10}
+set parms(subdb012) ""
+set parms(sdb001) ""
+set parms(sdb002) 10000
+set parms(sdb003) 1000
+set parms(sdb004) ""
+set parms(sdb005) 100
+set parms(sdb006) 100
+set parms(sdb007) ""
+set parms(sdb008) ""
+set parms(sdb009) ""
+set parms(sdb010) ""
+set parms(sdb011) {13 10}
+set parms(sdb012) ""
+set parms(si001) {200 1}
+set parms(si002) {200 2}
+set parms(si003) {200 3}
+set parms(si004) {200 4}
+set parms(si005) {200 5}
+set parms(test001) {10000 0 1 "001"}
set parms(test002) 10000
set parms(test003) ""
-set parms(test004) {10000 4 0}
+set parms(test004) {10000 "004" 0}
set parms(test005) 10000
-set parms(test006) {10000 0 6}
-set parms(test007) {10000 7}
-set parms(test008) {10000 8 0}
-set parms(test009) 10000
-set parms(test010) {10000 5 10}
-set parms(test011) {10000 5 11}
+set parms(test006) {10000 0 "006" 5}
+set parms(test007) {10000 "007" 5}
+set parms(test008) {"008" 0}
+set parms(test009) ""
+set parms(test010) {10000 5 "010"}
+set parms(test011) {10000 5 "011"}
set parms(test012) ""
set parms(test013) 10000
set parms(test014) 10000
set parms(test015) {7500 0}
set parms(test016) 10000
-set parms(test017) {0 19 17}
+set parms(test017) {0 19 "017"}
set parms(test018) 10000
set parms(test019) 10000
set parms(test020) 10000
@@ -47,21 +143,21 @@ set parms(test021) 10000
set parms(test022) ""
set parms(test023) ""
set parms(test024) 10000
-set parms(test025) {10000 0 25}
-set parms(test026) {2000 5 26}
+set parms(test025) {10000 0 "025"}
+set parms(test026) {2000 5 "026"}
set parms(test027) {100}
set parms(test028) ""
set parms(test029) 10000
set parms(test030) 10000
-set parms(test031) {10000 5 31}
-set parms(test032) {10000 5 32}
-set parms(test033) {10000 5 33}
+set parms(test031) {10000 5 "031"}
+set parms(test032) {10000 5 "032"}
+set parms(test033) {10000 5 "033"}
set parms(test034) 10000
set parms(test035) 10000
set parms(test036) 10000
set parms(test037) 100
-set parms(test038) {10000 5 38}
-set parms(test039) {10000 5 39}
+set parms(test038) {10000 5 "038"}
+set parms(test039) {10000 5 "039"}
set parms(test040) 10000
set parms(test041) 10000
set parms(test042) 1000
@@ -84,32 +180,81 @@ set parms(test058) ""
set parms(test059) ""
set parms(test060) ""
set parms(test061) ""
-set parms(test062) {200 200 62}
+set parms(test062) {200 200 "062"}
set parms(test063) ""
set parms(test064) ""
set parms(test065) ""
set parms(test066) ""
-set parms(test067) {1000 67}
+set parms(test067) {1000 "067"}
set parms(test068) ""
-set parms(test069) {50 69}
-set parms(test070) {4 2 1000 CONSUME 0 -txn 70}
-set parms(test071) {1 1 10000 CONSUME 0 -txn 71}
-set parms(test072) {512 20 72}
-set parms(test073) {512 50 73}
-set parms(test074) {-nextnodup 512 100 74}
-set parms(test075) {75}
-set parms(test076) {1000 76}
-set parms(test077) {1000 512 77}
-set parms(test078) {100 512 78}
-set parms(test079) {10000 512 79}
-set parms(test080) {80}
-set parms(test081) {13 81}
-set parms(test082) {-prevnodup 512 100 82}
+set parms(test069) {50 "069"}
+set parms(test070) {4 2 1000 CONSUME 0 -txn "070"}
+set parms(test071) {1 1 10000 CONSUME 0 -txn "071"}
+set parms(test072) {512 20 "072"}
+set parms(test073) {512 50 "073"}
+set parms(test074) {-nextnodup 100 "074"}
+set parms(test076) {1000 "076"}
+set parms(test077) {1000 "077"}
+set parms(test078) {100 512 "078"}
+set parms(test079) {10000 512 "079" 20}
+set parms(test081) {13 "081"}
+set parms(test082) {-prevnodup 100 "082"}
set parms(test083) {512 5000 2}
-set parms(test084) {10000 84 65536}
-set parms(test085) {512 3 10 85}
+set parms(test084) {10000 "084" 65536}
+set parms(test085) {512 3 10 "085"}
set parms(test086) ""
-set parms(test087) {512 50 87}
+set parms(test087) {512 50 "087"}
set parms(test088) ""
-set parms(test090) {1000 -txn 90}
-set parms(test091) {4 2 1000 0 91}
+set parms(test089) 1000
+set parms(test090) {10000 "090"}
+set parms(test091) {4 2 1000 0 "091"}
+set parms(test092) {1000}
+set parms(test093) {10000 "093"}
+set parms(test094) {10000 10 "094"}
+set parms(test095) {"095"}
+set parms(test096) {512 1000 19}
+set parms(test097) {500 400}
+set parms(test098) ""
+set parms(test099) 10000
+set parms(test100) {10000 "100"}
+set parms(test101) {1000 -txn "101"}
+set parms(test102) {1000 "102"}
+set parms(test103) {100 4294967250 "103"}
+
+# RPC server executables. Each of these is tested (if it exists)
+# when running the RPC tests.
+set svc_list { berkeley_db_svc berkeley_db_cxxsvc \
+ berkeley_db_javasvc }
+set rpc_svc berkeley_db_svc
+
+# Shell script tests. Each list entry is a {directory filename} pair,
+# invoked with "/bin/sh filename".
+set shelltest_list {
+ { scr001 chk.code }
+ { scr002 chk.def }
+ { scr003 chk.define }
+ { scr004 chk.javafiles }
+ { scr005 chk.nl }
+ { scr006 chk.offt }
+ { scr007 chk.proto }
+ { scr008 chk.pubdef }
+ { scr009 chk.srcfiles }
+ { scr010 chk.str }
+ { scr011 chk.tags }
+ { scr012 chk.vx_code }
+ { scr013 chk.stats }
+ { scr014 chk.err }
+ { scr015 chk.cxxtests }
+ { scr016 chk.javatests }
+ { scr017 chk.db185 }
+ { scr018 chk.comma }
+ { scr019 chk.include }
+ { scr020 chk.inc }
+ { scr021 chk.flags }
+ { scr022 chk.rr }
+ { scr023 chk.q }
+ { scr024 chk.bdb }
+ { scr025 chk.cxxmulti }
+ { scr026 chk.method }
+ { scr027 chk.javas }
+}
diff --git a/db/test/testutils.tcl b/db/test/testutils.tcl
index c5edaef7f..b66846591 100644
--- a/db/test/testutils.tcl
+++ b/db/test/testutils.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996, 1997, 1998, 1999, 2000
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: testutils.tcl,v 11.86 2001/01/18 23:21:14 krinsky Exp $
+# $Id: testutils.tcl,v 11.182 2003/09/30 17:32:26 sandstro Exp $
#
# Test system utilities
#
@@ -12,14 +12,25 @@
proc timestamp {{opt ""}} {
global __timestamp_start
+ set now [clock seconds]
+
+ # -c accurate to the click, instead of the second.
+ # -r seconds since the Epoch
+ # -t current time in the format expected by db_recover -t.
+ # -w wallclock time
+ # else wallclock plus elapsed time.
if {[string compare $opt "-r"] == 0} {
- clock seconds
+ return $now
} elseif {[string compare $opt "-t"] == 0} {
- # -t gives us the current time in the format expected by
- # db_recover -t.
- return [clock format [clock seconds] -format "%y%m%d%H%M.%S"]
+ return [clock format $now -format "%y%m%d%H%M.%S"]
+ } elseif {[string compare $opt "-w"] == 0} {
+ return [clock format $now -format "%c"]
} else {
- set now [clock seconds]
+ if {[string compare $opt "-c"] == 0} {
+ set printclicks 1
+ } else {
+ set printclicks 0
+ }
if {[catch {set start $__timestamp_start}] != 0} {
set __timestamp_start $now
@@ -30,7 +41,13 @@ proc timestamp {{opt ""}} {
set the_time [clock format $now -format ""]
set __timestamp_start $now
- format "%02d:%02d:%02d (%02d:%02d:%02d)" \
+ if { $printclicks == 1 } {
+ set pc_print [format ".%08u" [__fix_num [clock clicks]]]
+ } else {
+ set pc_print ""
+ }
+
+ format "%02d:%02d:%02d$pc_print (%02d:%02d:%02d)" \
[__fix_num [clock format $now -format "%H"]] \
[__fix_num [clock format $now -format "%M"]] \
[__fix_num [clock format $now -format "%S"]] \
@@ -115,32 +132,68 @@ proc get_file_as_key { db txn flags file} {
# open file and call dump_file to dumpkeys to tempfile
proc open_and_dump_file {
- dbname dbenv txn outfile checkfunc dump_func beg cont} {
+ dbname env outfile checkfunc dump_func beg cont } {
+ global encrypt
+ global passwd
source ./include.tcl
- if { $dbenv == "NULL" } {
- set db [berkdb open -rdonly -unknown $dbname]
- error_check_good dbopen [is_valid_db $db] TRUE
- } else {
- set db [berkdb open -env $dbenv -rdonly -unknown $dbname]
- error_check_good dbopen [is_valid_db $db] TRUE
+
+ set encarg ""
+ if { $encrypt > 0 && $env == "NULL" } {
+ set encarg "-encryptany $passwd"
+ }
+ set envarg ""
+ set txn ""
+ set txnenv 0
+ if { $env != "NULL" } {
+ append envarg " -env $env "
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append envarg " -auto_commit "
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
}
+ set db [eval {berkdb open} $envarg -rdonly -unknown $encarg $dbname]
+ error_check_good dbopen [is_valid_db $db] TRUE
$dump_func $db $txn $outfile $checkfunc $beg $cont
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
# open file and call dump_file to dumpkeys to tempfile
proc open_and_dump_subfile {
- dbname dbenv txn outfile checkfunc dump_func beg cont subdb} {
+ dbname env outfile checkfunc dump_func beg cont subdb} {
+ global encrypt
+ global passwd
source ./include.tcl
- if { $dbenv == "NULL" } {
- set db [berkdb open -rdonly -unknown $dbname $subdb]
- error_check_good dbopen [is_valid_db $db] TRUE
- } else {
- set db [berkdb open -env $dbenv -rdonly -unknown $dbname $subdb]
- error_check_good dbopen [is_valid_db $db] TRUE
+ set encarg ""
+ if { $encrypt > 0 && $env == "NULL" } {
+ set encarg "-encryptany $passwd"
}
+ set envarg ""
+ set txn ""
+ set txnenv 0
+ if { $env != "NULL" } {
+ append envarg "-env $env"
+ set txnenv [is_txnenv $env]
+ if { $txnenv == 1 } {
+ append envarg " -auto_commit "
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+ }
+ }
+ set db [eval {berkdb open -rdonly -unknown} \
+ $envarg $encarg {$dbname $subdb}]
+ error_check_good dbopen [is_valid_db $db] TRUE
$dump_func $db $txn $outfile $checkfunc $beg $cont
+ if { $txnenv == 1 } {
+ error_check_good txn [$t commit] 0
+ }
error_check_good db_close [$db close] 0
}
@@ -155,12 +208,18 @@ proc dump_file { db txn outfile checkfunc } {
proc dump_file_direction { db txn outfile checkfunc start continue } {
source ./include.tcl
- set outf [open $outfile w]
# Now we will get each key from the DB and dump to outfile
set c [eval {$db cursor} $txn]
error_check_good db_cursor [is_valid_cursor $c $db] TRUE
- for {set d [$c get $start] } { [llength $d] != 0 } {
- set d [$c get $continue] } {
+ dump_file_walk $c $outfile $checkfunc $start $continue
+ error_check_good curs_close [$c close] 0
+}
+
+proc dump_file_walk { c outfile checkfunc start continue {flag ""} } {
+ set outf [open $outfile w]
+ for {set d [eval {$c get} $flag $start] } \
+ { [llength $d] != 0 } \
+ {set d [eval {$c get} $flag $continue] } {
set kd [lindex $d 0]
set k [lindex $kd 0]
set d2 [lindex $kd 1]
@@ -170,7 +229,6 @@ proc dump_file_direction { db txn outfile checkfunc start continue } {
# puts $outf "$k $d2"
}
close $outf
- error_check_good curs_close [$c close] 0
}
proc dump_binkey_file { db txn outfile checkfunc } {
@@ -285,19 +343,30 @@ proc error_check_good { func result desired {txn 0} } {
}
# Locks have the prefix of their manager.
-proc is_substr { l mgr } {
- if { [string first $mgr $l] == -1 } {
+proc is_substr { str sub } {
+ if { [string first $sub $str] == -1 } {
return 0
} else {
return 1
}
}
+proc is_serial { str } {
+ global serial_tests
+
+ foreach test $serial_tests {
+ if { [is_substr $str $test] == 1 } {
+ return 1
+ }
+ }
+ return 0
+}
+
proc release_list { l } {
# Now release all the locks
foreach el $l {
- set ret [$el put]
+ catch { $el put } ret
error_check_good lock_put $ret 0
}
}
@@ -374,6 +443,54 @@ proc dup_check { db txn tmpfile dlist {extra 0}} {
error_check_good curs_close [$c close] 0
}
+# Check if each key appears exactly [llength dlist] times in the file with
+# the duplicate tags matching those that appear in dlist.
+proc dup_file_check { db txn tmpfile dlist } {
+ source ./include.tcl
+
+ set outf [open $tmpfile w]
+ # Now we will get each key from the DB and dump to outfile
+ set c [eval {$db cursor} $txn]
+ set lastkey ""
+ set done 0
+ while { $done != 1} {
+ foreach did $dlist {
+ set rec [$c get "-next"]
+ if { [string length $rec] == 0 } {
+ set done 1
+ break
+ }
+ set key [lindex [lindex $rec 0] 0]
+ if { [string compare $key $lastkey] != 0 } {
+ #
+ # If we changed files read in new contents.
+ #
+ set fid [open $key r]
+ fconfigure $fid -translation binary
+ set filecont [read $fid]
+ close $fid
+ }
+ set fulldata [lindex [lindex $rec 0] 1]
+ set id [id_of $fulldata]
+ set d [data_of $fulldata]
+ if { [string compare $key $lastkey] != 0 && \
+ $id != [lindex $dlist 0] } {
+ set e [lindex $dlist 0]
+ error "FAIL: \tKey \
+ $key, expected dup id $e, got $id"
+ }
+ error_check_good dupget.data $d $filecont
+ error_check_good dupget.id $id $did
+ set lastkey $key
+ }
+ if { $done != 1 } {
+ puts $outf $key
+ }
+ }
+ close $outf
+ error_check_good curs_close [$c close] 0
+}
+
# Parse duplicate data entries of the form N:data. Data_of returns
# the data part; id_of returns the numerical part
proc data_of {str} {
@@ -513,7 +630,7 @@ proc sentinel_init { } {
set filelist {}
set ret [catch {glob $testdir/begin.*} result]
- if { $ret == 0 } {
+ if { $ret == 0 } {
set filelist $result
}
@@ -527,16 +644,33 @@ proc sentinel_init { } {
}
}
-proc watch_procs { {delay 30} {max 3600} } {
+proc watch_procs { pidlist {delay 30} {max 3600} {quiet 0} } {
source ./include.tcl
set elapsed 0
+
+ # Don't start watching the processes until a sentinel
+ # file has been created for each one.
+ foreach pid $pidlist {
+ while { [file exists $testdir/begin.$pid] == 0 } {
+ tclsleep $delay
+ incr elapsed $delay
+ # If pids haven't been created in one-tenth
+ # of the time allowed for the whole test,
+ # there's a problem. Report an error and fail.
+ if { $elapsed > [expr {$max / 10}] } {
+ puts "FAIL: begin.pid not created"
+ break
+ }
+ }
+ }
+
while { 1 } {
tclsleep $delay
incr elapsed $delay
- # Find the list of processes withoutstanding sentinel
+ # Find the list of processes with outstanding sentinel
# files (i.e. a begin.pid and no end.pid).
set beginlist {}
set endlist {}
@@ -586,18 +720,14 @@ proc watch_procs { {delay 30} {max 3600} } {
if { $elapsed > $max } {
# We have exceeded the limit; kill processes
# and report an error
- set rlist {}
foreach i $l {
- set r [catch { exec $KILL $i } result]
- if { $r == 0 } {
- lappend rlist $i
- }
+ tclkill $i
}
- error_check_good "Processes still running" \
- [llength $rlist] 0
}
}
- puts "All processes have exited."
+ if { $quiet == 0 } {
+ puts "All processes have exited."
+ }
}
# These routines are all used from within the dbscript.tcl tester.
@@ -935,7 +1065,7 @@ proc filecheck { file txn } {
unset check_array
}
- open_and_dump_file $file NULL $txn $file.dump dbcheck dump_full_file \
+ open_and_dump_file $file NULL $file.dump dbcheck dump_full_file \
"-first" "-next"
# Check that everything we checked had all its data
@@ -964,71 +1094,64 @@ proc filecheck { file txn } {
}
}
-proc esetup { dir } {
- source ./include.tcl
-
- set ret [berkdb envremove -home $dir]
-
- fileremove -f $dir/file0 $dir/file1 $dir/file2 $dir/file3
- set mp [memp $dir 0644 -create -cachesize { 0 10240 }]
- set lp [lock_open "" -create 0644]
- error_check_good memp_close [$mp close] 0
- error_check_good lock_close [$lp close] 0
-}
-
-proc cleanup { dir env } {
+proc cleanup { dir env { quiet 0 } } {
global gen_upgrade
- global upgrade_dir
- global upgrade_be
- global upgrade_method
- global upgrade_name
+ global is_qnx_test
+ global old_encrypt
+ global passwd
source ./include.tcl
if { $gen_upgrade == 1 } {
- set vers [berkdb version]
- set maj [lindex $vers 0]
- set min [lindex $vers 1]
-
- if { $upgrade_be == 1 } {
- set version_dir "$maj.${min}be"
- } else {
- set version_dir "$maj.${min}le"
- }
-
- set dest $upgrade_dir/$version_dir/$upgrade_method/$upgrade_name
-
- catch {exec mkdir -p $dest}
- catch {exec sh -c "mv $dir/*.db $dest"}
- catch {exec sh -c "mv $dir/__dbq.* $dest"}
+ save_upgrade_files $dir
}
# check_handles
set remfiles {}
set ret [catch { glob $dir/* } result]
if { $ret == 0 } {
- foreach file $result {
+ foreach fileorig $result {
#
# We:
# - Ignore any env-related files, which are
# those that have __db.* or log.* if we are
- # running in an env.
+ # running in an env. Also ignore files whose
+ # names start with REPDIR_; these are replication
+ # subdirectories.
# - Call 'dbremove' on any databases.
# Remove any remaining temp files.
#
- switch -glob -- $file {
+ switch -glob -- $fileorig {
+ */DIR_* -
*/__db.* -
*/log.* {
if { $env != "NULL" } {
continue
} else {
- lappend remfiles $file
+ if { $is_qnx_test } {
+ catch {berkdb envremove -force \
+ -home $dir} r
+ }
+ lappend remfiles $fileorig
}
}
*.db {
set envargs ""
+ set encarg ""
+ #
+ # If in an env, it should be open crypto
+ # or not already.
+ #
if { $env != "NULL"} {
- set file [file tail $file]
+ set file [file tail $fileorig]
set envargs " -env $env "
+ if { [is_txnenv $env] } {
+ append envargs " -auto_commit "
+ }
+ } else {
+ if { $old_encrypt != 0 } {
+ set encarg "-encryptany $passwd"
+ }
+ set file $fileorig
}
# If a database is left in a corrupt
@@ -1038,15 +1161,39 @@ proc cleanup { dir env } {
# just forcibly remove the file with a warning
# message.
set ret [catch \
- {eval {berkdb dbremove} $envargs $file} res]
+ {eval {berkdb dbremove} $envargs $encarg \
+ $file} res]
+ # If dbremove failed and we're not in an env,
+ # note that we don't have 100% certainty
+ # about whether the previous run used
+ # encryption. Try to remove with crypto if
+ # we tried without, and vice versa.
if { $ret != 0 } {
- puts \
+ if { $env == "NULL" && \
+ $old_encrypt == 0} {
+ set ret [catch \
+ {eval {berkdb dbremove} \
+ -encryptany $passwd \
+ $file} res]
+ }
+ if { $env == "NULL" && \
+ $old_encrypt == 1 } {
+ set ret [catch \
+ {eval {berkdb dbremove} \
+ $file} res]
+ }
+ if { $ret != 0 } {
+ if { $quiet == 0 } {
+ puts \
"FAIL: dbremove in cleanup failed: $res"
- lappend remfiles $file
+ }
+ set file $fileorig
+ lappend remfiles $file
+ }
}
}
default {
- lappend remfiles $file
+ lappend remfiles $fileorig
}
}
}
@@ -1058,6 +1205,11 @@ proc cleanup { dir env } {
proc log_cleanup { dir } {
source ./include.tcl
+ global gen_upgrade_log
+
+ if { $gen_upgrade_log == 1 } {
+ save_upgrade_files $dir
+ }
set files [glob -nocomplain $dir/log.*]
if { [llength $files] != 0} {
@@ -1068,9 +1220,15 @@ proc log_cleanup { dir } {
}
proc env_cleanup { dir } {
+ global old_encrypt
+ global passwd
source ./include.tcl
- set stat [catch {berkdb envremove -home $dir} ret]
+ set encarg ""
+ if { $old_encrypt != 0 } {
+ set encarg "-encryptany $passwd"
+ }
+ set stat [catch {eval {berkdb envremove -home} $dir $encarg} ret]
#
# If something failed and we are left with a region entry
# in /dev/shmem that is zero-length, the envremove will
@@ -1091,6 +1249,51 @@ proc env_cleanup { dir } {
cleanup $dir NULL
}
+# Start an RPC server. Don't return to caller until the
+# server is up. Wait up to $maxwait seconds.
+proc rpc_server_start { { encrypted 0 } { maxwait 30 } { args "" } } {
+ source ./include.tcl
+ global rpc_svc
+ global passwd
+
+ set encargs ""
+ if { $encrypted == 1 } {
+ set encargs " -P $passwd "
+ }
+
+ if { [string compare $rpc_server "localhost"] == 0 } {
+ set dpid [eval {exec $util_path/$rpc_svc \
+ -h $rpc_testdir} $args $encargs &]
+ } else {
+ set dpid [eval {exec rsh $rpc_server \
+ $rpc_path/$rpc_svc -h $rpc_testdir $args} &]
+ }
+
+ # Wait a couple of seconds before we start looking for
+ # the server.
+ tclsleep 2
+ set home [file tail $rpc_testdir]
+ if { $encrypted == 1 } {
+ set encargs " -encryptaes $passwd "
+ }
+ for { set i 0 } { $i < $maxwait } { incr i } {
+ if {[catch {set env [eval berkdb_env -create \
+ -home $home -server $rpc_server $encargs]} res]} {
+ # If we have an error, sleep for a second.
+ tclsleep 1
+ } else {
+ # Server is up, clean up and return to caller
+ error_check_good env_close [$env close] 0
+ break
+ }
+ if { $i >= $maxwait } {
+ puts "FAIL: RPC server\
+ not started after $maxwait seconds"
+ }
+ }
+ return $dpid
+}
+
proc remote_cleanup { server dir localdir } {
set home [file tail $dir]
error_check_good cleanup:remove [berkdb envremove -home $home \
@@ -1136,33 +1339,90 @@ proc help { cmd } {
# Notice that we catch the return from CP and do not do anything with it.
# This is because Solaris CP seems to exit non-zero on occasion, but
# everything else seems to run just fine.
+#
+# We split it into two functions so that the preparation and command
+# could be executed in a different process than the recovery.
+#
+proc op_codeparse { encodedop op } {
+ set op1 ""
+ set op2 ""
+ switch $encodedop {
+ "abort" {
+ set op1 $encodedop
+ set op2 ""
+ }
+ "commit" {
+ set op1 $encodedop
+ set op2 ""
+ }
+ "prepare-abort" {
+ set op1 "prepare"
+ set op2 "abort"
+ }
+ "prepare-commit" {
+ set op1 "prepare"
+ set op2 "commit"
+ }
+ "prepare-discard" {
+ set op1 "prepare"
+ set op2 "discard"
+ }
+ }
+
+ if { $op == "op" } {
+ return $op1
+ } else {
+ return $op2
+ }
+}
+
proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
+ source ./include.tcl
+
+ set op [op_codeparse $encodedop "op"]
+ set op2 [op_codeparse $encodedop "sub"]
+ puts "\t$msg $encodedop"
+ set gidf ""
+ if { $op == "prepare" } {
+ sentinel_init
+
+ # Fork off a child to run the cmd
+ # We append the gid, so start here making sure
+ # we don't have old gid's around.
+ set outfile $testdir/childlog
+ fileremove -f $testdir/gidfile
+ set gidf $testdir/gidfile
+ set pidlist {}
+ # puts "$tclsh_path $test_path/recdscript.tcl $testdir/recdout \
+ # $op $dir $env_cmd $dbfile $gidf $cmd"
+ set p [exec $tclsh_path $test_path/wrap.tcl recdscript.tcl \
+ $testdir/recdout $op $dir $env_cmd $dbfile $gidf $cmd &]
+ lappend pidlist $p
+ watch_procs $pidlist 5
+ set f1 [open $testdir/recdout r]
+ set r [read $f1]
+ puts -nonewline $r
+ close $f1
+ fileremove -f $testdir/recdout
+ } else {
+ op_recover_prep $op $dir $env_cmd $dbfile $gidf $cmd
+ }
+ op_recover_rec $op $op2 $dir $env_cmd $dbfile $gidf
+}
+
+proc op_recover_prep { op dir env_cmd dbfile gidf cmd } {
global log_log_record_types
global recd_debug
global recd_id
global recd_op
source ./include.tcl
- #puts "op_recover: $encodedop $dir $env_cmd $dbfile $cmd $msg"
+ #puts "op_recover: $op $dir $env $dbfile $cmd"
set init_file $dir/t1
set afterop_file $dir/t2
set final_file $dir/t3
- set op ""
- set op2 ""
- if { $encodedop == "prepare-abort" } {
- set op "prepare"
- set op2 "abort"
- } elseif { $encodedop == "prepare-commit" } {
- set op "prepare"
- set op2 "commit"
- } else {
- set op $encodedop
- }
-
- puts "\t$msg $encodedop"
-
# Keep track of the log types we've seen
if { $log_log_record_types == 1} {
logtrack_read $dir
@@ -1172,13 +1432,15 @@ proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
catch { file copy -force $dir/$dbfile $dir/$dbfile.init } res
copy_extent_file $dir $dbfile init
+ convert_encrypt $env_cmd
set env [eval $env_cmd]
- set db [berkdb open -env $env $dbfile]
+ error_check_good envopen [is_valid_env $env] TRUE
+
+ set db [berkdb open -auto_commit -env $env $dbfile]
error_check_good dbopen [is_valid_db $db] TRUE
# Dump out file contents for initial case
- set tflags ""
- open_and_dump_file $dbfile $env $tflags $init_file nop \
+ open_and_dump_file $dbfile $env $init_file nop \
dump_file_direction "-first" "-next"
set t [$env txn]
@@ -1233,43 +1495,38 @@ proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
set record_exec_cmd_ret 0
set lenient_exec_cmd_ret 0
- # Sync the file so that we can capture a snapshot to test
- # recovery.
+ # Sync the file so that we can capture a snapshot to test recovery.
error_check_good sync:$db [$db sync] 0
catch { file copy -force $dir/$dbfile $dir/$dbfile.afterop } res
copy_extent_file $dir $dbfile afterop
+ open_and_dump_file $dir/$dbfile.afterop NULL \
+ $afterop_file nop dump_file_direction "-first" "-next"
- #set tflags "-txn $t"
- open_and_dump_file $dir/$dbfile.afterop NULL $tflags \
- $afterop_file nop dump_file_direction \
- "-first" "-next"
#puts "\t\t\tExecuting txn_$op:$t"
- error_check_good txn_$op:$t [$t $op] 0
- if { $op2 != "" } {
- #puts "\t\t\tExecuting txn_$op2:$t"
- error_check_good txn_$op2:$t [$t $op2] 0
+ if { $op == "prepare" } {
+ set gid [make_gid global:$t]
+ set gfd [open $gidf w+]
+ puts $gfd $gid
+ close $gfd
+ error_check_good txn_$op:$t [$t $op $gid] 0
+ } else {
+ error_check_good txn_$op:$t [$t $op] 0
}
- switch $encodedop {
+ switch $op {
"commit" { puts "\t\tCommand executed and committed." }
"abort" { puts "\t\tCommand executed and aborted." }
"prepare" { puts "\t\tCommand executed and prepared." }
- "prepare-commit" {
- puts "\t\tCommand executed, prepared, and committed."
- }
- "prepare-abort" {
- puts "\t\tCommand executed, prepared, and aborted."
- }
}
- # Dump out file and save a copy.
+ # Sync the file so that we can capture a snapshot to test recovery.
error_check_good sync:$db [$db sync] 0
- open_and_dump_file $dir/$dbfile NULL $tflags $final_file nop \
- dump_file_direction "-first" "-next"
catch { file copy -force $dir/$dbfile $dir/$dbfile.final } res
copy_extent_file $dir $dbfile final
+ open_and_dump_file $dir/$dbfile.final NULL \
+ $final_file nop dump_file_direction "-first" "-next"
# If this is an abort or prepare-abort, it should match the
# original file.
@@ -1281,56 +1538,121 @@ proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
# Thus we just skip this in the prepare-only case; what
# we care about are the results of a prepare followed by a
# recovery, which we test later.
- if { $op == "commit" || $op2 == "commit" } {
+ if { $op == "commit" } {
filesort $afterop_file $afterop_file.sort
filesort $final_file $final_file.sort
error_check_good \
diff(post-$op,pre-commit):diff($afterop_file,$final_file) \
[filecmp $afterop_file.sort $final_file.sort] 0
- } elseif { $op == "abort" || $op2 == "abort" } {
+ } elseif { $op == "abort" } {
filesort $init_file $init_file.sort
filesort $final_file $final_file.sort
error_check_good \
diff(initial,post-$op):diff($init_file,$final_file) \
[filecmp $init_file.sort $final_file.sort] 0
} else {
- # Make sure this really is a prepare-only
- error_check_good assert:prepare-only $encodedop "prepare"
+ # Make sure this really is one of the prepare tests
+ error_check_good assert:prepare-test $op "prepare"
}
# Running recovery on this database should not do anything.
# Flush all data to disk, close the environment and save the
# file.
- error_check_good close:$db [$db close] 0
-
- # If all we've done is a prepare, then there's still a
- # transaction active, and an env close will return DB_RUNRECOVERY
- if { $encodedop == "prepare" } {
- catch {$env close} ret
- error_check_good env_close \
- [is_substr $ret DB_RUNRECOVERY] 1
- } else {
- reset_env $env
+ # XXX DO NOT CLOSE FILE ON PREPARE -- if you are prepared,
+ # you really have an active transaction and you're not allowed
+ # to close files that are being acted upon by in-process
+ # transactions.
+ if { $op != "prepare" } {
+ error_check_good close:$db [$db close] 0
+ }
+
+ #
+ # If we are running 'prepare' don't close the env with an
+ # active transaction. Leave it alone so the close won't
+ # quietly abort it on us.
+ if { [is_substr $op "prepare"] != 1 } {
+ error_check_good envclose [$env close] 0
+ }
+ return
+}
+
+proc op_recover_rec { op op2 dir env_cmd dbfile gidf} {
+ global log_log_record_types
+ global recd_debug
+ global recd_id
+ global recd_op
+ global encrypt
+ global passwd
+ source ./include.tcl
+
+ #puts "op_recover_rec: $op $op2 $dir $env_cmd $dbfile $gidf"
+
+ set init_file $dir/t1
+ set afterop_file $dir/t2
+ set final_file $dir/t3
+
+ # Keep track of the log types we've seen
+ if { $log_log_record_types == 1} {
+ logtrack_read $dir
}
berkdb debug_check
- puts -nonewline "\t\tRunning recovery ... "
+ puts -nonewline "\t\top_recover_rec: Running recovery ... "
flush stdout
- set stat [catch {exec $util_path/db_recover -h $dir -c} result]
+ set recargs "-h $dir -c "
+ if { $encrypt > 0 } {
+ append recargs " -P $passwd "
+ }
+ set stat [catch {eval exec $util_path/db_recover -e $recargs} result]
if { $stat == 1 } {
error "FAIL: Recovery error: $result."
}
puts -nonewline "complete ... "
- error_check_good db_verify [verify_dir $testdir "\t\t" 0 1] 0
+ #
+ # We cannot run db_recover here because that will open an env, run
+ # recovery, then close it, which will abort the outstanding txns.
+ # We want to do it ourselves.
+ #
+ set env [eval $env_cmd]
+ error_check_good dbenv [is_valid_widget $env env] TRUE
+ error_check_good db_verify [verify_dir $testdir "\t\t" 0 1] 0
puts "verified"
- berkdb debug_check
- set env [eval $env_cmd]
- error_check_good dbenv [is_valid_widget $env env] TRUE
- open_and_dump_file $dir/$dbfile NULL $tflags $final_file nop \
+ # If we left a txn as prepared, but not aborted or committed,
+ # we need to do a txn_recover. Make sure we have the same
+ # number of txns we want.
+ if { $op == "prepare"} {
+ set txns [$env txn_recover]
+ error_check_bad txnrecover [llength $txns] 0
+ set gfd [open $gidf r]
+ set origgid [read -nonewline $gfd]
+ close $gfd
+ set txnlist [lindex $txns 0]
+ set t [lindex $txnlist 0]
+ set gid [lindex $txnlist 1]
+ error_check_good gidcompare $gid $origgid
+ puts "\t\t\tExecuting txn_$op2:$t"
+ error_check_good txn_$op2:$t [$t $op2] 0
+ #
+ # If we are testing discard, we do need to resolve
+ # the txn, so get the list again and now abort it.
+ #
+ if { $op2 == "discard" } {
+ set txns [$env txn_recover]
+ error_check_bad txnrecover [llength $txns] 0
+ set txnlist [lindex $txns 0]
+ set t [lindex $txnlist 0]
+ set gid [lindex $txnlist 1]
+ error_check_good gidcompare $gid $origgid
+ puts "\t\t\tExecuting txn_abort:$t"
+ error_check_good disc_txn_abort:$t [$t abort] 0
+ }
+ }
+
+ open_and_dump_file $dir/$dbfile NULL $final_file nop \
dump_file_direction "-first" "-next"
if { $op == "commit" || $op2 == "commit" } {
filesort $afterop_file $afterop_file.sort
@@ -1358,11 +1680,10 @@ proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
}
berkdb debug_check
- puts -nonewline \
- "\t\tRunning recovery on pre-op database ... "
+ puts -nonewline "\t\tRunning recovery on pre-op database ... "
flush stdout
- set stat [catch {exec $util_path/db_recover -h $dir -c} result]
+ set stat [catch {eval exec $util_path/db_recover $recargs} result]
if { $stat == 1 } {
error "FAIL: Recovery error: $result."
}
@@ -1374,7 +1695,7 @@ proc op_recover { encodedop dir env_cmd dbfile cmd msg } {
set env [eval $env_cmd]
- open_and_dump_file $dir/$dbfile NULL $tflags $final_file nop \
+ open_and_dump_file $dir/$dbfile NULL $final_file nop \
dump_file_direction "-first" "-next"
if { $op == "commit" || $op2 == "commit" } {
filesort $final_file $final_file.sort
@@ -1458,6 +1779,54 @@ proc reset_env { env } {
error_check_good env_close [$env close] 0
}
+proc minlocks { myenv locker_id obj_id num } {
+ return [countlocks $myenv $locker_id $obj_id $num ]
+}
+
+proc maxlocks { myenv locker_id obj_id num } {
+ return [countlocks $myenv $locker_id $obj_id $num ]
+}
+
+proc minwrites { myenv locker_id obj_id num } {
+ return [countlocks $myenv $locker_id $obj_id $num ]
+}
+
+proc countlocks { myenv locker_id obj_id num } {
+ set locklist ""
+ for { set i 0} {$i < [expr $obj_id * 4]} { incr i } {
+ set r [catch {$myenv lock_get read $locker_id \
+ [expr $obj_id * 1000 + $i]} l ]
+ if { $r != 0 } {
+ puts $l
+ return ERROR
+ } else {
+ error_check_good lockget:$obj_id [is_substr $l $myenv] 1
+ lappend locklist $l
+ }
+ }
+
+ # Now acquire a write lock
+ if { $obj_id != 1 } {
+ set r [catch {$myenv lock_get write $locker_id \
+ [expr $obj_id * 1000 + 10]} l ]
+ if { $r != 0 } {
+ puts $l
+ return ERROR
+ } else {
+ error_check_good lockget:$obj_id [is_substr $l $myenv] 1
+ lappend locklist $l
+ }
+ }
+
+ set ret [ring $myenv $locker_id $obj_id $num]
+
+ foreach l $locklist {
+ error_check_good lockput:$l [$l put] 0
+ }
+
+ return $ret
+}
+
# This routine will let us obtain a ring of deadlocks.
# Each locker will get a lock on obj_id, then sleep, and
# then try to lock (obj_id + 1) % num.
@@ -1469,7 +1838,7 @@ proc ring { myenv locker_id obj_id num } {
source ./include.tcl
if {[catch {$myenv lock_get write $locker_id $obj_id} lock1] != 0} {
- puts $errorInfo
+ puts $lock1
return ERROR
} else {
error_check_good lockget:$obj_id [is_substr $lock1 $myenv] 1
@@ -1482,7 +1851,12 @@ proc ring { myenv locker_id obj_id num } {
if {[string match "*DEADLOCK*" $lock2] == 1} {
set ret DEADLOCK
} else {
- set ret ERROR
+ if {[string match "*NOTGRANTED*" $lock2] == 1} {
+ set ret DEADLOCK
+ } else {
+ puts $lock2
+ set ret ERROR
+ }
}
} else {
error_check_good lockget:$obj_id [is_substr $lock2 $myenv] 1
@@ -1511,7 +1885,7 @@ proc clump { myenv locker_id obj_id num } {
set obj_id 10
if {[catch {$myenv lock_get read $locker_id $obj_id} lock1] != 0} {
- puts $errorInfo
+ puts $lock1
return ERROR
} else {
error_check_good lockget:$obj_id \
@@ -1524,7 +1898,12 @@ proc clump { myenv locker_id obj_id num } {
if {[string match "*DEADLOCK*" $lock2] == 1} {
set ret DEADLOCK
} else {
- set ret ERROR
+ if {[string match "*NOTGRANTED*" $lock2] == 1} {
+ set ret DEADLOCK
+ } else {
+ puts $lock2
+ set ret ERROR
+ }
}
} else {
error_check_good \
@@ -1540,21 +1919,53 @@ proc clump { myenv locker_id obj_id num } {
error_check_good lockput:$lock2 [$lock2 put] 0
}
return $ret
- }
+}
-proc dead_check { t procs dead clean other } {
+proc dead_check { t procs timeout dead clean other } {
error_check_good $t:$procs:other $other 0
switch $t {
ring {
+ # With timeouts the number of deadlocks is unpredictable:
+ # test for at least one deadlock.
+ if { $timeout != 0 && $dead > 1 } {
+ set clean [ expr $clean + $dead - 1]
+ set dead 1
+ }
error_check_good $t:$procs:deadlocks $dead 1
error_check_good $t:$procs:success $clean \
[expr $procs - 1]
}
clump {
+ # With timeouts the number of deadlocks is unpredictable:
+ # test for no more than one successful lock.
+ if { $timeout != 0 && $dead == $procs } {
+ set clean 1
+ set dead [expr $procs - 1]
+ }
error_check_good $t:$procs:deadlocks $dead \
[expr $procs - 1]
error_check_good $t:$procs:success $clean 1
}
+ oldyoung {
+ error_check_good $t:$procs:deadlocks $dead 1
+ error_check_good $t:$procs:success $clean \
+ [expr $procs - 1]
+ }
+ minlocks {
+ error_check_good $t:$procs:deadlocks $dead 1
+ error_check_good $t:$procs:success $clean \
+ [expr $procs - 1]
+ }
+ maxlocks {
+ error_check_good $t:$procs:deadlocks $dead 1
+ error_check_good $t:$procs:success $clean \
+ [expr $procs - 1]
+ }
+ minwrites {
+ error_check_good $t:$procs:deadlocks $dead 1
+ error_check_good $t:$procs:success $clean \
+ [expr $procs - 1]
+ }
default {
error "Test $t not implemented"
}
@@ -1604,6 +2015,9 @@ proc reverse { s } {
return $res
}
+#
+# This is a internal only proc. All tests should use 'is_valid_db' etc.
+#
proc is_valid_widget { w expected } {
# First N characters must match "expected"
set l [string length $expected]
@@ -1640,6 +2054,10 @@ proc is_valid_lock { lock env } {
return [is_valid_widget $lock $env.lock]
}
+proc is_valid_logc { logc env } {
+ return [is_valid_widget $logc $env.logc]
+}
+
proc is_valid_mpool { mpool env } {
return [is_valid_widget $mpool $env.mp]
}
@@ -1656,11 +2074,20 @@ proc is_valid_mutex { m env } {
return [is_valid_widget $m $env.mutex]
}
+proc is_valid_lock {l env} {
+ return [is_valid_widget $l $env.lock]
+}
+
+proc is_valid_locker {l } {
+ return [is_valid_widget $l ""]
+}
+
proc send_cmd { fd cmd {sleep 2}} {
source ./include.tcl
- puts $fd "set v \[$cmd\]"
- puts $fd "puts \$v"
+ puts $fd "if \[catch {set v \[$cmd\] ; puts \$v} ret\] { \
+ puts \"FAIL: \$ret\" \
+ }"
puts $fd "flush stdout"
flush $fd
berkdb debug_check
@@ -1747,6 +2174,13 @@ proc make_fixed_length {method data {pad 0}} {
return $data
}
+proc make_gid {data} {
+ while { [string length $data] < 128 } {
+ set data [format ${data}0]
+ }
+ return $data
+}
+
# shift data for partial
# pad with fixed pad (which is NULL)
proc partial_shift { data offset direction} {
@@ -1785,7 +2219,9 @@ proc convert_method { method } {
switch -- $method {
-btree -
-dbtree -
+ dbtree -
-ddbtree -
+ ddbtree -
-rbtree -
BTREE -
DB_BTREE -
@@ -1799,9 +2235,12 @@ proc convert_method { method } {
rbtree { return "-btree" }
-dhash -
+ -ddhash -
-hash -
DB_HASH -
HASH -
+ dhash -
+ ddhash -
db_hash -
h -
hash { return "-hash" }
@@ -1819,7 +2258,7 @@ proc convert_method { method } {
qe -
qamext -
-queueext -
- queueextent -
+ queueextent -
queueext { return "-queue" }
-frecno -
@@ -1845,6 +2284,32 @@ proc convert_method { method } {
}
}
+proc split_encargs { largs encargsp } {
+ global encrypt
+ upvar $encargsp e
+ set eindex [lsearch $largs "-encrypta*"]
+ if { $eindex == -1 } {
+ set e ""
+ set newl $largs
+ } else {
+ set eend [expr $eindex + 1]
+ set e [lrange $largs $eindex $eend]
+ set newl [lreplace $largs $eindex $eend "-encrypt"]
+ }
+ return $newl
+}
+
+proc convert_encrypt { largs } {
+ global encrypt
+ global old_encrypt
+
+ set old_encrypt $encrypt
+ set encrypt 0
+ if { [lsearch $largs "-encrypt*"] != -1 } {
+ set encrypt 1
+ }
+}
+
# If recno-with-renumbering or btree-with-renumbering is specified, then
# fix the arguments to specify the DB_RENUMBER/DB_RECNUM option for the
# -flags argument.
@@ -1856,13 +2321,15 @@ proc convert_args { method {largs ""} } {
source ./include.tcl
if { [string first - $largs] == -1 &&\
- [string compare $largs ""] != 0 } {
+ [string compare $largs ""] != 0 &&\
+ [string compare $largs {{}}] != 0 } {
set errstring "args must contain a hyphen; does this test\
have no numeric args?"
- puts "FAIL:[timestamp] $errstring"
+ puts "FAIL:[timestamp] $errstring (largs was $largs)"
return -code return
}
+ convert_encrypt $largs
if { $gen_upgrade == 1 && $upgrade_be == 1 } {
append largs " -lorder 4321 "
} elseif { $gen_upgrade == 1 && $upgrade_be != 1 } {
@@ -1880,6 +2347,9 @@ proc convert_args { method {largs ""} } {
append largs " -dupsort "
} elseif { [is_dhash $method] == 1 } {
append largs " -dup "
+ } elseif { [is_ddhash $method] == 1 } {
+ append largs " -dup "
+ append largs " -dupsort "
} elseif { [is_queueext $method] == 1 } {
append largs " -extent 2 "
}
@@ -1900,7 +2370,7 @@ proc is_btree { method } {
}
proc is_dbtree { method } {
- set names { -dbtree }
+ set names { -dbtree dbtree }
if { [lsearch $names $method] >= 0 } {
return 1
} else {
@@ -1909,7 +2379,7 @@ proc is_dbtree { method } {
}
proc is_ddbtree { method } {
- set names { -ddbtree }
+ set names { -ddbtree ddbtree }
if { [lsearch $names $method] >= 0 } {
return 1
} else {
@@ -1963,7 +2433,16 @@ proc is_hash { method } {
}
proc is_dhash { method } {
- set names { -dhash }
+ set names { -dhash dhash }
+ if { [lsearch $names $method] >= 0 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_ddhash { method } {
+ set names { -ddhash ddhash }
if { [lsearch $names $method] >= 0 } {
return 1
} else {
@@ -2082,6 +2561,7 @@ proc fileremove { args } {
}
proc findfail { args } {
+ set errstring {}
foreach a $args {
if { [file exists $a] == 0 } {
continue
@@ -2089,13 +2569,12 @@ proc findfail { args } {
set f [open $a r]
while { [gets $f line] >= 0 } {
if { [string first FAIL $line] == 0 } {
- close $f
- return 1
+ lappend errstring $a:$line
}
}
close $f
}
- return 0
+ return $errstring
}
# Sleep for s seconds.
@@ -2107,6 +2586,16 @@ proc tclsleep { s } {
after [expr $s * 1000 + 56]
}
+# Kill a process.
+proc tclkill { id } {
+ source ./include.tcl
+
+ while { [ catch {exec $KILL -0 $id} ] == 0 } {
+ catch {exec $KILL -9 $id}
+ tclsleep 5
+ }
+}
+
# Compare two files, a la diff. Returns 1 if non-identical, 0 if identical.
proc filecmp { file_a file_b } {
set fda [open $file_a r]
@@ -2133,20 +2622,50 @@ proc filecmp { file_a file_b } {
return 0
}
+# Give two SORTED files, one of which is a complete superset of the other,
+# extract out the unique portions of the superset and put them in
+# the given outfile.
+proc fileextract { superset subset outfile } {
+ set sup [open $superset r]
+ set sub [open $subset r]
+ set outf [open $outfile w]
+
+ # The gets can't be in the while condition because we'll
+ # get short-circuit evaluated.
+ set nrp [gets $sup pline]
+ set nrb [gets $sub bline]
+ while { $nrp >= 0 } {
+ if { $nrp != $nrb || [string compare $pline $bline] != 0} {
+ puts $outf $pline
+ } else {
+ set nrb [gets $sub bline]
+ }
+ set nrp [gets $sup pline]
+ }
+
+ close $sup
+ close $sub
+ close $outf
+ return 0
+}
+
# Verify all .db files in the specified directory.
-proc verify_dir { \
- {directory "./TESTDIR"} { pref "" } { noredo 0 } { quiet 0 } } {
+proc verify_dir { {directory $testdir} \
+ { pref "" } { noredo 0 } { quiet 0 } { nodump 0 } { cachesize 0 } } {
+ global encrypt
+ global passwd
+
# If we're doing database verification between tests, we don't
# want to do verification twice without an intervening cleanup--some
# test was skipped. Always verify by default (noredo == 0) so
# that explicit calls to verify_dir during tests don't require
# cleanup commands.
- if { $noredo == 1 } {
+ if { $noredo == 1 } {
if { [file exists $directory/NOREVERIFY] == 1 } {
- if { $quiet == 0 } {
+ if { $quiet == 0 } {
puts "Skipping verification."
}
- return
+ return 0
}
set f [open $directory/NOREVERIFY w]
close $f
@@ -2154,31 +2673,176 @@ proc verify_dir { \
if { [catch {glob $directory/*.db} dbs] != 0 } {
# No files matched
- return
- }
- if { [file exists /dev/stderr] == 1 } {
- set errfilearg "-errfile /dev/stderr "
- } else {
- set errfilearg ""
+ return 0
}
+ set errfilearg "-errfile /dev/stderr "
set errpfxarg {-errpfx "FAIL: verify" }
set errarg $errfilearg$errpfxarg
set ret 0
+
+ # Open an env, so that we have a large enough cache. Pick
+ # a fairly generous default if we haven't specified something else.
+
+ if { $cachesize == 0 } {
+ set cachesize [expr 1024 * 1024]
+ }
+ set encarg ""
+ if { $encrypt != 0 } {
+ set encarg "-encryptaes $passwd"
+ }
+
+ set env [eval {berkdb_env -create -private} $encarg \
+ {-cachesize [list 0 $cachesize 0]}]
+ set earg " -env $env $errarg "
+
foreach db $dbs {
- if { [catch {eval {berkdb dbverify} $errarg $db} res] != 0 } {
+ if { [catch {eval {berkdb dbverify} $earg $db} res] != 0 } {
puts $res
puts "FAIL:[timestamp] Verification of $db failed."
set ret 1
+ continue
} else {
error_check_good verify:$db $res 0
- if { $quiet == 0 } {
+ if { $quiet == 0 } {
puts "${pref}Verification of $db succeeded."
}
}
+
+ # Skip the dump if it's dangerous to do it.
+ if { $nodump == 0 } {
+ if { [catch {eval dumploadtest $db} res] != 0 } {
+ puts $res
+ puts "FAIL:[timestamp] Dump/load of $db failed."
+ set ret 1
+ continue
+ } else {
+ error_check_good dumpload:$db $res 0
+ if { $quiet == 0 } {
+ puts \
+ "${pref}Dump/load of $db succeeded."
+ }
+ }
+ }
}
+
+ error_check_good vrfyenv_close [$env close] 0
+
return $ret
}
+# Is the database handle in $db a master database containing subdbs?
+proc check_for_subdbs { db } {
+ set stat [$db stat]
+ for { set i 0 } { [string length [lindex $stat $i]] > 0 } { incr i } {
+ set elem [lindex $stat $i]
+ if { [string compare [lindex $elem 0] Flags] == 0 } {
+ # This is the list of flags; look for
+ # "subdatabases".
+ if { [is_substr [lindex $elem 1] subdatabases] } {
+ return 1
+ }
+ }
+ }
+ return 0
+}
+
+proc db_compare { olddb newdb olddbname newdbname } {
+ # Walk through olddb and newdb and make sure their contents
+ # are identical.
+ set oc [$olddb cursor]
+ set nc [$newdb cursor]
+ error_check_good orig_cursor($olddbname) \
+ [is_valid_cursor $oc $olddb] TRUE
+ error_check_good new_cursor($olddbname) \
+ [is_valid_cursor $nc $newdb] TRUE
+
+ for { set odbt [$oc get -first] } { [llength $odbt] > 0 } \
+ { set odbt [$oc get -next] } {
+ set ndbt [$nc get -get_both \
+ [lindex [lindex $odbt 0] 0] [lindex [lindex $odbt 0] 1]]
+ error_check_good db_compare($olddbname/$newdbname) $ndbt $odbt
+ }
+
+ for { set ndbt [$nc get -first] } { [llength $ndbt] > 0 } \
+ { set ndbt [$nc get -next] } {
+ set odbt [$oc get -get_both \
+ [lindex [lindex $ndbt 0] 0] [lindex [lindex $ndbt 0] 1]]
+ error_check_good db_compare_back($olddbname) $odbt $ndbt
+ }
+
+ error_check_good orig_cursor_close($olddbname) [$oc close] 0
+ error_check_good new_cursor_close($olddbname) [$nc close] 0
+
+ return 0
+}
+
+proc dumploadtest { db } {
+ global util_path
+ global encrypt
+ global passwd
+
+ set newdbname $db-dumpload.db
+
+ set dbarg ""
+ set utilflag ""
+ if { $encrypt != 0 } {
+ set dbarg "-encryptany $passwd"
+ set utilflag "-P $passwd"
+ }
+
+ # Dump/load the whole file, including all subdbs.
+ set rval [catch {eval {exec $util_path/db_dump} $utilflag -k \
+ $db | $util_path/db_load $utilflag $newdbname} res]
+ error_check_good db_dump/db_load($db:$res) $rval 0
+
+ # If the old file was empty, there's no new file and we're done.
+ if { [file exists $newdbname] == 0 } {
+ return 0
+ }
+
+ # Open original database.
+ set olddb [eval {berkdb_open -rdonly} $dbarg $db]
+ error_check_good olddb($db) [is_valid_db $olddb] TRUE
+
+ if { [check_for_subdbs $olddb] } {
+ # If $db has subdatabases, compare each one separately.
+ set oc [$olddb cursor]
+ error_check_good orig_cursor($db) \
+ [is_valid_cursor $oc $olddb] TRUE
+
+ for { set dbt [$oc get -first] } \
+ { [llength $dbt] > 0 } \
+ { set dbt [$oc get -next] } {
+ set subdb [lindex [lindex $dbt 0] 0]
+
+ set oldsubdb \
+ [eval {berkdb_open -rdonly} $dbarg {$db $subdb}]
+ error_check_good olddb($db) [is_valid_db $oldsubdb] TRUE
+
+ # Open the new database.
+ set newdb \
+ [eval {berkdb_open -rdonly} $dbarg {$newdbname $subdb}]
+ error_check_good newdb($db) [is_valid_db $newdb] TRUE
+
+ db_compare $oldsubdb $newdb $db $newdbname
+ error_check_good new_db_close($db) [$newdb close] 0
+ error_check_good old_subdb_close($oldsubdb) [$oldsubdb close] 0
+ }
+
+ error_check_good oldcclose [$oc close] 0
+ } else {
+ # Open the new database.
+ set newdb [eval {berkdb_open -rdonly} $dbarg $newdbname]
+ error_check_good newdb($db) [is_valid_db $newdb] TRUE
+
+ db_compare $olddb $newdb $db $newdbname
+ error_check_good new_db_close($db) [$newdb close] 0
+ }
+
+ error_check_good orig_db_close($db) [$olddb close] 0
+ eval berkdb dbremove $dbarg $newdbname
+}
+
# Generate randomly ordered, guaranteed-unique four-character strings that can
# be used to differentiate duplicates without creating duplicate duplicates.
# (test031 & test032) randstring_init is required before the first call to
@@ -2285,10 +2949,16 @@ proc extractflags { args } {
# Wrapper for berkdb open, used throughout the test suite so that we can
# set an errfile/errpfx as appropriate.
proc berkdb_open { args } {
+ global is_envmethod
+
+ if { [info exists is_envmethod] == 0 } {
+ set is_envmethod 0
+ }
+
set errargs {}
- if { [file exists /dev/stderr] == 1 } {
+ if { $is_envmethod == 0 } {
append errargs " -errfile /dev/stderr "
- append errargs " -errpfx \\F\\A\\I\\L "
+ append errargs " -errpfx \\F\\A\\I\\L"
}
eval {berkdb open} $errargs $args
@@ -2299,6 +2969,29 @@ proc berkdb_open_noerr { args } {
eval {berkdb open} $args
}
+# Wrapper for berkdb env, used throughout the test suite so that we can
+# set an errfile/errpfx as appropriate.
+proc berkdb_env { args } {
+ global is_envmethod
+
+ if { [info exists is_envmethod] == 0 } {
+ set is_envmethod 0
+ }
+
+ set errargs {}
+ if { $is_envmethod == 0 } {
+ append errargs " -errfile /dev/stderr "
+ append errargs " -errpfx \\F\\A\\I\\L"
+ }
+
+ eval {berkdb env} $errargs $args
+}
+
+# Version without errpfx/errfile, used when we're expecting a failure.
+proc berkdb_env_noerr { args } {
+ eval {berkdb env} $args
+}
+
proc check_handles { {outf stdout} } {
global ohandles
@@ -2314,8 +3007,16 @@ proc open_handles { } {
}
proc move_file_extent { dir dbfile tag op } {
- set files [get_extfiles $dir $dbfile $tag]
- foreach extfile $files {
+ set curfiles [get_extfiles $dir $dbfile ""]
+ set tagfiles [get_extfiles $dir $dbfile $tag]
+ #
+ # We want to copy or rename only those that have been saved,
+ # so delete all the current extent files so that we don't
+ # end up with extra ones we didn't restore from our saved ones.
+ foreach extfile $curfiles {
+ file delete -force $extfile
+ }
+ foreach extfile $tagfiles {
set i [string last "." $extfile]
incr i
set extnum [string range $extfile $i end]
@@ -2378,3 +3079,144 @@ proc get_pagesize { stat } {
}
return -1
}
+
+# Get a globbed list of source files and executables to use as large
+# data items in overflow page tests.
+proc get_file_list { {small 0} } {
+ global is_windows_test
+ global is_qnx_test
+ global src_root
+
+ if { $is_qnx_test } {
+ set small 1
+ }
+ if { $small && $is_windows_test } {
+ return [glob $src_root/*/*.c */env*.obj]
+ } elseif { $small } {
+ return [glob $src_root/*/*.c ./env*.o]
+ } elseif { $is_windows_test } {
+ return \
+ [glob $src_root/*/*.c */*.obj */libdb??.dll */libdb??d.dll]
+ } else {
+ return [glob $src_root/*/*.c ./*.o ./.libs/libdb-?.?.s?]
+ }
+}
+
+proc is_cdbenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -cdb] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_lockenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -lock] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_logenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -log] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_mpoolenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -mpool] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_repenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -rep] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_rpcenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -rpc] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_secenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -crypto] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc is_txnenv { env } {
+ set sys [$env attributes]
+ if { [lsearch $sys -txn] != -1 } {
+ return 1
+ } else {
+ return 0
+ }
+}
+
+proc get_home { env } {
+ set sys [$env attributes]
+ set h [lsearch $sys -home]
+ if { $h == -1 } {
+ return NULL
+ }
+ incr h
+ return [lindex $sys $h]
+}
+
+proc reduce_dups { nent ndp } {
+ upvar $nent nentries
+ upvar $ndp ndups
+
+ # If we are using a txnenv, assume it is using
+ # the default maximum number of locks, cut back
+ # so that we don't run out of locks. Reduce
+ # by 25% until we fit.
+ #
+ while { [expr $nentries * $ndups] > 5000 } {
+ set nentries [expr ($nentries / 4) * 3]
+ set ndups [expr ($ndups / 4) * 3]
+ }
+}
+
+proc getstats { statlist field } {
+ foreach pair $statlist {
+ set txt [lindex $pair 0]
+ if { [string equal $txt $field] == 1 } {
+ return [lindex $pair 1]
+ }
+ }
+ return -1
+}
+
+proc big_endian { } {
+ global tcl_platform
+ set e $tcl_platform(byteOrder)
+ if { [string compare $e littleEndian] == 0 } {
+ return 0
+ } elseif { [string compare $e bigEndian] == 0 } {
+ return 1
+ } else {
+ error "FAIL: Unknown endianness $e"
+ }
+}
diff --git a/db/test/txn001.tcl b/db/test/txn001.tcl
index ad2c6360a..26795ca39 100644
--- a/db/test/txn001.tcl
+++ b/db/test/txn001.tcl
@@ -1,21 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn001.tcl,v 11.35 2002/05/10 17:44:28 sue Exp
+# $Id: txn001.tcl,v 11.37 2003/01/08 05:54:13 bostic Exp $
#
# TEST txn001
# TEST Begin, commit, abort testing.
-proc txn001 { {tnum "01"} { max 1024 } { ntxns 50 } } {
+proc txn001 { {tnum "001"} { max 1024 } { ntxns 50 } } {
source ./include.tcl
global txn_curid
global txn_maxid
- puts -nonewline "Txn0$tnum: Basic begin, commit, abort"
+ puts -nonewline "Txn$tnum: Basic begin, commit, abort"
- if { $tnum != "01"} {
+ if { $tnum != "001"} {
puts " (with ID wrap)"
} else {
puts ""
@@ -42,7 +42,7 @@ proc txn001_suba { ntxns env tnum } {
# We will create a bunch of transactions and commit them.
set txn_list {}
set tid_list {}
- puts "\tTxn0$tnum.a: Beginning/Committing $ntxns Transactions in $env"
+ puts "\tTxn$tnum.a: Beginning/Committing $ntxns Transactions in $env"
for { set i 0 } { $i < $ntxns } { incr i } {
set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
@@ -65,7 +65,7 @@ proc txn001_subb { ntxns env tnum } {
# We will create a bunch of transactions and abort them.
set txn_list {}
set tid_list {}
- puts "\tTxn0$tnum.b: Beginning/Aborting Transactions"
+ puts "\tTxn$tnum.b: Beginning/Aborting Transactions"
for { set i 0 } { $i < $ntxns } { incr i } {
set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
@@ -88,7 +88,7 @@ proc txn001_subc { ntxns env tnum } {
# We will create a bunch of transactions and commit them.
set txn_list {}
set tid_list {}
- puts "\tTxn0$tnum.c: Beginning/Prepare/Committing Transactions"
+ puts "\tTxn$tnum.c: Beginning/Prepare/Committing Transactions"
for { set i 0 } { $i < $ntxns } { incr i } {
set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
diff --git a/db/test/txn002.tcl b/db/test/txn002.tcl
index 40f4ac426..f2530353c 100644
--- a/db/test/txn002.tcl
+++ b/db/test/txn002.tcl
@@ -1,21 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn002.tcl,v 11.38 2002/05/10 17:44:29 sue Exp
+# $Id: txn002.tcl,v 11.40 2003/01/08 05:54:13 bostic Exp $
#
# TEST txn002
# TEST Verify that read-only transactions do not write log records.
-proc txn002 { {tnum "02" } { max 1024 } { ntxns 50 } } {
+proc txn002 { {tnum "002" } { max 1024 } { ntxns 50 } } {
source ./include.tcl
global txn_curid
global txn_maxid
- puts -nonewline "Txn0$tnum: Read-only transaction test ($max) ($ntxns)"
+ puts -nonewline "Txn$tnum: Read-only transaction test ($max) ($ntxns)"
- if { $tnum != "02" } {
+ if { $tnum != "002" } {
puts " (with ID wrap)"
} else {
puts ""
@@ -34,7 +34,7 @@ proc txn002 { {tnum "02" } { max 1024 } { ntxns 50 } } {
# We will create a bunch of transactions and commit them.
set txn_list {}
set tid_list {}
- puts "\tTxn0$tnum.a: Beginning/Committing Transactions"
+ puts "\tTxn$tnum.a: Beginning/Committing Transactions"
for { set i 0 } { $i < $ntxns } { incr i } {
set txn [$env txn]
error_check_good txn_begin [is_valid_txn $txn $env] TRUE
diff --git a/db/test/txn003.tcl b/db/test/txn003.tcl
index bc71891f6..5c1e8a630 100644
--- a/db/test/txn003.tcl
+++ b/db/test/txn003.tcl
@@ -1,21 +1,21 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn003.tcl,v 11.39 2002/08/08 15:38:14 bostic Exp
+# $Id: txn003.tcl,v 11.42 2003/01/08 05:54:14 bostic Exp $
#
# TEST txn003
# TEST Test abort/commit/prepare of txns with outstanding child txns.
-proc txn003 { {tnum "03"} } {
+proc txn003 { {tnum "003"} } {
source ./include.tcl
global txn_curid
global txn_maxid
- puts -nonewline "Txn0$tnum: Outstanding child transaction test"
+ puts -nonewline "Txn$tnum: Outstanding child transaction test"
- if { $tnum != "03" } {
+ if { $tnum != "003" } {
puts " (with ID wrap)"
} else {
puts ""
@@ -49,7 +49,7 @@ proc txn003 { {tnum "03"} } {
txn003_check $db $key "Origdata" $origdata
- puts "\tTxn0$tnum.a: Parent abort"
+ puts "\tTxn$tnum.a: Parent abort"
set parent [$env txn]
error_check_good txn_begin [is_valid_txn $parent $env] TRUE
set child [$env txn -parent $parent]
@@ -62,7 +62,7 @@ proc txn003 { {tnum "03"} } {
error_check_good child_handle $stat 1
error_check_good child_h2 [is_substr $ret "invalid command name"] 1
- puts "\tTxn0$tnum.b: Parent commit"
+ puts "\tTxn$tnum.b: Parent commit"
set parent [$env txn]
error_check_good txn_begin [is_valid_txn $parent $env] TRUE
set child [$env txn -parent $parent]
@@ -81,7 +81,7 @@ proc txn003 { {tnum "03"} } {
# Since the data check assumes what has come before, the 'commit'
# operation must be last.
#
- set hdr "\tTxn0$tnum"
+ set hdr "\tTxn$tnum"
set rlist {
{begin ".c"}
{prepare ".d"}
@@ -131,7 +131,7 @@ proc txn003 { {tnum "03"} } {
puts "Skipping remainder of test for Windows"
return
}
- puts "\tTxn0$tnum.g: Attempt child prepare"
+ puts "\tTxn$tnum.g: Attempt child prepare"
set env [eval $env_cmd]
error_check_good dbenv [is_valid_env $env] TRUE
berkdb debug_check
@@ -148,7 +148,7 @@ proc txn003 { {tnum "03"} } {
error_check_good child_prepare $stat 1
error_check_good child_prep_err [is_substr $ret "txn prepare"] 1
- puts "\tTxn0$tnum.h: Attempt child discard"
+ puts "\tTxn$tnum.h: Attempt child discard"
set stat [catch {$child discard} ret]
error_check_good child_discard $stat 1
@@ -175,13 +175,13 @@ proc txn003_body { env_cmd testfile dir key newdata2 msg op } {
sentinel_init
set gidf $dir/gidfile
fileremove -f $gidf
- set proclist {}
+ set pidlist {}
puts "$msg.0: Executing child script to prepare txns"
berkdb debug_check
set p [exec $tclsh_path $test_path/wrap.tcl txnscript.tcl \
$testdir/txnout $env_cmd $testfile $gidf $key $newdata2 &]
- lappend proclist $p
- watch_procs 5
+ lappend pidlist $p
+ watch_procs $pidlist 5
set f1 [open $testdir/txnout r]
set r [read $f1]
puts $r
diff --git a/db/test/txn004.tcl b/db/test/txn004.tcl
index 5e02bc94c..edff9a63a 100644
--- a/db/test/txn004.tcl
+++ b/db/test/txn004.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn004.tcl,v 11.39 2002/05/15 17:14:06 sandstro Exp
+# $Id: txn004.tcl,v 11.41 2003/01/08 05:54:14 bostic Exp $
#
# TEST txn004
@@ -17,11 +17,11 @@ proc txn004 { } {
set orig_maxid $txn_maxid
puts "\tTxn004.1: wraparound txnids"
set txn_curid [expr $txn_maxid - 2]
- txn001 "04.1"
+ txn001 "004.1"
puts "\tTxn004.2: closer wraparound txnids"
set txn_curid [expr $txn_maxid - 3]
set txn_maxid [expr $txn_maxid - 2]
- txn001 "04.2"
+ txn001 "004.2"
puts "\tTxn004.3: test wraparound txnids"
txn_idwrap_check $testdir
diff --git a/db/test/txn005.tcl b/db/test/txn005.tcl
index 9ea3df49f..376235eef 100644
--- a/db/test/txn005.tcl
+++ b/db/test/txn005.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn005.tcl,v 11.35 2002/08/08 15:38:14 bostic Exp
+# $Id: txn005.tcl,v 11.36 2003/01/08 05:54:14 bostic Exp $
#
# TEST txn005
diff --git a/db/test/txn006.tcl b/db/test/txn006.tcl
index bb9e81dff..69229bea2 100644
--- a/db/test/txn006.tcl
+++ b/db/test/txn006.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn006.tcl,v 1.5 2002/08/01 19:59:19 sue Exp
+# $Id: txn006.tcl,v 1.6 2003/01/08 05:54:14 bostic Exp $
#
#
#TEST txn006
diff --git a/db/test/txn007.tcl b/db/test/txn007.tcl
index 151c38e78..cf1eae33f 100644
--- a/db/test/txn007.tcl
+++ b/db/test/txn007.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn007.tcl,v 11.3 2002/08/08 15:38:14 bostic Exp
+# $Id: txn007.tcl,v 11.4 2003/01/08 05:54:15 bostic Exp $
#
#TEST txn007
#TEST Test of DB_TXN_WRITE_NOSYNC
diff --git a/db/test/txn008.tcl b/db/test/txn008.tcl
index e9d0a06c9..eb30ff947 100644
--- a/db/test/txn008.tcl
+++ b/db/test/txn008.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn008.tcl,v 11.3 2002/05/10 17:55:54 sue Exp
+# $Id: txn008.tcl,v 11.5 2003/01/08 05:54:15 bostic Exp $
#
# TEST txn008
@@ -17,11 +17,11 @@ proc txn008 { } {
set orig_maxid $txn_maxid
puts "\tTxn008.1: wraparound txnids"
set txn_curid [expr $txn_maxid - 2]
- txn002 "08.1"
+ txn002 "008.1"
puts "\tTxn008.2: closer wraparound txnids"
set txn_curid [expr $txn_maxid - 3]
set txn_maxid [expr $txn_maxid - 2]
- txn002 "08.2"
+ txn002 "008.2"
puts "\tTxn008.3: test wraparound txnids"
txn_idwrap_check $testdir
diff --git a/db/test/txn009.tcl b/db/test/txn009.tcl
index 1b371da54..2bb0d0124 100644
--- a/db/test/txn009.tcl
+++ b/db/test/txn009.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txn009.tcl,v 11.3 2002/05/10 17:55:55 sue Exp
+# $Id: txn009.tcl,v 11.5 2003/01/08 05:54:15 bostic Exp $
#
# TEST txn009
@@ -17,11 +17,11 @@ proc txn009 { } {
set orig_maxid $txn_maxid
puts "\tTxn009.1: wraparound txnids"
set txn_curid [expr $txn_maxid - 2]
- txn003 "09.1"
+ txn003 "009.1"
puts "\tTxn009.2: closer wraparound txnids"
set txn_curid [expr $txn_maxid - 3]
set txn_maxid [expr $txn_maxid - 2]
- txn003 "09.2"
+ txn003 "009.2"
puts "\tTxn009.3: test wraparound txnids"
txn_idwrap_check $testdir
diff --git a/db/test/txn010.tcl b/db/test/txn010.tcl
new file mode 100644
index 000000000..b9d47d60c
--- /dev/null
+++ b/db/test/txn010.tcl
@@ -0,0 +1,144 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 1996-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: txn010.tcl,v 1.4 2003/01/08 05:54:15 bostic Exp $
+#
+# TEST txn010
+# TEST Test DB_ENV->txn_checkpoint arguments/flags
+proc txn010 { } {
+ source ./include.tcl
+
+ puts "Txn010: test DB_ENV->txn_checkpoint arguments/flags."
+ env_cleanup $testdir
+
+ # Open an environment and database.
+ puts "\tTxn010.a: open the environment and a database, checkpoint."
+ set env [berkdb_env -create -home $testdir -txn]
+ error_check_good envopen [is_valid_env $env] TRUE
+ set db [berkdb_open \
+ -env $env -create -mode 0644 -btree -auto_commit a.db]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ # Insert some data and do a checkpoint.
+ for { set count 0 } { $count < 100 } { incr count } {
+ set t [$env txn]
+ error_check_good "init: put" \
+ [$db put -txn $t "key_a_$count" "data"] 0
+ error_check_good "init: commit" [$t commit] 0
+ }
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+
+ # Test that checkpoint calls are ignored in quiescent systems.
+ puts "\tTxn010.b: test for checkpoints when system is quiescent"
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "quiescent: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Add a single record, and test that checkpoint does something.
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ set t [$env txn]
+ error_check_good \
+ "quiescent: put" [$db put -txn $t "key_b_$count" "data"] 0
+ error_check_good "quiescent: commit" [$t commit] 0
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "quiescent: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Test that -force causes a checkpoint.
+ puts "\tTxn010.c: test checkpoint -force"
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -force] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "force: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+ set chkpt $test_chkpt
+ }
+
+ # Test that -kbyte doesn't cause a checkpoint unless there's
+ # enough activity.
+ puts "\tTxn010.d: test checkpoint -kbyte"
+
+ # Put in lots of data, and verify that -kbyte causes a checkpoint
+ for { set count 0 } { $count < 1000 } { incr count } {
+ set t [$env txn]
+ error_check_good "kbyte: put" \
+ [$db put -txn $t "key_c_$count" "data"] 0
+ error_check_good "kbyte: commit" [$t commit] 0
+ }
+
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -kbyte 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "kbytes: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Put in a little data and verify that -kbyte doesn't cause a
+ # checkpoint
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 20 } { incr count } {
+ set t [$env txn]
+ error_check_good "kbyte: put" \
+ [$db put -txn $t "key_d_$count" "data"] 0
+ error_check_good "kbyte: commit" [$t commit] 0
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -kbyte 20] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "kbytes: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Test that -min doesn't cause a checkpoint unless enough time has
+ # passed.
+ puts "\tTxn010.e: test checkpoint -min"
+ set t [$env txn]
+ error_check_good "min: put" [$db put -txn $t "key_e_$count" "data"] 0
+ error_check_good "min: commit" [$t commit] 0
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ for { set count 0 } { $count < 5 } {incr count } {
+ tclsleep 1
+ error_check_good checkpoint [$env txn_checkpoint -min 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "min: checkpoint time changed" \
+ [expr $test_chkpt == $chkpt] 1
+ }
+
+ # Wait long enough, and then check to see if -min causes a checkpoint.
+ set chkpt [txn010_stat $env "Time of last checkpoint"]
+ tclsleep 120
+ error_check_good checkpoint [$env txn_checkpoint -min 2] 0
+ set test_chkpt [txn010_stat $env "Time of last checkpoint"]
+ error_check_good "min: checkpoint time unchanged" \
+ [expr $test_chkpt > $chkpt] 1
+
+ # Close down the database and the environment.
+ error_check_good db_close [$db close] 0
+ error_check_good env_close [$env close] 0
+}
+
+# txn010_stat --
+# Return the current log statistics.
+proc txn010_stat { env s } {
+ set stat [$env txn_stat]
+ foreach statpair $stat {
+ set statmsg [lindex $statpair 0]
+ set statval [lindex $statpair 1]
+ if {[is_substr $statmsg $s] != 0} {
+ return $statval
+ }
+ }
+ puts "FAIL: Txn010: stat string $s not found"
+ return 0
+}
diff --git a/db/test/txn011.tcl b/db/test/txn011.tcl
new file mode 100644
index 000000000..2dfbf84e2
--- /dev/null
+++ b/db/test/txn011.tcl
@@ -0,0 +1,209 @@
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: txn011.tcl,v 1.9 2003/09/04 23:41:19 bostic Exp $
+#
+# TEST txn011
+# TEST Test durable and non-durable txns.
+# TEST Test a mixed env (with both durable and non-durable
+# TEST dbs), then a purely non-durable env. Make sure commit
+# TEST and abort work, and that only the log records we
+# TEST expect are written.
+# TEST Test that we can't get a durable handle on a ND
+# TEST database, or vice versa. Test that all subdb's
+# TEST must be of the same type (D or ND).
+proc txn011 { {ntxns 100} } {
+ source ./include.tcl
+ global util_path
+
+ puts "Txn011: Non-durable txns"
+ env_cleanup $testdir
+
+ puts "\tTxn011.a: Persistent env recovery with -notdurable."
+ set ndenv [berkdb_env -create -home $testdir -txn -notdurable]
+ set db [berkdb_open -create -btree -env $ndenv test.db]
+ error_check_good db_close [$db close] 0
+ error_check_good ndenv_close [$ndenv close] 0
+
+ # Run recovery with -e to retain environment.
+ set stat [catch {exec $util_path/db_recover -e -h $testdir} ret]
+ error_check_good db_printlog $stat 0
+
+ # Rejoin env and make sure that db is still -notdurable.
+ set ndenv [berkdb_env -home $testdir]
+ set db [berkdb_open -env $ndenv -notdurable test.db]
+ error_check_good db_close [$db close] 0
+ error_check_good ndenv_close [$ndenv close] 0
+ env_cleanup $testdir
+
+ # Start with a new env for the next test.
+ set ndenv [berkdb_env -create -home $testdir -txn -notdurable]
+ error_check_good env_open [is_valid_env $ndenv] TRUE
+
+ # Open/create the database; it acquires non-durability
+ # from the env.
+ set testfile envnotdurable.db
+ set db [eval berkdb_open \
+ -create -auto_commit -env $ndenv -btree $testfile]
+ error_check_good dbopen [is_valid_db $db] TRUE
+
+ puts "\tTxn011.b: Abort txns in non-durable env."
+ txn011_runtxns $ntxns $db $ndenv abort
+ # Make sure there is nothing in the db.
+ txn011_check_empty $db $ndenv
+
+ puts "\tTxn011.c: Commit txns in non-durable env."
+ txn011_runtxns $ntxns $db $ndenv commit
+
+ # Make sure we haven't written any inappropriate log records
+ check_log_records $testdir
+
+ # Clean up non-durable env tests.
+ error_check_good db_close [$db close] 0
+ error_check_good ndenv_close [$ndenv close] 0
+
+ puts "\tTxn011.d: Set up mixed durable/non-durable test."
+ # Open/create the mixed environment
+ set env [berkdb_env_noerr -create -home $testdir -txn]
+ error_check_good env_open [is_valid_env $env] TRUE
+ check_log_records $testdir
+
+ # Open/create the non-durable database
+ set nondurfile nondurable.db
+ set ndb [berkdb_open_noerr \
+ -create -auto_commit -env $env -btree -notdurable $nondurfile]
+ error_check_good dbopen [is_valid_db $ndb] TRUE
+ check_log_records $testdir
+
+ puts "\tTxn011.e: Abort txns in non-durable db."
+ txn011_runtxns $ntxns $ndb $env abort
+ # Make sure there is nothing in the db.
+ txn011_check_empty $ndb $env
+ check_log_records $testdir
+
+ puts "\tTxn011.f: Commit txns in non-durable db."
+ txn011_runtxns $ntxns $ndb $env commit
+ check_log_records $testdir
+
+ # Open/create the durable database
+ set durfile durable.db
+ set ddb [eval berkdb_open_noerr \
+ -create -auto_commit -env $env -btree $durfile]
+ error_check_good dbopen [is_valid_db $ddb] TRUE
+
+ # Try to get a not-durable handle on the durable db.
+ puts "\tTxn011.g: Try to get a not-durable handle on\
+ a durable db."
+ set errormsg "Cannot open DURABLE and NOT DURABLE handles"
+ catch {berkdb_open_noerr \
+ -auto_commit -env $env -notdurable $durfile} res
+ error_check_good handle_error1 [is_substr $res $errormsg] 1
+ error_check_good ddb_close [$ddb close] 0
+ catch {berkdb_open_noerr \
+ -auto_commit -env $env -notdurable $durfile} res
+ error_check_good handle_error2 [is_substr $res $errormsg] 1
+
+ # Now reopen as durable for the remainder of the test.
+ set ddb [berkdb_open_noerr \
+ -auto_commit -env $env -btree $durfile]
+ error_check_good dbopen [is_valid_db $ddb] TRUE
+
+ puts "\tTxn011.h: Abort txns in durable db."
+ # Add items to db in several txns but abort every one.
+ txn011_runtxns $ntxns $ddb $env abort
+ # Make sure there is nothing in the db.
+ txn011_check_empty $ddb $env
+
+ puts "\tTxn011.i: Commit txns in durable db."
+ txn011_runtxns $ntxns $ddb $env commit
+
+ puts "\tTxn011.j: Subdbs must all be durable or all not durable."
+ # Ask for -notdurable on durable db/subdb
+ set sdb1 [eval berkdb_open_noerr -create -auto_commit \
+ -env $env -btree testfile1.db subdb1]
+ catch {set sdb2 [eval berkdb_open_noerr -create -auto_commit \
+ -env $env -btree -notdurable testfile1.db subdb2]} res
+ error_check_good same_type_subdb1 [is_substr $res $errormsg] 1
+ error_check_good sdb1_close [$sdb1 close] 0
+
+ # Ask for durable on notdurable db/subdb
+ set sdb3 [eval berkdb_open_noerr -create -auto_commit \
+ -env $env -btree -notdurable testfile2.db subdb3]
+ catch {set sdb4 [eval berkdb_open_noerr -create -auto_commit \
+ -env $env -btree testfile2.db subdb4]} res
+ error_check_good same_type_subdb2 [is_substr $res $errormsg] 1
+ error_check_good sdb3_close [$sdb3 close] 0
+
+ puts "\tTxn011.k: Try to get a durable handle on a\
+ not-durable db."
+ # Try to get a durable handle on a not-durable database,
+ # while open or on a new open. Both should fail.
+ catch {berkdb_open_noerr -auto_commit -env $env $nondurfile} res
+ error_check_good handle_error [is_substr $res $errormsg] 1
+ error_check_good ndb_close [$ndb close] 0
+ catch {berkdb_open_noerr -auto_commit -env $env $nondurfile} res
+ error_check_good handle_error [is_substr $res $errormsg] 1
+
+ # Clean up mixed env.
+ error_check_good ddb_close [$ddb close] 0
+ error_check_good env_close [$env close] 0
+}
+
+proc txn011_runtxns { ntxns db env end } {
+ source ./include.tcl
+
+ set did [open $dict]
+ set i 0
+ while { [gets $did str] != -1 && $i < $ntxns } {
+ set txn [$env txn]
+ error_check_good txn_begin [is_valid_txn $txn $env] TRUE
+
+ error_check_good db_put_txn [$db put -txn $txn $i $str] 0
+ error_check_good txn_$end [$txn $end] 0
+ incr i
+ }
+ close $did
+}
+
+# Verify that a database is empty
+proc txn011_check_empty { db env } {
+ # Start a transaction
+ set t [$env txn]
+ error_check_good txn [is_valid_txn $t $env] TRUE
+ set txn "-txn $t"
+
+ # If a cursor get -first returns nothing, the db is empty.
+ set dbc [eval {$db cursor} $txn]
+ error_check_good db_cursor [is_substr $dbc $db] 1
+ set ret [$dbc get -first]
+ error_check_good get_on_empty [string length $ret] 0
+ error_check_good dbc_close [$dbc close] 0
+
+ # End transaction
+ error_check_good txn [$t commit] 0
+}
+
+# Some log records are still produced when we run create in a
+# non-durable db in a regular env. Just make sure we don't see
+# any unexpected types.
+proc check_log_records { dir } {
+ global util_path
+
+ set tmpfile $dir/printlog.out
+ set stat [catch {exec $util_path/db_printlog -h $dir > $tmpfile} ret]
+ error_check_good db_printlog $stat 0
+
+ set f [open $tmpfile r]
+ while { [gets $f record] >= 0 } {
+ set r [regexp {\[[^\]]*\]\[[^\]]*\]([^\:]*)\:} $record whl name]
+ if { $r == 1 && [string match *_debug $name] != 1 && \
+ [string match __txn_regop $name] != 1 && \
+ [string match __txn_child $name] != 1 } {
+ puts "FAIL: unexpected log record $name found"
+ }
+ }
+ close $f
+ fileremove $tmpfile
+}
diff --git a/db/test/txnscript.tcl b/db/test/txnscript.tcl
index 66be1e9a1..108498407 100644
--- a/db/test/txnscript.tcl
+++ b/db/test/txnscript.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1996-2002
+# Copyright (c) 1996-2003
# Sleepycat Software. All rights reserved.
#
-# Id: txnscript.tcl,v 11.3 2002/01/23 15:33:40 bostic Exp
+# $Id: txnscript.tcl,v 11.4 2003/01/08 05:54:16 bostic Exp $
#
# Txn003 script - outstanding child prepare script
# Usage: txnscript envcmd dbcmd gidf key data
diff --git a/db/test/update.tcl b/db/test/update.tcl
index 81fc9ba9e..c5d9c5ba3 100644
--- a/db/test/update.tcl
+++ b/db/test/update.tcl
@@ -1,9 +1,10 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: update.tcl,v 11.9 2000/10/27 13:23:56 sue Exp $
+# $Id: update.tcl,v 11.12 2003/01/08 05:54:16 bostic Exp $
+
source ./include.tcl
global update_dir
set update_dir "$test_path/update_test"
diff --git a/db/test/upgrade.tcl b/db/test/upgrade.tcl
index 0d2f656bc..7e262a33d 100644
--- a/db/test/upgrade.tcl
+++ b/db/test/upgrade.tcl
@@ -1,9 +1,9 @@
# See the file LICENSE for redistribution information.
#
-# Copyright (c) 1999, 2000
+# Copyright (c) 1999-2003
# Sleepycat Software. All rights reserved.
#
-# $Id: upgrade.tcl,v 11.16 2000/10/27 13:23:56 sue Exp $
+# $Id: upgrade.tcl,v 11.32 2003/10/02 15:09:36 sandstro Exp $
source ./include.tcl
@@ -13,89 +13,181 @@ set upgrade_dir "$test_path/upgrade/databases"
global gen_upgrade
set gen_upgrade 0
+global gen_chksum
+set gen_chksum 0
+global gen_upgrade_log
+set gen_upgrade_log 0
global upgrade_dir
global upgrade_be
global upgrade_method
+global upgrade_name
proc upgrade { { archived_test_loc "DEFAULT" } } {
source ./include.tcl
global upgrade_dir
+ global tcl_platform
+ global saved_logvers
set saved_upgrade_dir $upgrade_dir
- puts -nonewline "Upgrade test: "
+ # Identify endianness of the machine running upgrade.
+ if { [big_endian] == 1 } {
+ set myendianness be
+ } else {
+ set myendianness le
+ }
+ set e $tcl_platform(byteOrder)
+
+ if { [file exists $archived_test_loc/logversion] == 1 } {
+ set fd [open $archived_test_loc/logversion r]
+ set saved_logvers [read $fd]
+ close $fd
+ } else {
+ puts "Old log version number must be available \
+ in $archived_test_loc/logversion"
+ return
+ }
+
+ fileremove -f UPGRADE.OUT
+ set o [open UPGRADE.OUT a]
+
+ puts -nonewline $o "Upgrade test started at: "
+ puts $o [clock format [clock seconds] -format "%H:%M %D"]
+ puts $o [berkdb version -string]
+ puts $o "Testing $e files"
+
+ puts -nonewline "Upgrade test started at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
+ puts [berkdb version -string]
+ puts "Testing $e files"
+
if { $archived_test_loc == "DEFAULT" } {
- puts "using default archived databases in $upgrade_dir."
+ puts $o "Using default archived databases in $upgrade_dir."
+ puts "Using default archived databases in $upgrade_dir."
} else {
set upgrade_dir $archived_test_loc
- puts "using archived databases in $upgrade_dir."
+ puts $o "Using archived databases in $upgrade_dir."
+ puts "Using archived databases in $upgrade_dir."
}
+ close $o
foreach version [glob $upgrade_dir/*] {
if { [string first CVS $version] != -1 } { continue }
regexp \[^\/\]*$ $version version
- foreach method [glob $upgrade_dir/$version/*] {
- regexp \[^\/\]*$ $method method
- foreach file [glob $upgrade_dir/$version/$method/*] {
- regexp (\[^\/\]*)\.tar\.gz$ $file dummy name
-
- cleanup $testdir NULL
- #puts "$upgrade_dir/$version/$method/$name.tar.gz"
- set curdir [pwd]
- cd $testdir
- set tarfd [open "|tar xf -" w]
- cd $curdir
-
- catch {exec gunzip -c "$upgrade_dir/$version/$method/$name.tar.gz" >@$tarfd}
- close $tarfd
-
- set f [open $testdir/$name.tcldump {RDWR CREAT}]
- close $f
-
- # It may seem suboptimal to exec a separate
- # tclsh for each subtest, but this is
- # necessary to keep the testing process
- # from consuming a tremendous amount of
- # memory.
- if { [file exists $testdir/$name-le.db] } {
- set ret [catch {exec $tclsh_path\
- << "source $test_path/test.tcl;\
- _upgrade_test $testdir $version\
- $method\
- $name le"} message]
- puts $message
- if { $ret != 0 } {
- #exit
- }
- }
- if { [file exists $testdir/$name-be.db] } {
- set ret [catch {exec $tclsh_path\
- << "source $test_path/test.tcl;\
- _upgrade_test $testdir $version\
- $method\
- $name be"} message]
- puts $message
- if { $ret != 0 } {
- #exit
+ # Test only files where the endianness of the db matches
+ # the endianness of the test platform. These are the
+ # meaningful tests:
+ # 1. File generated on le, tested on le
+ # 2. File generated on be, tested on be
+ # 3. Byte-swapped file generated on le, tested on be
+ # 4. Byte-swapped file generated on be, tested on le
+ #
+ set dbendianness [string range $version end-1 end]
+ if { [string compare $myendianness $dbendianness] != 0 } {
+ puts "Skipping test of $version \
+ on $myendianness platform."
+ } else {
+ set release [string trim $version -lbe]
+ set o [open UPGRADE.OUT a]
+ puts $o "Files created on release $release"
+ close $o
+ puts "Files created on release $release"
+
+ foreach method [glob $upgrade_dir/$version/*] {
+ regexp \[^\/\]*$ $method method
+ set o [open UPGRADE.OUT a]
+ puts $o "\nTesting $method files"
+ close $o
+ puts "\tTesting $method files"
+
+ foreach file [lsort -dictionary \
+ [glob -nocomplain \
+ $upgrade_dir/$version/$method/*]] {
+ regexp (\[^\/\]*)\.tar\.gz$ \
+ $file dummy name
+
+ cleanup $testdir NULL 1
+ set curdir [pwd]
+ cd $testdir
+ set tarfd [open "|tar xf -" w]
+ cd $curdir
+
+ catch {exec gunzip -c \
+ "$upgrade_dir/$version/$method/$name.tar.gz" \
+ >@$tarfd}
+ close $tarfd
+
+ set f [open $testdir/$name.tcldump \
+ {RDWR CREAT}]
+ close $f
+
+ # We exec a separate tclsh for each
+ # separate subtest to keep the
+ # testing process from consuming a
+ # tremendous amount of memory.
+ #
+ # First we test the .db files.
+ if { [file exists \
+ $testdir/$name-$myendianness.db] } {
+ if { [catch {exec $tclsh_path \
+ << "source \
+ $test_path/test.tcl;\
+ _upgrade_test $testdir \
+ $version $method $name \
+ $myendianness" >>& \
+ UPGRADE.OUT } message] } {
+ set o [open \
+ UPGRADE.OUT a]
+ puts $o "FAIL: $message"
+ close $o
+ }
+ if { [catch {exec $tclsh_path\
+ << "source \
+ $test_path/test.tcl;\
+ _db_load_test $testdir \
+ $version $method $name" >>&\
+ UPGRADE.OUT } message] } {
+ set o [open \
+ UPGRADE.OUT a]
+ puts $o "FAIL: $message"
+ close $o
+ }
+ }
+ # Then we test log files.
+ if { [file exists \
+ $testdir/$name.prlog] } {
+ if { [catch {exec $tclsh_path \
+ << "source \
+ $test_path/test.tcl;\
+ global saved_logvers;\
+ set saved_logvers \
+ $saved_logvers;\
+ _log_test $testdir \
+ $release $method \
+ $name" >>& \
+ UPGRADE.OUT } message] } {
+ set o [open \
+ UPGRADE.OUT a]
+ puts $o "FAIL: $message"
+ close $o
+ }
}
}
-
- set ret [catch {exec $tclsh_path\
- << "source $test_path/test.tcl;\
- _db_load_test $testdir $version $method\
- $name"} message]
- puts $message
- if { $ret != 0 } {
- #exit
- }
-
}
}
}
set upgrade_dir $saved_upgrade_dir
+ set o [open UPGRADE.OUT a]
+ puts -nonewline $o "Completed at: "
+ puts $o [clock format [clock seconds] -format "%H:%M %D"]
+ close $o
+
+ puts -nonewline "Completed at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
+
# Don't provide a return value.
return
}
@@ -103,12 +195,19 @@ proc upgrade { { archived_test_loc "DEFAULT" } } {
proc _upgrade_test { temp_dir version method file endianness } {
source include.tcl
global errorInfo
+ global encrypt
puts "Upgrade: $version $method $file $endianness"
+ # Check whether we're working with an encrypted file.
+ if { [string match c-* $file] } {
+ set encrypt 1
+ }
set ret [berkdb upgrade "$temp_dir/$file-$endianness.db"]
error_check_good dbupgrade $ret 0
+ error_check_good dbupgrade_verify [verify_dir $temp_dir "" 0 0 1] 0
+
upgrade_dump "$temp_dir/$file-$endianness.db" "$temp_dir/temp.dump"
error_check_good "Upgrade diff.$endianness: $version $method $file" \
@@ -119,7 +218,7 @@ proc _db_load_test { temp_dir version method file } {
source include.tcl
global errorInfo
- puts "db_load: $version $method $file"
+ puts "Db_load: $version $method $file"
set ret [catch \
{exec $util_path/db_load -f "$temp_dir/$file.dump" \
@@ -133,43 +232,388 @@ proc _db_load_test { temp_dir version method file } {
[filecmp "$temp_dir/$file.tcldump" "$temp_dir/temp.dump"] 0
}
-proc gen_upgrade { dir } {
+proc _log_test { temp_dir release method file } {
+ source ./include.tcl
+ global saved_logvers
+ global passwd
+ puts "Check log file: $temp_dir $release $method $file"
+
+ # Get log version number of current system
+ set env [berkdb_env -create -log -home $testdir]
+ error_check_good is_valid_env [is_valid_env $env] TRUE
+ set current_logvers [get_log_vers $env]
+ error_check_good env_close [$env close] 0
+ error_check_good env_remove [berkdb envremove -home $testdir] 0
+
+ # Rename recd001-x-log.000000000n to log.000000000n.
+ set logfiles [glob -nocomplain $temp_dir/*log.0*]
+ foreach logfile $logfiles {
+ set logname [string replace $logfile 0 \
+ [string last - $logfile]]
+ file rename -force $logfile $temp_dir/$logname
+ }
+
+ # Use db_printlog to dump the logs. If the current log file
+ # version is greater than the saved log file version, the log
+ # files are expected to be unreadable. If the log file is
+ # readable, check that the current printlog dump matches the
+ # archived printlog.
+ #
+ set ret [catch {exec $util_path/db_printlog -h $temp_dir \
+ > $temp_dir/logs.prlog} message]
+ if { [is_substr $message "magic number"] } {
+ # The failure is probably due to encryption, try
+ # crypto printlog.
+ set ret [catch {exec $util_path/db_printlog -h $temp_dir \
+ -P $passwd > $temp_dir/logs.prlog} message]
+ if { $ret == 1 } {
+ puts "db_printlog failed: $message"
+ }
+ }
+ if { $current_logvers > $saved_logvers } {
+ error_check_good unreadable_log_version \
+ [is_substr $message "unreadable log version"] 1
+ } else {
+ error_check_good db_printlog:$message $ret 0
+ # Compare logs.prlog and $file.prlog (should match)
+ error_check_good "Compare printlogs" [filecmp \
+ "$temp_dir/logs.prlog" "$temp_dir/$file.prlog"] 0
+ }
+}
+
+proc gen_upgrade { dir { save_crypto 1 } { save_non_crypto 1 } } {
global gen_upgrade
+ global gen_upgrade_log
+ global gen_chksum
global upgrade_dir
global upgrade_be
global upgrade_method
- global runtests
+ global upgrade_name
+ global test_names
+ global parms
+ global encrypt
+ global passwd
source ./include.tcl
- set gen_upgrade 1
set upgrade_dir $dir
+ env_cleanup $testdir
+
+ fileremove -f GENERATE.OUT
+ set o [open GENERATE.OUT a]
+
+ puts -nonewline $o "Generating upgrade files. Started at: "
+ puts $o [clock format [clock seconds] -format "%H:%M %D"]
+ puts $o [berkdb version -string]
+
+ puts -nonewline "Generating upgrade files. Started at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
+ puts [berkdb version -string]
+
+ close $o
- foreach upgrade_be { 0 1 } {
- foreach i "btree rbtree hash recno rrecno queue frecno" {
- puts "Running $i tests"
- set upgrade_method $i
- set start 1
- for { set j $start } { $j <= $runtests } {incr j} {
+ # Create a file that contains the log version number.
+ # If necessary, create the directory to contain the file.
+ set env [berkdb_env -create -log -home $testdir]
+ error_check_good is_valid_env [is_valid_env $env] TRUE
+
+ if { [file exists $dir] == 0 } {
+ file mkdir $dir
+ }
+ set lv [open $dir/logversion w]
+ puts $lv [get_log_vers $env]
+ close $lv
+
+ error_check_good env_close [$env close] 0
+
+ # Generate test databases for each access method and endianness.
+ set gen_upgrade 1
+ foreach method \
+ "btree rbtree hash recno rrecno frecno queue queueext" {
+ set o [open GENERATE.OUT a]
+ puts $o "\nGenerating $method files"
+ close $o
+ puts "\tGenerating $method files"
+ set upgrade_method $method
+#set test_names(test) ""
+ foreach test $test_names(test) {
+ if { [info exists parms($test)] != 1 } {
+ continue
+ }
+
+ set o [open GENERATE.OUT a]
+ puts $o "\t\tGenerating files for $test"
+ close $o
+ puts "\t\tGenerating files for $test"
+
+ if { $save_non_crypto == 1 } {
+ set encrypt 0
+ foreach upgrade_be { 0 1 } {
+ set upgrade_name $test
+ if [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl;\
+ global gen_upgrade upgrade_be;\
+ global upgrade_method upgrade_name;\
+ global encrypt;\
+ set encrypt $encrypt;\
+ set gen_upgrade 1;\
+ set upgrade_be $upgrade_be;\
+ set upgrade_method $upgrade_method;\
+ set upgrade_name $upgrade_name;\
+ run_method -$method $test" \
+ >>& GENERATE.OUT} res] {
+ puts "FAIL: run_method \
+ $test $method"
+ }
+ cleanup $testdir NULL 1
+ }
+ # Save checksummed files for only one test.
+ # Checksumming should work in all or no cases.
+ set gen_chksum 1
+ foreach upgrade_be { 0 1 } {
+ set upgrade_name $test
+ if { $test == "test001" } {
+ if { [catch {exec $tclsh_path \
+ << "source $test_path/test.tcl;\
+ global gen_upgrade;\
+ global upgrade_be;\
+ global upgrade_method;\
+ global upgrade_name;\
+ global encrypt gen_chksum;\
+ set encrypt $encrypt;\
+ set gen_upgrade 1;\
+ set gen_chksum 1;\
+ set upgrade_be $upgrade_be;\
+ set upgrade_method \
+ $upgrade_method;\
+ set upgrade_name \
+ $upgrade_name;\
+ run_method -$method $test \
+ 0 1 stdout -chksum" \
+ >>& GENERATE.OUT} res] } {
+ puts "FAIL: run_method \
+ $test $method \
+ -chksum: $res"
+ }
+ cleanup $testdir NULL 1
+ }
+ }
+ set gen_chksum 0
+ }
+ # Save encrypted db's only of native endianness.
+ # Encrypted files are not portable across endianness.
+ if { $save_crypto == 1 } {
+ set upgrade_be [big_endian]
+ set encrypt 1
+ set upgrade_name $test
if [catch {exec $tclsh_path \
<< "source $test_path/test.tcl;\
- global upgrade_be;\
+ global gen_upgrade upgrade_be;\
+ global upgrade_method upgrade_name;\
+ global encrypt passwd;\
+ set encrypt $encrypt;\
+ set passwd $passwd;\
+ set gen_upgrade 1;\
set upgrade_be $upgrade_be;\
- run_method -$i $j $j"} res] {
- puts "FAIL: [format "test%03d" $j] $i"
+ set upgrade_method $upgrade_method;\
+ set upgrade_name $upgrade_name;\
+ run_secmethod $method $test" \
+ >>& GENERATE.OUT} res] {
+ puts "FAIL: run_secmethod \
+ $test $method"
}
- puts $res
- cleanup $testdir NULL
+ cleanup $testdir NULL 1
}
}
}
-
set gen_upgrade 0
+ # Set upgrade_be to the native value so log files go to the
+ # right place.
+ set upgrade_be [big_endian]
+
+ # Generate log files.
+ set o [open GENERATE.OUT a]
+ puts $o "\tGenerating log files"
+ close $o
+ puts "\tGenerating log files"
+
+ set gen_upgrade_log 1
+ # Pass the global variables and their values to the new tclsh.
+ if { $save_non_crypto == 1 } {
+ set encrypt 0
+ if [catch {exec $tclsh_path << "source $test_path/test.tcl;\
+ global gen_upgrade_log upgrade_be upgrade_dir;\
+ global encrypt;\
+ set encrypt $encrypt;\
+ set gen_upgrade_log $gen_upgrade_log; \
+ set upgrade_be $upgrade_be;\
+ set upgrade_dir $upgrade_dir;\
+ run_recds" >>& GENERATE.OUT} res] {
+ puts "FAIL: run_recds: $res"
+ }
+ }
+ if { $save_crypto == 1 } {
+ set encrypt 1
+ if [catch {exec $tclsh_path << "source $test_path/test.tcl;\
+ global gen_upgrade_log upgrade_be upgrade_dir;\
+ global encrypt;\
+ set encrypt $encrypt;\
+ set gen_upgrade_log $gen_upgrade_log; \
+ set upgrade_be $upgrade_be;\
+ set upgrade_dir $upgrade_dir;\
+ run_recds " >>& GENERATE.OUT} res] {
+ puts "FAIL: run_recds with crypto: $res"
+ }
+ }
+ set gen_upgrade_log 0
+
+ set o [open GENERATE.OUT a]
+ puts -nonewline $o "Completed at: "
+ puts $o [clock format [clock seconds] -format "%H:%M %D"]
+ puts -nonewline "Completed at: "
+ puts [clock format [clock seconds] -format "%H:%M %D"]
+ close $o
+}
+
+proc save_upgrade_files { dir } {
+ global upgrade_dir
+ global upgrade_be
+ global upgrade_method
+ global upgrade_name
+ global gen_upgrade
+ global gen_upgrade_log
+ global encrypt
+ global gen_chksum
+ global passwd
+ source ./include.tcl
+
+ set vers [berkdb version]
+ set maj [lindex $vers 0]
+ set min [lindex $vers 1]
+
+ # Is this machine big or little endian? We want to mark
+ # the test directories appropriately, since testing
+ # little-endian databases generated by a big-endian machine,
+ # and/or vice versa, is interesting.
+ if { [big_endian] } {
+ set myendianness be
+ } else {
+ set myendianness le
+ }
+
+ if { $upgrade_be == 1 } {
+ set version_dir "$myendianness-$maj.${min}be"
+ set en be
+ } else {
+ set version_dir "$myendianness-$maj.${min}le"
+ set en le
+ }
+
+ set dest $upgrade_dir/$version_dir/$upgrade_method
+ exec mkdir -p $dest
+
+ if { $gen_upgrade == 1 } {
+ # Save db files from test001 - testxxx.
+ set dbfiles [glob -nocomplain $dir/*.db]
+ set dumpflag ""
+ # Encrypted files are identified by the prefix "c-".
+ if { $encrypt == 1 } {
+ set upgrade_name c-$upgrade_name
+ set dumpflag " -P $passwd "
+ }
+ # Checksummed files are identified by the prefix "s-".
+ if { $gen_chksum == 1 } {
+ set upgrade_name s-$upgrade_name
+ }
+ foreach dbfile $dbfiles {
+ set basename [string range $dbfile \
+ [expr [string length $dir] + 1] end-3]
+
+ set newbasename $upgrade_name-$basename
+
+ # db_dump file
+ if { [catch {eval exec $util_path/db_dump -k $dumpflag \
+ $dbfile > $dir/$newbasename.dump} res] } {
+ puts "FAIL: $res"
+ }
+
+ # tcl_dump file
+ upgrade_dump $dbfile $dir/$newbasename.tcldump
+
+ # Rename dbfile and any dbq files.
+ file rename $dbfile $dir/$newbasename-$en.db
+ foreach dbq \
+ [glob -nocomplain $dir/__dbq.$basename.db.*] {
+ set s [string length $dir/__dbq.]
+ set newname [string replace $dbq $s \
+ [expr [string length $basename] + $s - 1] \
+ $newbasename-$en]
+ file rename $dbq $newname
+ }
+ set cwd [pwd]
+ cd $dir
+ catch {eval exec tar -cvf $dest/$newbasename.tar \
+ [glob $newbasename* __dbq.$newbasename-$en.db.*]}
+ catch {exec gzip -9v $dest/$newbasename.tar} res
+ cd $cwd
+ }
+ }
+
+ if { $gen_upgrade_log == 1 } {
+ # Save log files from recd tests.
+ set logfiles [glob -nocomplain $dir/log.*]
+ if { [llength $logfiles] > 0 } {
+ # More than one log.0000000001 file may be produced
+ # per recd test, so we generate unique names:
+ # recd001-0-log.0000000001, recd001-1-log.0000000001,
+ # and so on.
+ # We may also have log.0000000001, log.0000000002,
+ # and so on, and they will all be dumped together
+ # by db_printlog.
+ set count 0
+ while { [file exists \
+ $dest/$upgrade_name-$count-log.tar.gz] \
+ == 1 } {
+ incr count
+ }
+ set newname $upgrade_name-$count-log
+
+ # Run db_printlog on all the log files
+ if {[catch {exec $util_path/db_printlog -h $dir > \
+ $dir/$newname.prlog} res] != 0} {
+ puts "Regular printlog failed, try encryption"
+ eval {exec $util_path/db_printlog} -h $dir \
+ -P $passwd > $dir/$newname.prlog
+ }
+
+ # Rename each log file so we can identify which
+ # recd test created it.
+ foreach logfile $logfiles {
+ set lognum [string range $logfile \
+ end-9 end]
+ file rename $logfile $dir/$newname.$lognum
+ }
+
+ set cwd [pwd]
+ cd $dir
+
+ catch {eval exec tar -cvf $dest/$newname.tar \
+ [glob $newname*]}
+ catch {exec gzip -9v $dest/$newname.tar}
+ cd $cwd
+ }
+ }
}
proc upgrade_dump { database file {stripnulls 0} } {
global errorInfo
+ global encrypt
+ global passwd
- set db [berkdb open $database]
+ set encargs ""
+ if { $encrypt == 1 } {
+ set encargs " -encryptany $passwd "
+ }
+ set db [eval {berkdb open} $encargs $database]
set dbc [$db cursor]
set f [open $file w+]
@@ -231,7 +675,8 @@ proc upgrade_dump { database file {stripnulls 0} } {
puts -nonewline $f $key
puts -nonewline $f [binary format i [llength $data_list]]
for { set j 0 } { $j < [llength $data_list] } { incr j } {
- puts -nonewline $f [binary format i [string length [concat [lindex $data_list $j]]]]
+ puts -nonewline $f [binary format i [string length \
+ [concat [lindex $data_list $j]]]]
puts -nonewline $f [concat [lindex $data_list $j]]
}
if { [llength $data_list] == 0 } {
@@ -241,6 +686,8 @@ proc upgrade_dump { database file {stripnulls 0} } {
}
close $f
+ error_check_good upgrade_dump_c_close [$dbc close] 0
+ error_check_good upgrade_dump_db_close [$db close] 0
}
proc _comp { a b } {
@@ -277,3 +724,17 @@ proc strip_null { str } {
return $ret
}
+
+proc get_log_vers { env } {
+ set stat [$env log_stat]
+ foreach pair $stat {
+ set msg [lindex $pair 0]
+ set val [lindex $pair 1]
+ if { $msg == "Log file Version" } {
+ return $val
+ }
+ }
+ puts "FAIL: Log file Version not found in log_stat"
+ return 0
+}
+
diff --git a/db/test/wrap.tcl b/db/test/wrap.tcl
index 4a5c825d8..8592aea13 100644
--- a/db/test/wrap.tcl
+++ b/db/test/wrap.tcl
@@ -1,12 +1,19 @@
-# Sentinel file wrapper for multi-process tests.
-# This is designed to avoid a set of nasty bugs, primarily on Windows,
-# where pid reuse causes watch_procs to sit around waiting for some
-# random process that's not DB's and is not exiting.
+# See the file LICENSE for redistribution information.
+#
+# Copyright (c) 2000-2003
+# Sleepycat Software. All rights reserved.
+#
+# $Id: wrap.tcl,v 11.7 2003/01/08 05:54:16 bostic Exp $
+#
+# Sentinel file wrapper for multi-process tests. This is designed to avoid a
+# set of nasty bugs, primarily on Windows, where pid reuse causes watch_procs
+# to sit around waiting for some random process that's not DB's and is not
+# exiting.
source ./include.tcl
+source $test_path/testutils.tcl
# Arguments:
-#
if { $argc < 3 } {
puts "FAIL: wrap.tcl: Usage: wrap.tcl script log scriptargs"
exit
@@ -33,13 +40,17 @@ set childsentinel $testdir/begin.$childpid
set f [open $childsentinel w]
close $f
+puts $t "source $test_path/test.tcl"
+puts $t "set script $script"
+
# Set up argv for the subprocess, since the args aren't passed in as true
# arguments thanks to the pipe structure.
puts $t "set argc [llength $args]"
puts $t "set argv [list $args]"
-# Command the test to run.
-puts $t "source $test_path/$script"
+puts $t {set ret [catch { source $test_path/$script } result]}
+puts $t {if { [string length $result] > 0 } { puts $result }}
+puts $t {error_check_good "$test_path/$script run: pid [pid]" $ret 0}
# Close the pipe. This will flush the above commands and actually run the
# test, and will also return an error a la exec if anything bad happens
@@ -55,4 +66,6 @@ close $f
set f [open $testdir/end.$parentpid w]
close $f
+error_check_good "Pipe close ($childpid: $script $argv: logfile $logfile)"\
+ $ret 0
exit $ret
diff --git a/db/txn/txn.c b/db/txn/txn.c
index 5a0b43fcd..937046fa8 100644
--- a/db/txn/txn.c
+++ b/db/txn/txn.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -39,7 +39,7 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: txn.c,v 11.179 2002/08/29 17:41:17 margo Exp ";
+static const char revid[] = "$Id: txn.c,v 11.219 2003/12/03 14:33:06 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -68,17 +68,18 @@ static const char revid[] = "Id: txn.c,v 11.179 2002/08/29 17:41:17 margo Exp ";
#include "dbinc/hash.h"
#include "dbinc/lock.h"
#include "dbinc/log.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
#define SET_LOG_FLAGS(dbenv, txnp, lflags) \
do { \
- lflags = DB_COMMIT | DB_PERMANENT; \
+ lflags = DB_LOG_COMMIT | DB_LOG_PERM; \
if (F_ISSET(txnp, TXN_SYNC)) \
lflags |= DB_FLUSH; \
else if (!F_ISSET(txnp, TXN_NOSYNC) && \
!F_ISSET(dbenv, DB_ENV_TXN_NOSYNC)) { \
if (F_ISSET(dbenv, DB_ENV_TXN_WRITE_NOSYNC)) \
- lflags |= DB_WRNOSYNC; \
+ lflags |= DB_LOG_WRNOSYNC; \
else \
lflags |= DB_FLUSH; \
} \
@@ -96,68 +97,67 @@ typedef enum {
TXN_OP_PREPARE
} txnop_t;
+static int __txn_abort_pp __P((DB_TXN *));
static int __txn_begin_int __P((DB_TXN *, int));
+static int __txn_commit_pp __P((DB_TXN *, u_int32_t));
+static int __txn_discard_pp __P((DB_TXN *, u_int32_t));
static int __txn_end __P((DB_TXN *, int));
static int __txn_isvalid __P((const DB_TXN *, TXN_DETAIL **, txnop_t));
-static int __txn_set_timeout __P(( DB_TXN *, db_timeout_t, u_int32_t));
static int __txn_undo __P((DB_TXN *));
+static int __txn_dispatch_undo __P((DB_ENV *,
+ DB_TXN *, DBT *, DB_LSN *, void *));
-#ifndef db_create
/*
- * txn_abort --
- * txn_begin --
- * txn_commit --
+ * __txn_begin_pp --
+ * DB_ENV->txn_begin pre/post processing.
*
- * When we switched to methods in 4.0, we guessed txn_{abort,begin,commit}
- * were the interfaces applications would likely use and not be willing to
- * change, due to the sheer volume of the calls. Provide wrappers -- we
- * could do txn_abort and txn_commit using macros, but not txn_begin, as
- * the name of the field is txn_begin, we didn't want to modify it.
- *
- * The issue with txn_begin hits us in another way. If configured with the
- * --with-uniquename option, we use #defines to re-define DB's interfaces
- * to unique names. We can't do that for these functions because txn_begin
- * is also a field name in the DB_ENV structure, and the #defines we use go
- * at the end of the db.h file -- we get control too late to #define a field
- * name. So, modify the script that generates the unique names #defines to
- * not generate them for these three functions, and don't include the three
- * functions in libraries built with that configuration option.
- *
- * EXTERN: int txn_abort __P((DB_TXN *));
- * EXTERN: int txn_begin __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
- * EXTERN: int txn_commit __P((DB_TXN *, u_int32_t));
+ * PUBLIC: int __txn_begin_pp __P((DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t));
*/
int
-txn_abort(txnp)
- DB_TXN *txnp;
-{
- return (txnp->abort(txnp));
-}
-
-int
-txn_begin(dbenv, parent, txnpp, flags)
+__txn_begin_pp(dbenv, parent, txnpp, flags)
DB_ENV *dbenv;
DB_TXN *parent, **txnpp;
u_int32_t flags;
{
- return (dbenv->txn_begin(dbenv, parent, txnpp, flags));
-}
+ int rep_check, ret;
-int
-txn_commit(txnp, flags)
- DB_TXN *txnp;
- u_int32_t flags;
-{
- return (txnp->commit(txnp, flags));
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "txn_begin", DB_INIT_TXN);
+
+ if ((ret = __db_fchk(dbenv,
+ "txn_begin", flags,
+ DB_DIRTY_READ | DB_TXN_NOWAIT |
+ DB_TXN_NOSYNC | DB_TXN_SYNC)) != 0)
+ return (ret);
+ if ((ret = __db_fcchk(dbenv,
+ "txn_begin", flags, DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0)
+ return (ret);
+
+ if (parent == NULL) {
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __op_rep_enter(dbenv);
+ } else
+ rep_check = 0;
+ ret = __txn_begin(dbenv, parent, txnpp, flags);
+ /*
+ * We only decrement the count if the operation fails.
+ * Otherwise the count will be decremented when the
+ * txn is resolved by txn_commit, txn_abort, etc.
+ */
+ if (ret != 0 && rep_check)
+ __op_rep_exit(dbenv);
+
+ return (ret);
}
-#endif /* !db_create */
/*
* __txn_begin --
- * This is a wrapper to the actual begin process. Normal transaction
- * begin allocates a DB_TXN structure for the caller, while XA transaction
- * begin does not. Other than that, both call into common __txn_begin_int
- * code.
+ * DB_ENV->txn_begin.
+ *
+ * This is a wrapper to the actual begin process. Normal transaction begin
+ * allocates a DB_TXN structure for the caller, while XA transaction begin
+ * does not. Other than that, both call into common __txn_begin_int code.
*
* Internally, we use TXN_DETAIL structures, but the DB_TXN structure
* provides access to the transaction ID and the offset in the transaction
@@ -176,18 +176,6 @@ __txn_begin(dbenv, parent, txnpp, flags)
int ret;
*txnpp = NULL;
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "txn_begin", DB_INIT_TXN);
-
- if ((ret = __db_fchk(dbenv,
- "txn_begin", flags,
- DB_DIRTY_READ | DB_TXN_NOWAIT |
- DB_TXN_NOSYNC | DB_TXN_SYNC)) != 0)
- return (ret);
- if ((ret = __db_fcchk(dbenv,
- "txn_begin", flags, DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0)
- return (ret);
-
if ((ret = __os_calloc(dbenv, 1, sizeof(DB_TXN), &txn)) != 0)
return (ret);
@@ -195,6 +183,7 @@ __txn_begin(dbenv, parent, txnpp, flags)
txn->parent = parent;
TAILQ_INIT(&txn->kids);
TAILQ_INIT(&txn->events);
+ STAILQ_INIT(&txn->logs);
txn->flags = TXN_MALLOC;
if (LF_ISSET(DB_DIRTY_READ))
F_SET(txn, TXN_DIRTY_READ);
@@ -256,11 +245,22 @@ __txn_xa_begin(dbenv, txn)
{
PANIC_CHECK(dbenv);
- memset(txn, 0, sizeof(DB_TXN));
-
+ /*
+ * We need to initialize the transaction structure, but we must
+ * be careful not to smash the links. We manually intialize the
+ * structure.
+ */
txn->mgrp = dbenv->tx_handle;
TAILQ_INIT(&txn->kids);
TAILQ_INIT(&txn->events);
+ STAILQ_INIT(&txn->logs);
+ txn->parent = NULL;
+ ZERO_LSN(txn->last_lsn);
+ txn->txnid = TXN_INVALID;
+ txn->tid = 0;
+ txn->cursors = 0;
+ memset(&txn->lock_timeout, 0, sizeof(db_timeout_t));
+ memset(&txn->expire, 0, sizeof(db_timeout_t));
return (__txn_begin_int(txn, 0));
}
@@ -289,8 +289,8 @@ __txn_compensate_begin(dbenv, txnpp)
txn->mgrp = dbenv->tx_handle;
TAILQ_INIT(&txn->kids);
TAILQ_INIT(&txn->events);
- txn->flags = TXN_MALLOC;
- F_SET(txn, TXN_COMPENSATE);
+ STAILQ_INIT(&txn->logs);
+ txn->flags = TXN_COMPENSATE | TXN_MALLOC;
*txnpp = txn;
return (__txn_begin_int(txn, 1));
@@ -330,6 +330,8 @@ __txn_begin_int(txn, internal)
*/
if (DBENV_LOGGING(dbenv))
__log_txn_lsn(dbenv, &begin_lsn, NULL, NULL);
+ else
+ ZERO_LSN(begin_lsn);
R_LOCK(dbenv, &mgr->reginfo);
if (!F_ISSET(txn, TXN_COMPENSATE) && F_ISSET(region, TXN_IN_RECOVERY)) {
@@ -392,15 +394,16 @@ __txn_begin_int(txn, internal)
region->stat.st_maxnactive = region->stat.st_nactive;
td->txnid = id;
- td->begin_lsn = begin_lsn;
ZERO_LSN(td->last_lsn);
- td->status = TXN_RUNNING;
+ td->begin_lsn = begin_lsn;
if (txn->parent != NULL)
td->parent = txn->parent->off;
else
td->parent = INVALID_ROFF;
-
+ td->status = TXN_RUNNING;
td->flags = 0;
+ td->xa_status = 0;
+
off = R_OFFSET(&mgr->reginfo, td);
R_UNLOCK(dbenv, &mgr->reginfo);
@@ -408,9 +411,9 @@ __txn_begin_int(txn, internal)
txn->txnid = id;
txn->off = (u_int32_t)off;
- txn->abort = __txn_abort;
- txn->commit = __txn_commit;
- txn->discard = __txn_discard;
+ txn->abort = __txn_abort_pp;
+ txn->commit = __txn_commit_pp;
+ txn->discard = __txn_discard_pp;
txn->id = __txn_id;
txn->prepare = __txn_prepare;
txn->set_timeout = __txn_set_timeout;
@@ -437,6 +440,26 @@ err: R_UNLOCK(dbenv, &mgr->reginfo);
}
/*
+ * __txn_commit_pp --
+ * Interface routine to TXN->commit.
+ */
+static int
+__txn_commit_pp(txnp, flags)
+ DB_TXN *txnp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int not_child, ret;
+
+ dbenv = txnp->mgrp->dbenv;
+ not_child = txnp->parent == NULL;
+ ret = __txn_commit(txnp, flags);
+ if (not_child && IS_ENV_REPLICATED(dbenv))
+ __op_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
* __txn_commit --
* Commit a transaction.
*
@@ -447,6 +470,7 @@ __txn_commit(txnp, flags)
DB_TXN *txnp;
u_int32_t flags;
{
+ DBT list_dbt;
DB_ENV *dbenv;
DB_LOCKREQ request;
DB_TXN *kid;
@@ -489,71 +513,97 @@ __txn_commit(txnp, flags)
* Abort should never fail; if it does, we bail out immediately.
*/
while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
- if ((ret = kid->commit(kid, flags)) != 0)
+ if ((ret = __txn_commit(kid, flags)) != 0)
while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
- if ((t_ret = kid->abort(kid)) != 0)
+ if ((t_ret = __txn_abort(kid)) != 0)
return (__db_panic(dbenv, t_ret));
/*
- * Process any aborted pages from our children.
- * We delay putting pages on the free list that are newly
- * allocated and then aborted so that we can undo other
- * allocations, if necessary, without worrying about
- * these pages which were not on the free list before.
- */
- if (txnp->txn_list != NULL) {
- t_ret = __db_do_the_limbo(dbenv, NULL, txnp, txnp->txn_list);
- __db_txnlist_end(dbenv, txnp->txn_list);
- txnp->txn_list = NULL;
- if (t_ret != 0 && ret == 0)
- ret = t_ret;
- }
-
- if (ret != 0)
- goto err;
-
- /*
* If there are any log records, write a log record and sync the log,
* else do no log writes. If the commit is for a child transaction,
* we do not need to commit the child synchronously since it may still
* abort (if its parent aborts), and otherwise its parent or ultimate
* ancestor will write synchronously.
*/
- if (DBENV_LOGGING(dbenv) && !IS_ZERO_LSN(txnp->last_lsn)) {
+ if (DBENV_LOGGING(dbenv) && (!IS_ZERO_LSN(txnp->last_lsn) ||
+ STAILQ_FIRST(&txnp->logs) != NULL)) {
if (txnp->parent == NULL) {
/*
- * We are about to free all the read locks
- * for this transaction below. Some of those
- * locks might be handle locks which should
- * not be freed, because they will be freed
- * when the handle is closed. Check the
- * events and preprocess any trades now so
- * that we don't release the locks below.
+ * We are about to free all the read locks for this
+ * transaction below. Some of those locks might be
+ * handle locks which should not be freed, because
+ * they will be freed when the handle is closed. Check
+ * the events and preprocess any trades now so we don't
+ * release the locks below.
*/
- if ((ret = __txn_doevents(dbenv, txnp, 0, 1)) != 0)
- goto err;
- request.op = DB_LOCK_PUT_READ;
- if (LOCKING_ON(dbenv) && (ret = dbenv->lock_vec(
- dbenv, txnp->txnid, 0, &request, 1, NULL)) != 0)
+ if ((ret =
+ __txn_doevents(dbenv, txnp, TXN_PREPARE, 1)) != 0)
goto err;
- SET_LOG_FLAGS(dbenv, txnp, lflags);
- if ((ret = __txn_regop_log(dbenv,
- txnp, &txnp->last_lsn, lflags,
- TXN_COMMIT, (int32_t)time(NULL))) != 0)
+ memset(&request, 0, sizeof(request));
+ if (LOCKING_ON(dbenv)) {
+ request.op = DB_LOCK_PUT_READ;
+ if (IS_REP_MASTER(dbenv) &&
+ !IS_ZERO_LSN(txnp->last_lsn)) {
+ memset(&list_dbt, 0, sizeof(list_dbt));
+ request.obj = &list_dbt;
+ }
+ ret = __lock_vec(dbenv,
+ txnp->txnid, 0, &request, 1, NULL);
+ }
+
+ if (ret == 0 && !IS_ZERO_LSN(txnp->last_lsn)) {
+ SET_LOG_FLAGS(dbenv, txnp, lflags);
+ ret = __txn_regop_log(dbenv, txnp,
+ &txnp->last_lsn, lflags, TXN_COMMIT,
+ (int32_t)time(NULL), request.obj);
+ }
+
+ if (request.obj != NULL && request.obj->data != NULL)
+ __os_free(dbenv, request.obj->data);
+ if (ret != 0)
goto err;
} else {
/* Log the commit in the parent! */
- if ((ret = __txn_child_log(dbenv,
+ if (!IS_ZERO_LSN(txnp->last_lsn) &&
+ (ret = __txn_child_log(dbenv,
txnp->parent, &txnp->parent->last_lsn,
0, txnp->txnid, &txnp->last_lsn)) != 0) {
goto err;
}
+ if (STAILQ_FIRST(&txnp->logs) != NULL) {
+ /*
+ * Put the child first so we back it out first.
+ * All records are undone in reverse order.
+ */
+ STAILQ_CONCAT(&txnp->logs, &txnp->parent->logs);
+ txnp->parent->logs = txnp->logs;
+ STAILQ_INIT(&txnp->logs);
+ }
F_SET(txnp->parent, TXN_CHILDCOMMIT);
}
}
+ /*
+ * Process any aborted pages from our children.
+ * We delay putting pages on the free list that are newly
+ * allocated and then aborted so that we can undo other
+ * allocations, if necessary, without worrying about
+ * these pages which were not on the free list before.
+ */
+ if (txnp->txn_list != NULL) {
+ t_ret = __db_do_the_limbo(dbenv,
+ NULL, txnp, txnp->txn_list, LIMBO_NORMAL);
+ __db_txnlist_end(dbenv, txnp->txn_list);
+ txnp->txn_list = NULL;
+ if (t_ret != 0 && ret == 0)
+ ret = t_ret;
+ }
+
+ if (ret != 0)
+ goto err;
+
/* This is OK because __txn_end can only fail with a panic. */
return (__txn_end(txnp, 1));
@@ -568,13 +618,32 @@ err: /*
*/
if (td->status == TXN_PREPARED)
return (__db_panic(dbenv, ret));
-
- if ((t_ret = txnp->abort(txnp)) != 0)
+
+ if ((t_ret = __txn_abort(txnp)) != 0)
ret = t_ret;
return (ret);
}
/*
+ * __txn_abort_pp --
+ * Interface routine to TXN->abort.
+ */
+static int
+__txn_abort_pp(txnp)
+ DB_TXN *txnp;
+{
+ DB_ENV *dbenv;
+ int not_child, ret;
+
+ dbenv = txnp->mgrp->dbenv;
+ not_child = txnp->parent == NULL;
+ ret = __txn_abort(txnp);
+ if (not_child && IS_ENV_REPLICATED(dbenv))
+ __op_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
* __txn_abort --
* Abort a transaction.
*
@@ -607,7 +676,7 @@ __txn_abort(txnp)
* up.
*/
while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
- if ((ret = kid->abort(kid)) != 0)
+ if ((ret = __txn_abort(kid)) != 0)
return (ret);
if (LOCKING_ON(dbenv)) {
@@ -618,7 +687,7 @@ __txn_abort(txnp)
* handle is closed. Check the events and preprocess any
* trades now so that we don't release the locks below.
*/
- if ((ret = __txn_doevents(dbenv, txnp, 0, 1)) != 0)
+ if ((ret = __txn_doevents(dbenv, txnp, TXN_ABORT, 1)) != 0)
return (__db_panic(dbenv, ret));
/* Turn off timeouts. */
@@ -631,7 +700,8 @@ __txn_abort(txnp)
return (__db_panic(dbenv, ret));
request.op = DB_LOCK_UPGRADE_WRITE;
- if ((ret = dbenv->lock_vec(
+ request.obj = NULL;
+ if ((ret = __lock_vec(
dbenv, txnp->txnid, 0, &request, 1, NULL)) != 0)
return (__db_panic(dbenv, ret));
}
@@ -647,7 +717,7 @@ __txn_abort(txnp)
SET_LOG_FLAGS(dbenv, txnp, lflags);
if (DBENV_LOGGING(dbenv) && td->status == TXN_PREPARED &&
(ret = __txn_regop_log(dbenv, txnp, &txnp->last_lsn,
- lflags, TXN_ABORT, (int32_t)time(NULL))) != 0)
+ lflags, TXN_ABORT, (int32_t)time(NULL), NULL)) != 0)
return (__db_panic(dbenv, ret));
/* __txn_end always panics if it errors, so pass the return along. */
@@ -655,6 +725,26 @@ __txn_abort(txnp)
}
/*
+ * __txn_discard_pp --
+ * Interface routine to TXN->discard.
+ */
+static int
+__txn_discard_pp(txnp, flags)
+ DB_TXN *txnp;
+ u_int32_t flags;
+{
+ DB_ENV *dbenv;
+ int not_child, ret;
+
+ dbenv = txnp->mgrp->dbenv;
+ not_child = txnp->parent == NULL;
+ ret = __txn_discard(txnp, flags);
+ if (not_child && IS_ENV_REPLICATED(dbenv))
+ __op_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
* __txn_discard --
* Free the per-process resources associated with this txn handle.
*
@@ -682,7 +772,6 @@ __txn_discard(txnp, flags)
/* Should be no children. */
DB_ASSERT(TAILQ_FIRST(&txnp->kids) == NULL);
- DB_ASSERT(F_ISSET(td, TXN_RESTORED));
/* Free the space. */
MUTEX_THREAD_LOCK(dbenv, txnp->mgrp->mutexp);
@@ -709,8 +798,9 @@ __txn_prepare(txnp, gid)
DB_TXN *txnp;
u_int8_t *gid;
{
- DBT xid;
+ DBT list_dbt, xid;
DB_ENV *dbenv;
+ DB_LOCKREQ request;
DB_TXN *kid;
TXN_DETAIL *td;
u_int32_t lflags;
@@ -725,9 +815,13 @@ __txn_prepare(txnp, gid)
/* Commit any unresolved children. */
while ((kid = TAILQ_FIRST(&txnp->kids)) != NULL)
- if ((ret = kid->commit(kid, DB_TXN_NOSYNC)) != 0)
+ if ((ret = __txn_commit(kid, DB_TXN_NOSYNC)) != 0)
return (ret);
+ if (txnp->txn_list != NULL &&
+ (ret = __db_do_the_limbo(dbenv,
+ NULL, txnp, txnp->txn_list, LIMBO_PREPARE)) != 0)
+ return (ret);
/*
* In XA, the global transaction ID in the txn_detail structure is
* already set; in a non-XA environment, we must set it here. XA
@@ -736,6 +830,21 @@ __txn_prepare(txnp, gid)
* of those states, then we are calling prepare directly and we need
* to fill in the td->xid.
*/
+ if ((ret = __txn_doevents(dbenv, txnp, TXN_PREPARE, 1)) != 0)
+ return (ret);
+ memset(&request, 0, sizeof(request));
+ if (LOCKING_ON(dbenv)) {
+ request.op = DB_LOCK_PUT_READ;
+ if (IS_REP_MASTER(dbenv) &&
+ IS_ZERO_LSN(txnp->last_lsn)) {
+ memset(&list_dbt, 0, sizeof(list_dbt));
+ request.obj = &list_dbt;
+ }
+ if ((ret = __lock_vec(dbenv,
+ txnp->txnid, 0, &request, 1, NULL)) != 0)
+ return (ret);
+
+ }
if (DBENV_LOGGING(dbenv)) {
memset(&xid, 0, sizeof(xid));
if (td->xa_status != TXN_XA_ENDED &&
@@ -746,14 +855,18 @@ __txn_prepare(txnp, gid)
xid.size = sizeof(td->xid);
xid.data = td->xid;
- SET_LOG_FLAGS(dbenv, txnp, lflags);
+ lflags = DB_LOG_COMMIT | DB_LOG_PERM | DB_FLUSH;
if ((ret = __txn_xa_regop_log(dbenv, txnp, &txnp->last_lsn,
lflags, TXN_PREPARE, &xid, td->format, td->gtrid, td->bqual,
- &td->begin_lsn)) != 0) {
+ &td->begin_lsn, request.obj)) != 0) {
__db_err(dbenv, "DB_TXN->prepare: log_write failed %s",
db_strerror(ret));
- return (ret);
}
+ if (request.obj != NULL && request.obj->data != NULL)
+ __os_free(dbenv, request.obj->data);
+ if (ret != 0)
+ return (ret);
+
}
MUTEX_THREAD_LOCK(dbenv, txnp->mgrp->mutexp);
@@ -777,9 +890,11 @@ __txn_id(txnp)
/*
* __txn_set_timeout --
- * Set timeout values in the txn structure.
+ * DB_ENV->set_txn_timeout.
+ *
+ * PUBLIC: int __txn_set_timeout __P((DB_TXN *, db_timeout_t, u_int32_t));
*/
-static int
+int
__txn_set_timeout(txnp, timeout, op)
DB_TXN *txnp;
db_timeout_t timeout;
@@ -840,8 +955,12 @@ __txn_isvalid(txnp, tdp, op)
if (txnp->txnid != tp->txnid)
return (0);
- /* What we've got had better be a restored transaction. */
- if (!F_ISSET(tp, TXN_RESTORED)) {
+ /*
+ * What we've got had better be either a prepared or
+ * restored transaction.
+ */
+ if (tp->status != TXN_PREPARED &&
+ !F_ISSET(tp, TXN_DTL_RESTORED)) {
__db_err(mgrp->dbenv, "not a restored transaction");
return (__db_panic(mgrp->dbenv, EINVAL));
}
@@ -910,6 +1029,7 @@ __txn_end(txnp, is_commit)
{
DB_ENV *dbenv;
DB_LOCKREQ request;
+ DB_TXNLOGREC *lr;
DB_TXNMGR *mgr;
DB_TXNREGION *region;
TXN_DETAIL *tp;
@@ -921,30 +1041,34 @@ __txn_end(txnp, is_commit)
do_closefiles = 0;
/* Process commit events. */
- if ((ret = __txn_doevents(dbenv, txnp, is_commit, 0)) != 0)
+ if ((ret = __txn_doevents(dbenv,
+ txnp, is_commit ? TXN_COMMIT : TXN_ABORT, 0)) != 0)
return (__db_panic(dbenv, ret));
- /* Release the locks. */
- request.op = txnp->parent == NULL ||
- is_commit == 0 ? DB_LOCK_PUT_ALL : DB_LOCK_INHERIT;
-
/*
+ * Release the locks.
+ *
* __txn_end cannot return an simple error, we MUST return
* success/failure from commit or abort, ignoring any internal
* errors. So, we panic if something goes wrong. We can't
* deadlock here because we're not acquiring any new locks,
* so DB_LOCK_DEADLOCK is just as fatal as any other error.
*/
- if (LOCKING_ON(dbenv) && (ret = dbenv->lock_vec(
- dbenv, txnp->txnid, DB_LOCK_FREE_LOCKER, &request, 1, NULL)) != 0)
- return (__db_panic(dbenv, ret));
+ if (LOCKING_ON(dbenv)) {
+ request.op = txnp->parent == NULL ||
+ is_commit == 0 ? DB_LOCK_PUT_ALL : DB_LOCK_INHERIT;
+ request.obj = NULL;
+ if ((ret = __lock_vec(dbenv,
+ txnp->txnid, 0, &request, 1, NULL)) != 0)
+ return (__db_panic(dbenv, ret));
+ }
/* End the transaction. */
R_LOCK(dbenv, &mgr->reginfo);
tp = (TXN_DETAIL *)R_ADDR(&mgr->reginfo, txnp->off);
SH_TAILQ_REMOVE(&region->active_txn, tp, links, __txn_detail);
- if (F_ISSET(tp, TXN_RESTORED)) {
+ if (F_ISSET(tp, TXN_DTL_RESTORED)) {
region->stat.st_nrestores--;
do_closefiles = region->stat.st_nrestores == 0;
}
@@ -970,6 +1094,10 @@ __txn_end(txnp, is_commit)
TAILQ_REMOVE(&txnp->parent->kids, txnp, klinks);
/* Free the space. */
+ while ((lr = STAILQ_FIRST(&txnp->logs)) != NULL) {
+ STAILQ_REMOVE(&txnp->logs, lr, __txn_logrec, links);
+ __os_free(dbenv, lr);
+ }
if (F_ISSET(txnp, TXN_MALLOC)) {
MUTEX_THREAD_LOCK(dbenv, mgr->mutexp);
TAILQ_REMOVE(&mgr->txn_chain, txnp, links);
@@ -983,15 +1111,39 @@ __txn_end(txnp, is_commit)
(void)__dbreg_close_files(dbenv);
F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
mgr->n_discards = 0;
- (void)dbenv->txn_checkpoint(dbenv, 0, 0, DB_FORCE);
+ (void)__txn_checkpoint(dbenv, 0, 0, DB_FORCE);
}
+
return (0);
}
+static int
+__txn_dispatch_undo(dbenv, txnp, rdbt, key_lsn, txnlist)
+ DB_ENV *dbenv;
+ DB_TXN *txnp;
+ DBT *rdbt;
+ DB_LSN *key_lsn;
+ void *txnlist;
+{
+ int ret;
+
+ ret = __db_dispatch(dbenv, dbenv->recover_dtab,
+ dbenv->recover_dtab_size, rdbt, key_lsn, DB_TXN_ABORT, txnlist);
+ if (F_ISSET(txnp, TXN_CHILDCOMMIT))
+ (void)__db_txnlist_lsnadd(dbenv,
+ txnlist, key_lsn, 0);
+ if (ret == DB_SURPRISE_KID) {
+ if ((ret = __db_txnlist_lsninit(
+ dbenv, txnlist, key_lsn)) == 0)
+ F_SET(txnp, TXN_CHILDCOMMIT);
+ }
+
+ return (ret);
+}
+
/*
* __txn_undo --
- * Undo the transaction with id txnid. Returns 0 on success and
- * errno on failure.
+ * Undo the transaction with id txnid.
*/
static int
__txn_undo(txnp)
@@ -1002,6 +1154,7 @@ __txn_undo(txnp)
DB_LOGC *logc;
DB_LSN key_lsn;
DB_TXN *ptxn;
+ DB_TXNLOGREC *lr;
DB_TXNMGR *mgr;
int ret, t_ret;
void *txnlist;
@@ -1021,8 +1174,6 @@ __txn_undo(txnp)
*/
memset(&rdbt, 0, sizeof(rdbt));
- key_lsn = txnp->last_lsn;
-
/*
* Allocate a txnlist for children and aborted page allocs.
* We need to associate the list with the maximal parent
@@ -1045,27 +1196,43 @@ __txn_undo(txnp)
(ret = __db_txnlist_lsninit(dbenv, txnlist, &txnp->last_lsn)) != 0)
return (ret);
- if ((ret = dbenv->log_cursor(dbenv, &logc, 0)) != 0)
+ /*
+ * Take log records from the linked list stored in the transaction,
+ * then from the log.
+ */
+ for (lr = STAILQ_FIRST(&txnp->logs);
+ lr != NULL; lr = STAILQ_NEXT(lr, links)) {
+ rdbt.data = lr->data;
+ rdbt.size = 0;
+ LSN_NOT_LOGGED(key_lsn);
+ ret =
+ __txn_dispatch_undo(dbenv, txnp, &rdbt, &key_lsn, txnlist);
+ if (ret != 0) {
+ __db_err(dbenv,
+ "DB_TXN->abort: In-memory log undo failed: %s",
+ db_strerror(ret));
+ goto err;
+ }
+ }
+
+ key_lsn = txnp->last_lsn;
+
+ if (!IS_ZERO_LSN(key_lsn) &&
+ (ret = __log_cursor(dbenv, &logc)) != 0)
goto err;
- while (ret == 0 && !IS_ZERO_LSN(key_lsn)) {
+
+ while (!IS_ZERO_LSN(key_lsn)) {
/*
* The dispatch routine returns the lsn of the record
* before the current one in the key_lsn argument.
*/
- if ((ret = logc->get(logc, &key_lsn, &rdbt, DB_SET)) == 0) {
- ret = __db_dispatch(dbenv, dbenv->recover_dtab,
- dbenv->recover_dtab_size, &rdbt, &key_lsn,
- DB_TXN_ABORT, txnlist);
- if (F_ISSET(txnp, TXN_CHILDCOMMIT))
- (void)__db_txnlist_lsnadd(dbenv,
- txnlist, &key_lsn, 0);
+ if ((ret = __log_c_get(logc, &key_lsn, &rdbt, DB_SET)) == 0) {
+ ret = __txn_dispatch_undo(dbenv,
+ txnp, &rdbt, &key_lsn, txnlist);
}
- if (ret == DB_SURPRISE_KID) {
- if ((ret = __db_txnlist_lsninit(
- dbenv, txnlist, &key_lsn)) == 0)
- F_SET(txnp, TXN_CHILDCOMMIT);
- } else if (ret != 0) {
- __db_err(txnp->mgrp->dbenv,
+
+ if (ret != 0) {
+ __db_err(dbenv,
"DB_TXN->abort: Log undo failed for LSN: %lu %lu: %s",
(u_long)key_lsn.file, (u_long)key_lsn.offset,
db_strerror(ret));
@@ -1073,9 +1240,9 @@ __txn_undo(txnp)
}
}
- ret = __db_do_the_limbo(dbenv, ptxn, txnp, txnlist);
+ ret = __db_do_the_limbo(dbenv, ptxn, txnp, txnlist, LIMBO_NORMAL);
-err: if (logc != NULL && (t_ret = logc->close(logc, 0)) != 0 && ret == 0)
+err: if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
ret = t_ret;
if (ptxn == NULL && txnlist != NULL)
@@ -1084,37 +1251,25 @@ err: if (logc != NULL && (t_ret = logc->close(logc, 0)) != 0 && ret == 0)
}
/*
- * Transaction checkpoint.
- * If either kbytes or minutes is non-zero, then we only take the checkpoint
- * more than "minutes" minutes have passed since the last checkpoint or if
- * more than "kbytes" of log data have been written since the last checkpoint.
- * When taking a checkpoint, find the oldest active transaction and figure out
- * its first LSN. This is the lowest LSN we can checkpoint, since any record
- * written after since that point may be involved in a transaction and may
- * therefore need to be undone in the case of an abort.
+ * __txn_checkpoint_pp --
+ * DB_ENV->txn_checkpoint pre/post processing.
*
- * PUBLIC: int __txn_checkpoint
+ * PUBLIC: int __txn_checkpoint_pp
* PUBLIC: __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
*/
int
-__txn_checkpoint(dbenv, kbytes, minutes, flags)
+__txn_checkpoint_pp(dbenv, kbytes, minutes, flags)
DB_ENV *dbenv;
u_int32_t kbytes, minutes, flags;
{
- DB_LSN ckp_lsn, last_ckp;
- DB_TXNMGR *mgr;
- DB_TXNREGION *region;
- TXN_DETAIL *txnp;
- time_t last_ckp_time, now;
- u_int32_t bytes, mbytes;
- int ret;
+ int rep_check, ret;
PANIC_CHECK(dbenv);
ENV_REQUIRES_CONFIG(dbenv,
dbenv->tx_handle, "txn_checkpoint", DB_INIT_TXN);
/*
- * On a replication client, all transactions are read-only; therefore,
+ * On a replication client, all transactions are read-only; therefore,
* a checkpoint is a null-op.
*
* We permit txn_checkpoint, instead of just rendering it illegal,
@@ -1122,9 +1277,54 @@ __txn_checkpoint(dbenv, kbytes, minutes, flags)
* to operate as it gets promoted or demoted between being a
* master and a client.
*/
- if (F_ISSET(dbenv, DB_ENV_REP_CLIENT))
+ if (IS_REP_CLIENT(dbenv))
return (0);
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __txn_checkpoint(dbenv, kbytes, minutes, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __txn_checkpoint --
+ * DB_ENV->txn_checkpoint.
+ *
+ * PUBLIC: int __txn_checkpoint
+ * PUBLIC: __P((DB_ENV *, u_int32_t, u_int32_t, u_int32_t));
+ */
+int
+__txn_checkpoint(dbenv, kbytes, minutes, flags)
+ DB_ENV *dbenv;
+ u_int32_t kbytes, minutes, flags;
+{
+ DB_LSN ckp_lsn, last_ckp;
+ DB_TXNMGR *mgr;
+ DB_TXNREGION *region;
+ TXN_DETAIL *txnp;
+ time_t last_ckp_time, now;
+ u_int32_t bytes, gen, mbytes;
+ int ret;
+
+ ret = gen = 0;
+
+ /*
+ * A client will only call through here during recovery,
+ * so just sync the Mpool and go home.
+ */
+ if (IS_REP_CLIENT(dbenv)) {
+ if (MPOOL_ON(dbenv) && (ret = __memp_sync(dbenv, NULL)) != 0) {
+ __db_err(dbenv,
+ "txn_checkpoint: failed to flush the buffer cache %s",
+ db_strerror(ret));
+ return (ret);
+ } else
+ return (0);
+ }
+
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
@@ -1140,6 +1340,12 @@ __txn_checkpoint(dbenv, kbytes, minutes, flags)
if (bytes == 0 && mbytes == 0)
return (0);
+ /*
+ * If either kbytes or minutes is non-zero, then only take the
+ * checkpoint if more than "minutes" minutes have passed or if
+ * more than "kbytes" of log data have been written since the
+ * last checkpoint.
+ */
if (kbytes != 0 &&
mbytes * 1024 + bytes / 1024 >= (u_int32_t)kbytes)
goto do_ckp;
@@ -1163,7 +1369,12 @@ __txn_checkpoint(dbenv, kbytes, minutes, flags)
return (0);
}
-do_ckp: /* Look through the active transactions for the lowest begin LSN. */
+do_ckp: /*
+ * Find the oldest active transaction and figure out its "begin" LSN.
+ * This is the lowest LSN we can checkpoint, since any record written
+ * after it may be involved in a transaction and may therefore need
+ * to be undone in the case of an abort.
+ */
R_LOCK(dbenv, &mgr->reginfo);
for (txnp = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
txnp != NULL;
@@ -1173,7 +1384,7 @@ do_ckp: /* Look through the active transactions for the lowest begin LSN. */
ckp_lsn = txnp->begin_lsn;
R_UNLOCK(dbenv, &mgr->reginfo);
- if (MPOOL_ON(dbenv) && (ret = dbenv->memp_sync(dbenv, NULL)) != 0) {
+ if (MPOOL_ON(dbenv) && (ret = __memp_sync(dbenv, NULL)) != 0) {
__db_err(dbenv,
"txn_checkpoint: failed to flush the buffer cache %s",
db_strerror(ret));
@@ -1189,6 +1400,8 @@ do_ckp: /* Look through the active transactions for the lowest begin LSN. */
R_LOCK(dbenv, &mgr->reginfo);
last_ckp = region->last_ckp;
R_UNLOCK(dbenv, &mgr->reginfo);
+ if (REP_ON(dbenv))
+ __rep_get_gen(dbenv, &gen);
/*
* Put out records for the open files before we log
@@ -1199,9 +1412,9 @@ do_ckp: /* Look through the active transactions for the lowest begin LSN. */
* checkpoint.
*/
if ((ret = __dbreg_open_files(dbenv)) != 0 ||
- (ret = __txn_ckp_log(dbenv,
- NULL, &ckp_lsn, DB_PERMANENT | DB_FLUSH, &ckp_lsn,
- &last_ckp, (int32_t)time(NULL))) != 0) {
+ (ret = __txn_ckp_log(dbenv, NULL,
+ &ckp_lsn, DB_FLUSH | DB_LOG_PERM | DB_LOG_CHKPNT, &ckp_lsn,
+ &last_ckp, (int32_t)time(NULL), gen)) != 0) {
__db_err(dbenv,
"txn_checkpoint: log failed at LSN [%ld %ld] %s",
(long)ckp_lsn.file, (long)ckp_lsn.offset,
@@ -1211,7 +1424,7 @@ do_ckp: /* Look through the active transactions for the lowest begin LSN. */
__txn_updateckp(dbenv, &ckp_lsn);
}
- return (0);
+ return (ret);
}
/*
@@ -1283,7 +1496,7 @@ __txn_force_abort(dbenv, buffer)
{
DB_CIPHER *db_cipher;
HDR *hdr;
- u_int32_t offset, opcode, rec_len, rec_type, sum_len;
+ u_int32_t hdrlen, offset, opcode, rec_len, sum_len;
u_int8_t *bp, *key, chksum[DB_MAC_KEY];
size_t hdrsize;
int ret;
@@ -1292,28 +1505,25 @@ __txn_force_abort(dbenv, buffer)
/*
* This routine depends on the layout of HDR and the __txn_regop
- * record in txn.src. We are passed the beginning of the commit
- * record in the log buffer and overwrite the commit with an abort
- * and recalculate the checksum. We may be passed a txn_xa_regop
- * that is, an XA prepare), there's no need to overwrite that one.
+ * __txn_xa_regop records in txn.src. We are passed the beginning
+ * of the commit record in the log buffer and overwrite the
+ * commit with an abort and recalculate the checksum.
*/
+ hdrsize = CRYPTO_ON(dbenv) ? HDR_CRYPTO_SZ : HDR_NORMAL_SZ;
+
hdr = (HDR *)buffer;
- memcpy(&rec_type, hdr, sizeof(rec_type));
- if (rec_type == DB___txn_xa_regop)
- return (0);
+ memcpy(&hdrlen, buffer + SSZ(HDR, len), sizeof(hdr->len));
+ rec_len = hdrlen - hdrsize;
offset = sizeof(u_int32_t) + sizeof(u_int32_t) + sizeof(DB_LSN);
- rec_len = offset + sizeof(u_int32_t) + sizeof(int32_t);
if (CRYPTO_ON(dbenv)) {
key = db_cipher->mac_key;
- hdrsize = HDR_CRYPTO_SZ;
sum_len = DB_MAC_KEY;
if ((ret = db_cipher->decrypt(dbenv, db_cipher->data,
&hdr->iv[0], buffer + hdrsize, rec_len)) != 0)
return (__db_panic(dbenv, ret));
} else {
key = NULL;
- hdrsize = HDR_NORMAL_SZ;
sum_len = sizeof(u_int32_t);
}
bp = buffer + hdrsize + offset;
diff --git a/db/txn/txn.src b/db/txn/txn.src
index b1e131c2b..11afb4004 100644
--- a/db/txn/txn.src
+++ b/db/txn/txn.src
@@ -1,39 +1,45 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*
- * $Id: txn.src,v 11.10 2001/01/02 00:58:33 margo Exp $
+ * $Id: txn.src,v 11.24 2003/11/14 05:32:33 ubell Exp $
*/
-PREFIX txn
+PREFIX __txn
+DBPRIVATE
INCLUDE #include "db_config.h"
INCLUDE
INCLUDE #ifndef NO_SYSTEM_INCLUDES
INCLUDE #include <sys/types.h>
INCLUDE
+INCLUDE #if TIME_WITH_SYS_TIME
+INCLUDE #include <sys/time.h>
+INCLUDE #include <time.h>
+INCLUDE #else
+INCLUDE #if HAVE_SYS_TIME_H
+INCLUDE #include <sys/time.h>
+INCLUDE #else
+INCLUDE #include <time.h>
+INCLUDE #endif /* HAVE_SYS_TIME_H */
+INCLUDE #endif /* TIME_WITH SYS_TIME */
+INCLUDE
INCLUDE #include <ctype.h>
-INCLUDE #include <errno.h>
INCLUDE #include <string.h>
INCLUDE #endif
INCLUDE
INCLUDE #include "db_int.h"
-INCLUDE #include "db_page.h"
-INCLUDE #include "db_dispatch.h"
-INCLUDE #include "db_am.h"
-INCLUDE #include "txn.h"
+INCLUDE #include "dbinc/crypto.h"
+INCLUDE #include "dbinc/db_page.h"
+INCLUDE #include "dbinc/db_dispatch.h"
+INCLUDE #include "dbinc/db_am.h"
+INCLUDE #include "dbinc/log.h"
+INCLUDE #include "dbinc/txn.h"
INCLUDE
/*
- * DEPRECATED in 3.1 to add timestamps.
- */
-DEPRECATED old_regop 6
-ARG opcode u_int32_t lu
-END
-
-/*
* This is the standard log operation for commit.
* Note that we are using an int32_t for the timestamp. This means that
* in 2039 we will need to deprecate this log record and create one that
@@ -41,12 +47,8 @@ END
*/
BEGIN regop 10
ARG opcode u_int32_t lu
-ARG timestamp int32_t ld
-END
-
-DEPRECATED old_ckp 7
-POINTER ckp_lsn DB_LSN * lu
-POINTER last_ckp DB_LSN * lu
+TIME timestamp int32_t ld
+DBT locks DBT s
END
/*
@@ -66,24 +68,24 @@ END
BEGIN ckp 11
POINTER ckp_lsn DB_LSN * lu
POINTER last_ckp DB_LSN * lu
-ARG timestamp int32_t ld
+TIME timestamp int32_t ld
+ARG rep_gen u_int32_t ld
END
/*
- * This is the standard log operation for prepare (since right now
- * we only use prepare in an XA environment).
+ * This is the (new) log operation for a child commit. It is
+ * logged as a record in the PARENT. The child field contains
+ * the transaction ID of the child committing and the c_lsn is
+ * the last LSN of the child's log trail.
*/
-DEPRECATED xa_regop_old 8
-ARG opcode u_int32_t lu
-DBT xid DBT s
-ARG formatID int32_t ld
-ARG gtrid u_int32_t u
-ARG bqual u_int32_t u
+BEGIN child 12
+ARG child u_int32_t lx
+POINTER c_lsn DB_LSN * lu
END
+
/*
- * This is the standard log operation for prepare (since right now
- * we only use prepare in an XA environment).
+ * This is the standard log operation for prepare.
*/
BEGIN xa_regop 13
ARG opcode u_int32_t lu
@@ -92,23 +94,13 @@ ARG formatID int32_t ld
ARG gtrid u_int32_t u
ARG bqual u_int32_t u
POINTER begin_lsn DB_LSN * lu
+DBT locks DBT s
END
/*
- * This is the log operation for a child commit.
- */
-DEPRECATED child_old 9
-ARG opcode u_int32_t lu
-ARG parent u_int32_t lx
-END
-
-/*
- * This is the (new) log operation for a child commit. It is
- * logged as a record in the PARENT. The child field contains
- * the transaction ID of the child committing and the c_lsn is
- * the last LSN of the child's log trail.
+ * Log the fact that we are recycling txnids.
*/
-BEGIN child 12
-ARG child u_int32_t lx
-POINTER c_lsn DB_LSN * lu
+BEGIN recycle 14
+ARG min u_int32_t u
+ARG max u_int32_t u
END
diff --git a/db/txn/txn_auto.c b/db/txn/txn_auto.c
index cbfa53673..a8bd386b4 100644
--- a/db/txn/txn_auto.c
+++ b/db/txn/txn_auto.c
@@ -4,263 +4,327 @@
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#if TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif /* HAVE_SYS_TIME_H */
+#endif /* TIME_WITH SYS_TIME */
+
#include <ctype.h>
-#include <errno.h>
#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "db_dispatch.h"
-#include "db_am.h"
-#include "txn.h"
-
-int
-__txn_old_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __txn_old_regop_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
-
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
-
- if ((ret = __txn_old_regop_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]txn_old_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-
-int
-__txn_old_regop_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __txn_old_regop_args **argpp;
-{
- __txn_old_regop_args *argp;
- u_int8_t *bp;
- int ret;
-
- ret = __os_malloc(dbenv, sizeof(__txn_old_regop_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- *argpp = argp;
- return (0);
-}
+#include "dbinc/crypto.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/db_am.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+/*
+ * PUBLIC: int __txn_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, int32_t, const DBT *));
+ */
int
__txn_regop_log(dbenv, txnid, ret_lsnp, flags,
- opcode, timestamp)
+ opcode, timestamp, locks)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
u_int32_t opcode;
int32_t timestamp;
+ const DBT *locks;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
- rectype = DB_txn_regop;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ rectype = DB___txn_regop;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
- + sizeof(timestamp);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t) + (locks == NULL ? 0 : locks->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
- memcpy(bp, &timestamp, sizeof(timestamp));
- bp += sizeof(timestamp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)timestamp;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (locks == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &locks->size, sizeof(locks->size));
+ bp += sizeof(locks->size);
+ memcpy(bp, locks->data, locks->size);
+ bp += locks->size;
+ }
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__txn_regop_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_regop_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__txn_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
+__txn_regop_getpgnos(dbenv, rec, lsnp, notused1, summary)
DB_ENV *dbenv;
- DBT *dbtp;
+ DBT *rec;
DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
+ db_recops notused1;
+ void *summary;
{
- __txn_regop_args *argp;
- u_int32_t i;
- u_int ch;
+ TXN_RECS *t;
int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ t = (TXN_RECS *)summary;
- if ((ret = __txn_regop_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
return (ret);
- printf("[%lu][%lu]txn_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\ttimestamp: %ld\n", (long)argp->timestamp);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
-int
-__txn_regop_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __txn_regop_args **argpp;
-{
- __txn_regop_args *argp;
- u_int8_t *bp;
- int ret;
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
- ret = __os_malloc(dbenv, sizeof(__txn_regop_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->timestamp, bp, sizeof(argp->timestamp));
- bp += sizeof(argp->timestamp);
- *argpp = argp;
return (0);
}
+#endif /* HAVE_REPLICATION */
+/*
+ * PUBLIC: int __txn_regop_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__txn_old_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
+__txn_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __txn_old_ckp_args *argp;
+ __txn_regop_args *argp;
+ struct tm *lt;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __txn_old_ckp_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __txn_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]txn_old_ckp: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__txn_regop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tckp_lsn: [%lu][%lu]\n",
- (u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
- printf("\tlast_ckp: [%lu][%lu]\n",
- (u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ lt = localtime((time_t *)&argp->timestamp);
+ (void)printf(
+ "\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
+ (long)argp->timestamp, ctime((time_t *)&argp->timestamp),
+ (u_long)lt->tm_year - 100, (u_long)lt->tm_mon+1,
+ (u_long)lt->tm_mday, (u_long)lt->tm_hour,
+ (u_long)lt->tm_min, (u_long)lt->tm_sec);
+ (void)printf("\tlocks: ");
+ for (i = 0; i < argp->locks.size; i++) {
+ ch = ((u_int8_t *)argp->locks.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __txn_regop_read __P((DB_ENV *, void *, __txn_regop_args **));
+ */
int
-__txn_old_ckp_read(dbenv, recbuf, argpp)
+__txn_regop_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __txn_old_ckp_args **argpp;
+ __txn_regop_args **argpp;
{
- __txn_old_ckp_args *argp;
+ __txn_regop_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__txn_old_ckp_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_regop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->ckp_lsn, bp, sizeof(argp->ckp_lsn));
- bp += sizeof(argp->ckp_lsn);
- memcpy(&argp->last_ckp, bp, sizeof(argp->last_ckp));
- bp += sizeof(argp->last_ckp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->timestamp = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memset(&argp->locks, 0, sizeof(argp->locks));
+ memcpy(&argp->locks.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->locks.data = bp;
+ bp += argp->locks.size;
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __txn_ckp_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, DB_LSN *, DB_LSN *, int32_t, u_int32_t));
+ */
int
__txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
- ckp_lsn, last_ckp, timestamp)
+ ckp_lsn, last_ckp, timestamp, rep_gen)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
@@ -268,58 +332,191 @@ __txn_ckp_log(dbenv, txnid, ret_lsnp, flags,
DB_LSN * ckp_lsn;
DB_LSN * last_ckp;
int32_t timestamp;
+ u_int32_t rep_gen;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
- rectype = DB_txn_ckp;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ rectype = DB___txn_ckp;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ sizeof(*ckp_lsn)
+ sizeof(*last_ckp)
- + sizeof(timestamp);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
+
if (ckp_lsn != NULL)
memcpy(bp, ckp_lsn, sizeof(*ckp_lsn));
else
memset(bp, 0, sizeof(*ckp_lsn));
bp += sizeof(*ckp_lsn);
+
if (last_ckp != NULL)
memcpy(bp, last_ckp, sizeof(*last_ckp));
else
memset(bp, 0, sizeof(*last_ckp));
bp += sizeof(*last_ckp);
- memcpy(bp, &timestamp, sizeof(timestamp));
- bp += sizeof(timestamp);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)timestamp;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)rep_gen;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__txn_ckp_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_ckp_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_ckp_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __txn_ckp_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__txn_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -329,34 +526,44 @@ __txn_ckp_print(dbenv, dbtp, lsnp, notused2, notused3)
void *notused3;
{
__txn_ckp_args *argp;
- u_int32_t i;
- u_int ch;
+ struct tm *lt;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __txn_ckp_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]txn_ckp: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__txn_ckp%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tckp_lsn: [%lu][%lu]\n",
+ (void)printf("\tckp_lsn: [%lu][%lu]\n",
(u_long)argp->ckp_lsn.file, (u_long)argp->ckp_lsn.offset);
- printf("\tlast_ckp: [%lu][%lu]\n",
+ (void)printf("\tlast_ckp: [%lu][%lu]\n",
(u_long)argp->last_ckp.file, (u_long)argp->last_ckp.offset);
- printf("\ttimestamp: %ld\n", (long)argp->timestamp);
- printf("\n");
- __os_free(argp, 0);
+ lt = localtime((time_t *)&argp->timestamp);
+ (void)printf(
+ "\ttimestamp: %ld (%.24s, 20%02lu%02lu%02lu%02lu%02lu.%02lu)\n",
+ (long)argp->timestamp, ctime((time_t *)&argp->timestamp),
+ (u_long)lt->tm_year - 100, (u_long)lt->tm_mon+1,
+ (u_long)lt->tm_mday, (u_long)lt->tm_hour,
+ (u_long)lt->tm_min, (u_long)lt->tm_sec);
+ (void)printf("\trep_gen: %ld\n", (long)argp->rep_gen);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __txn_ckp_read __P((DB_ENV *, void *, __txn_ckp_args **));
+ */
int
__txn_ckp_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -364,118 +571,311 @@ __txn_ckp_read(dbenv, recbuf, argpp)
__txn_ckp_args **argpp;
{
__txn_ckp_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__txn_ckp_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_ckp_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
+
memcpy(&argp->ckp_lsn, bp, sizeof(argp->ckp_lsn));
bp += sizeof(argp->ckp_lsn);
+
memcpy(&argp->last_ckp, bp, sizeof(argp->last_ckp));
bp += sizeof(argp->last_ckp);
- memcpy(&argp->timestamp, bp, sizeof(argp->timestamp));
- bp += sizeof(argp->timestamp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->timestamp = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->rep_gen = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __txn_child_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, DB_LSN *));
+ */
int
-__txn_xa_regop_old_print(dbenv, dbtp, lsnp, notused2, notused3)
+__txn_child_log(dbenv, txnid, ret_lsnp, flags,
+ child, c_lsn)
+ DB_ENV *dbenv;
+ DB_TXN *txnid;
+ DB_LSN *ret_lsnp;
+ u_int32_t flags;
+ u_int32_t child;
+ DB_LSN * c_lsn;
+{
+ DBT logrec;
+ DB_TXNLOGREC *lr;
+ DB_LSN *lsnp, null_lsn;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
+ u_int8_t *bp;
+ int is_durable, ret;
+
+ rectype = DB___txn_child;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
+ if (txnid == NULL) {
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
+ lsnp = &null_lsn;
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
+ lsnp = &txnid->last_lsn;
+ }
+
+ logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
+ + sizeof(u_int32_t)
+ + sizeof(*c_lsn);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
+
+ bp = logrec.data;
+
+ memcpy(bp, &rectype, sizeof(rectype));
+ bp += sizeof(rectype);
+
+ memcpy(bp, &txn_num, sizeof(txn_num));
+ bp += sizeof(txn_num);
+
+ memcpy(bp, lsnp, sizeof(DB_LSN));
+ bp += sizeof(DB_LSN);
+
+ uinttmp = (u_int32_t)child;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ if (c_lsn != NULL)
+ memcpy(bp, c_lsn, sizeof(*c_lsn));
+ else
+ memset(bp, 0, sizeof(*c_lsn));
+ bp += sizeof(*c_lsn);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__txn_child_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
+ return (ret);
+}
+
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_child_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_child_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __txn_child_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_child_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __txn_xa_regop_old_args *argp;
- u_int32_t i;
- u_int ch;
+ __txn_child_args *argp;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __txn_xa_regop_old_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __txn_child_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]txn_xa_regop_old: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__txn_child%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\txid: ");
- for (i = 0; i < argp->xid.size; i++) {
- ch = ((u_int8_t *)argp->xid.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tformatID: %ld\n", (long)argp->formatID);
- printf("\tgtrid: %u\n", argp->gtrid);
- printf("\tbqual: %u\n", argp->bqual);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tchild: 0x%lx\n", (u_long)argp->child);
+ (void)printf("\tc_lsn: [%lu][%lu]\n",
+ (u_long)argp->c_lsn.file, (u_long)argp->c_lsn.offset);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __txn_child_read __P((DB_ENV *, void *, __txn_child_args **));
+ */
int
-__txn_xa_regop_old_read(dbenv, recbuf, argpp)
+__txn_child_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __txn_xa_regop_old_args **argpp;
+ __txn_child_args **argpp;
{
- __txn_xa_regop_old_args *argp;
+ __txn_child_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__txn_xa_regop_old_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_child_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memset(&argp->xid, 0, sizeof(argp->xid));
- memcpy(&argp->xid.size, bp, sizeof(u_int32_t));
- bp += sizeof(u_int32_t);
- argp->xid.data = bp;
- bp += argp->xid.size;
- memcpy(&argp->formatID, bp, sizeof(argp->formatID));
- bp += sizeof(argp->formatID);
- memcpy(&argp->gtrid, bp, sizeof(argp->gtrid));
- bp += sizeof(argp->gtrid);
- memcpy(&argp->bqual, bp, sizeof(argp->bqual));
- bp += sizeof(argp->bqual);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->child = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&argp->c_lsn, bp, sizeof(argp->c_lsn));
+ bp += sizeof(argp->c_lsn);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __txn_xa_regop_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, const DBT *, int32_t, u_int32_t, u_int32_t,
+ * PUBLIC: DB_LSN *, const DBT *));
+ */
int
__txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
- opcode, xid, formatID, gtrid, bqual, begin_lsn)
+ opcode, xid, formatID, gtrid, bqual, begin_lsn,
+ locks)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
@@ -486,44 +886,93 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
u_int32_t gtrid;
u_int32_t bqual;
DB_LSN * begin_lsn;
+ const DBT *locks;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t zero;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t zero, uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
- rectype = DB_txn_xa_regop;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ rectype = DB___txn_xa_regop;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(opcode)
+ + sizeof(u_int32_t)
+ sizeof(u_int32_t) + (xid == NULL ? 0 : xid->size)
- + sizeof(formatID)
- + sizeof(gtrid)
- + sizeof(bqual)
- + sizeof(*begin_lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t)
+ + sizeof(*begin_lsn)
+ + sizeof(u_int32_t) + (locks == NULL ? 0 : locks->size);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &opcode, sizeof(opcode));
- bp += sizeof(opcode);
+
+ uinttmp = (u_int32_t)opcode;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (xid == NULL) {
zero = 0;
memcpy(bp, &zero, sizeof(u_int32_t));
@@ -534,25 +983,121 @@ __txn_xa_regop_log(dbenv, txnid, ret_lsnp, flags,
memcpy(bp, xid->data, xid->size);
bp += xid->size;
}
- memcpy(bp, &formatID, sizeof(formatID));
- bp += sizeof(formatID);
- memcpy(bp, &gtrid, sizeof(gtrid));
- bp += sizeof(gtrid);
- memcpy(bp, &bqual, sizeof(bqual));
- bp += sizeof(bqual);
+
+ uinttmp = (u_int32_t)formatID;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)gtrid;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)bqual;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
if (begin_lsn != NULL)
memcpy(bp, begin_lsn, sizeof(*begin_lsn));
else
memset(bp, 0, sizeof(*begin_lsn));
bp += sizeof(*begin_lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ if (locks == NULL) {
+ zero = 0;
+ memcpy(bp, &zero, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ } else {
+ memcpy(bp, &locks->size, sizeof(locks->size));
+ bp += sizeof(locks->size);
+ memcpy(bp, locks->data, locks->size);
+ bp += locks->size;
+ }
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__txn_xa_regop_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_xa_regop_getpgnos __P((DB_ENV *, DBT *,
+ * PUBLIC: DB_LSN *, db_recops, void *));
+ */
+int
+__txn_xa_regop_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __txn_xa_regop_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
__txn_xa_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
@@ -563,43 +1108,51 @@ __txn_xa_regop_print(dbenv, dbtp, lsnp, notused2, notused3)
{
__txn_xa_regop_args *argp;
u_int32_t i;
- u_int ch;
+ int ch;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
if ((ret = __txn_xa_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]txn_xa_regop: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__txn_xa_regop%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\txid: ");
+ (void)printf("\topcode: %lu\n", (u_long)argp->opcode);
+ (void)printf("\txid: ");
for (i = 0; i < argp->xid.size; i++) {
ch = ((u_int8_t *)argp->xid.data)[i];
- if (isprint(ch) || ch == 0xa)
- putchar(ch);
- else
- printf("%#x ", ch);
- }
- printf("\n");
- printf("\tformatID: %ld\n", (long)argp->formatID);
- printf("\tgtrid: %u\n", argp->gtrid);
- printf("\tbqual: %u\n", argp->bqual);
- printf("\tbegin_lsn: [%lu][%lu]\n",
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\tformatID: %ld\n", (long)argp->formatID);
+ (void)printf("\tgtrid: %u\n", argp->gtrid);
+ (void)printf("\tbqual: %u\n", argp->bqual);
+ (void)printf("\tbegin_lsn: [%lu][%lu]\n",
(u_long)argp->begin_lsn.file, (u_long)argp->begin_lsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tlocks: ");
+ for (i = 0; i < argp->locks.size; i++) {
+ ch = ((u_int8_t *)argp->locks.data)[i];
+ printf(isprint(ch) || ch == 0x0a ? "%c" : "%#x ", ch);
+ }
+ (void)printf("\n");
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __txn_xa_regop_read __P((DB_ENV *, void *,
+ * PUBLIC: __txn_xa_regop_args **));
+ */
int
__txn_xa_regop_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
@@ -607,287 +1160,406 @@ __txn_xa_regop_read(dbenv, recbuf, argpp)
__txn_xa_regop_args **argpp;
{
__txn_xa_regop_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__txn_xa_regop_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_xa_regop_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->opcode = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
memset(&argp->xid, 0, sizeof(argp->xid));
memcpy(&argp->xid.size, bp, sizeof(u_int32_t));
bp += sizeof(u_int32_t);
argp->xid.data = bp;
bp += argp->xid.size;
- memcpy(&argp->formatID, bp, sizeof(argp->formatID));
- bp += sizeof(argp->formatID);
- memcpy(&argp->gtrid, bp, sizeof(argp->gtrid));
- bp += sizeof(argp->gtrid);
- memcpy(&argp->bqual, bp, sizeof(argp->bqual));
- bp += sizeof(argp->bqual);
- memcpy(&argp->begin_lsn, bp, sizeof(argp->begin_lsn));
- bp += sizeof(argp->begin_lsn);
- *argpp = argp;
- return (0);
-}
-int
-__txn_child_old_print(dbenv, dbtp, lsnp, notused2, notused3)
- DB_ENV *dbenv;
- DBT *dbtp;
- DB_LSN *lsnp;
- db_recops notused2;
- void *notused3;
-{
- __txn_child_old_args *argp;
- u_int32_t i;
- u_int ch;
- int ret;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->formatID = (int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- i = 0;
- ch = 0;
- notused2 = DB_TXN_ABORT;
- notused3 = NULL;
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->gtrid = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
- if ((ret = __txn_child_old_read(dbenv, dbtp->data, &argp)) != 0)
- return (ret);
- printf("[%lu][%lu]txn_child_old: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
- (u_long)lsnp->file,
- (u_long)lsnp->offset,
- (u_long)argp->type,
- (u_long)argp->txnid->txnid,
- (u_long)argp->prev_lsn.file,
- (u_long)argp->prev_lsn.offset);
- printf("\topcode: %lu\n", (u_long)argp->opcode);
- printf("\tparent: 0x%lx\n", (u_long)argp->parent);
- printf("\n");
- __os_free(argp, 0);
- return (0);
-}
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->bqual = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
-int
-__txn_child_old_read(dbenv, recbuf, argpp)
- DB_ENV *dbenv;
- void *recbuf;
- __txn_child_old_args **argpp;
-{
- __txn_child_old_args *argp;
- u_int8_t *bp;
- int ret;
+ memcpy(&argp->begin_lsn, bp, sizeof(argp->begin_lsn));
+ bp += sizeof(argp->begin_lsn);
+
+ memset(&argp->locks, 0, sizeof(argp->locks));
+ memcpy(&argp->locks.size, bp, sizeof(u_int32_t));
+ bp += sizeof(u_int32_t);
+ argp->locks.data = bp;
+ bp += argp->locks.size;
- ret = __os_malloc(dbenv, sizeof(__txn_child_old_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
- return (ret);
- argp->txnid = (DB_TXN *)&argp[1];
- bp = recbuf;
- memcpy(&argp->type, bp, sizeof(argp->type));
- bp += sizeof(argp->type);
- memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
- bp += sizeof(argp->txnid->txnid);
- memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
- bp += sizeof(DB_LSN);
- memcpy(&argp->opcode, bp, sizeof(argp->opcode));
- bp += sizeof(argp->opcode);
- memcpy(&argp->parent, bp, sizeof(argp->parent));
- bp += sizeof(argp->parent);
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __txn_recycle_log __P((DB_ENV *, DB_TXN *, DB_LSN *,
+ * PUBLIC: u_int32_t, u_int32_t, u_int32_t));
+ */
int
-__txn_child_log(dbenv, txnid, ret_lsnp, flags,
- child, c_lsn)
+__txn_recycle_log(dbenv, txnid, ret_lsnp, flags,
+ min, max)
DB_ENV *dbenv;
DB_TXN *txnid;
DB_LSN *ret_lsnp;
u_int32_t flags;
- u_int32_t child;
- DB_LSN * c_lsn;
+ u_int32_t min;
+ u_int32_t max;
{
DBT logrec;
+ DB_TXNLOGREC *lr;
DB_LSN *lsnp, null_lsn;
- u_int32_t rectype, txn_num;
- int ret;
+ u_int32_t uinttmp, rectype, txn_num;
+ u_int npad;
u_int8_t *bp;
+ int is_durable, ret;
- rectype = DB_txn_child;
- if (txnid != NULL &&
- TAILQ_FIRST(&txnid->kids) != NULL &&
- (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
- return (ret);
- txn_num = txnid == NULL ? 0 : txnid->txnid;
+ rectype = DB___txn_recycle;
+ npad = 0;
+
+ is_durable = 1;
+ if (LF_ISSET(DB_LOG_NOT_DURABLE) ||
+ F_ISSET(dbenv, DB_ENV_TXN_NOT_DURABLE)) {
+ if (txnid == NULL)
+ return (0);
+ is_durable = 0;
+ }
if (txnid == NULL) {
- ZERO_LSN(null_lsn);
+ txn_num = 0;
+ null_lsn.file = 0;
+ null_lsn.offset = 0;
lsnp = &null_lsn;
- } else
+ } else {
+ if (TAILQ_FIRST(&txnid->kids) != NULL &&
+ (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)
+ return (ret);
+ txn_num = txnid->txnid;
lsnp = &txnid->last_lsn;
+ }
+
logrec.size = sizeof(rectype) + sizeof(txn_num) + sizeof(DB_LSN)
- + sizeof(child)
- + sizeof(*c_lsn);
- if ((ret = __os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)
- return (ret);
+ + sizeof(u_int32_t)
+ + sizeof(u_int32_t);
+ if (CRYPTO_ON(dbenv)) {
+ npad =
+ ((DB_CIPHER *)dbenv->crypto_handle)->adj_size(logrec.size);
+ logrec.size += npad;
+ }
+
+ if (!is_durable && txnid != NULL) {
+ if ((ret = __os_malloc(dbenv,
+ logrec.size + sizeof(DB_TXNLOGREC), &lr)) != 0)
+ return (ret);
+#ifdef DIAGNOSTIC
+ goto do_malloc;
+#else
+ logrec.data = &lr->data;
+#endif
+ } else {
+#ifdef DIAGNOSTIC
+do_malloc:
+#endif
+ if ((ret =
+ __os_malloc(dbenv, logrec.size, &logrec.data)) != 0) {
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL)
+ (void)__os_free(dbenv, lr);
+#endif
+ return (ret);
+ }
+ }
+ if (npad > 0)
+ memset((u_int8_t *)logrec.data + logrec.size - npad, 0, npad);
bp = logrec.data;
+
memcpy(bp, &rectype, sizeof(rectype));
bp += sizeof(rectype);
+
memcpy(bp, &txn_num, sizeof(txn_num));
bp += sizeof(txn_num);
+
memcpy(bp, lsnp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(bp, &child, sizeof(child));
- bp += sizeof(child);
- if (c_lsn != NULL)
- memcpy(bp, c_lsn, sizeof(*c_lsn));
- else
- memset(bp, 0, sizeof(*c_lsn));
- bp += sizeof(*c_lsn);
- DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) == logrec.size);
- ret = log_put(dbenv, ret_lsnp, (DBT *)&logrec, flags);
- if (txnid != NULL)
- txnid->last_lsn = *ret_lsnp;
- __os_free(logrec.data, logrec.size);
+
+ uinttmp = (u_int32_t)min;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ uinttmp = (u_int32_t)max;
+ memcpy(bp, &uinttmp, sizeof(uinttmp));
+ bp += sizeof(uinttmp);
+
+ DB_ASSERT((u_int32_t)(bp - (u_int8_t *)logrec.data) <= logrec.size);
+
+#ifdef DIAGNOSTIC
+ if (!is_durable && txnid != NULL) {
+ /*
+ * We set the debug bit if we are going
+ * to log non-durable transactions so
+ * they will be ignored by recovery.
+ */
+ memcpy(lr->data, logrec.data, logrec.size);
+ rectype |= DB_debug_FLAG;
+ memcpy(logrec.data, &rectype, sizeof(rectype));
+ }
+#endif
+
+ if (!is_durable && txnid != NULL) {
+ ret = 0;
+ STAILQ_INSERT_HEAD(&txnid->logs, lr, links);
+#ifdef DIAGNOSTIC
+ goto do_put;
+#endif
+ } else{
+#ifdef DIAGNOSTIC
+do_put:
+#endif
+ ret = __log_put(dbenv,
+ ret_lsnp, (DBT *)&logrec, flags | DB_LOG_NOCOPY);
+ if (ret == 0 && txnid != NULL)
+ txnid->last_lsn = *ret_lsnp;
+ }
+
+ if (!is_durable)
+ LSN_NOT_LOGGED(*ret_lsnp);
+#ifdef LOG_DIAGNOSTIC
+ if (ret != 0)
+ (void)__txn_recycle_print(dbenv,
+ (DBT *)&logrec, ret_lsnp, NULL, NULL);
+#endif
+#ifndef DIAGNOSTIC
+ if (is_durable || txnid == NULL)
+#endif
+ __os_free(dbenv, logrec.data);
+
return (ret);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_recycle_getpgnos __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
int
-__txn_child_print(dbenv, dbtp, lsnp, notused2, notused3)
+__txn_recycle_getpgnos(dbenv, rec, lsnp, notused1, summary)
+ DB_ENV *dbenv;
+ DBT *rec;
+ DB_LSN *lsnp;
+ db_recops notused1;
+ void *summary;
+{
+ TXN_RECS *t;
+ int ret;
+ COMPQUIET(rec, NULL);
+ COMPQUIET(notused1, DB_TXN_ABORT);
+
+ t = (TXN_RECS *)summary;
+
+ if ((ret = __rep_check_alloc(dbenv, t, 1)) != 0)
+ return (ret);
+
+ t->array[t->npages].flags = LSN_PAGE_NOLOCK;
+ t->array[t->npages].lsn = *lsnp;
+ t->array[t->npages].fid = DB_LOGFILEID_INVALID;
+ memset(&t->array[t->npages].pgdesc, 0,
+ sizeof(t->array[t->npages].pgdesc));
+
+ t->npages++;
+
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __txn_recycle_print __P((DB_ENV *, DBT *, DB_LSN *,
+ * PUBLIC: db_recops, void *));
+ */
+int
+__txn_recycle_print(dbenv, dbtp, lsnp, notused2, notused3)
DB_ENV *dbenv;
DBT *dbtp;
DB_LSN *lsnp;
db_recops notused2;
void *notused3;
{
- __txn_child_args *argp;
- u_int32_t i;
- u_int ch;
+ __txn_recycle_args *argp;
int ret;
- i = 0;
- ch = 0;
notused2 = DB_TXN_ABORT;
notused3 = NULL;
- if ((ret = __txn_child_read(dbenv, dbtp->data, &argp)) != 0)
+ if ((ret = __txn_recycle_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- printf("[%lu][%lu]txn_child: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
+ (void)printf(
+ "[%lu][%lu]__txn_recycle%s: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
(u_long)lsnp->file,
(u_long)lsnp->offset,
+ (argp->type & DB_debug_FLAG) ? "_debug" : "",
(u_long)argp->type,
(u_long)argp->txnid->txnid,
(u_long)argp->prev_lsn.file,
(u_long)argp->prev_lsn.offset);
- printf("\tchild: 0x%lx\n", (u_long)argp->child);
- printf("\tc_lsn: [%lu][%lu]\n",
- (u_long)argp->c_lsn.file, (u_long)argp->c_lsn.offset);
- printf("\n");
- __os_free(argp, 0);
+ (void)printf("\tmin: %u\n", argp->min);
+ (void)printf("\tmax: %u\n", argp->max);
+ (void)printf("\n");
+ __os_free(dbenv, argp);
+
return (0);
}
+/*
+ * PUBLIC: int __txn_recycle_read __P((DB_ENV *, void *,
+ * PUBLIC: __txn_recycle_args **));
+ */
int
-__txn_child_read(dbenv, recbuf, argpp)
+__txn_recycle_read(dbenv, recbuf, argpp)
DB_ENV *dbenv;
void *recbuf;
- __txn_child_args **argpp;
+ __txn_recycle_args **argpp;
{
- __txn_child_args *argp;
+ __txn_recycle_args *argp;
+ u_int32_t uinttmp;
u_int8_t *bp;
int ret;
- ret = __os_malloc(dbenv, sizeof(__txn_child_args) +
- sizeof(DB_TXN), NULL, &argp);
- if (ret != 0)
+ if ((ret = __os_malloc(dbenv,
+ sizeof(__txn_recycle_args) + sizeof(DB_TXN), &argp)) != 0)
return (ret);
argp->txnid = (DB_TXN *)&argp[1];
+
bp = recbuf;
memcpy(&argp->type, bp, sizeof(argp->type));
bp += sizeof(argp->type);
+
memcpy(&argp->txnid->txnid, bp, sizeof(argp->txnid->txnid));
bp += sizeof(argp->txnid->txnid);
+
memcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));
bp += sizeof(DB_LSN);
- memcpy(&argp->child, bp, sizeof(argp->child));
- bp += sizeof(argp->child);
- memcpy(&argp->c_lsn, bp, sizeof(argp->c_lsn));
- bp += sizeof(argp->c_lsn);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->min = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
+ memcpy(&uinttmp, bp, sizeof(uinttmp));
+ argp->max = (u_int32_t)uinttmp;
+ bp += sizeof(uinttmp);
+
*argpp = argp;
return (0);
}
+/*
+ * PUBLIC: int __txn_init_print __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__txn_init_print(dbenv)
+__txn_init_print(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __txn_old_regop_print, DB_txn_old_regop)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_regop_print, DB_txn_regop)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_old_ckp_print, DB_txn_old_ckp)) != 0)
- return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_ckp_print, DB_txn_ckp)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_print, DB___txn_regop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_xa_regop_old_print, DB_txn_xa_regop_old)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_ckp_print, DB___txn_ckp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_xa_regop_print, DB_txn_xa_regop)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_child_print, DB___txn_child)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_child_old_print, DB_txn_child_old)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_xa_regop_print, DB___txn_xa_regop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_child_print, DB_txn_child)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_recycle_print, DB___txn_recycle)) != 0)
return (ret);
return (0);
}
+#ifdef HAVE_REPLICATION
+/*
+ * PUBLIC: int __txn_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
int
-__txn_init_recover(dbenv)
+__txn_init_getpgnos(dbenv, dtabp, dtabsizep)
DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
{
int ret;
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_txn_old_regop)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_getpgnos, DB___txn_regop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_regop_recover, DB_txn_regop)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_ckp_getpgnos, DB___txn_ckp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_txn_old_ckp)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_child_getpgnos, DB___txn_child)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_ckp_recover, DB_txn_ckp)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_xa_regop_getpgnos, DB___txn_xa_regop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_txn_xa_regop_old)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_recycle_getpgnos, DB___txn_recycle)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_xa_regop_recover, DB_txn_xa_regop)) != 0)
+ return (0);
+}
+#endif /* HAVE_REPLICATION */
+
+/*
+ * PUBLIC: int __txn_init_recover __P((DB_ENV *, int (***)(DB_ENV *,
+ * PUBLIC: DBT *, DB_LSN *, db_recops, void *), size_t *));
+ */
+int
+__txn_init_recover(dbenv, dtabp, dtabsizep)
+ DB_ENV *dbenv;
+ int (***dtabp)__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ size_t *dtabsizep;
+{
+ int ret;
+
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_regop_recover, DB___txn_regop)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __deprecated_recover, DB_txn_child_old)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_ckp_recover, DB___txn_ckp)) != 0)
return (ret);
- if ((ret = __db_add_recovery(dbenv,
- __txn_child_recover, DB_txn_child)) != 0)
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_child_recover, DB___txn_child)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_xa_regop_recover, DB___txn_xa_regop)) != 0)
+ return (ret);
+ if ((ret = __db_add_recovery(dbenv, dtabp, dtabsizep,
+ __txn_recycle_recover, DB___txn_recycle)) != 0)
return (ret);
return (0);
}
-
diff --git a/db/txn/txn_method.c b/db/txn/txn_method.c
index d15a8894c..f9359f455 100644
--- a/db/txn/txn_method.c
+++ b/db/txn/txn_method.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2002
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: txn_method.c,v 11.62 2002/05/09 20:09:35 bostic Exp ";
+static const char revid[] = "$Id: txn_method.c,v 11.66 2003/06/30 17:20:30 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -29,7 +29,8 @@ static const char revid[] = "Id: txn_method.c,v 11.62 2002/05/09 20:09:35 bostic
#include "dbinc_auto/rpc_client_ext.h"
#endif
-static int __txn_set_tx_max __P((DB_ENV *, u_int32_t));
+static int __txn_get_tx_max __P((DB_ENV *, u_int32_t *));
+static int __txn_get_tx_timestamp __P((DB_ENV *, time_t *));
static int __txn_set_tx_timestamp __P((DB_ENV *, time_t *));
/*
@@ -53,8 +54,11 @@ __txn_dbenv_create(dbenv)
#ifdef HAVE_RPC
if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
+ dbenv->get_tx_max = __dbcl_get_tx_max;
dbenv->set_tx_max = __dbcl_set_tx_max;
+ dbenv->get_tx_timestamp = __dbcl_get_tx_timestamp;
dbenv->set_tx_timestamp = __dbcl_set_tx_timestamp;
+
dbenv->txn_checkpoint = __dbcl_txn_checkpoint;
dbenv->txn_recover = __dbcl_txn_recover;
dbenv->txn_stat = __dbcl_txn_stat;
@@ -62,33 +66,53 @@ __txn_dbenv_create(dbenv)
} else
#endif
{
+ dbenv->get_tx_max = __txn_get_tx_max;
dbenv->set_tx_max = __txn_set_tx_max;
+ dbenv->get_tx_timestamp = __txn_get_tx_timestamp;
dbenv->set_tx_timestamp = __txn_set_tx_timestamp;
- dbenv->txn_checkpoint = __txn_checkpoint;
-#ifdef CONFIG_TEST
- dbenv->txn_id_set = __txn_id_set;
-#endif
- dbenv->txn_recover = __txn_recover;
- dbenv->txn_stat = __txn_stat;
- dbenv->txn_begin = __txn_begin;
+
+ dbenv->txn_checkpoint = __txn_checkpoint_pp;
+ dbenv->txn_recover = __txn_recover_pp;
+ dbenv->txn_stat = __txn_stat_pp;
+ dbenv->txn_begin = __txn_begin_pp;
}
}
+static int
+__txn_get_tx_max(dbenv, tx_maxp)
+ DB_ENV *dbenv;
+ u_int32_t *tx_maxp;
+{
+ *tx_maxp = dbenv->tx_max;
+ return (0);
+}
+
/*
* __txn_set_tx_max --
- * Set the size of the transaction table.
+ * DB_ENV->set_tx_max.
+ *
+ * PUBLIC: int __txn_set_tx_max __P((DB_ENV *, u_int32_t));
*/
-static int
+int
__txn_set_tx_max(dbenv, tx_max)
DB_ENV *dbenv;
u_int32_t tx_max;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_tx_max");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_tx_max");
dbenv->tx_max = tx_max;
return (0);
}
+static int
+__txn_get_tx_timestamp(dbenv, timestamp)
+ DB_ENV *dbenv;
+ time_t *timestamp;
+{
+ *timestamp = dbenv->tx_timestamp;
+ return (0);
+}
+
/*
* __txn_set_tx_timestamp --
* Set the transaction recovery timestamp.
@@ -98,7 +122,7 @@ __txn_set_tx_timestamp(dbenv, timestamp)
DB_ENV *dbenv;
time_t *timestamp;
{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_tx_timestamp");
+ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_tx_timestamp");
dbenv->tx_timestamp = *timestamp;
return (0);
diff --git a/db/txn/txn_rec.c b/db/txn/txn_rec.c
index bed20d98e..be4b016b5 100644
--- a/db/txn/txn_rec.c
+++ b/db/txn/txn_rec.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
/*
@@ -36,23 +36,19 @@
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: txn_rec.c,v 11.15 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: txn_rec.c,v 11.54 2003/10/31 23:26:11 ubell Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
#include <sys/types.h>
+#include <string.h>
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "txn.h"
-#include "db_am.h"
-#include "db_dispatch.h"
-#include "log.h"
-#include "common_ext.h"
-
-static int __txn_restore_txn __P((DB_ENV *, DB_LSN *, __txn_xa_regop_args *));
+#include "dbinc/db_page.h"
+#include "dbinc/txn.h"
+#include "dbinc/db_am.h"
#define IS_XA_TXN(R) (R->xid.size != 0)
@@ -72,6 +68,7 @@ __txn_regop_recover(dbenv, dbtp, lsnp, op, info)
db_recops op;
void *info;
{
+ DB_TXNHEAD *headp;
__txn_regop_args *argp;
int ret;
@@ -82,31 +79,66 @@ __txn_regop_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __txn_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- if (argp->opcode != TXN_COMMIT) {
- ret = EINVAL;
- goto err;
- }
+ headp = info;
+ /*
+ * We are only ever called during FORWARD_ROLL or BACKWARD_ROLL.
+ * We check for the former explicitly and the last two clauses
+ * apply to the BACKWARD_ROLL case.
+ */
if (op == DB_TXN_FORWARD_ROLL)
- ret = __db_txnlist_remove(info, argp->txnid->txnid);
- else if (dbenv->tx_timestamp == 0 ||
- argp->timestamp <= (int32_t)dbenv->tx_timestamp)
/*
- * We know this is the backward roll case because we
- * are never called during ABORT or OPENFILES.
+ * If this was a 2-phase-commit transaction, then it
+ * might already have been removed from the list, and
+ * that's OK. Ignore the return code from remove.
*/
- ret = __db_txnlist_add(dbenv, info, argp->txnid->txnid, 0);
- else
+ (void)__db_txnlist_remove(dbenv, info, argp->txnid->txnid);
+ else if ((dbenv->tx_timestamp != 0 &&
+ argp->timestamp > (int32_t)dbenv->tx_timestamp) ||
+ (!IS_ZERO_LSN(headp->trunc_lsn) &&
+ log_compare(&headp->trunc_lsn, lsnp) < 0)) {
/*
- * This is commit record, but we failed the timestamp check
- * so we should treat it as an abort and add it to the list
- * as an aborted record.
+ * We failed either the timestamp check or the trunc_lsn check,
+ * so we treat this as an abort even if it was a commit record.
*/
- ret = __db_txnlist_add(dbenv, info, argp->txnid->txnid, 1);
+ ret = __db_txnlist_update(dbenv,
+ info, argp->txnid->txnid, TXN_ABORT, NULL);
+
+ if (ret == TXN_IGNORE)
+ ret = TXN_OK;
+ else if (ret == TXN_NOTFOUND)
+ ret = __db_txnlist_add(dbenv,
+ info, argp->txnid->txnid, TXN_IGNORE, NULL);
+ else if (ret != TXN_OK)
+ goto err;
+ /* else ret = 0; Not necessary because TXN_OK == 0 */
+ } else {
+ /* This is a normal commit; mark it appropriately. */
+ ret = __db_txnlist_update(dbenv,
+ info, argp->txnid->txnid, argp->opcode, lsnp);
+
+ if (ret == TXN_IGNORE)
+ ret = TXN_OK;
+ else if (ret == TXN_NOTFOUND)
+ ret = __db_txnlist_add(dbenv,
+ info, argp->txnid->txnid,
+ argp->opcode == TXN_ABORT ?
+ TXN_IGNORE : argp->opcode, lsnp);
+ else if (ret != TXN_OK)
+ goto err;
+ /* else ret = 0; Not necessary because TXN_OK == 0 */
+ }
if (ret == 0)
*lsnp = argp->prev_lsn;
-err: __os_free(argp, 0);
+
+ if (0) {
+err: __db_err(dbenv,
+ "txnid %lx commit record found, already on commit list",
+ (u_long)argp->txnid->txnid);
+ ret = EINVAL;
+ }
+ __os_free(dbenv, argp);
return (ret);
}
@@ -135,63 +167,65 @@ __txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info)
if ((ret = __txn_xa_regop_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- if (argp->opcode != TXN_PREPARE) {
+ if (argp->opcode != TXN_PREPARE && argp->opcode != TXN_ABORT) {
ret = EINVAL;
goto err;
}
- ret = __db_txnlist_find(info, argp->txnid->txnid);
+ ret = __db_txnlist_find(dbenv, info, argp->txnid->txnid);
/*
* If we are rolling forward, then an aborted prepare
- * indicates that this is the last record we'll see for
- * this transaction ID and we should remove it from the
+ * indicates that this may the last record we'll see for
+ * this transaction ID, so we should remove it from the
* list.
*/
- if (op == DB_TXN_FORWARD_ROLL && ret == 1)
- ret = __db_txnlist_remove(info, argp->txnid->txnid);
- else if (op == DB_TXN_BACKWARD_ROLL && ret != 0) {
+ if (op == DB_TXN_FORWARD_ROLL) {
+ if ((ret = __db_txnlist_remove(dbenv,
+ info, argp->txnid->txnid)) != TXN_OK)
+ goto txn_err;
+ } else if (op == DB_TXN_BACKWARD_ROLL && ret == TXN_PREPARE) {
/*
- * On the backward pass, we have three possibilities:
+ * On the backward pass, we have four possibilities:
* 1. The transaction is already committed, no-op.
- * 2. The transaction is not committed and we are XA, treat
- * like commited and roll forward so that can be committed
- * or aborted late.
- * 3. The transaction is not committed and we are not XA
- * mark the transaction as aborted.
- *
- * Cases 2 and 3 are handled here.
+ * 2. The transaction is already aborted, no-op.
+ * 3. The prepare failed and was aborted, mark as abort.
+ * 4. The transaction is neither committed nor aborted.
+ * Treat this like a commit and roll forward so that
+ * the transaction can be resurrected in the region.
+ * We handle cases 3 and 4 here; cases 1 and 2
+ * are the final clause below.
*/
-
+ if (argp->opcode == TXN_ABORT) {
+ if ((ret = __db_txnlist_update(dbenv,
+ info, argp->txnid->txnid,
+ TXN_ABORT, NULL)) != TXN_PREPARE)
+ goto txn_err;
+ ret = 0;
+ }
/*
- * Should never have seen this transaction unless it was
- * commited.
+ * This is prepared, but not yet committed transaction. We
+ * need to add it to the transaction list, so that it gets
+ * rolled forward. We also have to add it to the region's
+ * internal state so it can be properly aborted or committed
+ * after recovery (see txn_recover).
*/
- DB_ASSERT(ret == DB_NOTFOUND);
-
- if (IS_XA_TXN(argp)) {
- /*
- * This is an XA prepared, but not yet committed
- * transaction. We need to add it to the
- * transaction list, so that it gets rolled
- * forward. We also have to add it to the region's
- * internal state so it can be properly aborted
- * or recovered.
- */
- if ((ret = __db_txnlist_add(dbenv,
- info, argp->txnid->txnid, 0)) == 0)
- ret = __txn_restore_txn(dbenv, lsnp, argp);
- } else
- ret = __db_txnlist_add(dbenv,
- info, argp->txnid->txnid, 1);
+ else if ((ret = __db_txnlist_remove(dbenv,
+ info, argp->txnid->txnid)) != TXN_OK) {
+txn_err: __db_err(dbenv,
+ "Transaction not in list %x", argp->txnid->txnid);
+ ret = DB_NOTFOUND;
+ } else if ((ret = __db_txnlist_add(dbenv,
+ info, argp->txnid->txnid, TXN_COMMIT, lsnp)) == 0)
+ ret = __txn_restore_txn(dbenv, lsnp, argp);
} else
ret = 0;
if (ret == 0)
*lsnp = argp->prev_lsn;
-err: __os_free(argp, 0);
+err: __os_free(dbenv, argp);
return (ret);
}
@@ -208,29 +242,32 @@ __txn_ckp_recover(dbenv, dbtp, lsnp, op, info)
db_recops op;
void *info;
{
+ DB_REP *db_rep;
+ REP *rep;
__txn_ckp_args *argp;
int ret;
#ifdef DEBUG_RECOVER
__txn_ckp_print(dbenv, dbtp, lsnp, op, info);
#endif
- COMPQUIET(dbenv, NULL);
-
if ((ret = __txn_ckp_read(dbenv, dbtp->data, &argp)) != 0)
return (ret);
- /*
- * Check for 'restart' checkpoint record. This occurs when the
- * checkpoint lsn is equal to the lsn of the checkpoint record
- * and means that we could set the transaction ID back to 1, so
- * that we don't exhaust the transaction ID name space.
- */
- if (argp->ckp_lsn.file == lsnp->file &&
- argp->ckp_lsn.offset == lsnp->offset)
- __db_txnlist_gen(info, DB_REDO(op) ? -1 : 1);
+ if (op == DB_TXN_BACKWARD_ROLL)
+ __db_txnlist_ckp(dbenv, info, lsnp);
+
+ if (op == DB_TXN_FORWARD_ROLL) {
+ /* Record the max generation number that we've seen. */
+ if (REP_ON(dbenv)) {
+ db_rep = dbenv->rep_handle;
+ rep = db_rep->region;
+ if (argp->rep_gen > rep->recover_gen)
+ rep->recover_gen = argp->rep_gen;
+ }
+ }
*lsnp = argp->last_ckp;
- __os_free(argp, 0);
+ __os_free(dbenv, argp);
return (DB_TXN_CKP);
}
@@ -250,7 +287,7 @@ __txn_child_recover(dbenv, dbtp, lsnp, op, info)
void *info;
{
__txn_child_args *argp;
- int ret;
+ int c_stat, p_stat, ret;
#ifdef DEBUG_RECOVER
(void)__txn_child_print(dbenv, dbtp, lsnp, op, info);
@@ -272,17 +309,86 @@ __txn_child_recover(dbenv, dbtp, lsnp, op, info)
ret = __db_txnlist_lsnadd(dbenv,
info, &argp->c_lsn, TXNLIST_NEW);
} else if (op == DB_TXN_BACKWARD_ROLL) {
- if (__db_txnlist_find(info, argp->txnid->txnid) == 0)
- ret = __db_txnlist_add(dbenv, info, argp->child, 0);
- else
- ret = __db_txnlist_add(dbenv, info, argp->child, 1);
- } else
- ret = __db_txnlist_remove(info, argp->child);
+ /* Child might exist -- look for it. */
+ c_stat = __db_txnlist_find(dbenv, info, argp->child);
+ p_stat = __db_txnlist_find(dbenv, info, argp->txnid->txnid);
+
+ if (c_stat == TXN_EXPECTED) {
+ /*
+ * The open after this create succeeded. If the
+ * parent succeeded, we don't want to redo; if the
+ * parent aborted, we do want to undo.
+ */
+ switch (p_stat) {
+ case TXN_COMMIT:
+ case TXN_IGNORE:
+ c_stat = TXN_IGNORE;
+ break;
+ default:
+ c_stat = TXN_ABORT;
+ }
+ ret = __db_txnlist_update(dbenv,
+ info, argp->child, c_stat, NULL);
+ if (ret > 0)
+ ret = 0;
+ } else if (c_stat == TXN_UNEXPECTED) {
+ /*
+ * The open after this create failed. If the parent
+ * is rolling forward, we need to roll forward. If
+ * the parent failed, then we do not want to abort
+ * (because the file may not be the one in which we
+ * are interested).
+ */
+ ret = __db_txnlist_update(dbenv, info, argp->child,
+ p_stat == TXN_COMMIT ? TXN_COMMIT : TXN_IGNORE,
+ NULL);
+ if (ret > 0)
+ ret = 0;
+ } else if (c_stat != TXN_IGNORE) {
+ switch (p_stat) {
+ case TXN_COMMIT:
+ c_stat = TXN_COMMIT;
+ break;
+ case TXN_IGNORE:
+ c_stat = TXN_IGNORE;
+ break;
+ default:
+ c_stat = TXN_ABORT;
+ }
+
+ ret = __db_txnlist_add(dbenv,
+ info, argp->child, c_stat, NULL);
+ }
+ } else if (op == DB_TXN_OPENFILES) {
+ /*
+ * If we have a partial subtransaction, then the whole
+ * transaction should be ignored.
+ */
+ c_stat = __db_txnlist_find(dbenv, info, argp->child);
+ if (c_stat == TXN_NOTFOUND) {
+ p_stat =
+ __db_txnlist_find(dbenv, info, argp->txnid->txnid);
+ if (p_stat == TXN_NOTFOUND)
+ ret = __db_txnlist_add(dbenv, info,
+ argp->txnid->txnid, TXN_IGNORE, NULL);
+ else
+ ret = __db_txnlist_update(dbenv, info,
+ argp->txnid->txnid, TXN_IGNORE, NULL);
+ }
+ } else if (DB_REDO(op)) {
+ /* Forward Roll */
+ if ((ret =
+ __db_txnlist_remove(dbenv, info, argp->child)) != TXN_OK) {
+ __db_err(dbenv,
+ "Transaction not in list %x", argp->child);
+ ret = DB_NOTFOUND;
+ }
+ }
if (ret == 0)
*lsnp = argp->prev_lsn;
- __os_free(argp, 0);
+ __os_free(dbenv, argp);
return (ret);
}
@@ -291,13 +397,16 @@ __txn_child_recover(dbenv, dbtp, lsnp, op, info)
* __txn_restore_txn --
* Using only during XA recovery. If we find any transactions that are
* prepared, but not yet committed, then we need to restore the transaction's
- * state into the shared region, because the TM is going to issue a txn_abort
- * or txn_commit and we need to respond correctly.
+ * state into the shared region, because the TM is going to issue an abort
+ * or commit and we need to respond correctly.
*
* lsnp is the LSN of the returned LSN
* argp is the perpare record (in an appropriate structure)
+ *
+ * PUBLIC: int __txn_restore_txn __P((DB_ENV *,
+ * PUBLIC: DB_LSN *, __txn_xa_regop_args *));
*/
-static int
+int
__txn_restore_txn(dbenv, lsnp, argp)
DB_ENV *dbenv;
DB_LSN *lsnp;
@@ -309,7 +418,7 @@ __txn_restore_txn(dbenv, lsnp, argp)
int ret;
if (argp->xid.size == 0)
- return (0);
+ return (0);
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
@@ -317,8 +426,10 @@ __txn_restore_txn(dbenv, lsnp, argp)
/* Allocate a new transaction detail structure. */
if ((ret =
- __db_shalloc(mgr->reginfo.addr, sizeof(TXN_DETAIL), 0, &td)) != 0)
+ __db_shalloc(mgr->reginfo.addr, sizeof(TXN_DETAIL), 0, &td)) != 0) {
+ R_UNLOCK(dbenv, &mgr->reginfo);
return (ret);
+ }
/* Place transaction on active transaction list. */
SH_TAILQ_INSERT_HEAD(&region->active_txn, td, links, __txn_detail);
@@ -333,7 +444,48 @@ __txn_restore_txn(dbenv, lsnp, argp)
td->bqual = argp->bqual;
td->gtrid = argp->gtrid;
td->format = argp->formatID;
+ td->flags = 0;
+ F_SET(td, TXN_DTL_RESTORED);
+ region->stat.st_nrestores++;
+ region->stat.st_nactive++;
+ if (region->stat.st_nactive > region->stat.st_maxnactive)
+ region->stat.st_maxnactive = region->stat.st_nactive;
R_UNLOCK(dbenv, &mgr->reginfo);
return (0);
}
+
+/*
+ * __txn_recycle_recover --
+ * Recovery function for recycle.
+ *
+ * PUBLIC: int __txn_recycle_recover
+ * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
+ */
+int
+__txn_recycle_recover(dbenv, dbtp, lsnp, op, info)
+ DB_ENV *dbenv;
+ DBT *dbtp;
+ DB_LSN *lsnp;
+ db_recops op;
+ void *info;
+{
+ __txn_recycle_args *argp;
+ int ret;
+
+#ifdef DEBUG_RECOVER
+ (void)__txn_child_print(dbenv, dbtp, lsnp, op, info);
+#endif
+ if ((ret = __txn_recycle_read(dbenv, dbtp->data, &argp)) != 0)
+ return (ret);
+
+ COMPQUIET(lsnp, NULL);
+
+ if ((ret = __db_txnlist_gen(dbenv, info,
+ DB_UNDO(op) ? -1 : 1, argp->min, argp->max)) != 0)
+ return (ret);
+
+ __os_free(dbenv, argp);
+
+ return (0);
+}
diff --git a/db/txn/txn_recover.c b/db/txn/txn_recover.c
index 8f02264c0..753a84dd3 100644
--- a/db/txn/txn_recover.c
+++ b/db/txn/txn_recover.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: txn_recover.c,v 1.12 2001/04/27 15:48:16 bostic Exp ";
+static const char revid[] = "$Id: txn_recover.c,v 1.43 2003/09/16 20:50:17 sue Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,27 +17,22 @@ static const char revid[] = "Id: txn_recover.c,v 1.12 2001/04/27 15:48:16 bostic
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "txn.h"
-#include "db_page.h"
-#include "log.h"
-#include "db_auto.h"
-#include "crdel_auto.h"
-#include "db_ext.h"
-
-#ifdef HAVE_RPC
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/txn.h"
+#include "dbinc/db_page.h"
+#include "dbinc/db_dispatch.h"
+#include "dbinc/log.h"
+#include "dbinc_auto/db_auto.h"
+#include "dbinc_auto/crdel_auto.h"
+#include "dbinc_auto/db_ext.h"
/*
* __txn_continue
* Fill in the fields of the local transaction structure given
* the detail transaction structure.
- * XXX I'm not sure that we work correctly with nested txns.
+ *
+ * XXX
+ * I'm not sure that we work correctly with nested txns.
*
* PUBLIC: void __txn_continue __P((DB_ENV *, DB_TXN *, TXN_DETAIL *, size_t));
*/
@@ -52,8 +47,17 @@ __txn_continue(env, txnp, td, off)
txnp->parent = NULL;
txnp->last_lsn = td->last_lsn;
txnp->txnid = td->txnid;
- txnp->off = off;
+ txnp->off = (roff_t)off;
+
+ txnp->abort = __txn_abort;
+ txnp->commit = __txn_commit;
+ txnp->discard = __txn_discard;
+ txnp->id = __txn_id;
+ txnp->prepare = __txn_prepare;
+
txnp->flags = 0;
+ if (F_ISSET(td, TXN_DTL_RESTORED))
+ F_SET(txnp, TXN_RESTORED);
}
/*
@@ -97,26 +101,60 @@ __txn_map_gid(dbenv, gid, tdp, offp)
}
/*
- * txn_recover --
- * Public interface to retrieve the list of prepared, but not yet
- * commited transactions. See __txn_get_prepared for details. This
- * function and __db_xa_recover both wrap that one.
+ * __txn_recover_pp --
+ * DB_ENV->txn_recover pre/post processing.
*
- * EXTERN: int txn_recover
- * EXTERN: __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
+ * PUBLIC: int __txn_recover_pp
+ * PUBLIC: __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
*/
int
-txn_recover(dbenv, preplist, count, retp, flags)
+__txn_recover_pp(dbenv, preplist, count, retp, flags)
DB_ENV *dbenv;
DB_PREPLIST *preplist;
long count, *retp;
u_int32_t flags;
{
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_txn_recover(dbenv,
- preplist, count, retp, flags));
-#endif
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(
+ dbenv, dbenv->tx_handle, "txn_recover", DB_INIT_TXN);
+
+ if (F_ISSET((DB_TXNREGION *)
+ ((DB_TXNMGR *)dbenv->tx_handle)->reginfo.primary,
+ TXN_IN_RECOVERY)) {
+ __db_err(dbenv, "operation not permitted while in recovery");
+ return (EINVAL);
+ }
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __txn_recover(dbenv, preplist, count, retp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __txn_recover --
+ * DB_ENV->txn_recover.
+ *
+ * PUBLIC: int __txn_recover
+ * PUBLIC: __P((DB_ENV *, DB_PREPLIST *, long, long *, u_int32_t));
+ */
+int
+__txn_recover(dbenv, preplist, count, retp, flags)
+ DB_ENV *dbenv;
+ DB_PREPLIST *preplist;
+ long count, *retp;
+ u_int32_t flags;
+{
+ /*
+ * Public API to retrieve the list of prepared, but not yet committed
+ * transactions. See __txn_get_prepared for details. This function
+ * and __db_xa_recover both wrap that one.
+ */
return (__txn_get_prepared(dbenv, NULL, preplist, count, retp, flags));
}
@@ -142,24 +180,27 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
long *retp;
u_int32_t flags;
{
- XID *xidp;
+ DBT data;
+ DB_LOGC *logc;
+ DB_LSN min, open_lsn;
DB_PREPLIST *prepp;
- TXN_DETAIL *td;
DB_TXNMGR *mgr;
DB_TXNREGION *tmr;
- DB_LSN min, open_lsn;
- DBT data;
+ TXN_DETAIL *td;
+ XID *xidp;
__txn_ckp_args *ckp_args;
- int nrestores, open_files, ret;
+ long i;
+ int nrestores, open_files, ret, t_ret;
void *txninfo;
- ret = 0;
*retp = 0;
- xidp = xids;
+
+ logc = NULL;
+ MAX_LSN(min);
prepp = txns;
+ xidp = xids;
+ nrestores = ret = 0;
open_files = 1;
- nrestores = 0;
- MAX_LSN(min);
/*
* If we are starting a scan, then we traverse the active transaction
@@ -184,13 +225,13 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
for (td = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
td != NULL;
td = SH_TAILQ_NEXT(td, links, __txn_detail)) {
- if (F_ISSET(td, TXN_RESTORED))
+ if (F_ISSET(td, TXN_DTL_RESTORED))
nrestores++;
- if (F_ISSET(td, TXN_COLLECTED))
+ if (F_ISSET(td, TXN_DTL_COLLECTED))
open_files = 0;
- F_CLR(td, TXN_COLLECTED);
+ F_CLR(td, TXN_DTL_COLLECTED);
}
-
+ mgr->n_discards = 0;
} else
open_files = 0;
@@ -198,7 +239,8 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
for (td = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
td != NULL && *retp < count;
td = SH_TAILQ_NEXT(td, links, __txn_detail)) {
- if (td->status != TXN_PREPARED || F_ISSET(td, TXN_COLLECTED))
+ if (td->status != TXN_PREPARED ||
+ F_ISSET(td, TXN_DTL_COLLECTED))
continue;
if (xids != NULL) {
@@ -211,10 +253,13 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
if (txns != NULL) {
if ((ret = __os_calloc(dbenv,
- 1, sizeof(DB_TXN), &prepp->txn)) != 0)
- break;
+ 1, sizeof(DB_TXN), &prepp->txn)) != 0) {
+ R_UNLOCK(dbenv, &mgr->reginfo);
+ goto err;
+ }
__txn_continue(dbenv,
prepp->txn, td, R_OFFSET(&mgr->reginfo, td));
+ F_SET(prepp->txn, TXN_MALLOC);
memcpy(prepp->gid, td->xid, sizeof(td->xid));
prepp++;
}
@@ -223,61 +268,74 @@ __txn_get_prepared(dbenv, xids, txns, count, retp, flags)
min = td->begin_lsn;
(*retp)++;
- F_SET(td, TXN_COLLECTED);
+ F_SET(td, TXN_DTL_COLLECTED);
}
R_UNLOCK(dbenv, &mgr->reginfo);
- if (open_files && nrestores &&
- ret == 0 && *retp != 0 && !IS_MAX_LSN(min)) {
+ /*
+ * Now link all the transactions into the transaction manager's list.
+ */
+ if (txns != NULL) {
+ MUTEX_THREAD_LOCK(dbenv, mgr->mutexp);
+ for (i = 0; i < *retp; i++)
+ TAILQ_INSERT_TAIL(&mgr->txn_chain, txns[i].txn, links);
+ MUTEX_THREAD_UNLOCK(dbenv, mgr->mutexp);
+ }
+
+ if (open_files && nrestores && *retp != 0 && !IS_MAX_LSN(min)) {
/*
* Figure out the last checkpoint before the smallest
* start_lsn in the region.
*/
F_SET((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ goto err;
+
memset(&data, 0, sizeof(data));
- for (ret = log_get(dbenv, &open_lsn, &data, DB_CHECKPOINT);
- ret == 0 && log_compare(&min, &open_lsn) < 0;
- ret = log_get(dbenv, &open_lsn, &data, DB_SET)) {
-
- /* Format the log record. */
- if ((ret = __txn_ckp_read(dbenv,
- data.data, &ckp_args)) != 0) {
- __db_err(dbenv,
- "Invalid checkpoint record at [%ld][%ld]\n",
- (u_long)open_lsn.file,
- (u_long)open_lsn.offset);
- goto out;
+ if ((ret = __txn_getckp(dbenv, &open_lsn)) == 0)
+ while (!IS_ZERO_LSN(open_lsn) && (ret =
+ __log_c_get(logc, &open_lsn, &data, DB_SET)) == 0 &&
+ log_compare(&min, &open_lsn) < 0) {
+ /* Format the log record. */
+ if ((ret = __txn_ckp_read(dbenv,
+ data.data, &ckp_args)) != 0) {
+ __db_err(dbenv,
+ "Invalid checkpoint record at [%lu][%lu]",
+ (u_long)open_lsn.file,
+ (u_long)open_lsn.offset);
+ goto err;
+ }
+ open_lsn = ckp_args->last_ckp;
+ __os_free(dbenv, ckp_args);
}
- open_lsn = ckp_args->last_ckp;
- __os_free(dbenv, ckp_args, sizeof(*ckp_args));
- }
/*
- * There are three ways we got here.
- * We got a DB_NOTFOUND -- we need to read the first log record.
- * We found a checkpoint before min. We're done.
- * We found a checkpoint after min who's last_ckp is 0. We
+ * There are three ways by which we may have gotten here.
+ * - We got a DB_NOTFOUND -- we need to read the first
+ * log record.
+ * - We found a checkpoint before min. We're done.
+ * - We found a checkpoint after min who's last_ckp is 0. We
* need to start at the beginning of the log.
*/
-
- if ((ret == DB_NOTFOUND || IS_ZERO_LSN(open_lsn)) &&
- (ret = log_get(dbenv, &open_lsn, &data, DB_FIRST)) != 0) {
- __db_err(dbenv, "No log records.");
- goto out;
+ if ((ret == DB_NOTFOUND || IS_ZERO_LSN(open_lsn)) && (ret =
+ __log_c_get(logc, &open_lsn, &data, DB_FIRST)) != 0) {
+ __db_err(dbenv, "No log records");
+ goto err;
}
- if ((ret = __db_txnlist_init(dbenv, &txninfo)) != 0)
- goto out;
- ret = __env_openfiles(dbenv,
+ if ((ret = __db_txnlist_init(dbenv, 0, 0, NULL, &txninfo)) != 0)
+ goto err;
+ ret = __env_openfiles(dbenv, logc,
txninfo, &data, &open_lsn, NULL, 0, 0);
if (txninfo != NULL)
__db_txnlist_end(dbenv, txninfo);
- F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
}
- if (0) {
-out: F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
- }
- return (ret);
-}
+err: F_CLR((DB_LOG *)dbenv->lg_handle, DBLOG_RECOVER);
+ if (logc != NULL && (t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+
+ return (ret);
+}
diff --git a/db/txn/txn_region.c b/db/txn/txn_region.c
index 77ce3d08f..16b26a469 100644
--- a/db/txn/txn_region.c
+++ b/db/txn/txn_region.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: txn_region.c,v 11.36 2001/01/11 18:19:55 bostic Exp $";
+static const char revid[] = "$Id: txn_region.c,v 11.79 2003/07/23 13:13:12 mjc Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -28,98 +28,13 @@ static const char revid[] = "$Id: txn_region.c,v 11.36 2001/01/11 18:19:55 bosti
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "db_page.h"
-#include "log.h" /* for __log_lastckp */
-#include "txn.h"
-#include "db_am.h"
-
-#ifdef HAVE_RPC
-#include "gen_client_ext.h"
-#include "rpc_client_ext.h"
-#endif
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
+static int __txn_findlastckp __P((DB_ENV *, DB_LSN *));
static int __txn_init __P((DB_ENV *, DB_TXNMGR *));
-static int __txn_set_tx_max __P((DB_ENV *, u_int32_t));
-static int __txn_set_tx_recover __P((DB_ENV *,
- int (*)(DB_ENV *, DBT *, DB_LSN *, db_recops)));
-static int __txn_set_tx_timestamp __P((DB_ENV *, time_t *));
-
-/*
- * __txn_dbenv_create --
- * Transaction specific initialization of the DB_ENV structure.
- *
- * PUBLIC: void __txn_dbenv_create __P((DB_ENV *));
- */
-void
-__txn_dbenv_create(dbenv)
- DB_ENV *dbenv;
-{
- dbenv->tx_max = DEF_MAX_TXNS;
-
- dbenv->set_tx_max = __txn_set_tx_max;
- dbenv->set_tx_recover = __txn_set_tx_recover;
- dbenv->set_tx_timestamp = __txn_set_tx_timestamp;
-
-#ifdef HAVE_RPC
- /*
- * If we have a client, overwrite what we just setup to point to
- * client functions.
- */
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT)) {
- dbenv->set_tx_max = __dbcl_set_tx_max;
- dbenv->set_tx_recover = __dbcl_set_tx_recover;
- dbenv->set_tx_timestamp = __dbcl_set_tx_timestamp;
- }
-#endif
-}
-
-/*
- * __txn_set_tx_max --
- * Set the size of the transaction table.
- */
-static int
-__txn_set_tx_max(dbenv, tx_max)
- DB_ENV *dbenv;
- u_int32_t tx_max;
-{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_tx_max");
-
- dbenv->tx_max = tx_max;
- return (0);
-}
-
-/*
- * __txn_set_tx_recover --
- * Set the transaction abort recover function.
- */
-static int
-__txn_set_tx_recover(dbenv, tx_recover)
- DB_ENV *dbenv;
- int (*tx_recover) __P((DB_ENV *, DBT *, DB_LSN *, db_recops));
-{
- dbenv->tx_recover = tx_recover;
- return (0);
-}
-
-/*
- * __txn_set_tx_timestamp --
- * Set the transaction recovery timestamp.
- */
-static int
-__txn_set_tx_timestamp(dbenv, timestamp)
- DB_ENV *dbenv;
- time_t *timestamp;
-{
- ENV_ILLEGAL_AFTER_OPEN(dbenv, "set_tx_timestamp");
-
- dbenv->tx_timestamp = *timestamp;
- return (0);
-}
+static size_t __txn_region_size __P((DB_ENV *));
/*
* __txn_open --
@@ -148,7 +63,7 @@ __txn_open(dbenv)
if (F_ISSET(dbenv, DB_ENV_CREATE))
F_SET(&tmgrp->reginfo, REGION_CREATE_OK);
if ((ret = __db_r_attach(dbenv,
- &tmgrp->reginfo, TXN_REGION_SIZE(dbenv->tx_max))) != 0)
+ &tmgrp->reginfo, __txn_region_size(dbenv))) != 0)
goto err;
/* If we created the region, initialize it. */
@@ -161,14 +76,10 @@ __txn_open(dbenv)
R_ADDR(&tmgrp->reginfo, tmgrp->reginfo.rp->primary);
/* Acquire a mutex to protect the active TXN list. */
- if (F_ISSET(dbenv, DB_ENV_THREAD)) {
- if ((ret = __db_mutex_alloc(
- dbenv, &tmgrp->reginfo, &tmgrp->mutexp)) != 0)
- goto err;
- if ((ret = __db_mutex_init(
- dbenv, tmgrp->mutexp, 0, MUTEX_THREAD)) != 0)
- goto err;
- }
+ if (F_ISSET(dbenv, DB_ENV_THREAD) &&
+ (ret = __db_mutex_setup(dbenv, &tmgrp->reginfo, &tmgrp->mutexp,
+ MUTEX_ALLOC | MUTEX_NO_RLOCK | MUTEX_THREAD)) != 0)
+ goto err;
R_UNLOCK(dbenv, &tmgrp->reginfo);
@@ -184,7 +95,7 @@ err: if (tmgrp->reginfo.addr != NULL) {
}
if (tmgrp->mutexp != NULL)
__db_mutex_free(dbenv, &tmgrp->reginfo, tmgrp->mutexp);
- __os_free(tmgrp, sizeof(*tmgrp));
+ __os_free(dbenv, tmgrp);
return (ret);
}
@@ -200,15 +111,29 @@ __txn_init(dbenv, tmgrp)
DB_LSN last_ckp;
DB_TXNREGION *region;
int ret;
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ u_int8_t *addr;
+#endif
- ZERO_LSN(last_ckp);
/*
- * If possible, fetch the last checkpoint LSN from the log system
- * so that the backwards chain of checkpoints is unbroken when
- * the environment is removed and recreated. [#2865]
+ * Find the last checkpoint in the log.
*/
- if (LOGGING_ON(dbenv) && (ret = __log_lastckp(dbenv, &last_ckp)) != 0)
- return (ret);
+ ZERO_LSN(last_ckp);
+ if (LOGGING_ON(dbenv)) {
+ /*
+ * The log system has already walked through the last
+ * file. Get the LSN of a checkpoint it may have found.
+ */
+ __log_get_cached_ckp_lsn(dbenv, &last_ckp);
+
+ /*
+ * If that didn't work, look backwards from the beginning of
+ * the last log file until we find the last checkpoint.
+ */
+ if (IS_ZERO_LSN(last_ckp) &&
+ (ret = __txn_findlastckp(dbenv, &last_ckp)) != 0)
+ return (ret);
+ }
if ((ret = __db_shalloc(tmgrp->reginfo.addr,
sizeof(DB_TXNREGION), 0, &tmgrp->reginfo.primary)) != 0) {
@@ -223,41 +148,96 @@ __txn_init(dbenv, tmgrp)
region->maxtxns = dbenv->tx_max;
region->last_txnid = TXN_MINIMUM;
- ZERO_LSN(region->pending_ckp);
+ region->cur_maxid = TXN_MAXIMUM;
region->last_ckp = last_ckp;
region->time_ckp = time(NULL);
- /*
- * XXX
- * If we ever do more types of locking and logging, this changes.
- */
- region->logtype = 0;
- region->locktype = 0;
- region->naborts = 0;
- region->ncommits = 0;
- region->nbegins = 0;
- region->nactive = 0;
- region->maxnactive = 0;
+ memset(&region->stat, 0, sizeof(region->stat));
+ region->stat.st_maxtxns = region->maxtxns;
SH_TAILQ_INIT(&region->active_txn);
-
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ /* Allocate room for the txn maintenance info and initialize it. */
+ if ((ret = __db_shalloc(tmgrp->reginfo.addr,
+ sizeof(REGMAINT) + TXN_MAINT_SIZE, 0, &addr)) != 0) {
+ __db_err(dbenv,
+ "Unable to allocate memory for mutex maintenance");
+ return (ret);
+ }
+ __db_maintinit(&tmgrp->reginfo, addr, TXN_MAINT_SIZE);
+ region->maint_off = R_OFFSET(&tmgrp->reginfo, addr);
+#endif
return (0);
}
/*
- * __txn_close --
- * Close a transaction region.
+ * __txn_findlastckp --
+ * Find the last checkpoint in the log, walking backwards from the
+ * beginning of the last log file. (The log system looked through
+ * the last log file when it started up.)
+ */
+static int
+__txn_findlastckp(dbenv, lsnp)
+ DB_ENV *dbenv;
+ DB_LSN *lsnp;
+{
+ DB_LOGC *logc;
+ DB_LSN lsn;
+ DBT dbt;
+ int ret, t_ret;
+ u_int32_t rectype;
+
+ if ((ret = __log_cursor(dbenv, &logc)) != 0)
+ return (ret);
+
+ /* Get the last LSN. */
+ memset(&dbt, 0, sizeof(dbt));
+ if ((ret = __log_c_get(logc, &lsn, &dbt, DB_LAST)) != 0)
+ goto err;
+
+ /*
+ * Twiddle the last LSN so it points to the beginning of the last
+ * file; we know there's no checkpoint after that, since the log
+ * system already looked there.
+ */
+ lsn.offset = 0;
+
+ /* Read backwards, looking for checkpoints. */
+ while ((ret = __log_c_get(logc, &lsn, &dbt, DB_PREV)) == 0) {
+ if (dbt.size < sizeof(u_int32_t))
+ continue;
+ memcpy(&rectype, dbt.data, sizeof(u_int32_t));
+ if (rectype == DB___txn_ckp) {
+ *lsnp = lsn;
+ break;
+ }
+ }
+
+err: if ((t_ret = __log_c_close(logc)) != 0 && ret == 0)
+ ret = t_ret;
+ /*
+ * Not finding a checkpoint is not an error; there may not exist
+ * one in the log.
+ */
+ return ((ret == 0 || ret == DB_NOTFOUND) ? 0 : ret);
+}
+
+/*
+ * __txn_dbenv_refresh --
+ * Clean up after the transaction system on a close or failed open.
+ * Called only from __dbenv_refresh. (Formerly called __txn_close.)
*
- * PUBLIC: int __txn_close __P((DB_ENV *));
+ * PUBLIC: int __txn_dbenv_refresh __P((DB_ENV *));
*/
int
-__txn_close(dbenv)
+__txn_dbenv_refresh(dbenv)
DB_ENV *dbenv;
{
DB_TXN *txnp;
DB_TXNMGR *tmgrp;
+ TXN_DETAIL *td;
u_int32_t txnid;
- int ret, t_ret;
+ int aborted, ret, t_ret;
ret = 0;
tmgrp = dbenv->tx_handle;
@@ -266,30 +246,48 @@ __txn_close(dbenv)
* This function can only be called once per process (i.e., not
* once per thread), so no synchronization is required.
*
- * The caller is doing something wrong if close is called with
- * active transactions. Try and abort any active transactions,
- * but it's quite likely the aborts will fail because recovery
- * won't find open files. If we can't abort any transaction,
- * panic, we have to run recovery to get back to a known state.
+ * The caller is probably doing something wrong if close is called with
+ * active transactions. Try and abort any active transactions that are
+ * not prepared, but it's quite likely the aborts will fail because
+ * recovery won't find open files. If we can't abort any of the
+ * unprepared transaction, panic, we have to run recovery to get back
+ * to a known state.
*/
+ aborted = 0;
if (TAILQ_FIRST(&tmgrp->txn_chain) != NULL) {
- __db_err(dbenv,
- "Error: closing the transaction region with active transactions\n");
- ret = EINVAL;
while ((txnp = TAILQ_FIRST(&tmgrp->txn_chain)) != NULL) {
+ /* Prepared transactions are OK. */
+ td = (TXN_DETAIL *)R_ADDR(&tmgrp->reginfo, txnp->off);
txnid = txnp->txnid;
- if ((t_ret = txn_abort(txnp)) != 0) {
+ if (td->status == TXN_PREPARED) {
+ if ((ret = __txn_discard(txnp, 0)) != 0) {
+ __db_err(dbenv,
+ "Unable to discard txn 0x%x: %s",
+ txnid, db_strerror(ret));
+ break;
+ }
+ continue;
+ }
+ aborted = 1;
+ if ((t_ret = __txn_abort(txnp)) != 0) {
__db_err(dbenv,
- "Unable to abort transaction 0x%x: %s\n",
+ "Unable to abort transaction 0x%x: %s",
txnid, db_strerror(t_ret));
ret = __db_panic(dbenv, t_ret);
+ break;
}
}
+ if (aborted) {
+ __db_err(dbenv,
+ "Error: closing the transaction region with active transactions");
+ if (ret == 0)
+ ret = EINVAL;
+ }
}
/* Flush the log. */
if (LOGGING_ON(dbenv) &&
- (t_ret = log_flush(dbenv, NULL)) != 0 && ret == 0)
+ (t_ret = __log_flush(dbenv, NULL)) != 0 && ret == 0)
ret = t_ret;
/* Discard the per-thread lock. */
@@ -300,94 +298,86 @@ __txn_close(dbenv)
if ((t_ret = __db_r_detach(dbenv, &tmgrp->reginfo, 0)) != 0 && ret == 0)
ret = t_ret;
- __os_free(tmgrp, sizeof(*tmgrp));
+ __os_free(dbenv, tmgrp);
dbenv->tx_handle = NULL;
return (ret);
}
+/*
+ * __txn_region_size --
+ * Return the amount of space needed for the txn region. Make the
+ * region large enough to hold txn_max transaction detail structures
+ * plus some space to hold thread handles and the beginning of the
+ * shalloc region and anything we need for mutex system resource
+ * recording.
+ */
+static size_t
+__txn_region_size(dbenv)
+ DB_ENV *dbenv;
+{
+ size_t s;
+
+ s = sizeof(DB_TXNREGION) +
+ dbenv->tx_max * sizeof(TXN_DETAIL) + 10 * 1024;
+#ifdef HAVE_MUTEX_SYSTEM_RESOURCES
+ if (F_ISSET(dbenv, DB_ENV_THREAD))
+ s += sizeof(REGMAINT) + TXN_MAINT_SIZE;
+#endif
+ return (s);
+}
+
+/*
+ * __txn_region_destroy
+ * Destroy any region maintenance info.
+ *
+ * PUBLIC: void __txn_region_destroy __P((DB_ENV *, REGINFO *));
+ */
+void
+__txn_region_destroy(dbenv, infop)
+ DB_ENV *dbenv;
+ REGINFO *infop;
+{
+ __db_shlocks_destroy(infop, (REGMAINT *)R_ADDR(infop,
+ ((DB_TXNREGION *)R_ADDR(infop, infop->rp->primary))->maint_off));
+
+ COMPQUIET(dbenv, NULL);
+ COMPQUIET(infop, NULL);
+}
+
+/*
+ * __txn_id_set --
+ * Set the current transaction ID and current maximum unused ID (for
+ * testing purposes only).
+ *
+ * PUBLIC: int __txn_id_set __P((DB_ENV *, u_int32_t, u_int32_t));
+ */
int
-txn_stat(dbenv, statp, db_malloc)
+__txn_id_set(dbenv, cur_txnid, max_txnid)
DB_ENV *dbenv;
- DB_TXN_STAT **statp;
- void *(*db_malloc) __P((size_t));
+ u_int32_t cur_txnid, max_txnid;
{
DB_TXNMGR *mgr;
DB_TXNREGION *region;
- DB_TXN_STAT *stats;
- TXN_DETAIL *txnp;
- size_t nbytes;
- u_int32_t nactive, ndx;
- int ret, slop;
-
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_txn_stat(dbenv, statp, db_malloc));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, DB_INIT_TXN);
+ int ret;
- *statp = NULL;
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "txn_id_set", DB_INIT_TXN);
- slop = 200;
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
+ region->last_txnid = cur_txnid;
+ region->cur_maxid = max_txnid;
-retry: R_LOCK(dbenv, &mgr->reginfo);
- nactive = region->nactive;
- R_UNLOCK(dbenv, &mgr->reginfo);
-
- /*
- * Allocate extra active structures to handle any transactions that
- * are created while we have the region unlocked.
- */
- nbytes = sizeof(DB_TXN_STAT) + sizeof(DB_TXN_ACTIVE) * (nactive + slop);
- if ((ret = __os_malloc(dbenv, nbytes, db_malloc, &stats)) != 0)
- return (ret);
-
- R_LOCK(dbenv, &mgr->reginfo);
- stats->st_last_txnid = region->last_txnid;
- stats->st_last_ckp = region->last_ckp;
- stats->st_maxtxns = region->maxtxns;
- stats->st_naborts = region->naborts;
- stats->st_nbegins = region->nbegins;
- stats->st_ncommits = region->ncommits;
- stats->st_pending_ckp = region->pending_ckp;
- stats->st_time_ckp = region->time_ckp;
- stats->st_nactive = region->nactive;
- if (stats->st_nactive > nactive + 200) {
- R_UNLOCK(dbenv, &mgr->reginfo);
- slop *= 2;
- goto retry;
+ ret = 0;
+ if (cur_txnid < TXN_MINIMUM) {
+ __db_err(dbenv, "Current ID value %lu below minimum",
+ (u_long)cur_txnid);
+ ret = EINVAL;
}
- stats->st_maxnactive = region->maxnactive;
- stats->st_txnarray = (DB_TXN_ACTIVE *)&stats[1];
-
- ndx = 0;
- for (txnp = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
- txnp != NULL;
- txnp = SH_TAILQ_NEXT(txnp, links, __txn_detail)) {
- stats->st_txnarray[ndx].txnid = txnp->txnid;
- if (txnp->parent == INVALID_ROFF)
- stats->st_txnarray[ndx].parentid = TXN_INVALID_ID;
- else
- stats->st_txnarray[ndx].parentid =
- ((TXN_DETAIL *)R_ADDR(&mgr->reginfo,
- txnp->parent))->txnid;
- stats->st_txnarray[ndx].lsn = txnp->begin_lsn;
- ndx++;
-
- if (ndx >= stats->st_nactive)
- break;
+ if (max_txnid < TXN_MINIMUM) {
+ __db_err(dbenv, "Maximum ID value %lu below minimum",
+ (u_long)max_txnid);
+ ret = EINVAL;
}
-
- stats->st_region_wait = mgr->reginfo.rp->mutex.mutex_set_wait;
- stats->st_region_nowait = mgr->reginfo.rp->mutex.mutex_set_nowait;
- stats->st_regsize = mgr->reginfo.rp->size;
-
- R_UNLOCK(dbenv, &mgr->reginfo);
-
- *statp = stats;
- return (0);
+ return (ret);
}
diff --git a/db/txn/txn_stat.c b/db/txn/txn_stat.c
index 9b6157a3b..905a2a5eb 100644
--- a/db/txn/txn_stat.c
+++ b/db/txn/txn_stat.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996-2001
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: txn_stat.c,v 11.7 2001/04/20 17:35:52 bostic Exp ";
+static const char revid[] = "$Id: txn_stat.c,v 11.22 2003/09/13 19:20:43 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,45 +17,61 @@ static const char revid[] = "Id: txn_stat.c,v 11.7 2001/04/20 17:35:52 bostic Ex
#include <string.h>
#endif
-#ifdef HAVE_RPC
-#include "db_server.h"
-#endif
-
#include "db_int.h"
-#include "txn.h"
+#include "dbinc/log.h"
+#include "dbinc/txn.h"
-#ifdef HAVE_RPC
-#include "rpc_client_ext.h"
-#endif
+static int __txn_stat __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
/*
- * txn_stat --
+ * __txn_stat_pp --
+ * DB_ENV->txn_stat pre/post processing.
*
- * EXTERN: int txn_stat __P((DB_ENV *, DB_TXN_STAT **));
+ * PUBLIC: int __txn_stat_pp __P((DB_ENV *, DB_TXN_STAT **, u_int32_t));
*/
int
-txn_stat(dbenv, statp)
+__txn_stat_pp(dbenv, statp, flags)
DB_ENV *dbenv;
DB_TXN_STAT **statp;
+ u_int32_t flags;
+{
+ int rep_check, ret;
+
+ PANIC_CHECK(dbenv);
+ ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "txn_stat", DB_INIT_TXN);
+
+ if ((ret = __db_fchk(dbenv,
+ "DB_ENV->txn_stat", flags, DB_STAT_CLEAR)) != 0)
+ return (ret);
+
+ rep_check = IS_ENV_REPLICATED(dbenv) ? 1 : 0;
+ if (rep_check)
+ __env_rep_enter(dbenv);
+ ret = __txn_stat(dbenv, statp, flags);
+ if (rep_check)
+ __env_rep_exit(dbenv);
+ return (ret);
+}
+
+/*
+ * __txn_stat --
+ * DB_ENV->txn_stat.
+ */
+static int
+__txn_stat(dbenv, statp, flags)
+ DB_ENV *dbenv;
+ DB_TXN_STAT **statp;
+ u_int32_t flags;
{
DB_TXNMGR *mgr;
DB_TXNREGION *region;
DB_TXN_STAT *stats;
TXN_DETAIL *txnp;
size_t nbytes;
- u_int32_t ndx;
+ u_int32_t maxtxn, ndx;
int ret;
-#ifdef HAVE_RPC
- if (F_ISSET(dbenv, DB_ENV_RPCCLIENT))
- return (__dbcl_txn_stat(dbenv, statp));
-#endif
-
- PANIC_CHECK(dbenv);
- ENV_REQUIRES_CONFIG(dbenv, dbenv->tx_handle, "txn_stat", DB_INIT_TXN);
-
*statp = NULL;
-
mgr = dbenv->tx_handle;
region = mgr->reginfo.primary;
@@ -65,43 +81,50 @@ txn_stat(dbenv, statp)
* not going to be that large. Don't have to lock anything to look
* at the region's maximum active transactions value, it's read-only
* and never changes after the region is created.
+ *
+ * The maximum active transactions isn't a hard limit, so allocate
+ * some extra room, and don't walk off the end.
*/
- nbytes = sizeof(DB_TXN_STAT) + sizeof(DB_TXN_ACTIVE) * region->maxtxns;
+ maxtxn = region->maxtxns + (region->maxtxns / 10) + 10;
+ nbytes = sizeof(DB_TXN_STAT) + sizeof(DB_TXN_ACTIVE) * maxtxn;
if ((ret = __os_umalloc(dbenv, nbytes, &stats)) != 0)
return (ret);
R_LOCK(dbenv, &mgr->reginfo);
+ memcpy(stats, &region->stat, sizeof(*stats));
stats->st_last_txnid = region->last_txnid;
stats->st_last_ckp = region->last_ckp;
- stats->st_maxtxns = region->maxtxns;
- stats->st_naborts = region->naborts;
- stats->st_nbegins = region->nbegins;
- stats->st_ncommits = region->ncommits;
- stats->st_nrestores = region->nrestores;
- stats->st_pending_ckp = region->pending_ckp;
stats->st_time_ckp = region->time_ckp;
- stats->st_nactive = region->nactive;
- stats->st_maxnactive = region->maxnactive;
stats->st_txnarray = (DB_TXN_ACTIVE *)&stats[1];
- ndx = 0;
- for (txnp = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
- txnp != NULL;
- txnp = SH_TAILQ_NEXT(txnp, links, __txn_detail)) {
+ for (ndx = 0,
+ txnp = SH_TAILQ_FIRST(&region->active_txn, __txn_detail);
+ txnp != NULL && ndx < maxtxn;
+ txnp = SH_TAILQ_NEXT(txnp, links, __txn_detail), ++ndx) {
stats->st_txnarray[ndx].txnid = txnp->txnid;
if (txnp->parent == INVALID_ROFF)
- stats->st_txnarray[ndx].parentid = TXN_INVALID_ID;
+ stats->st_txnarray[ndx].parentid = TXN_INVALID;
else
stats->st_txnarray[ndx].parentid =
((TXN_DETAIL *)R_ADDR(&mgr->reginfo,
txnp->parent))->txnid;
stats->st_txnarray[ndx].lsn = txnp->begin_lsn;
- ndx++;
+ if ((stats->st_txnarray[ndx].xa_status = txnp->xa_status) != 0)
+ memcpy(stats->st_txnarray[ndx].xid,
+ txnp->xid, DB_XIDDATASIZE);
}
stats->st_region_wait = mgr->reginfo.rp->mutex.mutex_set_wait;
stats->st_region_nowait = mgr->reginfo.rp->mutex.mutex_set_nowait;
stats->st_regsize = mgr->reginfo.rp->size;
+ if (LF_ISSET(DB_STAT_CLEAR)) {
+ mgr->reginfo.rp->mutex.mutex_set_wait = 0;
+ mgr->reginfo.rp->mutex.mutex_set_nowait = 0;
+ memset(&region->stat, 0, sizeof(region->stat));
+ region->stat.st_maxtxns = region->maxtxns;
+ region->stat.st_maxnactive =
+ region->stat.st_nactive = stats->st_nactive;
+ }
R_UNLOCK(dbenv, &mgr->reginfo);
diff --git a/db/txn/txn_util.c b/db/txn/txn_util.c
index 8656d2ece..1a9e901f5 100644
--- a/db/txn/txn_util.c
+++ b/db/txn/txn_util.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2001-2002
+ * Copyright (c) 2001-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "Id: txn_util.c,v 11.18 2002/08/06 06:25:12 bostic Exp ";
+static const char revid[] = "$Id: txn_util.c,v 11.25 2003/12/03 14:33:07 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -17,9 +17,12 @@ static const char revid[] = "Id: txn_util.c,v 11.18 2002/08/06 06:25:12 bostic E
#endif
#include "db_int.h"
+#include "dbinc/db_page.h"
#include "dbinc/db_shash.h"
#include "dbinc/lock.h"
+#include "dbinc/mp.h"
#include "dbinc/txn.h"
+#include "dbinc/db_am.h"
typedef struct __txn_event TXN_EVENT;
struct __txn_event {
@@ -27,6 +30,10 @@ struct __txn_event {
TAILQ_ENTRY(__txn_event) links;
union {
struct {
+ /* Delayed close. */
+ DB *dbp;
+ } c;
+ struct {
/* Delayed remove. */
char *name;
u_int8_t *fileid;
@@ -41,6 +48,34 @@ struct __txn_event {
};
/*
+ * __txn_closeevent --
+ *
+ * Creates a close event that can be added to the [so-called] commit list, so
+ * that we can redo a failed DB handle close once we've aborted the transaction.
+ *
+ * PUBLIC: int __txn_closeevent __P((DB_ENV *, DB_TXN *, DB *));
+ */
+int
+__txn_closeevent(dbenv, txn, dbp)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ DB *dbp;
+{
+ int ret;
+ TXN_EVENT *e;
+
+ e = NULL;
+ if ((ret = __os_calloc(dbenv, 1, sizeof(TXN_EVENT), &e)) != 0)
+ return (ret);
+
+ e->u.c.dbp = dbp;
+ e->op = TXN_CLOSE;
+ TAILQ_INSERT_TAIL(&txn->events, e, links);
+
+ return (0);
+}
+
+/*
* __txn_remevent --
*
* Creates a remove event that can be added to the commit list.
@@ -82,6 +117,34 @@ err: if (e != NULL)
return (ret);
}
+/*
+ * __txn_remrem --
+ * Remove a remove event because the remove has be superceeded,
+ * by a create of the same name, for example.
+ *
+ * PUBLIC: void __txn_remrem __P((DB_ENV *, DB_TXN *, const char *));
+ */
+void
+__txn_remrem(dbenv, txn, name)
+ DB_ENV *dbenv;
+ DB_TXN *txn;
+ const char *name;
+{
+ TXN_EVENT *e, *next_e;
+
+ for (e = TAILQ_FIRST(&txn->events); e != NULL; e = next_e) {
+ next_e = TAILQ_NEXT(e, links);
+ if (e->op != TXN_REMOVE || strcmp(name, e->u.r.name) != 0)
+ continue;
+ TAILQ_REMOVE(&txn->events, e, links);
+ __os_free(dbenv, e->u.r.name);
+ if (e->u.r.fileid != NULL)
+ __os_free(dbenv, e->u.r.fileid);
+ __os_free(dbenv, e);
+ }
+
+ return;
+}
/*
* __txn_lockevent --
@@ -169,10 +232,10 @@ __txn_remlock(dbenv, txn, lock, locker)
} while (0)
int
-__txn_doevents(dbenv, txn, is_commit, preprocess)
+__txn_doevents(dbenv, txn, opcode, preprocess)
DB_ENV *dbenv;
DB_TXN *txn;
- int is_commit, preprocess;
+ int opcode, preprocess;
{
DB_LOCKREQ req;
TXN_EVENT *e;
@@ -197,22 +260,39 @@ __txn_doevents(dbenv, txn, is_commit, preprocess)
return (ret);
}
+ /*
+ * Prepare should only cause a preprocess, since the transaction
+ * isn't over.
+ */
+ DB_ASSERT(opcode != TXN_PREPARE);
while ((e = TAILQ_FIRST(&txn->events)) != NULL) {
TAILQ_REMOVE(&txn->events, e, links);
- if (!is_commit)
+ /*
+ * Most deferred events should only happen on
+ * commits, not aborts or prepares. The one exception
+ * is a close which gets done on commit and abort, but
+ * not prepare. If we're not doing operations, then we
+ * can just go free resources.
+ */
+ if (opcode == TXN_ABORT && e->op != TXN_CLOSE)
goto dofree;
switch (e->op) {
+ case TXN_CLOSE:
+ /* If we didn't abort this txn, we screwed up badly. */
+ DB_ASSERT(opcode == TXN_ABORT);
+ if ((t_ret =
+ __db_close(e->u.c.dbp, NULL, 0)) != 0 && ret == 0)
+ ret = t_ret;
+ break;
case TXN_REMOVE:
if (e->u.r.fileid != NULL) {
- if ((t_ret = dbenv->memp_nameop(dbenv,
+ if ((t_ret = __memp_nameop(dbenv,
e->u.r.fileid,
NULL, e->u.r.name, NULL)) != 0 && ret == 0)
ret = t_ret;
- __os_free(dbenv, e->u.r.fileid);
} else if ((t_ret =
__os_unlink(dbenv, e->u.r.name)) != 0 && ret == 0)
ret = t_ret;
- __os_free(dbenv, e->u.r.name);
break;
case TXN_TRADE:
DO_TRADE;
@@ -227,7 +307,19 @@ __txn_doevents(dbenv, txn, is_commit, preprocess)
/* This had better never happen. */
DB_ASSERT(0);
}
-dofree: __os_free(dbenv, e);
+dofree:
+ /* Free resources here. */
+ switch (e->op) {
+ case TXN_REMOVE:
+ if (e->u.r.fileid != NULL)
+ __os_free(dbenv, e->u.r.fileid);
+ __os_free(dbenv, e->u.r.name);
+ break;
+
+ default:
+ break;
+ }
+ __os_free(dbenv, e);
}
return (ret);
diff --git a/db/xa/xa.c b/db/xa/xa.c
index b13a6d503..4809fa00b 100644
--- a/db/xa/xa.c
+++ b/db/xa/xa.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: xa.c,v 11.10 2000/12/14 07:39:14 ubell Exp $";
+static const char revid[] = "$Id: xa.c,v 11.29 2003/04/24 16:55:09 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -19,11 +19,7 @@ static const char revid[] = "$Id: xa.c,v 11.10 2000/12/14 07:39:14 ubell Exp $";
#endif
#include "db_int.h"
-#include "db_page.h"
-#include "log.h"
-#include "txn.h"
-#include "db_am.h"
-#include "db_dispatch.h"
+#include "dbinc/txn.h"
static int __db_xa_close __P((char *, int, long));
static int __db_xa_commit __P((XID *, int, long));
@@ -35,8 +31,7 @@ static int __db_xa_prepare __P((XID *, int, long));
static int __db_xa_recover __P((XID *, long, int, long));
static int __db_xa_rollback __P((XID *, int, long));
static int __db_xa_start __P((XID *, int, long));
-static void __xa_txn_end __P((DB_ENV *));
-static void __xa_txn_init __P((DB_ENV *, TXN_DETAIL *, size_t));
+static void __xa_put_txn __P((DB_ENV *, DB_TXN *));
/*
* Possible flag values:
@@ -65,6 +60,129 @@ const struct xa_switch_t db_xa_switch = {
};
/*
+ * If you want your XA server to be multi-threaded, then you must
+ * edit this file and change:
+ * #undef XA_MULTI_THREAD
+ * to:
+ * #define XA_MULTI_THREAD 1
+ *
+ * You must then modify the FILL ME IN; section below to assign a
+ * 32-bit unsigned, unique thread ID to the variable tid. If no
+ * such thread ID is available, e.g., you're using pthreads on a POSIX
+ * 1003.1 system where a pthread_t is declared as a structure, you
+ * will probably want to change the tid field of the DB_TXN structure
+ * to be the correct type in which to define a thread ID on the system,
+ * and then modify both the FILL ME IN section and then subsequent
+ * comparison of the thread IDs in the XA transaction list, as the
+ * current simple equality tests may not work.
+ */
+
+#undef XA_MULTI_THREAD
+
+/*
+ * __xa_get_txn --
+ * Return a pointer to the current transaction structure for the
+ * designated environment. If do_init is non-zero and we don't find a
+ * structure for the current thread, then create a new structure for it.
+ *
+ * PUBLIC: int __xa_get_txn __P((DB_ENV *, DB_TXN **, int));
+ */
+int
+__xa_get_txn(env, txnp, do_init)
+ DB_ENV *env;
+ DB_TXN **txnp;
+ int do_init;
+{
+ int ret;
+#ifdef XA_MULTI_THREAD
+ DB_TXN *t;
+ u_int32_t tid;
+ DB_TXNMGR *mgr;
+#else
+ COMPQUIET(do_init, 0);
+#endif
+ ret = 0;
+
+#ifdef XA_MULTI_THREAD
+ /* Specify Thread-ID retrieval here. */
+ tid = FILL ME IN
+ *txnp = NULL;
+ mgr = (DB_TXNMGR *)env->tx_handle;
+
+ /*
+ * We need to protect the xa_txn linked list, but the
+ * environment does not have a mutex. Since we are in
+ * an XA transaction environment, we know that there is
+ * a transaction structure, so use its mutex.
+ */
+ DB_ASSERT(env->tx_handle != NULL);
+ MUTEX_THREAD_LOCK(mgr->mutexp);
+ for (t = TAILQ_FIRST(&env->xa_txn);
+ t != NULL;
+ t = TAILQ_NEXT(t, xalinks))
+ /*
+ * FILL ME IN; if tids are not a 32-bit integral type;
+ * put a comparison here that will work.
+ */
+ if (t->tid == tid) {
+ *txnp = t;
+ break;
+ }
+ MUTEX_THREAD_UNLOCK(mgr-&gt;mutexp);
+
+ if (*txnp == NULL) {
+ if (!do_init)
+ ret = EINVAL;
+ else if ((ret =
+ __os_malloc(env, sizeof(DB_TXN), NULL, txnp)) == 0) {
+ (*txnp)->tid = tid;
+ MUTEX_THREAD_LOCK(mgr->mutexp);
+ TAILQ_INSERT_HEAD(&env->xa_txn, *txnp, xalinks);
+ MUTEX_THREAD_UNLOCK(mgr->mutexp);
+ }
+ }
+#else
+ *txnp = TAILQ_FIRST(&env->xa_txn);
+ if (*txnp == NULL &&
+ (ret = __os_calloc(env, 1, sizeof(DB_TXN), txnp)) == 0) {
+ (*txnp)->txnid = TXN_INVALID;
+ TAILQ_INSERT_HEAD(&env->xa_txn, *txnp, xalinks);
+ }
+#endif
+
+ return (ret);
+}
+
+static void
+__xa_put_txn(env, txnp)
+ DB_ENV *env;
+ DB_TXN *txnp;
+{
+#ifdef XA_MULTI_THREAD
+ DB_TXNMGR *mgr;
+ mgr = (DB_TXNMGR *)env->tx_handle;
+
+ MUTEX_THREAD_LOCK(mgr->mutexp);
+ TAILQ_REMOVE(&env->xa_txn, txnp, xalinks);
+ MUTEX_THREAD_UNLOCK(mgr->mutexp);
+ __os_free(env, txnp);
+#else
+ COMPQUIET(env, NULL);
+ txnp->txnid = TXN_INVALID;
+#endif
+}
+
+#ifdef XA_MULTI_THREAD
+#define XA_FLAGS \
+ DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | \
+ DB_INIT_TXN | DB_THREAD
+#else
+#define XA_FLAGS \
+ DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | \
+ DB_INIT_TXN
+#endif
+
+/*
* __db_xa_open --
* The open call in the XA protocol. The rmid field is an id number
* that the TM assigned us and will pass us on every xa call. We need to
@@ -98,8 +216,6 @@ __db_xa_open(xa_info, rmid, flags)
return (XAER_RMERR);
/* Open a new environment. */
-#define XA_FLAGS \
- DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN
if (db_env_create(&env, 0) != 0)
return (XAER_RMERR);
if (env->open(env, xa_info, XA_FLAGS, 0) != 0)
@@ -110,9 +226,7 @@ __db_xa_open(xa_info, rmid, flags)
goto err;
/* Allocate space for the current transaction. */
- if (__os_calloc(env, 1, sizeof(DB_TXN), &env->xa_txn) != 0)
- goto err;
- env->xa_txn->txnid = TXN_INVALID;
+ TAILQ_INIT(&env->xa_txn);
return (XA_OK);
@@ -136,6 +250,7 @@ __db_xa_close(xa_info, rmid, flags)
long flags;
{
DB_ENV *env;
+ DB_TXN *t;
int ret, t_ret;
COMPQUIET(xa_info, NULL);
@@ -150,15 +265,17 @@ __db_xa_close(xa_info, rmid, flags)
return (XA_OK);
/* Check if there are any pending transactions. */
- if (env->xa_txn != NULL && env->xa_txn->txnid != TXN_INVALID)
+ if ((t = TAILQ_FIRST(&env->xa_txn)) != NULL && t->txnid != TXN_INVALID)
return (XAER_PROTO);
/* Destroy the mapping. */
ret = __db_unmap_rmid(rmid);
/* Discard space held for the current transaction. */
- if (env->xa_txn != NULL)
- __os_free(env->xa_txn, sizeof(DB_TXN));
+ while ((t = TAILQ_FIRST(&env->xa_txn)) != NULL) {
+ TAILQ_REMOVE(&env->xa_txn, t, xalinks);
+ __os_free(env, t);
+ }
/* Close the environment. */
if ((t_ret = env->close(env, 0)) != 0 && ret == 0)
@@ -178,6 +295,7 @@ __db_xa_start(xid, rmid, flags)
long flags;
{
DB_ENV *env;
+ DB_TXN *txnp;
TXN_DETAIL *td;
size_t off;
int is_known;
@@ -220,15 +338,18 @@ __db_xa_start(xid, rmid, flags)
return (XA_RBOTHER);
/* Now, fill in the global transaction structure. */
- __xa_txn_init(env, td, off);
+ if (__xa_get_txn(env, &txnp, 1) != 0)
+ return (XAER_RMERR);
+ __txn_continue(env, txnp, td, off);
td->xa_status = TXN_XA_STARTED;
} else {
- if (__txn_xa_begin(env, env->xa_txn) != 0)
+ if (__xa_get_txn(env, &txnp, 1) != 0)
+ return (XAER_RMERR);
+ if (__txn_xa_begin(env, txnp))
return (XAER_RMERR);
- (void)__db_map_xid(env, xid, env->xa_txn->off);
+ (void)__db_map_xid(env, xid, txnp->off);
td = (TXN_DETAIL *)
- R_ADDR(&((DB_TXNMGR *)env->tx_handle)->reginfo,
- env->xa_txn->off);
+ R_ADDR(&((DB_TXNMGR *)env->tx_handle)->reginfo, txnp->off);
td->xa_status = TXN_XA_STARTED;
}
return (XA_OK);
@@ -258,7 +379,9 @@ __db_xa_end(xid, rmid, flags)
if (__db_xid_to_txn(env, xid, &off) != 0)
return (XAER_NOTA);
- txn = env->xa_txn;
+ if (__xa_get_txn(env, &txn, 0) != 0)
+ return (XAER_RMERR);
+
if (off != txn->off)
return (XAER_PROTO);
@@ -284,7 +407,7 @@ __db_xa_end(xid, rmid, flags)
else
td->xa_status = TXN_XA_ENDED;
- txn->txnid = TXN_INVALID;
+ __xa_put_txn(env, txn);
return (XA_OK);
}
@@ -299,6 +422,7 @@ __db_xa_prepare(xid, rmid, flags)
long flags;
{
DB_ENV *env;
+ DB_TXN *txnp;
TXN_DETAIL *td;
size_t off;
@@ -318,7 +442,6 @@ __db_xa_prepare(xid, rmid, flags)
if (__db_xid_to_txn(env, xid, &off) != 0)
return (XAER_NOTA);
-
td = (TXN_DETAIL *)R_ADDR(&((DB_TXNMGR *)env->tx_handle)->reginfo, off);
if (td->xa_status == TXN_XA_DEADLOCKED)
return (XA_RBDEADLOCK);
@@ -327,15 +450,17 @@ __db_xa_prepare(xid, rmid, flags)
return (XAER_PROTO);
/* Now, fill in the global transaction structure. */
- __xa_txn_init(env, td, off);
+ if (__xa_get_txn(env, &txnp, 0) != 0)
+ return (XAER_PROTO);
+ __txn_continue(env, txnp, td, off);
- if (txn_prepare(env->xa_txn) != 0)
+ if (txnp->prepare(txnp, (u_int8_t *)xid->data) != 0)
return (XAER_RMERR);
td->xa_status = TXN_XA_PREPARED;
/* No fatal value that would require an XAER_RMFAIL. */
- __xa_txn_end(env);
+ __xa_put_txn(env, txnp);
return (XA_OK);
}
@@ -350,6 +475,7 @@ __db_xa_commit(xid, rmid, flags)
long flags;
{
DB_ENV *env;
+ DB_TXN *txnp;
TXN_DETAIL *td;
size_t off;
@@ -385,13 +511,15 @@ __db_xa_commit(xid, rmid, flags)
return (XAER_PROTO);
/* Now, fill in the global transaction structure. */
- __xa_txn_init(env, td, off);
+ if (__xa_get_txn(env, &txnp, 0) != 0)
+ return (XAER_RMERR);
+ __txn_continue(env, txnp, td, off);
- if (txn_commit(env->xa_txn, 0) != 0)
+ if (txnp->commit(txnp, 0) != 0)
return (XAER_RMERR);
/* No fatal value that would require an XAER_RMFAIL. */
- __xa_txn_end(env);
+ __xa_put_txn(env, txnp);
return (XA_OK);
}
@@ -409,118 +537,26 @@ __db_xa_recover(xids, count, rmid, flags)
long count, flags;
int rmid;
{
- __txn_xa_regop_args *argp;
- DBT data;
DB_ENV *env;
- DB_LOG *log;
- XID *xidp;
- int err, ret;
- u_int32_t rectype, txnid;
-
- ret = 0;
- xidp = xids;
+ u_int32_t newflags;
+ long rval;
/* If the environment is closed, then we're done. */
if (__db_rmid_to_env(rmid, &env) != 0)
return (XAER_PROTO);
- /*
- * If we are starting a scan, then we need to figure out where
- * to begin. If we are not starting a scan, we'll start from
- * wherever the log cursor is. Since XA apps cannot be threaded,
- * we don't have to worry about someone else having moved it.
- */
- log = env->lg_handle;
- if (LF_ISSET(TMSTARTRSCAN)) {
- if ((err = __log_findckp(env, &log->xa_first)) == DB_NOTFOUND) {
- /*
- * If there were no log files, then we have no
- * transactions to return, so we simply return 0.
- */
- return (0);
- }
- if ((err = __db_txnlist_init(env, &log->xa_info)) != 0)
- return (XAER_RMERR);
- } else {
- /*
- * If we are not starting a scan, the log cursor had
- * better be set.
- */
- if (IS_ZERO_LSN(log->xa_lsn))
- return (XAER_PROTO);
- }
-
- /*
- * At this point log->xa_first contains the point in the log
- * to which we need to roll back. If we are starting a scan,
- * we'll start at the last record; if we're continuing a scan,
- * we'll have to start at log->xa_lsn.
- */
-
- memset(&data, 0, sizeof(data));
- for (err = log_get(env, &log->xa_lsn, &data,
- LF_ISSET(TMSTARTRSCAN) ? DB_LAST : DB_SET);
- err == 0 && log_compare(&log->xa_lsn, &log->xa_first) > 0;
- err = log_get(env, &log->xa_lsn, &data, DB_PREV)) {
- memcpy(&rectype, data.data, sizeof(rectype));
-
- /*
- * The only record type we care about is an DB_txn_xa_regop.
- * If it's a commit, we have to add it to a txnlist. If it's
- * a prepare, and we don't have a commit, then we return it.
- * We are redoing some of what's in the xa_regop_recovery
- * code, but we have to do it here so we can get at the xid
- * in the record.
- */
- if (rectype != DB_txn_xa_regop && rectype != DB_txn_regop)
- continue;
-
- memcpy(&txnid, (u_int8_t *)data.data + sizeof(rectype),
- sizeof(txnid));
- err = __db_txnlist_find(log->xa_info, txnid);
- switch (rectype) {
- case DB_txn_regop:
- if (err == DB_NOTFOUND)
- __db_txnlist_add(env, log->xa_info, txnid, 0);
- err = 0;
- break;
- case DB_txn_xa_regop:
- /*
- * This transaction is committed, so we needn't read
- * the record and do anything.
- */
- if (err == 0)
- break;
- if ((err =
- __txn_xa_regop_read(env, data.data, &argp)) != 0) {
- ret = XAER_RMERR;
- goto out;
- }
-
- xidp->formatID = argp->formatID;
- xidp->gtrid_length = argp->gtrid;
- xidp->bqual_length = argp->bqual;
- memcpy(xidp->data, argp->xid.data, argp->xid.size);
- ret++;
- xidp++;
- __os_free(argp, sizeof(*argp));
- if (ret == count)
- goto done;
- break;
- }
- }
-
- if (err != 0 && err != DB_NOTFOUND)
- goto out;
-
-done: if (LF_ISSET(TMENDRSCAN)) {
- ZERO_LSN(log->xa_lsn);
- ZERO_LSN(log->xa_first);
+ if (LF_ISSET(TMSTARTRSCAN))
+ newflags = DB_FIRST;
+ else if (LF_ISSET(TMENDRSCAN))
+ newflags = DB_LAST;
+ else
+ newflags = DB_NEXT;
-out: __db_txnlist_end(env, log->xa_info);
- log->xa_info = NULL;
- }
- return (ret);
+ rval = 0;
+ if (__txn_get_prepared(env, xids, NULL, count, &rval, newflags) != 0)
+ return (XAER_RMERR);
+ else
+ return (rval);
}
/*
@@ -534,6 +570,7 @@ __db_xa_rollback(xid, rmid, flags)
long flags;
{
DB_ENV *env;
+ DB_TXN *txnp;
TXN_DETAIL *td;
size_t off;
@@ -555,17 +592,20 @@ __db_xa_rollback(xid, rmid, flags)
if (td->xa_status == TXN_XA_ABORTED)
return (XA_RBOTHER);
- if (td->xa_status != TXN_XA_ENDED && td->xa_status != TXN_XA_SUSPENDED
- && td->xa_status != TXN_XA_PREPARED)
+ if (td->xa_status != TXN_XA_ENDED &&
+ td->xa_status != TXN_XA_SUSPENDED &&
+ td->xa_status != TXN_XA_PREPARED)
return (XAER_PROTO);
/* Now, fill in the global transaction structure. */
- __xa_txn_init(env, td, off);
- if (txn_abort(env->xa_txn) != 0)
+ if (__xa_get_txn(env, &txnp, 0) != 0)
+ return (XAER_RMERR);
+ __txn_continue(env, txnp, td, off);
+ if (txnp->abort(txnp) != 0)
return (XAER_RMERR);
/* No fatal value that would require an XAER_RMFAIL. */
- __xa_txn_end(env);
+ __xa_put_txn(env, txnp);
return (XA_OK);
}
@@ -622,40 +662,3 @@ __db_xa_complete(handle, retval, rmid, flags)
return (XAER_INVAL);
}
-
-/*
- * __xa_txn_init --
- * Fill in the fields of the local transaction structure given
- * the detail transaction structure.
- */
-static void
-__xa_txn_init(env, td, off)
- DB_ENV *env;
- TXN_DETAIL *td;
- size_t off;
-{
- DB_TXN *txn;
-
- txn = env->xa_txn;
- txn->mgrp = env->tx_handle;
- txn->parent = NULL;
- txn->last_lsn = td->last_lsn;
- txn->txnid = td->txnid;
- txn->off = off;
- txn->flags = 0;
-}
-
-/*
- * __xa_txn_end --
- * Invalidate a transaction structure that was generated by xa_txn_init.
- */
-static void
-__xa_txn_end(env)
- DB_ENV *env;
-{
- DB_TXN *txn;
-
- txn = env->xa_txn;
- if (txn != NULL)
- txn->txnid = TXN_INVALID;
-}
diff --git a/db/xa/xa_db.c b/db/xa/xa_db.c
index ba3dbfedd..40f7c8d28 100644
--- a/db/xa/xa_db.c
+++ b/db/xa/xa_db.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1998, 1999, 2000
+ * Copyright (c) 1998-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: xa_db.c,v 11.9 2000/09/06 18:57:59 ubell Exp $";
+static const char revid[] = "$Id: xa_db.c,v 11.25 2003/04/24 14:47:36 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -16,15 +16,13 @@ static const char revid[] = "$Id: xa_db.c,v 11.9 2000/09/06 18:57:59 ubell Exp $
#endif
#include "db_int.h"
-#include "xa.h"
-#include "xa_ext.h"
-#include "txn.h"
+#include "dbinc/txn.h"
static int __xa_close __P((DB *, u_int32_t));
static int __xa_cursor __P((DB *, DB_TXN *, DBC **, u_int32_t));
static int __xa_del __P((DB *, DB_TXN *, DBT *, u_int32_t));
static int __xa_get __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
-static int __xa_open __P((DB *,
+static int __xa_open __P((DB *, DB_TXN *,
const char *, const char *, DBTYPE, u_int32_t, int));
static int __xa_put __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
@@ -33,11 +31,23 @@ typedef struct __xa_methods {
int (*cursor) __P((DB *, DB_TXN *, DBC **, u_int32_t));
int (*del) __P((DB *, DB_TXN *, DBT *, u_int32_t));
int (*get) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
- int (*open) __P((DB *,
+ int (*open) __P((DB *, DB_TXN *,
const char *, const char *, DBTYPE, u_int32_t, int));
int (*put) __P((DB *, DB_TXN *, DBT *, DBT *, u_int32_t));
} XA_METHODS;
+#define SET_TXN(PARAM, LOCAL) { \
+ (LOCAL) = NULL; \
+ if (!LF_ISSET(DB_AUTO_COMMIT)) { \
+ if ((PARAM) != NULL) \
+ (LOCAL) = (PARAM); \
+ else if (__xa_get_txn(dbp->dbenv, &(LOCAL), 0) != 0) \
+ (LOCAL) = NULL; \
+ else if ((LOCAL) != NULL && (LOCAL)->txnid == TXN_INVALID) \
+ (LOCAL) = NULL; \
+ } \
+}
+
/*
* __db_xa_create --
* DB XA constructor.
@@ -73,19 +83,22 @@ __db_xa_create(dbp)
*/
static int
-__xa_open(dbp, name, subdb, type, flags, mode)
+__xa_open(dbp, txn, name, subdb, type, flags, mode)
DB *dbp;
+ DB_TXN *txn;
const char *name, *subdb;
DBTYPE type;
u_int32_t flags;
int mode;
{
+ DB_TXN *t;
XA_METHODS *xam;
int ret;
xam = (XA_METHODS *)dbp->xa_internal;
- if ((ret = xam->open(dbp, name, subdb, type, flags, mode)) != 0)
+ SET_TXN(txn, t);
+ if ((ret = xam->open(dbp, t, name, subdb, type, flags, mode)) != 0)
return (ret);
xam->cursor = dbp->cursor;
@@ -109,8 +122,10 @@ __xa_cursor(dbp, txn, dbcp, flags)
{
DB_TXN *t;
- t = txn != NULL && txn == dbp->open_txn ? txn : dbp->dbenv->xa_txn;
- if (t->txnid == TXN_INVALID)
+ if (txn != NULL)
+ t = txn;
+ else if (__xa_get_txn(dbp->dbenv, &t, 0) != 0 ||
+ t->txnid== TXN_INVALID)
t = NULL;
return (((XA_METHODS *)dbp->xa_internal)->cursor (dbp, t, dbcp, flags));
@@ -125,10 +140,7 @@ __xa_del(dbp, txn, key, flags)
{
DB_TXN *t;
- t = txn != NULL && txn == dbp->open_txn ? txn : dbp->dbenv->xa_txn;
- if (t->txnid == TXN_INVALID)
- t = NULL;
-
+ SET_TXN(txn, t);
return (((XA_METHODS *)dbp->xa_internal)->del(dbp, t, key, flags));
}
@@ -141,7 +153,7 @@ __xa_close(dbp, flags)
real_close = ((XA_METHODS *)dbp->xa_internal)->close;
- __os_free(dbp->xa_internal, sizeof(XA_METHODS));
+ __os_free(dbp->dbenv, dbp->xa_internal);
dbp->xa_internal = NULL;
return (real_close(dbp, flags));
@@ -156,10 +168,7 @@ __xa_get(dbp, txn, key, data, flags)
{
DB_TXN *t;
- t = txn != NULL && txn == dbp->open_txn ? txn : dbp->dbenv->xa_txn;
- if (t->txnid == TXN_INVALID)
- t = NULL;
-
+ SET_TXN(txn, t);
return (((XA_METHODS *)dbp->xa_internal)->get
(dbp, t, key, data, flags));
}
@@ -173,9 +182,7 @@ __xa_put(dbp, txn, key, data, flags)
{
DB_TXN *t;
- t = txn != NULL && txn == dbp->open_txn ? txn : dbp->dbenv->xa_txn;
- if (t->txnid == TXN_INVALID)
- t = NULL;
+ SET_TXN(txn, t);
return (((XA_METHODS *)dbp->xa_internal)->put
(dbp, t, key, data, flags));
diff --git a/db/xa/xa_map.c b/db/xa/xa_map.c
index 1af268477..7b7834595 100644
--- a/db/xa/xa_map.c
+++ b/db/xa/xa_map.c
@@ -1,14 +1,14 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 1997, 1998, 1999, 2000
+ * Copyright (c) 1996-2003
* Sleepycat Software. All rights reserved.
*/
#include "db_config.h"
#ifndef lint
-static const char revid[] = "$Id: xa_map.c,v 11.5 2000/11/30 00:58:46 ubell Exp $";
+static const char revid[] = "$Id: xa_map.c,v 11.20 2003/01/08 06:05:15 bostic Exp $";
#endif /* not lint */
#ifndef NO_SYSTEM_INCLUDES
@@ -18,7 +18,7 @@ static const char revid[] = "$Id: xa_map.c,v 11.5 2000/11/30 00:58:46 ubell Exp
#endif
#include "db_int.h"
-#include "txn.h"
+#include "dbinc/txn.h"
/*
* This file contains all the mapping information that we need to support
@@ -72,31 +72,9 @@ __db_xid_to_txn(dbenv, xid, offp)
XID *xid;
size_t *offp;
{
- DB_TXNMGR *mgr;
- DB_TXNREGION *tmr;
struct __txn_detail *td;
- mgr = dbenv->tx_handle;
- tmr = mgr->reginfo.primary;
-
- /*
- * Search the internal active transaction table to find the
- * matching xid. If this is a performance hit, then we
- * can create a hash table, but I doubt it's worth it.
- */
- R_LOCK(dbenv, &mgr->reginfo);
- for (td = SH_TAILQ_FIRST(&tmr->active_txn, __txn_detail);
- td != NULL;
- td = SH_TAILQ_NEXT(td, links, __txn_detail))
- if (memcmp(xid->data, td->xid, XIDDATASIZE) == 0)
- break;
- R_UNLOCK(dbenv, &mgr->reginfo);
-
- if (td == NULL)
- return (EINVAL);
-
- *offp = R_OFFSET(&mgr->reginfo, td);
- return (0);
+ return (__txn_map_gid(dbenv, (u_int8_t *)xid->data, &td, offp));
}
/*